[
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\nindent_style = tab\nindent_size = 4\ncharset = utf-8\nend_of_line = lf\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.{lua,xml,toc,luacheckrc}]\nindent_style = tab\ntab_width = 4\n\n[*/Libraries/**.{lua,xml,toc}]\ntrim_trailing_whitespace = false\ninsert_final_newline = none\n\n[*.{yml,gitattributes,gitignore}]\nindent_style = space\nindent_size = 2\n"
  },
  {
    "path": ".gitattributes",
    "content": ".github             export-ignore\n.gitattributes      export-ignore\n.gitignore          export-ignore\n.luacheckrc         export-ignore\n.travis.yml         export-ignore\n.editorconfig       export-ignore\n*ISSUE_TEMPLATE.md  export-ignore\n*readme.md          export-ignore\n*README.md          export-ignore\n\n* text=auto\n\n# GitHub\n.github         text\n.gitattributes  text\n*.md            text\n\n# Source files\n*.lua           text\n*.xml           text\n*.toc           text\n\n# Fonts\n*.ttf           binary\n\n# Sounds\n*.ogg           binary\n*.mp3           binary\n*.wav           binary\n\n# Textures\n*.blp           binary\n*.tga           binary\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: [\"https://streamelements.com/the_zidras/tip\", \"https://paypal.me/zidras\"]\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "content": "name: 🐞 Bug Report\ndescription: File a bug report\ntitle: \"[BUG] \"\nlabels: [bug]\nbody:\n- type: checkboxes\n  attributes:\n    label: Are you using the latest DBM version in a Warmane 3.3.5a realm (Icecrown, Lordaeron or Frostmourne)?\n    options:\n    - label: \"Yes\"\n      required: true\n- type: input\n  attributes:\n    label: DBM version\n    description: \"`/dbm ver` to check your DBM version (including the time and date).\"\n    placeholder: \"DBM 9.2.26 alpha (2023/01/19 21:42:43)\"\n  validations:\n    required: true\n- type: textarea\n  attributes:\n    label: Current Behavior\n    description: A concise description of what you're experiencing.\n  validations:\n    required: true\n- type: textarea\n  attributes:\n    label: Expected Behavior\n    description: A concise description of what you expected to happen.\n  validations:\n    required: true\n- type: textarea\n  attributes:\n    label: Steps To Reproduce\n    description: Steps to reproduce the behavior.\n    placeholder: |\n      1. Go to...\n      2. With this config...\n      3. Click on '...'\n      4. See error...\n  validations:\n    required: true\n- type: textarea\n  attributes:\n    label: Transcriptor log\n    description: If bug is related to a raid mechanic/timer, attaching a Transcriptor log is mandatory (https://github.com/Zidras/Transcriptor-WOTLK#how-to-use). Otherwise, type \"NA\"\n  validations:\n    required: true\n- type: textarea\n  attributes:\n    label: Anything else?\n    description: |\n      Links? References? Streams? Anything that will give me more context about the issue you are encountering!\n      Tip: You can attach images or video files by clicking this area to highlight it and then dragging files in.\n  validations:\n    required: false\n- type: textarea\n  attributes:\n    label: Error log\n    description: |\n      If you received a Lua error, then please post it below.\n      Tip: Make sure you have Lua errors enabled by typing in chat the following commands once: `/console scriptErrors 1` and reload.\n    render: lua\n  validations:\n    required: false\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n  - name: Discord\n    url: https://discord.gg/CyVWDWS\n    about: |\n      - Please check frequently asked questions first on #dbm-faq channel.\n      - For usecase questions, there is also a dedicated #dbm-support channel.\n      - Github issues are ONLY for bug reports and feature requests.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "content": "---\nname: Feature request\ndescription: Suggest an idea for this project\ntitle: \"[REQUEST] \"\nlabels: enhancement\nbody:\n- type: textarea\n  attributes:\n    label: Is your feature request related to a problem? Please describe.\n    description: A clear and concise description of what the problem is.\n    placeholder: I'm always frustrated when [...]\n  validations:\n    required: true\n- type: textarea\n  attributes:\n    label: Desired solution\n    description: Describe the solution you'd like\n    placeholder: Show an announcement when X ability triggers\n  validations:\n    required: true\n- type: textarea\n  attributes:\n    label: Describe alternatives you've considered\n    description: A clear and concise description of any alternative solutions or features you've considered or seen elsewhere\n    placeholder: I saw a Weakaura doing X\n  validations:\n    required: false\n- type: textarea\n  attributes:\n    label: Anything else?\n    description: |\n      Links? References? Streams? Anything that will give me more context about the issue you are encountering!\n      Tip: You can attach images or video files by clicking this area to highlight it and then dragging files in.\n  validations:\n    required: false\n"
  },
  {
    "path": ".github/workflows/lint.yml",
    "content": "name: lint\n\non:\n  push:\n    paths:\n      - '.github/workflows/**.yml'\n      - '**.lua'\n  pull_request:\n    paths:\n      - '**.lua'\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n\n    env:\n      LUA_VERSION: 5.1.5\n      LUAROCKS_VERSION: 3.11.1\n\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v4\n\n    - name: Cache Lua\n      uses: actions/cache@v4\n      id: luacache\n      with:\n        path: .lua\n        key: ${{ runner.os }}-lua-${{ env.LUA_VERSION }}\n        restore-keys: ${{ runner.os }}-lua-${{ env.LUA_VERSION }}\n\n    - name: Cache LuaRocks\n      uses: actions/cache@v4\n      id: luarockscache\n      with:\n        path: .luarocks\n        key: ${{ runner.os }}-luarocks-${{ env.LUAROCKS_VERSION }}\n        restore-keys: ${{ runner.os }}-luarocks-${{ env.LUAROCKS_VERSION }}\n\n    - name: Install Lua\n      if: steps.luacache.outputs.cache-hit != 'true'\n      run: |\n        sudo apt-get install libreadline-dev libncurses-dev\n        wget https://www.lua.org/ftp/lua-${{ env.LUA_VERSION }}.tar.gz -O - | tar -xzf -\n        cd lua-${{ env.LUA_VERSION }}\n        make linux\n        make -j INSTALL_TOP=$GITHUB_WORKSPACE/.lua install\n        rm -rf $GITHUB_WORKSPACE/lua-${{ env.LUA_VERSION }}\n\n    - name: Install LuaRocks and Luacheck\n      if: steps.luarockscache.outputs.cache-hit != 'true'\n      run: |\n        wget https://luarocks.org/releases/luarocks-${{ env.LUAROCKS_VERSION }}.tar.gz -O - | tar -xzf -\n        cd luarocks-${{ env.LUAROCKS_VERSION }}\n        ./configure --with-lua-bin=$GITHUB_WORKSPACE/.lua/bin --prefix=$GITHUB_WORKSPACE/.luarocks\n        make build\n        make install\n        PATH=$PATH:$GITHUB_WORKSPACE/.luarocks/bin\n        luarocks install luacheck\n        luarocks install lanes\n        rm -rf $GITHUB_WORKSPACE/luarocks-${{ env.LUAROCKS_VERSION }}\n\n    - name: Luacheck\n      run: .luarocks/bin/luacheck . -q\n"
  },
  {
    "path": ".luacheckrc",
    "content": "std = \"lua51c\"\ncodes = true\nranges = true\nquiet = 1\n\ncache = false\n\nmax_line_length = false\nmax_code_line_length = false\nmax_string_line_length = false\nmax_comment_line_length = false\n\nexclude_files = {\n\t\"./.git\",\n\t\"./.github\",\n\t\"./.lua\",\n\t\"./.luarocks\",\n\t\"**/Libs/**/*.lua\",\n\t\"**/Libs/**/**/*.lua\",\n\t\".luacheckrc\"\n}\n\nignore = {\n\t\"11./SLASH_.*\", -- Setting an undefined (Slash handler) global variable\n\t\"11./BINDING_.*\", -- Setting an undefined (Keybinding header) global variable\n\t\"211/L\", -- Unused local variable \"L\"\n\t\"212/self\", -- Unused argument\n\t\"43.\", -- Shadowing an upvalue, an upvalue argument, an upvalue loop variable.\n\t\"542\", -- An empty if branch\n}\n\nglobals = {\n\t-- Saved Variables\n\t\"DBM_SavedOptions\",\n\t\"DBM_AllSavedOptions\",\n\t\"DBM_MinimapIcon\",\n\t\"DBM_UsedProfile\",\n\t\"DBM_UseDualProfile\",\n\t\"DBM_CharSavedRevision\",\n\t\"DBM_SpellTimers_Settings\",\n\t\"DBT_AllPersistentOptions\",\n\n\t-- DBM\n\t\"DBM\",\n\t\"DBM_CORE_L\",\n\t\"DBM_COMMON_L\",\n\t\"DBM_DISABLE_ZONE_DETECTION\",\n\t\"DBMExtraGlobal\",\n\t\"DBM_GUI\",\n\t\"DBM_GUI_L\",\n\t\"DBM_OPTION_SPACER\",\n\t\"DBM_SpellsUsed_Translations\",\n\t\"DBT\",\n\t\"TT\",\n\t\"BossBanner\",\n\t-- DBM mod frames\n\t\"DBMLichKingFrameDrag\",\n\t\"DBMLichKingFrameDragTitle\",\n\t\"DBMKalFrameDrag\",\n\t\"DBMKalFrameDragTitle\",\n\n\t\"_G\",\n\t\"bit\",\n\t\"Recount\",\n\t\"Skada\",\n\t-- misc custom\n\t\"CUSTOM_CLASS_COLORS\",\n\t\"LibStub\",\n\t\"BigWigs\",\n\t\"ElvUI\",\n\t\"BigBrother\",\n\t\"Transcriptor\",\n\t\"KuiNameplates\",\n\t\"aura_env\",\n\t\"WeakAuras\",\n\t\"WeakAurasSaved\",\n\t\"TidyPlatesThreatDBM\",\n\t\"Plater\",\n\t\"FlashWindow\",\n\t\"LOCALE_koKR\",\n\t\"LOCALE_ruRU\",\n\t\"LOCALE_zhCN\",\n\t\"LOCALE_zhTW\",\n\n\t-- frames created via CreateFrame\n\t\"AlwaysUpFrame1\",\n\t\"AlwaysUpFrame2\",\n\t\"AlwaysUpFrame1Text\",\n\t\"AlwaysUpFrame2Text\",\n\t\"AlwaysUpFrame2DynamicIconButton\",\n\t\"AlwaysUpFrame3DynamicIconButton\",\n\t\"AchievementFrameMiniAchievement1\",\n\t\"DeclensionFrame\",\n\t\"DeclensionFrameCancelButton\",\n\t\"DeclensionFrameOkayButton\",\n\t\"DeclensionFrameSetNext\",\n\t\"DeclensionFrameSetPrev\",\n\n\t-- Awesome WotLK\n\t\"C_NamePlate\",\n\n\t-- Lua Std\n\t\"assert\",\n\t\"bit.arshift\",\n\t\"bit.band\",\n\t\"bit.bnot\",\n\t\"bit.bor\",\n\t\"bit.bxor\",\n\t\"bit.lshift\",\n\t\"bit.rshift\",\n\t\"collectgarbage\",\n\t\"coroutine.create\",\n\t\"coroutine.resume\",\n\t\"coroutine.running\",\n\t\"coroutine.status\",\n\t\"coroutine.wrap\",\n\t\"coroutine.yield\",\n\t\"error\",\n\t\"gcinfo\",\n\t\"getfenv\",\n\t\"getmetatable\",\n\t\"ipairs\",\n\t\"loadstring\",\n\t\"math.abs\",\n\t\"math.acos\",\n\t\"math.asin\",\n\t\"math.atan\",\n\t\"math.atan2\",\n\t\"math.ceil\",\n\t\"math.cos\",\n\t\"math.cosh\",\n\t\"math.deg\",\n\t\"math.exp\",\n\t\"math.floor\",\n\t\"math.fmod\",\n\t\"math.frexp\",\n\t\"math.ldexp\",\n\t\"math.log\",\n\t\"math.log10\",\n\t\"math.max\",\n\t\"math.min\",\n\t\"math.modf\",\n\t\"math.pow\",\n\t\"math.rad\",\n\t\"math.random\",\n\t\"math.sin\",\n\t\"math.sinh\",\n\t\"math.sqrt\",\n\t\"math.tan\",\n\t\"math.tanh\",\n\t\"newproxy\",\n\t\"next\",\n\t\"pairs\",\n\t\"pcall\",\n\t\"print\",\n\t\"rawequal\",\n\t\"rawget\",\n\t\"rawset\",\n\t\"select\",\n\t\"setfenv\",\n\t\"setmetatable\",\n\t\"string.byte\",\n\t\"string.char\",\n\t\"string.dump\",\n\t\"string.find\",\n\t\"string.format\",\n\t\"string.gmatch\",\n\t\"string.gsub\",\n\t\"string.len\",\n\t\"string.lower\",\n\t\"string.match\",\n\t\"string.rep\",\n\t\"string.reverse\",\n\t\"string.sub\",\n\t\"string.upper\",\n\t\"table.concat\",\n\t\"table.foreach\",\n\t\"table.foreachi\",\n\t\"table.getn\",\n\t\"table.insert\",\n\t\"table.maxn\",\n\t\"table.remove\",\n\t\"table.sort\",\n\t\"tonumber\",\n\t\"tostring\",\n\t\"type\",\n\t\"unpack\",\n\t\"xpcall\",\n\n\t-- WOW Lua\n\t\"abs\",\n\t\"acos\",\n\t\"asin\",\n\t\"atan\",\n\t\"atan2\",\n\t\"bit.mod\",\n\t\"ceil\",\n\t\"cos\",\n\t\"date\",\n\t\"debugbreak\",\n\t\"debugdump\",\n\t\"debughook\",\n\t\"debuginfo\",\n\t\"debugload\",\n\t\"debuglocals\",\n\t\"debugprint\",\n\t\"debugprofilestart\",\n\t\"debugprofilestop\",\n\t\"debugstack\",\n\t\"debugtimestamp\",\n\t\"deg\",\n\t\"difftime\",\n\t\"exp\",\n\t\"floor\",\n\t\"forceinsecure\",\n\t\"foreach\",\n\t\"foreachi\",\n\t\"format\",\n\t\"frexp\",\n\t\"geterrorhandler\",\n\t\"getglobal\",\n\t\"getn\",\n\t\"getprinthandler\",\n\t\"gmatch\",\n\t\"gsub\",\n\t\"hooksecurefunc\",\n\t\"issecure\",\n\t\"issecurevariable\",\n\t\"ldexp\",\n\t\"log\",\n\t\"log10\",\n\t\"max\",\n\t\"message\",\n\t\"min\",\n\t\"mod\",\n\t\"rad\",\n\t\"random\",\n\t\"rtable.concat\",\n\t\"rtable.insert\",\n\t\"rtable.ipairs\",\n\t\"rtable.maxn\",\n\t\"rtable.newtable\",\n\t\"rtable.next\",\n\t\"rtable.pairs\",\n\t\"rtable.remove\",\n\t\"rtable.sort\",\n\t\"rtable.type\",\n\t\"rtable.unpack\",\n\t\"rtable.wipe\",\n\t\"scrub\",\n\t\"securecall\",\n\t\"seterrorhandler\",\n\t\"setglobal\",\n\t\"setprinthandler\",\n\t\"sin\",\n\t\"sort\",\n\t\"sqrt\",\n\t\"strbyte\",\n\t\"strchar\",\n\t\"strconcat\",\n\t\"strfind\",\n\t\"string.gfind\",\n\t\"string.join\",\n\t\"string.replace\",\n\t\"string.rtgsub\",\n\t\"string.split\",\n\t\"string.trim\",\n\t\"strjoin\",\n\t\"strlen\",\n\t\"strlenutf8\",\n\t\"strlower\",\n\t\"strmatch\",\n\t\"strrep\",\n\t\"strreplace\",\n\t\"strrev\",\n\t\"strsplit\",\n\t\"strsub\",\n\t\"strtrim\",\n\t\"strupper\",\n\t\"tContains\",\n\t\"tDeleteItem\",\n\t\"table.removemulti\",\n\t\"table.setn\",\n\t\"table.wipe\",\n\t\"tan\",\n\t\"time\",\n\t\"tinsert\",\n\t\"tostringall\",\n\t\"tremove\",\n\t\"updateContainerFrameAnchors\",\n\t\"wipe\",\n\n\t-- WoW globalstrings\n\t\"ABANDON_PET\",\n\t\"ABANDON_QUEST\",\n\t\"ABANDON_QUEST_ABBREV\",\n\t\"ABANDON_QUEST_CONFIRM\",\n\t\"ABANDON_QUEST_CONFIRM_WITH_ITEMS\",\n\t\"ABILITIES\",\n\t\"ABSORB\",\n\t\"ABSORB_TRAILER\",\n\t\"ACCEPT\",\n\t\"ACCEPT_ALT\",\n\t\"ACCEPT_COMMENT\",\n\t\"ACHIEVEMENT\",\n\t\"ACHIEVEMENTFRAME_FILTER_ALL\",\n\t\"ACHIEVEMENTFRAME_FILTER_COMPLETED\",\n\t\"ACHIEVEMENTFRAME_FILTER_INCOMPLETE\",\n\t\"ACHIEVEMENTS\",\n\t\"ACHIEVEMENTS_COMPLETED\",\n\t\"ACHIEVEMENTS_COMPLETED_CATEGORY\",\n\t\"ACHIEVEMENT_BROADCAST\",\n\t\"ACHIEVEMENT_BROADCAST_SELF\",\n\t\"ACHIEVEMENT_BUTTON\",\n\t\"ACHIEVEMENT_CATEGORY_PROGRESS\",\n\t\"ACHIEVEMENT_META_COMPLETED_DATE\",\n\t\"ACHIEVEMENT_SUMMARY_CATEGORY\",\n\t\"ACHIEVEMENT_TITLE\",\n\t\"ACHIEVEMENT_TOOLTIP_COMPLETE\",\n\t\"ACHIEVEMENT_TOOLTIP_IN_PROGRESS\",\n\t\"ACHIEVEMENT_UNLOCKED\",\n\t\"ACHIEVEMENT_UNLOCKED_CHAT_MSG\",\n\t\"ACHIEVEMENT_WATCH_TOO_MANY\",\n\t\"ACTIONBARS_LABEL\",\n\t\"ACTIONBARS_SUBTEXT\",\n\t\"ACTIONBAR_LABEL\",\n\t\"ACTION_DAMAGE_SHIELD\",\n\t\"ACTION_DAMAGE_SHIELD_FULL_TEXT\",\n\t\"ACTION_DAMAGE_SHIELD_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_BLOCK\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_BLOCK_FULL_TEXT\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_BLOCK_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_BLOCK_POSSESSIVE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_DEFLECT\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_FULL_TEXT\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_POSSESSIVE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_DODGE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_DODGE_FULL_TEXT\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_DODGE_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_DODGE_POSSESSIVE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_EVADED\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_EVADED_FULL_TEXT\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_EVADED_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_EVADED_POSSESSIVE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_FULL_TEXT\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_IMMUNE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_FULL_TEXT\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_POSSESSIVE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_MISS\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_MISS_FULL_TEXT\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_MISS_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_MISS_POSSESSIVE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_PARRY\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_PARRY_FULL_TEXT\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_PARRY_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_PARRY_POSSESSIVE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_POSSESSIVE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_RESIST\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_RESIST_FULL_TEXT\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_RESIST_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_DAMAGE_SHIELD_MISSED_RESIST_POSSESSIVE\",\n\t\"ACTION_DAMAGE_SHIELD_POSSESSIVE\",\n\t\"ACTION_DAMAGE_SPLIT\",\n\t\"ACTION_DAMAGE_SPLIT_ABSORBED_FULL_TEXT\",\n\t\"ACTION_DAMAGE_SPLIT_FULL_TEXT\",\n\t\"ACTION_DAMAGE_SPLIT_POSSESSIVE\",\n\t\"ACTION_DAMAGE_SPLIT_RESULT_FULL_TEXT\",\n\t\"ACTION_ENCHANT_APPLIED\",\n\t\"ACTION_ENCHANT_APPLIED_FULL_TEXT\",\n\t\"ACTION_ENCHANT_APPLIED_POSSESSIVE\",\n\t\"ACTION_ENCHANT_REMOVED\",\n\t\"ACTION_ENCHANT_REMOVED_FULL_TEXT\",\n\t\"ACTION_ENCHANT_REMOVED_POSSESSIVE\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_DROWNING\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_DROWNING_FULL_TEXT\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_DROWNING_POSSESSIVE\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_FALLING\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_FALLING_FULL_TEXT\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_FALLING_POSSESSIVE\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE_FULL_TEXT\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE_POSSESSIVE\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_FIRE\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_FIRE_FULL_TEXT\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_FIRE_POSSESSIVE\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_FULL_TEXT\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_LAVA\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_LAVA_FULL_TEXT\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_LAVA_POSSESSIVE\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_POSSESSIVE\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_SLIME\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_SLIME_FULL_TEXT\",\n\t\"ACTION_ENVIRONMENTAL_DAMAGE_SLIME_POSSESSIVE\",\n\t\"ACTION_PARTY_KILL\",\n\t\"ACTION_PARTY_KILL_FULL_TEXT\",\n\t\"ACTION_PARTY_KILL_POSSESSIVE\",\n\t\"ACTION_RANGED\",\n\t\"ACTION_RANGE_DAMAGE\",\n\t\"ACTION_RANGE_DAMAGE_FULL_TEXT\",\n\t\"ACTION_RANGE_DAMAGE_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_RANGE_DAMAGE_POSSESSIVE\",\n\t\"ACTION_RANGE_MISSED\",\n\t\"ACTION_RANGE_MISSED_ABSORB\",\n\t\"ACTION_RANGE_MISSED_ABSORB_FULL_TEXT\",\n\t\"ACTION_RANGE_MISSED_ABSORB_POSSESSIVE\",\n\t\"ACTION_RANGE_MISSED_BLOCK\",\n\t\"ACTION_RANGE_MISSED_BLOCK_FULL_TEXT\",\n\t\"ACTION_RANGE_MISSED_BLOCK_POSSESSIVE\",\n\t\"ACTION_RANGE_MISSED_DEFLECT\",\n\t\"ACTION_RANGE_MISSED_DEFLECT_FULL_TEXT\",\n\t\"ACTION_RANGE_MISSED_DEFLECT_POSSESSIVE\",\n\t\"ACTION_RANGE_MISSED_DODGE\",\n\t\"ACTION_RANGE_MISSED_DODGE_FULL_TEXT\",\n\t\"ACTION_RANGE_MISSED_DODGE_POSSESSIVE\",\n\t\"ACTION_RANGE_MISSED_EVADE\",\n\t\"ACTION_RANGE_MISSED_EVADE_FULL_TEXT\",\n\t\"ACTION_RANGE_MISSED_EVADE_POSSESSIVE\",\n\t\"ACTION_RANGE_MISSED_FULL_TEXT\",\n\t\"ACTION_RANGE_MISSED_IMMUNE\",\n\t\"ACTION_RANGE_MISSED_IMMUNE_FULL_TEXT\",\n\t\"ACTION_RANGE_MISSED_IMMUNE_POSSESSIVE\",\n\t\"ACTION_RANGE_MISSED_MISS\",\n\t\"ACTION_RANGE_MISSED_MISS_FULL_TEXT\",\n\t\"ACTION_RANGE_MISSED_MISS_POSSESSIVE\",\n\t\"ACTION_RANGE_MISSED_PARRY\",\n\t\"ACTION_RANGE_MISSED_PARRY_FULL_TEXT\",\n\t\"ACTION_RANGE_MISSED_PARRY_POSSESSIVE\",\n\t\"ACTION_RANGE_MISSED_POSSESSIVE\",\n\t\"ACTION_RANGE_MISSED_RESIST\",\n\t\"ACTION_RANGE_MISSED_RESIST_FULL_TEXT\",\n\t\"ACTION_RANGE_MISSED_RESIST_POSSESSIVE\",\n\t\"ACTION_SPELL_AURA_APPLIED\",\n\t\"ACTION_SPELL_AURA_APPLIED_BUFF\",\n\t\"ACTION_SPELL_AURA_APPLIED_BUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_AURA_APPLIED_BUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_AURA_APPLIED_BUFF_MASTER\",\n\t\"ACTION_SPELL_AURA_APPLIED_BUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_AURA_APPLIED_DEBUFF\",\n\t\"ACTION_SPELL_AURA_APPLIED_DEBUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_AURA_APPLIED_DEBUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_AURA_APPLIED_DEBUFF_MASTER\",\n\t\"ACTION_SPELL_AURA_APPLIED_DEBUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_AURA_APPLIED_DOSE\",\n\t\"ACTION_SPELL_AURA_APPLIED_DOSE_BUFF\",\n\t\"ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF\",\n\t\"ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_AURA_APPLIED_MASTER\",\n\t\"ACTION_SPELL_AURA_APPLIED_POSSESSIVE\",\n\t\"ACTION_SPELL_AURA_BROKEN\",\n\t\"ACTION_SPELL_AURA_BROKEN_BUFF\",\n\t\"ACTION_SPELL_AURA_BROKEN_BUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_AURA_BROKEN_BUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_AURA_BROKEN_BUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_AURA_BROKEN_DEBUFF\",\n\t\"ACTION_SPELL_AURA_BROKEN_DEBUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_AURA_BROKEN_DEBUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_AURA_BROKEN_DEBUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_AURA_BROKEN_SPELL_BUFF\",\n\t\"ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF\",\n\t\"ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_AURA_REFRESH\",\n\t\"ACTION_SPELL_AURA_REFRESH_BUFF\",\n\t\"ACTION_SPELL_AURA_REFRESH_BUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_AURA_REFRESH_BUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_AURA_REFRESH_BUFF_MASTER\",\n\t\"ACTION_SPELL_AURA_REFRESH_BUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_AURA_REFRESH_DEBUFF\",\n\t\"ACTION_SPELL_AURA_REFRESH_DEBUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_AURA_REFRESH_DEBUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_AURA_REFRESH_DEBUFF_MASTER\",\n\t\"ACTION_SPELL_AURA_REFRESH_DEBUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_AURA_REFRESH_MASTER\",\n\t\"ACTION_SPELL_AURA_REMOVED\",\n\t\"ACTION_SPELL_AURA_REMOVED_BUFF\",\n\t\"ACTION_SPELL_AURA_REMOVED_BUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_AURA_REMOVED_BUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_AURA_REMOVED_BUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_AURA_REMOVED_DEBUFF\",\n\t\"ACTION_SPELL_AURA_REMOVED_DEBUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_AURA_REMOVED_DEBUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_AURA_REMOVED_DEBUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_AURA_REMOVED_DOSE\",\n\t\"ACTION_SPELL_AURA_REMOVED_DOSE_BUFF\",\n\t\"ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF\",\n\t\"ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_AURA_REMOVED_FULL_TEXT\",\n\t\"ACTION_SPELL_AURA_REMOVED_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_AURA_REMOVED_POSSESSIVE\",\n\t\"ACTION_SPELL_BUILDING_DAMAGE\",\n\t\"ACTION_SPELL_BUILDING_DAMAGE_FULL_TEXT\",\n\t\"ACTION_SPELL_BUILDING_DAMAGE_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_BUILDING_DAMAGE_MASTER\",\n\t\"ACTION_SPELL_BUILDING_DAMAGE_POSSESSIVE\",\n\t\"ACTION_SPELL_BUILDING_HEAL\",\n\t\"ACTION_SPELL_BUILDING_HEAL_FULL_TEXT\",\n\t\"ACTION_SPELL_BUILDING_HEAL_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_BUILDING_HEAL_POSSESSIVE\",\n\t\"ACTION_SPELL_CAST_FAILED\",\n\t\"ACTION_SPELL_CAST_FAILED_FULL_TEXT\",\n\t\"ACTION_SPELL_CAST_FAILED_MASTER\",\n\t\"ACTION_SPELL_CAST_FAILED_POSSESSIVE\",\n\t\"ACTION_SPELL_CAST_START\",\n\t\"ACTION_SPELL_CAST_START_FULL_TEXT\",\n\t\"ACTION_SPELL_CAST_START_FULL_TEXT_NO_DEST\",\n\t\"ACTION_SPELL_CAST_START_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_CAST_START_MASTER\",\n\t\"ACTION_SPELL_CAST_START_POSSESSIVE\",\n\t\"ACTION_SPELL_CAST_SUCCESS\",\n\t\"ACTION_SPELL_CAST_SUCCESS_FULL_TEXT\",\n\t\"ACTION_SPELL_CAST_SUCCESS_FULL_TEXT_NO_DEST\",\n\t\"ACTION_SPELL_CAST_SUCCESS_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_CAST_SUCCESS_MASTER\",\n\t\"ACTION_SPELL_CAST_SUCCESS_POSSESSIVE\",\n\t\"ACTION_SPELL_CREATE\",\n\t\"ACTION_SPELL_CREATE_FULL_TEXT\",\n\t\"ACTION_SPELL_CREATE_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_CREATE_POSSESSIVE\",\n\t\"ACTION_SPELL_DAMAGE\",\n\t\"ACTION_SPELL_DAMAGE_FULL_TEXT\",\n\t\"ACTION_SPELL_DAMAGE_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_DAMAGE_MASTER\",\n\t\"ACTION_SPELL_DAMAGE_POSSESSIVE\",\n\t\"ACTION_SPELL_DISPEL\",\n\t\"ACTION_SPELL_DISPEL_BUFF\",\n\t\"ACTION_SPELL_DISPEL_BUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_DISPEL_BUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_DISPEL_BUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_DISPEL_DEBUFF\",\n\t\"ACTION_SPELL_DISPEL_DEBUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_DISPEL_DEBUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_DISPEL_DEBUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_DISPEL_FAILED\",\n\t\"ACTION_SPELL_DISPEL_FAILED_FULL_TEXT\",\n\t\"ACTION_SPELL_DISPEL_FAILED_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_DISPEL_FAILED_POSSESSIVE\",\n\t\"ACTION_SPELL_DISPEL_POSSESSIVE\",\n\t\"ACTION_SPELL_DRAIN\",\n\t\"ACTION_SPELL_DRAIN_FULL_TEXT\",\n\t\"ACTION_SPELL_DRAIN_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_DRAIN_POSSESSIVE\",\n\t\"ACTION_SPELL_DURABILITY_DAMAGE\",\n\t\"ACTION_SPELL_DURABILITY_DAMAGE_ALL\",\n\t\"ACTION_SPELL_DURABILITY_DAMAGE_ALL_FULL_TEXT\",\n\t\"ACTION_SPELL_DURABILITY_DAMAGE_ALL_POSSESSIVE\",\n\t\"ACTION_SPELL_DURABILITY_DAMAGE_FULL_TEXT\",\n\t\"ACTION_SPELL_DURABILITY_DAMAGE_POSSESSIVE\",\n\t\"ACTION_SPELL_ENERGIZE\",\n\t\"ACTION_SPELL_ENERGIZE_FULL_TEXT\",\n\t\"ACTION_SPELL_ENERGIZE_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_ENERGIZE_POSSESSIVE\",\n\t\"ACTION_SPELL_ENERGIZE_RESULT\",\n\t\"ACTION_SPELL_EXTRA_ATTACKS\",\n\t\"ACTION_SPELL_EXTRA_ATTACKS_FULL_TEXT\",\n\t\"ACTION_SPELL_EXTRA_ATTACKS_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_EXTRA_ATTACKS_POSSESSIVE\",\n\t\"ACTION_SPELL_HEAL\",\n\t\"ACTION_SPELL_HEAL_FULL_TEXT\",\n\t\"ACTION_SPELL_HEAL_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_HEAL_POSSESSIVE\",\n\t\"ACTION_SPELL_INSTAKILL\",\n\t\"ACTION_SPELL_INSTAKILL_FULL_TEXT\",\n\t\"ACTION_SPELL_INSTAKILL_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_INSTAKILL_POSSESSIVE\",\n\t\"ACTION_SPELL_INTERRUPT\",\n\t\"ACTION_SPELL_INTERRUPT_FULL_TEXT\",\n\t\"ACTION_SPELL_INTERRUPT_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_INTERRUPT_POSSESSIVE\",\n\t\"ACTION_SPELL_LEECH\",\n\t\"ACTION_SPELL_LEECH_FULL_TEXT\",\n\t\"ACTION_SPELL_LEECH_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_LEECH_POSSESSIVE\",\n\t\"ACTION_SPELL_LEECH_RESULT\",\n\t\"ACTION_SPELL_MISSED\",\n\t\"ACTION_SPELL_MISSED_ABSORB\",\n\t\"ACTION_SPELL_MISSED_ABSORB_FULL_TEXT\",\n\t\"ACTION_SPELL_MISSED_ABSORB_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_MISSED_ABSORB_POSSESSIVE\",\n\t\"ACTION_SPELL_MISSED_BLOCK\",\n\t\"ACTION_SPELL_MISSED_BLOCK_FULL_TEXT\",\n\t\"ACTION_SPELL_MISSED_BLOCK_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_MISSED_BLOCK_POSSESSIVE\",\n\t\"ACTION_SPELL_MISSED_DEFLECT\",\n\t\"ACTION_SPELL_MISSED_DEFLECT_FULL_TEXT\",\n\t\"ACTION_SPELL_MISSED_DEFLECT_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_MISSED_DEFLECT_POSSESSIVE\",\n\t\"ACTION_SPELL_MISSED_DODGE\",\n\t\"ACTION_SPELL_MISSED_DODGE_FULL_TEXT\",\n\t\"ACTION_SPELL_MISSED_DODGE_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_MISSED_DODGE_POSSESSIVE\",\n\t\"ACTION_SPELL_MISSED_EVADE\",\n\t\"ACTION_SPELL_MISSED_EVADE_FULL_TEXT\",\n\t\"ACTION_SPELL_MISSED_EVADE_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_MISSED_EVADE_POSSESSIVE\",\n\t\"ACTION_SPELL_MISSED_FULL_TEXT\",\n\t\"ACTION_SPELL_MISSED_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_MISSED_IMMUNE\",\n\t\"ACTION_SPELL_MISSED_IMMUNE_FULL_TEXT\",\n\t\"ACTION_SPELL_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_MISSED_MISS\",\n\t\"ACTION_SPELL_MISSED_MISS_FULL_TEXT\",\n\t\"ACTION_SPELL_MISSED_MISS_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_MISSED_MISS_POSSESSIVE\",\n\t\"ACTION_SPELL_MISSED_PARRY\",\n\t\"ACTION_SPELL_MISSED_PARRY_FULL_TEXT\",\n\t\"ACTION_SPELL_MISSED_PARRY_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_MISSED_PARRY_POSSESSIVE\",\n\t\"ACTION_SPELL_MISSED_POSSESSIVE\",\n\t\"ACTION_SPELL_MISSED_REFLECT\",\n\t\"ACTION_SPELL_MISSED_REFLECT_FULL_TEXT\",\n\t\"ACTION_SPELL_MISSED_REFLECT_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_MISSED_RESIST\",\n\t\"ACTION_SPELL_MISSED_RESIST_FULL_TEXT\",\n\t\"ACTION_SPELL_MISSED_RESIST_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_MISSED_RESIST_POSSESSIVE\",\n\t\"ACTION_SPELL_PERIODIC_DAMAGE\",\n\t\"ACTION_SPELL_PERIODIC_DAMAGE_FULL_TEXT\",\n\t\"ACTION_SPELL_PERIODIC_DAMAGE_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_PERIODIC_DAMAGE_POSSESSIVE\",\n\t\"ACTION_SPELL_PERIODIC_DRAIN\",\n\t\"ACTION_SPELL_PERIODIC_DRAIN_FULL_TEXT\",\n\t\"ACTION_SPELL_PERIODIC_DRAIN_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_PERIODIC_DRAIN_POSSESSIVE\",\n\t\"ACTION_SPELL_PERIODIC_ENERGIZE\",\n\t\"ACTION_SPELL_PERIODIC_ENERGIZE_FULL_TEXT\",\n\t\"ACTION_SPELL_PERIODIC_ENERGIZE_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_PERIODIC_ENERGIZE_POSSESSIVE\",\n\t\"ACTION_SPELL_PERIODIC_ENERGIZE_RESULT\",\n\t\"ACTION_SPELL_PERIODIC_HEAL\",\n\t\"ACTION_SPELL_PERIODIC_HEAL_FULL_TEXT\",\n\t\"ACTION_SPELL_PERIODIC_HEAL_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_PERIODIC_HEAL_POSSESSIVE\",\n\t\"ACTION_SPELL_PERIODIC_LEECH\",\n\t\"ACTION_SPELL_PERIODIC_LEECH_FULL_TEXT\",\n\t\"ACTION_SPELL_PERIODIC_LEECH_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_PERIODIC_LEECH_POSSESSIVE\",\n\t\"ACTION_SPELL_PERIODIC_LEECH_RESULT\",\n\t\"ACTION_SPELL_PERIODIC_MISSED\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_ABSORB\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_ABSORB_FULL_TEXT\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_ABSORB_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_ABSORB_POSSESSIVE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_BLOCK\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_BLOCK_FULL_TEXT\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_BLOCK_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_BLOCK_POSSESSIVE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_DEFLECTED\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_FULL_TEXT\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_POSSESSIVE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_DODGE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_DODGE_FULL_TEXT\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_DODGE_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_DODGE_POSSESSIVE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_EVADED\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_EVADED_FULL_TEXT\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_EVADED_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_EVADED_POSSESSIVE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_FULL_TEXT\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_IMMUNE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_IMMUNE_FULL_TEXT\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_IMMUNE_POSSESSIVE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_MISS\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_MISS_FULL_TEXT\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_MISS_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_MISS_POSSESSIVE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_PARRY\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_PARRY_FULL_TEXT\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_PARRY_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_PARRY_POSSESSIVE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_POSSESSIVE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_RESIST\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_RESIST_FULL_TEXT\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_RESIST_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_PERIODIC_MISSED_RESIST_POSSESSIVE\",\n\t\"ACTION_SPELL_RESURRECT\",\n\t\"ACTION_SPELL_RESURRECT_FULL_TEXT\",\n\t\"ACTION_SPELL_RESURRECT_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_RESURRECT_POSSESSIVE\",\n\t\"ACTION_SPELL_STOLEN\",\n\t\"ACTION_SPELL_STOLEN_BUFF\",\n\t\"ACTION_SPELL_STOLEN_BUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_STOLEN_BUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_STOLEN_BUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_STOLEN_BUFF__POSSESSIVE\",\n\t\"ACTION_SPELL_STOLEN_DEBUFF\",\n\t\"ACTION_SPELL_STOLEN_DEBUFF_FULL_TEXT\",\n\t\"ACTION_SPELL_STOLEN_DEBUFF_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_STOLEN_DEBUFF_POSSESSIVE\",\n\t\"ACTION_SPELL_STOLEN_FULL_TEXT\",\n\t\"ACTION_SPELL_STOLEN_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_STOLEN_POSSESSIVE\",\n\t\"ACTION_SPELL_SUMMON\",\n\t\"ACTION_SPELL_SUMMON_FULL_TEXT\",\n\t\"ACTION_SPELL_SUMMON_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SPELL_SUMMON_POSSESSIVE\",\n\t\"ACTION_SWING\",\n\t\"ACTION_SWING_DAMAGE\",\n\t\"ACTION_SWING_DAMAGE_FULL_TEXT\",\n\t\"ACTION_SWING_DAMAGE_FULL_TEXT_NO_SOURCE\",\n\t\"ACTION_SWING_DAMAGE_POSSESSIVE\",\n\t\"ACTION_SWING_MISSED\",\n\t\"ACTION_SWING_MISSED_ABSORB\",\n\t\"ACTION_SWING_MISSED_ABSORB_FULL_TEXT\",\n\t\"ACTION_SWING_MISSED_ABSORB_POSSESSIVE\",\n\t\"ACTION_SWING_MISSED_BLOCK\",\n\t\"ACTION_SWING_MISSED_BLOCK_FULL_TEXT\",\n\t\"ACTION_SWING_MISSED_BLOCK_POSSESSIVE\",\n\t\"ACTION_SWING_MISSED_DEFLECT\",\n\t\"ACTION_SWING_MISSED_DEFLECT_FULL_TEXT\",\n\t\"ACTION_SWING_MISSED_DEFLECT_POSSESSIVE\",\n\t\"ACTION_SWING_MISSED_DODGE\",\n\t\"ACTION_SWING_MISSED_DODGE_FULL_TEXT\",\n\t\"ACTION_SWING_MISSED_DODGE_POSSESSIVE\",\n\t\"ACTION_SWING_MISSED_EVADE\",\n\t\"ACTION_SWING_MISSED_EVADE_FULL_TEXT\",\n\t\"ACTION_SWING_MISSED_EVADE_POSSESSIVE\",\n\t\"ACTION_SWING_MISSED_FULL_TEXT\",\n\t\"ACTION_SWING_MISSED_IMMUNE\",\n\t\"ACTION_SWING_MISSED_IMMUNE_FULL_TEXT\",\n\t\"ACTION_SWING_MISSED_IMMUNE_POSSESSIVE\",\n\t\"ACTION_SWING_MISSED_MISS\",\n\t\"ACTION_SWING_MISSED_MISS_FULL_TEXT\",\n\t\"ACTION_SWING_MISSED_MISS_POSSESSIVE\",\n\t\"ACTION_SWING_MISSED_PARRY\",\n\t\"ACTION_SWING_MISSED_PARRY_FULL_TEXT\",\n\t\"ACTION_SWING_MISSED_PARRY_POSSESSIVE\",\n\t\"ACTION_SWING_MISSED_POSSESSIVE\",\n\t\"ACTION_SWING_MISSED_RESIST\",\n\t\"ACTION_SWING_MISSED_RESIST_FULL_TEXT\",\n\t\"ACTION_SWING_MISSED_RESIST_POSSESSIVE\",\n\t\"ACTION_UNIT_DESTROYED\",\n\t\"ACTION_UNIT_DESTROYED_FULL_TEXT\",\n\t\"ACTION_UNIT_DESTROYED_POSSESSIVE\",\n\t\"ACTION_UNIT_DIED\",\n\t\"ACTION_UNIT_DIED_FULL_TEXT\",\n\t\"ACTION_UNIT_DIED_POSSESSIVE\",\n\t\"ACTION_UNIT_DISSIPATES\",\n\t\"ACTION_UNIT_DISSIPATES_FULL_TEXT\",\n\t\"ACTION_UNIT_DISSIPATES_POSSESSIVE\",\n\t\"ACTIVATE\",\n\t\"ADD\",\n\t\"ADDITIONAL_COMMENTS\",\n\t\"ADDITIONAL_FILTERS\",\n\t\"ADDMEMBER\",\n\t\"ADDMEMBER_TEAM\",\n\t\"ADDONS\",\n\t\"ADDON_ACTION_FORBIDDEN\",\n\t\"ADDON_BANNED\",\n\t\"ADDON_CORRUPT\",\n\t\"ADDON_DEMAND_LOADED\",\n\t\"ADDON_DEP_BANNED\",\n\t\"ADDON_DEP_CORRUPT\",\n\t\"ADDON_DEP_DEMAND_LOADED\",\n\t\"ADDON_DEP_DISABLED\",\n\t\"ADDON_DEP_INCOMPATIBLE\",\n\t\"ADDON_DEP_INSECURE\",\n\t\"ADDON_DEP_INTERFACE_VERSION\",\n\t\"ADDON_DEP_MISSING\",\n\t\"ADDON_DISABLED\",\n\t\"ADDON_INCOMPATIBLE\",\n\t\"ADDON_INSECURE\",\n\t\"ADDON_INTERFACE_VERSION\",\n\t\"ADDON_LOAD_FAILED\",\n\t\"ADDON_MEM_KB_ABBR\",\n\t\"ADDON_MEM_MB_ABBR\",\n\t\"ADDON_MISSING\",\n\t\"ADDON_UNKNOWN_ERROR\",\n\t\"ADD_ANOTHER\",\n\t\"ADD_CHANNEL\",\n\t\"ADD_CHAT_CHANNEL\",\n\t\"ADD_FILTER\",\n\t\"ADD_FRIEND\",\n\t\"ADD_FRIEND_LABEL\",\n\t\"ADD_GUILDMEMBER_LABEL\",\n\t\"ADD_GUILDRANK_LABEL\",\n\t\"ADD_IGNORE_LABEL\",\n\t\"ADD_MUTE_LABEL\",\n\t\"ADD_RAIDMEMBER_LABEL\",\n\t\"ADD_RAID_MEMBER\",\n\t\"ADD_TEAMMEMBER_LABEL\",\n\t\"ADVANCED_OBJECTIVES_TEXT\",\n\t\"ADVANCED_OPTIONS\",\n\t\"ADVANCED_OPTIONS_TOOLTIP\",\n\t\"ADVANCED_WATCHFRAME_OPTION_ENABLE_INTERRUPT\",\n\t\"ADVANCED_WORLD_MAP_TEXT\",\n\t\"AFK\",\n\t\"AGGRO_WARNING_DISPLAY\",\n\t\"AGGRO_WARNING_IN_INSTANCE\",\n\t\"AGGRO_WARNING_IN_PARTY\",\n\t\"AGI\",\n\t\"AGILITY_COLON\",\n\t\"AGILITY_TOOLTIP\",\n\t\"AIM_DOWN\",\n\t\"AIM_UP\",\n\t\"ALL\",\n\t\"ALLIED\",\n\t\"ALL_BOSSES_ALIVE\",\n\t\"ALL_INVENTORY_SLOTS\",\n\t\"ALL_SETTINGS\",\n\t\"ALL_SUBCLASSES\",\n\t\"ALREADY_BOUND\",\n\t\"ALREADY_LEARNED\",\n\t\"ALT_KEY\",\n\t\"ALWAYS\",\n\t\"ALWAYS_SHOW_MULTIBARS_TEXT\",\n\t\"AMBIENCE_VOLUME\",\n\t\"AMMOSLOT\",\n\t\"AMMO_DAMAGE_TEMPLATE\",\n\t\"AMMO_SCHOOL_DAMAGE_TEMPLATE\",\n\t\"AMOUNT_PAID_COLON\",\n\t\"AMOUNT_RECEIVED_COLON\",\n\t\"AMOUNT_TO_SEND\",\n\t\"ANIMATION\",\n\t\"ANISOTROPIC\",\n\t\"APPEARANCE_LABEL\",\n\t\"APPEARANCE_SUBTEXT\",\n\t\"APPLY\",\n\t\"AREA_SPIRIT_HEAL\",\n\t\"ARENA\",\n\t\"ARENA_BANNER_VENDOR_GREETING\",\n\t\"ARENA_BATTLES\",\n\t\"ARENA_CASUAL\",\n\t\"ARENA_CHARTER_PURCHASE\",\n\t\"ARENA_CHARTER_TEMPLATE\",\n\t\"ARENA_CHARTER_TURN_IN\",\n\t\"ARENA_COMPLETE_MESSAGE\",\n\t\"ARENA_MASTER_NO_SEASON_TEXT\",\n\t\"ARENA_MASTER_TEXT\",\n\t\"ARENA_OFF_SEASON_TEXT\",\n\t\"ARENA_PETITION_LEADER_INSTRUCTIONS\",\n\t\"ARENA_PETITION_MEMBER_INSTRUCTIONS\",\n\t\"ARENA_POINTS\",\n\t\"ARENA_PRACTICE_BATTLE\",\n\t\"ARENA_RATED\",\n\t\"ARENA_RATED_BATTLE\",\n\t\"ARENA_RATED_MATCH\",\n\t\"ARENA_REGISTRAR_PURCHASE_TEXT\",\n\t\"ARENA_SPECTATOR\",\n\t\"ARENA_TEAM\",\n\t\"ARENA_TEAM_2V2\",\n\t\"ARENA_TEAM_3V3\",\n\t\"ARENA_TEAM_5V5\",\n\t\"ARENA_TEAM_CAPTAIN\",\n\t\"ARENA_TEAM_INVITATION\",\n\t\"ARENA_TEAM_LEAD_IN\",\n\t\"ARENA_TEAM_RATING\",\n\t\"ARENA_THIS_SEASON\",\n\t\"ARENA_THIS_SEASON_TOGGLE\",\n\t\"ARENA_THIS_WEEK\",\n\t\"ARENA_THIS_WEEK_TOGGLE\",\n\t\"ARMOR\",\n\t\"ARMOR_TEMPLATE\",\n\t\"ARMOR_TOOLTIP\",\n\t\"ASSEMBLING_GROUP\",\n\t\"ASSIGNED_COLON\",\n\t\"ASSIST_ATTACK\",\n\t\"ATTACHMENT_TEXT\",\n\t\"ATTACK\",\n\t\"ATTACK_COLON\",\n\t\"ATTACK_POWER\",\n\t\"ATTACK_POWER_TOOLTIP\",\n\t\"ATTACK_SPEED\",\n\t\"ATTACK_SPEED_SECONDS\",\n\t\"ATTACK_SPEED_TOOLTIP1\",\n\t\"ATTACK_TOOLTIP\",\n\t\"ATTACK_TOOLTIP_SUBTEXT\",\n\t\"AT_WAR\",\n\t\"AUCTIONS\",\n\t\"AUCTION_BUYOUT_ERROR\",\n\t\"AUCTION_CREATING\",\n\t\"AUCTION_CREATOR\",\n\t\"AUCTION_DURATION\",\n\t\"AUCTION_DURATION_ERROR\",\n\t\"AUCTION_DURATION_ONE\",\n\t\"AUCTION_DURATION_THREE\",\n\t\"AUCTION_DURATION_TWO\",\n\t\"AUCTION_EXPIRED_MAIL_SUBJECT\",\n\t\"AUCTION_HOUSE_CUT_COLON\",\n\t\"AUCTION_INVOICE_FUNDS_DELAY\",\n\t\"AUCTION_INVOICE_FUNDS_NOT_YET_SENT\",\n\t\"AUCTION_INVOICE_MAIL_SUBJECT\",\n\t\"AUCTION_INVOICE_PENDING_FUNDS_COLON\",\n\t\"AUCTION_ITEM\",\n\t\"AUCTION_ITEM_INCOMING_AMOUNT\",\n\t\"AUCTION_ITEM_SOLD\",\n\t\"AUCTION_ITEM_TEXT\",\n\t\"AUCTION_ITEM_TIME_UNTIL_DELIVERY\",\n\t\"AUCTION_NUM_STACKS\",\n\t\"AUCTION_OUTBID_MAIL_SUBJECT\",\n\t\"AUCTION_PRICE\",\n\t\"AUCTION_PRICE_PER_ITEM\",\n\t\"AUCTION_PRICE_PER_STACK\",\n\t\"AUCTION_REMOVED_MAIL_SUBJECT\",\n\t\"AUCTION_SOLD_MAIL_SUBJECT\",\n\t\"AUCTION_STACK_SIZE\",\n\t\"AUCTION_TIME_LEFT1\",\n\t\"AUCTION_TIME_LEFT1_DETAIL\",\n\t\"AUCTION_TIME_LEFT2\",\n\t\"AUCTION_TIME_LEFT2_DETAIL\",\n\t\"AUCTION_TIME_LEFT3\",\n\t\"AUCTION_TIME_LEFT3_DETAIL\",\n\t\"AUCTION_TIME_LEFT4\",\n\t\"AUCTION_TIME_LEFT4_DETAIL\",\n\t\"AUCTION_TITLE\",\n\t\"AUCTION_TOOLTIP_BID_PREFIX\",\n\t\"AUCTION_TOOLTIP_BUYOUT_PREFIX\",\n\t\"AUCTION_WON_MAIL_SUBJECT\",\n\t\"AURAS\",\n\t\"AURAS_COMBATLOG_TOOLTIP\",\n\t\"AURA_END\",\n\t\"AUTOFOLLOWSTART\",\n\t\"AUTOFOLLOWSTOP\",\n\t\"AUTOFOLLOWSTOPCOMBAT\",\n\t\"AUTO_ADD_DISABLED_GROUPED_TOOLTIP\",\n\t\"AUTO_ADD_DISABLED_QUEUED_TOOLTIP\",\n\t\"AUTO_ADD_MEMBERS\",\n\t\"AUTO_ADD_TOOLTIP\",\n\t\"AUTO_DISMOUNT_FLYING_TEXT\",\n\t\"AUTO_FOLLOW_SPEED\",\n\t\"AUTO_JOIN\",\n\t\"AUTO_JOIN_DISABLED_TOOLTIP\",\n\t\"AUTO_JOIN_GUILD_CHANNEL\",\n\t\"AUTO_JOIN_TOOLTIP\",\n\t\"AUTO_JOIN_VOICE\",\n\t\"AUTO_LOOT_DEFAULT_TEXT\",\n\t\"AUTO_LOOT_KEY_TEXT\",\n\t\"AUTO_QUEST_PROGRESS_TEXT\",\n\t\"AUTO_QUEST_WATCH_TEXT\",\n\t\"AUTO_RANGED_COMBAT_TEXT\",\n\t\"AUTO_SELF_CAST_KEY_TEXT\",\n\t\"AUTO_SELF_CAST_TEXT\",\n\t\"AVAILABLE\",\n\t\"AVAILABLE_QUESTS\",\n\t\"AVAILABLE_SERVICES\",\n\t\"AVERAGE_WAIT_TIME\",\n\t\"A_RANDOM_DUNGEON\",\n\t\"BACK\",\n\t\"BACKGROUND\",\n\t\"BACKPACK_TOOLTIP\",\n\t\"BACKSLOT\",\n\t\"BAGSLOT\",\n\t\"BAGSLOTTEXT\",\n\t\"BAGS_ONLY\",\n\t\"BANKSLOTPURCHASE\",\n\t\"BANKSLOTPURCHASE_LABEL\",\n\t\"BANK_BAG\",\n\t\"BANK_BAG_PURCHASE\",\n\t\"BARBERSHOP\",\n\t\"BASIC_OPTIONS_TOOLTIP\",\n\t\"BATTLEFIELDMINIMAP_OPACITY_LABEL\",\n\t\"BATTLEFIELDMINIMAP_OPTIONS_LABEL\",\n\t\"BATTLEFIELDS\",\n\t\"BATTLEFIELD_ALERT\",\n\t\"BATTLEFIELD_CONFIRM_STATUS\",\n\t\"BATTLEFIELD_FULL\",\n\t\"BATTLEFIELD_GROUP_JOIN\",\n\t\"BATTLEFIELD_IN_BATTLEFIELD\",\n\t\"BATTLEFIELD_IN_QUEUE\",\n\t\"BATTLEFIELD_IN_QUEUE_SIMPLE\",\n\t\"BATTLEFIELD_JOIN\",\n\t\"BATTLEFIELD_LEVEL\",\n\t\"BATTLEFIELD_MINIMAP\",\n\t\"BATTLEFIELD_MINIMAP_SHOW_ALWAYS\",\n\t\"BATTLEFIELD_MINIMAP_SHOW_BATTLEGROUNDS\",\n\t\"BATTLEFIELD_MINIMAP_SHOW_NEVER\",\n\t\"BATTLEFIELD_NAME\",\n\t\"BATTLEFIELD_QUEUE_CONFIRM\",\n\t\"BATTLEFIELD_QUEUE_CONFIRM_SIMPLE\",\n\t\"BATTLEFIELD_QUEUE_PENDING_REMOVAL\",\n\t\"BATTLEFIELD_QUEUE_STATUS\",\n\t\"BATTLEGROUND\",\n\t\"BATTLEGROUNDS\",\n\t\"BATTLEGROUND_COMPLETE_MESSAGE\",\n\t\"BATTLEGROUND_HOLIDAY\",\n\t\"BATTLEGROUND_HOLIDAY_EXPLANATION\",\n\t\"BATTLEGROUND_INSTANCE\",\n\t\"BATTLEGROUND_INSTANCE_TOOLTIP\",\n\t\"BATTLEGROUND_LEADER\",\n\t\"BATTLEGROUND_MESSAGE\",\n\t\"BATTLEGROUND_REQUIRED_LEVEL_TOOLTIP\",\n\t\"BATTLEGROUND_SILENCE\",\n\t\"BATTLEGROUND_UNSILENCE\",\n\t\"BATTLENET_FRIEND\",\n\t\"BATTLENET_FRIEND_INFO\",\n\t\"BATTLENET_FRIEND_LABEL\",\n\t\"BATTLENET_NAME_FORMAT\",\n\t\"BATTLENET_OPTIONS_LABEL\",\n\t\"BATTLENET_OPTIONS_SUBTEXT\",\n\t\"BATTLENET_UNAVAILABLE\",\n\t\"BATTLENET_UNAVAILABLE_ALERT\",\n\t\"BENCHMARK_TAXI_AVERAGE_FPS\",\n\t\"BENCHMARK_TAXI_MAX_FPS\",\n\t\"BENCHMARK_TAXI_MIN_FPS\",\n\t\"BENCHMARK_TAXI_MODE_OFF\",\n\t\"BENCHMARK_TAXI_MODE_ON\",\n\t\"BENCHMARK_TAXI_RESULTS\",\n\t\"BENCHMARK_TAXI_TOTAL_TIME\",\n\t\"BENEFICIAL\",\n\t\"BENEFICIAL_AURA_COMBATLOG_TOOLTIP\",\n\t\"BF_NOT_IN\",\n\t\"BG_SYSTEM_ALLIANCE\",\n\t\"BG_SYSTEM_HORDE\",\n\t\"BG_SYSTEM_NEUTRAL\",\n\t\"BID\",\n\t\"BIDS\",\n\t\"BID_AUCTION_CONFIRMATION\",\n\t\"BID_STATUS\",\n\t\"BILLING_NAG_DIALOG\",\n\t\"BILLING_NAG_WARNING\",\n\t\"BINDING_HEADER_ACTIONBAR\",\n\t\"BINDING_HEADER_BLANK\",\n\t\"BINDING_HEADER_CAMERA\",\n\t\"BINDING_HEADER_CHAT\",\n\t\"BINDING_HEADER_INTERFACE\",\n\t\"BINDING_HEADER_ITUNES_REMOTE\",\n\t\"BINDING_HEADER_MISC\",\n\t\"BINDING_HEADER_MOVEMENT\",\n\t\"BINDING_HEADER_MOVIE_RECORDING_SECTION\",\n\t\"BINDING_HEADER_MULTIACTIONBAR\",\n\t\"BINDING_HEADER_MULTICASTFUNCTIONS\",\n\t\"BINDING_HEADER_RAID_TARGET\",\n\t\"BINDING_HEADER_TARGETING\",\n\t\"BINDING_HEADER_VEHICLE\",\n\t\"BINDING_HEADER_VOICE_CHAT\",\n\t\"BINDING_NAME_ACTIONBUTTON1\",\n\t\"BINDING_NAME_ACTIONBUTTON10\",\n\t\"BINDING_NAME_ACTIONBUTTON11\",\n\t\"BINDING_NAME_ACTIONBUTTON12\",\n\t\"BINDING_NAME_ACTIONBUTTON2\",\n\t\"BINDING_NAME_ACTIONBUTTON3\",\n\t\"BINDING_NAME_ACTIONBUTTON4\",\n\t\"BINDING_NAME_ACTIONBUTTON5\",\n\t\"BINDING_NAME_ACTIONBUTTON6\",\n\t\"BINDING_NAME_ACTIONBUTTON7\",\n\t\"BINDING_NAME_ACTIONBUTTON8\",\n\t\"BINDING_NAME_ACTIONBUTTON9\",\n\t\"BINDING_NAME_ACTIONPAGE1\",\n\t\"BINDING_NAME_ACTIONPAGE2\",\n\t\"BINDING_NAME_ACTIONPAGE3\",\n\t\"BINDING_NAME_ACTIONPAGE4\",\n\t\"BINDING_NAME_ACTIONPAGE5\",\n\t\"BINDING_NAME_ACTIONPAGE6\",\n\t\"BINDING_NAME_ACTIONWINDOW1\",\n\t\"BINDING_NAME_ACTIONWINDOW2\",\n\t\"BINDING_NAME_ACTIONWINDOW3\",\n\t\"BINDING_NAME_ACTIONWINDOW4\",\n\t\"BINDING_NAME_ACTIONWINDOWDECREMENT\",\n\t\"BINDING_NAME_ACTIONWINDOWINCREMENT\",\n\t\"BINDING_NAME_ACTIONWINDOWMOVE\",\n\t\"BINDING_NAME_ALLNAMEPLATES\",\n\t\"BINDING_NAME_ASSISTTARGET\",\n\t\"BINDING_NAME_ATTACKTARGET\",\n\t\"BINDING_NAME_BONUSACTIONBUTTON1\",\n\t\"BINDING_NAME_BONUSACTIONBUTTON10\",\n\t\"BINDING_NAME_BONUSACTIONBUTTON2\",\n\t\"BINDING_NAME_BONUSACTIONBUTTON3\",\n\t\"BINDING_NAME_BONUSACTIONBUTTON4\",\n\t\"BINDING_NAME_BONUSACTIONBUTTON5\",\n\t\"BINDING_NAME_BONUSACTIONBUTTON6\",\n\t\"BINDING_NAME_BONUSACTIONBUTTON7\",\n\t\"BINDING_NAME_BONUSACTIONBUTTON8\",\n\t\"BINDING_NAME_BONUSACTIONBUTTON9\",\n\t\"BINDING_NAME_CAMERAZOOMIN\",\n\t\"BINDING_NAME_CAMERAZOOMOUT\",\n\t\"BINDING_NAME_CHATBOTTOM\",\n\t\"BINDING_NAME_CHATPAGEDOWN\",\n\t\"BINDING_NAME_CHATPAGEUP\",\n\t\"BINDING_NAME_COMBATLOGBOTTOM\",\n\t\"BINDING_NAME_COMBATLOGPAGEDOWN\",\n\t\"BINDING_NAME_COMBATLOGPAGEUP\",\n\t\"BINDING_NAME_DISMOUNT\",\n\t\"BINDING_NAME_FLIPCAMERAYAW\",\n\t\"BINDING_NAME_FOCUSTARGET\",\n\t\"BINDING_NAME_FOLLOWTARGET\",\n\t\"BINDING_NAME_FRIENDNAMEPLATES\",\n\t\"BINDING_NAME_INTERACTMOUSEOVER\",\n\t\"BINDING_NAME_INTERACTTARGET\",\n\t\"BINDING_NAME_INVERTBINDINGMODE1\",\n\t\"BINDING_NAME_INVERTBINDINGMODE2\",\n\t\"BINDING_NAME_INVERTBINDINGMODE3\",\n\t\"BINDING_NAME_ITUNES_BACKTRACK\",\n\t\"BINDING_NAME_ITUNES_NEXTTRACK\",\n\t\"BINDING_NAME_ITUNES_PLAYPAUSE\",\n\t\"BINDING_NAME_ITUNES_VOLUMEDOWN\",\n\t\"BINDING_NAME_ITUNES_VOLUMEUP\",\n\t\"BINDING_NAME_JUMP\",\n\t\"BINDING_NAME_MASTERVOLUMEDOWN\",\n\t\"BINDING_NAME_MASTERVOLUMEUP\",\n\t\"BINDING_NAME_MINIMAPZOOMIN\",\n\t\"BINDING_NAME_MINIMAPZOOMOUT\",\n\t\"BINDING_NAME_MOVEANDSTEER\",\n\t\"BINDING_NAME_MOVEBACKWARD\",\n\t\"BINDING_NAME_MOVEFORWARD\",\n\t\"BINDING_NAME_MOVEVIEWIN\",\n\t\"BINDING_NAME_MOVEVIEWOUT\",\n\t\"BINDING_NAME_MOVIE_RECORDING_CANCEL\",\n\t\"BINDING_NAME_MOVIE_RECORDING_COMPRESS\",\n\t\"BINDING_NAME_MOVIE_RECORDING_GUI\",\n\t\"BINDING_NAME_MOVIE_RECORDING_STARTSTOP\",\n\t\"BINDING_NAME_MULTIACTIONBAR1BUTTON1\",\n\t\"BINDING_NAME_MULTIACTIONBAR1BUTTON10\",\n\t\"BINDING_NAME_MULTIACTIONBAR1BUTTON11\",\n\t\"BINDING_NAME_MULTIACTIONBAR1BUTTON12\",\n\t\"BINDING_NAME_MULTIACTIONBAR1BUTTON2\",\n\t\"BINDING_NAME_MULTIACTIONBAR1BUTTON3\",\n\t\"BINDING_NAME_MULTIACTIONBAR1BUTTON4\",\n\t\"BINDING_NAME_MULTIACTIONBAR1BUTTON5\",\n\t\"BINDING_NAME_MULTIACTIONBAR1BUTTON6\",\n\t\"BINDING_NAME_MULTIACTIONBAR1BUTTON7\",\n\t\"BINDING_NAME_MULTIACTIONBAR1BUTTON8\",\n\t\"BINDING_NAME_MULTIACTIONBAR1BUTTON9\",\n\t\"BINDING_NAME_MULTIACTIONBAR2BUTTON1\",\n\t\"BINDING_NAME_MULTIACTIONBAR2BUTTON10\",\n\t\"BINDING_NAME_MULTIACTIONBAR2BUTTON11\",\n\t\"BINDING_NAME_MULTIACTIONBAR2BUTTON12\",\n\t\"BINDING_NAME_MULTIACTIONBAR2BUTTON2\",\n\t\"BINDING_NAME_MULTIACTIONBAR2BUTTON3\",\n\t\"BINDING_NAME_MULTIACTIONBAR2BUTTON4\",\n\t\"BINDING_NAME_MULTIACTIONBAR2BUTTON5\",\n\t\"BINDING_NAME_MULTIACTIONBAR2BUTTON6\",\n\t\"BINDING_NAME_MULTIACTIONBAR2BUTTON7\",\n\t\"BINDING_NAME_MULTIACTIONBAR2BUTTON8\",\n\t\"BINDING_NAME_MULTIACTIONBAR2BUTTON9\",\n\t\"BINDING_NAME_MULTIACTIONBAR3BUTTON1\",\n\t\"BINDING_NAME_MULTIACTIONBAR3BUTTON10\",\n\t\"BINDING_NAME_MULTIACTIONBAR3BUTTON11\",\n\t\"BINDING_NAME_MULTIACTIONBAR3BUTTON12\",\n\t\"BINDING_NAME_MULTIACTIONBAR3BUTTON2\",\n\t\"BINDING_NAME_MULTIACTIONBAR3BUTTON3\",\n\t\"BINDING_NAME_MULTIACTIONBAR3BUTTON4\",\n\t\"BINDING_NAME_MULTIACTIONBAR3BUTTON5\",\n\t\"BINDING_NAME_MULTIACTIONBAR3BUTTON6\",\n\t\"BINDING_NAME_MULTIACTIONBAR3BUTTON7\",\n\t\"BINDING_NAME_MULTIACTIONBAR3BUTTON8\",\n\t\"BINDING_NAME_MULTIACTIONBAR3BUTTON9\",\n\t\"BINDING_NAME_MULTIACTIONBAR4BUTTON1\",\n\t\"BINDING_NAME_MULTIACTIONBAR4BUTTON10\",\n\t\"BINDING_NAME_MULTIACTIONBAR4BUTTON11\",\n\t\"BINDING_NAME_MULTIACTIONBAR4BUTTON12\",\n\t\"BINDING_NAME_MULTIACTIONBAR4BUTTON2\",\n\t\"BINDING_NAME_MULTIACTIONBAR4BUTTON3\",\n\t\"BINDING_NAME_MULTIACTIONBAR4BUTTON4\",\n\t\"BINDING_NAME_MULTIACTIONBAR4BUTTON5\",\n\t\"BINDING_NAME_MULTIACTIONBAR4BUTTON6\",\n\t\"BINDING_NAME_MULTIACTIONBAR4BUTTON7\",\n\t\"BINDING_NAME_MULTIACTIONBAR4BUTTON8\",\n\t\"BINDING_NAME_MULTIACTIONBAR4BUTTON9\",\n\t\"BINDING_NAME_MULTICASTACTIONBUTTON1\",\n\t\"BINDING_NAME_MULTICASTACTIONBUTTON10\",\n\t\"BINDING_NAME_MULTICASTACTIONBUTTON11\",\n\t\"BINDING_NAME_MULTICASTACTIONBUTTON12\",\n\t\"BINDING_NAME_MULTICASTACTIONBUTTON2\",\n\t\"BINDING_NAME_MULTICASTACTIONBUTTON3\",\n\t\"BINDING_NAME_MULTICASTACTIONBUTTON4\",\n\t\"BINDING_NAME_MULTICASTACTIONBUTTON5\",\n\t\"BINDING_NAME_MULTICASTACTIONBUTTON6\",\n\t\"BINDING_NAME_MULTICASTACTIONBUTTON7\",\n\t\"BINDING_NAME_MULTICASTACTIONBUTTON8\",\n\t\"BINDING_NAME_MULTICASTACTIONBUTTON9\",\n\t\"BINDING_NAME_MULTICASTRECALLBUTTON1\",\n\t\"BINDING_NAME_MULTICASTSUMMONBUTTON1\",\n\t\"BINDING_NAME_MULTICASTSUMMONBUTTON2\",\n\t\"BINDING_NAME_MULTICASTSUMMONBUTTON3\",\n\t\"BINDING_NAME_NAMEPLATES\",\n\t\"BINDING_NAME_NEXTACTIONPAGE\",\n\t\"BINDING_NAME_NEXTVIEW\",\n\t\"BINDING_NAME_OPENALLBAGS\",\n\t\"BINDING_NAME_OPENCHAT\",\n\t\"BINDING_NAME_OPENCHATSLASH\",\n\t\"BINDING_NAME_PETATTACK\",\n\t\"BINDING_NAME_PITCHDECREMENT\",\n\t\"BINDING_NAME_PITCHDOWN\",\n\t\"BINDING_NAME_PITCHINCREMENT\",\n\t\"BINDING_NAME_PITCHUP\",\n\t\"BINDING_NAME_PREVIOUSACTIONPAGE\",\n\t\"BINDING_NAME_PREVVIEW\",\n\t\"BINDING_NAME_PUSHTOTALK\",\n\t\"BINDING_NAME_RAIDTARGET1\",\n\t\"BINDING_NAME_RAIDTARGET2\",\n\t\"BINDING_NAME_RAIDTARGET3\",\n\t\"BINDING_NAME_RAIDTARGET4\",\n\t\"BINDING_NAME_RAIDTARGET5\",\n\t\"BINDING_NAME_RAIDTARGET6\",\n\t\"BINDING_NAME_RAIDTARGET7\",\n\t\"BINDING_NAME_RAIDTARGET8\",\n\t\"BINDING_NAME_RAIDTARGETNONE\",\n\t\"BINDING_NAME_REPLY\",\n\t\"BINDING_NAME_REPLY2\",\n\t\"BINDING_NAME_RESETVIEW1\",\n\t\"BINDING_NAME_RESETVIEW2\",\n\t\"BINDING_NAME_RESETVIEW3\",\n\t\"BINDING_NAME_RESETVIEW4\",\n\t\"BINDING_NAME_RESETVIEW5\",\n\t\"BINDING_NAME_SAVEVIEW1\",\n\t\"BINDING_NAME_SAVEVIEW2\",\n\t\"BINDING_NAME_SAVEVIEW3\",\n\t\"BINDING_NAME_SAVEVIEW4\",\n\t\"BINDING_NAME_SAVEVIEW5\",\n\t\"BINDING_NAME_SCREENSHOT\",\n\t\"BINDING_NAME_SETVIEW1\",\n\t\"BINDING_NAME_SETVIEW2\",\n\t\"BINDING_NAME_SETVIEW3\",\n\t\"BINDING_NAME_SETVIEW4\",\n\t\"BINDING_NAME_SETVIEW5\",\n\t\"BINDING_NAME_SHAPESHIFTBUTTON1\",\n\t\"BINDING_NAME_SHAPESHIFTBUTTON10\",\n\t\"BINDING_NAME_SHAPESHIFTBUTTON2\",\n\t\"BINDING_NAME_SHAPESHIFTBUTTON3\",\n\t\"BINDING_NAME_SHAPESHIFTBUTTON4\",\n\t\"BINDING_NAME_SHAPESHIFTBUTTON5\",\n\t\"BINDING_NAME_SHAPESHIFTBUTTON6\",\n\t\"BINDING_NAME_SHAPESHIFTBUTTON7\",\n\t\"BINDING_NAME_SHAPESHIFTBUTTON8\",\n\t\"BINDING_NAME_SHAPESHIFTBUTTON9\",\n\t\"BINDING_NAME_SITORSTAND\",\n\t\"BINDING_NAME_STARTATTACK\",\n\t\"BINDING_NAME_STOPATTACK\",\n\t\"BINDING_NAME_STOPCASTING\",\n\t\"BINDING_NAME_STRAFELEFT\",\n\t\"BINDING_NAME_STRAFERIGHT\",\n\t\"BINDING_NAME_SWINGCAMERA\",\n\t\"BINDING_NAME_SWINGCAMERAANDPLAYER\",\n\t\"BINDING_NAME_TARGETENEMYDIRECTIONAL\",\n\t\"BINDING_NAME_TARGETFOCUS\",\n\t\"BINDING_NAME_TARGETFRIENDDIRECTIONAL\",\n\t\"BINDING_NAME_TARGETLASTHOSTILE\",\n\t\"BINDING_NAME_TARGETLASTTARGET\",\n\t\"BINDING_NAME_TARGETMOUSEOVER\",\n\t\"BINDING_NAME_TARGETNEARESTENEMY\",\n\t\"BINDING_NAME_TARGETNEARESTENEMYPLAYER\",\n\t\"BINDING_NAME_TARGETNEARESTFRIEND\",\n\t\"BINDING_NAME_TARGETNEARESTFRIENDPLAYER\",\n\t\"BINDING_NAME_TARGETPARTYMEMBER1\",\n\t\"BINDING_NAME_TARGETPARTYMEMBER2\",\n\t\"BINDING_NAME_TARGETPARTYMEMBER3\",\n\t\"BINDING_NAME_TARGETPARTYMEMBER4\",\n\t\"BINDING_NAME_TARGETPARTYPET1\",\n\t\"BINDING_NAME_TARGETPARTYPET2\",\n\t\"BINDING_NAME_TARGETPARTYPET3\",\n\t\"BINDING_NAME_TARGETPARTYPET4\",\n\t\"BINDING_NAME_TARGETPET\",\n\t\"BINDING_NAME_TARGETPREVIOUSENEMY\",\n\t\"BINDING_NAME_TARGETPREVIOUSENEMYPLAYER\",\n\t\"BINDING_NAME_TARGETPREVIOUSFRIEND\",\n\t\"BINDING_NAME_TARGETPREVIOUSFRIENDPLAYER\",\n\t\"BINDING_NAME_TARGETSELF\",\n\t\"BINDING_NAME_TARGETTALKER\",\n\t\"BINDING_NAME_TOGGLEABILITYBOOK\",\n\t\"BINDING_NAME_TOGGLEACHIEVEMENT\",\n\t\"BINDING_NAME_TOGGLEACTIONBARLOCK\",\n\t\"BINDING_NAME_TOGGLEAUTORUN\",\n\t\"BINDING_NAME_TOGGLEAUTOSELFCAST\",\n\t\"BINDING_NAME_TOGGLEBACKPACK\",\n\t\"BINDING_NAME_TOGGLEBAG1\",\n\t\"BINDING_NAME_TOGGLEBAG2\",\n\t\"BINDING_NAME_TOGGLEBAG3\",\n\t\"BINDING_NAME_TOGGLEBAG4\",\n\t\"BINDING_NAME_TOGGLEBAG5\",\n\t\"BINDING_NAME_TOGGLEBATTLEFIELDMINIMAP\",\n\t\"BINDING_NAME_TOGGLEBINDINGMODE1\",\n\t\"BINDING_NAME_TOGGLEBINDINGMODE2\",\n\t\"BINDING_NAME_TOGGLEBINDINGMODE3\",\n\t\"BINDING_NAME_TOGGLECHANNELPULLOUT\",\n\t\"BINDING_NAME_TOGGLECHANNELTAB\",\n\t\"BINDING_NAME_TOGGLECHARACTER0\",\n\t\"BINDING_NAME_TOGGLECHARACTER1\",\n\t\"BINDING_NAME_TOGGLECHARACTER2\",\n\t\"BINDING_NAME_TOGGLECHARACTER3\",\n\t\"BINDING_NAME_TOGGLECHARACTER4\",\n\t\"BINDING_NAME_TOGGLECHATTAB\",\n\t\"BINDING_NAME_TOGGLECOMBATLOG\",\n\t\"BINDING_NAME_TOGGLECURRENCY\",\n\t\"BINDING_NAME_TOGGLEFPS\",\n\t\"BINDING_NAME_TOGGLEFRIENDSTAB\",\n\t\"BINDING_NAME_TOGGLEGAMEMENU\",\n\t\"BINDING_NAME_TOGGLEGUILDTAB\",\n\t\"BINDING_NAME_TOGGLEIGNORETAB\",\n\t\"BINDING_NAME_TOGGLEINSCRIPTION\",\n\t\"BINDING_NAME_TOGGLEKEYRING\",\n\t\"BINDING_NAME_TOGGLELFGPARENT\",\n\t\"BINDING_NAME_TOGGLELFRPARENT\",\n\t\"BINDING_NAME_TOGGLEMINIMAP\",\n\t\"BINDING_NAME_TOGGLEMINIMAPROTATION\",\n\t\"BINDING_NAME_TOGGLEMOUSE\",\n\t\"BINDING_NAME_TOGGLEMUSIC\",\n\t\"BINDING_NAME_TOGGLEPETBOOK\",\n\t\"BINDING_NAME_TOGGLEPVP\",\n\t\"BINDING_NAME_TOGGLEQUESTLOG\",\n\t\"BINDING_NAME_TOGGLERAIDTAB\",\n\t\"BINDING_NAME_TOGGLERUN\",\n\t\"BINDING_NAME_TOGGLESELFMUTE\",\n\t\"BINDING_NAME_TOGGLESHEATH\",\n\t\"BINDING_NAME_TOGGLESOCIAL\",\n\t\"BINDING_NAME_TOGGLESOUND\",\n\t\"BINDING_NAME_TOGGLESPELLBOOK\",\n\t\"BINDING_NAME_TOGGLESTATISTICS\",\n\t\"BINDING_NAME_TOGGLETALENTS\",\n\t\"BINDING_NAME_TOGGLEUI\",\n\t\"BINDING_NAME_TOGGLEWHOTAB\",\n\t\"BINDING_NAME_TOGGLEWORLDMAP\",\n\t\"BINDING_NAME_TOGGLEWORLDMAPSIZE\",\n\t\"BINDING_NAME_TOGGLEWORLDSTATESCORES\",\n\t\"BINDING_NAME_TURNLEFT\",\n\t\"BINDING_NAME_TURNRIGHT\",\n\t\"BINDING_NAME_VEHICLEAIMDECREMENT\",\n\t\"BINDING_NAME_VEHICLEAIMDOWN\",\n\t\"BINDING_NAME_VEHICLEAIMINCREMENT\",\n\t\"BINDING_NAME_VEHICLEAIMUP\",\n\t\"BINDING_NAME_VEHICLECAMERAZOOMIN\",\n\t\"BINDING_NAME_VEHICLECAMERAZOOMOUT\",\n\t\"BINDING_NAME_VEHICLEEXIT\",\n\t\"BINDING_NAME_VEHICLENEXTSEAT\",\n\t\"BINDING_NAME_VEHICLEPREVSEAT\",\n\t\"BIND_ENCHANT\",\n\t\"BIND_KEY_TO_COMMAND\",\n\t\"BIND_TRADE_TIME_REMAINING\",\n\t\"BIND_ZONE_DISPLAY\",\n\t\"BLIZZARD_COMBAT_LOG_MENU_BOTH\",\n\t\"BLIZZARD_COMBAT_LOG_MENU_EVERYTHING\",\n\t\"BLIZZARD_COMBAT_LOG_MENU_INCOMING\",\n\t\"BLIZZARD_COMBAT_LOG_MENU_OUTGOING\",\n\t\"BLIZZARD_COMBAT_LOG_MENU_OUTGOING_ME\",\n\t\"BLIZZARD_COMBAT_LOG_MENU_RESET\",\n\t\"BLIZZARD_COMBAT_LOG_MENU_REVERT\",\n\t\"BLIZZARD_COMBAT_LOG_MENU_SAVE\",\n\t\"BLIZZARD_COMBAT_LOG_MENU_SPELL_HIDE\",\n\t\"BLIZZARD_COMBAT_LOG_MENU_SPELL_LINK\",\n\t\"BLIZZARD_COMBAT_LOG_MENU_SPELL_TYPE_HEADER\",\n\t\"BLOCK\",\n\t\"BLOCKED_COMMUNICATION\",\n\t\"BLOCKED_INVITES\",\n\t\"BLOCK_CHANCE\",\n\t\"BLOCK_COMMUNICATION\",\n\t\"BLOCK_INVITES\",\n\t\"BLOCK_INVITES_CONFIRMATION\",\n\t\"BLOCK_INVITES_TOOLTIP\",\n\t\"BLOCK_TRADES\",\n\t\"BLOCK_TRAILER\",\n\t\"BLUE_GEM\",\n\t\"BNET_BROADCAST_SENT_TIME\",\n\t\"BNET_INVITE_SENT_TIME\",\n\t\"BNET_LAST_ONLINE_TIME\",\n\t\"BNET_REPORT\",\n\t\"BNET_REPORT_ABUSE\",\n\t\"BNET_REPORT_ABUSE_BUTTON\",\n\t\"BNET_REPORT_ABUSE_LABEL\",\n\t\"BNET_REPORT_ABUSE_PROMPT\",\n\t\"BNET_REPORT_CONFIRM_ABUSE\",\n\t\"BNET_REPORT_CONFIRM_NAME\",\n\t\"BNET_REPORT_CONFIRM_SPAM\",\n\t\"BNET_REPORT_NAME\",\n\t\"BNET_REPORT_PLAYER\",\n\t\"BNET_REPORT_PLAYER_TOOLTIP\",\n\t\"BNET_REPORT_SENT\",\n\t\"BNET_REPORT_SPAM\",\n\t\"BN_BROADCAST_TOOLTIP\",\n\t\"BN_CONVERSATION\",\n\t\"BN_INLINE_TOAST_ALERT\",\n\t\"BN_INLINE_TOAST_BROADCAST\",\n\t\"BN_INLINE_TOAST_BROADCAST_INFORM\",\n\t\"BN_INLINE_TOAST_CONVERSATION\",\n\t\"BN_INLINE_TOAST_FRIEND_ADDED\",\n\t\"BN_INLINE_TOAST_FRIEND_OFFLINE\",\n\t\"BN_INLINE_TOAST_FRIEND_ONLINE\",\n\t\"BN_INLINE_TOAST_FRIEND_PENDING\",\n\t\"BN_INLINE_TOAST_FRIEND_REMOVED\",\n\t\"BN_INLINE_TOAST_FRIEND_REQUEST\",\n\t\"BN_TOAST_CONVERSATION\",\n\t\"BN_TOAST_NEW_INVITE\",\n\t\"BN_TOAST_OFFLINE\",\n\t\"BN_TOAST_ONLINE\",\n\t\"BN_TOAST_PENDING_INVITES\",\n\t\"BN_UNABLE_TO_RESOLVE_NAME\",\n\t\"BN_WHISPER\",\n\t\"BONUS_ARENA_POINTS\",\n\t\"BONUS_DAMAGE\",\n\t\"BONUS_DAMAGE_ABBR\",\n\t\"BONUS_HEALING\",\n\t\"BONUS_HEALING_ABBR\",\n\t\"BONUS_HEALING_TOOLTIP\",\n\t\"BONUS_HONOR\",\n\t\"BONUS_TALENTS\",\n\t\"BOSS\",\n\t\"BOSSES\",\n\t\"BOSSES_KILLED\",\n\t\"BOSS_ALIVE\",\n\t\"BOSS_DEAD\",\n\t\"BREATH_LABEL\",\n\t\"BROWSE\",\n\t\"BROWSE_AUCTIONS\",\n\t\"BROWSE_NO_RESULTS\",\n\t\"BROWSE_SEARCH_TEXT\",\n\t\"BROWSING\",\n\t\"BUFFERING\",\n\t\"BUFFER_DOUBLE\",\n\t\"BUFFOPTIONS_LABEL\",\n\t\"BUFFOPTIONS_SUBTEXT\",\n\t\"BUG_BUTTON\",\n\t\"BUG_CATEGORY1\",\n\t\"BUG_CATEGORY2\",\n\t\"BUG_CATEGORY3\",\n\t\"BUG_CATEGORY4\",\n\t\"BUG_CATEGORY5\",\n\t\"BUG_CATEGORY6\",\n\t\"BUG_CATEGORY7\",\n\t\"BUG_CATEGORY8\",\n\t\"BUG_CATEGORY9\",\n\t\"BUG_CATEGORY10\",\n\t\"BUG_CATEGORY11\",\n\t\"BUG_CATEGORY12\",\n\t\"BUG_CATEGORY13\",\n\t\"BUG_CATEGORY14\",\n\t\"BUG_CATEGORY15\",\n\t\"BUG_CATEGORY_CHOOSE\",\n\t\"BUG_CATEGORY_ERROR\",\n\t\"BUG_SUBMITTED\",\n\t\"BUG_SUBMIT_FAILED\",\n\t\"BUILDING_DAMAGE\",\n\t\"BUILDING_DAMAGE_COMBATLOG_TOOLTIP\",\n\t\"BUILDING_HEAL\",\n\t\"BUILDING_HEAL_COMBATLOG_TOOLTIP\",\n\t\"BUTTON_LAG_AUCTIONHOUSE\",\n\t\"BUTTON_LAG_AUCTIONHOUSE_NEWBIE\",\n\t\"BUTTON_LAG_AUCTIONHOUSE_TOOLTIP\",\n\t\"BUTTON_LAG_CHAT\",\n\t\"BUTTON_LAG_CHAT_NEWBIE\",\n\t\"BUTTON_LAG_CHAT_TOOLTIP\",\n\t\"BUTTON_LAG_LOOT\",\n\t\"BUTTON_LAG_LOOT_NEWBIE\",\n\t\"BUTTON_LAG_LOOT_TOOLTIP\",\n\t\"BUTTON_LAG_MAIL\",\n\t\"BUTTON_LAG_MAIL_NEWBIE\",\n\t\"BUTTON_LAG_MAIL_TOOLTIP\",\n\t\"BUTTON_LAG_MOVEMENT\",\n\t\"BUTTON_LAG_MOVEMENT_NEWBIE\",\n\t\"BUTTON_LAG_MOVEMENT_TOOLTIP\",\n\t\"BUTTON_LAG_SPELL\",\n\t\"BUTTON_LAG_SPELL_NEWBIE\",\n\t\"BUTTON_LAG_SPELL_TOOLTIP\",\n\t\"BUYBACK\",\n\t\"BUYBACK_THIS_ITEM\",\n\t\"BUYOUT\",\n\t\"BUYOUT_AUCTION_CONFIRMATION\",\n\t\"BUYOUT_COST\",\n\t\"BUYOUT_PRICE\",\n\t\"BUY_GUILDBANK_TAB\",\n\t\"BY_SOURCE\",\n\t\"BY_SOURCE_COMBATLOG_TOOLTIP\",\n\t\"BY_TARGET\",\n\t\"BY_TARGET_COMBATLOG_TOOLTIP\",\n\t\"CALENDAR_ACCEPT_INVITATION\",\n\t\"CALENDAR_ANNOUNCEMENT_CREATEDBY_PLAYER\",\n\t\"CALENDAR_ANNOUNCEMENT_CREATEDBY_YOURSELF\",\n\t\"CALENDAR_AUTO_APPROVE\",\n\t\"CALENDAR_COPY_EVENT\",\n\t\"CALENDAR_CREATE\",\n\t\"CALENDAR_CREATE_ANNOUNCEMENT\",\n\t\"CALENDAR_CREATE_ARENATEAM_EVENT\",\n\t\"CALENDAR_CREATE_EVENT\",\n\t\"CALENDAR_CREATE_GUILD_ANNOUNCEMENT\",\n\t\"CALENDAR_CREATE_GUILD_EVENT\",\n\t\"CALENDAR_DECLINE_INVITATION\",\n\t\"CALENDAR_DELETE_ANNOUNCEMENT_CONFIRM\",\n\t\"CALENDAR_DELETE_EVENT\",\n\t\"CALENDAR_DELETE_EVENT_CONFIRM\",\n\t\"CALENDAR_DELETE_GUILD_EVENT_CONFIRM\",\n\t\"CALENDAR_EDIT_ANNOUNCEMENT\",\n\t\"CALENDAR_EDIT_EVENT\",\n\t\"CALENDAR_EDIT_GUILD_EVENT\",\n\t\"CALENDAR_ERROR\",\n\t\"CALENDAR_ERROR_ALREADY_INVITED_TO_EVENT_S\",\n\t\"CALENDAR_ERROR_ARENA_EVENTS_EXCEEDED\",\n\t\"CALENDAR_ERROR_CREATEDATE_AFTER_MAX\",\n\t\"CALENDAR_ERROR_CREATEDATE_BEFORE_TODAY\",\n\t\"CALENDAR_ERROR_DELETE_CREATOR_FAILED\",\n\t\"CALENDAR_ERROR_EVENTS_EXCEEDED\",\n\t\"CALENDAR_ERROR_EVENT_INVALID\",\n\t\"CALENDAR_ERROR_EVENT_LOCKED\",\n\t\"CALENDAR_ERROR_EVENT_PASSED\",\n\t\"CALENDAR_ERROR_EVENT_THROTTLED\",\n\t\"CALENDAR_ERROR_EVENT_TIME_PASSED\",\n\t\"CALENDAR_ERROR_EVENT_WRONG_SERVER\",\n\t\"CALENDAR_ERROR_GUILD_EVENTS_EXCEEDED\",\n\t\"CALENDAR_ERROR_IGNORED\",\n\t\"CALENDAR_ERROR_INTERNAL\",\n\t\"CALENDAR_ERROR_INVALID_DATE\",\n\t\"CALENDAR_ERROR_INVALID_SIGNUP\",\n\t\"CALENDAR_ERROR_INVALID_TIME\",\n\t\"CALENDAR_ERROR_INVITES_DISABLED\",\n\t\"CALENDAR_ERROR_INVITES_EXCEEDED\",\n\t\"CALENDAR_ERROR_INVITE_THROTTLED\",\n\t\"CALENDAR_ERROR_INVITE_WRONG_SERVER\",\n\t\"CALENDAR_ERROR_NEEDS_TITLE\",\n\t\"CALENDAR_ERROR_NOT_ALLIED\",\n\t\"CALENDAR_ERROR_NOT_INVITED\",\n\t\"CALENDAR_ERROR_NO_GUILD_INVITES\",\n\t\"CALENDAR_ERROR_NO_INVITE\",\n\t\"CALENDAR_ERROR_NO_MODERATOR\",\n\t\"CALENDAR_ERROR_OTHER_INVITES_EXCEEDED\",\n\t\"CALENDAR_ERROR_PERMISSIONS\",\n\t\"CALENDAR_ERROR_RESTRICTED_LEVEL\",\n\t\"CALENDAR_ERROR_SELF_INVITES_EXCEEDED\",\n\t\"CALENDAR_EVENTNAME_FORMAT_END\",\n\t\"CALENDAR_EVENTNAME_FORMAT_RAID_LOCKOUT\",\n\t\"CALENDAR_EVENTNAME_FORMAT_RAID_RESET\",\n\t\"CALENDAR_EVENTNAME_FORMAT_START\",\n\t\"CALENDAR_EVENT_ALARM_MESSAGE\",\n\t\"CALENDAR_EVENT_CREATORNAME\",\n\t\"CALENDAR_EVENT_DESCRIPTION\",\n\t\"CALENDAR_EVENT_INVITEDBY_PLAYER\",\n\t\"CALENDAR_EVENT_INVITEDBY_YOURSELF\",\n\t\"CALENDAR_EVENT_NAME\",\n\t\"CALENDAR_EVENT_PICKER_TITLE\",\n\t\"CALENDAR_EVENT_REMOVED_MAIL_BODY\",\n\t\"CALENDAR_EVENT_REMOVED_MAIL_SUBJECT\",\n\t\"CALENDAR_FILTERS\",\n\t\"CALENDAR_FILTER_BATTLEGROUND\",\n\t\"CALENDAR_FILTER_DARKMOON\",\n\t\"CALENDAR_FILTER_RAID_LOCKOUTS\",\n\t\"CALENDAR_FILTER_RAID_RESETS\",\n\t\"CALENDAR_FILTER_WEEKLY_HOLIDAYS\",\n\t\"CALENDAR_GUILDEVENT_INVITEDBY_YOURSELF\",\n\t\"CALENDAR_INVITELIST_CLEARMODERATOR\",\n\t\"CALENDAR_INVITELIST_CREATORNAME\",\n\t\"CALENDAR_INVITELIST_INVITETORAID\",\n\t\"CALENDAR_INVITELIST_MODERATORNAME\",\n\t\"CALENDAR_INVITELIST_SETINVITESTATUS\",\n\t\"CALENDAR_INVITELIST_SETMODERATOR\",\n\t\"CALENDAR_INVITE_ALL\",\n\t\"CALENDAR_INVITE_CONFIRMED\",\n\t\"CALENDAR_INVITE_LABEL\",\n\t\"CALENDAR_INVITE_MEMBERS\",\n\t\"CALENDAR_INVITE_PLAYER\",\n\t\"CALENDAR_INVITE_REMOVED_MAIL_BODY\",\n\t\"CALENDAR_INVITE_REMOVED_MAIL_SUBJECT\",\n\t\"CALENDAR_LOCK_EVENT\",\n\t\"CALENDAR_MASSINVITE_ARENA_HELP\",\n\t\"CALENDAR_MASSINVITE_GUILD_HELP\",\n\t\"CALENDAR_MASSINVITE_GUILD_MINRANK\",\n\t\"CALENDAR_MASS_INVITE\",\n\t\"CALENDAR_NOT_SIGNEDUP_FOR_GUILDEVENT\",\n\t\"CALENDAR_PASTE_EVENT\",\n\t\"CALENDAR_PLAYER_NAME\",\n\t\"CALENDAR_RAID_LOCKOUT_DESCRIPTION\",\n\t\"CALENDAR_RAID_RESET_DESCRIPTION\",\n\t\"CALENDAR_REMOVE_INVITATION\",\n\t\"CALENDAR_REMOVE_SIGNUP\",\n\t\"CALENDAR_REPEAT_BIWEEKLY\",\n\t\"CALENDAR_REPEAT_MONTHLY\",\n\t\"CALENDAR_REPEAT_NEVER\",\n\t\"CALENDAR_REPEAT_WEEKLY\",\n\t\"CALENDAR_SET_DESCRIPTION_LABEL\",\n\t\"CALENDAR_SIGNEDUP_FOR_GUILDEVENT_WITH_STATUS\",\n\t\"CALENDAR_SIGNUP\",\n\t\"CALENDAR_SIGNUP_FOR_GUILDEVENT\",\n\t\"CALENDAR_STATUS_ACCEPTED\",\n\t\"CALENDAR_STATUS_CONFIRMED\",\n\t\"CALENDAR_STATUS_DECLINED\",\n\t\"CALENDAR_STATUS_INVITED\",\n\t\"CALENDAR_STATUS_NOT_SIGNEDUP\",\n\t\"CALENDAR_STATUS_OUT\",\n\t\"CALENDAR_STATUS_SIGNEDUP\",\n\t\"CALENDAR_STATUS_STANDBY\",\n\t\"CALENDAR_STATUS_TENTATIVE\",\n\t\"CALENDAR_TENTATIVE_INVITATION\",\n\t\"CALENDAR_TEXTURE_PICKER_TITLE_DUNGEON\",\n\t\"CALENDAR_TEXTURE_PICKER_TITLE_RAID\",\n\t\"CALENDAR_TOOLTIP_AUTOAPPROVE\",\n\t\"CALENDAR_TOOLTIP_AVAILABLEBUTTON\",\n\t\"CALENDAR_TOOLTIP_DECLINEBUTTON\",\n\t\"CALENDAR_TOOLTIP_INVITEMEMBERS_BUTTON_PARTY\",\n\t\"CALENDAR_TOOLTIP_INVITEMEMBERS_BUTTON_RAID\",\n\t\"CALENDAR_TOOLTIP_INVITE_RESPONDED\",\n\t\"CALENDAR_TOOLTIP_INVITE_TOTALS\",\n\t\"CALENDAR_TOOLTIP_LOCKEVENT\",\n\t\"CALENDAR_TOOLTIP_MASSINVITE\",\n\t\"CALENDAR_TOOLTIP_REMOVEBUTTON\",\n\t\"CALENDAR_TOOLTIP_REMOVESIGNUPBUTTON\",\n\t\"CALENDAR_TOOLTIP_SIGNUPBUTTON\",\n\t\"CALENDAR_TOOLTIP_TENTATIVEBUTTON\",\n\t\"CALENDAR_TYPE_DUNGEON\",\n\t\"CALENDAR_TYPE_MEETING\",\n\t\"CALENDAR_TYPE_OTHER\",\n\t\"CALENDAR_TYPE_PVP\",\n\t\"CALENDAR_TYPE_RAID\",\n\t\"CALENDAR_UPDATE\",\n\t\"CALENDAR_VIEW_ANNOUNCEMENT\",\n\t\"CALENDAR_VIEW_EVENT\",\n\t\"CALENDAR_VIEW_EVENTTITLE_LOCKED\",\n\t\"CALENDAR_VIEW_EVENTTYPE\",\n\t\"CALENDAR_VIEW_EVENT_REMOVE\",\n\t\"CALENDAR_VIEW_EVENT_SETSTATUS\",\n\t\"CALENDAR_VIEW_EVENT_TENTATIVE\",\n\t\"CALENDAR_VIEW_GUILD_EVENT\",\n\t\"CALIBRATION_TEXT\",\n\t\"CAMERA_ALWAYS\",\n\t\"CAMERA_FOLLOWING_STYLE\",\n\t\"CAMERA_LABEL\",\n\t\"CAMERA_LOCKED\",\n\t\"CAMERA_MODE\",\n\t\"CAMERA_NEVER\",\n\t\"CAMERA_SMART\",\n\t\"CAMERA_SMARTER\",\n\t\"CAMERA_SUBTEXT\",\n\t\"CAMP_NOW\",\n\t\"CAMP_TIMER\",\n\t\"CANCEL\",\n\t\"CANCEL_AUCTION\",\n\t\"CANCEL_AUCTION_CONFIRMATION\",\n\t\"CANCEL_AUCTION_CONFIRMATION_MONEY\",\n\t\"CANNOT_COOPERATE_LABEL\",\n\t\"CANT_AFFORD_ITEM\",\n\t\"CANT_USE_ITEM\",\n\t\"CAN_BIND_PTT\",\n\t\"CAPSLOCK_KEY_TEXT\",\n\t\"CASH_ON_DELIVERY\",\n\t\"CAST_WHILE_MOVING\",\n\t\"CATEGORIES\",\n\t\"CATEGORY\",\n\t\"CHANCE_TO_BLOCK\",\n\t\"CHANCE_TO_CRIT\",\n\t\"CHANCE_TO_DODGE\",\n\t\"CHANCE_TO_PARRY\",\n\t\"CHANGE_INSTANCE\",\n\t\"CHANGE_MACRO_NAME_ICON\",\n\t\"CHANGE_OPACITY\",\n\t\"CHANNEL\",\n\t\"CHANNELING\",\n\t\"CHANNELPULLOUT_OPACITY_LABEL\",\n\t\"CHANNELPULLOUT_OPTIONS_LABEL\",\n\t\"CHANNELS\",\n\t\"CHANNEL_CATEGORY_CUSTOM\",\n\t\"CHANNEL_CATEGORY_GROUP\",\n\t\"CHANNEL_CATEGORY_WORLD\",\n\t\"CHANNEL_CHANNEL_NAME\",\n\t\"CHANNEL_INVITE\",\n\t\"CHANNEL_JOIN_CHANNEL\",\n\t\"CHANNEL_NEW_CHANNEL\",\n\t\"CHANNEL_PASSWORD\",\n\t\"CHANNEL_ROSTER\",\n\t\"CHARACTER\",\n\t\"CHARACTER_BUTTON\",\n\t\"CHARACTER_FRIEND\",\n\t\"CHARACTER_FRIEND_INFO\",\n\t\"CHARACTER_FRIEND_LABEL\",\n\t\"CHARACTER_INFO\",\n\t\"CHARACTER_KEY_BINDINGS\",\n\t\"CHARACTER_POINTS2_COLON\",\n\t\"CHARACTER_POINTS_CHANGED\",\n\t\"CHARACTER_SHADOWS\",\n\t\"CHARACTER_SPECIFIC_KEYBINDINGS\",\n\t\"CHARACTER_SPECIFIC_KEYBINDING_TOOLTIP\",\n\t\"CHARACTER_SPECIFIC_MACROS\",\n\t\"CHAT\",\n\t\"CHATCONFIG_HEADER\",\n\t\"CHATLOGDISABLED\",\n\t\"CHATLOGENABLED\",\n\t\"CHAT_AFK_GET\",\n\t\"CHAT_ANNOUNCE\",\n\t\"CHAT_ANNOUNCEMENTS_OFF_NOTICE\",\n\t\"CHAT_ANNOUNCEMENTS_OFF_NOTICE_BN\",\n\t\"CHAT_ANNOUNCEMENTS_ON_NOTICE\",\n\t\"CHAT_ANNOUNCEMENTS_ON_NOTICE_BN\",\n\t\"CHAT_AUTO_JOIN\",\n\t\"CHAT_BAN\",\n\t\"CHAT_BANNED_NOTICE\",\n\t\"CHAT_BATTLEGROUND_GET\",\n\t\"CHAT_BATTLEGROUND_LEADER_GET\",\n\t\"CHAT_BATTLEGROUND_SEND\",\n\t\"CHAT_BN_CONVERSATION_GET\",\n\t\"CHAT_BN_CONVERSATION_GET_LINK\",\n\t\"CHAT_BN_CONVERSATION_LIST\",\n\t\"CHAT_BN_CONVERSATION_SEND\",\n\t\"CHAT_BN_WHISPER_GET\",\n\t\"CHAT_BN_WHISPER_INFORM_GET\",\n\t\"CHAT_BN_WHISPER_SEND\",\n\t\"CHAT_BUBBLES_TEXT\",\n\t\"CHAT_CHANNELS\",\n\t\"CHAT_CHANNEL_GET\",\n\t\"CHAT_CHANNEL_JOIN_GET\",\n\t\"CHAT_CHANNEL_LEAVE_GET\",\n\t\"CHAT_CHANNEL_LIST_GET\",\n\t\"CHAT_CHANNEL_OWNER_NOTICE\",\n\t\"CHAT_CHANNEL_OWNER_NOTICE_BN\",\n\t\"CHAT_CHANNEL_SEND\",\n\t\"CHAT_COMBAT_MISC_INFO_GET\",\n\t\"CHAT_CONFIGURATION\",\n\t\"CHAT_CONVERSATION_CONVERSATION_CONVERTED_TO_WHISPER_NOTICE\",\n\t\"CHAT_CONVERSATION_MEMBER_JOINED_NOTICE\",\n\t\"CHAT_CONVERSATION_MEMBER_LEFT_NOTICE\",\n\t\"CHAT_CONVERSATION_YOU_JOINED_CONVERSATION_NOTICE\",\n\t\"CHAT_CONVERSATION_YOU_LEFT_CONVERSATION_NOTICE\",\n\t\"CHAT_DEFAULT\",\n\t\"CHAT_DEFAULTS\",\n\t\"CHAT_DEMOTE\",\n\t\"CHAT_DND_GET\",\n\t\"CHAT_EMOTE_GET\",\n\t\"CHAT_EMOTE_SEND\",\n\t\"CHAT_EMOTE_UNKNOWN\",\n\t\"CHAT_FILTERED\",\n\t\"CHAT_FLAG_AFK\",\n\t\"CHAT_FLAG_DND\",\n\t\"CHAT_FLAG_GM\",\n\t\"CHAT_GUILD_DEMOTE_SEND\",\n\t\"CHAT_GUILD_GET\",\n\t\"CHAT_GUILD_INVITE_SEND\",\n\t\"CHAT_GUILD_LEADER_SEND\",\n\t\"CHAT_GUILD_MOTD_SEND\",\n\t\"CHAT_GUILD_PROMOTE_SEND\",\n\t\"CHAT_GUILD_SEND\",\n\t\"CHAT_GUILD_UNINVITE_SEND\",\n\t\"CHAT_HELP_TEXT_LINE1\",\n\t\"CHAT_HELP_TEXT_LINE2\",\n\t\"CHAT_HELP_TEXT_LINE3\",\n\t\"CHAT_HELP_TEXT_LINE4\",\n\t\"CHAT_HELP_TEXT_LINE5\",\n\t\"CHAT_HELP_TEXT_LINE6\",\n\t\"CHAT_HELP_TEXT_LINE7\",\n\t\"CHAT_HELP_TEXT_LINE8\",\n\t\"CHAT_HELP_TEXT_LINE9\",\n\t\"CHAT_HELP_TEXT_LINE10\",\n\t\"CHAT_HELP_TEXT_LINE11\",\n\t\"CHAT_HELP_TEXT_LINE12\",\n\t\"CHAT_HELP_TEXT_LINE13\",\n\t\"CHAT_HELP_TEXT_LINE14\",\n\t\"CHAT_HELP_TEXT_LINE15\",\n\t\"CHAT_HELP_TEXT_LINE16\",\n\t\"CHAT_IGNORED\",\n\t\"CHAT_INVALID_NAME_NOTICE\",\n\t\"CHAT_INVITE_NOTICE\",\n\t\"CHAT_INVITE_NOTICE_POPUP\",\n\t\"CHAT_INVITE_SEND\",\n\t\"CHAT_INVITE_WRONG_FACTION_NOTICE\",\n\t\"CHAT_JOIN\",\n\t\"CHAT_JOIN_HELP\",\n\t\"CHAT_KICK\",\n\t\"CHAT_LABEL\",\n\t\"CHAT_LEAVE\",\n\t\"CHAT_LOCKED_TEXT\",\n\t\"CHAT_MODERATE\",\n\t\"CHAT_MODERATION_OFF_NOTICE\",\n\t\"CHAT_MODERATION_OFF_NOTICE_BN\",\n\t\"CHAT_MODERATION_ON_NOTICE\",\n\t\"CHAT_MODERATION_ON_NOTICE_BN\",\n\t\"CHAT_MONSTER_EMOTE_GET\",\n\t\"CHAT_MONSTER_PARTY_GET\",\n\t\"CHAT_MONSTER_SAY_GET\",\n\t\"CHAT_MONSTER_WHISPER_GET\",\n\t\"CHAT_MONSTER_YELL_GET\",\n\t\"CHAT_MOUSE_WHEEL_SCROLL\",\n\t\"CHAT_MSG_ACHIEVEMENT\",\n\t\"CHAT_MSG_AFK\",\n\t\"CHAT_MSG_BATTLEGROUND\",\n\t\"CHAT_MSG_BATTLEGROUND_LEADER\",\n\t\"CHAT_MSG_BG_SYSTEM_ALLIANCE\",\n\t\"CHAT_MSG_BG_SYSTEM_HORDE\",\n\t\"CHAT_MSG_BG_SYSTEM_NEUTRAL\",\n\t\"CHAT_MSG_BN_CONVERSATION\",\n\t\"CHAT_MSG_BN_WHISPER\",\n\t\"CHAT_MSG_CHANNEL_LIST\",\n\t\"CHAT_MSG_COMBAT_HONOR_GAIN\",\n\t\"CHAT_MSG_EMOTE\",\n\t\"CHAT_MSG_FILTERED\",\n\t\"CHAT_MSG_GUILD\",\n\t\"CHAT_MSG_GUILD_ACHIEVEMENT\",\n\t\"CHAT_MSG_LOOT\",\n\t\"CHAT_MSG_MONEY\",\n\t\"CHAT_MSG_MONSTER_EMOTE\",\n\t\"CHAT_MSG_MONSTER_PARTY\",\n\t\"CHAT_MSG_MONSTER_SAY\",\n\t\"CHAT_MSG_MONSTER_WHISPER\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"CHAT_MSG_OFFICER\",\n\t\"CHAT_MSG_PARTY\",\n\t\"CHAT_MSG_PARTY_LEADER\",\n\t\"CHAT_MSG_RAID\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\"CHAT_MSG_RAID_LEADER\",\n\t\"CHAT_MSG_RAID_WARNING\",\n\t\"CHAT_MSG_RESTRICTED\",\n\t\"CHAT_MSG_SAY\",\n\t\"CHAT_MSG_SKILL\",\n\t\"CHAT_MSG_SYSTEM\",\n\t\"CHAT_MSG_TEXT_EMOTE\",\n\t\"CHAT_MSG_WHISPER\",\n\t\"CHAT_MSG_WHISPER_INFORM\",\n\t\"CHAT_MSG_YELL\",\n\t\"CHAT_MUTED_NOTICE\",\n\t\"CHAT_MUTED_NOTICE_BN\",\n\t\"CHAT_NAME_TEMPLATE\",\n\t\"CHAT_NOT_IN_AREA_NOTICE\",\n\t\"CHAT_NOT_MEMBER_NOTICE\",\n\t\"CHAT_NOT_MODERATED_NOTICE\",\n\t\"CHAT_NOT_MODERATOR_NOTICE\",\n\t\"CHAT_NOT_MODERATOR_NOTICE_BN\",\n\t\"CHAT_NOT_OWNER_NOTICE\",\n\t\"CHAT_NOT_OWNER_NOTICE_BN\",\n\t\"CHAT_OFFICER_GET\",\n\t\"CHAT_OFFICER_SEND\",\n\t\"CHAT_OPTIONS_LABEL\",\n\t\"CHAT_OVERFLOW_LABEL\",\n\t\"CHAT_OWNER\",\n\t\"CHAT_OWNER_CHANGED_NOTICE\",\n\t\"CHAT_OWNER_CHANGED_NOTICE_BN\",\n\t\"CHAT_PARTY_GET\",\n\t\"CHAT_PARTY_GUIDE_GET\",\n\t\"CHAT_PARTY_LEADER_GET\",\n\t\"CHAT_PARTY_SEND\",\n\t\"CHAT_PASSWORD\",\n\t\"CHAT_PASSWORD_CHANGED_NOTICE\",\n\t\"CHAT_PASSWORD_CHANGED_NOTICE_BN\",\n\t\"CHAT_PASSWORD_NOTICE_POPUP\",\n\t\"CHAT_PLAYER_ALREADY_MEMBER_NOTICE\",\n\t\"CHAT_PLAYER_ALREADY_MEMBER_NOTICE_BN\",\n\t\"CHAT_PLAYER_BANNED_NOTICE\",\n\t\"CHAT_PLAYER_BANNED_NOTICE_BN\",\n\t\"CHAT_PLAYER_INVITED_NOTICE\",\n\t\"CHAT_PLAYER_INVITED_NOTICE_BN\",\n\t\"CHAT_PLAYER_INVITE_BANNED_NOTICE\",\n\t\"CHAT_PLAYER_INVITE_BANNED_NOTICE_BN\",\n\t\"CHAT_PLAYER_KICKED_NOTICE\",\n\t\"CHAT_PLAYER_KICKED_NOTICE_BN\",\n\t\"CHAT_PLAYER_NOT_BANNED_NOTICE\",\n\t\"CHAT_PLAYER_NOT_BANNED_NOTICE_BN\",\n\t\"CHAT_PLAYER_NOT_FOUND_NOTICE\",\n\t\"CHAT_PLAYER_NOT_FOUND_NOTICE_BN\",\n\t\"CHAT_PLAYER_UNBANNED_NOTICE\",\n\t\"CHAT_PLAYER_UNBANNED_NOTICE_BN\",\n\t\"CHAT_PROMOTE\",\n\t\"CHAT_PROMOTE_SEND\",\n\t\"CHAT_RAID_BOSS_EMOTE_GET\",\n\t\"CHAT_RAID_BOSS_WHISPER_GET\",\n\t\"CHAT_RAID_GET\",\n\t\"CHAT_RAID_LEADER_GET\",\n\t\"CHAT_RAID_SEND\",\n\t\"CHAT_RAID_WARNING_GET\",\n\t\"CHAT_RAID_WARNING_SEND\",\n\t\"CHAT_RESTRICTED\",\n\t\"CHAT_SAY_GET\",\n\t\"CHAT_SAY_SEND\",\n\t\"CHAT_SAY_UNKNOWN\",\n\t\"CHAT_SET_MODERATOR_NOTICE\",\n\t\"CHAT_SET_MODERATOR_NOTICE_BN\",\n\t\"CHAT_SET_SPEAK_NOTICE\",\n\t\"CHAT_SET_SPEAK_NOTICE_BN\",\n\t\"CHAT_SET_VOICE_NOTICE\",\n\t\"CHAT_SET_VOICE_NOTICE_BN\",\n\t\"CHAT_SILENCE\",\n\t\"CHAT_STYLE\",\n\t\"CHAT_SUSPENDED_NOTICE\",\n\t\"CHAT_SUSPENDED_NOTICE_BN\",\n\t\"CHAT_THROTTLED_NOTICE\",\n\t\"CHAT_THROTTLED_NOTICE_BN\",\n\t\"CHAT_UNINVITE_SEND\",\n\t\"CHAT_UNSET_MODERATOR_NOTICE\",\n\t\"CHAT_UNSET_MODERATOR_NOTICE_BN\",\n\t\"CHAT_UNSET_SPEAK_NOTICE\",\n\t\"CHAT_UNSET_SPEAK_NOTICE_BN\",\n\t\"CHAT_UNSET_VOICE_NOTICE\",\n\t\"CHAT_UNSET_VOICE_NOTICE_BN\",\n\t\"CHAT_UNSILENCE\",\n\t\"CHAT_VOICE\",\n\t\"CHAT_VOICE_OFF\",\n\t\"CHAT_VOICE_OFF_NOTICE\",\n\t\"CHAT_VOICE_OFF_NOTICE_BN\",\n\t\"CHAT_VOICE_ON\",\n\t\"CHAT_VOICE_ON_NOTICE\",\n\t\"CHAT_VOICE_ON_NOTICE_BN\",\n\t\"CHAT_WHISPER_GET\",\n\t\"CHAT_WHISPER_INFORM_GET\",\n\t\"CHAT_WHISPER_SEND\",\n\t\"CHAT_WHOLE_WINDOW_CLICKABLE\",\n\t\"CHAT_WINDOWS_COUNT\",\n\t\"CHAT_WRONG_FACTION_NOTICE\",\n\t\"CHAT_WRONG_PASSWORD_NOTICE\",\n\t\"CHAT_YELL_GET\",\n\t\"CHAT_YELL_SEND\",\n\t\"CHAT_YELL_UNKNOWN\",\n\t\"CHAT_YELL_UNKNOWN_FEMALE\",\n\t\"CHAT_YOU_CHANGED_NOTICE\",\n\t\"CHAT_YOU_CHANGED_NOTICE_BN\",\n\t\"CHAT_YOU_JOINED_NOTICE\",\n\t\"CHAT_YOU_JOINED_NOTICE_BN\",\n\t\"CHAT_YOU_LEFT_NOTICE\",\n\t\"CHAT_YOU_LEFT_NOTICE_BN\",\n\t\"CHESTSLOT\",\n\t\"CHOOSE_BOX\",\n\t\"CHOOSE_RAID\",\n\t\"CHOOSE_STATIONERY\",\n\t\"CHOOSE_YOUR_DUNGEON\",\n\t\"CHOSEN_FOR_GMSURVEY\",\n\t\"CINEMATIC_SUBTITLES\",\n\t\"CLASS\",\n\t\"CLASSIC_STYLE\",\n\t\"CLASS_COLORS\",\n\t\"CLASS_SKILLS\",\n\t\"CLEARED_AFK\",\n\t\"CLEARED_DND\",\n\t\"CLEAR_AFK\",\n\t\"CLEAR_ALL\",\n\t\"CLEAR_FOCUS\",\n\t\"CLICK_CAMERA_STYLE\",\n\t\"CLICK_FOR_ADDITIONAL_QUEST_LOCATIONS\",\n\t\"CLICK_FOR_DETAILS\",\n\t\"CLICK_HERE_FOR_MORE_INFO\",\n\t\"CLICK_TO_ENTER_COMMENT\",\n\t\"CLICK_TO_INVITE_TO_CONVERSATION\",\n\t\"CLICK_TO_LEARN\",\n\t\"CLICK_TO_MOVE\",\n\t\"CLICK_TO_REMOVE_ADDITIONAL_QUEST_LOCATIONS\",\n\t\"CLICK_TO_START_CONVERSATION\",\n\t\"CLIENT_LOGOUT_ALERT\",\n\t\"CLIENT_RESTART_ALERT\",\n\t\"CLOSE\",\n\t\"CLOSES_IN\",\n\t\"CLOSE_AND_LEAVE_CHAT_CONVERSATION_WINDOW\",\n\t\"CLOSE_CHAT\",\n\t\"CLOSE_CHAT_CONVERSATION_WINDOW\",\n\t\"CLOSE_CHAT_WHISPER_WINDOW\",\n\t\"CLOSE_CHAT_WINDOW\",\n\t\"CLOSE_LOG\",\n\t\"COD\",\n\t\"COD_AMOUNT\",\n\t\"COD_CONFIRMATION\",\n\t\"COD_INSUFFICIENT_MONEY\",\n\t\"COD_PAYMENT\",\n\t\"COINPICKUP_CANCEL\",\n\t\"COLOR\",\n\t\"COLORBLIND_NAMEWRAPPER_ENEMY\",\n\t\"COLORBLIND_NAMEWRAPPER_FRIENDLY\",\n\t\"COLORBLIND_NAMEWRAPPER_NEUTRAL\",\n\t\"COLORIZE\",\n\t\"COLORS\",\n\t\"COLOR_BY_SCHOOL\",\n\t\"COLOR_PICKER\",\n\t\"COMBAT\",\n\t\"COMBATLOGDISABLED\",\n\t\"COMBATLOGENABLED\",\n\t\"COMBATLOG_ARENAPOINTSAWARD\",\n\t\"COMBATLOG_DEFAULTS\",\n\t\"COMBATLOG_DISHONORGAIN\",\n\t\"COMBATLOG_FILTER_STRING_CUSTOM_UNIT\",\n\t\"COMBATLOG_FILTER_STRING_FRIENDLY_UNITS\",\n\t\"COMBATLOG_FILTER_STRING_HOSTILE_PLAYERS\",\n\t\"COMBATLOG_FILTER_STRING_HOSTILE_UNITS\",\n\t\"COMBATLOG_FILTER_STRING_ME\",\n\t\"COMBATLOG_FILTER_STRING_MY_PET\",\n\t\"COMBATLOG_FILTER_STRING_NEUTRAL_UNITS\",\n\t\"COMBATLOG_FILTER_STRING_UNKNOWN_UNITS\",\n\t\"COMBATLOG_HIGHLIGHT_ABILITY\",\n\t\"COMBATLOG_HIGHLIGHT_DAMAGE\",\n\t\"COMBATLOG_HIGHLIGHT_KILL\",\n\t\"COMBATLOG_HIGHLIGHT_SCHOOL\",\n\t\"COMBATLOG_HONORAWARD\",\n\t\"COMBATLOG_HONORGAIN\",\n\t\"COMBATLOG_HONORGAIN_NO_RANK\",\n\t\"COMBATLOG_UNKNOWN_UNIT\",\n\t\"COMBATLOG_XPGAIN_EXHAUSTION1\",\n\t\"COMBATLOG_XPGAIN_EXHAUSTION1_GROUP\",\n\t\"COMBATLOG_XPGAIN_EXHAUSTION1_RAID\",\n\t\"COMBATLOG_XPGAIN_EXHAUSTION2\",\n\t\"COMBATLOG_XPGAIN_EXHAUSTION2_GROUP\",\n\t\"COMBATLOG_XPGAIN_EXHAUSTION2_RAID\",\n\t\"COMBATLOG_XPGAIN_EXHAUSTION4\",\n\t\"COMBATLOG_XPGAIN_EXHAUSTION4_GROUP\",\n\t\"COMBATLOG_XPGAIN_EXHAUSTION4_RAID\",\n\t\"COMBATLOG_XPGAIN_EXHAUSTION5\",\n\t\"COMBATLOG_XPGAIN_EXHAUSTION5_GROUP\",\n\t\"COMBATLOG_XPGAIN_EXHAUSTION5_RAID\",\n\t\"COMBATLOG_XPGAIN_FIRSTPERSON\",\n\t\"COMBATLOG_XPGAIN_FIRSTPERSON_GROUP\",\n\t\"COMBATLOG_XPGAIN_FIRSTPERSON_RAID\",\n\t\"COMBATLOG_XPGAIN_FIRSTPERSON_UNNAMED\",\n\t\"COMBATLOG_XPGAIN_FIRSTPERSON_UNNAMED_GROUP\",\n\t\"COMBATLOG_XPGAIN_FIRSTPERSON_UNNAMED_RAID\",\n\t\"COMBATLOG_XPGAIN_QUEST\",\n\t\"COMBATLOG_XPLOSS_FIRSTPERSON_UNNAMED\",\n\t\"COMBATTEXT_LABEL\",\n\t\"COMBATTEXT_SUBTEXT\",\n\t\"COMBAT_ENEMY\",\n\t\"COMBAT_ERROR\",\n\t\"COMBAT_FACTION_CHANGE\",\n\t\"COMBAT_HONOR_GAIN\",\n\t\"COMBAT_LABEL\",\n\t\"COMBAT_LOG\",\n\t\"COMBAT_LOG_MENU_BOTH\",\n\t\"COMBAT_LOG_MENU_EVERYTHING\",\n\t\"COMBAT_LOG_MENU_INCOMING\",\n\t\"COMBAT_LOG_MENU_OUTGOING\",\n\t\"COMBAT_LOG_MENU_OUTGOING_ME\",\n\t\"COMBAT_LOG_MENU_REVERT\",\n\t\"COMBAT_LOG_MENU_SAVE\",\n\t\"COMBAT_LOG_MENU_SPELL_HIDE\",\n\t\"COMBAT_LOG_MENU_SPELL_LINK\",\n\t\"COMBAT_LOG_MENU_SPELL_TYPE_HEADER\",\n\t\"COMBAT_LOG_UNIT_YOU_ENABLED\",\n\t\"COMBAT_MESSAGES\",\n\t\"COMBAT_MISC\",\n\t\"COMBAT_MISC_INFO\",\n\t\"COMBAT_PARTY\",\n\t\"COMBAT_RATING_NAME1\",\n\t\"COMBAT_RATING_NAME10\",\n\t\"COMBAT_RATING_NAME11\",\n\t\"COMBAT_RATING_NAME15\",\n\t\"COMBAT_RATING_NAME2\",\n\t\"COMBAT_RATING_NAME24\",\n\t\"COMBAT_RATING_NAME3\",\n\t\"COMBAT_RATING_NAME4\",\n\t\"COMBAT_RATING_NAME5\",\n\t\"COMBAT_RATING_NAME6\",\n\t\"COMBAT_RATING_NAME7\",\n\t\"COMBAT_RATING_NAME8\",\n\t\"COMBAT_RATING_NAME9\",\n\t\"COMBAT_SELF\",\n\t\"COMBAT_SUBTEXT\",\n\t\"COMBAT_TEXT_ABSORB\",\n\t\"COMBAT_TEXT_ARENA_POINTS_GAINED\",\n\t\"COMBAT_TEXT_BLOCK\",\n\t\"COMBAT_TEXT_COMBO_POINTS\",\n\t\"COMBAT_TEXT_DEFLECT\",\n\t\"COMBAT_TEXT_DODGE\",\n\t\"COMBAT_TEXT_EVADE\",\n\t\"COMBAT_TEXT_FLOAT_MODE_LABEL\",\n\t\"COMBAT_TEXT_HONOR_GAINED\",\n\t\"COMBAT_TEXT_IMMUNE\",\n\t\"COMBAT_TEXT_LABEL\",\n\t\"COMBAT_TEXT_MISS\",\n\t\"COMBAT_TEXT_NONE\",\n\t\"COMBAT_TEXT_PARRY\",\n\t\"COMBAT_TEXT_REFLECT\",\n\t\"COMBAT_TEXT_RESIST\",\n\t\"COMBAT_TEXT_RUNE_BLOOD\",\n\t\"COMBAT_TEXT_RUNE_DEATH\",\n\t\"COMBAT_TEXT_RUNE_FROST\",\n\t\"COMBAT_TEXT_RUNE_UNHOLY\",\n\t\"COMBAT_TEXT_SCROLL_ARC\",\n\t\"COMBAT_TEXT_SCROLL_DOWN\",\n\t\"COMBAT_TEXT_SCROLL_DOWN_TEXT\",\n\t\"COMBAT_TEXT_SCROLL_UP\",\n\t\"COMBAT_TEXT_SHOW_AURAS_TEXT\",\n\t\"COMBAT_TEXT_SHOW_AURA_FADE_TEXT\",\n\t\"COMBAT_TEXT_SHOW_COMBAT_STATE_TEXT\",\n\t\"COMBAT_TEXT_SHOW_COMBO_POINTS_TEXT\",\n\t\"COMBAT_TEXT_SHOW_DODGE_PARRY_MISS_TEXT\",\n\t\"COMBAT_TEXT_SHOW_ENERGIZE_TEXT\",\n\t\"COMBAT_TEXT_SHOW_FRIENDLY_NAMES_TEXT\",\n\t\"COMBAT_TEXT_SHOW_HONOR_GAINED_TEXT\",\n\t\"COMBAT_TEXT_SHOW_LOW_HEALTH_MANA_TEXT\",\n\t\"COMBAT_TEXT_SHOW_PERIODIC_ENERGIZE_TEXT\",\n\t\"COMBAT_TEXT_SHOW_REACTIVES_TEXT\",\n\t\"COMBAT_TEXT_SHOW_REPUTATION_TEXT\",\n\t\"COMBAT_TEXT_SHOW_RESISTANCES_TEXT\",\n\t\"COMBAT_THREAT_DECREASE_0\",\n\t\"COMBAT_THREAT_DECREASE_1\",\n\t\"COMBAT_THREAT_DECREASE_2\",\n\t\"COMBAT_THREAT_INCREASE_1\",\n\t\"COMBAT_THREAT_INCREASE_3\",\n\t\"COMBAT_XP_GAIN\",\n\t\"COMBAT_ZONE\",\n\t\"COMMAND\",\n\t\"COMMENT\",\n\t\"COMMENTS_COLON\",\n\t\"COMPANIONS\",\n\t\"COMPARE_ACHIEVEMENTS\",\n\t\"COMPLAINT_ADDED\",\n\t\"COMPLETE\",\n\t\"COMPLETE_QUEST\",\n\t\"CONFIRM_ACCEPT_PVP_QUEST\",\n\t\"CONFIRM_ACCEPT_SOCKETS\",\n\t\"CONFIRM_BATTLEFIELD_ENTRY\",\n\t\"CONFIRM_BINDER\",\n\t\"CONFIRM_BUY_BANK_SLOT\",\n\t\"CONFIRM_BUY_GUILDBANK_TAB\",\n\t\"CONFIRM_BUY_STABLE_SLOT\",\n\t\"CONFIRM_COMBAT_FILTER_DEFAULTS\",\n\t\"CONFIRM_COMBAT_FILTER_DELETE\",\n\t\"CONFIRM_COMPLETE_EXPENSIVE_QUEST\",\n\t\"CONFIRM_DELETE_EQUIPMENT_SET\",\n\t\"CONFIRM_DELETING_CHARACTER_SPECIFIC_BINDINGS\",\n\t\"CONFIRM_GLYPH_PLACEMENT\",\n\t\"CONFIRM_GUILD_DISBAND\",\n\t\"CONFIRM_GUILD_LEAVE\",\n\t\"CONFIRM_GUILD_PROMOTE\",\n\t\"CONFIRM_HIGH_COST_ITEM\",\n\t\"CONFIRM_LEARN_PREVIEW_TALENTS\",\n\t\"CONFIRM_LEAVE_QUEUE\",\n\t\"CONFIRM_LOOT_DISTRIBUTION\",\n\t\"CONFIRM_LOSE_BINDING_CHANGES\",\n\t\"CONFIRM_OVERWRITE_EQUIPMENT_SET\",\n\t\"CONFIRM_PET_UNLEARN\",\n\t\"CONFIRM_PURCHASE_TOKEN_ITEM\",\n\t\"CONFIRM_REFUND_MAX_ARENA_POINTS\",\n\t\"CONFIRM_REFUND_MAX_HONOR\",\n\t\"CONFIRM_REFUND_MAX_HONOR_AND_ARENA\",\n\t\"CONFIRM_REFUND_TOKEN_ITEM\",\n\t\"CONFIRM_REMOVE_GLYPH\",\n\t\"CONFIRM_RESET_INSTANCES\",\n\t\"CONFIRM_RESET_INTERFACE_SETTINGS\",\n\t\"CONFIRM_RESET_SETTINGS\",\n\t\"CONFIRM_SUMMON\",\n\t\"CONFIRM_TALENT_WIPE\",\n\t\"CONFIRM_TEAM_DISBAND\",\n\t\"CONFIRM_TEAM_KICK\",\n\t\"CONFIRM_TEAM_LEAVE\",\n\t\"CONFIRM_TEAM_PROMOTE\",\n\t\"CONFIRM_XP_LOSS\",\n\t\"CONFIRM_XP_LOSS_AGAIN\",\n\t\"CONFIRM_XP_LOSS_AGAIN_NO_DURABILITY\",\n\t\"CONFIRM_XP_LOSS_AGAIN_NO_SICKNESS\",\n\t\"CONFIRM_XP_LOSS_NO_DURABILITY\",\n\t\"CONFIRM_XP_LOSS_NO_SICKNESS\",\n\t\"CONFIRM_XP_LOSS_NO_SICKNESS_NO_DURABILITY\",\n\t\"CONFIRM_YOUR_ROLE\",\n\t\"CONSOLIDATE_BUFFS_TEXT\",\n\t\"CONTAINER_SLOTS\",\n\t\"CONTESTED_TERRITORY\",\n\t\"CONTINENT\",\n\t\"CONTINUE\",\n\t\"CONTINUED\",\n\t\"CONTROLS_LABEL\",\n\t\"CONTROLS_SUBTEXT\",\n\t\"CONVERSATION_MODE\",\n\t\"CONVERSATION_MODE_INLINE\",\n\t\"CONVERSATION_MODE_POPOUT\",\n\t\"CONVERSATION_NAME\",\n\t\"CONVERT_TO_RAID\",\n\t\"COOLDOWN_ON_LEAVE_COMBAT\",\n\t\"COOLDOWN_REMAINING\",\n\t\"COPPER_AMOUNT\",\n\t\"COPPER_AMOUNT_SYMBOL\",\n\t\"COPPER_AMOUNT_TEXTURE\",\n\t\"COPY_FILTER\",\n\t\"COPY_NAME\",\n\t\"CORPSE\",\n\t\"CORPSE_RED\",\n\t\"CORPSE_TOOLTIP\",\n\t\"COSTS_LABEL\",\n\t\"CRAFT_IS_MAKEABLE\",\n\t\"CRAFT_IS_MAKEABLE_TOOLTIP\",\n\t\"CREATE\",\n\t\"CREATED_ITEM\",\n\t\"CREATED_ITEM_MULTIPLE\",\n\t\"CREATE_ALL\",\n\t\"CREATE_AUCTION\",\n\t\"CREATE_CONVERSATION_WITH\",\n\t\"CREATE_MACROS\",\n\t\"CREATURE\",\n\t\"CREATURE_MESSAGES\",\n\t\"CRIT_ABBR\",\n\t\"CRUSHING_TRAILER\",\n\t\"CR_BLOCK_TOOLTIP\",\n\t\"CR_CRIT_MELEE_TOOLTIP\",\n\t\"CR_CRIT_RANGED_TOOLTIP\",\n\t\"CR_DODGE_TOOLTIP\",\n\t\"CR_EXPERTISE_TOOLTIP\",\n\t\"CR_HASTE_RATING_TOOLTIP\",\n\t\"CR_HIT_MELEE_TOOLTIP\",\n\t\"CR_HIT_RANGED_TOOLTIP\",\n\t\"CR_HIT_SPELL_TOOLTIP\",\n\t\"CR_PARRY_TOOLTIP\",\n\t\"CTRL_KEY\",\n\t\"CTRL_KEY_TEXT\",\n\t\"CURRENCY\",\n\t\"CURRENCY_AMOUNT_REFUND_FORMAT\",\n\t\"CURRENTLY_EQUIPPED\",\n\t\"CURRENT_BID\",\n\t\"CURRENT_PET\",\n\t\"CURRENT_QUESTS\",\n\t\"CURRENT_SETTINGS\",\n\t\"CUSTOM\",\n\t\"DAILY\",\n\t\"DAILY_QUESTS_REMAINING\",\n\t\"DAILY_QUEST_TAG_TEMPLATE\",\n\t\"DAMAGE\",\n\t\"DAMAGER\",\n\t\"DAMAGE_BONUS_TOOLTIP\",\n\t\"DAMAGE_DONE_TOOLTIP\",\n\t\"DAMAGE_NUMBER\",\n\t\"DAMAGE_PER_SECOND\",\n\t\"DAMAGE_SCHOOL2\",\n\t\"DAMAGE_SCHOOL3\",\n\t\"DAMAGE_SCHOOL4\",\n\t\"DAMAGE_SCHOOL5\",\n\t\"DAMAGE_SCHOOL6\",\n\t\"DAMAGE_SCHOOL7\",\n\t\"DAMAGE_SCHOOL_TEXT\",\n\t\"DAMAGE_SHIELD\",\n\t\"DAMAGE_SHIELD_COMBATLOG_TOOLTIP\",\n\t\"DAMAGE_TEMPLATE\",\n\t\"DAMAGE_TEMPLATE_WITH_SCHOOL\",\n\t\"DAMAGE_TOOLTIP\",\n\t\"DATE_COMPLETED\",\n\t\"DAYS\",\n\t\"DAYS_ABBR\",\n\t\"DAY_ONELETTER_ABBR\",\n\t\"DEAD\",\n\t\"DEATHBINDALREADYBOUND\",\n\t\"DEATHBIND_SUCCESSFUL\",\n\t\"DEATHS\",\n\t\"DEATHS_COMBATLOG_TOOLTIP\",\n\t\"DEATHS_TOOLTIP\",\n\t\"DEATH_CORPSE_SKINNED\",\n\t\"DEATH_EFFECT\",\n\t\"DEATH_RELEASE\",\n\t\"DEATH_RELEASE_NOTIMER\",\n\t\"DEATH_RELEASE_SPECTATOR\",\n\t\"DEATH_RELEASE_TIMER\",\n\t\"DEBUFF_SYMBOL_CURSE\",\n\t\"DEBUFF_SYMBOL_DISEASE\",\n\t\"DEBUFF_SYMBOL_MAGIC\",\n\t\"DEBUFF_SYMBOL_POISON\",\n\t\"DEBUG_FRAMESTACK\",\n\t\"DECLENSION_SET\",\n\t\"DECLINE\",\n\t\"DEDE\",\n\t\"DEFAULT\",\n\t\"DEFAULTS\",\n\t\"DEFAULT_AFK_MESSAGE\",\n\t\"DEFAULT_AGILITY_TOOLTIP\",\n\t\"DEFAULT_COMBATLOG_FILTER_NAME\",\n\t\"DEFAULT_DND_MESSAGE\",\n\t\"DEFAULT_INTELLECT_TOOLTIP\",\n\t\"DEFAULT_SPIRIT_TOOLTIP\",\n\t\"DEFAULT_STAMINA_TOOLTIP\",\n\t\"DEFAULT_STAT1_TOOLTIP\",\n\t\"DEFAULT_STAT2_TOOLTIP\",\n\t\"DEFAULT_STAT3_TOOLTIP\",\n\t\"DEFAULT_STAT4_TOOLTIP\",\n\t\"DEFAULT_STAT5_TOOLTIP\",\n\t\"DEFAULT_STATARMOR_TOOLTIP\",\n\t\"DEFAULT_STATDEFENSE_TOOLTIP\",\n\t\"DEFAULT_STATSPELLBONUS_TOOLTIP\",\n\t\"DEFENSE\",\n\t\"DEFENSE_ABBR\",\n\t\"DEFENSE_TOOLTIP\",\n\t\"DEFLECT\",\n\t\"DELETE\",\n\t\"DELETE_GOOD_ITEM\",\n\t\"DELETE_ITEM\",\n\t\"DELETE_ITEM_CONFIRM_STRING\",\n\t\"DELETE_MAIL_CONFIRMATION\",\n\t\"DELETE_MONEY_CONFIRMATION\",\n\t\"DEMOTE\",\n\t\"DEPOSIT\",\n\t\"DEPOSIT_COLON\",\n\t\"DEPTH_CONVERGENCE\",\n\t\"DESERTER\",\n\t\"DESKTOP_GAMMA\",\n\t\"DESTROY_GEM\",\n\t\"DISABLE\",\n\t\"DISABLE_ADDONS\",\n\t\"DISABLE_SPAM_FILTER\",\n\t\"DISGUISE\",\n\t\"DISHONORABLE_KILLS\",\n\t\"DISPELS\",\n\t\"DISPEL_AURA_COMBATLOG_TOOLTIP\",\n\t\"DISPLAY\",\n\t\"DISPLAY_ACTIVE_CHANNEL\",\n\t\"DISPLAY_CHANNEL_PULLOUT\",\n\t\"DISPLAY_FREE_BAG_SLOTS\",\n\t\"DISPLAY_LABEL\",\n\t\"DISPLAY_ON_CHARACTER\",\n\t\"DISPLAY_ON_CHAR_TOOLTIP\",\n\t\"DISPLAY_OPTIONS\",\n\t\"DISPLAY_SUBTEXT\",\n\t\"DK\",\n\t\"DMG\",\n\t\"DND\",\n\t\"DODGE\",\n\t\"DODGE_CHANCE\",\n\t\"DONE\",\n\t\"DONE_BY\",\n\t\"DONE_TO\",\n\t\"DPS_TEMPLATE\",\n\t\"DRAINS\",\n\t\"DRESSUP_FRAME\",\n\t\"DRESSUP_FRAME_INSTRUCTIONS\",\n\t\"DRUID_INTELLECT_TOOLTIP\",\n\t\"DRUNK_MESSAGE_ITEM_OTHER1\",\n\t\"DRUNK_MESSAGE_ITEM_OTHER2\",\n\t\"DRUNK_MESSAGE_ITEM_OTHER3\",\n\t\"DRUNK_MESSAGE_ITEM_OTHER4\",\n\t\"DRUNK_MESSAGE_ITEM_SELF1\",\n\t\"DRUNK_MESSAGE_ITEM_SELF2\",\n\t\"DRUNK_MESSAGE_ITEM_SELF3\",\n\t\"DRUNK_MESSAGE_ITEM_SELF4\",\n\t\"DRUNK_MESSAGE_OTHER1\",\n\t\"DRUNK_MESSAGE_OTHER2\",\n\t\"DRUNK_MESSAGE_OTHER3\",\n\t\"DRUNK_MESSAGE_OTHER4\",\n\t\"DRUNK_MESSAGE_SELF1\",\n\t\"DRUNK_MESSAGE_SELF2\",\n\t\"DRUNK_MESSAGE_SELF3\",\n\t\"DRUNK_MESSAGE_SELF4\",\n\t\"DUEL\",\n\t\"DUEL_COUNTDOWN\",\n\t\"DUEL_OUTOFBOUNDS_TIMER\",\n\t\"DUEL_REQUESTED\",\n\t\"DUEL_WINNER_KNOCKOUT\",\n\t\"DUEL_WINNER_RETREAT\",\n\t\"DUNGEONS_BUTTON\",\n\t\"DUNGEON_COMPLETED\",\n\t\"DUNGEON_DIFFICULTY\",\n\t\"DUNGEON_DIFFICULTY1\",\n\t\"DUNGEON_DIFFICULTY2\",\n\t\"DUNGEON_DIFFICULTY3\",\n\t\"DUNGEON_DIFFICULTY_5PLAYER\",\n\t\"DUNGEON_DIFFICULTY_5PLAYER_HEROIC\",\n\t\"DUNGEON_FLOOR_AHNKAHET1\",\n\t\"DUNGEON_FLOOR_AZJOLNERUB1\",\n\t\"DUNGEON_FLOOR_AZJOLNERUB2\",\n\t\"DUNGEON_FLOOR_AZJOLNERUB3\",\n\t\"DUNGEON_FLOOR_COTSTRATHOLME0\",\n\t\"DUNGEON_FLOOR_COTSTRATHOLME1\",\n\t\"DUNGEON_FLOOR_DALARAN1\",\n\t\"DUNGEON_FLOOR_DALARAN2\",\n\t\"DUNGEON_FLOOR_DRAKTHARONKEEP1\",\n\t\"DUNGEON_FLOOR_DRAKTHARONKEEP2\",\n\t\"DUNGEON_FLOOR_GUNDRAK1\",\n\t\"DUNGEON_FLOOR_HALLSOFLIGHTNING1\",\n\t\"DUNGEON_FLOOR_HALLSOFLIGHTNING2\",\n\t\"DUNGEON_FLOOR_HALLSOFREFLECTION1\",\n\t\"DUNGEON_FLOOR_ICECROWNCITADEL1\",\n\t\"DUNGEON_FLOOR_ICECROWNCITADEL2\",\n\t\"DUNGEON_FLOOR_ICECROWNCITADEL3\",\n\t\"DUNGEON_FLOOR_ICECROWNCITADEL4\",\n\t\"DUNGEON_FLOOR_ICECROWNCITADEL5\",\n\t\"DUNGEON_FLOOR_ICECROWNCITADEL6\",\n\t\"DUNGEON_FLOOR_ICECROWNCITADEL7\",\n\t\"DUNGEON_FLOOR_ICECROWNCITADEL8\",\n\t\"DUNGEON_FLOOR_NAXXRAMAS1\",\n\t\"DUNGEON_FLOOR_NAXXRAMAS2\",\n\t\"DUNGEON_FLOOR_NAXXRAMAS3\",\n\t\"DUNGEON_FLOOR_NAXXRAMAS4\",\n\t\"DUNGEON_FLOOR_NAXXRAMAS5\",\n\t\"DUNGEON_FLOOR_NAXXRAMAS6\",\n\t\"DUNGEON_FLOOR_NEXUS801\",\n\t\"DUNGEON_FLOOR_NEXUS802\",\n\t\"DUNGEON_FLOOR_NEXUS803\",\n\t\"DUNGEON_FLOOR_NEXUS804\",\n\t\"DUNGEON_FLOOR_PITOFSARON1\",\n\t\"DUNGEON_FLOOR_THEARGENTCOLISEUM1\",\n\t\"DUNGEON_FLOOR_THEARGENTCOLISEUM2\",\n\t\"DUNGEON_FLOOR_THEEYEOFETERNITY1\",\n\t\"DUNGEON_FLOOR_THEFORGEOFSOULS1\",\n\t\"DUNGEON_FLOOR_THENEXUS1\",\n\t\"DUNGEON_FLOOR_THEOBSIDIANSANCTUM1\",\n\t\"DUNGEON_FLOOR_ULDUAR0\",\n\t\"DUNGEON_FLOOR_ULDUAR1\",\n\t\"DUNGEON_FLOOR_ULDUAR2\",\n\t\"DUNGEON_FLOOR_ULDUAR3\",\n\t\"DUNGEON_FLOOR_ULDUAR4\",\n\t\"DUNGEON_FLOOR_ULDUAR5\",\n\t\"DUNGEON_FLOOR_ULDUAR771\",\n\t\"DUNGEON_FLOOR_UTGARDEKEEP1\",\n\t\"DUNGEON_FLOOR_UTGARDEKEEP2\",\n\t\"DUNGEON_FLOOR_UTGARDEKEEP3\",\n\t\"DUNGEON_FLOOR_UTGARDEPINNACLE1\",\n\t\"DUNGEON_FLOOR_UTGARDEPINNACLE2\",\n\t\"DUNGEON_FLOOR_VAULTOFARCHAVON1\",\n\t\"DUNGEON_FLOOR_VIOLETHOLD1\",\n\t\"DUNGEON_GROUP_FOUND_TOOLTIP\",\n\t\"DUNGEON_NAME_WITH_DIFFICULTY\",\n\t\"DURABILITY\",\n\t\"DURABILITYDAMAGE_DEATH\",\n\t\"DURABILITY_ABBR\",\n\t\"DURABILITY_TEMPLATE\",\n\t\"DYNAMIC\",\n\t\"D_DAYS\",\n\t\"D_HOURS\",\n\t\"D_MINUTES\",\n\t\"D_SECONDS\",\n\t\"EDIT_TICKET\",\n\t\"EFFECTS_LABEL\",\n\t\"EFFECTS_SUBTEXT\",\n\t\"EJECT_PASSENGER\",\n\t\"ELITE\",\n\t\"EMBLEM_BACKGROUND\",\n\t\"EMBLEM_BORDER\",\n\t\"EMBLEM_BORDER_COLOR\",\n\t\"EMBLEM_SYMBOL\",\n\t\"EMBLEM_SYMBOL_COLOR\",\n\t\"EMOTE\",\n\t\"EMOTE100_CMD1\",\n\t\"EMOTE100_CMD2\",\n\t\"EMOTE101_CMD\",\n\t\"EMOTE101_CMD1\",\n\t\"EMOTE101_CMD2\",\n\t\"EMOTE101_CMD3\",\n\t\"EMOTE102_CMD1\",\n\t\"EMOTE102_CMD2\",\n\t\"EMOTE103_CMD1\",\n\t\"EMOTE103_CMD2\",\n\t\"EMOTE104_CMD1\",\n\t\"EMOTE104_CMD2\",\n\t\"EMOTE105_CMD1\",\n\t\"EMOTE105_CMD2\",\n\t\"EMOTE106_CMD1\",\n\t\"EMOTE106_CMD2\",\n\t\"EMOTE107_CMD1\",\n\t\"EMOTE107_CMD2\",\n\t\"EMOTE107_CMD3\",\n\t\"EMOTE108_CMD1\",\n\t\"EMOTE108_CMD2\",\n\t\"EMOTE109_CMD1\",\n\t\"EMOTE109_CMD2\",\n\t\"EMOTE109_CMD3\",\n\t\"EMOTE10_CMD1\",\n\t\"EMOTE10_CMD2\",\n\t\"EMOTE10_CMD3\",\n\t\"EMOTE10_CMD4\",\n\t\"EMOTE110_CMD1\",\n\t\"EMOTE110_CMD2\",\n\t\"EMOTE111_CMD1\",\n\t\"EMOTE111_CMD2\",\n\t\"EMOTE112_CMD1\",\n\t\"EMOTE112_CMD2\",\n\t\"EMOTE112_CMD3\",\n\t\"EMOTE112_CMD4\",\n\t\"EMOTE113_CMD1\",\n\t\"EMOTE113_CMD2\",\n\t\"EMOTE114_CMD1\",\n\t\"EMOTE114_CMD2\",\n\t\"EMOTE114_CMD3\",\n\t\"EMOTE115_CMD1\",\n\t\"EMOTE115_CMD2\",\n\t\"EMOTE116_CMD1\",\n\t\"EMOTE116_CMD2\",\n\t\"EMOTE117_CMD1\",\n\t\"EMOTE117_CMD2\",\n\t\"EMOTE118_CMD1\",\n\t\"EMOTE118_CMD2\",\n\t\"EMOTE119_CMD1\",\n\t\"EMOTE119_CMD2\",\n\t\"EMOTE11_CMD1\",\n\t\"EMOTE11_CMD2\",\n\t\"EMOTE120_CMD1\",\n\t\"EMOTE120_CMD2\",\n\t\"EMOTE121_CMD1\",\n\t\"EMOTE121_CMD2\",\n\t\"EMOTE122_CMD1\",\n\t\"EMOTE122_CMD2\",\n\t\"EMOTE123_CMD1\",\n\t\"EMOTE123_CMD2\",\n\t\"EMOTE123_CMD3\",\n\t\"EMOTE123_CMD4\",\n\t\"EMOTE124_CMD1\",\n\t\"EMOTE124_CMD2\",\n\t\"EMOTE125_CMD1\",\n\t\"EMOTE125_CMD2\",\n\t\"EMOTE126_CMD1\",\n\t\"EMOTE126_CMD2\",\n\t\"EMOTE126_CMD3\",\n\t\"EMOTE126_CMD4\",\n\t\"EMOTE127_CMD1\",\n\t\"EMOTE127_CMD2\",\n\t\"EMOTE127_CMD3\",\n\t\"EMOTE127_CMD4\",\n\t\"EMOTE128_CMD1\",\n\t\"EMOTE128_CMD2\",\n\t\"EMOTE129_CMD1\",\n\t\"EMOTE129_CMD2\",\n\t\"EMOTE12_CMD1\",\n\t\"EMOTE12_CMD2\",\n\t\"EMOTE130_CMD1\",\n\t\"EMOTE130_CMD2\",\n\t\"EMOTE130_CMD3\",\n\t\"EMOTE130_CMD4\",\n\t\"EMOTE131_CMD1\",\n\t\"EMOTE131_CMD2\",\n\t\"EMOTE132_CMD1\",\n\t\"EMOTE132_CMD2\",\n\t\"EMOTE133_CMD1\",\n\t\"EMOTE133_CMD2\",\n\t\"EMOTE134_CMD1\",\n\t\"EMOTE134_CMD2\",\n\t\"EMOTE135_CMD1\",\n\t\"EMOTE135_CMD2\",\n\t\"EMOTE136_CMD1\",\n\t\"EMOTE136_CMD2\",\n\t\"EMOTE136_CMD3\",\n\t\"EMOTE136_CMD4\",\n\t\"EMOTE137_CMD1\",\n\t\"EMOTE137_CMD2\",\n\t\"EMOTE138_CMD1\",\n\t\"EMOTE138_CMD2\",\n\t\"EMOTE139_CMD1\",\n\t\"EMOTE139_CMD2\",\n\t\"EMOTE13_CMD1\",\n\t\"EMOTE13_CMD2\",\n\t\"EMOTE13_CMD3\",\n\t\"EMOTE13_CMD4\",\n\t\"EMOTE140_CMD1\",\n\t\"EMOTE140_CMD2\",\n\t\"EMOTE141_CMD1\",\n\t\"EMOTE141_CMD2\",\n\t\"EMOTE142_CMD1\",\n\t\"EMOTE142_CMD2\",\n\t\"EMOTE143_CMD1\",\n\t\"EMOTE143_CMD2\",\n\t\"EMOTE144_CMD1\",\n\t\"EMOTE144_CMD2\",\n\t\"EMOTE145_CMD1\",\n\t\"EMOTE145_CMD2\",\n\t\"EMOTE146_CMD1\",\n\t\"EMOTE146_CMD2\",\n\t\"EMOTE147_CMD1\",\n\t\"EMOTE147_CMD2\",\n\t\"EMOTE148_CMD1\",\n\t\"EMOTE148_CMD2\",\n\t\"EMOTE149_CMD1\",\n\t\"EMOTE149_CMD2\",\n\t\"EMOTE14_CMD1\",\n\t\"EMOTE14_CMD2\",\n\t\"EMOTE150_CMD1\",\n\t\"EMOTE150_CMD2\",\n\t\"EMOTE151_CMD1\",\n\t\"EMOTE151_CMD2\",\n\t\"EMOTE152_CMD1\",\n\t\"EMOTE152_CMD2\",\n\t\"EMOTE153_CMD1\",\n\t\"EMOTE153_CMD2\",\n\t\"EMOTE154_CMD1\",\n\t\"EMOTE154_CMD2\",\n\t\"EMOTE155_CMD1\",\n\t\"EMOTE155_CMD2\",\n\t\"EMOTE156_CMD1\",\n\t\"EMOTE156_CMD2\",\n\t\"EMOTE157_CMD1\",\n\t\"EMOTE157_CMD2\",\n\t\"EMOTE158_CMD1\",\n\t\"EMOTE158_CMD2\",\n\t\"EMOTE159_CMD1\",\n\t\"EMOTE159_CMD2\",\n\t\"EMOTE15_CMD1\",\n\t\"EMOTE15_CMD2\",\n\t\"EMOTE160_CMD1\",\n\t\"EMOTE160_CMD2\",\n\t\"EMOTE161_CMD1\",\n\t\"EMOTE161_CMD2\",\n\t\"EMOTE162_CMD1\",\n\t\"EMOTE162_CMD2\",\n\t\"EMOTE163_CMD1\",\n\t\"EMOTE163_CMD2\",\n\t\"EMOTE164_CMD1\",\n\t\"EMOTE164_CMD2\",\n\t\"EMOTE165_CMD1\",\n\t\"EMOTE165_CMD2\",\n\t\"EMOTE166_CMD1\",\n\t\"EMOTE166_CMD2\",\n\t\"EMOTE167_CMD1\",\n\t\"EMOTE167_CMD2\",\n\t\"EMOTE168_CMD1\",\n\t\"EMOTE168_CMD2\",\n\t\"EMOTE169_CMD1\",\n\t\"EMOTE169_CMD2\",\n\t\"EMOTE16_CMD1\",\n\t\"EMOTE16_CMD2\",\n\t\"EMOTE170_CMD1\",\n\t\"EMOTE170_CMD2\",\n\t\"EMOTE171_CMD1\",\n\t\"EMOTE171_CMD2\",\n\t\"EMOTE17_CMD1\",\n\t\"EMOTE17_CMD2\",\n\t\"EMOTE18_CMD1\",\n\t\"EMOTE18_CMD2\",\n\t\"EMOTE18_CMD3\",\n\t\"EMOTE18_CMD4\",\n\t\"EMOTE19_CMD1\",\n\t\"EMOTE19_CMD2\",\n\t\"EMOTE19_CMD3\",\n\t\"EMOTE19_CMD4\",\n\t\"EMOTE19_CMD5\",\n\t\"EMOTE19_CMD6\",\n\t\"EMOTE1_CMD1\",\n\t\"EMOTE1_CMD2\",\n\t\"EMOTE20_CMD1\",\n\t\"EMOTE20_CMD2\",\n\t\"EMOTE21_CMD1\",\n\t\"EMOTE21_CMD2\",\n\t\"EMOTE21_CMD3\",\n\t\"EMOTE21_CMD4\",\n\t\"EMOTE22_CMD1\",\n\t\"EMOTE22_CMD2\",\n\t\"EMOTE22_CMD3\",\n\t\"EMOTE22_CMD4\",\n\t\"EMOTE22_CMD5\",\n\t\"EMOTE22_CMD6\",\n\t\"EMOTE23_CMD1\",\n\t\"EMOTE23_CMD2\",\n\t\"EMOTE24_CMD1\",\n\t\"EMOTE24_CMD2\",\n\t\"EMOTE25_CMD1\",\n\t\"EMOTE25_CMD2\",\n\t\"EMOTE26_CMD1\",\n\t\"EMOTE26_CMD2\",\n\t\"EMOTE26_CMD3\",\n\t\"EMOTE26_CMD4\",\n\t\"EMOTE26_CMD5\",\n\t\"EMOTE26_CMD6\",\n\t\"EMOTE27_CMD1\",\n\t\"EMOTE27_CMD2\",\n\t\"EMOTE28_CMD1\",\n\t\"EMOTE28_CMD2\",\n\t\"EMOTE29_CMD1\",\n\t\"EMOTE29_CMD2\",\n\t\"EMOTE29_CMD3\",\n\t\"EMOTE29_CMD4\",\n\t\"EMOTE2_CMD1\",\n\t\"EMOTE2_CMD2\",\n\t\"EMOTE304_CMD1\",\n\t\"EMOTE304_CMD3\",\n\t\"EMOTE304_CMD4\",\n\t\"EMOTE306_CMD1\",\n\t\"EMOTE306_CMD2\",\n\t\"EMOTE306_CMD3\",\n\t\"EMOTE306_CMD4\",\n\t\"EMOTE30_CMD1\",\n\t\"EMOTE30_CMD2\",\n\t\"EMOTE30_CMD3\",\n\t\"EMOTE30_CMD4\",\n\t\"EMOTE31_CMD1\",\n\t\"EMOTE31_CMD2\",\n\t\"EMOTE32_CMD1\",\n\t\"EMOTE32_CMD2\",\n\t\"EMOTE32_CMD3\",\n\t\"EMOTE32_CMD4\",\n\t\"EMOTE32_CMD5\",\n\t\"EMOTE32_CMD6\",\n\t\"EMOTE33_CMD1\",\n\t\"EMOTE33_CMD2\",\n\t\"EMOTE34_CMD1\",\n\t\"EMOTE34_CMD2\",\n\t\"EMOTE35_CMD1\",\n\t\"EMOTE35_CMD2\",\n\t\"EMOTE368_CMD1\",\n\t\"EMOTE368_CMD2\",\n\t\"EMOTE369_CMD1\",\n\t\"EMOTE369_CMD2\",\n\t\"EMOTE36_CMD1\",\n\t\"EMOTE36_CMD2\",\n\t\"EMOTE36_CMD3\",\n\t\"EMOTE36_CMD4\",\n\t\"EMOTE370_CMD1\",\n\t\"EMOTE370_CMD2\",\n\t\"EMOTE371_CMD1\",\n\t\"EMOTE371_CMD2\",\n\t\"EMOTE372_CMD1\",\n\t\"EMOTE372_CMD2\",\n\t\"EMOTE373_CMD1\",\n\t\"EMOTE373_CMD2\",\n\t\"EMOTE374_CMD1\",\n\t\"EMOTE374_CMD2\",\n\t\"EMOTE375_CMD1\",\n\t\"EMOTE375_CMD2\",\n\t\"EMOTE376_CMD1\",\n\t\"EMOTE376_CMD2\",\n\t\"EMOTE377_CMD1\",\n\t\"EMOTE377_CMD2\",\n\t\"EMOTE377_CMD3\",\n\t\"EMOTE377_CMD4\",\n\t\"EMOTE37_CMD1\",\n\t\"EMOTE37_CMD2\",\n\t\"EMOTE380_CMD1\",\n\t\"EMOTE380_CMD2\",\n\t\"EMOTE381_CMD1\",\n\t\"EMOTE381_CMD2\",\n\t\"EMOTE382_CMD1\",\n\t\"EMOTE382_CMD2\",\n\t\"EMOTE383_CMD1\",\n\t\"EMOTE383_CMD2\",\n\t\"EMOTE384_CMD1\",\n\t\"EMOTE384_CMD2\",\n\t\"EMOTE384_CMD3\",\n\t\"EMOTE384_CMD4\",\n\t\"EMOTE385_CMD1\",\n\t\"EMOTE385_CMD2\",\n\t\"EMOTE385_CMD3\",\n\t\"EMOTE385_CMD4\",\n\t\"EMOTE386_CMD1\",\n\t\"EMOTE386_CMD2\",\n\t\"EMOTE387_CMD1\",\n\t\"EMOTE387_CMD2\",\n\t\"EMOTE389_CMD1\",\n\t\"EMOTE389_CMD2\",\n\t\"EMOTE38_CMD1\",\n\t\"EMOTE38_CMD2\",\n\t\"EMOTE38_CMD3\",\n\t\"EMOTE38_CMD4\",\n\t\"EMOTE38_CMD5\",\n\t\"EMOTE38_CMD6\",\n\t\"EMOTE390_CMD1\",\n\t\"EMOTE390_CMD2\",\n\t\"EMOTE390_CMD3\",\n\t\"EMOTE390_CMD4\",\n\t\"EMOTE391_CMD1\",\n\t\"EMOTE391_CMD2\",\n\t\"EMOTE392_CMD1\",\n\t\"EMOTE392_CMD2\",\n\t\"EMOTE393_CMD1\",\n\t\"EMOTE393_CMD2\",\n\t\"EMOTE394_CMD1\",\n\t\"EMOTE394_CMD2\",\n\t\"EMOTE395_CMD1\",\n\t\"EMOTE395_CMD2\",\n\t\"EMOTE396_CMD1\",\n\t\"EMOTE396_CMD2\",\n\t\"EMOTE398_CMD1\",\n\t\"EMOTE398_CMD2\",\n\t\"EMOTE399_CMD1\",\n\t\"EMOTE399_CMD2\",\n\t\"EMOTE39_CMD1\",\n\t\"EMOTE39_CMD2\",\n\t\"EMOTE3_CMD1\",\n\t\"EMOTE3_CMD2\",\n\t\"EMOTE3_CMD3\",\n\t\"EMOTE3_CMD4\",\n\t\"EMOTE401_CMD1\",\n\t\"EMOTE401_CMD2\",\n\t\"EMOTE402_CMD1\",\n\t\"EMOTE402_CMD2\",\n\t\"EMOTE403_CMD1\",\n\t\"EMOTE403_CMD2\",\n\t\"EMOTE404_CMD1\",\n\t\"EMOTE404_CMD2\",\n\t\"EMOTE405_CMD1\",\n\t\"EMOTE405_CMD2\",\n\t\"EMOTE406_CMD1\",\n\t\"EMOTE406_CMD2\",\n\t\"EMOTE407_CMD1\",\n\t\"EMOTE407_CMD2\",\n\t\"EMOTE408_CMD1\",\n\t\"EMOTE408_CMD2\",\n\t\"EMOTE409_CMD1\",\n\t\"EMOTE409_CMD2\",\n\t\"EMOTE40_CMD1\",\n\t\"EMOTE40_CMD2\",\n\t\"EMOTE410_CMD1\",\n\t\"EMOTE410_CMD2\",\n\t\"EMOTE411_CMD1\",\n\t\"EMOTE411_CMD2\",\n\t\"EMOTE413_CMD1\",\n\t\"EMOTE413_CMD2\",\n\t\"EMOTE414_CMD1\",\n\t\"EMOTE414_CMD2\",\n\t\"EMOTE415_CMD1\",\n\t\"EMOTE415_CMD2\",\n\t\"EMOTE416_CMD1\",\n\t\"EMOTE416_CMD2\",\n\t\"EMOTE417_CMD1\",\n\t\"EMOTE417_CMD2\",\n\t\"EMOTE418_CMD1\",\n\t\"EMOTE418_CMD2\",\n\t\"EMOTE41_CMD1\",\n\t\"EMOTE41_CMD2\",\n\t\"EMOTE41_CMD3\",\n\t\"EMOTE41_CMD4\",\n\t\"EMOTE420_CMD1\",\n\t\"EMOTE420_CMD2\",\n\t\"EMOTE421_CMD1\",\n\t\"EMOTE421_CMD2\",\n\t\"EMOTE421_CMD3\",\n\t\"EMOTE421_CMD4\",\n\t\"EMOTE422_CMD1\",\n\t\"EMOTE422_CMD2\",\n\t\"EMOTE423_CMD1\",\n\t\"EMOTE423_CMD2\",\n\t\"EMOTE424_CMD1\",\n\t\"EMOTE424_CMD2\",\n\t\"EMOTE425_CMD1\",\n\t\"EMOTE425_CMD2\",\n\t\"EMOTE426_CMD1\",\n\t\"EMOTE426_CMD2\",\n\t\"EMOTE427_CMD1\",\n\t\"EMOTE427_CMD2\",\n\t\"EMOTE428_CMD1\",\n\t\"EMOTE428_CMD2\",\n\t\"EMOTE428_CMD3\",\n\t\"EMOTE428_CMD4\",\n\t\"EMOTE429_CMD1\",\n\t\"EMOTE429_CMD2\",\n\t\"EMOTE42_CMD1\",\n\t\"EMOTE42_CMD2\",\n\t\"EMOTE42_CMD3\",\n\t\"EMOTE42_CMD4\",\n\t\"EMOTE430_CMD1\",\n\t\"EMOTE430_CMD2\",\n\t\"EMOTE431_CMD1\",\n\t\"EMOTE431_CMD2\",\n\t\"EMOTE432_CMD1\",\n\t\"EMOTE432_CMD2\",\n\t\"EMOTE432_CMD3\",\n\t\"EMOTE432_CMD4\",\n\t\"EMOTE433_CMD1\",\n\t\"EMOTE433_CMD2\",\n\t\"EMOTE434_CMD1\",\n\t\"EMOTE434_CMD2\",\n\t\"EMOTE435_CMD1\",\n\t\"EMOTE435_CMD2\",\n\t\"EMOTE436_CMD1\",\n\t\"EMOTE436_CMD2\",\n\t\"EMOTE437_CMD1\",\n\t\"EMOTE437_CMD2\",\n\t\"EMOTE438_CMD1\",\n\t\"EMOTE438_CMD2\",\n\t\"EMOTE43_CMD1\",\n\t\"EMOTE43_CMD2\",\n\t\"EMOTE43_CMD3\",\n\t\"EMOTE43_CMD4\",\n\t\"EMOTE43_CMD5\",\n\t\"EMOTE43_CMD6\",\n\t\"EMOTE440_CMD1\",\n\t\"EMOTE440_CMD2\",\n\t\"EMOTE441_CMD1\",\n\t\"EMOTE441_CMD2\",\n\t\"EMOTE442_CMD1\",\n\t\"EMOTE442_CMD2\",\n\t\"EMOTE443_CMD1\",\n\t\"EMOTE443_CMD2\",\n\t\"EMOTE444_CMD1\",\n\t\"EMOTE444_CMD2\",\n\t\"EMOTE445_CMD1\",\n\t\"EMOTE445_CMD2\",\n\t\"EMOTE446_CMD1\",\n\t\"EMOTE446_CMD2\",\n\t\"EMOTE447_CMD1\",\n\t\"EMOTE447_CMD2\",\n\t\"EMOTE448_CMD1\",\n\t\"EMOTE448_CMD2\",\n\t\"EMOTE449_CMD1\",\n\t\"EMOTE449_CMD2\",\n\t\"EMOTE44_CMD1\",\n\t\"EMOTE44_CMD2\",\n\t\"EMOTE44_CMD3\",\n\t\"EMOTE450_CMD1\",\n\t\"EMOTE450_CMD2\",\n\t\"EMOTE450_CMD3\",\n\t\"EMOTE450_CMD4\",\n\t\"EMOTE450_CMD5\",\n\t\"EMOTE450_CMD6\",\n\t\"EMOTE451_CMD1\",\n\t\"EMOTE451_CMD2\",\n\t\"EMOTE452_CMD1\",\n\t\"EMOTE452_CMD2\",\n\t\"EMOTE45_CMD1\",\n\t\"EMOTE45_CMD2\",\n\t\"EMOTE46_CMD1\",\n\t\"EMOTE46_CMD2\",\n\t\"EMOTE47_CMD1\",\n\t\"EMOTE47_CMD2\",\n\t\"EMOTE48_CMD1\",\n\t\"EMOTE48_CMD2\",\n\t\"EMOTE49_CMD1\",\n\t\"EMOTE49_CMD2\",\n\t\"EMOTE49_CMD3\",\n\t\"EMOTE49_CMD4\",\n\t\"EMOTE4_CMD1\",\n\t\"EMOTE4_CMD2\",\n\t\"EMOTE4_CMD3\",\n\t\"EMOTE4_CMD4\",\n\t\"EMOTE50_CMD1\",\n\t\"EMOTE50_CMD2\",\n\t\"EMOTE50_CMD3\",\n\t\"EMOTE50_CMD4\",\n\t\"EMOTE50_CMD5\",\n\t\"EMOTE50_CMD6\",\n\t\"EMOTE51_CMD1\",\n\t\"EMOTE51_CMD2\",\n\t\"EMOTE52_CMD1\",\n\t\"EMOTE52_CMD2\",\n\t\"EMOTE52_CMD3\",\n\t\"EMOTE52_CMD4\",\n\t\"EMOTE53_CMD1\",\n\t\"EMOTE53_CMD2\",\n\t\"EMOTE54_CMD1\",\n\t\"EMOTE54_CMD2\",\n\t\"EMOTE55_CMD1\",\n\t\"EMOTE55_CMD2\",\n\t\"EMOTE55_CMD3\",\n\t\"EMOTE55_CMD4\",\n\t\"EMOTE55_CMD5\",\n\t\"EMOTE55_CMD6\",\n\t\"EMOTE56_CMD1\",\n\t\"EMOTE56_CMD2\",\n\t\"EMOTE56_CMD3\",\n\t\"EMOTE56_CMD4\",\n\t\"EMOTE57_CMD1\",\n\t\"EMOTE57_CMD2\",\n\t\"EMOTE58_CMD1\",\n\t\"EMOTE58_CMD2\",\n\t\"EMOTE58_CMD3\",\n\t\"EMOTE58_CMD4\",\n\t\"EMOTE58_CMD5\",\n\t\"EMOTE58_CMD6\",\n\t\"EMOTE59_CMD1\",\n\t\"EMOTE59_CMD2\",\n\t\"EMOTE59_CMD3\",\n\t\"EMOTE59_CMD4\",\n\t\"EMOTE5_CMD1\",\n\t\"EMOTE5_CMD2\",\n\t\"EMOTE5_CMD3\",\n\t\"EMOTE5_CMD4\",\n\t\"EMOTE5_CMD5\",\n\t\"EMOTE5_CMD6\",\n\t\"EMOTE60_CMD1\",\n\t\"EMOTE60_CMD2\",\n\t\"EMOTE60_CMD3\",\n\t\"EMOTE61_CMD1\",\n\t\"EMOTE61_CMD2\",\n\t\"EMOTE61_CMD3\",\n\t\"EMOTE61_CMD4\",\n\t\"EMOTE62_CMD1\",\n\t\"EMOTE62_CMD2\",\n\t\"EMOTE62_CMD3\",\n\t\"EMOTE62_CMD4\",\n\t\"EMOTE62_CMD5\",\n\t\"EMOTE62_CMD6\",\n\t\"EMOTE62_CMD7\",\n\t\"EMOTE62_CMD8\",\n\t\"EMOTE63_CMD1\",\n\t\"EMOTE63_CMD2\",\n\t\"EMOTE64_CMD1\",\n\t\"EMOTE64_CMD2\",\n\t\"EMOTE65_CMD1\",\n\t\"EMOTE65_CMD2\",\n\t\"EMOTE66_CMD1\",\n\t\"EMOTE66_CMD2\",\n\t\"EMOTE67_CMD1\",\n\t\"EMOTE67_CMD2\",\n\t\"EMOTE68_CMD1\",\n\t\"EMOTE68_CMD2\",\n\t\"EMOTE68_CMD3\",\n\t\"EMOTE68_CMD4\",\n\t\"EMOTE69_CMD1\",\n\t\"EMOTE69_CMD2\",\n\t\"EMOTE69_CMD3\",\n\t\"EMOTE69_CMD4\",\n\t\"EMOTE6_CMD1\",\n\t\"EMOTE6_CMD2\",\n\t\"EMOTE70_CMD1\",\n\t\"EMOTE70_CMD2\",\n\t\"EMOTE71_CMD1\",\n\t\"EMOTE71_CMD2\",\n\t\"EMOTE72_CMD1\",\n\t\"EMOTE72_CMD2\",\n\t\"EMOTE73_CMD1\",\n\t\"EMOTE73_CMD2\",\n\t\"EMOTE74_CMD1\",\n\t\"EMOTE74_CMD2\",\n\t\"EMOTE75_CMD1\",\n\t\"EMOTE75_CMD2\",\n\t\"EMOTE76_CMD1\",\n\t\"EMOTE76_CMD2\",\n\t\"EMOTE76_CMD3\",\n\t\"EMOTE76_CMD4\",\n\t\"EMOTE77_CMD1\",\n\t\"EMOTE77_CMD2\",\n\t\"EMOTE78_CMD1\",\n\t\"EMOTE78_CMD2\",\n\t\"EMOTE79_CMD1\",\n\t\"EMOTE79_CMD2\",\n\t\"EMOTE7_CMD1\",\n\t\"EMOTE7_CMD2\",\n\t\"EMOTE80_CMD1\",\n\t\"EMOTE80_CMD2\",\n\t\"EMOTE80_CMD3\",\n\t\"EMOTE80_CMD4\",\n\t\"EMOTE80_CMD5\",\n\t\"EMOTE80_CMD6\",\n\t\"EMOTE81_CMD1\",\n\t\"EMOTE81_CMD2\",\n\t\"EMOTE82_CMD1\",\n\t\"EMOTE82_CMD2\",\n\t\"EMOTE82_CMD3\",\n\t\"EMOTE82_CMD4\",\n\t\"EMOTE83_CMD1\",\n\t\"EMOTE83_CMD2\",\n\t\"EMOTE83_CMD3\",\n\t\"EMOTE84_CMD1\",\n\t\"EMOTE84_CMD2\",\n\t\"EMOTE85_CMD1\",\n\t\"EMOTE85_CMD2\",\n\t\"EMOTE86_CMD1\",\n\t\"EMOTE86_CMD2\",\n\t\"EMOTE87_CMD1\",\n\t\"EMOTE87_CMD2\",\n\t\"EMOTE88_CMD1\",\n\t\"EMOTE88_CMD2\",\n\t\"EMOTE89_CMD1\",\n\t\"EMOTE89_CMD2\",\n\t\"EMOTE8_CMD1\",\n\t\"EMOTE8_CMD2\",\n\t\"EMOTE90_CMD1\",\n\t\"EMOTE90_CMD2\",\n\t\"EMOTE91_CMD1\",\n\t\"EMOTE91_CMD2\",\n\t\"EMOTE92_CMD1\",\n\t\"EMOTE92_CMD2\",\n\t\"EMOTE93_CMD1\",\n\t\"EMOTE93_CMD2\",\n\t\"EMOTE94_CMD1\",\n\t\"EMOTE94_CMD2\",\n\t\"EMOTE95_CMD1\",\n\t\"EMOTE95_CMD2\",\n\t\"EMOTE95_CMD3\",\n\t\"EMOTE95_CMD4\",\n\t\"EMOTE96_CMD1\",\n\t\"EMOTE96_CMD2\",\n\t\"EMOTE96_CMD3\",\n\t\"EMOTE96_CMD4\",\n\t\"EMOTE97_CMD1\",\n\t\"EMOTE97_CMD2\",\n\t\"EMOTE98_CMD1\",\n\t\"EMOTE98_CMD2\",\n\t\"EMOTE98_CMD3\",\n\t\"EMOTE98_CMD4\",\n\t\"EMOTE98_CMD5\",\n\t\"EMOTE98_CMD6\",\n\t\"EMOTE99_CMD1\",\n\t\"EMOTE99_CMD2\",\n\t\"EMOTE99_CMD3\",\n\t\"EMOTE99_CMD4\",\n\t\"EMOTE99_CMD5\",\n\t\"EMOTE99_CMD6\",\n\t\"EMOTE99_CMD7\",\n\t\"EMOTE99_CMD8\",\n\t\"EMOTE9_CMD1\",\n\t\"EMOTE9_CMD2\",\n\t\"EMOTE_MESSAGE\",\n\t\"EMOTE_STATE_KNEEL\",\n\t\"EMPTY\",\n\t\"EMPTY_SOCKET\",\n\t\"EMPTY_SOCKET_BLUE\",\n\t\"EMPTY_SOCKET_META\",\n\t\"EMPTY_SOCKET_NO_COLOR\",\n\t\"EMPTY_SOCKET_RED\",\n\t\"EMPTY_SOCKET_YELLOW\",\n\t\"EMPTY_STABLE_SLOT\",\n\t\"ENABLE\",\n\t\"ENABLE_ALL_SHADERS\",\n\t\"ENABLE_AMBIENCE\",\n\t\"ENABLE_BGSOUND\",\n\t\"ENABLE_DSP_EFFECTS\",\n\t\"ENABLE_EMOTE_SOUNDS\",\n\t\"ENABLE_ERROR_SPEECH\",\n\t\"ENABLE_GROUP_SPEECH\",\n\t\"ENABLE_HARDWARE\",\n\t\"ENABLE_MICROPHONE\",\n\t\"ENABLE_MUSIC\",\n\t\"ENABLE_MUSIC_LOOPING\",\n\t\"ENABLE_PET_SOUNDS\",\n\t\"ENABLE_REVERB\",\n\t\"ENABLE_SOFTWARE_HRTF\",\n\t\"ENABLE_SOUND\",\n\t\"ENABLE_SOUNDFX\",\n\t\"ENABLE_SOUND_AT_CHARACTER\",\n\t\"ENABLE_STEREO_VIDEO\",\n\t\"ENABLE_TUTORIAL_TEXT\",\n\t\"ENABLE_VOICECHAT\",\n\t\"ENCHANTS\",\n\t\"ENCHANT_AURA_COMBATLOG_TOOLTIP\",\n\t\"ENCHANT_CONDITION_AND\",\n\t\"ENCHANT_CONDITION_EQUAL_COMPARE\",\n\t\"ENCHANT_CONDITION_EQUAL_VALUE\",\n\t\"ENCHANT_CONDITION_LESS_VALUE\",\n\t\"ENCHANT_CONDITION_MORE_COMPARE\",\n\t\"ENCHANT_CONDITION_MORE_EQUAL_COMPARE\",\n\t\"ENCHANT_CONDITION_MORE_VALUE\",\n\t\"ENCHANT_CONDITION_NOT_EQUAL_COMPARE\",\n\t\"ENCHANT_CONDITION_NOT_EQUAL_VALUE\",\n\t\"ENCHANT_CONDITION_REQUIRES\",\n\t\"ENCHANT_ITEM_MIN_SKILL\",\n\t\"ENCHANT_ITEM_REQ_LEVEL\",\n\t\"ENCHANT_ITEM_REQ_SKILL\",\n\t\"ENCHANT_SLOT\",\n\t\"ENCHSLOT_2HWEAPON\",\n\t\"ENCHSLOT_WEAPON\",\n\t\"ENCLOSED_MONEY\",\n\t\"ENCN\",\n\t\"ENCRYPTED\",\n\t\"END_BOUND_TRADEABLE\",\n\t\"END_REFUND\",\n\t\"ENEMY\",\n\t\"ENERGY\",\n\t\"ENERGY_COST\",\n\t\"ENERGY_COST_PER_TIME\",\n\t\"ENGB\",\n\t\"ENSCRIBE\",\n\t\"ENTERING_COMBAT\",\n\t\"ENTER_BATTLE\",\n\t\"ENTER_CODE\",\n\t\"ENTER_DUNGEON\",\n\t\"ENTER_FILTER_NAME\",\n\t\"ENTER_INVITE_NOTE\",\n\t\"ENTER_MACRO_LABEL\",\n\t\"ENTER_NAME_OR_EMAIL\",\n\t\"ENTIRE_LINE\",\n\t\"ENTIRE_LINE_COMBATLOG_TOOLTIP\",\n\t\"ENTW\",\n\t\"ENUS\",\n\t\"ENVIRONMENTAL_DAMAGE\",\n\t\"ENVIRONMENTAL_DAMAGE_COMBATLOG_TOOLTIP\",\n\t\"ENVIRONMENT_DETAIL\",\n\t\"EQUIPMENT_MANAGER\",\n\t\"EQUIPMENT_MANAGER_BAGS_FULL\",\n\t\"EQUIPMENT_MANAGER_COMBAT_SWAP\",\n\t\"EQUIPMENT_MANAGER_IGNORE_SLOT\",\n\t\"EQUIPMENT_MANAGER_IS_DISABLED\",\n\t\"EQUIPMENT_MANAGER_ITEMS_MISSING_TOOLTIP\",\n\t\"EQUIPMENT_MANAGER_MISSING_ITEM\",\n\t\"EQUIPMENT_MANAGER_PLACE_IN_BAGS\",\n\t\"EQUIPMENT_MANAGER_UNIGNORE_SLOT\",\n\t\"EQUIPMENT_SETS\",\n\t\"EQUIPMENT_SETS_TOO_MANY\",\n\t\"EQUIPSET_EQUIP\",\n\t\"EQUIP_CONTAINER\",\n\t\"EQUIP_NO_DROP\",\n\t\"ERRORS\",\n\t\"ERROR_CANNOT_BIND\",\n\t\"ERROR_CAPS\",\n\t\"ERROR_SLASH_CHANGEACTIONBAR\",\n\t\"ERROR_SLASH_EQUIP_TO_SLOT\",\n\t\"ERROR_SLASH_LOOT_SETTHRESHOLD\",\n\t\"ERROR_SLASH_SWAPACTIONBAR\",\n\t\"ERROR_SLASH_TEAM_CAPTAIN\",\n\t\"ERROR_SLASH_TEAM_DISBAND\",\n\t\"ERROR_SLASH_TEAM_INVITE\",\n\t\"ERROR_SLASH_TEAM_QUIT\",\n\t\"ERROR_SLASH_TEAM_UNINVITE\",\n\t\"ERR_2HANDED_EQUIPPED\",\n\t\"ERR_2HSKILLNOTFOUND\",\n\t\"ERR_ABILITY_COOLDOWN\",\n\t\"ERR_ACHIEVEMENT_WATCH_COMPLETED\",\n\t\"ERR_ALREADY_INVITED_TO_ARENA_TEAM_S\",\n\t\"ERR_ALREADY_INVITED_TO_GUILD_S\",\n\t\"ERR_ALREADY_IN_ARENA_TEAM\",\n\t\"ERR_ALREADY_IN_ARENA_TEAM_S\",\n\t\"ERR_ALREADY_IN_GROUP_S\",\n\t\"ERR_ALREADY_IN_GUILD\",\n\t\"ERR_ALREADY_IN_GUILD_S\",\n\t\"ERR_ALREADY_PICKPOCKETED\",\n\t\"ERR_ALREADY_QUEUED_FOR_SOMETHING_ELSE\",\n\t\"ERR_ALREADY_TRADING\",\n\t\"ERR_AMMO_ONLY\",\n\t\"ERR_APPROACHING_NO_PLAY_TIME\",\n\t\"ERR_APPROACHING_NO_PLAY_TIME_2\",\n\t\"ERR_APPROACHING_PARTIAL_PLAY_TIME\",\n\t\"ERR_APPROACHING_PARTIAL_PLAY_TIME_2\",\n\t\"ERR_ARENA_EXPIRED_CAIS\",\n\t\"ERR_ARENA_NO_TEAM_II\",\n\t\"ERR_ARENA_TEAMS_LOCKED\",\n\t\"ERR_ARENA_TEAM_CHANGE_FAILED_QUEUED\",\n\t\"ERR_ARENA_TEAM_CREATE_S\",\n\t\"ERR_ARENA_TEAM_DISBANDED_S\",\n\t\"ERR_ARENA_TEAM_FOUNDER_S\",\n\t\"ERR_ARENA_TEAM_INTERNAL\",\n\t\"ERR_ARENA_TEAM_INVITE_SS\",\n\t\"ERR_ARENA_TEAM_JOIN_SS\",\n\t\"ERR_ARENA_TEAM_LEADER_CHANGED_SSS\",\n\t\"ERR_ARENA_TEAM_LEADER_IS_SS\",\n\t\"ERR_ARENA_TEAM_LEADER_LEAVE_S\",\n\t\"ERR_ARENA_TEAM_LEAVE_SS\",\n\t\"ERR_ARENA_TEAM_LEVEL_TOO_LOW_I\",\n\t\"ERR_ARENA_TEAM_NAME_EXISTS_S\",\n\t\"ERR_ARENA_TEAM_NAME_INVALID\",\n\t\"ERR_ARENA_TEAM_NOT_ALLIED\",\n\t\"ERR_ARENA_TEAM_NOT_FOUND\",\n\t\"ERR_ARENA_TEAM_PARTY_SIZE\",\n\t\"ERR_ARENA_TEAM_PERMISSIONS\",\n\t\"ERR_ARENA_TEAM_PLAYER_NOT_FOUND_S\",\n\t\"ERR_ARENA_TEAM_PLAYER_NOT_IN_TEAM\",\n\t\"ERR_ARENA_TEAM_PLAYER_NOT_IN_TEAM_SS\",\n\t\"ERR_ARENA_TEAM_QUIT_S\",\n\t\"ERR_ARENA_TEAM_REMOVE_SSS\",\n\t\"ERR_ARENA_TEAM_TARGET_TOO_HIGH_S\",\n\t\"ERR_ARENA_TEAM_TARGET_TOO_LOW_S\",\n\t\"ERR_ARENA_TEAM_TOO_MANY_MEMBERS_S\",\n\t\"ERR_ARENA_TEAM_YOU_JOIN_S\",\n\t\"ERR_ATTACK_CHANNEL\",\n\t\"ERR_ATTACK_CHARMED\",\n\t\"ERR_ATTACK_CONFUSED\",\n\t\"ERR_ATTACK_DEAD\",\n\t\"ERR_ATTACK_FLEEING\",\n\t\"ERR_ATTACK_MOUNTED\",\n\t\"ERR_ATTACK_PACIFIED\",\n\t\"ERR_ATTACK_PREVENTED_BY_MECHANIC_S\",\n\t\"ERR_ATTACK_STUNNED\",\n\t\"ERR_AUCTION_BAG\",\n\t\"ERR_AUCTION_BID_INCREMENT\",\n\t\"ERR_AUCTION_BID_OWN\",\n\t\"ERR_AUCTION_BID_PLACED\",\n\t\"ERR_AUCTION_BOUND_ITEM\",\n\t\"ERR_AUCTION_CONJURED_ITEM\",\n\t\"ERR_AUCTION_DATABASE_ERROR\",\n\t\"ERR_AUCTION_ENOUGH_ITEMS\",\n\t\"ERR_AUCTION_EXPIRED_S\",\n\t\"ERR_AUCTION_HIGHER_BID\",\n\t\"ERR_AUCTION_HOUSE_DISABLED\",\n\t\"ERR_AUCTION_LIMITED_DURATION_ITEM\",\n\t\"ERR_AUCTION_LOOT_ITEM\",\n\t\"ERR_AUCTION_MIN_BID\",\n\t\"ERR_AUCTION_OUTBID_S\",\n\t\"ERR_AUCTION_QUEST_ITEM\",\n\t\"ERR_AUCTION_REMOVED\",\n\t\"ERR_AUCTION_REMOVED_S\",\n\t\"ERR_AUCTION_REPAIR_ITEM\",\n\t\"ERR_AUCTION_SOLD_S\",\n\t\"ERR_AUCTION_STARTED\",\n\t\"ERR_AUCTION_USED_CHARGES\",\n\t\"ERR_AUCTION_WON_S\",\n\t\"ERR_AUCTION_WRAPPED_ITEM\",\n\t\"ERR_AUTOFOLLOW_TOO_FAR\",\n\t\"ERR_AUTOLOOT_MONEY_S\",\n\t\"ERR_BADATTACKFACING\",\n\t\"ERR_BADATTACKPOS\",\n\t\"ERR_BAD_ON_USE_ENCHANT\",\n\t\"ERR_BAD_PLAYER_NAME_S\",\n\t\"ERR_BAG_FULL\",\n\t\"ERR_BAG_IN_BAG\",\n\t\"ERR_BANKSLOT_FAILED_TOO_MANY\",\n\t\"ERR_BANKSLOT_INSUFFICIENT_FUNDS\",\n\t\"ERR_BANKSLOT_NOTBANKER\",\n\t\"ERR_BANK_FULL\",\n\t\"ERR_BATTLEDGROUND_QUEUED_FOR_RATED\",\n\t\"ERR_BATTLEGROUND_ALREADY_IN\",\n\t\"ERR_BATTLEGROUND_CANNOT_QUEUE_FOR_RATED\",\n\t\"ERR_BATTLEGROUND_INFO_THROTTLED\",\n\t\"ERR_BATTLEGROUND_JOIN_FAILED\",\n\t\"ERR_BATTLEGROUND_JOIN_RANGE_INDEX\",\n\t\"ERR_BATTLEGROUND_JOIN_TIMED_OUT\",\n\t\"ERR_BATTLEGROUND_NOT_IN_BATTLEGROUND\",\n\t\"ERR_BATTLEGROUND_NOT_IN_TEAM\",\n\t\"ERR_BATTLEGROUND_TEAM_LEFT_QUEUE\",\n\t\"ERR_BATTLEGROUND_TOO_MANY_QUEUES\",\n\t\"ERR_BG_PLAYER_JOINED_SS\",\n\t\"ERR_BG_PLAYER_LEFT_S\",\n\t\"ERR_BN_BROADCAST_THROTTLE\",\n\t\"ERR_BN_FRIEND_ALREADY\",\n\t\"ERR_BN_FRIEND_BLOCKED\",\n\t\"ERR_BN_FRIEND_REQUEST_SENT\",\n\t\"ERR_BN_FRIEND_SELF\",\n\t\"ERR_BUTTON_LOCKED\",\n\t\"ERR_CANNOTCREATEDIRECTORY\",\n\t\"ERR_CANNOTCREATEFILE\",\n\t\"ERR_CANNOT_IGNORE_BN_FRIEND\",\n\t\"ERR_CANTATTACK_NOTSTANDING\",\n\t\"ERR_CANT_DO_THAT_IN_A_GROUP\",\n\t\"ERR_CANT_DO_THAT_WHILE_LFM\",\n\t\"ERR_CANT_EQUIP_EVER\",\n\t\"ERR_CANT_EQUIP_LEVEL_I\",\n\t\"ERR_CANT_EQUIP_NEED_TALENT\",\n\t\"ERR_CANT_EQUIP_RANK\",\n\t\"ERR_CANT_EQUIP_RATING\",\n\t\"ERR_CANT_EQUIP_REPUTATION\",\n\t\"ERR_CANT_EQUIP_SKILL\",\n\t\"ERR_CANT_INTERACT_SHAPESHIFTED\",\n\t\"ERR_CANT_SPEAK_LANGAGE\",\n\t\"ERR_CANT_STACK\",\n\t\"ERR_CANT_SWAP\",\n\t\"ERR_CANT_USE_DISARMED\",\n\t\"ERR_CANT_USE_ITEM\",\n\t\"ERR_CANT_USE_ITEM_IN_ARENA\",\n\t\"ERR_CANT_WRAP_BAGS\",\n\t\"ERR_CANT_WRAP_BOUND\",\n\t\"ERR_CANT_WRAP_EQUIPPED\",\n\t\"ERR_CANT_WRAP_STACKABLE\",\n\t\"ERR_CANT_WRAP_UNIQUE\",\n\t\"ERR_CANT_WRAP_WRAPPED\",\n\t\"ERR_CHAT_PLAYER_AMBIGUOUS_S\",\n\t\"ERR_CHAT_PLAYER_NOT_FOUND_S\",\n\t\"ERR_CHAT_RESTRICTED\",\n\t\"ERR_CHAT_THROTTLED\",\n\t\"ERR_CHAT_WHILE_DEAD\",\n\t\"ERR_CHAT_WRONG_FACTION\",\n\t\"ERR_CHEST_IN_USE\",\n\t\"ERR_CLICK_ON_ITEM_TO_FEED\",\n\t\"ERR_CLIENT_LOCKED_OUT\",\n\t\"ERR_COMBAT_DAMAGE_SSI\",\n\t\"ERR_COMMAND_NEEDS_TARGET\",\n\t\"ERR_COMPLAINT_IN_SAME_GUILD\",\n\t\"ERR_COMSAT_CONNECT_FAIL\",\n\t\"ERR_COMSAT_DISCONNECT\",\n\t\"ERR_COMSAT_RECONNECT_ATTEMPT\",\n\t\"ERR_CORPSE_IS_NOT_IN_INSTANCE\",\n\t\"ERR_CURRENCY_FULL\",\n\t\"ERR_DANCE_CREATE_DUPLICATE\",\n\t\"ERR_DANCE_DELETE_FAILED\",\n\t\"ERR_DANCE_SAVE_FAILED\",\n\t\"ERR_DEATHBINDALREADYBOUND\",\n\t\"ERR_DEATHBIND_SUCCESS_S\",\n\t\"ERR_DECLINE_GROUP_S\",\n\t\"ERR_DESTROY_NONEMPTY_BAG\",\n\t\"ERR_DIFFICULTY_CHANGE_ALREADY_STARTED\",\n\t\"ERR_DIFFICULTY_CHANGE_COMBAT\",\n\t\"ERR_DIFFICULTY_CHANGE_COOLDOWN_S\",\n\t\"ERR_DIFFICULTY_CHANGE_ENCOUNTER\",\n\t\"ERR_DIFFICULTY_CHANGE_PLAYER_BUSY\",\n\t\"ERR_DIFFICULTY_CHANGE_WORLDSTATE\",\n\t\"ERR_DISMOUNT_NOPET\",\n\t\"ERR_DISMOUNT_NOTMOUNTED\",\n\t\"ERR_DISMOUNT_NOTYOURPET\",\n\t\"ERR_DOOR_LOCKED\",\n\t\"ERR_DROP_BOUND_ITEM\",\n\t\"ERR_DUEL_CANCELLED\",\n\t\"ERR_DUEL_REQUESTED\",\n\t\"ERR_DUNGEON_DIFFICULTY_CHANGED_S\",\n\t\"ERR_DUNGEON_DIFFICULTY_FAILED\",\n\t\"ERR_EAT_WHILE_MOVNG\",\n\t\"ERR_EMBLEMERROR_NOTABARDGEOSET\",\n\t\"ERR_EQUIP_TRADE_ITEM\",\n\t\"ERR_EXHAUSTION_EXHAUSTED\",\n\t\"ERR_EXHAUSTION_NORMAL\",\n\t\"ERR_EXHAUSTION_RESTED\",\n\t\"ERR_EXHAUSTION_TIRED\",\n\t\"ERR_EXHAUSTION_WELLRESTED\",\n\t\"ERR_FEIGN_DEATH_RESISTED\",\n\t\"ERR_FILTERING_YOU_S\",\n\t\"ERR_FISH_ESCAPED\",\n\t\"ERR_FISH_NOT_HOOKED\",\n\t\"ERR_FOOD_COOLDOWN\",\n\t\"ERR_FRIEND_ADDED_S\",\n\t\"ERR_FRIEND_ALREADY_S\",\n\t\"ERR_FRIEND_DB_ERROR\",\n\t\"ERR_FRIEND_DELETED\",\n\t\"ERR_FRIEND_ERROR\",\n\t\"ERR_FRIEND_LIST_FULL\",\n\t\"ERR_FRIEND_NOT_FOUND\",\n\t\"ERR_FRIEND_OFFLINE_S\",\n\t\"ERR_FRIEND_ONLINE_SS\",\n\t\"ERR_FRIEND_REMOVED_S\",\n\t\"ERR_FRIEND_SELF\",\n\t\"ERR_FRIEND_WRONG_FACTION\",\n\t\"ERR_GENERIC_NO_TARGET\",\n\t\"ERR_GENERIC_NO_VALID_TARGETS\",\n\t\"ERR_GENERIC_STUNNED\",\n\t\"ERR_GMRESPONSE_DB_ERROR\",\n\t\"ERR_GROUP_ACTION_THROTTLED\",\n\t\"ERR_GROUP_DISBANDED\",\n\t\"ERR_GROUP_FULL\",\n\t\"ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS\",\n\t\"ERR_GROUP_JOIN_BATTLEGROUND_FAIL\",\n\t\"ERR_GROUP_JOIN_BATTLEGROUND_S\",\n\t\"ERR_GROUP_JOIN_BATTLEGROUND_TOO_MANY\",\n\t\"ERR_GROUP_SWAP_FAILED\",\n\t\"ERR_GUILDEMBLEM_COLORSPRESENT\",\n\t\"ERR_GUILDEMBLEM_INVALIDVENDOR\",\n\t\"ERR_GUILDEMBLEM_INVALID_TABARD_COLORS\",\n\t\"ERR_GUILDEMBLEM_NOGUILD\",\n\t\"ERR_GUILDEMBLEM_NOTENOUGHMONEY\",\n\t\"ERR_GUILDEMBLEM_NOTGUILDMASTER\",\n\t\"ERR_GUILDEMBLEM_SAME\",\n\t\"ERR_GUILDEMBLEM_SUCCESS\",\n\t\"ERR_GUILD_ACCEPT\",\n\t\"ERR_GUILD_BANK_BOUND_ITEM\",\n\t\"ERR_GUILD_BANK_CONJURED_ITEM\",\n\t\"ERR_GUILD_BANK_EQUIPPED_ITEM\",\n\t\"ERR_GUILD_BANK_FULL\",\n\t\"ERR_GUILD_BANK_QUEST_ITEM\",\n\t\"ERR_GUILD_BANK_WRAPPED_ITEM\",\n\t\"ERR_GUILD_CREATE_S\",\n\t\"ERR_GUILD_DECLINE_S\",\n\t\"ERR_GUILD_DEMOTE_SSS\",\n\t\"ERR_GUILD_DISBANDED\",\n\t\"ERR_GUILD_DISBAND_S\",\n\t\"ERR_GUILD_DISBAND_SELF\",\n\t\"ERR_GUILD_FOUNDER_S\",\n\t\"ERR_GUILD_INTERNAL\",\n\t\"ERR_GUILD_INVITE_S\",\n\t\"ERR_GUILD_JOIN_S\",\n\t\"ERR_GUILD_LEADER_CHANGED_SS\",\n\t\"ERR_GUILD_LEADER_IS_S\",\n\t\"ERR_GUILD_LEADER_LEAVE\",\n\t\"ERR_GUILD_LEADER_S\",\n\t\"ERR_GUILD_LEADER_SELF\",\n\t\"ERR_GUILD_LEAVE_RESULT\",\n\t\"ERR_GUILD_LEAVE_S\",\n\t\"ERR_GUILD_NAME_EXISTS_S\",\n\t\"ERR_GUILD_NOT_ALLIED\",\n\t\"ERR_GUILD_NOT_ENOUGH_MONEY\",\n\t\"ERR_GUILD_PERMISSIONS\",\n\t\"ERR_GUILD_PLAYER_NOT_FOUND_S\",\n\t\"ERR_GUILD_PLAYER_NOT_IN_GUILD\",\n\t\"ERR_GUILD_PLAYER_NOT_IN_GUILD_S\",\n\t\"ERR_GUILD_PROMOTE_SSS\",\n\t\"ERR_GUILD_QUIT_S\",\n\t\"ERR_GUILD_RANKS_LOCKED\",\n\t\"ERR_GUILD_RANK_IN_USE\",\n\t\"ERR_GUILD_RANK_TOO_HIGH_S\",\n\t\"ERR_GUILD_RANK_TOO_LOW_S\",\n\t\"ERR_GUILD_REMOVE_SELF\",\n\t\"ERR_GUILD_REMOVE_SS\",\n\t\"ERR_GUILD_WITHDRAW_LIMIT\",\n\t\"ERR_IGNORE_ADDED_S\",\n\t\"ERR_IGNORE_ALREADY_S\",\n\t\"ERR_IGNORE_AMBIGUOUS\",\n\t\"ERR_IGNORE_DELETED\",\n\t\"ERR_IGNORE_FULL\",\n\t\"ERR_IGNORE_NOT_FOUND\",\n\t\"ERR_IGNORE_REMOVED_S\",\n\t\"ERR_IGNORE_SELF\",\n\t\"ERR_IGNORING_YOU_S\",\n\t\"ERR_INITIATE_TRADE_S\",\n\t\"ERR_INSPECT_S\",\n\t\"ERR_INTERNAL_BAG_ERROR\",\n\t\"ERR_INVALID_ATTACK_TARGET\",\n\t\"ERR_INVALID_FOLLOW_TARGET\",\n\t\"ERR_INVALID_GLYPH_SLOT\",\n\t\"ERR_INVALID_INSPECT_TARGET\",\n\t\"ERR_INVALID_ITEM_TARGET\",\n\t\"ERR_INVALID_PROMOTION_CODE\",\n\t\"ERR_INVALID_RAID_TARGET\",\n\t\"ERR_INVALID_TELEPORT_LOCATION\",\n\t\"ERR_INVITED_ALREADY_IN_GROUP_SS\",\n\t\"ERR_INVITED_TO_ARENA_TEAM\",\n\t\"ERR_INVITED_TO_GROUP_SS\",\n\t\"ERR_INVITED_TO_GUILD\",\n\t\"ERR_INVITED_TO_GUILD_SSS\",\n\t\"ERR_INVITE_IN_COMBAT\",\n\t\"ERR_INVITE_NO_PARTY_SERVER\",\n\t\"ERR_INVITE_PARTY_BUSY\",\n\t\"ERR_INVITE_PLAYER_S\",\n\t\"ERR_INVITE_RESTRICTED\",\n\t\"ERR_INVITE_SELF\",\n\t\"ERR_INVITE_UNKNOWN_REALM\",\n\t\"ERR_INV_FULL\",\n\t\"ERR_IN_NON_RANDOM_BG\",\n\t\"ERR_IN_RANDOM_BG\",\n\t\"ERR_ITEM_CANT_BE_DESTROYED\",\n\t\"ERR_ITEM_COOLDOWN\",\n\t\"ERR_ITEM_INVENTORY_FULL_SATCHEL\",\n\t\"ERR_ITEM_LOCKED\",\n\t\"ERR_ITEM_MAX_COUNT\",\n\t\"ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED\",\n\t\"ERR_ITEM_MAX_COUNT_SOCKETED\",\n\t\"ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS\",\n\t\"ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS\",\n\t\"ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS\",\n\t\"ERR_ITEM_NOT_FOUND\",\n\t\"ERR_ITEM_UNIQUE_EQUIPABLE\",\n\t\"ERR_ITEM_UNIQUE_EQUIPPABLE\",\n\t\"ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED\",\n\t\"ERR_JOINED_GROUP_S\",\n\t\"ERR_KILLED_BY_S\",\n\t\"ERR_LEARN_ABILITY_S\",\n\t\"ERR_LEARN_COMPANION_S\",\n\t\"ERR_LEARN_RECIPE_S\",\n\t\"ERR_LEARN_SPELL_S\",\n\t\"ERR_LEFT_GROUP_S\",\n\t\"ERR_LEFT_GROUP_YOU\",\n\t\"ERR_LFG_CANT_USE_BATTLEGROUND\",\n\t\"ERR_LFG_CANT_USE_DUNGEONS\",\n\t\"ERR_LFG_DESERTER_PARTY\",\n\t\"ERR_LFG_DESERTER_PLAYER\",\n\t\"ERR_LFG_GET_INFO_TIMEOUT\",\n\t\"ERR_LFG_GROUP_FULL\",\n\t\"ERR_LFG_INVALID_SLOT\",\n\t\"ERR_LFG_JOINED_LIST\",\n\t\"ERR_LFG_JOINED_QUEUE\",\n\t\"ERR_LFG_LEADER_IS_LFM_S\",\n\t\"ERR_LFG_LEFT_LIST\",\n\t\"ERR_LFG_LEFT_QUEUE\",\n\t\"ERR_LFG_MEMBERS_NOT_PRESENT\",\n\t\"ERR_LFG_MISMATCHED_SLOTS\",\n\t\"ERR_LFG_NO_LFG_OBJECT\",\n\t\"ERR_LFG_NO_ROLES_SELECTED\",\n\t\"ERR_LFG_NO_SLOTS_PARTY\",\n\t\"ERR_LFG_NO_SLOTS_PLAYER\",\n\t\"ERR_LFG_NO_SLOTS_SELECTED\",\n\t\"ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS\",\n\t\"ERR_LFG_PENDING\",\n\t\"ERR_LFG_PLAYER_DECLINED_ROLE_CHECK\",\n\t\"ERR_LFG_PROPOSAL_DECLINED_PARTY\",\n\t\"ERR_LFG_PROPOSAL_DECLINED_SELF\",\n\t\"ERR_LFG_PROPOSAL_FAILED\",\n\t\"ERR_LFG_RANDOM_COOLDOWN_PARTY\",\n\t\"ERR_LFG_RANDOM_COOLDOWN_PLAYER\",\n\t\"ERR_LFG_ROLE_CHECK_ABORTED\",\n\t\"ERR_LFG_ROLE_CHECK_FAILED\",\n\t\"ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE\",\n\t\"ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT\",\n\t\"ERR_LFG_ROLE_CHECK_INITIATED\",\n\t\"ERR_LFG_TOO_MANY_MEMBERS\",\n\t\"ERR_LOGGING_OUT\",\n\t\"ERR_LOGOUT_FAILED\",\n\t\"ERR_LOOT_BAD_FACING\",\n\t\"ERR_LOOT_CANT_LOOT_THAT\",\n\t\"ERR_LOOT_CANT_LOOT_THAT_NOW\",\n\t\"ERR_LOOT_DIDNT_KILL\",\n\t\"ERR_LOOT_GONE\",\n\t\"ERR_LOOT_LOCKED\",\n\t\"ERR_LOOT_MASTER_INV_FULL\",\n\t\"ERR_LOOT_MASTER_OTHER\",\n\t\"ERR_LOOT_MASTER_UNIQUE_ITEM\",\n\t\"ERR_LOOT_NOTSTANDING\",\n\t\"ERR_LOOT_NO_UI\",\n\t\"ERR_LOOT_PLAYER_NOT_FOUND\",\n\t\"ERR_LOOT_ROLL_PENDING\",\n\t\"ERR_LOOT_STUNNED\",\n\t\"ERR_LOOT_TOO_FAR\",\n\t\"ERR_LOOT_WHILE_INVULNERABLE\",\n\t\"ERR_MAIL_ATTACHMENT_EXPIRED\",\n\t\"ERR_MAIL_BAG\",\n\t\"ERR_MAIL_BOUND_ITEM\",\n\t\"ERR_MAIL_CONJURED_ITEM\",\n\t\"ERR_MAIL_DATABASE_ERROR\",\n\t\"ERR_MAIL_INVALID_ATTACHMENT\",\n\t\"ERR_MAIL_INVALID_ATTACHMENT_SLOT\",\n\t\"ERR_MAIL_LIMITED_DURATION_ITEM\",\n\t\"ERR_MAIL_QUEST_ITEM\",\n\t\"ERR_MAIL_REACHED_CAP\",\n\t\"ERR_MAIL_SENT\",\n\t\"ERR_MAIL_TARGET_NOT_FOUND\",\n\t\"ERR_MAIL_TOO_MANY_ATTACHMENTS\",\n\t\"ERR_MAIL_TO_SELF\",\n\t\"ERR_MAIL_WRAPPED_COD\",\n\t\"ERR_MAX_SOCKETS\",\n\t\"ERR_MEETING_STONE_GROUP_FULL\",\n\t\"ERR_MEETING_STONE_INVALID_LEVEL\",\n\t\"ERR_MEETING_STONE_INVALID_TARGET\",\n\t\"ERR_MEETING_STONE_IN_PROGRESS\",\n\t\"ERR_MEETING_STONE_IN_QUEUE_S\",\n\t\"ERR_MEETING_STONE_LEFT_QUEUE_S\",\n\t\"ERR_MEETING_STONE_MEMBER_ADDED_S\",\n\t\"ERR_MEETING_STONE_MEMBER_STILL_IN_QUEUE\",\n\t\"ERR_MEETING_STONE_MUST_BE_LEADER\",\n\t\"ERR_MEETING_STONE_NEED_PARTY\",\n\t\"ERR_MEETING_STONE_NOT_FOUND\",\n\t\"ERR_MEETING_STONE_NOT_LEADER\",\n\t\"ERR_MEETING_STONE_NO_RAID_GROUP\",\n\t\"ERR_MEETING_STONE_OTHER_MEMBER_LEFT\",\n\t\"ERR_MEETING_STONE_SUCCESS\",\n\t\"ERR_MEETING_STONE_TARGET_INVALID_LEVEL\",\n\t\"ERR_MEETING_STONE_TARGET_NOT_IN_PARTY\",\n\t\"ERR_MOUNT_ALREADYMOUNTED\",\n\t\"ERR_MOUNT_FORCEDDISMOUNT\",\n\t\"ERR_MOUNT_INVALIDMOUNTEE\",\n\t\"ERR_MOUNT_LOOTING\",\n\t\"ERR_MOUNT_NOTMOUNTABLE\",\n\t\"ERR_MOUNT_NOTYOURPET\",\n\t\"ERR_MOUNT_OTHER\",\n\t\"ERR_MOUNT_RACECANTMOUNT\",\n\t\"ERR_MOUNT_SHAPESHIFTED\",\n\t\"ERR_MOUNT_TOOFARAWAY\",\n\t\"ERR_MULTI_CAST_ACTION_TOTEM_S\",\n\t\"ERR_MUST_EQUIP_ITEM\",\n\t\"ERR_MUST_REPAIR_DURABILITY\",\n\t\"ERR_NAME_CONSECUTIVE_SPACES\",\n\t\"ERR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME\",\n\t\"ERR_NAME_INVALID\",\n\t\"ERR_NAME_INVALID_SPACE\",\n\t\"ERR_NAME_MIXED_LANGUAGES\",\n\t\"ERR_NAME_NO_NAME\",\n\t\"ERR_NAME_PROFANE\",\n\t\"ERR_NAME_RESERVED\",\n\t\"ERR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS\",\n\t\"ERR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END\",\n\t\"ERR_NAME_THREE_CONSECUTIVE\",\n\t\"ERR_NAME_TOO_LONG\",\n\t\"ERR_NAME_TOO_LONG2\",\n\t\"ERR_NAME_TOO_SHORT\",\n\t\"ERR_NEWTAXIPATH\",\n\t\"ERR_NEW_GUIDE_S\",\n\t\"ERR_NEW_GUIDE_YOU\",\n\t\"ERR_NEW_LEADER_S\",\n\t\"ERR_NEW_LEADER_YOU\",\n\t\"ERR_NEW_LOOT_MASTER_S\",\n\t\"ERR_NOAMMO_S\",\n\t\"ERR_NOEMOTEWHILERUNNING\",\n\t\"ERR_NOTYOURPET\",\n\t\"ERR_NOT_A_BAG\",\n\t\"ERR_NOT_BARBER_SITTING\",\n\t\"ERR_NOT_DURING_ARENA_MATCH\",\n\t\"ERR_NOT_ENOUGH_ARENA_POINTS\",\n\t\"ERR_NOT_ENOUGH_GOLD\",\n\t\"ERR_NOT_ENOUGH_HONOR_POINTS\",\n\t\"ERR_NOT_ENOUGH_MONEY\",\n\t\"ERR_NOT_EQUIPPABLE\",\n\t\"ERR_NOT_IN_BATTLEGROUND\",\n\t\"ERR_NOT_IN_COMBAT\",\n\t\"ERR_NOT_IN_GROUP\",\n\t\"ERR_NOT_IN_RAID\",\n\t\"ERR_NOT_LEADER\",\n\t\"ERR_NOT_OWNER\",\n\t\"ERR_NOT_SAME_ACCOUNT\",\n\t\"ERR_NOT_WHILE_DISARMED\",\n\t\"ERR_NOT_WHILE_FALLING\",\n\t\"ERR_NOT_WHILE_FATIGUED\",\n\t\"ERR_NOT_WHILE_MOUNTED\",\n\t\"ERR_NOT_WHILE_SHAPESHIFTED\",\n\t\"ERR_NO_ARENA_CHARTER\",\n\t\"ERR_NO_ATTACK_TARGET\",\n\t\"ERR_NO_BANK_HERE\",\n\t\"ERR_NO_BANK_SLOT\",\n\t\"ERR_NO_GUILD_CHARTER\",\n\t\"ERR_NO_ITEMS_WHILE_SHAPESHIFTED\",\n\t\"ERR_NO_PET\",\n\t\"ERR_NO_REPLY_TARGET\",\n\t\"ERR_NO_SLOT_AVAILABLE\",\n\t\"ERR_NULL_PETNAME\",\n\t\"ERR_OBJECT_IS_BUSY\",\n\t\"ERR_ONLY_ONE_AMMO\",\n\t\"ERR_ONLY_ONE_BOLT\",\n\t\"ERR_ONLY_ONE_QUIVER\",\n\t\"ERR_OUT_OF_ENERGY\",\n\t\"ERR_OUT_OF_FOCUS\",\n\t\"ERR_OUT_OF_HEALTH\",\n\t\"ERR_OUT_OF_MANA\",\n\t\"ERR_OUT_OF_POWER_DISPLAY\",\n\t\"ERR_OUT_OF_RAGE\",\n\t\"ERR_OUT_OF_RANGE\",\n\t\"ERR_OUT_OF_RUNES\",\n\t\"ERR_OUT_OF_RUNIC_POWER\",\n\t\"ERR_PARTY_LFG_BOOT_COOLDOWN_S\",\n\t\"ERR_PARTY_LFG_BOOT_DUNGEON_COMPLETE\",\n\t\"ERR_PARTY_LFG_BOOT_IN_COMBAT\",\n\t\"ERR_PARTY_LFG_BOOT_IN_PROGRESS\",\n\t\"ERR_PARTY_LFG_BOOT_LIMIT\",\n\t\"ERR_PARTY_LFG_BOOT_LOOT_ROLLS\",\n\t\"ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S\",\n\t\"ERR_PARTY_LFG_BOOT_TOO_FEW_PLAYERS\",\n\t\"ERR_PARTY_LFG_BOOT_VOTE_FAILED\",\n\t\"ERR_PARTY_LFG_BOOT_VOTE_SUCCEEDED\",\n\t\"ERR_PARTY_LFG_INVITE_RAID_LOCKED\",\n\t\"ERR_PARTY_LFG_TELEPORT_IN_COMBAT\",\n\t\"ERR_PARTY_TARGET_AMBIGUOUS\",\n\t\"ERR_PASSIVE_ABILITY\",\n\t\"ERR_PETITION_ALREADY_SIGNED\",\n\t\"ERR_PETITION_ALREADY_SIGNED_OTHER\",\n\t\"ERR_PETITION_CREATOR\",\n\t\"ERR_PETITION_DECLINED_S\",\n\t\"ERR_PETITION_FULL\",\n\t\"ERR_PETITION_IN_GUILD\",\n\t\"ERR_PETITION_NOT_ENOUGH_SIGNATURES\",\n\t\"ERR_PETITION_NOT_SAME_SERVER\",\n\t\"ERR_PETITION_OFFERED_S\",\n\t\"ERR_PETITION_RESTRICTED_ACCOUNT\",\n\t\"ERR_PETITION_SIGNED\",\n\t\"ERR_PETITION_SIGNED_S\",\n\t\"ERR_PET_BROKEN\",\n\t\"ERR_PET_LEARN_ABILITY_S\",\n\t\"ERR_PET_LEARN_SPELL_S\",\n\t\"ERR_PET_NOT_RENAMEABLE\",\n\t\"ERR_PET_SPELL_AFFECTING_COMBAT\",\n\t\"ERR_PET_SPELL_ALREADY_KNOWN_S\",\n\t\"ERR_PET_SPELL_DEAD\",\n\t\"ERR_PET_SPELL_NOT_BEHIND\",\n\t\"ERR_PET_SPELL_OUT_OF_RANGE\",\n\t\"ERR_PET_SPELL_ROOTED\",\n\t\"ERR_PET_SPELL_TARGETS_DEAD\",\n\t\"ERR_PET_SPELL_UNLEARNED_S\",\n\t\"ERR_PLAYERLIST_JOINED_BATTLE\",\n\t\"ERR_PLAYERLIST_LEFT_BATTLE\",\n\t\"ERR_PLAYERS_JOINED_BATTLE_D\",\n\t\"ERR_PLAYERS_LEFT_BATTLE_D\",\n\t\"ERR_PLAYER_BUSY_S\",\n\t\"ERR_PLAYER_DEAD\",\n\t\"ERR_PLAYER_DIED_S\",\n\t\"ERR_PLAYER_DIFFICULTY_CHANGED_S\",\n\t\"ERR_PLAYER_JOINED_BATTLE_D\",\n\t\"ERR_PLAYER_LEFT_BATTLE_D\",\n\t\"ERR_PLAYER_SILENCED\",\n\t\"ERR_PLAYER_SILENCED_ECHO\",\n\t\"ERR_PLAYER_UNSILENCED\",\n\t\"ERR_PLAYER_UNSILENCED_ECHO\",\n\t\"ERR_PLAYER_WRONG_FACTION\",\n\t\"ERR_PLAY_TIME_EXCEEDED\",\n\t\"ERR_POTION_COOLDOWN\",\n\t\"ERR_PROFANE_CHAT_NAME\",\n\t\"ERR_PROFICIENCY_GAINED_S\",\n\t\"ERR_PROFICIENCY_NEEDED\",\n\t\"ERR_PURCHASE_LEVEL_TOO_LOW\",\n\t\"ERR_PVP_TOGGLE_OFF\",\n\t\"ERR_PVP_TOGGLE_ON\",\n\t\"ERR_QUEST_ACCEPTED_S\",\n\t\"ERR_QUEST_ADD_FOUND_SII\",\n\t\"ERR_QUEST_ADD_ITEM_SII\",\n\t\"ERR_QUEST_ADD_KILL_SII\",\n\t\"ERR_QUEST_ADD_PLAYER_KILL_SII\",\n\t\"ERR_QUEST_ALREADY_DONE\",\n\t\"ERR_QUEST_ALREADY_DONE_DAILY\",\n\t\"ERR_QUEST_ALREADY_ON\",\n\t\"ERR_QUEST_COMPLETE_S\",\n\t\"ERR_QUEST_FAILED_BAG_FULL_S\",\n\t\"ERR_QUEST_FAILED_CAIS\",\n\t\"ERR_QUEST_FAILED_EXPANSION\",\n\t\"ERR_QUEST_FAILED_LOW_LEVEL\",\n\t\"ERR_QUEST_FAILED_MAX_COUNT_S\",\n\t\"ERR_QUEST_FAILED_MISSING_ITEMS\",\n\t\"ERR_QUEST_FAILED_NOT_ENOUGH_MONEY\",\n\t\"ERR_QUEST_FAILED_S\",\n\t\"ERR_QUEST_FAILED_TOO_MANY_DAILY_QUESTS_I\",\n\t\"ERR_QUEST_FAILED_WRONG_RACE\",\n\t\"ERR_QUEST_FORCE_REMOVED_S\",\n\t\"ERR_QUEST_LOG_FULL\",\n\t\"ERR_QUEST_MUST_CHOOSE\",\n\t\"ERR_QUEST_NEED_PREREQS\",\n\t\"ERR_QUEST_OBJECTIVE_COMPLETE_S\",\n\t\"ERR_QUEST_ONLY_ONE_TIMED\",\n\t\"ERR_QUEST_PUSH_ACCEPTED_S\",\n\t\"ERR_QUEST_PUSH_ALREADY_DONE_S\",\n\t\"ERR_QUEST_PUSH_BUSY_S\",\n\t\"ERR_QUEST_PUSH_DECLINED_S\",\n\t\"ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_S\",\n\t\"ERR_QUEST_PUSH_INVALID_S\",\n\t\"ERR_QUEST_PUSH_LOG_FULL_S\",\n\t\"ERR_QUEST_PUSH_NOT_DAILY_S\",\n\t\"ERR_QUEST_PUSH_NOT_IN_PARTY_S\",\n\t\"ERR_QUEST_PUSH_ONQUEST_S\",\n\t\"ERR_QUEST_PUSH_SUCCESS_S\",\n\t\"ERR_QUEST_PUSH_TIMER_EXPIRED_S\",\n\t\"ERR_QUEST_REWARD_EXP_I\",\n\t\"ERR_QUEST_REWARD_ITEM_MULT_IS\",\n\t\"ERR_QUEST_REWARD_ITEM_S\",\n\t\"ERR_QUEST_REWARD_MONEY_S\",\n\t\"ERR_QUEST_UNKNOWN_COMPLETE\",\n\t\"ERR_RAID_DIFFICULTY_CHANGED_S\",\n\t\"ERR_RAID_DIFFICULTY_FAILED\",\n\t\"ERR_RAID_DISALLOWED_BY_LEVEL\",\n\t\"ERR_RAID_GROUP_FULL\",\n\t\"ERR_RAID_GROUP_LOWLEVEL\",\n\t\"ERR_RAID_GROUP_ONLY\",\n\t\"ERR_RAID_GROUP_REQUIREMENTS_UNMATCH\",\n\t\"ERR_RAID_LEADER_READY_CHECK_START_S\",\n\t\"ERR_RAID_LOCKOUT_CHANGED_S\",\n\t\"ERR_RAID_MEMBER_ADDED_S\",\n\t\"ERR_RAID_MEMBER_REMOVED_S\",\n\t\"ERR_RAID_YOU_JOINED\",\n\t\"ERR_RAID_YOU_LEFT\",\n\t\"ERR_READY_CHECK_IN_PROGRESS\",\n\t\"ERR_READY_CHECK_THROTTLED\",\n\t\"ERR_RECEIVE_ITEM_S\",\n\t\"ERR_REFER_A_FRIEND_DIFFERENT_FACTION\",\n\t\"ERR_REFER_A_FRIEND_GRANT_LEVEL_MAX_I\",\n\t\"ERR_REFER_A_FRIEND_INSUFFICIENT_GRANTABLE_LEVELS\",\n\t\"ERR_REFER_A_FRIEND_INSUF_EXPAN_LVL\",\n\t\"ERR_REFER_A_FRIEND_NOT_NOW\",\n\t\"ERR_REFER_A_FRIEND_NOT_REFERRED_BY\",\n\t\"ERR_REFER_A_FRIEND_SUMMON_COOLDOWN\",\n\t\"ERR_REFER_A_FRIEND_SUMMON_LEVEL_MAX_I\",\n\t\"ERR_REFER_A_FRIEND_SUMMON_OFFLINE_S\",\n\t\"ERR_REFER_A_FRIEND_TARGET_TOO_HIGH\",\n\t\"ERR_REFER_A_FRIEND_TOO_FAR\",\n\t\"ERR_REMOVE_FROM_PVP_QUEUE_FACTION_CHANGE_NONE\",\n\t\"ERR_REMOVE_FROM_PVP_QUEUE_GRANT_LEVEL\",\n\t\"ERR_REMOVE_FROM_PVP_QUEUE_XP_GAIN\",\n\t\"ERR_RESTRICTED_ACCOUNT\",\n\t\"ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED\",\n\t\"ERR_SET_LOOT_FREEFORALL\",\n\t\"ERR_SET_LOOT_GROUP\",\n\t\"ERR_SET_LOOT_MASTER\",\n\t\"ERR_SET_LOOT_NBG\",\n\t\"ERR_SET_LOOT_ROUNDROBIN\",\n\t\"ERR_SET_LOOT_THRESHOLD_S\",\n\t\"ERR_SHAPESHIFT_FORM_CANNOT_EQUIP\",\n\t\"ERR_SKILL_GAINED_S\",\n\t\"ERR_SKILL_UP_SI\",\n\t\"ERR_SLOT_EMPTY\",\n\t\"ERR_SOCKETING_META_GEM_ONLY_IN_METASLOT\",\n\t\"ERR_SOCKETING_REQUIRES_META_GEM\",\n\t\"ERR_SPECIFY_MASTER_LOOTER\",\n\t\"ERR_SPELL_ALREADY_KNOWN_S\",\n\t\"ERR_SPELL_COOLDOWN\",\n\t\"ERR_SPELL_FAILED_ALREADY_AT_FULL_HEALTH\",\n\t\"ERR_SPELL_FAILED_ALREADY_AT_FULL_MANA\",\n\t\"ERR_SPELL_FAILED_ALREADY_AT_FULL_POWER_S\",\n\t\"ERR_SPELL_FAILED_EQUIPPED_ITEM\",\n\t\"ERR_SPELL_FAILED_EQUIPPED_ITEM_CLASS_S\",\n\t\"ERR_SPELL_FAILED_NOTUNSHEATHED\",\n\t\"ERR_SPELL_FAILED_REAGENTS\",\n\t\"ERR_SPELL_FAILED_REAGENTS_GENERIC\",\n\t\"ERR_SPELL_FAILED_S\",\n\t\"ERR_SPELL_FAILED_SHAPESHIFT_FORM_S\",\n\t\"ERR_SPELL_FAILED_TOTEMS\",\n\t\"ERR_SPELL_OUT_OF_RANGE\",\n\t\"ERR_SPELL_UNLEARNED_S\",\n\t\"ERR_SPLIT_FAILED\",\n\t\"ERR_SYSTEM_DISABLED\",\n\t\"ERR_TALENT_WIPE_ERROR\",\n\t\"ERR_TAME_FAILED\",\n\t\"ERR_TARGET_LOGGING_OUT\",\n\t\"ERR_TARGET_NOT_IN_GROUP_S\",\n\t\"ERR_TARGET_NOT_IN_INSTANCE_S\",\n\t\"ERR_TARGET_STUNNED\",\n\t\"ERR_TAXINOPATH\",\n\t\"ERR_TAXINOPATHS\",\n\t\"ERR_TAXINOSUCHPATH\",\n\t\"ERR_TAXINOTENOUGHMONEY\",\n\t\"ERR_TAXINOTSTANDING\",\n\t\"ERR_TAXINOTVISITED\",\n\t\"ERR_TAXINOVENDORNEARBY\",\n\t\"ERR_TAXIPLAYERALREADYMOUNTED\",\n\t\"ERR_TAXIPLAYERBUSY\",\n\t\"ERR_TAXIPLAYERMOVING\",\n\t\"ERR_TAXIPLAYERSHAPESHIFTED\",\n\t\"ERR_TAXISAMENODE\",\n\t\"ERR_TAXITOOFARAWAY\",\n\t\"ERR_TAXIUNSPECIFIEDSERVERERROR\",\n\t\"ERR_TICKET_ALREADY_EXISTS\",\n\t\"ERR_TICKET_CREATE_ERROR\",\n\t\"ERR_TICKET_DB_ERROR\",\n\t\"ERR_TICKET_NO_TEXT\",\n\t\"ERR_TICKET_TEXT_TOO_LONG\",\n\t\"ERR_TICKET_UPDATE_ERROR\",\n\t\"ERR_TOOBUSYTOFOLLOW\",\n\t\"ERR_TOO_FAR_TO_ATTACK\",\n\t\"ERR_TOO_FAR_TO_INTERACT\",\n\t\"ERR_TOO_FEW_TO_SPLIT\",\n\t\"ERR_TOO_MANY_CHAT_CHANNELS\",\n\t\"ERR_TOO_MANY_SOCKETS\",\n\t\"ERR_TOO_MANY_SPECIAL_BAGS\",\n\t\"ERR_TOO_MUCH_GOLD\",\n\t\"ERR_TRADE_BAG\",\n\t\"ERR_TRADE_BAG_FULL\",\n\t\"ERR_TRADE_BLOCKED_S\",\n\t\"ERR_TRADE_BOUND_ITEM\",\n\t\"ERR_TRADE_CANCELLED\",\n\t\"ERR_TRADE_COMPLETE\",\n\t\"ERR_TRADE_EQUIPPED_BAG\",\n\t\"ERR_TRADE_GROUND_ITEM\",\n\t\"ERR_TRADE_MAX_COUNT_EXCEEDED\",\n\t\"ERR_TRADE_NOT_ON_TAPLIST\",\n\t\"ERR_TRADE_QUEST_ITEM\",\n\t\"ERR_TRADE_REQUEST_S\",\n\t\"ERR_TRADE_SELF\",\n\t\"ERR_TRADE_TARGET_BAG_FULL\",\n\t\"ERR_TRADE_TARGET_DEAD\",\n\t\"ERR_TRADE_TARGET_MAX_COUNT_EXCEEDED\",\n\t\"ERR_TRADE_TARGET_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS\",\n\t\"ERR_TRADE_TEMP_ENCHANT_BOUND\",\n\t\"ERR_TRADE_TOO_FAR\",\n\t\"ERR_TRADE_WRONG_REALM\",\n\t\"ERR_UNHEALTHY_TIME\",\n\t\"ERR_UNINVITE_YOU\",\n\t\"ERR_UNIT_NOT_FOUND\",\n\t\"ERR_UNKNOWN_MACRO_OPTION_S\",\n\t\"ERR_USER_SQUELCHED\",\n\t\"ERR_USE_BAD_ANGLE\",\n\t\"ERR_USE_CANT_IMMUNE\",\n\t\"ERR_USE_CANT_OPEN\",\n\t\"ERR_USE_DESTROYED\",\n\t\"ERR_USE_LOCKED\",\n\t\"ERR_USE_LOCKED_WITH_ITEM_S\",\n\t\"ERR_USE_LOCKED_WITH_SPELL_KNOWN_SI\",\n\t\"ERR_USE_LOCKED_WITH_SPELL_S\",\n\t\"ERR_USE_OBJECT_MOVING\",\n\t\"ERR_USE_PREVENTED_BY_MECHANIC_S\",\n\t\"ERR_USE_SPELL_FOCUS\",\n\t\"ERR_USE_TOO_FAR\",\n\t\"ERR_VENDOR_DOESNT_BUY\",\n\t\"ERR_VENDOR_HATES_YOU\",\n\t\"ERR_VENDOR_MISSING_TURNINS\",\n\t\"ERR_VENDOR_NOT_INTERESTED\",\n\t\"ERR_VENDOR_SOLD_OUT\",\n\t\"ERR_VENDOR_TOO_FAR\",\n\t\"ERR_VOICESESSION_FULL\",\n\t\"ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL\",\n\t\"ERR_VOICE_CHAT_PARENTAL_DISABLE_MIC\",\n\t\"ERR_VOICE_IGNORE_ADDED_S\",\n\t\"ERR_VOICE_IGNORE_ALREADY_S\",\n\t\"ERR_VOICE_IGNORE_AMBIGUOUS\",\n\t\"ERR_VOICE_IGNORE_DELETED\",\n\t\"ERR_VOICE_IGNORE_FULL\",\n\t\"ERR_VOICE_IGNORE_NOT_FOUND\",\n\t\"ERR_VOICE_IGNORE_REMOVED_S\",\n\t\"ERR_VOICE_IGNORE_SELF\",\n\t\"ERR_WRONG_BAG_TYPE\",\n\t\"ERR_WRONG_BAG_TYPE_SUBCLASS\",\n\t\"ERR_WRONG_DIRECTION_FOR_ATTACK\",\n\t\"ERR_WRONG_SLOT\",\n\t\"ERR_YELL_RESTRICTED\",\n\t\"ERR_ZONE_EXPLORED\",\n\t\"ERR_ZONE_EXPLORED_XP\",\n\t\"ESES\",\n\t\"ESMX\",\n\t\"EVADE\",\n\t\"EVENTS_LABEL\",\n\t\"EXAMPLE_SPELL_FIREBALL\",\n\t\"EXAMPLE_SPELL_FROSTBOLT\",\n\t\"EXAMPLE_TARGET_MONSTER\",\n\t\"EXAMPLE_TEXT\",\n\t\"EXHAUSTION_LABEL\",\n\t\"EXHAUST_TOOLTIP1\",\n\t\"EXHAUST_TOOLTIP2\",\n\t\"EXHAUST_TOOLTIP3\",\n\t\"EXHAUST_TOOLTIP4\",\n\t\"EXIT\",\n\t\"EXIT_GAME\",\n\t\"EXOTICS\",\n\t\"EXPANSION_NAME0\",\n\t\"EXPANSION_NAME1\",\n\t\"EXPANSION_NAME2\",\n\t\"EXPERIENCE_COLON\",\n\t\"EXPERTISE_ABBR\",\n\t\"EXTENDED\",\n\t\"EXTEND_RAID_LOCK\",\n\t\"EXTRA_ATTACKS\",\n\t\"EYE_SEPARATION\",\n\t\"English\",\n\t\"FACIAL_HAIR_EARRINGS\",\n\t\"FACIAL_HAIR_FEATURES\",\n\t\"FACIAL_HAIR_HAIR\",\n\t\"FACIAL_HAIR_HORNS\",\n\t\"FACIAL_HAIR_MARKINGS\",\n\t\"FACIAL_HAIR_NORMAL\",\n\t\"FACIAL_HAIR_PIERCINGS\",\n\t\"FACIAL_HAIR_TUSKS\",\n\t\"FACING_WRONG_DIRECTION\",\n\t\"FACTION\",\n\t\"FACTION_ALLIANCE\",\n\t\"FACTION_CONTROLLED_TERRITORY\",\n\t\"FACTION_HORDE\",\n\t\"FACTION_INACTIVE\",\n\t\"FACTION_OTHER\",\n\t\"FACTION_STANDING_CHANGED\",\n\t\"FACTION_STANDING_DECREASED\",\n\t\"FACTION_STANDING_DECREASED_GENERIC\",\n\t\"FACTION_STANDING_INCREASED\",\n\t\"FACTION_STANDING_INCREASED_BONUS\",\n\t\"FACTION_STANDING_INCREASED_GENERIC\",\n\t\"FACTION_STANDING_LABEL1\",\n\t\"FACTION_STANDING_LABEL1_FEMALE\",\n\t\"FACTION_STANDING_LABEL2\",\n\t\"FACTION_STANDING_LABEL2_FEMALE\",\n\t\"FACTION_STANDING_LABEL3\",\n\t\"FACTION_STANDING_LABEL3_FEMALE\",\n\t\"FACTION_STANDING_LABEL4\",\n\t\"FACTION_STANDING_LABEL4_FEMALE\",\n\t\"FACTION_STANDING_LABEL5\",\n\t\"FACTION_STANDING_LABEL5_FEMALE\",\n\t\"FACTION_STANDING_LABEL6\",\n\t\"FACTION_STANDING_LABEL6_FEMALE\",\n\t\"FACTION_STANDING_LABEL7\",\n\t\"FACTION_STANDING_LABEL7_FEMALE\",\n\t\"FACTION_STANDING_LABEL8\",\n\t\"FACTION_STANDING_LABEL8_FEMALE\",\n\t\"FAILED\",\n\t\"FAILURES\",\n\t\"FAR\",\n\t\"FARCLIP\",\n\t\"FEATURES_LABEL\",\n\t\"FEATURES_SUBTEXT\",\n\t\"FEATURE_BECOMES_AVAILABLE_AT_LEVEL\",\n\t\"FEAT_OF_STRENGTH_DESCRIPTION\",\n\t\"FEEDPET_LOG_FIRSTPERSON\",\n\t\"FEEDPET_LOG_THIRDPERSON\",\n\t\"FEETSLOT\",\n\t\"FEMALE\",\n\t\"FERAL_DRUID_ITEM_AP\",\n\t\"FILTER\",\n\t\"FILTERS\",\n\t\"FILTER_BY_ENEMIES_COMBATLOG_TOOLTIP\",\n\t\"FILTER_BY_FRIENDS_COMBATLOG_TOOLTIP\",\n\t\"FILTER_BY_HOSTILE_PLAYERS_COMBATLOG_TOOLTIP\",\n\t\"FILTER_BY_ME_COMBATLOG_TOOLTIP\",\n\t\"FILTER_BY_NEUTRAL_COMBATLOG_TOOLTIP\",\n\t\"FILTER_BY_PET_COMBATLOG_TOOLTIP\",\n\t\"FILTER_BY_UNKNOWN_COMBATLOG_TOOLTIP\",\n\t\"FILTER_NAME\",\n\t\"FILTER_TO_FRIENDS_COMBATLOG_TOOLTIP\",\n\t\"FILTER_TO_HOSTILE_COMBATLOG_TOOLTIP\",\n\t\"FILTER_TO_HOSTILE_PLAYERS_COMBATLOG_TOOLTIP\",\n\t\"FILTER_TO_ME_COMBATLOG_TOOLTIP\",\n\t\"FILTER_TO_NEUTRAL_COMBATLOG_TOOLTIP\",\n\t\"FILTER_TO_PET_COMBATLOG_TOOLTIP\",\n\t\"FILTER_TO_UNKNOWN_COMBATLOG_TOOLTIP\",\n\t\"FIND_A_GROUP\",\n\t\"FIND_DUNGEON\",\n\t\"FINGER0SLOT\",\n\t\"FINGER0SLOT_UNIQUE\",\n\t\"FINGER1SLOT\",\n\t\"FINGER1SLOT_UNIQUE\",\n\t\"FIRST_AVAILABLE\",\n\t\"FIRST_AVAILABLE_TOOLTIP\",\n\t\"FIRST_NUMBER_CAP\",\n\t\"FIX_LAG\",\n\t\"FLAG_COUNT_TEMPLATE\",\n\t\"FLOOR\",\n\t\"FLOOR_NUMBER\",\n\t\"FOCUS\",\n\t\"FOCUSTARGET\",\n\t\"FOCUS_CAST_KEY_TEXT\",\n\t\"FOCUS_COST\",\n\t\"FOCUS_COST_PER_TIME\",\n\t\"FOCUS_TOKEN_NOT_FOUND\",\n\t\"FOLLOW\",\n\t\"FOLLOW_TERRAIN\",\n\t\"FONT_SIZE\",\n\t\"FONT_SIZE_TEMPLATE\",\n\t\"FOOD_TIMER\",\n\t\"FOREIGN_SERVER_LABEL\",\n\t\"FORMATED_HOURS\",\n\t\"FORMATTING\",\n\t\"FPS_ABBR\",\n\t\"FRAMERATE_LABEL\",\n\t\"FREE_FOR_ALL_TERRITORY\",\n\t\"FRFR\",\n\t\"FRIEND\",\n\t\"FRIENDLY\",\n\t\"FRIENDS\",\n\t\"FRIENDS_FRIENDS_CHOICE_EVERYONE\",\n\t\"FRIENDS_FRIENDS_CHOICE_MUTUAL\",\n\t\"FRIENDS_FRIENDS_CHOICE_POTENTIAL\",\n\t\"FRIENDS_FRIENDS_HEADER\",\n\t\"FRIENDS_FRIENDS_MUTUAL_TEXT\",\n\t\"FRIENDS_FRIENDS_REQUESTED_TEXT\",\n\t\"FRIENDS_FRIENDS_WAITING\",\n\t\"FRIENDS_LEVEL_TEMPLATE\",\n\t\"FRIENDS_LIST\",\n\t\"FRIENDS_LIST_AVAILABLE\",\n\t\"FRIENDS_LIST_AWAY\",\n\t\"FRIENDS_LIST_BUSY\",\n\t\"FRIENDS_LIST_ENTER_TEXT\",\n\t\"FRIENDS_LIST_NOTE_OFFLINE_TEMPLATE\",\n\t\"FRIENDS_LIST_NOTE_TEMPLATE\",\n\t\"FRIENDS_LIST_OFFLINE\",\n\t\"FRIENDS_LIST_OFFLINE_TEMPLATE\",\n\t\"FRIENDS_LIST_ONLINE\",\n\t\"FRIENDS_LIST_PLAYING\",\n\t\"FRIENDS_LIST_REALM\",\n\t\"FRIENDS_LIST_STATUS_TOOLTIP\",\n\t\"FRIENDS_LIST_TEMPLATE\",\n\t\"FRIENDS_LIST_WOW_TEMPLATE\",\n\t\"FRIENDS_LIST_ZONE\",\n\t\"FRIENDS_TOOLTIP_TOO_MANY_CHARACTERS\",\n\t\"FRIENDS_TOOLTIP_WOW_TOON_TEMPLATE\",\n\t\"FROM\",\n\t\"FUEL\",\n\t\"FULLDATE\",\n\t\"FULLDATE_AND_TIME\",\n\t\"FULLDATE_MONTH_APRIL\",\n\t\"FULLDATE_MONTH_AUGUST\",\n\t\"FULLDATE_MONTH_DECEMBER\",\n\t\"FULLDATE_MONTH_FEBRUARY\",\n\t\"FULLDATE_MONTH_JANUARY\",\n\t\"FULLDATE_MONTH_JULY\",\n\t\"FULLDATE_MONTH_JUNE\",\n\t\"FULLDATE_MONTH_MARCH\",\n\t\"FULLDATE_MONTH_MAY\",\n\t\"FULLDATE_MONTH_NOVEMBER\",\n\t\"FULLDATE_MONTH_OCTOBER\",\n\t\"FULLDATE_MONTH_SEPTEMBER\",\n\t\"FULL_SCREEN_GLOW\",\n\t\"FULL_SIZE_FOCUS_FRAME_TEXT\",\n\t\"FULL_TEXT_COMBATLOG_TOOLTIP\",\n\t\"GAIN_EXPERIENCE\",\n\t\"GAME\",\n\t\"GAMEFIELD_DESELECT_TEXT\",\n\t\"GAMEOPTIONS_MENU\",\n\t\"GAMES\",\n\t\"GAMETIME_TOOLTIP_CALENDAR_INVITES\",\n\t\"GAMETIME_TOOLTIP_TOGGLE_CALENDAR\",\n\t\"GAMETIME_TOOLTIP_TOGGLE_CLOCK\",\n\t\"GAME_SOUND_OUTPUT\",\n\t\"GAME_VERSION_LABEL\",\n\t\"GAMMA\",\n\t\"GEARSETS_POPUP_TEXT\",\n\t\"GEARSETS_TITLE\",\n\t\"GENERAL\",\n\t\"GENERAL_LABEL\",\n\t\"GENERAL_MACROS\",\n\t\"GENERAL_SPELLS\",\n\t\"GENERAL_SUBTEXT\",\n\t\"GIVE_LOOT\",\n\t\"GLANCING_TRAILER\",\n\t\"GLOBAL_CHANNELS\",\n\t\"GLYPHS\",\n\t\"GLYPH_EMPTY\",\n\t\"GLYPH_EMPTY_DESC\",\n\t\"GLYPH_FILLED\",\n\t\"GLYPH_INACTIVE\",\n\t\"GLYPH_LOCKED\",\n\t\"GLYPH_SLOT_REMOVE_TOOLTIP\",\n\t\"GLYPH_SLOT_TOOLTIP1\",\n\t\"GLYPH_SLOT_TOOLTIP2\",\n\t\"GLYPH_SLOT_TOOLTIP3\",\n\t\"GLYPH_SLOT_TOOLTIP4\",\n\t\"GLYPH_SLOT_TOOLTIP5\",\n\t\"GLYPH_SLOT_TOOLTIP6\",\n\t\"GMSURVEYRATING1\",\n\t\"GMSURVEYRATING2\",\n\t\"GMSURVEYRATING3\",\n\t\"GMSURVEYRATING4\",\n\t\"GMSURVEYRATING5\",\n\t\"GMSURVEY_BLOCK_TEXT\",\n\t\"GMSURVEY_EXCELLENT\",\n\t\"GMSURVEY_POOR\",\n\t\"GMSURVEY_REQUEST_TEXT\",\n\t\"GMSURVEY_SUBMITTED\",\n\t\"GMSURVEY_TITLE\",\n\t\"GM_CHAT\",\n\t\"GM_CHAT_LAST_SESSION\",\n\t\"GM_CHAT_OPEN\",\n\t\"GM_CHAT_STATUS_READY\",\n\t\"GM_CHAT_STATUS_READY_DESCRIPTION\",\n\t\"GM_EMAIL_NAME\",\n\t\"GM_RESPONSE_ALERT\",\n\t\"GM_RESPONSE_FRAME_HEADER\",\n\t\"GM_RESPONSE_ISSUE_HEADER\",\n\t\"GM_RESPONSE_MESSAGE_HEADER\",\n\t\"GM_RESPONSE_MORE_HELP\",\n\t\"GM_RESPONSE_POPUP_MUST_RESOLVE_RESPONSE\",\n\t\"GM_RESPONSE_POPUP_NEED_MORE_HELP_WARNING\",\n\t\"GM_RESPONSE_POPUP_RESOLVE_CONFIRM\",\n\t\"GM_RESPONSE_POPUP_VIEW_RESPONSE\",\n\t\"GM_RESPONSE_RESOLVE\",\n\t\"GM_SURVEY_NOT_APPLICABLE\",\n\t\"GM_TICKET_ESCALATED\",\n\t\"GM_TICKET_HIGH_VOLUME\",\n\t\"GM_TICKET_SERVICE_SOON\",\n\t\"GM_TICKET_UNAVAILABLE\",\n\t\"GM_TICKET_WAIT_TIME\",\n\t\"GOLD_AMOUNT\",\n\t\"GOLD_AMOUNT_SYMBOL\",\n\t\"GOLD_AMOUNT_TEXTURE\",\n\t\"GOLD_PER_DAY\",\n\t\"GOODBYE\",\n\t\"GOSSIP_OPTIONS\",\n\t\"GREED\",\n\t\"GREED_NEWBIE\",\n\t\"GROUND_DENSITY\",\n\t\"GROUND_RADIUS\",\n\t\"GROUP\",\n\t\"GROUPS\",\n\t\"GROUP_INVITE\",\n\t\"GUIDE\",\n\t\"GUIDE_TOOLTIP\",\n\t\"GUILD\",\n\t\"GUILDADDRANK_BUTTON_TOOLTIP\",\n\t\"GUILDBANK_AVAILABLE_MONEY\",\n\t\"GUILDBANK_BUYTAB_MONEY_FORMAT\",\n\t\"GUILDBANK_DEPOSIT\",\n\t\"GUILDBANK_DEPOSIT_FORMAT\",\n\t\"GUILDBANK_DEPOSIT_MONEY_FORMAT\",\n\t\"GUILDBANK_INFO_TITLE_FORMAT\",\n\t\"GUILDBANK_LOG_QUANTITY\",\n\t\"GUILDBANK_LOG_TITLE_FORMAT\",\n\t\"GUILDBANK_MOVE_FORMAT\",\n\t\"GUILDBANK_NAME_CONFIG\",\n\t\"GUILDBANK_POPUP_TEXT\",\n\t\"GUILDBANK_REMAINING_MONEY\",\n\t\"GUILDBANK_REPAIR\",\n\t\"GUILDBANK_REPAIR_MONEY_FORMAT\",\n\t\"GUILDBANK_TAB_COLON\",\n\t\"GUILDBANK_TAB_DEPOSIT_ONLY\",\n\t\"GUILDBANK_TAB_FULL_ACCESS\",\n\t\"GUILDBANK_TAB_LOCKED\",\n\t\"GUILDBANK_TAB_NUMBER\",\n\t\"GUILDBANK_TAB_WITHDRAW_ONLY\",\n\t\"GUILDBANK_WITHDRAW\",\n\t\"GUILDBANK_WITHDRAWFORTAB_MONEY_FORMAT\",\n\t\"GUILDBANK_WITHDRAW_FORMAT\",\n\t\"GUILDBANK_WITHDRAW_MONEY_FORMAT\",\n\t\"GUILDCONTROL\",\n\t\"GUILDCONTROL_ALLOWRANK\",\n\t\"GUILDCONTROL_DEPOSIT_ITEMS\",\n\t\"GUILDCONTROL_OPTION1\",\n\t\"GUILDCONTROL_OPTION10\",\n\t\"GUILDCONTROL_OPTION11\",\n\t\"GUILDCONTROL_OPTION12\",\n\t\"GUILDCONTROL_OPTION13\",\n\t\"GUILDCONTROL_OPTION14\",\n\t\"GUILDCONTROL_OPTION15\",\n\t\"GUILDCONTROL_OPTION15_TOOLTIP\",\n\t\"GUILDCONTROL_OPTION16\",\n\t\"GUILDCONTROL_OPTION16_TOOLTIP\",\n\t\"GUILDCONTROL_OPTION17\",\n\t\"GUILDCONTROL_OPTION2\",\n\t\"GUILDCONTROL_OPTION3\",\n\t\"GUILDCONTROL_OPTION4\",\n\t\"GUILDCONTROL_OPTION5\",\n\t\"GUILDCONTROL_OPTION6\",\n\t\"GUILDCONTROL_OPTION7\",\n\t\"GUILDCONTROL_OPTION8\",\n\t\"GUILDCONTROL_OPTION9\",\n\t\"GUILDCONTROL_RANKLABEL\",\n\t\"GUILDCONTROL_SELECTRANK\",\n\t\"GUILDCONTROL_UPDATE_TEXT\",\n\t\"GUILDCONTROL_VIEW_TAB\",\n\t\"GUILDCONTROL_WITHDRAW_GOLD\",\n\t\"GUILDCONTROL_WITHDRAW_ITEMS\",\n\t\"GUILDEVENT_TYPE_DEMOTE\",\n\t\"GUILDEVENT_TYPE_INVITE\",\n\t\"GUILDEVENT_TYPE_JOIN\",\n\t\"GUILDEVENT_TYPE_PROMOTE\",\n\t\"GUILDEVENT_TYPE_QUIT\",\n\t\"GUILDEVENT_TYPE_REMOVE\",\n\t\"GUILDMEMBER_ALERT\",\n\t\"GUILDMOTD_BUTTON_TOOLTIP\",\n\t\"GUILDNOTE_BUTTON_TOOLTIP\",\n\t\"GUILDOFFICERNOTE_BUTTON_TOOLTIP\",\n\t\"GUILDREMOVERANK_BUTTON_TOOLTIP\",\n\t\"GUILD_ACHIEVEMENT\",\n\t\"GUILD_BANK\",\n\t\"GUILD_BANK_LOG\",\n\t\"GUILD_BANK_LOG_TIME\",\n\t\"GUILD_BANK_MONEY_LOG\",\n\t\"GUILD_BANK_TAB_INFO\",\n\t\"GUILD_CHARTER\",\n\t\"GUILD_CHARTER_CREATOR\",\n\t\"GUILD_CHARTER_PURCHASE\",\n\t\"GUILD_CHARTER_REGISTER\",\n\t\"GUILD_CHARTER_TEMPLATE\",\n\t\"GUILD_CHARTER_TITLE\",\n\t\"GUILD_CHAT\",\n\t\"GUILD_CREST_DESIGN\",\n\t\"GUILD_EVENT_LOG\",\n\t\"GUILD_FRAME_TITLE\",\n\t\"GUILD_HELP_TEXT_LINE1\",\n\t\"GUILD_HELP_TEXT_LINE2\",\n\t\"GUILD_HELP_TEXT_LINE3\",\n\t\"GUILD_HELP_TEXT_LINE4\",\n\t\"GUILD_HELP_TEXT_LINE5\",\n\t\"GUILD_HELP_TEXT_LINE6\",\n\t\"GUILD_HELP_TEXT_LINE7\",\n\t\"GUILD_HELP_TEXT_LINE8\",\n\t\"GUILD_HELP_TEXT_LINE9\",\n\t\"GUILD_HELP_TEXT_LINE10\",\n\t\"GUILD_HELP_TEXT_LINE11\",\n\t\"GUILD_HELP_TEXT_LINE12\",\n\t\"GUILD_HELP_TEXT_LINE13\",\n\t\"GUILD_INFORMATION\",\n\t\"GUILD_INFO_EDITLABEL\",\n\t\"GUILD_INFO_TEMPLATE\",\n\t\"GUILD_INVITATION\",\n\t\"GUILD_LEAVE\",\n\t\"GUILD_MEMBER_OPTIONS\",\n\t\"GUILD_MEMBER_TEMPLATE\",\n\t\"GUILD_MESSAGE\",\n\t\"GUILD_MOTD\",\n\t\"GUILD_MOTD_EDITLABEL\",\n\t\"GUILD_MOTD_LABEL\",\n\t\"GUILD_MOTD_LABEL2\",\n\t\"GUILD_MOTD_TEMPLATE\",\n\t\"GUILD_NAME\",\n\t\"GUILD_NAME_TEMPLATE\",\n\t\"GUILD_NOTES_LABEL\",\n\t\"GUILD_NOTE_EDITLABEL\",\n\t\"GUILD_NOT_ALLIED_S\",\n\t\"GUILD_OFFICERNOTES_LABEL\",\n\t\"GUILD_OFFICERNOTE_EDITLABEL\",\n\t\"GUILD_OFFICER_NOTE\",\n\t\"GUILD_ONLINE_LABEL\",\n\t\"GUILD_PETITION_LEADER_INSTRUCTIONS\",\n\t\"GUILD_PETITION_MEMBER_INSTRUCTIONS\",\n\t\"GUILD_PROMOTE\",\n\t\"GUILD_RANK0_DESC\",\n\t\"GUILD_RANK1_DESC\",\n\t\"GUILD_RANK2_DESC\",\n\t\"GUILD_RANK3_DESC\",\n\t\"GUILD_RANK4_DESC\",\n\t\"GUILD_REGISTRAR_PURCHASE_TEXT\",\n\t\"GUILD_ROSTER_TEMPLATE\",\n\t\"GUILD_STATUS\",\n\t\"GUILD_TEMPLATE\",\n\t\"GUILD_TITLE_TEMPLATE\",\n\t\"GUILD_TOTAL\",\n\t\"GUILD_TOTALONLINE\",\n\t\"HAIR_HORNS_COLOR\",\n\t\"HAIR_HORNS_STYLE\",\n\t\"HAIR_NORMAL_COLOR\",\n\t\"HAIR_NORMAL_STYLE\",\n\t\"HANDSSLOT\",\n\t\"HAPPINESS\",\n\t\"HARASSMENT\",\n\t\"HARASSMENT_POLICY_TEXT\",\n\t\"HARASSMENT_TEXT\",\n\t\"HARDWARE\",\n\t\"HARDWARE_CURSOR\",\n\t\"HARMFUL_AURA_COMBATLOG_TOOLTIP\",\n\t\"HATRED\",\n\t\"HAVE_MAIL\",\n\t\"HAVE_MAIL_FROM\",\n\t\"HEADSLOT\",\n\t\"HEAD_BOB\",\n\t\"HEALER\",\n\t\"HEALING_DONE_TOOLTIP\",\n\t\"HEALS\",\n\t\"HEALTH\",\n\t\"HEALTH_COLON\",\n\t\"HEALTH_COST\",\n\t\"HEALTH_COST_PER_TIME\",\n\t\"HEALTH_LOW\",\n\t\"HELPFRAME_ACCOUNT_BULLET1\",\n\t\"HELPFRAME_ACCOUNT_BULLET2\",\n\t\"HELPFRAME_ACCOUNT_BULLET3\",\n\t\"HELPFRAME_ACCOUNT_BULLET4\",\n\t\"HELPFRAME_ACCOUNT_BULLET_TITLE1\",\n\t\"HELPFRAME_ACCOUNT_BUTTON_TEXT\",\n\t\"HELPFRAME_ACCOUNT_ENDTEXT\",\n\t\"HELPFRAME_ACCOUNT_TEXT\",\n\t\"HELPFRAME_ACCOUNT_TITLE\",\n\t\"HELPFRAME_BUG_BUTTON_DESCRIPTION\",\n\t\"HELPFRAME_BUG_BUTTON_TEXT\",\n\t\"HELPFRAME_CHARACTER_BULLET1\",\n\t\"HELPFRAME_CHARACTER_BULLET2\",\n\t\"HELPFRAME_CHARACTER_BULLET3\",\n\t\"HELPFRAME_CHARACTER_BULLET4\",\n\t\"HELPFRAME_CHARACTER_BULLET5\",\n\t\"HELPFRAME_CHARACTER_BULLET_TITLE1\",\n\t\"HELPFRAME_CHARACTER_BUTTON_TEXT\",\n\t\"HELPFRAME_CHARACTER_TEXT\",\n\t\"HELPFRAME_CHARACTER_TITLE\",\n\t\"HELPFRAME_ENVIRONMENTAL_BULLET1\",\n\t\"HELPFRAME_ENVIRONMENTAL_BULLET2\",\n\t\"HELPFRAME_ENVIRONMENTAL_BULLET3\",\n\t\"HELPFRAME_ENVIRONMENTAL_BULLET4\",\n\t\"HELPFRAME_ENVIRONMENTAL_BULLET5\",\n\t\"HELPFRAME_ENVIRONMENTAL_BULLET6\",\n\t\"HELPFRAME_ENVIRONMENTAL_BULLET_TITLE1\",\n\t\"HELPFRAME_ENVIRONMENTAL_BULLET_TITLE2\",\n\t\"HELPFRAME_ENVIRONMENTAL_BUTTON_TEXT\",\n\t\"HELPFRAME_ENVIRONMENTAL_TEXT\",\n\t\"HELPFRAME_ENVIRONMENTAL_TITLE\",\n\t\"HELPFRAME_GENERAL_BUTTON_DESCRIPTION\",\n\t\"HELPFRAME_GENERAL_BUTTON_TEXT\",\n\t\"HELPFRAME_GMTALK_ISSUE1\",\n\t\"HELPFRAME_GMTALK_ISSUE1_HEADER\",\n\t\"HELPFRAME_GMTALK_ISSUE2\",\n\t\"HELPFRAME_GMTALK_ISSUE2_HEADER\",\n\t\"HELPFRAME_GMTALK_ISSUE3\",\n\t\"HELPFRAME_GMTALK_ISSUE3_HEADER\",\n\t\"HELPFRAME_GMTALK_TEXT1\",\n\t\"HELPFRAME_GMTALK_TEXT2\",\n\t\"HELPFRAME_GMTALK_TITLE\",\n\t\"HELPFRAME_GM_BUTTON_DESCRIPTION\",\n\t\"HELPFRAME_GM_BUTTON_TEXT\",\n\t\"HELPFRAME_GUILD_BULLET1\",\n\t\"HELPFRAME_GUILD_BULLET2\",\n\t\"HELPFRAME_GUILD_BULLET3\",\n\t\"HELPFRAME_GUILD_BULLET_TITLE1\",\n\t\"HELPFRAME_GUILD_BUTTON_TEXT\",\n\t\"HELPFRAME_GUILD_TEXT\",\n\t\"HELPFRAME_GUILD_TITLE\",\n\t\"HELPFRAME_HARASSMENT_BUTTON_DESCRIPTION\",\n\t\"HELPFRAME_HARASSMENT_BUTTON_TEXT\",\n\t\"HELPFRAME_HOME_TEXT\",\n\t\"HELPFRAME_ITEM_BULLET1\",\n\t\"HELPFRAME_ITEM_BULLET2\",\n\t\"HELPFRAME_ITEM_BULLET3\",\n\t\"HELPFRAME_ITEM_BULLET4\",\n\t\"HELPFRAME_ITEM_BULLET5\",\n\t\"HELPFRAME_ITEM_BULLET6\",\n\t\"HELPFRAME_ITEM_BULLET7\",\n\t\"HELPFRAME_ITEM_BULLET_TITLE1\",\n\t\"HELPFRAME_ITEM_BULLET_TITLE2\",\n\t\"HELPFRAME_ITEM_BUTTON_TEXT\",\n\t\"HELPFRAME_ITEM_TEXT\",\n\t\"HELPFRAME_ITEM_TITLE\",\n\t\"HELPFRAME_LAG_TEXT1\",\n\t\"HELPFRAME_LAG_TITLE\",\n\t\"HELPFRAME_NONQUEST_BULLET1\",\n\t\"HELPFRAME_NONQUEST_BULLET2\",\n\t\"HELPFRAME_NONQUEST_BULLET3\",\n\t\"HELPFRAME_NONQUEST_BULLET4\",\n\t\"HELPFRAME_NONQUEST_BULLET5\",\n\t\"HELPFRAME_NONQUEST_BULLET6\",\n\t\"HELPFRAME_NONQUEST_BULLET7\",\n\t\"HELPFRAME_NONQUEST_BULLET_TITLE1\",\n\t\"HELPFRAME_NONQUEST_BULLET_TITLE2\",\n\t\"HELPFRAME_NONQUEST_BUTTON_TEXT\",\n\t\"HELPFRAME_NONQUEST_TEXT\",\n\t\"HELPFRAME_NONQUEST_TITLE\",\n\t\"HELPFRAME_OPENTICKET_EDITTEXT\",\n\t\"HELPFRAME_OPENTICKET_FOLLOWUPTEXT\",\n\t\"HELPFRAME_OPENTICKET_TEXT\",\n\t\"HELPFRAME_OTHER_BUTTON_DESCRIPTION\",\n\t\"HELPFRAME_OTHER_BUTTON_TEXT\",\n\t\"HELPFRAME_QUEST_BULLET1\",\n\t\"HELPFRAME_QUEST_BULLET2\",\n\t\"HELPFRAME_QUEST_BULLET3\",\n\t\"HELPFRAME_QUEST_BULLET4\",\n\t\"HELPFRAME_QUEST_BULLET5\",\n\t\"HELPFRAME_QUEST_BULLET_TITLE1\",\n\t\"HELPFRAME_QUEST_BULLET_TITLE2\",\n\t\"HELPFRAME_QUEST_BUTTON_TEXT\",\n\t\"HELPFRAME_QUEST_TEXT\",\n\t\"HELPFRAME_QUEST_TITLE\",\n\t\"HELPFRAME_REPORTISSUE_BULLET1\",\n\t\"HELPFRAME_REPORTISSUE_BULLET2\",\n\t\"HELPFRAME_REPORTISSUE_BULLET_TITLE1\",\n\t\"HELPFRAME_REPORTISSUE_TEXT1\",\n\t\"HELPFRAME_REPORTISSUE_TEXT2\",\n\t\"HELPFRAME_REPORTISSUE_TITLE\",\n\t\"HELPFRAME_REPORTLAG_TEXT1\",\n\t\"HELPFRAME_STUCK_BUTTON_DESCRIPTION\",\n\t\"HELPFRAME_STUCK_BUTTON_TEXT\",\n\t\"HELPFRAME_STUCK_TEXT1\",\n\t\"HELPFRAME_STUCK_TITLE\",\n\t\"HELPFRAME_SUGGESTION_BUTTON_DESCRIPTION\",\n\t\"HELPFRAME_SUGGESTION_BUTTON_TEXT\",\n\t\"HELPFRAME_TECHNICAL_BULLET1\",\n\t\"HELPFRAME_TECHNICAL_BULLET2\",\n\t\"HELPFRAME_TECHNICAL_BULLET3\",\n\t\"HELPFRAME_TECHNICAL_BULLET4\",\n\t\"HELPFRAME_TECHNICAL_BULLET5\",\n\t\"HELPFRAME_TECHNICAL_BULLET6\",\n\t\"HELPFRAME_TECHNICAL_BULLET7\",\n\t\"HELPFRAME_TECHNICAL_BULLET_TITLE1\",\n\t\"HELPFRAME_TECHNICAL_BULLET_TITLE2\",\n\t\"HELPFRAME_TECHNICAL_BUTTON_TEXT\",\n\t\"HELPFRAME_TECHNICAL_TEXT\",\n\t\"HELPFRAME_TECHNICAL_TITLE\",\n\t\"HELPFRAME_WELCOME_TEXT1\",\n\t\"HELPFRAME_WELCOME_TITLE\",\n\t\"HELP_BUTTON\",\n\t\"HELP_FRAME_TITLE\",\n\t\"HELP_LABEL\",\n\t\"HELP_SUBTEXT\",\n\t\"HELP_TEXT_LINE1\",\n\t\"HELP_TEXT_LINE2\",\n\t\"HELP_TEXT_LINE3\",\n\t\"HELP_TEXT_LINE4\",\n\t\"HELP_TEXT_LINE5\",\n\t\"HELP_TEXT_LINE6\",\n\t\"HELP_TEXT_LINE7\",\n\t\"HELP_TEXT_LINE8\",\n\t\"HELP_TEXT_LINE9\",\n\t\"HELP_TEXT_LINE10\",\n\t\"HELP_TEXT_LINE11\",\n\t\"HELP_TEXT_LINE12\",\n\t\"HELP_TEXT_LINE13\",\n\t\"HELP_TEXT_LINE14\",\n\t\"HELP_TEXT_LINE15\",\n\t\"HELP_TEXT_SIMPLE\",\n\t\"HELP_TICKET_ABANDON\",\n\t\"HELP_TICKET_ABANDON_CONFIRM\",\n\t\"HELP_TICKET_EDIT\",\n\t\"HELP_TICKET_EDIT_ABANDON\",\n\t\"HELP_TICKET_OPEN\",\n\t\"HELP_TICKET_QUEUE_DISABLED\",\n\t\"HEROIC_PREFIX\",\n\t\"HERTZ\",\n\t\"HIDE\",\n\t\"HIDE_OUTDOOR_WORLD_STATE_TEXT\",\n\t\"HIDE_PARTY_INTERFACE_TEXT\",\n\t\"HIDE_PULLOUT_BG\",\n\t\"HIGH\",\n\t\"HIGHLIGHTING\",\n\t\"HIGHLIGHT_ABILITY_COMBATLOG_TOOLTIP\",\n\t\"HIGHLIGHT_DAMAGE_COMBATLOG_TOOLTIP\",\n\t\"HIGHLIGHT_KILL_COMBATLOG_TOOLTIP\",\n\t\"HIGHLIGHT_SCHOOL_COMBATLOG_TOOLTIP\",\n\t\"HIGH_BIDDER\",\n\t\"HIT\",\n\t\"HK\",\n\t\"HOME\",\n\t\"HOME_INN\",\n\t\"HONOR\",\n\t\"HONORABLE_KILLS\",\n\t\"HONORABLE_KILLS_TOOLTIP\",\n\t\"HONOR_CONTRIBUTION_POINTS\",\n\t\"HONOR_ESTIMATED_TOOLTIP\",\n\t\"HONOR_GAINED\",\n\t\"HONOR_GAINED_TOOLTIP\",\n\t\"HONOR_HIGHEST_RANK\",\n\t\"HONOR_LASTWEEK\",\n\t\"HONOR_LIFETIME\",\n\t\"HONOR_POINTS\",\n\t\"HONOR_STANDING\",\n\t\"HONOR_THIS_SESSION\",\n\t\"HONOR_TODAY\",\n\t\"HONOR_YESTERDAY\",\n\t\"HOSTILE\",\n\t\"HOURS\",\n\t\"HOURS_ABBR\",\n\t\"HOUR_ONELETTER_ABBR\",\n\t\"HP\",\n\t\"HP_TEMPLATE\",\n\t\"HUNTER_AGILITY_TOOLTIP\",\n\t\"HUNTER_INTELLECT_TOOLTIP\",\n\t\"ICON_TAG_RAID_TARGET_CIRCLE1\",\n\t\"ICON_TAG_RAID_TARGET_CIRCLE2\",\n\t\"ICON_TAG_RAID_TARGET_CROSS1\",\n\t\"ICON_TAG_RAID_TARGET_CROSS2\",\n\t\"ICON_TAG_RAID_TARGET_DIAMOND1\",\n\t\"ICON_TAG_RAID_TARGET_DIAMOND2\",\n\t\"ICON_TAG_RAID_TARGET_MOON1\",\n\t\"ICON_TAG_RAID_TARGET_MOON2\",\n\t\"ICON_TAG_RAID_TARGET_SKULL1\",\n\t\"ICON_TAG_RAID_TARGET_SKULL2\",\n\t\"ICON_TAG_RAID_TARGET_SQUARE1\",\n\t\"ICON_TAG_RAID_TARGET_SQUARE2\",\n\t\"ICON_TAG_RAID_TARGET_STAR1\",\n\t\"ICON_TAG_RAID_TARGET_STAR2\",\n\t\"ICON_TAG_RAID_TARGET_TRIANGLE1\",\n\t\"ICON_TAG_RAID_TARGET_TRIANGLE2\",\n\t\"ID\",\n\t\"IDLE_MESSAGE\",\n\t\"IGNORE\",\n\t\"IGNORED\",\n\t\"IGNORE_DIALOG\",\n\t\"IGNORE_ERRORS\",\n\t\"IGNORE_LIST\",\n\t\"IGNORE_PLAYER\",\n\t\"IGR_BILLING_NAG_DIALOG\",\n\t\"IMMUNE\",\n\t\"IMPORTANT_PEOPLE_IN_GROUP\",\n\t\"IM_STYLE\",\n\t\"INBOX\",\n\t\"INBOX_TOO_MUCH_MAIL\",\n\t\"INBOX_TOO_MUCH_MAIL_TOOLTIP\",\n\t\"INCOMPLETE\",\n\t\"INCREASE_POTENTIAL\",\n\t\"INDIVIDUALS\",\n\t\"INPUT_CHINESE\",\n\t\"INPUT_JAPANESE\",\n\t\"INPUT_KOREAN\",\n\t\"INPUT_ROMAN\",\n\t\"INSCRIPTION\",\n\t\"INSPECT\",\n\t\"INSPECT_NOTIFY\",\n\t\"INSTANCE\",\n\t\"INSTANCE_BOOT_TIMER\",\n\t\"INSTANCE_DIFFICULTY_FORMAT\",\n\t\"INSTANCE_ID\",\n\t\"INSTANCE_LEAVE\",\n\t\"INSTANCE_LOCK_SEPARATOR\",\n\t\"INSTANCE_LOCK_TIMER\",\n\t\"INSTANCE_LOCK_TIMER_PREVIOUSLY_SAVED\",\n\t\"INSTANCE_RESET_FAILED\",\n\t\"INSTANCE_RESET_FAILED_OFFLINE\",\n\t\"INSTANCE_RESET_FAILED_ZONING\",\n\t\"INSTANCE_RESET_SUCCESS\",\n\t\"INSTANCE_SAVED\",\n\t\"INSTANCE_SHUTDOWN_MESSAGE\",\n\t\"INSTANCE_UNAVAILABLE_OTHER_EXPANSION_TOO_LOW\",\n\t\"INSTANCE_UNAVAILABLE_OTHER_GEAR_TOO_HIGH\",\n\t\"INSTANCE_UNAVAILABLE_OTHER_GEAR_TOO_LOW\",\n\t\"INSTANCE_UNAVAILABLE_OTHER_LEVEL_TOO_HIGH\",\n\t\"INSTANCE_UNAVAILABLE_OTHER_LEVEL_TOO_LOW\",\n\t\"INSTANCE_UNAVAILABLE_OTHER_MISSING_ITEM\",\n\t\"INSTANCE_UNAVAILABLE_OTHER_OTHER\",\n\t\"INSTANCE_UNAVAILABLE_OTHER_QUEST_NOT_COMPLETED\",\n\t\"INSTANCE_UNAVAILABLE_OTHER_RAID_LOCKED\",\n\t\"INSTANCE_UNAVAILABLE_SELF_EXPANSION_TOO_LOW\",\n\t\"INSTANCE_UNAVAILABLE_SELF_GEAR_TOO_HIGH\",\n\t\"INSTANCE_UNAVAILABLE_SELF_GEAR_TOO_LOW\",\n\t\"INSTANCE_UNAVAILABLE_SELF_LEVEL_TOO_HIGH\",\n\t\"INSTANCE_UNAVAILABLE_SELF_LEVEL_TOO_LOW\",\n\t\"INSTANCE_UNAVAILABLE_SELF_MISSING_ITEM\",\n\t\"INSTANCE_UNAVAILABLE_SELF_OTHER\",\n\t\"INSTANCE_UNAVAILABLE_SELF_QUEST_NOT_COMPLETED\",\n\t\"INSTANCE_UNAVAILABLE_SELF_RAID_LOCKED\",\n\t\"INT\",\n\t\"INTELLECT_COLON\",\n\t\"INTELLECT_TOOLTIP\",\n\t\"INTERFACE_ACTION_BLOCKED\",\n\t\"INTERFACE_OPTIONS\",\n\t\"INTERNAL_STRING_ERROR\",\n\t\"INTERRUPT\",\n\t\"INTERRUPTED\",\n\t\"INTERRUPTS\",\n\t\"INT_GENERAL_DURATION_DAYS\",\n\t\"INT_GENERAL_DURATION_HOURS\",\n\t\"INT_GENERAL_DURATION_MIN\",\n\t\"INT_GENERAL_DURATION_SEC\",\n\t\"INT_SPELL_DURATION_DAYS\",\n\t\"INT_SPELL_DURATION_HOURS\",\n\t\"INT_SPELL_DURATION_MIN\",\n\t\"INT_SPELL_DURATION_SEC\",\n\t\"INT_SPELL_POINTS_SPREAD_TEMPLATE\",\n\t\"INVENTORY_FULL\",\n\t\"INVENTORY_TOOLTIP\",\n\t\"INVERT_MOUSE\",\n\t\"INVITATION\",\n\t\"INVITE\",\n\t\"INVITE_CONVERSATION_INSTRUCTIONS\",\n\t\"INVITE_FRIEND_TO_CONVERSATION\",\n\t\"INVITE_TO_CONVERSATION\",\n\t\"INVTYPE_2HWEAPON\",\n\t\"INVTYPE_AMMO\",\n\t\"INVTYPE_BAG\",\n\t\"INVTYPE_BODY\",\n\t\"INVTYPE_CHEST\",\n\t\"INVTYPE_CLOAK\",\n\t\"INVTYPE_FEET\",\n\t\"INVTYPE_FINGER\",\n\t\"INVTYPE_HAND\",\n\t\"INVTYPE_HEAD\",\n\t\"INVTYPE_HOLDABLE\",\n\t\"INVTYPE_LEGS\",\n\t\"INVTYPE_NECK\",\n\t\"INVTYPE_QUIVER\",\n\t\"INVTYPE_RANGED\",\n\t\"INVTYPE_RANGEDRIGHT\",\n\t\"INVTYPE_RELIC\",\n\t\"INVTYPE_ROBE\",\n\t\"INVTYPE_SHIELD\",\n\t\"INVTYPE_SHOULDER\",\n\t\"INVTYPE_TABARD\",\n\t\"INVTYPE_THROWN\",\n\t\"INVTYPE_TRINKET\",\n\t\"INVTYPE_WAIST\",\n\t\"INVTYPE_WEAPON\",\n\t\"INVTYPE_WEAPONMAINHAND\",\n\t\"INVTYPE_WEAPONMAINHAND_PET\",\n\t\"INVTYPE_WEAPONOFFHAND\",\n\t\"INVTYPE_WRIST\",\n\t\"ITEMPRESENTINOFFHAND\",\n\t\"ITEMS\",\n\t\"ITEMSLOTTEXT\",\n\t\"ITEMS_EQUIPPED\",\n\t\"ITEMS_IN_INVENTORY\",\n\t\"ITEMS_NOT_IN_INVENTORY\",\n\t\"ITEMS_VARIABLE_QUANTITY\",\n\t\"ITEM_ACCOUNTBOUND\",\n\t\"ITEM_BIND_ON_EQUIP\",\n\t\"ITEM_BIND_ON_PICKUP\",\n\t\"ITEM_BIND_ON_USE\",\n\t\"ITEM_BIND_QUEST\",\n\t\"ITEM_BIND_TO_ACCOUNT\",\n\t\"ITEM_CANT_BE_DESTROYED\",\n\t\"ITEM_CLASSES_ALLOWED\",\n\t\"ITEM_CONJURED\",\n\t\"ITEM_COOLDOWN_TIME\",\n\t\"ITEM_COOLDOWN_TIME_DAYS\",\n\t\"ITEM_COOLDOWN_TIME_HOURS\",\n\t\"ITEM_COOLDOWN_TIME_MIN\",\n\t\"ITEM_COOLDOWN_TIME_SEC\",\n\t\"ITEM_COOLDOWN_TOTAL\",\n\t\"ITEM_COOLDOWN_TOTAL_DAYS\",\n\t\"ITEM_COOLDOWN_TOTAL_HOURS\",\n\t\"ITEM_COOLDOWN_TOTAL_MIN\",\n\t\"ITEM_COOLDOWN_TOTAL_SEC\",\n\t\"ITEM_CREATED_BY\",\n\t\"ITEM_DELTA_DESCRIPTION\",\n\t\"ITEM_DISENCHANT_ANY_SKILL\",\n\t\"ITEM_DISENCHANT_MIN_SKILL\",\n\t\"ITEM_DISENCHANT_NOT_DISENCHANTABLE\",\n\t\"ITEM_DURATION_DAYS\",\n\t\"ITEM_DURATION_HOURS\",\n\t\"ITEM_DURATION_MIN\",\n\t\"ITEM_DURATION_SEC\",\n\t\"ITEM_ENCHANT_DISCLAIMER\",\n\t\"ITEM_ENCHANT_TIME_LEFT_DAYS\",\n\t\"ITEM_ENCHANT_TIME_LEFT_HOURS\",\n\t\"ITEM_ENCHANT_TIME_LEFT_MIN\",\n\t\"ITEM_ENCHANT_TIME_LEFT_SEC\",\n\t\"ITEM_HEROIC\",\n\t\"ITEM_HEROIC_EPIC\",\n\t\"ITEM_LEVEL\",\n\t\"ITEM_LEVEL_AND_MIN\",\n\t\"ITEM_LEVEL_RANGE\",\n\t\"ITEM_LEVEL_RANGE_CURRENT\",\n\t\"ITEM_LIMIT_CATEGORY\",\n\t\"ITEM_LIMIT_CATEGORY_MULTIPLE\",\n\t\"ITEM_LOOT\",\n\t\"ITEM_MILLABLE\",\n\t\"ITEM_MIN_LEVEL\",\n\t\"ITEM_MIN_SKILL\",\n\t\"ITEM_MISSING\",\n\t\"ITEM_MOD_AGILITY\",\n\t\"ITEM_MOD_AGILITY_SHORT\",\n\t\"ITEM_MOD_ARMOR_PENETRATION_RATING\",\n\t\"ITEM_MOD_ARMOR_PENETRATION_RATING_SHORT\",\n\t\"ITEM_MOD_ATTACK_POWER\",\n\t\"ITEM_MOD_ATTACK_POWER_SHORT\",\n\t\"ITEM_MOD_BLOCK_RATING\",\n\t\"ITEM_MOD_BLOCK_RATING_SHORT\",\n\t\"ITEM_MOD_BLOCK_VALUE\",\n\t\"ITEM_MOD_BLOCK_VALUE_SHORT\",\n\t\"ITEM_MOD_CRIT_MELEE_RATING\",\n\t\"ITEM_MOD_CRIT_MELEE_RATING_SHORT\",\n\t\"ITEM_MOD_CRIT_RANGED_RATING\",\n\t\"ITEM_MOD_CRIT_RANGED_RATING_SHORT\",\n\t\"ITEM_MOD_CRIT_RATING\",\n\t\"ITEM_MOD_CRIT_RATING_SHORT\",\n\t\"ITEM_MOD_CRIT_SPELL_RATING\",\n\t\"ITEM_MOD_CRIT_SPELL_RATING_SHORT\",\n\t\"ITEM_MOD_CRIT_TAKEN_MELEE_RATING\",\n\t\"ITEM_MOD_CRIT_TAKEN_MELEE_RATING_SHORT\",\n\t\"ITEM_MOD_CRIT_TAKEN_RANGED_RATING\",\n\t\"ITEM_MOD_CRIT_TAKEN_RANGED_RATING_SHORT\",\n\t\"ITEM_MOD_CRIT_TAKEN_RATING\",\n\t\"ITEM_MOD_CRIT_TAKEN_RATING_SHORT\",\n\t\"ITEM_MOD_CRIT_TAKEN_SPELL_RATING\",\n\t\"ITEM_MOD_CRIT_TAKEN_SPELL_RATING_SHORT\",\n\t\"ITEM_MOD_DAMAGE_PER_SECOND_SHORT\",\n\t\"ITEM_MOD_DEFENSE_SKILL_RATING\",\n\t\"ITEM_MOD_DEFENSE_SKILL_RATING_SHORT\",\n\t\"ITEM_MOD_DODGE_RATING\",\n\t\"ITEM_MOD_DODGE_RATING_SHORT\",\n\t\"ITEM_MOD_EXPERTISE_RATING\",\n\t\"ITEM_MOD_EXPERTISE_RATING_SHORT\",\n\t\"ITEM_MOD_FERAL_ATTACK_POWER\",\n\t\"ITEM_MOD_FERAL_ATTACK_POWER_SHORT\",\n\t\"ITEM_MOD_HASTE_MELEE_RATING\",\n\t\"ITEM_MOD_HASTE_MELEE_RATING_SHORT\",\n\t\"ITEM_MOD_HASTE_RANGED_RATING\",\n\t\"ITEM_MOD_HASTE_RANGED_RATING_SHORT\",\n\t\"ITEM_MOD_HASTE_RATING\",\n\t\"ITEM_MOD_HASTE_RATING_SHORT\",\n\t\"ITEM_MOD_HASTE_SPELL_RATING\",\n\t\"ITEM_MOD_HASTE_SPELL_RATING_SHORT\",\n\t\"ITEM_MOD_HEALTH\",\n\t\"ITEM_MOD_HEALTH_REGEN\",\n\t\"ITEM_MOD_HEALTH_REGENERATION\",\n\t\"ITEM_MOD_HEALTH_REGENERATION_SHORT\",\n\t\"ITEM_MOD_HEALTH_REGEN_SHORT\",\n\t\"ITEM_MOD_HEALTH_SHORT\",\n\t\"ITEM_MOD_HIT_MELEE_RATING\",\n\t\"ITEM_MOD_HIT_MELEE_RATING_SHORT\",\n\t\"ITEM_MOD_HIT_RANGED_RATING\",\n\t\"ITEM_MOD_HIT_RANGED_RATING_SHORT\",\n\t\"ITEM_MOD_HIT_RATING\",\n\t\"ITEM_MOD_HIT_RATING_SHORT\",\n\t\"ITEM_MOD_HIT_SPELL_RATING\",\n\t\"ITEM_MOD_HIT_SPELL_RATING_SHORT\",\n\t\"ITEM_MOD_HIT_TAKEN_MELEE_RATING\",\n\t\"ITEM_MOD_HIT_TAKEN_MELEE_RATING_SHORT\",\n\t\"ITEM_MOD_HIT_TAKEN_RANGED_RATING\",\n\t\"ITEM_MOD_HIT_TAKEN_RANGED_RATING_SHORT\",\n\t\"ITEM_MOD_HIT_TAKEN_RATING\",\n\t\"ITEM_MOD_HIT_TAKEN_RATING_SHORT\",\n\t\"ITEM_MOD_HIT_TAKEN_SPELL_RATING\",\n\t\"ITEM_MOD_HIT_TAKEN_SPELL_RATING_SHORT\",\n\t\"ITEM_MOD_INTELLECT\",\n\t\"ITEM_MOD_INTELLECT_SHORT\",\n\t\"ITEM_MOD_MANA\",\n\t\"ITEM_MOD_MANA_REGENERATION\",\n\t\"ITEM_MOD_MANA_REGENERATION_SHORT\",\n\t\"ITEM_MOD_MANA_SHORT\",\n\t\"ITEM_MOD_MELEE_ATTACK_POWER_SHORT\",\n\t\"ITEM_MOD_PARRY_RATING\",\n\t\"ITEM_MOD_PARRY_RATING_SHORT\",\n\t\"ITEM_MOD_POWER_REGEN0_SHORT\",\n\t\"ITEM_MOD_POWER_REGEN1_SHORT\",\n\t\"ITEM_MOD_POWER_REGEN2_SHORT\",\n\t\"ITEM_MOD_POWER_REGEN3_SHORT\",\n\t\"ITEM_MOD_POWER_REGEN4_SHORT\",\n\t\"ITEM_MOD_POWER_REGEN5_SHORT\",\n\t\"ITEM_MOD_POWER_REGEN6_SHORT\",\n\t\"ITEM_MOD_RANGED_ATTACK_POWER\",\n\t\"ITEM_MOD_RANGED_ATTACK_POWER_SHORT\",\n\t\"ITEM_MOD_RESILIENCE_RATING\",\n\t\"ITEM_MOD_RESILIENCE_RATING_SHORT\",\n\t\"ITEM_MOD_SPELL_DAMAGE_DONE\",\n\t\"ITEM_MOD_SPELL_DAMAGE_DONE_SHORT\",\n\t\"ITEM_MOD_SPELL_HEALING_DONE\",\n\t\"ITEM_MOD_SPELL_HEALING_DONE_SHORT\",\n\t\"ITEM_MOD_SPELL_PENETRATION\",\n\t\"ITEM_MOD_SPELL_PENETRATION_SHORT\",\n\t\"ITEM_MOD_SPELL_POWER\",\n\t\"ITEM_MOD_SPELL_POWER_SHORT\",\n\t\"ITEM_MOD_SPIRIT\",\n\t\"ITEM_MOD_SPIRIT_SHORT\",\n\t\"ITEM_MOD_STAMINA\",\n\t\"ITEM_MOD_STAMINA_SHORT\",\n\t\"ITEM_MOD_STRENGTH\",\n\t\"ITEM_MOD_STRENGTH_SHORT\",\n\t\"ITEM_MOUSE_OVER\",\n\t\"ITEM_NAMES\",\n\t\"ITEM_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP\",\n\t\"ITEM_NO_DROP\",\n\t\"ITEM_OPENABLE\",\n\t\"ITEM_PROPOSED_ENCHANT\",\n\t\"ITEM_PROSPECTABLE\",\n\t\"ITEM_PURCHASED_COLON\",\n\t\"ITEM_QUALITY0_DESC\",\n\t\"ITEM_QUALITY1_DESC\",\n\t\"ITEM_QUALITY2_DESC\",\n\t\"ITEM_QUALITY3_DESC\",\n\t\"ITEM_QUALITY4_DESC\",\n\t\"ITEM_QUALITY5_DESC\",\n\t\"ITEM_QUALITY6_DESC\",\n\t\"ITEM_QUALITY7_DESC\",\n\t\"ITEM_QUANTITY_TEMPLATE\",\n\t\"ITEM_RACES_ALLOWED\",\n\t\"ITEM_RANDOM_ENCHANT\",\n\t\"ITEM_READABLE\",\n\t\"ITEM_REFUND_MSG\",\n\t\"ITEM_REQ_ARENA_RATING\",\n\t\"ITEM_REQ_ARENA_RATING_3V3\",\n\t\"ITEM_REQ_ARENA_RATING_5V5\",\n\t\"ITEM_REQ_PURCHASE_GROUP\",\n\t\"ITEM_REQ_REPUTATION\",\n\t\"ITEM_REQ_SKILL\",\n\t\"ITEM_RESIST_ALL\",\n\t\"ITEM_RESIST_SINGLE\",\n\t\"ITEM_SET_BONUS\",\n\t\"ITEM_SET_BONUS_GRAY\",\n\t\"ITEM_SET_NAME\",\n\t\"ITEM_SIGNABLE\",\n\t\"ITEM_SLOTS_IGNORED\",\n\t\"ITEM_SOCKETABLE\",\n\t\"ITEM_SOCKETING\",\n\t\"ITEM_SOCKET_BONUS\",\n\t\"ITEM_SOLD_COLON\",\n\t\"ITEM_SOULBOUND\",\n\t\"ITEM_SPELL_CHARGES\",\n\t\"ITEM_SPELL_CHARGES_NONE\",\n\t\"ITEM_SPELL_EFFECT\",\n\t\"ITEM_SPELL_KNOWN\",\n\t\"ITEM_SPELL_TRIGGER_ONEQUIP\",\n\t\"ITEM_SPELL_TRIGGER_ONPROC\",\n\t\"ITEM_SPELL_TRIGGER_ONUSE\",\n\t\"ITEM_STARTS_QUEST\",\n\t\"ITEM_SUFFIX_TEMPLATE\",\n\t\"ITEM_TEXT_FROM\",\n\t\"ITEM_UNIQUE\",\n\t\"ITEM_UNIQUE_EQUIPPABLE\",\n\t\"ITEM_UNIQUE_MULTIPLE\",\n\t\"ITEM_UNSELLABLE\",\n\t\"ITEM_WRAPPED_BY\",\n\t\"ITEM_WRITTEN_BY\",\n\t\"ITEM_WRONG_CLASS\",\n\t\"ITEM_WRONG_RACE\",\n\t\"ITUNES_SHOW_ALL_TRACK_CHANGES\",\n\t\"ITUNES_SHOW_ALL_TRACK_CHANGES_TOOLTIP\",\n\t\"ITUNES_SHOW_FEEDBACK\",\n\t\"ITUNES_SHOW_FEEDBACK_TOOLTIP\",\n\t\"JOIN\",\n\t\"JOINED_PARTY\",\n\t\"JOIN_AS_GROUP\",\n\t\"JOIN_AS_GROUP_TOOLTIP\",\n\t\"JOIN_AS_PARTY\",\n\t\"JOIN_NEW_CHANNEL\",\n\t\"KBASE_ARTICLE_COUNT\",\n\t\"KBASE_ARTICLE_ID\",\n\t\"KBASE_CHARSTUCK\",\n\t\"KBASE_DEFAULT_SEARCH_TEXT\",\n\t\"KBASE_ERROR_LOAD_FAILURE\",\n\t\"KBASE_ERROR_NO_RESULTS\",\n\t\"KBASE_GMTALK\",\n\t\"KBASE_HOT_ISSUE\",\n\t\"KBASE_LAG\",\n\t\"KBASE_RECENTLY_UPDATED\",\n\t\"KBASE_REPORTISSUE\",\n\t\"KBASE_SEARCH_RESULTS\",\n\t\"KBASE_TOP_ISSUES\",\n\t\"KEY1\",\n\t\"KEY2\",\n\t\"KEYBINDINGFRAME_MOUSEWHEEL_ERROR\",\n\t\"KEYRING\",\n\t\"KEY_APOSTROPHE\",\n\t\"KEY_BACKSLASH\",\n\t\"KEY_BACKSPACE\",\n\t\"KEY_BACKSPACE_MAC\",\n\t\"KEY_BINDING\",\n\t\"KEY_BINDINGS\",\n\t\"KEY_BINDINGS_MAC\",\n\t\"KEY_BOUND\",\n\t\"KEY_BUTTON1\",\n\t\"KEY_BUTTON10\",\n\t\"KEY_BUTTON11\",\n\t\"KEY_BUTTON12\",\n\t\"KEY_BUTTON13\",\n\t\"KEY_BUTTON14\",\n\t\"KEY_BUTTON15\",\n\t\"KEY_BUTTON16\",\n\t\"KEY_BUTTON17\",\n\t\"KEY_BUTTON18\",\n\t\"KEY_BUTTON19\",\n\t\"KEY_BUTTON2\",\n\t\"KEY_BUTTON20\",\n\t\"KEY_BUTTON21\",\n\t\"KEY_BUTTON22\",\n\t\"KEY_BUTTON23\",\n\t\"KEY_BUTTON24\",\n\t\"KEY_BUTTON25\",\n\t\"KEY_BUTTON26\",\n\t\"KEY_BUTTON27\",\n\t\"KEY_BUTTON28\",\n\t\"KEY_BUTTON29\",\n\t\"KEY_BUTTON3\",\n\t\"KEY_BUTTON30\",\n\t\"KEY_BUTTON31\",\n\t\"KEY_BUTTON4\",\n\t\"KEY_BUTTON5\",\n\t\"KEY_BUTTON6\",\n\t\"KEY_BUTTON7\",\n\t\"KEY_BUTTON8\",\n\t\"KEY_BUTTON9\",\n\t\"KEY_COMMA\",\n\t\"KEY_DELETE\",\n\t\"KEY_DELETE_MAC\",\n\t\"KEY_DOWN\",\n\t\"KEY_END\",\n\t\"KEY_ENTER\",\n\t\"KEY_ENTER_MAC\",\n\t\"KEY_ESCAPE\",\n\t\"KEY_HOME\",\n\t\"KEY_INSERT\",\n\t\"KEY_INSERT_MAC\",\n\t\"KEY_LEFT\",\n\t\"KEY_LEFTBRACKET\",\n\t\"KEY_MINUS\",\n\t\"KEY_MOUSEWHEELDOWN\",\n\t\"KEY_MOUSEWHEELUP\",\n\t\"KEY_NUMLOCK\",\n\t\"KEY_NUMLOCK_MAC\",\n\t\"KEY_NUMPAD0\",\n\t\"KEY_NUMPAD1\",\n\t\"KEY_NUMPAD2\",\n\t\"KEY_NUMPAD3\",\n\t\"KEY_NUMPAD4\",\n\t\"KEY_NUMPAD5\",\n\t\"KEY_NUMPAD6\",\n\t\"KEY_NUMPAD7\",\n\t\"KEY_NUMPAD8\",\n\t\"KEY_NUMPAD9\",\n\t\"KEY_NUMPADDECIMAL\",\n\t\"KEY_NUMPADDIVIDE\",\n\t\"KEY_NUMPADMINUS\",\n\t\"KEY_NUMPADMULTIPLY\",\n\t\"KEY_NUMPADPLUS\",\n\t\"KEY_PAGEDOWN\",\n\t\"KEY_PAGEUP\",\n\t\"KEY_PAUSE\",\n\t\"KEY_PAUSE_MAC\",\n\t\"KEY_PERIOD\",\n\t\"KEY_PLUS\",\n\t\"KEY_PRINTSCREEN\",\n\t\"KEY_PRINTSCREEN_MAC\",\n\t\"KEY_RIGHT\",\n\t\"KEY_RIGHTBRACKET\",\n\t\"KEY_SCROLLLOCK\",\n\t\"KEY_SCROLLLOCK_MAC\",\n\t\"KEY_SEMICOLON\",\n\t\"KEY_SLASH\",\n\t\"KEY_SPACE\",\n\t\"KEY_TAB\",\n\t\"KEY_TILDE\",\n\t\"KEY_UNBOUND_ERROR\",\n\t\"KEY_UP\",\n\t\"KILLING_BLOWS\",\n\t\"KILLING_BLOW_TOOLTIP\",\n\t\"KILLS\",\n\t\"KILLS_COMBATLOG_TOOLTIP\",\n\t\"KILLS_PVP\",\n\t\"KNOWLEDGEBASE_FRAME_TITLE\",\n\t\"KNOWLEDGE_BASE\",\n\t\"KNOWN_TALENTS_HEADER\",\n\t\"KOKR\",\n\t\"LABEL_NOTE\",\n\t\"LALT_KEY_TEXT\",\n\t\"LANGUAGE\",\n\t\"LANGUAGES_LABEL\",\n\t\"LANGUAGES_SUBTEXT\",\n\t\"LASTONLINE\",\n\t\"LASTONLINE_DAYS\",\n\t\"LASTONLINE_HOURS\",\n\t\"LASTONLINE_MINS\",\n\t\"LASTONLINE_MINUTES\",\n\t\"LASTONLINE_MONTHS\",\n\t\"LASTONLINE_SECS\",\n\t\"LASTONLINE_YEARS\",\n\t\"LAST_ONLINE_COLON\",\n\t\"LATEST_UNLOCKED_ACHIEVEMENTS\",\n\t\"LATEST_UPDATED_STATS\",\n\t\"LAUGH_WORD1\",\n\t\"LAUGH_WORD2\",\n\t\"LAUGH_WORD3\",\n\t\"LAUGH_WORD4\",\n\t\"LAUGH_WORD5\",\n\t\"LAUGH_WORD6\",\n\t\"LAUGH_WORD7\",\n\t\"LAUGH_WORD8\",\n\t\"LAUGH_WORD9\",\n\t\"LCTRL_KEY_TEXT\",\n\t\"LEADER\",\n\t\"LEADER_TOOLTIP\",\n\t\"LEARN\",\n\t\"LEARN_SKILL_TEMPLATE\",\n\t\"LEAVE_ALL\",\n\t\"LEAVE_ARENA\",\n\t\"LEAVE_BATTLEGROUND\",\n\t\"LEAVE_CONVERSATION\",\n\t\"LEAVE_QUEUE\",\n\t\"LEAVE_VEHICLE\",\n\t\"LEAVE_ZONE\",\n\t\"LEAVING_COMBAT\",\n\t\"LEFT_PARTY\",\n\t\"LEGSSLOT\",\n\t\"LESS_THAN_ONE_MINUTE\",\n\t\"LEVEL\",\n\t\"LEVEL_ABBR\",\n\t\"LEVEL_GAINED\",\n\t\"LEVEL_GRANT\",\n\t\"LEVEL_RANGE\",\n\t\"LEVEL_REQUIRED\",\n\t\"LEVEL_TOO_LOW\",\n\t\"LEVEL_UP\",\n\t\"LEVEL_UP_CHAR_POINTS\",\n\t\"LEVEL_UP_HEALTH\",\n\t\"LEVEL_UP_HEALTH_MANA\",\n\t\"LEVEL_UP_SKILL_POINTS\",\n\t\"LEVEL_UP_STAT\",\n\t\"LFD_HOLIDAY_REWARD_EXPLANATION1\",\n\t\"LFD_HOLIDAY_REWARD_EXPLANATION2\",\n\t\"LFD_LEVEL_FORMAT_RANGE\",\n\t\"LFD_LEVEL_FORMAT_SINGLE\",\n\t\"LFD_RANDOM_EXPLANATION\",\n\t\"LFD_RANDOM_REWARD_EXPLANATION1\",\n\t\"LFD_RANDOM_REWARD_EXPLANATION2\",\n\t\"LFD_RANDOM_REWARD_PUG_EXPLANATION\",\n\t\"LFD_REWARDS\",\n\t\"LFGWIZARD_TITLE\",\n\t\"LFG_DESERTER_OTHER\",\n\t\"LFG_DESERTER_YOU\",\n\t\"LFG_DISABLED_LFM_TOOLTIP\",\n\t\"LFG_DISABLED_PARTY_TOOLTIP\",\n\t\"LFG_LABEL\",\n\t\"LFG_OFFER_CONTINUE\",\n\t\"LFG_RANDOM_COOLDOWN_OTHER\",\n\t\"LFG_RANDOM_COOLDOWN_YOU\",\n\t\"LFG_ROLES_TITLE\",\n\t\"LFG_ROLE_CHECK_ROLE_CHOSEN\",\n\t\"LFG_STATISTIC_AVERAGE_WAIT\",\n\t\"LFG_STATISTIC_AVERAGE_WAIT_UNKNOWN\",\n\t\"LFG_STATISTIC_MATCHES_MADE\",\n\t\"LFG_STATISTIC_PARTIES_IN_QUEUE\",\n\t\"LFG_STATISTIC_PLAYERS_IN_QUEUE\",\n\t\"LFG_TITLE\",\n\t\"LFG_TOOLTIP_ROLES\",\n\t\"LFG_TYPE_ANY_DUNGEON\",\n\t\"LFG_TYPE_ANY_HEROIC_DUNGEON\",\n\t\"LFG_TYPE_BATTLEGROUND\",\n\t\"LFG_TYPE_DAILY_DUNGEON\",\n\t\"LFG_TYPE_DAILY_HEROIC_DUNGEON\",\n\t\"LFG_TYPE_DUNGEON\",\n\t\"LFG_TYPE_HEROIC_DUNGEON\",\n\t\"LFG_TYPE_NONE\",\n\t\"LFG_TYPE_QUEST\",\n\t\"LFG_TYPE_RAID\",\n\t\"LFG_TYPE_RANDOM_DUNGEON\",\n\t\"LFG_TYPE_ZONE\",\n\t\"LFM_DISABLED_LFG_TOOLTIP\",\n\t\"LFM_NAME_TEMPLATE\",\n\t\"LFM_NUM_RAID_MEMBER_TEMPLATE\",\n\t\"LFM_TITLE\",\n\t\"LINK_TRADESKILL_TOOLTIP\",\n\t\"LIST_ME\",\n\t\"LIST_MY_GROUP\",\n\t\"LOCALE_INFORMATION\",\n\t\"LOCATION_COLON\",\n\t\"LOCK\",\n\t\"LOCKED\",\n\t\"LOCKED_WITH_ITEM\",\n\t\"LOCKED_WITH_SPELL\",\n\t\"LOCKED_WITH_SPELL_KNOWN\",\n\t\"LOCK_ACTIONBAR_TEXT\",\n\t\"LOCK_BATTLEFIELDMINIMAP\",\n\t\"LOCK_CHANNELPULLOUT_LABEL\",\n\t\"LOCK_EXPIRE\",\n\t\"LOCK_FOCUS_FRAME\",\n\t\"LOCK_WINDOW\",\n\t\"LOGOUT\",\n\t\"LOG_PERIODIC_EFFECTS\",\n\t\"LOOKING\",\n\t\"LOOKING_FOR\",\n\t\"LOOKING_FOR_DUNGEON\",\n\t\"LOOKING_FOR_GROUP_LABEL\",\n\t\"LOOKING_FOR_GROUP_LABEL2\",\n\t\"LOOKING_FOR_GROUP_TEXT\",\n\t\"LOOKING_FOR_MORE\",\n\t\"LOOKING_FOR_MORE_TEXT\",\n\t\"LOOKING_FOR_RAID\",\n\t\"LOOK_FOR_GROUP\",\n\t\"LOOK_FOR_MORE\",\n\t\"LOOT\",\n\t\"LOOTER\",\n\t\"LOOT_FREE_FOR_ALL\",\n\t\"LOOT_GONE\",\n\t\"LOOT_GROUP_LOOT\",\n\t\"LOOT_ITEM\",\n\t\"LOOT_ITEM_CREATED_SELF\",\n\t\"LOOT_ITEM_CREATED_SELF_MULTIPLE\",\n\t\"LOOT_ITEM_MULTIPLE\",\n\t\"LOOT_ITEM_PUSHED_SELF\",\n\t\"LOOT_ITEM_PUSHED_SELF_MULTIPLE\",\n\t\"LOOT_ITEM_SELF\",\n\t\"LOOT_ITEM_SELF_MULTIPLE\",\n\t\"LOOT_KEY_TEXT\",\n\t\"LOOT_MASTER_LOOTER\",\n\t\"LOOT_METHOD\",\n\t\"LOOT_MONEY\",\n\t\"LOOT_MONEY_SPLIT\",\n\t\"LOOT_NEED_BEFORE_GREED\",\n\t\"LOOT_NEXT_PAGE\",\n\t\"LOOT_NO_DROP\",\n\t\"LOOT_NO_DROP_DISENCHANT\",\n\t\"LOOT_PROMOTE\",\n\t\"LOOT_ROLL_ALL_PASSED\",\n\t\"LOOT_ROLL_DISENCHANT\",\n\t\"LOOT_ROLL_DISENCHANT_SELF\",\n\t\"LOOT_ROLL_GREED\",\n\t\"LOOT_ROLL_GREED_SELF\",\n\t\"LOOT_ROLL_INELIGIBLE_REASON1\",\n\t\"LOOT_ROLL_INELIGIBLE_REASON2\",\n\t\"LOOT_ROLL_INELIGIBLE_REASON3\",\n\t\"LOOT_ROLL_INELIGIBLE_REASON4\",\n\t\"LOOT_ROLL_INELIGIBLE_REASON5\",\n\t\"LOOT_ROLL_NEED\",\n\t\"LOOT_ROLL_NEED_SELF\",\n\t\"LOOT_ROLL_PASSED\",\n\t\"LOOT_ROLL_PASSED_AUTO\",\n\t\"LOOT_ROLL_PASSED_AUTO_FEMALE\",\n\t\"LOOT_ROLL_PASSED_SELF\",\n\t\"LOOT_ROLL_PASSED_SELF_AUTO\",\n\t\"LOOT_ROLL_ROLLED_DE\",\n\t\"LOOT_ROLL_ROLLED_GREED\",\n\t\"LOOT_ROLL_ROLLED_NEED\",\n\t\"LOOT_ROLL_WON\",\n\t\"LOOT_ROLL_WON_NO_SPAM_DE\",\n\t\"LOOT_ROLL_WON_NO_SPAM_GREED\",\n\t\"LOOT_ROLL_WON_NO_SPAM_NEED\",\n\t\"LOOT_ROLL_YOU_WON\",\n\t\"LOOT_ROLL_YOU_WON_NO_SPAM_DE\",\n\t\"LOOT_ROLL_YOU_WON_NO_SPAM_GREED\",\n\t\"LOOT_ROLL_YOU_WON_NO_SPAM_NEED\",\n\t\"LOOT_ROUND_ROBIN\",\n\t\"LOOT_THRESHOLD\",\n\t\"LOOT_UNDER_MOUSE_TEXT\",\n\t\"LOSS\",\n\t\"LOW\",\n\t\"LSHIFT_KEY_TEXT\",\n\t\"LUA_ERROR\",\n\t\"MACRO\",\n\t\"MACROFRAME_CHAR_LIMIT\",\n\t\"MACROS\",\n\t\"MACRO_ACTION_FORBIDDEN\",\n\t\"MACRO_HELP_TEXT_LINE1\",\n\t\"MACRO_HELP_TEXT_LINE2\",\n\t\"MACRO_HELP_TEXT_LINE3\",\n\t\"MACRO_HELP_TEXT_LINE4\",\n\t\"MACRO_HELP_TEXT_LINE5\",\n\t\"MACRO_POPUP_CHOOSE_ICON\",\n\t\"MACRO_POPUP_TEXT\",\n\t\"MAC_OPTIONS\",\n\t\"MAGE_INTELLECT_TOOLTIP\",\n\t\"MAGIC_RESISTANCES_COLON\",\n\t\"MAIL_COD_ERROR\",\n\t\"MAIL_COD_ERROR_COLORBLIND\",\n\t\"MAIL_LABEL\",\n\t\"MAIL_LETTER_TOOLTIP\",\n\t\"MAIL_LOOT_KEY_TEXT\",\n\t\"MAIL_MULTIPLE_ITEMS\",\n\t\"MAIL_REPLY_PREFIX\",\n\t\"MAIL_RETURN\",\n\t\"MAIL_SUBJECT_LABEL\",\n\t\"MAIL_TO_LABEL\",\n\t\"MAINASSIST\",\n\t\"MAINHANDSLOT\",\n\t\"MAINMENUBAR_FPS_LABEL\",\n\t\"MAINMENUBAR_LATENCY_LABEL\",\n\t\"MAINMENU_BUTTON\",\n\t\"MAINTANK\",\n\t\"MAIN_ASSIST\",\n\t\"MAIN_MENU\",\n\t\"MAIN_TANK\",\n\t\"MAJOR_GLYPH\",\n\t\"MAKE_INTERACTABLE\",\n\t\"MAKE_MODERATOR\",\n\t\"MAKE_UNINTERACTABLE\",\n\t\"MALE\",\n\t\"MANA\",\n\t\"MANAGE_ACCOUNT\",\n\t\"MANAGE_ACCOUNT_URL\",\n\t\"MANA_COLON\",\n\t\"MANA_COST\",\n\t\"MANA_COST_PER_TIME\",\n\t\"MANA_LOW\",\n\t\"MANA_REGEN\",\n\t\"MANA_REGEN_ABBR\",\n\t\"MANA_REGEN_FROM_SPIRIT\",\n\t\"MANA_REGEN_TOOLTIP\",\n\t\"MAP_QUEST_DIFFICULTY_TEXT\",\n\t\"MARKED_AFK\",\n\t\"MARKED_AFK_MESSAGE\",\n\t\"MARKED_DND\",\n\t\"MASTERY_POINTS_SPENT\",\n\t\"MASTER_LOOTER\",\n\t\"MASTER_VOLUME\",\n\t\"MATCHMAKING_MATCH_S\",\n\t\"MATCHMAKING_PENDING\",\n\t\"MAXIMUM\",\n\t\"MAX_FOLLOW_DIST\",\n\t\"MAX_HP_TEMPLATE\",\n\t\"MEETINGSTONE_LEVEL\",\n\t\"MEETINGSTONE_TOOLTIP\",\n\t\"MELEE\",\n\t\"MELEE_ATTACK\",\n\t\"MELEE_ATTACK_POWER\",\n\t\"MELEE_ATTACK_POWER_TOOLTIP\",\n\t\"MELEE_COMBATLOG_TOOLTIP\",\n\t\"MELEE_CRIT_CHANCE\",\n\t\"MELEE_RANGE\",\n\t\"MEMBERS\",\n\t\"MERCHANT\",\n\t\"MERCHANT_ARENA_POINTS\",\n\t\"MERCHANT_BUYBACK\",\n\t\"MERCHANT_HONOR_POINTS\",\n\t\"MERCHANT_PAGE_NUMBER\",\n\t\"MERCHANT_STOCK\",\n\t\"MESSAGE_SOURCES\",\n\t\"MESSAGE_TYPES\",\n\t\"META_GEM\",\n\t\"MILLISECONDS_ABBR\",\n\t\"MINIMAP_LABEL\",\n\t\"MINIMAP_TRACKING_AUCTIONEER\",\n\t\"MINIMAP_TRACKING_BANKER\",\n\t\"MINIMAP_TRACKING_BATTLEMASTER\",\n\t\"MINIMAP_TRACKING_FLIGHTMASTER\",\n\t\"MINIMAP_TRACKING_INNKEEPER\",\n\t\"MINIMAP_TRACKING_MAILBOX\",\n\t\"MINIMAP_TRACKING_REPAIR\",\n\t\"MINIMAP_TRACKING_STABLEMASTER\",\n\t\"MINIMAP_TRACKING_TOOLTIP_NONE\",\n\t\"MINIMAP_TRACKING_TRAINER_CLASS\",\n\t\"MINIMAP_TRACKING_TRAINER_PROFESSION\",\n\t\"MINIMAP_TRACKING_TRIVIAL_QUESTS\",\n\t\"MINIMAP_TRACKING_VENDOR_AMMO\",\n\t\"MINIMAP_TRACKING_VENDOR_FOOD\",\n\t\"MINIMAP_TRACKING_VENDOR_POISON\",\n\t\"MINIMAP_TRACKING_VENDOR_REAGENT\",\n\t\"MINIMIZE\",\n\t\"MINIMUM\",\n\t\"MINOR_GLYPH\",\n\t\"MINS_ABBR\",\n\t\"MINUTES\",\n\t\"MINUTES_ABBR\",\n\t\"MINUTE_ONELETTER_ABBR\",\n\t\"MISCELLANEOUS\",\n\t\"MISS\",\n\t\"MISSES\",\n\t\"MODE\",\n\t\"MODIFIERS_COLON\",\n\t\"MONEY\",\n\t\"MONEY_COLON\",\n\t\"MONEY_LOOT\",\n\t\"MONSTER_BOSS_EMOTE\",\n\t\"MONSTER_BOSS_WHISPER\",\n\t\"MONTH_APRIL\",\n\t\"MONTH_AUGUST\",\n\t\"MONTH_DECEMBER\",\n\t\"MONTH_FEBRUARY\",\n\t\"MONTH_JANUARY\",\n\t\"MONTH_JULY\",\n\t\"MONTH_JUNE\",\n\t\"MONTH_MARCH\",\n\t\"MONTH_MAY\",\n\t\"MONTH_NOVEMBER\",\n\t\"MONTH_OCTOBER\",\n\t\"MONTH_SEPTEMBER\",\n\t\"MORE_REAGENTS\",\n\t\"MOTD_COLON\",\n\t\"MOUNT\",\n\t\"MOUNTS\",\n\t\"MOUSE_LABEL\",\n\t\"MOUSE_LOOK_SPEED\",\n\t\"MOUSE_SENSITIVITY\",\n\t\"MOUSE_SUBTEXT\",\n\t\"MOVE_FILTER_DOWN\",\n\t\"MOVE_FILTER_UP\",\n\t\"MOVE_TO_CONVERSATION_WINDOW\",\n\t\"MOVE_TO_INACTIVE\",\n\t\"MOVE_TO_NEW_WINDOW\",\n\t\"MOVE_TO_WHISPER_WINDOW\",\n\t\"MOVIE_RECORDING_AIC\",\n\t\"MOVIE_RECORDING_AIC_TOOLTIP\",\n\t\"MOVIE_RECORDING_CANCEL_CONFIRMATION\",\n\t\"MOVIE_RECORDING_CODEC_TOOLTIP\",\n\t\"MOVIE_RECORDING_COMPRESSBUTTON\",\n\t\"MOVIE_RECORDING_COMPRESSDIALOG\",\n\t\"MOVIE_RECORDING_COMPRESSING\",\n\t\"MOVIE_RECORDING_COMPRESSING_CANCEL_NEWBIE_TOOLTIP\",\n\t\"MOVIE_RECORDING_COMPRESSING_CANCEL_TOOLTIP\",\n\t\"MOVIE_RECORDING_COMPRESSION\",\n\t\"MOVIE_RECORDING_COMPRESSION_STARTED\",\n\t\"MOVIE_RECORDING_COMPRESS_TOOLTIP\",\n\t\"MOVIE_RECORDING_DATA_RATE\",\n\t\"MOVIE_RECORDING_DATA_RATE_TOOLTIP\",\n\t\"MOVIE_RECORDING_DV\",\n\t\"MOVIE_RECORDING_DV_TOOLTIP\",\n\t\"MOVIE_RECORDING_ENABLE_COMPRESSION\",\n\t\"MOVIE_RECORDING_ENABLE_COMPRESSION_TOOLTIP\",\n\t\"MOVIE_RECORDING_ENABLE_CURSOR\",\n\t\"MOVIE_RECORDING_ENABLE_CURSOR_TOOLTIP\",\n\t\"MOVIE_RECORDING_ENABLE_GUI\",\n\t\"MOVIE_RECORDING_ENABLE_GUI_TOOLTIP\",\n\t\"MOVIE_RECORDING_ENABLE_ICON\",\n\t\"MOVIE_RECORDING_ENABLE_ICON_TOOLTIP\",\n\t\"MOVIE_RECORDING_ENABLE_RECOVER\",\n\t\"MOVIE_RECORDING_ENABLE_RECOVER_TOOLTIP\",\n\t\"MOVIE_RECORDING_ENABLE_SOUND\",\n\t\"MOVIE_RECORDING_ENABLE_SOUND_TOOLTIP\",\n\t\"MOVIE_RECORDING_FPS_FOURTH\",\n\t\"MOVIE_RECORDING_FPS_HALF\",\n\t\"MOVIE_RECORDING_FPS_THIRD\",\n\t\"MOVIE_RECORDING_FRAMERATE\",\n\t\"MOVIE_RECORDING_FRAMERATE_TOOLTIP\",\n\t\"MOVIE_RECORDING_FULL_RESOLUTION\",\n\t\"MOVIE_RECORDING_GUI_OFF\",\n\t\"MOVIE_RECORDING_GUI_ON\",\n\t\"MOVIE_RECORDING_H264\",\n\t\"MOVIE_RECORDING_H264_TOOLTIP\",\n\t\"MOVIE_RECORDING_MJPEG\",\n\t\"MOVIE_RECORDING_MJPEG_TOOLTIP\",\n\t\"MOVIE_RECORDING_MPEG4\",\n\t\"MOVIE_RECORDING_MPEG4_TOOLTIP\",\n\t\"MOVIE_RECORDING_PIXLET\",\n\t\"MOVIE_RECORDING_QUALITY_TOOLTIP\",\n\t\"MOVIE_RECORDING_RECORDING\",\n\t\"MOVIE_RECORDING_RECORDING_STARTED\",\n\t\"MOVIE_RECORDING_RECORDING_STOPPED\",\n\t\"MOVIE_RECORDING_RECOVERING\",\n\t\"MOVIE_RECORDING_RESOLUTION_TOOLTIP\",\n\t\"MOVIE_RECORDING_TIME\",\n\t\"MOVIE_RECORDING_TIME_TOOLTIP\",\n\t\"MOVIE_RECORDING_UNCOMPRESSED_RGB\",\n\t\"MOVIE_RECORDING_WARNING_COMPRESSING\",\n\t\"MOVIE_RECORDING_WARNING_DISK_FULL\",\n\t\"MOVIE_RECORDING_WARNING_NO_MOVIE\",\n\t\"MOVIE_RECORDING_WARNING_PERF\",\n\t\"MOVIE_RECORDING_WARNING_REQUIREMENTS\",\n\t\"MP\",\n\t\"MULTIPLE_DUNGEONS\",\n\t\"MULTISAMPLE\",\n\t\"MULTISAMPLING_FORMAT_STRING\",\n\t\"MULTI_CAST_TOOLTIP_NO_TOTEM\",\n\t\"MUSIC_DISABLED\",\n\t\"MUSIC_ENABLED\",\n\t\"MUSIC_VOLUME\",\n\t\"MUTE\",\n\t\"MUTED\",\n\t\"MUTED_LIST\",\n\t\"MUTE_PLAYER\",\n\t\"NAME\",\n\t\"NAMES_LABEL\",\n\t\"NAMES_SUBTEXT\",\n\t\"NAME_CHAT_WINDOW\",\n\t\"NEAR\",\n\t\"NECKSLOT\",\n\t\"NEED\",\n\t\"NEED_NEWBIE\",\n\t\"NET_PROMOTER_HIGH\",\n\t\"NET_PROMOTER_LOW\",\n\t\"NEVER\",\n\t\"NEW\",\n\t\"NEWBIE_TOOLTIP_ABANDONQUEST\",\n\t\"NEWBIE_TOOLTIP_ACHIEVEMENT\",\n\t\"NEWBIE_TOOLTIP_ADDFRIEND\",\n\t\"NEWBIE_TOOLTIP_ADDMEMBER\",\n\t\"NEWBIE_TOOLTIP_ADDTEAMMEMBER\",\n\t\"NEWBIE_TOOLTIP_ALLIANCE\",\n\t\"NEWBIE_TOOLTIP_AUTO_JOIN_VOICE\",\n\t\"NEWBIE_TOOLTIP_BATTLEFIELDMINIMAP_OPTIONS\",\n\t\"NEWBIE_TOOLTIP_BATTLEFIELD_GROUP_JOIN\",\n\t\"NEWBIE_TOOLTIP_CHANNELPULLOUT_OPTIONS\",\n\t\"NEWBIE_TOOLTIP_CHANNELTAB\",\n\t\"NEWBIE_TOOLTIP_CHARACTER\",\n\t\"NEWBIE_TOOLTIP_CHATMENU\",\n\t\"NEWBIE_TOOLTIP_CHATOPTIONS\",\n\t\"NEWBIE_TOOLTIP_CHAT_OVERFLOW\",\n\t\"NEWBIE_TOOLTIP_DEMOTE\",\n\t\"NEWBIE_TOOLTIP_DISHONORABLE_KILLS\",\n\t\"NEWBIE_TOOLTIP_DISPLAY_CHANNEL_PULLOUT\",\n\t\"NEWBIE_TOOLTIP_ENCHANTSLOT\",\n\t\"NEWBIE_TOOLTIP_ENTER_BATTLEGROUND\",\n\t\"NEWBIE_TOOLTIP_EQUIPMENT_MANAGER\",\n\t\"NEWBIE_TOOLTIP_EQUIPMENT_MANAGER_IGNORE_SLOT\",\n\t\"NEWBIE_TOOLTIP_EQUIPMENT_MANAGER_PLACE_IN_BAGS\",\n\t\"NEWBIE_TOOLTIP_EQUIPMENT_MANAGER_UNIGNORE_SLOT\",\n\t\"NEWBIE_TOOLTIP_FIRST_AVAILABLE\",\n\t\"NEWBIE_TOOLTIP_FRAMERATE\",\n\t\"NEWBIE_TOOLTIP_FRIENDSTAB\",\n\t\"NEWBIE_TOOLTIP_GROUPINVITE\",\n\t\"NEWBIE_TOOLTIP_GUILDCONTROL\",\n\t\"NEWBIE_TOOLTIP_GUILDGROUPINVITE\",\n\t\"NEWBIE_TOOLTIP_GUILDPUBLICNOTE\",\n\t\"NEWBIE_TOOLTIP_GUILDREMOVE\",\n\t\"NEWBIE_TOOLTIP_GUILDTAB\",\n\t\"NEWBIE_TOOLTIP_GUILD_INFORMATION\",\n\t\"NEWBIE_TOOLTIP_GUILD_MEMBER_OPTIONS\",\n\t\"NEWBIE_TOOLTIP_HEALTHBAR\",\n\t\"NEWBIE_TOOLTIP_HELP\",\n\t\"NEWBIE_TOOLTIP_HONORABLE_KILLS\",\n\t\"NEWBIE_TOOLTIP_HONOR_CONTRIBUTION_POINTS\",\n\t\"NEWBIE_TOOLTIP_HONOR_STANDING\",\n\t\"NEWBIE_TOOLTIP_HORDE\",\n\t\"NEWBIE_TOOLTIP_IGNOREPLAYER\",\n\t\"NEWBIE_TOOLTIP_IGNORETAB\",\n\t\"NEWBIE_TOOLTIP_LATENCY\",\n\t\"NEWBIE_TOOLTIP_LFGPARENT\",\n\t\"NEWBIE_TOOLTIP_LFMTAB\",\n\t\"NEWBIE_TOOLTIP_MAINMENU\",\n\t\"NEWBIE_TOOLTIP_MANABAR0\",\n\t\"NEWBIE_TOOLTIP_MANABAR1\",\n\t\"NEWBIE_TOOLTIP_MANABAR2\",\n\t\"NEWBIE_TOOLTIP_MANABAR3\",\n\t\"NEWBIE_TOOLTIP_MANABAR4\",\n\t\"NEWBIE_TOOLTIP_MEMORY\",\n\t\"NEWBIE_TOOLTIP_MINIMAPTOGGLE\",\n\t\"NEWBIE_TOOLTIP_MUTEPLAYER\",\n\t\"NEWBIE_TOOLTIP_PARTYOPTIONS\",\n\t\"NEWBIE_TOOLTIP_PLAYEROPTIONS\",\n\t\"NEWBIE_TOOLTIP_PROMOTE\",\n\t\"NEWBIE_TOOLTIP_PVP\",\n\t\"NEWBIE_TOOLTIP_PVPFFA\",\n\t\"NEWBIE_TOOLTIP_QUESTLOG\",\n\t\"NEWBIE_TOOLTIP_RAF_SUMMON_LINKED\",\n\t\"NEWBIE_TOOLTIP_RAIDTAB\",\n\t\"NEWBIE_TOOLTIP_RANK\",\n\t\"NEWBIE_TOOLTIP_RANK_POSITION\",\n\t\"NEWBIE_TOOLTIP_REMOVEFRIEND\",\n\t\"NEWBIE_TOOLTIP_REMOVEPLAYER\",\n\t\"NEWBIE_TOOLTIP_SENDMESSAGE\",\n\t\"NEWBIE_TOOLTIP_SHAREQUEST\",\n\t\"NEWBIE_TOOLTIP_SOCIAL\",\n\t\"NEWBIE_TOOLTIP_SPELLBOOK\",\n\t\"NEWBIE_TOOLTIP_STOPIGNORE\",\n\t\"NEWBIE_TOOLTIP_STOPWATCH_PLAYPAUSEBUTTON\",\n\t\"NEWBIE_TOOLTIP_STOPWATCH_RESETBUTTON\",\n\t\"NEWBIE_TOOLTIP_TALENTS\",\n\t\"NEWBIE_TOOLTIP_TRACKQUEST\",\n\t\"NEWBIE_TOOLTIP_UNIT_DUEL\",\n\t\"NEWBIE_TOOLTIP_UNIT_FOLLOW\",\n\t\"NEWBIE_TOOLTIP_UNIT_FREE_FOR_ALL\",\n\t\"NEWBIE_TOOLTIP_UNIT_GROUP_LOOT\",\n\t\"NEWBIE_TOOLTIP_UNIT_INSPECT\",\n\t\"NEWBIE_TOOLTIP_UNIT_INVITE\",\n\t\"NEWBIE_TOOLTIP_UNIT_LEAVE_PARTY\",\n\t\"NEWBIE_TOOLTIP_UNIT_LOOT_THRESHOLD\",\n\t\"NEWBIE_TOOLTIP_UNIT_MASTER_LOOTER\",\n\t\"NEWBIE_TOOLTIP_UNIT_NEED_BEFORE_GREED\",\n\t\"NEWBIE_TOOLTIP_UNIT_OPT_OUT_LOOT\",\n\t\"NEWBIE_TOOLTIP_UNIT_PET_ABANDON\",\n\t\"NEWBIE_TOOLTIP_UNIT_PET_DISMISS\",\n\t\"NEWBIE_TOOLTIP_UNIT_PET_PAPERDOLL\",\n\t\"NEWBIE_TOOLTIP_UNIT_PET_RENAME\",\n\t\"NEWBIE_TOOLTIP_UNIT_PROMOTE\",\n\t\"NEWBIE_TOOLTIP_UNIT_ROUND_ROBIN\",\n\t\"NEWBIE_TOOLTIP_UNIT_TRADE\",\n\t\"NEWBIE_TOOLTIP_UNIT_UNINVITE\",\n\t\"NEWBIE_TOOLTIP_UNIT_VOTE_TO_KICK\",\n\t\"NEWBIE_TOOLTIP_UNMUTE\",\n\t\"NEWBIE_TOOLTIP_VOICE_CHAT_SELECTOR\",\n\t\"NEWBIE_TOOLTIP_WHOTAB\",\n\t\"NEWBIE_TOOLTIP_WORLDMAP\",\n\t\"NEWBIE_TOOLTIP_XPBAR\",\n\t\"NEW_ACHIEVEMENT_EARNED\",\n\t\"NEW_CHAT_WINDOW\",\n\t\"NEW_CONVERSATION_INSTRUCTIONS\",\n\t\"NEW_LEADER\",\n\t\"NEW_TITLE_EARNED\",\n\t\"NEXT\",\n\t\"NEXT_ABILITY\",\n\t\"NEXT_BATTLE\",\n\t\"NO\",\n\t\"NONE\",\n\t\"NONEQUIPSLOT\",\n\t\"NONE_CAPS\",\n\t\"NONE_KEY\",\n\t\"NORMAL_QUEST_DISPLAY\",\n\t\"NOTE\",\n\t\"NOTE_COLON\",\n\t\"NOTE_SUBMITTED\",\n\t\"NOTE_SUBMIT_FAILED\",\n\t\"NOT_APPLICABLE\",\n\t\"NOT_BOUND\",\n\t\"NOT_ENOUGH_MANA\",\n\t\"NOT_IN_GROUP\",\n\t\"NOT_TAMEABLE\",\n\t\"NOT_YET_SIGNED\",\n\t\"NO_ATTACHMENTS\",\n\t\"NO_BIDS\",\n\t\"NO_COMPLETED_ACHIEVEMENTS\",\n\t\"NO_DAILY_QUESTS_REMAINING\",\n\t\"NO_EMPTY_KEYRING_SLOTS_ERROR\",\n\t\"NO_EQUIPMENT_SLOTS_AVAILABLE\",\n\t\"NO_FRIEND_REQUESTS\",\n\t\"NO_GUILDBANK_TABS\",\n\t\"NO_LFD_WHILE_LFR\",\n\t\"NO_LFR_WHILE_LFD\",\n\t\"NO_RAIDS_AVAILABLE\",\n\t\"NO_RAID_INSTANCES_SAVED\",\n\t\"NO_RESPONSE\",\n\t\"NO_UPDATED_STATS_TEXT\",\n\t\"NO_VIEWABLE_GUILDBANK_LOGS\",\n\t\"NO_VIEWABLE_GUILDBANK_TABS\",\n\t\"NO_VOICE_SESSIONS\",\n\t\"NUMBER_OF_RESULTS_TEMPLATE\",\n\t\"NUM_FREE_SLOTS\",\n\t\"NUM_GUILDBANK_TABS_PURCHASED\",\n\t\"NUM_RAID_MEMBERS\",\n\t\"OBJECTIVES_IGNORE_CURSOR_TEXT\",\n\t\"OBJECTIVES_LABEL\",\n\t\"OBJECTIVES_SHOW_QUEST_MAP\",\n\t\"OBJECTIVES_STOP_TRACKING\",\n\t\"OBJECTIVES_SUBTEXT\",\n\t\"OBJECTIVES_TRACKER_LABEL\",\n\t\"OBJECTIVES_VIEW_ACHIEVEMENT\",\n\t\"OBJECTIVES_VIEW_IN_ACHIEVEMENTS\",\n\t\"OBJECTIVES_VIEW_IN_QUESTLOG\",\n\t\"OBJECTIVES_WATCH_QUESTS_ARENA\",\n\t\"OBJECTIVES_WATCH_TOO_MANY\",\n\t\"OBJECT_ALPHA\",\n\t\"OFF\",\n\t\"OFFICER\",\n\t\"OFFICER_CHAT\",\n\t\"OFFICER_NOTE_COLON\",\n\t\"OKAY\",\n\t\"OLD_TITLE_LOST\",\n\t\"ONLY_EMPTY_BAGS\",\n\t\"ON_COOLDOWN\",\n\t\"OPACITY\",\n\t\"OPENING\",\n\t\"OPENMAIL\",\n\t\"OPEN_LOCK_OTHER\",\n\t\"OPEN_LOCK_SELF\",\n\t\"OPEN_RAID_BROWSER\",\n\t\"OPTIONAL\",\n\t\"OPTIONAL_PARENS\",\n\t\"OPTIONS_BRIGHTNESS\",\n\t\"OPTIONS_MENU\",\n\t\"OPTIONS_SHADERS\",\n\t\"OPTION_CHAT_STYLE_CLASSIC\",\n\t\"OPTION_CHAT_STYLE_IM\",\n\t\"OPTION_CONVERSATION_MODE_INLINE\",\n\t\"OPTION_CONVERSATION_MODE_POPOUT\",\n\t\"OPTION_LOGOUT_REQUIREMENT\",\n\t\"OPTION_PREVIEW_TALENT_CHANGES_DESCRIPTION\",\n\t\"OPTION_RESTART_REQUIREMENT\",\n\t\"OPTION_STEREO_CONVERGENCE\",\n\t\"OPTION_STEREO_SEPARATION\",\n\t\"OPTION_TOOLTIP_ADVANCED_OBJECTIVES\",\n\t\"OPTION_TOOLTIP_ADVANCED_WORLD_MAP\",\n\t\"OPTION_TOOLTIP_AGGRO_WARNING_DISPLAY1\",\n\t\"OPTION_TOOLTIP_AGGRO_WARNING_DISPLAY2\",\n\t\"OPTION_TOOLTIP_AGGRO_WARNING_DISPLAY3\",\n\t\"OPTION_TOOLTIP_AGGRO_WARNING_DISPLAY4\",\n\t\"OPTION_TOOLTIP_ALWAYS_SHOW_MULTIBARS\",\n\t\"OPTION_TOOLTIP_AMBIENCE_VOLUME\",\n\t\"OPTION_TOOLTIP_ANIMATION\",\n\t\"OPTION_TOOLTIP_ANISOTROPIC\",\n\t\"OPTION_TOOLTIP_ASSIST_ATTACK\",\n\t\"OPTION_TOOLTIP_AUTO_DISMOUNT_FLYING\",\n\t\"OPTION_TOOLTIP_AUTO_FOLLOW_SPEED\",\n\t\"OPTION_TOOLTIP_AUTO_JOIN_GUILD_CHANNEL\",\n\t\"OPTION_TOOLTIP_AUTO_LOOT_ALT_KEY\",\n\t\"OPTION_TOOLTIP_AUTO_LOOT_CTRL_KEY\",\n\t\"OPTION_TOOLTIP_AUTO_LOOT_DEFAULT\",\n\t\"OPTION_TOOLTIP_AUTO_LOOT_KEY_TEXT\",\n\t\"OPTION_TOOLTIP_AUTO_LOOT_NONE_KEY\",\n\t\"OPTION_TOOLTIP_AUTO_LOOT_SHIFT_KEY\",\n\t\"OPTION_TOOLTIP_AUTO_QUEST_PROGRESS\",\n\t\"OPTION_TOOLTIP_AUTO_QUEST_WATCH\",\n\t\"OPTION_TOOLTIP_AUTO_RANGED_COMBAT\",\n\t\"OPTION_TOOLTIP_AUTO_SELF_CAST\",\n\t\"OPTION_TOOLTIP_AUTO_SELF_CAST_ALT_KEY\",\n\t\"OPTION_TOOLTIP_AUTO_SELF_CAST_CTRL_KEY\",\n\t\"OPTION_TOOLTIP_AUTO_SELF_CAST_KEY_TEXT\",\n\t\"OPTION_TOOLTIP_AUTO_SELF_CAST_NONE_KEY\",\n\t\"OPTION_TOOLTIP_AUTO_SELF_CAST_SHIFT_KEY\",\n\t\"OPTION_TOOLTIP_BLOCK_TRADES\",\n\t\"OPTION_TOOLTIP_CAMERA1\",\n\t\"OPTION_TOOLTIP_CAMERA2\",\n\t\"OPTION_TOOLTIP_CAMERA3\",\n\t\"OPTION_TOOLTIP_CAMERA4\",\n\t\"OPTION_TOOLTIP_CAMERA_ALWAYS\",\n\t\"OPTION_TOOLTIP_CAMERA_NEVER\",\n\t\"OPTION_TOOLTIP_CAMERA_SMART\",\n\t\"OPTION_TOOLTIP_CAMERA_SMARTER\",\n\t\"OPTION_TOOLTIP_CHARACTER_SHADOWS\",\n\t\"OPTION_TOOLTIP_CHAT_BUBBLES\",\n\t\"OPTION_TOOLTIP_CHAT_LOCKED\",\n\t\"OPTION_TOOLTIP_CHAT_MOUSE_WHEEL_SCROLL\",\n\t\"OPTION_TOOLTIP_CHAT_WHOLE_WINDOW_CLICKABLE\",\n\t\"OPTION_TOOLTIP_CINEMATIC_SUBTITLES\",\n\t\"OPTION_TOOLTIP_CLEAR_AFK\",\n\t\"OPTION_TOOLTIP_CLICKCAMERA_LOCKED\",\n\t\"OPTION_TOOLTIP_CLICKCAMERA_NEVER\",\n\t\"OPTION_TOOLTIP_CLICKCAMERA_SMART\",\n\t\"OPTION_TOOLTIP_CLICK_CAMERA1\",\n\t\"OPTION_TOOLTIP_CLICK_CAMERA2\",\n\t\"OPTION_TOOLTIP_CLICK_CAMERA3\",\n\t\"OPTION_TOOLTIP_CLICK_CAMERA_STYLE\",\n\t\"OPTION_TOOLTIP_CLICK_TO_MOVE\",\n\t\"OPTION_TOOLTIP_COMBAT_TEXT_MODE\",\n\t\"OPTION_TOOLTIP_COMBAT_TEXT_SCROLL_DOWN\",\n\t\"OPTION_TOOLTIP_COMBAT_TEXT_SHOW_AURAS\",\n\t\"OPTION_TOOLTIP_COMBAT_TEXT_SHOW_AURA_FADE\",\n\t\"OPTION_TOOLTIP_COMBAT_TEXT_SHOW_COMBAT_STATE\",\n\t\"OPTION_TOOLTIP_COMBAT_TEXT_SHOW_COMBO_POINTS\",\n\t\"OPTION_TOOLTIP_COMBAT_TEXT_SHOW_DODGE_PARRY_MISS\",\n\t\"OPTION_TOOLTIP_COMBAT_TEXT_SHOW_ENERGIZE\",\n\t\"OPTION_TOOLTIP_COMBAT_TEXT_SHOW_FRIENDLY_NAMES\",\n\t\"OPTION_TOOLTIP_COMBAT_TEXT_SHOW_HONOR_GAINED\",\n\t\"OPTION_TOOLTIP_COMBAT_TEXT_SHOW_LOW_HEALTH_MANA\",\n\t\"OPTION_TOOLTIP_COMBAT_TEXT_SHOW_PERIODIC_ENERGIZE\",\n\t\"OPTION_TOOLTIP_COMBAT_TEXT_SHOW_REACTIVES\",\n\t\"OPTION_TOOLTIP_COMBAT_TEXT_SHOW_REPUTATION\",\n\t\"OPTION_TOOLTIP_COMBAT_TEXT_SHOW_RESISTANCES\",\n\t\"OPTION_TOOLTIP_CONSOLIDATE_BUFFS\",\n\t\"OPTION_TOOLTIP_DEATH_EFFECT\",\n\t\"OPTION_TOOLTIP_DESKTOP_GAMMA\",\n\t\"OPTION_TOOLTIP_DISABLE_SPAM_FILTER\",\n\t\"OPTION_TOOLTIP_DISPLAY_FREE_BAG_SLOTS\",\n\t\"OPTION_TOOLTIP_ENABLE_ALL_SHADERS\",\n\t\"OPTION_TOOLTIP_ENABLE_AMBIENCE\",\n\t\"OPTION_TOOLTIP_ENABLE_BGSOUND\",\n\t\"OPTION_TOOLTIP_ENABLE_DSP_EFFECTS\",\n\t\"OPTION_TOOLTIP_ENABLE_EMOTE_SOUNDS\",\n\t\"OPTION_TOOLTIP_ENABLE_ERROR_SPEECH\",\n\t\"OPTION_TOOLTIP_ENABLE_GROUP_SPEECH\",\n\t\"OPTION_TOOLTIP_ENABLE_HARDWARE\",\n\t\"OPTION_TOOLTIP_ENABLE_MICROPHONE\",\n\t\"OPTION_TOOLTIP_ENABLE_MUSIC\",\n\t\"OPTION_TOOLTIP_ENABLE_MUSIC_LOOPING\",\n\t\"OPTION_TOOLTIP_ENABLE_PET_SOUNDS\",\n\t\"OPTION_TOOLTIP_ENABLE_REVERB\",\n\t\"OPTION_TOOLTIP_ENABLE_SOFTWARE_HRTF\",\n\t\"OPTION_TOOLTIP_ENABLE_SOUND\",\n\t\"OPTION_TOOLTIP_ENABLE_SOUNDFX\",\n\t\"OPTION_TOOLTIP_ENABLE_SOUND_AT_CHARACTER\",\n\t\"OPTION_TOOLTIP_ENABLE_STEREO_VIDEO\",\n\t\"OPTION_TOOLTIP_ENABLE_VOICECHAT\",\n\t\"OPTION_TOOLTIP_ENVIRONMENT_DETAIL\",\n\t\"OPTION_TOOLTIP_FARCLIP\",\n\t\"OPTION_TOOLTIP_FIX_LAG\",\n\t\"OPTION_TOOLTIP_FOCUS_CAST_ALT_KEY\",\n\t\"OPTION_TOOLTIP_FOCUS_CAST_CTRL_KEY\",\n\t\"OPTION_TOOLTIP_FOCUS_CAST_NONE_KEY\",\n\t\"OPTION_TOOLTIP_FOCUS_CAST_SHIFT_KEY\",\n\t\"OPTION_TOOLTIP_FOLLOW_TERRAIN\",\n\t\"OPTION_TOOLTIP_FULL_SCREEN_GLOW\",\n\t\"OPTION_TOOLTIP_FULL_SIZE_FOCUS_FRAME\",\n\t\"OPTION_TOOLTIP_GAMEFIELD_DESELECT\",\n\t\"OPTION_TOOLTIP_GAMMA\",\n\t\"OPTION_TOOLTIP_GROUND_DENSITY\",\n\t\"OPTION_TOOLTIP_GROUND_RADIUS\",\n\t\"OPTION_TOOLTIP_GUILDMEMBER_ALERT\",\n\t\"OPTION_TOOLTIP_HARDWARE_CURSOR\",\n\t\"OPTION_TOOLTIP_HEAD_BOB\",\n\t\"OPTION_TOOLTIP_HIDE_OUTDOOR_WORLD_STATE\",\n\t\"OPTION_TOOLTIP_HIDE_PARTY_INTERFACE\",\n\t\"OPTION_TOOLTIP_INVERT_MOUSE\",\n\t\"OPTION_TOOLTIP_LOCALE\",\n\t\"OPTION_TOOLTIP_LOCK_ACTIONBAR\",\n\t\"OPTION_TOOLTIP_LOG_PERIODIC_EFFECTS\",\n\t\"OPTION_TOOLTIP_LONG_RANGE_NAMEPLATE\",\n\t\"OPTION_TOOLTIP_LOOT_KEY_TEXT\",\n\t\"OPTION_TOOLTIP_LOOT_UNDER_MOUSE\",\n\t\"OPTION_TOOLTIP_MAP_QUEST_DIFFICULTY\",\n\t\"OPTION_TOOLTIP_MAP_TRACK_QUEST\",\n\t\"OPTION_TOOLTIP_MASTER_VOLUME\",\n\t\"OPTION_TOOLTIP_MAX_FOLLOW_DIST\",\n\t\"OPTION_TOOLTIP_MOUSE_LOOK_SPEED\",\n\t\"OPTION_TOOLTIP_MOUSE_SENSITIVITY\",\n\t\"OPTION_TOOLTIP_MULTISAMPLING\",\n\t\"OPTION_TOOLTIP_MUSIC_VOLUME\",\n\t\"OPTION_TOOLTIP_OBJECTIVES_IGNORE_CURSOR\",\n\t\"OPTION_TOOLTIP_OBJECT_ALPHA\",\n\t\"OPTION_TOOLTIP_PARTICLE_DENSITY\",\n\t\"OPTION_TOOLTIP_PARTY_CHAT_BUBBLES\",\n\t\"OPTION_TOOLTIP_PET_NAMEPLATES\",\n\t\"OPTION_TOOLTIP_PET_SPELL_DAMAGE\",\n\t\"OPTION_TOOLTIP_PHONG_SHADING\",\n\t\"OPTION_TOOLTIP_PLAYER_DETAIL\",\n\t\"OPTION_TOOLTIP_PLAY_AGGRO_SOUNDS\",\n\t\"OPTION_TOOLTIP_PROFANITY_FILTER\",\n\t\"OPTION_TOOLTIP_PROFANITY_FILTER_WITH_WARNING\",\n\t\"OPTION_TOOLTIP_PROJECTED_TEXTURES\",\n\t\"OPTION_TOOLTIP_PUSHTOTALK_SOUND\",\n\t\"OPTION_TOOLTIP_REMOVE_CHAT_DELAY\",\n\t\"OPTION_TOOLTIP_ROTATE_MINIMAP\",\n\t\"OPTION_TOOLTIP_SCROLL_ARC\",\n\t\"OPTION_TOOLTIP_SCROLL_DOWN\",\n\t\"OPTION_TOOLTIP_SCROLL_UP\",\n\t\"OPTION_TOOLTIP_SECURE_ABILITY_TOGGLE\",\n\t\"OPTION_TOOLTIP_SHADOW_QUALITY\",\n\t\"OPTION_TOOLTIP_SHOW_ARENA_ENEMY_CASTBAR\",\n\t\"OPTION_TOOLTIP_SHOW_ARENA_ENEMY_FRAMES\",\n\t\"OPTION_TOOLTIP_SHOW_ARENA_ENEMY_PETS\",\n\t\"OPTION_TOOLTIP_SHOW_BATTLENET_TOASTS\",\n\t\"OPTION_TOOLTIP_SHOW_BUFF_DURATION\",\n\t\"OPTION_TOOLTIP_SHOW_CASTABLE_BUFFS\",\n\t\"OPTION_TOOLTIP_SHOW_CASTABLE_DEBUFFS\",\n\t\"OPTION_TOOLTIP_SHOW_CHAT_ICONS\",\n\t\"OPTION_TOOLTIP_SHOW_CLASS_COLOR_IN_V_KEY\",\n\t\"OPTION_TOOLTIP_SHOW_CLOAK\",\n\t\"OPTION_TOOLTIP_SHOW_CLOCK\",\n\t\"OPTION_TOOLTIP_SHOW_COMBAT_HEALING\",\n\t\"OPTION_TOOLTIP_SHOW_COMBAT_TEXT\",\n\t\"OPTION_TOOLTIP_SHOW_DAMAGE\",\n\t\"OPTION_TOOLTIP_SHOW_DISPELLABLE_DEBUFFS\",\n\t\"OPTION_TOOLTIP_SHOW_FULLSCREEN_STATUS\",\n\t\"OPTION_TOOLTIP_SHOW_GUILD_NAMES\",\n\t\"OPTION_TOOLTIP_SHOW_HELM\",\n\t\"OPTION_TOOLTIP_SHOW_ITEM_LEVEL\",\n\t\"OPTION_TOOLTIP_SHOW_LOOT_SPAM\",\n\t\"OPTION_TOOLTIP_SHOW_LUA_ERRORS\",\n\t\"OPTION_TOOLTIP_SHOW_MULTIBAR1\",\n\t\"OPTION_TOOLTIP_SHOW_MULTIBAR2\",\n\t\"OPTION_TOOLTIP_SHOW_MULTIBAR3\",\n\t\"OPTION_TOOLTIP_SHOW_MULTIBAR4\",\n\t\"OPTION_TOOLTIP_SHOW_NEWBIE_TIPS\",\n\t\"OPTION_TOOLTIP_SHOW_NPC_NAMES\",\n\t\"OPTION_TOOLTIP_SHOW_NUMERIC_THREAT\",\n\t\"OPTION_TOOLTIP_SHOW_OTHER_TARGET_EFFECTS\",\n\t\"OPTION_TOOLTIP_SHOW_OWN_NAME\",\n\t\"OPTION_TOOLTIP_SHOW_PARTY_BACKGROUND\",\n\t\"OPTION_TOOLTIP_SHOW_PARTY_PETS\",\n\t\"OPTION_TOOLTIP_SHOW_PARTY_TEXT\",\n\t\"OPTION_TOOLTIP_SHOW_PET_MELEE_DAMAGE\",\n\t\"OPTION_TOOLTIP_SHOW_PLAYER_NAMES\",\n\t\"OPTION_TOOLTIP_SHOW_PLAYER_TITLES\",\n\t\"OPTION_TOOLTIP_SHOW_QUEST_FADING\",\n\t\"OPTION_TOOLTIP_SHOW_QUEST_OBJECTIVES_ON_MAP\",\n\t\"OPTION_TOOLTIP_SHOW_RAID_RANGE\",\n\t\"OPTION_TOOLTIP_SHOW_TARGET_CASTBAR\",\n\t\"OPTION_TOOLTIP_SHOW_TARGET_CASTBAR_IN_V_KEY\",\n\t\"OPTION_TOOLTIP_SHOW_TARGET_EFFECTS\",\n\t\"OPTION_TOOLTIP_SHOW_TARGET_OF_TARGET\",\n\t\"OPTION_TOOLTIP_SHOW_TIPOFTHEDAY\",\n\t\"OPTION_TOOLTIP_SHOW_TOAST_BROADCAST\",\n\t\"OPTION_TOOLTIP_SHOW_TOAST_CONVERSATION\",\n\t\"OPTION_TOOLTIP_SHOW_TOAST_FRIEND_REQUEST\",\n\t\"OPTION_TOOLTIP_SHOW_TOAST_OFFLINE\",\n\t\"OPTION_TOOLTIP_SHOW_TOAST_ONLINE\",\n\t\"OPTION_TOOLTIP_SHOW_TOAST_WINDOW\",\n\t\"OPTION_TOOLTIP_SHOW_TUTORIALS\",\n\t\"OPTION_TOOLTIP_SHOW_UNIT_NAMES\",\n\t\"OPTION_TOOLTIP_SIMPLE_CHAT\",\n\t\"OPTION_TOOLTIP_SIMPLE_QUEST_WATCH_TEXT\",\n\t\"OPTION_TOOLTIP_SMART_PIVOT\",\n\t\"OPTION_TOOLTIP_SOUND_CHANNELS\",\n\t\"OPTION_TOOLTIP_SOUND_OUTPUT\",\n\t\"OPTION_TOOLTIP_SOUND_QUALITY\",\n\t\"OPTION_TOOLTIP_SOUND_VOLUME\",\n\t\"OPTION_TOOLTIP_SPELL_DETAIL\",\n\t\"OPTION_TOOLTIP_STATUS_BAR\",\n\t\"OPTION_TOOLTIP_STATUS_TEXT_PARTY\",\n\t\"OPTION_TOOLTIP_STATUS_TEXT_PERCENT\",\n\t\"OPTION_TOOLTIP_STATUS_TEXT_PET\",\n\t\"OPTION_TOOLTIP_STATUS_TEXT_PLAYER\",\n\t\"OPTION_TOOLTIP_STATUS_TEXT_TARGET\",\n\t\"OPTION_TOOLTIP_STEREO_HARDWARE_CURSOR\",\n\t\"OPTION_TOOLTIP_STOP_AUTO_ATTACK\",\n\t\"OPTION_TOOLTIP_TARGETOFTARGET1\",\n\t\"OPTION_TOOLTIP_TARGETOFTARGET2\",\n\t\"OPTION_TOOLTIP_TARGETOFTARGET3\",\n\t\"OPTION_TOOLTIP_TARGETOFTARGET4\",\n\t\"OPTION_TOOLTIP_TARGETOFTARGET5\",\n\t\"OPTION_TOOLTIP_TARGETOFTARGET_ALWAYS\",\n\t\"OPTION_TOOLTIP_TARGETOFTARGET_PARTY\",\n\t\"OPTION_TOOLTIP_TARGETOFTARGET_RAID\",\n\t\"OPTION_TOOLTIP_TARGETOFTARGET_RAID_AND_PARTY\",\n\t\"OPTION_TOOLTIP_TARGETOFTARGET_SOLO\",\n\t\"OPTION_TOOLTIP_TERRAIN_HIGHLIGHTS\",\n\t\"OPTION_TOOLTIP_TERRAIN_TEXTURE\",\n\t\"OPTION_TOOLTIP_TEXTURE_DETAIL\",\n\t\"OPTION_TOOLTIP_TIMESTAMPS\",\n\t\"OPTION_TOOLTIP_TOAST_DURATION\",\n\t\"OPTION_TOOLTIP_TRILINEAR\",\n\t\"OPTION_TOOLTIP_TRIPLE_BUFFER\",\n\t\"OPTION_TOOLTIP_UI_SCALE\",\n\t\"OPTION_TOOLTIP_UNIT_NAMEPLATES_ALLOW_OVERLAP\",\n\t\"OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_ENEMIES\",\n\t\"OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_ENEMY_GUARDIANS\",\n\t\"OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_ENEMY_PETS\",\n\t\"OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_ENEMY_TOTEMS\",\n\t\"OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_FRIENDLY_GUARDIANS\",\n\t\"OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_FRIENDLY_PETS\",\n\t\"OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_FRIENDLY_TOTEMS\",\n\t\"OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_FRIENDS\",\n\t\"OPTION_TOOLTIP_UNIT_NAME_ENEMY\",\n\t\"OPTION_TOOLTIP_UNIT_NAME_ENEMY_GUARDIANS\",\n\t\"OPTION_TOOLTIP_UNIT_NAME_ENEMY_PETS\",\n\t\"OPTION_TOOLTIP_UNIT_NAME_ENEMY_TOTEMS\",\n\t\"OPTION_TOOLTIP_UNIT_NAME_FRIENDLY\",\n\t\"OPTION_TOOLTIP_UNIT_NAME_FRIENDLY_GUARDIANS\",\n\t\"OPTION_TOOLTIP_UNIT_NAME_FRIENDLY_PETS\",\n\t\"OPTION_TOOLTIP_UNIT_NAME_FRIENDLY_TOTEMS\",\n\t\"OPTION_TOOLTIP_UNIT_NAME_GUILD\",\n\t\"OPTION_TOOLTIP_UNIT_NAME_NONCOMBAT_CREATURE\",\n\t\"OPTION_TOOLTIP_UNIT_NAME_NPC\",\n\t\"OPTION_TOOLTIP_UNIT_NAME_OWN\",\n\t\"OPTION_TOOLTIP_UNIT_NAME_PLAYER_TITLE\",\n\t\"OPTION_TOOLTIP_USE_COLORBLIND_MODE\",\n\t\"OPTION_TOOLTIP_USE_ENGLISH_AUDIO\",\n\t\"OPTION_TOOLTIP_USE_REFRESH\",\n\t\"OPTION_TOOLTIP_USE_RESOLUTION\",\n\t\"OPTION_TOOLTIP_USE_UBERTOOLTIPS\",\n\t\"OPTION_TOOLTIP_USE_UISCALE\",\n\t\"OPTION_TOOLTIP_USE_WEATHER_SHADER\",\n\t\"OPTION_TOOLTIP_VERTEX_ANIMATION_SHADERS\",\n\t\"OPTION_TOOLTIP_VERTICAL_SYNC\",\n\t\"OPTION_TOOLTIP_VOICE_ACTIVATION_SENSITIVITY\",\n\t\"OPTION_TOOLTIP_VOICE_AMBIENCE\",\n\t\"OPTION_TOOLTIP_VOICE_INPUT\",\n\t\"OPTION_TOOLTIP_VOICE_INPUT_VOLUME\",\n\t\"OPTION_TOOLTIP_VOICE_MUSIC\",\n\t\"OPTION_TOOLTIP_VOICE_OUTPUT\",\n\t\"OPTION_TOOLTIP_VOICE_OUTPUT_VOLUME\",\n\t\"OPTION_TOOLTIP_VOICE_SOUND\",\n\t\"OPTION_TOOLTIP_VOICE_TYPE1\",\n\t\"OPTION_TOOLTIP_VOICE_TYPE2\",\n\t\"OPTION_TOOLTIP_WATCH_FRAME_WIDTH\",\n\t\"OPTION_TOOLTIP_WATER_COLLISION\",\n\t\"OPTION_TOOLTIP_WEATHER_DETAIL\",\n\t\"OPTION_TOOLTIP_WINDOWED_MAXIMIZED\",\n\t\"OPTION_TOOLTIP_WINDOWED_MODE\",\n\t\"OPTION_TOOLTIP_WINDOW_LOCK\",\n\t\"OPTION_TOOLTIP_WORLD_LOD\",\n\t\"OPTION_TOOLTIP_WORLD_PVP_DISPLAY1\",\n\t\"OPTION_TOOLTIP_WORLD_PVP_DISPLAY2\",\n\t\"OPTION_TOOLTIP_WORLD_PVP_DISPLAY3\",\n\t\"OPTION_TOOLTIP_WORLD_PVP_DISPLAY_ALWAYS\",\n\t\"OPTION_TOOLTIP_WORLD_PVP_DISPLAY_DYNAMIC\",\n\t\"OPTION_TOOLTIP_WORLD_PVP_DISPLAY_NEVER\",\n\t\"OPTION_TOOLTIP_WOW_MOUSE\",\n\t\"OPTION_TOOLTIP_XP_BAR\",\n\t\"OPTION_UI_DEPTH\",\n\t\"OPTION_USE_EQUIPMENT_MANAGER_DESCRIPTION\",\n\t\"OPT_OUT_LOOT_TITLE\",\n\t\"OPT_OUT_LOOT_TOGGLE_OFF\",\n\t\"OPT_OUT_LOOT_TOGGLE_ON\",\n\t\"OR_CAPS\",\n\t\"OTHER\",\n\t\"OTHER_MESSAGES\",\n\t\"OUTBID\",\n\t\"OUTBID_BY\",\n\t\"OUT_OF_ENERGY\",\n\t\"OUT_OF_FOCUS\",\n\t\"OUT_OF_HEALTH\",\n\t\"OUT_OF_MANA\",\n\t\"OUT_OF_POWER_DISPLAY\",\n\t\"OUT_OF_RAGE\",\n\t\"PAGE_NUMBER\",\n\t\"PALADIN_INTELLECT_TOOLTIP\",\n\t\"PALADIN_STRENGTH_TOOLTIP\",\n\t\"PAPERDOLLFRAME_TOOLTIP_FORMAT\",\n\t\"PAPERDOLL_SELECT_TITLE\",\n\t\"PARENS_TEMPLATE\",\n\t\"PARRIED\",\n\t\"PARRY\",\n\t\"PARRY_CHANCE\",\n\t\"PARTICLE_DENSITY\",\n\t\"PARTY\",\n\t\"PARTYRAID_LABEL\",\n\t\"PARTYRAID_SUBTEXT\",\n\t\"PARTY_CHAT_BUBBLES_TEXT\",\n\t\"PARTY_INVITE\",\n\t\"PARTY_LEADER\",\n\t\"PARTY_LEAVE\",\n\t\"PARTY_MESSAGE\",\n\t\"PARTY_OPTIONS_LABEL\",\n\t\"PARTY_PROMOTE\",\n\t\"PARTY_PROMOTE_GUIDE\",\n\t\"PARTY_QUEST_STATUS_NONE\",\n\t\"PARTY_QUEST_STATUS_ON\",\n\t\"PARTY_SILENCE\",\n\t\"PARTY_UNINVITE\",\n\t\"PARTY_UNSILENCE\",\n\t\"PASS\",\n\t\"PASSIVE_PARENS\",\n\t\"PASSWORD\",\n\t\"PENDING_INVITE\",\n\t\"PENDING_INVITE_LIST\",\n\t\"PERCENT_SYMBOL\",\n\t\"PERIODIC\",\n\t\"PERIODIC_MESSAGES\",\n\t\"PET\",\n\t\"PETITION_CREATOR\",\n\t\"PETITION_NUM_SIGNATURES\",\n\t\"PETITION_TITLE\",\n\t\"PETS\",\n\t\"PETTAME_ANOTHERSUMMONACTIVE\",\n\t\"PETTAME_CANTCONTROLEXOTIC\",\n\t\"PETTAME_CREATUREALREADYOWNED\",\n\t\"PETTAME_DEAD\",\n\t\"PETTAME_INTERNALERROR\",\n\t\"PETTAME_INVALIDCREATURE\",\n\t\"PETTAME_NOPETAVAILABLE\",\n\t\"PETTAME_NOTDEAD\",\n\t\"PETTAME_NOTTAMEABLE\",\n\t\"PETTAME_TOOHIGHLEVEL\",\n\t\"PETTAME_TOOMANY\",\n\t\"PETTAME_UNITSCANTTAME\",\n\t\"PETTAME_UNKNOWNERROR\",\n\t\"PET_ABANDON\",\n\t\"PET_ACTION_ATTACK\",\n\t\"PET_ACTION_DISMISS\",\n\t\"PET_ACTION_FOLLOW\",\n\t\"PET_ACTION_WAIT\",\n\t\"PET_AGGRESSIVE\",\n\t\"PET_ATTACK\",\n\t\"PET_BONUS_TOOLTIP_ARMOR\",\n\t\"PET_BONUS_TOOLTIP_INTELLECT\",\n\t\"PET_BONUS_TOOLTIP_RANGED_ATTACK_POWER\",\n\t\"PET_BONUS_TOOLTIP_RESISTANCE\",\n\t\"PET_BONUS_TOOLTIP_SPELLDAMAGE\",\n\t\"PET_BONUS_TOOLTIP_STAMINA\",\n\t\"PET_BONUS_TOOLTIP_WARLOCK_SPELLDMG_FIRE\",\n\t\"PET_BONUS_TOOLTIP_WARLOCK_SPELLDMG_SHADOW\",\n\t\"PET_DAMAGE_PERCENTAGE\",\n\t\"PET_DEFENSIVE\",\n\t\"PET_DIET_TEMPLATE\",\n\t\"PET_DISMISS\",\n\t\"PET_FOLLOW\",\n\t\"PET_HAPPINESS1\",\n\t\"PET_HAPPINESS2\",\n\t\"PET_HAPPINESS3\",\n\t\"PET_INFO\",\n\t\"PET_MODE_AGGRESSIVE\",\n\t\"PET_MODE_DEFENSIVE\",\n\t\"PET_MODE_PASSIVE\",\n\t\"PET_PAPERDOLL\",\n\t\"PET_PASSIVE\",\n\t\"PET_RENAME\",\n\t\"PET_RENAME_CONFIRMATION\",\n\t\"PET_RENAME_LABEL\",\n\t\"PET_SPELLS_TEMPLATE\",\n\t\"PET_SPELL_NOPATH\",\n\t\"PET_TIME_LEFT_MINUTES\",\n\t\"PET_TIME_LEFT_SECONDS\",\n\t\"PET_TYPE_DEMON\",\n\t\"PET_TYPE_PET\",\n\t\"PET_WAIT\",\n\t\"PHONG_SHADING\",\n\t\"PHYSICAL_HARASSMENT\",\n\t\"PHYSICAL_HARASSMENT_DESCRIPTION\",\n\t\"PHYSICAL_HARASSMENT_TEXT1\",\n\t\"PHYSICAL_HARASSMENT_TEXT2\",\n\t\"PHYSICAL_HARASSMENT_TEXT3\",\n\t\"PHYSICAL_HARASSMENT_TEXT4\",\n\t\"PHYSICAL_HARASSMENT_TEXT5\",\n\t\"PHYSICAL_HARASSMENT_TEXT6\",\n\t\"PIXEL_SHADERS\",\n\t\"PLAYBACK\",\n\t\"PLAYED\",\n\t\"PLAYER\",\n\t\"PLAYERSTAT_BASE_STATS\",\n\t\"PLAYERSTAT_DEFENSES\",\n\t\"PLAYERSTAT_MELEE_COMBAT\",\n\t\"PLAYERSTAT_RANGED_COMBAT\",\n\t\"PLAYERSTAT_SPELL_COMBAT\",\n\t\"PLAYERS_IN_GROUP\",\n\t\"PLAYER_COUNT_ALLIANCE\",\n\t\"PLAYER_COUNT_HORDE\",\n\t\"PLAYER_DETAIL\",\n\t\"PLAYER_DIFFICULTY1\",\n\t\"PLAYER_DIFFICULTY2\",\n\t\"PLAYER_IS_PVP_AFK\",\n\t\"PLAYER_LEVEL\",\n\t\"PLAYER_LEVEL_UP\",\n\t\"PLAYER_LIST_DELIMITER\",\n\t\"PLAYER_LOGOUT_FAILED\",\n\t\"PLAYER_LOGOUT_FAILED_ERROR\",\n\t\"PLAYER_MESSAGES\",\n\t\"PLAYER_NOT_FOUND\",\n\t\"PLAYER_OFFLINE\",\n\t\"PLAYER_OPTIONS_LABEL\",\n\t\"PLAYER_SERVER_FIRST_ACHIEVEMENT\",\n\t\"PLAYER_STATUS\",\n\t\"PLAYER_V_PLAYER\",\n\t\"PLAYTIME_TIRED\",\n\t\"PLAYTIME_TIRED_ABILITY\",\n\t\"PLAYTIME_UNHEALTHY\",\n\t\"PLAYTIME_UNHEALTHY_ABILITY\",\n\t\"PLAY_AGGRO_SOUNDS\",\n\t\"PLUS_AMMO_DAMAGE_TEMPLATE\",\n\t\"PLUS_AMMO_SCHOOL_DAMAGE_TEMPLATE\",\n\t\"PLUS_DAMAGE_TEMPLATE\",\n\t\"PLUS_DAMAGE_TEMPLATE_WITH_SCHOOL\",\n\t\"PLUS_SINGLE_DAMAGE_TEMPLATE\",\n\t\"PLUS_SINGLE_DAMAGE_TEMPLATE_WITH_SCHOOL\",\n\t\"POP_IN_CHAT\",\n\t\"POP_OUT_CHAT\",\n\t\"POTION_TIMER\",\n\t\"POWER_ABBR\",\n\t\"POWER_DISPLAY_COST\",\n\t\"POWER_DISPLAY_COST_PER_TIME\",\n\t\"POWER_GAINS\",\n\t\"POWER_GAINS_COMBATLOG_TOOLTIP\",\n\t\"POWER_TYPE_BLOOD_POWER\",\n\t\"POWER_TYPE_HEAT\",\n\t\"POWER_TYPE_OOZE\",\n\t\"POWER_TYPE_PYRITE\",\n\t\"POWER_TYPE_STEAM\",\n\t\"POWER_TYPE_WRATH\",\n\t\"PREFERENCES\",\n\t\"PRESS_TAB\",\n\t\"PREV\",\n\t\"PREVIEW_TALENT_CHANGES\",\n\t\"PREVIOUS\",\n\t\"PRIEST_INTELLECT_TOOLTIP\",\n\t\"PRIMARY\",\n\t\"PRIMARY_SKILLS\",\n\t\"PROC_EVENT0_DESC\",\n\t\"PROC_EVENT1024_DESC\",\n\t\"PROC_EVENT128_DESC\",\n\t\"PROC_EVENT16_DESC\",\n\t\"PROC_EVENT1_DESC\",\n\t\"PROC_EVENT2048_DESC\",\n\t\"PROC_EVENT256_DESC\",\n\t\"PROC_EVENT2_DESC\",\n\t\"PROC_EVENT32_DESC\",\n\t\"PROC_EVENT3_DESC\",\n\t\"PROC_EVENT4_DESC\",\n\t\"PROC_EVENT512_DESC\",\n\t\"PROC_EVENT64_DESC\",\n\t\"PROC_EVENT8_DESC\",\n\t\"PROFANITY_FILTER\",\n\t\"PROFESSION_CONFIRMATION1\",\n\t\"PROFESSION_CONFIRMATION2\",\n\t\"PROFFESSION_CONFIRMATION2\",\n\t\"PROFICIENCIES\",\n\t\"PROFICIENCIES_COLON\",\n\t\"PROFICIENCY_NEEDED\",\n\t\"PROJECTED_TEXTURES\",\n\t\"PTT_BOUND\",\n\t\"PUBLICNOTE_BUTTON_TOOLTIP\",\n\t\"PUBLIC_NOTE\",\n\t\"PURCHASE\",\n\t\"PURCHASED_BY_COLON\",\n\t\"PURCHASE_TAB_TEXT\",\n\t\"PUSHTOTALK_SOUND_TEXT\",\n\t\"PUSH_TO_TALK\",\n\t\"PVP\",\n\t\"PVPBATTLEGROUND_WINTERGRASPTIMER\",\n\t\"PVPBATTLEGROUND_WINTERGRASPTIMER_CANNOT_QUEUE\",\n\t\"PVPBATTLEGROUND_WINTERGRASPTIMER_CAN_QUEUE\",\n\t\"PVPBATTLEGROUND_WINTERGRASPTIMER_TOOLTIP\",\n\t\"PVPFFA\",\n\t\"PVP_DISABLED\",\n\t\"PVP_ENABLED\",\n\t\"PVP_FLAG\",\n\t\"PVP_LABEL_ARENA\",\n\t\"PVP_LABEL_HONOR\",\n\t\"PVP_MEDAL1\",\n\t\"PVP_MEDAL2\",\n\t\"PVP_MEDAL3\",\n\t\"PVP_MEDAL4\",\n\t\"PVP_MEDAL5\",\n\t\"PVP_MEDAL6\",\n\t\"PVP_MEDAL7\",\n\t\"PVP_MEDAL8\",\n\t\"PVP_MINIMAP\",\n\t\"PVP_OPTIONS\",\n\t\"PVP_POLICY_URL\",\n\t\"PVP_RANK_0_0\",\n\t\"PVP_RANK_0_0_FEMALE\",\n\t\"PVP_RANK_0_1\",\n\t\"PVP_RANK_0_1_FEMALE\",\n\t\"PVP_RANK_10_0\",\n\t\"PVP_RANK_10_0_FEMALE\",\n\t\"PVP_RANK_10_1\",\n\t\"PVP_RANK_10_1_FEMALE\",\n\t\"PVP_RANK_11_0\",\n\t\"PVP_RANK_11_0_FEMALE\",\n\t\"PVP_RANK_11_1\",\n\t\"PVP_RANK_11_1_FEMALE\",\n\t\"PVP_RANK_12_0\",\n\t\"PVP_RANK_12_0_FEMALE\",\n\t\"PVP_RANK_12_1\",\n\t\"PVP_RANK_12_1_FEMALE\",\n\t\"PVP_RANK_13_0\",\n\t\"PVP_RANK_13_0_FEMALE\",\n\t\"PVP_RANK_13_1\",\n\t\"PVP_RANK_13_1_FEMALE\",\n\t\"PVP_RANK_14_0\",\n\t\"PVP_RANK_14_0_FEMALE\",\n\t\"PVP_RANK_14_1\",\n\t\"PVP_RANK_14_1_FEMALE\",\n\t\"PVP_RANK_15_0\",\n\t\"PVP_RANK_15_0_FEMALE\",\n\t\"PVP_RANK_15_1\",\n\t\"PVP_RANK_15_1_FEMALE\",\n\t\"PVP_RANK_16_0\",\n\t\"PVP_RANK_16_0_FEMALE\",\n\t\"PVP_RANK_16_1\",\n\t\"PVP_RANK_16_1_FEMALE\",\n\t\"PVP_RANK_17_0\",\n\t\"PVP_RANK_17_0_FEMALE\",\n\t\"PVP_RANK_17_1\",\n\t\"PVP_RANK_17_1_FEMALE\",\n\t\"PVP_RANK_18_0\",\n\t\"PVP_RANK_18_0_FEMALE\",\n\t\"PVP_RANK_18_1\",\n\t\"PVP_RANK_18_1_FEMALE\",\n\t\"PVP_RANK_19_0\",\n\t\"PVP_RANK_19_0_FEMALE\",\n\t\"PVP_RANK_19_1\",\n\t\"PVP_RANK_19_1_FEMALE\",\n\t\"PVP_RANK_1_0\",\n\t\"PVP_RANK_1_0_FEMALE\",\n\t\"PVP_RANK_1_1\",\n\t\"PVP_RANK_1_1_FEMALE\",\n\t\"PVP_RANK_2_0\",\n\t\"PVP_RANK_2_0_FEMALE\",\n\t\"PVP_RANK_2_1\",\n\t\"PVP_RANK_2_1_FEMALE\",\n\t\"PVP_RANK_3_0\",\n\t\"PVP_RANK_3_0_FEMALE\",\n\t\"PVP_RANK_3_1\",\n\t\"PVP_RANK_3_1_FEMALE\",\n\t\"PVP_RANK_4_0\",\n\t\"PVP_RANK_4_0_FEMALE\",\n\t\"PVP_RANK_4_1\",\n\t\"PVP_RANK_4_1_FEMALE\",\n\t\"PVP_RANK_5_0\",\n\t\"PVP_RANK_5_0_FEMALE\",\n\t\"PVP_RANK_5_1\",\n\t\"PVP_RANK_5_1_FEMALE\",\n\t\"PVP_RANK_6_0\",\n\t\"PVP_RANK_6_0_FEMALE\",\n\t\"PVP_RANK_6_1\",\n\t\"PVP_RANK_6_1_FEMALE\",\n\t\"PVP_RANK_7_0\",\n\t\"PVP_RANK_7_0_FEMALE\",\n\t\"PVP_RANK_7_1\",\n\t\"PVP_RANK_7_1_FEMALE\",\n\t\"PVP_RANK_8_0\",\n\t\"PVP_RANK_8_0_FEMALE\",\n\t\"PVP_RANK_8_1\",\n\t\"PVP_RANK_8_1_FEMALE\",\n\t\"PVP_RANK_9_0\",\n\t\"PVP_RANK_9_0_FEMALE\",\n\t\"PVP_RANK_9_1\",\n\t\"PVP_RANK_9_1_FEMALE\",\n\t\"PVP_RANK_LEADER\",\n\t\"PVP_RATING\",\n\t\"PVP_REPORT_AFK\",\n\t\"PVP_REPORT_AFK_ALL\",\n\t\"PVP_REPORT_AFK_ALREADY_NOTIFIED\",\n\t\"PVP_REPORT_AFK_GENERIC_FAILURE\",\n\t\"PVP_REPORT_AFK_NOT_SAME_TEAM\",\n\t\"PVP_REPORT_AFK_PLAYER_NOT_VALID\",\n\t\"PVP_REPORT_AFK_SUCCEEDED\",\n\t\"PVP_REPORT_AFK_SYSTEM_DISABLED\",\n\t\"PVP_REPORT_AFK_SYSTEM_ENABLED\",\n\t\"PVP_REQUIRED_FOR_CAPTURE\",\n\t\"PVP_TEAMSIZE\",\n\t\"PVP_TEAMTYPE\",\n\t\"PVP_TOGGLE_OFF_VERBOSE\",\n\t\"PVP_TOGGLE_ON_VERBOSE\",\n\t\"PVP_YOUR_RATING\",\n\t\"PVP_ZONE_OBJECTIVES\",\n\t\"QUALITY\",\n\t\"QUESTLOG_BUTTON\",\n\t\"QUESTLOG_NO_QUESTS_TEXT\",\n\t\"QUESTS_COLON\",\n\t\"QUESTS_LABEL\",\n\t\"QUESTS_SUBTEXT\",\n\t\"QUEST_ACCEPT\",\n\t\"QUEST_ACCEPT_LOG_FULL\",\n\t\"QUEST_COMPLETE\",\n\t\"QUEST_DASH\",\n\t\"QUEST_DESCRIPTION\",\n\t\"QUEST_DETAILS\",\n\t\"QUEST_FACTION_NEEDED\",\n\t\"QUEST_FACTION_NEEDED_NOPROGRESS\",\n\t\"QUEST_FAILED\",\n\t\"QUEST_FAILED_TAG\",\n\t\"QUEST_HARD\",\n\t\"QUEST_INTERMEDIATE_ITEMS_NEEDED\",\n\t\"QUEST_ITEMS_NEEDED\",\n\t\"QUEST_ITEMS_NEEDED_NOPROGRESS\",\n\t\"QUEST_LOG\",\n\t\"QUEST_LOG_COUNT_TEMPLATE\",\n\t\"QUEST_LOG_DAILY_COUNT_TEMPLATE\",\n\t\"QUEST_LOG_DAILY_TOOLTIP\",\n\t\"QUEST_MONSTERS_KILLED\",\n\t\"QUEST_MONSTERS_KILLED_NOPROGRESS\",\n\t\"QUEST_OBJECTIVES\",\n\t\"QUEST_OBJECTS_FOUND\",\n\t\"QUEST_OBJECTS_FOUND_NOPROGRESS\",\n\t\"QUEST_PLAYERS_KILLED\",\n\t\"QUEST_PLAYERS_KILLED_NOPROGRESS\",\n\t\"QUEST_REWARDS\",\n\t\"QUEST_SUGGESTED_GROUP_NUM\",\n\t\"QUEST_SUGGESTED_GROUP_NUM_TAG\",\n\t\"QUEST_TIMERS\",\n\t\"QUEST_TOOLTIP_ACTIVE\",\n\t\"QUEST_TOOLTIP_REQUIREMENTS\",\n\t\"QUEST_WATCH_NO_OBJECTIVES\",\n\t\"QUEST_WATCH_TOOLTIP\",\n\t\"QUEST_WATCH_TOO_MANY\",\n\t\"QUEUED_FOR\",\n\t\"QUEUED_FOR_SHORT\",\n\t\"QUEUE_TIME_UNAVAILABLE\",\n\t\"QUICKBUTTON_NAME_DEFAULT\",\n\t\"QUICKBUTTON_NAME_EVERYTHING\",\n\t\"QUICKBUTTON_NAME_EVERYTHING_TOOLTIP\",\n\t\"QUICKBUTTON_NAME_FRIENDS\",\n\t\"QUICKBUTTON_NAME_KILLS\",\n\t\"QUICKBUTTON_NAME_KILLS_TOOLTIP\",\n\t\"QUICKBUTTON_NAME_ME\",\n\t\"QUICKBUTTON_NAME_ME_TOOLTIP\",\n\t\"QUICKBUTTON_NAME_SELF\",\n\t\"QUICKBUTTON_NAME_SELF_TOOLTIP\",\n\t\"QUICK_BUTTON_COMBATLOG_TOOLTIP\",\n\t\"QUIT\",\n\t\"QUIT_NOW\",\n\t\"QUIT_TIMER\",\n\t\"RACE\",\n\t\"RACE_CLASS_ONLY\",\n\t\"RACIAL_SKILLS\",\n\t\"RAF_GRANT_LEVEL\",\n\t\"RAF_SUMMON\",\n\t\"RAF_SUMMON_LINKED\",\n\t\"RAF_SUMMON_WITH_COOLDOWN\",\n\t\"RAGE\",\n\t\"RAGE_COST\",\n\t\"RAGE_COST_PER_TIME\",\n\t\"RAID\",\n\t\"RAIDOPTIONS_MENU\",\n\t\"RAID_AND_PARTY\",\n\t\"RAID_ASSISTANT\",\n\t\"RAID_ASSISTANT_TOKEN\",\n\t\"RAID_BOSS_MESSAGE\",\n\t\"RAID_BROWSER_DESCRIPTION\",\n\t\"RAID_CONTROL\",\n\t\"RAID_DESCRIPTION\",\n\t\"RAID_DIFFICULTY\",\n\t\"RAID_DIFFICULTY1\",\n\t\"RAID_DIFFICULTY2\",\n\t\"RAID_DIFFICULTY3\",\n\t\"RAID_DIFFICULTY4\",\n\t\"RAID_DIFFICULTY_10PLAYER\",\n\t\"RAID_DIFFICULTY_10PLAYER_HEROIC\",\n\t\"RAID_DIFFICULTY_20PLAYER\",\n\t\"RAID_DIFFICULTY_25PLAYER\",\n\t\"RAID_DIFFICULTY_25PLAYER_HEROIC\",\n\t\"RAID_DIFFICULTY_40PLAYER\",\n\t\"RAID_GROUPS\",\n\t\"RAID_INFO\",\n\t\"RAID_INFORMATION\",\n\t\"RAID_INFO_DESC\",\n\t\"RAID_INSTANCE_EXPIRED\",\n\t\"RAID_INSTANCE_EXPIRES\",\n\t\"RAID_INSTANCE_EXPIRES_EXPIRED\",\n\t\"RAID_INSTANCE_EXPIRES_EXTENDED\",\n\t\"RAID_INSTANCE_INFO_FMT\",\n\t\"RAID_INSTANCE_INFO_HDR\",\n\t\"RAID_INSTANCE_LOCK_EXTENDED\",\n\t\"RAID_INSTANCE_LOCK_NOT_EXTENDED\",\n\t\"RAID_INSTANCE_WARNING_HOURS\",\n\t\"RAID_INSTANCE_WARNING_MIN\",\n\t\"RAID_INSTANCE_WARNING_MIN_SOON\",\n\t\"RAID_INSTANCE_WELCOME\",\n\t\"RAID_INSTANCE_WELCOME_DH\",\n\t\"RAID_INSTANCE_WELCOME_EXTENDED\",\n\t\"RAID_INSTANCE_WELCOME_HM\",\n\t\"RAID_INSTANCE_WELCOME_LOCKED\",\n\t\"RAID_INSTANCE_WELCOME_LOCKED_EXTENDED\",\n\t\"RAID_LEADER\",\n\t\"RAID_LEADER_TOKEN\",\n\t\"RAID_MEMBERS_AFK\",\n\t\"RAID_MEMBER_NOT_READY\",\n\t\"RAID_MESSAGE\",\n\t\"RAID_SILENCE\",\n\t\"RAID_TARGET_1\",\n\t\"RAID_TARGET_2\",\n\t\"RAID_TARGET_3\",\n\t\"RAID_TARGET_4\",\n\t\"RAID_TARGET_5\",\n\t\"RAID_TARGET_6\",\n\t\"RAID_TARGET_7\",\n\t\"RAID_TARGET_8\",\n\t\"RAID_TARGET_ICON\",\n\t\"RAID_TARGET_NONE\",\n\t\"RAID_UNSILENCE\",\n\t\"RAID_WARNING\",\n\t\"RAID_WARNING_MESSAGE\",\n\t\"RALT_KEY_TEXT\",\n\t\"RANDOM_BATTLEGROUND\",\n\t\"RANDOM_BATTLEGROUND_EXPLANATION\",\n\t\"RANDOM_DUNGEON_IS_READY\",\n\t\"RANDOM_ROLL_RESULT\",\n\t\"RANGED\",\n\t\"RANGEDSLOT\",\n\t\"RANGED_ATTACK\",\n\t\"RANGED_ATTACK_POWER\",\n\t\"RANGED_ATTACK_POWER_TOOLTIP\",\n\t\"RANGED_ATTACK_TOOLTIP\",\n\t\"RANGED_COMBATLOG_TOOLTIP\",\n\t\"RANGED_CRIT_CHANCE\",\n\t\"RANGED_DAMAGE_TOOLTIP\",\n\t\"RANGE_DAMAGE_COMBATLOG_TOOLTIP\",\n\t\"RANGE_MISSED_COMBATLOG_TOOLTIP\",\n\t\"RANK\",\n\t\"RANK_COLON\",\n\t\"RANK_POSITION\",\n\t\"RARITY\",\n\t\"RATING\",\n\t\"RATINGS_MENU\",\n\t\"RATINGS_TEXT\",\n\t\"RATING_CHANGE_TOOLTIP\",\n\t\"RCTRL_KEY_TEXT\",\n\t\"REACTIVATE_RAID_LOCK\",\n\t\"READY\",\n\t\"READY_CHECK\",\n\t\"READY_CHECK_ALL_READY\",\n\t\"READY_CHECK_FINISHED\",\n\t\"READY_CHECK_MESSAGE\",\n\t\"READY_CHECK_NO_AFK\",\n\t\"READY_CHECK_START\",\n\t\"READY_CHECK_YOU_WERE_AFK\",\n\t\"RECOVER_CORPSE\",\n\t\"RECOVER_CORPSE_INSTANCE\",\n\t\"RECOVER_CORPSE_TIMER\",\n\t\"RED_GEM\",\n\t\"REFLECT\",\n\t\"REFRESH\",\n\t\"REFRESH_RATE\",\n\t\"REFUND_TIME_REMAINING\",\n\t\"RELICSLOT\",\n\t\"REMOVE\",\n\t\"REMOVE_BLOCK\",\n\t\"REMOVE_CHAT_DELAY_TEXT\",\n\t\"REMOVE_FRIEND\",\n\t\"REMOVE_FRIEND_CONFIRMATION\",\n\t\"REMOVE_GUILDMEMBER_LABEL\",\n\t\"REMOVE_IGNORE\",\n\t\"REMOVE_MODERATOR\",\n\t\"REMOVE_MUTE\",\n\t\"REMOVE_PLAYER\",\n\t\"RENAME_ARENA_TEAM\",\n\t\"RENAME_ARENA_TEAM_LABEL\",\n\t\"RENAME_CHAT_WINDOW\",\n\t\"RENAME_GUILD\",\n\t\"RENAME_GUILD_LABEL\",\n\t\"REPAIR_ALL_ITEMS\",\n\t\"REPAIR_AN_ITEM\",\n\t\"REPAIR_COST\",\n\t\"REPAIR_ITEMS\",\n\t\"REPLACE_ENCHANT\",\n\t\"REPLY_MESSAGE\",\n\t\"REPORT_MULTIPLE_PVP_AFK_SENT\",\n\t\"REPORT_PHYSICAL_HARASSMENT\",\n\t\"REPORT_PVP_AFK_SENT\",\n\t\"REPORT_SPAM\",\n\t\"REPORT_SPAM_CONFIRMATION\",\n\t\"REPORT_VERBAL_HARASSMENT\",\n\t\"REPUTATION\",\n\t\"REPUTATION_ABBR\",\n\t\"REPUTATION_AT_WAR_DESCRIPTION\",\n\t\"REPUTATION_FACTION_DESCRIPTION\",\n\t\"REPUTATION_MOVE_TO_INACTIVE\",\n\t\"REPUTATION_SHOW_AS_XP\",\n\t\"REPUTATION_STANDING_DESCRIPTION\",\n\t\"REPUTATION_STATUS_AT_PEACE\",\n\t\"REPUTATION_STATUS_AT_WAR\",\n\t\"REPUTATION_STATUS_NOT_AT_PEACE\",\n\t\"REPUTATION_STATUS_PERMANENT_AT_PEACE\",\n\t\"REPUTATION_STATUS_PERMANENT_AT_WAR\",\n\t\"REQUEST_SIGNATURE\",\n\t\"REQUIRED_MONEY\",\n\t\"REQUIRES_LABEL\",\n\t\"REQUIRES_RUNIC_POWER\",\n\t\"RESET\",\n\t\"RESETS_IN\",\n\t\"RESET_ALL_WINDOWS\",\n\t\"RESET_CHAT_WINDOW\",\n\t\"RESET_FAILED_NOTIFY\",\n\t\"RESET_INSTANCES\",\n\t\"RESET_TO_DEFAULT\",\n\t\"RESET_TUTORIALS\",\n\t\"RESILIENCE\",\n\t\"RESILIENCE_ABBR\",\n\t\"RESILIENCE_TOOLTIP\",\n\t\"RESIST\",\n\t\"RESISTANCE0_NAME\",\n\t\"RESISTANCE1_NAME\",\n\t\"RESISTANCE2_NAME\",\n\t\"RESISTANCE3_NAME\",\n\t\"RESISTANCE4_NAME\",\n\t\"RESISTANCE5_NAME\",\n\t\"RESISTANCE6_NAME\",\n\t\"RESISTANCE_EXCELLENT\",\n\t\"RESISTANCE_FAIR\",\n\t\"RESISTANCE_GOOD\",\n\t\"RESISTANCE_LABEL\",\n\t\"RESISTANCE_NONE\",\n\t\"RESISTANCE_POOR\",\n\t\"RESISTANCE_TEMPLATE\",\n\t\"RESISTANCE_TOOLTIP_SUBTEXT\",\n\t\"RESISTANCE_TYPE0\",\n\t\"RESISTANCE_TYPE1\",\n\t\"RESISTANCE_TYPE2\",\n\t\"RESISTANCE_TYPE3\",\n\t\"RESISTANCE_TYPE4\",\n\t\"RESISTANCE_TYPE5\",\n\t\"RESISTANCE_TYPE6\",\n\t\"RESISTANCE_VERYGOOD\",\n\t\"RESIST_TRAILER\",\n\t\"RESOLUTION\",\n\t\"RESOLUTION_LABEL\",\n\t\"RESOLUTION_SUBTEXT\",\n\t\"RESURRECT\",\n\t\"RESURRECTABLE\",\n\t\"RESURRECT_REQUEST\",\n\t\"RESURRECT_REQUEST_NO_SICKNESS\",\n\t\"RESURRECT_REQUEST_NO_SICKNESS_TIMER\",\n\t\"RESURRECT_REQUEST_TIMER\",\n\t\"RETRIEVING_ITEM_INFO\",\n\t\"RETURN_TO_GAME\",\n\t\"RETURN_TO_WORLD\",\n\t\"REWARD_AURA\",\n\t\"REWARD_CHOICES\",\n\t\"REWARD_CHOOSE\",\n\t\"REWARD_ITEMS\",\n\t\"REWARD_ITEMS_ONLY\",\n\t\"REWARD_REPUTATION\",\n\t\"REWARD_REPUTATION_TEXT\",\n\t\"REWARD_SPELL\",\n\t\"REWARD_TITLE\",\n\t\"REWARD_TRADESKILL_SPELL\",\n\t\"RID_FRIEND_REQUEST_INFO\",\n\t\"RIGHT_CLICK_MESSAGE\",\n\t\"ROGUE_AGILITY_TOOLTIP\",\n\t\"ROLE\",\n\t\"ROLE_CHECK_IN_PROGRESS_TOOLTIP\",\n\t\"ROLE_DESCRIPTION1\",\n\t\"ROLE_DESCRIPTION2\",\n\t\"ROLE_DESCRIPTION3\",\n\t\"ROLL_DISENCHANT\",\n\t\"ROLL_DISENCHANT_NEWBIE\",\n\t\"ROTATE_MINIMAP\",\n\t\"RSHIFT_KEY_TEXT\",\n\t\"RUNES\",\n\t\"RUNE_COST_BLOOD\",\n\t\"RUNE_COST_FROST\",\n\t\"RUNE_COST_ONGOING\",\n\t\"RUNE_COST_UNHOLY\",\n\t\"RUNIC_POWER\",\n\t\"RUNIC_POWER_COST\",\n\t\"RUNIC_POWER_COST_PER_TIME\",\n\t\"RURU\",\n\t\"RUSSIAN_DECLENSION\",\n\t\"RUSSIAN_DECLENSION_1\",\n\t\"RUSSIAN_DECLENSION_2\",\n\t\"RUSSIAN_DECLENSION_3\",\n\t\"RUSSIAN_DECLENSION_4\",\n\t\"RUSSIAN_DECLENSION_5\",\n\t\"RUSSIAN_DECLENSION_EXAMPLE_1\",\n\t\"RUSSIAN_DECLENSION_EXAMPLE_2\",\n\t\"RUSSIAN_DECLENSION_EXAMPLE_3\",\n\t\"RUSSIAN_DECLENSION_EXAMPLE_4\",\n\t\"RUSSIAN_DECLENSION_EXAMPLE_5\",\n\t\"SALE_PRICE_COLON\",\n\t\"SANCTUARY_TERRITORY\",\n\t\"SAVE\",\n\t\"SAVE_CHANGES\",\n\t\"SAY\",\n\t\"SAY_MESSAGE\",\n\t\"SCORE_DAMAGE_DONE\",\n\t\"SCORE_FLAGS_CAPTURED\",\n\t\"SCORE_FLAGS_RETURNED\",\n\t\"SCORE_HEALING_DONE\",\n\t\"SCORE_HONORABLE_KILLS\",\n\t\"SCORE_HONOR_GAINED\",\n\t\"SCORE_KILLING_BLOWS\",\n\t\"SCORE_POWER_UPS\",\n\t\"SCORE_RATING_CHANGE\",\n\t\"SCORE_TEAM_SKILL\",\n\t\"SCREENSHOT_FAILURE\",\n\t\"SCREENSHOT_SUCCESS\",\n\t\"SEARCH\",\n\t\"SEARCHING_FOR_GROUPS_NEEDS\",\n\t\"SEARCHING_FOR_ITEMS\",\n\t\"SECONDARY\",\n\t\"SECONDARYHANDSLOT\",\n\t\"SECONDARY_SKILLS\",\n\t\"SECONDS\",\n\t\"SECONDS_ABBR\",\n\t\"SECOND_NUMBER_CAP\",\n\t\"SECOND_ONELETTER_ABBR\",\n\t\"SECURE_ABILITY_TOGGLE\",\n\t\"SELECT_CATEGORY\",\n\t\"SELFMUTED\",\n\t\"SELL_PRICE\",\n\t\"SENDMAIL\",\n\t\"SENDMAIL_TEXT\",\n\t\"SEND_BUG\",\n\t\"SEND_LABEL\",\n\t\"SEND_MAIL_COST\",\n\t\"SEND_MESSAGE\",\n\t\"SEND_MONEY\",\n\t\"SEND_MONEY_CONFIRMATION\",\n\t\"SEND_REQUEST\",\n\t\"SEND_SUGGEST\",\n\t\"SERVER_CHANNELS\",\n\t\"SERVER_FIRST_ACHIEVEMENT\",\n\t\"SERVER_MESSAGE_COLON\",\n\t\"SERVER_MESSAGE_PREFIX\",\n\t\"SETTINGS\",\n\t\"SET_COMMENT_LABEL\",\n\t\"SET_FOCUS\",\n\t\"SET_FRIENDNOTE_LABEL\",\n\t\"SET_GUILDMOTD_LABEL\",\n\t\"SET_GUILDOFFICERNOTE_LABEL\",\n\t\"SET_GUILDPLAYERNOTE_LABEL\",\n\t\"SET_MAIN_ASSIST\",\n\t\"SET_MAIN_TANK\",\n\t\"SET_NOTE\",\n\t\"SET_RAID_ASSISTANT\",\n\t\"SET_RAID_LEADER\",\n\t\"SHADOW_QUALITY\",\n\t\"SHAMAN_INTELLECT_TOOLTIP\",\n\t\"SHAMAN_STRENGTH_TOOLTIP\",\n\t\"SHARDS\",\n\t\"SHARE_QUEST\",\n\t\"SHARE_QUEST_ABBREV\",\n\t\"SHARE_QUEST_TEXT\",\n\t\"SHIELDSLOT\",\n\t\"SHIELD_BLOCK_TEMPLATE\",\n\t\"SHIFT_KEY\",\n\t\"SHIFT_KEY_TEXT\",\n\t\"SHIRTSLOT\",\n\t\"SHORTDATE\",\n\t\"SHOULDERSLOT\",\n\t\"SHOW_ALL_SPELL_RANKS\",\n\t\"SHOW_ARENA_ENEMY_CASTBAR_TEXT\",\n\t\"SHOW_ARENA_ENEMY_FRAMES_TEXT\",\n\t\"SHOW_ARENA_ENEMY_PETS_TEXT\",\n\t\"SHOW_BATTLEFIELDMINIMAP_PLAYERS\",\n\t\"SHOW_BATTLENET_TOASTS\",\n\t\"SHOW_BRACES\",\n\t\"SHOW_BRACES_COMBATLOG_TOOLTIP\",\n\t\"SHOW_BUFFS\",\n\t\"SHOW_BUFF_DURATION_TEXT\",\n\t\"SHOW_CASTABLE_BUFFS_TEXT\",\n\t\"SHOW_CASTABLE_DEBUFFS_TEXT\",\n\t\"SHOW_CHAT_ICONS\",\n\t\"SHOW_CLASS_COLOR\",\n\t\"SHOW_CLASS_COLOR_IN_V_KEY\",\n\t\"SHOW_CLOAK\",\n\t\"SHOW_CLOCK\",\n\t\"SHOW_COMBAT_HEALING\",\n\t\"SHOW_COMBAT_TEXT_TEXT\",\n\t\"SHOW_DAMAGE_TEXT\",\n\t\"SHOW_DEBUFFS\",\n\t\"SHOW_DISPELLABLE_DEBUFFS_TEXT\",\n\t\"SHOW_ENEMY_CAST\",\n\t\"SHOW_FACTION_ON_MAINSCREEN\",\n\t\"SHOW_FREE_BAG_SLOTS_TEXT\",\n\t\"SHOW_FRIENDS_LIST\",\n\t\"SHOW_FULLSCREEN_STATUS_TEXT\",\n\t\"SHOW_GUILD_NAMES\",\n\t\"SHOW_HELM\",\n\t\"SHOW_IGNORE_LIST\",\n\t\"SHOW_ITEM_LEVEL\",\n\t\"SHOW_LOOT_SPAM\",\n\t\"SHOW_LUA_ERRORS\",\n\t\"SHOW_MAP\",\n\t\"SHOW_MULTIBAR1_TEXT\",\n\t\"SHOW_MULTIBAR2_TEXT\",\n\t\"SHOW_MULTIBAR3_TEXT\",\n\t\"SHOW_MULTIBAR4_TEXT\",\n\t\"SHOW_NEWBIE_TIPS_TEXT\",\n\t\"SHOW_NPC_NAMES\",\n\t\"SHOW_NUMERIC_THREAT\",\n\t\"SHOW_OFFLINE_MEMBERS\",\n\t\"SHOW_ON_BACKPACK\",\n\t\"SHOW_OTHER_TARGET_EFFECTS\",\n\t\"SHOW_OWN_NAME\",\n\t\"SHOW_PARTY_BACKGROUND_TEXT\",\n\t\"SHOW_PARTY_PETS_TEXT\",\n\t\"SHOW_PARTY_TEXT_TEXT\",\n\t\"SHOW_PET_MELEE_DAMAGE\",\n\t\"SHOW_PET_NAMEPLATES\",\n\t\"SHOW_PET_SPELL_DAMAGE\",\n\t\"SHOW_PLAYER_NAMES\",\n\t\"SHOW_PLAYER_TITLES\",\n\t\"SHOW_QUEST_FADING_TEXT\",\n\t\"SHOW_QUEST_OBJECTIVES_ON_MAP_TEXT\",\n\t\"SHOW_QUICK_BUTTON\",\n\t\"SHOW_RAID_RANGE_TEXT\",\n\t\"SHOW_TARGET\",\n\t\"SHOW_TARGET_CASTBAR\",\n\t\"SHOW_TARGET_CASTBAR_IN_V_KEY\",\n\t\"SHOW_TARGET_EFFECTS\",\n\t\"SHOW_TARGET_OF_TARGET_TEXT\",\n\t\"SHOW_TIMESTAMP\",\n\t\"SHOW_TIPOFTHEDAY_TEXT\",\n\t\"SHOW_TOAST_BROADCAST_TEXT\",\n\t\"SHOW_TOAST_CONVERSATION_TEXT\",\n\t\"SHOW_TOAST_FRIEND_REQUEST_TEXT\",\n\t\"SHOW_TOAST_OFFLINE_TEXT\",\n\t\"SHOW_TOAST_ONLINE_TEXT\",\n\t\"SHOW_TOAST_WINDOW_TEXT\",\n\t\"SHOW_TUTORIALS\",\n\t\"SHOW_UNIT_NAMES\",\n\t\"SIGN_CHARTER\",\n\t\"SILVER_AMOUNT\",\n\t\"SILVER_AMOUNT_SYMBOL\",\n\t\"SILVER_AMOUNT_TEXTURE\",\n\t\"SIMPLE_CHAT_OPTION_ENABLE_INTERRUPT\",\n\t\"SIMPLE_CHAT_TEXT\",\n\t\"SIMPLE_QUEST_WATCH_TEXT\",\n\t\"SINGLE_DAMAGE_TEMPLATE\",\n\t\"SINGLE_DAMAGE_TEMPLATE_WITH_SCHOOL\",\n\t\"SINGLE_PAGE_RESULTS_TEMPLATE\",\n\t\"SKILL\",\n\t\"SKILLS\",\n\t\"SKILLS_ABBR\",\n\t\"SKILLUPS\",\n\t\"SKILL_DESCRIPTION\",\n\t\"SKILL_INCREMENT_COST\",\n\t\"SKILL_INCREMENT_COST_SINGULAR\",\n\t\"SKILL_LEARNING_COST\",\n\t\"SKILL_LEARNING_COST_SINGULAR\",\n\t\"SKILL_LEVEL\",\n\t\"SKILL_POINTS_TOOLTIP\",\n\t\"SKILL_RANK_UP\",\n\t\"SKIN_COLOR\",\n\t\"SLASH_ACHIEVEMENTUI1\",\n\t\"SLASH_ACHIEVEMENTUI2\",\n\t\"SLASH_ACHIEVEMENTUI3\",\n\t\"SLASH_ACHIEVEMENTUI4\",\n\t\"SLASH_ACHIEVEMENTUI5\",\n\t\"SLASH_ACHIEVEMENTUI6\",\n\t\"SLASH_ACHIEVEMENTUI7\",\n\t\"SLASH_ACHIEVEMENTUI8\",\n\t\"SLASH_ASSIST1\",\n\t\"SLASH_ASSIST2\",\n\t\"SLASH_ASSIST3\",\n\t\"SLASH_ASSIST4\",\n\t\"SLASH_BATTLEGROUND1\",\n\t\"SLASH_BATTLEGROUND2\",\n\t\"SLASH_BATTLEGROUND3\",\n\t\"SLASH_BATTLEGROUND4\",\n\t\"SLASH_BENCHMARK1\",\n\t\"SLASH_BENCHMARK2\",\n\t\"SLASH_CALENDAR1\",\n\t\"SLASH_CALENDAR2\",\n\t\"SLASH_CANCELAURA1\",\n\t\"SLASH_CANCELAURA2\",\n\t\"SLASH_CANCELFORM1\",\n\t\"SLASH_CANCELFORM2\",\n\t\"SLASH_CAST1\",\n\t\"SLASH_CAST2\",\n\t\"SLASH_CAST3\",\n\t\"SLASH_CAST4\",\n\t\"SLASH_CASTRANDOM1\",\n\t\"SLASH_CASTRANDOM2\",\n\t\"SLASH_CASTSEQUENCE1\",\n\t\"SLASH_CASTSEQUENCE2\",\n\t\"SLASH_CHANGEACTIONBAR1\",\n\t\"SLASH_CHANGEACTIONBAR2\",\n\t\"SLASH_CHANNEL1\",\n\t\"SLASH_CHANNEL2\",\n\t\"SLASH_CHANNEL3\",\n\t\"SLASH_CHANNEL4\",\n\t\"SLASH_CHATLOG1\",\n\t\"SLASH_CHATLOG2\",\n\t\"SLASH_CHAT_AFK1\",\n\t\"SLASH_CHAT_AFK2\",\n\t\"SLASH_CHAT_AFK3\",\n\t\"SLASH_CHAT_AFK4\",\n\t\"SLASH_CHAT_ANNOUNCE1\",\n\t\"SLASH_CHAT_ANNOUNCE2\",\n\t\"SLASH_CHAT_ANNOUNCE3\",\n\t\"SLASH_CHAT_ANNOUNCE4\",\n\t\"SLASH_CHAT_BAN1\",\n\t\"SLASH_CHAT_BAN2\",\n\t\"SLASH_CHAT_CINVITE1\",\n\t\"SLASH_CHAT_CINVITE2\",\n\t\"SLASH_CHAT_CINVITE3\",\n\t\"SLASH_CHAT_CINVITE4\",\n\t\"SLASH_CHAT_DND1\",\n\t\"SLASH_CHAT_DND2\",\n\t\"SLASH_CHAT_DND3\",\n\t\"SLASH_CHAT_DND4\",\n\t\"SLASH_CHAT_DND5\",\n\t\"SLASH_CHAT_DND6\",\n\t\"SLASH_CHAT_HELP1\",\n\t\"SLASH_CHAT_HELP2\",\n\t\"SLASH_CHAT_HELP3\",\n\t\"SLASH_CHAT_HELP4\",\n\t\"SLASH_CHAT_HELP5\",\n\t\"SLASH_CHAT_KICK1\",\n\t\"SLASH_CHAT_KICK2\",\n\t\"SLASH_CHAT_MODERATE1\",\n\t\"SLASH_CHAT_MODERATE2\",\n\t\"SLASH_CHAT_MODERATOR1\",\n\t\"SLASH_CHAT_MODERATOR2\",\n\t\"SLASH_CHAT_MODERATOR3\",\n\t\"SLASH_CHAT_MODERATOR4\",\n\t\"SLASH_CHAT_MUTE1\",\n\t\"SLASH_CHAT_MUTE2\",\n\t\"SLASH_CHAT_MUTE3\",\n\t\"SLASH_CHAT_MUTE4\",\n\t\"SLASH_CHAT_MUTE5\",\n\t\"SLASH_CHAT_MUTE6\",\n\t\"SLASH_CHAT_OWNER1\",\n\t\"SLASH_CHAT_OWNER2\",\n\t\"SLASH_CHAT_PASSWORD1\",\n\t\"SLASH_CHAT_PASSWORD2\",\n\t\"SLASH_CHAT_PASSWORD3\",\n\t\"SLASH_CHAT_PASSWORD4\",\n\t\"SLASH_CHAT_PASSWORD5\",\n\t\"SLASH_CHAT_UNBAN1\",\n\t\"SLASH_CHAT_UNBAN2\",\n\t\"SLASH_CHAT_UNMODERATOR1\",\n\t\"SLASH_CHAT_UNMODERATOR2\",\n\t\"SLASH_CHAT_UNMODERATOR3\",\n\t\"SLASH_CHAT_UNMODERATOR4\",\n\t\"SLASH_CHAT_UNMUTE1\",\n\t\"SLASH_CHAT_UNMUTE2\",\n\t\"SLASH_CHAT_UNMUTE3\",\n\t\"SLASH_CHAT_UNMUTE4\",\n\t\"SLASH_CHAT_UNMUTE5\",\n\t\"SLASH_CHAT_UNMUTE6\",\n\t\"SLASH_CLEAR1\",\n\t\"SLASH_CLEAR2\",\n\t\"SLASH_CLEARFOCUS1\",\n\t\"SLASH_CLEARFOCUS2\",\n\t\"SLASH_CLEARMAINASSIST1\",\n\t\"SLASH_CLEARMAINASSIST2\",\n\t\"SLASH_CLEARMAINASSIST3\",\n\t\"SLASH_CLEARMAINASSIST4\",\n\t\"SLASH_CLEARMAINTANK1\",\n\t\"SLASH_CLEARMAINTANK2\",\n\t\"SLASH_CLEARMAINTANK3\",\n\t\"SLASH_CLEARMAINTANK4\",\n\t\"SLASH_CLEARTARGET1\",\n\t\"SLASH_CLEARTARGET2\",\n\t\"SLASH_CLICK1\",\n\t\"SLASH_CLICK2\",\n\t\"SLASH_COMBATLOG1\",\n\t\"SLASH_COMBATLOG2\",\n\t\"SLASH_CONSOLE1\",\n\t\"SLASH_CONSOLE2\",\n\t\"SLASH_DISABLE_ADDONS1\",\n\t\"SLASH_DISMOUNT1\",\n\t\"SLASH_DISMOUNT2\",\n\t\"SLASH_DUEL1\",\n\t\"SLASH_DUEL2\",\n\t\"SLASH_DUEL_CANCEL1\",\n\t\"SLASH_DUEL_CANCEL2\",\n\t\"SLASH_DUEL_CANCEL3\",\n\t\"SLASH_DUEL_CANCEL4\",\n\t\"SLASH_DUEL_CANCEL5\",\n\t\"SLASH_DUEL_CANCEL6\",\n\t\"SLASH_DUMP1\",\n\t\"SLASH_DUMP2\",\n\t\"SLASH_DUNGEONS1\",\n\t\"SLASH_DUNGEONS2\",\n\t\"SLASH_DUNGEONS3\",\n\t\"SLASH_DUNGEONS4\",\n\t\"SLASH_DUNGEONS5\",\n\t\"SLASH_DUNGEONS6\",\n\t\"SLASH_EMOTE1\",\n\t\"SLASH_EMOTE2\",\n\t\"SLASH_EMOTE3\",\n\t\"SLASH_EMOTE4\",\n\t\"SLASH_EMOTE5\",\n\t\"SLASH_EMOTE6\",\n\t\"SLASH_EMOTE7\",\n\t\"SLASH_EMOTE8\",\n\t\"SLASH_ENABLE_ADDONS1\",\n\t\"SLASH_EQUIP1\",\n\t\"SLASH_EQUIP2\",\n\t\"SLASH_EQUIP3\",\n\t\"SLASH_EQUIP4\",\n\t\"SLASH_EQUIP_SET1\",\n\t\"SLASH_EQUIP_SET2\",\n\t\"SLASH_EQUIP_TO_SLOT1\",\n\t\"SLASH_EQUIP_TO_SLOT2\",\n\t\"SLASH_EVENTTRACE1\",\n\t\"SLASH_EVENTTRACE2\",\n\t\"SLASH_EVENTTRACE3\",\n\t\"SLASH_EVENTTRACE4\",\n\t\"SLASH_FOCUS1\",\n\t\"SLASH_FOCUS2\",\n\t\"SLASH_FOLLOW1\",\n\t\"SLASH_FOLLOW2\",\n\t\"SLASH_FOLLOW3\",\n\t\"SLASH_FOLLOW4\",\n\t\"SLASH_FOLLOW5\",\n\t\"SLASH_FOLLOW6\",\n\t\"SLASH_FOLLOW7\",\n\t\"SLASH_FRAMESTACK1\",\n\t\"SLASH_FRAMESTACK2\",\n\t\"SLASH_FRAMESTACK3\",\n\t\"SLASH_FRAMESTACK4\",\n\t\"SLASH_FRIENDS1\",\n\t\"SLASH_FRIENDS2\",\n\t\"SLASH_FRIENDS3\",\n\t\"SLASH_FRIENDS4\",\n\t\"SLASH_GUILD1\",\n\t\"SLASH_GUILD2\",\n\t\"SLASH_GUILD3\",\n\t\"SLASH_GUILD4\",\n\t\"SLASH_GUILD5\",\n\t\"SLASH_GUILD6\",\n\t\"SLASH_GUILD7\",\n\t\"SLASH_GUILD8\",\n\t\"SLASH_GUILD9\",\n\t\"SLASH_GUILD_DEMOTE1\",\n\t\"SLASH_GUILD_DEMOTE2\",\n\t\"SLASH_GUILD_DEMOTE3\",\n\t\"SLASH_GUILD_DEMOTE4\",\n\t\"SLASH_GUILD_DISBAND1\",\n\t\"SLASH_GUILD_DISBAND2\",\n\t\"SLASH_GUILD_DISBAND3\",\n\t\"SLASH_GUILD_DISBAND4\",\n\t\"SLASH_GUILD_HELP1\",\n\t\"SLASH_GUILD_HELP2\",\n\t\"SLASH_GUILD_HELP3\",\n\t\"SLASH_GUILD_HELP4\",\n\t\"SLASH_GUILD_HELP5\",\n\t\"SLASH_GUILD_INFO1\",\n\t\"SLASH_GUILD_INFO2\",\n\t\"SLASH_GUILD_INFO3\",\n\t\"SLASH_GUILD_INFO4\",\n\t\"SLASH_GUILD_INVITE1\",\n\t\"SLASH_GUILD_INVITE2\",\n\t\"SLASH_GUILD_INVITE3\",\n\t\"SLASH_GUILD_INVITE4\",\n\t\"SLASH_GUILD_LEADER1\",\n\t\"SLASH_GUILD_LEADER2\",\n\t\"SLASH_GUILD_LEADER3\",\n\t\"SLASH_GUILD_LEADER4\",\n\t\"SLASH_GUILD_LEADER_REPLACE\",\n\t\"SLASH_GUILD_LEAVE1\",\n\t\"SLASH_GUILD_LEAVE2\",\n\t\"SLASH_GUILD_LEAVE3\",\n\t\"SLASH_GUILD_LEAVE4\",\n\t\"SLASH_GUILD_MOTD1\",\n\t\"SLASH_GUILD_MOTD2\",\n\t\"SLASH_GUILD_MOTD3\",\n\t\"SLASH_GUILD_MOTD4\",\n\t\"SLASH_GUILD_PROMOTE1\",\n\t\"SLASH_GUILD_PROMOTE2\",\n\t\"SLASH_GUILD_PROMOTE3\",\n\t\"SLASH_GUILD_PROMOTE4\",\n\t\"SLASH_GUILD_ROSTER1\",\n\t\"SLASH_GUILD_ROSTER2\",\n\t\"SLASH_GUILD_ROSTER3\",\n\t\"SLASH_GUILD_ROSTER4\",\n\t\"SLASH_GUILD_UNINVITE1\",\n\t\"SLASH_GUILD_UNINVITE2\",\n\t\"SLASH_GUILD_UNINVITE3\",\n\t\"SLASH_GUILD_UNINVITE4\",\n\t\"SLASH_GUILD_WHO1\",\n\t\"SLASH_GUILD_WHO2\",\n\t\"SLASH_GUILD_WHO3\",\n\t\"SLASH_GUILD_WHO4\",\n\t\"SLASH_GUILD_WHO5\",\n\t\"SLASH_GUILD_WHO6\",\n\t\"SLASH_HELP1\",\n\t\"SLASH_HELP2\",\n\t\"SLASH_HELP3\",\n\t\"SLASH_HELP4\",\n\t\"SLASH_HELP5\",\n\t\"SLASH_HELP6\",\n\t\"SLASH_IGNORE1\",\n\t\"SLASH_IGNORE2\",\n\t\"SLASH_INSPECT1\",\n\t\"SLASH_INSPECT2\",\n\t\"SLASH_INSPECT3\",\n\t\"SLASH_INSPECT4\",\n\t\"SLASH_INVITE1\",\n\t\"SLASH_INVITE2\",\n\t\"SLASH_INVITE3\",\n\t\"SLASH_INVITE4\",\n\t\"SLASH_INVITE5\",\n\t\"SLASH_INVITE6\",\n\t\"SLASH_INVITE7\",\n\t\"SLASH_JOIN1\",\n\t\"SLASH_JOIN2\",\n\t\"SLASH_JOIN3\",\n\t\"SLASH_JOIN4\",\n\t\"SLASH_JOIN5\",\n\t\"SLASH_JOIN6\",\n\t\"SLASH_JOIN7\",\n\t\"SLASH_LEAVE1\",\n\t\"SLASH_LEAVE2\",\n\t\"SLASH_LEAVE3\",\n\t\"SLASH_LEAVE4\",\n\t\"SLASH_LEAVE5\",\n\t\"SLASH_LEAVE6\",\n\t\"SLASH_LEAVE7\",\n\t\"SLASH_LEAVEVEHICLE1\",\n\t\"SLASH_LEAVEVEHICLE2\",\n\t\"SLASH_LIST_CHANNEL1\",\n\t\"SLASH_LIST_CHANNEL2\",\n\t\"SLASH_LIST_CHANNEL3\",\n\t\"SLASH_LIST_CHANNEL4\",\n\t\"SLASH_LIST_CHANNEL5\",\n\t\"SLASH_LIST_CHANNEL6\",\n\t\"SLASH_LIST_CHANNEL7\",\n\t\"SLASH_LOGOUT1\",\n\t\"SLASH_LOGOUT2\",\n\t\"SLASH_LOGOUT3\",\n\t\"SLASH_LOGOUT4\",\n\t\"SLASH_LOOT_FFA1\",\n\t\"SLASH_LOOT_FFA2\",\n\t\"SLASH_LOOT_GROUP1\",\n\t\"SLASH_LOOT_GROUP2\",\n\t\"SLASH_LOOT_MASTER1\",\n\t\"SLASH_LOOT_MASTER2\",\n\t\"SLASH_LOOT_NEEDBEFOREGREED1\",\n\t\"SLASH_LOOT_NEEDBEFOREGREED2\",\n\t\"SLASH_LOOT_ROUNDROBIN1\",\n\t\"SLASH_LOOT_ROUNDROBIN2\",\n\t\"SLASH_LOOT_SETTHRESHOLD1\",\n\t\"SLASH_LOOT_SETTHRESHOLD2\",\n\t\"SLASH_MACRO1\",\n\t\"SLASH_MACRO2\",\n\t\"SLASH_MACRO3\",\n\t\"SLASH_MACRO4\",\n\t\"SLASH_MACROHELP1\",\n\t\"SLASH_MACROHELP2\",\n\t\"SLASH_MACROHELP3\",\n\t\"SLASH_MAINASSISTOFF1\",\n\t\"SLASH_MAINASSISTOFF2\",\n\t\"SLASH_MAINASSISTOFF3\",\n\t\"SLASH_MAINASSISTOFF4\",\n\t\"SLASH_MAINASSISTON1\",\n\t\"SLASH_MAINASSISTON2\",\n\t\"SLASH_MAINASSISTON3\",\n\t\"SLASH_MAINASSISTON4\",\n\t\"SLASH_MAINTANKOFF1\",\n\t\"SLASH_MAINTANKOFF2\",\n\t\"SLASH_MAINTANKOFF3\",\n\t\"SLASH_MAINTANKOFF4\",\n\t\"SLASH_MAINTANKON1\",\n\t\"SLASH_MAINTANKON2\",\n\t\"SLASH_MAINTANKON3\",\n\t\"SLASH_MAINTANKON4\",\n\t\"SLASH_OFFICER1\",\n\t\"SLASH_OFFICER2\",\n\t\"SLASH_OFFICER3\",\n\t\"SLASH_OFFICER4\",\n\t\"SLASH_OFFICER5\",\n\t\"SLASH_OFFICER6\",\n\t\"SLASH_PARTY1\",\n\t\"SLASH_PARTY2\",\n\t\"SLASH_PARTY3\",\n\t\"SLASH_PARTY4\",\n\t\"SLASH_PARTY5\",\n\t\"SLASH_PET_AGGRESSIVE1\",\n\t\"SLASH_PET_AGGRESSIVE2\",\n\t\"SLASH_PET_ATTACK1\",\n\t\"SLASH_PET_ATTACK2\",\n\t\"SLASH_PET_AUTOCASTOFF1\",\n\t\"SLASH_PET_AUTOCASTOFF2\",\n\t\"SLASH_PET_AUTOCASTON1\",\n\t\"SLASH_PET_AUTOCASTON2\",\n\t\"SLASH_PET_AUTOCASTTOGGLE1\",\n\t\"SLASH_PET_AUTOCASTTOGGLE2\",\n\t\"SLASH_PET_DEFENSIVE1\",\n\t\"SLASH_PET_DEFENSIVE2\",\n\t\"SLASH_PET_FOLLOW1\",\n\t\"SLASH_PET_FOLLOW2\",\n\t\"SLASH_PET_PASSIVE1\",\n\t\"SLASH_PET_PASSIVE2\",\n\t\"SLASH_PET_STAY1\",\n\t\"SLASH_PET_STAY2\",\n\t\"SLASH_PLAYED1\",\n\t\"SLASH_PLAYED2\",\n\t\"SLASH_PROMOTE1\",\n\t\"SLASH_PROMOTE2\",\n\t\"SLASH_PROMOTE3\",\n\t\"SLASH_PROMOTE4\",\n\t\"SLASH_PVP1\",\n\t\"SLASH_PVP2\",\n\t\"SLASH_QUIT1\",\n\t\"SLASH_QUIT2\",\n\t\"SLASH_QUIT3\",\n\t\"SLASH_QUIT4\",\n\t\"SLASH_RAID1\",\n\t\"SLASH_RAID2\",\n\t\"SLASH_RAID3\",\n\t\"SLASH_RAID4\",\n\t\"SLASH_RAID5\",\n\t\"SLASH_RAID6\",\n\t\"SLASH_RAIDBROWSER1\",\n\t\"SLASH_RAIDBROWSER2\",\n\t\"SLASH_RAIDBROWSER3\",\n\t\"SLASH_RAIDBROWSER4\",\n\t\"SLASH_RAIDBROWSER5\",\n\t\"SLASH_RAIDBROWSER6\",\n\t\"SLASH_RAID_INFO1\",\n\t\"SLASH_RAID_INFO2\",\n\t\"SLASH_RAID_WARNING1\",\n\t\"SLASH_RAID_WARNING2\",\n\t\"SLASH_RANDOM1\",\n\t\"SLASH_RANDOM2\",\n\t\"SLASH_RANDOM3\",\n\t\"SLASH_RANDOM4\",\n\t\"SLASH_RANDOM5\",\n\t\"SLASH_RANDOM6\",\n\t\"SLASH_RANDOM7\",\n\t\"SLASH_READYCHECK1\",\n\t\"SLASH_READYCHECK2\",\n\t\"SLASH_RELOAD1\",\n\t\"SLASH_RELOAD2\",\n\t\"SLASH_REMOVEFRIEND1\",\n\t\"SLASH_REMOVEFRIEND2\",\n\t\"SLASH_REMOVEFRIEND3\",\n\t\"SLASH_REMOVEFRIEND4\",\n\t\"SLASH_REPLY1\",\n\t\"SLASH_REPLY2\",\n\t\"SLASH_REPLY3\",\n\t\"SLASH_REPLY4\",\n\t\"SLASH_RESETCHAT1\",\n\t\"SLASH_RESETCHAT2\",\n\t\"SLASH_SAVEGUILDROSTER1\",\n\t\"SLASH_SAVEGUILDROSTER2\",\n\t\"SLASH_SAY1\",\n\t\"SLASH_SAY2\",\n\t\"SLASH_SAY3\",\n\t\"SLASH_SAY4\",\n\t\"SLASH_SCRIPT1\",\n\t\"SLASH_SCRIPT2\",\n\t\"SLASH_SCRIPT3\",\n\t\"SLASH_SCRIPT4\",\n\t\"SLASH_SET_TITLE1\",\n\t\"SLASH_SET_TITLE2\",\n\t\"SLASH_STARTATTACK1\",\n\t\"SLASH_STARTATTACK2\",\n\t\"SLASH_STOPATTACK1\",\n\t\"SLASH_STOPATTACK2\",\n\t\"SLASH_STOPCASTING1\",\n\t\"SLASH_STOPCASTING2\",\n\t\"SLASH_STOPMACRO1\",\n\t\"SLASH_STOPMACRO2\",\n\t\"SLASH_STOPWATCH1\",\n\t\"SLASH_STOPWATCH2\",\n\t\"SLASH_STOPWATCH3\",\n\t\"SLASH_STOPWATCH4\",\n\t\"SLASH_STOPWATCH5\",\n\t\"SLASH_STOPWATCH6\",\n\t\"SLASH_STOPWATCH_PARAM_PAUSE1\",\n\t\"SLASH_STOPWATCH_PARAM_PAUSE2\",\n\t\"SLASH_STOPWATCH_PARAM_PLAY1\",\n\t\"SLASH_STOPWATCH_PARAM_PLAY2\",\n\t\"SLASH_STOPWATCH_PARAM_STOP1\",\n\t\"SLASH_STOPWATCH_PARAM_STOP2\",\n\t\"SLASH_STOPWATCH_PARAM_STOP3\",\n\t\"SLASH_STOPWATCH_PARAM_STOP4\",\n\t\"SLASH_STOPWATCH_PARAM_STOP5\",\n\t\"SLASH_STOPWATCH_PARAM_STOP6\",\n\t\"SLASH_SWAPACTIONBAR1\",\n\t\"SLASH_SWAPACTIONBAR2\",\n\t\"SLASH_TARGET1\",\n\t\"SLASH_TARGET2\",\n\t\"SLASH_TARGET3\",\n\t\"SLASH_TARGET4\",\n\t\"SLASH_TARGET_EXACT1\",\n\t\"SLASH_TARGET_EXACT2\",\n\t\"SLASH_TARGET_LAST_ENEMY1\",\n\t\"SLASH_TARGET_LAST_ENEMY2\",\n\t\"SLASH_TARGET_LAST_FRIEND1\",\n\t\"SLASH_TARGET_LAST_FRIEND2\",\n\t\"SLASH_TARGET_LAST_TARGET1\",\n\t\"SLASH_TARGET_LAST_TARGET2\",\n\t\"SLASH_TARGET_NEAREST_ENEMY1\",\n\t\"SLASH_TARGET_NEAREST_ENEMY2\",\n\t\"SLASH_TARGET_NEAREST_ENEMY_PLAYER1\",\n\t\"SLASH_TARGET_NEAREST_ENEMY_PLAYER2\",\n\t\"SLASH_TARGET_NEAREST_FRIEND1\",\n\t\"SLASH_TARGET_NEAREST_FRIEND2\",\n\t\"SLASH_TARGET_NEAREST_FRIEND_PLAYER1\",\n\t\"SLASH_TARGET_NEAREST_FRIEND_PLAYER2\",\n\t\"SLASH_TARGET_NEAREST_PARTY1\",\n\t\"SLASH_TARGET_NEAREST_PARTY2\",\n\t\"SLASH_TARGET_NEAREST_RAID1\",\n\t\"SLASH_TARGET_NEAREST_RAID2\",\n\t\"SLASH_TEAM_CAPTAIN1\",\n\t\"SLASH_TEAM_CAPTAIN2\",\n\t\"SLASH_TEAM_CAPTAIN3\",\n\t\"SLASH_TEAM_CAPTAIN4\",\n\t\"SLASH_TEAM_DISBAND1\",\n\t\"SLASH_TEAM_DISBAND2\",\n\t\"SLASH_TEAM_DISBAND3\",\n\t\"SLASH_TEAM_DISBAND4\",\n\t\"SLASH_TEAM_INVITE1\",\n\t\"SLASH_TEAM_INVITE2\",\n\t\"SLASH_TEAM_INVITE3\",\n\t\"SLASH_TEAM_INVITE4\",\n\t\"SLASH_TEAM_QUIT1\",\n\t\"SLASH_TEAM_QUIT2\",\n\t\"SLASH_TEAM_QUIT3\",\n\t\"SLASH_TEAM_QUIT4\",\n\t\"SLASH_TEAM_UNINVITE1\",\n\t\"SLASH_TEAM_UNINVITE2\",\n\t\"SLASH_TEAM_UNINVITE3\",\n\t\"SLASH_TEAM_UNINVITE4\",\n\t\"SLASH_TIME1\",\n\t\"SLASH_TIME2\",\n\t\"SLASH_TOKEN1\",\n\t\"SLASH_TOKEN2\",\n\t\"SLASH_TOKEN3\",\n\t\"SLASH_TOKEN4\",\n\t\"SLASH_TRADE1\",\n\t\"SLASH_TRADE2\",\n\t\"SLASH_TRADE3\",\n\t\"SLASH_TRADE4\",\n\t\"SLASH_UNIGNORE1\",\n\t\"SLASH_UNIGNORE2\",\n\t\"SLASH_UNINVITE1\",\n\t\"SLASH_UNINVITE2\",\n\t\"SLASH_UNINVITE3\",\n\t\"SLASH_UNINVITE4\",\n\t\"SLASH_UNINVITE5\",\n\t\"SLASH_UNINVITE6\",\n\t\"SLASH_UNINVITE7\",\n\t\"SLASH_UNINVITE8\",\n\t\"SLASH_UNINVITE9\",\n\t\"SLASH_UNINVITE10\",\n\t\"SLASH_USE1\",\n\t\"SLASH_USE2\",\n\t\"SLASH_USERANDOM1\",\n\t\"SLASH_USERANDOM2\",\n\t\"SLASH_USE_TALENT_SPEC1\",\n\t\"SLASH_USE_TALENT_SPEC2\",\n\t\"SLASH_VOICEMACRO1\",\n\t\"SLASH_VOICEMACRO2\",\n\t\"SLASH_WHISPER1\",\n\t\"SLASH_WHISPER2\",\n\t\"SLASH_WHISPER3\",\n\t\"SLASH_WHISPER4\",\n\t\"SLASH_WHISPER5\",\n\t\"SLASH_WHISPER6\",\n\t\"SLASH_WHISPER7\",\n\t\"SLASH_WHISPER8\",\n\t\"SLASH_WHISPER9\",\n\t\"SLASH_WHISPER10\",\n\t\"SLASH_WHO1\",\n\t\"SLASH_WHO2\",\n\t\"SLASH_YELL1\",\n\t\"SLASH_YELL2\",\n\t\"SLASH_YELL3\",\n\t\"SLASH_YELL4\",\n\t\"SLASH_YELL5\",\n\t\"SLASH_YELL6\",\n\t\"SLASH_YELL7\",\n\t\"SLASH_YELL8\",\n\t\"SLURRED_SPEECH\",\n\t\"SMART_PIVOT\",\n\t\"SOCIALS\",\n\t\"SOCIAL_BUTTON\",\n\t\"SOCIAL_LABEL\",\n\t\"SOCIAL_SUBTEXT\",\n\t\"SOCKET_GEMS\",\n\t\"SOCKET_ITEM_MIN_SKILL\",\n\t\"SOCKET_ITEM_REQ_LEVEL\",\n\t\"SOCKET_ITEM_REQ_SKILL\",\n\t\"SOLD_BY_COLON\",\n\t\"SOLO\",\n\t\"SORT_QUEST\",\n\t\"SOUNDOPTIONS_MENU\",\n\t\"SOUND_CHANNELS\",\n\t\"SOUND_DISABLED\",\n\t\"SOUND_EFFECTS_DISABLED\",\n\t\"SOUND_EFFECTS_ENABLED\",\n\t\"SOUND_LABEL\",\n\t\"SOUND_OPTIONS\",\n\t\"SOUND_QUALITY\",\n\t\"SOUND_SUBTEXT\",\n\t\"SOUND_VOLUME\",\n\t\"SPEAKERMODE\",\n\t\"SPEAKERMODE_HEADPHONES\",\n\t\"SPEAKERMODE_STEREO\",\n\t\"SPEAKERMODE_SURROUND\",\n\t\"SPECIAL\",\n\t\"SPECIAL_SKILLS\",\n\t\"SPECIFIC_DUNGEONS\",\n\t\"SPECIFIC_DUNGEON_IS_READY\",\n\t\"SPEED\",\n\t\"SPEED_ABBR\",\n\t\"SPELLBOOK\",\n\t\"SPELLBOOK_ABILITIES_BUTTON\",\n\t\"SPELLBOOK_BUTTON\",\n\t\"SPELLDISMISSPETOTHER\",\n\t\"SPELLDISMISSPETSELF\",\n\t\"SPELLHAPPINESSDRAINOTHER\",\n\t\"SPELLHAPPINESSDRAINSELF\",\n\t\"SPELLS\",\n\t\"SPELLS_COMBATLOG_TOOLTIP\",\n\t\"SPELL_BONUS\",\n\t\"SPELL_CASTING\",\n\t\"SPELL_CASTING_COMBATLOG_TOOLTIP\",\n\t\"SPELL_CAST_CHANNELED\",\n\t\"SPELL_CAST_FAILED_COMBATLOG_TOOLTIP\",\n\t\"SPELL_CAST_START_COMBATLOG_TOOLTIP\",\n\t\"SPELL_CAST_SUCCESS_COMBATLOG_TOOLTIP\",\n\t\"SPELL_CAST_TIME_INSTANT\",\n\t\"SPELL_CAST_TIME_INSTANT_NO_MANA\",\n\t\"SPELL_CAST_TIME_MIN\",\n\t\"SPELL_CAST_TIME_RANGED\",\n\t\"SPELL_CAST_TIME_SEC\",\n\t\"SPELL_COLOR_BY_SCHOOL_COMBATLOG_TOOLTIP\",\n\t\"SPELL_CREATE_COMBATLOG_TOOLTIP\",\n\t\"SPELL_CRIT_CHANCE\",\n\t\"SPELL_DAMAGE_COMBATLOG_TOOLTIP\",\n\t\"SPELL_DAMAGE_NUMBER_COMBATLOG_TOOLTIP\",\n\t\"SPELL_DAMAGE_SCHOOL_COMBATLOG_TOOLTIP\",\n\t\"SPELL_DETAIL\",\n\t\"SPELL_DRAIN_COMBATLOG_TOOLTIP\",\n\t\"SPELL_DURATION\",\n\t\"SPELL_DURATION_DAYS\",\n\t\"SPELL_DURATION_HOURS\",\n\t\"SPELL_DURATION_MIN\",\n\t\"SPELL_DURATION_SEC\",\n\t\"SPELL_DURATION_UNTIL_CANCELLED\",\n\t\"SPELL_EQUIPPED_ITEM\",\n\t\"SPELL_EQUIPPED_ITEM_NOSPACE\",\n\t\"SPELL_EXTRA_ATTACKS_COMBATLOG_TOOLTIP\",\n\t\"SPELL_FAILED_AFFECTING_COMBAT\",\n\t\"SPELL_FAILED_ALREADY_BEING_TAMED\",\n\t\"SPELL_FAILED_ALREADY_HAVE_CHARM\",\n\t\"SPELL_FAILED_ALREADY_HAVE_SUMMON\",\n\t\"SPELL_FAILED_ALREADY_OPEN\",\n\t\"SPELL_FAILED_ARTISAN_RIDING_REQUIREMENT\",\n\t\"SPELL_FAILED_AURA_BOUNCED\",\n\t\"SPELL_FAILED_BAD_IMPLICIT_TARGETS\",\n\t\"SPELL_FAILED_BAD_TARGETS\",\n\t\"SPELL_FAILED_BM_OR_INVISGOD\",\n\t\"SPELL_FAILED_CANT_BE_CHARMED\",\n\t\"SPELL_FAILED_CANT_BE_DISENCHANTED\",\n\t\"SPELL_FAILED_CANT_BE_DISENCHANTED_SKILL\",\n\t\"SPELL_FAILED_CANT_BE_MILLED\",\n\t\"SPELL_FAILED_CANT_BE_PROSPECTED\",\n\t\"SPELL_FAILED_CANT_CAST_ON_TAPPED\",\n\t\"SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW\",\n\t\"SPELL_FAILED_CANT_DUEL_WHILE_INVISIBLE\",\n\t\"SPELL_FAILED_CANT_DUEL_WHILE_STEALTHED\",\n\t\"SPELL_FAILED_CANT_STEALTH\",\n\t\"SPELL_FAILED_CASTER_AURASTATE\",\n\t\"SPELL_FAILED_CASTER_DEAD\",\n\t\"SPELL_FAILED_CASTER_DEAD_FEMALE\",\n\t\"SPELL_FAILED_CAST_NOT_HERE\",\n\t\"SPELL_FAILED_CHARMED\",\n\t\"SPELL_FAILED_CHEST_IN_USE\",\n\t\"SPELL_FAILED_CONFUSED\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_1\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_10\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_11\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_12\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_13\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_14_NONE\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_15\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_16\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_17\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_18\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_19\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_2\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_20\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_21\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_22\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_23\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_24\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_25\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_26\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_27\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_28\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_29\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_3\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_30\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_31\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_32\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_33\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_34\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_35\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_36\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_37\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_38\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_39\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_4\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_40\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_41\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_42\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_43\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_44\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_45\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_46\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_47\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_48\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_49\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_5\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_50\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_51\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_52\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_53\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_54\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_55\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_56\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_57\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_58\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_59\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_6\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_60\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_61\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_62\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_63_NONE\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_64_NONE\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_65\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_66\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_67\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_7\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_75\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_76\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_77\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_78\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_79\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_8\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_83\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_84\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_85\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_86\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_87\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_88\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_9\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_90\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_96\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_97\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_98\",\n\t\"SPELL_FAILED_CUSTOM_ERROR_99\",\n\t\"SPELL_FAILED_DAMAGE_IMMUNE\",\n\t\"SPELL_FAILED_EQUIPPED_ITEM\",\n\t\"SPELL_FAILED_EQUIPPED_ITEM_CLASS\",\n\t\"SPELL_FAILED_EQUIPPED_ITEM_CLASS_MAINHAND\",\n\t\"SPELL_FAILED_EQUIPPED_ITEM_CLASS_OFFHAND\",\n\t\"SPELL_FAILED_ERROR\",\n\t\"SPELL_FAILED_EXPERT_RIDING_REQUIREMENT\",\n\t\"SPELL_FAILED_FISHING_TOO_LOW\",\n\t\"SPELL_FAILED_FIZZLE\",\n\t\"SPELL_FAILED_FLEEING\",\n\t\"SPELL_FAILED_FOOD_LOWLEVEL\",\n\t\"SPELL_FAILED_GLYPH_SOCKET_LOCKED\",\n\t\"SPELL_FAILED_HIGHLEVEL\",\n\t\"SPELL_FAILED_IMMUNE\",\n\t\"SPELL_FAILED_INCORRECT_AREA\",\n\t\"SPELL_FAILED_INTERRUPTED\",\n\t\"SPELL_FAILED_INTERRUPTED_COMBAT\",\n\t\"SPELL_FAILED_INVALID_GLYPH\",\n\t\"SPELL_FAILED_ITEM_ALREADY_ENCHANTED\",\n\t\"SPELL_FAILED_ITEM_AT_MAX_CHARGES\",\n\t\"SPELL_FAILED_ITEM_ENCHANT_TRADE_WINDOW\",\n\t\"SPELL_FAILED_ITEM_GONE\",\n\t\"SPELL_FAILED_ITEM_NOT_FOUND\",\n\t\"SPELL_FAILED_ITEM_NOT_READY\",\n\t\"SPELL_FAILED_LEVEL_REQUIREMENT\",\n\t\"SPELL_FAILED_LEVEL_REQUIREMENT_PET\",\n\t\"SPELL_FAILED_LIMIT_CATEGORY_EXCEEDED\",\n\t\"SPELL_FAILED_LINE_OF_SIGHT\",\n\t\"SPELL_FAILED_LOWLEVEL\",\n\t\"SPELL_FAILED_LOW_CASTLEVEL\",\n\t\"SPELL_FAILED_MAINHAND_EMPTY\",\n\t\"SPELL_FAILED_MIN_SKILL\",\n\t\"SPELL_FAILED_MOVING\",\n\t\"SPELL_FAILED_NEED_AMMO\",\n\t\"SPELL_FAILED_NEED_AMMO_POUCH\",\n\t\"SPELL_FAILED_NEED_EXOTIC_AMMO\",\n\t\"SPELL_FAILED_NEED_MORE_ITEMS\",\n\t\"SPELL_FAILED_NOPATH\",\n\t\"SPELL_FAILED_NOTHING_TO_DISPEL\",\n\t\"SPELL_FAILED_NOTHING_TO_STEAL\",\n\t\"SPELL_FAILED_NOT_BEHIND\",\n\t\"SPELL_FAILED_NOT_FISHABLE\",\n\t\"SPELL_FAILED_NOT_FLYING\",\n\t\"SPELL_FAILED_NOT_HERE\",\n\t\"SPELL_FAILED_NOT_IDLE\",\n\t\"SPELL_FAILED_NOT_INACTIVE\",\n\t\"SPELL_FAILED_NOT_INFRONT\",\n\t\"SPELL_FAILED_NOT_IN_ARENA\",\n\t\"SPELL_FAILED_NOT_IN_BARBERSHOP\",\n\t\"SPELL_FAILED_NOT_IN_BATTLEGROUND\",\n\t\"SPELL_FAILED_NOT_IN_CONTROL\",\n\t\"SPELL_FAILED_NOT_IN_RAID_INSTANCE\",\n\t\"SPELL_FAILED_NOT_KNOWN\",\n\t\"SPELL_FAILED_NOT_MOUNTED\",\n\t\"SPELL_FAILED_NOT_ON_DAMAGE_IMMUNE\",\n\t\"SPELL_FAILED_NOT_ON_GROUND\",\n\t\"SPELL_FAILED_NOT_ON_MOUNTED\",\n\t\"SPELL_FAILED_NOT_ON_SHAPESHIFT\",\n\t\"SPELL_FAILED_NOT_ON_STEALTHED\",\n\t\"SPELL_FAILED_NOT_ON_TAXI\",\n\t\"SPELL_FAILED_NOT_ON_TRANSPORT\",\n\t\"SPELL_FAILED_NOT_READY\",\n\t\"SPELL_FAILED_NOT_SHAPESHIFT\",\n\t\"SPELL_FAILED_NOT_STANDING\",\n\t\"SPELL_FAILED_NOT_TRADEABLE\",\n\t\"SPELL_FAILED_NOT_TRADING\",\n\t\"SPELL_FAILED_NOT_UNSHEATHED\",\n\t\"SPELL_FAILED_NOT_WHILE_FATIGUED\",\n\t\"SPELL_FAILED_NOT_WHILE_GHOST\",\n\t\"SPELL_FAILED_NOT_WHILE_LOOTING\",\n\t\"SPELL_FAILED_NOT_WHILE_TRADING\",\n\t\"SPELL_FAILED_NO_AMMO\",\n\t\"SPELL_FAILED_NO_CHAMPION\",\n\t\"SPELL_FAILED_NO_CHARGES_REMAIN\",\n\t\"SPELL_FAILED_NO_COMBO_POINTS\",\n\t\"SPELL_FAILED_NO_DUELING\",\n\t\"SPELL_FAILED_NO_EDIBLE_CORPSES\",\n\t\"SPELL_FAILED_NO_ENDURANCE\",\n\t\"SPELL_FAILED_NO_EVASIVE_CHARGES\",\n\t\"SPELL_FAILED_NO_FISH\",\n\t\"SPELL_FAILED_NO_ITEMS_WHILE_SHAPESHIFTED\",\n\t\"SPELL_FAILED_NO_MAGIC_TO_CONSUME\",\n\t\"SPELL_FAILED_NO_MOUNTS_ALLOWED\",\n\t\"SPELL_FAILED_NO_PET\",\n\t\"SPELL_FAILED_NO_PLAYTIME\",\n\t\"SPELL_FAILED_ONLY_ABOVEWATER\",\n\t\"SPELL_FAILED_ONLY_BATTLEGROUNDS\",\n\t\"SPELL_FAILED_ONLY_DAYTIME\",\n\t\"SPELL_FAILED_ONLY_INDOORS\",\n\t\"SPELL_FAILED_ONLY_IN_ARENA\",\n\t\"SPELL_FAILED_ONLY_MOUNTED\",\n\t\"SPELL_FAILED_ONLY_NIGHTTIME\",\n\t\"SPELL_FAILED_ONLY_OUTDOORS\",\n\t\"SPELL_FAILED_ONLY_SHAPESHIFT\",\n\t\"SPELL_FAILED_ONLY_STEALTHED\",\n\t\"SPELL_FAILED_ONLY_UNDERWATER\",\n\t\"SPELL_FAILED_OUT_OF_RANGE\",\n\t\"SPELL_FAILED_PACIFIED\",\n\t\"SPELL_FAILED_PARTIAL_PLAYTIME\",\n\t\"SPELL_FAILED_PET_CAN_RENAME\",\n\t\"SPELL_FAILED_POSSESSED\",\n\t\"SPELL_FAILED_PREVENTED_BY_MECHANIC\",\n\t\"SPELL_FAILED_REAGENTS\",\n\t\"SPELL_FAILED_REPUTATION\",\n\t\"SPELL_FAILED_REQUIRES_AREA\",\n\t\"SPELL_FAILED_REQUIRES_SPELL_FOCUS\",\n\t\"SPELL_FAILED_ROCKET_PACK\",\n\t\"SPELL_FAILED_ROOTED\",\n\t\"SPELL_FAILED_SILENCED\",\n\t\"SPELL_FAILED_SPELL_IN_PROGRESS\",\n\t\"SPELL_FAILED_SPELL_LEARNED\",\n\t\"SPELL_FAILED_SPELL_UNAVAILABLE\",\n\t\"SPELL_FAILED_SPELL_UNAVAILABLE_PET\",\n\t\"SPELL_FAILED_STUNNED\",\n\t\"SPELL_FAILED_SUMMON_PENDING\",\n\t\"SPELL_FAILED_TARGETS_DEAD\",\n\t\"SPELL_FAILED_TARGET_AFFECTING_COMBAT\",\n\t\"SPELL_FAILED_TARGET_AURASTATE\",\n\t\"SPELL_FAILED_TARGET_CANNOT_BE_RESURRECTED\",\n\t\"SPELL_FAILED_TARGET_DUELING\",\n\t\"SPELL_FAILED_TARGET_ENEMY\",\n\t\"SPELL_FAILED_TARGET_ENRAGED\",\n\t\"SPELL_FAILED_TARGET_FREEFORALL\",\n\t\"SPELL_FAILED_TARGET_FRIENDLY\",\n\t\"SPELL_FAILED_TARGET_IN_COMBAT\",\n\t\"SPELL_FAILED_TARGET_IS_PLAYER\",\n\t\"SPELL_FAILED_TARGET_IS_PLAYER_CONTROLLED\",\n\t\"SPELL_FAILED_TARGET_IS_TRIVIAL\",\n\t\"SPELL_FAILED_TARGET_LOCKED_TO_RAID_INSTANCE\",\n\t\"SPELL_FAILED_TARGET_NOT_DEAD\",\n\t\"SPELL_FAILED_TARGET_NOT_GHOST\",\n\t\"SPELL_FAILED_TARGET_NOT_IN_INSTANCE\",\n\t\"SPELL_FAILED_TARGET_NOT_IN_PARTY\",\n\t\"SPELL_FAILED_TARGET_NOT_IN_RAID\",\n\t\"SPELL_FAILED_TARGET_NOT_IN_SANCTUARY\",\n\t\"SPELL_FAILED_TARGET_NOT_LOOTED\",\n\t\"SPELL_FAILED_TARGET_NOT_PLAYER\",\n\t\"SPELL_FAILED_TARGET_NO_POCKETS\",\n\t\"SPELL_FAILED_TARGET_NO_RANGED_WEAPONS\",\n\t\"SPELL_FAILED_TARGET_NO_WEAPONS\",\n\t\"SPELL_FAILED_TARGET_ON_TAXI\",\n\t\"SPELL_FAILED_TARGET_UNSKINNABLE\",\n\t\"SPELL_FAILED_TOO_CLOSE\",\n\t\"SPELL_FAILED_TOO_MANY_OF_ITEM\",\n\t\"SPELL_FAILED_TOO_SHALLOW\",\n\t\"SPELL_FAILED_TOTEMS\",\n\t\"SPELL_FAILED_TOTEM_CATEGORY\",\n\t\"SPELL_FAILED_TRANSFORM_UNUSABLE\",\n\t\"SPELL_FAILED_TRY_AGAIN\",\n\t\"SPELL_FAILED_UNIQUE_GLYPH\",\n\t\"SPELL_FAILED_UNIT_NOT_BEHIND\",\n\t\"SPELL_FAILED_UNIT_NOT_INFRONT\",\n\t\"SPELL_FAILED_UNKNOWN\",\n\t\"SPELL_FAILED_WRONG_PET_FOOD\",\n\t\"SPELL_FAILED_WRONG_WEATHER\",\n\t\"SPELL_HASTE\",\n\t\"SPELL_HASTE_ABBR\",\n\t\"SPELL_HASTE_TOOLTIP\",\n\t\"SPELL_HEAL_COMBATLOG_TOOLTIP\",\n\t\"SPELL_INSTAKILL_COMBATLOG_TOOLTIP\",\n\t\"SPELL_INSTANT_EFFECT\",\n\t\"SPELL_INTERRUPT_COMBATLOG_TOOLTIP\",\n\t\"SPELL_LASTING_EFFECT\",\n\t\"SPELL_MESSAGES\",\n\t\"SPELL_MISSED_COMBATLOG_TOOLTIP\",\n\t\"SPELL_NAMES\",\n\t\"SPELL_NAMES_COMBATLOG_TOOLTIP\",\n\t\"SPELL_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP\",\n\t\"SPELL_NOT_SHAPESHIFTED\",\n\t\"SPELL_NOT_SHAPESHIFTED_NOSPACE\",\n\t\"SPELL_ON_NEXT_RANGED\",\n\t\"SPELL_ON_NEXT_SWING\",\n\t\"SPELL_OTHER_MESSAGES\",\n\t\"SPELL_PASSIVE\",\n\t\"SPELL_PASSIVE_EFFECT\",\n\t\"SPELL_PENETRATION\",\n\t\"SPELL_PENETRATION_TOOLTIP\",\n\t\"SPELL_PERIODIC_COMBATLOG_TOOLTIP\",\n\t\"SPELL_PERIODIC_DAMAGE_COMBATLOG_TOOLTIP\",\n\t\"SPELL_PERIODIC_HEAL_COMBATLOG_TOOLTIP\",\n\t\"SPELL_PERIODIC_MISSED_COMBATLOG_TOOLTIP\",\n\t\"SPELL_PERIODIC_OTHER_COMBATLOG_TOOLTIP\",\n\t\"SPELL_POINTS_SPREAD_TEMPLATE\",\n\t\"SPELL_RANGE\",\n\t\"SPELL_RANGE_AREA\",\n\t\"SPELL_RANGE_DUAL\",\n\t\"SPELL_RANGE_UNLIMITED\",\n\t\"SPELL_REAGENTS\",\n\t\"SPELL_RECAST_TIME_INSTANT\",\n\t\"SPELL_RECAST_TIME_MIN\",\n\t\"SPELL_RECAST_TIME_SEC\",\n\t\"SPELL_REQUIRED_FORM\",\n\t\"SPELL_REQUIRED_FORM_NOSPACE\",\n\t\"SPELL_RESURRECT_COMBATLOG_TOOLTIP\",\n\t\"SPELL_SCHOOL0_CAP\",\n\t\"SPELL_SCHOOL0_NAME\",\n\t\"SPELL_SCHOOL1_CAP\",\n\t\"SPELL_SCHOOL1_NAME\",\n\t\"SPELL_SCHOOL2_CAP\",\n\t\"SPELL_SCHOOL2_NAME\",\n\t\"SPELL_SCHOOL3_CAP\",\n\t\"SPELL_SCHOOL3_NAME\",\n\t\"SPELL_SCHOOL4_CAP\",\n\t\"SPELL_SCHOOL4_NAME\",\n\t\"SPELL_SCHOOL5_CAP\",\n\t\"SPELL_SCHOOL5_NAME\",\n\t\"SPELL_SCHOOL6_CAP\",\n\t\"SPELL_SCHOOL6_NAME\",\n\t\"SPELL_SCHOOLALL\",\n\t\"SPELL_SCHOOLMAGICAL\",\n\t\"SPELL_SKILL_LINE\",\n\t\"SPELL_STAT1_NAME\",\n\t\"SPELL_STAT2_NAME\",\n\t\"SPELL_STAT3_NAME\",\n\t\"SPELL_STAT4_NAME\",\n\t\"SPELL_STAT5_NAME\",\n\t\"SPELL_STATALL\",\n\t\"SPELL_SUMMON_COMBATLOG_TOOLTIP\",\n\t\"SPELL_TARGET_CENTER_CASTER\",\n\t\"SPELL_TARGET_CENTER_LOC\",\n\t\"SPELL_TARGET_CHAIN_TEMPLATE\",\n\t\"SPELL_TARGET_CONE_TEMPLATE\",\n\t\"SPELL_TARGET_CREATURE_TYPE12_DESC\",\n\t\"SPELL_TARGET_CREATURE_TYPE13_DESC\",\n\t\"SPELL_TARGET_CREATURE_TYPE1_DESC\",\n\t\"SPELL_TARGET_CREATURE_TYPE2_DESC\",\n\t\"SPELL_TARGET_CREATURE_TYPE3_DESC\",\n\t\"SPELL_TARGET_CREATURE_TYPE8_DESC\",\n\t\"SPELL_TARGET_CREATURE_TYPE_DEAD12_DESC\",\n\t\"SPELL_TARGET_CREATURE_TYPE_DEAD13_DESC\",\n\t\"SPELL_TARGET_CREATURE_TYPE_DEAD1_DESC\",\n\t\"SPELL_TARGET_CREATURE_TYPE_DEAD2_DESC\",\n\t\"SPELL_TARGET_CREATURE_TYPE_DEAD3_DESC\",\n\t\"SPELL_TARGET_CREATURE_TYPE_DEAD8_DESC\",\n\t\"SPELL_TARGET_MULTIPLE_TEMPLATE\",\n\t\"SPELL_TARGET_TEMPLATE\",\n\t\"SPELL_TARGET_TYPE0_DESC\",\n\t\"SPELL_TARGET_TYPE10_DESC\",\n\t\"SPELL_TARGET_TYPE11_DESC\",\n\t\"SPELL_TARGET_TYPE12_DESC\",\n\t\"SPELL_TARGET_TYPE13_DESC\",\n\t\"SPELL_TARGET_TYPE14_DESC\",\n\t\"SPELL_TARGET_TYPE15_DESC\",\n\t\"SPELL_TARGET_TYPE16_DESC\",\n\t\"SPELL_TARGET_TYPE17_DESC\",\n\t\"SPELL_TARGET_TYPE1_DESC\",\n\t\"SPELL_TARGET_TYPE2_DESC\",\n\t\"SPELL_TARGET_TYPE3_DESC\",\n\t\"SPELL_TARGET_TYPE4_DESC\",\n\t\"SPELL_TARGET_TYPE5_DESC\",\n\t\"SPELL_TARGET_TYPE6_DESC\",\n\t\"SPELL_TARGET_TYPE7_DESC\",\n\t\"SPELL_TARGET_TYPE8_DESC\",\n\t\"SPELL_TARGET_TYPE9_DESC\",\n\t\"SPELL_TARGET_TYPE_DEAD11_DESC\",\n\t\"SPELL_TARGET_TYPE_DEAD12_DESC\",\n\t\"SPELL_TARGET_TYPE_DEAD13_DESC\",\n\t\"SPELL_TARGET_TYPE_DEAD14_DESC\",\n\t\"SPELL_TARGET_TYPE_DEAD16_DESC\",\n\t\"SPELL_TARGET_TYPE_DEAD17_DESC\",\n\t\"SPELL_TARGET_TYPE_DEAD1_DESC\",\n\t\"SPELL_TARGET_TYPE_DEAD2_DESC\",\n\t\"SPELL_TARGET_TYPE_DEAD3_DESC\",\n\t\"SPELL_TARGET_TYPE_DEAD4_DESC\",\n\t\"SPELL_TARGET_TYPE_DEAD8_DESC\",\n\t\"SPELL_TIMER\",\n\t\"SPELL_TIME_REMAINING_DAYS\",\n\t\"SPELL_TIME_REMAINING_HOURS\",\n\t\"SPELL_TIME_REMAINING_MIN\",\n\t\"SPELL_TIME_REMAINING_SEC\",\n\t\"SPELL_TOTEMS\",\n\t\"SPELL_USE_ALL_ENERGY\",\n\t\"SPELL_USE_ALL_FOCUS\",\n\t\"SPELL_USE_ALL_HEALTH\",\n\t\"SPELL_USE_ALL_MANA\",\n\t\"SPELL_USE_ALL_POWER_DISPLAY\",\n\t\"SPELL_USE_ALL_RAGE\",\n\t\"SPI\",\n\t\"SPIRIT_COLON\",\n\t\"SPIRIT_HEALER_RELEASE_RED\",\n\t\"SPIRIT_TOOLTIP\",\n\t\"STA\",\n\t\"STABLED_PETS\",\n\t\"STABLES\",\n\t\"STABLE_PET_INFO_TEXT\",\n\t\"STABLE_PET_INFO_TOOLTIP_TEXT\",\n\t\"STABLE_SLOT_TEXT\",\n\t\"STACKS\",\n\t\"STAMINA_COLON\",\n\t\"STAMINA_TOOLTIP\",\n\t\"STANDING\",\n\t\"START\",\n\t\"STARTING_PRICE\",\n\t\"STARTUP_TEXT_LINE1\",\n\t\"STARTUP_TEXT_LINE2\",\n\t\"STARTUP_TEXT_LINE3\",\n\t\"STARTUP_TEXT_LINE4\",\n\t\"STATISTICS\",\n\t\"STATS_LABEL\",\n\t\"STATUS\",\n\t\"STATUSTEXT_LABEL\",\n\t\"STATUSTEXT_SUBTEXT\",\n\t\"STATUS_BAR_TEXT\",\n\t\"STATUS_TEXT\",\n\t\"STATUS_TEXT_PARTY\",\n\t\"STATUS_TEXT_PERCENT\",\n\t\"STATUS_TEXT_PET\",\n\t\"STATUS_TEXT_PLAYER\",\n\t\"STATUS_TEXT_TARGET\",\n\t\"STAT_ATTACK_POWER\",\n\t\"STAT_BLOCK\",\n\t\"STAT_BLOCK_TOOLTIP\",\n\t\"STAT_DODGE\",\n\t\"STAT_EXPERTISE\",\n\t\"STAT_FORMAT\",\n\t\"STAT_PARRY\",\n\t\"STAT_RESILIENCE\",\n\t\"STAT_TEMPLATE\",\n\t\"STEREO_HARDWARE_CURSOR\",\n\t\"STEREO_VIDEO_LABEL\",\n\t\"STEREO_VIDEO_SUBTEXT\",\n\t\"STOPWATCH_TIME_UNIT\",\n\t\"STOPWATCH_TITLE\",\n\t\"STOP_AUTO_ATTACK\",\n\t\"STOP_IGNORE\",\n\t\"STR\",\n\t\"STRENGTH_COLON\",\n\t\"STRENGTH_TOOLTIP\",\n\t\"STRING_ENVIRONMENTAL_DAMAGE_DROWNING\",\n\t\"STRING_ENVIRONMENTAL_DAMAGE_FALLING\",\n\t\"STRING_ENVIRONMENTAL_DAMAGE_FATIGUE\",\n\t\"STRING_ENVIRONMENTAL_DAMAGE_FIRE\",\n\t\"STRING_ENVIRONMENTAL_DAMAGE_LAVA\",\n\t\"STRING_ENVIRONMENTAL_DAMAGE_SLIME\",\n\t\"STRING_SCHOOL_ARCANE\",\n\t\"STRING_SCHOOL_CHAOS\",\n\t\"STRING_SCHOOL_CHROMATIC\",\n\t\"STRING_SCHOOL_DIVINE\",\n\t\"STRING_SCHOOL_ELEMENTAL\",\n\t\"STRING_SCHOOL_FIRE\",\n\t\"STRING_SCHOOL_FIRESTORM\",\n\t\"STRING_SCHOOL_FLAMESTRIKE\",\n\t\"STRING_SCHOOL_FROST\",\n\t\"STRING_SCHOOL_FROSTFIRE\",\n\t\"STRING_SCHOOL_FROSTSTORM\",\n\t\"STRING_SCHOOL_FROSTSTRIKE\",\n\t\"STRING_SCHOOL_HOLY\",\n\t\"STRING_SCHOOL_HOLYFIRE\",\n\t\"STRING_SCHOOL_HOLYFROST\",\n\t\"STRING_SCHOOL_HOLYSTORM\",\n\t\"STRING_SCHOOL_HOLYSTRIKE\",\n\t\"STRING_SCHOOL_MAGIC\",\n\t\"STRING_SCHOOL_NATURE\",\n\t\"STRING_SCHOOL_PHYSICAL\",\n\t\"STRING_SCHOOL_SHADOW\",\n\t\"STRING_SCHOOL_SHADOWFLAME\",\n\t\"STRING_SCHOOL_SHADOWFROST\",\n\t\"STRING_SCHOOL_SHADOWHOLY\",\n\t\"STRING_SCHOOL_SHADOWLIGHT\",\n\t\"STRING_SCHOOL_SHADOWSTORM\",\n\t\"STRING_SCHOOL_SHADOWSTRIKE\",\n\t\"STRING_SCHOOL_SPELLFIRE\",\n\t\"STRING_SCHOOL_SPELLFROST\",\n\t\"STRING_SCHOOL_SPELLSHADOW\",\n\t\"STRING_SCHOOL_SPELLSTORM\",\n\t\"STRING_SCHOOL_SPELLSTRIKE\",\n\t\"STRING_SCHOOL_STORMSTRIKE\",\n\t\"STRING_SCHOOL_UNKNOWN\",\n\t\"STUCK_BUTTON2_TEXT\",\n\t\"STUCK_BUTTON_TEXT\",\n\t\"STUN\",\n\t\"STUNNED\",\n\t\"STUN_CAPS\",\n\t\"SUBCATEGORY\",\n\t\"SUBMIT\",\n\t\"SUCCESS\",\n\t\"SUGGESTFRAME_TITLE\",\n\t\"SUGGEST_SUBMITTED\",\n\t\"SUGGEST_SUBMIT_FAILED\",\n\t\"SUGGEST_TOOLTIP_TEXT\",\n\t\"SUMMARY_ACHIEVEMENT_INCOMPLETE\",\n\t\"SUMMARY_ACHIEVEMENT_INCOMPLETE_TEXT\",\n\t\"SUMMON\",\n\t\"SUMMONS\",\n\t\"SWING_DAMAGE_COMBATLOG_TOOLTIP\",\n\t\"SWING_MISSED_COMBATLOG_TOOLTIP\",\n\t\"SYSTEM_DEFAULT\",\n\t\"SYSTEM_MESSAGES\",\n\t\"TABARDSLOT\",\n\t\"TABARDVENDORALREADYSETGREETING\",\n\t\"TABARDVENDORCOST\",\n\t\"TABARDVENDORGREETING\",\n\t\"TABARDVENDORNOGUILDGREETING\",\n\t\"TAKE_ATTACHMENTS\",\n\t\"TAKE_GM_SURVEY\",\n\t\"TALENTS\",\n\t\"TALENTS_BUTTON\",\n\t\"TALENTS_INVOLUNTARILY_RESET\",\n\t\"TALENTS_INVOLUNTARILY_RESET_PET\",\n\t\"TALENT_ACTIVE_SPEC_STATUS\",\n\t\"TALENT_POINTS\",\n\t\"TALENT_POINTS_TOOLTIP\",\n\t\"TALENT_SPECTAB_TOOLTIP_ACTIVE\",\n\t\"TALENT_SPECTAB_TOOLTIP_POINTS_SPENT\",\n\t\"TALENT_SPEC_ACTIVATE\",\n\t\"TALENT_SPEC_PET_PRIMARY\",\n\t\"TALENT_SPEC_PRIMARY\",\n\t\"TALENT_SPEC_PRIMARY_GLYPH\",\n\t\"TALENT_SPEC_SECONDARY\",\n\t\"TALENT_SPEC_SECONDARY_GLYPH\",\n\t\"TALENT_TOOLTIP_ADDPREVIEWPOINT\",\n\t\"TALENT_TOOLTIP_LEARNTALENTGROUP\",\n\t\"TALENT_TOOLTIP_REMOVEPREVIEWPOINT\",\n\t\"TALENT_TOOLTIP_RESETTALENTGROUP\",\n\t\"TALENT_TRAINER\",\n\t\"TAMEABLE\",\n\t\"TAMEABLE_EXOTIC\",\n\t\"TANK\",\n\t\"TARGET\",\n\t\"TARGETFOCUS\",\n\t\"TARGETICONS\",\n\t\"TARGET_ICON_SET\",\n\t\"TARGET_TOKEN_NOT_FOUND\",\n\t\"TASKS_COLON\",\n\t\"TAXINODEYOUAREHERE\",\n\t\"TAXISAMENODE\",\n\t\"TEAM\",\n\t\"TEAM_KICK\",\n\t\"TEAM_LEAVE\",\n\t\"TEAM_PROMOTE\",\n\t\"TEAM_SKILL_TOOLTIP\",\n\t\"TELEPORT_OUT_OF_DUNGEON\",\n\t\"TELEPORT_TO_DUNGEON\",\n\t\"TERRAIN_HIGHLIGHTS\",\n\t\"TERRAIN_MIP\",\n\t\"TEST_TAG_TEST\",\n\t\"TEXTURE_DETAIL\",\n\t\"TEXT_MODE_A\",\n\t\"TEXT_MODE_A_STRING_1\",\n\t\"TEXT_MODE_A_STRING_2\",\n\t\"TEXT_MODE_A_STRING_3\",\n\t\"TEXT_MODE_A_STRING_4\",\n\t\"TEXT_MODE_A_STRING_5\",\n\t\"TEXT_MODE_A_STRING_ACTION\",\n\t\"TEXT_MODE_A_STRING_BRACE_ITEM\",\n\t\"TEXT_MODE_A_STRING_BRACE_SPELL\",\n\t\"TEXT_MODE_A_STRING_BRACE_UNIT\",\n\t\"TEXT_MODE_A_STRING_DEST\",\n\t\"TEXT_MODE_A_STRING_DEST_ICON\",\n\t\"TEXT_MODE_A_STRING_DEST_UNIT\",\n\t\"TEXT_MODE_A_STRING_ITEM\",\n\t\"TEXT_MODE_A_STRING_POSSESSIVE\",\n\t\"TEXT_MODE_A_STRING_POSSESSIVE_STRING\",\n\t\"TEXT_MODE_A_STRING_RESULT\",\n\t\"TEXT_MODE_A_STRING_RESULT_ABSORB\",\n\t\"TEXT_MODE_A_STRING_RESULT_BLOCK\",\n\t\"TEXT_MODE_A_STRING_RESULT_CRITICAL\",\n\t\"TEXT_MODE_A_STRING_RESULT_CRITICAL_SPELL\",\n\t\"TEXT_MODE_A_STRING_RESULT_CRUSHING\",\n\t\"TEXT_MODE_A_STRING_RESULT_FORMAT\",\n\t\"TEXT_MODE_A_STRING_RESULT_GLANCING\",\n\t\"TEXT_MODE_A_STRING_RESULT_OVERHEALING\",\n\t\"TEXT_MODE_A_STRING_RESULT_OVERKILLING\",\n\t\"TEXT_MODE_A_STRING_RESULT_REFLECT\",\n\t\"TEXT_MODE_A_STRING_RESULT_RESIST\",\n\t\"TEXT_MODE_A_STRING_RESULT_VULNERABILITY\",\n\t\"TEXT_MODE_A_STRING_SOURCE\",\n\t\"TEXT_MODE_A_STRING_SOURCE_ICON\",\n\t\"TEXT_MODE_A_STRING_SOURCE_UNIT\",\n\t\"TEXT_MODE_A_STRING_SPELL\",\n\t\"TEXT_MODE_A_STRING_SPELL_EXTRA\",\n\t\"TEXT_MODE_A_STRING_SPELL_EXTRA_LINK\",\n\t\"TEXT_MODE_A_STRING_SPELL_LINK\",\n\t\"TEXT_MODE_A_STRING_TIMESTAMP\",\n\t\"TEXT_MODE_A_STRING_TOKEN_ICON\",\n\t\"TEXT_MODE_A_STRING_VALUE\",\n\t\"TEXT_MODE_A_STRING_VALUE_SCHOOL\",\n\t\"TEXT_MODE_A_STRING_VALUE_TYPE\",\n\t\"TEXT_MODE_A_TIMESTAMP\",\n\t\"THIS_DUNGEON_IN_PROGRESS\",\n\t\"THREAT_TOOLTIP\",\n\t\"TICKET_STATUS\",\n\t\"TICKET_TYPE1\",\n\t\"TICKET_TYPE2\",\n\t\"TICKET_TYPE3\",\n\t\"TICKET_TYPE4\",\n\t\"TIMEMANAGER_12HOUR\",\n\t\"TIMEMANAGER_24HOUR\",\n\t\"TIMEMANAGER_24HOURMODE\",\n\t\"TIMEMANAGER_ALARM_DISABLED\",\n\t\"TIMEMANAGER_ALARM_ENABLED\",\n\t\"TIMEMANAGER_ALARM_MESSAGE\",\n\t\"TIMEMANAGER_ALARM_TIME\",\n\t\"TIMEMANAGER_ALARM_TOOLTIP_TURN_OFF\",\n\t\"TIMEMANAGER_AM\",\n\t\"TIMEMANAGER_LOCALTIME\",\n\t\"TIMEMANAGER_MINUTE\",\n\t\"TIMEMANAGER_PM\",\n\t\"TIMEMANAGER_SHOW_STOPWATCH\",\n\t\"TIMEMANAGER_TICKER_12HOUR\",\n\t\"TIMEMANAGER_TICKER_24HOUR\",\n\t\"TIMEMANAGER_TITLE\",\n\t\"TIMEMANAGER_TOOLTIP_LOCALTIME\",\n\t\"TIMEMANAGER_TOOLTIP_REALMTIME\",\n\t\"TIMEMANAGER_TOOLTIP_TITLE\",\n\t\"TIMESTAMPS_LABEL\",\n\t\"TIMESTAMP_COMBATLOG_TOOLTIP\",\n\t\"TIMESTAMP_FORMAT_HHMM\",\n\t\"TIMESTAMP_FORMAT_HHMMSS\",\n\t\"TIMESTAMP_FORMAT_HHMMSS_24HR\",\n\t\"TIMESTAMP_FORMAT_HHMMSS_AMPM\",\n\t\"TIMESTAMP_FORMAT_HHMM_24HR\",\n\t\"TIMESTAMP_FORMAT_HHMM_AMPM\",\n\t\"TIMESTAMP_FORMAT_NONE\",\n\t\"TIME_DAYHOURMINUTESECOND\",\n\t\"TIME_ELAPSED\",\n\t\"TIME_IN_QUEUE\",\n\t\"TIME_PLAYED_LEVEL\",\n\t\"TIME_PLAYED_MSG\",\n\t\"TIME_PLAYED_TOTAL\",\n\t\"TIME_REMAINING\",\n\t\"TIME_TEMPLATE_LONG\",\n\t\"TIME_TO_PORT\",\n\t\"TIME_TO_PORT_ARENA\",\n\t\"TIME_TWELVEHOURAM\",\n\t\"TIME_TWELVEHOURPM\",\n\t\"TIME_TWENTYFOURHOURS\",\n\t\"TIME_UNIT_DELIMITER\",\n\t\"TIME_UNKNOWN\",\n\t\"TIME_UNTIL_DELETED\",\n\t\"TIME_UNTIL_RETURNED\",\n\t\"TITLE_DOESNT_EXIST\",\n\t\"TITLE_REWARD\",\n\t\"TITLE_TEMPLATE\",\n\t\"TOAST_DURATION_TEXT\",\n\t\"TOGGLESTICKYCAMERA\",\n\t\"TOGGLE_BATTLEFIELDMINIMAP_TOOLTIP\",\n\t\"TOKENS\",\n\t\"TOKEN_MOVE_TO_UNUSED\",\n\t\"TOKEN_OPTIONS\",\n\t\"TOKEN_SHOW_ON_BACKPACK\",\n\t\"TOOLTIP_ARENA_POINTS\",\n\t\"TOOLTIP_HONOR_POINTS\",\n\t\"TOOLTIP_RAID_CLASS_BUTTON\",\n\t\"TOOLTIP_RAID_CONTROL_TIP\",\n\t\"TOOLTIP_RAID_DRAG_TIP\",\n\t\"TOOLTIP_RAID_SHIFT_TIP\",\n\t\"TOOLTIP_TALENT_LEARN\",\n\t\"TOOLTIP_TALENT_NEXT_RANK\",\n\t\"TOOLTIP_TALENT_PREREQ\",\n\t\"TOOLTIP_TALENT_RANK\",\n\t\"TOOLTIP_TALENT_TIER_POINTS\",\n\t\"TOOLTIP_TRACKER_FILTER_ACHIEVEMENTS\",\n\t\"TOOLTIP_TRACKER_FILTER_COMPLETED_QUESTS\",\n\t\"TOOLTIP_TRACKER_FILTER_REMOTE_ZONES\",\n\t\"TOOLTIP_TRACKER_SORT_DIFFICULTY_HIGH\",\n\t\"TOOLTIP_TRACKER_SORT_DIFFICULTY_LOW\",\n\t\"TOOLTIP_TRACKER_SORT_MANUAL\",\n\t\"TOOLTIP_TRACKER_SORT_PROXIMITY\",\n\t\"TOOLTIP_UNIT_LEVEL\",\n\t\"TOOLTIP_UNIT_LEVEL_CLASS\",\n\t\"TOOLTIP_UNIT_LEVEL_CLASS_TYPE\",\n\t\"TOOLTIP_UNIT_LEVEL_RACE_CLASS\",\n\t\"TOOLTIP_UNIT_LEVEL_RACE_CLASS_TYPE\",\n\t\"TOOLTIP_UNIT_LEVEL_TYPE\",\n\t\"TOO_FAR_TO_LOOT\",\n\t\"TOO_MANY_LUA_ERRORS\",\n\t\"TOO_MANY_WATCHED_TOKENS\",\n\t\"TOTAL_MEM_KB_ABBR\",\n\t\"TOTAL_MEM_MB_ABBR\",\n\t\"TRACKER_FILTER_ACHIEVEMENTS\",\n\t\"TRACKER_FILTER_COMPLETED_QUESTS\",\n\t\"TRACKER_FILTER_LABEL\",\n\t\"TRACKER_FILTER_REMOTE_ZONES\",\n\t\"TRACKER_SORT_DIFFICULTY_HIGH\",\n\t\"TRACKER_SORT_DIFFICULTY_LOW\",\n\t\"TRACKER_SORT_LABEL\",\n\t\"TRACKER_SORT_MANUAL\",\n\t\"TRACKER_SORT_MANUAL_BOTTOM\",\n\t\"TRACKER_SORT_MANUAL_DOWN\",\n\t\"TRACKER_SORT_MANUAL_TOP\",\n\t\"TRACKER_SORT_MANUAL_UP\",\n\t\"TRACKER_SORT_MANUAL_WARNING\",\n\t\"TRACKER_SORT_PROXIMITY\",\n\t\"TRACK_ACHIEVEMENT\",\n\t\"TRACK_ACHIEVEMENT_TOOLTIP\",\n\t\"TRACK_QUEST\",\n\t\"TRACK_QUEST_ABBREV\",\n\t\"TRADE\",\n\t\"TRADEFRAME_ENCHANT_SLOT_LABEL\",\n\t\"TRADEFRAME_NOT_MODIFIED_TEXT\",\n\t\"TRADESKILLS\",\n\t\"TRADESKILL_LOG_FIRSTPERSON\",\n\t\"TRADESKILL_LOG_THIRDPERSON\",\n\t\"TRADESKILL_SERVICE_LEARN\",\n\t\"TRADESKILL_SERVICE_PASSIVE\",\n\t\"TRADESKILL_SERVICE_STEP\",\n\t\"TRADE_POTENTIAL_BIND_ENCHANT\",\n\t\"TRADE_SKILLS\",\n\t\"TRADE_SKILL_TITLE\",\n\t\"TRADE_WITH_QUESTION\",\n\t\"TRAIN\",\n\t\"TRAINER_CAST_TIME_INSTANT\",\n\t\"TRAINER_CAST_TIME_MIN\",\n\t\"TRAINER_CAST_TIME_SEC\",\n\t\"TRAINER_COOLDOWN_TIME_INSTANT\",\n\t\"TRAINER_COOLDOWN_TIME_MIN\",\n\t\"TRAINER_COOLDOWN_TIME_SEC\",\n\t\"TRAINER_COST_SP\",\n\t\"TRAINER_COST_SP_RED\",\n\t\"TRAINER_COST_TP\",\n\t\"TRAINER_COST_TP_RED\",\n\t\"TRAINER_LIST_SP\",\n\t\"TRAINER_MANA_COST\",\n\t\"TRAINER_MANA_COST_PER_TIME\",\n\t\"TRAINER_RANGE\",\n\t\"TRAINER_REQ_ABILITY\",\n\t\"TRAINER_REQ_ABILITY_RED\",\n\t\"TRAINER_REQ_LEVEL\",\n\t\"TRAINER_REQ_LEVEL_RED\",\n\t\"TRAINER_REQ_SKILL_RANK\",\n\t\"TRAINER_REQ_SKILL_RANK_RED\",\n\t\"TRANSFER_ABORT_DIFFICULTY1\",\n\t\"TRANSFER_ABORT_DIFFICULTY2\",\n\t\"TRANSFER_ABORT_DIFFICULTY3\",\n\t\"TRANSFER_ABORT_INSUF_EXPAN_LVL1\",\n\t\"TRANSFER_ABORT_INSUF_EXPAN_LVL2\",\n\t\"TRANSFER_ABORT_MAP_NOT_ALLOWED\",\n\t\"TRANSFER_ABORT_MAX_PLAYERS\",\n\t\"TRANSFER_ABORT_NEED_GROUP\",\n\t\"TRANSFER_ABORT_NOT_FOUND\",\n\t\"TRANSFER_ABORT_REALM_ONLY\",\n\t\"TRANSFER_ABORT_TOO_MANY_INSTANCES\",\n\t\"TRANSFER_ABORT_TOO_MANY_REALM_INSTANCES\",\n\t\"TRANSFER_ABORT_UNIQUE_MESSAGE1\",\n\t\"TRANSFER_ABORT_ZONE_IN_COMBAT\",\n\t\"TRILINEAR_FILTERING\",\n\t\"TRINKET0SLOT\",\n\t\"TRINKET0SLOT_UNIQUE\",\n\t\"TRINKET1SLOT\",\n\t\"TRINKET1SLOT_UNIQUE\",\n\t\"TRIPLE_BUFFER\",\n\t\"TRIVIAL_QUEST_DISPLAY\",\n\t\"TURN_IN_ITEMS\",\n\t\"TURN_IN_QUEST\",\n\t\"TUTORIAL1\",\n\t\"TUTORIAL2\",\n\t\"TUTORIAL3\",\n\t\"TUTORIAL4\",\n\t\"TUTORIAL5\",\n\t\"TUTORIAL6\",\n\t\"TUTORIAL7\",\n\t\"TUTORIAL8\",\n\t\"TUTORIAL9\",\n\t\"TUTORIAL10\",\n\t\"TUTORIAL11\",\n\t\"TUTORIAL12\",\n\t\"TUTORIAL13\",\n\t\"TUTORIAL14\",\n\t\"TUTORIAL15\",\n\t\"TUTORIAL16\",\n\t\"TUTORIAL17\",\n\t\"TUTORIAL18\",\n\t\"TUTORIAL19\",\n\t\"TUTORIAL20\",\n\t\"TUTORIAL21\",\n\t\"TUTORIAL22\",\n\t\"TUTORIAL23\",\n\t\"TUTORIAL24\",\n\t\"TUTORIAL25\",\n\t\"TUTORIAL26\",\n\t\"TUTORIAL27\",\n\t\"TUTORIAL28\",\n\t\"TUTORIAL29\",\n\t\"TUTORIAL30\",\n\t\"TUTORIAL31\",\n\t\"TUTORIAL32\",\n\t\"TUTORIAL33\",\n\t\"TUTORIAL34\",\n\t\"TUTORIAL35\",\n\t\"TUTORIAL36\",\n\t\"TUTORIAL37\",\n\t\"TUTORIAL38\",\n\t\"TUTORIAL39\",\n\t\"TUTORIAL40\",\n\t\"TUTORIAL41\",\n\t\"TUTORIAL42\",\n\t\"TUTORIAL43\",\n\t\"TUTORIAL44\",\n\t\"TUTORIAL45\",\n\t\"TUTORIAL46\",\n\t\"TUTORIAL47\",\n\t\"TUTORIAL48\",\n\t\"TUTORIAL49\",\n\t\"TUTORIAL50\",\n\t\"TUTORIAL51\",\n\t\"TUTORIAL52\",\n\t\"TUTORIAL53\",\n\t\"TUTORIAL54\",\n\t\"TUTORIAL55\",\n\t\"TUTORIAL56\",\n\t\"TUTORIAL57\",\n\t\"TUTORIAL58\",\n\t\"TUTORIAL59\",\n\t\"TUTORIAL60\",\n\t\"TUTORIAL61\",\n\t\"TUTORIAL_TITLE1\",\n\t\"TUTORIAL_TITLE2\",\n\t\"TUTORIAL_TITLE3\",\n\t\"TUTORIAL_TITLE4\",\n\t\"TUTORIAL_TITLE5\",\n\t\"TUTORIAL_TITLE6\",\n\t\"TUTORIAL_TITLE7\",\n\t\"TUTORIAL_TITLE8\",\n\t\"TUTORIAL_TITLE9\",\n\t\"TUTORIAL_TITLE10\",\n\t\"TUTORIAL_TITLE11\",\n\t\"TUTORIAL_TITLE12\",\n\t\"TUTORIAL_TITLE13\",\n\t\"TUTORIAL_TITLE14\",\n\t\"TUTORIAL_TITLE15\",\n\t\"TUTORIAL_TITLE16\",\n\t\"TUTORIAL_TITLE17\",\n\t\"TUTORIAL_TITLE18\",\n\t\"TUTORIAL_TITLE19\",\n\t\"TUTORIAL_TITLE20\",\n\t\"TUTORIAL_TITLE21\",\n\t\"TUTORIAL_TITLE22\",\n\t\"TUTORIAL_TITLE23\",\n\t\"TUTORIAL_TITLE24\",\n\t\"TUTORIAL_TITLE25\",\n\t\"TUTORIAL_TITLE26\",\n\t\"TUTORIAL_TITLE27\",\n\t\"TUTORIAL_TITLE28\",\n\t\"TUTORIAL_TITLE29\",\n\t\"TUTORIAL_TITLE30\",\n\t\"TUTORIAL_TITLE31\",\n\t\"TUTORIAL_TITLE32\",\n\t\"TUTORIAL_TITLE33\",\n\t\"TUTORIAL_TITLE34\",\n\t\"TUTORIAL_TITLE35\",\n\t\"TUTORIAL_TITLE36\",\n\t\"TUTORIAL_TITLE37\",\n\t\"TUTORIAL_TITLE38\",\n\t\"TUTORIAL_TITLE39\",\n\t\"TUTORIAL_TITLE40\",\n\t\"TUTORIAL_TITLE41\",\n\t\"TUTORIAL_TITLE42\",\n\t\"TUTORIAL_TITLE43\",\n\t\"TUTORIAL_TITLE44\",\n\t\"TUTORIAL_TITLE45\",\n\t\"TUTORIAL_TITLE46\",\n\t\"TUTORIAL_TITLE47\",\n\t\"TUTORIAL_TITLE48\",\n\t\"TUTORIAL_TITLE49\",\n\t\"TUTORIAL_TITLE50\",\n\t\"TUTORIAL_TITLE51\",\n\t\"TUTORIAL_TITLE52\",\n\t\"TUTORIAL_TITLE53\",\n\t\"TUTORIAL_TITLE54\",\n\t\"TUTORIAL_TITLE55\",\n\t\"TUTORIAL_TITLE56\",\n\t\"TUTORIAL_TITLE57\",\n\t\"TUTORIAL_TITLE58\",\n\t\"TUTORIAL_TITLE59\",\n\t\"TUTORIAL_TITLE60\",\n\t\"TUTORIAL_TITLE61\",\n\t\"TWOHANDEDWEAPONBEINGWIELDED\",\n\t\"TWO_HANDED\",\n\t\"TYPE\",\n\t\"TYPE_LFR_COMMENT_HERE\",\n\t\"UIOPTIONS_MENU\",\n\t\"UI_DEPTH\",\n\t\"UI_HIDDEN\",\n\t\"UI_SCALE\",\n\t\"UKNOWNBEING\",\n\t\"UNABLE_TO_REFUND_ITEM\",\n\t\"UNAVAILABLE\",\n\t\"UNBIND\",\n\t\"UNEXTEND_RAID_LOCK\",\n\t\"UNITFRAME_LABEL\",\n\t\"UNITFRAME_SUBTEXT\",\n\t\"UNITNAME_SUMMON_TITLE1\",\n\t\"UNITNAME_SUMMON_TITLE10\",\n\t\"UNITNAME_SUMMON_TITLE11\",\n\t\"UNITNAME_SUMMON_TITLE12\",\n\t\"UNITNAME_SUMMON_TITLE2\",\n\t\"UNITNAME_SUMMON_TITLE3\",\n\t\"UNITNAME_SUMMON_TITLE4\",\n\t\"UNITNAME_SUMMON_TITLE5\",\n\t\"UNITNAME_SUMMON_TITLE6\",\n\t\"UNITNAME_SUMMON_TITLE7\",\n\t\"UNITNAME_SUMMON_TITLE8\",\n\t\"UNITNAME_SUMMON_TITLE9\",\n\t\"UNITNAME_TITLE\",\n\t\"UNITNAME_TITLE_CHARM\",\n\t\"UNITNAME_TITLE_COMPANION\",\n\t\"UNITNAME_TITLE_CREATION\",\n\t\"UNITNAME_TITLE_GUARDIAN\",\n\t\"UNITNAME_TITLE_MINION\",\n\t\"UNITNAME_TITLE_OPPONENT\",\n\t\"UNITNAME_TITLE_PET\",\n\t\"UNITNAME_TITLE_SQUIRE\",\n\t\"UNIT_COLORS\",\n\t\"UNIT_LETHAL_LEVEL_DEAD_TEMPLATE\",\n\t\"UNIT_LETHAL_LEVEL_TEMPLATE\",\n\t\"UNIT_LEVEL_DEAD_TEMPLATE\",\n\t\"UNIT_LEVEL_TEMPLATE\",\n\t\"UNIT_NAMEPLATES\",\n\t\"UNIT_NAMEPLATES_ALLOW_OVERLAP\",\n\t\"UNIT_NAMEPLATES_SHOW_ENEMIES\",\n\t\"UNIT_NAMEPLATES_SHOW_ENEMY_GUARDIANS\",\n\t\"UNIT_NAMEPLATES_SHOW_ENEMY_PETS\",\n\t\"UNIT_NAMEPLATES_SHOW_ENEMY_TOTEMS\",\n\t\"UNIT_NAMEPLATES_SHOW_FRIENDLY_GUARDIANS\",\n\t\"UNIT_NAMEPLATES_SHOW_FRIENDLY_PETS\",\n\t\"UNIT_NAMEPLATES_SHOW_FRIENDLY_TOTEMS\",\n\t\"UNIT_NAMEPLATES_SHOW_FRIENDS\",\n\t\"UNIT_NAMES\",\n\t\"UNIT_NAMES_COMBATLOG_TOOLTIP\",\n\t\"UNIT_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP\",\n\t\"UNIT_NAME_ENEMY\",\n\t\"UNIT_NAME_ENEMY_GUARDIANS\",\n\t\"UNIT_NAME_ENEMY_PETS\",\n\t\"UNIT_NAME_ENEMY_TOTEMS\",\n\t\"UNIT_NAME_FRIENDLY\",\n\t\"UNIT_NAME_FRIENDLY_GUARDIANS\",\n\t\"UNIT_NAME_FRIENDLY_PETS\",\n\t\"UNIT_NAME_FRIENDLY_TOTEMS\",\n\t\"UNIT_NAME_GUILD\",\n\t\"UNIT_NAME_NONCOMBAT_CREATURE\",\n\t\"UNIT_NAME_NPC\",\n\t\"UNIT_NAME_OWN\",\n\t\"UNIT_NAME_PLAYER_TITLE\",\n\t\"UNIT_PLUS_LEVEL_TEMPLATE\",\n\t\"UNIT_PVP_NAME\",\n\t\"UNIT_SKINNABLE_BOLTS\",\n\t\"UNIT_SKINNABLE_HERB\",\n\t\"UNIT_SKINNABLE_LEATHER\",\n\t\"UNIT_SKINNABLE_ROCK\",\n\t\"UNIT_TYPE_LETHAL_LEVEL_TEMPLATE\",\n\t\"UNIT_TYPE_LEVEL_TEMPLATE\",\n\t\"UNIT_TYPE_PLUS_LEVEL_TEMPLATE\",\n\t\"UNIT_YOU\",\n\t\"UNIT_YOU_DEST\",\n\t\"UNIT_YOU_DEST_POSSESSIVE\",\n\t\"UNIT_YOU_SOURCE\",\n\t\"UNIT_YOU_SOURCE_POSSESSIVE\",\n\t\"UNKNOWN\",\n\t\"UNKNOWNOBJECT\",\n\t\"UNLEARN\",\n\t\"UNLEARN_SKILL\",\n\t\"UNLEARN_SKILL_TOOLTIP\",\n\t\"UNLIMITED\",\n\t\"UNLIST_ME\",\n\t\"UNLIST_MY_GROUP\",\n\t\"UNLOCK_FOCUS_FRAME\",\n\t\"UNLOCK_WINDOW\",\n\t\"UNMUTE\",\n\t\"UNSPENT_TALENT_POINTS\",\n\t\"UNTRACK_ACHIEVEMENT_TOOLTIP\",\n\t\"UNUSED\",\n\t\"UPDATE\",\n\t\"USABLE_ITEMS\",\n\t\"USE\",\n\t\"USED\",\n\t\"USE_COLON\",\n\t\"USE_COLORBLIND_MODE\",\n\t\"USE_ENGLISH_AUDIO\",\n\t\"USE_EQUIPMENT_MANAGER\",\n\t\"USE_FULL_TEXT_MODE\",\n\t\"USE_GUILDBANK_REPAIR\",\n\t\"USE_ITEM\",\n\t\"USE_NO_DROP\",\n\t\"USE_PERSONAL_FUNDS\",\n\t\"USE_SOULSTONE\",\n\t\"USE_UBERTOOLTIPS\",\n\t\"USE_UISCALE\",\n\t\"USE_WEATHER_SHADER\",\n\t\"VEHICLE_LEAVE\",\n\t\"VEHICLE_STEAM\",\n\t\"VERBAL_HARASSMENT\",\n\t\"VERBAL_HARASSMENT_DESCRIPTION\",\n\t\"VERBAL_HARASSMENT_TEXT1\",\n\t\"VERBAL_HARASSMENT_TEXT2\",\n\t\"VERBAL_HARASSMENT_TEXT3\",\n\t\"VERBAL_HARASSMENT_TEXT4\",\n\t\"VERTEX_ANIMATION_SHADERS\",\n\t\"VERTICAL_SYNC\",\n\t\"VICTORY_TEXT0\",\n\t\"VICTORY_TEXT1\",\n\t\"VICTORY_TEXT_ARENA0\",\n\t\"VICTORY_TEXT_ARENA1\",\n\t\"VICTORY_TEXT_ARENA_DRAW\",\n\t\"VICTORY_TEXT_ARENA_WINS\",\n\t\"VIDEOOPTIONS_MENU\",\n\t\"VIDEO_QUALITY_LABEL1\",\n\t\"VIDEO_QUALITY_LABEL2\",\n\t\"VIDEO_QUALITY_LABEL3\",\n\t\"VIDEO_QUALITY_LABEL4\",\n\t\"VIDEO_QUALITY_LABEL5\",\n\t\"VIDEO_QUALITY_LABEL6\",\n\t\"VIDEO_QUALITY_S\",\n\t\"VIDEO_QUALITY_SUBTEXT1\",\n\t\"VIDEO_QUALITY_SUBTEXT2\",\n\t\"VIDEO_QUALITY_SUBTEXT3\",\n\t\"VIDEO_QUALITY_SUBTEXT4\",\n\t\"VIDEO_QUALITY_SUBTEXT5\",\n\t\"VIDEO_QUALITY_SUBTEXT6\",\n\t\"VIEW_FRIENDS_OF_FRIENDS\",\n\t\"VOICE\",\n\t\"VOICECHAT_DISABLED\",\n\t\"VOICECHAT_DISABLED_TEXT\",\n\t\"VOICEMACRO_0_Dw_0\",\n\t\"VOICEMACRO_0_Dw_0_FEMALE\",\n\t\"VOICEMACRO_0_Dw_1\",\n\t\"VOICEMACRO_0_Dw_1_FEMALE\",\n\t\"VOICEMACRO_0_Gn_0\",\n\t\"VOICEMACRO_0_Gn_0_FEMALE\",\n\t\"VOICEMACRO_0_Gn_1\",\n\t\"VOICEMACRO_0_Gn_1_FEMALE\",\n\t\"VOICEMACRO_0_Gn_2_FEMALE\",\n\t\"VOICEMACRO_0_Hu_0\",\n\t\"VOICEMACRO_0_Hu_0_FEMALE\",\n\t\"VOICEMACRO_0_Hu_1\",\n\t\"VOICEMACRO_0_Hu_1_FEMALE\",\n\t\"VOICEMACRO_0_Ni_0\",\n\t\"VOICEMACRO_0_Ni_0_FEMALE\",\n\t\"VOICEMACRO_0_Ni_1\",\n\t\"VOICEMACRO_0_Ni_1_FEMALE\",\n\t\"VOICEMACRO_0_Ni_2\",\n\t\"VOICEMACRO_0_Or_0\",\n\t\"VOICEMACRO_0_Or_0_FEMALE\",\n\t\"VOICEMACRO_0_Or_1\",\n\t\"VOICEMACRO_0_Or_1_FEMALE\",\n\t\"VOICEMACRO_0_Sc_0\",\n\t\"VOICEMACRO_0_Sc_0_FEMALE\",\n\t\"VOICEMACRO_0_Sc_1\",\n\t\"VOICEMACRO_0_Sc_1_FEMALE\",\n\t\"VOICEMACRO_0_Ta_0\",\n\t\"VOICEMACRO_0_Ta_0_FEMALE\",\n\t\"VOICEMACRO_0_Ta_1\",\n\t\"VOICEMACRO_0_Ta_1_FEMALE\",\n\t\"VOICEMACRO_0_Ta_2\",\n\t\"VOICEMACRO_0_Tr_0\",\n\t\"VOICEMACRO_0_Tr_0_FEMALE\",\n\t\"VOICEMACRO_0_Tr_1\",\n\t\"VOICEMACRO_0_Tr_1_FEMALE\",\n\t\"VOICEMACRO_10_Dw_0\",\n\t\"VOICEMACRO_10_Dw_0_FEMALE\",\n\t\"VOICEMACRO_10_Dw_1\",\n\t\"VOICEMACRO_10_Dw_1_FEMALE\",\n\t\"VOICEMACRO_10_Gn_0\",\n\t\"VOICEMACRO_10_Gn_0_FEMALE\",\n\t\"VOICEMACRO_10_Gn_1\",\n\t\"VOICEMACRO_10_Gn_1_FEMALE\",\n\t\"VOICEMACRO_10_Hu_0\",\n\t\"VOICEMACRO_10_Hu_0_FEMALE\",\n\t\"VOICEMACRO_10_Hu_1\",\n\t\"VOICEMACRO_10_Hu_1_FEMALE\",\n\t\"VOICEMACRO_10_Ni_0\",\n\t\"VOICEMACRO_10_Ni_0_FEMALE\",\n\t\"VOICEMACRO_10_Ni_1\",\n\t\"VOICEMACRO_10_Ni_1_FEMALE\",\n\t\"VOICEMACRO_10_Or_0\",\n\t\"VOICEMACRO_10_Or_0_FEMALE\",\n\t\"VOICEMACRO_10_Or_1\",\n\t\"VOICEMACRO_10_Or_1_FEMALE\",\n\t\"VOICEMACRO_10_Or_2_FEMALE\",\n\t\"VOICEMACRO_10_Sc_0\",\n\t\"VOICEMACRO_10_Sc_0_FEMALE\",\n\t\"VOICEMACRO_10_Sc_1\",\n\t\"VOICEMACRO_10_Sc_1_FEMALE\",\n\t\"VOICEMACRO_10_Ta_0\",\n\t\"VOICEMACRO_10_Ta_0_FEMALE\",\n\t\"VOICEMACRO_10_Ta_1\",\n\t\"VOICEMACRO_10_Ta_1_FEMALE\",\n\t\"VOICEMACRO_10_Tr_0\",\n\t\"VOICEMACRO_10_Tr_0_FEMALE\",\n\t\"VOICEMACRO_10_Tr_1\",\n\t\"VOICEMACRO_10_Tr_1_FEMALE\",\n\t\"VOICEMACRO_12_Dw_0\",\n\t\"VOICEMACRO_12_Dw_0_FEMALE\",\n\t\"VOICEMACRO_12_Dw_1\",\n\t\"VOICEMACRO_12_Dw_1_FEMALE\",\n\t\"VOICEMACRO_12_Dw_2\",\n\t\"VOICEMACRO_12_Dw_2_FEMALE\",\n\t\"VOICEMACRO_12_Dw_3\",\n\t\"VOICEMACRO_12_Gn_0\",\n\t\"VOICEMACRO_12_Gn_0_FEMALE\",\n\t\"VOICEMACRO_12_Gn_1\",\n\t\"VOICEMACRO_12_Gn_1_FEMALE\",\n\t\"VOICEMACRO_12_Gn_2\",\n\t\"VOICEMACRO_12_Gn_2_FEMALE\",\n\t\"VOICEMACRO_12_Gn_3\",\n\t\"VOICEMACRO_12_Hu_0\",\n\t\"VOICEMACRO_12_Hu_0_FEMALE\",\n\t\"VOICEMACRO_12_Hu_1\",\n\t\"VOICEMACRO_12_Hu_1_FEMALE\",\n\t\"VOICEMACRO_12_Hu_2\",\n\t\"VOICEMACRO_12_Hu_2_FEMALE\",\n\t\"VOICEMACRO_12_Hu_3\",\n\t\"VOICEMACRO_12_Ni_0\",\n\t\"VOICEMACRO_12_Ni_0_FEMALE\",\n\t\"VOICEMACRO_12_Ni_1\",\n\t\"VOICEMACRO_12_Ni_1_FEMALE\",\n\t\"VOICEMACRO_12_Ni_2\",\n\t\"VOICEMACRO_12_Ni_2_FEMALE\",\n\t\"VOICEMACRO_12_Ni_3_FEMALE\",\n\t\"VOICEMACRO_12_Or_0\",\n\t\"VOICEMACRO_12_Or_0_FEMALE\",\n\t\"VOICEMACRO_12_Or_1\",\n\t\"VOICEMACRO_12_Or_1_FEMALE\",\n\t\"VOICEMACRO_12_Or_2\",\n\t\"VOICEMACRO_12_Or_2_FEMALE\",\n\t\"VOICEMACRO_12_Sc_0\",\n\t\"VOICEMACRO_12_Sc_0_FEMALE\",\n\t\"VOICEMACRO_12_Sc_1\",\n\t\"VOICEMACRO_12_Sc_1_FEMALE\",\n\t\"VOICEMACRO_12_Sc_2\",\n\t\"VOICEMACRO_12_Sc_2_FEMALE\",\n\t\"VOICEMACRO_12_Ta_0\",\n\t\"VOICEMACRO_12_Ta_0_FEMALE\",\n\t\"VOICEMACRO_12_Ta_1\",\n\t\"VOICEMACRO_12_Ta_1_FEMALE\",\n\t\"VOICEMACRO_12_Ta_2\",\n\t\"VOICEMACRO_12_Ta_2_FEMALE\",\n\t\"VOICEMACRO_12_Tr_0\",\n\t\"VOICEMACRO_12_Tr_0_FEMALE\",\n\t\"VOICEMACRO_12_Tr_1\",\n\t\"VOICEMACRO_12_Tr_1_FEMALE\",\n\t\"VOICEMACRO_12_Tr_2\",\n\t\"VOICEMACRO_12_Tr_2_FEMALE\",\n\t\"VOICEMACRO_13_Dw_0\",\n\t\"VOICEMACRO_13_Dw_0_FEMALE\",\n\t\"VOICEMACRO_13_Dw_1\",\n\t\"VOICEMACRO_13_Dw_1_FEMALE\",\n\t\"VOICEMACRO_13_Dw_2\",\n\t\"VOICEMACRO_13_Dw_2_FEMALE\",\n\t\"VOICEMACRO_13_Gn_0\",\n\t\"VOICEMACRO_13_Gn_0_FEMALE\",\n\t\"VOICEMACRO_13_Gn_1\",\n\t\"VOICEMACRO_13_Gn_1_FEMALE\",\n\t\"VOICEMACRO_13_Gn_2\",\n\t\"VOICEMACRO_13_Gn_2_FEMALE\",\n\t\"VOICEMACRO_13_Gn_3\",\n\t\"VOICEMACRO_13_Gn_3_FEMALE\",\n\t\"VOICEMACRO_13_Hu_0\",\n\t\"VOICEMACRO_13_Hu_0_FEMALE\",\n\t\"VOICEMACRO_13_Hu_1\",\n\t\"VOICEMACRO_13_Hu_1_FEMALE\",\n\t\"VOICEMACRO_13_Hu_2\",\n\t\"VOICEMACRO_13_Hu_2_FEMALE\",\n\t\"VOICEMACRO_13_Ni_0\",\n\t\"VOICEMACRO_13_Ni_0_FEMALE\",\n\t\"VOICEMACRO_13_Ni_1\",\n\t\"VOICEMACRO_13_Ni_1_FEMALE\",\n\t\"VOICEMACRO_13_Ni_2\",\n\t\"VOICEMACRO_13_Ni_2_FEMALE\",\n\t\"VOICEMACRO_13_Or_0\",\n\t\"VOICEMACRO_13_Or_0_FEMALE\",\n\t\"VOICEMACRO_13_Or_1\",\n\t\"VOICEMACRO_13_Or_1_FEMALE\",\n\t\"VOICEMACRO_13_Or_2\",\n\t\"VOICEMACRO_13_Or_2_FEMALE\",\n\t\"VOICEMACRO_13_Sc_0\",\n\t\"VOICEMACRO_13_Sc_0_FEMALE\",\n\t\"VOICEMACRO_13_Sc_1\",\n\t\"VOICEMACRO_13_Sc_1_FEMALE\",\n\t\"VOICEMACRO_13_Sc_2\",\n\t\"VOICEMACRO_13_Sc_2_FEMALE\",\n\t\"VOICEMACRO_13_Ta_0\",\n\t\"VOICEMACRO_13_Ta_0_FEMALE\",\n\t\"VOICEMACRO_13_Ta_1\",\n\t\"VOICEMACRO_13_Ta_1_FEMALE\",\n\t\"VOICEMACRO_13_Ta_2\",\n\t\"VOICEMACRO_13_Ta_2_FEMALE\",\n\t\"VOICEMACRO_13_Tr_0\",\n\t\"VOICEMACRO_13_Tr_0_FEMALE\",\n\t\"VOICEMACRO_13_Tr_1\",\n\t\"VOICEMACRO_13_Tr_1_FEMALE\",\n\t\"VOICEMACRO_13_Tr_2\",\n\t\"VOICEMACRO_13_Tr_2_FEMALE\",\n\t\"VOICEMACRO_14_Dw_0\",\n\t\"VOICEMACRO_14_Dw_0_FEMALE\",\n\t\"VOICEMACRO_14_Dw_1\",\n\t\"VOICEMACRO_14_Dw_1_FEMALE\",\n\t\"VOICEMACRO_14_Dw_2\",\n\t\"VOICEMACRO_14_Dw_2_FEMALE\",\n\t\"VOICEMACRO_14_Dw_3\",\n\t\"VOICEMACRO_14_Gn_0\",\n\t\"VOICEMACRO_14_Gn_0_FEMALE\",\n\t\"VOICEMACRO_14_Gn_1\",\n\t\"VOICEMACRO_14_Gn_1_FEMALE\",\n\t\"VOICEMACRO_14_Gn_2\",\n\t\"VOICEMACRO_14_Gn_2_FEMALE\",\n\t\"VOICEMACRO_14_Hu_0\",\n\t\"VOICEMACRO_14_Hu_0_FEMALE\",\n\t\"VOICEMACRO_14_Hu_1\",\n\t\"VOICEMACRO_14_Hu_1_FEMALE\",\n\t\"VOICEMACRO_14_Hu_2\",\n\t\"VOICEMACRO_14_Hu_2_FEMALE\",\n\t\"VOICEMACRO_14_Ni_0\",\n\t\"VOICEMACRO_14_Ni_0_FEMALE\",\n\t\"VOICEMACRO_14_Ni_1\",\n\t\"VOICEMACRO_14_Ni_1_FEMALE\",\n\t\"VOICEMACRO_14_Ni_2\",\n\t\"VOICEMACRO_14_Ni_2_FEMALE\",\n\t\"VOICEMACRO_14_Or_0\",\n\t\"VOICEMACRO_14_Or_0_FEMALE\",\n\t\"VOICEMACRO_14_Or_1\",\n\t\"VOICEMACRO_14_Or_1_FEMALE\",\n\t\"VOICEMACRO_14_Or_2\",\n\t\"VOICEMACRO_14_Or_2_FEMALE\",\n\t\"VOICEMACRO_14_Or_3\",\n\t\"VOICEMACRO_14_Or_3_FEMALE\",\n\t\"VOICEMACRO_14_Sc_0\",\n\t\"VOICEMACRO_14_Sc_0_FEMALE\",\n\t\"VOICEMACRO_14_Sc_1\",\n\t\"VOICEMACRO_14_Sc_1_FEMALE\",\n\t\"VOICEMACRO_14_Sc_2\",\n\t\"VOICEMACRO_14_Sc_2_FEMALE\",\n\t\"VOICEMACRO_14_Ta_0\",\n\t\"VOICEMACRO_14_Ta_0_FEMALE\",\n\t\"VOICEMACRO_14_Ta_1\",\n\t\"VOICEMACRO_14_Ta_1_FEMALE\",\n\t\"VOICEMACRO_14_Ta_2\",\n\t\"VOICEMACRO_14_Ta_2_FEMALE\",\n\t\"VOICEMACRO_14_Tr_0\",\n\t\"VOICEMACRO_14_Tr_0_FEMALE\",\n\t\"VOICEMACRO_14_Tr_1\",\n\t\"VOICEMACRO_14_Tr_1_FEMALE\",\n\t\"VOICEMACRO_14_Tr_2\",\n\t\"VOICEMACRO_14_Tr_2_FEMALE\",\n\t\"VOICEMACRO_14_Tr_3\",\n\t\"VOICEMACRO_15_Dw_0\",\n\t\"VOICEMACRO_15_Dw_0_FEMALE\",\n\t\"VOICEMACRO_15_Dw_1\",\n\t\"VOICEMACRO_15_Dw_1_FEMALE\",\n\t\"VOICEMACRO_15_Dw_2\",\n\t\"VOICEMACRO_15_Dw_2_FEMALE\",\n\t\"VOICEMACRO_15_Dw_3\",\n\t\"VOICEMACRO_15_Gn_0\",\n\t\"VOICEMACRO_15_Gn_0_FEMALE\",\n\t\"VOICEMACRO_15_Gn_1\",\n\t\"VOICEMACRO_15_Gn_1_FEMALE\",\n\t\"VOICEMACRO_15_Gn_2\",\n\t\"VOICEMACRO_15_Gn_2_FEMALE\",\n\t\"VOICEMACRO_15_Hu_0\",\n\t\"VOICEMACRO_15_Hu_0_FEMALE\",\n\t\"VOICEMACRO_15_Hu_1\",\n\t\"VOICEMACRO_15_Hu_1_FEMALE\",\n\t\"VOICEMACRO_15_Hu_2\",\n\t\"VOICEMACRO_15_Hu_2_FEMALE\",\n\t\"VOICEMACRO_15_Hu_3\",\n\t\"VOICEMACRO_15_Ni_0\",\n\t\"VOICEMACRO_15_Ni_0_FEMALE\",\n\t\"VOICEMACRO_15_Ni_1\",\n\t\"VOICEMACRO_15_Ni_1_FEMALE\",\n\t\"VOICEMACRO_15_Ni_2\",\n\t\"VOICEMACRO_15_Ni_2_FEMALE\",\n\t\"VOICEMACRO_15_Or_0\",\n\t\"VOICEMACRO_15_Or_0_FEMALE\",\n\t\"VOICEMACRO_15_Or_1\",\n\t\"VOICEMACRO_15_Or_1_FEMALE\",\n\t\"VOICEMACRO_15_Or_2\",\n\t\"VOICEMACRO_15_Or_2_FEMALE\",\n\t\"VOICEMACRO_15_Sc_0\",\n\t\"VOICEMACRO_15_Sc_0_FEMALE\",\n\t\"VOICEMACRO_15_Sc_1\",\n\t\"VOICEMACRO_15_Sc_1_FEMALE\",\n\t\"VOICEMACRO_15_Sc_2\",\n\t\"VOICEMACRO_15_Sc_2_FEMALE\",\n\t\"VOICEMACRO_15_Ta_0\",\n\t\"VOICEMACRO_15_Ta_0_FEMALE\",\n\t\"VOICEMACRO_15_Ta_1\",\n\t\"VOICEMACRO_15_Ta_1_FEMALE\",\n\t\"VOICEMACRO_15_Ta_2\",\n\t\"VOICEMACRO_15_Ta_2_FEMALE\",\n\t\"VOICEMACRO_15_Tr_0\",\n\t\"VOICEMACRO_15_Tr_0_FEMALE\",\n\t\"VOICEMACRO_15_Tr_1\",\n\t\"VOICEMACRO_15_Tr_1_FEMALE\",\n\t\"VOICEMACRO_15_Tr_2\",\n\t\"VOICEMACRO_15_Tr_2_FEMALE\",\n\t\"VOICEMACRO_15_Tr_3\",\n\t\"VOICEMACRO_16_Dw_0\",\n\t\"VOICEMACRO_16_Dw_0_FEMALE\",\n\t\"VOICEMACRO_16_Dw_1\",\n\t\"VOICEMACRO_16_Dw_1_FEMALE\",\n\t\"VOICEMACRO_16_Dw_2\",\n\t\"VOICEMACRO_16_Dw_2_FEMALE\",\n\t\"VOICEMACRO_16_Dw_3\",\n\t\"VOICEMACRO_16_Dw_3_FEMALE\",\n\t\"VOICEMACRO_16_Gn_0\",\n\t\"VOICEMACRO_16_Gn_0_FEMALE\",\n\t\"VOICEMACRO_16_Gn_1\",\n\t\"VOICEMACRO_16_Gn_1_FEMALE\",\n\t\"VOICEMACRO_16_Gn_2\",\n\t\"VOICEMACRO_16_Gn_2_FEMALE\",\n\t\"VOICEMACRO_16_Hu_0\",\n\t\"VOICEMACRO_16_Hu_0_FEMALE\",\n\t\"VOICEMACRO_16_Hu_1\",\n\t\"VOICEMACRO_16_Hu_1_FEMALE\",\n\t\"VOICEMACRO_16_Hu_2\",\n\t\"VOICEMACRO_16_Hu_2_FEMALE\",\n\t\"VOICEMACRO_16_Ni_0\",\n\t\"VOICEMACRO_16_Ni_0_FEMALE\",\n\t\"VOICEMACRO_16_Ni_1\",\n\t\"VOICEMACRO_16_Ni_1_FEMALE\",\n\t\"VOICEMACRO_16_Ni_2\",\n\t\"VOICEMACRO_16_Ni_2_FEMALE\",\n\t\"VOICEMACRO_16_Or_0\",\n\t\"VOICEMACRO_16_Or_0_FEMALE\",\n\t\"VOICEMACRO_16_Or_1\",\n\t\"VOICEMACRO_16_Or_1_FEMALE\",\n\t\"VOICEMACRO_16_Or_2\",\n\t\"VOICEMACRO_16_Or_2_FEMALE\",\n\t\"VOICEMACRO_16_Sc_0\",\n\t\"VOICEMACRO_16_Sc_0_FEMALE\",\n\t\"VOICEMACRO_16_Sc_1\",\n\t\"VOICEMACRO_16_Sc_1_FEMALE\",\n\t\"VOICEMACRO_16_Sc_2\",\n\t\"VOICEMACRO_16_Sc_2_FEMALE\",\n\t\"VOICEMACRO_16_Ta_0\",\n\t\"VOICEMACRO_16_Ta_0_FEMALE\",\n\t\"VOICEMACRO_16_Ta_1\",\n\t\"VOICEMACRO_16_Ta_1_FEMALE\",\n\t\"VOICEMACRO_16_Ta_2\",\n\t\"VOICEMACRO_16_Ta_2_FEMALE\",\n\t\"VOICEMACRO_16_Ta_3\",\n\t\"VOICEMACRO_16_Tr_0\",\n\t\"VOICEMACRO_16_Tr_0_FEMALE\",\n\t\"VOICEMACRO_16_Tr_1\",\n\t\"VOICEMACRO_16_Tr_1_FEMALE\",\n\t\"VOICEMACRO_16_Tr_2\",\n\t\"VOICEMACRO_16_Tr_2_FEMALE\",\n\t\"VOICEMACRO_17_Dw_0\",\n\t\"VOICEMACRO_17_Dw_0_FEMALE\",\n\t\"VOICEMACRO_17_Dw_1\",\n\t\"VOICEMACRO_17_Dw_1_FEMALE\",\n\t\"VOICEMACRO_17_Dw_2\",\n\t\"VOICEMACRO_17_Dw_2_FEMALE\",\n\t\"VOICEMACRO_17_Gn_0\",\n\t\"VOICEMACRO_17_Gn_0_FEMALE\",\n\t\"VOICEMACRO_17_Gn_1\",\n\t\"VOICEMACRO_17_Gn_1_FEMALE\",\n\t\"VOICEMACRO_17_Gn_2\",\n\t\"VOICEMACRO_17_Gn_2_FEMALE\",\n\t\"VOICEMACRO_17_Hu_0\",\n\t\"VOICEMACRO_17_Hu_0_FEMALE\",\n\t\"VOICEMACRO_17_Hu_1\",\n\t\"VOICEMACRO_17_Hu_1_FEMALE\",\n\t\"VOICEMACRO_17_Hu_2\",\n\t\"VOICEMACRO_17_Hu_2_FEMALE\",\n\t\"VOICEMACRO_17_Ni_0\",\n\t\"VOICEMACRO_17_Ni_0_FEMALE\",\n\t\"VOICEMACRO_17_Ni_1\",\n\t\"VOICEMACRO_17_Ni_1_FEMALE\",\n\t\"VOICEMACRO_17_Ni_2\",\n\t\"VOICEMACRO_17_Ni_2_FEMALE\",\n\t\"VOICEMACRO_17_Or_0\",\n\t\"VOICEMACRO_17_Or_0_FEMALE\",\n\t\"VOICEMACRO_17_Or_1\",\n\t\"VOICEMACRO_17_Or_1_FEMALE\",\n\t\"VOICEMACRO_17_Or_2\",\n\t\"VOICEMACRO_17_Or_2_FEMALE\",\n\t\"VOICEMACRO_17_Sc_0\",\n\t\"VOICEMACRO_17_Sc_0_FEMALE\",\n\t\"VOICEMACRO_17_Sc_1\",\n\t\"VOICEMACRO_17_Sc_1_FEMALE\",\n\t\"VOICEMACRO_17_Sc_2_FEMALE\",\n\t\"VOICEMACRO_17_Ta_0\",\n\t\"VOICEMACRO_17_Ta_0_FEMALE\",\n\t\"VOICEMACRO_17_Ta_1\",\n\t\"VOICEMACRO_17_Ta_1_FEMALE\",\n\t\"VOICEMACRO_17_Ta_2\",\n\t\"VOICEMACRO_17_Ta_2_FEMALE\",\n\t\"VOICEMACRO_17_Tr_0\",\n\t\"VOICEMACRO_17_Tr_0_FEMALE\",\n\t\"VOICEMACRO_17_Tr_1\",\n\t\"VOICEMACRO_17_Tr_1_FEMALE\",\n\t\"VOICEMACRO_17_Tr_2\",\n\t\"VOICEMACRO_17_Tr_2_FEMALE\",\n\t\"VOICEMACRO_18_Dw_0\",\n\t\"VOICEMACRO_18_Dw_0_FEMALE\",\n\t\"VOICEMACRO_18_Dw_1\",\n\t\"VOICEMACRO_18_Dw_1_FEMALE\",\n\t\"VOICEMACRO_18_Dw_2\",\n\t\"VOICEMACRO_18_Dw_2_FEMALE\",\n\t\"VOICEMACRO_18_Dw_3\",\n\t\"VOICEMACRO_18_Dw_3_FEMALE\",\n\t\"VOICEMACRO_18_Dw_4\",\n\t\"VOICEMACRO_18_Gn_0\",\n\t\"VOICEMACRO_18_Gn_0_FEMALE\",\n\t\"VOICEMACRO_18_Gn_1\",\n\t\"VOICEMACRO_18_Gn_1_FEMALE\",\n\t\"VOICEMACRO_18_Gn_2\",\n\t\"VOICEMACRO_18_Gn_2_FEMALE\",\n\t\"VOICEMACRO_18_Gn_3_FEMALE\",\n\t\"VOICEMACRO_18_Hu_0\",\n\t\"VOICEMACRO_18_Hu_0_FEMALE\",\n\t\"VOICEMACRO_18_Hu_1\",\n\t\"VOICEMACRO_18_Hu_1_FEMALE\",\n\t\"VOICEMACRO_18_Hu_2\",\n\t\"VOICEMACRO_18_Hu_2_FEMALE\",\n\t\"VOICEMACRO_18_Ni_0\",\n\t\"VOICEMACRO_18_Ni_0_FEMALE\",\n\t\"VOICEMACRO_18_Ni_1\",\n\t\"VOICEMACRO_18_Ni_1_FEMALE\",\n\t\"VOICEMACRO_18_Ni_2\",\n\t\"VOICEMACRO_18_Ni_2_FEMALE\",\n\t\"VOICEMACRO_18_Or_0\",\n\t\"VOICEMACRO_18_Or_0_FEMALE\",\n\t\"VOICEMACRO_18_Or_1\",\n\t\"VOICEMACRO_18_Or_1_FEMALE\",\n\t\"VOICEMACRO_18_Or_2\",\n\t\"VOICEMACRO_18_Or_2_FEMALE\",\n\t\"VOICEMACRO_18_Sc_0\",\n\t\"VOICEMACRO_18_Sc_0_FEMALE\",\n\t\"VOICEMACRO_18_Sc_1\",\n\t\"VOICEMACRO_18_Sc_1_FEMALE\",\n\t\"VOICEMACRO_18_Sc_2\",\n\t\"VOICEMACRO_18_Sc_2_FEMALE\",\n\t\"VOICEMACRO_18_Sc_3_FEMALE\",\n\t\"VOICEMACRO_18_Ta_0\",\n\t\"VOICEMACRO_18_Ta_0_FEMALE\",\n\t\"VOICEMACRO_18_Ta_1\",\n\t\"VOICEMACRO_18_Ta_1_FEMALE\",\n\t\"VOICEMACRO_18_Ta_2\",\n\t\"VOICEMACRO_18_Ta_2_FEMALE\",\n\t\"VOICEMACRO_18_Tr_0\",\n\t\"VOICEMACRO_18_Tr_0_FEMALE\",\n\t\"VOICEMACRO_18_Tr_1\",\n\t\"VOICEMACRO_18_Tr_1_FEMALE\",\n\t\"VOICEMACRO_18_Tr_2\",\n\t\"VOICEMACRO_18_Tr_2_FEMALE\",\n\t\"VOICEMACRO_19_Dw_0\",\n\t\"VOICEMACRO_19_Dw_0_FEMALE\",\n\t\"VOICEMACRO_19_Dw_1\",\n\t\"VOICEMACRO_19_Dw_1_FEMALE\",\n\t\"VOICEMACRO_19_Dw_2\",\n\t\"VOICEMACRO_19_Dw_2_FEMALE\",\n\t\"VOICEMACRO_19_Dw_3\",\n\t\"VOICEMACRO_19_Dw_3_FEMALE\",\n\t\"VOICEMACRO_19_Dw_4\",\n\t\"VOICEMACRO_19_Dw_4_FEMALE\",\n\t\"VOICEMACRO_19_Dw_5\",\n\t\"VOICEMACRO_19_Gn_0\",\n\t\"VOICEMACRO_19_Gn_0_FEMALE\",\n\t\"VOICEMACRO_19_Gn_1\",\n\t\"VOICEMACRO_19_Gn_1_FEMALE\",\n\t\"VOICEMACRO_19_Gn_2\",\n\t\"VOICEMACRO_19_Gn_2_FEMALE\",\n\t\"VOICEMACRO_19_Gn_3\",\n\t\"VOICEMACRO_19_Gn_3_FEMALE\",\n\t\"VOICEMACRO_19_Gn_4_FEMALE\",\n\t\"VOICEMACRO_19_Hu_0\",\n\t\"VOICEMACRO_19_Hu_0_FEMALE\",\n\t\"VOICEMACRO_19_Hu_1\",\n\t\"VOICEMACRO_19_Hu_1_FEMALE\",\n\t\"VOICEMACRO_19_Hu_2\",\n\t\"VOICEMACRO_19_Hu_2_FEMALE\",\n\t\"VOICEMACRO_19_Hu_3\",\n\t\"VOICEMACRO_19_Hu_4\",\n\t\"VOICEMACRO_19_Hu_5\",\n\t\"VOICEMACRO_19_Ni_0\",\n\t\"VOICEMACRO_19_Ni_0_FEMALE\",\n\t\"VOICEMACRO_19_Ni_1\",\n\t\"VOICEMACRO_19_Ni_1_FEMALE\",\n\t\"VOICEMACRO_19_Ni_2\",\n\t\"VOICEMACRO_19_Ni_2_FEMALE\",\n\t\"VOICEMACRO_19_Ni_3\",\n\t\"VOICEMACRO_19_Ni_3_FEMALE\",\n\t\"VOICEMACRO_19_Ni_4\",\n\t\"VOICEMACRO_19_Or_0\",\n\t\"VOICEMACRO_19_Or_0_FEMALE\",\n\t\"VOICEMACRO_19_Or_1\",\n\t\"VOICEMACRO_19_Or_1_FEMALE\",\n\t\"VOICEMACRO_19_Or_2\",\n\t\"VOICEMACRO_19_Or_2_FEMALE\",\n\t\"VOICEMACRO_19_Or_3\",\n\t\"VOICEMACRO_19_Or_3_FEMALE\",\n\t\"VOICEMACRO_19_Or_4\",\n\t\"VOICEMACRO_19_Or_4_FEMALE\",\n\t\"VOICEMACRO_19_Or_5\",\n\t\"VOICEMACRO_19_Or_5_FEMALE\",\n\t\"VOICEMACRO_19_Sc_0\",\n\t\"VOICEMACRO_19_Sc_0_FEMALE\",\n\t\"VOICEMACRO_19_Sc_1\",\n\t\"VOICEMACRO_19_Sc_1_FEMALE\",\n\t\"VOICEMACRO_19_Sc_2\",\n\t\"VOICEMACRO_19_Sc_2_FEMALE\",\n\t\"VOICEMACRO_19_Sc_3\",\n\t\"VOICEMACRO_19_Sc_3_FEMALE\",\n\t\"VOICEMACRO_19_Sc_4\",\n\t\"VOICEMACRO_19_Sc_4_FEMALE\",\n\t\"VOICEMACRO_19_Sc_5\",\n\t\"VOICEMACRO_19_Sc_5_FEMALE\",\n\t\"VOICEMACRO_19_Ta_0\",\n\t\"VOICEMACRO_19_Ta_0_FEMALE\",\n\t\"VOICEMACRO_19_Ta_1\",\n\t\"VOICEMACRO_19_Ta_1_FEMALE\",\n\t\"VOICEMACRO_19_Ta_2\",\n\t\"VOICEMACRO_19_Ta_2_FEMALE\",\n\t\"VOICEMACRO_19_Ta_3\",\n\t\"VOICEMACRO_19_Ta_3_FEMALE\",\n\t\"VOICEMACRO_19_Ta_4\",\n\t\"VOICEMACRO_19_Ta_4_FEMALE\",\n\t\"VOICEMACRO_19_Ta_5\",\n\t\"VOICEMACRO_19_Tr_0\",\n\t\"VOICEMACRO_19_Tr_0_FEMALE\",\n\t\"VOICEMACRO_19_Tr_1\",\n\t\"VOICEMACRO_19_Tr_1_FEMALE\",\n\t\"VOICEMACRO_19_Tr_2\",\n\t\"VOICEMACRO_19_Tr_2_FEMALE\",\n\t\"VOICEMACRO_19_Tr_3\",\n\t\"VOICEMACRO_19_Tr_3_FEMALE\",\n\t\"VOICEMACRO_19_Tr_4_FEMALE\",\n\t\"VOICEMACRO_1_Dw_0\",\n\t\"VOICEMACRO_1_Dw_0_FEMALE\",\n\t\"VOICEMACRO_1_Dw_1\",\n\t\"VOICEMACRO_1_Dw_1_FEMALE\",\n\t\"VOICEMACRO_1_Gn_0\",\n\t\"VOICEMACRO_1_Gn_0_FEMALE\",\n\t\"VOICEMACRO_1_Hu_0\",\n\t\"VOICEMACRO_1_Hu_0_FEMALE\",\n\t\"VOICEMACRO_1_Hu_1\",\n\t\"VOICEMACRO_1_Hu_1_FEMALE\",\n\t\"VOICEMACRO_1_Ni_0\",\n\t\"VOICEMACRO_1_Ni_0_FEMALE\",\n\t\"VOICEMACRO_1_Ni_1\",\n\t\"VOICEMACRO_1_Ni_1_FEMALE\",\n\t\"VOICEMACRO_1_Or_0\",\n\t\"VOICEMACRO_1_Or_0_FEMALE\",\n\t\"VOICEMACRO_1_Or_1\",\n\t\"VOICEMACRO_1_Or_1_FEMALE\",\n\t\"VOICEMACRO_1_Or_2\",\n\t\"VOICEMACRO_1_Sc_0\",\n\t\"VOICEMACRO_1_Sc_0_FEMALE\",\n\t\"VOICEMACRO_1_Sc_1\",\n\t\"VOICEMACRO_1_Sc_1_FEMALE\",\n\t\"VOICEMACRO_1_Ta_0\",\n\t\"VOICEMACRO_1_Ta_0_FEMALE\",\n\t\"VOICEMACRO_1_Ta_1\",\n\t\"VOICEMACRO_1_Ta_1_FEMALE\",\n\t\"VOICEMACRO_1_Ta_2_FEMALE\",\n\t\"VOICEMACRO_1_Tr_0\",\n\t\"VOICEMACRO_1_Tr_0_FEMALE\",\n\t\"VOICEMACRO_1_Tr_1\",\n\t\"VOICEMACRO_1_Tr_1_FEMALE\",\n\t\"VOICEMACRO_20_Dw_0\",\n\t\"VOICEMACRO_20_Dw_0_FEMALE\",\n\t\"VOICEMACRO_20_Dw_1\",\n\t\"VOICEMACRO_20_Dw_1_FEMALE\",\n\t\"VOICEMACRO_20_Dw_2\",\n\t\"VOICEMACRO_20_Dw_2_FEMALE\",\n\t\"VOICEMACRO_20_Dw_3\",\n\t\"VOICEMACRO_20_Dw_3_FEMALE\",\n\t\"VOICEMACRO_20_Dw_4\",\n\t\"VOICEMACRO_20_Dw_4_FEMALE\",\n\t\"VOICEMACRO_20_Dw_5\",\n\t\"VOICEMACRO_20_Dw_5_FEMALE\",\n\t\"VOICEMACRO_20_Dw_6\",\n\t\"VOICEMACRO_20_Gn_0\",\n\t\"VOICEMACRO_20_Gn_0_FEMALE\",\n\t\"VOICEMACRO_20_Gn_1\",\n\t\"VOICEMACRO_20_Gn_1_FEMALE\",\n\t\"VOICEMACRO_20_Gn_2\",\n\t\"VOICEMACRO_20_Gn_2_FEMALE\",\n\t\"VOICEMACRO_20_Gn_3\",\n\t\"VOICEMACRO_20_Gn_3_FEMALE\",\n\t\"VOICEMACRO_20_Gn_4\",\n\t\"VOICEMACRO_20_Gn_5\",\n\t\"VOICEMACRO_20_Hu_0\",\n\t\"VOICEMACRO_20_Hu_0_FEMALE\",\n\t\"VOICEMACRO_20_Hu_1\",\n\t\"VOICEMACRO_20_Hu_1_FEMALE\",\n\t\"VOICEMACRO_20_Hu_2\",\n\t\"VOICEMACRO_20_Hu_2_FEMALE\",\n\t\"VOICEMACRO_20_Hu_3\",\n\t\"VOICEMACRO_20_Hu_3_FEMALE\",\n\t\"VOICEMACRO_20_Hu_4\",\n\t\"VOICEMACRO_20_Hu_4_FEMALE\",\n\t\"VOICEMACRO_20_Hu_5\",\n\t\"VOICEMACRO_20_Hu_5_FEMALE\",\n\t\"VOICEMACRO_20_Hu_6_FEMALE\",\n\t\"VOICEMACRO_20_Ni_0\",\n\t\"VOICEMACRO_20_Ni_0_FEMALE\",\n\t\"VOICEMACRO_20_Ni_1\",\n\t\"VOICEMACRO_20_Ni_1_FEMALE\",\n\t\"VOICEMACRO_20_Ni_2\",\n\t\"VOICEMACRO_20_Ni_2_FEMALE\",\n\t\"VOICEMACRO_20_Ni_3\",\n\t\"VOICEMACRO_20_Ni_3_FEMALE\",\n\t\"VOICEMACRO_20_Ni_4\",\n\t\"VOICEMACRO_20_Ni_4_FEMALE\",\n\t\"VOICEMACRO_20_Ni_5\",\n\t\"VOICEMACRO_20_Ni_6\",\n\t\"VOICEMACRO_20_Ni_7\",\n\t\"VOICEMACRO_20_Or_0\",\n\t\"VOICEMACRO_20_Or_0_FEMALE\",\n\t\"VOICEMACRO_20_Or_1\",\n\t\"VOICEMACRO_20_Or_1_FEMALE\",\n\t\"VOICEMACRO_20_Or_2\",\n\t\"VOICEMACRO_20_Or_2_FEMALE\",\n\t\"VOICEMACRO_20_Or_3\",\n\t\"VOICEMACRO_20_Or_3_FEMALE\",\n\t\"VOICEMACRO_20_Or_4\",\n\t\"VOICEMACRO_20_Or_4_FEMALE\",\n\t\"VOICEMACRO_20_Or_5\",\n\t\"VOICEMACRO_20_Or_5_FEMALE\",\n\t\"VOICEMACRO_20_Sc_0\",\n\t\"VOICEMACRO_20_Sc_0_FEMALE\",\n\t\"VOICEMACRO_20_Sc_1\",\n\t\"VOICEMACRO_20_Sc_1_FEMALE\",\n\t\"VOICEMACRO_20_Sc_2\",\n\t\"VOICEMACRO_20_Sc_2_FEMALE\",\n\t\"VOICEMACRO_20_Sc_3\",\n\t\"VOICEMACRO_20_Sc_3_FEMALE\",\n\t\"VOICEMACRO_20_Sc_4\",\n\t\"VOICEMACRO_20_Sc_4_FEMALE\",\n\t\"VOICEMACRO_20_Sc_5_FEMALE\",\n\t\"VOICEMACRO_20_Sc_6_FEMALE\",\n\t\"VOICEMACRO_20_Sc_7_FEMALE\",\n\t\"VOICEMACRO_20_Ta_0\",\n\t\"VOICEMACRO_20_Ta_0_FEMALE\",\n\t\"VOICEMACRO_20_Ta_1\",\n\t\"VOICEMACRO_20_Ta_1_FEMALE\",\n\t\"VOICEMACRO_20_Ta_2\",\n\t\"VOICEMACRO_20_Ta_2_FEMALE\",\n\t\"VOICEMACRO_20_Ta_3\",\n\t\"VOICEMACRO_20_Ta_3_FEMALE\",\n\t\"VOICEMACRO_20_Ta_4\",\n\t\"VOICEMACRO_20_Tr_0\",\n\t\"VOICEMACRO_20_Tr_0_FEMALE\",\n\t\"VOICEMACRO_20_Tr_1\",\n\t\"VOICEMACRO_20_Tr_1_FEMALE\",\n\t\"VOICEMACRO_20_Tr_2\",\n\t\"VOICEMACRO_20_Tr_2_FEMALE\",\n\t\"VOICEMACRO_20_Tr_3\",\n\t\"VOICEMACRO_20_Tr_3_FEMALE\",\n\t\"VOICEMACRO_20_Tr_4\",\n\t\"VOICEMACRO_20_Tr_4_FEMALE\",\n\t\"VOICEMACRO_20_Tr_5\",\n\t\"VOICEMACRO_2_Dw_0\",\n\t\"VOICEMACRO_2_Dw_0_FEMALE\",\n\t\"VOICEMACRO_2_Dw_1\",\n\t\"VOICEMACRO_2_Dw_1_FEMALE\",\n\t\"VOICEMACRO_2_Gn_0\",\n\t\"VOICEMACRO_2_Gn_0_FEMALE\",\n\t\"VOICEMACRO_2_Gn_1\",\n\t\"VOICEMACRO_2_Gn_1_FEMALE\",\n\t\"VOICEMACRO_2_Gn_2\",\n\t\"VOICEMACRO_2_Hu_0\",\n\t\"VOICEMACRO_2_Hu_0_FEMALE\",\n\t\"VOICEMACRO_2_Hu_1\",\n\t\"VOICEMACRO_2_Hu_1_FEMALE\",\n\t\"VOICEMACRO_2_Ni_0\",\n\t\"VOICEMACRO_2_Ni_0_FEMALE\",\n\t\"VOICEMACRO_2_Ni_1\",\n\t\"VOICEMACRO_2_Ni_1_FEMALE\",\n\t\"VOICEMACRO_2_Ni_2_FEMALE\",\n\t\"VOICEMACRO_2_Or_0\",\n\t\"VOICEMACRO_2_Or_0_FEMALE\",\n\t\"VOICEMACRO_2_Or_1\",\n\t\"VOICEMACRO_2_Or_1_FEMALE\",\n\t\"VOICEMACRO_2_Or_2\",\n\t\"VOICEMACRO_2_Or_2_FEMALE\",\n\t\"VOICEMACRO_2_Sc_0\",\n\t\"VOICEMACRO_2_Sc_0_FEMALE\",\n\t\"VOICEMACRO_2_Sc_1\",\n\t\"VOICEMACRO_2_Sc_1_FEMALE\",\n\t\"VOICEMACRO_2_Ta_0\",\n\t\"VOICEMACRO_2_Ta_0_FEMALE\",\n\t\"VOICEMACRO_2_Ta_1\",\n\t\"VOICEMACRO_2_Ta_1_FEMALE\",\n\t\"VOICEMACRO_2_Ta_2\",\n\t\"VOICEMACRO_2_Tr_0\",\n\t\"VOICEMACRO_2_Tr_0_FEMALE\",\n\t\"VOICEMACRO_2_Tr_1\",\n\t\"VOICEMACRO_2_Tr_1_FEMALE\",\n\t\"VOICEMACRO_3_Dw_0\",\n\t\"VOICEMACRO_3_Dw_0_FEMALE\",\n\t\"VOICEMACRO_3_Dw_1\",\n\t\"VOICEMACRO_3_Dw_1_FEMALE\",\n\t\"VOICEMACRO_3_Dw_2\",\n\t\"VOICEMACRO_3_Gn_0\",\n\t\"VOICEMACRO_3_Gn_0_FEMALE\",\n\t\"VOICEMACRO_3_Gn_1\",\n\t\"VOICEMACRO_3_Gn_1_FEMALE\",\n\t\"VOICEMACRO_3_Gn_2\",\n\t\"VOICEMACRO_3_Gn_2_FEMALE\",\n\t\"VOICEMACRO_3_Hu_0\",\n\t\"VOICEMACRO_3_Hu_0_FEMALE\",\n\t\"VOICEMACRO_3_Hu_1\",\n\t\"VOICEMACRO_3_Hu_1_FEMALE\",\n\t\"VOICEMACRO_3_Ni_0\",\n\t\"VOICEMACRO_3_Ni_0_FEMALE\",\n\t\"VOICEMACRO_3_Ni_1\",\n\t\"VOICEMACRO_3_Ni_1_FEMALE\",\n\t\"VOICEMACRO_3_Or_0\",\n\t\"VOICEMACRO_3_Or_0_FEMALE\",\n\t\"VOICEMACRO_3_Or_1\",\n\t\"VOICEMACRO_3_Or_1_FEMALE\",\n\t\"VOICEMACRO_3_Sc_0\",\n\t\"VOICEMACRO_3_Sc_0_FEMALE\",\n\t\"VOICEMACRO_3_Sc_1\",\n\t\"VOICEMACRO_3_Sc_1_FEMALE\",\n\t\"VOICEMACRO_3_Ta_0\",\n\t\"VOICEMACRO_3_Ta_0_FEMALE\",\n\t\"VOICEMACRO_3_Ta_1\",\n\t\"VOICEMACRO_3_Ta_1_FEMALE\",\n\t\"VOICEMACRO_3_Tr_0\",\n\t\"VOICEMACRO_3_Tr_0_FEMALE\",\n\t\"VOICEMACRO_3_Tr_1\",\n\t\"VOICEMACRO_3_Tr_1_FEMALE\",\n\t\"VOICEMACRO_4_Dw_0\",\n\t\"VOICEMACRO_4_Dw_0_FEMALE\",\n\t\"VOICEMACRO_4_Dw_1\",\n\t\"VOICEMACRO_4_Dw_1_FEMALE\",\n\t\"VOICEMACRO_4_Dw_2\",\n\t\"VOICEMACRO_4_Gn_0\",\n\t\"VOICEMACRO_4_Gn_0_FEMALE\",\n\t\"VOICEMACRO_4_Gn_1\",\n\t\"VOICEMACRO_4_Gn_1_FEMALE\",\n\t\"VOICEMACRO_4_Hu_0\",\n\t\"VOICEMACRO_4_Hu_0_FEMALE\",\n\t\"VOICEMACRO_4_Hu_1\",\n\t\"VOICEMACRO_4_Hu_1_FEMALE\",\n\t\"VOICEMACRO_4_Ni_0\",\n\t\"VOICEMACRO_4_Ni_0_FEMALE\",\n\t\"VOICEMACRO_4_Ni_1\",\n\t\"VOICEMACRO_4_Ni_1_FEMALE\",\n\t\"VOICEMACRO_4_Ni_2_FEMALE\",\n\t\"VOICEMACRO_4_Or_0\",\n\t\"VOICEMACRO_4_Or_0_FEMALE\",\n\t\"VOICEMACRO_4_Or_1\",\n\t\"VOICEMACRO_4_Or_1_FEMALE\",\n\t\"VOICEMACRO_4_Or_2\",\n\t\"VOICEMACRO_4_Or_2_FEMALE\",\n\t\"VOICEMACRO_4_Sc_0\",\n\t\"VOICEMACRO_4_Sc_0_FEMALE\",\n\t\"VOICEMACRO_4_Sc_1\",\n\t\"VOICEMACRO_4_Sc_1_FEMALE\",\n\t\"VOICEMACRO_4_Ta_0\",\n\t\"VOICEMACRO_4_Ta_0_FEMALE\",\n\t\"VOICEMACRO_4_Ta_1\",\n\t\"VOICEMACRO_4_Ta_1_FEMALE\",\n\t\"VOICEMACRO_4_Tr_0\",\n\t\"VOICEMACRO_4_Tr_0_FEMALE\",\n\t\"VOICEMACRO_4_Tr_1\",\n\t\"VOICEMACRO_4_Tr_1_FEMALE\",\n\t\"VOICEMACRO_5_Dw_0\",\n\t\"VOICEMACRO_5_Dw_0_FEMALE\",\n\t\"VOICEMACRO_5_Dw_1\",\n\t\"VOICEMACRO_5_Dw_1_FEMALE\",\n\t\"VOICEMACRO_5_Gn_0\",\n\t\"VOICEMACRO_5_Gn_0_FEMALE\",\n\t\"VOICEMACRO_5_Gn_1\",\n\t\"VOICEMACRO_5_Gn_1_FEMALE\",\n\t\"VOICEMACRO_5_Hu_0\",\n\t\"VOICEMACRO_5_Hu_0_FEMALE\",\n\t\"VOICEMACRO_5_Hu_1\",\n\t\"VOICEMACRO_5_Hu_1_FEMALE\",\n\t\"VOICEMACRO_5_Ni_0\",\n\t\"VOICEMACRO_5_Ni_0_FEMALE\",\n\t\"VOICEMACRO_5_Ni_1\",\n\t\"VOICEMACRO_5_Ni_1_FEMALE\",\n\t\"VOICEMACRO_5_Or_0\",\n\t\"VOICEMACRO_5_Or_0_FEMALE\",\n\t\"VOICEMACRO_5_Or_1\",\n\t\"VOICEMACRO_5_Or_1_FEMALE\",\n\t\"VOICEMACRO_5_Sc_0\",\n\t\"VOICEMACRO_5_Sc_0_FEMALE\",\n\t\"VOICEMACRO_5_Sc_1\",\n\t\"VOICEMACRO_5_Sc_1_FEMALE\",\n\t\"VOICEMACRO_5_Ta_0\",\n\t\"VOICEMACRO_5_Ta_0_FEMALE\",\n\t\"VOICEMACRO_5_Ta_1\",\n\t\"VOICEMACRO_5_Ta_1_FEMALE\",\n\t\"VOICEMACRO_5_Tr_0\",\n\t\"VOICEMACRO_5_Tr_0_FEMALE\",\n\t\"VOICEMACRO_5_Tr_1\",\n\t\"VOICEMACRO_5_Tr_1_FEMALE\",\n\t\"VOICEMACRO_6_Dw_0\",\n\t\"VOICEMACRO_6_Dw_0_FEMALE\",\n\t\"VOICEMACRO_6_Dw_1\",\n\t\"VOICEMACRO_6_Dw_1_FEMALE\",\n\t\"VOICEMACRO_6_Dw_2\",\n\t\"VOICEMACRO_6_Gn_0\",\n\t\"VOICEMACRO_6_Gn_0_FEMALE\",\n\t\"VOICEMACRO_6_Gn_1\",\n\t\"VOICEMACRO_6_Hu_0\",\n\t\"VOICEMACRO_6_Hu_0_FEMALE\",\n\t\"VOICEMACRO_6_Hu_1\",\n\t\"VOICEMACRO_6_Hu_1_FEMALE\",\n\t\"VOICEMACRO_6_Ni_0\",\n\t\"VOICEMACRO_6_Ni_0_FEMALE\",\n\t\"VOICEMACRO_6_Ni_1\",\n\t\"VOICEMACRO_6_Ni_1_FEMALE\",\n\t\"VOICEMACRO_6_Or_0\",\n\t\"VOICEMACRO_6_Or_0_FEMALE\",\n\t\"VOICEMACRO_6_Or_1\",\n\t\"VOICEMACRO_6_Or_1_FEMALE\",\n\t\"VOICEMACRO_6_Sc_0\",\n\t\"VOICEMACRO_6_Sc_0_FEMALE\",\n\t\"VOICEMACRO_6_Sc_1\",\n\t\"VOICEMACRO_6_Sc_1_FEMALE\",\n\t\"VOICEMACRO_6_Ta_0\",\n\t\"VOICEMACRO_6_Ta_0_FEMALE\",\n\t\"VOICEMACRO_6_Ta_1\",\n\t\"VOICEMACRO_6_Ta_1_FEMALE\",\n\t\"VOICEMACRO_6_Tr_0\",\n\t\"VOICEMACRO_6_Tr_0_FEMALE\",\n\t\"VOICEMACRO_6_Tr_1\",\n\t\"VOICEMACRO_6_Tr_1_FEMALE\",\n\t\"VOICEMACRO_7_Dw_0\",\n\t\"VOICEMACRO_7_Dw_0_FEMALE\",\n\t\"VOICEMACRO_7_Dw_1\",\n\t\"VOICEMACRO_7_Dw_1_FEMALE\",\n\t\"VOICEMACRO_7_Dw_2\",\n\t\"VOICEMACRO_7_Gn_0\",\n\t\"VOICEMACRO_7_Gn_0_FEMALE\",\n\t\"VOICEMACRO_7_Gn_1\",\n\t\"VOICEMACRO_7_Gn_1_FEMALE\",\n\t\"VOICEMACRO_7_Hu_0\",\n\t\"VOICEMACRO_7_Hu_0_FEMALE\",\n\t\"VOICEMACRO_7_Hu_1\",\n\t\"VOICEMACRO_7_Hu_1_FEMALE\",\n\t\"VOICEMACRO_7_Hu_2\",\n\t\"VOICEMACRO_7_Hu_2_FEMALE\",\n\t\"VOICEMACRO_7_Ni_0\",\n\t\"VOICEMACRO_7_Ni_0_FEMALE\",\n\t\"VOICEMACRO_7_Ni_1\",\n\t\"VOICEMACRO_7_Ni_1_FEMALE\",\n\t\"VOICEMACRO_7_Or_0\",\n\t\"VOICEMACRO_7_Or_0_FEMALE\",\n\t\"VOICEMACRO_7_Or_1\",\n\t\"VOICEMACRO_7_Or_1_FEMALE\",\n\t\"VOICEMACRO_7_Sc_0\",\n\t\"VOICEMACRO_7_Sc_0_FEMALE\",\n\t\"VOICEMACRO_7_Sc_1\",\n\t\"VOICEMACRO_7_Sc_1_FEMALE\",\n\t\"VOICEMACRO_7_Ta_0\",\n\t\"VOICEMACRO_7_Ta_0_FEMALE\",\n\t\"VOICEMACRO_7_Ta_1\",\n\t\"VOICEMACRO_7_Ta_1_FEMALE\",\n\t\"VOICEMACRO_7_Ta_2\",\n\t\"VOICEMACRO_7_Tr_0\",\n\t\"VOICEMACRO_7_Tr_0_FEMALE\",\n\t\"VOICEMACRO_7_Tr_1\",\n\t\"VOICEMACRO_7_Tr_1_FEMALE\",\n\t\"VOICEMACRO_7_Tr_2\",\n\t\"VOICEMACRO_7_Tr_2_FEMALE\",\n\t\"VOICEMACRO_8_Dw_0\",\n\t\"VOICEMACRO_8_Dw_0_FEMALE\",\n\t\"VOICEMACRO_8_Dw_1\",\n\t\"VOICEMACRO_8_Dw_1_FEMALE\",\n\t\"VOICEMACRO_8_Dw_2\",\n\t\"VOICEMACRO_8_Dw_2_FEMALE\",\n\t\"VOICEMACRO_8_Gn_0\",\n\t\"VOICEMACRO_8_Gn_0_FEMALE\",\n\t\"VOICEMACRO_8_Gn_1\",\n\t\"VOICEMACRO_8_Gn_1_FEMALE\",\n\t\"VOICEMACRO_8_Hu_0\",\n\t\"VOICEMACRO_8_Hu_0_FEMALE\",\n\t\"VOICEMACRO_8_Hu_1\",\n\t\"VOICEMACRO_8_Hu_1_FEMALE\",\n\t\"VOICEMACRO_8_Ni_0\",\n\t\"VOICEMACRO_8_Ni_0_FEMALE\",\n\t\"VOICEMACRO_8_Ni_1\",\n\t\"VOICEMACRO_8_Ni_1_FEMALE\",\n\t\"VOICEMACRO_8_Or_0\",\n\t\"VOICEMACRO_8_Or_0_FEMALE\",\n\t\"VOICEMACRO_8_Or_1\",\n\t\"VOICEMACRO_8_Or_1_FEMALE\",\n\t\"VOICEMACRO_8_Sc_0\",\n\t\"VOICEMACRO_8_Sc_0_FEMALE\",\n\t\"VOICEMACRO_8_Sc_1\",\n\t\"VOICEMACRO_8_Sc_1_FEMALE\",\n\t\"VOICEMACRO_8_Ta_0\",\n\t\"VOICEMACRO_8_Ta_0_FEMALE\",\n\t\"VOICEMACRO_8_Ta_1\",\n\t\"VOICEMACRO_8_Ta_1_FEMALE\",\n\t\"VOICEMACRO_8_Tr_0\",\n\t\"VOICEMACRO_8_Tr_0_FEMALE\",\n\t\"VOICEMACRO_8_Tr_1\",\n\t\"VOICEMACRO_8_Tr_1_FEMALE\",\n\t\"VOICEMACRO_8_Tr_2\",\n\t\"VOICEMACRO_8_Tr_2_FEMALE\",\n\t\"VOICEMACRO_LABEL\",\n\t\"VOICEMACRO_LABEL_AID1\",\n\t\"VOICEMACRO_LABEL_ATTACKMYTARGET1\",\n\t\"VOICEMACRO_LABEL_ATTACKMYTARGET2\",\n\t\"VOICEMACRO_LABEL_CHARGE1\",\n\t\"VOICEMACRO_LABEL_CHEER1\",\n\t\"VOICEMACRO_LABEL_CONGRATULATIONS1\",\n\t\"VOICEMACRO_LABEL_CONGRATULATIONS2\",\n\t\"VOICEMACRO_LABEL_CONGRATULATIONS3\",\n\t\"VOICEMACRO_LABEL_FLEE1\",\n\t\"VOICEMACRO_LABEL_FLEE2\",\n\t\"VOICEMACRO_LABEL_FLIRT1\",\n\t\"VOICEMACRO_LABEL_FOLLOW1\",\n\t\"VOICEMACRO_LABEL_FOLLOWME1\",\n\t\"VOICEMACRO_LABEL_FOLLOWME2\",\n\t\"VOICEMACRO_LABEL_FOLLOWME3\",\n\t\"VOICEMACRO_LABEL_GOODBYE1\",\n\t\"VOICEMACRO_LABEL_GOODBYE2\",\n\t\"VOICEMACRO_LABEL_HEALME1\",\n\t\"VOICEMACRO_LABEL_HEALME2\",\n\t\"VOICEMACRO_LABEL_HELLO1\",\n\t\"VOICEMACRO_LABEL_HELP1\",\n\t\"VOICEMACRO_LABEL_HELPME1\",\n\t\"VOICEMACRO_LABEL_HELPME2\",\n\t\"VOICEMACRO_LABEL_INCOMING1\",\n\t\"VOICEMACRO_LABEL_INCOMING2\",\n\t\"VOICEMACRO_LABEL_JOKE1\",\n\t\"VOICEMACRO_LABEL_NO1\",\n\t\"VOICEMACRO_LABEL_OPENFIRE1\",\n\t\"VOICEMACRO_LABEL_OPENFIRE2\",\n\t\"VOICEMACRO_LABEL_OUTOFMANA1\",\n\t\"VOICEMACRO_LABEL_OUTOFMANA2\",\n\t\"VOICEMACRO_LABEL_RASPBERRY1\",\n\t\"VOICEMACRO_LABEL_RASPBERRY2\",\n\t\"VOICEMACRO_LABEL_SILLY1\",\n\t\"VOICEMACRO_LABEL_THANKYOU1\",\n\t\"VOICEMACRO_LABEL_THANKYOU2\",\n\t\"VOICEMACRO_LABEL_THANKYOU3\",\n\t\"VOICEMACRO_LABEL_TRAIN1\",\n\t\"VOICEMACRO_LABEL_WAITHERE1\",\n\t\"VOICEMACRO_LABEL_WAITHERE2\",\n\t\"VOICEMACRO_LABEL_YES1\",\n\t\"VOICEMACRO_LABEL_YOUREWELCOME1\",\n\t\"VOICEMACRO_LABEL_YOUREWELCOME2\",\n\t\"VOICE_ACTIVATED\",\n\t\"VOICE_ACTIVATION_SENSITIVITY\",\n\t\"VOICE_AMBIENCE\",\n\t\"VOICE_CHAT\",\n\t\"VOICE_CHAT_AUDIO_DUCKING\",\n\t\"VOICE_CHAT_BATTLEGROUND\",\n\t\"VOICE_CHAT_MODE\",\n\t\"VOICE_CHAT_NORMAL\",\n\t\"VOICE_CHAT_OPTIONS\",\n\t\"VOICE_CHAT_OUTPUT_DEVICE\",\n\t\"VOICE_CHAT_PARTY_RAID\",\n\t\"VOICE_GAME_DUCKING\",\n\t\"VOICE_INPUT_VOLUME\",\n\t\"VOICE_LABEL\",\n\t\"VOICE_LISTENING\",\n\t\"VOICE_MICROPHONE_TEST\",\n\t\"VOICE_MIC_TEST_PLAY\",\n\t\"VOICE_MIC_TEST_RECORD\",\n\t\"VOICE_MUSIC\",\n\t\"VOICE_OUTPUT_VOLUME\",\n\t\"VOICE_SOUND\",\n\t\"VOICE_SUBTEXT\",\n\t\"VOICE_TALKING\",\n\t\"VOLUME\",\n\t\"VOTE_BOOT_PLAYER\",\n\t\"VOTE_BOOT_REASON_REQUIRED\",\n\t\"VOTE_TO_KICK\",\n\t\"VULNERABLE_TRAILER\",\n\t\"WAISTSLOT\",\n\t\"WARLOCK_INTELLECT_TOOLTIP\",\n\t\"WARRIOR_STRENGTH_TOOLTIP\",\n\t\"WATCHFRAME_LOCK\",\n\t\"WATCH_FRAME_WIDTH_TEXT\",\n\t\"WATER_COLLISION\",\n\t\"WATER_DETAIL\",\n\t\"WEAPON_SKILL_RATING\",\n\t\"WEAPON_SKILL_RATING_BONUS\",\n\t\"WEAPON_SPEED\",\n\t\"WEATHER_DETAIL\",\n\t\"WEEKDAY_FRIDAY\",\n\t\"WEEKDAY_MONDAY\",\n\t\"WEEKDAY_SATURDAY\",\n\t\"WEEKDAY_SUNDAY\",\n\t\"WEEKDAY_THURSDAY\",\n\t\"WEEKDAY_TUESDAY\",\n\t\"WEEKDAY_WEDNESDAY\",\n\t\"WHISPER\",\n\t\"WHISPER_MESSAGE\",\n\t\"WHO\",\n\t\"WHO_FRAME_SHOWN_TEMPLATE\",\n\t\"WHO_FRAME_TOTAL_TEMPLATE\",\n\t\"WHO_LIST\",\n\t\"WHO_LIST_FORMAT\",\n\t\"WHO_LIST_GUILD_FORMAT\",\n\t\"WHO_NUM_RESULTS\",\n\t\"WHO_TAG_CLASS\",\n\t\"WHO_TAG_GUILD\",\n\t\"WHO_TAG_NAME\",\n\t\"WHO_TAG_RACE\",\n\t\"WHO_TAG_ZONE\",\n\t\"WIDESCREEN_TAG\",\n\t\"WIN\",\n\t\"WINDOWED_MAXIMIZED\",\n\t\"WINDOWED_MODE\",\n\t\"WINDOW_LOCK\",\n\t\"WINTERGRASP_IN_PROGRESS\",\n\t\"WIN_LOSS\",\n\t\"WITHDRAW\",\n\t\"WORK_IN_PROGRESS\",\n\t\"WORLDMAP_BUTTON\",\n\t\"WORLD_APPEARANCE\",\n\t\"WORLD_LOD\",\n\t\"WORLD_MAP\",\n\t\"WORLD_PORT_ROOT_TIMER\",\n\t\"WORLD_PVP_DISPLAY\",\n\t\"WORLD_PVP_ENTER\",\n\t\"WORLD_PVP_EXITED_BATTLE\",\n\t\"WORLD_PVP_FAIL\",\n\t\"WORLD_PVP_INVITED\",\n\t\"WORLD_PVP_INVITED_WARMUP\",\n\t\"WORLD_PVP_LOW_LEVEL\",\n\t\"WORLD_PVP_PENDING\",\n\t\"WORLD_PVP_PENDING_REMOTE\",\n\t\"WORLD_PVP_QUEUED\",\n\t\"WORLD_PVP_QUEUED_WARMUP\",\n\t\"WOW_MOUSE\",\n\t\"WOW_MOUSE_NOT_FOUND\",\n\t\"WRISTSLOT\",\n\t\"WRONG_SLOT_FOR_ITEM\",\n\t\"XP\",\n\t\"XPBAR_LABEL\",\n\t\"XP_BAR_TEXT\",\n\t\"XP_TEXT\",\n\t\"YELL\",\n\t\"YELLOW_GEM\",\n\t\"YELL_MESSAGE\",\n\t\"YES\",\n\t\"YOU\",\n\t\"YOUR_BID\",\n\t\"YOUR_CLASS_MAY_NOT_PERFORM_ROLE\",\n\t\"YOUR_ROLE\",\n\t\"YOU_ARE_IN_DUNGEON_GROUP\",\n\t\"YOU_ARE_LISTED_IN_LFR\",\n\t\"YOU_LOOT_MONEY\",\n\t\"YOU_MAY_NOT_QUEUE_FOR_DUNGEON\",\n\t\"YOU_MAY_NOT_QUEUE_FOR_THIS\",\n\t\"YOU_RECEIVED\",\n\t\"ZHCN\",\n\t\"ZHTW\",\n\t\"ZONE\",\n\t\"ZONE_COLON\",\n\t\"ZONE_UNDER_ATTACK\",\n\t\"ZOOM_IN\",\n\t\"ZOOM_OUT\",\n\t\"ZOOM_OUT_BUTTON_TEXT\",\n\t\"_RECORDING_WARNING_CORRUPTED\",\n\n\t-- constants\n\t\"NORMAL_FONT_COLOR_CODE\",\n\t\"HIGHLIGHT_FONT_COLOR_CODE\",\n\t\"RED_FONT_COLOR_CODE\",\n\t\"GREEN_FONT_COLOR_CODE\",\n\t\"GRAY_FONT_COLOR_CODE\",\n\t\"YELLOW_FONT_COLOR_CODE\",\n\t\"LIGHTYELLOW_FONT_COLOR_CODE\",\n\t\"ORANGE_FONT_COLOR_CODE\",\n\t\"FONT_COLOR_CODE_CLOSE\",\n\t\"MAX_CLASSES\",\n\t\"SPELL_POWER_MANA\",\n\t\"SPELL_POWER_RAGE\",\n\t\"SPELL_POWER_FOCUS\",\n\t\"SPELL_POWER_ENERGY\",\n\t\"SPELL_POWER_HAPPINESS\",\n\t\"SPELL_POWER_RUNES\",\n\t\"SPELL_POWER_RUNIC_POWER\",\n\t\"SCHOOL_MASK_NONE\",\n\t\"SCHOOL_MASK_PHYSICAL\",\n\t\"SCHOOL_MASK_HOLY\",\n\t\"SCHOOL_MASK_FIRE\",\n\t\"SCHOOL_MASK_NATURE\",\n\t\"SCHOOL_MASK_FROST\",\n\t\"SCHOOL_MASK_SHADOW\",\n\t\"SCHOOL_MASK_ARCANE\",\n\t\"SHOW_TALENT_LEVEL\",\n\t\"SHOW_PVP_LEVEL\",\n\t\"SHOW_LFD_LEVEL\",\n\t\"SHOW_INSCRIPTION_LEVEL\",\n\t\"CRITERIA_TYPE_ACHIEVEMENT\",\n\t\"ACHIEVEMENT_FLAGS_STATISTIC\",\n\t\"ACHIEVEMENT_FLAGS_HIDDEN\",\n\t\"ACHIEVEMENT_FLAGS_HAS_PROGRESS_BAR\",\n\t\"NUM_ACHIEVEMENT_FLAGS\",\n\t\"ACHIEVEMENT_CRITERIA_PROGRESS_BAR\",\n\t\"ACHIEVEMENT_CRITERIA_HIDDEN\",\n\t\"NUM_ACHIEVEMENT_CRITERIA_FLAGS\",\n\t\"ITEM_UNIQUE_EQUIPPED\",\n\t\"MAX_NUM_SOCKETS\",\n\t\"ITEM_QUALITY_POOR\",\n\t\"ITEM_QUALITY_COMMON\",\n\t\"ITEM_QUALITY_UNCOMMON\",\n\t\"ITEM_QUALITY_RARE\",\n\t\"ITEM_QUALITY_EPIC\",\n\t\"ITEM_INVENTORY_LOCATION_PLAYER\",\n\t\"ITEM_INVENTORY_LOCATION_BAGS\",\n\t\"ITEM_INVENTORY_LOCATION_BANK\",\n\t\"ITEM_INVENTORY_BAG_BIT_OFFSET\",\n\t\"INVSLOT_AMMO\",\n\t\"INVSLOT_HEAD\",\n\t\"INVSLOT_NECK\",\n\t\"INVSLOT_SHOULDER\",\n\t\"INVSLOT_BODY\",\n\t\"INVSLOT_CHEST\",\n\t\"INVSLOT_WAIST\",\n\t\"INVSLOT_LEGS\",\n\t\"INVSLOT_FEET\",\n\t\"INVSLOT_WRIST\",\n\t\"INVSLOT_HAND\",\n\t\"INVSLOT_FINGER1\",\n\t\"INVSLOT_FINGER2\",\n\t\"INVSLOT_TRINKET1\",\n\t\"INVSLOT_TRINKET2\",\n\t\"INVSLOT_BACK\",\n\t\"INVSLOT_MAINHAND\",\n\t\"INVSLOT_OFFHAND\",\n\t\"INVSLOT_RANGED\",\n\t\"INVSLOT_TABARD\",\n\t\"INVSLOT_LAST_EQUIPPED\",\n\t\"ITEM_INVENTORY_BANK_BAG_OFFSET\",\n\t\"CONTAINER_BAG_OFFSET\",\n\t\"BACKPACK_CONTAINER\",\n\t\"BANK_CONTAINER\",\n\t\"BANK_CONTAINER_INVENTORY_OFFSET\",\n\t\"KEYRING_CONTAINER\",\n\t\"NUM_BAG_SLOTS\",\n\t\"NUM_BANKGENERIC_SLOTS\",\n\t\"NUM_BANKBAGSLOTS\",\n\t\"MAX_EQUIPMENT_SETS_PER_PLAYER\",\n\t\"EQUIPMENT_SET_EMPTY_SLOT\",\n\t\"EQUIPMENT_SET_IGNORED_SLOT\",\n\t\"EQUIPMENT_SET_ITEM_MISSING\",\n\t\"COMBATLOG_OBJECT_AFFILIATION_MINE\",\n\t\"COMBATLOG_OBJECT_AFFILIATION_PARTY\",\n\t\"COMBATLOG_OBJECT_AFFILIATION_RAID\",\n\t\"COMBATLOG_OBJECT_AFFILIATION_OUTSIDER\",\n\t\"COMBATLOG_OBJECT_AFFILIATION_MASK\",\n\t\"COMBATLOG_OBJECT_REACTION_FRIENDLY\",\n\t\"COMBATLOG_OBJECT_REACTION_NEUTRAL\",\n\t\"COMBATLOG_OBJECT_REACTION_HOSTILE\",\n\t\"COMBATLOG_OBJECT_REACTION_MASK\",\n\t\"COMBATLOG_OBJECT_CONTROL_PLAYER\",\n\t\"COMBATLOG_OBJECT_CONTROL_NPC\",\n\t\"COMBATLOG_OBJECT_CONTROL_MASK\",\n\t\"COMBATLOG_OBJECT_TYPE_PLAYER\",\n\t\"COMBATLOG_OBJECT_TYPE_NPC\",\n\t\"COMBATLOG_OBJECT_TYPE_PET\",\n\t\"COMBATLOG_OBJECT_TYPE_GUARDIAN\",\n\t\"COMBATLOG_OBJECT_TYPE_OBJECT\",\n\t\"COMBATLOG_OBJECT_TYPE_MASK\",\n\t\"COMBATLOG_OBJECT_TARGET\",\n\t\"COMBATLOG_OBJECT_FOCUS\",\n\t\"COMBATLOG_OBJECT_MAINTANK\",\n\t\"COMBATLOG_OBJECT_MAINASSIST\",\n\t\"COMBATLOG_OBJECT_RAIDTARGET1\",\n\t\"COMBATLOG_OBJECT_RAIDTARGET2\",\n\t\"COMBATLOG_OBJECT_RAIDTARGET3\",\n\t\"COMBATLOG_OBJECT_RAIDTARGET4\",\n\t\"COMBATLOG_OBJECT_RAIDTARGET5\",\n\t\"COMBATLOG_OBJECT_RAIDTARGET6\",\n\t\"COMBATLOG_OBJECT_RAIDTARGET7\",\n\t\"COMBATLOG_OBJECT_RAIDTARGET8\",\n\t\"COMBATLOG_OBJECT_NONE\",\n\t\"COMBATLOG_OBJECT_SPECIAL_MASK\",\n\t\"COMBATLOG_OBJECT_RAIDTARGET_MASK\",\n\t\"COMBATLOG_FILTER_ME\",\n\t\"COMBATLOG_FILTER_MINE\",\n\t\"COMBATLOG_FILTER_MY_PET\",\n\t\"COMBATLOG_FILTER_FRIENDLY_UNITS\",\n\t\"COMBATLOG_FILTER_HOSTILE_PLAYERS\",\n\t\"COMBATLOG_FILTER_HOSTILE_UNITS\",\n\t\"COMBATLOG_FILTER_NEUTRAL_UNITS\",\n\t\"COMBATLOG_FILTER_UNKNOWN_UNITS\",\n\t\"COMBATLOG_FILTER_EVERYTHING\",\n\t\"CALENDAR_FIRST_WEEKDAY\",\n\t\"CALENDAR_EVENTTYPE_RAID\",\n\t\"CALENDAR_EVENTTYPE_DUNGEON\",\n\t\"CALENDAR_EVENTTYPE_PVP\",\n\t\"CALENDAR_EVENTTYPE_MEETING\",\n\t\"CALENDAR_EVENTTYPE_OTHER\",\n\t\"CALENDAR_MAX_EVENTTYPE\",\n\t\"CALENDAR_INVITESTATUS_INVITED\",\n\t\"CALENDAR_INVITESTATUS_ACCEPTED\",\n\t\"CALENDAR_INVITESTATUS_DECLINED\",\n\t\"CALENDAR_INVITESTATUS_CONFIRMED\",\n\t\"CALENDAR_INVITESTATUS_OUT\",\n\t\"CALENDAR_INVITESTATUS_STANDBY\",\n\t\"CALENDAR_INVITESTATUS_SIGNEDUP\",\n\t\"CALENDAR_INVITESTATUS_NOT_SIGNEDUP\",\n\t\"CALENDAR_INVITESTATUS_TENTATIVE\",\n\t\"CALENDAR_MAX_INVITESTATUS\",\n\t\"CALENDAR_INVITETYPE_NORMAL\",\n\t\"CALENDAR_INVITETYPE_SIGNUP\",\n\t\"CALENDAR_MAX_INVITETYPE\",\n\t\"NUM_WORLDMAP_DETAIL_TILES\",\n\t\"NUM_WORLDMAP_PATCH_TILES\",\n\t\"NUM_WORLDMAP_DETAIL_TILE_ROWS\",\n\t\"NUM_WORLDMAP_DETAIL_TILE_COLS\",\n\t\"MAX_TOTEMS\",\n\t\"FIRE_TOTEM_SLOT\",\n\t\"EARTH_TOTEM_SLOT\",\n\t\"WATER_TOTEM_SLOT\",\n\t\"AIR_TOTEM_SLOT\",\n\t\"GMTICKET_QUEUE_STATUS_ENABLED\",\n\t\"GMTICKET_QUEUE_STATUS_DISABLED\",\n\t\"GMTICKET_ASSIGNEDTOGM_STATUS_NOT_ASSIGNED\",\n\t\"GMTICKET_ASSIGNEDTOGM_STATUS_ASSIGNED\",\n\t\"GMTICKET_ASSIGNEDTOGM_STATUS_ESCALATED\",\n\t\"GMTICKET_OPENEDBYGM_STATUS_NOT_OPENED\",\n\t\"GMTICKET_OPENEDBYGM_STATUS_OPENED\",\n\t\"LIGHT_LIVE\",\n\t\"LIGHT_GHOST\",\n\t\"TEXTURE_ITEM_QUEST_BANG\",\n\t\"TEXTURE_ITEM_QUEST_BORDER\",\n\t\"SHOW_SEARCH_BAR_NUM_FRIENDS\",\n\n\t-- assorted FrameXML globals\n\t\"ADDITIONAL_POWER_BAR_INDEX\",\n\t\"DEFAULT_CHAT_FRAME\",\n\t\"MAX_BATTLEFIELD_QUEUES\",\n\t\"MAX_TALENT_TABS\", -- Classic\n\t\"MAX_WORLDSTATE_SCORE_BUTTONS\",\n\t\"STATICPOPUP_NUMDIALOGS\",\n\t\"TAXIROUTE_LINEFACTOR\",\n\t\"TAXIROUTE_LINEFACTOR_2\",\n\n\t-- functions: FrameXML, Blizzard_CombatLog, Blizzard_CombatText, Blizzard_RaidUI, Blizzard_TimeManager, Blizzard_TokenUI\n\t\"AbandonQuest\",\n\t\"AbandonSkill\",\n\t\"AcceptAreaSpiritHeal\",\n\t\"AcceptArenaTeam\",\n\t\"AcceptBattlefieldPort\",\n\t\"AcceptDuel\",\n\t\"AcceptGroup\",\n\t\"AcceptGuild\",\n\t\"AcceptLevelGrant\",\n\t\"AcceptProposal\",\n\t\"AcceptQuest\",\n\t\"AcceptResurrect\",\n\t\"AcceptSkillUps\",\n\t\"AcceptSockets\",\n\t\"AcceptTrade\",\n\t\"AcceptXPLoss\",\n\t\"AchievementAlertFrame_FixAnchors\",\n\t\"AchievementAlertFrame_GetAlertFrame\",\n\t\"AchievementAlertFrame_OnClick\",\n\t\"AchievementAlertFrame_OnHide\",\n\t\"AchievementAlertFrame_OnLoad\",\n\t\"AchievementAlertFrame_ShowAlert\",\n\t\"AchievementFrame_LoadUI\",\n\t\"AchievementMicroButton_OnEvent\",\n\t\"ActionBar_PageDown\",\n\t\"ActionBar_PageUp\",\n\t\"ActionButtonDown\",\n\t\"ActionButtonUp\",\n\t\"ActionButton_CalculateAction\",\n\t\"ActionButton_GetPagedID\",\n\t\"ActionButton_HideGrid\",\n\t\"ActionButton_IsFlashing\",\n\t\"ActionButton_OnEvent\",\n\t\"ActionButton_OnLoad\",\n\t\"ActionButton_OnUpdate\",\n\t\"ActionButton_SetTooltip\",\n\t\"ActionButton_ShowGrid\",\n\t\"ActionButton_StartFlash\",\n\t\"ActionButton_StopFlash\",\n\t\"ActionButton_Update\",\n\t\"ActionButton_UpdateAction\",\n\t\"ActionButton_UpdateCooldown\",\n\t\"ActionButton_UpdateCount\",\n\t\"ActionButton_UpdateFlash\",\n\t\"ActionButton_UpdateHotkeys\",\n\t\"ActionButton_UpdateState\",\n\t\"ActionButton_UpdateUsable\",\n\t\"ActionHasRange\",\n\t\"ActionStatus_DisplayMessage\",\n\t\"ActionStatus_OnEvent\",\n\t\"ActionStatus_OnLoad\",\n\t\"ActionStatus_OnUpdate\",\n\t\"AddChatWindowChannel\",\n\t\"AddChatWindowMessages\",\n\t\"AddFriend\",\n\t\"AddFriendEntryFrame_Collapse\",\n\t\"AddFriendEntryFrame_Expand\",\n\t\"AddFriendFrame_Accept\",\n\t\"AddFriendFrame_OnShow\",\n\t\"AddFriendFrame_ShowEntry\",\n\t\"AddFriendFrame_ShowInfo\",\n\t\"AddFriendNameEditBox_OnTextChanged\",\n\t\"AddIgnore\",\n\t\"AddMute\",\n\t\"AddOrDelIgnore\",\n\t\"AddOrDelMute\",\n\t\"AddOrRemoveFriend\",\n\t\"AddPreviewTalentPoints\",\n\t\"AddQuestWatch\",\n\t\"AddSkillUp\",\n\t\"AddToAutoHide\",\n\t\"AddTrackedAchievement\",\n\t\"AddTradeMoney\",\n\t\"AlertFrame_AnimateIn\",\n\t\"AlertFrame_FixAnchors\",\n\t\"AlertFrame_OnEvent\",\n\t\"AlertFrame_OnLoad\",\n\t\"AlertFrame_ResumeOutAnimation\",\n\t\"AlertFrame_StopOutAnimation\",\n\t\"AltCurrencyFrame_PointsUpdate\",\n\t\"AltCurrencyFrame_Update\",\n\t\"AlternatePowerBar_Initialize\",\n\t\"AlternatePowerBar_OnEvent\",\n\t\"AlternatePowerBar_OnLoad\",\n\t\"AlternatePowerBar_OnUpdate\",\n\t\"AlternatePowerBar_UpdateMaxValues\",\n\t\"AlternatePowerBar_UpdatePowerType\",\n\t\"AlternatePowerBar_UpdateValue\",\n\t\"AnimateTexCoords\",\n\t\"AnimatedShine_OnUpdate\",\n\t\"AnimatedShine_Start\",\n\t\"AnimatedShine_Stop\",\n\t\"AppendToFile\",\n\t\"ApplyBarberShopStyle\",\n\t\"ApplyUnitButtonConfiguration\",\n\t\"ArenaButton_OnClick\",\n\t\"ArenaFrameJoinButton_OnClick\",\n\t\"ArenaFrame_OnEvent\",\n\t\"ArenaFrame_OnLoad\",\n\t\"ArenaFrame_Update\",\n\t\"ArenaRegistrar_OnEvent\",\n\t\"ArenaRegistrar_OnLoad\",\n\t\"ArenaRegistrar_OnShow\",\n\t\"ArenaRegistrar_ShowPurchaseFrame\",\n\t\"ArenaRegistrar_TurnInPetition\",\n\t\"ArenaRegistrar_UpdatePrice\",\n\t\"ArenaTeamDisband\",\n\t\"ArenaTeamInviteByName\",\n\t\"ArenaTeamLeave\",\n\t\"ArenaTeamRoster\",\n\t\"ArenaTeamSetLeaderByName\",\n\t\"ArenaTeamUninviteByName\",\n\t\"ArenaTeam_GetTeamSizeID\",\n\t\"Arena_LoadUI\",\n\t\"AscendStop\",\n\t\"AssistUnit\",\n\t\"AttackTarget\",\n\t\"AuctionFrame_LoadUI\",\n\t\"AudioOptionsFrameCancel_OnClick\",\n\t\"AudioOptionsFrameDefault_OnClick\",\n\t\"AudioOptionsFrameOkay_OnClick\",\n\t\"AudioOptionsFrame_AudioRestart\",\n\t\"AudioOptionsFrame_OnEvent\",\n\t\"AudioOptionsFrame_OnHide\",\n\t\"AudioOptionsFrame_OnLoad\",\n\t\"AudioOptionsFrame_SetAllToDefaults\",\n\t\"AudioOptionsFrame_SetCurrentToDefaults\",\n\t\"AudioOptionsFrame_Toggle\",\n\t\"AudioOptionsPanel_CheckButton_OnClick\",\n\t\"AudioOptionsSoundPanelHardwareDropDown_Initialize\",\n\t\"AudioOptionsSoundPanelHardwareDropDown_OnClick\",\n\t\"AudioOptionsSoundPanelHardwareDropDown_OnLoad\",\n\t\"AudioOptionsSoundPanel_OnLoad\",\n\t\"AudioOptionsVoicePanelBindingOutput_OnUpdate\",\n\t\"AudioOptionsVoicePanelBindingType_Update\",\n\t\"AudioOptionsVoicePanelChatModeDropDown_Initialize\",\n\t\"AudioOptionsVoicePanelChatModeDropDown_OnClick\",\n\t\"AudioOptionsVoicePanelChatModeDropDown_OnLoad\",\n\t\"AudioOptionsVoicePanelEnableMicrophone_UpdateControls\",\n\t\"AudioOptionsVoicePanelEnableVoice_UpdateControls\",\n\t\"AudioOptionsVoicePanelInputDeviceDropDown_Initialize\",\n\t\"AudioOptionsVoicePanelInputDeviceDropDown_OnClick\",\n\t\"AudioOptionsVoicePanelInputDeviceDropDown_OnLoad\",\n\t\"AudioOptionsVoicePanelKeyBindingButton_BindButton\",\n\t\"AudioOptionsVoicePanelKeyBindingButton_CancelBinding\",\n\t\"AudioOptionsVoicePanelKeyBindingButton_OnClick\",\n\t\"AudioOptionsVoicePanelKeyBindingButton_OnEnter\",\n\t\"AudioOptionsVoicePanelKeyBindingButton_OnKeyDown\",\n\t\"AudioOptionsVoicePanelKeyBindingButton_OnKeyUp\",\n\t\"AudioOptionsVoicePanelKeyBindingButton_Refresh\",\n\t\"AudioOptionsVoicePanelKeyBindingButton_SetTooltip\",\n\t\"AudioOptionsVoicePanelOutputDeviceDropDown_Initialize\",\n\t\"AudioOptionsVoicePanelOutputDeviceDropDown_OnClick\",\n\t\"AudioOptionsVoicePanelOutputDeviceDropDown_OnEvent\",\n\t\"AudioOptionsVoicePanelOutputDeviceDropDown_OnLoad\",\n\t\"AudioOptionsVoicePanel_DisableMicrophoneControls\",\n\t\"AudioOptionsVoicePanel_EnableMicrophoneControls\",\n\t\"AudioOptionsVoicePanel_OnEvent\",\n\t\"AudioOptionsVoicePanel_OnHide\",\n\t\"AudioOptionsVoicePanel_OnLoad\",\n\t\"AudioOptionsVoicePanel_OnShow\",\n\t\"AudioOptionsVoicePanel_Refresh\",\n\t\"AudioOptionsVoicePanel_SetInputDevice\",\n\t\"AudioOptionsVoicePanel_SetOutputDevice\",\n\t\"AuraButton_OnUpdate\",\n\t\"AuraButton_Update\",\n\t\"AuraButton_UpdateDuration\",\n\t\"AutoCastShine_AutoCastStart\",\n\t\"AutoCastShine_AutoCastStop\",\n\t\"AutoCastShine_OnLoad\",\n\t\"AutoCastShine_OnUpdate\",\n\t\"AutoCompleteButton_OnClick\",\n\t\"AutoCompleteEditBox_AddHighlightedText\",\n\t\"AutoCompleteEditBox_OnChar\",\n\t\"AutoCompleteEditBox_OnEditFocusLost\",\n\t\"AutoCompleteEditBox_OnEnterPressed\",\n\t\"AutoCompleteEditBox_OnEscapePressed\",\n\t\"AutoCompleteEditBox_OnTabPressed\",\n\t\"AutoCompleteEditBox_OnTextChanged\",\n\t\"AutoComplete_GetNumResults\",\n\t\"AutoComplete_GetSelectedIndex\",\n\t\"AutoComplete_HideIfAttachedTo\",\n\t\"AutoComplete_OnLoad\",\n\t\"AutoComplete_SetSelectedIndex\",\n\t\"AutoComplete_Update\",\n\t\"AutoComplete_UpdateResults\",\n\t\"AutoEquipCursorItem\",\n\t\"AutoFollowStatus_OnEvent\",\n\t\"AutoFollowStatus_OnLoad\",\n\t\"AutoFollowStatus_OnUpdate\",\n\t\"AutoLootMailItem\",\n\t\"AutoStoreGuildBankItem\",\n\t\"BNAcceptFriendInvite\",\n\t\"BNConnected\",\n\t\"BNConversationButton_OnClick\",\n\t\"BNConversationButton_OnEnter\",\n\t\"BNConversationButton_OnEvent\",\n\t\"BNConversationButton_OnLeave\",\n\t\"BNConversationButton_OnLoad\",\n\t\"BNConversationButton_UpdateAttachmentPoint\",\n\t\"BNConversationButton_UpdateEnabledState\",\n\t\"BNConversationButton_UpdateTarget\",\n\t\"BNConversationInviteDialogInviteButton_OnClick\",\n\t\"BNConversationInviteDialog_OnEvent\",\n\t\"BNConversationInviteDialog_OnLoad\",\n\t\"BNConversationInviteListCheckButton_OnClick\",\n\t\"BNConversationInvite_Deselect\",\n\t\"BNConversationInvite_Lock\",\n\t\"BNConversationInvite_LockActions\",\n\t\"BNConversationInvite_NewConversation\",\n\t\"BNConversationInvite_Reset\",\n\t\"BNConversationInvite_Select\",\n\t\"BNConversationInvite_SelectPlayers\",\n\t\"BNConversationInvite_SetMinMaxInvites\",\n\t\"BNConversationInvite_SetMode\",\n\t\"BNConversationInvite_Unlock\",\n\t\"BNConversationInvite_UnlockActions\",\n\t\"BNConversationInvite_Update\",\n\t\"BNConversationInvite_UpdateInviteButtonState\",\n\t\"BNConversation_DisplayConversationTooltip\",\n\t\"BNCreateConversation\",\n\t\"BNDeclineFriendInvite\",\n\t\"BNFeaturesEnabled\",\n\t\"BNFeaturesEnabledAndConnected\",\n\t\"BNGetBlockedInfo\",\n\t\"BNGetBlockedToonInfo\",\n\t\"BNGetConversationInfo\",\n\t\"BNGetConversationMemberInfo\",\n\t\"BNGetCustomMessageTable\",\n\t\"BNGetFOFInfo\",\n\t\"BNGetFriendInfo\",\n\t\"BNGetFriendInfoByID\",\n\t\"BNGetFriendInviteInfo\",\n\t\"BNGetFriendToonInfo\",\n\t\"BNGetInfo\",\n\t\"BNGetMatureLanguageFilter\",\n\t\"BNGetMaxPlayersInConversation\",\n\t\"BNGetNumBlocked\",\n\t\"BNGetNumBlockedToons\",\n\t\"BNGetNumConversationMembers\",\n\t\"BNGetNumFOF\",\n\t\"BNGetNumFriendInvites\",\n\t\"BNGetNumFriendToons\",\n\t\"BNGetNumFriends\",\n\t\"BNGetSelectedBlock\",\n\t\"BNGetSelectedFriend\",\n\t\"BNGetSelectedToonBlock\",\n\t\"BNGetToonInfo\",\n\t\"BNInviteToConversation\",\n\t\"BNIsBlocked\",\n\t\"BNIsFriend\",\n\t\"BNIsSelf\",\n\t\"BNIsToonBlocked\",\n\t\"BNLeaveConversation\",\n\t\"BNListConversation\",\n\t\"BNRemoveFriend\",\n\t\"BNReportFriendInvite\",\n\t\"BNReportPlayer\",\n\t\"BNRequestFOFInfo\",\n\t\"BNSendConversationMessage\",\n\t\"BNSendFriendInvite\",\n\t\"BNSendFriendInviteByID\",\n\t\"BNSendWhisper\",\n\t\"BNSetAFK\",\n\t\"BNSetBlocked\",\n\t\"BNSetCustomMessage\",\n\t\"BNSetDND\",\n\t\"BNSetFocus\",\n\t\"BNSetFriendNote\",\n\t\"BNSetMatureLanguageFilter\",\n\t\"BNSetSelectedBlock\",\n\t\"BNSetSelectedFriend\",\n\t\"BNSetSelectedToonBlock\",\n\t\"BNSetToonBlocked\",\n\t\"BNToastFrame_AddToast\",\n\t\"BNToastFrame_Close\",\n\t\"BNToastFrame_OnClick\",\n\t\"BNToastFrame_OnEvent\",\n\t\"BNToastFrame_OnUpdate\",\n\t\"BNToastFrame_RemoveToast\",\n\t\"BNToastFrame_Show\",\n\t\"BNToastFrame_UpdateAnchor\",\n\t\"BNet_ConfirmReport\",\n\t\"BNet_DisableToasts\",\n\t\"BNet_EnableToasts\",\n\t\"BNet_GetPresenceID\",\n\t\"BNet_InitiateReport\",\n\t\"BNet_OnEvent\",\n\t\"BNet_OnLoad\",\n\t\"BNet_SendReport\",\n\t\"BNet_SetToastDuration\",\n\t\"BNet_UpdateToastEvent\",\n\t\"BackpackButton_OnClick\",\n\t\"BackpackButton_OnModifiedClick\",\n\t\"BackpackButton_UpdateChecked\",\n\t\"BackpackTokenButton_OnClick\",\n\t\"BackpackTokenFrame_IsShown\",\n\t\"BackpackTokenFrame_Update\",\n\t\"BagSlotButton_OnClick\",\n\t\"BagSlotButton_OnDrag\",\n\t\"BagSlotButton_OnEnter\",\n\t\"BagSlotButton_OnModifiedClick\",\n\t\"BagSlotButton_UpdateChecked\",\n\t\"BankButtonIDToInvSlotID\",\n\t\"BankFrameBagButton_OnLoad\",\n\t\"BankFrameBaseButton_OnLoad\",\n\t\"BankFrameItemButtonBag_OnClick\",\n\t\"BankFrameItemButtonBag_Pickup\",\n\t\"BankFrameItemButtonGeneric_OnClick\",\n\t\"BankFrameItemButtonGeneric_OnModifiedClick\",\n\t\"BankFrameItemButton_OnEnter\",\n\t\"BankFrameItemButton_OnLoad\",\n\t\"BankFrameItemButton_Update\",\n\t\"BankFrameItemButton_UpdateLocked\",\n\t\"BankFrame_OnEvent\",\n\t\"BankFrame_OnHide\",\n\t\"BankFrame_OnLoad\",\n\t\"BankFrame_OnShow\",\n\t\"BankFrame_UpdateCooldown\",\n\t\"BarberShopFrame_LoadUI\",\n\t\"BarberShopReset\",\n\t\"BattlefieldButton_OnClick\",\n\t\"BattlefieldFrameJoinButton_OnClick\",\n\t\"BattlefieldFrame_GetSelectedBattlegroundInfo\",\n\t\"BattlefieldFrame_OnEvent\",\n\t\"BattlefieldFrame_OnLoad\",\n\t\"BattlefieldFrame_Update\",\n\t\"BattlefieldFrame_UpdateRandomInfo\",\n\t\"BattlefieldFrame_UpdateStatus\",\n\t\"BattlefieldMgrEntryInviteResponse\",\n\t\"BattlefieldMgrExitRequest\",\n\t\"BattlefieldMgrQueueInviteResponse\",\n\t\"BattlefieldMgrQueueRequest\",\n\t\"BattlefieldMinimap_LoadUI\",\n\t\"BattlefieldTimerFrame_OnUpdate\",\n\t\"BattlegroundShineFadeIn\",\n\t\"BattlegroundShineFadeOut\",\n\t\"BeginTrade\",\n\t\"BetterDate\",\n\t\"BindEnchant\",\n\t\"BlizzardOptionsPanel_Cancel\",\n\t\"BlizzardOptionsPanel_CancelControl\",\n\t\"BlizzardOptionsPanel_CheckButton_Disable\",\n\t\"BlizzardOptionsPanel_CheckButton_Enable\",\n\t\"BlizzardOptionsPanel_CheckButton_OnClick\",\n\t\"BlizzardOptionsPanel_CheckButton_Refresh\",\n\t\"BlizzardOptionsPanel_CheckButton_SetNewValue\",\n\t\"BlizzardOptionsPanel_Default\",\n\t\"BlizzardOptionsPanel_DefaultControl\",\n\t\"BlizzardOptionsPanel_DropDown_Refresh\",\n\t\"BlizzardOptionsPanel_GetCVarDefaultSafe\",\n\t\"BlizzardOptionsPanel_GetCVarMaxSafe\",\n\t\"BlizzardOptionsPanel_GetCVarMinSafe\",\n\t\"BlizzardOptionsPanel_GetCVarSafe\",\n\t\"BlizzardOptionsPanel_Okay\",\n\t\"BlizzardOptionsPanel_OkayControl\",\n\t\"BlizzardOptionsPanel_OnEvent\",\n\t\"BlizzardOptionsPanel_OnLoad\",\n\t\"BlizzardOptionsPanel_Refresh\",\n\t\"BlizzardOptionsPanel_RefreshControl\",\n\t\"BlizzardOptionsPanel_RegisterControl\",\n\t\"BlizzardOptionsPanel_SetCVarSafe\",\n\t\"BlizzardOptionsPanel_SetupControl\",\n\t\"BlizzardOptionsPanel_SetupDependentControl\",\n\t\"BlizzardOptionsPanel_Slider_Disable\",\n\t\"BlizzardOptionsPanel_Slider_Enable\",\n\t\"BlizzardOptionsPanel_Slider_OnValueChanged\",\n\t\"BlizzardOptionsPanel_Slider_Refresh\",\n\t\"BlizzardOptionsPanel_UpdateCombatText\",\n\t\"BlizzardOptionsPanel_UpdateRaidPullouts\",\n\t\"Blizzard_CombatLog_ApplyFilters\",\n\t\"Blizzard_CombatLog_CreateActionMenu\",\n\t\"Blizzard_CombatLog_CreateFilterMenu\",\n\t\"Blizzard_CombatLog_CreateSpellMenu\",\n\t\"Blizzard_CombatLog_CreateTabMenu\",\n\t\"Blizzard_CombatLog_CreateUnitMenu\",\n\t\"Blizzard_CombatLog_DisableEvent\",\n\t\"Blizzard_CombatLog_EnableEvent\",\n\t\"Blizzard_CombatLog_FormattingMenu\",\n\t\"Blizzard_CombatLog_GenerateFullEventList\",\n\t\"Blizzard_CombatLog_GenerateFullFlagList\",\n\t\"Blizzard_CombatLog_HasEvent\",\n\t\"Blizzard_CombatLog_InitializeFilters\",\n\t\"Blizzard_CombatLog_MenuHelper\",\n\t\"Blizzard_CombatLog_MessageTypesMenu\",\n\t\"Blizzard_CombatLog_QuickButtonFrame_OnEvent\",\n\t\"Blizzard_CombatLog_QuickButtonFrame_OnLoad\",\n\t\"Blizzard_CombatLog_QuickButtonRightClick\",\n\t\"Blizzard_CombatLog_QuickButton_OnClick\",\n\t\"Blizzard_CombatLog_Refilter\",\n\t\"Blizzard_CombatLog_RefilterUpdate\",\n\t\"Blizzard_CombatLog_RefreshGlobalLinks\",\n\t\"Blizzard_CombatLog_SpellMenuClick\",\n\t\"Blizzard_CombatLog_UnitMenuClick\",\n\t\"Blizzard_CombatLog_Update_QuickButtons\",\n\t\"BonusActionBar_OnEvent\",\n\t\"BonusActionBar_OnLoad\",\n\t\"BonusActionBar_OnUpdate\",\n\t\"BonusActionButtonDown\",\n\t\"BonusActionButtonUp\",\n\t\"BossTargetFrameDropDown_Initialize\",\n\t\"BossTargetFrame_OnLoad\",\n\t\"BuffButton_OnClick\",\n\t\"BuffButton_OnLoad\",\n\t\"BuffFrame_OnEvent\",\n\t\"BuffFrame_OnLoad\",\n\t\"BuffFrame_OnUpdate\",\n\t\"BuffFrame_Update\",\n\t\"BuffFrame_UpdateAllBuffAnchors\",\n\t\"BuffFrame_UpdatePositions\",\n\t\"BuildColoredListString\",\n\t\"BuildListString\",\n\t\"BuildMultilineTooltip\",\n\t\"BuildNewLineListString\",\n\t\"ButtonInventorySlot\",\n\t\"ButtonPulse_OnUpdate\",\n\t\"ButtonPulse_StopPulse\",\n\t\"BuyGuildBankTab\",\n\t\"BuyGuildCharter\",\n\t\"BuyMerchantItem\",\n\t\"BuyPetition\",\n\t\"BuySkillTier\",\n\t\"BuyStableSlot\",\n\t\"BuyTrainerService\",\n\t\"BuybackItem\",\n\t\"COMBAT_TEXT_SCROLL_FUNCTION\",\n\t\"CalculateAuctionDeposit\",\n\t\"CalendarAddEvent\",\n\t\"CalendarCanAddEvent\",\n\t\"CalendarCanSendInvite\",\n\t\"CalendarCloseEvent\",\n\t\"CalendarContextDeselectEvent\",\n\t\"CalendarContextEventCanComplain\",\n\t\"CalendarContextEventCanEdit\",\n\t\"CalendarContextEventClipboard\",\n\t\"CalendarContextEventComplain\",\n\t\"CalendarContextEventCopy\",\n\t\"CalendarContextEventGetCalendarType\",\n\t\"CalendarContextEventPaste\",\n\t\"CalendarContextEventRemove\",\n\t\"CalendarContextEventSignUp\",\n\t\"CalendarContextGetEventIndex\",\n\t\"CalendarContextInviteAvailable\",\n\t\"CalendarContextInviteDecline\",\n\t\"CalendarContextInviteIsPending\",\n\t\"CalendarContextInviteModeratorStatus\",\n\t\"CalendarContextInviteRemove\",\n\t\"CalendarContextInviteStatus\",\n\t\"CalendarContextInviteTentative\",\n\t\"CalendarContextInviteType\",\n\t\"CalendarContextSelectEvent\",\n\t\"CalendarDefaultGuildFilter\",\n\t\"CalendarEventAvailable\",\n\t\"CalendarEventCanEdit\",\n\t\"CalendarEventCanModerate\",\n\t\"CalendarEventClearAutoApprove\",\n\t\"CalendarEventClearLocked\",\n\t\"CalendarEventClearModerator\",\n\t\"CalendarEventDecline\",\n\t\"CalendarEventGetCalendarType\",\n\t\"CalendarEventGetInvite\",\n\t\"CalendarEventGetInviteResponseTime\",\n\t\"CalendarEventGetInviteSortCriterion\",\n\t\"CalendarEventGetNumInvites\",\n\t\"CalendarEventGetRepeatOptions\",\n\t\"CalendarEventGetSelectedInvite\",\n\t\"CalendarEventGetStatusOptions\",\n\t\"CalendarEventGetTextures\",\n\t\"CalendarEventGetTypes\",\n\t\"CalendarEventHasPendingInvite\",\n\t\"CalendarEventHaveSettingsChanged\",\n\t\"CalendarEventInvite\",\n\t\"CalendarEventIsModerator\",\n\t\"CalendarEventRemoveInvite\",\n\t\"CalendarEventSelectInvite\",\n\t\"CalendarEventSetAutoApprove\",\n\t\"CalendarEventSetDate\",\n\t\"CalendarEventSetDescription\",\n\t\"CalendarEventSetLocked\",\n\t\"CalendarEventSetLockoutDate\",\n\t\"CalendarEventSetLockoutTime\",\n\t\"CalendarEventSetModerator\",\n\t\"CalendarEventSetRepeatOption\",\n\t\"CalendarEventSetSize\",\n\t\"CalendarEventSetStatus\",\n\t\"CalendarEventSetTextureID\",\n\t\"CalendarEventSetTime\",\n\t\"CalendarEventSetTitle\",\n\t\"CalendarEventSetType\",\n\t\"CalendarEventSignUp\",\n\t\"CalendarEventSortInvites\",\n\t\"CalendarEventTentative\",\n\t\"CalendarGetAbsMonth\",\n\t\"CalendarGetDate\",\n\t\"CalendarGetDayEvent\",\n\t\"CalendarGetDayEventSequenceInfo\",\n\t\"CalendarGetEventIndex\",\n\t\"CalendarGetEventInfo\",\n\t\"CalendarGetFirstPendingInvite\",\n\t\"CalendarGetHolidayInfo\",\n\t\"CalendarGetMaxCreateDate\",\n\t\"CalendarGetMaxDate\",\n\t\"CalendarGetMinDate\",\n\t\"CalendarGetMinHistoryDate\",\n\t\"CalendarGetMonth\",\n\t\"CalendarGetMonthNames\",\n\t\"CalendarGetNumDayEvents\",\n\t\"CalendarGetNumPendingInvites\",\n\t\"CalendarGetRaidInfo\",\n\t\"CalendarGetWeekdayNames\",\n\t\"CalendarIsActionPending\",\n\t\"CalendarMassInviteArenaTeam\",\n\t\"CalendarMassInviteGuild\",\n\t\"CalendarNewEvent\",\n\t\"CalendarNewGuildAnnouncement\",\n\t\"CalendarNewGuildEvent\",\n\t\"CalendarOpenEvent\",\n\t\"CalendarRemoveEvent\",\n\t\"CalendarSetAbsMonth\",\n\t\"CalendarSetMonth\",\n\t\"CalendarUpdateEvent\",\n\t\"Calendar_LoadUI\",\n\t\"CallCompanion\",\n\t\"CallRestrictedClosure\",\n\t\"CameraOrSelectOrMoveStart\",\n\t\"CameraOrSelectOrMoveStop\",\n\t\"CameraZoomIn\",\n\t\"CameraZoomOut\",\n\t\"CanAlterSkin\",\n\t\"CanCancelAuction\",\n\t\"CanChangePlayerDifficulty\",\n\t\"CanComplainChat\",\n\t\"CanComplainInboxItem\",\n\t\"CanCooperateWithToon\",\n\t\"CanCreateFilters\",\n\t\"CanEditGuildEvent\",\n\t\"CanEditGuildInfo\",\n\t\"CanEditGuildTabInfo\",\n\t\"CanEditMOTD\",\n\t\"CanEditOfficerNote\",\n\t\"CanEditPublicNote\",\n\t\"CanEjectPassengerFromSeat\",\n\t\"CanExitVehicle\",\n\t\"CanGrantLevel\",\n\t\"CanGroupInvite\",\n\t\"CanGuildBankRepair\",\n\t\"CanGuildDemote\",\n\t\"CanGuildInvite\",\n\t\"CanGuildPromote\",\n\t\"CanGuildRemove\",\n\t\"CanHearthAndResurrectFromArea\",\n\t\"CanInspect\",\n\t\"CanJoinBattlefieldAsGroup\",\n\t\"CanMapChangeDifficulty\",\n\t\"CanMerchantRepair\",\n\t\"CanOpenPanels\",\n\t\"CanPartyLFGBackfill\",\n\t\"CanQueueForWintergrasp\",\n\t\"CanResetTutorials\",\n\t\"CanSendAuctionQuery\",\n\t\"CanShowAchievementUI\",\n\t\"CanShowCenterUIPanel\",\n\t\"CanShowResetInstances\",\n\t\"CanShowRightUIPanel\",\n\t\"CanShowUIPanels\",\n\t\"CanSignPetition\",\n\t\"CanSummonFriend\",\n\t\"CanSwitchVehicleSeat\",\n\t\"CanSwitchVehicleSeats\",\n\t\"CanUseEquipmentSets\",\n\t\"CanViewOfficerNote\",\n\t\"CanWithdrawGuildBankMoney\",\n\t\"CancelAreaSpiritHeal\",\n\t\"CancelAuction\",\n\t\"CancelBarberShop\",\n\t\"CancelDuel\",\n\t\"CancelItemTempEnchantment\",\n\t\"CancelLogout\",\n\t\"CancelPendingEquip\",\n\t\"CancelSell\",\n\t\"CancelShapeshiftForm\",\n\t\"CancelSkillUps\",\n\t\"CancelSummon\",\n\t\"CancelTrade\",\n\t\"CancelTradeAccept\",\n\t\"CancelUnitBuff\",\n\t\"CannotBeResurrected\",\n\t\"CaptureBar_Create\",\n\t\"CaptureBar_Update\",\n\t\"CastPetAction\",\n\t\"CastShapeshiftForm\",\n\t\"CastSpell\",\n\t\"CastSpellByID\",\n\t\"CastSpellByName\",\n\t\"CastingBarFrame_FinishSpell\",\n\t\"CastingBarFrame_OnEvent\",\n\t\"CastingBarFrame_OnLoad\",\n\t\"CastingBarFrame_OnShow\",\n\t\"CastingBarFrame_OnUpdate\",\n\t\"CastingBarFrame_UpdateIsShown\",\n\t\"ChangeActionBarPage\",\n\t\"ChangeChatColor\",\n\t\"ChangeMultiCastActionPage\",\n\t\"ChangePlayerDifficulty\",\n\t\"ChannelBan\",\n\t\"ChannelFrameDaughterFrame_Cancel\",\n\t\"ChannelFrameDaughterFrame_Okay\",\n\t\"ChannelFrameDaughterFrame_OnHide\",\n\t\"ChannelFrame_Desaturate\",\n\t\"ChannelFrame_Join_OnClick\",\n\t\"ChannelFrame_New_OnClick\",\n\t\"ChannelFrame_OnEvent\",\n\t\"ChannelFrame_OnLoad\",\n\t\"ChannelFrame_OnUpdate\",\n\t\"ChannelFrame_Update\",\n\t\"ChannelFrame_UpdateJoin\",\n\t\"ChannelInvite\",\n\t\"ChannelKick\",\n\t\"ChannelListButton_OnDragStart\",\n\t\"ChannelListButton_OnDragStop\",\n\t\"ChannelListDropDown_HideDropDown\",\n\t\"ChannelListDropDown_Initialize\",\n\t\"ChannelListDropDown_Invite\",\n\t\"ChannelListDropDown_SetPassword\",\n\t\"ChannelList_CountUpdate\",\n\t\"ChannelList_OnClick\",\n\t\"ChannelList_SetScroll\",\n\t\"ChannelList_ShowDropdown\",\n\t\"ChannelList_Update\",\n\t\"ChannelList_UpdateHighlight\",\n\t\"ChannelList_UpdateVoice\",\n\t\"ChannelModerator\",\n\t\"ChannelMute\",\n\t\"ChannelPulloutRosterButton_OnEvent\",\n\t\"ChannelPulloutRoster_DrawButton\",\n\t\"ChannelPulloutRoster_GetActiveSession\",\n\t\"ChannelPulloutRoster_GetSessionIDByName\",\n\t\"ChannelPulloutRoster_GetSessionInfo\",\n\t\"ChannelPulloutRoster_OnEvent\",\n\t\"ChannelPulloutRoster_OnLoad\",\n\t\"ChannelPulloutRoster_Populate\",\n\t\"ChannelPulloutRoster_Scroll\",\n\t\"ChannelPulloutRoster_ScrollToBottom\",\n\t\"ChannelPulloutRoster_ScrollToTop\",\n\t\"ChannelPulloutRoster_Sort\",\n\t\"ChannelPulloutRoster_Update\",\n\t\"ChannelPulloutRoster_UpdateScrollControls\",\n\t\"ChannelPulloutTabDropDown_Initialize\",\n\t\"ChannelPulloutTab_OnClick\",\n\t\"ChannelPulloutTab_ReanchorLeft\",\n\t\"ChannelPulloutTab_UpdateText\",\n\t\"ChannelPullout_OnEvent\",\n\t\"ChannelPullout_OnLoad\",\n\t\"ChannelPullout_OnUpdate\",\n\t\"ChannelPullout_SaveOpacity\",\n\t\"ChannelPullout_SetOpacity\",\n\t\"ChannelPullout_ShowOpacity\",\n\t\"ChannelPullout_ToggleDisplay\",\n\t\"ChannelRosterDropDown_Initialize\",\n\t\"ChannelRosterFrame_ShowDropdown\",\n\t\"ChannelRoster_OnClick\",\n\t\"ChannelRoster_SetScroll\",\n\t\"ChannelRoster_Update\",\n\t\"ChannelRoster_UpdateVoice\",\n\t\"ChannelSilenceAll\",\n\t\"ChannelSilenceVoice\",\n\t\"ChannelToggleAnnouncements\",\n\t\"ChannelUnSilenceAll\",\n\t\"ChannelUnSilenceVoice\",\n\t\"ChannelUnban\",\n\t\"ChannelUnmoderator\",\n\t\"ChannelUnmute\",\n\t\"ChannelVoiceOff\",\n\t\"ChannelVoiceOn\",\n\t\"CharacterAttackFrame_OnEnter\",\n\t\"CharacterDamageFrame_OnEnter\",\n\t\"CharacterFrameTab_OnClick\",\n\t\"CharacterFrame_OnEvent\",\n\t\"CharacterFrame_OnHide\",\n\t\"CharacterFrame_OnLoad\",\n\t\"CharacterFrame_OnShow\",\n\t\"CharacterFrame_ShowSubFrame\",\n\t\"CharacterFrame_TabBoundsCheck\",\n\t\"CharacterMicroButton_OnEvent\",\n\t\"CharacterMicroButton_OnLoad\",\n\t\"CharacterMicroButton_SetNormal\",\n\t\"CharacterMicroButton_SetPushed\",\n\t\"CharacterModelFrame_OnMouseUp\",\n\t\"CharacterRangedDamageFrame_OnEnter\",\n\t\"CharacterSpellBonusDamage_OnEnter\",\n\t\"CharacterSpellCritChance_OnEnter\",\n\t\"ChatChannelDropDown_Initialize\",\n\t\"ChatChannelDropDown_InviteToConversation\",\n\t\"ChatChannelDropDown_LeaveConversation\",\n\t\"ChatChannelDropDown_PopInChat\",\n\t\"ChatChannelDropDown_PopOutChat\",\n\t\"ChatChannelDropDown_Show\",\n\t\"ChatChannelPasswordHandler\",\n\t\"ChatConfigCancel_OnClick\",\n\t\"ChatConfigCategory_OnClick\",\n\t\"ChatConfigCombat_OnLoad\",\n\t\"ChatConfigFilter_OnClick\",\n\t\"ChatConfigFrame_OnEvent\",\n\t\"ChatConfigFrame_OnLoad\",\n\t\"ChatConfigFrame_PlayCheckboxSound\",\n\t\"ChatConfig_CreateCheckboxes\",\n\t\"ChatConfig_CreateColorSwatches\",\n\t\"ChatConfig_CreateTieredCheckboxes\",\n\t\"ChatConfig_HideCombatTabs\",\n\t\"ChatConfig_MoveFilterDown\",\n\t\"ChatConfig_MoveFilterUp\",\n\t\"ChatConfig_ShowCombatTabs\",\n\t\"ChatConfig_UpdateChatSettings\",\n\t\"ChatConfig_UpdateCheckboxes\",\n\t\"ChatConfig_UpdateCombatSettings\",\n\t\"ChatConfig_UpdateCombatTabs\",\n\t\"ChatConfig_UpdateFilterList\",\n\t\"ChatConfig_UpdateSwatches\",\n\t\"ChatConfig_UpdateTieredCheckboxFrame\",\n\t\"ChatConfig_UpdateTieredCheckboxes\",\n\t\"ChatEdit_ActivateChat\",\n\t\"ChatEdit_AddHistory\",\n\t\"ChatEdit_ChooseBoxForSend\",\n\t\"ChatEdit_CustomTabPressed\",\n\t\"ChatEdit_DeactivateChat\",\n\t\"ChatEdit_ExtractBNConversation\",\n\t\"ChatEdit_ExtractChannel\",\n\t\"ChatEdit_ExtractTellTarget\",\n\t\"ChatEdit_FocusActiveWindow\",\n\t\"ChatEdit_GetActiveWindow\",\n\t\"ChatEdit_GetLastActiveWindow\",\n\t\"ChatEdit_GetLastTellTarget\",\n\t\"ChatEdit_GetLastToldTarget\",\n\t\"ChatEdit_GetNextTellTarget\",\n\t\"ChatEdit_HandleChatType\",\n\t\"ChatEdit_InsertLink\",\n\t\"ChatEdit_LanguageShow\",\n\t\"ChatEdit_OnEditFocusGained\",\n\t\"ChatEdit_OnEditFocusLost\",\n\t\"ChatEdit_OnEnterPressed\",\n\t\"ChatEdit_OnEscapePressed\",\n\t\"ChatEdit_OnEvent\",\n\t\"ChatEdit_OnHide\",\n\t\"ChatEdit_OnInputLanguageChanged\",\n\t\"ChatEdit_OnLoad\",\n\t\"ChatEdit_OnShow\",\n\t\"ChatEdit_OnSpacePressed\",\n\t\"ChatEdit_OnTabPressed\",\n\t\"ChatEdit_OnTextChanged\",\n\t\"ChatEdit_OnTextSet\",\n\t\"ChatEdit_OnUpdate\",\n\t\"ChatEdit_ParseText\",\n\t\"ChatEdit_ResetChatType\",\n\t\"ChatEdit_ResetChatTypeToSticky\",\n\t\"ChatEdit_SecureTabPressed\",\n\t\"ChatEdit_SendText\",\n\t\"ChatEdit_SetLastActiveWindow\",\n\t\"ChatEdit_SetLastTellTarget\",\n\t\"ChatEdit_SetLastToldTarget\",\n\t\"ChatEdit_UpdateHeader\",\n\t\"ChatFrameMenu_UpdateAnchorPoint\",\n\t\"ChatFrame_ActivateCombatMessages\",\n\t\"ChatFrame_AddBNConversationTarget\",\n\t\"ChatFrame_AddChannel\",\n\t\"ChatFrame_AddMessageEventFilter\",\n\t\"ChatFrame_AddMessageGroup\",\n\t\"ChatFrame_AddPrivateMessageTarget\",\n\t\"ChatFrame_ChatPageDown\",\n\t\"ChatFrame_ChatPageUp\",\n\t\"ChatFrame_ConfigEventHandler\",\n\t\"ChatFrame_DisplayChatHelp\",\n\t\"ChatFrame_DisplayGameTime\",\n\t\"ChatFrame_DisplayGuildHelp\",\n\t\"ChatFrame_DisplayHelpText\",\n\t\"ChatFrame_DisplayMacroHelpText\",\n\t\"ChatFrame_DisplayStartupText\",\n\t\"ChatFrame_DisplayTimePlayed\",\n\t\"ChatFrame_DisplayUsageError\",\n\t\"ChatFrame_ExcludeBNConversationTarget\",\n\t\"ChatFrame_ExcludePrivateMessageTarget\",\n\t\"ChatFrame_GetMessageEventFilters\",\n\t\"ChatFrame_MessageEventHandler\",\n\t\"ChatFrame_OnEvent\",\n\t\"ChatFrame_OnHyperlinkShow\",\n\t\"ChatFrame_OnLoad\",\n\t\"ChatFrame_OnMouseWheel\",\n\t\"ChatFrame_OnUpdate\",\n\t\"ChatFrame_OpenChat\",\n\t\"ChatFrame_OpenMenu\",\n\t\"ChatFrame_ReceiveAllBNConversations\",\n\t\"ChatFrame_ReceiveAllPrivateMessages\",\n\t\"ChatFrame_RegisterForChannels\",\n\t\"ChatFrame_RegisterForMessages\",\n\t\"ChatFrame_RemoveAllChannels\",\n\t\"ChatFrame_RemoveAllMessageGroups\",\n\t\"ChatFrame_RemoveBNConversationTarget\",\n\t\"ChatFrame_RemoveChannel\",\n\t\"ChatFrame_RemoveExcludeBNConversationTarget\",\n\t\"ChatFrame_RemoveExcludePrivateMessageTarget\",\n\t\"ChatFrame_RemoveMessageEventFilter\",\n\t\"ChatFrame_RemoveMessageGroup\",\n\t\"ChatFrame_RemovePrivateMessageTarget\",\n\t\"ChatFrame_ReplyTell\",\n\t\"ChatFrame_ReplyTell2\",\n\t\"ChatFrame_ScrollDown\",\n\t\"ChatFrame_ScrollToBottom\",\n\t\"ChatFrame_ScrollUp\",\n\t\"ChatFrame_SendTell\",\n\t\"ChatFrame_SystemEventHandler\",\n\t\"ChatFrame_TimeBreakDown\",\n\t\"ChatHistory_GetAccessID\",\n\t\"ChatHistory_GetChatType\",\n\t\"ChatHistory_GetToken\",\n\t\"ChatMenu_Battleground\",\n\t\"ChatMenu_Emote\",\n\t\"ChatMenu_Guild\",\n\t\"ChatMenu_OnLoad\",\n\t\"ChatMenu_OnShow\",\n\t\"ChatMenu_Party\",\n\t\"ChatMenu_Raid\",\n\t\"ChatMenu_Reply\",\n\t\"ChatMenu_Say\",\n\t\"ChatMenu_SetChatType\",\n\t\"ChatMenu_VoiceMacro\",\n\t\"ChatMenu_Whisper\",\n\t\"ChatMenu_Yell\",\n\t\"ChatUnitColor_OpenColorPicker\",\n\t\"Chat_GetChannelShortcutName\",\n\t\"Chat_GetChatCategory\",\n\t\"Chat_GetColoredChatName\",\n\t\"CheckBinderDist\",\n\t\"CheckInbox\",\n\t\"CheckInteractDistance\",\n\t\"CheckSpiritHealerDist\",\n\t\"CheckTalentMasterDist\",\n\t\"CinematicFrame_OnEvent\",\n\t\"CinematicFrame_OnLoad\",\n\t\"ClassTrainerFrame_LoadUI\",\n\t\"ClearAchievementComparisonUnit\",\n\t\"ClearAllLFGDungeons\",\n\t\"ClearChannelWatch\",\n\t\"ClearCursor\",\n\t\"ClearFocus\",\n\t\"ClearInspectPlayer\",\n\t\"ClearLFGDungeon\",\n\t\"ClearOverrideBindings\",\n\t\"ClearPartyAssignment\",\n\t\"ClearPendingGuildBankPermissions\",\n\t\"ClearSendMail\",\n\t\"ClearTarget\",\n\t\"ClearTutorials\",\n\t\"ClickAuctionSellItemButton\",\n\t\"ClickLandmark\",\n\t\"ClickPetitionButton\",\n\t\"ClickSendMailItemButton\",\n\t\"ClickSocketButton\",\n\t\"ClickStablePet\",\n\t\"ClickTargetTradeButton\",\n\t\"ClickTradeButton\",\n\t\"CloseAllBags\",\n\t\"CloseAllWindows\",\n\t\"CloseAllWindows_WithExceptions\",\n\t\"CloseArenaTeamRoster\",\n\t\"CloseAuctionHouse\",\n\t\"CloseBackpack\",\n\t\"CloseBag\",\n\t\"CloseBankBagFrames\",\n\t\"CloseBankFrame\",\n\t\"CloseBattlefield\",\n\t\"CloseChildWindows\",\n\t\"CloseDropDownMenus\",\n\t\"CloseGossip\",\n\t\"CloseGuildBankFrame\",\n\t\"CloseGuildRegistrar\",\n\t\"CloseGuildRoster\",\n\t\"CloseItemText\",\n\t\"CloseLoot\",\n\t\"CloseMail\",\n\t\"CloseMenus\",\n\t\"CloseMerchant\",\n\t\"ClosePetStables\",\n\t\"ClosePetition\",\n\t\"ClosePetitionVendor\",\n\t\"CloseQuest\",\n\t\"CloseSocketInfo\",\n\t\"CloseSpecialWindows\",\n\t\"CloseTabardCreation\",\n\t\"CloseTaxiMap\",\n\t\"CloseTrade\",\n\t\"CloseTradeSkill\",\n\t\"CloseTrainer\",\n\t\"CloseWindows\",\n\t\"CoinPickupFrameCancel_Click\",\n\t\"CoinPickupFrameLeft_Click\",\n\t\"CoinPickupFrameOkay_Click\",\n\t\"CoinPickupFrameRight_Click\",\n\t\"CoinPickupFrame_OnChar\",\n\t\"CoinPickupFrame_OnHide\",\n\t\"CoinPickupFrame_OnKeyDown\",\n\t\"CoinPickupFrame_OnKeyUp\",\n\t\"CollapseAllFactionHeaders\",\n\t\"CollapseChannelHeader\",\n\t\"CollapseFactionHeader\",\n\t\"CollapseQuestHeader\",\n\t\"CollapseSkillHeader\",\n\t\"CollapseTradeSkillSubClass\",\n\t\"CollapseTrainerSkillLine\",\n\t\"ColorClassesCheckBox_OnClick\",\n\t\"ColorPaperDollStat\",\n\t\"ColorPicker_GetPreviousValues\",\n\t\"CombatConfig_Colorize_Update\",\n\t\"CombatConfig_CreateCombatFilter\",\n\t\"CombatConfig_DeleteCurrentCombatFilter\",\n\t\"CombatConfig_Formatting_Update\",\n\t\"CombatConfig_SetCombatFiltersToDefault\",\n\t\"CombatConfig_SetFilterName\",\n\t\"CombatConfig_Settings_Update\",\n\t\"CombatFeedback_Initialize\",\n\t\"CombatFeedback_OnCombatEvent\",\n\t\"CombatFeedback_OnUpdate\",\n\t\"CombatFeedback_StartFullscreenStatus\",\n\t\"CombatFeedback_StopFullscreenStatus\",\n\t\"CombatLogAddFilter\",\n\t\"CombatLogAdvanceEntry\",\n\t\"CombatLogClearEntries\",\n\t\"CombatLogGetCurrentEntry\",\n\t\"CombatLogGetNumEntries\",\n\t\"CombatLogGetRetentionTime\",\n\t\"CombatLogResetFilter\",\n\t\"CombatLogSetCurrentEntry\",\n\t\"CombatLogSetRetentionTime\",\n\t\"CombatLog_AddEvent\",\n\t\"CombatLog_Color_ColorArrayByEventType\",\n\t\"CombatLog_Color_ColorArrayBySchool\",\n\t\"CombatLog_Color_ColorArrayByUnitType\",\n\t\"CombatLog_Color_ColorStringByEventType\",\n\t\"CombatLog_Color_ColorStringBySchool\",\n\t\"CombatLog_Color_ColorStringByUnitType\",\n\t\"CombatLog_Color_FloatToText\",\n\t\"CombatLog_Color_HighlightColorArray\",\n\t\"CombatLog_LoadUI\",\n\t\"CombatLog_Object_IsA\",\n\t\"CombatLog_OnEvent\",\n\t\"CombatLog_String_DamageResultString\",\n\t\"CombatLog_String_GetIcon\",\n\t\"CombatLog_String_GetToken\",\n\t\"CombatLog_String_PowerType\",\n\t\"CombatLog_String_SchoolString\",\n\t\"CombatTextSetActiveUnit\",\n\t\"CombatText_AddMessage\",\n\t\"CombatText_ClearAnimationList\",\n\t\"CombatText_FountainScroll\",\n\t\"CombatText_GetAvailableString\",\n\t\"CombatText_GetOldestString\",\n\t\"CombatText_OnEvent\",\n\t\"CombatText_OnLoad\",\n\t\"CombatText_OnUpdate\",\n\t\"CombatText_RemoveMessage\",\n\t\"CombatText_UpdateDisplayedMessages\",\n\t\"ComboFrame_OnEvent\",\n\t\"ComboFrame_Update\",\n\t\"ComboPointShineFadeIn\",\n\t\"ComboPointShineFadeOut\",\n\t\"CommentatorAddPlayer\",\n\t\"CommentatorEnterInstance\",\n\t\"CommentatorExitInstance\",\n\t\"CommentatorFollowPlayer\",\n\t\"CommentatorGetCamera\",\n\t\"CommentatorGetCurrentMapID\",\n\t\"CommentatorGetInstanceInfo\",\n\t\"CommentatorGetMapInfo\",\n\t\"CommentatorGetMode\",\n\t\"CommentatorGetNumMaps\",\n\t\"CommentatorGetNumPlayers\",\n\t\"CommentatorGetPlayerInfo\",\n\t\"CommentatorGetSkirmishMode\",\n\t\"CommentatorGetSkirmishQueueCount\",\n\t\"CommentatorGetSkirmishQueuePlayerInfo\",\n\t\"CommentatorLookatPlayer\",\n\t\"CommentatorRemovePlayer\",\n\t\"CommentatorRequestSkirmishMode\",\n\t\"CommentatorRequestSkirmishQueueData\",\n\t\"CommentatorSetBattlemaster\",\n\t\"CommentatorSetCamera\",\n\t\"CommentatorSetCameraCollision\",\n\t\"CommentatorSetMapAndInstanceIndex\",\n\t\"CommentatorSetMode\",\n\t\"CommentatorSetMoveSpeed\",\n\t\"CommentatorSetPlayerIndex\",\n\t\"CommentatorSetSkirmishMatchmakingMode\",\n\t\"CommentatorSetTargetHeightOffset\",\n\t\"CommentatorStartInstance\",\n\t\"CommentatorStartSkirmishMatch\",\n\t\"CommentatorToggleMode\",\n\t\"CommentatorUpdateMapInfo\",\n\t\"CommentatorUpdatePlayerInfo\",\n\t\"CommentatorZoomIn\",\n\t\"CommentatorZoomOut\",\n\t\"CompanionButton_OnClick\",\n\t\"CompanionButton_OnDrag\",\n\t\"CompanionButton_OnEnter\",\n\t\"CompanionButton_OnLoad\",\n\t\"CompanionButton_OnModifiedClick\",\n\t\"CompanionSummonButton_OnClick\",\n\t\"ComplainChat\",\n\t\"ComplainInboxItem\",\n\t\"CompleteLFGRoleCheck\",\n\t\"CompleteQuest\",\n\t\"ComputePetBonus\",\n\t\"ConfirmAcceptQuest\",\n\t\"ConfirmBindOnUse\",\n\t\"ConfirmBinder\",\n\t\"ConfirmLootRoll\",\n\t\"ConfirmLootSlot\",\n\t\"ConfirmReadyCheck\",\n\t\"ConfirmSummon\",\n\t\"ConfirmTalentWipe\",\n\t\"ConsoleAddMessage\",\n\t\"ConsoleExec\",\n\t\"ConsolePrint\",\n\t\"ConsolidatedBuffs_OnEnter\",\n\t\"ConsolidatedBuffs_OnHide\",\n\t\"ConsolidatedBuffs_OnShow\",\n\t\"ConsolidatedBuffs_OnUpdate\",\n\t\"ConsolidatedBuffs_UpdateAllAnchors\",\n\t\"ContainerFrameItemButton_OnClick\",\n\t\"ContainerFrameItemButton_OnDrag\",\n\t\"ContainerFrameItemButton_OnEnter\",\n\t\"ContainerFrameItemButton_OnLoad\",\n\t\"ContainerFrameItemButton_OnModifiedClick\",\n\t\"ContainerFrame_GenerateFrame\",\n\t\"ContainerFrame_GetExtendedPriceString\",\n\t\"ContainerFrame_GetOpenFrame\",\n\t\"ContainerFrame_OnEvent\",\n\t\"ContainerFrame_OnHide\",\n\t\"ContainerFrame_OnLoad\",\n\t\"ContainerFrame_OnShow\",\n\t\"ContainerFrame_Update\",\n\t\"ContainerFrame_UpdateCooldown\",\n\t\"ContainerFrame_UpdateCooldowns\",\n\t\"ContainerFrame_UpdateLocked\",\n\t\"ContainerFrame_UpdateLockedItem\",\n\t\"ContainerIDToInventoryID\",\n\t\"ContainerRefundItemPurchase\",\n\t\"ConvertToRaid\",\n\t\"CooldownFrame_SetTimer\",\n\t\"CopyTable\",\n\t\"CreateChatChannelList\",\n\t\"CreateFont\",\n\t\"CreateFrame\",\n\t\"CreateMacro\",\n\t\"CreateMiniWorldMapArrowFrame\",\n\t\"CreateWorldMapArrowFrame\",\n\t\"CursorCanGoInSlot\",\n\t\"CursorHasItem\",\n\t\"CursorHasMacro\",\n\t\"CursorHasMoney\",\n\t\"CursorHasSpell\",\n\t\"CursorOnUpdate\",\n\t\"CursorUpdate\",\n\t\"DamageColor_OpenColorPicker\",\n\t\"DeathKnniggetThrobFunction\",\n\t\"DebuffButton_UpdateAnchors\",\n\t\"DeclineArenaTeam\",\n\t\"DeclineGroup\",\n\t\"DeclineGuild\",\n\t\"DeclineInvite\",\n\t\"DeclineLevelGrant\",\n\t\"DeclineName\",\n\t\"DeclineQuest\",\n\t\"DeclineResurrect\",\n\t\"DelIgnore\",\n\t\"DelMute\",\n\t\"DeleteCursorItem\",\n\t\"DeleteEquipmentSet\",\n\t\"DeleteFile\",\n\t\"DeleteGMTicket\",\n\t\"DeleteInboxItem\",\n\t\"DeleteMacro\",\n\t\"DemoteAssistant\",\n\t\"DepositGuildBankMoney\",\n\t\"DescendStop\",\n\t\"DestroyTotem\",\n\t\"DetectWowMouse\",\n\t\"DisableAddOn\",\n\t\"DisableAllAddOns\",\n\t\"DisablePagingButton\",\n\t\"DisableSpellAutocast\",\n\t\"Disable_BagButtons\",\n\t\"DismissCompanion\",\n\t\"Dismount\",\n\t\"DisplayChannelOwner\",\n\t\"DisplayChannelVoiceOff\",\n\t\"DisplayChannelVoiceOn\",\n\t\"DoEmote\",\n\t\"DoReadyCheck\",\n\t\"DoTradeSkill\",\n\t\"DownloadSettings\",\n\t\"DrawOneHopLines\",\n\t\"DrawRouteLine\",\n\t\"DressUpItemLink\",\n\t\"DressUpTexturePath\",\n\t\"DropCursorMoney\",\n\t\"DropItemOnUnit\",\n\t\"DungeonCompletionAlertFrameReward_OnEnter\",\n\t\"DungeonCompletionAlertFrameReward_OnLeave\",\n\t\"DungeonCompletionAlertFrameReward_SetReward\",\n\t\"DungeonCompletionAlertFrame_FixAnchors\",\n\t\"DungeonCompletionAlertFrame_OnLoad\",\n\t\"DungeonCompletionAlertFrame_ShowAlert\",\n\t\"DungeonUsesTerrainMap\",\n\t\"DurabilityFrame_SetAlerts\",\n\t\"DynamicScrollFrame_CreateButtons\",\n\t\"DynamicScrollFrame_OnVerticalScroll\",\n\t\"DynamicScrollFrame_UnlockAllHighlights\",\n\t\"DynamicScrollFrame_Update\",\n\t\"EasyMenu\",\n\t\"EasyMenu_Initialize\",\n\t\"EditBox_ClearFocus\",\n\t\"EditBox_ClearHighlight\",\n\t\"EditBox_HandleTabbing\",\n\t\"EditBox_HighlightText\",\n\t\"EditBox_SetFocus\",\n\t\"EditMacro\",\n\t\"EjectPassengerFromSeat\",\n\t\"EmoteMenu_Click\",\n\t\"EmoteMenu_OnLoad\",\n\t\"EnableAddOn\",\n\t\"EnableAllAddOns\",\n\t\"EnablePagingButton\",\n\t\"EnableSpellAutocast\",\n\t\"Enable_BagButtons\",\n\t\"EndBoundTradeable\",\n\t\"EndRefund\",\n\t\"EnumerateFrames\",\n\t\"EnumerateServerChannels\",\n\t\"EquipCursorItem\",\n\t\"EquipItemByName\",\n\t\"EquipPendingItem\",\n\t\"EquipmentManagerClearIgnoredSlotsForSave\",\n\t\"EquipmentManagerIgnoreSlotForSave\",\n\t\"EquipmentManagerIsSlotIgnoredForSave\",\n\t\"EquipmentManagerUnignoreSlotForSave\",\n\t\"EquipmentManager_EquipContainerItem\",\n\t\"EquipmentManager_EquipInventoryItem\",\n\t\"EquipmentManager_EquipItemByLocation\",\n\t\"EquipmentManager_EquipSet\",\n\t\"EquipmentManager_GetItemInfoByLocation\",\n\t\"EquipmentManager_OnEvent\",\n\t\"EquipmentManager_PutItemInInventory\",\n\t\"EquipmentManager_RunAction\",\n\t\"EquipmentManager_UnequipItemInSlot\",\n\t\"EquipmentManager_UnpackLocation\",\n\t\"EquipmentManager_UpdateFreeBagSpace\",\n\t\"EquipmentSetContainsLockedItems\",\n\t\"ExhaustionTick_OnEvent\",\n\t\"ExhaustionTick_OnLoad\",\n\t\"ExhaustionTick_OnUpdate\",\n\t\"ExhaustionToolTipText\",\n\t\"ExpandAllFactionHeaders\",\n\t\"ExpandChannelHeader\",\n\t\"ExpandCurrencyList\",\n\t\"ExpandFactionHeader\",\n\t\"ExpandQuestHeader\",\n\t\"ExpandSkillHeader\",\n\t\"ExpandTradeSkillSubClass\",\n\t\"ExpandTrainerSkillLine\",\n\t\"EyeTemplate_OnUpdate\",\n\t\"EyeTemplate_StartAnimating\",\n\t\"EyeTemplate_StopAnimating\",\n\t\"FCFChannelDropDown_OnClick\",\n\t\"FCFClickAnywhereButton_OnEvent\",\n\t\"FCFClickAnywhereButton_OnLoad\",\n\t\"FCFClickAnywhereButton_UpdateState\",\n\t\"FCFDockOverflowButton_OnClick\",\n\t\"FCFDockOverflowButton_OnEvent\",\n\t\"FCFDockOverflowButton_UpdatePulseState\",\n\t\"FCFDockOverflowListButton_OnClick\",\n\t\"FCFDockOverflowListButton_SetValue\",\n\t\"FCFDockOverflowList_Update\",\n\t\"FCFDockOverflow_CloseLists\",\n\t\"FCFDockScrollFrame_GetLeftmostTab\",\n\t\"FCFDockScrollFrame_GetScrollDistanceNeeded\",\n\t\"FCFDockScrollFrame_JumpToTab\",\n\t\"FCFDockScrollFrame_OnUpdate\",\n\t\"FCFDock_AddChatFrame\",\n\t\"FCFDock_CalculateTabSize\",\n\t\"FCFDock_ForceReanchoring\",\n\t\"FCFDock_GetChatFrames\",\n\t\"FCFDock_GetInsertIndex\",\n\t\"FCFDock_GetSelectedWindow\",\n\t\"FCFDock_HasDockedChatFrame\",\n\t\"FCFDock_HideInsertHighlight\",\n\t\"FCFDock_OnEvent\",\n\t\"FCFDock_OnLoad\",\n\t\"FCFDock_OnPrimarySizeChanged\",\n\t\"FCFDock_OnUpdate\",\n\t\"FCFDock_PlaceInsertHighlight\",\n\t\"FCFDock_RemoveChatFrame\",\n\t\"FCFDock_ScrollToSelectedTab\",\n\t\"FCFDock_SelectWindow\",\n\t\"FCFDock_SetDirty\",\n\t\"FCFDock_SetPrimary\",\n\t\"FCFDock_UpdateTabs\",\n\t\"FCFDropDown_LoadChannels\",\n\t\"FCFDropDown_LoadChatTypes\",\n\t\"FCFManager_GetNumDedicatedFrames\",\n\t\"FCFManager_RegisterDedicatedFrame\",\n\t\"FCFManager_ShouldSuppressMessage\",\n\t\"FCFManager_UnregisterDedicatedFrame\",\n\t\"FCFMessageTypeDropDown_OnClick\",\n\t\"FCFMin_UpdateColors\",\n\t\"FCFOptionsDropDown_Initialize\",\n\t\"FCFOptionsDropDown_OnLoad\",\n\t\"FCFTab_OnDragStop\",\n\t\"FCFTab_OnUpdate\",\n\t\"FCFTab_UpdateAlpha\",\n\t\"FCFTab_UpdateColors\",\n\t\"FCF_CancelFontColorSettings\",\n\t\"FCF_CancelWindowColorSettings\",\n\t\"FCF_Close\",\n\t\"FCF_CopyChatSettings\",\n\t\"FCF_CreateMinimizedFrame\",\n\t\"FCF_DockFrame\",\n\t\"FCF_DockUpdate\",\n\t\"FCF_FadeInChatFrame\",\n\t\"FCF_FadeOutChatFrame\",\n\t\"FCF_FlagMinimizedPositionReset\",\n\t\"FCF_FlashTab\",\n\t\"FCF_GetButtonSide\",\n\t\"FCF_GetChatWindowInfo\",\n\t\"FCF_GetCurrentChatFrame\",\n\t\"FCF_GetCurrentChatFrameID\",\n\t\"FCF_GetNumActiveChatFrames\",\n\t\"FCF_HideOnFadeFinished\",\n\t\"FCF_IsValidChatFrame\",\n\t\"FCF_LeaveConversation\",\n\t\"FCF_LoadChatSubTypes\",\n\t\"FCF_MaximizeFrame\",\n\t\"FCF_MinimizeFrame\",\n\t\"FCF_NewChatWindow\",\n\t\"FCF_OnUpdate\",\n\t\"FCF_OpenNewWindow\",\n\t\"FCF_OpenTemporaryWindow\",\n\t\"FCF_PopInWindow\",\n\t\"FCF_RenameChatWindow_Popup\",\n\t\"FCF_ResetAllWindows\",\n\t\"FCF_ResetChatWindows\",\n\t\"FCF_RestoreChatsToFrame\",\n\t\"FCF_RestorePositionAndDimensions\",\n\t\"FCF_SaveDock\",\n\t\"FCF_SavePositionAndDimensions\",\n\t\"FCF_SelectDockFrame\",\n\t\"FCF_SetButtonSide\",\n\t\"FCF_SetChatTypeColor\",\n\t\"FCF_SetChatWindowBackGroundColor\",\n\t\"FCF_SetChatWindowFontSize\",\n\t\"FCF_SetChatWindowOpacity\",\n\t\"FCF_SetExpandedUninteractable\",\n\t\"FCF_SetLocked\",\n\t\"FCF_SetTabPosition\",\n\t\"FCF_SetTemporaryWindowType\",\n\t\"FCF_SetUninteractable\",\n\t\"FCF_SetWindowAlpha\",\n\t\"FCF_SetWindowColor\",\n\t\"FCF_SetWindowName\",\n\t\"FCF_Set_NormalChat\",\n\t\"FCF_StartAlertFlash\",\n\t\"FCF_StopAlertFlash\",\n\t\"FCF_StopDragging\",\n\t\"FCF_StripChatMsg\",\n\t\"FCF_TabCompare\",\n\t\"FCF_Tab_OnClick\",\n\t\"FCF_ToggleLock\",\n\t\"FCF_ToggleUninteractable\",\n\t\"FCF_UnDockFrame\",\n\t\"FCF_UpdateButtonSide\",\n\t\"FCF_UpdateDockPosition\",\n\t\"FactionToggleAtWar\",\n\t\"FadingFrame_OnLoad\",\n\t\"FadingFrame_OnUpdate\",\n\t\"FadingFrame_SetFadeInTime\",\n\t\"FadingFrame_SetFadeOutTime\",\n\t\"FadingFrame_SetHoldTime\",\n\t\"FadingFrame_Show\",\n\t\"FauxScrollFrame_GetOffset\",\n\t\"FauxScrollFrame_OnVerticalScroll\",\n\t\"FauxScrollFrame_SetOffset\",\n\t\"FauxScrollFrame_Update\",\n\t\"FillLocalizedClassList\",\n\t\"FindSpellBookSlotByID\",\n\t\"FlagTutorial\",\n\t\"FlipCameraYaw\",\n\t\"FloatingChatFrameManager_OnEvent\",\n\t\"FloatingChatFrameManager_OnLoad\",\n\t\"FloatingChatFrame_OnEvent\",\n\t\"FloatingChatFrame_OnLoad\",\n\t\"FloatingChatFrame_OnMouseScroll\",\n\t\"FloatingChatFrame_Update\",\n\t\"FocusFrameDropDown_Initialize\",\n\t\"FocusFrame_IsLocked\",\n\t\"FocusFrame_OnDragStart\",\n\t\"FocusFrame_OnDragStop\",\n\t\"FocusFrame_SetLock\",\n\t\"FocusFrame_SetSmallSize\",\n\t\"FocusUnit\",\n\t\"FollowUnit\",\n\t\"ForceGossip\",\n\t\"ForceLogout\",\n\t\"ForceQuit\",\n\t\"FormatPaperDollTooltipStat\",\n\t\"FrameXML_Debug\",\n\t\"FriendsFrameAddFriendButton_OnClick\",\n\t\"FriendsFrameBNDropDown_Initialize\",\n\t\"FriendsFrameBNOfflineDropDown_Initialize\",\n\t\"FriendsFrameBroadcastInput_OnClearPressed\",\n\t\"FriendsFrameBroadcastInput_OnEnterPressed\",\n\t\"FriendsFrameBroadcastInput_OnEscapePressed\",\n\t\"FriendsFrameBroadcastInput_UpdateDisplay\",\n\t\"FriendsFrameDropDown_Initialize\",\n\t\"FriendsFrameFriendButton_OnClick\",\n\t\"FriendsFrameGuildStatusButton_OnClick\",\n\t\"FriendsFrameIgnoreButton_OnClick\",\n\t\"FriendsFrameMuteButton_OnClick\",\n\t\"FriendsFrameOfflineDropDown_Initialize\",\n\t\"FriendsFramePendingScrollFrame_AdjustScroll\",\n\t\"FriendsFrameSendMessageButton_OnClick\",\n\t\"FriendsFrameStatusDropDown_Initialize\",\n\t\"FriendsFrameStatusDropDown_OnLoad\",\n\t\"FriendsFrameStatusDropDown_OnShow\",\n\t\"FriendsFrameStatusDropDown_ShowTooltip\",\n\t\"FriendsFrameStatusDropDown_Update\",\n\t\"FriendsFrameTooltip_SetLine\",\n\t\"FriendsFrameTooltip_Show\",\n\t\"FriendsFrameUnsquelchButton_OnClick\",\n\t\"FriendsFrameWhoButton_OnClick\",\n\t\"FriendsFrame_CheckBattlenetStatus\",\n\t\"FriendsFrame_ClickSummonButton\",\n\t\"FriendsFrame_GetLastOnline\",\n\t\"FriendsFrame_GetTopButton\",\n\t\"FriendsFrame_GroupInvite\",\n\t\"FriendsFrame_OnEvent\",\n\t\"FriendsFrame_OnHide\",\n\t\"FriendsFrame_OnLoad\",\n\t\"FriendsFrame_OnShow\",\n\t\"FriendsFrame_RemoveFriend\",\n\t\"FriendsFrame_SelectFriend\",\n\t\"FriendsFrame_SelectSquelched\",\n\t\"FriendsFrame_SendMessage\",\n\t\"FriendsFrame_SetButton\",\n\t\"FriendsFrame_SetOnlineStatus\",\n\t\"FriendsFrame_ShowBNDropdown\",\n\t\"FriendsFrame_ShowDropdown\",\n\t\"FriendsFrame_ShowSubFrame\",\n\t\"FriendsFrame_SummonButton_OnEvent\",\n\t\"FriendsFrame_SummonButton_OnShow\",\n\t\"FriendsFrame_SummonButton_Update\",\n\t\"FriendsFrame_UnBlock\",\n\t\"FriendsFrame_UnIgnore\",\n\t\"FriendsFrame_UnMute\",\n\t\"FriendsFrame_Update\",\n\t\"FriendsFriendsButton_OnClick\",\n\t\"FriendsFriendsFrameDropDown_Initialize\",\n\t\"FriendsFriendsFrameDropDown_OnClick\",\n\t\"FriendsFriendsFrame_Close\",\n\t\"FriendsFriendsFrame_OnEvent\",\n\t\"FriendsFriendsFrame_Reset\",\n\t\"FriendsFriendsFrame_SendRequest\",\n\t\"FriendsFriendsFrame_Show\",\n\t\"FriendsFriendsList_Update\",\n\t\"FriendsList_Update\",\n\t\"GMChatFrame_LoadUI\",\n\t\"GMReportLag\",\n\t\"GMRequestPlayerInfo\",\n\t\"GMResponseNeedMoreHelp\",\n\t\"GMResponseResolve\",\n\t\"GMSurveyAnswer\",\n\t\"GMSurveyAnswerSubmit\",\n\t\"GMSurveyCommentSubmit\",\n\t\"GMSurveyFrame_LoadUI\",\n\t\"GMSurveyNumAnswers\",\n\t\"GMSurveyQuestion\",\n\t\"GMSurveySubmit\",\n\t\"GameMovieFinished\",\n\t\"GameTimeFrame_OnClick\",\n\t\"GameTimeFrame_OnEnter\",\n\t\"GameTimeFrame_OnEvent\",\n\t\"GameTimeFrame_OnLoad\",\n\t\"GameTimeFrame_OnUpdate\",\n\t\"GameTimeFrame_SetDate\",\n\t\"GameTime_ComputeMilitaryTime\",\n\t\"GameTime_ComputeMinutes\",\n\t\"GameTime_ComputeStandardTime\",\n\t\"GameTime_GetFormattedTime\",\n\t\"GameTime_GetGameTime\",\n\t\"GameTime_GetLocalTime\",\n\t\"GameTime_GetTime\",\n\t\"GameTime_UpdateTooltip\",\n\t\"GameTooltip_AddNewbieTip\",\n\t\"GameTooltip_ClearMoney\",\n\t\"GameTooltip_ClearStatusBars\",\n\t\"GameTooltip_Hide\",\n\t\"GameTooltip_HideResetCursor\",\n\t\"GameTooltip_OnHide\",\n\t\"GameTooltip_OnLoad\",\n\t\"GameTooltip_OnTooltipAddMoney\",\n\t\"GameTooltip_OnUpdate\",\n\t\"GameTooltip_SetDefaultAnchor\",\n\t\"GameTooltip_ShowCompareItem\",\n\t\"GameTooltip_ShowStatusBar\",\n\t\"GameTooltip_UnitColor\",\n\t\"GearManagerDialogDeleteSet_OnClick\",\n\t\"GearManagerDialogEquipSet_OnClick\",\n\t\"GearManagerDialogPopupCancel_OnClick\",\n\t\"GearManagerDialogPopupOkay_OnClick\",\n\t\"GearManagerDialogPopupOkay_Update\",\n\t\"GearManagerDialogPopup_OnHide\",\n\t\"GearManagerDialogPopup_OnLoad\",\n\t\"GearManagerDialogPopup_OnShow\",\n\t\"GearManagerDialogPopup_Update\",\n\t\"GearManagerDialogSaveSet_OnClick\",\n\t\"GearManagerDialog_OnEvent\",\n\t\"GearManagerDialog_OnHide\",\n\t\"GearManagerDialog_OnLoad\",\n\t\"GearManagerDialog_OnShow\",\n\t\"GearManagerDialog_Update\",\n\t\"GearSetButton_OnClick\",\n\t\"GearSetButton_OnEnter\",\n\t\"GearSetPopupButton_OnClick\",\n\t\"GetAbandonQuestItems\",\n\t\"GetAbandonQuestName\",\n\t\"GetAccountExpansionLevel\",\n\t\"GetAchievementCategory\",\n\t\"GetAchievementComparisonInfo\",\n\t\"GetAchievementCriteriaInfo\",\n\t\"GetAchievementInfo\",\n\t\"GetAchievementInfoFromCriteria\",\n\t\"GetAchievementLink\",\n\t\"GetAchievementNumCriteria\",\n\t\"GetAchievementNumRewards\",\n\t\"GetAchievementReward\",\n\t\"GetActionAutocast\",\n\t\"GetActionBarPage\",\n\t\"GetActionBarToggles\",\n\t\"GetActionCooldown\",\n\t\"GetActionCount\",\n\t\"GetActionInfo\",\n\t\"GetActionText\",\n\t\"GetActionTexture\",\n\t\"GetActiveLevel\",\n\t\"GetActiveTalentGroup\",\n\t\"GetActiveTitle\",\n\t\"GetActiveVoiceChannel\",\n\t\"GetAddOnCPUUsage\",\n\t\"GetAddOnDependencies\",\n\t\"GetAddOnInfo\",\n\t\"GetAddOnMemoryUsage\",\n\t\"GetAddOnMetadata\",\n\t\"GetAdjustedSkillPoints\",\n\t\"GetAllowLowLevelRaid\",\n\t\"GetAreaSpiritHealerTime\",\n\t\"GetArenaCurrency\",\n\t\"GetArenaTeam\",\n\t\"GetArenaTeamGdfInfo\",\n\t\"GetArenaTeamRosterInfo\",\n\t\"GetArenaTeamRosterSelection\",\n\t\"GetArenaTeamRosterShowOffline\",\n\t\"GetArmorPenetration\",\n\t\"GetAttackPowerForStat\",\n\t\"GetAuctionHouseDepositRate\",\n\t\"GetAuctionInvTypes\",\n\t\"GetAuctionItemClasses\",\n\t\"GetAuctionItemInfo\",\n\t\"GetAuctionItemLink\",\n\t\"GetAuctionItemSubClasses\",\n\t\"GetAuctionItemTimeLeft\",\n\t\"GetAuctionSellItemInfo\",\n\t\"GetAuctionSort\",\n\t\"GetAutoCompletePresenceID\",\n\t\"GetAutoCompleteResults\",\n\t\"GetAvailableLevel\",\n\t\"GetAvailableQuestInfo\",\n\t\"GetAvailableRoles\",\n\t\"GetAvailableTitle\",\n\t\"GetBackgroundTexCoordsForRole\",\n\t\"GetBackpackCurrencyInfo\",\n\t\"GetBackpackFrame\",\n\t\"GetBagName\",\n\t\"GetBankSlotCost\",\n\t\"GetBarberShopStyleInfo\",\n\t\"GetBarberShopTotalCost\",\n\t\"GetBaseMip\",\n\t\"GetBattlefieldArenaFaction\",\n\t\"GetBattlefieldEstimatedWaitTime\",\n\t\"GetBattlefieldFlagPosition\",\n\t\"GetBattlefieldInfo\",\n\t\"GetBattlefieldInstanceExpiration\",\n\t\"GetBattlefieldInstanceInfo\",\n\t\"GetBattlefieldInstanceRunTime\",\n\t\"GetBattlefieldMapIconScale\",\n\t\"GetBattlefieldPortExpiration\",\n\t\"GetBattlefieldPosition\",\n\t\"GetBattlefieldScore\",\n\t\"GetBattlefieldStatData\",\n\t\"GetBattlefieldStatInfo\",\n\t\"GetBattlefieldStatus\",\n\t\"GetBattlefieldTeamInfo\",\n\t\"GetBattlefieldTimeWaited\",\n\t\"GetBattlefieldVehicleInfo\",\n\t\"GetBattlefieldWinner\",\n\t\"GetBattlegroundInfo\",\n\t\"GetBidderAuctionItems\",\n\t\"GetBillingTimeRested\",\n\t\"GetBindLocation\",\n\t\"GetBinding\",\n\t\"GetBindingAction\",\n\t\"GetBindingByKey\",\n\t\"GetBindingFromClick\",\n\t\"GetBindingKey\",\n\t\"GetBindingText\",\n\t\"GetBlockChance\",\n\t\"GetBonusBarOffset\",\n\t\"GetBuildInfo\",\n\t\"GetBuybackItemInfo\",\n\t\"GetBuybackItemLink\",\n\t\"GetCVar\",\n\t\"GetCVarAbsoluteMax\",\n\t\"GetCVarAbsoluteMin\",\n\t\"GetCVarBool\",\n\t\"GetCVarDefault\",\n\t\"GetCVarInfo\",\n\t\"GetCVarMax\",\n\t\"GetCVarMin\",\n\t\"GetCategoryInfo\",\n\t\"GetCategoryList\",\n\t\"GetCategoryNumAchievements\",\n\t\"GetChannelDisplayInfo\",\n\t\"GetChannelList\",\n\t\"GetChannelName\",\n\t\"GetChannelRosterInfo\",\n\t\"GetChatTypeIndex\",\n\t\"GetChatUnitColor\",\n\t\"GetChatWindowChannels\",\n\t\"GetChatWindowInfo\",\n\t\"GetChatWindowMessages\",\n\t\"GetChatWindowSavedDimensions\",\n\t\"GetChatWindowSavedPosition\",\n\t\"GetClickFrame\",\n\t\"GetCoinIcon\",\n\t\"GetCoinText\",\n\t\"GetCoinTextureString\",\n\t\"GetColoredName\",\n\t\"GetCombatRating\",\n\t\"GetCombatRatingBonus\",\n\t\"GetComboPoints\",\n\t\"GetCompanionCooldown\",\n\t\"GetCompanionInfo\",\n\t\"GetComparisonAchievementPoints\",\n\t\"GetComparisonCategoryNumAchievements\",\n\t\"GetComparisonStatistic\",\n\t\"GetContainerFreeSlots\",\n\t\"GetContainerItemCooldown\",\n\t\"GetContainerItemDurability\",\n\t\"GetContainerItemGems\",\n\t\"GetContainerItemID\",\n\t\"GetContainerItemInfo\",\n\t\"GetContainerItemLink\",\n\t\"GetContainerItemPurchaseInfo\",\n\t\"GetContainerItemPurchaseItem\",\n\t\"GetContainerItemQuestInfo\",\n\t\"GetContainerNumFreeSlots\",\n\t\"GetContainerNumSlots\",\n\t\"GetCorpseMapPosition\",\n\t\"GetCorpseRecoveryDelay\",\n\t\"GetCritChance\",\n\t\"GetCritChanceFromAgility\",\n\t\"GetCurrencyListInfo\",\n\t\"GetCurrencyListSize\",\n\t\"GetCurrentArenaSeason\",\n\t\"GetCurrentBindingSet\",\n\t\"GetCurrentGuildBankTab\",\n\t\"GetCurrentKeyBoardFocus\",\n\t\"GetCurrentMapAreaID\",\n\t\"GetCurrentMapContinent\",\n\t\"GetCurrentMapDungeonLevel\",\n\t\"GetCurrentMapZone\",\n\t\"GetCurrentMultisampleFormat\",\n\t\"GetCurrentResolution\",\n\t\"GetCurrentTitle\",\n\t\"GetCursorInfo\",\n\t\"GetCursorMoney\",\n\t\"GetCursorPosition\",\n\t\"GetDailyQuestsCompleted\",\n\t\"GetDamageBonusStat\",\n\t\"GetDeathReleasePosition\",\n\t\"GetDebugStats\",\n\t\"GetDebugZoneMap\",\n\t\"GetDefaultLanguage\",\n\t\"GetDenominationsFromCopper\",\n\t\"GetDodgeBlockParryChanceFromDefense\",\n\t\"GetDodgeChance\",\n\t\"GetDungeonDifficulty\",\n\t\"GetDungeonNameWithDifficulty\",\n\t\"GetEquipmentSetIconInfo\",\n\t\"GetEquipmentSetInfo\",\n\t\"GetEquipmentSetInfoByName\",\n\t\"GetEquipmentSetItemIDs\",\n\t\"GetEquipmentSetLocations\",\n\t\"GetEventCPUUsage\",\n\t\"GetExistingLocales\",\n\t\"GetExistingSocketInfo\",\n\t\"GetExistingSocketLink\",\n\t\"GetExpansionLevel\",\n\t\"GetExpertise\",\n\t\"GetExpertisePercent\",\n\t\"GetExtendedItemInfo\",\n\t\"GetFacialHairCustomization\",\n\t\"GetFactionInfo\",\n\t\"GetFactionInfoByID\",\n\t\"GetFarclip\",\n\t\"GetFirstTradeSkill\",\n\t\"GetFixedLink\",\n\t\"GetFrameCPUUsage\",\n\t\"GetFrameHandle\",\n\t\"GetFrameHandleFrame\",\n\t\"GetFramerate\",\n\t\"GetFramesRegisteredForEvent\",\n\t\"GetFriendInfo\",\n\t\"GetFullRaidList\",\n\t\"GetFunctionCPUUsage\",\n\t\"GetGMStatus\",\n\t\"GetGMTicket\",\n\t\"GetGMTicketCategories\",\n\t\"GetGameTime\",\n\t\"GetGamma\",\n\t\"GetGlyphLink\",\n\t\"GetGlyphSocketInfo\",\n\t\"GetGossipActiveQuests\",\n\t\"GetGossipAvailableQuests\",\n\t\"GetGossipOptions\",\n\t\"GetGossipText\",\n\t\"GetGreetingText\",\n\t\"GetGroupPreviewTalentPointsSpent\",\n\t\"GetGuildBankItemInfo\",\n\t\"GetGuildBankItemLink\",\n\t\"GetGuildBankMoney\",\n\t\"GetGuildBankMoneyTransaction\",\n\t\"GetGuildBankTabCost\",\n\t\"GetGuildBankTabInfo\",\n\t\"GetGuildBankTabPermissions\",\n\t\"GetGuildBankText\",\n\t\"GetGuildBankTransaction\",\n\t\"GetGuildBankWithdrawLimit\",\n\t\"GetGuildBankWithdrawMoney\",\n\t\"GetGuildCharterCost\",\n\t\"GetGuildEventInfo\",\n\t\"GetGuildInfo\",\n\t\"GetGuildInfoText\",\n\t\"GetGuildRosterInfo\",\n\t\"GetGuildRosterLastOnline\",\n\t\"GetGuildRosterMOTD\",\n\t\"GetGuildRosterSelection\",\n\t\"GetGuildRosterShowOffline\",\n\t\"GetGuildTabardFileNames\",\n\t\"GetHairCustomization\",\n\t\"GetHolidayBGHonorCurrencyBonuses\",\n\t\"GetHonorCurrency\",\n\t\"GetIgnoreName\",\n\t\"GetInboxHeaderInfo\",\n\t\"GetInboxInvoiceInfo\",\n\t\"GetInboxItem\",\n\t\"GetInboxItemLink\",\n\t\"GetInboxNumItems\",\n\t\"GetInboxText\",\n\t\"GetInspectArenaTeamData\",\n\t\"GetInspectHonorData\",\n\t\"GetInstanceBootTimeRemaining\",\n\t\"GetInstanceDifficulty\",\n\t\"GetInstanceInfo\",\n\t\"GetInstanceLockTimeRemaining\",\n\t\"GetInstanceLockTimeRemainingEncounter\",\n\t\"GetInventoryAlertStatus\",\n\t\"GetInventoryItemBroken\",\n\t\"GetInventoryItemCooldown\",\n\t\"GetInventoryItemCount\",\n\t\"GetInventoryItemDurability\",\n\t\"GetInventoryItemGems\",\n\t\"GetInventoryItemID\",\n\t\"GetInventoryItemLink\",\n\t\"GetInventoryItemQuality\",\n\t\"GetInventoryItemTexture\",\n\t\"GetInventoryItemsForSlot\",\n\t\"GetInventorySlotInfo\",\n\t\"GetItemCooldown\",\n\t\"GetItemCount\",\n\t\"GetItemFamily\",\n\t\"GetItemGem\",\n\t\"GetItemIcon\",\n\t\"GetItemInfo\",\n\t\"GetItemQualityColor\",\n\t\"GetItemSpell\",\n\t\"GetItemStatDelta\",\n\t\"GetItemStats\",\n\t\"GetItemUniqueness\",\n\t\"GetKeyRingSize\",\n\t\"GetKnownSlotFromHighestRankSlot\",\n\t\"GetLFDChoiceCollapseState\",\n\t\"GetLFDChoiceEnabledState\",\n\t\"GetLFDChoiceInfo\",\n\t\"GetLFDChoiceLockedState\",\n\t\"GetLFDChoiceOrder\",\n\t\"GetLFDLockInfo\",\n\t\"GetLFDLockPlayerCount\",\n\t\"GetLFGBootProposal\",\n\t\"GetLFGCompletionReward\",\n\t\"GetLFGCompletionRewardItem\",\n\t\"GetLFGDeserterExpiration\",\n\t\"GetLFGDungeonInfo\",\n\t\"GetLFGDungeonRewardInfo\",\n\t\"GetLFGDungeonRewardLink\",\n\t\"GetLFGDungeonRewards\",\n\t\"GetLFGInfoLocal\",\n\t\"GetLFGInfoServer\",\n\t\"GetLFGMode\",\n\t\"GetLFGProposal\",\n\t\"GetLFGProposalEncounter\",\n\t\"GetLFGProposalMember\",\n\t\"GetLFGQueueStats\",\n\t\"GetLFGQueuedList\",\n\t\"GetLFGRandomCooldownExpiration\",\n\t\"GetLFGRandomDungeonInfo\",\n\t\"GetLFGRoleUpdate\",\n\t\"GetLFGRoleUpdateMember\",\n\t\"GetLFGRoleUpdateSlot\",\n\t\"GetLFGRoles\",\n\t\"GetLFGTypes\",\n\t\"GetLFRChoiceOrder\",\n\t\"GetLanguageByIndex\",\n\t\"GetLastQueueStatusIndex\",\n\t\"GetLatestCompletedAchievements\",\n\t\"GetLatestCompletedComparisonAchievements\",\n\t\"GetLatestThreeSenders\",\n\t\"GetLatestUpdatedComparisonStats\",\n\t\"GetLatestUpdatedStats\",\n\t\"GetLocale\",\n\t\"GetLootMethod\",\n\t\"GetLootRollItemInfo\",\n\t\"GetLootRollItemLink\",\n\t\"GetLootRollTimeLeft\",\n\t\"GetLootSlotInfo\",\n\t\"GetLootSlotLink\",\n\t\"GetLootThreshold\",\n\t\"GetMacroBody\",\n\t\"GetMacroIconInfo\",\n\t\"GetMacroIndexByName\",\n\t\"GetMacroInfo\",\n\t\"GetMacroItem\",\n\t\"GetMacroItemIconInfo\",\n\t\"GetMacroSpell\",\n\t\"GetManaRegen\",\n\t\"GetManagedEnvironment\",\n\t\"GetMapContinents\",\n\t\"GetMapDebugObjectInfo\",\n\t\"GetMapInfo\",\n\t\"GetMapLandmarkInfo\",\n\t\"GetMapOverlayInfo\",\n\t\"GetMapZones\",\n\t\"GetMasterLootCandidate\",\n\t\"GetMaterialTextColors\",\n\t\"GetMaxArenaCurrency\",\n\t\"GetMaxCombatRatingBonus\",\n\t\"GetMaxDailyQuests\",\n\t\"GetMaxUIPanelsWidth\",\n\t\"GetMerchantItemCostInfo\",\n\t\"GetMerchantItemCostItem\",\n\t\"GetMerchantItemInfo\",\n\t\"GetMerchantItemLink\",\n\t\"GetMerchantItemMaxStack\",\n\t\"GetMerchantNumItems\",\n\t\"GetMessageTypeColor\",\n\t\"GetMessageTypeState\",\n\t\"GetMinigameState\",\n\t\"GetMinigameType\",\n\t\"GetMinimapZoneText\",\n\t\"GetMirrorTimerInfo\",\n\t\"GetMirrorTimerProgress\",\n\t\"GetModifiedClick\",\n\t\"GetModifiedClickAction\",\n\t\"GetMoney\",\n\t\"GetMoneyString\",\n\t\"GetMouseButtonClicked\",\n\t\"GetMouseButtonName\",\n\t\"GetMouseFocus\",\n\t\"GetMovieResolution\",\n\t\"GetMultiCastBarOffset\",\n\t\"GetMultiCastTotemSpells\",\n\t\"GetMultisampleFormats\",\n\t\"GetMuteName\",\n\t\"GetMuteStatus\",\n\t\"GetNetStats\",\n\t\"GetNewSocketInfo\",\n\t\"GetNewSocketLink\",\n\t\"GetNextAchievement\",\n\t\"GetNextCompleatedTutorial\",\n\t\"GetNextStableSlotCost\",\n\t\"GetNumActiveQuests\",\n\t\"GetNumAddOns\",\n\t\"GetNumArenaOpponents\",\n\t\"GetNumArenaTeamMembers\",\n\t\"GetNumAuctionItems\",\n\t\"GetNumAvailableQuests\",\n\t\"GetNumBankSlots\",\n\t\"GetNumBattlefieldFlagPositions\",\n\t\"GetNumBattlefieldPositions\",\n\t\"GetNumBattlefieldScores\",\n\t\"GetNumBattlefieldStats\",\n\t\"GetNumBattlefieldVehicles\",\n\t\"GetNumBattlefields\",\n\t\"GetNumBattlegroundTypes\",\n\t\"GetNumBindings\",\n\t\"GetNumBuybackItems\",\n\t\"GetNumChannelMembers\",\n\t\"GetNumCompanions\",\n\t\"GetNumComparisonCompletedAchievements\",\n\t\"GetNumCompletedAchievements\",\n\t\"GetNumDeclensionSets\",\n\t\"GetNumDisplayChannels\",\n\t\"GetNumDungeonMapLevels\",\n\t\"GetNumEquipmentSets\",\n\t\"GetNumFactions\",\n\t\"GetNumFrames\",\n\t\"GetNumFriends\",\n\t\"GetNumGlyphSockets\",\n\t\"GetNumGossipActiveQuests\",\n\t\"GetNumGossipAvailableQuests\",\n\t\"GetNumGossipOptions\",\n\t\"GetNumGuildBankMoneyTransactions\",\n\t\"GetNumGuildBankTabs\",\n\t\"GetNumGuildBankTransactions\",\n\t\"GetNumGuildEvents\",\n\t\"GetNumGuildMembers\",\n\t\"GetNumIgnores\",\n\t\"GetNumLanguages\",\n\t\"GetNumLootItems\",\n\t\"GetNumMacroIcons\",\n\t\"GetNumMacroItemIcons\",\n\t\"GetNumMacros\",\n\t\"GetNumMapDebugObjects\",\n\t\"GetNumMapLandmarks\",\n\t\"GetNumMapOverlays\",\n\t\"GetNumModifiedClickActions\",\n\t\"GetNumMutes\",\n\t\"GetNumPackages\",\n\t\"GetNumPartyMembers\",\n\t\"GetNumPetitionItems\",\n\t\"GetNumPetitionNames\",\n\t\"GetNumQuestChoices\",\n\t\"GetNumQuestItemDrops\",\n\t\"GetNumQuestItems\",\n\t\"GetNumQuestLeaderBoards\",\n\t\"GetNumQuestLogChoices\",\n\t\"GetNumQuestLogEntries\",\n\t\"GetNumQuestLogRewardFactions\",\n\t\"GetNumQuestLogRewards\",\n\t\"GetNumQuestRewards\",\n\t\"GetNumQuestWatches\",\n\t\"GetNumRaidMembers\",\n\t\"GetNumRandomDungeons\",\n\t\"GetNumRoutes\",\n\t\"GetNumSavedInstances\",\n\t\"GetNumShapeshiftForms\",\n\t\"GetNumSkillLines\",\n\t\"GetNumSockets\",\n\t\"GetNumSpellTabs\",\n\t\"GetNumStablePets\",\n\t\"GetNumStableSlots\",\n\t\"GetNumStationeries\",\n\t\"GetNumTalentGroups\",\n\t\"GetNumTalentTabs\",\n\t\"GetNumTalents\",\n\t\"GetNumTitles\",\n\t\"GetNumTrackedAchievements\",\n\t\"GetNumTrackingTypes\",\n\t\"GetNumTradeSkills\",\n\t\"GetNumTrainerServices\",\n\t\"GetNumVoiceSessionMembersBySessionID\",\n\t\"GetNumVoiceSessions\",\n\t\"GetNumWatchedTokens\",\n\t\"GetNumWhoResults\",\n\t\"GetNumWorldStateUI\",\n\t\"GetObjectiveText\",\n\t\"GetOptOutOfLoot\",\n\t\"GetOwnerAuctionItems\",\n\t\"GetPVPDesired\",\n\t\"GetPVPLifetimeStats\",\n\t\"GetPVPRankInfo\",\n\t\"GetPVPRankProgress\",\n\t\"GetPVPSessionStats\",\n\t\"GetPVPTimer\",\n\t\"GetPVPYesterdayStats\",\n\t\"GetPackageInfo\",\n\t\"GetParryChance\",\n\t\"GetPartyAssignment\",\n\t\"GetPartyLFGBackfillInfo\",\n\t\"GetPartyLeaderIndex\",\n\t\"GetPartyMember\",\n\t\"GetPetActionCooldown\",\n\t\"GetPetActionInfo\",\n\t\"GetPetActionSlotUsable\",\n\t\"GetPetActionsUsable\",\n\t\"GetPetExperience\",\n\t\"GetPetFoodTypes\",\n\t\"GetPetHappiness\",\n\t\"GetPetIcon\",\n\t\"GetPetSpellBonusDamage\",\n\t\"GetPetTalentTree\",\n\t\"GetPetTimeRemaining\",\n\t\"GetPetitionInfo\",\n\t\"GetPetitionItemInfo\",\n\t\"GetPetitionNameInfo\",\n\t\"GetPlayerFacing\",\n\t\"GetPlayerInfoByGUID\",\n\t\"GetPlayerMapPosition\",\n\t\"GetPlayerTradeMoney\",\n\t\"GetPossessInfo\",\n\t\"GetPowerRegen\",\n\t\"GetPrevCompleatedTutorial\",\n\t\"GetPreviewTalentPointsSpent\",\n\t\"GetPreviousAchievement\",\n\t\"GetPreviousArenaSeason\",\n\t\"GetProgressText\",\n\t\"GetQuestBackgroundMaterial\",\n\t\"GetQuestDifficultyColor\",\n\t\"GetQuestGreenRange\",\n\t\"GetQuestIndexForTimer\",\n\t\"GetQuestIndexForWatch\",\n\t\"GetQuestItemInfo\",\n\t\"GetQuestItemLink\",\n\t\"GetQuestLink\",\n\t\"GetQuestLogChoiceInfo\",\n\t\"GetQuestLogCompletionText\",\n\t\"GetQuestLogGroupNum\",\n\t\"GetQuestLogItemDrop\",\n\t\"GetQuestLogItemLink\",\n\t\"GetQuestLogLeaderBoard\",\n\t\"GetQuestLogPushable\",\n\t\"GetQuestLogQuestText\",\n\t\"GetQuestLogRequiredMoney\",\n\t\"GetQuestLogRewardArenaPoints\",\n\t\"GetQuestLogRewardFactionInfo\",\n\t\"GetQuestLogRewardHonor\",\n\t\"GetQuestLogRewardInfo\",\n\t\"GetQuestLogRewardMoney\",\n\t\"GetQuestLogRewardSpell\",\n\t\"GetQuestLogRewardTalents\",\n\t\"GetQuestLogRewardTitle\",\n\t\"GetQuestLogRewardXP\",\n\t\"GetQuestLogSelection\",\n\t\"GetQuestLogSpecialItemCooldown\",\n\t\"GetQuestLogSpecialItemInfo\",\n\t\"GetQuestLogSpellLink\",\n\t\"GetQuestLogTimeLeft\",\n\t\"GetQuestLogTitle\",\n\t\"GetQuestMoneyToGet\",\n\t\"GetQuestPOILeaderBoard\",\n\t\"GetQuestResetTime\",\n\t\"GetQuestReward\",\n\t\"GetQuestSortIndex\",\n\t\"GetQuestSpellLink\",\n\t\"GetQuestText\",\n\t\"GetQuestTimers\",\n\t\"GetQuestWatchIndex\",\n\t\"GetQuestWorldMapAreaID\",\n\t\"GetQuestsCompleted\",\n\t\"GetRaidDifficulty\",\n\t\"GetRaidRosterInfo\",\n\t\"GetRaidRosterSelection\",\n\t\"GetRaidTargetIndex\",\n\t\"GetRandomArgument\",\n\t\"GetRandomBGHonorCurrencyBonuses\",\n\t\"GetRandomDungeonBestChoice\",\n\t\"GetRangedCritChance\",\n\t\"GetReadonlyRestrictedTable\",\n\t\"GetReadyCheckStatus\",\n\t\"GetReadyCheckTimeLeft\",\n\t\"GetRealNumPartyMembers\",\n\t\"GetRealNumRaidMembers\",\n\t\"GetRealZoneText\",\n\t\"GetRealmName\",\n\t\"GetRefreshRates\",\n\t\"GetReleaseTimeRemaining\",\n\t\"GetRepairAllCost\",\n\t\"GetResSicknessDuration\",\n\t\"GetRestState\",\n\t\"GetRewardArenaPoints\",\n\t\"GetRewardHonor\",\n\t\"GetRewardMoney\",\n\t\"GetRewardSpell\",\n\t\"GetRewardTalents\",\n\t\"GetRewardText\",\n\t\"GetRewardTitle\",\n\t\"GetRewardXP\",\n\t\"GetRuneCooldown\",\n\t\"GetRuneCount\",\n\t\"GetRuneType\",\n\t\"GetRunningMacro\",\n\t\"GetRunningMacroButton\",\n\t\"GetSavedInstanceInfo\",\n\t\"GetScreenHeight\",\n\t\"GetScreenHeightScale\",\n\t\"GetScreenResolutions\",\n\t\"GetScreenWidth\",\n\t\"GetScreenWidthScale\",\n\t\"GetScriptCPUUsage\",\n\t\"GetSelectedAuctionItem\",\n\t\"GetSelectedBattlefield\",\n\t\"GetSelectedDisplayChannel\",\n\t\"GetSelectedFaction\",\n\t\"GetSelectedFriend\",\n\t\"GetSelectedIgnore\",\n\t\"GetSelectedMute\",\n\t\"GetSelectedSkill\",\n\t\"GetSelectedStablePet\",\n\t\"GetSelectedStationeryTexture\",\n\t\"GetSendMailCOD\",\n\t\"GetSendMailItem\",\n\t\"GetSendMailItemLink\",\n\t\"GetSendMailMoney\",\n\t\"GetSendMailPrice\",\n\t\"GetShapeshiftForm\",\n\t\"GetShapeshiftFormCooldown\",\n\t\"GetShapeshiftFormInfo\",\n\t\"GetShieldBlock\",\n\t\"GetSkillLineInfo\",\n\t\"GetSocketItemBoundTradeable\",\n\t\"GetSocketItemInfo\",\n\t\"GetSocketItemRefundable\",\n\t\"GetSocketTypes\",\n\t\"GetSpellAutocast\",\n\t\"GetSpellBonusDamage\",\n\t\"GetSpellBonusHealing\",\n\t\"GetSpellCooldown\",\n\t\"GetSpellCount\",\n\t\"GetSpellCritChance\",\n\t\"GetSpellCritChanceFromIntellect\",\n\t\"GetSpellInfo\",\n\t\"GetSpellLink\",\n\t\"GetSpellName\",\n\t\"GetSpellNameColor\",\n\t\"GetSpellPenetration\",\n\t\"GetSpellTabInfo\",\n\t\"GetSpellTexture\",\n\t\"GetStablePetFoodTypes\",\n\t\"GetStablePetInfo\",\n\t\"GetStationeryInfo\",\n\t\"GetStatistic\",\n\t\"GetStatisticsCategoryList\",\n\t\"GetSubZoneText\",\n\t\"GetSuggestedGroupNum\",\n\t\"GetSummonConfirmAreaName\",\n\t\"GetSummonConfirmSummoner\",\n\t\"GetSummonConfirmTimeLeft\",\n\t\"GetSummonFriendCooldown\",\n\t\"GetTabardCreationCost\",\n\t\"GetTabardInfo\",\n\t\"GetTableColor\",\n\t\"GetTalentInfo\",\n\t\"GetTalentLink\",\n\t\"GetTalentPrereqs\",\n\t\"GetTalentTabInfo\",\n\t\"GetTargetTradeMoney\",\n\t\"GetTaxiBenchmarkMode\",\n\t\"GetTerrainMip\",\n\t\"GetTexCoordsByGrid\",\n\t\"GetTexCoordsForRole\",\n\t\"GetTexLodBias\",\n\t\"GetText\",\n\t\"GetThreatStatusColor\",\n\t\"GetTime\",\n\t\"GetTimeToWellRested\",\n\t\"GetTimerTextColor\",\n\t\"GetTitleName\",\n\t\"GetTitleText\",\n\t\"GetTotalAchievementPoints\",\n\t\"GetTotemInfo\",\n\t\"GetTotemTimeLeft\",\n\t\"GetTrackedAchievements\",\n\t\"GetTrackingInfo\",\n\t\"GetTrackingTexture\",\n\t\"GetTradePlayerItemInfo\",\n\t\"GetTradePlayerItemLink\",\n\t\"GetTradeSkillCooldown\",\n\t\"GetTradeSkillDescription\",\n\t\"GetTradeSkillIcon\",\n\t\"GetTradeSkillInfo\",\n\t\"GetTradeSkillInvSlotFilter\",\n\t\"GetTradeSkillInvSlots\",\n\t\"GetTradeSkillItemLevelFilter\",\n\t\"GetTradeSkillItemLink\",\n\t\"GetTradeSkillItemNameFilter\",\n\t\"GetTradeSkillLine\",\n\t\"GetTradeSkillListLink\",\n\t\"GetTradeSkillNumMade\",\n\t\"GetTradeSkillNumReagents\",\n\t\"GetTradeSkillReagentInfo\",\n\t\"GetTradeSkillReagentItemLink\",\n\t\"GetTradeSkillRecipeLink\",\n\t\"GetTradeSkillSelectionIndex\",\n\t\"GetTradeSkillSubClassFilter\",\n\t\"GetTradeSkillSubClasses\",\n\t\"GetTradeSkillTools\",\n\t\"GetTradeTargetItemInfo\",\n\t\"GetTradeTargetItemLink\",\n\t\"GetTradeskillRepeatCount\",\n\t\"GetTrainerGreetingText\",\n\t\"GetTrainerSelectionIndex\",\n\t\"GetTrainerServiceAbilityReq\",\n\t\"GetTrainerServiceCost\",\n\t\"GetTrainerServiceDescription\",\n\t\"GetTrainerServiceIcon\",\n\t\"GetTrainerServiceInfo\",\n\t\"GetTrainerServiceItemLink\",\n\t\"GetTrainerServiceLevelReq\",\n\t\"GetTrainerServiceNumAbilityReq\",\n\t\"GetTrainerServiceSkillLine\",\n\t\"GetTrainerServiceSkillReq\",\n\t\"GetTrainerServiceStepIncrease\",\n\t\"GetTrainerServiceStepReq\",\n\t\"GetTrainerServiceTypeFilter\",\n\t\"GetTrainerSkillLineFilter\",\n\t\"GetTrainerSkillLines\",\n\t\"GetUIPanel\",\n\t\"GetUIPanelWidth\",\n\t\"GetUnitHealthModifier\",\n\t\"GetUnitHealthRegenRateFromSpirit\",\n\t\"GetUnitManaRegenRateFromSpirit\",\n\t\"GetUnitMaxHealthModifier\",\n\t\"GetUnitName\",\n\t\"GetUnitPitch\",\n\t\"GetUnitPowerModifier\",\n\t\"GetUnitSpeed\",\n\t\"GetUnspentTalentPoints\",\n\t\"GetVehicleUIIndicator\",\n\t\"GetVehicleUIIndicatorSeat\",\n\t\"GetVideoCaps\",\n\t\"GetVoiceCurrentSessionID\",\n\t\"GetVoiceSessionInfo\",\n\t\"GetVoiceSessionMemberInfoBySessionID\",\n\t\"GetVoiceStatus\",\n\t\"GetWatchedFactionInfo\",\n\t\"GetWaterDetail\",\n\t\"GetWeaponEnchantInfo\",\n\t\"GetWhoInfo\",\n\t\"GetWintergraspWaitTime\",\n\t\"GetWorldPVPQueueStatus\",\n\t\"GetWorldStateUIInfo\",\n\t\"GetXPExhaustion\",\n\t\"GetZonePVPInfo\",\n\t\"GetZoneText\",\n\t\"GiveMasterLoot\",\n\t\"GlyphFrame_LoadUI\",\n\t\"GlyphMatchesSocket\",\n\t\"GossipFrameActiveQuestsUpdate\",\n\t\"GossipFrameAvailableQuestsUpdate\",\n\t\"GossipFrameOptionsUpdate\",\n\t\"GossipFrameUpdate\",\n\t\"GossipFrame_OnEvent\",\n\t\"GossipFrame_OnLoad\",\n\t\"GossipResize\",\n\t\"GossipTitleButton_OnClick\",\n\t\"GrantLevel\",\n\t\"GroupLootDropDown_GiveLoot\",\n\t\"GroupLootDropDown_Initialize\",\n\t\"GroupLootDropDown_OnLoad\",\n\t\"GroupLootFrame_DisableLootButton\",\n\t\"GroupLootFrame_EnableLootButton\",\n\t\"GroupLootFrame_OnEvent\",\n\t\"GroupLootFrame_OnHide\",\n\t\"GroupLootFrame_OnShow\",\n\t\"GroupLootFrame_OnUpdate\",\n\t\"GroupLootFrame_OpenNewFrame\",\n\t\"GuildBankFrame_LoadUI\",\n\t\"GuildBankTabPermissionsTab_OnClick\",\n\t\"GuildControlAddRank\",\n\t\"GuildControlCheckboxUpdate\",\n\t\"GuildControlDelRank\",\n\t\"GuildControlGetNumRanks\",\n\t\"GuildControlGetRankFlags\",\n\t\"GuildControlGetRankName\",\n\t\"GuildControlPopupAcceptButton_OnClick\",\n\t\"GuildControlPopupFrameAddRankButton_OnUpdate\",\n\t\"GuildControlPopupFrameDropDownButton_OnClick\",\n\t\"GuildControlPopupFrameDropDown_Initialize\",\n\t\"GuildControlPopupFrameDropDown_OnLoad\",\n\t\"GuildControlPopupFrameRemoveRankButton_OnClick\",\n\t\"GuildControlPopupFrameRemoveRankButton_OnUpdate\",\n\t\"GuildControlPopupFrame_Initialize\",\n\t\"GuildControlPopupFrame_OnEvent\",\n\t\"GuildControlPopupFrame_OnHide\",\n\t\"GuildControlPopupFrame_OnLoad\",\n\t\"GuildControlPopupFrame_OnShow\",\n\t\"GuildControlPopup_UpdateDepositCheckBox\",\n\t\"GuildControlPopupframe_Update\",\n\t\"GuildControlSaveRank\",\n\t\"GuildControlSetRank\",\n\t\"GuildControlSetRankFlag\",\n\t\"GuildDemote\",\n\t\"GuildDisband\",\n\t\"GuildEventLog_Update\",\n\t\"GuildFrameControlButton_OnUpdate\",\n\t\"GuildFrameGuildListToggleButton_OnClick\",\n\t\"GuildFramePopup_HideAll\",\n\t\"GuildFramePopup_Show\",\n\t\"GuildFrame_GetLastOnline\",\n\t\"GuildInfo\",\n\t\"GuildInvite\",\n\t\"GuildLeave\",\n\t\"GuildPromote\",\n\t\"GuildRegistrar_OnShow\",\n\t\"GuildRegistrar_ShowPurchaseFrame\",\n\t\"GuildRoster\",\n\t\"GuildRosterSetOfficerNote\",\n\t\"GuildRosterSetPublicNote\",\n\t\"GuildSetLeader\",\n\t\"GuildSetMOTD\",\n\t\"GuildStatus_Update\",\n\t\"GuildUninvite\",\n\t\"HandleModifiedItemClick\",\n\t\"HasAction\",\n\t\"HasCompletedAnyAchievement\",\n\t\"HasDebugZoneMap\",\n\t\"HasFilledPetition\",\n\t\"HasFullControl\",\n\t\"HasInspectHonorData\",\n\t\"HasKey\",\n\t\"HasLFGRestrictions\",\n\t\"HasMessageType\",\n\t\"HasMessageTypeGroup\",\n\t\"HasMultiCastActionBar\",\n\t\"HasMultiCastActionPage\",\n\t\"HasNewMail\",\n\t\"HasPetSpells\",\n\t\"HasPetUI\",\n\t\"HasSoulstone\",\n\t\"HasWandEquipped\",\n\t\"HealthBar_OnValueChanged\",\n\t\"HearthAndResurrectFromArea\",\n\t\"HelpFrameGMTalk_OnShow\",\n\t\"HelpFrameOpenTicketCancel_OnClick\",\n\t\"HelpFrameOpenTicketSubmit_OnClick\",\n\t\"HelpFrameReportIssue_OnShow\",\n\t\"HelpFrameStuck_OnShow\",\n\t\"HelpFrameViewResponseButton_OnLoad\",\n\t\"HelpFrameViewResponseIssueResolved_OnClick\",\n\t\"HelpFrameViewResponseMoreHelp_OnClick\",\n\t\"HelpFrame_HaveGMResponse\",\n\t\"HelpFrame_HaveGMTicket\",\n\t\"HelpFrame_IsGMTicketQueueActive\",\n\t\"HelpFrame_OnEvent\",\n\t\"HelpFrame_OnHide\",\n\t\"HelpFrame_OnLoad\",\n\t\"HelpFrame_OnShow\",\n\t\"HelpFrame_PopAllFrames\",\n\t\"HelpFrame_PopFrame\",\n\t\"HelpFrame_ShowFrame\",\n\t\"HelpReportLag\",\n\t\"HideBonusActionBar\",\n\t\"HideDropDownMenu\",\n\t\"HideMultiCastActionBar\",\n\t\"HideParentPanel\",\n\t\"HidePartyFrame\",\n\t\"HidePetActionBar\",\n\t\"HideRepairCursor\",\n\t\"HideTextStatusBarText\",\n\t\"HideUIPanel\",\n\t\"HideWatchedReputationBarText\",\n\t\"HonorFrame_OnEvent\",\n\t\"HonorFrame_OnLoad\",\n\t\"HonorFrame_Update\",\n\t\"HybridScrollFrameScrollButton_OnClick\",\n\t\"HybridScrollFrameScrollButton_OnUpdate\",\n\t\"HybridScrollFrameScrollChild_OnLoad\",\n\t\"HybridScrollFrame_CollapseButton\",\n\t\"HybridScrollFrame_CreateButtons\",\n\t\"HybridScrollFrame_ExpandButton\",\n\t\"HybridScrollFrame_GetOffset\",\n\t\"HybridScrollFrame_OnLoad\",\n\t\"HybridScrollFrame_OnMouseWheel\",\n\t\"HybridScrollFrame_OnValueChanged\",\n\t\"HybridScrollFrame_SetOffset\",\n\t\"HybridScrollFrame_Update\",\n\t\"HybridScrollFrame_UpdateButtonStates\",\n\t\"IgnoreList_SetHeader\",\n\t\"IgnoreList_Update\",\n\t\"InCinematic\",\n\t\"InCombatLockdown\",\n\t\"InGuildCheck\",\n\t\"InRepairMode\",\n\t\"InboxFrameItem_OnEnter\",\n\t\"InboxFrame_OnClick\",\n\t\"InboxFrame_OnModifiedClick\",\n\t\"InboxFrame_Update\",\n\t\"InboxGetMoreMail\",\n\t\"InboxItemCanDelete\",\n\t\"InboxNextPage\",\n\t\"InboxPrevPage\",\n\t\"InitWorldMapPing\",\n\t\"InitiateTrade\",\n\t\"InspectAchievements\",\n\t\"InspectFrame_LoadUI\",\n\t\"InspectUnit\",\n\t\"InstanceLock_OnEnter\",\n\t\"InteractUnit\",\n\t\"InterfaceAddOnsList_Update\",\n\t\"InterfaceCategoryList_Update\",\n\t\"InterfaceOptionsActionBarsPanel_OnEvent\",\n\t\"InterfaceOptionsActionBarsPanel_OnLoad\",\n\t\"InterfaceOptionsBattlenetPanel_OnLoad\",\n\t\"InterfaceOptionsBuffsPanel_OnEvent\",\n\t\"InterfaceOptionsBuffsPanel_OnLoad\",\n\t\"InterfaceOptionsCameraPanelStyleDropDown_Initialize\",\n\t\"InterfaceOptionsCameraPanelStyleDropDown_OnClick\",\n\t\"InterfaceOptionsCameraPanelStyleDropDown_OnEvent\",\n\t\"InterfaceOptionsCameraPanel_OnEvent\",\n\t\"InterfaceOptionsCameraPanel_OnLoad\",\n\t\"InterfaceOptionsCombatPanelFocusCastKeyDropDown_Initialize\",\n\t\"InterfaceOptionsCombatPanelFocusCastKeyDropDown_OnClick\",\n\t\"InterfaceOptionsCombatPanelFocusCastKeyDropDown_OnEvent\",\n\t\"InterfaceOptionsCombatPanelSelfCastKeyDropDown_Initialize\",\n\t\"InterfaceOptionsCombatPanelSelfCastKeyDropDown_OnClick\",\n\t\"InterfaceOptionsCombatPanelSelfCastKeyDropDown_OnEvent\",\n\t\"InterfaceOptionsCombatPanelTOTDropDown_Initialize\",\n\t\"InterfaceOptionsCombatPanelTOTDropDown_OnClick\",\n\t\"InterfaceOptionsCombatPanelTOTDropDown_OnEvent\",\n\t\"InterfaceOptionsCombatTextPanelFCTDropDown_Initialize\",\n\t\"InterfaceOptionsCombatTextPanelFCTDropDown_OnClick\",\n\t\"InterfaceOptionsCombatTextPanelFCTDropDown_OnEvent\",\n\t\"InterfaceOptionsCombatTextPanel_OnEvent\",\n\t\"InterfaceOptionsCombatTextPanel_OnLoad\",\n\t\"InterfaceOptionsControlsPanelAutoLootKeyDropDown_Initialize\",\n\t\"InterfaceOptionsControlsPanelAutoLootKeyDropDown_OnClick\",\n\t\"InterfaceOptionsControlsPanelAutoLootKeyDropDown_OnEvent\",\n\t\"InterfaceOptionsControlsPanelAutoLootKeyDropDown_Update\",\n\t\"InterfaceOptionsDisplayPanelAggroWarningDisplay_Initialize\",\n\t\"InterfaceOptionsDisplayPanelAggroWarningDisplay_OnClick\",\n\t\"InterfaceOptionsDisplayPanelAggroWarningDisplay_OnEvent\",\n\t\"InterfaceOptionsDisplayPanelPreviewTalentChanges_SetFunc\",\n\t\"InterfaceOptionsDisplayPanelShowAggroPercentage_SetFunc\",\n\t\"InterfaceOptionsDisplayPanelShowClock_SetFunc\",\n\t\"InterfaceOptionsDisplayPanelWorldPVPObjectiveDisplay_Initialize\",\n\t\"InterfaceOptionsDisplayPanelWorldPVPObjectiveDisplay_OnClick\",\n\t\"InterfaceOptionsDisplayPanelWorldPVPObjectiveDisplay_OnEvent\",\n\t\"InterfaceOptionsDisplayPanel_OnEvent\",\n\t\"InterfaceOptionsDisplayPanel_OnLoad\",\n\t\"InterfaceOptionsFrameCancel_OnClick\",\n\t\"InterfaceOptionsFrameDefaults_OnClick\",\n\t\"InterfaceOptionsFrameOkay_OnClick\",\n\t\"InterfaceOptionsFrame_InitializeUVars\",\n\t\"InterfaceOptionsFrame_LoadUVars\",\n\t\"InterfaceOptionsFrame_OnEvent\",\n\t\"InterfaceOptionsFrame_OnHide\",\n\t\"InterfaceOptionsFrame_OnLoad\",\n\t\"InterfaceOptionsFrame_OnShow\",\n\t\"InterfaceOptionsFrame_OpenToCategory\",\n\t\"InterfaceOptionsFrame_SetAllToDefaults\",\n\t\"InterfaceOptionsFrame_SetCurrentToDefaults\",\n\t\"InterfaceOptionsFrame_Show\",\n\t\"InterfaceOptionsFrame_TabOnClick\",\n\t\"InterfaceOptionsLanguagesPanelLocaleDropDown_Initialize\",\n\t\"InterfaceOptionsLanguagesPanelLocaleDropDown_InitializeHelper\",\n\t\"InterfaceOptionsLanguagesPanelLocaleDropDown_OnClick\",\n\t\"InterfaceOptionsLanguagesPanelLocaleDropDown_OnEvent\",\n\t\"InterfaceOptionsLanguagesPanel_OnLoad\",\n\t\"InterfaceOptionsListButton_OnClick\",\n\t\"InterfaceOptionsListButton_ToggleSubCategories\",\n\t\"InterfaceOptionsList_DisplayPanel\",\n\t\"InterfaceOptionsMousePanelClickMoveStyleDropDown_Initialize\",\n\t\"InterfaceOptionsMousePanelClickMoveStyleDropDown_OnClick\",\n\t\"InterfaceOptionsMousePanelClickMoveStyleDropDown_OnEvent\",\n\t\"InterfaceOptionsObjectivesPanel_OnEvent\",\n\t\"InterfaceOptionsObjectivesPanel_OnLoad\",\n\t\"InterfaceOptionsOptionsFrame_RefreshAddOns\",\n\t\"InterfaceOptionsOptionsFrame_RefreshCategories\",\n\t\"InterfaceOptionsPanel_CheckButton_OnClick\",\n\t\"InterfaceOptionsPanel_CheckButton_Update\",\n\t\"InterfaceOptionsPanel_OnLoad\",\n\t\"InterfaceOptionsSocialPanelChatMouseScroll_SetScrolling\",\n\t\"InterfaceOptionsSocialPanelChatStyle_Initialize\",\n\t\"InterfaceOptionsSocialPanelChatStyle_OnClick\",\n\t\"InterfaceOptionsSocialPanelChatStyle_OnEvent\",\n\t\"InterfaceOptionsSocialPanelChatStyle_SetChatStyle\",\n\t\"InterfaceOptionsSocialPanelConversationMode_Initialize\",\n\t\"InterfaceOptionsSocialPanelConversationMode_OnClick\",\n\t\"InterfaceOptionsSocialPanelConversationMode_OnEvent\",\n\t\"InterfaceOptionsSocialPanelProfanityFilter_SyncWithBattlenet\",\n\t\"InterfaceOptionsSocialPanelProfanityFilter_UpdateDisplay\",\n\t\"InterfaceOptionsSocialPanelTimestamps_AddTimestampFormat\",\n\t\"InterfaceOptionsSocialPanelTimestamps_Initialize\",\n\t\"InterfaceOptionsSocialPanelTimestamps_OnClick\",\n\t\"InterfaceOptionsSocialPanelTimestamps_OnEvent\",\n\t\"InterfaceOptionsSocialPanel_OnEvent\",\n\t\"InterfaceOptionsSocialPanel_OnLoad\",\n\t\"InterfaceOptions_AddCategory\",\n\t\"InterfaceOptions_UpdateMultiActionBars\",\n\t\"InviteUnit\",\n\t\"IsActionInRange\",\n\t\"IsActiveBattlefieldArena\",\n\t\"IsActiveQuestTrivial\",\n\t\"IsAddOnLoadOnDemand\",\n\t\"IsAddOnLoaded\",\n\t\"IsAlreadyInQueue\",\n\t\"IsAltKeyDown\",\n\t\"IsArenaTeamCaptain\",\n\t\"IsAtStableMaster\",\n\t\"IsAttackAction\",\n\t\"IsAttackSpell\",\n\t\"IsAuctionSortReversed\",\n\t\"IsAutoRepeatAction\",\n\t\"IsAutoRepeatSpell\",\n\t\"IsAvailableQuestTrivial\",\n\t\"IsBNLogin\",\n\t\"IsBagOpen\",\n\t\"IsBattlefieldArena\",\n\t\"IsClassColoringMessageType\",\n\t\"IsCombatLog\",\n\t\"IsConsumableAction\",\n\t\"IsConsumableItem\",\n\t\"IsConsumableSpell\",\n\t\"IsControlKeyDown\",\n\t\"IsCurrentAction\",\n\t\"IsCurrentItem\",\n\t\"IsCurrentQuestFailed\",\n\t\"IsCurrentSpell\",\n\t\"IsDebugBuild\",\n\t\"IsDesaturateSupported\",\n\t\"IsDisplayChannelModerator\",\n\t\"IsDisplayChannelOwner\",\n\t\"IsDressableItem\",\n\t\"IsEquippableItem\",\n\t\"IsEquippedAction\",\n\t\"IsEquippedItem\",\n\t\"IsEquippedItemType\",\n\t\"IsFactionInactive\",\n\t\"IsFalling\",\n\t\"IsFishingLoot\",\n\t\"IsFlyableArea\",\n\t\"IsFlying\",\n\t\"IsFrameHandle\",\n\t\"IsGuildLeader\",\n\t\"IsHarmfulItem\",\n\t\"IsHarmfulSpell\",\n\t\"IsHelpfulItem\",\n\t\"IsHelpfulSpell\",\n\t\"IsIgnored\",\n\t\"IsIgnoredOrMuted\",\n\t\"IsInArenaTeam\",\n\t\"IsInGuild\",\n\t\"IsInInstance\",\n\t\"IsInLFGDungeon\",\n\t\"IsIndoors\",\n\t\"IsInventoryItemLocked\",\n\t\"IsItemInRange\",\n\t\"IsLFGDungeonJoinable\",\n\t\"IsLeftAltKeyDown\",\n\t\"IsLeftControlKeyDown\",\n\t\"IsLeftShiftKeyDown\",\n\t\"IsLinuxClient\",\n\t\"IsListedInLFR\",\n\t\"IsListeningForMessageType\",\n\t\"IsLoggedIn\",\n\t\"IsMacClient\",\n\t\"IsMessageDoneBy\",\n\t\"IsMessageDoneTo\",\n\t\"IsModifiedClick\",\n\t\"IsModifierKeyDown\",\n\t\"IsMounted\",\n\t\"IsMouseButtonDown\",\n\t\"IsMouselooking\",\n\t\"IsMuted\",\n\t\"IsOptionFrameOpen\",\n\t\"IsOutOfBounds\",\n\t\"IsOutdoors\",\n\t\"IsPVPTimerRunning\",\n\t\"IsPartyLFG\",\n\t\"IsPartyLeader\",\n\t\"IsPassiveSpell\",\n\t\"IsPetAttackAction\",\n\t\"IsPetAttackActive\",\n\t\"IsPlayerResolutionAvailable\",\n\t\"IsPossessBarVisible\",\n\t\"IsQuestCompletable\",\n\t\"IsQuestLogSpecialItemInRange\",\n\t\"IsQuestWatched\",\n\t\"IsRaidLeader\",\n\t\"IsRaidOfficer\",\n\t\"IsRealPartyLeader\",\n\t\"IsRealRaidLeader\",\n\t\"IsReferAFriendLinked\",\n\t\"IsResting\",\n\t\"IsRightAltKeyDown\",\n\t\"IsRightControlKeyDown\",\n\t\"IsRightShiftKeyDown\",\n\t\"IsSecureCmd\",\n\t\"IsSelectedSpell\",\n\t\"IsShiftKeyDown\",\n\t\"IsSilenced\",\n\t\"IsSpellInRange\",\n\t\"IsSpellKnown\",\n\t\"IsStackableAction\",\n\t\"IsStealthed\",\n\t\"IsStereoVideoAvailable\",\n\t\"IsSubZonePVPPOI\",\n\t\"IsSwimming\",\n\t\"IsThreatWarningEnabled\",\n\t\"IsTitleKnown\",\n\t\"IsTrackedAchievement\",\n\t\"IsTradeSkillLinked\",\n\t\"IsTradeskillTrainer\",\n\t\"IsTrainerServiceSkillStep\",\n\t\"IsTutorialFlagged\",\n\t\"IsUnitOnQuest\",\n\t\"IsUsableAction\",\n\t\"IsUsableItem\",\n\t\"IsUsableSpell\",\n\t\"IsUsingVehicleControls\",\n\t\"IsVehicleAimAngleAdjustable\",\n\t\"IsVehicleAimPowerAdjustable\",\n\t\"IsVoiceChatAllowed\",\n\t\"IsVoiceChatAllowedByServer\",\n\t\"IsVoiceChatEnabled\",\n\t\"IsWindowsClient\",\n\t\"IsXPUserDisabled\",\n\t\"IsZoomOutAvailable\",\n\t\"ItemAnim_OnAnimFinished\",\n\t\"ItemAnim_OnEvent\",\n\t\"ItemAnim_OnLoad\",\n\t\"ItemHasRange\",\n\t\"ItemSocketingFrame_LoadUI\",\n\t\"ItemTextFrame_OnEvent\",\n\t\"ItemTextFrame_OnLoad\",\n\t\"ItemTextFrame_OnUpdate\",\n\t\"ItemTextGetCreator\",\n\t\"ItemTextGetItem\",\n\t\"ItemTextGetMaterial\",\n\t\"ItemTextGetPage\",\n\t\"ItemTextGetText\",\n\t\"ItemTextHasNextPage\",\n\t\"ItemTextNextPage\",\n\t\"ItemTextPrevPage\",\n\t\"JoinBattlefield\",\n\t\"JoinChannelByName\",\n\t\"JoinLFG\",\n\t\"JoinPermanentChannel\",\n\t\"JoinTemporaryChannel\",\n\t\"JumpOrAscendStart\",\n\t\"KBArticle_BeginLoading\",\n\t\"KBArticle_GetData\",\n\t\"KBArticle_IsLoaded\",\n\t\"KBQuery_BeginLoading\",\n\t\"KBQuery_GetArticleHeaderCount\",\n\t\"KBQuery_GetArticleHeaderData\",\n\t\"KBQuery_GetTotalArticleCount\",\n\t\"KBQuery_IsLoaded\",\n\t\"KBSetup_BeginLoading\",\n\t\"KBSetup_GetArticleHeaderCount\",\n\t\"KBSetup_GetArticleHeaderData\",\n\t\"KBSetup_GetCategoryCount\",\n\t\"KBSetup_GetCategoryData\",\n\t\"KBSetup_GetLanguageCount\",\n\t\"KBSetup_GetLanguageData\",\n\t\"KBSetup_GetSubCategoryCount\",\n\t\"KBSetup_GetSubCategoryData\",\n\t\"KBSetup_GetTotalArticleCount\",\n\t\"KBSetup_IsLoaded\",\n\t\"KBSystem_GetMOTD\",\n\t\"KBSystem_GetServerNotice\",\n\t\"KBSystem_GetServerStatus\",\n\t\"KeyBindingFrame_LoadUI\",\n\t\"KeyRingButtonIDToInvSlotID\",\n\t\"KnowledgeBaseArticleListFrame_HideArticleList\",\n\t\"KnowledgeBaseArticleListFrame_NextPage\",\n\t\"KnowledgeBaseArticleListFrame_PopulateArticleList\",\n\t\"KnowledgeBaseArticleListFrame_PreviousPage\",\n\t\"KnowledgeBaseArticleListItem_OnClick\",\n\t\"KnowledgeBaseArticleListItem_OnEnter\",\n\t\"KnowledgeBaseArticleListItem_OnLeave\",\n\t\"KnowledgeBaseArticleListItem_OnUpdate\",\n\t\"KnowledgeBaseArticleListItem_Update\",\n\t\"KnowledgeBaseErrorFrame_SetErrorMessage\",\n\t\"KnowledgeBaseFrameCategoryButton_OnClick\",\n\t\"KnowledgeBaseFrameCategoryDropDown_AddInfo\",\n\t\"KnowledgeBaseFrameCategoryDropDown_Initialize\",\n\t\"KnowledgeBaseFrameCategoryDropDown_OnLoad\",\n\t\"KnowledgeBaseFrameSubCategoryButton_OnClick\",\n\t\"KnowledgeBaseFrameSubCategoryDropDown_AddInfo\",\n\t\"KnowledgeBaseFrameSubCategoryDropDown_Initialize\",\n\t\"KnowledgeBaseFrameSubCategoryDropDown_OnLoad\",\n\t\"KnowledgeBaseFrame_DisableButtons\",\n\t\"KnowledgeBaseFrame_EnableButtons\",\n\t\"KnowledgeBaseFrame_LoadTopIssues\",\n\t\"KnowledgeBaseFrame_OnEvent\",\n\t\"KnowledgeBaseFrame_OnLoad\",\n\t\"KnowledgeBaseFrame_OnShow\",\n\t\"KnowledgeBaseFrame_Search\",\n\t\"KnowledgeBaseFrame_ShowArticleFrame\",\n\t\"KnowledgeBaseFrame_ShowErrorFrame\",\n\t\"KnowledgeBaseFrame_ShowSearchFrame\",\n\t\"KnowledgeBaseFrame_UpdateMotd\",\n\t\"KnowledgeBaseFrame_UpdateServerMessage\",\n\t\"KnowledgeBaseMotdTextFrame_OnEnter\",\n\t\"KnowledgeBaseMotdTextFrame_OnLeave\",\n\t\"KnowledgeBaseMotdTextFrame_OnUpdate\",\n\t\"KnowledgeBaseServerMessageTextFrame_OnEnter\",\n\t\"KnowledgeBaseServerMessageTextFrame_OnLeave\",\n\t\"KnowledgeBaseServerMessageTextFrame_OnUpdate\",\n\t\"KnowledgeBaseUpdateTopPanelPositions\",\n\t\"LFDConstructDeclinedMessage\",\n\t\"LFDDungeonReadyDialogInstanceInfo_OnEnter\",\n\t\"LFDDungeonReadyDialogReward_OnEnter\",\n\t\"LFDDungeonReadyDialogReward_SetMisc\",\n\t\"LFDDungeonReadyDialogReward_SetReward\",\n\t\"LFDDungeonReadyDialog_UpdateInstanceInfo\",\n\t\"LFDDungeonReadyDialog_UpdateRewards\",\n\t\"LFDDungeonReadyPopup_OnFail\",\n\t\"LFDDungeonReadyPopup_OnUpdate\",\n\t\"LFDDungeonReadyPopup_Update\",\n\t\"LFDDungeonReadyStatus_ResetReadyStates\",\n\t\"LFDDungeonReadyStatus_UpdateIcon\",\n\t\"LFDFrameRoleCheckButton_OnClick\",\n\t\"LFDFrameRoleCheckButton_OnEnter\",\n\t\"LFDFrame_OnEvent\",\n\t\"LFDFrame_OnHide\",\n\t\"LFDFrame_OnLoad\",\n\t\"LFDFrame_OnShow\",\n\t\"LFDFrame_UpdateBackfill\",\n\t\"LFDGetNumDungeons\",\n\t\"LFDList_SetDungeonEnabled\",\n\t\"LFDList_SetHeaderCollapsed\",\n\t\"LFDList_SetHeaderEnabled\",\n\t\"LFDQueueFrameDungeonChoiceEnableButton_OnClick\",\n\t\"LFDQueueFrameDungeonListButton_OnEnter\",\n\t\"LFDQueueFrameExpandOrCollapseButton_OnClick\",\n\t\"LFDQueueFrameFindGroupButton_Update\",\n\t\"LFDQueueFrameRandomCooldownFrame_OnEvent\",\n\t\"LFDQueueFrameRandomCooldownFrame_OnLoad\",\n\t\"LFDQueueFrameRandomCooldownFrame_OnUpdate\",\n\t\"LFDQueueFrameRandomCooldownFrame_Update\",\n\t\"LFDQueueFrameRandom_UpdateFrame\",\n\t\"LFDQueueFrameSpecificListButton_SetDungeon\",\n\t\"LFDQueueFrameSpecificList_Update\",\n\t\"LFDQueueFrameTypeDropDownButton_OnClick\",\n\t\"LFDQueueFrameTypeDropDown_Initialize\",\n\t\"LFDQueueFrameTypeDropDown_SetUp\",\n\t\"LFDQueueFrame_Join\",\n\t\"LFDQueueFrame_QueueForInstanceIfEnabled\",\n\t\"LFDQueueFrame_SetRoles\",\n\t\"LFDQueueFrame_SetType\",\n\t\"LFDQueueFrame_SetTypeRandomDungeon\",\n\t\"LFDQueueFrame_SetTypeSpecificDungeon\",\n\t\"LFDQueueFrame_Update\",\n\t\"LFDQueueFrame_UpdatePortrait\",\n\t\"LFDRoleCheckPopupAccept_OnClick\",\n\t\"LFDRoleCheckPopupDecline_OnClick\",\n\t\"LFDRoleCheckPopupDescription_OnEnter\",\n\t\"LFDRoleCheckPopup_Update\",\n\t\"LFDSearchStatusPlayer_SetFound\",\n\t\"LFDSearchStatus_OnEvent\",\n\t\"LFDSearchStatus_OnUpdate\",\n\t\"LFDSearchStatus_Update\",\n\t\"LFDSearchStatus_UpdateRoles\",\n\t\"LFD_CURRENT_FILTER\",\n\t\"LFD_IsEmpowered\",\n\t\"LFGDebug\",\n\t\"LFGDungeonList_Setup\",\n\t\"LFGEventFrame_OnEvent\",\n\t\"LFGEventFrame_OnLoad\",\n\t\"LFGGetDungeonInfoByID\",\n\t\"LFGIsIDHeader\",\n\t\"LFGListFilterChoices\",\n\t\"LFGListRemoveCollapsedChildren\",\n\t\"LFGListRemoveHeadersWithoutChildren\",\n\t\"LFGListUpdateHeaderEnabledAndLockedStates\",\n\t\"LFGQueueFrame_UpdateLFGDungeonList\",\n\t\"LFGSpecificChoiceEnableButton_SetIsRadio\",\n\t\"LFGTeleport\",\n\t\"LFG_DisableRoleButton\",\n\t\"LFG_EnableRoleButton\",\n\t\"LFG_PermanentlyDisableRoleButton\",\n\t\"LFG_UpdateAvailableRoles\",\n\t\"LFG_UpdateFindGroupButtons\",\n\t\"LFG_UpdateFramesIfShown\",\n\t\"LFG_UpdateLockedOutPanels\",\n\t\"LFG_UpdateQueuedList\",\n\t\"LFG_UpdateRoleCheckboxes\",\n\t\"LFG_UpdateRolesChangeable\",\n\t\"LFRBrowseButton_OnClick\",\n\t\"LFRBrowseButton_OnEnter\",\n\t\"LFRBrowseFrameListButton_SetData\",\n\t\"LFRBrowseFrameList_Update\",\n\t\"LFRBrowseFrameRaidDropDownButton_OnClick\",\n\t\"LFRBrowseFrameRaidDropDown_Initialize\",\n\t\"LFRBrowseFrameRaidDropDown_SetUp\",\n\t\"LFRBrowseFrameRefreshButton_OnUpdate\",\n\t\"LFRBrowseFrame_OnLoad\",\n\t\"LFRBrowseFrame_OnUpdateAlways\",\n\t\"LFRBrowse_UpdateButtonStates\",\n\t\"LFRFrameRoleCheckButton_OnClick\",\n\t\"LFRFrame_OnEvent\",\n\t\"LFRFrame_OnLoad\",\n\t\"LFRFrame_SetActiveTab\",\n\t\"LFRGetNumDungeons\",\n\t\"LFRList_DefaultFilterFunction\",\n\t\"LFRList_SetHeaderCollapsed\",\n\t\"LFRList_SetHeaderEnabled\",\n\t\"LFRList_SetRaidEnabled\",\n\t\"LFRQueueFrameDungeonChoiceEnableButton_OnClick\",\n\t\"LFRQueueFrameExpandOrCollapseButton_OnClick\",\n\t\"LFRQueueFrameFindGroupButton_Update\",\n\t\"LFRQueueFrameSpecificListButton_SetDungeon\",\n\t\"LFRQueueFrameSpecificList_Update\",\n\t\"LFRQueueFrame_Join\",\n\t\"LFRQueueFrame_QueueForInstanceIfEnabled\",\n\t\"LFRQueueFrame_SetRoles\",\n\t\"LFRQueueFrame_Update\",\n\t\"LFR_CanQueueForLockedInstances\",\n\t\"LFR_CanQueueForMultiple\",\n\t\"LFR_IsEmpowered\",\n\t\"LanguageMenu_Click\",\n\t\"LanguageMenu_LoadLanguages\",\n\t\"LanguageMenu_OnEvent\",\n\t\"LanguageMenu_OnLoad\",\n\t\"LearnPreviewTalents\",\n\t\"LearnTalent\",\n\t\"LeaveBattlefield\",\n\t\"LeaveChannelByName\",\n\t\"LeaveLFG\",\n\t\"LeaveParty\",\n\t\"ListChannelByName\",\n\t\"ListChannels\",\n\t\"LoadAddOn\",\n\t\"LoadBindings\",\n\t\"LoadMicroButtonTextures\",\n\t\"Localize\",\n\t\"LocalizeFrames\",\n\t\"LocalizePost\",\n\t\"LockMultiCastActionBar\",\n\t\"LockPetActionBar\",\n\t\"LoggingChat\",\n\t\"LoggingCombat\",\n\t\"Logout\",\n\t\"LoopbackVUMeter_OnLoad\",\n\t\"LoopbackVUMeter_OnUpdate\",\n\t\"LootButton_OnClick\",\n\t\"LootFrame_OnEvent\",\n\t\"LootFrame_OnHide\",\n\t\"LootFrame_OnLoad\",\n\t\"LootFrame_OnShow\",\n\t\"LootFrame_PageDown\",\n\t\"LootFrame_PageUp\",\n\t\"LootFrame_Show\",\n\t\"LootFrame_Update\",\n\t\"LootFrame_UpdateButton\",\n\t\"LootItem_OnEnter\",\n\t\"LootSlot\",\n\t\"LootSlotIsCoin\",\n\t\"LootSlotIsItem\",\n\t\"LowHealthFrame_OnUpdate\",\n\t\"LowHealthFrame_StartFlashing\",\n\t\"LowHealthFrame_StopFlashing\",\n\t\"LowerFrameLevel\",\n\t\"MacOptionsCancelFrame_OnShow\",\n\t\"MacOptionsCompressFrame_OnShow\",\n\t\"MacOptionsFrameCodecDropDown_Initialize\",\n\t\"MacOptionsFrameCodecDropDown_OnClick\",\n\t\"MacOptionsFrameCodecDropDown_OnLoad\",\n\t\"MacOptionsFrameFramerateDropDown_Initialize\",\n\t\"MacOptionsFrameFramerateDropDown_OnClick\",\n\t\"MacOptionsFrameFramerateDropDown_OnLoad\",\n\t\"MacOptionsFrameResolutionButton_OnClick\",\n\t\"MacOptionsFrameResolutionDropDown_Initialize\",\n\t\"MacOptionsFrameResolutionDropDown_OnLoad\",\n\t\"MacOptionsFrame_Cancel\",\n\t\"MacOptionsFrame_DisableCheckBox\",\n\t\"MacOptionsFrame_DisableSlider\",\n\t\"MacOptionsFrame_DisableText\",\n\t\"MacOptionsFrame_EnableCheckBox\",\n\t\"MacOptionsFrame_Load\",\n\t\"MacOptionsFrame_OnEvent\",\n\t\"MacOptionsFrame_OnLoad\",\n\t\"MacOptionsFrame_Save\",\n\t\"MacOptionsFrame_SetDefaults\",\n\t\"MacOptionsFrame_UpdateTime\",\n\t\"MacroFrame_LoadUI\",\n\t\"MacroFrame_SaveMacro\",\n\t\"MailFrameTab_OnClick\",\n\t\"MailFrame_OnEvent\",\n\t\"MailFrame_OnLoad\",\n\t\"MainMenuBarBackpackButton_OnEvent\",\n\t\"MainMenuBarBackpackButton_UpdateFreeSlots\",\n\t\"MainMenuBarPerformanceBarFrame_OnEnter\",\n\t\"MainMenuBarVehicleLeaveButton_OnEvent\",\n\t\"MainMenuBarVehicleLeaveButton_OnLoad\",\n\t\"MainMenuBarVehicleLeaveButton_Update\",\n\t\"MainMenuBar_AnimFinished\",\n\t\"MainMenuBar_OnEvent\",\n\t\"MainMenuBar_OnLoad\",\n\t\"MainMenuBar_ToPlayerArt\",\n\t\"MainMenuBar_ToVehicleArt\",\n\t\"MainMenuBar_UnlockAB\",\n\t\"MainMenuBar_UpdateArt\",\n\t\"MainMenuBar_UpdateKeyRing\",\n\t\"MainMenuExpBar_Update\",\n\t\"MainMenuMicroButton_SetNormal\",\n\t\"MainMenuMicroButton_SetPushed\",\n\t\"MakeMinigameMove\",\n\t\"ManageBackpackTokenFrame\",\n\t\"MerchantFrame_ConfirmExtendedItemCost\",\n\t\"MerchantFrame_ConfirmHighCostItem\",\n\t\"MerchantFrame_OnEvent\",\n\t\"MerchantFrame_OnHide\",\n\t\"MerchantFrame_OnLoad\",\n\t\"MerchantFrame_OnShow\",\n\t\"MerchantFrame_ResetRefundItem\",\n\t\"MerchantFrame_SetRefundItem\",\n\t\"MerchantFrame_Update\",\n\t\"MerchantFrame_UpdateAltCurrency\",\n\t\"MerchantFrame_UpdateBuybackInfo\",\n\t\"MerchantFrame_UpdateCanRepairAll\",\n\t\"MerchantFrame_UpdateGuildBankRepair\",\n\t\"MerchantFrame_UpdateMerchantInfo\",\n\t\"MerchantFrame_UpdateRepairButtons\",\n\t\"MerchantItemButton_OnClick\",\n\t\"MerchantItemButton_OnEnter\",\n\t\"MerchantItemButton_OnLoad\",\n\t\"MerchantItemButton_OnModifiedClick\",\n\t\"MerchantItemBuybackButton_OnLoad\",\n\t\"MerchantNextPageButton_OnClick\",\n\t\"MerchantPrevPageButton_OnClick\",\n\t\"MessageFrameScrollButton_OnLoad\",\n\t\"MessageFrameScrollButton_OnUpdate\",\n\t\"MessageTypeColor_OpenColorPicker\",\n\t\"MicroButtonTooltipText\",\n\t\"MiniMapBattlefieldDropDown_Initialize\",\n\t\"MiniMapBattlefieldDropDown_OnLoad\",\n\t\"MiniMapBattlefieldFrame_OnUpdate\",\n\t\"MiniMapBattlefieldFrame_isArena\",\n\t\"MiniMapInstanceDifficulty_OnEvent\",\n\t\"MiniMapLFGFrameDropDown_Update\",\n\t\"MiniMapLFGFrame_OnClick\",\n\t\"MiniMapLFGFrame_OnEnter\",\n\t\"MiniMapLFGFrame_OnLeave\",\n\t\"MiniMapLFGFrame_TeleportIn\",\n\t\"MiniMapLFGFrame_TeleportOut\",\n\t\"MiniMapLFG_UpdateIsShown\",\n\t\"MiniMapTrackingDropDown_Initialize\",\n\t\"MiniMapTrackingDropDown_OnLoad\",\n\t\"MiniMapTrackingShineFadeIn\",\n\t\"MiniMapTrackingShineFadeOut\",\n\t\"MiniMapTracking_SetTracking\",\n\t\"MiniMapTracking_Update\",\n\t\"MiniMapVoiceChatDropDown_Initialize\",\n\t\"MiniMapVoiceChatDropDown_OnLoad\",\n\t\"MiniMapVoiceChat_Update\",\n\t\"MinimapButton_OnMouseDown\",\n\t\"MinimapButton_OnMouseUp\",\n\t\"MinimapMailFrameUpdate\",\n\t\"MinimapPing_FadeOut\",\n\t\"MinimapPing_OnEvent\",\n\t\"MinimapPing_OnLoad\",\n\t\"MinimapPing_OnUpdate\",\n\t\"Minimap_OnClick\",\n\t\"Minimap_SetPing\",\n\t\"Minimap_SetTooltip\",\n\t\"Minimap_Update\",\n\t\"Minimap_UpdateRotationSetting\",\n\t\"Minimap_ZoomIn\",\n\t\"Minimap_ZoomInClick\",\n\t\"Minimap_ZoomOut\",\n\t\"Minimap_ZoomOutClick\",\n\t\"MirrorTimerFrame_OnEvent\",\n\t\"MirrorTimerFrame_OnLoad\",\n\t\"MirrorTimerFrame_OnUpdate\",\n\t\"MirrorTimer_Show\",\n\t\"Model_OnLoad\",\n\t\"Model_OnUpdate\",\n\t\"Model_RotateLeft\",\n\t\"Model_RotateRight\",\n\t\"MoneyFrame_OnEvent\",\n\t\"MoneyFrame_OnLoad\",\n\t\"MoneyFrame_SetType\",\n\t\"MoneyFrame_Update\",\n\t\"MoneyFrame_UpdateMoney\",\n\t\"MoneyInputFrame_ClearFocus\",\n\t\"MoneyInputFrame_GetCopper\",\n\t\"MoneyInputFrame_OnShow\",\n\t\"MoneyInputFrame_OnTextChanged\",\n\t\"MoneyInputFrame_ResetMoney\",\n\t\"MoneyInputFrame_SetCopper\",\n\t\"MoneyInputFrame_SetMode\",\n\t\"MoneyInputFrame_SetNextFocus\",\n\t\"MoneyInputFrame_SetOnValueChangedFunc\",\n\t\"MoneyInputFrame_SetPreviousFocus\",\n\t\"MoneyInputFrame_SetTextColor\",\n\t\"MouseIsOver\",\n\t\"MouselookStart\",\n\t\"MouselookStop\",\n\t\"MoveAndSteerStart\",\n\t\"MoveAndSteerStop\",\n\t\"MoveBackwardStart\",\n\t\"MoveBackwardStop\",\n\t\"MoveForwardStart\",\n\t\"MoveForwardStop\",\n\t\"MoveViewDownStart\",\n\t\"MoveViewDownStop\",\n\t\"MoveViewInStart\",\n\t\"MoveViewInStop\",\n\t\"MoveViewLeftStart\",\n\t\"MoveViewLeftStop\",\n\t\"MoveViewOutStart\",\n\t\"MoveViewOutStop\",\n\t\"MoveViewRightStart\",\n\t\"MoveViewRightStop\",\n\t\"MoveViewUpStart\",\n\t\"MoveViewUpStop\",\n\t\"MovieFrame_OnEvent\",\n\t\"MovieFrame_OnHide\",\n\t\"MovieFrame_OnKeyUp\",\n\t\"MovieFrame_OnLoad\",\n\t\"MovieFrame_OnMovieFinished\",\n\t\"MovieFrame_OnMovieHideSubtitle\",\n\t\"MovieFrame_OnMovieShowSubtitle\",\n\t\"MovieFrame_OnShow\",\n\t\"MovieFrame_OnUpdate\",\n\t\"MovieFrame_PlayMovie\",\n\t\"MovieRecordingProgress_OnUpdate\",\n\t\"MultiActionBarFrame_OnLoad\",\n\t\"MultiActionBar_HideAllGrids\",\n\t\"MultiActionBar_ShowAllGrids\",\n\t\"MultiActionBar_Update\",\n\t\"MultiActionBar_UpdateGrid\",\n\t\"MultiActionBar_UpdateGridVisibility\",\n\t\"MultiActionButtonDown\",\n\t\"MultiActionButtonUp\",\n\t\"MultiBar1_IsVisible\",\n\t\"MultiBar2_IsVisible\",\n\t\"MultiBar3_IsVisible\",\n\t\"MultiBar4_IsVisible\",\n\t\"MultiCastActionBarFrame_OnEvent\",\n\t\"MultiCastActionBarFrame_OnLoad\",\n\t\"MultiCastActionBarFrame_OnUpdate\",\n\t\"MultiCastActionBarFrame_Update\",\n\t\"MultiCastActionButtonDown\",\n\t\"MultiCastActionButtonUp\",\n\t\"MultiCastActionButton_OnEnter\",\n\t\"MultiCastActionButton_OnEvent\",\n\t\"MultiCastActionButton_OnLeave\",\n\t\"MultiCastActionButton_OnLoad\",\n\t\"MultiCastActionButton_OnPostClick\",\n\t\"MultiCastActionButton_OnShow\",\n\t\"MultiCastActionButton_Update\",\n\t\"MultiCastFlyoutButton_OnClick\",\n\t\"MultiCastFlyoutButton_OnEnter\",\n\t\"MultiCastFlyoutButton_OnLeave\",\n\t\"MultiCastFlyoutButton_OnLoad\",\n\t\"MultiCastFlyoutButton_SetTooltip\",\n\t\"MultiCastFlyoutFrameCloseButton_OnClick\",\n\t\"MultiCastFlyoutFrameOpenButton_Hide\",\n\t\"MultiCastFlyoutFrameOpenButton_OnClick\",\n\t\"MultiCastFlyoutFrameOpenButton_OnLeave\",\n\t\"MultiCastFlyoutFrameOpenButton_Show\",\n\t\"MultiCastFlyoutFrame_Hide\",\n\t\"MultiCastFlyoutFrame_LoadPageSpells\",\n\t\"MultiCastFlyoutFrame_LoadSlotSpells\",\n\t\"MultiCastFlyoutFrame_OnEnter\",\n\t\"MultiCastFlyoutFrame_OnHide\",\n\t\"MultiCastFlyoutFrame_OnLeave\",\n\t\"MultiCastFlyoutFrame_OnShow\",\n\t\"MultiCastFlyoutFrame_OnUpdate\",\n\t\"MultiCastFlyoutFrame_ToggleFlyout\",\n\t\"MultiCastRecallSpellButtonUp\",\n\t\"MultiCastRecallSpellButton_OnClick\",\n\t\"MultiCastRecallSpellButton_OnLoad\",\n\t\"MultiCastRecallSpellButton_Update\",\n\t\"MultiCastSlotButton_OnEnter\",\n\t\"MultiCastSlotButton_OnEvent\",\n\t\"MultiCastSlotButton_OnLeave\",\n\t\"MultiCastSlotButton_Update\",\n\t\"MultiCastSpellButton_OnEnter\",\n\t\"MultiCastSpellButton_OnEvent\",\n\t\"MultiCastSpellButton_OnLeave\",\n\t\"MultiCastSpellButton_OnLoad\",\n\t\"MultiCastSpellButton_SetTooltip\",\n\t\"MultiCastSpellButton_UpdateCooldown\",\n\t\"MultiCastSpellButton_UpdateState\",\n\t\"MultiCastSummonSpellButtonUp\",\n\t\"MultiCastSummonSpellButton_OnClick\",\n\t\"MultiCastSummonSpellButton_OnEnter\",\n\t\"MultiCastSummonSpellButton_OnEvent\",\n\t\"MultiCastSummonSpellButton_OnLeave\",\n\t\"MultiCastSummonSpellButton_OnLoad\",\n\t\"MultiCastSummonSpellButton_Update\",\n\t\"MultibarGrid_IsVisible\",\n\t\"Multibar_EmptyFunc\",\n\t\"NewGMTicket\",\n\t\"NextView\",\n\t\"NoPlayTime\",\n\t\"NotWhileDeadError\",\n\t\"NotifyInspect\",\n\t\"NumTaxiNodes\",\n\t\"OfferPetition\",\n\t\"OffhandHasWeapon\",\n\t\"OnMenuLoad\",\n\t\"OpenAllBags\",\n\t\"OpenBackpack\",\n\t\"OpenBag\",\n\t\"OpenCalendar\",\n\t\"OpenCoinPickupFrame\",\n\t\"OpenColorPicker\",\n\t\"OpenGlyphFrame\",\n\t\"OpenMailAttachment_OnClick\",\n\t\"OpenMailAttachment_OnEnter\",\n\t\"OpenMailFrame_OnHide\",\n\t\"OpenMailFrame_UpdateButtonPositions\",\n\t\"OpenMail_Delete\",\n\t\"OpenMail_GetItemCounts\",\n\t\"OpenMail_Reply\",\n\t\"OpenMail_ReportSpam\",\n\t\"OpenMail_Update\",\n\t\"OpenStackSplitFrame\",\n\t\"OpenTrainer\",\n\t\"OpeningCinematic\",\n\t\"OptionsCategoryFrame_Update\",\n\t\"OptionsFrameCancel_OnClick\",\n\t\"OptionsFrameDefault_OnClick\",\n\t\"OptionsFrameOkay_OnClick\",\n\t\"OptionsFrame_AddCategory\",\n\t\"OptionsFrame_OnHide\",\n\t\"OptionsFrame_OnLoad\",\n\t\"OptionsFrame_OnShow\",\n\t\"OptionsFrame_OpenToCategory\",\n\t\"OptionsFrame_RefreshCategories\",\n\t\"OptionsFrame_SetAllToDefaults\",\n\t\"OptionsFrame_SetCurrentToDefaults\",\n\t\"OptionsListButtonToggle_OnClick\",\n\t\"OptionsListButton_OnClick\",\n\t\"OptionsListButton_OnLoad\",\n\t\"OptionsListButton_ToggleSubCategories\",\n\t\"OptionsListScroll_Update\",\n\t\"OptionsList_ClearSelection\",\n\t\"OptionsList_DisplayButton\",\n\t\"OptionsList_DisplayPanel\",\n\t\"OptionsList_DisplayScrollBar\",\n\t\"OptionsList_HideButton\",\n\t\"OptionsList_HideScrollBar\",\n\t\"OptionsList_OnLoad\",\n\t\"OptionsList_SelectButton\",\n\t\"PVPBannerCustomization_Left\",\n\t\"PVPBannerCustomization_Right\",\n\t\"PVPBannerFrame_OnShow\",\n\t\"PVPBannerFrame_OpenColorPicker\",\n\t\"PVPBannerFrame_SaveBanner\",\n\t\"PVPBannerFrame_SetBannerColor\",\n\t\"PVPBannerFrame_SetBorderColor\",\n\t\"PVPBannerFrame_SetEmblemColor\",\n\t\"PVPBattlegroundButton_OnClick\",\n\t\"PVPBattlegroundFrameJoinButton_OnClick\",\n\t\"PVPBattlegroundFrame_OnEvent\",\n\t\"PVPBattlegroundFrame_OnHide\",\n\t\"PVPBattlegroundFrame_OnLoad\",\n\t\"PVPBattlegroundFrame_OnShow\",\n\t\"PVPBattlegroundFrame_UpdateGroupAvailable\",\n\t\"PVPBattlegroundFrame_UpdateVisible\",\n\t\"PVPBattleground_GetSelectedBattlegroundInfo\",\n\t\"PVPBattleground_ResetInfo\",\n\t\"PVPBattleground_UpdateBattlegrounds\",\n\t\"PVPBattleground_UpdateInfo\",\n\t\"PVPBattleground_UpdateJoinButton\",\n\t\"PVPBattleground_UpdateQueueStatus\",\n\t\"PVPBattleground_UpdateRandomInfo\",\n\t\"PVPDropDown_Initialize\",\n\t\"PVPFrameToggleButton_OnClick\",\n\t\"PVPFrame_IsJustBG\",\n\t\"PVPFrame_OnEvent\",\n\t\"PVPFrame_OnHide\",\n\t\"PVPFrame_OnLoad\",\n\t\"PVPFrame_OnShow\",\n\t\"PVPFrame_SetFaction\",\n\t\"PVPFrame_SetJustBG\",\n\t\"PVPFrame_SetToInSeason\",\n\t\"PVPFrame_SetToOffSeason\",\n\t\"PVPFrame_ShowDropdown\",\n\t\"PVPFrame_Update\",\n\t\"PVPHonor_Update\",\n\t\"PVPMicroButton_SetNormal\",\n\t\"PVPMicroButton_SetPushed\",\n\t\"PVPQueue_UpdateRandomInfo\",\n\t\"PVPStandard_OnLoad\",\n\t\"PVPTeamDetailsButton_OnClick\",\n\t\"PVPTeamDetailsToggleButton_OnClick\",\n\t\"PVPTeamDetails_OnHide\",\n\t\"PVPTeamDetails_OnShow\",\n\t\"PVPTeamDetails_Update\",\n\t\"PVPTeam_OnClick\",\n\t\"PVPTeam_OnEnter\",\n\t\"PVPTeam_OnLeave\",\n\t\"PVPTeam_OnMouseDown\",\n\t\"PVPTeam_OnMouseUp\",\n\t\"PVPTeam_Update\",\n\t\"PanelTemplates_DeselectTab\",\n\t\"PanelTemplates_DisableTab\",\n\t\"PanelTemplates_EnableTab\",\n\t\"PanelTemplates_GetSelectedTab\",\n\t\"PanelTemplates_GetTabWidth\",\n\t\"PanelTemplates_SelectTab\",\n\t\"PanelTemplates_SetDisabledTabState\",\n\t\"PanelTemplates_SetNumTabs\",\n\t\"PanelTemplates_SetTab\",\n\t\"PanelTemplates_TabResize\",\n\t\"PanelTemplates_Tab_OnClick\",\n\t\"PanelTemplates_UpdateTabs\",\n\t\"PaperDollFormatStat\",\n\t\"PaperDollFrameItemFlyoutButton_OnClick\",\n\t\"PaperDollFrameItemFlyoutButton_OnEnter\",\n\t\"PaperDollFrameItemFlyout_CreateButton\",\n\t\"PaperDollFrameItemFlyout_DisplayButton\",\n\t\"PaperDollFrameItemFlyout_DisplaySpecialButton\",\n\t\"PaperDollFrameItemFlyout_Hide\",\n\t\"PaperDollFrameItemFlyout_OnEvent\",\n\t\"PaperDollFrameItemFlyout_OnHide\",\n\t\"PaperDollFrameItemFlyout_OnShow\",\n\t\"PaperDollFrameItemFlyout_OnUpdate\",\n\t\"PaperDollFrameItemFlyout_Show\",\n\t\"PaperDollFrameItemPopoutButton_HideAll\",\n\t\"PaperDollFrameItemPopoutButton_OnClick\",\n\t\"PaperDollFrameItemPopoutButton_OnLoad\",\n\t\"PaperDollFrameItemPopoutButton_SetReversed\",\n\t\"PaperDollFrameItemPopoutButton_ShowAll\",\n\t\"PaperDollFrame_ClearIgnoredSlots\",\n\t\"PaperDollFrame_GetArmorReduction\",\n\t\"PaperDollFrame_IgnoreSlotsForSet\",\n\t\"PaperDollFrame_OnEvent\",\n\t\"PaperDollFrame_OnHide\",\n\t\"PaperDollFrame_OnLoad\",\n\t\"PaperDollFrame_OnShow\",\n\t\"PaperDollFrame_SetArmor\",\n\t\"PaperDollFrame_SetAttackBothHands\",\n\t\"PaperDollFrame_SetAttackPower\",\n\t\"PaperDollFrame_SetAttackSpeed\",\n\t\"PaperDollFrame_SetBlock\",\n\t\"PaperDollFrame_SetDamage\",\n\t\"PaperDollFrame_SetDefense\",\n\t\"PaperDollFrame_SetDodge\",\n\t\"PaperDollFrame_SetExpertise\",\n\t\"PaperDollFrame_SetGuild\",\n\t\"PaperDollFrame_SetLabelAndText\",\n\t\"PaperDollFrame_SetLevel\",\n\t\"PaperDollFrame_SetManaRegen\",\n\t\"PaperDollFrame_SetMeleeCritChance\",\n\t\"PaperDollFrame_SetParry\",\n\t\"PaperDollFrame_SetRangedAttack\",\n\t\"PaperDollFrame_SetRangedAttackPower\",\n\t\"PaperDollFrame_SetRangedAttackSpeed\",\n\t\"PaperDollFrame_SetRangedCritChance\",\n\t\"PaperDollFrame_SetRangedDamage\",\n\t\"PaperDollFrame_SetRating\",\n\t\"PaperDollFrame_SetResilience\",\n\t\"PaperDollFrame_SetResistances\",\n\t\"PaperDollFrame_SetSpellBonusDamage\",\n\t\"PaperDollFrame_SetSpellBonusHealing\",\n\t\"PaperDollFrame_SetSpellCritChance\",\n\t\"PaperDollFrame_SetSpellHaste\",\n\t\"PaperDollFrame_SetSpellPenetration\",\n\t\"PaperDollFrame_SetStat\",\n\t\"PaperDollFrame_UpdateStats\",\n\t\"PaperDollItemSlotButton_OnClick\",\n\t\"PaperDollItemSlotButton_OnEnter\",\n\t\"PaperDollItemSlotButton_OnEvent\",\n\t\"PaperDollItemSlotButton_OnHide\",\n\t\"PaperDollItemSlotButton_OnLeave\",\n\t\"PaperDollItemSlotButton_OnLoad\",\n\t\"PaperDollItemSlotButton_OnModifiedClick\",\n\t\"PaperDollItemSlotButton_OnShow\",\n\t\"PaperDollItemSlotButton_Update\",\n\t\"PaperDollItemSlotButton_UpdateFlyout\",\n\t\"PaperDollItemSlotButton_UpdateLock\",\n\t\"PaperDollStatTooltip\",\n\t\"PaperDoll_IsEquippedSlot\",\n\t\"PartialPlayTime\",\n\t\"PartyFrameDropDown_Initialize\",\n\t\"PartyFrameDropDown_OnLoad\",\n\t\"PartyLFGStartBackfill\",\n\t\"PartyMemberBackground_SaveOpacity\",\n\t\"PartyMemberBackground_SetOpacity\",\n\t\"PartyMemberBackground_ToggleOpacity\",\n\t\"PartyMemberBuffTooltip_Update\",\n\t\"PartyMemberFrame_OnEvent\",\n\t\"PartyMemberFrame_OnLoad\",\n\t\"PartyMemberFrame_OnUpdate\",\n\t\"PartyMemberFrame_RefreshPetDebuffs\",\n\t\"PartyMemberFrame_ToPlayerArt\",\n\t\"PartyMemberFrame_ToVehicleArt\",\n\t\"PartyMemberFrame_UpdateArt\",\n\t\"PartyMemberFrame_UpdateAssignedRoles\",\n\t\"PartyMemberFrame_UpdateLeader\",\n\t\"PartyMemberFrame_UpdateMember\",\n\t\"PartyMemberFrame_UpdateMemberHealth\",\n\t\"PartyMemberFrame_UpdateOnlineStatus\",\n\t\"PartyMemberFrame_UpdatePet\",\n\t\"PartyMemberFrame_UpdatePvPStatus\",\n\t\"PartyMemberFrame_UpdateReadyCheck\",\n\t\"PartyMemberFrame_UpdateStatusBarText\",\n\t\"PartyMemberFrame_UpdateVoiceStatus\",\n\t\"PartyMemberHealthCheck\",\n\t\"PendingListFrameDropDown_Initialize\",\n\t\"PendingListFrameDropDown_OnLoad\",\n\t\"PendingListFrame_BlockCommunication\",\n\t\"PendingListFrame_OnHide\",\n\t\"PendingListFrame_OnShow\",\n\t\"PendingListFrame_ReportPlayer\",\n\t\"PendingListFrame_ReportSpam\",\n\t\"PendingList_Scroll\",\n\t\"PendingList_Update\",\n\t\"PendingList_UpdateTab\",\n\t\"PetAbandon\",\n\t\"PetActionBarFrame_IsAboveShapeshift\",\n\t\"PetActionBarFrame_OnUpdate\",\n\t\"PetActionBar_HideGrid\",\n\t\"PetActionBar_OnEvent\",\n\t\"PetActionBar_OnLoad\",\n\t\"PetActionBar_ShowGrid\",\n\t\"PetActionBar_Update\",\n\t\"PetActionBar_UpdateCooldowns\",\n\t\"PetActionBar_UpdatePositionValues\",\n\t\"PetActionButtonDown\",\n\t\"PetActionButtonUp\",\n\t\"PetActionButton_IsFlashing\",\n\t\"PetActionButton_OnClick\",\n\t\"PetActionButton_OnDragStart\",\n\t\"PetActionButton_OnEnter\",\n\t\"PetActionButton_OnEvent\",\n\t\"PetActionButton_OnLeave\",\n\t\"PetActionButton_OnLoad\",\n\t\"PetActionButton_OnModifiedClick\",\n\t\"PetActionButton_OnReceiveDrag\",\n\t\"PetActionButton_OnUpdate\",\n\t\"PetActionButton_SetHotkeys\",\n\t\"PetActionButton_StartFlash\",\n\t\"PetActionButton_StopFlash\",\n\t\"PetAggressiveMode\",\n\t\"PetAttack\",\n\t\"PetCanBeAbandoned\",\n\t\"PetCanBeDismissed\",\n\t\"PetCanBeRenamed\",\n\t\"PetCastingBarFrame_OnEvent\",\n\t\"PetCastingBarFrame_OnLoad\",\n\t\"PetDefensiveMode\",\n\t\"PetDismiss\",\n\t\"PetExpBar_Update\",\n\t\"PetFollow\",\n\t\"PetFrameDropDown_Initialize\",\n\t\"PetFrameDropDown_OnLoad\",\n\t\"PetFrame_OnEvent\",\n\t\"PetFrame_OnLoad\",\n\t\"PetFrame_OnUpdate\",\n\t\"PetFrame_SetHappiness\",\n\t\"PetFrame_Update\",\n\t\"PetHasActionBar\",\n\t\"PetPaperDollFrame_FindCompanionIndex\",\n\t\"PetPaperDollFrame_OnEvent\",\n\t\"PetPaperDollFrame_OnHide\",\n\t\"PetPaperDollFrame_OnLoad\",\n\t\"PetPaperDollFrame_OnShow\",\n\t\"PetPaperDollFrame_SetCompanionPage\",\n\t\"PetPaperDollFrame_SetResistances\",\n\t\"PetPaperDollFrame_SetSpellBonusDamage\",\n\t\"PetPaperDollFrame_SetStats\",\n\t\"PetPaperDollFrame_SetTab\",\n\t\"PetPaperDollFrame_Update\",\n\t\"PetPaperDollFrame_UpdateCompanionCooldowns\",\n\t\"PetPaperDollFrame_UpdateCompanionPreview\",\n\t\"PetPaperDollFrame_UpdateCompanions\",\n\t\"PetPaperDollFrame_UpdateIsAvailable\",\n\t\"PetPaperDollFrame_UpdateTabs\",\n\t\"PetPassiveMode\",\n\t\"PetRename\",\n\t\"PetStable_NoPetsAllowed\",\n\t\"PetStable_OnEvent\",\n\t\"PetStable_OnLoad\",\n\t\"PetStable_Update\",\n\t\"PetStopAttack\",\n\t\"PetWait\",\n\t\"PetitionFrame_Update\",\n\t\"PickupAction\",\n\t\"PickupBagFromSlot\",\n\t\"PickupCompanion\",\n\t\"PickupContainerItem\",\n\t\"PickupEquipmentSet\",\n\t\"PickupEquipmentSetByName\",\n\t\"PickupGuildBankItem\",\n\t\"PickupGuildBankMoney\",\n\t\"PickupInventoryItem\",\n\t\"PickupItem\",\n\t\"PickupMacro\",\n\t\"PickupMerchantItem\",\n\t\"PickupPetAction\",\n\t\"PickupPlayerMoney\",\n\t\"PickupSpell\",\n\t\"PickupStablePet\",\n\t\"PickupTradeMoney\",\n\t\"PitchDownStart\",\n\t\"PitchDownStop\",\n\t\"PitchUpStart\",\n\t\"PitchUpStop\",\n\t\"PlaceAction\",\n\t\"PlaceAuctionBid\",\n\t\"PlaceGlyphInSocket\",\n\t\"PlayDance\",\n\t\"PlayMusic\",\n\t\"PlaySound\",\n\t\"PlaySoundFile\",\n\t\"PlayerCanTeleport\",\n\t\"PlayerFrameDropDown_Initialize\",\n\t\"PlayerFrameDropDown_OnLoad\",\n\t\"PlayerFrame_AnimFinished\",\n\t\"PlayerFrame_AnimateOut\",\n\t\"PlayerFrame_OnEvent\",\n\t\"PlayerFrame_OnLoad\",\n\t\"PlayerFrame_OnReceiveDrag\",\n\t\"PlayerFrame_OnUpdate\",\n\t\"PlayerFrame_SequenceFinished\",\n\t\"PlayerFrame_SetRunicPower\",\n\t\"PlayerFrame_SetupDeathKnniggetLayout\",\n\t\"PlayerFrame_ToPlayerArt\",\n\t\"PlayerFrame_ToVehicleArt\",\n\t\"PlayerFrame_Update\",\n\t\"PlayerFrame_UpdateArt\",\n\t\"PlayerFrame_UpdateGroupIndicator\",\n\t\"PlayerFrame_UpdateLayout\",\n\t\"PlayerFrame_UpdatePartyLeader\",\n\t\"PlayerFrame_UpdatePlaytime\",\n\t\"PlayerFrame_UpdatePvPStatus\",\n\t\"PlayerFrame_UpdateReadyCheck\",\n\t\"PlayerFrame_UpdateRolesAssigned\",\n\t\"PlayerFrame_UpdateStatus\",\n\t\"PlayerFrame_UpdateVoiceStatus\",\n\t\"PlayerIsPVPInactive\",\n\t\"PlayerStatFrameLeftDropDown_Initialize\",\n\t\"PlayerStatFrameLeftDropDown_OnClick\",\n\t\"PlayerStatFrameLeftDropDown_OnLoad\",\n\t\"PlayerStatFrameLeftDropDown_OnShow\",\n\t\"PlayerStatFrameRightDropDown_Initialize\",\n\t\"PlayerStatFrameRightDropDown_OnClick\",\n\t\"PlayerStatFrameRightDropDown_OnLoad\",\n\t\"PlayerStatFrameRightDropDown_OnShow\",\n\t\"PlayerTitleButton_OnClick\",\n\t\"PlayerTitleFrame_UpdateTitles\",\n\t\"PlayerTitlePickerFrame_Toggle\",\n\t\"PlayerTitlePickerScrollFrame_OnLoad\",\n\t\"PlayerTitlePickerScrollFrame_Update\",\n\t\"PositionMiniWorldMapArrowFrame\",\n\t\"PositionWorldMapArrowFrame\",\n\t\"PossessBar_OnEvent\",\n\t\"PossessBar_OnLoad\",\n\t\"PossessBar_Update\",\n\t\"PossessBar_UpdateState\",\n\t\"PossessButton_OnClick\",\n\t\"PossessButton_OnEnter\",\n\t\"PrevView\",\n\t\"ProcessMapClick\",\n\t\"ProcessQuestLogRewardFactions\",\n\t\"PromoteToAssistant\",\n\t\"PromoteToLeader\",\n\t\"PurchaseSlot\",\n\t\"PutItemInBackpack\",\n\t\"PutItemInBag\",\n\t\"PutKeyInKeyRing\",\n\t\"QueryAuctionItems\",\n\t\"QueryCastSequence\",\n\t\"QueryGuildBankLog\",\n\t\"QueryGuildBankTab\",\n\t\"QueryGuildBankText\",\n\t\"QueryGuildEventLog\",\n\t\"QueryQuestsCompleted\",\n\t\"QuestChooseRewardError\",\n\t\"QuestDetailAcceptButton_OnClick\",\n\t\"QuestDetailDeclineButton_OnClick\",\n\t\"QuestFlagsPVP\",\n\t\"QuestFrameDetailPanel_OnShow\",\n\t\"QuestFrameGreetingPanel_OnShow\",\n\t\"QuestFrameProgressItems_Update\",\n\t\"QuestFrameProgressPanel_OnShow\",\n\t\"QuestFrameRewardPanel_OnShow\",\n\t\"QuestFrame_GetMaterial\",\n\t\"QuestFrame_OnEvent\",\n\t\"QuestFrame_OnHide\",\n\t\"QuestFrame_OnLoad\",\n\t\"QuestFrame_OnShow\",\n\t\"QuestFrame_SetMaterial\",\n\t\"QuestFrame_SetPortrait\",\n\t\"QuestFrame_SetTextColor\",\n\t\"QuestFrame_SetTitleTextColor\",\n\t\"QuestGetAutoAccept\",\n\t\"QuestGoodbyeButton_OnClick\",\n\t\"QuestInfoFadingFrame_OnUpdate\",\n\t\"QuestInfoItem_OnClick\",\n\t\"QuestInfoTimerFrame_OnUpdate\",\n\t\"QuestInfo_Display\",\n\t\"QuestInfo_DoReputations\",\n\t\"QuestInfo_ShowAnchor\",\n\t\"QuestInfo_ShowDescriptionHeader\",\n\t\"QuestInfo_ShowDescriptionText\",\n\t\"QuestInfo_ShowFadingFrame\",\n\t\"QuestInfo_ShowGroupSize\",\n\t\"QuestInfo_ShowObjectives\",\n\t\"QuestInfo_ShowObjectivesHeader\",\n\t\"QuestInfo_ShowObjectivesText\",\n\t\"QuestInfo_ShowRequiredMoney\",\n\t\"QuestInfo_ShowRewardText\",\n\t\"QuestInfo_ShowRewards\",\n\t\"QuestInfo_ShowSpacer\",\n\t\"QuestInfo_ShowTimer\",\n\t\"QuestInfo_ShowTitle\",\n\t\"QuestInfo_ToggleRewardElement\",\n\t\"QuestIsDaily\",\n\t\"QuestIsWeekly\",\n\t\"QuestLogControlPanel_UpdatePosition\",\n\t\"QuestLogControlPanel_UpdateState\",\n\t\"QuestLogDetailFrame_AttachToQuestLog\",\n\t\"QuestLogDetailFrame_DetachFromQuestLog\",\n\t\"QuestLogDetailFrame_OnHide\",\n\t\"QuestLogDetailFrame_OnLoad\",\n\t\"QuestLogDetailFrame_OnShow\",\n\t\"QuestLogFrameTrackButton_OnClick\",\n\t\"QuestLogPushQuest\",\n\t\"QuestLogScrollFrame_OnLoad\",\n\t\"QuestLogShowMapPOI_UpdatePosition\",\n\t\"QuestLogTitleButton_OnClick\",\n\t\"QuestLogTitleButton_OnEnter\",\n\t\"QuestLogTitleButton_OnEvent\",\n\t\"QuestLogTitleButton_OnLeave\",\n\t\"QuestLogTitleButton_OnLoad\",\n\t\"QuestLogTitleButton_Resize\",\n\t\"QuestLog_GetFirstSelectableQuest\",\n\t\"QuestLog_OnEvent\",\n\t\"QuestLog_OnHide\",\n\t\"QuestLog_OnLoad\",\n\t\"QuestLog_OnShow\",\n\t\"QuestLog_OnUpdate\",\n\t\"QuestLog_OpenToQuest\",\n\t\"QuestLog_SetFirstValidSelection\",\n\t\"QuestLog_SetNearestValidSelection\",\n\t\"QuestLog_SetSelection\",\n\t\"QuestLog_UnsetSelection\",\n\t\"QuestLog_Update\",\n\t\"QuestLog_UpdateMap\",\n\t\"QuestLog_UpdateMapButton\",\n\t\"QuestLog_UpdatePartyInfoTooltip\",\n\t\"QuestLog_UpdateQuestCount\",\n\t\"QuestLog_UpdateQuestDetails\",\n\t\"QuestMapUpdateAllQuests\",\n\t\"QuestPOIButton_OnMouseDown\",\n\t\"QuestPOIButton_OnMouseUp\",\n\t\"QuestPOIGetIconInfo\",\n\t\"QuestPOIGetQuestIDByIndex\",\n\t\"QuestPOIGetQuestIDByVisibleIndex\",\n\t\"QuestPOIUpdateIcons\",\n\t\"QuestPOIUpdateTexture\",\n\t\"QuestPOI_DeselectButton\",\n\t\"QuestPOI_DeselectButtonByParent\",\n\t\"QuestPOI_DisplayButton\",\n\t\"QuestPOI_HideAllButtons\",\n\t\"QuestPOI_HideButtons\",\n\t\"QuestPOI_SelectButton\",\n\t\"QuestPOI_SelectButtonByIndex\",\n\t\"QuestPOI_SelectButtonByQuestId\",\n\t\"QuestPOI_SetTextColor\",\n\t\"QuestProgressCompleteButton_OnClick\",\n\t\"QuestRewardCancelButton_OnClick\",\n\t\"QuestRewardCompleteButton_OnClick\",\n\t\"QuestRewardItem_OnClick\",\n\t\"QuestTitleButton_OnClick\",\n\t\"Quit\",\n\t\"RaidBossEmoteFrame_OnEvent\",\n\t\"RaidBossEmoteFrame_OnLoad\",\n\t\"RaidButton_OnClick\",\n\t\"RaidClassButton_OnEnter\",\n\t\"RaidClassButton_OnLoad\",\n\t\"RaidClassButton_Update\",\n\t\"RaidFrameDropDown_Initialize\",\n\t\"RaidFrameRaidBrowserButton_Update\",\n\t\"RaidFrameReadyCheckButton_Update\",\n\t\"RaidFrame_LoadUI\",\n\t\"RaidFrame_OnEvent\",\n\t\"RaidFrame_OnLoad\",\n\t\"RaidFrame_Update\",\n\t\"RaidGroupButton_OnDragStart\",\n\t\"RaidGroupButton_OnDragStop\",\n\t\"RaidGroupButton_OnEnter\",\n\t\"RaidGroupButton_OnLoad\",\n\t\"RaidGroupButton_ShowMenu\",\n\t\"RaidGroupFrame_OnEvent\",\n\t\"RaidGroupFrame_OnHide\",\n\t\"RaidGroupFrame_OnLoad\",\n\t\"RaidGroupFrame_OnUpdate\",\n\t\"RaidGroupFrame_ReadyCheckFinished\",\n\t\"RaidGroupFrame_Update\",\n\t\"RaidGroupFrame_UpdateHealth\",\n\t\"RaidGroupFrame_UpdateLevel\",\n\t\"RaidGroup_ResetSlotButtons\",\n\t\"RaidInfoExtendButton_OnClick\",\n\t\"RaidInfoFrame_Update\",\n\t\"RaidInfoFrame_UpdateSelectedIndex\",\n\t\"RaidInfoInstance_OnClick\",\n\t\"RaidInfoInstance_OnEnter\",\n\t\"RaidInfoInstance_OnMouseDown\",\n\t\"RaidInfoInstance_OnMouseUp\",\n\t\"RaidInfoScrollFrame_OnLoad\",\n\t\"RaidNotice_AddMessage\",\n\t\"RaidNotice_FadeInit\",\n\t\"RaidNotice_OnUpdate\",\n\t\"RaidNotice_SetSlot\",\n\t\"RaidNotice_UpdateSlot\",\n\t\"RaidOptionsFrame_UpdatePartyFrames\",\n\t\"RaidPulloutButton_OnDragStart\",\n\t\"RaidPulloutButton_OnEvent\",\n\t\"RaidPulloutButton_OnLoad\",\n\t\"RaidPulloutButton_ShowMenu\",\n\t\"RaidPulloutButton_UpdateDead\",\n\t\"RaidPulloutButton_UpdateSwapFrames\",\n\t\"RaidPulloutButton_UpdateVoice\",\n\t\"RaidPulloutDropDown_Initialize\",\n\t\"RaidPulloutDropDown_OnLoad\",\n\t\"RaidPulloutStopMoving\",\n\t\"RaidPullout_GeneratePulloutFrame\",\n\t\"RaidPullout_GetFrame\",\n\t\"RaidPullout_MatchName\",\n\t\"RaidPullout_OnEvent\",\n\t\"RaidPullout_OnUpdate\",\n\t\"RaidPullout_ReadyCheckFinishFunc\",\n\t\"RaidPullout_ReadyCheckFinished\",\n\t\"RaidPullout_RenewFrames\",\n\t\"RaidPullout_SaveFrames\",\n\t\"RaidPullout_Update\",\n\t\"RaidPullout_UpdateTarget\",\n\t\"RaidWarningFrame_OnEvent\",\n\t\"RaidWarningFrame_OnLoad\",\n\t\"RaiseFrameLevel\",\n\t\"RaiseFrameLevelByTwo\",\n\t\"RandomRoll\",\n\t\"ReadFile\",\n\t\"ReadyCheckFrame_OnEvent\",\n\t\"ReadyCheckFrame_OnHide\",\n\t\"ReadyCheckFrame_OnLoad\",\n\t\"ReadyCheck_Confirm\",\n\t\"ReadyCheck_Finish\",\n\t\"ReadyCheck_OnUpdate\",\n\t\"ReadyCheck_Start\",\n\t\"RealPartyIsFull\",\n\t\"RecalculateGearManagerDialogPopup\",\n\t\"RecentTimeDate\",\n\t\"RecordLoopbackSoundButton_OnUpdate\",\n\t\"RefreshAuras\",\n\t\"RefreshBuffs\",\n\t\"RefreshDebuffs\",\n\t\"RefreshEquipmentSetIconInfo\",\n\t\"RefreshLFGList\",\n\t\"RefreshMoneyFrame\",\n\t\"RegisterAutoHide\",\n\t\"RegisterCVar\",\n\t\"RegisterForSave\",\n\t\"RegisterForSavePerCharacter\",\n\t\"RegisterStateDriver\",\n\t\"RegisterStaticConstants\",\n\t\"RegisterUnitWatch\",\n\t\"RejectProposal\",\n\t\"ReloadUI\",\n\t\"RemoveChatWindowChannel\",\n\t\"RemoveChatWindowMessages\",\n\t\"RemoveFriend\",\n\t\"RemoveGlyphFromSocket\",\n\t\"RemoveQuestWatch\",\n\t\"RemoveSkillUp\",\n\t\"RemoveTrackedAchievement\",\n\t\"RenameEquipmentSet\",\n\t\"RenamePetition\",\n\t\"RepairAllItems\",\n\t\"ReplaceEnchant\",\n\t\"ReplaceTradeEnchant\",\n\t\"RepopMe\",\n\t\"ReportBug\",\n\t\"ReportPlayerIsPVPAFK\",\n\t\"ReportSuggestion\",\n\t\"ReputationBar_DrawHorizontalLine\",\n\t\"ReputationBar_DrawVerticalLine\",\n\t\"ReputationBar_OnClick\",\n\t\"ReputationFrame_OnEvent\",\n\t\"ReputationFrame_OnLoad\",\n\t\"ReputationFrame_OnShow\",\n\t\"ReputationFrame_SetRowType\",\n\t\"ReputationFrame_Update\",\n\t\"ReputationWatchBar_Update\",\n\t\"RequestBattlefieldPositions\",\n\t\"RequestBattlefieldScoreData\",\n\t\"RequestBattlegroundInstanceInfo\",\n\t\"RequestInspectHonorData\",\n\t\"RequestLFDPartyLockInfo\",\n\t\"RequestLFDPlayerLockInfo\",\n\t\"RequestRaidInfo\",\n\t\"RequestTimePlayed\",\n\t\"ResetCPUUsage\",\n\t\"ResetChatColors\",\n\t\"ResetChatWindows\",\n\t\"ResetCursor\",\n\t\"ResetDisabledAddOns\",\n\t\"ResetGroupPreviewTalentPoints\",\n\t\"ResetInstances\",\n\t\"ResetPerformanceValues\",\n\t\"ResetPreviewTalentPoints\",\n\t\"ResetTutorials\",\n\t\"ResetView\",\n\t\"RespondInstanceLock\",\n\t\"RespondMailLockSendItem\",\n\t\"RestartGx\",\n\t\"RestoreVideoEffectsDefaults\",\n\t\"RestoreVideoResolutionDefaults\",\n\t\"RestoreVideoStereoDefaults\",\n\t\"ResurrectGetOfferer\",\n\t\"ResurrectHasSickness\",\n\t\"ResurrectHasTimer\",\n\t\"RetrieveCorpse\",\n\t\"ReturnInboxItem\",\n\t\"RollOnLoot\",\n\t\"RunBinding\",\n\t\"RunMacro\",\n\t\"RunMacroText\",\n\t\"RunScript\",\n\t\"RuneButton_OnEnter\",\n\t\"RuneButton_OnLeave\",\n\t\"RuneButton_OnLoad\",\n\t\"RuneButton_OnUpdate\",\n\t\"RuneButton_ShineFadeIn\",\n\t\"RuneButton_ShineFadeOut\",\n\t\"RuneButton_Update\",\n\t\"RuneFrame_AddRune\",\n\t\"RuneFrame_FixRunes\",\n\t\"RuneFrame_OnEvent\",\n\t\"RuneFrame_OnLoad\",\n\t\"SaveBindings\",\n\t\"SaveEquipmentSet\",\n\t\"SavePendingGuildBankTabPermissions\",\n\t\"SaveView\",\n\t\"ScorePlayerDropDown_Cancel\",\n\t\"ScorePlayerDropDown_Initialize\",\n\t\"ScorePlayerDropDown_OnClick\",\n\t\"ScorePlayer_OnMouseUp\",\n\t\"Screenshot\",\n\t\"ScrollFrameTemplate_OnMouseWheel\",\n\t\"ScrollFrame_OnLoad\",\n\t\"ScrollFrame_OnScrollRangeChanged\",\n\t\"ScrollingEdit_OnCursorChanged\",\n\t\"ScrollingEdit_OnTextChanged\",\n\t\"ScrollingEdit_OnUpdate\",\n\t\"SearchButton_OnUpdate\",\n\t\"SearchLFGGetEncounterResults\",\n\t\"SearchLFGGetJoinedID\",\n\t\"SearchLFGGetNumResults\",\n\t\"SearchLFGGetPartyResults\",\n\t\"SearchLFGGetResults\",\n\t\"SearchLFGJoin\",\n\t\"SearchLFGLeave\",\n\t\"SearchLFGSort\",\n\t\"SeatIndicator_Pulse\",\n\t\"SecondsToTime\",\n\t\"SecondsToTimeAbbrev\",\n\t\"SecureActionButton_OnClick\",\n\t\"SecureButton_GetAttribute\",\n\t\"SecureButton_GetButtonSuffix\",\n\t\"SecureButton_GetEffectiveButton\",\n\t\"SecureButton_GetModifiedAttribute\",\n\t\"SecureButton_GetModifiedUnit\",\n\t\"SecureButton_GetModifierPrefix\",\n\t\"SecureButton_GetUnit\",\n\t\"SecureButton_ParseModifierString\",\n\t\"SecureCmdItemParse\",\n\t\"SecureCmdOptionParse\",\n\t\"SecureCmdUseItem\",\n\t\"SecureGroupHeader_OnAttributeChanged\",\n\t\"SecureGroupHeader_OnEvent\",\n\t\"SecureGroupHeader_OnLoad\",\n\t\"SecureGroupHeader_Update\",\n\t\"SecureGroupPetHeader_OnAttributeChanged\",\n\t\"SecureGroupPetHeader_OnEvent\",\n\t\"SecureGroupPetHeader_OnLoad\",\n\t\"SecureGroupPetHeader_Update\",\n\t\"SecureHandlerExecute\",\n\t\"SecureHandlerSetFrameRef\",\n\t\"SecureHandlerUnwrapScript\",\n\t\"SecureHandlerWrapScript\",\n\t\"SecureHandler_AttributeOnAttributeChanged\",\n\t\"SecureHandler_OnClick\",\n\t\"SecureHandler_OnDragEvent\",\n\t\"SecureHandler_OnLoad\",\n\t\"SecureHandler_OnMouseUpDown\",\n\t\"SecureHandler_OnMouseWheel\",\n\t\"SecureHandler_OnSimpleEvent\",\n\t\"SecureHandler_StateOnAttributeChanged\",\n\t\"SecureUnitButton_OnClick\",\n\t\"SecureUnitButton_OnLoad\",\n\t\"SelectActiveQuest\",\n\t\"SelectAvailableQuest\",\n\t\"SelectGossipActiveQuest\",\n\t\"SelectGossipAvailableQuest\",\n\t\"SelectGossipOption\",\n\t\"SelectPackage\",\n\t\"SelectQuestLogEntry\",\n\t\"SelectStationery\",\n\t\"SelectTradeSkill\",\n\t\"SelectTrainerService\",\n\t\"SendAddonMessage\",\n\t\"SendChatMessage\",\n\t\"SendMail\",\n\t\"SendMailAttachmentButton_OnClick\",\n\t\"SendMailAttachmentButton_OnDropAny\",\n\t\"SendMailAttachment_OnEnter\",\n\t\"SendMailFrame_CanSend\",\n\t\"SendMailFrame_Reset\",\n\t\"SendMailFrame_SendMail\",\n\t\"SendMailFrame_Update\",\n\t\"SendMailMailButton_OnClick\",\n\t\"SendMailMoneyButton_OnClick\",\n\t\"SendMailRadioButton_OnClick\",\n\t\"SendSystemMessage\",\n\t\"SendWho\",\n\t\"SetAbandonQuest\",\n\t\"SetAchievementComparisonUnit\",\n\t\"SetActionBarToggles\",\n\t\"SetActiveTalentGroup\",\n\t\"SetActiveVoiceChannel\",\n\t\"SetActiveVoiceChannelBySessionID\",\n\t\"SetAllowLowLevelRaid\",\n\t\"SetArenaTeamRosterSelection\",\n\t\"SetArenaTeamRosterShowOffline\",\n\t\"SetAuctionsTabShowing\",\n\t\"SetBagPortraitTexture\",\n\t\"SetBaseMip\",\n\t\"SetBattlefieldScoreFaction\",\n\t\"SetBinding\",\n\t\"SetBindingClick\",\n\t\"SetBindingItem\",\n\t\"SetBindingMacro\",\n\t\"SetBindingSpell\",\n\t\"SetButtonPulse\",\n\t\"SetCVar\",\n\t\"SetChannelOwner\",\n\t\"SetChannelPassword\",\n\t\"SetChannelWatch\",\n\t\"SetChatColorNameByClass\",\n\t\"SetChatMouseOverDelay\",\n\t\"SetChatUnitColor\",\n\t\"SetChatWindowAlpha\",\n\t\"SetChatWindowColor\",\n\t\"SetChatWindowDocked\",\n\t\"SetChatWindowLocked\",\n\t\"SetChatWindowName\",\n\t\"SetChatWindowSavedDimensions\",\n\t\"SetChatWindowSavedPosition\",\n\t\"SetChatWindowShown\",\n\t\"SetChatWindowSize\",\n\t\"SetChatWindowUninteractable\",\n\t\"SetConsoleKey\",\n\t\"SetCurrencyBackpack\",\n\t\"SetCurrencyUnused\",\n\t\"SetCurrentGuildBankTab\",\n\t\"SetCurrentTitle\",\n\t\"SetCursor\",\n\t\"SetDesaturation\",\n\t\"SetDressUpBackground\",\n\t\"SetDungeonDifficulty\",\n\t\"SetDungeonMapLevel\",\n\t\"SetEuropeanNumbers\",\n\t\"SetFactionActive\",\n\t\"SetFactionInactive\",\n\t\"SetFarclip\",\n\t\"SetFriendNotes\",\n\t\"SetGamma\",\n\t\"SetGuildBankTabInfo\",\n\t\"SetGuildBankTabPermissions\",\n\t\"SetGuildBankTabWithdraw\",\n\t\"SetGuildBankText\",\n\t\"SetGuildBankWithdrawLimit\",\n\t\"SetGuildInfoText\",\n\t\"SetGuildRosterSelection\",\n\t\"SetGuildRosterShowOffline\",\n\t\"SetInventoryPortraitTexture\",\n\t\"SetItemButtonCount\",\n\t\"SetItemButtonDesaturated\",\n\t\"SetItemButtonNameFrameVertexColor\",\n\t\"SetItemButtonNormalTextureVertexColor\",\n\t\"SetItemButtonSlotVertexColor\",\n\t\"SetItemButtonStock\",\n\t\"SetItemButtonTexture\",\n\t\"SetItemButtonTextureVertexColor\",\n\t\"SetItemRef\",\n\t\"SetLFGBootVote\",\n\t\"SetLFGComment\",\n\t\"SetLFGDungeon\",\n\t\"SetLFGDungeonEnabled\",\n\t\"SetLFGHeaderCollapsed\",\n\t\"SetLFGRoles\",\n\t\"SetLayoutMode\",\n\t\"SetLootMethod\",\n\t\"SetLootPortrait\",\n\t\"SetLootThreshold\",\n\t\"SetMacroItem\",\n\t\"SetMacroSpell\",\n\t\"SetMapByID\",\n\t\"SetMapToCurrentZone\",\n\t\"SetMapZoom\",\n\t\"SetModifiedClick\",\n\t\"SetMoneyFrameColor\",\n\t\"SetMouselookOverrideBinding\",\n\t\"SetMultiCastSpell\",\n\t\"SetMultisampleFormat\",\n\t\"SetNextBarberShopStyle\",\n\t\"SetOptOutOfLoot\",\n\t\"SetOverrideBinding\",\n\t\"SetOverrideBindingClick\",\n\t\"SetOverrideBindingItem\",\n\t\"SetOverrideBindingMacro\",\n\t\"SetOverrideBindingSpell\",\n\t\"SetPOIIconOverlapDistance\",\n\t\"SetPOIIconOverlapPushDistance\",\n\t\"SetPVP\",\n\t\"SetPartyAssignment\",\n\t\"SetPendingGuildBankTabPermissions\",\n\t\"SetPendingGuildBankTabWithdraw\",\n\t\"SetPetStablePaperdoll\",\n\t\"SetPortraitTexture\",\n\t\"SetPortraitToTexture\",\n\t\"SetRaidDifficulty\",\n\t\"SetRaidRosterSelection\",\n\t\"SetRaidSubgroup\",\n\t\"SetRaidTarget\",\n\t\"SetRaidTargetIcon\",\n\t\"SetRaidTargetIconTexture\",\n\t\"SetSavedInstanceExtend\",\n\t\"SetScreenResolution\",\n\t\"SetSelectedAuctionItem\",\n\t\"SetSelectedBattlefield\",\n\t\"SetSelectedDisplayChannel\",\n\t\"SetSelectedFaction\",\n\t\"SetSelectedFriend\",\n\t\"SetSelectedIgnore\",\n\t\"SetSelectedMute\",\n\t\"SetSelectedSkill\",\n\t\"SetSelfMuteState\",\n\t\"SetSendMailCOD\",\n\t\"SetSendMailMoney\",\n\t\"SetSendMailShowing\",\n\t\"SetSpellNameColor\",\n\t\"SetTableColor\",\n\t\"SetTalentButtonLocation\",\n\t\"SetTargetSpellbarAspect\",\n\t\"SetTaxiBenchmarkMode\",\n\t\"SetTaxiMap\",\n\t\"SetTerrainMip\",\n\t\"SetTexLodBias\",\n\t\"SetTextStatusBarText\",\n\t\"SetTextStatusBarTextPrefix\",\n\t\"SetTextStatusBarTextZeroText\",\n\t\"SetTitleByName\",\n\t\"SetTooltipMoney\",\n\t\"SetTracking\",\n\t\"SetTradeMoney\",\n\t\"SetTradeSkillInvSlotFilter\",\n\t\"SetTradeSkillItemLevelFilter\",\n\t\"SetTradeSkillItemNameFilter\",\n\t\"SetTradeSkillSubClassFilter\",\n\t\"SetTrainerServiceTypeFilter\",\n\t\"SetTrainerSkillLineFilter\",\n\t\"SetUIVisibility\",\n\t\"SetUpAnimation\",\n\t\"SetView\",\n\t\"SetWatchedFactionIndex\",\n\t\"SetWaterDetail\",\n\t\"SetWhoToUI\",\n\t\"SetZoneText\",\n\t\"SetupFullscreenScale\",\n\t\"SetupUnitButtonConfiguration\",\n\t\"ShapeshiftBar_ChangeForm\",\n\t\"ShapeshiftBar_OnEvent\",\n\t\"ShapeshiftBar_OnLoad\",\n\t\"ShapeshiftBar_Update\",\n\t\"ShapeshiftBar_UpdateState\",\n\t\"ShiftQuestWatches\",\n\t\"ShowBonusActionBar\",\n\t\"ShowBuybackSellCursor\",\n\t\"ShowCloak\",\n\t\"ShowContainerSellCursor\",\n\t\"ShowFriends\",\n\t\"ShowHelm\",\n\t\"ShowInspectCursor\",\n\t\"ShowInventorySellCursor\",\n\t\"ShowMacroFrame\",\n\t\"ShowMerchantSellCursor\",\n\t\"ShowMiniWorldMapArrowFrame\",\n\t\"ShowMultiCastActionBar\",\n\t\"ShowNumericThreat\",\n\t\"ShowPartyFrame\",\n\t\"ShowPetActionBar\",\n\t\"ShowQuickButton\",\n\t\"ShowReadyCheck\",\n\t\"ShowRepairCursor\",\n\t\"ShowResurrectRequest\",\n\t\"ShowTextStatusBarText\",\n\t\"ShowUIPanel\",\n\t\"ShowWatchedReputationBarText\",\n\t\"ShowWhoPanel\",\n\t\"ShowWorldMapArrowFrame\",\n\t\"ShowingCloak\",\n\t\"ShowingHelm\",\n\t\"SignPetition\",\n\t\"SilenceMember\",\n\t\"SitStandOrDescendStart\",\n\t\"SkillBar_OnClick\",\n\t\"SkillDetailFrame_SetStatusBar\",\n\t\"SkillFrame_OnEvent\",\n\t\"SkillFrame_OnLoad\",\n\t\"SkillFrame_OnShow\",\n\t\"SkillFrame_SetStatusBar\",\n\t\"SkillFrame_UpdateSkills\",\n\t\"SmallMoneyFrame_OnLoad\",\n\t\"SocketContainerItem\",\n\t\"SocketInventoryItem\",\n\t\"SortArenaTeamRoster\",\n\t\"SortAuctionApplySort\",\n\t\"SortAuctionClearSort\",\n\t\"SortAuctionItems\",\n\t\"SortAuctionSetSort\",\n\t\"SortBGList\",\n\t\"SortBattlefieldScoreData\",\n\t\"SortGuildRoster\",\n\t\"SortQuestWatches\",\n\t\"SortWho\",\n\t\"Sound_ChatSystem_GetInputDriverNameByIndex\",\n\t\"Sound_ChatSystem_GetNumInputDrivers\",\n\t\"Sound_ChatSystem_GetNumOutputDrivers\",\n\t\"Sound_ChatSystem_GetOutputDriverNameByIndex\",\n\t\"Sound_GameSystem_GetInputDriverNameByIndex\",\n\t\"Sound_GameSystem_GetNumInputDrivers\",\n\t\"Sound_GameSystem_GetNumOutputDrivers\",\n\t\"Sound_GameSystem_GetOutputDriverNameByIndex\",\n\t\"Sound_GameSystem_RestartSoundSystem\",\n\t\"Sound_MasterVolumeDown\",\n\t\"Sound_MasterVolumeUp\",\n\t\"Sound_ToggleMusic\",\n\t\"Sound_ToggleSound\",\n\t\"SpellBookFrameTabButton_OnClick\",\n\t\"SpellBookFrame_HideSpells\",\n\t\"SpellBookFrame_OnEvent\",\n\t\"SpellBookFrame_OnHide\",\n\t\"SpellBookFrame_OnLoad\",\n\t\"SpellBookFrame_OnShow\",\n\t\"SpellBookFrame_PlayCloseSound\",\n\t\"SpellBookFrame_PlayOpenSound\",\n\t\"SpellBookFrame_SetTabType\",\n\t\"SpellBookFrame_ShowSpells\",\n\t\"SpellBookFrame_Update\",\n\t\"SpellBookFrame_UpdatePages\",\n\t\"SpellBookNextPageButton_OnClick\",\n\t\"SpellBookPrevPageButton_OnClick\",\n\t\"SpellBookSkillLineTab_OnClick\",\n\t\"SpellBook_GetAutoCastShine\",\n\t\"SpellBook_GetCurrentPage\",\n\t\"SpellBook_GetSpellID\",\n\t\"SpellBook_GetTabInfo\",\n\t\"SpellBook_ReleaseAutoCastShine\",\n\t\"SpellBook_UpdatePageArrows\",\n\t\"SpellButton_OnClick\",\n\t\"SpellButton_OnDrag\",\n\t\"SpellButton_OnEnter\",\n\t\"SpellButton_OnEvent\",\n\t\"SpellButton_OnHide\",\n\t\"SpellButton_OnLoad\",\n\t\"SpellButton_OnModifiedClick\",\n\t\"SpellButton_OnShow\",\n\t\"SpellButton_UpdateButton\",\n\t\"SpellButton_UpdateSelection\",\n\t\"SpellCanTargetGlyph\",\n\t\"SpellCanTargetItem\",\n\t\"SpellCanTargetUnit\",\n\t\"SpellColor_OpenColorPicker\",\n\t\"SpellHasRange\",\n\t\"SpellIsTargeting\",\n\t\"SpellStopCasting\",\n\t\"SpellStopTargeting\",\n\t\"SpellTargetItem\",\n\t\"SpellTargetUnit\",\n\t\"SplitContainerItem\",\n\t\"SplitGuildBankItem\",\n\t\"StablePet\",\n\t\"StackSplitFrameCancel_Click\",\n\t\"StackSplitFrameLeft_Click\",\n\t\"StackSplitFrameOkay_Click\",\n\t\"StackSplitFrameRight_Click\",\n\t\"StackSplitFrame_OnChar\",\n\t\"StackSplitFrame_OnHide\",\n\t\"StackSplitFrame_OnKeyDown\",\n\t\"StackSplitFrame_OnKeyUp\",\n\t\"StartAttack\",\n\t\"StartAuction\",\n\t\"StartDuel\",\n\t\"StaticPopupSpecial_Hide\",\n\t\"StaticPopupSpecial_Show\",\n\t\"StaticPopup_CollapseTable\",\n\t\"StaticPopup_EditBoxOnEnterPressed\",\n\t\"StaticPopup_EditBoxOnEscapePressed\",\n\t\"StaticPopup_EditBoxOnTextChanged\",\n\t\"StaticPopup_EscapePressed\",\n\t\"StaticPopup_FindVisible\",\n\t\"StaticPopup_Hide\",\n\t\"StaticPopup_HideExclusive\",\n\t\"StaticPopup_IsLastDisplayedFrame\",\n\t\"StaticPopup_OnClick\",\n\t\"StaticPopup_OnEvent\",\n\t\"StaticPopup_OnHide\",\n\t\"StaticPopup_OnKeyDown\",\n\t\"StaticPopup_OnShow\",\n\t\"StaticPopup_OnUpdate\",\n\t\"StaticPopup_Resize\",\n\t\"StaticPopup_SetUpPosition\",\n\t\"StaticPopup_Show\",\n\t\"StaticPopup_Visible\",\n\t\"StationeryPopupButton_OnClick\",\n\t\"StationeryPopupFrame_Update\",\n\t\"StatsFrame_OnLoad\",\n\t\"StatsFrame_OnUpdate\",\n\t\"StopAttack\",\n\t\"StopCinematic\",\n\t\"StopMacro\",\n\t\"StopMusic\",\n\t\"StopTradeSkillRepeat\",\n\t\"StopwatchCloseButton_OnClick\",\n\t\"StopwatchFrame_OnDragStart\",\n\t\"StopwatchFrame_OnDragStop\",\n\t\"StopwatchFrame_OnEvent\",\n\t\"StopwatchFrame_OnHide\",\n\t\"StopwatchFrame_OnLoad\",\n\t\"StopwatchFrame_OnMouseDown\",\n\t\"StopwatchFrame_OnMouseUp\",\n\t\"StopwatchFrame_OnShow\",\n\t\"StopwatchFrame_OnUpdate\",\n\t\"StopwatchPlayPauseButton_OnClick\",\n\t\"StopwatchResetButton_OnClick\",\n\t\"StopwatchTicker_OnUpdate\",\n\t\"StopwatchTicker_Update\",\n\t\"Stopwatch_Clear\",\n\t\"Stopwatch_FinishCountdown\",\n\t\"Stopwatch_IsPlaying\",\n\t\"Stopwatch_Pause\",\n\t\"Stopwatch_Play\",\n\t\"Stopwatch_StartCountdown\",\n\t\"Stopwatch_Toggle\",\n\t\"StrafeLeftStart\",\n\t\"StrafeLeftStop\",\n\t\"StrafeRightStart\",\n\t\"StrafeRightStop\",\n\t\"Stuck\",\n\t\"SubZoneText_OnLoad\",\n\t\"SummonFriend\",\n\t\"SummonRandomCritter\",\n\t\"SwapRaidSubgroup\",\n\t\"SynchronizeBNetStatus\",\n\t\"TEXT\",\n\t\"TabardCharacterModelFrame_OnLoad\",\n\t\"TabardCharacterModelFrame_OnUpdate\",\n\t\"TabardCharacterModelRotateLeftButton_OnClick\",\n\t\"TabardCharacterModelRotateRightButton_OnClick\",\n\t\"TabardCustomization_Left\",\n\t\"TabardCustomization_Right\",\n\t\"TabardFrame_OnEvent\",\n\t\"TabardFrame_OnLoad\",\n\t\"TabardFrame_UpdateButtons\",\n\t\"TabardFrame_UpdateTextures\",\n\t\"TakeInboxItem\",\n\t\"TakeInboxMoney\",\n\t\"TakeInboxTextItem\",\n\t\"TakeScreenshot\",\n\t\"TakeTaxiNode\",\n\t\"TalentFrame_DrawLines\",\n\t\"TalentFrame_GetArrowTexture\",\n\t\"TalentFrame_GetArrowTextureCount\",\n\t\"TalentFrame_GetBranchTexture\",\n\t\"TalentFrame_GetBranchTextureCount\",\n\t\"TalentFrame_Load\",\n\t\"TalentFrame_LoadUI\",\n\t\"TalentFrame_ResetArrowTextureCount\",\n\t\"TalentFrame_ResetBranchTextureCount\",\n\t\"TalentFrame_ResetBranches\",\n\t\"TalentFrame_SetArrowTexture\",\n\t\"TalentFrame_SetBranchTexture\",\n\t\"TalentFrame_SetPrereqs\",\n\t\"TalentFrame_Update\",\n\t\"TalentFrame_UpdateSpecInfoCache\",\n\t\"TalentFrame_UpdateTalentPoints\",\n\t\"TalentMicroButton_OnEvent\",\n\t\"TargetDirectionEnemy\",\n\t\"TargetDirectionFinished\",\n\t\"TargetDirectionFriend\",\n\t\"TargetFrameDropDown_Initialize\",\n\t\"TargetFrame_CheckClassification\",\n\t\"TargetFrame_CheckDead\",\n\t\"TargetFrame_CheckFaction\",\n\t\"TargetFrame_CheckLevel\",\n\t\"TargetFrame_CreateSpellbar\",\n\t\"TargetFrame_CreateTargetofTarget\",\n\t\"TargetFrame_HealthUpdate\",\n\t\"TargetFrame_OnEvent\",\n\t\"TargetFrame_OnHide\",\n\t\"TargetFrame_OnLoad\",\n\t\"TargetFrame_OnUpdate\",\n\t\"TargetFrame_Update\",\n\t\"TargetFrame_UpdateAuraPositions\",\n\t\"TargetFrame_UpdateAuras\",\n\t\"TargetFrame_UpdateBuffAnchor\",\n\t\"TargetFrame_UpdateDebuffAnchor\",\n\t\"TargetFrame_UpdateRaidTargetIcon\",\n\t\"TargetHealthCheck\",\n\t\"TargetLastEnemy\",\n\t\"TargetLastFriend\",\n\t\"TargetLastTarget\",\n\t\"TargetNearest\",\n\t\"TargetNearestEnemy\",\n\t\"TargetNearestEnemyPlayer\",\n\t\"TargetNearestFriend\",\n\t\"TargetNearestFriendPlayer\",\n\t\"TargetNearestPartyMember\",\n\t\"TargetNearestRaidMember\",\n\t\"TargetTotem\",\n\t\"TargetUnit\",\n\t\"Target_Spellbar_AdjustPosition\",\n\t\"Target_Spellbar_OnEvent\",\n\t\"TargetofTargetHealthCheck\",\n\t\"TargetofTarget_CheckDead\",\n\t\"TargetofTarget_OnHide\",\n\t\"TargetofTarget_Update\",\n\t\"TaxiFrame_OnEvent\",\n\t\"TaxiFrame_OnLoad\",\n\t\"TaxiGetDestX\",\n\t\"TaxiGetDestY\",\n\t\"TaxiGetSrcX\",\n\t\"TaxiGetSrcY\",\n\t\"TaxiNodeCost\",\n\t\"TaxiNodeGetType\",\n\t\"TaxiNodeName\",\n\t\"TaxiNodeOnButtonEnter\",\n\t\"TaxiNodePosition\",\n\t\"TaxiNodeSetCurrent\",\n\t\"TeleportToDebugObject\",\n\t\"TempEnchantButton_OnClick\",\n\t\"TempEnchantButton_OnEnter\",\n\t\"TempEnchantButton_OnLoad\",\n\t\"TempEnchantButton_OnUpdate\",\n\t\"TemporaryEnchantFrame_Hide\",\n\t\"TemporaryEnchantFrame_OnUpdate\",\n\t\"TextEmoteSort\",\n\t\"TextStatusBar_CapDisplayOfNumericValue\",\n\t\"TextStatusBar_Initialize\",\n\t\"TextStatusBar_OnEvent\",\n\t\"TextStatusBar_OnValueChanged\",\n\t\"TextStatusBar_UpdateTextString\",\n\t\"TicketStatusFrameButton_OnClick\",\n\t\"TicketStatusFrameButton_OnLoad\",\n\t\"TicketStatusFrame_OnEvent\",\n\t\"TicketStatusFrame_OnHide\",\n\t\"TicketStatusFrame_OnLoad\",\n\t\"TicketStatusFrame_OnShow\",\n\t\"TicketStatusFrame_OnUpdate\",\n\t\"TimeManagerAlarmAMPMDropDown_Initialize\",\n\t\"TimeManagerAlarmAMPMDropDown_OnClick\",\n\t\"TimeManagerAlarmAMPMDropDown_OnHide\",\n\t\"TimeManagerAlarmAMPMDropDown_OnShow\",\n\t\"TimeManagerAlarmEnabledButton_OnClick\",\n\t\"TimeManagerAlarmEnabledButton_Update\",\n\t\"TimeManagerAlarmHourDropDown_Initialize\",\n\t\"TimeManagerAlarmHourDropDown_OnClick\",\n\t\"TimeManagerAlarmMessageEditBox_OnEditFocusLost\",\n\t\"TimeManagerAlarmMessageEditBox_OnEnterPressed\",\n\t\"TimeManagerAlarmMessageEditBox_OnEscapePressed\",\n\t\"TimeManagerAlarmMinuteDropDown_Initialize\",\n\t\"TimeManagerAlarmMinuteDropDown_OnClick\",\n\t\"TimeManagerClockButton_Hide\",\n\t\"TimeManagerClockButton_OnClick\",\n\t\"TimeManagerClockButton_OnEnter\",\n\t\"TimeManagerClockButton_OnLeave\",\n\t\"TimeManagerClockButton_OnLoad\",\n\t\"TimeManagerClockButton_OnUpdate\",\n\t\"TimeManagerClockButton_OnUpdateWithTooltip\",\n\t\"TimeManagerClockButton_Show\",\n\t\"TimeManagerClockButton_Update\",\n\t\"TimeManagerClockButton_UpdateTooltip\",\n\t\"TimeManagerCloseButton_OnClick\",\n\t\"TimeManagerFrame_OnHide\",\n\t\"TimeManagerFrame_OnLoad\",\n\t\"TimeManagerFrame_OnShow\",\n\t\"TimeManagerFrame_OnUpdate\",\n\t\"TimeManagerLocalTimeCheck_OnClick\",\n\t\"TimeManagerMilitaryTimeCheck_OnClick\",\n\t\"TimeManagerStopwatchCheck_OnClick\",\n\t\"TimeManager_CheckAlarm\",\n\t\"TimeManager_FireAlarm\",\n\t\"TimeManager_FireAlarmWarning\",\n\t\"TimeManager_IsAlarmFiring\",\n\t\"TimeManager_LoadUI\",\n\t\"TimeManager_ShouldCheckAlarm\",\n\t\"TimeManager_StartCheckingAlarm\",\n\t\"TimeManager_Toggle\",\n\t\"TimeManager_ToggleLocalTime\",\n\t\"TimeManager_ToggleTimeFormat\",\n\t\"TimeManager_TurnOffAlarm\",\n\t\"TimeManager_Update\",\n\t\"TimeManager_UpdateAlarmTime\",\n\t\"TimeManager_UpdateTimeTicker\",\n\t\"ToggleAchievementFrame\",\n\t\"ToggleAutoRun\",\n\t\"ToggleBackpack\",\n\t\"ToggleBag\",\n\t\"ToggleBattlefieldMinimap\",\n\t\"ToggleCalendar\",\n\t\"ToggleCharacter\",\n\t\"ToggleChatChannel\",\n\t\"ToggleChatColorNamesByClassGroup\",\n\t\"ToggleChatMessageGroup\",\n\t\"ToggleCollision\",\n\t\"ToggleCollisionDisplay\",\n\t\"ToggleDropDownMenu\",\n\t\"ToggleFrame\",\n\t\"ToggleFramerate\",\n\t\"ToggleFriendsFrame\",\n\t\"ToggleFriendsPanel\",\n\t\"ToggleGameMenu\",\n\t\"ToggleGlyphFrame\",\n\t\"ToggleGuildEventLog\",\n\t\"ToggleGuildInfoFrame\",\n\t\"ToggleHelpFrame\",\n\t\"ToggleIgnorePanel\",\n\t\"ToggleKeyRing\",\n\t\"ToggleLFDParentFrame\",\n\t\"ToggleLFRParentFrame\",\n\t\"ToggleMapFramerate\",\n\t\"ToggleMessageDest\",\n\t\"ToggleMessageSource\",\n\t\"ToggleMessageType\",\n\t\"ToggleMessageTypeGroup\",\n\t\"ToggleMiniMapRotation\",\n\t\"ToggleMinimap\",\n\t\"TogglePVP\",\n\t\"TogglePVPFrame\",\n\t\"TogglePerformanceDisplay\",\n\t\"TogglePerformancePause\",\n\t\"TogglePerformanceValues\",\n\t\"TogglePetAutocast\",\n\t\"TogglePlayerBounds\",\n\t\"TogglePortals\",\n\t\"ToggleRun\",\n\t\"ToggleSheath\",\n\t\"ToggleSpellAutocast\",\n\t\"ToggleSpellBook\",\n\t\"ToggleStats\",\n\t\"ToggleTalentFrame\",\n\t\"ToggleTimeManager\",\n\t\"ToggleTris\",\n\t\"ToggleWorldStateScoreFrame\",\n\t\"TokenButtonLinkButton_OnClick\",\n\t\"TokenButton_OnClick\",\n\t\"TokenButton_OnLoad\",\n\t\"TokenFramePopup_CloseIfHidden\",\n\t\"TokenFrame_LoadUI\",\n\t\"TokenFrame_OnLoad\",\n\t\"TokenFrame_OnShow\",\n\t\"TokenFrame_Update\",\n\t\"TokenFrame_UpdatePopup\",\n\t\"TotemButton_OnClick\",\n\t\"TotemButton_OnLoad\",\n\t\"TotemButton_OnUpdate\",\n\t\"TotemButton_Update\",\n\t\"TotemFrame_OnEvent\",\n\t\"TotemFrame_OnLoad\",\n\t\"TotemFrame_Update\",\n\t\"TradeFrameCancelButton_OnClick\",\n\t\"TradeFrameTradeButton_Disable\",\n\t\"TradeFrameTradeButton_Enable\",\n\t\"TradeFrameTradeButton_SetToEnabledState\",\n\t\"TradeFrame_GetAvailableSlot\",\n\t\"TradeFrame_OnEvent\",\n\t\"TradeFrame_OnHide\",\n\t\"TradeFrame_OnLoad\",\n\t\"TradeFrame_OnMouseUp\",\n\t\"TradeFrame_OnShow\",\n\t\"TradeFrame_SetAcceptState\",\n\t\"TradeFrame_Update\",\n\t\"TradeFrame_UpdateMoney\",\n\t\"TradeFrame_UpdatePlayerItem\",\n\t\"TradeFrame_UpdateTargetItem\",\n\t\"TradeSkillFrame_LoadUI\",\n\t\"TradeSkillOnlyShowMakeable\",\n\t\"TradeSkillOnlyShowSkillUps\",\n\t\"TriggerTutorial\",\n\t\"TurnInArenaPetition\",\n\t\"TurnInGuildCharter\",\n\t\"TurnInPetition\",\n\t\"TurnLeftStart\",\n\t\"TurnLeftStop\",\n\t\"TurnOrActionStart\",\n\t\"TurnOrActionStop\",\n\t\"TurnRightStart\",\n\t\"TurnRightStop\",\n\t\"TutorialFrameNextButton_OnClick\",\n\t\"TutorialFramePrevButton_OnClick\",\n\t\"TutorialFrame_AlertButton_OnClick\",\n\t\"TutorialFrame_CheckBadge\",\n\t\"TutorialFrame_CheckNextPrevButtons\",\n\t\"TutorialFrame_ClearQueue\",\n\t\"TutorialFrame_ClearTextures\",\n\t\"TutorialFrame_Hide\",\n\t\"TutorialFrame_NewTutorial\",\n\t\"TutorialFrame_OnHide\",\n\t\"TutorialFrame_OnLoad\",\n\t\"TutorialFrame_OnShow\",\n\t\"TutorialFrame_Update\",\n\t\"UIDoFramesIntersect\",\n\t\"UIDropDownMenuButton_GetChecked\",\n\t\"UIDropDownMenuButton_GetName\",\n\t\"UIDropDownMenuButton_OnClick\",\n\t\"UIDropDownMenuButton_OpenColorPicker\",\n\t\"UIDropDownMenuDelegate_OnAttributeChanged\",\n\t\"UIDropDownMenu_AddButton\",\n\t\"UIDropDownMenu_ClearAll\",\n\t\"UIDropDownMenu_CreateFrames\",\n\t\"UIDropDownMenu_CreateInfo\",\n\t\"UIDropDownMenu_DisableButton\",\n\t\"UIDropDownMenu_DisableDropDown\",\n\t\"UIDropDownMenu_EnableButton\",\n\t\"UIDropDownMenu_EnableDropDown\",\n\t\"UIDropDownMenu_GetCurrentDropDown\",\n\t\"UIDropDownMenu_GetSelectedID\",\n\t\"UIDropDownMenu_GetSelectedName\",\n\t\"UIDropDownMenu_GetSelectedValue\",\n\t\"UIDropDownMenu_GetText\",\n\t\"UIDropDownMenu_GetValue\",\n\t\"UIDropDownMenu_Initialize\",\n\t\"UIDropDownMenu_InitializeHelper\",\n\t\"UIDropDownMenu_IsEnabled\",\n\t\"UIDropDownMenu_JustifyText\",\n\t\"UIDropDownMenu_OnHide\",\n\t\"UIDropDownMenu_OnUpdate\",\n\t\"UIDropDownMenu_Refresh\",\n\t\"UIDropDownMenu_SetAnchor\",\n\t\"UIDropDownMenu_SetButtonText\",\n\t\"UIDropDownMenu_SetButtonWidth\",\n\t\"UIDropDownMenu_SetSelectedID\",\n\t\"UIDropDownMenu_SetSelectedName\",\n\t\"UIDropDownMenu_SetSelectedValue\",\n\t\"UIDropDownMenu_SetText\",\n\t\"UIDropDownMenu_SetWidth\",\n\t\"UIDropDownMenu_StartCounting\",\n\t\"UIDropDownMenu_StopCounting\",\n\t\"UIErrorsFrame_OnEvent\",\n\t\"UIErrorsFrame_OnLoad\",\n\t\"UIFrameFade\",\n\t\"UIFrameFadeIn\",\n\t\"UIFrameFadeOut\",\n\t\"UIFrameFadeRemoveFrame\",\n\t\"UIFrameFade_OnUpdate\",\n\t\"UIFrameFlash\",\n\t\"UIFrameFlashRemoveFrame\",\n\t\"UIFrameFlashStop\",\n\t\"UIFrameFlash_OnUpdate\",\n\t\"UIFrameIsFading\",\n\t\"UIFrameIsFlashing\",\n\t\"UIMenuButton_OnClick\",\n\t\"UIMenuButton_OnEnter\",\n\t\"UIMenuButton_OnLeave\",\n\t\"UIMenuButton_OnLoad\",\n\t\"UIMenu_AddButton\",\n\t\"UIMenu_AutoSize\",\n\t\"UIMenu_FinishInitializing\",\n\t\"UIMenu_GetNumButtons\",\n\t\"UIMenu_Initialize\",\n\t\"UIMenu_OnShow\",\n\t\"UIMenu_OnUpdate\",\n\t\"UIMenu_StartCounting\",\n\t\"UIMenu_StopCounting\",\n\t\"UIParentLoadAddOn\",\n\t\"UIParent_ManageFramePosition\",\n\t\"UIParent_ManageFramePositions\",\n\t\"UIParent_OnEvent\",\n\t\"UIParent_OnLoad\",\n\t\"UnSilenceMember\",\n\t\"UninviteUnit\",\n\t\"UnitAffectingCombat\",\n\t\"UnitArmor\",\n\t\"UnitAttackBothHands\",\n\t\"UnitAttackPower\",\n\t\"UnitAttackSpeed\",\n\t\"UnitAura\",\n\t\"UnitBuff\",\n\t\"UnitCanAssist\",\n\t\"UnitCanAttack\",\n\t\"UnitCanCooperate\",\n\t\"UnitCastingInfo\",\n\t\"UnitChannelInfo\",\n\t\"UnitCharacterPoints\",\n\t\"UnitClass\",\n\t\"UnitClassBase\",\n\t\"UnitClassification\",\n\t\"UnitControllingVehicle\",\n\t\"UnitCreatureFamily\",\n\t\"UnitCreatureType\",\n\t\"UnitDamage\",\n\t\"UnitDebuff\",\n\t\"UnitDefense\",\n\t\"UnitDetailedThreatSituation\",\n\t\"UnitExists\",\n\t\"UnitFactionGroup\",\n\t\"UnitFrameHealthBar_Initialize\",\n\t\"UnitFrameHealthBar_OnEvent\",\n\t\"UnitFrameHealthBar_OnUpdate\",\n\t\"UnitFrameHealthBar_OnValueChanged\",\n\t\"UnitFrameHealthBar_Update\",\n\t\"UnitFrameManaBar_Initialize\",\n\t\"UnitFrameManaBar_OnEvent\",\n\t\"UnitFrameManaBar_OnUpdate\",\n\t\"UnitFrameManaBar_RegisterDefaultEvents\",\n\t\"UnitFrameManaBar_UnregisterDefaultEvents\",\n\t\"UnitFrameManaBar_Update\",\n\t\"UnitFrameManaBar_UpdateType\",\n\t\"UnitFramePortrait_Update\",\n\t\"UnitFrameThreatIndicator_Initialize\",\n\t\"UnitFrameThreatIndicator_OnEvent\",\n\t\"UnitFrame_Initialize\",\n\t\"UnitFrame_OnEnter\",\n\t\"UnitFrame_OnEvent\",\n\t\"UnitFrame_OnLeave\",\n\t\"UnitFrame_SetUnit\",\n\t\"UnitFrame_Update\",\n\t\"UnitFrame_UpdateThreatIndicator\",\n\t\"UnitFrame_UpdateTooltip\",\n\t\"UnitGUID\",\n\t\"UnitGroupRolesAssigned\",\n\t\"UnitHasLFGDeserter\",\n\t\"UnitHasLFGRandomCooldown\",\n\t\"UnitHasMana\",\n\t\"UnitHasRelicSlot\",\n\t\"UnitHasVehicleUI\",\n\t\"UnitHealth\",\n\t\"UnitHealthMax\",\n\t\"UnitInBattleground\",\n\t\"UnitInParty\",\n\t\"UnitInRaid\",\n\t\"UnitInRange\",\n\t\"UnitInVehicle\",\n\t\"UnitInVehicleControlSeat\",\n\t\"UnitIsAFK\",\n\t\"UnitIsCharmed\",\n\t\"UnitIsConnected\",\n\t\"UnitIsControlling\",\n\t\"UnitIsCorpse\",\n\t\"UnitIsDND\",\n\t\"UnitIsDead\",\n\t\"UnitIsDeadOrGhost\",\n\t\"UnitIsEnemy\",\n\t\"UnitIsFeignDeath\",\n\t\"UnitIsFriend\",\n\t\"UnitIsGhost\",\n\t\"UnitIsInMyGuild\",\n\t\"UnitIsPVP\",\n\t\"UnitIsPVPFreeForAll\",\n\t\"UnitIsPVPSanctuary\",\n\t\"UnitIsPartyLeader\",\n\t\"UnitIsPlayer\",\n\t\"UnitIsPossessed\",\n\t\"UnitIsRaidOfficer\",\n\t\"UnitIsSameServer\",\n\t\"UnitIsSilenced\",\n\t\"UnitIsTalking\",\n\t\"UnitIsTapped\",\n\t\"UnitIsTappedByAllThreatList\",\n\t\"UnitIsTappedByPlayer\",\n\t\"UnitIsTrivial\",\n\t\"UnitIsUnit\",\n\t\"UnitIsVisible\",\n\t\"UnitLevel\",\n\t\"UnitMana\",\n\t\"UnitManaMax\",\n\t\"UnitName\",\n\t\"UnitOnTaxi\",\n\t\"UnitPVPName\",\n\t\"UnitPVPRank\",\n\t\"UnitPlayerControlled\",\n\t\"UnitPlayerOrPetInParty\",\n\t\"UnitPlayerOrPetInRaid\",\n\t\"UnitPopup_HideButtons\",\n\t\"UnitPopup_OnClick\",\n\t\"UnitPopup_OnUpdate\",\n\t\"UnitPopup_ShowMenu\",\n\t\"UnitPower\",\n\t\"UnitPowerMax\",\n\t\"UnitPowerType\",\n\t\"UnitRace\",\n\t\"UnitRangedAttack\",\n\t\"UnitRangedAttackPower\",\n\t\"UnitRangedDamage\",\n\t\"UnitReaction\",\n\t\"UnitResistance\",\n\t\"UnitSelectionColor\",\n\t\"UnitSex\",\n\t\"UnitStat\",\n\t\"UnitSwitchToVehicleSeat\",\n\t\"UnitTargetsVehicleInRaidUI\",\n\t\"UnitThreatSituation\",\n\t\"UnitUsingVehicle\",\n\t\"UnitVehicleSeatCount\",\n\t\"UnitVehicleSeatInfo\",\n\t\"UnitVehicleSkin\",\n\t\"UnitWatchRegistered\",\n\t\"UnitXP\",\n\t\"UnitXPMax\",\n\t\"UnlockMultiCastActionBar\",\n\t\"UnlockPetActionBar\",\n\t\"UnregisterAutoHide\",\n\t\"UnregisterStateDriver\",\n\t\"UnregisterUnitWatch\",\n\t\"UnstablePet\",\n\t\"UpdateAddOnCPUUsage\",\n\t\"UpdateAddOnMemoryUsage\",\n\t\"UpdateBagButtonHighlight\",\n\t\"UpdateBagSlotStatus\",\n\t\"UpdateCoinPickupFrame\",\n\t\"UpdateGMTicket\",\n\t\"UpdateInventoryAlertStatus\",\n\t\"UpdateMapHighlight\",\n\t\"UpdateMenuBarTop\",\n\t\"UpdateMicroButtons\",\n\t\"UpdatePaperdollStats\",\n\t\"UpdatePartyMemberBackground\",\n\t\"UpdateSpells\",\n\t\"UpdateStackSplitFrame\",\n\t\"UpdateSubCategoryEnabledState\",\n\t\"UpdateUIPanelPositions\",\n\t\"UpdateWorldMapArrowFrames\",\n\t\"UploadSettings\",\n\t\"UseAction\",\n\t\"UseContainerItem\",\n\t\"UseEquipmentSet\",\n\t\"UseInventoryItem\",\n\t\"UseItemByName\",\n\t\"UseQuestLogSpecialItem\",\n\t\"UseSoulstone\",\n\t\"UsesGUID\",\n\t\"ValidateFramePosition\",\n\t\"VehicleActionButton_OnClick\",\n\t\"VehicleAimDecrement\",\n\t\"VehicleAimDownStart\",\n\t\"VehicleAimDownStop\",\n\t\"VehicleAimGetAngle\",\n\t\"VehicleAimGetNormAngle\",\n\t\"VehicleAimGetNormPower\",\n\t\"VehicleAimIncrement\",\n\t\"VehicleAimRequestAngle\",\n\t\"VehicleAimRequestNormAngle\",\n\t\"VehicleAimSetNormPower\",\n\t\"VehicleAimUpStart\",\n\t\"VehicleAimUpStop\",\n\t\"VehicleCameraZoomIn\",\n\t\"VehicleCameraZoomOut\",\n\t\"VehicleExit\",\n\t\"VehicleMenuBarPitch_OnClick\",\n\t\"VehicleMenuBarPitch_OnEvent\",\n\t\"VehicleMenuBarPitch_OnLoad\",\n\t\"VehicleMenuBarPitch_SetValue\",\n\t\"VehicleMenuBarStatusBars_ShowTooltip\",\n\t\"VehicleMenuBar_MoveMicroButtons\",\n\t\"VehicleMenuBar_OnEvent\",\n\t\"VehicleMenuBar_OnLoad\",\n\t\"VehicleMenuBar_ReleaseSkins\",\n\t\"VehicleMenuBar_SetSkin\",\n\t\"VehicleMenuBar_UpdateActionBars\",\n\t\"VehicleNextSeat\",\n\t\"VehiclePrevSeat\",\n\t\"VehicleSeatIndicatorButton_OnClick\",\n\t\"VehicleSeatIndicatorButton_OnEnter\",\n\t\"VehicleSeatIndicatorButton_OnLeave\",\n\t\"VehicleSeatIndicatorDropDown_Initialize\",\n\t\"VehicleSeatIndicatorDropDown_OnClick\",\n\t\"VehicleSeatIndicator_OnEvent\",\n\t\"VehicleSeatIndicator_OnLoad\",\n\t\"VehicleSeatIndicator_SetUpVehicle\",\n\t\"VehicleSeatIndicator_UnloadTextures\",\n\t\"VehicleSeatIndicator_Update\",\n\t\"VideoOptionsEffectsPanelSlider_OnValueChanged\",\n\t\"VideoOptionsEffectsPanel_Default\",\n\t\"VideoOptionsEffectsPanel_FixupQualityLevels\",\n\t\"VideoOptionsEffectsPanel_GetVideoQuality\",\n\t\"VideoOptionsEffectsPanel_OnEvent\",\n\t\"VideoOptionsEffectsPanel_OnLoad\",\n\t\"VideoOptionsEffectsPanel_Refresh\",\n\t\"VideoOptionsEffectsPanel_SetCustomQuality\",\n\t\"VideoOptionsEffectsPanel_SetPresetQuality\",\n\t\"VideoOptionsEffectsPanel_SetVideoQuality\",\n\t\"VideoOptionsEffectsPanel_SetVideoQualityLabels\",\n\t\"VideoOptionsEffectsPanel_UpdateVideoQuality\",\n\t\"VideoOptionsFrameCancel_OnClick\",\n\t\"VideoOptionsFrameDefault_OnClick\",\n\t\"VideoOptionsFrameOkay_OnClick\",\n\t\"VideoOptionsFrame_OnHide\",\n\t\"VideoOptionsFrame_OnLoad\",\n\t\"VideoOptionsFrame_SetAllToDefaults\",\n\t\"VideoOptionsFrame_SetCurrentToDefaults\",\n\t\"VideoOptionsFrame_Toggle\",\n\t\"VideoOptionsPanel_Cancel\",\n\t\"VideoOptionsPanel_Default\",\n\t\"VideoOptionsPanel_Okay\",\n\t\"VideoOptionsPanel_OnLoad\",\n\t\"VideoOptionsResolutionPanelMultiSampleDropDown_Initialize\",\n\t\"VideoOptionsResolutionPanelMultiSampleDropDown_OnClick\",\n\t\"VideoOptionsResolutionPanelMultiSampleDropDown_OnLoad\",\n\t\"VideoOptionsResolutionPanelRefreshDropDown_Initialize\",\n\t\"VideoOptionsResolutionPanelRefreshDropDown_OnClick\",\n\t\"VideoOptionsResolutionPanelRefreshDropDown_OnLoad\",\n\t\"VideoOptionsResolutionPanelResolutionDropDown_Initialize\",\n\t\"VideoOptionsResolutionPanelResolutionDropDown_LoadResolutions\",\n\t\"VideoOptionsResolutionPanelResolutionDropDown_OnClick\",\n\t\"VideoOptionsResolutionPanelResolutionDropDown_OnLoad\",\n\t\"VideoOptionsResolutionPanel_Default\",\n\t\"VideoOptionsResolutionPanel_GetMultisampleFormats\",\n\t\"VideoOptionsResolutionPanel_GetRefreshRates\",\n\t\"VideoOptionsResolutionPanel_OnEvent\",\n\t\"VideoOptionsResolutionPanel_OnLoad\",\n\t\"VideoOptionsResolutionPanel_Refresh\",\n\t\"VideoOptionsResolutionPanel_RefreshGammaControls\",\n\t\"VideoOptionsResolutionPanel_SetGamma\",\n\t\"VideoOptionsResolutionPanel_SetWindowed\",\n\t\"VideoOptionsStereoPanel_Default\",\n\t\"VideoOptionsStereoPanel_OnEvent\",\n\t\"VideoOptionsStereoPanel_OnLoad\",\n\t\"VoiceChatShineFadeIn\",\n\t\"VoiceChatShineFadeOut\",\n\t\"VoiceChatTalkers_CanHide\",\n\t\"VoiceChatTalkers_CreateButtons\",\n\t\"VoiceChatTalkers_FadeOut\",\n\t\"VoiceChatTalkers_OnEvent\",\n\t\"VoiceChatTalkers_OnLoad\",\n\t\"VoiceChatTalkers_OnUpdate\",\n\t\"VoiceChatTalkers_ResizeFrame\",\n\t\"VoiceChatTalkers_Update\",\n\t\"VoiceChat_ActivatePrimaryCaptureCallback\",\n\t\"VoiceChat_Animate\",\n\t\"VoiceChat_GetCurrentMicrophoneSignalLevel\",\n\t\"VoiceChat_IsPlayingLoopbackSound\",\n\t\"VoiceChat_IsRecordingLoopbackSound\",\n\t\"VoiceChat_OnUpdate\",\n\t\"VoiceChat_PlayLoopbackSound\",\n\t\"VoiceChat_RecordLoopbackSound\",\n\t\"VoiceChat_StartCapture\",\n\t\"VoiceChat_StopCapture\",\n\t\"VoiceChat_StopPlayingLoopbackSound\",\n\t\"VoiceChat_StopRecordingLoopbackSound\",\n\t\"VoiceChat_Toggle\",\n\t\"VoiceEnumerateCaptureDevices\",\n\t\"VoiceEnumerateOutputDevices\",\n\t\"VoiceGetCurrentCaptureDevice\",\n\t\"VoiceGetCurrentOutputDevice\",\n\t\"VoiceIsDisabledByClient\",\n\t\"VoiceMacroMenu_Click\",\n\t\"VoiceMacroMenu_OnLoad\",\n\t\"VoicePushToTalkStart\",\n\t\"VoicePushToTalkStop\",\n\t\"VoiceSelectCaptureDevice\",\n\t\"VoiceSelectOutputDevice\",\n\t\"WatchFrameDropDown_Initialize\",\n\t\"WatchFrameDropDown_OnHide\",\n\t\"WatchFrameDropDown_OnLoad\",\n\t\"WatchFrameHeaderDropDown_Initialize\",\n\t\"WatchFrameHeaderDropDown_OnLoad\",\n\t\"WatchFrameHeader_OnClick\",\n\t\"WatchFrameItem_OnClick\",\n\t\"WatchFrameItem_OnEnter\",\n\t\"WatchFrameItem_OnEvent\",\n\t\"WatchFrameItem_OnHide\",\n\t\"WatchFrameItem_OnLoad\",\n\t\"WatchFrameItem_OnShow\",\n\t\"WatchFrameItem_OnUpdate\",\n\t\"WatchFrameItem_UpdateCooldown\",\n\t\"WatchFrameLineTemplate_OnLoad\",\n\t\"WatchFrameLines_AddUpdateFunction\",\n\t\"WatchFrameLines_OnUpdate\",\n\t\"WatchFrameLines_RemoveUpdateFunction\",\n\t\"WatchFrameLinkButtonTemplate_Highlight\",\n\t\"WatchFrameLinkButtonTemplate_OnClick\",\n\t\"WatchFrameLinkButtonTemplate_OnLeftClick\",\n\t\"WatchFrameQuestPOI_OnClick\",\n\t\"WatchFrame_AbandonQuest\",\n\t\"WatchFrame_AddObjectiveHandler\",\n\t\"WatchFrame_ClearDisplay\",\n\t\"WatchFrame_Collapse\",\n\t\"WatchFrame_CollapseExpandButton_OnClick\",\n\t\"WatchFrame_DisplayQuestTimers\",\n\t\"WatchFrame_DisplayTrackedAchievements\",\n\t\"WatchFrame_DisplayTrackedQuests\",\n\t\"WatchFrame_Expand\",\n\t\"WatchFrame_GetCurrentMapQuests\",\n\t\"WatchFrame_GetVisibleIndex\",\n\t\"WatchFrame_HandleDisplayQuestTimers\",\n\t\"WatchFrame_HandleDisplayTrackedAchievements\",\n\t\"WatchFrame_HandleQuestTimerUpdate\",\n\t\"WatchFrame_MoveQuest\",\n\t\"WatchFrame_OnEvent\",\n\t\"WatchFrame_OnLoad\",\n\t\"WatchFrame_OnSizeChanged\",\n\t\"WatchFrame_OnUpdate\",\n\t\"WatchFrame_OpenAchievementFrame\",\n\t\"WatchFrame_OpenMapToQuest\",\n\t\"WatchFrame_OpenQuestLog\",\n\t\"WatchFrame_QuestTimerUpdateFunction\",\n\t\"WatchFrame_RemoveObjectiveHandler\",\n\t\"WatchFrame_ReverseQuestObjective\",\n\t\"WatchFrame_SetFilter\",\n\t\"WatchFrame_SetLine\",\n\t\"WatchFrame_SetSorting\",\n\t\"WatchFrame_SetWidth\",\n\t\"WatchFrame_ShareQuest\",\n\t\"WatchFrame_StopTrackingAchievement\",\n\t\"WatchFrame_StopTrackingQuest\",\n\t\"WatchFrame_Update\",\n\t\"WatchFrame_UpdateTimedAchievements\",\n\t\"WhoFrameColumn_SetWidth\",\n\t\"WhoFrameDropDownButton_OnClick\",\n\t\"WhoFrameDropDown_Initialize\",\n\t\"WhoFrameDropDown_OnLoad\",\n\t\"WhoFrameEditBox_OnEnterPressed\",\n\t\"WhoFrame_GetDefaultWhoCommand\",\n\t\"WhoList_Update\",\n\t\"WintergraspTimer_OnLoad\",\n\t\"WintergraspTimer_OnUpdate\",\n\t\"WithdrawGoldEditBox_Update\",\n\t\"WithdrawGuildBankMoney\",\n\t\"WorldFrame_OnLoad\",\n\t\"WorldFrame_OnUpdate\",\n\t\"WorldMapBlobFrame_CalculateHitTranslations\",\n\t\"WorldMapBlobFrame_OnLoad\",\n\t\"WorldMapBlobFrame_OnUpdate\",\n\t\"WorldMapButton_OnClick\",\n\t\"WorldMapButton_OnUpdate\",\n\t\"WorldMapContinentButton_OnClick\",\n\t\"WorldMapContinentsDropDown_Initialize\",\n\t\"WorldMapContinentsDropDown_Update\",\n\t\"WorldMapFrame_ChangeOpacity\",\n\t\"WorldMapFrame_ClearQuestPOIs\",\n\t\"WorldMapFrame_DisplayQuestPOI\",\n\t\"WorldMapFrame_DisplayQuests\",\n\t\"WorldMapFrame_GetQuestFrame\",\n\t\"WorldMapFrame_LoadContinents\",\n\t\"WorldMapFrame_LoadZones\",\n\t\"WorldMapFrame_OnEvent\",\n\t\"WorldMapFrame_OnHide\",\n\t\"WorldMapFrame_OnKeyDown\",\n\t\"WorldMapFrame_OnLoad\",\n\t\"WorldMapFrame_OnShow\",\n\t\"WorldMapFrame_OnUpdate\",\n\t\"WorldMapFrame_PingPlayerPosition\",\n\t\"WorldMapFrame_ResetFrameLevels\",\n\t\"WorldMapFrame_ResetQuestColors\",\n\t\"WorldMapFrame_ReverseQuestObjective\",\n\t\"WorldMapFrame_SaveOpacity\",\n\t\"WorldMapFrame_SelectQuestById\",\n\t\"WorldMapFrame_SelectQuestFrame\",\n\t\"WorldMapFrame_SetFullMapView\",\n\t\"WorldMapFrame_SetMapName\",\n\t\"WorldMapFrame_SetMiniMode\",\n\t\"WorldMapFrame_SetOpacity\",\n\t\"WorldMapFrame_SetPOIMaxBounds\",\n\t\"WorldMapFrame_SetQuestMapView\",\n\t\"WorldMapFrame_ToggleAdvanced\",\n\t\"WorldMapFrame_ToggleWindowSize\",\n\t\"WorldMapFrame_Update\",\n\t\"WorldMapFrame_UpdateMap\",\n\t\"WorldMapFrame_UpdateQuests\",\n\t\"WorldMapFrame_UpdateUnits\",\n\t\"WorldMapLevelButton_OnClick\",\n\t\"WorldMapLevelDown_OnClick\",\n\t\"WorldMapLevelDropDown_Initialize\",\n\t\"WorldMapLevelDropDown_Update\",\n\t\"WorldMapLevelUp_OnClick\",\n\t\"WorldMapPOI_OnClick\",\n\t\"WorldMapPOI_OnEnter\",\n\t\"WorldMapPOI_OnLeave\",\n\t\"WorldMapQuestFrame_OnEnter\",\n\t\"WorldMapQuestFrame_OnLeave\",\n\t\"WorldMapQuestFrame_OnMouseDown\",\n\t\"WorldMapQuestFrame_OnMouseUp\",\n\t\"WorldMapQuestFrame_UpdateMouseOver\",\n\t\"WorldMapQuestPOI_OnClick\",\n\t\"WorldMapQuestPOI_OnEnter\",\n\t\"WorldMapQuestPOI_OnLeave\",\n\t\"WorldMapQuestPOI_SetTooltip\",\n\t\"WorldMapQuestShowObjectives_AdjustPosition\",\n\t\"WorldMapQuestShowObjectives_Toggle\",\n\t\"WorldMapTitleButton_OnClick\",\n\t\"WorldMapTitleButton_OnDragStart\",\n\t\"WorldMapTitleButton_OnDragStop\",\n\t\"WorldMapTitleButton_OnLoad\",\n\t\"WorldMapTitleDropDown_Initialize\",\n\t\"WorldMapTitleDropDown_ToggleLock\",\n\t\"WorldMapTitleDropDown_ToggleOpacity\",\n\t\"WorldMapTrackQuest_Toggle\",\n\t\"WorldMapUnitDropDown_Initialize\",\n\t\"WorldMapUnitDropDown_OnClick\",\n\t\"WorldMapUnitDropDown_ReportAll_OnClick\",\n\t\"WorldMapUnit_OnEnter\",\n\t\"WorldMapUnit_OnEvent\",\n\t\"WorldMapUnit_OnHide\",\n\t\"WorldMapUnit_OnLeave\",\n\t\"WorldMapUnit_OnLoad\",\n\t\"WorldMapUnit_OnMouseUp\",\n\t\"WorldMapUnit_OnShow\",\n\t\"WorldMapUnit_Update\",\n\t\"WorldMapZoneButton_OnClick\",\n\t\"WorldMapZoneDropDown_Initialize\",\n\t\"WorldMapZoneDropDown_Update\",\n\t\"WorldMapZoneMinimapDropDown_GetText\",\n\t\"WorldMapZoneMinimapDropDown_Initialize\",\n\t\"WorldMapZoneMinimapDropDown_OnClick\",\n\t\"WorldMapZoneMinimapDropDown_Update\",\n\t\"WorldMapZoomOutButton_OnClick\",\n\t\"WorldMap_ClearTextures\",\n\t\"WorldMap_CreatePOI\",\n\t\"WorldMap_GetPOITextureCoords\",\n\t\"WorldMap_GetVehicleTexture\",\n\t\"WorldMap_LoadTextures\",\n\t\"WorldMap_OpenToQuest\",\n\t\"WorldMap_ToggleSizeDown\",\n\t\"WorldMap_ToggleSizeUp\",\n\t\"WorldStateAlwaysUpFrame_FilterChatMsgLoot\",\n\t\"WorldStateAlwaysUpFrame_FilterChatMsgSystem\",\n\t\"WorldStateAlwaysUpFrame_OnEvent\",\n\t\"WorldStateAlwaysUpFrame_OnLoad\",\n\t\"WorldStateAlwaysUpFrame_OnUpdate\",\n\t\"WorldStateAlwaysUpFrame_StartBGChatFilter\",\n\t\"WorldStateAlwaysUpFrame_StopBGChatFilter\",\n\t\"WorldStateAlwaysUpFrame_Update\",\n\t\"WorldStateFrame_CanShowBattlefieldMinimap\",\n\t\"WorldStateFrame_ToggleBattlefieldMinimap\",\n\t\"WorldStateScoreFrameTab_OnClick\",\n\t\"WorldStateScoreFrame_OnLoad\",\n\t\"WorldStateScoreFrame_Resize\",\n\t\"WorldStateScoreFrame_Update\",\n\t\"ZoneText_OnEvent\",\n\t\"ZoneText_OnLoad\",\n\t\"ZoomOut\",\n\t\"_ERRORMESSAGE\",\n\t\"_GetPlayerDifficultyMenuOptions\",\n\t-- tables: FrameXML, Blizzard_CombatLog, Blizzard_CombatText, Blizzard_RaidUI, Blizzard_TimeManager, Blizzard_TokenUI\n\t\"ADDED_PLAYERS\",\n\t\"AUTOCAST_SHINE_SPEEDS\",\n\t\"AUTOCAST_SHINE_TIMERS\",\n\t\"AUTOCOMPLETE_LIST\",\n\t\"AUTOCOMPLETE_LIST_TEMPLATES\",\n\t\"AchievementMicroButton\",\n\t\"ActionBarDownButton\",\n\t\"ActionBarUpButton\",\n\t\"ActionBarsPanelOptions\",\n\t\"ActionButton1\",\n\t\"ActionButton10\",\n\t\"ActionButton10Cooldown\",\n\t\"ActionButton11\",\n\t\"ActionButton11Cooldown\",\n\t\"ActionButton12\",\n\t\"ActionButton12Cooldown\",\n\t\"ActionButton1Cooldown\",\n\t\"ActionButton2\",\n\t\"ActionButton2Cooldown\",\n\t\"ActionButton3\",\n\t\"ActionButton3Cooldown\",\n\t\"ActionButton4\",\n\t\"ActionButton4Cooldown\",\n\t\"ActionButton5\",\n\t\"ActionButton5Cooldown\",\n\t\"ActionButton6\",\n\t\"ActionButton6Cooldown\",\n\t\"ActionButton7\",\n\t\"ActionButton7Cooldown\",\n\t\"ActionButton8\",\n\t\"ActionButton8Cooldown\",\n\t\"ActionButton9\",\n\t\"ActionButton9Cooldown\",\n\t\"ActionStatus\",\n\t\"AddFriendEntryFrame\",\n\t\"AddFriendEntryFrameAcceptButton\",\n\t\"AddFriendEntryFrameCancelButton\",\n\t\"AddFriendEntryFrameInfoButton\",\n\t\"AddFriendFrame\",\n\t\"AddFriendInfoFrame\",\n\t\"AddFriendInfoFrameContinueButton\",\n\t\"AddFriendNameEditBox\",\n\t\"AddFriendNoteEditBox\",\n\t\"AddFriendNoteFrame\",\n\t\"AddFriendNoteFrameScrollFrame\",\n\t\"AddFriendNoteFrameScrollFrameFocusButton\",\n\t\"AddFriendNoteFrameScrollFrameScrollBar\",\n\t\"AddFriendNoteFrameScrollFrameScrollBarScrollDownButton\",\n\t\"AddFriendNoteFrameScrollFrameScrollBarScrollUpButton\",\n\t\"AlertFrame\",\n\t\"AnimTimerFrame\",\n\t\"ArenaFrame\",\n\t\"ArenaFrameCancelButton\",\n\t\"ArenaFrameCloseButton\",\n\t\"ArenaFrameGroupJoinButton\",\n\t\"ArenaFrameJoinButton\",\n\t\"ArenaRegistrarButton1\",\n\t\"ArenaRegistrarButton2\",\n\t\"ArenaRegistrarButton3\",\n\t\"ArenaRegistrarButton4\",\n\t\"ArenaRegistrarButton5\",\n\t\"ArenaRegistrarButton6\",\n\t\"ArenaRegistrarFrame\",\n\t\"ArenaRegistrarFrameCancelButton\",\n\t\"ArenaRegistrarFrameCloseButton\",\n\t\"ArenaRegistrarFrameEditBox\",\n\t\"ArenaRegistrarFrameGoodbyeButton\",\n\t\"ArenaRegistrarFramePurchaseButton\",\n\t\"ArenaRegistrarGreetingFrame\",\n\t\"ArenaRegistrarMoneyFrame\",\n\t\"ArenaRegistrarMoneyFrameCopperButton\",\n\t\"ArenaRegistrarMoneyFrameGoldButton\",\n\t\"ArenaRegistrarMoneyFrameSilverButton\",\n\t\"ArenaRegistrarNpcNameFrame\",\n\t\"ArenaRegistrarPurchaseFrame\",\n\t\"ArenaZone1\",\n\t\"ArenaZone2\",\n\t\"ArenaZone3\",\n\t\"ArenaZone4\",\n\t\"ArenaZone5\",\n\t\"ArenaZone6\",\n\t\"AudioOptionsFrame\",\n\t\"AudioOptionsFrameCancel\",\n\t\"AudioOptionsFrameCategoryFrame\",\n\t\"AudioOptionsFrameCategoryFrameButton1\",\n\t\"AudioOptionsFrameCategoryFrameButton10\",\n\t\"AudioOptionsFrameCategoryFrameButton10Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton11\",\n\t\"AudioOptionsFrameCategoryFrameButton11Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton12\",\n\t\"AudioOptionsFrameCategoryFrameButton12Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton13\",\n\t\"AudioOptionsFrameCategoryFrameButton13Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton14\",\n\t\"AudioOptionsFrameCategoryFrameButton14Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton15\",\n\t\"AudioOptionsFrameCategoryFrameButton15Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton16\",\n\t\"AudioOptionsFrameCategoryFrameButton16Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton17\",\n\t\"AudioOptionsFrameCategoryFrameButton17Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton18\",\n\t\"AudioOptionsFrameCategoryFrameButton18Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton19\",\n\t\"AudioOptionsFrameCategoryFrameButton19Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton1Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton2\",\n\t\"AudioOptionsFrameCategoryFrameButton20\",\n\t\"AudioOptionsFrameCategoryFrameButton20Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton21\",\n\t\"AudioOptionsFrameCategoryFrameButton21Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton22\",\n\t\"AudioOptionsFrameCategoryFrameButton22Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton23\",\n\t\"AudioOptionsFrameCategoryFrameButton23Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton2Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton3\",\n\t\"AudioOptionsFrameCategoryFrameButton3Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton4\",\n\t\"AudioOptionsFrameCategoryFrameButton4Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton5\",\n\t\"AudioOptionsFrameCategoryFrameButton5Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton6\",\n\t\"AudioOptionsFrameCategoryFrameButton6Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton7\",\n\t\"AudioOptionsFrameCategoryFrameButton7Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton8\",\n\t\"AudioOptionsFrameCategoryFrameButton8Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton9\",\n\t\"AudioOptionsFrameCategoryFrameButton9Toggle\",\n\t\"AudioOptionsFrameCategoryFrameList\",\n\t\"AudioOptionsFrameCategoryFrameListScrollBar\",\n\t\"AudioOptionsFrameCategoryFrameListScrollBarScrollDownButton\",\n\t\"AudioOptionsFrameCategoryFrameListScrollBarScrollUpButton\",\n\t\"AudioOptionsFrameCategoryFrameListScrollChildFrame\",\n\t\"AudioOptionsFrameDefaults\",\n\t\"AudioOptionsFrameOkay\",\n\t\"AudioOptionsFramePanelContainer\",\n\t\"AudioOptionsSoundPanel\",\n\t\"AudioOptionsSoundPanelAmbienceVolume\",\n\t\"AudioOptionsSoundPanelAmbientSounds\",\n\t\"AudioOptionsSoundPanelEmoteSounds\",\n\t\"AudioOptionsSoundPanelEnableDSPs\",\n\t\"AudioOptionsSoundPanelEnableSound\",\n\t\"AudioOptionsSoundPanelErrorSpeech\",\n\t\"AudioOptionsSoundPanelHRTF\",\n\t\"AudioOptionsSoundPanelHardware\",\n\t\"AudioOptionsSoundPanelHardwareDropDown\",\n\t\"AudioOptionsSoundPanelHardwareDropDownButton\",\n\t\"AudioOptionsSoundPanelLoopMusic\",\n\t\"AudioOptionsSoundPanelMasterVolume\",\n\t\"AudioOptionsSoundPanelMusic\",\n\t\"AudioOptionsSoundPanelMusicVolume\",\n\t\"AudioOptionsSoundPanelPetSounds\",\n\t\"AudioOptionsSoundPanelPlayback\",\n\t\"AudioOptionsSoundPanelReverb\",\n\t\"AudioOptionsSoundPanelSoundChannels\",\n\t\"AudioOptionsSoundPanelSoundEffects\",\n\t\"AudioOptionsSoundPanelSoundInBG\",\n\t\"AudioOptionsSoundPanelSoundQuality\",\n\t\"AudioOptionsSoundPanelSoundVolume\",\n\t\"AudioOptionsSoundPanelUseHardware\",\n\t\"AudioOptionsSoundPanelVolume\",\n\t\"AudioOptionsVoicePanel\",\n\t\"AudioOptionsVoicePanelAmbienceFade\",\n\t\"AudioOptionsVoicePanelAudio\",\n\t\"AudioOptionsVoicePanelBinding\",\n\t\"AudioOptionsVoicePanelBindingOutput\",\n\t\"AudioOptionsVoicePanelChatMode1\",\n\t\"AudioOptionsVoicePanelChatMode1KeyBindingButton\",\n\t\"AudioOptionsVoicePanelChatMode2\",\n\t\"AudioOptionsVoicePanelChatModeDropDown\",\n\t\"AudioOptionsVoicePanelChatModeDropDownButton\",\n\t\"AudioOptionsVoicePanelDisabledMessage\",\n\t\"AudioOptionsVoicePanelEnableMicrophone\",\n\t\"AudioOptionsVoicePanelEnableVoice\",\n\t\"AudioOptionsVoicePanelInputDeviceDropDown\",\n\t\"AudioOptionsVoicePanelInputDeviceDropDownButton\",\n\t\"AudioOptionsVoicePanelListening\",\n\t\"AudioOptionsVoicePanelMicTest\",\n\t\"AudioOptionsVoicePanelMicrophoneVolume\",\n\t\"AudioOptionsVoicePanelMusicFade\",\n\t\"AudioOptionsVoicePanelOutputDeviceDropDown\",\n\t\"AudioOptionsVoicePanelOutputDeviceDropDownButton\",\n\t\"AudioOptionsVoicePanelPushToTalkSound\",\n\t\"AudioOptionsVoicePanelSoundFade\",\n\t\"AudioOptionsVoicePanelSpeakerVolume\",\n\t\"AudioOptionsVoicePanelTalking\",\n\t\"AudioOptionsVoicePanelVoiceActivateSlider\",\n\t\"AutoCompleteBox\",\n\t\"AutoCompleteButton1\",\n\t\"AutoCompleteButton2\",\n\t\"AutoCompleteButton3\",\n\t\"AutoCompleteButton4\",\n\t\"AutoCompleteButton5\",\n\t\"AutoFollowStatus\",\n\t\"AzerothButton\",\n\t\"BAD_BOY_UNITS\",\n\t\"BATTLEFIELD_TIMER_THRESHOLDS\",\n\t\"BNConversationInviteDialog\",\n\t\"BNConversationInviteDialogCancelButton\",\n\t\"BNConversationInviteDialogInviteButton\",\n\t\"BNConversationInviteDialogList\",\n\t\"BNConversationInviteDialogListFriend1\",\n\t\"BNConversationInviteDialogListFriend2\",\n\t\"BNConversationInviteDialogListFriend3\",\n\t\"BNConversationInviteDialogListFriend4\",\n\t\"BNConversationInviteDialogListFriend5\",\n\t\"BNConversationInviteDialogListFriend6\",\n\t\"BNConversationInviteDialogListFriend7\",\n\t\"BNConversationInviteDialogListScrollFrame\",\n\t\"BNConversationInviteDialogListScrollFrameScrollBar\",\n\t\"BNConversationInviteDialogListScrollFrameScrollBarScrollDownButton\",\n\t\"BNConversationInviteDialogListScrollFrameScrollBarScrollUpButton\",\n\t\"BNConversationInviteDialogListScrollFrameScrollChildFrame\",\n\t\"BNToastFrame\",\n\t\"BNToastFrameClickFrame\",\n\t\"BNToastFrameCloseButton\",\n\t\"BNToastFrameGlowFrame\",\n\t\"BNetEventFrame\",\n\t\"BNetReportFrame\",\n\t\"BNetReportFrameCancelButton\",\n\t\"BNetReportFrameComment\",\n\t\"BNetReportFrameCommentBox\",\n\t\"BNetReportFrameCommentScrollFrame\",\n\t\"BNetReportFrameCommentScrollFrameFocusButton\",\n\t\"BNetReportFrameCommentScrollFrameScrollBar\",\n\t\"BNetReportFrameCommentScrollFrameScrollBarScrollDownButton\",\n\t\"BNetReportFrameCommentScrollFrameScrollBarScrollUpButton\",\n\t\"BNetReportFrameReportButton\",\n\t\"BackpackTokenFrame\",\n\t\"BackpackTokenFrameToken1\",\n\t\"BackpackTokenFrameToken2\",\n\t\"BackpackTokenFrameToken3\",\n\t\"BankCloseButton\",\n\t\"BankFrame\",\n\t\"BankFrameBag1\",\n\t\"BankFrameBag1Cooldown\",\n\t\"BankFrameBag1HighlightFrame\",\n\t\"BankFrameBag2\",\n\t\"BankFrameBag2Cooldown\",\n\t\"BankFrameBag2HighlightFrame\",\n\t\"BankFrameBag3\",\n\t\"BankFrameBag3Cooldown\",\n\t\"BankFrameBag3HighlightFrame\",\n\t\"BankFrameBag4\",\n\t\"BankFrameBag4Cooldown\",\n\t\"BankFrameBag4HighlightFrame\",\n\t\"BankFrameBag5\",\n\t\"BankFrameBag5Cooldown\",\n\t\"BankFrameBag5HighlightFrame\",\n\t\"BankFrameBag6\",\n\t\"BankFrameBag6Cooldown\",\n\t\"BankFrameBag6HighlightFrame\",\n\t\"BankFrameBag7\",\n\t\"BankFrameBag7Cooldown\",\n\t\"BankFrameBag7HighlightFrame\",\n\t\"BankFrameDetailMoneyFrame\",\n\t\"BankFrameDetailMoneyFrameCopperButton\",\n\t\"BankFrameDetailMoneyFrameGoldButton\",\n\t\"BankFrameDetailMoneyFrameSilverButton\",\n\t\"BankFrameItem1\",\n\t\"BankFrameItem10\",\n\t\"BankFrameItem10Cooldown\",\n\t\"BankFrameItem11\",\n\t\"BankFrameItem11Cooldown\",\n\t\"BankFrameItem12\",\n\t\"BankFrameItem12Cooldown\",\n\t\"BankFrameItem13\",\n\t\"BankFrameItem13Cooldown\",\n\t\"BankFrameItem14\",\n\t\"BankFrameItem14Cooldown\",\n\t\"BankFrameItem15\",\n\t\"BankFrameItem15Cooldown\",\n\t\"BankFrameItem16\",\n\t\"BankFrameItem16Cooldown\",\n\t\"BankFrameItem17\",\n\t\"BankFrameItem17Cooldown\",\n\t\"BankFrameItem18\",\n\t\"BankFrameItem18Cooldown\",\n\t\"BankFrameItem19\",\n\t\"BankFrameItem19Cooldown\",\n\t\"BankFrameItem1Cooldown\",\n\t\"BankFrameItem2\",\n\t\"BankFrameItem20\",\n\t\"BankFrameItem20Cooldown\",\n\t\"BankFrameItem21\",\n\t\"BankFrameItem21Cooldown\",\n\t\"BankFrameItem22\",\n\t\"BankFrameItem22Cooldown\",\n\t\"BankFrameItem23\",\n\t\"BankFrameItem23Cooldown\",\n\t\"BankFrameItem24\",\n\t\"BankFrameItem24Cooldown\",\n\t\"BankFrameItem25\",\n\t\"BankFrameItem25Cooldown\",\n\t\"BankFrameItem26\",\n\t\"BankFrameItem26Cooldown\",\n\t\"BankFrameItem27\",\n\t\"BankFrameItem27Cooldown\",\n\t\"BankFrameItem28\",\n\t\"BankFrameItem28Cooldown\",\n\t\"BankFrameItem2Cooldown\",\n\t\"BankFrameItem3\",\n\t\"BankFrameItem3Cooldown\",\n\t\"BankFrameItem4\",\n\t\"BankFrameItem4Cooldown\",\n\t\"BankFrameItem5\",\n\t\"BankFrameItem5Cooldown\",\n\t\"BankFrameItem6\",\n\t\"BankFrameItem6Cooldown\",\n\t\"BankFrameItem7\",\n\t\"BankFrameItem7Cooldown\",\n\t\"BankFrameItem8\",\n\t\"BankFrameItem8Cooldown\",\n\t\"BankFrameItem9\",\n\t\"BankFrameItem9Cooldown\",\n\t\"BankFrameMoneyFrame\",\n\t\"BankFrameMoneyFrameCopperButton\",\n\t\"BankFrameMoneyFrameGoldButton\",\n\t\"BankFrameMoneyFrameSilverButton\",\n\t\"BankFramePurchaseButton\",\n\t\"BankFramePurchaseInfo\",\n\t\"BasicScriptErrors\",\n\t\"BasicScriptErrorsButton\",\n\t\"BattlefieldFrame\",\n\t\"BattlefieldFrameCancelButton\",\n\t\"BattlefieldFrameCloseButton\",\n\t\"BattlefieldFrameGroupJoinButton\",\n\t\"BattlefieldFrameInfoScrollFrame\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrame\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfo\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfoLossReward\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfoWinReward\",\n\t\"BattlefieldFrameInfoScrollFrameScrollBar\",\n\t\"BattlefieldFrameInfoScrollFrameScrollBarScrollDownButton\",\n\t\"BattlefieldFrameInfoScrollFrameScrollBarScrollUpButton\",\n\t\"BattlefieldFrameJoinButton\",\n\t\"BattlefieldListScrollFrame\",\n\t\"BattlefieldListScrollFrameScrollBar\",\n\t\"BattlefieldListScrollFrameScrollBarScrollDownButton\",\n\t\"BattlefieldListScrollFrameScrollBarScrollUpButton\",\n\t\"BattlefieldListScrollFrameScrollChildFrame\",\n\t\"BattlefieldTimerFrame\",\n\t\"BattlefieldZone1\",\n\t\"BattlefieldZone2\",\n\t\"BattlefieldZone3\",\n\t\"BattlefieldZone4\",\n\t\"BattlefieldZone5\",\n\t\"BattlegroundType1\",\n\t\"BattlegroundType2\",\n\t\"BattlegroundType3\",\n\t\"BattlegroundType4\",\n\t\"BattlegroundType5\",\n\t\"BattlenetPanelOptions\",\n\t\"BlizzardStopwatchOptions\",\n\t\"Blizzard_CombatLog_CurrentSettings\",\n\t\"Blizzard_CombatLog_Filter_Defaults\",\n\t\"Blizzard_CombatLog_Filters\",\n\t\"BonusActionBarFrame\",\n\t\"BonusActionButton1\",\n\t\"BonusActionButton10\",\n\t\"BonusActionButton10Cooldown\",\n\t\"BonusActionButton11\",\n\t\"BonusActionButton11Cooldown\",\n\t\"BonusActionButton12\",\n\t\"BonusActionButton12Cooldown\",\n\t\"BonusActionButton1Cooldown\",\n\t\"BonusActionButton2\",\n\t\"BonusActionButton2Cooldown\",\n\t\"BonusActionButton3\",\n\t\"BonusActionButton3Cooldown\",\n\t\"BonusActionButton4\",\n\t\"BonusActionButton4Cooldown\",\n\t\"BonusActionButton5\",\n\t\"BonusActionButton5Cooldown\",\n\t\"BonusActionButton6\",\n\t\"BonusActionButton6Cooldown\",\n\t\"BonusActionButton7\",\n\t\"BonusActionButton7Cooldown\",\n\t\"BonusActionButton8\",\n\t\"BonusActionButton8Cooldown\",\n\t\"BonusActionButton9\",\n\t\"BonusActionButton9Cooldown\",\n\t\"Boss1TargetFrame\",\n\t\"Boss1TargetFrameBuffs\",\n\t\"Boss1TargetFrameDebuffs\",\n\t\"Boss1TargetFrameDropDown\",\n\t\"Boss1TargetFrameDropDownButton\",\n\t\"Boss1TargetFrameHealthBar\",\n\t\"Boss1TargetFrameManaBar\",\n\t\"Boss1TargetFrameNumericalThreat\",\n\t\"Boss1TargetFrameTextureFrame\",\n\t\"Boss2TargetFrame\",\n\t\"Boss2TargetFrameBuffs\",\n\t\"Boss2TargetFrameDebuffs\",\n\t\"Boss2TargetFrameDropDown\",\n\t\"Boss2TargetFrameDropDownButton\",\n\t\"Boss2TargetFrameHealthBar\",\n\t\"Boss2TargetFrameManaBar\",\n\t\"Boss2TargetFrameNumericalThreat\",\n\t\"Boss2TargetFrameTextureFrame\",\n\t\"Boss3TargetFrame\",\n\t\"Boss3TargetFrameBuffs\",\n\t\"Boss3TargetFrameDebuffs\",\n\t\"Boss3TargetFrameDropDown\",\n\t\"Boss3TargetFrameDropDownButton\",\n\t\"Boss3TargetFrameHealthBar\",\n\t\"Boss3TargetFrameManaBar\",\n\t\"Boss3TargetFrameNumericalThreat\",\n\t\"Boss3TargetFrameTextureFrame\",\n\t\"Boss4TargetFrame\",\n\t\"Boss4TargetFrameBuffs\",\n\t\"Boss4TargetFrameDebuffs\",\n\t\"Boss4TargetFrameDropDown\",\n\t\"Boss4TargetFrameDropDownButton\",\n\t\"Boss4TargetFrameHealthBar\",\n\t\"Boss4TargetFrameManaBar\",\n\t\"Boss4TargetFrameNumericalThreat\",\n\t\"Boss4TargetFrameTextureFrame\",\n\t\"BuffButton1\",\n\t\"BuffButton2\",\n\t\"BuffFrame\",\n\t\"BuffsPanelOptions\",\n\t\"CHANNELPULLOUT_FADEFRAMES\",\n\t\"CHANNELPULLOUT_OPTIONS\",\n\t\"CHARACTERFRAME_SUBFRAMES\",\n\t\"CHATCONFIG_SELECTED_FILTER_COLORS\",\n\t\"CHATCONFIG_SELECTED_FILTER_FILTERS\",\n\t\"CHATCONFIG_SELECTED_FILTER_SETTINGS\",\n\t\"CHAT_CATEGORY_LIST\",\n\t\"CHAT_CHANNEL_TABBING\",\n\t\"CHAT_CONFIG_CATEGORIES\",\n\t\"CHAT_CONFIG_CHANNEL_LIST\",\n\t\"CHAT_CONFIG_CHAT_CREATURE_LEFT\",\n\t\"CHAT_CONFIG_CHAT_LEFT\",\n\t\"CHAT_CONFIG_OTHER_COMBAT\",\n\t\"CHAT_CONFIG_OTHER_PVP\",\n\t\"CHAT_CONFIG_OTHER_SYSTEM\",\n\t\"CHAT_FONT_HEIGHTS\",\n\t\"CHAT_FRAMES\",\n\t\"CHAT_FRAME_TEXTURES\",\n\t\"CHAT_INVERTED_CATEGORY_LIST\",\n\t\"CHAT_OPTIONS\",\n\t\"CLASS_BUTTONS\",\n\t\"CLASS_ICON_TCOORDS\",\n\t\"CLASS_SORT_ORDER\",\n\t\"COINFRAME_BINDING_CACHE\",\n\t\"COMBATCONFIG_COLORPICKER_FUNCTIONS\",\n\t\"COMBATLOG\",\n\t\"COMBATLOG_DEFAULT_COLORS\",\n\t\"COMBATLOG_DEFAULT_SETTINGS\",\n\t\"COMBATLOG_EVENT_LIST\",\n\t\"COMBATLOG_FLAG_LIST\",\n\t\"COMBAT_CONFIG_MESSAGESOURCES_BY\",\n\t\"COMBAT_CONFIG_MESSAGESOURCES_TO\",\n\t\"COMBAT_CONFIG_MESSAGETYPES_LEFT\",\n\t\"COMBAT_CONFIG_MESSAGETYPES_MISC\",\n\t\"COMBAT_CONFIG_MESSAGETYPES_RIGHT\",\n\t\"COMBAT_CONFIG_TABS\",\n\t\"COMBAT_CONFIG_UNIT_COLORS\",\n\t\"COMBAT_TEXT_LOCATIONS\",\n\t\"COMBAT_TEXT_RUNE\",\n\t\"COMBAT_TEXT_TO_ANIMATE\",\n\t\"COMBAT_TEXT_TYPE_INFO\",\n\t\"CURRENT_BATTLEFIELD_QUEUES\",\n\t\"CURRENT_MAP_QUESTS\",\n\t\"CameraPanelOptions\",\n\t\"CastingBarFrame\",\n\t\"ChannelButton1\",\n\t\"ChannelButton10\",\n\t\"ChannelButton10SpeakerFrame\",\n\t\"ChannelButton11\",\n\t\"ChannelButton11SpeakerFrame\",\n\t\"ChannelButton12\",\n\t\"ChannelButton12SpeakerFrame\",\n\t\"ChannelButton13\",\n\t\"ChannelButton13SpeakerFrame\",\n\t\"ChannelButton14\",\n\t\"ChannelButton14SpeakerFrame\",\n\t\"ChannelButton15\",\n\t\"ChannelButton15SpeakerFrame\",\n\t\"ChannelButton16\",\n\t\"ChannelButton16SpeakerFrame\",\n\t\"ChannelButton17\",\n\t\"ChannelButton17SpeakerFrame\",\n\t\"ChannelButton18\",\n\t\"ChannelButton18SpeakerFrame\",\n\t\"ChannelButton19\",\n\t\"ChannelButton19SpeakerFrame\",\n\t\"ChannelButton1SpeakerFrame\",\n\t\"ChannelButton2\",\n\t\"ChannelButton20\",\n\t\"ChannelButton20SpeakerFrame\",\n\t\"ChannelButton2SpeakerFrame\",\n\t\"ChannelButton3\",\n\t\"ChannelButton3SpeakerFrame\",\n\t\"ChannelButton4\",\n\t\"ChannelButton4SpeakerFrame\",\n\t\"ChannelButton5\",\n\t\"ChannelButton5SpeakerFrame\",\n\t\"ChannelButton6\",\n\t\"ChannelButton6SpeakerFrame\",\n\t\"ChannelButton7\",\n\t\"ChannelButton7SpeakerFrame\",\n\t\"ChannelButton8\",\n\t\"ChannelButton8SpeakerFrame\",\n\t\"ChannelButton9\",\n\t\"ChannelButton9SpeakerFrame\",\n\t\"ChannelFrame\",\n\t\"ChannelFrameAutoJoin\",\n\t\"ChannelFrameAutoJoinBattleground\",\n\t\"ChannelFrameAutoJoinParty\",\n\t\"ChannelFrameDaughterFrame\",\n\t\"ChannelFrameDaughterFrameCancelButton\",\n\t\"ChannelFrameDaughterFrameChannelName\",\n\t\"ChannelFrameDaughterFrameChannelPassword\",\n\t\"ChannelFrameDaughterFrameDetailCloseButton\",\n\t\"ChannelFrameDaughterFrameOkayButton\",\n\t\"ChannelFrameNewButton\",\n\t\"ChannelFrameVerticalBar\",\n\t\"ChannelListDropDown\",\n\t\"ChannelListDropDownButton\",\n\t\"ChannelListScrollChildFrame\",\n\t\"ChannelListScrollFrame\",\n\t\"ChannelListScrollFrameScrollBar\",\n\t\"ChannelListScrollFrameScrollBarScrollDownButton\",\n\t\"ChannelListScrollFrameScrollBarScrollUpButton\",\n\t\"ChannelMemberButton1\",\n\t\"ChannelMemberButton10\",\n\t\"ChannelMemberButton10Rank\",\n\t\"ChannelMemberButton10SpeakerFrame\",\n\t\"ChannelMemberButton11\",\n\t\"ChannelMemberButton11Rank\",\n\t\"ChannelMemberButton11SpeakerFrame\",\n\t\"ChannelMemberButton12\",\n\t\"ChannelMemberButton12Rank\",\n\t\"ChannelMemberButton12SpeakerFrame\",\n\t\"ChannelMemberButton13\",\n\t\"ChannelMemberButton13Rank\",\n\t\"ChannelMemberButton13SpeakerFrame\",\n\t\"ChannelMemberButton14\",\n\t\"ChannelMemberButton14Rank\",\n\t\"ChannelMemberButton14SpeakerFrame\",\n\t\"ChannelMemberButton15\",\n\t\"ChannelMemberButton15Rank\",\n\t\"ChannelMemberButton15SpeakerFrame\",\n\t\"ChannelMemberButton16\",\n\t\"ChannelMemberButton16Rank\",\n\t\"ChannelMemberButton16SpeakerFrame\",\n\t\"ChannelMemberButton17\",\n\t\"ChannelMemberButton17Rank\",\n\t\"ChannelMemberButton17SpeakerFrame\",\n\t\"ChannelMemberButton18\",\n\t\"ChannelMemberButton18Rank\",\n\t\"ChannelMemberButton18SpeakerFrame\",\n\t\"ChannelMemberButton19\",\n\t\"ChannelMemberButton19Rank\",\n\t\"ChannelMemberButton19SpeakerFrame\",\n\t\"ChannelMemberButton1Rank\",\n\t\"ChannelMemberButton1SpeakerFrame\",\n\t\"ChannelMemberButton2\",\n\t\"ChannelMemberButton20\",\n\t\"ChannelMemberButton20Rank\",\n\t\"ChannelMemberButton20SpeakerFrame\",\n\t\"ChannelMemberButton21\",\n\t\"ChannelMemberButton21Rank\",\n\t\"ChannelMemberButton21SpeakerFrame\",\n\t\"ChannelMemberButton22\",\n\t\"ChannelMemberButton22Rank\",\n\t\"ChannelMemberButton22SpeakerFrame\",\n\t\"ChannelMemberButton2Rank\",\n\t\"ChannelMemberButton2SpeakerFrame\",\n\t\"ChannelMemberButton3\",\n\t\"ChannelMemberButton3Rank\",\n\t\"ChannelMemberButton3SpeakerFrame\",\n\t\"ChannelMemberButton4\",\n\t\"ChannelMemberButton4Rank\",\n\t\"ChannelMemberButton4SpeakerFrame\",\n\t\"ChannelMemberButton5\",\n\t\"ChannelMemberButton5Rank\",\n\t\"ChannelMemberButton5SpeakerFrame\",\n\t\"ChannelMemberButton6\",\n\t\"ChannelMemberButton6Rank\",\n\t\"ChannelMemberButton6SpeakerFrame\",\n\t\"ChannelMemberButton7\",\n\t\"ChannelMemberButton7Rank\",\n\t\"ChannelMemberButton7SpeakerFrame\",\n\t\"ChannelMemberButton8\",\n\t\"ChannelMemberButton8Rank\",\n\t\"ChannelMemberButton8SpeakerFrame\",\n\t\"ChannelMemberButton9\",\n\t\"ChannelMemberButton9Rank\",\n\t\"ChannelMemberButton9SpeakerFrame\",\n\t\"ChannelMenuChatTypeGroups\",\n\t\"ChannelPullout\",\n\t\"ChannelPulloutBackground\",\n\t\"ChannelPulloutCloseButton\",\n\t\"ChannelPulloutRoster\",\n\t\"ChannelPulloutRosterButton1\",\n\t\"ChannelPulloutRosterButton1Speaker\",\n\t\"ChannelPulloutRosterButton2\",\n\t\"ChannelPulloutRosterButton2Speaker\",\n\t\"ChannelPulloutRosterButton3\",\n\t\"ChannelPulloutRosterButton3Speaker\",\n\t\"ChannelPulloutRosterButton4\",\n\t\"ChannelPulloutRosterButton4Speaker\",\n\t\"ChannelPulloutRosterButton5\",\n\t\"ChannelPulloutRosterButton5Speaker\",\n\t\"ChannelPulloutRosterScroll\",\n\t\"ChannelPulloutRosterScrollDownBtn\",\n\t\"ChannelPulloutRosterScrollUpBtn\",\n\t\"ChannelPulloutTab\",\n\t\"ChannelPulloutTabDropDown\",\n\t\"ChannelPulloutTabDropDownButton\",\n\t\"ChannelPulloutTabFlash\",\n\t\"ChannelRoster\",\n\t\"ChannelRosterDropDown\",\n\t\"ChannelRosterDropDownButton\",\n\t\"ChannelRosterScrollFrame\",\n\t\"ChannelRosterScrollFrameScrollBar\",\n\t\"ChannelRosterScrollFrameScrollBarScrollDownButton\",\n\t\"ChannelRosterScrollFrameScrollBarScrollUpButton\",\n\t\"ChannelRosterScrollFrameScrollChildFrame\",\n\t\"CharacterAmmoSlot\",\n\t\"CharacterAmmoSlotCooldown\",\n\t\"CharacterAttributesFrame\",\n\t\"CharacterBackSlot\",\n\t\"CharacterBackSlotCooldown\",\n\t\"CharacterBackSlotPopoutButton\",\n\t\"CharacterBag0Slot\",\n\t\"CharacterBag0SlotItemAnim\",\n\t\"CharacterBag1Slot\",\n\t\"CharacterBag1SlotItemAnim\",\n\t\"CharacterBag2Slot\",\n\t\"CharacterBag2SlotItemAnim\",\n\t\"CharacterBag3Slot\",\n\t\"CharacterBag3SlotItemAnim\",\n\t\"CharacterChestSlot\",\n\t\"CharacterChestSlotCooldown\",\n\t\"CharacterChestSlotPopoutButton\",\n\t\"CharacterFeetSlot\",\n\t\"CharacterFeetSlotCooldown\",\n\t\"CharacterFeetSlotPopoutButton\",\n\t\"CharacterFinger0Slot\",\n\t\"CharacterFinger0SlotCooldown\",\n\t\"CharacterFinger0SlotPopoutButton\",\n\t\"CharacterFinger1Slot\",\n\t\"CharacterFinger1SlotCooldown\",\n\t\"CharacterFinger1SlotPopoutButton\",\n\t\"CharacterFrame\",\n\t\"CharacterFrameCloseButton\",\n\t\"CharacterFrameTab1\",\n\t\"CharacterFrameTab2\",\n\t\"CharacterFrameTab3\",\n\t\"CharacterFrameTab4\",\n\t\"CharacterFrameTab5\",\n\t\"CharacterHandsSlot\",\n\t\"CharacterHandsSlotCooldown\",\n\t\"CharacterHandsSlotPopoutButton\",\n\t\"CharacterHeadSlot\",\n\t\"CharacterHeadSlotCooldown\",\n\t\"CharacterHeadSlotPopoutButton\",\n\t\"CharacterLegsSlot\",\n\t\"CharacterLegsSlotCooldown\",\n\t\"CharacterLegsSlotPopoutButton\",\n\t\"CharacterMainHandSlot\",\n\t\"CharacterMainHandSlotCooldown\",\n\t\"CharacterMainHandSlotPopoutButton\",\n\t\"CharacterMicroButton\",\n\t\"CharacterModelFrame\",\n\t\"CharacterModelFrameRotateLeftButton\",\n\t\"CharacterModelFrameRotateRightButton\",\n\t\"CharacterNameFrame\",\n\t\"CharacterNeckSlot\",\n\t\"CharacterNeckSlotCooldown\",\n\t\"CharacterNeckSlotPopoutButton\",\n\t\"CharacterRangedSlot\",\n\t\"CharacterRangedSlotCooldown\",\n\t\"CharacterRangedSlotPopoutButton\",\n\t\"CharacterResistanceFrame\",\n\t\"CharacterSecondaryHandSlot\",\n\t\"CharacterSecondaryHandSlotCooldown\",\n\t\"CharacterSecondaryHandSlotPopoutButton\",\n\t\"CharacterShirtSlot\",\n\t\"CharacterShirtSlotCooldown\",\n\t\"CharacterShirtSlotPopoutButton\",\n\t\"CharacterShoulderSlot\",\n\t\"CharacterShoulderSlotCooldown\",\n\t\"CharacterShoulderSlotPopoutButton\",\n\t\"CharacterTabardSlot\",\n\t\"CharacterTabardSlotCooldown\",\n\t\"CharacterTabardSlotPopoutButton\",\n\t\"CharacterTrinket0Slot\",\n\t\"CharacterTrinket0SlotCooldown\",\n\t\"CharacterTrinket0SlotPopoutButton\",\n\t\"CharacterTrinket1Slot\",\n\t\"CharacterTrinket1SlotCooldown\",\n\t\"CharacterTrinket1SlotPopoutButton\",\n\t\"CharacterWaistSlot\",\n\t\"CharacterWaistSlotCooldown\",\n\t\"CharacterWaistSlotPopoutButton\",\n\t\"CharacterWristSlot\",\n\t\"CharacterWristSlotCooldown\",\n\t\"CharacterWristSlotPopoutButton\",\n\t\"ChatBNPlayerDropDown\",\n\t\"ChatBNPlayerDropDownButton\",\n\t\"ChatChannelDropDown\",\n\t\"ChatChannelDropDownButton\",\n\t\"ChatConfigBackgroundFrame\",\n\t\"ChatConfigCategoryFrame\",\n\t\"ChatConfigCategoryFrameButton1\",\n\t\"ChatConfigCategoryFrameButton2\",\n\t\"ChatConfigCategoryFrameButton3\",\n\t\"ChatConfigCategoryFrameButton4\",\n\t\"ChatConfigChannelSettings\",\n\t\"ChatConfigChannelSettingsClassColorLegend\",\n\t\"ChatConfigChannelSettingsLeft\",\n\t\"ChatConfigChatSettings\",\n\t\"ChatConfigChatSettingsClassColorLegend\",\n\t\"ChatConfigChatSettingsLeft\",\n\t\"ChatConfigChatSettingsLeftCheckBox1\",\n\t\"ChatConfigChatSettingsLeftCheckBox10\",\n\t\"ChatConfigChatSettingsLeftCheckBox10Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox10ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox10ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox11\",\n\t\"ChatConfigChatSettingsLeftCheckBox11Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox11ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox11ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox12\",\n\t\"ChatConfigChatSettingsLeftCheckBox12Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox12ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox12ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox13\",\n\t\"ChatConfigChatSettingsLeftCheckBox13Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox13ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox13ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox14\",\n\t\"ChatConfigChatSettingsLeftCheckBox14Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox14ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox14ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox15\",\n\t\"ChatConfigChatSettingsLeftCheckBox15Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox15ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox15ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox16\",\n\t\"ChatConfigChatSettingsLeftCheckBox16Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox16ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox16ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox17\",\n\t\"ChatConfigChatSettingsLeftCheckBox17Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox17ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox17ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox1Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox1ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox1ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox2\",\n\t\"ChatConfigChatSettingsLeftCheckBox2Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox2ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox2ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox3\",\n\t\"ChatConfigChatSettingsLeftCheckBox3Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox3ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox3ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox4\",\n\t\"ChatConfigChatSettingsLeftCheckBox4Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox4ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox4ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox5\",\n\t\"ChatConfigChatSettingsLeftCheckBox5Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox5ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox5ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox6\",\n\t\"ChatConfigChatSettingsLeftCheckBox6Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox6ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox6ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox7\",\n\t\"ChatConfigChatSettingsLeftCheckBox7Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox7ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox7ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox8\",\n\t\"ChatConfigChatSettingsLeftCheckBox8Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox8ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox8ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox9\",\n\t\"ChatConfigChatSettingsLeftCheckBox9Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox9ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox9ColorSwatch\",\n\t\"ChatConfigCombatSettings\",\n\t\"ChatConfigCombatSettingsFilters\",\n\t\"ChatConfigCombatSettingsFiltersAddFilterButton\",\n\t\"ChatConfigCombatSettingsFiltersButton1\",\n\t\"ChatConfigCombatSettingsFiltersButton2\",\n\t\"ChatConfigCombatSettingsFiltersButton3\",\n\t\"ChatConfigCombatSettingsFiltersButton4\",\n\t\"ChatConfigCombatSettingsFiltersCopyFilterButton\",\n\t\"ChatConfigCombatSettingsFiltersDeleteButton\",\n\t\"ChatConfigCombatSettingsFiltersScrollFrame\",\n\t\"ChatConfigCombatSettingsFiltersScrollFrameScrollBar\",\n\t\"ChatConfigCombatSettingsFiltersScrollFrameScrollBarBorder\",\n\t\"ChatConfigCombatSettingsFiltersScrollFrameScrollBarScrollDownButton\",\n\t\"ChatConfigCombatSettingsFiltersScrollFrameScrollBarScrollUpButton\",\n\t\"ChatConfigCombatSettingsFiltersScrollFrameScrollChildFrame\",\n\t\"ChatConfigFrame\",\n\t\"ChatConfigFrameCancelButton\",\n\t\"ChatConfigFrameDefaultButton\",\n\t\"ChatConfigFrameOkayButton\",\n\t\"ChatConfigMoveFilterDownButton\",\n\t\"ChatConfigMoveFilterUpButton\",\n\t\"ChatConfigOtherSettings\",\n\t\"ChatConfigOtherSettingsCombat\",\n\t\"ChatConfigOtherSettingsCombatCheckBox1\",\n\t\"ChatConfigOtherSettingsCombatCheckBox10\",\n\t\"ChatConfigOtherSettingsCombatCheckBox10Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox10ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox1Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox1ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox2\",\n\t\"ChatConfigOtherSettingsCombatCheckBox2Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox2ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox3\",\n\t\"ChatConfigOtherSettingsCombatCheckBox3Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox3ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox4\",\n\t\"ChatConfigOtherSettingsCombatCheckBox4Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox4ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox5\",\n\t\"ChatConfigOtherSettingsCombatCheckBox5Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox5ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox6\",\n\t\"ChatConfigOtherSettingsCombatCheckBox6Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox6ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox7\",\n\t\"ChatConfigOtherSettingsCombatCheckBox7Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox7ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox8\",\n\t\"ChatConfigOtherSettingsCombatCheckBox8Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox8ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox9\",\n\t\"ChatConfigOtherSettingsCombatCheckBox9Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox9ColorSwatch\",\n\t\"ChatConfigOtherSettingsCreature\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox1\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox1Check\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox1ColorSwatch\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox2\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox2Check\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox2ColorSwatch\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox3\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox3Check\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox3ColorSwatch\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox4\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox4Check\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox4ColorSwatch\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox5\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox5Check\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox5ColorSwatch\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox6\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox6Check\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox6ColorSwatch\",\n\t\"ChatConfigOtherSettingsPVP\",\n\t\"ChatConfigOtherSettingsPVPCheckBox1\",\n\t\"ChatConfigOtherSettingsPVPCheckBox1Check\",\n\t\"ChatConfigOtherSettingsPVPCheckBox1ColorSwatch\",\n\t\"ChatConfigOtherSettingsPVPCheckBox2\",\n\t\"ChatConfigOtherSettingsPVPCheckBox2Check\",\n\t\"ChatConfigOtherSettingsPVPCheckBox2ColorSwatch\",\n\t\"ChatConfigOtherSettingsPVPCheckBox3\",\n\t\"ChatConfigOtherSettingsPVPCheckBox3Check\",\n\t\"ChatConfigOtherSettingsPVPCheckBox3ColorSwatch\",\n\t\"ChatConfigOtherSettingsSystem\",\n\t\"ChatConfigOtherSettingsSystemCheckBox1\",\n\t\"ChatConfigOtherSettingsSystemCheckBox1Check\",\n\t\"ChatConfigOtherSettingsSystemCheckBox1ColorSwatch\",\n\t\"ChatConfigOtherSettingsSystemCheckBox2\",\n\t\"ChatConfigOtherSettingsSystemCheckBox2Check\",\n\t\"ChatConfigOtherSettingsSystemCheckBox2ColorSwatch\",\n\t\"ChatConfigOtherSettingsSystemCheckBox3\",\n\t\"ChatConfigOtherSettingsSystemCheckBox3Check\",\n\t\"ChatConfigOtherSettingsSystemCheckBox3ColorSwatch\",\n\t\"ChatConfigOtherSettingsSystemCheckBox4\",\n\t\"ChatConfigOtherSettingsSystemCheckBox4Check\",\n\t\"ChatConfigOtherSettingsSystemCheckBox4ColorSwatch\",\n\t\"ChatConfigOtherSettingsSystemCheckBox5\",\n\t\"ChatConfigOtherSettingsSystemCheckBox5Check\",\n\t\"ChatConfigOtherSettingsSystemCheckBox5ColorSwatch\",\n\t\"ChatConfigOtherSettingsSystemCheckBox6\",\n\t\"ChatConfigOtherSettingsSystemCheckBox6Check\",\n\t\"ChatConfigOtherSettingsSystemCheckBox6ColorSwatch\",\n\t\"ChatFrame10\",\n\t\"ChatFrame10ButtonFrame\",\n\t\"ChatFrame10ButtonFrameBottomButton\",\n\t\"ChatFrame10ButtonFrameDownButton\",\n\t\"ChatFrame10ButtonFrameMinimizeButton\",\n\t\"ChatFrame10ButtonFrameUpButton\",\n\t\"ChatFrame10ClickAnywhereButton\",\n\t\"ChatFrame10EditBox\",\n\t\"ChatFrame10EditBoxLanguage\",\n\t\"ChatFrame10ResizeButton\",\n\t\"ChatFrame10Tab\",\n\t\"ChatFrame10TabDropDown\",\n\t\"ChatFrame10TabDropDownButton\",\n\t\"ChatFrame10TabFlash\",\n\t\"ChatFrame1ButtonFrame\",\n\t\"ChatFrame1ButtonFrameBottomButton\",\n\t\"ChatFrame1ButtonFrameDownButton\",\n\t\"ChatFrame1ButtonFrameMinimizeButton\",\n\t\"ChatFrame1ButtonFrameUpButton\",\n\t\"ChatFrame1ClickAnywhereButton\",\n\t\"ChatFrame1EditBoxLanguage\",\n\t\"ChatFrame1ResizeButton\",\n\t\"ChatFrame1Tab\",\n\t\"ChatFrame1TabDropDown\",\n\t\"ChatFrame1TabDropDownButton\",\n\t\"ChatFrame1TabFlash\",\n\t\"ChatFrame2ButtonFrame\",\n\t\"ChatFrame2ButtonFrameBottomButton\",\n\t\"ChatFrame2ButtonFrameDownButton\",\n\t\"ChatFrame2ButtonFrameMinimizeButton\",\n\t\"ChatFrame2ButtonFrameUpButton\",\n\t\"ChatFrame2ClickAnywhereButton\",\n\t\"ChatFrame2EditBox\",\n\t\"ChatFrame2EditBoxLanguage\",\n\t\"ChatFrame2ResizeButton\",\n\t\"ChatFrame2Tab\",\n\t\"ChatFrame2TabDropDown\",\n\t\"ChatFrame2TabDropDownButton\",\n\t\"ChatFrame2TabFlash\",\n\t\"ChatFrame3\",\n\t\"ChatFrame3ButtonFrame\",\n\t\"ChatFrame3ButtonFrameBottomButton\",\n\t\"ChatFrame3ButtonFrameDownButton\",\n\t\"ChatFrame3ButtonFrameMinimizeButton\",\n\t\"ChatFrame3ButtonFrameUpButton\",\n\t\"ChatFrame3ClickAnywhereButton\",\n\t\"ChatFrame3EditBox\",\n\t\"ChatFrame3EditBoxLanguage\",\n\t\"ChatFrame3ResizeButton\",\n\t\"ChatFrame3Tab\",\n\t\"ChatFrame3TabDropDown\",\n\t\"ChatFrame3TabDropDownButton\",\n\t\"ChatFrame3TabFlash\",\n\t\"ChatFrame4\",\n\t\"ChatFrame4ButtonFrame\",\n\t\"ChatFrame4ButtonFrameBottomButton\",\n\t\"ChatFrame4ButtonFrameDownButton\",\n\t\"ChatFrame4ButtonFrameMinimizeButton\",\n\t\"ChatFrame4ButtonFrameUpButton\",\n\t\"ChatFrame4ClickAnywhereButton\",\n\t\"ChatFrame4EditBox\",\n\t\"ChatFrame4EditBoxLanguage\",\n\t\"ChatFrame4ResizeButton\",\n\t\"ChatFrame4Tab\",\n\t\"ChatFrame4TabDropDown\",\n\t\"ChatFrame4TabDropDownButton\",\n\t\"ChatFrame4TabFlash\",\n\t\"ChatFrame5\",\n\t\"ChatFrame5ButtonFrame\",\n\t\"ChatFrame5ButtonFrameBottomButton\",\n\t\"ChatFrame5ButtonFrameDownButton\",\n\t\"ChatFrame5ButtonFrameMinimizeButton\",\n\t\"ChatFrame5ButtonFrameUpButton\",\n\t\"ChatFrame5ClickAnywhereButton\",\n\t\"ChatFrame5EditBox\",\n\t\"ChatFrame5EditBoxLanguage\",\n\t\"ChatFrame5ResizeButton\",\n\t\"ChatFrame5Tab\",\n\t\"ChatFrame5TabDropDown\",\n\t\"ChatFrame5TabDropDownButton\",\n\t\"ChatFrame5TabFlash\",\n\t\"ChatFrame6\",\n\t\"ChatFrame6ButtonFrame\",\n\t\"ChatFrame6ButtonFrameBottomButton\",\n\t\"ChatFrame6ButtonFrameDownButton\",\n\t\"ChatFrame6ButtonFrameMinimizeButton\",\n\t\"ChatFrame6ButtonFrameUpButton\",\n\t\"ChatFrame6ClickAnywhereButton\",\n\t\"ChatFrame6EditBox\",\n\t\"ChatFrame6EditBoxLanguage\",\n\t\"ChatFrame6ResizeButton\",\n\t\"ChatFrame6Tab\",\n\t\"ChatFrame6TabDropDown\",\n\t\"ChatFrame6TabDropDownButton\",\n\t\"ChatFrame6TabFlash\",\n\t\"ChatFrame7\",\n\t\"ChatFrame7ButtonFrame\",\n\t\"ChatFrame7ButtonFrameBottomButton\",\n\t\"ChatFrame7ButtonFrameDownButton\",\n\t\"ChatFrame7ButtonFrameMinimizeButton\",\n\t\"ChatFrame7ButtonFrameUpButton\",\n\t\"ChatFrame7ClickAnywhereButton\",\n\t\"ChatFrame7EditBox\",\n\t\"ChatFrame7EditBoxLanguage\",\n\t\"ChatFrame7ResizeButton\",\n\t\"ChatFrame7Tab\",\n\t\"ChatFrame7TabDropDown\",\n\t\"ChatFrame7TabDropDownButton\",\n\t\"ChatFrame7TabFlash\",\n\t\"ChatFrame8\",\n\t\"ChatFrame8ButtonFrame\",\n\t\"ChatFrame8ButtonFrameBottomButton\",\n\t\"ChatFrame8ButtonFrameDownButton\",\n\t\"ChatFrame8ButtonFrameMinimizeButton\",\n\t\"ChatFrame8ButtonFrameUpButton\",\n\t\"ChatFrame8ClickAnywhereButton\",\n\t\"ChatFrame8EditBox\",\n\t\"ChatFrame8EditBoxLanguage\",\n\t\"ChatFrame8ResizeButton\",\n\t\"ChatFrame8Tab\",\n\t\"ChatFrame8TabDropDown\",\n\t\"ChatFrame8TabDropDownButton\",\n\t\"ChatFrame8TabFlash\",\n\t\"ChatFrame9\",\n\t\"ChatFrame9ButtonFrame\",\n\t\"ChatFrame9ButtonFrameBottomButton\",\n\t\"ChatFrame9ButtonFrameDownButton\",\n\t\"ChatFrame9ButtonFrameMinimizeButton\",\n\t\"ChatFrame9ButtonFrameUpButton\",\n\t\"ChatFrame9ClickAnywhereButton\",\n\t\"ChatFrame9EditBox\",\n\t\"ChatFrame9EditBoxLanguage\",\n\t\"ChatFrame9ResizeButton\",\n\t\"ChatFrame9Tab\",\n\t\"ChatFrame9TabDropDown\",\n\t\"ChatFrame9TabDropDownButton\",\n\t\"ChatFrame9TabFlash\",\n\t\"ChatFrameMenuButton\",\n\t\"ChatMenu\",\n\t\"ChatMenuButton1\",\n\t\"ChatMenuButton10\",\n\t\"ChatMenuButton11\",\n\t\"ChatMenuButton12\",\n\t\"ChatMenuButton13\",\n\t\"ChatMenuButton14\",\n\t\"ChatMenuButton15\",\n\t\"ChatMenuButton16\",\n\t\"ChatMenuButton17\",\n\t\"ChatMenuButton18\",\n\t\"ChatMenuButton19\",\n\t\"ChatMenuButton2\",\n\t\"ChatMenuButton20\",\n\t\"ChatMenuButton21\",\n\t\"ChatMenuButton22\",\n\t\"ChatMenuButton23\",\n\t\"ChatMenuButton24\",\n\t\"ChatMenuButton25\",\n\t\"ChatMenuButton26\",\n\t\"ChatMenuButton27\",\n\t\"ChatMenuButton28\",\n\t\"ChatMenuButton29\",\n\t\"ChatMenuButton3\",\n\t\"ChatMenuButton30\",\n\t\"ChatMenuButton31\",\n\t\"ChatMenuButton32\",\n\t\"ChatMenuButton4\",\n\t\"ChatMenuButton5\",\n\t\"ChatMenuButton6\",\n\t\"ChatMenuButton7\",\n\t\"ChatMenuButton8\",\n\t\"ChatMenuButton9\",\n\t\"ChatTypeGroup\",\n\t\"ChatTypeGroupInverted\",\n\t\"ChatTypeInfo\",\n\t\"CinematicFrame\",\n\t\"CoinPickupCancelButton\",\n\t\"CoinPickupFrame\",\n\t\"CoinPickupLeftButton\",\n\t\"CoinPickupOkayButton\",\n\t\"CoinPickupRightButton\",\n\t\"ColorPickerCancelButton\",\n\t\"ColorPickerFrame\",\n\t\"ColorPickerOkayButton\",\n\t\"CombatConfigColors\",\n\t\"CombatConfigColorsColorize\",\n\t\"CombatConfigColorsColorizeDamageNumber\",\n\t\"CombatConfigColorsColorizeDamageNumberCheck\",\n\t\"CombatConfigColorsColorizeDamageNumberColorSwatch\",\n\t\"CombatConfigColorsColorizeDamageNumberSchoolColoring\",\n\t\"CombatConfigColorsColorizeDamageSchool\",\n\t\"CombatConfigColorsColorizeDamageSchoolCheck\",\n\t\"CombatConfigColorsColorizeEntireLine\",\n\t\"CombatConfigColorsColorizeEntireLineBySource\",\n\t\"CombatConfigColorsColorizeEntireLineByTarget\",\n\t\"CombatConfigColorsColorizeEntireLineCheck\",\n\t\"CombatConfigColorsColorizeSpellNames\",\n\t\"CombatConfigColorsColorizeSpellNamesCheck\",\n\t\"CombatConfigColorsColorizeSpellNamesColorSwatch\",\n\t\"CombatConfigColorsColorizeSpellNamesSchoolColoring\",\n\t\"CombatConfigColorsColorizeUnitName\",\n\t\"CombatConfigColorsColorizeUnitNameCheck\",\n\t\"CombatConfigColorsHighlighting\",\n\t\"CombatConfigColorsHighlightingAbility\",\n\t\"CombatConfigColorsHighlightingDamage\",\n\t\"CombatConfigColorsHighlightingLine\",\n\t\"CombatConfigColorsHighlightingSchool\",\n\t\"CombatConfigColorsUnitColors\",\n\t\"CombatConfigColorsUnitColorsSwatch1\",\n\t\"CombatConfigColorsUnitColorsSwatch1ColorSwatch\",\n\t\"CombatConfigColorsUnitColorsSwatch2\",\n\t\"CombatConfigColorsUnitColorsSwatch2ColorSwatch\",\n\t\"CombatConfigColorsUnitColorsSwatch3\",\n\t\"CombatConfigColorsUnitColorsSwatch3ColorSwatch\",\n\t\"CombatConfigColorsUnitColorsSwatch4\",\n\t\"CombatConfigColorsUnitColorsSwatch4ColorSwatch\",\n\t\"CombatConfigColorsUnitColorsSwatch5\",\n\t\"CombatConfigColorsUnitColorsSwatch5ColorSwatch\",\n\t\"CombatConfigColorsUnitColorsSwatch6\",\n\t\"CombatConfigColorsUnitColorsSwatch6ColorSwatch\",\n\t\"CombatConfigColorsUnitColorsSwatch7\",\n\t\"CombatConfigColorsUnitColorsSwatch7ColorSwatch\",\n\t\"CombatConfigFormatting\",\n\t\"CombatConfigFormattingFullText\",\n\t\"CombatConfigFormattingItemNames\",\n\t\"CombatConfigFormattingShowBraces\",\n\t\"CombatConfigFormattingShowTimeStamp\",\n\t\"CombatConfigFormattingSpellNames\",\n\t\"CombatConfigFormattingUnitNames\",\n\t\"CombatConfigMessageSources\",\n\t\"CombatConfigMessageSourcesDoneBy\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox1\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox1Check\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox2\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox2Check\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox3\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox3Check\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox4\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox4Check\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox5\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox5Check\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox6\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox6Check\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox7\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox7Check\",\n\t\"CombatConfigMessageSourcesDoneTo\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox1\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox1Check\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox2\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox2Check\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox3\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox3Check\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox4\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox4Check\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox5\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox5Check\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox6\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox6Check\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox7\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox7Check\",\n\t\"CombatConfigMessageTypes\",\n\t\"CombatConfigMessageTypesLeft\",\n\t\"CombatConfigMessageTypesLeftCheckBox1\",\n\t\"CombatConfigMessageTypesLeftCheckBox1_1\",\n\t\"CombatConfigMessageTypesLeftCheckBox1_2\",\n\t\"CombatConfigMessageTypesLeftCheckBox2\",\n\t\"CombatConfigMessageTypesLeftCheckBox2_1\",\n\t\"CombatConfigMessageTypesLeftCheckBox2_2\",\n\t\"CombatConfigMessageTypesLeftCheckBox3\",\n\t\"CombatConfigMessageTypesLeftCheckBox3_1\",\n\t\"CombatConfigMessageTypesLeftCheckBox3_2\",\n\t\"CombatConfigMessageTypesLeftCheckBox3_3\",\n\t\"CombatConfigMessageTypesLeftCheckBox3_4\",\n\t\"CombatConfigMessageTypesLeftCheckBox4\",\n\t\"CombatConfigMessageTypesLeftCheckBox4_1\",\n\t\"CombatConfigMessageTypesLeftCheckBox4_2\",\n\t\"CombatConfigMessageTypesLeftCheckBox4_3\",\n\t\"CombatConfigMessageTypesLeftCheckBox4_4\",\n\t\"CombatConfigMessageTypesMisc\",\n\t\"CombatConfigMessageTypesMiscCheckBox1\",\n\t\"CombatConfigMessageTypesMiscCheckBox2\",\n\t\"CombatConfigMessageTypesMiscCheckBox3\",\n\t\"CombatConfigMessageTypesMiscCheckBox4\",\n\t\"CombatConfigMessageTypesRight\",\n\t\"CombatConfigMessageTypesRightCheckBox1\",\n\t\"CombatConfigMessageTypesRightCheckBox1_1\",\n\t\"CombatConfigMessageTypesRightCheckBox1_10\",\n\t\"CombatConfigMessageTypesRightCheckBox1_2\",\n\t\"CombatConfigMessageTypesRightCheckBox1_3\",\n\t\"CombatConfigMessageTypesRightCheckBox1_4\",\n\t\"CombatConfigMessageTypesRightCheckBox1_5\",\n\t\"CombatConfigMessageTypesRightCheckBox1_6\",\n\t\"CombatConfigMessageTypesRightCheckBox1_7\",\n\t\"CombatConfigMessageTypesRightCheckBox1_8\",\n\t\"CombatConfigMessageTypesRightCheckBox1_9\",\n\t\"CombatConfigMessageTypesRightCheckBox2\",\n\t\"CombatConfigMessageTypesRightCheckBox2_1\",\n\t\"CombatConfigMessageTypesRightCheckBox2_2\",\n\t\"CombatConfigMessageTypesRightCheckBox2_3\",\n\t\"CombatConfigSettings\",\n\t\"CombatConfigSettingsNameEditBox\",\n\t\"CombatConfigSettingsParty\",\n\t\"CombatConfigSettingsRaid\",\n\t\"CombatConfigSettingsSaveButton\",\n\t\"CombatConfigSettingsShowQuickButton\",\n\t\"CombatConfigSettingsSolo\",\n\t\"CombatConfigTab1\",\n\t\"CombatConfigTab2\",\n\t\"CombatConfigTab3\",\n\t\"CombatConfigTab4\",\n\t\"CombatConfigTab5\",\n\t\"CombatFeedbackText\",\n\t\"CombatLogDefaultButton\",\n\t\"CombatLogDropDown\",\n\t\"CombatLogDropDownButton\",\n\t\"CombatLogMenuChatTypeGroups\",\n\t\"CombatLogQuickButtonFrame\",\n\t\"CombatLogQuickButtonFrameButton1\",\n\t\"CombatLogQuickButtonFrameButton2\",\n\t\"CombatLogQuickButtonFrameButton3\",\n\t\"CombatLogQuickButtonFrame_Custom\",\n\t\"CombatLogQuickButtonFrame_CustomAdditionalFilterButton\",\n\t\"CombatLogQuickButtonFrame_CustomProgressBar\",\n\t\"CombatLogUpdateFrame\",\n\t\"CombatPanelOptions\",\n\t\"CombatText\",\n\t\"ComboFrame\",\n\t\"ComboPoint1\",\n\t\"ComboPoint2\",\n\t\"ComboPoint3\",\n\t\"ComboPoint4\",\n\t\"ComboPoint5\",\n\t\"CompanionButton1\",\n\t\"CompanionButton10\",\n\t\"CompanionButton10Cooldown\",\n\t\"CompanionButton11\",\n\t\"CompanionButton11Cooldown\",\n\t\"CompanionButton12\",\n\t\"CompanionButton12Cooldown\",\n\t\"CompanionButton1Cooldown\",\n\t\"CompanionButton2\",\n\t\"CompanionButton2Cooldown\",\n\t\"CompanionButton3\",\n\t\"CompanionButton3Cooldown\",\n\t\"CompanionButton4\",\n\t\"CompanionButton4Cooldown\",\n\t\"CompanionButton5\",\n\t\"CompanionButton5Cooldown\",\n\t\"CompanionButton6\",\n\t\"CompanionButton6Cooldown\",\n\t\"CompanionButton7\",\n\t\"CompanionButton7Cooldown\",\n\t\"CompanionButton8\",\n\t\"CompanionButton8Cooldown\",\n\t\"CompanionButton9\",\n\t\"CompanionButton9Cooldown\",\n\t\"CompanionModelFrame\",\n\t\"CompanionModelFrameRotateLeftButton\",\n\t\"CompanionModelFrameRotateRightButton\",\n\t\"CompanionNextPageButton\",\n\t\"CompanionPrevPageButton\",\n\t\"CompanionSummonButton\",\n\t\"ConsolidatedBuffs\",\n\t\"ConsolidatedBuffsContainer\",\n\t\"ConsolidatedBuffsTooltip\",\n\t\"ContainerFrame1\",\n\t\"ContainerFrame10\",\n\t\"ContainerFrame10CloseButton\",\n\t\"ContainerFrame10Item1\",\n\t\"ContainerFrame10Item10\",\n\t\"ContainerFrame10Item10Cooldown\",\n\t\"ContainerFrame10Item11\",\n\t\"ContainerFrame10Item11Cooldown\",\n\t\"ContainerFrame10Item12\",\n\t\"ContainerFrame10Item12Cooldown\",\n\t\"ContainerFrame10Item13\",\n\t\"ContainerFrame10Item13Cooldown\",\n\t\"ContainerFrame10Item14\",\n\t\"ContainerFrame10Item14Cooldown\",\n\t\"ContainerFrame10Item15\",\n\t\"ContainerFrame10Item15Cooldown\",\n\t\"ContainerFrame10Item16\",\n\t\"ContainerFrame10Item16Cooldown\",\n\t\"ContainerFrame10Item17\",\n\t\"ContainerFrame10Item17Cooldown\",\n\t\"ContainerFrame10Item18\",\n\t\"ContainerFrame10Item18Cooldown\",\n\t\"ContainerFrame10Item19\",\n\t\"ContainerFrame10Item19Cooldown\",\n\t\"ContainerFrame10Item1Cooldown\",\n\t\"ContainerFrame10Item2\",\n\t\"ContainerFrame10Item20\",\n\t\"ContainerFrame10Item20Cooldown\",\n\t\"ContainerFrame10Item21\",\n\t\"ContainerFrame10Item21Cooldown\",\n\t\"ContainerFrame10Item22\",\n\t\"ContainerFrame10Item22Cooldown\",\n\t\"ContainerFrame10Item23\",\n\t\"ContainerFrame10Item23Cooldown\",\n\t\"ContainerFrame10Item24\",\n\t\"ContainerFrame10Item24Cooldown\",\n\t\"ContainerFrame10Item25\",\n\t\"ContainerFrame10Item25Cooldown\",\n\t\"ContainerFrame10Item26\",\n\t\"ContainerFrame10Item26Cooldown\",\n\t\"ContainerFrame10Item27\",\n\t\"ContainerFrame10Item27Cooldown\",\n\t\"ContainerFrame10Item28\",\n\t\"ContainerFrame10Item28Cooldown\",\n\t\"ContainerFrame10Item29\",\n\t\"ContainerFrame10Item29Cooldown\",\n\t\"ContainerFrame10Item2Cooldown\",\n\t\"ContainerFrame10Item3\",\n\t\"ContainerFrame10Item30\",\n\t\"ContainerFrame10Item30Cooldown\",\n\t\"ContainerFrame10Item31\",\n\t\"ContainerFrame10Item31Cooldown\",\n\t\"ContainerFrame10Item32\",\n\t\"ContainerFrame10Item32Cooldown\",\n\t\"ContainerFrame10Item33\",\n\t\"ContainerFrame10Item33Cooldown\",\n\t\"ContainerFrame10Item34\",\n\t\"ContainerFrame10Item34Cooldown\",\n\t\"ContainerFrame10Item35\",\n\t\"ContainerFrame10Item35Cooldown\",\n\t\"ContainerFrame10Item36\",\n\t\"ContainerFrame10Item36Cooldown\",\n\t\"ContainerFrame10Item3Cooldown\",\n\t\"ContainerFrame10Item4\",\n\t\"ContainerFrame10Item4Cooldown\",\n\t\"ContainerFrame10Item5\",\n\t\"ContainerFrame10Item5Cooldown\",\n\t\"ContainerFrame10Item6\",\n\t\"ContainerFrame10Item6Cooldown\",\n\t\"ContainerFrame10Item7\",\n\t\"ContainerFrame10Item7Cooldown\",\n\t\"ContainerFrame10Item8\",\n\t\"ContainerFrame10Item8Cooldown\",\n\t\"ContainerFrame10Item9\",\n\t\"ContainerFrame10Item9Cooldown\",\n\t\"ContainerFrame10MoneyFrame\",\n\t\"ContainerFrame10MoneyFrameCopperButton\",\n\t\"ContainerFrame10MoneyFrameGoldButton\",\n\t\"ContainerFrame10MoneyFrameSilverButton\",\n\t\"ContainerFrame10PortraitButton\",\n\t\"ContainerFrame11\",\n\t\"ContainerFrame11CloseButton\",\n\t\"ContainerFrame11Item1\",\n\t\"ContainerFrame11Item10\",\n\t\"ContainerFrame11Item10Cooldown\",\n\t\"ContainerFrame11Item11\",\n\t\"ContainerFrame11Item11Cooldown\",\n\t\"ContainerFrame11Item12\",\n\t\"ContainerFrame11Item12Cooldown\",\n\t\"ContainerFrame11Item13\",\n\t\"ContainerFrame11Item13Cooldown\",\n\t\"ContainerFrame11Item14\",\n\t\"ContainerFrame11Item14Cooldown\",\n\t\"ContainerFrame11Item15\",\n\t\"ContainerFrame11Item15Cooldown\",\n\t\"ContainerFrame11Item16\",\n\t\"ContainerFrame11Item16Cooldown\",\n\t\"ContainerFrame11Item17\",\n\t\"ContainerFrame11Item17Cooldown\",\n\t\"ContainerFrame11Item18\",\n\t\"ContainerFrame11Item18Cooldown\",\n\t\"ContainerFrame11Item19\",\n\t\"ContainerFrame11Item19Cooldown\",\n\t\"ContainerFrame11Item1Cooldown\",\n\t\"ContainerFrame11Item2\",\n\t\"ContainerFrame11Item20\",\n\t\"ContainerFrame11Item20Cooldown\",\n\t\"ContainerFrame11Item21\",\n\t\"ContainerFrame11Item21Cooldown\",\n\t\"ContainerFrame11Item22\",\n\t\"ContainerFrame11Item22Cooldown\",\n\t\"ContainerFrame11Item23\",\n\t\"ContainerFrame11Item23Cooldown\",\n\t\"ContainerFrame11Item24\",\n\t\"ContainerFrame11Item24Cooldown\",\n\t\"ContainerFrame11Item25\",\n\t\"ContainerFrame11Item25Cooldown\",\n\t\"ContainerFrame11Item26\",\n\t\"ContainerFrame11Item26Cooldown\",\n\t\"ContainerFrame11Item27\",\n\t\"ContainerFrame11Item27Cooldown\",\n\t\"ContainerFrame11Item28\",\n\t\"ContainerFrame11Item28Cooldown\",\n\t\"ContainerFrame11Item29\",\n\t\"ContainerFrame11Item29Cooldown\",\n\t\"ContainerFrame11Item2Cooldown\",\n\t\"ContainerFrame11Item3\",\n\t\"ContainerFrame11Item30\",\n\t\"ContainerFrame11Item30Cooldown\",\n\t\"ContainerFrame11Item31\",\n\t\"ContainerFrame11Item31Cooldown\",\n\t\"ContainerFrame11Item32\",\n\t\"ContainerFrame11Item32Cooldown\",\n\t\"ContainerFrame11Item33\",\n\t\"ContainerFrame11Item33Cooldown\",\n\t\"ContainerFrame11Item34\",\n\t\"ContainerFrame11Item34Cooldown\",\n\t\"ContainerFrame11Item35\",\n\t\"ContainerFrame11Item35Cooldown\",\n\t\"ContainerFrame11Item36\",\n\t\"ContainerFrame11Item36Cooldown\",\n\t\"ContainerFrame11Item3Cooldown\",\n\t\"ContainerFrame11Item4\",\n\t\"ContainerFrame11Item4Cooldown\",\n\t\"ContainerFrame11Item5\",\n\t\"ContainerFrame11Item5Cooldown\",\n\t\"ContainerFrame11Item6\",\n\t\"ContainerFrame11Item6Cooldown\",\n\t\"ContainerFrame11Item7\",\n\t\"ContainerFrame11Item7Cooldown\",\n\t\"ContainerFrame11Item8\",\n\t\"ContainerFrame11Item8Cooldown\",\n\t\"ContainerFrame11Item9\",\n\t\"ContainerFrame11Item9Cooldown\",\n\t\"ContainerFrame11MoneyFrame\",\n\t\"ContainerFrame11MoneyFrameCopperButton\",\n\t\"ContainerFrame11MoneyFrameGoldButton\",\n\t\"ContainerFrame11MoneyFrameSilverButton\",\n\t\"ContainerFrame11PortraitButton\",\n\t\"ContainerFrame12\",\n\t\"ContainerFrame12CloseButton\",\n\t\"ContainerFrame12Item1\",\n\t\"ContainerFrame12Item10\",\n\t\"ContainerFrame12Item10Cooldown\",\n\t\"ContainerFrame12Item11\",\n\t\"ContainerFrame12Item11Cooldown\",\n\t\"ContainerFrame12Item12\",\n\t\"ContainerFrame12Item12Cooldown\",\n\t\"ContainerFrame12Item13\",\n\t\"ContainerFrame12Item13Cooldown\",\n\t\"ContainerFrame12Item14\",\n\t\"ContainerFrame12Item14Cooldown\",\n\t\"ContainerFrame12Item15\",\n\t\"ContainerFrame12Item15Cooldown\",\n\t\"ContainerFrame12Item16\",\n\t\"ContainerFrame12Item16Cooldown\",\n\t\"ContainerFrame12Item17\",\n\t\"ContainerFrame12Item17Cooldown\",\n\t\"ContainerFrame12Item18\",\n\t\"ContainerFrame12Item18Cooldown\",\n\t\"ContainerFrame12Item19\",\n\t\"ContainerFrame12Item19Cooldown\",\n\t\"ContainerFrame12Item1Cooldown\",\n\t\"ContainerFrame12Item2\",\n\t\"ContainerFrame12Item20\",\n\t\"ContainerFrame12Item20Cooldown\",\n\t\"ContainerFrame12Item21\",\n\t\"ContainerFrame12Item21Cooldown\",\n\t\"ContainerFrame12Item22\",\n\t\"ContainerFrame12Item22Cooldown\",\n\t\"ContainerFrame12Item23\",\n\t\"ContainerFrame12Item23Cooldown\",\n\t\"ContainerFrame12Item24\",\n\t\"ContainerFrame12Item24Cooldown\",\n\t\"ContainerFrame12Item25\",\n\t\"ContainerFrame12Item25Cooldown\",\n\t\"ContainerFrame12Item26\",\n\t\"ContainerFrame12Item26Cooldown\",\n\t\"ContainerFrame12Item27\",\n\t\"ContainerFrame12Item27Cooldown\",\n\t\"ContainerFrame12Item28\",\n\t\"ContainerFrame12Item28Cooldown\",\n\t\"ContainerFrame12Item29\",\n\t\"ContainerFrame12Item29Cooldown\",\n\t\"ContainerFrame12Item2Cooldown\",\n\t\"ContainerFrame12Item3\",\n\t\"ContainerFrame12Item30\",\n\t\"ContainerFrame12Item30Cooldown\",\n\t\"ContainerFrame12Item31\",\n\t\"ContainerFrame12Item31Cooldown\",\n\t\"ContainerFrame12Item32\",\n\t\"ContainerFrame12Item32Cooldown\",\n\t\"ContainerFrame12Item33\",\n\t\"ContainerFrame12Item33Cooldown\",\n\t\"ContainerFrame12Item34\",\n\t\"ContainerFrame12Item34Cooldown\",\n\t\"ContainerFrame12Item35\",\n\t\"ContainerFrame12Item35Cooldown\",\n\t\"ContainerFrame12Item36\",\n\t\"ContainerFrame12Item36Cooldown\",\n\t\"ContainerFrame12Item3Cooldown\",\n\t\"ContainerFrame12Item4\",\n\t\"ContainerFrame12Item4Cooldown\",\n\t\"ContainerFrame12Item5\",\n\t\"ContainerFrame12Item5Cooldown\",\n\t\"ContainerFrame12Item6\",\n\t\"ContainerFrame12Item6Cooldown\",\n\t\"ContainerFrame12Item7\",\n\t\"ContainerFrame12Item7Cooldown\",\n\t\"ContainerFrame12Item8\",\n\t\"ContainerFrame12Item8Cooldown\",\n\t\"ContainerFrame12Item9\",\n\t\"ContainerFrame12Item9Cooldown\",\n\t\"ContainerFrame12MoneyFrame\",\n\t\"ContainerFrame12MoneyFrameCopperButton\",\n\t\"ContainerFrame12MoneyFrameGoldButton\",\n\t\"ContainerFrame12MoneyFrameSilverButton\",\n\t\"ContainerFrame12PortraitButton\",\n\t\"ContainerFrame13\",\n\t\"ContainerFrame13CloseButton\",\n\t\"ContainerFrame13Item1\",\n\t\"ContainerFrame13Item10\",\n\t\"ContainerFrame13Item10Cooldown\",\n\t\"ContainerFrame13Item11\",\n\t\"ContainerFrame13Item11Cooldown\",\n\t\"ContainerFrame13Item12\",\n\t\"ContainerFrame13Item12Cooldown\",\n\t\"ContainerFrame13Item13\",\n\t\"ContainerFrame13Item13Cooldown\",\n\t\"ContainerFrame13Item14\",\n\t\"ContainerFrame13Item14Cooldown\",\n\t\"ContainerFrame13Item15\",\n\t\"ContainerFrame13Item15Cooldown\",\n\t\"ContainerFrame13Item16\",\n\t\"ContainerFrame13Item16Cooldown\",\n\t\"ContainerFrame13Item17\",\n\t\"ContainerFrame13Item17Cooldown\",\n\t\"ContainerFrame13Item18\",\n\t\"ContainerFrame13Item18Cooldown\",\n\t\"ContainerFrame13Item19\",\n\t\"ContainerFrame13Item19Cooldown\",\n\t\"ContainerFrame13Item1Cooldown\",\n\t\"ContainerFrame13Item2\",\n\t\"ContainerFrame13Item20\",\n\t\"ContainerFrame13Item20Cooldown\",\n\t\"ContainerFrame13Item21\",\n\t\"ContainerFrame13Item21Cooldown\",\n\t\"ContainerFrame13Item22\",\n\t\"ContainerFrame13Item22Cooldown\",\n\t\"ContainerFrame13Item23\",\n\t\"ContainerFrame13Item23Cooldown\",\n\t\"ContainerFrame13Item24\",\n\t\"ContainerFrame13Item24Cooldown\",\n\t\"ContainerFrame13Item25\",\n\t\"ContainerFrame13Item25Cooldown\",\n\t\"ContainerFrame13Item26\",\n\t\"ContainerFrame13Item26Cooldown\",\n\t\"ContainerFrame13Item27\",\n\t\"ContainerFrame13Item27Cooldown\",\n\t\"ContainerFrame13Item28\",\n\t\"ContainerFrame13Item28Cooldown\",\n\t\"ContainerFrame13Item29\",\n\t\"ContainerFrame13Item29Cooldown\",\n\t\"ContainerFrame13Item2Cooldown\",\n\t\"ContainerFrame13Item3\",\n\t\"ContainerFrame13Item30\",\n\t\"ContainerFrame13Item30Cooldown\",\n\t\"ContainerFrame13Item31\",\n\t\"ContainerFrame13Item31Cooldown\",\n\t\"ContainerFrame13Item32\",\n\t\"ContainerFrame13Item32Cooldown\",\n\t\"ContainerFrame13Item33\",\n\t\"ContainerFrame13Item33Cooldown\",\n\t\"ContainerFrame13Item34\",\n\t\"ContainerFrame13Item34Cooldown\",\n\t\"ContainerFrame13Item35\",\n\t\"ContainerFrame13Item35Cooldown\",\n\t\"ContainerFrame13Item36\",\n\t\"ContainerFrame13Item36Cooldown\",\n\t\"ContainerFrame13Item3Cooldown\",\n\t\"ContainerFrame13Item4\",\n\t\"ContainerFrame13Item4Cooldown\",\n\t\"ContainerFrame13Item5\",\n\t\"ContainerFrame13Item5Cooldown\",\n\t\"ContainerFrame13Item6\",\n\t\"ContainerFrame13Item6Cooldown\",\n\t\"ContainerFrame13Item7\",\n\t\"ContainerFrame13Item7Cooldown\",\n\t\"ContainerFrame13Item8\",\n\t\"ContainerFrame13Item8Cooldown\",\n\t\"ContainerFrame13Item9\",\n\t\"ContainerFrame13Item9Cooldown\",\n\t\"ContainerFrame13MoneyFrame\",\n\t\"ContainerFrame13MoneyFrameCopperButton\",\n\t\"ContainerFrame13MoneyFrameGoldButton\",\n\t\"ContainerFrame13MoneyFrameSilverButton\",\n\t\"ContainerFrame13PortraitButton\",\n\t\"ContainerFrame1CloseButton\",\n\t\"ContainerFrame1Item1\",\n\t\"ContainerFrame1Item10\",\n\t\"ContainerFrame1Item10Cooldown\",\n\t\"ContainerFrame1Item11\",\n\t\"ContainerFrame1Item11Cooldown\",\n\t\"ContainerFrame1Item12\",\n\t\"ContainerFrame1Item12Cooldown\",\n\t\"ContainerFrame1Item13\",\n\t\"ContainerFrame1Item13Cooldown\",\n\t\"ContainerFrame1Item14\",\n\t\"ContainerFrame1Item14Cooldown\",\n\t\"ContainerFrame1Item15\",\n\t\"ContainerFrame1Item15Cooldown\",\n\t\"ContainerFrame1Item16\",\n\t\"ContainerFrame1Item16Cooldown\",\n\t\"ContainerFrame1Item17\",\n\t\"ContainerFrame1Item17Cooldown\",\n\t\"ContainerFrame1Item18\",\n\t\"ContainerFrame1Item18Cooldown\",\n\t\"ContainerFrame1Item19\",\n\t\"ContainerFrame1Item19Cooldown\",\n\t\"ContainerFrame1Item1Cooldown\",\n\t\"ContainerFrame1Item2\",\n\t\"ContainerFrame1Item20\",\n\t\"ContainerFrame1Item20Cooldown\",\n\t\"ContainerFrame1Item21\",\n\t\"ContainerFrame1Item21Cooldown\",\n\t\"ContainerFrame1Item22\",\n\t\"ContainerFrame1Item22Cooldown\",\n\t\"ContainerFrame1Item23\",\n\t\"ContainerFrame1Item23Cooldown\",\n\t\"ContainerFrame1Item24\",\n\t\"ContainerFrame1Item24Cooldown\",\n\t\"ContainerFrame1Item25\",\n\t\"ContainerFrame1Item25Cooldown\",\n\t\"ContainerFrame1Item26\",\n\t\"ContainerFrame1Item26Cooldown\",\n\t\"ContainerFrame1Item27\",\n\t\"ContainerFrame1Item27Cooldown\",\n\t\"ContainerFrame1Item28\",\n\t\"ContainerFrame1Item28Cooldown\",\n\t\"ContainerFrame1Item29\",\n\t\"ContainerFrame1Item29Cooldown\",\n\t\"ContainerFrame1Item2Cooldown\",\n\t\"ContainerFrame1Item3\",\n\t\"ContainerFrame1Item30\",\n\t\"ContainerFrame1Item30Cooldown\",\n\t\"ContainerFrame1Item31\",\n\t\"ContainerFrame1Item31Cooldown\",\n\t\"ContainerFrame1Item32\",\n\t\"ContainerFrame1Item32Cooldown\",\n\t\"ContainerFrame1Item33\",\n\t\"ContainerFrame1Item33Cooldown\",\n\t\"ContainerFrame1Item34\",\n\t\"ContainerFrame1Item34Cooldown\",\n\t\"ContainerFrame1Item35\",\n\t\"ContainerFrame1Item35Cooldown\",\n\t\"ContainerFrame1Item36\",\n\t\"ContainerFrame1Item36Cooldown\",\n\t\"ContainerFrame1Item3Cooldown\",\n\t\"ContainerFrame1Item4\",\n\t\"ContainerFrame1Item4Cooldown\",\n\t\"ContainerFrame1Item5\",\n\t\"ContainerFrame1Item5Cooldown\",\n\t\"ContainerFrame1Item6\",\n\t\"ContainerFrame1Item6Cooldown\",\n\t\"ContainerFrame1Item7\",\n\t\"ContainerFrame1Item7Cooldown\",\n\t\"ContainerFrame1Item8\",\n\t\"ContainerFrame1Item8Cooldown\",\n\t\"ContainerFrame1Item9\",\n\t\"ContainerFrame1Item9Cooldown\",\n\t\"ContainerFrame1MoneyFrame\",\n\t\"ContainerFrame1MoneyFrameCopperButton\",\n\t\"ContainerFrame1MoneyFrameGoldButton\",\n\t\"ContainerFrame1MoneyFrameSilverButton\",\n\t\"ContainerFrame1PortraitButton\",\n\t\"ContainerFrame2\",\n\t\"ContainerFrame2CloseButton\",\n\t\"ContainerFrame2Item1\",\n\t\"ContainerFrame2Item10\",\n\t\"ContainerFrame2Item10Cooldown\",\n\t\"ContainerFrame2Item11\",\n\t\"ContainerFrame2Item11Cooldown\",\n\t\"ContainerFrame2Item12\",\n\t\"ContainerFrame2Item12Cooldown\",\n\t\"ContainerFrame2Item13\",\n\t\"ContainerFrame2Item13Cooldown\",\n\t\"ContainerFrame2Item14\",\n\t\"ContainerFrame2Item14Cooldown\",\n\t\"ContainerFrame2Item15\",\n\t\"ContainerFrame2Item15Cooldown\",\n\t\"ContainerFrame2Item16\",\n\t\"ContainerFrame2Item16Cooldown\",\n\t\"ContainerFrame2Item17\",\n\t\"ContainerFrame2Item17Cooldown\",\n\t\"ContainerFrame2Item18\",\n\t\"ContainerFrame2Item18Cooldown\",\n\t\"ContainerFrame2Item19\",\n\t\"ContainerFrame2Item19Cooldown\",\n\t\"ContainerFrame2Item1Cooldown\",\n\t\"ContainerFrame2Item2\",\n\t\"ContainerFrame2Item20\",\n\t\"ContainerFrame2Item20Cooldown\",\n\t\"ContainerFrame2Item21\",\n\t\"ContainerFrame2Item21Cooldown\",\n\t\"ContainerFrame2Item22\",\n\t\"ContainerFrame2Item22Cooldown\",\n\t\"ContainerFrame2Item23\",\n\t\"ContainerFrame2Item23Cooldown\",\n\t\"ContainerFrame2Item24\",\n\t\"ContainerFrame2Item24Cooldown\",\n\t\"ContainerFrame2Item25\",\n\t\"ContainerFrame2Item25Cooldown\",\n\t\"ContainerFrame2Item26\",\n\t\"ContainerFrame2Item26Cooldown\",\n\t\"ContainerFrame2Item27\",\n\t\"ContainerFrame2Item27Cooldown\",\n\t\"ContainerFrame2Item28\",\n\t\"ContainerFrame2Item28Cooldown\",\n\t\"ContainerFrame2Item29\",\n\t\"ContainerFrame2Item29Cooldown\",\n\t\"ContainerFrame2Item2Cooldown\",\n\t\"ContainerFrame2Item3\",\n\t\"ContainerFrame2Item30\",\n\t\"ContainerFrame2Item30Cooldown\",\n\t\"ContainerFrame2Item31\",\n\t\"ContainerFrame2Item31Cooldown\",\n\t\"ContainerFrame2Item32\",\n\t\"ContainerFrame2Item32Cooldown\",\n\t\"ContainerFrame2Item33\",\n\t\"ContainerFrame2Item33Cooldown\",\n\t\"ContainerFrame2Item34\",\n\t\"ContainerFrame2Item34Cooldown\",\n\t\"ContainerFrame2Item35\",\n\t\"ContainerFrame2Item35Cooldown\",\n\t\"ContainerFrame2Item36\",\n\t\"ContainerFrame2Item36Cooldown\",\n\t\"ContainerFrame2Item3Cooldown\",\n\t\"ContainerFrame2Item4\",\n\t\"ContainerFrame2Item4Cooldown\",\n\t\"ContainerFrame2Item5\",\n\t\"ContainerFrame2Item5Cooldown\",\n\t\"ContainerFrame2Item6\",\n\t\"ContainerFrame2Item6Cooldown\",\n\t\"ContainerFrame2Item7\",\n\t\"ContainerFrame2Item7Cooldown\",\n\t\"ContainerFrame2Item8\",\n\t\"ContainerFrame2Item8Cooldown\",\n\t\"ContainerFrame2Item9\",\n\t\"ContainerFrame2Item9Cooldown\",\n\t\"ContainerFrame2MoneyFrame\",\n\t\"ContainerFrame2MoneyFrameCopperButton\",\n\t\"ContainerFrame2MoneyFrameGoldButton\",\n\t\"ContainerFrame2MoneyFrameSilverButton\",\n\t\"ContainerFrame2PortraitButton\",\n\t\"ContainerFrame3\",\n\t\"ContainerFrame3CloseButton\",\n\t\"ContainerFrame3Item1\",\n\t\"ContainerFrame3Item10\",\n\t\"ContainerFrame3Item10Cooldown\",\n\t\"ContainerFrame3Item11\",\n\t\"ContainerFrame3Item11Cooldown\",\n\t\"ContainerFrame3Item12\",\n\t\"ContainerFrame3Item12Cooldown\",\n\t\"ContainerFrame3Item13\",\n\t\"ContainerFrame3Item13Cooldown\",\n\t\"ContainerFrame3Item14\",\n\t\"ContainerFrame3Item14Cooldown\",\n\t\"ContainerFrame3Item15\",\n\t\"ContainerFrame3Item15Cooldown\",\n\t\"ContainerFrame3Item16\",\n\t\"ContainerFrame3Item16Cooldown\",\n\t\"ContainerFrame3Item17\",\n\t\"ContainerFrame3Item17Cooldown\",\n\t\"ContainerFrame3Item18\",\n\t\"ContainerFrame3Item18Cooldown\",\n\t\"ContainerFrame3Item19\",\n\t\"ContainerFrame3Item19Cooldown\",\n\t\"ContainerFrame3Item1Cooldown\",\n\t\"ContainerFrame3Item2\",\n\t\"ContainerFrame3Item20\",\n\t\"ContainerFrame3Item20Cooldown\",\n\t\"ContainerFrame3Item21\",\n\t\"ContainerFrame3Item21Cooldown\",\n\t\"ContainerFrame3Item22\",\n\t\"ContainerFrame3Item22Cooldown\",\n\t\"ContainerFrame3Item23\",\n\t\"ContainerFrame3Item23Cooldown\",\n\t\"ContainerFrame3Item24\",\n\t\"ContainerFrame3Item24Cooldown\",\n\t\"ContainerFrame3Item25\",\n\t\"ContainerFrame3Item25Cooldown\",\n\t\"ContainerFrame3Item26\",\n\t\"ContainerFrame3Item26Cooldown\",\n\t\"ContainerFrame3Item27\",\n\t\"ContainerFrame3Item27Cooldown\",\n\t\"ContainerFrame3Item28\",\n\t\"ContainerFrame3Item28Cooldown\",\n\t\"ContainerFrame3Item29\",\n\t\"ContainerFrame3Item29Cooldown\",\n\t\"ContainerFrame3Item2Cooldown\",\n\t\"ContainerFrame3Item3\",\n\t\"ContainerFrame3Item30\",\n\t\"ContainerFrame3Item30Cooldown\",\n\t\"ContainerFrame3Item31\",\n\t\"ContainerFrame3Item31Cooldown\",\n\t\"ContainerFrame3Item32\",\n\t\"ContainerFrame3Item32Cooldown\",\n\t\"ContainerFrame3Item33\",\n\t\"ContainerFrame3Item33Cooldown\",\n\t\"ContainerFrame3Item34\",\n\t\"ContainerFrame3Item34Cooldown\",\n\t\"ContainerFrame3Item35\",\n\t\"ContainerFrame3Item35Cooldown\",\n\t\"ContainerFrame3Item36\",\n\t\"ContainerFrame3Item36Cooldown\",\n\t\"ContainerFrame3Item3Cooldown\",\n\t\"ContainerFrame3Item4\",\n\t\"ContainerFrame3Item4Cooldown\",\n\t\"ContainerFrame3Item5\",\n\t\"ContainerFrame3Item5Cooldown\",\n\t\"ContainerFrame3Item6\",\n\t\"ContainerFrame3Item6Cooldown\",\n\t\"ContainerFrame3Item7\",\n\t\"ContainerFrame3Item7Cooldown\",\n\t\"ContainerFrame3Item8\",\n\t\"ContainerFrame3Item8Cooldown\",\n\t\"ContainerFrame3Item9\",\n\t\"ContainerFrame3Item9Cooldown\",\n\t\"ContainerFrame3MoneyFrame\",\n\t\"ContainerFrame3MoneyFrameCopperButton\",\n\t\"ContainerFrame3MoneyFrameGoldButton\",\n\t\"ContainerFrame3MoneyFrameSilverButton\",\n\t\"ContainerFrame3PortraitButton\",\n\t\"ContainerFrame4\",\n\t\"ContainerFrame4CloseButton\",\n\t\"ContainerFrame4Item1\",\n\t\"ContainerFrame4Item10\",\n\t\"ContainerFrame4Item10Cooldown\",\n\t\"ContainerFrame4Item11\",\n\t\"ContainerFrame4Item11Cooldown\",\n\t\"ContainerFrame4Item12\",\n\t\"ContainerFrame4Item12Cooldown\",\n\t\"ContainerFrame4Item13\",\n\t\"ContainerFrame4Item13Cooldown\",\n\t\"ContainerFrame4Item14\",\n\t\"ContainerFrame4Item14Cooldown\",\n\t\"ContainerFrame4Item15\",\n\t\"ContainerFrame4Item15Cooldown\",\n\t\"ContainerFrame4Item16\",\n\t\"ContainerFrame4Item16Cooldown\",\n\t\"ContainerFrame4Item17\",\n\t\"ContainerFrame4Item17Cooldown\",\n\t\"ContainerFrame4Item18\",\n\t\"ContainerFrame4Item18Cooldown\",\n\t\"ContainerFrame4Item19\",\n\t\"ContainerFrame4Item19Cooldown\",\n\t\"ContainerFrame4Item1Cooldown\",\n\t\"ContainerFrame4Item2\",\n\t\"ContainerFrame4Item20\",\n\t\"ContainerFrame4Item20Cooldown\",\n\t\"ContainerFrame4Item21\",\n\t\"ContainerFrame4Item21Cooldown\",\n\t\"ContainerFrame4Item22\",\n\t\"ContainerFrame4Item22Cooldown\",\n\t\"ContainerFrame4Item23\",\n\t\"ContainerFrame4Item23Cooldown\",\n\t\"ContainerFrame4Item24\",\n\t\"ContainerFrame4Item24Cooldown\",\n\t\"ContainerFrame4Item25\",\n\t\"ContainerFrame4Item25Cooldown\",\n\t\"ContainerFrame4Item26\",\n\t\"ContainerFrame4Item26Cooldown\",\n\t\"ContainerFrame4Item27\",\n\t\"ContainerFrame4Item27Cooldown\",\n\t\"ContainerFrame4Item28\",\n\t\"ContainerFrame4Item28Cooldown\",\n\t\"ContainerFrame4Item29\",\n\t\"ContainerFrame4Item29Cooldown\",\n\t\"ContainerFrame4Item2Cooldown\",\n\t\"ContainerFrame4Item3\",\n\t\"ContainerFrame4Item30\",\n\t\"ContainerFrame4Item30Cooldown\",\n\t\"ContainerFrame4Item31\",\n\t\"ContainerFrame4Item31Cooldown\",\n\t\"ContainerFrame4Item32\",\n\t\"ContainerFrame4Item32Cooldown\",\n\t\"ContainerFrame4Item33\",\n\t\"ContainerFrame4Item33Cooldown\",\n\t\"ContainerFrame4Item34\",\n\t\"ContainerFrame4Item34Cooldown\",\n\t\"ContainerFrame4Item35\",\n\t\"ContainerFrame4Item35Cooldown\",\n\t\"ContainerFrame4Item36\",\n\t\"ContainerFrame4Item36Cooldown\",\n\t\"ContainerFrame4Item3Cooldown\",\n\t\"ContainerFrame4Item4\",\n\t\"ContainerFrame4Item4Cooldown\",\n\t\"ContainerFrame4Item5\",\n\t\"ContainerFrame4Item5Cooldown\",\n\t\"ContainerFrame4Item6\",\n\t\"ContainerFrame4Item6Cooldown\",\n\t\"ContainerFrame4Item7\",\n\t\"ContainerFrame4Item7Cooldown\",\n\t\"ContainerFrame4Item8\",\n\t\"ContainerFrame4Item8Cooldown\",\n\t\"ContainerFrame4Item9\",\n\t\"ContainerFrame4Item9Cooldown\",\n\t\"ContainerFrame4MoneyFrame\",\n\t\"ContainerFrame4MoneyFrameCopperButton\",\n\t\"ContainerFrame4MoneyFrameGoldButton\",\n\t\"ContainerFrame4MoneyFrameSilverButton\",\n\t\"ContainerFrame4PortraitButton\",\n\t\"ContainerFrame5\",\n\t\"ContainerFrame5CloseButton\",\n\t\"ContainerFrame5Item1\",\n\t\"ContainerFrame5Item10\",\n\t\"ContainerFrame5Item10Cooldown\",\n\t\"ContainerFrame5Item11\",\n\t\"ContainerFrame5Item11Cooldown\",\n\t\"ContainerFrame5Item12\",\n\t\"ContainerFrame5Item12Cooldown\",\n\t\"ContainerFrame5Item13\",\n\t\"ContainerFrame5Item13Cooldown\",\n\t\"ContainerFrame5Item14\",\n\t\"ContainerFrame5Item14Cooldown\",\n\t\"ContainerFrame5Item15\",\n\t\"ContainerFrame5Item15Cooldown\",\n\t\"ContainerFrame5Item16\",\n\t\"ContainerFrame5Item16Cooldown\",\n\t\"ContainerFrame5Item17\",\n\t\"ContainerFrame5Item17Cooldown\",\n\t\"ContainerFrame5Item18\",\n\t\"ContainerFrame5Item18Cooldown\",\n\t\"ContainerFrame5Item19\",\n\t\"ContainerFrame5Item19Cooldown\",\n\t\"ContainerFrame5Item1Cooldown\",\n\t\"ContainerFrame5Item2\",\n\t\"ContainerFrame5Item20\",\n\t\"ContainerFrame5Item20Cooldown\",\n\t\"ContainerFrame5Item21\",\n\t\"ContainerFrame5Item21Cooldown\",\n\t\"ContainerFrame5Item22\",\n\t\"ContainerFrame5Item22Cooldown\",\n\t\"ContainerFrame5Item23\",\n\t\"ContainerFrame5Item23Cooldown\",\n\t\"ContainerFrame5Item24\",\n\t\"ContainerFrame5Item24Cooldown\",\n\t\"ContainerFrame5Item25\",\n\t\"ContainerFrame5Item25Cooldown\",\n\t\"ContainerFrame5Item26\",\n\t\"ContainerFrame5Item26Cooldown\",\n\t\"ContainerFrame5Item27\",\n\t\"ContainerFrame5Item27Cooldown\",\n\t\"ContainerFrame5Item28\",\n\t\"ContainerFrame5Item28Cooldown\",\n\t\"ContainerFrame5Item29\",\n\t\"ContainerFrame5Item29Cooldown\",\n\t\"ContainerFrame5Item2Cooldown\",\n\t\"ContainerFrame5Item3\",\n\t\"ContainerFrame5Item30\",\n\t\"ContainerFrame5Item30Cooldown\",\n\t\"ContainerFrame5Item31\",\n\t\"ContainerFrame5Item31Cooldown\",\n\t\"ContainerFrame5Item32\",\n\t\"ContainerFrame5Item32Cooldown\",\n\t\"ContainerFrame5Item33\",\n\t\"ContainerFrame5Item33Cooldown\",\n\t\"ContainerFrame5Item34\",\n\t\"ContainerFrame5Item34Cooldown\",\n\t\"ContainerFrame5Item35\",\n\t\"ContainerFrame5Item35Cooldown\",\n\t\"ContainerFrame5Item36\",\n\t\"ContainerFrame5Item36Cooldown\",\n\t\"ContainerFrame5Item3Cooldown\",\n\t\"ContainerFrame5Item4\",\n\t\"ContainerFrame5Item4Cooldown\",\n\t\"ContainerFrame5Item5\",\n\t\"ContainerFrame5Item5Cooldown\",\n\t\"ContainerFrame5Item6\",\n\t\"ContainerFrame5Item6Cooldown\",\n\t\"ContainerFrame5Item7\",\n\t\"ContainerFrame5Item7Cooldown\",\n\t\"ContainerFrame5Item8\",\n\t\"ContainerFrame5Item8Cooldown\",\n\t\"ContainerFrame5Item9\",\n\t\"ContainerFrame5Item9Cooldown\",\n\t\"ContainerFrame5MoneyFrame\",\n\t\"ContainerFrame5MoneyFrameCopperButton\",\n\t\"ContainerFrame5MoneyFrameGoldButton\",\n\t\"ContainerFrame5MoneyFrameSilverButton\",\n\t\"ContainerFrame5PortraitButton\",\n\t\"ContainerFrame6\",\n\t\"ContainerFrame6CloseButton\",\n\t\"ContainerFrame6Item1\",\n\t\"ContainerFrame6Item10\",\n\t\"ContainerFrame6Item10Cooldown\",\n\t\"ContainerFrame6Item11\",\n\t\"ContainerFrame6Item11Cooldown\",\n\t\"ContainerFrame6Item12\",\n\t\"ContainerFrame6Item12Cooldown\",\n\t\"ContainerFrame6Item13\",\n\t\"ContainerFrame6Item13Cooldown\",\n\t\"ContainerFrame6Item14\",\n\t\"ContainerFrame6Item14Cooldown\",\n\t\"ContainerFrame6Item15\",\n\t\"ContainerFrame6Item15Cooldown\",\n\t\"ContainerFrame6Item16\",\n\t\"ContainerFrame6Item16Cooldown\",\n\t\"ContainerFrame6Item17\",\n\t\"ContainerFrame6Item17Cooldown\",\n\t\"ContainerFrame6Item18\",\n\t\"ContainerFrame6Item18Cooldown\",\n\t\"ContainerFrame6Item19\",\n\t\"ContainerFrame6Item19Cooldown\",\n\t\"ContainerFrame6Item1Cooldown\",\n\t\"ContainerFrame6Item2\",\n\t\"ContainerFrame6Item20\",\n\t\"ContainerFrame6Item20Cooldown\",\n\t\"ContainerFrame6Item21\",\n\t\"ContainerFrame6Item21Cooldown\",\n\t\"ContainerFrame6Item22\",\n\t\"ContainerFrame6Item22Cooldown\",\n\t\"ContainerFrame6Item23\",\n\t\"ContainerFrame6Item23Cooldown\",\n\t\"ContainerFrame6Item24\",\n\t\"ContainerFrame6Item24Cooldown\",\n\t\"ContainerFrame6Item25\",\n\t\"ContainerFrame6Item25Cooldown\",\n\t\"ContainerFrame6Item26\",\n\t\"ContainerFrame6Item26Cooldown\",\n\t\"ContainerFrame6Item27\",\n\t\"ContainerFrame6Item27Cooldown\",\n\t\"ContainerFrame6Item28\",\n\t\"ContainerFrame6Item28Cooldown\",\n\t\"ContainerFrame6Item29\",\n\t\"ContainerFrame6Item29Cooldown\",\n\t\"ContainerFrame6Item2Cooldown\",\n\t\"ContainerFrame6Item3\",\n\t\"ContainerFrame6Item30\",\n\t\"ContainerFrame6Item30Cooldown\",\n\t\"ContainerFrame6Item31\",\n\t\"ContainerFrame6Item31Cooldown\",\n\t\"ContainerFrame6Item32\",\n\t\"ContainerFrame6Item32Cooldown\",\n\t\"ContainerFrame6Item33\",\n\t\"ContainerFrame6Item33Cooldown\",\n\t\"ContainerFrame6Item34\",\n\t\"ContainerFrame6Item34Cooldown\",\n\t\"ContainerFrame6Item35\",\n\t\"ContainerFrame6Item35Cooldown\",\n\t\"ContainerFrame6Item36\",\n\t\"ContainerFrame6Item36Cooldown\",\n\t\"ContainerFrame6Item3Cooldown\",\n\t\"ContainerFrame6Item4\",\n\t\"ContainerFrame6Item4Cooldown\",\n\t\"ContainerFrame6Item5\",\n\t\"ContainerFrame6Item5Cooldown\",\n\t\"ContainerFrame6Item6\",\n\t\"ContainerFrame6Item6Cooldown\",\n\t\"ContainerFrame6Item7\",\n\t\"ContainerFrame6Item7Cooldown\",\n\t\"ContainerFrame6Item8\",\n\t\"ContainerFrame6Item8Cooldown\",\n\t\"ContainerFrame6Item9\",\n\t\"ContainerFrame6Item9Cooldown\",\n\t\"ContainerFrame6MoneyFrame\",\n\t\"ContainerFrame6MoneyFrameCopperButton\",\n\t\"ContainerFrame6MoneyFrameGoldButton\",\n\t\"ContainerFrame6MoneyFrameSilverButton\",\n\t\"ContainerFrame6PortraitButton\",\n\t\"ContainerFrame7\",\n\t\"ContainerFrame7CloseButton\",\n\t\"ContainerFrame7Item1\",\n\t\"ContainerFrame7Item10\",\n\t\"ContainerFrame7Item10Cooldown\",\n\t\"ContainerFrame7Item11\",\n\t\"ContainerFrame7Item11Cooldown\",\n\t\"ContainerFrame7Item12\",\n\t\"ContainerFrame7Item12Cooldown\",\n\t\"ContainerFrame7Item13\",\n\t\"ContainerFrame7Item13Cooldown\",\n\t\"ContainerFrame7Item14\",\n\t\"ContainerFrame7Item14Cooldown\",\n\t\"ContainerFrame7Item15\",\n\t\"ContainerFrame7Item15Cooldown\",\n\t\"ContainerFrame7Item16\",\n\t\"ContainerFrame7Item16Cooldown\",\n\t\"ContainerFrame7Item17\",\n\t\"ContainerFrame7Item17Cooldown\",\n\t\"ContainerFrame7Item18\",\n\t\"ContainerFrame7Item18Cooldown\",\n\t\"ContainerFrame7Item19\",\n\t\"ContainerFrame7Item19Cooldown\",\n\t\"ContainerFrame7Item1Cooldown\",\n\t\"ContainerFrame7Item2\",\n\t\"ContainerFrame7Item20\",\n\t\"ContainerFrame7Item20Cooldown\",\n\t\"ContainerFrame7Item21\",\n\t\"ContainerFrame7Item21Cooldown\",\n\t\"ContainerFrame7Item22\",\n\t\"ContainerFrame7Item22Cooldown\",\n\t\"ContainerFrame7Item23\",\n\t\"ContainerFrame7Item23Cooldown\",\n\t\"ContainerFrame7Item24\",\n\t\"ContainerFrame7Item24Cooldown\",\n\t\"ContainerFrame7Item25\",\n\t\"ContainerFrame7Item25Cooldown\",\n\t\"ContainerFrame7Item26\",\n\t\"ContainerFrame7Item26Cooldown\",\n\t\"ContainerFrame7Item27\",\n\t\"ContainerFrame7Item27Cooldown\",\n\t\"ContainerFrame7Item28\",\n\t\"ContainerFrame7Item28Cooldown\",\n\t\"ContainerFrame7Item29\",\n\t\"ContainerFrame7Item29Cooldown\",\n\t\"ContainerFrame7Item2Cooldown\",\n\t\"ContainerFrame7Item3\",\n\t\"ContainerFrame7Item30\",\n\t\"ContainerFrame7Item30Cooldown\",\n\t\"ContainerFrame7Item31\",\n\t\"ContainerFrame7Item31Cooldown\",\n\t\"ContainerFrame7Item32\",\n\t\"ContainerFrame7Item32Cooldown\",\n\t\"ContainerFrame7Item33\",\n\t\"ContainerFrame7Item33Cooldown\",\n\t\"ContainerFrame7Item34\",\n\t\"ContainerFrame7Item34Cooldown\",\n\t\"ContainerFrame7Item35\",\n\t\"ContainerFrame7Item35Cooldown\",\n\t\"ContainerFrame7Item36\",\n\t\"ContainerFrame7Item36Cooldown\",\n\t\"ContainerFrame7Item3Cooldown\",\n\t\"ContainerFrame7Item4\",\n\t\"ContainerFrame7Item4Cooldown\",\n\t\"ContainerFrame7Item5\",\n\t\"ContainerFrame7Item5Cooldown\",\n\t\"ContainerFrame7Item6\",\n\t\"ContainerFrame7Item6Cooldown\",\n\t\"ContainerFrame7Item7\",\n\t\"ContainerFrame7Item7Cooldown\",\n\t\"ContainerFrame7Item8\",\n\t\"ContainerFrame7Item8Cooldown\",\n\t\"ContainerFrame7Item9\",\n\t\"ContainerFrame7Item9Cooldown\",\n\t\"ContainerFrame7MoneyFrame\",\n\t\"ContainerFrame7MoneyFrameCopperButton\",\n\t\"ContainerFrame7MoneyFrameGoldButton\",\n\t\"ContainerFrame7MoneyFrameSilverButton\",\n\t\"ContainerFrame7PortraitButton\",\n\t\"ContainerFrame8\",\n\t\"ContainerFrame8CloseButton\",\n\t\"ContainerFrame8Item1\",\n\t\"ContainerFrame8Item10\",\n\t\"ContainerFrame8Item10Cooldown\",\n\t\"ContainerFrame8Item11\",\n\t\"ContainerFrame8Item11Cooldown\",\n\t\"ContainerFrame8Item12\",\n\t\"ContainerFrame8Item12Cooldown\",\n\t\"ContainerFrame8Item13\",\n\t\"ContainerFrame8Item13Cooldown\",\n\t\"ContainerFrame8Item14\",\n\t\"ContainerFrame8Item14Cooldown\",\n\t\"ContainerFrame8Item15\",\n\t\"ContainerFrame8Item15Cooldown\",\n\t\"ContainerFrame8Item16\",\n\t\"ContainerFrame8Item16Cooldown\",\n\t\"ContainerFrame8Item17\",\n\t\"ContainerFrame8Item17Cooldown\",\n\t\"ContainerFrame8Item18\",\n\t\"ContainerFrame8Item18Cooldown\",\n\t\"ContainerFrame8Item19\",\n\t\"ContainerFrame8Item19Cooldown\",\n\t\"ContainerFrame8Item1Cooldown\",\n\t\"ContainerFrame8Item2\",\n\t\"ContainerFrame8Item20\",\n\t\"ContainerFrame8Item20Cooldown\",\n\t\"ContainerFrame8Item21\",\n\t\"ContainerFrame8Item21Cooldown\",\n\t\"ContainerFrame8Item22\",\n\t\"ContainerFrame8Item22Cooldown\",\n\t\"ContainerFrame8Item23\",\n\t\"ContainerFrame8Item23Cooldown\",\n\t\"ContainerFrame8Item24\",\n\t\"ContainerFrame8Item24Cooldown\",\n\t\"ContainerFrame8Item25\",\n\t\"ContainerFrame8Item25Cooldown\",\n\t\"ContainerFrame8Item26\",\n\t\"ContainerFrame8Item26Cooldown\",\n\t\"ContainerFrame8Item27\",\n\t\"ContainerFrame8Item27Cooldown\",\n\t\"ContainerFrame8Item28\",\n\t\"ContainerFrame8Item28Cooldown\",\n\t\"ContainerFrame8Item29\",\n\t\"ContainerFrame8Item29Cooldown\",\n\t\"ContainerFrame8Item2Cooldown\",\n\t\"ContainerFrame8Item3\",\n\t\"ContainerFrame8Item30\",\n\t\"ContainerFrame8Item30Cooldown\",\n\t\"ContainerFrame8Item31\",\n\t\"ContainerFrame8Item31Cooldown\",\n\t\"ContainerFrame8Item32\",\n\t\"ContainerFrame8Item32Cooldown\",\n\t\"ContainerFrame8Item33\",\n\t\"ContainerFrame8Item33Cooldown\",\n\t\"ContainerFrame8Item34\",\n\t\"ContainerFrame8Item34Cooldown\",\n\t\"ContainerFrame8Item35\",\n\t\"ContainerFrame8Item35Cooldown\",\n\t\"ContainerFrame8Item36\",\n\t\"ContainerFrame8Item36Cooldown\",\n\t\"ContainerFrame8Item3Cooldown\",\n\t\"ContainerFrame8Item4\",\n\t\"ContainerFrame8Item4Cooldown\",\n\t\"ContainerFrame8Item5\",\n\t\"ContainerFrame8Item5Cooldown\",\n\t\"ContainerFrame8Item6\",\n\t\"ContainerFrame8Item6Cooldown\",\n\t\"ContainerFrame8Item7\",\n\t\"ContainerFrame8Item7Cooldown\",\n\t\"ContainerFrame8Item8\",\n\t\"ContainerFrame8Item8Cooldown\",\n\t\"ContainerFrame8Item9\",\n\t\"ContainerFrame8Item9Cooldown\",\n\t\"ContainerFrame8MoneyFrame\",\n\t\"ContainerFrame8MoneyFrameCopperButton\",\n\t\"ContainerFrame8MoneyFrameGoldButton\",\n\t\"ContainerFrame8MoneyFrameSilverButton\",\n\t\"ContainerFrame8PortraitButton\",\n\t\"ContainerFrame9\",\n\t\"ContainerFrame9CloseButton\",\n\t\"ContainerFrame9Item1\",\n\t\"ContainerFrame9Item10\",\n\t\"ContainerFrame9Item10Cooldown\",\n\t\"ContainerFrame9Item11\",\n\t\"ContainerFrame9Item11Cooldown\",\n\t\"ContainerFrame9Item12\",\n\t\"ContainerFrame9Item12Cooldown\",\n\t\"ContainerFrame9Item13\",\n\t\"ContainerFrame9Item13Cooldown\",\n\t\"ContainerFrame9Item14\",\n\t\"ContainerFrame9Item14Cooldown\",\n\t\"ContainerFrame9Item15\",\n\t\"ContainerFrame9Item15Cooldown\",\n\t\"ContainerFrame9Item16\",\n\t\"ContainerFrame9Item16Cooldown\",\n\t\"ContainerFrame9Item17\",\n\t\"ContainerFrame9Item17Cooldown\",\n\t\"ContainerFrame9Item18\",\n\t\"ContainerFrame9Item18Cooldown\",\n\t\"ContainerFrame9Item19\",\n\t\"ContainerFrame9Item19Cooldown\",\n\t\"ContainerFrame9Item1Cooldown\",\n\t\"ContainerFrame9Item2\",\n\t\"ContainerFrame9Item20\",\n\t\"ContainerFrame9Item20Cooldown\",\n\t\"ContainerFrame9Item21\",\n\t\"ContainerFrame9Item21Cooldown\",\n\t\"ContainerFrame9Item22\",\n\t\"ContainerFrame9Item22Cooldown\",\n\t\"ContainerFrame9Item23\",\n\t\"ContainerFrame9Item23Cooldown\",\n\t\"ContainerFrame9Item24\",\n\t\"ContainerFrame9Item24Cooldown\",\n\t\"ContainerFrame9Item25\",\n\t\"ContainerFrame9Item25Cooldown\",\n\t\"ContainerFrame9Item26\",\n\t\"ContainerFrame9Item26Cooldown\",\n\t\"ContainerFrame9Item27\",\n\t\"ContainerFrame9Item27Cooldown\",\n\t\"ContainerFrame9Item28\",\n\t\"ContainerFrame9Item28Cooldown\",\n\t\"ContainerFrame9Item29\",\n\t\"ContainerFrame9Item29Cooldown\",\n\t\"ContainerFrame9Item2Cooldown\",\n\t\"ContainerFrame9Item3\",\n\t\"ContainerFrame9Item30\",\n\t\"ContainerFrame9Item30Cooldown\",\n\t\"ContainerFrame9Item31\",\n\t\"ContainerFrame9Item31Cooldown\",\n\t\"ContainerFrame9Item32\",\n\t\"ContainerFrame9Item32Cooldown\",\n\t\"ContainerFrame9Item33\",\n\t\"ContainerFrame9Item33Cooldown\",\n\t\"ContainerFrame9Item34\",\n\t\"ContainerFrame9Item34Cooldown\",\n\t\"ContainerFrame9Item35\",\n\t\"ContainerFrame9Item35Cooldown\",\n\t\"ContainerFrame9Item36\",\n\t\"ContainerFrame9Item36Cooldown\",\n\t\"ContainerFrame9Item3Cooldown\",\n\t\"ContainerFrame9Item4\",\n\t\"ContainerFrame9Item4Cooldown\",\n\t\"ContainerFrame9Item5\",\n\t\"ContainerFrame9Item5Cooldown\",\n\t\"ContainerFrame9Item6\",\n\t\"ContainerFrame9Item6Cooldown\",\n\t\"ContainerFrame9Item7\",\n\t\"ContainerFrame9Item7Cooldown\",\n\t\"ContainerFrame9Item8\",\n\t\"ContainerFrame9Item8Cooldown\",\n\t\"ContainerFrame9Item9\",\n\t\"ContainerFrame9Item9Cooldown\",\n\t\"ContainerFrame9MoneyFrame\",\n\t\"ContainerFrame9MoneyFrameCopperButton\",\n\t\"ContainerFrame9MoneyFrameGoldButton\",\n\t\"ContainerFrame9MoneyFrameSilverButton\",\n\t\"ContainerFrame9PortraitButton\",\n\t\"ControlsPanelOptions\",\n\t\"CustomClassLayouts\",\n\t\"DEFAULT_CHATFRAME_COLOR\",\n\t\"DEFAULT_COMBATLOG_FILTER_TEMPLATE\",\n\t\"DEFAULT_TAB_SELECTED_COLOR_TABLE\",\n\t\"DOCKED_CHAT_FRAMES\",\n\t\"DOCK_COPY\",\n\t\"DebuffTypeColor\",\n\t\"DebuffTypeSymbol\",\n\t\"DisplayPanelOptions\",\n\t\"DressUpFrame\",\n\t\"DressUpFrameCancelButton\",\n\t\"DressUpFrameCloseButton\",\n\t\"DressUpFrameResetButton\",\n\t\"DressUpModel\",\n\t\"DressUpModelRotateLeftButton\",\n\t\"DressUpModelRotateRightButton\",\n\t\"DropDownList1\",\n\t\"DropDownList1Backdrop\",\n\t\"DropDownList1Button1\",\n\t\"DropDownList1Button10\",\n\t\"DropDownList1Button10ColorSwatch\",\n\t\"DropDownList1Button10ExpandArrow\",\n\t\"DropDownList1Button10InvisibleButton\",\n\t\"DropDownList1Button11\",\n\t\"DropDownList1Button11ColorSwatch\",\n\t\"DropDownList1Button11ExpandArrow\",\n\t\"DropDownList1Button11InvisibleButton\",\n\t\"DropDownList1Button12\",\n\t\"DropDownList1Button12ColorSwatch\",\n\t\"DropDownList1Button12ExpandArrow\",\n\t\"DropDownList1Button12InvisibleButton\",\n\t\"DropDownList1Button13\",\n\t\"DropDownList1Button13ColorSwatch\",\n\t\"DropDownList1Button13ExpandArrow\",\n\t\"DropDownList1Button13InvisibleButton\",\n\t\"DropDownList1Button14\",\n\t\"DropDownList1Button14ColorSwatch\",\n\t\"DropDownList1Button14ExpandArrow\",\n\t\"DropDownList1Button14InvisibleButton\",\n\t\"DropDownList1Button15\",\n\t\"DropDownList1Button15ColorSwatch\",\n\t\"DropDownList1Button15ExpandArrow\",\n\t\"DropDownList1Button15InvisibleButton\",\n\t\"DropDownList1Button16\",\n\t\"DropDownList1Button16ColorSwatch\",\n\t\"DropDownList1Button16ExpandArrow\",\n\t\"DropDownList1Button16InvisibleButton\",\n\t\"DropDownList1Button17\",\n\t\"DropDownList1Button17ColorSwatch\",\n\t\"DropDownList1Button17ExpandArrow\",\n\t\"DropDownList1Button17InvisibleButton\",\n\t\"DropDownList1Button18\",\n\t\"DropDownList1Button18ColorSwatch\",\n\t\"DropDownList1Button18ExpandArrow\",\n\t\"DropDownList1Button18InvisibleButton\",\n\t\"DropDownList1Button19\",\n\t\"DropDownList1Button19ColorSwatch\",\n\t\"DropDownList1Button19ExpandArrow\",\n\t\"DropDownList1Button19InvisibleButton\",\n\t\"DropDownList1Button1ColorSwatch\",\n\t\"DropDownList1Button1ExpandArrow\",\n\t\"DropDownList1Button1InvisibleButton\",\n\t\"DropDownList1Button2\",\n\t\"DropDownList1Button20\",\n\t\"DropDownList1Button20ColorSwatch\",\n\t\"DropDownList1Button20ExpandArrow\",\n\t\"DropDownList1Button20InvisibleButton\",\n\t\"DropDownList1Button21\",\n\t\"DropDownList1Button21ColorSwatch\",\n\t\"DropDownList1Button21ExpandArrow\",\n\t\"DropDownList1Button21InvisibleButton\",\n\t\"DropDownList1Button22\",\n\t\"DropDownList1Button22ColorSwatch\",\n\t\"DropDownList1Button22ExpandArrow\",\n\t\"DropDownList1Button22InvisibleButton\",\n\t\"DropDownList1Button23\",\n\t\"DropDownList1Button23ColorSwatch\",\n\t\"DropDownList1Button23ExpandArrow\",\n\t\"DropDownList1Button23InvisibleButton\",\n\t\"DropDownList1Button24\",\n\t\"DropDownList1Button24ColorSwatch\",\n\t\"DropDownList1Button24ExpandArrow\",\n\t\"DropDownList1Button24InvisibleButton\",\n\t\"DropDownList1Button2ColorSwatch\",\n\t\"DropDownList1Button2ExpandArrow\",\n\t\"DropDownList1Button2InvisibleButton\",\n\t\"DropDownList1Button3\",\n\t\"DropDownList1Button3ColorSwatch\",\n\t\"DropDownList1Button3ExpandArrow\",\n\t\"DropDownList1Button3InvisibleButton\",\n\t\"DropDownList1Button4\",\n\t\"DropDownList1Button4ColorSwatch\",\n\t\"DropDownList1Button4ExpandArrow\",\n\t\"DropDownList1Button4InvisibleButton\",\n\t\"DropDownList1Button5\",\n\t\"DropDownList1Button5ColorSwatch\",\n\t\"DropDownList1Button5ExpandArrow\",\n\t\"DropDownList1Button5InvisibleButton\",\n\t\"DropDownList1Button6\",\n\t\"DropDownList1Button6ColorSwatch\",\n\t\"DropDownList1Button6ExpandArrow\",\n\t\"DropDownList1Button6InvisibleButton\",\n\t\"DropDownList1Button7\",\n\t\"DropDownList1Button7ColorSwatch\",\n\t\"DropDownList1Button7ExpandArrow\",\n\t\"DropDownList1Button7InvisibleButton\",\n\t\"DropDownList1Button8\",\n\t\"DropDownList1Button8ColorSwatch\",\n\t\"DropDownList1Button8ExpandArrow\",\n\t\"DropDownList1Button8InvisibleButton\",\n\t\"DropDownList1Button9\",\n\t\"DropDownList1Button9ColorSwatch\",\n\t\"DropDownList1Button9ExpandArrow\",\n\t\"DropDownList1Button9InvisibleButton\",\n\t\"DropDownList1MenuBackdrop\",\n\t\"DropDownList2\",\n\t\"DropDownList2Backdrop\",\n\t\"DropDownList2Button1\",\n\t\"DropDownList2Button10\",\n\t\"DropDownList2Button10ColorSwatch\",\n\t\"DropDownList2Button10ExpandArrow\",\n\t\"DropDownList2Button10InvisibleButton\",\n\t\"DropDownList2Button11\",\n\t\"DropDownList2Button11ColorSwatch\",\n\t\"DropDownList2Button11ExpandArrow\",\n\t\"DropDownList2Button11InvisibleButton\",\n\t\"DropDownList2Button12\",\n\t\"DropDownList2Button12ColorSwatch\",\n\t\"DropDownList2Button12ExpandArrow\",\n\t\"DropDownList2Button12InvisibleButton\",\n\t\"DropDownList2Button13\",\n\t\"DropDownList2Button13ColorSwatch\",\n\t\"DropDownList2Button13ExpandArrow\",\n\t\"DropDownList2Button13InvisibleButton\",\n\t\"DropDownList2Button14\",\n\t\"DropDownList2Button14ColorSwatch\",\n\t\"DropDownList2Button14ExpandArrow\",\n\t\"DropDownList2Button14InvisibleButton\",\n\t\"DropDownList2Button15\",\n\t\"DropDownList2Button15ColorSwatch\",\n\t\"DropDownList2Button15ExpandArrow\",\n\t\"DropDownList2Button15InvisibleButton\",\n\t\"DropDownList2Button16\",\n\t\"DropDownList2Button16ColorSwatch\",\n\t\"DropDownList2Button16ExpandArrow\",\n\t\"DropDownList2Button16InvisibleButton\",\n\t\"DropDownList2Button17\",\n\t\"DropDownList2Button17ColorSwatch\",\n\t\"DropDownList2Button17ExpandArrow\",\n\t\"DropDownList2Button17InvisibleButton\",\n\t\"DropDownList2Button18\",\n\t\"DropDownList2Button18ColorSwatch\",\n\t\"DropDownList2Button18ExpandArrow\",\n\t\"DropDownList2Button18InvisibleButton\",\n\t\"DropDownList2Button19\",\n\t\"DropDownList2Button19ColorSwatch\",\n\t\"DropDownList2Button19ExpandArrow\",\n\t\"DropDownList2Button19InvisibleButton\",\n\t\"DropDownList2Button1ColorSwatch\",\n\t\"DropDownList2Button1ExpandArrow\",\n\t\"DropDownList2Button1InvisibleButton\",\n\t\"DropDownList2Button2\",\n\t\"DropDownList2Button20\",\n\t\"DropDownList2Button20ColorSwatch\",\n\t\"DropDownList2Button20ExpandArrow\",\n\t\"DropDownList2Button20InvisibleButton\",\n\t\"DropDownList2Button21\",\n\t\"DropDownList2Button21ColorSwatch\",\n\t\"DropDownList2Button21ExpandArrow\",\n\t\"DropDownList2Button21InvisibleButton\",\n\t\"DropDownList2Button22\",\n\t\"DropDownList2Button22ColorSwatch\",\n\t\"DropDownList2Button22ExpandArrow\",\n\t\"DropDownList2Button22InvisibleButton\",\n\t\"DropDownList2Button23\",\n\t\"DropDownList2Button23ColorSwatch\",\n\t\"DropDownList2Button23ExpandArrow\",\n\t\"DropDownList2Button23InvisibleButton\",\n\t\"DropDownList2Button24\",\n\t\"DropDownList2Button24ColorSwatch\",\n\t\"DropDownList2Button24ExpandArrow\",\n\t\"DropDownList2Button24InvisibleButton\",\n\t\"DropDownList2Button2ColorSwatch\",\n\t\"DropDownList2Button2ExpandArrow\",\n\t\"DropDownList2Button2InvisibleButton\",\n\t\"DropDownList2Button3\",\n\t\"DropDownList2Button3ColorSwatch\",\n\t\"DropDownList2Button3ExpandArrow\",\n\t\"DropDownList2Button3InvisibleButton\",\n\t\"DropDownList2Button4\",\n\t\"DropDownList2Button4ColorSwatch\",\n\t\"DropDownList2Button4ExpandArrow\",\n\t\"DropDownList2Button4InvisibleButton\",\n\t\"DropDownList2Button5\",\n\t\"DropDownList2Button5ColorSwatch\",\n\t\"DropDownList2Button5ExpandArrow\",\n\t\"DropDownList2Button5InvisibleButton\",\n\t\"DropDownList2Button6\",\n\t\"DropDownList2Button6ColorSwatch\",\n\t\"DropDownList2Button6ExpandArrow\",\n\t\"DropDownList2Button6InvisibleButton\",\n\t\"DropDownList2Button7\",\n\t\"DropDownList2Button7ColorSwatch\",\n\t\"DropDownList2Button7ExpandArrow\",\n\t\"DropDownList2Button7InvisibleButton\",\n\t\"DropDownList2Button8\",\n\t\"DropDownList2Button8ColorSwatch\",\n\t\"DropDownList2Button8ExpandArrow\",\n\t\"DropDownList2Button8InvisibleButton\",\n\t\"DropDownList2Button9\",\n\t\"DropDownList2Button9ColorSwatch\",\n\t\"DropDownList2Button9ExpandArrow\",\n\t\"DropDownList2Button9InvisibleButton\",\n\t\"DropDownList2MenuBackdrop\",\n\t\"DungeonCompletionAlertFrame1\",\n\t\"DungeonCompletionAlertFrame1GlowFrame\",\n\t\"DungeonCompletionAlertFrame1Reward1\",\n\t\"DurabilityFrame\",\n\t\"EQUIPMENTMANAGER_BAGSLOTS\",\n\t\"EQUIPMENTMANAGER_INVENTORYSLOTS\",\n\t\"EVENT_TEMPLATE_FORMATS\",\n\t\"EffectsPanelOptions\",\n\t\"EmoteList\",\n\t\"EmoteMenu\",\n\t\"EmoteMenuButton1\",\n\t\"EmoteMenuButton10\",\n\t\"EmoteMenuButton11\",\n\t\"EmoteMenuButton12\",\n\t\"EmoteMenuButton13\",\n\t\"EmoteMenuButton14\",\n\t\"EmoteMenuButton15\",\n\t\"EmoteMenuButton16\",\n\t\"EmoteMenuButton17\",\n\t\"EmoteMenuButton18\",\n\t\"EmoteMenuButton19\",\n\t\"EmoteMenuButton2\",\n\t\"EmoteMenuButton20\",\n\t\"EmoteMenuButton21\",\n\t\"EmoteMenuButton22\",\n\t\"EmoteMenuButton23\",\n\t\"EmoteMenuButton24\",\n\t\"EmoteMenuButton25\",\n\t\"EmoteMenuButton26\",\n\t\"EmoteMenuButton27\",\n\t\"EmoteMenuButton28\",\n\t\"EmoteMenuButton29\",\n\t\"EmoteMenuButton3\",\n\t\"EmoteMenuButton30\",\n\t\"EmoteMenuButton31\",\n\t\"EmoteMenuButton32\",\n\t\"EmoteMenuButton4\",\n\t\"EmoteMenuButton5\",\n\t\"EmoteMenuButton6\",\n\t\"EmoteMenuButton7\",\n\t\"EmoteMenuButton8\",\n\t\"EmoteMenuButton9\",\n\t\"EmptyQuestLogFrame\",\n\t\"EquipmentManager\",\n\t\"ExhaustionTick\",\n\t\"ExtendedUI\",\n\t\"FACTION_BAR_COLORS\",\n\t\"FADEFRAMES\",\n\t\"FCTPanelOptions\",\n\t\"FILTERED_BG_CHAT_ADD\",\n\t\"FILTERED_BG_CHAT_ADD_GLOBALS\",\n\t\"FILTERED_BG_CHAT_END\",\n\t\"FILTERED_BG_CHAT_END_GLOBALS\",\n\t\"FILTERED_BG_CHAT_SUBTRACT\",\n\t\"FILTERED_BG_CHAT_SUBTRACT_GLOBALS\",\n\t\"FLASHFRAMES\",\n\t\"FRIENDSFRAME_SUBFRAMES\",\n\t\"FRIENDS_BNET_BACKGROUND_COLOR\",\n\t\"FRIENDS_BNET_NAME_COLOR\",\n\t\"FRIENDS_GRAY_COLOR\",\n\t\"FRIENDS_OFFLINE_BACKGROUND_COLOR\",\n\t\"FRIENDS_WOW_BACKGROUND_COLOR\",\n\t\"FRIENDS_WOW_NAME_COLOR\",\n\t\"FactionMouseOver\",\n\t\"FeaturesPanelOptions\",\n\t\"FloatingChatFrameManager\",\n\t\"FocusFrame\",\n\t\"FocusFrameBuffs\",\n\t\"FocusFrameDebuffs\",\n\t\"FocusFrameDropDown\",\n\t\"FocusFrameDropDownButton\",\n\t\"FocusFrameHealthBar\",\n\t\"FocusFrameManaBar\",\n\t\"FocusFrameNumericalThreat\",\n\t\"FocusFrameSpellBar\",\n\t\"FocusFrameTextureFrame\",\n\t\"FocusFrameToT\",\n\t\"FocusFrameToTDebuff1\",\n\t\"FocusFrameToTDebuff1Cooldown\",\n\t\"FocusFrameToTDebuff2\",\n\t\"FocusFrameToTDebuff2Cooldown\",\n\t\"FocusFrameToTDebuff3\",\n\t\"FocusFrameToTDebuff3Cooldown\",\n\t\"FocusFrameToTDebuff4\",\n\t\"FocusFrameToTDebuff4Cooldown\",\n\t\"FocusFrameToTHealthBar\",\n\t\"FocusFrameToTManaBar\",\n\t\"FocusFrameToTTextureFrame\",\n\t\"FolderPicker\",\n\t\"FolderPickerButton01\",\n\t\"FriendsDropDown\",\n\t\"FriendsDropDownButton\",\n\t\"FriendsFrame\",\n\t\"FriendsFrameAddFriendButton\",\n\t\"FriendsFrameBattlenetStatus\",\n\t\"FriendsFrameBattlenetStatusInfoButton\",\n\t\"FriendsFrameBlockedInviteHeader\",\n\t\"FriendsFrameBlockedToonHeader\",\n\t\"FriendsFrameBroadcastInput\",\n\t\"FriendsFrameBroadcastInputClearButton\",\n\t\"FriendsFrameBroadcastInputTooltipButton\",\n\t\"FriendsFrameCloseButton\",\n\t\"FriendsFrameFriendsScrollFrame\",\n\t\"FriendsFrameFriendsScrollFrameButton1\",\n\t\"FriendsFrameFriendsScrollFrameButton10\",\n\t\"FriendsFrameFriendsScrollFrameButton10SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton10SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton11\",\n\t\"FriendsFrameFriendsScrollFrameButton11SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton11SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton12\",\n\t\"FriendsFrameFriendsScrollFrameButton12SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton12SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton13\",\n\t\"FriendsFrameFriendsScrollFrameButton13SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton13SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton14\",\n\t\"FriendsFrameFriendsScrollFrameButton14SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton14SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton15\",\n\t\"FriendsFrameFriendsScrollFrameButton15SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton15SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton16\",\n\t\"FriendsFrameFriendsScrollFrameButton16SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton16SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton17\",\n\t\"FriendsFrameFriendsScrollFrameButton17SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton17SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton18\",\n\t\"FriendsFrameFriendsScrollFrameButton18SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton18SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton19\",\n\t\"FriendsFrameFriendsScrollFrameButton19SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton19SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton1SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton1SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton2\",\n\t\"FriendsFrameFriendsScrollFrameButton20\",\n\t\"FriendsFrameFriendsScrollFrameButton20SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton20SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton21\",\n\t\"FriendsFrameFriendsScrollFrameButton21SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton21SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton22\",\n\t\"FriendsFrameFriendsScrollFrameButton22SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton22SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton23\",\n\t\"FriendsFrameFriendsScrollFrameButton23SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton23SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton2SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton2SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton3\",\n\t\"FriendsFrameFriendsScrollFrameButton3SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton3SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton4\",\n\t\"FriendsFrameFriendsScrollFrameButton4SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton4SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton5\",\n\t\"FriendsFrameFriendsScrollFrameButton5SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton5SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton6\",\n\t\"FriendsFrameFriendsScrollFrameButton6SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton6SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton7\",\n\t\"FriendsFrameFriendsScrollFrameButton7SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton7SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton8\",\n\t\"FriendsFrameFriendsScrollFrameButton8SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton8SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton9\",\n\t\"FriendsFrameFriendsScrollFrameButton9SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton9SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameScrollBar\",\n\t\"FriendsFrameFriendsScrollFrameScrollBarScrollDownButton\",\n\t\"FriendsFrameFriendsScrollFrameScrollBarScrollUpButton\",\n\t\"FriendsFrameFriendsScrollFrameScrollChild\",\n\t\"FriendsFrameIgnoreButton1\",\n\t\"FriendsFrameIgnoreButton10\",\n\t\"FriendsFrameIgnoreButton11\",\n\t\"FriendsFrameIgnoreButton12\",\n\t\"FriendsFrameIgnoreButton13\",\n\t\"FriendsFrameIgnoreButton14\",\n\t\"FriendsFrameIgnoreButton15\",\n\t\"FriendsFrameIgnoreButton16\",\n\t\"FriendsFrameIgnoreButton17\",\n\t\"FriendsFrameIgnoreButton18\",\n\t\"FriendsFrameIgnoreButton19\",\n\t\"FriendsFrameIgnoreButton2\",\n\t\"FriendsFrameIgnoreButton3\",\n\t\"FriendsFrameIgnoreButton4\",\n\t\"FriendsFrameIgnoreButton5\",\n\t\"FriendsFrameIgnoreButton6\",\n\t\"FriendsFrameIgnoreButton7\",\n\t\"FriendsFrameIgnoreButton8\",\n\t\"FriendsFrameIgnoreButton9\",\n\t\"FriendsFrameIgnorePlayerButton\",\n\t\"FriendsFrameIgnoreScrollFrame\",\n\t\"FriendsFrameIgnoreScrollFrameScrollBar\",\n\t\"FriendsFrameIgnoreScrollFrameScrollBarScrollDownButton\",\n\t\"FriendsFrameIgnoreScrollFrameScrollBarScrollUpButton\",\n\t\"FriendsFrameIgnoreScrollFrameScrollChildFrame\",\n\t\"FriendsFrameIgnoredHeader\",\n\t\"FriendsFrameMutePlayerButton\",\n\t\"FriendsFrameMutedHeader\",\n\t\"FriendsFramePendingButton1\",\n\t\"FriendsFramePendingButton1AcceptButton\",\n\t\"FriendsFramePendingButton1BlockButton\",\n\t\"FriendsFramePendingButton1DeclineButton\",\n\t\"FriendsFramePendingButton1Highlight\",\n\t\"FriendsFramePendingButton1ReportButton\",\n\t\"FriendsFramePendingButton2\",\n\t\"FriendsFramePendingButton2AcceptButton\",\n\t\"FriendsFramePendingButton2BlockButton\",\n\t\"FriendsFramePendingButton2DeclineButton\",\n\t\"FriendsFramePendingButton2Highlight\",\n\t\"FriendsFramePendingButton2ReportButton\",\n\t\"FriendsFramePendingButton3\",\n\t\"FriendsFramePendingButton3AcceptButton\",\n\t\"FriendsFramePendingButton3BlockButton\",\n\t\"FriendsFramePendingButton3DeclineButton\",\n\t\"FriendsFramePendingButton3Highlight\",\n\t\"FriendsFramePendingButton3ReportButton\",\n\t\"FriendsFramePendingButton4\",\n\t\"FriendsFramePendingButton4AcceptButton\",\n\t\"FriendsFramePendingButton4BlockButton\",\n\t\"FriendsFramePendingButton4DeclineButton\",\n\t\"FriendsFramePendingButton4Highlight\",\n\t\"FriendsFramePendingButton4ReportButton\",\n\t\"FriendsFramePendingScrollFrame\",\n\t\"FriendsFramePendingScrollFrameScrollBar\",\n\t\"FriendsFramePendingScrollFrameScrollBarScrollDownButton\",\n\t\"FriendsFramePendingScrollFrameScrollBarScrollUpButton\",\n\t\"FriendsFramePendingScrollFrameScrollChild\",\n\t\"FriendsFrameSendMessageButton\",\n\t\"FriendsFrameStatusDropDown\",\n\t\"FriendsFrameStatusDropDownButton\",\n\t\"FriendsFrameStatusDropDownMouseOver\",\n\t\"FriendsFrameTab1\",\n\t\"FriendsFrameTab2\",\n\t\"FriendsFrameTab3\",\n\t\"FriendsFrameTab4\",\n\t\"FriendsFrameTab5\",\n\t\"FriendsFrameUnsquelchButton\",\n\t\"FriendsFriendsButton1\",\n\t\"FriendsFriendsButton10\",\n\t\"FriendsFriendsButton11\",\n\t\"FriendsFriendsButton2\",\n\t\"FriendsFriendsButton3\",\n\t\"FriendsFriendsButton4\",\n\t\"FriendsFriendsButton5\",\n\t\"FriendsFriendsButton6\",\n\t\"FriendsFriendsButton7\",\n\t\"FriendsFriendsButton8\",\n\t\"FriendsFriendsButton9\",\n\t\"FriendsFriendsCloseButton\",\n\t\"FriendsFriendsFrame\",\n\t\"FriendsFriendsFrameDropDown\",\n\t\"FriendsFriendsFrameDropDownButton\",\n\t\"FriendsFriendsList\",\n\t\"FriendsFriendsNoteEditBox\",\n\t\"FriendsFriendsNoteFrame\",\n\t\"FriendsFriendsNoteFrameScrollFrame\",\n\t\"FriendsFriendsNoteFrameScrollFrameFocusButton\",\n\t\"FriendsFriendsNoteFrameScrollFrameScrollBar\",\n\t\"FriendsFriendsNoteFrameScrollFrameScrollBarScrollDownButton\",\n\t\"FriendsFriendsNoteFrameScrollFrameScrollBarScrollUpButton\",\n\t\"FriendsFriendsScrollFrame\",\n\t\"FriendsFriendsScrollFrameScrollBar\",\n\t\"FriendsFriendsScrollFrameScrollBarScrollDownButton\",\n\t\"FriendsFriendsScrollFrameScrollBarScrollUpButton\",\n\t\"FriendsFriendsScrollFrameScrollChildFrame\",\n\t\"FriendsFriendsSendRequestButton\",\n\t\"FriendsFriendsWaitFrame\",\n\t\"FriendsListFrame\",\n\t\"FriendsMicroButton\",\n\t\"FriendsTabHeader\",\n\t\"FriendsTabHeaderInviteAlert\",\n\t\"FriendsTabHeaderTab1\",\n\t\"FriendsTabHeaderTab2\",\n\t\"FriendsTabHeaderTab3\",\n\t\"FriendsTooltip\",\n\t\"GMChatOpenLog\",\n\t\"GRAY_FONT_COLOR\",\n\t\"GREEN_FONT_COLOR\",\n\t\"GUILDFRAME_POPUPS\",\n\t\"GameMenuButtonContinue\",\n\t\"GameMenuButtonKeybindings\",\n\t\"GameMenuButtonLogout\",\n\t\"GameMenuButtonMacOptions\",\n\t\"GameMenuButtonMacros\",\n\t\"GameMenuButtonOptions\",\n\t\"GameMenuButtonQuit\",\n\t\"GameMenuButtonRatings\",\n\t\"GameMenuButtonSoundOptions\",\n\t\"GameMenuButtonUIOptions\",\n\t\"GameMenuFrame\",\n\t\"GameTimeFrame\",\n\t\"GameTooltip\",\n\t\"GameTooltipStatusBar\",\n\t\"GearManagerDialog\",\n\t\"GearManagerDialogClose\",\n\t\"GearManagerDialogDeleteSet\",\n\t\"GearManagerDialogEquipSet\",\n\t\"GearManagerDialogPopup\",\n\t\"GearManagerDialogPopupButton1\",\n\t\"GearManagerDialogPopupButton10\",\n\t\"GearManagerDialogPopupButton11\",\n\t\"GearManagerDialogPopupButton12\",\n\t\"GearManagerDialogPopupButton13\",\n\t\"GearManagerDialogPopupButton14\",\n\t\"GearManagerDialogPopupButton15\",\n\t\"GearManagerDialogPopupButton2\",\n\t\"GearManagerDialogPopupButton3\",\n\t\"GearManagerDialogPopupButton4\",\n\t\"GearManagerDialogPopupButton5\",\n\t\"GearManagerDialogPopupButton6\",\n\t\"GearManagerDialogPopupButton7\",\n\t\"GearManagerDialogPopupButton8\",\n\t\"GearManagerDialogPopupButton9\",\n\t\"GearManagerDialogPopupCancel\",\n\t\"GearManagerDialogPopupEditBox\",\n\t\"GearManagerDialogPopupOkay\",\n\t\"GearManagerDialogPopupScrollFrame\",\n\t\"GearManagerDialogPopupScrollFrameScrollBar\",\n\t\"GearManagerDialogPopupScrollFrameScrollBarScrollDownButton\",\n\t\"GearManagerDialogPopupScrollFrameScrollBarScrollUpButton\",\n\t\"GearManagerDialogPopupScrollFrameScrollChildFrame\",\n\t\"GearManagerDialogSaveSet\",\n\t\"GearManagerToggleButton\",\n\t\"GearSetButton1\",\n\t\"GearSetButton10\",\n\t\"GearSetButton2\",\n\t\"GearSetButton3\",\n\t\"GearSetButton4\",\n\t\"GearSetButton5\",\n\t\"GearSetButton6\",\n\t\"GearSetButton7\",\n\t\"GearSetButton8\",\n\t\"GearSetButton9\",\n\t\"GeneralDockManager\",\n\t\"GeneralDockManagerOverflowButton\",\n\t\"GeneralDockManagerOverflowButtonList\",\n\t\"GeneralDockManagerScrollFrame\",\n\t\"GeneralDockManagerScrollFrameChild\",\n\t\"GlobalCollectorDB\",\n\t\"GossipFrame\",\n\t\"GossipFrameCloseButton\",\n\t\"GossipFrameGreetingGoodbyeButton\",\n\t\"GossipFrameGreetingPanel\",\n\t\"GossipGreetingScrollChildFrame\",\n\t\"GossipGreetingScrollFrame\",\n\t\"GossipGreetingScrollFrameScrollBar\",\n\t\"GossipGreetingScrollFrameScrollBarScrollDownButton\",\n\t\"GossipGreetingScrollFrameScrollBarScrollUpButton\",\n\t\"GossipNpcNameFrame\",\n\t\"GossipSpacerFrame\",\n\t\"GossipTitleButton1\",\n\t\"GossipTitleButton10\",\n\t\"GossipTitleButton11\",\n\t\"GossipTitleButton12\",\n\t\"GossipTitleButton13\",\n\t\"GossipTitleButton14\",\n\t\"GossipTitleButton15\",\n\t\"GossipTitleButton16\",\n\t\"GossipTitleButton17\",\n\t\"GossipTitleButton18\",\n\t\"GossipTitleButton19\",\n\t\"GossipTitleButton2\",\n\t\"GossipTitleButton20\",\n\t\"GossipTitleButton21\",\n\t\"GossipTitleButton22\",\n\t\"GossipTitleButton23\",\n\t\"GossipTitleButton24\",\n\t\"GossipTitleButton25\",\n\t\"GossipTitleButton26\",\n\t\"GossipTitleButton27\",\n\t\"GossipTitleButton28\",\n\t\"GossipTitleButton29\",\n\t\"GossipTitleButton3\",\n\t\"GossipTitleButton30\",\n\t\"GossipTitleButton31\",\n\t\"GossipTitleButton32\",\n\t\"GossipTitleButton4\",\n\t\"GossipTitleButton5\",\n\t\"GossipTitleButton6\",\n\t\"GossipTitleButton7\",\n\t\"GossipTitleButton8\",\n\t\"GossipTitleButton9\",\n\t\"GraphicsQualityLevels\",\n\t\"GroupLootDropDown\",\n\t\"GroupLootDropDownButton\",\n\t\"GroupLootFrame1\",\n\t\"GroupLootFrame1DisenchantButton\",\n\t\"GroupLootFrame1GreedButton\",\n\t\"GroupLootFrame1IconFrame\",\n\t\"GroupLootFrame1PassButton\",\n\t\"GroupLootFrame1RollButton\",\n\t\"GroupLootFrame1Timer\",\n\t\"GroupLootFrame2\",\n\t\"GroupLootFrame2DisenchantButton\",\n\t\"GroupLootFrame2GreedButton\",\n\t\"GroupLootFrame2IconFrame\",\n\t\"GroupLootFrame2PassButton\",\n\t\"GroupLootFrame2RollButton\",\n\t\"GroupLootFrame2Timer\",\n\t\"GroupLootFrame3\",\n\t\"GroupLootFrame3DisenchantButton\",\n\t\"GroupLootFrame3GreedButton\",\n\t\"GroupLootFrame3IconFrame\",\n\t\"GroupLootFrame3PassButton\",\n\t\"GroupLootFrame3RollButton\",\n\t\"GroupLootFrame3Timer\",\n\t\"GroupLootFrame4\",\n\t\"GroupLootFrame4DisenchantButton\",\n\t\"GroupLootFrame4GreedButton\",\n\t\"GroupLootFrame4IconFrame\",\n\t\"GroupLootFrame4PassButton\",\n\t\"GroupLootFrame4RollButton\",\n\t\"GroupLootFrame4Timer\",\n\t\"GuildBankTabPermissionsTab1\",\n\t\"GuildBankTabPermissionsTab2\",\n\t\"GuildBankTabPermissionsTab3\",\n\t\"GuildBankTabPermissionsTab4\",\n\t\"GuildBankTabPermissionsTab5\",\n\t\"GuildBankTabPermissionsTab6\",\n\t\"GuildControlPopupAcceptButton\",\n\t\"GuildControlPopupFrame\",\n\t\"GuildControlPopupFrameAddRankButton\",\n\t\"GuildControlPopupFrameCancelButton\",\n\t\"GuildControlPopupFrameCheckbox1\",\n\t\"GuildControlPopupFrameCheckbox10\",\n\t\"GuildControlPopupFrameCheckbox11\",\n\t\"GuildControlPopupFrameCheckbox12\",\n\t\"GuildControlPopupFrameCheckbox13\",\n\t\"GuildControlPopupFrameCheckbox15\",\n\t\"GuildControlPopupFrameCheckbox16\",\n\t\"GuildControlPopupFrameCheckbox17\",\n\t\"GuildControlPopupFrameCheckbox2\",\n\t\"GuildControlPopupFrameCheckbox3\",\n\t\"GuildControlPopupFrameCheckbox4\",\n\t\"GuildControlPopupFrameCheckbox5\",\n\t\"GuildControlPopupFrameCheckbox6\",\n\t\"GuildControlPopupFrameCheckbox7\",\n\t\"GuildControlPopupFrameCheckbox8\",\n\t\"GuildControlPopupFrameCheckbox9\",\n\t\"GuildControlPopupFrameCheckboxes\",\n\t\"GuildControlPopupFrameDropDown\",\n\t\"GuildControlPopupFrameDropDownButton\",\n\t\"GuildControlPopupFrameEditBox\",\n\t\"GuildControlPopupFrameRemoveRankButton\",\n\t\"GuildControlPopupFrameTabPermissions\",\n\t\"GuildControlTabPermissionsDepositItems\",\n\t\"GuildControlTabPermissionsUpdateText\",\n\t\"GuildControlTabPermissionsViewTab\",\n\t\"GuildControlTabPermissionsWithdrawItems\",\n\t\"GuildControlWithdrawGold\",\n\t\"GuildControlWithdrawGoldEditBox\",\n\t\"GuildControlWithdrawGoldEditBoxMask\",\n\t\"GuildControlWithdrawItemsEditBox\",\n\t\"GuildControlWithdrawItemsEditBoxMask\",\n\t\"GuildEventFrame\",\n\t\"GuildEventLogCancelButton\",\n\t\"GuildEventLogCloseButton\",\n\t\"GuildEventLogFrame\",\n\t\"GuildEventLogScrollChildFrame\",\n\t\"GuildEventLogScrollFrame\",\n\t\"GuildEventLogScrollFrameScrollBar\",\n\t\"GuildEventLogScrollFrameScrollBarScrollDownButton\",\n\t\"GuildEventLogScrollFrameScrollBarScrollUpButton\",\n\t\"GuildFrame\",\n\t\"GuildFrameAddMemberButton\",\n\t\"GuildFrameButton1\",\n\t\"GuildFrameButton10\",\n\t\"GuildFrameButton11\",\n\t\"GuildFrameButton12\",\n\t\"GuildFrameButton13\",\n\t\"GuildFrameButton2\",\n\t\"GuildFrameButton3\",\n\t\"GuildFrameButton4\",\n\t\"GuildFrameButton5\",\n\t\"GuildFrameButton6\",\n\t\"GuildFrameButton7\",\n\t\"GuildFrameButton8\",\n\t\"GuildFrameButton9\",\n\t\"GuildFrameColumnHeader1\",\n\t\"GuildFrameColumnHeader2\",\n\t\"GuildFrameColumnHeader3\",\n\t\"GuildFrameColumnHeader4\",\n\t\"GuildFrameControlButton\",\n\t\"GuildFrameDemoteButton\",\n\t\"GuildFrameGuildInformationButton\",\n\t\"GuildFrameGuildListToggleButton\",\n\t\"GuildFrameGuildStatusButton1\",\n\t\"GuildFrameGuildStatusButton10\",\n\t\"GuildFrameGuildStatusButton11\",\n\t\"GuildFrameGuildStatusButton12\",\n\t\"GuildFrameGuildStatusButton13\",\n\t\"GuildFrameGuildStatusButton2\",\n\t\"GuildFrameGuildStatusButton3\",\n\t\"GuildFrameGuildStatusButton4\",\n\t\"GuildFrameGuildStatusButton5\",\n\t\"GuildFrameGuildStatusButton6\",\n\t\"GuildFrameGuildStatusButton7\",\n\t\"GuildFrameGuildStatusButton8\",\n\t\"GuildFrameGuildStatusButton9\",\n\t\"GuildFrameGuildStatusColumnHeader1\",\n\t\"GuildFrameGuildStatusColumnHeader2\",\n\t\"GuildFrameGuildStatusColumnHeader3\",\n\t\"GuildFrameGuildStatusColumnHeader4\",\n\t\"GuildFrameLFGButton\",\n\t\"GuildFrameLFGFrame\",\n\t\"GuildFramePromoteButton\",\n\t\"GuildInfoCancelButton\",\n\t\"GuildInfoCloseButton\",\n\t\"GuildInfoEditBox\",\n\t\"GuildInfoFrame\",\n\t\"GuildInfoFrameScrollFrame\",\n\t\"GuildInfoFrameScrollFrameScrollBar\",\n\t\"GuildInfoFrameScrollFrameScrollBarScrollDownButton\",\n\t\"GuildInfoFrameScrollFrameScrollBarScrollUpButton\",\n\t\"GuildInfoGuildEventButton\",\n\t\"GuildInfoSaveButton\",\n\t\"GuildInfoTextBackground\",\n\t\"GuildListScrollFrame\",\n\t\"GuildListScrollFrameScrollBar\",\n\t\"GuildListScrollFrameScrollBarScrollDownButton\",\n\t\"GuildListScrollFrameScrollBarScrollUpButton\",\n\t\"GuildListScrollFrameScrollChildFrame\",\n\t\"GuildMOTDEditButton\",\n\t\"GuildMemberDetailCloseButton\",\n\t\"GuildMemberDetailFrame\",\n\t\"GuildMemberGroupInviteButton\",\n\t\"GuildMemberNoteBackground\",\n\t\"GuildMemberOfficerNoteBackground\",\n\t\"GuildMemberRemoveButton\",\n\t\"GuildPlayerStatusFrame\",\n\t\"GuildRegistrarButton1\",\n\t\"GuildRegistrarButton2\",\n\t\"GuildRegistrarFrame\",\n\t\"GuildRegistrarFrameCancelButton\",\n\t\"GuildRegistrarFrameCloseButton\",\n\t\"GuildRegistrarFrameEditBox\",\n\t\"GuildRegistrarFrameGoodbyeButton\",\n\t\"GuildRegistrarFramePurchaseButton\",\n\t\"GuildRegistrarGreetingFrame\",\n\t\"GuildRegistrarMoneyFrame\",\n\t\"GuildRegistrarMoneyFrameCopperButton\",\n\t\"GuildRegistrarMoneyFrameGoldButton\",\n\t\"GuildRegistrarMoneyFrameSilverButton\",\n\t\"GuildRegistrarNpcNameFrame\",\n\t\"GuildRegistrarPurchaseFrame\",\n\t\"GuildStatusFrame\",\n\t\"HIGHLIGHT_FONT_COLOR\",\n\t\"HUNTER_PET_BONUS\",\n\t\"HelpFrame\",\n\t\"HelpFrameCloseButton\",\n\t\"HelpFrameGMTalk\",\n\t\"HelpFrameGMTalkCancel\",\n\t\"HelpFrameGMTalkOpenTicket\",\n\t\"HelpFrameLag\",\n\t\"HelpFrameLagAuctionHouse\",\n\t\"HelpFrameLagCancel\",\n\t\"HelpFrameLagChat\",\n\t\"HelpFrameLagLoot\",\n\t\"HelpFrameLagMail\",\n\t\"HelpFrameLagMovement\",\n\t\"HelpFrameLagSpell\",\n\t\"HelpFrameOpenTicket\",\n\t\"HelpFrameOpenTicketCancel\",\n\t\"HelpFrameOpenTicketDivider\",\n\t\"HelpFrameOpenTicketEditBox\",\n\t\"HelpFrameOpenTicketScrollFrame\",\n\t\"HelpFrameOpenTicketScrollFrameScrollBar\",\n\t\"HelpFrameOpenTicketScrollFrameScrollBarScrollDownButton\",\n\t\"HelpFrameOpenTicketScrollFrameScrollBarScrollUpButton\",\n\t\"HelpFrameOpenTicketSubmit\",\n\t\"HelpFrameReportIssue\",\n\t\"HelpFrameReportIssueBullet1\",\n\t\"HelpFrameReportIssueBullet2\",\n\t\"HelpFrameReportIssueCancel\",\n\t\"HelpFrameReportIssueOpenTicket\",\n\t\"HelpFrameStuck\",\n\t\"HelpFrameStuckCancel\",\n\t\"HelpFrameStuckOpenTicket\",\n\t\"HelpFrameStuckStuck\",\n\t\"HelpFrameViewResponse\",\n\t\"HelpFrameViewResponseCancel\",\n\t\"HelpFrameViewResponseDivider\",\n\t\"HelpFrameViewResponseIssueResolved\",\n\t\"HelpFrameViewResponseIssueScrollFrame\",\n\t\"HelpFrameViewResponseIssueScrollFrameScrollBar\",\n\t\"HelpFrameViewResponseIssueScrollFrameScrollBarScrollDownButton\",\n\t\"HelpFrameViewResponseIssueScrollFrameScrollBarScrollUpButton\",\n\t\"HelpFrameViewResponseIssueScrollFrameScrollChild\",\n\t\"HelpFrameViewResponseMessageScrollFrame\",\n\t\"HelpFrameViewResponseMessageScrollFrameScrollBar\",\n\t\"HelpFrameViewResponseMessageScrollFrameScrollBarScrollDownButton\",\n\t\"HelpFrameViewResponseMessageScrollFrameScrollBarScrollUpButton\",\n\t\"HelpFrameViewResponseMessageScrollFrameScrollChild\",\n\t\"HelpFrameViewResponseMoreHelp\",\n\t\"HelpFrameWelcome\",\n\t\"HelpFrameWelcomeCancel\",\n\t\"HelpFrameWelcomeGMTalk\",\n\t\"HelpFrameWelcomeReportIssue\",\n\t\"HelpFrameWelcomeStuck\",\n\t\"HelpMicroButton\",\n\t\"HelpPanelOptions\",\n\t\"HonorFrame\",\n\t\"HonorFrameCurrentDK\",\n\t\"HonorFrameCurrentHK\",\n\t\"HonorFrameLastWeekContribution\",\n\t\"HonorFrameLastWeekHK\",\n\t\"HonorFrameLastWeekStanding\",\n\t\"HonorFrameLifeTimeDK\",\n\t\"HonorFrameLifeTimeHK\",\n\t\"HonorFrameLifeTimeRank\",\n\t\"HonorFrameProgressBar\",\n\t\"HonorFrameProgressButton\",\n\t\"HonorFrameRankButton\",\n\t\"HonorFrameThisWeekContribution\",\n\t\"HonorFrameThisWeekHK\",\n\t\"HonorFrameYesterdayContribution\",\n\t\"HonorFrameYesterdayHK\",\n\t\"ICON_LIST\",\n\t\"ICON_TAG_LIST\",\n\t\"INTERFACEOPTIONS_ADDONCATEGORIES\",\n\t\"INVENTORY_ALERT_COLORS\",\n\t\"INVENTORY_ALERT_STATUS_SLOTS\",\n\t\"INVSLOTS_EQUIPABLE_IN_COMBAT\",\n\t\"ITEM_QUALITY_COLORS\",\n\t\"IgnoreListFrame\",\n\t\"InboxCloseButton\",\n\t\"InboxFrame\",\n\t\"InboxNextPageButton\",\n\t\"InboxPrevPageButton\",\n\t\"InboxTooMuchMail\",\n\t\"InterfaceOptionsActionBarsPanel\",\n\t\"InterfaceOptionsActionBarsPanelAlwaysShowActionBars\",\n\t\"InterfaceOptionsActionBarsPanelBottomLeft\",\n\t\"InterfaceOptionsActionBarsPanelBottomRight\",\n\t\"InterfaceOptionsActionBarsPanelLockActionBars\",\n\t\"InterfaceOptionsActionBarsPanelRight\",\n\t\"InterfaceOptionsActionBarsPanelRightTwo\",\n\t\"InterfaceOptionsActionBarsPanelSecureAbilityToggle\",\n\t\"InterfaceOptionsBattlenetPanel\",\n\t\"InterfaceOptionsBattlenetPanelBroadcasts\",\n\t\"InterfaceOptionsBattlenetPanelConversations\",\n\t\"InterfaceOptionsBattlenetPanelFriendRequests\",\n\t\"InterfaceOptionsBattlenetPanelOfflineFriends\",\n\t\"InterfaceOptionsBattlenetPanelOnlineFriends\",\n\t\"InterfaceOptionsBattlenetPanelShowToastWindow\",\n\t\"InterfaceOptionsBattlenetPanelToastDurationSlider\",\n\t\"InterfaceOptionsBuffsPanel\",\n\t\"InterfaceOptionsBuffsPanelBuffDurations\",\n\t\"InterfaceOptionsBuffsPanelCastableBuffs\",\n\t\"InterfaceOptionsBuffsPanelConsolidateBuffs\",\n\t\"InterfaceOptionsBuffsPanelDispellableDebuffs\",\n\t\"InterfaceOptionsBuffsPanelShowCastableDebuffs\",\n\t\"InterfaceOptionsCameraPanel\",\n\t\"InterfaceOptionsCameraPanelFollowSpeedSlider\",\n\t\"InterfaceOptionsCameraPanelFollowTerrain\",\n\t\"InterfaceOptionsCameraPanelHeadBob\",\n\t\"InterfaceOptionsCameraPanelMaxDistanceSlider\",\n\t\"InterfaceOptionsCameraPanelSmartPivot\",\n\t\"InterfaceOptionsCameraPanelStyleDropDown\",\n\t\"InterfaceOptionsCameraPanelStyleDropDownButton\",\n\t\"InterfaceOptionsCameraPanelWaterCollision\",\n\t\"InterfaceOptionsCombatPanel\",\n\t\"InterfaceOptionsCombatPanelAttackOnAssist\",\n\t\"InterfaceOptionsCombatPanelAutoRange\",\n\t\"InterfaceOptionsCombatPanelAutoSelfCast\",\n\t\"InterfaceOptionsCombatPanelEnemyCastBars\",\n\t\"InterfaceOptionsCombatPanelEnemyCastBarsOnNameplates\",\n\t\"InterfaceOptionsCombatPanelEnemyCastBarsOnPortrait\",\n\t\"InterfaceOptionsCombatPanelFocusCastKeyDropDown\",\n\t\"InterfaceOptionsCombatPanelFocusCastKeyDropDownButton\",\n\t\"InterfaceOptionsCombatPanelNameplateClassColors\",\n\t\"InterfaceOptionsCombatPanelSelfCastKeyDropDown\",\n\t\"InterfaceOptionsCombatPanelSelfCastKeyDropDownButton\",\n\t\"InterfaceOptionsCombatPanelStopAutoAttack\",\n\t\"InterfaceOptionsCombatPanelTOTDropDown\",\n\t\"InterfaceOptionsCombatPanelTOTDropDownButton\",\n\t\"InterfaceOptionsCombatPanelTargetOfTarget\",\n\t\"InterfaceOptionsCombatTextPanel\",\n\t\"InterfaceOptionsCombatTextPanelAuras\",\n\t\"InterfaceOptionsCombatTextPanelCombatState\",\n\t\"InterfaceOptionsCombatTextPanelComboPoints\",\n\t\"InterfaceOptionsCombatTextPanelDamageReduction\",\n\t\"InterfaceOptionsCombatTextPanelDodgeParryMiss\",\n\t\"InterfaceOptionsCombatTextPanelEnableFCT\",\n\t\"InterfaceOptionsCombatTextPanelEnergyGains\",\n\t\"InterfaceOptionsCombatTextPanelFCTDropDown\",\n\t\"InterfaceOptionsCombatTextPanelFCTDropDownButton\",\n\t\"InterfaceOptionsCombatTextPanelFriendlyHealerNames\",\n\t\"InterfaceOptionsCombatTextPanelHealing\",\n\t\"InterfaceOptionsCombatTextPanelHonorGains\",\n\t\"InterfaceOptionsCombatTextPanelLowManaHealth\",\n\t\"InterfaceOptionsCombatTextPanelOtherTargetEffects\",\n\t\"InterfaceOptionsCombatTextPanelPeriodicDamage\",\n\t\"InterfaceOptionsCombatTextPanelPeriodicEnergyGains\",\n\t\"InterfaceOptionsCombatTextPanelPetDamage\",\n\t\"InterfaceOptionsCombatTextPanelReactiveAbilities\",\n\t\"InterfaceOptionsCombatTextPanelRepChanges\",\n\t\"InterfaceOptionsCombatTextPanelTargetDamage\",\n\t\"InterfaceOptionsCombatTextPanelTargetEffects\",\n\t\"InterfaceOptionsControlsPanel\",\n\t\"InterfaceOptionsControlsPanelAutoClearAFK\",\n\t\"InterfaceOptionsControlsPanelAutoDismount\",\n\t\"InterfaceOptionsControlsPanelAutoLootCorpse\",\n\t\"InterfaceOptionsControlsPanelAutoLootKeyDropDown\",\n\t\"InterfaceOptionsControlsPanelAutoLootKeyDropDownButton\",\n\t\"InterfaceOptionsControlsPanelBlockTrades\",\n\t\"InterfaceOptionsControlsPanelLootAtMouse\",\n\t\"InterfaceOptionsControlsPanelStickyTargeting\",\n\t\"InterfaceOptionsDisplayPanel\",\n\t\"InterfaceOptionsDisplayPanelAggroWarningDisplay\",\n\t\"InterfaceOptionsDisplayPanelAggroWarningDisplayButton\",\n\t\"InterfaceOptionsDisplayPanelCinematicSubtitles\",\n\t\"InterfaceOptionsDisplayPanelColorblindMode\",\n\t\"InterfaceOptionsDisplayPanelDetailedLootInfo\",\n\t\"InterfaceOptionsDisplayPanelPlayAggroSounds\",\n\t\"InterfaceOptionsDisplayPanelRotateMinimap\",\n\t\"InterfaceOptionsDisplayPanelScreenEdgeFlash\",\n\t\"InterfaceOptionsDisplayPanelShowAggroPercentage\",\n\t\"InterfaceOptionsDisplayPanelShowCloak\",\n\t\"InterfaceOptionsDisplayPanelShowClock\",\n\t\"InterfaceOptionsDisplayPanelShowFreeBagSpace\",\n\t\"InterfaceOptionsDisplayPanelShowHelm\",\n\t\"InterfaceOptionsDisplayPanelShowItemLevel\",\n\t\"InterfaceOptionsDisplayPanelWorldPVPObjectiveDisplay\",\n\t\"InterfaceOptionsDisplayPanelWorldPVPObjectiveDisplayButton\",\n\t\"InterfaceOptionsFeaturesPanel\",\n\t\"InterfaceOptionsFeaturesPanelEquipmentManager\",\n\t\"InterfaceOptionsFeaturesPanelPreviewTalentChanges\",\n\t\"InterfaceOptionsFrame\",\n\t\"InterfaceOptionsFrameAddOns\",\n\t\"InterfaceOptionsFrameAddOnsButton1\",\n\t\"InterfaceOptionsFrameAddOnsButton10\",\n\t\"InterfaceOptionsFrameAddOnsButton10Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton11\",\n\t\"InterfaceOptionsFrameAddOnsButton11Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton12\",\n\t\"InterfaceOptionsFrameAddOnsButton12Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton13\",\n\t\"InterfaceOptionsFrameAddOnsButton13Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton14\",\n\t\"InterfaceOptionsFrameAddOnsButton14Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton15\",\n\t\"InterfaceOptionsFrameAddOnsButton15Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton16\",\n\t\"InterfaceOptionsFrameAddOnsButton16Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton17\",\n\t\"InterfaceOptionsFrameAddOnsButton17Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton18\",\n\t\"InterfaceOptionsFrameAddOnsButton18Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton19\",\n\t\"InterfaceOptionsFrameAddOnsButton19Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton1Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton2\",\n\t\"InterfaceOptionsFrameAddOnsButton20\",\n\t\"InterfaceOptionsFrameAddOnsButton20Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton21\",\n\t\"InterfaceOptionsFrameAddOnsButton21Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton22\",\n\t\"InterfaceOptionsFrameAddOnsButton22Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton23\",\n\t\"InterfaceOptionsFrameAddOnsButton23Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton2Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton3\",\n\t\"InterfaceOptionsFrameAddOnsButton3Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton4\",\n\t\"InterfaceOptionsFrameAddOnsButton4Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton5\",\n\t\"InterfaceOptionsFrameAddOnsButton5Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton6\",\n\t\"InterfaceOptionsFrameAddOnsButton6Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton7\",\n\t\"InterfaceOptionsFrameAddOnsButton7Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton8\",\n\t\"InterfaceOptionsFrameAddOnsButton8Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton9\",\n\t\"InterfaceOptionsFrameAddOnsButton9Toggle\",\n\t\"InterfaceOptionsFrameAddOnsList\",\n\t\"InterfaceOptionsFrameAddOnsListScrollBar\",\n\t\"InterfaceOptionsFrameAddOnsListScrollBarScrollDownButton\",\n\t\"InterfaceOptionsFrameAddOnsListScrollBarScrollUpButton\",\n\t\"InterfaceOptionsFrameAddOnsListScrollChildFrame\",\n\t\"InterfaceOptionsFrameCancel\",\n\t\"InterfaceOptionsFrameCategories\",\n\t\"InterfaceOptionsFrameCategoriesButton1\",\n\t\"InterfaceOptionsFrameCategoriesButton10\",\n\t\"InterfaceOptionsFrameCategoriesButton10Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton11\",\n\t\"InterfaceOptionsFrameCategoriesButton11Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton12\",\n\t\"InterfaceOptionsFrameCategoriesButton12Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton13\",\n\t\"InterfaceOptionsFrameCategoriesButton13Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton14\",\n\t\"InterfaceOptionsFrameCategoriesButton14Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton15\",\n\t\"InterfaceOptionsFrameCategoriesButton15Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton16\",\n\t\"InterfaceOptionsFrameCategoriesButton16Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton17\",\n\t\"InterfaceOptionsFrameCategoriesButton17Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton18\",\n\t\"InterfaceOptionsFrameCategoriesButton18Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton19\",\n\t\"InterfaceOptionsFrameCategoriesButton19Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton1Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton2\",\n\t\"InterfaceOptionsFrameCategoriesButton20\",\n\t\"InterfaceOptionsFrameCategoriesButton20Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton21\",\n\t\"InterfaceOptionsFrameCategoriesButton21Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton22\",\n\t\"InterfaceOptionsFrameCategoriesButton22Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton23\",\n\t\"InterfaceOptionsFrameCategoriesButton23Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton2Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton3\",\n\t\"InterfaceOptionsFrameCategoriesButton3Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton4\",\n\t\"InterfaceOptionsFrameCategoriesButton4Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton5\",\n\t\"InterfaceOptionsFrameCategoriesButton5Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton6\",\n\t\"InterfaceOptionsFrameCategoriesButton6Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton7\",\n\t\"InterfaceOptionsFrameCategoriesButton7Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton8\",\n\t\"InterfaceOptionsFrameCategoriesButton8Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton9\",\n\t\"InterfaceOptionsFrameCategoriesButton9Toggle\",\n\t\"InterfaceOptionsFrameCategoriesList\",\n\t\"InterfaceOptionsFrameCategoriesListScrollBar\",\n\t\"InterfaceOptionsFrameCategoriesListScrollBarScrollDownButton\",\n\t\"InterfaceOptionsFrameCategoriesListScrollBarScrollUpButton\",\n\t\"InterfaceOptionsFrameCategoriesListScrollChildFrame\",\n\t\"InterfaceOptionsFrameDefaults\",\n\t\"InterfaceOptionsFrameOkay\",\n\t\"InterfaceOptionsFramePanelContainer\",\n\t\"InterfaceOptionsFrameTab1\",\n\t\"InterfaceOptionsFrameTab2\",\n\t\"InterfaceOptionsHelpPanel\",\n\t\"InterfaceOptionsHelpPanelBeginnerTooltips\",\n\t\"InterfaceOptionsHelpPanelEnhancedTooltips\",\n\t\"InterfaceOptionsHelpPanelLoadingScreenTips\",\n\t\"InterfaceOptionsHelpPanelResetTutorials\",\n\t\"InterfaceOptionsHelpPanelShowLuaErrors\",\n\t\"InterfaceOptionsHelpPanelShowTutorials\",\n\t\"InterfaceOptionsLanguagesPanel\",\n\t\"InterfaceOptionsLanguagesPanelLocaleDropDown\",\n\t\"InterfaceOptionsLanguagesPanelLocaleDropDownButton\",\n\t\"InterfaceOptionsLanguagesPanelUseEnglishAudio\",\n\t\"InterfaceOptionsMousePanel\",\n\t\"InterfaceOptionsMousePanelClickMoveStyleDropDown\",\n\t\"InterfaceOptionsMousePanelClickMoveStyleDropDownButton\",\n\t\"InterfaceOptionsMousePanelClickToMove\",\n\t\"InterfaceOptionsMousePanelInvertMouse\",\n\t\"InterfaceOptionsMousePanelMouseLookSpeedSlider\",\n\t\"InterfaceOptionsMousePanelMouseSensitivitySlider\",\n\t\"InterfaceOptionsMousePanelWoWMouse\",\n\t\"InterfaceOptionsNamesPanel\",\n\t\"InterfaceOptionsNamesPanelEnemy\",\n\t\"InterfaceOptionsNamesPanelEnemyGuardians\",\n\t\"InterfaceOptionsNamesPanelEnemyPets\",\n\t\"InterfaceOptionsNamesPanelEnemyPlayerNames\",\n\t\"InterfaceOptionsNamesPanelEnemyTotems\",\n\t\"InterfaceOptionsNamesPanelFriendly\",\n\t\"InterfaceOptionsNamesPanelFriendlyGuardians\",\n\t\"InterfaceOptionsNamesPanelFriendlyPets\",\n\t\"InterfaceOptionsNamesPanelFriendlyPlayerNames\",\n\t\"InterfaceOptionsNamesPanelFriendlyTotems\",\n\t\"InterfaceOptionsNamesPanelGuilds\",\n\t\"InterfaceOptionsNamesPanelMyName\",\n\t\"InterfaceOptionsNamesPanelNPCNames\",\n\t\"InterfaceOptionsNamesPanelNonCombatCreature\",\n\t\"InterfaceOptionsNamesPanelTitles\",\n\t\"InterfaceOptionsNamesPanelUnitNameplates\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesAllowOverlap\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesEnemies\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesEnemyGuardians\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesEnemyPets\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesEnemyTotems\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesFriendlyGuardians\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesFriendlyPets\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesFriendlyTotems\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesFriends\",\n\t\"InterfaceOptionsObjectivesPanel\",\n\t\"InterfaceOptionsObjectivesPanelAdvancedWorldMap\",\n\t\"InterfaceOptionsObjectivesPanelAutoQuestProgress\",\n\t\"InterfaceOptionsObjectivesPanelAutoQuestTracking\",\n\t\"InterfaceOptionsObjectivesPanelInstantQuestText\",\n\t\"InterfaceOptionsObjectivesPanelMapQuestDifficulty\",\n\t\"InterfaceOptionsObjectivesPanelWatchFrameWidth\",\n\t\"InterfaceOptionsSocialPanel\",\n\t\"InterfaceOptionsSocialPanelChatBubbles\",\n\t\"InterfaceOptionsSocialPanelChatHoverDelay\",\n\t\"InterfaceOptionsSocialPanelChatMouseScroll\",\n\t\"InterfaceOptionsSocialPanelChatStyle\",\n\t\"InterfaceOptionsSocialPanelChatStyleButton\",\n\t\"InterfaceOptionsSocialPanelConversationMode\",\n\t\"InterfaceOptionsSocialPanelConversationModeButton\",\n\t\"InterfaceOptionsSocialPanelGuildMemberAlert\",\n\t\"InterfaceOptionsSocialPanelGuildRecruitment\",\n\t\"InterfaceOptionsSocialPanelPartyChat\",\n\t\"InterfaceOptionsSocialPanelProfanityFilter\",\n\t\"InterfaceOptionsSocialPanelSpamFilter\",\n\t\"InterfaceOptionsSocialPanelTimestampsButton\",\n\t\"InterfaceOptionsSocialPanelWholeChatWindowClickable\",\n\t\"InterfaceOptionsStatusTextPanel\",\n\t\"InterfaceOptionsStatusTextPanelParty\",\n\t\"InterfaceOptionsStatusTextPanelPercentages\",\n\t\"InterfaceOptionsStatusTextPanelPet\",\n\t\"InterfaceOptionsStatusTextPanelPlayer\",\n\t\"InterfaceOptionsStatusTextPanelTarget\",\n\t\"InterfaceOptionsStatusTextPanelXP\",\n\t\"InterfaceOptionsUnitFramePanel\",\n\t\"InterfaceOptionsUnitFramePanelArenaEnemyCastBar\",\n\t\"InterfaceOptionsUnitFramePanelArenaEnemyFrames\",\n\t\"InterfaceOptionsUnitFramePanelArenaEnemyPets\",\n\t\"InterfaceOptionsUnitFramePanelFullSizeFocusFrame\",\n\t\"InterfaceOptionsUnitFramePanelPartyBackground\",\n\t\"InterfaceOptionsUnitFramePanelPartyInRaid\",\n\t\"InterfaceOptionsUnitFramePanelPartyPets\",\n\t\"InterfaceOptionsUnitFramePanelRaidRange\",\n\t\"ItemRefCloseButton\",\n\t\"ItemRefShoppingTooltip1\",\n\t\"ItemRefShoppingTooltip2\",\n\t\"ItemRefShoppingTooltip3\",\n\t\"ItemRefTooltip\",\n\t\"ItemRefTooltipStatusBar\",\n\t\"ItemTextCloseButton\",\n\t\"ItemTextFrame\",\n\t\"ItemTextNextPageButton\",\n\t\"ItemTextPageScrollChild\",\n\t\"ItemTextPageText\",\n\t\"ItemTextPrevPageButton\",\n\t\"ItemTextScrollFrame\",\n\t\"ItemTextScrollFrameScrollBar\",\n\t\"ItemTextScrollFrameScrollBarScrollDownButton\",\n\t\"ItemTextScrollFrameScrollBarScrollUpButton\",\n\t\"ItemTextStatusBar\",\n\t\"KeyRingButton\",\n\t\"KeyRingButtonItemAnim\",\n\t\"KnowledgeBaseArticleListFrame\",\n\t\"KnowledgeBaseArticleListFrameNextButton\",\n\t\"KnowledgeBaseArticleListFramePreviousButton\",\n\t\"KnowledgeBaseArticleListItem1\",\n\t\"KnowledgeBaseArticleListItem10\",\n\t\"KnowledgeBaseArticleListItem11\",\n\t\"KnowledgeBaseArticleListItem12\",\n\t\"KnowledgeBaseArticleListItem13\",\n\t\"KnowledgeBaseArticleListItem14\",\n\t\"KnowledgeBaseArticleListItem15\",\n\t\"KnowledgeBaseArticleListItem16\",\n\t\"KnowledgeBaseArticleListItem17\",\n\t\"KnowledgeBaseArticleListItem18\",\n\t\"KnowledgeBaseArticleListItem19\",\n\t\"KnowledgeBaseArticleListItem2\",\n\t\"KnowledgeBaseArticleListItem20\",\n\t\"KnowledgeBaseArticleListItem3\",\n\t\"KnowledgeBaseArticleListItem4\",\n\t\"KnowledgeBaseArticleListItem5\",\n\t\"KnowledgeBaseArticleListItem6\",\n\t\"KnowledgeBaseArticleListItem7\",\n\t\"KnowledgeBaseArticleListItem8\",\n\t\"KnowledgeBaseArticleListItem9\",\n\t\"KnowledgeBaseArticleScrollChildFrame\",\n\t\"KnowledgeBaseArticleScrollChildFrameBackButton\",\n\t\"KnowledgeBaseArticleScrollFrame\",\n\t\"KnowledgeBaseArticleScrollFrameScrollBar\",\n\t\"KnowledgeBaseArticleScrollFrameScrollBarScrollDownButton\",\n\t\"KnowledgeBaseArticleScrollFrameScrollBarScrollUpButton\",\n\t\"KnowledgeBaseErrorFrame\",\n\t\"KnowledgeBaseFrame\",\n\t\"KnowledgeBaseFrameAbandonTicket\",\n\t\"KnowledgeBaseFrameCancel\",\n\t\"KnowledgeBaseFrameCategoryDropDown\",\n\t\"KnowledgeBaseFrameCategoryDropDownButton\",\n\t\"KnowledgeBaseFrameDivider\",\n\t\"KnowledgeBaseFrameDivider2\",\n\t\"KnowledgeBaseFrameEditBox\",\n\t\"KnowledgeBaseFrameEditTicket\",\n\t\"KnowledgeBaseFrameGMTalk\",\n\t\"KnowledgeBaseFrameLag\",\n\t\"KnowledgeBaseFrameReportIssue\",\n\t\"KnowledgeBaseFrameSearchButton\",\n\t\"KnowledgeBaseFrameStuck\",\n\t\"KnowledgeBaseFrameSubCategoryDropDown\",\n\t\"KnowledgeBaseFrameSubCategoryDropDownButton\",\n\t\"KnowledgeBaseFrameTopIssuesButton\",\n\t\"KnowledgeBaseMotdTextFrame\",\n\t\"KnowledgeBaseServerMessageTextFrame\",\n\t\"LFDDungeonReadyDialog\",\n\t\"LFDDungeonReadyDialogCloseButton\",\n\t\"LFDDungeonReadyDialogEnterDungeonButton\",\n\t\"LFDDungeonReadyDialogInstanceInfoFrame\",\n\t\"LFDDungeonReadyDialogLeaveQueueButton\",\n\t\"LFDDungeonReadyDialogRandomInProgressFrame\",\n\t\"LFDDungeonReadyDialogRewardsFrame\",\n\t\"LFDDungeonReadyDialogRewardsFrameReward1\",\n\t\"LFDDungeonReadyDialogRewardsFrameReward2\",\n\t\"LFDDungeonReadyDialogRoleIcon\",\n\t\"LFDDungeonReadyPopup\",\n\t\"LFDDungeonReadyStatus\",\n\t\"LFDDungeonReadyStatusCloseButton\",\n\t\"LFDDungeonReadyStatusPlayer1\",\n\t\"LFDDungeonReadyStatusPlayer2\",\n\t\"LFDDungeonReadyStatusPlayer3\",\n\t\"LFDDungeonReadyStatusPlayer4\",\n\t\"LFDDungeonReadyStatusPlayer5\",\n\t\"LFDHiddenByCollapseList\",\n\t\"LFDMicroButton\",\n\t\"LFDParentFrame\",\n\t\"LFDParentFramePortrait\",\n\t\"LFDQueueFrame\",\n\t\"LFDQueueFrameCancelButton\",\n\t\"LFDQueueFrameCooldownFrame\",\n\t\"LFDQueueFrameFindGroupButton\",\n\t\"LFDQueueFrameNoLFDWhileLFR\",\n\t\"LFDQueueFrameNoLFDWhileLFRLeaveQueueButton\",\n\t\"LFDQueueFramePartyBackfill\",\n\t\"LFDQueueFramePartyBackfillBackfillButton\",\n\t\"LFDQueueFramePartyBackfillNoBackfillButton\",\n\t\"LFDQueueFrameRandom\",\n\t\"LFDQueueFrameRandomScrollFrame\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrame\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameItem1\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameMoneyFrame\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameMoneyFrameCopperButton\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameMoneyFrameGoldButton\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameMoneyFrameSilverButton\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameSpacer\",\n\t\"LFDQueueFrameRandomScrollFrameScrollBar\",\n\t\"LFDQueueFrameRandomScrollFrameScrollBarScrollDownButton\",\n\t\"LFDQueueFrameRandomScrollFrameScrollBarScrollUpButton\",\n\t\"LFDQueueFrameRoleButtonDPS\",\n\t\"LFDQueueFrameRoleButtonHealer\",\n\t\"LFDQueueFrameRoleButtonLeader\",\n\t\"LFDQueueFrameRoleButtonTank\",\n\t\"LFDQueueFrameSpecific\",\n\t\"LFDQueueFrameSpecificListButton1\",\n\t\"LFDQueueFrameSpecificListButton10\",\n\t\"LFDQueueFrameSpecificListButton10EnableButton\",\n\t\"LFDQueueFrameSpecificListButton10ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton11\",\n\t\"LFDQueueFrameSpecificListButton11EnableButton\",\n\t\"LFDQueueFrameSpecificListButton11ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton12\",\n\t\"LFDQueueFrameSpecificListButton12EnableButton\",\n\t\"LFDQueueFrameSpecificListButton12ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton13\",\n\t\"LFDQueueFrameSpecificListButton13EnableButton\",\n\t\"LFDQueueFrameSpecificListButton13ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton14\",\n\t\"LFDQueueFrameSpecificListButton14EnableButton\",\n\t\"LFDQueueFrameSpecificListButton14ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton15\",\n\t\"LFDQueueFrameSpecificListButton15EnableButton\",\n\t\"LFDQueueFrameSpecificListButton15ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton1EnableButton\",\n\t\"LFDQueueFrameSpecificListButton1ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton2\",\n\t\"LFDQueueFrameSpecificListButton2EnableButton\",\n\t\"LFDQueueFrameSpecificListButton2ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton3\",\n\t\"LFDQueueFrameSpecificListButton3EnableButton\",\n\t\"LFDQueueFrameSpecificListButton3ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton4\",\n\t\"LFDQueueFrameSpecificListButton4EnableButton\",\n\t\"LFDQueueFrameSpecificListButton4ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton5\",\n\t\"LFDQueueFrameSpecificListButton5EnableButton\",\n\t\"LFDQueueFrameSpecificListButton5ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton6\",\n\t\"LFDQueueFrameSpecificListButton6EnableButton\",\n\t\"LFDQueueFrameSpecificListButton6ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton7\",\n\t\"LFDQueueFrameSpecificListButton7EnableButton\",\n\t\"LFDQueueFrameSpecificListButton7ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton8\",\n\t\"LFDQueueFrameSpecificListButton8EnableButton\",\n\t\"LFDQueueFrameSpecificListButton8ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton9\",\n\t\"LFDQueueFrameSpecificListButton9EnableButton\",\n\t\"LFDQueueFrameSpecificListButton9ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListScrollFrame\",\n\t\"LFDQueueFrameSpecificListScrollFrameScrollBar\",\n\t\"LFDQueueFrameSpecificListScrollFrameScrollBarScrollDownButton\",\n\t\"LFDQueueFrameSpecificListScrollFrameScrollBarScrollUpButton\",\n\t\"LFDQueueFrameSpecificListScrollFrameScrollChildFrame\",\n\t\"LFDQueueFrameTypeDropDown\",\n\t\"LFDQueueFrameTypeDropDownButton\",\n\t\"LFDRoleCheckPopup\",\n\t\"LFDRoleCheckPopupAcceptButton\",\n\t\"LFDRoleCheckPopupDeclineButton\",\n\t\"LFDRoleCheckPopupDescription\",\n\t\"LFDRoleCheckPopupRoleButtonDPS\",\n\t\"LFDRoleCheckPopupRoleButtonHealer\",\n\t\"LFDRoleCheckPopupRoleButtonTank\",\n\t\"LFDSearchStatus\",\n\t\"LFDSearchStatusDamage1\",\n\t\"LFDSearchStatusDamage2\",\n\t\"LFDSearchStatusDamage3\",\n\t\"LFDSearchStatusHealer1\",\n\t\"LFDSearchStatusTank1\",\n\t\"LFGEventFrame\",\n\t\"LFGLockList\",\n\t\"LFGQueuedForList\",\n\t\"LFG_INSTANCE_INVALID_CODES\",\n\t\"LFG_RETURN_VALUES\",\n\t\"LFRBrowseFrame\",\n\t\"LFRBrowseFrameColumnHeader1\",\n\t\"LFRBrowseFrameColumnHeader2\",\n\t\"LFRBrowseFrameColumnHeader3\",\n\t\"LFRBrowseFrameColumnHeader4\",\n\t\"LFRBrowseFrameColumnHeader5\",\n\t\"LFRBrowseFrameColumnHeader6\",\n\t\"LFRBrowseFrameColumnHeader7\",\n\t\"LFRBrowseFrameInviteButton\",\n\t\"LFRBrowseFrameListButton1\",\n\t\"LFRBrowseFrameListButton10\",\n\t\"LFRBrowseFrameListButton11\",\n\t\"LFRBrowseFrameListButton12\",\n\t\"LFRBrowseFrameListButton13\",\n\t\"LFRBrowseFrameListButton14\",\n\t\"LFRBrowseFrameListButton15\",\n\t\"LFRBrowseFrameListButton16\",\n\t\"LFRBrowseFrameListButton17\",\n\t\"LFRBrowseFrameListButton18\",\n\t\"LFRBrowseFrameListButton19\",\n\t\"LFRBrowseFrameListButton2\",\n\t\"LFRBrowseFrameListButton3\",\n\t\"LFRBrowseFrameListButton4\",\n\t\"LFRBrowseFrameListButton5\",\n\t\"LFRBrowseFrameListButton6\",\n\t\"LFRBrowseFrameListButton7\",\n\t\"LFRBrowseFrameListButton8\",\n\t\"LFRBrowseFrameListButton9\",\n\t\"LFRBrowseFrameListScrollFrame\",\n\t\"LFRBrowseFrameListScrollFrameScrollBar\",\n\t\"LFRBrowseFrameListScrollFrameScrollBarScrollDownButton\",\n\t\"LFRBrowseFrameListScrollFrameScrollBarScrollUpButton\",\n\t\"LFRBrowseFrameListScrollFrameScrollChildFrame\",\n\t\"LFRBrowseFrameRaidDropDown\",\n\t\"LFRBrowseFrameRaidDropDownButton\",\n\t\"LFRBrowseFrameRefreshButton\",\n\t\"LFRBrowseFrameSendMessageButton\",\n\t\"LFRHiddenByCollapseList\",\n\t\"LFRParentFrame\",\n\t\"LFRParentFrameTab1\",\n\t\"LFRParentFrameTab2\",\n\t\"LFRQueueFrame\",\n\t\"LFRQueueFrameAcceptCommentButton\",\n\t\"LFRQueueFrameComment\",\n\t\"LFRQueueFrameCommentTextButton\",\n\t\"LFRQueueFrameFindGroupButton\",\n\t\"LFRQueueFrameNoLFRWhileLFD\",\n\t\"LFRQueueFrameNoLFRWhileLFDLeaveQueueButton\",\n\t\"LFRQueueFrameRoleButtonDPS\",\n\t\"LFRQueueFrameRoleButtonHealer\",\n\t\"LFRQueueFrameRoleButtonTank\",\n\t\"LFRQueueFrameSpecific\",\n\t\"LFRQueueFrameSpecificListButton1\",\n\t\"LFRQueueFrameSpecificListButton10\",\n\t\"LFRQueueFrameSpecificListButton10EnableButton\",\n\t\"LFRQueueFrameSpecificListButton10ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton11\",\n\t\"LFRQueueFrameSpecificListButton11EnableButton\",\n\t\"LFRQueueFrameSpecificListButton11ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton12\",\n\t\"LFRQueueFrameSpecificListButton12EnableButton\",\n\t\"LFRQueueFrameSpecificListButton12ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton13\",\n\t\"LFRQueueFrameSpecificListButton13EnableButton\",\n\t\"LFRQueueFrameSpecificListButton13ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton14\",\n\t\"LFRQueueFrameSpecificListButton14EnableButton\",\n\t\"LFRQueueFrameSpecificListButton14ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton1EnableButton\",\n\t\"LFRQueueFrameSpecificListButton1ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton2\",\n\t\"LFRQueueFrameSpecificListButton2EnableButton\",\n\t\"LFRQueueFrameSpecificListButton2ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton3\",\n\t\"LFRQueueFrameSpecificListButton3EnableButton\",\n\t\"LFRQueueFrameSpecificListButton3ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton4\",\n\t\"LFRQueueFrameSpecificListButton4EnableButton\",\n\t\"LFRQueueFrameSpecificListButton4ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton5\",\n\t\"LFRQueueFrameSpecificListButton5EnableButton\",\n\t\"LFRQueueFrameSpecificListButton5ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton6\",\n\t\"LFRQueueFrameSpecificListButton6EnableButton\",\n\t\"LFRQueueFrameSpecificListButton6ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton7\",\n\t\"LFRQueueFrameSpecificListButton7EnableButton\",\n\t\"LFRQueueFrameSpecificListButton7ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton8\",\n\t\"LFRQueueFrameSpecificListButton8EnableButton\",\n\t\"LFRQueueFrameSpecificListButton8ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton9\",\n\t\"LFRQueueFrameSpecificListButton9EnableButton\",\n\t\"LFRQueueFrameSpecificListButton9ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListScrollFrame\",\n\t\"LFRQueueFrameSpecificListScrollFrameScrollBar\",\n\t\"LFRQueueFrameSpecificListScrollFrameScrollBarScrollDownButton\",\n\t\"LFRQueueFrameSpecificListScrollFrameScrollBarScrollUpButton\",\n\t\"LFRQueueFrameSpecificListScrollFrameScrollChildFrame\",\n\t\"LIGHTYELLOW_FONT_COLOR\",\n\t\"LOCALIZED_CLASS_NAMES_FEMALE\",\n\t\"LOCALIZED_CLASS_NAMES_MALE\",\n\t\"LOCAL_MAP_QUESTS\",\n\t\"LanguageMenu\",\n\t\"LanguageMenuButton1\",\n\t\"LanguageMenuButton10\",\n\t\"LanguageMenuButton11\",\n\t\"LanguageMenuButton12\",\n\t\"LanguageMenuButton13\",\n\t\"LanguageMenuButton14\",\n\t\"LanguageMenuButton15\",\n\t\"LanguageMenuButton16\",\n\t\"LanguageMenuButton17\",\n\t\"LanguageMenuButton18\",\n\t\"LanguageMenuButton19\",\n\t\"LanguageMenuButton2\",\n\t\"LanguageMenuButton20\",\n\t\"LanguageMenuButton21\",\n\t\"LanguageMenuButton22\",\n\t\"LanguageMenuButton23\",\n\t\"LanguageMenuButton24\",\n\t\"LanguageMenuButton25\",\n\t\"LanguageMenuButton26\",\n\t\"LanguageMenuButton27\",\n\t\"LanguageMenuButton28\",\n\t\"LanguageMenuButton29\",\n\t\"LanguageMenuButton3\",\n\t\"LanguageMenuButton30\",\n\t\"LanguageMenuButton31\",\n\t\"LanguageMenuButton32\",\n\t\"LanguageMenuButton4\",\n\t\"LanguageMenuButton5\",\n\t\"LanguageMenuButton6\",\n\t\"LanguageMenuButton7\",\n\t\"LanguageMenuButton8\",\n\t\"LanguageMenuButton9\",\n\t\"LanguagesPanelOptions\",\n\t\"LoopbackVUMeter\",\n\t\"LootButton1\",\n\t\"LootButton2\",\n\t\"LootButton3\",\n\t\"LootButton4\",\n\t\"LootCloseButton\",\n\t\"LootFrame\",\n\t\"LootFrameDownButton\",\n\t\"LootFrameUpButton\",\n\t\"LowHealthFrame\",\n\t\"MAP_VEHICLES\",\n\t\"MATERIAL_TEXT_COLOR_TABLE\",\n\t\"MATERIAL_TITLETEXT_COLOR_TABLE\",\n\t\"MAX_PLAYER_LEVEL_TABLE\",\n\t\"MacOptionsButtonCompress\",\n\t\"MacOptionsButtonKeybindings\",\n\t\"MacOptionsCancelFrame\",\n\t\"MacOptionsCancelFrameNo\",\n\t\"MacOptionsCancelFrameYes\",\n\t\"MacOptionsCompressFrame\",\n\t\"MacOptionsCompressFrameCompress\",\n\t\"MacOptionsCompressFrameDelete\",\n\t\"MacOptionsCompressFrameSkip\",\n\t\"MacOptionsFrame\",\n\t\"MacOptionsFrameCancel\",\n\t\"MacOptionsFrameCheckButton1\",\n\t\"MacOptionsFrameCheckButton2\",\n\t\"MacOptionsFrameCheckButton3\",\n\t\"MacOptionsFrameCheckButton4\",\n\t\"MacOptionsFrameCheckButton5\",\n\t\"MacOptionsFrameCheckButton6\",\n\t\"MacOptionsFrameCheckButton7\",\n\t\"MacOptionsFrameCheckButton8\",\n\t\"MacOptionsFrameCheckButtons\",\n\t\"MacOptionsFrameCodecDropDown\",\n\t\"MacOptionsFrameCodecDropDownButton\",\n\t\"MacOptionsFrameDefaults\",\n\t\"MacOptionsFrameFramerateDropDown\",\n\t\"MacOptionsFrameFramerateDropDownButton\",\n\t\"MacOptionsFrameMovieRecording\",\n\t\"MacOptionsFrameOkay\",\n\t\"MacOptionsFrameQualitySlider\",\n\t\"MacOptionsFrameResolutionDropDown\",\n\t\"MacOptionsFrameResolutionDropDownButton\",\n\t\"MacOptionsITunesRemote\",\n\t\"MacroEditBox\",\n\t\"MagicResFrame1\",\n\t\"MagicResFrame2\",\n\t\"MagicResFrame3\",\n\t\"MagicResFrame4\",\n\t\"MagicResFrame5\",\n\t\"MailFrame\",\n\t\"MailFrameTab1\",\n\t\"MailFrameTab2\",\n\t\"MailItem1\",\n\t\"MailItem1Button\",\n\t\"MailItem1ExpireTime\",\n\t\"MailItem2\",\n\t\"MailItem2Button\",\n\t\"MailItem2ExpireTime\",\n\t\"MailItem3\",\n\t\"MailItem3Button\",\n\t\"MailItem3ExpireTime\",\n\t\"MailItem4\",\n\t\"MailItem4Button\",\n\t\"MailItem4ExpireTime\",\n\t\"MailItem5\",\n\t\"MailItem5Button\",\n\t\"MailItem5ExpireTime\",\n\t\"MailItem6\",\n\t\"MailItem6Button\",\n\t\"MailItem6ExpireTime\",\n\t\"MailItem7\",\n\t\"MailItem7Button\",\n\t\"MailItem7ExpireTime\",\n\t\"MainMenuBar\",\n\t\"MainMenuBarArtFrame\",\n\t\"MainMenuBarBackpackButton\",\n\t\"MainMenuBarBackpackButtonItemAnim\",\n\t\"MainMenuBarMaxLevelBar\",\n\t\"MainMenuBarOverlayFrame\",\n\t\"MainMenuBarVehicleLeaveButton\",\n\t\"MainMenuExpBar\",\n\t\"MainMenuMicroButton\",\n\t\"MerchantBuyBackItem\",\n\t\"MerchantBuyBackItemItemButton\",\n\t\"MerchantBuyBackItemMoneyFrame\",\n\t\"MerchantBuyBackItemMoneyFrameCopperButton\",\n\t\"MerchantBuyBackItemMoneyFrameGoldButton\",\n\t\"MerchantBuyBackItemMoneyFrameSilverButton\",\n\t\"MerchantFrame\",\n\t\"MerchantFrameCloseButton\",\n\t\"MerchantFrameTab1\",\n\t\"MerchantFrameTab2\",\n\t\"MerchantGuildBankRepairButton\",\n\t\"MerchantItem1\",\n\t\"MerchantItem10\",\n\t\"MerchantItem10AltCurrencyFrame\",\n\t\"MerchantItem10AltCurrencyFrameArena\",\n\t\"MerchantItem10AltCurrencyFrameHonor\",\n\t\"MerchantItem10AltCurrencyFrameItem1\",\n\t\"MerchantItem10AltCurrencyFrameItem2\",\n\t\"MerchantItem10AltCurrencyFrameItem3\",\n\t\"MerchantItem10ItemButton\",\n\t\"MerchantItem10MoneyFrame\",\n\t\"MerchantItem10MoneyFrameCopperButton\",\n\t\"MerchantItem10MoneyFrameGoldButton\",\n\t\"MerchantItem10MoneyFrameSilverButton\",\n\t\"MerchantItem11\",\n\t\"MerchantItem11AltCurrencyFrame\",\n\t\"MerchantItem11AltCurrencyFrameArena\",\n\t\"MerchantItem11AltCurrencyFrameHonor\",\n\t\"MerchantItem11AltCurrencyFrameItem1\",\n\t\"MerchantItem11AltCurrencyFrameItem2\",\n\t\"MerchantItem11AltCurrencyFrameItem3\",\n\t\"MerchantItem11ItemButton\",\n\t\"MerchantItem11MoneyFrame\",\n\t\"MerchantItem11MoneyFrameCopperButton\",\n\t\"MerchantItem11MoneyFrameGoldButton\",\n\t\"MerchantItem11MoneyFrameSilverButton\",\n\t\"MerchantItem12\",\n\t\"MerchantItem12AltCurrencyFrame\",\n\t\"MerchantItem12AltCurrencyFrameArena\",\n\t\"MerchantItem12AltCurrencyFrameHonor\",\n\t\"MerchantItem12AltCurrencyFrameItem1\",\n\t\"MerchantItem12AltCurrencyFrameItem2\",\n\t\"MerchantItem12AltCurrencyFrameItem3\",\n\t\"MerchantItem12ItemButton\",\n\t\"MerchantItem12MoneyFrame\",\n\t\"MerchantItem12MoneyFrameCopperButton\",\n\t\"MerchantItem12MoneyFrameGoldButton\",\n\t\"MerchantItem12MoneyFrameSilverButton\",\n\t\"MerchantItem1AltCurrencyFrame\",\n\t\"MerchantItem1AltCurrencyFrameArena\",\n\t\"MerchantItem1AltCurrencyFrameHonor\",\n\t\"MerchantItem1AltCurrencyFrameItem1\",\n\t\"MerchantItem1AltCurrencyFrameItem2\",\n\t\"MerchantItem1AltCurrencyFrameItem3\",\n\t\"MerchantItem1ItemButton\",\n\t\"MerchantItem1MoneyFrame\",\n\t\"MerchantItem1MoneyFrameCopperButton\",\n\t\"MerchantItem1MoneyFrameGoldButton\",\n\t\"MerchantItem1MoneyFrameSilverButton\",\n\t\"MerchantItem2\",\n\t\"MerchantItem2AltCurrencyFrame\",\n\t\"MerchantItem2AltCurrencyFrameArena\",\n\t\"MerchantItem2AltCurrencyFrameHonor\",\n\t\"MerchantItem2AltCurrencyFrameItem1\",\n\t\"MerchantItem2AltCurrencyFrameItem2\",\n\t\"MerchantItem2AltCurrencyFrameItem3\",\n\t\"MerchantItem2ItemButton\",\n\t\"MerchantItem2MoneyFrame\",\n\t\"MerchantItem2MoneyFrameCopperButton\",\n\t\"MerchantItem2MoneyFrameGoldButton\",\n\t\"MerchantItem2MoneyFrameSilverButton\",\n\t\"MerchantItem3\",\n\t\"MerchantItem3AltCurrencyFrame\",\n\t\"MerchantItem3AltCurrencyFrameArena\",\n\t\"MerchantItem3AltCurrencyFrameHonor\",\n\t\"MerchantItem3AltCurrencyFrameItem1\",\n\t\"MerchantItem3AltCurrencyFrameItem2\",\n\t\"MerchantItem3AltCurrencyFrameItem3\",\n\t\"MerchantItem3ItemButton\",\n\t\"MerchantItem3MoneyFrame\",\n\t\"MerchantItem3MoneyFrameCopperButton\",\n\t\"MerchantItem3MoneyFrameGoldButton\",\n\t\"MerchantItem3MoneyFrameSilverButton\",\n\t\"MerchantItem4\",\n\t\"MerchantItem4AltCurrencyFrame\",\n\t\"MerchantItem4AltCurrencyFrameArena\",\n\t\"MerchantItem4AltCurrencyFrameHonor\",\n\t\"MerchantItem4AltCurrencyFrameItem1\",\n\t\"MerchantItem4AltCurrencyFrameItem2\",\n\t\"MerchantItem4AltCurrencyFrameItem3\",\n\t\"MerchantItem4ItemButton\",\n\t\"MerchantItem4MoneyFrame\",\n\t\"MerchantItem4MoneyFrameCopperButton\",\n\t\"MerchantItem4MoneyFrameGoldButton\",\n\t\"MerchantItem4MoneyFrameSilverButton\",\n\t\"MerchantItem5\",\n\t\"MerchantItem5AltCurrencyFrame\",\n\t\"MerchantItem5AltCurrencyFrameArena\",\n\t\"MerchantItem5AltCurrencyFrameHonor\",\n\t\"MerchantItem5AltCurrencyFrameItem1\",\n\t\"MerchantItem5AltCurrencyFrameItem2\",\n\t\"MerchantItem5AltCurrencyFrameItem3\",\n\t\"MerchantItem5ItemButton\",\n\t\"MerchantItem5MoneyFrame\",\n\t\"MerchantItem5MoneyFrameCopperButton\",\n\t\"MerchantItem5MoneyFrameGoldButton\",\n\t\"MerchantItem5MoneyFrameSilverButton\",\n\t\"MerchantItem6\",\n\t\"MerchantItem6AltCurrencyFrame\",\n\t\"MerchantItem6AltCurrencyFrameArena\",\n\t\"MerchantItem6AltCurrencyFrameHonor\",\n\t\"MerchantItem6AltCurrencyFrameItem1\",\n\t\"MerchantItem6AltCurrencyFrameItem2\",\n\t\"MerchantItem6AltCurrencyFrameItem3\",\n\t\"MerchantItem6ItemButton\",\n\t\"MerchantItem6MoneyFrame\",\n\t\"MerchantItem6MoneyFrameCopperButton\",\n\t\"MerchantItem6MoneyFrameGoldButton\",\n\t\"MerchantItem6MoneyFrameSilverButton\",\n\t\"MerchantItem7\",\n\t\"MerchantItem7AltCurrencyFrame\",\n\t\"MerchantItem7AltCurrencyFrameArena\",\n\t\"MerchantItem7AltCurrencyFrameHonor\",\n\t\"MerchantItem7AltCurrencyFrameItem1\",\n\t\"MerchantItem7AltCurrencyFrameItem2\",\n\t\"MerchantItem7AltCurrencyFrameItem3\",\n\t\"MerchantItem7ItemButton\",\n\t\"MerchantItem7MoneyFrame\",\n\t\"MerchantItem7MoneyFrameCopperButton\",\n\t\"MerchantItem7MoneyFrameGoldButton\",\n\t\"MerchantItem7MoneyFrameSilverButton\",\n\t\"MerchantItem8\",\n\t\"MerchantItem8AltCurrencyFrame\",\n\t\"MerchantItem8AltCurrencyFrameArena\",\n\t\"MerchantItem8AltCurrencyFrameHonor\",\n\t\"MerchantItem8AltCurrencyFrameItem1\",\n\t\"MerchantItem8AltCurrencyFrameItem2\",\n\t\"MerchantItem8AltCurrencyFrameItem3\",\n\t\"MerchantItem8ItemButton\",\n\t\"MerchantItem8MoneyFrame\",\n\t\"MerchantItem8MoneyFrameCopperButton\",\n\t\"MerchantItem8MoneyFrameGoldButton\",\n\t\"MerchantItem8MoneyFrameSilverButton\",\n\t\"MerchantItem9\",\n\t\"MerchantItem9AltCurrencyFrame\",\n\t\"MerchantItem9AltCurrencyFrameArena\",\n\t\"MerchantItem9AltCurrencyFrameHonor\",\n\t\"MerchantItem9AltCurrencyFrameItem1\",\n\t\"MerchantItem9AltCurrencyFrameItem2\",\n\t\"MerchantItem9AltCurrencyFrameItem3\",\n\t\"MerchantItem9ItemButton\",\n\t\"MerchantItem9MoneyFrame\",\n\t\"MerchantItem9MoneyFrameCopperButton\",\n\t\"MerchantItem9MoneyFrameGoldButton\",\n\t\"MerchantItem9MoneyFrameSilverButton\",\n\t\"MerchantMoneyFrame\",\n\t\"MerchantMoneyFrameCopperButton\",\n\t\"MerchantMoneyFrameGoldButton\",\n\t\"MerchantMoneyFrameSilverButton\",\n\t\"MerchantNextPageButton\",\n\t\"MerchantPrevPageButton\",\n\t\"MerchantRepairAllButton\",\n\t\"MerchantRepairItemButton\",\n\t\"MiniMapBattlefieldDropDown\",\n\t\"MiniMapBattlefieldDropDownButton\",\n\t\"MiniMapBattlefieldFrame\",\n\t\"MiniMapInstanceDifficulty\",\n\t\"MiniMapLFGFrame\",\n\t\"MiniMapLFGFrameDropDown\",\n\t\"MiniMapLFGFrameDropDownButton\",\n\t\"MiniMapLFGFrameIcon\",\n\t\"MiniMapMailFrame\",\n\t\"MiniMapRecordingButton\",\n\t\"MiniMapTracking\",\n\t\"MiniMapTrackingButton\",\n\t\"MiniMapTrackingDropDown\",\n\t\"MiniMapTrackingDropDownButton\",\n\t\"MiniMapVoiceChatDropDown\",\n\t\"MiniMapVoiceChatDropDownButton\",\n\t\"MiniMapVoiceChatFrame\",\n\t\"MiniMapVoiceChatFrameIcon\",\n\t\"MiniMapWorldMapButton\",\n\t\"Minimap\",\n\t\"MinimapBackdrop\",\n\t\"MinimapCluster\",\n\t\"MinimapPing\",\n\t\"MinimapZoneTextButton\",\n\t\"MinimapZoomIn\",\n\t\"MinimapZoomOut\",\n\t\"MirrorTimer1\",\n\t\"MirrorTimer1StatusBar\",\n\t\"MirrorTimer2\",\n\t\"MirrorTimer2StatusBar\",\n\t\"MirrorTimer3\",\n\t\"MirrorTimer3StatusBar\",\n\t\"MirrorTimerColors\",\n\t\"MoneyTypeInfo\",\n\t\"MousePanelOptions\",\n\t\"MovieFrame\",\n\t\"MovieProgressBar\",\n\t\"MovieProgressFrame\",\n\t\"MovieRecordingCancelButton\",\n\t\"MovieRecordingFrameTextTooltip1\",\n\t\"MovieRecordingFrameTextTooltip2\",\n\t\"MultiBarBottomLeft\",\n\t\"MultiBarBottomLeftButton1\",\n\t\"MultiBarBottomLeftButton10\",\n\t\"MultiBarBottomLeftButton10Cooldown\",\n\t\"MultiBarBottomLeftButton11\",\n\t\"MultiBarBottomLeftButton11Cooldown\",\n\t\"MultiBarBottomLeftButton12\",\n\t\"MultiBarBottomLeftButton12Cooldown\",\n\t\"MultiBarBottomLeftButton1Cooldown\",\n\t\"MultiBarBottomLeftButton2\",\n\t\"MultiBarBottomLeftButton2Cooldown\",\n\t\"MultiBarBottomLeftButton3\",\n\t\"MultiBarBottomLeftButton3Cooldown\",\n\t\"MultiBarBottomLeftButton4\",\n\t\"MultiBarBottomLeftButton4Cooldown\",\n\t\"MultiBarBottomLeftButton5\",\n\t\"MultiBarBottomLeftButton5Cooldown\",\n\t\"MultiBarBottomLeftButton6\",\n\t\"MultiBarBottomLeftButton6Cooldown\",\n\t\"MultiBarBottomLeftButton7\",\n\t\"MultiBarBottomLeftButton7Cooldown\",\n\t\"MultiBarBottomLeftButton8\",\n\t\"MultiBarBottomLeftButton8Cooldown\",\n\t\"MultiBarBottomLeftButton9\",\n\t\"MultiBarBottomLeftButton9Cooldown\",\n\t\"MultiBarBottomRight\",\n\t\"MultiBarBottomRightButton1\",\n\t\"MultiBarBottomRightButton10\",\n\t\"MultiBarBottomRightButton10Cooldown\",\n\t\"MultiBarBottomRightButton11\",\n\t\"MultiBarBottomRightButton11Cooldown\",\n\t\"MultiBarBottomRightButton12\",\n\t\"MultiBarBottomRightButton12Cooldown\",\n\t\"MultiBarBottomRightButton1Cooldown\",\n\t\"MultiBarBottomRightButton2\",\n\t\"MultiBarBottomRightButton2Cooldown\",\n\t\"MultiBarBottomRightButton3\",\n\t\"MultiBarBottomRightButton3Cooldown\",\n\t\"MultiBarBottomRightButton4\",\n\t\"MultiBarBottomRightButton4Cooldown\",\n\t\"MultiBarBottomRightButton5\",\n\t\"MultiBarBottomRightButton5Cooldown\",\n\t\"MultiBarBottomRightButton6\",\n\t\"MultiBarBottomRightButton6Cooldown\",\n\t\"MultiBarBottomRightButton7\",\n\t\"MultiBarBottomRightButton7Cooldown\",\n\t\"MultiBarBottomRightButton8\",\n\t\"MultiBarBottomRightButton8Cooldown\",\n\t\"MultiBarBottomRightButton9\",\n\t\"MultiBarBottomRightButton9Cooldown\",\n\t\"MultiBarLeft\",\n\t\"MultiBarLeftButton1\",\n\t\"MultiBarLeftButton10\",\n\t\"MultiBarLeftButton10Cooldown\",\n\t\"MultiBarLeftButton11\",\n\t\"MultiBarLeftButton11Cooldown\",\n\t\"MultiBarLeftButton12\",\n\t\"MultiBarLeftButton12Cooldown\",\n\t\"MultiBarLeftButton1Cooldown\",\n\t\"MultiBarLeftButton2\",\n\t\"MultiBarLeftButton2Cooldown\",\n\t\"MultiBarLeftButton3\",\n\t\"MultiBarLeftButton3Cooldown\",\n\t\"MultiBarLeftButton4\",\n\t\"MultiBarLeftButton4Cooldown\",\n\t\"MultiBarLeftButton5\",\n\t\"MultiBarLeftButton5Cooldown\",\n\t\"MultiBarLeftButton6\",\n\t\"MultiBarLeftButton6Cooldown\",\n\t\"MultiBarLeftButton7\",\n\t\"MultiBarLeftButton7Cooldown\",\n\t\"MultiBarLeftButton8\",\n\t\"MultiBarLeftButton8Cooldown\",\n\t\"MultiBarLeftButton9\",\n\t\"MultiBarLeftButton9Cooldown\",\n\t\"MultiBarRight\",\n\t\"MultiBarRightButton1\",\n\t\"MultiBarRightButton10\",\n\t\"MultiBarRightButton10Cooldown\",\n\t\"MultiBarRightButton11\",\n\t\"MultiBarRightButton11Cooldown\",\n\t\"MultiBarRightButton12\",\n\t\"MultiBarRightButton12Cooldown\",\n\t\"MultiBarRightButton1Cooldown\",\n\t\"MultiBarRightButton2\",\n\t\"MultiBarRightButton2Cooldown\",\n\t\"MultiBarRightButton3\",\n\t\"MultiBarRightButton3Cooldown\",\n\t\"MultiBarRightButton4\",\n\t\"MultiBarRightButton4Cooldown\",\n\t\"MultiBarRightButton5\",\n\t\"MultiBarRightButton5Cooldown\",\n\t\"MultiBarRightButton6\",\n\t\"MultiBarRightButton6Cooldown\",\n\t\"MultiBarRightButton7\",\n\t\"MultiBarRightButton7Cooldown\",\n\t\"MultiBarRightButton8\",\n\t\"MultiBarRightButton8Cooldown\",\n\t\"MultiBarRightButton9\",\n\t\"MultiBarRightButton9Cooldown\",\n\t\"MultiCastActionBarFrame\",\n\t\"MultiCastActionButton1\",\n\t\"MultiCastActionButton10\",\n\t\"MultiCastActionButton10Cooldown\",\n\t\"MultiCastActionButton11\",\n\t\"MultiCastActionButton11Cooldown\",\n\t\"MultiCastActionButton12\",\n\t\"MultiCastActionButton12Cooldown\",\n\t\"MultiCastActionButton1Cooldown\",\n\t\"MultiCastActionButton2\",\n\t\"MultiCastActionButton2Cooldown\",\n\t\"MultiCastActionButton3\",\n\t\"MultiCastActionButton3Cooldown\",\n\t\"MultiCastActionButton4\",\n\t\"MultiCastActionButton4Cooldown\",\n\t\"MultiCastActionButton5\",\n\t\"MultiCastActionButton5Cooldown\",\n\t\"MultiCastActionButton6\",\n\t\"MultiCastActionButton6Cooldown\",\n\t\"MultiCastActionButton7\",\n\t\"MultiCastActionButton7Cooldown\",\n\t\"MultiCastActionButton8\",\n\t\"MultiCastActionButton8Cooldown\",\n\t\"MultiCastActionButton9\",\n\t\"MultiCastActionButton9Cooldown\",\n\t\"MultiCastActionPage1\",\n\t\"MultiCastActionPage2\",\n\t\"MultiCastActionPage3\",\n\t\"MultiCastFlyoutFrame\",\n\t\"MultiCastFlyoutFrameCloseButton\",\n\t\"MultiCastFlyoutFrameOpenButton\",\n\t\"MultiCastRecallSpellButton\",\n\t\"MultiCastRecallSpellButtonCooldown\",\n\t\"MultiCastSlotButton1\",\n\t\"MultiCastSlotButton2\",\n\t\"MultiCastSlotButton3\",\n\t\"MultiCastSlotButton4\",\n\t\"MultiCastSummonSpellButton\",\n\t\"MultiCastSummonSpellButtonCooldown\",\n\t\"MultiCastSummonSpellButtonFlyoutButton\",\n\t\"NORMAL_FONT_COLOR\",\n\t\"NamePanelOptions\",\n\t\"OPEN_DROPDOWNMENUS\",\n\t\"ORANGE_FONT_COLOR\",\n\t\"ObjectivesPanelOptions\",\n\t\"OpacityFrame\",\n\t\"OpacityFrameCloseButton\",\n\t\"OpacityFrameSlider\",\n\t\"OpacitySliderFrame\",\n\t\"OpenMailAttachmentButton1\",\n\t\"OpenMailAttachmentButton10\",\n\t\"OpenMailAttachmentButton11\",\n\t\"OpenMailAttachmentButton12\",\n\t\"OpenMailAttachmentButton13\",\n\t\"OpenMailAttachmentButton14\",\n\t\"OpenMailAttachmentButton15\",\n\t\"OpenMailAttachmentButton16\",\n\t\"OpenMailAttachmentButton2\",\n\t\"OpenMailAttachmentButton3\",\n\t\"OpenMailAttachmentButton4\",\n\t\"OpenMailAttachmentButton5\",\n\t\"OpenMailAttachmentButton6\",\n\t\"OpenMailAttachmentButton7\",\n\t\"OpenMailAttachmentButton8\",\n\t\"OpenMailAttachmentButton9\",\n\t\"OpenMailCancelButton\",\n\t\"OpenMailCloseButton\",\n\t\"OpenMailDeleteButton\",\n\t\"OpenMailDepositMoneyFrame\",\n\t\"OpenMailDepositMoneyFrameCopperButton\",\n\t\"OpenMailDepositMoneyFrameGoldButton\",\n\t\"OpenMailDepositMoneyFrameSilverButton\",\n\t\"OpenMailFrame\",\n\t\"OpenMailHouseCutMoneyFrame\",\n\t\"OpenMailHouseCutMoneyFrameCopperButton\",\n\t\"OpenMailHouseCutMoneyFrameGoldButton\",\n\t\"OpenMailHouseCutMoneyFrameSilverButton\",\n\t\"OpenMailInvoiceFrame\",\n\t\"OpenMailLetterButton\",\n\t\"OpenMailMoneyButton\",\n\t\"OpenMailReplyButton\",\n\t\"OpenMailReportSpamButton\",\n\t\"OpenMailSalePriceMoneyFrame\",\n\t\"OpenMailSalePriceMoneyFrameCopperButton\",\n\t\"OpenMailSalePriceMoneyFrameGoldButton\",\n\t\"OpenMailSalePriceMoneyFrameSilverButton\",\n\t\"OpenMailScrollChildFrame\",\n\t\"OpenMailScrollFrame\",\n\t\"OpenMailScrollFrameScrollBar\",\n\t\"OpenMailScrollFrameScrollBarScrollDownButton\",\n\t\"OpenMailScrollFrameScrollBarScrollUpButton\",\n\t\"OpenMailTransactionAmountMoneyFrame\",\n\t\"OpenMailTransactionAmountMoneyFrameCopperButton\",\n\t\"OpenMailTransactionAmountMoneyFrameGoldButton\",\n\t\"OpenMailTransactionAmountMoneyFrameSilverButton\",\n\t\"OtherMenuChatTypeGroups\",\n\t\"OutlandButton\",\n\t\"PASSIVE_SPELL_FONT_COLOR\",\n\t\"PDFITEMFLYOUT_MULTIROW_BOTTOM_COORDS\",\n\t\"PDFITEMFLYOUT_MULTIROW_MIDDLE_COORDS\",\n\t\"PDFITEMFLYOUT_MULTIROW_TOP_COORDS\",\n\t\"PDFITEMFLYOUT_ONEROW_CENTER_COORDS\",\n\t\"PDFITEMFLYOUT_ONEROW_LEFT_COORDS\",\n\t\"PDFITEMFLYOUT_ONEROW_RIGHT_COORDS\",\n\t\"PDFITEMFLYOUT_ONESLOT_LEFT_COORDS\",\n\t\"PDFITEMFLYOUT_ONESLOT_RIGHT_COORDS\",\n\t\"PENDING_GUILDBANK_PERMISSIONS\",\n\t\"PLAYERSTAT_DROPDOWN_OPTIONS\",\n\t\"PLAYER_FACTION_GROUP\",\n\t\"PREVIOUS_BATTLEFIELD_QUEUES\",\n\t\"PULSEBUTTONS\",\n\t\"PVPBannerFrame\",\n\t\"PVPBannerFrameAcceptButton\",\n\t\"PVPBannerFrameCancelButton\",\n\t\"PVPBannerFrameCloseButton\",\n\t\"PVPBannerFrameCustomization1\",\n\t\"PVPBannerFrameCustomization1LeftButton\",\n\t\"PVPBannerFrameCustomization1RightButton\",\n\t\"PVPBannerFrameCustomization2\",\n\t\"PVPBannerFrameCustomization2LeftButton\",\n\t\"PVPBannerFrameCustomization2RightButton\",\n\t\"PVPBannerFrameCustomizationFrame\",\n\t\"PVPBannerFrameSaveButton\",\n\t\"PVPBannerFrameStandard\",\n\t\"PVPBattlegroundFrame\",\n\t\"PVPBattlegroundFrameCancelButton\",\n\t\"PVPBattlegroundFrameGroupJoinButton\",\n\t\"PVPBattlegroundFrameInfoScrollFrame\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrame\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfo\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfoLossReward\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfoWinReward\",\n\t\"PVPBattlegroundFrameInfoScrollFrameScrollBar\",\n\t\"PVPBattlegroundFrameInfoScrollFrameScrollBarScrollDownButton\",\n\t\"PVPBattlegroundFrameInfoScrollFrameScrollBarScrollUpButton\",\n\t\"PVPBattlegroundFrameJoinButton\",\n\t\"PVPBattlegroundFrameTypeScrollFrame\",\n\t\"PVPBattlegroundFrameTypeScrollFrameScrollBar\",\n\t\"PVPBattlegroundFrameTypeScrollFrameScrollBarScrollDownButton\",\n\t\"PVPBattlegroundFrameTypeScrollFrameScrollBarScrollUpButton\",\n\t\"PVPBattlegroundFrameTypeScrollFrameScrollChildFrame\",\n\t\"PVPColorPickerButton1\",\n\t\"PVPColorPickerButton2\",\n\t\"PVPColorPickerButton3\",\n\t\"PVPDropDown\",\n\t\"PVPDropDownButton\",\n\t\"PVPFrame\",\n\t\"PVPFrameArena\",\n\t\"PVPFrameHonor\",\n\t\"PVPFrameOffSeason\",\n\t\"PVPFrameToggleButton\",\n\t\"PVPHonor\",\n\t\"PVPMicroButton\",\n\t\"PVPParentFrame\",\n\t\"PVPParentFrameCloseButton\",\n\t\"PVPParentFrameTab1\",\n\t\"PVPParentFrameTab2\",\n\t\"PVPTeam1\",\n\t\"PVPTeam1Data\",\n\t\"PVPTeam1Highlight\",\n\t\"PVPTeam1Standard\",\n\t\"PVPTeam2\",\n\t\"PVPTeam2Data\",\n\t\"PVPTeam2Highlight\",\n\t\"PVPTeam2Standard\",\n\t\"PVPTeam3\",\n\t\"PVPTeam3Data\",\n\t\"PVPTeam3Highlight\",\n\t\"PVPTeam3Standard\",\n\t\"PVPTeamDetails\",\n\t\"PVPTeamDetailsAddTeamMember\",\n\t\"PVPTeamDetailsButton1\",\n\t\"PVPTeamDetailsButton10\",\n\t\"PVPTeamDetailsButton10Class\",\n\t\"PVPTeamDetailsButton10Name\",\n\t\"PVPTeamDetailsButton10Played\",\n\t\"PVPTeamDetailsButton10Rating\",\n\t\"PVPTeamDetailsButton10WinLoss\",\n\t\"PVPTeamDetailsButton1Class\",\n\t\"PVPTeamDetailsButton1Name\",\n\t\"PVPTeamDetailsButton1Played\",\n\t\"PVPTeamDetailsButton1Rating\",\n\t\"PVPTeamDetailsButton1WinLoss\",\n\t\"PVPTeamDetailsButton2\",\n\t\"PVPTeamDetailsButton2Class\",\n\t\"PVPTeamDetailsButton2Name\",\n\t\"PVPTeamDetailsButton2Played\",\n\t\"PVPTeamDetailsButton2Rating\",\n\t\"PVPTeamDetailsButton2WinLoss\",\n\t\"PVPTeamDetailsButton3\",\n\t\"PVPTeamDetailsButton3Class\",\n\t\"PVPTeamDetailsButton3Name\",\n\t\"PVPTeamDetailsButton3Played\",\n\t\"PVPTeamDetailsButton3Rating\",\n\t\"PVPTeamDetailsButton3WinLoss\",\n\t\"PVPTeamDetailsButton4\",\n\t\"PVPTeamDetailsButton4Class\",\n\t\"PVPTeamDetailsButton4Name\",\n\t\"PVPTeamDetailsButton4Played\",\n\t\"PVPTeamDetailsButton4Rating\",\n\t\"PVPTeamDetailsButton4WinLoss\",\n\t\"PVPTeamDetailsButton5\",\n\t\"PVPTeamDetailsButton5Class\",\n\t\"PVPTeamDetailsButton5Name\",\n\t\"PVPTeamDetailsButton5Played\",\n\t\"PVPTeamDetailsButton5Rating\",\n\t\"PVPTeamDetailsButton5WinLoss\",\n\t\"PVPTeamDetailsButton6\",\n\t\"PVPTeamDetailsButton6Class\",\n\t\"PVPTeamDetailsButton6Name\",\n\t\"PVPTeamDetailsButton6Played\",\n\t\"PVPTeamDetailsButton6Rating\",\n\t\"PVPTeamDetailsButton6WinLoss\",\n\t\"PVPTeamDetailsButton7\",\n\t\"PVPTeamDetailsButton7Class\",\n\t\"PVPTeamDetailsButton7Name\",\n\t\"PVPTeamDetailsButton7Played\",\n\t\"PVPTeamDetailsButton7Rating\",\n\t\"PVPTeamDetailsButton7WinLoss\",\n\t\"PVPTeamDetailsButton8\",\n\t\"PVPTeamDetailsButton8Class\",\n\t\"PVPTeamDetailsButton8Name\",\n\t\"PVPTeamDetailsButton8Played\",\n\t\"PVPTeamDetailsButton8Rating\",\n\t\"PVPTeamDetailsButton8WinLoss\",\n\t\"PVPTeamDetailsButton9\",\n\t\"PVPTeamDetailsButton9Class\",\n\t\"PVPTeamDetailsButton9Name\",\n\t\"PVPTeamDetailsButton9Played\",\n\t\"PVPTeamDetailsButton9Rating\",\n\t\"PVPTeamDetailsButton9WinLoss\",\n\t\"PVPTeamDetailsCloseButton\",\n\t\"PVPTeamDetailsFrameColumnHeader1\",\n\t\"PVPTeamDetailsFrameColumnHeader2\",\n\t\"PVPTeamDetailsFrameColumnHeader3\",\n\t\"PVPTeamDetailsFrameColumnHeader4\",\n\t\"PVPTeamDetailsFrameColumnHeader5\",\n\t\"PVPTeamDetailsToggleButton\",\n\t\"PaperDollFrame\",\n\t\"PaperDollFrameItemFlyout\",\n\t\"PaperDollFrameItemFlyoutButtons\",\n\t\"PartyMemberBackground\",\n\t\"PartyMemberBuffTooltip\",\n\t\"PartyMemberBuffTooltipBuff1\",\n\t\"PartyMemberBuffTooltipBuff10\",\n\t\"PartyMemberBuffTooltipBuff11\",\n\t\"PartyMemberBuffTooltipBuff12\",\n\t\"PartyMemberBuffTooltipBuff13\",\n\t\"PartyMemberBuffTooltipBuff14\",\n\t\"PartyMemberBuffTooltipBuff15\",\n\t\"PartyMemberBuffTooltipBuff16\",\n\t\"PartyMemberBuffTooltipBuff2\",\n\t\"PartyMemberBuffTooltipBuff3\",\n\t\"PartyMemberBuffTooltipBuff4\",\n\t\"PartyMemberBuffTooltipBuff5\",\n\t\"PartyMemberBuffTooltipBuff6\",\n\t\"PartyMemberBuffTooltipBuff7\",\n\t\"PartyMemberBuffTooltipBuff8\",\n\t\"PartyMemberBuffTooltipBuff9\",\n\t\"PartyMemberBuffTooltipDebuff1\",\n\t\"PartyMemberBuffTooltipDebuff2\",\n\t\"PartyMemberBuffTooltipDebuff3\",\n\t\"PartyMemberBuffTooltipDebuff4\",\n\t\"PartyMemberBuffTooltipDebuff5\",\n\t\"PartyMemberBuffTooltipDebuff6\",\n\t\"PartyMemberBuffTooltipDebuff7\",\n\t\"PartyMemberBuffTooltipDebuff8\",\n\t\"PartyMemberFrame1\",\n\t\"PartyMemberFrame1Debuff1\",\n\t\"PartyMemberFrame1Debuff2\",\n\t\"PartyMemberFrame1Debuff3\",\n\t\"PartyMemberFrame1Debuff4\",\n\t\"PartyMemberFrame1DropDown\",\n\t\"PartyMemberFrame1DropDownButton\",\n\t\"PartyMemberFrame1HealthBar\",\n\t\"PartyMemberFrame1ManaBar\",\n\t\"PartyMemberFrame1PetFrame\",\n\t\"PartyMemberFrame1PetFrameDebuff1\",\n\t\"PartyMemberFrame1PetFrameDebuff2\",\n\t\"PartyMemberFrame1PetFrameDebuff3\",\n\t\"PartyMemberFrame1PetFrameDebuff4\",\n\t\"PartyMemberFrame1PetFrameHealthBar\",\n\t\"PartyMemberFrame1ReadyCheck\",\n\t\"PartyMemberFrame1Speaker\",\n\t\"PartyMemberFrame1SpeakerFrame\",\n\t\"PartyMemberFrame2\",\n\t\"PartyMemberFrame2Debuff1\",\n\t\"PartyMemberFrame2Debuff2\",\n\t\"PartyMemberFrame2Debuff3\",\n\t\"PartyMemberFrame2Debuff4\",\n\t\"PartyMemberFrame2DropDown\",\n\t\"PartyMemberFrame2DropDownButton\",\n\t\"PartyMemberFrame2HealthBar\",\n\t\"PartyMemberFrame2ManaBar\",\n\t\"PartyMemberFrame2PetFrame\",\n\t\"PartyMemberFrame2PetFrameDebuff1\",\n\t\"PartyMemberFrame2PetFrameDebuff2\",\n\t\"PartyMemberFrame2PetFrameDebuff3\",\n\t\"PartyMemberFrame2PetFrameDebuff4\",\n\t\"PartyMemberFrame2PetFrameHealthBar\",\n\t\"PartyMemberFrame2ReadyCheck\",\n\t\"PartyMemberFrame2Speaker\",\n\t\"PartyMemberFrame2SpeakerFrame\",\n\t\"PartyMemberFrame3\",\n\t\"PartyMemberFrame3Debuff1\",\n\t\"PartyMemberFrame3Debuff2\",\n\t\"PartyMemberFrame3Debuff3\",\n\t\"PartyMemberFrame3Debuff4\",\n\t\"PartyMemberFrame3DropDown\",\n\t\"PartyMemberFrame3DropDownButton\",\n\t\"PartyMemberFrame3HealthBar\",\n\t\"PartyMemberFrame3ManaBar\",\n\t\"PartyMemberFrame3PetFrame\",\n\t\"PartyMemberFrame3PetFrameDebuff1\",\n\t\"PartyMemberFrame3PetFrameDebuff2\",\n\t\"PartyMemberFrame3PetFrameDebuff3\",\n\t\"PartyMemberFrame3PetFrameDebuff4\",\n\t\"PartyMemberFrame3PetFrameHealthBar\",\n\t\"PartyMemberFrame3ReadyCheck\",\n\t\"PartyMemberFrame3Speaker\",\n\t\"PartyMemberFrame3SpeakerFrame\",\n\t\"PartyMemberFrame4\",\n\t\"PartyMemberFrame4Debuff1\",\n\t\"PartyMemberFrame4Debuff2\",\n\t\"PartyMemberFrame4Debuff3\",\n\t\"PartyMemberFrame4Debuff4\",\n\t\"PartyMemberFrame4DropDown\",\n\t\"PartyMemberFrame4DropDownButton\",\n\t\"PartyMemberFrame4HealthBar\",\n\t\"PartyMemberFrame4ManaBar\",\n\t\"PartyMemberFrame4PetFrame\",\n\t\"PartyMemberFrame4PetFrameDebuff1\",\n\t\"PartyMemberFrame4PetFrameDebuff2\",\n\t\"PartyMemberFrame4PetFrameDebuff3\",\n\t\"PartyMemberFrame4PetFrameDebuff4\",\n\t\"PartyMemberFrame4PetFrameHealthBar\",\n\t\"PartyMemberFrame4ReadyCheck\",\n\t\"PartyMemberFrame4Speaker\",\n\t\"PartyMemberFrame4SpeakerFrame\",\n\t\"PendingListFrame\",\n\t\"PendingListFrameDropDown\",\n\t\"PendingListFrameDropDownButton\",\n\t\"PendingListInfoFrame\",\n\t\"PendingListInfoFrameContinueButton\",\n\t\"PetActionBarFrame\",\n\t\"PetActionButton1\",\n\t\"PetActionButton10\",\n\t\"PetActionButton10Cooldown\",\n\t\"PetActionButton10Shine\",\n\t\"PetActionButton1Cooldown\",\n\t\"PetActionButton1Shine\",\n\t\"PetActionButton2\",\n\t\"PetActionButton2Cooldown\",\n\t\"PetActionButton2Shine\",\n\t\"PetActionButton3\",\n\t\"PetActionButton3Cooldown\",\n\t\"PetActionButton3Shine\",\n\t\"PetActionButton4\",\n\t\"PetActionButton4Cooldown\",\n\t\"PetActionButton4Shine\",\n\t\"PetActionButton5\",\n\t\"PetActionButton5Cooldown\",\n\t\"PetActionButton5Shine\",\n\t\"PetActionButton6\",\n\t\"PetActionButton6Cooldown\",\n\t\"PetActionButton6Shine\",\n\t\"PetActionButton7\",\n\t\"PetActionButton7Cooldown\",\n\t\"PetActionButton7Shine\",\n\t\"PetActionButton8\",\n\t\"PetActionButton8Cooldown\",\n\t\"PetActionButton8Shine\",\n\t\"PetActionButton9\",\n\t\"PetActionButton9Cooldown\",\n\t\"PetActionButton9Shine\",\n\t\"PetArmorFrame\",\n\t\"PetArmorFrameStat\",\n\t\"PetAttackPowerFrame\",\n\t\"PetAttackPowerFrameStat\",\n\t\"PetAttributesFrame\",\n\t\"PetCastingBarFrame\",\n\t\"PetDamageFrame\",\n\t\"PetDamageFrameStat\",\n\t\"PetFrame\",\n\t\"PetFrameDebuff1\",\n\t\"PetFrameDebuff2\",\n\t\"PetFrameDebuff3\",\n\t\"PetFrameDebuff4\",\n\t\"PetFrameDropDown\",\n\t\"PetFrameDropDownButton\",\n\t\"PetFrameHappiness\",\n\t\"PetFrameHealthBar\",\n\t\"PetFrameManaBar\",\n\t\"PetMagicResFrame1\",\n\t\"PetMagicResFrame2\",\n\t\"PetMagicResFrame3\",\n\t\"PetMagicResFrame4\",\n\t\"PetMagicResFrame5\",\n\t\"PetModelFrame\",\n\t\"PetModelFrameRotateLeftButton\",\n\t\"PetModelFrameRotateRightButton\",\n\t\"PetPaperDollCloseButton\",\n\t\"PetPaperDollFrame\",\n\t\"PetPaperDollFrameCompanionFrame\",\n\t\"PetPaperDollFrameExpBar\",\n\t\"PetPaperDollFramePetFrame\",\n\t\"PetPaperDollFrameTab1\",\n\t\"PetPaperDollFrameTab2\",\n\t\"PetPaperDollFrameTab3\",\n\t\"PetPaperDollPetInfo\",\n\t\"PetResistanceFrame\",\n\t\"PetSpellDamageFrame\",\n\t\"PetSpellDamageFrameStat\",\n\t\"PetStableCostMoneyFrame\",\n\t\"PetStableCostMoneyFrameCopperButton\",\n\t\"PetStableCostMoneyFrameGoldButton\",\n\t\"PetStableCostMoneyFrameSilverButton\",\n\t\"PetStableCurrentPet\",\n\t\"PetStableFrame\",\n\t\"PetStableFrameCloseButton\",\n\t\"PetStableModel\",\n\t\"PetStableModelRotateLeftButton\",\n\t\"PetStableModelRotateRightButton\",\n\t\"PetStableMoneyFrame\",\n\t\"PetStableMoneyFrameCopperButton\",\n\t\"PetStableMoneyFrameGoldButton\",\n\t\"PetStableMoneyFrameSilverButton\",\n\t\"PetStablePetInfo\",\n\t\"PetStablePurchaseButton\",\n\t\"PetStableStabledPet1\",\n\t\"PetStableStabledPet2\",\n\t\"PetStableStabledPet3\",\n\t\"PetStableStabledPet4\",\n\t\"PetStatFrame1\",\n\t\"PetStatFrame1Stat\",\n\t\"PetStatFrame2\",\n\t\"PetStatFrame2Stat\",\n\t\"PetStatFrame3\",\n\t\"PetStatFrame3Stat\",\n\t\"PetStatFrame4\",\n\t\"PetStatFrame4Stat\",\n\t\"PetStatFrame5\",\n\t\"PetStatFrame5Stat\",\n\t\"PetitionFrame\",\n\t\"PetitionFrameCancelButton\",\n\t\"PetitionFrameCloseButton\",\n\t\"PetitionFrameRenameButton\",\n\t\"PetitionFrameRequestButton\",\n\t\"PetitionFrameSignButton\",\n\t\"PetitionNpcNameFrame\",\n\t\"PlayLoopbackSoundButton\",\n\t\"PlayerArrowEffectFrame\",\n\t\"PlayerArrowFrame\",\n\t\"PlayerFrame\",\n\t\"PlayerFrameAlternateManaBar\",\n\t\"PlayerFrameDropDown\",\n\t\"PlayerFrameDropDownButton\",\n\t\"PlayerFrameGroupIndicator\",\n\t\"PlayerFrameHealthBar\",\n\t\"PlayerFrameManaBar\",\n\t\"PlayerFrameReadyCheck\",\n\t\"PlayerPVPIconHitArea\",\n\t\"PlayerPlayTime\",\n\t\"PlayerSpeakerFrame\",\n\t\"PlayerStatFrameLeft1\",\n\t\"PlayerStatFrameLeft1Stat\",\n\t\"PlayerStatFrameLeft2\",\n\t\"PlayerStatFrameLeft2Stat\",\n\t\"PlayerStatFrameLeft3\",\n\t\"PlayerStatFrameLeft3Stat\",\n\t\"PlayerStatFrameLeft4\",\n\t\"PlayerStatFrameLeft4Stat\",\n\t\"PlayerStatFrameLeft5\",\n\t\"PlayerStatFrameLeft5Stat\",\n\t\"PlayerStatFrameLeft6\",\n\t\"PlayerStatFrameLeft6Stat\",\n\t\"PlayerStatFrameLeftDropDown\",\n\t\"PlayerStatFrameLeftDropDownButton\",\n\t\"PlayerStatFrameRight1\",\n\t\"PlayerStatFrameRight1Stat\",\n\t\"PlayerStatFrameRight2\",\n\t\"PlayerStatFrameRight2Stat\",\n\t\"PlayerStatFrameRight3\",\n\t\"PlayerStatFrameRight3Stat\",\n\t\"PlayerStatFrameRight4\",\n\t\"PlayerStatFrameRight4Stat\",\n\t\"PlayerStatFrameRight5\",\n\t\"PlayerStatFrameRight5Stat\",\n\t\"PlayerStatFrameRight6\",\n\t\"PlayerStatFrameRight6Stat\",\n\t\"PlayerStatFrameRightDropDown\",\n\t\"PlayerStatFrameRightDropDownButton\",\n\t\"PlayerStatusGlow\",\n\t\"PlayerTitleFrame\",\n\t\"PlayerTitleFrameButton\",\n\t\"PlayerTitlePickerFrame\",\n\t\"PlayerTitlePickerScrollFrame\",\n\t\"PlayerTitlePickerScrollFrameButton1\",\n\t\"PlayerTitlePickerScrollFrameButton2\",\n\t\"PlayerTitlePickerScrollFrameButton3\",\n\t\"PlayerTitlePickerScrollFrameButton4\",\n\t\"PlayerTitlePickerScrollFrameButton5\",\n\t\"PlayerTitlePickerScrollFrameButton6\",\n\t\"PlayerTitlePickerScrollFrameButton7\",\n\t\"PlayerTitlePickerScrollFrameButton8\",\n\t\"PlayerTitlePickerScrollFrameScrollBar\",\n\t\"PlayerTitlePickerScrollFrameScrollBarScrollDownButton\",\n\t\"PlayerTitlePickerScrollFrameScrollBarScrollUpButton\",\n\t\"PlayerTitlePickerScrollFrameScrollChild\",\n\t\"PossessBarFrame\",\n\t\"PossessButton1\",\n\t\"PossessButton1Cooldown\",\n\t\"PossessButton2\",\n\t\"PossessButton2Cooldown\",\n\t\"PowerBarColor\",\n\t\"QUEST_POI_SWAP_BUTTONS\",\n\t\"QUEST_TEMPLATE_DETAIL1\",\n\t\"QUEST_TEMPLATE_DETAIL2\",\n\t\"QUEST_TEMPLATE_LOG\",\n\t\"QUEST_TEMPLATE_MAP1\",\n\t\"QUEST_TEMPLATE_MAP2\",\n\t\"QUEST_TEMPLATE_REWARD\",\n\t\"QuestDetailScrollChildFrame\",\n\t\"QuestDetailScrollFrame\",\n\t\"QuestDetailScrollFrameScrollBar\",\n\t\"QuestDetailScrollFrameScrollBarScrollDownButton\",\n\t\"QuestDetailScrollFrameScrollBarScrollUpButton\",\n\t\"QuestDifficultyColors\",\n\t\"QuestFrame\",\n\t\"QuestFrameAcceptButton\",\n\t\"QuestFrameCancelButton\",\n\t\"QuestFrameCloseButton\",\n\t\"QuestFrameCompleteButton\",\n\t\"QuestFrameCompleteQuestButton\",\n\t\"QuestFrameDeclineButton\",\n\t\"QuestFrameDetailPanel\",\n\t\"QuestFrameGoodbyeButton\",\n\t\"QuestFrameGreetingGoodbyeButton\",\n\t\"QuestFrameGreetingPanel\",\n\t\"QuestFrameProgressPanel\",\n\t\"QuestFrameRewardPanel\",\n\t\"QuestGreetingScrollChildFrame\",\n\t\"QuestGreetingScrollFrame\",\n\t\"QuestGreetingScrollFrameScrollBar\",\n\t\"QuestGreetingScrollFrameScrollBarScrollDownButton\",\n\t\"QuestGreetingScrollFrameScrollBarScrollUpButton\",\n\t\"QuestInfoArenaPointsFrame\",\n\t\"QuestInfoFadingFrame\",\n\t\"QuestInfoFrame\",\n\t\"QuestInfoHonorFrame\",\n\t\"QuestInfoItem1\",\n\t\"QuestInfoItem10\",\n\t\"QuestInfoItem2\",\n\t\"QuestInfoItem3\",\n\t\"QuestInfoItem4\",\n\t\"QuestInfoItem5\",\n\t\"QuestInfoItem6\",\n\t\"QuestInfoItem7\",\n\t\"QuestInfoItem8\",\n\t\"QuestInfoItem9\",\n\t\"QuestInfoItemHighlight\",\n\t\"QuestInfoMoneyFrame\",\n\t\"QuestInfoMoneyFrameCopperButton\",\n\t\"QuestInfoMoneyFrameGoldButton\",\n\t\"QuestInfoMoneyFrameSilverButton\",\n\t\"QuestInfoObjectivesFrame\",\n\t\"QuestInfoPlayerTitleFrame\",\n\t\"QuestInfoReputation1\",\n\t\"QuestInfoReputation10\",\n\t\"QuestInfoReputation2\",\n\t\"QuestInfoReputation3\",\n\t\"QuestInfoReputation4\",\n\t\"QuestInfoReputation5\",\n\t\"QuestInfoReputation6\",\n\t\"QuestInfoReputation7\",\n\t\"QuestInfoReputation8\",\n\t\"QuestInfoReputation9\",\n\t\"QuestInfoReputationsFrame\",\n\t\"QuestInfoRequiredMoneyDisplay\",\n\t\"QuestInfoRequiredMoneyDisplayCopperButton\",\n\t\"QuestInfoRequiredMoneyDisplayGoldButton\",\n\t\"QuestInfoRequiredMoneyDisplaySilverButton\",\n\t\"QuestInfoRequiredMoneyFrame\",\n\t\"QuestInfoRewardsFrame\",\n\t\"QuestInfoSpacerFrame\",\n\t\"QuestInfoTalentFrame\",\n\t\"QuestInfoTimerFrame\",\n\t\"QuestInfoXPFrame\",\n\t\"QuestLogControlPanel\",\n\t\"QuestLogCount\",\n\t\"QuestLogDailyQuestCountMouseOverFrame\",\n\t\"QuestLogDetailFrame\",\n\t\"QuestLogDetailFrameCloseButton\",\n\t\"QuestLogDetailScrollChildFrame\",\n\t\"QuestLogDetailScrollFrame\",\n\t\"QuestLogDetailScrollFrameScrollBar\",\n\t\"QuestLogDetailScrollFrameScrollBarScrollDownButton\",\n\t\"QuestLogDetailScrollFrameScrollBarScrollUpButton\",\n\t\"QuestLogFrame\",\n\t\"QuestLogFrameAbandonButton\",\n\t\"QuestLogFrameCancelButton\",\n\t\"QuestLogFrameCloseButton\",\n\t\"QuestLogFramePushQuestButton\",\n\t\"QuestLogFrameShowMapButton\",\n\t\"QuestLogFrameTrackButton\",\n\t\"QuestLogHighlightFrame\",\n\t\"QuestLogMapFrame\",\n\t\"QuestLogMicroButton\",\n\t\"QuestLogScrollFrame\",\n\t\"QuestLogScrollFrameButton1\",\n\t\"QuestLogScrollFrameButton10\",\n\t\"QuestLogScrollFrameButton11\",\n\t\"QuestLogScrollFrameButton12\",\n\t\"QuestLogScrollFrameButton13\",\n\t\"QuestLogScrollFrameButton14\",\n\t\"QuestLogScrollFrameButton15\",\n\t\"QuestLogScrollFrameButton16\",\n\t\"QuestLogScrollFrameButton17\",\n\t\"QuestLogScrollFrameButton18\",\n\t\"QuestLogScrollFrameButton19\",\n\t\"QuestLogScrollFrameButton2\",\n\t\"QuestLogScrollFrameButton20\",\n\t\"QuestLogScrollFrameButton21\",\n\t\"QuestLogScrollFrameButton22\",\n\t\"QuestLogScrollFrameButton3\",\n\t\"QuestLogScrollFrameButton4\",\n\t\"QuestLogScrollFrameButton5\",\n\t\"QuestLogScrollFrameButton6\",\n\t\"QuestLogScrollFrameButton7\",\n\t\"QuestLogScrollFrameButton8\",\n\t\"QuestLogScrollFrameButton9\",\n\t\"QuestLogScrollFrameScrollBar\",\n\t\"QuestLogScrollFrameScrollBarScrollDownButton\",\n\t\"QuestLogScrollFrameScrollBarScrollUpButton\",\n\t\"QuestLogScrollFrameScrollChild\",\n\t\"QuestNpcNameFrame\",\n\t\"QuestProgressItem1\",\n\t\"QuestProgressItem2\",\n\t\"QuestProgressItem3\",\n\t\"QuestProgressItem4\",\n\t\"QuestProgressItem5\",\n\t\"QuestProgressItem6\",\n\t\"QuestProgressRequiredMoneyFrame\",\n\t\"QuestProgressRequiredMoneyFrameCopperButton\",\n\t\"QuestProgressRequiredMoneyFrameGoldButton\",\n\t\"QuestProgressRequiredMoneyFrameSilverButton\",\n\t\"QuestProgressScrollChildFrame\",\n\t\"QuestProgressScrollFrame\",\n\t\"QuestProgressScrollFrameScrollBar\",\n\t\"QuestProgressScrollFrameScrollBarScrollDownButton\",\n\t\"QuestProgressScrollFrameScrollBarScrollUpButton\",\n\t\"QuestRewardScrollChildFrame\",\n\t\"QuestRewardScrollFrame\",\n\t\"QuestRewardScrollFrameScrollBar\",\n\t\"QuestRewardScrollFrameScrollBarScrollDownButton\",\n\t\"QuestRewardScrollFrameScrollBarScrollUpButton\",\n\t\"QuestTitleButton1\",\n\t\"QuestTitleButton10\",\n\t\"QuestTitleButton11\",\n\t\"QuestTitleButton12\",\n\t\"QuestTitleButton13\",\n\t\"QuestTitleButton14\",\n\t\"QuestTitleButton15\",\n\t\"QuestTitleButton16\",\n\t\"QuestTitleButton17\",\n\t\"QuestTitleButton18\",\n\t\"QuestTitleButton19\",\n\t\"QuestTitleButton2\",\n\t\"QuestTitleButton20\",\n\t\"QuestTitleButton21\",\n\t\"QuestTitleButton22\",\n\t\"QuestTitleButton23\",\n\t\"QuestTitleButton24\",\n\t\"QuestTitleButton25\",\n\t\"QuestTitleButton26\",\n\t\"QuestTitleButton27\",\n\t\"QuestTitleButton28\",\n\t\"QuestTitleButton29\",\n\t\"QuestTitleButton3\",\n\t\"QuestTitleButton30\",\n\t\"QuestTitleButton31\",\n\t\"QuestTitleButton32\",\n\t\"QuestTitleButton4\",\n\t\"QuestTitleButton5\",\n\t\"QuestTitleButton6\",\n\t\"QuestTitleButton7\",\n\t\"QuestTitleButton8\",\n\t\"QuestTitleButton9\",\n\t\"RAID_CLASS_BUTTONS\",\n\t\"RAID_CLASS_COLORS\",\n\t\"RAID_PULLOUT_POSITIONS\",\n\t\"RAID_PULLOUT_SAVED_SETTINGS\",\n\t\"RAID_SINGLE_POSITIONS\",\n\t\"RAID_SUBGROUP_LISTS\",\n\t\"RED_FONT_COLOR\",\n\t\"RaidBossEmoteFrame\",\n\t\"RaidClassButton1\",\n\t\"RaidClassButton10\",\n\t\"RaidClassButton11\",\n\t\"RaidClassButton12\",\n\t\"RaidClassButton13\",\n\t\"RaidClassButton2\",\n\t\"RaidClassButton3\",\n\t\"RaidClassButton4\",\n\t\"RaidClassButton5\",\n\t\"RaidClassButton6\",\n\t\"RaidClassButton7\",\n\t\"RaidClassButton8\",\n\t\"RaidClassButton9\",\n\t\"RaidFrame\",\n\t\"RaidFrameConvertToRaidButton\",\n\t\"RaidFrameNotInRaid\",\n\t\"RaidFrameNotInRaidRaidBrowserButton\",\n\t\"RaidFrameRaidBrowserButton\",\n\t\"RaidFrameRaidInfoButton\",\n\t\"RaidFrameReadyCheckButton\",\n\t\"RaidGroup1\",\n\t\"RaidGroup1Label\",\n\t\"RaidGroup1Slot1\",\n\t\"RaidGroup1Slot2\",\n\t\"RaidGroup1Slot3\",\n\t\"RaidGroup1Slot4\",\n\t\"RaidGroup1Slot5\",\n\t\"RaidGroup2\",\n\t\"RaidGroup2Label\",\n\t\"RaidGroup2Slot1\",\n\t\"RaidGroup2Slot2\",\n\t\"RaidGroup2Slot3\",\n\t\"RaidGroup2Slot4\",\n\t\"RaidGroup2Slot5\",\n\t\"RaidGroup3\",\n\t\"RaidGroup3Label\",\n\t\"RaidGroup3Slot1\",\n\t\"RaidGroup3Slot2\",\n\t\"RaidGroup3Slot3\",\n\t\"RaidGroup3Slot4\",\n\t\"RaidGroup3Slot5\",\n\t\"RaidGroup4\",\n\t\"RaidGroup4Label\",\n\t\"RaidGroup4Slot1\",\n\t\"RaidGroup4Slot2\",\n\t\"RaidGroup4Slot3\",\n\t\"RaidGroup4Slot4\",\n\t\"RaidGroup4Slot5\",\n\t\"RaidGroup5\",\n\t\"RaidGroup5Label\",\n\t\"RaidGroup5Slot1\",\n\t\"RaidGroup5Slot2\",\n\t\"RaidGroup5Slot3\",\n\t\"RaidGroup5Slot4\",\n\t\"RaidGroup5Slot5\",\n\t\"RaidGroup6\",\n\t\"RaidGroup6Label\",\n\t\"RaidGroup6Slot1\",\n\t\"RaidGroup6Slot2\",\n\t\"RaidGroup6Slot3\",\n\t\"RaidGroup6Slot4\",\n\t\"RaidGroup6Slot5\",\n\t\"RaidGroup7\",\n\t\"RaidGroup7Label\",\n\t\"RaidGroup7Slot1\",\n\t\"RaidGroup7Slot2\",\n\t\"RaidGroup7Slot3\",\n\t\"RaidGroup7Slot4\",\n\t\"RaidGroup7Slot5\",\n\t\"RaidGroup8\",\n\t\"RaidGroup8Label\",\n\t\"RaidGroup8Slot1\",\n\t\"RaidGroup8Slot2\",\n\t\"RaidGroup8Slot3\",\n\t\"RaidGroup8Slot4\",\n\t\"RaidGroup8Slot5\",\n\t\"RaidGroupButton1\",\n\t\"RaidGroupButton10\",\n\t\"RaidGroupButton10Loot\",\n\t\"RaidGroupButton10Rank\",\n\t\"RaidGroupButton10ReadyCheck\",\n\t\"RaidGroupButton10Role\",\n\t\"RaidGroupButton11\",\n\t\"RaidGroupButton11Loot\",\n\t\"RaidGroupButton11Rank\",\n\t\"RaidGroupButton11ReadyCheck\",\n\t\"RaidGroupButton11Role\",\n\t\"RaidGroupButton12\",\n\t\"RaidGroupButton12Loot\",\n\t\"RaidGroupButton12Rank\",\n\t\"RaidGroupButton12ReadyCheck\",\n\t\"RaidGroupButton12Role\",\n\t\"RaidGroupButton13\",\n\t\"RaidGroupButton13Loot\",\n\t\"RaidGroupButton13Rank\",\n\t\"RaidGroupButton13ReadyCheck\",\n\t\"RaidGroupButton13Role\",\n\t\"RaidGroupButton14\",\n\t\"RaidGroupButton14Loot\",\n\t\"RaidGroupButton14Rank\",\n\t\"RaidGroupButton14ReadyCheck\",\n\t\"RaidGroupButton14Role\",\n\t\"RaidGroupButton15\",\n\t\"RaidGroupButton15Loot\",\n\t\"RaidGroupButton15Rank\",\n\t\"RaidGroupButton15ReadyCheck\",\n\t\"RaidGroupButton15Role\",\n\t\"RaidGroupButton16\",\n\t\"RaidGroupButton16Loot\",\n\t\"RaidGroupButton16Rank\",\n\t\"RaidGroupButton16ReadyCheck\",\n\t\"RaidGroupButton16Role\",\n\t\"RaidGroupButton17\",\n\t\"RaidGroupButton17Loot\",\n\t\"RaidGroupButton17Rank\",\n\t\"RaidGroupButton17ReadyCheck\",\n\t\"RaidGroupButton17Role\",\n\t\"RaidGroupButton18\",\n\t\"RaidGroupButton18Loot\",\n\t\"RaidGroupButton18Rank\",\n\t\"RaidGroupButton18ReadyCheck\",\n\t\"RaidGroupButton18Role\",\n\t\"RaidGroupButton19\",\n\t\"RaidGroupButton19Loot\",\n\t\"RaidGroupButton19Rank\",\n\t\"RaidGroupButton19ReadyCheck\",\n\t\"RaidGroupButton19Role\",\n\t\"RaidGroupButton1Loot\",\n\t\"RaidGroupButton1Rank\",\n\t\"RaidGroupButton1ReadyCheck\",\n\t\"RaidGroupButton1Role\",\n\t\"RaidGroupButton2\",\n\t\"RaidGroupButton20\",\n\t\"RaidGroupButton20Loot\",\n\t\"RaidGroupButton20Rank\",\n\t\"RaidGroupButton20ReadyCheck\",\n\t\"RaidGroupButton20Role\",\n\t\"RaidGroupButton21\",\n\t\"RaidGroupButton21Loot\",\n\t\"RaidGroupButton21Rank\",\n\t\"RaidGroupButton21ReadyCheck\",\n\t\"RaidGroupButton21Role\",\n\t\"RaidGroupButton22\",\n\t\"RaidGroupButton22Loot\",\n\t\"RaidGroupButton22Rank\",\n\t\"RaidGroupButton22ReadyCheck\",\n\t\"RaidGroupButton22Role\",\n\t\"RaidGroupButton23\",\n\t\"RaidGroupButton23Loot\",\n\t\"RaidGroupButton23Rank\",\n\t\"RaidGroupButton23ReadyCheck\",\n\t\"RaidGroupButton23Role\",\n\t\"RaidGroupButton24\",\n\t\"RaidGroupButton24Loot\",\n\t\"RaidGroupButton24Rank\",\n\t\"RaidGroupButton24ReadyCheck\",\n\t\"RaidGroupButton24Role\",\n\t\"RaidGroupButton25\",\n\t\"RaidGroupButton25Loot\",\n\t\"RaidGroupButton25Rank\",\n\t\"RaidGroupButton25ReadyCheck\",\n\t\"RaidGroupButton25Role\",\n\t\"RaidGroupButton26\",\n\t\"RaidGroupButton26Loot\",\n\t\"RaidGroupButton26Rank\",\n\t\"RaidGroupButton26ReadyCheck\",\n\t\"RaidGroupButton26Role\",\n\t\"RaidGroupButton27\",\n\t\"RaidGroupButton27Loot\",\n\t\"RaidGroupButton27Rank\",\n\t\"RaidGroupButton27ReadyCheck\",\n\t\"RaidGroupButton27Role\",\n\t\"RaidGroupButton28\",\n\t\"RaidGroupButton28Loot\",\n\t\"RaidGroupButton28Rank\",\n\t\"RaidGroupButton28ReadyCheck\",\n\t\"RaidGroupButton28Role\",\n\t\"RaidGroupButton29\",\n\t\"RaidGroupButton29Loot\",\n\t\"RaidGroupButton29Rank\",\n\t\"RaidGroupButton29ReadyCheck\",\n\t\"RaidGroupButton29Role\",\n\t\"RaidGroupButton2Loot\",\n\t\"RaidGroupButton2Rank\",\n\t\"RaidGroupButton2ReadyCheck\",\n\t\"RaidGroupButton2Role\",\n\t\"RaidGroupButton3\",\n\t\"RaidGroupButton30\",\n\t\"RaidGroupButton30Loot\",\n\t\"RaidGroupButton30Rank\",\n\t\"RaidGroupButton30ReadyCheck\",\n\t\"RaidGroupButton30Role\",\n\t\"RaidGroupButton31\",\n\t\"RaidGroupButton31Loot\",\n\t\"RaidGroupButton31Rank\",\n\t\"RaidGroupButton31ReadyCheck\",\n\t\"RaidGroupButton31Role\",\n\t\"RaidGroupButton32\",\n\t\"RaidGroupButton32Loot\",\n\t\"RaidGroupButton32Rank\",\n\t\"RaidGroupButton32ReadyCheck\",\n\t\"RaidGroupButton32Role\",\n\t\"RaidGroupButton33\",\n\t\"RaidGroupButton33Loot\",\n\t\"RaidGroupButton33Rank\",\n\t\"RaidGroupButton33ReadyCheck\",\n\t\"RaidGroupButton33Role\",\n\t\"RaidGroupButton34\",\n\t\"RaidGroupButton34Loot\",\n\t\"RaidGroupButton34Rank\",\n\t\"RaidGroupButton34ReadyCheck\",\n\t\"RaidGroupButton34Role\",\n\t\"RaidGroupButton35\",\n\t\"RaidGroupButton35Loot\",\n\t\"RaidGroupButton35Rank\",\n\t\"RaidGroupButton35ReadyCheck\",\n\t\"RaidGroupButton35Role\",\n\t\"RaidGroupButton36\",\n\t\"RaidGroupButton36Loot\",\n\t\"RaidGroupButton36Rank\",\n\t\"RaidGroupButton36ReadyCheck\",\n\t\"RaidGroupButton36Role\",\n\t\"RaidGroupButton37\",\n\t\"RaidGroupButton37Loot\",\n\t\"RaidGroupButton37Rank\",\n\t\"RaidGroupButton37ReadyCheck\",\n\t\"RaidGroupButton37Role\",\n\t\"RaidGroupButton38\",\n\t\"RaidGroupButton38Loot\",\n\t\"RaidGroupButton38Rank\",\n\t\"RaidGroupButton38ReadyCheck\",\n\t\"RaidGroupButton38Role\",\n\t\"RaidGroupButton39\",\n\t\"RaidGroupButton39Loot\",\n\t\"RaidGroupButton39Rank\",\n\t\"RaidGroupButton39ReadyCheck\",\n\t\"RaidGroupButton39Role\",\n\t\"RaidGroupButton3Loot\",\n\t\"RaidGroupButton3Rank\",\n\t\"RaidGroupButton3ReadyCheck\",\n\t\"RaidGroupButton3Role\",\n\t\"RaidGroupButton4\",\n\t\"RaidGroupButton40\",\n\t\"RaidGroupButton40Loot\",\n\t\"RaidGroupButton40Rank\",\n\t\"RaidGroupButton40ReadyCheck\",\n\t\"RaidGroupButton40Role\",\n\t\"RaidGroupButton4Loot\",\n\t\"RaidGroupButton4Rank\",\n\t\"RaidGroupButton4ReadyCheck\",\n\t\"RaidGroupButton4Role\",\n\t\"RaidGroupButton5\",\n\t\"RaidGroupButton5Loot\",\n\t\"RaidGroupButton5Rank\",\n\t\"RaidGroupButton5ReadyCheck\",\n\t\"RaidGroupButton5Role\",\n\t\"RaidGroupButton6\",\n\t\"RaidGroupButton6Loot\",\n\t\"RaidGroupButton6Rank\",\n\t\"RaidGroupButton6ReadyCheck\",\n\t\"RaidGroupButton6Role\",\n\t\"RaidGroupButton7\",\n\t\"RaidGroupButton7Loot\",\n\t\"RaidGroupButton7Rank\",\n\t\"RaidGroupButton7ReadyCheck\",\n\t\"RaidGroupButton7Role\",\n\t\"RaidGroupButton8\",\n\t\"RaidGroupButton8Loot\",\n\t\"RaidGroupButton8Rank\",\n\t\"RaidGroupButton8ReadyCheck\",\n\t\"RaidGroupButton8Role\",\n\t\"RaidGroupButton9\",\n\t\"RaidGroupButton9Loot\",\n\t\"RaidGroupButton9Rank\",\n\t\"RaidGroupButton9ReadyCheck\",\n\t\"RaidGroupButton9Role\",\n\t\"RaidInfoCancelButton\",\n\t\"RaidInfoCloseButton\",\n\t\"RaidInfoExtendButton\",\n\t\"RaidInfoFrame\",\n\t\"RaidInfoIDLabel\",\n\t\"RaidInfoInstanceLabel\",\n\t\"RaidInfoScrollFrame\",\n\t\"RaidInfoScrollFrameButton1\",\n\t\"RaidInfoScrollFrameButton2\",\n\t\"RaidInfoScrollFrameButton3\",\n\t\"RaidInfoScrollFrameButton4\",\n\t\"RaidInfoScrollFrameButton5\",\n\t\"RaidInfoScrollFrameButton6\",\n\t\"RaidInfoScrollFrameButton7\",\n\t\"RaidInfoScrollFrameScrollBar\",\n\t\"RaidInfoScrollFrameScrollBarScrollDownButton\",\n\t\"RaidInfoScrollFrameScrollBarScrollUpButton\",\n\t\"RaidInfoScrollFrameScrollChild\",\n\t\"RaidWarningFrame\",\n\t\"RatingMenuButtonOkay\",\n\t\"RatingMenuFrame\",\n\t\"ReadyCheckFrame\",\n\t\"ReadyCheckFrameNoButton\",\n\t\"ReadyCheckFrameYesButton\",\n\t\"ReadyCheckListenerFrame\",\n\t\"RecordLoopbackSoundButton\",\n\t\"ReputationBar1\",\n\t\"ReputationBar10\",\n\t\"ReputationBar10ExpandOrCollapseButton\",\n\t\"ReputationBar10ReputationBar\",\n\t\"ReputationBar11\",\n\t\"ReputationBar11ExpandOrCollapseButton\",\n\t\"ReputationBar11ReputationBar\",\n\t\"ReputationBar12\",\n\t\"ReputationBar12ExpandOrCollapseButton\",\n\t\"ReputationBar12ReputationBar\",\n\t\"ReputationBar13\",\n\t\"ReputationBar13ExpandOrCollapseButton\",\n\t\"ReputationBar13ReputationBar\",\n\t\"ReputationBar14\",\n\t\"ReputationBar14ExpandOrCollapseButton\",\n\t\"ReputationBar14ReputationBar\",\n\t\"ReputationBar15\",\n\t\"ReputationBar15ExpandOrCollapseButton\",\n\t\"ReputationBar15ReputationBar\",\n\t\"ReputationBar1ExpandOrCollapseButton\",\n\t\"ReputationBar1ReputationBar\",\n\t\"ReputationBar2\",\n\t\"ReputationBar2ExpandOrCollapseButton\",\n\t\"ReputationBar2ReputationBar\",\n\t\"ReputationBar3\",\n\t\"ReputationBar3ExpandOrCollapseButton\",\n\t\"ReputationBar3ReputationBar\",\n\t\"ReputationBar4\",\n\t\"ReputationBar4ExpandOrCollapseButton\",\n\t\"ReputationBar4ReputationBar\",\n\t\"ReputationBar5\",\n\t\"ReputationBar5ExpandOrCollapseButton\",\n\t\"ReputationBar5ReputationBar\",\n\t\"ReputationBar6\",\n\t\"ReputationBar6ExpandOrCollapseButton\",\n\t\"ReputationBar6ReputationBar\",\n\t\"ReputationBar7\",\n\t\"ReputationBar7ExpandOrCollapseButton\",\n\t\"ReputationBar7ReputationBar\",\n\t\"ReputationBar8\",\n\t\"ReputationBar8ExpandOrCollapseButton\",\n\t\"ReputationBar8ReputationBar\",\n\t\"ReputationBar9\",\n\t\"ReputationBar9ExpandOrCollapseButton\",\n\t\"ReputationBar9ReputationBar\",\n\t\"ReputationDetailAtWarCheckBox\",\n\t\"ReputationDetailCloseButton\",\n\t\"ReputationDetailFrame\",\n\t\"ReputationDetailInactiveCheckBox\",\n\t\"ReputationDetailMainScreenCheckBox\",\n\t\"ReputationFrame\",\n\t\"ReputationListScrollFrame\",\n\t\"ReputationListScrollFrameScrollBar\",\n\t\"ReputationListScrollFrameScrollBarScrollDownButton\",\n\t\"ReputationListScrollFrameScrollBarScrollUpButton\",\n\t\"ReputationListScrollFrameScrollChildFrame\",\n\t\"ReputationWatchBar\",\n\t\"ReputationWatchBarOverlayFrame\",\n\t\"ReputationWatchStatusBar\",\n\t\"ResolutionPanelOptions\",\n\t\"RuneButtonIndividual1\",\n\t\"RuneButtonIndividual1Border\",\n\t\"RuneButtonIndividual1Cooldown\",\n\t\"RuneButtonIndividual1Shine\",\n\t\"RuneButtonIndividual2\",\n\t\"RuneButtonIndividual2Border\",\n\t\"RuneButtonIndividual2Cooldown\",\n\t\"RuneButtonIndividual2Shine\",\n\t\"RuneButtonIndividual3\",\n\t\"RuneButtonIndividual3Border\",\n\t\"RuneButtonIndividual3Cooldown\",\n\t\"RuneButtonIndividual3Shine\",\n\t\"RuneButtonIndividual4\",\n\t\"RuneButtonIndividual4Border\",\n\t\"RuneButtonIndividual4Cooldown\",\n\t\"RuneButtonIndividual4Shine\",\n\t\"RuneButtonIndividual5\",\n\t\"RuneButtonIndividual5Border\",\n\t\"RuneButtonIndividual5Cooldown\",\n\t\"RuneButtonIndividual5Shine\",\n\t\"RuneButtonIndividual6\",\n\t\"RuneButtonIndividual6Border\",\n\t\"RuneButtonIndividual6Cooldown\",\n\t\"RuneButtonIndividual6Shine\",\n\t\"RuneFrame\",\n\t\"SELECTED_DOCK_FRAME\",\n\t\"SEND_MAIL_TAB_LIST\",\n\t\"SHINES_TO_ANIMATE\",\n\t\"SPELLBOOK_PAGENUMBERS\",\n\t\"STATIC_CONSTANTS\",\n\t\"SUBTRACTED_PLAYERS\",\n\t\"ScorePlayerDropDown\",\n\t\"ScorePlayerDropDownButton\",\n\t\"SecureHandlersUpdateFrame\",\n\t\"SecureHoverDriverManager\",\n\t\"SecureStateDriverManager\",\n\t\"SendMailAttachment1\",\n\t\"SendMailAttachment10\",\n\t\"SendMailAttachment11\",\n\t\"SendMailAttachment12\",\n\t\"SendMailAttachment13\",\n\t\"SendMailAttachment14\",\n\t\"SendMailAttachment15\",\n\t\"SendMailAttachment16\",\n\t\"SendMailAttachment2\",\n\t\"SendMailAttachment3\",\n\t\"SendMailAttachment4\",\n\t\"SendMailAttachment5\",\n\t\"SendMailAttachment6\",\n\t\"SendMailAttachment7\",\n\t\"SendMailAttachment8\",\n\t\"SendMailAttachment9\",\n\t\"SendMailBodyEditBox\",\n\t\"SendMailCODButton\",\n\t\"SendMailCancelButton\",\n\t\"SendMailCostMoneyFrame\",\n\t\"SendMailCostMoneyFrameCopperButton\",\n\t\"SendMailCostMoneyFrameGoldButton\",\n\t\"SendMailCostMoneyFrameSilverButton\",\n\t\"SendMailFrame\",\n\t\"SendMailFrameLockSendMail\",\n\t\"SendMailMailButton\",\n\t\"SendMailMoney\",\n\t\"SendMailMoneyButton\",\n\t\"SendMailMoneyCopper\",\n\t\"SendMailMoneyFrame\",\n\t\"SendMailMoneyFrameCopperButton\",\n\t\"SendMailMoneyFrameGoldButton\",\n\t\"SendMailMoneyFrameSilverButton\",\n\t\"SendMailMoneyGold\",\n\t\"SendMailMoneySilver\",\n\t\"SendMailNameEditBox\",\n\t\"SendMailScrollChildFrame\",\n\t\"SendMailScrollFrame\",\n\t\"SendMailScrollFrameScrollBar\",\n\t\"SendMailScrollFrameScrollBarScrollDownButton\",\n\t\"SendMailScrollFrameScrollBarScrollUpButton\",\n\t\"SendMailSendMoneyButton\",\n\t\"SendMailSubjectEditBox\",\n\t\"SetContainer\",\n\t\"ShapeshiftBarFrame\",\n\t\"ShapeshiftButton1\",\n\t\"ShapeshiftButton10\",\n\t\"ShapeshiftButton10Cooldown\",\n\t\"ShapeshiftButton1Cooldown\",\n\t\"ShapeshiftButton2\",\n\t\"ShapeshiftButton2Cooldown\",\n\t\"ShapeshiftButton3\",\n\t\"ShapeshiftButton3Cooldown\",\n\t\"ShapeshiftButton4\",\n\t\"ShapeshiftButton4Cooldown\",\n\t\"ShapeshiftButton5\",\n\t\"ShapeshiftButton5Cooldown\",\n\t\"ShapeshiftButton6\",\n\t\"ShapeshiftButton6Cooldown\",\n\t\"ShapeshiftButton7\",\n\t\"ShapeshiftButton7Cooldown\",\n\t\"ShapeshiftButton8\",\n\t\"ShapeshiftButton8Cooldown\",\n\t\"ShapeshiftButton9\",\n\t\"ShapeshiftButton9Cooldown\",\n\t\"ShoppingTooltip1\",\n\t\"ShoppingTooltip2\",\n\t\"ShoppingTooltip3\",\n\t\"ShowAllSpellRanksCheckBox\",\n\t\"SkillDetailScrollChildFrame\",\n\t\"SkillDetailScrollFrame\",\n\t\"SkillDetailScrollFrameScrollBar\",\n\t\"SkillDetailScrollFrameScrollBarScrollDownButton\",\n\t\"SkillDetailScrollFrameScrollBarScrollUpButton\",\n\t\"SkillDetailStatusBar\",\n\t\"SkillDetailStatusBarLearnSkillButton\",\n\t\"SkillDetailStatusBarLeftArrow\",\n\t\"SkillDetailStatusBarRightArrow\",\n\t\"SkillDetailStatusBarUnlearnButton\",\n\t\"SkillFrame\",\n\t\"SkillFrameCancelButton\",\n\t\"SkillFrameCollapseAllButton\",\n\t\"SkillFrameExpandButtonFrame\",\n\t\"SkillListScrollFrame\",\n\t\"SkillListScrollFrameScrollBar\",\n\t\"SkillListScrollFrameScrollBarScrollDownButton\",\n\t\"SkillListScrollFrameScrollBarScrollUpButton\",\n\t\"SkillListScrollFrameScrollChildFrame\",\n\t\"SkillRankFrame1\",\n\t\"SkillRankFrame10\",\n\t\"SkillRankFrame10Border\",\n\t\"SkillRankFrame11\",\n\t\"SkillRankFrame11Border\",\n\t\"SkillRankFrame12\",\n\t\"SkillRankFrame12Border\",\n\t\"SkillRankFrame1Border\",\n\t\"SkillRankFrame2\",\n\t\"SkillRankFrame2Border\",\n\t\"SkillRankFrame3\",\n\t\"SkillRankFrame3Border\",\n\t\"SkillRankFrame4\",\n\t\"SkillRankFrame4Border\",\n\t\"SkillRankFrame5\",\n\t\"SkillRankFrame5Border\",\n\t\"SkillRankFrame6\",\n\t\"SkillRankFrame6Border\",\n\t\"SkillRankFrame7\",\n\t\"SkillRankFrame7Border\",\n\t\"SkillRankFrame8\",\n\t\"SkillRankFrame8Border\",\n\t\"SkillRankFrame9\",\n\t\"SkillRankFrame9Border\",\n\t\"SkillTypeLabel1\",\n\t\"SkillTypeLabel10\",\n\t\"SkillTypeLabel11\",\n\t\"SkillTypeLabel12\",\n\t\"SkillTypeLabel2\",\n\t\"SkillTypeLabel3\",\n\t\"SkillTypeLabel4\",\n\t\"SkillTypeLabel5\",\n\t\"SkillTypeLabel6\",\n\t\"SkillTypeLabel7\",\n\t\"SkillTypeLabel8\",\n\t\"SkillTypeLabel9\",\n\t\"SlashCmdList\",\n\t\"SmallTextTooltip\",\n\t\"SocialPanelOptions\",\n\t\"SocialsMicroButton\",\n\t\"SoundPanelOptions\",\n\t\"SparkleDimensions\",\n\t\"SparkleFrame\",\n\t\"SpellBookCloseButton\",\n\t\"SpellBookFrame\",\n\t\"SpellBookFrameTabButton1\",\n\t\"SpellBookFrameTabButton2\",\n\t\"SpellBookFrameTabButton3\",\n\t\"SpellBookNextPageButton\",\n\t\"SpellBookPrevPageButton\",\n\t\"SpellBookSkillLineTab1\",\n\t\"SpellBookSkillLineTab2\",\n\t\"SpellBookSkillLineTab3\",\n\t\"SpellBookSkillLineTab4\",\n\t\"SpellBookSkillLineTab5\",\n\t\"SpellBookSkillLineTab6\",\n\t\"SpellBookSkillLineTab7\",\n\t\"SpellBookSkillLineTab8\",\n\t\"SpellBookTabFlashFrame\",\n\t\"SpellButton1\",\n\t\"SpellButton10\",\n\t\"SpellButton10Cooldown\",\n\t\"SpellButton11\",\n\t\"SpellButton11Cooldown\",\n\t\"SpellButton12\",\n\t\"SpellButton12Cooldown\",\n\t\"SpellButton1Cooldown\",\n\t\"SpellButton2\",\n\t\"SpellButton2Cooldown\",\n\t\"SpellButton3\",\n\t\"SpellButton3Cooldown\",\n\t\"SpellButton4\",\n\t\"SpellButton4Cooldown\",\n\t\"SpellButton5\",\n\t\"SpellButton5Cooldown\",\n\t\"SpellButton6\",\n\t\"SpellButton6Cooldown\",\n\t\"SpellButton7\",\n\t\"SpellButton7Cooldown\",\n\t\"SpellButton8\",\n\t\"SpellButton8Cooldown\",\n\t\"SpellButton9\",\n\t\"SpellButton9Cooldown\",\n\t\"SpellbookMicroButton\",\n\t\"StackSplitCancelButton\",\n\t\"StackSplitFrame\",\n\t\"StackSplitLeftButton\",\n\t\"StackSplitOkayButton\",\n\t\"StackSplitRightButton\",\n\t\"StandingMouseOver\",\n\t\"StaticPopup1\",\n\t\"StaticPopup1Button1\",\n\t\"StaticPopup1Button2\",\n\t\"StaticPopup1Button3\",\n\t\"StaticPopup1CloseButton\",\n\t\"StaticPopup1EditBox\",\n\t\"StaticPopup1ExtraFrame\",\n\t\"StaticPopup1ItemFrame\",\n\t\"StaticPopup1MoneyFrame\",\n\t\"StaticPopup1MoneyFrameCopperButton\",\n\t\"StaticPopup1MoneyFrameGoldButton\",\n\t\"StaticPopup1MoneyFrameSilverButton\",\n\t\"StaticPopup1MoneyInputFrame\",\n\t\"StaticPopup1MoneyInputFrameCopper\",\n\t\"StaticPopup1MoneyInputFrameGold\",\n\t\"StaticPopup1MoneyInputFrameSilver\",\n\t\"StaticPopup1WideEditBox\",\n\t\"StaticPopup2\",\n\t\"StaticPopup2Button1\",\n\t\"StaticPopup2Button2\",\n\t\"StaticPopup2Button3\",\n\t\"StaticPopup2CloseButton\",\n\t\"StaticPopup2EditBox\",\n\t\"StaticPopup2ExtraFrame\",\n\t\"StaticPopup2ItemFrame\",\n\t\"StaticPopup2MoneyFrame\",\n\t\"StaticPopup2MoneyFrameCopperButton\",\n\t\"StaticPopup2MoneyFrameGoldButton\",\n\t\"StaticPopup2MoneyFrameSilverButton\",\n\t\"StaticPopup2MoneyInputFrame\",\n\t\"StaticPopup2MoneyInputFrameCopper\",\n\t\"StaticPopup2MoneyInputFrameGold\",\n\t\"StaticPopup2MoneyInputFrameSilver\",\n\t\"StaticPopup2WideEditBox\",\n\t\"StaticPopup3\",\n\t\"StaticPopup3Button1\",\n\t\"StaticPopup3Button2\",\n\t\"StaticPopup3Button3\",\n\t\"StaticPopup3CloseButton\",\n\t\"StaticPopup3EditBox\",\n\t\"StaticPopup3ExtraFrame\",\n\t\"StaticPopup3ItemFrame\",\n\t\"StaticPopup3MoneyFrame\",\n\t\"StaticPopup3MoneyFrameCopperButton\",\n\t\"StaticPopup3MoneyFrameGoldButton\",\n\t\"StaticPopup3MoneyFrameSilverButton\",\n\t\"StaticPopup3MoneyInputFrame\",\n\t\"StaticPopup3MoneyInputFrameCopper\",\n\t\"StaticPopup3MoneyInputFrameGold\",\n\t\"StaticPopup3MoneyInputFrameSilver\",\n\t\"StaticPopup3WideEditBox\",\n\t\"StaticPopup4\",\n\t\"StaticPopup4Button1\",\n\t\"StaticPopup4Button2\",\n\t\"StaticPopup4Button3\",\n\t\"StaticPopup4CloseButton\",\n\t\"StaticPopup4EditBox\",\n\t\"StaticPopup4ExtraFrame\",\n\t\"StaticPopup4ItemFrame\",\n\t\"StaticPopup4MoneyFrame\",\n\t\"StaticPopup4MoneyFrameCopperButton\",\n\t\"StaticPopup4MoneyFrameGoldButton\",\n\t\"StaticPopup4MoneyFrameSilverButton\",\n\t\"StaticPopup4MoneyInputFrame\",\n\t\"StaticPopup4MoneyInputFrameCopper\",\n\t\"StaticPopup4MoneyInputFrameGold\",\n\t\"StaticPopup4MoneyInputFrameSilver\",\n\t\"StaticPopup4WideEditBox\",\n\t\"StaticPopupDialogs\",\n\t\"StaticPopup_DisplayedFrames\",\n\t\"StationeryPopupButton1\",\n\t\"StationeryPopupButton1MoneyFrame\",\n\t\"StationeryPopupButton1MoneyFrameCopperButton\",\n\t\"StationeryPopupButton1MoneyFrameGoldButton\",\n\t\"StationeryPopupButton1MoneyFrameSilverButton\",\n\t\"StationeryPopupButton2\",\n\t\"StationeryPopupButton2MoneyFrame\",\n\t\"StationeryPopupButton2MoneyFrameCopperButton\",\n\t\"StationeryPopupButton2MoneyFrameGoldButton\",\n\t\"StationeryPopupButton2MoneyFrameSilverButton\",\n\t\"StationeryPopupButton3\",\n\t\"StationeryPopupButton3MoneyFrame\",\n\t\"StationeryPopupButton3MoneyFrameCopperButton\",\n\t\"StationeryPopupButton3MoneyFrameGoldButton\",\n\t\"StationeryPopupButton3MoneyFrameSilverButton\",\n\t\"StationeryPopupButton4\",\n\t\"StationeryPopupButton4MoneyFrame\",\n\t\"StationeryPopupButton4MoneyFrameCopperButton\",\n\t\"StationeryPopupButton4MoneyFrameGoldButton\",\n\t\"StationeryPopupButton4MoneyFrameSilverButton\",\n\t\"StationeryPopupButton5\",\n\t\"StationeryPopupButton5MoneyFrame\",\n\t\"StationeryPopupButton5MoneyFrameCopperButton\",\n\t\"StationeryPopupButton5MoneyFrameGoldButton\",\n\t\"StationeryPopupButton5MoneyFrameSilverButton\",\n\t\"StationeryPopupCancelButton\",\n\t\"StationeryPopupFrame\",\n\t\"StationeryPopupOkayButton\",\n\t\"StationeryPopupScrollFrame\",\n\t\"StationeryPopupScrollFrameScrollBar\",\n\t\"StationeryPopupScrollFrameScrollBarScrollDownButton\",\n\t\"StationeryPopupScrollFrameScrollBarScrollUpButton\",\n\t\"StationeryPopupScrollFrameScrollChildFrame\",\n\t\"StatsFrame\",\n\t\"StatusTextPanelOptions\",\n\t\"StopwatchCloseButton\",\n\t\"StopwatchFrame\",\n\t\"StopwatchPlayPauseButton\",\n\t\"StopwatchResetButton\",\n\t\"StopwatchTabFrame\",\n\t\"StopwatchTicker\",\n\t\"SubZoneTextFrame\",\n\t\"TALENT_ACTIVATION_SPELLS\",\n\t\"TALENT_ARROW_TEXTURECOORDS\",\n\t\"TALENT_BRANCH_TEXTURECOORDS\",\n\t\"TALENT_SORT_ORDER\",\n\t\"TOOLTIP_DEFAULT_BACKGROUND_COLOR\",\n\t\"TOOLTIP_DEFAULT_COLOR\",\n\t\"TOTEM_MULTI_CAST_RECALL_SPELLS\",\n\t\"TOTEM_MULTI_CAST_SUMMON_SPELLS\",\n\t\"TOTEM_PRIORITIES\",\n\t\"TabardCharacterModelRotateLeftButton\",\n\t\"TabardCharacterModelRotateRightButton\",\n\t\"TabardFrame\",\n\t\"TabardFrameAcceptButton\",\n\t\"TabardFrameCancelButton\",\n\t\"TabardFrameCloseButton\",\n\t\"TabardFrameCostFrame\",\n\t\"TabardFrameCostMoneyFrame\",\n\t\"TabardFrameCostMoneyFrameCopperButton\",\n\t\"TabardFrameCostMoneyFrameGoldButton\",\n\t\"TabardFrameCostMoneyFrameSilverButton\",\n\t\"TabardFrameCustomization1\",\n\t\"TabardFrameCustomization1LeftButton\",\n\t\"TabardFrameCustomization1RightButton\",\n\t\"TabardFrameCustomization2\",\n\t\"TabardFrameCustomization2LeftButton\",\n\t\"TabardFrameCustomization2RightButton\",\n\t\"TabardFrameCustomization3\",\n\t\"TabardFrameCustomization3LeftButton\",\n\t\"TabardFrameCustomization3RightButton\",\n\t\"TabardFrameCustomization4\",\n\t\"TabardFrameCustomization4LeftButton\",\n\t\"TabardFrameCustomization4RightButton\",\n\t\"TabardFrameCustomization5\",\n\t\"TabardFrameCustomization5LeftButton\",\n\t\"TabardFrameCustomization5RightButton\",\n\t\"TabardFrameCustomizationFrame\",\n\t\"TabardFrameMoneyFrame\",\n\t\"TabardFrameMoneyFrameCopperButton\",\n\t\"TabardFrameMoneyFrameGoldButton\",\n\t\"TabardFrameMoneyFrameSilverButton\",\n\t\"TabardModel\",\n\t\"TalentMicroButton\",\n\t\"TargetFrame\",\n\t\"TargetFrameBuffs\",\n\t\"TargetFrameDebuffs\",\n\t\"TargetFrameDropDown\",\n\t\"TargetFrameDropDownButton\",\n\t\"TargetFrameHealthBar\",\n\t\"TargetFrameManaBar\",\n\t\"TargetFrameNumericalThreat\",\n\t\"TargetFrameSpellBar\",\n\t\"TargetFrameTextureFrame\",\n\t\"TargetFrameToT\",\n\t\"TargetFrameToTDebuff1\",\n\t\"TargetFrameToTDebuff1Cooldown\",\n\t\"TargetFrameToTDebuff2\",\n\t\"TargetFrameToTDebuff2Cooldown\",\n\t\"TargetFrameToTDebuff3\",\n\t\"TargetFrameToTDebuff3Cooldown\",\n\t\"TargetFrameToTDebuff4\",\n\t\"TargetFrameToTDebuff4Cooldown\",\n\t\"TargetFrameToTHealthBar\",\n\t\"TargetFrameToTManaBar\",\n\t\"TargetFrameToTTextureFrame\",\n\t\"TaxiButtonTypes\",\n\t\"TaxiCloseButton\",\n\t\"TaxiFrame\",\n\t\"TaxiRouteMap\",\n\t\"TempEnchant1\",\n\t\"TempEnchant2\",\n\t\"TemporaryEnchantFrame\",\n\t\"TextEmoteSpeechList\",\n\t\"TicketStatusFrame\",\n\t\"TicketStatusFrameButton\",\n\t\"TimeManagerAlarmAMPMDropDown\",\n\t\"TimeManagerAlarmAMPMDropDownButton\",\n\t\"TimeManagerAlarmEnabledButton\",\n\t\"TimeManagerAlarmHourDropDown\",\n\t\"TimeManagerAlarmHourDropDownButton\",\n\t\"TimeManagerAlarmMessageEditBox\",\n\t\"TimeManagerAlarmMessageFrame\",\n\t\"TimeManagerAlarmMinuteDropDown\",\n\t\"TimeManagerAlarmMinuteDropDownButton\",\n\t\"TimeManagerAlarmTimeFrame\",\n\t\"TimeManagerClockButton\",\n\t\"TimeManagerCloseButton\",\n\t\"TimeManagerFrame\",\n\t\"TimeManagerLocalTimeCheck\",\n\t\"TimeManagerMilitaryTimeCheck\",\n\t\"TimeManagerStopwatchCheck\",\n\t\"TimeManagerStopwatchFrame\",\n\t\"TokenFrame\",\n\t\"TokenFrameCancelButton\",\n\t\"TokenFrameContainer\",\n\t\"TokenFrameContainerButton1\",\n\t\"TokenFrameContainerButton10\",\n\t\"TokenFrameContainerButton11\",\n\t\"TokenFrameContainerButton12\",\n\t\"TokenFrameContainerButton13\",\n\t\"TokenFrameContainerButton14\",\n\t\"TokenFrameContainerButton15\",\n\t\"TokenFrameContainerButton16\",\n\t\"TokenFrameContainerButton17\",\n\t\"TokenFrameContainerButton18\",\n\t\"TokenFrameContainerButton19\",\n\t\"TokenFrameContainerButton2\",\n\t\"TokenFrameContainerButton20\",\n\t\"TokenFrameContainerButton21\",\n\t\"TokenFrameContainerButton3\",\n\t\"TokenFrameContainerButton4\",\n\t\"TokenFrameContainerButton5\",\n\t\"TokenFrameContainerButton6\",\n\t\"TokenFrameContainerButton7\",\n\t\"TokenFrameContainerButton8\",\n\t\"TokenFrameContainerButton9\",\n\t\"TokenFrameContainerScrollBar\",\n\t\"TokenFrameContainerScrollBarScrollDownButton\",\n\t\"TokenFrameContainerScrollBarScrollUpButton\",\n\t\"TokenFrameContainerScrollChild\",\n\t\"TokenFrameMoneyFrame\",\n\t\"TokenFrameMoneyFrameCopperButton\",\n\t\"TokenFrameMoneyFrameGoldButton\",\n\t\"TokenFrameMoneyFrameSilverButton\",\n\t\"TokenFramePopup\",\n\t\"TokenFramePopupBackpackCheckBox\",\n\t\"TokenFramePopupCloseButton\",\n\t\"TokenFramePopupInactiveCheckBox\",\n\t\"TotemFrame\",\n\t\"TotemFrameTotem1\",\n\t\"TotemFrameTotem1Icon\",\n\t\"TotemFrameTotem1IconCooldown\",\n\t\"TotemFrameTotem2\",\n\t\"TotemFrameTotem2Icon\",\n\t\"TotemFrameTotem2IconCooldown\",\n\t\"TotemFrameTotem3\",\n\t\"TotemFrameTotem3Icon\",\n\t\"TotemFrameTotem3IconCooldown\",\n\t\"TotemFrameTotem4\",\n\t\"TotemFrameTotem4Icon\",\n\t\"TotemFrameTotem4IconCooldown\",\n\t\"TradeFrame\",\n\t\"TradeFrameCancelButton\",\n\t\"TradeFrameCloseButton\",\n\t\"TradeFrameTradeButton\",\n\t\"TradeHighlightPlayer\",\n\t\"TradeHighlightPlayerEnchant\",\n\t\"TradeHighlightRecipient\",\n\t\"TradeHighlightRecipientEnchant\",\n\t\"TradePlayerInputMoneyFrame\",\n\t\"TradePlayerInputMoneyFrameCopper\",\n\t\"TradePlayerInputMoneyFrameGold\",\n\t\"TradePlayerInputMoneyFrameSilver\",\n\t\"TradePlayerItem1\",\n\t\"TradePlayerItem1ItemButton\",\n\t\"TradePlayerItem2\",\n\t\"TradePlayerItem2ItemButton\",\n\t\"TradePlayerItem3\",\n\t\"TradePlayerItem3ItemButton\",\n\t\"TradePlayerItem4\",\n\t\"TradePlayerItem4ItemButton\",\n\t\"TradePlayerItem5\",\n\t\"TradePlayerItem5ItemButton\",\n\t\"TradePlayerItem6\",\n\t\"TradePlayerItem6ItemButton\",\n\t\"TradePlayerItem7\",\n\t\"TradePlayerItem7ItemButton\",\n\t\"TradeRecipientItem1\",\n\t\"TradeRecipientItem1ItemButton\",\n\t\"TradeRecipientItem2\",\n\t\"TradeRecipientItem2ItemButton\",\n\t\"TradeRecipientItem3\",\n\t\"TradeRecipientItem3ItemButton\",\n\t\"TradeRecipientItem4\",\n\t\"TradeRecipientItem4ItemButton\",\n\t\"TradeRecipientItem5\",\n\t\"TradeRecipientItem5ItemButton\",\n\t\"TradeRecipientItem6\",\n\t\"TradeRecipientItem6ItemButton\",\n\t\"TradeRecipientItem7\",\n\t\"TradeRecipientItem7ItemButton\",\n\t\"TradeRecipientMoneyFrame\",\n\t\"TradeRecipientMoneyFrameCopperButton\",\n\t\"TradeRecipientMoneyFrameGoldButton\",\n\t\"TradeRecipientMoneyFrameSilverButton\",\n\t\"TutorialFrame\",\n\t\"TutorialFrameAlertButton\",\n\t\"TutorialFrameAlertButtonBadge\",\n\t\"TutorialFrameCallOut\",\n\t\"TutorialFrameNextButton\",\n\t\"TutorialFrameOkayButton\",\n\t\"TutorialFramePrevButton\",\n\t\"TutorialFrameTextScrollChildFrame\",\n\t\"TutorialFrameTextScrollFrame\",\n\t\"TutorialFrameTextScrollFrameScrollBar\",\n\t\"TutorialFrameTextScrollFrameScrollBarScrollDownButton\",\n\t\"TutorialFrameTextScrollFrameScrollBarScrollUpButton\",\n\t\"TutorialTextBorder\",\n\t\"UIChildWindows\",\n\t\"UIDROPDOWNMENU_INIT_MENU\",\n\t\"UIErrorsFrame\",\n\t\"UIFrameCache\",\n\t\"UIMenus\",\n\t\"UIPARENT_MANAGED_FRAME_POSITIONS\",\n\t\"UIPanelWindows\",\n\t\"UIParent\",\n\t\"UISpecialFrames\",\n\t\"UnitFramePanelOptions\",\n\t\"UnitLootMethod\",\n\t\"UnitPopupButtons\",\n\t\"UnitPopupFrames\",\n\t\"UnitPopupMenus\",\n\t\"UnitPopupShown\",\n\t\"VEHICLE_TEXTURES\",\n\t\"VIEWABLE_ACTION_BAR_PAGES\",\n\t\"VISIBLE_WATCHES\",\n\t\"VOICECHAT_TALKERS\",\n\t\"VehicleMenuBar\",\n\t\"VehicleMenuBarActionButton1\",\n\t\"VehicleMenuBarActionButton1Cooldown\",\n\t\"VehicleMenuBarActionButton2\",\n\t\"VehicleMenuBarActionButton2Cooldown\",\n\t\"VehicleMenuBarActionButton3\",\n\t\"VehicleMenuBarActionButton3Cooldown\",\n\t\"VehicleMenuBarActionButton4\",\n\t\"VehicleMenuBarActionButton4Cooldown\",\n\t\"VehicleMenuBarActionButton5\",\n\t\"VehicleMenuBarActionButton5Cooldown\",\n\t\"VehicleMenuBarActionButton6\",\n\t\"VehicleMenuBarActionButton6Cooldown\",\n\t\"VehicleMenuBarActionButtonFrame\",\n\t\"VehicleMenuBarArtFrame\",\n\t\"VehicleMenuBarHealthBar\",\n\t\"VehicleMenuBarLeaveButton\",\n\t\"VehicleMenuBarPitchDownButton\",\n\t\"VehicleMenuBarPitchSlider\",\n\t\"VehicleMenuBarPitchUpButton\",\n\t\"VehicleMenuBarPowerBar\",\n\t\"VehicleSeatIndicator\",\n\t\"VehicleSeatIndicatorDropDown\",\n\t\"VehicleSeatIndicatorDropDownButton\",\n\t\"VideoOptionsEffectsPanel\",\n\t\"VideoOptionsEffectsPanelClutterDensity\",\n\t\"VideoOptionsEffectsPanelClutterRadius\",\n\t\"VideoOptionsEffectsPanelDeathEffect\",\n\t\"VideoOptionsEffectsPanelEnvironmentDetail\",\n\t\"VideoOptionsEffectsPanelFullScreenGlow\",\n\t\"VideoOptionsEffectsPanelParticleDensity\",\n\t\"VideoOptionsEffectsPanelPlayerTexture\",\n\t\"VideoOptionsEffectsPanelProjectedTextures\",\n\t\"VideoOptionsEffectsPanelQuality\",\n\t\"VideoOptionsEffectsPanelQualitySlider\",\n\t\"VideoOptionsEffectsPanelShaders\",\n\t\"VideoOptionsEffectsPanelShadowQuality\",\n\t\"VideoOptionsEffectsPanelSpecularLighting\",\n\t\"VideoOptionsEffectsPanelTerrainDetail\",\n\t\"VideoOptionsEffectsPanelTextureFiltering\",\n\t\"VideoOptionsEffectsPanelTextureResolution\",\n\t\"VideoOptionsEffectsPanelViewDistance\",\n\t\"VideoOptionsEffectsPanelWeatherIntensity\",\n\t\"VideoOptionsFrame\",\n\t\"VideoOptionsFrameApply\",\n\t\"VideoOptionsFrameCancel\",\n\t\"VideoOptionsFrameCategoryFrame\",\n\t\"VideoOptionsFrameCategoryFrameButton1\",\n\t\"VideoOptionsFrameCategoryFrameButton10\",\n\t\"VideoOptionsFrameCategoryFrameButton10Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton11\",\n\t\"VideoOptionsFrameCategoryFrameButton11Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton12\",\n\t\"VideoOptionsFrameCategoryFrameButton12Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton13\",\n\t\"VideoOptionsFrameCategoryFrameButton13Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton14\",\n\t\"VideoOptionsFrameCategoryFrameButton14Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton15\",\n\t\"VideoOptionsFrameCategoryFrameButton15Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton16\",\n\t\"VideoOptionsFrameCategoryFrameButton16Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton17\",\n\t\"VideoOptionsFrameCategoryFrameButton17Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton18\",\n\t\"VideoOptionsFrameCategoryFrameButton18Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton19\",\n\t\"VideoOptionsFrameCategoryFrameButton19Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton1Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton2\",\n\t\"VideoOptionsFrameCategoryFrameButton20\",\n\t\"VideoOptionsFrameCategoryFrameButton20Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton21\",\n\t\"VideoOptionsFrameCategoryFrameButton21Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton22\",\n\t\"VideoOptionsFrameCategoryFrameButton22Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton23\",\n\t\"VideoOptionsFrameCategoryFrameButton23Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton2Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton3\",\n\t\"VideoOptionsFrameCategoryFrameButton3Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton4\",\n\t\"VideoOptionsFrameCategoryFrameButton4Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton5\",\n\t\"VideoOptionsFrameCategoryFrameButton5Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton6\",\n\t\"VideoOptionsFrameCategoryFrameButton6Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton7\",\n\t\"VideoOptionsFrameCategoryFrameButton7Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton8\",\n\t\"VideoOptionsFrameCategoryFrameButton8Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton9\",\n\t\"VideoOptionsFrameCategoryFrameButton9Toggle\",\n\t\"VideoOptionsFrameCategoryFrameList\",\n\t\"VideoOptionsFrameCategoryFrameListScrollBar\",\n\t\"VideoOptionsFrameCategoryFrameListScrollBarScrollDownButton\",\n\t\"VideoOptionsFrameCategoryFrameListScrollBarScrollUpButton\",\n\t\"VideoOptionsFrameCategoryFrameListScrollChildFrame\",\n\t\"VideoOptionsFrameDefaults\",\n\t\"VideoOptionsFrameOkay\",\n\t\"VideoOptionsFramePanelContainer\",\n\t\"VideoOptionsResolutionPanel\",\n\t\"VideoOptionsResolutionPanelBrightness\",\n\t\"VideoOptionsResolutionPanelDesktopGamma\",\n\t\"VideoOptionsResolutionPanelDisableResize\",\n\t\"VideoOptionsResolutionPanelFixInputLag\",\n\t\"VideoOptionsResolutionPanelGammaSlider\",\n\t\"VideoOptionsResolutionPanelHardwareCursor\",\n\t\"VideoOptionsResolutionPanelMaximized\",\n\t\"VideoOptionsResolutionPanelMultiSampleDropDown\",\n\t\"VideoOptionsResolutionPanelMultiSampleDropDownButton\",\n\t\"VideoOptionsResolutionPanelRefreshDropDown\",\n\t\"VideoOptionsResolutionPanelRefreshDropDownButton\",\n\t\"VideoOptionsResolutionPanelResolutionDropDown\",\n\t\"VideoOptionsResolutionPanelResolutionDropDownButton\",\n\t\"VideoOptionsResolutionPanelTripleBuffer\",\n\t\"VideoOptionsResolutionPanelUIScaleSlider\",\n\t\"VideoOptionsResolutionPanelUseUIScale\",\n\t\"VideoOptionsResolutionPanelVSync\",\n\t\"VideoOptionsResolutionPanelWindowed\",\n\t\"VideoOptionsStereoPanel\",\n\t\"VideoOptionsStereoPanelConvergence\",\n\t\"VideoOptionsStereoPanelEnabled\",\n\t\"VideoOptionsStereoPanelEyeSeparation\",\n\t\"VideoOptionsStereoPanelHardwareCursor\",\n\t\"VideoStereoPanelOptions\",\n\t\"VoiceChatTalkers\",\n\t\"VoiceChatTalkersButton1\",\n\t\"VoiceChatTalkersButton1SecureButton\",\n\t\"VoiceChatTalkersButton1Speaker\",\n\t\"VoiceChatTalkersSpeaker\",\n\t\"VoiceMacroMenu\",\n\t\"VoiceMacroMenuButton1\",\n\t\"VoiceMacroMenuButton10\",\n\t\"VoiceMacroMenuButton11\",\n\t\"VoiceMacroMenuButton12\",\n\t\"VoiceMacroMenuButton13\",\n\t\"VoiceMacroMenuButton14\",\n\t\"VoiceMacroMenuButton15\",\n\t\"VoiceMacroMenuButton16\",\n\t\"VoiceMacroMenuButton17\",\n\t\"VoiceMacroMenuButton18\",\n\t\"VoiceMacroMenuButton19\",\n\t\"VoiceMacroMenuButton2\",\n\t\"VoiceMacroMenuButton20\",\n\t\"VoiceMacroMenuButton21\",\n\t\"VoiceMacroMenuButton22\",\n\t\"VoiceMacroMenuButton23\",\n\t\"VoiceMacroMenuButton24\",\n\t\"VoiceMacroMenuButton25\",\n\t\"VoiceMacroMenuButton26\",\n\t\"VoiceMacroMenuButton27\",\n\t\"VoiceMacroMenuButton28\",\n\t\"VoiceMacroMenuButton29\",\n\t\"VoiceMacroMenuButton3\",\n\t\"VoiceMacroMenuButton30\",\n\t\"VoiceMacroMenuButton31\",\n\t\"VoiceMacroMenuButton32\",\n\t\"VoiceMacroMenuButton4\",\n\t\"VoiceMacroMenuButton5\",\n\t\"VoiceMacroMenuButton6\",\n\t\"VoiceMacroMenuButton7\",\n\t\"VoiceMacroMenuButton8\",\n\t\"VoiceMacroMenuButton9\",\n\t\"VoicePanelOptions\",\n\t\"WARLOCK_PET_BONUS\",\n\t\"WATCHFRAME_ACHIEVEMENTLINES\",\n\t\"WATCHFRAME_FLAGS\",\n\t\"WATCHFRAME_LINKBUTTONS\",\n\t\"WATCHFRAME_OBJECTIVEHANDLERS\",\n\t\"WATCHFRAME_QUESTLINES\",\n\t\"WATCHFRAME_TIMEDCRITERIA\",\n\t\"WATCHFRAME_TIMERLINES\",\n\t\"WHOFRAME_DROPDOWN_LIST\",\n\t\"WORLDMAP_DEBUG_ICON_INFO\",\n\t\"WORLDMAP_SETTINGS\",\n\t\"WORLDSTATEALWAYSUPFRAME_SUSPENDEDCHATFRAMES\",\n\t\"WatchFrame\",\n\t\"WatchFrameCollapseExpandButton\",\n\t\"WatchFrameDropDown\",\n\t\"WatchFrameDropDownButton\",\n\t\"WatchFrameHeader\",\n\t\"WatchFrameHeaderDropDown\",\n\t\"WatchFrameHeaderDropDownButton\",\n\t\"WatchFrameLine1\",\n\t\"WatchFrameLines\",\n\t\"WhoFrame\",\n\t\"WhoFrameAddFriendButton\",\n\t\"WhoFrameButton1\",\n\t\"WhoFrameButton10\",\n\t\"WhoFrameButton11\",\n\t\"WhoFrameButton12\",\n\t\"WhoFrameButton13\",\n\t\"WhoFrameButton14\",\n\t\"WhoFrameButton15\",\n\t\"WhoFrameButton16\",\n\t\"WhoFrameButton17\",\n\t\"WhoFrameButton2\",\n\t\"WhoFrameButton3\",\n\t\"WhoFrameButton4\",\n\t\"WhoFrameButton5\",\n\t\"WhoFrameButton6\",\n\t\"WhoFrameButton7\",\n\t\"WhoFrameButton8\",\n\t\"WhoFrameButton9\",\n\t\"WhoFrameColumnHeader1\",\n\t\"WhoFrameColumnHeader2\",\n\t\"WhoFrameColumnHeader3\",\n\t\"WhoFrameColumnHeader4\",\n\t\"WhoFrameDropDown\",\n\t\"WhoFrameDropDownButton\",\n\t\"WhoFrameEditBox\",\n\t\"WhoFrameGroupInviteButton\",\n\t\"WhoFrameWhoButton\",\n\t\"WhoListScrollFrame\",\n\t\"WhoListScrollFrameScrollBar\",\n\t\"WhoListScrollFrameScrollBarScrollDownButton\",\n\t\"WhoListScrollFrameScrollBarScrollUpButton\",\n\t\"WhoListScrollFrameScrollChildFrame\",\n\t\"WintergraspTimer\",\n\t\"WorldFrame\",\n\t\"WorldMapBlobFrame\",\n\t\"WorldMapButton\",\n\t\"WorldMapCompareTooltip1\",\n\t\"WorldMapCompareTooltip2\",\n\t\"WorldMapCompareTooltip3\",\n\t\"WorldMapContinentDropDown\",\n\t\"WorldMapContinentDropDownButton\",\n\t\"WorldMapCorpse\",\n\t\"WorldMapDeathRelease\",\n\t\"WorldMapDetailFrame\",\n\t\"WorldMapFlag1\",\n\t\"WorldMapFlag2\",\n\t\"WorldMapFrame\",\n\t\"WorldMapFrameAreaFrame\",\n\t\"WorldMapFrameCloseButton\",\n\t\"WorldMapFrameSizeDownButton\",\n\t\"WorldMapFrameSizeUpButton\",\n\t\"WorldMapLevelDownButton\",\n\t\"WorldMapLevelDropDown\",\n\t\"WorldMapLevelDropDownButton\",\n\t\"WorldMapLevelUpButton\",\n\t\"WorldMapMagnifyingGlassButton\",\n\t\"WorldMapPOIFrame\",\n\t\"WorldMapParty1\",\n\t\"WorldMapParty2\",\n\t\"WorldMapParty3\",\n\t\"WorldMapParty4\",\n\t\"WorldMapPing\",\n\t\"WorldMapPlayer\",\n\t\"WorldMapPositioningGuide\",\n\t\"WorldMapQuestDetailScrollChildFrame\",\n\t\"WorldMapQuestDetailScrollFrame\",\n\t\"WorldMapQuestDetailScrollFrameScrollBar\",\n\t\"WorldMapQuestDetailScrollFrameScrollBarScrollDownButton\",\n\t\"WorldMapQuestDetailScrollFrameScrollBarScrollUpButton\",\n\t\"WorldMapQuestFrame0\",\n\t\"WorldMapQuestHighlightedFrame\",\n\t\"WorldMapQuestRewardScrollChildFrame\",\n\t\"WorldMapQuestRewardScrollFrame\",\n\t\"WorldMapQuestRewardScrollFrameScrollBar\",\n\t\"WorldMapQuestRewardScrollFrameScrollBarScrollDownButton\",\n\t\"WorldMapQuestRewardScrollFrameScrollBarScrollUpButton\",\n\t\"WorldMapQuestScrollChildFrame\",\n\t\"WorldMapQuestScrollFrame\",\n\t\"WorldMapQuestScrollFrameScrollBar\",\n\t\"WorldMapQuestScrollFrameScrollBarScrollDownButton\",\n\t\"WorldMapQuestScrollFrameScrollBarScrollUpButton\",\n\t\"WorldMapQuestSelectedFrame\",\n\t\"WorldMapQuestShowObjectives\",\n\t\"WorldMapRaid1\",\n\t\"WorldMapRaid10\",\n\t\"WorldMapRaid11\",\n\t\"WorldMapRaid12\",\n\t\"WorldMapRaid13\",\n\t\"WorldMapRaid14\",\n\t\"WorldMapRaid15\",\n\t\"WorldMapRaid16\",\n\t\"WorldMapRaid17\",\n\t\"WorldMapRaid18\",\n\t\"WorldMapRaid19\",\n\t\"WorldMapRaid2\",\n\t\"WorldMapRaid20\",\n\t\"WorldMapRaid21\",\n\t\"WorldMapRaid22\",\n\t\"WorldMapRaid23\",\n\t\"WorldMapRaid24\",\n\t\"WorldMapRaid25\",\n\t\"WorldMapRaid26\",\n\t\"WorldMapRaid27\",\n\t\"WorldMapRaid28\",\n\t\"WorldMapRaid29\",\n\t\"WorldMapRaid3\",\n\t\"WorldMapRaid30\",\n\t\"WorldMapRaid31\",\n\t\"WorldMapRaid32\",\n\t\"WorldMapRaid33\",\n\t\"WorldMapRaid34\",\n\t\"WorldMapRaid35\",\n\t\"WorldMapRaid36\",\n\t\"WorldMapRaid37\",\n\t\"WorldMapRaid38\",\n\t\"WorldMapRaid39\",\n\t\"WorldMapRaid4\",\n\t\"WorldMapRaid40\",\n\t\"WorldMapRaid5\",\n\t\"WorldMapRaid6\",\n\t\"WorldMapRaid7\",\n\t\"WorldMapRaid8\",\n\t\"WorldMapRaid9\",\n\t\"WorldMapScreenAnchor\",\n\t\"WorldMapTitleButton\",\n\t\"WorldMapTitleDropDown\",\n\t\"WorldMapTitleDropDownButton\",\n\t\"WorldMapTooltip\",\n\t\"WorldMapTooltipStatusBar\",\n\t\"WorldMapTrackQuest\",\n\t\"WorldMapUnitDropDown\",\n\t\"WorldMapUnitDropDownButton\",\n\t\"WorldMapZoneDropDown\",\n\t\"WorldMapZoneDropDownButton\",\n\t\"WorldMapZoneMinimapDropDown\",\n\t\"WorldMapZoneMinimapDropDownButton\",\n\t\"WorldMapZoomOutButton\",\n\t\"WorldStateAlwaysUpFrame\",\n\t\"WorldStateScoreButton1\",\n\t\"WorldStateScoreButton10\",\n\t\"WorldStateScoreButton10ClassButton\",\n\t\"WorldStateScoreButton10Name\",\n\t\"WorldStateScoreButton11\",\n\t\"WorldStateScoreButton11ClassButton\",\n\t\"WorldStateScoreButton11Name\",\n\t\"WorldStateScoreButton12\",\n\t\"WorldStateScoreButton12ClassButton\",\n\t\"WorldStateScoreButton12Name\",\n\t\"WorldStateScoreButton13\",\n\t\"WorldStateScoreButton13ClassButton\",\n\t\"WorldStateScoreButton13Name\",\n\t\"WorldStateScoreButton14\",\n\t\"WorldStateScoreButton14ClassButton\",\n\t\"WorldStateScoreButton14Name\",\n\t\"WorldStateScoreButton15\",\n\t\"WorldStateScoreButton15ClassButton\",\n\t\"WorldStateScoreButton15Name\",\n\t\"WorldStateScoreButton16\",\n\t\"WorldStateScoreButton16ClassButton\",\n\t\"WorldStateScoreButton16Name\",\n\t\"WorldStateScoreButton17\",\n\t\"WorldStateScoreButton17ClassButton\",\n\t\"WorldStateScoreButton17Name\",\n\t\"WorldStateScoreButton18\",\n\t\"WorldStateScoreButton18ClassButton\",\n\t\"WorldStateScoreButton18Name\",\n\t\"WorldStateScoreButton19\",\n\t\"WorldStateScoreButton19ClassButton\",\n\t\"WorldStateScoreButton19Name\",\n\t\"WorldStateScoreButton1ClassButton\",\n\t\"WorldStateScoreButton1Name\",\n\t\"WorldStateScoreButton2\",\n\t\"WorldStateScoreButton20\",\n\t\"WorldStateScoreButton20ClassButton\",\n\t\"WorldStateScoreButton20Name\",\n\t\"WorldStateScoreButton2ClassButton\",\n\t\"WorldStateScoreButton2Name\",\n\t\"WorldStateScoreButton3\",\n\t\"WorldStateScoreButton3ClassButton\",\n\t\"WorldStateScoreButton3Name\",\n\t\"WorldStateScoreButton4\",\n\t\"WorldStateScoreButton4ClassButton\",\n\t\"WorldStateScoreButton4Name\",\n\t\"WorldStateScoreButton5\",\n\t\"WorldStateScoreButton5ClassButton\",\n\t\"WorldStateScoreButton5Name\",\n\t\"WorldStateScoreButton6\",\n\t\"WorldStateScoreButton6ClassButton\",\n\t\"WorldStateScoreButton6Name\",\n\t\"WorldStateScoreButton7\",\n\t\"WorldStateScoreButton7ClassButton\",\n\t\"WorldStateScoreButton7Name\",\n\t\"WorldStateScoreButton8\",\n\t\"WorldStateScoreButton8ClassButton\",\n\t\"WorldStateScoreButton8Name\",\n\t\"WorldStateScoreButton9\",\n\t\"WorldStateScoreButton9ClassButton\",\n\t\"WorldStateScoreButton9Name\",\n\t\"WorldStateScoreColumn1\",\n\t\"WorldStateScoreColumn2\",\n\t\"WorldStateScoreColumn3\",\n\t\"WorldStateScoreColumn4\",\n\t\"WorldStateScoreColumn5\",\n\t\"WorldStateScoreColumn6\",\n\t\"WorldStateScoreColumn7\",\n\t\"WorldStateScoreFrame\",\n\t\"WorldStateScoreFrameClass\",\n\t\"WorldStateScoreFrameCloseButton\",\n\t\"WorldStateScoreFrameDamageDone\",\n\t\"WorldStateScoreFrameDeaths\",\n\t\"WorldStateScoreFrameHK\",\n\t\"WorldStateScoreFrameHealingDone\",\n\t\"WorldStateScoreFrameHonorGained\",\n\t\"WorldStateScoreFrameKB\",\n\t\"WorldStateScoreFrameLeaveButton\",\n\t\"WorldStateScoreFrameName\",\n\t\"WorldStateScoreFrameTab1\",\n\t\"WorldStateScoreFrameTab2\",\n\t\"WorldStateScoreFrameTab3\",\n\t\"WorldStateScoreFrameTeam\",\n\t\"WorldStateScoreFrameTeamSkill\",\n\t\"WorldStateScoreScrollFrame\",\n\t\"WorldStateScoreScrollFrameScrollBar\",\n\t\"WorldStateScoreScrollFrameScrollBarScrollDownButton\",\n\t\"WorldStateScoreScrollFrameScrollBarScrollUpButton\",\n\t\"WorldStateScoreScrollFrameScrollChildFrame\",\n\t\"WorldStateScoreWinnerFrame\",\n\t\"YELLOW_FONT_COLOR\",\n\t\"ZoneTextFrame\",\n\t\"hash_ChatTypeInfoList\",\n\t\"hash_EmoteTokenList\",\n\t\"hash_SlashCmdList\",\n\t\"poiWorldMapQuestScrollChildFrame1_0\",\n\t\"runeMapping\",\n\t\"shineGet\",\n\t\"this\",\n\t\"uvarInfo\",\n\t-- frames: FrameXML, Blizzard_CombatLog, Blizzard_CombatText, Blizzard_RaidUI, Blizzard_TimeManager, Blizzard_TokenUI\n\t\"BasicScriptErrors\",\n\t\"BasicScriptErrorsButton\",\n\t\"WorldFrame\",\n\t\"ActionStatus\",\n\t\"UIParent\",\n\t\"AnimTimerFrame\",\n\t\"ShoppingTooltip1\",\n\t\"ShoppingTooltip2\",\n\t\"ShoppingTooltip3\",\n\t\"GameTooltip\",\n\t\"GameTooltipStatusBar\",\n\t\"SmallTextTooltip\",\n\t\"DropDownList1\",\n\t\"DropDownList1Backdrop\",\n\t\"DropDownList1MenuBackdrop\",\n\t\"DropDownList1Button1\",\n\t\"DropDownList1Button1ColorSwatch\",\n\t\"DropDownList1Button1ExpandArrow\",\n\t\"DropDownList1Button1InvisibleButton\",\n\t\"DropDownList1Button2\",\n\t\"DropDownList1Button2ColorSwatch\",\n\t\"DropDownList1Button2ExpandArrow\",\n\t\"DropDownList1Button2InvisibleButton\",\n\t\"DropDownList1Button3\",\n\t\"DropDownList1Button3ColorSwatch\",\n\t\"DropDownList1Button3ExpandArrow\",\n\t\"DropDownList1Button3InvisibleButton\",\n\t\"DropDownList1Button4\",\n\t\"DropDownList1Button4ColorSwatch\",\n\t\"DropDownList1Button4ExpandArrow\",\n\t\"DropDownList1Button4InvisibleButton\",\n\t\"DropDownList1Button5\",\n\t\"DropDownList1Button5ColorSwatch\",\n\t\"DropDownList1Button5ExpandArrow\",\n\t\"DropDownList1Button5InvisibleButton\",\n\t\"DropDownList1Button6\",\n\t\"DropDownList1Button6ColorSwatch\",\n\t\"DropDownList1Button6ExpandArrow\",\n\t\"DropDownList1Button6InvisibleButton\",\n\t\"DropDownList1Button7\",\n\t\"DropDownList1Button7ColorSwatch\",\n\t\"DropDownList1Button7ExpandArrow\",\n\t\"DropDownList1Button7InvisibleButton\",\n\t\"DropDownList1Button8\",\n\t\"DropDownList1Button8ColorSwatch\",\n\t\"DropDownList1Button8ExpandArrow\",\n\t\"DropDownList1Button8InvisibleButton\",\n\t\"DropDownList2\",\n\t\"DropDownList2Backdrop\",\n\t\"DropDownList2MenuBackdrop\",\n\t\"DropDownList2Button1\",\n\t\"DropDownList2Button1ColorSwatch\",\n\t\"DropDownList2Button1ExpandArrow\",\n\t\"DropDownList2Button1InvisibleButton\",\n\t\"DropDownList2Button2\",\n\t\"DropDownList2Button2ColorSwatch\",\n\t\"DropDownList2Button2ExpandArrow\",\n\t\"DropDownList2Button2InvisibleButton\",\n\t\"DropDownList2Button3\",\n\t\"DropDownList2Button3ColorSwatch\",\n\t\"DropDownList2Button3ExpandArrow\",\n\t\"DropDownList2Button3InvisibleButton\",\n\t\"DropDownList2Button4\",\n\t\"DropDownList2Button4ColorSwatch\",\n\t\"DropDownList2Button4ExpandArrow\",\n\t\"DropDownList2Button4InvisibleButton\",\n\t\"DropDownList2Button5\",\n\t\"DropDownList2Button5ColorSwatch\",\n\t\"DropDownList2Button5ExpandArrow\",\n\t\"DropDownList2Button5InvisibleButton\",\n\t\"DropDownList2Button6\",\n\t\"DropDownList2Button6ColorSwatch\",\n\t\"DropDownList2Button6ExpandArrow\",\n\t\"DropDownList2Button6InvisibleButton\",\n\t\"DropDownList2Button7\",\n\t\"DropDownList2Button7ColorSwatch\",\n\t\"DropDownList2Button7ExpandArrow\",\n\t\"DropDownList2Button7InvisibleButton\",\n\t\"DropDownList2Button8\",\n\t\"DropDownList2Button8ColorSwatch\",\n\t\"DropDownList2Button8ExpandArrow\",\n\t\"DropDownList2Button8InvisibleButton\",\n\t\"SecureStateDriverManager\",\n\t\"SecureHoverDriverManager\",\n\t\"SecureHandlersUpdateFrame\",\n\t\"GameMenuFrame\",\n\t\"GameMenuButtonOptions\",\n\t\"GameMenuButtonSoundOptions\",\n\t\"GameMenuButtonUIOptions\",\n\t\"GameMenuButtonMacOptions\",\n\t\"GameMenuButtonKeybindings\",\n\t\"GameMenuButtonMacros\",\n\t\"GameMenuButtonRatings\",\n\t\"GameMenuButtonLogout\",\n\t\"GameMenuButtonQuit\",\n\t\"GameMenuButtonContinue\",\n\t\"UIErrorsFrame\",\n\t\"AutoCompleteBox\",\n\t\"AutoCompleteButton1\",\n\t\"AutoCompleteButton2\",\n\t\"AutoCompleteButton3\",\n\t\"AutoCompleteButton4\",\n\t\"AutoCompleteButton5\",\n\t\"StaticPopup1\",\n\t\"StaticPopup1ExtraFrame\",\n\t\"StaticPopup1CloseButton\",\n\t\"StaticPopup1Button1\",\n\t\"StaticPopup1Button2\",\n\t\"StaticPopup1Button3\",\n\t\"StaticPopup1EditBox\",\n\t\"StaticPopup1WideEditBox\",\n\t\"StaticPopup1MoneyFrame\",\n\t\"StaticPopup1MoneyFrameCopperButton\",\n\t\"StaticPopup1MoneyFrameSilverButton\",\n\t\"StaticPopup1MoneyFrameGoldButton\",\n\t\"StaticPopup1MoneyInputFrame\",\n\t\"StaticPopup1MoneyInputFrameGold\",\n\t\"StaticPopup1MoneyInputFrameSilver\",\n\t\"StaticPopup1MoneyInputFrameCopper\",\n\t\"StaticPopup1ItemFrame\",\n\t\"StaticPopup2\",\n\t\"StaticPopup2ExtraFrame\",\n\t\"StaticPopup2CloseButton\",\n\t\"StaticPopup2Button1\",\n\t\"StaticPopup2Button2\",\n\t\"StaticPopup2Button3\",\n\t\"StaticPopup2EditBox\",\n\t\"StaticPopup2WideEditBox\",\n\t\"StaticPopup2MoneyFrame\",\n\t\"StaticPopup2MoneyFrameCopperButton\",\n\t\"StaticPopup2MoneyFrameSilverButton\",\n\t\"StaticPopup2MoneyFrameGoldButton\",\n\t\"StaticPopup2MoneyInputFrame\",\n\t\"StaticPopup2MoneyInputFrameGold\",\n\t\"StaticPopup2MoneyInputFrameSilver\",\n\t\"StaticPopup2MoneyInputFrameCopper\",\n\t\"StaticPopup2ItemFrame\",\n\t\"StaticPopup3\",\n\t\"StaticPopup3ExtraFrame\",\n\t\"StaticPopup3CloseButton\",\n\t\"StaticPopup3Button1\",\n\t\"StaticPopup3Button2\",\n\t\"StaticPopup3Button3\",\n\t\"StaticPopup3EditBox\",\n\t\"StaticPopup3WideEditBox\",\n\t\"StaticPopup3MoneyFrame\",\n\t\"StaticPopup3MoneyFrameCopperButton\",\n\t\"StaticPopup3MoneyFrameSilverButton\",\n\t\"StaticPopup3MoneyFrameGoldButton\",\n\t\"StaticPopup3MoneyInputFrame\",\n\t\"StaticPopup3MoneyInputFrameGold\",\n\t\"StaticPopup3MoneyInputFrameSilver\",\n\t\"StaticPopup3MoneyInputFrameCopper\",\n\t\"StaticPopup3ItemFrame\",\n\t\"StaticPopup4\",\n\t\"StaticPopup4ExtraFrame\",\n\t\"StaticPopup4CloseButton\",\n\t\"StaticPopup4Button1\",\n\t\"StaticPopup4Button2\",\n\t\"StaticPopup4Button3\",\n\t\"StaticPopup4EditBox\",\n\t\"StaticPopup4WideEditBox\",\n\t\"StaticPopup4MoneyFrame\",\n\t\"StaticPopup4MoneyFrameCopperButton\",\n\t\"StaticPopup4MoneyFrameSilverButton\",\n\t\"StaticPopup4MoneyFrameGoldButton\",\n\t\"StaticPopup4MoneyInputFrame\",\n\t\"StaticPopup4MoneyInputFrameGold\",\n\t\"StaticPopup4MoneyInputFrameSilver\",\n\t\"StaticPopup4MoneyInputFrameCopper\",\n\t\"StaticPopup4ItemFrame\",\n\t\"VideoOptionsFrame\",\n\t\"VideoOptionsFrameCategoryFrame\",\n\t\"VideoOptionsFrameCategoryFrameList\",\n\t\"VideoOptionsFrameCategoryFrameListScrollBar\",\n\t\"VideoOptionsFrameCategoryFrameListScrollBarScrollUpButton\",\n\t\"VideoOptionsFrameCategoryFrameListScrollBarScrollDownButton\",\n\t\"VideoOptionsFrameCategoryFrameListScrollChildFrame\",\n\t\"VideoOptionsFrameCategoryFrameButton1\",\n\t\"VideoOptionsFrameCategoryFrameButton1Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton2\",\n\t\"VideoOptionsFrameCategoryFrameButton2Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton3\",\n\t\"VideoOptionsFrameCategoryFrameButton3Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton4\",\n\t\"VideoOptionsFrameCategoryFrameButton4Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton5\",\n\t\"VideoOptionsFrameCategoryFrameButton5Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton6\",\n\t\"VideoOptionsFrameCategoryFrameButton6Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton7\",\n\t\"VideoOptionsFrameCategoryFrameButton7Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton8\",\n\t\"VideoOptionsFrameCategoryFrameButton8Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton9\",\n\t\"VideoOptionsFrameCategoryFrameButton9Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton10\",\n\t\"VideoOptionsFrameCategoryFrameButton10Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton11\",\n\t\"VideoOptionsFrameCategoryFrameButton11Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton12\",\n\t\"VideoOptionsFrameCategoryFrameButton12Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton13\",\n\t\"VideoOptionsFrameCategoryFrameButton13Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton14\",\n\t\"VideoOptionsFrameCategoryFrameButton14Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton15\",\n\t\"VideoOptionsFrameCategoryFrameButton15Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton16\",\n\t\"VideoOptionsFrameCategoryFrameButton16Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton17\",\n\t\"VideoOptionsFrameCategoryFrameButton17Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton18\",\n\t\"VideoOptionsFrameCategoryFrameButton18Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton19\",\n\t\"VideoOptionsFrameCategoryFrameButton19Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton20\",\n\t\"VideoOptionsFrameCategoryFrameButton20Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton21\",\n\t\"VideoOptionsFrameCategoryFrameButton21Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton22\",\n\t\"VideoOptionsFrameCategoryFrameButton22Toggle\",\n\t\"VideoOptionsFrameCategoryFrameButton23\",\n\t\"VideoOptionsFrameCategoryFrameButton23Toggle\",\n\t\"VideoOptionsFramePanelContainer\",\n\t\"VideoOptionsFrameApply\",\n\t\"VideoOptionsFrameCancel\",\n\t\"VideoOptionsFrameOkay\",\n\t\"VideoOptionsFrameDefaults\",\n\t\"VideoOptionsResolutionPanel\",\n\t\"VideoOptionsResolutionPanelResolutionDropDown\",\n\t\"VideoOptionsResolutionPanelResolutionDropDownButton\",\n\t\"DropDownList1Button9\",\n\t\"DropDownList1Button9ColorSwatch\",\n\t\"DropDownList1Button9ExpandArrow\",\n\t\"DropDownList1Button9InvisibleButton\",\n\t\"DropDownList2Button9\",\n\t\"DropDownList2Button9ColorSwatch\",\n\t\"DropDownList2Button9ExpandArrow\",\n\t\"DropDownList2Button9InvisibleButton\",\n\t\"DropDownList1Button10\",\n\t\"DropDownList1Button10ColorSwatch\",\n\t\"DropDownList1Button10ExpandArrow\",\n\t\"DropDownList1Button10InvisibleButton\",\n\t\"DropDownList2Button10\",\n\t\"DropDownList2Button10ColorSwatch\",\n\t\"DropDownList2Button10ExpandArrow\",\n\t\"DropDownList2Button10InvisibleButton\",\n\t\"DropDownList1Button11\",\n\t\"DropDownList1Button11ColorSwatch\",\n\t\"DropDownList1Button11ExpandArrow\",\n\t\"DropDownList1Button11InvisibleButton\",\n\t\"DropDownList2Button11\",\n\t\"DropDownList2Button11ColorSwatch\",\n\t\"DropDownList2Button11ExpandArrow\",\n\t\"DropDownList2Button11InvisibleButton\",\n\t\"DropDownList1Button12\",\n\t\"DropDownList1Button12ColorSwatch\",\n\t\"DropDownList1Button12ExpandArrow\",\n\t\"DropDownList1Button12InvisibleButton\",\n\t\"DropDownList2Button12\",\n\t\"DropDownList2Button12ColorSwatch\",\n\t\"DropDownList2Button12ExpandArrow\",\n\t\"DropDownList2Button12InvisibleButton\",\n\t\"DropDownList1Button13\",\n\t\"DropDownList1Button13ColorSwatch\",\n\t\"DropDownList1Button13ExpandArrow\",\n\t\"DropDownList1Button13InvisibleButton\",\n\t\"DropDownList2Button13\",\n\t\"DropDownList2Button13ColorSwatch\",\n\t\"DropDownList2Button13ExpandArrow\",\n\t\"DropDownList2Button13InvisibleButton\",\n\t\"DropDownList1Button14\",\n\t\"DropDownList1Button14ColorSwatch\",\n\t\"DropDownList1Button14ExpandArrow\",\n\t\"DropDownList1Button14InvisibleButton\",\n\t\"DropDownList2Button14\",\n\t\"DropDownList2Button14ColorSwatch\",\n\t\"DropDownList2Button14ExpandArrow\",\n\t\"DropDownList2Button14InvisibleButton\",\n\t\"DropDownList1Button15\",\n\t\"DropDownList1Button15ColorSwatch\",\n\t\"DropDownList1Button15ExpandArrow\",\n\t\"DropDownList1Button15InvisibleButton\",\n\t\"DropDownList2Button15\",\n\t\"DropDownList2Button15ColorSwatch\",\n\t\"DropDownList2Button15ExpandArrow\",\n\t\"DropDownList2Button15InvisibleButton\",\n\t\"DropDownList1Button16\",\n\t\"DropDownList1Button16ColorSwatch\",\n\t\"DropDownList1Button16ExpandArrow\",\n\t\"DropDownList1Button16InvisibleButton\",\n\t\"DropDownList2Button16\",\n\t\"DropDownList2Button16ColorSwatch\",\n\t\"DropDownList2Button16ExpandArrow\",\n\t\"DropDownList2Button16InvisibleButton\",\n\t\"DropDownList1Button17\",\n\t\"DropDownList1Button17ColorSwatch\",\n\t\"DropDownList1Button17ExpandArrow\",\n\t\"DropDownList1Button17InvisibleButton\",\n\t\"DropDownList2Button17\",\n\t\"DropDownList2Button17ColorSwatch\",\n\t\"DropDownList2Button17ExpandArrow\",\n\t\"DropDownList2Button17InvisibleButton\",\n\t\"DropDownList1Button18\",\n\t\"DropDownList1Button18ColorSwatch\",\n\t\"DropDownList1Button18ExpandArrow\",\n\t\"DropDownList1Button18InvisibleButton\",\n\t\"DropDownList2Button18\",\n\t\"DropDownList2Button18ColorSwatch\",\n\t\"DropDownList2Button18ExpandArrow\",\n\t\"DropDownList2Button18InvisibleButton\",\n\t\"DropDownList1Button19\",\n\t\"DropDownList1Button19ColorSwatch\",\n\t\"DropDownList1Button19ExpandArrow\",\n\t\"DropDownList1Button19InvisibleButton\",\n\t\"DropDownList2Button19\",\n\t\"DropDownList2Button19ColorSwatch\",\n\t\"DropDownList2Button19ExpandArrow\",\n\t\"DropDownList2Button19InvisibleButton\",\n\t\"VideoOptionsResolutionPanelRefreshDropDown\",\n\t\"VideoOptionsResolutionPanelRefreshDropDownButton\",\n\t\"VideoOptionsResolutionPanelMultiSampleDropDown\",\n\t\"VideoOptionsResolutionPanelMultiSampleDropDownButton\",\n\t\"VideoOptionsResolutionPanelUseUIScale\",\n\t\"VideoOptionsResolutionPanelUIScaleSlider\",\n\t\"VideoOptionsResolutionPanelVSync\",\n\t\"VideoOptionsResolutionPanelTripleBuffer\",\n\t\"VideoOptionsResolutionPanelHardwareCursor\",\n\t\"VideoOptionsResolutionPanelFixInputLag\",\n\t\"VideoOptionsResolutionPanelWindowed\",\n\t\"VideoOptionsResolutionPanelMaximized\",\n\t\"VideoOptionsResolutionPanelDisableResize\",\n\t\"VideoOptionsResolutionPanelBrightness\",\n\t\"VideoOptionsResolutionPanelDesktopGamma\",\n\t\"VideoOptionsResolutionPanelGammaSlider\",\n\t\"VideoOptionsEffectsPanel\",\n\t\"VideoOptionsEffectsPanelQuality\",\n\t\"VideoOptionsEffectsPanelQualitySlider\",\n\t\"VideoOptionsEffectsPanelViewDistance\",\n\t\"VideoOptionsEffectsPanelTerrainDetail\",\n\t\"VideoOptionsEffectsPanelParticleDensity\",\n\t\"VideoOptionsEffectsPanelShadowQuality\",\n\t\"VideoOptionsEffectsPanelEnvironmentDetail\",\n\t\"VideoOptionsEffectsPanelClutterDensity\",\n\t\"VideoOptionsEffectsPanelClutterRadius\",\n\t\"VideoOptionsEffectsPanelTextureResolution\",\n\t\"VideoOptionsEffectsPanelTextureFiltering\",\n\t\"VideoOptionsEffectsPanelWeatherIntensity\",\n\t\"VideoOptionsEffectsPanelPlayerTexture\",\n\t\"VideoOptionsEffectsPanelShaders\",\n\t\"VideoOptionsEffectsPanelSpecularLighting\",\n\t\"VideoOptionsEffectsPanelFullScreenGlow\",\n\t\"VideoOptionsEffectsPanelDeathEffect\",\n\t\"VideoOptionsEffectsPanelProjectedTextures\",\n\t\"VideoOptionsStereoPanel\",\n\t\"VideoOptionsStereoPanelEnabled\",\n\t\"VideoOptionsStereoPanelHardwareCursor\",\n\t\"VideoOptionsStereoPanelConvergence\",\n\t\"VideoOptionsStereoPanelEyeSeparation\",\n\t\"AudioOptionsFrame\",\n\t\"AudioOptionsFrameCategoryFrame\",\n\t\"AudioOptionsFrameCategoryFrameList\",\n\t\"AudioOptionsFrameCategoryFrameListScrollBar\",\n\t\"AudioOptionsFrameCategoryFrameListScrollBarScrollUpButton\",\n\t\"AudioOptionsFrameCategoryFrameListScrollBarScrollDownButton\",\n\t\"AudioOptionsFrameCategoryFrameListScrollChildFrame\",\n\t\"AudioOptionsFrameCategoryFrameButton1\",\n\t\"AudioOptionsFrameCategoryFrameButton1Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton2\",\n\t\"AudioOptionsFrameCategoryFrameButton2Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton3\",\n\t\"AudioOptionsFrameCategoryFrameButton3Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton4\",\n\t\"AudioOptionsFrameCategoryFrameButton4Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton5\",\n\t\"AudioOptionsFrameCategoryFrameButton5Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton6\",\n\t\"AudioOptionsFrameCategoryFrameButton6Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton7\",\n\t\"AudioOptionsFrameCategoryFrameButton7Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton8\",\n\t\"AudioOptionsFrameCategoryFrameButton8Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton9\",\n\t\"AudioOptionsFrameCategoryFrameButton9Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton10\",\n\t\"AudioOptionsFrameCategoryFrameButton10Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton11\",\n\t\"AudioOptionsFrameCategoryFrameButton11Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton12\",\n\t\"AudioOptionsFrameCategoryFrameButton12Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton13\",\n\t\"AudioOptionsFrameCategoryFrameButton13Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton14\",\n\t\"AudioOptionsFrameCategoryFrameButton14Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton15\",\n\t\"AudioOptionsFrameCategoryFrameButton15Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton16\",\n\t\"AudioOptionsFrameCategoryFrameButton16Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton17\",\n\t\"AudioOptionsFrameCategoryFrameButton17Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton18\",\n\t\"AudioOptionsFrameCategoryFrameButton18Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton19\",\n\t\"AudioOptionsFrameCategoryFrameButton19Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton20\",\n\t\"AudioOptionsFrameCategoryFrameButton20Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton21\",\n\t\"AudioOptionsFrameCategoryFrameButton21Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton22\",\n\t\"AudioOptionsFrameCategoryFrameButton22Toggle\",\n\t\"AudioOptionsFrameCategoryFrameButton23\",\n\t\"AudioOptionsFrameCategoryFrameButton23Toggle\",\n\t\"AudioOptionsFramePanelContainer\",\n\t\"AudioOptionsFrameCancel\",\n\t\"AudioOptionsFrameOkay\",\n\t\"AudioOptionsFrameDefaults\",\n\t\"AudioOptionsSoundPanel\",\n\t\"AudioOptionsSoundPanelEnableSound\",\n\t\"AudioOptionsSoundPanelPlayback\",\n\t\"AudioOptionsSoundPanelSoundEffects\",\n\t\"AudioOptionsSoundPanelErrorSpeech\",\n\t\"AudioOptionsSoundPanelEmoteSounds\",\n\t\"AudioOptionsSoundPanelPetSounds\",\n\t\"AudioOptionsSoundPanelMusic\",\n\t\"AudioOptionsSoundPanelLoopMusic\",\n\t\"AudioOptionsSoundPanelAmbientSounds\",\n\t\"AudioOptionsSoundPanelSoundInBG\",\n\t\"AudioOptionsSoundPanelReverb\",\n\t\"AudioOptionsSoundPanelHRTF\",\n\t\"AudioOptionsSoundPanelEnableDSPs\",\n\t\"AudioOptionsSoundPanelSoundQuality\",\n\t\"AudioOptionsSoundPanelHardware\",\n\t\"AudioOptionsSoundPanelHardwareDropDown\",\n\t\"AudioOptionsSoundPanelHardwareDropDownButton\",\n\t\"AudioOptionsSoundPanelSoundChannels\",\n\t\"AudioOptionsSoundPanelUseHardware\",\n\t\"AudioOptionsSoundPanelVolume\",\n\t\"AudioOptionsSoundPanelMasterVolume\",\n\t\"AudioOptionsSoundPanelSoundVolume\",\n\t\"AudioOptionsSoundPanelMusicVolume\",\n\t\"AudioOptionsSoundPanelAmbienceVolume\",\n\t\"AudioOptionsVoicePanel\",\n\t\"AudioOptionsVoicePanelDisabledMessage\",\n\t\"AudioOptionsVoicePanelEnableVoice\",\n\t\"AudioOptionsVoicePanelTalking\",\n\t\"AudioOptionsVoicePanelEnableMicrophone\",\n\t\"AudioOptionsVoicePanelInputDeviceDropDown\",\n\t\"AudioOptionsVoicePanelInputDeviceDropDownButton\",\n\t\"AudioOptionsVoicePanelMicrophoneVolume\",\n\t\"AudioOptionsVoicePanelMicTest\",\n\t\"RecordLoopbackSoundButton\",\n\t\"PlayLoopbackSoundButton\",\n\t\"LoopbackVUMeter\",\n\t\"AudioOptionsVoicePanelBinding\",\n\t\"AudioOptionsVoicePanelChatModeDropDown\",\n\t\"AudioOptionsVoicePanelChatModeDropDownButton\",\n\t\"AudioOptionsVoicePanelChatMode1\",\n\t\"AudioOptionsVoicePanelChatMode1KeyBindingButton\",\n\t\"AudioOptionsVoicePanelPushToTalkSound\",\n\t\"AudioOptionsVoicePanelBindingOutput\",\n\t\"AudioOptionsVoicePanelChatMode2\",\n\t\"AudioOptionsVoicePanelVoiceActivateSlider\",\n\t\"AudioOptionsVoicePanelListening\",\n\t\"AudioOptionsVoicePanelOutputDeviceDropDown\",\n\t\"AudioOptionsVoicePanelOutputDeviceDropDownButton\",\n\t\"AudioOptionsVoicePanelSpeakerVolume\",\n\t\"AudioOptionsVoicePanelAudio\",\n\t\"AudioOptionsVoicePanelSoundFade\",\n\t\"AudioOptionsVoicePanelMusicFade\",\n\t\"AudioOptionsVoicePanelAmbienceFade\",\n\t\"InterfaceOptionsFrame\",\n\t\"InterfaceOptionsFrameCancel\",\n\t\"InterfaceOptionsFrameOkay\",\n\t\"InterfaceOptionsFrameDefaults\",\n\t\"InterfaceOptionsFrameCategories\",\n\t\"InterfaceOptionsFrameCategoriesList\",\n\t\"InterfaceOptionsFrameCategoriesListScrollBar\",\n\t\"InterfaceOptionsFrameCategoriesListScrollBarScrollUpButton\",\n\t\"InterfaceOptionsFrameCategoriesListScrollBarScrollDownButton\",\n\t\"InterfaceOptionsFrameCategoriesListScrollChildFrame\",\n\t\"InterfaceOptionsFrameCategoriesButton1\",\n\t\"InterfaceOptionsFrameCategoriesButton1Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton2\",\n\t\"InterfaceOptionsFrameCategoriesButton2Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton3\",\n\t\"InterfaceOptionsFrameCategoriesButton3Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton4\",\n\t\"InterfaceOptionsFrameCategoriesButton4Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton5\",\n\t\"InterfaceOptionsFrameCategoriesButton5Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton6\",\n\t\"InterfaceOptionsFrameCategoriesButton6Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton7\",\n\t\"InterfaceOptionsFrameCategoriesButton7Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton8\",\n\t\"InterfaceOptionsFrameCategoriesButton8Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton9\",\n\t\"InterfaceOptionsFrameCategoriesButton9Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton10\",\n\t\"InterfaceOptionsFrameCategoriesButton10Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton11\",\n\t\"InterfaceOptionsFrameCategoriesButton11Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton12\",\n\t\"InterfaceOptionsFrameCategoriesButton12Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton13\",\n\t\"InterfaceOptionsFrameCategoriesButton13Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton14\",\n\t\"InterfaceOptionsFrameCategoriesButton14Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton15\",\n\t\"InterfaceOptionsFrameCategoriesButton15Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton16\",\n\t\"InterfaceOptionsFrameCategoriesButton16Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton17\",\n\t\"InterfaceOptionsFrameCategoriesButton17Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton18\",\n\t\"InterfaceOptionsFrameCategoriesButton18Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton19\",\n\t\"InterfaceOptionsFrameCategoriesButton19Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton20\",\n\t\"InterfaceOptionsFrameCategoriesButton20Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton21\",\n\t\"InterfaceOptionsFrameCategoriesButton21Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton22\",\n\t\"InterfaceOptionsFrameCategoriesButton22Toggle\",\n\t\"InterfaceOptionsFrameCategoriesButton23\",\n\t\"InterfaceOptionsFrameCategoriesButton23Toggle\",\n\t\"InterfaceOptionsFrameAddOns\",\n\t\"InterfaceOptionsFrameAddOnsList\",\n\t\"InterfaceOptionsFrameAddOnsListScrollBar\",\n\t\"InterfaceOptionsFrameAddOnsListScrollBarScrollUpButton\",\n\t\"InterfaceOptionsFrameAddOnsListScrollBarScrollDownButton\",\n\t\"InterfaceOptionsFrameAddOnsListScrollChildFrame\",\n\t\"InterfaceOptionsFrameAddOnsButton1\",\n\t\"InterfaceOptionsFrameAddOnsButton1Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton2\",\n\t\"InterfaceOptionsFrameAddOnsButton2Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton3\",\n\t\"InterfaceOptionsFrameAddOnsButton3Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton4\",\n\t\"InterfaceOptionsFrameAddOnsButton4Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton5\",\n\t\"InterfaceOptionsFrameAddOnsButton5Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton6\",\n\t\"InterfaceOptionsFrameAddOnsButton6Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton7\",\n\t\"InterfaceOptionsFrameAddOnsButton7Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton8\",\n\t\"InterfaceOptionsFrameAddOnsButton8Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton9\",\n\t\"InterfaceOptionsFrameAddOnsButton9Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton10\",\n\t\"InterfaceOptionsFrameAddOnsButton10Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton11\",\n\t\"InterfaceOptionsFrameAddOnsButton11Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton12\",\n\t\"InterfaceOptionsFrameAddOnsButton12Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton13\",\n\t\"InterfaceOptionsFrameAddOnsButton13Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton14\",\n\t\"InterfaceOptionsFrameAddOnsButton14Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton15\",\n\t\"InterfaceOptionsFrameAddOnsButton15Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton16\",\n\t\"InterfaceOptionsFrameAddOnsButton16Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton17\",\n\t\"InterfaceOptionsFrameAddOnsButton17Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton18\",\n\t\"InterfaceOptionsFrameAddOnsButton18Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton19\",\n\t\"InterfaceOptionsFrameAddOnsButton19Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton20\",\n\t\"InterfaceOptionsFrameAddOnsButton20Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton21\",\n\t\"InterfaceOptionsFrameAddOnsButton21Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton22\",\n\t\"InterfaceOptionsFrameAddOnsButton22Toggle\",\n\t\"InterfaceOptionsFrameAddOnsButton23\",\n\t\"InterfaceOptionsFrameAddOnsButton23Toggle\",\n\t\"InterfaceOptionsFramePanelContainer\",\n\t\"InterfaceOptionsFrameTab1\",\n\t\"InterfaceOptionsFrameTab2\",\n\t\"InterfaceOptionsControlsPanel\",\n\t\"InterfaceOptionsControlsPanelStickyTargeting\",\n\t\"InterfaceOptionsControlsPanelAutoDismount\",\n\t\"InterfaceOptionsControlsPanelAutoClearAFK\",\n\t\"InterfaceOptionsControlsPanelBlockTrades\",\n\t\"InterfaceOptionsControlsPanelLootAtMouse\",\n\t\"InterfaceOptionsControlsPanelAutoLootCorpse\",\n\t\"InterfaceOptionsControlsPanelAutoLootKeyDropDown\",\n\t\"InterfaceOptionsControlsPanelAutoLootKeyDropDownButton\",\n\t\"InterfaceOptionsCombatPanel\",\n\t\"InterfaceOptionsCombatPanelAttackOnAssist\",\n\t\"InterfaceOptionsCombatPanelAutoRange\",\n\t\"InterfaceOptionsCombatPanelStopAutoAttack\",\n\t\"InterfaceOptionsCombatPanelNameplateClassColors\",\n\t\"InterfaceOptionsCombatPanelAutoSelfCast\",\n\t\"InterfaceOptionsCombatPanelSelfCastKeyDropDown\",\n\t\"InterfaceOptionsCombatPanelSelfCastKeyDropDownButton\",\n\t\"InterfaceOptionsCombatPanelEnemyCastBars\",\n\t\"InterfaceOptionsCombatPanelEnemyCastBarsOnPortrait\",\n\t\"InterfaceOptionsCombatPanelEnemyCastBarsOnNameplates\",\n\t\"InterfaceOptionsCombatPanelTargetOfTarget\",\n\t\"InterfaceOptionsCombatPanelTOTDropDown\",\n\t\"InterfaceOptionsCombatPanelTOTDropDownButton\",\n\t\"InterfaceOptionsCombatPanelFocusCastKeyDropDown\",\n\t\"InterfaceOptionsCombatPanelFocusCastKeyDropDownButton\",\n\t\"InterfaceOptionsDisplayPanel\",\n\t\"InterfaceOptionsDisplayPanelShowCloak\",\n\t\"InterfaceOptionsDisplayPanelShowHelm\",\n\t\"InterfaceOptionsDisplayPanelRotateMinimap\",\n\t\"InterfaceOptionsDisplayPanelScreenEdgeFlash\",\n\t\"InterfaceOptionsDisplayPanelDetailedLootInfo\",\n\t\"InterfaceOptionsDisplayPanelShowFreeBagSpace\",\n\t\"InterfaceOptionsDisplayPanelShowClock\",\n\t\"InterfaceOptionsDisplayPanelAggroWarningDisplay\",\n\t\"InterfaceOptionsDisplayPanelAggroWarningDisplayButton\",\n\t\"InterfaceOptionsDisplayPanelShowAggroPercentage\",\n\t\"InterfaceOptionsDisplayPanelPlayAggroSounds\",\n\t\"InterfaceOptionsDisplayPanelColorblindMode\",\n\t\"InterfaceOptionsDisplayPanelShowItemLevel\",\n\t\"InterfaceOptionsDisplayPanelWorldPVPObjectiveDisplay\",\n\t\"InterfaceOptionsDisplayPanelWorldPVPObjectiveDisplayButton\",\n\t\"InterfaceOptionsDisplayPanelCinematicSubtitles\",\n\t\"InterfaceOptionsObjectivesPanel\",\n\t\"InterfaceOptionsObjectivesPanelInstantQuestText\",\n\t\"InterfaceOptionsObjectivesPanelAutoQuestTracking\",\n\t\"InterfaceOptionsObjectivesPanelAutoQuestProgress\",\n\t\"InterfaceOptionsObjectivesPanelMapQuestDifficulty\",\n\t\"InterfaceOptionsObjectivesPanelAdvancedWorldMap\",\n\t\"InterfaceOptionsObjectivesPanelWatchFrameWidth\",\n\t\"InterfaceOptionsSocialPanel\",\n\t\"InterfaceOptionsSocialPanelProfanityFilter\",\n\t\"InterfaceOptionsSocialPanelChatBubbles\",\n\t\"InterfaceOptionsSocialPanelPartyChat\",\n\t\"InterfaceOptionsSocialPanelSpamFilter\",\n\t\"InterfaceOptionsSocialPanelChatHoverDelay\",\n\t\"InterfaceOptionsSocialPanelGuildMemberAlert\",\n\t\"InterfaceOptionsSocialPanelGuildRecruitment\",\n\t\"InterfaceOptionsSocialPanelChatMouseScroll\",\n\t\"InterfaceOptionsSocialPanelChatStyle\",\n\t\"InterfaceOptionsSocialPanelChatStyleButton\",\n\t\"InterfaceOptionsSocialPanelWholeChatWindowClickable\",\n\t\"InterfaceOptionsSocialPanelConversationMode\",\n\t\"InterfaceOptionsSocialPanelConversationModeButton\",\n\t\"InterfaceOptionsSocialPanelTimestamps\",\n\t\"InterfaceOptionsSocialPanelTimestampsButton\",\n\t\"InterfaceOptionsActionBarsPanel\",\n\t\"InterfaceOptionsActionBarsPanelBottomLeft\",\n\t\"InterfaceOptionsActionBarsPanelBottomRight\",\n\t\"InterfaceOptionsActionBarsPanelRight\",\n\t\"InterfaceOptionsActionBarsPanelRightTwo\",\n\t\"InterfaceOptionsActionBarsPanelLockActionBars\",\n\t\"InterfaceOptionsActionBarsPanelAlwaysShowActionBars\",\n\t\"InterfaceOptionsActionBarsPanelSecureAbilityToggle\",\n\t\"InterfaceOptionsNamesPanel\",\n\t\"InterfaceOptionsNamesPanelMyName\",\n\t\"InterfaceOptionsNamesPanelNPCNames\",\n\t\"InterfaceOptionsNamesPanelNonCombatCreature\",\n\t\"InterfaceOptionsNamesPanelGuilds\",\n\t\"InterfaceOptionsNamesPanelTitles\",\n\t\"InterfaceOptionsNamesPanelFriendly\",\n\t\"InterfaceOptionsNamesPanelFriendlyPlayerNames\",\n\t\"InterfaceOptionsNamesPanelFriendlyPets\",\n\t\"InterfaceOptionsNamesPanelFriendlyGuardians\",\n\t\"InterfaceOptionsNamesPanelFriendlyTotems\",\n\t\"InterfaceOptionsNamesPanelEnemy\",\n\t\"InterfaceOptionsNamesPanelEnemyPlayerNames\",\n\t\"InterfaceOptionsNamesPanelEnemyPets\",\n\t\"InterfaceOptionsNamesPanelEnemyGuardians\",\n\t\"InterfaceOptionsNamesPanelEnemyTotems\",\n\t\"InterfaceOptionsNamesPanelUnitNameplates\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesAllowOverlap\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesFriends\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesFriendlyPets\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesFriendlyGuardians\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesFriendlyTotems\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesEnemies\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesEnemyPets\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesEnemyGuardians\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesEnemyTotems\",\n\t\"InterfaceOptionsCombatTextPanel\",\n\t\"InterfaceOptionsCombatTextPanelTargetDamage\",\n\t\"InterfaceOptionsCombatTextPanelPeriodicDamage\",\n\t\"InterfaceOptionsCombatTextPanelPetDamage\",\n\t\"InterfaceOptionsCombatTextPanelHealing\",\n\t\"InterfaceOptionsCombatTextPanelTargetEffects\",\n\t\"InterfaceOptionsCombatTextPanelOtherTargetEffects\",\n\t\"InterfaceOptionsCombatTextPanelEnableFCT\",\n\t\"InterfaceOptionsCombatTextPanelFCTDropDown\",\n\t\"InterfaceOptionsCombatTextPanelFCTDropDownButton\",\n\t\"InterfaceOptionsCombatTextPanelDodgeParryMiss\",\n\t\"InterfaceOptionsCombatTextPanelDamageReduction\",\n\t\"InterfaceOptionsCombatTextPanelRepChanges\",\n\t\"InterfaceOptionsCombatTextPanelReactiveAbilities\",\n\t\"InterfaceOptionsCombatTextPanelFriendlyHealerNames\",\n\t\"InterfaceOptionsCombatTextPanelCombatState\",\n\t\"InterfaceOptionsCombatTextPanelComboPoints\",\n\t\"InterfaceOptionsCombatTextPanelLowManaHealth\",\n\t\"InterfaceOptionsCombatTextPanelEnergyGains\",\n\t\"InterfaceOptionsCombatTextPanelPeriodicEnergyGains\",\n\t\"InterfaceOptionsCombatTextPanelHonorGains\",\n\t\"InterfaceOptionsCombatTextPanelAuras\",\n\t\"InterfaceOptionsStatusTextPanel\",\n\t\"InterfaceOptionsStatusTextPanelPlayer\",\n\t\"InterfaceOptionsStatusTextPanelPet\",\n\t\"InterfaceOptionsStatusTextPanelParty\",\n\t\"InterfaceOptionsStatusTextPanelTarget\",\n\t\"InterfaceOptionsStatusTextPanelPercentages\",\n\t\"InterfaceOptionsStatusTextPanelXP\",\n\t\"InterfaceOptionsUnitFramePanel\",\n\t\"InterfaceOptionsUnitFramePanelPartyBackground\",\n\t\"InterfaceOptionsUnitFramePanelPartyInRaid\",\n\t\"InterfaceOptionsUnitFramePanelPartyPets\",\n\t\"InterfaceOptionsUnitFramePanelRaidRange\",\n\t\"InterfaceOptionsUnitFramePanelArenaEnemyFrames\",\n\t\"InterfaceOptionsUnitFramePanelArenaEnemyCastBar\",\n\t\"InterfaceOptionsUnitFramePanelArenaEnemyPets\",\n\t\"InterfaceOptionsUnitFramePanelFullSizeFocusFrame\",\n\t\"InterfaceOptionsBuffsPanel\",\n\t\"InterfaceOptionsBuffsPanelBuffDurations\",\n\t\"InterfaceOptionsBuffsPanelDispellableDebuffs\",\n\t\"InterfaceOptionsBuffsPanelCastableBuffs\",\n\t\"InterfaceOptionsBuffsPanelConsolidateBuffs\",\n\t\"InterfaceOptionsBuffsPanelShowCastableDebuffs\",\n\t\"InterfaceOptionsBattlenetPanel\",\n\t\"InterfaceOptionsBattlenetPanelOnlineFriends\",\n\t\"InterfaceOptionsBattlenetPanelOfflineFriends\",\n\t\"InterfaceOptionsBattlenetPanelBroadcasts\",\n\t\"InterfaceOptionsBattlenetPanelFriendRequests\",\n\t\"InterfaceOptionsBattlenetPanelConversations\",\n\t\"InterfaceOptionsBattlenetPanelShowToastWindow\",\n\t\"InterfaceOptionsBattlenetPanelToastDurationSlider\",\n\t\"InterfaceOptionsCameraPanel\",\n\t\"InterfaceOptionsCameraPanelStyleDropDown\",\n\t\"InterfaceOptionsCameraPanelStyleDropDownButton\",\n\t\"InterfaceOptionsCameraPanelFollowSpeedSlider\",\n\t\"InterfaceOptionsCameraPanelMaxDistanceSlider\",\n\t\"InterfaceOptionsCameraPanelFollowTerrain\",\n\t\"InterfaceOptionsCameraPanelHeadBob\",\n\t\"InterfaceOptionsCameraPanelWaterCollision\",\n\t\"InterfaceOptionsCameraPanelSmartPivot\",\n\t\"InterfaceOptionsMousePanel\",\n\t\"InterfaceOptionsMousePanelInvertMouse\",\n\t\"InterfaceOptionsMousePanelClickToMove\",\n\t\"InterfaceOptionsMousePanelMouseSensitivitySlider\",\n\t\"InterfaceOptionsMousePanelMouseLookSpeedSlider\",\n\t\"InterfaceOptionsMousePanelWoWMouse\",\n\t\"InterfaceOptionsMousePanelClickMoveStyleDropDown\",\n\t\"InterfaceOptionsMousePanelClickMoveStyleDropDownButton\",\n\t\"InterfaceOptionsFeaturesPanel\",\n\t\"InterfaceOptionsFeaturesPanelEquipmentManager\",\n\t\"InterfaceOptionsFeaturesPanelPreviewTalentChanges\",\n\t\"InterfaceOptionsHelpPanel\",\n\t\"InterfaceOptionsHelpPanelShowTutorials\",\n\t\"InterfaceOptionsHelpPanelLoadingScreenTips\",\n\t\"InterfaceOptionsHelpPanelEnhancedTooltips\",\n\t\"InterfaceOptionsHelpPanelBeginnerTooltips\",\n\t\"InterfaceOptionsHelpPanelShowLuaErrors\",\n\t\"InterfaceOptionsHelpPanelResetTutorials\",\n\t\"InterfaceOptionsLanguagesPanel\",\n\t\"InterfaceOptionsLanguagesPanelLocaleDropDown\",\n\t\"InterfaceOptionsLanguagesPanelLocaleDropDownButton\",\n\t\"InterfaceOptionsLanguagesPanelUseEnglishAudio\",\n\t\"DungeonCompletionAlertFrame1\",\n\t\"DungeonCompletionAlertFrame1Reward1\",\n\t\"DungeonCompletionAlertFrame1GlowFrame\",\n\t\"AlertFrame\",\n\t\"MirrorTimer1\",\n\t\"MirrorTimer1StatusBar\",\n\t\"MirrorTimer2\",\n\t\"MirrorTimer2StatusBar\",\n\t\"MirrorTimer3\",\n\t\"MirrorTimer3StatusBar\",\n\t\"CoinPickupFrame\",\n\t\"CoinPickupLeftButton\",\n\t\"CoinPickupRightButton\",\n\t\"CoinPickupOkayButton\",\n\t\"CoinPickupCancelButton\",\n\t\"StackSplitFrame\",\n\t\"StackSplitLeftButton\",\n\t\"StackSplitRightButton\",\n\t\"StackSplitOkayButton\",\n\t\"StackSplitCancelButton\",\n\t\"ZoneTextFrame\",\n\t\"SubZoneTextFrame\",\n\t\"AutoFollowStatus\",\n\t\"BattlefieldFrame\",\n\t\"BattlefieldZone1\",\n\t\"BattlefieldZone2\",\n\t\"BattlefieldZone3\",\n\t\"BattlefieldZone4\",\n\t\"BattlefieldZone5\",\n\t\"BattlefieldListScrollFrame\",\n\t\"BattlefieldListScrollFrameScrollChildFrame\",\n\t\"BattlefieldListScrollFrameScrollBar\",\n\t\"BattlefieldListScrollFrameScrollBarScrollUpButton\",\n\t\"BattlefieldListScrollFrameScrollBarScrollDownButton\",\n\t\"BattlefieldFrameInfoScrollFrame\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrame\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfo\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfoWinReward\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfoLossReward\",\n\t\"BattlefieldFrameInfoScrollFrameScrollBar\",\n\t\"BattlefieldFrameInfoScrollFrameScrollBarScrollUpButton\",\n\t\"BattlefieldFrameInfoScrollFrameScrollBarScrollDownButton\",\n\t\"BattlefieldFrameCancelButton\",\n\t\"BattlefieldFrameJoinButton\",\n\t\"BattlefieldFrameGroupJoinButton\",\n\t\"BattlefieldFrameCloseButton\",\n\t\"BattlefieldTimerFrame\",\n\t\"MainMenuBar\",\n\t\"MainMenuExpBar\",\n\t\"MainMenuBarOverlayFrame\",\n\t\"MainMenuBarMaxLevelBar\",\n\t\"MainMenuBarArtFrame\",\n\t\"MainMenuBarVehicleLeaveButton\",\n\t\"ExhaustionTick\",\n\t\"CharacterMicroButton\",\n\t\"SpellbookMicroButton\",\n\t\"TalentMicroButton\",\n\t\"AchievementMicroButton\",\n\t\"QuestLogMicroButton\",\n\t\"SocialsMicroButton\",\n\t\"PVPMicroButton\",\n\t\"LFDMicroButton\",\n\t\"MainMenuMicroButton\",\n\t\"HelpMicroButton\",\n\t\"TutorialFrame\",\n\t\"TutorialFrameTextScrollFrame\",\n\t\"TutorialFrameTextScrollChildFrame\",\n\t\"TutorialFrameTextScrollFrameScrollBar\",\n\t\"TutorialFrameTextScrollFrameScrollBarScrollUpButton\",\n\t\"TutorialFrameTextScrollFrameScrollBarScrollDownButton\",\n\t\"TutorialTextBorder\",\n\t\"TutorialFrameCallOut\",\n\t\"TutorialFrameOkayButton\",\n\t\"TutorialFramePrevButton\",\n\t\"TutorialFrameNextButton\",\n\t\"TutorialFrameAlertButton\",\n\t\"TutorialFrameAlertButtonBadge\",\n\t\"MinimapCluster\",\n\t\"MinimapZoneTextButton\",\n\t\"Minimap\",\n\t\"MiniMapMailFrame\",\n\t\"MiniMapBattlefieldFrame\",\n\t\"MiniMapBattlefieldDropDown\",\n\t\"MiniMapBattlefieldDropDownButton\",\n\t\"MinimapPing\",\n\t\"MinimapBackdrop\",\n\t\"MiniMapWorldMapButton\",\n\t\"MiniMapTracking\",\n\t\"MiniMapTrackingDropDown\",\n\t\"MiniMapTrackingDropDownButton\",\n\t\"MiniMapTrackingButton\",\n\t\"MiniMapLFGFrame\",\n\t\"MiniMapLFGFrameIcon\",\n\t\"MiniMapLFGFrameDropDown\",\n\t\"MiniMapLFGFrameDropDownButton\",\n\t\"MinimapZoomIn\",\n\t\"MinimapZoomOut\",\n\t\"MiniMapRecordingButton\",\n\t\"MiniMapInstanceDifficulty\",\n\t\"GameTimeFrame\",\n\t\"ActionButton1\",\n\t\"ActionButton1Cooldown\",\n\t\"ActionButton2\",\n\t\"ActionButton2Cooldown\",\n\t\"ActionButton3\",\n\t\"ActionButton3Cooldown\",\n\t\"ActionButton4\",\n\t\"ActionButton4Cooldown\",\n\t\"ActionButton5\",\n\t\"ActionButton5Cooldown\",\n\t\"ActionButton6\",\n\t\"ActionButton6Cooldown\",\n\t\"ActionButton7\",\n\t\"ActionButton7Cooldown\",\n\t\"ActionButton8\",\n\t\"ActionButton8Cooldown\",\n\t\"ActionButton9\",\n\t\"ActionButton9Cooldown\",\n\t\"ActionButton10\",\n\t\"ActionButton10Cooldown\",\n\t\"ActionButton11\",\n\t\"ActionButton11Cooldown\",\n\t\"ActionButton12\",\n\t\"ActionButton12Cooldown\",\n\t\"ActionBarUpButton\",\n\t\"ActionBarDownButton\",\n\t\"MultiBarBottomLeft\",\n\t\"MultiBarBottomLeftButton1\",\n\t\"MultiBarBottomLeftButton1Cooldown\",\n\t\"MultiBarBottomLeftButton2\",\n\t\"MultiBarBottomLeftButton2Cooldown\",\n\t\"MultiBarBottomLeftButton3\",\n\t\"MultiBarBottomLeftButton3Cooldown\",\n\t\"MultiBarBottomLeftButton4\",\n\t\"MultiBarBottomLeftButton4Cooldown\",\n\t\"MultiBarBottomLeftButton5\",\n\t\"MultiBarBottomLeftButton5Cooldown\",\n\t\"MultiBarBottomLeftButton6\",\n\t\"MultiBarBottomLeftButton6Cooldown\",\n\t\"MultiBarBottomLeftButton7\",\n\t\"MultiBarBottomLeftButton7Cooldown\",\n\t\"MultiBarBottomLeftButton8\",\n\t\"MultiBarBottomLeftButton8Cooldown\",\n\t\"MultiBarBottomLeftButton9\",\n\t\"MultiBarBottomLeftButton9Cooldown\",\n\t\"MultiBarBottomLeftButton10\",\n\t\"MultiBarBottomLeftButton10Cooldown\",\n\t\"MultiBarBottomLeftButton11\",\n\t\"MultiBarBottomLeftButton11Cooldown\",\n\t\"MultiBarBottomLeftButton12\",\n\t\"MultiBarBottomLeftButton12Cooldown\",\n\t\"MultiBarBottomRight\",\n\t\"MultiBarBottomRightButton1\",\n\t\"MultiBarBottomRightButton1Cooldown\",\n\t\"MultiBarBottomRightButton2\",\n\t\"MultiBarBottomRightButton2Cooldown\",\n\t\"MultiBarBottomRightButton3\",\n\t\"MultiBarBottomRightButton3Cooldown\",\n\t\"MultiBarBottomRightButton4\",\n\t\"MultiBarBottomRightButton4Cooldown\",\n\t\"MultiBarBottomRightButton5\",\n\t\"MultiBarBottomRightButton5Cooldown\",\n\t\"MultiBarBottomRightButton6\",\n\t\"MultiBarBottomRightButton6Cooldown\",\n\t\"MultiBarBottomRightButton7\",\n\t\"MultiBarBottomRightButton7Cooldown\",\n\t\"MultiBarBottomRightButton8\",\n\t\"MultiBarBottomRightButton8Cooldown\",\n\t\"MultiBarBottomRightButton9\",\n\t\"MultiBarBottomRightButton9Cooldown\",\n\t\"MultiBarBottomRightButton10\",\n\t\"MultiBarBottomRightButton10Cooldown\",\n\t\"MultiBarBottomRightButton11\",\n\t\"MultiBarBottomRightButton11Cooldown\",\n\t\"MultiBarBottomRightButton12\",\n\t\"MultiBarBottomRightButton12Cooldown\",\n\t\"MultiBarRight\",\n\t\"MultiBarRightButton1\",\n\t\"MultiBarRightButton1Cooldown\",\n\t\"MultiBarRightButton2\",\n\t\"MultiBarRightButton2Cooldown\",\n\t\"MultiBarRightButton3\",\n\t\"MultiBarRightButton3Cooldown\",\n\t\"MultiBarRightButton4\",\n\t\"MultiBarRightButton4Cooldown\",\n\t\"MultiBarRightButton5\",\n\t\"MultiBarRightButton5Cooldown\",\n\t\"MultiBarRightButton6\",\n\t\"MultiBarRightButton6Cooldown\",\n\t\"MultiBarRightButton7\",\n\t\"MultiBarRightButton7Cooldown\",\n\t\"MultiBarRightButton8\",\n\t\"MultiBarRightButton8Cooldown\",\n\t\"MultiBarRightButton9\",\n\t\"MultiBarRightButton9Cooldown\",\n\t\"MultiBarRightButton10\",\n\t\"MultiBarRightButton10Cooldown\",\n\t\"MultiBarRightButton11\",\n\t\"MultiBarRightButton11Cooldown\",\n\t\"MultiBarRightButton12\",\n\t\"MultiBarRightButton12Cooldown\",\n\t\"MultiBarLeft\",\n\t\"MultiBarLeftButton1\",\n\t\"MultiBarLeftButton1Cooldown\",\n\t\"MultiBarLeftButton2\",\n\t\"MultiBarLeftButton2Cooldown\",\n\t\"MultiBarLeftButton3\",\n\t\"MultiBarLeftButton3Cooldown\",\n\t\"MultiBarLeftButton4\",\n\t\"MultiBarLeftButton4Cooldown\",\n\t\"MultiBarLeftButton5\",\n\t\"MultiBarLeftButton5Cooldown\",\n\t\"MultiBarLeftButton6\",\n\t\"MultiBarLeftButton6Cooldown\",\n\t\"MultiBarLeftButton7\",\n\t\"MultiBarLeftButton7Cooldown\",\n\t\"MultiBarLeftButton8\",\n\t\"MultiBarLeftButton8Cooldown\",\n\t\"MultiBarLeftButton9\",\n\t\"MultiBarLeftButton9Cooldown\",\n\t\"MultiBarLeftButton10\",\n\t\"MultiBarLeftButton10Cooldown\",\n\t\"MultiBarLeftButton11\",\n\t\"MultiBarLeftButton11Cooldown\",\n\t\"MultiBarLeftButton12\",\n\t\"MultiBarLeftButton12Cooldown\",\n\t\"BuffFrame\",\n\t\"ConsolidatedBuffs\",\n\t\"ConsolidatedBuffsTooltip\",\n\t\"ConsolidatedBuffsContainer\",\n\t\"TemporaryEnchantFrame\",\n\t\"TempEnchant1\",\n\t\"TempEnchant2\",\n\t\"LowHealthFrame\",\n\t\"CastingBarFrame\",\n\t\"BNetEventFrame\",\n\t\"BNToastFrame\",\n\t\"BNToastFrameClickFrame\",\n\t\"BNToastFrameGlowFrame\",\n\t\"BNToastFrameCloseButton\",\n\t\"BNetReportFrame\",\n\t\"BNetReportFrameComment\",\n\t\"BNetReportFrameCommentScrollFrame\",\n\t\"BNetReportFrameCommentBox\",\n\t\"BNetReportFrameCommentScrollFrameScrollBar\",\n\t\"BNetReportFrameCommentScrollFrameScrollBarScrollUpButton\",\n\t\"BNetReportFrameCommentScrollFrameScrollBarScrollDownButton\",\n\t\"BNetReportFrameCommentScrollFrameFocusButton\",\n\t\"BNetReportFrameReportButton\",\n\t\"BNetReportFrameCancelButton\",\n\t\"BNConversationInviteDialog\",\n\t\"BNConversationInviteDialogList\",\n\t\"BNConversationInviteDialogListScrollFrame\",\n\t\"BNConversationInviteDialogListScrollFrameScrollChildFrame\",\n\t\"BNConversationInviteDialogListScrollFrameScrollBar\",\n\t\"BNConversationInviteDialogListScrollFrameScrollBarScrollUpButton\",\n\t\"BNConversationInviteDialogListScrollFrameScrollBarScrollDownButton\",\n\t\"BNConversationInviteDialogListFriend1\",\n\t\"BNConversationInviteDialogListFriend2\",\n\t\"BNConversationInviteDialogListFriend3\",\n\t\"BNConversationInviteDialogListFriend4\",\n\t\"BNConversationInviteDialogListFriend5\",\n\t\"BNConversationInviteDialogListFriend6\",\n\t\"BNConversationInviteDialogListFriend7\",\n\t\"BNConversationInviteDialogInviteButton\",\n\t\"BNConversationInviteDialogCancelButton\",\n\t\"MacroEditBox\",\n\t\"ChatChannelDropDown\",\n\t\"ChatChannelDropDownButton\",\n\t\"ChatBNPlayerDropDown\",\n\t\"ChatBNPlayerDropDownButton\",\n\t\"GeneralDockManager\",\n\t\"GeneralDockManagerOverflowButton\",\n\t\"GeneralDockManagerOverflowButtonList\",\n\t\"GeneralDockManagerScrollFrame\",\n\t\"GeneralDockManagerScrollFrameChild\",\n\t\"ChatFrame1Tab\",\n\t\"ChatFrame1TabFlash\",\n\t\"ChatFrame1TabDropDown\",\n\t\"ChatFrame1TabDropDownButton\",\n\t\"ChatFrame1\",\n\t\"ChatFrame1ClickAnywhereButton\",\n\t\"ChatFrame1ResizeButton\",\n\t\"ChatFrame1ButtonFrame\",\n\t\"ChatFrame1ButtonFrameBottomButton\",\n\t\"ChatFrame1ButtonFrameDownButton\",\n\t\"ChatFrame1ButtonFrameUpButton\",\n\t\"ChatFrame1ButtonFrameMinimizeButton\",\n\t\"ChatFrame1EditBox\",\n\t\"ChatFrame1EditBoxLanguage\",\n\t\"ChatFrameMenuButton\",\n\t\"FriendsMicroButton\",\n\t\"ChatMenu\",\n\t\"ChatMenuButton1\",\n\t\"ChatMenuButton2\",\n\t\"ChatMenuButton3\",\n\t\"ChatMenuButton4\",\n\t\"ChatMenuButton5\",\n\t\"ChatMenuButton6\",\n\t\"ChatMenuButton7\",\n\t\"ChatMenuButton8\",\n\t\"ChatMenuButton9\",\n\t\"ChatMenuButton10\",\n\t\"ChatMenuButton11\",\n\t\"ChatMenuButton12\",\n\t\"ChatMenuButton13\",\n\t\"ChatMenuButton14\",\n\t\"ChatMenuButton15\",\n\t\"ChatMenuButton16\",\n\t\"ChatMenuButton17\",\n\t\"ChatMenuButton18\",\n\t\"ChatMenuButton19\",\n\t\"ChatMenuButton20\",\n\t\"ChatMenuButton21\",\n\t\"ChatMenuButton22\",\n\t\"ChatMenuButton23\",\n\t\"ChatMenuButton24\",\n\t\"ChatMenuButton25\",\n\t\"ChatMenuButton26\",\n\t\"ChatMenuButton27\",\n\t\"ChatMenuButton28\",\n\t\"ChatMenuButton29\",\n\t\"ChatMenuButton30\",\n\t\"ChatMenuButton31\",\n\t\"ChatMenuButton32\",\n\t\"EmoteMenu\",\n\t\"EmoteMenuButton1\",\n\t\"EmoteMenuButton2\",\n\t\"EmoteMenuButton3\",\n\t\"EmoteMenuButton4\",\n\t\"EmoteMenuButton5\",\n\t\"EmoteMenuButton6\",\n\t\"EmoteMenuButton7\",\n\t\"EmoteMenuButton8\",\n\t\"EmoteMenuButton9\",\n\t\"EmoteMenuButton10\",\n\t\"EmoteMenuButton11\",\n\t\"EmoteMenuButton12\",\n\t\"EmoteMenuButton13\",\n\t\"EmoteMenuButton14\",\n\t\"EmoteMenuButton15\",\n\t\"EmoteMenuButton16\",\n\t\"EmoteMenuButton17\",\n\t\"EmoteMenuButton18\",\n\t\"EmoteMenuButton19\",\n\t\"EmoteMenuButton20\",\n\t\"EmoteMenuButton21\",\n\t\"EmoteMenuButton22\",\n\t\"EmoteMenuButton23\",\n\t\"EmoteMenuButton24\",\n\t\"EmoteMenuButton25\",\n\t\"EmoteMenuButton26\",\n\t\"EmoteMenuButton27\",\n\t\"EmoteMenuButton28\",\n\t\"EmoteMenuButton29\",\n\t\"EmoteMenuButton30\",\n\t\"EmoteMenuButton31\",\n\t\"EmoteMenuButton32\",\n\t\"LanguageMenu\",\n\t\"LanguageMenuButton1\",\n\t\"LanguageMenuButton2\",\n\t\"LanguageMenuButton3\",\n\t\"LanguageMenuButton4\",\n\t\"LanguageMenuButton5\",\n\t\"LanguageMenuButton6\",\n\t\"LanguageMenuButton7\",\n\t\"LanguageMenuButton8\",\n\t\"LanguageMenuButton9\",\n\t\"LanguageMenuButton10\",\n\t\"LanguageMenuButton11\",\n\t\"LanguageMenuButton12\",\n\t\"LanguageMenuButton13\",\n\t\"LanguageMenuButton14\",\n\t\"LanguageMenuButton15\",\n\t\"LanguageMenuButton16\",\n\t\"LanguageMenuButton17\",\n\t\"LanguageMenuButton18\",\n\t\"LanguageMenuButton19\",\n\t\"LanguageMenuButton20\",\n\t\"LanguageMenuButton21\",\n\t\"LanguageMenuButton22\",\n\t\"LanguageMenuButton23\",\n\t\"LanguageMenuButton24\",\n\t\"LanguageMenuButton25\",\n\t\"LanguageMenuButton26\",\n\t\"LanguageMenuButton27\",\n\t\"LanguageMenuButton28\",\n\t\"LanguageMenuButton29\",\n\t\"LanguageMenuButton30\",\n\t\"LanguageMenuButton31\",\n\t\"LanguageMenuButton32\",\n\t\"VoiceMacroMenu\",\n\t\"VoiceMacroMenuButton1\",\n\t\"VoiceMacroMenuButton2\",\n\t\"VoiceMacroMenuButton3\",\n\t\"VoiceMacroMenuButton4\",\n\t\"VoiceMacroMenuButton5\",\n\t\"VoiceMacroMenuButton6\",\n\t\"VoiceMacroMenuButton7\",\n\t\"VoiceMacroMenuButton8\",\n\t\"VoiceMacroMenuButton9\",\n\t\"VoiceMacroMenuButton10\",\n\t\"VoiceMacroMenuButton11\",\n\t\"VoiceMacroMenuButton12\",\n\t\"VoiceMacroMenuButton13\",\n\t\"VoiceMacroMenuButton14\",\n\t\"VoiceMacroMenuButton15\",\n\t\"VoiceMacroMenuButton16\",\n\t\"VoiceMacroMenuButton17\",\n\t\"VoiceMacroMenuButton18\",\n\t\"VoiceMacroMenuButton19\",\n\t\"VoiceMacroMenuButton20\",\n\t\"VoiceMacroMenuButton21\",\n\t\"VoiceMacroMenuButton22\",\n\t\"VoiceMacroMenuButton23\",\n\t\"VoiceMacroMenuButton24\",\n\t\"VoiceMacroMenuButton25\",\n\t\"VoiceMacroMenuButton26\",\n\t\"VoiceMacroMenuButton27\",\n\t\"VoiceMacroMenuButton28\",\n\t\"VoiceMacroMenuButton29\",\n\t\"VoiceMacroMenuButton30\",\n\t\"VoiceMacroMenuButton31\",\n\t\"VoiceMacroMenuButton32\",\n\t\"ChatFrame2Tab\",\n\t\"ChatFrame2TabFlash\",\n\t\"ChatFrame2TabDropDown\",\n\t\"ChatFrame2TabDropDownButton\",\n\t\"ChatFrame2\",\n\t\"ChatFrame2ClickAnywhereButton\",\n\t\"ChatFrame2ResizeButton\",\n\t\"ChatFrame2ButtonFrame\",\n\t\"ChatFrame2ButtonFrameBottomButton\",\n\t\"ChatFrame2ButtonFrameDownButton\",\n\t\"ChatFrame2ButtonFrameUpButton\",\n\t\"ChatFrame2ButtonFrameMinimizeButton\",\n\t\"ChatFrame2EditBox\",\n\t\"ChatFrame2EditBoxLanguage\",\n\t\"ChatFrame3Tab\",\n\t\"ChatFrame3TabFlash\",\n\t\"ChatFrame3TabDropDown\",\n\t\"ChatFrame3TabDropDownButton\",\n\t\"ChatFrame3\",\n\t\"ChatFrame3ClickAnywhereButton\",\n\t\"ChatFrame3ResizeButton\",\n\t\"ChatFrame3ButtonFrame\",\n\t\"ChatFrame3ButtonFrameBottomButton\",\n\t\"ChatFrame3ButtonFrameDownButton\",\n\t\"ChatFrame3ButtonFrameUpButton\",\n\t\"ChatFrame3ButtonFrameMinimizeButton\",\n\t\"ChatFrame3EditBox\",\n\t\"ChatFrame3EditBoxLanguage\",\n\t\"ChatFrame4Tab\",\n\t\"ChatFrame4TabFlash\",\n\t\"ChatFrame4TabDropDown\",\n\t\"ChatFrame4TabDropDownButton\",\n\t\"ChatFrame4\",\n\t\"ChatFrame4ClickAnywhereButton\",\n\t\"ChatFrame4ResizeButton\",\n\t\"ChatFrame4ButtonFrame\",\n\t\"ChatFrame4ButtonFrameBottomButton\",\n\t\"ChatFrame4ButtonFrameDownButton\",\n\t\"ChatFrame4ButtonFrameUpButton\",\n\t\"ChatFrame4ButtonFrameMinimizeButton\",\n\t\"ChatFrame4EditBox\",\n\t\"ChatFrame4EditBoxLanguage\",\n\t\"ChatFrame5Tab\",\n\t\"ChatFrame5TabFlash\",\n\t\"ChatFrame5TabDropDown\",\n\t\"ChatFrame5TabDropDownButton\",\n\t\"ChatFrame5\",\n\t\"ChatFrame5ClickAnywhereButton\",\n\t\"ChatFrame5ResizeButton\",\n\t\"ChatFrame5ButtonFrame\",\n\t\"ChatFrame5ButtonFrameBottomButton\",\n\t\"ChatFrame5ButtonFrameDownButton\",\n\t\"ChatFrame5ButtonFrameUpButton\",\n\t\"ChatFrame5ButtonFrameMinimizeButton\",\n\t\"ChatFrame5EditBox\",\n\t\"ChatFrame5EditBoxLanguage\",\n\t\"ChatFrame6Tab\",\n\t\"ChatFrame6TabFlash\",\n\t\"ChatFrame6TabDropDown\",\n\t\"ChatFrame6TabDropDownButton\",\n\t\"ChatFrame6\",\n\t\"ChatFrame6ClickAnywhereButton\",\n\t\"ChatFrame6ResizeButton\",\n\t\"ChatFrame6ButtonFrame\",\n\t\"ChatFrame6ButtonFrameBottomButton\",\n\t\"ChatFrame6ButtonFrameDownButton\",\n\t\"ChatFrame6ButtonFrameUpButton\",\n\t\"ChatFrame6ButtonFrameMinimizeButton\",\n\t\"ChatFrame6EditBox\",\n\t\"ChatFrame6EditBoxLanguage\",\n\t\"ChatFrame7Tab\",\n\t\"ChatFrame7TabFlash\",\n\t\"ChatFrame7TabDropDown\",\n\t\"ChatFrame7TabDropDownButton\",\n\t\"ChatFrame7\",\n\t\"ChatFrame7ClickAnywhereButton\",\n\t\"ChatFrame7ResizeButton\",\n\t\"ChatFrame7ButtonFrame\",\n\t\"ChatFrame7ButtonFrameBottomButton\",\n\t\"ChatFrame7ButtonFrameDownButton\",\n\t\"ChatFrame7ButtonFrameUpButton\",\n\t\"ChatFrame7ButtonFrameMinimizeButton\",\n\t\"ChatFrame7EditBox\",\n\t\"ChatFrame7EditBoxLanguage\",\n\t\"ChatFrame8Tab\",\n\t\"ChatFrame8TabFlash\",\n\t\"ChatFrame8TabDropDown\",\n\t\"ChatFrame8TabDropDownButton\",\n\t\"ChatFrame8\",\n\t\"ChatFrame8ClickAnywhereButton\",\n\t\"ChatFrame8ResizeButton\",\n\t\"ChatFrame8ButtonFrame\",\n\t\"ChatFrame8ButtonFrameBottomButton\",\n\t\"ChatFrame8ButtonFrameDownButton\",\n\t\"ChatFrame8ButtonFrameUpButton\",\n\t\"ChatFrame8ButtonFrameMinimizeButton\",\n\t\"ChatFrame8EditBox\",\n\t\"ChatFrame8EditBoxLanguage\",\n\t\"ChatFrame9Tab\",\n\t\"ChatFrame9TabFlash\",\n\t\"ChatFrame9TabDropDown\",\n\t\"ChatFrame9TabDropDownButton\",\n\t\"ChatFrame9\",\n\t\"ChatFrame9ClickAnywhereButton\",\n\t\"ChatFrame9ResizeButton\",\n\t\"ChatFrame9ButtonFrame\",\n\t\"ChatFrame9ButtonFrameBottomButton\",\n\t\"ChatFrame9ButtonFrameDownButton\",\n\t\"ChatFrame9ButtonFrameUpButton\",\n\t\"ChatFrame9ButtonFrameMinimizeButton\",\n\t\"ChatFrame9EditBox\",\n\t\"ChatFrame9EditBoxLanguage\",\n\t\"ChatFrame10Tab\",\n\t\"ChatFrame10TabFlash\",\n\t\"ChatFrame10TabDropDown\",\n\t\"ChatFrame10TabDropDownButton\",\n\t\"ChatFrame10\",\n\t\"ChatFrame10ClickAnywhereButton\",\n\t\"ChatFrame10ResizeButton\",\n\t\"ChatFrame10ButtonFrame\",\n\t\"ChatFrame10ButtonFrameBottomButton\",\n\t\"ChatFrame10ButtonFrameDownButton\",\n\t\"ChatFrame10ButtonFrameUpButton\",\n\t\"ChatFrame10ButtonFrameMinimizeButton\",\n\t\"ChatFrame10EditBox\",\n\t\"ChatFrame10EditBoxLanguage\",\n\t\"FloatingChatFrameManager\",\n\t\"VoiceChatTalkers\",\n\t\"VoiceChatTalkersSpeaker\",\n\t\"VoiceChatTalkersButton1\",\n\t\"VoiceChatTalkersButton1SecureButton\",\n\t\"VoiceChatTalkersButton1Speaker\",\n\t\"MiniMapVoiceChatFrame\",\n\t\"MiniMapVoiceChatFrameIcon\",\n\t\"MiniMapVoiceChatDropDown\",\n\t\"MiniMapVoiceChatDropDownButton\",\n\t\"ReadyCheckFrame\",\n\t\"ReadyCheckListenerFrame\",\n\t\"ReadyCheckFrameYesButton\",\n\t\"ReadyCheckFrameNoButton\",\n\t\"PlayerFrame\",\n\t\"PlayerSpeakerFrame\",\n\t\"PlayerFrameReadyCheck\",\n\t\"PlayerPVPIconHitArea\",\n\t\"PlayerStatusGlow\",\n\t\"PlayerPlayTime\",\n\t\"PlayerFrameHealthBar\",\n\t\"PlayerFrameManaBar\",\n\t\"PlayerFrameDropDown\",\n\t\"PlayerFrameDropDownButton\",\n\t\"PlayerFrameGroupIndicator\",\n\t\"PartyMemberFrame1\",\n\t\"PartyMemberFrame1DropDown\",\n\t\"PartyMemberFrame1DropDownButton\",\n\t\"PartyMemberFrame1HealthBar\",\n\t\"PartyMemberFrame1ManaBar\",\n\t\"PartyMemberFrame1Speaker\",\n\t\"PartyMemberFrame1SpeakerFrame\",\n\t\"PartyMemberFrame1ReadyCheck\",\n\t\"PartyMemberFrame1Debuff1\",\n\t\"PartyMemberFrame1Debuff2\",\n\t\"PartyMemberFrame1Debuff3\",\n\t\"PartyMemberFrame1Debuff4\",\n\t\"PartyMemberFrame1PetFrame\",\n\t\"PartyMemberFrame1PetFrameHealthBar\",\n\t\"PartyMemberFrame1PetFrameDebuff1\",\n\t\"PartyMemberFrame1PetFrameDebuff2\",\n\t\"PartyMemberFrame1PetFrameDebuff3\",\n\t\"PartyMemberFrame1PetFrameDebuff4\",\n\t\"PartyMemberFrame2\",\n\t\"PartyMemberFrame2DropDown\",\n\t\"PartyMemberFrame2DropDownButton\",\n\t\"PartyMemberFrame2HealthBar\",\n\t\"PartyMemberFrame2ManaBar\",\n\t\"PartyMemberFrame2Speaker\",\n\t\"PartyMemberFrame2SpeakerFrame\",\n\t\"PartyMemberFrame2ReadyCheck\",\n\t\"PartyMemberFrame2Debuff1\",\n\t\"PartyMemberFrame2Debuff2\",\n\t\"PartyMemberFrame2Debuff3\",\n\t\"PartyMemberFrame2Debuff4\",\n\t\"PartyMemberFrame2PetFrame\",\n\t\"PartyMemberFrame2PetFrameHealthBar\",\n\t\"PartyMemberFrame2PetFrameDebuff1\",\n\t\"PartyMemberFrame2PetFrameDebuff2\",\n\t\"PartyMemberFrame2PetFrameDebuff3\",\n\t\"PartyMemberFrame2PetFrameDebuff4\",\n\t\"PartyMemberFrame3\",\n\t\"PartyMemberFrame3DropDown\",\n\t\"PartyMemberFrame3DropDownButton\",\n\t\"PartyMemberFrame3HealthBar\",\n\t\"PartyMemberFrame3ManaBar\",\n\t\"PartyMemberFrame3Speaker\",\n\t\"PartyMemberFrame3SpeakerFrame\",\n\t\"PartyMemberFrame3ReadyCheck\",\n\t\"PartyMemberFrame3Debuff1\",\n\t\"PartyMemberFrame3Debuff2\",\n\t\"PartyMemberFrame3Debuff3\",\n\t\"PartyMemberFrame3Debuff4\",\n\t\"PartyMemberFrame3PetFrame\",\n\t\"PartyMemberFrame3PetFrameHealthBar\",\n\t\"PartyMemberFrame3PetFrameDebuff1\",\n\t\"PartyMemberFrame3PetFrameDebuff2\",\n\t\"PartyMemberFrame3PetFrameDebuff3\",\n\t\"PartyMemberFrame3PetFrameDebuff4\",\n\t\"PartyMemberFrame4\",\n\t\"PartyMemberFrame4DropDown\",\n\t\"PartyMemberFrame4DropDownButton\",\n\t\"PartyMemberFrame4HealthBar\",\n\t\"PartyMemberFrame4ManaBar\",\n\t\"PartyMemberFrame4Speaker\",\n\t\"PartyMemberFrame4SpeakerFrame\",\n\t\"PartyMemberFrame4ReadyCheck\",\n\t\"PartyMemberFrame4Debuff1\",\n\t\"PartyMemberFrame4Debuff2\",\n\t\"PartyMemberFrame4Debuff3\",\n\t\"PartyMemberFrame4Debuff4\",\n\t\"PartyMemberFrame4PetFrame\",\n\t\"PartyMemberFrame4PetFrameHealthBar\",\n\t\"PartyMemberFrame4PetFrameDebuff1\",\n\t\"PartyMemberFrame4PetFrameDebuff2\",\n\t\"PartyMemberFrame4PetFrameDebuff3\",\n\t\"PartyMemberFrame4PetFrameDebuff4\",\n\t\"PartyMemberBuffTooltip\",\n\t\"PartyMemberBuffTooltipBuff1\",\n\t\"PartyMemberBuffTooltipBuff2\",\n\t\"PartyMemberBuffTooltipBuff3\",\n\t\"PartyMemberBuffTooltipBuff4\",\n\t\"PartyMemberBuffTooltipBuff5\",\n\t\"PartyMemberBuffTooltipBuff6\",\n\t\"PartyMemberBuffTooltipBuff7\",\n\t\"PartyMemberBuffTooltipBuff8\",\n\t\"PartyMemberBuffTooltipBuff9\",\n\t\"PartyMemberBuffTooltipBuff10\",\n\t\"PartyMemberBuffTooltipBuff11\",\n\t\"PartyMemberBuffTooltipBuff12\",\n\t\"PartyMemberBuffTooltipBuff13\",\n\t\"PartyMemberBuffTooltipBuff14\",\n\t\"PartyMemberBuffTooltipBuff15\",\n\t\"PartyMemberBuffTooltipBuff16\",\n\t\"PartyMemberBuffTooltipDebuff1\",\n\t\"PartyMemberBuffTooltipDebuff2\",\n\t\"PartyMemberBuffTooltipDebuff3\",\n\t\"PartyMemberBuffTooltipDebuff4\",\n\t\"PartyMemberBuffTooltipDebuff5\",\n\t\"PartyMemberBuffTooltipDebuff6\",\n\t\"PartyMemberBuffTooltipDebuff7\",\n\t\"PartyMemberBuffTooltipDebuff8\",\n\t\"PartyMemberBackground\",\n\t\"TargetFrame\",\n\t\"TargetFrameTextureFrame\",\n\t\"TargetFrameDropDown\",\n\t\"TargetFrameDropDownButton\",\n\t\"TargetFrameHealthBar\",\n\t\"TargetFrameManaBar\",\n\t\"TargetFrameBuffs\",\n\t\"TargetFrameDebuffs\",\n\t\"TargetFrameNumericalThreat\",\n\t\"TargetFrameSpellBar\",\n\t\"TargetFrameToT\",\n\t\"TargetFrameToTTextureFrame\",\n\t\"TargetFrameToTHealthBar\",\n\t\"TargetFrameToTManaBar\",\n\t\"TargetFrameToTDebuff1\",\n\t\"TargetFrameToTDebuff1Cooldown\",\n\t\"TargetFrameToTDebuff2\",\n\t\"TargetFrameToTDebuff2Cooldown\",\n\t\"TargetFrameToTDebuff3\",\n\t\"TargetFrameToTDebuff3Cooldown\",\n\t\"TargetFrameToTDebuff4\",\n\t\"TargetFrameToTDebuff4Cooldown\",\n\t\"FocusFrame\",\n\t\"FocusFrameTextureFrame\",\n\t\"FocusFrameDropDown\",\n\t\"FocusFrameDropDownButton\",\n\t\"FocusFrameHealthBar\",\n\t\"FocusFrameManaBar\",\n\t\"FocusFrameBuffs\",\n\t\"FocusFrameDebuffs\",\n\t\"FocusFrameNumericalThreat\",\n\t\"FocusFrameSpellBar\",\n\t\"FocusFrameToT\",\n\t\"FocusFrameToTTextureFrame\",\n\t\"FocusFrameToTHealthBar\",\n\t\"FocusFrameToTManaBar\",\n\t\"FocusFrameToTDebuff1\",\n\t\"FocusFrameToTDebuff1Cooldown\",\n\t\"FocusFrameToTDebuff2\",\n\t\"FocusFrameToTDebuff2Cooldown\",\n\t\"FocusFrameToTDebuff3\",\n\t\"FocusFrameToTDebuff3Cooldown\",\n\t\"FocusFrameToTDebuff4\",\n\t\"FocusFrameToTDebuff4Cooldown\",\n\t\"Boss1TargetFrame\",\n\t\"Boss1TargetFrameTextureFrame\",\n\t\"Boss1TargetFrameDropDown\",\n\t\"Boss1TargetFrameDropDownButton\",\n\t\"Boss1TargetFrameHealthBar\",\n\t\"Boss1TargetFrameManaBar\",\n\t\"Boss1TargetFrameBuffs\",\n\t\"Boss1TargetFrameDebuffs\",\n\t\"Boss1TargetFrameNumericalThreat\",\n\t\"Boss2TargetFrame\",\n\t\"Boss2TargetFrameTextureFrame\",\n\t\"Boss2TargetFrameDropDown\",\n\t\"Boss2TargetFrameDropDownButton\",\n\t\"Boss2TargetFrameHealthBar\",\n\t\"Boss2TargetFrameManaBar\",\n\t\"Boss2TargetFrameBuffs\",\n\t\"Boss2TargetFrameDebuffs\",\n\t\"Boss2TargetFrameNumericalThreat\",\n\t\"Boss3TargetFrame\",\n\t\"Boss3TargetFrameTextureFrame\",\n\t\"Boss3TargetFrameDropDown\",\n\t\"Boss3TargetFrameDropDownButton\",\n\t\"Boss3TargetFrameHealthBar\",\n\t\"Boss3TargetFrameManaBar\",\n\t\"Boss3TargetFrameBuffs\",\n\t\"Boss3TargetFrameDebuffs\",\n\t\"Boss3TargetFrameNumericalThreat\",\n\t\"Boss4TargetFrame\",\n\t\"Boss4TargetFrameTextureFrame\",\n\t\"Boss4TargetFrameDropDown\",\n\t\"Boss4TargetFrameDropDownButton\",\n\t\"Boss4TargetFrameHealthBar\",\n\t\"Boss4TargetFrameManaBar\",\n\t\"Boss4TargetFrameBuffs\",\n\t\"Boss4TargetFrameDebuffs\",\n\t\"Boss4TargetFrameNumericalThreat\",\n\t\"TotemFrame\",\n\t\"TotemFrameTotem1\",\n\t\"TotemFrameTotem1Icon\",\n\t\"TotemFrameTotem1IconCooldown\",\n\t\"TotemFrameTotem2\",\n\t\"TotemFrameTotem2Icon\",\n\t\"TotemFrameTotem2IconCooldown\",\n\t\"TotemFrameTotem3\",\n\t\"TotemFrameTotem3Icon\",\n\t\"TotemFrameTotem3IconCooldown\",\n\t\"TotemFrameTotem4\",\n\t\"TotemFrameTotem4Icon\",\n\t\"TotemFrameTotem4IconCooldown\",\n\t\"PetFrame\",\n\t\"PetFrameDropDown\",\n\t\"PetFrameDropDownButton\",\n\t\"PetFrameHealthBar\",\n\t\"PetFrameManaBar\",\n\t\"PetFrameDebuff1\",\n\t\"PetFrameDebuff2\",\n\t\"PetFrameDebuff3\",\n\t\"PetFrameDebuff4\",\n\t\"PetFrameHappiness\",\n\t\"PetCastingBarFrame\",\n\t\"StatsFrame\",\n\t\"SpellBookFrame\",\n\t\"SpellBookFrameTabButton1\",\n\t\"SpellBookFrameTabButton2\",\n\t\"SpellBookFrameTabButton3\",\n\t\"SpellBookPrevPageButton\",\n\t\"SpellBookNextPageButton\",\n\t\"SpellBookCloseButton\",\n\t\"ShowAllSpellRanksCheckBox\",\n\t\"SpellButton1\",\n\t\"SpellButton1Cooldown\",\n\t\"SpellButton2\",\n\t\"SpellButton2Cooldown\",\n\t\"SpellButton3\",\n\t\"SpellButton3Cooldown\",\n\t\"SpellButton4\",\n\t\"SpellButton4Cooldown\",\n\t\"SpellButton5\",\n\t\"SpellButton5Cooldown\",\n\t\"SpellButton6\",\n\t\"SpellButton6Cooldown\",\n\t\"SpellButton7\",\n\t\"SpellButton7Cooldown\",\n\t\"SpellButton8\",\n\t\"SpellButton8Cooldown\",\n\t\"SpellButton9\",\n\t\"SpellButton9Cooldown\",\n\t\"SpellButton10\",\n\t\"SpellButton10Cooldown\",\n\t\"SpellButton11\",\n\t\"SpellButton11Cooldown\",\n\t\"SpellButton12\",\n\t\"SpellButton12Cooldown\",\n\t\"SpellBookSkillLineTab1\",\n\t\"SpellBookSkillLineTab2\",\n\t\"SpellBookSkillLineTab3\",\n\t\"SpellBookSkillLineTab4\",\n\t\"SpellBookSkillLineTab5\",\n\t\"SpellBookSkillLineTab6\",\n\t\"SpellBookSkillLineTab7\",\n\t\"SpellBookSkillLineTab8\",\n\t\"SpellBookTabFlashFrame\",\n\t\"CharacterFrame\",\n\t\"CharacterNameFrame\",\n\t\"CharacterFrameCloseButton\",\n\t\"CharacterFrameTab1\",\n\t\"CharacterFrameTab2\",\n\t\"CharacterFrameTab3\",\n\t\"CharacterFrameTab4\",\n\t\"CharacterFrameTab5\",\n\t\"PaperDollFrame\",\n\t\"PlayerTitleFrame\",\n\t\"PlayerTitleFrameButton\",\n\t\"PlayerTitlePickerFrame\",\n\t\"PlayerTitlePickerScrollFrame\",\n\t\"PlayerTitlePickerScrollFrameScrollChild\",\n\t\"PlayerTitlePickerScrollFrameScrollBar\",\n\t\"PlayerTitlePickerScrollFrameScrollBarScrollUpButton\",\n\t\"PlayerTitlePickerScrollFrameScrollBarScrollDownButton\",\n\t\"PlayerTitlePickerScrollFrameButton1\",\n\t\"PlayerTitlePickerScrollFrameButton2\",\n\t\"PlayerTitlePickerScrollFrameButton3\",\n\t\"PlayerTitlePickerScrollFrameButton4\",\n\t\"PlayerTitlePickerScrollFrameButton5\",\n\t\"PlayerTitlePickerScrollFrameButton6\",\n\t\"PlayerTitlePickerScrollFrameButton7\",\n\t\"CharacterModelFrame\",\n\t\"CharacterModelFrameRotateLeftButton\",\n\t\"CharacterModelFrameRotateRightButton\",\n\t\"CharacterAttributesFrame\",\n\t\"PlayerStatFrameLeft1\",\n\t\"PlayerStatFrameLeft1Stat\",\n\t\"PlayerStatFrameLeft2\",\n\t\"PlayerStatFrameLeft2Stat\",\n\t\"PlayerStatFrameLeft3\",\n\t\"PlayerStatFrameLeft3Stat\",\n\t\"PlayerStatFrameLeft4\",\n\t\"PlayerStatFrameLeft4Stat\",\n\t\"PlayerStatFrameLeft5\",\n\t\"PlayerStatFrameLeft5Stat\",\n\t\"PlayerStatFrameLeft6\",\n\t\"PlayerStatFrameLeft6Stat\",\n\t\"PlayerStatFrameRight1\",\n\t\"PlayerStatFrameRight1Stat\",\n\t\"PlayerStatFrameRight2\",\n\t\"PlayerStatFrameRight2Stat\",\n\t\"PlayerStatFrameRight3\",\n\t\"PlayerStatFrameRight3Stat\",\n\t\"PlayerStatFrameRight4\",\n\t\"PlayerStatFrameRight4Stat\",\n\t\"PlayerStatFrameRight5\",\n\t\"PlayerStatFrameRight5Stat\",\n\t\"PlayerStatFrameRight6\",\n\t\"PlayerStatFrameRight6Stat\",\n\t\"PlayerStatFrameLeftDropDown\",\n\t\"PlayerStatFrameLeftDropDownButton\",\n\t\"PlayerStatFrameRightDropDown\",\n\t\"PlayerStatFrameRightDropDownButton\",\n\t\"CharacterResistanceFrame\",\n\t\"MagicResFrame1\",\n\t\"MagicResFrame2\",\n\t\"MagicResFrame3\",\n\t\"MagicResFrame4\",\n\t\"MagicResFrame5\",\n\t\"CharacterHeadSlot\",\n\t\"CharacterHeadSlotCooldown\",\n\t\"CharacterHeadSlotPopoutButton\",\n\t\"CharacterNeckSlot\",\n\t\"CharacterNeckSlotCooldown\",\n\t\"CharacterNeckSlotPopoutButton\",\n\t\"CharacterShoulderSlot\",\n\t\"CharacterShoulderSlotCooldown\",\n\t\"CharacterShoulderSlotPopoutButton\",\n\t\"CharacterBackSlot\",\n\t\"CharacterBackSlotCooldown\",\n\t\"CharacterBackSlotPopoutButton\",\n\t\"CharacterChestSlot\",\n\t\"CharacterChestSlotCooldown\",\n\t\"CharacterChestSlotPopoutButton\",\n\t\"CharacterShirtSlot\",\n\t\"CharacterShirtSlotCooldown\",\n\t\"CharacterShirtSlotPopoutButton\",\n\t\"CharacterTabardSlot\",\n\t\"CharacterTabardSlotCooldown\",\n\t\"CharacterTabardSlotPopoutButton\",\n\t\"CharacterWristSlot\",\n\t\"CharacterWristSlotCooldown\",\n\t\"CharacterWristSlotPopoutButton\",\n\t\"CharacterHandsSlot\",\n\t\"CharacterHandsSlotCooldown\",\n\t\"CharacterHandsSlotPopoutButton\",\n\t\"CharacterWaistSlot\",\n\t\"CharacterWaistSlotCooldown\",\n\t\"CharacterWaistSlotPopoutButton\",\n\t\"CharacterLegsSlot\",\n\t\"CharacterLegsSlotCooldown\",\n\t\"CharacterLegsSlotPopoutButton\",\n\t\"CharacterFeetSlot\",\n\t\"CharacterFeetSlotCooldown\",\n\t\"CharacterFeetSlotPopoutButton\",\n\t\"CharacterFinger0Slot\",\n\t\"CharacterFinger0SlotCooldown\",\n\t\"CharacterFinger0SlotPopoutButton\",\n\t\"CharacterFinger1Slot\",\n\t\"CharacterFinger1SlotCooldown\",\n\t\"CharacterFinger1SlotPopoutButton\",\n\t\"CharacterTrinket0Slot\",\n\t\"CharacterTrinket0SlotCooldown\",\n\t\"CharacterTrinket0SlotPopoutButton\",\n\t\"CharacterTrinket1Slot\",\n\t\"CharacterTrinket1SlotCooldown\",\n\t\"CharacterTrinket1SlotPopoutButton\",\n\t\"CharacterMainHandSlot\",\n\t\"CharacterMainHandSlotCooldown\",\n\t\"CharacterMainHandSlotPopoutButton\",\n\t\"CharacterSecondaryHandSlot\",\n\t\"CharacterSecondaryHandSlotCooldown\",\n\t\"CharacterSecondaryHandSlotPopoutButton\",\n\t\"CharacterRangedSlot\",\n\t\"CharacterRangedSlotCooldown\",\n\t\"CharacterRangedSlotPopoutButton\",\n\t\"CharacterAmmoSlot\",\n\t\"CharacterAmmoSlotCooldown\",\n\t\"GearManagerToggleButton\",\n\t\"PaperDollFrameItemFlyout\",\n\t\"PaperDollFrameItemFlyoutButtons\",\n\t\"GearManagerDialog\",\n\t\"GearManagerDialogClose\",\n\t\"SetContainer\",\n\t\"GearManagerDialogDeleteSet\",\n\t\"GearManagerDialogEquipSet\",\n\t\"GearManagerDialogSaveSet\",\n\t\"GearManagerDialogPopup\",\n\t\"GearManagerDialogPopupScrollFrame\",\n\t\"GearManagerDialogPopupScrollFrameScrollChildFrame\",\n\t\"GearManagerDialogPopupScrollFrameScrollBar\",\n\t\"GearManagerDialogPopupScrollFrameScrollBarScrollUpButton\",\n\t\"GearManagerDialogPopupScrollFrameScrollBarScrollDownButton\",\n\t\"GearManagerDialogPopupEditBox\",\n\t\"GearManagerDialogPopupCancel\",\n\t\"GearManagerDialogPopupOkay\",\n\t\"GearManagerDialogPopupButton1\",\n\t\"GearManagerDialogPopupButton2\",\n\t\"GearManagerDialogPopupButton3\",\n\t\"GearManagerDialogPopupButton4\",\n\t\"GearManagerDialogPopupButton5\",\n\t\"GearManagerDialogPopupButton6\",\n\t\"GearManagerDialogPopupButton7\",\n\t\"GearManagerDialogPopupButton8\",\n\t\"GearManagerDialogPopupButton9\",\n\t\"GearManagerDialogPopupButton10\",\n\t\"GearManagerDialogPopupButton11\",\n\t\"GearManagerDialogPopupButton12\",\n\t\"GearManagerDialogPopupButton13\",\n\t\"GearManagerDialogPopupButton14\",\n\t\"GearManagerDialogPopupButton15\",\n\t\"GearSetButton1\",\n\t\"GearSetButton2\",\n\t\"GearSetButton3\",\n\t\"GearSetButton4\",\n\t\"GearSetButton5\",\n\t\"GearSetButton6\",\n\t\"GearSetButton7\",\n\t\"GearSetButton8\",\n\t\"GearSetButton9\",\n\t\"GearSetButton10\",\n\t\"PetPaperDollFrame\",\n\t\"PetPaperDollFramePetFrame\",\n\t\"PetPaperDollFrameExpBar\",\n\t\"PetModelFrame\",\n\t\"PetModelFrameRotateLeftButton\",\n\t\"PetModelFrameRotateRightButton\",\n\t\"PetPaperDollPetInfo\",\n\t\"PetPaperDollCloseButton\",\n\t\"PetAttributesFrame\",\n\t\"PetStatFrame1\",\n\t\"PetStatFrame1Stat\",\n\t\"PetStatFrame2\",\n\t\"PetStatFrame2Stat\",\n\t\"PetStatFrame3\",\n\t\"PetStatFrame3Stat\",\n\t\"PetStatFrame4\",\n\t\"PetStatFrame4Stat\",\n\t\"PetStatFrame5\",\n\t\"PetStatFrame5Stat\",\n\t\"PetAttackPowerFrame\",\n\t\"PetAttackPowerFrameStat\",\n\t\"PetDamageFrame\",\n\t\"PetDamageFrameStat\",\n\t\"PetSpellDamageFrame\",\n\t\"PetSpellDamageFrameStat\",\n\t\"PetArmorFrame\",\n\t\"PetArmorFrameStat\",\n\t\"PetResistanceFrame\",\n\t\"PetMagicResFrame1\",\n\t\"PetMagicResFrame2\",\n\t\"PetMagicResFrame3\",\n\t\"PetMagicResFrame4\",\n\t\"PetMagicResFrame5\",\n\t\"PetPaperDollFrameCompanionFrame\",\n\t\"CompanionModelFrame\",\n\t\"CompanionModelFrameRotateLeftButton\",\n\t\"CompanionModelFrameRotateRightButton\",\n\t\"CompanionSummonButton\",\n\t\"CompanionButton1\",\n\t\"CompanionButton1Cooldown\",\n\t\"CompanionButton2\",\n\t\"CompanionButton2Cooldown\",\n\t\"CompanionButton3\",\n\t\"CompanionButton3Cooldown\",\n\t\"CompanionButton4\",\n\t\"CompanionButton4Cooldown\",\n\t\"CompanionButton5\",\n\t\"CompanionButton5Cooldown\",\n\t\"CompanionButton6\",\n\t\"CompanionButton6Cooldown\",\n\t\"CompanionButton7\",\n\t\"CompanionButton7Cooldown\",\n\t\"CompanionButton8\",\n\t\"CompanionButton8Cooldown\",\n\t\"CompanionButton9\",\n\t\"CompanionButton9Cooldown\",\n\t\"CompanionButton10\",\n\t\"CompanionButton10Cooldown\",\n\t\"CompanionButton11\",\n\t\"CompanionButton11Cooldown\",\n\t\"CompanionButton12\",\n\t\"CompanionButton12Cooldown\",\n\t\"CompanionPrevPageButton\",\n\t\"CompanionNextPageButton\",\n\t\"PetPaperDollFrameTab1\",\n\t\"PetPaperDollFrameTab2\",\n\t\"PetPaperDollFrameTab3\",\n\t\"SkillFrame\",\n\t\"SkillFrameExpandButtonFrame\",\n\t\"SkillFrameCollapseAllButton\",\n\t\"SkillFrameCancelButton\",\n\t\"SkillTypeLabel1\",\n\t\"SkillTypeLabel2\",\n\t\"SkillTypeLabel3\",\n\t\"SkillTypeLabel4\",\n\t\"SkillTypeLabel5\",\n\t\"SkillTypeLabel6\",\n\t\"SkillTypeLabel7\",\n\t\"SkillTypeLabel8\",\n\t\"SkillTypeLabel9\",\n\t\"SkillTypeLabel10\",\n\t\"SkillTypeLabel11\",\n\t\"SkillTypeLabel12\",\n\t\"SkillListScrollFrame\",\n\t\"SkillListScrollFrameScrollChildFrame\",\n\t\"SkillListScrollFrameScrollBar\",\n\t\"SkillListScrollFrameScrollBarScrollUpButton\",\n\t\"SkillListScrollFrameScrollBarScrollDownButton\",\n\t\"SkillDetailScrollFrame\",\n\t\"SkillDetailScrollChildFrame\",\n\t\"SkillDetailStatusBar\",\n\t\"SkillDetailStatusBarLearnSkillButton\",\n\t\"SkillDetailStatusBarLeftArrow\",\n\t\"SkillDetailStatusBarRightArrow\",\n\t\"SkillDetailStatusBarUnlearnButton\",\n\t\"SkillDetailScrollFrameScrollBar\",\n\t\"SkillDetailScrollFrameScrollBarScrollUpButton\",\n\t\"SkillDetailScrollFrameScrollBarScrollDownButton\",\n\t\"SkillRankFrame1\",\n\t\"SkillRankFrame1Border\",\n\t\"SkillRankFrame2\",\n\t\"SkillRankFrame2Border\",\n\t\"SkillRankFrame3\",\n\t\"SkillRankFrame3Border\",\n\t\"SkillRankFrame4\",\n\t\"SkillRankFrame4Border\",\n\t\"SkillRankFrame5\",\n\t\"SkillRankFrame5Border\",\n\t\"SkillRankFrame6\",\n\t\"SkillRankFrame6Border\",\n\t\"SkillRankFrame7\",\n\t\"SkillRankFrame7Border\",\n\t\"SkillRankFrame8\",\n\t\"SkillRankFrame8Border\",\n\t\"SkillRankFrame9\",\n\t\"SkillRankFrame9Border\",\n\t\"SkillRankFrame10\",\n\t\"SkillRankFrame10Border\",\n\t\"SkillRankFrame11\",\n\t\"SkillRankFrame11Border\",\n\t\"SkillRankFrame12\",\n\t\"SkillRankFrame12Border\",\n\t\"ReputationFrame\",\n\t\"ReputationBar1\",\n\t\"ReputationBar1ExpandOrCollapseButton\",\n\t\"ReputationBar1ReputationBar\",\n\t\"ReputationBar2\",\n\t\"ReputationBar2ExpandOrCollapseButton\",\n\t\"ReputationBar2ReputationBar\",\n\t\"ReputationBar3\",\n\t\"ReputationBar3ExpandOrCollapseButton\",\n\t\"ReputationBar3ReputationBar\",\n\t\"ReputationBar4\",\n\t\"ReputationBar4ExpandOrCollapseButton\",\n\t\"ReputationBar4ReputationBar\",\n\t\"ReputationBar5\",\n\t\"ReputationBar5ExpandOrCollapseButton\",\n\t\"ReputationBar5ReputationBar\",\n\t\"ReputationBar6\",\n\t\"ReputationBar6ExpandOrCollapseButton\",\n\t\"ReputationBar6ReputationBar\",\n\t\"ReputationBar7\",\n\t\"ReputationBar7ExpandOrCollapseButton\",\n\t\"ReputationBar7ReputationBar\",\n\t\"ReputationBar8\",\n\t\"ReputationBar8ExpandOrCollapseButton\",\n\t\"ReputationBar8ReputationBar\",\n\t\"ReputationBar9\",\n\t\"ReputationBar9ExpandOrCollapseButton\",\n\t\"ReputationBar9ReputationBar\",\n\t\"ReputationBar10\",\n\t\"ReputationBar10ExpandOrCollapseButton\",\n\t\"ReputationBar10ReputationBar\",\n\t\"ReputationBar11\",\n\t\"ReputationBar11ExpandOrCollapseButton\",\n\t\"ReputationBar11ReputationBar\",\n\t\"ReputationBar12\",\n\t\"ReputationBar12ExpandOrCollapseButton\",\n\t\"ReputationBar12ReputationBar\",\n\t\"ReputationBar13\",\n\t\"ReputationBar13ExpandOrCollapseButton\",\n\t\"ReputationBar13ReputationBar\",\n\t\"ReputationBar14\",\n\t\"ReputationBar14ExpandOrCollapseButton\",\n\t\"ReputationBar14ReputationBar\",\n\t\"ReputationBar15\",\n\t\"ReputationBar15ExpandOrCollapseButton\",\n\t\"ReputationBar15ReputationBar\",\n\t\"ReputationListScrollFrame\",\n\t\"ReputationListScrollFrameScrollChildFrame\",\n\t\"ReputationListScrollFrameScrollBar\",\n\t\"ReputationListScrollFrameScrollBarScrollUpButton\",\n\t\"ReputationListScrollFrameScrollBarScrollDownButton\",\n\t\"FactionMouseOver\",\n\t\"StandingMouseOver\",\n\t\"ReputationDetailFrame\",\n\t\"ReputationDetailCloseButton\",\n\t\"ReputationDetailAtWarCheckBox\",\n\t\"ReputationDetailInactiveCheckBox\",\n\t\"ReputationDetailMainScreenCheckBox\",\n\t\"ReputationWatchBar\",\n\t\"ReputationWatchStatusBar\",\n\t\"ReputationWatchBarOverlayFrame\",\n\t\"HonorFrame\",\n\t\"HonorFrameCurrentHK\",\n\t\"HonorFrameCurrentDK\",\n\t\"HonorFrameYesterdayHK\",\n\t\"HonorFrameYesterdayContribution\",\n\t\"HonorFrameThisWeekHK\",\n\t\"HonorFrameThisWeekContribution\",\n\t\"HonorFrameLastWeekHK\",\n\t\"HonorFrameLastWeekContribution\",\n\t\"HonorFrameLastWeekStanding\",\n\t\"HonorFrameLifeTimeHK\",\n\t\"HonorFrameLifeTimeDK\",\n\t\"HonorFrameLifeTimeRank\",\n\t\"HonorFrameRankButton\",\n\t\"HonorFrameProgressBar\",\n\t\"HonorFrameProgressButton\",\n\t\"QuestFrame\",\n\t\"QuestNpcNameFrame\",\n\t\"QuestFrameCloseButton\",\n\t\"QuestFrameRewardPanel\",\n\t\"QuestFrameCancelButton\",\n\t\"QuestFrameCompleteQuestButton\",\n\t\"QuestRewardScrollFrame\",\n\t\"QuestRewardScrollChildFrame\",\n\t\"QuestRewardScrollFrameScrollBar\",\n\t\"QuestRewardScrollFrameScrollBarScrollUpButton\",\n\t\"QuestRewardScrollFrameScrollBarScrollDownButton\",\n\t\"QuestFrameProgressPanel\",\n\t\"QuestFrameGoodbyeButton\",\n\t\"QuestFrameCompleteButton\",\n\t\"QuestProgressScrollFrame\",\n\t\"QuestProgressScrollChildFrame\",\n\t\"QuestProgressRequiredMoneyFrame\",\n\t\"QuestProgressRequiredMoneyFrameCopperButton\",\n\t\"QuestProgressRequiredMoneyFrameSilverButton\",\n\t\"QuestProgressRequiredMoneyFrameGoldButton\",\n\t\"QuestProgressItem1\",\n\t\"QuestProgressItem2\",\n\t\"QuestProgressItem3\",\n\t\"QuestProgressItem4\",\n\t\"QuestProgressItem5\",\n\t\"QuestProgressItem6\",\n\t\"QuestProgressScrollFrameScrollBar\",\n\t\"QuestProgressScrollFrameScrollBarScrollUpButton\",\n\t\"QuestProgressScrollFrameScrollBarScrollDownButton\",\n\t\"QuestFrameDetailPanel\",\n\t\"QuestFrameDeclineButton\",\n\t\"QuestFrameAcceptButton\",\n\t\"QuestDetailScrollFrame\",\n\t\"QuestDetailScrollChildFrame\",\n\t\"QuestDetailScrollFrameScrollBar\",\n\t\"QuestDetailScrollFrameScrollBarScrollUpButton\",\n\t\"QuestDetailScrollFrameScrollBarScrollDownButton\",\n\t\"QuestFrameGreetingPanel\",\n\t\"QuestFrameGreetingGoodbyeButton\",\n\t\"QuestGreetingScrollFrame\",\n\t\"QuestGreetingScrollChildFrame\",\n\t\"QuestTitleButton1\",\n\t\"QuestTitleButton2\",\n\t\"QuestTitleButton3\",\n\t\"QuestTitleButton4\",\n\t\"QuestTitleButton5\",\n\t\"QuestTitleButton6\",\n\t\"QuestTitleButton7\",\n\t\"QuestTitleButton8\",\n\t\"QuestTitleButton9\",\n\t\"QuestTitleButton10\",\n\t\"QuestTitleButton11\",\n\t\"QuestTitleButton12\",\n\t\"QuestTitleButton13\",\n\t\"QuestTitleButton14\",\n\t\"QuestTitleButton15\",\n\t\"QuestTitleButton16\",\n\t\"QuestTitleButton17\",\n\t\"QuestTitleButton18\",\n\t\"QuestTitleButton19\",\n\t\"QuestTitleButton20\",\n\t\"QuestTitleButton21\",\n\t\"QuestTitleButton22\",\n\t\"QuestTitleButton23\",\n\t\"QuestTitleButton24\",\n\t\"QuestTitleButton25\",\n\t\"QuestTitleButton26\",\n\t\"QuestTitleButton27\",\n\t\"QuestTitleButton28\",\n\t\"QuestTitleButton29\",\n\t\"QuestTitleButton30\",\n\t\"QuestTitleButton31\",\n\t\"QuestTitleButton32\",\n\t\"QuestGreetingScrollFrameScrollBar\",\n\t\"QuestGreetingScrollFrameScrollBarScrollUpButton\",\n\t\"QuestGreetingScrollFrameScrollBarScrollDownButton\",\n\t\"WatchFrame\",\n\t\"WatchFrameHeader\",\n\t\"WatchFrameCollapseExpandButton\",\n\t\"WatchFrameLines\",\n\t\"WatchFrameLine1\",\n\t\"WatchFrameHeaderDropDown\",\n\t\"WatchFrameHeaderDropDownButton\",\n\t\"WatchFrameDropDown\",\n\t\"WatchFrameDropDownButton\",\n\t\"QuestLogControlPanel\",\n\t\"QuestLogFrameAbandonButton\",\n\t\"QuestLogFrameTrackButton\",\n\t\"QuestLogFramePushQuestButton\",\n\t\"QuestLogDetailFrame\",\n\t\"QuestLogDetailFrameCloseButton\",\n\t\"QuestLogDetailScrollFrame\",\n\t\"QuestLogDetailScrollChildFrame\",\n\t\"QuestLogDetailScrollFrameScrollBar\",\n\t\"QuestLogDetailScrollFrameScrollBarScrollUpButton\",\n\t\"QuestLogDetailScrollFrameScrollBarScrollDownButton\",\n\t\"QuestLogMapFrame\",\n\t\"QuestLogFrame\",\n\t\"QuestLogFrameCloseButton\",\n\t\"QuestLogFrameCancelButton\",\n\t\"QuestLogFrameShowMapButton\",\n\t\"EmptyQuestLogFrame\",\n\t\"QuestLogCount\",\n\t\"QuestLogDailyQuestCountMouseOverFrame\",\n\t\"QuestLogScrollFrame\",\n\t\"QuestLogScrollFrameScrollChild\",\n\t\"QuestLogScrollFrameScrollBar\",\n\t\"QuestLogScrollFrameScrollBarScrollUpButton\",\n\t\"QuestLogScrollFrameScrollBarScrollDownButton\",\n\t\"QuestLogHighlightFrame\",\n\t\"QuestLogScrollFrameButton1\",\n\t\"QuestLogScrollFrameButton2\",\n\t\"QuestLogScrollFrameButton3\",\n\t\"QuestLogScrollFrameButton4\",\n\t\"QuestLogScrollFrameButton5\",\n\t\"QuestLogScrollFrameButton6\",\n\t\"QuestLogScrollFrameButton7\",\n\t\"QuestLogScrollFrameButton8\",\n\t\"QuestLogScrollFrameButton9\",\n\t\"QuestLogScrollFrameButton10\",\n\t\"QuestLogScrollFrameButton11\",\n\t\"QuestLogScrollFrameButton12\",\n\t\"QuestLogScrollFrameButton13\",\n\t\"QuestLogScrollFrameButton14\",\n\t\"QuestLogScrollFrameButton15\",\n\t\"QuestLogScrollFrameButton16\",\n\t\"QuestLogScrollFrameButton17\",\n\t\"QuestLogScrollFrameButton18\",\n\t\"QuestLogScrollFrameButton19\",\n\t\"QuestLogScrollFrameButton20\",\n\t\"QuestLogScrollFrameButton21\",\n\t\"QuestLogScrollFrameButton22\",\n\t\"QuestInfoObjectivesFrame\",\n\t\"QuestInfoTimerFrame\",\n\t\"QuestInfoRequiredMoneyFrame\",\n\t\"QuestInfoRequiredMoneyDisplay\",\n\t\"QuestInfoRequiredMoneyDisplayCopperButton\",\n\t\"QuestInfoRequiredMoneyDisplaySilverButton\",\n\t\"QuestInfoRequiredMoneyDisplayGoldButton\",\n\t\"QuestInfoFrame\",\n\t\"QuestInfoFadingFrame\",\n\t\"QuestInfoSpacerFrame\",\n\t\"QuestInfoRewardsFrame\",\n\t\"QuestInfoItem1\",\n\t\"QuestInfoItem2\",\n\t\"QuestInfoItem3\",\n\t\"QuestInfoItem4\",\n\t\"QuestInfoItem5\",\n\t\"QuestInfoItem6\",\n\t\"QuestInfoItem7\",\n\t\"QuestInfoItem8\",\n\t\"QuestInfoItem9\",\n\t\"QuestInfoItem10\",\n\t\"QuestInfoMoneyFrame\",\n\t\"QuestInfoMoneyFrameCopperButton\",\n\t\"QuestInfoMoneyFrameSilverButton\",\n\t\"QuestInfoMoneyFrameGoldButton\",\n\t\"QuestInfoHonorFrame\",\n\t\"QuestInfoArenaPointsFrame\",\n\t\"QuestInfoTalentFrame\",\n\t\"QuestInfoXPFrame\",\n\t\"QuestInfoPlayerTitleFrame\",\n\t\"QuestInfoItemHighlight\",\n\t\"QuestInfoReputationsFrame\",\n\t\"QuestInfoReputation1\",\n\t\"QuestInfoReputation2\",\n\t\"QuestInfoReputation3\",\n\t\"QuestInfoReputation4\",\n\t\"QuestInfoReputation5\",\n\t\"QuestInfoReputation6\",\n\t\"QuestInfoReputation7\",\n\t\"QuestInfoReputation8\",\n\t\"QuestInfoReputation9\",\n\t\"QuestInfoReputation10\",\n\t\"MerchantFrame\",\n\t\"MerchantItem1\",\n\t\"MerchantItem1ItemButton\",\n\t\"MerchantItem1MoneyFrame\",\n\t\"MerchantItem1MoneyFrameCopperButton\",\n\t\"MerchantItem1MoneyFrameSilverButton\",\n\t\"MerchantItem1MoneyFrameGoldButton\",\n\t\"MerchantItem1AltCurrencyFrame\",\n\t\"MerchantItem1AltCurrencyFrameHonor\",\n\t\"MerchantItem1AltCurrencyFrameArena\",\n\t\"MerchantItem1AltCurrencyFrameItem1\",\n\t\"MerchantItem1AltCurrencyFrameItem2\",\n\t\"MerchantItem1AltCurrencyFrameItem3\",\n\t\"MerchantItem2\",\n\t\"MerchantItem2ItemButton\",\n\t\"MerchantItem2MoneyFrame\",\n\t\"MerchantItem2MoneyFrameCopperButton\",\n\t\"MerchantItem2MoneyFrameSilverButton\",\n\t\"MerchantItem2MoneyFrameGoldButton\",\n\t\"MerchantItem2AltCurrencyFrame\",\n\t\"MerchantItem2AltCurrencyFrameHonor\",\n\t\"MerchantItem2AltCurrencyFrameArena\",\n\t\"MerchantItem2AltCurrencyFrameItem1\",\n\t\"MerchantItem2AltCurrencyFrameItem2\",\n\t\"MerchantItem2AltCurrencyFrameItem3\",\n\t\"MerchantItem3\",\n\t\"MerchantItem3ItemButton\",\n\t\"MerchantItem3MoneyFrame\",\n\t\"MerchantItem3MoneyFrameCopperButton\",\n\t\"MerchantItem3MoneyFrameSilverButton\",\n\t\"MerchantItem3MoneyFrameGoldButton\",\n\t\"MerchantItem3AltCurrencyFrame\",\n\t\"MerchantItem3AltCurrencyFrameHonor\",\n\t\"MerchantItem3AltCurrencyFrameArena\",\n\t\"MerchantItem3AltCurrencyFrameItem1\",\n\t\"MerchantItem3AltCurrencyFrameItem2\",\n\t\"MerchantItem3AltCurrencyFrameItem3\",\n\t\"MerchantItem4\",\n\t\"MerchantItem4ItemButton\",\n\t\"MerchantItem4MoneyFrame\",\n\t\"MerchantItem4MoneyFrameCopperButton\",\n\t\"MerchantItem4MoneyFrameSilverButton\",\n\t\"MerchantItem4MoneyFrameGoldButton\",\n\t\"MerchantItem4AltCurrencyFrame\",\n\t\"MerchantItem4AltCurrencyFrameHonor\",\n\t\"MerchantItem4AltCurrencyFrameArena\",\n\t\"MerchantItem4AltCurrencyFrameItem1\",\n\t\"MerchantItem4AltCurrencyFrameItem2\",\n\t\"MerchantItem4AltCurrencyFrameItem3\",\n\t\"MerchantItem5\",\n\t\"MerchantItem5ItemButton\",\n\t\"MerchantItem5MoneyFrame\",\n\t\"MerchantItem5MoneyFrameCopperButton\",\n\t\"MerchantItem5MoneyFrameSilverButton\",\n\t\"MerchantItem5MoneyFrameGoldButton\",\n\t\"MerchantItem5AltCurrencyFrame\",\n\t\"MerchantItem5AltCurrencyFrameHonor\",\n\t\"MerchantItem5AltCurrencyFrameArena\",\n\t\"MerchantItem5AltCurrencyFrameItem1\",\n\t\"MerchantItem5AltCurrencyFrameItem2\",\n\t\"MerchantItem5AltCurrencyFrameItem3\",\n\t\"MerchantItem6\",\n\t\"MerchantItem6ItemButton\",\n\t\"MerchantItem6MoneyFrame\",\n\t\"MerchantItem6MoneyFrameCopperButton\",\n\t\"MerchantItem6MoneyFrameSilverButton\",\n\t\"MerchantItem6MoneyFrameGoldButton\",\n\t\"MerchantItem6AltCurrencyFrame\",\n\t\"MerchantItem6AltCurrencyFrameHonor\",\n\t\"MerchantItem6AltCurrencyFrameArena\",\n\t\"MerchantItem6AltCurrencyFrameItem1\",\n\t\"MerchantItem6AltCurrencyFrameItem2\",\n\t\"MerchantItem6AltCurrencyFrameItem3\",\n\t\"MerchantItem7\",\n\t\"MerchantItem7ItemButton\",\n\t\"MerchantItem7MoneyFrame\",\n\t\"MerchantItem7MoneyFrameCopperButton\",\n\t\"MerchantItem7MoneyFrameSilverButton\",\n\t\"MerchantItem7MoneyFrameGoldButton\",\n\t\"MerchantItem7AltCurrencyFrame\",\n\t\"MerchantItem7AltCurrencyFrameHonor\",\n\t\"MerchantItem7AltCurrencyFrameArena\",\n\t\"MerchantItem7AltCurrencyFrameItem1\",\n\t\"MerchantItem7AltCurrencyFrameItem2\",\n\t\"MerchantItem7AltCurrencyFrameItem3\",\n\t\"MerchantItem8\",\n\t\"MerchantItem8ItemButton\",\n\t\"MerchantItem8MoneyFrame\",\n\t\"MerchantItem8MoneyFrameCopperButton\",\n\t\"MerchantItem8MoneyFrameSilverButton\",\n\t\"MerchantItem8MoneyFrameGoldButton\",\n\t\"MerchantItem8AltCurrencyFrame\",\n\t\"MerchantItem8AltCurrencyFrameHonor\",\n\t\"MerchantItem8AltCurrencyFrameArena\",\n\t\"MerchantItem8AltCurrencyFrameItem1\",\n\t\"MerchantItem8AltCurrencyFrameItem2\",\n\t\"MerchantItem8AltCurrencyFrameItem3\",\n\t\"MerchantItem9\",\n\t\"MerchantItem9ItemButton\",\n\t\"MerchantItem9MoneyFrame\",\n\t\"MerchantItem9MoneyFrameCopperButton\",\n\t\"MerchantItem9MoneyFrameSilverButton\",\n\t\"MerchantItem9MoneyFrameGoldButton\",\n\t\"MerchantItem9AltCurrencyFrame\",\n\t\"MerchantItem9AltCurrencyFrameHonor\",\n\t\"MerchantItem9AltCurrencyFrameArena\",\n\t\"MerchantItem9AltCurrencyFrameItem1\",\n\t\"MerchantItem9AltCurrencyFrameItem2\",\n\t\"MerchantItem9AltCurrencyFrameItem3\",\n\t\"MerchantItem10\",\n\t\"MerchantItem10ItemButton\",\n\t\"MerchantItem10MoneyFrame\",\n\t\"MerchantItem10MoneyFrameCopperButton\",\n\t\"MerchantItem10MoneyFrameSilverButton\",\n\t\"MerchantItem10MoneyFrameGoldButton\",\n\t\"MerchantItem10AltCurrencyFrame\",\n\t\"MerchantItem10AltCurrencyFrameHonor\",\n\t\"MerchantItem10AltCurrencyFrameArena\",\n\t\"MerchantItem10AltCurrencyFrameItem1\",\n\t\"MerchantItem10AltCurrencyFrameItem2\",\n\t\"MerchantItem10AltCurrencyFrameItem3\",\n\t\"MerchantItem11\",\n\t\"MerchantItem11ItemButton\",\n\t\"MerchantItem11MoneyFrame\",\n\t\"MerchantItem11MoneyFrameCopperButton\",\n\t\"MerchantItem11MoneyFrameSilverButton\",\n\t\"MerchantItem11MoneyFrameGoldButton\",\n\t\"MerchantItem11AltCurrencyFrame\",\n\t\"MerchantItem11AltCurrencyFrameHonor\",\n\t\"MerchantItem11AltCurrencyFrameArena\",\n\t\"MerchantItem11AltCurrencyFrameItem1\",\n\t\"MerchantItem11AltCurrencyFrameItem2\",\n\t\"MerchantItem11AltCurrencyFrameItem3\",\n\t\"MerchantItem12\",\n\t\"MerchantItem12ItemButton\",\n\t\"MerchantItem12MoneyFrame\",\n\t\"MerchantItem12MoneyFrameCopperButton\",\n\t\"MerchantItem12MoneyFrameSilverButton\",\n\t\"MerchantItem12MoneyFrameGoldButton\",\n\t\"MerchantItem12AltCurrencyFrame\",\n\t\"MerchantItem12AltCurrencyFrameHonor\",\n\t\"MerchantItem12AltCurrencyFrameArena\",\n\t\"MerchantItem12AltCurrencyFrameItem1\",\n\t\"MerchantItem12AltCurrencyFrameItem2\",\n\t\"MerchantItem12AltCurrencyFrameItem3\",\n\t\"MerchantRepairAllButton\",\n\t\"MerchantRepairItemButton\",\n\t\"MerchantGuildBankRepairButton\",\n\t\"MerchantBuyBackItem\",\n\t\"MerchantBuyBackItemItemButton\",\n\t\"MerchantBuyBackItemMoneyFrame\",\n\t\"MerchantBuyBackItemMoneyFrameCopperButton\",\n\t\"MerchantBuyBackItemMoneyFrameSilverButton\",\n\t\"MerchantBuyBackItemMoneyFrameGoldButton\",\n\t\"MerchantMoneyFrame\",\n\t\"MerchantMoneyFrameCopperButton\",\n\t\"MerchantMoneyFrameSilverButton\",\n\t\"MerchantMoneyFrameGoldButton\",\n\t\"MerchantPrevPageButton\",\n\t\"MerchantNextPageButton\",\n\t\"MerchantFrameCloseButton\",\n\t\"MerchantFrameTab1\",\n\t\"MerchantFrameTab2\",\n\t\"TradeFrame\",\n\t\"TradeHighlightPlayer\",\n\t\"TradeHighlightRecipient\",\n\t\"TradeHighlightPlayerEnchant\",\n\t\"TradeHighlightRecipientEnchant\",\n\t\"TradeRecipientItem1\",\n\t\"TradeRecipientItem1ItemButton\",\n\t\"TradeRecipientItem2\",\n\t\"TradeRecipientItem2ItemButton\",\n\t\"TradeRecipientItem3\",\n\t\"TradeRecipientItem3ItemButton\",\n\t\"TradeRecipientItem4\",\n\t\"TradeRecipientItem4ItemButton\",\n\t\"TradeRecipientItem5\",\n\t\"TradeRecipientItem5ItemButton\",\n\t\"TradeRecipientItem6\",\n\t\"TradeRecipientItem6ItemButton\",\n\t\"TradeRecipientItem7\",\n\t\"TradeRecipientItem7ItemButton\",\n\t\"TradePlayerItem1\",\n\t\"TradePlayerItem1ItemButton\",\n\t\"TradePlayerItem2\",\n\t\"TradePlayerItem2ItemButton\",\n\t\"TradePlayerItem3\",\n\t\"TradePlayerItem3ItemButton\",\n\t\"TradePlayerItem4\",\n\t\"TradePlayerItem4ItemButton\",\n\t\"TradePlayerItem5\",\n\t\"TradePlayerItem5ItemButton\",\n\t\"TradePlayerItem6\",\n\t\"TradePlayerItem6ItemButton\",\n\t\"TradePlayerItem7\",\n\t\"TradePlayerItem7ItemButton\",\n\t\"TradeFrameTradeButton\",\n\t\"TradeFrameCancelButton\",\n\t\"TradeFrameCloseButton\",\n\t\"TradePlayerInputMoneyFrame\",\n\t\"TradePlayerInputMoneyFrameGold\",\n\t\"TradePlayerInputMoneyFrameSilver\",\n\t\"TradePlayerInputMoneyFrameCopper\",\n\t\"TradeRecipientMoneyFrame\",\n\t\"TradeRecipientMoneyFrameCopperButton\",\n\t\"TradeRecipientMoneyFrameSilverButton\",\n\t\"TradeRecipientMoneyFrameGoldButton\",\n\t\"ContainerFrame1\",\n\t\"ContainerFrame1MoneyFrame\",\n\t\"ContainerFrame1MoneyFrameCopperButton\",\n\t\"ContainerFrame1MoneyFrameSilverButton\",\n\t\"ContainerFrame1MoneyFrameGoldButton\",\n\t\"ContainerFrame1Item1\",\n\t\"ContainerFrame1Item1Cooldown\",\n\t\"ContainerFrame1Item2\",\n\t\"ContainerFrame1Item2Cooldown\",\n\t\"ContainerFrame1Item3\",\n\t\"ContainerFrame1Item3Cooldown\",\n\t\"ContainerFrame1Item4\",\n\t\"ContainerFrame1Item4Cooldown\",\n\t\"ContainerFrame1Item5\",\n\t\"ContainerFrame1Item5Cooldown\",\n\t\"ContainerFrame1Item6\",\n\t\"ContainerFrame1Item6Cooldown\",\n\t\"ContainerFrame1Item7\",\n\t\"ContainerFrame1Item7Cooldown\",\n\t\"ContainerFrame1Item8\",\n\t\"ContainerFrame1Item8Cooldown\",\n\t\"ContainerFrame1Item9\",\n\t\"ContainerFrame1Item9Cooldown\",\n\t\"ContainerFrame1Item10\",\n\t\"ContainerFrame1Item10Cooldown\",\n\t\"ContainerFrame1Item11\",\n\t\"ContainerFrame1Item11Cooldown\",\n\t\"ContainerFrame1Item12\",\n\t\"ContainerFrame1Item12Cooldown\",\n\t\"ContainerFrame1Item13\",\n\t\"ContainerFrame1Item13Cooldown\",\n\t\"ContainerFrame1Item14\",\n\t\"ContainerFrame1Item14Cooldown\",\n\t\"ContainerFrame1Item15\",\n\t\"ContainerFrame1Item15Cooldown\",\n\t\"ContainerFrame1Item16\",\n\t\"ContainerFrame1Item16Cooldown\",\n\t\"ContainerFrame1Item17\",\n\t\"ContainerFrame1Item17Cooldown\",\n\t\"ContainerFrame1Item18\",\n\t\"ContainerFrame1Item18Cooldown\",\n\t\"ContainerFrame1Item19\",\n\t\"ContainerFrame1Item19Cooldown\",\n\t\"ContainerFrame1Item20\",\n\t\"ContainerFrame1Item20Cooldown\",\n\t\"ContainerFrame1Item21\",\n\t\"ContainerFrame1Item21Cooldown\",\n\t\"ContainerFrame1Item22\",\n\t\"ContainerFrame1Item22Cooldown\",\n\t\"ContainerFrame1Item23\",\n\t\"ContainerFrame1Item23Cooldown\",\n\t\"ContainerFrame1Item24\",\n\t\"ContainerFrame1Item24Cooldown\",\n\t\"ContainerFrame1Item25\",\n\t\"ContainerFrame1Item25Cooldown\",\n\t\"ContainerFrame1Item26\",\n\t\"ContainerFrame1Item26Cooldown\",\n\t\"ContainerFrame1Item27\",\n\t\"ContainerFrame1Item27Cooldown\",\n\t\"ContainerFrame1Item28\",\n\t\"ContainerFrame1Item28Cooldown\",\n\t\"ContainerFrame1Item29\",\n\t\"ContainerFrame1Item29Cooldown\",\n\t\"ContainerFrame1Item30\",\n\t\"ContainerFrame1Item30Cooldown\",\n\t\"ContainerFrame1Item31\",\n\t\"ContainerFrame1Item31Cooldown\",\n\t\"ContainerFrame1Item32\",\n\t\"ContainerFrame1Item32Cooldown\",\n\t\"ContainerFrame1Item33\",\n\t\"ContainerFrame1Item33Cooldown\",\n\t\"ContainerFrame1Item34\",\n\t\"ContainerFrame1Item34Cooldown\",\n\t\"ContainerFrame1Item35\",\n\t\"ContainerFrame1Item35Cooldown\",\n\t\"ContainerFrame1Item36\",\n\t\"ContainerFrame1Item36Cooldown\",\n\t\"ContainerFrame1PortraitButton\",\n\t\"ContainerFrame1CloseButton\",\n\t\"ContainerFrame2\",\n\t\"ContainerFrame2MoneyFrame\",\n\t\"ContainerFrame2MoneyFrameCopperButton\",\n\t\"ContainerFrame2MoneyFrameSilverButton\",\n\t\"ContainerFrame2MoneyFrameGoldButton\",\n\t\"ContainerFrame2Item1\",\n\t\"ContainerFrame2Item1Cooldown\",\n\t\"ContainerFrame2Item2\",\n\t\"ContainerFrame2Item2Cooldown\",\n\t\"ContainerFrame2Item3\",\n\t\"ContainerFrame2Item3Cooldown\",\n\t\"ContainerFrame2Item4\",\n\t\"ContainerFrame2Item4Cooldown\",\n\t\"ContainerFrame2Item5\",\n\t\"ContainerFrame2Item5Cooldown\",\n\t\"ContainerFrame2Item6\",\n\t\"ContainerFrame2Item6Cooldown\",\n\t\"ContainerFrame2Item7\",\n\t\"ContainerFrame2Item7Cooldown\",\n\t\"ContainerFrame2Item8\",\n\t\"ContainerFrame2Item8Cooldown\",\n\t\"ContainerFrame2Item9\",\n\t\"ContainerFrame2Item9Cooldown\",\n\t\"ContainerFrame2Item10\",\n\t\"ContainerFrame2Item10Cooldown\",\n\t\"ContainerFrame2Item11\",\n\t\"ContainerFrame2Item11Cooldown\",\n\t\"ContainerFrame2Item12\",\n\t\"ContainerFrame2Item12Cooldown\",\n\t\"ContainerFrame2Item13\",\n\t\"ContainerFrame2Item13Cooldown\",\n\t\"ContainerFrame2Item14\",\n\t\"ContainerFrame2Item14Cooldown\",\n\t\"ContainerFrame2Item15\",\n\t\"ContainerFrame2Item15Cooldown\",\n\t\"ContainerFrame2Item16\",\n\t\"ContainerFrame2Item16Cooldown\",\n\t\"ContainerFrame2Item17\",\n\t\"ContainerFrame2Item17Cooldown\",\n\t\"ContainerFrame2Item18\",\n\t\"ContainerFrame2Item18Cooldown\",\n\t\"ContainerFrame2Item19\",\n\t\"ContainerFrame2Item19Cooldown\",\n\t\"ContainerFrame2Item20\",\n\t\"ContainerFrame2Item20Cooldown\",\n\t\"ContainerFrame2Item21\",\n\t\"ContainerFrame2Item21Cooldown\",\n\t\"ContainerFrame2Item22\",\n\t\"ContainerFrame2Item22Cooldown\",\n\t\"ContainerFrame2Item23\",\n\t\"ContainerFrame2Item23Cooldown\",\n\t\"ContainerFrame2Item24\",\n\t\"ContainerFrame2Item24Cooldown\",\n\t\"ContainerFrame2Item25\",\n\t\"ContainerFrame2Item25Cooldown\",\n\t\"ContainerFrame2Item26\",\n\t\"ContainerFrame2Item26Cooldown\",\n\t\"ContainerFrame2Item27\",\n\t\"ContainerFrame2Item27Cooldown\",\n\t\"ContainerFrame2Item28\",\n\t\"ContainerFrame2Item28Cooldown\",\n\t\"ContainerFrame2Item29\",\n\t\"ContainerFrame2Item29Cooldown\",\n\t\"ContainerFrame2Item30\",\n\t\"ContainerFrame2Item30Cooldown\",\n\t\"ContainerFrame2Item31\",\n\t\"ContainerFrame2Item31Cooldown\",\n\t\"ContainerFrame2Item32\",\n\t\"ContainerFrame2Item32Cooldown\",\n\t\"ContainerFrame2Item33\",\n\t\"ContainerFrame2Item33Cooldown\",\n\t\"ContainerFrame2Item34\",\n\t\"ContainerFrame2Item34Cooldown\",\n\t\"ContainerFrame2Item35\",\n\t\"ContainerFrame2Item35Cooldown\",\n\t\"ContainerFrame2Item36\",\n\t\"ContainerFrame2Item36Cooldown\",\n\t\"ContainerFrame2PortraitButton\",\n\t\"ContainerFrame2CloseButton\",\n\t\"ContainerFrame3\",\n\t\"ContainerFrame3MoneyFrame\",\n\t\"ContainerFrame3MoneyFrameCopperButton\",\n\t\"ContainerFrame3MoneyFrameSilverButton\",\n\t\"ContainerFrame3MoneyFrameGoldButton\",\n\t\"ContainerFrame3Item1\",\n\t\"ContainerFrame3Item1Cooldown\",\n\t\"ContainerFrame3Item2\",\n\t\"ContainerFrame3Item2Cooldown\",\n\t\"ContainerFrame3Item3\",\n\t\"ContainerFrame3Item3Cooldown\",\n\t\"ContainerFrame3Item4\",\n\t\"ContainerFrame3Item4Cooldown\",\n\t\"ContainerFrame3Item5\",\n\t\"ContainerFrame3Item5Cooldown\",\n\t\"ContainerFrame3Item6\",\n\t\"ContainerFrame3Item6Cooldown\",\n\t\"ContainerFrame3Item7\",\n\t\"ContainerFrame3Item7Cooldown\",\n\t\"ContainerFrame3Item8\",\n\t\"ContainerFrame3Item8Cooldown\",\n\t\"ContainerFrame3Item9\",\n\t\"ContainerFrame3Item9Cooldown\",\n\t\"ContainerFrame3Item10\",\n\t\"ContainerFrame3Item10Cooldown\",\n\t\"ContainerFrame3Item11\",\n\t\"ContainerFrame3Item11Cooldown\",\n\t\"ContainerFrame3Item12\",\n\t\"ContainerFrame3Item12Cooldown\",\n\t\"ContainerFrame3Item13\",\n\t\"ContainerFrame3Item13Cooldown\",\n\t\"ContainerFrame3Item14\",\n\t\"ContainerFrame3Item14Cooldown\",\n\t\"ContainerFrame3Item15\",\n\t\"ContainerFrame3Item15Cooldown\",\n\t\"ContainerFrame3Item16\",\n\t\"ContainerFrame3Item16Cooldown\",\n\t\"ContainerFrame3Item17\",\n\t\"ContainerFrame3Item17Cooldown\",\n\t\"ContainerFrame3Item18\",\n\t\"ContainerFrame3Item18Cooldown\",\n\t\"ContainerFrame3Item19\",\n\t\"ContainerFrame3Item19Cooldown\",\n\t\"ContainerFrame3Item20\",\n\t\"ContainerFrame3Item20Cooldown\",\n\t\"ContainerFrame3Item21\",\n\t\"ContainerFrame3Item21Cooldown\",\n\t\"ContainerFrame3Item22\",\n\t\"ContainerFrame3Item22Cooldown\",\n\t\"ContainerFrame3Item23\",\n\t\"ContainerFrame3Item23Cooldown\",\n\t\"ContainerFrame3Item24\",\n\t\"ContainerFrame3Item24Cooldown\",\n\t\"ContainerFrame3Item25\",\n\t\"ContainerFrame3Item25Cooldown\",\n\t\"ContainerFrame3Item26\",\n\t\"ContainerFrame3Item26Cooldown\",\n\t\"ContainerFrame3Item27\",\n\t\"ContainerFrame3Item27Cooldown\",\n\t\"ContainerFrame3Item28\",\n\t\"ContainerFrame3Item28Cooldown\",\n\t\"ContainerFrame3Item29\",\n\t\"ContainerFrame3Item29Cooldown\",\n\t\"ContainerFrame3Item30\",\n\t\"ContainerFrame3Item30Cooldown\",\n\t\"ContainerFrame3Item31\",\n\t\"ContainerFrame3Item31Cooldown\",\n\t\"ContainerFrame3Item32\",\n\t\"ContainerFrame3Item32Cooldown\",\n\t\"ContainerFrame3Item33\",\n\t\"ContainerFrame3Item33Cooldown\",\n\t\"ContainerFrame3Item34\",\n\t\"ContainerFrame3Item34Cooldown\",\n\t\"ContainerFrame3Item35\",\n\t\"ContainerFrame3Item35Cooldown\",\n\t\"ContainerFrame3Item36\",\n\t\"ContainerFrame3Item36Cooldown\",\n\t\"ContainerFrame3PortraitButton\",\n\t\"ContainerFrame3CloseButton\",\n\t\"ContainerFrame4\",\n\t\"ContainerFrame4MoneyFrame\",\n\t\"ContainerFrame4MoneyFrameCopperButton\",\n\t\"ContainerFrame4MoneyFrameSilverButton\",\n\t\"ContainerFrame4MoneyFrameGoldButton\",\n\t\"ContainerFrame4Item1\",\n\t\"ContainerFrame4Item1Cooldown\",\n\t\"ContainerFrame4Item2\",\n\t\"ContainerFrame4Item2Cooldown\",\n\t\"ContainerFrame4Item3\",\n\t\"ContainerFrame4Item3Cooldown\",\n\t\"ContainerFrame4Item4\",\n\t\"ContainerFrame4Item4Cooldown\",\n\t\"ContainerFrame4Item5\",\n\t\"ContainerFrame4Item5Cooldown\",\n\t\"ContainerFrame4Item6\",\n\t\"ContainerFrame4Item6Cooldown\",\n\t\"ContainerFrame4Item7\",\n\t\"ContainerFrame4Item7Cooldown\",\n\t\"ContainerFrame4Item8\",\n\t\"ContainerFrame4Item8Cooldown\",\n\t\"ContainerFrame4Item9\",\n\t\"ContainerFrame4Item9Cooldown\",\n\t\"ContainerFrame4Item10\",\n\t\"ContainerFrame4Item10Cooldown\",\n\t\"ContainerFrame4Item11\",\n\t\"ContainerFrame4Item11Cooldown\",\n\t\"ContainerFrame4Item12\",\n\t\"ContainerFrame4Item12Cooldown\",\n\t\"ContainerFrame4Item13\",\n\t\"ContainerFrame4Item13Cooldown\",\n\t\"ContainerFrame4Item14\",\n\t\"ContainerFrame4Item14Cooldown\",\n\t\"ContainerFrame4Item15\",\n\t\"ContainerFrame4Item15Cooldown\",\n\t\"ContainerFrame4Item16\",\n\t\"ContainerFrame4Item16Cooldown\",\n\t\"ContainerFrame4Item17\",\n\t\"ContainerFrame4Item17Cooldown\",\n\t\"ContainerFrame4Item18\",\n\t\"ContainerFrame4Item18Cooldown\",\n\t\"ContainerFrame4Item19\",\n\t\"ContainerFrame4Item19Cooldown\",\n\t\"ContainerFrame4Item20\",\n\t\"ContainerFrame4Item20Cooldown\",\n\t\"ContainerFrame4Item21\",\n\t\"ContainerFrame4Item21Cooldown\",\n\t\"ContainerFrame4Item22\",\n\t\"ContainerFrame4Item22Cooldown\",\n\t\"ContainerFrame4Item23\",\n\t\"ContainerFrame4Item23Cooldown\",\n\t\"ContainerFrame4Item24\",\n\t\"ContainerFrame4Item24Cooldown\",\n\t\"ContainerFrame4Item25\",\n\t\"ContainerFrame4Item25Cooldown\",\n\t\"ContainerFrame4Item26\",\n\t\"ContainerFrame4Item26Cooldown\",\n\t\"ContainerFrame4Item27\",\n\t\"ContainerFrame4Item27Cooldown\",\n\t\"ContainerFrame4Item28\",\n\t\"ContainerFrame4Item28Cooldown\",\n\t\"ContainerFrame4Item29\",\n\t\"ContainerFrame4Item29Cooldown\",\n\t\"ContainerFrame4Item30\",\n\t\"ContainerFrame4Item30Cooldown\",\n\t\"ContainerFrame4Item31\",\n\t\"ContainerFrame4Item31Cooldown\",\n\t\"ContainerFrame4Item32\",\n\t\"ContainerFrame4Item32Cooldown\",\n\t\"ContainerFrame4Item33\",\n\t\"ContainerFrame4Item33Cooldown\",\n\t\"ContainerFrame4Item34\",\n\t\"ContainerFrame4Item34Cooldown\",\n\t\"ContainerFrame4Item35\",\n\t\"ContainerFrame4Item35Cooldown\",\n\t\"ContainerFrame4Item36\",\n\t\"ContainerFrame4Item36Cooldown\",\n\t\"ContainerFrame4PortraitButton\",\n\t\"ContainerFrame4CloseButton\",\n\t\"ContainerFrame5\",\n\t\"ContainerFrame5MoneyFrame\",\n\t\"ContainerFrame5MoneyFrameCopperButton\",\n\t\"ContainerFrame5MoneyFrameSilverButton\",\n\t\"ContainerFrame5MoneyFrameGoldButton\",\n\t\"ContainerFrame5Item1\",\n\t\"ContainerFrame5Item1Cooldown\",\n\t\"ContainerFrame5Item2\",\n\t\"ContainerFrame5Item2Cooldown\",\n\t\"ContainerFrame5Item3\",\n\t\"ContainerFrame5Item3Cooldown\",\n\t\"ContainerFrame5Item4\",\n\t\"ContainerFrame5Item4Cooldown\",\n\t\"ContainerFrame5Item5\",\n\t\"ContainerFrame5Item5Cooldown\",\n\t\"ContainerFrame5Item6\",\n\t\"ContainerFrame5Item6Cooldown\",\n\t\"ContainerFrame5Item7\",\n\t\"ContainerFrame5Item7Cooldown\",\n\t\"ContainerFrame5Item8\",\n\t\"ContainerFrame5Item8Cooldown\",\n\t\"ContainerFrame5Item9\",\n\t\"ContainerFrame5Item9Cooldown\",\n\t\"ContainerFrame5Item10\",\n\t\"ContainerFrame5Item10Cooldown\",\n\t\"ContainerFrame5Item11\",\n\t\"ContainerFrame5Item11Cooldown\",\n\t\"ContainerFrame5Item12\",\n\t\"ContainerFrame5Item12Cooldown\",\n\t\"ContainerFrame5Item13\",\n\t\"ContainerFrame5Item13Cooldown\",\n\t\"ContainerFrame5Item14\",\n\t\"ContainerFrame5Item14Cooldown\",\n\t\"ContainerFrame5Item15\",\n\t\"ContainerFrame5Item15Cooldown\",\n\t\"ContainerFrame5Item16\",\n\t\"ContainerFrame5Item16Cooldown\",\n\t\"ContainerFrame5Item17\",\n\t\"ContainerFrame5Item17Cooldown\",\n\t\"ContainerFrame5Item18\",\n\t\"ContainerFrame5Item18Cooldown\",\n\t\"ContainerFrame5Item19\",\n\t\"ContainerFrame5Item19Cooldown\",\n\t\"ContainerFrame5Item20\",\n\t\"ContainerFrame5Item20Cooldown\",\n\t\"ContainerFrame5Item21\",\n\t\"ContainerFrame5Item21Cooldown\",\n\t\"ContainerFrame5Item22\",\n\t\"ContainerFrame5Item22Cooldown\",\n\t\"ContainerFrame5Item23\",\n\t\"ContainerFrame5Item23Cooldown\",\n\t\"ContainerFrame5Item24\",\n\t\"ContainerFrame5Item24Cooldown\",\n\t\"ContainerFrame5Item25\",\n\t\"ContainerFrame5Item25Cooldown\",\n\t\"ContainerFrame5Item26\",\n\t\"ContainerFrame5Item26Cooldown\",\n\t\"ContainerFrame5Item27\",\n\t\"ContainerFrame5Item27Cooldown\",\n\t\"ContainerFrame5Item28\",\n\t\"ContainerFrame5Item28Cooldown\",\n\t\"ContainerFrame5Item29\",\n\t\"ContainerFrame5Item29Cooldown\",\n\t\"ContainerFrame5Item30\",\n\t\"ContainerFrame5Item30Cooldown\",\n\t\"ContainerFrame5Item31\",\n\t\"ContainerFrame5Item31Cooldown\",\n\t\"ContainerFrame5Item32\",\n\t\"ContainerFrame5Item32Cooldown\",\n\t\"ContainerFrame5Item33\",\n\t\"ContainerFrame5Item33Cooldown\",\n\t\"ContainerFrame5Item34\",\n\t\"ContainerFrame5Item34Cooldown\",\n\t\"ContainerFrame5Item35\",\n\t\"ContainerFrame5Item35Cooldown\",\n\t\"ContainerFrame5Item36\",\n\t\"ContainerFrame5Item36Cooldown\",\n\t\"ContainerFrame5PortraitButton\",\n\t\"ContainerFrame5CloseButton\",\n\t\"ContainerFrame6\",\n\t\"ContainerFrame6MoneyFrame\",\n\t\"ContainerFrame6MoneyFrameCopperButton\",\n\t\"ContainerFrame6MoneyFrameSilverButton\",\n\t\"ContainerFrame6MoneyFrameGoldButton\",\n\t\"ContainerFrame6Item1\",\n\t\"ContainerFrame6Item1Cooldown\",\n\t\"ContainerFrame6Item2\",\n\t\"ContainerFrame6Item2Cooldown\",\n\t\"ContainerFrame6Item3\",\n\t\"ContainerFrame6Item3Cooldown\",\n\t\"ContainerFrame6Item4\",\n\t\"ContainerFrame6Item4Cooldown\",\n\t\"ContainerFrame6Item5\",\n\t\"ContainerFrame6Item5Cooldown\",\n\t\"ContainerFrame6Item6\",\n\t\"ContainerFrame6Item6Cooldown\",\n\t\"ContainerFrame6Item7\",\n\t\"ContainerFrame6Item7Cooldown\",\n\t\"ContainerFrame6Item8\",\n\t\"ContainerFrame6Item8Cooldown\",\n\t\"ContainerFrame6Item9\",\n\t\"ContainerFrame6Item9Cooldown\",\n\t\"ContainerFrame6Item10\",\n\t\"ContainerFrame6Item10Cooldown\",\n\t\"ContainerFrame6Item11\",\n\t\"ContainerFrame6Item11Cooldown\",\n\t\"ContainerFrame6Item12\",\n\t\"ContainerFrame6Item12Cooldown\",\n\t\"ContainerFrame6Item13\",\n\t\"ContainerFrame6Item13Cooldown\",\n\t\"ContainerFrame6Item14\",\n\t\"ContainerFrame6Item14Cooldown\",\n\t\"ContainerFrame6Item15\",\n\t\"ContainerFrame6Item15Cooldown\",\n\t\"ContainerFrame6Item16\",\n\t\"ContainerFrame6Item16Cooldown\",\n\t\"ContainerFrame6Item17\",\n\t\"ContainerFrame6Item17Cooldown\",\n\t\"ContainerFrame6Item18\",\n\t\"ContainerFrame6Item18Cooldown\",\n\t\"ContainerFrame6Item19\",\n\t\"ContainerFrame6Item19Cooldown\",\n\t\"ContainerFrame6Item20\",\n\t\"ContainerFrame6Item20Cooldown\",\n\t\"ContainerFrame6Item21\",\n\t\"ContainerFrame6Item21Cooldown\",\n\t\"ContainerFrame6Item22\",\n\t\"ContainerFrame6Item22Cooldown\",\n\t\"ContainerFrame6Item23\",\n\t\"ContainerFrame6Item23Cooldown\",\n\t\"ContainerFrame6Item24\",\n\t\"ContainerFrame6Item24Cooldown\",\n\t\"ContainerFrame6Item25\",\n\t\"ContainerFrame6Item25Cooldown\",\n\t\"ContainerFrame6Item26\",\n\t\"ContainerFrame6Item26Cooldown\",\n\t\"ContainerFrame6Item27\",\n\t\"ContainerFrame6Item27Cooldown\",\n\t\"ContainerFrame6Item28\",\n\t\"ContainerFrame6Item28Cooldown\",\n\t\"ContainerFrame6Item29\",\n\t\"ContainerFrame6Item29Cooldown\",\n\t\"ContainerFrame6Item30\",\n\t\"ContainerFrame6Item30Cooldown\",\n\t\"ContainerFrame6Item31\",\n\t\"ContainerFrame6Item31Cooldown\",\n\t\"ContainerFrame6Item32\",\n\t\"ContainerFrame6Item32Cooldown\",\n\t\"ContainerFrame6Item33\",\n\t\"ContainerFrame6Item33Cooldown\",\n\t\"ContainerFrame6Item34\",\n\t\"ContainerFrame6Item34Cooldown\",\n\t\"ContainerFrame6Item35\",\n\t\"ContainerFrame6Item35Cooldown\",\n\t\"ContainerFrame6Item36\",\n\t\"ContainerFrame6Item36Cooldown\",\n\t\"ContainerFrame6PortraitButton\",\n\t\"ContainerFrame6CloseButton\",\n\t\"ContainerFrame7\",\n\t\"ContainerFrame7MoneyFrame\",\n\t\"ContainerFrame7MoneyFrameCopperButton\",\n\t\"ContainerFrame7MoneyFrameSilverButton\",\n\t\"ContainerFrame7MoneyFrameGoldButton\",\n\t\"ContainerFrame7Item1\",\n\t\"ContainerFrame7Item1Cooldown\",\n\t\"ContainerFrame7Item2\",\n\t\"ContainerFrame7Item2Cooldown\",\n\t\"ContainerFrame7Item3\",\n\t\"ContainerFrame7Item3Cooldown\",\n\t\"ContainerFrame7Item4\",\n\t\"ContainerFrame7Item4Cooldown\",\n\t\"ContainerFrame7Item5\",\n\t\"ContainerFrame7Item5Cooldown\",\n\t\"ContainerFrame7Item6\",\n\t\"ContainerFrame7Item6Cooldown\",\n\t\"ContainerFrame7Item7\",\n\t\"ContainerFrame7Item7Cooldown\",\n\t\"ContainerFrame7Item8\",\n\t\"ContainerFrame7Item8Cooldown\",\n\t\"ContainerFrame7Item9\",\n\t\"ContainerFrame7Item9Cooldown\",\n\t\"ContainerFrame7Item10\",\n\t\"ContainerFrame7Item10Cooldown\",\n\t\"ContainerFrame7Item11\",\n\t\"ContainerFrame7Item11Cooldown\",\n\t\"ContainerFrame7Item12\",\n\t\"ContainerFrame7Item12Cooldown\",\n\t\"ContainerFrame7Item13\",\n\t\"ContainerFrame7Item13Cooldown\",\n\t\"ContainerFrame7Item14\",\n\t\"ContainerFrame7Item14Cooldown\",\n\t\"ContainerFrame7Item15\",\n\t\"ContainerFrame7Item15Cooldown\",\n\t\"ContainerFrame7Item16\",\n\t\"ContainerFrame7Item16Cooldown\",\n\t\"ContainerFrame7Item17\",\n\t\"ContainerFrame7Item17Cooldown\",\n\t\"ContainerFrame7Item18\",\n\t\"ContainerFrame7Item18Cooldown\",\n\t\"ContainerFrame7Item19\",\n\t\"ContainerFrame7Item19Cooldown\",\n\t\"ContainerFrame7Item20\",\n\t\"ContainerFrame7Item20Cooldown\",\n\t\"ContainerFrame7Item21\",\n\t\"ContainerFrame7Item21Cooldown\",\n\t\"ContainerFrame7Item22\",\n\t\"ContainerFrame7Item22Cooldown\",\n\t\"ContainerFrame7Item23\",\n\t\"ContainerFrame7Item23Cooldown\",\n\t\"ContainerFrame7Item24\",\n\t\"ContainerFrame7Item24Cooldown\",\n\t\"ContainerFrame7Item25\",\n\t\"ContainerFrame7Item25Cooldown\",\n\t\"ContainerFrame7Item26\",\n\t\"ContainerFrame7Item26Cooldown\",\n\t\"ContainerFrame7Item27\",\n\t\"ContainerFrame7Item27Cooldown\",\n\t\"ContainerFrame7Item28\",\n\t\"ContainerFrame7Item28Cooldown\",\n\t\"ContainerFrame7Item29\",\n\t\"ContainerFrame7Item29Cooldown\",\n\t\"ContainerFrame7Item30\",\n\t\"ContainerFrame7Item30Cooldown\",\n\t\"ContainerFrame7Item31\",\n\t\"ContainerFrame7Item31Cooldown\",\n\t\"ContainerFrame7Item32\",\n\t\"ContainerFrame7Item32Cooldown\",\n\t\"ContainerFrame7Item33\",\n\t\"ContainerFrame7Item33Cooldown\",\n\t\"ContainerFrame7Item34\",\n\t\"ContainerFrame7Item34Cooldown\",\n\t\"ContainerFrame7Item35\",\n\t\"ContainerFrame7Item35Cooldown\",\n\t\"ContainerFrame7Item36\",\n\t\"ContainerFrame7Item36Cooldown\",\n\t\"ContainerFrame7PortraitButton\",\n\t\"ContainerFrame7CloseButton\",\n\t\"ContainerFrame8\",\n\t\"ContainerFrame8MoneyFrame\",\n\t\"ContainerFrame8MoneyFrameCopperButton\",\n\t\"ContainerFrame8MoneyFrameSilverButton\",\n\t\"ContainerFrame8MoneyFrameGoldButton\",\n\t\"ContainerFrame8Item1\",\n\t\"ContainerFrame8Item1Cooldown\",\n\t\"ContainerFrame8Item2\",\n\t\"ContainerFrame8Item2Cooldown\",\n\t\"ContainerFrame8Item3\",\n\t\"ContainerFrame8Item3Cooldown\",\n\t\"ContainerFrame8Item4\",\n\t\"ContainerFrame8Item4Cooldown\",\n\t\"ContainerFrame8Item5\",\n\t\"ContainerFrame8Item5Cooldown\",\n\t\"ContainerFrame8Item6\",\n\t\"ContainerFrame8Item6Cooldown\",\n\t\"ContainerFrame8Item7\",\n\t\"ContainerFrame8Item7Cooldown\",\n\t\"ContainerFrame8Item8\",\n\t\"ContainerFrame8Item8Cooldown\",\n\t\"ContainerFrame8Item9\",\n\t\"ContainerFrame8Item9Cooldown\",\n\t\"ContainerFrame8Item10\",\n\t\"ContainerFrame8Item10Cooldown\",\n\t\"ContainerFrame8Item11\",\n\t\"ContainerFrame8Item11Cooldown\",\n\t\"ContainerFrame8Item12\",\n\t\"ContainerFrame8Item12Cooldown\",\n\t\"ContainerFrame8Item13\",\n\t\"ContainerFrame8Item13Cooldown\",\n\t\"ContainerFrame8Item14\",\n\t\"ContainerFrame8Item14Cooldown\",\n\t\"ContainerFrame8Item15\",\n\t\"ContainerFrame8Item15Cooldown\",\n\t\"ContainerFrame8Item16\",\n\t\"ContainerFrame8Item16Cooldown\",\n\t\"ContainerFrame8Item17\",\n\t\"ContainerFrame8Item17Cooldown\",\n\t\"ContainerFrame8Item18\",\n\t\"ContainerFrame8Item18Cooldown\",\n\t\"ContainerFrame8Item19\",\n\t\"ContainerFrame8Item19Cooldown\",\n\t\"ContainerFrame8Item20\",\n\t\"ContainerFrame8Item20Cooldown\",\n\t\"ContainerFrame8Item21\",\n\t\"ContainerFrame8Item21Cooldown\",\n\t\"ContainerFrame8Item22\",\n\t\"ContainerFrame8Item22Cooldown\",\n\t\"ContainerFrame8Item23\",\n\t\"ContainerFrame8Item23Cooldown\",\n\t\"ContainerFrame8Item24\",\n\t\"ContainerFrame8Item24Cooldown\",\n\t\"ContainerFrame8Item25\",\n\t\"ContainerFrame8Item25Cooldown\",\n\t\"ContainerFrame8Item26\",\n\t\"ContainerFrame8Item26Cooldown\",\n\t\"ContainerFrame8Item27\",\n\t\"ContainerFrame8Item27Cooldown\",\n\t\"ContainerFrame8Item28\",\n\t\"ContainerFrame8Item28Cooldown\",\n\t\"ContainerFrame8Item29\",\n\t\"ContainerFrame8Item29Cooldown\",\n\t\"ContainerFrame8Item30\",\n\t\"ContainerFrame8Item30Cooldown\",\n\t\"ContainerFrame8Item31\",\n\t\"ContainerFrame8Item31Cooldown\",\n\t\"ContainerFrame8Item32\",\n\t\"ContainerFrame8Item32Cooldown\",\n\t\"ContainerFrame8Item33\",\n\t\"ContainerFrame8Item33Cooldown\",\n\t\"ContainerFrame8Item34\",\n\t\"ContainerFrame8Item34Cooldown\",\n\t\"ContainerFrame8Item35\",\n\t\"ContainerFrame8Item35Cooldown\",\n\t\"ContainerFrame8Item36\",\n\t\"ContainerFrame8Item36Cooldown\",\n\t\"ContainerFrame8PortraitButton\",\n\t\"ContainerFrame8CloseButton\",\n\t\"ContainerFrame9\",\n\t\"ContainerFrame9MoneyFrame\",\n\t\"ContainerFrame9MoneyFrameCopperButton\",\n\t\"ContainerFrame9MoneyFrameSilverButton\",\n\t\"ContainerFrame9MoneyFrameGoldButton\",\n\t\"ContainerFrame9Item1\",\n\t\"ContainerFrame9Item1Cooldown\",\n\t\"ContainerFrame9Item2\",\n\t\"ContainerFrame9Item2Cooldown\",\n\t\"ContainerFrame9Item3\",\n\t\"ContainerFrame9Item3Cooldown\",\n\t\"ContainerFrame9Item4\",\n\t\"ContainerFrame9Item4Cooldown\",\n\t\"ContainerFrame9Item5\",\n\t\"ContainerFrame9Item5Cooldown\",\n\t\"ContainerFrame9Item6\",\n\t\"ContainerFrame9Item6Cooldown\",\n\t\"ContainerFrame9Item7\",\n\t\"ContainerFrame9Item7Cooldown\",\n\t\"ContainerFrame9Item8\",\n\t\"ContainerFrame9Item8Cooldown\",\n\t\"ContainerFrame9Item9\",\n\t\"ContainerFrame9Item9Cooldown\",\n\t\"ContainerFrame9Item10\",\n\t\"ContainerFrame9Item10Cooldown\",\n\t\"ContainerFrame9Item11\",\n\t\"ContainerFrame9Item11Cooldown\",\n\t\"ContainerFrame9Item12\",\n\t\"ContainerFrame9Item12Cooldown\",\n\t\"ContainerFrame9Item13\",\n\t\"ContainerFrame9Item13Cooldown\",\n\t\"ContainerFrame9Item14\",\n\t\"ContainerFrame9Item14Cooldown\",\n\t\"ContainerFrame9Item15\",\n\t\"ContainerFrame9Item15Cooldown\",\n\t\"ContainerFrame9Item16\",\n\t\"ContainerFrame9Item16Cooldown\",\n\t\"ContainerFrame9Item17\",\n\t\"ContainerFrame9Item17Cooldown\",\n\t\"ContainerFrame9Item18\",\n\t\"ContainerFrame9Item18Cooldown\",\n\t\"ContainerFrame9Item19\",\n\t\"ContainerFrame9Item19Cooldown\",\n\t\"ContainerFrame9Item20\",\n\t\"ContainerFrame9Item20Cooldown\",\n\t\"ContainerFrame9Item21\",\n\t\"ContainerFrame9Item21Cooldown\",\n\t\"ContainerFrame9Item22\",\n\t\"ContainerFrame9Item22Cooldown\",\n\t\"ContainerFrame9Item23\",\n\t\"ContainerFrame9Item23Cooldown\",\n\t\"ContainerFrame9Item24\",\n\t\"ContainerFrame9Item24Cooldown\",\n\t\"ContainerFrame9Item25\",\n\t\"ContainerFrame9Item25Cooldown\",\n\t\"ContainerFrame9Item26\",\n\t\"ContainerFrame9Item26Cooldown\",\n\t\"ContainerFrame9Item27\",\n\t\"ContainerFrame9Item27Cooldown\",\n\t\"ContainerFrame9Item28\",\n\t\"ContainerFrame9Item28Cooldown\",\n\t\"ContainerFrame9Item29\",\n\t\"ContainerFrame9Item29Cooldown\",\n\t\"ContainerFrame9Item30\",\n\t\"ContainerFrame9Item30Cooldown\",\n\t\"ContainerFrame9Item31\",\n\t\"ContainerFrame9Item31Cooldown\",\n\t\"ContainerFrame9Item32\",\n\t\"ContainerFrame9Item32Cooldown\",\n\t\"ContainerFrame9Item33\",\n\t\"ContainerFrame9Item33Cooldown\",\n\t\"ContainerFrame9Item34\",\n\t\"ContainerFrame9Item34Cooldown\",\n\t\"ContainerFrame9Item35\",\n\t\"ContainerFrame9Item35Cooldown\",\n\t\"ContainerFrame9Item36\",\n\t\"ContainerFrame9Item36Cooldown\",\n\t\"ContainerFrame9PortraitButton\",\n\t\"ContainerFrame9CloseButton\",\n\t\"ContainerFrame10\",\n\t\"ContainerFrame10MoneyFrame\",\n\t\"ContainerFrame10MoneyFrameCopperButton\",\n\t\"ContainerFrame10MoneyFrameSilverButton\",\n\t\"ContainerFrame10MoneyFrameGoldButton\",\n\t\"ContainerFrame10Item1\",\n\t\"ContainerFrame10Item1Cooldown\",\n\t\"ContainerFrame10Item2\",\n\t\"ContainerFrame10Item2Cooldown\",\n\t\"ContainerFrame10Item3\",\n\t\"ContainerFrame10Item3Cooldown\",\n\t\"ContainerFrame10Item4\",\n\t\"ContainerFrame10Item4Cooldown\",\n\t\"ContainerFrame10Item5\",\n\t\"ContainerFrame10Item5Cooldown\",\n\t\"ContainerFrame10Item6\",\n\t\"ContainerFrame10Item6Cooldown\",\n\t\"ContainerFrame10Item7\",\n\t\"ContainerFrame10Item7Cooldown\",\n\t\"ContainerFrame10Item8\",\n\t\"ContainerFrame10Item8Cooldown\",\n\t\"ContainerFrame10Item9\",\n\t\"ContainerFrame10Item9Cooldown\",\n\t\"ContainerFrame10Item10\",\n\t\"ContainerFrame10Item10Cooldown\",\n\t\"ContainerFrame10Item11\",\n\t\"ContainerFrame10Item11Cooldown\",\n\t\"ContainerFrame10Item12\",\n\t\"ContainerFrame10Item12Cooldown\",\n\t\"ContainerFrame10Item13\",\n\t\"ContainerFrame10Item13Cooldown\",\n\t\"ContainerFrame10Item14\",\n\t\"ContainerFrame10Item14Cooldown\",\n\t\"ContainerFrame10Item15\",\n\t\"ContainerFrame10Item15Cooldown\",\n\t\"ContainerFrame10Item16\",\n\t\"ContainerFrame10Item16Cooldown\",\n\t\"ContainerFrame10Item17\",\n\t\"ContainerFrame10Item17Cooldown\",\n\t\"ContainerFrame10Item18\",\n\t\"ContainerFrame10Item18Cooldown\",\n\t\"ContainerFrame10Item19\",\n\t\"ContainerFrame10Item19Cooldown\",\n\t\"ContainerFrame10Item20\",\n\t\"ContainerFrame10Item20Cooldown\",\n\t\"ContainerFrame10Item21\",\n\t\"ContainerFrame10Item21Cooldown\",\n\t\"ContainerFrame10Item22\",\n\t\"ContainerFrame10Item22Cooldown\",\n\t\"ContainerFrame10Item23\",\n\t\"ContainerFrame10Item23Cooldown\",\n\t\"ContainerFrame10Item24\",\n\t\"ContainerFrame10Item24Cooldown\",\n\t\"ContainerFrame10Item25\",\n\t\"ContainerFrame10Item25Cooldown\",\n\t\"ContainerFrame10Item26\",\n\t\"ContainerFrame10Item26Cooldown\",\n\t\"ContainerFrame10Item27\",\n\t\"ContainerFrame10Item27Cooldown\",\n\t\"ContainerFrame10Item28\",\n\t\"ContainerFrame10Item28Cooldown\",\n\t\"ContainerFrame10Item29\",\n\t\"ContainerFrame10Item29Cooldown\",\n\t\"ContainerFrame10Item30\",\n\t\"ContainerFrame10Item30Cooldown\",\n\t\"ContainerFrame10Item31\",\n\t\"ContainerFrame10Item31Cooldown\",\n\t\"ContainerFrame10Item32\",\n\t\"ContainerFrame10Item32Cooldown\",\n\t\"ContainerFrame10Item33\",\n\t\"ContainerFrame10Item33Cooldown\",\n\t\"ContainerFrame10Item34\",\n\t\"ContainerFrame10Item34Cooldown\",\n\t\"ContainerFrame10Item35\",\n\t\"ContainerFrame10Item35Cooldown\",\n\t\"ContainerFrame10Item36\",\n\t\"ContainerFrame10Item36Cooldown\",\n\t\"ContainerFrame10PortraitButton\",\n\t\"ContainerFrame10CloseButton\",\n\t\"ContainerFrame11\",\n\t\"ContainerFrame11MoneyFrame\",\n\t\"ContainerFrame11MoneyFrameCopperButton\",\n\t\"ContainerFrame11MoneyFrameSilverButton\",\n\t\"ContainerFrame11MoneyFrameGoldButton\",\n\t\"ContainerFrame11Item1\",\n\t\"ContainerFrame11Item1Cooldown\",\n\t\"ContainerFrame11Item2\",\n\t\"ContainerFrame11Item2Cooldown\",\n\t\"ContainerFrame11Item3\",\n\t\"ContainerFrame11Item3Cooldown\",\n\t\"ContainerFrame11Item4\",\n\t\"ContainerFrame11Item4Cooldown\",\n\t\"ContainerFrame11Item5\",\n\t\"ContainerFrame11Item5Cooldown\",\n\t\"ContainerFrame11Item6\",\n\t\"ContainerFrame11Item6Cooldown\",\n\t\"ContainerFrame11Item7\",\n\t\"ContainerFrame11Item7Cooldown\",\n\t\"ContainerFrame11Item8\",\n\t\"ContainerFrame11Item8Cooldown\",\n\t\"ContainerFrame11Item9\",\n\t\"ContainerFrame11Item9Cooldown\",\n\t\"ContainerFrame11Item10\",\n\t\"ContainerFrame11Item10Cooldown\",\n\t\"ContainerFrame11Item11\",\n\t\"ContainerFrame11Item11Cooldown\",\n\t\"ContainerFrame11Item12\",\n\t\"ContainerFrame11Item12Cooldown\",\n\t\"ContainerFrame11Item13\",\n\t\"ContainerFrame11Item13Cooldown\",\n\t\"ContainerFrame11Item14\",\n\t\"ContainerFrame11Item14Cooldown\",\n\t\"ContainerFrame11Item15\",\n\t\"ContainerFrame11Item15Cooldown\",\n\t\"ContainerFrame11Item16\",\n\t\"ContainerFrame11Item16Cooldown\",\n\t\"ContainerFrame11Item17\",\n\t\"ContainerFrame11Item17Cooldown\",\n\t\"ContainerFrame11Item18\",\n\t\"ContainerFrame11Item18Cooldown\",\n\t\"ContainerFrame11Item19\",\n\t\"ContainerFrame11Item19Cooldown\",\n\t\"ContainerFrame11Item20\",\n\t\"ContainerFrame11Item20Cooldown\",\n\t\"ContainerFrame11Item21\",\n\t\"ContainerFrame11Item21Cooldown\",\n\t\"ContainerFrame11Item22\",\n\t\"ContainerFrame11Item22Cooldown\",\n\t\"ContainerFrame11Item23\",\n\t\"ContainerFrame11Item23Cooldown\",\n\t\"ContainerFrame11Item24\",\n\t\"ContainerFrame11Item24Cooldown\",\n\t\"ContainerFrame11Item25\",\n\t\"ContainerFrame11Item25Cooldown\",\n\t\"ContainerFrame11Item26\",\n\t\"ContainerFrame11Item26Cooldown\",\n\t\"ContainerFrame11Item27\",\n\t\"ContainerFrame11Item27Cooldown\",\n\t\"ContainerFrame11Item28\",\n\t\"ContainerFrame11Item28Cooldown\",\n\t\"ContainerFrame11Item29\",\n\t\"ContainerFrame11Item29Cooldown\",\n\t\"ContainerFrame11Item30\",\n\t\"ContainerFrame11Item30Cooldown\",\n\t\"ContainerFrame11Item31\",\n\t\"ContainerFrame11Item31Cooldown\",\n\t\"ContainerFrame11Item32\",\n\t\"ContainerFrame11Item32Cooldown\",\n\t\"ContainerFrame11Item33\",\n\t\"ContainerFrame11Item33Cooldown\",\n\t\"ContainerFrame11Item34\",\n\t\"ContainerFrame11Item34Cooldown\",\n\t\"ContainerFrame11Item35\",\n\t\"ContainerFrame11Item35Cooldown\",\n\t\"ContainerFrame11Item36\",\n\t\"ContainerFrame11Item36Cooldown\",\n\t\"ContainerFrame11PortraitButton\",\n\t\"ContainerFrame11CloseButton\",\n\t\"ContainerFrame12\",\n\t\"ContainerFrame12MoneyFrame\",\n\t\"ContainerFrame12MoneyFrameCopperButton\",\n\t\"ContainerFrame12MoneyFrameSilverButton\",\n\t\"ContainerFrame12MoneyFrameGoldButton\",\n\t\"ContainerFrame12Item1\",\n\t\"ContainerFrame12Item1Cooldown\",\n\t\"ContainerFrame12Item2\",\n\t\"ContainerFrame12Item2Cooldown\",\n\t\"ContainerFrame12Item3\",\n\t\"ContainerFrame12Item3Cooldown\",\n\t\"ContainerFrame12Item4\",\n\t\"ContainerFrame12Item4Cooldown\",\n\t\"ContainerFrame12Item5\",\n\t\"ContainerFrame12Item5Cooldown\",\n\t\"ContainerFrame12Item6\",\n\t\"ContainerFrame12Item6Cooldown\",\n\t\"ContainerFrame12Item7\",\n\t\"ContainerFrame12Item7Cooldown\",\n\t\"ContainerFrame12Item8\",\n\t\"ContainerFrame12Item8Cooldown\",\n\t\"ContainerFrame12Item9\",\n\t\"ContainerFrame12Item9Cooldown\",\n\t\"ContainerFrame12Item10\",\n\t\"ContainerFrame12Item10Cooldown\",\n\t\"ContainerFrame12Item11\",\n\t\"ContainerFrame12Item11Cooldown\",\n\t\"ContainerFrame12Item12\",\n\t\"ContainerFrame12Item12Cooldown\",\n\t\"ContainerFrame12Item13\",\n\t\"ContainerFrame12Item13Cooldown\",\n\t\"ContainerFrame12Item14\",\n\t\"ContainerFrame12Item14Cooldown\",\n\t\"ContainerFrame12Item15\",\n\t\"ContainerFrame12Item15Cooldown\",\n\t\"ContainerFrame12Item16\",\n\t\"ContainerFrame12Item16Cooldown\",\n\t\"ContainerFrame12Item17\",\n\t\"ContainerFrame12Item17Cooldown\",\n\t\"ContainerFrame12Item18\",\n\t\"ContainerFrame12Item18Cooldown\",\n\t\"ContainerFrame12Item19\",\n\t\"ContainerFrame12Item19Cooldown\",\n\t\"ContainerFrame12Item20\",\n\t\"ContainerFrame12Item20Cooldown\",\n\t\"ContainerFrame12Item21\",\n\t\"ContainerFrame12Item21Cooldown\",\n\t\"ContainerFrame12Item22\",\n\t\"ContainerFrame12Item22Cooldown\",\n\t\"ContainerFrame12Item23\",\n\t\"ContainerFrame12Item23Cooldown\",\n\t\"ContainerFrame12Item24\",\n\t\"ContainerFrame12Item24Cooldown\",\n\t\"ContainerFrame12Item25\",\n\t\"ContainerFrame12Item25Cooldown\",\n\t\"ContainerFrame12Item26\",\n\t\"ContainerFrame12Item26Cooldown\",\n\t\"ContainerFrame12Item27\",\n\t\"ContainerFrame12Item27Cooldown\",\n\t\"ContainerFrame12Item28\",\n\t\"ContainerFrame12Item28Cooldown\",\n\t\"ContainerFrame12Item29\",\n\t\"ContainerFrame12Item29Cooldown\",\n\t\"ContainerFrame12Item30\",\n\t\"ContainerFrame12Item30Cooldown\",\n\t\"ContainerFrame12Item31\",\n\t\"ContainerFrame12Item31Cooldown\",\n\t\"ContainerFrame12Item32\",\n\t\"ContainerFrame12Item32Cooldown\",\n\t\"ContainerFrame12Item33\",\n\t\"ContainerFrame12Item33Cooldown\",\n\t\"ContainerFrame12Item34\",\n\t\"ContainerFrame12Item34Cooldown\",\n\t\"ContainerFrame12Item35\",\n\t\"ContainerFrame12Item35Cooldown\",\n\t\"ContainerFrame12Item36\",\n\t\"ContainerFrame12Item36Cooldown\",\n\t\"ContainerFrame12PortraitButton\",\n\t\"ContainerFrame12CloseButton\",\n\t\"ContainerFrame13\",\n\t\"ContainerFrame13MoneyFrame\",\n\t\"ContainerFrame13MoneyFrameCopperButton\",\n\t\"ContainerFrame13MoneyFrameSilverButton\",\n\t\"ContainerFrame13MoneyFrameGoldButton\",\n\t\"ContainerFrame13Item1\",\n\t\"ContainerFrame13Item1Cooldown\",\n\t\"ContainerFrame13Item2\",\n\t\"ContainerFrame13Item2Cooldown\",\n\t\"ContainerFrame13Item3\",\n\t\"ContainerFrame13Item3Cooldown\",\n\t\"ContainerFrame13Item4\",\n\t\"ContainerFrame13Item4Cooldown\",\n\t\"ContainerFrame13Item5\",\n\t\"ContainerFrame13Item5Cooldown\",\n\t\"ContainerFrame13Item6\",\n\t\"ContainerFrame13Item6Cooldown\",\n\t\"ContainerFrame13Item7\",\n\t\"ContainerFrame13Item7Cooldown\",\n\t\"ContainerFrame13Item8\",\n\t\"ContainerFrame13Item8Cooldown\",\n\t\"ContainerFrame13Item9\",\n\t\"ContainerFrame13Item9Cooldown\",\n\t\"ContainerFrame13Item10\",\n\t\"ContainerFrame13Item10Cooldown\",\n\t\"ContainerFrame13Item11\",\n\t\"ContainerFrame13Item11Cooldown\",\n\t\"ContainerFrame13Item12\",\n\t\"ContainerFrame13Item12Cooldown\",\n\t\"ContainerFrame13Item13\",\n\t\"ContainerFrame13Item13Cooldown\",\n\t\"ContainerFrame13Item14\",\n\t\"ContainerFrame13Item14Cooldown\",\n\t\"ContainerFrame13Item15\",\n\t\"ContainerFrame13Item15Cooldown\",\n\t\"ContainerFrame13Item16\",\n\t\"ContainerFrame13Item16Cooldown\",\n\t\"ContainerFrame13Item17\",\n\t\"ContainerFrame13Item17Cooldown\",\n\t\"ContainerFrame13Item18\",\n\t\"ContainerFrame13Item18Cooldown\",\n\t\"ContainerFrame13Item19\",\n\t\"ContainerFrame13Item19Cooldown\",\n\t\"ContainerFrame13Item20\",\n\t\"ContainerFrame13Item20Cooldown\",\n\t\"ContainerFrame13Item21\",\n\t\"ContainerFrame13Item21Cooldown\",\n\t\"ContainerFrame13Item22\",\n\t\"ContainerFrame13Item22Cooldown\",\n\t\"ContainerFrame13Item23\",\n\t\"ContainerFrame13Item23Cooldown\",\n\t\"ContainerFrame13Item24\",\n\t\"ContainerFrame13Item24Cooldown\",\n\t\"ContainerFrame13Item25\",\n\t\"ContainerFrame13Item25Cooldown\",\n\t\"ContainerFrame13Item26\",\n\t\"ContainerFrame13Item26Cooldown\",\n\t\"ContainerFrame13Item27\",\n\t\"ContainerFrame13Item27Cooldown\",\n\t\"ContainerFrame13Item28\",\n\t\"ContainerFrame13Item28Cooldown\",\n\t\"ContainerFrame13Item29\",\n\t\"ContainerFrame13Item29Cooldown\",\n\t\"ContainerFrame13Item30\",\n\t\"ContainerFrame13Item30Cooldown\",\n\t\"ContainerFrame13Item31\",\n\t\"ContainerFrame13Item31Cooldown\",\n\t\"ContainerFrame13Item32\",\n\t\"ContainerFrame13Item32Cooldown\",\n\t\"ContainerFrame13Item33\",\n\t\"ContainerFrame13Item33Cooldown\",\n\t\"ContainerFrame13Item34\",\n\t\"ContainerFrame13Item34Cooldown\",\n\t\"ContainerFrame13Item35\",\n\t\"ContainerFrame13Item35Cooldown\",\n\t\"ContainerFrame13Item36\",\n\t\"ContainerFrame13Item36Cooldown\",\n\t\"ContainerFrame13PortraitButton\",\n\t\"ContainerFrame13CloseButton\",\n\t\"LootFrame\",\n\t\"LootCloseButton\",\n\t\"LootButton1\",\n\t\"LootButton2\",\n\t\"LootButton3\",\n\t\"LootButton4\",\n\t\"LootFrameUpButton\",\n\t\"LootFrameDownButton\",\n\t\"GroupLootDropDown\",\n\t\"GroupLootDropDownButton\",\n\t\"GroupLootFrame1\",\n\t\"GroupLootFrame1IconFrame\",\n\t\"GroupLootFrame1PassButton\",\n\t\"GroupLootFrame1RollButton\",\n\t\"GroupLootFrame1GreedButton\",\n\t\"GroupLootFrame1DisenchantButton\",\n\t\"GroupLootFrame1Timer\",\n\t\"GroupLootFrame2\",\n\t\"GroupLootFrame2IconFrame\",\n\t\"GroupLootFrame2PassButton\",\n\t\"GroupLootFrame2RollButton\",\n\t\"GroupLootFrame2GreedButton\",\n\t\"GroupLootFrame2DisenchantButton\",\n\t\"GroupLootFrame2Timer\",\n\t\"GroupLootFrame3\",\n\t\"GroupLootFrame3IconFrame\",\n\t\"GroupLootFrame3PassButton\",\n\t\"GroupLootFrame3RollButton\",\n\t\"GroupLootFrame3GreedButton\",\n\t\"GroupLootFrame3DisenchantButton\",\n\t\"GroupLootFrame3Timer\",\n\t\"GroupLootFrame4\",\n\t\"GroupLootFrame4IconFrame\",\n\t\"GroupLootFrame4PassButton\",\n\t\"GroupLootFrame4RollButton\",\n\t\"GroupLootFrame4GreedButton\",\n\t\"GroupLootFrame4DisenchantButton\",\n\t\"GroupLootFrame4Timer\",\n\t\"ItemTextFrame\",\n\t\"ItemTextScrollFrame\",\n\t\"ItemTextPageScrollChild\",\n\t\"ItemTextPageText\",\n\t\"ItemTextScrollFrameScrollBar\",\n\t\"ItemTextScrollFrameScrollBarScrollUpButton\",\n\t\"ItemTextScrollFrameScrollBarScrollDownButton\",\n\t\"ItemTextStatusBar\",\n\t\"ItemTextPrevPageButton\",\n\t\"ItemTextNextPageButton\",\n\t\"ItemTextCloseButton\",\n\t\"TaxiFrame\",\n\t\"TaxiCloseButton\",\n\t\"TaxiRouteMap\",\n\t\"BankFrame\",\n\t\"BankCloseButton\",\n\t\"BankFrameItem1\",\n\t\"BankFrameItem1Cooldown\",\n\t\"BankFrameItem2\",\n\t\"BankFrameItem2Cooldown\",\n\t\"BankFrameItem3\",\n\t\"BankFrameItem3Cooldown\",\n\t\"BankFrameItem4\",\n\t\"BankFrameItem4Cooldown\",\n\t\"BankFrameItem5\",\n\t\"BankFrameItem5Cooldown\",\n\t\"BankFrameItem6\",\n\t\"BankFrameItem6Cooldown\",\n\t\"BankFrameItem7\",\n\t\"BankFrameItem7Cooldown\",\n\t\"BankFrameItem8\",\n\t\"BankFrameItem8Cooldown\",\n\t\"BankFrameItem9\",\n\t\"BankFrameItem9Cooldown\",\n\t\"BankFrameItem10\",\n\t\"BankFrameItem10Cooldown\",\n\t\"BankFrameItem11\",\n\t\"BankFrameItem11Cooldown\",\n\t\"BankFrameItem12\",\n\t\"BankFrameItem12Cooldown\",\n\t\"BankFrameItem13\",\n\t\"BankFrameItem13Cooldown\",\n\t\"BankFrameItem14\",\n\t\"BankFrameItem14Cooldown\",\n\t\"BankFrameItem15\",\n\t\"BankFrameItem15Cooldown\",\n\t\"BankFrameItem16\",\n\t\"BankFrameItem16Cooldown\",\n\t\"BankFrameItem17\",\n\t\"BankFrameItem17Cooldown\",\n\t\"BankFrameItem18\",\n\t\"BankFrameItem18Cooldown\",\n\t\"BankFrameItem19\",\n\t\"BankFrameItem19Cooldown\",\n\t\"BankFrameItem20\",\n\t\"BankFrameItem20Cooldown\",\n\t\"BankFrameItem21\",\n\t\"BankFrameItem21Cooldown\",\n\t\"BankFrameItem22\",\n\t\"BankFrameItem22Cooldown\",\n\t\"BankFrameItem23\",\n\t\"BankFrameItem23Cooldown\",\n\t\"BankFrameItem24\",\n\t\"BankFrameItem24Cooldown\",\n\t\"BankFrameItem25\",\n\t\"BankFrameItem25Cooldown\",\n\t\"BankFrameItem26\",\n\t\"BankFrameItem26Cooldown\",\n\t\"BankFrameItem27\",\n\t\"BankFrameItem27Cooldown\",\n\t\"BankFrameItem28\",\n\t\"BankFrameItem28Cooldown\",\n\t\"BankFrameBag1\",\n\t\"BankFrameBag1Cooldown\",\n\t\"BankFrameBag1HighlightFrame\",\n\t\"BankFrameBag2\",\n\t\"BankFrameBag2Cooldown\",\n\t\"BankFrameBag2HighlightFrame\",\n\t\"BankFrameBag3\",\n\t\"BankFrameBag3Cooldown\",\n\t\"BankFrameBag3HighlightFrame\",\n\t\"BankFrameBag4\",\n\t\"BankFrameBag4Cooldown\",\n\t\"BankFrameBag4HighlightFrame\",\n\t\"BankFrameBag5\",\n\t\"BankFrameBag5Cooldown\",\n\t\"BankFrameBag5HighlightFrame\",\n\t\"BankFrameBag6\",\n\t\"BankFrameBag6Cooldown\",\n\t\"BankFrameBag6HighlightFrame\",\n\t\"BankFrameBag7\",\n\t\"BankFrameBag7Cooldown\",\n\t\"BankFrameBag7HighlightFrame\",\n\t\"BankFramePurchaseInfo\",\n\t\"BankFramePurchaseButton\",\n\t\"BankFrameDetailMoneyFrame\",\n\t\"BankFrameDetailMoneyFrameCopperButton\",\n\t\"BankFrameDetailMoneyFrameSilverButton\",\n\t\"BankFrameDetailMoneyFrameGoldButton\",\n\t\"BankFrameMoneyFrame\",\n\t\"BankFrameMoneyFrameCopperButton\",\n\t\"BankFrameMoneyFrameSilverButton\",\n\t\"BankFrameMoneyFrameGoldButton\",\n\t\"FriendsFrame\",\n\t\"FriendsDropDown\",\n\t\"FriendsDropDownButton\",\n\t\"FriendsFrameCloseButton\",\n\t\"FriendsTabHeader\",\n\t\"FriendsFrameBattlenetStatus\",\n\t\"FriendsFrameBattlenetStatusInfoButton\",\n\t\"FriendsFrameStatusDropDown\",\n\t\"FriendsFrameStatusDropDownButton\",\n\t\"FriendsFrameStatusDropDownMouseOver\",\n\t\"FriendsFrameBroadcastInput\",\n\t\"FriendsFrameBroadcastInputTooltipButton\",\n\t\"FriendsFrameBroadcastInputClearButton\",\n\t\"FriendsTabHeaderTab1\",\n\t\"FriendsTabHeaderTab2\",\n\t\"FriendsTabHeaderTab3\",\n\t\"FriendsTabHeaderInviteAlert\",\n\t\"FriendsListFrame\",\n\t\"FriendsFrameAddFriendButton\",\n\t\"FriendsFrameSendMessageButton\",\n\t\"FriendsFrameFriendsScrollFrame\",\n\t\"FriendsFrameFriendsScrollFrameScrollChild\",\n\t\"FriendsFrameFriendsScrollFrameScrollBar\",\n\t\"FriendsFrameFriendsScrollFrameScrollBarScrollUpButton\",\n\t\"FriendsFrameFriendsScrollFrameScrollBarScrollDownButton\",\n\t\"IgnoreListFrame\",\n\t\"FriendsFrameIgnorePlayerButton\",\n\t\"FriendsFrameUnsquelchButton\",\n\t\"FriendsFrameMutePlayerButton\",\n\t\"FriendsFrameIgnoredHeader\",\n\t\"FriendsFrameBlockedInviteHeader\",\n\t\"FriendsFrameBlockedToonHeader\",\n\t\"FriendsFrameMutedHeader\",\n\t\"FriendsFrameIgnoreButton1\",\n\t\"FriendsFrameIgnoreButton2\",\n\t\"FriendsFrameIgnoreButton3\",\n\t\"FriendsFrameIgnoreButton4\",\n\t\"FriendsFrameIgnoreButton5\",\n\t\"FriendsFrameIgnoreButton6\",\n\t\"FriendsFrameIgnoreButton7\",\n\t\"FriendsFrameIgnoreButton8\",\n\t\"FriendsFrameIgnoreButton9\",\n\t\"FriendsFrameIgnoreButton10\",\n\t\"FriendsFrameIgnoreButton11\",\n\t\"FriendsFrameIgnoreButton12\",\n\t\"FriendsFrameIgnoreButton13\",\n\t\"FriendsFrameIgnoreButton14\",\n\t\"FriendsFrameIgnoreButton15\",\n\t\"FriendsFrameIgnoreButton16\",\n\t\"FriendsFrameIgnoreButton17\",\n\t\"FriendsFrameIgnoreButton18\",\n\t\"FriendsFrameIgnoreButton19\",\n\t\"FriendsFrameIgnoreScrollFrame\",\n\t\"FriendsFrameIgnoreScrollFrameScrollChildFrame\",\n\t\"FriendsFrameIgnoreScrollFrameScrollBar\",\n\t\"FriendsFrameIgnoreScrollFrameScrollBarScrollUpButton\",\n\t\"FriendsFrameIgnoreScrollFrameScrollBarScrollDownButton\",\n\t\"PendingListFrame\",\n\t\"PendingListFrameDropDown\",\n\t\"PendingListFrameDropDownButton\",\n\t\"PendingListInfoFrame\",\n\t\"PendingListInfoFrameContinueButton\",\n\t\"FriendsFramePendingScrollFrame\",\n\t\"FriendsFramePendingScrollFrameScrollChild\",\n\t\"FriendsFramePendingButton1\",\n\t\"FriendsFramePendingButton1Highlight\",\n\t\"FriendsFramePendingButton1AcceptButton\",\n\t\"FriendsFramePendingButton1DeclineButton\",\n\t\"FriendsFramePendingButton1ReportButton\",\n\t\"FriendsFramePendingButton1BlockButton\",\n\t\"FriendsFramePendingButton2\",\n\t\"FriendsFramePendingButton2Highlight\",\n\t\"FriendsFramePendingButton2AcceptButton\",\n\t\"FriendsFramePendingButton2DeclineButton\",\n\t\"FriendsFramePendingButton2ReportButton\",\n\t\"FriendsFramePendingButton2BlockButton\",\n\t\"FriendsFramePendingButton3\",\n\t\"FriendsFramePendingButton3Highlight\",\n\t\"FriendsFramePendingButton3AcceptButton\",\n\t\"FriendsFramePendingButton3DeclineButton\",\n\t\"FriendsFramePendingButton3ReportButton\",\n\t\"FriendsFramePendingButton3BlockButton\",\n\t\"FriendsFramePendingButton4\",\n\t\"FriendsFramePendingButton4Highlight\",\n\t\"FriendsFramePendingButton4AcceptButton\",\n\t\"FriendsFramePendingButton4DeclineButton\",\n\t\"FriendsFramePendingButton4ReportButton\",\n\t\"FriendsFramePendingButton4BlockButton\",\n\t\"FriendsFramePendingScrollFrameScrollBar\",\n\t\"FriendsFramePendingScrollFrameScrollBarScrollUpButton\",\n\t\"FriendsFramePendingScrollFrameScrollBarScrollDownButton\",\n\t\"WhoFrame\",\n\t\"WhoFrameColumnHeader1\",\n\t\"WhoFrameColumnHeader2\",\n\t\"WhoFrameDropDown\",\n\t\"WhoFrameDropDownButton\",\n\t\"WhoFrameColumnHeader3\",\n\t\"WhoFrameColumnHeader4\",\n\t\"WhoFrameButton1\",\n\t\"WhoFrameButton2\",\n\t\"WhoFrameButton3\",\n\t\"WhoFrameButton4\",\n\t\"WhoFrameButton5\",\n\t\"WhoFrameButton6\",\n\t\"WhoFrameButton7\",\n\t\"WhoFrameButton8\",\n\t\"WhoFrameButton9\",\n\t\"WhoFrameButton10\",\n\t\"WhoFrameButton11\",\n\t\"WhoFrameButton12\",\n\t\"WhoFrameButton13\",\n\t\"WhoFrameButton14\",\n\t\"WhoFrameButton15\",\n\t\"WhoFrameButton16\",\n\t\"WhoFrameButton17\",\n\t\"WhoFrameGroupInviteButton\",\n\t\"WhoFrameAddFriendButton\",\n\t\"WhoFrameWhoButton\",\n\t\"WhoFrameEditBox\",\n\t\"WhoListScrollFrame\",\n\t\"WhoListScrollFrameScrollChildFrame\",\n\t\"WhoListScrollFrameScrollBar\",\n\t\"WhoListScrollFrameScrollBarScrollUpButton\",\n\t\"WhoListScrollFrameScrollBarScrollDownButton\",\n\t\"GuildFrame\",\n\t\"GuildFrameLFGFrame\",\n\t\"GuildFrameLFGButton\",\n\t\"GuildPlayerStatusFrame\",\n\t\"GuildFrameColumnHeader1\",\n\t\"GuildFrameColumnHeader2\",\n\t\"GuildFrameColumnHeader3\",\n\t\"GuildFrameColumnHeader4\",\n\t\"GuildFrameButton1\",\n\t\"GuildFrameButton2\",\n\t\"GuildFrameButton3\",\n\t\"GuildFrameButton4\",\n\t\"GuildFrameButton5\",\n\t\"GuildFrameButton6\",\n\t\"GuildFrameButton7\",\n\t\"GuildFrameButton8\",\n\t\"GuildFrameButton9\",\n\t\"GuildFrameButton10\",\n\t\"GuildFrameButton11\",\n\t\"GuildFrameButton12\",\n\t\"GuildFrameButton13\",\n\t\"GuildStatusFrame\",\n\t\"GuildFrameGuildStatusColumnHeader1\",\n\t\"GuildFrameGuildStatusColumnHeader2\",\n\t\"GuildFrameGuildStatusColumnHeader3\",\n\t\"GuildFrameGuildStatusColumnHeader4\",\n\t\"GuildFrameGuildStatusButton1\",\n\t\"GuildFrameGuildStatusButton2\",\n\t\"GuildFrameGuildStatusButton3\",\n\t\"GuildFrameGuildStatusButton4\",\n\t\"GuildFrameGuildStatusButton5\",\n\t\"GuildFrameGuildStatusButton6\",\n\t\"GuildFrameGuildStatusButton7\",\n\t\"GuildFrameGuildStatusButton8\",\n\t\"GuildFrameGuildStatusButton9\",\n\t\"GuildFrameGuildStatusButton10\",\n\t\"GuildFrameGuildStatusButton11\",\n\t\"GuildFrameGuildStatusButton12\",\n\t\"GuildFrameGuildStatusButton13\",\n\t\"GuildListScrollFrame\",\n\t\"GuildListScrollFrameScrollChildFrame\",\n\t\"GuildListScrollFrameScrollBar\",\n\t\"GuildListScrollFrameScrollBarScrollUpButton\",\n\t\"GuildListScrollFrameScrollBarScrollDownButton\",\n\t\"GuildFrameGuildListToggleButton\",\n\t\"GuildFrameControlButton\",\n\t\"GuildFrameAddMemberButton\",\n\t\"GuildFrameGuildInformationButton\",\n\t\"GuildMOTDEditButton\",\n\t\"GuildControlPopupFrame\",\n\t\"GuildControlPopupFrameCheckboxes\",\n\t\"GuildControlPopupFrameDropDown\",\n\t\"GuildControlPopupFrameDropDownButton\",\n\t\"GuildControlPopupFrameAddRankButton\",\n\t\"GuildControlPopupFrameRemoveRankButton\",\n\t\"GuildControlPopupFrameCheckbox1\",\n\t\"GuildControlPopupFrameCheckbox3\",\n\t\"GuildControlPopupFrameCheckbox5\",\n\t\"GuildControlPopupFrameCheckbox7\",\n\t\"GuildControlPopupFrameCheckbox9\",\n\t\"GuildControlPopupFrameCheckbox11\",\n\t\"GuildControlPopupFrameCheckbox13\",\n\t\"GuildControlWithdrawGold\",\n\t\"GuildControlWithdrawGoldEditBox\",\n\t\"GuildControlWithdrawGoldEditBoxMask\",\n\t\"GuildControlPopupFrameCheckbox2\",\n\t\"GuildControlPopupFrameCheckbox4\",\n\t\"GuildControlPopupFrameCheckbox6\",\n\t\"GuildControlPopupFrameCheckbox8\",\n\t\"GuildControlPopupFrameCheckbox10\",\n\t\"GuildControlPopupFrameCheckbox12\",\n\t\"GuildControlPopupFrameCheckbox17\",\n\t\"GuildControlPopupFrameCheckbox16\",\n\t\"GuildControlPopupFrameCheckbox15\",\n\t\"GuildControlPopupFrameCancelButton\",\n\t\"GuildControlPopupAcceptButton\",\n\t\"GuildControlPopupFrameEditBox\",\n\t\"GuildControlPopupFrameTabPermissions\",\n\t\"GuildControlTabPermissionsViewTab\",\n\t\"GuildControlTabPermissionsDepositItems\",\n\t\"GuildControlTabPermissionsUpdateText\",\n\t\"GuildControlTabPermissionsWithdrawItems\",\n\t\"GuildControlWithdrawItemsEditBox\",\n\t\"GuildControlWithdrawItemsEditBoxMask\",\n\t\"GuildBankTabPermissionsTab6\",\n\t\"GuildBankTabPermissionsTab5\",\n\t\"GuildBankTabPermissionsTab4\",\n\t\"GuildBankTabPermissionsTab3\",\n\t\"GuildBankTabPermissionsTab2\",\n\t\"GuildBankTabPermissionsTab1\",\n\t\"GuildInfoFrame\",\n\t\"GuildInfoTextBackground\",\n\t\"GuildInfoFrameScrollFrame\",\n\t\"GuildInfoEditBox\",\n\t\"GuildInfoFrameScrollFrameScrollBar\",\n\t\"GuildInfoFrameScrollFrameScrollBarScrollUpButton\",\n\t\"GuildInfoFrameScrollFrameScrollBarScrollDownButton\",\n\t\"GuildInfoCloseButton\",\n\t\"GuildInfoSaveButton\",\n\t\"GuildInfoCancelButton\",\n\t\"GuildInfoGuildEventButton\",\n\t\"GuildMemberDetailFrame\",\n\t\"GuildMemberDetailCloseButton\",\n\t\"GuildMemberRemoveButton\",\n\t\"GuildMemberGroupInviteButton\",\n\t\"GuildFramePromoteButton\",\n\t\"GuildFrameDemoteButton\",\n\t\"GuildMemberNoteBackground\",\n\t\"GuildMemberOfficerNoteBackground\",\n\t\"GuildEventLogFrame\",\n\t\"GuildEventFrame\",\n\t\"GuildEventLogScrollFrame\",\n\t\"GuildEventLogScrollChildFrame\",\n\t\"GuildEventLogScrollFrameScrollBar\",\n\t\"GuildEventLogScrollFrameScrollBarScrollUpButton\",\n\t\"GuildEventLogScrollFrameScrollBarScrollDownButton\",\n\t\"GuildEventLogCloseButton\",\n\t\"GuildEventLogCancelButton\",\n\t\"FriendsFrameTab1\",\n\t\"FriendsFrameTab2\",\n\t\"FriendsFrameTab3\",\n\t\"FriendsFrameTab4\",\n\t\"FriendsFrameTab5\",\n\t\"FriendsTooltip\",\n\t\"FriendsFrameFriendsScrollFrameButton1\",\n\t\"FriendsFrameFriendsScrollFrameButton1SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton1SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton1SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton2\",\n\t\"FriendsFrameFriendsScrollFrameButton2SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton2SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton2SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton3\",\n\t\"FriendsFrameFriendsScrollFrameButton3SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton3SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton3SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton4\",\n\t\"FriendsFrameFriendsScrollFrameButton4SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton4SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton4SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton5\",\n\t\"FriendsFrameFriendsScrollFrameButton5SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton5SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton5SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton6\",\n\t\"FriendsFrameFriendsScrollFrameButton6SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton6SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton6SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton7\",\n\t\"FriendsFrameFriendsScrollFrameButton7SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton7SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton7SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton8\",\n\t\"FriendsFrameFriendsScrollFrameButton8SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton8SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton8SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton9\",\n\t\"FriendsFrameFriendsScrollFrameButton9SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton9SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton9SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton10\",\n\t\"FriendsFrameFriendsScrollFrameButton10SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton10SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton10SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton11\",\n\t\"FriendsFrameFriendsScrollFrameButton11SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton11SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton11SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton12\",\n\t\"FriendsFrameFriendsScrollFrameButton12SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton12SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton12SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton13\",\n\t\"FriendsFrameFriendsScrollFrameButton13SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton13SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton13SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton14\",\n\t\"FriendsFrameFriendsScrollFrameButton14SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton14SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton14SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton15\",\n\t\"FriendsFrameFriendsScrollFrameButton15SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton15SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton15SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton16\",\n\t\"FriendsFrameFriendsScrollFrameButton16SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton16SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton16SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton17\",\n\t\"FriendsFrameFriendsScrollFrameButton17SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton17SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton17SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton18\",\n\t\"FriendsFrameFriendsScrollFrameButton18SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton18SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton18SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton19\",\n\t\"FriendsFrameFriendsScrollFrameButton19SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton19SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton19SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton20\",\n\t\"FriendsFrameFriendsScrollFrameButton20SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton20SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton20SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton21\",\n\t\"FriendsFrameFriendsScrollFrameButton21SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton21SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton21SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton22\",\n\t\"FriendsFrameFriendsScrollFrameButton22SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton22SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton22SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton23\",\n\t\"FriendsFrameFriendsScrollFrameButton23SummonButton\",\n\t\"FriendsFrameFriendsScrollFrameButton23SummonButtonCooldown\",\n\t\"FriendsFrameFriendsScrollFrameButton23SummonButtonCooldown\",\n\t\"AddFriendFrame\",\n\t\"AddFriendInfoFrame\",\n\t\"AddFriendInfoFrameContinueButton\",\n\t\"AddFriendEntryFrame\",\n\t\"AddFriendEntryFrameInfoButton\",\n\t\"AddFriendNameEditBox\",\n\t\"AddFriendNoteFrame\",\n\t\"AddFriendNoteFrameScrollFrame\",\n\t\"AddFriendNoteEditBox\",\n\t\"AddFriendNoteFrameScrollFrameScrollBar\",\n\t\"AddFriendNoteFrameScrollFrameScrollBarScrollUpButton\",\n\t\"AddFriendNoteFrameScrollFrameScrollBarScrollDownButton\",\n\t\"AddFriendNoteFrameScrollFrameFocusButton\",\n\t\"AddFriendEntryFrameAcceptButton\",\n\t\"AddFriendEntryFrameCancelButton\",\n\t\"FriendsFriendsFrame\",\n\t\"FriendsFriendsFrameDropDown\",\n\t\"FriendsFriendsFrameDropDownButton\",\n\t\"FriendsFriendsList\",\n\t\"FriendsFriendsButton1\",\n\t\"FriendsFriendsButton2\",\n\t\"FriendsFriendsButton3\",\n\t\"FriendsFriendsButton4\",\n\t\"FriendsFriendsButton5\",\n\t\"FriendsFriendsButton6\",\n\t\"FriendsFriendsButton7\",\n\t\"FriendsFriendsButton8\",\n\t\"FriendsFriendsButton9\",\n\t\"FriendsFriendsButton10\",\n\t\"FriendsFriendsButton11\",\n\t\"FriendsFriendsScrollFrame\",\n\t\"FriendsFriendsScrollFrameScrollChildFrame\",\n\t\"FriendsFriendsScrollFrameScrollBar\",\n\t\"FriendsFriendsScrollFrameScrollBarScrollUpButton\",\n\t\"FriendsFriendsScrollFrameScrollBarScrollDownButton\",\n\t\"FriendsFriendsWaitFrame\",\n\t\"FriendsFriendsNoteFrame\",\n\t\"FriendsFriendsNoteFrameScrollFrame\",\n\t\"FriendsFriendsNoteEditBox\",\n\t\"FriendsFriendsNoteFrameScrollFrameScrollBar\",\n\t\"FriendsFriendsNoteFrameScrollFrameScrollBarScrollUpButton\",\n\t\"FriendsFriendsNoteFrameScrollFrameScrollBarScrollDownButton\",\n\t\"FriendsFriendsNoteFrameScrollFrameFocusButton\",\n\t\"FriendsFriendsSendRequestButton\",\n\t\"FriendsFriendsCloseButton\",\n\t\"RaidFrame\",\n\t\"RaidFrameNotInRaid\",\n\t\"RaidFrameNotInRaidRaidBrowserButton\",\n\t\"RaidFrameConvertToRaidButton\",\n\t\"RaidFrameRaidInfoButton\",\n\t\"RaidInfoFrame\",\n\t\"RaidInfoInstanceLabel\",\n\t\"RaidInfoIDLabel\",\n\t\"RaidInfoCloseButton\",\n\t\"RaidInfoScrollFrame\",\n\t\"RaidInfoScrollFrameScrollChild\",\n\t\"RaidInfoScrollFrameScrollBar\",\n\t\"RaidInfoScrollFrameScrollBarScrollUpButton\",\n\t\"RaidInfoScrollFrameScrollBarScrollDownButton\",\n\t\"RaidInfoScrollFrameButton1\",\n\t\"RaidInfoScrollFrameButton2\",\n\t\"RaidInfoScrollFrameButton3\",\n\t\"RaidInfoScrollFrameButton4\",\n\t\"RaidInfoScrollFrameButton5\",\n\t\"RaidInfoScrollFrameButton6\",\n\t\"RaidInfoScrollFrameButton7\",\n\t\"RaidInfoExtendButton\",\n\t\"RaidInfoCancelButton\",\n\t\"ChannelFrame\",\n\t\"ChannelFrameVerticalBar\",\n\t\"ChannelFrameAutoJoin\",\n\t\"ChannelFrameAutoJoinParty\",\n\t\"ChannelFrameAutoJoinBattleground\",\n\t\"ChannelFrameNewButton\",\n\t\"ChannelListScrollFrame\",\n\t\"ChannelListScrollChildFrame\",\n\t\"ChannelButton1\",\n\t\"ChannelButton1SpeakerFrame\",\n\t\"ChannelButton2\",\n\t\"ChannelButton2SpeakerFrame\",\n\t\"ChannelButton3\",\n\t\"ChannelButton3SpeakerFrame\",\n\t\"ChannelButton4\",\n\t\"ChannelButton4SpeakerFrame\",\n\t\"ChannelButton5\",\n\t\"ChannelButton5SpeakerFrame\",\n\t\"ChannelButton6\",\n\t\"ChannelButton6SpeakerFrame\",\n\t\"ChannelButton7\",\n\t\"ChannelButton7SpeakerFrame\",\n\t\"ChannelButton8\",\n\t\"ChannelButton8SpeakerFrame\",\n\t\"ChannelButton9\",\n\t\"ChannelButton9SpeakerFrame\",\n\t\"ChannelButton10\",\n\t\"ChannelButton10SpeakerFrame\",\n\t\"ChannelButton11\",\n\t\"ChannelButton11SpeakerFrame\",\n\t\"ChannelButton12\",\n\t\"ChannelButton12SpeakerFrame\",\n\t\"ChannelButton13\",\n\t\"ChannelButton13SpeakerFrame\",\n\t\"ChannelButton14\",\n\t\"ChannelButton14SpeakerFrame\",\n\t\"ChannelButton15\",\n\t\"ChannelButton15SpeakerFrame\",\n\t\"ChannelButton16\",\n\t\"ChannelButton16SpeakerFrame\",\n\t\"ChannelButton17\",\n\t\"ChannelButton17SpeakerFrame\",\n\t\"ChannelButton18\",\n\t\"ChannelButton18SpeakerFrame\",\n\t\"ChannelButton19\",\n\t\"ChannelButton19SpeakerFrame\",\n\t\"ChannelButton20\",\n\t\"ChannelButton20SpeakerFrame\",\n\t\"ChannelListScrollFrameScrollBar\",\n\t\"ChannelListScrollFrameScrollBarScrollUpButton\",\n\t\"ChannelListScrollFrameScrollBarScrollDownButton\",\n\t\"ChannelRoster\",\n\t\"ChannelRosterScrollFrame\",\n\t\"ChannelRosterScrollFrameScrollChildFrame\",\n\t\"ChannelRosterScrollFrameScrollBar\",\n\t\"ChannelRosterScrollFrameScrollBarScrollUpButton\",\n\t\"ChannelRosterScrollFrameScrollBarScrollDownButton\",\n\t\"ChannelMemberButton1\",\n\t\"ChannelMemberButton1Rank\",\n\t\"ChannelMemberButton1SpeakerFrame\",\n\t\"ChannelMemberButton2\",\n\t\"ChannelMemberButton2Rank\",\n\t\"ChannelMemberButton2SpeakerFrame\",\n\t\"ChannelMemberButton3\",\n\t\"ChannelMemberButton3Rank\",\n\t\"ChannelMemberButton3SpeakerFrame\",\n\t\"ChannelMemberButton4\",\n\t\"ChannelMemberButton4Rank\",\n\t\"ChannelMemberButton4SpeakerFrame\",\n\t\"ChannelMemberButton5\",\n\t\"ChannelMemberButton5Rank\",\n\t\"ChannelMemberButton5SpeakerFrame\",\n\t\"ChannelMemberButton6\",\n\t\"ChannelMemberButton6Rank\",\n\t\"ChannelMemberButton6SpeakerFrame\",\n\t\"ChannelMemberButton7\",\n\t\"ChannelMemberButton7Rank\",\n\t\"ChannelMemberButton7SpeakerFrame\",\n\t\"ChannelMemberButton8\",\n\t\"ChannelMemberButton8Rank\",\n\t\"ChannelMemberButton8SpeakerFrame\",\n\t\"ChannelMemberButton9\",\n\t\"ChannelMemberButton9Rank\",\n\t\"ChannelMemberButton9SpeakerFrame\",\n\t\"ChannelMemberButton10\",\n\t\"ChannelMemberButton10Rank\",\n\t\"ChannelMemberButton10SpeakerFrame\",\n\t\"ChannelMemberButton11\",\n\t\"ChannelMemberButton11Rank\",\n\t\"ChannelMemberButton11SpeakerFrame\",\n\t\"ChannelMemberButton12\",\n\t\"ChannelMemberButton12Rank\",\n\t\"ChannelMemberButton12SpeakerFrame\",\n\t\"ChannelMemberButton13\",\n\t\"ChannelMemberButton13Rank\",\n\t\"ChannelMemberButton13SpeakerFrame\",\n\t\"ChannelMemberButton14\",\n\t\"ChannelMemberButton14Rank\",\n\t\"ChannelMemberButton14SpeakerFrame\",\n\t\"ChannelMemberButton15\",\n\t\"ChannelMemberButton15Rank\",\n\t\"ChannelMemberButton15SpeakerFrame\",\n\t\"ChannelMemberButton16\",\n\t\"ChannelMemberButton16Rank\",\n\t\"ChannelMemberButton16SpeakerFrame\",\n\t\"ChannelMemberButton17\",\n\t\"ChannelMemberButton17Rank\",\n\t\"ChannelMemberButton17SpeakerFrame\",\n\t\"ChannelMemberButton18\",\n\t\"ChannelMemberButton18Rank\",\n\t\"ChannelMemberButton18SpeakerFrame\",\n\t\"ChannelMemberButton19\",\n\t\"ChannelMemberButton19Rank\",\n\t\"ChannelMemberButton19SpeakerFrame\",\n\t\"ChannelMemberButton20\",\n\t\"ChannelMemberButton20Rank\",\n\t\"ChannelMemberButton20SpeakerFrame\",\n\t\"ChannelMemberButton21\",\n\t\"ChannelMemberButton21Rank\",\n\t\"ChannelMemberButton21SpeakerFrame\",\n\t\"ChannelMemberButton22\",\n\t\"ChannelMemberButton22Rank\",\n\t\"ChannelMemberButton22SpeakerFrame\",\n\t\"ChannelRosterDropDown\",\n\t\"ChannelRosterDropDownButton\",\n\t\"ChannelFrameDaughterFrame\",\n\t\"ChannelFrameDaughterFrameChannelName\",\n\t\"ChannelFrameDaughterFrameChannelPassword\",\n\t\"ChannelFrameDaughterFrameDetailCloseButton\",\n\t\"ChannelFrameDaughterFrameOkayButton\",\n\t\"ChannelFrameDaughterFrameCancelButton\",\n\t\"ChannelListDropDown\",\n\t\"ChannelListDropDownButton\",\n\t\"ChannelPulloutTab\",\n\t\"ChannelPulloutTabFlash\",\n\t\"ChannelPulloutTabDropDown\",\n\t\"ChannelPulloutTabDropDownButton\",\n\t\"ChannelPullout\",\n\t\"ChannelPulloutBackground\",\n\t\"ChannelPulloutCloseButton\",\n\t\"ChannelPulloutRoster\",\n\t\"ChannelPulloutRosterScroll\",\n\t\"ChannelPulloutRosterScrollUpBtn\",\n\t\"ChannelPulloutRosterScrollDownBtn\",\n\t\"PetActionBarFrame\",\n\t\"PetActionButton1\",\n\t\"PetActionButton1Cooldown\",\n\t\"PetActionButton1Shine\",\n\t\"PetActionButton2\",\n\t\"PetActionButton2Cooldown\",\n\t\"PetActionButton2Shine\",\n\t\"PetActionButton3\",\n\t\"PetActionButton3Cooldown\",\n\t\"PetActionButton3Shine\",\n\t\"PetActionButton4\",\n\t\"PetActionButton4Cooldown\",\n\t\"PetActionButton4Shine\",\n\t\"PetActionButton5\",\n\t\"PetActionButton5Cooldown\",\n\t\"PetActionButton5Shine\",\n\t\"PetActionButton6\",\n\t\"PetActionButton6Cooldown\",\n\t\"PetActionButton6Shine\",\n\t\"PetActionButton7\",\n\t\"PetActionButton7Cooldown\",\n\t\"PetActionButton7Shine\",\n\t\"PetActionButton8\",\n\t\"PetActionButton8Cooldown\",\n\t\"PetActionButton8Shine\",\n\t\"PetActionButton9\",\n\t\"PetActionButton9Cooldown\",\n\t\"PetActionButton9Shine\",\n\t\"PetActionButton10\",\n\t\"PetActionButton10Cooldown\",\n\t\"PetActionButton10Shine\",\n\t\"MultiCastActionBarFrame\",\n\t\"MultiCastFlyoutFrame\",\n\t\"MultiCastFlyoutFrameCloseButton\",\n\t\"MultiCastFlyoutFrameOpenButton\",\n\t\"MultiCastSummonSpellButton\",\n\t\"MultiCastSummonSpellButtonCooldown\",\n\t\"MultiCastSummonSpellButtonFlyoutButton\",\n\t\"MultiCastSlotButton1\",\n\t\"MultiCastSlotButton2\",\n\t\"MultiCastSlotButton3\",\n\t\"MultiCastSlotButton4\",\n\t\"MultiCastActionPage1\",\n\t\"MultiCastActionButton1\",\n\t\"MultiCastActionButton1Cooldown\",\n\t\"MultiCastActionButton2\",\n\t\"MultiCastActionButton2Cooldown\",\n\t\"MultiCastActionButton3\",\n\t\"MultiCastActionButton3Cooldown\",\n\t\"MultiCastActionButton4\",\n\t\"MultiCastActionButton4Cooldown\",\n\t\"MultiCastActionPage2\",\n\t\"MultiCastActionButton5\",\n\t\"MultiCastActionButton5Cooldown\",\n\t\"MultiCastActionButton6\",\n\t\"MultiCastActionButton6Cooldown\",\n\t\"MultiCastActionButton7\",\n\t\"MultiCastActionButton7Cooldown\",\n\t\"MultiCastActionButton8\",\n\t\"MultiCastActionButton8Cooldown\",\n\t\"MultiCastActionPage3\",\n\t\"MultiCastActionButton9\",\n\t\"MultiCastActionButton9Cooldown\",\n\t\"MultiCastActionButton10\",\n\t\"MultiCastActionButton10Cooldown\",\n\t\"MultiCastActionButton11\",\n\t\"MultiCastActionButton11Cooldown\",\n\t\"MultiCastActionButton12\",\n\t\"MultiCastActionButton12Cooldown\",\n\t\"MultiCastRecallSpellButton\",\n\t\"MultiCastRecallSpellButtonCooldown\",\n\t\"BonusActionBarFrame\",\n\t\"BonusActionButton1\",\n\t\"BonusActionButton1Cooldown\",\n\t\"BonusActionButton2\",\n\t\"BonusActionButton2Cooldown\",\n\t\"BonusActionButton3\",\n\t\"BonusActionButton3Cooldown\",\n\t\"BonusActionButton4\",\n\t\"BonusActionButton4Cooldown\",\n\t\"BonusActionButton5\",\n\t\"BonusActionButton5Cooldown\",\n\t\"BonusActionButton6\",\n\t\"BonusActionButton6Cooldown\",\n\t\"BonusActionButton7\",\n\t\"BonusActionButton7Cooldown\",\n\t\"BonusActionButton8\",\n\t\"BonusActionButton8Cooldown\",\n\t\"BonusActionButton9\",\n\t\"BonusActionButton9Cooldown\",\n\t\"BonusActionButton10\",\n\t\"BonusActionButton10Cooldown\",\n\t\"BonusActionButton11\",\n\t\"BonusActionButton11Cooldown\",\n\t\"BonusActionButton12\",\n\t\"BonusActionButton12Cooldown\",\n\t\"ShapeshiftBarFrame\",\n\t\"ShapeshiftButton1\",\n\t\"ShapeshiftButton1Cooldown\",\n\t\"ShapeshiftButton2\",\n\t\"ShapeshiftButton2Cooldown\",\n\t\"ShapeshiftButton3\",\n\t\"ShapeshiftButton3Cooldown\",\n\t\"ShapeshiftButton4\",\n\t\"ShapeshiftButton4Cooldown\",\n\t\"ShapeshiftButton5\",\n\t\"ShapeshiftButton5Cooldown\",\n\t\"ShapeshiftButton6\",\n\t\"ShapeshiftButton6Cooldown\",\n\t\"ShapeshiftButton7\",\n\t\"ShapeshiftButton7Cooldown\",\n\t\"ShapeshiftButton8\",\n\t\"ShapeshiftButton8Cooldown\",\n\t\"ShapeshiftButton9\",\n\t\"ShapeshiftButton9Cooldown\",\n\t\"ShapeshiftButton10\",\n\t\"ShapeshiftButton10Cooldown\",\n\t\"PossessBarFrame\",\n\t\"PossessButton1\",\n\t\"PossessButton1Cooldown\",\n\t\"PossessButton2\",\n\t\"PossessButton2Cooldown\",\n\t\"MainMenuBarBackpackButton\",\n\t\"MainMenuBarBackpackButtonItemAnim\",\n\t\"CharacterBag0Slot\",\n\t\"CharacterBag0SlotItemAnim\",\n\t\"CharacterBag1Slot\",\n\t\"CharacterBag1SlotItemAnim\",\n\t\"CharacterBag2Slot\",\n\t\"CharacterBag2SlotItemAnim\",\n\t\"CharacterBag3Slot\",\n\t\"CharacterBag3SlotItemAnim\",\n\t\"KeyRingButton\",\n\t\"KeyRingButtonItemAnim\",\n\t\"WorldMapFrame\",\n\t\"WorldMapTitleDropDown\",\n\t\"WorldMapTitleDropDownButton\",\n\t\"WorldMapPositioningGuide\",\n\t\"WorldMapZoneMinimapDropDown\",\n\t\"WorldMapZoneMinimapDropDownButton\",\n\t\"WorldMapContinentDropDown\",\n\t\"WorldMapContinentDropDownButton\",\n\t\"WorldMapZoneDropDown\",\n\t\"WorldMapZoneDropDownButton\",\n\t\"WorldMapZoomOutButton\",\n\t\"WorldMapLevelDropDown\",\n\t\"WorldMapLevelDropDownButton\",\n\t\"WorldMapLevelUpButton\",\n\t\"WorldMapLevelDownButton\",\n\t\"WorldMapMagnifyingGlassButton\",\n\t\"WorldMapFrameCloseButton\",\n\t\"WorldMapFrameSizeDownButton\",\n\t\"WorldMapFrameSizeUpButton\",\n\t\"WorldMapDetailFrame\",\n\t\"WorldMapBlobFrame\",\n\t\"WorldMapButton\",\n\t\"WorldMapPlayer\",\n\t\"WorldMapUnitDropDown\",\n\t\"WorldMapUnitDropDownButton\",\n\t\"WorldMapParty1\",\n\t\"WorldMapParty2\",\n\t\"WorldMapParty3\",\n\t\"WorldMapParty4\",\n\t\"WorldMapRaid1\",\n\t\"WorldMapRaid2\",\n\t\"WorldMapRaid3\",\n\t\"WorldMapRaid4\",\n\t\"WorldMapRaid5\",\n\t\"WorldMapRaid6\",\n\t\"WorldMapRaid7\",\n\t\"WorldMapRaid8\",\n\t\"WorldMapRaid9\",\n\t\"WorldMapRaid10\",\n\t\"WorldMapRaid11\",\n\t\"WorldMapRaid12\",\n\t\"WorldMapRaid13\",\n\t\"WorldMapRaid14\",\n\t\"WorldMapRaid15\",\n\t\"WorldMapRaid16\",\n\t\"WorldMapRaid17\",\n\t\"WorldMapRaid18\",\n\t\"WorldMapRaid19\",\n\t\"WorldMapRaid20\",\n\t\"WorldMapRaid21\",\n\t\"WorldMapRaid22\",\n\t\"WorldMapRaid23\",\n\t\"WorldMapRaid24\",\n\t\"WorldMapRaid25\",\n\t\"WorldMapRaid26\",\n\t\"WorldMapRaid27\",\n\t\"WorldMapRaid28\",\n\t\"WorldMapRaid29\",\n\t\"WorldMapRaid30\",\n\t\"WorldMapRaid31\",\n\t\"WorldMapRaid32\",\n\t\"WorldMapRaid33\",\n\t\"WorldMapRaid34\",\n\t\"WorldMapRaid35\",\n\t\"WorldMapRaid36\",\n\t\"WorldMapRaid37\",\n\t\"WorldMapRaid38\",\n\t\"WorldMapRaid39\",\n\t\"WorldMapRaid40\",\n\t\"WorldMapFlag1\",\n\t\"WorldMapFlag2\",\n\t\"WorldMapCorpse\",\n\t\"WorldMapDeathRelease\",\n\t\"WorldMapPing\",\n\t\"WorldMapFrameAreaFrame\",\n\t\"OutlandButton\",\n\t\"AzerothButton\",\n\t\"WorldMapPOIFrame\",\n\t\"WorldMapQuestScrollFrame\",\n\t\"WorldMapQuestScrollChildFrame\",\n\t\"WorldMapQuestSelectedFrame\",\n\t\"WorldMapQuestHighlightedFrame\",\n\t\"WorldMapQuestScrollFrameScrollBar\",\n\t\"WorldMapQuestScrollFrameScrollBarScrollUpButton\",\n\t\"WorldMapQuestScrollFrameScrollBarScrollDownButton\",\n\t\"WorldMapQuestDetailScrollFrame\",\n\t\"WorldMapQuestDetailScrollChildFrame\",\n\t\"WorldMapQuestDetailScrollFrameScrollBar\",\n\t\"WorldMapQuestDetailScrollFrameScrollBarScrollUpButton\",\n\t\"WorldMapQuestDetailScrollFrameScrollBarScrollDownButton\",\n\t\"WorldMapQuestRewardScrollFrame\",\n\t\"WorldMapQuestRewardScrollChildFrame\",\n\t\"WorldMapQuestRewardScrollFrameScrollBar\",\n\t\"WorldMapQuestRewardScrollFrameScrollBarScrollUpButton\",\n\t\"WorldMapQuestRewardScrollFrameScrollBarScrollDownButton\",\n\t\"WorldMapTrackQuest\",\n\t\"WorldMapQuestShowObjectives\",\n\t\"PlayerArrowFrame\",\n\t\"PlayerArrowEffectFrame\",\n\t\"WorldMapQuestFrame0\",\n\t\"poiWorldMapQuestScrollChildFrame1_0\",\n\t\"WorldMapCompareTooltip1\",\n\t\"WorldMapCompareTooltip2\",\n\t\"WorldMapCompareTooltip3\",\n\t\"WorldMapTooltip\",\n\t\"WorldMapTooltipStatusBar\",\n\t\"WorldMapScreenAnchor\",\n\t\"WorldMapTitleButton\",\n\t\"CinematicFrame\",\n\t\"ItemRefShoppingTooltip1\",\n\t\"ItemRefShoppingTooltip2\",\n\t\"ItemRefShoppingTooltip3\",\n\t\"ItemRefTooltip\",\n\t\"ItemRefTooltipStatusBar\",\n\t\"ItemRefCloseButton\",\n\t\"ComboFrame\",\n\t\"ComboPoint1\",\n\t\"ComboPoint2\",\n\t\"ComboPoint3\",\n\t\"ComboPoint4\",\n\t\"ComboPoint5\",\n\t\"TabardFrame\",\n\t\"TabardModel\",\n\t\"TabardCharacterModelRotateLeftButton\",\n\t\"TabardCharacterModelRotateRightButton\",\n\t\"TabardFrameCostFrame\",\n\t\"TabardFrameCostMoneyFrame\",\n\t\"TabardFrameCostMoneyFrameCopperButton\",\n\t\"TabardFrameCostMoneyFrameSilverButton\",\n\t\"TabardFrameCostMoneyFrameGoldButton\",\n\t\"TabardFrameCustomizationFrame\",\n\t\"TabardFrameCustomization1\",\n\t\"TabardFrameCustomization1LeftButton\",\n\t\"TabardFrameCustomization1RightButton\",\n\t\"TabardFrameCustomization2\",\n\t\"TabardFrameCustomization2LeftButton\",\n\t\"TabardFrameCustomization2RightButton\",\n\t\"TabardFrameCustomization3\",\n\t\"TabardFrameCustomization3LeftButton\",\n\t\"TabardFrameCustomization3RightButton\",\n\t\"TabardFrameCustomization4\",\n\t\"TabardFrameCustomization4LeftButton\",\n\t\"TabardFrameCustomization4RightButton\",\n\t\"TabardFrameCustomization5\",\n\t\"TabardFrameCustomization5LeftButton\",\n\t\"TabardFrameCustomization5RightButton\",\n\t\"TabardFrameMoneyFrame\",\n\t\"TabardFrameMoneyFrameCopperButton\",\n\t\"TabardFrameMoneyFrameSilverButton\",\n\t\"TabardFrameMoneyFrameGoldButton\",\n\t\"TabardFrameAcceptButton\",\n\t\"TabardFrameCancelButton\",\n\t\"TabardFrameCloseButton\",\n\t\"GuildRegistrarFrame\",\n\t\"GuildRegistrarNpcNameFrame\",\n\t\"GuildRegistrarFrameCloseButton\",\n\t\"GuildRegistrarGreetingFrame\",\n\t\"GuildRegistrarFrameGoodbyeButton\",\n\t\"GuildRegistrarButton1\",\n\t\"GuildRegistrarButton2\",\n\t\"GuildRegistrarPurchaseFrame\",\n\t\"GuildRegistrarMoneyFrame\",\n\t\"GuildRegistrarMoneyFrameCopperButton\",\n\t\"GuildRegistrarMoneyFrameSilverButton\",\n\t\"GuildRegistrarMoneyFrameGoldButton\",\n\t\"GuildRegistrarFrameCancelButton\",\n\t\"GuildRegistrarFramePurchaseButton\",\n\t\"GuildRegistrarFrameEditBox\",\n\t\"PetitionFrame\",\n\t\"PetitionNpcNameFrame\",\n\t\"PetitionFrameCancelButton\",\n\t\"PetitionFrameSignButton\",\n\t\"PetitionFrameRequestButton\",\n\t\"PetitionFrameCloseButton\",\n\t\"PetitionFrameRenameButton\",\n\t\"HelpFrame\",\n\t\"HelpFrameCloseButton\",\n\t\"HelpFrameGMTalk\",\n\t\"HelpFrameGMTalkOpenTicket\",\n\t\"HelpFrameGMTalkCancel\",\n\t\"HelpFrameReportIssue\",\n\t\"HelpFrameReportIssueBullet1\",\n\t\"HelpFrameReportIssueBullet2\",\n\t\"HelpFrameReportIssueOpenTicket\",\n\t\"HelpFrameReportIssueCancel\",\n\t\"HelpFrameLag\",\n\t\"HelpFrameLagLoot\",\n\t\"HelpFrameLagAuctionHouse\",\n\t\"HelpFrameLagMail\",\n\t\"HelpFrameLagChat\",\n\t\"HelpFrameLagMovement\",\n\t\"HelpFrameLagSpell\",\n\t\"HelpFrameLagCancel\",\n\t\"HelpFrameStuck\",\n\t\"HelpFrameStuckStuck\",\n\t\"HelpFrameStuckOpenTicket\",\n\t\"HelpFrameStuckCancel\",\n\t\"HelpFrameOpenTicket\",\n\t\"HelpFrameOpenTicketDivider\",\n\t\"HelpFrameOpenTicketScrollFrame\",\n\t\"HelpFrameOpenTicketEditBox\",\n\t\"HelpFrameOpenTicketScrollFrameScrollBar\",\n\t\"HelpFrameOpenTicketScrollFrameScrollBarScrollUpButton\",\n\t\"HelpFrameOpenTicketScrollFrameScrollBarScrollDownButton\",\n\t\"HelpFrameOpenTicketCancel\",\n\t\"HelpFrameOpenTicketSubmit\",\n\t\"HelpFrameViewResponse\",\n\t\"HelpFrameViewResponseIssueScrollFrame\",\n\t\"HelpFrameViewResponseIssueScrollFrameScrollChild\",\n\t\"HelpFrameViewResponseIssueScrollFrameScrollBar\",\n\t\"HelpFrameViewResponseIssueScrollFrameScrollBarScrollUpButton\",\n\t\"HelpFrameViewResponseIssueScrollFrameScrollBarScrollDownButton\",\n\t\"HelpFrameViewResponseDivider\",\n\t\"HelpFrameViewResponseMessageScrollFrame\",\n\t\"HelpFrameViewResponseMessageScrollFrameScrollChild\",\n\t\"HelpFrameViewResponseMessageScrollFrameScrollBar\",\n\t\"HelpFrameViewResponseMessageScrollFrameScrollBarScrollUpButton\",\n\t\"HelpFrameViewResponseMessageScrollFrameScrollBarScrollDownButton\",\n\t\"HelpFrameViewResponseCancel\",\n\t\"HelpFrameViewResponseMoreHelp\",\n\t\"HelpFrameViewResponseIssueResolved\",\n\t\"HelpFrameWelcome\",\n\t\"HelpFrameWelcomeGMTalk\",\n\t\"HelpFrameWelcomeReportIssue\",\n\t\"HelpFrameWelcomeStuck\",\n\t\"HelpFrameWelcomeCancel\",\n\t\"TicketStatusFrame\",\n\t\"TicketStatusFrameButton\",\n\t\"KnowledgeBaseFrame\",\n\t\"KnowledgeBaseFrameTopIssuesButton\",\n\t\"GMChatOpenLog\",\n\t\"KnowledgeBaseMotdTextFrame\",\n\t\"KnowledgeBaseServerMessageTextFrame\",\n\t\"KnowledgeBaseFrameDivider\",\n\t\"KnowledgeBaseFrameEditBox\",\n\t\"KnowledgeBaseFrameCategoryDropDown\",\n\t\"KnowledgeBaseFrameCategoryDropDownButton\",\n\t\"KnowledgeBaseFrameSubCategoryDropDown\",\n\t\"KnowledgeBaseFrameSubCategoryDropDownButton\",\n\t\"KnowledgeBaseFrameSearchButton\",\n\t\"KnowledgeBaseFrameDivider2\",\n\t\"KnowledgeBaseArticleListFrame\",\n\t\"KnowledgeBaseArticleListFrameNextButton\",\n\t\"KnowledgeBaseArticleListFramePreviousButton\",\n\t\"KnowledgeBaseArticleListItem1\",\n\t\"KnowledgeBaseArticleListItem2\",\n\t\"KnowledgeBaseArticleListItem3\",\n\t\"KnowledgeBaseArticleListItem4\",\n\t\"KnowledgeBaseArticleListItem5\",\n\t\"KnowledgeBaseArticleListItem6\",\n\t\"KnowledgeBaseArticleListItem7\",\n\t\"KnowledgeBaseArticleListItem8\",\n\t\"KnowledgeBaseArticleListItem9\",\n\t\"KnowledgeBaseArticleListItem10\",\n\t\"KnowledgeBaseArticleListItem11\",\n\t\"KnowledgeBaseArticleListItem12\",\n\t\"KnowledgeBaseArticleListItem13\",\n\t\"KnowledgeBaseArticleListItem14\",\n\t\"KnowledgeBaseArticleListItem15\",\n\t\"KnowledgeBaseArticleListItem16\",\n\t\"KnowledgeBaseArticleListItem17\",\n\t\"KnowledgeBaseArticleListItem18\",\n\t\"KnowledgeBaseArticleListItem19\",\n\t\"KnowledgeBaseArticleListItem20\",\n\t\"KnowledgeBaseArticleScrollFrame\",\n\t\"KnowledgeBaseArticleScrollChildFrame\",\n\t\"KnowledgeBaseArticleScrollChildFrameBackButton\",\n\t\"KnowledgeBaseArticleScrollFrameScrollBar\",\n\t\"KnowledgeBaseArticleScrollFrameScrollBarScrollUpButton\",\n\t\"KnowledgeBaseArticleScrollFrameScrollBarScrollDownButton\",\n\t\"KnowledgeBaseErrorFrame\",\n\t\"KnowledgeBaseFrameReportIssue\",\n\t\"KnowledgeBaseFrameGMTalk\",\n\t\"KnowledgeBaseFrameAbandonTicket\",\n\t\"KnowledgeBaseFrameEditTicket\",\n\t\"KnowledgeBaseFrameStuck\",\n\t\"KnowledgeBaseFrameLag\",\n\t\"KnowledgeBaseFrameCancel\",\n\t\"ColorPickerFrame\",\n\t\"ColorPickerCancelButton\",\n\t\"ColorPickerOkayButton\",\n\t\"OpacitySliderFrame\",\n\t\"OpacityFrame\",\n\t\"OpacityFrameSlider\",\n\t\"OpacityFrameCloseButton\",\n\t\"GossipFrame\",\n\t\"GossipNpcNameFrame\",\n\t\"GossipFrameCloseButton\",\n\t\"GossipFrameGreetingPanel\",\n\t\"GossipFrameGreetingGoodbyeButton\",\n\t\"GossipGreetingScrollFrame\",\n\t\"GossipGreetingScrollChildFrame\",\n\t\"GossipTitleButton1\",\n\t\"GossipTitleButton2\",\n\t\"GossipTitleButton3\",\n\t\"GossipTitleButton4\",\n\t\"GossipTitleButton5\",\n\t\"GossipTitleButton6\",\n\t\"GossipTitleButton7\",\n\t\"GossipTitleButton8\",\n\t\"GossipTitleButton9\",\n\t\"GossipTitleButton10\",\n\t\"GossipTitleButton11\",\n\t\"GossipTitleButton12\",\n\t\"GossipTitleButton13\",\n\t\"GossipTitleButton14\",\n\t\"GossipTitleButton15\",\n\t\"GossipTitleButton16\",\n\t\"GossipTitleButton17\",\n\t\"GossipTitleButton18\",\n\t\"GossipTitleButton19\",\n\t\"GossipTitleButton20\",\n\t\"GossipTitleButton21\",\n\t\"GossipTitleButton22\",\n\t\"GossipTitleButton23\",\n\t\"GossipTitleButton24\",\n\t\"GossipTitleButton25\",\n\t\"GossipTitleButton26\",\n\t\"GossipTitleButton27\",\n\t\"GossipTitleButton28\",\n\t\"GossipTitleButton29\",\n\t\"GossipTitleButton30\",\n\t\"GossipTitleButton31\",\n\t\"GossipTitleButton32\",\n\t\"GossipSpacerFrame\",\n\t\"GossipGreetingScrollFrameScrollBar\",\n\t\"GossipGreetingScrollFrameScrollBarScrollUpButton\",\n\t\"GossipGreetingScrollFrameScrollBarScrollDownButton\",\n\t\"MailFrame\",\n\t\"InboxFrame\",\n\t\"InboxTooMuchMail\",\n\t\"MailItem1\",\n\t\"MailItem1ExpireTime\",\n\t\"MailItem1Button\",\n\t\"MailItem2\",\n\t\"MailItem2ExpireTime\",\n\t\"MailItem2Button\",\n\t\"MailItem3\",\n\t\"MailItem3ExpireTime\",\n\t\"MailItem3Button\",\n\t\"MailItem4\",\n\t\"MailItem4ExpireTime\",\n\t\"MailItem4Button\",\n\t\"MailItem5\",\n\t\"MailItem5ExpireTime\",\n\t\"MailItem5Button\",\n\t\"MailItem6\",\n\t\"MailItem6ExpireTime\",\n\t\"MailItem6Button\",\n\t\"MailItem7\",\n\t\"MailItem7ExpireTime\",\n\t\"MailItem7Button\",\n\t\"InboxPrevPageButton\",\n\t\"InboxNextPageButton\",\n\t\"SendMailFrame\",\n\t\"SendMailScrollFrame\",\n\t\"SendMailScrollChildFrame\",\n\t\"SendMailBodyEditBox\",\n\t\"SendMailScrollFrameScrollBar\",\n\t\"SendMailScrollFrameScrollBarScrollUpButton\",\n\t\"SendMailScrollFrameScrollBarScrollDownButton\",\n\t\"SendMailNameEditBox\",\n\t\"SendMailCostMoneyFrame\",\n\t\"SendMailCostMoneyFrameCopperButton\",\n\t\"SendMailCostMoneyFrameSilverButton\",\n\t\"SendMailCostMoneyFrameGoldButton\",\n\t\"SendMailSubjectEditBox\",\n\t\"SendMailAttachment1\",\n\t\"SendMailAttachment2\",\n\t\"SendMailAttachment3\",\n\t\"SendMailAttachment4\",\n\t\"SendMailAttachment5\",\n\t\"SendMailAttachment6\",\n\t\"SendMailAttachment7\",\n\t\"SendMailAttachment8\",\n\t\"SendMailAttachment9\",\n\t\"SendMailAttachment10\",\n\t\"SendMailAttachment11\",\n\t\"SendMailAttachment12\",\n\t\"SendMailAttachment13\",\n\t\"SendMailAttachment14\",\n\t\"SendMailAttachment15\",\n\t\"SendMailAttachment16\",\n\t\"SendMailMoneyButton\",\n\t\"SendMailMoney\",\n\t\"SendMailMoneyGold\",\n\t\"SendMailMoneySilver\",\n\t\"SendMailMoneyCopper\",\n\t\"SendMailSendMoneyButton\",\n\t\"SendMailCODButton\",\n\t\"SendMailMoneyFrame\",\n\t\"SendMailMoneyFrameCopperButton\",\n\t\"SendMailMoneyFrameSilverButton\",\n\t\"SendMailMoneyFrameGoldButton\",\n\t\"SendMailCancelButton\",\n\t\"SendMailMailButton\",\n\t\"SendMailFrameLockSendMail\",\n\t\"InboxCloseButton\",\n\t\"MailFrameTab1\",\n\t\"MailFrameTab2\",\n\t\"StationeryPopupFrame\",\n\t\"StationeryPopupScrollFrame\",\n\t\"StationeryPopupScrollFrameScrollChildFrame\",\n\t\"StationeryPopupScrollFrameScrollBar\",\n\t\"StationeryPopupScrollFrameScrollBarScrollUpButton\",\n\t\"StationeryPopupScrollFrameScrollBarScrollDownButton\",\n\t\"StationeryPopupButton1\",\n\t\"StationeryPopupButton1MoneyFrame\",\n\t\"StationeryPopupButton1MoneyFrameCopperButton\",\n\t\"StationeryPopupButton1MoneyFrameSilverButton\",\n\t\"StationeryPopupButton1MoneyFrameGoldButton\",\n\t\"StationeryPopupButton2\",\n\t\"StationeryPopupButton2MoneyFrame\",\n\t\"StationeryPopupButton2MoneyFrameCopperButton\",\n\t\"StationeryPopupButton2MoneyFrameSilverButton\",\n\t\"StationeryPopupButton2MoneyFrameGoldButton\",\n\t\"StationeryPopupButton3\",\n\t\"StationeryPopupButton3MoneyFrame\",\n\t\"StationeryPopupButton3MoneyFrameCopperButton\",\n\t\"StationeryPopupButton3MoneyFrameSilverButton\",\n\t\"StationeryPopupButton3MoneyFrameGoldButton\",\n\t\"StationeryPopupButton4\",\n\t\"StationeryPopupButton4MoneyFrame\",\n\t\"StationeryPopupButton4MoneyFrameCopperButton\",\n\t\"StationeryPopupButton4MoneyFrameSilverButton\",\n\t\"StationeryPopupButton4MoneyFrameGoldButton\",\n\t\"StationeryPopupButton5\",\n\t\"StationeryPopupButton5MoneyFrame\",\n\t\"StationeryPopupButton5MoneyFrameCopperButton\",\n\t\"StationeryPopupButton5MoneyFrameSilverButton\",\n\t\"StationeryPopupButton5MoneyFrameGoldButton\",\n\t\"StationeryPopupCancelButton\",\n\t\"StationeryPopupOkayButton\",\n\t\"OpenMailFrame\",\n\t\"OpenMailReportSpamButton\",\n\t\"OpenMailScrollFrame\",\n\t\"OpenMailScrollChildFrame\",\n\t\"OpenMailInvoiceFrame\",\n\t\"OpenMailTransactionAmountMoneyFrame\",\n\t\"OpenMailTransactionAmountMoneyFrameCopperButton\",\n\t\"OpenMailTransactionAmountMoneyFrameSilverButton\",\n\t\"OpenMailTransactionAmountMoneyFrameGoldButton\",\n\t\"OpenMailDepositMoneyFrame\",\n\t\"OpenMailDepositMoneyFrameCopperButton\",\n\t\"OpenMailDepositMoneyFrameSilverButton\",\n\t\"OpenMailDepositMoneyFrameGoldButton\",\n\t\"OpenMailHouseCutMoneyFrame\",\n\t\"OpenMailHouseCutMoneyFrameCopperButton\",\n\t\"OpenMailHouseCutMoneyFrameSilverButton\",\n\t\"OpenMailHouseCutMoneyFrameGoldButton\",\n\t\"OpenMailSalePriceMoneyFrame\",\n\t\"OpenMailSalePriceMoneyFrameCopperButton\",\n\t\"OpenMailSalePriceMoneyFrameSilverButton\",\n\t\"OpenMailSalePriceMoneyFrameGoldButton\",\n\t\"OpenMailScrollFrameScrollBar\",\n\t\"OpenMailScrollFrameScrollBarScrollUpButton\",\n\t\"OpenMailScrollFrameScrollBarScrollDownButton\",\n\t\"OpenMailLetterButton\",\n\t\"OpenMailAttachmentButton1\",\n\t\"OpenMailAttachmentButton2\",\n\t\"OpenMailAttachmentButton3\",\n\t\"OpenMailAttachmentButton4\",\n\t\"OpenMailAttachmentButton5\",\n\t\"OpenMailAttachmentButton6\",\n\t\"OpenMailAttachmentButton7\",\n\t\"OpenMailAttachmentButton8\",\n\t\"OpenMailAttachmentButton9\",\n\t\"OpenMailAttachmentButton10\",\n\t\"OpenMailAttachmentButton11\",\n\t\"OpenMailAttachmentButton12\",\n\t\"OpenMailAttachmentButton13\",\n\t\"OpenMailAttachmentButton14\",\n\t\"OpenMailAttachmentButton15\",\n\t\"OpenMailAttachmentButton16\",\n\t\"OpenMailMoneyButton\",\n\t\"OpenMailCancelButton\",\n\t\"OpenMailDeleteButton\",\n\t\"OpenMailReplyButton\",\n\t\"OpenMailCloseButton\",\n\t\"PetStableFrame\",\n\t\"PetStableModel\",\n\t\"PetStableModelRotateLeftButton\",\n\t\"PetStableModelRotateRightButton\",\n\t\"PetStablePetInfo\",\n\t\"PetStableCurrentPet\",\n\t\"PetStableStabledPet1\",\n\t\"PetStableStabledPet2\",\n\t\"PetStableStabledPet3\",\n\t\"PetStableStabledPet4\",\n\t\"PetStablePurchaseButton\",\n\t\"PetStableMoneyFrame\",\n\t\"PetStableMoneyFrameCopperButton\",\n\t\"PetStableMoneyFrameSilverButton\",\n\t\"PetStableMoneyFrameGoldButton\",\n\t\"PetStableCostMoneyFrame\",\n\t\"PetStableCostMoneyFrameCopperButton\",\n\t\"PetStableCostMoneyFrameSilverButton\",\n\t\"PetStableCostMoneyFrameGoldButton\",\n\t\"PetStableFrameCloseButton\",\n\t\"DurabilityFrame\",\n\t\"WorldStateAlwaysUpFrame\",\n\t\"WorldStateScoreFrame\",\n\t\"WorldStateScoreFrameClass\",\n\t\"WorldStateScoreFrameName\",\n\t\"WorldStateScoreFrameTeam\",\n\t\"WorldStateScoreFrameKB\",\n\t\"WorldStateScoreFrameDeaths\",\n\t\"WorldStateScoreFrameHK\",\n\t\"WorldStateScoreFrameDamageDone\",\n\t\"WorldStateScoreFrameHealingDone\",\n\t\"WorldStateScoreFrameTeamSkill\",\n\t\"WorldStateScoreFrameHonorGained\",\n\t\"WorldStateScoreColumn1\",\n\t\"WorldStateScoreColumn2\",\n\t\"WorldStateScoreColumn3\",\n\t\"WorldStateScoreColumn4\",\n\t\"WorldStateScoreColumn5\",\n\t\"WorldStateScoreColumn6\",\n\t\"WorldStateScoreColumn7\",\n\t\"ScorePlayerDropDown\",\n\t\"ScorePlayerDropDownButton\",\n\t\"WorldStateScoreButton1\",\n\t\"WorldStateScoreButton1ClassButton\",\n\t\"WorldStateScoreButton1Name\",\n\t\"WorldStateScoreButton2\",\n\t\"WorldStateScoreButton2ClassButton\",\n\t\"WorldStateScoreButton2Name\",\n\t\"WorldStateScoreButton3\",\n\t\"WorldStateScoreButton3ClassButton\",\n\t\"WorldStateScoreButton3Name\",\n\t\"WorldStateScoreButton4\",\n\t\"WorldStateScoreButton4ClassButton\",\n\t\"WorldStateScoreButton4Name\",\n\t\"WorldStateScoreButton5\",\n\t\"WorldStateScoreButton5ClassButton\",\n\t\"WorldStateScoreButton5Name\",\n\t\"WorldStateScoreButton6\",\n\t\"WorldStateScoreButton6ClassButton\",\n\t\"WorldStateScoreButton6Name\",\n\t\"WorldStateScoreButton7\",\n\t\"WorldStateScoreButton7ClassButton\",\n\t\"WorldStateScoreButton7Name\",\n\t\"WorldStateScoreButton8\",\n\t\"WorldStateScoreButton8ClassButton\",\n\t\"WorldStateScoreButton8Name\",\n\t\"WorldStateScoreButton9\",\n\t\"WorldStateScoreButton9ClassButton\",\n\t\"WorldStateScoreButton9Name\",\n\t\"WorldStateScoreButton10\",\n\t\"WorldStateScoreButton10ClassButton\",\n\t\"WorldStateScoreButton10Name\",\n\t\"WorldStateScoreButton11\",\n\t\"WorldStateScoreButton11ClassButton\",\n\t\"WorldStateScoreButton11Name\",\n\t\"WorldStateScoreButton12\",\n\t\"WorldStateScoreButton12ClassButton\",\n\t\"WorldStateScoreButton12Name\",\n\t\"WorldStateScoreButton13\",\n\t\"WorldStateScoreButton13ClassButton\",\n\t\"WorldStateScoreButton13Name\",\n\t\"WorldStateScoreButton14\",\n\t\"WorldStateScoreButton14ClassButton\",\n\t\"WorldStateScoreButton14Name\",\n\t\"WorldStateScoreButton15\",\n\t\"WorldStateScoreButton15ClassButton\",\n\t\"WorldStateScoreButton15Name\",\n\t\"WorldStateScoreButton16\",\n\t\"WorldStateScoreButton16ClassButton\",\n\t\"WorldStateScoreButton16Name\",\n\t\"WorldStateScoreButton17\",\n\t\"WorldStateScoreButton17ClassButton\",\n\t\"WorldStateScoreButton17Name\",\n\t\"WorldStateScoreButton18\",\n\t\"WorldStateScoreButton18ClassButton\",\n\t\"WorldStateScoreButton18Name\",\n\t\"WorldStateScoreButton19\",\n\t\"WorldStateScoreButton19ClassButton\",\n\t\"WorldStateScoreButton19Name\",\n\t\"WorldStateScoreButton20\",\n\t\"WorldStateScoreButton20ClassButton\",\n\t\"WorldStateScoreButton20Name\",\n\t\"WorldStateScoreScrollFrame\",\n\t\"WorldStateScoreScrollFrameScrollChildFrame\",\n\t\"WorldStateScoreScrollFrameScrollBar\",\n\t\"WorldStateScoreScrollFrameScrollBarScrollUpButton\",\n\t\"WorldStateScoreScrollFrameScrollBarScrollDownButton\",\n\t\"WorldStateScoreFrameCloseButton\",\n\t\"WorldStateScoreFrameTab1\",\n\t\"WorldStateScoreFrameTab2\",\n\t\"WorldStateScoreFrameTab3\",\n\t\"WorldStateScoreFrameLeaveButton\",\n\t\"WorldStateScoreWinnerFrame\",\n\t\"DressUpFrame\",\n\t\"DressUpFrameCloseButton\",\n\t\"DressUpFrameCancelButton\",\n\t\"DressUpFrameResetButton\",\n\t\"DressUpModel\",\n\t\"DressUpModelRotateLeftButton\",\n\t\"DressUpModelRotateRightButton\",\n\t\"RaidWarningFrame\",\n\t\"RaidBossEmoteFrame\",\n\t\"PVPParentFrame\",\n\t\"PVPParentFrameCloseButton\",\n\t\"PVPFrame\",\n\t\"PVPFrameOffSeason\",\n\t\"PVPFrameHonor\",\n\t\"PVPFrameArena\",\n\t\"PVPHonor\",\n\t\"PVPTeam1Standard\",\n\t\"PVPTeam1\",\n\t\"PVPTeam1Highlight\",\n\t\"PVPTeam1Data\",\n\t\"PVPTeam2Standard\",\n\t\"PVPTeam2\",\n\t\"PVPTeam2Highlight\",\n\t\"PVPTeam2Data\",\n\t\"PVPTeam3Standard\",\n\t\"PVPTeam3\",\n\t\"PVPTeam3Highlight\",\n\t\"PVPTeam3Data\",\n\t\"PVPFrameToggleButton\",\n\t\"PVPTeamDetails\",\n\t\"PVPDropDown\",\n\t\"PVPDropDownButton\",\n\t\"PVPTeamDetailsCloseButton\",\n\t\"PVPTeamDetailsFrameColumnHeader1\",\n\t\"PVPTeamDetailsFrameColumnHeader2\",\n\t\"PVPTeamDetailsFrameColumnHeader3\",\n\t\"PVPTeamDetailsFrameColumnHeader4\",\n\t\"PVPTeamDetailsFrameColumnHeader5\",\n\t\"PVPTeamDetailsButton1\",\n\t\"PVPTeamDetailsButton1Name\",\n\t\"PVPTeamDetailsButton1Class\",\n\t\"PVPTeamDetailsButton1Played\",\n\t\"PVPTeamDetailsButton1WinLoss\",\n\t\"PVPTeamDetailsButton1Rating\",\n\t\"PVPTeamDetailsButton2\",\n\t\"PVPTeamDetailsButton2Name\",\n\t\"PVPTeamDetailsButton2Class\",\n\t\"PVPTeamDetailsButton2Played\",\n\t\"PVPTeamDetailsButton2WinLoss\",\n\t\"PVPTeamDetailsButton2Rating\",\n\t\"PVPTeamDetailsButton3\",\n\t\"PVPTeamDetailsButton3Name\",\n\t\"PVPTeamDetailsButton3Class\",\n\t\"PVPTeamDetailsButton3Played\",\n\t\"PVPTeamDetailsButton3WinLoss\",\n\t\"PVPTeamDetailsButton3Rating\",\n\t\"PVPTeamDetailsButton4\",\n\t\"PVPTeamDetailsButton4Name\",\n\t\"PVPTeamDetailsButton4Class\",\n\t\"PVPTeamDetailsButton4Played\",\n\t\"PVPTeamDetailsButton4WinLoss\",\n\t\"PVPTeamDetailsButton4Rating\",\n\t\"PVPTeamDetailsButton5\",\n\t\"PVPTeamDetailsButton5Name\",\n\t\"PVPTeamDetailsButton5Class\",\n\t\"PVPTeamDetailsButton5Played\",\n\t\"PVPTeamDetailsButton5WinLoss\",\n\t\"PVPTeamDetailsButton5Rating\",\n\t\"PVPTeamDetailsButton6\",\n\t\"PVPTeamDetailsButton6Name\",\n\t\"PVPTeamDetailsButton6Class\",\n\t\"PVPTeamDetailsButton6Played\",\n\t\"PVPTeamDetailsButton6WinLoss\",\n\t\"PVPTeamDetailsButton6Rating\",\n\t\"PVPTeamDetailsButton7\",\n\t\"PVPTeamDetailsButton7Name\",\n\t\"PVPTeamDetailsButton7Class\",\n\t\"PVPTeamDetailsButton7Played\",\n\t\"PVPTeamDetailsButton7WinLoss\",\n\t\"PVPTeamDetailsButton7Rating\",\n\t\"PVPTeamDetailsButton8\",\n\t\"PVPTeamDetailsButton8Name\",\n\t\"PVPTeamDetailsButton8Class\",\n\t\"PVPTeamDetailsButton8Played\",\n\t\"PVPTeamDetailsButton8WinLoss\",\n\t\"PVPTeamDetailsButton8Rating\",\n\t\"PVPTeamDetailsButton9\",\n\t\"PVPTeamDetailsButton9Name\",\n\t\"PVPTeamDetailsButton9Class\",\n\t\"PVPTeamDetailsButton9Played\",\n\t\"PVPTeamDetailsButton9WinLoss\",\n\t\"PVPTeamDetailsButton9Rating\",\n\t\"PVPTeamDetailsButton10\",\n\t\"PVPTeamDetailsButton10Name\",\n\t\"PVPTeamDetailsButton10Class\",\n\t\"PVPTeamDetailsButton10Played\",\n\t\"PVPTeamDetailsButton10WinLoss\",\n\t\"PVPTeamDetailsButton10Rating\",\n\t\"PVPTeamDetailsAddTeamMember\",\n\t\"PVPTeamDetailsToggleButton\",\n\t\"PVPParentFrameTab1\",\n\t\"PVPParentFrameTab2\",\n\t\"PVPBattlegroundFrame\",\n\t\"WintergraspTimer\",\n\t\"BattlegroundType1\",\n\t\"BattlegroundType2\",\n\t\"BattlegroundType3\",\n\t\"BattlegroundType4\",\n\t\"BattlegroundType5\",\n\t\"PVPBattlegroundFrameTypeScrollFrame\",\n\t\"PVPBattlegroundFrameTypeScrollFrameScrollChildFrame\",\n\t\"PVPBattlegroundFrameTypeScrollFrameScrollBar\",\n\t\"PVPBattlegroundFrameTypeScrollFrameScrollBarScrollUpButton\",\n\t\"PVPBattlegroundFrameTypeScrollFrameScrollBarScrollDownButton\",\n\t\"PVPBattlegroundFrameCancelButton\",\n\t\"PVPBattlegroundFrameInfoScrollFrame\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrame\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfo\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfoWinReward\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfoLossReward\",\n\t\"PVPBattlegroundFrameInfoScrollFrameScrollBar\",\n\t\"PVPBattlegroundFrameInfoScrollFrameScrollBarScrollUpButton\",\n\t\"PVPBattlegroundFrameInfoScrollFrameScrollBarScrollDownButton\",\n\t\"PVPBattlegroundFrameJoinButton\",\n\t\"PVPBattlegroundFrameGroupJoinButton\",\n\t\"ArenaFrame\",\n\t\"ArenaZone1\",\n\t\"ArenaZone2\",\n\t\"ArenaZone3\",\n\t\"ArenaZone4\",\n\t\"ArenaZone5\",\n\t\"ArenaZone6\",\n\t\"ArenaFrameCancelButton\",\n\t\"ArenaFrameJoinButton\",\n\t\"ArenaFrameGroupJoinButton\",\n\t\"ArenaFrameCloseButton\",\n\t\"ArenaRegistrarFrame\",\n\t\"ArenaRegistrarNpcNameFrame\",\n\t\"ArenaRegistrarFrameCloseButton\",\n\t\"ArenaRegistrarGreetingFrame\",\n\t\"ArenaRegistrarFrameGoodbyeButton\",\n\t\"ArenaRegistrarButton1\",\n\t\"ArenaRegistrarButton2\",\n\t\"ArenaRegistrarButton3\",\n\t\"ArenaRegistrarButton4\",\n\t\"ArenaRegistrarButton5\",\n\t\"ArenaRegistrarButton6\",\n\t\"ArenaRegistrarPurchaseFrame\",\n\t\"ArenaRegistrarMoneyFrame\",\n\t\"ArenaRegistrarMoneyFrameCopperButton\",\n\t\"ArenaRegistrarMoneyFrameSilverButton\",\n\t\"ArenaRegistrarMoneyFrameGoldButton\",\n\t\"ArenaRegistrarFrameCancelButton\",\n\t\"ArenaRegistrarFramePurchaseButton\",\n\t\"ArenaRegistrarFrameEditBox\",\n\t\"PVPBannerFrame\",\n\t\"PVPBannerFrameStandard\",\n\t\"PVPBannerFrameCustomizationFrame\",\n\t\"PVPBannerFrameCustomization1\",\n\t\"PVPBannerFrameCustomization1LeftButton\",\n\t\"PVPBannerFrameCustomization1RightButton\",\n\t\"PVPBannerFrameCustomization2\",\n\t\"PVPBannerFrameCustomization2LeftButton\",\n\t\"PVPBannerFrameCustomization2RightButton\",\n\t\"PVPColorPickerButton1\",\n\t\"PVPColorPickerButton2\",\n\t\"PVPColorPickerButton3\",\n\t\"PVPBannerFrameCancelButton\",\n\t\"PVPBannerFrameSaveButton\",\n\t\"PVPBannerFrameAcceptButton\",\n\t\"PVPBannerFrameCancelButton\",\n\t\"PVPBannerFrameCloseButton\",\n\t\"LFGEventFrame\",\n\t\"LFDDungeonReadyPopup\",\n\t\"LFDDungeonReadyStatus\",\n\t\"LFDDungeonReadyStatusCloseButton\",\n\t\"LFDDungeonReadyStatusPlayer1\",\n\t\"LFDDungeonReadyStatusPlayer2\",\n\t\"LFDDungeonReadyStatusPlayer3\",\n\t\"LFDDungeonReadyStatusPlayer4\",\n\t\"LFDDungeonReadyStatusPlayer5\",\n\t\"LFDDungeonReadyDialog\",\n\t\"LFDDungeonReadyDialogCloseButton\",\n\t\"LFDDungeonReadyDialogEnterDungeonButton\",\n\t\"LFDDungeonReadyDialogLeaveQueueButton\",\n\t\"LFDDungeonReadyDialogRoleIcon\",\n\t\"LFDDungeonReadyDialogRandomInProgressFrame\",\n\t\"LFDDungeonReadyDialogInstanceInfoFrame\",\n\t\"LFDDungeonReadyDialogRewardsFrame\",\n\t\"LFDDungeonReadyDialogRewardsFrameReward1\",\n\t\"LFDDungeonReadyDialogRewardsFrameReward2\",\n\t\"LFDRoleCheckPopup\",\n\t\"LFDRoleCheckPopupRoleButtonTank\",\n\t\"LFDRoleCheckPopupRoleButtonHealer\",\n\t\"LFDRoleCheckPopupRoleButtonDPS\",\n\t\"LFDRoleCheckPopupAcceptButton\",\n\t\"LFDRoleCheckPopupDeclineButton\",\n\t\"LFDRoleCheckPopupDescription\",\n\t\"LFDSearchStatus\",\n\t\"LFDSearchStatusTank1\",\n\t\"LFDSearchStatusHealer1\",\n\t\"LFDSearchStatusDamage1\",\n\t\"LFDSearchStatusDamage2\",\n\t\"LFDSearchStatusDamage3\",\n\t\"LFDParentFrame\",\n\t\"LFDQueueFrame\",\n\t\"LFDQueueFrameRoleButtonTank\",\n\t\"LFDQueueFrameRoleButtonHealer\",\n\t\"LFDQueueFrameRoleButtonDPS\",\n\t\"LFDQueueFrameRoleButtonLeader\",\n\t\"LFDQueueFrameTypeDropDown\",\n\t\"LFDQueueFrameTypeDropDownButton\",\n\t\"LFDQueueFrameRandom\",\n\t\"LFDQueueFrameRandomScrollFrame\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrame\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameItem1\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameMoneyFrame\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameMoneyFrameCopperButton\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameMoneyFrameSilverButton\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameMoneyFrameGoldButton\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameSpacer\",\n\t\"LFDQueueFrameRandomScrollFrameScrollBar\",\n\t\"LFDQueueFrameRandomScrollFrameScrollBarScrollUpButton\",\n\t\"LFDQueueFrameRandomScrollFrameScrollBarScrollDownButton\",\n\t\"LFDQueueFrameSpecific\",\n\t\"LFDQueueFrameSpecificListButton1\",\n\t\"LFDQueueFrameSpecificListButton1EnableButton\",\n\t\"LFDQueueFrameSpecificListButton1ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton2\",\n\t\"LFDQueueFrameSpecificListButton2EnableButton\",\n\t\"LFDQueueFrameSpecificListButton2ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton3\",\n\t\"LFDQueueFrameSpecificListButton3EnableButton\",\n\t\"LFDQueueFrameSpecificListButton3ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton4\",\n\t\"LFDQueueFrameSpecificListButton4EnableButton\",\n\t\"LFDQueueFrameSpecificListButton4ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton5\",\n\t\"LFDQueueFrameSpecificListButton5EnableButton\",\n\t\"LFDQueueFrameSpecificListButton5ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton6\",\n\t\"LFDQueueFrameSpecificListButton6EnableButton\",\n\t\"LFDQueueFrameSpecificListButton6ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton7\",\n\t\"LFDQueueFrameSpecificListButton7EnableButton\",\n\t\"LFDQueueFrameSpecificListButton7ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton8\",\n\t\"LFDQueueFrameSpecificListButton8EnableButton\",\n\t\"LFDQueueFrameSpecificListButton8ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton9\",\n\t\"LFDQueueFrameSpecificListButton9EnableButton\",\n\t\"LFDQueueFrameSpecificListButton9ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton10\",\n\t\"LFDQueueFrameSpecificListButton10EnableButton\",\n\t\"LFDQueueFrameSpecificListButton10ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton11\",\n\t\"LFDQueueFrameSpecificListButton11EnableButton\",\n\t\"LFDQueueFrameSpecificListButton11ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton12\",\n\t\"LFDQueueFrameSpecificListButton12EnableButton\",\n\t\"LFDQueueFrameSpecificListButton12ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton13\",\n\t\"LFDQueueFrameSpecificListButton13EnableButton\",\n\t\"LFDQueueFrameSpecificListButton13ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton14\",\n\t\"LFDQueueFrameSpecificListButton14EnableButton\",\n\t\"LFDQueueFrameSpecificListButton14ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListButton15\",\n\t\"LFDQueueFrameSpecificListButton15EnableButton\",\n\t\"LFDQueueFrameSpecificListButton15ExpandOrCollapseButton\",\n\t\"LFDQueueFrameSpecificListScrollFrame\",\n\t\"LFDQueueFrameSpecificListScrollFrameScrollChildFrame\",\n\t\"LFDQueueFrameSpecificListScrollFrameScrollBar\",\n\t\"LFDQueueFrameSpecificListScrollFrameScrollBarScrollUpButton\",\n\t\"LFDQueueFrameSpecificListScrollFrameScrollBarScrollDownButton\",\n\t\"LFDQueueFrameFindGroupButton\",\n\t\"LFDQueueFrameCancelButton\",\n\t\"LFDQueueFrameCooldownFrame\",\n\t\"LFDQueueFramePartyBackfill\",\n\t\"LFDQueueFramePartyBackfillBackfillButton\",\n\t\"LFDQueueFramePartyBackfillNoBackfillButton\",\n\t\"LFDQueueFrameNoLFDWhileLFR\",\n\t\"LFDQueueFrameNoLFDWhileLFRLeaveQueueButton\",\n\t\"LFDParentFramePortrait\",\n\t\"LFRParentFrame\",\n\t\"LFRQueueFrame\",\n\t\"LFRQueueFrameRoleButtonTank\",\n\t\"LFRQueueFrameRoleButtonHealer\",\n\t\"LFRQueueFrameRoleButtonDPS\",\n\t\"LFRQueueFrameComment\",\n\t\"LFRQueueFrameCommentTextButton\",\n\t\"LFRQueueFrameSpecific\",\n\t\"LFRQueueFrameSpecificListButton1\",\n\t\"LFRQueueFrameSpecificListButton1EnableButton\",\n\t\"LFRQueueFrameSpecificListButton1ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton2\",\n\t\"LFRQueueFrameSpecificListButton2EnableButton\",\n\t\"LFRQueueFrameSpecificListButton2ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton3\",\n\t\"LFRQueueFrameSpecificListButton3EnableButton\",\n\t\"LFRQueueFrameSpecificListButton3ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton4\",\n\t\"LFRQueueFrameSpecificListButton4EnableButton\",\n\t\"LFRQueueFrameSpecificListButton4ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton5\",\n\t\"LFRQueueFrameSpecificListButton5EnableButton\",\n\t\"LFRQueueFrameSpecificListButton5ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton6\",\n\t\"LFRQueueFrameSpecificListButton6EnableButton\",\n\t\"LFRQueueFrameSpecificListButton6ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton7\",\n\t\"LFRQueueFrameSpecificListButton7EnableButton\",\n\t\"LFRQueueFrameSpecificListButton7ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton8\",\n\t\"LFRQueueFrameSpecificListButton8EnableButton\",\n\t\"LFRQueueFrameSpecificListButton8ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton9\",\n\t\"LFRQueueFrameSpecificListButton9EnableButton\",\n\t\"LFRQueueFrameSpecificListButton9ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton10\",\n\t\"LFRQueueFrameSpecificListButton10EnableButton\",\n\t\"LFRQueueFrameSpecificListButton10ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton11\",\n\t\"LFRQueueFrameSpecificListButton11EnableButton\",\n\t\"LFRQueueFrameSpecificListButton11ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton12\",\n\t\"LFRQueueFrameSpecificListButton12EnableButton\",\n\t\"LFRQueueFrameSpecificListButton12ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton13\",\n\t\"LFRQueueFrameSpecificListButton13EnableButton\",\n\t\"LFRQueueFrameSpecificListButton13ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListButton14\",\n\t\"LFRQueueFrameSpecificListButton14EnableButton\",\n\t\"LFRQueueFrameSpecificListButton14ExpandOrCollapseButton\",\n\t\"LFRQueueFrameSpecificListScrollFrame\",\n\t\"LFRQueueFrameSpecificListScrollFrameScrollChildFrame\",\n\t\"LFRQueueFrameSpecificListScrollFrameScrollBar\",\n\t\"LFRQueueFrameSpecificListScrollFrameScrollBarScrollUpButton\",\n\t\"LFRQueueFrameSpecificListScrollFrameScrollBarScrollDownButton\",\n\t\"LFRQueueFrameFindGroupButton\",\n\t\"LFRQueueFrameAcceptCommentButton\",\n\t\"LFRQueueFrameNoLFRWhileLFD\",\n\t\"LFRQueueFrameNoLFRWhileLFDLeaveQueueButton\",\n\t\"LFRBrowseFrame\",\n\t\"LFRBrowseFrameRaidDropDown\",\n\t\"LFRBrowseFrameRaidDropDownButton\",\n\t\"LFRBrowseFrameColumnHeader1\",\n\t\"LFRBrowseFrameColumnHeader2\",\n\t\"LFRBrowseFrameColumnHeader3\",\n\t\"LFRBrowseFrameColumnHeader4\",\n\t\"LFRBrowseFrameColumnHeader5\",\n\t\"LFRBrowseFrameColumnHeader6\",\n\t\"LFRBrowseFrameColumnHeader7\",\n\t\"LFRBrowseFrameListButton1\",\n\t\"LFRBrowseFrameListButton2\",\n\t\"LFRBrowseFrameListButton3\",\n\t\"LFRBrowseFrameListButton4\",\n\t\"LFRBrowseFrameListButton5\",\n\t\"LFRBrowseFrameListButton6\",\n\t\"LFRBrowseFrameListButton7\",\n\t\"LFRBrowseFrameListButton8\",\n\t\"LFRBrowseFrameListButton9\",\n\t\"LFRBrowseFrameListButton10\",\n\t\"LFRBrowseFrameListButton11\",\n\t\"LFRBrowseFrameListButton12\",\n\t\"LFRBrowseFrameListButton13\",\n\t\"LFRBrowseFrameListButton14\",\n\t\"LFRBrowseFrameListButton15\",\n\t\"LFRBrowseFrameListButton16\",\n\t\"LFRBrowseFrameListButton17\",\n\t\"LFRBrowseFrameListButton18\",\n\t\"LFRBrowseFrameListButton19\",\n\t\"LFRBrowseFrameListScrollFrame\",\n\t\"LFRBrowseFrameListScrollFrameScrollChildFrame\",\n\t\"LFRBrowseFrameListScrollFrameScrollBar\",\n\t\"LFRBrowseFrameListScrollFrameScrollBarScrollUpButton\",\n\t\"LFRBrowseFrameListScrollFrameScrollBarScrollDownButton\",\n\t\"LFRBrowseFrameSendMessageButton\",\n\t\"LFRBrowseFrameInviteButton\",\n\t\"LFRBrowseFrameRefreshButton\",\n\t\"LFRParentFrameTab1\",\n\t\"LFRParentFrameTab2\",\n\t\"MovieProgressFrame\",\n\t\"MovieProgressBar\",\n\t\"MovieRecordingCancelButton\",\n\t\"MacOptionsFrame\",\n\t\"MacOptionsFrameMovieRecording\",\n\t\"MacOptionsFrameResolutionDropDown\",\n\t\"MacOptionsFrameResolutionDropDownButton\",\n\t\"MacOptionsFrameFramerateDropDown\",\n\t\"MacOptionsFrameFramerateDropDownButton\",\n\t\"MacOptionsFrameCodecDropDown\",\n\t\"MacOptionsFrameCodecDropDownButton\",\n\t\"MacOptionsFrameQualitySlider\",\n\t\"MacOptionsFrameCheckButton1\",\n\t\"MacOptionsFrameCheckButton3\",\n\t\"MacOptionsFrameCheckButton2\",\n\t\"MacOptionsFrameCheckButton4\",\n\t\"MacOptionsFrameCheckButton5\",\n\t\"MacOptionsFrameCheckButton6\",\n\t\"MacOptionsButtonCompress\",\n\t\"MovieRecordingFrameTextTooltip1\",\n\t\"MovieRecordingFrameTextTooltip2\",\n\t\"MacOptionsITunesRemote\",\n\t\"MacOptionsFrameCheckButton7\",\n\t\"MacOptionsFrameCheckButton8\",\n\t\"MacOptionsFrameCancel\",\n\t\"MacOptionsFrameOkay\",\n\t\"MacOptionsFrameDefaults\",\n\t\"MacOptionsButtonKeybindings\",\n\t\"MacOptionsCompressFrame\",\n\t\"MacOptionsCompressFrameDelete\",\n\t\"MacOptionsCompressFrameSkip\",\n\t\"MacOptionsCompressFrameCompress\",\n\t\"MacOptionsCancelFrame\",\n\t\"MacOptionsCancelFrameNo\",\n\t\"MacOptionsCancelFrameYes\",\n\t\"FolderPicker\",\n\t\"FolderPickerButton01\",\n\t\"RatingMenuFrame\",\n\t\"RatingMenuButtonOkay\",\n\t\"RuneFrame\",\n\t\"RuneButtonIndividual1\",\n\t\"RuneButtonIndividual1Cooldown\",\n\t\"RuneButtonIndividual1Border\",\n\t\"RuneButtonIndividual1Shine\",\n\t\"RuneButtonIndividual2\",\n\t\"RuneButtonIndividual2Cooldown\",\n\t\"RuneButtonIndividual2Border\",\n\t\"RuneButtonIndividual2Shine\",\n\t\"RuneButtonIndividual3\",\n\t\"RuneButtonIndividual3Cooldown\",\n\t\"RuneButtonIndividual3Border\",\n\t\"RuneButtonIndividual3Shine\",\n\t\"RuneButtonIndividual4\",\n\t\"RuneButtonIndividual4Cooldown\",\n\t\"RuneButtonIndividual4Border\",\n\t\"RuneButtonIndividual4Shine\",\n\t\"RuneButtonIndividual5\",\n\t\"RuneButtonIndividual5Cooldown\",\n\t\"RuneButtonIndividual5Border\",\n\t\"RuneButtonIndividual5Shine\",\n\t\"RuneButtonIndividual6\",\n\t\"RuneButtonIndividual6Cooldown\",\n\t\"RuneButtonIndividual6Border\",\n\t\"RuneButtonIndividual6Shine\",\n\t\"ChatConfigFrame\",\n\t\"ChatConfigCategoryFrame\",\n\t\"ChatConfigCategoryFrameButton1\",\n\t\"ChatConfigCategoryFrameButton2\",\n\t\"ChatConfigCategoryFrameButton3\",\n\t\"ChatConfigCategoryFrameButton4\",\n\t\"ChatConfigBackgroundFrame\",\n\t\"ChatConfigChatSettings\",\n\t\"ChatConfigChatSettingsLeft\",\n\t\"ChatConfigChatSettingsClassColorLegend\",\n\t\"ChatConfigChannelSettings\",\n\t\"ChatConfigChannelSettingsLeft\",\n\t\"ChatConfigChannelSettingsClassColorLegend\",\n\t\"ChatConfigOtherSettings\",\n\t\"ChatConfigOtherSettingsCombat\",\n\t\"ChatConfigOtherSettingsPVP\",\n\t\"ChatConfigOtherSettingsSystem\",\n\t\"ChatConfigOtherSettingsCreature\",\n\t\"ChatConfigCombatSettings\",\n\t\"ChatConfigCombatSettingsFilters\",\n\t\"ChatConfigCombatSettingsFiltersScrollFrame\",\n\t\"ChatConfigCombatSettingsFiltersScrollFrameScrollChildFrame\",\n\t\"ChatConfigCombatSettingsFiltersScrollFrameScrollBar\",\n\t\"ChatConfigCombatSettingsFiltersScrollFrameScrollBarScrollUpButton\",\n\t\"ChatConfigCombatSettingsFiltersScrollFrameScrollBarScrollDownButton\",\n\t\"ChatConfigCombatSettingsFiltersScrollFrameScrollBarBorder\",\n\t\"ChatConfigCombatSettingsFiltersButton1\",\n\t\"ChatConfigCombatSettingsFiltersButton2\",\n\t\"ChatConfigCombatSettingsFiltersButton3\",\n\t\"ChatConfigCombatSettingsFiltersButton4\",\n\t\"ChatConfigCombatSettingsFiltersDeleteButton\",\n\t\"ChatConfigCombatSettingsFiltersAddFilterButton\",\n\t\"ChatConfigCombatSettingsFiltersCopyFilterButton\",\n\t\"ChatConfigMoveFilterUpButton\",\n\t\"ChatConfigMoveFilterDownButton\",\n\t\"CombatConfigMessageSources\",\n\t\"CombatConfigMessageSourcesDoneBy\",\n\t\"CombatConfigMessageSourcesDoneTo\",\n\t\"CombatConfigMessageTypes\",\n\t\"CombatConfigMessageTypesLeft\",\n\t\"CombatConfigMessageTypesRight\",\n\t\"CombatConfigMessageTypesMisc\",\n\t\"CombatConfigColors\",\n\t\"CombatConfigColorsUnitColors\",\n\t\"CombatConfigColorsHighlighting\",\n\t\"CombatConfigColorsHighlightingLine\",\n\t\"CombatConfigColorsHighlightingAbility\",\n\t\"CombatConfigColorsHighlightingDamage\",\n\t\"CombatConfigColorsHighlightingSchool\",\n\t\"CombatConfigColorsColorize\",\n\t\"CombatConfigColorsColorizeUnitName\",\n\t\"CombatConfigColorsColorizeUnitNameCheck\",\n\t\"CombatConfigColorsColorizeSpellNames\",\n\t\"CombatConfigColorsColorizeSpellNamesCheck\",\n\t\"CombatConfigColorsColorizeSpellNamesSchoolColoring\",\n\t\"CombatConfigColorsColorizeSpellNamesColorSwatch\",\n\t\"CombatConfigColorsColorizeDamageNumber\",\n\t\"CombatConfigColorsColorizeDamageNumberCheck\",\n\t\"CombatConfigColorsColorizeDamageNumberSchoolColoring\",\n\t\"CombatConfigColorsColorizeDamageNumberColorSwatch\",\n\t\"CombatConfigColorsColorizeDamageSchool\",\n\t\"CombatConfigColorsColorizeDamageSchoolCheck\",\n\t\"CombatConfigColorsColorizeEntireLine\",\n\t\"CombatConfigColorsColorizeEntireLineCheck\",\n\t\"CombatConfigColorsColorizeEntireLineBySource\",\n\t\"CombatConfigColorsColorizeEntireLineByTarget\",\n\t\"CombatConfigFormatting\",\n\t\"CombatConfigFormattingShowTimeStamp\",\n\t\"CombatConfigFormattingShowBraces\",\n\t\"CombatConfigFormattingUnitNames\",\n\t\"CombatConfigFormattingSpellNames\",\n\t\"CombatConfigFormattingItemNames\",\n\t\"CombatConfigFormattingFullText\",\n\t\"CombatConfigSettings\",\n\t\"CombatConfigSettingsNameEditBox\",\n\t\"CombatConfigSettingsSaveButton\",\n\t\"CombatConfigSettingsShowQuickButton\",\n\t\"CombatConfigSettingsSolo\",\n\t\"CombatConfigSettingsParty\",\n\t\"CombatConfigSettingsRaid\",\n\t\"CombatConfigTab1\",\n\t\"CombatConfigTab2\",\n\t\"CombatConfigTab3\",\n\t\"CombatConfigTab4\",\n\t\"CombatConfigTab5\",\n\t\"ChatConfigFrameDefaultButton\",\n\t\"CombatLogDefaultButton\",\n\t\"ChatConfigFrameCancelButton\",\n\t\"ChatConfigFrameOkayButton\",\n\t\"MovieFrame\",\n\t\"VehicleSeatIndicator\",\n\t\"VehicleSeatIndicatorDropDown\",\n\t\"VehicleSeatIndicatorDropDownButton\",\n\t\"VehicleMenuBar\",\n\t\"VehicleMenuBarPitchUpButton\",\n\t\"VehicleMenuBarPitchDownButton\",\n\t\"VehicleMenuBarLeaveButton\",\n\t\"VehicleMenuBarActionButtonFrame\",\n\t\"VehicleMenuBarActionButton1\",\n\t\"VehicleMenuBarActionButton1Cooldown\",\n\t\"VehicleMenuBarActionButton2\",\n\t\"VehicleMenuBarActionButton2Cooldown\",\n\t\"VehicleMenuBarActionButton3\",\n\t\"VehicleMenuBarActionButton3Cooldown\",\n\t\"VehicleMenuBarActionButton4\",\n\t\"VehicleMenuBarActionButton4Cooldown\",\n\t\"VehicleMenuBarActionButton5\",\n\t\"VehicleMenuBarActionButton5Cooldown\",\n\t\"VehicleMenuBarActionButton6\",\n\t\"VehicleMenuBarActionButton6Cooldown\",\n\t\"VehicleMenuBarPitchSlider\",\n\t\"VehicleMenuBarArtFrame\",\n\t\"VehicleMenuBarHealthBar\",\n\t\"VehicleMenuBarPowerBar\",\n\t\"PlayerFrameAlternateManaBar\",\n\t\"TokenFrame\",\n\t\"TokenFrameContainer\",\n\t\"TokenFrameContainerScrollChild\",\n\t\"TokenFrameContainerScrollBar\",\n\t\"TokenFrameContainerScrollBarScrollUpButton\",\n\t\"TokenFrameContainerScrollBarScrollDownButton\",\n\t\"TokenFrameMoneyFrame\",\n\t\"TokenFrameMoneyFrameCopperButton\",\n\t\"TokenFrameMoneyFrameSilverButton\",\n\t\"TokenFrameMoneyFrameGoldButton\",\n\t\"TokenFrameCancelButton\",\n\t\"TokenFrameContainerButton1\",\n\t\"TokenFrameContainerButton2\",\n\t\"TokenFrameContainerButton3\",\n\t\"TokenFrameContainerButton4\",\n\t\"TokenFrameContainerButton5\",\n\t\"TokenFrameContainerButton6\",\n\t\"TokenFrameContainerButton7\",\n\t\"TokenFrameContainerButton8\",\n\t\"TokenFrameContainerButton9\",\n\t\"TokenFrameContainerButton10\",\n\t\"TokenFrameContainerButton11\",\n\t\"TokenFrameContainerButton12\",\n\t\"TokenFrameContainerButton13\",\n\t\"TokenFrameContainerButton14\",\n\t\"TokenFrameContainerButton15\",\n\t\"TokenFrameContainerButton16\",\n\t\"TokenFrameContainerButton17\",\n\t\"TokenFrameContainerButton18\",\n\t\"TokenFrameContainerButton19\",\n\t\"TokenFrameContainerButton20\",\n\t\"TokenFrameContainerButton21\",\n\t\"TokenFramePopup\",\n\t\"TokenFramePopupInactiveCheckBox\",\n\t\"TokenFramePopupBackpackCheckBox\",\n\t\"TokenFramePopupCloseButton\",\n\t\"BackpackTokenFrame\",\n\t\"BackpackTokenFrameToken1\",\n\t\"BackpackTokenFrameToken2\",\n\t\"BackpackTokenFrameToken3\",\n\t\"CombatLogUpdateFrame\",\n\t\"CombatLogQuickButtonFrame\",\n\t\"CombatLogDropDown\",\n\t\"CombatLogDropDownButton\",\n\t\"CombatLogQuickButtonFrame_Custom\",\n\t\"CombatLogQuickButtonFrame_CustomProgressBar\",\n\t\"CombatLogQuickButtonFrame_CustomAdditionalFilterButton\",\n\t\"CombatLogQuickButtonFrameButton1\",\n\t\"CombatLogQuickButtonFrameButton2\",\n\t\"CombatLogQuickButtonFrameButton3\",\n\t\"TimeManagerFrame\",\n\t\"TimeManagerCloseButton\",\n\t\"TimeManagerStopwatchFrame\",\n\t\"TimeManagerStopwatchCheck\",\n\t\"TimeManagerAlarmTimeFrame\",\n\t\"TimeManagerAlarmHourDropDown\",\n\t\"TimeManagerAlarmHourDropDownButton\",\n\t\"TimeManagerAlarmMinuteDropDown\",\n\t\"TimeManagerAlarmMinuteDropDownButton\",\n\t\"TimeManagerAlarmAMPMDropDown\",\n\t\"TimeManagerAlarmAMPMDropDownButton\",\n\t\"TimeManagerAlarmMessageFrame\",\n\t\"TimeManagerAlarmMessageEditBox\",\n\t\"TimeManagerAlarmEnabledButton\",\n\t\"TimeManagerMilitaryTimeCheck\",\n\t\"TimeManagerLocalTimeCheck\",\n\t\"DropDownList1Button20\",\n\t\"DropDownList1Button20ColorSwatch\",\n\t\"DropDownList1Button20ExpandArrow\",\n\t\"DropDownList1Button20InvisibleButton\",\n\t\"DropDownList2Button20\",\n\t\"DropDownList2Button20ColorSwatch\",\n\t\"DropDownList2Button20ExpandArrow\",\n\t\"DropDownList2Button20InvisibleButton\",\n\t\"DropDownList1Button21\",\n\t\"DropDownList1Button21ColorSwatch\",\n\t\"DropDownList1Button21ExpandArrow\",\n\t\"DropDownList1Button21InvisibleButton\",\n\t\"DropDownList2Button21\",\n\t\"DropDownList2Button21ColorSwatch\",\n\t\"DropDownList2Button21ExpandArrow\",\n\t\"DropDownList2Button21InvisibleButton\",\n\t\"DropDownList1Button22\",\n\t\"DropDownList1Button22ColorSwatch\",\n\t\"DropDownList1Button22ExpandArrow\",\n\t\"DropDownList1Button22InvisibleButton\",\n\t\"DropDownList2Button22\",\n\t\"DropDownList2Button22ColorSwatch\",\n\t\"DropDownList2Button22ExpandArrow\",\n\t\"DropDownList2Button22InvisibleButton\",\n\t\"DropDownList1Button23\",\n\t\"DropDownList1Button23ColorSwatch\",\n\t\"DropDownList1Button23ExpandArrow\",\n\t\"DropDownList1Button23InvisibleButton\",\n\t\"DropDownList2Button23\",\n\t\"DropDownList2Button23ColorSwatch\",\n\t\"DropDownList2Button23ExpandArrow\",\n\t\"DropDownList2Button23InvisibleButton\",\n\t\"DropDownList1Button24\",\n\t\"DropDownList1Button24ColorSwatch\",\n\t\"DropDownList1Button24ExpandArrow\",\n\t\"DropDownList1Button24InvisibleButton\",\n\t\"DropDownList2Button24\",\n\t\"DropDownList2Button24ColorSwatch\",\n\t\"DropDownList2Button24ExpandArrow\",\n\t\"DropDownList2Button24InvisibleButton\",\n\t\"TimeManagerClockButton\",\n\t\"StopwatchFrame\",\n\t\"StopwatchTicker\",\n\t\"StopwatchTabFrame\",\n\t\"StopwatchCloseButton\",\n\t\"StopwatchResetButton\",\n\t\"StopwatchPlayPauseButton\",\n\t\"CombatText\",\n\t\"ChannelPulloutRosterButton1\",\n\t\"ChannelPulloutRosterButton1Speaker\",\n\t\"ChannelPulloutRosterButton2\",\n\t\"ChannelPulloutRosterButton2Speaker\",\n\t\"ChannelPulloutRosterButton3\",\n\t\"ChannelPulloutRosterButton3Speaker\",\n\t\"ChannelPulloutRosterButton4\",\n\t\"ChannelPulloutRosterButton4Speaker\",\n\t\"ChannelPulloutRosterButton5\",\n\t\"ChannelPulloutRosterButton5Speaker\",\n\t\"ChatConfigChatSettingsLeftCheckBox1\",\n\t\"ChatConfigChatSettingsLeftCheckBox1Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox1ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox1ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox2\",\n\t\"ChatConfigChatSettingsLeftCheckBox2Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox2ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox2ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox3\",\n\t\"ChatConfigChatSettingsLeftCheckBox3Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox3ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox3ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox4\",\n\t\"ChatConfigChatSettingsLeftCheckBox4Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox4ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox4ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox5\",\n\t\"ChatConfigChatSettingsLeftCheckBox5Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox5ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox5ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox6\",\n\t\"ChatConfigChatSettingsLeftCheckBox6Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox6ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox6ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox7\",\n\t\"ChatConfigChatSettingsLeftCheckBox7Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox7ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox7ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox8\",\n\t\"ChatConfigChatSettingsLeftCheckBox8Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox8ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox8ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox9\",\n\t\"ChatConfigChatSettingsLeftCheckBox9Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox9ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox9ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox10\",\n\t\"ChatConfigChatSettingsLeftCheckBox10Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox10ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox10ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox11\",\n\t\"ChatConfigChatSettingsLeftCheckBox11Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox11ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox11ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox12\",\n\t\"ChatConfigChatSettingsLeftCheckBox12Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox12ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox12ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox13\",\n\t\"ChatConfigChatSettingsLeftCheckBox13Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox13ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox13ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox14\",\n\t\"ChatConfigChatSettingsLeftCheckBox14Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox14ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox14ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox15\",\n\t\"ChatConfigChatSettingsLeftCheckBox15Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox15ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox15ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox16\",\n\t\"ChatConfigChatSettingsLeftCheckBox16Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox16ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox16ColorClasses\",\n\t\"ChatConfigChatSettingsLeftCheckBox17\",\n\t\"ChatConfigChatSettingsLeftCheckBox17Check\",\n\t\"ChatConfigChatSettingsLeftCheckBox17ColorSwatch\",\n\t\"ChatConfigChatSettingsLeftCheckBox17ColorClasses\",\n\t\"ChatConfigOtherSettingsCombatCheckBox1\",\n\t\"ChatConfigOtherSettingsCombatCheckBox1Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox1ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox2\",\n\t\"ChatConfigOtherSettingsCombatCheckBox2Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox2ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox3\",\n\t\"ChatConfigOtherSettingsCombatCheckBox3Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox3ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox4\",\n\t\"ChatConfigOtherSettingsCombatCheckBox4Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox4ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox5\",\n\t\"ChatConfigOtherSettingsCombatCheckBox5Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox5ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox6\",\n\t\"ChatConfigOtherSettingsCombatCheckBox6Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox6ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox7\",\n\t\"ChatConfigOtherSettingsCombatCheckBox7Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox7ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox8\",\n\t\"ChatConfigOtherSettingsCombatCheckBox8Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox8ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox9\",\n\t\"ChatConfigOtherSettingsCombatCheckBox9Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox9ColorSwatch\",\n\t\"ChatConfigOtherSettingsCombatCheckBox10\",\n\t\"ChatConfigOtherSettingsCombatCheckBox10Check\",\n\t\"ChatConfigOtherSettingsCombatCheckBox10ColorSwatch\",\n\t\"ChatConfigOtherSettingsPVPCheckBox1\",\n\t\"ChatConfigOtherSettingsPVPCheckBox1Check\",\n\t\"ChatConfigOtherSettingsPVPCheckBox1ColorSwatch\",\n\t\"ChatConfigOtherSettingsPVPCheckBox2\",\n\t\"ChatConfigOtherSettingsPVPCheckBox2Check\",\n\t\"ChatConfigOtherSettingsPVPCheckBox2ColorSwatch\",\n\t\"ChatConfigOtherSettingsPVPCheckBox3\",\n\t\"ChatConfigOtherSettingsPVPCheckBox3Check\",\n\t\"ChatConfigOtherSettingsPVPCheckBox3ColorSwatch\",\n\t\"ChatConfigOtherSettingsSystemCheckBox1\",\n\t\"ChatConfigOtherSettingsSystemCheckBox1Check\",\n\t\"ChatConfigOtherSettingsSystemCheckBox1ColorSwatch\",\n\t\"ChatConfigOtherSettingsSystemCheckBox2\",\n\t\"ChatConfigOtherSettingsSystemCheckBox2Check\",\n\t\"ChatConfigOtherSettingsSystemCheckBox2ColorSwatch\",\n\t\"ChatConfigOtherSettingsSystemCheckBox3\",\n\t\"ChatConfigOtherSettingsSystemCheckBox3Check\",\n\t\"ChatConfigOtherSettingsSystemCheckBox3ColorSwatch\",\n\t\"ChatConfigOtherSettingsSystemCheckBox4\",\n\t\"ChatConfigOtherSettingsSystemCheckBox4Check\",\n\t\"ChatConfigOtherSettingsSystemCheckBox4ColorSwatch\",\n\t\"ChatConfigOtherSettingsSystemCheckBox5\",\n\t\"ChatConfigOtherSettingsSystemCheckBox5Check\",\n\t\"ChatConfigOtherSettingsSystemCheckBox5ColorSwatch\",\n\t\"ChatConfigOtherSettingsSystemCheckBox6\",\n\t\"ChatConfigOtherSettingsSystemCheckBox6Check\",\n\t\"ChatConfigOtherSettingsSystemCheckBox6ColorSwatch\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox1\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox1Check\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox1ColorSwatch\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox2\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox2Check\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox2ColorSwatch\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox3\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox3Check\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox3ColorSwatch\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox4\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox4Check\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox4ColorSwatch\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox5\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox5Check\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox5ColorSwatch\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox6\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox6Check\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox6ColorSwatch\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox1\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox1Check\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox2\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox2Check\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox3\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox3Check\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox4\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox4Check\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox5\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox5Check\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox6\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox6Check\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox7\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox7Check\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox1\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox1Check\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox2\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox2Check\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox3\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox3Check\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox4\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox4Check\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox5\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox5Check\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox6\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox6Check\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox7\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox7Check\",\n\t\"CombatConfigMessageTypesLeftCheckBox1\",\n\t\"CombatConfigMessageTypesLeftCheckBox1_1\",\n\t\"CombatConfigMessageTypesLeftCheckBox1_2\",\n\t\"CombatConfigMessageTypesLeftCheckBox2\",\n\t\"CombatConfigMessageTypesLeftCheckBox2_1\",\n\t\"CombatConfigMessageTypesLeftCheckBox2_2\",\n\t\"CombatConfigMessageTypesLeftCheckBox3\",\n\t\"CombatConfigMessageTypesLeftCheckBox3_1\",\n\t\"CombatConfigMessageTypesLeftCheckBox3_2\",\n\t\"CombatConfigMessageTypesLeftCheckBox3_3\",\n\t\"CombatConfigMessageTypesLeftCheckBox3_4\",\n\t\"CombatConfigMessageTypesLeftCheckBox4\",\n\t\"CombatConfigMessageTypesLeftCheckBox4_1\",\n\t\"CombatConfigMessageTypesLeftCheckBox4_2\",\n\t\"CombatConfigMessageTypesLeftCheckBox4_3\",\n\t\"CombatConfigMessageTypesLeftCheckBox4_4\",\n\t\"CombatConfigMessageTypesRightCheckBox1\",\n\t\"CombatConfigMessageTypesRightCheckBox1_1\",\n\t\"CombatConfigMessageTypesRightCheckBox1_2\",\n\t\"CombatConfigMessageTypesRightCheckBox1_3\",\n\t\"CombatConfigMessageTypesRightCheckBox1_4\",\n\t\"CombatConfigMessageTypesRightCheckBox1_5\",\n\t\"CombatConfigMessageTypesRightCheckBox1_6\",\n\t\"CombatConfigMessageTypesRightCheckBox1_7\",\n\t\"CombatConfigMessageTypesRightCheckBox1_8\",\n\t\"CombatConfigMessageTypesRightCheckBox1_9\",\n\t\"CombatConfigMessageTypesRightCheckBox1_10\",\n\t\"CombatConfigMessageTypesRightCheckBox2\",\n\t\"CombatConfigMessageTypesRightCheckBox2_1\",\n\t\"CombatConfigMessageTypesRightCheckBox2_2\",\n\t\"CombatConfigMessageTypesRightCheckBox2_3\",\n\t\"CombatConfigMessageTypesMiscCheckBox1\",\n\t\"CombatConfigMessageTypesMiscCheckBox2\",\n\t\"CombatConfigMessageTypesMiscCheckBox3\",\n\t\"CombatConfigMessageTypesMiscCheckBox4\",\n\t\"CombatConfigColorsUnitColorsSwatch1\",\n\t\"CombatConfigColorsUnitColorsSwatch1ColorSwatch\",\n\t\"CombatConfigColorsUnitColorsSwatch2\",\n\t\"CombatConfigColorsUnitColorsSwatch2ColorSwatch\",\n\t\"CombatConfigColorsUnitColorsSwatch3\",\n\t\"CombatConfigColorsUnitColorsSwatch3ColorSwatch\",\n\t\"CombatConfigColorsUnitColorsSwatch4\",\n\t\"CombatConfigColorsUnitColorsSwatch4ColorSwatch\",\n\t\"CombatConfigColorsUnitColorsSwatch5\",\n\t\"CombatConfigColorsUnitColorsSwatch5ColorSwatch\",\n\t\"CombatConfigColorsUnitColorsSwatch6\",\n\t\"CombatConfigColorsUnitColorsSwatch6ColorSwatch\",\n\t\"CombatConfigColorsUnitColorsSwatch7\",\n\t\"CombatConfigColorsUnitColorsSwatch7ColorSwatch\",\n\t\"PlayerTitlePickerScrollFrameButton8\",\n\t\"BuffButton1\",\n\t\"BuffButton2\",\n\t\"RaidFrameRaidBrowserButton\",\n\t\"RaidFrameReadyCheckButton\",\n\t\"RaidClassButton13\",\n\t\"RaidClassButton12\",\n\t\"RaidClassButton11\",\n\t\"RaidClassButton10\",\n\t\"RaidClassButton9\",\n\t\"RaidClassButton8\",\n\t\"RaidClassButton7\",\n\t\"RaidClassButton6\",\n\t\"RaidClassButton5\",\n\t\"RaidClassButton4\",\n\t\"RaidClassButton3\",\n\t\"RaidClassButton2\",\n\t\"RaidClassButton1\",\n\t\"RaidGroup1\",\n\t\"RaidGroup1Label\",\n\t\"RaidGroup1Slot1\",\n\t\"RaidGroup1Slot2\",\n\t\"RaidGroup1Slot3\",\n\t\"RaidGroup1Slot4\",\n\t\"RaidGroup1Slot5\",\n\t\"RaidGroup2\",\n\t\"RaidGroup2Label\",\n\t\"RaidGroup2Slot1\",\n\t\"RaidGroup2Slot2\",\n\t\"RaidGroup2Slot3\",\n\t\"RaidGroup2Slot4\",\n\t\"RaidGroup2Slot5\",\n\t\"RaidGroup3\",\n\t\"RaidGroup3Label\",\n\t\"RaidGroup3Slot1\",\n\t\"RaidGroup3Slot2\",\n\t\"RaidGroup3Slot3\",\n\t\"RaidGroup3Slot4\",\n\t\"RaidGroup3Slot5\",\n\t\"RaidGroup4\",\n\t\"RaidGroup4Label\",\n\t\"RaidGroup4Slot1\",\n\t\"RaidGroup4Slot2\",\n\t\"RaidGroup4Slot3\",\n\t\"RaidGroup4Slot4\",\n\t\"RaidGroup4Slot5\",\n\t\"RaidGroup5\",\n\t\"RaidGroup5Label\",\n\t\"RaidGroup5Slot1\",\n\t\"RaidGroup5Slot2\",\n\t\"RaidGroup5Slot3\",\n\t\"RaidGroup5Slot4\",\n\t\"RaidGroup5Slot5\",\n\t\"RaidGroup6\",\n\t\"RaidGroup6Label\",\n\t\"RaidGroup6Slot1\",\n\t\"RaidGroup6Slot2\",\n\t\"RaidGroup6Slot3\",\n\t\"RaidGroup6Slot4\",\n\t\"RaidGroup6Slot5\",\n\t\"RaidGroup7\",\n\t\"RaidGroup7Label\",\n\t\"RaidGroup7Slot1\",\n\t\"RaidGroup7Slot2\",\n\t\"RaidGroup7Slot3\",\n\t\"RaidGroup7Slot4\",\n\t\"RaidGroup7Slot5\",\n\t\"RaidGroup8\",\n\t\"RaidGroup8Label\",\n\t\"RaidGroup8Slot1\",\n\t\"RaidGroup8Slot2\",\n\t\"RaidGroup8Slot3\",\n\t\"RaidGroup8Slot4\",\n\t\"RaidGroup8Slot5\",\n\t\"RaidGroupButton1\",\n\t\"RaidGroupButton1Rank\",\n\t\"RaidGroupButton1Role\",\n\t\"RaidGroupButton1Loot\",\n\t\"RaidGroupButton1ReadyCheck\",\n\t\"RaidGroupButton2\",\n\t\"RaidGroupButton2Rank\",\n\t\"RaidGroupButton2Role\",\n\t\"RaidGroupButton2Loot\",\n\t\"RaidGroupButton2ReadyCheck\",\n\t\"RaidGroupButton3\",\n\t\"RaidGroupButton3Rank\",\n\t\"RaidGroupButton3Role\",\n\t\"RaidGroupButton3Loot\",\n\t\"RaidGroupButton3ReadyCheck\",\n\t\"RaidGroupButton4\",\n\t\"RaidGroupButton4Rank\",\n\t\"RaidGroupButton4Role\",\n\t\"RaidGroupButton4Loot\",\n\t\"RaidGroupButton4ReadyCheck\",\n\t\"RaidGroupButton5\",\n\t\"RaidGroupButton5Rank\",\n\t\"RaidGroupButton5Role\",\n\t\"RaidGroupButton5Loot\",\n\t\"RaidGroupButton5ReadyCheck\",\n\t\"RaidGroupButton6\",\n\t\"RaidGroupButton6Rank\",\n\t\"RaidGroupButton6Role\",\n\t\"RaidGroupButton6Loot\",\n\t\"RaidGroupButton6ReadyCheck\",\n\t\"RaidGroupButton7\",\n\t\"RaidGroupButton7Rank\",\n\t\"RaidGroupButton7Role\",\n\t\"RaidGroupButton7Loot\",\n\t\"RaidGroupButton7ReadyCheck\",\n\t\"RaidGroupButton8\",\n\t\"RaidGroupButton8Rank\",\n\t\"RaidGroupButton8Role\",\n\t\"RaidGroupButton8Loot\",\n\t\"RaidGroupButton8ReadyCheck\",\n\t\"RaidGroupButton9\",\n\t\"RaidGroupButton9Rank\",\n\t\"RaidGroupButton9Role\",\n\t\"RaidGroupButton9Loot\",\n\t\"RaidGroupButton9ReadyCheck\",\n\t\"RaidGroupButton10\",\n\t\"RaidGroupButton10Rank\",\n\t\"RaidGroupButton10Role\",\n\t\"RaidGroupButton10Loot\",\n\t\"RaidGroupButton10ReadyCheck\",\n\t\"RaidGroupButton11\",\n\t\"RaidGroupButton11Rank\",\n\t\"RaidGroupButton11Role\",\n\t\"RaidGroupButton11Loot\",\n\t\"RaidGroupButton11ReadyCheck\",\n\t\"RaidGroupButton12\",\n\t\"RaidGroupButton12Rank\",\n\t\"RaidGroupButton12Role\",\n\t\"RaidGroupButton12Loot\",\n\t\"RaidGroupButton12ReadyCheck\",\n\t\"RaidGroupButton13\",\n\t\"RaidGroupButton13Rank\",\n\t\"RaidGroupButton13Role\",\n\t\"RaidGroupButton13Loot\",\n\t\"RaidGroupButton13ReadyCheck\",\n\t\"RaidGroupButton14\",\n\t\"RaidGroupButton14Rank\",\n\t\"RaidGroupButton14Role\",\n\t\"RaidGroupButton14Loot\",\n\t\"RaidGroupButton14ReadyCheck\",\n\t\"RaidGroupButton15\",\n\t\"RaidGroupButton15Rank\",\n\t\"RaidGroupButton15Role\",\n\t\"RaidGroupButton15Loot\",\n\t\"RaidGroupButton15ReadyCheck\",\n\t\"RaidGroupButton16\",\n\t\"RaidGroupButton16Rank\",\n\t\"RaidGroupButton16Role\",\n\t\"RaidGroupButton16Loot\",\n\t\"RaidGroupButton16ReadyCheck\",\n\t\"RaidGroupButton17\",\n\t\"RaidGroupButton17Rank\",\n\t\"RaidGroupButton17Role\",\n\t\"RaidGroupButton17Loot\",\n\t\"RaidGroupButton17ReadyCheck\",\n\t\"RaidGroupButton18\",\n\t\"RaidGroupButton18Rank\",\n\t\"RaidGroupButton18Role\",\n\t\"RaidGroupButton18Loot\",\n\t\"RaidGroupButton18ReadyCheck\",\n\t\"RaidGroupButton19\",\n\t\"RaidGroupButton19Rank\",\n\t\"RaidGroupButton19Role\",\n\t\"RaidGroupButton19Loot\",\n\t\"RaidGroupButton19ReadyCheck\",\n\t\"RaidGroupButton20\",\n\t\"RaidGroupButton20Rank\",\n\t\"RaidGroupButton20Role\",\n\t\"RaidGroupButton20Loot\",\n\t\"RaidGroupButton20ReadyCheck\",\n\t\"RaidGroupButton21\",\n\t\"RaidGroupButton21Rank\",\n\t\"RaidGroupButton21Role\",\n\t\"RaidGroupButton21Loot\",\n\t\"RaidGroupButton21ReadyCheck\",\n\t\"RaidGroupButton22\",\n\t\"RaidGroupButton22Rank\",\n\t\"RaidGroupButton22Role\",\n\t\"RaidGroupButton22Loot\",\n\t\"RaidGroupButton22ReadyCheck\",\n\t\"RaidGroupButton23\",\n\t\"RaidGroupButton23Rank\",\n\t\"RaidGroupButton23Role\",\n\t\"RaidGroupButton23Loot\",\n\t\"RaidGroupButton23ReadyCheck\",\n\t\"RaidGroupButton24\",\n\t\"RaidGroupButton24Rank\",\n\t\"RaidGroupButton24Role\",\n\t\"RaidGroupButton24Loot\",\n\t\"RaidGroupButton24ReadyCheck\",\n\t\"RaidGroupButton25\",\n\t\"RaidGroupButton25Rank\",\n\t\"RaidGroupButton25Role\",\n\t\"RaidGroupButton25Loot\",\n\t\"RaidGroupButton25ReadyCheck\",\n\t\"RaidGroupButton26\",\n\t\"RaidGroupButton26Rank\",\n\t\"RaidGroupButton26Role\",\n\t\"RaidGroupButton26Loot\",\n\t\"RaidGroupButton26ReadyCheck\",\n\t\"RaidGroupButton27\",\n\t\"RaidGroupButton27Rank\",\n\t\"RaidGroupButton27Role\",\n\t\"RaidGroupButton27Loot\",\n\t\"RaidGroupButton27ReadyCheck\",\n\t\"RaidGroupButton28\",\n\t\"RaidGroupButton28Rank\",\n\t\"RaidGroupButton28Role\",\n\t\"RaidGroupButton28Loot\",\n\t\"RaidGroupButton28ReadyCheck\",\n\t\"RaidGroupButton29\",\n\t\"RaidGroupButton29Rank\",\n\t\"RaidGroupButton29Role\",\n\t\"RaidGroupButton29Loot\",\n\t\"RaidGroupButton29ReadyCheck\",\n\t\"RaidGroupButton30\",\n\t\"RaidGroupButton30Rank\",\n\t\"RaidGroupButton30Role\",\n\t\"RaidGroupButton30Loot\",\n\t\"RaidGroupButton30ReadyCheck\",\n\t\"RaidGroupButton31\",\n\t\"RaidGroupButton31Rank\",\n\t\"RaidGroupButton31Role\",\n\t\"RaidGroupButton31Loot\",\n\t\"RaidGroupButton31ReadyCheck\",\n\t\"RaidGroupButton32\",\n\t\"RaidGroupButton32Rank\",\n\t\"RaidGroupButton32Role\",\n\t\"RaidGroupButton32Loot\",\n\t\"RaidGroupButton32ReadyCheck\",\n\t\"RaidGroupButton33\",\n\t\"RaidGroupButton33Rank\",\n\t\"RaidGroupButton33Role\",\n\t\"RaidGroupButton33Loot\",\n\t\"RaidGroupButton33ReadyCheck\",\n\t\"RaidGroupButton34\",\n\t\"RaidGroupButton34Rank\",\n\t\"RaidGroupButton34Role\",\n\t\"RaidGroupButton34Loot\",\n\t\"RaidGroupButton34ReadyCheck\",\n\t\"RaidGroupButton35\",\n\t\"RaidGroupButton35Rank\",\n\t\"RaidGroupButton35Role\",\n\t\"RaidGroupButton35Loot\",\n\t\"RaidGroupButton35ReadyCheck\",\n\t\"RaidGroupButton36\",\n\t\"RaidGroupButton36Rank\",\n\t\"RaidGroupButton36Role\",\n\t\"RaidGroupButton36Loot\",\n\t\"RaidGroupButton36ReadyCheck\",\n\t\"RaidGroupButton37\",\n\t\"RaidGroupButton37Rank\",\n\t\"RaidGroupButton37Role\",\n\t\"RaidGroupButton37Loot\",\n\t\"RaidGroupButton37ReadyCheck\",\n\t\"RaidGroupButton38\",\n\t\"RaidGroupButton38Rank\",\n\t\"RaidGroupButton38Role\",\n\t\"RaidGroupButton38Loot\",\n\t\"RaidGroupButton38ReadyCheck\",\n\t\"RaidGroupButton39\",\n\t\"RaidGroupButton39Rank\",\n\t\"RaidGroupButton39Role\",\n\t\"RaidGroupButton39Loot\",\n\t\"RaidGroupButton39ReadyCheck\",\n\t\"RaidGroupButton40\",\n\t\"RaidGroupButton40Rank\",\n\t\"RaidGroupButton40Role\",\n\t\"RaidGroupButton40Loot\",\n\t\"RaidGroupButton40ReadyCheck\",\n\t-- widgets: FrameXML, Blizzard_CombatLog, Blizzard_CombatText, Blizzard_RaidUI, Blizzard_TimeManager, Blizzard_TokenUI\n\t\"AchievementCriteriaFont\",\n\t\"AchievementDateFont\",\n\t\"AchievementDescriptionFont\",\n\t\"AchievementFont_Small\",\n\t\"AchievementPointsFont\",\n\t\"AchievementPointsFontSmall\",\n\t\"ActionButton10Border\",\n\t\"ActionButton10Count\",\n\t\"ActionButton10Flash\",\n\t\"ActionButton10HotKey\",\n\t\"ActionButton10Icon\",\n\t\"ActionButton10Name\",\n\t\"ActionButton10NormalTexture\",\n\t\"ActionButton11Border\",\n\t\"ActionButton11Count\",\n\t\"ActionButton11Flash\",\n\t\"ActionButton11HotKey\",\n\t\"ActionButton11Icon\",\n\t\"ActionButton11Name\",\n\t\"ActionButton11NormalTexture\",\n\t\"ActionButton12Border\",\n\t\"ActionButton12Count\",\n\t\"ActionButton12Flash\",\n\t\"ActionButton12HotKey\",\n\t\"ActionButton12Icon\",\n\t\"ActionButton12Name\",\n\t\"ActionButton12NormalTexture\",\n\t\"ActionButton1Border\",\n\t\"ActionButton1Count\",\n\t\"ActionButton1Flash\",\n\t\"ActionButton1HotKey\",\n\t\"ActionButton1Icon\",\n\t\"ActionButton1Name\",\n\t\"ActionButton1NormalTexture\",\n\t\"ActionButton2Border\",\n\t\"ActionButton2Count\",\n\t\"ActionButton2Flash\",\n\t\"ActionButton2HotKey\",\n\t\"ActionButton2Icon\",\n\t\"ActionButton2Name\",\n\t\"ActionButton2NormalTexture\",\n\t\"ActionButton3Border\",\n\t\"ActionButton3Count\",\n\t\"ActionButton3Flash\",\n\t\"ActionButton3HotKey\",\n\t\"ActionButton3Icon\",\n\t\"ActionButton3Name\",\n\t\"ActionButton3NormalTexture\",\n\t\"ActionButton4Border\",\n\t\"ActionButton4Count\",\n\t\"ActionButton4Flash\",\n\t\"ActionButton4HotKey\",\n\t\"ActionButton4Icon\",\n\t\"ActionButton4Name\",\n\t\"ActionButton4NormalTexture\",\n\t\"ActionButton5Border\",\n\t\"ActionButton5Count\",\n\t\"ActionButton5Flash\",\n\t\"ActionButton5HotKey\",\n\t\"ActionButton5Icon\",\n\t\"ActionButton5Name\",\n\t\"ActionButton5NormalTexture\",\n\t\"ActionButton6Border\",\n\t\"ActionButton6Count\",\n\t\"ActionButton6Flash\",\n\t\"ActionButton6HotKey\",\n\t\"ActionButton6Icon\",\n\t\"ActionButton6Name\",\n\t\"ActionButton6NormalTexture\",\n\t\"ActionButton7Border\",\n\t\"ActionButton7Count\",\n\t\"ActionButton7Flash\",\n\t\"ActionButton7HotKey\",\n\t\"ActionButton7Icon\",\n\t\"ActionButton7Name\",\n\t\"ActionButton7NormalTexture\",\n\t\"ActionButton8Border\",\n\t\"ActionButton8Count\",\n\t\"ActionButton8Flash\",\n\t\"ActionButton8HotKey\",\n\t\"ActionButton8Icon\",\n\t\"ActionButton8Name\",\n\t\"ActionButton8NormalTexture\",\n\t\"ActionButton9Border\",\n\t\"ActionButton9Count\",\n\t\"ActionButton9Flash\",\n\t\"ActionButton9HotKey\",\n\t\"ActionButton9Icon\",\n\t\"ActionButton9Name\",\n\t\"ActionButton9NormalTexture\",\n\t\"ActionStatusText\",\n\t\"AddFriendEntryFrameAcceptButtonLeft\",\n\t\"AddFriendEntryFrameAcceptButtonMiddle\",\n\t\"AddFriendEntryFrameAcceptButtonRight\",\n\t\"AddFriendEntryFrameAcceptButtonText\",\n\t\"AddFriendEntryFrameCancelButtonLeft\",\n\t\"AddFriendEntryFrameCancelButtonMiddle\",\n\t\"AddFriendEntryFrameCancelButtonRight\",\n\t\"AddFriendEntryFrameCancelButtonText\",\n\t\"AddFriendEntryFrameInfoButtonTexture\",\n\t\"AddFriendEntryFrameLeftDescription\",\n\t\"AddFriendEntryFrameLeftFriend\",\n\t\"AddFriendEntryFrameLeftIcon\",\n\t\"AddFriendEntryFrameLeftTitle\",\n\t\"AddFriendEntryFrameOrLabel\",\n\t\"AddFriendEntryFrameRightDescription\",\n\t\"AddFriendEntryFrameRightFriend\",\n\t\"AddFriendEntryFrameRightIcon\",\n\t\"AddFriendEntryFrameRightTitle\",\n\t\"AddFriendEntryFrameTopTitle\",\n\t\"AddFriendInfoFrameContinueButtonLeft\",\n\t\"AddFriendInfoFrameContinueButtonMiddle\",\n\t\"AddFriendInfoFrameContinueButtonRight\",\n\t\"AddFriendInfoFrameContinueButtonText\",\n\t\"AddFriendInfoFrameFactionIcon\",\n\t\"AddFriendInfoFrameLeftFriend\",\n\t\"AddFriendInfoFrameLeftTitle\",\n\t\"AddFriendInfoFrameRightFriend\",\n\t\"AddFriendInfoFrameRightTitle\",\n\t\"AddFriendNameEditBoxFill\",\n\t\"AddFriendNameEditBoxLeft\",\n\t\"AddFriendNameEditBoxMiddle\",\n\t\"AddFriendNameEditBoxRight\",\n\t\"AddFriendNoteEditBoxFill\",\n\t\"AddFriendNoteFrameBottom\",\n\t\"AddFriendNoteFrameBottomLeft\",\n\t\"AddFriendNoteFrameBottomRight\",\n\t\"AddFriendNoteFrameLeft\",\n\t\"AddFriendNoteFrameMiddle\",\n\t\"AddFriendNoteFrameRight\",\n\t\"AddFriendNoteFrameScrollFrameScrollBarThumbTexture\",\n\t\"AddFriendNoteFrameTop\",\n\t\"AddFriendNoteFrameTopLeft\",\n\t\"AddFriendNoteFrameTopRight\",\n\t\"AnimTimerFrameCountdownAnimGroup\",\n\t\"ArenaFrameCancelButtonText\",\n\t\"ArenaFrameDivider\",\n\t\"ArenaFrameFrameLabel\",\n\t\"ArenaFrameGroupJoinButtonText\",\n\t\"ArenaFrameJoinButtonText\",\n\t\"ArenaFrameNameHeader\",\n\t\"ArenaFrameNameHeader2\",\n\t\"ArenaFramePortrait\",\n\t\"ArenaFrameZoneDescription\",\n\t\"ArenaRegistrarButton1QuestIcon\",\n\t\"ArenaRegistrarButton2QuestIcon\",\n\t\"ArenaRegistrarButton3QuestIcon\",\n\t\"ArenaRegistrarButton4QuestIcon\",\n\t\"ArenaRegistrarButton5QuestIcon\",\n\t\"ArenaRegistrarButton6QuestIcon\",\n\t\"ArenaRegistrarCostLabel\",\n\t\"ArenaRegistrarFrameCancelButtonText\",\n\t\"ArenaRegistrarFrameGoodbyeButtonText\",\n\t\"ArenaRegistrarFrameNpcNameText\",\n\t\"ArenaRegistrarFramePortrait\",\n\t\"ArenaRegistrarFramePurchaseButtonText\",\n\t\"ArenaRegistrarMoneyFrameCopperButtonText\",\n\t\"ArenaRegistrarMoneyFrameGoldButtonText\",\n\t\"ArenaRegistrarMoneyFrameSilverButtonText\",\n\t\"ArenaRegistrarPurchaseText\",\n\t\"ArenaRegistrarText\",\n\t\"ArenaZone1Highlight\",\n\t\"ArenaZone1Status\",\n\t\"ArenaZone1Text\",\n\t\"ArenaZone2Highlight\",\n\t\"ArenaZone2Status\",\n\t\"ArenaZone2Text\",\n\t\"ArenaZone3Highlight\",\n\t\"ArenaZone3Status\",\n\t\"ArenaZone3Text\",\n\t\"ArenaZone4Highlight\",\n\t\"ArenaZone4Status\",\n\t\"ArenaZone4Text\",\n\t\"ArenaZone5Highlight\",\n\t\"ArenaZone5Status\",\n\t\"ArenaZone5Text\",\n\t\"ArenaZone6Highlight\",\n\t\"ArenaZone6Status\",\n\t\"ArenaZone6Text\",\n\t\"AudioOptionsFrameCancelText\",\n\t\"AudioOptionsFrameCategoryFrameBottom\",\n\t\"AudioOptionsFrameCategoryFrameBottomLeft\",\n\t\"AudioOptionsFrameCategoryFrameBottomRight\",\n\t\"AudioOptionsFrameCategoryFrameButton10Text\",\n\t\"AudioOptionsFrameCategoryFrameButton10ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton10ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton10TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton11Text\",\n\t\"AudioOptionsFrameCategoryFrameButton11ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton11ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton11TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton12Text\",\n\t\"AudioOptionsFrameCategoryFrameButton12ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton12ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton12TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton13Text\",\n\t\"AudioOptionsFrameCategoryFrameButton13ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton13ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton13TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton14Text\",\n\t\"AudioOptionsFrameCategoryFrameButton14ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton14ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton14TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton15Text\",\n\t\"AudioOptionsFrameCategoryFrameButton15ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton15ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton15TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton16Text\",\n\t\"AudioOptionsFrameCategoryFrameButton16ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton16ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton16TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton17Text\",\n\t\"AudioOptionsFrameCategoryFrameButton17ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton17ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton17TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton18Text\",\n\t\"AudioOptionsFrameCategoryFrameButton18ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton18ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton18TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton19Text\",\n\t\"AudioOptionsFrameCategoryFrameButton19ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton19ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton19TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton1Text\",\n\t\"AudioOptionsFrameCategoryFrameButton1ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton1ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton1TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton20Text\",\n\t\"AudioOptionsFrameCategoryFrameButton20ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton20ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton20TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton21Text\",\n\t\"AudioOptionsFrameCategoryFrameButton21ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton21ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton21TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton22Text\",\n\t\"AudioOptionsFrameCategoryFrameButton22ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton22ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton22TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton23Text\",\n\t\"AudioOptionsFrameCategoryFrameButton23ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton23ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton23TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton2Text\",\n\t\"AudioOptionsFrameCategoryFrameButton2ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton2ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton2TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton3Text\",\n\t\"AudioOptionsFrameCategoryFrameButton3ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton3ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton3TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton4Text\",\n\t\"AudioOptionsFrameCategoryFrameButton4ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton4ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton4TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton5Text\",\n\t\"AudioOptionsFrameCategoryFrameButton5ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton5ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton5TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton6Text\",\n\t\"AudioOptionsFrameCategoryFrameButton6ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton6ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton6TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton7Text\",\n\t\"AudioOptionsFrameCategoryFrameButton7ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton7ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton7TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton8Text\",\n\t\"AudioOptionsFrameCategoryFrameButton8ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton8ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton8TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton9Text\",\n\t\"AudioOptionsFrameCategoryFrameButton9ToggleHighlightTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton9ToggleNormalTexture\",\n\t\"AudioOptionsFrameCategoryFrameButton9TogglePushedTexture\",\n\t\"AudioOptionsFrameCategoryFrameLeft\",\n\t\"AudioOptionsFrameCategoryFrameListScrollBarThumbTexture\",\n\t\"AudioOptionsFrameCategoryFrameRight\",\n\t\"AudioOptionsFrameCategoryFrameTop\",\n\t\"AudioOptionsFrameCategoryFrameTopLeft\",\n\t\"AudioOptionsFrameCategoryFrameTopRight\",\n\t\"AudioOptionsFrameHeader\",\n\t\"AudioOptionsFrameHeaderText\",\n\t\"AudioOptionsFrameOkayText\",\n\t\"AudioOptionsSoundPanelAmbienceVolumeHigh\",\n\t\"AudioOptionsSoundPanelAmbienceVolumeLabel\",\n\t\"AudioOptionsSoundPanelAmbienceVolumeLow\",\n\t\"AudioOptionsSoundPanelAmbienceVolumeText\",\n\t\"AudioOptionsSoundPanelAmbienceVolumeThumb\",\n\t\"AudioOptionsSoundPanelAmbientSoundsText\",\n\t\"AudioOptionsSoundPanelEmoteSoundsText\",\n\t\"AudioOptionsSoundPanelEnableDSPsText\",\n\t\"AudioOptionsSoundPanelEnableSoundText\",\n\t\"AudioOptionsSoundPanelErrorSpeechText\",\n\t\"AudioOptionsSoundPanelHRTFText\",\n\t\"AudioOptionsSoundPanelHardwareDropDownButtonDisabledTexture\",\n\t\"AudioOptionsSoundPanelHardwareDropDownButtonHighlightTexture\",\n\t\"AudioOptionsSoundPanelHardwareDropDownButtonNormalTexture\",\n\t\"AudioOptionsSoundPanelHardwareDropDownButtonPushedTexture\",\n\t\"AudioOptionsSoundPanelHardwareDropDownLabel\",\n\t\"AudioOptionsSoundPanelHardwareDropDownLeft\",\n\t\"AudioOptionsSoundPanelHardwareDropDownMiddle\",\n\t\"AudioOptionsSoundPanelHardwareDropDownRight\",\n\t\"AudioOptionsSoundPanelHardwareDropDownText\",\n\t\"AudioOptionsSoundPanelHardwareTitle\",\n\t\"AudioOptionsSoundPanelLoopMusicText\",\n\t\"AudioOptionsSoundPanelMasterVolumeHigh\",\n\t\"AudioOptionsSoundPanelMasterVolumeLabel\",\n\t\"AudioOptionsSoundPanelMasterVolumeLow\",\n\t\"AudioOptionsSoundPanelMasterVolumeText\",\n\t\"AudioOptionsSoundPanelMasterVolumeThumb\",\n\t\"AudioOptionsSoundPanelMusicText\",\n\t\"AudioOptionsSoundPanelMusicVolumeHigh\",\n\t\"AudioOptionsSoundPanelMusicVolumeLabel\",\n\t\"AudioOptionsSoundPanelMusicVolumeLow\",\n\t\"AudioOptionsSoundPanelMusicVolumeText\",\n\t\"AudioOptionsSoundPanelMusicVolumeThumb\",\n\t\"AudioOptionsSoundPanelPetSoundsText\",\n\t\"AudioOptionsSoundPanelPlaybackTitle\",\n\t\"AudioOptionsSoundPanelReverbText\",\n\t\"AudioOptionsSoundPanelSoundChannelsHigh\",\n\t\"AudioOptionsSoundPanelSoundChannelsLow\",\n\t\"AudioOptionsSoundPanelSoundChannelsText\",\n\t\"AudioOptionsSoundPanelSoundChannelsThumb\",\n\t\"AudioOptionsSoundPanelSoundEffectsText\",\n\t\"AudioOptionsSoundPanelSoundInBGText\",\n\t\"AudioOptionsSoundPanelSoundQualityHigh\",\n\t\"AudioOptionsSoundPanelSoundQualityLow\",\n\t\"AudioOptionsSoundPanelSoundQualityText\",\n\t\"AudioOptionsSoundPanelSoundQualityThumb\",\n\t\"AudioOptionsSoundPanelSoundVolumeHigh\",\n\t\"AudioOptionsSoundPanelSoundVolumeLabel\",\n\t\"AudioOptionsSoundPanelSoundVolumeLow\",\n\t\"AudioOptionsSoundPanelSoundVolumeText\",\n\t\"AudioOptionsSoundPanelSoundVolumeThumb\",\n\t\"AudioOptionsSoundPanelSubText\",\n\t\"AudioOptionsSoundPanelTitle\",\n\t\"AudioOptionsSoundPanelUseHardwareText\",\n\t\"AudioOptionsSoundPanelVolumeTitle\",\n\t\"AudioOptionsVoicePanelAmbienceFadeHigh\",\n\t\"AudioOptionsVoicePanelAmbienceFadeLabel\",\n\t\"AudioOptionsVoicePanelAmbienceFadeLow\",\n\t\"AudioOptionsVoicePanelAmbienceFadeText\",\n\t\"AudioOptionsVoicePanelAmbienceFadeThumb\",\n\t\"AudioOptionsVoicePanelAudioDescription\",\n\t\"AudioOptionsVoicePanelAudioLabel\",\n\t\"AudioOptionsVoicePanelAudioNormal\",\n\t\"AudioOptionsVoicePanelAudioOff\",\n\t\"AudioOptionsVoicePanelBindingOutputText\",\n\t\"AudioOptionsVoicePanelBindingOutputTextConflict\",\n\t\"AudioOptionsVoicePanelBindingTitle\",\n\t\"AudioOptionsVoicePanelChatMode1KeyBindingButtonHiddenText\",\n\t\"AudioOptionsVoicePanelChatMode1KeyBindingButtonText\",\n\t\"AudioOptionsVoicePanelChatMode1Label\",\n\t\"AudioOptionsVoicePanelChatModeDropDownButtonDisabledTexture\",\n\t\"AudioOptionsVoicePanelChatModeDropDownButtonHighlightTexture\",\n\t\"AudioOptionsVoicePanelChatModeDropDownButtonNormalTexture\",\n\t\"AudioOptionsVoicePanelChatModeDropDownButtonPushedTexture\",\n\t\"AudioOptionsVoicePanelChatModeDropDownLabel\",\n\t\"AudioOptionsVoicePanelChatModeDropDownLeft\",\n\t\"AudioOptionsVoicePanelChatModeDropDownMiddle\",\n\t\"AudioOptionsVoicePanelChatModeDropDownRight\",\n\t\"AudioOptionsVoicePanelChatModeDropDownText\",\n\t\"AudioOptionsVoicePanelDisabledMessageText\",\n\t\"AudioOptionsVoicePanelEnableMicrophoneText\",\n\t\"AudioOptionsVoicePanelEnableVoiceText\",\n\t\"AudioOptionsVoicePanelInputDeviceDropDownButtonDisabledTexture\",\n\t\"AudioOptionsVoicePanelInputDeviceDropDownButtonHighlightTexture\",\n\t\"AudioOptionsVoicePanelInputDeviceDropDownButtonNormalTexture\",\n\t\"AudioOptionsVoicePanelInputDeviceDropDownButtonPushedTexture\",\n\t\"AudioOptionsVoicePanelInputDeviceDropDownLeft\",\n\t\"AudioOptionsVoicePanelInputDeviceDropDownMiddle\",\n\t\"AudioOptionsVoicePanelInputDeviceDropDownRight\",\n\t\"AudioOptionsVoicePanelInputDeviceDropDownText\",\n\t\"AudioOptionsVoicePanelListeningTitle\",\n\t\"AudioOptionsVoicePanelMicTestText\",\n\t\"AudioOptionsVoicePanelMicTestTitle\",\n\t\"AudioOptionsVoicePanelMicrophoneVolumeHigh\",\n\t\"AudioOptionsVoicePanelMicrophoneVolumeLabel\",\n\t\"AudioOptionsVoicePanelMicrophoneVolumeLow\",\n\t\"AudioOptionsVoicePanelMicrophoneVolumeText\",\n\t\"AudioOptionsVoicePanelMicrophoneVolumeThumb\",\n\t\"AudioOptionsVoicePanelMusicFadeHigh\",\n\t\"AudioOptionsVoicePanelMusicFadeLabel\",\n\t\"AudioOptionsVoicePanelMusicFadeLow\",\n\t\"AudioOptionsVoicePanelMusicFadeText\",\n\t\"AudioOptionsVoicePanelMusicFadeThumb\",\n\t\"AudioOptionsVoicePanelOutputDeviceDropDownButtonDisabledTexture\",\n\t\"AudioOptionsVoicePanelOutputDeviceDropDownButtonHighlightTexture\",\n\t\"AudioOptionsVoicePanelOutputDeviceDropDownButtonNormalTexture\",\n\t\"AudioOptionsVoicePanelOutputDeviceDropDownButtonPushedTexture\",\n\t\"AudioOptionsVoicePanelOutputDeviceDropDownLabel\",\n\t\"AudioOptionsVoicePanelOutputDeviceDropDownLeft\",\n\t\"AudioOptionsVoicePanelOutputDeviceDropDownMiddle\",\n\t\"AudioOptionsVoicePanelOutputDeviceDropDownRight\",\n\t\"AudioOptionsVoicePanelOutputDeviceDropDownText\",\n\t\"AudioOptionsVoicePanelPushToTalkSoundText\",\n\t\"AudioOptionsVoicePanelSoundFadeHigh\",\n\t\"AudioOptionsVoicePanelSoundFadeLabel\",\n\t\"AudioOptionsVoicePanelSoundFadeLow\",\n\t\"AudioOptionsVoicePanelSoundFadeText\",\n\t\"AudioOptionsVoicePanelSoundFadeThumb\",\n\t\"AudioOptionsVoicePanelSpeakerVolumeHigh\",\n\t\"AudioOptionsVoicePanelSpeakerVolumeLabel\",\n\t\"AudioOptionsVoicePanelSpeakerVolumeLow\",\n\t\"AudioOptionsVoicePanelSpeakerVolumeText\",\n\t\"AudioOptionsVoicePanelSpeakerVolumeThumb\",\n\t\"AudioOptionsVoicePanelSubText\",\n\t\"AudioOptionsVoicePanelTalkingTitle\",\n\t\"AudioOptionsVoicePanelTitle\",\n\t\"AudioOptionsVoicePanelVoiceActivateSliderHigh\",\n\t\"AudioOptionsVoicePanelVoiceActivateSliderLow\",\n\t\"AudioOptionsVoicePanelVoiceActivateSliderText\",\n\t\"AudioOptionsVoicePanelVoiceActivateSliderThumb\",\n\t\"AutoCompleteButton1Text\",\n\t\"AutoCompleteButton2Text\",\n\t\"AutoCompleteButton3Text\",\n\t\"AutoCompleteButton4Text\",\n\t\"AutoCompleteButton5Text\",\n\t\"AutoCompleteInfoDelayer\",\n\t\"AutoCompleteInstructions\",\n\t\"AutoFollowStatusText\",\n\t\"AvailableQuestsText\",\n\t\"AvailableServicesText\",\n\t\"AzerothButtonHighlight\",\n\t\"BNConversationInviteDialogCancelButtonText\",\n\t\"BNConversationInviteDialogHeader\",\n\t\"BNConversationInviteDialogHeaderText\",\n\t\"BNConversationInviteDialogInstructionText\",\n\t\"BNConversationInviteDialogInviteButtonText\",\n\t\"BNConversationInviteDialogListFriend1Text\",\n\t\"BNConversationInviteDialogListFriend2Text\",\n\t\"BNConversationInviteDialogListFriend3Text\",\n\t\"BNConversationInviteDialogListFriend4Text\",\n\t\"BNConversationInviteDialogListFriend5Text\",\n\t\"BNConversationInviteDialogListFriend6Text\",\n\t\"BNConversationInviteDialogListFriend7Text\",\n\t\"BNConversationInviteDialogListScrollFrameScrollBarThumbTexture\",\n\t\"BNToastFrameAnimIn\",\n\t\"BNToastFrameBottomLine\",\n\t\"BNToastFrameDoubleLine\",\n\t\"BNToastFrameGlowFrameGlow\",\n\t\"BNToastFrameGlowFrameGlowAnimIn\",\n\t\"BNToastFrameIconTexture\",\n\t\"BNToastFrameTopLine\",\n\t\"BNToastFrameWaitAndAnimOut\",\n\t\"BNetReportFrameCancelButtonLeft\",\n\t\"BNetReportFrameCancelButtonMiddle\",\n\t\"BNetReportFrameCancelButtonRight\",\n\t\"BNetReportFrameCancelButtonText\",\n\t\"BNetReportFrameCommentBottom\",\n\t\"BNetReportFrameCommentBottomLeft\",\n\t\"BNetReportFrameCommentBottomRight\",\n\t\"BNetReportFrameCommentBoxFill\",\n\t\"BNetReportFrameCommentLeft\",\n\t\"BNetReportFrameCommentMiddle\",\n\t\"BNetReportFrameCommentRight\",\n\t\"BNetReportFrameCommentScrollFrameScrollBarThumbTexture\",\n\t\"BNetReportFrameCommentTop\",\n\t\"BNetReportFrameCommentTopLeft\",\n\t\"BNetReportFrameCommentTopRight\",\n\t\"BNetReportFrameName\",\n\t\"BNetReportFrameReportButtonLeft\",\n\t\"BNetReportFrameReportButtonMiddle\",\n\t\"BNetReportFrameReportButtonRight\",\n\t\"BNetReportFrameReportButtonText\",\n\t\"BNetReportFrameTitle\",\n\t\"BackpackTokenFrameToken1Count\",\n\t\"BackpackTokenFrameToken1Icon\",\n\t\"BackpackTokenFrameToken2Count\",\n\t\"BackpackTokenFrameToken2Icon\",\n\t\"BackpackTokenFrameToken3Count\",\n\t\"BackpackTokenFrameToken3Icon\",\n\t\"BankFrameBag1Count\",\n\t\"BankFrameBag1HighlightFrameTexture\",\n\t\"BankFrameBag1IconTexture\",\n\t\"BankFrameBag1NormalTexture\",\n\t\"BankFrameBag1Stock\",\n\t\"BankFrameBag2Count\",\n\t\"BankFrameBag2HighlightFrameTexture\",\n\t\"BankFrameBag2IconTexture\",\n\t\"BankFrameBag2NormalTexture\",\n\t\"BankFrameBag2Stock\",\n\t\"BankFrameBag3Count\",\n\t\"BankFrameBag3HighlightFrameTexture\",\n\t\"BankFrameBag3IconTexture\",\n\t\"BankFrameBag3NormalTexture\",\n\t\"BankFrameBag3Stock\",\n\t\"BankFrameBag4Count\",\n\t\"BankFrameBag4HighlightFrameTexture\",\n\t\"BankFrameBag4IconTexture\",\n\t\"BankFrameBag4NormalTexture\",\n\t\"BankFrameBag4Stock\",\n\t\"BankFrameBag5Count\",\n\t\"BankFrameBag5HighlightFrameTexture\",\n\t\"BankFrameBag5IconTexture\",\n\t\"BankFrameBag5NormalTexture\",\n\t\"BankFrameBag5Stock\",\n\t\"BankFrameBag6Count\",\n\t\"BankFrameBag6HighlightFrameTexture\",\n\t\"BankFrameBag6IconTexture\",\n\t\"BankFrameBag6NormalTexture\",\n\t\"BankFrameBag6Stock\",\n\t\"BankFrameBag7Count\",\n\t\"BankFrameBag7HighlightFrameTexture\",\n\t\"BankFrameBag7IconTexture\",\n\t\"BankFrameBag7NormalTexture\",\n\t\"BankFrameBag7Stock\",\n\t\"BankFrameDetailMoneyFrameCopperButtonText\",\n\t\"BankFrameDetailMoneyFrameGoldButtonText\",\n\t\"BankFrameDetailMoneyFrameSilverButtonText\",\n\t\"BankFrameItem10Count\",\n\t\"BankFrameItem10IconQuestTexture\",\n\t\"BankFrameItem10IconTexture\",\n\t\"BankFrameItem10NormalTexture\",\n\t\"BankFrameItem10Stock\",\n\t\"BankFrameItem11Count\",\n\t\"BankFrameItem11IconQuestTexture\",\n\t\"BankFrameItem11IconTexture\",\n\t\"BankFrameItem11NormalTexture\",\n\t\"BankFrameItem11Stock\",\n\t\"BankFrameItem12Count\",\n\t\"BankFrameItem12IconQuestTexture\",\n\t\"BankFrameItem12IconTexture\",\n\t\"BankFrameItem12NormalTexture\",\n\t\"BankFrameItem12Stock\",\n\t\"BankFrameItem13Count\",\n\t\"BankFrameItem13IconQuestTexture\",\n\t\"BankFrameItem13IconTexture\",\n\t\"BankFrameItem13NormalTexture\",\n\t\"BankFrameItem13Stock\",\n\t\"BankFrameItem14Count\",\n\t\"BankFrameItem14IconQuestTexture\",\n\t\"BankFrameItem14IconTexture\",\n\t\"BankFrameItem14NormalTexture\",\n\t\"BankFrameItem14Stock\",\n\t\"BankFrameItem15Count\",\n\t\"BankFrameItem15IconQuestTexture\",\n\t\"BankFrameItem15IconTexture\",\n\t\"BankFrameItem15NormalTexture\",\n\t\"BankFrameItem15Stock\",\n\t\"BankFrameItem16Count\",\n\t\"BankFrameItem16IconQuestTexture\",\n\t\"BankFrameItem16IconTexture\",\n\t\"BankFrameItem16NormalTexture\",\n\t\"BankFrameItem16Stock\",\n\t\"BankFrameItem17Count\",\n\t\"BankFrameItem17IconQuestTexture\",\n\t\"BankFrameItem17IconTexture\",\n\t\"BankFrameItem17NormalTexture\",\n\t\"BankFrameItem17Stock\",\n\t\"BankFrameItem18Count\",\n\t\"BankFrameItem18IconQuestTexture\",\n\t\"BankFrameItem18IconTexture\",\n\t\"BankFrameItem18NormalTexture\",\n\t\"BankFrameItem18Stock\",\n\t\"BankFrameItem19Count\",\n\t\"BankFrameItem19IconQuestTexture\",\n\t\"BankFrameItem19IconTexture\",\n\t\"BankFrameItem19NormalTexture\",\n\t\"BankFrameItem19Stock\",\n\t\"BankFrameItem1Count\",\n\t\"BankFrameItem1IconQuestTexture\",\n\t\"BankFrameItem1IconTexture\",\n\t\"BankFrameItem1NormalTexture\",\n\t\"BankFrameItem1Stock\",\n\t\"BankFrameItem20Count\",\n\t\"BankFrameItem20IconQuestTexture\",\n\t\"BankFrameItem20IconTexture\",\n\t\"BankFrameItem20NormalTexture\",\n\t\"BankFrameItem20Stock\",\n\t\"BankFrameItem21Count\",\n\t\"BankFrameItem21IconQuestTexture\",\n\t\"BankFrameItem21IconTexture\",\n\t\"BankFrameItem21NormalTexture\",\n\t\"BankFrameItem21Stock\",\n\t\"BankFrameItem22Count\",\n\t\"BankFrameItem22IconQuestTexture\",\n\t\"BankFrameItem22IconTexture\",\n\t\"BankFrameItem22NormalTexture\",\n\t\"BankFrameItem22Stock\",\n\t\"BankFrameItem23Count\",\n\t\"BankFrameItem23IconQuestTexture\",\n\t\"BankFrameItem23IconTexture\",\n\t\"BankFrameItem23NormalTexture\",\n\t\"BankFrameItem23Stock\",\n\t\"BankFrameItem24Count\",\n\t\"BankFrameItem24IconQuestTexture\",\n\t\"BankFrameItem24IconTexture\",\n\t\"BankFrameItem24NormalTexture\",\n\t\"BankFrameItem24Stock\",\n\t\"BankFrameItem25Count\",\n\t\"BankFrameItem25IconQuestTexture\",\n\t\"BankFrameItem25IconTexture\",\n\t\"BankFrameItem25NormalTexture\",\n\t\"BankFrameItem25Stock\",\n\t\"BankFrameItem26Count\",\n\t\"BankFrameItem26IconQuestTexture\",\n\t\"BankFrameItem26IconTexture\",\n\t\"BankFrameItem26NormalTexture\",\n\t\"BankFrameItem26Stock\",\n\t\"BankFrameItem27Count\",\n\t\"BankFrameItem27IconQuestTexture\",\n\t\"BankFrameItem27IconTexture\",\n\t\"BankFrameItem27NormalTexture\",\n\t\"BankFrameItem27Stock\",\n\t\"BankFrameItem28Count\",\n\t\"BankFrameItem28IconQuestTexture\",\n\t\"BankFrameItem28IconTexture\",\n\t\"BankFrameItem28NormalTexture\",\n\t\"BankFrameItem28Stock\",\n\t\"BankFrameItem2Count\",\n\t\"BankFrameItem2IconQuestTexture\",\n\t\"BankFrameItem2IconTexture\",\n\t\"BankFrameItem2NormalTexture\",\n\t\"BankFrameItem2Stock\",\n\t\"BankFrameItem3Count\",\n\t\"BankFrameItem3IconQuestTexture\",\n\t\"BankFrameItem3IconTexture\",\n\t\"BankFrameItem3NormalTexture\",\n\t\"BankFrameItem3Stock\",\n\t\"BankFrameItem4Count\",\n\t\"BankFrameItem4IconQuestTexture\",\n\t\"BankFrameItem4IconTexture\",\n\t\"BankFrameItem4NormalTexture\",\n\t\"BankFrameItem4Stock\",\n\t\"BankFrameItem5Count\",\n\t\"BankFrameItem5IconQuestTexture\",\n\t\"BankFrameItem5IconTexture\",\n\t\"BankFrameItem5NormalTexture\",\n\t\"BankFrameItem5Stock\",\n\t\"BankFrameItem6Count\",\n\t\"BankFrameItem6IconQuestTexture\",\n\t\"BankFrameItem6IconTexture\",\n\t\"BankFrameItem6NormalTexture\",\n\t\"BankFrameItem6Stock\",\n\t\"BankFrameItem7Count\",\n\t\"BankFrameItem7IconQuestTexture\",\n\t\"BankFrameItem7IconTexture\",\n\t\"BankFrameItem7NormalTexture\",\n\t\"BankFrameItem7Stock\",\n\t\"BankFrameItem8Count\",\n\t\"BankFrameItem8IconQuestTexture\",\n\t\"BankFrameItem8IconTexture\",\n\t\"BankFrameItem8NormalTexture\",\n\t\"BankFrameItem8Stock\",\n\t\"BankFrameItem9Count\",\n\t\"BankFrameItem9IconQuestTexture\",\n\t\"BankFrameItem9IconTexture\",\n\t\"BankFrameItem9NormalTexture\",\n\t\"BankFrameItem9Stock\",\n\t\"BankFrameMoneyFrameCopperButtonText\",\n\t\"BankFrameMoneyFrameGoldButtonText\",\n\t\"BankFrameMoneyFrameSilverButtonText\",\n\t\"BankFramePurchaseButtonText\",\n\t\"BankFrameSlotCost\",\n\t\"BankFrameTitleText\",\n\t\"BankPortraitTexture\",\n\t\"BasicScriptErrorsText\",\n\t\"BattlefieldFrameCancelButtonText\",\n\t\"BattlefieldFrameFrameLabel\",\n\t\"BattlefieldFrameGroupJoinButtonText\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameDescription\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfoDescription\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfoLossRewardArenaAmount\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfoLossRewardArenaSymbol\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfoLossRewardHonorAmount\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfoLossRewardHonorSymbol\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfoLossRewardLabel\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfoRewardsLabel\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfoTitle\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfoWinRewardArenaAmount\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfoWinRewardArenaSymbol\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfoWinRewardHonorAmount\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfoWinRewardHonorSymbol\",\n\t\"BattlefieldFrameInfoScrollFrameChildFrameRewardsInfoWinRewardLabel\",\n\t\"BattlefieldFrameInfoScrollFrameScrollBarThumbTexture\",\n\t\"BattlefieldFrameJoinButtonText\",\n\t\"BattlefieldFrameNameHeader\",\n\t\"BattlefieldFramePortrait\",\n\t\"BattlefieldIconText\",\n\t\"BattlefieldListScrollFrameScrollBarThumbTexture\",\n\t\"BattlefieldZone1Highlight\",\n\t\"BattlefieldZone1Text\",\n\t\"BattlefieldZone2Highlight\",\n\t\"BattlefieldZone2Text\",\n\t\"BattlefieldZone3Highlight\",\n\t\"BattlefieldZone3Text\",\n\t\"BattlefieldZone4Highlight\",\n\t\"BattlefieldZone4Text\",\n\t\"BattlefieldZone5Highlight\",\n\t\"BattlefieldZone5Text\",\n\t\"BattlegroundShine\",\n\t\"BattlegroundType1Highlight\",\n\t\"BattlegroundType1Text\",\n\t\"BattlegroundType2Highlight\",\n\t\"BattlegroundType2Text\",\n\t\"BattlegroundType3Highlight\",\n\t\"BattlegroundType3Text\",\n\t\"BattlegroundType4Highlight\",\n\t\"BattlegroundType4Text\",\n\t\"BattlegroundType5Highlight\",\n\t\"BattlegroundType5Text\",\n\t\"BlackoutWorld\",\n\t\"BonusActionBarTexture0\",\n\t\"BonusActionBarTexture1\",\n\t\"BonusActionButton10Border\",\n\t\"BonusActionButton10Count\",\n\t\"BonusActionButton10Flash\",\n\t\"BonusActionButton10HotKey\",\n\t\"BonusActionButton10Icon\",\n\t\"BonusActionButton10Name\",\n\t\"BonusActionButton10NormalTexture\",\n\t\"BonusActionButton11Border\",\n\t\"BonusActionButton11Count\",\n\t\"BonusActionButton11Flash\",\n\t\"BonusActionButton11HotKey\",\n\t\"BonusActionButton11Icon\",\n\t\"BonusActionButton11Name\",\n\t\"BonusActionButton11NormalTexture\",\n\t\"BonusActionButton12Border\",\n\t\"BonusActionButton12Count\",\n\t\"BonusActionButton12Flash\",\n\t\"BonusActionButton12HotKey\",\n\t\"BonusActionButton12Icon\",\n\t\"BonusActionButton12Name\",\n\t\"BonusActionButton12NormalTexture\",\n\t\"BonusActionButton1Border\",\n\t\"BonusActionButton1Count\",\n\t\"BonusActionButton1Flash\",\n\t\"BonusActionButton1HotKey\",\n\t\"BonusActionButton1Icon\",\n\t\"BonusActionButton1Name\",\n\t\"BonusActionButton1NormalTexture\",\n\t\"BonusActionButton2Border\",\n\t\"BonusActionButton2Count\",\n\t\"BonusActionButton2Flash\",\n\t\"BonusActionButton2HotKey\",\n\t\"BonusActionButton2Icon\",\n\t\"BonusActionButton2Name\",\n\t\"BonusActionButton2NormalTexture\",\n\t\"BonusActionButton3Border\",\n\t\"BonusActionButton3Count\",\n\t\"BonusActionButton3Flash\",\n\t\"BonusActionButton3HotKey\",\n\t\"BonusActionButton3Icon\",\n\t\"BonusActionButton3Name\",\n\t\"BonusActionButton3NormalTexture\",\n\t\"BonusActionButton4Border\",\n\t\"BonusActionButton4Count\",\n\t\"BonusActionButton4Flash\",\n\t\"BonusActionButton4HotKey\",\n\t\"BonusActionButton4Icon\",\n\t\"BonusActionButton4Name\",\n\t\"BonusActionButton4NormalTexture\",\n\t\"BonusActionButton5Border\",\n\t\"BonusActionButton5Count\",\n\t\"BonusActionButton5Flash\",\n\t\"BonusActionButton5HotKey\",\n\t\"BonusActionButton5Icon\",\n\t\"BonusActionButton5Name\",\n\t\"BonusActionButton5NormalTexture\",\n\t\"BonusActionButton6Border\",\n\t\"BonusActionButton6Count\",\n\t\"BonusActionButton6Flash\",\n\t\"BonusActionButton6HotKey\",\n\t\"BonusActionButton6Icon\",\n\t\"BonusActionButton6Name\",\n\t\"BonusActionButton6NormalTexture\",\n\t\"BonusActionButton7Border\",\n\t\"BonusActionButton7Count\",\n\t\"BonusActionButton7Flash\",\n\t\"BonusActionButton7HotKey\",\n\t\"BonusActionButton7Icon\",\n\t\"BonusActionButton7Name\",\n\t\"BonusActionButton7NormalTexture\",\n\t\"BonusActionButton8Border\",\n\t\"BonusActionButton8Count\",\n\t\"BonusActionButton8Flash\",\n\t\"BonusActionButton8HotKey\",\n\t\"BonusActionButton8Icon\",\n\t\"BonusActionButton8Name\",\n\t\"BonusActionButton8NormalTexture\",\n\t\"BonusActionButton9Border\",\n\t\"BonusActionButton9Count\",\n\t\"BonusActionButton9Flash\",\n\t\"BonusActionButton9HotKey\",\n\t\"BonusActionButton9Icon\",\n\t\"BonusActionButton9Name\",\n\t\"BonusActionButton9NormalTexture\",\n\t\"Boss1TargetFrameBackground\",\n\t\"Boss1TargetFrameDropDownButtonDisabledTexture\",\n\t\"Boss1TargetFrameDropDownButtonHighlightTexture\",\n\t\"Boss1TargetFrameDropDownButtonNormalTexture\",\n\t\"Boss1TargetFrameDropDownButtonPushedTexture\",\n\t\"Boss1TargetFrameDropDownLeft\",\n\t\"Boss1TargetFrameDropDownMiddle\",\n\t\"Boss1TargetFrameDropDownRight\",\n\t\"Boss1TargetFrameDropDownText\",\n\t\"Boss1TargetFrameFlash\",\n\t\"Boss1TargetFrameNameBackground\",\n\t\"Boss1TargetFrameNumericalThreatBG\",\n\t\"Boss1TargetFrameNumericalThreatValue\",\n\t\"Boss1TargetFramePortrait\",\n\t\"Boss1TargetFrameTextureFrameDeadText\",\n\t\"Boss1TargetFrameTextureFrameHealthBarText\",\n\t\"Boss1TargetFrameTextureFrameHighLevelTexture\",\n\t\"Boss1TargetFrameTextureFrameLeaderIcon\",\n\t\"Boss1TargetFrameTextureFrameLevelText\",\n\t\"Boss1TargetFrameTextureFrameManaBarText\",\n\t\"Boss1TargetFrameTextureFrameName\",\n\t\"Boss1TargetFrameTextureFramePVPIcon\",\n\t\"Boss1TargetFrameTextureFrameRaidTargetIcon\",\n\t\"Boss1TargetFrameTextureFrameTexture\",\n\t\"Boss2TargetFrameBackground\",\n\t\"Boss2TargetFrameDropDownButtonDisabledTexture\",\n\t\"Boss2TargetFrameDropDownButtonHighlightTexture\",\n\t\"Boss2TargetFrameDropDownButtonNormalTexture\",\n\t\"Boss2TargetFrameDropDownButtonPushedTexture\",\n\t\"Boss2TargetFrameDropDownLeft\",\n\t\"Boss2TargetFrameDropDownMiddle\",\n\t\"Boss2TargetFrameDropDownRight\",\n\t\"Boss2TargetFrameDropDownText\",\n\t\"Boss2TargetFrameFlash\",\n\t\"Boss2TargetFrameNameBackground\",\n\t\"Boss2TargetFrameNumericalThreatBG\",\n\t\"Boss2TargetFrameNumericalThreatValue\",\n\t\"Boss2TargetFramePortrait\",\n\t\"Boss2TargetFrameTextureFrameDeadText\",\n\t\"Boss2TargetFrameTextureFrameHealthBarText\",\n\t\"Boss2TargetFrameTextureFrameHighLevelTexture\",\n\t\"Boss2TargetFrameTextureFrameLeaderIcon\",\n\t\"Boss2TargetFrameTextureFrameLevelText\",\n\t\"Boss2TargetFrameTextureFrameManaBarText\",\n\t\"Boss2TargetFrameTextureFrameName\",\n\t\"Boss2TargetFrameTextureFramePVPIcon\",\n\t\"Boss2TargetFrameTextureFrameRaidTargetIcon\",\n\t\"Boss2TargetFrameTextureFrameTexture\",\n\t\"Boss3TargetFrameBackground\",\n\t\"Boss3TargetFrameDropDownButtonDisabledTexture\",\n\t\"Boss3TargetFrameDropDownButtonHighlightTexture\",\n\t\"Boss3TargetFrameDropDownButtonNormalTexture\",\n\t\"Boss3TargetFrameDropDownButtonPushedTexture\",\n\t\"Boss3TargetFrameDropDownLeft\",\n\t\"Boss3TargetFrameDropDownMiddle\",\n\t\"Boss3TargetFrameDropDownRight\",\n\t\"Boss3TargetFrameDropDownText\",\n\t\"Boss3TargetFrameFlash\",\n\t\"Boss3TargetFrameNameBackground\",\n\t\"Boss3TargetFrameNumericalThreatBG\",\n\t\"Boss3TargetFrameNumericalThreatValue\",\n\t\"Boss3TargetFramePortrait\",\n\t\"Boss3TargetFrameTextureFrameDeadText\",\n\t\"Boss3TargetFrameTextureFrameHealthBarText\",\n\t\"Boss3TargetFrameTextureFrameHighLevelTexture\",\n\t\"Boss3TargetFrameTextureFrameLeaderIcon\",\n\t\"Boss3TargetFrameTextureFrameLevelText\",\n\t\"Boss3TargetFrameTextureFrameManaBarText\",\n\t\"Boss3TargetFrameTextureFrameName\",\n\t\"Boss3TargetFrameTextureFramePVPIcon\",\n\t\"Boss3TargetFrameTextureFrameRaidTargetIcon\",\n\t\"Boss3TargetFrameTextureFrameTexture\",\n\t\"Boss4TargetFrameBackground\",\n\t\"Boss4TargetFrameDropDownButtonDisabledTexture\",\n\t\"Boss4TargetFrameDropDownButtonHighlightTexture\",\n\t\"Boss4TargetFrameDropDownButtonNormalTexture\",\n\t\"Boss4TargetFrameDropDownButtonPushedTexture\",\n\t\"Boss4TargetFrameDropDownLeft\",\n\t\"Boss4TargetFrameDropDownMiddle\",\n\t\"Boss4TargetFrameDropDownRight\",\n\t\"Boss4TargetFrameDropDownText\",\n\t\"Boss4TargetFrameFlash\",\n\t\"Boss4TargetFrameNameBackground\",\n\t\"Boss4TargetFrameNumericalThreatBG\",\n\t\"Boss4TargetFrameNumericalThreatValue\",\n\t\"Boss4TargetFramePortrait\",\n\t\"Boss4TargetFrameTextureFrameDeadText\",\n\t\"Boss4TargetFrameTextureFrameHealthBarText\",\n\t\"Boss4TargetFrameTextureFrameHighLevelTexture\",\n\t\"Boss4TargetFrameTextureFrameLeaderIcon\",\n\t\"Boss4TargetFrameTextureFrameLevelText\",\n\t\"Boss4TargetFrameTextureFrameManaBarText\",\n\t\"Boss4TargetFrameTextureFrameName\",\n\t\"Boss4TargetFrameTextureFramePVPIcon\",\n\t\"Boss4TargetFrameTextureFrameRaidTargetIcon\",\n\t\"Boss4TargetFrameTextureFrameTexture\",\n\t\"BossEmoteNormalHuge\",\n\t\"BuffButton1Count\",\n\t\"BuffButton1Duration\",\n\t\"BuffButton1Icon\",\n\t\"BuffButton2Count\",\n\t\"BuffButton2Duration\",\n\t\"BuffButton2Icon\",\n\t\"BuybackFrameBotLeft\",\n\t\"BuybackFrameBotRight\",\n\t\"BuybackFrameTopLeft\",\n\t\"BuybackFrameTopRight\",\n\t\"CastingBarFrameBorder\",\n\t\"CastingBarFrameBorderShield\",\n\t\"CastingBarFrameFlash\",\n\t\"CastingBarFrameIcon\",\n\t\"CastingBarFrameSpark\",\n\t\"CastingBarFrameText\",\n\t\"ChannelButton10Collapsed\",\n\t\"ChannelButton10NormalTexture\",\n\t\"ChannelButton10SpeakerFrameFlash\",\n\t\"ChannelButton10SpeakerFrameMuted\",\n\t\"ChannelButton10SpeakerFrameOn\",\n\t\"ChannelButton10Text\",\n\t\"ChannelButton11Collapsed\",\n\t\"ChannelButton11NormalTexture\",\n\t\"ChannelButton11SpeakerFrameFlash\",\n\t\"ChannelButton11SpeakerFrameMuted\",\n\t\"ChannelButton11SpeakerFrameOn\",\n\t\"ChannelButton11Text\",\n\t\"ChannelButton12Collapsed\",\n\t\"ChannelButton12NormalTexture\",\n\t\"ChannelButton12SpeakerFrameFlash\",\n\t\"ChannelButton12SpeakerFrameMuted\",\n\t\"ChannelButton12SpeakerFrameOn\",\n\t\"ChannelButton12Text\",\n\t\"ChannelButton13Collapsed\",\n\t\"ChannelButton13NormalTexture\",\n\t\"ChannelButton13SpeakerFrameFlash\",\n\t\"ChannelButton13SpeakerFrameMuted\",\n\t\"ChannelButton13SpeakerFrameOn\",\n\t\"ChannelButton13Text\",\n\t\"ChannelButton14Collapsed\",\n\t\"ChannelButton14NormalTexture\",\n\t\"ChannelButton14SpeakerFrameFlash\",\n\t\"ChannelButton14SpeakerFrameMuted\",\n\t\"ChannelButton14SpeakerFrameOn\",\n\t\"ChannelButton14Text\",\n\t\"ChannelButton15Collapsed\",\n\t\"ChannelButton15NormalTexture\",\n\t\"ChannelButton15SpeakerFrameFlash\",\n\t\"ChannelButton15SpeakerFrameMuted\",\n\t\"ChannelButton15SpeakerFrameOn\",\n\t\"ChannelButton15Text\",\n\t\"ChannelButton16Collapsed\",\n\t\"ChannelButton16NormalTexture\",\n\t\"ChannelButton16SpeakerFrameFlash\",\n\t\"ChannelButton16SpeakerFrameMuted\",\n\t\"ChannelButton16SpeakerFrameOn\",\n\t\"ChannelButton16Text\",\n\t\"ChannelButton17Collapsed\",\n\t\"ChannelButton17NormalTexture\",\n\t\"ChannelButton17SpeakerFrameFlash\",\n\t\"ChannelButton17SpeakerFrameMuted\",\n\t\"ChannelButton17SpeakerFrameOn\",\n\t\"ChannelButton17Text\",\n\t\"ChannelButton18Collapsed\",\n\t\"ChannelButton18NormalTexture\",\n\t\"ChannelButton18SpeakerFrameFlash\",\n\t\"ChannelButton18SpeakerFrameMuted\",\n\t\"ChannelButton18SpeakerFrameOn\",\n\t\"ChannelButton18Text\",\n\t\"ChannelButton19Collapsed\",\n\t\"ChannelButton19NormalTexture\",\n\t\"ChannelButton19SpeakerFrameFlash\",\n\t\"ChannelButton19SpeakerFrameMuted\",\n\t\"ChannelButton19SpeakerFrameOn\",\n\t\"ChannelButton19Text\",\n\t\"ChannelButton1Collapsed\",\n\t\"ChannelButton1NormalTexture\",\n\t\"ChannelButton1SpeakerFrameFlash\",\n\t\"ChannelButton1SpeakerFrameMuted\",\n\t\"ChannelButton1SpeakerFrameOn\",\n\t\"ChannelButton1Text\",\n\t\"ChannelButton20Collapsed\",\n\t\"ChannelButton20NormalTexture\",\n\t\"ChannelButton20SpeakerFrameFlash\",\n\t\"ChannelButton20SpeakerFrameMuted\",\n\t\"ChannelButton20SpeakerFrameOn\",\n\t\"ChannelButton20Text\",\n\t\"ChannelButton2Collapsed\",\n\t\"ChannelButton2NormalTexture\",\n\t\"ChannelButton2SpeakerFrameFlash\",\n\t\"ChannelButton2SpeakerFrameMuted\",\n\t\"ChannelButton2SpeakerFrameOn\",\n\t\"ChannelButton2Text\",\n\t\"ChannelButton3Collapsed\",\n\t\"ChannelButton3NormalTexture\",\n\t\"ChannelButton3SpeakerFrameFlash\",\n\t\"ChannelButton3SpeakerFrameMuted\",\n\t\"ChannelButton3SpeakerFrameOn\",\n\t\"ChannelButton3Text\",\n\t\"ChannelButton4Collapsed\",\n\t\"ChannelButton4NormalTexture\",\n\t\"ChannelButton4SpeakerFrameFlash\",\n\t\"ChannelButton4SpeakerFrameMuted\",\n\t\"ChannelButton4SpeakerFrameOn\",\n\t\"ChannelButton4Text\",\n\t\"ChannelButton5Collapsed\",\n\t\"ChannelButton5NormalTexture\",\n\t\"ChannelButton5SpeakerFrameFlash\",\n\t\"ChannelButton5SpeakerFrameMuted\",\n\t\"ChannelButton5SpeakerFrameOn\",\n\t\"ChannelButton5Text\",\n\t\"ChannelButton6Collapsed\",\n\t\"ChannelButton6NormalTexture\",\n\t\"ChannelButton6SpeakerFrameFlash\",\n\t\"ChannelButton6SpeakerFrameMuted\",\n\t\"ChannelButton6SpeakerFrameOn\",\n\t\"ChannelButton6Text\",\n\t\"ChannelButton7Collapsed\",\n\t\"ChannelButton7NormalTexture\",\n\t\"ChannelButton7SpeakerFrameFlash\",\n\t\"ChannelButton7SpeakerFrameMuted\",\n\t\"ChannelButton7SpeakerFrameOn\",\n\t\"ChannelButton7Text\",\n\t\"ChannelButton8Collapsed\",\n\t\"ChannelButton8NormalTexture\",\n\t\"ChannelButton8SpeakerFrameFlash\",\n\t\"ChannelButton8SpeakerFrameMuted\",\n\t\"ChannelButton8SpeakerFrameOn\",\n\t\"ChannelButton8Text\",\n\t\"ChannelButton9Collapsed\",\n\t\"ChannelButton9NormalTexture\",\n\t\"ChannelButton9SpeakerFrameFlash\",\n\t\"ChannelButton9SpeakerFrameMuted\",\n\t\"ChannelButton9SpeakerFrameOn\",\n\t\"ChannelButton9Text\",\n\t\"ChannelFrameAutoJoinBattlegroundText\",\n\t\"ChannelFrameAutoJoinPartyText\",\n\t\"ChannelFrameDaughterFrameCancelButtonText\",\n\t\"ChannelFrameDaughterFrameChannelNameLabel\",\n\t\"ChannelFrameDaughterFrameChannelNameLeft\",\n\t\"ChannelFrameDaughterFrameChannelNameMiddle\",\n\t\"ChannelFrameDaughterFrameChannelNameRight\",\n\t\"ChannelFrameDaughterFrameChannelPasswordLabel\",\n\t\"ChannelFrameDaughterFrameChannelPasswordLeft\",\n\t\"ChannelFrameDaughterFrameChannelPasswordMiddle\",\n\t\"ChannelFrameDaughterFrameChannelPasswordOptional\",\n\t\"ChannelFrameDaughterFrameChannelPasswordRight\",\n\t\"ChannelFrameDaughterFrameCorner\",\n\t\"ChannelFrameDaughterFrameName\",\n\t\"ChannelFrameDaughterFrameOkayButtonText\",\n\t\"ChannelFrameDaughterFrameTitlebar\",\n\t\"ChannelFrameNewButtonText\",\n\t\"ChannelFrameVerticalBarMiddle\",\n\t\"ChannelFrameVerticalBarTop\",\n\t\"ChannelListDropDownButtonDisabledTexture\",\n\t\"ChannelListDropDownButtonHighlightTexture\",\n\t\"ChannelListDropDownButtonNormalTexture\",\n\t\"ChannelListDropDownButtonPushedTexture\",\n\t\"ChannelListDropDownLeft\",\n\t\"ChannelListDropDownMiddle\",\n\t\"ChannelListDropDownRight\",\n\t\"ChannelListDropDownText\",\n\t\"ChannelListScrollFrameBottom\",\n\t\"ChannelListScrollFrameScrollBarThumbTexture\",\n\t\"ChannelListScrollFrameTop\",\n\t\"ChannelMemberButton10Name\",\n\t\"ChannelMemberButton10RankTexture\",\n\t\"ChannelMemberButton10SpeakerFrameFlash\",\n\t\"ChannelMemberButton10SpeakerFrameMuted\",\n\t\"ChannelMemberButton10SpeakerFrameOn\",\n\t\"ChannelMemberButton11Name\",\n\t\"ChannelMemberButton11RankTexture\",\n\t\"ChannelMemberButton11SpeakerFrameFlash\",\n\t\"ChannelMemberButton11SpeakerFrameMuted\",\n\t\"ChannelMemberButton11SpeakerFrameOn\",\n\t\"ChannelMemberButton12Name\",\n\t\"ChannelMemberButton12RankTexture\",\n\t\"ChannelMemberButton12SpeakerFrameFlash\",\n\t\"ChannelMemberButton12SpeakerFrameMuted\",\n\t\"ChannelMemberButton12SpeakerFrameOn\",\n\t\"ChannelMemberButton13Name\",\n\t\"ChannelMemberButton13RankTexture\",\n\t\"ChannelMemberButton13SpeakerFrameFlash\",\n\t\"ChannelMemberButton13SpeakerFrameMuted\",\n\t\"ChannelMemberButton13SpeakerFrameOn\",\n\t\"ChannelMemberButton14Name\",\n\t\"ChannelMemberButton14RankTexture\",\n\t\"ChannelMemberButton14SpeakerFrameFlash\",\n\t\"ChannelMemberButton14SpeakerFrameMuted\",\n\t\"ChannelMemberButton14SpeakerFrameOn\",\n\t\"ChannelMemberButton15Name\",\n\t\"ChannelMemberButton15RankTexture\",\n\t\"ChannelMemberButton15SpeakerFrameFlash\",\n\t\"ChannelMemberButton15SpeakerFrameMuted\",\n\t\"ChannelMemberButton15SpeakerFrameOn\",\n\t\"ChannelMemberButton16Name\",\n\t\"ChannelMemberButton16RankTexture\",\n\t\"ChannelMemberButton16SpeakerFrameFlash\",\n\t\"ChannelMemberButton16SpeakerFrameMuted\",\n\t\"ChannelMemberButton16SpeakerFrameOn\",\n\t\"ChannelMemberButton17Name\",\n\t\"ChannelMemberButton17RankTexture\",\n\t\"ChannelMemberButton17SpeakerFrameFlash\",\n\t\"ChannelMemberButton17SpeakerFrameMuted\",\n\t\"ChannelMemberButton17SpeakerFrameOn\",\n\t\"ChannelMemberButton18Name\",\n\t\"ChannelMemberButton18RankTexture\",\n\t\"ChannelMemberButton18SpeakerFrameFlash\",\n\t\"ChannelMemberButton18SpeakerFrameMuted\",\n\t\"ChannelMemberButton18SpeakerFrameOn\",\n\t\"ChannelMemberButton19Name\",\n\t\"ChannelMemberButton19RankTexture\",\n\t\"ChannelMemberButton19SpeakerFrameFlash\",\n\t\"ChannelMemberButton19SpeakerFrameMuted\",\n\t\"ChannelMemberButton19SpeakerFrameOn\",\n\t\"ChannelMemberButton1Name\",\n\t\"ChannelMemberButton1RankTexture\",\n\t\"ChannelMemberButton1SpeakerFrameFlash\",\n\t\"ChannelMemberButton1SpeakerFrameMuted\",\n\t\"ChannelMemberButton1SpeakerFrameOn\",\n\t\"ChannelMemberButton20Name\",\n\t\"ChannelMemberButton20RankTexture\",\n\t\"ChannelMemberButton20SpeakerFrameFlash\",\n\t\"ChannelMemberButton20SpeakerFrameMuted\",\n\t\"ChannelMemberButton20SpeakerFrameOn\",\n\t\"ChannelMemberButton21Name\",\n\t\"ChannelMemberButton21RankTexture\",\n\t\"ChannelMemberButton21SpeakerFrameFlash\",\n\t\"ChannelMemberButton21SpeakerFrameMuted\",\n\t\"ChannelMemberButton21SpeakerFrameOn\",\n\t\"ChannelMemberButton22Name\",\n\t\"ChannelMemberButton22RankTexture\",\n\t\"ChannelMemberButton22SpeakerFrameFlash\",\n\t\"ChannelMemberButton22SpeakerFrameMuted\",\n\t\"ChannelMemberButton22SpeakerFrameOn\",\n\t\"ChannelMemberButton2Name\",\n\t\"ChannelMemberButton2RankTexture\",\n\t\"ChannelMemberButton2SpeakerFrameFlash\",\n\t\"ChannelMemberButton2SpeakerFrameMuted\",\n\t\"ChannelMemberButton2SpeakerFrameOn\",\n\t\"ChannelMemberButton3Name\",\n\t\"ChannelMemberButton3RankTexture\",\n\t\"ChannelMemberButton3SpeakerFrameFlash\",\n\t\"ChannelMemberButton3SpeakerFrameMuted\",\n\t\"ChannelMemberButton3SpeakerFrameOn\",\n\t\"ChannelMemberButton4Name\",\n\t\"ChannelMemberButton4RankTexture\",\n\t\"ChannelMemberButton4SpeakerFrameFlash\",\n\t\"ChannelMemberButton4SpeakerFrameMuted\",\n\t\"ChannelMemberButton4SpeakerFrameOn\",\n\t\"ChannelMemberButton5Name\",\n\t\"ChannelMemberButton5RankTexture\",\n\t\"ChannelMemberButton5SpeakerFrameFlash\",\n\t\"ChannelMemberButton5SpeakerFrameMuted\",\n\t\"ChannelMemberButton5SpeakerFrameOn\",\n\t\"ChannelMemberButton6Name\",\n\t\"ChannelMemberButton6RankTexture\",\n\t\"ChannelMemberButton6SpeakerFrameFlash\",\n\t\"ChannelMemberButton6SpeakerFrameMuted\",\n\t\"ChannelMemberButton6SpeakerFrameOn\",\n\t\"ChannelMemberButton7Name\",\n\t\"ChannelMemberButton7RankTexture\",\n\t\"ChannelMemberButton7SpeakerFrameFlash\",\n\t\"ChannelMemberButton7SpeakerFrameMuted\",\n\t\"ChannelMemberButton7SpeakerFrameOn\",\n\t\"ChannelMemberButton8Name\",\n\t\"ChannelMemberButton8RankTexture\",\n\t\"ChannelMemberButton8SpeakerFrameFlash\",\n\t\"ChannelMemberButton8SpeakerFrameMuted\",\n\t\"ChannelMemberButton8SpeakerFrameOn\",\n\t\"ChannelMemberButton9Name\",\n\t\"ChannelMemberButton9RankTexture\",\n\t\"ChannelMemberButton9SpeakerFrameFlash\",\n\t\"ChannelMemberButton9SpeakerFrameMuted\",\n\t\"ChannelMemberButton9SpeakerFrameOn\",\n\t\"ChannelPulloutRosterButton1Name\",\n\t\"ChannelPulloutRosterButton1SpeakerFlash\",\n\t\"ChannelPulloutRosterButton1SpeakerMuted\",\n\t\"ChannelPulloutRosterButton1SpeakerOn\",\n\t\"ChannelPulloutRosterButton2Name\",\n\t\"ChannelPulloutRosterButton2SpeakerFlash\",\n\t\"ChannelPulloutRosterButton2SpeakerMuted\",\n\t\"ChannelPulloutRosterButton2SpeakerOn\",\n\t\"ChannelPulloutRosterButton3Name\",\n\t\"ChannelPulloutRosterButton3SpeakerFlash\",\n\t\"ChannelPulloutRosterButton3SpeakerMuted\",\n\t\"ChannelPulloutRosterButton3SpeakerOn\",\n\t\"ChannelPulloutRosterButton4Name\",\n\t\"ChannelPulloutRosterButton4SpeakerFlash\",\n\t\"ChannelPulloutRosterButton4SpeakerMuted\",\n\t\"ChannelPulloutRosterButton4SpeakerOn\",\n\t\"ChannelPulloutRosterButton5Name\",\n\t\"ChannelPulloutRosterButton5SpeakerFlash\",\n\t\"ChannelPulloutRosterButton5SpeakerMuted\",\n\t\"ChannelPulloutRosterButton5SpeakerOn\",\n\t\"ChannelPulloutTabDropDownButtonDisabledTexture\",\n\t\"ChannelPulloutTabDropDownButtonHighlightTexture\",\n\t\"ChannelPulloutTabDropDownButtonNormalTexture\",\n\t\"ChannelPulloutTabDropDownButtonPushedTexture\",\n\t\"ChannelPulloutTabDropDownLeft\",\n\t\"ChannelPulloutTabDropDownMiddle\",\n\t\"ChannelPulloutTabDropDownRight\",\n\t\"ChannelPulloutTabDropDownText\",\n\t\"ChannelPulloutTabLeft\",\n\t\"ChannelPulloutTabMiddle\",\n\t\"ChannelPulloutTabRight\",\n\t\"ChannelPulloutTabText\",\n\t\"ChannelRosterChannelCount\",\n\t\"ChannelRosterChannelName\",\n\t\"ChannelRosterDropDownButtonDisabledTexture\",\n\t\"ChannelRosterDropDownButtonHighlightTexture\",\n\t\"ChannelRosterDropDownButtonNormalTexture\",\n\t\"ChannelRosterDropDownButtonPushedTexture\",\n\t\"ChannelRosterDropDownLeft\",\n\t\"ChannelRosterDropDownMiddle\",\n\t\"ChannelRosterDropDownRight\",\n\t\"ChannelRosterDropDownText\",\n\t\"ChannelRosterHiddenText\",\n\t\"ChannelRosterScrollFrameBottom\",\n\t\"ChannelRosterScrollFrameScrollBarThumbTexture\",\n\t\"ChannelRosterScrollFrameTop\",\n\t\"CharacterAmmoSlotCount\",\n\t\"CharacterAmmoSlotIconTexture\",\n\t\"CharacterAmmoSlotNormalTexture\",\n\t\"CharacterAmmoSlotStock\",\n\t\"CharacterBackSlotCount\",\n\t\"CharacterBackSlotIconTexture\",\n\t\"CharacterBackSlotNormalTexture\",\n\t\"CharacterBackSlotStock\",\n\t\"CharacterBag0SlotCount\",\n\t\"CharacterBag0SlotIconTexture\",\n\t\"CharacterBag0SlotNormalTexture\",\n\t\"CharacterBag0SlotStock\",\n\t\"CharacterBag1SlotCount\",\n\t\"CharacterBag1SlotIconTexture\",\n\t\"CharacterBag1SlotNormalTexture\",\n\t\"CharacterBag1SlotStock\",\n\t\"CharacterBag2SlotCount\",\n\t\"CharacterBag2SlotIconTexture\",\n\t\"CharacterBag2SlotNormalTexture\",\n\t\"CharacterBag2SlotStock\",\n\t\"CharacterBag3SlotCount\",\n\t\"CharacterBag3SlotIconTexture\",\n\t\"CharacterBag3SlotNormalTexture\",\n\t\"CharacterBag3SlotStock\",\n\t\"CharacterChestSlotCount\",\n\t\"CharacterChestSlotIconTexture\",\n\t\"CharacterChestSlotNormalTexture\",\n\t\"CharacterChestSlotStock\",\n\t\"CharacterFeetSlotCount\",\n\t\"CharacterFeetSlotIconTexture\",\n\t\"CharacterFeetSlotNormalTexture\",\n\t\"CharacterFeetSlotStock\",\n\t\"CharacterFinger0SlotCount\",\n\t\"CharacterFinger0SlotIconTexture\",\n\t\"CharacterFinger0SlotNormalTexture\",\n\t\"CharacterFinger0SlotStock\",\n\t\"CharacterFinger1SlotCount\",\n\t\"CharacterFinger1SlotIconTexture\",\n\t\"CharacterFinger1SlotNormalTexture\",\n\t\"CharacterFinger1SlotStock\",\n\t\"CharacterFramePortrait\",\n\t\"CharacterFrameTab1HighlightTexture\",\n\t\"CharacterFrameTab1Left\",\n\t\"CharacterFrameTab1LeftDisabled\",\n\t\"CharacterFrameTab1Middle\",\n\t\"CharacterFrameTab1MiddleDisabled\",\n\t\"CharacterFrameTab1Right\",\n\t\"CharacterFrameTab1RightDisabled\",\n\t\"CharacterFrameTab1Text\",\n\t\"CharacterFrameTab2HighlightTexture\",\n\t\"CharacterFrameTab2Left\",\n\t\"CharacterFrameTab2LeftDisabled\",\n\t\"CharacterFrameTab2Middle\",\n\t\"CharacterFrameTab2MiddleDisabled\",\n\t\"CharacterFrameTab2Right\",\n\t\"CharacterFrameTab2RightDisabled\",\n\t\"CharacterFrameTab2Text\",\n\t\"CharacterFrameTab3HighlightTexture\",\n\t\"CharacterFrameTab3Left\",\n\t\"CharacterFrameTab3LeftDisabled\",\n\t\"CharacterFrameTab3Middle\",\n\t\"CharacterFrameTab3MiddleDisabled\",\n\t\"CharacterFrameTab3Right\",\n\t\"CharacterFrameTab3RightDisabled\",\n\t\"CharacterFrameTab3Text\",\n\t\"CharacterFrameTab4HighlightTexture\",\n\t\"CharacterFrameTab4Left\",\n\t\"CharacterFrameTab4LeftDisabled\",\n\t\"CharacterFrameTab4Middle\",\n\t\"CharacterFrameTab4MiddleDisabled\",\n\t\"CharacterFrameTab4Right\",\n\t\"CharacterFrameTab4RightDisabled\",\n\t\"CharacterFrameTab4Text\",\n\t\"CharacterFrameTab5HighlightTexture\",\n\t\"CharacterFrameTab5Left\",\n\t\"CharacterFrameTab5LeftDisabled\",\n\t\"CharacterFrameTab5Middle\",\n\t\"CharacterFrameTab5MiddleDisabled\",\n\t\"CharacterFrameTab5Right\",\n\t\"CharacterFrameTab5RightDisabled\",\n\t\"CharacterFrameTab5Text\",\n\t\"CharacterGuildText\",\n\t\"CharacterHandsSlotCount\",\n\t\"CharacterHandsSlotIconTexture\",\n\t\"CharacterHandsSlotNormalTexture\",\n\t\"CharacterHandsSlotStock\",\n\t\"CharacterHeadSlotCount\",\n\t\"CharacterHeadSlotIconTexture\",\n\t\"CharacterHeadSlotNormalTexture\",\n\t\"CharacterHeadSlotStock\",\n\t\"CharacterLegsSlotCount\",\n\t\"CharacterLegsSlotIconTexture\",\n\t\"CharacterLegsSlotNormalTexture\",\n\t\"CharacterLegsSlotStock\",\n\t\"CharacterLevelText\",\n\t\"CharacterMainHandSlotCount\",\n\t\"CharacterMainHandSlotIconTexture\",\n\t\"CharacterMainHandSlotNormalTexture\",\n\t\"CharacterMainHandSlotStock\",\n\t\"CharacterNameText\",\n\t\"CharacterNeckSlotCount\",\n\t\"CharacterNeckSlotIconTexture\",\n\t\"CharacterNeckSlotNormalTexture\",\n\t\"CharacterNeckSlotStock\",\n\t\"CharacterRangedSlotCount\",\n\t\"CharacterRangedSlotIconTexture\",\n\t\"CharacterRangedSlotNormalTexture\",\n\t\"CharacterRangedSlotStock\",\n\t\"CharacterSecondaryHandSlotCount\",\n\t\"CharacterSecondaryHandSlotIconTexture\",\n\t\"CharacterSecondaryHandSlotNormalTexture\",\n\t\"CharacterSecondaryHandSlotStock\",\n\t\"CharacterShirtSlotCount\",\n\t\"CharacterShirtSlotIconTexture\",\n\t\"CharacterShirtSlotNormalTexture\",\n\t\"CharacterShirtSlotStock\",\n\t\"CharacterShoulderSlotCount\",\n\t\"CharacterShoulderSlotIconTexture\",\n\t\"CharacterShoulderSlotNormalTexture\",\n\t\"CharacterShoulderSlotStock\",\n\t\"CharacterTabardSlotCount\",\n\t\"CharacterTabardSlotIconTexture\",\n\t\"CharacterTabardSlotNormalTexture\",\n\t\"CharacterTabardSlotStock\",\n\t\"CharacterTitleText\",\n\t\"CharacterTrinket0SlotCount\",\n\t\"CharacterTrinket0SlotIconTexture\",\n\t\"CharacterTrinket0SlotNormalTexture\",\n\t\"CharacterTrinket0SlotStock\",\n\t\"CharacterTrinket1SlotCount\",\n\t\"CharacterTrinket1SlotIconTexture\",\n\t\"CharacterTrinket1SlotNormalTexture\",\n\t\"CharacterTrinket1SlotStock\",\n\t\"CharacterWaistSlotCount\",\n\t\"CharacterWaistSlotIconTexture\",\n\t\"CharacterWaistSlotNormalTexture\",\n\t\"CharacterWaistSlotStock\",\n\t\"CharacterWristSlotCount\",\n\t\"CharacterWristSlotIconTexture\",\n\t\"CharacterWristSlotNormalTexture\",\n\t\"CharacterWristSlotStock\",\n\t\"ChatBNPlayerDropDownButtonDisabledTexture\",\n\t\"ChatBNPlayerDropDownButtonHighlightTexture\",\n\t\"ChatBNPlayerDropDownButtonNormalTexture\",\n\t\"ChatBNPlayerDropDownButtonPushedTexture\",\n\t\"ChatBNPlayerDropDownLeft\",\n\t\"ChatBNPlayerDropDownMiddle\",\n\t\"ChatBNPlayerDropDownRight\",\n\t\"ChatBNPlayerDropDownText\",\n\t\"ChatChannelDropDownButtonDisabledTexture\",\n\t\"ChatChannelDropDownButtonHighlightTexture\",\n\t\"ChatChannelDropDownButtonNormalTexture\",\n\t\"ChatChannelDropDownButtonPushedTexture\",\n\t\"ChatChannelDropDownLeft\",\n\t\"ChatChannelDropDownMiddle\",\n\t\"ChatChannelDropDownRight\",\n\t\"ChatChannelDropDownText\",\n\t\"ChatConfigCategoryFrameButton1Highlight\",\n\t\"ChatConfigCategoryFrameButton1NormalText\",\n\t\"ChatConfigCategoryFrameButton2Highlight\",\n\t\"ChatConfigCategoryFrameButton2NormalText\",\n\t\"ChatConfigCategoryFrameButton3Highlight\",\n\t\"ChatConfigCategoryFrameButton3NormalText\",\n\t\"ChatConfigCategoryFrameButton4Highlight\",\n\t\"ChatConfigCategoryFrameButton4NormalText\",\n\t\"ChatConfigCategoryFrameTitle\",\n\t\"ChatConfigChannelSettingsClassColorLegendTitle\",\n\t\"ChatConfigChannelSettingsLeftClassColorHeader\",\n\t\"ChatConfigChannelSettingsLeftColorHeader\",\n\t\"ChatConfigChannelSettingsLeftTitle\",\n\t\"ChatConfigChatSettingsClassColorLegendTitle\",\n\t\"ChatConfigChatSettingsLeftCheckBox10CheckText\",\n\t\"ChatConfigChatSettingsLeftCheckBox10ColorSwatchNormalTexture\",\n\t\"ChatConfigChatSettingsLeftCheckBox10ColorSwatchSwatchBg\",\n\t\"ChatConfigChatSettingsLeftCheckBox11CheckText\",\n\t\"ChatConfigChatSettingsLeftCheckBox11ColorSwatchNormalTexture\",\n\t\"ChatConfigChatSettingsLeftCheckBox11ColorSwatchSwatchBg\",\n\t\"ChatConfigChatSettingsLeftCheckBox12CheckText\",\n\t\"ChatConfigChatSettingsLeftCheckBox12ColorSwatchNormalTexture\",\n\t\"ChatConfigChatSettingsLeftCheckBox12ColorSwatchSwatchBg\",\n\t\"ChatConfigChatSettingsLeftCheckBox13CheckText\",\n\t\"ChatConfigChatSettingsLeftCheckBox13ColorSwatchNormalTexture\",\n\t\"ChatConfigChatSettingsLeftCheckBox13ColorSwatchSwatchBg\",\n\t\"ChatConfigChatSettingsLeftCheckBox14CheckText\",\n\t\"ChatConfigChatSettingsLeftCheckBox14ColorSwatchNormalTexture\",\n\t\"ChatConfigChatSettingsLeftCheckBox14ColorSwatchSwatchBg\",\n\t\"ChatConfigChatSettingsLeftCheckBox15CheckText\",\n\t\"ChatConfigChatSettingsLeftCheckBox15ColorSwatchNormalTexture\",\n\t\"ChatConfigChatSettingsLeftCheckBox15ColorSwatchSwatchBg\",\n\t\"ChatConfigChatSettingsLeftCheckBox16CheckText\",\n\t\"ChatConfigChatSettingsLeftCheckBox16ColorSwatchNormalTexture\",\n\t\"ChatConfigChatSettingsLeftCheckBox16ColorSwatchSwatchBg\",\n\t\"ChatConfigChatSettingsLeftCheckBox17CheckText\",\n\t\"ChatConfigChatSettingsLeftCheckBox17ColorSwatchNormalTexture\",\n\t\"ChatConfigChatSettingsLeftCheckBox17ColorSwatchSwatchBg\",\n\t\"ChatConfigChatSettingsLeftCheckBox1CheckText\",\n\t\"ChatConfigChatSettingsLeftCheckBox1ColorSwatchNormalTexture\",\n\t\"ChatConfigChatSettingsLeftCheckBox1ColorSwatchSwatchBg\",\n\t\"ChatConfigChatSettingsLeftCheckBox2CheckText\",\n\t\"ChatConfigChatSettingsLeftCheckBox2ColorSwatchNormalTexture\",\n\t\"ChatConfigChatSettingsLeftCheckBox2ColorSwatchSwatchBg\",\n\t\"ChatConfigChatSettingsLeftCheckBox3CheckText\",\n\t\"ChatConfigChatSettingsLeftCheckBox3ColorSwatchNormalTexture\",\n\t\"ChatConfigChatSettingsLeftCheckBox3ColorSwatchSwatchBg\",\n\t\"ChatConfigChatSettingsLeftCheckBox4CheckText\",\n\t\"ChatConfigChatSettingsLeftCheckBox4ColorSwatchNormalTexture\",\n\t\"ChatConfigChatSettingsLeftCheckBox4ColorSwatchSwatchBg\",\n\t\"ChatConfigChatSettingsLeftCheckBox5CheckText\",\n\t\"ChatConfigChatSettingsLeftCheckBox5ColorSwatchNormalTexture\",\n\t\"ChatConfigChatSettingsLeftCheckBox5ColorSwatchSwatchBg\",\n\t\"ChatConfigChatSettingsLeftCheckBox6CheckText\",\n\t\"ChatConfigChatSettingsLeftCheckBox6ColorSwatchNormalTexture\",\n\t\"ChatConfigChatSettingsLeftCheckBox6ColorSwatchSwatchBg\",\n\t\"ChatConfigChatSettingsLeftCheckBox7CheckText\",\n\t\"ChatConfigChatSettingsLeftCheckBox7ColorSwatchNormalTexture\",\n\t\"ChatConfigChatSettingsLeftCheckBox7ColorSwatchSwatchBg\",\n\t\"ChatConfigChatSettingsLeftCheckBox8CheckText\",\n\t\"ChatConfigChatSettingsLeftCheckBox8ColorSwatchNormalTexture\",\n\t\"ChatConfigChatSettingsLeftCheckBox8ColorSwatchSwatchBg\",\n\t\"ChatConfigChatSettingsLeftCheckBox9CheckText\",\n\t\"ChatConfigChatSettingsLeftCheckBox9ColorSwatchNormalTexture\",\n\t\"ChatConfigChatSettingsLeftCheckBox9ColorSwatchSwatchBg\",\n\t\"ChatConfigChatSettingsLeftClassColorHeader\",\n\t\"ChatConfigChatSettingsLeftColorHeader\",\n\t\"ChatConfigChatSettingsLeftTitle\",\n\t\"ChatConfigCombatSettingsFiltersAddFilterButtonText\",\n\t\"ChatConfigCombatSettingsFiltersButton1Highlight\",\n\t\"ChatConfigCombatSettingsFiltersButton1NormalText\",\n\t\"ChatConfigCombatSettingsFiltersButton2Highlight\",\n\t\"ChatConfigCombatSettingsFiltersButton2NormalText\",\n\t\"ChatConfigCombatSettingsFiltersButton3Highlight\",\n\t\"ChatConfigCombatSettingsFiltersButton3NormalText\",\n\t\"ChatConfigCombatSettingsFiltersButton4Highlight\",\n\t\"ChatConfigCombatSettingsFiltersButton4NormalText\",\n\t\"ChatConfigCombatSettingsFiltersCopyFilterButtonText\",\n\t\"ChatConfigCombatSettingsFiltersDeleteButtonText\",\n\t\"ChatConfigCombatSettingsFiltersScrollFrameScrollBarThumbTexture\",\n\t\"ChatConfigFrameCancelButtonText\",\n\t\"ChatConfigFrameHeader\",\n\t\"ChatConfigFrameHeaderText\",\n\t\"ChatConfigFrameOkayButtonText\",\n\t\"ChatConfigOtherSettingsCombatCheckBox10CheckText\",\n\t\"ChatConfigOtherSettingsCombatCheckBox10ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsCombatCheckBox10ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsCombatCheckBox1CheckText\",\n\t\"ChatConfigOtherSettingsCombatCheckBox1ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsCombatCheckBox1ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsCombatCheckBox2CheckText\",\n\t\"ChatConfigOtherSettingsCombatCheckBox2ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsCombatCheckBox2ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsCombatCheckBox3CheckText\",\n\t\"ChatConfigOtherSettingsCombatCheckBox3ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsCombatCheckBox3ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsCombatCheckBox4CheckText\",\n\t\"ChatConfigOtherSettingsCombatCheckBox4ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsCombatCheckBox4ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsCombatCheckBox5CheckText\",\n\t\"ChatConfigOtherSettingsCombatCheckBox5ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsCombatCheckBox5ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsCombatCheckBox6CheckText\",\n\t\"ChatConfigOtherSettingsCombatCheckBox6ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsCombatCheckBox6ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsCombatCheckBox7CheckText\",\n\t\"ChatConfigOtherSettingsCombatCheckBox7ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsCombatCheckBox7ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsCombatCheckBox8CheckText\",\n\t\"ChatConfigOtherSettingsCombatCheckBox8ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsCombatCheckBox8ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsCombatCheckBox9CheckText\",\n\t\"ChatConfigOtherSettingsCombatCheckBox9ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsCombatCheckBox9ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsCombatTitle\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox1CheckText\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox1ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox1ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox2CheckText\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox2ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox2ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox3CheckText\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox3ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox3ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox4CheckText\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox4ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox4ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox5CheckText\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox5ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox5ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox6CheckText\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox6ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsCreatureCheckBox6ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsCreatureTitle\",\n\t\"ChatConfigOtherSettingsPVPCheckBox1CheckText\",\n\t\"ChatConfigOtherSettingsPVPCheckBox1ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsPVPCheckBox1ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsPVPCheckBox2CheckText\",\n\t\"ChatConfigOtherSettingsPVPCheckBox2ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsPVPCheckBox2ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsPVPCheckBox3CheckText\",\n\t\"ChatConfigOtherSettingsPVPCheckBox3ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsPVPCheckBox3ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsPVPTitle\",\n\t\"ChatConfigOtherSettingsSystemCheckBox1CheckText\",\n\t\"ChatConfigOtherSettingsSystemCheckBox1ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsSystemCheckBox1ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsSystemCheckBox2CheckText\",\n\t\"ChatConfigOtherSettingsSystemCheckBox2ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsSystemCheckBox2ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsSystemCheckBox3CheckText\",\n\t\"ChatConfigOtherSettingsSystemCheckBox3ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsSystemCheckBox3ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsSystemCheckBox4CheckText\",\n\t\"ChatConfigOtherSettingsSystemCheckBox4ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsSystemCheckBox4ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsSystemCheckBox5CheckText\",\n\t\"ChatConfigOtherSettingsSystemCheckBox5ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsSystemCheckBox5ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsSystemCheckBox6CheckText\",\n\t\"ChatConfigOtherSettingsSystemCheckBox6ColorSwatchNormalTexture\",\n\t\"ChatConfigOtherSettingsSystemCheckBox6ColorSwatchSwatchBg\",\n\t\"ChatConfigOtherSettingsSystemTitle\",\n\t\"ChatFontNormal\",\n\t\"ChatFontSmall\",\n\t\"ChatFrame10Background\",\n\t\"ChatFrame10BottomLeftTexture\",\n\t\"ChatFrame10BottomRightTexture\",\n\t\"ChatFrame10BottomTexture\",\n\t\"ChatFrame10ButtonFrameBackground\",\n\t\"ChatFrame10ButtonFrameBottomButtonFlash\",\n\t\"ChatFrame10ButtonFrameBottomLeftTexture\",\n\t\"ChatFrame10ButtonFrameBottomRightTexture\",\n\t\"ChatFrame10ButtonFrameBottomTexture\",\n\t\"ChatFrame10ButtonFrameLeftTexture\",\n\t\"ChatFrame10ButtonFrameRightTexture\",\n\t\"ChatFrame10ButtonFrameTopLeftTexture\",\n\t\"ChatFrame10ButtonFrameTopRightTexture\",\n\t\"ChatFrame10ButtonFrameTopTexture\",\n\t\"ChatFrame10EditBoxFocusLeft\",\n\t\"ChatFrame10EditBoxFocusMid\",\n\t\"ChatFrame10EditBoxFocusRight\",\n\t\"ChatFrame10EditBoxHeader\",\n\t\"ChatFrame10EditBoxLeft\",\n\t\"ChatFrame10EditBoxMid\",\n\t\"ChatFrame10EditBoxRight\",\n\t\"ChatFrame10LeftTexture\",\n\t\"ChatFrame10RightTexture\",\n\t\"ChatFrame10TabDropDownButtonDisabledTexture\",\n\t\"ChatFrame10TabDropDownButtonHighlightTexture\",\n\t\"ChatFrame10TabDropDownButtonNormalTexture\",\n\t\"ChatFrame10TabDropDownButtonPushedTexture\",\n\t\"ChatFrame10TabDropDownLeft\",\n\t\"ChatFrame10TabDropDownMiddle\",\n\t\"ChatFrame10TabDropDownRight\",\n\t\"ChatFrame10TabDropDownText\",\n\t\"ChatFrame10TabGlow\",\n\t\"ChatFrame10TabHighlightLeft\",\n\t\"ChatFrame10TabHighlightMiddle\",\n\t\"ChatFrame10TabHighlightRight\",\n\t\"ChatFrame10TabLeft\",\n\t\"ChatFrame10TabMiddle\",\n\t\"ChatFrame10TabRight\",\n\t\"ChatFrame10TabSelectedLeft\",\n\t\"ChatFrame10TabSelectedMiddle\",\n\t\"ChatFrame10TabSelectedRight\",\n\t\"ChatFrame10TabText\",\n\t\"ChatFrame10TopLeftTexture\",\n\t\"ChatFrame10TopRightTexture\",\n\t\"ChatFrame10TopTexture\",\n\t\"ChatFrame1Background\",\n\t\"ChatFrame1BottomLeftTexture\",\n\t\"ChatFrame1BottomRightTexture\",\n\t\"ChatFrame1BottomTexture\",\n\t\"ChatFrame1ButtonFrameBackground\",\n\t\"ChatFrame1ButtonFrameBottomButtonFlash\",\n\t\"ChatFrame1ButtonFrameBottomLeftTexture\",\n\t\"ChatFrame1ButtonFrameBottomRightTexture\",\n\t\"ChatFrame1ButtonFrameBottomTexture\",\n\t\"ChatFrame1ButtonFrameLeftTexture\",\n\t\"ChatFrame1ButtonFrameRightTexture\",\n\t\"ChatFrame1ButtonFrameTopLeftTexture\",\n\t\"ChatFrame1ButtonFrameTopRightTexture\",\n\t\"ChatFrame1ButtonFrameTopTexture\",\n\t\"ChatFrame1EditBoxFocusLeft\",\n\t\"ChatFrame1EditBoxFocusMid\",\n\t\"ChatFrame1EditBoxFocusRight\",\n\t\"ChatFrame1EditBoxHeader\",\n\t\"ChatFrame1EditBoxLeft\",\n\t\"ChatFrame1EditBoxMid\",\n\t\"ChatFrame1EditBoxRight\",\n\t\"ChatFrame1LeftTexture\",\n\t\"ChatFrame1RightTexture\",\n\t\"ChatFrame1TabDropDownButtonDisabledTexture\",\n\t\"ChatFrame1TabDropDownButtonHighlightTexture\",\n\t\"ChatFrame1TabDropDownButtonNormalTexture\",\n\t\"ChatFrame1TabDropDownButtonPushedTexture\",\n\t\"ChatFrame1TabDropDownLeft\",\n\t\"ChatFrame1TabDropDownMiddle\",\n\t\"ChatFrame1TabDropDownRight\",\n\t\"ChatFrame1TabDropDownText\",\n\t\"ChatFrame1TabGlow\",\n\t\"ChatFrame1TabHighlightLeft\",\n\t\"ChatFrame1TabHighlightMiddle\",\n\t\"ChatFrame1TabHighlightRight\",\n\t\"ChatFrame1TabLeft\",\n\t\"ChatFrame1TabMiddle\",\n\t\"ChatFrame1TabRight\",\n\t\"ChatFrame1TabSelectedLeft\",\n\t\"ChatFrame1TabSelectedMiddle\",\n\t\"ChatFrame1TabSelectedRight\",\n\t\"ChatFrame1TabText\",\n\t\"ChatFrame1TopLeftTexture\",\n\t\"ChatFrame1TopRightTexture\",\n\t\"ChatFrame1TopTexture\",\n\t\"ChatFrame2Background\",\n\t\"ChatFrame2BottomLeftTexture\",\n\t\"ChatFrame2BottomRightTexture\",\n\t\"ChatFrame2BottomTexture\",\n\t\"ChatFrame2ButtonFrameBackground\",\n\t\"ChatFrame2ButtonFrameBottomButtonFlash\",\n\t\"ChatFrame2ButtonFrameBottomLeftTexture\",\n\t\"ChatFrame2ButtonFrameBottomRightTexture\",\n\t\"ChatFrame2ButtonFrameBottomTexture\",\n\t\"ChatFrame2ButtonFrameLeftTexture\",\n\t\"ChatFrame2ButtonFrameRightTexture\",\n\t\"ChatFrame2ButtonFrameTopLeftTexture\",\n\t\"ChatFrame2ButtonFrameTopRightTexture\",\n\t\"ChatFrame2ButtonFrameTopTexture\",\n\t\"ChatFrame2EditBoxFocusLeft\",\n\t\"ChatFrame2EditBoxFocusMid\",\n\t\"ChatFrame2EditBoxFocusRight\",\n\t\"ChatFrame2EditBoxHeader\",\n\t\"ChatFrame2EditBoxLeft\",\n\t\"ChatFrame2EditBoxMid\",\n\t\"ChatFrame2EditBoxRight\",\n\t\"ChatFrame2LeftTexture\",\n\t\"ChatFrame2RightTexture\",\n\t\"ChatFrame2TabDropDownButtonDisabledTexture\",\n\t\"ChatFrame2TabDropDownButtonHighlightTexture\",\n\t\"ChatFrame2TabDropDownButtonNormalTexture\",\n\t\"ChatFrame2TabDropDownButtonPushedTexture\",\n\t\"ChatFrame2TabDropDownLeft\",\n\t\"ChatFrame2TabDropDownMiddle\",\n\t\"ChatFrame2TabDropDownRight\",\n\t\"ChatFrame2TabDropDownText\",\n\t\"ChatFrame2TabGlow\",\n\t\"ChatFrame2TabHighlightLeft\",\n\t\"ChatFrame2TabHighlightMiddle\",\n\t\"ChatFrame2TabHighlightRight\",\n\t\"ChatFrame2TabLeft\",\n\t\"ChatFrame2TabMiddle\",\n\t\"ChatFrame2TabRight\",\n\t\"ChatFrame2TabSelectedLeft\",\n\t\"ChatFrame2TabSelectedMiddle\",\n\t\"ChatFrame2TabSelectedRight\",\n\t\"ChatFrame2TabText\",\n\t\"ChatFrame2TopLeftTexture\",\n\t\"ChatFrame2TopRightTexture\",\n\t\"ChatFrame2TopTexture\",\n\t\"ChatFrame3Background\",\n\t\"ChatFrame3BottomLeftTexture\",\n\t\"ChatFrame3BottomRightTexture\",\n\t\"ChatFrame3BottomTexture\",\n\t\"ChatFrame3ButtonFrameBackground\",\n\t\"ChatFrame3ButtonFrameBottomButtonFlash\",\n\t\"ChatFrame3ButtonFrameBottomLeftTexture\",\n\t\"ChatFrame3ButtonFrameBottomRightTexture\",\n\t\"ChatFrame3ButtonFrameBottomTexture\",\n\t\"ChatFrame3ButtonFrameLeftTexture\",\n\t\"ChatFrame3ButtonFrameRightTexture\",\n\t\"ChatFrame3ButtonFrameTopLeftTexture\",\n\t\"ChatFrame3ButtonFrameTopRightTexture\",\n\t\"ChatFrame3ButtonFrameTopTexture\",\n\t\"ChatFrame3EditBoxFocusLeft\",\n\t\"ChatFrame3EditBoxFocusMid\",\n\t\"ChatFrame3EditBoxFocusRight\",\n\t\"ChatFrame3EditBoxHeader\",\n\t\"ChatFrame3EditBoxLeft\",\n\t\"ChatFrame3EditBoxMid\",\n\t\"ChatFrame3EditBoxRight\",\n\t\"ChatFrame3LeftTexture\",\n\t\"ChatFrame3RightTexture\",\n\t\"ChatFrame3TabDropDownButtonDisabledTexture\",\n\t\"ChatFrame3TabDropDownButtonHighlightTexture\",\n\t\"ChatFrame3TabDropDownButtonNormalTexture\",\n\t\"ChatFrame3TabDropDownButtonPushedTexture\",\n\t\"ChatFrame3TabDropDownLeft\",\n\t\"ChatFrame3TabDropDownMiddle\",\n\t\"ChatFrame3TabDropDownRight\",\n\t\"ChatFrame3TabDropDownText\",\n\t\"ChatFrame3TabGlow\",\n\t\"ChatFrame3TabHighlightLeft\",\n\t\"ChatFrame3TabHighlightMiddle\",\n\t\"ChatFrame3TabHighlightRight\",\n\t\"ChatFrame3TabLeft\",\n\t\"ChatFrame3TabMiddle\",\n\t\"ChatFrame3TabRight\",\n\t\"ChatFrame3TabSelectedLeft\",\n\t\"ChatFrame3TabSelectedMiddle\",\n\t\"ChatFrame3TabSelectedRight\",\n\t\"ChatFrame3TabText\",\n\t\"ChatFrame3TopLeftTexture\",\n\t\"ChatFrame3TopRightTexture\",\n\t\"ChatFrame3TopTexture\",\n\t\"ChatFrame4Background\",\n\t\"ChatFrame4BottomLeftTexture\",\n\t\"ChatFrame4BottomRightTexture\",\n\t\"ChatFrame4BottomTexture\",\n\t\"ChatFrame4ButtonFrameBackground\",\n\t\"ChatFrame4ButtonFrameBottomButtonFlash\",\n\t\"ChatFrame4ButtonFrameBottomLeftTexture\",\n\t\"ChatFrame4ButtonFrameBottomRightTexture\",\n\t\"ChatFrame4ButtonFrameBottomTexture\",\n\t\"ChatFrame4ButtonFrameLeftTexture\",\n\t\"ChatFrame4ButtonFrameRightTexture\",\n\t\"ChatFrame4ButtonFrameTopLeftTexture\",\n\t\"ChatFrame4ButtonFrameTopRightTexture\",\n\t\"ChatFrame4ButtonFrameTopTexture\",\n\t\"ChatFrame4EditBoxFocusLeft\",\n\t\"ChatFrame4EditBoxFocusMid\",\n\t\"ChatFrame4EditBoxFocusRight\",\n\t\"ChatFrame4EditBoxHeader\",\n\t\"ChatFrame4EditBoxLeft\",\n\t\"ChatFrame4EditBoxMid\",\n\t\"ChatFrame4EditBoxRight\",\n\t\"ChatFrame4LeftTexture\",\n\t\"ChatFrame4RightTexture\",\n\t\"ChatFrame4TabDropDownButtonDisabledTexture\",\n\t\"ChatFrame4TabDropDownButtonHighlightTexture\",\n\t\"ChatFrame4TabDropDownButtonNormalTexture\",\n\t\"ChatFrame4TabDropDownButtonPushedTexture\",\n\t\"ChatFrame4TabDropDownLeft\",\n\t\"ChatFrame4TabDropDownMiddle\",\n\t\"ChatFrame4TabDropDownRight\",\n\t\"ChatFrame4TabDropDownText\",\n\t\"ChatFrame4TabGlow\",\n\t\"ChatFrame4TabHighlightLeft\",\n\t\"ChatFrame4TabHighlightMiddle\",\n\t\"ChatFrame4TabHighlightRight\",\n\t\"ChatFrame4TabLeft\",\n\t\"ChatFrame4TabMiddle\",\n\t\"ChatFrame4TabRight\",\n\t\"ChatFrame4TabSelectedLeft\",\n\t\"ChatFrame4TabSelectedMiddle\",\n\t\"ChatFrame4TabSelectedRight\",\n\t\"ChatFrame4TabText\",\n\t\"ChatFrame4TopLeftTexture\",\n\t\"ChatFrame4TopRightTexture\",\n\t\"ChatFrame4TopTexture\",\n\t\"ChatFrame5Background\",\n\t\"ChatFrame5BottomLeftTexture\",\n\t\"ChatFrame5BottomRightTexture\",\n\t\"ChatFrame5BottomTexture\",\n\t\"ChatFrame5ButtonFrameBackground\",\n\t\"ChatFrame5ButtonFrameBottomButtonFlash\",\n\t\"ChatFrame5ButtonFrameBottomLeftTexture\",\n\t\"ChatFrame5ButtonFrameBottomRightTexture\",\n\t\"ChatFrame5ButtonFrameBottomTexture\",\n\t\"ChatFrame5ButtonFrameLeftTexture\",\n\t\"ChatFrame5ButtonFrameRightTexture\",\n\t\"ChatFrame5ButtonFrameTopLeftTexture\",\n\t\"ChatFrame5ButtonFrameTopRightTexture\",\n\t\"ChatFrame5ButtonFrameTopTexture\",\n\t\"ChatFrame5EditBoxFocusLeft\",\n\t\"ChatFrame5EditBoxFocusMid\",\n\t\"ChatFrame5EditBoxFocusRight\",\n\t\"ChatFrame5EditBoxHeader\",\n\t\"ChatFrame5EditBoxLeft\",\n\t\"ChatFrame5EditBoxMid\",\n\t\"ChatFrame5EditBoxRight\",\n\t\"ChatFrame5LeftTexture\",\n\t\"ChatFrame5RightTexture\",\n\t\"ChatFrame5TabDropDownButtonDisabledTexture\",\n\t\"ChatFrame5TabDropDownButtonHighlightTexture\",\n\t\"ChatFrame5TabDropDownButtonNormalTexture\",\n\t\"ChatFrame5TabDropDownButtonPushedTexture\",\n\t\"ChatFrame5TabDropDownLeft\",\n\t\"ChatFrame5TabDropDownMiddle\",\n\t\"ChatFrame5TabDropDownRight\",\n\t\"ChatFrame5TabDropDownText\",\n\t\"ChatFrame5TabGlow\",\n\t\"ChatFrame5TabHighlightLeft\",\n\t\"ChatFrame5TabHighlightMiddle\",\n\t\"ChatFrame5TabHighlightRight\",\n\t\"ChatFrame5TabLeft\",\n\t\"ChatFrame5TabMiddle\",\n\t\"ChatFrame5TabRight\",\n\t\"ChatFrame5TabSelectedLeft\",\n\t\"ChatFrame5TabSelectedMiddle\",\n\t\"ChatFrame5TabSelectedRight\",\n\t\"ChatFrame5TabText\",\n\t\"ChatFrame5TopLeftTexture\",\n\t\"ChatFrame5TopRightTexture\",\n\t\"ChatFrame5TopTexture\",\n\t\"ChatFrame6Background\",\n\t\"ChatFrame6BottomLeftTexture\",\n\t\"ChatFrame6BottomRightTexture\",\n\t\"ChatFrame6BottomTexture\",\n\t\"ChatFrame6ButtonFrameBackground\",\n\t\"ChatFrame6ButtonFrameBottomButtonFlash\",\n\t\"ChatFrame6ButtonFrameBottomLeftTexture\",\n\t\"ChatFrame6ButtonFrameBottomRightTexture\",\n\t\"ChatFrame6ButtonFrameBottomTexture\",\n\t\"ChatFrame6ButtonFrameLeftTexture\",\n\t\"ChatFrame6ButtonFrameRightTexture\",\n\t\"ChatFrame6ButtonFrameTopLeftTexture\",\n\t\"ChatFrame6ButtonFrameTopRightTexture\",\n\t\"ChatFrame6ButtonFrameTopTexture\",\n\t\"ChatFrame6EditBoxFocusLeft\",\n\t\"ChatFrame6EditBoxFocusMid\",\n\t\"ChatFrame6EditBoxFocusRight\",\n\t\"ChatFrame6EditBoxHeader\",\n\t\"ChatFrame6EditBoxLeft\",\n\t\"ChatFrame6EditBoxMid\",\n\t\"ChatFrame6EditBoxRight\",\n\t\"ChatFrame6LeftTexture\",\n\t\"ChatFrame6RightTexture\",\n\t\"ChatFrame6TabDropDownButtonDisabledTexture\",\n\t\"ChatFrame6TabDropDownButtonHighlightTexture\",\n\t\"ChatFrame6TabDropDownButtonNormalTexture\",\n\t\"ChatFrame6TabDropDownButtonPushedTexture\",\n\t\"ChatFrame6TabDropDownLeft\",\n\t\"ChatFrame6TabDropDownMiddle\",\n\t\"ChatFrame6TabDropDownRight\",\n\t\"ChatFrame6TabDropDownText\",\n\t\"ChatFrame6TabGlow\",\n\t\"ChatFrame6TabHighlightLeft\",\n\t\"ChatFrame6TabHighlightMiddle\",\n\t\"ChatFrame6TabHighlightRight\",\n\t\"ChatFrame6TabLeft\",\n\t\"ChatFrame6TabMiddle\",\n\t\"ChatFrame6TabRight\",\n\t\"ChatFrame6TabSelectedLeft\",\n\t\"ChatFrame6TabSelectedMiddle\",\n\t\"ChatFrame6TabSelectedRight\",\n\t\"ChatFrame6TabText\",\n\t\"ChatFrame6TopLeftTexture\",\n\t\"ChatFrame6TopRightTexture\",\n\t\"ChatFrame6TopTexture\",\n\t\"ChatFrame7Background\",\n\t\"ChatFrame7BottomLeftTexture\",\n\t\"ChatFrame7BottomRightTexture\",\n\t\"ChatFrame7BottomTexture\",\n\t\"ChatFrame7ButtonFrameBackground\",\n\t\"ChatFrame7ButtonFrameBottomButtonFlash\",\n\t\"ChatFrame7ButtonFrameBottomLeftTexture\",\n\t\"ChatFrame7ButtonFrameBottomRightTexture\",\n\t\"ChatFrame7ButtonFrameBottomTexture\",\n\t\"ChatFrame7ButtonFrameLeftTexture\",\n\t\"ChatFrame7ButtonFrameRightTexture\",\n\t\"ChatFrame7ButtonFrameTopLeftTexture\",\n\t\"ChatFrame7ButtonFrameTopRightTexture\",\n\t\"ChatFrame7ButtonFrameTopTexture\",\n\t\"ChatFrame7EditBoxFocusLeft\",\n\t\"ChatFrame7EditBoxFocusMid\",\n\t\"ChatFrame7EditBoxFocusRight\",\n\t\"ChatFrame7EditBoxHeader\",\n\t\"ChatFrame7EditBoxLeft\",\n\t\"ChatFrame7EditBoxMid\",\n\t\"ChatFrame7EditBoxRight\",\n\t\"ChatFrame7LeftTexture\",\n\t\"ChatFrame7RightTexture\",\n\t\"ChatFrame7TabDropDownButtonDisabledTexture\",\n\t\"ChatFrame7TabDropDownButtonHighlightTexture\",\n\t\"ChatFrame7TabDropDownButtonNormalTexture\",\n\t\"ChatFrame7TabDropDownButtonPushedTexture\",\n\t\"ChatFrame7TabDropDownLeft\",\n\t\"ChatFrame7TabDropDownMiddle\",\n\t\"ChatFrame7TabDropDownRight\",\n\t\"ChatFrame7TabDropDownText\",\n\t\"ChatFrame7TabGlow\",\n\t\"ChatFrame7TabHighlightLeft\",\n\t\"ChatFrame7TabHighlightMiddle\",\n\t\"ChatFrame7TabHighlightRight\",\n\t\"ChatFrame7TabLeft\",\n\t\"ChatFrame7TabMiddle\",\n\t\"ChatFrame7TabRight\",\n\t\"ChatFrame7TabSelectedLeft\",\n\t\"ChatFrame7TabSelectedMiddle\",\n\t\"ChatFrame7TabSelectedRight\",\n\t\"ChatFrame7TabText\",\n\t\"ChatFrame7TopLeftTexture\",\n\t\"ChatFrame7TopRightTexture\",\n\t\"ChatFrame7TopTexture\",\n\t\"ChatFrame8Background\",\n\t\"ChatFrame8BottomLeftTexture\",\n\t\"ChatFrame8BottomRightTexture\",\n\t\"ChatFrame8BottomTexture\",\n\t\"ChatFrame8ButtonFrameBackground\",\n\t\"ChatFrame8ButtonFrameBottomButtonFlash\",\n\t\"ChatFrame8ButtonFrameBottomLeftTexture\",\n\t\"ChatFrame8ButtonFrameBottomRightTexture\",\n\t\"ChatFrame8ButtonFrameBottomTexture\",\n\t\"ChatFrame8ButtonFrameLeftTexture\",\n\t\"ChatFrame8ButtonFrameRightTexture\",\n\t\"ChatFrame8ButtonFrameTopLeftTexture\",\n\t\"ChatFrame8ButtonFrameTopRightTexture\",\n\t\"ChatFrame8ButtonFrameTopTexture\",\n\t\"ChatFrame8EditBoxFocusLeft\",\n\t\"ChatFrame8EditBoxFocusMid\",\n\t\"ChatFrame8EditBoxFocusRight\",\n\t\"ChatFrame8EditBoxHeader\",\n\t\"ChatFrame8EditBoxLeft\",\n\t\"ChatFrame8EditBoxMid\",\n\t\"ChatFrame8EditBoxRight\",\n\t\"ChatFrame8LeftTexture\",\n\t\"ChatFrame8RightTexture\",\n\t\"ChatFrame8TabDropDownButtonDisabledTexture\",\n\t\"ChatFrame8TabDropDownButtonHighlightTexture\",\n\t\"ChatFrame8TabDropDownButtonNormalTexture\",\n\t\"ChatFrame8TabDropDownButtonPushedTexture\",\n\t\"ChatFrame8TabDropDownLeft\",\n\t\"ChatFrame8TabDropDownMiddle\",\n\t\"ChatFrame8TabDropDownRight\",\n\t\"ChatFrame8TabDropDownText\",\n\t\"ChatFrame8TabGlow\",\n\t\"ChatFrame8TabHighlightLeft\",\n\t\"ChatFrame8TabHighlightMiddle\",\n\t\"ChatFrame8TabHighlightRight\",\n\t\"ChatFrame8TabLeft\",\n\t\"ChatFrame8TabMiddle\",\n\t\"ChatFrame8TabRight\",\n\t\"ChatFrame8TabSelectedLeft\",\n\t\"ChatFrame8TabSelectedMiddle\",\n\t\"ChatFrame8TabSelectedRight\",\n\t\"ChatFrame8TabText\",\n\t\"ChatFrame8TopLeftTexture\",\n\t\"ChatFrame8TopRightTexture\",\n\t\"ChatFrame8TopTexture\",\n\t\"ChatFrame9Background\",\n\t\"ChatFrame9BottomLeftTexture\",\n\t\"ChatFrame9BottomRightTexture\",\n\t\"ChatFrame9BottomTexture\",\n\t\"ChatFrame9ButtonFrameBackground\",\n\t\"ChatFrame9ButtonFrameBottomButtonFlash\",\n\t\"ChatFrame9ButtonFrameBottomLeftTexture\",\n\t\"ChatFrame9ButtonFrameBottomRightTexture\",\n\t\"ChatFrame9ButtonFrameBottomTexture\",\n\t\"ChatFrame9ButtonFrameLeftTexture\",\n\t\"ChatFrame9ButtonFrameRightTexture\",\n\t\"ChatFrame9ButtonFrameTopLeftTexture\",\n\t\"ChatFrame9ButtonFrameTopRightTexture\",\n\t\"ChatFrame9ButtonFrameTopTexture\",\n\t\"ChatFrame9EditBoxFocusLeft\",\n\t\"ChatFrame9EditBoxFocusMid\",\n\t\"ChatFrame9EditBoxFocusRight\",\n\t\"ChatFrame9EditBoxHeader\",\n\t\"ChatFrame9EditBoxLeft\",\n\t\"ChatFrame9EditBoxMid\",\n\t\"ChatFrame9EditBoxRight\",\n\t\"ChatFrame9LeftTexture\",\n\t\"ChatFrame9RightTexture\",\n\t\"ChatFrame9TabDropDownButtonDisabledTexture\",\n\t\"ChatFrame9TabDropDownButtonHighlightTexture\",\n\t\"ChatFrame9TabDropDownButtonNormalTexture\",\n\t\"ChatFrame9TabDropDownButtonPushedTexture\",\n\t\"ChatFrame9TabDropDownLeft\",\n\t\"ChatFrame9TabDropDownMiddle\",\n\t\"ChatFrame9TabDropDownRight\",\n\t\"ChatFrame9TabDropDownText\",\n\t\"ChatFrame9TabGlow\",\n\t\"ChatFrame9TabHighlightLeft\",\n\t\"ChatFrame9TabHighlightMiddle\",\n\t\"ChatFrame9TabHighlightRight\",\n\t\"ChatFrame9TabLeft\",\n\t\"ChatFrame9TabMiddle\",\n\t\"ChatFrame9TabRight\",\n\t\"ChatFrame9TabSelectedLeft\",\n\t\"ChatFrame9TabSelectedMiddle\",\n\t\"ChatFrame9TabSelectedRight\",\n\t\"ChatFrame9TabText\",\n\t\"ChatFrame9TopLeftTexture\",\n\t\"ChatFrame9TopRightTexture\",\n\t\"ChatFrame9TopTexture\",\n\t\"ChatMenuButton10ShortcutText\",\n\t\"ChatMenuButton11ShortcutText\",\n\t\"ChatMenuButton12ShortcutText\",\n\t\"ChatMenuButton13ShortcutText\",\n\t\"ChatMenuButton14ShortcutText\",\n\t\"ChatMenuButton15ShortcutText\",\n\t\"ChatMenuButton16ShortcutText\",\n\t\"ChatMenuButton17ShortcutText\",\n\t\"ChatMenuButton18ShortcutText\",\n\t\"ChatMenuButton19ShortcutText\",\n\t\"ChatMenuButton1ShortcutText\",\n\t\"ChatMenuButton20ShortcutText\",\n\t\"ChatMenuButton21ShortcutText\",\n\t\"ChatMenuButton22ShortcutText\",\n\t\"ChatMenuButton23ShortcutText\",\n\t\"ChatMenuButton24ShortcutText\",\n\t\"ChatMenuButton25ShortcutText\",\n\t\"ChatMenuButton26ShortcutText\",\n\t\"ChatMenuButton27ShortcutText\",\n\t\"ChatMenuButton28ShortcutText\",\n\t\"ChatMenuButton29ShortcutText\",\n\t\"ChatMenuButton2ShortcutText\",\n\t\"ChatMenuButton30ShortcutText\",\n\t\"ChatMenuButton31ShortcutText\",\n\t\"ChatMenuButton32ShortcutText\",\n\t\"ChatMenuButton3ShortcutText\",\n\t\"ChatMenuButton4ShortcutText\",\n\t\"ChatMenuButton5ShortcutText\",\n\t\"ChatMenuButton6ShortcutText\",\n\t\"ChatMenuButton7ShortcutText\",\n\t\"ChatMenuButton8ShortcutText\",\n\t\"ChatMenuButton9ShortcutText\",\n\t\"CoinPickupCancelButtonText\",\n\t\"CoinPickupCopperIcon\",\n\t\"CoinPickupGoldIcon\",\n\t\"CoinPickupLabel\",\n\t\"CoinPickupOkayButtonText\",\n\t\"CoinPickupSilverIcon\",\n\t\"CoinPickupText\",\n\t\"ColorPickerCancelButtonText\",\n\t\"ColorPickerFrameHeader\",\n\t\"ColorPickerOkayButtonText\",\n\t\"ColorPickerWheel\",\n\t\"ColorSwatch\",\n\t\"CombatConfigColorsColorizeDamageNumberCheckText\",\n\t\"CombatConfigColorsColorizeDamageNumberColorSwatchNormalTexture\",\n\t\"CombatConfigColorsColorizeDamageNumberColorSwatchSwatchBg\",\n\t\"CombatConfigColorsColorizeDamageNumberSchoolColoringText\",\n\t\"CombatConfigColorsColorizeDamageSchoolCheckText\",\n\t\"CombatConfigColorsColorizeEntireLineBySourceText\",\n\t\"CombatConfigColorsColorizeEntireLineByTargetText\",\n\t\"CombatConfigColorsColorizeEntireLineCheckText\",\n\t\"CombatConfigColorsColorizeSpellNamesCheckText\",\n\t\"CombatConfigColorsColorizeSpellNamesColorSwatchNormalTexture\",\n\t\"CombatConfigColorsColorizeSpellNamesColorSwatchSwatchBg\",\n\t\"CombatConfigColorsColorizeSpellNamesSchoolColoringText\",\n\t\"CombatConfigColorsColorizeUnitNameCheckText\",\n\t\"CombatConfigColorsExampleString1\",\n\t\"CombatConfigColorsExampleString2\",\n\t\"CombatConfigColorsExampleTitle\",\n\t\"CombatConfigColorsHighlightingAbilityText\",\n\t\"CombatConfigColorsHighlightingDamageText\",\n\t\"CombatConfigColorsHighlightingLineText\",\n\t\"CombatConfigColorsHighlightingSchoolText\",\n\t\"CombatConfigColorsHighlightingTitle\",\n\t\"CombatConfigColorsUnitColorsSwatch1ColorSwatchNormalTexture\",\n\t\"CombatConfigColorsUnitColorsSwatch1ColorSwatchSwatchBg\",\n\t\"CombatConfigColorsUnitColorsSwatch1Text\",\n\t\"CombatConfigColorsUnitColorsSwatch2ColorSwatchNormalTexture\",\n\t\"CombatConfigColorsUnitColorsSwatch2ColorSwatchSwatchBg\",\n\t\"CombatConfigColorsUnitColorsSwatch2Text\",\n\t\"CombatConfigColorsUnitColorsSwatch3ColorSwatchNormalTexture\",\n\t\"CombatConfigColorsUnitColorsSwatch3ColorSwatchSwatchBg\",\n\t\"CombatConfigColorsUnitColorsSwatch3Text\",\n\t\"CombatConfigColorsUnitColorsSwatch4ColorSwatchNormalTexture\",\n\t\"CombatConfigColorsUnitColorsSwatch4ColorSwatchSwatchBg\",\n\t\"CombatConfigColorsUnitColorsSwatch4Text\",\n\t\"CombatConfigColorsUnitColorsSwatch5ColorSwatchNormalTexture\",\n\t\"CombatConfigColorsUnitColorsSwatch5ColorSwatchSwatchBg\",\n\t\"CombatConfigColorsUnitColorsSwatch5Text\",\n\t\"CombatConfigColorsUnitColorsSwatch6ColorSwatchNormalTexture\",\n\t\"CombatConfigColorsUnitColorsSwatch6ColorSwatchSwatchBg\",\n\t\"CombatConfigColorsUnitColorsSwatch6Text\",\n\t\"CombatConfigColorsUnitColorsSwatch7ColorSwatchNormalTexture\",\n\t\"CombatConfigColorsUnitColorsSwatch7ColorSwatchSwatchBg\",\n\t\"CombatConfigColorsUnitColorsSwatch7Text\",\n\t\"CombatConfigColorsUnitColorsTitle\",\n\t\"CombatConfigFormattingExampleString1\",\n\t\"CombatConfigFormattingExampleString2\",\n\t\"CombatConfigFormattingExampleTitle\",\n\t\"CombatConfigFormattingFullTextText\",\n\t\"CombatConfigFormattingItemNamesText\",\n\t\"CombatConfigFormattingShowBracesText\",\n\t\"CombatConfigFormattingShowTimeStampText\",\n\t\"CombatConfigFormattingSpellNamesText\",\n\t\"CombatConfigFormattingUnitNamesText\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox1CheckText\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox2CheckText\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox3CheckText\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox4CheckText\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox5CheckText\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox6CheckText\",\n\t\"CombatConfigMessageSourcesDoneByCheckBox7CheckText\",\n\t\"CombatConfigMessageSourcesDoneByTitle\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox1CheckText\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox2CheckText\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox3CheckText\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox4CheckText\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox5CheckText\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox6CheckText\",\n\t\"CombatConfigMessageSourcesDoneToCheckBox7CheckText\",\n\t\"CombatConfigMessageSourcesDoneToTitle\",\n\t\"CombatConfigMessageTypesLeftCheckBox1Text\",\n\t\"CombatConfigMessageTypesLeftCheckBox1_1Text\",\n\t\"CombatConfigMessageTypesLeftCheckBox1_2Text\",\n\t\"CombatConfigMessageTypesLeftCheckBox2Text\",\n\t\"CombatConfigMessageTypesLeftCheckBox2_1Text\",\n\t\"CombatConfigMessageTypesLeftCheckBox2_2Text\",\n\t\"CombatConfigMessageTypesLeftCheckBox3Text\",\n\t\"CombatConfigMessageTypesLeftCheckBox3_1Text\",\n\t\"CombatConfigMessageTypesLeftCheckBox3_2Text\",\n\t\"CombatConfigMessageTypesLeftCheckBox3_3Text\",\n\t\"CombatConfigMessageTypesLeftCheckBox3_4Text\",\n\t\"CombatConfigMessageTypesLeftCheckBox4Text\",\n\t\"CombatConfigMessageTypesLeftCheckBox4_1Text\",\n\t\"CombatConfigMessageTypesLeftCheckBox4_2Text\",\n\t\"CombatConfigMessageTypesLeftCheckBox4_3Text\",\n\t\"CombatConfigMessageTypesLeftCheckBox4_4Text\",\n\t\"CombatConfigMessageTypesMiscCheckBox1Text\",\n\t\"CombatConfigMessageTypesMiscCheckBox2Text\",\n\t\"CombatConfigMessageTypesMiscCheckBox3Text\",\n\t\"CombatConfigMessageTypesMiscCheckBox4Text\",\n\t\"CombatConfigMessageTypesRightCheckBox1Text\",\n\t\"CombatConfigMessageTypesRightCheckBox1_10Text\",\n\t\"CombatConfigMessageTypesRightCheckBox1_1Text\",\n\t\"CombatConfigMessageTypesRightCheckBox1_2Text\",\n\t\"CombatConfigMessageTypesRightCheckBox1_3Text\",\n\t\"CombatConfigMessageTypesRightCheckBox1_4Text\",\n\t\"CombatConfigMessageTypesRightCheckBox1_5Text\",\n\t\"CombatConfigMessageTypesRightCheckBox1_6Text\",\n\t\"CombatConfigMessageTypesRightCheckBox1_7Text\",\n\t\"CombatConfigMessageTypesRightCheckBox1_8Text\",\n\t\"CombatConfigMessageTypesRightCheckBox1_9Text\",\n\t\"CombatConfigMessageTypesRightCheckBox2Text\",\n\t\"CombatConfigMessageTypesRightCheckBox2_1Text\",\n\t\"CombatConfigMessageTypesRightCheckBox2_2Text\",\n\t\"CombatConfigMessageTypesRightCheckBox2_3Text\",\n\t\"CombatConfigSettingsNameEditBoxLeft\",\n\t\"CombatConfigSettingsNameEditBoxMiddle\",\n\t\"CombatConfigSettingsNameEditBoxRight\",\n\t\"CombatConfigSettingsPartyText\",\n\t\"CombatConfigSettingsRaidText\",\n\t\"CombatConfigSettingsSaveButtonText\",\n\t\"CombatConfigSettingsShowQuickButtonText\",\n\t\"CombatConfigSettingsSoloText\",\n\t\"CombatConfigTab1Left\",\n\t\"CombatConfigTab1Middle\",\n\t\"CombatConfigTab1Right\",\n\t\"CombatConfigTab1Text\",\n\t\"CombatConfigTab2Left\",\n\t\"CombatConfigTab2Middle\",\n\t\"CombatConfigTab2Right\",\n\t\"CombatConfigTab2Text\",\n\t\"CombatConfigTab3Left\",\n\t\"CombatConfigTab3Middle\",\n\t\"CombatConfigTab3Right\",\n\t\"CombatConfigTab3Text\",\n\t\"CombatConfigTab4Left\",\n\t\"CombatConfigTab4Middle\",\n\t\"CombatConfigTab4Right\",\n\t\"CombatConfigTab4Text\",\n\t\"CombatConfigTab5Left\",\n\t\"CombatConfigTab5Middle\",\n\t\"CombatConfigTab5Right\",\n\t\"CombatConfigTab5Text\",\n\t\"CombatLogDropDownButtonDisabledTexture\",\n\t\"CombatLogDropDownButtonHighlightTexture\",\n\t\"CombatLogDropDownButtonNormalTexture\",\n\t\"CombatLogDropDownButtonPushedTexture\",\n\t\"CombatLogDropDownLeft\",\n\t\"CombatLogDropDownMiddle\",\n\t\"CombatLogDropDownRight\",\n\t\"CombatLogDropDownText\",\n\t\"CombatLogFont\",\n\t\"CombatLogQuickButtonFrame_CustomTexture\",\n\t\"CombatText1\",\n\t\"CombatText10\",\n\t\"CombatText11\",\n\t\"CombatText12\",\n\t\"CombatText13\",\n\t\"CombatText14\",\n\t\"CombatText15\",\n\t\"CombatText16\",\n\t\"CombatText17\",\n\t\"CombatText18\",\n\t\"CombatText19\",\n\t\"CombatText2\",\n\t\"CombatText20\",\n\t\"CombatText3\",\n\t\"CombatText4\",\n\t\"CombatText5\",\n\t\"CombatText6\",\n\t\"CombatText7\",\n\t\"CombatText8\",\n\t\"CombatText9\",\n\t\"CombatTextFont\",\n\t\"ComboPoint1Highlight\",\n\t\"ComboPoint1Shine\",\n\t\"ComboPoint2Highlight\",\n\t\"ComboPoint2Shine\",\n\t\"ComboPoint3Highlight\",\n\t\"ComboPoint3Shine\",\n\t\"ComboPoint4Highlight\",\n\t\"ComboPoint4Shine\",\n\t\"ComboPoint5Highlight\",\n\t\"ComboPoint5Shine\",\n\t\"CompanionButton10ActiveTexture\",\n\t\"CompanionButton10Highlight\",\n\t\"CompanionButton11ActiveTexture\",\n\t\"CompanionButton11Highlight\",\n\t\"CompanionButton12ActiveTexture\",\n\t\"CompanionButton12Highlight\",\n\t\"CompanionButton1ActiveTexture\",\n\t\"CompanionButton1Highlight\",\n\t\"CompanionButton2ActiveTexture\",\n\t\"CompanionButton2Highlight\",\n\t\"CompanionButton3ActiveTexture\",\n\t\"CompanionButton3Highlight\",\n\t\"CompanionButton4ActiveTexture\",\n\t\"CompanionButton4Highlight\",\n\t\"CompanionButton5ActiveTexture\",\n\t\"CompanionButton5Highlight\",\n\t\"CompanionButton6ActiveTexture\",\n\t\"CompanionButton6Highlight\",\n\t\"CompanionButton7ActiveTexture\",\n\t\"CompanionButton7Highlight\",\n\t\"CompanionButton8ActiveTexture\",\n\t\"CompanionButton8Highlight\",\n\t\"CompanionButton9ActiveTexture\",\n\t\"CompanionButton9Highlight\",\n\t\"CompanionPageNumber\",\n\t\"CompanionSelectedName\",\n\t\"CompanionSummonButtonText\",\n\t\"ConsolidatedBuffsCount\",\n\t\"ConsolidatedBuffsDuration\",\n\t\"ConsolidatedBuffsIcon\",\n\t\"ContainerFrame10Background1Slot\",\n\t\"ContainerFrame10BackgroundBottom\",\n\t\"ContainerFrame10BackgroundMiddle1\",\n\t\"ContainerFrame10BackgroundMiddle2\",\n\t\"ContainerFrame10BackgroundTop\",\n\t\"ContainerFrame10Item10Count\",\n\t\"ContainerFrame10Item10IconQuestTexture\",\n\t\"ContainerFrame10Item10IconTexture\",\n\t\"ContainerFrame10Item10NormalTexture\",\n\t\"ContainerFrame10Item10Stock\",\n\t\"ContainerFrame10Item11Count\",\n\t\"ContainerFrame10Item11IconQuestTexture\",\n\t\"ContainerFrame10Item11IconTexture\",\n\t\"ContainerFrame10Item11NormalTexture\",\n\t\"ContainerFrame10Item11Stock\",\n\t\"ContainerFrame10Item12Count\",\n\t\"ContainerFrame10Item12IconQuestTexture\",\n\t\"ContainerFrame10Item12IconTexture\",\n\t\"ContainerFrame10Item12NormalTexture\",\n\t\"ContainerFrame10Item12Stock\",\n\t\"ContainerFrame10Item13Count\",\n\t\"ContainerFrame10Item13IconQuestTexture\",\n\t\"ContainerFrame10Item13IconTexture\",\n\t\"ContainerFrame10Item13NormalTexture\",\n\t\"ContainerFrame10Item13Stock\",\n\t\"ContainerFrame10Item14Count\",\n\t\"ContainerFrame10Item14IconQuestTexture\",\n\t\"ContainerFrame10Item14IconTexture\",\n\t\"ContainerFrame10Item14NormalTexture\",\n\t\"ContainerFrame10Item14Stock\",\n\t\"ContainerFrame10Item15Count\",\n\t\"ContainerFrame10Item15IconQuestTexture\",\n\t\"ContainerFrame10Item15IconTexture\",\n\t\"ContainerFrame10Item15NormalTexture\",\n\t\"ContainerFrame10Item15Stock\",\n\t\"ContainerFrame10Item16Count\",\n\t\"ContainerFrame10Item16IconQuestTexture\",\n\t\"ContainerFrame10Item16IconTexture\",\n\t\"ContainerFrame10Item16NormalTexture\",\n\t\"ContainerFrame10Item16Stock\",\n\t\"ContainerFrame10Item17Count\",\n\t\"ContainerFrame10Item17IconQuestTexture\",\n\t\"ContainerFrame10Item17IconTexture\",\n\t\"ContainerFrame10Item17NormalTexture\",\n\t\"ContainerFrame10Item17Stock\",\n\t\"ContainerFrame10Item18Count\",\n\t\"ContainerFrame10Item18IconQuestTexture\",\n\t\"ContainerFrame10Item18IconTexture\",\n\t\"ContainerFrame10Item18NormalTexture\",\n\t\"ContainerFrame10Item18Stock\",\n\t\"ContainerFrame10Item19Count\",\n\t\"ContainerFrame10Item19IconQuestTexture\",\n\t\"ContainerFrame10Item19IconTexture\",\n\t\"ContainerFrame10Item19NormalTexture\",\n\t\"ContainerFrame10Item19Stock\",\n\t\"ContainerFrame10Item1Count\",\n\t\"ContainerFrame10Item1IconQuestTexture\",\n\t\"ContainerFrame10Item1IconTexture\",\n\t\"ContainerFrame10Item1NormalTexture\",\n\t\"ContainerFrame10Item1Stock\",\n\t\"ContainerFrame10Item20Count\",\n\t\"ContainerFrame10Item20IconQuestTexture\",\n\t\"ContainerFrame10Item20IconTexture\",\n\t\"ContainerFrame10Item20NormalTexture\",\n\t\"ContainerFrame10Item20Stock\",\n\t\"ContainerFrame10Item21Count\",\n\t\"ContainerFrame10Item21IconQuestTexture\",\n\t\"ContainerFrame10Item21IconTexture\",\n\t\"ContainerFrame10Item21NormalTexture\",\n\t\"ContainerFrame10Item21Stock\",\n\t\"ContainerFrame10Item22Count\",\n\t\"ContainerFrame10Item22IconQuestTexture\",\n\t\"ContainerFrame10Item22IconTexture\",\n\t\"ContainerFrame10Item22NormalTexture\",\n\t\"ContainerFrame10Item22Stock\",\n\t\"ContainerFrame10Item23Count\",\n\t\"ContainerFrame10Item23IconQuestTexture\",\n\t\"ContainerFrame10Item23IconTexture\",\n\t\"ContainerFrame10Item23NormalTexture\",\n\t\"ContainerFrame10Item23Stock\",\n\t\"ContainerFrame10Item24Count\",\n\t\"ContainerFrame10Item24IconQuestTexture\",\n\t\"ContainerFrame10Item24IconTexture\",\n\t\"ContainerFrame10Item24NormalTexture\",\n\t\"ContainerFrame10Item24Stock\",\n\t\"ContainerFrame10Item25Count\",\n\t\"ContainerFrame10Item25IconQuestTexture\",\n\t\"ContainerFrame10Item25IconTexture\",\n\t\"ContainerFrame10Item25NormalTexture\",\n\t\"ContainerFrame10Item25Stock\",\n\t\"ContainerFrame10Item26Count\",\n\t\"ContainerFrame10Item26IconQuestTexture\",\n\t\"ContainerFrame10Item26IconTexture\",\n\t\"ContainerFrame10Item26NormalTexture\",\n\t\"ContainerFrame10Item26Stock\",\n\t\"ContainerFrame10Item27Count\",\n\t\"ContainerFrame10Item27IconQuestTexture\",\n\t\"ContainerFrame10Item27IconTexture\",\n\t\"ContainerFrame10Item27NormalTexture\",\n\t\"ContainerFrame10Item27Stock\",\n\t\"ContainerFrame10Item28Count\",\n\t\"ContainerFrame10Item28IconQuestTexture\",\n\t\"ContainerFrame10Item28IconTexture\",\n\t\"ContainerFrame10Item28NormalTexture\",\n\t\"ContainerFrame10Item28Stock\",\n\t\"ContainerFrame10Item29Count\",\n\t\"ContainerFrame10Item29IconQuestTexture\",\n\t\"ContainerFrame10Item29IconTexture\",\n\t\"ContainerFrame10Item29NormalTexture\",\n\t\"ContainerFrame10Item29Stock\",\n\t\"ContainerFrame10Item2Count\",\n\t\"ContainerFrame10Item2IconQuestTexture\",\n\t\"ContainerFrame10Item2IconTexture\",\n\t\"ContainerFrame10Item2NormalTexture\",\n\t\"ContainerFrame10Item2Stock\",\n\t\"ContainerFrame10Item30Count\",\n\t\"ContainerFrame10Item30IconQuestTexture\",\n\t\"ContainerFrame10Item30IconTexture\",\n\t\"ContainerFrame10Item30NormalTexture\",\n\t\"ContainerFrame10Item30Stock\",\n\t\"ContainerFrame10Item31Count\",\n\t\"ContainerFrame10Item31IconQuestTexture\",\n\t\"ContainerFrame10Item31IconTexture\",\n\t\"ContainerFrame10Item31NormalTexture\",\n\t\"ContainerFrame10Item31Stock\",\n\t\"ContainerFrame10Item32Count\",\n\t\"ContainerFrame10Item32IconQuestTexture\",\n\t\"ContainerFrame10Item32IconTexture\",\n\t\"ContainerFrame10Item32NormalTexture\",\n\t\"ContainerFrame10Item32Stock\",\n\t\"ContainerFrame10Item33Count\",\n\t\"ContainerFrame10Item33IconQuestTexture\",\n\t\"ContainerFrame10Item33IconTexture\",\n\t\"ContainerFrame10Item33NormalTexture\",\n\t\"ContainerFrame10Item33Stock\",\n\t\"ContainerFrame10Item34Count\",\n\t\"ContainerFrame10Item34IconQuestTexture\",\n\t\"ContainerFrame10Item34IconTexture\",\n\t\"ContainerFrame10Item34NormalTexture\",\n\t\"ContainerFrame10Item34Stock\",\n\t\"ContainerFrame10Item35Count\",\n\t\"ContainerFrame10Item35IconQuestTexture\",\n\t\"ContainerFrame10Item35IconTexture\",\n\t\"ContainerFrame10Item35NormalTexture\",\n\t\"ContainerFrame10Item35Stock\",\n\t\"ContainerFrame10Item36Count\",\n\t\"ContainerFrame10Item36IconQuestTexture\",\n\t\"ContainerFrame10Item36IconTexture\",\n\t\"ContainerFrame10Item36NormalTexture\",\n\t\"ContainerFrame10Item36Stock\",\n\t\"ContainerFrame10Item3Count\",\n\t\"ContainerFrame10Item3IconQuestTexture\",\n\t\"ContainerFrame10Item3IconTexture\",\n\t\"ContainerFrame10Item3NormalTexture\",\n\t\"ContainerFrame10Item3Stock\",\n\t\"ContainerFrame10Item4Count\",\n\t\"ContainerFrame10Item4IconQuestTexture\",\n\t\"ContainerFrame10Item4IconTexture\",\n\t\"ContainerFrame10Item4NormalTexture\",\n\t\"ContainerFrame10Item4Stock\",\n\t\"ContainerFrame10Item5Count\",\n\t\"ContainerFrame10Item5IconQuestTexture\",\n\t\"ContainerFrame10Item5IconTexture\",\n\t\"ContainerFrame10Item5NormalTexture\",\n\t\"ContainerFrame10Item5Stock\",\n\t\"ContainerFrame10Item6Count\",\n\t\"ContainerFrame10Item6IconQuestTexture\",\n\t\"ContainerFrame10Item6IconTexture\",\n\t\"ContainerFrame10Item6NormalTexture\",\n\t\"ContainerFrame10Item6Stock\",\n\t\"ContainerFrame10Item7Count\",\n\t\"ContainerFrame10Item7IconQuestTexture\",\n\t\"ContainerFrame10Item7IconTexture\",\n\t\"ContainerFrame10Item7NormalTexture\",\n\t\"ContainerFrame10Item7Stock\",\n\t\"ContainerFrame10Item8Count\",\n\t\"ContainerFrame10Item8IconQuestTexture\",\n\t\"ContainerFrame10Item8IconTexture\",\n\t\"ContainerFrame10Item8NormalTexture\",\n\t\"ContainerFrame10Item8Stock\",\n\t\"ContainerFrame10Item9Count\",\n\t\"ContainerFrame10Item9IconQuestTexture\",\n\t\"ContainerFrame10Item9IconTexture\",\n\t\"ContainerFrame10Item9NormalTexture\",\n\t\"ContainerFrame10Item9Stock\",\n\t\"ContainerFrame10MoneyFrameCopperButtonText\",\n\t\"ContainerFrame10MoneyFrameGoldButtonText\",\n\t\"ContainerFrame10MoneyFrameSilverButtonText\",\n\t\"ContainerFrame10Name\",\n\t\"ContainerFrame10Portrait\",\n\t\"ContainerFrame11Background1Slot\",\n\t\"ContainerFrame11BackgroundBottom\",\n\t\"ContainerFrame11BackgroundMiddle1\",\n\t\"ContainerFrame11BackgroundMiddle2\",\n\t\"ContainerFrame11BackgroundTop\",\n\t\"ContainerFrame11Item10Count\",\n\t\"ContainerFrame11Item10IconQuestTexture\",\n\t\"ContainerFrame11Item10IconTexture\",\n\t\"ContainerFrame11Item10NormalTexture\",\n\t\"ContainerFrame11Item10Stock\",\n\t\"ContainerFrame11Item11Count\",\n\t\"ContainerFrame11Item11IconQuestTexture\",\n\t\"ContainerFrame11Item11IconTexture\",\n\t\"ContainerFrame11Item11NormalTexture\",\n\t\"ContainerFrame11Item11Stock\",\n\t\"ContainerFrame11Item12Count\",\n\t\"ContainerFrame11Item12IconQuestTexture\",\n\t\"ContainerFrame11Item12IconTexture\",\n\t\"ContainerFrame11Item12NormalTexture\",\n\t\"ContainerFrame11Item12Stock\",\n\t\"ContainerFrame11Item13Count\",\n\t\"ContainerFrame11Item13IconQuestTexture\",\n\t\"ContainerFrame11Item13IconTexture\",\n\t\"ContainerFrame11Item13NormalTexture\",\n\t\"ContainerFrame11Item13Stock\",\n\t\"ContainerFrame11Item14Count\",\n\t\"ContainerFrame11Item14IconQuestTexture\",\n\t\"ContainerFrame11Item14IconTexture\",\n\t\"ContainerFrame11Item14NormalTexture\",\n\t\"ContainerFrame11Item14Stock\",\n\t\"ContainerFrame11Item15Count\",\n\t\"ContainerFrame11Item15IconQuestTexture\",\n\t\"ContainerFrame11Item15IconTexture\",\n\t\"ContainerFrame11Item15NormalTexture\",\n\t\"ContainerFrame11Item15Stock\",\n\t\"ContainerFrame11Item16Count\",\n\t\"ContainerFrame11Item16IconQuestTexture\",\n\t\"ContainerFrame11Item16IconTexture\",\n\t\"ContainerFrame11Item16NormalTexture\",\n\t\"ContainerFrame11Item16Stock\",\n\t\"ContainerFrame11Item17Count\",\n\t\"ContainerFrame11Item17IconQuestTexture\",\n\t\"ContainerFrame11Item17IconTexture\",\n\t\"ContainerFrame11Item17NormalTexture\",\n\t\"ContainerFrame11Item17Stock\",\n\t\"ContainerFrame11Item18Count\",\n\t\"ContainerFrame11Item18IconQuestTexture\",\n\t\"ContainerFrame11Item18IconTexture\",\n\t\"ContainerFrame11Item18NormalTexture\",\n\t\"ContainerFrame11Item18Stock\",\n\t\"ContainerFrame11Item19Count\",\n\t\"ContainerFrame11Item19IconQuestTexture\",\n\t\"ContainerFrame11Item19IconTexture\",\n\t\"ContainerFrame11Item19NormalTexture\",\n\t\"ContainerFrame11Item19Stock\",\n\t\"ContainerFrame11Item1Count\",\n\t\"ContainerFrame11Item1IconQuestTexture\",\n\t\"ContainerFrame11Item1IconTexture\",\n\t\"ContainerFrame11Item1NormalTexture\",\n\t\"ContainerFrame11Item1Stock\",\n\t\"ContainerFrame11Item20Count\",\n\t\"ContainerFrame11Item20IconQuestTexture\",\n\t\"ContainerFrame11Item20IconTexture\",\n\t\"ContainerFrame11Item20NormalTexture\",\n\t\"ContainerFrame11Item20Stock\",\n\t\"ContainerFrame11Item21Count\",\n\t\"ContainerFrame11Item21IconQuestTexture\",\n\t\"ContainerFrame11Item21IconTexture\",\n\t\"ContainerFrame11Item21NormalTexture\",\n\t\"ContainerFrame11Item21Stock\",\n\t\"ContainerFrame11Item22Count\",\n\t\"ContainerFrame11Item22IconQuestTexture\",\n\t\"ContainerFrame11Item22IconTexture\",\n\t\"ContainerFrame11Item22NormalTexture\",\n\t\"ContainerFrame11Item22Stock\",\n\t\"ContainerFrame11Item23Count\",\n\t\"ContainerFrame11Item23IconQuestTexture\",\n\t\"ContainerFrame11Item23IconTexture\",\n\t\"ContainerFrame11Item23NormalTexture\",\n\t\"ContainerFrame11Item23Stock\",\n\t\"ContainerFrame11Item24Count\",\n\t\"ContainerFrame11Item24IconQuestTexture\",\n\t\"ContainerFrame11Item24IconTexture\",\n\t\"ContainerFrame11Item24NormalTexture\",\n\t\"ContainerFrame11Item24Stock\",\n\t\"ContainerFrame11Item25Count\",\n\t\"ContainerFrame11Item25IconQuestTexture\",\n\t\"ContainerFrame11Item25IconTexture\",\n\t\"ContainerFrame11Item25NormalTexture\",\n\t\"ContainerFrame11Item25Stock\",\n\t\"ContainerFrame11Item26Count\",\n\t\"ContainerFrame11Item26IconQuestTexture\",\n\t\"ContainerFrame11Item26IconTexture\",\n\t\"ContainerFrame11Item26NormalTexture\",\n\t\"ContainerFrame11Item26Stock\",\n\t\"ContainerFrame11Item27Count\",\n\t\"ContainerFrame11Item27IconQuestTexture\",\n\t\"ContainerFrame11Item27IconTexture\",\n\t\"ContainerFrame11Item27NormalTexture\",\n\t\"ContainerFrame11Item27Stock\",\n\t\"ContainerFrame11Item28Count\",\n\t\"ContainerFrame11Item28IconQuestTexture\",\n\t\"ContainerFrame11Item28IconTexture\",\n\t\"ContainerFrame11Item28NormalTexture\",\n\t\"ContainerFrame11Item28Stock\",\n\t\"ContainerFrame11Item29Count\",\n\t\"ContainerFrame11Item29IconQuestTexture\",\n\t\"ContainerFrame11Item29IconTexture\",\n\t\"ContainerFrame11Item29NormalTexture\",\n\t\"ContainerFrame11Item29Stock\",\n\t\"ContainerFrame11Item2Count\",\n\t\"ContainerFrame11Item2IconQuestTexture\",\n\t\"ContainerFrame11Item2IconTexture\",\n\t\"ContainerFrame11Item2NormalTexture\",\n\t\"ContainerFrame11Item2Stock\",\n\t\"ContainerFrame11Item30Count\",\n\t\"ContainerFrame11Item30IconQuestTexture\",\n\t\"ContainerFrame11Item30IconTexture\",\n\t\"ContainerFrame11Item30NormalTexture\",\n\t\"ContainerFrame11Item30Stock\",\n\t\"ContainerFrame11Item31Count\",\n\t\"ContainerFrame11Item31IconQuestTexture\",\n\t\"ContainerFrame11Item31IconTexture\",\n\t\"ContainerFrame11Item31NormalTexture\",\n\t\"ContainerFrame11Item31Stock\",\n\t\"ContainerFrame11Item32Count\",\n\t\"ContainerFrame11Item32IconQuestTexture\",\n\t\"ContainerFrame11Item32IconTexture\",\n\t\"ContainerFrame11Item32NormalTexture\",\n\t\"ContainerFrame11Item32Stock\",\n\t\"ContainerFrame11Item33Count\",\n\t\"ContainerFrame11Item33IconQuestTexture\",\n\t\"ContainerFrame11Item33IconTexture\",\n\t\"ContainerFrame11Item33NormalTexture\",\n\t\"ContainerFrame11Item33Stock\",\n\t\"ContainerFrame11Item34Count\",\n\t\"ContainerFrame11Item34IconQuestTexture\",\n\t\"ContainerFrame11Item34IconTexture\",\n\t\"ContainerFrame11Item34NormalTexture\",\n\t\"ContainerFrame11Item34Stock\",\n\t\"ContainerFrame11Item35Count\",\n\t\"ContainerFrame11Item35IconQuestTexture\",\n\t\"ContainerFrame11Item35IconTexture\",\n\t\"ContainerFrame11Item35NormalTexture\",\n\t\"ContainerFrame11Item35Stock\",\n\t\"ContainerFrame11Item36Count\",\n\t\"ContainerFrame11Item36IconQuestTexture\",\n\t\"ContainerFrame11Item36IconTexture\",\n\t\"ContainerFrame11Item36NormalTexture\",\n\t\"ContainerFrame11Item36Stock\",\n\t\"ContainerFrame11Item3Count\",\n\t\"ContainerFrame11Item3IconQuestTexture\",\n\t\"ContainerFrame11Item3IconTexture\",\n\t\"ContainerFrame11Item3NormalTexture\",\n\t\"ContainerFrame11Item3Stock\",\n\t\"ContainerFrame11Item4Count\",\n\t\"ContainerFrame11Item4IconQuestTexture\",\n\t\"ContainerFrame11Item4IconTexture\",\n\t\"ContainerFrame11Item4NormalTexture\",\n\t\"ContainerFrame11Item4Stock\",\n\t\"ContainerFrame11Item5Count\",\n\t\"ContainerFrame11Item5IconQuestTexture\",\n\t\"ContainerFrame11Item5IconTexture\",\n\t\"ContainerFrame11Item5NormalTexture\",\n\t\"ContainerFrame11Item5Stock\",\n\t\"ContainerFrame11Item6Count\",\n\t\"ContainerFrame11Item6IconQuestTexture\",\n\t\"ContainerFrame11Item6IconTexture\",\n\t\"ContainerFrame11Item6NormalTexture\",\n\t\"ContainerFrame11Item6Stock\",\n\t\"ContainerFrame11Item7Count\",\n\t\"ContainerFrame11Item7IconQuestTexture\",\n\t\"ContainerFrame11Item7IconTexture\",\n\t\"ContainerFrame11Item7NormalTexture\",\n\t\"ContainerFrame11Item7Stock\",\n\t\"ContainerFrame11Item8Count\",\n\t\"ContainerFrame11Item8IconQuestTexture\",\n\t\"ContainerFrame11Item8IconTexture\",\n\t\"ContainerFrame11Item8NormalTexture\",\n\t\"ContainerFrame11Item8Stock\",\n\t\"ContainerFrame11Item9Count\",\n\t\"ContainerFrame11Item9IconQuestTexture\",\n\t\"ContainerFrame11Item9IconTexture\",\n\t\"ContainerFrame11Item9NormalTexture\",\n\t\"ContainerFrame11Item9Stock\",\n\t\"ContainerFrame11MoneyFrameCopperButtonText\",\n\t\"ContainerFrame11MoneyFrameGoldButtonText\",\n\t\"ContainerFrame11MoneyFrameSilverButtonText\",\n\t\"ContainerFrame11Name\",\n\t\"ContainerFrame11Portrait\",\n\t\"ContainerFrame12Background1Slot\",\n\t\"ContainerFrame12BackgroundBottom\",\n\t\"ContainerFrame12BackgroundMiddle1\",\n\t\"ContainerFrame12BackgroundMiddle2\",\n\t\"ContainerFrame12BackgroundTop\",\n\t\"ContainerFrame12Item10Count\",\n\t\"ContainerFrame12Item10IconQuestTexture\",\n\t\"ContainerFrame12Item10IconTexture\",\n\t\"ContainerFrame12Item10NormalTexture\",\n\t\"ContainerFrame12Item10Stock\",\n\t\"ContainerFrame12Item11Count\",\n\t\"ContainerFrame12Item11IconQuestTexture\",\n\t\"ContainerFrame12Item11IconTexture\",\n\t\"ContainerFrame12Item11NormalTexture\",\n\t\"ContainerFrame12Item11Stock\",\n\t\"ContainerFrame12Item12Count\",\n\t\"ContainerFrame12Item12IconQuestTexture\",\n\t\"ContainerFrame12Item12IconTexture\",\n\t\"ContainerFrame12Item12NormalTexture\",\n\t\"ContainerFrame12Item12Stock\",\n\t\"ContainerFrame12Item13Count\",\n\t\"ContainerFrame12Item13IconQuestTexture\",\n\t\"ContainerFrame12Item13IconTexture\",\n\t\"ContainerFrame12Item13NormalTexture\",\n\t\"ContainerFrame12Item13Stock\",\n\t\"ContainerFrame12Item14Count\",\n\t\"ContainerFrame12Item14IconQuestTexture\",\n\t\"ContainerFrame12Item14IconTexture\",\n\t\"ContainerFrame12Item14NormalTexture\",\n\t\"ContainerFrame12Item14Stock\",\n\t\"ContainerFrame12Item15Count\",\n\t\"ContainerFrame12Item15IconQuestTexture\",\n\t\"ContainerFrame12Item15IconTexture\",\n\t\"ContainerFrame12Item15NormalTexture\",\n\t\"ContainerFrame12Item15Stock\",\n\t\"ContainerFrame12Item16Count\",\n\t\"ContainerFrame12Item16IconQuestTexture\",\n\t\"ContainerFrame12Item16IconTexture\",\n\t\"ContainerFrame12Item16NormalTexture\",\n\t\"ContainerFrame12Item16Stock\",\n\t\"ContainerFrame12Item17Count\",\n\t\"ContainerFrame12Item17IconQuestTexture\",\n\t\"ContainerFrame12Item17IconTexture\",\n\t\"ContainerFrame12Item17NormalTexture\",\n\t\"ContainerFrame12Item17Stock\",\n\t\"ContainerFrame12Item18Count\",\n\t\"ContainerFrame12Item18IconQuestTexture\",\n\t\"ContainerFrame12Item18IconTexture\",\n\t\"ContainerFrame12Item18NormalTexture\",\n\t\"ContainerFrame12Item18Stock\",\n\t\"ContainerFrame12Item19Count\",\n\t\"ContainerFrame12Item19IconQuestTexture\",\n\t\"ContainerFrame12Item19IconTexture\",\n\t\"ContainerFrame12Item19NormalTexture\",\n\t\"ContainerFrame12Item19Stock\",\n\t\"ContainerFrame12Item1Count\",\n\t\"ContainerFrame12Item1IconQuestTexture\",\n\t\"ContainerFrame12Item1IconTexture\",\n\t\"ContainerFrame12Item1NormalTexture\",\n\t\"ContainerFrame12Item1Stock\",\n\t\"ContainerFrame12Item20Count\",\n\t\"ContainerFrame12Item20IconQuestTexture\",\n\t\"ContainerFrame12Item20IconTexture\",\n\t\"ContainerFrame12Item20NormalTexture\",\n\t\"ContainerFrame12Item20Stock\",\n\t\"ContainerFrame12Item21Count\",\n\t\"ContainerFrame12Item21IconQuestTexture\",\n\t\"ContainerFrame12Item21IconTexture\",\n\t\"ContainerFrame12Item21NormalTexture\",\n\t\"ContainerFrame12Item21Stock\",\n\t\"ContainerFrame12Item22Count\",\n\t\"ContainerFrame12Item22IconQuestTexture\",\n\t\"ContainerFrame12Item22IconTexture\",\n\t\"ContainerFrame12Item22NormalTexture\",\n\t\"ContainerFrame12Item22Stock\",\n\t\"ContainerFrame12Item23Count\",\n\t\"ContainerFrame12Item23IconQuestTexture\",\n\t\"ContainerFrame12Item23IconTexture\",\n\t\"ContainerFrame12Item23NormalTexture\",\n\t\"ContainerFrame12Item23Stock\",\n\t\"ContainerFrame12Item24Count\",\n\t\"ContainerFrame12Item24IconQuestTexture\",\n\t\"ContainerFrame12Item24IconTexture\",\n\t\"ContainerFrame12Item24NormalTexture\",\n\t\"ContainerFrame12Item24Stock\",\n\t\"ContainerFrame12Item25Count\",\n\t\"ContainerFrame12Item25IconQuestTexture\",\n\t\"ContainerFrame12Item25IconTexture\",\n\t\"ContainerFrame12Item25NormalTexture\",\n\t\"ContainerFrame12Item25Stock\",\n\t\"ContainerFrame12Item26Count\",\n\t\"ContainerFrame12Item26IconQuestTexture\",\n\t\"ContainerFrame12Item26IconTexture\",\n\t\"ContainerFrame12Item26NormalTexture\",\n\t\"ContainerFrame12Item26Stock\",\n\t\"ContainerFrame12Item27Count\",\n\t\"ContainerFrame12Item27IconQuestTexture\",\n\t\"ContainerFrame12Item27IconTexture\",\n\t\"ContainerFrame12Item27NormalTexture\",\n\t\"ContainerFrame12Item27Stock\",\n\t\"ContainerFrame12Item28Count\",\n\t\"ContainerFrame12Item28IconQuestTexture\",\n\t\"ContainerFrame12Item28IconTexture\",\n\t\"ContainerFrame12Item28NormalTexture\",\n\t\"ContainerFrame12Item28Stock\",\n\t\"ContainerFrame12Item29Count\",\n\t\"ContainerFrame12Item29IconQuestTexture\",\n\t\"ContainerFrame12Item29IconTexture\",\n\t\"ContainerFrame12Item29NormalTexture\",\n\t\"ContainerFrame12Item29Stock\",\n\t\"ContainerFrame12Item2Count\",\n\t\"ContainerFrame12Item2IconQuestTexture\",\n\t\"ContainerFrame12Item2IconTexture\",\n\t\"ContainerFrame12Item2NormalTexture\",\n\t\"ContainerFrame12Item2Stock\",\n\t\"ContainerFrame12Item30Count\",\n\t\"ContainerFrame12Item30IconQuestTexture\",\n\t\"ContainerFrame12Item30IconTexture\",\n\t\"ContainerFrame12Item30NormalTexture\",\n\t\"ContainerFrame12Item30Stock\",\n\t\"ContainerFrame12Item31Count\",\n\t\"ContainerFrame12Item31IconQuestTexture\",\n\t\"ContainerFrame12Item31IconTexture\",\n\t\"ContainerFrame12Item31NormalTexture\",\n\t\"ContainerFrame12Item31Stock\",\n\t\"ContainerFrame12Item32Count\",\n\t\"ContainerFrame12Item32IconQuestTexture\",\n\t\"ContainerFrame12Item32IconTexture\",\n\t\"ContainerFrame12Item32NormalTexture\",\n\t\"ContainerFrame12Item32Stock\",\n\t\"ContainerFrame12Item33Count\",\n\t\"ContainerFrame12Item33IconQuestTexture\",\n\t\"ContainerFrame12Item33IconTexture\",\n\t\"ContainerFrame12Item33NormalTexture\",\n\t\"ContainerFrame12Item33Stock\",\n\t\"ContainerFrame12Item34Count\",\n\t\"ContainerFrame12Item34IconQuestTexture\",\n\t\"ContainerFrame12Item34IconTexture\",\n\t\"ContainerFrame12Item34NormalTexture\",\n\t\"ContainerFrame12Item34Stock\",\n\t\"ContainerFrame12Item35Count\",\n\t\"ContainerFrame12Item35IconQuestTexture\",\n\t\"ContainerFrame12Item35IconTexture\",\n\t\"ContainerFrame12Item35NormalTexture\",\n\t\"ContainerFrame12Item35Stock\",\n\t\"ContainerFrame12Item36Count\",\n\t\"ContainerFrame12Item36IconQuestTexture\",\n\t\"ContainerFrame12Item36IconTexture\",\n\t\"ContainerFrame12Item36NormalTexture\",\n\t\"ContainerFrame12Item36Stock\",\n\t\"ContainerFrame12Item3Count\",\n\t\"ContainerFrame12Item3IconQuestTexture\",\n\t\"ContainerFrame12Item3IconTexture\",\n\t\"ContainerFrame12Item3NormalTexture\",\n\t\"ContainerFrame12Item3Stock\",\n\t\"ContainerFrame12Item4Count\",\n\t\"ContainerFrame12Item4IconQuestTexture\",\n\t\"ContainerFrame12Item4IconTexture\",\n\t\"ContainerFrame12Item4NormalTexture\",\n\t\"ContainerFrame12Item4Stock\",\n\t\"ContainerFrame12Item5Count\",\n\t\"ContainerFrame12Item5IconQuestTexture\",\n\t\"ContainerFrame12Item5IconTexture\",\n\t\"ContainerFrame12Item5NormalTexture\",\n\t\"ContainerFrame12Item5Stock\",\n\t\"ContainerFrame12Item6Count\",\n\t\"ContainerFrame12Item6IconQuestTexture\",\n\t\"ContainerFrame12Item6IconTexture\",\n\t\"ContainerFrame12Item6NormalTexture\",\n\t\"ContainerFrame12Item6Stock\",\n\t\"ContainerFrame12Item7Count\",\n\t\"ContainerFrame12Item7IconQuestTexture\",\n\t\"ContainerFrame12Item7IconTexture\",\n\t\"ContainerFrame12Item7NormalTexture\",\n\t\"ContainerFrame12Item7Stock\",\n\t\"ContainerFrame12Item8Count\",\n\t\"ContainerFrame12Item8IconQuestTexture\",\n\t\"ContainerFrame12Item8IconTexture\",\n\t\"ContainerFrame12Item8NormalTexture\",\n\t\"ContainerFrame12Item8Stock\",\n\t\"ContainerFrame12Item9Count\",\n\t\"ContainerFrame12Item9IconQuestTexture\",\n\t\"ContainerFrame12Item9IconTexture\",\n\t\"ContainerFrame12Item9NormalTexture\",\n\t\"ContainerFrame12Item9Stock\",\n\t\"ContainerFrame12MoneyFrameCopperButtonText\",\n\t\"ContainerFrame12MoneyFrameGoldButtonText\",\n\t\"ContainerFrame12MoneyFrameSilverButtonText\",\n\t\"ContainerFrame12Name\",\n\t\"ContainerFrame12Portrait\",\n\t\"ContainerFrame13Background1Slot\",\n\t\"ContainerFrame13BackgroundBottom\",\n\t\"ContainerFrame13BackgroundMiddle1\",\n\t\"ContainerFrame13BackgroundMiddle2\",\n\t\"ContainerFrame13BackgroundTop\",\n\t\"ContainerFrame13Item10Count\",\n\t\"ContainerFrame13Item10IconQuestTexture\",\n\t\"ContainerFrame13Item10IconTexture\",\n\t\"ContainerFrame13Item10NormalTexture\",\n\t\"ContainerFrame13Item10Stock\",\n\t\"ContainerFrame13Item11Count\",\n\t\"ContainerFrame13Item11IconQuestTexture\",\n\t\"ContainerFrame13Item11IconTexture\",\n\t\"ContainerFrame13Item11NormalTexture\",\n\t\"ContainerFrame13Item11Stock\",\n\t\"ContainerFrame13Item12Count\",\n\t\"ContainerFrame13Item12IconQuestTexture\",\n\t\"ContainerFrame13Item12IconTexture\",\n\t\"ContainerFrame13Item12NormalTexture\",\n\t\"ContainerFrame13Item12Stock\",\n\t\"ContainerFrame13Item13Count\",\n\t\"ContainerFrame13Item13IconQuestTexture\",\n\t\"ContainerFrame13Item13IconTexture\",\n\t\"ContainerFrame13Item13NormalTexture\",\n\t\"ContainerFrame13Item13Stock\",\n\t\"ContainerFrame13Item14Count\",\n\t\"ContainerFrame13Item14IconQuestTexture\",\n\t\"ContainerFrame13Item14IconTexture\",\n\t\"ContainerFrame13Item14NormalTexture\",\n\t\"ContainerFrame13Item14Stock\",\n\t\"ContainerFrame13Item15Count\",\n\t\"ContainerFrame13Item15IconQuestTexture\",\n\t\"ContainerFrame13Item15IconTexture\",\n\t\"ContainerFrame13Item15NormalTexture\",\n\t\"ContainerFrame13Item15Stock\",\n\t\"ContainerFrame13Item16Count\",\n\t\"ContainerFrame13Item16IconQuestTexture\",\n\t\"ContainerFrame13Item16IconTexture\",\n\t\"ContainerFrame13Item16NormalTexture\",\n\t\"ContainerFrame13Item16Stock\",\n\t\"ContainerFrame13Item17Count\",\n\t\"ContainerFrame13Item17IconQuestTexture\",\n\t\"ContainerFrame13Item17IconTexture\",\n\t\"ContainerFrame13Item17NormalTexture\",\n\t\"ContainerFrame13Item17Stock\",\n\t\"ContainerFrame13Item18Count\",\n\t\"ContainerFrame13Item18IconQuestTexture\",\n\t\"ContainerFrame13Item18IconTexture\",\n\t\"ContainerFrame13Item18NormalTexture\",\n\t\"ContainerFrame13Item18Stock\",\n\t\"ContainerFrame13Item19Count\",\n\t\"ContainerFrame13Item19IconQuestTexture\",\n\t\"ContainerFrame13Item19IconTexture\",\n\t\"ContainerFrame13Item19NormalTexture\",\n\t\"ContainerFrame13Item19Stock\",\n\t\"ContainerFrame13Item1Count\",\n\t\"ContainerFrame13Item1IconQuestTexture\",\n\t\"ContainerFrame13Item1IconTexture\",\n\t\"ContainerFrame13Item1NormalTexture\",\n\t\"ContainerFrame13Item1Stock\",\n\t\"ContainerFrame13Item20Count\",\n\t\"ContainerFrame13Item20IconQuestTexture\",\n\t\"ContainerFrame13Item20IconTexture\",\n\t\"ContainerFrame13Item20NormalTexture\",\n\t\"ContainerFrame13Item20Stock\",\n\t\"ContainerFrame13Item21Count\",\n\t\"ContainerFrame13Item21IconQuestTexture\",\n\t\"ContainerFrame13Item21IconTexture\",\n\t\"ContainerFrame13Item21NormalTexture\",\n\t\"ContainerFrame13Item21Stock\",\n\t\"ContainerFrame13Item22Count\",\n\t\"ContainerFrame13Item22IconQuestTexture\",\n\t\"ContainerFrame13Item22IconTexture\",\n\t\"ContainerFrame13Item22NormalTexture\",\n\t\"ContainerFrame13Item22Stock\",\n\t\"ContainerFrame13Item23Count\",\n\t\"ContainerFrame13Item23IconQuestTexture\",\n\t\"ContainerFrame13Item23IconTexture\",\n\t\"ContainerFrame13Item23NormalTexture\",\n\t\"ContainerFrame13Item23Stock\",\n\t\"ContainerFrame13Item24Count\",\n\t\"ContainerFrame13Item24IconQuestTexture\",\n\t\"ContainerFrame13Item24IconTexture\",\n\t\"ContainerFrame13Item24NormalTexture\",\n\t\"ContainerFrame13Item24Stock\",\n\t\"ContainerFrame13Item25Count\",\n\t\"ContainerFrame13Item25IconQuestTexture\",\n\t\"ContainerFrame13Item25IconTexture\",\n\t\"ContainerFrame13Item25NormalTexture\",\n\t\"ContainerFrame13Item25Stock\",\n\t\"ContainerFrame13Item26Count\",\n\t\"ContainerFrame13Item26IconQuestTexture\",\n\t\"ContainerFrame13Item26IconTexture\",\n\t\"ContainerFrame13Item26NormalTexture\",\n\t\"ContainerFrame13Item26Stock\",\n\t\"ContainerFrame13Item27Count\",\n\t\"ContainerFrame13Item27IconQuestTexture\",\n\t\"ContainerFrame13Item27IconTexture\",\n\t\"ContainerFrame13Item27NormalTexture\",\n\t\"ContainerFrame13Item27Stock\",\n\t\"ContainerFrame13Item28Count\",\n\t\"ContainerFrame13Item28IconQuestTexture\",\n\t\"ContainerFrame13Item28IconTexture\",\n\t\"ContainerFrame13Item28NormalTexture\",\n\t\"ContainerFrame13Item28Stock\",\n\t\"ContainerFrame13Item29Count\",\n\t\"ContainerFrame13Item29IconQuestTexture\",\n\t\"ContainerFrame13Item29IconTexture\",\n\t\"ContainerFrame13Item29NormalTexture\",\n\t\"ContainerFrame13Item29Stock\",\n\t\"ContainerFrame13Item2Count\",\n\t\"ContainerFrame13Item2IconQuestTexture\",\n\t\"ContainerFrame13Item2IconTexture\",\n\t\"ContainerFrame13Item2NormalTexture\",\n\t\"ContainerFrame13Item2Stock\",\n\t\"ContainerFrame13Item30Count\",\n\t\"ContainerFrame13Item30IconQuestTexture\",\n\t\"ContainerFrame13Item30IconTexture\",\n\t\"ContainerFrame13Item30NormalTexture\",\n\t\"ContainerFrame13Item30Stock\",\n\t\"ContainerFrame13Item31Count\",\n\t\"ContainerFrame13Item31IconQuestTexture\",\n\t\"ContainerFrame13Item31IconTexture\",\n\t\"ContainerFrame13Item31NormalTexture\",\n\t\"ContainerFrame13Item31Stock\",\n\t\"ContainerFrame13Item32Count\",\n\t\"ContainerFrame13Item32IconQuestTexture\",\n\t\"ContainerFrame13Item32IconTexture\",\n\t\"ContainerFrame13Item32NormalTexture\",\n\t\"ContainerFrame13Item32Stock\",\n\t\"ContainerFrame13Item33Count\",\n\t\"ContainerFrame13Item33IconQuestTexture\",\n\t\"ContainerFrame13Item33IconTexture\",\n\t\"ContainerFrame13Item33NormalTexture\",\n\t\"ContainerFrame13Item33Stock\",\n\t\"ContainerFrame13Item34Count\",\n\t\"ContainerFrame13Item34IconQuestTexture\",\n\t\"ContainerFrame13Item34IconTexture\",\n\t\"ContainerFrame13Item34NormalTexture\",\n\t\"ContainerFrame13Item34Stock\",\n\t\"ContainerFrame13Item35Count\",\n\t\"ContainerFrame13Item35IconQuestTexture\",\n\t\"ContainerFrame13Item35IconTexture\",\n\t\"ContainerFrame13Item35NormalTexture\",\n\t\"ContainerFrame13Item35Stock\",\n\t\"ContainerFrame13Item36Count\",\n\t\"ContainerFrame13Item36IconQuestTexture\",\n\t\"ContainerFrame13Item36IconTexture\",\n\t\"ContainerFrame13Item36NormalTexture\",\n\t\"ContainerFrame13Item36Stock\",\n\t\"ContainerFrame13Item3Count\",\n\t\"ContainerFrame13Item3IconQuestTexture\",\n\t\"ContainerFrame13Item3IconTexture\",\n\t\"ContainerFrame13Item3NormalTexture\",\n\t\"ContainerFrame13Item3Stock\",\n\t\"ContainerFrame13Item4Count\",\n\t\"ContainerFrame13Item4IconQuestTexture\",\n\t\"ContainerFrame13Item4IconTexture\",\n\t\"ContainerFrame13Item4NormalTexture\",\n\t\"ContainerFrame13Item4Stock\",\n\t\"ContainerFrame13Item5Count\",\n\t\"ContainerFrame13Item5IconQuestTexture\",\n\t\"ContainerFrame13Item5IconTexture\",\n\t\"ContainerFrame13Item5NormalTexture\",\n\t\"ContainerFrame13Item5Stock\",\n\t\"ContainerFrame13Item6Count\",\n\t\"ContainerFrame13Item6IconQuestTexture\",\n\t\"ContainerFrame13Item6IconTexture\",\n\t\"ContainerFrame13Item6NormalTexture\",\n\t\"ContainerFrame13Item6Stock\",\n\t\"ContainerFrame13Item7Count\",\n\t\"ContainerFrame13Item7IconQuestTexture\",\n\t\"ContainerFrame13Item7IconTexture\",\n\t\"ContainerFrame13Item7NormalTexture\",\n\t\"ContainerFrame13Item7Stock\",\n\t\"ContainerFrame13Item8Count\",\n\t\"ContainerFrame13Item8IconQuestTexture\",\n\t\"ContainerFrame13Item8IconTexture\",\n\t\"ContainerFrame13Item8NormalTexture\",\n\t\"ContainerFrame13Item8Stock\",\n\t\"ContainerFrame13Item9Count\",\n\t\"ContainerFrame13Item9IconQuestTexture\",\n\t\"ContainerFrame13Item9IconTexture\",\n\t\"ContainerFrame13Item9NormalTexture\",\n\t\"ContainerFrame13Item9Stock\",\n\t\"ContainerFrame13MoneyFrameCopperButtonText\",\n\t\"ContainerFrame13MoneyFrameGoldButtonText\",\n\t\"ContainerFrame13MoneyFrameSilverButtonText\",\n\t\"ContainerFrame13Name\",\n\t\"ContainerFrame13Portrait\",\n\t\"ContainerFrame1Background1Slot\",\n\t\"ContainerFrame1BackgroundBottom\",\n\t\"ContainerFrame1BackgroundMiddle1\",\n\t\"ContainerFrame1BackgroundMiddle2\",\n\t\"ContainerFrame1BackgroundTop\",\n\t\"ContainerFrame1Item10Count\",\n\t\"ContainerFrame1Item10IconQuestTexture\",\n\t\"ContainerFrame1Item10IconTexture\",\n\t\"ContainerFrame1Item10NormalTexture\",\n\t\"ContainerFrame1Item10Stock\",\n\t\"ContainerFrame1Item11Count\",\n\t\"ContainerFrame1Item11IconQuestTexture\",\n\t\"ContainerFrame1Item11IconTexture\",\n\t\"ContainerFrame1Item11NormalTexture\",\n\t\"ContainerFrame1Item11Stock\",\n\t\"ContainerFrame1Item12Count\",\n\t\"ContainerFrame1Item12IconQuestTexture\",\n\t\"ContainerFrame1Item12IconTexture\",\n\t\"ContainerFrame1Item12NormalTexture\",\n\t\"ContainerFrame1Item12Stock\",\n\t\"ContainerFrame1Item13Count\",\n\t\"ContainerFrame1Item13IconQuestTexture\",\n\t\"ContainerFrame1Item13IconTexture\",\n\t\"ContainerFrame1Item13NormalTexture\",\n\t\"ContainerFrame1Item13Stock\",\n\t\"ContainerFrame1Item14Count\",\n\t\"ContainerFrame1Item14IconQuestTexture\",\n\t\"ContainerFrame1Item14IconTexture\",\n\t\"ContainerFrame1Item14NormalTexture\",\n\t\"ContainerFrame1Item14Stock\",\n\t\"ContainerFrame1Item15Count\",\n\t\"ContainerFrame1Item15IconQuestTexture\",\n\t\"ContainerFrame1Item15IconTexture\",\n\t\"ContainerFrame1Item15NormalTexture\",\n\t\"ContainerFrame1Item15Stock\",\n\t\"ContainerFrame1Item16Count\",\n\t\"ContainerFrame1Item16IconQuestTexture\",\n\t\"ContainerFrame1Item16IconTexture\",\n\t\"ContainerFrame1Item16NormalTexture\",\n\t\"ContainerFrame1Item16Stock\",\n\t\"ContainerFrame1Item17Count\",\n\t\"ContainerFrame1Item17IconQuestTexture\",\n\t\"ContainerFrame1Item17IconTexture\",\n\t\"ContainerFrame1Item17NormalTexture\",\n\t\"ContainerFrame1Item17Stock\",\n\t\"ContainerFrame1Item18Count\",\n\t\"ContainerFrame1Item18IconQuestTexture\",\n\t\"ContainerFrame1Item18IconTexture\",\n\t\"ContainerFrame1Item18NormalTexture\",\n\t\"ContainerFrame1Item18Stock\",\n\t\"ContainerFrame1Item19Count\",\n\t\"ContainerFrame1Item19IconQuestTexture\",\n\t\"ContainerFrame1Item19IconTexture\",\n\t\"ContainerFrame1Item19NormalTexture\",\n\t\"ContainerFrame1Item19Stock\",\n\t\"ContainerFrame1Item1Count\",\n\t\"ContainerFrame1Item1IconQuestTexture\",\n\t\"ContainerFrame1Item1IconTexture\",\n\t\"ContainerFrame1Item1NormalTexture\",\n\t\"ContainerFrame1Item1Stock\",\n\t\"ContainerFrame1Item20Count\",\n\t\"ContainerFrame1Item20IconQuestTexture\",\n\t\"ContainerFrame1Item20IconTexture\",\n\t\"ContainerFrame1Item20NormalTexture\",\n\t\"ContainerFrame1Item20Stock\",\n\t\"ContainerFrame1Item21Count\",\n\t\"ContainerFrame1Item21IconQuestTexture\",\n\t\"ContainerFrame1Item21IconTexture\",\n\t\"ContainerFrame1Item21NormalTexture\",\n\t\"ContainerFrame1Item21Stock\",\n\t\"ContainerFrame1Item22Count\",\n\t\"ContainerFrame1Item22IconQuestTexture\",\n\t\"ContainerFrame1Item22IconTexture\",\n\t\"ContainerFrame1Item22NormalTexture\",\n\t\"ContainerFrame1Item22Stock\",\n\t\"ContainerFrame1Item23Count\",\n\t\"ContainerFrame1Item23IconQuestTexture\",\n\t\"ContainerFrame1Item23IconTexture\",\n\t\"ContainerFrame1Item23NormalTexture\",\n\t\"ContainerFrame1Item23Stock\",\n\t\"ContainerFrame1Item24Count\",\n\t\"ContainerFrame1Item24IconQuestTexture\",\n\t\"ContainerFrame1Item24IconTexture\",\n\t\"ContainerFrame1Item24NormalTexture\",\n\t\"ContainerFrame1Item24Stock\",\n\t\"ContainerFrame1Item25Count\",\n\t\"ContainerFrame1Item25IconQuestTexture\",\n\t\"ContainerFrame1Item25IconTexture\",\n\t\"ContainerFrame1Item25NormalTexture\",\n\t\"ContainerFrame1Item25Stock\",\n\t\"ContainerFrame1Item26Count\",\n\t\"ContainerFrame1Item26IconQuestTexture\",\n\t\"ContainerFrame1Item26IconTexture\",\n\t\"ContainerFrame1Item26NormalTexture\",\n\t\"ContainerFrame1Item26Stock\",\n\t\"ContainerFrame1Item27Count\",\n\t\"ContainerFrame1Item27IconQuestTexture\",\n\t\"ContainerFrame1Item27IconTexture\",\n\t\"ContainerFrame1Item27NormalTexture\",\n\t\"ContainerFrame1Item27Stock\",\n\t\"ContainerFrame1Item28Count\",\n\t\"ContainerFrame1Item28IconQuestTexture\",\n\t\"ContainerFrame1Item28IconTexture\",\n\t\"ContainerFrame1Item28NormalTexture\",\n\t\"ContainerFrame1Item28Stock\",\n\t\"ContainerFrame1Item29Count\",\n\t\"ContainerFrame1Item29IconQuestTexture\",\n\t\"ContainerFrame1Item29IconTexture\",\n\t\"ContainerFrame1Item29NormalTexture\",\n\t\"ContainerFrame1Item29Stock\",\n\t\"ContainerFrame1Item2Count\",\n\t\"ContainerFrame1Item2IconQuestTexture\",\n\t\"ContainerFrame1Item2IconTexture\",\n\t\"ContainerFrame1Item2NormalTexture\",\n\t\"ContainerFrame1Item2Stock\",\n\t\"ContainerFrame1Item30Count\",\n\t\"ContainerFrame1Item30IconQuestTexture\",\n\t\"ContainerFrame1Item30IconTexture\",\n\t\"ContainerFrame1Item30NormalTexture\",\n\t\"ContainerFrame1Item30Stock\",\n\t\"ContainerFrame1Item31Count\",\n\t\"ContainerFrame1Item31IconQuestTexture\",\n\t\"ContainerFrame1Item31IconTexture\",\n\t\"ContainerFrame1Item31NormalTexture\",\n\t\"ContainerFrame1Item31Stock\",\n\t\"ContainerFrame1Item32Count\",\n\t\"ContainerFrame1Item32IconQuestTexture\",\n\t\"ContainerFrame1Item32IconTexture\",\n\t\"ContainerFrame1Item32NormalTexture\",\n\t\"ContainerFrame1Item32Stock\",\n\t\"ContainerFrame1Item33Count\",\n\t\"ContainerFrame1Item33IconQuestTexture\",\n\t\"ContainerFrame1Item33IconTexture\",\n\t\"ContainerFrame1Item33NormalTexture\",\n\t\"ContainerFrame1Item33Stock\",\n\t\"ContainerFrame1Item34Count\",\n\t\"ContainerFrame1Item34IconQuestTexture\",\n\t\"ContainerFrame1Item34IconTexture\",\n\t\"ContainerFrame1Item34NormalTexture\",\n\t\"ContainerFrame1Item34Stock\",\n\t\"ContainerFrame1Item35Count\",\n\t\"ContainerFrame1Item35IconQuestTexture\",\n\t\"ContainerFrame1Item35IconTexture\",\n\t\"ContainerFrame1Item35NormalTexture\",\n\t\"ContainerFrame1Item35Stock\",\n\t\"ContainerFrame1Item36Count\",\n\t\"ContainerFrame1Item36IconQuestTexture\",\n\t\"ContainerFrame1Item36IconTexture\",\n\t\"ContainerFrame1Item36NormalTexture\",\n\t\"ContainerFrame1Item36Stock\",\n\t\"ContainerFrame1Item3Count\",\n\t\"ContainerFrame1Item3IconQuestTexture\",\n\t\"ContainerFrame1Item3IconTexture\",\n\t\"ContainerFrame1Item3NormalTexture\",\n\t\"ContainerFrame1Item3Stock\",\n\t\"ContainerFrame1Item4Count\",\n\t\"ContainerFrame1Item4IconQuestTexture\",\n\t\"ContainerFrame1Item4IconTexture\",\n\t\"ContainerFrame1Item4NormalTexture\",\n\t\"ContainerFrame1Item4Stock\",\n\t\"ContainerFrame1Item5Count\",\n\t\"ContainerFrame1Item5IconQuestTexture\",\n\t\"ContainerFrame1Item5IconTexture\",\n\t\"ContainerFrame1Item5NormalTexture\",\n\t\"ContainerFrame1Item5Stock\",\n\t\"ContainerFrame1Item6Count\",\n\t\"ContainerFrame1Item6IconQuestTexture\",\n\t\"ContainerFrame1Item6IconTexture\",\n\t\"ContainerFrame1Item6NormalTexture\",\n\t\"ContainerFrame1Item6Stock\",\n\t\"ContainerFrame1Item7Count\",\n\t\"ContainerFrame1Item7IconQuestTexture\",\n\t\"ContainerFrame1Item7IconTexture\",\n\t\"ContainerFrame1Item7NormalTexture\",\n\t\"ContainerFrame1Item7Stock\",\n\t\"ContainerFrame1Item8Count\",\n\t\"ContainerFrame1Item8IconQuestTexture\",\n\t\"ContainerFrame1Item8IconTexture\",\n\t\"ContainerFrame1Item8NormalTexture\",\n\t\"ContainerFrame1Item8Stock\",\n\t\"ContainerFrame1Item9Count\",\n\t\"ContainerFrame1Item9IconQuestTexture\",\n\t\"ContainerFrame1Item9IconTexture\",\n\t\"ContainerFrame1Item9NormalTexture\",\n\t\"ContainerFrame1Item9Stock\",\n\t\"ContainerFrame1MoneyFrameCopperButtonText\",\n\t\"ContainerFrame1MoneyFrameGoldButtonText\",\n\t\"ContainerFrame1MoneyFrameSilverButtonText\",\n\t\"ContainerFrame1Name\",\n\t\"ContainerFrame1Portrait\",\n\t\"ContainerFrame2Background1Slot\",\n\t\"ContainerFrame2BackgroundBottom\",\n\t\"ContainerFrame2BackgroundMiddle1\",\n\t\"ContainerFrame2BackgroundMiddle2\",\n\t\"ContainerFrame2BackgroundTop\",\n\t\"ContainerFrame2Item10Count\",\n\t\"ContainerFrame2Item10IconQuestTexture\",\n\t\"ContainerFrame2Item10IconTexture\",\n\t\"ContainerFrame2Item10NormalTexture\",\n\t\"ContainerFrame2Item10Stock\",\n\t\"ContainerFrame2Item11Count\",\n\t\"ContainerFrame2Item11IconQuestTexture\",\n\t\"ContainerFrame2Item11IconTexture\",\n\t\"ContainerFrame2Item11NormalTexture\",\n\t\"ContainerFrame2Item11Stock\",\n\t\"ContainerFrame2Item12Count\",\n\t\"ContainerFrame2Item12IconQuestTexture\",\n\t\"ContainerFrame2Item12IconTexture\",\n\t\"ContainerFrame2Item12NormalTexture\",\n\t\"ContainerFrame2Item12Stock\",\n\t\"ContainerFrame2Item13Count\",\n\t\"ContainerFrame2Item13IconQuestTexture\",\n\t\"ContainerFrame2Item13IconTexture\",\n\t\"ContainerFrame2Item13NormalTexture\",\n\t\"ContainerFrame2Item13Stock\",\n\t\"ContainerFrame2Item14Count\",\n\t\"ContainerFrame2Item14IconQuestTexture\",\n\t\"ContainerFrame2Item14IconTexture\",\n\t\"ContainerFrame2Item14NormalTexture\",\n\t\"ContainerFrame2Item14Stock\",\n\t\"ContainerFrame2Item15Count\",\n\t\"ContainerFrame2Item15IconQuestTexture\",\n\t\"ContainerFrame2Item15IconTexture\",\n\t\"ContainerFrame2Item15NormalTexture\",\n\t\"ContainerFrame2Item15Stock\",\n\t\"ContainerFrame2Item16Count\",\n\t\"ContainerFrame2Item16IconQuestTexture\",\n\t\"ContainerFrame2Item16IconTexture\",\n\t\"ContainerFrame2Item16NormalTexture\",\n\t\"ContainerFrame2Item16Stock\",\n\t\"ContainerFrame2Item17Count\",\n\t\"ContainerFrame2Item17IconQuestTexture\",\n\t\"ContainerFrame2Item17IconTexture\",\n\t\"ContainerFrame2Item17NormalTexture\",\n\t\"ContainerFrame2Item17Stock\",\n\t\"ContainerFrame2Item18Count\",\n\t\"ContainerFrame2Item18IconQuestTexture\",\n\t\"ContainerFrame2Item18IconTexture\",\n\t\"ContainerFrame2Item18NormalTexture\",\n\t\"ContainerFrame2Item18Stock\",\n\t\"ContainerFrame2Item19Count\",\n\t\"ContainerFrame2Item19IconQuestTexture\",\n\t\"ContainerFrame2Item19IconTexture\",\n\t\"ContainerFrame2Item19NormalTexture\",\n\t\"ContainerFrame2Item19Stock\",\n\t\"ContainerFrame2Item1Count\",\n\t\"ContainerFrame2Item1IconQuestTexture\",\n\t\"ContainerFrame2Item1IconTexture\",\n\t\"ContainerFrame2Item1NormalTexture\",\n\t\"ContainerFrame2Item1Stock\",\n\t\"ContainerFrame2Item20Count\",\n\t\"ContainerFrame2Item20IconQuestTexture\",\n\t\"ContainerFrame2Item20IconTexture\",\n\t\"ContainerFrame2Item20NormalTexture\",\n\t\"ContainerFrame2Item20Stock\",\n\t\"ContainerFrame2Item21Count\",\n\t\"ContainerFrame2Item21IconQuestTexture\",\n\t\"ContainerFrame2Item21IconTexture\",\n\t\"ContainerFrame2Item21NormalTexture\",\n\t\"ContainerFrame2Item21Stock\",\n\t\"ContainerFrame2Item22Count\",\n\t\"ContainerFrame2Item22IconQuestTexture\",\n\t\"ContainerFrame2Item22IconTexture\",\n\t\"ContainerFrame2Item22NormalTexture\",\n\t\"ContainerFrame2Item22Stock\",\n\t\"ContainerFrame2Item23Count\",\n\t\"ContainerFrame2Item23IconQuestTexture\",\n\t\"ContainerFrame2Item23IconTexture\",\n\t\"ContainerFrame2Item23NormalTexture\",\n\t\"ContainerFrame2Item23Stock\",\n\t\"ContainerFrame2Item24Count\",\n\t\"ContainerFrame2Item24IconQuestTexture\",\n\t\"ContainerFrame2Item24IconTexture\",\n\t\"ContainerFrame2Item24NormalTexture\",\n\t\"ContainerFrame2Item24Stock\",\n\t\"ContainerFrame2Item25Count\",\n\t\"ContainerFrame2Item25IconQuestTexture\",\n\t\"ContainerFrame2Item25IconTexture\",\n\t\"ContainerFrame2Item25NormalTexture\",\n\t\"ContainerFrame2Item25Stock\",\n\t\"ContainerFrame2Item26Count\",\n\t\"ContainerFrame2Item26IconQuestTexture\",\n\t\"ContainerFrame2Item26IconTexture\",\n\t\"ContainerFrame2Item26NormalTexture\",\n\t\"ContainerFrame2Item26Stock\",\n\t\"ContainerFrame2Item27Count\",\n\t\"ContainerFrame2Item27IconQuestTexture\",\n\t\"ContainerFrame2Item27IconTexture\",\n\t\"ContainerFrame2Item27NormalTexture\",\n\t\"ContainerFrame2Item27Stock\",\n\t\"ContainerFrame2Item28Count\",\n\t\"ContainerFrame2Item28IconQuestTexture\",\n\t\"ContainerFrame2Item28IconTexture\",\n\t\"ContainerFrame2Item28NormalTexture\",\n\t\"ContainerFrame2Item28Stock\",\n\t\"ContainerFrame2Item29Count\",\n\t\"ContainerFrame2Item29IconQuestTexture\",\n\t\"ContainerFrame2Item29IconTexture\",\n\t\"ContainerFrame2Item29NormalTexture\",\n\t\"ContainerFrame2Item29Stock\",\n\t\"ContainerFrame2Item2Count\",\n\t\"ContainerFrame2Item2IconQuestTexture\",\n\t\"ContainerFrame2Item2IconTexture\",\n\t\"ContainerFrame2Item2NormalTexture\",\n\t\"ContainerFrame2Item2Stock\",\n\t\"ContainerFrame2Item30Count\",\n\t\"ContainerFrame2Item30IconQuestTexture\",\n\t\"ContainerFrame2Item30IconTexture\",\n\t\"ContainerFrame2Item30NormalTexture\",\n\t\"ContainerFrame2Item30Stock\",\n\t\"ContainerFrame2Item31Count\",\n\t\"ContainerFrame2Item31IconQuestTexture\",\n\t\"ContainerFrame2Item31IconTexture\",\n\t\"ContainerFrame2Item31NormalTexture\",\n\t\"ContainerFrame2Item31Stock\",\n\t\"ContainerFrame2Item32Count\",\n\t\"ContainerFrame2Item32IconQuestTexture\",\n\t\"ContainerFrame2Item32IconTexture\",\n\t\"ContainerFrame2Item32NormalTexture\",\n\t\"ContainerFrame2Item32Stock\",\n\t\"ContainerFrame2Item33Count\",\n\t\"ContainerFrame2Item33IconQuestTexture\",\n\t\"ContainerFrame2Item33IconTexture\",\n\t\"ContainerFrame2Item33NormalTexture\",\n\t\"ContainerFrame2Item33Stock\",\n\t\"ContainerFrame2Item34Count\",\n\t\"ContainerFrame2Item34IconQuestTexture\",\n\t\"ContainerFrame2Item34IconTexture\",\n\t\"ContainerFrame2Item34NormalTexture\",\n\t\"ContainerFrame2Item34Stock\",\n\t\"ContainerFrame2Item35Count\",\n\t\"ContainerFrame2Item35IconQuestTexture\",\n\t\"ContainerFrame2Item35IconTexture\",\n\t\"ContainerFrame2Item35NormalTexture\",\n\t\"ContainerFrame2Item35Stock\",\n\t\"ContainerFrame2Item36Count\",\n\t\"ContainerFrame2Item36IconQuestTexture\",\n\t\"ContainerFrame2Item36IconTexture\",\n\t\"ContainerFrame2Item36NormalTexture\",\n\t\"ContainerFrame2Item36Stock\",\n\t\"ContainerFrame2Item3Count\",\n\t\"ContainerFrame2Item3IconQuestTexture\",\n\t\"ContainerFrame2Item3IconTexture\",\n\t\"ContainerFrame2Item3NormalTexture\",\n\t\"ContainerFrame2Item3Stock\",\n\t\"ContainerFrame2Item4Count\",\n\t\"ContainerFrame2Item4IconQuestTexture\",\n\t\"ContainerFrame2Item4IconTexture\",\n\t\"ContainerFrame2Item4NormalTexture\",\n\t\"ContainerFrame2Item4Stock\",\n\t\"ContainerFrame2Item5Count\",\n\t\"ContainerFrame2Item5IconQuestTexture\",\n\t\"ContainerFrame2Item5IconTexture\",\n\t\"ContainerFrame2Item5NormalTexture\",\n\t\"ContainerFrame2Item5Stock\",\n\t\"ContainerFrame2Item6Count\",\n\t\"ContainerFrame2Item6IconQuestTexture\",\n\t\"ContainerFrame2Item6IconTexture\",\n\t\"ContainerFrame2Item6NormalTexture\",\n\t\"ContainerFrame2Item6Stock\",\n\t\"ContainerFrame2Item7Count\",\n\t\"ContainerFrame2Item7IconQuestTexture\",\n\t\"ContainerFrame2Item7IconTexture\",\n\t\"ContainerFrame2Item7NormalTexture\",\n\t\"ContainerFrame2Item7Stock\",\n\t\"ContainerFrame2Item8Count\",\n\t\"ContainerFrame2Item8IconQuestTexture\",\n\t\"ContainerFrame2Item8IconTexture\",\n\t\"ContainerFrame2Item8NormalTexture\",\n\t\"ContainerFrame2Item8Stock\",\n\t\"ContainerFrame2Item9Count\",\n\t\"ContainerFrame2Item9IconQuestTexture\",\n\t\"ContainerFrame2Item9IconTexture\",\n\t\"ContainerFrame2Item9NormalTexture\",\n\t\"ContainerFrame2Item9Stock\",\n\t\"ContainerFrame2MoneyFrameCopperButtonText\",\n\t\"ContainerFrame2MoneyFrameGoldButtonText\",\n\t\"ContainerFrame2MoneyFrameSilverButtonText\",\n\t\"ContainerFrame2Name\",\n\t\"ContainerFrame2Portrait\",\n\t\"ContainerFrame3Background1Slot\",\n\t\"ContainerFrame3BackgroundBottom\",\n\t\"ContainerFrame3BackgroundMiddle1\",\n\t\"ContainerFrame3BackgroundMiddle2\",\n\t\"ContainerFrame3BackgroundTop\",\n\t\"ContainerFrame3Item10Count\",\n\t\"ContainerFrame3Item10IconQuestTexture\",\n\t\"ContainerFrame3Item10IconTexture\",\n\t\"ContainerFrame3Item10NormalTexture\",\n\t\"ContainerFrame3Item10Stock\",\n\t\"ContainerFrame3Item11Count\",\n\t\"ContainerFrame3Item11IconQuestTexture\",\n\t\"ContainerFrame3Item11IconTexture\",\n\t\"ContainerFrame3Item11NormalTexture\",\n\t\"ContainerFrame3Item11Stock\",\n\t\"ContainerFrame3Item12Count\",\n\t\"ContainerFrame3Item12IconQuestTexture\",\n\t\"ContainerFrame3Item12IconTexture\",\n\t\"ContainerFrame3Item12NormalTexture\",\n\t\"ContainerFrame3Item12Stock\",\n\t\"ContainerFrame3Item13Count\",\n\t\"ContainerFrame3Item13IconQuestTexture\",\n\t\"ContainerFrame3Item13IconTexture\",\n\t\"ContainerFrame3Item13NormalTexture\",\n\t\"ContainerFrame3Item13Stock\",\n\t\"ContainerFrame3Item14Count\",\n\t\"ContainerFrame3Item14IconQuestTexture\",\n\t\"ContainerFrame3Item14IconTexture\",\n\t\"ContainerFrame3Item14NormalTexture\",\n\t\"ContainerFrame3Item14Stock\",\n\t\"ContainerFrame3Item15Count\",\n\t\"ContainerFrame3Item15IconQuestTexture\",\n\t\"ContainerFrame3Item15IconTexture\",\n\t\"ContainerFrame3Item15NormalTexture\",\n\t\"ContainerFrame3Item15Stock\",\n\t\"ContainerFrame3Item16Count\",\n\t\"ContainerFrame3Item16IconQuestTexture\",\n\t\"ContainerFrame3Item16IconTexture\",\n\t\"ContainerFrame3Item16NormalTexture\",\n\t\"ContainerFrame3Item16Stock\",\n\t\"ContainerFrame3Item17Count\",\n\t\"ContainerFrame3Item17IconQuestTexture\",\n\t\"ContainerFrame3Item17IconTexture\",\n\t\"ContainerFrame3Item17NormalTexture\",\n\t\"ContainerFrame3Item17Stock\",\n\t\"ContainerFrame3Item18Count\",\n\t\"ContainerFrame3Item18IconQuestTexture\",\n\t\"ContainerFrame3Item18IconTexture\",\n\t\"ContainerFrame3Item18NormalTexture\",\n\t\"ContainerFrame3Item18Stock\",\n\t\"ContainerFrame3Item19Count\",\n\t\"ContainerFrame3Item19IconQuestTexture\",\n\t\"ContainerFrame3Item19IconTexture\",\n\t\"ContainerFrame3Item19NormalTexture\",\n\t\"ContainerFrame3Item19Stock\",\n\t\"ContainerFrame3Item1Count\",\n\t\"ContainerFrame3Item1IconQuestTexture\",\n\t\"ContainerFrame3Item1IconTexture\",\n\t\"ContainerFrame3Item1NormalTexture\",\n\t\"ContainerFrame3Item1Stock\",\n\t\"ContainerFrame3Item20Count\",\n\t\"ContainerFrame3Item20IconQuestTexture\",\n\t\"ContainerFrame3Item20IconTexture\",\n\t\"ContainerFrame3Item20NormalTexture\",\n\t\"ContainerFrame3Item20Stock\",\n\t\"ContainerFrame3Item21Count\",\n\t\"ContainerFrame3Item21IconQuestTexture\",\n\t\"ContainerFrame3Item21IconTexture\",\n\t\"ContainerFrame3Item21NormalTexture\",\n\t\"ContainerFrame3Item21Stock\",\n\t\"ContainerFrame3Item22Count\",\n\t\"ContainerFrame3Item22IconQuestTexture\",\n\t\"ContainerFrame3Item22IconTexture\",\n\t\"ContainerFrame3Item22NormalTexture\",\n\t\"ContainerFrame3Item22Stock\",\n\t\"ContainerFrame3Item23Count\",\n\t\"ContainerFrame3Item23IconQuestTexture\",\n\t\"ContainerFrame3Item23IconTexture\",\n\t\"ContainerFrame3Item23NormalTexture\",\n\t\"ContainerFrame3Item23Stock\",\n\t\"ContainerFrame3Item24Count\",\n\t\"ContainerFrame3Item24IconQuestTexture\",\n\t\"ContainerFrame3Item24IconTexture\",\n\t\"ContainerFrame3Item24NormalTexture\",\n\t\"ContainerFrame3Item24Stock\",\n\t\"ContainerFrame3Item25Count\",\n\t\"ContainerFrame3Item25IconQuestTexture\",\n\t\"ContainerFrame3Item25IconTexture\",\n\t\"ContainerFrame3Item25NormalTexture\",\n\t\"ContainerFrame3Item25Stock\",\n\t\"ContainerFrame3Item26Count\",\n\t\"ContainerFrame3Item26IconQuestTexture\",\n\t\"ContainerFrame3Item26IconTexture\",\n\t\"ContainerFrame3Item26NormalTexture\",\n\t\"ContainerFrame3Item26Stock\",\n\t\"ContainerFrame3Item27Count\",\n\t\"ContainerFrame3Item27IconQuestTexture\",\n\t\"ContainerFrame3Item27IconTexture\",\n\t\"ContainerFrame3Item27NormalTexture\",\n\t\"ContainerFrame3Item27Stock\",\n\t\"ContainerFrame3Item28Count\",\n\t\"ContainerFrame3Item28IconQuestTexture\",\n\t\"ContainerFrame3Item28IconTexture\",\n\t\"ContainerFrame3Item28NormalTexture\",\n\t\"ContainerFrame3Item28Stock\",\n\t\"ContainerFrame3Item29Count\",\n\t\"ContainerFrame3Item29IconQuestTexture\",\n\t\"ContainerFrame3Item29IconTexture\",\n\t\"ContainerFrame3Item29NormalTexture\",\n\t\"ContainerFrame3Item29Stock\",\n\t\"ContainerFrame3Item2Count\",\n\t\"ContainerFrame3Item2IconQuestTexture\",\n\t\"ContainerFrame3Item2IconTexture\",\n\t\"ContainerFrame3Item2NormalTexture\",\n\t\"ContainerFrame3Item2Stock\",\n\t\"ContainerFrame3Item30Count\",\n\t\"ContainerFrame3Item30IconQuestTexture\",\n\t\"ContainerFrame3Item30IconTexture\",\n\t\"ContainerFrame3Item30NormalTexture\",\n\t\"ContainerFrame3Item30Stock\",\n\t\"ContainerFrame3Item31Count\",\n\t\"ContainerFrame3Item31IconQuestTexture\",\n\t\"ContainerFrame3Item31IconTexture\",\n\t\"ContainerFrame3Item31NormalTexture\",\n\t\"ContainerFrame3Item31Stock\",\n\t\"ContainerFrame3Item32Count\",\n\t\"ContainerFrame3Item32IconQuestTexture\",\n\t\"ContainerFrame3Item32IconTexture\",\n\t\"ContainerFrame3Item32NormalTexture\",\n\t\"ContainerFrame3Item32Stock\",\n\t\"ContainerFrame3Item33Count\",\n\t\"ContainerFrame3Item33IconQuestTexture\",\n\t\"ContainerFrame3Item33IconTexture\",\n\t\"ContainerFrame3Item33NormalTexture\",\n\t\"ContainerFrame3Item33Stock\",\n\t\"ContainerFrame3Item34Count\",\n\t\"ContainerFrame3Item34IconQuestTexture\",\n\t\"ContainerFrame3Item34IconTexture\",\n\t\"ContainerFrame3Item34NormalTexture\",\n\t\"ContainerFrame3Item34Stock\",\n\t\"ContainerFrame3Item35Count\",\n\t\"ContainerFrame3Item35IconQuestTexture\",\n\t\"ContainerFrame3Item35IconTexture\",\n\t\"ContainerFrame3Item35NormalTexture\",\n\t\"ContainerFrame3Item35Stock\",\n\t\"ContainerFrame3Item36Count\",\n\t\"ContainerFrame3Item36IconQuestTexture\",\n\t\"ContainerFrame3Item36IconTexture\",\n\t\"ContainerFrame3Item36NormalTexture\",\n\t\"ContainerFrame3Item36Stock\",\n\t\"ContainerFrame3Item3Count\",\n\t\"ContainerFrame3Item3IconQuestTexture\",\n\t\"ContainerFrame3Item3IconTexture\",\n\t\"ContainerFrame3Item3NormalTexture\",\n\t\"ContainerFrame3Item3Stock\",\n\t\"ContainerFrame3Item4Count\",\n\t\"ContainerFrame3Item4IconQuestTexture\",\n\t\"ContainerFrame3Item4IconTexture\",\n\t\"ContainerFrame3Item4NormalTexture\",\n\t\"ContainerFrame3Item4Stock\",\n\t\"ContainerFrame3Item5Count\",\n\t\"ContainerFrame3Item5IconQuestTexture\",\n\t\"ContainerFrame3Item5IconTexture\",\n\t\"ContainerFrame3Item5NormalTexture\",\n\t\"ContainerFrame3Item5Stock\",\n\t\"ContainerFrame3Item6Count\",\n\t\"ContainerFrame3Item6IconQuestTexture\",\n\t\"ContainerFrame3Item6IconTexture\",\n\t\"ContainerFrame3Item6NormalTexture\",\n\t\"ContainerFrame3Item6Stock\",\n\t\"ContainerFrame3Item7Count\",\n\t\"ContainerFrame3Item7IconQuestTexture\",\n\t\"ContainerFrame3Item7IconTexture\",\n\t\"ContainerFrame3Item7NormalTexture\",\n\t\"ContainerFrame3Item7Stock\",\n\t\"ContainerFrame3Item8Count\",\n\t\"ContainerFrame3Item8IconQuestTexture\",\n\t\"ContainerFrame3Item8IconTexture\",\n\t\"ContainerFrame3Item8NormalTexture\",\n\t\"ContainerFrame3Item8Stock\",\n\t\"ContainerFrame3Item9Count\",\n\t\"ContainerFrame3Item9IconQuestTexture\",\n\t\"ContainerFrame3Item9IconTexture\",\n\t\"ContainerFrame3Item9NormalTexture\",\n\t\"ContainerFrame3Item9Stock\",\n\t\"ContainerFrame3MoneyFrameCopperButtonText\",\n\t\"ContainerFrame3MoneyFrameGoldButtonText\",\n\t\"ContainerFrame3MoneyFrameSilverButtonText\",\n\t\"ContainerFrame3Name\",\n\t\"ContainerFrame3Portrait\",\n\t\"ContainerFrame4Background1Slot\",\n\t\"ContainerFrame4BackgroundBottom\",\n\t\"ContainerFrame4BackgroundMiddle1\",\n\t\"ContainerFrame4BackgroundMiddle2\",\n\t\"ContainerFrame4BackgroundTop\",\n\t\"ContainerFrame4Item10Count\",\n\t\"ContainerFrame4Item10IconQuestTexture\",\n\t\"ContainerFrame4Item10IconTexture\",\n\t\"ContainerFrame4Item10NormalTexture\",\n\t\"ContainerFrame4Item10Stock\",\n\t\"ContainerFrame4Item11Count\",\n\t\"ContainerFrame4Item11IconQuestTexture\",\n\t\"ContainerFrame4Item11IconTexture\",\n\t\"ContainerFrame4Item11NormalTexture\",\n\t\"ContainerFrame4Item11Stock\",\n\t\"ContainerFrame4Item12Count\",\n\t\"ContainerFrame4Item12IconQuestTexture\",\n\t\"ContainerFrame4Item12IconTexture\",\n\t\"ContainerFrame4Item12NormalTexture\",\n\t\"ContainerFrame4Item12Stock\",\n\t\"ContainerFrame4Item13Count\",\n\t\"ContainerFrame4Item13IconQuestTexture\",\n\t\"ContainerFrame4Item13IconTexture\",\n\t\"ContainerFrame4Item13NormalTexture\",\n\t\"ContainerFrame4Item13Stock\",\n\t\"ContainerFrame4Item14Count\",\n\t\"ContainerFrame4Item14IconQuestTexture\",\n\t\"ContainerFrame4Item14IconTexture\",\n\t\"ContainerFrame4Item14NormalTexture\",\n\t\"ContainerFrame4Item14Stock\",\n\t\"ContainerFrame4Item15Count\",\n\t\"ContainerFrame4Item15IconQuestTexture\",\n\t\"ContainerFrame4Item15IconTexture\",\n\t\"ContainerFrame4Item15NormalTexture\",\n\t\"ContainerFrame4Item15Stock\",\n\t\"ContainerFrame4Item16Count\",\n\t\"ContainerFrame4Item16IconQuestTexture\",\n\t\"ContainerFrame4Item16IconTexture\",\n\t\"ContainerFrame4Item16NormalTexture\",\n\t\"ContainerFrame4Item16Stock\",\n\t\"ContainerFrame4Item17Count\",\n\t\"ContainerFrame4Item17IconQuestTexture\",\n\t\"ContainerFrame4Item17IconTexture\",\n\t\"ContainerFrame4Item17NormalTexture\",\n\t\"ContainerFrame4Item17Stock\",\n\t\"ContainerFrame4Item18Count\",\n\t\"ContainerFrame4Item18IconQuestTexture\",\n\t\"ContainerFrame4Item18IconTexture\",\n\t\"ContainerFrame4Item18NormalTexture\",\n\t\"ContainerFrame4Item18Stock\",\n\t\"ContainerFrame4Item19Count\",\n\t\"ContainerFrame4Item19IconQuestTexture\",\n\t\"ContainerFrame4Item19IconTexture\",\n\t\"ContainerFrame4Item19NormalTexture\",\n\t\"ContainerFrame4Item19Stock\",\n\t\"ContainerFrame4Item1Count\",\n\t\"ContainerFrame4Item1IconQuestTexture\",\n\t\"ContainerFrame4Item1IconTexture\",\n\t\"ContainerFrame4Item1NormalTexture\",\n\t\"ContainerFrame4Item1Stock\",\n\t\"ContainerFrame4Item20Count\",\n\t\"ContainerFrame4Item20IconQuestTexture\",\n\t\"ContainerFrame4Item20IconTexture\",\n\t\"ContainerFrame4Item20NormalTexture\",\n\t\"ContainerFrame4Item20Stock\",\n\t\"ContainerFrame4Item21Count\",\n\t\"ContainerFrame4Item21IconQuestTexture\",\n\t\"ContainerFrame4Item21IconTexture\",\n\t\"ContainerFrame4Item21NormalTexture\",\n\t\"ContainerFrame4Item21Stock\",\n\t\"ContainerFrame4Item22Count\",\n\t\"ContainerFrame4Item22IconQuestTexture\",\n\t\"ContainerFrame4Item22IconTexture\",\n\t\"ContainerFrame4Item22NormalTexture\",\n\t\"ContainerFrame4Item22Stock\",\n\t\"ContainerFrame4Item23Count\",\n\t\"ContainerFrame4Item23IconQuestTexture\",\n\t\"ContainerFrame4Item23IconTexture\",\n\t\"ContainerFrame4Item23NormalTexture\",\n\t\"ContainerFrame4Item23Stock\",\n\t\"ContainerFrame4Item24Count\",\n\t\"ContainerFrame4Item24IconQuestTexture\",\n\t\"ContainerFrame4Item24IconTexture\",\n\t\"ContainerFrame4Item24NormalTexture\",\n\t\"ContainerFrame4Item24Stock\",\n\t\"ContainerFrame4Item25Count\",\n\t\"ContainerFrame4Item25IconQuestTexture\",\n\t\"ContainerFrame4Item25IconTexture\",\n\t\"ContainerFrame4Item25NormalTexture\",\n\t\"ContainerFrame4Item25Stock\",\n\t\"ContainerFrame4Item26Count\",\n\t\"ContainerFrame4Item26IconQuestTexture\",\n\t\"ContainerFrame4Item26IconTexture\",\n\t\"ContainerFrame4Item26NormalTexture\",\n\t\"ContainerFrame4Item26Stock\",\n\t\"ContainerFrame4Item27Count\",\n\t\"ContainerFrame4Item27IconQuestTexture\",\n\t\"ContainerFrame4Item27IconTexture\",\n\t\"ContainerFrame4Item27NormalTexture\",\n\t\"ContainerFrame4Item27Stock\",\n\t\"ContainerFrame4Item28Count\",\n\t\"ContainerFrame4Item28IconQuestTexture\",\n\t\"ContainerFrame4Item28IconTexture\",\n\t\"ContainerFrame4Item28NormalTexture\",\n\t\"ContainerFrame4Item28Stock\",\n\t\"ContainerFrame4Item29Count\",\n\t\"ContainerFrame4Item29IconQuestTexture\",\n\t\"ContainerFrame4Item29IconTexture\",\n\t\"ContainerFrame4Item29NormalTexture\",\n\t\"ContainerFrame4Item29Stock\",\n\t\"ContainerFrame4Item2Count\",\n\t\"ContainerFrame4Item2IconQuestTexture\",\n\t\"ContainerFrame4Item2IconTexture\",\n\t\"ContainerFrame4Item2NormalTexture\",\n\t\"ContainerFrame4Item2Stock\",\n\t\"ContainerFrame4Item30Count\",\n\t\"ContainerFrame4Item30IconQuestTexture\",\n\t\"ContainerFrame4Item30IconTexture\",\n\t\"ContainerFrame4Item30NormalTexture\",\n\t\"ContainerFrame4Item30Stock\",\n\t\"ContainerFrame4Item31Count\",\n\t\"ContainerFrame4Item31IconQuestTexture\",\n\t\"ContainerFrame4Item31IconTexture\",\n\t\"ContainerFrame4Item31NormalTexture\",\n\t\"ContainerFrame4Item31Stock\",\n\t\"ContainerFrame4Item32Count\",\n\t\"ContainerFrame4Item32IconQuestTexture\",\n\t\"ContainerFrame4Item32IconTexture\",\n\t\"ContainerFrame4Item32NormalTexture\",\n\t\"ContainerFrame4Item32Stock\",\n\t\"ContainerFrame4Item33Count\",\n\t\"ContainerFrame4Item33IconQuestTexture\",\n\t\"ContainerFrame4Item33IconTexture\",\n\t\"ContainerFrame4Item33NormalTexture\",\n\t\"ContainerFrame4Item33Stock\",\n\t\"ContainerFrame4Item34Count\",\n\t\"ContainerFrame4Item34IconQuestTexture\",\n\t\"ContainerFrame4Item34IconTexture\",\n\t\"ContainerFrame4Item34NormalTexture\",\n\t\"ContainerFrame4Item34Stock\",\n\t\"ContainerFrame4Item35Count\",\n\t\"ContainerFrame4Item35IconQuestTexture\",\n\t\"ContainerFrame4Item35IconTexture\",\n\t\"ContainerFrame4Item35NormalTexture\",\n\t\"ContainerFrame4Item35Stock\",\n\t\"ContainerFrame4Item36Count\",\n\t\"ContainerFrame4Item36IconQuestTexture\",\n\t\"ContainerFrame4Item36IconTexture\",\n\t\"ContainerFrame4Item36NormalTexture\",\n\t\"ContainerFrame4Item36Stock\",\n\t\"ContainerFrame4Item3Count\",\n\t\"ContainerFrame4Item3IconQuestTexture\",\n\t\"ContainerFrame4Item3IconTexture\",\n\t\"ContainerFrame4Item3NormalTexture\",\n\t\"ContainerFrame4Item3Stock\",\n\t\"ContainerFrame4Item4Count\",\n\t\"ContainerFrame4Item4IconQuestTexture\",\n\t\"ContainerFrame4Item4IconTexture\",\n\t\"ContainerFrame4Item4NormalTexture\",\n\t\"ContainerFrame4Item4Stock\",\n\t\"ContainerFrame4Item5Count\",\n\t\"ContainerFrame4Item5IconQuestTexture\",\n\t\"ContainerFrame4Item5IconTexture\",\n\t\"ContainerFrame4Item5NormalTexture\",\n\t\"ContainerFrame4Item5Stock\",\n\t\"ContainerFrame4Item6Count\",\n\t\"ContainerFrame4Item6IconQuestTexture\",\n\t\"ContainerFrame4Item6IconTexture\",\n\t\"ContainerFrame4Item6NormalTexture\",\n\t\"ContainerFrame4Item6Stock\",\n\t\"ContainerFrame4Item7Count\",\n\t\"ContainerFrame4Item7IconQuestTexture\",\n\t\"ContainerFrame4Item7IconTexture\",\n\t\"ContainerFrame4Item7NormalTexture\",\n\t\"ContainerFrame4Item7Stock\",\n\t\"ContainerFrame4Item8Count\",\n\t\"ContainerFrame4Item8IconQuestTexture\",\n\t\"ContainerFrame4Item8IconTexture\",\n\t\"ContainerFrame4Item8NormalTexture\",\n\t\"ContainerFrame4Item8Stock\",\n\t\"ContainerFrame4Item9Count\",\n\t\"ContainerFrame4Item9IconQuestTexture\",\n\t\"ContainerFrame4Item9IconTexture\",\n\t\"ContainerFrame4Item9NormalTexture\",\n\t\"ContainerFrame4Item9Stock\",\n\t\"ContainerFrame4MoneyFrameCopperButtonText\",\n\t\"ContainerFrame4MoneyFrameGoldButtonText\",\n\t\"ContainerFrame4MoneyFrameSilverButtonText\",\n\t\"ContainerFrame4Name\",\n\t\"ContainerFrame4Portrait\",\n\t\"ContainerFrame5Background1Slot\",\n\t\"ContainerFrame5BackgroundBottom\",\n\t\"ContainerFrame5BackgroundMiddle1\",\n\t\"ContainerFrame5BackgroundMiddle2\",\n\t\"ContainerFrame5BackgroundTop\",\n\t\"ContainerFrame5Item10Count\",\n\t\"ContainerFrame5Item10IconQuestTexture\",\n\t\"ContainerFrame5Item10IconTexture\",\n\t\"ContainerFrame5Item10NormalTexture\",\n\t\"ContainerFrame5Item10Stock\",\n\t\"ContainerFrame5Item11Count\",\n\t\"ContainerFrame5Item11IconQuestTexture\",\n\t\"ContainerFrame5Item11IconTexture\",\n\t\"ContainerFrame5Item11NormalTexture\",\n\t\"ContainerFrame5Item11Stock\",\n\t\"ContainerFrame5Item12Count\",\n\t\"ContainerFrame5Item12IconQuestTexture\",\n\t\"ContainerFrame5Item12IconTexture\",\n\t\"ContainerFrame5Item12NormalTexture\",\n\t\"ContainerFrame5Item12Stock\",\n\t\"ContainerFrame5Item13Count\",\n\t\"ContainerFrame5Item13IconQuestTexture\",\n\t\"ContainerFrame5Item13IconTexture\",\n\t\"ContainerFrame5Item13NormalTexture\",\n\t\"ContainerFrame5Item13Stock\",\n\t\"ContainerFrame5Item14Count\",\n\t\"ContainerFrame5Item14IconQuestTexture\",\n\t\"ContainerFrame5Item14IconTexture\",\n\t\"ContainerFrame5Item14NormalTexture\",\n\t\"ContainerFrame5Item14Stock\",\n\t\"ContainerFrame5Item15Count\",\n\t\"ContainerFrame5Item15IconQuestTexture\",\n\t\"ContainerFrame5Item15IconTexture\",\n\t\"ContainerFrame5Item15NormalTexture\",\n\t\"ContainerFrame5Item15Stock\",\n\t\"ContainerFrame5Item16Count\",\n\t\"ContainerFrame5Item16IconQuestTexture\",\n\t\"ContainerFrame5Item16IconTexture\",\n\t\"ContainerFrame5Item16NormalTexture\",\n\t\"ContainerFrame5Item16Stock\",\n\t\"ContainerFrame5Item17Count\",\n\t\"ContainerFrame5Item17IconQuestTexture\",\n\t\"ContainerFrame5Item17IconTexture\",\n\t\"ContainerFrame5Item17NormalTexture\",\n\t\"ContainerFrame5Item17Stock\",\n\t\"ContainerFrame5Item18Count\",\n\t\"ContainerFrame5Item18IconQuestTexture\",\n\t\"ContainerFrame5Item18IconTexture\",\n\t\"ContainerFrame5Item18NormalTexture\",\n\t\"ContainerFrame5Item18Stock\",\n\t\"ContainerFrame5Item19Count\",\n\t\"ContainerFrame5Item19IconQuestTexture\",\n\t\"ContainerFrame5Item19IconTexture\",\n\t\"ContainerFrame5Item19NormalTexture\",\n\t\"ContainerFrame5Item19Stock\",\n\t\"ContainerFrame5Item1Count\",\n\t\"ContainerFrame5Item1IconQuestTexture\",\n\t\"ContainerFrame5Item1IconTexture\",\n\t\"ContainerFrame5Item1NormalTexture\",\n\t\"ContainerFrame5Item1Stock\",\n\t\"ContainerFrame5Item20Count\",\n\t\"ContainerFrame5Item20IconQuestTexture\",\n\t\"ContainerFrame5Item20IconTexture\",\n\t\"ContainerFrame5Item20NormalTexture\",\n\t\"ContainerFrame5Item20Stock\",\n\t\"ContainerFrame5Item21Count\",\n\t\"ContainerFrame5Item21IconQuestTexture\",\n\t\"ContainerFrame5Item21IconTexture\",\n\t\"ContainerFrame5Item21NormalTexture\",\n\t\"ContainerFrame5Item21Stock\",\n\t\"ContainerFrame5Item22Count\",\n\t\"ContainerFrame5Item22IconQuestTexture\",\n\t\"ContainerFrame5Item22IconTexture\",\n\t\"ContainerFrame5Item22NormalTexture\",\n\t\"ContainerFrame5Item22Stock\",\n\t\"ContainerFrame5Item23Count\",\n\t\"ContainerFrame5Item23IconQuestTexture\",\n\t\"ContainerFrame5Item23IconTexture\",\n\t\"ContainerFrame5Item23NormalTexture\",\n\t\"ContainerFrame5Item23Stock\",\n\t\"ContainerFrame5Item24Count\",\n\t\"ContainerFrame5Item24IconQuestTexture\",\n\t\"ContainerFrame5Item24IconTexture\",\n\t\"ContainerFrame5Item24NormalTexture\",\n\t\"ContainerFrame5Item24Stock\",\n\t\"ContainerFrame5Item25Count\",\n\t\"ContainerFrame5Item25IconQuestTexture\",\n\t\"ContainerFrame5Item25IconTexture\",\n\t\"ContainerFrame5Item25NormalTexture\",\n\t\"ContainerFrame5Item25Stock\",\n\t\"ContainerFrame5Item26Count\",\n\t\"ContainerFrame5Item26IconQuestTexture\",\n\t\"ContainerFrame5Item26IconTexture\",\n\t\"ContainerFrame5Item26NormalTexture\",\n\t\"ContainerFrame5Item26Stock\",\n\t\"ContainerFrame5Item27Count\",\n\t\"ContainerFrame5Item27IconQuestTexture\",\n\t\"ContainerFrame5Item27IconTexture\",\n\t\"ContainerFrame5Item27NormalTexture\",\n\t\"ContainerFrame5Item27Stock\",\n\t\"ContainerFrame5Item28Count\",\n\t\"ContainerFrame5Item28IconQuestTexture\",\n\t\"ContainerFrame5Item28IconTexture\",\n\t\"ContainerFrame5Item28NormalTexture\",\n\t\"ContainerFrame5Item28Stock\",\n\t\"ContainerFrame5Item29Count\",\n\t\"ContainerFrame5Item29IconQuestTexture\",\n\t\"ContainerFrame5Item29IconTexture\",\n\t\"ContainerFrame5Item29NormalTexture\",\n\t\"ContainerFrame5Item29Stock\",\n\t\"ContainerFrame5Item2Count\",\n\t\"ContainerFrame5Item2IconQuestTexture\",\n\t\"ContainerFrame5Item2IconTexture\",\n\t\"ContainerFrame5Item2NormalTexture\",\n\t\"ContainerFrame5Item2Stock\",\n\t\"ContainerFrame5Item30Count\",\n\t\"ContainerFrame5Item30IconQuestTexture\",\n\t\"ContainerFrame5Item30IconTexture\",\n\t\"ContainerFrame5Item30NormalTexture\",\n\t\"ContainerFrame5Item30Stock\",\n\t\"ContainerFrame5Item31Count\",\n\t\"ContainerFrame5Item31IconQuestTexture\",\n\t\"ContainerFrame5Item31IconTexture\",\n\t\"ContainerFrame5Item31NormalTexture\",\n\t\"ContainerFrame5Item31Stock\",\n\t\"ContainerFrame5Item32Count\",\n\t\"ContainerFrame5Item32IconQuestTexture\",\n\t\"ContainerFrame5Item32IconTexture\",\n\t\"ContainerFrame5Item32NormalTexture\",\n\t\"ContainerFrame5Item32Stock\",\n\t\"ContainerFrame5Item33Count\",\n\t\"ContainerFrame5Item33IconQuestTexture\",\n\t\"ContainerFrame5Item33IconTexture\",\n\t\"ContainerFrame5Item33NormalTexture\",\n\t\"ContainerFrame5Item33Stock\",\n\t\"ContainerFrame5Item34Count\",\n\t\"ContainerFrame5Item34IconQuestTexture\",\n\t\"ContainerFrame5Item34IconTexture\",\n\t\"ContainerFrame5Item34NormalTexture\",\n\t\"ContainerFrame5Item34Stock\",\n\t\"ContainerFrame5Item35Count\",\n\t\"ContainerFrame5Item35IconQuestTexture\",\n\t\"ContainerFrame5Item35IconTexture\",\n\t\"ContainerFrame5Item35NormalTexture\",\n\t\"ContainerFrame5Item35Stock\",\n\t\"ContainerFrame5Item36Count\",\n\t\"ContainerFrame5Item36IconQuestTexture\",\n\t\"ContainerFrame5Item36IconTexture\",\n\t\"ContainerFrame5Item36NormalTexture\",\n\t\"ContainerFrame5Item36Stock\",\n\t\"ContainerFrame5Item3Count\",\n\t\"ContainerFrame5Item3IconQuestTexture\",\n\t\"ContainerFrame5Item3IconTexture\",\n\t\"ContainerFrame5Item3NormalTexture\",\n\t\"ContainerFrame5Item3Stock\",\n\t\"ContainerFrame5Item4Count\",\n\t\"ContainerFrame5Item4IconQuestTexture\",\n\t\"ContainerFrame5Item4IconTexture\",\n\t\"ContainerFrame5Item4NormalTexture\",\n\t\"ContainerFrame5Item4Stock\",\n\t\"ContainerFrame5Item5Count\",\n\t\"ContainerFrame5Item5IconQuestTexture\",\n\t\"ContainerFrame5Item5IconTexture\",\n\t\"ContainerFrame5Item5NormalTexture\",\n\t\"ContainerFrame5Item5Stock\",\n\t\"ContainerFrame5Item6Count\",\n\t\"ContainerFrame5Item6IconQuestTexture\",\n\t\"ContainerFrame5Item6IconTexture\",\n\t\"ContainerFrame5Item6NormalTexture\",\n\t\"ContainerFrame5Item6Stock\",\n\t\"ContainerFrame5Item7Count\",\n\t\"ContainerFrame5Item7IconQuestTexture\",\n\t\"ContainerFrame5Item7IconTexture\",\n\t\"ContainerFrame5Item7NormalTexture\",\n\t\"ContainerFrame5Item7Stock\",\n\t\"ContainerFrame5Item8Count\",\n\t\"ContainerFrame5Item8IconQuestTexture\",\n\t\"ContainerFrame5Item8IconTexture\",\n\t\"ContainerFrame5Item8NormalTexture\",\n\t\"ContainerFrame5Item8Stock\",\n\t\"ContainerFrame5Item9Count\",\n\t\"ContainerFrame5Item9IconQuestTexture\",\n\t\"ContainerFrame5Item9IconTexture\",\n\t\"ContainerFrame5Item9NormalTexture\",\n\t\"ContainerFrame5Item9Stock\",\n\t\"ContainerFrame5MoneyFrameCopperButtonText\",\n\t\"ContainerFrame5MoneyFrameGoldButtonText\",\n\t\"ContainerFrame5MoneyFrameSilverButtonText\",\n\t\"ContainerFrame5Name\",\n\t\"ContainerFrame5Portrait\",\n\t\"ContainerFrame6Background1Slot\",\n\t\"ContainerFrame6BackgroundBottom\",\n\t\"ContainerFrame6BackgroundMiddle1\",\n\t\"ContainerFrame6BackgroundMiddle2\",\n\t\"ContainerFrame6BackgroundTop\",\n\t\"ContainerFrame6Item10Count\",\n\t\"ContainerFrame6Item10IconQuestTexture\",\n\t\"ContainerFrame6Item10IconTexture\",\n\t\"ContainerFrame6Item10NormalTexture\",\n\t\"ContainerFrame6Item10Stock\",\n\t\"ContainerFrame6Item11Count\",\n\t\"ContainerFrame6Item11IconQuestTexture\",\n\t\"ContainerFrame6Item11IconTexture\",\n\t\"ContainerFrame6Item11NormalTexture\",\n\t\"ContainerFrame6Item11Stock\",\n\t\"ContainerFrame6Item12Count\",\n\t\"ContainerFrame6Item12IconQuestTexture\",\n\t\"ContainerFrame6Item12IconTexture\",\n\t\"ContainerFrame6Item12NormalTexture\",\n\t\"ContainerFrame6Item12Stock\",\n\t\"ContainerFrame6Item13Count\",\n\t\"ContainerFrame6Item13IconQuestTexture\",\n\t\"ContainerFrame6Item13IconTexture\",\n\t\"ContainerFrame6Item13NormalTexture\",\n\t\"ContainerFrame6Item13Stock\",\n\t\"ContainerFrame6Item14Count\",\n\t\"ContainerFrame6Item14IconQuestTexture\",\n\t\"ContainerFrame6Item14IconTexture\",\n\t\"ContainerFrame6Item14NormalTexture\",\n\t\"ContainerFrame6Item14Stock\",\n\t\"ContainerFrame6Item15Count\",\n\t\"ContainerFrame6Item15IconQuestTexture\",\n\t\"ContainerFrame6Item15IconTexture\",\n\t\"ContainerFrame6Item15NormalTexture\",\n\t\"ContainerFrame6Item15Stock\",\n\t\"ContainerFrame6Item16Count\",\n\t\"ContainerFrame6Item16IconQuestTexture\",\n\t\"ContainerFrame6Item16IconTexture\",\n\t\"ContainerFrame6Item16NormalTexture\",\n\t\"ContainerFrame6Item16Stock\",\n\t\"ContainerFrame6Item17Count\",\n\t\"ContainerFrame6Item17IconQuestTexture\",\n\t\"ContainerFrame6Item17IconTexture\",\n\t\"ContainerFrame6Item17NormalTexture\",\n\t\"ContainerFrame6Item17Stock\",\n\t\"ContainerFrame6Item18Count\",\n\t\"ContainerFrame6Item18IconQuestTexture\",\n\t\"ContainerFrame6Item18IconTexture\",\n\t\"ContainerFrame6Item18NormalTexture\",\n\t\"ContainerFrame6Item18Stock\",\n\t\"ContainerFrame6Item19Count\",\n\t\"ContainerFrame6Item19IconQuestTexture\",\n\t\"ContainerFrame6Item19IconTexture\",\n\t\"ContainerFrame6Item19NormalTexture\",\n\t\"ContainerFrame6Item19Stock\",\n\t\"ContainerFrame6Item1Count\",\n\t\"ContainerFrame6Item1IconQuestTexture\",\n\t\"ContainerFrame6Item1IconTexture\",\n\t\"ContainerFrame6Item1NormalTexture\",\n\t\"ContainerFrame6Item1Stock\",\n\t\"ContainerFrame6Item20Count\",\n\t\"ContainerFrame6Item20IconQuestTexture\",\n\t\"ContainerFrame6Item20IconTexture\",\n\t\"ContainerFrame6Item20NormalTexture\",\n\t\"ContainerFrame6Item20Stock\",\n\t\"ContainerFrame6Item21Count\",\n\t\"ContainerFrame6Item21IconQuestTexture\",\n\t\"ContainerFrame6Item21IconTexture\",\n\t\"ContainerFrame6Item21NormalTexture\",\n\t\"ContainerFrame6Item21Stock\",\n\t\"ContainerFrame6Item22Count\",\n\t\"ContainerFrame6Item22IconQuestTexture\",\n\t\"ContainerFrame6Item22IconTexture\",\n\t\"ContainerFrame6Item22NormalTexture\",\n\t\"ContainerFrame6Item22Stock\",\n\t\"ContainerFrame6Item23Count\",\n\t\"ContainerFrame6Item23IconQuestTexture\",\n\t\"ContainerFrame6Item23IconTexture\",\n\t\"ContainerFrame6Item23NormalTexture\",\n\t\"ContainerFrame6Item23Stock\",\n\t\"ContainerFrame6Item24Count\",\n\t\"ContainerFrame6Item24IconQuestTexture\",\n\t\"ContainerFrame6Item24IconTexture\",\n\t\"ContainerFrame6Item24NormalTexture\",\n\t\"ContainerFrame6Item24Stock\",\n\t\"ContainerFrame6Item25Count\",\n\t\"ContainerFrame6Item25IconQuestTexture\",\n\t\"ContainerFrame6Item25IconTexture\",\n\t\"ContainerFrame6Item25NormalTexture\",\n\t\"ContainerFrame6Item25Stock\",\n\t\"ContainerFrame6Item26Count\",\n\t\"ContainerFrame6Item26IconQuestTexture\",\n\t\"ContainerFrame6Item26IconTexture\",\n\t\"ContainerFrame6Item26NormalTexture\",\n\t\"ContainerFrame6Item26Stock\",\n\t\"ContainerFrame6Item27Count\",\n\t\"ContainerFrame6Item27IconQuestTexture\",\n\t\"ContainerFrame6Item27IconTexture\",\n\t\"ContainerFrame6Item27NormalTexture\",\n\t\"ContainerFrame6Item27Stock\",\n\t\"ContainerFrame6Item28Count\",\n\t\"ContainerFrame6Item28IconQuestTexture\",\n\t\"ContainerFrame6Item28IconTexture\",\n\t\"ContainerFrame6Item28NormalTexture\",\n\t\"ContainerFrame6Item28Stock\",\n\t\"ContainerFrame6Item29Count\",\n\t\"ContainerFrame6Item29IconQuestTexture\",\n\t\"ContainerFrame6Item29IconTexture\",\n\t\"ContainerFrame6Item29NormalTexture\",\n\t\"ContainerFrame6Item29Stock\",\n\t\"ContainerFrame6Item2Count\",\n\t\"ContainerFrame6Item2IconQuestTexture\",\n\t\"ContainerFrame6Item2IconTexture\",\n\t\"ContainerFrame6Item2NormalTexture\",\n\t\"ContainerFrame6Item2Stock\",\n\t\"ContainerFrame6Item30Count\",\n\t\"ContainerFrame6Item30IconQuestTexture\",\n\t\"ContainerFrame6Item30IconTexture\",\n\t\"ContainerFrame6Item30NormalTexture\",\n\t\"ContainerFrame6Item30Stock\",\n\t\"ContainerFrame6Item31Count\",\n\t\"ContainerFrame6Item31IconQuestTexture\",\n\t\"ContainerFrame6Item31IconTexture\",\n\t\"ContainerFrame6Item31NormalTexture\",\n\t\"ContainerFrame6Item31Stock\",\n\t\"ContainerFrame6Item32Count\",\n\t\"ContainerFrame6Item32IconQuestTexture\",\n\t\"ContainerFrame6Item32IconTexture\",\n\t\"ContainerFrame6Item32NormalTexture\",\n\t\"ContainerFrame6Item32Stock\",\n\t\"ContainerFrame6Item33Count\",\n\t\"ContainerFrame6Item33IconQuestTexture\",\n\t\"ContainerFrame6Item33IconTexture\",\n\t\"ContainerFrame6Item33NormalTexture\",\n\t\"ContainerFrame6Item33Stock\",\n\t\"ContainerFrame6Item34Count\",\n\t\"ContainerFrame6Item34IconQuestTexture\",\n\t\"ContainerFrame6Item34IconTexture\",\n\t\"ContainerFrame6Item34NormalTexture\",\n\t\"ContainerFrame6Item34Stock\",\n\t\"ContainerFrame6Item35Count\",\n\t\"ContainerFrame6Item35IconQuestTexture\",\n\t\"ContainerFrame6Item35IconTexture\",\n\t\"ContainerFrame6Item35NormalTexture\",\n\t\"ContainerFrame6Item35Stock\",\n\t\"ContainerFrame6Item36Count\",\n\t\"ContainerFrame6Item36IconQuestTexture\",\n\t\"ContainerFrame6Item36IconTexture\",\n\t\"ContainerFrame6Item36NormalTexture\",\n\t\"ContainerFrame6Item36Stock\",\n\t\"ContainerFrame6Item3Count\",\n\t\"ContainerFrame6Item3IconQuestTexture\",\n\t\"ContainerFrame6Item3IconTexture\",\n\t\"ContainerFrame6Item3NormalTexture\",\n\t\"ContainerFrame6Item3Stock\",\n\t\"ContainerFrame6Item4Count\",\n\t\"ContainerFrame6Item4IconQuestTexture\",\n\t\"ContainerFrame6Item4IconTexture\",\n\t\"ContainerFrame6Item4NormalTexture\",\n\t\"ContainerFrame6Item4Stock\",\n\t\"ContainerFrame6Item5Count\",\n\t\"ContainerFrame6Item5IconQuestTexture\",\n\t\"ContainerFrame6Item5IconTexture\",\n\t\"ContainerFrame6Item5NormalTexture\",\n\t\"ContainerFrame6Item5Stock\",\n\t\"ContainerFrame6Item6Count\",\n\t\"ContainerFrame6Item6IconQuestTexture\",\n\t\"ContainerFrame6Item6IconTexture\",\n\t\"ContainerFrame6Item6NormalTexture\",\n\t\"ContainerFrame6Item6Stock\",\n\t\"ContainerFrame6Item7Count\",\n\t\"ContainerFrame6Item7IconQuestTexture\",\n\t\"ContainerFrame6Item7IconTexture\",\n\t\"ContainerFrame6Item7NormalTexture\",\n\t\"ContainerFrame6Item7Stock\",\n\t\"ContainerFrame6Item8Count\",\n\t\"ContainerFrame6Item8IconQuestTexture\",\n\t\"ContainerFrame6Item8IconTexture\",\n\t\"ContainerFrame6Item8NormalTexture\",\n\t\"ContainerFrame6Item8Stock\",\n\t\"ContainerFrame6Item9Count\",\n\t\"ContainerFrame6Item9IconQuestTexture\",\n\t\"ContainerFrame6Item9IconTexture\",\n\t\"ContainerFrame6Item9NormalTexture\",\n\t\"ContainerFrame6Item9Stock\",\n\t\"ContainerFrame6MoneyFrameCopperButtonText\",\n\t\"ContainerFrame6MoneyFrameGoldButtonText\",\n\t\"ContainerFrame6MoneyFrameSilverButtonText\",\n\t\"ContainerFrame6Name\",\n\t\"ContainerFrame6Portrait\",\n\t\"ContainerFrame7Background1Slot\",\n\t\"ContainerFrame7BackgroundBottom\",\n\t\"ContainerFrame7BackgroundMiddle1\",\n\t\"ContainerFrame7BackgroundMiddle2\",\n\t\"ContainerFrame7BackgroundTop\",\n\t\"ContainerFrame7Item10Count\",\n\t\"ContainerFrame7Item10IconQuestTexture\",\n\t\"ContainerFrame7Item10IconTexture\",\n\t\"ContainerFrame7Item10NormalTexture\",\n\t\"ContainerFrame7Item10Stock\",\n\t\"ContainerFrame7Item11Count\",\n\t\"ContainerFrame7Item11IconQuestTexture\",\n\t\"ContainerFrame7Item11IconTexture\",\n\t\"ContainerFrame7Item11NormalTexture\",\n\t\"ContainerFrame7Item11Stock\",\n\t\"ContainerFrame7Item12Count\",\n\t\"ContainerFrame7Item12IconQuestTexture\",\n\t\"ContainerFrame7Item12IconTexture\",\n\t\"ContainerFrame7Item12NormalTexture\",\n\t\"ContainerFrame7Item12Stock\",\n\t\"ContainerFrame7Item13Count\",\n\t\"ContainerFrame7Item13IconQuestTexture\",\n\t\"ContainerFrame7Item13IconTexture\",\n\t\"ContainerFrame7Item13NormalTexture\",\n\t\"ContainerFrame7Item13Stock\",\n\t\"ContainerFrame7Item14Count\",\n\t\"ContainerFrame7Item14IconQuestTexture\",\n\t\"ContainerFrame7Item14IconTexture\",\n\t\"ContainerFrame7Item14NormalTexture\",\n\t\"ContainerFrame7Item14Stock\",\n\t\"ContainerFrame7Item15Count\",\n\t\"ContainerFrame7Item15IconQuestTexture\",\n\t\"ContainerFrame7Item15IconTexture\",\n\t\"ContainerFrame7Item15NormalTexture\",\n\t\"ContainerFrame7Item15Stock\",\n\t\"ContainerFrame7Item16Count\",\n\t\"ContainerFrame7Item16IconQuestTexture\",\n\t\"ContainerFrame7Item16IconTexture\",\n\t\"ContainerFrame7Item16NormalTexture\",\n\t\"ContainerFrame7Item16Stock\",\n\t\"ContainerFrame7Item17Count\",\n\t\"ContainerFrame7Item17IconQuestTexture\",\n\t\"ContainerFrame7Item17IconTexture\",\n\t\"ContainerFrame7Item17NormalTexture\",\n\t\"ContainerFrame7Item17Stock\",\n\t\"ContainerFrame7Item18Count\",\n\t\"ContainerFrame7Item18IconQuestTexture\",\n\t\"ContainerFrame7Item18IconTexture\",\n\t\"ContainerFrame7Item18NormalTexture\",\n\t\"ContainerFrame7Item18Stock\",\n\t\"ContainerFrame7Item19Count\",\n\t\"ContainerFrame7Item19IconQuestTexture\",\n\t\"ContainerFrame7Item19IconTexture\",\n\t\"ContainerFrame7Item19NormalTexture\",\n\t\"ContainerFrame7Item19Stock\",\n\t\"ContainerFrame7Item1Count\",\n\t\"ContainerFrame7Item1IconQuestTexture\",\n\t\"ContainerFrame7Item1IconTexture\",\n\t\"ContainerFrame7Item1NormalTexture\",\n\t\"ContainerFrame7Item1Stock\",\n\t\"ContainerFrame7Item20Count\",\n\t\"ContainerFrame7Item20IconQuestTexture\",\n\t\"ContainerFrame7Item20IconTexture\",\n\t\"ContainerFrame7Item20NormalTexture\",\n\t\"ContainerFrame7Item20Stock\",\n\t\"ContainerFrame7Item21Count\",\n\t\"ContainerFrame7Item21IconQuestTexture\",\n\t\"ContainerFrame7Item21IconTexture\",\n\t\"ContainerFrame7Item21NormalTexture\",\n\t\"ContainerFrame7Item21Stock\",\n\t\"ContainerFrame7Item22Count\",\n\t\"ContainerFrame7Item22IconQuestTexture\",\n\t\"ContainerFrame7Item22IconTexture\",\n\t\"ContainerFrame7Item22NormalTexture\",\n\t\"ContainerFrame7Item22Stock\",\n\t\"ContainerFrame7Item23Count\",\n\t\"ContainerFrame7Item23IconQuestTexture\",\n\t\"ContainerFrame7Item23IconTexture\",\n\t\"ContainerFrame7Item23NormalTexture\",\n\t\"ContainerFrame7Item23Stock\",\n\t\"ContainerFrame7Item24Count\",\n\t\"ContainerFrame7Item24IconQuestTexture\",\n\t\"ContainerFrame7Item24IconTexture\",\n\t\"ContainerFrame7Item24NormalTexture\",\n\t\"ContainerFrame7Item24Stock\",\n\t\"ContainerFrame7Item25Count\",\n\t\"ContainerFrame7Item25IconQuestTexture\",\n\t\"ContainerFrame7Item25IconTexture\",\n\t\"ContainerFrame7Item25NormalTexture\",\n\t\"ContainerFrame7Item25Stock\",\n\t\"ContainerFrame7Item26Count\",\n\t\"ContainerFrame7Item26IconQuestTexture\",\n\t\"ContainerFrame7Item26IconTexture\",\n\t\"ContainerFrame7Item26NormalTexture\",\n\t\"ContainerFrame7Item26Stock\",\n\t\"ContainerFrame7Item27Count\",\n\t\"ContainerFrame7Item27IconQuestTexture\",\n\t\"ContainerFrame7Item27IconTexture\",\n\t\"ContainerFrame7Item27NormalTexture\",\n\t\"ContainerFrame7Item27Stock\",\n\t\"ContainerFrame7Item28Count\",\n\t\"ContainerFrame7Item28IconQuestTexture\",\n\t\"ContainerFrame7Item28IconTexture\",\n\t\"ContainerFrame7Item28NormalTexture\",\n\t\"ContainerFrame7Item28Stock\",\n\t\"ContainerFrame7Item29Count\",\n\t\"ContainerFrame7Item29IconQuestTexture\",\n\t\"ContainerFrame7Item29IconTexture\",\n\t\"ContainerFrame7Item29NormalTexture\",\n\t\"ContainerFrame7Item29Stock\",\n\t\"ContainerFrame7Item2Count\",\n\t\"ContainerFrame7Item2IconQuestTexture\",\n\t\"ContainerFrame7Item2IconTexture\",\n\t\"ContainerFrame7Item2NormalTexture\",\n\t\"ContainerFrame7Item2Stock\",\n\t\"ContainerFrame7Item30Count\",\n\t\"ContainerFrame7Item30IconQuestTexture\",\n\t\"ContainerFrame7Item30IconTexture\",\n\t\"ContainerFrame7Item30NormalTexture\",\n\t\"ContainerFrame7Item30Stock\",\n\t\"ContainerFrame7Item31Count\",\n\t\"ContainerFrame7Item31IconQuestTexture\",\n\t\"ContainerFrame7Item31IconTexture\",\n\t\"ContainerFrame7Item31NormalTexture\",\n\t\"ContainerFrame7Item31Stock\",\n\t\"ContainerFrame7Item32Count\",\n\t\"ContainerFrame7Item32IconQuestTexture\",\n\t\"ContainerFrame7Item32IconTexture\",\n\t\"ContainerFrame7Item32NormalTexture\",\n\t\"ContainerFrame7Item32Stock\",\n\t\"ContainerFrame7Item33Count\",\n\t\"ContainerFrame7Item33IconQuestTexture\",\n\t\"ContainerFrame7Item33IconTexture\",\n\t\"ContainerFrame7Item33NormalTexture\",\n\t\"ContainerFrame7Item33Stock\",\n\t\"ContainerFrame7Item34Count\",\n\t\"ContainerFrame7Item34IconQuestTexture\",\n\t\"ContainerFrame7Item34IconTexture\",\n\t\"ContainerFrame7Item34NormalTexture\",\n\t\"ContainerFrame7Item34Stock\",\n\t\"ContainerFrame7Item35Count\",\n\t\"ContainerFrame7Item35IconQuestTexture\",\n\t\"ContainerFrame7Item35IconTexture\",\n\t\"ContainerFrame7Item35NormalTexture\",\n\t\"ContainerFrame7Item35Stock\",\n\t\"ContainerFrame7Item36Count\",\n\t\"ContainerFrame7Item36IconQuestTexture\",\n\t\"ContainerFrame7Item36IconTexture\",\n\t\"ContainerFrame7Item36NormalTexture\",\n\t\"ContainerFrame7Item36Stock\",\n\t\"ContainerFrame7Item3Count\",\n\t\"ContainerFrame7Item3IconQuestTexture\",\n\t\"ContainerFrame7Item3IconTexture\",\n\t\"ContainerFrame7Item3NormalTexture\",\n\t\"ContainerFrame7Item3Stock\",\n\t\"ContainerFrame7Item4Count\",\n\t\"ContainerFrame7Item4IconQuestTexture\",\n\t\"ContainerFrame7Item4IconTexture\",\n\t\"ContainerFrame7Item4NormalTexture\",\n\t\"ContainerFrame7Item4Stock\",\n\t\"ContainerFrame7Item5Count\",\n\t\"ContainerFrame7Item5IconQuestTexture\",\n\t\"ContainerFrame7Item5IconTexture\",\n\t\"ContainerFrame7Item5NormalTexture\",\n\t\"ContainerFrame7Item5Stock\",\n\t\"ContainerFrame7Item6Count\",\n\t\"ContainerFrame7Item6IconQuestTexture\",\n\t\"ContainerFrame7Item6IconTexture\",\n\t\"ContainerFrame7Item6NormalTexture\",\n\t\"ContainerFrame7Item6Stock\",\n\t\"ContainerFrame7Item7Count\",\n\t\"ContainerFrame7Item7IconQuestTexture\",\n\t\"ContainerFrame7Item7IconTexture\",\n\t\"ContainerFrame7Item7NormalTexture\",\n\t\"ContainerFrame7Item7Stock\",\n\t\"ContainerFrame7Item8Count\",\n\t\"ContainerFrame7Item8IconQuestTexture\",\n\t\"ContainerFrame7Item8IconTexture\",\n\t\"ContainerFrame7Item8NormalTexture\",\n\t\"ContainerFrame7Item8Stock\",\n\t\"ContainerFrame7Item9Count\",\n\t\"ContainerFrame7Item9IconQuestTexture\",\n\t\"ContainerFrame7Item9IconTexture\",\n\t\"ContainerFrame7Item9NormalTexture\",\n\t\"ContainerFrame7Item9Stock\",\n\t\"ContainerFrame7MoneyFrameCopperButtonText\",\n\t\"ContainerFrame7MoneyFrameGoldButtonText\",\n\t\"ContainerFrame7MoneyFrameSilverButtonText\",\n\t\"ContainerFrame7Name\",\n\t\"ContainerFrame7Portrait\",\n\t\"ContainerFrame8Background1Slot\",\n\t\"ContainerFrame8BackgroundBottom\",\n\t\"ContainerFrame8BackgroundMiddle1\",\n\t\"ContainerFrame8BackgroundMiddle2\",\n\t\"ContainerFrame8BackgroundTop\",\n\t\"ContainerFrame8Item10Count\",\n\t\"ContainerFrame8Item10IconQuestTexture\",\n\t\"ContainerFrame8Item10IconTexture\",\n\t\"ContainerFrame8Item10NormalTexture\",\n\t\"ContainerFrame8Item10Stock\",\n\t\"ContainerFrame8Item11Count\",\n\t\"ContainerFrame8Item11IconQuestTexture\",\n\t\"ContainerFrame8Item11IconTexture\",\n\t\"ContainerFrame8Item11NormalTexture\",\n\t\"ContainerFrame8Item11Stock\",\n\t\"ContainerFrame8Item12Count\",\n\t\"ContainerFrame8Item12IconQuestTexture\",\n\t\"ContainerFrame8Item12IconTexture\",\n\t\"ContainerFrame8Item12NormalTexture\",\n\t\"ContainerFrame8Item12Stock\",\n\t\"ContainerFrame8Item13Count\",\n\t\"ContainerFrame8Item13IconQuestTexture\",\n\t\"ContainerFrame8Item13IconTexture\",\n\t\"ContainerFrame8Item13NormalTexture\",\n\t\"ContainerFrame8Item13Stock\",\n\t\"ContainerFrame8Item14Count\",\n\t\"ContainerFrame8Item14IconQuestTexture\",\n\t\"ContainerFrame8Item14IconTexture\",\n\t\"ContainerFrame8Item14NormalTexture\",\n\t\"ContainerFrame8Item14Stock\",\n\t\"ContainerFrame8Item15Count\",\n\t\"ContainerFrame8Item15IconQuestTexture\",\n\t\"ContainerFrame8Item15IconTexture\",\n\t\"ContainerFrame8Item15NormalTexture\",\n\t\"ContainerFrame8Item15Stock\",\n\t\"ContainerFrame8Item16Count\",\n\t\"ContainerFrame8Item16IconQuestTexture\",\n\t\"ContainerFrame8Item16IconTexture\",\n\t\"ContainerFrame8Item16NormalTexture\",\n\t\"ContainerFrame8Item16Stock\",\n\t\"ContainerFrame8Item17Count\",\n\t\"ContainerFrame8Item17IconQuestTexture\",\n\t\"ContainerFrame8Item17IconTexture\",\n\t\"ContainerFrame8Item17NormalTexture\",\n\t\"ContainerFrame8Item17Stock\",\n\t\"ContainerFrame8Item18Count\",\n\t\"ContainerFrame8Item18IconQuestTexture\",\n\t\"ContainerFrame8Item18IconTexture\",\n\t\"ContainerFrame8Item18NormalTexture\",\n\t\"ContainerFrame8Item18Stock\",\n\t\"ContainerFrame8Item19Count\",\n\t\"ContainerFrame8Item19IconQuestTexture\",\n\t\"ContainerFrame8Item19IconTexture\",\n\t\"ContainerFrame8Item19NormalTexture\",\n\t\"ContainerFrame8Item19Stock\",\n\t\"ContainerFrame8Item1Count\",\n\t\"ContainerFrame8Item1IconQuestTexture\",\n\t\"ContainerFrame8Item1IconTexture\",\n\t\"ContainerFrame8Item1NormalTexture\",\n\t\"ContainerFrame8Item1Stock\",\n\t\"ContainerFrame8Item20Count\",\n\t\"ContainerFrame8Item20IconQuestTexture\",\n\t\"ContainerFrame8Item20IconTexture\",\n\t\"ContainerFrame8Item20NormalTexture\",\n\t\"ContainerFrame8Item20Stock\",\n\t\"ContainerFrame8Item21Count\",\n\t\"ContainerFrame8Item21IconQuestTexture\",\n\t\"ContainerFrame8Item21IconTexture\",\n\t\"ContainerFrame8Item21NormalTexture\",\n\t\"ContainerFrame8Item21Stock\",\n\t\"ContainerFrame8Item22Count\",\n\t\"ContainerFrame8Item22IconQuestTexture\",\n\t\"ContainerFrame8Item22IconTexture\",\n\t\"ContainerFrame8Item22NormalTexture\",\n\t\"ContainerFrame8Item22Stock\",\n\t\"ContainerFrame8Item23Count\",\n\t\"ContainerFrame8Item23IconQuestTexture\",\n\t\"ContainerFrame8Item23IconTexture\",\n\t\"ContainerFrame8Item23NormalTexture\",\n\t\"ContainerFrame8Item23Stock\",\n\t\"ContainerFrame8Item24Count\",\n\t\"ContainerFrame8Item24IconQuestTexture\",\n\t\"ContainerFrame8Item24IconTexture\",\n\t\"ContainerFrame8Item24NormalTexture\",\n\t\"ContainerFrame8Item24Stock\",\n\t\"ContainerFrame8Item25Count\",\n\t\"ContainerFrame8Item25IconQuestTexture\",\n\t\"ContainerFrame8Item25IconTexture\",\n\t\"ContainerFrame8Item25NormalTexture\",\n\t\"ContainerFrame8Item25Stock\",\n\t\"ContainerFrame8Item26Count\",\n\t\"ContainerFrame8Item26IconQuestTexture\",\n\t\"ContainerFrame8Item26IconTexture\",\n\t\"ContainerFrame8Item26NormalTexture\",\n\t\"ContainerFrame8Item26Stock\",\n\t\"ContainerFrame8Item27Count\",\n\t\"ContainerFrame8Item27IconQuestTexture\",\n\t\"ContainerFrame8Item27IconTexture\",\n\t\"ContainerFrame8Item27NormalTexture\",\n\t\"ContainerFrame8Item27Stock\",\n\t\"ContainerFrame8Item28Count\",\n\t\"ContainerFrame8Item28IconQuestTexture\",\n\t\"ContainerFrame8Item28IconTexture\",\n\t\"ContainerFrame8Item28NormalTexture\",\n\t\"ContainerFrame8Item28Stock\",\n\t\"ContainerFrame8Item29Count\",\n\t\"ContainerFrame8Item29IconQuestTexture\",\n\t\"ContainerFrame8Item29IconTexture\",\n\t\"ContainerFrame8Item29NormalTexture\",\n\t\"ContainerFrame8Item29Stock\",\n\t\"ContainerFrame8Item2Count\",\n\t\"ContainerFrame8Item2IconQuestTexture\",\n\t\"ContainerFrame8Item2IconTexture\",\n\t\"ContainerFrame8Item2NormalTexture\",\n\t\"ContainerFrame8Item2Stock\",\n\t\"ContainerFrame8Item30Count\",\n\t\"ContainerFrame8Item30IconQuestTexture\",\n\t\"ContainerFrame8Item30IconTexture\",\n\t\"ContainerFrame8Item30NormalTexture\",\n\t\"ContainerFrame8Item30Stock\",\n\t\"ContainerFrame8Item31Count\",\n\t\"ContainerFrame8Item31IconQuestTexture\",\n\t\"ContainerFrame8Item31IconTexture\",\n\t\"ContainerFrame8Item31NormalTexture\",\n\t\"ContainerFrame8Item31Stock\",\n\t\"ContainerFrame8Item32Count\",\n\t\"ContainerFrame8Item32IconQuestTexture\",\n\t\"ContainerFrame8Item32IconTexture\",\n\t\"ContainerFrame8Item32NormalTexture\",\n\t\"ContainerFrame8Item32Stock\",\n\t\"ContainerFrame8Item33Count\",\n\t\"ContainerFrame8Item33IconQuestTexture\",\n\t\"ContainerFrame8Item33IconTexture\",\n\t\"ContainerFrame8Item33NormalTexture\",\n\t\"ContainerFrame8Item33Stock\",\n\t\"ContainerFrame8Item34Count\",\n\t\"ContainerFrame8Item34IconQuestTexture\",\n\t\"ContainerFrame8Item34IconTexture\",\n\t\"ContainerFrame8Item34NormalTexture\",\n\t\"ContainerFrame8Item34Stock\",\n\t\"ContainerFrame8Item35Count\",\n\t\"ContainerFrame8Item35IconQuestTexture\",\n\t\"ContainerFrame8Item35IconTexture\",\n\t\"ContainerFrame8Item35NormalTexture\",\n\t\"ContainerFrame8Item35Stock\",\n\t\"ContainerFrame8Item36Count\",\n\t\"ContainerFrame8Item36IconQuestTexture\",\n\t\"ContainerFrame8Item36IconTexture\",\n\t\"ContainerFrame8Item36NormalTexture\",\n\t\"ContainerFrame8Item36Stock\",\n\t\"ContainerFrame8Item3Count\",\n\t\"ContainerFrame8Item3IconQuestTexture\",\n\t\"ContainerFrame8Item3IconTexture\",\n\t\"ContainerFrame8Item3NormalTexture\",\n\t\"ContainerFrame8Item3Stock\",\n\t\"ContainerFrame8Item4Count\",\n\t\"ContainerFrame8Item4IconQuestTexture\",\n\t\"ContainerFrame8Item4IconTexture\",\n\t\"ContainerFrame8Item4NormalTexture\",\n\t\"ContainerFrame8Item4Stock\",\n\t\"ContainerFrame8Item5Count\",\n\t\"ContainerFrame8Item5IconQuestTexture\",\n\t\"ContainerFrame8Item5IconTexture\",\n\t\"ContainerFrame8Item5NormalTexture\",\n\t\"ContainerFrame8Item5Stock\",\n\t\"ContainerFrame8Item6Count\",\n\t\"ContainerFrame8Item6IconQuestTexture\",\n\t\"ContainerFrame8Item6IconTexture\",\n\t\"ContainerFrame8Item6NormalTexture\",\n\t\"ContainerFrame8Item6Stock\",\n\t\"ContainerFrame8Item7Count\",\n\t\"ContainerFrame8Item7IconQuestTexture\",\n\t\"ContainerFrame8Item7IconTexture\",\n\t\"ContainerFrame8Item7NormalTexture\",\n\t\"ContainerFrame8Item7Stock\",\n\t\"ContainerFrame8Item8Count\",\n\t\"ContainerFrame8Item8IconQuestTexture\",\n\t\"ContainerFrame8Item8IconTexture\",\n\t\"ContainerFrame8Item8NormalTexture\",\n\t\"ContainerFrame8Item8Stock\",\n\t\"ContainerFrame8Item9Count\",\n\t\"ContainerFrame8Item9IconQuestTexture\",\n\t\"ContainerFrame8Item9IconTexture\",\n\t\"ContainerFrame8Item9NormalTexture\",\n\t\"ContainerFrame8Item9Stock\",\n\t\"ContainerFrame8MoneyFrameCopperButtonText\",\n\t\"ContainerFrame8MoneyFrameGoldButtonText\",\n\t\"ContainerFrame8MoneyFrameSilverButtonText\",\n\t\"ContainerFrame8Name\",\n\t\"ContainerFrame8Portrait\",\n\t\"ContainerFrame9Background1Slot\",\n\t\"ContainerFrame9BackgroundBottom\",\n\t\"ContainerFrame9BackgroundMiddle1\",\n\t\"ContainerFrame9BackgroundMiddle2\",\n\t\"ContainerFrame9BackgroundTop\",\n\t\"ContainerFrame9Item10Count\",\n\t\"ContainerFrame9Item10IconQuestTexture\",\n\t\"ContainerFrame9Item10IconTexture\",\n\t\"ContainerFrame9Item10NormalTexture\",\n\t\"ContainerFrame9Item10Stock\",\n\t\"ContainerFrame9Item11Count\",\n\t\"ContainerFrame9Item11IconQuestTexture\",\n\t\"ContainerFrame9Item11IconTexture\",\n\t\"ContainerFrame9Item11NormalTexture\",\n\t\"ContainerFrame9Item11Stock\",\n\t\"ContainerFrame9Item12Count\",\n\t\"ContainerFrame9Item12IconQuestTexture\",\n\t\"ContainerFrame9Item12IconTexture\",\n\t\"ContainerFrame9Item12NormalTexture\",\n\t\"ContainerFrame9Item12Stock\",\n\t\"ContainerFrame9Item13Count\",\n\t\"ContainerFrame9Item13IconQuestTexture\",\n\t\"ContainerFrame9Item13IconTexture\",\n\t\"ContainerFrame9Item13NormalTexture\",\n\t\"ContainerFrame9Item13Stock\",\n\t\"ContainerFrame9Item14Count\",\n\t\"ContainerFrame9Item14IconQuestTexture\",\n\t\"ContainerFrame9Item14IconTexture\",\n\t\"ContainerFrame9Item14NormalTexture\",\n\t\"ContainerFrame9Item14Stock\",\n\t\"ContainerFrame9Item15Count\",\n\t\"ContainerFrame9Item15IconQuestTexture\",\n\t\"ContainerFrame9Item15IconTexture\",\n\t\"ContainerFrame9Item15NormalTexture\",\n\t\"ContainerFrame9Item15Stock\",\n\t\"ContainerFrame9Item16Count\",\n\t\"ContainerFrame9Item16IconQuestTexture\",\n\t\"ContainerFrame9Item16IconTexture\",\n\t\"ContainerFrame9Item16NormalTexture\",\n\t\"ContainerFrame9Item16Stock\",\n\t\"ContainerFrame9Item17Count\",\n\t\"ContainerFrame9Item17IconQuestTexture\",\n\t\"ContainerFrame9Item17IconTexture\",\n\t\"ContainerFrame9Item17NormalTexture\",\n\t\"ContainerFrame9Item17Stock\",\n\t\"ContainerFrame9Item18Count\",\n\t\"ContainerFrame9Item18IconQuestTexture\",\n\t\"ContainerFrame9Item18IconTexture\",\n\t\"ContainerFrame9Item18NormalTexture\",\n\t\"ContainerFrame9Item18Stock\",\n\t\"ContainerFrame9Item19Count\",\n\t\"ContainerFrame9Item19IconQuestTexture\",\n\t\"ContainerFrame9Item19IconTexture\",\n\t\"ContainerFrame9Item19NormalTexture\",\n\t\"ContainerFrame9Item19Stock\",\n\t\"ContainerFrame9Item1Count\",\n\t\"ContainerFrame9Item1IconQuestTexture\",\n\t\"ContainerFrame9Item1IconTexture\",\n\t\"ContainerFrame9Item1NormalTexture\",\n\t\"ContainerFrame9Item1Stock\",\n\t\"ContainerFrame9Item20Count\",\n\t\"ContainerFrame9Item20IconQuestTexture\",\n\t\"ContainerFrame9Item20IconTexture\",\n\t\"ContainerFrame9Item20NormalTexture\",\n\t\"ContainerFrame9Item20Stock\",\n\t\"ContainerFrame9Item21Count\",\n\t\"ContainerFrame9Item21IconQuestTexture\",\n\t\"ContainerFrame9Item21IconTexture\",\n\t\"ContainerFrame9Item21NormalTexture\",\n\t\"ContainerFrame9Item21Stock\",\n\t\"ContainerFrame9Item22Count\",\n\t\"ContainerFrame9Item22IconQuestTexture\",\n\t\"ContainerFrame9Item22IconTexture\",\n\t\"ContainerFrame9Item22NormalTexture\",\n\t\"ContainerFrame9Item22Stock\",\n\t\"ContainerFrame9Item23Count\",\n\t\"ContainerFrame9Item23IconQuestTexture\",\n\t\"ContainerFrame9Item23IconTexture\",\n\t\"ContainerFrame9Item23NormalTexture\",\n\t\"ContainerFrame9Item23Stock\",\n\t\"ContainerFrame9Item24Count\",\n\t\"ContainerFrame9Item24IconQuestTexture\",\n\t\"ContainerFrame9Item24IconTexture\",\n\t\"ContainerFrame9Item24NormalTexture\",\n\t\"ContainerFrame9Item24Stock\",\n\t\"ContainerFrame9Item25Count\",\n\t\"ContainerFrame9Item25IconQuestTexture\",\n\t\"ContainerFrame9Item25IconTexture\",\n\t\"ContainerFrame9Item25NormalTexture\",\n\t\"ContainerFrame9Item25Stock\",\n\t\"ContainerFrame9Item26Count\",\n\t\"ContainerFrame9Item26IconQuestTexture\",\n\t\"ContainerFrame9Item26IconTexture\",\n\t\"ContainerFrame9Item26NormalTexture\",\n\t\"ContainerFrame9Item26Stock\",\n\t\"ContainerFrame9Item27Count\",\n\t\"ContainerFrame9Item27IconQuestTexture\",\n\t\"ContainerFrame9Item27IconTexture\",\n\t\"ContainerFrame9Item27NormalTexture\",\n\t\"ContainerFrame9Item27Stock\",\n\t\"ContainerFrame9Item28Count\",\n\t\"ContainerFrame9Item28IconQuestTexture\",\n\t\"ContainerFrame9Item28IconTexture\",\n\t\"ContainerFrame9Item28NormalTexture\",\n\t\"ContainerFrame9Item28Stock\",\n\t\"ContainerFrame9Item29Count\",\n\t\"ContainerFrame9Item29IconQuestTexture\",\n\t\"ContainerFrame9Item29IconTexture\",\n\t\"ContainerFrame9Item29NormalTexture\",\n\t\"ContainerFrame9Item29Stock\",\n\t\"ContainerFrame9Item2Count\",\n\t\"ContainerFrame9Item2IconQuestTexture\",\n\t\"ContainerFrame9Item2IconTexture\",\n\t\"ContainerFrame9Item2NormalTexture\",\n\t\"ContainerFrame9Item2Stock\",\n\t\"ContainerFrame9Item30Count\",\n\t\"ContainerFrame9Item30IconQuestTexture\",\n\t\"ContainerFrame9Item30IconTexture\",\n\t\"ContainerFrame9Item30NormalTexture\",\n\t\"ContainerFrame9Item30Stock\",\n\t\"ContainerFrame9Item31Count\",\n\t\"ContainerFrame9Item31IconQuestTexture\",\n\t\"ContainerFrame9Item31IconTexture\",\n\t\"ContainerFrame9Item31NormalTexture\",\n\t\"ContainerFrame9Item31Stock\",\n\t\"ContainerFrame9Item32Count\",\n\t\"ContainerFrame9Item32IconQuestTexture\",\n\t\"ContainerFrame9Item32IconTexture\",\n\t\"ContainerFrame9Item32NormalTexture\",\n\t\"ContainerFrame9Item32Stock\",\n\t\"ContainerFrame9Item33Count\",\n\t\"ContainerFrame9Item33IconQuestTexture\",\n\t\"ContainerFrame9Item33IconTexture\",\n\t\"ContainerFrame9Item33NormalTexture\",\n\t\"ContainerFrame9Item33Stock\",\n\t\"ContainerFrame9Item34Count\",\n\t\"ContainerFrame9Item34IconQuestTexture\",\n\t\"ContainerFrame9Item34IconTexture\",\n\t\"ContainerFrame9Item34NormalTexture\",\n\t\"ContainerFrame9Item34Stock\",\n\t\"ContainerFrame9Item35Count\",\n\t\"ContainerFrame9Item35IconQuestTexture\",\n\t\"ContainerFrame9Item35IconTexture\",\n\t\"ContainerFrame9Item35NormalTexture\",\n\t\"ContainerFrame9Item35Stock\",\n\t\"ContainerFrame9Item36Count\",\n\t\"ContainerFrame9Item36IconQuestTexture\",\n\t\"ContainerFrame9Item36IconTexture\",\n\t\"ContainerFrame9Item36NormalTexture\",\n\t\"ContainerFrame9Item36Stock\",\n\t\"ContainerFrame9Item3Count\",\n\t\"ContainerFrame9Item3IconQuestTexture\",\n\t\"ContainerFrame9Item3IconTexture\",\n\t\"ContainerFrame9Item3NormalTexture\",\n\t\"ContainerFrame9Item3Stock\",\n\t\"ContainerFrame9Item4Count\",\n\t\"ContainerFrame9Item4IconQuestTexture\",\n\t\"ContainerFrame9Item4IconTexture\",\n\t\"ContainerFrame9Item4NormalTexture\",\n\t\"ContainerFrame9Item4Stock\",\n\t\"ContainerFrame9Item5Count\",\n\t\"ContainerFrame9Item5IconQuestTexture\",\n\t\"ContainerFrame9Item5IconTexture\",\n\t\"ContainerFrame9Item5NormalTexture\",\n\t\"ContainerFrame9Item5Stock\",\n\t\"ContainerFrame9Item6Count\",\n\t\"ContainerFrame9Item6IconQuestTexture\",\n\t\"ContainerFrame9Item6IconTexture\",\n\t\"ContainerFrame9Item6NormalTexture\",\n\t\"ContainerFrame9Item6Stock\",\n\t\"ContainerFrame9Item7Count\",\n\t\"ContainerFrame9Item7IconQuestTexture\",\n\t\"ContainerFrame9Item7IconTexture\",\n\t\"ContainerFrame9Item7NormalTexture\",\n\t\"ContainerFrame9Item7Stock\",\n\t\"ContainerFrame9Item8Count\",\n\t\"ContainerFrame9Item8IconQuestTexture\",\n\t\"ContainerFrame9Item8IconTexture\",\n\t\"ContainerFrame9Item8NormalTexture\",\n\t\"ContainerFrame9Item8Stock\",\n\t\"ContainerFrame9Item9Count\",\n\t\"ContainerFrame9Item9IconQuestTexture\",\n\t\"ContainerFrame9Item9IconTexture\",\n\t\"ContainerFrame9Item9NormalTexture\",\n\t\"ContainerFrame9Item9Stock\",\n\t\"ContainerFrame9MoneyFrameCopperButtonText\",\n\t\"ContainerFrame9MoneyFrameGoldButtonText\",\n\t\"ContainerFrame9MoneyFrameSilverButtonText\",\n\t\"ContainerFrame9Name\",\n\t\"ContainerFrame9Portrait\",\n\t\"CurrentQuestsText\",\n\t\"DialogButtonHighlightText\",\n\t\"DialogButtonNormalText\",\n\t\"DressUpBackgroundBotLeft\",\n\t\"DressUpBackgroundBotRight\",\n\t\"DressUpBackgroundTopLeft\",\n\t\"DressUpBackgroundTopRight\",\n\t\"DressUpFrameCancelButtonText\",\n\t\"DressUpFrameDescriptionText\",\n\t\"DressUpFramePortrait\",\n\t\"DressUpFrameResetButtonText\",\n\t\"DressUpFrameTitleText\",\n\t\"DropDownList1Button10Check\",\n\t\"DropDownList1Button10ColorSwatchNormalTexture\",\n\t\"DropDownList1Button10ColorSwatchSwatchBg\",\n\t\"DropDownList1Button10Highlight\",\n\t\"DropDownList1Button10Icon\",\n\t\"DropDownList1Button10NormalText\",\n\t\"DropDownList1Button11Check\",\n\t\"DropDownList1Button11ColorSwatchNormalTexture\",\n\t\"DropDownList1Button11ColorSwatchSwatchBg\",\n\t\"DropDownList1Button11Highlight\",\n\t\"DropDownList1Button11Icon\",\n\t\"DropDownList1Button11NormalText\",\n\t\"DropDownList1Button12Check\",\n\t\"DropDownList1Button12ColorSwatchNormalTexture\",\n\t\"DropDownList1Button12ColorSwatchSwatchBg\",\n\t\"DropDownList1Button12Highlight\",\n\t\"DropDownList1Button12Icon\",\n\t\"DropDownList1Button12NormalText\",\n\t\"DropDownList1Button13Check\",\n\t\"DropDownList1Button13ColorSwatchNormalTexture\",\n\t\"DropDownList1Button13ColorSwatchSwatchBg\",\n\t\"DropDownList1Button13Highlight\",\n\t\"DropDownList1Button13Icon\",\n\t\"DropDownList1Button13NormalText\",\n\t\"DropDownList1Button14Check\",\n\t\"DropDownList1Button14ColorSwatchNormalTexture\",\n\t\"DropDownList1Button14ColorSwatchSwatchBg\",\n\t\"DropDownList1Button14Highlight\",\n\t\"DropDownList1Button14Icon\",\n\t\"DropDownList1Button14NormalText\",\n\t\"DropDownList1Button15Check\",\n\t\"DropDownList1Button15ColorSwatchNormalTexture\",\n\t\"DropDownList1Button15ColorSwatchSwatchBg\",\n\t\"DropDownList1Button15Highlight\",\n\t\"DropDownList1Button15Icon\",\n\t\"DropDownList1Button15NormalText\",\n\t\"DropDownList1Button16Check\",\n\t\"DropDownList1Button16ColorSwatchNormalTexture\",\n\t\"DropDownList1Button16ColorSwatchSwatchBg\",\n\t\"DropDownList1Button16Highlight\",\n\t\"DropDownList1Button16Icon\",\n\t\"DropDownList1Button16NormalText\",\n\t\"DropDownList1Button17Check\",\n\t\"DropDownList1Button17ColorSwatchNormalTexture\",\n\t\"DropDownList1Button17ColorSwatchSwatchBg\",\n\t\"DropDownList1Button17Highlight\",\n\t\"DropDownList1Button17Icon\",\n\t\"DropDownList1Button17NormalText\",\n\t\"DropDownList1Button18Check\",\n\t\"DropDownList1Button18ColorSwatchNormalTexture\",\n\t\"DropDownList1Button18ColorSwatchSwatchBg\",\n\t\"DropDownList1Button18Highlight\",\n\t\"DropDownList1Button18Icon\",\n\t\"DropDownList1Button18NormalText\",\n\t\"DropDownList1Button19Check\",\n\t\"DropDownList1Button19ColorSwatchNormalTexture\",\n\t\"DropDownList1Button19ColorSwatchSwatchBg\",\n\t\"DropDownList1Button19Highlight\",\n\t\"DropDownList1Button19Icon\",\n\t\"DropDownList1Button19NormalText\",\n\t\"DropDownList1Button1Check\",\n\t\"DropDownList1Button1ColorSwatchNormalTexture\",\n\t\"DropDownList1Button1ColorSwatchSwatchBg\",\n\t\"DropDownList1Button1Highlight\",\n\t\"DropDownList1Button1Icon\",\n\t\"DropDownList1Button1NormalText\",\n\t\"DropDownList1Button20Check\",\n\t\"DropDownList1Button20ColorSwatchNormalTexture\",\n\t\"DropDownList1Button20ColorSwatchSwatchBg\",\n\t\"DropDownList1Button20Highlight\",\n\t\"DropDownList1Button20Icon\",\n\t\"DropDownList1Button20NormalText\",\n\t\"DropDownList1Button21Check\",\n\t\"DropDownList1Button21ColorSwatchNormalTexture\",\n\t\"DropDownList1Button21ColorSwatchSwatchBg\",\n\t\"DropDownList1Button21Highlight\",\n\t\"DropDownList1Button21Icon\",\n\t\"DropDownList1Button21NormalText\",\n\t\"DropDownList1Button22Check\",\n\t\"DropDownList1Button22ColorSwatchNormalTexture\",\n\t\"DropDownList1Button22ColorSwatchSwatchBg\",\n\t\"DropDownList1Button22Highlight\",\n\t\"DropDownList1Button22Icon\",\n\t\"DropDownList1Button22NormalText\",\n\t\"DropDownList1Button23Check\",\n\t\"DropDownList1Button23ColorSwatchNormalTexture\",\n\t\"DropDownList1Button23ColorSwatchSwatchBg\",\n\t\"DropDownList1Button23Highlight\",\n\t\"DropDownList1Button23Icon\",\n\t\"DropDownList1Button23NormalText\",\n\t\"DropDownList1Button24Check\",\n\t\"DropDownList1Button24ColorSwatchNormalTexture\",\n\t\"DropDownList1Button24ColorSwatchSwatchBg\",\n\t\"DropDownList1Button24Highlight\",\n\t\"DropDownList1Button24Icon\",\n\t\"DropDownList1Button24NormalText\",\n\t\"DropDownList1Button2Check\",\n\t\"DropDownList1Button2ColorSwatchNormalTexture\",\n\t\"DropDownList1Button2ColorSwatchSwatchBg\",\n\t\"DropDownList1Button2Highlight\",\n\t\"DropDownList1Button2Icon\",\n\t\"DropDownList1Button2NormalText\",\n\t\"DropDownList1Button3Check\",\n\t\"DropDownList1Button3ColorSwatchNormalTexture\",\n\t\"DropDownList1Button3ColorSwatchSwatchBg\",\n\t\"DropDownList1Button3Highlight\",\n\t\"DropDownList1Button3Icon\",\n\t\"DropDownList1Button3NormalText\",\n\t\"DropDownList1Button4Check\",\n\t\"DropDownList1Button4ColorSwatchNormalTexture\",\n\t\"DropDownList1Button4ColorSwatchSwatchBg\",\n\t\"DropDownList1Button4Highlight\",\n\t\"DropDownList1Button4Icon\",\n\t\"DropDownList1Button4NormalText\",\n\t\"DropDownList1Button5Check\",\n\t\"DropDownList1Button5ColorSwatchNormalTexture\",\n\t\"DropDownList1Button5ColorSwatchSwatchBg\",\n\t\"DropDownList1Button5Highlight\",\n\t\"DropDownList1Button5Icon\",\n\t\"DropDownList1Button5NormalText\",\n\t\"DropDownList1Button6Check\",\n\t\"DropDownList1Button6ColorSwatchNormalTexture\",\n\t\"DropDownList1Button6ColorSwatchSwatchBg\",\n\t\"DropDownList1Button6Highlight\",\n\t\"DropDownList1Button6Icon\",\n\t\"DropDownList1Button6NormalText\",\n\t\"DropDownList1Button7Check\",\n\t\"DropDownList1Button7ColorSwatchNormalTexture\",\n\t\"DropDownList1Button7ColorSwatchSwatchBg\",\n\t\"DropDownList1Button7Highlight\",\n\t\"DropDownList1Button7Icon\",\n\t\"DropDownList1Button7NormalText\",\n\t\"DropDownList1Button8Check\",\n\t\"DropDownList1Button8ColorSwatchNormalTexture\",\n\t\"DropDownList1Button8ColorSwatchSwatchBg\",\n\t\"DropDownList1Button8Highlight\",\n\t\"DropDownList1Button8Icon\",\n\t\"DropDownList1Button8NormalText\",\n\t\"DropDownList1Button9Check\",\n\t\"DropDownList1Button9ColorSwatchNormalTexture\",\n\t\"DropDownList1Button9ColorSwatchSwatchBg\",\n\t\"DropDownList1Button9Highlight\",\n\t\"DropDownList1Button9Icon\",\n\t\"DropDownList1Button9NormalText\",\n\t\"DropDownList2Button10Check\",\n\t\"DropDownList2Button10ColorSwatchNormalTexture\",\n\t\"DropDownList2Button10ColorSwatchSwatchBg\",\n\t\"DropDownList2Button10Highlight\",\n\t\"DropDownList2Button10Icon\",\n\t\"DropDownList2Button10NormalText\",\n\t\"DropDownList2Button11Check\",\n\t\"DropDownList2Button11ColorSwatchNormalTexture\",\n\t\"DropDownList2Button11ColorSwatchSwatchBg\",\n\t\"DropDownList2Button11Highlight\",\n\t\"DropDownList2Button11Icon\",\n\t\"DropDownList2Button11NormalText\",\n\t\"DropDownList2Button12Check\",\n\t\"DropDownList2Button12ColorSwatchNormalTexture\",\n\t\"DropDownList2Button12ColorSwatchSwatchBg\",\n\t\"DropDownList2Button12Highlight\",\n\t\"DropDownList2Button12Icon\",\n\t\"DropDownList2Button12NormalText\",\n\t\"DropDownList2Button13Check\",\n\t\"DropDownList2Button13ColorSwatchNormalTexture\",\n\t\"DropDownList2Button13ColorSwatchSwatchBg\",\n\t\"DropDownList2Button13Highlight\",\n\t\"DropDownList2Button13Icon\",\n\t\"DropDownList2Button13NormalText\",\n\t\"DropDownList2Button14Check\",\n\t\"DropDownList2Button14ColorSwatchNormalTexture\",\n\t\"DropDownList2Button14ColorSwatchSwatchBg\",\n\t\"DropDownList2Button14Highlight\",\n\t\"DropDownList2Button14Icon\",\n\t\"DropDownList2Button14NormalText\",\n\t\"DropDownList2Button15Check\",\n\t\"DropDownList2Button15ColorSwatchNormalTexture\",\n\t\"DropDownList2Button15ColorSwatchSwatchBg\",\n\t\"DropDownList2Button15Highlight\",\n\t\"DropDownList2Button15Icon\",\n\t\"DropDownList2Button15NormalText\",\n\t\"DropDownList2Button16Check\",\n\t\"DropDownList2Button16ColorSwatchNormalTexture\",\n\t\"DropDownList2Button16ColorSwatchSwatchBg\",\n\t\"DropDownList2Button16Highlight\",\n\t\"DropDownList2Button16Icon\",\n\t\"DropDownList2Button16NormalText\",\n\t\"DropDownList2Button17Check\",\n\t\"DropDownList2Button17ColorSwatchNormalTexture\",\n\t\"DropDownList2Button17ColorSwatchSwatchBg\",\n\t\"DropDownList2Button17Highlight\",\n\t\"DropDownList2Button17Icon\",\n\t\"DropDownList2Button17NormalText\",\n\t\"DropDownList2Button18Check\",\n\t\"DropDownList2Button18ColorSwatchNormalTexture\",\n\t\"DropDownList2Button18ColorSwatchSwatchBg\",\n\t\"DropDownList2Button18Highlight\",\n\t\"DropDownList2Button18Icon\",\n\t\"DropDownList2Button18NormalText\",\n\t\"DropDownList2Button19Check\",\n\t\"DropDownList2Button19ColorSwatchNormalTexture\",\n\t\"DropDownList2Button19ColorSwatchSwatchBg\",\n\t\"DropDownList2Button19Highlight\",\n\t\"DropDownList2Button19Icon\",\n\t\"DropDownList2Button19NormalText\",\n\t\"DropDownList2Button1Check\",\n\t\"DropDownList2Button1ColorSwatchNormalTexture\",\n\t\"DropDownList2Button1ColorSwatchSwatchBg\",\n\t\"DropDownList2Button1Highlight\",\n\t\"DropDownList2Button1Icon\",\n\t\"DropDownList2Button1NormalText\",\n\t\"DropDownList2Button20Check\",\n\t\"DropDownList2Button20ColorSwatchNormalTexture\",\n\t\"DropDownList2Button20ColorSwatchSwatchBg\",\n\t\"DropDownList2Button20Highlight\",\n\t\"DropDownList2Button20Icon\",\n\t\"DropDownList2Button20NormalText\",\n\t\"DropDownList2Button21Check\",\n\t\"DropDownList2Button21ColorSwatchNormalTexture\",\n\t\"DropDownList2Button21ColorSwatchSwatchBg\",\n\t\"DropDownList2Button21Highlight\",\n\t\"DropDownList2Button21Icon\",\n\t\"DropDownList2Button21NormalText\",\n\t\"DropDownList2Button22Check\",\n\t\"DropDownList2Button22ColorSwatchNormalTexture\",\n\t\"DropDownList2Button22ColorSwatchSwatchBg\",\n\t\"DropDownList2Button22Highlight\",\n\t\"DropDownList2Button22Icon\",\n\t\"DropDownList2Button22NormalText\",\n\t\"DropDownList2Button23Check\",\n\t\"DropDownList2Button23ColorSwatchNormalTexture\",\n\t\"DropDownList2Button23ColorSwatchSwatchBg\",\n\t\"DropDownList2Button23Highlight\",\n\t\"DropDownList2Button23Icon\",\n\t\"DropDownList2Button23NormalText\",\n\t\"DropDownList2Button24Check\",\n\t\"DropDownList2Button24ColorSwatchNormalTexture\",\n\t\"DropDownList2Button24ColorSwatchSwatchBg\",\n\t\"DropDownList2Button24Highlight\",\n\t\"DropDownList2Button24Icon\",\n\t\"DropDownList2Button24NormalText\",\n\t\"DropDownList2Button2Check\",\n\t\"DropDownList2Button2ColorSwatchNormalTexture\",\n\t\"DropDownList2Button2ColorSwatchSwatchBg\",\n\t\"DropDownList2Button2Highlight\",\n\t\"DropDownList2Button2Icon\",\n\t\"DropDownList2Button2NormalText\",\n\t\"DropDownList2Button3Check\",\n\t\"DropDownList2Button3ColorSwatchNormalTexture\",\n\t\"DropDownList2Button3ColorSwatchSwatchBg\",\n\t\"DropDownList2Button3Highlight\",\n\t\"DropDownList2Button3Icon\",\n\t\"DropDownList2Button3NormalText\",\n\t\"DropDownList2Button4Check\",\n\t\"DropDownList2Button4ColorSwatchNormalTexture\",\n\t\"DropDownList2Button4ColorSwatchSwatchBg\",\n\t\"DropDownList2Button4Highlight\",\n\t\"DropDownList2Button4Icon\",\n\t\"DropDownList2Button4NormalText\",\n\t\"DropDownList2Button5Check\",\n\t\"DropDownList2Button5ColorSwatchNormalTexture\",\n\t\"DropDownList2Button5ColorSwatchSwatchBg\",\n\t\"DropDownList2Button5Highlight\",\n\t\"DropDownList2Button5Icon\",\n\t\"DropDownList2Button5NormalText\",\n\t\"DropDownList2Button6Check\",\n\t\"DropDownList2Button6ColorSwatchNormalTexture\",\n\t\"DropDownList2Button6ColorSwatchSwatchBg\",\n\t\"DropDownList2Button6Highlight\",\n\t\"DropDownList2Button6Icon\",\n\t\"DropDownList2Button6NormalText\",\n\t\"DropDownList2Button7Check\",\n\t\"DropDownList2Button7ColorSwatchNormalTexture\",\n\t\"DropDownList2Button7ColorSwatchSwatchBg\",\n\t\"DropDownList2Button7Highlight\",\n\t\"DropDownList2Button7Icon\",\n\t\"DropDownList2Button7NormalText\",\n\t\"DropDownList2Button8Check\",\n\t\"DropDownList2Button8ColorSwatchNormalTexture\",\n\t\"DropDownList2Button8ColorSwatchSwatchBg\",\n\t\"DropDownList2Button8Highlight\",\n\t\"DropDownList2Button8Icon\",\n\t\"DropDownList2Button8NormalText\",\n\t\"DropDownList2Button9Check\",\n\t\"DropDownList2Button9ColorSwatchNormalTexture\",\n\t\"DropDownList2Button9ColorSwatchSwatchBg\",\n\t\"DropDownList2Button9Highlight\",\n\t\"DropDownList2Button9Icon\",\n\t\"DropDownList2Button9NormalText\",\n\t\"DungeonCompletionAlertFrame1AnimIn\",\n\t\"DungeonCompletionAlertFrame1DungeonTexture\",\n\t\"DungeonCompletionAlertFrame1GlowFrameGlow\",\n\t\"DungeonCompletionAlertFrame1GlowFrameGlowAnimIn\",\n\t\"DungeonCompletionAlertFrame1HeroicIcon\",\n\t\"DungeonCompletionAlertFrame1InstanceName\",\n\t\"DungeonCompletionAlertFrame1Reward1Border\",\n\t\"DungeonCompletionAlertFrame1Reward1Texture\",\n\t\"DungeonCompletionAlertFrame1Shine\",\n\t\"DungeonCompletionAlertFrame1ShineAnimIn\",\n\t\"DungeonCompletionAlertFrame1WaitAndAnimOut\",\n\t\"DurabilityChest\",\n\t\"DurabilityFeet\",\n\t\"DurabilityHands\",\n\t\"DurabilityHead\",\n\t\"DurabilityLegs\",\n\t\"DurabilityOffWeapon\",\n\t\"DurabilityRanged\",\n\t\"DurabilityShield\",\n\t\"DurabilityShoulders\",\n\t\"DurabilityWaist\",\n\t\"DurabilityWeapon\",\n\t\"DurabilityWrists\",\n\t\"EmoteMenuButton10ShortcutText\",\n\t\"EmoteMenuButton11ShortcutText\",\n\t\"EmoteMenuButton12ShortcutText\",\n\t\"EmoteMenuButton13ShortcutText\",\n\t\"EmoteMenuButton14ShortcutText\",\n\t\"EmoteMenuButton15ShortcutText\",\n\t\"EmoteMenuButton16ShortcutText\",\n\t\"EmoteMenuButton17ShortcutText\",\n\t\"EmoteMenuButton18ShortcutText\",\n\t\"EmoteMenuButton19ShortcutText\",\n\t\"EmoteMenuButton1ShortcutText\",\n\t\"EmoteMenuButton20ShortcutText\",\n\t\"EmoteMenuButton21ShortcutText\",\n\t\"EmoteMenuButton22ShortcutText\",\n\t\"EmoteMenuButton23ShortcutText\",\n\t\"EmoteMenuButton24ShortcutText\",\n\t\"EmoteMenuButton25ShortcutText\",\n\t\"EmoteMenuButton26ShortcutText\",\n\t\"EmoteMenuButton27ShortcutText\",\n\t\"EmoteMenuButton28ShortcutText\",\n\t\"EmoteMenuButton29ShortcutText\",\n\t\"EmoteMenuButton2ShortcutText\",\n\t\"EmoteMenuButton30ShortcutText\",\n\t\"EmoteMenuButton31ShortcutText\",\n\t\"EmoteMenuButton32ShortcutText\",\n\t\"EmoteMenuButton3ShortcutText\",\n\t\"EmoteMenuButton4ShortcutText\",\n\t\"EmoteMenuButton5ShortcutText\",\n\t\"EmoteMenuButton6ShortcutText\",\n\t\"EmoteMenuButton7ShortcutText\",\n\t\"EmoteMenuButton8ShortcutText\",\n\t\"EmoteMenuButton9ShortcutText\",\n\t\"EmptyQuestLogFrameBackgroundBottomLeft\",\n\t\"EmptyQuestLogFrameBackgroundBottomRight\",\n\t\"EmptyQuestLogFrameBackgroundTopLeft\",\n\t\"EmptyQuestLogFrameBackgroundTopRight\",\n\t\"ErrorFont\",\n\t\"ExhaustionLevelFillBar\",\n\t\"ExhaustionTickHighlight\",\n\t\"ExhaustionTickNormal\",\n\t\"FocusFontSmall\",\n\t\"FocusFrameBackground\",\n\t\"FocusFrameDropDownButtonDisabledTexture\",\n\t\"FocusFrameDropDownButtonHighlightTexture\",\n\t\"FocusFrameDropDownButtonNormalTexture\",\n\t\"FocusFrameDropDownButtonPushedTexture\",\n\t\"FocusFrameDropDownLeft\",\n\t\"FocusFrameDropDownMiddle\",\n\t\"FocusFrameDropDownRight\",\n\t\"FocusFrameDropDownText\",\n\t\"FocusFrameFlash\",\n\t\"FocusFrameNameBackground\",\n\t\"FocusFrameNumericalThreatBG\",\n\t\"FocusFrameNumericalThreatValue\",\n\t\"FocusFramePortrait\",\n\t\"FocusFrameSpellBarBorder\",\n\t\"FocusFrameSpellBarBorderShield\",\n\t\"FocusFrameSpellBarFlash\",\n\t\"FocusFrameSpellBarIcon\",\n\t\"FocusFrameSpellBarSpark\",\n\t\"FocusFrameSpellBarText\",\n\t\"FocusFrameTextureFrameDeadText\",\n\t\"FocusFrameTextureFrameHealthBarText\",\n\t\"FocusFrameTextureFrameHighLevelTexture\",\n\t\"FocusFrameTextureFrameLeaderIcon\",\n\t\"FocusFrameTextureFrameLevelText\",\n\t\"FocusFrameTextureFrameManaBarText\",\n\t\"FocusFrameTextureFrameName\",\n\t\"FocusFrameTextureFramePVPIcon\",\n\t\"FocusFrameTextureFrameRaidTargetIcon\",\n\t\"FocusFrameTextureFrameTexture\",\n\t\"FocusFrameToTBackground\",\n\t\"FocusFrameToTDebuff1Border\",\n\t\"FocusFrameToTDebuff1Icon\",\n\t\"FocusFrameToTDebuff2Border\",\n\t\"FocusFrameToTDebuff2Icon\",\n\t\"FocusFrameToTDebuff3Border\",\n\t\"FocusFrameToTDebuff3Icon\",\n\t\"FocusFrameToTDebuff4Border\",\n\t\"FocusFrameToTDebuff4Icon\",\n\t\"FocusFrameToTPortrait\",\n\t\"FocusFrameToTTextureFrameDeadText\",\n\t\"FocusFrameToTTextureFrameName\",\n\t\"FocusFrameToTTextureFrameTexture\",\n\t\"FolderPickerButton01Name\",\n\t\"FolderPickerHeader\",\n\t\"FramerateLabel\",\n\t\"FramerateText\",\n\t\"FriendsDropDownButtonDisabledTexture\",\n\t\"FriendsDropDownButtonHighlightTexture\",\n\t\"FriendsDropDownButtonNormalTexture\",\n\t\"FriendsDropDownButtonPushedTexture\",\n\t\"FriendsDropDownLeft\",\n\t\"FriendsDropDownMiddle\",\n\t\"FriendsDropDownRight\",\n\t\"FriendsDropDownText\",\n\t\"FriendsFont_Large\",\n\t\"FriendsFont_Normal\",\n\t\"FriendsFont_Small\",\n\t\"FriendsFont_UserText\",\n\t\"FriendsFrameAddFriendButtonLeft\",\n\t\"FriendsFrameAddFriendButtonMiddle\",\n\t\"FriendsFrameAddFriendButtonRight\",\n\t\"FriendsFrameAddFriendButtonText\",\n\t\"FriendsFrameBattlenetStatusInfoButtonTexture\",\n\t\"FriendsFrameBattlenetStatusText\",\n\t\"FriendsFrameBlockedInviteHeaderTitle\",\n\t\"FriendsFrameBlockedToonHeaderTitle\",\n\t\"FriendsFrameBottomLeft\",\n\t\"FriendsFrameBottomRight\",\n\t\"FriendsFrameBroadcastInputFill\",\n\t\"FriendsFrameBroadcastInputLeft\",\n\t\"FriendsFrameBroadcastInputMiddle\",\n\t\"FriendsFrameBroadcastInputRight\",\n\t\"FriendsFrameFriendsScrollFrameButton10Background\",\n\t\"FriendsFrameFriendsScrollFrameButton10BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton10BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton10CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton10GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton10Info\",\n\t\"FriendsFrameFriendsScrollFrameButton10Name\",\n\t\"FriendsFrameFriendsScrollFrameButton10Status\",\n\t\"FriendsFrameFriendsScrollFrameButton10SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton10SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton10SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton10SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton10SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton10SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton10SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton11Background\",\n\t\"FriendsFrameFriendsScrollFrameButton11BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton11BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton11CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton11GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton11Info\",\n\t\"FriendsFrameFriendsScrollFrameButton11Name\",\n\t\"FriendsFrameFriendsScrollFrameButton11Status\",\n\t\"FriendsFrameFriendsScrollFrameButton11SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton11SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton11SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton11SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton11SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton11SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton11SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton12Background\",\n\t\"FriendsFrameFriendsScrollFrameButton12BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton12BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton12CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton12GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton12Info\",\n\t\"FriendsFrameFriendsScrollFrameButton12Name\",\n\t\"FriendsFrameFriendsScrollFrameButton12Status\",\n\t\"FriendsFrameFriendsScrollFrameButton12SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton12SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton12SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton12SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton12SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton12SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton12SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton13Background\",\n\t\"FriendsFrameFriendsScrollFrameButton13BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton13BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton13CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton13GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton13Info\",\n\t\"FriendsFrameFriendsScrollFrameButton13Name\",\n\t\"FriendsFrameFriendsScrollFrameButton13Status\",\n\t\"FriendsFrameFriendsScrollFrameButton13SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton13SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton13SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton13SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton13SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton13SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton13SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton14Background\",\n\t\"FriendsFrameFriendsScrollFrameButton14BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton14BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton14CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton14GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton14Info\",\n\t\"FriendsFrameFriendsScrollFrameButton14Name\",\n\t\"FriendsFrameFriendsScrollFrameButton14Status\",\n\t\"FriendsFrameFriendsScrollFrameButton14SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton14SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton14SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton14SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton14SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton14SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton14SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton15Background\",\n\t\"FriendsFrameFriendsScrollFrameButton15BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton15BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton15CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton15GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton15Info\",\n\t\"FriendsFrameFriendsScrollFrameButton15Name\",\n\t\"FriendsFrameFriendsScrollFrameButton15Status\",\n\t\"FriendsFrameFriendsScrollFrameButton15SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton15SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton15SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton15SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton15SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton15SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton15SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton16Background\",\n\t\"FriendsFrameFriendsScrollFrameButton16BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton16BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton16CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton16GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton16Info\",\n\t\"FriendsFrameFriendsScrollFrameButton16Name\",\n\t\"FriendsFrameFriendsScrollFrameButton16Status\",\n\t\"FriendsFrameFriendsScrollFrameButton16SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton16SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton16SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton16SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton16SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton16SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton16SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton17Background\",\n\t\"FriendsFrameFriendsScrollFrameButton17BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton17BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton17CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton17GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton17Info\",\n\t\"FriendsFrameFriendsScrollFrameButton17Name\",\n\t\"FriendsFrameFriendsScrollFrameButton17Status\",\n\t\"FriendsFrameFriendsScrollFrameButton17SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton17SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton17SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton17SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton17SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton17SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton17SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton18Background\",\n\t\"FriendsFrameFriendsScrollFrameButton18BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton18BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton18CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton18GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton18Info\",\n\t\"FriendsFrameFriendsScrollFrameButton18Name\",\n\t\"FriendsFrameFriendsScrollFrameButton18Status\",\n\t\"FriendsFrameFriendsScrollFrameButton18SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton18SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton18SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton18SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton18SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton18SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton18SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton19Background\",\n\t\"FriendsFrameFriendsScrollFrameButton19BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton19BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton19CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton19GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton19Info\",\n\t\"FriendsFrameFriendsScrollFrameButton19Name\",\n\t\"FriendsFrameFriendsScrollFrameButton19Status\",\n\t\"FriendsFrameFriendsScrollFrameButton19SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton19SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton19SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton19SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton19SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton19SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton19SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton1Background\",\n\t\"FriendsFrameFriendsScrollFrameButton1BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton1BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton1CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton1GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton1Info\",\n\t\"FriendsFrameFriendsScrollFrameButton1Name\",\n\t\"FriendsFrameFriendsScrollFrameButton1Status\",\n\t\"FriendsFrameFriendsScrollFrameButton1SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton1SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton1SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton1SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton1SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton1SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton1SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton20Background\",\n\t\"FriendsFrameFriendsScrollFrameButton20BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton20BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton20CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton20GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton20Info\",\n\t\"FriendsFrameFriendsScrollFrameButton20Name\",\n\t\"FriendsFrameFriendsScrollFrameButton20Status\",\n\t\"FriendsFrameFriendsScrollFrameButton20SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton20SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton20SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton20SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton20SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton20SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton20SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton21Background\",\n\t\"FriendsFrameFriendsScrollFrameButton21BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton21BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton21CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton21GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton21Info\",\n\t\"FriendsFrameFriendsScrollFrameButton21Name\",\n\t\"FriendsFrameFriendsScrollFrameButton21Status\",\n\t\"FriendsFrameFriendsScrollFrameButton21SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton21SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton21SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton21SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton21SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton21SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton21SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton22Background\",\n\t\"FriendsFrameFriendsScrollFrameButton22BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton22BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton22CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton22GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton22Info\",\n\t\"FriendsFrameFriendsScrollFrameButton22Name\",\n\t\"FriendsFrameFriendsScrollFrameButton22Status\",\n\t\"FriendsFrameFriendsScrollFrameButton22SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton22SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton22SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton22SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton22SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton22SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton22SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton23Background\",\n\t\"FriendsFrameFriendsScrollFrameButton23BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton23BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton23CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton23GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton23Info\",\n\t\"FriendsFrameFriendsScrollFrameButton23Name\",\n\t\"FriendsFrameFriendsScrollFrameButton23Status\",\n\t\"FriendsFrameFriendsScrollFrameButton23SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton23SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton23SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton23SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton23SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton23SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton23SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton2Background\",\n\t\"FriendsFrameFriendsScrollFrameButton2BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton2BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton2CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton2GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton2Info\",\n\t\"FriendsFrameFriendsScrollFrameButton2Name\",\n\t\"FriendsFrameFriendsScrollFrameButton2Status\",\n\t\"FriendsFrameFriendsScrollFrameButton2SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton2SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton2SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton2SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton2SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton2SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton2SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton3Background\",\n\t\"FriendsFrameFriendsScrollFrameButton3BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton3BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton3CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton3GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton3Info\",\n\t\"FriendsFrameFriendsScrollFrameButton3Name\",\n\t\"FriendsFrameFriendsScrollFrameButton3Status\",\n\t\"FriendsFrameFriendsScrollFrameButton3SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton3SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton3SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton3SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton3SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton3SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton3SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton4Background\",\n\t\"FriendsFrameFriendsScrollFrameButton4BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton4BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton4CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton4GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton4Info\",\n\t\"FriendsFrameFriendsScrollFrameButton4Name\",\n\t\"FriendsFrameFriendsScrollFrameButton4Status\",\n\t\"FriendsFrameFriendsScrollFrameButton4SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton4SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton4SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton4SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton4SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton4SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton4SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton5Background\",\n\t\"FriendsFrameFriendsScrollFrameButton5BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton5BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton5CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton5GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton5Info\",\n\t\"FriendsFrameFriendsScrollFrameButton5Name\",\n\t\"FriendsFrameFriendsScrollFrameButton5Status\",\n\t\"FriendsFrameFriendsScrollFrameButton5SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton5SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton5SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton5SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton5SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton5SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton5SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton6Background\",\n\t\"FriendsFrameFriendsScrollFrameButton6BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton6BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton6CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton6GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton6Info\",\n\t\"FriendsFrameFriendsScrollFrameButton6Name\",\n\t\"FriendsFrameFriendsScrollFrameButton6Status\",\n\t\"FriendsFrameFriendsScrollFrameButton6SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton6SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton6SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton6SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton6SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton6SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton6SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton7Background\",\n\t\"FriendsFrameFriendsScrollFrameButton7BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton7BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton7CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton7GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton7Info\",\n\t\"FriendsFrameFriendsScrollFrameButton7Name\",\n\t\"FriendsFrameFriendsScrollFrameButton7Status\",\n\t\"FriendsFrameFriendsScrollFrameButton7SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton7SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton7SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton7SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton7SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton7SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton7SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton8Background\",\n\t\"FriendsFrameFriendsScrollFrameButton8BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton8BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton8CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton8GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton8Info\",\n\t\"FriendsFrameFriendsScrollFrameButton8Name\",\n\t\"FriendsFrameFriendsScrollFrameButton8Status\",\n\t\"FriendsFrameFriendsScrollFrameButton8SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton8SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton8SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton8SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton8SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton8SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton8SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameButton9Background\",\n\t\"FriendsFrameFriendsScrollFrameButton9BroadcastIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton9BroadcastMessage\",\n\t\"FriendsFrameFriendsScrollFrameButton9CompactInfo\",\n\t\"FriendsFrameFriendsScrollFrameButton9GameIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton9Info\",\n\t\"FriendsFrameFriendsScrollFrameButton9Name\",\n\t\"FriendsFrameFriendsScrollFrameButton9Status\",\n\t\"FriendsFrameFriendsScrollFrameButton9SummonButtonBorder\",\n\t\"FriendsFrameFriendsScrollFrameButton9SummonButtonCount\",\n\t\"FriendsFrameFriendsScrollFrameButton9SummonButtonFlash\",\n\t\"FriendsFrameFriendsScrollFrameButton9SummonButtonHotKey\",\n\t\"FriendsFrameFriendsScrollFrameButton9SummonButtonIcon\",\n\t\"FriendsFrameFriendsScrollFrameButton9SummonButtonName\",\n\t\"FriendsFrameFriendsScrollFrameButton9SummonButtonNormalTexture\",\n\t\"FriendsFrameFriendsScrollFrameScrollBarThumbTexture\",\n\t\"FriendsFrameIgnoreButton10Name\",\n\t\"FriendsFrameIgnoreButton11Name\",\n\t\"FriendsFrameIgnoreButton12Name\",\n\t\"FriendsFrameIgnoreButton13Name\",\n\t\"FriendsFrameIgnoreButton14Name\",\n\t\"FriendsFrameIgnoreButton15Name\",\n\t\"FriendsFrameIgnoreButton16Name\",\n\t\"FriendsFrameIgnoreButton17Name\",\n\t\"FriendsFrameIgnoreButton18Name\",\n\t\"FriendsFrameIgnoreButton19Name\",\n\t\"FriendsFrameIgnoreButton1Name\",\n\t\"FriendsFrameIgnoreButton2Name\",\n\t\"FriendsFrameIgnoreButton3Name\",\n\t\"FriendsFrameIgnoreButton4Name\",\n\t\"FriendsFrameIgnoreButton5Name\",\n\t\"FriendsFrameIgnoreButton6Name\",\n\t\"FriendsFrameIgnoreButton7Name\",\n\t\"FriendsFrameIgnoreButton8Name\",\n\t\"FriendsFrameIgnoreButton9Name\",\n\t\"FriendsFrameIgnorePlayerButtonLeft\",\n\t\"FriendsFrameIgnorePlayerButtonMiddle\",\n\t\"FriendsFrameIgnorePlayerButtonRight\",\n\t\"FriendsFrameIgnorePlayerButtonText\",\n\t\"FriendsFrameIgnoreScrollFrameScrollBarThumbTexture\",\n\t\"FriendsFrameIgnoredHeaderTitle\",\n\t\"FriendsFrameMutePlayerButtonLeft\",\n\t\"FriendsFrameMutePlayerButtonMiddle\",\n\t\"FriendsFrameMutePlayerButtonRight\",\n\t\"FriendsFrameMutePlayerButtonText\",\n\t\"FriendsFrameMutedHeaderTitle\",\n\t\"FriendsFrameOfflineHeader\",\n\t\"FriendsFramePendingButton1AcceptButtonLeft\",\n\t\"FriendsFramePendingButton1AcceptButtonMiddle\",\n\t\"FriendsFramePendingButton1AcceptButtonRight\",\n\t\"FriendsFramePendingButton1AcceptButtonText\",\n\t\"FriendsFramePendingButton1Background\",\n\t\"FriendsFramePendingButton1DeclineButtonLeft\",\n\t\"FriendsFramePendingButton1DeclineButtonMiddle\",\n\t\"FriendsFramePendingButton1DeclineButtonRight\",\n\t\"FriendsFramePendingButton1DeclineButtonText\",\n\t\"FriendsFramePendingButton1Message\",\n\t\"FriendsFramePendingButton1Name\",\n\t\"FriendsFramePendingButton1Sent\",\n\t\"FriendsFramePendingButton2AcceptButtonLeft\",\n\t\"FriendsFramePendingButton2AcceptButtonMiddle\",\n\t\"FriendsFramePendingButton2AcceptButtonRight\",\n\t\"FriendsFramePendingButton2AcceptButtonText\",\n\t\"FriendsFramePendingButton2Background\",\n\t\"FriendsFramePendingButton2DeclineButtonLeft\",\n\t\"FriendsFramePendingButton2DeclineButtonMiddle\",\n\t\"FriendsFramePendingButton2DeclineButtonRight\",\n\t\"FriendsFramePendingButton2DeclineButtonText\",\n\t\"FriendsFramePendingButton2Message\",\n\t\"FriendsFramePendingButton2Name\",\n\t\"FriendsFramePendingButton2Sent\",\n\t\"FriendsFramePendingButton3AcceptButtonLeft\",\n\t\"FriendsFramePendingButton3AcceptButtonMiddle\",\n\t\"FriendsFramePendingButton3AcceptButtonRight\",\n\t\"FriendsFramePendingButton3AcceptButtonText\",\n\t\"FriendsFramePendingButton3Background\",\n\t\"FriendsFramePendingButton3DeclineButtonLeft\",\n\t\"FriendsFramePendingButton3DeclineButtonMiddle\",\n\t\"FriendsFramePendingButton3DeclineButtonRight\",\n\t\"FriendsFramePendingButton3DeclineButtonText\",\n\t\"FriendsFramePendingButton3Message\",\n\t\"FriendsFramePendingButton3Name\",\n\t\"FriendsFramePendingButton3Sent\",\n\t\"FriendsFramePendingButton4AcceptButtonLeft\",\n\t\"FriendsFramePendingButton4AcceptButtonMiddle\",\n\t\"FriendsFramePendingButton4AcceptButtonRight\",\n\t\"FriendsFramePendingButton4AcceptButtonText\",\n\t\"FriendsFramePendingButton4Background\",\n\t\"FriendsFramePendingButton4DeclineButtonLeft\",\n\t\"FriendsFramePendingButton4DeclineButtonMiddle\",\n\t\"FriendsFramePendingButton4DeclineButtonRight\",\n\t\"FriendsFramePendingButton4DeclineButtonText\",\n\t\"FriendsFramePendingButton4Message\",\n\t\"FriendsFramePendingButton4Name\",\n\t\"FriendsFramePendingButton4Sent\",\n\t\"FriendsFramePendingScrollFrameScrollBarThumbTexture\",\n\t\"FriendsFrameSendMessageButtonLeft\",\n\t\"FriendsFrameSendMessageButtonMiddle\",\n\t\"FriendsFrameSendMessageButtonRight\",\n\t\"FriendsFrameSendMessageButtonText\",\n\t\"FriendsFrameStatusDropDownButtonDisabledTexture\",\n\t\"FriendsFrameStatusDropDownButtonHighlightTexture\",\n\t\"FriendsFrameStatusDropDownButtonNormalTexture\",\n\t\"FriendsFrameStatusDropDownButtonPushedTexture\",\n\t\"FriendsFrameStatusDropDownLeft\",\n\t\"FriendsFrameStatusDropDownMiddle\",\n\t\"FriendsFrameStatusDropDownRight\",\n\t\"FriendsFrameStatusDropDownStatus\",\n\t\"FriendsFrameStatusDropDownText\",\n\t\"FriendsFrameTab1HighlightTexture\",\n\t\"FriendsFrameTab1Left\",\n\t\"FriendsFrameTab1LeftDisabled\",\n\t\"FriendsFrameTab1Middle\",\n\t\"FriendsFrameTab1MiddleDisabled\",\n\t\"FriendsFrameTab1Right\",\n\t\"FriendsFrameTab1RightDisabled\",\n\t\"FriendsFrameTab1Text\",\n\t\"FriendsFrameTab2HighlightTexture\",\n\t\"FriendsFrameTab2Left\",\n\t\"FriendsFrameTab2LeftDisabled\",\n\t\"FriendsFrameTab2Middle\",\n\t\"FriendsFrameTab2MiddleDisabled\",\n\t\"FriendsFrameTab2Right\",\n\t\"FriendsFrameTab2RightDisabled\",\n\t\"FriendsFrameTab2Text\",\n\t\"FriendsFrameTab3HighlightTexture\",\n\t\"FriendsFrameTab3Left\",\n\t\"FriendsFrameTab3LeftDisabled\",\n\t\"FriendsFrameTab3Middle\",\n\t\"FriendsFrameTab3MiddleDisabled\",\n\t\"FriendsFrameTab3Right\",\n\t\"FriendsFrameTab3RightDisabled\",\n\t\"FriendsFrameTab3Text\",\n\t\"FriendsFrameTab4HighlightTexture\",\n\t\"FriendsFrameTab4Left\",\n\t\"FriendsFrameTab4LeftDisabled\",\n\t\"FriendsFrameTab4Middle\",\n\t\"FriendsFrameTab4MiddleDisabled\",\n\t\"FriendsFrameTab4Right\",\n\t\"FriendsFrameTab4RightDisabled\",\n\t\"FriendsFrameTab4Text\",\n\t\"FriendsFrameTab5HighlightTexture\",\n\t\"FriendsFrameTab5Left\",\n\t\"FriendsFrameTab5LeftDisabled\",\n\t\"FriendsFrameTab5Middle\",\n\t\"FriendsFrameTab5MiddleDisabled\",\n\t\"FriendsFrameTab5Right\",\n\t\"FriendsFrameTab5RightDisabled\",\n\t\"FriendsFrameTab5Text\",\n\t\"FriendsFrameTitleText\",\n\t\"FriendsFrameTopLeft\",\n\t\"FriendsFrameTopRight\",\n\t\"FriendsFrameUnsquelchButtonLeft\",\n\t\"FriendsFrameUnsquelchButtonMiddle\",\n\t\"FriendsFrameUnsquelchButtonRight\",\n\t\"FriendsFrameUnsquelchButtonText\",\n\t\"FriendsFriendsButton10Name\",\n\t\"FriendsFriendsButton11Name\",\n\t\"FriendsFriendsButton1Name\",\n\t\"FriendsFriendsButton2Name\",\n\t\"FriendsFriendsButton3Name\",\n\t\"FriendsFriendsButton4Name\",\n\t\"FriendsFriendsButton5Name\",\n\t\"FriendsFriendsButton6Name\",\n\t\"FriendsFriendsButton7Name\",\n\t\"FriendsFriendsButton8Name\",\n\t\"FriendsFriendsButton9Name\",\n\t\"FriendsFriendsCloseButtonLeft\",\n\t\"FriendsFriendsCloseButtonMiddle\",\n\t\"FriendsFriendsCloseButtonRight\",\n\t\"FriendsFriendsCloseButtonText\",\n\t\"FriendsFriendsFrameDropDownButtonDisabledTexture\",\n\t\"FriendsFriendsFrameDropDownButtonHighlightTexture\",\n\t\"FriendsFriendsFrameDropDownButtonNormalTexture\",\n\t\"FriendsFriendsFrameDropDownButtonPushedTexture\",\n\t\"FriendsFriendsFrameDropDownLeft\",\n\t\"FriendsFriendsFrameDropDownMiddle\",\n\t\"FriendsFriendsFrameDropDownRight\",\n\t\"FriendsFriendsFrameDropDownText\",\n\t\"FriendsFriendsFrameTitle\",\n\t\"FriendsFriendsNoteEditBoxFill\",\n\t\"FriendsFriendsNoteFrameBottom\",\n\t\"FriendsFriendsNoteFrameBottomLeft\",\n\t\"FriendsFriendsNoteFrameBottomRight\",\n\t\"FriendsFriendsNoteFrameLeft\",\n\t\"FriendsFriendsNoteFrameMiddle\",\n\t\"FriendsFriendsNoteFrameRight\",\n\t\"FriendsFriendsNoteFrameScrollFrameScrollBarThumbTexture\",\n\t\"FriendsFriendsNoteFrameTop\",\n\t\"FriendsFriendsNoteFrameTopLeft\",\n\t\"FriendsFriendsNoteFrameTopRight\",\n\t\"FriendsFriendsScrollFrameScrollBarThumbTexture\",\n\t\"FriendsFriendsSendRequestButtonLeft\",\n\t\"FriendsFriendsSendRequestButtonMiddle\",\n\t\"FriendsFriendsSendRequestButtonRight\",\n\t\"FriendsFriendsSendRequestButtonText\",\n\t\"FriendsMicroButtonCount\",\n\t\"FriendsTabHeaderTab1HighlightTexture\",\n\t\"FriendsTabHeaderTab1Left\",\n\t\"FriendsTabHeaderTab1LeftDisabled\",\n\t\"FriendsTabHeaderTab1Middle\",\n\t\"FriendsTabHeaderTab1MiddleDisabled\",\n\t\"FriendsTabHeaderTab1Right\",\n\t\"FriendsTabHeaderTab1RightDisabled\",\n\t\"FriendsTabHeaderTab1Text\",\n\t\"FriendsTabHeaderTab2HighlightTexture\",\n\t\"FriendsTabHeaderTab2Left\",\n\t\"FriendsTabHeaderTab2LeftDisabled\",\n\t\"FriendsTabHeaderTab2Middle\",\n\t\"FriendsTabHeaderTab2MiddleDisabled\",\n\t\"FriendsTabHeaderTab2Right\",\n\t\"FriendsTabHeaderTab2RightDisabled\",\n\t\"FriendsTabHeaderTab2Text\",\n\t\"FriendsTabHeaderTab3HighlightTexture\",\n\t\"FriendsTabHeaderTab3Left\",\n\t\"FriendsTabHeaderTab3LeftDisabled\",\n\t\"FriendsTabHeaderTab3Middle\",\n\t\"FriendsTabHeaderTab3MiddleDisabled\",\n\t\"FriendsTabHeaderTab3Right\",\n\t\"FriendsTabHeaderTab3RightDisabled\",\n\t\"FriendsTabHeaderTab3Text\",\n\t\"FriendsTooltipBroadcastIcon\",\n\t\"FriendsTooltipBroadcastText\",\n\t\"FriendsTooltipHeader\",\n\t\"FriendsTooltipLastOnline\",\n\t\"FriendsTooltipNoteIcon\",\n\t\"FriendsTooltipNoteText\",\n\t\"FriendsTooltipOtherToons\",\n\t\"FriendsTooltipToon1Info\",\n\t\"FriendsTooltipToon1Name\",\n\t\"FriendsTooltipToon2Info\",\n\t\"FriendsTooltipToon2Name\",\n\t\"FriendsTooltipToon3Info\",\n\t\"FriendsTooltipToon3Name\",\n\t\"FriendsTooltipToon4Info\",\n\t\"FriendsTooltipToon4Name\",\n\t\"FriendsTooltipToon5Info\",\n\t\"FriendsTooltipToon5Name\",\n\t\"FriendsTooltipToonMany\",\n\t\"GMChatOpenLogText\",\n\t\"GameFontBlack\",\n\t\"GameFontBlackMedium\",\n\t\"GameFontBlackSmall\",\n\t\"GameFontBlackTiny\",\n\t\"GameFontDarkGraySmall\",\n\t\"GameFontDisable\",\n\t\"GameFontDisableLarge\",\n\t\"GameFontDisableLeft\",\n\t\"GameFontDisableSmall\",\n\t\"GameFontDisableSmallLeft\",\n\t\"GameFontGreen\",\n\t\"GameFontGreenLarge\",\n\t\"GameFontGreenSmall\",\n\t\"GameFontHighlight\",\n\t\"GameFontHighlightCenter\",\n\t\"GameFontHighlightExtraSmall\",\n\t\"GameFontHighlightExtraSmallLeft\",\n\t\"GameFontHighlightExtraSmallLeftTop\",\n\t\"GameFontHighlightLarge\",\n\t\"GameFontHighlightLeft\",\n\t\"GameFontHighlightMedium\",\n\t\"GameFontHighlightRight\",\n\t\"GameFontHighlightSmall\",\n\t\"GameFontHighlightSmallLeft\",\n\t\"GameFontHighlightSmallLeftTop\",\n\t\"GameFontHighlightSmallOutline\",\n\t\"GameFontHighlightSmallRight\",\n\t\"GameFontNormal\",\n\t\"GameFontNormalCenter\",\n\t\"GameFontNormalHuge\",\n\t\"GameFontNormalHugeBlack\",\n\t\"GameFontNormalLarge\",\n\t\"GameFontNormalLargeLeft\",\n\t\"GameFontNormalLargeLeftTop\",\n\t\"GameFontNormalLeft\",\n\t\"GameFontNormalLeftBottom\",\n\t\"GameFontNormalLeftGreen\",\n\t\"GameFontNormalLeftGrey\",\n\t\"GameFontNormalLeftLightGreen\",\n\t\"GameFontNormalLeftOrange\",\n\t\"GameFontNormalLeftRed\",\n\t\"GameFontNormalLeftYellow\",\n\t\"GameFontNormalMed3\",\n\t\"GameFontNormalRight\",\n\t\"GameFontNormalSmall\",\n\t\"GameFontNormalSmallLeft\",\n\t\"GameFontRed\",\n\t\"GameFontRedLarge\",\n\t\"GameFontRedSmall\",\n\t\"GameFontWhite\",\n\t\"GameFontWhiteSmall\",\n\t\"GameFontWhiteTiny\",\n\t\"GameMenuButtonContinueText\",\n\t\"GameMenuButtonKeybindingsText\",\n\t\"GameMenuButtonLogoutText\",\n\t\"GameMenuButtonMacOptionsText\",\n\t\"GameMenuButtonMacrosText\",\n\t\"GameMenuButtonOptionsText\",\n\t\"GameMenuButtonQuitText\",\n\t\"GameMenuButtonRatingsText\",\n\t\"GameMenuButtonSoundOptionsText\",\n\t\"GameMenuButtonUIOptionsText\",\n\t\"GameMenuFrameHeader\",\n\t\"GameTimeCalendarEventAlarmTexture\",\n\t\"GameTimeCalendarInvitesGlow\",\n\t\"GameTimeCalendarInvitesTexture\",\n\t\"GameTimeTexture\",\n\t\"GameTooltipHeader\",\n\t\"GameTooltipHeaderText\",\n\t\"GameTooltipStatusBarTexture\",\n\t\"GameTooltipText\",\n\t\"GameTooltipTextLeft1\",\n\t\"GameTooltipTextLeft2\",\n\t\"GameTooltipTextLeft3\",\n\t\"GameTooltipTextLeft4\",\n\t\"GameTooltipTextLeft5\",\n\t\"GameTooltipTextLeft6\",\n\t\"GameTooltipTextLeft7\",\n\t\"GameTooltipTextLeft8\",\n\t\"GameTooltipTextLeft9\",\n\t\"GameTooltipTextRight1\",\n\t\"GameTooltipTextRight2\",\n\t\"GameTooltipTextRight3\",\n\t\"GameTooltipTextRight4\",\n\t\"GameTooltipTextRight5\",\n\t\"GameTooltipTextRight6\",\n\t\"GameTooltipTextRight7\",\n\t\"GameTooltipTextRight8\",\n\t\"GameTooltipTextRight9\",\n\t\"GameTooltipTextSmall\",\n\t\"GameTooltipTexture1\",\n\t\"GameTooltipTexture10\",\n\t\"GameTooltipTexture2\",\n\t\"GameTooltipTexture3\",\n\t\"GameTooltipTexture4\",\n\t\"GameTooltipTexture5\",\n\t\"GameTooltipTexture6\",\n\t\"GameTooltipTexture7\",\n\t\"GameTooltipTexture8\",\n\t\"GameTooltipTexture9\",\n\t\"GearManagerDialogBottom\",\n\t\"GearManagerDialogBottomLeft\",\n\t\"GearManagerDialogBottomRight\",\n\t\"GearManagerDialogDeleteSetText\",\n\t\"GearManagerDialogDialogBG\",\n\t\"GearManagerDialogEquipSetText\",\n\t\"GearManagerDialogLeft\",\n\t\"GearManagerDialogPopupButton10Icon\",\n\t\"GearManagerDialogPopupButton10Name\",\n\t\"GearManagerDialogPopupButton11Icon\",\n\t\"GearManagerDialogPopupButton11Name\",\n\t\"GearManagerDialogPopupButton12Icon\",\n\t\"GearManagerDialogPopupButton12Name\",\n\t\"GearManagerDialogPopupButton13Icon\",\n\t\"GearManagerDialogPopupButton13Name\",\n\t\"GearManagerDialogPopupButton14Icon\",\n\t\"GearManagerDialogPopupButton14Name\",\n\t\"GearManagerDialogPopupButton15Icon\",\n\t\"GearManagerDialogPopupButton15Name\",\n\t\"GearManagerDialogPopupButton1Icon\",\n\t\"GearManagerDialogPopupButton1Name\",\n\t\"GearManagerDialogPopupButton2Icon\",\n\t\"GearManagerDialogPopupButton2Name\",\n\t\"GearManagerDialogPopupButton3Icon\",\n\t\"GearManagerDialogPopupButton3Name\",\n\t\"GearManagerDialogPopupButton4Icon\",\n\t\"GearManagerDialogPopupButton4Name\",\n\t\"GearManagerDialogPopupButton5Icon\",\n\t\"GearManagerDialogPopupButton5Name\",\n\t\"GearManagerDialogPopupButton6Icon\",\n\t\"GearManagerDialogPopupButton6Name\",\n\t\"GearManagerDialogPopupButton7Icon\",\n\t\"GearManagerDialogPopupButton7Name\",\n\t\"GearManagerDialogPopupButton8Icon\",\n\t\"GearManagerDialogPopupButton8Name\",\n\t\"GearManagerDialogPopupButton9Icon\",\n\t\"GearManagerDialogPopupButton9Name\",\n\t\"GearManagerDialogPopupCancelText\",\n\t\"GearManagerDialogPopupEditBoxLeft\",\n\t\"GearManagerDialogPopupEditBoxMiddle\",\n\t\"GearManagerDialogPopupEditBoxRight\",\n\t\"GearManagerDialogPopupOkayText\",\n\t\"GearManagerDialogPopupScrollFrameScrollBarThumbTexture\",\n\t\"GearManagerDialogRight\",\n\t\"GearManagerDialogSaveSetText\",\n\t\"GearManagerDialogTitleBG\",\n\t\"GearManagerDialogTop\",\n\t\"GearManagerDialogTopLeft\",\n\t\"GearManagerDialogTopRight\",\n\t\"GearSetButton10Icon\",\n\t\"GearSetButton10Name\",\n\t\"GearSetButton1Icon\",\n\t\"GearSetButton1Name\",\n\t\"GearSetButton2Icon\",\n\t\"GearSetButton2Name\",\n\t\"GearSetButton3Icon\",\n\t\"GearSetButton3Name\",\n\t\"GearSetButton4Icon\",\n\t\"GearSetButton4Name\",\n\t\"GearSetButton5Icon\",\n\t\"GearSetButton5Name\",\n\t\"GearSetButton6Icon\",\n\t\"GearSetButton6Name\",\n\t\"GearSetButton7Icon\",\n\t\"GearSetButton7Name\",\n\t\"GearSetButton8Icon\",\n\t\"GearSetButton8Name\",\n\t\"GearSetButton9Icon\",\n\t\"GearSetButton9Name\",\n\t\"GeneralDockManagerInsertHighlight\",\n\t\"GeneralDockManagerOverflowButtonListNumTabs\",\n\t\"GossipFrameGreetingGoodbyeButtonText\",\n\t\"GossipFrameGreetingPanelMaterialBotLeft\",\n\t\"GossipFrameGreetingPanelMaterialBotRight\",\n\t\"GossipFrameGreetingPanelMaterialTopLeft\",\n\t\"GossipFrameGreetingPanelMaterialTopRight\",\n\t\"GossipFrameNpcNameText\",\n\t\"GossipFramePortrait\",\n\t\"GossipGreetingScrollFrameScrollBarThumbTexture\",\n\t\"GossipGreetingText\",\n\t\"GossipTitleButton10GossipIcon\",\n\t\"GossipTitleButton11GossipIcon\",\n\t\"GossipTitleButton12GossipIcon\",\n\t\"GossipTitleButton13GossipIcon\",\n\t\"GossipTitleButton14GossipIcon\",\n\t\"GossipTitleButton15GossipIcon\",\n\t\"GossipTitleButton16GossipIcon\",\n\t\"GossipTitleButton17GossipIcon\",\n\t\"GossipTitleButton18GossipIcon\",\n\t\"GossipTitleButton19GossipIcon\",\n\t\"GossipTitleButton1GossipIcon\",\n\t\"GossipTitleButton20GossipIcon\",\n\t\"GossipTitleButton21GossipIcon\",\n\t\"GossipTitleButton22GossipIcon\",\n\t\"GossipTitleButton23GossipIcon\",\n\t\"GossipTitleButton24GossipIcon\",\n\t\"GossipTitleButton25GossipIcon\",\n\t\"GossipTitleButton26GossipIcon\",\n\t\"GossipTitleButton27GossipIcon\",\n\t\"GossipTitleButton28GossipIcon\",\n\t\"GossipTitleButton29GossipIcon\",\n\t\"GossipTitleButton2GossipIcon\",\n\t\"GossipTitleButton30GossipIcon\",\n\t\"GossipTitleButton31GossipIcon\",\n\t\"GossipTitleButton32GossipIcon\",\n\t\"GossipTitleButton3GossipIcon\",\n\t\"GossipTitleButton4GossipIcon\",\n\t\"GossipTitleButton5GossipIcon\",\n\t\"GossipTitleButton6GossipIcon\",\n\t\"GossipTitleButton7GossipIcon\",\n\t\"GossipTitleButton8GossipIcon\",\n\t\"GossipTitleButton9GossipIcon\",\n\t\"GreetingText\",\n\t\"GroupLootDropDownButtonDisabledTexture\",\n\t\"GroupLootDropDownButtonHighlightTexture\",\n\t\"GroupLootDropDownButtonNormalTexture\",\n\t\"GroupLootDropDownButtonPushedTexture\",\n\t\"GroupLootDropDownLeft\",\n\t\"GroupLootDropDownMiddle\",\n\t\"GroupLootDropDownRight\",\n\t\"GroupLootDropDownText\",\n\t\"GroupLootFrame1Corner\",\n\t\"GroupLootFrame1Decoration\",\n\t\"GroupLootFrame1IconFrameCount\",\n\t\"GroupLootFrame1IconFrameIcon\",\n\t\"GroupLootFrame1Name\",\n\t\"GroupLootFrame1NameFrame\",\n\t\"GroupLootFrame1SlotTexture\",\n\t\"GroupLootFrame1TimerBar\",\n\t\"GroupLootFrame2Corner\",\n\t\"GroupLootFrame2Decoration\",\n\t\"GroupLootFrame2IconFrameCount\",\n\t\"GroupLootFrame2IconFrameIcon\",\n\t\"GroupLootFrame2Name\",\n\t\"GroupLootFrame2NameFrame\",\n\t\"GroupLootFrame2SlotTexture\",\n\t\"GroupLootFrame2TimerBar\",\n\t\"GroupLootFrame3Corner\",\n\t\"GroupLootFrame3Decoration\",\n\t\"GroupLootFrame3IconFrameCount\",\n\t\"GroupLootFrame3IconFrameIcon\",\n\t\"GroupLootFrame3Name\",\n\t\"GroupLootFrame3NameFrame\",\n\t\"GroupLootFrame3SlotTexture\",\n\t\"GroupLootFrame3TimerBar\",\n\t\"GroupLootFrame4Corner\",\n\t\"GroupLootFrame4Decoration\",\n\t\"GroupLootFrame4IconFrameCount\",\n\t\"GroupLootFrame4IconFrameIcon\",\n\t\"GroupLootFrame4Name\",\n\t\"GroupLootFrame4NameFrame\",\n\t\"GroupLootFrame4SlotTexture\",\n\t\"GroupLootFrame4TimerBar\",\n\t\"GuildBankTabLabel\",\n\t\"GuildBankTabPermissionsTab1Background\",\n\t\"GuildBankTabPermissionsTab1Text\",\n\t\"GuildBankTabPermissionsTab2Background\",\n\t\"GuildBankTabPermissionsTab2Text\",\n\t\"GuildBankTabPermissionsTab3Background\",\n\t\"GuildBankTabPermissionsTab3Text\",\n\t\"GuildBankTabPermissionsTab4Background\",\n\t\"GuildBankTabPermissionsTab4Text\",\n\t\"GuildBankTabPermissionsTab5Background\",\n\t\"GuildBankTabPermissionsTab5Text\",\n\t\"GuildBankTabPermissionsTab6Background\",\n\t\"GuildBankTabPermissionsTab6Text\",\n\t\"GuildControlPopupAcceptButtonText\",\n\t\"GuildControlPopupFrameCancelButtonText\",\n\t\"GuildControlPopupFrameCheckbox10Text\",\n\t\"GuildControlPopupFrameCheckbox11Text\",\n\t\"GuildControlPopupFrameCheckbox12Text\",\n\t\"GuildControlPopupFrameCheckbox13Text\",\n\t\"GuildControlPopupFrameCheckbox15Text\",\n\t\"GuildControlPopupFrameCheckbox16Text\",\n\t\"GuildControlPopupFrameCheckbox17Text\",\n\t\"GuildControlPopupFrameCheckbox1Text\",\n\t\"GuildControlPopupFrameCheckbox2Text\",\n\t\"GuildControlPopupFrameCheckbox3Text\",\n\t\"GuildControlPopupFrameCheckbox4Text\",\n\t\"GuildControlPopupFrameCheckbox5Text\",\n\t\"GuildControlPopupFrameCheckbox6Text\",\n\t\"GuildControlPopupFrameCheckbox7Text\",\n\t\"GuildControlPopupFrameCheckbox8Text\",\n\t\"GuildControlPopupFrameCheckbox9Text\",\n\t\"GuildControlPopupFrameDropDownButtonDisabledTexture\",\n\t\"GuildControlPopupFrameDropDownButtonHighlightTexture\",\n\t\"GuildControlPopupFrameDropDownButtonNormalTexture\",\n\t\"GuildControlPopupFrameDropDownButtonPushedTexture\",\n\t\"GuildControlPopupFrameDropDownLeft\",\n\t\"GuildControlPopupFrameDropDownMiddle\",\n\t\"GuildControlPopupFrameDropDownRight\",\n\t\"GuildControlPopupFrameDropDownText\",\n\t\"GuildControlPopupFrameEditBoxLeft\",\n\t\"GuildControlPopupFrameEditBoxMiddle\",\n\t\"GuildControlPopupFrameEditBoxRight\",\n\t\"GuildControlTabPermissionsDepositItemsText\",\n\t\"GuildControlTabPermissionsUpdateTextText\",\n\t\"GuildControlTabPermissionsViewTabText\",\n\t\"GuildControlTabPermissionsWithdrawItemsText\",\n\t\"GuildControlWithdrawGoldAmountText\",\n\t\"GuildControlWithdrawGoldEditBoxLeft\",\n\t\"GuildControlWithdrawGoldEditBoxMiddle\",\n\t\"GuildControlWithdrawGoldEditBoxRight\",\n\t\"GuildControlWithdrawGoldText\",\n\t\"GuildControlWithdrawItemsEditBoxLeft\",\n\t\"GuildControlWithdrawItemsEditBoxMiddle\",\n\t\"GuildControlWithdrawItemsEditBoxRight\",\n\t\"GuildEventLogCancelButtonText\",\n\t\"GuildEventLogScrollFrameScrollBarThumbTexture\",\n\t\"GuildEventLogTitle\",\n\t\"GuildEventMessage\",\n\t\"GuildFrameAddMemberButtonText\",\n\t\"GuildFrameButton10Class\",\n\t\"GuildFrameButton10Group\",\n\t\"GuildFrameButton10Level\",\n\t\"GuildFrameButton10Name\",\n\t\"GuildFrameButton10Zone\",\n\t\"GuildFrameButton11Class\",\n\t\"GuildFrameButton11Group\",\n\t\"GuildFrameButton11Level\",\n\t\"GuildFrameButton11Name\",\n\t\"GuildFrameButton11Zone\",\n\t\"GuildFrameButton12Class\",\n\t\"GuildFrameButton12Group\",\n\t\"GuildFrameButton12Level\",\n\t\"GuildFrameButton12Name\",\n\t\"GuildFrameButton12Zone\",\n\t\"GuildFrameButton13Class\",\n\t\"GuildFrameButton13Group\",\n\t\"GuildFrameButton13Level\",\n\t\"GuildFrameButton13Name\",\n\t\"GuildFrameButton13Zone\",\n\t\"GuildFrameButton1Class\",\n\t\"GuildFrameButton1Group\",\n\t\"GuildFrameButton1Level\",\n\t\"GuildFrameButton1Name\",\n\t\"GuildFrameButton1Zone\",\n\t\"GuildFrameButton2Class\",\n\t\"GuildFrameButton2Group\",\n\t\"GuildFrameButton2Level\",\n\t\"GuildFrameButton2Name\",\n\t\"GuildFrameButton2Zone\",\n\t\"GuildFrameButton3Class\",\n\t\"GuildFrameButton3Group\",\n\t\"GuildFrameButton3Level\",\n\t\"GuildFrameButton3Name\",\n\t\"GuildFrameButton3Zone\",\n\t\"GuildFrameButton4Class\",\n\t\"GuildFrameButton4Group\",\n\t\"GuildFrameButton4Level\",\n\t\"GuildFrameButton4Name\",\n\t\"GuildFrameButton4Zone\",\n\t\"GuildFrameButton5Class\",\n\t\"GuildFrameButton5Group\",\n\t\"GuildFrameButton5Level\",\n\t\"GuildFrameButton5Name\",\n\t\"GuildFrameButton5Zone\",\n\t\"GuildFrameButton6Class\",\n\t\"GuildFrameButton6Group\",\n\t\"GuildFrameButton6Level\",\n\t\"GuildFrameButton6Name\",\n\t\"GuildFrameButton6Zone\",\n\t\"GuildFrameButton7Class\",\n\t\"GuildFrameButton7Group\",\n\t\"GuildFrameButton7Level\",\n\t\"GuildFrameButton7Name\",\n\t\"GuildFrameButton7Zone\",\n\t\"GuildFrameButton8Class\",\n\t\"GuildFrameButton8Group\",\n\t\"GuildFrameButton8Level\",\n\t\"GuildFrameButton8Name\",\n\t\"GuildFrameButton8Zone\",\n\t\"GuildFrameButton9Class\",\n\t\"GuildFrameButton9Group\",\n\t\"GuildFrameButton9Level\",\n\t\"GuildFrameButton9Name\",\n\t\"GuildFrameButton9Zone\",\n\t\"GuildFrameColumnHeader1HighlightTexture\",\n\t\"GuildFrameColumnHeader1Left\",\n\t\"GuildFrameColumnHeader1Middle\",\n\t\"GuildFrameColumnHeader1Right\",\n\t\"GuildFrameColumnHeader2HighlightTexture\",\n\t\"GuildFrameColumnHeader2Left\",\n\t\"GuildFrameColumnHeader2Middle\",\n\t\"GuildFrameColumnHeader2Right\",\n\t\"GuildFrameColumnHeader3HighlightTexture\",\n\t\"GuildFrameColumnHeader3Left\",\n\t\"GuildFrameColumnHeader3Middle\",\n\t\"GuildFrameColumnHeader3Right\",\n\t\"GuildFrameColumnHeader4HighlightTexture\",\n\t\"GuildFrameColumnHeader4Left\",\n\t\"GuildFrameColumnHeader4Middle\",\n\t\"GuildFrameColumnHeader4Right\",\n\t\"GuildFrameControlButtonText\",\n\t\"GuildFrameGuildInformationButtonText\",\n\t\"GuildFrameGuildStatusButton10Name\",\n\t\"GuildFrameGuildStatusButton10Note\",\n\t\"GuildFrameGuildStatusButton10Online\",\n\t\"GuildFrameGuildStatusButton10Rank\",\n\t\"GuildFrameGuildStatusButton11Name\",\n\t\"GuildFrameGuildStatusButton11Note\",\n\t\"GuildFrameGuildStatusButton11Online\",\n\t\"GuildFrameGuildStatusButton11Rank\",\n\t\"GuildFrameGuildStatusButton12Name\",\n\t\"GuildFrameGuildStatusButton12Note\",\n\t\"GuildFrameGuildStatusButton12Online\",\n\t\"GuildFrameGuildStatusButton12Rank\",\n\t\"GuildFrameGuildStatusButton13Name\",\n\t\"GuildFrameGuildStatusButton13Note\",\n\t\"GuildFrameGuildStatusButton13Online\",\n\t\"GuildFrameGuildStatusButton13Rank\",\n\t\"GuildFrameGuildStatusButton1Name\",\n\t\"GuildFrameGuildStatusButton1Note\",\n\t\"GuildFrameGuildStatusButton1Online\",\n\t\"GuildFrameGuildStatusButton1Rank\",\n\t\"GuildFrameGuildStatusButton2Name\",\n\t\"GuildFrameGuildStatusButton2Note\",\n\t\"GuildFrameGuildStatusButton2Online\",\n\t\"GuildFrameGuildStatusButton2Rank\",\n\t\"GuildFrameGuildStatusButton3Name\",\n\t\"GuildFrameGuildStatusButton3Note\",\n\t\"GuildFrameGuildStatusButton3Online\",\n\t\"GuildFrameGuildStatusButton3Rank\",\n\t\"GuildFrameGuildStatusButton4Name\",\n\t\"GuildFrameGuildStatusButton4Note\",\n\t\"GuildFrameGuildStatusButton4Online\",\n\t\"GuildFrameGuildStatusButton4Rank\",\n\t\"GuildFrameGuildStatusButton5Name\",\n\t\"GuildFrameGuildStatusButton5Note\",\n\t\"GuildFrameGuildStatusButton5Online\",\n\t\"GuildFrameGuildStatusButton5Rank\",\n\t\"GuildFrameGuildStatusButton6Name\",\n\t\"GuildFrameGuildStatusButton6Note\",\n\t\"GuildFrameGuildStatusButton6Online\",\n\t\"GuildFrameGuildStatusButton6Rank\",\n\t\"GuildFrameGuildStatusButton7Name\",\n\t\"GuildFrameGuildStatusButton7Note\",\n\t\"GuildFrameGuildStatusButton7Online\",\n\t\"GuildFrameGuildStatusButton7Rank\",\n\t\"GuildFrameGuildStatusButton8Name\",\n\t\"GuildFrameGuildStatusButton8Note\",\n\t\"GuildFrameGuildStatusButton8Online\",\n\t\"GuildFrameGuildStatusButton8Rank\",\n\t\"GuildFrameGuildStatusButton9Name\",\n\t\"GuildFrameGuildStatusButton9Note\",\n\t\"GuildFrameGuildStatusButton9Online\",\n\t\"GuildFrameGuildStatusButton9Rank\",\n\t\"GuildFrameGuildStatusColumnHeader1HighlightTexture\",\n\t\"GuildFrameGuildStatusColumnHeader1Left\",\n\t\"GuildFrameGuildStatusColumnHeader1Middle\",\n\t\"GuildFrameGuildStatusColumnHeader1Right\",\n\t\"GuildFrameGuildStatusColumnHeader2HighlightTexture\",\n\t\"GuildFrameGuildStatusColumnHeader2Left\",\n\t\"GuildFrameGuildStatusColumnHeader2Middle\",\n\t\"GuildFrameGuildStatusColumnHeader2Right\",\n\t\"GuildFrameGuildStatusColumnHeader3HighlightTexture\",\n\t\"GuildFrameGuildStatusColumnHeader3Left\",\n\t\"GuildFrameGuildStatusColumnHeader3Middle\",\n\t\"GuildFrameGuildStatusColumnHeader3Right\",\n\t\"GuildFrameGuildStatusColumnHeader4HighlightTexture\",\n\t\"GuildFrameGuildStatusColumnHeader4Left\",\n\t\"GuildFrameGuildStatusColumnHeader4Middle\",\n\t\"GuildFrameGuildStatusColumnHeader4Right\",\n\t\"GuildFrameLFGButtonText\",\n\t\"GuildFrameLFGFrameLeft\",\n\t\"GuildFrameLFGFrameMiddle\",\n\t\"GuildFrameLFGFrameRight\",\n\t\"GuildFrameNotesLabel\",\n\t\"GuildFrameNotesText\",\n\t\"GuildFrameOnlineTotals\",\n\t\"GuildFrameTotals\",\n\t\"GuildInfoCancelButtonText\",\n\t\"GuildInfoCorner\",\n\t\"GuildInfoFrameScrollFrameScrollBarThumbTexture\",\n\t\"GuildInfoGuildEventButtonText\",\n\t\"GuildInfoSaveButtonText\",\n\t\"GuildInfoTitle\",\n\t\"GuildListScrollFrameScrollBarThumbTexture\",\n\t\"GuildMemberDetailCorner\",\n\t\"GuildMemberDetailLevel\",\n\t\"GuildMemberDetailName\",\n\t\"GuildMemberDetailNoteLabel\",\n\t\"GuildMemberDetailOfficerNoteLabel\",\n\t\"GuildMemberDetailOnlineLabel\",\n\t\"GuildMemberDetailOnlineText\",\n\t\"GuildMemberDetailRankLabel\",\n\t\"GuildMemberDetailRankText\",\n\t\"GuildMemberDetailZoneLabel\",\n\t\"GuildMemberDetailZoneText\",\n\t\"GuildMemberGroupInviteButtonText\",\n\t\"GuildMemberRemoveButtonText\",\n\t\"GuildRegistrarButton1QuestIcon\",\n\t\"GuildRegistrarButton2QuestIcon\",\n\t\"GuildRegistrarCostLabel\",\n\t\"GuildRegistrarFrameCancelButtonText\",\n\t\"GuildRegistrarFrameGoodbyeButtonText\",\n\t\"GuildRegistrarFrameNpcNameText\",\n\t\"GuildRegistrarFramePortrait\",\n\t\"GuildRegistrarFramePurchaseButtonText\",\n\t\"GuildRegistrarMoneyFrameCopperButtonText\",\n\t\"GuildRegistrarMoneyFrameGoldButtonText\",\n\t\"GuildRegistrarMoneyFrameSilverButtonText\",\n\t\"GuildRegistrarPurchaseText\",\n\t\"GuildRegistrarText\",\n\t\"HelpFrameGMTalkCancelText\",\n\t\"HelpFrameGMTalkIssue1\",\n\t\"HelpFrameGMTalkIssue1Header\",\n\t\"HelpFrameGMTalkIssue2\",\n\t\"HelpFrameGMTalkIssue2Header\",\n\t\"HelpFrameGMTalkIssue3\",\n\t\"HelpFrameGMTalkIssue3Header\",\n\t\"HelpFrameGMTalkOpenTicketLeft\",\n\t\"HelpFrameGMTalkOpenTicketMiddle\",\n\t\"HelpFrameGMTalkOpenTicketRight\",\n\t\"HelpFrameGMTalkOpenTicketText\",\n\t\"HelpFrameGMTalkPvpPolicyUrl\",\n\t\"HelpFrameGMTalkText1\",\n\t\"HelpFrameGMTalkText2\",\n\t\"HelpFrameGMTalkTitle\",\n\t\"HelpFrameHeader\",\n\t\"HelpFrameLagAuctionHouseLeft\",\n\t\"HelpFrameLagAuctionHouseMiddle\",\n\t\"HelpFrameLagAuctionHouseRight\",\n\t\"HelpFrameLagAuctionHouseText\",\n\t\"HelpFrameLagCancelText\",\n\t\"HelpFrameLagChatLeft\",\n\t\"HelpFrameLagChatMiddle\",\n\t\"HelpFrameLagChatRight\",\n\t\"HelpFrameLagChatText\",\n\t\"HelpFrameLagLootLeft\",\n\t\"HelpFrameLagLootMiddle\",\n\t\"HelpFrameLagLootRight\",\n\t\"HelpFrameLagLootText\",\n\t\"HelpFrameLagMailLeft\",\n\t\"HelpFrameLagMailMiddle\",\n\t\"HelpFrameLagMailRight\",\n\t\"HelpFrameLagMailText\",\n\t\"HelpFrameLagMovementLeft\",\n\t\"HelpFrameLagMovementMiddle\",\n\t\"HelpFrameLagMovementRight\",\n\t\"HelpFrameLagMovementText\",\n\t\"HelpFrameLagSpellLeft\",\n\t\"HelpFrameLagSpellMiddle\",\n\t\"HelpFrameLagSpellRight\",\n\t\"HelpFrameLagSpellText\",\n\t\"HelpFrameLagText1\",\n\t\"HelpFrameLagTitle\",\n\t\"HelpFrameOpenTicketCancelText\",\n\t\"HelpFrameOpenTicketDividerLeft\",\n\t\"HelpFrameOpenTicketDividerMiddle\",\n\t\"HelpFrameOpenTicketDividerRight\",\n\t\"HelpFrameOpenTicketLabel\",\n\t\"HelpFrameOpenTicketScrollFrameScrollBarBottom\",\n\t\"HelpFrameOpenTicketScrollFrameScrollBarMiddle\",\n\t\"HelpFrameOpenTicketScrollFrameScrollBarThumbTexture\",\n\t\"HelpFrameOpenTicketScrollFrameScrollBarTop\",\n\t\"HelpFrameOpenTicketSubmitText\",\n\t\"HelpFrameReportIssueBullet1Text\",\n\t\"HelpFrameReportIssueBullet2Text\",\n\t\"HelpFrameReportIssueBulletTitle1\",\n\t\"HelpFrameReportIssueCancelText\",\n\t\"HelpFrameReportIssueOpenTicketLeft\",\n\t\"HelpFrameReportIssueOpenTicketMiddle\",\n\t\"HelpFrameReportIssueOpenTicketRight\",\n\t\"HelpFrameReportIssueOpenTicketText\",\n\t\"HelpFrameReportIssueText1\",\n\t\"HelpFrameReportIssueText2\",\n\t\"HelpFrameReportIssueTitle\",\n\t\"HelpFrameStuckCancelText\",\n\t\"HelpFrameStuckOpenTicketLeft\",\n\t\"HelpFrameStuckOpenTicketMiddle\",\n\t\"HelpFrameStuckOpenTicketRight\",\n\t\"HelpFrameStuckOpenTicketText\",\n\t\"HelpFrameStuckStuckLeft\",\n\t\"HelpFrameStuckStuckMiddle\",\n\t\"HelpFrameStuckStuckRight\",\n\t\"HelpFrameStuckStuckText\",\n\t\"HelpFrameStuckText1\",\n\t\"HelpFrameStuckTitle\",\n\t\"HelpFrameViewResponseCancelText\",\n\t\"HelpFrameViewResponseDividerLeft\",\n\t\"HelpFrameViewResponseDividerMiddle\",\n\t\"HelpFrameViewResponseDividerRight\",\n\t\"HelpFrameViewResponseIssueBody\",\n\t\"HelpFrameViewResponseIssueHeader\",\n\t\"HelpFrameViewResponseIssueResolvedText\",\n\t\"HelpFrameViewResponseIssueScrollFrameScrollBarBottom\",\n\t\"HelpFrameViewResponseIssueScrollFrameScrollBarMiddle\",\n\t\"HelpFrameViewResponseIssueScrollFrameScrollBarThumbTexture\",\n\t\"HelpFrameViewResponseIssueScrollFrameScrollBarTop\",\n\t\"HelpFrameViewResponseMessageBody\",\n\t\"HelpFrameViewResponseMessageHeader\",\n\t\"HelpFrameViewResponseMessageScrollFrameScrollBarBottom\",\n\t\"HelpFrameViewResponseMessageScrollFrameScrollBarMiddle\",\n\t\"HelpFrameViewResponseMessageScrollFrameScrollBarThumbTexture\",\n\t\"HelpFrameViewResponseMessageScrollFrameScrollBarTop\",\n\t\"HelpFrameViewResponseMoreHelpText\",\n\t\"HelpFrameWelcomeCancelText\",\n\t\"HelpFrameWelcomeGMTalkLeft\",\n\t\"HelpFrameWelcomeGMTalkMiddle\",\n\t\"HelpFrameWelcomeGMTalkRight\",\n\t\"HelpFrameWelcomeGMTalkText\",\n\t\"HelpFrameWelcomeReportIssueLeft\",\n\t\"HelpFrameWelcomeReportIssueMiddle\",\n\t\"HelpFrameWelcomeReportIssueRight\",\n\t\"HelpFrameWelcomeReportIssueText\",\n\t\"HelpFrameWelcomeStuckLeft\",\n\t\"HelpFrameWelcomeStuckMiddle\",\n\t\"HelpFrameWelcomeStuckRight\",\n\t\"HelpFrameWelcomeStuckText\",\n\t\"HelpFrameWelcomeText1\",\n\t\"HelpFrameWelcomeTitle\",\n\t\"HonorFrameCurrentDKText\",\n\t\"HonorFrameCurrentDKValue\",\n\t\"HonorFrameCurrentHKText\",\n\t\"HonorFrameCurrentHKValue\",\n\t\"HonorFrameCurrentPVPRank\",\n\t\"HonorFrameCurrentPVPTitle\",\n\t\"HonorFrameCurrentSessionTitle\",\n\t\"HonorFrameLastWeekContributionText\",\n\t\"HonorFrameLastWeekContributionValue\",\n\t\"HonorFrameLastWeekHKText\",\n\t\"HonorFrameLastWeekHKValue\",\n\t\"HonorFrameLastWeekStandingText\",\n\t\"HonorFrameLastWeekStandingValue\",\n\t\"HonorFrameLastWeekTitle\",\n\t\"HonorFrameLifeTimeDKText\",\n\t\"HonorFrameLifeTimeDKValue\",\n\t\"HonorFrameLifeTimeHKText\",\n\t\"HonorFrameLifeTimeHKValue\",\n\t\"HonorFrameLifeTimeRankText\",\n\t\"HonorFrameLifeTimeRankValue\",\n\t\"HonorFrameLifeTimeTitle\",\n\t\"HonorFrameProgressBarBar\",\n\t\"HonorFramePvPIcon\",\n\t\"HonorFrameThisWeekContributionText\",\n\t\"HonorFrameThisWeekContributionValue\",\n\t\"HonorFrameThisWeekHKText\",\n\t\"HonorFrameThisWeekHKValue\",\n\t\"HonorFrameThisWeekTitle\",\n\t\"HonorFrameYesterdayContributionText\",\n\t\"HonorFrameYesterdayContributionValue\",\n\t\"HonorFrameYesterdayHKText\",\n\t\"HonorFrameYesterdayHKValue\",\n\t\"HonorFrameYesterdayTitle\",\n\t\"HonorGuildText\",\n\t\"HonorLevelText\",\n\t\"InboxCurrentPage\",\n\t\"InboxTitleText\",\n\t\"InboxTooMuchMailText\",\n\t\"InterfaceOptionsActionBarsPanelAlwaysShowActionBarsText\",\n\t\"InterfaceOptionsActionBarsPanelBottomLeftText\",\n\t\"InterfaceOptionsActionBarsPanelBottomRightText\",\n\t\"InterfaceOptionsActionBarsPanelLockActionBarsText\",\n\t\"InterfaceOptionsActionBarsPanelRightText\",\n\t\"InterfaceOptionsActionBarsPanelRightTwoText\",\n\t\"InterfaceOptionsActionBarsPanelSecureAbilityToggleText\",\n\t\"InterfaceOptionsActionBarsPanelSubText\",\n\t\"InterfaceOptionsActionBarsPanelTitle\",\n\t\"InterfaceOptionsBattlenetPanelBroadcastsText\",\n\t\"InterfaceOptionsBattlenetPanelConversationsText\",\n\t\"InterfaceOptionsBattlenetPanelFriendRequestsText\",\n\t\"InterfaceOptionsBattlenetPanelOfflineFriendsText\",\n\t\"InterfaceOptionsBattlenetPanelOnlineFriendsText\",\n\t\"InterfaceOptionsBattlenetPanelShowToastWindowText\",\n\t\"InterfaceOptionsBattlenetPanelSubText\",\n\t\"InterfaceOptionsBattlenetPanelTitle\",\n\t\"InterfaceOptionsBattlenetPanelToastDurationSliderHigh\",\n\t\"InterfaceOptionsBattlenetPanelToastDurationSliderLow\",\n\t\"InterfaceOptionsBattlenetPanelToastDurationSliderText\",\n\t\"InterfaceOptionsBattlenetPanelToastDurationSliderThumb\",\n\t\"InterfaceOptionsBuffsPanelBuffDurationsText\",\n\t\"InterfaceOptionsBuffsPanelCastableBuffsText\",\n\t\"InterfaceOptionsBuffsPanelConsolidateBuffsText\",\n\t\"InterfaceOptionsBuffsPanelDispellableDebuffsText\",\n\t\"InterfaceOptionsBuffsPanelShowCastableDebuffsText\",\n\t\"InterfaceOptionsBuffsPanelSubText\",\n\t\"InterfaceOptionsBuffsPanelTitle\",\n\t\"InterfaceOptionsCameraPanelFollowSpeedSliderHigh\",\n\t\"InterfaceOptionsCameraPanelFollowSpeedSliderLow\",\n\t\"InterfaceOptionsCameraPanelFollowSpeedSliderText\",\n\t\"InterfaceOptionsCameraPanelFollowSpeedSliderThumb\",\n\t\"InterfaceOptionsCameraPanelFollowTerrainText\",\n\t\"InterfaceOptionsCameraPanelHeadBobText\",\n\t\"InterfaceOptionsCameraPanelMaxDistanceSliderHigh\",\n\t\"InterfaceOptionsCameraPanelMaxDistanceSliderLow\",\n\t\"InterfaceOptionsCameraPanelMaxDistanceSliderText\",\n\t\"InterfaceOptionsCameraPanelMaxDistanceSliderThumb\",\n\t\"InterfaceOptionsCameraPanelSmartPivotText\",\n\t\"InterfaceOptionsCameraPanelStyleDropDownButtonDisabledTexture\",\n\t\"InterfaceOptionsCameraPanelStyleDropDownButtonHighlightTexture\",\n\t\"InterfaceOptionsCameraPanelStyleDropDownButtonNormalTexture\",\n\t\"InterfaceOptionsCameraPanelStyleDropDownButtonPushedTexture\",\n\t\"InterfaceOptionsCameraPanelStyleDropDownLabel\",\n\t\"InterfaceOptionsCameraPanelStyleDropDownLeft\",\n\t\"InterfaceOptionsCameraPanelStyleDropDownMiddle\",\n\t\"InterfaceOptionsCameraPanelStyleDropDownRight\",\n\t\"InterfaceOptionsCameraPanelStyleDropDownText\",\n\t\"InterfaceOptionsCameraPanelSubText\",\n\t\"InterfaceOptionsCameraPanelTitle\",\n\t\"InterfaceOptionsCameraPanelWaterCollisionText\",\n\t\"InterfaceOptionsCombatPanelAttackOnAssistText\",\n\t\"InterfaceOptionsCombatPanelAutoRangeText\",\n\t\"InterfaceOptionsCombatPanelAutoSelfCastText\",\n\t\"InterfaceOptionsCombatPanelEnemyCastBarsLabel\",\n\t\"InterfaceOptionsCombatPanelEnemyCastBarsOnNameplatesText\",\n\t\"InterfaceOptionsCombatPanelEnemyCastBarsOnPortraitText\",\n\t\"InterfaceOptionsCombatPanelFocusCastKeyDropDownButtonDisabledTexture\",\n\t\"InterfaceOptionsCombatPanelFocusCastKeyDropDownButtonHighlightTexture\",\n\t\"InterfaceOptionsCombatPanelFocusCastKeyDropDownButtonNormalTexture\",\n\t\"InterfaceOptionsCombatPanelFocusCastKeyDropDownButtonPushedTexture\",\n\t\"InterfaceOptionsCombatPanelFocusCastKeyDropDownLabel\",\n\t\"InterfaceOptionsCombatPanelFocusCastKeyDropDownLeft\",\n\t\"InterfaceOptionsCombatPanelFocusCastKeyDropDownMiddle\",\n\t\"InterfaceOptionsCombatPanelFocusCastKeyDropDownRight\",\n\t\"InterfaceOptionsCombatPanelFocusCastKeyDropDownText\",\n\t\"InterfaceOptionsCombatPanelNameplateClassColorsText\",\n\t\"InterfaceOptionsCombatPanelSelfCastKeyDropDownButtonDisabledTexture\",\n\t\"InterfaceOptionsCombatPanelSelfCastKeyDropDownButtonHighlightTexture\",\n\t\"InterfaceOptionsCombatPanelSelfCastKeyDropDownButtonNormalTexture\",\n\t\"InterfaceOptionsCombatPanelSelfCastKeyDropDownButtonPushedTexture\",\n\t\"InterfaceOptionsCombatPanelSelfCastKeyDropDownLabel\",\n\t\"InterfaceOptionsCombatPanelSelfCastKeyDropDownLeft\",\n\t\"InterfaceOptionsCombatPanelSelfCastKeyDropDownMiddle\",\n\t\"InterfaceOptionsCombatPanelSelfCastKeyDropDownRight\",\n\t\"InterfaceOptionsCombatPanelSelfCastKeyDropDownText\",\n\t\"InterfaceOptionsCombatPanelStopAutoAttackText\",\n\t\"InterfaceOptionsCombatPanelSubText\",\n\t\"InterfaceOptionsCombatPanelTOTDropDownButtonDisabledTexture\",\n\t\"InterfaceOptionsCombatPanelTOTDropDownButtonHighlightTexture\",\n\t\"InterfaceOptionsCombatPanelTOTDropDownButtonNormalTexture\",\n\t\"InterfaceOptionsCombatPanelTOTDropDownButtonPushedTexture\",\n\t\"InterfaceOptionsCombatPanelTOTDropDownLeft\",\n\t\"InterfaceOptionsCombatPanelTOTDropDownMiddle\",\n\t\"InterfaceOptionsCombatPanelTOTDropDownRight\",\n\t\"InterfaceOptionsCombatPanelTOTDropDownText\",\n\t\"InterfaceOptionsCombatPanelTargetOfTargetText\",\n\t\"InterfaceOptionsCombatPanelTitle\",\n\t\"InterfaceOptionsCombatTextPanelAurasText\",\n\t\"InterfaceOptionsCombatTextPanelCombatStateText\",\n\t\"InterfaceOptionsCombatTextPanelComboPointsText\",\n\t\"InterfaceOptionsCombatTextPanelDamageReductionText\",\n\t\"InterfaceOptionsCombatTextPanelDodgeParryMissText\",\n\t\"InterfaceOptionsCombatTextPanelEnableFCTText\",\n\t\"InterfaceOptionsCombatTextPanelEnergyGainsText\",\n\t\"InterfaceOptionsCombatTextPanelFCTDropDownButtonDisabledTexture\",\n\t\"InterfaceOptionsCombatTextPanelFCTDropDownButtonHighlightTexture\",\n\t\"InterfaceOptionsCombatTextPanelFCTDropDownButtonNormalTexture\",\n\t\"InterfaceOptionsCombatTextPanelFCTDropDownButtonPushedTexture\",\n\t\"InterfaceOptionsCombatTextPanelFCTDropDownLabel\",\n\t\"InterfaceOptionsCombatTextPanelFCTDropDownLeft\",\n\t\"InterfaceOptionsCombatTextPanelFCTDropDownMiddle\",\n\t\"InterfaceOptionsCombatTextPanelFCTDropDownRight\",\n\t\"InterfaceOptionsCombatTextPanelFCTDropDownText\",\n\t\"InterfaceOptionsCombatTextPanelFriendlyHealerNamesText\",\n\t\"InterfaceOptionsCombatTextPanelHealingText\",\n\t\"InterfaceOptionsCombatTextPanelHonorGainsText\",\n\t\"InterfaceOptionsCombatTextPanelLowManaHealthText\",\n\t\"InterfaceOptionsCombatTextPanelOtherTargetEffectsText\",\n\t\"InterfaceOptionsCombatTextPanelPeriodicDamageText\",\n\t\"InterfaceOptionsCombatTextPanelPeriodicEnergyGainsText\",\n\t\"InterfaceOptionsCombatTextPanelPetDamageText\",\n\t\"InterfaceOptionsCombatTextPanelReactiveAbilitiesText\",\n\t\"InterfaceOptionsCombatTextPanelRepChangesText\",\n\t\"InterfaceOptionsCombatTextPanelSubText\",\n\t\"InterfaceOptionsCombatTextPanelTargetDamageText\",\n\t\"InterfaceOptionsCombatTextPanelTargetEffectsText\",\n\t\"InterfaceOptionsCombatTextPanelTitle\",\n\t\"InterfaceOptionsControlsPanelAutoClearAFKText\",\n\t\"InterfaceOptionsControlsPanelAutoDismountText\",\n\t\"InterfaceOptionsControlsPanelAutoLootCorpseText\",\n\t\"InterfaceOptionsControlsPanelAutoLootKeyDropDownButtonDisabledTexture\",\n\t\"InterfaceOptionsControlsPanelAutoLootKeyDropDownButtonHighlightTexture\",\n\t\"InterfaceOptionsControlsPanelAutoLootKeyDropDownButtonNormalTexture\",\n\t\"InterfaceOptionsControlsPanelAutoLootKeyDropDownButtonPushedTexture\",\n\t\"InterfaceOptionsControlsPanelAutoLootKeyDropDownLabel\",\n\t\"InterfaceOptionsControlsPanelAutoLootKeyDropDownLeft\",\n\t\"InterfaceOptionsControlsPanelAutoLootKeyDropDownMiddle\",\n\t\"InterfaceOptionsControlsPanelAutoLootKeyDropDownRight\",\n\t\"InterfaceOptionsControlsPanelAutoLootKeyDropDownText\",\n\t\"InterfaceOptionsControlsPanelBlockTradesText\",\n\t\"InterfaceOptionsControlsPanelLootAtMouseText\",\n\t\"InterfaceOptionsControlsPanelStickyTargetingText\",\n\t\"InterfaceOptionsControlsPanelSubText\",\n\t\"InterfaceOptionsControlsPanelTitle\",\n\t\"InterfaceOptionsDisplayPanelAggroWarningDisplayButtonDisabledTexture\",\n\t\"InterfaceOptionsDisplayPanelAggroWarningDisplayButtonHighlightTexture\",\n\t\"InterfaceOptionsDisplayPanelAggroWarningDisplayButtonNormalTexture\",\n\t\"InterfaceOptionsDisplayPanelAggroWarningDisplayButtonPushedTexture\",\n\t\"InterfaceOptionsDisplayPanelAggroWarningDisplayLabel\",\n\t\"InterfaceOptionsDisplayPanelAggroWarningDisplayLeft\",\n\t\"InterfaceOptionsDisplayPanelAggroWarningDisplayMiddle\",\n\t\"InterfaceOptionsDisplayPanelAggroWarningDisplayRight\",\n\t\"InterfaceOptionsDisplayPanelAggroWarningDisplayText\",\n\t\"InterfaceOptionsDisplayPanelCinematicSubtitlesText\",\n\t\"InterfaceOptionsDisplayPanelColorblindModeText\",\n\t\"InterfaceOptionsDisplayPanelDetailedLootInfoText\",\n\t\"InterfaceOptionsDisplayPanelPlayAggroSoundsText\",\n\t\"InterfaceOptionsDisplayPanelRotateMinimapText\",\n\t\"InterfaceOptionsDisplayPanelScreenEdgeFlashText\",\n\t\"InterfaceOptionsDisplayPanelShowAggroPercentageText\",\n\t\"InterfaceOptionsDisplayPanelShowCloakText\",\n\t\"InterfaceOptionsDisplayPanelShowClockText\",\n\t\"InterfaceOptionsDisplayPanelShowFreeBagSpaceText\",\n\t\"InterfaceOptionsDisplayPanelShowHelmText\",\n\t\"InterfaceOptionsDisplayPanelShowItemLevelText\",\n\t\"InterfaceOptionsDisplayPanelSubText\",\n\t\"InterfaceOptionsDisplayPanelTitle\",\n\t\"InterfaceOptionsDisplayPanelWorldPVPObjectiveDisplayButtonDisabledTexture\",\n\t\"InterfaceOptionsDisplayPanelWorldPVPObjectiveDisplayButtonHighlightTexture\",\n\t\"InterfaceOptionsDisplayPanelWorldPVPObjectiveDisplayButtonNormalTexture\",\n\t\"InterfaceOptionsDisplayPanelWorldPVPObjectiveDisplayButtonPushedTexture\",\n\t\"InterfaceOptionsDisplayPanelWorldPVPObjectiveDisplayLabel\",\n\t\"InterfaceOptionsDisplayPanelWorldPVPObjectiveDisplayLeft\",\n\t\"InterfaceOptionsDisplayPanelWorldPVPObjectiveDisplayMiddle\",\n\t\"InterfaceOptionsDisplayPanelWorldPVPObjectiveDisplayRight\",\n\t\"InterfaceOptionsDisplayPanelWorldPVPObjectiveDisplayText\",\n\t\"InterfaceOptionsFeaturesPanelEquipmentManagerDescription\",\n\t\"InterfaceOptionsFeaturesPanelEquipmentManagerText\",\n\t\"InterfaceOptionsFeaturesPanelPreviewTalentChangesDescription\",\n\t\"InterfaceOptionsFeaturesPanelPreviewTalentChangesText\",\n\t\"InterfaceOptionsFeaturesPanelSubText\",\n\t\"InterfaceOptionsFeaturesPanelTitle\",\n\t\"InterfaceOptionsFrameAddOnsBottom\",\n\t\"InterfaceOptionsFrameAddOnsBottomLeft\",\n\t\"InterfaceOptionsFrameAddOnsBottomRight\",\n\t\"InterfaceOptionsFrameAddOnsButton10Text\",\n\t\"InterfaceOptionsFrameAddOnsButton10ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton10ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton10TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton11Text\",\n\t\"InterfaceOptionsFrameAddOnsButton11ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton11ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton11TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton12Text\",\n\t\"InterfaceOptionsFrameAddOnsButton12ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton12ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton12TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton13Text\",\n\t\"InterfaceOptionsFrameAddOnsButton13ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton13ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton13TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton14Text\",\n\t\"InterfaceOptionsFrameAddOnsButton14ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton14ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton14TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton15Text\",\n\t\"InterfaceOptionsFrameAddOnsButton15ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton15ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton15TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton16Text\",\n\t\"InterfaceOptionsFrameAddOnsButton16ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton16ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton16TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton17Text\",\n\t\"InterfaceOptionsFrameAddOnsButton17ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton17ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton17TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton18Text\",\n\t\"InterfaceOptionsFrameAddOnsButton18ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton18ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton18TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton19Text\",\n\t\"InterfaceOptionsFrameAddOnsButton19ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton19ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton19TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton1Text\",\n\t\"InterfaceOptionsFrameAddOnsButton1ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton1ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton1TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton20Text\",\n\t\"InterfaceOptionsFrameAddOnsButton20ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton20ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton20TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton21Text\",\n\t\"InterfaceOptionsFrameAddOnsButton21ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton21ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton21TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton22Text\",\n\t\"InterfaceOptionsFrameAddOnsButton22ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton22ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton22TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton23Text\",\n\t\"InterfaceOptionsFrameAddOnsButton23ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton23ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton23TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton2Text\",\n\t\"InterfaceOptionsFrameAddOnsButton2ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton2ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton2TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton3Text\",\n\t\"InterfaceOptionsFrameAddOnsButton3ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton3ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton3TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton4Text\",\n\t\"InterfaceOptionsFrameAddOnsButton4ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton4ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton4TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton5Text\",\n\t\"InterfaceOptionsFrameAddOnsButton5ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton5ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton5TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton6Text\",\n\t\"InterfaceOptionsFrameAddOnsButton6ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton6ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton6TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton7Text\",\n\t\"InterfaceOptionsFrameAddOnsButton7ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton7ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton7TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton8Text\",\n\t\"InterfaceOptionsFrameAddOnsButton8ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton8ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton8TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton9Text\",\n\t\"InterfaceOptionsFrameAddOnsButton9ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton9ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameAddOnsButton9TogglePushedTexture\",\n\t\"InterfaceOptionsFrameAddOnsLeft\",\n\t\"InterfaceOptionsFrameAddOnsListScrollBarThumbTexture\",\n\t\"InterfaceOptionsFrameAddOnsRight\",\n\t\"InterfaceOptionsFrameAddOnsTop\",\n\t\"InterfaceOptionsFrameAddOnsTopLeft\",\n\t\"InterfaceOptionsFrameAddOnsTopRight\",\n\t\"InterfaceOptionsFrameCancelText\",\n\t\"InterfaceOptionsFrameCategoriesBottom\",\n\t\"InterfaceOptionsFrameCategoriesBottomLeft\",\n\t\"InterfaceOptionsFrameCategoriesBottomRight\",\n\t\"InterfaceOptionsFrameCategoriesButton10Text\",\n\t\"InterfaceOptionsFrameCategoriesButton10ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton10ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton10TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton11Text\",\n\t\"InterfaceOptionsFrameCategoriesButton11ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton11ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton11TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton12Text\",\n\t\"InterfaceOptionsFrameCategoriesButton12ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton12ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton12TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton13Text\",\n\t\"InterfaceOptionsFrameCategoriesButton13ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton13ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton13TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton14Text\",\n\t\"InterfaceOptionsFrameCategoriesButton14ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton14ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton14TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton15Text\",\n\t\"InterfaceOptionsFrameCategoriesButton15ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton15ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton15TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton16Text\",\n\t\"InterfaceOptionsFrameCategoriesButton16ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton16ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton16TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton17Text\",\n\t\"InterfaceOptionsFrameCategoriesButton17ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton17ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton17TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton18Text\",\n\t\"InterfaceOptionsFrameCategoriesButton18ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton18ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton18TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton19Text\",\n\t\"InterfaceOptionsFrameCategoriesButton19ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton19ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton19TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton1Text\",\n\t\"InterfaceOptionsFrameCategoriesButton1ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton1ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton1TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton20Text\",\n\t\"InterfaceOptionsFrameCategoriesButton20ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton20ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton20TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton21Text\",\n\t\"InterfaceOptionsFrameCategoriesButton21ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton21ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton21TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton22Text\",\n\t\"InterfaceOptionsFrameCategoriesButton22ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton22ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton22TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton23Text\",\n\t\"InterfaceOptionsFrameCategoriesButton23ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton23ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton23TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton2Text\",\n\t\"InterfaceOptionsFrameCategoriesButton2ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton2ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton2TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton3Text\",\n\t\"InterfaceOptionsFrameCategoriesButton3ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton3ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton3TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton4Text\",\n\t\"InterfaceOptionsFrameCategoriesButton4ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton4ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton4TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton5Text\",\n\t\"InterfaceOptionsFrameCategoriesButton5ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton5ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton5TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton6Text\",\n\t\"InterfaceOptionsFrameCategoriesButton6ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton6ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton6TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton7Text\",\n\t\"InterfaceOptionsFrameCategoriesButton7ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton7ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton7TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton8Text\",\n\t\"InterfaceOptionsFrameCategoriesButton8ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton8ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton8TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton9Text\",\n\t\"InterfaceOptionsFrameCategoriesButton9ToggleHighlightTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton9ToggleNormalTexture\",\n\t\"InterfaceOptionsFrameCategoriesButton9TogglePushedTexture\",\n\t\"InterfaceOptionsFrameCategoriesLeft\",\n\t\"InterfaceOptionsFrameCategoriesListScrollBarThumbTexture\",\n\t\"InterfaceOptionsFrameCategoriesRight\",\n\t\"InterfaceOptionsFrameCategoriesTop\",\n\t\"InterfaceOptionsFrameCategoriesTopLeft\",\n\t\"InterfaceOptionsFrameCategoriesTopRight\",\n\t\"InterfaceOptionsFrameHeader\",\n\t\"InterfaceOptionsFrameHeaderText\",\n\t\"InterfaceOptionsFrameOkayText\",\n\t\"InterfaceOptionsFrameTab1HighlightTexture\",\n\t\"InterfaceOptionsFrameTab1Left\",\n\t\"InterfaceOptionsFrameTab1LeftDisabled\",\n\t\"InterfaceOptionsFrameTab1Middle\",\n\t\"InterfaceOptionsFrameTab1MiddleDisabled\",\n\t\"InterfaceOptionsFrameTab1Right\",\n\t\"InterfaceOptionsFrameTab1RightDisabled\",\n\t\"InterfaceOptionsFrameTab1TabSpacer\",\n\t\"InterfaceOptionsFrameTab1Text\",\n\t\"InterfaceOptionsFrameTab2HighlightTexture\",\n\t\"InterfaceOptionsFrameTab2Left\",\n\t\"InterfaceOptionsFrameTab2LeftDisabled\",\n\t\"InterfaceOptionsFrameTab2Middle\",\n\t\"InterfaceOptionsFrameTab2MiddleDisabled\",\n\t\"InterfaceOptionsFrameTab2Right\",\n\t\"InterfaceOptionsFrameTab2RightDisabled\",\n\t\"InterfaceOptionsFrameTab2TabSpacer1\",\n\t\"InterfaceOptionsFrameTab2TabSpacer2\",\n\t\"InterfaceOptionsFrameTab2Text\",\n\t\"InterfaceOptionsHelpPanelBeginnerTooltipsText\",\n\t\"InterfaceOptionsHelpPanelEnhancedTooltipsText\",\n\t\"InterfaceOptionsHelpPanelLoadingScreenTipsText\",\n\t\"InterfaceOptionsHelpPanelResetTutorialsText\",\n\t\"InterfaceOptionsHelpPanelShowLuaErrorsText\",\n\t\"InterfaceOptionsHelpPanelShowTutorialsText\",\n\t\"InterfaceOptionsHelpPanelSubText\",\n\t\"InterfaceOptionsHelpPanelTitle\",\n\t\"InterfaceOptionsLanguagesPanelLocaleDropDownButtonDisabledTexture\",\n\t\"InterfaceOptionsLanguagesPanelLocaleDropDownButtonHighlightTexture\",\n\t\"InterfaceOptionsLanguagesPanelLocaleDropDownButtonNormalTexture\",\n\t\"InterfaceOptionsLanguagesPanelLocaleDropDownButtonPushedTexture\",\n\t\"InterfaceOptionsLanguagesPanelLocaleDropDownLabel\",\n\t\"InterfaceOptionsLanguagesPanelLocaleDropDownLeft\",\n\t\"InterfaceOptionsLanguagesPanelLocaleDropDownMiddle\",\n\t\"InterfaceOptionsLanguagesPanelLocaleDropDownRight\",\n\t\"InterfaceOptionsLanguagesPanelLocaleDropDownText\",\n\t\"InterfaceOptionsLanguagesPanelSubText\",\n\t\"InterfaceOptionsLanguagesPanelTitle\",\n\t\"InterfaceOptionsLanguagesPanelUseEnglishAudioText\",\n\t\"InterfaceOptionsMousePanelClickMoveStyleDropDownButtonDisabledTexture\",\n\t\"InterfaceOptionsMousePanelClickMoveStyleDropDownButtonHighlightTexture\",\n\t\"InterfaceOptionsMousePanelClickMoveStyleDropDownButtonNormalTexture\",\n\t\"InterfaceOptionsMousePanelClickMoveStyleDropDownButtonPushedTexture\",\n\t\"InterfaceOptionsMousePanelClickMoveStyleDropDownLabel\",\n\t\"InterfaceOptionsMousePanelClickMoveStyleDropDownLeft\",\n\t\"InterfaceOptionsMousePanelClickMoveStyleDropDownMiddle\",\n\t\"InterfaceOptionsMousePanelClickMoveStyleDropDownRight\",\n\t\"InterfaceOptionsMousePanelClickMoveStyleDropDownText\",\n\t\"InterfaceOptionsMousePanelClickToMoveText\",\n\t\"InterfaceOptionsMousePanelInvertMouseText\",\n\t\"InterfaceOptionsMousePanelMouseLookSpeedSliderHigh\",\n\t\"InterfaceOptionsMousePanelMouseLookSpeedSliderLow\",\n\t\"InterfaceOptionsMousePanelMouseLookSpeedSliderText\",\n\t\"InterfaceOptionsMousePanelMouseLookSpeedSliderThumb\",\n\t\"InterfaceOptionsMousePanelMouseSensitivitySliderHigh\",\n\t\"InterfaceOptionsMousePanelMouseSensitivitySliderLow\",\n\t\"InterfaceOptionsMousePanelMouseSensitivitySliderText\",\n\t\"InterfaceOptionsMousePanelMouseSensitivitySliderThumb\",\n\t\"InterfaceOptionsMousePanelSubText\",\n\t\"InterfaceOptionsMousePanelTitle\",\n\t\"InterfaceOptionsMousePanelWoWMouseText\",\n\t\"InterfaceOptionsNamesPanelEnemyGuardiansText\",\n\t\"InterfaceOptionsNamesPanelEnemyPetsText\",\n\t\"InterfaceOptionsNamesPanelEnemyPlayerNamesText\",\n\t\"InterfaceOptionsNamesPanelEnemyTotemsText\",\n\t\"InterfaceOptionsNamesPanelFriendlyGuardiansText\",\n\t\"InterfaceOptionsNamesPanelFriendlyPetsText\",\n\t\"InterfaceOptionsNamesPanelFriendlyPlayerNamesText\",\n\t\"InterfaceOptionsNamesPanelFriendlyTotemsText\",\n\t\"InterfaceOptionsNamesPanelGuildsText\",\n\t\"InterfaceOptionsNamesPanelMyNameText\",\n\t\"InterfaceOptionsNamesPanelNPCNamesText\",\n\t\"InterfaceOptionsNamesPanelNonCombatCreatureText\",\n\t\"InterfaceOptionsNamesPanelSubText\",\n\t\"InterfaceOptionsNamesPanelTitle\",\n\t\"InterfaceOptionsNamesPanelTitlesText\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesAllowOverlapText\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesEnemiesText\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesEnemyGuardiansText\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesEnemyPetsText\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesEnemyTotemsText\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesFriendlyGuardiansText\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesFriendlyPetsText\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesFriendlyTotemsText\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesFriendsText\",\n\t\"InterfaceOptionsNamesPanelUnitNameplatesTitle\",\n\t\"InterfaceOptionsObjectivesPanelAdvancedWorldMapText\",\n\t\"InterfaceOptionsObjectivesPanelAutoQuestProgressText\",\n\t\"InterfaceOptionsObjectivesPanelAutoQuestTrackingText\",\n\t\"InterfaceOptionsObjectivesPanelInstantQuestTextText\",\n\t\"InterfaceOptionsObjectivesPanelMapQuestDifficultyText\",\n\t\"InterfaceOptionsObjectivesPanelSubText\",\n\t\"InterfaceOptionsObjectivesPanelTitle\",\n\t\"InterfaceOptionsObjectivesPanelWatchFrameWidthText\",\n\t\"InterfaceOptionsSocialPanelChatBubblesText\",\n\t\"InterfaceOptionsSocialPanelChatHoverDelayText\",\n\t\"InterfaceOptionsSocialPanelChatMouseScrollText\",\n\t\"InterfaceOptionsSocialPanelChatStyleButtonDisabledTexture\",\n\t\"InterfaceOptionsSocialPanelChatStyleButtonHighlightTexture\",\n\t\"InterfaceOptionsSocialPanelChatStyleButtonNormalTexture\",\n\t\"InterfaceOptionsSocialPanelChatStyleButtonPushedTexture\",\n\t\"InterfaceOptionsSocialPanelChatStyleLabel\",\n\t\"InterfaceOptionsSocialPanelChatStyleLeft\",\n\t\"InterfaceOptionsSocialPanelChatStyleMiddle\",\n\t\"InterfaceOptionsSocialPanelChatStyleRight\",\n\t\"InterfaceOptionsSocialPanelChatStyleText\",\n\t\"InterfaceOptionsSocialPanelConversationModeButtonDisabledTexture\",\n\t\"InterfaceOptionsSocialPanelConversationModeButtonHighlightTexture\",\n\t\"InterfaceOptionsSocialPanelConversationModeButtonNormalTexture\",\n\t\"InterfaceOptionsSocialPanelConversationModeButtonPushedTexture\",\n\t\"InterfaceOptionsSocialPanelConversationModeLabel\",\n\t\"InterfaceOptionsSocialPanelConversationModeLeft\",\n\t\"InterfaceOptionsSocialPanelConversationModeMiddle\",\n\t\"InterfaceOptionsSocialPanelConversationModeRight\",\n\t\"InterfaceOptionsSocialPanelConversationModeText\",\n\t\"InterfaceOptionsSocialPanelGuildMemberAlertText\",\n\t\"InterfaceOptionsSocialPanelGuildRecruitmentText\",\n\t\"InterfaceOptionsSocialPanelPartyChatText\",\n\t\"InterfaceOptionsSocialPanelProfanityFilterText\",\n\t\"InterfaceOptionsSocialPanelSpamFilterText\",\n\t\"InterfaceOptionsSocialPanelSubText\",\n\t\"InterfaceOptionsSocialPanelTimestampsButtonDisabledTexture\",\n\t\"InterfaceOptionsSocialPanelTimestampsButtonHighlightTexture\",\n\t\"InterfaceOptionsSocialPanelTimestampsButtonNormalTexture\",\n\t\"InterfaceOptionsSocialPanelTimestampsButtonPushedTexture\",\n\t\"InterfaceOptionsSocialPanelTimestampsLabel\",\n\t\"InterfaceOptionsSocialPanelTimestampsLeft\",\n\t\"InterfaceOptionsSocialPanelTimestampsMiddle\",\n\t\"InterfaceOptionsSocialPanelTimestampsRight\",\n\t\"InterfaceOptionsSocialPanelTimestampsText\",\n\t\"InterfaceOptionsSocialPanelTitle\",\n\t\"InterfaceOptionsSocialPanelWholeChatWindowClickableText\",\n\t\"InterfaceOptionsStatusTextPanelPartyText\",\n\t\"InterfaceOptionsStatusTextPanelPercentagesText\",\n\t\"InterfaceOptionsStatusTextPanelPetText\",\n\t\"InterfaceOptionsStatusTextPanelPlayerText\",\n\t\"InterfaceOptionsStatusTextPanelSubText\",\n\t\"InterfaceOptionsStatusTextPanelTargetText\",\n\t\"InterfaceOptionsStatusTextPanelTitle\",\n\t\"InterfaceOptionsStatusTextPanelXPText\",\n\t\"InterfaceOptionsUnitFramePanelArenaEnemyCastBarText\",\n\t\"InterfaceOptionsUnitFramePanelArenaEnemyFramesText\",\n\t\"InterfaceOptionsUnitFramePanelArenaEnemyPetsText\",\n\t\"InterfaceOptionsUnitFramePanelFullSizeFocusFrameText\",\n\t\"InterfaceOptionsUnitFramePanelPartyBackgroundText\",\n\t\"InterfaceOptionsUnitFramePanelPartyInRaidText\",\n\t\"InterfaceOptionsUnitFramePanelPartyPetsText\",\n\t\"InterfaceOptionsUnitFramePanelRaidRangeText\",\n\t\"InterfaceOptionsUnitFramePanelSubText\",\n\t\"InterfaceOptionsUnitFramePanelTitle\",\n\t\"InvoiceFont_Med\",\n\t\"InvoiceFont_Small\",\n\t\"InvoiceTextFontNormal\",\n\t\"InvoiceTextFontSmall\",\n\t\"ItemRefShoppingTooltip1TextLeft1\",\n\t\"ItemRefShoppingTooltip1TextLeft2\",\n\t\"ItemRefShoppingTooltip1TextLeft3\",\n\t\"ItemRefShoppingTooltip1TextLeft4\",\n\t\"ItemRefShoppingTooltip1TextRight1\",\n\t\"ItemRefShoppingTooltip1TextRight2\",\n\t\"ItemRefShoppingTooltip1TextRight3\",\n\t\"ItemRefShoppingTooltip1TextRight4\",\n\t\"ItemRefShoppingTooltip1Texture1\",\n\t\"ItemRefShoppingTooltip1Texture2\",\n\t\"ItemRefShoppingTooltip1Texture3\",\n\t\"ItemRefShoppingTooltip2TextLeft1\",\n\t\"ItemRefShoppingTooltip2TextLeft2\",\n\t\"ItemRefShoppingTooltip2TextLeft3\",\n\t\"ItemRefShoppingTooltip2TextLeft4\",\n\t\"ItemRefShoppingTooltip2TextRight1\",\n\t\"ItemRefShoppingTooltip2TextRight2\",\n\t\"ItemRefShoppingTooltip2TextRight3\",\n\t\"ItemRefShoppingTooltip2TextRight4\",\n\t\"ItemRefShoppingTooltip2Texture1\",\n\t\"ItemRefShoppingTooltip2Texture2\",\n\t\"ItemRefShoppingTooltip2Texture3\",\n\t\"ItemRefShoppingTooltip3TextLeft1\",\n\t\"ItemRefShoppingTooltip3TextLeft2\",\n\t\"ItemRefShoppingTooltip3TextLeft3\",\n\t\"ItemRefShoppingTooltip3TextLeft4\",\n\t\"ItemRefShoppingTooltip3TextRight1\",\n\t\"ItemRefShoppingTooltip3TextRight2\",\n\t\"ItemRefShoppingTooltip3TextRight3\",\n\t\"ItemRefShoppingTooltip3TextRight4\",\n\t\"ItemRefShoppingTooltip3Texture1\",\n\t\"ItemRefShoppingTooltip3Texture2\",\n\t\"ItemRefShoppingTooltip3Texture3\",\n\t\"ItemRefTooltipStatusBarTexture\",\n\t\"ItemRefTooltipTextLeft1\",\n\t\"ItemRefTooltipTextLeft2\",\n\t\"ItemRefTooltipTextLeft3\",\n\t\"ItemRefTooltipTextLeft4\",\n\t\"ItemRefTooltipTextLeft5\",\n\t\"ItemRefTooltipTextLeft6\",\n\t\"ItemRefTooltipTextLeft7\",\n\t\"ItemRefTooltipTextLeft8\",\n\t\"ItemRefTooltipTextRight1\",\n\t\"ItemRefTooltipTextRight2\",\n\t\"ItemRefTooltipTextRight3\",\n\t\"ItemRefTooltipTextRight4\",\n\t\"ItemRefTooltipTextRight5\",\n\t\"ItemRefTooltipTextRight6\",\n\t\"ItemRefTooltipTextRight7\",\n\t\"ItemRefTooltipTextRight8\",\n\t\"ItemRefTooltipTexture1\",\n\t\"ItemRefTooltipTexture10\",\n\t\"ItemRefTooltipTexture2\",\n\t\"ItemRefTooltipTexture3\",\n\t\"ItemRefTooltipTexture4\",\n\t\"ItemRefTooltipTexture5\",\n\t\"ItemRefTooltipTexture6\",\n\t\"ItemRefTooltipTexture7\",\n\t\"ItemRefTooltipTexture8\",\n\t\"ItemRefTooltipTexture9\",\n\t\"ItemTextCurrentPage\",\n\t\"ItemTextFontNormal\",\n\t\"ItemTextMaterialBotLeft\",\n\t\"ItemTextMaterialBotRight\",\n\t\"ItemTextMaterialTopLeft\",\n\t\"ItemTextMaterialTopRight\",\n\t\"ItemTextScrollFrameBottom\",\n\t\"ItemTextScrollFrameMiddle\",\n\t\"ItemTextScrollFrameScrollBarThumbTexture\",\n\t\"ItemTextScrollFrameTop\",\n\t\"ItemTextTitleText\",\n\t\"KnowledgeBaseArticleListFrameCount\",\n\t\"KnowledgeBaseArticleListFrameNextButtonText\",\n\t\"KnowledgeBaseArticleListFramePreviousButtonText\",\n\t\"KnowledgeBaseArticleListFrameTitle\",\n\t\"KnowledgeBaseArticleListItem10HotIcon\",\n\t\"KnowledgeBaseArticleListItem10Number\",\n\t\"KnowledgeBaseArticleListItem10Title\",\n\t\"KnowledgeBaseArticleListItem10UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem11HotIcon\",\n\t\"KnowledgeBaseArticleListItem11Number\",\n\t\"KnowledgeBaseArticleListItem11Title\",\n\t\"KnowledgeBaseArticleListItem11UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem12HotIcon\",\n\t\"KnowledgeBaseArticleListItem12Number\",\n\t\"KnowledgeBaseArticleListItem12Title\",\n\t\"KnowledgeBaseArticleListItem12UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem13HotIcon\",\n\t\"KnowledgeBaseArticleListItem13Number\",\n\t\"KnowledgeBaseArticleListItem13Title\",\n\t\"KnowledgeBaseArticleListItem13UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem14HotIcon\",\n\t\"KnowledgeBaseArticleListItem14Number\",\n\t\"KnowledgeBaseArticleListItem14Title\",\n\t\"KnowledgeBaseArticleListItem14UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem15HotIcon\",\n\t\"KnowledgeBaseArticleListItem15Number\",\n\t\"KnowledgeBaseArticleListItem15Title\",\n\t\"KnowledgeBaseArticleListItem15UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem16HotIcon\",\n\t\"KnowledgeBaseArticleListItem16Number\",\n\t\"KnowledgeBaseArticleListItem16Title\",\n\t\"KnowledgeBaseArticleListItem16UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem17HotIcon\",\n\t\"KnowledgeBaseArticleListItem17Number\",\n\t\"KnowledgeBaseArticleListItem17Title\",\n\t\"KnowledgeBaseArticleListItem17UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem18HotIcon\",\n\t\"KnowledgeBaseArticleListItem18Number\",\n\t\"KnowledgeBaseArticleListItem18Title\",\n\t\"KnowledgeBaseArticleListItem18UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem19HotIcon\",\n\t\"KnowledgeBaseArticleListItem19Number\",\n\t\"KnowledgeBaseArticleListItem19Title\",\n\t\"KnowledgeBaseArticleListItem19UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem1HotIcon\",\n\t\"KnowledgeBaseArticleListItem1Number\",\n\t\"KnowledgeBaseArticleListItem1Title\",\n\t\"KnowledgeBaseArticleListItem1UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem20HotIcon\",\n\t\"KnowledgeBaseArticleListItem20Number\",\n\t\"KnowledgeBaseArticleListItem20Title\",\n\t\"KnowledgeBaseArticleListItem20UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem2HotIcon\",\n\t\"KnowledgeBaseArticleListItem2Number\",\n\t\"KnowledgeBaseArticleListItem2Title\",\n\t\"KnowledgeBaseArticleListItem2UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem3HotIcon\",\n\t\"KnowledgeBaseArticleListItem3Number\",\n\t\"KnowledgeBaseArticleListItem3Title\",\n\t\"KnowledgeBaseArticleListItem3UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem4HotIcon\",\n\t\"KnowledgeBaseArticleListItem4Number\",\n\t\"KnowledgeBaseArticleListItem4Title\",\n\t\"KnowledgeBaseArticleListItem4UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem5HotIcon\",\n\t\"KnowledgeBaseArticleListItem5Number\",\n\t\"KnowledgeBaseArticleListItem5Title\",\n\t\"KnowledgeBaseArticleListItem5UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem6HotIcon\",\n\t\"KnowledgeBaseArticleListItem6Number\",\n\t\"KnowledgeBaseArticleListItem6Title\",\n\t\"KnowledgeBaseArticleListItem6UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem7HotIcon\",\n\t\"KnowledgeBaseArticleListItem7Number\",\n\t\"KnowledgeBaseArticleListItem7Title\",\n\t\"KnowledgeBaseArticleListItem7UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem8HotIcon\",\n\t\"KnowledgeBaseArticleListItem8Number\",\n\t\"KnowledgeBaseArticleListItem8Title\",\n\t\"KnowledgeBaseArticleListItem8UpdatedIcon\",\n\t\"KnowledgeBaseArticleListItem9HotIcon\",\n\t\"KnowledgeBaseArticleListItem9Number\",\n\t\"KnowledgeBaseArticleListItem9Title\",\n\t\"KnowledgeBaseArticleListItem9UpdatedIcon\",\n\t\"KnowledgeBaseArticleScrollChildFrameArticleId\",\n\t\"KnowledgeBaseArticleScrollChildFrameBackButtonText\",\n\t\"KnowledgeBaseArticleScrollChildFrameText\",\n\t\"KnowledgeBaseArticleScrollChildFrameTitle\",\n\t\"KnowledgeBaseArticleScrollFrameScrollBarThumbTexture\",\n\t\"KnowledgeBaseErrorFrameText\",\n\t\"KnowledgeBaseFrameAbandonTicketText\",\n\t\"KnowledgeBaseFrameCancelText\",\n\t\"KnowledgeBaseFrameCategoryDropDownButtonDisabledTexture\",\n\t\"KnowledgeBaseFrameCategoryDropDownButtonHighlightTexture\",\n\t\"KnowledgeBaseFrameCategoryDropDownButtonNormalTexture\",\n\t\"KnowledgeBaseFrameCategoryDropDownButtonPushedTexture\",\n\t\"KnowledgeBaseFrameCategoryDropDownLeft\",\n\t\"KnowledgeBaseFrameCategoryDropDownMiddle\",\n\t\"KnowledgeBaseFrameCategoryDropDownRight\",\n\t\"KnowledgeBaseFrameCategoryDropDownText\",\n\t\"KnowledgeBaseFrameDivider2Left\",\n\t\"KnowledgeBaseFrameDivider2Middle\",\n\t\"KnowledgeBaseFrameDivider2Right\",\n\t\"KnowledgeBaseFrameDividerLeft\",\n\t\"KnowledgeBaseFrameDividerMiddle\",\n\t\"KnowledgeBaseFrameDividerRight\",\n\t\"KnowledgeBaseFrameEditBoxLeft\",\n\t\"KnowledgeBaseFrameEditBoxMiddle\",\n\t\"KnowledgeBaseFrameEditBoxRight\",\n\t\"KnowledgeBaseFrameEditTicketText\",\n\t\"KnowledgeBaseFrameGMTalkText\",\n\t\"KnowledgeBaseFrameHeader\",\n\t\"KnowledgeBaseFrameLagText\",\n\t\"KnowledgeBaseFrameReportIssueText\",\n\t\"KnowledgeBaseFrameSearchButtonText\",\n\t\"KnowledgeBaseFrameStuckText\",\n\t\"KnowledgeBaseFrameSubCategoryDropDownButtonDisabledTexture\",\n\t\"KnowledgeBaseFrameSubCategoryDropDownButtonHighlightTexture\",\n\t\"KnowledgeBaseFrameSubCategoryDropDownButtonNormalTexture\",\n\t\"KnowledgeBaseFrameSubCategoryDropDownButtonPushedTexture\",\n\t\"KnowledgeBaseFrameSubCategoryDropDownLeft\",\n\t\"KnowledgeBaseFrameSubCategoryDropDownMiddle\",\n\t\"KnowledgeBaseFrameSubCategoryDropDownRight\",\n\t\"KnowledgeBaseFrameSubCategoryDropDownText\",\n\t\"KnowledgeBaseFrameTopIssuesButtonText\",\n\t\"KnowledgeBaseMotdLabel\",\n\t\"KnowledgeBaseMotdText\",\n\t\"KnowledgeBaseServerMessageLabel\",\n\t\"KnowledgeBaseServerMessageText\",\n\t\"LFDDungeonReadyDialogBackground\",\n\t\"LFDDungeonReadyDialogBottomArt\",\n\t\"LFDDungeonReadyDialogEnterDungeonButtonLeft\",\n\t\"LFDDungeonReadyDialogEnterDungeonButtonMiddle\",\n\t\"LFDDungeonReadyDialogEnterDungeonButtonRight\",\n\t\"LFDDungeonReadyDialogEnterDungeonButtonText\",\n\t\"LFDDungeonReadyDialogFiligree\",\n\t\"LFDDungeonReadyDialogInstanceInfoFrameName\",\n\t\"LFDDungeonReadyDialogInstanceInfoFrameStatusText\",\n\t\"LFDDungeonReadyDialogLabel\",\n\t\"LFDDungeonReadyDialogLeaveQueueButtonLeft\",\n\t\"LFDDungeonReadyDialogLeaveQueueButtonMiddle\",\n\t\"LFDDungeonReadyDialogLeaveQueueButtonRight\",\n\t\"LFDDungeonReadyDialogLeaveQueueButtonText\",\n\t\"LFDDungeonReadyDialogRandomInProgressFrameStatusText\",\n\t\"LFDDungeonReadyDialogRewardsFrameLabel\",\n\t\"LFDDungeonReadyDialogRewardsFrameReward1Border\",\n\t\"LFDDungeonReadyDialogRewardsFrameReward1Texture\",\n\t\"LFDDungeonReadyDialogRewardsFrameReward2Border\",\n\t\"LFDDungeonReadyDialogRewardsFrameReward2Texture\",\n\t\"LFDDungeonReadyDialogRoleIconLeaderIcon\",\n\t\"LFDDungeonReadyDialogRoleIconTexture\",\n\t\"LFDDungeonReadyDialogRoleLabel\",\n\t\"LFDDungeonReadyDialogYourRoleDescription\",\n\t\"LFDDungeonReadyStatusLabel\",\n\t\"LFDDungeonReadyStatusPlayer1StatusIcon\",\n\t\"LFDDungeonReadyStatusPlayer1Texture\",\n\t\"LFDDungeonReadyStatusPlayer2StatusIcon\",\n\t\"LFDDungeonReadyStatusPlayer2Texture\",\n\t\"LFDDungeonReadyStatusPlayer3StatusIcon\",\n\t\"LFDDungeonReadyStatusPlayer3Texture\",\n\t\"LFDDungeonReadyStatusPlayer4StatusIcon\",\n\t\"LFDDungeonReadyStatusPlayer4Texture\",\n\t\"LFDDungeonReadyStatusPlayer5StatusIcon\",\n\t\"LFDDungeonReadyStatusPlayer5Texture\",\n\t\"LFDParentFramePortraitIcon\",\n\t\"LFDParentFramePortraitTexture\",\n\t\"LFDQueueFrameBackground\",\n\t\"LFDQueueFrameCancelButtonLeft\",\n\t\"LFDQueueFrameCancelButtonMiddle\",\n\t\"LFDQueueFrameCancelButtonRight\",\n\t\"LFDQueueFrameCancelButtonText\",\n\t\"LFDQueueFrameCooldownFrameBlackFilter\",\n\t\"LFDQueueFrameCooldownFrameDescription\",\n\t\"LFDQueueFrameCooldownFrameName1\",\n\t\"LFDQueueFrameCooldownFrameName2\",\n\t\"LFDQueueFrameCooldownFrameName3\",\n\t\"LFDQueueFrameCooldownFrameName4\",\n\t\"LFDQueueFrameCooldownFrameStatus1\",\n\t\"LFDQueueFrameCooldownFrameStatus2\",\n\t\"LFDQueueFrameCooldownFrameStatus3\",\n\t\"LFDQueueFrameCooldownFrameStatus4\",\n\t\"LFDQueueFrameCooldownFrameTime\",\n\t\"LFDQueueFrameFindGroupButtonLeft\",\n\t\"LFDQueueFrameFindGroupButtonMiddle\",\n\t\"LFDQueueFrameFindGroupButtonRight\",\n\t\"LFDQueueFrameFindGroupButtonText\",\n\t\"LFDQueueFrameLayout\",\n\t\"LFDQueueFrameNoLFDWhileLFRBlackFilter\",\n\t\"LFDQueueFrameNoLFDWhileLFRDescription\",\n\t\"LFDQueueFrameNoLFDWhileLFRLeaveQueueButtonLeft\",\n\t\"LFDQueueFrameNoLFDWhileLFRLeaveQueueButtonMiddle\",\n\t\"LFDQueueFrameNoLFDWhileLFRLeaveQueueButtonRight\",\n\t\"LFDQueueFrameNoLFDWhileLFRLeaveQueueButtonText\",\n\t\"LFDQueueFramePartyBackfillBackfillButtonLeft\",\n\t\"LFDQueueFramePartyBackfillBackfillButtonMiddle\",\n\t\"LFDQueueFramePartyBackfillBackfillButtonRight\",\n\t\"LFDQueueFramePartyBackfillBackfillButtonText\",\n\t\"LFDQueueFramePartyBackfillBlackFilter\",\n\t\"LFDQueueFramePartyBackfillDescription\",\n\t\"LFDQueueFramePartyBackfillNoBackfillButtonLeft\",\n\t\"LFDQueueFramePartyBackfillNoBackfillButtonMiddle\",\n\t\"LFDQueueFramePartyBackfillNoBackfillButtonRight\",\n\t\"LFDQueueFramePartyBackfillNoBackfillButtonText\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameDescription\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameItem1Count\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameItem1IconTexture\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameItem1Name\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameItem1NameFrame\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameMoneyFrameCopperButtonText\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameMoneyFrameGoldButtonText\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameMoneyFrameSilverButtonText\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameMoneyLabel\",\n\t\"LFDQueueFrameRandomScrollFrameChildFramePUGDescription\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameRewardsDescription\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameRewardsLabel\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameTitle\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameXPAmount\",\n\t\"LFDQueueFrameRandomScrollFrameChildFrameXPLabel\",\n\t\"LFDQueueFrameRandomScrollFrameScrollBackground\",\n\t\"LFDQueueFrameRandomScrollFrameScrollBackgroundBottomRight\",\n\t\"LFDQueueFrameRandomScrollFrameScrollBackgroundTopLeft\",\n\t\"LFDQueueFrameRandomScrollFrameScrollBarThumbTexture\",\n\t\"LFDQueueFrameRoleButtonDPSBackground\",\n\t\"LFDQueueFrameRoleButtonHealerBackground\",\n\t\"LFDQueueFrameRoleButtonTankBackground\",\n\t\"LFDQueueFrameSpecificListButton10ExpandOrCollapseButtonHighlight\",\n\t\"LFDQueueFrameSpecificListButton10HeroicIcon\",\n\t\"LFDQueueFrameSpecificListButton10InstanceLevel\",\n\t\"LFDQueueFrameSpecificListButton10InstanceName\",\n\t\"LFDQueueFrameSpecificListButton10LockedIndicator\",\n\t\"LFDQueueFrameSpecificListButton11ExpandOrCollapseButtonHighlight\",\n\t\"LFDQueueFrameSpecificListButton11HeroicIcon\",\n\t\"LFDQueueFrameSpecificListButton11InstanceLevel\",\n\t\"LFDQueueFrameSpecificListButton11InstanceName\",\n\t\"LFDQueueFrameSpecificListButton11LockedIndicator\",\n\t\"LFDQueueFrameSpecificListButton12ExpandOrCollapseButtonHighlight\",\n\t\"LFDQueueFrameSpecificListButton12HeroicIcon\",\n\t\"LFDQueueFrameSpecificListButton12InstanceLevel\",\n\t\"LFDQueueFrameSpecificListButton12InstanceName\",\n\t\"LFDQueueFrameSpecificListButton12LockedIndicator\",\n\t\"LFDQueueFrameSpecificListButton13ExpandOrCollapseButtonHighlight\",\n\t\"LFDQueueFrameSpecificListButton13HeroicIcon\",\n\t\"LFDQueueFrameSpecificListButton13InstanceLevel\",\n\t\"LFDQueueFrameSpecificListButton13InstanceName\",\n\t\"LFDQueueFrameSpecificListButton13LockedIndicator\",\n\t\"LFDQueueFrameSpecificListButton14ExpandOrCollapseButtonHighlight\",\n\t\"LFDQueueFrameSpecificListButton14HeroicIcon\",\n\t\"LFDQueueFrameSpecificListButton14InstanceLevel\",\n\t\"LFDQueueFrameSpecificListButton14InstanceName\",\n\t\"LFDQueueFrameSpecificListButton14LockedIndicator\",\n\t\"LFDQueueFrameSpecificListButton15ExpandOrCollapseButtonHighlight\",\n\t\"LFDQueueFrameSpecificListButton15HeroicIcon\",\n\t\"LFDQueueFrameSpecificListButton15InstanceLevel\",\n\t\"LFDQueueFrameSpecificListButton15InstanceName\",\n\t\"LFDQueueFrameSpecificListButton15LockedIndicator\",\n\t\"LFDQueueFrameSpecificListButton1ExpandOrCollapseButtonHighlight\",\n\t\"LFDQueueFrameSpecificListButton1HeroicIcon\",\n\t\"LFDQueueFrameSpecificListButton1InstanceLevel\",\n\t\"LFDQueueFrameSpecificListButton1InstanceName\",\n\t\"LFDQueueFrameSpecificListButton1LockedIndicator\",\n\t\"LFDQueueFrameSpecificListButton2ExpandOrCollapseButtonHighlight\",\n\t\"LFDQueueFrameSpecificListButton2HeroicIcon\",\n\t\"LFDQueueFrameSpecificListButton2InstanceLevel\",\n\t\"LFDQueueFrameSpecificListButton2InstanceName\",\n\t\"LFDQueueFrameSpecificListButton2LockedIndicator\",\n\t\"LFDQueueFrameSpecificListButton3ExpandOrCollapseButtonHighlight\",\n\t\"LFDQueueFrameSpecificListButton3HeroicIcon\",\n\t\"LFDQueueFrameSpecificListButton3InstanceLevel\",\n\t\"LFDQueueFrameSpecificListButton3InstanceName\",\n\t\"LFDQueueFrameSpecificListButton3LockedIndicator\",\n\t\"LFDQueueFrameSpecificListButton4ExpandOrCollapseButtonHighlight\",\n\t\"LFDQueueFrameSpecificListButton4HeroicIcon\",\n\t\"LFDQueueFrameSpecificListButton4InstanceLevel\",\n\t\"LFDQueueFrameSpecificListButton4InstanceName\",\n\t\"LFDQueueFrameSpecificListButton4LockedIndicator\",\n\t\"LFDQueueFrameSpecificListButton5ExpandOrCollapseButtonHighlight\",\n\t\"LFDQueueFrameSpecificListButton5HeroicIcon\",\n\t\"LFDQueueFrameSpecificListButton5InstanceLevel\",\n\t\"LFDQueueFrameSpecificListButton5InstanceName\",\n\t\"LFDQueueFrameSpecificListButton5LockedIndicator\",\n\t\"LFDQueueFrameSpecificListButton6ExpandOrCollapseButtonHighlight\",\n\t\"LFDQueueFrameSpecificListButton6HeroicIcon\",\n\t\"LFDQueueFrameSpecificListButton6InstanceLevel\",\n\t\"LFDQueueFrameSpecificListButton6InstanceName\",\n\t\"LFDQueueFrameSpecificListButton6LockedIndicator\",\n\t\"LFDQueueFrameSpecificListButton7ExpandOrCollapseButtonHighlight\",\n\t\"LFDQueueFrameSpecificListButton7HeroicIcon\",\n\t\"LFDQueueFrameSpecificListButton7InstanceLevel\",\n\t\"LFDQueueFrameSpecificListButton7InstanceName\",\n\t\"LFDQueueFrameSpecificListButton7LockedIndicator\",\n\t\"LFDQueueFrameSpecificListButton8ExpandOrCollapseButtonHighlight\",\n\t\"LFDQueueFrameSpecificListButton8HeroicIcon\",\n\t\"LFDQueueFrameSpecificListButton8InstanceLevel\",\n\t\"LFDQueueFrameSpecificListButton8InstanceName\",\n\t\"LFDQueueFrameSpecificListButton8LockedIndicator\",\n\t\"LFDQueueFrameSpecificListButton9ExpandOrCollapseButtonHighlight\",\n\t\"LFDQueueFrameSpecificListButton9HeroicIcon\",\n\t\"LFDQueueFrameSpecificListButton9InstanceLevel\",\n\t\"LFDQueueFrameSpecificListButton9InstanceName\",\n\t\"LFDQueueFrameSpecificListButton9LockedIndicator\",\n\t\"LFDQueueFrameSpecificListScrollFrameScrollBackgroundBottomRight\",\n\t\"LFDQueueFrameSpecificListScrollFrameScrollBackgroundTopLeft\",\n\t\"LFDQueueFrameSpecificListScrollFrameScrollBarThumbTexture\",\n\t\"LFDQueueFrameTitleText\",\n\t\"LFDQueueFrameTypeDropDownButtonDisabledTexture\",\n\t\"LFDQueueFrameTypeDropDownButtonHighlightTexture\",\n\t\"LFDQueueFrameTypeDropDownButtonNormalTexture\",\n\t\"LFDQueueFrameTypeDropDownButtonPushedTexture\",\n\t\"LFDQueueFrameTypeDropDownLeft\",\n\t\"LFDQueueFrameTypeDropDownMiddle\",\n\t\"LFDQueueFrameTypeDropDownName\",\n\t\"LFDQueueFrameTypeDropDownRight\",\n\t\"LFDQueueFrameTypeDropDownText\",\n\t\"LFDRoleCheckPopupAcceptButtonLeft\",\n\t\"LFDRoleCheckPopupAcceptButtonMiddle\",\n\t\"LFDRoleCheckPopupAcceptButtonRight\",\n\t\"LFDRoleCheckPopupAcceptButtonText\",\n\t\"LFDRoleCheckPopupDeclineButtonLeft\",\n\t\"LFDRoleCheckPopupDeclineButtonMiddle\",\n\t\"LFDRoleCheckPopupDeclineButtonRight\",\n\t\"LFDRoleCheckPopupDeclineButtonText\",\n\t\"LFDRoleCheckPopupDescriptionText\",\n\t\"LFDSearchStatusDamage1Texture\",\n\t\"LFDSearchStatusDamage2Texture\",\n\t\"LFDSearchStatusDamage3Texture\",\n\t\"LFDSearchStatusElapsedWaitTime\",\n\t\"LFDSearchStatusHealer1Texture\",\n\t\"LFDSearchStatusLookingFor\",\n\t\"LFDSearchStatusRoleIcon1\",\n\t\"LFDSearchStatusRoleIcon2\",\n\t\"LFDSearchStatusRoleIcon3\",\n\t\"LFDSearchStatusStatistic\",\n\t\"LFDSearchStatusTank1Texture\",\n\t\"LFDSearchStatusTitle\",\n\t\"LFRBrowseFrameColumnHeader1HighlightTexture\",\n\t\"LFRBrowseFrameColumnHeader1Left\",\n\t\"LFRBrowseFrameColumnHeader1Middle\",\n\t\"LFRBrowseFrameColumnHeader1Right\",\n\t\"LFRBrowseFrameColumnHeader2HighlightTexture\",\n\t\"LFRBrowseFrameColumnHeader2Left\",\n\t\"LFRBrowseFrameColumnHeader2Middle\",\n\t\"LFRBrowseFrameColumnHeader2Right\",\n\t\"LFRBrowseFrameColumnHeader3HighlightTexture\",\n\t\"LFRBrowseFrameColumnHeader3Left\",\n\t\"LFRBrowseFrameColumnHeader3Middle\",\n\t\"LFRBrowseFrameColumnHeader3Right\",\n\t\"LFRBrowseFrameColumnHeader4HighlightTexture\",\n\t\"LFRBrowseFrameColumnHeader4Icon\",\n\t\"LFRBrowseFrameColumnHeader4Left\",\n\t\"LFRBrowseFrameColumnHeader4Middle\",\n\t\"LFRBrowseFrameColumnHeader4Right\",\n\t\"LFRBrowseFrameColumnHeader5HighlightTexture\",\n\t\"LFRBrowseFrameColumnHeader5Icon\",\n\t\"LFRBrowseFrameColumnHeader5Left\",\n\t\"LFRBrowseFrameColumnHeader5Middle\",\n\t\"LFRBrowseFrameColumnHeader5Right\",\n\t\"LFRBrowseFrameColumnHeader6HighlightTexture\",\n\t\"LFRBrowseFrameColumnHeader6Icon\",\n\t\"LFRBrowseFrameColumnHeader6Left\",\n\t\"LFRBrowseFrameColumnHeader6Middle\",\n\t\"LFRBrowseFrameColumnHeader6Right\",\n\t\"LFRBrowseFrameColumnHeader7HighlightTexture\",\n\t\"LFRBrowseFrameColumnHeader7Icon\",\n\t\"LFRBrowseFrameColumnHeader7Left\",\n\t\"LFRBrowseFrameColumnHeader7Middle\",\n\t\"LFRBrowseFrameColumnHeader7Right\",\n\t\"LFRBrowseFrameInviteButtonLeft\",\n\t\"LFRBrowseFrameInviteButtonMiddle\",\n\t\"LFRBrowseFrameInviteButtonRight\",\n\t\"LFRBrowseFrameInviteButtonText\",\n\t\"LFRBrowseFrameLayout\",\n\t\"LFRBrowseFrameListButton10Class\",\n\t\"LFRBrowseFrameListButton10Level\",\n\t\"LFRBrowseFrameListButton10Name\",\n\t\"LFRBrowseFrameListButton10PartyIcon\",\n\t\"LFRBrowseFrameListButton10RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton10RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton10RoleTankIcon\",\n\t\"LFRBrowseFrameListButton11Class\",\n\t\"LFRBrowseFrameListButton11Level\",\n\t\"LFRBrowseFrameListButton11Name\",\n\t\"LFRBrowseFrameListButton11PartyIcon\",\n\t\"LFRBrowseFrameListButton11RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton11RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton11RoleTankIcon\",\n\t\"LFRBrowseFrameListButton12Class\",\n\t\"LFRBrowseFrameListButton12Level\",\n\t\"LFRBrowseFrameListButton12Name\",\n\t\"LFRBrowseFrameListButton12PartyIcon\",\n\t\"LFRBrowseFrameListButton12RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton12RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton12RoleTankIcon\",\n\t\"LFRBrowseFrameListButton13Class\",\n\t\"LFRBrowseFrameListButton13Level\",\n\t\"LFRBrowseFrameListButton13Name\",\n\t\"LFRBrowseFrameListButton13PartyIcon\",\n\t\"LFRBrowseFrameListButton13RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton13RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton13RoleTankIcon\",\n\t\"LFRBrowseFrameListButton14Class\",\n\t\"LFRBrowseFrameListButton14Level\",\n\t\"LFRBrowseFrameListButton14Name\",\n\t\"LFRBrowseFrameListButton14PartyIcon\",\n\t\"LFRBrowseFrameListButton14RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton14RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton14RoleTankIcon\",\n\t\"LFRBrowseFrameListButton15Class\",\n\t\"LFRBrowseFrameListButton15Level\",\n\t\"LFRBrowseFrameListButton15Name\",\n\t\"LFRBrowseFrameListButton15PartyIcon\",\n\t\"LFRBrowseFrameListButton15RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton15RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton15RoleTankIcon\",\n\t\"LFRBrowseFrameListButton16Class\",\n\t\"LFRBrowseFrameListButton16Level\",\n\t\"LFRBrowseFrameListButton16Name\",\n\t\"LFRBrowseFrameListButton16PartyIcon\",\n\t\"LFRBrowseFrameListButton16RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton16RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton16RoleTankIcon\",\n\t\"LFRBrowseFrameListButton17Class\",\n\t\"LFRBrowseFrameListButton17Level\",\n\t\"LFRBrowseFrameListButton17Name\",\n\t\"LFRBrowseFrameListButton17PartyIcon\",\n\t\"LFRBrowseFrameListButton17RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton17RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton17RoleTankIcon\",\n\t\"LFRBrowseFrameListButton18Class\",\n\t\"LFRBrowseFrameListButton18Level\",\n\t\"LFRBrowseFrameListButton18Name\",\n\t\"LFRBrowseFrameListButton18PartyIcon\",\n\t\"LFRBrowseFrameListButton18RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton18RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton18RoleTankIcon\",\n\t\"LFRBrowseFrameListButton19Class\",\n\t\"LFRBrowseFrameListButton19Level\",\n\t\"LFRBrowseFrameListButton19Name\",\n\t\"LFRBrowseFrameListButton19PartyIcon\",\n\t\"LFRBrowseFrameListButton19RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton19RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton19RoleTankIcon\",\n\t\"LFRBrowseFrameListButton1Class\",\n\t\"LFRBrowseFrameListButton1Level\",\n\t\"LFRBrowseFrameListButton1Name\",\n\t\"LFRBrowseFrameListButton1PartyIcon\",\n\t\"LFRBrowseFrameListButton1RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton1RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton1RoleTankIcon\",\n\t\"LFRBrowseFrameListButton2Class\",\n\t\"LFRBrowseFrameListButton2Level\",\n\t\"LFRBrowseFrameListButton2Name\",\n\t\"LFRBrowseFrameListButton2PartyIcon\",\n\t\"LFRBrowseFrameListButton2RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton2RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton2RoleTankIcon\",\n\t\"LFRBrowseFrameListButton3Class\",\n\t\"LFRBrowseFrameListButton3Level\",\n\t\"LFRBrowseFrameListButton3Name\",\n\t\"LFRBrowseFrameListButton3PartyIcon\",\n\t\"LFRBrowseFrameListButton3RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton3RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton3RoleTankIcon\",\n\t\"LFRBrowseFrameListButton4Class\",\n\t\"LFRBrowseFrameListButton4Level\",\n\t\"LFRBrowseFrameListButton4Name\",\n\t\"LFRBrowseFrameListButton4PartyIcon\",\n\t\"LFRBrowseFrameListButton4RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton4RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton4RoleTankIcon\",\n\t\"LFRBrowseFrameListButton5Class\",\n\t\"LFRBrowseFrameListButton5Level\",\n\t\"LFRBrowseFrameListButton5Name\",\n\t\"LFRBrowseFrameListButton5PartyIcon\",\n\t\"LFRBrowseFrameListButton5RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton5RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton5RoleTankIcon\",\n\t\"LFRBrowseFrameListButton6Class\",\n\t\"LFRBrowseFrameListButton6Level\",\n\t\"LFRBrowseFrameListButton6Name\",\n\t\"LFRBrowseFrameListButton6PartyIcon\",\n\t\"LFRBrowseFrameListButton6RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton6RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton6RoleTankIcon\",\n\t\"LFRBrowseFrameListButton7Class\",\n\t\"LFRBrowseFrameListButton7Level\",\n\t\"LFRBrowseFrameListButton7Name\",\n\t\"LFRBrowseFrameListButton7PartyIcon\",\n\t\"LFRBrowseFrameListButton7RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton7RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton7RoleTankIcon\",\n\t\"LFRBrowseFrameListButton8Class\",\n\t\"LFRBrowseFrameListButton8Level\",\n\t\"LFRBrowseFrameListButton8Name\",\n\t\"LFRBrowseFrameListButton8PartyIcon\",\n\t\"LFRBrowseFrameListButton8RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton8RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton8RoleTankIcon\",\n\t\"LFRBrowseFrameListButton9Class\",\n\t\"LFRBrowseFrameListButton9Level\",\n\t\"LFRBrowseFrameListButton9Name\",\n\t\"LFRBrowseFrameListButton9PartyIcon\",\n\t\"LFRBrowseFrameListButton9RoleDamageIcon\",\n\t\"LFRBrowseFrameListButton9RoleHealerIcon\",\n\t\"LFRBrowseFrameListButton9RoleTankIcon\",\n\t\"LFRBrowseFrameListScrollFrameScrollBarThumbTexture\",\n\t\"LFRBrowseFrameRaidDropDownButtonDisabledTexture\",\n\t\"LFRBrowseFrameRaidDropDownButtonHighlightTexture\",\n\t\"LFRBrowseFrameRaidDropDownButtonNormalTexture\",\n\t\"LFRBrowseFrameRaidDropDownButtonPushedTexture\",\n\t\"LFRBrowseFrameRaidDropDownLeft\",\n\t\"LFRBrowseFrameRaidDropDownMiddle\",\n\t\"LFRBrowseFrameRaidDropDownName\",\n\t\"LFRBrowseFrameRaidDropDownRight\",\n\t\"LFRBrowseFrameRaidDropDownText\",\n\t\"LFRBrowseFrameRefreshButtonLeft\",\n\t\"LFRBrowseFrameRefreshButtonMiddle\",\n\t\"LFRBrowseFrameRefreshButtonRight\",\n\t\"LFRBrowseFrameRefreshButtonText\",\n\t\"LFRBrowseFrameSendMessageButtonLeft\",\n\t\"LFRBrowseFrameSendMessageButtonMiddle\",\n\t\"LFRBrowseFrameSendMessageButtonRight\",\n\t\"LFRBrowseFrameSendMessageButtonText\",\n\t\"LFRBrowseFrameTitleText\",\n\t\"LFRParentFrameIcon\",\n\t\"LFRParentFrameTab1HighlightTexture\",\n\t\"LFRParentFrameTab1Left\",\n\t\"LFRParentFrameTab1LeftDisabled\",\n\t\"LFRParentFrameTab1Middle\",\n\t\"LFRParentFrameTab1MiddleDisabled\",\n\t\"LFRParentFrameTab1Right\",\n\t\"LFRParentFrameTab1RightDisabled\",\n\t\"LFRParentFrameTab1Text\",\n\t\"LFRParentFrameTab2HighlightTexture\",\n\t\"LFRParentFrameTab2Left\",\n\t\"LFRParentFrameTab2LeftDisabled\",\n\t\"LFRParentFrameTab2Middle\",\n\t\"LFRParentFrameTab2MiddleDisabled\",\n\t\"LFRParentFrameTab2Right\",\n\t\"LFRParentFrameTab2RightDisabled\",\n\t\"LFRParentFrameTab2Text\",\n\t\"LFRQueueFrameAcceptCommentButtonLeft\",\n\t\"LFRQueueFrameAcceptCommentButtonMiddle\",\n\t\"LFRQueueFrameAcceptCommentButtonRight\",\n\t\"LFRQueueFrameAcceptCommentButtonText\",\n\t\"LFRQueueFrameCommentExplanation\",\n\t\"LFRQueueFrameFindGroupButtonLeft\",\n\t\"LFRQueueFrameFindGroupButtonMiddle\",\n\t\"LFRQueueFrameFindGroupButtonRight\",\n\t\"LFRQueueFrameFindGroupButtonText\",\n\t\"LFRQueueFrameLayout\",\n\t\"LFRQueueFrameNoLFRWhileLFDBlackFilter\",\n\t\"LFRQueueFrameNoLFRWhileLFDDescription\",\n\t\"LFRQueueFrameNoLFRWhileLFDLeaveQueueButtonLeft\",\n\t\"LFRQueueFrameNoLFRWhileLFDLeaveQueueButtonMiddle\",\n\t\"LFRQueueFrameNoLFRWhileLFDLeaveQueueButtonRight\",\n\t\"LFRQueueFrameNoLFRWhileLFDLeaveQueueButtonText\",\n\t\"LFRQueueFrameRoleButtonDPSBackground\",\n\t\"LFRQueueFrameRoleButtonHealerBackground\",\n\t\"LFRQueueFrameRoleButtonTankBackground\",\n\t\"LFRQueueFrameSpecificListButton10ExpandOrCollapseButtonHighlight\",\n\t\"LFRQueueFrameSpecificListButton10HeroicIcon\",\n\t\"LFRQueueFrameSpecificListButton10InstanceLevel\",\n\t\"LFRQueueFrameSpecificListButton10InstanceName\",\n\t\"LFRQueueFrameSpecificListButton10LockedIndicator\",\n\t\"LFRQueueFrameSpecificListButton11ExpandOrCollapseButtonHighlight\",\n\t\"LFRQueueFrameSpecificListButton11HeroicIcon\",\n\t\"LFRQueueFrameSpecificListButton11InstanceLevel\",\n\t\"LFRQueueFrameSpecificListButton11InstanceName\",\n\t\"LFRQueueFrameSpecificListButton11LockedIndicator\",\n\t\"LFRQueueFrameSpecificListButton12ExpandOrCollapseButtonHighlight\",\n\t\"LFRQueueFrameSpecificListButton12HeroicIcon\",\n\t\"LFRQueueFrameSpecificListButton12InstanceLevel\",\n\t\"LFRQueueFrameSpecificListButton12InstanceName\",\n\t\"LFRQueueFrameSpecificListButton12LockedIndicator\",\n\t\"LFRQueueFrameSpecificListButton13ExpandOrCollapseButtonHighlight\",\n\t\"LFRQueueFrameSpecificListButton13HeroicIcon\",\n\t\"LFRQueueFrameSpecificListButton13InstanceLevel\",\n\t\"LFRQueueFrameSpecificListButton13InstanceName\",\n\t\"LFRQueueFrameSpecificListButton13LockedIndicator\",\n\t\"LFRQueueFrameSpecificListButton14ExpandOrCollapseButtonHighlight\",\n\t\"LFRQueueFrameSpecificListButton14HeroicIcon\",\n\t\"LFRQueueFrameSpecificListButton14InstanceLevel\",\n\t\"LFRQueueFrameSpecificListButton14InstanceName\",\n\t\"LFRQueueFrameSpecificListButton14LockedIndicator\",\n\t\"LFRQueueFrameSpecificListButton1ExpandOrCollapseButtonHighlight\",\n\t\"LFRQueueFrameSpecificListButton1HeroicIcon\",\n\t\"LFRQueueFrameSpecificListButton1InstanceLevel\",\n\t\"LFRQueueFrameSpecificListButton1InstanceName\",\n\t\"LFRQueueFrameSpecificListButton1LockedIndicator\",\n\t\"LFRQueueFrameSpecificListButton2ExpandOrCollapseButtonHighlight\",\n\t\"LFRQueueFrameSpecificListButton2HeroicIcon\",\n\t\"LFRQueueFrameSpecificListButton2InstanceLevel\",\n\t\"LFRQueueFrameSpecificListButton2InstanceName\",\n\t\"LFRQueueFrameSpecificListButton2LockedIndicator\",\n\t\"LFRQueueFrameSpecificListButton3ExpandOrCollapseButtonHighlight\",\n\t\"LFRQueueFrameSpecificListButton3HeroicIcon\",\n\t\"LFRQueueFrameSpecificListButton3InstanceLevel\",\n\t\"LFRQueueFrameSpecificListButton3InstanceName\",\n\t\"LFRQueueFrameSpecificListButton3LockedIndicator\",\n\t\"LFRQueueFrameSpecificListButton4ExpandOrCollapseButtonHighlight\",\n\t\"LFRQueueFrameSpecificListButton4HeroicIcon\",\n\t\"LFRQueueFrameSpecificListButton4InstanceLevel\",\n\t\"LFRQueueFrameSpecificListButton4InstanceName\",\n\t\"LFRQueueFrameSpecificListButton4LockedIndicator\",\n\t\"LFRQueueFrameSpecificListButton5ExpandOrCollapseButtonHighlight\",\n\t\"LFRQueueFrameSpecificListButton5HeroicIcon\",\n\t\"LFRQueueFrameSpecificListButton5InstanceLevel\",\n\t\"LFRQueueFrameSpecificListButton5InstanceName\",\n\t\"LFRQueueFrameSpecificListButton5LockedIndicator\",\n\t\"LFRQueueFrameSpecificListButton6ExpandOrCollapseButtonHighlight\",\n\t\"LFRQueueFrameSpecificListButton6HeroicIcon\",\n\t\"LFRQueueFrameSpecificListButton6InstanceLevel\",\n\t\"LFRQueueFrameSpecificListButton6InstanceName\",\n\t\"LFRQueueFrameSpecificListButton6LockedIndicator\",\n\t\"LFRQueueFrameSpecificListButton7ExpandOrCollapseButtonHighlight\",\n\t\"LFRQueueFrameSpecificListButton7HeroicIcon\",\n\t\"LFRQueueFrameSpecificListButton7InstanceLevel\",\n\t\"LFRQueueFrameSpecificListButton7InstanceName\",\n\t\"LFRQueueFrameSpecificListButton7LockedIndicator\",\n\t\"LFRQueueFrameSpecificListButton8ExpandOrCollapseButtonHighlight\",\n\t\"LFRQueueFrameSpecificListButton8HeroicIcon\",\n\t\"LFRQueueFrameSpecificListButton8InstanceLevel\",\n\t\"LFRQueueFrameSpecificListButton8InstanceName\",\n\t\"LFRQueueFrameSpecificListButton8LockedIndicator\",\n\t\"LFRQueueFrameSpecificListButton9ExpandOrCollapseButtonHighlight\",\n\t\"LFRQueueFrameSpecificListButton9HeroicIcon\",\n\t\"LFRQueueFrameSpecificListButton9InstanceLevel\",\n\t\"LFRQueueFrameSpecificListButton9InstanceName\",\n\t\"LFRQueueFrameSpecificListButton9LockedIndicator\",\n\t\"LFRQueueFrameSpecificListScrollFrameScrollBackgroundBottomRight\",\n\t\"LFRQueueFrameSpecificListScrollFrameScrollBackgroundTopLeft\",\n\t\"LFRQueueFrameSpecificListScrollFrameScrollBarThumbTexture\",\n\t\"LFRQueueFrameSpecificNoRaidsAvailable\",\n\t\"LFRQueueFrameTitleText\",\n\t\"LanguageMenuButton10ShortcutText\",\n\t\"LanguageMenuButton11ShortcutText\",\n\t\"LanguageMenuButton12ShortcutText\",\n\t\"LanguageMenuButton13ShortcutText\",\n\t\"LanguageMenuButton14ShortcutText\",\n\t\"LanguageMenuButton15ShortcutText\",\n\t\"LanguageMenuButton16ShortcutText\",\n\t\"LanguageMenuButton17ShortcutText\",\n\t\"LanguageMenuButton18ShortcutText\",\n\t\"LanguageMenuButton19ShortcutText\",\n\t\"LanguageMenuButton1ShortcutText\",\n\t\"LanguageMenuButton20ShortcutText\",\n\t\"LanguageMenuButton21ShortcutText\",\n\t\"LanguageMenuButton22ShortcutText\",\n\t\"LanguageMenuButton23ShortcutText\",\n\t\"LanguageMenuButton24ShortcutText\",\n\t\"LanguageMenuButton25ShortcutText\",\n\t\"LanguageMenuButton26ShortcutText\",\n\t\"LanguageMenuButton27ShortcutText\",\n\t\"LanguageMenuButton28ShortcutText\",\n\t\"LanguageMenuButton29ShortcutText\",\n\t\"LanguageMenuButton2ShortcutText\",\n\t\"LanguageMenuButton30ShortcutText\",\n\t\"LanguageMenuButton31ShortcutText\",\n\t\"LanguageMenuButton32ShortcutText\",\n\t\"LanguageMenuButton3ShortcutText\",\n\t\"LanguageMenuButton4ShortcutText\",\n\t\"LanguageMenuButton5ShortcutText\",\n\t\"LanguageMenuButton6ShortcutText\",\n\t\"LanguageMenuButton7ShortcutText\",\n\t\"LanguageMenuButton8ShortcutText\",\n\t\"LanguageMenuButton9ShortcutText\",\n\t\"LootButton1Count\",\n\t\"LootButton1IconTexture\",\n\t\"LootButton1NameFrame\",\n\t\"LootButton1NormalTexture\",\n\t\"LootButton1Stock\",\n\t\"LootButton1Text\",\n\t\"LootButton2Count\",\n\t\"LootButton2IconTexture\",\n\t\"LootButton2NameFrame\",\n\t\"LootButton2NormalTexture\",\n\t\"LootButton2Stock\",\n\t\"LootButton2Text\",\n\t\"LootButton3Count\",\n\t\"LootButton3IconTexture\",\n\t\"LootButton3NameFrame\",\n\t\"LootButton3NormalTexture\",\n\t\"LootButton3Stock\",\n\t\"LootButton3Text\",\n\t\"LootButton4Count\",\n\t\"LootButton4IconTexture\",\n\t\"LootButton4NameFrame\",\n\t\"LootButton4NormalTexture\",\n\t\"LootButton4Stock\",\n\t\"LootButton4Text\",\n\t\"LootFrameNext\",\n\t\"LootFramePortraitOverlay\",\n\t\"LootFramePrev\",\n\t\"LowerBlackBar\",\n\t\"MacOptionsButtonCompressText\",\n\t\"MacOptionsButtonKeybindingsText\",\n\t\"MacOptionsCancelFrameFileName\",\n\t\"MacOptionsCancelFrameHeader\",\n\t\"MacOptionsCancelFrameNoText\",\n\t\"MacOptionsCancelFrameQuestion\",\n\t\"MacOptionsCancelFrameYesText\",\n\t\"MacOptionsCompressFrameCompressText\",\n\t\"MacOptionsCompressFrameDeleteText\",\n\t\"MacOptionsCompressFrameFileName\",\n\t\"MacOptionsCompressFrameHeader\",\n\t\"MacOptionsCompressFrameSkipText\",\n\t\"MacOptionsFrameCancelText\",\n\t\"MacOptionsFrameCheckButton1Text\",\n\t\"MacOptionsFrameCheckButton2Text\",\n\t\"MacOptionsFrameCheckButton3Text\",\n\t\"MacOptionsFrameCheckButton4Text\",\n\t\"MacOptionsFrameCheckButton5Text\",\n\t\"MacOptionsFrameCheckButton6Text\",\n\t\"MacOptionsFrameCheckButton7Text\",\n\t\"MacOptionsFrameCheckButton8Text\",\n\t\"MacOptionsFrameCodecDropDownButtonDisabledTexture\",\n\t\"MacOptionsFrameCodecDropDownButtonHighlightTexture\",\n\t\"MacOptionsFrameCodecDropDownButtonNormalTexture\",\n\t\"MacOptionsFrameCodecDropDownButtonPushedTexture\",\n\t\"MacOptionsFrameCodecDropDownLabel\",\n\t\"MacOptionsFrameCodecDropDownLeft\",\n\t\"MacOptionsFrameCodecDropDownMiddle\",\n\t\"MacOptionsFrameCodecDropDownRight\",\n\t\"MacOptionsFrameCodecDropDownText\",\n\t\"MacOptionsFrameFramerateDropDownButtonDisabledTexture\",\n\t\"MacOptionsFrameFramerateDropDownButtonHighlightTexture\",\n\t\"MacOptionsFrameFramerateDropDownButtonNormalTexture\",\n\t\"MacOptionsFrameFramerateDropDownButtonPushedTexture\",\n\t\"MacOptionsFrameFramerateDropDownLabel\",\n\t\"MacOptionsFrameFramerateDropDownLeft\",\n\t\"MacOptionsFrameFramerateDropDownMiddle\",\n\t\"MacOptionsFrameFramerateDropDownRight\",\n\t\"MacOptionsFrameFramerateDropDownText\",\n\t\"MacOptionsFrameHeader\",\n\t\"MacOptionsFrameMovieRecordingTitle\",\n\t\"MacOptionsFrameOkayText\",\n\t\"MacOptionsFrameQualitySliderHigh\",\n\t\"MacOptionsFrameQualitySliderLow\",\n\t\"MacOptionsFrameQualitySliderText\",\n\t\"MacOptionsFrameQualitySliderThumb\",\n\t\"MacOptionsFrameResolutionDropDownButtonDisabledTexture\",\n\t\"MacOptionsFrameResolutionDropDownButtonHighlightTexture\",\n\t\"MacOptionsFrameResolutionDropDownButtonNormalTexture\",\n\t\"MacOptionsFrameResolutionDropDownButtonPushedTexture\",\n\t\"MacOptionsFrameResolutionDropDownLabel\",\n\t\"MacOptionsFrameResolutionDropDownLeft\",\n\t\"MacOptionsFrameResolutionDropDownMiddle\",\n\t\"MacOptionsFrameResolutionDropDownRight\",\n\t\"MacOptionsFrameResolutionDropDownText\",\n\t\"MacOptionsFrameText1\",\n\t\"MacOptionsFrameText2\",\n\t\"MacOptionsFrameText3\",\n\t\"MacOptionsFrameText4\",\n\t\"MacOptionsITunesRemoteTitle\",\n\t\"MagicResText1\",\n\t\"MagicResText2\",\n\t\"MagicResText3\",\n\t\"MagicResText4\",\n\t\"MagicResText5\",\n\t\"MailFont_Large\",\n\t\"MailFrameBotLeft\",\n\t\"MailFrameBotRight\",\n\t\"MailFrameTab1HighlightTexture\",\n\t\"MailFrameTab1Left\",\n\t\"MailFrameTab1LeftDisabled\",\n\t\"MailFrameTab1Middle\",\n\t\"MailFrameTab1MiddleDisabled\",\n\t\"MailFrameTab1Right\",\n\t\"MailFrameTab1RightDisabled\",\n\t\"MailFrameTab1Text\",\n\t\"MailFrameTab2HighlightTexture\",\n\t\"MailFrameTab2Left\",\n\t\"MailFrameTab2LeftDisabled\",\n\t\"MailFrameTab2Middle\",\n\t\"MailFrameTab2MiddleDisabled\",\n\t\"MailFrameTab2Right\",\n\t\"MailFrameTab2RightDisabled\",\n\t\"MailFrameTab2Text\",\n\t\"MailFrameTopLeft\",\n\t\"MailFrameTopRight\",\n\t\"MailItem1ButtonCOD\",\n\t\"MailItem1ButtonCODBackground\",\n\t\"MailItem1ButtonCount\",\n\t\"MailItem1ButtonIcon\",\n\t\"MailItem1ButtonSlot\",\n\t\"MailItem1Sender\",\n\t\"MailItem1Subject\",\n\t\"MailItem2ButtonCOD\",\n\t\"MailItem2ButtonCODBackground\",\n\t\"MailItem2ButtonCount\",\n\t\"MailItem2ButtonIcon\",\n\t\"MailItem2ButtonSlot\",\n\t\"MailItem2Sender\",\n\t\"MailItem2Subject\",\n\t\"MailItem3ButtonCOD\",\n\t\"MailItem3ButtonCODBackground\",\n\t\"MailItem3ButtonCount\",\n\t\"MailItem3ButtonIcon\",\n\t\"MailItem3ButtonSlot\",\n\t\"MailItem3Sender\",\n\t\"MailItem3Subject\",\n\t\"MailItem4ButtonCOD\",\n\t\"MailItem4ButtonCODBackground\",\n\t\"MailItem4ButtonCount\",\n\t\"MailItem4ButtonIcon\",\n\t\"MailItem4ButtonSlot\",\n\t\"MailItem4Sender\",\n\t\"MailItem4Subject\",\n\t\"MailItem5ButtonCOD\",\n\t\"MailItem5ButtonCODBackground\",\n\t\"MailItem5ButtonCount\",\n\t\"MailItem5ButtonIcon\",\n\t\"MailItem5ButtonSlot\",\n\t\"MailItem5Sender\",\n\t\"MailItem5Subject\",\n\t\"MailItem6ButtonCOD\",\n\t\"MailItem6ButtonCODBackground\",\n\t\"MailItem6ButtonCount\",\n\t\"MailItem6ButtonIcon\",\n\t\"MailItem6ButtonSlot\",\n\t\"MailItem6Sender\",\n\t\"MailItem6Subject\",\n\t\"MailItem7ButtonCOD\",\n\t\"MailItem7ButtonCODBackground\",\n\t\"MailItem7ButtonCount\",\n\t\"MailItem7ButtonIcon\",\n\t\"MailItem7ButtonSlot\",\n\t\"MailItem7Sender\",\n\t\"MailItem7Subject\",\n\t\"MailTextFontNormal\",\n\t\"MainMenuBarBackpackButtonCount\",\n\t\"MainMenuBarBackpackButtonIconTexture\",\n\t\"MainMenuBarBackpackButtonNormalTexture\",\n\t\"MainMenuBarBackpackButtonStock\",\n\t\"MainMenuBarExpText\",\n\t\"MainMenuBarLeftEndCap\",\n\t\"MainMenuBarPageNumber\",\n\t\"MainMenuBarPerformanceBar\",\n\t\"MainMenuBarRightEndCap\",\n\t\"MainMenuBarTexture0\",\n\t\"MainMenuBarTexture1\",\n\t\"MainMenuBarTexture2\",\n\t\"MainMenuBarTexture3\",\n\t\"MainMenuMaxLevelBar0\",\n\t\"MainMenuMaxLevelBar1\",\n\t\"MainMenuMaxLevelBar2\",\n\t\"MainMenuMaxLevelBar3\",\n\t\"MainMenuXPBarTexture0\",\n\t\"MainMenuXPBarTexture1\",\n\t\"MainMenuXPBarTexture2\",\n\t\"MainMenuXPBarTexture3\",\n\t\"MapFramerateLabel\",\n\t\"MapFramerateText\",\n\t\"MerchantBuyBackItemItemButtonCount\",\n\t\"MerchantBuyBackItemItemButtonIconTexture\",\n\t\"MerchantBuyBackItemItemButtonNormalTexture\",\n\t\"MerchantBuyBackItemItemButtonStock\",\n\t\"MerchantBuyBackItemMoneyFrameCopperButtonText\",\n\t\"MerchantBuyBackItemMoneyFrameGoldButtonText\",\n\t\"MerchantBuyBackItemMoneyFrameSilverButtonText\",\n\t\"MerchantBuyBackItemName\",\n\t\"MerchantBuyBackItemNameFrame\",\n\t\"MerchantBuyBackItemSlotTexture\",\n\t\"MerchantFrameBottomLeftBorder\",\n\t\"MerchantFrameBottomRightBorder\",\n\t\"MerchantFramePortrait\",\n\t\"MerchantFrameTab1HighlightTexture\",\n\t\"MerchantFrameTab1Left\",\n\t\"MerchantFrameTab1LeftDisabled\",\n\t\"MerchantFrameTab1Middle\",\n\t\"MerchantFrameTab1MiddleDisabled\",\n\t\"MerchantFrameTab1Right\",\n\t\"MerchantFrameTab1RightDisabled\",\n\t\"MerchantFrameTab1Text\",\n\t\"MerchantFrameTab2HighlightTexture\",\n\t\"MerchantFrameTab2Left\",\n\t\"MerchantFrameTab2LeftDisabled\",\n\t\"MerchantFrameTab2Middle\",\n\t\"MerchantFrameTab2MiddleDisabled\",\n\t\"MerchantFrameTab2Right\",\n\t\"MerchantFrameTab2RightDisabled\",\n\t\"MerchantFrameTab2Text\",\n\t\"MerchantGuildBankRepairButtonIcon\",\n\t\"MerchantItem10AltCurrencyFrameArenaText\",\n\t\"MerchantItem10AltCurrencyFrameArenaTexture\",\n\t\"MerchantItem10AltCurrencyFrameHonorText\",\n\t\"MerchantItem10AltCurrencyFrameHonorTexture\",\n\t\"MerchantItem10AltCurrencyFrameItem1Text\",\n\t\"MerchantItem10AltCurrencyFrameItem1Texture\",\n\t\"MerchantItem10AltCurrencyFrameItem2Text\",\n\t\"MerchantItem10AltCurrencyFrameItem2Texture\",\n\t\"MerchantItem10AltCurrencyFrameItem3Text\",\n\t\"MerchantItem10AltCurrencyFrameItem3Texture\",\n\t\"MerchantItem10ItemButtonCount\",\n\t\"MerchantItem10ItemButtonIconTexture\",\n\t\"MerchantItem10ItemButtonNormalTexture\",\n\t\"MerchantItem10ItemButtonStock\",\n\t\"MerchantItem10MoneyFrameCopperButtonText\",\n\t\"MerchantItem10MoneyFrameGoldButtonText\",\n\t\"MerchantItem10MoneyFrameSilverButtonText\",\n\t\"MerchantItem10Name\",\n\t\"MerchantItem10NameFrame\",\n\t\"MerchantItem10SlotTexture\",\n\t\"MerchantItem11AltCurrencyFrameArenaText\",\n\t\"MerchantItem11AltCurrencyFrameArenaTexture\",\n\t\"MerchantItem11AltCurrencyFrameHonorText\",\n\t\"MerchantItem11AltCurrencyFrameHonorTexture\",\n\t\"MerchantItem11AltCurrencyFrameItem1Text\",\n\t\"MerchantItem11AltCurrencyFrameItem1Texture\",\n\t\"MerchantItem11AltCurrencyFrameItem2Text\",\n\t\"MerchantItem11AltCurrencyFrameItem2Texture\",\n\t\"MerchantItem11AltCurrencyFrameItem3Text\",\n\t\"MerchantItem11AltCurrencyFrameItem3Texture\",\n\t\"MerchantItem11ItemButtonCount\",\n\t\"MerchantItem11ItemButtonIconTexture\",\n\t\"MerchantItem11ItemButtonNormalTexture\",\n\t\"MerchantItem11ItemButtonStock\",\n\t\"MerchantItem11MoneyFrameCopperButtonText\",\n\t\"MerchantItem11MoneyFrameGoldButtonText\",\n\t\"MerchantItem11MoneyFrameSilverButtonText\",\n\t\"MerchantItem11Name\",\n\t\"MerchantItem11NameFrame\",\n\t\"MerchantItem11SlotTexture\",\n\t\"MerchantItem12AltCurrencyFrameArenaText\",\n\t\"MerchantItem12AltCurrencyFrameArenaTexture\",\n\t\"MerchantItem12AltCurrencyFrameHonorText\",\n\t\"MerchantItem12AltCurrencyFrameHonorTexture\",\n\t\"MerchantItem12AltCurrencyFrameItem1Text\",\n\t\"MerchantItem12AltCurrencyFrameItem1Texture\",\n\t\"MerchantItem12AltCurrencyFrameItem2Text\",\n\t\"MerchantItem12AltCurrencyFrameItem2Texture\",\n\t\"MerchantItem12AltCurrencyFrameItem3Text\",\n\t\"MerchantItem12AltCurrencyFrameItem3Texture\",\n\t\"MerchantItem12ItemButtonCount\",\n\t\"MerchantItem12ItemButtonIconTexture\",\n\t\"MerchantItem12ItemButtonNormalTexture\",\n\t\"MerchantItem12ItemButtonStock\",\n\t\"MerchantItem12MoneyFrameCopperButtonText\",\n\t\"MerchantItem12MoneyFrameGoldButtonText\",\n\t\"MerchantItem12MoneyFrameSilverButtonText\",\n\t\"MerchantItem12Name\",\n\t\"MerchantItem12NameFrame\",\n\t\"MerchantItem12SlotTexture\",\n\t\"MerchantItem1AltCurrencyFrameArenaText\",\n\t\"MerchantItem1AltCurrencyFrameArenaTexture\",\n\t\"MerchantItem1AltCurrencyFrameHonorText\",\n\t\"MerchantItem1AltCurrencyFrameHonorTexture\",\n\t\"MerchantItem1AltCurrencyFrameItem1Text\",\n\t\"MerchantItem1AltCurrencyFrameItem1Texture\",\n\t\"MerchantItem1AltCurrencyFrameItem2Text\",\n\t\"MerchantItem1AltCurrencyFrameItem2Texture\",\n\t\"MerchantItem1AltCurrencyFrameItem3Text\",\n\t\"MerchantItem1AltCurrencyFrameItem3Texture\",\n\t\"MerchantItem1ItemButtonCount\",\n\t\"MerchantItem1ItemButtonIconTexture\",\n\t\"MerchantItem1ItemButtonNormalTexture\",\n\t\"MerchantItem1ItemButtonStock\",\n\t\"MerchantItem1MoneyFrameCopperButtonText\",\n\t\"MerchantItem1MoneyFrameGoldButtonText\",\n\t\"MerchantItem1MoneyFrameSilverButtonText\",\n\t\"MerchantItem1Name\",\n\t\"MerchantItem1NameFrame\",\n\t\"MerchantItem1SlotTexture\",\n\t\"MerchantItem2AltCurrencyFrameArenaText\",\n\t\"MerchantItem2AltCurrencyFrameArenaTexture\",\n\t\"MerchantItem2AltCurrencyFrameHonorText\",\n\t\"MerchantItem2AltCurrencyFrameHonorTexture\",\n\t\"MerchantItem2AltCurrencyFrameItem1Text\",\n\t\"MerchantItem2AltCurrencyFrameItem1Texture\",\n\t\"MerchantItem2AltCurrencyFrameItem2Text\",\n\t\"MerchantItem2AltCurrencyFrameItem2Texture\",\n\t\"MerchantItem2AltCurrencyFrameItem3Text\",\n\t\"MerchantItem2AltCurrencyFrameItem3Texture\",\n\t\"MerchantItem2ItemButtonCount\",\n\t\"MerchantItem2ItemButtonIconTexture\",\n\t\"MerchantItem2ItemButtonNormalTexture\",\n\t\"MerchantItem2ItemButtonStock\",\n\t\"MerchantItem2MoneyFrameCopperButtonText\",\n\t\"MerchantItem2MoneyFrameGoldButtonText\",\n\t\"MerchantItem2MoneyFrameSilverButtonText\",\n\t\"MerchantItem2Name\",\n\t\"MerchantItem2NameFrame\",\n\t\"MerchantItem2SlotTexture\",\n\t\"MerchantItem3AltCurrencyFrameArenaText\",\n\t\"MerchantItem3AltCurrencyFrameArenaTexture\",\n\t\"MerchantItem3AltCurrencyFrameHonorText\",\n\t\"MerchantItem3AltCurrencyFrameHonorTexture\",\n\t\"MerchantItem3AltCurrencyFrameItem1Text\",\n\t\"MerchantItem3AltCurrencyFrameItem1Texture\",\n\t\"MerchantItem3AltCurrencyFrameItem2Text\",\n\t\"MerchantItem3AltCurrencyFrameItem2Texture\",\n\t\"MerchantItem3AltCurrencyFrameItem3Text\",\n\t\"MerchantItem3AltCurrencyFrameItem3Texture\",\n\t\"MerchantItem3ItemButtonCount\",\n\t\"MerchantItem3ItemButtonIconTexture\",\n\t\"MerchantItem3ItemButtonNormalTexture\",\n\t\"MerchantItem3ItemButtonStock\",\n\t\"MerchantItem3MoneyFrameCopperButtonText\",\n\t\"MerchantItem3MoneyFrameGoldButtonText\",\n\t\"MerchantItem3MoneyFrameSilverButtonText\",\n\t\"MerchantItem3Name\",\n\t\"MerchantItem3NameFrame\",\n\t\"MerchantItem3SlotTexture\",\n\t\"MerchantItem4AltCurrencyFrameArenaText\",\n\t\"MerchantItem4AltCurrencyFrameArenaTexture\",\n\t\"MerchantItem4AltCurrencyFrameHonorText\",\n\t\"MerchantItem4AltCurrencyFrameHonorTexture\",\n\t\"MerchantItem4AltCurrencyFrameItem1Text\",\n\t\"MerchantItem4AltCurrencyFrameItem1Texture\",\n\t\"MerchantItem4AltCurrencyFrameItem2Text\",\n\t\"MerchantItem4AltCurrencyFrameItem2Texture\",\n\t\"MerchantItem4AltCurrencyFrameItem3Text\",\n\t\"MerchantItem4AltCurrencyFrameItem3Texture\",\n\t\"MerchantItem4ItemButtonCount\",\n\t\"MerchantItem4ItemButtonIconTexture\",\n\t\"MerchantItem4ItemButtonNormalTexture\",\n\t\"MerchantItem4ItemButtonStock\",\n\t\"MerchantItem4MoneyFrameCopperButtonText\",\n\t\"MerchantItem4MoneyFrameGoldButtonText\",\n\t\"MerchantItem4MoneyFrameSilverButtonText\",\n\t\"MerchantItem4Name\",\n\t\"MerchantItem4NameFrame\",\n\t\"MerchantItem4SlotTexture\",\n\t\"MerchantItem5AltCurrencyFrameArenaText\",\n\t\"MerchantItem5AltCurrencyFrameArenaTexture\",\n\t\"MerchantItem5AltCurrencyFrameHonorText\",\n\t\"MerchantItem5AltCurrencyFrameHonorTexture\",\n\t\"MerchantItem5AltCurrencyFrameItem1Text\",\n\t\"MerchantItem5AltCurrencyFrameItem1Texture\",\n\t\"MerchantItem5AltCurrencyFrameItem2Text\",\n\t\"MerchantItem5AltCurrencyFrameItem2Texture\",\n\t\"MerchantItem5AltCurrencyFrameItem3Text\",\n\t\"MerchantItem5AltCurrencyFrameItem3Texture\",\n\t\"MerchantItem5ItemButtonCount\",\n\t\"MerchantItem5ItemButtonIconTexture\",\n\t\"MerchantItem5ItemButtonNormalTexture\",\n\t\"MerchantItem5ItemButtonStock\",\n\t\"MerchantItem5MoneyFrameCopperButtonText\",\n\t\"MerchantItem5MoneyFrameGoldButtonText\",\n\t\"MerchantItem5MoneyFrameSilverButtonText\",\n\t\"MerchantItem5Name\",\n\t\"MerchantItem5NameFrame\",\n\t\"MerchantItem5SlotTexture\",\n\t\"MerchantItem6AltCurrencyFrameArenaText\",\n\t\"MerchantItem6AltCurrencyFrameArenaTexture\",\n\t\"MerchantItem6AltCurrencyFrameHonorText\",\n\t\"MerchantItem6AltCurrencyFrameHonorTexture\",\n\t\"MerchantItem6AltCurrencyFrameItem1Text\",\n\t\"MerchantItem6AltCurrencyFrameItem1Texture\",\n\t\"MerchantItem6AltCurrencyFrameItem2Text\",\n\t\"MerchantItem6AltCurrencyFrameItem2Texture\",\n\t\"MerchantItem6AltCurrencyFrameItem3Text\",\n\t\"MerchantItem6AltCurrencyFrameItem3Texture\",\n\t\"MerchantItem6ItemButtonCount\",\n\t\"MerchantItem6ItemButtonIconTexture\",\n\t\"MerchantItem6ItemButtonNormalTexture\",\n\t\"MerchantItem6ItemButtonStock\",\n\t\"MerchantItem6MoneyFrameCopperButtonText\",\n\t\"MerchantItem6MoneyFrameGoldButtonText\",\n\t\"MerchantItem6MoneyFrameSilverButtonText\",\n\t\"MerchantItem6Name\",\n\t\"MerchantItem6NameFrame\",\n\t\"MerchantItem6SlotTexture\",\n\t\"MerchantItem7AltCurrencyFrameArenaText\",\n\t\"MerchantItem7AltCurrencyFrameArenaTexture\",\n\t\"MerchantItem7AltCurrencyFrameHonorText\",\n\t\"MerchantItem7AltCurrencyFrameHonorTexture\",\n\t\"MerchantItem7AltCurrencyFrameItem1Text\",\n\t\"MerchantItem7AltCurrencyFrameItem1Texture\",\n\t\"MerchantItem7AltCurrencyFrameItem2Text\",\n\t\"MerchantItem7AltCurrencyFrameItem2Texture\",\n\t\"MerchantItem7AltCurrencyFrameItem3Text\",\n\t\"MerchantItem7AltCurrencyFrameItem3Texture\",\n\t\"MerchantItem7ItemButtonCount\",\n\t\"MerchantItem7ItemButtonIconTexture\",\n\t\"MerchantItem7ItemButtonNormalTexture\",\n\t\"MerchantItem7ItemButtonStock\",\n\t\"MerchantItem7MoneyFrameCopperButtonText\",\n\t\"MerchantItem7MoneyFrameGoldButtonText\",\n\t\"MerchantItem7MoneyFrameSilverButtonText\",\n\t\"MerchantItem7Name\",\n\t\"MerchantItem7NameFrame\",\n\t\"MerchantItem7SlotTexture\",\n\t\"MerchantItem8AltCurrencyFrameArenaText\",\n\t\"MerchantItem8AltCurrencyFrameArenaTexture\",\n\t\"MerchantItem8AltCurrencyFrameHonorText\",\n\t\"MerchantItem8AltCurrencyFrameHonorTexture\",\n\t\"MerchantItem8AltCurrencyFrameItem1Text\",\n\t\"MerchantItem8AltCurrencyFrameItem1Texture\",\n\t\"MerchantItem8AltCurrencyFrameItem2Text\",\n\t\"MerchantItem8AltCurrencyFrameItem2Texture\",\n\t\"MerchantItem8AltCurrencyFrameItem3Text\",\n\t\"MerchantItem8AltCurrencyFrameItem3Texture\",\n\t\"MerchantItem8ItemButtonCount\",\n\t\"MerchantItem8ItemButtonIconTexture\",\n\t\"MerchantItem8ItemButtonNormalTexture\",\n\t\"MerchantItem8ItemButtonStock\",\n\t\"MerchantItem8MoneyFrameCopperButtonText\",\n\t\"MerchantItem8MoneyFrameGoldButtonText\",\n\t\"MerchantItem8MoneyFrameSilverButtonText\",\n\t\"MerchantItem8Name\",\n\t\"MerchantItem8NameFrame\",\n\t\"MerchantItem8SlotTexture\",\n\t\"MerchantItem9AltCurrencyFrameArenaText\",\n\t\"MerchantItem9AltCurrencyFrameArenaTexture\",\n\t\"MerchantItem9AltCurrencyFrameHonorText\",\n\t\"MerchantItem9AltCurrencyFrameHonorTexture\",\n\t\"MerchantItem9AltCurrencyFrameItem1Text\",\n\t\"MerchantItem9AltCurrencyFrameItem1Texture\",\n\t\"MerchantItem9AltCurrencyFrameItem2Text\",\n\t\"MerchantItem9AltCurrencyFrameItem2Texture\",\n\t\"MerchantItem9AltCurrencyFrameItem3Text\",\n\t\"MerchantItem9AltCurrencyFrameItem3Texture\",\n\t\"MerchantItem9ItemButtonCount\",\n\t\"MerchantItem9ItemButtonIconTexture\",\n\t\"MerchantItem9ItemButtonNormalTexture\",\n\t\"MerchantItem9ItemButtonStock\",\n\t\"MerchantItem9MoneyFrameCopperButtonText\",\n\t\"MerchantItem9MoneyFrameGoldButtonText\",\n\t\"MerchantItem9MoneyFrameSilverButtonText\",\n\t\"MerchantItem9Name\",\n\t\"MerchantItem9NameFrame\",\n\t\"MerchantItem9SlotTexture\",\n\t\"MerchantMoneyFrameCopperButtonText\",\n\t\"MerchantMoneyFrameGoldButtonText\",\n\t\"MerchantMoneyFrameSilverButtonText\",\n\t\"MerchantNameText\",\n\t\"MerchantPageText\",\n\t\"MerchantRepairAllIcon\",\n\t\"MerchantRepairText\",\n\t\"MicroButtonPortrait\",\n\t\"MiniMapBattlefieldBorder\",\n\t\"MiniMapBattlefieldDropDownButtonDisabledTexture\",\n\t\"MiniMapBattlefieldDropDownButtonHighlightTexture\",\n\t\"MiniMapBattlefieldDropDownButtonNormalTexture\",\n\t\"MiniMapBattlefieldDropDownButtonPushedTexture\",\n\t\"MiniMapBattlefieldDropDownLeft\",\n\t\"MiniMapBattlefieldDropDownMiddle\",\n\t\"MiniMapBattlefieldDropDownRight\",\n\t\"MiniMapBattlefieldDropDownText\",\n\t\"MiniMapBattlefieldIcon\",\n\t\"MiniMapInstanceDifficultyText\",\n\t\"MiniMapInstanceDifficultyTexture\",\n\t\"MiniMapLFGFrameBorder\",\n\t\"MiniMapLFGFrameDropDownButtonDisabledTexture\",\n\t\"MiniMapLFGFrameDropDownButtonHighlightTexture\",\n\t\"MiniMapLFGFrameDropDownButtonNormalTexture\",\n\t\"MiniMapLFGFrameDropDownButtonPushedTexture\",\n\t\"MiniMapLFGFrameDropDownLeft\",\n\t\"MiniMapLFGFrameDropDownMiddle\",\n\t\"MiniMapLFGFrameDropDownRight\",\n\t\"MiniMapLFGFrameDropDownText\",\n\t\"MiniMapLFGFrameIconTexture\",\n\t\"MiniMapMailBorder\",\n\t\"MiniMapMailIcon\",\n\t\"MiniMapRecordingBorder\",\n\t\"MiniMapTrackingBackground\",\n\t\"MiniMapTrackingButtonBorder\",\n\t\"MiniMapTrackingButtonShine\",\n\t\"MiniMapTrackingDropDownButtonDisabledTexture\",\n\t\"MiniMapTrackingDropDownButtonHighlightTexture\",\n\t\"MiniMapTrackingDropDownButtonNormalTexture\",\n\t\"MiniMapTrackingDropDownButtonPushedTexture\",\n\t\"MiniMapTrackingDropDownLeft\",\n\t\"MiniMapTrackingDropDownMiddle\",\n\t\"MiniMapTrackingDropDownRight\",\n\t\"MiniMapTrackingDropDownText\",\n\t\"MiniMapTrackingIcon\",\n\t\"MiniMapTrackingIconOverlay\",\n\t\"MiniMapVoiceChatDropDownButtonDisabledTexture\",\n\t\"MiniMapVoiceChatDropDownButtonHighlightTexture\",\n\t\"MiniMapVoiceChatDropDownButtonNormalTexture\",\n\t\"MiniMapVoiceChatDropDownButtonPushedTexture\",\n\t\"MiniMapVoiceChatDropDownLeft\",\n\t\"MiniMapVoiceChatDropDownMiddle\",\n\t\"MiniMapVoiceChatDropDownRight\",\n\t\"MiniMapVoiceChatDropDownText\",\n\t\"MiniMapVoiceChatFrameBackground\",\n\t\"MiniMapVoiceChatFrameBorder\",\n\t\"MiniMapVoiceChatFrameIconMuted\",\n\t\"MiniMapWorldBorder\",\n\t\"MiniMapWorldIcon\",\n\t\"MiniMapWorldMapButtonIcon\",\n\t\"MinimapBorder\",\n\t\"MinimapBorderTop\",\n\t\"MinimapCompassTexture\",\n\t\"MinimapNorthTag\",\n\t\"MinimapPingCenter\",\n\t\"MinimapPingExpander\",\n\t\"MinimapPingSpinner\",\n\t\"MinimapZoneText\",\n\t\"MirrorTimer1Border\",\n\t\"MirrorTimer1Text\",\n\t\"MirrorTimer2Border\",\n\t\"MirrorTimer2Text\",\n\t\"MirrorTimer3Border\",\n\t\"MirrorTimer3Text\",\n\t\"MovieFrameSubtitleString\",\n\t\"MovieProgressBarText\",\n\t\"MovieSubtitleFont\",\n\t\"MultiBarBottomLeftButton10Border\",\n\t\"MultiBarBottomLeftButton10Count\",\n\t\"MultiBarBottomLeftButton10Flash\",\n\t\"MultiBarBottomLeftButton10HotKey\",\n\t\"MultiBarBottomLeftButton10Icon\",\n\t\"MultiBarBottomLeftButton10Name\",\n\t\"MultiBarBottomLeftButton10NormalTexture\",\n\t\"MultiBarBottomLeftButton11Border\",\n\t\"MultiBarBottomLeftButton11Count\",\n\t\"MultiBarBottomLeftButton11Flash\",\n\t\"MultiBarBottomLeftButton11HotKey\",\n\t\"MultiBarBottomLeftButton11Icon\",\n\t\"MultiBarBottomLeftButton11Name\",\n\t\"MultiBarBottomLeftButton11NormalTexture\",\n\t\"MultiBarBottomLeftButton12Border\",\n\t\"MultiBarBottomLeftButton12Count\",\n\t\"MultiBarBottomLeftButton12Flash\",\n\t\"MultiBarBottomLeftButton12HotKey\",\n\t\"MultiBarBottomLeftButton12Icon\",\n\t\"MultiBarBottomLeftButton12Name\",\n\t\"MultiBarBottomLeftButton12NormalTexture\",\n\t\"MultiBarBottomLeftButton1Border\",\n\t\"MultiBarBottomLeftButton1Count\",\n\t\"MultiBarBottomLeftButton1Flash\",\n\t\"MultiBarBottomLeftButton1HotKey\",\n\t\"MultiBarBottomLeftButton1Icon\",\n\t\"MultiBarBottomLeftButton1Name\",\n\t\"MultiBarBottomLeftButton1NormalTexture\",\n\t\"MultiBarBottomLeftButton2Border\",\n\t\"MultiBarBottomLeftButton2Count\",\n\t\"MultiBarBottomLeftButton2Flash\",\n\t\"MultiBarBottomLeftButton2HotKey\",\n\t\"MultiBarBottomLeftButton2Icon\",\n\t\"MultiBarBottomLeftButton2Name\",\n\t\"MultiBarBottomLeftButton2NormalTexture\",\n\t\"MultiBarBottomLeftButton3Border\",\n\t\"MultiBarBottomLeftButton3Count\",\n\t\"MultiBarBottomLeftButton3Flash\",\n\t\"MultiBarBottomLeftButton3HotKey\",\n\t\"MultiBarBottomLeftButton3Icon\",\n\t\"MultiBarBottomLeftButton3Name\",\n\t\"MultiBarBottomLeftButton3NormalTexture\",\n\t\"MultiBarBottomLeftButton4Border\",\n\t\"MultiBarBottomLeftButton4Count\",\n\t\"MultiBarBottomLeftButton4Flash\",\n\t\"MultiBarBottomLeftButton4HotKey\",\n\t\"MultiBarBottomLeftButton4Icon\",\n\t\"MultiBarBottomLeftButton4Name\",\n\t\"MultiBarBottomLeftButton4NormalTexture\",\n\t\"MultiBarBottomLeftButton5Border\",\n\t\"MultiBarBottomLeftButton5Count\",\n\t\"MultiBarBottomLeftButton5Flash\",\n\t\"MultiBarBottomLeftButton5HotKey\",\n\t\"MultiBarBottomLeftButton5Icon\",\n\t\"MultiBarBottomLeftButton5Name\",\n\t\"MultiBarBottomLeftButton5NormalTexture\",\n\t\"MultiBarBottomLeftButton6Border\",\n\t\"MultiBarBottomLeftButton6Count\",\n\t\"MultiBarBottomLeftButton6Flash\",\n\t\"MultiBarBottomLeftButton6HotKey\",\n\t\"MultiBarBottomLeftButton6Icon\",\n\t\"MultiBarBottomLeftButton6Name\",\n\t\"MultiBarBottomLeftButton6NormalTexture\",\n\t\"MultiBarBottomLeftButton7Border\",\n\t\"MultiBarBottomLeftButton7Count\",\n\t\"MultiBarBottomLeftButton7Flash\",\n\t\"MultiBarBottomLeftButton7HotKey\",\n\t\"MultiBarBottomLeftButton7Icon\",\n\t\"MultiBarBottomLeftButton7Name\",\n\t\"MultiBarBottomLeftButton7NormalTexture\",\n\t\"MultiBarBottomLeftButton8Border\",\n\t\"MultiBarBottomLeftButton8Count\",\n\t\"MultiBarBottomLeftButton8Flash\",\n\t\"MultiBarBottomLeftButton8HotKey\",\n\t\"MultiBarBottomLeftButton8Icon\",\n\t\"MultiBarBottomLeftButton8Name\",\n\t\"MultiBarBottomLeftButton8NormalTexture\",\n\t\"MultiBarBottomLeftButton9Border\",\n\t\"MultiBarBottomLeftButton9Count\",\n\t\"MultiBarBottomLeftButton9Flash\",\n\t\"MultiBarBottomLeftButton9HotKey\",\n\t\"MultiBarBottomLeftButton9Icon\",\n\t\"MultiBarBottomLeftButton9Name\",\n\t\"MultiBarBottomLeftButton9NormalTexture\",\n\t\"MultiBarBottomRightButton10Border\",\n\t\"MultiBarBottomRightButton10Count\",\n\t\"MultiBarBottomRightButton10Flash\",\n\t\"MultiBarBottomRightButton10HotKey\",\n\t\"MultiBarBottomRightButton10Icon\",\n\t\"MultiBarBottomRightButton10Name\",\n\t\"MultiBarBottomRightButton10NormalTexture\",\n\t\"MultiBarBottomRightButton11Border\",\n\t\"MultiBarBottomRightButton11Count\",\n\t\"MultiBarBottomRightButton11Flash\",\n\t\"MultiBarBottomRightButton11HotKey\",\n\t\"MultiBarBottomRightButton11Icon\",\n\t\"MultiBarBottomRightButton11Name\",\n\t\"MultiBarBottomRightButton11NormalTexture\",\n\t\"MultiBarBottomRightButton12Border\",\n\t\"MultiBarBottomRightButton12Count\",\n\t\"MultiBarBottomRightButton12Flash\",\n\t\"MultiBarBottomRightButton12HotKey\",\n\t\"MultiBarBottomRightButton12Icon\",\n\t\"MultiBarBottomRightButton12Name\",\n\t\"MultiBarBottomRightButton12NormalTexture\",\n\t\"MultiBarBottomRightButton1Border\",\n\t\"MultiBarBottomRightButton1Count\",\n\t\"MultiBarBottomRightButton1Flash\",\n\t\"MultiBarBottomRightButton1HotKey\",\n\t\"MultiBarBottomRightButton1Icon\",\n\t\"MultiBarBottomRightButton1Name\",\n\t\"MultiBarBottomRightButton1NormalTexture\",\n\t\"MultiBarBottomRightButton2Border\",\n\t\"MultiBarBottomRightButton2Count\",\n\t\"MultiBarBottomRightButton2Flash\",\n\t\"MultiBarBottomRightButton2HotKey\",\n\t\"MultiBarBottomRightButton2Icon\",\n\t\"MultiBarBottomRightButton2Name\",\n\t\"MultiBarBottomRightButton2NormalTexture\",\n\t\"MultiBarBottomRightButton3Border\",\n\t\"MultiBarBottomRightButton3Count\",\n\t\"MultiBarBottomRightButton3Flash\",\n\t\"MultiBarBottomRightButton3HotKey\",\n\t\"MultiBarBottomRightButton3Icon\",\n\t\"MultiBarBottomRightButton3Name\",\n\t\"MultiBarBottomRightButton3NormalTexture\",\n\t\"MultiBarBottomRightButton4Border\",\n\t\"MultiBarBottomRightButton4Count\",\n\t\"MultiBarBottomRightButton4Flash\",\n\t\"MultiBarBottomRightButton4HotKey\",\n\t\"MultiBarBottomRightButton4Icon\",\n\t\"MultiBarBottomRightButton4Name\",\n\t\"MultiBarBottomRightButton4NormalTexture\",\n\t\"MultiBarBottomRightButton5Border\",\n\t\"MultiBarBottomRightButton5Count\",\n\t\"MultiBarBottomRightButton5Flash\",\n\t\"MultiBarBottomRightButton5HotKey\",\n\t\"MultiBarBottomRightButton5Icon\",\n\t\"MultiBarBottomRightButton5Name\",\n\t\"MultiBarBottomRightButton5NormalTexture\",\n\t\"MultiBarBottomRightButton6Border\",\n\t\"MultiBarBottomRightButton6Count\",\n\t\"MultiBarBottomRightButton6Flash\",\n\t\"MultiBarBottomRightButton6HotKey\",\n\t\"MultiBarBottomRightButton6Icon\",\n\t\"MultiBarBottomRightButton6Name\",\n\t\"MultiBarBottomRightButton6NormalTexture\",\n\t\"MultiBarBottomRightButton7Border\",\n\t\"MultiBarBottomRightButton7Count\",\n\t\"MultiBarBottomRightButton7Flash\",\n\t\"MultiBarBottomRightButton7HotKey\",\n\t\"MultiBarBottomRightButton7Icon\",\n\t\"MultiBarBottomRightButton7Name\",\n\t\"MultiBarBottomRightButton7NormalTexture\",\n\t\"MultiBarBottomRightButton8Border\",\n\t\"MultiBarBottomRightButton8Count\",\n\t\"MultiBarBottomRightButton8Flash\",\n\t\"MultiBarBottomRightButton8HotKey\",\n\t\"MultiBarBottomRightButton8Icon\",\n\t\"MultiBarBottomRightButton8Name\",\n\t\"MultiBarBottomRightButton8NormalTexture\",\n\t\"MultiBarBottomRightButton9Border\",\n\t\"MultiBarBottomRightButton9Count\",\n\t\"MultiBarBottomRightButton9Flash\",\n\t\"MultiBarBottomRightButton9HotKey\",\n\t\"MultiBarBottomRightButton9Icon\",\n\t\"MultiBarBottomRightButton9Name\",\n\t\"MultiBarBottomRightButton9NormalTexture\",\n\t\"MultiBarLeftButton10Border\",\n\t\"MultiBarLeftButton10Count\",\n\t\"MultiBarLeftButton10Flash\",\n\t\"MultiBarLeftButton10HotKey\",\n\t\"MultiBarLeftButton10Icon\",\n\t\"MultiBarLeftButton10Name\",\n\t\"MultiBarLeftButton10NormalTexture\",\n\t\"MultiBarLeftButton11Border\",\n\t\"MultiBarLeftButton11Count\",\n\t\"MultiBarLeftButton11Flash\",\n\t\"MultiBarLeftButton11HotKey\",\n\t\"MultiBarLeftButton11Icon\",\n\t\"MultiBarLeftButton11Name\",\n\t\"MultiBarLeftButton11NormalTexture\",\n\t\"MultiBarLeftButton12Border\",\n\t\"MultiBarLeftButton12Count\",\n\t\"MultiBarLeftButton12Flash\",\n\t\"MultiBarLeftButton12HotKey\",\n\t\"MultiBarLeftButton12Icon\",\n\t\"MultiBarLeftButton12Name\",\n\t\"MultiBarLeftButton12NormalTexture\",\n\t\"MultiBarLeftButton1Border\",\n\t\"MultiBarLeftButton1Count\",\n\t\"MultiBarLeftButton1Flash\",\n\t\"MultiBarLeftButton1HotKey\",\n\t\"MultiBarLeftButton1Icon\",\n\t\"MultiBarLeftButton1Name\",\n\t\"MultiBarLeftButton1NormalTexture\",\n\t\"MultiBarLeftButton2Border\",\n\t\"MultiBarLeftButton2Count\",\n\t\"MultiBarLeftButton2Flash\",\n\t\"MultiBarLeftButton2HotKey\",\n\t\"MultiBarLeftButton2Icon\",\n\t\"MultiBarLeftButton2Name\",\n\t\"MultiBarLeftButton2NormalTexture\",\n\t\"MultiBarLeftButton3Border\",\n\t\"MultiBarLeftButton3Count\",\n\t\"MultiBarLeftButton3Flash\",\n\t\"MultiBarLeftButton3HotKey\",\n\t\"MultiBarLeftButton3Icon\",\n\t\"MultiBarLeftButton3Name\",\n\t\"MultiBarLeftButton3NormalTexture\",\n\t\"MultiBarLeftButton4Border\",\n\t\"MultiBarLeftButton4Count\",\n\t\"MultiBarLeftButton4Flash\",\n\t\"MultiBarLeftButton4HotKey\",\n\t\"MultiBarLeftButton4Icon\",\n\t\"MultiBarLeftButton4Name\",\n\t\"MultiBarLeftButton4NormalTexture\",\n\t\"MultiBarLeftButton5Border\",\n\t\"MultiBarLeftButton5Count\",\n\t\"MultiBarLeftButton5Flash\",\n\t\"MultiBarLeftButton5HotKey\",\n\t\"MultiBarLeftButton5Icon\",\n\t\"MultiBarLeftButton5Name\",\n\t\"MultiBarLeftButton5NormalTexture\",\n\t\"MultiBarLeftButton6Border\",\n\t\"MultiBarLeftButton6Count\",\n\t\"MultiBarLeftButton6Flash\",\n\t\"MultiBarLeftButton6HotKey\",\n\t\"MultiBarLeftButton6Icon\",\n\t\"MultiBarLeftButton6Name\",\n\t\"MultiBarLeftButton6NormalTexture\",\n\t\"MultiBarLeftButton7Border\",\n\t\"MultiBarLeftButton7Count\",\n\t\"MultiBarLeftButton7Flash\",\n\t\"MultiBarLeftButton7HotKey\",\n\t\"MultiBarLeftButton7Icon\",\n\t\"MultiBarLeftButton7Name\",\n\t\"MultiBarLeftButton7NormalTexture\",\n\t\"MultiBarLeftButton8Border\",\n\t\"MultiBarLeftButton8Count\",\n\t\"MultiBarLeftButton8Flash\",\n\t\"MultiBarLeftButton8HotKey\",\n\t\"MultiBarLeftButton8Icon\",\n\t\"MultiBarLeftButton8Name\",\n\t\"MultiBarLeftButton8NormalTexture\",\n\t\"MultiBarLeftButton9Border\",\n\t\"MultiBarLeftButton9Count\",\n\t\"MultiBarLeftButton9Flash\",\n\t\"MultiBarLeftButton9HotKey\",\n\t\"MultiBarLeftButton9Icon\",\n\t\"MultiBarLeftButton9Name\",\n\t\"MultiBarLeftButton9NormalTexture\",\n\t\"MultiBarRightButton10Border\",\n\t\"MultiBarRightButton10Count\",\n\t\"MultiBarRightButton10Flash\",\n\t\"MultiBarRightButton10HotKey\",\n\t\"MultiBarRightButton10Icon\",\n\t\"MultiBarRightButton10Name\",\n\t\"MultiBarRightButton10NormalTexture\",\n\t\"MultiBarRightButton11Border\",\n\t\"MultiBarRightButton11Count\",\n\t\"MultiBarRightButton11Flash\",\n\t\"MultiBarRightButton11HotKey\",\n\t\"MultiBarRightButton11Icon\",\n\t\"MultiBarRightButton11Name\",\n\t\"MultiBarRightButton11NormalTexture\",\n\t\"MultiBarRightButton12Border\",\n\t\"MultiBarRightButton12Count\",\n\t\"MultiBarRightButton12Flash\",\n\t\"MultiBarRightButton12HotKey\",\n\t\"MultiBarRightButton12Icon\",\n\t\"MultiBarRightButton12Name\",\n\t\"MultiBarRightButton12NormalTexture\",\n\t\"MultiBarRightButton1Border\",\n\t\"MultiBarRightButton1Count\",\n\t\"MultiBarRightButton1Flash\",\n\t\"MultiBarRightButton1HotKey\",\n\t\"MultiBarRightButton1Icon\",\n\t\"MultiBarRightButton1Name\",\n\t\"MultiBarRightButton1NormalTexture\",\n\t\"MultiBarRightButton2Border\",\n\t\"MultiBarRightButton2Count\",\n\t\"MultiBarRightButton2Flash\",\n\t\"MultiBarRightButton2HotKey\",\n\t\"MultiBarRightButton2Icon\",\n\t\"MultiBarRightButton2Name\",\n\t\"MultiBarRightButton2NormalTexture\",\n\t\"MultiBarRightButton3Border\",\n\t\"MultiBarRightButton3Count\",\n\t\"MultiBarRightButton3Flash\",\n\t\"MultiBarRightButton3HotKey\",\n\t\"MultiBarRightButton3Icon\",\n\t\"MultiBarRightButton3Name\",\n\t\"MultiBarRightButton3NormalTexture\",\n\t\"MultiBarRightButton4Border\",\n\t\"MultiBarRightButton4Count\",\n\t\"MultiBarRightButton4Flash\",\n\t\"MultiBarRightButton4HotKey\",\n\t\"MultiBarRightButton4Icon\",\n\t\"MultiBarRightButton4Name\",\n\t\"MultiBarRightButton4NormalTexture\",\n\t\"MultiBarRightButton5Border\",\n\t\"MultiBarRightButton5Count\",\n\t\"MultiBarRightButton5Flash\",\n\t\"MultiBarRightButton5HotKey\",\n\t\"MultiBarRightButton5Icon\",\n\t\"MultiBarRightButton5Name\",\n\t\"MultiBarRightButton5NormalTexture\",\n\t\"MultiBarRightButton6Border\",\n\t\"MultiBarRightButton6Count\",\n\t\"MultiBarRightButton6Flash\",\n\t\"MultiBarRightButton6HotKey\",\n\t\"MultiBarRightButton6Icon\",\n\t\"MultiBarRightButton6Name\",\n\t\"MultiBarRightButton6NormalTexture\",\n\t\"MultiBarRightButton7Border\",\n\t\"MultiBarRightButton7Count\",\n\t\"MultiBarRightButton7Flash\",\n\t\"MultiBarRightButton7HotKey\",\n\t\"MultiBarRightButton7Icon\",\n\t\"MultiBarRightButton7Name\",\n\t\"MultiBarRightButton7NormalTexture\",\n\t\"MultiBarRightButton8Border\",\n\t\"MultiBarRightButton8Count\",\n\t\"MultiBarRightButton8Flash\",\n\t\"MultiBarRightButton8HotKey\",\n\t\"MultiBarRightButton8Icon\",\n\t\"MultiBarRightButton8Name\",\n\t\"MultiBarRightButton8NormalTexture\",\n\t\"MultiBarRightButton9Border\",\n\t\"MultiBarRightButton9Count\",\n\t\"MultiBarRightButton9Flash\",\n\t\"MultiBarRightButton9HotKey\",\n\t\"MultiBarRightButton9Icon\",\n\t\"MultiBarRightButton9Name\",\n\t\"MultiBarRightButton9NormalTexture\",\n\t\"MultiCastActionButton10Border\",\n\t\"MultiCastActionButton10Count\",\n\t\"MultiCastActionButton10Flash\",\n\t\"MultiCastActionButton10HotKey\",\n\t\"MultiCastActionButton10Icon\",\n\t\"MultiCastActionButton10Name\",\n\t\"MultiCastActionButton10NormalTexture\",\n\t\"MultiCastActionButton11Border\",\n\t\"MultiCastActionButton11Count\",\n\t\"MultiCastActionButton11Flash\",\n\t\"MultiCastActionButton11HotKey\",\n\t\"MultiCastActionButton11Icon\",\n\t\"MultiCastActionButton11Name\",\n\t\"MultiCastActionButton11NormalTexture\",\n\t\"MultiCastActionButton12Border\",\n\t\"MultiCastActionButton12Count\",\n\t\"MultiCastActionButton12Flash\",\n\t\"MultiCastActionButton12HotKey\",\n\t\"MultiCastActionButton12Icon\",\n\t\"MultiCastActionButton12Name\",\n\t\"MultiCastActionButton12NormalTexture\",\n\t\"MultiCastActionButton1Border\",\n\t\"MultiCastActionButton1Count\",\n\t\"MultiCastActionButton1Flash\",\n\t\"MultiCastActionButton1HotKey\",\n\t\"MultiCastActionButton1Icon\",\n\t\"MultiCastActionButton1Name\",\n\t\"MultiCastActionButton1NormalTexture\",\n\t\"MultiCastActionButton2Border\",\n\t\"MultiCastActionButton2Count\",\n\t\"MultiCastActionButton2Flash\",\n\t\"MultiCastActionButton2HotKey\",\n\t\"MultiCastActionButton2Icon\",\n\t\"MultiCastActionButton2Name\",\n\t\"MultiCastActionButton2NormalTexture\",\n\t\"MultiCastActionButton3Border\",\n\t\"MultiCastActionButton3Count\",\n\t\"MultiCastActionButton3Flash\",\n\t\"MultiCastActionButton3HotKey\",\n\t\"MultiCastActionButton3Icon\",\n\t\"MultiCastActionButton3Name\",\n\t\"MultiCastActionButton3NormalTexture\",\n\t\"MultiCastActionButton4Border\",\n\t\"MultiCastActionButton4Count\",\n\t\"MultiCastActionButton4Flash\",\n\t\"MultiCastActionButton4HotKey\",\n\t\"MultiCastActionButton4Icon\",\n\t\"MultiCastActionButton4Name\",\n\t\"MultiCastActionButton4NormalTexture\",\n\t\"MultiCastActionButton5Border\",\n\t\"MultiCastActionButton5Count\",\n\t\"MultiCastActionButton5Flash\",\n\t\"MultiCastActionButton5HotKey\",\n\t\"MultiCastActionButton5Icon\",\n\t\"MultiCastActionButton5Name\",\n\t\"MultiCastActionButton5NormalTexture\",\n\t\"MultiCastActionButton6Border\",\n\t\"MultiCastActionButton6Count\",\n\t\"MultiCastActionButton6Flash\",\n\t\"MultiCastActionButton6HotKey\",\n\t\"MultiCastActionButton6Icon\",\n\t\"MultiCastActionButton6Name\",\n\t\"MultiCastActionButton6NormalTexture\",\n\t\"MultiCastActionButton7Border\",\n\t\"MultiCastActionButton7Count\",\n\t\"MultiCastActionButton7Flash\",\n\t\"MultiCastActionButton7HotKey\",\n\t\"MultiCastActionButton7Icon\",\n\t\"MultiCastActionButton7Name\",\n\t\"MultiCastActionButton7NormalTexture\",\n\t\"MultiCastActionButton8Border\",\n\t\"MultiCastActionButton8Count\",\n\t\"MultiCastActionButton8Flash\",\n\t\"MultiCastActionButton8HotKey\",\n\t\"MultiCastActionButton8Icon\",\n\t\"MultiCastActionButton8Name\",\n\t\"MultiCastActionButton8NormalTexture\",\n\t\"MultiCastActionButton9Border\",\n\t\"MultiCastActionButton9Count\",\n\t\"MultiCastActionButton9Flash\",\n\t\"MultiCastActionButton9HotKey\",\n\t\"MultiCastActionButton9Icon\",\n\t\"MultiCastActionButton9Name\",\n\t\"MultiCastActionButton9NormalTexture\",\n\t\"MultiCastFlyoutFrameMiddle\",\n\t\"MultiCastFlyoutFrameTop\",\n\t\"MultiCastRecallSpellButtonBorder\",\n\t\"MultiCastRecallSpellButtonCount\",\n\t\"MultiCastRecallSpellButtonFlash\",\n\t\"MultiCastRecallSpellButtonHighlight\",\n\t\"MultiCastRecallSpellButtonHotKey\",\n\t\"MultiCastRecallSpellButtonIcon\",\n\t\"MultiCastRecallSpellButtonName\",\n\t\"MultiCastRecallSpellButtonNormalTexture\",\n\t\"MultiCastSummonSpellButtonBorder\",\n\t\"MultiCastSummonSpellButtonCount\",\n\t\"MultiCastSummonSpellButtonFlash\",\n\t\"MultiCastSummonSpellButtonHighlight\",\n\t\"MultiCastSummonSpellButtonHotKey\",\n\t\"MultiCastSummonSpellButtonIcon\",\n\t\"MultiCastSummonSpellButtonName\",\n\t\"MultiCastSummonSpellButtonNormalTexture\",\n\t\"NumberFontNormal\",\n\t\"NumberFontNormalHuge\",\n\t\"NumberFontNormalLarge\",\n\t\"NumberFontNormalLargeRight\",\n\t\"NumberFontNormalLargeRightRed\",\n\t\"NumberFontNormalLargeRightYellow\",\n\t\"NumberFontNormalLargeYellow\",\n\t\"NumberFontNormalRight\",\n\t\"NumberFontNormalRightRed\",\n\t\"NumberFontNormalRightYellow\",\n\t\"NumberFontNormalSmall\",\n\t\"NumberFontNormalSmallGray\",\n\t\"NumberFontNormalYellow\",\n\t\"NumberFont_OutlineThick_Mono_Small\",\n\t\"NumberFont_Outline_Huge\",\n\t\"NumberFont_Outline_Large\",\n\t\"NumberFont_Outline_Med\",\n\t\"NumberFont_Shadow_Med\",\n\t\"NumberFont_Shadow_Small\",\n\t\"OfficerNoteText\",\n\t\"OpacityFrameSliderText\",\n\t\"OpacitySliderFrameText\",\n\t\"OpenMailArithmeticLine\",\n\t\"OpenMailAttachmentButton10Count\",\n\t\"OpenMailAttachmentButton10IconTexture\",\n\t\"OpenMailAttachmentButton10NormalTexture\",\n\t\"OpenMailAttachmentButton10Stock\",\n\t\"OpenMailAttachmentButton11Count\",\n\t\"OpenMailAttachmentButton11IconTexture\",\n\t\"OpenMailAttachmentButton11NormalTexture\",\n\t\"OpenMailAttachmentButton11Stock\",\n\t\"OpenMailAttachmentButton12Count\",\n\t\"OpenMailAttachmentButton12IconTexture\",\n\t\"OpenMailAttachmentButton12NormalTexture\",\n\t\"OpenMailAttachmentButton12Stock\",\n\t\"OpenMailAttachmentButton13Count\",\n\t\"OpenMailAttachmentButton13IconTexture\",\n\t\"OpenMailAttachmentButton13NormalTexture\",\n\t\"OpenMailAttachmentButton13Stock\",\n\t\"OpenMailAttachmentButton14Count\",\n\t\"OpenMailAttachmentButton14IconTexture\",\n\t\"OpenMailAttachmentButton14NormalTexture\",\n\t\"OpenMailAttachmentButton14Stock\",\n\t\"OpenMailAttachmentButton15Count\",\n\t\"OpenMailAttachmentButton15IconTexture\",\n\t\"OpenMailAttachmentButton15NormalTexture\",\n\t\"OpenMailAttachmentButton15Stock\",\n\t\"OpenMailAttachmentButton16Count\",\n\t\"OpenMailAttachmentButton16IconTexture\",\n\t\"OpenMailAttachmentButton16NormalTexture\",\n\t\"OpenMailAttachmentButton16Stock\",\n\t\"OpenMailAttachmentButton1Count\",\n\t\"OpenMailAttachmentButton1IconTexture\",\n\t\"OpenMailAttachmentButton1NormalTexture\",\n\t\"OpenMailAttachmentButton1Stock\",\n\t\"OpenMailAttachmentButton2Count\",\n\t\"OpenMailAttachmentButton2IconTexture\",\n\t\"OpenMailAttachmentButton2NormalTexture\",\n\t\"OpenMailAttachmentButton2Stock\",\n\t\"OpenMailAttachmentButton3Count\",\n\t\"OpenMailAttachmentButton3IconTexture\",\n\t\"OpenMailAttachmentButton3NormalTexture\",\n\t\"OpenMailAttachmentButton3Stock\",\n\t\"OpenMailAttachmentButton4Count\",\n\t\"OpenMailAttachmentButton4IconTexture\",\n\t\"OpenMailAttachmentButton4NormalTexture\",\n\t\"OpenMailAttachmentButton4Stock\",\n\t\"OpenMailAttachmentButton5Count\",\n\t\"OpenMailAttachmentButton5IconTexture\",\n\t\"OpenMailAttachmentButton5NormalTexture\",\n\t\"OpenMailAttachmentButton5Stock\",\n\t\"OpenMailAttachmentButton6Count\",\n\t\"OpenMailAttachmentButton6IconTexture\",\n\t\"OpenMailAttachmentButton6NormalTexture\",\n\t\"OpenMailAttachmentButton6Stock\",\n\t\"OpenMailAttachmentButton7Count\",\n\t\"OpenMailAttachmentButton7IconTexture\",\n\t\"OpenMailAttachmentButton7NormalTexture\",\n\t\"OpenMailAttachmentButton7Stock\",\n\t\"OpenMailAttachmentButton8Count\",\n\t\"OpenMailAttachmentButton8IconTexture\",\n\t\"OpenMailAttachmentButton8NormalTexture\",\n\t\"OpenMailAttachmentButton8Stock\",\n\t\"OpenMailAttachmentButton9Count\",\n\t\"OpenMailAttachmentButton9IconTexture\",\n\t\"OpenMailAttachmentButton9NormalTexture\",\n\t\"OpenMailAttachmentButton9Stock\",\n\t\"OpenMailAttachmentText\",\n\t\"OpenMailBodyText\",\n\t\"OpenMailCancelButtonText\",\n\t\"OpenMailDeleteButtonText\",\n\t\"OpenMailDepositMoneyFrameCopperButtonText\",\n\t\"OpenMailDepositMoneyFrameGoldButtonText\",\n\t\"OpenMailDepositMoneyFrameSilverButtonText\",\n\t\"OpenMailFrameBotLeft\",\n\t\"OpenMailFrameBotRight\",\n\t\"OpenMailFrameIcon\",\n\t\"OpenMailFrameTopLeft\",\n\t\"OpenMailFrameTopRight\",\n\t\"OpenMailHorizontalBarLeft\",\n\t\"OpenMailHouseCutMoneyFrameCopperButtonText\",\n\t\"OpenMailHouseCutMoneyFrameGoldButtonText\",\n\t\"OpenMailHouseCutMoneyFrameSilverButtonText\",\n\t\"OpenMailInvoiceAmountReceived\",\n\t\"OpenMailInvoiceBuyMode\",\n\t\"OpenMailInvoiceDeposit\",\n\t\"OpenMailInvoiceHouseCut\",\n\t\"OpenMailInvoiceItemLabel\",\n\t\"OpenMailInvoiceMoneyDelay\",\n\t\"OpenMailInvoiceNotYetSent\",\n\t\"OpenMailInvoicePurchaser\",\n\t\"OpenMailInvoiceSalePrice\",\n\t\"OpenMailLetterButtonCount\",\n\t\"OpenMailLetterButtonIconTexture\",\n\t\"OpenMailLetterButtonNormalTexture\",\n\t\"OpenMailLetterButtonStock\",\n\t\"OpenMailMoneyButtonCount\",\n\t\"OpenMailMoneyButtonIconTexture\",\n\t\"OpenMailMoneyButtonNormalTexture\",\n\t\"OpenMailMoneyButtonStock\",\n\t\"OpenMailReplyButtonText\",\n\t\"OpenMailReportSpamButtonText\",\n\t\"OpenMailSalePriceMoneyFrameCopperButtonText\",\n\t\"OpenMailSalePriceMoneyFrameGoldButtonText\",\n\t\"OpenMailSalePriceMoneyFrameSilverButtonText\",\n\t\"OpenMailScrollFrameScrollBarThumbTexture\",\n\t\"OpenMailSender\",\n\t\"OpenMailSenderLabel\",\n\t\"OpenMailSubject\",\n\t\"OpenMailSubjectLabel\",\n\t\"OpenMailTitleText\",\n\t\"OpenMailTransactionAmountMoneyFrameCopperButtonText\",\n\t\"OpenMailTransactionAmountMoneyFrameGoldButtonText\",\n\t\"OpenMailTransactionAmountMoneyFrameSilverButtonText\",\n\t\"OpenScrollBarBackgroundTop\",\n\t\"OpenStationeryBackgroundLeft\",\n\t\"OpenStationeryBackgroundRight\",\n\t\"OutlandButtonHighlight\",\n\t\"PVPArenaTextString\",\n\t\"PVPBannerFrameAcceptButtonText\",\n\t\"PVPBannerFrameBackground\",\n\t\"PVPBannerFrameCancelButtonText\",\n\t\"PVPBannerFrameCustomization1Left\",\n\t\"PVPBannerFrameCustomization1Middle\",\n\t\"PVPBannerFrameCustomization1Right\",\n\t\"PVPBannerFrameCustomization1Text\",\n\t\"PVPBannerFrameCustomization2Left\",\n\t\"PVPBannerFrameCustomization2Middle\",\n\t\"PVPBannerFrameCustomization2Right\",\n\t\"PVPBannerFrameCustomization2Text\",\n\t\"PVPBannerFrameCustomizationBorder\",\n\t\"PVPBannerFrameEmblemBottomLeft\",\n\t\"PVPBannerFrameEmblemBottomRight\",\n\t\"PVPBannerFrameEmblemTopLeft\",\n\t\"PVPBannerFrameEmblemTopRight\",\n\t\"PVPBannerFrameGreetingText\",\n\t\"PVPBannerFrameNameText\",\n\t\"PVPBannerFrameOuterFrameBottom\",\n\t\"PVPBannerFrameOuterFrameBottomLeft\",\n\t\"PVPBannerFrameOuterFrameBottomRight\",\n\t\"PVPBannerFrameOuterFrameLeftBottom\",\n\t\"PVPBannerFrameOuterFrameLeftTop\",\n\t\"PVPBannerFrameOuterFrameRightBottom\",\n\t\"PVPBannerFrameOuterFrameRightTop\",\n\t\"PVPBannerFrameOuterFrameTop\",\n\t\"PVPBannerFrameOuterFrameTopLeft\",\n\t\"PVPBannerFrameOuterFrameTopRight\",\n\t\"PVPBannerFramePortrait\",\n\t\"PVPBannerFrameSaveButtonText\",\n\t\"PVPBannerFrameStandardBanner\",\n\t\"PVPBannerFrameStandardBorder\",\n\t\"PVPBannerFrameStandardEmblem\",\n\t\"PVPBannerFrameStandardEmblemWatermark\",\n\t\"PVPBattlegroundFrameBGTex\",\n\t\"PVPBattlegroundFrameCancelButtonText\",\n\t\"PVPBattlegroundFrameFrameLabel\",\n\t\"PVPBattlegroundFrameGroupJoinButtonText\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameDescription\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfoDescription\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfoLossRewardArenaAmount\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfoLossRewardArenaSymbol\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfoLossRewardHonorAmount\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfoLossRewardHonorSymbol\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfoLossRewardLabel\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfoRewardsLabel\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfoTitle\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfoWinRewardArenaAmount\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfoWinRewardArenaSymbol\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfoWinRewardHonorAmount\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfoWinRewardHonorSymbol\",\n\t\"PVPBattlegroundFrameInfoScrollFrameChildFrameRewardsInfoWinRewardLabel\",\n\t\"PVPBattlegroundFrameInfoScrollFrameScrollBarThumbTexture\",\n\t\"PVPBattlegroundFrameJoinButtonText\",\n\t\"PVPBattlegroundFrameNameHeader\",\n\t\"PVPBattlegroundFramePortrait\",\n\t\"PVPBattlegroundFrameTypeScrollFrameScrollBarThumbTexture\",\n\t\"PVPColorPickerButton1Text\",\n\t\"PVPColorPickerButton2Text\",\n\t\"PVPColorPickerButton3Text\",\n\t\"PVPDropDownButtonDisabledTexture\",\n\t\"PVPDropDownButtonHighlightTexture\",\n\t\"PVPDropDownButtonNormalTexture\",\n\t\"PVPDropDownButtonPushedTexture\",\n\t\"PVPDropDownLeft\",\n\t\"PVPDropDownMiddle\",\n\t\"PVPDropDownRight\",\n\t\"PVPDropDownText\",\n\t\"PVPFrameArenaIcon\",\n\t\"PVPFrameArenaLabel\",\n\t\"PVPFrameArenaPoints\",\n\t\"PVPFrameBackground\",\n\t\"PVPFrameBlackFilter\",\n\t\"PVPFrameHonorIcon\",\n\t\"PVPFrameHonorLabel\",\n\t\"PVPFrameHonorPoints\",\n\t\"PVPFrameLine1\",\n\t\"PVPFrameOffSeasonText\",\n\t\"PVPFramePortrait\",\n\t\"PVPHonorHonorLabel\",\n\t\"PVPHonorKillsLabel\",\n\t\"PVPHonorLifetimeHonor\",\n\t\"PVPHonorLifetimeKills\",\n\t\"PVPHonorLifetimeLabel\",\n\t\"PVPHonorTodayHonor\",\n\t\"PVPHonorTodayKills\",\n\t\"PVPHonorTodayLabel\",\n\t\"PVPHonorYesterdayHonor\",\n\t\"PVPHonorYesterdayKills\",\n\t\"PVPHonorYesterdayLabel\",\n\t\"PVPInfoTextFont\",\n\t\"PVPInfoTextString\",\n\t\"PVPMicroButtonTexture\",\n\t\"PVPParentFrameTab1HighlightTexture\",\n\t\"PVPParentFrameTab1Left\",\n\t\"PVPParentFrameTab1LeftDisabled\",\n\t\"PVPParentFrameTab1Middle\",\n\t\"PVPParentFrameTab1MiddleDisabled\",\n\t\"PVPParentFrameTab1Right\",\n\t\"PVPParentFrameTab1RightDisabled\",\n\t\"PVPParentFrameTab1Text\",\n\t\"PVPParentFrameTab2HighlightTexture\",\n\t\"PVPParentFrameTab2Left\",\n\t\"PVPParentFrameTab2LeftDisabled\",\n\t\"PVPParentFrameTab2Middle\",\n\t\"PVPParentFrameTab2MiddleDisabled\",\n\t\"PVPParentFrameTab2Right\",\n\t\"PVPParentFrameTab2RightDisabled\",\n\t\"PVPParentFrameTab2Text\",\n\t\"PVPTeam1Background\",\n\t\"PVPTeam1Bottom\",\n\t\"PVPTeam1Data-\",\n\t\"PVPTeam1DataGames\",\n\t\"PVPTeam1DataGamesLabel\",\n\t\"PVPTeam1DataLoss\",\n\t\"PVPTeam1DataName\",\n\t\"PVPTeam1DataPlayed\",\n\t\"PVPTeam1DataPlayedLabel\",\n\t\"PVPTeam1DataRating\",\n\t\"PVPTeam1DataRatingLabel\",\n\t\"PVPTeam1DataTypeLabel\",\n\t\"PVPTeam1DataWinLossLabel\",\n\t\"PVPTeam1DataWins\",\n\t\"PVPTeam1Left\",\n\t\"PVPTeam1Right\",\n\t\"PVPTeam1StandardBanner\",\n\t\"PVPTeam1StandardBar\",\n\t\"PVPTeam1StandardBorder\",\n\t\"PVPTeam1StandardEmblem\",\n\t\"PVPTeam1TeamType\",\n\t\"PVPTeam1Top\",\n\t\"PVPTeam2Background\",\n\t\"PVPTeam2Bottom\",\n\t\"PVPTeam2Data-\",\n\t\"PVPTeam2DataGames\",\n\t\"PVPTeam2DataGamesLabel\",\n\t\"PVPTeam2DataLoss\",\n\t\"PVPTeam2DataName\",\n\t\"PVPTeam2DataPlayed\",\n\t\"PVPTeam2DataPlayedLabel\",\n\t\"PVPTeam2DataRating\",\n\t\"PVPTeam2DataRatingLabel\",\n\t\"PVPTeam2DataTypeLabel\",\n\t\"PVPTeam2DataWinLossLabel\",\n\t\"PVPTeam2DataWins\",\n\t\"PVPTeam2Left\",\n\t\"PVPTeam2Right\",\n\t\"PVPTeam2StandardBanner\",\n\t\"PVPTeam2StandardBar\",\n\t\"PVPTeam2StandardBorder\",\n\t\"PVPTeam2StandardEmblem\",\n\t\"PVPTeam2TeamType\",\n\t\"PVPTeam2Top\",\n\t\"PVPTeam3Background\",\n\t\"PVPTeam3Bottom\",\n\t\"PVPTeam3Data-\",\n\t\"PVPTeam3DataGames\",\n\t\"PVPTeam3DataGamesLabel\",\n\t\"PVPTeam3DataLoss\",\n\t\"PVPTeam3DataName\",\n\t\"PVPTeam3DataPlayed\",\n\t\"PVPTeam3DataPlayedLabel\",\n\t\"PVPTeam3DataRating\",\n\t\"PVPTeam3DataRatingLabel\",\n\t\"PVPTeam3DataTypeLabel\",\n\t\"PVPTeam3DataWinLossLabel\",\n\t\"PVPTeam3DataWins\",\n\t\"PVPTeam3Left\",\n\t\"PVPTeam3Right\",\n\t\"PVPTeam3StandardBanner\",\n\t\"PVPTeam3StandardBar\",\n\t\"PVPTeam3StandardBorder\",\n\t\"PVPTeam3StandardEmblem\",\n\t\"PVPTeam3TeamType\",\n\t\"PVPTeam3Top\",\n\t\"PVPTeamDetails-\",\n\t\"PVPTeamDetailsAddTeamMemberText\",\n\t\"PVPTeamDetailsButton10ClassText\",\n\t\"PVPTeamDetailsButton10NameText\",\n\t\"PVPTeamDetailsButton10PlayedText\",\n\t\"PVPTeamDetailsButton10RatingText\",\n\t\"PVPTeamDetailsButton10WinLoss-\",\n\t\"PVPTeamDetailsButton10WinLossLoss\",\n\t\"PVPTeamDetailsButton10WinLossWin\",\n\t\"PVPTeamDetailsButton1ClassText\",\n\t\"PVPTeamDetailsButton1NameText\",\n\t\"PVPTeamDetailsButton1PlayedText\",\n\t\"PVPTeamDetailsButton1RatingText\",\n\t\"PVPTeamDetailsButton1WinLoss-\",\n\t\"PVPTeamDetailsButton1WinLossLoss\",\n\t\"PVPTeamDetailsButton1WinLossWin\",\n\t\"PVPTeamDetailsButton2ClassText\",\n\t\"PVPTeamDetailsButton2NameText\",\n\t\"PVPTeamDetailsButton2PlayedText\",\n\t\"PVPTeamDetailsButton2RatingText\",\n\t\"PVPTeamDetailsButton2WinLoss-\",\n\t\"PVPTeamDetailsButton2WinLossLoss\",\n\t\"PVPTeamDetailsButton2WinLossWin\",\n\t\"PVPTeamDetailsButton3ClassText\",\n\t\"PVPTeamDetailsButton3NameText\",\n\t\"PVPTeamDetailsButton3PlayedText\",\n\t\"PVPTeamDetailsButton3RatingText\",\n\t\"PVPTeamDetailsButton3WinLoss-\",\n\t\"PVPTeamDetailsButton3WinLossLoss\",\n\t\"PVPTeamDetailsButton3WinLossWin\",\n\t\"PVPTeamDetailsButton4ClassText\",\n\t\"PVPTeamDetailsButton4NameText\",\n\t\"PVPTeamDetailsButton4PlayedText\",\n\t\"PVPTeamDetailsButton4RatingText\",\n\t\"PVPTeamDetailsButton4WinLoss-\",\n\t\"PVPTeamDetailsButton4WinLossLoss\",\n\t\"PVPTeamDetailsButton4WinLossWin\",\n\t\"PVPTeamDetailsButton5ClassText\",\n\t\"PVPTeamDetailsButton5NameText\",\n\t\"PVPTeamDetailsButton5PlayedText\",\n\t\"PVPTeamDetailsButton5RatingText\",\n\t\"PVPTeamDetailsButton5WinLoss-\",\n\t\"PVPTeamDetailsButton5WinLossLoss\",\n\t\"PVPTeamDetailsButton5WinLossWin\",\n\t\"PVPTeamDetailsButton6ClassText\",\n\t\"PVPTeamDetailsButton6NameText\",\n\t\"PVPTeamDetailsButton6PlayedText\",\n\t\"PVPTeamDetailsButton6RatingText\",\n\t\"PVPTeamDetailsButton6WinLoss-\",\n\t\"PVPTeamDetailsButton6WinLossLoss\",\n\t\"PVPTeamDetailsButton6WinLossWin\",\n\t\"PVPTeamDetailsButton7ClassText\",\n\t\"PVPTeamDetailsButton7NameText\",\n\t\"PVPTeamDetailsButton7PlayedText\",\n\t\"PVPTeamDetailsButton7RatingText\",\n\t\"PVPTeamDetailsButton7WinLoss-\",\n\t\"PVPTeamDetailsButton7WinLossLoss\",\n\t\"PVPTeamDetailsButton7WinLossWin\",\n\t\"PVPTeamDetailsButton8ClassText\",\n\t\"PVPTeamDetailsButton8NameText\",\n\t\"PVPTeamDetailsButton8PlayedText\",\n\t\"PVPTeamDetailsButton8RatingText\",\n\t\"PVPTeamDetailsButton8WinLoss-\",\n\t\"PVPTeamDetailsButton8WinLossLoss\",\n\t\"PVPTeamDetailsButton8WinLossWin\",\n\t\"PVPTeamDetailsButton9ClassText\",\n\t\"PVPTeamDetailsButton9NameText\",\n\t\"PVPTeamDetailsButton9PlayedText\",\n\t\"PVPTeamDetailsButton9RatingText\",\n\t\"PVPTeamDetailsButton9WinLoss-\",\n\t\"PVPTeamDetailsButton9WinLossLoss\",\n\t\"PVPTeamDetailsButton9WinLossWin\",\n\t\"PVPTeamDetailsFrameColumnHeader1HighlightTexture\",\n\t\"PVPTeamDetailsFrameColumnHeader1Left\",\n\t\"PVPTeamDetailsFrameColumnHeader1Middle\",\n\t\"PVPTeamDetailsFrameColumnHeader1Right\",\n\t\"PVPTeamDetailsFrameColumnHeader2HighlightTexture\",\n\t\"PVPTeamDetailsFrameColumnHeader2Left\",\n\t\"PVPTeamDetailsFrameColumnHeader2Middle\",\n\t\"PVPTeamDetailsFrameColumnHeader2Right\",\n\t\"PVPTeamDetailsFrameColumnHeader3HighlightTexture\",\n\t\"PVPTeamDetailsFrameColumnHeader3Left\",\n\t\"PVPTeamDetailsFrameColumnHeader3Middle\",\n\t\"PVPTeamDetailsFrameColumnHeader3Right\",\n\t\"PVPTeamDetailsFrameColumnHeader4HighlightTexture\",\n\t\"PVPTeamDetailsFrameColumnHeader4Left\",\n\t\"PVPTeamDetailsFrameColumnHeader4Middle\",\n\t\"PVPTeamDetailsFrameColumnHeader4Right\",\n\t\"PVPTeamDetailsFrameColumnHeader5HighlightTexture\",\n\t\"PVPTeamDetailsFrameColumnHeader5Left\",\n\t\"PVPTeamDetailsFrameColumnHeader5Middle\",\n\t\"PVPTeamDetailsFrameColumnHeader5Right\",\n\t\"PVPTeamDetailsGames\",\n\t\"PVPTeamDetailsGamesLabel\",\n\t\"PVPTeamDetailsLoss\",\n\t\"PVPTeamDetailsName\",\n\t\"PVPTeamDetailsRank\",\n\t\"PVPTeamDetailsRankLabel\",\n\t\"PVPTeamDetailsRating\",\n\t\"PVPTeamDetailsRatingLabel\",\n\t\"PVPTeamDetailsSize\",\n\t\"PVPTeamDetailsStatsType\",\n\t\"PVPTeamDetailsWinLossLabel\",\n\t\"PVPTeamDetailsWins\",\n\t\"PaperDollFrameItemFlyoutHighlight\",\n\t\"PartyMemberBuffTooltipBuff10Icon\",\n\t\"PartyMemberBuffTooltipBuff11Icon\",\n\t\"PartyMemberBuffTooltipBuff12Icon\",\n\t\"PartyMemberBuffTooltipBuff13Icon\",\n\t\"PartyMemberBuffTooltipBuff14Icon\",\n\t\"PartyMemberBuffTooltipBuff15Icon\",\n\t\"PartyMemberBuffTooltipBuff16Icon\",\n\t\"PartyMemberBuffTooltipBuff1Icon\",\n\t\"PartyMemberBuffTooltipBuff2Icon\",\n\t\"PartyMemberBuffTooltipBuff3Icon\",\n\t\"PartyMemberBuffTooltipBuff4Icon\",\n\t\"PartyMemberBuffTooltipBuff5Icon\",\n\t\"PartyMemberBuffTooltipBuff6Icon\",\n\t\"PartyMemberBuffTooltipBuff7Icon\",\n\t\"PartyMemberBuffTooltipBuff8Icon\",\n\t\"PartyMemberBuffTooltipBuff9Icon\",\n\t\"PartyMemberBuffTooltipDebuff1Border\",\n\t\"PartyMemberBuffTooltipDebuff1Icon\",\n\t\"PartyMemberBuffTooltipDebuff2Border\",\n\t\"PartyMemberBuffTooltipDebuff2Icon\",\n\t\"PartyMemberBuffTooltipDebuff3Border\",\n\t\"PartyMemberBuffTooltipDebuff3Icon\",\n\t\"PartyMemberBuffTooltipDebuff4Border\",\n\t\"PartyMemberBuffTooltipDebuff4Icon\",\n\t\"PartyMemberBuffTooltipDebuff5Border\",\n\t\"PartyMemberBuffTooltipDebuff5Icon\",\n\t\"PartyMemberBuffTooltipDebuff6Border\",\n\t\"PartyMemberBuffTooltipDebuff6Icon\",\n\t\"PartyMemberBuffTooltipDebuff7Border\",\n\t\"PartyMemberBuffTooltipDebuff7Icon\",\n\t\"PartyMemberBuffTooltipDebuff8Border\",\n\t\"PartyMemberBuffTooltipDebuff8Icon\",\n\t\"PartyMemberFrame1Background\",\n\t\"PartyMemberFrame1Debuff1Border\",\n\t\"PartyMemberFrame1Debuff1Icon\",\n\t\"PartyMemberFrame1Debuff2Border\",\n\t\"PartyMemberFrame1Debuff2Icon\",\n\t\"PartyMemberFrame1Debuff3Border\",\n\t\"PartyMemberFrame1Debuff3Icon\",\n\t\"PartyMemberFrame1Debuff4Border\",\n\t\"PartyMemberFrame1Debuff4Icon\",\n\t\"PartyMemberFrame1Disconnect\",\n\t\"PartyMemberFrame1DropDownButtonDisabledTexture\",\n\t\"PartyMemberFrame1DropDownButtonHighlightTexture\",\n\t\"PartyMemberFrame1DropDownButtonNormalTexture\",\n\t\"PartyMemberFrame1DropDownButtonPushedTexture\",\n\t\"PartyMemberFrame1DropDownLeft\",\n\t\"PartyMemberFrame1DropDownMiddle\",\n\t\"PartyMemberFrame1DropDownRight\",\n\t\"PartyMemberFrame1DropDownText\",\n\t\"PartyMemberFrame1Flash\",\n\t\"PartyMemberFrame1GuideIcon\",\n\t\"PartyMemberFrame1HealthBarText\",\n\t\"PartyMemberFrame1LeaderIcon\",\n\t\"PartyMemberFrame1ManaBarText\",\n\t\"PartyMemberFrame1MasterIcon\",\n\t\"PartyMemberFrame1Name\",\n\t\"PartyMemberFrame1PVPIcon\",\n\t\"PartyMemberFrame1PetFrameDebuff1Border\",\n\t\"PartyMemberFrame1PetFrameDebuff1Icon\",\n\t\"PartyMemberFrame1PetFrameDebuff2Border\",\n\t\"PartyMemberFrame1PetFrameDebuff2Icon\",\n\t\"PartyMemberFrame1PetFrameDebuff3Border\",\n\t\"PartyMemberFrame1PetFrameDebuff3Icon\",\n\t\"PartyMemberFrame1PetFrameDebuff4Border\",\n\t\"PartyMemberFrame1PetFrameDebuff4Icon\",\n\t\"PartyMemberFrame1PetFrameFlash\",\n\t\"PartyMemberFrame1PetFrameName\",\n\t\"PartyMemberFrame1PetFramePortrait\",\n\t\"PartyMemberFrame1PetFrameTexture\",\n\t\"PartyMemberFrame1Portrait\",\n\t\"PartyMemberFrame1ReadyCheckTexture\",\n\t\"PartyMemberFrame1RoleIcon\",\n\t\"PartyMemberFrame1SpeakerFlash\",\n\t\"PartyMemberFrame1SpeakerFrameFlash\",\n\t\"PartyMemberFrame1SpeakerFrameMuted\",\n\t\"PartyMemberFrame1SpeakerFrameOn\",\n\t\"PartyMemberFrame1SpeakerMuted\",\n\t\"PartyMemberFrame1SpeakerOn\",\n\t\"PartyMemberFrame1Status\",\n\t\"PartyMemberFrame1Texture\",\n\t\"PartyMemberFrame1VehicleTexture\",\n\t\"PartyMemberFrame2Background\",\n\t\"PartyMemberFrame2Debuff1Border\",\n\t\"PartyMemberFrame2Debuff1Icon\",\n\t\"PartyMemberFrame2Debuff2Border\",\n\t\"PartyMemberFrame2Debuff2Icon\",\n\t\"PartyMemberFrame2Debuff3Border\",\n\t\"PartyMemberFrame2Debuff3Icon\",\n\t\"PartyMemberFrame2Debuff4Border\",\n\t\"PartyMemberFrame2Debuff4Icon\",\n\t\"PartyMemberFrame2Disconnect\",\n\t\"PartyMemberFrame2DropDownButtonDisabledTexture\",\n\t\"PartyMemberFrame2DropDownButtonHighlightTexture\",\n\t\"PartyMemberFrame2DropDownButtonNormalTexture\",\n\t\"PartyMemberFrame2DropDownButtonPushedTexture\",\n\t\"PartyMemberFrame2DropDownLeft\",\n\t\"PartyMemberFrame2DropDownMiddle\",\n\t\"PartyMemberFrame2DropDownRight\",\n\t\"PartyMemberFrame2DropDownText\",\n\t\"PartyMemberFrame2Flash\",\n\t\"PartyMemberFrame2GuideIcon\",\n\t\"PartyMemberFrame2HealthBarText\",\n\t\"PartyMemberFrame2LeaderIcon\",\n\t\"PartyMemberFrame2ManaBarText\",\n\t\"PartyMemberFrame2MasterIcon\",\n\t\"PartyMemberFrame2Name\",\n\t\"PartyMemberFrame2PVPIcon\",\n\t\"PartyMemberFrame2PetFrameDebuff1Border\",\n\t\"PartyMemberFrame2PetFrameDebuff1Icon\",\n\t\"PartyMemberFrame2PetFrameDebuff2Border\",\n\t\"PartyMemberFrame2PetFrameDebuff2Icon\",\n\t\"PartyMemberFrame2PetFrameDebuff3Border\",\n\t\"PartyMemberFrame2PetFrameDebuff3Icon\",\n\t\"PartyMemberFrame2PetFrameDebuff4Border\",\n\t\"PartyMemberFrame2PetFrameDebuff4Icon\",\n\t\"PartyMemberFrame2PetFrameFlash\",\n\t\"PartyMemberFrame2PetFrameName\",\n\t\"PartyMemberFrame2PetFramePortrait\",\n\t\"PartyMemberFrame2PetFrameTexture\",\n\t\"PartyMemberFrame2Portrait\",\n\t\"PartyMemberFrame2ReadyCheckTexture\",\n\t\"PartyMemberFrame2RoleIcon\",\n\t\"PartyMemberFrame2SpeakerFlash\",\n\t\"PartyMemberFrame2SpeakerFrameFlash\",\n\t\"PartyMemberFrame2SpeakerFrameMuted\",\n\t\"PartyMemberFrame2SpeakerFrameOn\",\n\t\"PartyMemberFrame2SpeakerMuted\",\n\t\"PartyMemberFrame2SpeakerOn\",\n\t\"PartyMemberFrame2Status\",\n\t\"PartyMemberFrame2Texture\",\n\t\"PartyMemberFrame2VehicleTexture\",\n\t\"PartyMemberFrame3Background\",\n\t\"PartyMemberFrame3Debuff1Border\",\n\t\"PartyMemberFrame3Debuff1Icon\",\n\t\"PartyMemberFrame3Debuff2Border\",\n\t\"PartyMemberFrame3Debuff2Icon\",\n\t\"PartyMemberFrame3Debuff3Border\",\n\t\"PartyMemberFrame3Debuff3Icon\",\n\t\"PartyMemberFrame3Debuff4Border\",\n\t\"PartyMemberFrame3Debuff4Icon\",\n\t\"PartyMemberFrame3Disconnect\",\n\t\"PartyMemberFrame3DropDownButtonDisabledTexture\",\n\t\"PartyMemberFrame3DropDownButtonHighlightTexture\",\n\t\"PartyMemberFrame3DropDownButtonNormalTexture\",\n\t\"PartyMemberFrame3DropDownButtonPushedTexture\",\n\t\"PartyMemberFrame3DropDownLeft\",\n\t\"PartyMemberFrame3DropDownMiddle\",\n\t\"PartyMemberFrame3DropDownRight\",\n\t\"PartyMemberFrame3DropDownText\",\n\t\"PartyMemberFrame3Flash\",\n\t\"PartyMemberFrame3GuideIcon\",\n\t\"PartyMemberFrame3HealthBarText\",\n\t\"PartyMemberFrame3LeaderIcon\",\n\t\"PartyMemberFrame3ManaBarText\",\n\t\"PartyMemberFrame3MasterIcon\",\n\t\"PartyMemberFrame3Name\",\n\t\"PartyMemberFrame3PVPIcon\",\n\t\"PartyMemberFrame3PetFrameDebuff1Border\",\n\t\"PartyMemberFrame3PetFrameDebuff1Icon\",\n\t\"PartyMemberFrame3PetFrameDebuff2Border\",\n\t\"PartyMemberFrame3PetFrameDebuff2Icon\",\n\t\"PartyMemberFrame3PetFrameDebuff3Border\",\n\t\"PartyMemberFrame3PetFrameDebuff3Icon\",\n\t\"PartyMemberFrame3PetFrameDebuff4Border\",\n\t\"PartyMemberFrame3PetFrameDebuff4Icon\",\n\t\"PartyMemberFrame3PetFrameFlash\",\n\t\"PartyMemberFrame3PetFrameName\",\n\t\"PartyMemberFrame3PetFramePortrait\",\n\t\"PartyMemberFrame3PetFrameTexture\",\n\t\"PartyMemberFrame3Portrait\",\n\t\"PartyMemberFrame3ReadyCheckTexture\",\n\t\"PartyMemberFrame3RoleIcon\",\n\t\"PartyMemberFrame3SpeakerFlash\",\n\t\"PartyMemberFrame3SpeakerFrameFlash\",\n\t\"PartyMemberFrame3SpeakerFrameMuted\",\n\t\"PartyMemberFrame3SpeakerFrameOn\",\n\t\"PartyMemberFrame3SpeakerMuted\",\n\t\"PartyMemberFrame3SpeakerOn\",\n\t\"PartyMemberFrame3Status\",\n\t\"PartyMemberFrame3Texture\",\n\t\"PartyMemberFrame3VehicleTexture\",\n\t\"PartyMemberFrame4Background\",\n\t\"PartyMemberFrame4Debuff1Border\",\n\t\"PartyMemberFrame4Debuff1Icon\",\n\t\"PartyMemberFrame4Debuff2Border\",\n\t\"PartyMemberFrame4Debuff2Icon\",\n\t\"PartyMemberFrame4Debuff3Border\",\n\t\"PartyMemberFrame4Debuff3Icon\",\n\t\"PartyMemberFrame4Debuff4Border\",\n\t\"PartyMemberFrame4Debuff4Icon\",\n\t\"PartyMemberFrame4Disconnect\",\n\t\"PartyMemberFrame4DropDownButtonDisabledTexture\",\n\t\"PartyMemberFrame4DropDownButtonHighlightTexture\",\n\t\"PartyMemberFrame4DropDownButtonNormalTexture\",\n\t\"PartyMemberFrame4DropDownButtonPushedTexture\",\n\t\"PartyMemberFrame4DropDownLeft\",\n\t\"PartyMemberFrame4DropDownMiddle\",\n\t\"PartyMemberFrame4DropDownRight\",\n\t\"PartyMemberFrame4DropDownText\",\n\t\"PartyMemberFrame4Flash\",\n\t\"PartyMemberFrame4GuideIcon\",\n\t\"PartyMemberFrame4HealthBarText\",\n\t\"PartyMemberFrame4LeaderIcon\",\n\t\"PartyMemberFrame4ManaBarText\",\n\t\"PartyMemberFrame4MasterIcon\",\n\t\"PartyMemberFrame4Name\",\n\t\"PartyMemberFrame4PVPIcon\",\n\t\"PartyMemberFrame4PetFrameDebuff1Border\",\n\t\"PartyMemberFrame4PetFrameDebuff1Icon\",\n\t\"PartyMemberFrame4PetFrameDebuff2Border\",\n\t\"PartyMemberFrame4PetFrameDebuff2Icon\",\n\t\"PartyMemberFrame4PetFrameDebuff3Border\",\n\t\"PartyMemberFrame4PetFrameDebuff3Icon\",\n\t\"PartyMemberFrame4PetFrameDebuff4Border\",\n\t\"PartyMemberFrame4PetFrameDebuff4Icon\",\n\t\"PartyMemberFrame4PetFrameFlash\",\n\t\"PartyMemberFrame4PetFrameName\",\n\t\"PartyMemberFrame4PetFramePortrait\",\n\t\"PartyMemberFrame4PetFrameTexture\",\n\t\"PartyMemberFrame4Portrait\",\n\t\"PartyMemberFrame4ReadyCheckTexture\",\n\t\"PartyMemberFrame4RoleIcon\",\n\t\"PartyMemberFrame4SpeakerFlash\",\n\t\"PartyMemberFrame4SpeakerFrameFlash\",\n\t\"PartyMemberFrame4SpeakerFrameMuted\",\n\t\"PartyMemberFrame4SpeakerFrameOn\",\n\t\"PartyMemberFrame4SpeakerMuted\",\n\t\"PartyMemberFrame4SpeakerOn\",\n\t\"PartyMemberFrame4Status\",\n\t\"PartyMemberFrame4Texture\",\n\t\"PartyMemberFrame4VehicleTexture\",\n\t\"PendingListFrameDropDownButtonDisabledTexture\",\n\t\"PendingListFrameDropDownButtonHighlightTexture\",\n\t\"PendingListFrameDropDownButtonNormalTexture\",\n\t\"PendingListFrameDropDownButtonPushedTexture\",\n\t\"PendingListFrameDropDownLeft\",\n\t\"PendingListFrameDropDownMiddle\",\n\t\"PendingListFrameDropDownRight\",\n\t\"PendingListFrameDropDownText\",\n\t\"PendingListInfoFrameBattlenetIcon\",\n\t\"PendingListInfoFrameContinueButtonLeft\",\n\t\"PendingListInfoFrameContinueButtonMiddle\",\n\t\"PendingListInfoFrameContinueButtonRight\",\n\t\"PendingListInfoFrameContinueButtonText\",\n\t\"PendingListInfoFrameLeft\",\n\t\"PendingListInfoFramePlayerIcon\",\n\t\"PendingListInfoFrameTitle\",\n\t\"PersonalNoteText\",\n\t\"PetActionButton10AutoCastable\",\n\t\"PetActionButton10Border\",\n\t\"PetActionButton10Count\",\n\t\"PetActionButton10Flash\",\n\t\"PetActionButton10HotKey\",\n\t\"PetActionButton10Icon\",\n\t\"PetActionButton10Name\",\n\t\"PetActionButton10NormalTexture2\",\n\t\"PetActionButton10Shine1\",\n\t\"PetActionButton10Shine10\",\n\t\"PetActionButton10Shine11\",\n\t\"PetActionButton10Shine12\",\n\t\"PetActionButton10Shine13\",\n\t\"PetActionButton10Shine14\",\n\t\"PetActionButton10Shine15\",\n\t\"PetActionButton10Shine16\",\n\t\"PetActionButton10Shine2\",\n\t\"PetActionButton10Shine3\",\n\t\"PetActionButton10Shine4\",\n\t\"PetActionButton10Shine5\",\n\t\"PetActionButton10Shine6\",\n\t\"PetActionButton10Shine7\",\n\t\"PetActionButton10Shine8\",\n\t\"PetActionButton10Shine9\",\n\t\"PetActionButton1AutoCastable\",\n\t\"PetActionButton1Border\",\n\t\"PetActionButton1Count\",\n\t\"PetActionButton1Flash\",\n\t\"PetActionButton1HotKey\",\n\t\"PetActionButton1Icon\",\n\t\"PetActionButton1Name\",\n\t\"PetActionButton1NormalTexture2\",\n\t\"PetActionButton1Shine1\",\n\t\"PetActionButton1Shine10\",\n\t\"PetActionButton1Shine11\",\n\t\"PetActionButton1Shine12\",\n\t\"PetActionButton1Shine13\",\n\t\"PetActionButton1Shine14\",\n\t\"PetActionButton1Shine15\",\n\t\"PetActionButton1Shine16\",\n\t\"PetActionButton1Shine2\",\n\t\"PetActionButton1Shine3\",\n\t\"PetActionButton1Shine4\",\n\t\"PetActionButton1Shine5\",\n\t\"PetActionButton1Shine6\",\n\t\"PetActionButton1Shine7\",\n\t\"PetActionButton1Shine8\",\n\t\"PetActionButton1Shine9\",\n\t\"PetActionButton2AutoCastable\",\n\t\"PetActionButton2Border\",\n\t\"PetActionButton2Count\",\n\t\"PetActionButton2Flash\",\n\t\"PetActionButton2HotKey\",\n\t\"PetActionButton2Icon\",\n\t\"PetActionButton2Name\",\n\t\"PetActionButton2NormalTexture2\",\n\t\"PetActionButton2Shine1\",\n\t\"PetActionButton2Shine10\",\n\t\"PetActionButton2Shine11\",\n\t\"PetActionButton2Shine12\",\n\t\"PetActionButton2Shine13\",\n\t\"PetActionButton2Shine14\",\n\t\"PetActionButton2Shine15\",\n\t\"PetActionButton2Shine16\",\n\t\"PetActionButton2Shine2\",\n\t\"PetActionButton2Shine3\",\n\t\"PetActionButton2Shine4\",\n\t\"PetActionButton2Shine5\",\n\t\"PetActionButton2Shine6\",\n\t\"PetActionButton2Shine7\",\n\t\"PetActionButton2Shine8\",\n\t\"PetActionButton2Shine9\",\n\t\"PetActionButton3AutoCastable\",\n\t\"PetActionButton3Border\",\n\t\"PetActionButton3Count\",\n\t\"PetActionButton3Flash\",\n\t\"PetActionButton3HotKey\",\n\t\"PetActionButton3Icon\",\n\t\"PetActionButton3Name\",\n\t\"PetActionButton3NormalTexture2\",\n\t\"PetActionButton3Shine1\",\n\t\"PetActionButton3Shine10\",\n\t\"PetActionButton3Shine11\",\n\t\"PetActionButton3Shine12\",\n\t\"PetActionButton3Shine13\",\n\t\"PetActionButton3Shine14\",\n\t\"PetActionButton3Shine15\",\n\t\"PetActionButton3Shine16\",\n\t\"PetActionButton3Shine2\",\n\t\"PetActionButton3Shine3\",\n\t\"PetActionButton3Shine4\",\n\t\"PetActionButton3Shine5\",\n\t\"PetActionButton3Shine6\",\n\t\"PetActionButton3Shine7\",\n\t\"PetActionButton3Shine8\",\n\t\"PetActionButton3Shine9\",\n\t\"PetActionButton4AutoCastable\",\n\t\"PetActionButton4Border\",\n\t\"PetActionButton4Count\",\n\t\"PetActionButton4Flash\",\n\t\"PetActionButton4HotKey\",\n\t\"PetActionButton4Icon\",\n\t\"PetActionButton4Name\",\n\t\"PetActionButton4NormalTexture2\",\n\t\"PetActionButton4Shine1\",\n\t\"PetActionButton4Shine10\",\n\t\"PetActionButton4Shine11\",\n\t\"PetActionButton4Shine12\",\n\t\"PetActionButton4Shine13\",\n\t\"PetActionButton4Shine14\",\n\t\"PetActionButton4Shine15\",\n\t\"PetActionButton4Shine16\",\n\t\"PetActionButton4Shine2\",\n\t\"PetActionButton4Shine3\",\n\t\"PetActionButton4Shine4\",\n\t\"PetActionButton4Shine5\",\n\t\"PetActionButton4Shine6\",\n\t\"PetActionButton4Shine7\",\n\t\"PetActionButton4Shine8\",\n\t\"PetActionButton4Shine9\",\n\t\"PetActionButton5AutoCastable\",\n\t\"PetActionButton5Border\",\n\t\"PetActionButton5Count\",\n\t\"PetActionButton5Flash\",\n\t\"PetActionButton5HotKey\",\n\t\"PetActionButton5Icon\",\n\t\"PetActionButton5Name\",\n\t\"PetActionButton5NormalTexture2\",\n\t\"PetActionButton5Shine1\",\n\t\"PetActionButton5Shine10\",\n\t\"PetActionButton5Shine11\",\n\t\"PetActionButton5Shine12\",\n\t\"PetActionButton5Shine13\",\n\t\"PetActionButton5Shine14\",\n\t\"PetActionButton5Shine15\",\n\t\"PetActionButton5Shine16\",\n\t\"PetActionButton5Shine2\",\n\t\"PetActionButton5Shine3\",\n\t\"PetActionButton5Shine4\",\n\t\"PetActionButton5Shine5\",\n\t\"PetActionButton5Shine6\",\n\t\"PetActionButton5Shine7\",\n\t\"PetActionButton5Shine8\",\n\t\"PetActionButton5Shine9\",\n\t\"PetActionButton6AutoCastable\",\n\t\"PetActionButton6Border\",\n\t\"PetActionButton6Count\",\n\t\"PetActionButton6Flash\",\n\t\"PetActionButton6HotKey\",\n\t\"PetActionButton6Icon\",\n\t\"PetActionButton6Name\",\n\t\"PetActionButton6NormalTexture2\",\n\t\"PetActionButton6Shine1\",\n\t\"PetActionButton6Shine10\",\n\t\"PetActionButton6Shine11\",\n\t\"PetActionButton6Shine12\",\n\t\"PetActionButton6Shine13\",\n\t\"PetActionButton6Shine14\",\n\t\"PetActionButton6Shine15\",\n\t\"PetActionButton6Shine16\",\n\t\"PetActionButton6Shine2\",\n\t\"PetActionButton6Shine3\",\n\t\"PetActionButton6Shine4\",\n\t\"PetActionButton6Shine5\",\n\t\"PetActionButton6Shine6\",\n\t\"PetActionButton6Shine7\",\n\t\"PetActionButton6Shine8\",\n\t\"PetActionButton6Shine9\",\n\t\"PetActionButton7AutoCastable\",\n\t\"PetActionButton7Border\",\n\t\"PetActionButton7Count\",\n\t\"PetActionButton7Flash\",\n\t\"PetActionButton7HotKey\",\n\t\"PetActionButton7Icon\",\n\t\"PetActionButton7Name\",\n\t\"PetActionButton7NormalTexture2\",\n\t\"PetActionButton7Shine1\",\n\t\"PetActionButton7Shine10\",\n\t\"PetActionButton7Shine11\",\n\t\"PetActionButton7Shine12\",\n\t\"PetActionButton7Shine13\",\n\t\"PetActionButton7Shine14\",\n\t\"PetActionButton7Shine15\",\n\t\"PetActionButton7Shine16\",\n\t\"PetActionButton7Shine2\",\n\t\"PetActionButton7Shine3\",\n\t\"PetActionButton7Shine4\",\n\t\"PetActionButton7Shine5\",\n\t\"PetActionButton7Shine6\",\n\t\"PetActionButton7Shine7\",\n\t\"PetActionButton7Shine8\",\n\t\"PetActionButton7Shine9\",\n\t\"PetActionButton8AutoCastable\",\n\t\"PetActionButton8Border\",\n\t\"PetActionButton8Count\",\n\t\"PetActionButton8Flash\",\n\t\"PetActionButton8HotKey\",\n\t\"PetActionButton8Icon\",\n\t\"PetActionButton8Name\",\n\t\"PetActionButton8NormalTexture2\",\n\t\"PetActionButton8Shine1\",\n\t\"PetActionButton8Shine10\",\n\t\"PetActionButton8Shine11\",\n\t\"PetActionButton8Shine12\",\n\t\"PetActionButton8Shine13\",\n\t\"PetActionButton8Shine14\",\n\t\"PetActionButton8Shine15\",\n\t\"PetActionButton8Shine16\",\n\t\"PetActionButton8Shine2\",\n\t\"PetActionButton8Shine3\",\n\t\"PetActionButton8Shine4\",\n\t\"PetActionButton8Shine5\",\n\t\"PetActionButton8Shine6\",\n\t\"PetActionButton8Shine7\",\n\t\"PetActionButton8Shine8\",\n\t\"PetActionButton8Shine9\",\n\t\"PetActionButton9AutoCastable\",\n\t\"PetActionButton9Border\",\n\t\"PetActionButton9Count\",\n\t\"PetActionButton9Flash\",\n\t\"PetActionButton9HotKey\",\n\t\"PetActionButton9Icon\",\n\t\"PetActionButton9Name\",\n\t\"PetActionButton9NormalTexture2\",\n\t\"PetActionButton9Shine1\",\n\t\"PetActionButton9Shine10\",\n\t\"PetActionButton9Shine11\",\n\t\"PetActionButton9Shine12\",\n\t\"PetActionButton9Shine13\",\n\t\"PetActionButton9Shine14\",\n\t\"PetActionButton9Shine15\",\n\t\"PetActionButton9Shine16\",\n\t\"PetActionButton9Shine2\",\n\t\"PetActionButton9Shine3\",\n\t\"PetActionButton9Shine4\",\n\t\"PetActionButton9Shine5\",\n\t\"PetActionButton9Shine6\",\n\t\"PetActionButton9Shine7\",\n\t\"PetActionButton9Shine8\",\n\t\"PetActionButton9Shine9\",\n\t\"PetArmorFrameLabel\",\n\t\"PetArmorFrameStatText\",\n\t\"PetAttackModeTexture\",\n\t\"PetAttackPowerFrameLabel\",\n\t\"PetAttackPowerFrameStatText\",\n\t\"PetCastingBarFrameBorder\",\n\t\"PetCastingBarFrameBorderShield\",\n\t\"PetCastingBarFrameFlash\",\n\t\"PetCastingBarFrameIcon\",\n\t\"PetCastingBarFrameSpark\",\n\t\"PetCastingBarFrameText\",\n\t\"PetDamageFrameLabel\",\n\t\"PetDamageFrameStatText\",\n\t\"PetFrameDebuff1Border\",\n\t\"PetFrameDebuff1Icon\",\n\t\"PetFrameDebuff2Border\",\n\t\"PetFrameDebuff2Icon\",\n\t\"PetFrameDebuff3Border\",\n\t\"PetFrameDebuff3Icon\",\n\t\"PetFrameDebuff4Border\",\n\t\"PetFrameDebuff4Icon\",\n\t\"PetFrameDropDownButtonDisabledTexture\",\n\t\"PetFrameDropDownButtonHighlightTexture\",\n\t\"PetFrameDropDownButtonNormalTexture\",\n\t\"PetFrameDropDownButtonPushedTexture\",\n\t\"PetFrameDropDownLeft\",\n\t\"PetFrameDropDownMiddle\",\n\t\"PetFrameDropDownRight\",\n\t\"PetFrameDropDownText\",\n\t\"PetFrameFlash\",\n\t\"PetFrameHappinessTexture\",\n\t\"PetFrameHealthBarText\",\n\t\"PetFrameManaBarText\",\n\t\"PetFrameTexture\",\n\t\"PetHitIndicator\",\n\t\"PetLevelText\",\n\t\"PetMagicResText1\",\n\t\"PetMagicResText2\",\n\t\"PetMagicResText3\",\n\t\"PetMagicResText4\",\n\t\"PetMagicResText5\",\n\t\"PetName\",\n\t\"PetNameText\",\n\t\"PetPaperDollCloseButtonText\",\n\t\"PetPaperDollFrameExpBarText\",\n\t\"PetPaperDollFrameTab1HighlightTexture\",\n\t\"PetPaperDollFrameTab1Left\",\n\t\"PetPaperDollFrameTab1LeftDisabled\",\n\t\"PetPaperDollFrameTab1Middle\",\n\t\"PetPaperDollFrameTab1MiddleDisabled\",\n\t\"PetPaperDollFrameTab1Right\",\n\t\"PetPaperDollFrameTab1RightDisabled\",\n\t\"PetPaperDollFrameTab1Text\",\n\t\"PetPaperDollFrameTab2HighlightTexture\",\n\t\"PetPaperDollFrameTab2Left\",\n\t\"PetPaperDollFrameTab2LeftDisabled\",\n\t\"PetPaperDollFrameTab2Middle\",\n\t\"PetPaperDollFrameTab2MiddleDisabled\",\n\t\"PetPaperDollFrameTab2Right\",\n\t\"PetPaperDollFrameTab2RightDisabled\",\n\t\"PetPaperDollFrameTab2Text\",\n\t\"PetPaperDollFrameTab3HighlightTexture\",\n\t\"PetPaperDollFrameTab3Left\",\n\t\"PetPaperDollFrameTab3LeftDisabled\",\n\t\"PetPaperDollFrameTab3Middle\",\n\t\"PetPaperDollFrameTab3MiddleDisabled\",\n\t\"PetPaperDollFrameTab3Right\",\n\t\"PetPaperDollFrameTab3RightDisabled\",\n\t\"PetPaperDollFrameTab3Text\",\n\t\"PetPaperDollXPBar1\",\n\t\"PetPortrait\",\n\t\"PetSpellDamageFrameLabel\",\n\t\"PetSpellDamageFrameStatText\",\n\t\"PetStableCostLabel\",\n\t\"PetStableCostMoneyFrameCopperButtonText\",\n\t\"PetStableCostMoneyFrameGoldButtonText\",\n\t\"PetStableCostMoneyFrameSilverButtonText\",\n\t\"PetStableCurrentPetBackground\",\n\t\"PetStableCurrentPetIconTexture\",\n\t\"PetStableCurrentPetNormalTexture\",\n\t\"PetStableFrameBottomLeft\",\n\t\"PetStableFrameBottomRight\",\n\t\"PetStableFramePortrait\",\n\t\"PetStableLevelText\",\n\t\"PetStableMoneyFrameCopperButtonText\",\n\t\"PetStableMoneyFrameGoldButtonText\",\n\t\"PetStableMoneyFrameSilverButtonText\",\n\t\"PetStablePurchaseButtonText\",\n\t\"PetStableSlotText\",\n\t\"PetStableStabledPet1Background\",\n\t\"PetStableStabledPet1IconTexture\",\n\t\"PetStableStabledPet1NormalTexture\",\n\t\"PetStableStabledPet2Background\",\n\t\"PetStableStabledPet2IconTexture\",\n\t\"PetStableStabledPet2NormalTexture\",\n\t\"PetStableStabledPet3Background\",\n\t\"PetStableStabledPet3IconTexture\",\n\t\"PetStableStabledPet3NormalTexture\",\n\t\"PetStableStabledPet4Background\",\n\t\"PetStableStabledPet4IconTexture\",\n\t\"PetStableStabledPet4NormalTexture\",\n\t\"PetStableTitleLabel\",\n\t\"PetStatFrame1Label\",\n\t\"PetStatFrame1StatText\",\n\t\"PetStatFrame2Label\",\n\t\"PetStatFrame2StatText\",\n\t\"PetStatFrame3Label\",\n\t\"PetStatFrame3StatText\",\n\t\"PetStatFrame4Label\",\n\t\"PetStatFrame4StatText\",\n\t\"PetStatFrame5Label\",\n\t\"PetStatFrame5StatText\",\n\t\"PetitionFrameCancelButtonText\",\n\t\"PetitionFrameCharterName\",\n\t\"PetitionFrameCharterTitle\",\n\t\"PetitionFrameInstructions\",\n\t\"PetitionFrameMasterName\",\n\t\"PetitionFrameMasterTitle\",\n\t\"PetitionFrameMemberName1\",\n\t\"PetitionFrameMemberName2\",\n\t\"PetitionFrameMemberName3\",\n\t\"PetitionFrameMemberName4\",\n\t\"PetitionFrameMemberName5\",\n\t\"PetitionFrameMemberName6\",\n\t\"PetitionFrameMemberName7\",\n\t\"PetitionFrameMemberName8\",\n\t\"PetitionFrameMemberName9\",\n\t\"PetitionFrameMemberTitle\",\n\t\"PetitionFrameNpcNameText\",\n\t\"PetitionFramePortrait\",\n\t\"PetitionFrameRenameButtonText\",\n\t\"PetitionFrameRequestButtonText\",\n\t\"PetitionFrameSignButtonText\",\n\t\"PetitionText\",\n\t\"PlayLoopbackSoundButtonText\",\n\t\"PlayLoopbackSoundButtonTexture\",\n\t\"PlayerAttackBackground\",\n\t\"PlayerAttackGlow\",\n\t\"PlayerAttackIcon\",\n\t\"PlayerFrameAlternateManaBarBackground\",\n\t\"PlayerFrameAlternateManaBarBorder\",\n\t\"PlayerFrameAlternateManaBarText\",\n\t\"PlayerFrameBackground\",\n\t\"PlayerFrameDropDownButtonDisabledTexture\",\n\t\"PlayerFrameDropDownButtonHighlightTexture\",\n\t\"PlayerFrameDropDownButtonNormalTexture\",\n\t\"PlayerFrameDropDownButtonPushedTexture\",\n\t\"PlayerFrameDropDownLeft\",\n\t\"PlayerFrameDropDownMiddle\",\n\t\"PlayerFrameDropDownRight\",\n\t\"PlayerFrameDropDownText\",\n\t\"PlayerFrameFlash\",\n\t\"PlayerFrameGroupIndicatorLeft\",\n\t\"PlayerFrameGroupIndicatorMiddle\",\n\t\"PlayerFrameGroupIndicatorRight\",\n\t\"PlayerFrameGroupIndicatorText\",\n\t\"PlayerFrameHealthBarText\",\n\t\"PlayerFrameManaBarText\",\n\t\"PlayerFrameReadyCheckTexture\",\n\t\"PlayerFrameRoleIcon\",\n\t\"PlayerFrameTexture\",\n\t\"PlayerFrameVehicleTexture\",\n\t\"PlayerGuideIcon\",\n\t\"PlayerHitIndicator\",\n\t\"PlayerLeaderIcon\",\n\t\"PlayerLevelText\",\n\t\"PlayerMasterIcon\",\n\t\"PlayerName\",\n\t\"PlayerPVPIcon\",\n\t\"PlayerPVPTimerText\",\n\t\"PlayerPlayTimeIcon\",\n\t\"PlayerPortrait\",\n\t\"PlayerRestGlow\",\n\t\"PlayerRestIcon\",\n\t\"PlayerSpeakerFrameFlash\",\n\t\"PlayerSpeakerFrameMuted\",\n\t\"PlayerSpeakerFrameOn\",\n\t\"PlayerStatFrameLeft1Label\",\n\t\"PlayerStatFrameLeft1StatText\",\n\t\"PlayerStatFrameLeft2Label\",\n\t\"PlayerStatFrameLeft2StatText\",\n\t\"PlayerStatFrameLeft3Label\",\n\t\"PlayerStatFrameLeft3StatText\",\n\t\"PlayerStatFrameLeft4Label\",\n\t\"PlayerStatFrameLeft4StatText\",\n\t\"PlayerStatFrameLeft5Label\",\n\t\"PlayerStatFrameLeft5StatText\",\n\t\"PlayerStatFrameLeft6Label\",\n\t\"PlayerStatFrameLeft6StatText\",\n\t\"PlayerStatFrameLeftDropDownButtonDisabledTexture\",\n\t\"PlayerStatFrameLeftDropDownButtonHighlightTexture\",\n\t\"PlayerStatFrameLeftDropDownButtonNormalTexture\",\n\t\"PlayerStatFrameLeftDropDownButtonPushedTexture\",\n\t\"PlayerStatFrameLeftDropDownLeft\",\n\t\"PlayerStatFrameLeftDropDownMiddle\",\n\t\"PlayerStatFrameLeftDropDownRight\",\n\t\"PlayerStatFrameLeftDropDownText\",\n\t\"PlayerStatFrameRight1Label\",\n\t\"PlayerStatFrameRight1StatText\",\n\t\"PlayerStatFrameRight2Label\",\n\t\"PlayerStatFrameRight2StatText\",\n\t\"PlayerStatFrameRight3Label\",\n\t\"PlayerStatFrameRight3StatText\",\n\t\"PlayerStatFrameRight4Label\",\n\t\"PlayerStatFrameRight4StatText\",\n\t\"PlayerStatFrameRight5Label\",\n\t\"PlayerStatFrameRight5StatText\",\n\t\"PlayerStatFrameRight6Label\",\n\t\"PlayerStatFrameRight6StatText\",\n\t\"PlayerStatFrameRightDropDownButtonDisabledTexture\",\n\t\"PlayerStatFrameRightDropDownButtonHighlightTexture\",\n\t\"PlayerStatFrameRightDropDownButtonNormalTexture\",\n\t\"PlayerStatFrameRightDropDownButtonPushedTexture\",\n\t\"PlayerStatFrameRightDropDownLeft\",\n\t\"PlayerStatFrameRightDropDownMiddle\",\n\t\"PlayerStatFrameRightDropDownRight\",\n\t\"PlayerStatFrameRightDropDownText\",\n\t\"PlayerStatLeftBottom\",\n\t\"PlayerStatLeftMiddle\",\n\t\"PlayerStatLeftTop\",\n\t\"PlayerStatRightBottom\",\n\t\"PlayerStatRightMiddle\",\n\t\"PlayerStatRightTop\",\n\t\"PlayerStatusTexture\",\n\t\"PlayerTitleFrameButtonHighlightTexture\",\n\t\"PlayerTitleFrameButtonNormalTexture\",\n\t\"PlayerTitleFrameButtonPushedTexture\",\n\t\"PlayerTitleFrameLeft\",\n\t\"PlayerTitleFrameMiddle\",\n\t\"PlayerTitleFrameRight\",\n\t\"PlayerTitleFrameText\",\n\t\"PlayerTitlePickerScrollFrameButton1Check\",\n\t\"PlayerTitlePickerScrollFrameButton1TitleText\",\n\t\"PlayerTitlePickerScrollFrameButton2Check\",\n\t\"PlayerTitlePickerScrollFrameButton2TitleText\",\n\t\"PlayerTitlePickerScrollFrameButton3Check\",\n\t\"PlayerTitlePickerScrollFrameButton3TitleText\",\n\t\"PlayerTitlePickerScrollFrameButton4Check\",\n\t\"PlayerTitlePickerScrollFrameButton4TitleText\",\n\t\"PlayerTitlePickerScrollFrameButton5Check\",\n\t\"PlayerTitlePickerScrollFrameButton5TitleText\",\n\t\"PlayerTitlePickerScrollFrameButton6Check\",\n\t\"PlayerTitlePickerScrollFrameButton6TitleText\",\n\t\"PlayerTitlePickerScrollFrameButton7Check\",\n\t\"PlayerTitlePickerScrollFrameButton7TitleText\",\n\t\"PlayerTitlePickerScrollFrameButton8Check\",\n\t\"PlayerTitlePickerScrollFrameButton8TitleText\",\n\t\"PlayerTitlePickerScrollFrameScrollBarBG\",\n\t\"PlayerTitlePickerScrollFrameScrollBarBottom\",\n\t\"PlayerTitlePickerScrollFrameScrollBarMiddle\",\n\t\"PlayerTitlePickerScrollFrameScrollBarThumbTexture\",\n\t\"PlayerTitlePickerScrollFrameScrollBarTop\",\n\t\"PossessBackground1\",\n\t\"PossessBackground2\",\n\t\"PossessButton1Border\",\n\t\"PossessButton1Count\",\n\t\"PossessButton1Flash\",\n\t\"PossessButton1HotKey\",\n\t\"PossessButton1Icon\",\n\t\"PossessButton1Name\",\n\t\"PossessButton1NormalTexture\",\n\t\"PossessButton2Border\",\n\t\"PossessButton2Count\",\n\t\"PossessButton2Flash\",\n\t\"PossessButton2HotKey\",\n\t\"PossessButton2Icon\",\n\t\"PossessButton2Name\",\n\t\"PossessButton2NormalTexture\",\n\t\"QuestDetailScrollFrameScrollBarThumbTexture\",\n\t\"QuestDifficulty_Difficult\",\n\t\"QuestDifficulty_Header\",\n\t\"QuestDifficulty_Impossible\",\n\t\"QuestDifficulty_Standard\",\n\t\"QuestDifficulty_Trivial\",\n\t\"QuestDifficulty_VeryDifficult\",\n\t\"QuestFont\",\n\t\"QuestFontHighlight\",\n\t\"QuestFontLeft\",\n\t\"QuestFontNormalSmall\",\n\t\"QuestFont_Large\",\n\t\"QuestFont_Shadow_Huge\",\n\t\"QuestFrameAcceptButtonText\",\n\t\"QuestFrameCancelButtonText\",\n\t\"QuestFrameCompleteButtonText\",\n\t\"QuestFrameCompleteQuestButtonText\",\n\t\"QuestFrameDeclineButtonText\",\n\t\"QuestFrameDetailPanelBotRight\",\n\t\"QuestFrameDetailPanelMaterialBotLeft\",\n\t\"QuestFrameDetailPanelMaterialBotRight\",\n\t\"QuestFrameDetailPanelMaterialTopLeft\",\n\t\"QuestFrameDetailPanelMaterialTopRight\",\n\t\"QuestFrameGoodbyeButtonText\",\n\t\"QuestFrameGreetingGoodbyeButtonText\",\n\t\"QuestFrameGreetingPanelBotRight\",\n\t\"QuestFrameGreetingPanelMaterialBotLeft\",\n\t\"QuestFrameGreetingPanelMaterialBotRight\",\n\t\"QuestFrameGreetingPanelMaterialTopLeft\",\n\t\"QuestFrameGreetingPanelMaterialTopRight\",\n\t\"QuestFrameNpcNameText\",\n\t\"QuestFramePortrait\",\n\t\"QuestFrameProgressPanelBotRight\",\n\t\"QuestFrameProgressPanelMaterialBotLeft\",\n\t\"QuestFrameProgressPanelMaterialBotRight\",\n\t\"QuestFrameProgressPanelMaterialTopLeft\",\n\t\"QuestFrameProgressPanelMaterialTopRight\",\n\t\"QuestFrameRewardPanelBotRight\",\n\t\"QuestFrameRewardPanelMaterialBotLeft\",\n\t\"QuestFrameRewardPanelMaterialBotRight\",\n\t\"QuestFrameRewardPanelMaterialTopLeft\",\n\t\"QuestFrameRewardPanelMaterialTopRight\",\n\t\"QuestGreetingFrameHorizontalBreak\",\n\t\"QuestGreetingScrollFrameScrollBarThumbTexture\",\n\t\"QuestInfoAnchor\",\n\t\"QuestInfoArenaPointsFrameIcon\",\n\t\"QuestInfoArenaPointsFramePoints\",\n\t\"QuestInfoArenaPointsFrameReceiveText\",\n\t\"QuestInfoDescriptionHeader\",\n\t\"QuestInfoDescriptionText\",\n\t\"QuestInfoGroupSize\",\n\t\"QuestInfoHonorFrameIcon\",\n\t\"QuestInfoHonorFramePoints\",\n\t\"QuestInfoHonorFrameReceiveText\",\n\t\"QuestInfoItem10Count\",\n\t\"QuestInfoItem10IconTexture\",\n\t\"QuestInfoItem10Name\",\n\t\"QuestInfoItem10NameFrame\",\n\t\"QuestInfoItem1Count\",\n\t\"QuestInfoItem1IconTexture\",\n\t\"QuestInfoItem1Name\",\n\t\"QuestInfoItem1NameFrame\",\n\t\"QuestInfoItem2Count\",\n\t\"QuestInfoItem2IconTexture\",\n\t\"QuestInfoItem2Name\",\n\t\"QuestInfoItem2NameFrame\",\n\t\"QuestInfoItem3Count\",\n\t\"QuestInfoItem3IconTexture\",\n\t\"QuestInfoItem3Name\",\n\t\"QuestInfoItem3NameFrame\",\n\t\"QuestInfoItem4Count\",\n\t\"QuestInfoItem4IconTexture\",\n\t\"QuestInfoItem4Name\",\n\t\"QuestInfoItem4NameFrame\",\n\t\"QuestInfoItem5Count\",\n\t\"QuestInfoItem5IconTexture\",\n\t\"QuestInfoItem5Name\",\n\t\"QuestInfoItem5NameFrame\",\n\t\"QuestInfoItem6Count\",\n\t\"QuestInfoItem6IconTexture\",\n\t\"QuestInfoItem6Name\",\n\t\"QuestInfoItem6NameFrame\",\n\t\"QuestInfoItem7Count\",\n\t\"QuestInfoItem7IconTexture\",\n\t\"QuestInfoItem7Name\",\n\t\"QuestInfoItem7NameFrame\",\n\t\"QuestInfoItem8Count\",\n\t\"QuestInfoItem8IconTexture\",\n\t\"QuestInfoItem8Name\",\n\t\"QuestInfoItem8NameFrame\",\n\t\"QuestInfoItem9Count\",\n\t\"QuestInfoItem9IconTexture\",\n\t\"QuestInfoItem9Name\",\n\t\"QuestInfoItem9NameFrame\",\n\t\"QuestInfoItemChooseText\",\n\t\"QuestInfoItemReceiveText\",\n\t\"QuestInfoMoneyFrameCopperButtonText\",\n\t\"QuestInfoMoneyFrameGoldButtonText\",\n\t\"QuestInfoMoneyFrameSilverButtonText\",\n\t\"QuestInfoObjective1\",\n\t\"QuestInfoObjective10\",\n\t\"QuestInfoObjective2\",\n\t\"QuestInfoObjective3\",\n\t\"QuestInfoObjective4\",\n\t\"QuestInfoObjective5\",\n\t\"QuestInfoObjective6\",\n\t\"QuestInfoObjective7\",\n\t\"QuestInfoObjective8\",\n\t\"QuestInfoObjective9\",\n\t\"QuestInfoObjectivesHeader\",\n\t\"QuestInfoObjectivesText\",\n\t\"QuestInfoPlayerTitleFrameIconTexture\",\n\t\"QuestInfoPlayerTitleFrameTitle\",\n\t\"QuestInfoPlayerTitleFrameTitleFrameCenter\",\n\t\"QuestInfoPlayerTitleFrameTitleFrameLeft\",\n\t\"QuestInfoPlayerTitleFrameTitleLabel\",\n\t\"QuestInfoReputation10Amount\",\n\t\"QuestInfoReputation10Faction\",\n\t\"QuestInfoReputation1Amount\",\n\t\"QuestInfoReputation1Faction\",\n\t\"QuestInfoReputation2Amount\",\n\t\"QuestInfoReputation2Faction\",\n\t\"QuestInfoReputation3Amount\",\n\t\"QuestInfoReputation3Faction\",\n\t\"QuestInfoReputation4Amount\",\n\t\"QuestInfoReputation4Faction\",\n\t\"QuestInfoReputation5Amount\",\n\t\"QuestInfoReputation5Faction\",\n\t\"QuestInfoReputation6Amount\",\n\t\"QuestInfoReputation6Faction\",\n\t\"QuestInfoReputation7Amount\",\n\t\"QuestInfoReputation7Faction\",\n\t\"QuestInfoReputation8Amount\",\n\t\"QuestInfoReputation8Faction\",\n\t\"QuestInfoReputation9Amount\",\n\t\"QuestInfoReputation9Faction\",\n\t\"QuestInfoReputationText\",\n\t\"QuestInfoRequiredMoneyDisplayCopperButtonText\",\n\t\"QuestInfoRequiredMoneyDisplayGoldButtonText\",\n\t\"QuestInfoRequiredMoneyDisplaySilverButtonText\",\n\t\"QuestInfoRequiredMoneyText\",\n\t\"QuestInfoRewardText\",\n\t\"QuestInfoRewardsHeader\",\n\t\"QuestInfoSpellLearnText\",\n\t\"QuestInfoTalentFramePoints\",\n\t\"QuestInfoTalentFrameReceiveText\",\n\t\"QuestInfoTimerText\",\n\t\"QuestInfoTitleHeader\",\n\t\"QuestInfoXPFramePoints\",\n\t\"QuestInfoXPFrameReceiveText\",\n\t\"QuestLogCountBottomLeft\",\n\t\"QuestLogCountBottomMiddle\",\n\t\"QuestLogCountBottomRight\",\n\t\"QuestLogCountLeft\",\n\t\"QuestLogCountMiddleMiddle\",\n\t\"QuestLogCountRight\",\n\t\"QuestLogCountTopLeft\",\n\t\"QuestLogCountTopMiddle\",\n\t\"QuestLogCountTopRight\",\n\t\"QuestLogDailyQuestCount\",\n\t\"QuestLogDetailFrameBackgroundBottomLeft\",\n\t\"QuestLogDetailFrameBackgroundBottomRight\",\n\t\"QuestLogDetailFrameBackgroundTopLeft\",\n\t\"QuestLogDetailFrameBackgroundTopRight\",\n\t\"QuestLogDetailScrollFrameScrollBackgroundBottomRight\",\n\t\"QuestLogDetailScrollFrameScrollBackgroundTopLeft\",\n\t\"QuestLogDetailScrollFrameScrollBarThumbTexture\",\n\t\"QuestLogDetailTitleText\",\n\t\"QuestLogFrameAbandonButtonText\",\n\t\"QuestLogFrameCancelButtonText\",\n\t\"QuestLogFramePushQuestButtonText\",\n\t\"QuestLogFrameShowMapButtonHighlight\",\n\t\"QuestLogFrameShowMapButtonText\",\n\t\"QuestLogFrameShowMapButtonTexture\",\n\t\"QuestLogFrameTrackButtonText\",\n\t\"QuestLogMapFrame1\",\n\t\"QuestLogMapFrame10\",\n\t\"QuestLogMapFrame11\",\n\t\"QuestLogMapFrame12\",\n\t\"QuestLogMapFrame2\",\n\t\"QuestLogMapFrame3\",\n\t\"QuestLogMapFrame4\",\n\t\"QuestLogMapFrame5\",\n\t\"QuestLogMapFrame6\",\n\t\"QuestLogMapFrame7\",\n\t\"QuestLogMapFrame8\",\n\t\"QuestLogMapFrame9\",\n\t\"QuestLogNoQuestsText\",\n\t\"QuestLogQuestCount\",\n\t\"QuestLogScrollFrameButton10Check\",\n\t\"QuestLogScrollFrameButton10GroupMates\",\n\t\"QuestLogScrollFrameButton10Highlight\",\n\t\"QuestLogScrollFrameButton10NormalText\",\n\t\"QuestLogScrollFrameButton10Tag\",\n\t\"QuestLogScrollFrameButton11Check\",\n\t\"QuestLogScrollFrameButton11GroupMates\",\n\t\"QuestLogScrollFrameButton11Highlight\",\n\t\"QuestLogScrollFrameButton11NormalText\",\n\t\"QuestLogScrollFrameButton11Tag\",\n\t\"QuestLogScrollFrameButton12Check\",\n\t\"QuestLogScrollFrameButton12GroupMates\",\n\t\"QuestLogScrollFrameButton12Highlight\",\n\t\"QuestLogScrollFrameButton12NormalText\",\n\t\"QuestLogScrollFrameButton12Tag\",\n\t\"QuestLogScrollFrameButton13Check\",\n\t\"QuestLogScrollFrameButton13GroupMates\",\n\t\"QuestLogScrollFrameButton13Highlight\",\n\t\"QuestLogScrollFrameButton13NormalText\",\n\t\"QuestLogScrollFrameButton13Tag\",\n\t\"QuestLogScrollFrameButton14Check\",\n\t\"QuestLogScrollFrameButton14GroupMates\",\n\t\"QuestLogScrollFrameButton14Highlight\",\n\t\"QuestLogScrollFrameButton14NormalText\",\n\t\"QuestLogScrollFrameButton14Tag\",\n\t\"QuestLogScrollFrameButton15Check\",\n\t\"QuestLogScrollFrameButton15GroupMates\",\n\t\"QuestLogScrollFrameButton15Highlight\",\n\t\"QuestLogScrollFrameButton15NormalText\",\n\t\"QuestLogScrollFrameButton15Tag\",\n\t\"QuestLogScrollFrameButton16Check\",\n\t\"QuestLogScrollFrameButton16GroupMates\",\n\t\"QuestLogScrollFrameButton16Highlight\",\n\t\"QuestLogScrollFrameButton16NormalText\",\n\t\"QuestLogScrollFrameButton16Tag\",\n\t\"QuestLogScrollFrameButton17Check\",\n\t\"QuestLogScrollFrameButton17GroupMates\",\n\t\"QuestLogScrollFrameButton17Highlight\",\n\t\"QuestLogScrollFrameButton17NormalText\",\n\t\"QuestLogScrollFrameButton17Tag\",\n\t\"QuestLogScrollFrameButton18Check\",\n\t\"QuestLogScrollFrameButton18GroupMates\",\n\t\"QuestLogScrollFrameButton18Highlight\",\n\t\"QuestLogScrollFrameButton18NormalText\",\n\t\"QuestLogScrollFrameButton18Tag\",\n\t\"QuestLogScrollFrameButton19Check\",\n\t\"QuestLogScrollFrameButton19GroupMates\",\n\t\"QuestLogScrollFrameButton19Highlight\",\n\t\"QuestLogScrollFrameButton19NormalText\",\n\t\"QuestLogScrollFrameButton19Tag\",\n\t\"QuestLogScrollFrameButton1Check\",\n\t\"QuestLogScrollFrameButton1GroupMates\",\n\t\"QuestLogScrollFrameButton1Highlight\",\n\t\"QuestLogScrollFrameButton1NormalText\",\n\t\"QuestLogScrollFrameButton1Tag\",\n\t\"QuestLogScrollFrameButton20Check\",\n\t\"QuestLogScrollFrameButton20GroupMates\",\n\t\"QuestLogScrollFrameButton20Highlight\",\n\t\"QuestLogScrollFrameButton20NormalText\",\n\t\"QuestLogScrollFrameButton20Tag\",\n\t\"QuestLogScrollFrameButton21Check\",\n\t\"QuestLogScrollFrameButton21GroupMates\",\n\t\"QuestLogScrollFrameButton21Highlight\",\n\t\"QuestLogScrollFrameButton21NormalText\",\n\t\"QuestLogScrollFrameButton21Tag\",\n\t\"QuestLogScrollFrameButton22Check\",\n\t\"QuestLogScrollFrameButton22GroupMates\",\n\t\"QuestLogScrollFrameButton22Highlight\",\n\t\"QuestLogScrollFrameButton22NormalText\",\n\t\"QuestLogScrollFrameButton22Tag\",\n\t\"QuestLogScrollFrameButton2Check\",\n\t\"QuestLogScrollFrameButton2GroupMates\",\n\t\"QuestLogScrollFrameButton2Highlight\",\n\t\"QuestLogScrollFrameButton2NormalText\",\n\t\"QuestLogScrollFrameButton2Tag\",\n\t\"QuestLogScrollFrameButton3Check\",\n\t\"QuestLogScrollFrameButton3GroupMates\",\n\t\"QuestLogScrollFrameButton3Highlight\",\n\t\"QuestLogScrollFrameButton3NormalText\",\n\t\"QuestLogScrollFrameButton3Tag\",\n\t\"QuestLogScrollFrameButton4Check\",\n\t\"QuestLogScrollFrameButton4GroupMates\",\n\t\"QuestLogScrollFrameButton4Highlight\",\n\t\"QuestLogScrollFrameButton4NormalText\",\n\t\"QuestLogScrollFrameButton4Tag\",\n\t\"QuestLogScrollFrameButton5Check\",\n\t\"QuestLogScrollFrameButton5GroupMates\",\n\t\"QuestLogScrollFrameButton5Highlight\",\n\t\"QuestLogScrollFrameButton5NormalText\",\n\t\"QuestLogScrollFrameButton5Tag\",\n\t\"QuestLogScrollFrameButton6Check\",\n\t\"QuestLogScrollFrameButton6GroupMates\",\n\t\"QuestLogScrollFrameButton6Highlight\",\n\t\"QuestLogScrollFrameButton6NormalText\",\n\t\"QuestLogScrollFrameButton6Tag\",\n\t\"QuestLogScrollFrameButton7Check\",\n\t\"QuestLogScrollFrameButton7GroupMates\",\n\t\"QuestLogScrollFrameButton7Highlight\",\n\t\"QuestLogScrollFrameButton7NormalText\",\n\t\"QuestLogScrollFrameButton7Tag\",\n\t\"QuestLogScrollFrameButton8Check\",\n\t\"QuestLogScrollFrameButton8GroupMates\",\n\t\"QuestLogScrollFrameButton8Highlight\",\n\t\"QuestLogScrollFrameButton8NormalText\",\n\t\"QuestLogScrollFrameButton8Tag\",\n\t\"QuestLogScrollFrameButton9Check\",\n\t\"QuestLogScrollFrameButton9GroupMates\",\n\t\"QuestLogScrollFrameButton9Highlight\",\n\t\"QuestLogScrollFrameButton9NormalText\",\n\t\"QuestLogScrollFrameButton9Tag\",\n\t\"QuestLogScrollFrameScrollBarBG\",\n\t\"QuestLogScrollFrameScrollBarBottom\",\n\t\"QuestLogScrollFrameScrollBarMiddle\",\n\t\"QuestLogScrollFrameScrollBarThumbTexture\",\n\t\"QuestLogScrollFrameScrollBarTop\",\n\t\"QuestLogSkillHighlight\",\n\t\"QuestLogTitleText\",\n\t\"QuestProgressItem1Count\",\n\t\"QuestProgressItem1IconTexture\",\n\t\"QuestProgressItem1Name\",\n\t\"QuestProgressItem1NameFrame\",\n\t\"QuestProgressItem2Count\",\n\t\"QuestProgressItem2IconTexture\",\n\t\"QuestProgressItem2Name\",\n\t\"QuestProgressItem2NameFrame\",\n\t\"QuestProgressItem3Count\",\n\t\"QuestProgressItem3IconTexture\",\n\t\"QuestProgressItem3Name\",\n\t\"QuestProgressItem3NameFrame\",\n\t\"QuestProgressItem4Count\",\n\t\"QuestProgressItem4IconTexture\",\n\t\"QuestProgressItem4Name\",\n\t\"QuestProgressItem4NameFrame\",\n\t\"QuestProgressItem5Count\",\n\t\"QuestProgressItem5IconTexture\",\n\t\"QuestProgressItem5Name\",\n\t\"QuestProgressItem5NameFrame\",\n\t\"QuestProgressItem6Count\",\n\t\"QuestProgressItem6IconTexture\",\n\t\"QuestProgressItem6Name\",\n\t\"QuestProgressItem6NameFrame\",\n\t\"QuestProgressRequiredItemsText\",\n\t\"QuestProgressRequiredMoneyFrameCopperButtonText\",\n\t\"QuestProgressRequiredMoneyFrameGoldButtonText\",\n\t\"QuestProgressRequiredMoneyFrameSilverButtonText\",\n\t\"QuestProgressRequiredMoneyText\",\n\t\"QuestProgressScrollFrameScrollBarThumbTexture\",\n\t\"QuestProgressText\",\n\t\"QuestProgressTitleText\",\n\t\"QuestRewardScrollFrameScrollBarThumbTexture\",\n\t\"QuestTitleButton10QuestIcon\",\n\t\"QuestTitleButton11QuestIcon\",\n\t\"QuestTitleButton12QuestIcon\",\n\t\"QuestTitleButton13QuestIcon\",\n\t\"QuestTitleButton14QuestIcon\",\n\t\"QuestTitleButton15QuestIcon\",\n\t\"QuestTitleButton16QuestIcon\",\n\t\"QuestTitleButton17QuestIcon\",\n\t\"QuestTitleButton18QuestIcon\",\n\t\"QuestTitleButton19QuestIcon\",\n\t\"QuestTitleButton1QuestIcon\",\n\t\"QuestTitleButton20QuestIcon\",\n\t\"QuestTitleButton21QuestIcon\",\n\t\"QuestTitleButton22QuestIcon\",\n\t\"QuestTitleButton23QuestIcon\",\n\t\"QuestTitleButton24QuestIcon\",\n\t\"QuestTitleButton25QuestIcon\",\n\t\"QuestTitleButton26QuestIcon\",\n\t\"QuestTitleButton27QuestIcon\",\n\t\"QuestTitleButton28QuestIcon\",\n\t\"QuestTitleButton29QuestIcon\",\n\t\"QuestTitleButton2QuestIcon\",\n\t\"QuestTitleButton30QuestIcon\",\n\t\"QuestTitleButton31QuestIcon\",\n\t\"QuestTitleButton32QuestIcon\",\n\t\"QuestTitleButton3QuestIcon\",\n\t\"QuestTitleButton4QuestIcon\",\n\t\"QuestTitleButton5QuestIcon\",\n\t\"QuestTitleButton6QuestIcon\",\n\t\"QuestTitleButton7QuestIcon\",\n\t\"QuestTitleButton8QuestIcon\",\n\t\"QuestTitleButton9QuestIcon\",\n\t\"QuestTitleFont\",\n\t\"QuestTitleFontBlackShadow\",\n\t\"RaidBossEmoteFrameSlot1\",\n\t\"RaidBossEmoteFrameSlot2\",\n\t\"RaidClassButton10Count\",\n\t\"RaidClassButton10IconTexture\",\n\t\"RaidClassButton11Count\",\n\t\"RaidClassButton11IconTexture\",\n\t\"RaidClassButton12Count\",\n\t\"RaidClassButton12IconTexture\",\n\t\"RaidClassButton13Count\",\n\t\"RaidClassButton13IconTexture\",\n\t\"RaidClassButton1Count\",\n\t\"RaidClassButton1IconTexture\",\n\t\"RaidClassButton2Count\",\n\t\"RaidClassButton2IconTexture\",\n\t\"RaidClassButton3Count\",\n\t\"RaidClassButton3IconTexture\",\n\t\"RaidClassButton4Count\",\n\t\"RaidClassButton4IconTexture\",\n\t\"RaidClassButton5Count\",\n\t\"RaidClassButton5IconTexture\",\n\t\"RaidClassButton6Count\",\n\t\"RaidClassButton6IconTexture\",\n\t\"RaidClassButton7Count\",\n\t\"RaidClassButton7IconTexture\",\n\t\"RaidClassButton8Count\",\n\t\"RaidClassButton8IconTexture\",\n\t\"RaidClassButton9Count\",\n\t\"RaidClassButton9IconTexture\",\n\t\"RaidFrameConvertToRaidButtonText\",\n\t\"RaidFrameNotInRaidRaidBrowserButtonLeft\",\n\t\"RaidFrameNotInRaidRaidBrowserButtonMiddle\",\n\t\"RaidFrameNotInRaidRaidBrowserButtonRight\",\n\t\"RaidFrameNotInRaidRaidBrowserButtonText\",\n\t\"RaidFrameRaidBrowserButtonText\",\n\t\"RaidFrameRaidBrowserDescription\",\n\t\"RaidFrameRaidDescription\",\n\t\"RaidFrameRaidInfoButtonText\",\n\t\"RaidFrameReadyCheckButtonText\",\n\t\"RaidGroupButton10Class\",\n\t\"RaidGroupButton10Level\",\n\t\"RaidGroupButton10LootTexture\",\n\t\"RaidGroupButton10Name\",\n\t\"RaidGroupButton10RankTexture\",\n\t\"RaidGroupButton10ReadyCheckTexture\",\n\t\"RaidGroupButton10RoleTexture\",\n\t\"RaidGroupButton11Class\",\n\t\"RaidGroupButton11Level\",\n\t\"RaidGroupButton11LootTexture\",\n\t\"RaidGroupButton11Name\",\n\t\"RaidGroupButton11RankTexture\",\n\t\"RaidGroupButton11ReadyCheckTexture\",\n\t\"RaidGroupButton11RoleTexture\",\n\t\"RaidGroupButton12Class\",\n\t\"RaidGroupButton12Level\",\n\t\"RaidGroupButton12LootTexture\",\n\t\"RaidGroupButton12Name\",\n\t\"RaidGroupButton12RankTexture\",\n\t\"RaidGroupButton12ReadyCheckTexture\",\n\t\"RaidGroupButton12RoleTexture\",\n\t\"RaidGroupButton13Class\",\n\t\"RaidGroupButton13Level\",\n\t\"RaidGroupButton13LootTexture\",\n\t\"RaidGroupButton13Name\",\n\t\"RaidGroupButton13RankTexture\",\n\t\"RaidGroupButton13ReadyCheckTexture\",\n\t\"RaidGroupButton13RoleTexture\",\n\t\"RaidGroupButton14Class\",\n\t\"RaidGroupButton14Level\",\n\t\"RaidGroupButton14LootTexture\",\n\t\"RaidGroupButton14Name\",\n\t\"RaidGroupButton14RankTexture\",\n\t\"RaidGroupButton14ReadyCheckTexture\",\n\t\"RaidGroupButton14RoleTexture\",\n\t\"RaidGroupButton15Class\",\n\t\"RaidGroupButton15Level\",\n\t\"RaidGroupButton15LootTexture\",\n\t\"RaidGroupButton15Name\",\n\t\"RaidGroupButton15RankTexture\",\n\t\"RaidGroupButton15ReadyCheckTexture\",\n\t\"RaidGroupButton15RoleTexture\",\n\t\"RaidGroupButton16Class\",\n\t\"RaidGroupButton16Level\",\n\t\"RaidGroupButton16LootTexture\",\n\t\"RaidGroupButton16Name\",\n\t\"RaidGroupButton16RankTexture\",\n\t\"RaidGroupButton16ReadyCheckTexture\",\n\t\"RaidGroupButton16RoleTexture\",\n\t\"RaidGroupButton17Class\",\n\t\"RaidGroupButton17Level\",\n\t\"RaidGroupButton17LootTexture\",\n\t\"RaidGroupButton17Name\",\n\t\"RaidGroupButton17RankTexture\",\n\t\"RaidGroupButton17ReadyCheckTexture\",\n\t\"RaidGroupButton17RoleTexture\",\n\t\"RaidGroupButton18Class\",\n\t\"RaidGroupButton18Level\",\n\t\"RaidGroupButton18LootTexture\",\n\t\"RaidGroupButton18Name\",\n\t\"RaidGroupButton18RankTexture\",\n\t\"RaidGroupButton18ReadyCheckTexture\",\n\t\"RaidGroupButton18RoleTexture\",\n\t\"RaidGroupButton19Class\",\n\t\"RaidGroupButton19Level\",\n\t\"RaidGroupButton19LootTexture\",\n\t\"RaidGroupButton19Name\",\n\t\"RaidGroupButton19RankTexture\",\n\t\"RaidGroupButton19ReadyCheckTexture\",\n\t\"RaidGroupButton19RoleTexture\",\n\t\"RaidGroupButton1Class\",\n\t\"RaidGroupButton1Level\",\n\t\"RaidGroupButton1LootTexture\",\n\t\"RaidGroupButton1Name\",\n\t\"RaidGroupButton1RankTexture\",\n\t\"RaidGroupButton1ReadyCheckTexture\",\n\t\"RaidGroupButton1RoleTexture\",\n\t\"RaidGroupButton20Class\",\n\t\"RaidGroupButton20Level\",\n\t\"RaidGroupButton20LootTexture\",\n\t\"RaidGroupButton20Name\",\n\t\"RaidGroupButton20RankTexture\",\n\t\"RaidGroupButton20ReadyCheckTexture\",\n\t\"RaidGroupButton20RoleTexture\",\n\t\"RaidGroupButton21Class\",\n\t\"RaidGroupButton21Level\",\n\t\"RaidGroupButton21LootTexture\",\n\t\"RaidGroupButton21Name\",\n\t\"RaidGroupButton21RankTexture\",\n\t\"RaidGroupButton21ReadyCheckTexture\",\n\t\"RaidGroupButton21RoleTexture\",\n\t\"RaidGroupButton22Class\",\n\t\"RaidGroupButton22Level\",\n\t\"RaidGroupButton22LootTexture\",\n\t\"RaidGroupButton22Name\",\n\t\"RaidGroupButton22RankTexture\",\n\t\"RaidGroupButton22ReadyCheckTexture\",\n\t\"RaidGroupButton22RoleTexture\",\n\t\"RaidGroupButton23Class\",\n\t\"RaidGroupButton23Level\",\n\t\"RaidGroupButton23LootTexture\",\n\t\"RaidGroupButton23Name\",\n\t\"RaidGroupButton23RankTexture\",\n\t\"RaidGroupButton23ReadyCheckTexture\",\n\t\"RaidGroupButton23RoleTexture\",\n\t\"RaidGroupButton24Class\",\n\t\"RaidGroupButton24Level\",\n\t\"RaidGroupButton24LootTexture\",\n\t\"RaidGroupButton24Name\",\n\t\"RaidGroupButton24RankTexture\",\n\t\"RaidGroupButton24ReadyCheckTexture\",\n\t\"RaidGroupButton24RoleTexture\",\n\t\"RaidGroupButton25Class\",\n\t\"RaidGroupButton25Level\",\n\t\"RaidGroupButton25LootTexture\",\n\t\"RaidGroupButton25Name\",\n\t\"RaidGroupButton25RankTexture\",\n\t\"RaidGroupButton25ReadyCheckTexture\",\n\t\"RaidGroupButton25RoleTexture\",\n\t\"RaidGroupButton26Class\",\n\t\"RaidGroupButton26Level\",\n\t\"RaidGroupButton26LootTexture\",\n\t\"RaidGroupButton26Name\",\n\t\"RaidGroupButton26RankTexture\",\n\t\"RaidGroupButton26ReadyCheckTexture\",\n\t\"RaidGroupButton26RoleTexture\",\n\t\"RaidGroupButton27Class\",\n\t\"RaidGroupButton27Level\",\n\t\"RaidGroupButton27LootTexture\",\n\t\"RaidGroupButton27Name\",\n\t\"RaidGroupButton27RankTexture\",\n\t\"RaidGroupButton27ReadyCheckTexture\",\n\t\"RaidGroupButton27RoleTexture\",\n\t\"RaidGroupButton28Class\",\n\t\"RaidGroupButton28Level\",\n\t\"RaidGroupButton28LootTexture\",\n\t\"RaidGroupButton28Name\",\n\t\"RaidGroupButton28RankTexture\",\n\t\"RaidGroupButton28ReadyCheckTexture\",\n\t\"RaidGroupButton28RoleTexture\",\n\t\"RaidGroupButton29Class\",\n\t\"RaidGroupButton29Level\",\n\t\"RaidGroupButton29LootTexture\",\n\t\"RaidGroupButton29Name\",\n\t\"RaidGroupButton29RankTexture\",\n\t\"RaidGroupButton29ReadyCheckTexture\",\n\t\"RaidGroupButton29RoleTexture\",\n\t\"RaidGroupButton2Class\",\n\t\"RaidGroupButton2Level\",\n\t\"RaidGroupButton2LootTexture\",\n\t\"RaidGroupButton2Name\",\n\t\"RaidGroupButton2RankTexture\",\n\t\"RaidGroupButton2ReadyCheckTexture\",\n\t\"RaidGroupButton2RoleTexture\",\n\t\"RaidGroupButton30Class\",\n\t\"RaidGroupButton30Level\",\n\t\"RaidGroupButton30LootTexture\",\n\t\"RaidGroupButton30Name\",\n\t\"RaidGroupButton30RankTexture\",\n\t\"RaidGroupButton30ReadyCheckTexture\",\n\t\"RaidGroupButton30RoleTexture\",\n\t\"RaidGroupButton31Class\",\n\t\"RaidGroupButton31Level\",\n\t\"RaidGroupButton31LootTexture\",\n\t\"RaidGroupButton31Name\",\n\t\"RaidGroupButton31RankTexture\",\n\t\"RaidGroupButton31ReadyCheckTexture\",\n\t\"RaidGroupButton31RoleTexture\",\n\t\"RaidGroupButton32Class\",\n\t\"RaidGroupButton32Level\",\n\t\"RaidGroupButton32LootTexture\",\n\t\"RaidGroupButton32Name\",\n\t\"RaidGroupButton32RankTexture\",\n\t\"RaidGroupButton32ReadyCheckTexture\",\n\t\"RaidGroupButton32RoleTexture\",\n\t\"RaidGroupButton33Class\",\n\t\"RaidGroupButton33Level\",\n\t\"RaidGroupButton33LootTexture\",\n\t\"RaidGroupButton33Name\",\n\t\"RaidGroupButton33RankTexture\",\n\t\"RaidGroupButton33ReadyCheckTexture\",\n\t\"RaidGroupButton33RoleTexture\",\n\t\"RaidGroupButton34Class\",\n\t\"RaidGroupButton34Level\",\n\t\"RaidGroupButton34LootTexture\",\n\t\"RaidGroupButton34Name\",\n\t\"RaidGroupButton34RankTexture\",\n\t\"RaidGroupButton34ReadyCheckTexture\",\n\t\"RaidGroupButton34RoleTexture\",\n\t\"RaidGroupButton35Class\",\n\t\"RaidGroupButton35Level\",\n\t\"RaidGroupButton35LootTexture\",\n\t\"RaidGroupButton35Name\",\n\t\"RaidGroupButton35RankTexture\",\n\t\"RaidGroupButton35ReadyCheckTexture\",\n\t\"RaidGroupButton35RoleTexture\",\n\t\"RaidGroupButton36Class\",\n\t\"RaidGroupButton36Level\",\n\t\"RaidGroupButton36LootTexture\",\n\t\"RaidGroupButton36Name\",\n\t\"RaidGroupButton36RankTexture\",\n\t\"RaidGroupButton36ReadyCheckTexture\",\n\t\"RaidGroupButton36RoleTexture\",\n\t\"RaidGroupButton37Class\",\n\t\"RaidGroupButton37Level\",\n\t\"RaidGroupButton37LootTexture\",\n\t\"RaidGroupButton37Name\",\n\t\"RaidGroupButton37RankTexture\",\n\t\"RaidGroupButton37ReadyCheckTexture\",\n\t\"RaidGroupButton37RoleTexture\",\n\t\"RaidGroupButton38Class\",\n\t\"RaidGroupButton38Level\",\n\t\"RaidGroupButton38LootTexture\",\n\t\"RaidGroupButton38Name\",\n\t\"RaidGroupButton38RankTexture\",\n\t\"RaidGroupButton38ReadyCheckTexture\",\n\t\"RaidGroupButton38RoleTexture\",\n\t\"RaidGroupButton39Class\",\n\t\"RaidGroupButton39Level\",\n\t\"RaidGroupButton39LootTexture\",\n\t\"RaidGroupButton39Name\",\n\t\"RaidGroupButton39RankTexture\",\n\t\"RaidGroupButton39ReadyCheckTexture\",\n\t\"RaidGroupButton39RoleTexture\",\n\t\"RaidGroupButton3Class\",\n\t\"RaidGroupButton3Level\",\n\t\"RaidGroupButton3LootTexture\",\n\t\"RaidGroupButton3Name\",\n\t\"RaidGroupButton3RankTexture\",\n\t\"RaidGroupButton3ReadyCheckTexture\",\n\t\"RaidGroupButton3RoleTexture\",\n\t\"RaidGroupButton40Class\",\n\t\"RaidGroupButton40Level\",\n\t\"RaidGroupButton40LootTexture\",\n\t\"RaidGroupButton40Name\",\n\t\"RaidGroupButton40RankTexture\",\n\t\"RaidGroupButton40ReadyCheckTexture\",\n\t\"RaidGroupButton40RoleTexture\",\n\t\"RaidGroupButton4Class\",\n\t\"RaidGroupButton4Level\",\n\t\"RaidGroupButton4LootTexture\",\n\t\"RaidGroupButton4Name\",\n\t\"RaidGroupButton4RankTexture\",\n\t\"RaidGroupButton4ReadyCheckTexture\",\n\t\"RaidGroupButton4RoleTexture\",\n\t\"RaidGroupButton5Class\",\n\t\"RaidGroupButton5Level\",\n\t\"RaidGroupButton5LootTexture\",\n\t\"RaidGroupButton5Name\",\n\t\"RaidGroupButton5RankTexture\",\n\t\"RaidGroupButton5ReadyCheckTexture\",\n\t\"RaidGroupButton5RoleTexture\",\n\t\"RaidGroupButton6Class\",\n\t\"RaidGroupButton6Level\",\n\t\"RaidGroupButton6LootTexture\",\n\t\"RaidGroupButton6Name\",\n\t\"RaidGroupButton6RankTexture\",\n\t\"RaidGroupButton6ReadyCheckTexture\",\n\t\"RaidGroupButton6RoleTexture\",\n\t\"RaidGroupButton7Class\",\n\t\"RaidGroupButton7Level\",\n\t\"RaidGroupButton7LootTexture\",\n\t\"RaidGroupButton7Name\",\n\t\"RaidGroupButton7RankTexture\",\n\t\"RaidGroupButton7ReadyCheckTexture\",\n\t\"RaidGroupButton7RoleTexture\",\n\t\"RaidGroupButton8Class\",\n\t\"RaidGroupButton8Level\",\n\t\"RaidGroupButton8LootTexture\",\n\t\"RaidGroupButton8Name\",\n\t\"RaidGroupButton8RankTexture\",\n\t\"RaidGroupButton8ReadyCheckTexture\",\n\t\"RaidGroupButton8RoleTexture\",\n\t\"RaidGroupButton9Class\",\n\t\"RaidGroupButton9Level\",\n\t\"RaidGroupButton9LootTexture\",\n\t\"RaidGroupButton9Name\",\n\t\"RaidGroupButton9RankTexture\",\n\t\"RaidGroupButton9ReadyCheckTexture\",\n\t\"RaidGroupButton9RoleTexture\",\n\t\"RaidInfoCancelButtonLeft\",\n\t\"RaidInfoCancelButtonMiddle\",\n\t\"RaidInfoCancelButtonRight\",\n\t\"RaidInfoCancelButtonText\",\n\t\"RaidInfoDetailCorner\",\n\t\"RaidInfoDetailFooter\",\n\t\"RaidInfoDetailHeader\",\n\t\"RaidInfoExtendButtonLeft\",\n\t\"RaidInfoExtendButtonMiddle\",\n\t\"RaidInfoExtendButtonRight\",\n\t\"RaidInfoExtendButtonText\",\n\t\"RaidInfoFrameHeader\",\n\t\"RaidInfoFrameHeaderText\",\n\t\"RaidInfoIDLabelLeft\",\n\t\"RaidInfoIDLabelMiddle\",\n\t\"RaidInfoIDLabelRight\",\n\t\"RaidInfoInstanceLabelLeft\",\n\t\"RaidInfoInstanceLabelMiddle\",\n\t\"RaidInfoInstanceLabelRight\",\n\t\"RaidInfoScrollFrameButton1Difficulty\",\n\t\"RaidInfoScrollFrameButton1Extended\",\n\t\"RaidInfoScrollFrameButton1Name\",\n\t\"RaidInfoScrollFrameButton1Reset\",\n\t\"RaidInfoScrollFrameButton2Difficulty\",\n\t\"RaidInfoScrollFrameButton2Extended\",\n\t\"RaidInfoScrollFrameButton2Name\",\n\t\"RaidInfoScrollFrameButton2Reset\",\n\t\"RaidInfoScrollFrameButton3Difficulty\",\n\t\"RaidInfoScrollFrameButton3Extended\",\n\t\"RaidInfoScrollFrameButton3Name\",\n\t\"RaidInfoScrollFrameButton3Reset\",\n\t\"RaidInfoScrollFrameButton4Difficulty\",\n\t\"RaidInfoScrollFrameButton4Extended\",\n\t\"RaidInfoScrollFrameButton4Name\",\n\t\"RaidInfoScrollFrameButton4Reset\",\n\t\"RaidInfoScrollFrameButton5Difficulty\",\n\t\"RaidInfoScrollFrameButton5Extended\",\n\t\"RaidInfoScrollFrameButton5Name\",\n\t\"RaidInfoScrollFrameButton5Reset\",\n\t\"RaidInfoScrollFrameButton6Difficulty\",\n\t\"RaidInfoScrollFrameButton6Extended\",\n\t\"RaidInfoScrollFrameButton6Name\",\n\t\"RaidInfoScrollFrameButton6Reset\",\n\t\"RaidInfoScrollFrameButton7Difficulty\",\n\t\"RaidInfoScrollFrameButton7Extended\",\n\t\"RaidInfoScrollFrameButton7Name\",\n\t\"RaidInfoScrollFrameButton7Reset\",\n\t\"RaidInfoScrollFrameScrollBarBG\",\n\t\"RaidInfoScrollFrameScrollBarBottom\",\n\t\"RaidInfoScrollFrameScrollBarMiddle\",\n\t\"RaidInfoScrollFrameScrollBarThumbTexture\",\n\t\"RaidInfoScrollFrameScrollBarTop\",\n\t\"RaidWarningFrameSlot1\",\n\t\"RaidWarningFrameSlot2\",\n\t\"RatingMenuAge\",\n\t\"RatingMenuButtonOkayText\",\n\t\"RatingMenuDrugs\",\n\t\"RatingMenuFrameHeader\",\n\t\"RatingMenuFrameText\",\n\t\"RatingMenuViolence\",\n\t\"ReadyCheckFrameNoButtonText\",\n\t\"ReadyCheckFrameText\",\n\t\"ReadyCheckFrameYesButtonText\",\n\t\"ReadyCheckPortrait\",\n\t\"RecordLoopbackSoundButtonText\",\n\t\"RecordLoopbackSoundButtonTexture\",\n\t\"RegistrationText\",\n\t\"ReputationBar10Background\",\n\t\"ReputationBar10BottomLine\",\n\t\"ReputationBar10ExpandOrCollapseButtonHighlight\",\n\t\"ReputationBar10FactionName\",\n\t\"ReputationBar10LeftLine\",\n\t\"ReputationBar10ReputationBarAtWarHighlight1\",\n\t\"ReputationBar10ReputationBarAtWarHighlight2\",\n\t\"ReputationBar10ReputationBarFactionStanding\",\n\t\"ReputationBar10ReputationBarHighlight1\",\n\t\"ReputationBar10ReputationBarHighlight2\",\n\t\"ReputationBar10ReputationBarLeftTexture\",\n\t\"ReputationBar10ReputationBarRightTexture\",\n\t\"ReputationBar11Background\",\n\t\"ReputationBar11BottomLine\",\n\t\"ReputationBar11ExpandOrCollapseButtonHighlight\",\n\t\"ReputationBar11FactionName\",\n\t\"ReputationBar11LeftLine\",\n\t\"ReputationBar11ReputationBarAtWarHighlight1\",\n\t\"ReputationBar11ReputationBarAtWarHighlight2\",\n\t\"ReputationBar11ReputationBarFactionStanding\",\n\t\"ReputationBar11ReputationBarHighlight1\",\n\t\"ReputationBar11ReputationBarHighlight2\",\n\t\"ReputationBar11ReputationBarLeftTexture\",\n\t\"ReputationBar11ReputationBarRightTexture\",\n\t\"ReputationBar12Background\",\n\t\"ReputationBar12BottomLine\",\n\t\"ReputationBar12ExpandOrCollapseButtonHighlight\",\n\t\"ReputationBar12FactionName\",\n\t\"ReputationBar12LeftLine\",\n\t\"ReputationBar12ReputationBarAtWarHighlight1\",\n\t\"ReputationBar12ReputationBarAtWarHighlight2\",\n\t\"ReputationBar12ReputationBarFactionStanding\",\n\t\"ReputationBar12ReputationBarHighlight1\",\n\t\"ReputationBar12ReputationBarHighlight2\",\n\t\"ReputationBar12ReputationBarLeftTexture\",\n\t\"ReputationBar12ReputationBarRightTexture\",\n\t\"ReputationBar13Background\",\n\t\"ReputationBar13BottomLine\",\n\t\"ReputationBar13ExpandOrCollapseButtonHighlight\",\n\t\"ReputationBar13FactionName\",\n\t\"ReputationBar13LeftLine\",\n\t\"ReputationBar13ReputationBarAtWarHighlight1\",\n\t\"ReputationBar13ReputationBarAtWarHighlight2\",\n\t\"ReputationBar13ReputationBarFactionStanding\",\n\t\"ReputationBar13ReputationBarHighlight1\",\n\t\"ReputationBar13ReputationBarHighlight2\",\n\t\"ReputationBar13ReputationBarLeftTexture\",\n\t\"ReputationBar13ReputationBarRightTexture\",\n\t\"ReputationBar14Background\",\n\t\"ReputationBar14BottomLine\",\n\t\"ReputationBar14ExpandOrCollapseButtonHighlight\",\n\t\"ReputationBar14FactionName\",\n\t\"ReputationBar14LeftLine\",\n\t\"ReputationBar14ReputationBarAtWarHighlight1\",\n\t\"ReputationBar14ReputationBarAtWarHighlight2\",\n\t\"ReputationBar14ReputationBarFactionStanding\",\n\t\"ReputationBar14ReputationBarHighlight1\",\n\t\"ReputationBar14ReputationBarHighlight2\",\n\t\"ReputationBar14ReputationBarLeftTexture\",\n\t\"ReputationBar14ReputationBarRightTexture\",\n\t\"ReputationBar15Background\",\n\t\"ReputationBar15BottomLine\",\n\t\"ReputationBar15ExpandOrCollapseButtonHighlight\",\n\t\"ReputationBar15FactionName\",\n\t\"ReputationBar15LeftLine\",\n\t\"ReputationBar15ReputationBarAtWarHighlight1\",\n\t\"ReputationBar15ReputationBarAtWarHighlight2\",\n\t\"ReputationBar15ReputationBarFactionStanding\",\n\t\"ReputationBar15ReputationBarHighlight1\",\n\t\"ReputationBar15ReputationBarHighlight2\",\n\t\"ReputationBar15ReputationBarLeftTexture\",\n\t\"ReputationBar15ReputationBarRightTexture\",\n\t\"ReputationBar1Background\",\n\t\"ReputationBar1BottomLine\",\n\t\"ReputationBar1ExpandOrCollapseButtonHighlight\",\n\t\"ReputationBar1FactionName\",\n\t\"ReputationBar1LeftLine\",\n\t\"ReputationBar1ReputationBarAtWarHighlight1\",\n\t\"ReputationBar1ReputationBarAtWarHighlight2\",\n\t\"ReputationBar1ReputationBarFactionStanding\",\n\t\"ReputationBar1ReputationBarHighlight1\",\n\t\"ReputationBar1ReputationBarHighlight2\",\n\t\"ReputationBar1ReputationBarLeftTexture\",\n\t\"ReputationBar1ReputationBarRightTexture\",\n\t\"ReputationBar2Background\",\n\t\"ReputationBar2BottomLine\",\n\t\"ReputationBar2ExpandOrCollapseButtonHighlight\",\n\t\"ReputationBar2FactionName\",\n\t\"ReputationBar2LeftLine\",\n\t\"ReputationBar2ReputationBarAtWarHighlight1\",\n\t\"ReputationBar2ReputationBarAtWarHighlight2\",\n\t\"ReputationBar2ReputationBarFactionStanding\",\n\t\"ReputationBar2ReputationBarHighlight1\",\n\t\"ReputationBar2ReputationBarHighlight2\",\n\t\"ReputationBar2ReputationBarLeftTexture\",\n\t\"ReputationBar2ReputationBarRightTexture\",\n\t\"ReputationBar3Background\",\n\t\"ReputationBar3BottomLine\",\n\t\"ReputationBar3ExpandOrCollapseButtonHighlight\",\n\t\"ReputationBar3FactionName\",\n\t\"ReputationBar3LeftLine\",\n\t\"ReputationBar3ReputationBarAtWarHighlight1\",\n\t\"ReputationBar3ReputationBarAtWarHighlight2\",\n\t\"ReputationBar3ReputationBarFactionStanding\",\n\t\"ReputationBar3ReputationBarHighlight1\",\n\t\"ReputationBar3ReputationBarHighlight2\",\n\t\"ReputationBar3ReputationBarLeftTexture\",\n\t\"ReputationBar3ReputationBarRightTexture\",\n\t\"ReputationBar4Background\",\n\t\"ReputationBar4BottomLine\",\n\t\"ReputationBar4ExpandOrCollapseButtonHighlight\",\n\t\"ReputationBar4FactionName\",\n\t\"ReputationBar4LeftLine\",\n\t\"ReputationBar4ReputationBarAtWarHighlight1\",\n\t\"ReputationBar4ReputationBarAtWarHighlight2\",\n\t\"ReputationBar4ReputationBarFactionStanding\",\n\t\"ReputationBar4ReputationBarHighlight1\",\n\t\"ReputationBar4ReputationBarHighlight2\",\n\t\"ReputationBar4ReputationBarLeftTexture\",\n\t\"ReputationBar4ReputationBarRightTexture\",\n\t\"ReputationBar5Background\",\n\t\"ReputationBar5BottomLine\",\n\t\"ReputationBar5ExpandOrCollapseButtonHighlight\",\n\t\"ReputationBar5FactionName\",\n\t\"ReputationBar5LeftLine\",\n\t\"ReputationBar5ReputationBarAtWarHighlight1\",\n\t\"ReputationBar5ReputationBarAtWarHighlight2\",\n\t\"ReputationBar5ReputationBarFactionStanding\",\n\t\"ReputationBar5ReputationBarHighlight1\",\n\t\"ReputationBar5ReputationBarHighlight2\",\n\t\"ReputationBar5ReputationBarLeftTexture\",\n\t\"ReputationBar5ReputationBarRightTexture\",\n\t\"ReputationBar6Background\",\n\t\"ReputationBar6BottomLine\",\n\t\"ReputationBar6ExpandOrCollapseButtonHighlight\",\n\t\"ReputationBar6FactionName\",\n\t\"ReputationBar6LeftLine\",\n\t\"ReputationBar6ReputationBarAtWarHighlight1\",\n\t\"ReputationBar6ReputationBarAtWarHighlight2\",\n\t\"ReputationBar6ReputationBarFactionStanding\",\n\t\"ReputationBar6ReputationBarHighlight1\",\n\t\"ReputationBar6ReputationBarHighlight2\",\n\t\"ReputationBar6ReputationBarLeftTexture\",\n\t\"ReputationBar6ReputationBarRightTexture\",\n\t\"ReputationBar7Background\",\n\t\"ReputationBar7BottomLine\",\n\t\"ReputationBar7ExpandOrCollapseButtonHighlight\",\n\t\"ReputationBar7FactionName\",\n\t\"ReputationBar7LeftLine\",\n\t\"ReputationBar7ReputationBarAtWarHighlight1\",\n\t\"ReputationBar7ReputationBarAtWarHighlight2\",\n\t\"ReputationBar7ReputationBarFactionStanding\",\n\t\"ReputationBar7ReputationBarHighlight1\",\n\t\"ReputationBar7ReputationBarHighlight2\",\n\t\"ReputationBar7ReputationBarLeftTexture\",\n\t\"ReputationBar7ReputationBarRightTexture\",\n\t\"ReputationBar8Background\",\n\t\"ReputationBar8BottomLine\",\n\t\"ReputationBar8ExpandOrCollapseButtonHighlight\",\n\t\"ReputationBar8FactionName\",\n\t\"ReputationBar8LeftLine\",\n\t\"ReputationBar8ReputationBarAtWarHighlight1\",\n\t\"ReputationBar8ReputationBarAtWarHighlight2\",\n\t\"ReputationBar8ReputationBarFactionStanding\",\n\t\"ReputationBar8ReputationBarHighlight1\",\n\t\"ReputationBar8ReputationBarHighlight2\",\n\t\"ReputationBar8ReputationBarLeftTexture\",\n\t\"ReputationBar8ReputationBarRightTexture\",\n\t\"ReputationBar9Background\",\n\t\"ReputationBar9BottomLine\",\n\t\"ReputationBar9ExpandOrCollapseButtonHighlight\",\n\t\"ReputationBar9FactionName\",\n\t\"ReputationBar9LeftLine\",\n\t\"ReputationBar9ReputationBarAtWarHighlight1\",\n\t\"ReputationBar9ReputationBarAtWarHighlight2\",\n\t\"ReputationBar9ReputationBarFactionStanding\",\n\t\"ReputationBar9ReputationBarHighlight1\",\n\t\"ReputationBar9ReputationBarHighlight2\",\n\t\"ReputationBar9ReputationBarLeftTexture\",\n\t\"ReputationBar9ReputationBarRightTexture\",\n\t\"ReputationDetailAtWarCheckBoxText\",\n\t\"ReputationDetailCorner\",\n\t\"ReputationDetailDivider\",\n\t\"ReputationDetailFactionDescription\",\n\t\"ReputationDetailFactionName\",\n\t\"ReputationDetailFont\",\n\t\"ReputationDetailInactiveCheckBoxText\",\n\t\"ReputationDetailMainScreenCheckBoxText\",\n\t\"ReputationFrameFactionLabel\",\n\t\"ReputationFrameStandingLabel\",\n\t\"ReputationFrameTopTreeTexture\",\n\t\"ReputationFrameTopTreeTexture2\",\n\t\"ReputationListScrollFrameScrollBarThumbTexture\",\n\t\"ReputationWatchBarTexture0\",\n\t\"ReputationWatchBarTexture1\",\n\t\"ReputationWatchBarTexture2\",\n\t\"ReputationWatchBarTexture3\",\n\t\"ReputationWatchStatusBarBackground\",\n\t\"ReputationWatchStatusBarText\",\n\t\"ReputationXPBarTexture0\",\n\t\"ReputationXPBarTexture1\",\n\t\"ReputationXPBarTexture2\",\n\t\"ReputationXPBarTexture3\",\n\t\"RuneButtonIndividual1BorderTexture\",\n\t\"RuneButtonIndividual1Rune\",\n\t\"RuneButtonIndividual1ShineTexture\",\n\t\"RuneButtonIndividual2BorderTexture\",\n\t\"RuneButtonIndividual2Rune\",\n\t\"RuneButtonIndividual2ShineTexture\",\n\t\"RuneButtonIndividual3BorderTexture\",\n\t\"RuneButtonIndividual3Rune\",\n\t\"RuneButtonIndividual3ShineTexture\",\n\t\"RuneButtonIndividual4BorderTexture\",\n\t\"RuneButtonIndividual4Rune\",\n\t\"RuneButtonIndividual4ShineTexture\",\n\t\"RuneButtonIndividual5BorderTexture\",\n\t\"RuneButtonIndividual5Rune\",\n\t\"RuneButtonIndividual5ShineTexture\",\n\t\"RuneButtonIndividual6BorderTexture\",\n\t\"RuneButtonIndividual6Rune\",\n\t\"RuneButtonIndividual6ShineTexture\",\n\t\"ScorePlayerDropDownButtonDisabledTexture\",\n\t\"ScorePlayerDropDownButtonHighlightTexture\",\n\t\"ScorePlayerDropDownButtonNormalTexture\",\n\t\"ScorePlayerDropDownButtonPushedTexture\",\n\t\"ScorePlayerDropDownLeft\",\n\t\"ScorePlayerDropDownMiddle\",\n\t\"ScorePlayerDropDownRight\",\n\t\"ScorePlayerDropDownText\",\n\t\"SendMailAttachment10Count\",\n\t\"SendMailAttachment11Count\",\n\t\"SendMailAttachment12Count\",\n\t\"SendMailAttachment13Count\",\n\t\"SendMailAttachment14Count\",\n\t\"SendMailAttachment15Count\",\n\t\"SendMailAttachment16Count\",\n\t\"SendMailAttachment1Count\",\n\t\"SendMailAttachment2Count\",\n\t\"SendMailAttachment3Count\",\n\t\"SendMailAttachment4Count\",\n\t\"SendMailAttachment5Count\",\n\t\"SendMailAttachment6Count\",\n\t\"SendMailAttachment7Count\",\n\t\"SendMailAttachment8Count\",\n\t\"SendMailAttachment9Count\",\n\t\"SendMailCODButtonText\",\n\t\"SendMailCancelButtonText\",\n\t\"SendMailCostMoneyFrameCopperButtonText\",\n\t\"SendMailCostMoneyFrameGoldButtonText\",\n\t\"SendMailCostMoneyFrameSilverButtonText\",\n\t\"SendMailErrorCoin\",\n\t\"SendMailErrorText\",\n\t\"SendMailFrameLockSendMailBlackFilter\",\n\t\"SendMailHorizontalBarLeft\",\n\t\"SendMailHorizontalBarLeft2\",\n\t\"SendMailMailButtonText\",\n\t\"SendMailMoneyCopperLeft\",\n\t\"SendMailMoneyCopperMiddle\",\n\t\"SendMailMoneyCopperRight\",\n\t\"SendMailMoneyFrameCopperButtonText\",\n\t\"SendMailMoneyFrameGoldButtonText\",\n\t\"SendMailMoneyFrameSilverButtonText\",\n\t\"SendMailMoneyGoldLeft\",\n\t\"SendMailMoneyGoldMiddle\",\n\t\"SendMailMoneyGoldRight\",\n\t\"SendMailMoneySilverLeft\",\n\t\"SendMailMoneySilverMiddle\",\n\t\"SendMailMoneySilverRight\",\n\t\"SendMailMoneyText\",\n\t\"SendMailNameEditBoxLeft\",\n\t\"SendMailNameEditBoxMiddle\",\n\t\"SendMailNameEditBoxRight\",\n\t\"SendMailScrollFrameScrollBarThumbTexture\",\n\t\"SendMailSendMoneyButtonText\",\n\t\"SendMailSubjectEditBoxLeft\",\n\t\"SendMailSubjectEditBoxMiddle\",\n\t\"SendMailSubjectEditBoxRight\",\n\t\"SendMailTitleText\",\n\t\"SendScrollBarBackgroundTop\",\n\t\"SendStationeryBackgroundLeft\",\n\t\"SendStationeryBackgroundRight\",\n\t\"ShapeshiftBarLeft\",\n\t\"ShapeshiftBarMiddle\",\n\t\"ShapeshiftBarRight\",\n\t\"ShapeshiftButton10Border\",\n\t\"ShapeshiftButton10Count\",\n\t\"ShapeshiftButton10Flash\",\n\t\"ShapeshiftButton10HotKey\",\n\t\"ShapeshiftButton10Icon\",\n\t\"ShapeshiftButton10Name\",\n\t\"ShapeshiftButton10NormalTexture\",\n\t\"ShapeshiftButton1Border\",\n\t\"ShapeshiftButton1Count\",\n\t\"ShapeshiftButton1Flash\",\n\t\"ShapeshiftButton1HotKey\",\n\t\"ShapeshiftButton1Icon\",\n\t\"ShapeshiftButton1Name\",\n\t\"ShapeshiftButton1NormalTexture\",\n\t\"ShapeshiftButton2Border\",\n\t\"ShapeshiftButton2Count\",\n\t\"ShapeshiftButton2Flash\",\n\t\"ShapeshiftButton2HotKey\",\n\t\"ShapeshiftButton2Icon\",\n\t\"ShapeshiftButton2Name\",\n\t\"ShapeshiftButton2NormalTexture\",\n\t\"ShapeshiftButton3Border\",\n\t\"ShapeshiftButton3Count\",\n\t\"ShapeshiftButton3Flash\",\n\t\"ShapeshiftButton3HotKey\",\n\t\"ShapeshiftButton3Icon\",\n\t\"ShapeshiftButton3Name\",\n\t\"ShapeshiftButton3NormalTexture\",\n\t\"ShapeshiftButton4Border\",\n\t\"ShapeshiftButton4Count\",\n\t\"ShapeshiftButton4Flash\",\n\t\"ShapeshiftButton4HotKey\",\n\t\"ShapeshiftButton4Icon\",\n\t\"ShapeshiftButton4Name\",\n\t\"ShapeshiftButton4NormalTexture\",\n\t\"ShapeshiftButton5Border\",\n\t\"ShapeshiftButton5Count\",\n\t\"ShapeshiftButton5Flash\",\n\t\"ShapeshiftButton5HotKey\",\n\t\"ShapeshiftButton5Icon\",\n\t\"ShapeshiftButton5Name\",\n\t\"ShapeshiftButton5NormalTexture\",\n\t\"ShapeshiftButton6Border\",\n\t\"ShapeshiftButton6Count\",\n\t\"ShapeshiftButton6Flash\",\n\t\"ShapeshiftButton6HotKey\",\n\t\"ShapeshiftButton6Icon\",\n\t\"ShapeshiftButton6Name\",\n\t\"ShapeshiftButton6NormalTexture\",\n\t\"ShapeshiftButton7Border\",\n\t\"ShapeshiftButton7Count\",\n\t\"ShapeshiftButton7Flash\",\n\t\"ShapeshiftButton7HotKey\",\n\t\"ShapeshiftButton7Icon\",\n\t\"ShapeshiftButton7Name\",\n\t\"ShapeshiftButton7NormalTexture\",\n\t\"ShapeshiftButton8Border\",\n\t\"ShapeshiftButton8Count\",\n\t\"ShapeshiftButton8Flash\",\n\t\"ShapeshiftButton8HotKey\",\n\t\"ShapeshiftButton8Icon\",\n\t\"ShapeshiftButton8Name\",\n\t\"ShapeshiftButton8NormalTexture\",\n\t\"ShapeshiftButton9Border\",\n\t\"ShapeshiftButton9Count\",\n\t\"ShapeshiftButton9Flash\",\n\t\"ShapeshiftButton9HotKey\",\n\t\"ShapeshiftButton9Icon\",\n\t\"ShapeshiftButton9Name\",\n\t\"ShapeshiftButton9NormalTexture\",\n\t\"ShoppingTooltip1TextLeft1\",\n\t\"ShoppingTooltip1TextLeft2\",\n\t\"ShoppingTooltip1TextLeft3\",\n\t\"ShoppingTooltip1TextLeft4\",\n\t\"ShoppingTooltip1TextRight1\",\n\t\"ShoppingTooltip1TextRight2\",\n\t\"ShoppingTooltip1TextRight3\",\n\t\"ShoppingTooltip1TextRight4\",\n\t\"ShoppingTooltip1Texture1\",\n\t\"ShoppingTooltip1Texture2\",\n\t\"ShoppingTooltip1Texture3\",\n\t\"ShoppingTooltip2TextLeft1\",\n\t\"ShoppingTooltip2TextLeft2\",\n\t\"ShoppingTooltip2TextLeft3\",\n\t\"ShoppingTooltip2TextLeft4\",\n\t\"ShoppingTooltip2TextRight1\",\n\t\"ShoppingTooltip2TextRight2\",\n\t\"ShoppingTooltip2TextRight3\",\n\t\"ShoppingTooltip2TextRight4\",\n\t\"ShoppingTooltip2Texture1\",\n\t\"ShoppingTooltip2Texture2\",\n\t\"ShoppingTooltip2Texture3\",\n\t\"ShoppingTooltip3TextLeft1\",\n\t\"ShoppingTooltip3TextLeft2\",\n\t\"ShoppingTooltip3TextLeft3\",\n\t\"ShoppingTooltip3TextLeft4\",\n\t\"ShoppingTooltip3TextRight1\",\n\t\"ShoppingTooltip3TextRight2\",\n\t\"ShoppingTooltip3TextRight3\",\n\t\"ShoppingTooltip3TextRight4\",\n\t\"ShoppingTooltip3Texture1\",\n\t\"ShoppingTooltip3Texture2\",\n\t\"ShoppingTooltip3Texture3\",\n\t\"ShowAllSpellRanksCheckBoxText\",\n\t\"SkillDetailCostText\",\n\t\"SkillDetailDescriptionText\",\n\t\"SkillDetailScrollFrameScrollBarThumbTexture\",\n\t\"SkillDetailStatusBarBackground\",\n\t\"SkillDetailStatusBarBar\",\n\t\"SkillDetailStatusBarBorder\",\n\t\"SkillDetailStatusBarFillBar\",\n\t\"SkillDetailStatusBarSkillName\",\n\t\"SkillDetailStatusBarSkillRank\",\n\t\"SkillFrameCancelButtonText\",\n\t\"SkillFrameCollapseAllButtonNormalTexture\",\n\t\"SkillFrameExpandTabLeft\",\n\t\"SkillFrameExpandTabMiddle\",\n\t\"SkillFrameExpandTabRight\",\n\t\"SkillFrameHorizontalBarLeft\",\n\t\"SkillListScrollFrameScrollBarThumbTexture\",\n\t\"SkillRankFrame10Background\",\n\t\"SkillRankFrame10Bar\",\n\t\"SkillRankFrame10BorderHighlight\",\n\t\"SkillRankFrame10BorderNormal\",\n\t\"SkillRankFrame10FillBar\",\n\t\"SkillRankFrame10SkillName\",\n\t\"SkillRankFrame10SkillRank\",\n\t\"SkillRankFrame11Background\",\n\t\"SkillRankFrame11Bar\",\n\t\"SkillRankFrame11BorderHighlight\",\n\t\"SkillRankFrame11BorderNormal\",\n\t\"SkillRankFrame11FillBar\",\n\t\"SkillRankFrame11SkillName\",\n\t\"SkillRankFrame11SkillRank\",\n\t\"SkillRankFrame12Background\",\n\t\"SkillRankFrame12Bar\",\n\t\"SkillRankFrame12BorderHighlight\",\n\t\"SkillRankFrame12BorderNormal\",\n\t\"SkillRankFrame12FillBar\",\n\t\"SkillRankFrame12SkillName\",\n\t\"SkillRankFrame12SkillRank\",\n\t\"SkillRankFrame1Background\",\n\t\"SkillRankFrame1Bar\",\n\t\"SkillRankFrame1BorderHighlight\",\n\t\"SkillRankFrame1BorderNormal\",\n\t\"SkillRankFrame1FillBar\",\n\t\"SkillRankFrame1SkillName\",\n\t\"SkillRankFrame1SkillRank\",\n\t\"SkillRankFrame2Background\",\n\t\"SkillRankFrame2Bar\",\n\t\"SkillRankFrame2BorderHighlight\",\n\t\"SkillRankFrame2BorderNormal\",\n\t\"SkillRankFrame2FillBar\",\n\t\"SkillRankFrame2SkillName\",\n\t\"SkillRankFrame2SkillRank\",\n\t\"SkillRankFrame3Background\",\n\t\"SkillRankFrame3Bar\",\n\t\"SkillRankFrame3BorderHighlight\",\n\t\"SkillRankFrame3BorderNormal\",\n\t\"SkillRankFrame3FillBar\",\n\t\"SkillRankFrame3SkillName\",\n\t\"SkillRankFrame3SkillRank\",\n\t\"SkillRankFrame4Background\",\n\t\"SkillRankFrame4Bar\",\n\t\"SkillRankFrame4BorderHighlight\",\n\t\"SkillRankFrame4BorderNormal\",\n\t\"SkillRankFrame4FillBar\",\n\t\"SkillRankFrame4SkillName\",\n\t\"SkillRankFrame4SkillRank\",\n\t\"SkillRankFrame5Background\",\n\t\"SkillRankFrame5Bar\",\n\t\"SkillRankFrame5BorderHighlight\",\n\t\"SkillRankFrame5BorderNormal\",\n\t\"SkillRankFrame5FillBar\",\n\t\"SkillRankFrame5SkillName\",\n\t\"SkillRankFrame5SkillRank\",\n\t\"SkillRankFrame6Background\",\n\t\"SkillRankFrame6Bar\",\n\t\"SkillRankFrame6BorderHighlight\",\n\t\"SkillRankFrame6BorderNormal\",\n\t\"SkillRankFrame6FillBar\",\n\t\"SkillRankFrame6SkillName\",\n\t\"SkillRankFrame6SkillRank\",\n\t\"SkillRankFrame7Background\",\n\t\"SkillRankFrame7Bar\",\n\t\"SkillRankFrame7BorderHighlight\",\n\t\"SkillRankFrame7BorderNormal\",\n\t\"SkillRankFrame7FillBar\",\n\t\"SkillRankFrame7SkillName\",\n\t\"SkillRankFrame7SkillRank\",\n\t\"SkillRankFrame8Background\",\n\t\"SkillRankFrame8Bar\",\n\t\"SkillRankFrame8BorderHighlight\",\n\t\"SkillRankFrame8BorderNormal\",\n\t\"SkillRankFrame8FillBar\",\n\t\"SkillRankFrame8SkillName\",\n\t\"SkillRankFrame8SkillRank\",\n\t\"SkillRankFrame9Background\",\n\t\"SkillRankFrame9Bar\",\n\t\"SkillRankFrame9BorderHighlight\",\n\t\"SkillRankFrame9BorderNormal\",\n\t\"SkillRankFrame9FillBar\",\n\t\"SkillRankFrame9SkillName\",\n\t\"SkillRankFrame9SkillRank\",\n\t\"SkillTypeLabel10NormalTexture\",\n\t\"SkillTypeLabel11NormalTexture\",\n\t\"SkillTypeLabel12NormalTexture\",\n\t\"SkillTypeLabel1NormalTexture\",\n\t\"SkillTypeLabel2NormalTexture\",\n\t\"SkillTypeLabel3NormalTexture\",\n\t\"SkillTypeLabel4NormalTexture\",\n\t\"SkillTypeLabel5NormalTexture\",\n\t\"SkillTypeLabel6NormalTexture\",\n\t\"SkillTypeLabel7NormalTexture\",\n\t\"SkillTypeLabel8NormalTexture\",\n\t\"SkillTypeLabel9NormalTexture\",\n\t\"SlidingActionBarTexture0\",\n\t\"SlidingActionBarTexture1\",\n\t\"SmallTextTooltipText\",\n\t\"SpellBookFrameBotLeft\",\n\t\"SpellBookFrameBotRight\",\n\t\"SpellBookFrameIcon\",\n\t\"SpellBookFrameTopLeft\",\n\t\"SpellBookFrameTopRight\",\n\t\"SpellBookPageText\",\n\t\"SpellBookSkillLineTab1Flash\",\n\t\"SpellBookSkillLineTab2Flash\",\n\t\"SpellBookSkillLineTab3Flash\",\n\t\"SpellBookSkillLineTab4Flash\",\n\t\"SpellBookSkillLineTab5Flash\",\n\t\"SpellBookSkillLineTab6Flash\",\n\t\"SpellBookSkillLineTab7Flash\",\n\t\"SpellBookSkillLineTab8Flash\",\n\t\"SpellBookTitleText\",\n\t\"SpellButton10AutoCastable\",\n\t\"SpellButton10Background\",\n\t\"SpellButton10Highlight\",\n\t\"SpellButton10IconTexture\",\n\t\"SpellButton10NormalTexture\",\n\t\"SpellButton10SpellName\",\n\t\"SpellButton10SubSpellName\",\n\t\"SpellButton11AutoCastable\",\n\t\"SpellButton11Background\",\n\t\"SpellButton11Highlight\",\n\t\"SpellButton11IconTexture\",\n\t\"SpellButton11NormalTexture\",\n\t\"SpellButton11SpellName\",\n\t\"SpellButton11SubSpellName\",\n\t\"SpellButton12AutoCastable\",\n\t\"SpellButton12Background\",\n\t\"SpellButton12Highlight\",\n\t\"SpellButton12IconTexture\",\n\t\"SpellButton12NormalTexture\",\n\t\"SpellButton12SpellName\",\n\t\"SpellButton12SubSpellName\",\n\t\"SpellButton1AutoCastable\",\n\t\"SpellButton1Background\",\n\t\"SpellButton1Highlight\",\n\t\"SpellButton1IconTexture\",\n\t\"SpellButton1NormalTexture\",\n\t\"SpellButton1SpellName\",\n\t\"SpellButton1SubSpellName\",\n\t\"SpellButton2AutoCastable\",\n\t\"SpellButton2Background\",\n\t\"SpellButton2Highlight\",\n\t\"SpellButton2IconTexture\",\n\t\"SpellButton2NormalTexture\",\n\t\"SpellButton2SpellName\",\n\t\"SpellButton2SubSpellName\",\n\t\"SpellButton3AutoCastable\",\n\t\"SpellButton3Background\",\n\t\"SpellButton3Highlight\",\n\t\"SpellButton3IconTexture\",\n\t\"SpellButton3NormalTexture\",\n\t\"SpellButton3SpellName\",\n\t\"SpellButton3SubSpellName\",\n\t\"SpellButton4AutoCastable\",\n\t\"SpellButton4Background\",\n\t\"SpellButton4Highlight\",\n\t\"SpellButton4IconTexture\",\n\t\"SpellButton4NormalTexture\",\n\t\"SpellButton4SpellName\",\n\t\"SpellButton4SubSpellName\",\n\t\"SpellButton5AutoCastable\",\n\t\"SpellButton5Background\",\n\t\"SpellButton5Highlight\",\n\t\"SpellButton5IconTexture\",\n\t\"SpellButton5NormalTexture\",\n\t\"SpellButton5SpellName\",\n\t\"SpellButton5SubSpellName\",\n\t\"SpellButton6AutoCastable\",\n\t\"SpellButton6Background\",\n\t\"SpellButton6Highlight\",\n\t\"SpellButton6IconTexture\",\n\t\"SpellButton6NormalTexture\",\n\t\"SpellButton6SpellName\",\n\t\"SpellButton6SubSpellName\",\n\t\"SpellButton7AutoCastable\",\n\t\"SpellButton7Background\",\n\t\"SpellButton7Highlight\",\n\t\"SpellButton7IconTexture\",\n\t\"SpellButton7NormalTexture\",\n\t\"SpellButton7SpellName\",\n\t\"SpellButton7SubSpellName\",\n\t\"SpellButton8AutoCastable\",\n\t\"SpellButton8Background\",\n\t\"SpellButton8Highlight\",\n\t\"SpellButton8IconTexture\",\n\t\"SpellButton8NormalTexture\",\n\t\"SpellButton8SpellName\",\n\t\"SpellButton8SubSpellName\",\n\t\"SpellButton9AutoCastable\",\n\t\"SpellButton9Background\",\n\t\"SpellButton9Highlight\",\n\t\"SpellButton9IconTexture\",\n\t\"SpellButton9NormalTexture\",\n\t\"SpellButton9SpellName\",\n\t\"SpellButton9SubSpellName\",\n\t\"SpellFont_Small\",\n\t\"StackSplitCancelButtonText\",\n\t\"StackSplitOkayButtonText\",\n\t\"StackSplitText\",\n\t\"StaticPopup1AlertIcon\",\n\t\"StaticPopup1Button1Text\",\n\t\"StaticPopup1Button2Text\",\n\t\"StaticPopup1Button3Text\",\n\t\"StaticPopup1ItemFrameCount\",\n\t\"StaticPopup1ItemFrameIconTexture\",\n\t\"StaticPopup1ItemFrameNameFrame\",\n\t\"StaticPopup1ItemFrameNormalTexture\",\n\t\"StaticPopup1ItemFrameStock\",\n\t\"StaticPopup1ItemFrameText\",\n\t\"StaticPopup1MoneyFrameCopperButtonText\",\n\t\"StaticPopup1MoneyFrameGoldButtonText\",\n\t\"StaticPopup1MoneyFrameSilverButtonText\",\n\t\"StaticPopup1MoneyInputFrameCopperLeft\",\n\t\"StaticPopup1MoneyInputFrameCopperMiddle\",\n\t\"StaticPopup1MoneyInputFrameCopperRight\",\n\t\"StaticPopup1MoneyInputFrameGoldLeft\",\n\t\"StaticPopup1MoneyInputFrameGoldMiddle\",\n\t\"StaticPopup1MoneyInputFrameGoldRight\",\n\t\"StaticPopup1MoneyInputFrameSilverLeft\",\n\t\"StaticPopup1MoneyInputFrameSilverMiddle\",\n\t\"StaticPopup1MoneyInputFrameSilverRight\",\n\t\"StaticPopup1Text\",\n\t\"StaticPopup1WideEditBoxLeft\",\n\t\"StaticPopup1WideEditBoxRight\",\n\t\"StaticPopup2AlertIcon\",\n\t\"StaticPopup2Button1Text\",\n\t\"StaticPopup2Button2Text\",\n\t\"StaticPopup2Button3Text\",\n\t\"StaticPopup2ItemFrameCount\",\n\t\"StaticPopup2ItemFrameIconTexture\",\n\t\"StaticPopup2ItemFrameNameFrame\",\n\t\"StaticPopup2ItemFrameNormalTexture\",\n\t\"StaticPopup2ItemFrameStock\",\n\t\"StaticPopup2ItemFrameText\",\n\t\"StaticPopup2MoneyFrameCopperButtonText\",\n\t\"StaticPopup2MoneyFrameGoldButtonText\",\n\t\"StaticPopup2MoneyFrameSilverButtonText\",\n\t\"StaticPopup2MoneyInputFrameCopperLeft\",\n\t\"StaticPopup2MoneyInputFrameCopperMiddle\",\n\t\"StaticPopup2MoneyInputFrameCopperRight\",\n\t\"StaticPopup2MoneyInputFrameGoldLeft\",\n\t\"StaticPopup2MoneyInputFrameGoldMiddle\",\n\t\"StaticPopup2MoneyInputFrameGoldRight\",\n\t\"StaticPopup2MoneyInputFrameSilverLeft\",\n\t\"StaticPopup2MoneyInputFrameSilverMiddle\",\n\t\"StaticPopup2MoneyInputFrameSilverRight\",\n\t\"StaticPopup2Text\",\n\t\"StaticPopup2WideEditBoxLeft\",\n\t\"StaticPopup2WideEditBoxRight\",\n\t\"StaticPopup3AlertIcon\",\n\t\"StaticPopup3Button1Text\",\n\t\"StaticPopup3Button2Text\",\n\t\"StaticPopup3Button3Text\",\n\t\"StaticPopup3ItemFrameCount\",\n\t\"StaticPopup3ItemFrameIconTexture\",\n\t\"StaticPopup3ItemFrameNameFrame\",\n\t\"StaticPopup3ItemFrameNormalTexture\",\n\t\"StaticPopup3ItemFrameStock\",\n\t\"StaticPopup3ItemFrameText\",\n\t\"StaticPopup3MoneyFrameCopperButtonText\",\n\t\"StaticPopup3MoneyFrameGoldButtonText\",\n\t\"StaticPopup3MoneyFrameSilverButtonText\",\n\t\"StaticPopup3MoneyInputFrameCopperLeft\",\n\t\"StaticPopup3MoneyInputFrameCopperMiddle\",\n\t\"StaticPopup3MoneyInputFrameCopperRight\",\n\t\"StaticPopup3MoneyInputFrameGoldLeft\",\n\t\"StaticPopup3MoneyInputFrameGoldMiddle\",\n\t\"StaticPopup3MoneyInputFrameGoldRight\",\n\t\"StaticPopup3MoneyInputFrameSilverLeft\",\n\t\"StaticPopup3MoneyInputFrameSilverMiddle\",\n\t\"StaticPopup3MoneyInputFrameSilverRight\",\n\t\"StaticPopup3Text\",\n\t\"StaticPopup3WideEditBoxLeft\",\n\t\"StaticPopup3WideEditBoxRight\",\n\t\"StaticPopup4AlertIcon\",\n\t\"StaticPopup4Button1Text\",\n\t\"StaticPopup4Button2Text\",\n\t\"StaticPopup4Button3Text\",\n\t\"StaticPopup4ItemFrameCount\",\n\t\"StaticPopup4ItemFrameIconTexture\",\n\t\"StaticPopup4ItemFrameNameFrame\",\n\t\"StaticPopup4ItemFrameNormalTexture\",\n\t\"StaticPopup4ItemFrameStock\",\n\t\"StaticPopup4ItemFrameText\",\n\t\"StaticPopup4MoneyFrameCopperButtonText\",\n\t\"StaticPopup4MoneyFrameGoldButtonText\",\n\t\"StaticPopup4MoneyFrameSilverButtonText\",\n\t\"StaticPopup4MoneyInputFrameCopperLeft\",\n\t\"StaticPopup4MoneyInputFrameCopperMiddle\",\n\t\"StaticPopup4MoneyInputFrameCopperRight\",\n\t\"StaticPopup4MoneyInputFrameGoldLeft\",\n\t\"StaticPopup4MoneyInputFrameGoldMiddle\",\n\t\"StaticPopup4MoneyInputFrameGoldRight\",\n\t\"StaticPopup4MoneyInputFrameSilverLeft\",\n\t\"StaticPopup4MoneyInputFrameSilverMiddle\",\n\t\"StaticPopup4MoneyInputFrameSilverRight\",\n\t\"StaticPopup4Text\",\n\t\"StaticPopup4WideEditBoxLeft\",\n\t\"StaticPopup4WideEditBoxRight\",\n\t\"StationeryPopupButton1Icon\",\n\t\"StationeryPopupButton1MoneyFrameCopperButtonText\",\n\t\"StationeryPopupButton1MoneyFrameGoldButtonText\",\n\t\"StationeryPopupButton1MoneyFrameSilverButtonText\",\n\t\"StationeryPopupButton1Name\",\n\t\"StationeryPopupButton1NameFrame\",\n\t\"StationeryPopupButton2Icon\",\n\t\"StationeryPopupButton2MoneyFrameCopperButtonText\",\n\t\"StationeryPopupButton2MoneyFrameGoldButtonText\",\n\t\"StationeryPopupButton2MoneyFrameSilverButtonText\",\n\t\"StationeryPopupButton2Name\",\n\t\"StationeryPopupButton2NameFrame\",\n\t\"StationeryPopupButton3Icon\",\n\t\"StationeryPopupButton3MoneyFrameCopperButtonText\",\n\t\"StationeryPopupButton3MoneyFrameGoldButtonText\",\n\t\"StationeryPopupButton3MoneyFrameSilverButtonText\",\n\t\"StationeryPopupButton3Name\",\n\t\"StationeryPopupButton3NameFrame\",\n\t\"StationeryPopupButton4Icon\",\n\t\"StationeryPopupButton4MoneyFrameCopperButtonText\",\n\t\"StationeryPopupButton4MoneyFrameGoldButtonText\",\n\t\"StationeryPopupButton4MoneyFrameSilverButtonText\",\n\t\"StationeryPopupButton4Name\",\n\t\"StationeryPopupButton4NameFrame\",\n\t\"StationeryPopupButton5Icon\",\n\t\"StationeryPopupButton5MoneyFrameCopperButtonText\",\n\t\"StationeryPopupButton5MoneyFrameGoldButtonText\",\n\t\"StationeryPopupButton5MoneyFrameSilverButtonText\",\n\t\"StationeryPopupButton5Name\",\n\t\"StationeryPopupButton5NameFrame\",\n\t\"StationeryPopupCancelButtonText\",\n\t\"StationeryPopupOkayButtonText\",\n\t\"StationeryPopupScrollFrameScrollBarThumbTexture\",\n\t\"StatsFrameText\",\n\t\"StopwatchFrameBackgroundLeft\",\n\t\"StopwatchTabFrameLeft\",\n\t\"StopwatchTabFrameMiddle\",\n\t\"StopwatchTabFrameRight\",\n\t\"StopwatchTickerHour\",\n\t\"StopwatchTickerMinute\",\n\t\"StopwatchTickerSecond\",\n\t\"StopwatchTitle\",\n\t\"SubSpellFont\",\n\t\"SubZoneTextFont\",\n\t\"SubZoneTextString\",\n\t\"SystemFont_Huge1\",\n\t\"SystemFont_InverseShadow_Small\",\n\t\"SystemFont_Large\",\n\t\"SystemFont_Med1\",\n\t\"SystemFont_Med2\",\n\t\"SystemFont_Med3\",\n\t\"SystemFont_Outline\",\n\t\"SystemFont_OutlineThick_Huge2\",\n\t\"SystemFont_OutlineThick_Huge4\",\n\t\"SystemFont_OutlineThick_WTF\",\n\t\"SystemFont_Outline_Small\",\n\t\"SystemFont_Shadow_Huge1\",\n\t\"SystemFont_Shadow_Huge3\",\n\t\"SystemFont_Shadow_Large\",\n\t\"SystemFont_Shadow_Med1\",\n\t\"SystemFont_Shadow_Med2\",\n\t\"SystemFont_Shadow_Med3\",\n\t\"SystemFont_Shadow_Outline_Huge2\",\n\t\"SystemFont_Shadow_Small\",\n\t\"SystemFont_Small\",\n\t\"SystemFont_Tiny\",\n\t\"TabardFrameAcceptButtonText\",\n\t\"TabardFrameBackground\",\n\t\"TabardFrameCancelButtonText\",\n\t\"TabardFrameCostLabel\",\n\t\"TabardFrameCostMoneyFrameCopperButtonText\",\n\t\"TabardFrameCostMoneyFrameGoldButtonText\",\n\t\"TabardFrameCostMoneyFrameSilverButtonText\",\n\t\"TabardFrameCustomization1Left\",\n\t\"TabardFrameCustomization1Middle\",\n\t\"TabardFrameCustomization1Right\",\n\t\"TabardFrameCustomization1Text\",\n\t\"TabardFrameCustomization2Left\",\n\t\"TabardFrameCustomization2Middle\",\n\t\"TabardFrameCustomization2Right\",\n\t\"TabardFrameCustomization2Text\",\n\t\"TabardFrameCustomization3Left\",\n\t\"TabardFrameCustomization3Middle\",\n\t\"TabardFrameCustomization3Right\",\n\t\"TabardFrameCustomization3Text\",\n\t\"TabardFrameCustomization4Left\",\n\t\"TabardFrameCustomization4Middle\",\n\t\"TabardFrameCustomization4Right\",\n\t\"TabardFrameCustomization4Text\",\n\t\"TabardFrameCustomization5Left\",\n\t\"TabardFrameCustomization5Middle\",\n\t\"TabardFrameCustomization5Right\",\n\t\"TabardFrameCustomization5Text\",\n\t\"TabardFrameCustomizationBorder\",\n\t\"TabardFrameEmblemBottomLeft\",\n\t\"TabardFrameEmblemBottomRight\",\n\t\"TabardFrameEmblemTopLeft\",\n\t\"TabardFrameEmblemTopRight\",\n\t\"TabardFrameGreetingText\",\n\t\"TabardFrameMoneyFrameCopperButtonText\",\n\t\"TabardFrameMoneyFrameGoldButtonText\",\n\t\"TabardFrameMoneyFrameSilverButtonText\",\n\t\"TabardFrameNameText\",\n\t\"TabardFrameOuterFrameBottom\",\n\t\"TabardFrameOuterFrameBottomLeft\",\n\t\"TabardFrameOuterFrameBottomRight\",\n\t\"TabardFrameOuterFrameLeftBottom\",\n\t\"TabardFrameOuterFrameLeftTop\",\n\t\"TabardFrameOuterFrameRightBottom\",\n\t\"TabardFrameOuterFrameRightTop\",\n\t\"TabardFrameOuterFrameTop\",\n\t\"TabardFrameOuterFrameTopLeft\",\n\t\"TabardFrameOuterFrameTopRight\",\n\t\"TabardFramePortrait\",\n\t\"TargetFrameBackground\",\n\t\"TargetFrameDropDownButtonDisabledTexture\",\n\t\"TargetFrameDropDownButtonHighlightTexture\",\n\t\"TargetFrameDropDownButtonNormalTexture\",\n\t\"TargetFrameDropDownButtonPushedTexture\",\n\t\"TargetFrameDropDownLeft\",\n\t\"TargetFrameDropDownMiddle\",\n\t\"TargetFrameDropDownRight\",\n\t\"TargetFrameDropDownText\",\n\t\"TargetFrameFlash\",\n\t\"TargetFrameNameBackground\",\n\t\"TargetFrameNumericalThreatBG\",\n\t\"TargetFrameNumericalThreatValue\",\n\t\"TargetFramePortrait\",\n\t\"TargetFrameSpellBarBorder\",\n\t\"TargetFrameSpellBarBorderShield\",\n\t\"TargetFrameSpellBarFlash\",\n\t\"TargetFrameSpellBarIcon\",\n\t\"TargetFrameSpellBarSpark\",\n\t\"TargetFrameSpellBarText\",\n\t\"TargetFrameTextureFrameDeadText\",\n\t\"TargetFrameTextureFrameHealthBarText\",\n\t\"TargetFrameTextureFrameHighLevelTexture\",\n\t\"TargetFrameTextureFrameLeaderIcon\",\n\t\"TargetFrameTextureFrameLevelText\",\n\t\"TargetFrameTextureFrameManaBarText\",\n\t\"TargetFrameTextureFrameName\",\n\t\"TargetFrameTextureFramePVPIcon\",\n\t\"TargetFrameTextureFrameRaidTargetIcon\",\n\t\"TargetFrameTextureFrameTexture\",\n\t\"TargetFrameToTBackground\",\n\t\"TargetFrameToTDebuff1Border\",\n\t\"TargetFrameToTDebuff1Icon\",\n\t\"TargetFrameToTDebuff2Border\",\n\t\"TargetFrameToTDebuff2Icon\",\n\t\"TargetFrameToTDebuff3Border\",\n\t\"TargetFrameToTDebuff3Icon\",\n\t\"TargetFrameToTDebuff4Border\",\n\t\"TargetFrameToTDebuff4Icon\",\n\t\"TargetFrameToTPortrait\",\n\t\"TargetFrameToTTextureFrameDeadText\",\n\t\"TargetFrameToTTextureFrameName\",\n\t\"TargetFrameToTTextureFrameTexture\",\n\t\"TaxiMap\",\n\t\"TaxiMerchant\",\n\t\"TaxiPortrait\",\n\t\"TempEnchant1Border\",\n\t\"TempEnchant1Count\",\n\t\"TempEnchant1Duration\",\n\t\"TempEnchant1Icon\",\n\t\"TempEnchant2Border\",\n\t\"TempEnchant2Count\",\n\t\"TempEnchant2Duration\",\n\t\"TempEnchant2Icon\",\n\t\"TextStatusBarText\",\n\t\"TextStatusBarTextLarge\",\n\t\"TicketStatusFrameIcon\",\n\t\"TicketStatusTime\",\n\t\"TicketStatusTitleText\",\n\t\"TimeManagerAMPMDummyText\",\n\t\"TimeManagerAlarmAMPMDropDownButtonDisabledTexture\",\n\t\"TimeManagerAlarmAMPMDropDownButtonHighlightTexture\",\n\t\"TimeManagerAlarmAMPMDropDownButtonNormalTexture\",\n\t\"TimeManagerAlarmAMPMDropDownButtonPushedTexture\",\n\t\"TimeManagerAlarmAMPMDropDownLeft\",\n\t\"TimeManagerAlarmAMPMDropDownMiddle\",\n\t\"TimeManagerAlarmAMPMDropDownRight\",\n\t\"TimeManagerAlarmAMPMDropDownText\",\n\t\"TimeManagerAlarmEnabledButtonText\",\n\t\"TimeManagerAlarmFiredTexture\",\n\t\"TimeManagerAlarmHourDropDownButtonDisabledTexture\",\n\t\"TimeManagerAlarmHourDropDownButtonHighlightTexture\",\n\t\"TimeManagerAlarmHourDropDownButtonNormalTexture\",\n\t\"TimeManagerAlarmHourDropDownButtonPushedTexture\",\n\t\"TimeManagerAlarmHourDropDownLeft\",\n\t\"TimeManagerAlarmHourDropDownMiddle\",\n\t\"TimeManagerAlarmHourDropDownRight\",\n\t\"TimeManagerAlarmHourDropDownText\",\n\t\"TimeManagerAlarmMessageEditBoxLeft\",\n\t\"TimeManagerAlarmMessageEditBoxMiddle\",\n\t\"TimeManagerAlarmMessageEditBoxRight\",\n\t\"TimeManagerAlarmMessageLabel\",\n\t\"TimeManagerAlarmMinuteDropDownButtonDisabledTexture\",\n\t\"TimeManagerAlarmMinuteDropDownButtonHighlightTexture\",\n\t\"TimeManagerAlarmMinuteDropDownButtonNormalTexture\",\n\t\"TimeManagerAlarmMinuteDropDownButtonPushedTexture\",\n\t\"TimeManagerAlarmMinuteDropDownLeft\",\n\t\"TimeManagerAlarmMinuteDropDownMiddle\",\n\t\"TimeManagerAlarmMinuteDropDownRight\",\n\t\"TimeManagerAlarmMinuteDropDownText\",\n\t\"TimeManagerAlarmTimeLabel\",\n\t\"TimeManagerClockTicker\",\n\t\"TimeManagerFrameTicker\",\n\t\"TimeManagerGlobe\",\n\t\"TimeManagerLocalTimeCheckText\",\n\t\"TimeManagerMilitaryTimeCheckText\",\n\t\"TimeManagerStopwatchFrameBackground\",\n\t\"TimeManagerStopwatchFrameText\",\n\t\"TokenFrameCancelButtonText\",\n\t\"TokenFrameContainerButton10CategoryLeft\",\n\t\"TokenFrameContainerButton10CategoryRight\",\n\t\"TokenFrameContainerButton10Check\",\n\t\"TokenFrameContainerButton10Count\",\n\t\"TokenFrameContainerButton10ExpandIcon\",\n\t\"TokenFrameContainerButton10Highlight\",\n\t\"TokenFrameContainerButton10Icon\",\n\t\"TokenFrameContainerButton10Name\",\n\t\"TokenFrameContainerButton10Stripe\",\n\t\"TokenFrameContainerButton11CategoryLeft\",\n\t\"TokenFrameContainerButton11CategoryRight\",\n\t\"TokenFrameContainerButton11Check\",\n\t\"TokenFrameContainerButton11Count\",\n\t\"TokenFrameContainerButton11ExpandIcon\",\n\t\"TokenFrameContainerButton11Highlight\",\n\t\"TokenFrameContainerButton11Icon\",\n\t\"TokenFrameContainerButton11Name\",\n\t\"TokenFrameContainerButton11Stripe\",\n\t\"TokenFrameContainerButton12CategoryLeft\",\n\t\"TokenFrameContainerButton12CategoryRight\",\n\t\"TokenFrameContainerButton12Check\",\n\t\"TokenFrameContainerButton12Count\",\n\t\"TokenFrameContainerButton12ExpandIcon\",\n\t\"TokenFrameContainerButton12Highlight\",\n\t\"TokenFrameContainerButton12Icon\",\n\t\"TokenFrameContainerButton12Name\",\n\t\"TokenFrameContainerButton12Stripe\",\n\t\"TokenFrameContainerButton13CategoryLeft\",\n\t\"TokenFrameContainerButton13CategoryRight\",\n\t\"TokenFrameContainerButton13Check\",\n\t\"TokenFrameContainerButton13Count\",\n\t\"TokenFrameContainerButton13ExpandIcon\",\n\t\"TokenFrameContainerButton13Highlight\",\n\t\"TokenFrameContainerButton13Icon\",\n\t\"TokenFrameContainerButton13Name\",\n\t\"TokenFrameContainerButton13Stripe\",\n\t\"TokenFrameContainerButton14CategoryLeft\",\n\t\"TokenFrameContainerButton14CategoryRight\",\n\t\"TokenFrameContainerButton14Check\",\n\t\"TokenFrameContainerButton14Count\",\n\t\"TokenFrameContainerButton14ExpandIcon\",\n\t\"TokenFrameContainerButton14Highlight\",\n\t\"TokenFrameContainerButton14Icon\",\n\t\"TokenFrameContainerButton14Name\",\n\t\"TokenFrameContainerButton14Stripe\",\n\t\"TokenFrameContainerButton15CategoryLeft\",\n\t\"TokenFrameContainerButton15CategoryRight\",\n\t\"TokenFrameContainerButton15Check\",\n\t\"TokenFrameContainerButton15Count\",\n\t\"TokenFrameContainerButton15ExpandIcon\",\n\t\"TokenFrameContainerButton15Highlight\",\n\t\"TokenFrameContainerButton15Icon\",\n\t\"TokenFrameContainerButton15Name\",\n\t\"TokenFrameContainerButton15Stripe\",\n\t\"TokenFrameContainerButton16CategoryLeft\",\n\t\"TokenFrameContainerButton16CategoryRight\",\n\t\"TokenFrameContainerButton16Check\",\n\t\"TokenFrameContainerButton16Count\",\n\t\"TokenFrameContainerButton16ExpandIcon\",\n\t\"TokenFrameContainerButton16Highlight\",\n\t\"TokenFrameContainerButton16Icon\",\n\t\"TokenFrameContainerButton16Name\",\n\t\"TokenFrameContainerButton16Stripe\",\n\t\"TokenFrameContainerButton17CategoryLeft\",\n\t\"TokenFrameContainerButton17CategoryRight\",\n\t\"TokenFrameContainerButton17Check\",\n\t\"TokenFrameContainerButton17Count\",\n\t\"TokenFrameContainerButton17ExpandIcon\",\n\t\"TokenFrameContainerButton17Highlight\",\n\t\"TokenFrameContainerButton17Icon\",\n\t\"TokenFrameContainerButton17Name\",\n\t\"TokenFrameContainerButton17Stripe\",\n\t\"TokenFrameContainerButton18CategoryLeft\",\n\t\"TokenFrameContainerButton18CategoryRight\",\n\t\"TokenFrameContainerButton18Check\",\n\t\"TokenFrameContainerButton18Count\",\n\t\"TokenFrameContainerButton18ExpandIcon\",\n\t\"TokenFrameContainerButton18Highlight\",\n\t\"TokenFrameContainerButton18Icon\",\n\t\"TokenFrameContainerButton18Name\",\n\t\"TokenFrameContainerButton18Stripe\",\n\t\"TokenFrameContainerButton19CategoryLeft\",\n\t\"TokenFrameContainerButton19CategoryRight\",\n\t\"TokenFrameContainerButton19Check\",\n\t\"TokenFrameContainerButton19Count\",\n\t\"TokenFrameContainerButton19ExpandIcon\",\n\t\"TokenFrameContainerButton19Highlight\",\n\t\"TokenFrameContainerButton19Icon\",\n\t\"TokenFrameContainerButton19Name\",\n\t\"TokenFrameContainerButton19Stripe\",\n\t\"TokenFrameContainerButton1CategoryLeft\",\n\t\"TokenFrameContainerButton1CategoryRight\",\n\t\"TokenFrameContainerButton1Check\",\n\t\"TokenFrameContainerButton1Count\",\n\t\"TokenFrameContainerButton1ExpandIcon\",\n\t\"TokenFrameContainerButton1Highlight\",\n\t\"TokenFrameContainerButton1Icon\",\n\t\"TokenFrameContainerButton1Name\",\n\t\"TokenFrameContainerButton1Stripe\",\n\t\"TokenFrameContainerButton20CategoryLeft\",\n\t\"TokenFrameContainerButton20CategoryRight\",\n\t\"TokenFrameContainerButton20Check\",\n\t\"TokenFrameContainerButton20Count\",\n\t\"TokenFrameContainerButton20ExpandIcon\",\n\t\"TokenFrameContainerButton20Highlight\",\n\t\"TokenFrameContainerButton20Icon\",\n\t\"TokenFrameContainerButton20Name\",\n\t\"TokenFrameContainerButton20Stripe\",\n\t\"TokenFrameContainerButton21CategoryLeft\",\n\t\"TokenFrameContainerButton21CategoryRight\",\n\t\"TokenFrameContainerButton21Check\",\n\t\"TokenFrameContainerButton21Count\",\n\t\"TokenFrameContainerButton21ExpandIcon\",\n\t\"TokenFrameContainerButton21Highlight\",\n\t\"TokenFrameContainerButton21Icon\",\n\t\"TokenFrameContainerButton21Name\",\n\t\"TokenFrameContainerButton21Stripe\",\n\t\"TokenFrameContainerButton2CategoryLeft\",\n\t\"TokenFrameContainerButton2CategoryRight\",\n\t\"TokenFrameContainerButton2Check\",\n\t\"TokenFrameContainerButton2Count\",\n\t\"TokenFrameContainerButton2ExpandIcon\",\n\t\"TokenFrameContainerButton2Highlight\",\n\t\"TokenFrameContainerButton2Icon\",\n\t\"TokenFrameContainerButton2Name\",\n\t\"TokenFrameContainerButton2Stripe\",\n\t\"TokenFrameContainerButton3CategoryLeft\",\n\t\"TokenFrameContainerButton3CategoryRight\",\n\t\"TokenFrameContainerButton3Check\",\n\t\"TokenFrameContainerButton3Count\",\n\t\"TokenFrameContainerButton3ExpandIcon\",\n\t\"TokenFrameContainerButton3Highlight\",\n\t\"TokenFrameContainerButton3Icon\",\n\t\"TokenFrameContainerButton3Name\",\n\t\"TokenFrameContainerButton3Stripe\",\n\t\"TokenFrameContainerButton4CategoryLeft\",\n\t\"TokenFrameContainerButton4CategoryRight\",\n\t\"TokenFrameContainerButton4Check\",\n\t\"TokenFrameContainerButton4Count\",\n\t\"TokenFrameContainerButton4ExpandIcon\",\n\t\"TokenFrameContainerButton4Highlight\",\n\t\"TokenFrameContainerButton4Icon\",\n\t\"TokenFrameContainerButton4Name\",\n\t\"TokenFrameContainerButton4Stripe\",\n\t\"TokenFrameContainerButton5CategoryLeft\",\n\t\"TokenFrameContainerButton5CategoryRight\",\n\t\"TokenFrameContainerButton5Check\",\n\t\"TokenFrameContainerButton5Count\",\n\t\"TokenFrameContainerButton5ExpandIcon\",\n\t\"TokenFrameContainerButton5Highlight\",\n\t\"TokenFrameContainerButton5Icon\",\n\t\"TokenFrameContainerButton5Name\",\n\t\"TokenFrameContainerButton5Stripe\",\n\t\"TokenFrameContainerButton6CategoryLeft\",\n\t\"TokenFrameContainerButton6CategoryRight\",\n\t\"TokenFrameContainerButton6Check\",\n\t\"TokenFrameContainerButton6Count\",\n\t\"TokenFrameContainerButton6ExpandIcon\",\n\t\"TokenFrameContainerButton6Highlight\",\n\t\"TokenFrameContainerButton6Icon\",\n\t\"TokenFrameContainerButton6Name\",\n\t\"TokenFrameContainerButton6Stripe\",\n\t\"TokenFrameContainerButton7CategoryLeft\",\n\t\"TokenFrameContainerButton7CategoryRight\",\n\t\"TokenFrameContainerButton7Check\",\n\t\"TokenFrameContainerButton7Count\",\n\t\"TokenFrameContainerButton7ExpandIcon\",\n\t\"TokenFrameContainerButton7Highlight\",\n\t\"TokenFrameContainerButton7Icon\",\n\t\"TokenFrameContainerButton7Name\",\n\t\"TokenFrameContainerButton7Stripe\",\n\t\"TokenFrameContainerButton8CategoryLeft\",\n\t\"TokenFrameContainerButton8CategoryRight\",\n\t\"TokenFrameContainerButton8Check\",\n\t\"TokenFrameContainerButton8Count\",\n\t\"TokenFrameContainerButton8ExpandIcon\",\n\t\"TokenFrameContainerButton8Highlight\",\n\t\"TokenFrameContainerButton8Icon\",\n\t\"TokenFrameContainerButton8Name\",\n\t\"TokenFrameContainerButton8Stripe\",\n\t\"TokenFrameContainerButton9CategoryLeft\",\n\t\"TokenFrameContainerButton9CategoryRight\",\n\t\"TokenFrameContainerButton9Check\",\n\t\"TokenFrameContainerButton9Count\",\n\t\"TokenFrameContainerButton9ExpandIcon\",\n\t\"TokenFrameContainerButton9Highlight\",\n\t\"TokenFrameContainerButton9Icon\",\n\t\"TokenFrameContainerButton9Name\",\n\t\"TokenFrameContainerButton9Stripe\",\n\t\"TokenFrameContainerScrollBarBG\",\n\t\"TokenFrameContainerScrollBarBottom\",\n\t\"TokenFrameContainerScrollBarMiddle\",\n\t\"TokenFrameContainerScrollBarThumbTexture\",\n\t\"TokenFrameContainerScrollBarTop\",\n\t\"TokenFrameMoneyFrameCopperButtonText\",\n\t\"TokenFrameMoneyFrameGoldButtonText\",\n\t\"TokenFrameMoneyFrameSilverButtonText\",\n\t\"TokenFramePopupBackpackCheckBoxText\",\n\t\"TokenFramePopupCorner\",\n\t\"TokenFramePopupInactiveCheckBoxText\",\n\t\"TokenFramePopupTitle\",\n\t\"Tooltip_Med\",\n\t\"Tooltip_Small\",\n\t\"TotemFrameTotem1Background\",\n\t\"TotemFrameTotem1Duration\",\n\t\"TotemFrameTotem1IconTexture\",\n\t\"TotemFrameTotem2Background\",\n\t\"TotemFrameTotem2Duration\",\n\t\"TotemFrameTotem2IconTexture\",\n\t\"TotemFrameTotem3Background\",\n\t\"TotemFrameTotem3Duration\",\n\t\"TotemFrameTotem3IconTexture\",\n\t\"TotemFrameTotem4Background\",\n\t\"TotemFrameTotem4Duration\",\n\t\"TotemFrameTotem4IconTexture\",\n\t\"TradeFramePlayerEnchantText\",\n\t\"TradeFramePlayerNameText\",\n\t\"TradeFramePlayerPortrait\",\n\t\"TradeFrameRecipientEnchantText\",\n\t\"TradeFrameRecipientNameText\",\n\t\"TradeFrameRecipientPortrait\",\n\t\"TradeHighlightPlayerBottom\",\n\t\"TradeHighlightPlayerEnchantBottom\",\n\t\"TradeHighlightPlayerEnchantMiddle\",\n\t\"TradeHighlightPlayerEnchantTop\",\n\t\"TradeHighlightPlayerMiddle\",\n\t\"TradeHighlightPlayerTop\",\n\t\"TradeHighlightRecipientBottom\",\n\t\"TradeHighlightRecipientEnchantBottom\",\n\t\"TradeHighlightRecipientEnchantMiddle\",\n\t\"TradeHighlightRecipientEnchantTop\",\n\t\"TradeHighlightRecipientMiddle\",\n\t\"TradeHighlightRecipientTop\",\n\t\"TradePlayerInputMoneyFrameCopperLeft\",\n\t\"TradePlayerInputMoneyFrameCopperMiddle\",\n\t\"TradePlayerInputMoneyFrameCopperRight\",\n\t\"TradePlayerInputMoneyFrameGoldLeft\",\n\t\"TradePlayerInputMoneyFrameGoldMiddle\",\n\t\"TradePlayerInputMoneyFrameGoldRight\",\n\t\"TradePlayerInputMoneyFrameSilverLeft\",\n\t\"TradePlayerInputMoneyFrameSilverMiddle\",\n\t\"TradePlayerInputMoneyFrameSilverRight\",\n\t\"TradePlayerItem1ItemButtonCount\",\n\t\"TradePlayerItem1ItemButtonIconTexture\",\n\t\"TradePlayerItem1ItemButtonNormalTexture\",\n\t\"TradePlayerItem1ItemButtonStock\",\n\t\"TradePlayerItem1Name\",\n\t\"TradePlayerItem1NameFrame\",\n\t\"TradePlayerItem1SlotTexture\",\n\t\"TradePlayerItem2ItemButtonCount\",\n\t\"TradePlayerItem2ItemButtonIconTexture\",\n\t\"TradePlayerItem2ItemButtonNormalTexture\",\n\t\"TradePlayerItem2ItemButtonStock\",\n\t\"TradePlayerItem2Name\",\n\t\"TradePlayerItem2NameFrame\",\n\t\"TradePlayerItem2SlotTexture\",\n\t\"TradePlayerItem3ItemButtonCount\",\n\t\"TradePlayerItem3ItemButtonIconTexture\",\n\t\"TradePlayerItem3ItemButtonNormalTexture\",\n\t\"TradePlayerItem3ItemButtonStock\",\n\t\"TradePlayerItem3Name\",\n\t\"TradePlayerItem3NameFrame\",\n\t\"TradePlayerItem3SlotTexture\",\n\t\"TradePlayerItem4ItemButtonCount\",\n\t\"TradePlayerItem4ItemButtonIconTexture\",\n\t\"TradePlayerItem4ItemButtonNormalTexture\",\n\t\"TradePlayerItem4ItemButtonStock\",\n\t\"TradePlayerItem4Name\",\n\t\"TradePlayerItem4NameFrame\",\n\t\"TradePlayerItem4SlotTexture\",\n\t\"TradePlayerItem5ItemButtonCount\",\n\t\"TradePlayerItem5ItemButtonIconTexture\",\n\t\"TradePlayerItem5ItemButtonNormalTexture\",\n\t\"TradePlayerItem5ItemButtonStock\",\n\t\"TradePlayerItem5Name\",\n\t\"TradePlayerItem5NameFrame\",\n\t\"TradePlayerItem5SlotTexture\",\n\t\"TradePlayerItem6ItemButtonCount\",\n\t\"TradePlayerItem6ItemButtonIconTexture\",\n\t\"TradePlayerItem6ItemButtonNormalTexture\",\n\t\"TradePlayerItem6ItemButtonStock\",\n\t\"TradePlayerItem6Name\",\n\t\"TradePlayerItem6NameFrame\",\n\t\"TradePlayerItem6SlotTexture\",\n\t\"TradePlayerItem7ItemButtonCount\",\n\t\"TradePlayerItem7ItemButtonIconTexture\",\n\t\"TradePlayerItem7ItemButtonNormalTexture\",\n\t\"TradePlayerItem7ItemButtonStock\",\n\t\"TradePlayerItem7Name\",\n\t\"TradePlayerItem7NameFrame\",\n\t\"TradePlayerItem7SlotTexture\",\n\t\"TradeRecipientItem1ItemButtonCount\",\n\t\"TradeRecipientItem1ItemButtonIconTexture\",\n\t\"TradeRecipientItem1ItemButtonNormalTexture\",\n\t\"TradeRecipientItem1ItemButtonStock\",\n\t\"TradeRecipientItem1Name\",\n\t\"TradeRecipientItem1NameFrame\",\n\t\"TradeRecipientItem1SlotTexture\",\n\t\"TradeRecipientItem2ItemButtonCount\",\n\t\"TradeRecipientItem2ItemButtonIconTexture\",\n\t\"TradeRecipientItem2ItemButtonNormalTexture\",\n\t\"TradeRecipientItem2ItemButtonStock\",\n\t\"TradeRecipientItem2Name\",\n\t\"TradeRecipientItem2NameFrame\",\n\t\"TradeRecipientItem2SlotTexture\",\n\t\"TradeRecipientItem3ItemButtonCount\",\n\t\"TradeRecipientItem3ItemButtonIconTexture\",\n\t\"TradeRecipientItem3ItemButtonNormalTexture\",\n\t\"TradeRecipientItem3ItemButtonStock\",\n\t\"TradeRecipientItem3Name\",\n\t\"TradeRecipientItem3NameFrame\",\n\t\"TradeRecipientItem3SlotTexture\",\n\t\"TradeRecipientItem4ItemButtonCount\",\n\t\"TradeRecipientItem4ItemButtonIconTexture\",\n\t\"TradeRecipientItem4ItemButtonNormalTexture\",\n\t\"TradeRecipientItem4ItemButtonStock\",\n\t\"TradeRecipientItem4Name\",\n\t\"TradeRecipientItem4NameFrame\",\n\t\"TradeRecipientItem4SlotTexture\",\n\t\"TradeRecipientItem5ItemButtonCount\",\n\t\"TradeRecipientItem5ItemButtonIconTexture\",\n\t\"TradeRecipientItem5ItemButtonNormalTexture\",\n\t\"TradeRecipientItem5ItemButtonStock\",\n\t\"TradeRecipientItem5Name\",\n\t\"TradeRecipientItem5NameFrame\",\n\t\"TradeRecipientItem5SlotTexture\",\n\t\"TradeRecipientItem6ItemButtonCount\",\n\t\"TradeRecipientItem6ItemButtonIconTexture\",\n\t\"TradeRecipientItem6ItemButtonNormalTexture\",\n\t\"TradeRecipientItem6ItemButtonStock\",\n\t\"TradeRecipientItem6Name\",\n\t\"TradeRecipientItem6NameFrame\",\n\t\"TradeRecipientItem6SlotTexture\",\n\t\"TradeRecipientItem7ItemButtonCount\",\n\t\"TradeRecipientItem7ItemButtonIconTexture\",\n\t\"TradeRecipientItem7ItemButtonNormalTexture\",\n\t\"TradeRecipientItem7ItemButtonStock\",\n\t\"TradeRecipientItem7Name\",\n\t\"TradeRecipientItem7NameFrame\",\n\t\"TradeRecipientItem7SlotTexture\",\n\t\"TradeRecipientMoneyFrameCopperButtonText\",\n\t\"TradeRecipientMoneyFrameGoldButtonText\",\n\t\"TradeRecipientMoneyFrameSilverButtonText\",\n\t\"TutorialFrameAlertButtonBadgeText\",\n\t\"TutorialFrameArrowCurveDownLeft\",\n\t\"TutorialFrameArrowCurveDownRight\",\n\t\"TutorialFrameArrowCurveLeftDown\",\n\t\"TutorialFrameArrowCurveLeftUp\",\n\t\"TutorialFrameArrowCurveRightDown\",\n\t\"TutorialFrameArrowCurveRightUp\",\n\t\"TutorialFrameArrowCurveUpLeft\",\n\t\"TutorialFrameArrowCurveUpRight\",\n\t\"TutorialFrameArrowDown\",\n\t\"TutorialFrameArrowLeft\",\n\t\"TutorialFrameArrowRight\",\n\t\"TutorialFrameArrowUp\",\n\t\"TutorialFrameBackground\",\n\t\"TutorialFrameBottom\",\n\t\"TutorialFrameCallOutPulser\",\n\t\"TutorialFrameImage1\",\n\t\"TutorialFrameImage2\",\n\t\"TutorialFrameImage3\",\n\t\"TutorialFrameKey1\",\n\t\"TutorialFrameKey2\",\n\t\"TutorialFrameKey3\",\n\t\"TutorialFrameKey4\",\n\t\"TutorialFrameKeyString1\",\n\t\"TutorialFrameKeyString2\",\n\t\"TutorialFrameKeyString3\",\n\t\"TutorialFrameKeyString4\",\n\t\"TutorialFrameLeft1\",\n\t\"TutorialFrameLeft10\",\n\t\"TutorialFrameLeft11\",\n\t\"TutorialFrameLeft12\",\n\t\"TutorialFrameLeft13\",\n\t\"TutorialFrameLeft14\",\n\t\"TutorialFrameLeft15\",\n\t\"TutorialFrameLeft16\",\n\t\"TutorialFrameLeft17\",\n\t\"TutorialFrameLeft18\",\n\t\"TutorialFrameLeft19\",\n\t\"TutorialFrameLeft2\",\n\t\"TutorialFrameLeft20\",\n\t\"TutorialFrameLeft21\",\n\t\"TutorialFrameLeft22\",\n\t\"TutorialFrameLeft23\",\n\t\"TutorialFrameLeft24\",\n\t\"TutorialFrameLeft25\",\n\t\"TutorialFrameLeft26\",\n\t\"TutorialFrameLeft27\",\n\t\"TutorialFrameLeft28\",\n\t\"TutorialFrameLeft29\",\n\t\"TutorialFrameLeft3\",\n\t\"TutorialFrameLeft30\",\n\t\"TutorialFrameLeft4\",\n\t\"TutorialFrameLeft5\",\n\t\"TutorialFrameLeft6\",\n\t\"TutorialFrameLeft7\",\n\t\"TutorialFrameLeft8\",\n\t\"TutorialFrameLeft9\",\n\t\"TutorialFrameMouseBothClick\",\n\t\"TutorialFrameMouseLeftClick\",\n\t\"TutorialFrameMouseRightClick\",\n\t\"TutorialFrameMouseWheel\",\n\t\"TutorialFrameRight1\",\n\t\"TutorialFrameRight10\",\n\t\"TutorialFrameRight11\",\n\t\"TutorialFrameRight12\",\n\t\"TutorialFrameRight13\",\n\t\"TutorialFrameRight14\",\n\t\"TutorialFrameRight15\",\n\t\"TutorialFrameRight16\",\n\t\"TutorialFrameRight17\",\n\t\"TutorialFrameRight18\",\n\t\"TutorialFrameRight19\",\n\t\"TutorialFrameRight2\",\n\t\"TutorialFrameRight20\",\n\t\"TutorialFrameRight21\",\n\t\"TutorialFrameRight22\",\n\t\"TutorialFrameRight23\",\n\t\"TutorialFrameRight24\",\n\t\"TutorialFrameRight25\",\n\t\"TutorialFrameRight26\",\n\t\"TutorialFrameRight27\",\n\t\"TutorialFrameRight28\",\n\t\"TutorialFrameRight29\",\n\t\"TutorialFrameRight3\",\n\t\"TutorialFrameRight30\",\n\t\"TutorialFrameRight4\",\n\t\"TutorialFrameRight5\",\n\t\"TutorialFrameRight6\",\n\t\"TutorialFrameRight7\",\n\t\"TutorialFrameRight8\",\n\t\"TutorialFrameRight9\",\n\t\"TutorialFrameText\",\n\t\"TutorialFrameTextScrollFrameScrollBarThumbTexture\",\n\t\"TutorialFrameTitle\",\n\t\"TutorialFrameTop\",\n\t\"UpperBlackBar\",\n\t\"VehicleMenuBarActionButton1Border\",\n\t\"VehicleMenuBarActionButton1Count\",\n\t\"VehicleMenuBarActionButton1Flash\",\n\t\"VehicleMenuBarActionButton1HotKey\",\n\t\"VehicleMenuBarActionButton1Icon\",\n\t\"VehicleMenuBarActionButton1Name\",\n\t\"VehicleMenuBarActionButton1NormalTexture\",\n\t\"VehicleMenuBarActionButton2Border\",\n\t\"VehicleMenuBarActionButton2Count\",\n\t\"VehicleMenuBarActionButton2Flash\",\n\t\"VehicleMenuBarActionButton2HotKey\",\n\t\"VehicleMenuBarActionButton2Icon\",\n\t\"VehicleMenuBarActionButton2Name\",\n\t\"VehicleMenuBarActionButton2NormalTexture\",\n\t\"VehicleMenuBarActionButton3Border\",\n\t\"VehicleMenuBarActionButton3Count\",\n\t\"VehicleMenuBarActionButton3Flash\",\n\t\"VehicleMenuBarActionButton3HotKey\",\n\t\"VehicleMenuBarActionButton3Icon\",\n\t\"VehicleMenuBarActionButton3Name\",\n\t\"VehicleMenuBarActionButton3NormalTexture\",\n\t\"VehicleMenuBarActionButton4Border\",\n\t\"VehicleMenuBarActionButton4Count\",\n\t\"VehicleMenuBarActionButton4Flash\",\n\t\"VehicleMenuBarActionButton4HotKey\",\n\t\"VehicleMenuBarActionButton4Icon\",\n\t\"VehicleMenuBarActionButton4Name\",\n\t\"VehicleMenuBarActionButton4NormalTexture\",\n\t\"VehicleMenuBarActionButton5Border\",\n\t\"VehicleMenuBarActionButton5Count\",\n\t\"VehicleMenuBarActionButton5Flash\",\n\t\"VehicleMenuBarActionButton5HotKey\",\n\t\"VehicleMenuBarActionButton5Icon\",\n\t\"VehicleMenuBarActionButton5Name\",\n\t\"VehicleMenuBarActionButton5NormalTexture\",\n\t\"VehicleMenuBarActionButton6Border\",\n\t\"VehicleMenuBarActionButton6Count\",\n\t\"VehicleMenuBarActionButton6Flash\",\n\t\"VehicleMenuBarActionButton6HotKey\",\n\t\"VehicleMenuBarActionButton6Icon\",\n\t\"VehicleMenuBarActionButton6Name\",\n\t\"VehicleMenuBarActionButton6NormalTexture\",\n\t\"VehicleMenuBarArtFrameARTWORK1\",\n\t\"VehicleMenuBarArtFrameARTWORK10\",\n\t\"VehicleMenuBarArtFrameARTWORK2\",\n\t\"VehicleMenuBarArtFrameARTWORK3\",\n\t\"VehicleMenuBarArtFrameARTWORK4\",\n\t\"VehicleMenuBarArtFrameARTWORK5\",\n\t\"VehicleMenuBarArtFrameARTWORK6\",\n\t\"VehicleMenuBarArtFrameARTWORK7\",\n\t\"VehicleMenuBarArtFrameARTWORK8\",\n\t\"VehicleMenuBarArtFrameARTWORK9\",\n\t\"VehicleMenuBarArtFrameBACKGROUND1\",\n\t\"VehicleMenuBarArtFrameBACKGROUND2\",\n\t\"VehicleMenuBarArtFrameBACKGROUND3\",\n\t\"VehicleMenuBarArtFrameBORDER1\",\n\t\"VehicleMenuBarArtFrameBORDER2\",\n\t\"VehicleMenuBarArtFrameBORDER3\",\n\t\"VehicleMenuBarArtFrameBORDER4\",\n\t\"VehicleMenuBarArtFrameBORDER5\",\n\t\"VehicleMenuBarArtFrameBORDER6\",\n\t\"VehicleMenuBarArtFrameBORDER7\",\n\t\"VehicleMenuBarArtFrameOVERLAY1\",\n\t\"VehicleMenuBarArtFrameOVERLAY2\",\n\t\"VehicleMenuBarArtFrameOVERLAY3\",\n\t\"VehicleMenuBarArtFrameOVERLAY4\",\n\t\"VehicleMenuBarHealthBarBackground\",\n\t\"VehicleMenuBarHealthBarOverlay\",\n\t\"VehicleMenuBarHealthBarText\",\n\t\"VehicleMenuBarPitchSliderBG\",\n\t\"VehicleMenuBarPitchSliderMarker\",\n\t\"VehicleMenuBarPitchSliderOverlayThing\",\n\t\"VehicleMenuBarPowerBarBackground\",\n\t\"VehicleMenuBarPowerBarOverlay\",\n\t\"VehicleMenuBarPowerBarText\",\n\t\"VehicleMenuBarStatusBarText\",\n\t\"VehicleSeatIndicatorBackgroundTexture\",\n\t\"VehicleSeatIndicatorDropDownButtonDisabledTexture\",\n\t\"VehicleSeatIndicatorDropDownButtonHighlightTexture\",\n\t\"VehicleSeatIndicatorDropDownButtonNormalTexture\",\n\t\"VehicleSeatIndicatorDropDownButtonPushedTexture\",\n\t\"VehicleSeatIndicatorDropDownLeft\",\n\t\"VehicleSeatIndicatorDropDownMiddle\",\n\t\"VehicleSeatIndicatorDropDownRight\",\n\t\"VehicleSeatIndicatorDropDownText\",\n\t\"VideoOptionsEffectsPanelClutterDensityHigh\",\n\t\"VideoOptionsEffectsPanelClutterDensityLow\",\n\t\"VideoOptionsEffectsPanelClutterDensityText\",\n\t\"VideoOptionsEffectsPanelClutterDensityThumb\",\n\t\"VideoOptionsEffectsPanelClutterRadiusHigh\",\n\t\"VideoOptionsEffectsPanelClutterRadiusLow\",\n\t\"VideoOptionsEffectsPanelClutterRadiusText\",\n\t\"VideoOptionsEffectsPanelClutterRadiusThumb\",\n\t\"VideoOptionsEffectsPanelDeathEffectText\",\n\t\"VideoOptionsEffectsPanelEnvironmentDetailHigh\",\n\t\"VideoOptionsEffectsPanelEnvironmentDetailLow\",\n\t\"VideoOptionsEffectsPanelEnvironmentDetailText\",\n\t\"VideoOptionsEffectsPanelEnvironmentDetailThumb\",\n\t\"VideoOptionsEffectsPanelFullScreenGlowText\",\n\t\"VideoOptionsEffectsPanelParticleDensityHigh\",\n\t\"VideoOptionsEffectsPanelParticleDensityLow\",\n\t\"VideoOptionsEffectsPanelParticleDensityText\",\n\t\"VideoOptionsEffectsPanelParticleDensityThumb\",\n\t\"VideoOptionsEffectsPanelPlayerTextureHigh\",\n\t\"VideoOptionsEffectsPanelPlayerTextureLow\",\n\t\"VideoOptionsEffectsPanelPlayerTextureText\",\n\t\"VideoOptionsEffectsPanelPlayerTextureThumb\",\n\t\"VideoOptionsEffectsPanelProjectedTexturesText\",\n\t\"VideoOptionsEffectsPanelQualityLabel\",\n\t\"VideoOptionsEffectsPanelQualitySliderCustom\",\n\t\"VideoOptionsEffectsPanelQualitySliderHigh\",\n\t\"VideoOptionsEffectsPanelQualitySliderLow\",\n\t\"VideoOptionsEffectsPanelQualitySliderText\",\n\t\"VideoOptionsEffectsPanelQualitySliderThumb\",\n\t\"VideoOptionsEffectsPanelQualitySubText\",\n\t\"VideoOptionsEffectsPanelQualityTitle\",\n\t\"VideoOptionsEffectsPanelShadersTitle\",\n\t\"VideoOptionsEffectsPanelShadowQualityHigh\",\n\t\"VideoOptionsEffectsPanelShadowQualityLow\",\n\t\"VideoOptionsEffectsPanelShadowQualityText\",\n\t\"VideoOptionsEffectsPanelShadowQualityThumb\",\n\t\"VideoOptionsEffectsPanelSpecularLightingText\",\n\t\"VideoOptionsEffectsPanelSubText\",\n\t\"VideoOptionsEffectsPanelTerrainDetailHigh\",\n\t\"VideoOptionsEffectsPanelTerrainDetailLow\",\n\t\"VideoOptionsEffectsPanelTerrainDetailText\",\n\t\"VideoOptionsEffectsPanelTerrainDetailThumb\",\n\t\"VideoOptionsEffectsPanelTextureFilteringHigh\",\n\t\"VideoOptionsEffectsPanelTextureFilteringLow\",\n\t\"VideoOptionsEffectsPanelTextureFilteringText\",\n\t\"VideoOptionsEffectsPanelTextureFilteringThumb\",\n\t\"VideoOptionsEffectsPanelTextureResolutionHigh\",\n\t\"VideoOptionsEffectsPanelTextureResolutionLow\",\n\t\"VideoOptionsEffectsPanelTextureResolutionText\",\n\t\"VideoOptionsEffectsPanelTextureResolutionThumb\",\n\t\"VideoOptionsEffectsPanelTitle\",\n\t\"VideoOptionsEffectsPanelViewDistanceHigh\",\n\t\"VideoOptionsEffectsPanelViewDistanceLow\",\n\t\"VideoOptionsEffectsPanelViewDistanceText\",\n\t\"VideoOptionsEffectsPanelViewDistanceThumb\",\n\t\"VideoOptionsEffectsPanelWeatherIntensityHigh\",\n\t\"VideoOptionsEffectsPanelWeatherIntensityLow\",\n\t\"VideoOptionsEffectsPanelWeatherIntensityText\",\n\t\"VideoOptionsEffectsPanelWeatherIntensityThumb\",\n\t\"VideoOptionsFrameApplyText\",\n\t\"VideoOptionsFrameCancelText\",\n\t\"VideoOptionsFrameCategoryFrameBottom\",\n\t\"VideoOptionsFrameCategoryFrameBottomLeft\",\n\t\"VideoOptionsFrameCategoryFrameBottomRight\",\n\t\"VideoOptionsFrameCategoryFrameButton10Text\",\n\t\"VideoOptionsFrameCategoryFrameButton10ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton10ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton10TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton11Text\",\n\t\"VideoOptionsFrameCategoryFrameButton11ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton11ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton11TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton12Text\",\n\t\"VideoOptionsFrameCategoryFrameButton12ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton12ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton12TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton13Text\",\n\t\"VideoOptionsFrameCategoryFrameButton13ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton13ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton13TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton14Text\",\n\t\"VideoOptionsFrameCategoryFrameButton14ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton14ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton14TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton15Text\",\n\t\"VideoOptionsFrameCategoryFrameButton15ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton15ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton15TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton16Text\",\n\t\"VideoOptionsFrameCategoryFrameButton16ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton16ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton16TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton17Text\",\n\t\"VideoOptionsFrameCategoryFrameButton17ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton17ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton17TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton18Text\",\n\t\"VideoOptionsFrameCategoryFrameButton18ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton18ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton18TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton19Text\",\n\t\"VideoOptionsFrameCategoryFrameButton19ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton19ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton19TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton1Text\",\n\t\"VideoOptionsFrameCategoryFrameButton1ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton1ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton1TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton20Text\",\n\t\"VideoOptionsFrameCategoryFrameButton20ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton20ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton20TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton21Text\",\n\t\"VideoOptionsFrameCategoryFrameButton21ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton21ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton21TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton22Text\",\n\t\"VideoOptionsFrameCategoryFrameButton22ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton22ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton22TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton23Text\",\n\t\"VideoOptionsFrameCategoryFrameButton23ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton23ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton23TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton2Text\",\n\t\"VideoOptionsFrameCategoryFrameButton2ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton2ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton2TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton3Text\",\n\t\"VideoOptionsFrameCategoryFrameButton3ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton3ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton3TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton4Text\",\n\t\"VideoOptionsFrameCategoryFrameButton4ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton4ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton4TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton5Text\",\n\t\"VideoOptionsFrameCategoryFrameButton5ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton5ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton5TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton6Text\",\n\t\"VideoOptionsFrameCategoryFrameButton6ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton6ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton6TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton7Text\",\n\t\"VideoOptionsFrameCategoryFrameButton7ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton7ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton7TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton8Text\",\n\t\"VideoOptionsFrameCategoryFrameButton8ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton8ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton8TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton9Text\",\n\t\"VideoOptionsFrameCategoryFrameButton9ToggleHighlightTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton9ToggleNormalTexture\",\n\t\"VideoOptionsFrameCategoryFrameButton9TogglePushedTexture\",\n\t\"VideoOptionsFrameCategoryFrameLeft\",\n\t\"VideoOptionsFrameCategoryFrameListScrollBarThumbTexture\",\n\t\"VideoOptionsFrameCategoryFrameRight\",\n\t\"VideoOptionsFrameCategoryFrameTop\",\n\t\"VideoOptionsFrameCategoryFrameTopLeft\",\n\t\"VideoOptionsFrameCategoryFrameTopRight\",\n\t\"VideoOptionsFrameHeader\",\n\t\"VideoOptionsFrameHeaderText\",\n\t\"VideoOptionsFrameOkayText\",\n\t\"VideoOptionsResolutionPanelBrightnessGrayScale\",\n\t\"VideoOptionsResolutionPanelBrightnessTitle\",\n\t\"VideoOptionsResolutionPanelDesktopGammaText\",\n\t\"VideoOptionsResolutionPanelDisableResizeText\",\n\t\"VideoOptionsResolutionPanelFixInputLagText\",\n\t\"VideoOptionsResolutionPanelGammaSliderHigh\",\n\t\"VideoOptionsResolutionPanelGammaSliderLow\",\n\t\"VideoOptionsResolutionPanelGammaSliderText\",\n\t\"VideoOptionsResolutionPanelGammaSliderThumb\",\n\t\"VideoOptionsResolutionPanelHardwareCursorText\",\n\t\"VideoOptionsResolutionPanelMaximizedText\",\n\t\"VideoOptionsResolutionPanelMultiSampleDropDownButtonDisabledTexture\",\n\t\"VideoOptionsResolutionPanelMultiSampleDropDownButtonHighlightTexture\",\n\t\"VideoOptionsResolutionPanelMultiSampleDropDownButtonNormalTexture\",\n\t\"VideoOptionsResolutionPanelMultiSampleDropDownButtonPushedTexture\",\n\t\"VideoOptionsResolutionPanelMultiSampleDropDownLabel\",\n\t\"VideoOptionsResolutionPanelMultiSampleDropDownLeft\",\n\t\"VideoOptionsResolutionPanelMultiSampleDropDownMiddle\",\n\t\"VideoOptionsResolutionPanelMultiSampleDropDownRight\",\n\t\"VideoOptionsResolutionPanelMultiSampleDropDownText\",\n\t\"VideoOptionsResolutionPanelRefreshDropDownButtonDisabledTexture\",\n\t\"VideoOptionsResolutionPanelRefreshDropDownButtonHighlightTexture\",\n\t\"VideoOptionsResolutionPanelRefreshDropDownButtonNormalTexture\",\n\t\"VideoOptionsResolutionPanelRefreshDropDownButtonPushedTexture\",\n\t\"VideoOptionsResolutionPanelRefreshDropDownLabel\",\n\t\"VideoOptionsResolutionPanelRefreshDropDownLeft\",\n\t\"VideoOptionsResolutionPanelRefreshDropDownMiddle\",\n\t\"VideoOptionsResolutionPanelRefreshDropDownRight\",\n\t\"VideoOptionsResolutionPanelRefreshDropDownText\",\n\t\"VideoOptionsResolutionPanelResolutionDropDownButtonDisabledTexture\",\n\t\"VideoOptionsResolutionPanelResolutionDropDownButtonHighlightTexture\",\n\t\"VideoOptionsResolutionPanelResolutionDropDownButtonNormalTexture\",\n\t\"VideoOptionsResolutionPanelResolutionDropDownButtonPushedTexture\",\n\t\"VideoOptionsResolutionPanelResolutionDropDownLabel\",\n\t\"VideoOptionsResolutionPanelResolutionDropDownLeft\",\n\t\"VideoOptionsResolutionPanelResolutionDropDownMiddle\",\n\t\"VideoOptionsResolutionPanelResolutionDropDownRight\",\n\t\"VideoOptionsResolutionPanelResolutionDropDownText\",\n\t\"VideoOptionsResolutionPanelSubText\",\n\t\"VideoOptionsResolutionPanelTitle\",\n\t\"VideoOptionsResolutionPanelTripleBufferText\",\n\t\"VideoOptionsResolutionPanelUIScaleSliderHigh\",\n\t\"VideoOptionsResolutionPanelUIScaleSliderLow\",\n\t\"VideoOptionsResolutionPanelUIScaleSliderText\",\n\t\"VideoOptionsResolutionPanelUIScaleSliderThumb\",\n\t\"VideoOptionsResolutionPanelUseUIScaleText\",\n\t\"VideoOptionsResolutionPanelVSyncText\",\n\t\"VideoOptionsResolutionPanelWindowedText\",\n\t\"VideoOptionsStereoPanelConvergenceHigh\",\n\t\"VideoOptionsStereoPanelConvergenceLow\",\n\t\"VideoOptionsStereoPanelConvergenceText\",\n\t\"VideoOptionsStereoPanelConvergenceThumb\",\n\t\"VideoOptionsStereoPanelEnabledText\",\n\t\"VideoOptionsStereoPanelEyeSeparationHigh\",\n\t\"VideoOptionsStereoPanelEyeSeparationLow\",\n\t\"VideoOptionsStereoPanelEyeSeparationText\",\n\t\"VideoOptionsStereoPanelEyeSeparationThumb\",\n\t\"VideoOptionsStereoPanelHardwareCursorText\",\n\t\"VideoOptionsStereoPanelSubText\",\n\t\"VideoOptionsStereoPanelTitle\",\n\t\"VoiceChatShine\",\n\t\"VoiceChatTalkersButton1Text\",\n\t\"VoiceMacroMenuButton10ShortcutText\",\n\t\"VoiceMacroMenuButton11ShortcutText\",\n\t\"VoiceMacroMenuButton12ShortcutText\",\n\t\"VoiceMacroMenuButton13ShortcutText\",\n\t\"VoiceMacroMenuButton14ShortcutText\",\n\t\"VoiceMacroMenuButton15ShortcutText\",\n\t\"VoiceMacroMenuButton16ShortcutText\",\n\t\"VoiceMacroMenuButton17ShortcutText\",\n\t\"VoiceMacroMenuButton18ShortcutText\",\n\t\"VoiceMacroMenuButton19ShortcutText\",\n\t\"VoiceMacroMenuButton1ShortcutText\",\n\t\"VoiceMacroMenuButton20ShortcutText\",\n\t\"VoiceMacroMenuButton21ShortcutText\",\n\t\"VoiceMacroMenuButton22ShortcutText\",\n\t\"VoiceMacroMenuButton23ShortcutText\",\n\t\"VoiceMacroMenuButton24ShortcutText\",\n\t\"VoiceMacroMenuButton25ShortcutText\",\n\t\"VoiceMacroMenuButton26ShortcutText\",\n\t\"VoiceMacroMenuButton27ShortcutText\",\n\t\"VoiceMacroMenuButton28ShortcutText\",\n\t\"VoiceMacroMenuButton29ShortcutText\",\n\t\"VoiceMacroMenuButton2ShortcutText\",\n\t\"VoiceMacroMenuButton30ShortcutText\",\n\t\"VoiceMacroMenuButton31ShortcutText\",\n\t\"VoiceMacroMenuButton32ShortcutText\",\n\t\"VoiceMacroMenuButton3ShortcutText\",\n\t\"VoiceMacroMenuButton4ShortcutText\",\n\t\"VoiceMacroMenuButton5ShortcutText\",\n\t\"VoiceMacroMenuButton6ShortcutText\",\n\t\"VoiceMacroMenuButton7ShortcutText\",\n\t\"VoiceMacroMenuButton8ShortcutText\",\n\t\"VoiceMacroMenuButton9ShortcutText\",\n\t\"WatchFrameDropDownButtonDisabledTexture\",\n\t\"WatchFrameDropDownButtonHighlightTexture\",\n\t\"WatchFrameDropDownButtonNormalTexture\",\n\t\"WatchFrameDropDownButtonPushedTexture\",\n\t\"WatchFrameDropDownLeft\",\n\t\"WatchFrameDropDownMiddle\",\n\t\"WatchFrameDropDownRight\",\n\t\"WatchFrameDropDownText\",\n\t\"WatchFrameHeaderDropDownButtonDisabledTexture\",\n\t\"WatchFrameHeaderDropDownButtonHighlightTexture\",\n\t\"WatchFrameHeaderDropDownButtonNormalTexture\",\n\t\"WatchFrameHeaderDropDownButtonPushedTexture\",\n\t\"WatchFrameHeaderDropDownLeft\",\n\t\"WatchFrameHeaderDropDownMiddle\",\n\t\"WatchFrameHeaderDropDownRight\",\n\t\"WatchFrameHeaderDropDownText\",\n\t\"WatchFrameLine1Border\",\n\t\"WatchFrameLine1Dash\",\n\t\"WatchFrameLine1Icon\",\n\t\"WatchFrameLine1Text\",\n\t\"WatchFrameTitle\",\n\t\"WhoFrameAddFriendButtonText\",\n\t\"WhoFrameButton10Class\",\n\t\"WhoFrameButton10Level\",\n\t\"WhoFrameButton10Name\",\n\t\"WhoFrameButton10Variable\",\n\t\"WhoFrameButton11Class\",\n\t\"WhoFrameButton11Level\",\n\t\"WhoFrameButton11Name\",\n\t\"WhoFrameButton11Variable\",\n\t\"WhoFrameButton12Class\",\n\t\"WhoFrameButton12Level\",\n\t\"WhoFrameButton12Name\",\n\t\"WhoFrameButton12Variable\",\n\t\"WhoFrameButton13Class\",\n\t\"WhoFrameButton13Level\",\n\t\"WhoFrameButton13Name\",\n\t\"WhoFrameButton13Variable\",\n\t\"WhoFrameButton14Class\",\n\t\"WhoFrameButton14Level\",\n\t\"WhoFrameButton14Name\",\n\t\"WhoFrameButton14Variable\",\n\t\"WhoFrameButton15Class\",\n\t\"WhoFrameButton15Level\",\n\t\"WhoFrameButton15Name\",\n\t\"WhoFrameButton15Variable\",\n\t\"WhoFrameButton16Class\",\n\t\"WhoFrameButton16Level\",\n\t\"WhoFrameButton16Name\",\n\t\"WhoFrameButton16Variable\",\n\t\"WhoFrameButton17Class\",\n\t\"WhoFrameButton17Level\",\n\t\"WhoFrameButton17Name\",\n\t\"WhoFrameButton17Variable\",\n\t\"WhoFrameButton1Class\",\n\t\"WhoFrameButton1Level\",\n\t\"WhoFrameButton1Name\",\n\t\"WhoFrameButton1Variable\",\n\t\"WhoFrameButton2Class\",\n\t\"WhoFrameButton2Level\",\n\t\"WhoFrameButton2Name\",\n\t\"WhoFrameButton2Variable\",\n\t\"WhoFrameButton3Class\",\n\t\"WhoFrameButton3Level\",\n\t\"WhoFrameButton3Name\",\n\t\"WhoFrameButton3Variable\",\n\t\"WhoFrameButton4Class\",\n\t\"WhoFrameButton4Level\",\n\t\"WhoFrameButton4Name\",\n\t\"WhoFrameButton4Variable\",\n\t\"WhoFrameButton5Class\",\n\t\"WhoFrameButton5Level\",\n\t\"WhoFrameButton5Name\",\n\t\"WhoFrameButton5Variable\",\n\t\"WhoFrameButton6Class\",\n\t\"WhoFrameButton6Level\",\n\t\"WhoFrameButton6Name\",\n\t\"WhoFrameButton6Variable\",\n\t\"WhoFrameButton7Class\",\n\t\"WhoFrameButton7Level\",\n\t\"WhoFrameButton7Name\",\n\t\"WhoFrameButton7Variable\",\n\t\"WhoFrameButton8Class\",\n\t\"WhoFrameButton8Level\",\n\t\"WhoFrameButton8Name\",\n\t\"WhoFrameButton8Variable\",\n\t\"WhoFrameButton9Class\",\n\t\"WhoFrameButton9Level\",\n\t\"WhoFrameButton9Name\",\n\t\"WhoFrameButton9Variable\",\n\t\"WhoFrameColumnHeader1HighlightTexture\",\n\t\"WhoFrameColumnHeader1Left\",\n\t\"WhoFrameColumnHeader1Middle\",\n\t\"WhoFrameColumnHeader1Right\",\n\t\"WhoFrameColumnHeader2HighlightTexture\",\n\t\"WhoFrameColumnHeader2Left\",\n\t\"WhoFrameColumnHeader2Middle\",\n\t\"WhoFrameColumnHeader2Right\",\n\t\"WhoFrameColumnHeader3HighlightTexture\",\n\t\"WhoFrameColumnHeader3Left\",\n\t\"WhoFrameColumnHeader3Middle\",\n\t\"WhoFrameColumnHeader3Right\",\n\t\"WhoFrameColumnHeader4HighlightTexture\",\n\t\"WhoFrameColumnHeader4Left\",\n\t\"WhoFrameColumnHeader4Middle\",\n\t\"WhoFrameColumnHeader4Right\",\n\t\"WhoFrameDropDownButtonDisabledTexture\",\n\t\"WhoFrameDropDownButtonHighlightTexture\",\n\t\"WhoFrameDropDownButtonNormalTexture\",\n\t\"WhoFrameDropDownButtonPushedTexture\",\n\t\"WhoFrameDropDownHighlightTexture\",\n\t\"WhoFrameDropDownLeft\",\n\t\"WhoFrameDropDownMiddle\",\n\t\"WhoFrameDropDownRight\",\n\t\"WhoFrameDropDownText\",\n\t\"WhoFrameGroupInviteButtonText\",\n\t\"WhoFrameTotals\",\n\t\"WhoFrameWhoButtonText\",\n\t\"WhoListScrollFrameScrollBarThumbTexture\",\n\t\"WorldMapBlobFrameTexture\",\n\t\"WorldMapCompareTooltip1TextLeft1\",\n\t\"WorldMapCompareTooltip1TextLeft2\",\n\t\"WorldMapCompareTooltip1TextLeft3\",\n\t\"WorldMapCompareTooltip1TextLeft4\",\n\t\"WorldMapCompareTooltip1TextRight1\",\n\t\"WorldMapCompareTooltip1TextRight2\",\n\t\"WorldMapCompareTooltip1TextRight3\",\n\t\"WorldMapCompareTooltip1TextRight4\",\n\t\"WorldMapCompareTooltip1Texture1\",\n\t\"WorldMapCompareTooltip1Texture2\",\n\t\"WorldMapCompareTooltip1Texture3\",\n\t\"WorldMapCompareTooltip2TextLeft1\",\n\t\"WorldMapCompareTooltip2TextLeft2\",\n\t\"WorldMapCompareTooltip2TextLeft3\",\n\t\"WorldMapCompareTooltip2TextLeft4\",\n\t\"WorldMapCompareTooltip2TextRight1\",\n\t\"WorldMapCompareTooltip2TextRight2\",\n\t\"WorldMapCompareTooltip2TextRight3\",\n\t\"WorldMapCompareTooltip2TextRight4\",\n\t\"WorldMapCompareTooltip2Texture1\",\n\t\"WorldMapCompareTooltip2Texture2\",\n\t\"WorldMapCompareTooltip2Texture3\",\n\t\"WorldMapCompareTooltip3TextLeft1\",\n\t\"WorldMapCompareTooltip3TextLeft2\",\n\t\"WorldMapCompareTooltip3TextLeft3\",\n\t\"WorldMapCompareTooltip3TextLeft4\",\n\t\"WorldMapCompareTooltip3TextRight1\",\n\t\"WorldMapCompareTooltip3TextRight2\",\n\t\"WorldMapCompareTooltip3TextRight3\",\n\t\"WorldMapCompareTooltip3TextRight4\",\n\t\"WorldMapCompareTooltip3Texture1\",\n\t\"WorldMapCompareTooltip3Texture2\",\n\t\"WorldMapCompareTooltip3Texture3\",\n\t\"WorldMapContinentDropDownButtonDisabledTexture\",\n\t\"WorldMapContinentDropDownButtonHighlightTexture\",\n\t\"WorldMapContinentDropDownButtonNormalTexture\",\n\t\"WorldMapContinentDropDownButtonPushedTexture\",\n\t\"WorldMapContinentDropDownLeft\",\n\t\"WorldMapContinentDropDownMiddle\",\n\t\"WorldMapContinentDropDownRight\",\n\t\"WorldMapContinentDropDownText\",\n\t\"WorldMapDetailTile1\",\n\t\"WorldMapDetailTile10\",\n\t\"WorldMapDetailTile11\",\n\t\"WorldMapDetailTile12\",\n\t\"WorldMapDetailTile2\",\n\t\"WorldMapDetailTile3\",\n\t\"WorldMapDetailTile4\",\n\t\"WorldMapDetailTile5\",\n\t\"WorldMapDetailTile6\",\n\t\"WorldMapDetailTile7\",\n\t\"WorldMapDetailTile8\",\n\t\"WorldMapDetailTile9\",\n\t\"WorldMapFlag1Texture\",\n\t\"WorldMapFlag2Texture\",\n\t\"WorldMapFrameAreaDescription\",\n\t\"WorldMapFrameAreaLabel\",\n\t\"WorldMapFrameMiniBorderLeft\",\n\t\"WorldMapFrameMiniBorderRight\",\n\t\"WorldMapFrameTexture1\",\n\t\"WorldMapFrameTexture10\",\n\t\"WorldMapFrameTexture11\",\n\t\"WorldMapFrameTexture12\",\n\t\"WorldMapFrameTexture13\",\n\t\"WorldMapFrameTexture14\",\n\t\"WorldMapFrameTexture15\",\n\t\"WorldMapFrameTexture16\",\n\t\"WorldMapFrameTexture17\",\n\t\"WorldMapFrameTexture18\",\n\t\"WorldMapFrameTexture2\",\n\t\"WorldMapFrameTexture3\",\n\t\"WorldMapFrameTexture4\",\n\t\"WorldMapFrameTexture5\",\n\t\"WorldMapFrameTexture6\",\n\t\"WorldMapFrameTexture7\",\n\t\"WorldMapFrameTexture8\",\n\t\"WorldMapFrameTexture9\",\n\t\"WorldMapFrameTitle\",\n\t\"WorldMapHighlight\",\n\t\"WorldMapLevelDropDownButtonDisabledTexture\",\n\t\"WorldMapLevelDropDownButtonHighlightTexture\",\n\t\"WorldMapLevelDropDownButtonNormalTexture\",\n\t\"WorldMapLevelDropDownButtonPushedTexture\",\n\t\"WorldMapLevelDropDownLeft\",\n\t\"WorldMapLevelDropDownMiddle\",\n\t\"WorldMapLevelDropDownRight\",\n\t\"WorldMapLevelDropDownText\",\n\t\"WorldMapParty1Icon\",\n\t\"WorldMapParty2Icon\",\n\t\"WorldMapParty3Icon\",\n\t\"WorldMapParty4Icon\",\n\t\"WorldMapQuestDetailScrollFrameScrollBarThumbTexture\",\n\t\"WorldMapQuestDetailScrollFrameTrack\",\n\t\"WorldMapQuestFrame0Check\",\n\t\"WorldMapQuestFrame0Dashes\",\n\t\"WorldMapQuestFrame0Objectives\",\n\t\"WorldMapQuestFrame0Title\",\n\t\"WorldMapQuestHighlightBar\",\n\t\"WorldMapQuestRewardScrollFrameScrollBarThumbTexture\",\n\t\"WorldMapQuestRewardScrollFrameTrack\",\n\t\"WorldMapQuestScrollFrameScrollBarThumbTexture\",\n\t\"WorldMapQuestSelectBar\",\n\t\"WorldMapQuestShowObjectivesText\",\n\t\"WorldMapRaid10Icon\",\n\t\"WorldMapRaid11Icon\",\n\t\"WorldMapRaid12Icon\",\n\t\"WorldMapRaid13Icon\",\n\t\"WorldMapRaid14Icon\",\n\t\"WorldMapRaid15Icon\",\n\t\"WorldMapRaid16Icon\",\n\t\"WorldMapRaid17Icon\",\n\t\"WorldMapRaid18Icon\",\n\t\"WorldMapRaid19Icon\",\n\t\"WorldMapRaid1Icon\",\n\t\"WorldMapRaid20Icon\",\n\t\"WorldMapRaid21Icon\",\n\t\"WorldMapRaid22Icon\",\n\t\"WorldMapRaid23Icon\",\n\t\"WorldMapRaid24Icon\",\n\t\"WorldMapRaid25Icon\",\n\t\"WorldMapRaid26Icon\",\n\t\"WorldMapRaid27Icon\",\n\t\"WorldMapRaid28Icon\",\n\t\"WorldMapRaid29Icon\",\n\t\"WorldMapRaid2Icon\",\n\t\"WorldMapRaid30Icon\",\n\t\"WorldMapRaid31Icon\",\n\t\"WorldMapRaid32Icon\",\n\t\"WorldMapRaid33Icon\",\n\t\"WorldMapRaid34Icon\",\n\t\"WorldMapRaid35Icon\",\n\t\"WorldMapRaid36Icon\",\n\t\"WorldMapRaid37Icon\",\n\t\"WorldMapRaid38Icon\",\n\t\"WorldMapRaid39Icon\",\n\t\"WorldMapRaid3Icon\",\n\t\"WorldMapRaid40Icon\",\n\t\"WorldMapRaid4Icon\",\n\t\"WorldMapRaid5Icon\",\n\t\"WorldMapRaid6Icon\",\n\t\"WorldMapRaid7Icon\",\n\t\"WorldMapRaid8Icon\",\n\t\"WorldMapRaid9Icon\",\n\t\"WorldMapTextFont\",\n\t\"WorldMapTitleDropDownButtonDisabledTexture\",\n\t\"WorldMapTitleDropDownButtonHighlightTexture\",\n\t\"WorldMapTitleDropDownButtonNormalTexture\",\n\t\"WorldMapTitleDropDownButtonPushedTexture\",\n\t\"WorldMapTitleDropDownLeft\",\n\t\"WorldMapTitleDropDownMiddle\",\n\t\"WorldMapTitleDropDownRight\",\n\t\"WorldMapTitleDropDownText\",\n\t\"WorldMapTooltipStatusBarTexture\",\n\t\"WorldMapTooltipTextLeft1\",\n\t\"WorldMapTooltipTextLeft2\",\n\t\"WorldMapTooltipTextLeft3\",\n\t\"WorldMapTooltipTextLeft4\",\n\t\"WorldMapTooltipTextLeft5\",\n\t\"WorldMapTooltipTextLeft6\",\n\t\"WorldMapTooltipTextLeft7\",\n\t\"WorldMapTooltipTextLeft8\",\n\t\"WorldMapTooltipTextRight1\",\n\t\"WorldMapTooltipTextRight2\",\n\t\"WorldMapTooltipTextRight3\",\n\t\"WorldMapTooltipTextRight4\",\n\t\"WorldMapTooltipTextRight5\",\n\t\"WorldMapTooltipTextRight6\",\n\t\"WorldMapTooltipTextRight7\",\n\t\"WorldMapTooltipTextRight8\",\n\t\"WorldMapTooltipTexture1\",\n\t\"WorldMapTooltipTexture10\",\n\t\"WorldMapTooltipTexture2\",\n\t\"WorldMapTooltipTexture3\",\n\t\"WorldMapTooltipTexture4\",\n\t\"WorldMapTooltipTexture5\",\n\t\"WorldMapTooltipTexture6\",\n\t\"WorldMapTooltipTexture7\",\n\t\"WorldMapTooltipTexture8\",\n\t\"WorldMapTooltipTexture9\",\n\t\"WorldMapTrackQuestText\",\n\t\"WorldMapUnitDropDownButtonDisabledTexture\",\n\t\"WorldMapUnitDropDownButtonHighlightTexture\",\n\t\"WorldMapUnitDropDownButtonNormalTexture\",\n\t\"WorldMapUnitDropDownButtonPushedTexture\",\n\t\"WorldMapUnitDropDownLeft\",\n\t\"WorldMapUnitDropDownMiddle\",\n\t\"WorldMapUnitDropDownRight\",\n\t\"WorldMapUnitDropDownText\",\n\t\"WorldMapZoneDropDownButtonDisabledTexture\",\n\t\"WorldMapZoneDropDownButtonHighlightTexture\",\n\t\"WorldMapZoneDropDownButtonNormalTexture\",\n\t\"WorldMapZoneDropDownButtonPushedTexture\",\n\t\"WorldMapZoneDropDownLeft\",\n\t\"WorldMapZoneDropDownMiddle\",\n\t\"WorldMapZoneDropDownRight\",\n\t\"WorldMapZoneDropDownText\",\n\t\"WorldMapZoneInfo\",\n\t\"WorldMapZoneMinimapDropDownButtonDisabledTexture\",\n\t\"WorldMapZoneMinimapDropDownButtonHighlightTexture\",\n\t\"WorldMapZoneMinimapDropDownButtonNormalTexture\",\n\t\"WorldMapZoneMinimapDropDownButtonPushedTexture\",\n\t\"WorldMapZoneMinimapDropDownLeft\",\n\t\"WorldMapZoneMinimapDropDownMiddle\",\n\t\"WorldMapZoneMinimapDropDownRight\",\n\t\"WorldMapZoneMinimapDropDownText\",\n\t\"WorldMapZoomOutButtonText\",\n\t\"WorldStateScoreBattlegroundRunTime\",\n\t\"WorldStateScoreButton10ClassButtonIcon\",\n\t\"WorldStateScoreButton10Column1Icon\",\n\t\"WorldStateScoreButton10Column1Text\",\n\t\"WorldStateScoreButton10Column2Icon\",\n\t\"WorldStateScoreButton10Column2Text\",\n\t\"WorldStateScoreButton10Column3Icon\",\n\t\"WorldStateScoreButton10Column3Text\",\n\t\"WorldStateScoreButton10Column4Icon\",\n\t\"WorldStateScoreButton10Column4Text\",\n\t\"WorldStateScoreButton10Column5Icon\",\n\t\"WorldStateScoreButton10Column5Text\",\n\t\"WorldStateScoreButton10Column6Icon\",\n\t\"WorldStateScoreButton10Column6Text\",\n\t\"WorldStateScoreButton10Column7Icon\",\n\t\"WorldStateScoreButton10Column7Text\",\n\t\"WorldStateScoreButton10Damage\",\n\t\"WorldStateScoreButton10Deaths\",\n\t\"WorldStateScoreButton10FactionLeft\",\n\t\"WorldStateScoreButton10FactionRight\",\n\t\"WorldStateScoreButton10Healing\",\n\t\"WorldStateScoreButton10HonorGained\",\n\t\"WorldStateScoreButton10HonorableKills\",\n\t\"WorldStateScoreButton10KillingBlows\",\n\t\"WorldStateScoreButton10NameText\",\n\t\"WorldStateScoreButton10Team\",\n\t\"WorldStateScoreButton10TeamSkill\",\n\t\"WorldStateScoreButton11ClassButtonIcon\",\n\t\"WorldStateScoreButton11Column1Icon\",\n\t\"WorldStateScoreButton11Column1Text\",\n\t\"WorldStateScoreButton11Column2Icon\",\n\t\"WorldStateScoreButton11Column2Text\",\n\t\"WorldStateScoreButton11Column3Icon\",\n\t\"WorldStateScoreButton11Column3Text\",\n\t\"WorldStateScoreButton11Column4Icon\",\n\t\"WorldStateScoreButton11Column4Text\",\n\t\"WorldStateScoreButton11Column5Icon\",\n\t\"WorldStateScoreButton11Column5Text\",\n\t\"WorldStateScoreButton11Column6Icon\",\n\t\"WorldStateScoreButton11Column6Text\",\n\t\"WorldStateScoreButton11Column7Icon\",\n\t\"WorldStateScoreButton11Column7Text\",\n\t\"WorldStateScoreButton11Damage\",\n\t\"WorldStateScoreButton11Deaths\",\n\t\"WorldStateScoreButton11FactionLeft\",\n\t\"WorldStateScoreButton11FactionRight\",\n\t\"WorldStateScoreButton11Healing\",\n\t\"WorldStateScoreButton11HonorGained\",\n\t\"WorldStateScoreButton11HonorableKills\",\n\t\"WorldStateScoreButton11KillingBlows\",\n\t\"WorldStateScoreButton11NameText\",\n\t\"WorldStateScoreButton11Team\",\n\t\"WorldStateScoreButton11TeamSkill\",\n\t\"WorldStateScoreButton12ClassButtonIcon\",\n\t\"WorldStateScoreButton12Column1Icon\",\n\t\"WorldStateScoreButton12Column1Text\",\n\t\"WorldStateScoreButton12Column2Icon\",\n\t\"WorldStateScoreButton12Column2Text\",\n\t\"WorldStateScoreButton12Column3Icon\",\n\t\"WorldStateScoreButton12Column3Text\",\n\t\"WorldStateScoreButton12Column4Icon\",\n\t\"WorldStateScoreButton12Column4Text\",\n\t\"WorldStateScoreButton12Column5Icon\",\n\t\"WorldStateScoreButton12Column5Text\",\n\t\"WorldStateScoreButton12Column6Icon\",\n\t\"WorldStateScoreButton12Column6Text\",\n\t\"WorldStateScoreButton12Column7Icon\",\n\t\"WorldStateScoreButton12Column7Text\",\n\t\"WorldStateScoreButton12Damage\",\n\t\"WorldStateScoreButton12Deaths\",\n\t\"WorldStateScoreButton12FactionLeft\",\n\t\"WorldStateScoreButton12FactionRight\",\n\t\"WorldStateScoreButton12Healing\",\n\t\"WorldStateScoreButton12HonorGained\",\n\t\"WorldStateScoreButton12HonorableKills\",\n\t\"WorldStateScoreButton12KillingBlows\",\n\t\"WorldStateScoreButton12NameText\",\n\t\"WorldStateScoreButton12Team\",\n\t\"WorldStateScoreButton12TeamSkill\",\n\t\"WorldStateScoreButton13ClassButtonIcon\",\n\t\"WorldStateScoreButton13Column1Icon\",\n\t\"WorldStateScoreButton13Column1Text\",\n\t\"WorldStateScoreButton13Column2Icon\",\n\t\"WorldStateScoreButton13Column2Text\",\n\t\"WorldStateScoreButton13Column3Icon\",\n\t\"WorldStateScoreButton13Column3Text\",\n\t\"WorldStateScoreButton13Column4Icon\",\n\t\"WorldStateScoreButton13Column4Text\",\n\t\"WorldStateScoreButton13Column5Icon\",\n\t\"WorldStateScoreButton13Column5Text\",\n\t\"WorldStateScoreButton13Column6Icon\",\n\t\"WorldStateScoreButton13Column6Text\",\n\t\"WorldStateScoreButton13Column7Icon\",\n\t\"WorldStateScoreButton13Column7Text\",\n\t\"WorldStateScoreButton13Damage\",\n\t\"WorldStateScoreButton13Deaths\",\n\t\"WorldStateScoreButton13FactionLeft\",\n\t\"WorldStateScoreButton13FactionRight\",\n\t\"WorldStateScoreButton13Healing\",\n\t\"WorldStateScoreButton13HonorGained\",\n\t\"WorldStateScoreButton13HonorableKills\",\n\t\"WorldStateScoreButton13KillingBlows\",\n\t\"WorldStateScoreButton13NameText\",\n\t\"WorldStateScoreButton13Team\",\n\t\"WorldStateScoreButton13TeamSkill\",\n\t\"WorldStateScoreButton14ClassButtonIcon\",\n\t\"WorldStateScoreButton14Column1Icon\",\n\t\"WorldStateScoreButton14Column1Text\",\n\t\"WorldStateScoreButton14Column2Icon\",\n\t\"WorldStateScoreButton14Column2Text\",\n\t\"WorldStateScoreButton14Column3Icon\",\n\t\"WorldStateScoreButton14Column3Text\",\n\t\"WorldStateScoreButton14Column4Icon\",\n\t\"WorldStateScoreButton14Column4Text\",\n\t\"WorldStateScoreButton14Column5Icon\",\n\t\"WorldStateScoreButton14Column5Text\",\n\t\"WorldStateScoreButton14Column6Icon\",\n\t\"WorldStateScoreButton14Column6Text\",\n\t\"WorldStateScoreButton14Column7Icon\",\n\t\"WorldStateScoreButton14Column7Text\",\n\t\"WorldStateScoreButton14Damage\",\n\t\"WorldStateScoreButton14Deaths\",\n\t\"WorldStateScoreButton14FactionLeft\",\n\t\"WorldStateScoreButton14FactionRight\",\n\t\"WorldStateScoreButton14Healing\",\n\t\"WorldStateScoreButton14HonorGained\",\n\t\"WorldStateScoreButton14HonorableKills\",\n\t\"WorldStateScoreButton14KillingBlows\",\n\t\"WorldStateScoreButton14NameText\",\n\t\"WorldStateScoreButton14Team\",\n\t\"WorldStateScoreButton14TeamSkill\",\n\t\"WorldStateScoreButton15ClassButtonIcon\",\n\t\"WorldStateScoreButton15Column1Icon\",\n\t\"WorldStateScoreButton15Column1Text\",\n\t\"WorldStateScoreButton15Column2Icon\",\n\t\"WorldStateScoreButton15Column2Text\",\n\t\"WorldStateScoreButton15Column3Icon\",\n\t\"WorldStateScoreButton15Column3Text\",\n\t\"WorldStateScoreButton15Column4Icon\",\n\t\"WorldStateScoreButton15Column4Text\",\n\t\"WorldStateScoreButton15Column5Icon\",\n\t\"WorldStateScoreButton15Column5Text\",\n\t\"WorldStateScoreButton15Column6Icon\",\n\t\"WorldStateScoreButton15Column6Text\",\n\t\"WorldStateScoreButton15Column7Icon\",\n\t\"WorldStateScoreButton15Column7Text\",\n\t\"WorldStateScoreButton15Damage\",\n\t\"WorldStateScoreButton15Deaths\",\n\t\"WorldStateScoreButton15FactionLeft\",\n\t\"WorldStateScoreButton15FactionRight\",\n\t\"WorldStateScoreButton15Healing\",\n\t\"WorldStateScoreButton15HonorGained\",\n\t\"WorldStateScoreButton15HonorableKills\",\n\t\"WorldStateScoreButton15KillingBlows\",\n\t\"WorldStateScoreButton15NameText\",\n\t\"WorldStateScoreButton15Team\",\n\t\"WorldStateScoreButton15TeamSkill\",\n\t\"WorldStateScoreButton16ClassButtonIcon\",\n\t\"WorldStateScoreButton16Column1Icon\",\n\t\"WorldStateScoreButton16Column1Text\",\n\t\"WorldStateScoreButton16Column2Icon\",\n\t\"WorldStateScoreButton16Column2Text\",\n\t\"WorldStateScoreButton16Column3Icon\",\n\t\"WorldStateScoreButton16Column3Text\",\n\t\"WorldStateScoreButton16Column4Icon\",\n\t\"WorldStateScoreButton16Column4Text\",\n\t\"WorldStateScoreButton16Column5Icon\",\n\t\"WorldStateScoreButton16Column5Text\",\n\t\"WorldStateScoreButton16Column6Icon\",\n\t\"WorldStateScoreButton16Column6Text\",\n\t\"WorldStateScoreButton16Column7Icon\",\n\t\"WorldStateScoreButton16Column7Text\",\n\t\"WorldStateScoreButton16Damage\",\n\t\"WorldStateScoreButton16Deaths\",\n\t\"WorldStateScoreButton16FactionLeft\",\n\t\"WorldStateScoreButton16FactionRight\",\n\t\"WorldStateScoreButton16Healing\",\n\t\"WorldStateScoreButton16HonorGained\",\n\t\"WorldStateScoreButton16HonorableKills\",\n\t\"WorldStateScoreButton16KillingBlows\",\n\t\"WorldStateScoreButton16NameText\",\n\t\"WorldStateScoreButton16Team\",\n\t\"WorldStateScoreButton16TeamSkill\",\n\t\"WorldStateScoreButton17ClassButtonIcon\",\n\t\"WorldStateScoreButton17Column1Icon\",\n\t\"WorldStateScoreButton17Column1Text\",\n\t\"WorldStateScoreButton17Column2Icon\",\n\t\"WorldStateScoreButton17Column2Text\",\n\t\"WorldStateScoreButton17Column3Icon\",\n\t\"WorldStateScoreButton17Column3Text\",\n\t\"WorldStateScoreButton17Column4Icon\",\n\t\"WorldStateScoreButton17Column4Text\",\n\t\"WorldStateScoreButton17Column5Icon\",\n\t\"WorldStateScoreButton17Column5Text\",\n\t\"WorldStateScoreButton17Column6Icon\",\n\t\"WorldStateScoreButton17Column6Text\",\n\t\"WorldStateScoreButton17Column7Icon\",\n\t\"WorldStateScoreButton17Column7Text\",\n\t\"WorldStateScoreButton17Damage\",\n\t\"WorldStateScoreButton17Deaths\",\n\t\"WorldStateScoreButton17FactionLeft\",\n\t\"WorldStateScoreButton17FactionRight\",\n\t\"WorldStateScoreButton17Healing\",\n\t\"WorldStateScoreButton17HonorGained\",\n\t\"WorldStateScoreButton17HonorableKills\",\n\t\"WorldStateScoreButton17KillingBlows\",\n\t\"WorldStateScoreButton17NameText\",\n\t\"WorldStateScoreButton17Team\",\n\t\"WorldStateScoreButton17TeamSkill\",\n\t\"WorldStateScoreButton18ClassButtonIcon\",\n\t\"WorldStateScoreButton18Column1Icon\",\n\t\"WorldStateScoreButton18Column1Text\",\n\t\"WorldStateScoreButton18Column2Icon\",\n\t\"WorldStateScoreButton18Column2Text\",\n\t\"WorldStateScoreButton18Column3Icon\",\n\t\"WorldStateScoreButton18Column3Text\",\n\t\"WorldStateScoreButton18Column4Icon\",\n\t\"WorldStateScoreButton18Column4Text\",\n\t\"WorldStateScoreButton18Column5Icon\",\n\t\"WorldStateScoreButton18Column5Text\",\n\t\"WorldStateScoreButton18Column6Icon\",\n\t\"WorldStateScoreButton18Column6Text\",\n\t\"WorldStateScoreButton18Column7Icon\",\n\t\"WorldStateScoreButton18Column7Text\",\n\t\"WorldStateScoreButton18Damage\",\n\t\"WorldStateScoreButton18Deaths\",\n\t\"WorldStateScoreButton18FactionLeft\",\n\t\"WorldStateScoreButton18FactionRight\",\n\t\"WorldStateScoreButton18Healing\",\n\t\"WorldStateScoreButton18HonorGained\",\n\t\"WorldStateScoreButton18HonorableKills\",\n\t\"WorldStateScoreButton18KillingBlows\",\n\t\"WorldStateScoreButton18NameText\",\n\t\"WorldStateScoreButton18Team\",\n\t\"WorldStateScoreButton18TeamSkill\",\n\t\"WorldStateScoreButton19ClassButtonIcon\",\n\t\"WorldStateScoreButton19Column1Icon\",\n\t\"WorldStateScoreButton19Column1Text\",\n\t\"WorldStateScoreButton19Column2Icon\",\n\t\"WorldStateScoreButton19Column2Text\",\n\t\"WorldStateScoreButton19Column3Icon\",\n\t\"WorldStateScoreButton19Column3Text\",\n\t\"WorldStateScoreButton19Column4Icon\",\n\t\"WorldStateScoreButton19Column4Text\",\n\t\"WorldStateScoreButton19Column5Icon\",\n\t\"WorldStateScoreButton19Column5Text\",\n\t\"WorldStateScoreButton19Column6Icon\",\n\t\"WorldStateScoreButton19Column6Text\",\n\t\"WorldStateScoreButton19Column7Icon\",\n\t\"WorldStateScoreButton19Column7Text\",\n\t\"WorldStateScoreButton19Damage\",\n\t\"WorldStateScoreButton19Deaths\",\n\t\"WorldStateScoreButton19FactionLeft\",\n\t\"WorldStateScoreButton19FactionRight\",\n\t\"WorldStateScoreButton19Healing\",\n\t\"WorldStateScoreButton19HonorGained\",\n\t\"WorldStateScoreButton19HonorableKills\",\n\t\"WorldStateScoreButton19KillingBlows\",\n\t\"WorldStateScoreButton19NameText\",\n\t\"WorldStateScoreButton19Team\",\n\t\"WorldStateScoreButton19TeamSkill\",\n\t\"WorldStateScoreButton1ClassButtonIcon\",\n\t\"WorldStateScoreButton1Column1Icon\",\n\t\"WorldStateScoreButton1Column1Text\",\n\t\"WorldStateScoreButton1Column2Icon\",\n\t\"WorldStateScoreButton1Column2Text\",\n\t\"WorldStateScoreButton1Column3Icon\",\n\t\"WorldStateScoreButton1Column3Text\",\n\t\"WorldStateScoreButton1Column4Icon\",\n\t\"WorldStateScoreButton1Column4Text\",\n\t\"WorldStateScoreButton1Column5Icon\",\n\t\"WorldStateScoreButton1Column5Text\",\n\t\"WorldStateScoreButton1Column6Icon\",\n\t\"WorldStateScoreButton1Column6Text\",\n\t\"WorldStateScoreButton1Column7Icon\",\n\t\"WorldStateScoreButton1Column7Text\",\n\t\"WorldStateScoreButton1Damage\",\n\t\"WorldStateScoreButton1Deaths\",\n\t\"WorldStateScoreButton1FactionLeft\",\n\t\"WorldStateScoreButton1FactionRight\",\n\t\"WorldStateScoreButton1Healing\",\n\t\"WorldStateScoreButton1HonorGained\",\n\t\"WorldStateScoreButton1HonorableKills\",\n\t\"WorldStateScoreButton1KillingBlows\",\n\t\"WorldStateScoreButton1NameText\",\n\t\"WorldStateScoreButton1Team\",\n\t\"WorldStateScoreButton1TeamSkill\",\n\t\"WorldStateScoreButton20ClassButtonIcon\",\n\t\"WorldStateScoreButton20Column1Icon\",\n\t\"WorldStateScoreButton20Column1Text\",\n\t\"WorldStateScoreButton20Column2Icon\",\n\t\"WorldStateScoreButton20Column2Text\",\n\t\"WorldStateScoreButton20Column3Icon\",\n\t\"WorldStateScoreButton20Column3Text\",\n\t\"WorldStateScoreButton20Column4Icon\",\n\t\"WorldStateScoreButton20Column4Text\",\n\t\"WorldStateScoreButton20Column5Icon\",\n\t\"WorldStateScoreButton20Column5Text\",\n\t\"WorldStateScoreButton20Column6Icon\",\n\t\"WorldStateScoreButton20Column6Text\",\n\t\"WorldStateScoreButton20Column7Icon\",\n\t\"WorldStateScoreButton20Column7Text\",\n\t\"WorldStateScoreButton20Damage\",\n\t\"WorldStateScoreButton20Deaths\",\n\t\"WorldStateScoreButton20FactionLeft\",\n\t\"WorldStateScoreButton20FactionRight\",\n\t\"WorldStateScoreButton20Healing\",\n\t\"WorldStateScoreButton20HonorGained\",\n\t\"WorldStateScoreButton20HonorableKills\",\n\t\"WorldStateScoreButton20KillingBlows\",\n\t\"WorldStateScoreButton20NameText\",\n\t\"WorldStateScoreButton20Team\",\n\t\"WorldStateScoreButton20TeamSkill\",\n\t\"WorldStateScoreButton2ClassButtonIcon\",\n\t\"WorldStateScoreButton2Column1Icon\",\n\t\"WorldStateScoreButton2Column1Text\",\n\t\"WorldStateScoreButton2Column2Icon\",\n\t\"WorldStateScoreButton2Column2Text\",\n\t\"WorldStateScoreButton2Column3Icon\",\n\t\"WorldStateScoreButton2Column3Text\",\n\t\"WorldStateScoreButton2Column4Icon\",\n\t\"WorldStateScoreButton2Column4Text\",\n\t\"WorldStateScoreButton2Column5Icon\",\n\t\"WorldStateScoreButton2Column5Text\",\n\t\"WorldStateScoreButton2Column6Icon\",\n\t\"WorldStateScoreButton2Column6Text\",\n\t\"WorldStateScoreButton2Column7Icon\",\n\t\"WorldStateScoreButton2Column7Text\",\n\t\"WorldStateScoreButton2Damage\",\n\t\"WorldStateScoreButton2Deaths\",\n\t\"WorldStateScoreButton2FactionLeft\",\n\t\"WorldStateScoreButton2FactionRight\",\n\t\"WorldStateScoreButton2Healing\",\n\t\"WorldStateScoreButton2HonorGained\",\n\t\"WorldStateScoreButton2HonorableKills\",\n\t\"WorldStateScoreButton2KillingBlows\",\n\t\"WorldStateScoreButton2NameText\",\n\t\"WorldStateScoreButton2Team\",\n\t\"WorldStateScoreButton2TeamSkill\",\n\t\"WorldStateScoreButton3ClassButtonIcon\",\n\t\"WorldStateScoreButton3Column1Icon\",\n\t\"WorldStateScoreButton3Column1Text\",\n\t\"WorldStateScoreButton3Column2Icon\",\n\t\"WorldStateScoreButton3Column2Text\",\n\t\"WorldStateScoreButton3Column3Icon\",\n\t\"WorldStateScoreButton3Column3Text\",\n\t\"WorldStateScoreButton3Column4Icon\",\n\t\"WorldStateScoreButton3Column4Text\",\n\t\"WorldStateScoreButton3Column5Icon\",\n\t\"WorldStateScoreButton3Column5Text\",\n\t\"WorldStateScoreButton3Column6Icon\",\n\t\"WorldStateScoreButton3Column6Text\",\n\t\"WorldStateScoreButton3Column7Icon\",\n\t\"WorldStateScoreButton3Column7Text\",\n\t\"WorldStateScoreButton3Damage\",\n\t\"WorldStateScoreButton3Deaths\",\n\t\"WorldStateScoreButton3FactionLeft\",\n\t\"WorldStateScoreButton3FactionRight\",\n\t\"WorldStateScoreButton3Healing\",\n\t\"WorldStateScoreButton3HonorGained\",\n\t\"WorldStateScoreButton3HonorableKills\",\n\t\"WorldStateScoreButton3KillingBlows\",\n\t\"WorldStateScoreButton3NameText\",\n\t\"WorldStateScoreButton3Team\",\n\t\"WorldStateScoreButton3TeamSkill\",\n\t\"WorldStateScoreButton4ClassButtonIcon\",\n\t\"WorldStateScoreButton4Column1Icon\",\n\t\"WorldStateScoreButton4Column1Text\",\n\t\"WorldStateScoreButton4Column2Icon\",\n\t\"WorldStateScoreButton4Column2Text\",\n\t\"WorldStateScoreButton4Column3Icon\",\n\t\"WorldStateScoreButton4Column3Text\",\n\t\"WorldStateScoreButton4Column4Icon\",\n\t\"WorldStateScoreButton4Column4Text\",\n\t\"WorldStateScoreButton4Column5Icon\",\n\t\"WorldStateScoreButton4Column5Text\",\n\t\"WorldStateScoreButton4Column6Icon\",\n\t\"WorldStateScoreButton4Column6Text\",\n\t\"WorldStateScoreButton4Column7Icon\",\n\t\"WorldStateScoreButton4Column7Text\",\n\t\"WorldStateScoreButton4Damage\",\n\t\"WorldStateScoreButton4Deaths\",\n\t\"WorldStateScoreButton4FactionLeft\",\n\t\"WorldStateScoreButton4FactionRight\",\n\t\"WorldStateScoreButton4Healing\",\n\t\"WorldStateScoreButton4HonorGained\",\n\t\"WorldStateScoreButton4HonorableKills\",\n\t\"WorldStateScoreButton4KillingBlows\",\n\t\"WorldStateScoreButton4NameText\",\n\t\"WorldStateScoreButton4Team\",\n\t\"WorldStateScoreButton4TeamSkill\",\n\t\"WorldStateScoreButton5ClassButtonIcon\",\n\t\"WorldStateScoreButton5Column1Icon\",\n\t\"WorldStateScoreButton5Column1Text\",\n\t\"WorldStateScoreButton5Column2Icon\",\n\t\"WorldStateScoreButton5Column2Text\",\n\t\"WorldStateScoreButton5Column3Icon\",\n\t\"WorldStateScoreButton5Column3Text\",\n\t\"WorldStateScoreButton5Column4Icon\",\n\t\"WorldStateScoreButton5Column4Text\",\n\t\"WorldStateScoreButton5Column5Icon\",\n\t\"WorldStateScoreButton5Column5Text\",\n\t\"WorldStateScoreButton5Column6Icon\",\n\t\"WorldStateScoreButton5Column6Text\",\n\t\"WorldStateScoreButton5Column7Icon\",\n\t\"WorldStateScoreButton5Column7Text\",\n\t\"WorldStateScoreButton5Damage\",\n\t\"WorldStateScoreButton5Deaths\",\n\t\"WorldStateScoreButton5FactionLeft\",\n\t\"WorldStateScoreButton5FactionRight\",\n\t\"WorldStateScoreButton5Healing\",\n\t\"WorldStateScoreButton5HonorGained\",\n\t\"WorldStateScoreButton5HonorableKills\",\n\t\"WorldStateScoreButton5KillingBlows\",\n\t\"WorldStateScoreButton5NameText\",\n\t\"WorldStateScoreButton5Team\",\n\t\"WorldStateScoreButton5TeamSkill\",\n\t\"WorldStateScoreButton6ClassButtonIcon\",\n\t\"WorldStateScoreButton6Column1Icon\",\n\t\"WorldStateScoreButton6Column1Text\",\n\t\"WorldStateScoreButton6Column2Icon\",\n\t\"WorldStateScoreButton6Column2Text\",\n\t\"WorldStateScoreButton6Column3Icon\",\n\t\"WorldStateScoreButton6Column3Text\",\n\t\"WorldStateScoreButton6Column4Icon\",\n\t\"WorldStateScoreButton6Column4Text\",\n\t\"WorldStateScoreButton6Column5Icon\",\n\t\"WorldStateScoreButton6Column5Text\",\n\t\"WorldStateScoreButton6Column6Icon\",\n\t\"WorldStateScoreButton6Column6Text\",\n\t\"WorldStateScoreButton6Column7Icon\",\n\t\"WorldStateScoreButton6Column7Text\",\n\t\"WorldStateScoreButton6Damage\",\n\t\"WorldStateScoreButton6Deaths\",\n\t\"WorldStateScoreButton6FactionLeft\",\n\t\"WorldStateScoreButton6FactionRight\",\n\t\"WorldStateScoreButton6Healing\",\n\t\"WorldStateScoreButton6HonorGained\",\n\t\"WorldStateScoreButton6HonorableKills\",\n\t\"WorldStateScoreButton6KillingBlows\",\n\t\"WorldStateScoreButton6NameText\",\n\t\"WorldStateScoreButton6Team\",\n\t\"WorldStateScoreButton6TeamSkill\",\n\t\"WorldStateScoreButton7ClassButtonIcon\",\n\t\"WorldStateScoreButton7Column1Icon\",\n\t\"WorldStateScoreButton7Column1Text\",\n\t\"WorldStateScoreButton7Column2Icon\",\n\t\"WorldStateScoreButton7Column2Text\",\n\t\"WorldStateScoreButton7Column3Icon\",\n\t\"WorldStateScoreButton7Column3Text\",\n\t\"WorldStateScoreButton7Column4Icon\",\n\t\"WorldStateScoreButton7Column4Text\",\n\t\"WorldStateScoreButton7Column5Icon\",\n\t\"WorldStateScoreButton7Column5Text\",\n\t\"WorldStateScoreButton7Column6Icon\",\n\t\"WorldStateScoreButton7Column6Text\",\n\t\"WorldStateScoreButton7Column7Icon\",\n\t\"WorldStateScoreButton7Column7Text\",\n\t\"WorldStateScoreButton7Damage\",\n\t\"WorldStateScoreButton7Deaths\",\n\t\"WorldStateScoreButton7FactionLeft\",\n\t\"WorldStateScoreButton7FactionRight\",\n\t\"WorldStateScoreButton7Healing\",\n\t\"WorldStateScoreButton7HonorGained\",\n\t\"WorldStateScoreButton7HonorableKills\",\n\t\"WorldStateScoreButton7KillingBlows\",\n\t\"WorldStateScoreButton7NameText\",\n\t\"WorldStateScoreButton7Team\",\n\t\"WorldStateScoreButton7TeamSkill\",\n\t\"WorldStateScoreButton8ClassButtonIcon\",\n\t\"WorldStateScoreButton8Column1Icon\",\n\t\"WorldStateScoreButton8Column1Text\",\n\t\"WorldStateScoreButton8Column2Icon\",\n\t\"WorldStateScoreButton8Column2Text\",\n\t\"WorldStateScoreButton8Column3Icon\",\n\t\"WorldStateScoreButton8Column3Text\",\n\t\"WorldStateScoreButton8Column4Icon\",\n\t\"WorldStateScoreButton8Column4Text\",\n\t\"WorldStateScoreButton8Column5Icon\",\n\t\"WorldStateScoreButton8Column5Text\",\n\t\"WorldStateScoreButton8Column6Icon\",\n\t\"WorldStateScoreButton8Column6Text\",\n\t\"WorldStateScoreButton8Column7Icon\",\n\t\"WorldStateScoreButton8Column7Text\",\n\t\"WorldStateScoreButton8Damage\",\n\t\"WorldStateScoreButton8Deaths\",\n\t\"WorldStateScoreButton8FactionLeft\",\n\t\"WorldStateScoreButton8FactionRight\",\n\t\"WorldStateScoreButton8Healing\",\n\t\"WorldStateScoreButton8HonorGained\",\n\t\"WorldStateScoreButton8HonorableKills\",\n\t\"WorldStateScoreButton8KillingBlows\",\n\t\"WorldStateScoreButton8NameText\",\n\t\"WorldStateScoreButton8Team\",\n\t\"WorldStateScoreButton8TeamSkill\",\n\t\"WorldStateScoreButton9ClassButtonIcon\",\n\t\"WorldStateScoreButton9Column1Icon\",\n\t\"WorldStateScoreButton9Column1Text\",\n\t\"WorldStateScoreButton9Column2Icon\",\n\t\"WorldStateScoreButton9Column2Text\",\n\t\"WorldStateScoreButton9Column3Icon\",\n\t\"WorldStateScoreButton9Column3Text\",\n\t\"WorldStateScoreButton9Column4Icon\",\n\t\"WorldStateScoreButton9Column4Text\",\n\t\"WorldStateScoreButton9Column5Icon\",\n\t\"WorldStateScoreButton9Column5Text\",\n\t\"WorldStateScoreButton9Column6Icon\",\n\t\"WorldStateScoreButton9Column6Text\",\n\t\"WorldStateScoreButton9Column7Icon\",\n\t\"WorldStateScoreButton9Column7Text\",\n\t\"WorldStateScoreButton9Damage\",\n\t\"WorldStateScoreButton9Deaths\",\n\t\"WorldStateScoreButton9FactionLeft\",\n\t\"WorldStateScoreButton9FactionRight\",\n\t\"WorldStateScoreButton9Healing\",\n\t\"WorldStateScoreButton9HonorGained\",\n\t\"WorldStateScoreButton9HonorableKills\",\n\t\"WorldStateScoreButton9KillingBlows\",\n\t\"WorldStateScoreButton9NameText\",\n\t\"WorldStateScoreButton9Team\",\n\t\"WorldStateScoreButton9TeamSkill\",\n\t\"WorldStateScoreColumn1Text\",\n\t\"WorldStateScoreColumn2Text\",\n\t\"WorldStateScoreColumn3Text\",\n\t\"WorldStateScoreColumn4Text\",\n\t\"WorldStateScoreColumn5Text\",\n\t\"WorldStateScoreColumn6Text\",\n\t\"WorldStateScoreColumn7Text\",\n\t\"WorldStateScoreFrameBottom\",\n\t\"WorldStateScoreFrameBottomLeft\",\n\t\"WorldStateScoreFrameBottomRight\",\n\t\"WorldStateScoreFrameClassText\",\n\t\"WorldStateScoreFrameDamageDoneText\",\n\t\"WorldStateScoreFrameDeathsText\",\n\t\"WorldStateScoreFrameHKText\",\n\t\"WorldStateScoreFrameHealingDoneText\",\n\t\"WorldStateScoreFrameHonorGainedText\",\n\t\"WorldStateScoreFrameKBText\",\n\t\"WorldStateScoreFrameLabel\",\n\t\"WorldStateScoreFrameLeaveButtonText\",\n\t\"WorldStateScoreFrameNameText\",\n\t\"WorldStateScoreFrameTab1HighlightTexture\",\n\t\"WorldStateScoreFrameTab1Left\",\n\t\"WorldStateScoreFrameTab1LeftDisabled\",\n\t\"WorldStateScoreFrameTab1Middle\",\n\t\"WorldStateScoreFrameTab1MiddleDisabled\",\n\t\"WorldStateScoreFrameTab1Right\",\n\t\"WorldStateScoreFrameTab1RightDisabled\",\n\t\"WorldStateScoreFrameTab1Text\",\n\t\"WorldStateScoreFrameTab2HighlightTexture\",\n\t\"WorldStateScoreFrameTab2Left\",\n\t\"WorldStateScoreFrameTab2LeftDisabled\",\n\t\"WorldStateScoreFrameTab2Middle\",\n\t\"WorldStateScoreFrameTab2MiddleDisabled\",\n\t\"WorldStateScoreFrameTab2Right\",\n\t\"WorldStateScoreFrameTab2RightDisabled\",\n\t\"WorldStateScoreFrameTab2Text\",\n\t\"WorldStateScoreFrameTab3HighlightTexture\",\n\t\"WorldStateScoreFrameTab3Left\",\n\t\"WorldStateScoreFrameTab3LeftDisabled\",\n\t\"WorldStateScoreFrameTab3Middle\",\n\t\"WorldStateScoreFrameTab3MiddleDisabled\",\n\t\"WorldStateScoreFrameTab3Right\",\n\t\"WorldStateScoreFrameTab3RightDisabled\",\n\t\"WorldStateScoreFrameTab3Text\",\n\t\"WorldStateScoreFrameTeamSkillText\",\n\t\"WorldStateScoreFrameTeamText\",\n\t\"WorldStateScoreFrameTimer\",\n\t\"WorldStateScoreFrameTimerLabel\",\n\t\"WorldStateScoreFrameTop\",\n\t\"WorldStateScoreFrameTopBackground\",\n\t\"WorldStateScoreFrameTopLeft\",\n\t\"WorldStateScoreFrameTopRight\",\n\t\"WorldStateScorePlayerCount\",\n\t\"WorldStateScoreScrollFrameScrollBarThumbTexture\",\n\t\"WorldStateScoreScrollFrameScrollBarTop\",\n\t\"WorldStateScoreWinnerFrameLeft\",\n\t\"WorldStateScoreWinnerFrameRight\",\n\t\"WorldStateScoreWinnerFrameText\",\n\t\"ZoneTextFont\",\n\t\"ZoneTextString\",\n\t\"poiWorldMapQuestScrollChildFrame1_0IconNumber\",\n\t\"poiWorldMapQuestScrollChildFrame1_0IconTurnin\",\n\t\"tomtest\",\n\n\t-- functions: Blizzard_AchievementUI\n\t\"ACHIEVEMENTUI_SELECTEDFILTER\",\n\t\"AchievementButton_Collapse\",\n\t\"AchievementButton_Desaturate\",\n\t\"AchievementButton_DisplayAchievement\",\n\t\"AchievementButton_DisplayObjectives\",\n\t\"AchievementButton_Expand\",\n\t\"AchievementButton_GetCriteria\",\n\t\"AchievementButton_GetMeta\",\n\t\"AchievementButton_GetMiniAchievement\",\n\t\"AchievementButton_GetProgressBar\",\n\t\"AchievementButton_GetProgressivePoints\",\n\t\"AchievementButton_LocalizeMetaAchievement\",\n\t\"AchievementButton_LocalizeMiniAchievement\",\n\t\"AchievementButton_LocalizeProgressBar\",\n\t\"AchievementButton_OnClick\",\n\t\"AchievementButton_OnLoad\",\n\t\"AchievementButton_ResetCriteria\",\n\t\"AchievementButton_ResetMetas\",\n\t\"AchievementButton_ResetMiniAchievements\",\n\t\"AchievementButton_ResetObjectives\",\n\t\"AchievementButton_ResetProgressBars\",\n\t\"AchievementButton_ResetTable\",\n\t\"AchievementButton_Saturate\",\n\t\"AchievementButton_ToggleTracking\",\n\t\"AchievementButton_UpdatePlusMinusTexture\",\n\t\"AchievementCategoryButton_OnClick\",\n\t\"AchievementCategoryButton_OnLoad\",\n\t\"AchievementComparisonFriendButton_Desaturate\",\n\t\"AchievementComparisonFriendButton_OnLoad\",\n\t\"AchievementComparisonFriendButton_Saturate\",\n\t\"AchievementComparisonPlayerButton_Desaturate\",\n\t\"AchievementComparisonPlayerButton_OnLoad\",\n\t\"AchievementComparisonPlayerButton_Saturate\",\n\t\"AchievementFrameAchievementsBackdrop_OnLoad\",\n\t\"AchievementFrameAchievements_AdjustSelection\",\n\t\"AchievementFrameAchievements_ClearSelection\",\n\t\"AchievementFrameAchievements_FindSelection\",\n\t\"AchievementFrameAchievements_ForceUpdate\",\n\t\"AchievementFrameAchievements_OnEvent\",\n\t\"AchievementFrameAchievements_OnLoad\",\n\t\"AchievementFrameAchievements_OnShow\",\n\t\"AchievementFrameAchievements_SelectButton\",\n\t\"AchievementFrameAchievements_Update\",\n\t\"AchievementFrameBaseTab_OnClick\",\n\t\"AchievementFrameCategories_ClearSelection\",\n\t\"AchievementFrameCategories_DisplayButton\",\n\t\"AchievementFrameCategories_GetCategoryList\",\n\t\"AchievementFrameCategories_OnEvent\",\n\t\"AchievementFrameCategories_OnLoad\",\n\t\"AchievementFrameCategories_OnShow\",\n\t\"AchievementFrameCategories_SelectButton\",\n\t\"AchievementFrameCategories_Update\",\n\t\"AchievementFrameCategories_UpdateTooltip\",\n\t\"AchievementFrameCategory_FeatOfStrengthTooltip\",\n\t\"AchievementFrameCategory_StatusBarTooltip\",\n\t\"AchievementFrameComparisonContainer_OnLoad\",\n\t\"AchievementFrameComparisonStat_OnLoad\",\n\t\"AchievementFrameComparisonStatsContainer_OnLoad\",\n\t\"AchievementFrameComparisonStats_SetHeader\",\n\t\"AchievementFrameComparisonStats_SetStat\",\n\t\"AchievementFrameComparisonTab_OnClick\",\n\t\"AchievementFrameComparison_ClearSelection\",\n\t\"AchievementFrameComparison_DisplayAchievement\",\n\t\"AchievementFrameComparison_ForceUpdate\",\n\t\"AchievementFrameComparison_OnEvent\",\n\t\"AchievementFrameComparison_OnHide\",\n\t\"AchievementFrameComparison_OnLoad\",\n\t\"AchievementFrameComparison_OnShow\",\n\t\"AchievementFrameComparison_SetUnit\",\n\t\"AchievementFrameComparison_Update\",\n\t\"AchievementFrameComparison_UpdateStats\",\n\t\"AchievementFrameComparison_UpdateStatusBars\",\n\t\"AchievementFrameFilterDropDownButton_OnClick\",\n\t\"AchievementFrameFilterDropDown_Initialize\",\n\t\"AchievementFrameFilterDropDown_OnLoad\",\n\t\"AchievementFrameStats_OnEvent\",\n\t\"AchievementFrameStats_OnLoad\",\n\t\"AchievementFrameStats_SetHeader\",\n\t\"AchievementFrameStats_SetStat\",\n\t\"AchievementFrameStats_Update\",\n\t\"AchievementFrameSummaryAchievement_OnClick\",\n\t\"AchievementFrameSummaryAchievement_OnEnter\",\n\t\"AchievementFrameSummaryAchievement_OnLoad\",\n\t\"AchievementFrameSummaryCategoriesStatusBar_Update\",\n\t\"AchievementFrameSummaryCategoryButton_OnClick\",\n\t\"AchievementFrameSummaryCategory_OnEvent\",\n\t\"AchievementFrameSummaryCategory_OnHide\",\n\t\"AchievementFrameSummaryCategory_OnLoad\",\n\t\"AchievementFrameSummaryCategory_OnShow\",\n\t\"AchievementFrameSummary_LocalizeButton\",\n\t\"AchievementFrameSummary_OnShow\",\n\t\"AchievementFrameSummary_Update\",\n\t\"AchievementFrameSummary_UpdateAchievements\",\n\t\"AchievementFrame_ClearTextures\",\n\t\"AchievementFrame_DisplayComparison\",\n\t\"AchievementFrame_ForceUpdate\",\n\t\"AchievementFrame_GetCategoryNumAchievements_Complete\",\n\t\"AchievementFrame_GetCategoryNumAchievements_Incomplete\",\n\t\"AchievementFrame_GetCategoryTotalNumAchievements\",\n\t\"AchievementFrame_IsComparison\",\n\t\"AchievementFrame_IsFeatOfStrength\",\n\t\"AchievementFrame_LoadTextures\",\n\t\"AchievementFrame_LocalizeCriteria\",\n\t\"AchievementFrame_OnHide\",\n\t\"AchievementFrame_OnLoad\",\n\t\"AchievementFrame_OnShow\",\n\t\"AchievementFrame_SelectAchievement\",\n\t\"AchievementFrame_SelectSummaryStatistic\",\n\t\"AchievementFrame_SetFilter\",\n\t\"AchievementFrame_ShowSubFrame\",\n\t\"AchievementFrame_ToggleAchievementFrame\",\n\t\"AchievementIcon_Desaturate\",\n\t\"AchievementIcon_OnLoad\",\n\t\"AchievementIcon_Saturate\",\n\t\"AchievementObjectives_DisplayCriteria\",\n\t\"AchievementObjectives_DisplayProgressiveAchievement\",\n\t\"AchievementShield_Desaturate\",\n\t\"AchievementShield_OnLoad\",\n\t\"AchievementShield_Saturate\",\n\t\"AchievementShield_SetPoints\",\n\t\"AchievementStatButton_OnClick\",\n\t\"AchievementStatButton_OnLoad\",\n\t-- tables: Blizzard_AchievementUI\n\t\"ACHIEVEMENTFRAME_SUBFRAMES\",\n\t\"ACHIEVEMENTUI_CATEGORIES\",\n\t\"ACHIEVEMENTUI_DEFAULTSUMMARYACHIEVEMENTS\",\n\t\"ACHIEVEMENT_TEXTURES_TO_LOAD\",\n\t\"AchievementFrame\",\n\t\"AchievementFrameAchievements\",\n\t\"AchievementFrameAchievementsContainer\",\n\t\"AchievementFrameAchievementsContainerButton1\",\n\t\"AchievementFrameAchievementsContainerButton1Highlight\",\n\t\"AchievementFrameAchievementsContainerButton1Icon\",\n\t\"AchievementFrameAchievementsContainerButton1Objectives\",\n\t\"AchievementFrameAchievementsContainerButton1Shield\",\n\t\"AchievementFrameAchievementsContainerButton1Tracked\",\n\t\"AchievementFrameAchievementsContainerButton2\",\n\t\"AchievementFrameAchievementsContainerButton2Highlight\",\n\t\"AchievementFrameAchievementsContainerButton2Icon\",\n\t\"AchievementFrameAchievementsContainerButton2Objectives\",\n\t\"AchievementFrameAchievementsContainerButton2Shield\",\n\t\"AchievementFrameAchievementsContainerButton2Tracked\",\n\t\"AchievementFrameAchievementsContainerButton3\",\n\t\"AchievementFrameAchievementsContainerButton3Highlight\",\n\t\"AchievementFrameAchievementsContainerButton3Icon\",\n\t\"AchievementFrameAchievementsContainerButton3Objectives\",\n\t\"AchievementFrameAchievementsContainerButton3Shield\",\n\t\"AchievementFrameAchievementsContainerButton3Tracked\",\n\t\"AchievementFrameAchievementsContainerButton4\",\n\t\"AchievementFrameAchievementsContainerButton4Highlight\",\n\t\"AchievementFrameAchievementsContainerButton4Icon\",\n\t\"AchievementFrameAchievementsContainerButton4Objectives\",\n\t\"AchievementFrameAchievementsContainerButton4Shield\",\n\t\"AchievementFrameAchievementsContainerButton4Tracked\",\n\t\"AchievementFrameAchievementsContainerButton5\",\n\t\"AchievementFrameAchievementsContainerButton5Highlight\",\n\t\"AchievementFrameAchievementsContainerButton5Icon\",\n\t\"AchievementFrameAchievementsContainerButton5Objectives\",\n\t\"AchievementFrameAchievementsContainerButton5Shield\",\n\t\"AchievementFrameAchievementsContainerButton5Tracked\",\n\t\"AchievementFrameAchievementsContainerButton6\",\n\t\"AchievementFrameAchievementsContainerButton6Highlight\",\n\t\"AchievementFrameAchievementsContainerButton6Icon\",\n\t\"AchievementFrameAchievementsContainerButton6Objectives\",\n\t\"AchievementFrameAchievementsContainerButton6Shield\",\n\t\"AchievementFrameAchievementsContainerButton6Tracked\",\n\t\"AchievementFrameAchievementsContainerButton7\",\n\t\"AchievementFrameAchievementsContainerButton7Highlight\",\n\t\"AchievementFrameAchievementsContainerButton7Icon\",\n\t\"AchievementFrameAchievementsContainerButton7Objectives\",\n\t\"AchievementFrameAchievementsContainerButton7Shield\",\n\t\"AchievementFrameAchievementsContainerButton7Tracked\",\n\t\"AchievementFrameAchievementsContainerScrollBar\",\n\t\"AchievementFrameAchievementsContainerScrollBarScrollDownButton\",\n\t\"AchievementFrameAchievementsContainerScrollBarScrollUpButton\",\n\t\"AchievementFrameAchievementsContainerScrollChild\",\n\t\"AchievementFrameAchievementsObjectives\",\n\t\"AchievementFrameCategories\",\n\t\"AchievementFrameCategoriesContainer\",\n\t\"AchievementFrameCategoriesContainerScrollBar\",\n\t\"AchievementFrameCategoriesContainerScrollBarScrollDownButton\",\n\t\"AchievementFrameCategoriesContainerScrollBarScrollUpButton\",\n\t\"AchievementFrameCategoriesContainerScrollChild\",\n\t\"AchievementFrameCloseButton\",\n\t\"AchievementFrameComparison\",\n\t\"AchievementFrameComparisonContainer\",\n\t\"AchievementFrameComparisonContainerButton1\",\n\t\"AchievementFrameComparisonContainerButton10\",\n\t\"AchievementFrameComparisonContainerButton10Friend\",\n\t\"AchievementFrameComparisonContainerButton10FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton10FriendShield\",\n\t\"AchievementFrameComparisonContainerButton10Player\",\n\t\"AchievementFrameComparisonContainerButton10PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton10PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton1Friend\",\n\t\"AchievementFrameComparisonContainerButton1FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton1FriendShield\",\n\t\"AchievementFrameComparisonContainerButton1Player\",\n\t\"AchievementFrameComparisonContainerButton1PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton1PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton2\",\n\t\"AchievementFrameComparisonContainerButton2Friend\",\n\t\"AchievementFrameComparisonContainerButton2FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton2FriendShield\",\n\t\"AchievementFrameComparisonContainerButton2Player\",\n\t\"AchievementFrameComparisonContainerButton2PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton2PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton3\",\n\t\"AchievementFrameComparisonContainerButton3Friend\",\n\t\"AchievementFrameComparisonContainerButton3FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton3FriendShield\",\n\t\"AchievementFrameComparisonContainerButton3Player\",\n\t\"AchievementFrameComparisonContainerButton3PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton3PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton4\",\n\t\"AchievementFrameComparisonContainerButton4Friend\",\n\t\"AchievementFrameComparisonContainerButton4FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton4FriendShield\",\n\t\"AchievementFrameComparisonContainerButton4Player\",\n\t\"AchievementFrameComparisonContainerButton4PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton4PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton5\",\n\t\"AchievementFrameComparisonContainerButton5Friend\",\n\t\"AchievementFrameComparisonContainerButton5FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton5FriendShield\",\n\t\"AchievementFrameComparisonContainerButton5Player\",\n\t\"AchievementFrameComparisonContainerButton5PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton5PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton6\",\n\t\"AchievementFrameComparisonContainerButton6Friend\",\n\t\"AchievementFrameComparisonContainerButton6FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton6FriendShield\",\n\t\"AchievementFrameComparisonContainerButton6Player\",\n\t\"AchievementFrameComparisonContainerButton6PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton6PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton7\",\n\t\"AchievementFrameComparisonContainerButton7Friend\",\n\t\"AchievementFrameComparisonContainerButton7FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton7FriendShield\",\n\t\"AchievementFrameComparisonContainerButton7Player\",\n\t\"AchievementFrameComparisonContainerButton7PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton7PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton8\",\n\t\"AchievementFrameComparisonContainerButton8Friend\",\n\t\"AchievementFrameComparisonContainerButton8FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton8FriendShield\",\n\t\"AchievementFrameComparisonContainerButton8Player\",\n\t\"AchievementFrameComparisonContainerButton8PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton8PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton9\",\n\t\"AchievementFrameComparisonContainerButton9Friend\",\n\t\"AchievementFrameComparisonContainerButton9FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton9FriendShield\",\n\t\"AchievementFrameComparisonContainerButton9Player\",\n\t\"AchievementFrameComparisonContainerButton9PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton9PlayerShield\",\n\t\"AchievementFrameComparisonContainerScrollBar\",\n\t\"AchievementFrameComparisonContainerScrollBarScrollDownButton\",\n\t\"AchievementFrameComparisonContainerScrollBarScrollUpButton\",\n\t\"AchievementFrameComparisonContainerScrollChild\",\n\t\"AchievementFrameComparisonHeader\",\n\t\"AchievementFrameComparisonStatsContainer\",\n\t\"AchievementFrameComparisonStatsContainerButton1\",\n\t\"AchievementFrameComparisonStatsContainerButton10\",\n\t\"AchievementFrameComparisonStatsContainerButton10Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton11\",\n\t\"AchievementFrameComparisonStatsContainerButton11Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton12\",\n\t\"AchievementFrameComparisonStatsContainerButton12Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton13\",\n\t\"AchievementFrameComparisonStatsContainerButton13Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton14\",\n\t\"AchievementFrameComparisonStatsContainerButton14Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton15\",\n\t\"AchievementFrameComparisonStatsContainerButton15Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton16\",\n\t\"AchievementFrameComparisonStatsContainerButton16Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton17\",\n\t\"AchievementFrameComparisonStatsContainerButton17Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton18\",\n\t\"AchievementFrameComparisonStatsContainerButton18Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton19\",\n\t\"AchievementFrameComparisonStatsContainerButton19Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton1Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton2\",\n\t\"AchievementFrameComparisonStatsContainerButton20\",\n\t\"AchievementFrameComparisonStatsContainerButton20Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton2Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton3\",\n\t\"AchievementFrameComparisonStatsContainerButton3Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton4\",\n\t\"AchievementFrameComparisonStatsContainerButton4Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton5\",\n\t\"AchievementFrameComparisonStatsContainerButton5Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton6\",\n\t\"AchievementFrameComparisonStatsContainerButton6Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton7\",\n\t\"AchievementFrameComparisonStatsContainerButton7Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton8\",\n\t\"AchievementFrameComparisonStatsContainerButton8Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton9\",\n\t\"AchievementFrameComparisonStatsContainerButton9Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerScrollBar\",\n\t\"AchievementFrameComparisonStatsContainerScrollBarScrollDownButton\",\n\t\"AchievementFrameComparisonStatsContainerScrollBarScrollUpButton\",\n\t\"AchievementFrameComparisonStatsContainerScrollChild\",\n\t\"AchievementFrameComparisonSummary\",\n\t\"AchievementFrameComparisonSummaryFriend\",\n\t\"AchievementFrameComparisonSummaryFriendStatusBar\",\n\t\"AchievementFrameComparisonSummaryPlayer\",\n\t\"AchievementFrameComparisonSummaryPlayerStatusBar\",\n\t\"AchievementFrameFilterDropDownButton\",\n\t\"AchievementFrameFilters\",\n\t\"AchievementFrameHeader\",\n\t\"AchievementFrameStats\",\n\t\"AchievementFrameStatsBG\",\n\t\"AchievementFrameStatsContainer\",\n\t\"AchievementFrameStatsContainerButton1\",\n\t\"AchievementFrameStatsContainerButton10\",\n\t\"AchievementFrameStatsContainerButton11\",\n\t\"AchievementFrameStatsContainerButton12\",\n\t\"AchievementFrameStatsContainerButton13\",\n\t\"AchievementFrameStatsContainerButton14\",\n\t\"AchievementFrameStatsContainerButton15\",\n\t\"AchievementFrameStatsContainerButton16\",\n\t\"AchievementFrameStatsContainerButton17\",\n\t\"AchievementFrameStatsContainerButton18\",\n\t\"AchievementFrameStatsContainerButton19\",\n\t\"AchievementFrameStatsContainerButton2\",\n\t\"AchievementFrameStatsContainerButton20\",\n\t\"AchievementFrameStatsContainerButton3\",\n\t\"AchievementFrameStatsContainerButton4\",\n\t\"AchievementFrameStatsContainerButton5\",\n\t\"AchievementFrameStatsContainerButton6\",\n\t\"AchievementFrameStatsContainerButton7\",\n\t\"AchievementFrameStatsContainerButton8\",\n\t\"AchievementFrameStatsContainerButton9\",\n\t\"AchievementFrameStatsContainerScrollBar\",\n\t\"AchievementFrameStatsContainerScrollBarScrollDownButton\",\n\t\"AchievementFrameStatsContainerScrollBarScrollUpButton\",\n\t\"AchievementFrameStatsContainerScrollChild\",\n\t\"AchievementFrameSummary\",\n\t\"AchievementFrameSummaryAchievements\",\n\t\"AchievementFrameSummaryAchievementsHeader\",\n\t\"AchievementFrameSummaryCategories\",\n\t\"AchievementFrameSummaryCategoriesCategory1\",\n\t\"AchievementFrameSummaryCategoriesCategory1Button\",\n\t\"AchievementFrameSummaryCategoriesCategory1ButtonHighlight\",\n\t\"AchievementFrameSummaryCategoriesCategory2\",\n\t\"AchievementFrameSummaryCategoriesCategory2Button\",\n\t\"AchievementFrameSummaryCategoriesCategory2ButtonHighlight\",\n\t\"AchievementFrameSummaryCategoriesCategory3\",\n\t\"AchievementFrameSummaryCategoriesCategory3Button\",\n\t\"AchievementFrameSummaryCategoriesCategory3ButtonHighlight\",\n\t\"AchievementFrameSummaryCategoriesCategory4\",\n\t\"AchievementFrameSummaryCategoriesCategory4Button\",\n\t\"AchievementFrameSummaryCategoriesCategory4ButtonHighlight\",\n\t\"AchievementFrameSummaryCategoriesCategory5\",\n\t\"AchievementFrameSummaryCategoriesCategory5Button\",\n\t\"AchievementFrameSummaryCategoriesCategory5ButtonHighlight\",\n\t\"AchievementFrameSummaryCategoriesCategory6\",\n\t\"AchievementFrameSummaryCategoriesCategory6Button\",\n\t\"AchievementFrameSummaryCategoriesCategory6ButtonHighlight\",\n\t\"AchievementFrameSummaryCategoriesCategory7\",\n\t\"AchievementFrameSummaryCategoriesCategory7Button\",\n\t\"AchievementFrameSummaryCategoriesCategory7ButtonHighlight\",\n\t\"AchievementFrameSummaryCategoriesCategory8\",\n\t\"AchievementFrameSummaryCategoriesCategory8Button\",\n\t\"AchievementFrameSummaryCategoriesCategory8ButtonHighlight\",\n\t\"AchievementFrameSummaryCategoriesHeader\",\n\t\"AchievementFrameSummaryCategoriesStatusBar\",\n\t\"AchievementFrameTab1\",\n\t\"AchievementFrameTab2\",\n\t\"COMPARISON_ACHIEVEMENT_FUNCTIONS\",\n\t\"COMPARISON_STAT_FUNCTIONS\",\n\t\"STAT_FUNCTIONS\",\n\t\"UIDROPDOWNMENU_INIT_MENU\",\n\t\"achievementFunctions\",\n\t\"this\",\n\t-- frames: Blizzard_AchievementUI\n\t\"AchievementFrameAchievementsObjectives\",\n\t\"AchievementFrame\",\n\t\"AchievementFrameHeader\",\n\t\"AchievementFrameCategories\",\n\t\"AchievementFrameCategoriesContainer\",\n\t\"AchievementFrameCategoriesContainerScrollChild\",\n\t\"AchievementFrameCategoriesContainerScrollBar\",\n\t\"AchievementFrameCategoriesContainerScrollBarScrollUpButton\",\n\t\"AchievementFrameCategoriesContainerScrollBarScrollDownButton\",\n\t\"AchievementFrameAchievements\",\n\t\"AchievementFrameAchievementsContainer\",\n\t\"AchievementFrameAchievementsContainerScrollChild\",\n\t\"AchievementFrameAchievementsContainerScrollBar\",\n\t\"AchievementFrameAchievementsContainerScrollBarScrollUpButton\",\n\t\"AchievementFrameAchievementsContainerScrollBarScrollDownButton\",\n\t\"AchievementFrameAchievementsContainerButton1\",\n\t\"AchievementFrameAchievementsContainerButton1Highlight\",\n\t\"AchievementFrameAchievementsContainerButton1Icon\",\n\t\"AchievementFrameAchievementsContainerButton1Shield\",\n\t\"AchievementFrameAchievementsContainerButton1Objectives\",\n\t\"AchievementFrameAchievementsContainerButton1Tracked\",\n\t\"AchievementFrameAchievementsContainerButton2\",\n\t\"AchievementFrameAchievementsContainerButton2Highlight\",\n\t\"AchievementFrameAchievementsContainerButton2Icon\",\n\t\"AchievementFrameAchievementsContainerButton2Shield\",\n\t\"AchievementFrameAchievementsContainerButton2Objectives\",\n\t\"AchievementFrameAchievementsContainerButton2Tracked\",\n\t\"AchievementFrameAchievementsContainerButton3\",\n\t\"AchievementFrameAchievementsContainerButton3Highlight\",\n\t\"AchievementFrameAchievementsContainerButton3Icon\",\n\t\"AchievementFrameAchievementsContainerButton3Shield\",\n\t\"AchievementFrameAchievementsContainerButton3Objectives\",\n\t\"AchievementFrameAchievementsContainerButton3Tracked\",\n\t\"AchievementFrameAchievementsContainerButton4\",\n\t\"AchievementFrameAchievementsContainerButton4Highlight\",\n\t\"AchievementFrameAchievementsContainerButton4Icon\",\n\t\"AchievementFrameAchievementsContainerButton4Shield\",\n\t\"AchievementFrameAchievementsContainerButton4Objectives\",\n\t\"AchievementFrameAchievementsContainerButton4Tracked\",\n\t\"AchievementFrameAchievementsContainerButton5\",\n\t\"AchievementFrameAchievementsContainerButton5Highlight\",\n\t\"AchievementFrameAchievementsContainerButton5Icon\",\n\t\"AchievementFrameAchievementsContainerButton5Shield\",\n\t\"AchievementFrameAchievementsContainerButton5Objectives\",\n\t\"AchievementFrameAchievementsContainerButton5Tracked\",\n\t\"AchievementFrameAchievementsContainerButton6\",\n\t\"AchievementFrameAchievementsContainerButton6Highlight\",\n\t\"AchievementFrameAchievementsContainerButton6Icon\",\n\t\"AchievementFrameAchievementsContainerButton6Shield\",\n\t\"AchievementFrameAchievementsContainerButton6Objectives\",\n\t\"AchievementFrameAchievementsContainerButton6Tracked\",\n\t\"AchievementFrameAchievementsContainerButton7\",\n\t\"AchievementFrameAchievementsContainerButton7Highlight\",\n\t\"AchievementFrameAchievementsContainerButton7Icon\",\n\t\"AchievementFrameAchievementsContainerButton7Shield\",\n\t\"AchievementFrameAchievementsContainerButton7Objectives\",\n\t\"AchievementFrameAchievementsContainerButton7Tracked\",\n\t\"AchievementFrameStats\",\n\t\"AchievementFrameStatsBG\",\n\t\"AchievementFrameStatsContainer\",\n\t\"AchievementFrameStatsContainerScrollChild\",\n\t\"AchievementFrameStatsContainerScrollBar\",\n\t\"AchievementFrameStatsContainerScrollBarScrollUpButton\",\n\t\"AchievementFrameStatsContainerScrollBarScrollDownButton\",\n\t\"AchievementFrameStatsContainerButton1\",\n\t\"AchievementFrameStatsContainerButton2\",\n\t\"AchievementFrameStatsContainerButton3\",\n\t\"AchievementFrameStatsContainerButton4\",\n\t\"AchievementFrameStatsContainerButton5\",\n\t\"AchievementFrameStatsContainerButton6\",\n\t\"AchievementFrameStatsContainerButton7\",\n\t\"AchievementFrameStatsContainerButton8\",\n\t\"AchievementFrameStatsContainerButton9\",\n\t\"AchievementFrameStatsContainerButton10\",\n\t\"AchievementFrameStatsContainerButton11\",\n\t\"AchievementFrameStatsContainerButton12\",\n\t\"AchievementFrameStatsContainerButton13\",\n\t\"AchievementFrameStatsContainerButton14\",\n\t\"AchievementFrameStatsContainerButton15\",\n\t\"AchievementFrameStatsContainerButton16\",\n\t\"AchievementFrameStatsContainerButton17\",\n\t\"AchievementFrameStatsContainerButton18\",\n\t\"AchievementFrameStatsContainerButton19\",\n\t\"AchievementFrameStatsContainerButton20\",\n\t\"AchievementFrameSummary\",\n\t\"AchievementFrameSummaryAchievements\",\n\t\"AchievementFrameSummaryAchievementsHeader\",\n\t\"AchievementFrameSummaryCategories\",\n\t\"AchievementFrameSummaryCategoriesHeader\",\n\t\"AchievementFrameSummaryCategoriesStatusBar\",\n\t\"AchievementFrameSummaryCategoriesCategory1\",\n\t\"AchievementFrameSummaryCategoriesCategory1Button\",\n\t\"AchievementFrameSummaryCategoriesCategory1ButtonHighlight\",\n\t\"AchievementFrameSummaryCategoriesCategory2\",\n\t\"AchievementFrameSummaryCategoriesCategory2Button\",\n\t\"AchievementFrameSummaryCategoriesCategory2ButtonHighlight\",\n\t\"AchievementFrameSummaryCategoriesCategory3\",\n\t\"AchievementFrameSummaryCategoriesCategory3Button\",\n\t\"AchievementFrameSummaryCategoriesCategory3ButtonHighlight\",\n\t\"AchievementFrameSummaryCategoriesCategory4\",\n\t\"AchievementFrameSummaryCategoriesCategory4Button\",\n\t\"AchievementFrameSummaryCategoriesCategory4ButtonHighlight\",\n\t\"AchievementFrameSummaryCategoriesCategory5\",\n\t\"AchievementFrameSummaryCategoriesCategory5Button\",\n\t\"AchievementFrameSummaryCategoriesCategory5ButtonHighlight\",\n\t\"AchievementFrameSummaryCategoriesCategory6\",\n\t\"AchievementFrameSummaryCategoriesCategory6Button\",\n\t\"AchievementFrameSummaryCategoriesCategory6ButtonHighlight\",\n\t\"AchievementFrameSummaryCategoriesCategory7\",\n\t\"AchievementFrameSummaryCategoriesCategory7Button\",\n\t\"AchievementFrameSummaryCategoriesCategory7ButtonHighlight\",\n\t\"AchievementFrameSummaryCategoriesCategory8\",\n\t\"AchievementFrameSummaryCategoriesCategory8Button\",\n\t\"AchievementFrameSummaryCategoriesCategory8ButtonHighlight\",\n\t\"AchievementFrameComparison\",\n\t\"AchievementFrameComparisonHeader\",\n\t\"AchievementFrameComparisonSummary\",\n\t\"AchievementFrameComparisonSummaryPlayer\",\n\t\"AchievementFrameComparisonSummaryPlayerStatusBar\",\n\t\"AchievementFrameComparisonSummaryFriend\",\n\t\"AchievementFrameComparisonSummaryFriendStatusBar\",\n\t\"AchievementFrameComparisonContainer\",\n\t\"AchievementFrameComparisonContainerScrollChild\",\n\t\"AchievementFrameComparisonContainerScrollBar\",\n\t\"AchievementFrameComparisonContainerScrollBarScrollUpButton\",\n\t\"AchievementFrameComparisonContainerScrollBarScrollDownButton\",\n\t\"AchievementFrameComparisonStatsContainer\",\n\t\"AchievementFrameComparisonStatsContainerScrollChild\",\n\t\"AchievementFrameComparisonStatsContainerScrollBar\",\n\t\"AchievementFrameComparisonStatsContainerScrollBarScrollUpButton\",\n\t\"AchievementFrameComparisonStatsContainerScrollBarScrollDownButton\",\n\t\"AchievementFrameComparisonContainerButton1\",\n\t\"AchievementFrameComparisonContainerButton1Player\",\n\t\"AchievementFrameComparisonContainerButton1PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton1PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton1Friend\",\n\t\"AchievementFrameComparisonContainerButton1FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton1FriendShield\",\n\t\"AchievementFrameComparisonContainerButton2\",\n\t\"AchievementFrameComparisonContainerButton2Player\",\n\t\"AchievementFrameComparisonContainerButton2PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton2PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton2Friend\",\n\t\"AchievementFrameComparisonContainerButton2FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton2FriendShield\",\n\t\"AchievementFrameComparisonContainerButton3\",\n\t\"AchievementFrameComparisonContainerButton3Player\",\n\t\"AchievementFrameComparisonContainerButton3PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton3PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton3Friend\",\n\t\"AchievementFrameComparisonContainerButton3FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton3FriendShield\",\n\t\"AchievementFrameComparisonContainerButton4\",\n\t\"AchievementFrameComparisonContainerButton4Player\",\n\t\"AchievementFrameComparisonContainerButton4PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton4PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton4Friend\",\n\t\"AchievementFrameComparisonContainerButton4FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton4FriendShield\",\n\t\"AchievementFrameComparisonContainerButton5\",\n\t\"AchievementFrameComparisonContainerButton5Player\",\n\t\"AchievementFrameComparisonContainerButton5PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton5PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton5Friend\",\n\t\"AchievementFrameComparisonContainerButton5FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton5FriendShield\",\n\t\"AchievementFrameComparisonContainerButton6\",\n\t\"AchievementFrameComparisonContainerButton6Player\",\n\t\"AchievementFrameComparisonContainerButton6PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton6PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton6Friend\",\n\t\"AchievementFrameComparisonContainerButton6FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton6FriendShield\",\n\t\"AchievementFrameComparisonContainerButton7\",\n\t\"AchievementFrameComparisonContainerButton7Player\",\n\t\"AchievementFrameComparisonContainerButton7PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton7PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton7Friend\",\n\t\"AchievementFrameComparisonContainerButton7FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton7FriendShield\",\n\t\"AchievementFrameComparisonContainerButton8\",\n\t\"AchievementFrameComparisonContainerButton8Player\",\n\t\"AchievementFrameComparisonContainerButton8PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton8PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton8Friend\",\n\t\"AchievementFrameComparisonContainerButton8FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton8FriendShield\",\n\t\"AchievementFrameComparisonContainerButton9\",\n\t\"AchievementFrameComparisonContainerButton9Player\",\n\t\"AchievementFrameComparisonContainerButton9PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton9PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton9Friend\",\n\t\"AchievementFrameComparisonContainerButton9FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton9FriendShield\",\n\t\"AchievementFrameComparisonContainerButton10\",\n\t\"AchievementFrameComparisonContainerButton10Player\",\n\t\"AchievementFrameComparisonContainerButton10PlayerIcon\",\n\t\"AchievementFrameComparisonContainerButton10PlayerShield\",\n\t\"AchievementFrameComparisonContainerButton10Friend\",\n\t\"AchievementFrameComparisonContainerButton10FriendIcon\",\n\t\"AchievementFrameComparisonContainerButton10FriendShield\",\n\t\"AchievementFrameComparisonStatsContainerButton1\",\n\t\"AchievementFrameComparisonStatsContainerButton1Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton2\",\n\t\"AchievementFrameComparisonStatsContainerButton2Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton3\",\n\t\"AchievementFrameComparisonStatsContainerButton3Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton4\",\n\t\"AchievementFrameComparisonStatsContainerButton4Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton5\",\n\t\"AchievementFrameComparisonStatsContainerButton5Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton6\",\n\t\"AchievementFrameComparisonStatsContainerButton6Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton7\",\n\t\"AchievementFrameComparisonStatsContainerButton7Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton8\",\n\t\"AchievementFrameComparisonStatsContainerButton8Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton9\",\n\t\"AchievementFrameComparisonStatsContainerButton9Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton10\",\n\t\"AchievementFrameComparisonStatsContainerButton10Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton11\",\n\t\"AchievementFrameComparisonStatsContainerButton11Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton12\",\n\t\"AchievementFrameComparisonStatsContainerButton12Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton13\",\n\t\"AchievementFrameComparisonStatsContainerButton13Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton14\",\n\t\"AchievementFrameComparisonStatsContainerButton14Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton15\",\n\t\"AchievementFrameComparisonStatsContainerButton15Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton16\",\n\t\"AchievementFrameComparisonStatsContainerButton16Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton17\",\n\t\"AchievementFrameComparisonStatsContainerButton17Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton18\",\n\t\"AchievementFrameComparisonStatsContainerButton18Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton19\",\n\t\"AchievementFrameComparisonStatsContainerButton19Mouseover\",\n\t\"AchievementFrameComparisonStatsContainerButton20\",\n\t\"AchievementFrameComparisonStatsContainerButton20Mouseover\",\n\t\"AchievementFrameCloseButton\",\n\t\"AchievementFrameTab1\",\n\t\"AchievementFrameTab2\",\n\t\"AchievementFrameFilterDropDown\",\n\t\"AchievementFrameFilterDropDownButton\",\n\t-- widgets: Blizzard_AchievementUI\n\t\"AchievementFrameAchievementsBackground\",\n\t\"AchievementFrameAchievementsContainerButton1Background\",\n\t\"AchievementFrameAchievementsContainerButton1BottomLeftTsunami\",\n\t\"AchievementFrameAchievementsContainerButton1BottomRightTsunami\",\n\t\"AchievementFrameAchievementsContainerButton1BottomTsunami1\",\n\t\"AchievementFrameAchievementsContainerButton1Check\",\n\t\"AchievementFrameAchievementsContainerButton1DateCompleted\",\n\t\"AchievementFrameAchievementsContainerButton1Description\",\n\t\"AchievementFrameAchievementsContainerButton1Glow\",\n\t\"AchievementFrameAchievementsContainerButton1HiddenDescription\",\n\t\"AchievementFrameAchievementsContainerButton1HighlightBottom\",\n\t\"AchievementFrameAchievementsContainerButton1HighlightBottomLeft\",\n\t\"AchievementFrameAchievementsContainerButton1HighlightBottomRight\",\n\t\"AchievementFrameAchievementsContainerButton1HighlightLeft\",\n\t\"AchievementFrameAchievementsContainerButton1HighlightRight\",\n\t\"AchievementFrameAchievementsContainerButton1HighlightTop\",\n\t\"AchievementFrameAchievementsContainerButton1HighlightTopLeft\",\n\t\"AchievementFrameAchievementsContainerButton1HighlightTopRight\",\n\t\"AchievementFrameAchievementsContainerButton1IconBackfill\",\n\t\"AchievementFrameAchievementsContainerButton1IconBling\",\n\t\"AchievementFrameAchievementsContainerButton1IconOverlay\",\n\t\"AchievementFrameAchievementsContainerButton1IconTexture\",\n\t\"AchievementFrameAchievementsContainerButton1Label\",\n\t\"AchievementFrameAchievementsContainerButton1PlusMinus\",\n\t\"AchievementFrameAchievementsContainerButton1Reward\",\n\t\"AchievementFrameAchievementsContainerButton1RewardBackground\",\n\t\"AchievementFrameAchievementsContainerButton1ShieldIcon\",\n\t\"AchievementFrameAchievementsContainerButton1ShieldPoints\",\n\t\"AchievementFrameAchievementsContainerButton1TitleBackground\",\n\t\"AchievementFrameAchievementsContainerButton1TopLeftTsunami\",\n\t\"AchievementFrameAchievementsContainerButton1TopRightTsunami\",\n\t\"AchievementFrameAchievementsContainerButton1TopTsunami1\",\n\t\"AchievementFrameAchievementsContainerButton1TrackedText\",\n\t\"AchievementFrameAchievementsContainerButton2Background\",\n\t\"AchievementFrameAchievementsContainerButton2BottomLeftTsunami\",\n\t\"AchievementFrameAchievementsContainerButton2BottomRightTsunami\",\n\t\"AchievementFrameAchievementsContainerButton2BottomTsunami1\",\n\t\"AchievementFrameAchievementsContainerButton2Check\",\n\t\"AchievementFrameAchievementsContainerButton2DateCompleted\",\n\t\"AchievementFrameAchievementsContainerButton2Description\",\n\t\"AchievementFrameAchievementsContainerButton2Glow\",\n\t\"AchievementFrameAchievementsContainerButton2HiddenDescription\",\n\t\"AchievementFrameAchievementsContainerButton2HighlightBottom\",\n\t\"AchievementFrameAchievementsContainerButton2HighlightBottomLeft\",\n\t\"AchievementFrameAchievementsContainerButton2HighlightBottomRight\",\n\t\"AchievementFrameAchievementsContainerButton2HighlightLeft\",\n\t\"AchievementFrameAchievementsContainerButton2HighlightRight\",\n\t\"AchievementFrameAchievementsContainerButton2HighlightTop\",\n\t\"AchievementFrameAchievementsContainerButton2HighlightTopLeft\",\n\t\"AchievementFrameAchievementsContainerButton2HighlightTopRight\",\n\t\"AchievementFrameAchievementsContainerButton2IconBackfill\",\n\t\"AchievementFrameAchievementsContainerButton2IconBling\",\n\t\"AchievementFrameAchievementsContainerButton2IconOverlay\",\n\t\"AchievementFrameAchievementsContainerButton2IconTexture\",\n\t\"AchievementFrameAchievementsContainerButton2Label\",\n\t\"AchievementFrameAchievementsContainerButton2PlusMinus\",\n\t\"AchievementFrameAchievementsContainerButton2Reward\",\n\t\"AchievementFrameAchievementsContainerButton2RewardBackground\",\n\t\"AchievementFrameAchievementsContainerButton2ShieldIcon\",\n\t\"AchievementFrameAchievementsContainerButton2ShieldPoints\",\n\t\"AchievementFrameAchievementsContainerButton2TitleBackground\",\n\t\"AchievementFrameAchievementsContainerButton2TopLeftTsunami\",\n\t\"AchievementFrameAchievementsContainerButton2TopRightTsunami\",\n\t\"AchievementFrameAchievementsContainerButton2TopTsunami1\",\n\t\"AchievementFrameAchievementsContainerButton2TrackedText\",\n\t\"AchievementFrameAchievementsContainerButton3Background\",\n\t\"AchievementFrameAchievementsContainerButton3BottomLeftTsunami\",\n\t\"AchievementFrameAchievementsContainerButton3BottomRightTsunami\",\n\t\"AchievementFrameAchievementsContainerButton3BottomTsunami1\",\n\t\"AchievementFrameAchievementsContainerButton3Check\",\n\t\"AchievementFrameAchievementsContainerButton3DateCompleted\",\n\t\"AchievementFrameAchievementsContainerButton3Description\",\n\t\"AchievementFrameAchievementsContainerButton3Glow\",\n\t\"AchievementFrameAchievementsContainerButton3HiddenDescription\",\n\t\"AchievementFrameAchievementsContainerButton3HighlightBottom\",\n\t\"AchievementFrameAchievementsContainerButton3HighlightBottomLeft\",\n\t\"AchievementFrameAchievementsContainerButton3HighlightBottomRight\",\n\t\"AchievementFrameAchievementsContainerButton3HighlightLeft\",\n\t\"AchievementFrameAchievementsContainerButton3HighlightRight\",\n\t\"AchievementFrameAchievementsContainerButton3HighlightTop\",\n\t\"AchievementFrameAchievementsContainerButton3HighlightTopLeft\",\n\t\"AchievementFrameAchievementsContainerButton3HighlightTopRight\",\n\t\"AchievementFrameAchievementsContainerButton3IconBackfill\",\n\t\"AchievementFrameAchievementsContainerButton3IconBling\",\n\t\"AchievementFrameAchievementsContainerButton3IconOverlay\",\n\t\"AchievementFrameAchievementsContainerButton3IconTexture\",\n\t\"AchievementFrameAchievementsContainerButton3Label\",\n\t\"AchievementFrameAchievementsContainerButton3PlusMinus\",\n\t\"AchievementFrameAchievementsContainerButton3Reward\",\n\t\"AchievementFrameAchievementsContainerButton3RewardBackground\",\n\t\"AchievementFrameAchievementsContainerButton3ShieldIcon\",\n\t\"AchievementFrameAchievementsContainerButton3ShieldPoints\",\n\t\"AchievementFrameAchievementsContainerButton3TitleBackground\",\n\t\"AchievementFrameAchievementsContainerButton3TopLeftTsunami\",\n\t\"AchievementFrameAchievementsContainerButton3TopRightTsunami\",\n\t\"AchievementFrameAchievementsContainerButton3TopTsunami1\",\n\t\"AchievementFrameAchievementsContainerButton3TrackedText\",\n\t\"AchievementFrameAchievementsContainerButton4Background\",\n\t\"AchievementFrameAchievementsContainerButton4BottomLeftTsunami\",\n\t\"AchievementFrameAchievementsContainerButton4BottomRightTsunami\",\n\t\"AchievementFrameAchievementsContainerButton4BottomTsunami1\",\n\t\"AchievementFrameAchievementsContainerButton4Check\",\n\t\"AchievementFrameAchievementsContainerButton4DateCompleted\",\n\t\"AchievementFrameAchievementsContainerButton4Description\",\n\t\"AchievementFrameAchievementsContainerButton4Glow\",\n\t\"AchievementFrameAchievementsContainerButton4HiddenDescription\",\n\t\"AchievementFrameAchievementsContainerButton4HighlightBottom\",\n\t\"AchievementFrameAchievementsContainerButton4HighlightBottomLeft\",\n\t\"AchievementFrameAchievementsContainerButton4HighlightBottomRight\",\n\t\"AchievementFrameAchievementsContainerButton4HighlightLeft\",\n\t\"AchievementFrameAchievementsContainerButton4HighlightRight\",\n\t\"AchievementFrameAchievementsContainerButton4HighlightTop\",\n\t\"AchievementFrameAchievementsContainerButton4HighlightTopLeft\",\n\t\"AchievementFrameAchievementsContainerButton4HighlightTopRight\",\n\t\"AchievementFrameAchievementsContainerButton4IconBackfill\",\n\t\"AchievementFrameAchievementsContainerButton4IconBling\",\n\t\"AchievementFrameAchievementsContainerButton4IconOverlay\",\n\t\"AchievementFrameAchievementsContainerButton4IconTexture\",\n\t\"AchievementFrameAchievementsContainerButton4Label\",\n\t\"AchievementFrameAchievementsContainerButton4PlusMinus\",\n\t\"AchievementFrameAchievementsContainerButton4Reward\",\n\t\"AchievementFrameAchievementsContainerButton4RewardBackground\",\n\t\"AchievementFrameAchievementsContainerButton4ShieldIcon\",\n\t\"AchievementFrameAchievementsContainerButton4ShieldPoints\",\n\t\"AchievementFrameAchievementsContainerButton4TitleBackground\",\n\t\"AchievementFrameAchievementsContainerButton4TopLeftTsunami\",\n\t\"AchievementFrameAchievementsContainerButton4TopRightTsunami\",\n\t\"AchievementFrameAchievementsContainerButton4TopTsunami1\",\n\t\"AchievementFrameAchievementsContainerButton4TrackedText\",\n\t\"AchievementFrameAchievementsContainerButton5Background\",\n\t\"AchievementFrameAchievementsContainerButton5BottomLeftTsunami\",\n\t\"AchievementFrameAchievementsContainerButton5BottomRightTsunami\",\n\t\"AchievementFrameAchievementsContainerButton5BottomTsunami1\",\n\t\"AchievementFrameAchievementsContainerButton5Check\",\n\t\"AchievementFrameAchievementsContainerButton5DateCompleted\",\n\t\"AchievementFrameAchievementsContainerButton5Description\",\n\t\"AchievementFrameAchievementsContainerButton5Glow\",\n\t\"AchievementFrameAchievementsContainerButton5HiddenDescription\",\n\t\"AchievementFrameAchievementsContainerButton5HighlightBottom\",\n\t\"AchievementFrameAchievementsContainerButton5HighlightBottomLeft\",\n\t\"AchievementFrameAchievementsContainerButton5HighlightBottomRight\",\n\t\"AchievementFrameAchievementsContainerButton5HighlightLeft\",\n\t\"AchievementFrameAchievementsContainerButton5HighlightRight\",\n\t\"AchievementFrameAchievementsContainerButton5HighlightTop\",\n\t\"AchievementFrameAchievementsContainerButton5HighlightTopLeft\",\n\t\"AchievementFrameAchievementsContainerButton5HighlightTopRight\",\n\t\"AchievementFrameAchievementsContainerButton5IconBackfill\",\n\t\"AchievementFrameAchievementsContainerButton5IconBling\",\n\t\"AchievementFrameAchievementsContainerButton5IconOverlay\",\n\t\"AchievementFrameAchievementsContainerButton5IconTexture\",\n\t\"AchievementFrameAchievementsContainerButton5Label\",\n\t\"AchievementFrameAchievementsContainerButton5PlusMinus\",\n\t\"AchievementFrameAchievementsContainerButton5Reward\",\n\t\"AchievementFrameAchievementsContainerButton5RewardBackground\",\n\t\"AchievementFrameAchievementsContainerButton5ShieldIcon\",\n\t\"AchievementFrameAchievementsContainerButton5ShieldPoints\",\n\t\"AchievementFrameAchievementsContainerButton5TitleBackground\",\n\t\"AchievementFrameAchievementsContainerButton5TopLeftTsunami\",\n\t\"AchievementFrameAchievementsContainerButton5TopRightTsunami\",\n\t\"AchievementFrameAchievementsContainerButton5TopTsunami1\",\n\t\"AchievementFrameAchievementsContainerButton5TrackedText\",\n\t\"AchievementFrameAchievementsContainerButton6Background\",\n\t\"AchievementFrameAchievementsContainerButton6BottomLeftTsunami\",\n\t\"AchievementFrameAchievementsContainerButton6BottomRightTsunami\",\n\t\"AchievementFrameAchievementsContainerButton6BottomTsunami1\",\n\t\"AchievementFrameAchievementsContainerButton6Check\",\n\t\"AchievementFrameAchievementsContainerButton6DateCompleted\",\n\t\"AchievementFrameAchievementsContainerButton6Description\",\n\t\"AchievementFrameAchievementsContainerButton6Glow\",\n\t\"AchievementFrameAchievementsContainerButton6HiddenDescription\",\n\t\"AchievementFrameAchievementsContainerButton6HighlightBottom\",\n\t\"AchievementFrameAchievementsContainerButton6HighlightBottomLeft\",\n\t\"AchievementFrameAchievementsContainerButton6HighlightBottomRight\",\n\t\"AchievementFrameAchievementsContainerButton6HighlightLeft\",\n\t\"AchievementFrameAchievementsContainerButton6HighlightRight\",\n\t\"AchievementFrameAchievementsContainerButton6HighlightTop\",\n\t\"AchievementFrameAchievementsContainerButton6HighlightTopLeft\",\n\t\"AchievementFrameAchievementsContainerButton6HighlightTopRight\",\n\t\"AchievementFrameAchievementsContainerButton6IconBackfill\",\n\t\"AchievementFrameAchievementsContainerButton6IconBling\",\n\t\"AchievementFrameAchievementsContainerButton6IconOverlay\",\n\t\"AchievementFrameAchievementsContainerButton6IconTexture\",\n\t\"AchievementFrameAchievementsContainerButton6Label\",\n\t\"AchievementFrameAchievementsContainerButton6PlusMinus\",\n\t\"AchievementFrameAchievementsContainerButton6Reward\",\n\t\"AchievementFrameAchievementsContainerButton6RewardBackground\",\n\t\"AchievementFrameAchievementsContainerButton6ShieldIcon\",\n\t\"AchievementFrameAchievementsContainerButton6ShieldPoints\",\n\t\"AchievementFrameAchievementsContainerButton6TitleBackground\",\n\t\"AchievementFrameAchievementsContainerButton6TopLeftTsunami\",\n\t\"AchievementFrameAchievementsContainerButton6TopRightTsunami\",\n\t\"AchievementFrameAchievementsContainerButton6TopTsunami1\",\n\t\"AchievementFrameAchievementsContainerButton6TrackedText\",\n\t\"AchievementFrameAchievementsContainerButton7Background\",\n\t\"AchievementFrameAchievementsContainerButton7BottomLeftTsunami\",\n\t\"AchievementFrameAchievementsContainerButton7BottomRightTsunami\",\n\t\"AchievementFrameAchievementsContainerButton7BottomTsunami1\",\n\t\"AchievementFrameAchievementsContainerButton7Check\",\n\t\"AchievementFrameAchievementsContainerButton7DateCompleted\",\n\t\"AchievementFrameAchievementsContainerButton7Description\",\n\t\"AchievementFrameAchievementsContainerButton7Glow\",\n\t\"AchievementFrameAchievementsContainerButton7HiddenDescription\",\n\t\"AchievementFrameAchievementsContainerButton7HighlightBottom\",\n\t\"AchievementFrameAchievementsContainerButton7HighlightBottomLeft\",\n\t\"AchievementFrameAchievementsContainerButton7HighlightBottomRight\",\n\t\"AchievementFrameAchievementsContainerButton7HighlightLeft\",\n\t\"AchievementFrameAchievementsContainerButton7HighlightRight\",\n\t\"AchievementFrameAchievementsContainerButton7HighlightTop\",\n\t\"AchievementFrameAchievementsContainerButton7HighlightTopLeft\",\n\t\"AchievementFrameAchievementsContainerButton7HighlightTopRight\",\n\t\"AchievementFrameAchievementsContainerButton7IconBackfill\",\n\t\"AchievementFrameAchievementsContainerButton7IconBling\",\n\t\"AchievementFrameAchievementsContainerButton7IconOverlay\",\n\t\"AchievementFrameAchievementsContainerButton7IconTexture\",\n\t\"AchievementFrameAchievementsContainerButton7Label\",\n\t\"AchievementFrameAchievementsContainerButton7PlusMinus\",\n\t\"AchievementFrameAchievementsContainerButton7Reward\",\n\t\"AchievementFrameAchievementsContainerButton7RewardBackground\",\n\t\"AchievementFrameAchievementsContainerButton7ShieldIcon\",\n\t\"AchievementFrameAchievementsContainerButton7ShieldPoints\",\n\t\"AchievementFrameAchievementsContainerButton7TitleBackground\",\n\t\"AchievementFrameAchievementsContainerButton7TopLeftTsunami\",\n\t\"AchievementFrameAchievementsContainerButton7TopRightTsunami\",\n\t\"AchievementFrameAchievementsContainerButton7TopTsunami1\",\n\t\"AchievementFrameAchievementsContainerButton7TrackedText\",\n\t\"AchievementFrameAchievementsContainerScrollBarBG\",\n\t\"AchievementFrameAchievementsContainerScrollBarBottom\",\n\t\"AchievementFrameAchievementsContainerScrollBarMiddle\",\n\t\"AchievementFrameAchievementsContainerScrollBarThumbTexture\",\n\t\"AchievementFrameAchievementsContainerScrollBarTop\",\n\t\"AchievementFrameAchievementsFeatOfStrengthText\",\n\t\"AchievementFrameBackground\",\n\t\"AchievementFrameCategoriesBG\",\n\t\"AchievementFrameCategoriesContainerScrollBarBG\",\n\t\"AchievementFrameCategoriesContainerScrollBarBottom\",\n\t\"AchievementFrameCategoriesContainerScrollBarMiddle\",\n\t\"AchievementFrameCategoriesContainerScrollBarThumbTexture\",\n\t\"AchievementFrameCategoriesContainerScrollBarTop\",\n\t\"AchievementFrameComparisonBackground\",\n\t\"AchievementFrameComparisonContainerButton10FriendBackground\",\n\t\"AchievementFrameComparisonContainerButton10FriendGlow\",\n\t\"AchievementFrameComparisonContainerButton10FriendIconBling\",\n\t\"AchievementFrameComparisonContainerButton10FriendIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton10FriendIconTexture\",\n\t\"AchievementFrameComparisonContainerButton10FriendShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton10FriendShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton10FriendStatus\",\n\t\"AchievementFrameComparisonContainerButton10FriendTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton10PlayerBackground\",\n\t\"AchievementFrameComparisonContainerButton10PlayerDateCompleted\",\n\t\"AchievementFrameComparisonContainerButton10PlayerDescription\",\n\t\"AchievementFrameComparisonContainerButton10PlayerGlow\",\n\t\"AchievementFrameComparisonContainerButton10PlayerIconBling\",\n\t\"AchievementFrameComparisonContainerButton10PlayerIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton10PlayerIconTexture\",\n\t\"AchievementFrameComparisonContainerButton10PlayerLabel\",\n\t\"AchievementFrameComparisonContainerButton10PlayerShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton10PlayerShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton10PlayerTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton1FriendBackground\",\n\t\"AchievementFrameComparisonContainerButton1FriendGlow\",\n\t\"AchievementFrameComparisonContainerButton1FriendIconBling\",\n\t\"AchievementFrameComparisonContainerButton1FriendIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton1FriendIconTexture\",\n\t\"AchievementFrameComparisonContainerButton1FriendShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton1FriendShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton1FriendStatus\",\n\t\"AchievementFrameComparisonContainerButton1FriendTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton1PlayerBackground\",\n\t\"AchievementFrameComparisonContainerButton1PlayerDateCompleted\",\n\t\"AchievementFrameComparisonContainerButton1PlayerDescription\",\n\t\"AchievementFrameComparisonContainerButton1PlayerGlow\",\n\t\"AchievementFrameComparisonContainerButton1PlayerIconBling\",\n\t\"AchievementFrameComparisonContainerButton1PlayerIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton1PlayerIconTexture\",\n\t\"AchievementFrameComparisonContainerButton1PlayerLabel\",\n\t\"AchievementFrameComparisonContainerButton1PlayerShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton1PlayerShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton1PlayerTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton2FriendBackground\",\n\t\"AchievementFrameComparisonContainerButton2FriendGlow\",\n\t\"AchievementFrameComparisonContainerButton2FriendIconBling\",\n\t\"AchievementFrameComparisonContainerButton2FriendIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton2FriendIconTexture\",\n\t\"AchievementFrameComparisonContainerButton2FriendShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton2FriendShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton2FriendStatus\",\n\t\"AchievementFrameComparisonContainerButton2FriendTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton2PlayerBackground\",\n\t\"AchievementFrameComparisonContainerButton2PlayerDateCompleted\",\n\t\"AchievementFrameComparisonContainerButton2PlayerDescription\",\n\t\"AchievementFrameComparisonContainerButton2PlayerGlow\",\n\t\"AchievementFrameComparisonContainerButton2PlayerIconBling\",\n\t\"AchievementFrameComparisonContainerButton2PlayerIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton2PlayerIconTexture\",\n\t\"AchievementFrameComparisonContainerButton2PlayerLabel\",\n\t\"AchievementFrameComparisonContainerButton2PlayerShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton2PlayerShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton2PlayerTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton3FriendBackground\",\n\t\"AchievementFrameComparisonContainerButton3FriendGlow\",\n\t\"AchievementFrameComparisonContainerButton3FriendIconBling\",\n\t\"AchievementFrameComparisonContainerButton3FriendIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton3FriendIconTexture\",\n\t\"AchievementFrameComparisonContainerButton3FriendShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton3FriendShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton3FriendStatus\",\n\t\"AchievementFrameComparisonContainerButton3FriendTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton3PlayerBackground\",\n\t\"AchievementFrameComparisonContainerButton3PlayerDateCompleted\",\n\t\"AchievementFrameComparisonContainerButton3PlayerDescription\",\n\t\"AchievementFrameComparisonContainerButton3PlayerGlow\",\n\t\"AchievementFrameComparisonContainerButton3PlayerIconBling\",\n\t\"AchievementFrameComparisonContainerButton3PlayerIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton3PlayerIconTexture\",\n\t\"AchievementFrameComparisonContainerButton3PlayerLabel\",\n\t\"AchievementFrameComparisonContainerButton3PlayerShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton3PlayerShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton3PlayerTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton4FriendBackground\",\n\t\"AchievementFrameComparisonContainerButton4FriendGlow\",\n\t\"AchievementFrameComparisonContainerButton4FriendIconBling\",\n\t\"AchievementFrameComparisonContainerButton4FriendIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton4FriendIconTexture\",\n\t\"AchievementFrameComparisonContainerButton4FriendShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton4FriendShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton4FriendStatus\",\n\t\"AchievementFrameComparisonContainerButton4FriendTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton4PlayerBackground\",\n\t\"AchievementFrameComparisonContainerButton4PlayerDateCompleted\",\n\t\"AchievementFrameComparisonContainerButton4PlayerDescription\",\n\t\"AchievementFrameComparisonContainerButton4PlayerGlow\",\n\t\"AchievementFrameComparisonContainerButton4PlayerIconBling\",\n\t\"AchievementFrameComparisonContainerButton4PlayerIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton4PlayerIconTexture\",\n\t\"AchievementFrameComparisonContainerButton4PlayerLabel\",\n\t\"AchievementFrameComparisonContainerButton4PlayerShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton4PlayerShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton4PlayerTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton5FriendBackground\",\n\t\"AchievementFrameComparisonContainerButton5FriendGlow\",\n\t\"AchievementFrameComparisonContainerButton5FriendIconBling\",\n\t\"AchievementFrameComparisonContainerButton5FriendIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton5FriendIconTexture\",\n\t\"AchievementFrameComparisonContainerButton5FriendShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton5FriendShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton5FriendStatus\",\n\t\"AchievementFrameComparisonContainerButton5FriendTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton5PlayerBackground\",\n\t\"AchievementFrameComparisonContainerButton5PlayerDateCompleted\",\n\t\"AchievementFrameComparisonContainerButton5PlayerDescription\",\n\t\"AchievementFrameComparisonContainerButton5PlayerGlow\",\n\t\"AchievementFrameComparisonContainerButton5PlayerIconBling\",\n\t\"AchievementFrameComparisonContainerButton5PlayerIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton5PlayerIconTexture\",\n\t\"AchievementFrameComparisonContainerButton5PlayerLabel\",\n\t\"AchievementFrameComparisonContainerButton5PlayerShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton5PlayerShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton5PlayerTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton6FriendBackground\",\n\t\"AchievementFrameComparisonContainerButton6FriendGlow\",\n\t\"AchievementFrameComparisonContainerButton6FriendIconBling\",\n\t\"AchievementFrameComparisonContainerButton6FriendIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton6FriendIconTexture\",\n\t\"AchievementFrameComparisonContainerButton6FriendShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton6FriendShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton6FriendStatus\",\n\t\"AchievementFrameComparisonContainerButton6FriendTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton6PlayerBackground\",\n\t\"AchievementFrameComparisonContainerButton6PlayerDateCompleted\",\n\t\"AchievementFrameComparisonContainerButton6PlayerDescription\",\n\t\"AchievementFrameComparisonContainerButton6PlayerGlow\",\n\t\"AchievementFrameComparisonContainerButton6PlayerIconBling\",\n\t\"AchievementFrameComparisonContainerButton6PlayerIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton6PlayerIconTexture\",\n\t\"AchievementFrameComparisonContainerButton6PlayerLabel\",\n\t\"AchievementFrameComparisonContainerButton6PlayerShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton6PlayerShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton6PlayerTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton7FriendBackground\",\n\t\"AchievementFrameComparisonContainerButton7FriendGlow\",\n\t\"AchievementFrameComparisonContainerButton7FriendIconBling\",\n\t\"AchievementFrameComparisonContainerButton7FriendIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton7FriendIconTexture\",\n\t\"AchievementFrameComparisonContainerButton7FriendShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton7FriendShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton7FriendStatus\",\n\t\"AchievementFrameComparisonContainerButton7FriendTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton7PlayerBackground\",\n\t\"AchievementFrameComparisonContainerButton7PlayerDateCompleted\",\n\t\"AchievementFrameComparisonContainerButton7PlayerDescription\",\n\t\"AchievementFrameComparisonContainerButton7PlayerGlow\",\n\t\"AchievementFrameComparisonContainerButton7PlayerIconBling\",\n\t\"AchievementFrameComparisonContainerButton7PlayerIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton7PlayerIconTexture\",\n\t\"AchievementFrameComparisonContainerButton7PlayerLabel\",\n\t\"AchievementFrameComparisonContainerButton7PlayerShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton7PlayerShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton7PlayerTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton8FriendBackground\",\n\t\"AchievementFrameComparisonContainerButton8FriendGlow\",\n\t\"AchievementFrameComparisonContainerButton8FriendIconBling\",\n\t\"AchievementFrameComparisonContainerButton8FriendIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton8FriendIconTexture\",\n\t\"AchievementFrameComparisonContainerButton8FriendShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton8FriendShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton8FriendStatus\",\n\t\"AchievementFrameComparisonContainerButton8FriendTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton8PlayerBackground\",\n\t\"AchievementFrameComparisonContainerButton8PlayerDateCompleted\",\n\t\"AchievementFrameComparisonContainerButton8PlayerDescription\",\n\t\"AchievementFrameComparisonContainerButton8PlayerGlow\",\n\t\"AchievementFrameComparisonContainerButton8PlayerIconBling\",\n\t\"AchievementFrameComparisonContainerButton8PlayerIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton8PlayerIconTexture\",\n\t\"AchievementFrameComparisonContainerButton8PlayerLabel\",\n\t\"AchievementFrameComparisonContainerButton8PlayerShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton8PlayerShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton8PlayerTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton9FriendBackground\",\n\t\"AchievementFrameComparisonContainerButton9FriendGlow\",\n\t\"AchievementFrameComparisonContainerButton9FriendIconBling\",\n\t\"AchievementFrameComparisonContainerButton9FriendIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton9FriendIconTexture\",\n\t\"AchievementFrameComparisonContainerButton9FriendShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton9FriendShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton9FriendStatus\",\n\t\"AchievementFrameComparisonContainerButton9FriendTitleBackground\",\n\t\"AchievementFrameComparisonContainerButton9PlayerBackground\",\n\t\"AchievementFrameComparisonContainerButton9PlayerDateCompleted\",\n\t\"AchievementFrameComparisonContainerButton9PlayerDescription\",\n\t\"AchievementFrameComparisonContainerButton9PlayerGlow\",\n\t\"AchievementFrameComparisonContainerButton9PlayerIconBling\",\n\t\"AchievementFrameComparisonContainerButton9PlayerIconOverlay\",\n\t\"AchievementFrameComparisonContainerButton9PlayerIconTexture\",\n\t\"AchievementFrameComparisonContainerButton9PlayerLabel\",\n\t\"AchievementFrameComparisonContainerButton9PlayerShieldIcon\",\n\t\"AchievementFrameComparisonContainerButton9PlayerShieldPoints\",\n\t\"AchievementFrameComparisonContainerButton9PlayerTitleBackground\",\n\t\"AchievementFrameComparisonContainerScrollBarBG\",\n\t\"AchievementFrameComparisonContainerScrollBarBottom\",\n\t\"AchievementFrameComparisonContainerScrollBarMiddle\",\n\t\"AchievementFrameComparisonContainerScrollBarThumbTexture\",\n\t\"AchievementFrameComparisonContainerScrollBarTop\",\n\t\"AchievementFrameComparisonDark\",\n\t\"AchievementFrameComparisonHeaderBG\",\n\t\"AchievementFrameComparisonHeaderName\",\n\t\"AchievementFrameComparisonHeaderPoints\",\n\t\"AchievementFrameComparisonHeaderPortrait\",\n\t\"AchievementFrameComparisonHeaderShield\",\n\t\"AchievementFrameComparisonStatsContainerButton10BG\",\n\t\"AchievementFrameComparisonStatsContainerButton10ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton10HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton10HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton10HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton10HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton10HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton10HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton10Text\",\n\t\"AchievementFrameComparisonStatsContainerButton10Title\",\n\t\"AchievementFrameComparisonStatsContainerButton10Value\",\n\t\"AchievementFrameComparisonStatsContainerButton11BG\",\n\t\"AchievementFrameComparisonStatsContainerButton11ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton11HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton11HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton11HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton11HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton11HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton11HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton11Text\",\n\t\"AchievementFrameComparisonStatsContainerButton11Title\",\n\t\"AchievementFrameComparisonStatsContainerButton11Value\",\n\t\"AchievementFrameComparisonStatsContainerButton12BG\",\n\t\"AchievementFrameComparisonStatsContainerButton12ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton12HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton12HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton12HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton12HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton12HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton12HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton12Text\",\n\t\"AchievementFrameComparisonStatsContainerButton12Title\",\n\t\"AchievementFrameComparisonStatsContainerButton12Value\",\n\t\"AchievementFrameComparisonStatsContainerButton13BG\",\n\t\"AchievementFrameComparisonStatsContainerButton13ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton13HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton13HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton13HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton13HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton13HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton13HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton13Text\",\n\t\"AchievementFrameComparisonStatsContainerButton13Title\",\n\t\"AchievementFrameComparisonStatsContainerButton13Value\",\n\t\"AchievementFrameComparisonStatsContainerButton14BG\",\n\t\"AchievementFrameComparisonStatsContainerButton14ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton14HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton14HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton14HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton14HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton14HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton14HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton14Text\",\n\t\"AchievementFrameComparisonStatsContainerButton14Title\",\n\t\"AchievementFrameComparisonStatsContainerButton14Value\",\n\t\"AchievementFrameComparisonStatsContainerButton15BG\",\n\t\"AchievementFrameComparisonStatsContainerButton15ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton15HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton15HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton15HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton15HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton15HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton15HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton15Text\",\n\t\"AchievementFrameComparisonStatsContainerButton15Title\",\n\t\"AchievementFrameComparisonStatsContainerButton15Value\",\n\t\"AchievementFrameComparisonStatsContainerButton16BG\",\n\t\"AchievementFrameComparisonStatsContainerButton16ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton16HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton16HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton16HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton16HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton16HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton16HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton16Text\",\n\t\"AchievementFrameComparisonStatsContainerButton16Title\",\n\t\"AchievementFrameComparisonStatsContainerButton16Value\",\n\t\"AchievementFrameComparisonStatsContainerButton17BG\",\n\t\"AchievementFrameComparisonStatsContainerButton17ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton17HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton17HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton17HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton17HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton17HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton17HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton17Text\",\n\t\"AchievementFrameComparisonStatsContainerButton17Title\",\n\t\"AchievementFrameComparisonStatsContainerButton17Value\",\n\t\"AchievementFrameComparisonStatsContainerButton18BG\",\n\t\"AchievementFrameComparisonStatsContainerButton18ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton18HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton18HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton18HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton18HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton18HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton18HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton18Text\",\n\t\"AchievementFrameComparisonStatsContainerButton18Title\",\n\t\"AchievementFrameComparisonStatsContainerButton18Value\",\n\t\"AchievementFrameComparisonStatsContainerButton19BG\",\n\t\"AchievementFrameComparisonStatsContainerButton19ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton19HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton19HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton19HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton19HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton19HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton19HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton19Text\",\n\t\"AchievementFrameComparisonStatsContainerButton19Title\",\n\t\"AchievementFrameComparisonStatsContainerButton19Value\",\n\t\"AchievementFrameComparisonStatsContainerButton1BG\",\n\t\"AchievementFrameComparisonStatsContainerButton1ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton1HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton1HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton1HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton1HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton1HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton1HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton1Text\",\n\t\"AchievementFrameComparisonStatsContainerButton1Title\",\n\t\"AchievementFrameComparisonStatsContainerButton1Value\",\n\t\"AchievementFrameComparisonStatsContainerButton20BG\",\n\t\"AchievementFrameComparisonStatsContainerButton20ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton20HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton20HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton20HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton20HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton20HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton20HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton20Text\",\n\t\"AchievementFrameComparisonStatsContainerButton20Title\",\n\t\"AchievementFrameComparisonStatsContainerButton20Value\",\n\t\"AchievementFrameComparisonStatsContainerButton2BG\",\n\t\"AchievementFrameComparisonStatsContainerButton2ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton2HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton2HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton2HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton2HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton2HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton2HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton2Text\",\n\t\"AchievementFrameComparisonStatsContainerButton2Title\",\n\t\"AchievementFrameComparisonStatsContainerButton2Value\",\n\t\"AchievementFrameComparisonStatsContainerButton3BG\",\n\t\"AchievementFrameComparisonStatsContainerButton3ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton3HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton3HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton3HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton3HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton3HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton3HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton3Text\",\n\t\"AchievementFrameComparisonStatsContainerButton3Title\",\n\t\"AchievementFrameComparisonStatsContainerButton3Value\",\n\t\"AchievementFrameComparisonStatsContainerButton4BG\",\n\t\"AchievementFrameComparisonStatsContainerButton4ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton4HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton4HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton4HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton4HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton4HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton4HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton4Text\",\n\t\"AchievementFrameComparisonStatsContainerButton4Title\",\n\t\"AchievementFrameComparisonStatsContainerButton4Value\",\n\t\"AchievementFrameComparisonStatsContainerButton5BG\",\n\t\"AchievementFrameComparisonStatsContainerButton5ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton5HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton5HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton5HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton5HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton5HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton5HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton5Text\",\n\t\"AchievementFrameComparisonStatsContainerButton5Title\",\n\t\"AchievementFrameComparisonStatsContainerButton5Value\",\n\t\"AchievementFrameComparisonStatsContainerButton6BG\",\n\t\"AchievementFrameComparisonStatsContainerButton6ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton6HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton6HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton6HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton6HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton6HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton6HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton6Text\",\n\t\"AchievementFrameComparisonStatsContainerButton6Title\",\n\t\"AchievementFrameComparisonStatsContainerButton6Value\",\n\t\"AchievementFrameComparisonStatsContainerButton7BG\",\n\t\"AchievementFrameComparisonStatsContainerButton7ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton7HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton7HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton7HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton7HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton7HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton7HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton7Text\",\n\t\"AchievementFrameComparisonStatsContainerButton7Title\",\n\t\"AchievementFrameComparisonStatsContainerButton7Value\",\n\t\"AchievementFrameComparisonStatsContainerButton8BG\",\n\t\"AchievementFrameComparisonStatsContainerButton8ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton8HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton8HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton8HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton8HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton8HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton8HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton8Text\",\n\t\"AchievementFrameComparisonStatsContainerButton8Title\",\n\t\"AchievementFrameComparisonStatsContainerButton8Value\",\n\t\"AchievementFrameComparisonStatsContainerButton9BG\",\n\t\"AchievementFrameComparisonStatsContainerButton9ComparisonValue\",\n\t\"AchievementFrameComparisonStatsContainerButton9HeaderLeft\",\n\t\"AchievementFrameComparisonStatsContainerButton9HeaderLeft2\",\n\t\"AchievementFrameComparisonStatsContainerButton9HeaderMiddle\",\n\t\"AchievementFrameComparisonStatsContainerButton9HeaderMiddle2\",\n\t\"AchievementFrameComparisonStatsContainerButton9HeaderRight\",\n\t\"AchievementFrameComparisonStatsContainerButton9HeaderRight2\",\n\t\"AchievementFrameComparisonStatsContainerButton9Text\",\n\t\"AchievementFrameComparisonStatsContainerButton9Title\",\n\t\"AchievementFrameComparisonStatsContainerButton9Value\",\n\t\"AchievementFrameComparisonStatsContainerScrollBarBG\",\n\t\"AchievementFrameComparisonStatsContainerScrollBarBottom\",\n\t\"AchievementFrameComparisonStatsContainerScrollBarMiddle\",\n\t\"AchievementFrameComparisonStatsContainerScrollBarThumbTexture\",\n\t\"AchievementFrameComparisonStatsContainerScrollBarTop\",\n\t\"AchievementFrameComparisonSummaryFriendBackground\",\n\t\"AchievementFrameComparisonSummaryFriendStatusBarBar\",\n\t\"AchievementFrameComparisonSummaryFriendStatusBarFillBar\",\n\t\"AchievementFrameComparisonSummaryFriendStatusBarLeft\",\n\t\"AchievementFrameComparisonSummaryFriendStatusBarMiddle\",\n\t\"AchievementFrameComparisonSummaryFriendStatusBarRight\",\n\t\"AchievementFrameComparisonSummaryFriendStatusBarText\",\n\t\"AchievementFrameComparisonSummaryFriendStatusBarTitle\",\n\t\"AchievementFrameComparisonSummaryPlayerBackground\",\n\t\"AchievementFrameComparisonSummaryPlayerStatusBarBar\",\n\t\"AchievementFrameComparisonSummaryPlayerStatusBarFillBar\",\n\t\"AchievementFrameComparisonSummaryPlayerStatusBarLeft\",\n\t\"AchievementFrameComparisonSummaryPlayerStatusBarMiddle\",\n\t\"AchievementFrameComparisonSummaryPlayerStatusBarRight\",\n\t\"AchievementFrameComparisonSummaryPlayerStatusBarText\",\n\t\"AchievementFrameComparisonSummaryPlayerStatusBarTitle\",\n\t\"AchievementFrameComparisonWatermark\",\n\t\"AchievementFrameFilterDropDownButtonDisabledTexture\",\n\t\"AchievementFrameFilterDropDownButtonHighlightTexture\",\n\t\"AchievementFrameFilterDropDownButtonNormalTexture\",\n\t\"AchievementFrameFilterDropDownButtonPushedTexture\",\n\t\"AchievementFrameFilterDropDownText\",\n\t\"AchievementFrameHeaderLeft\",\n\t\"AchievementFrameHeaderPointBorder\",\n\t\"AchievementFrameHeaderPoints\",\n\t\"AchievementFrameHeaderRight\",\n\t\"AchievementFrameHeaderRightDDLInset\",\n\t\"AchievementFrameHeaderShield\",\n\t\"AchievementFrameHeaderTitle\",\n\t\"AchievementFrameMetalBorderBottom\",\n\t\"AchievementFrameMetalBorderBottomLeft\",\n\t\"AchievementFrameMetalBorderBottomRight\",\n\t\"AchievementFrameMetalBorderLeft\",\n\t\"AchievementFrameMetalBorderRight\",\n\t\"AchievementFrameMetalBorderTop\",\n\t\"AchievementFrameMetalBorderTopLeft\",\n\t\"AchievementFrameMetalBorderTopRight\",\n\t\"AchievementFrameStatsContainerButton10BG\",\n\t\"AchievementFrameStatsContainerButton10HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton10HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton10HeaderRight\",\n\t\"AchievementFrameStatsContainerButton10Title\",\n\t\"AchievementFrameStatsContainerButton10Value\",\n\t\"AchievementFrameStatsContainerButton11BG\",\n\t\"AchievementFrameStatsContainerButton11HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton11HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton11HeaderRight\",\n\t\"AchievementFrameStatsContainerButton11Title\",\n\t\"AchievementFrameStatsContainerButton11Value\",\n\t\"AchievementFrameStatsContainerButton12BG\",\n\t\"AchievementFrameStatsContainerButton12HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton12HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton12HeaderRight\",\n\t\"AchievementFrameStatsContainerButton12Title\",\n\t\"AchievementFrameStatsContainerButton12Value\",\n\t\"AchievementFrameStatsContainerButton13BG\",\n\t\"AchievementFrameStatsContainerButton13HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton13HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton13HeaderRight\",\n\t\"AchievementFrameStatsContainerButton13Title\",\n\t\"AchievementFrameStatsContainerButton13Value\",\n\t\"AchievementFrameStatsContainerButton14BG\",\n\t\"AchievementFrameStatsContainerButton14HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton14HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton14HeaderRight\",\n\t\"AchievementFrameStatsContainerButton14Title\",\n\t\"AchievementFrameStatsContainerButton14Value\",\n\t\"AchievementFrameStatsContainerButton15BG\",\n\t\"AchievementFrameStatsContainerButton15HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton15HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton15HeaderRight\",\n\t\"AchievementFrameStatsContainerButton15Title\",\n\t\"AchievementFrameStatsContainerButton15Value\",\n\t\"AchievementFrameStatsContainerButton16BG\",\n\t\"AchievementFrameStatsContainerButton16HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton16HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton16HeaderRight\",\n\t\"AchievementFrameStatsContainerButton16Title\",\n\t\"AchievementFrameStatsContainerButton16Value\",\n\t\"AchievementFrameStatsContainerButton17BG\",\n\t\"AchievementFrameStatsContainerButton17HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton17HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton17HeaderRight\",\n\t\"AchievementFrameStatsContainerButton17Title\",\n\t\"AchievementFrameStatsContainerButton17Value\",\n\t\"AchievementFrameStatsContainerButton18BG\",\n\t\"AchievementFrameStatsContainerButton18HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton18HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton18HeaderRight\",\n\t\"AchievementFrameStatsContainerButton18Title\",\n\t\"AchievementFrameStatsContainerButton18Value\",\n\t\"AchievementFrameStatsContainerButton19BG\",\n\t\"AchievementFrameStatsContainerButton19HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton19HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton19HeaderRight\",\n\t\"AchievementFrameStatsContainerButton19Title\",\n\t\"AchievementFrameStatsContainerButton19Value\",\n\t\"AchievementFrameStatsContainerButton1BG\",\n\t\"AchievementFrameStatsContainerButton1HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton1HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton1HeaderRight\",\n\t\"AchievementFrameStatsContainerButton1Title\",\n\t\"AchievementFrameStatsContainerButton1Value\",\n\t\"AchievementFrameStatsContainerButton20BG\",\n\t\"AchievementFrameStatsContainerButton20HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton20HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton20HeaderRight\",\n\t\"AchievementFrameStatsContainerButton20Title\",\n\t\"AchievementFrameStatsContainerButton20Value\",\n\t\"AchievementFrameStatsContainerButton2BG\",\n\t\"AchievementFrameStatsContainerButton2HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton2HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton2HeaderRight\",\n\t\"AchievementFrameStatsContainerButton2Title\",\n\t\"AchievementFrameStatsContainerButton2Value\",\n\t\"AchievementFrameStatsContainerButton3BG\",\n\t\"AchievementFrameStatsContainerButton3HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton3HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton3HeaderRight\",\n\t\"AchievementFrameStatsContainerButton3Title\",\n\t\"AchievementFrameStatsContainerButton3Value\",\n\t\"AchievementFrameStatsContainerButton4BG\",\n\t\"AchievementFrameStatsContainerButton4HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton4HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton4HeaderRight\",\n\t\"AchievementFrameStatsContainerButton4Title\",\n\t\"AchievementFrameStatsContainerButton4Value\",\n\t\"AchievementFrameStatsContainerButton5BG\",\n\t\"AchievementFrameStatsContainerButton5HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton5HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton5HeaderRight\",\n\t\"AchievementFrameStatsContainerButton5Title\",\n\t\"AchievementFrameStatsContainerButton5Value\",\n\t\"AchievementFrameStatsContainerButton6BG\",\n\t\"AchievementFrameStatsContainerButton6HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton6HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton6HeaderRight\",\n\t\"AchievementFrameStatsContainerButton6Title\",\n\t\"AchievementFrameStatsContainerButton6Value\",\n\t\"AchievementFrameStatsContainerButton7BG\",\n\t\"AchievementFrameStatsContainerButton7HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton7HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton7HeaderRight\",\n\t\"AchievementFrameStatsContainerButton7Title\",\n\t\"AchievementFrameStatsContainerButton7Value\",\n\t\"AchievementFrameStatsContainerButton8BG\",\n\t\"AchievementFrameStatsContainerButton8HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton8HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton8HeaderRight\",\n\t\"AchievementFrameStatsContainerButton8Title\",\n\t\"AchievementFrameStatsContainerButton8Value\",\n\t\"AchievementFrameStatsContainerButton9BG\",\n\t\"AchievementFrameStatsContainerButton9HeaderLeft\",\n\t\"AchievementFrameStatsContainerButton9HeaderMiddle\",\n\t\"AchievementFrameStatsContainerButton9HeaderRight\",\n\t\"AchievementFrameStatsContainerButton9Title\",\n\t\"AchievementFrameStatsContainerButton9Value\",\n\t\"AchievementFrameStatsContainerScrollBarBG\",\n\t\"AchievementFrameStatsContainerScrollBarBottom\",\n\t\"AchievementFrameStatsContainerScrollBarMiddle\",\n\t\"AchievementFrameStatsContainerScrollBarThumbTexture\",\n\t\"AchievementFrameStatsContainerScrollBarTop\",\n\t\"AchievementFrameSummaryAchievementsEmptyText\",\n\t\"AchievementFrameSummaryAchievementsHeaderHeader\",\n\t\"AchievementFrameSummaryAchievementsHeaderTitle\",\n\t\"AchievementFrameSummaryBackground\",\n\t\"AchievementFrameSummaryCategoriesCategory1Bar\",\n\t\"AchievementFrameSummaryCategoriesCategory1ButtonHighlightLeft\",\n\t\"AchievementFrameSummaryCategoriesCategory1ButtonHighlightMiddle\",\n\t\"AchievementFrameSummaryCategoriesCategory1ButtonHighlightRight\",\n\t\"AchievementFrameSummaryCategoriesCategory1FillBar\",\n\t\"AchievementFrameSummaryCategoriesCategory1Label\",\n\t\"AchievementFrameSummaryCategoriesCategory1Left\",\n\t\"AchievementFrameSummaryCategoriesCategory1Middle\",\n\t\"AchievementFrameSummaryCategoriesCategory1Right\",\n\t\"AchievementFrameSummaryCategoriesCategory1Text\",\n\t\"AchievementFrameSummaryCategoriesCategory2Bar\",\n\t\"AchievementFrameSummaryCategoriesCategory2ButtonHighlightLeft\",\n\t\"AchievementFrameSummaryCategoriesCategory2ButtonHighlightMiddle\",\n\t\"AchievementFrameSummaryCategoriesCategory2ButtonHighlightRight\",\n\t\"AchievementFrameSummaryCategoriesCategory2FillBar\",\n\t\"AchievementFrameSummaryCategoriesCategory2Label\",\n\t\"AchievementFrameSummaryCategoriesCategory2Left\",\n\t\"AchievementFrameSummaryCategoriesCategory2Middle\",\n\t\"AchievementFrameSummaryCategoriesCategory2Right\",\n\t\"AchievementFrameSummaryCategoriesCategory2Text\",\n\t\"AchievementFrameSummaryCategoriesCategory3Bar\",\n\t\"AchievementFrameSummaryCategoriesCategory3ButtonHighlightLeft\",\n\t\"AchievementFrameSummaryCategoriesCategory3ButtonHighlightMiddle\",\n\t\"AchievementFrameSummaryCategoriesCategory3ButtonHighlightRight\",\n\t\"AchievementFrameSummaryCategoriesCategory3FillBar\",\n\t\"AchievementFrameSummaryCategoriesCategory3Label\",\n\t\"AchievementFrameSummaryCategoriesCategory3Left\",\n\t\"AchievementFrameSummaryCategoriesCategory3Middle\",\n\t\"AchievementFrameSummaryCategoriesCategory3Right\",\n\t\"AchievementFrameSummaryCategoriesCategory3Text\",\n\t\"AchievementFrameSummaryCategoriesCategory4Bar\",\n\t\"AchievementFrameSummaryCategoriesCategory4ButtonHighlightLeft\",\n\t\"AchievementFrameSummaryCategoriesCategory4ButtonHighlightMiddle\",\n\t\"AchievementFrameSummaryCategoriesCategory4ButtonHighlightRight\",\n\t\"AchievementFrameSummaryCategoriesCategory4FillBar\",\n\t\"AchievementFrameSummaryCategoriesCategory4Label\",\n\t\"AchievementFrameSummaryCategoriesCategory4Left\",\n\t\"AchievementFrameSummaryCategoriesCategory4Middle\",\n\t\"AchievementFrameSummaryCategoriesCategory4Right\",\n\t\"AchievementFrameSummaryCategoriesCategory4Text\",\n\t\"AchievementFrameSummaryCategoriesCategory5Bar\",\n\t\"AchievementFrameSummaryCategoriesCategory5ButtonHighlightLeft\",\n\t\"AchievementFrameSummaryCategoriesCategory5ButtonHighlightMiddle\",\n\t\"AchievementFrameSummaryCategoriesCategory5ButtonHighlightRight\",\n\t\"AchievementFrameSummaryCategoriesCategory5FillBar\",\n\t\"AchievementFrameSummaryCategoriesCategory5Label\",\n\t\"AchievementFrameSummaryCategoriesCategory5Left\",\n\t\"AchievementFrameSummaryCategoriesCategory5Middle\",\n\t\"AchievementFrameSummaryCategoriesCategory5Right\",\n\t\"AchievementFrameSummaryCategoriesCategory5Text\",\n\t\"AchievementFrameSummaryCategoriesCategory6Bar\",\n\t\"AchievementFrameSummaryCategoriesCategory6ButtonHighlightLeft\",\n\t\"AchievementFrameSummaryCategoriesCategory6ButtonHighlightMiddle\",\n\t\"AchievementFrameSummaryCategoriesCategory6ButtonHighlightRight\",\n\t\"AchievementFrameSummaryCategoriesCategory6FillBar\",\n\t\"AchievementFrameSummaryCategoriesCategory6Label\",\n\t\"AchievementFrameSummaryCategoriesCategory6Left\",\n\t\"AchievementFrameSummaryCategoriesCategory6Middle\",\n\t\"AchievementFrameSummaryCategoriesCategory6Right\",\n\t\"AchievementFrameSummaryCategoriesCategory6Text\",\n\t\"AchievementFrameSummaryCategoriesCategory7Bar\",\n\t\"AchievementFrameSummaryCategoriesCategory7ButtonHighlightLeft\",\n\t\"AchievementFrameSummaryCategoriesCategory7ButtonHighlightMiddle\",\n\t\"AchievementFrameSummaryCategoriesCategory7ButtonHighlightRight\",\n\t\"AchievementFrameSummaryCategoriesCategory7FillBar\",\n\t\"AchievementFrameSummaryCategoriesCategory7Label\",\n\t\"AchievementFrameSummaryCategoriesCategory7Left\",\n\t\"AchievementFrameSummaryCategoriesCategory7Middle\",\n\t\"AchievementFrameSummaryCategoriesCategory7Right\",\n\t\"AchievementFrameSummaryCategoriesCategory7Text\",\n\t\"AchievementFrameSummaryCategoriesCategory8Bar\",\n\t\"AchievementFrameSummaryCategoriesCategory8ButtonHighlightLeft\",\n\t\"AchievementFrameSummaryCategoriesCategory8ButtonHighlightMiddle\",\n\t\"AchievementFrameSummaryCategoriesCategory8ButtonHighlightRight\",\n\t\"AchievementFrameSummaryCategoriesCategory8FillBar\",\n\t\"AchievementFrameSummaryCategoriesCategory8Label\",\n\t\"AchievementFrameSummaryCategoriesCategory8Left\",\n\t\"AchievementFrameSummaryCategoriesCategory8Middle\",\n\t\"AchievementFrameSummaryCategoriesCategory8Right\",\n\t\"AchievementFrameSummaryCategoriesCategory8Text\",\n\t\"AchievementFrameSummaryCategoriesHeaderTexture\",\n\t\"AchievementFrameSummaryCategoriesHeaderTitle\",\n\t\"AchievementFrameSummaryCategoriesStatusBarBar\",\n\t\"AchievementFrameSummaryCategoriesStatusBarFillBar\",\n\t\"AchievementFrameSummaryCategoriesStatusBarLeft\",\n\t\"AchievementFrameSummaryCategoriesStatusBarMiddle\",\n\t\"AchievementFrameSummaryCategoriesStatusBarRight\",\n\t\"AchievementFrameSummaryCategoriesStatusBarText\",\n\t\"AchievementFrameSummaryCategoriesStatusBarTitle\",\n\t\"AchievementFrameTab1Left\",\n\t\"AchievementFrameTab1LeftDisabled\",\n\t\"AchievementFrameTab1LeftHighlight\",\n\t\"AchievementFrameTab1Middle\",\n\t\"AchievementFrameTab1MiddleDisabled\",\n\t\"AchievementFrameTab1MiddleHighlight\",\n\t\"AchievementFrameTab1Right\",\n\t\"AchievementFrameTab1RightDisabled\",\n\t\"AchievementFrameTab1RightHighlight\",\n\t\"AchievementFrameTab1Text\",\n\t\"AchievementFrameTab2Left\",\n\t\"AchievementFrameTab2LeftDisabled\",\n\t\"AchievementFrameTab2LeftHighlight\",\n\t\"AchievementFrameTab2Middle\",\n\t\"AchievementFrameTab2MiddleDisabled\",\n\t\"AchievementFrameTab2MiddleHighlight\",\n\t\"AchievementFrameTab2Right\",\n\t\"AchievementFrameTab2RightDisabled\",\n\t\"AchievementFrameTab2RightHighlight\",\n\t\"AchievementFrameTab2Text\",\n\t\"AchievementFrameWaterMark\",\n\t\"AchievementFrameWoodBorderBottomLeft\",\n\t\"AchievementFrameWoodBorderBottomRight\",\n\t\"AchievementFrameWoodBorderTopLeft\",\n\t\"AchievementFrameWoodBorderTopRight\",\n\n\t-- functions: Blizzard_ArenaUI\n\t\"ArenaEnemyBackground_SetOpacity\",\n\t\"ArenaEnemyDropDown_Initialize\",\n\t\"ArenaEnemyFrame_Lock\",\n\t\"ArenaEnemyFrame_OnEvent\",\n\t\"ArenaEnemyFrame_OnLoad\",\n\t\"ArenaEnemyFrame_SetMysteryPlayer\",\n\t\"ArenaEnemyFrame_Unlock\",\n\t\"ArenaEnemyFrame_UpdatePet\",\n\t\"ArenaEnemyFrame_UpdatePlayer\",\n\t\"ArenaEnemyFrames_Disable\",\n\t\"ArenaEnemyFrames_Enable\",\n\t\"ArenaEnemyFrames_OnEvent\",\n\t\"ArenaEnemyFrames_OnHide\",\n\t\"ArenaEnemyFrames_OnLoad\",\n\t\"ArenaEnemyFrames_OnShow\",\n\t\"ArenaEnemyFrames_UpdateVisible\",\n\t\"ArenaEnemyFrames_UpdateWatchFrame\",\n\t\"ArenaEnemyPetDropDown_Initialize\",\n\t\"ArenaEnemyPetFrame_OnEvent\",\n\t\"ArenaEnemyPetFrame_OnLoad\",\n\t\"UpdateArenaEnemyBackground\",\n\t-- tables: Blizzard_ArenaUI\n\t\"AchievementFrameCategoriesContainerButton1\",\n\t\"AchievementFrameCategoriesContainerButton10\",\n\t\"AchievementFrameCategoriesContainerButton11\",\n\t\"AchievementFrameCategoriesContainerButton12\",\n\t\"AchievementFrameCategoriesContainerButton13\",\n\t\"AchievementFrameCategoriesContainerButton14\",\n\t\"AchievementFrameCategoriesContainerButton15\",\n\t\"AchievementFrameCategoriesContainerButton16\",\n\t\"AchievementFrameCategoriesContainerButton17\",\n\t\"AchievementFrameCategoriesContainerButton18\",\n\t\"AchievementFrameCategoriesContainerButton19\",\n\t\"AchievementFrameCategoriesContainerButton2\",\n\t\"AchievementFrameCategoriesContainerButton20\",\n\t\"AchievementFrameCategoriesContainerButton3\",\n\t\"AchievementFrameCategoriesContainerButton4\",\n\t\"AchievementFrameCategoriesContainerButton5\",\n\t\"AchievementFrameCategoriesContainerButton6\",\n\t\"AchievementFrameCategoriesContainerButton7\",\n\t\"AchievementFrameCategoriesContainerButton8\",\n\t\"AchievementFrameCategoriesContainerButton9\",\n\t\"ArenaEnemyBackground\",\n\t\"ArenaEnemyFrame1\",\n\t\"ArenaEnemyFrame1CastingBar\",\n\t\"ArenaEnemyFrame1DropDown\",\n\t\"ArenaEnemyFrame1DropDownButton\",\n\t\"ArenaEnemyFrame1HealthBar\",\n\t\"ArenaEnemyFrame1ManaBar\",\n\t\"ArenaEnemyFrame1PetFrame\",\n\t\"ArenaEnemyFrame1PetFrameDropDown\",\n\t\"ArenaEnemyFrame1PetFrameDropDownButton\",\n\t\"ArenaEnemyFrame1PetFrameHealthBar\",\n\t\"ArenaEnemyFrame1PetFrameManaBar\",\n\t\"ArenaEnemyFrame2\",\n\t\"ArenaEnemyFrame2CastingBar\",\n\t\"ArenaEnemyFrame2DropDown\",\n\t\"ArenaEnemyFrame2DropDownButton\",\n\t\"ArenaEnemyFrame2HealthBar\",\n\t\"ArenaEnemyFrame2ManaBar\",\n\t\"ArenaEnemyFrame2PetFrame\",\n\t\"ArenaEnemyFrame2PetFrameDropDown\",\n\t\"ArenaEnemyFrame2PetFrameDropDownButton\",\n\t\"ArenaEnemyFrame2PetFrameHealthBar\",\n\t\"ArenaEnemyFrame2PetFrameManaBar\",\n\t\"ArenaEnemyFrame3\",\n\t\"ArenaEnemyFrame3CastingBar\",\n\t\"ArenaEnemyFrame3DropDown\",\n\t\"ArenaEnemyFrame3DropDownButton\",\n\t\"ArenaEnemyFrame3HealthBar\",\n\t\"ArenaEnemyFrame3ManaBar\",\n\t\"ArenaEnemyFrame3PetFrame\",\n\t\"ArenaEnemyFrame3PetFrameDropDown\",\n\t\"ArenaEnemyFrame3PetFrameDropDownButton\",\n\t\"ArenaEnemyFrame3PetFrameHealthBar\",\n\t\"ArenaEnemyFrame3PetFrameManaBar\",\n\t\"ArenaEnemyFrame4\",\n\t\"ArenaEnemyFrame4CastingBar\",\n\t\"ArenaEnemyFrame4DropDown\",\n\t\"ArenaEnemyFrame4DropDownButton\",\n\t\"ArenaEnemyFrame4HealthBar\",\n\t\"ArenaEnemyFrame4ManaBar\",\n\t\"ArenaEnemyFrame4PetFrame\",\n\t\"ArenaEnemyFrame4PetFrameDropDown\",\n\t\"ArenaEnemyFrame4PetFrameDropDownButton\",\n\t\"ArenaEnemyFrame4PetFrameHealthBar\",\n\t\"ArenaEnemyFrame4PetFrameManaBar\",\n\t\"ArenaEnemyFrame5\",\n\t\"ArenaEnemyFrame5CastingBar\",\n\t\"ArenaEnemyFrame5DropDownButton\",\n\t\"ArenaEnemyFrame5HealthBar\",\n\t\"ArenaEnemyFrame5ManaBar\",\n\t\"ArenaEnemyFrame5PetFrame\",\n\t\"ArenaEnemyFrame5PetFrameDropDown\",\n\t\"ArenaEnemyFrame5PetFrameDropDownButton\",\n\t\"ArenaEnemyFrame5PetFrameHealthBar\",\n\t\"ArenaEnemyFrame5PetFrameManaBar\",\n\t\"ArenaEnemyFrames\",\n\t\"UIDROPDOWNMENU_INIT_MENU\",\n\t-- frames: Blizzard_ArenaUI\n\t\"AchievementFrameCategoriesContainerButton1\",\n\t\"AchievementFrameCategoriesContainerButton2\",\n\t\"AchievementFrameCategoriesContainerButton3\",\n\t\"AchievementFrameCategoriesContainerButton4\",\n\t\"AchievementFrameCategoriesContainerButton5\",\n\t\"AchievementFrameCategoriesContainerButton6\",\n\t\"AchievementFrameCategoriesContainerButton7\",\n\t\"AchievementFrameCategoriesContainerButton8\",\n\t\"AchievementFrameCategoriesContainerButton9\",\n\t\"AchievementFrameCategoriesContainerButton10\",\n\t\"AchievementFrameCategoriesContainerButton11\",\n\t\"AchievementFrameCategoriesContainerButton12\",\n\t\"AchievementFrameCategoriesContainerButton13\",\n\t\"AchievementFrameCategoriesContainerButton14\",\n\t\"AchievementFrameCategoriesContainerButton15\",\n\t\"AchievementFrameCategoriesContainerButton16\",\n\t\"AchievementFrameCategoriesContainerButton17\",\n\t\"AchievementFrameCategoriesContainerButton18\",\n\t\"AchievementFrameCategoriesContainerButton19\",\n\t\"AchievementFrameCategoriesContainerButton20\",\n\t\"ArenaEnemyFrames\",\n\t\"ArenaEnemyFrame1\",\n\t\"ArenaEnemyFrame1DropDown\",\n\t\"ArenaEnemyFrame1DropDownButton\",\n\t\"ArenaEnemyFrame1HealthBar\",\n\t\"ArenaEnemyFrame1ManaBar\",\n\t\"ArenaEnemyFrame1PetFrame\",\n\t\"ArenaEnemyFrame1PetFrameHealthBar\",\n\t\"ArenaEnemyFrame1PetFrameManaBar\",\n\t\"ArenaEnemyFrame1PetFrameDropDown\",\n\t\"ArenaEnemyFrame1PetFrameDropDownButton\",\n\t\"ArenaEnemyFrame1CastingBar\",\n\t\"ArenaEnemyFrame2\",\n\t\"ArenaEnemyFrame2DropDown\",\n\t\"ArenaEnemyFrame2DropDownButton\",\n\t\"ArenaEnemyFrame2HealthBar\",\n\t\"ArenaEnemyFrame2ManaBar\",\n\t\"ArenaEnemyFrame2PetFrame\",\n\t\"ArenaEnemyFrame2PetFrameHealthBar\",\n\t\"ArenaEnemyFrame2PetFrameManaBar\",\n\t\"ArenaEnemyFrame2PetFrameDropDown\",\n\t\"ArenaEnemyFrame2PetFrameDropDownButton\",\n\t\"ArenaEnemyFrame2CastingBar\",\n\t\"ArenaEnemyFrame3\",\n\t\"ArenaEnemyFrame3DropDown\",\n\t\"ArenaEnemyFrame3DropDownButton\",\n\t\"ArenaEnemyFrame3HealthBar\",\n\t\"ArenaEnemyFrame3ManaBar\",\n\t\"ArenaEnemyFrame3PetFrame\",\n\t\"ArenaEnemyFrame3PetFrameHealthBar\",\n\t\"ArenaEnemyFrame3PetFrameManaBar\",\n\t\"ArenaEnemyFrame3PetFrameDropDown\",\n\t\"ArenaEnemyFrame3PetFrameDropDownButton\",\n\t\"ArenaEnemyFrame3CastingBar\",\n\t\"ArenaEnemyFrame4\",\n\t\"ArenaEnemyFrame4DropDown\",\n\t\"ArenaEnemyFrame4DropDownButton\",\n\t\"ArenaEnemyFrame4HealthBar\",\n\t\"ArenaEnemyFrame4ManaBar\",\n\t\"ArenaEnemyFrame4PetFrame\",\n\t\"ArenaEnemyFrame4PetFrameHealthBar\",\n\t\"ArenaEnemyFrame4PetFrameManaBar\",\n\t\"ArenaEnemyFrame4PetFrameDropDown\",\n\t\"ArenaEnemyFrame4PetFrameDropDownButton\",\n\t\"ArenaEnemyFrame4CastingBar\",\n\t\"ArenaEnemyFrame5\",\n\t\"ArenaEnemyFrame5DropDown\",\n\t\"ArenaEnemyFrame5DropDownButton\",\n\t\"ArenaEnemyFrame5HealthBar\",\n\t\"ArenaEnemyFrame5ManaBar\",\n\t\"ArenaEnemyFrame5PetFrame\",\n\t\"ArenaEnemyFrame5PetFrameHealthBar\",\n\t\"ArenaEnemyFrame5PetFrameManaBar\",\n\t\"ArenaEnemyFrame5PetFrameDropDown\",\n\t\"ArenaEnemyFrame5PetFrameDropDownButton\",\n\t\"ArenaEnemyFrame5CastingBar\",\n\t\"ArenaEnemyBackground\",\n\t-- widgets: Blizzard_ArenaUI\n\t\"AchievementFrameCategoriesContainerButton10Background\",\n\t\"AchievementFrameCategoriesContainerButton10Label\",\n\t\"AchievementFrameCategoriesContainerButton11Background\",\n\t\"AchievementFrameCategoriesContainerButton11Label\",\n\t\"AchievementFrameCategoriesContainerButton12Background\",\n\t\"AchievementFrameCategoriesContainerButton12Label\",\n\t\"AchievementFrameCategoriesContainerButton13Background\",\n\t\"AchievementFrameCategoriesContainerButton13Label\",\n\t\"AchievementFrameCategoriesContainerButton14Background\",\n\t\"AchievementFrameCategoriesContainerButton14Label\",\n\t\"AchievementFrameCategoriesContainerButton15Background\",\n\t\"AchievementFrameCategoriesContainerButton15Label\",\n\t\"AchievementFrameCategoriesContainerButton16Background\",\n\t\"AchievementFrameCategoriesContainerButton16Label\",\n\t\"AchievementFrameCategoriesContainerButton17Background\",\n\t\"AchievementFrameCategoriesContainerButton17Label\",\n\t\"AchievementFrameCategoriesContainerButton18Background\",\n\t\"AchievementFrameCategoriesContainerButton18Label\",\n\t\"AchievementFrameCategoriesContainerButton19Background\",\n\t\"AchievementFrameCategoriesContainerButton19Label\",\n\t\"AchievementFrameCategoriesContainerButton1Background\",\n\t\"AchievementFrameCategoriesContainerButton1Label\",\n\t\"AchievementFrameCategoriesContainerButton20Background\",\n\t\"AchievementFrameCategoriesContainerButton20Label\",\n\t\"AchievementFrameCategoriesContainerButton2Background\",\n\t\"AchievementFrameCategoriesContainerButton2Label\",\n\t\"AchievementFrameCategoriesContainerButton3Background\",\n\t\"AchievementFrameCategoriesContainerButton3Label\",\n\t\"AchievementFrameCategoriesContainerButton4Background\",\n\t\"AchievementFrameCategoriesContainerButton4Label\",\n\t\"AchievementFrameCategoriesContainerButton5Background\",\n\t\"AchievementFrameCategoriesContainerButton5Label\",\n\t\"AchievementFrameCategoriesContainerButton6Background\",\n\t\"AchievementFrameCategoriesContainerButton6Label\",\n\t\"AchievementFrameCategoriesContainerButton7Background\",\n\t\"AchievementFrameCategoriesContainerButton7Label\",\n\t\"AchievementFrameCategoriesContainerButton8Background\",\n\t\"AchievementFrameCategoriesContainerButton8Label\",\n\t\"AchievementFrameCategoriesContainerButton9Background\",\n\t\"AchievementFrameCategoriesContainerButton9Label\",\n\t\"ArenaEnemyFrame1Background\",\n\t\"ArenaEnemyFrame1CastingBarBorderShield\",\n\t\"ArenaEnemyFrame1CastingBarFlash\",\n\t\"ArenaEnemyFrame1CastingBarIcon\",\n\t\"ArenaEnemyFrame1CastingBarSpark\",\n\t\"ArenaEnemyFrame1CastingBarText\",\n\t\"ArenaEnemyFrame1ClassPortrait\",\n\t\"ArenaEnemyFrame1Disconnect\",\n\t\"ArenaEnemyFrame1DropDownButtonDisabledTexture\",\n\t\"ArenaEnemyFrame1DropDownButtonHighlightTexture\",\n\t\"ArenaEnemyFrame1DropDownButtonNormalTexture\",\n\t\"ArenaEnemyFrame1DropDownButtonPushedTexture\",\n\t\"ArenaEnemyFrame1DropDownLeft\",\n\t\"ArenaEnemyFrame1DropDownMiddle\",\n\t\"ArenaEnemyFrame1DropDownRight\",\n\t\"ArenaEnemyFrame1DropDownText\",\n\t\"ArenaEnemyFrame1Flash\",\n\t\"ArenaEnemyFrame1HealthBarText\",\n\t\"ArenaEnemyFrame1ManaBarText\",\n\t\"ArenaEnemyFrame1Name\",\n\t\"ArenaEnemyFrame1PetFrameDropDownButtonDisabledTexture\",\n\t\"ArenaEnemyFrame1PetFrameDropDownButtonHighlightTexture\",\n\t\"ArenaEnemyFrame1PetFrameDropDownButtonNormalTexture\",\n\t\"ArenaEnemyFrame1PetFrameDropDownButtonPushedTexture\",\n\t\"ArenaEnemyFrame1PetFrameDropDownLeft\",\n\t\"ArenaEnemyFrame1PetFrameDropDownMiddle\",\n\t\"ArenaEnemyFrame1PetFrameDropDownRight\",\n\t\"ArenaEnemyFrame1PetFrameDropDownText\",\n\t\"ArenaEnemyFrame1PetFrameFlash\",\n\t\"ArenaEnemyFrame1PetFrameName\",\n\t\"ArenaEnemyFrame1PetFramePortrait\",\n\t\"ArenaEnemyFrame1PetFrameTexture\",\n\t\"ArenaEnemyFrame1Status\",\n\t\"ArenaEnemyFrame1Texture\",\n\t\"ArenaEnemyFrame2Background\",\n\t\"ArenaEnemyFrame2CastingBarBorderShield\",\n\t\"ArenaEnemyFrame2CastingBarFlash\",\n\t\"ArenaEnemyFrame2CastingBarIcon\",\n\t\"ArenaEnemyFrame2CastingBarSpark\",\n\t\"ArenaEnemyFrame2CastingBarText\",\n\t\"ArenaEnemyFrame2ClassPortrait\",\n\t\"ArenaEnemyFrame2Disconnect\",\n\t\"ArenaEnemyFrame2DropDownButtonDisabledTexture\",\n\t\"ArenaEnemyFrame2DropDownButtonHighlightTexture\",\n\t\"ArenaEnemyFrame2DropDownButtonNormalTexture\",\n\t\"ArenaEnemyFrame2DropDownButtonPushedTexture\",\n\t\"ArenaEnemyFrame2DropDownLeft\",\n\t\"ArenaEnemyFrame2DropDownMiddle\",\n\t\"ArenaEnemyFrame2DropDownRight\",\n\t\"ArenaEnemyFrame2DropDownText\",\n\t\"ArenaEnemyFrame2Flash\",\n\t\"ArenaEnemyFrame2HealthBarText\",\n\t\"ArenaEnemyFrame2ManaBarText\",\n\t\"ArenaEnemyFrame2Name\",\n\t\"ArenaEnemyFrame2PetFrameDropDownButtonDisabledTexture\",\n\t\"ArenaEnemyFrame2PetFrameDropDownButtonHighlightTexture\",\n\t\"ArenaEnemyFrame2PetFrameDropDownButtonNormalTexture\",\n\t\"ArenaEnemyFrame2PetFrameDropDownButtonPushedTexture\",\n\t\"ArenaEnemyFrame2PetFrameDropDownLeft\",\n\t\"ArenaEnemyFrame2PetFrameDropDownMiddle\",\n\t\"ArenaEnemyFrame2PetFrameDropDownRight\",\n\t\"ArenaEnemyFrame2PetFrameDropDownText\",\n\t\"ArenaEnemyFrame2PetFrameFlash\",\n\t\"ArenaEnemyFrame2PetFrameName\",\n\t\"ArenaEnemyFrame2PetFramePortrait\",\n\t\"ArenaEnemyFrame2PetFrameTexture\",\n\t\"ArenaEnemyFrame2Status\",\n\t\"ArenaEnemyFrame2Texture\",\n\t\"ArenaEnemyFrame3Background\",\n\t\"ArenaEnemyFrame3CastingBarBorderShield\",\n\t\"ArenaEnemyFrame3CastingBarFlash\",\n\t\"ArenaEnemyFrame3CastingBarIcon\",\n\t\"ArenaEnemyFrame3CastingBarSpark\",\n\t\"ArenaEnemyFrame3CastingBarText\",\n\t\"ArenaEnemyFrame3ClassPortrait\",\n\t\"ArenaEnemyFrame3Disconnect\",\n\t\"ArenaEnemyFrame3DropDownButtonDisabledTexture\",\n\t\"ArenaEnemyFrame3DropDownButtonHighlightTexture\",\n\t\"ArenaEnemyFrame3DropDownButtonNormalTexture\",\n\t\"ArenaEnemyFrame3DropDownButtonPushedTexture\",\n\t\"ArenaEnemyFrame3DropDownLeft\",\n\t\"ArenaEnemyFrame3DropDownMiddle\",\n\t\"ArenaEnemyFrame3DropDownRight\",\n\t\"ArenaEnemyFrame3DropDownText\",\n\t\"ArenaEnemyFrame3Flash\",\n\t\"ArenaEnemyFrame3HealthBarText\",\n\t\"ArenaEnemyFrame3ManaBarText\",\n\t\"ArenaEnemyFrame3Name\",\n\t\"ArenaEnemyFrame3PetFrameDropDownButtonDisabledTexture\",\n\t\"ArenaEnemyFrame3PetFrameDropDownButtonHighlightTexture\",\n\t\"ArenaEnemyFrame3PetFrameDropDownButtonNormalTexture\",\n\t\"ArenaEnemyFrame3PetFrameDropDownButtonPushedTexture\",\n\t\"ArenaEnemyFrame3PetFrameDropDownLeft\",\n\t\"ArenaEnemyFrame3PetFrameDropDownMiddle\",\n\t\"ArenaEnemyFrame3PetFrameDropDownRight\",\n\t\"ArenaEnemyFrame3PetFrameDropDownText\",\n\t\"ArenaEnemyFrame3PetFrameFlash\",\n\t\"ArenaEnemyFrame3PetFrameName\",\n\t\"ArenaEnemyFrame3PetFramePortrait\",\n\t\"ArenaEnemyFrame3PetFrameTexture\",\n\t\"ArenaEnemyFrame3Status\",\n\t\"ArenaEnemyFrame3Texture\",\n\t\"ArenaEnemyFrame4Background\",\n\t\"ArenaEnemyFrame4CastingBarBorderShield\",\n\t\"ArenaEnemyFrame4CastingBarFlash\",\n\t\"ArenaEnemyFrame4CastingBarIcon\",\n\t\"ArenaEnemyFrame4CastingBarSpark\",\n\t\"ArenaEnemyFrame4CastingBarText\",\n\t\"ArenaEnemyFrame4ClassPortrait\",\n\t\"ArenaEnemyFrame4Disconnect\",\n\t\"ArenaEnemyFrame4DropDownButtonDisabledTexture\",\n\t\"ArenaEnemyFrame4DropDownButtonHighlightTexture\",\n\t\"ArenaEnemyFrame4DropDownButtonNormalTexture\",\n\t\"ArenaEnemyFrame4DropDownButtonPushedTexture\",\n\t\"ArenaEnemyFrame4DropDownLeft\",\n\t\"ArenaEnemyFrame4DropDownMiddle\",\n\t\"ArenaEnemyFrame4DropDownRight\",\n\t\"ArenaEnemyFrame4DropDownText\",\n\t\"ArenaEnemyFrame4Flash\",\n\t\"ArenaEnemyFrame4HealthBarText\",\n\t\"ArenaEnemyFrame4ManaBarText\",\n\t\"ArenaEnemyFrame4Name\",\n\t\"ArenaEnemyFrame4PetFrameDropDownButtonDisabledTexture\",\n\t\"ArenaEnemyFrame4PetFrameDropDownButtonHighlightTexture\",\n\t\"ArenaEnemyFrame4PetFrameDropDownButtonNormalTexture\",\n\t\"ArenaEnemyFrame4PetFrameDropDownButtonPushedTexture\",\n\t\"ArenaEnemyFrame4PetFrameDropDownLeft\",\n\t\"ArenaEnemyFrame4PetFrameDropDownMiddle\",\n\t\"ArenaEnemyFrame4PetFrameDropDownRight\",\n\t\"ArenaEnemyFrame4PetFrameDropDownText\",\n\t\"ArenaEnemyFrame4PetFrameFlash\",\n\t\"ArenaEnemyFrame4PetFrameName\",\n\t\"ArenaEnemyFrame4PetFramePortrait\",\n\t\"ArenaEnemyFrame4PetFrameTexture\",\n\t\"ArenaEnemyFrame4Status\",\n\t\"ArenaEnemyFrame4Texture\",\n\t\"ArenaEnemyFrame5Background\",\n\t\"ArenaEnemyFrame5CastingBarBorderShield\",\n\t\"ArenaEnemyFrame5CastingBarFlash\",\n\t\"ArenaEnemyFrame5CastingBarIcon\",\n\t\"ArenaEnemyFrame5CastingBarSpark\",\n\t\"ArenaEnemyFrame5CastingBarText\",\n\t\"ArenaEnemyFrame5ClassPortrait\",\n\t\"ArenaEnemyFrame5Disconnect\",\n\t\"ArenaEnemyFrame5DropDownButtonDisabledTexture\",\n\t\"ArenaEnemyFrame5DropDownButtonHighlightTexture\",\n\t\"ArenaEnemyFrame5DropDownButtonNormalTexture\",\n\t\"ArenaEnemyFrame5DropDownButtonPushedTexture\",\n\t\"ArenaEnemyFrame5DropDownLeft\",\n\t\"ArenaEnemyFrame5DropDownMiddle\",\n\t\"ArenaEnemyFrame5DropDownRight\",\n\t\"ArenaEnemyFrame5DropDownText\",\n\t\"ArenaEnemyFrame5Flash\",\n\t\"ArenaEnemyFrame5HealthBarText\",\n\t\"ArenaEnemyFrame5ManaBarText\",\n\t\"ArenaEnemyFrame5Name\",\n\t\"ArenaEnemyFrame5PetFrameDropDownButtonDisabledTexture\",\n\t\"ArenaEnemyFrame5PetFrameDropDownButtonHighlightTexture\",\n\t\"ArenaEnemyFrame5PetFrameDropDownButtonNormalTexture\",\n\t\"ArenaEnemyFrame5PetFrameDropDownButtonPushedTexture\",\n\t\"ArenaEnemyFrame5PetFrameDropDownLeft\",\n\t\"ArenaEnemyFrame5PetFrameDropDownMiddle\",\n\t\"ArenaEnemyFrame5PetFrameDropDownRight\",\n\t\"ArenaEnemyFrame5PetFrameDropDownText\",\n\t\"ArenaEnemyFrame5PetFrameFlash\",\n\t\"ArenaEnemyFrame5PetFrameName\",\n\t\"ArenaEnemyFrame5PetFramePortrait\",\n\t\"ArenaEnemyFrame5PetFrameTexture\",\n\t\"ArenaEnemyFrame5Status\",\n\t\"ArenaEnemyFrame5Texture\",\n\n\t-- functions: Blizzard_AuctionUI\n\t\"AuctionDressUpFrame_OnHide\",\n\t\"AuctionDressUpFrame_OnShow\",\n\t\"AuctionFrameAuctions_OnEvent\",\n\t\"AuctionFrameAuctions_OnLoad\",\n\t\"AuctionFrameAuctions_OnShow\",\n\t\"AuctionFrameAuctions_Update\",\n\t\"AuctionFrameBid_OnEvent\",\n\t\"AuctionFrameBid_OnLoad\",\n\t\"AuctionFrameBid_OnShow\",\n\t\"AuctionFrameBid_Update\",\n\t\"AuctionFrameBrowse_InitClasses\",\n\t\"AuctionFrameBrowse_OnEvent\",\n\t\"AuctionFrameBrowse_OnLoad\",\n\t\"AuctionFrameBrowse_OnShow\",\n\t\"AuctionFrameBrowse_Reset\",\n\t\"AuctionFrameBrowse_Search\",\n\t\"AuctionFrameBrowse_Update\",\n\t\"AuctionFrameBrowse_UpdateArrows\",\n\t\"AuctionFrameFilter_OnClick\",\n\t\"AuctionFrameFilters_Update\",\n\t\"AuctionFrameFilters_UpdateClasses\",\n\t\"AuctionFrameFilters_UpdateInvTypes\",\n\t\"AuctionFrameFilters_UpdateSubClasses\",\n\t\"AuctionFrameItem_OnEnter\",\n\t\"AuctionFrameTab_OnClick\",\n\t\"AuctionFrame_GetTimeLeftText\",\n\t\"AuctionFrame_GetTimeLeftTooltipText\",\n\t\"AuctionFrame_Hide\",\n\t\"AuctionFrame_OnClickSortColumn\",\n\t\"AuctionFrame_OnLoad\",\n\t\"AuctionFrame_OnShow\",\n\t\"AuctionFrame_SetSort\",\n\t\"AuctionFrame_Show\",\n\t\"AuctionProgressFrame_OnUpdate\",\n\t\"AuctionSellItemButton_OnClick\",\n\t\"AuctionSellItemButton_OnEvent\",\n\t\"AuctionsButton_OnClick\",\n\t\"AuctionsCreateAuctionButton_OnClick\",\n\t\"AuctionsFrameAuctions_ValidateAuction\",\n\t\"BidButton_OnClick\",\n\t\"BrowseButton_OnClick\",\n\t\"BrowseDropDown_Initialize\",\n\t\"BrowseDropDown_OnClick\",\n\t\"BrowseDropDown_OnLoad\",\n\t\"BrowseResetButton_OnUpdate\",\n\t\"BrowseSearchButton_OnUpdate\",\n\t\"CloseAuctionStaticPopups\",\n\t\"DressUpItemLink\",\n\t\"DurationDropDown_Initialize\",\n\t\"DurationDropDown_OnClick\",\n\t\"DurationDropDown_OnLoad\",\n\t\"FilterButton_SetType\",\n\t\"PriceDropDown_Initialize\",\n\t\"PriceDropDown_OnClick\",\n\t\"PriceDropDown_OnLoad\",\n\t\"SetAuctionDressUpBackground\",\n\t\"SetMaxStackSize\",\n\t\"SortButton_UpdateArrow\",\n\t\"UpdateDeposit\",\n\t\"UpdateMaximumButtons\",\n\t-- tables: Blizzard_AuctionUI\n\t\"AuctionDressUpFrame\",\n\t\"AuctionDressUpFrameCloseButton\",\n\t\"AuctionDressUpFrameResetButton\",\n\t\"AuctionDressUpModel\",\n\t\"AuctionDressUpModelRotateLeftButton\",\n\t\"AuctionDressUpModelRotateRightButton\",\n\t\"AuctionFilterButton1\",\n\t\"AuctionFilterButton10\",\n\t\"AuctionFilterButton11\",\n\t\"AuctionFilterButton12\",\n\t\"AuctionFilterButton13\",\n\t\"AuctionFilterButton14\",\n\t\"AuctionFilterButton15\",\n\t\"AuctionFilterButton2\",\n\t\"AuctionFilterButton3\",\n\t\"AuctionFilterButton4\",\n\t\"AuctionFilterButton5\",\n\t\"AuctionFilterButton6\",\n\t\"AuctionFilterButton7\",\n\t\"AuctionFilterButton8\",\n\t\"AuctionFilterButton9\",\n\t\"AuctionFrame\",\n\t\"AuctionFrameAuctions\",\n\t\"AuctionFrameBid\",\n\t\"AuctionFrameBrowse\",\n\t\"AuctionFrameCloseButton\",\n\t\"AuctionFrameMoneyFrame\",\n\t\"AuctionFrameMoneyFrameCopperButton\",\n\t\"AuctionFrameMoneyFrameGoldButton\",\n\t\"AuctionFrameMoneyFrameSilverButton\",\n\t\"AuctionFrameTab1\",\n\t\"AuctionFrameTab2\",\n\t\"AuctionFrameTab3\",\n\t\"AuctionProgressBar\",\n\t\"AuctionProgressFrame\",\n\t\"AuctionProgressFrameCancelButton\",\n\t\"AuctionSort\",\n\t\"AuctionsBidSort\",\n\t\"AuctionsBlockFrame\",\n\t\"AuctionsButton1\",\n\t\"AuctionsButton1BuyoutFrame\",\n\t\"AuctionsButton1BuyoutFrameMoney\",\n\t\"AuctionsButton1BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton1BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton1BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton1BuyoutFrameText\",\n\t\"AuctionsButton1ClosingTime\",\n\t\"AuctionsButton1Item\",\n\t\"AuctionsButton1MoneyFrame\",\n\t\"AuctionsButton1MoneyFrameCopperButton\",\n\t\"AuctionsButton1MoneyFrameGoldButton\",\n\t\"AuctionsButton1MoneyFrameSilverButton\",\n\t\"AuctionsButton2\",\n\t\"AuctionsButton2BuyoutFrame\",\n\t\"AuctionsButton2BuyoutFrameMoney\",\n\t\"AuctionsButton2BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton2BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton2BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton2BuyoutFrameText\",\n\t\"AuctionsButton2ClosingTime\",\n\t\"AuctionsButton2Item\",\n\t\"AuctionsButton2MoneyFrame\",\n\t\"AuctionsButton2MoneyFrameCopperButton\",\n\t\"AuctionsButton2MoneyFrameGoldButton\",\n\t\"AuctionsButton2MoneyFrameSilverButton\",\n\t\"AuctionsButton3\",\n\t\"AuctionsButton3BuyoutFrame\",\n\t\"AuctionsButton3BuyoutFrameMoney\",\n\t\"AuctionsButton3BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton3BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton3BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton3BuyoutFrameText\",\n\t\"AuctionsButton3ClosingTime\",\n\t\"AuctionsButton3Item\",\n\t\"AuctionsButton3MoneyFrame\",\n\t\"AuctionsButton3MoneyFrameCopperButton\",\n\t\"AuctionsButton3MoneyFrameGoldButton\",\n\t\"AuctionsButton3MoneyFrameSilverButton\",\n\t\"AuctionsButton4\",\n\t\"AuctionsButton4BuyoutFrame\",\n\t\"AuctionsButton4BuyoutFrameMoney\",\n\t\"AuctionsButton4BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton4BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton4BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton4BuyoutFrameText\",\n\t\"AuctionsButton4ClosingTime\",\n\t\"AuctionsButton4Item\",\n\t\"AuctionsButton4MoneyFrame\",\n\t\"AuctionsButton4MoneyFrameCopperButton\",\n\t\"AuctionsButton4MoneyFrameGoldButton\",\n\t\"AuctionsButton4MoneyFrameSilverButton\",\n\t\"AuctionsButton5\",\n\t\"AuctionsButton5BuyoutFrame\",\n\t\"AuctionsButton5BuyoutFrameMoney\",\n\t\"AuctionsButton5BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton5BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton5BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton5BuyoutFrameText\",\n\t\"AuctionsButton5ClosingTime\",\n\t\"AuctionsButton5Item\",\n\t\"AuctionsButton5MoneyFrame\",\n\t\"AuctionsButton5MoneyFrameCopperButton\",\n\t\"AuctionsButton5MoneyFrameGoldButton\",\n\t\"AuctionsButton5MoneyFrameSilverButton\",\n\t\"AuctionsButton6\",\n\t\"AuctionsButton6BuyoutFrame\",\n\t\"AuctionsButton6BuyoutFrameMoney\",\n\t\"AuctionsButton6BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton6BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton6BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton6BuyoutFrameText\",\n\t\"AuctionsButton6ClosingTime\",\n\t\"AuctionsButton6Item\",\n\t\"AuctionsButton6MoneyFrame\",\n\t\"AuctionsButton6MoneyFrameCopperButton\",\n\t\"AuctionsButton6MoneyFrameGoldButton\",\n\t\"AuctionsButton6MoneyFrameSilverButton\",\n\t\"AuctionsButton7\",\n\t\"AuctionsButton7BuyoutFrame\",\n\t\"AuctionsButton7BuyoutFrameMoney\",\n\t\"AuctionsButton7BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton7BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton7BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton7BuyoutFrameText\",\n\t\"AuctionsButton7ClosingTime\",\n\t\"AuctionsButton7Item\",\n\t\"AuctionsButton7MoneyFrame\",\n\t\"AuctionsButton7MoneyFrameCopperButton\",\n\t\"AuctionsButton7MoneyFrameGoldButton\",\n\t\"AuctionsButton7MoneyFrameSilverButton\",\n\t\"AuctionsButton8\",\n\t\"AuctionsButton8BuyoutFrame\",\n\t\"AuctionsButton8BuyoutFrameMoney\",\n\t\"AuctionsButton8BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton8BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton8BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton8BuyoutFrameText\",\n\t\"AuctionsButton8ClosingTime\",\n\t\"AuctionsButton8Item\",\n\t\"AuctionsButton8MoneyFrame\",\n\t\"AuctionsButton8MoneyFrameCopperButton\",\n\t\"AuctionsButton8MoneyFrameGoldButton\",\n\t\"AuctionsButton8MoneyFrameSilverButton\",\n\t\"AuctionsButton9\",\n\t\"AuctionsButton9BuyoutFrame\",\n\t\"AuctionsButton9BuyoutFrameMoney\",\n\t\"AuctionsButton9BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton9BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton9BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton9BuyoutFrameText\",\n\t\"AuctionsButton9ClosingTime\",\n\t\"AuctionsButton9Item\",\n\t\"AuctionsButton9MoneyFrame\",\n\t\"AuctionsButton9MoneyFrameCopperButton\",\n\t\"AuctionsButton9MoneyFrameGoldButton\",\n\t\"AuctionsButton9MoneyFrameSilverButton\",\n\t\"AuctionsBuyoutError\",\n\t\"AuctionsCancelAuctionButton\",\n\t\"AuctionsCloseButton\",\n\t\"AuctionsCreateAuctionButton\",\n\t\"AuctionsDepositMoneyFrame\",\n\t\"AuctionsDepositMoneyFrameCopperButton\",\n\t\"AuctionsDepositMoneyFrameGoldButton\",\n\t\"AuctionsDepositMoneyFrameSilverButton\",\n\t\"AuctionsDurationSort\",\n\t\"AuctionsHighBidderSort\",\n\t\"AuctionsItemButton\",\n\t\"AuctionsNumStacksEntry\",\n\t\"AuctionsNumStacksMaxButton\",\n\t\"AuctionsQualitySort\",\n\t\"AuctionsScrollFrame\",\n\t\"AuctionsScrollFrameScrollBar\",\n\t\"AuctionsScrollFrameScrollBarScrollDownButton\",\n\t\"AuctionsScrollFrameScrollBarScrollUpButton\",\n\t\"AuctionsScrollFrameScrollChildFrame\",\n\t\"AuctionsStackSizeEntry\",\n\t\"AuctionsStackSizeMaxButton\",\n\t\"BidBidButton\",\n\t\"BidBidPrice\",\n\t\"BidBidPriceCopper\",\n\t\"BidBidPriceGold\",\n\t\"BidBidPriceSilver\",\n\t\"BidBidSort\",\n\t\"BidButton1\",\n\t\"BidButton1BuyoutMoneyFrame\",\n\t\"BidButton1BuyoutMoneyFrameCopperButton\",\n\t\"BidButton1BuyoutMoneyFrameGoldButton\",\n\t\"BidButton1BuyoutMoneyFrameSilverButton\",\n\t\"BidButton1ClosingTime\",\n\t\"BidButton1CurrentBidMoneyFrame\",\n\t\"BidButton1CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton1CurrentBidMoneyFrameGoldButton\",\n\t\"BidButton1CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton1Item\",\n\t\"BidButton2\",\n\t\"BidButton2BuyoutMoneyFrame\",\n\t\"BidButton2BuyoutMoneyFrameCopperButton\",\n\t\"BidButton2BuyoutMoneyFrameGoldButton\",\n\t\"BidButton2BuyoutMoneyFrameSilverButton\",\n\t\"BidButton2ClosingTime\",\n\t\"BidButton2CurrentBidMoneyFrame\",\n\t\"BidButton2CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton2CurrentBidMoneyFrameGoldButton\",\n\t\"BidButton2CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton2Item\",\n\t\"BidButton3\",\n\t\"BidButton3BuyoutMoneyFrame\",\n\t\"BidButton3BuyoutMoneyFrameCopperButton\",\n\t\"BidButton3BuyoutMoneyFrameGoldButton\",\n\t\"BidButton3BuyoutMoneyFrameSilverButton\",\n\t\"BidButton3ClosingTime\",\n\t\"BidButton3CurrentBidMoneyFrame\",\n\t\"BidButton3CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton3CurrentBidMoneyFrameGoldButton\",\n\t\"BidButton3CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton3Item\",\n\t\"BidButton4\",\n\t\"BidButton4BuyoutMoneyFrame\",\n\t\"BidButton4BuyoutMoneyFrameCopperButton\",\n\t\"BidButton4BuyoutMoneyFrameGoldButton\",\n\t\"BidButton4BuyoutMoneyFrameSilverButton\",\n\t\"BidButton4ClosingTime\",\n\t\"BidButton4CurrentBidMoneyFrame\",\n\t\"BidButton4CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton4CurrentBidMoneyFrameGoldButton\",\n\t\"BidButton4CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton4Item\",\n\t\"BidButton5\",\n\t\"BidButton5BuyoutMoneyFrame\",\n\t\"BidButton5BuyoutMoneyFrameCopperButton\",\n\t\"BidButton5BuyoutMoneyFrameGoldButton\",\n\t\"BidButton5BuyoutMoneyFrameSilverButton\",\n\t\"BidButton5ClosingTime\",\n\t\"BidButton5CurrentBidMoneyFrame\",\n\t\"BidButton5CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton5CurrentBidMoneyFrameGoldButton\",\n\t\"BidButton5CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton5Item\",\n\t\"BidButton6\",\n\t\"BidButton6BuyoutMoneyFrame\",\n\t\"BidButton6BuyoutMoneyFrameCopperButton\",\n\t\"BidButton6BuyoutMoneyFrameGoldButton\",\n\t\"BidButton6BuyoutMoneyFrameSilverButton\",\n\t\"BidButton6ClosingTime\",\n\t\"BidButton6CurrentBidMoneyFrame\",\n\t\"BidButton6CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton6CurrentBidMoneyFrameGoldButton\",\n\t\"BidButton6CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton6Item\",\n\t\"BidButton7\",\n\t\"BidButton7BuyoutMoneyFrame\",\n\t\"BidButton7BuyoutMoneyFrameCopperButton\",\n\t\"BidButton7BuyoutMoneyFrameGoldButton\",\n\t\"BidButton7BuyoutMoneyFrameSilverButton\",\n\t\"BidButton7ClosingTime\",\n\t\"BidButton7CurrentBidMoneyFrame\",\n\t\"BidButton7CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton7CurrentBidMoneyFrameGoldButton\",\n\t\"BidButton7CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton7Item\",\n\t\"BidButton8\",\n\t\"BidButton8BuyoutMoneyFrame\",\n\t\"BidButton8BuyoutMoneyFrameCopperButton\",\n\t\"BidButton8BuyoutMoneyFrameGoldButton\",\n\t\"BidButton8BuyoutMoneyFrameSilverButton\",\n\t\"BidButton8ClosingTime\",\n\t\"BidButton8CurrentBidMoneyFrame\",\n\t\"BidButton8CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton8CurrentBidMoneyFrameGoldButton\",\n\t\"BidButton8CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton8Item\",\n\t\"BidButton9\",\n\t\"BidButton9BuyoutMoneyFrame\",\n\t\"BidButton9BuyoutMoneyFrameCopperButton\",\n\t\"BidButton9BuyoutMoneyFrameGoldButton\",\n\t\"BidButton9BuyoutMoneyFrameSilverButton\",\n\t\"BidButton9ClosingTime\",\n\t\"BidButton9CurrentBidMoneyFrame\",\n\t\"BidButton9CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton9CurrentBidMoneyFrameGoldButton\",\n\t\"BidButton9CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton9Item\",\n\t\"BidBuyoutButton\",\n\t\"BidBuyoutSort\",\n\t\"BidCloseButton\",\n\t\"BidDurationSort\",\n\t\"BidLevelSort\",\n\t\"BidQualitySort\",\n\t\"BidScrollFrame\",\n\t\"BidScrollFrameScrollBar\",\n\t\"BidScrollFrameScrollBarScrollDownButton\",\n\t\"BidScrollFrameScrollBarScrollUpButton\",\n\t\"BidScrollFrameScrollChildFrame\",\n\t\"BidStatusSort\",\n\t\"BrowseBidButton\",\n\t\"BrowseBidPrice\",\n\t\"BrowseBidPriceCopper\",\n\t\"BrowseBidPriceGold\",\n\t\"BrowseBidPriceSilver\",\n\t\"BrowseButton1\",\n\t\"BrowseButton1BuyoutFrame\",\n\t\"BrowseButton1BuyoutFrameMoney\",\n\t\"BrowseButton1BuyoutFrameMoneyCopperButton\",\n\t\"BrowseButton1BuyoutFrameMoneyGoldButton\",\n\t\"BrowseButton1BuyoutFrameMoneySilverButton\",\n\t\"BrowseButton1BuyoutFrameText\",\n\t\"BrowseButton1ClosingTime\",\n\t\"BrowseButton1Item\",\n\t\"BrowseButton1MoneyFrame\",\n\t\"BrowseButton1MoneyFrameCopperButton\",\n\t\"BrowseButton1MoneyFrameGoldButton\",\n\t\"BrowseButton1MoneyFrameSilverButton\",\n\t\"BrowseButton1YourBidText\",\n\t\"BrowseButton2\",\n\t\"BrowseButton2BuyoutFrame\",\n\t\"BrowseButton2BuyoutFrameMoney\",\n\t\"BrowseButton2BuyoutFrameMoneyCopperButton\",\n\t\"BrowseButton2BuyoutFrameMoneyGoldButton\",\n\t\"BrowseButton2BuyoutFrameMoneySilverButton\",\n\t\"BrowseButton2BuyoutFrameText\",\n\t\"BrowseButton2ClosingTime\",\n\t\"BrowseButton2Item\",\n\t\"BrowseButton2MoneyFrame\",\n\t\"BrowseButton2MoneyFrameCopperButton\",\n\t\"BrowseButton2MoneyFrameGoldButton\",\n\t\"BrowseButton2MoneyFrameSilverButton\",\n\t\"BrowseButton2YourBidText\",\n\t\"BrowseButton3\",\n\t\"BrowseButton3BuyoutFrame\",\n\t\"BrowseButton3BuyoutFrameMoney\",\n\t\"BrowseButton3BuyoutFrameMoneyCopperButton\",\n\t\"BrowseButton3BuyoutFrameMoneyGoldButton\",\n\t\"BrowseButton3BuyoutFrameMoneySilverButton\",\n\t\"BrowseButton3BuyoutFrameText\",\n\t\"BrowseButton3ClosingTime\",\n\t\"BrowseButton3Item\",\n\t\"BrowseButton3MoneyFrame\",\n\t\"BrowseButton3MoneyFrameCopperButton\",\n\t\"BrowseButton3MoneyFrameGoldButton\",\n\t\"BrowseButton3MoneyFrameSilverButton\",\n\t\"BrowseButton3YourBidText\",\n\t\"BrowseButton4\",\n\t\"BrowseButton4BuyoutFrame\",\n\t\"BrowseButton4BuyoutFrameMoney\",\n\t\"BrowseButton4BuyoutFrameMoneyCopperButton\",\n\t\"BrowseButton4BuyoutFrameMoneyGoldButton\",\n\t\"BrowseButton4BuyoutFrameMoneySilverButton\",\n\t\"BrowseButton4BuyoutFrameText\",\n\t\"BrowseButton4ClosingTime\",\n\t\"BrowseButton4Item\",\n\t\"BrowseButton4MoneyFrame\",\n\t\"BrowseButton4MoneyFrameCopperButton\",\n\t\"BrowseButton4MoneyFrameGoldButton\",\n\t\"BrowseButton4MoneyFrameSilverButton\",\n\t\"BrowseButton4YourBidText\",\n\t\"BrowseButton5\",\n\t\"BrowseButton5BuyoutFrame\",\n\t\"BrowseButton5BuyoutFrameMoney\",\n\t\"BrowseButton5BuyoutFrameMoneyCopperButton\",\n\t\"BrowseButton5BuyoutFrameMoneyGoldButton\",\n\t\"BrowseButton5BuyoutFrameMoneySilverButton\",\n\t\"BrowseButton5BuyoutFrameText\",\n\t\"BrowseButton5ClosingTime\",\n\t\"BrowseButton5Item\",\n\t\"BrowseButton5MoneyFrame\",\n\t\"BrowseButton5MoneyFrameCopperButton\",\n\t\"BrowseButton5MoneyFrameGoldButton\",\n\t\"BrowseButton5MoneyFrameSilverButton\",\n\t\"BrowseButton5YourBidText\",\n\t\"BrowseButton6\",\n\t\"BrowseButton6BuyoutFrame\",\n\t\"BrowseButton6BuyoutFrameMoney\",\n\t\"BrowseButton6BuyoutFrameMoneyCopperButton\",\n\t\"BrowseButton6BuyoutFrameMoneyGoldButton\",\n\t\"BrowseButton6BuyoutFrameMoneySilverButton\",\n\t\"BrowseButton6BuyoutFrameText\",\n\t\"BrowseButton6ClosingTime\",\n\t\"BrowseButton6Item\",\n\t\"BrowseButton6MoneyFrame\",\n\t\"BrowseButton6MoneyFrameCopperButton\",\n\t\"BrowseButton6MoneyFrameGoldButton\",\n\t\"BrowseButton6MoneyFrameSilverButton\",\n\t\"BrowseButton6YourBidText\",\n\t\"BrowseButton7\",\n\t\"BrowseButton7BuyoutFrame\",\n\t\"BrowseButton7BuyoutFrameMoney\",\n\t\"BrowseButton7BuyoutFrameMoneyCopperButton\",\n\t\"BrowseButton7BuyoutFrameMoneyGoldButton\",\n\t\"BrowseButton7BuyoutFrameMoneySilverButton\",\n\t\"BrowseButton7BuyoutFrameText\",\n\t\"BrowseButton7ClosingTime\",\n\t\"BrowseButton7Item\",\n\t\"BrowseButton7MoneyFrame\",\n\t\"BrowseButton7MoneyFrameCopperButton\",\n\t\"BrowseButton7MoneyFrameGoldButton\",\n\t\"BrowseButton7MoneyFrameSilverButton\",\n\t\"BrowseButton7YourBidText\",\n\t\"BrowseButton8\",\n\t\"BrowseButton8BuyoutFrame\",\n\t\"BrowseButton8BuyoutFrameMoney\",\n\t\"BrowseButton8BuyoutFrameMoneyCopperButton\",\n\t\"BrowseButton8BuyoutFrameMoneyGoldButton\",\n\t\"BrowseButton8BuyoutFrameMoneySilverButton\",\n\t\"BrowseButton8BuyoutFrameText\",\n\t\"BrowseButton8ClosingTime\",\n\t\"BrowseButton8Item\",\n\t\"BrowseButton8MoneyFrame\",\n\t\"BrowseButton8MoneyFrameCopperButton\",\n\t\"BrowseButton8MoneyFrameGoldButton\",\n\t\"BrowseButton8MoneyFrameSilverButton\",\n\t\"BrowseButton8YourBidText\",\n\t\"BrowseBuyoutButton\",\n\t\"BrowseCloseButton\",\n\t\"BrowseCurrentBidSort\",\n\t\"BrowseDropDown\",\n\t\"BrowseDropDownButton\",\n\t\"BrowseDurationSort\",\n\t\"BrowseFilterScrollFrame\",\n\t\"BrowseFilterScrollFrameScrollBar\",\n\t\"BrowseFilterScrollFrameScrollBarScrollDownButton\",\n\t\"BrowseFilterScrollFrameScrollBarScrollUpButton\",\n\t\"BrowseFilterScrollFrameScrollChildFrame\",\n\t\"BrowseHighBidderSort\",\n\t\"BrowseLevelSort\",\n\t\"BrowseMaxLevel\",\n\t\"BrowseMinLevel\",\n\t\"BrowseName\",\n\t\"BrowseNextPageButton\",\n\t\"BrowsePrevPageButton\",\n\t\"BrowseQualitySort\",\n\t\"BrowseResetButton\",\n\t\"BrowseScrollFrame\",\n\t\"BrowseScrollFrameScrollBar\",\n\t\"BrowseScrollFrameScrollBarScrollDownButton\",\n\t\"BrowseScrollFrameScrollBarScrollUpButton\",\n\t\"BrowseScrollFrameScrollChildFrame\",\n\t\"BrowseSearchButton\",\n\t\"BuyoutPrice\",\n\t\"BuyoutPriceCopper\",\n\t\"BuyoutPriceGold\",\n\t\"BuyoutPriceSilver\",\n\t\"CLASS_FILTERS\",\n\t\"DurationDropDown\",\n\t\"DurationDropDownButton\",\n\t\"IsUsableCheckButton\",\n\t\"OPEN_FILTER_LIST\",\n\t\"PriceDropDown\",\n\t\"PriceDropDownButton\",\n\t\"ShowOnPlayerCheckButton\",\n\t\"StartPrice\",\n\t\"StartPriceCopper\",\n\t\"StartPriceGold\",\n\t\"StartPriceSilver\",\n\t-- frames: Blizzard_AuctionUI\n\t\"AuctionFrame\",\n\t\"AuctionFrameTab1\",\n\t\"AuctionFrameTab2\",\n\t\"AuctionFrameTab3\",\n\t\"AuctionFrameMoneyFrame\",\n\t\"AuctionFrameMoneyFrameCopperButton\",\n\t\"AuctionFrameMoneyFrameSilverButton\",\n\t\"AuctionFrameMoneyFrameGoldButton\",\n\t\"AuctionFrameCloseButton\",\n\t\"AuctionFrameBrowse\",\n\t\"AuctionFilterButton1\",\n\t\"AuctionFilterButton2\",\n\t\"AuctionFilterButton3\",\n\t\"AuctionFilterButton4\",\n\t\"AuctionFilterButton5\",\n\t\"AuctionFilterButton6\",\n\t\"AuctionFilterButton7\",\n\t\"AuctionFilterButton8\",\n\t\"AuctionFilterButton9\",\n\t\"AuctionFilterButton10\",\n\t\"AuctionFilterButton11\",\n\t\"AuctionFilterButton12\",\n\t\"AuctionFilterButton13\",\n\t\"AuctionFilterButton14\",\n\t\"AuctionFilterButton15\",\n\t\"BrowseFilterScrollFrame\",\n\t\"BrowseFilterScrollFrameScrollChildFrame\",\n\t\"BrowseFilterScrollFrameScrollBar\",\n\t\"BrowseFilterScrollFrameScrollBarScrollUpButton\",\n\t\"BrowseFilterScrollFrameScrollBarScrollDownButton\",\n\t\"BrowseScrollFrame\",\n\t\"BrowseScrollFrameScrollChildFrame\",\n\t\"BrowseScrollFrameScrollBar\",\n\t\"BrowseScrollFrameScrollBarScrollUpButton\",\n\t\"BrowseScrollFrameScrollBarScrollDownButton\",\n\t\"BrowseQualitySort\",\n\t\"BrowseLevelSort\",\n\t\"BrowseDurationSort\",\n\t\"BrowseHighBidderSort\",\n\t\"BrowseCurrentBidSort\",\n\t\"BrowseButton1\",\n\t\"BrowseButton1Item\",\n\t\"BrowseButton1ClosingTime\",\n\t\"BrowseButton1MoneyFrame\",\n\t\"BrowseButton1MoneyFrameCopperButton\",\n\t\"BrowseButton1MoneyFrameSilverButton\",\n\t\"BrowseButton1MoneyFrameGoldButton\",\n\t\"BrowseButton1YourBidText\",\n\t\"BrowseButton1BuyoutFrame\",\n\t\"BrowseButton1BuyoutFrameMoney\",\n\t\"BrowseButton1BuyoutFrameMoneyCopperButton\",\n\t\"BrowseButton1BuyoutFrameMoneySilverButton\",\n\t\"BrowseButton1BuyoutFrameMoneyGoldButton\",\n\t\"BrowseButton1BuyoutFrameText\",\n\t\"BrowseButton2\",\n\t\"BrowseButton2Item\",\n\t\"BrowseButton2ClosingTime\",\n\t\"BrowseButton2MoneyFrame\",\n\t\"BrowseButton2MoneyFrameCopperButton\",\n\t\"BrowseButton2MoneyFrameSilverButton\",\n\t\"BrowseButton2MoneyFrameGoldButton\",\n\t\"BrowseButton2YourBidText\",\n\t\"BrowseButton2BuyoutFrame\",\n\t\"BrowseButton2BuyoutFrameMoney\",\n\t\"BrowseButton2BuyoutFrameMoneyCopperButton\",\n\t\"BrowseButton2BuyoutFrameMoneySilverButton\",\n\t\"BrowseButton2BuyoutFrameMoneyGoldButton\",\n\t\"BrowseButton2BuyoutFrameText\",\n\t\"BrowseButton3\",\n\t\"BrowseButton3Item\",\n\t\"BrowseButton3ClosingTime\",\n\t\"BrowseButton3MoneyFrame\",\n\t\"BrowseButton3MoneyFrameCopperButton\",\n\t\"BrowseButton3MoneyFrameSilverButton\",\n\t\"BrowseButton3MoneyFrameGoldButton\",\n\t\"BrowseButton3YourBidText\",\n\t\"BrowseButton3BuyoutFrame\",\n\t\"BrowseButton3BuyoutFrameMoney\",\n\t\"BrowseButton3BuyoutFrameMoneyCopperButton\",\n\t\"BrowseButton3BuyoutFrameMoneySilverButton\",\n\t\"BrowseButton3BuyoutFrameMoneyGoldButton\",\n\t\"BrowseButton3BuyoutFrameText\",\n\t\"BrowseButton4\",\n\t\"BrowseButton4Item\",\n\t\"BrowseButton4ClosingTime\",\n\t\"BrowseButton4MoneyFrame\",\n\t\"BrowseButton4MoneyFrameCopperButton\",\n\t\"BrowseButton4MoneyFrameSilverButton\",\n\t\"BrowseButton4MoneyFrameGoldButton\",\n\t\"BrowseButton4YourBidText\",\n\t\"BrowseButton4BuyoutFrame\",\n\t\"BrowseButton4BuyoutFrameMoney\",\n\t\"BrowseButton4BuyoutFrameMoneyCopperButton\",\n\t\"BrowseButton4BuyoutFrameMoneySilverButton\",\n\t\"BrowseButton4BuyoutFrameMoneyGoldButton\",\n\t\"BrowseButton4BuyoutFrameText\",\n\t\"BrowseButton5\",\n\t\"BrowseButton5Item\",\n\t\"BrowseButton5ClosingTime\",\n\t\"BrowseButton5MoneyFrame\",\n\t\"BrowseButton5MoneyFrameCopperButton\",\n\t\"BrowseButton5MoneyFrameSilverButton\",\n\t\"BrowseButton5MoneyFrameGoldButton\",\n\t\"BrowseButton5YourBidText\",\n\t\"BrowseButton5BuyoutFrame\",\n\t\"BrowseButton5BuyoutFrameMoney\",\n\t\"BrowseButton5BuyoutFrameMoneyCopperButton\",\n\t\"BrowseButton5BuyoutFrameMoneySilverButton\",\n\t\"BrowseButton5BuyoutFrameMoneyGoldButton\",\n\t\"BrowseButton5BuyoutFrameText\",\n\t\"BrowseButton6\",\n\t\"BrowseButton6Item\",\n\t\"BrowseButton6ClosingTime\",\n\t\"BrowseButton6MoneyFrame\",\n\t\"BrowseButton6MoneyFrameCopperButton\",\n\t\"BrowseButton6MoneyFrameSilverButton\",\n\t\"BrowseButton6MoneyFrameGoldButton\",\n\t\"BrowseButton6YourBidText\",\n\t\"BrowseButton6BuyoutFrame\",\n\t\"BrowseButton6BuyoutFrameMoney\",\n\t\"BrowseButton6BuyoutFrameMoneyCopperButton\",\n\t\"BrowseButton6BuyoutFrameMoneySilverButton\",\n\t\"BrowseButton6BuyoutFrameMoneyGoldButton\",\n\t\"BrowseButton6BuyoutFrameText\",\n\t\"BrowseButton7\",\n\t\"BrowseButton7Item\",\n\t\"BrowseButton7ClosingTime\",\n\t\"BrowseButton7MoneyFrame\",\n\t\"BrowseButton7MoneyFrameCopperButton\",\n\t\"BrowseButton7MoneyFrameSilverButton\",\n\t\"BrowseButton7MoneyFrameGoldButton\",\n\t\"BrowseButton7YourBidText\",\n\t\"BrowseButton7BuyoutFrame\",\n\t\"BrowseButton7BuyoutFrameMoney\",\n\t\"BrowseButton7BuyoutFrameMoneyCopperButton\",\n\t\"BrowseButton7BuyoutFrameMoneySilverButton\",\n\t\"BrowseButton7BuyoutFrameMoneyGoldButton\",\n\t\"BrowseButton7BuyoutFrameText\",\n\t\"BrowseButton8\",\n\t\"BrowseButton8Item\",\n\t\"BrowseButton8ClosingTime\",\n\t\"BrowseButton8MoneyFrame\",\n\t\"BrowseButton8MoneyFrameCopperButton\",\n\t\"BrowseButton8MoneyFrameSilverButton\",\n\t\"BrowseButton8MoneyFrameGoldButton\",\n\t\"BrowseButton8YourBidText\",\n\t\"BrowseButton8BuyoutFrame\",\n\t\"BrowseButton8BuyoutFrameMoney\",\n\t\"BrowseButton8BuyoutFrameMoneyCopperButton\",\n\t\"BrowseButton8BuyoutFrameMoneySilverButton\",\n\t\"BrowseButton8BuyoutFrameMoneyGoldButton\",\n\t\"BrowseButton8BuyoutFrameText\",\n\t\"BrowseName\",\n\t\"BrowseMinLevel\",\n\t\"BrowseMaxLevel\",\n\t\"BrowseDropDown\",\n\t\"BrowseDropDownButton\",\n\t\"IsUsableCheckButton\",\n\t\"ShowOnPlayerCheckButton\",\n\t\"BrowseSearchButton\",\n\t\"BrowsePrevPageButton\",\n\t\"BrowseNextPageButton\",\n\t\"BrowseCloseButton\",\n\t\"BrowseBuyoutButton\",\n\t\"BrowseBidButton\",\n\t\"BrowseBidPrice\",\n\t\"BrowseBidPriceGold\",\n\t\"BrowseBidPriceSilver\",\n\t\"BrowseBidPriceCopper\",\n\t\"BrowseResetButton\",\n\t\"AuctionFrameBid\",\n\t\"BidQualitySort\",\n\t\"BidLevelSort\",\n\t\"BidDurationSort\",\n\t\"BidBuyoutSort\",\n\t\"BidStatusSort\",\n\t\"BidBidSort\",\n\t\"BidScrollFrame\",\n\t\"BidScrollFrameScrollChildFrame\",\n\t\"BidScrollFrameScrollBar\",\n\t\"BidScrollFrameScrollBarScrollUpButton\",\n\t\"BidScrollFrameScrollBarScrollDownButton\",\n\t\"BidButton1\",\n\t\"BidButton1Item\",\n\t\"BidButton1ClosingTime\",\n\t\"BidButton1BuyoutMoneyFrame\",\n\t\"BidButton1BuyoutMoneyFrameCopperButton\",\n\t\"BidButton1BuyoutMoneyFrameSilverButton\",\n\t\"BidButton1BuyoutMoneyFrameGoldButton\",\n\t\"BidButton1CurrentBidMoneyFrame\",\n\t\"BidButton1CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton1CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton1CurrentBidMoneyFrameGoldButton\",\n\t\"BidButton2\",\n\t\"BidButton2Item\",\n\t\"BidButton2ClosingTime\",\n\t\"BidButton2BuyoutMoneyFrame\",\n\t\"BidButton2BuyoutMoneyFrameCopperButton\",\n\t\"BidButton2BuyoutMoneyFrameSilverButton\",\n\t\"BidButton2BuyoutMoneyFrameGoldButton\",\n\t\"BidButton2CurrentBidMoneyFrame\",\n\t\"BidButton2CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton2CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton2CurrentBidMoneyFrameGoldButton\",\n\t\"BidButton3\",\n\t\"BidButton3Item\",\n\t\"BidButton3ClosingTime\",\n\t\"BidButton3BuyoutMoneyFrame\",\n\t\"BidButton3BuyoutMoneyFrameCopperButton\",\n\t\"BidButton3BuyoutMoneyFrameSilverButton\",\n\t\"BidButton3BuyoutMoneyFrameGoldButton\",\n\t\"BidButton3CurrentBidMoneyFrame\",\n\t\"BidButton3CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton3CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton3CurrentBidMoneyFrameGoldButton\",\n\t\"BidButton4\",\n\t\"BidButton4Item\",\n\t\"BidButton4ClosingTime\",\n\t\"BidButton4BuyoutMoneyFrame\",\n\t\"BidButton4BuyoutMoneyFrameCopperButton\",\n\t\"BidButton4BuyoutMoneyFrameSilverButton\",\n\t\"BidButton4BuyoutMoneyFrameGoldButton\",\n\t\"BidButton4CurrentBidMoneyFrame\",\n\t\"BidButton4CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton4CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton4CurrentBidMoneyFrameGoldButton\",\n\t\"BidButton5\",\n\t\"BidButton5Item\",\n\t\"BidButton5ClosingTime\",\n\t\"BidButton5BuyoutMoneyFrame\",\n\t\"BidButton5BuyoutMoneyFrameCopperButton\",\n\t\"BidButton5BuyoutMoneyFrameSilverButton\",\n\t\"BidButton5BuyoutMoneyFrameGoldButton\",\n\t\"BidButton5CurrentBidMoneyFrame\",\n\t\"BidButton5CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton5CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton5CurrentBidMoneyFrameGoldButton\",\n\t\"BidButton6\",\n\t\"BidButton6Item\",\n\t\"BidButton6ClosingTime\",\n\t\"BidButton6BuyoutMoneyFrame\",\n\t\"BidButton6BuyoutMoneyFrameCopperButton\",\n\t\"BidButton6BuyoutMoneyFrameSilverButton\",\n\t\"BidButton6BuyoutMoneyFrameGoldButton\",\n\t\"BidButton6CurrentBidMoneyFrame\",\n\t\"BidButton6CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton6CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton6CurrentBidMoneyFrameGoldButton\",\n\t\"BidButton7\",\n\t\"BidButton7Item\",\n\t\"BidButton7ClosingTime\",\n\t\"BidButton7BuyoutMoneyFrame\",\n\t\"BidButton7BuyoutMoneyFrameCopperButton\",\n\t\"BidButton7BuyoutMoneyFrameSilverButton\",\n\t\"BidButton7BuyoutMoneyFrameGoldButton\",\n\t\"BidButton7CurrentBidMoneyFrame\",\n\t\"BidButton7CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton7CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton7CurrentBidMoneyFrameGoldButton\",\n\t\"BidButton8\",\n\t\"BidButton8Item\",\n\t\"BidButton8ClosingTime\",\n\t\"BidButton8BuyoutMoneyFrame\",\n\t\"BidButton8BuyoutMoneyFrameCopperButton\",\n\t\"BidButton8BuyoutMoneyFrameSilverButton\",\n\t\"BidButton8BuyoutMoneyFrameGoldButton\",\n\t\"BidButton8CurrentBidMoneyFrame\",\n\t\"BidButton8CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton8CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton8CurrentBidMoneyFrameGoldButton\",\n\t\"BidButton9\",\n\t\"BidButton9Item\",\n\t\"BidButton9ClosingTime\",\n\t\"BidButton9BuyoutMoneyFrame\",\n\t\"BidButton9BuyoutMoneyFrameCopperButton\",\n\t\"BidButton9BuyoutMoneyFrameSilverButton\",\n\t\"BidButton9BuyoutMoneyFrameGoldButton\",\n\t\"BidButton9CurrentBidMoneyFrame\",\n\t\"BidButton9CurrentBidMoneyFrameCopperButton\",\n\t\"BidButton9CurrentBidMoneyFrameSilverButton\",\n\t\"BidButton9CurrentBidMoneyFrameGoldButton\",\n\t\"BidBidPrice\",\n\t\"BidBidPriceGold\",\n\t\"BidBidPriceSilver\",\n\t\"BidBidPriceCopper\",\n\t\"BidCloseButton\",\n\t\"BidBuyoutButton\",\n\t\"BidBidButton\",\n\t\"AuctionFrameAuctions\",\n\t\"AuctionsQualitySort\",\n\t\"AuctionsDurationSort\",\n\t\"AuctionsHighBidderSort\",\n\t\"AuctionsBidSort\",\n\t\"AuctionsScrollFrame\",\n\t\"AuctionsScrollFrameScrollChildFrame\",\n\t\"AuctionsScrollFrameScrollBar\",\n\t\"AuctionsScrollFrameScrollBarScrollUpButton\",\n\t\"AuctionsScrollFrameScrollBarScrollDownButton\",\n\t\"AuctionsButton1\",\n\t\"AuctionsButton1Item\",\n\t\"AuctionsButton1ClosingTime\",\n\t\"AuctionsButton1MoneyFrame\",\n\t\"AuctionsButton1MoneyFrameCopperButton\",\n\t\"AuctionsButton1MoneyFrameSilverButton\",\n\t\"AuctionsButton1MoneyFrameGoldButton\",\n\t\"AuctionsButton1BuyoutFrame\",\n\t\"AuctionsButton1BuyoutFrameMoney\",\n\t\"AuctionsButton1BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton1BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton1BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton1BuyoutFrameText\",\n\t\"AuctionsButton2\",\n\t\"AuctionsButton2Item\",\n\t\"AuctionsButton2ClosingTime\",\n\t\"AuctionsButton2MoneyFrame\",\n\t\"AuctionsButton2MoneyFrameCopperButton\",\n\t\"AuctionsButton2MoneyFrameSilverButton\",\n\t\"AuctionsButton2MoneyFrameGoldButton\",\n\t\"AuctionsButton2BuyoutFrame\",\n\t\"AuctionsButton2BuyoutFrameMoney\",\n\t\"AuctionsButton2BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton2BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton2BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton2BuyoutFrameText\",\n\t\"AuctionsButton3\",\n\t\"AuctionsButton3Item\",\n\t\"AuctionsButton3ClosingTime\",\n\t\"AuctionsButton3MoneyFrame\",\n\t\"AuctionsButton3MoneyFrameCopperButton\",\n\t\"AuctionsButton3MoneyFrameSilverButton\",\n\t\"AuctionsButton3MoneyFrameGoldButton\",\n\t\"AuctionsButton3BuyoutFrame\",\n\t\"AuctionsButton3BuyoutFrameMoney\",\n\t\"AuctionsButton3BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton3BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton3BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton3BuyoutFrameText\",\n\t\"AuctionsButton4\",\n\t\"AuctionsButton4Item\",\n\t\"AuctionsButton4ClosingTime\",\n\t\"AuctionsButton4MoneyFrame\",\n\t\"AuctionsButton4MoneyFrameCopperButton\",\n\t\"AuctionsButton4MoneyFrameSilverButton\",\n\t\"AuctionsButton4MoneyFrameGoldButton\",\n\t\"AuctionsButton4BuyoutFrame\",\n\t\"AuctionsButton4BuyoutFrameMoney\",\n\t\"AuctionsButton4BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton4BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton4BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton4BuyoutFrameText\",\n\t\"AuctionsButton5\",\n\t\"AuctionsButton5Item\",\n\t\"AuctionsButton5ClosingTime\",\n\t\"AuctionsButton5MoneyFrame\",\n\t\"AuctionsButton5MoneyFrameCopperButton\",\n\t\"AuctionsButton5MoneyFrameSilverButton\",\n\t\"AuctionsButton5MoneyFrameGoldButton\",\n\t\"AuctionsButton5BuyoutFrame\",\n\t\"AuctionsButton5BuyoutFrameMoney\",\n\t\"AuctionsButton5BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton5BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton5BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton5BuyoutFrameText\",\n\t\"AuctionsButton6\",\n\t\"AuctionsButton6Item\",\n\t\"AuctionsButton6ClosingTime\",\n\t\"AuctionsButton6MoneyFrame\",\n\t\"AuctionsButton6MoneyFrameCopperButton\",\n\t\"AuctionsButton6MoneyFrameSilverButton\",\n\t\"AuctionsButton6MoneyFrameGoldButton\",\n\t\"AuctionsButton6BuyoutFrame\",\n\t\"AuctionsButton6BuyoutFrameMoney\",\n\t\"AuctionsButton6BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton6BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton6BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton6BuyoutFrameText\",\n\t\"AuctionsButton7\",\n\t\"AuctionsButton7Item\",\n\t\"AuctionsButton7ClosingTime\",\n\t\"AuctionsButton7MoneyFrame\",\n\t\"AuctionsButton7MoneyFrameCopperButton\",\n\t\"AuctionsButton7MoneyFrameSilverButton\",\n\t\"AuctionsButton7MoneyFrameGoldButton\",\n\t\"AuctionsButton7BuyoutFrame\",\n\t\"AuctionsButton7BuyoutFrameMoney\",\n\t\"AuctionsButton7BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton7BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton7BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton7BuyoutFrameText\",\n\t\"AuctionsButton8\",\n\t\"AuctionsButton8Item\",\n\t\"AuctionsButton8ClosingTime\",\n\t\"AuctionsButton8MoneyFrame\",\n\t\"AuctionsButton8MoneyFrameCopperButton\",\n\t\"AuctionsButton8MoneyFrameSilverButton\",\n\t\"AuctionsButton8MoneyFrameGoldButton\",\n\t\"AuctionsButton8BuyoutFrame\",\n\t\"AuctionsButton8BuyoutFrameMoney\",\n\t\"AuctionsButton8BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton8BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton8BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton8BuyoutFrameText\",\n\t\"AuctionsButton9\",\n\t\"AuctionsButton9Item\",\n\t\"AuctionsButton9ClosingTime\",\n\t\"AuctionsButton9MoneyFrame\",\n\t\"AuctionsButton9MoneyFrameCopperButton\",\n\t\"AuctionsButton9MoneyFrameSilverButton\",\n\t\"AuctionsButton9MoneyFrameGoldButton\",\n\t\"AuctionsButton9BuyoutFrame\",\n\t\"AuctionsButton9BuyoutFrameMoney\",\n\t\"AuctionsButton9BuyoutFrameMoneyCopperButton\",\n\t\"AuctionsButton9BuyoutFrameMoneySilverButton\",\n\t\"AuctionsButton9BuyoutFrameMoneyGoldButton\",\n\t\"AuctionsButton9BuyoutFrameText\",\n\t\"AuctionsItemButton\",\n\t\"AuctionsStackSizeEntry\",\n\t\"AuctionsStackSizeMaxButton\",\n\t\"AuctionsNumStacksEntry\",\n\t\"AuctionsNumStacksMaxButton\",\n\t\"PriceDropDown\",\n\t\"PriceDropDownButton\",\n\t\"StartPrice\",\n\t\"StartPriceGold\",\n\t\"StartPriceSilver\",\n\t\"StartPriceCopper\",\n\t\"BuyoutPrice\",\n\t\"BuyoutPriceGold\",\n\t\"BuyoutPriceSilver\",\n\t\"BuyoutPriceCopper\",\n\t\"AuctionsBuyoutError\",\n\t\"DurationDropDown\",\n\t\"DurationDropDownButton\",\n\t\"AuctionsDepositMoneyFrame\",\n\t\"AuctionsDepositMoneyFrameCopperButton\",\n\t\"AuctionsDepositMoneyFrameSilverButton\",\n\t\"AuctionsDepositMoneyFrameGoldButton\",\n\t\"AuctionsCloseButton\",\n\t\"AuctionsCancelAuctionButton\",\n\t\"AuctionsCreateAuctionButton\",\n\t\"AuctionsBlockFrame\",\n\t\"AuctionProgressFrame\",\n\t\"AuctionProgressBar\",\n\t\"AuctionProgressFrameCancelButton\",\n\t\"AuctionDressUpFrame\",\n\t\"AuctionDressUpModel\",\n\t\"AuctionDressUpModelRotateLeftButton\",\n\t\"AuctionDressUpModelRotateRightButton\",\n\t\"AuctionDressUpFrameResetButton\",\n\t\"AuctionDressUpFrameCloseButton\",\n\t-- widgets: Blizzard_AuctionUI\n\t\"AuctionDressUpBackgroundBot\",\n\t\"AuctionDressUpBackgroundTop\",\n\t\"AuctionDressUpFrameResetButtonText\",\n\t\"AuctionDressUpFrameTop\",\n\t\"AuctionFilterButton10Lines\",\n\t\"AuctionFilterButton10NormalText\",\n\t\"AuctionFilterButton10NormalTexture\",\n\t\"AuctionFilterButton11Lines\",\n\t\"AuctionFilterButton11NormalText\",\n\t\"AuctionFilterButton11NormalTexture\",\n\t\"AuctionFilterButton12Lines\",\n\t\"AuctionFilterButton12NormalText\",\n\t\"AuctionFilterButton12NormalTexture\",\n\t\"AuctionFilterButton13Lines\",\n\t\"AuctionFilterButton13NormalText\",\n\t\"AuctionFilterButton13NormalTexture\",\n\t\"AuctionFilterButton14Lines\",\n\t\"AuctionFilterButton14NormalText\",\n\t\"AuctionFilterButton14NormalTexture\",\n\t\"AuctionFilterButton15Lines\",\n\t\"AuctionFilterButton15NormalText\",\n\t\"AuctionFilterButton15NormalTexture\",\n\t\"AuctionFilterButton1Lines\",\n\t\"AuctionFilterButton1NormalText\",\n\t\"AuctionFilterButton1NormalTexture\",\n\t\"AuctionFilterButton2Lines\",\n\t\"AuctionFilterButton2NormalText\",\n\t\"AuctionFilterButton2NormalTexture\",\n\t\"AuctionFilterButton3Lines\",\n\t\"AuctionFilterButton3NormalText\",\n\t\"AuctionFilterButton3NormalTexture\",\n\t\"AuctionFilterButton4Lines\",\n\t\"AuctionFilterButton4NormalText\",\n\t\"AuctionFilterButton4NormalTexture\",\n\t\"AuctionFilterButton5Lines\",\n\t\"AuctionFilterButton5NormalText\",\n\t\"AuctionFilterButton5NormalTexture\",\n\t\"AuctionFilterButton6Lines\",\n\t\"AuctionFilterButton6NormalText\",\n\t\"AuctionFilterButton6NormalTexture\",\n\t\"AuctionFilterButton7Lines\",\n\t\"AuctionFilterButton7NormalText\",\n\t\"AuctionFilterButton7NormalTexture\",\n\t\"AuctionFilterButton8Lines\",\n\t\"AuctionFilterButton8NormalText\",\n\t\"AuctionFilterButton8NormalTexture\",\n\t\"AuctionFilterButton9Lines\",\n\t\"AuctionFilterButton9NormalText\",\n\t\"AuctionFilterButton9NormalTexture\",\n\t\"AuctionFrameBot\",\n\t\"AuctionFrameBotLeft\",\n\t\"AuctionFrameBotRight\",\n\t\"AuctionFrameMoneyFrameCopperButtonText\",\n\t\"AuctionFrameMoneyFrameGoldButtonText\",\n\t\"AuctionFrameMoneyFrameSilverButtonText\",\n\t\"AuctionFrameTab1HighlightTexture\",\n\t\"AuctionFrameTab1Left\",\n\t\"AuctionFrameTab1LeftDisabled\",\n\t\"AuctionFrameTab1Middle\",\n\t\"AuctionFrameTab1MiddleDisabled\",\n\t\"AuctionFrameTab1Right\",\n\t\"AuctionFrameTab1RightDisabled\",\n\t\"AuctionFrameTab1Text\",\n\t\"AuctionFrameTab2HighlightTexture\",\n\t\"AuctionFrameTab2Left\",\n\t\"AuctionFrameTab2LeftDisabled\",\n\t\"AuctionFrameTab2Middle\",\n\t\"AuctionFrameTab2MiddleDisabled\",\n\t\"AuctionFrameTab2Right\",\n\t\"AuctionFrameTab2RightDisabled\",\n\t\"AuctionFrameTab2Text\",\n\t\"AuctionFrameTab3HighlightTexture\",\n\t\"AuctionFrameTab3Left\",\n\t\"AuctionFrameTab3LeftDisabled\",\n\t\"AuctionFrameTab3Middle\",\n\t\"AuctionFrameTab3MiddleDisabled\",\n\t\"AuctionFrameTab3Right\",\n\t\"AuctionFrameTab3RightDisabled\",\n\t\"AuctionFrameTab3Text\",\n\t\"AuctionFrameTop\",\n\t\"AuctionFrameTopLeft\",\n\t\"AuctionFrameTopRight\",\n\t\"AuctionPortraitTexture\",\n\t\"AuctionProgressBarBorder\",\n\t\"AuctionProgressBarBorderShield\",\n\t\"AuctionProgressBarFlash\",\n\t\"AuctionProgressBarIcon\",\n\t\"AuctionProgressBarSpark\",\n\t\"AuctionProgressBarText\",\n\t\"AuctionProgressFrameFill\",\n\t\"AuctionProgressFrameLeft\",\n\t\"AuctionProgressFrameMiddle\",\n\t\"AuctionProgressFrameRight\",\n\t\"AuctionsBidSortArrow\",\n\t\"AuctionsBidSortLeft\",\n\t\"AuctionsBidSortMiddle\",\n\t\"AuctionsBidSortRight\",\n\t\"AuctionsBidSortText\",\n\t\"AuctionsButton1BuyoutFrameMoneyCopperButtonText\",\n\t\"AuctionsButton1BuyoutFrameMoneyGoldButtonText\",\n\t\"AuctionsButton1BuyoutFrameMoneySilverButtonText\",\n\t\"AuctionsButton1ClosingTimeText\",\n\t\"AuctionsButton1HighBidder\",\n\t\"AuctionsButton1Highlight\",\n\t\"AuctionsButton1ItemCount\",\n\t\"AuctionsButton1ItemIconTexture\",\n\t\"AuctionsButton1ItemNormalTexture\",\n\t\"AuctionsButton1ItemStock\",\n\t\"AuctionsButton1Left\",\n\t\"AuctionsButton1MoneyFrameCopperButtonText\",\n\t\"AuctionsButton1MoneyFrameGoldButtonText\",\n\t\"AuctionsButton1MoneyFrameLabel\",\n\t\"AuctionsButton1MoneyFrameSilverButtonText\",\n\t\"AuctionsButton1Name\",\n\t\"AuctionsButton1Right\",\n\t\"AuctionsButton2BuyoutFrameMoneyCopperButtonText\",\n\t\"AuctionsButton2BuyoutFrameMoneyGoldButtonText\",\n\t\"AuctionsButton2BuyoutFrameMoneySilverButtonText\",\n\t\"AuctionsButton2ClosingTimeText\",\n\t\"AuctionsButton2HighBidder\",\n\t\"AuctionsButton2Highlight\",\n\t\"AuctionsButton2ItemCount\",\n\t\"AuctionsButton2ItemIconTexture\",\n\t\"AuctionsButton2ItemNormalTexture\",\n\t\"AuctionsButton2ItemStock\",\n\t\"AuctionsButton2Left\",\n\t\"AuctionsButton2MoneyFrameCopperButtonText\",\n\t\"AuctionsButton2MoneyFrameGoldButtonText\",\n\t\"AuctionsButton2MoneyFrameLabel\",\n\t\"AuctionsButton2MoneyFrameSilverButtonText\",\n\t\"AuctionsButton2Name\",\n\t\"AuctionsButton2Right\",\n\t\"AuctionsButton3BuyoutFrameMoneyCopperButtonText\",\n\t\"AuctionsButton3BuyoutFrameMoneyGoldButtonText\",\n\t\"AuctionsButton3BuyoutFrameMoneySilverButtonText\",\n\t\"AuctionsButton3ClosingTimeText\",\n\t\"AuctionsButton3HighBidder\",\n\t\"AuctionsButton3Highlight\",\n\t\"AuctionsButton3ItemCount\",\n\t\"AuctionsButton3ItemIconTexture\",\n\t\"AuctionsButton3ItemNormalTexture\",\n\t\"AuctionsButton3ItemStock\",\n\t\"AuctionsButton3Left\",\n\t\"AuctionsButton3MoneyFrameCopperButtonText\",\n\t\"AuctionsButton3MoneyFrameGoldButtonText\",\n\t\"AuctionsButton3MoneyFrameLabel\",\n\t\"AuctionsButton3MoneyFrameSilverButtonText\",\n\t\"AuctionsButton3Name\",\n\t\"AuctionsButton3Right\",\n\t\"AuctionsButton4BuyoutFrameMoneyCopperButtonText\",\n\t\"AuctionsButton4BuyoutFrameMoneyGoldButtonText\",\n\t\"AuctionsButton4BuyoutFrameMoneySilverButtonText\",\n\t\"AuctionsButton4ClosingTimeText\",\n\t\"AuctionsButton4HighBidder\",\n\t\"AuctionsButton4Highlight\",\n\t\"AuctionsButton4ItemCount\",\n\t\"AuctionsButton4ItemIconTexture\",\n\t\"AuctionsButton4ItemNormalTexture\",\n\t\"AuctionsButton4ItemStock\",\n\t\"AuctionsButton4Left\",\n\t\"AuctionsButton4MoneyFrameCopperButtonText\",\n\t\"AuctionsButton4MoneyFrameGoldButtonText\",\n\t\"AuctionsButton4MoneyFrameLabel\",\n\t\"AuctionsButton4MoneyFrameSilverButtonText\",\n\t\"AuctionsButton4Name\",\n\t\"AuctionsButton4Right\",\n\t\"AuctionsButton5BuyoutFrameMoneyCopperButtonText\",\n\t\"AuctionsButton5BuyoutFrameMoneyGoldButtonText\",\n\t\"AuctionsButton5BuyoutFrameMoneySilverButtonText\",\n\t\"AuctionsButton5ClosingTimeText\",\n\t\"AuctionsButton5HighBidder\",\n\t\"AuctionsButton5Highlight\",\n\t\"AuctionsButton5ItemCount\",\n\t\"AuctionsButton5ItemIconTexture\",\n\t\"AuctionsButton5ItemNormalTexture\",\n\t\"AuctionsButton5ItemStock\",\n\t\"AuctionsButton5Left\",\n\t\"AuctionsButton5MoneyFrameCopperButtonText\",\n\t\"AuctionsButton5MoneyFrameGoldButtonText\",\n\t\"AuctionsButton5MoneyFrameLabel\",\n\t\"AuctionsButton5MoneyFrameSilverButtonText\",\n\t\"AuctionsButton5Name\",\n\t\"AuctionsButton5Right\",\n\t\"AuctionsButton6BuyoutFrameMoneyCopperButtonText\",\n\t\"AuctionsButton6BuyoutFrameMoneyGoldButtonText\",\n\t\"AuctionsButton6BuyoutFrameMoneySilverButtonText\",\n\t\"AuctionsButton6ClosingTimeText\",\n\t\"AuctionsButton6HighBidder\",\n\t\"AuctionsButton6Highlight\",\n\t\"AuctionsButton6ItemCount\",\n\t\"AuctionsButton6ItemIconTexture\",\n\t\"AuctionsButton6ItemNormalTexture\",\n\t\"AuctionsButton6ItemStock\",\n\t\"AuctionsButton6Left\",\n\t\"AuctionsButton6MoneyFrameCopperButtonText\",\n\t\"AuctionsButton6MoneyFrameGoldButtonText\",\n\t\"AuctionsButton6MoneyFrameLabel\",\n\t\"AuctionsButton6MoneyFrameSilverButtonText\",\n\t\"AuctionsButton6Name\",\n\t\"AuctionsButton6Right\",\n\t\"AuctionsButton7BuyoutFrameMoneyCopperButtonText\",\n\t\"AuctionsButton7BuyoutFrameMoneyGoldButtonText\",\n\t\"AuctionsButton7BuyoutFrameMoneySilverButtonText\",\n\t\"AuctionsButton7ClosingTimeText\",\n\t\"AuctionsButton7HighBidder\",\n\t\"AuctionsButton7Highlight\",\n\t\"AuctionsButton7ItemCount\",\n\t\"AuctionsButton7ItemIconTexture\",\n\t\"AuctionsButton7ItemNormalTexture\",\n\t\"AuctionsButton7ItemStock\",\n\t\"AuctionsButton7Left\",\n\t\"AuctionsButton7MoneyFrameCopperButtonText\",\n\t\"AuctionsButton7MoneyFrameGoldButtonText\",\n\t\"AuctionsButton7MoneyFrameLabel\",\n\t\"AuctionsButton7MoneyFrameSilverButtonText\",\n\t\"AuctionsButton7Name\",\n\t\"AuctionsButton7Right\",\n\t\"AuctionsButton8BuyoutFrameMoneyCopperButtonText\",\n\t\"AuctionsButton8BuyoutFrameMoneyGoldButtonText\",\n\t\"AuctionsButton8BuyoutFrameMoneySilverButtonText\",\n\t\"AuctionsButton8ClosingTimeText\",\n\t\"AuctionsButton8HighBidder\",\n\t\"AuctionsButton8Highlight\",\n\t\"AuctionsButton8ItemCount\",\n\t\"AuctionsButton8ItemIconTexture\",\n\t\"AuctionsButton8ItemNormalTexture\",\n\t\"AuctionsButton8ItemStock\",\n\t\"AuctionsButton8Left\",\n\t\"AuctionsButton8MoneyFrameCopperButtonText\",\n\t\"AuctionsButton8MoneyFrameGoldButtonText\",\n\t\"AuctionsButton8MoneyFrameLabel\",\n\t\"AuctionsButton8MoneyFrameSilverButtonText\",\n\t\"AuctionsButton8Name\",\n\t\"AuctionsButton8Right\",\n\t\"AuctionsButton9BuyoutFrameMoneyCopperButtonText\",\n\t\"AuctionsButton9BuyoutFrameMoneyGoldButtonText\",\n\t\"AuctionsButton9BuyoutFrameMoneySilverButtonText\",\n\t\"AuctionsButton9ClosingTimeText\",\n\t\"AuctionsButton9HighBidder\",\n\t\"AuctionsButton9Highlight\",\n\t\"AuctionsButton9ItemCount\",\n\t\"AuctionsButton9ItemIconTexture\",\n\t\"AuctionsButton9ItemNormalTexture\",\n\t\"AuctionsButton9ItemStock\",\n\t\"AuctionsButton9Left\",\n\t\"AuctionsButton9MoneyFrameCopperButtonText\",\n\t\"AuctionsButton9MoneyFrameGoldButtonText\",\n\t\"AuctionsButton9MoneyFrameLabel\",\n\t\"AuctionsButton9MoneyFrameSilverButtonText\",\n\t\"AuctionsButton9Name\",\n\t\"AuctionsButton9Right\",\n\t\"AuctionsBuyoutText\",\n\t\"AuctionsCancelAuctionButtonLeft\",\n\t\"AuctionsCancelAuctionButtonMiddle\",\n\t\"AuctionsCancelAuctionButtonRight\",\n\t\"AuctionsCancelAuctionButtonText\",\n\t\"AuctionsCloseButtonText\",\n\t\"AuctionsCreateAuctionButtonLeft\",\n\t\"AuctionsCreateAuctionButtonMiddle\",\n\t\"AuctionsCreateAuctionButtonRight\",\n\t\"AuctionsCreateAuctionButtonText\",\n\t\"AuctionsDepositMoneyFrameCopperButtonText\",\n\t\"AuctionsDepositMoneyFrameGoldButtonText\",\n\t\"AuctionsDepositMoneyFrameSilverButtonText\",\n\t\"AuctionsDepositText\",\n\t\"AuctionsDurationSortArrow\",\n\t\"AuctionsDurationSortLeft\",\n\t\"AuctionsDurationSortMiddle\",\n\t\"AuctionsDurationSortRight\",\n\t\"AuctionsDurationSortText\",\n\t\"AuctionsHighBidderSortArrow\",\n\t\"AuctionsHighBidderSortLeft\",\n\t\"AuctionsHighBidderSortMiddle\",\n\t\"AuctionsHighBidderSortRight\",\n\t\"AuctionsHighBidderSortText\",\n\t\"AuctionsItemButtonCount\",\n\t\"AuctionsItemButtonName\",\n\t\"AuctionsItemText\",\n\t\"AuctionsNumStacksEntryLeft\",\n\t\"AuctionsNumStacksEntryMiddle\",\n\t\"AuctionsNumStacksEntryRight\",\n\t\"AuctionsNumStacksMaxButtonLeft\",\n\t\"AuctionsNumStacksMaxButtonMiddle\",\n\t\"AuctionsNumStacksMaxButtonRight\",\n\t\"AuctionsNumStacksMaxButtonText\",\n\t\"AuctionsQualitySortArrow\",\n\t\"AuctionsQualitySortLeft\",\n\t\"AuctionsQualitySortMiddle\",\n\t\"AuctionsQualitySortRight\",\n\t\"AuctionsQualitySortText\",\n\t\"AuctionsScrollFrameScrollBarThumbTexture\",\n\t\"AuctionsSearchCountText\",\n\t\"AuctionsStackSizeEntryLeft\",\n\t\"AuctionsStackSizeEntryMiddle\",\n\t\"AuctionsStackSizeEntryRight\",\n\t\"AuctionsStackSizeMaxButtonLeft\",\n\t\"AuctionsStackSizeMaxButtonMiddle\",\n\t\"AuctionsStackSizeMaxButtonRight\",\n\t\"AuctionsStackSizeMaxButtonText\",\n\t\"AuctionsTabText\",\n\t\"AuctionsTitle\",\n\t\"BidBidButtonText\",\n\t\"BidBidPriceCopperLeft\",\n\t\"BidBidPriceCopperMiddle\",\n\t\"BidBidPriceCopperRight\",\n\t\"BidBidPriceGoldLeft\",\n\t\"BidBidPriceGoldMiddle\",\n\t\"BidBidPriceGoldRight\",\n\t\"BidBidPriceSilverLeft\",\n\t\"BidBidPriceSilverMiddle\",\n\t\"BidBidPriceSilverRight\",\n\t\"BidBidSortArrow\",\n\t\"BidBidSortLeft\",\n\t\"BidBidSortMiddle\",\n\t\"BidBidSortRight\",\n\t\"BidBidSortText\",\n\t\"BidBidText\",\n\t\"BidButton1BidStatus\",\n\t\"BidButton1BuyoutMoneyFrameCopperButtonText\",\n\t\"BidButton1BuyoutMoneyFrameGoldButtonText\",\n\t\"BidButton1BuyoutMoneyFrameSilverButtonText\",\n\t\"BidButton1ClosingTimeText\",\n\t\"BidButton1CurrentBidMoneyFrameCopperButtonText\",\n\t\"BidButton1CurrentBidMoneyFrameGoldButtonText\",\n\t\"BidButton1CurrentBidMoneyFrameSilverButtonText\",\n\t\"BidButton1Highlight\",\n\t\"BidButton1ItemCount\",\n\t\"BidButton1ItemIconTexture\",\n\t\"BidButton1ItemNormalTexture\",\n\t\"BidButton1ItemStock\",\n\t\"BidButton1Left\",\n\t\"BidButton1Level\",\n\t\"BidButton1Name\",\n\t\"BidButton1Right\",\n\t\"BidButton2BidStatus\",\n\t\"BidButton2BuyoutMoneyFrameCopperButtonText\",\n\t\"BidButton2BuyoutMoneyFrameGoldButtonText\",\n\t\"BidButton2BuyoutMoneyFrameSilverButtonText\",\n\t\"BidButton2ClosingTimeText\",\n\t\"BidButton2CurrentBidMoneyFrameCopperButtonText\",\n\t\"BidButton2CurrentBidMoneyFrameGoldButtonText\",\n\t\"BidButton2CurrentBidMoneyFrameSilverButtonText\",\n\t\"BidButton2Highlight\",\n\t\"BidButton2ItemCount\",\n\t\"BidButton2ItemIconTexture\",\n\t\"BidButton2ItemNormalTexture\",\n\t\"BidButton2ItemStock\",\n\t\"BidButton2Left\",\n\t\"BidButton2Level\",\n\t\"BidButton2Name\",\n\t\"BidButton2Right\",\n\t\"BidButton3BidStatus\",\n\t\"BidButton3BuyoutMoneyFrameCopperButtonText\",\n\t\"BidButton3BuyoutMoneyFrameGoldButtonText\",\n\t\"BidButton3BuyoutMoneyFrameSilverButtonText\",\n\t\"BidButton3ClosingTimeText\",\n\t\"BidButton3CurrentBidMoneyFrameCopperButtonText\",\n\t\"BidButton3CurrentBidMoneyFrameGoldButtonText\",\n\t\"BidButton3CurrentBidMoneyFrameSilverButtonText\",\n\t\"BidButton3Highlight\",\n\t\"BidButton3ItemCount\",\n\t\"BidButton3ItemIconTexture\",\n\t\"BidButton3ItemNormalTexture\",\n\t\"BidButton3ItemStock\",\n\t\"BidButton3Left\",\n\t\"BidButton3Level\",\n\t\"BidButton3Name\",\n\t\"BidButton3Right\",\n\t\"BidButton4BidStatus\",\n\t\"BidButton4BuyoutMoneyFrameCopperButtonText\",\n\t\"BidButton4BuyoutMoneyFrameGoldButtonText\",\n\t\"BidButton4BuyoutMoneyFrameSilverButtonText\",\n\t\"BidButton4ClosingTimeText\",\n\t\"BidButton4CurrentBidMoneyFrameCopperButtonText\",\n\t\"BidButton4CurrentBidMoneyFrameGoldButtonText\",\n\t\"BidButton4CurrentBidMoneyFrameSilverButtonText\",\n\t\"BidButton4Highlight\",\n\t\"BidButton4ItemCount\",\n\t\"BidButton4ItemIconTexture\",\n\t\"BidButton4ItemNormalTexture\",\n\t\"BidButton4ItemStock\",\n\t\"BidButton4Left\",\n\t\"BidButton4Level\",\n\t\"BidButton4Name\",\n\t\"BidButton4Right\",\n\t\"BidButton5BidStatus\",\n\t\"BidButton5BuyoutMoneyFrameCopperButtonText\",\n\t\"BidButton5BuyoutMoneyFrameGoldButtonText\",\n\t\"BidButton5BuyoutMoneyFrameSilverButtonText\",\n\t\"BidButton5ClosingTimeText\",\n\t\"BidButton5CurrentBidMoneyFrameCopperButtonText\",\n\t\"BidButton5CurrentBidMoneyFrameGoldButtonText\",\n\t\"BidButton5CurrentBidMoneyFrameSilverButtonText\",\n\t\"BidButton5Highlight\",\n\t\"BidButton5ItemCount\",\n\t\"BidButton5ItemIconTexture\",\n\t\"BidButton5ItemNormalTexture\",\n\t\"BidButton5ItemStock\",\n\t\"BidButton5Left\",\n\t\"BidButton5Level\",\n\t\"BidButton5Name\",\n\t\"BidButton5Right\",\n\t\"BidButton6BidStatus\",\n\t\"BidButton6BuyoutMoneyFrameCopperButtonText\",\n\t\"BidButton6BuyoutMoneyFrameGoldButtonText\",\n\t\"BidButton6BuyoutMoneyFrameSilverButtonText\",\n\t\"BidButton6ClosingTimeText\",\n\t\"BidButton6CurrentBidMoneyFrameCopperButtonText\",\n\t\"BidButton6CurrentBidMoneyFrameGoldButtonText\",\n\t\"BidButton6CurrentBidMoneyFrameSilverButtonText\",\n\t\"BidButton6Highlight\",\n\t\"BidButton6ItemCount\",\n\t\"BidButton6ItemIconTexture\",\n\t\"BidButton6ItemNormalTexture\",\n\t\"BidButton6ItemStock\",\n\t\"BidButton6Left\",\n\t\"BidButton6Level\",\n\t\"BidButton6Name\",\n\t\"BidButton6Right\",\n\t\"BidButton7BidStatus\",\n\t\"BidButton7BuyoutMoneyFrameCopperButtonText\",\n\t\"BidButton7BuyoutMoneyFrameGoldButtonText\",\n\t\"BidButton7BuyoutMoneyFrameSilverButtonText\",\n\t\"BidButton7ClosingTimeText\",\n\t\"BidButton7CurrentBidMoneyFrameCopperButtonText\",\n\t\"BidButton7CurrentBidMoneyFrameGoldButtonText\",\n\t\"BidButton7CurrentBidMoneyFrameSilverButtonText\",\n\t\"BidButton7Highlight\",\n\t\"BidButton7ItemCount\",\n\t\"BidButton7ItemIconTexture\",\n\t\"BidButton7ItemNormalTexture\",\n\t\"BidButton7ItemStock\",\n\t\"BidButton7Left\",\n\t\"BidButton7Level\",\n\t\"BidButton7Name\",\n\t\"BidButton7Right\",\n\t\"BidButton8BidStatus\",\n\t\"BidButton8BuyoutMoneyFrameCopperButtonText\",\n\t\"BidButton8BuyoutMoneyFrameGoldButtonText\",\n\t\"BidButton8BuyoutMoneyFrameSilverButtonText\",\n\t\"BidButton8ClosingTimeText\",\n\t\"BidButton8CurrentBidMoneyFrameCopperButtonText\",\n\t\"BidButton8CurrentBidMoneyFrameGoldButtonText\",\n\t\"BidButton8CurrentBidMoneyFrameSilverButtonText\",\n\t\"BidButton8Highlight\",\n\t\"BidButton8ItemCount\",\n\t\"BidButton8ItemIconTexture\",\n\t\"BidButton8ItemNormalTexture\",\n\t\"BidButton8ItemStock\",\n\t\"BidButton8Left\",\n\t\"BidButton8Level\",\n\t\"BidButton8Name\",\n\t\"BidButton8Right\",\n\t\"BidButton9BidStatus\",\n\t\"BidButton9BuyoutMoneyFrameCopperButtonText\",\n\t\"BidButton9BuyoutMoneyFrameGoldButtonText\",\n\t\"BidButton9BuyoutMoneyFrameSilverButtonText\",\n\t\"BidButton9ClosingTimeText\",\n\t\"BidButton9CurrentBidMoneyFrameCopperButtonText\",\n\t\"BidButton9CurrentBidMoneyFrameGoldButtonText\",\n\t\"BidButton9CurrentBidMoneyFrameSilverButtonText\",\n\t\"BidButton9Highlight\",\n\t\"BidButton9ItemCount\",\n\t\"BidButton9ItemIconTexture\",\n\t\"BidButton9ItemNormalTexture\",\n\t\"BidButton9ItemStock\",\n\t\"BidButton9Left\",\n\t\"BidButton9Level\",\n\t\"BidButton9Name\",\n\t\"BidButton9Right\",\n\t\"BidBuyoutButtonText\",\n\t\"BidBuyoutSortArrow\",\n\t\"BidBuyoutSortLeft\",\n\t\"BidBuyoutSortMiddle\",\n\t\"BidBuyoutSortRight\",\n\t\"BidBuyoutSortText\",\n\t\"BidCloseButtonText\",\n\t\"BidDurationSortArrow\",\n\t\"BidDurationSortLeft\",\n\t\"BidDurationSortMiddle\",\n\t\"BidDurationSortRight\",\n\t\"BidDurationSortText\",\n\t\"BidLevelSortArrow\",\n\t\"BidLevelSortLeft\",\n\t\"BidLevelSortMiddle\",\n\t\"BidLevelSortRight\",\n\t\"BidLevelSortText\",\n\t\"BidQualitySortArrow\",\n\t\"BidQualitySortLeft\",\n\t\"BidQualitySortMiddle\",\n\t\"BidQualitySortRight\",\n\t\"BidQualitySortText\",\n\t\"BidScrollFrameScrollBarThumbTexture\",\n\t\"BidSearchCountText\",\n\t\"BidStatusSortArrow\",\n\t\"BidStatusSortLeft\",\n\t\"BidStatusSortMiddle\",\n\t\"BidStatusSortRight\",\n\t\"BidStatusSortText\",\n\t\"BidTitle\",\n\t\"BrowseBidButtonText\",\n\t\"BrowseBidPriceCopperLeft\",\n\t\"BrowseBidPriceCopperMiddle\",\n\t\"BrowseBidPriceCopperRight\",\n\t\"BrowseBidPriceGoldLeft\",\n\t\"BrowseBidPriceGoldMiddle\",\n\t\"BrowseBidPriceGoldRight\",\n\t\"BrowseBidPriceSilverLeft\",\n\t\"BrowseBidPriceSilverMiddle\",\n\t\"BrowseBidPriceSilverRight\",\n\t\"BrowseBidText\",\n\t\"BrowseButton1BuyoutFrameMoneyCopperButtonText\",\n\t\"BrowseButton1BuyoutFrameMoneyGoldButtonText\",\n\t\"BrowseButton1BuyoutFrameMoneySilverButtonText\",\n\t\"BrowseButton1ClosingTimeText\",\n\t\"BrowseButton1HighBidder\",\n\t\"BrowseButton1Highlight\",\n\t\"BrowseButton1ItemCount\",\n\t\"BrowseButton1ItemIconTexture\",\n\t\"BrowseButton1ItemNormalTexture\",\n\t\"BrowseButton1ItemStock\",\n\t\"BrowseButton1Left\",\n\t\"BrowseButton1Level\",\n\t\"BrowseButton1MoneyFrameCopperButtonText\",\n\t\"BrowseButton1MoneyFrameGoldButtonText\",\n\t\"BrowseButton1MoneyFrameSilverButtonText\",\n\t\"BrowseButton1Name\",\n\t\"BrowseButton1Right\",\n\t\"BrowseButton2BuyoutFrameMoneyCopperButtonText\",\n\t\"BrowseButton2BuyoutFrameMoneyGoldButtonText\",\n\t\"BrowseButton2BuyoutFrameMoneySilverButtonText\",\n\t\"BrowseButton2ClosingTimeText\",\n\t\"BrowseButton2HighBidder\",\n\t\"BrowseButton2Highlight\",\n\t\"BrowseButton2ItemCount\",\n\t\"BrowseButton2ItemIconTexture\",\n\t\"BrowseButton2ItemNormalTexture\",\n\t\"BrowseButton2ItemStock\",\n\t\"BrowseButton2Left\",\n\t\"BrowseButton2Level\",\n\t\"BrowseButton2MoneyFrameCopperButtonText\",\n\t\"BrowseButton2MoneyFrameGoldButtonText\",\n\t\"BrowseButton2MoneyFrameSilverButtonText\",\n\t\"BrowseButton2Name\",\n\t\"BrowseButton2Right\",\n\t\"BrowseButton3BuyoutFrameMoneyCopperButtonText\",\n\t\"BrowseButton3BuyoutFrameMoneyGoldButtonText\",\n\t\"BrowseButton3BuyoutFrameMoneySilverButtonText\",\n\t\"BrowseButton3ClosingTimeText\",\n\t\"BrowseButton3HighBidder\",\n\t\"BrowseButton3Highlight\",\n\t\"BrowseButton3ItemCount\",\n\t\"BrowseButton3ItemIconTexture\",\n\t\"BrowseButton3ItemNormalTexture\",\n\t\"BrowseButton3ItemStock\",\n\t\"BrowseButton3Left\",\n\t\"BrowseButton3Level\",\n\t\"BrowseButton3MoneyFrameCopperButtonText\",\n\t\"BrowseButton3MoneyFrameGoldButtonText\",\n\t\"BrowseButton3MoneyFrameSilverButtonText\",\n\t\"BrowseButton3Name\",\n\t\"BrowseButton3Right\",\n\t\"BrowseButton4BuyoutFrameMoneyCopperButtonText\",\n\t\"BrowseButton4BuyoutFrameMoneyGoldButtonText\",\n\t\"BrowseButton4BuyoutFrameMoneySilverButtonText\",\n\t\"BrowseButton4ClosingTimeText\",\n\t\"BrowseButton4HighBidder\",\n\t\"BrowseButton4Highlight\",\n\t\"BrowseButton4ItemCount\",\n\t\"BrowseButton4ItemIconTexture\",\n\t\"BrowseButton4ItemNormalTexture\",\n\t\"BrowseButton4ItemStock\",\n\t\"BrowseButton4Left\",\n\t\"BrowseButton4Level\",\n\t\"BrowseButton4MoneyFrameCopperButtonText\",\n\t\"BrowseButton4MoneyFrameGoldButtonText\",\n\t\"BrowseButton4MoneyFrameSilverButtonText\",\n\t\"BrowseButton4Name\",\n\t\"BrowseButton4Right\",\n\t\"BrowseButton5BuyoutFrameMoneyCopperButtonText\",\n\t\"BrowseButton5BuyoutFrameMoneyGoldButtonText\",\n\t\"BrowseButton5BuyoutFrameMoneySilverButtonText\",\n\t\"BrowseButton5ClosingTimeText\",\n\t\"BrowseButton5HighBidder\",\n\t\"BrowseButton5Highlight\",\n\t\"BrowseButton5ItemCount\",\n\t\"BrowseButton5ItemIconTexture\",\n\t\"BrowseButton5ItemNormalTexture\",\n\t\"BrowseButton5ItemStock\",\n\t\"BrowseButton5Left\",\n\t\"BrowseButton5Level\",\n\t\"BrowseButton5MoneyFrameCopperButtonText\",\n\t\"BrowseButton5MoneyFrameGoldButtonText\",\n\t\"BrowseButton5MoneyFrameSilverButtonText\",\n\t\"BrowseButton5Name\",\n\t\"BrowseButton5Right\",\n\t\"BrowseButton6BuyoutFrameMoneyCopperButtonText\",\n\t\"BrowseButton6BuyoutFrameMoneyGoldButtonText\",\n\t\"BrowseButton6BuyoutFrameMoneySilverButtonText\",\n\t\"BrowseButton6ClosingTimeText\",\n\t\"BrowseButton6HighBidder\",\n\t\"BrowseButton6Highlight\",\n\t\"BrowseButton6ItemCount\",\n\t\"BrowseButton6ItemIconTexture\",\n\t\"BrowseButton6ItemNormalTexture\",\n\t\"BrowseButton6ItemStock\",\n\t\"BrowseButton6Left\",\n\t\"BrowseButton6Level\",\n\t\"BrowseButton6MoneyFrameCopperButtonText\",\n\t\"BrowseButton6MoneyFrameGoldButtonText\",\n\t\"BrowseButton6MoneyFrameSilverButtonText\",\n\t\"BrowseButton6Name\",\n\t\"BrowseButton6Right\",\n\t\"BrowseButton7BuyoutFrameMoneyCopperButtonText\",\n\t\"BrowseButton7BuyoutFrameMoneyGoldButtonText\",\n\t\"BrowseButton7BuyoutFrameMoneySilverButtonText\",\n\t\"BrowseButton7ClosingTimeText\",\n\t\"BrowseButton7HighBidder\",\n\t\"BrowseButton7Highlight\",\n\t\"BrowseButton7ItemCount\",\n\t\"BrowseButton7ItemIconTexture\",\n\t\"BrowseButton7ItemNormalTexture\",\n\t\"BrowseButton7ItemStock\",\n\t\"BrowseButton7Left\",\n\t\"BrowseButton7Level\",\n\t\"BrowseButton7MoneyFrameCopperButtonText\",\n\t\"BrowseButton7MoneyFrameGoldButtonText\",\n\t\"BrowseButton7MoneyFrameSilverButtonText\",\n\t\"BrowseButton7Name\",\n\t\"BrowseButton7Right\",\n\t\"BrowseButton8BuyoutFrameMoneyCopperButtonText\",\n\t\"BrowseButton8BuyoutFrameMoneyGoldButtonText\",\n\t\"BrowseButton8BuyoutFrameMoneySilverButtonText\",\n\t\"BrowseButton8ClosingTimeText\",\n\t\"BrowseButton8HighBidder\",\n\t\"BrowseButton8Highlight\",\n\t\"BrowseButton8ItemCount\",\n\t\"BrowseButton8ItemIconTexture\",\n\t\"BrowseButton8ItemNormalTexture\",\n\t\"BrowseButton8ItemStock\",\n\t\"BrowseButton8Left\",\n\t\"BrowseButton8Level\",\n\t\"BrowseButton8MoneyFrameCopperButtonText\",\n\t\"BrowseButton8MoneyFrameGoldButtonText\",\n\t\"BrowseButton8MoneyFrameSilverButtonText\",\n\t\"BrowseButton8Name\",\n\t\"BrowseButton8Right\",\n\t\"BrowseBuyoutButtonText\",\n\t\"BrowseCloseButtonText\",\n\t\"BrowseCurrentBidSortArrow\",\n\t\"BrowseCurrentBidSortLeft\",\n\t\"BrowseCurrentBidSortMiddle\",\n\t\"BrowseCurrentBidSortRight\",\n\t\"BrowseCurrentBidSortText\",\n\t\"BrowseDropDownButtonDisabledTexture\",\n\t\"BrowseDropDownButtonHighlightTexture\",\n\t\"BrowseDropDownButtonNormalTexture\",\n\t\"BrowseDropDownButtonPushedTexture\",\n\t\"BrowseDropDownLeft\",\n\t\"BrowseDropDownMiddle\",\n\t\"BrowseDropDownName\",\n\t\"BrowseDropDownRight\",\n\t\"BrowseDropDownText\",\n\t\"BrowseDurationSortArrow\",\n\t\"BrowseDurationSortLeft\",\n\t\"BrowseDurationSortMiddle\",\n\t\"BrowseDurationSortRight\",\n\t\"BrowseDurationSortText\",\n\t\"BrowseFilterScrollFrameScrollBarThumbTexture\",\n\t\"BrowseHighBidderSortArrow\",\n\t\"BrowseHighBidderSortLeft\",\n\t\"BrowseHighBidderSortMiddle\",\n\t\"BrowseHighBidderSortRight\",\n\t\"BrowseHighBidderSortText\",\n\t\"BrowseLevelHyphen\",\n\t\"BrowseLevelSortArrow\",\n\t\"BrowseLevelSortLeft\",\n\t\"BrowseLevelSortMiddle\",\n\t\"BrowseLevelSortRight\",\n\t\"BrowseLevelSortText\",\n\t\"BrowseLevelText\",\n\t\"BrowseMaxLevelLeft\",\n\t\"BrowseMaxLevelMiddle\",\n\t\"BrowseMaxLevelRight\",\n\t\"BrowseMinLevelLeft\",\n\t\"BrowseMinLevelMiddle\",\n\t\"BrowseMinLevelRight\",\n\t\"BrowseNameLeft\",\n\t\"BrowseNameMiddle\",\n\t\"BrowseNameRight\",\n\t\"BrowseNameText\",\n\t\"BrowseNoResultsText\",\n\t\"BrowseQualitySortArrow\",\n\t\"BrowseQualitySortLeft\",\n\t\"BrowseQualitySortMiddle\",\n\t\"BrowseQualitySortRight\",\n\t\"BrowseQualitySortText\",\n\t\"BrowseResetButtonText\",\n\t\"BrowseScrollFrameScrollBarThumbTexture\",\n\t\"BrowseSearchButtonText\",\n\t\"BrowseSearchCountText\",\n\t\"BrowseSearchDotsText\",\n\t\"BrowseTitle\",\n\t\"BuyoutPriceCopperLeft\",\n\t\"BuyoutPriceCopperMiddle\",\n\t\"BuyoutPriceCopperRight\",\n\t\"BuyoutPriceGoldLeft\",\n\t\"BuyoutPriceGoldMiddle\",\n\t\"BuyoutPriceGoldRight\",\n\t\"BuyoutPriceSilverLeft\",\n\t\"BuyoutPriceSilverMiddle\",\n\t\"BuyoutPriceSilverRight\",\n\t\"DurationDropDownButtonDisabledTexture\",\n\t\"DurationDropDownButtonHighlightTexture\",\n\t\"DurationDropDownButtonNormalTexture\",\n\t\"DurationDropDownButtonPushedTexture\",\n\t\"DurationDropDownLeft\",\n\t\"DurationDropDownMiddle\",\n\t\"DurationDropDownRight\",\n\t\"DurationDropDownText\",\n\t\"IsUsableCheckButtonText\",\n\t\"PriceDropDownButtonDisabledTexture\",\n\t\"PriceDropDownButtonHighlightTexture\",\n\t\"PriceDropDownButtonNormalTexture\",\n\t\"PriceDropDownButtonPushedTexture\",\n\t\"PriceDropDownLeft\",\n\t\"PriceDropDownMiddle\",\n\t\"PriceDropDownRight\",\n\t\"PriceDropDownText\",\n\t\"ShowOnPlayerCheckButtonText\",\n\t\"StartPriceCopperLeft\",\n\t\"StartPriceCopperMiddle\",\n\t\"StartPriceCopperRight\",\n\t\"StartPriceGoldLeft\",\n\t\"StartPriceGoldMiddle\",\n\t\"StartPriceGoldRight\",\n\t\"StartPriceSilverLeft\",\n\t\"StartPriceSilverMiddle\",\n\t\"StartPriceSilverRight\",\n\n\t-- functions: Blizzard_BarbershopUI\n\t\"BarberShop_OnEvent\",\n\t\"BarberShop_OnHide\",\n\t\"BarberShop_OnLoad\",\n\t\"BarberShop_OnShow\",\n\t\"BarberShop_ResetLabelColors\",\n\t\"BarberShop_SetLabelColor\",\n\t\"BarberShop_ToFourAttributeFormat\",\n\t\"BarberShop_Update\",\n\t\"BarberShop_UpdateBanner\",\n\t\"BarberShop_UpdateCost\",\n\t\"BarberShop_UpdateFacialHairCustomization\",\n\t\"BarberShop_UpdateHairCustomization\",\n\t\"BarberShop_UpdateSelector\",\n\t-- tables: Blizzard_BarbershopUI\n\t\"BarberShopBannerFrame\",\n\t\"BarberShopFrame\",\n\t\"BarberShopFrameCancelButton\",\n\t\"BarberShopFrameMoneyFrame\",\n\t\"BarberShopFrameMoneyFrameCopperButton\",\n\t\"BarberShopFrameMoneyFrameGoldButton\",\n\t\"BarberShopFrameMoneyFrameSilverButton\",\n\t\"BarberShopFrameOkayButton\",\n\t\"BarberShopFrameResetButton\",\n\t\"BarberShopFrameSelector1\",\n\t\"BarberShopFrameSelector1Next\",\n\t\"BarberShopFrameSelector1Prev\",\n\t\"BarberShopFrameSelector2\",\n\t\"BarberShopFrameSelector2Next\",\n\t\"BarberShopFrameSelector2Prev\",\n\t\"BarberShopFrameSelector3\",\n\t\"BarberShopFrameSelector3Next\",\n\t\"BarberShopFrameSelector3Prev\",\n\t\"BarberShopFrameSelector4\",\n\t\"BarberShopFrameSelector4Next\",\n\t\"BarberShopFrameSelector4Prev\",\n\t-- frames: Blizzard_BarbershopUI\n\t\"BarberShopFrame\",\n\t\"BarberShopFrameSelector1\",\n\t\"BarberShopFrameSelector1Prev\",\n\t\"BarberShopFrameSelector1Next\",\n\t\"BarberShopFrameSelector2\",\n\t\"BarberShopFrameSelector2Prev\",\n\t\"BarberShopFrameSelector2Next\",\n\t\"BarberShopFrameSelector3\",\n\t\"BarberShopFrameSelector3Prev\",\n\t\"BarberShopFrameSelector3Next\",\n\t\"BarberShopFrameSelector4\",\n\t\"BarberShopFrameSelector4Prev\",\n\t\"BarberShopFrameSelector4Next\",\n\t\"BarberShopFrameMoneyFrame\",\n\t\"BarberShopFrameMoneyFrameCopperButton\",\n\t\"BarberShopFrameMoneyFrameSilverButton\",\n\t\"BarberShopFrameMoneyFrameGoldButton\",\n\t\"BarberShopFrameOkayButton\",\n\t\"BarberShopFrameCancelButton\",\n\t\"BarberShopFrameResetButton\",\n\t\"BarberShopBannerFrame\",\n\t-- widgets: Blizzard_BarbershopUI\n\t\"BarberShopBannerFrameBGTexture\",\n\t\"BarberShopBannerFrameCaption\",\n\t\"BarberShopFrameBackground\",\n\t\"BarberShopFrameCancelButtonText\",\n\t\"BarberShopFrameMoneyFrameCopperButtonText\",\n\t\"BarberShopFrameMoneyFrameGoldButtonText\",\n\t\"BarberShopFrameMoneyFrameSilverButtonText\",\n\t\"BarberShopFrameOkayButtonText\",\n\t\"BarberShopFrameResetButtonText\",\n\t\"BarberShopFrameSelector1Category\",\n\t\"BarberShopFrameSelector2Category\",\n\t\"BarberShopFrameSelector3Category\",\n\t\"BarberShopFrameSelector4Category\",\n\n\t-- functions: Blizzard_BattlefieldMinimap\n\t\"BattlefieldMinimapTabDropDown_Initialize\",\n\t\"BattlefieldMinimapTabDropDown_ShowOpacity\",\n\t\"BattlefieldMinimapTabDropDown_ToggleLock\",\n\t\"BattlefieldMinimapTabDropDown_TogglePlayers\",\n\t\"BattlefieldMinimapTab_OnClick\",\n\t\"BattlefieldMinimapUnit_OnEnter\",\n\t\"BattlefieldMinimap_ClearTextures\",\n\t\"BattlefieldMinimap_CreatePOI\",\n\t\"BattlefieldMinimap_OnEvent\",\n\t\"BattlefieldMinimap_OnHide\",\n\t\"BattlefieldMinimap_OnLoad\",\n\t\"BattlefieldMinimap_OnShow\",\n\t\"BattlefieldMinimap_OnUpdate\",\n\t\"BattlefieldMinimap_Toggle\",\n\t\"BattlefieldMinimap_Update\",\n\t\"BattlefieldMinimap_UpdateOpacity\",\n\t-- tables: Blizzard_BattlefieldMinimap\n\t\"BG_VEHICLES\",\n\t\"BattlefieldMinimap\",\n\t\"BattlefieldMinimapCloseButton\",\n\t\"BattlefieldMinimapCorpse\",\n\t\"BattlefieldMinimapFlag1\",\n\t\"BattlefieldMinimapFlag2\",\n\t\"BattlefieldMinimapParty1\",\n\t\"BattlefieldMinimapParty2\",\n\t\"BattlefieldMinimapParty3\",\n\t\"BattlefieldMinimapParty4\",\n\t\"BattlefieldMinimapRaid1\",\n\t\"BattlefieldMinimapRaid10\",\n\t\"BattlefieldMinimapRaid11\",\n\t\"BattlefieldMinimapRaid12\",\n\t\"BattlefieldMinimapRaid13\",\n\t\"BattlefieldMinimapRaid14\",\n\t\"BattlefieldMinimapRaid15\",\n\t\"BattlefieldMinimapRaid16\",\n\t\"BattlefieldMinimapRaid17\",\n\t\"BattlefieldMinimapRaid18\",\n\t\"BattlefieldMinimapRaid19\",\n\t\"BattlefieldMinimapRaid2\",\n\t\"BattlefieldMinimapRaid20\",\n\t\"BattlefieldMinimapRaid21\",\n\t\"BattlefieldMinimapRaid22\",\n\t\"BattlefieldMinimapRaid23\",\n\t\"BattlefieldMinimapRaid24\",\n\t\"BattlefieldMinimapRaid25\",\n\t\"BattlefieldMinimapRaid26\",\n\t\"BattlefieldMinimapRaid27\",\n\t\"BattlefieldMinimapRaid28\",\n\t\"BattlefieldMinimapRaid29\",\n\t\"BattlefieldMinimapRaid3\",\n\t\"BattlefieldMinimapRaid30\",\n\t\"BattlefieldMinimapRaid31\",\n\t\"BattlefieldMinimapRaid32\",\n\t\"BattlefieldMinimapRaid33\",\n\t\"BattlefieldMinimapRaid34\",\n\t\"BattlefieldMinimapRaid35\",\n\t\"BattlefieldMinimapRaid36\",\n\t\"BattlefieldMinimapRaid37\",\n\t\"BattlefieldMinimapRaid38\",\n\t\"BattlefieldMinimapRaid39\",\n\t\"BattlefieldMinimapRaid4\",\n\t\"BattlefieldMinimapRaid40\",\n\t\"BattlefieldMinimapRaid5\",\n\t\"BattlefieldMinimapRaid6\",\n\t\"BattlefieldMinimapRaid7\",\n\t\"BattlefieldMinimapRaid8\",\n\t\"BattlefieldMinimapRaid9\",\n\t\"BattlefieldMinimapTab\",\n\t\"BattlefieldMinimapTabDropDown\",\n\t\"BattlefieldMinimapTabDropDownButton\",\n\t\"BattlefieldMinimapTabFlash\",\n\t\"PlayerMiniArrowEffectFrame\",\n\t\"PlayerMiniArrowFrame\",\n\t-- frames: Blizzard_BattlefieldMinimap\n\t\"BattlefieldMinimapTab\",\n\t\"BattlefieldMinimapTabFlash\",\n\t\"BattlefieldMinimapTabDropDown\",\n\t\"BattlefieldMinimapTabDropDownButton\",\n\t\"BattlefieldMinimap\",\n\t\"BattlefieldMinimapCloseButton\",\n\t\"BattlefieldMinimapParty1\",\n\t\"BattlefieldMinimapParty2\",\n\t\"BattlefieldMinimapParty3\",\n\t\"BattlefieldMinimapParty4\",\n\t\"BattlefieldMinimapRaid1\",\n\t\"BattlefieldMinimapRaid2\",\n\t\"BattlefieldMinimapRaid3\",\n\t\"BattlefieldMinimapRaid4\",\n\t\"BattlefieldMinimapRaid5\",\n\t\"BattlefieldMinimapRaid6\",\n\t\"BattlefieldMinimapRaid7\",\n\t\"BattlefieldMinimapRaid8\",\n\t\"BattlefieldMinimapRaid9\",\n\t\"BattlefieldMinimapRaid10\",\n\t\"BattlefieldMinimapRaid11\",\n\t\"BattlefieldMinimapRaid12\",\n\t\"BattlefieldMinimapRaid13\",\n\t\"BattlefieldMinimapRaid14\",\n\t\"BattlefieldMinimapRaid15\",\n\t\"BattlefieldMinimapRaid16\",\n\t\"BattlefieldMinimapRaid17\",\n\t\"BattlefieldMinimapRaid18\",\n\t\"BattlefieldMinimapRaid19\",\n\t\"BattlefieldMinimapRaid20\",\n\t\"BattlefieldMinimapRaid21\",\n\t\"BattlefieldMinimapRaid22\",\n\t\"BattlefieldMinimapRaid23\",\n\t\"BattlefieldMinimapRaid24\",\n\t\"BattlefieldMinimapRaid25\",\n\t\"BattlefieldMinimapRaid26\",\n\t\"BattlefieldMinimapRaid27\",\n\t\"BattlefieldMinimapRaid28\",\n\t\"BattlefieldMinimapRaid29\",\n\t\"BattlefieldMinimapRaid30\",\n\t\"BattlefieldMinimapRaid31\",\n\t\"BattlefieldMinimapRaid32\",\n\t\"BattlefieldMinimapRaid33\",\n\t\"BattlefieldMinimapRaid34\",\n\t\"BattlefieldMinimapRaid35\",\n\t\"BattlefieldMinimapRaid36\",\n\t\"BattlefieldMinimapRaid37\",\n\t\"BattlefieldMinimapRaid38\",\n\t\"BattlefieldMinimapRaid39\",\n\t\"BattlefieldMinimapRaid40\",\n\t\"BattlefieldMinimapCorpse\",\n\t\"BattlefieldMinimapFlag1\",\n\t\"BattlefieldMinimapFlag2\",\n\t\"PlayerMiniArrowFrame\",\n\t\"PlayerMiniArrowEffectFrame\",\n\t-- widgets: Blizzard_BattlefieldMinimap\n\t\"BattlefieldMinimap1\",\n\t\"BattlefieldMinimap10\",\n\t\"BattlefieldMinimap11\",\n\t\"BattlefieldMinimap12\",\n\t\"BattlefieldMinimap2\",\n\t\"BattlefieldMinimap3\",\n\t\"BattlefieldMinimap4\",\n\t\"BattlefieldMinimap5\",\n\t\"BattlefieldMinimap6\",\n\t\"BattlefieldMinimap7\",\n\t\"BattlefieldMinimap8\",\n\t\"BattlefieldMinimap9\",\n\t\"BattlefieldMinimapBackground\",\n\t\"BattlefieldMinimapCorner\",\n\t\"BattlefieldMinimapFlag1Texture\",\n\t\"BattlefieldMinimapFlag2Texture\",\n\t\"BattlefieldMinimapParty1Icon\",\n\t\"BattlefieldMinimapParty2Icon\",\n\t\"BattlefieldMinimapParty3Icon\",\n\t\"BattlefieldMinimapParty4Icon\",\n\t\"BattlefieldMinimapRaid10Icon\",\n\t\"BattlefieldMinimapRaid11Icon\",\n\t\"BattlefieldMinimapRaid12Icon\",\n\t\"BattlefieldMinimapRaid13Icon\",\n\t\"BattlefieldMinimapRaid14Icon\",\n\t\"BattlefieldMinimapRaid15Icon\",\n\t\"BattlefieldMinimapRaid16Icon\",\n\t\"BattlefieldMinimapRaid17Icon\",\n\t\"BattlefieldMinimapRaid18Icon\",\n\t\"BattlefieldMinimapRaid19Icon\",\n\t\"BattlefieldMinimapRaid1Icon\",\n\t\"BattlefieldMinimapRaid20Icon\",\n\t\"BattlefieldMinimapRaid21Icon\",\n\t\"BattlefieldMinimapRaid22Icon\",\n\t\"BattlefieldMinimapRaid23Icon\",\n\t\"BattlefieldMinimapRaid24Icon\",\n\t\"BattlefieldMinimapRaid25Icon\",\n\t\"BattlefieldMinimapRaid26Icon\",\n\t\"BattlefieldMinimapRaid27Icon\",\n\t\"BattlefieldMinimapRaid28Icon\",\n\t\"BattlefieldMinimapRaid29Icon\",\n\t\"BattlefieldMinimapRaid2Icon\",\n\t\"BattlefieldMinimapRaid30Icon\",\n\t\"BattlefieldMinimapRaid31Icon\",\n\t\"BattlefieldMinimapRaid32Icon\",\n\t\"BattlefieldMinimapRaid33Icon\",\n\t\"BattlefieldMinimapRaid34Icon\",\n\t\"BattlefieldMinimapRaid35Icon\",\n\t\"BattlefieldMinimapRaid36Icon\",\n\t\"BattlefieldMinimapRaid37Icon\",\n\t\"BattlefieldMinimapRaid38Icon\",\n\t\"BattlefieldMinimapRaid39Icon\",\n\t\"BattlefieldMinimapRaid3Icon\",\n\t\"BattlefieldMinimapRaid40Icon\",\n\t\"BattlefieldMinimapRaid4Icon\",\n\t\"BattlefieldMinimapRaid5Icon\",\n\t\"BattlefieldMinimapRaid6Icon\",\n\t\"BattlefieldMinimapRaid7Icon\",\n\t\"BattlefieldMinimapRaid8Icon\",\n\t\"BattlefieldMinimapRaid9Icon\",\n\t\"BattlefieldMinimapTabDropDownButtonDisabledTexture\",\n\t\"BattlefieldMinimapTabDropDownButtonHighlightTexture\",\n\t\"BattlefieldMinimapTabDropDownButtonNormalTexture\",\n\t\"BattlefieldMinimapTabDropDownButtonPushedTexture\",\n\t\"BattlefieldMinimapTabDropDownLeft\",\n\t\"BattlefieldMinimapTabDropDownMiddle\",\n\t\"BattlefieldMinimapTabDropDownRight\",\n\t\"BattlefieldMinimapTabDropDownText\",\n\t\"BattlefieldMinimapTabLeft\",\n\t\"BattlefieldMinimapTabMiddle\",\n\t\"BattlefieldMinimapTabRight\",\n\t\"BattlefieldMinimapTabText\",\n\n\t-- functions: Blizzard_BindingUI\n\t\"KeyBindingButton_OnClick\",\n\t\"KeyBindingFrame_ChangeBindingProfile\",\n\t\"KeyBindingFrame_OnKeyDown\",\n\t\"KeyBindingFrame_OnLoad\",\n\t\"KeyBindingFrame_OnShow\",\n\t\"KeyBindingFrame_SetBinding\",\n\t\"KeyBindingFrame_SetSelected\",\n\t\"KeyBindingFrame_UnbindKey\",\n\t\"KeyBindingFrame_Update\",\n\t\"KeyBindingFrame_UpdateUnbindKey\",\n\t-- tables: Blizzard_BindingUI\n\t\"BattlefieldMinimapOptions\",\n\t\"KeyBindingFrame\",\n\t\"KeyBindingFrameBinding1\",\n\t\"KeyBindingFrameBinding10\",\n\t\"KeyBindingFrameBinding10Key1Button\",\n\t\"KeyBindingFrameBinding10Key2Button\",\n\t\"KeyBindingFrameBinding11\",\n\t\"KeyBindingFrameBinding11Key1Button\",\n\t\"KeyBindingFrameBinding11Key2Button\",\n\t\"KeyBindingFrameBinding12\",\n\t\"KeyBindingFrameBinding12Key1Button\",\n\t\"KeyBindingFrameBinding12Key2Button\",\n\t\"KeyBindingFrameBinding13\",\n\t\"KeyBindingFrameBinding13Key1Button\",\n\t\"KeyBindingFrameBinding13Key2Button\",\n\t\"KeyBindingFrameBinding14\",\n\t\"KeyBindingFrameBinding14Key1Button\",\n\t\"KeyBindingFrameBinding14Key2Button\",\n\t\"KeyBindingFrameBinding15\",\n\t\"KeyBindingFrameBinding15Key1Button\",\n\t\"KeyBindingFrameBinding15Key2Button\",\n\t\"KeyBindingFrameBinding16\",\n\t\"KeyBindingFrameBinding16Key1Button\",\n\t\"KeyBindingFrameBinding16Key2Button\",\n\t\"KeyBindingFrameBinding17\",\n\t\"KeyBindingFrameBinding17Key1Button\",\n\t\"KeyBindingFrameBinding17Key2Button\",\n\t\"KeyBindingFrameBinding1Key1Button\",\n\t\"KeyBindingFrameBinding1Key2Button\",\n\t\"KeyBindingFrameBinding2\",\n\t\"KeyBindingFrameBinding2Key1Button\",\n\t\"KeyBindingFrameBinding2Key2Button\",\n\t\"KeyBindingFrameBinding3\",\n\t\"KeyBindingFrameBinding3Key1Button\",\n\t\"KeyBindingFrameBinding3Key2Button\",\n\t\"KeyBindingFrameBinding4\",\n\t\"KeyBindingFrameBinding4Key1Button\",\n\t\"KeyBindingFrameBinding4Key2Button\",\n\t\"KeyBindingFrameBinding5\",\n\t\"KeyBindingFrameBinding5Key1Button\",\n\t\"KeyBindingFrameBinding5Key2Button\",\n\t\"KeyBindingFrameBinding6\",\n\t\"KeyBindingFrameBinding6Key1Button\",\n\t\"KeyBindingFrameBinding6Key2Button\",\n\t\"KeyBindingFrameBinding7\",\n\t\"KeyBindingFrameBinding7Key1Button\",\n\t\"KeyBindingFrameBinding7Key2Button\",\n\t\"KeyBindingFrameBinding8\",\n\t\"KeyBindingFrameBinding8Key1Button\",\n\t\"KeyBindingFrameBinding8Key2Button\",\n\t\"KeyBindingFrameBinding9\",\n\t\"KeyBindingFrameBinding9Key1Button\",\n\t\"KeyBindingFrameBinding9Key2Button\",\n\t\"KeyBindingFrameCancelButton\",\n\t\"KeyBindingFrameCharacterButton\",\n\t\"KeyBindingFrameDefaultButton\",\n\t\"KeyBindingFrameOkayButton\",\n\t\"KeyBindingFrameScrollFrame\",\n\t\"KeyBindingFrameScrollFrameScrollBar\",\n\t\"KeyBindingFrameScrollFrameScrollBarScrollDownButton\",\n\t\"KeyBindingFrameScrollFrameScrollBarScrollUpButton\",\n\t\"KeyBindingFrameScrollFrameScrollChildFrame\",\n\t\"KeyBindingFrameUnbindButton\",\n\t-- frames: Blizzard_BindingUI\n\t\"KeyBindingFrame\",\n\t\"KeyBindingFrameBinding1\",\n\t\"KeyBindingFrameBinding1Key1Button\",\n\t\"KeyBindingFrameBinding1Key2Button\",\n\t\"KeyBindingFrameBinding2\",\n\t\"KeyBindingFrameBinding2Key1Button\",\n\t\"KeyBindingFrameBinding2Key2Button\",\n\t\"KeyBindingFrameBinding3\",\n\t\"KeyBindingFrameBinding3Key1Button\",\n\t\"KeyBindingFrameBinding3Key2Button\",\n\t\"KeyBindingFrameBinding4\",\n\t\"KeyBindingFrameBinding4Key1Button\",\n\t\"KeyBindingFrameBinding4Key2Button\",\n\t\"KeyBindingFrameBinding5\",\n\t\"KeyBindingFrameBinding5Key1Button\",\n\t\"KeyBindingFrameBinding5Key2Button\",\n\t\"KeyBindingFrameBinding6\",\n\t\"KeyBindingFrameBinding6Key1Button\",\n\t\"KeyBindingFrameBinding6Key2Button\",\n\t\"KeyBindingFrameBinding7\",\n\t\"KeyBindingFrameBinding7Key1Button\",\n\t\"KeyBindingFrameBinding7Key2Button\",\n\t\"KeyBindingFrameBinding8\",\n\t\"KeyBindingFrameBinding8Key1Button\",\n\t\"KeyBindingFrameBinding8Key2Button\",\n\t\"KeyBindingFrameBinding9\",\n\t\"KeyBindingFrameBinding9Key1Button\",\n\t\"KeyBindingFrameBinding9Key2Button\",\n\t\"KeyBindingFrameBinding10\",\n\t\"KeyBindingFrameBinding10Key1Button\",\n\t\"KeyBindingFrameBinding10Key2Button\",\n\t\"KeyBindingFrameBinding11\",\n\t\"KeyBindingFrameBinding11Key1Button\",\n\t\"KeyBindingFrameBinding11Key2Button\",\n\t\"KeyBindingFrameBinding12\",\n\t\"KeyBindingFrameBinding12Key1Button\",\n\t\"KeyBindingFrameBinding12Key2Button\",\n\t\"KeyBindingFrameBinding13\",\n\t\"KeyBindingFrameBinding13Key1Button\",\n\t\"KeyBindingFrameBinding13Key2Button\",\n\t\"KeyBindingFrameBinding14\",\n\t\"KeyBindingFrameBinding14Key1Button\",\n\t\"KeyBindingFrameBinding14Key2Button\",\n\t\"KeyBindingFrameBinding15\",\n\t\"KeyBindingFrameBinding15Key1Button\",\n\t\"KeyBindingFrameBinding15Key2Button\",\n\t\"KeyBindingFrameBinding16\",\n\t\"KeyBindingFrameBinding16Key1Button\",\n\t\"KeyBindingFrameBinding16Key2Button\",\n\t\"KeyBindingFrameBinding17\",\n\t\"KeyBindingFrameBinding17Key1Button\",\n\t\"KeyBindingFrameBinding17Key2Button\",\n\t\"KeyBindingFrameScrollFrame\",\n\t\"KeyBindingFrameScrollFrameScrollChildFrame\",\n\t\"KeyBindingFrameScrollFrameScrollBar\",\n\t\"KeyBindingFrameScrollFrameScrollBarScrollUpButton\",\n\t\"KeyBindingFrameScrollFrameScrollBarScrollDownButton\",\n\t\"KeyBindingFrameCharacterButton\",\n\t\"KeyBindingFrameDefaultButton\",\n\t\"KeyBindingFrameCancelButton\",\n\t\"KeyBindingFrameOkayButton\",\n\t\"KeyBindingFrameUnbindButton\",\n\t-- widgets: Blizzard_BindingUI\n\t\"KeyBindingFrameBinding10Description\",\n\t\"KeyBindingFrameBinding10Header\",\n\t\"KeyBindingFrameBinding10Key1ButtonLeft\",\n\t\"KeyBindingFrameBinding10Key1ButtonMiddle\",\n\t\"KeyBindingFrameBinding10Key1ButtonRight\",\n\t\"KeyBindingFrameBinding10Key1ButtonText\",\n\t\"KeyBindingFrameBinding10Key2ButtonLeft\",\n\t\"KeyBindingFrameBinding10Key2ButtonMiddle\",\n\t\"KeyBindingFrameBinding10Key2ButtonRight\",\n\t\"KeyBindingFrameBinding10Key2ButtonText\",\n\t\"KeyBindingFrameBinding11Description\",\n\t\"KeyBindingFrameBinding11Header\",\n\t\"KeyBindingFrameBinding11Key1ButtonLeft\",\n\t\"KeyBindingFrameBinding11Key1ButtonMiddle\",\n\t\"KeyBindingFrameBinding11Key1ButtonRight\",\n\t\"KeyBindingFrameBinding11Key1ButtonText\",\n\t\"KeyBindingFrameBinding11Key2ButtonLeft\",\n\t\"KeyBindingFrameBinding11Key2ButtonMiddle\",\n\t\"KeyBindingFrameBinding11Key2ButtonRight\",\n\t\"KeyBindingFrameBinding11Key2ButtonText\",\n\t\"KeyBindingFrameBinding12Description\",\n\t\"KeyBindingFrameBinding12Header\",\n\t\"KeyBindingFrameBinding12Key1ButtonLeft\",\n\t\"KeyBindingFrameBinding12Key1ButtonMiddle\",\n\t\"KeyBindingFrameBinding12Key1ButtonRight\",\n\t\"KeyBindingFrameBinding12Key1ButtonText\",\n\t\"KeyBindingFrameBinding12Key2ButtonLeft\",\n\t\"KeyBindingFrameBinding12Key2ButtonMiddle\",\n\t\"KeyBindingFrameBinding12Key2ButtonRight\",\n\t\"KeyBindingFrameBinding12Key2ButtonText\",\n\t\"KeyBindingFrameBinding13Description\",\n\t\"KeyBindingFrameBinding13Header\",\n\t\"KeyBindingFrameBinding13Key1ButtonLeft\",\n\t\"KeyBindingFrameBinding13Key1ButtonMiddle\",\n\t\"KeyBindingFrameBinding13Key1ButtonRight\",\n\t\"KeyBindingFrameBinding13Key1ButtonText\",\n\t\"KeyBindingFrameBinding13Key2ButtonLeft\",\n\t\"KeyBindingFrameBinding13Key2ButtonMiddle\",\n\t\"KeyBindingFrameBinding13Key2ButtonRight\",\n\t\"KeyBindingFrameBinding13Key2ButtonText\",\n\t\"KeyBindingFrameBinding14Description\",\n\t\"KeyBindingFrameBinding14Header\",\n\t\"KeyBindingFrameBinding14Key1ButtonLeft\",\n\t\"KeyBindingFrameBinding14Key1ButtonMiddle\",\n\t\"KeyBindingFrameBinding14Key1ButtonRight\",\n\t\"KeyBindingFrameBinding14Key1ButtonText\",\n\t\"KeyBindingFrameBinding14Key2ButtonLeft\",\n\t\"KeyBindingFrameBinding14Key2ButtonMiddle\",\n\t\"KeyBindingFrameBinding14Key2ButtonRight\",\n\t\"KeyBindingFrameBinding14Key2ButtonText\",\n\t\"KeyBindingFrameBinding15Description\",\n\t\"KeyBindingFrameBinding15Header\",\n\t\"KeyBindingFrameBinding15Key1ButtonLeft\",\n\t\"KeyBindingFrameBinding15Key1ButtonMiddle\",\n\t\"KeyBindingFrameBinding15Key1ButtonRight\",\n\t\"KeyBindingFrameBinding15Key1ButtonText\",\n\t\"KeyBindingFrameBinding15Key2ButtonLeft\",\n\t\"KeyBindingFrameBinding15Key2ButtonMiddle\",\n\t\"KeyBindingFrameBinding15Key2ButtonRight\",\n\t\"KeyBindingFrameBinding15Key2ButtonText\",\n\t\"KeyBindingFrameBinding16Description\",\n\t\"KeyBindingFrameBinding16Header\",\n\t\"KeyBindingFrameBinding16Key1ButtonLeft\",\n\t\"KeyBindingFrameBinding16Key1ButtonMiddle\",\n\t\"KeyBindingFrameBinding16Key1ButtonRight\",\n\t\"KeyBindingFrameBinding16Key1ButtonText\",\n\t\"KeyBindingFrameBinding16Key2ButtonLeft\",\n\t\"KeyBindingFrameBinding16Key2ButtonMiddle\",\n\t\"KeyBindingFrameBinding16Key2ButtonRight\",\n\t\"KeyBindingFrameBinding16Key2ButtonText\",\n\t\"KeyBindingFrameBinding17Description\",\n\t\"KeyBindingFrameBinding17Header\",\n\t\"KeyBindingFrameBinding17Key1ButtonLeft\",\n\t\"KeyBindingFrameBinding17Key1ButtonMiddle\",\n\t\"KeyBindingFrameBinding17Key1ButtonRight\",\n\t\"KeyBindingFrameBinding17Key1ButtonText\",\n\t\"KeyBindingFrameBinding17Key2ButtonLeft\",\n\t\"KeyBindingFrameBinding17Key2ButtonMiddle\",\n\t\"KeyBindingFrameBinding17Key2ButtonRight\",\n\t\"KeyBindingFrameBinding17Key2ButtonText\",\n\t\"KeyBindingFrameBinding1Description\",\n\t\"KeyBindingFrameBinding1Header\",\n\t\"KeyBindingFrameBinding1Key1ButtonLeft\",\n\t\"KeyBindingFrameBinding1Key1ButtonMiddle\",\n\t\"KeyBindingFrameBinding1Key1ButtonRight\",\n\t\"KeyBindingFrameBinding1Key1ButtonText\",\n\t\"KeyBindingFrameBinding1Key2ButtonLeft\",\n\t\"KeyBindingFrameBinding1Key2ButtonMiddle\",\n\t\"KeyBindingFrameBinding1Key2ButtonRight\",\n\t\"KeyBindingFrameBinding1Key2ButtonText\",\n\t\"KeyBindingFrameBinding2Description\",\n\t\"KeyBindingFrameBinding2Header\",\n\t\"KeyBindingFrameBinding2Key1ButtonLeft\",\n\t\"KeyBindingFrameBinding2Key1ButtonMiddle\",\n\t\"KeyBindingFrameBinding2Key1ButtonRight\",\n\t\"KeyBindingFrameBinding2Key1ButtonText\",\n\t\"KeyBindingFrameBinding2Key2ButtonLeft\",\n\t\"KeyBindingFrameBinding2Key2ButtonMiddle\",\n\t\"KeyBindingFrameBinding2Key2ButtonRight\",\n\t\"KeyBindingFrameBinding2Key2ButtonText\",\n\t\"KeyBindingFrameBinding3Description\",\n\t\"KeyBindingFrameBinding3Header\",\n\t\"KeyBindingFrameBinding3Key1ButtonLeft\",\n\t\"KeyBindingFrameBinding3Key1ButtonMiddle\",\n\t\"KeyBindingFrameBinding3Key1ButtonRight\",\n\t\"KeyBindingFrameBinding3Key1ButtonText\",\n\t\"KeyBindingFrameBinding3Key2ButtonLeft\",\n\t\"KeyBindingFrameBinding3Key2ButtonMiddle\",\n\t\"KeyBindingFrameBinding3Key2ButtonRight\",\n\t\"KeyBindingFrameBinding3Key2ButtonText\",\n\t\"KeyBindingFrameBinding4Description\",\n\t\"KeyBindingFrameBinding4Header\",\n\t\"KeyBindingFrameBinding4Key1ButtonLeft\",\n\t\"KeyBindingFrameBinding4Key1ButtonMiddle\",\n\t\"KeyBindingFrameBinding4Key1ButtonRight\",\n\t\"KeyBindingFrameBinding4Key1ButtonText\",\n\t\"KeyBindingFrameBinding4Key2ButtonLeft\",\n\t\"KeyBindingFrameBinding4Key2ButtonMiddle\",\n\t\"KeyBindingFrameBinding4Key2ButtonRight\",\n\t\"KeyBindingFrameBinding4Key2ButtonText\",\n\t\"KeyBindingFrameBinding5Description\",\n\t\"KeyBindingFrameBinding5Header\",\n\t\"KeyBindingFrameBinding5Key1ButtonLeft\",\n\t\"KeyBindingFrameBinding5Key1ButtonMiddle\",\n\t\"KeyBindingFrameBinding5Key1ButtonRight\",\n\t\"KeyBindingFrameBinding5Key1ButtonText\",\n\t\"KeyBindingFrameBinding5Key2ButtonLeft\",\n\t\"KeyBindingFrameBinding5Key2ButtonMiddle\",\n\t\"KeyBindingFrameBinding5Key2ButtonRight\",\n\t\"KeyBindingFrameBinding5Key2ButtonText\",\n\t\"KeyBindingFrameBinding6Description\",\n\t\"KeyBindingFrameBinding6Header\",\n\t\"KeyBindingFrameBinding6Key1ButtonLeft\",\n\t\"KeyBindingFrameBinding6Key1ButtonMiddle\",\n\t\"KeyBindingFrameBinding6Key1ButtonRight\",\n\t\"KeyBindingFrameBinding6Key1ButtonText\",\n\t\"KeyBindingFrameBinding6Key2ButtonLeft\",\n\t\"KeyBindingFrameBinding6Key2ButtonMiddle\",\n\t\"KeyBindingFrameBinding6Key2ButtonRight\",\n\t\"KeyBindingFrameBinding6Key2ButtonText\",\n\t\"KeyBindingFrameBinding7Description\",\n\t\"KeyBindingFrameBinding7Header\",\n\t\"KeyBindingFrameBinding7Key1ButtonLeft\",\n\t\"KeyBindingFrameBinding7Key1ButtonMiddle\",\n\t\"KeyBindingFrameBinding7Key1ButtonRight\",\n\t\"KeyBindingFrameBinding7Key1ButtonText\",\n\t\"KeyBindingFrameBinding7Key2ButtonLeft\",\n\t\"KeyBindingFrameBinding7Key2ButtonMiddle\",\n\t\"KeyBindingFrameBinding7Key2ButtonRight\",\n\t\"KeyBindingFrameBinding7Key2ButtonText\",\n\t\"KeyBindingFrameBinding8Description\",\n\t\"KeyBindingFrameBinding8Header\",\n\t\"KeyBindingFrameBinding8Key1ButtonLeft\",\n\t\"KeyBindingFrameBinding8Key1ButtonMiddle\",\n\t\"KeyBindingFrameBinding8Key1ButtonRight\",\n\t\"KeyBindingFrameBinding8Key1ButtonText\",\n\t\"KeyBindingFrameBinding8Key2ButtonLeft\",\n\t\"KeyBindingFrameBinding8Key2ButtonMiddle\",\n\t\"KeyBindingFrameBinding8Key2ButtonRight\",\n\t\"KeyBindingFrameBinding8Key2ButtonText\",\n\t\"KeyBindingFrameBinding9Description\",\n\t\"KeyBindingFrameBinding9Header\",\n\t\"KeyBindingFrameBinding9Key1ButtonLeft\",\n\t\"KeyBindingFrameBinding9Key1ButtonMiddle\",\n\t\"KeyBindingFrameBinding9Key1ButtonRight\",\n\t\"KeyBindingFrameBinding9Key1ButtonText\",\n\t\"KeyBindingFrameBinding9Key2ButtonLeft\",\n\t\"KeyBindingFrameBinding9Key2ButtonMiddle\",\n\t\"KeyBindingFrameBinding9Key2ButtonRight\",\n\t\"KeyBindingFrameBinding9Key2ButtonText\",\n\t\"KeyBindingFrameCancelButtonText\",\n\t\"KeyBindingFrameCharacterButtonText\",\n\t\"KeyBindingFrameCommandLabel\",\n\t\"KeyBindingFrameHeader\",\n\t\"KeyBindingFrameHeaderText\",\n\t\"KeyBindingFrameKey1Label\",\n\t\"KeyBindingFrameKey2Label\",\n\t\"KeyBindingFrameOkayButtonText\",\n\t\"KeyBindingFrameOutputText\",\n\t\"KeyBindingFrameScrollFrameScrollBarThumbTexture\",\n\t\"KeyBindingFrameUnbindButtonText\",\n\n\t-- functions: Blizzard_Calendar\n\t\"CalendarArenaTeamContextMenuButton_OnClick_CreateArenaTeamEvent\",\n\t\"CalendarArenaTeamContextMenu_Initialize\",\n\t\"CalendarArenaTeamContextMenu_OnEvent\",\n\t\"CalendarArenaTeamContextMenu_OnLoad\",\n\t\"CalendarArenaTeamContextMenu_OnShow\",\n\t\"CalendarClassButtonContainer_Hide\",\n\t\"CalendarClassButtonContainer_OnLoad\",\n\t\"CalendarClassButtonContainer_Show\",\n\t\"CalendarClassButtonContainer_Update\",\n\t\"CalendarClassButton_OnEnter\",\n\t\"CalendarClassButton_OnLoad\",\n\t\"CalendarClassTotalsButton_OnEnter\",\n\t\"CalendarClassTotalsButton_Update\",\n\t\"CalendarContextMenu_Hide\",\n\t\"CalendarContextMenu_OnEvent\",\n\t\"CalendarContextMenu_OnHide\",\n\t\"CalendarContextMenu_OnLoad\",\n\t\"CalendarContextMenu_Reset\",\n\t\"CalendarContextMenu_Show\",\n\t\"CalendarContextMenu_Toggle\",\n\t\"CalendarCreateEventAMPMDropDown_Initialize\",\n\t\"CalendarCreateEventAMPMDropDown_OnClick\",\n\t\"CalendarCreateEventAutoApproveCheck_OnClick\",\n\t\"CalendarCreateEventAutoApproveCheck_OnLoad\",\n\t\"CalendarCreateEventCreateButton_OnClick\",\n\t\"CalendarCreateEventCreateButton_OnUpdate\",\n\t\"CalendarCreateEventCreateButton_SetText\",\n\t\"CalendarCreateEventCreateButton_Update\",\n\t\"CalendarCreateEventCreatorName_Update\",\n\t\"CalendarCreateEventDescriptionScrollFrame_OnLoad\",\n\t\"CalendarCreateEventFrame_OnEvent\",\n\t\"CalendarCreateEventFrame_OnHide\",\n\t\"CalendarCreateEventFrame_OnLoad\",\n\t\"CalendarCreateEventFrame_OnShow\",\n\t\"CalendarCreateEventFrame_SetSelectedInvite\",\n\t\"CalendarCreateEventFrame_Update\",\n\t\"CalendarCreateEventHourDropDown_Initialize\",\n\t\"CalendarCreateEventHourDropDown_OnClick\",\n\t\"CalendarCreateEventInviteButton_OnClick\",\n\t\"CalendarCreateEventInviteButton_OnUpdate\",\n\t\"CalendarCreateEventInviteButton_Update\",\n\t\"CalendarCreateEventInviteContextMenu_Initialize\",\n\t\"CalendarCreateEventInviteEdit_OnEditFocusLost\",\n\t\"CalendarCreateEventInviteEdit_OnEnterPressed\",\n\t\"CalendarCreateEventInviteListButton_Click\",\n\t\"CalendarCreateEventInviteListButton_OnClick\",\n\t\"CalendarCreateEventInviteListScrollFrame_Update\",\n\t\"CalendarCreateEventInviteList_Update\",\n\t\"CalendarCreateEventLockEventCheck_OnClick\",\n\t\"CalendarCreateEventLockEventCheck_OnLoad\",\n\t\"CalendarCreateEventMassInviteButton_OnClick\",\n\t\"CalendarCreateEventMassInviteButton_OnUpdate\",\n\t\"CalendarCreateEventMassInviteButton_Update\",\n\t\"CalendarCreateEventMinuteDropDown_Initialize\",\n\t\"CalendarCreateEventMinuteDropDown_OnClick\",\n\t\"CalendarCreateEventRaidInviteButton_OnClick\",\n\t\"CalendarCreateEventRaidInviteButton_OnEnter\",\n\t\"CalendarCreateEventRaidInviteButton_OnEvent\",\n\t\"CalendarCreateEventRaidInviteButton_OnLoad\",\n\t\"CalendarCreateEventRaidInviteButton_Update\",\n\t\"CalendarCreateEventRepeatOptionDropDown_Initialize\",\n\t\"CalendarCreateEventRepeatOptionDropDown_OnClick\",\n\t\"CalendarCreateEventTexture_Update\",\n\t\"CalendarCreateEventTitleEdit_OnEditFocusLost\",\n\t\"CalendarCreateEventTitleEdit_OnTextChanged\",\n\t\"CalendarCreateEventTypeDropDown_InitEventTypes\",\n\t\"CalendarCreateEventTypeDropDown_InitRepeatOptions\",\n\t\"CalendarCreateEventTypeDropDown_Initialize\",\n\t\"CalendarCreateEventTypeDropDown_OnClick\",\n\t\"CalendarCreateEvent_SetAutoApprove\",\n\t\"CalendarCreateEvent_SetEventTime\",\n\t\"CalendarCreateEvent_SetLockEvent\",\n\t\"CalendarCreateEvent_UpdateEventTime\",\n\t\"CalendarCreateEvent_UpdateEventType\",\n\t\"CalendarCreateEvent_UpdateRepeatOption\",\n\t\"CalendarCreateEvent_UpdateTimeFormat\",\n\t\"CalendarDayButtonMoreEventsButton_OnClick\",\n\t\"CalendarDayButtonMoreEventsButton_OnEnter\",\n\t\"CalendarDayButtonMoreEventsButton_OnLeave\",\n\t\"CalendarDayButtonMoreEventsButton_OnLoad\",\n\t\"CalendarDayButton_Click\",\n\t\"CalendarDayButton_OnClick\",\n\t\"CalendarDayButton_OnEnter\",\n\t\"CalendarDayButton_OnLeave\",\n\t\"CalendarDayButton_OnLoad\",\n\t\"CalendarDayContextMenu_AcceptInvite\",\n\t\"CalendarDayContextMenu_CopyEvent\",\n\t\"CalendarDayContextMenu_CreateEvent\",\n\t\"CalendarDayContextMenu_CreateGuildAnnouncement\",\n\t\"CalendarDayContextMenu_CreateGuildEvent\",\n\t\"CalendarDayContextMenu_DeclineInvite\",\n\t\"CalendarDayContextMenu_DeleteEvent\",\n\t\"CalendarDayContextMenu_Initialize\",\n\t\"CalendarDayContextMenu_PasteEvent\",\n\t\"CalendarDayContextMenu_RefreshEvent\",\n\t\"CalendarDayContextMenu_RemoveInvite\",\n\t\"CalendarDayContextMenu_ReportSpam\",\n\t\"CalendarDayContextMenu_SignUp\",\n\t\"CalendarDayContextMenu_TentativeInvite\",\n\t\"CalendarDayContextMenu_UnlockHighlights\",\n\t\"CalendarDayEventButton_Click\",\n\t\"CalendarDayEventButton_OnClick\",\n\t\"CalendarDayEventButton_OnEnter\",\n\t\"CalendarDayEventButton_OnLeave\",\n\t\"CalendarDayEventButton_OnLoad\",\n\t\"CalendarEventCloseButton_OnClick\",\n\t\"CalendarEventDescriptionScrollFrame_OnEvent\",\n\t\"CalendarEventDescriptionScrollFrame_OnLoad\",\n\t\"CalendarEventFrameBlocker_OnHide\",\n\t\"CalendarEventFrameBlocker_OnShow\",\n\t\"CalendarEventFrameBlocker_Update\",\n\t\"CalendarEventInviteListButton_OnEnter\",\n\t\"CalendarEventInviteList_AnchorSortButtons\",\n\t\"CalendarEventInviteList_OnEvent\",\n\t\"CalendarEventInviteList_OnLoad\",\n\t\"CalendarEventInviteList_UpdateSortButtons\",\n\t\"CalendarEventInviteSortButton_OnClick\",\n\t\"CalendarEventInviteSortButton_OnLoad\",\n\t\"CalendarEventPickerButton_Click\",\n\t\"CalendarEventPickerButton_OnClick\",\n\t\"CalendarEventPickerButton_OnDoubleClick\",\n\t\"CalendarEventPickerButton_OnLoad\",\n\t\"CalendarEventPickerCloseButton_OnClick\",\n\t\"CalendarEventPickerFrame_Hide\",\n\t\"CalendarEventPickerFrame_OnEvent\",\n\t\"CalendarEventPickerFrame_OnLoad\",\n\t\"CalendarEventPickerFrame_SetSelectedEvent\",\n\t\"CalendarEventPickerFrame_Show\",\n\t\"CalendarEventPickerFrame_Toggle\",\n\t\"CalendarEventPickerScrollFrame_OnEvent\",\n\t\"CalendarEventPickerScrollFrame_OnLoad\",\n\t\"CalendarEventPickerScrollFrame_Update\",\n\t\"CalendarFilterButton_OnClick\",\n\t\"CalendarFilterDropDown_Initialize\",\n\t\"CalendarFilterDropDown_OnClick\",\n\t\"CalendarFilterDropDown_OnLoad\",\n\t\"CalendarFrame_CloseEvent\",\n\t\"CalendarFrame_GetEventFrame\",\n\t\"CalendarFrame_GetModal\",\n\t\"CalendarFrame_HideEventFrame\",\n\t\"CalendarFrame_InitDay\",\n\t\"CalendarFrame_InitWeekday\",\n\t\"CalendarFrame_OffsetMonth\",\n\t\"CalendarFrame_OnEvent\",\n\t\"CalendarFrame_OnHide\",\n\t\"CalendarFrame_OnLoad\",\n\t\"CalendarFrame_OnShow\",\n\t\"CalendarFrame_OpenEvent\",\n\t\"CalendarFrame_PopModal\",\n\t\"CalendarFrame_PushModal\",\n\t\"CalendarFrame_SetLastDay\",\n\t\"CalendarFrame_SetSelectedDay\",\n\t\"CalendarFrame_SetSelectedEvent\",\n\t\"CalendarFrame_SetToday\",\n\t\"CalendarFrame_ShowEventFrame\",\n\t\"CalendarFrame_Update\",\n\t\"CalendarFrame_UpdateDay\",\n\t\"CalendarFrame_UpdateDayEvents\",\n\t\"CalendarFrame_UpdateDayTextures\",\n\t\"CalendarFrame_UpdateFilter\",\n\t\"CalendarFrame_UpdateMonthOffsetButtons\",\n\t\"CalendarFrame_UpdateTimeFormat\",\n\t\"CalendarFrame_UpdateTitle\",\n\t\"CalendarInviteContextMenu_ClearModerator\",\n\t\"CalendarInviteContextMenu_InviteToGroup\",\n\t\"CalendarInviteContextMenu_RemoveInvite\",\n\t\"CalendarInviteContextMenu_SetModerator\",\n\t\"CalendarInviteContextMenu_UnlockHighlights\",\n\t\"CalendarInviteStatusContextMenu_Initialize\",\n\t\"CalendarInviteStatusContextMenu_OnEvent\",\n\t\"CalendarInviteStatusContextMenu_OnLoad\",\n\t\"CalendarInviteStatusContextMenu_OnShow\",\n\t\"CalendarInviteStatusContextMenu_SetStatusOption\",\n\t\"CalendarMassInviteArenaButton_OnClick\",\n\t\"CalendarMassInviteArenaButton_OnEnter\",\n\t\"CalendarMassInviteArenaButton_OnLoad\",\n\t\"CalendarMassInviteArena_Update\",\n\t\"CalendarMassInviteFrame_OnEvent\",\n\t\"CalendarMassInviteFrame_OnLoad\",\n\t\"CalendarMassInviteFrame_OnShow\",\n\t\"CalendarMassInviteFrame_OnUpdate\",\n\t\"CalendarMassInviteGuildAcceptButton_OnClick\",\n\t\"CalendarMassInviteGuildRankMenu_Initialize\",\n\t\"CalendarMassInviteGuildRankMenu_OnClick\",\n\t\"CalendarMassInviteGuild_Update\",\n\t\"CalendarModalDummy_Hide\",\n\t\"CalendarModalDummy_Show\",\n\t\"CalendarNextMonthButton_OnClick\",\n\t\"CalendarPrevMonthButton_OnClick\",\n\t\"CalendarTexturePickerAcceptButton_OnClick\",\n\t\"CalendarTexturePickerButton_OnClick\",\n\t\"CalendarTexturePickerButton_OnDoubleClick\",\n\t\"CalendarTexturePickerButton_OnLoad\",\n\t\"CalendarTexturePickerFrame_Hide\",\n\t\"CalendarTexturePickerFrame_OnLoad\",\n\t\"CalendarTexturePickerFrame_Show\",\n\t\"CalendarTexturePickerFrame_Toggle\",\n\t\"CalendarTexturePickerFrame_Update\",\n\t\"CalendarTexturePickerScrollFrame_OnEvent\",\n\t\"CalendarTexturePickerScrollFrame_OnLoad\",\n\t\"CalendarTexturePickerScrollFrame_Update\",\n\t\"CalendarTexturePickerTitleFrame_Update\",\n\t\"CalendarTitleFrame_SetText\",\n\t\"CalendarTodayFrame_OnUpdate\",\n\t\"CalendarViewEventAcceptButton_OnClick\",\n\t\"CalendarViewEventAcceptButton_OnEnter\",\n\t\"CalendarViewEventDeclineButton_OnClick\",\n\t\"CalendarViewEventDeclineButton_OnEnter\",\n\t\"CalendarViewEventDescriptionScrollFrame_OnLoad\",\n\t\"CalendarViewEventFrame_OnEvent\",\n\t\"CalendarViewEventFrame_OnHide\",\n\t\"CalendarViewEventFrame_OnLoad\",\n\t\"CalendarViewEventFrame_OnShow\",\n\t\"CalendarViewEventFrame_SetSelectedInvite\",\n\t\"CalendarViewEventFrame_Update\",\n\t\"CalendarViewEventInviteContextMenu_Initialize\",\n\t\"CalendarViewEventInviteListButton_Click\",\n\t\"CalendarViewEventInviteListButton_OnClick\",\n\t\"CalendarViewEventInviteListScrollFrame_Update\",\n\t\"CalendarViewEventInviteList_Update\",\n\t\"CalendarViewEventRSVPButton_OnUpdate\",\n\t\"CalendarViewEventRSVP_Update\",\n\t\"CalendarViewEventRemoveButton_OnClick\",\n\t\"CalendarViewEventRemoveButton_OnEnter\",\n\t\"CalendarViewEventTentativeButton_OnClick\",\n\t\"CalendarViewEventTentativeButton_OnEnter\",\n\t\"CalendarViewHolidayFrame_OnHide\",\n\t\"CalendarViewHolidayFrame_OnLoad\",\n\t\"CalendarViewHolidayFrame_OnShow\",\n\t\"CalendarViewHolidayFrame_Update\",\n\t\"CalendarViewRaidFrame_OnHide\",\n\t\"CalendarViewRaidFrame_OnLoad\",\n\t\"CalendarViewRaidFrame_OnShow\",\n\t\"CalendarViewRaidFrame_Update\",\n\t\"Calendar_Hide\",\n\t\"Calendar_Show\",\n\t\"Calendar_Toggle\",\n\t\"CloseCalendarMenus\",\n\t-- tables: Blizzard_Calendar\n\t\"CALENDAR_CREATEEVENTFRAME_TAB_LIST\",\n\t\"CalendarArenaTeamContextMenu\",\n\t\"CalendarArenaTeamContextMenuButton1\",\n\t\"CalendarArenaTeamContextMenuButton10\",\n\t\"CalendarArenaTeamContextMenuButton11\",\n\t\"CalendarArenaTeamContextMenuButton12\",\n\t\"CalendarArenaTeamContextMenuButton13\",\n\t\"CalendarArenaTeamContextMenuButton14\",\n\t\"CalendarArenaTeamContextMenuButton15\",\n\t\"CalendarArenaTeamContextMenuButton16\",\n\t\"CalendarArenaTeamContextMenuButton17\",\n\t\"CalendarArenaTeamContextMenuButton18\",\n\t\"CalendarArenaTeamContextMenuButton19\",\n\t\"CalendarArenaTeamContextMenuButton2\",\n\t\"CalendarArenaTeamContextMenuButton20\",\n\t\"CalendarArenaTeamContextMenuButton21\",\n\t\"CalendarArenaTeamContextMenuButton22\",\n\t\"CalendarArenaTeamContextMenuButton23\",\n\t\"CalendarArenaTeamContextMenuButton24\",\n\t\"CalendarArenaTeamContextMenuButton25\",\n\t\"CalendarArenaTeamContextMenuButton26\",\n\t\"CalendarArenaTeamContextMenuButton27\",\n\t\"CalendarArenaTeamContextMenuButton28\",\n\t\"CalendarArenaTeamContextMenuButton29\",\n\t\"CalendarArenaTeamContextMenuButton3\",\n\t\"CalendarArenaTeamContextMenuButton30\",\n\t\"CalendarArenaTeamContextMenuButton31\",\n\t\"CalendarArenaTeamContextMenuButton32\",\n\t\"CalendarArenaTeamContextMenuButton4\",\n\t\"CalendarArenaTeamContextMenuButton5\",\n\t\"CalendarArenaTeamContextMenuButton6\",\n\t\"CalendarArenaTeamContextMenuButton7\",\n\t\"CalendarArenaTeamContextMenuButton8\",\n\t\"CalendarArenaTeamContextMenuButton9\",\n\t\"CalendarClassButton1\",\n\t\"CalendarClassButton10\",\n\t\"CalendarClassButton2\",\n\t\"CalendarClassButton3\",\n\t\"CalendarClassButton4\",\n\t\"CalendarClassButton5\",\n\t\"CalendarClassButton6\",\n\t\"CalendarClassButton7\",\n\t\"CalendarClassButton8\",\n\t\"CalendarClassButton9\",\n\t\"CalendarClassButtonContainer\",\n\t\"CalendarClassTotalsButton\",\n\t\"CalendarCloseButton\",\n\t\"CalendarContextMenu\",\n\t\"CalendarContextMenuButton1\",\n\t\"CalendarContextMenuButton10\",\n\t\"CalendarContextMenuButton11\",\n\t\"CalendarContextMenuButton12\",\n\t\"CalendarContextMenuButton13\",\n\t\"CalendarContextMenuButton14\",\n\t\"CalendarContextMenuButton15\",\n\t\"CalendarContextMenuButton16\",\n\t\"CalendarContextMenuButton17\",\n\t\"CalendarContextMenuButton18\",\n\t\"CalendarContextMenuButton19\",\n\t\"CalendarContextMenuButton2\",\n\t\"CalendarContextMenuButton20\",\n\t\"CalendarContextMenuButton21\",\n\t\"CalendarContextMenuButton22\",\n\t\"CalendarContextMenuButton23\",\n\t\"CalendarContextMenuButton24\",\n\t\"CalendarContextMenuButton25\",\n\t\"CalendarContextMenuButton26\",\n\t\"CalendarContextMenuButton27\",\n\t\"CalendarContextMenuButton28\",\n\t\"CalendarContextMenuButton29\",\n\t\"CalendarContextMenuButton3\",\n\t\"CalendarContextMenuButton30\",\n\t\"CalendarContextMenuButton31\",\n\t\"CalendarContextMenuButton32\",\n\t\"CalendarContextMenuButton4\",\n\t\"CalendarContextMenuButton5\",\n\t\"CalendarContextMenuButton6\",\n\t\"CalendarContextMenuButton7\",\n\t\"CalendarContextMenuButton8\",\n\t\"CalendarContextMenuButton9\",\n\t\"CalendarCreateEventAMPMDropDown\",\n\t\"CalendarCreateEventAMPMDropDownButton\",\n\t\"CalendarCreateEventAutoApproveCheck\",\n\t\"CalendarCreateEventCloseButton\",\n\t\"CalendarCreateEventCreateButton\",\n\t\"CalendarCreateEventDescriptionContainer\",\n\t\"CalendarCreateEventDescriptionEdit\",\n\t\"CalendarCreateEventDescriptionScrollFrame\",\n\t\"CalendarCreateEventDescriptionScrollFrameFocusButton\",\n\t\"CalendarCreateEventDescriptionScrollFrameScrollBar\",\n\t\"CalendarCreateEventDescriptionScrollFrameScrollBarScrollDownButton\",\n\t\"CalendarCreateEventDescriptionScrollFrameScrollBarScrollUpButton\",\n\t\"CalendarCreateEventFrame\",\n\t\"CalendarCreateEventFrameModalOverlay\",\n\t\"CalendarCreateEventHourDropDown\",\n\t\"CalendarCreateEventHourDropDownButton\",\n\t\"CalendarCreateEventInviteButton\",\n\t\"CalendarCreateEventInviteEdit\",\n\t\"CalendarCreateEventInviteList\",\n\t\"CalendarCreateEventInviteListClassSortButton\",\n\t\"CalendarCreateEventInviteListNameSortButton\",\n\t\"CalendarCreateEventInviteListScrollFrame\",\n\t\"CalendarCreateEventInviteListScrollFrameScrollBar\",\n\t\"CalendarCreateEventInviteListScrollFrameScrollBarScrollDownButton\",\n\t\"CalendarCreateEventInviteListScrollFrameScrollBarScrollUpButton\",\n\t\"CalendarCreateEventInviteListScrollFrameScrollChild\",\n\t\"CalendarCreateEventInviteListSection\",\n\t\"CalendarCreateEventInviteListStatusSortButton\",\n\t\"CalendarCreateEventLockEventCheck\",\n\t\"CalendarCreateEventMassInviteButton\",\n\t\"CalendarCreateEventMinuteDropDown\",\n\t\"CalendarCreateEventMinuteDropDownButton\",\n\t\"CalendarCreateEventRaidInviteButton\",\n\t\"CalendarCreateEventRepeatOptionDropDown\",\n\t\"CalendarCreateEventRepeatOptionDropDownButton\",\n\t\"CalendarCreateEventTitleEdit\",\n\t\"CalendarCreateEventTitleFrame\",\n\t\"CalendarCreateEventTypeDropDown\",\n\t\"CalendarCreateEventTypeDropDownButton\",\n\t\"CalendarDayButton1\",\n\t\"CalendarDayButton10\",\n\t\"CalendarDayButton10DarkFrame\",\n\t\"CalendarDayButton10DateFrame\",\n\t\"CalendarDayButton10EventButton1\",\n\t\"CalendarDayButton10EventButton2\",\n\t\"CalendarDayButton10EventButton3\",\n\t\"CalendarDayButton10EventButton4\",\n\t\"CalendarDayButton10MoreEventsButton\",\n\t\"CalendarDayButton10OverlayFrame\",\n\t\"CalendarDayButton11\",\n\t\"CalendarDayButton11DarkFrame\",\n\t\"CalendarDayButton11DateFrame\",\n\t\"CalendarDayButton11EventButton1\",\n\t\"CalendarDayButton11EventButton2\",\n\t\"CalendarDayButton11EventButton3\",\n\t\"CalendarDayButton11EventButton4\",\n\t\"CalendarDayButton11MoreEventsButton\",\n\t\"CalendarDayButton11OverlayFrame\",\n\t\"CalendarDayButton12\",\n\t\"CalendarDayButton12DarkFrame\",\n\t\"CalendarDayButton12DateFrame\",\n\t\"CalendarDayButton12EventButton1\",\n\t\"CalendarDayButton12EventButton2\",\n\t\"CalendarDayButton12EventButton3\",\n\t\"CalendarDayButton12EventButton4\",\n\t\"CalendarDayButton12MoreEventsButton\",\n\t\"CalendarDayButton12OverlayFrame\",\n\t\"CalendarDayButton13\",\n\t\"CalendarDayButton13DarkFrame\",\n\t\"CalendarDayButton13DateFrame\",\n\t\"CalendarDayButton13EventButton1\",\n\t\"CalendarDayButton13EventButton2\",\n\t\"CalendarDayButton13EventButton3\",\n\t\"CalendarDayButton13EventButton4\",\n\t\"CalendarDayButton13MoreEventsButton\",\n\t\"CalendarDayButton13OverlayFrame\",\n\t\"CalendarDayButton14\",\n\t\"CalendarDayButton14DarkFrame\",\n\t\"CalendarDayButton14DateFrame\",\n\t\"CalendarDayButton14EventButton1\",\n\t\"CalendarDayButton14EventButton2\",\n\t\"CalendarDayButton14EventButton3\",\n\t\"CalendarDayButton14EventButton4\",\n\t\"CalendarDayButton14MoreEventsButton\",\n\t\"CalendarDayButton14OverlayFrame\",\n\t\"CalendarDayButton15\",\n\t\"CalendarDayButton15DarkFrame\",\n\t\"CalendarDayButton15DateFrame\",\n\t\"CalendarDayButton15EventButton1\",\n\t\"CalendarDayButton15EventButton2\",\n\t\"CalendarDayButton15EventButton3\",\n\t\"CalendarDayButton15EventButton4\",\n\t\"CalendarDayButton15MoreEventsButton\",\n\t\"CalendarDayButton15OverlayFrame\",\n\t\"CalendarDayButton16\",\n\t\"CalendarDayButton16DarkFrame\",\n\t\"CalendarDayButton16DateFrame\",\n\t\"CalendarDayButton16EventButton1\",\n\t\"CalendarDayButton16EventButton2\",\n\t\"CalendarDayButton16EventButton3\",\n\t\"CalendarDayButton16EventButton4\",\n\t\"CalendarDayButton16MoreEventsButton\",\n\t\"CalendarDayButton16OverlayFrame\",\n\t\"CalendarDayButton17\",\n\t\"CalendarDayButton17DarkFrame\",\n\t\"CalendarDayButton17DateFrame\",\n\t\"CalendarDayButton17EventButton1\",\n\t\"CalendarDayButton17EventButton2\",\n\t\"CalendarDayButton17EventButton3\",\n\t\"CalendarDayButton17EventButton4\",\n\t\"CalendarDayButton17MoreEventsButton\",\n\t\"CalendarDayButton17OverlayFrame\",\n\t\"CalendarDayButton18\",\n\t\"CalendarDayButton18DarkFrame\",\n\t\"CalendarDayButton18DateFrame\",\n\t\"CalendarDayButton18EventButton1\",\n\t\"CalendarDayButton18EventButton2\",\n\t\"CalendarDayButton18EventButton3\",\n\t\"CalendarDayButton18EventButton4\",\n\t\"CalendarDayButton18MoreEventsButton\",\n\t\"CalendarDayButton18OverlayFrame\",\n\t\"CalendarDayButton19\",\n\t\"CalendarDayButton19DarkFrame\",\n\t\"CalendarDayButton19DateFrame\",\n\t\"CalendarDayButton19EventButton1\",\n\t\"CalendarDayButton19EventButton2\",\n\t\"CalendarDayButton19EventButton3\",\n\t\"CalendarDayButton19EventButton4\",\n\t\"CalendarDayButton19MoreEventsButton\",\n\t\"CalendarDayButton19OverlayFrame\",\n\t\"CalendarDayButton1DarkFrame\",\n\t\"CalendarDayButton1DateFrame\",\n\t\"CalendarDayButton1EventButton1\",\n\t\"CalendarDayButton1EventButton2\",\n\t\"CalendarDayButton1EventButton3\",\n\t\"CalendarDayButton1EventButton4\",\n\t\"CalendarDayButton1MoreEventsButton\",\n\t\"CalendarDayButton1OverlayFrame\",\n\t\"CalendarDayButton2\",\n\t\"CalendarDayButton20\",\n\t\"CalendarDayButton20DarkFrame\",\n\t\"CalendarDayButton20DateFrame\",\n\t\"CalendarDayButton20EventButton1\",\n\t\"CalendarDayButton20EventButton2\",\n\t\"CalendarDayButton20EventButton3\",\n\t\"CalendarDayButton20EventButton4\",\n\t\"CalendarDayButton20MoreEventsButton\",\n\t\"CalendarDayButton20OverlayFrame\",\n\t\"CalendarDayButton21\",\n\t\"CalendarDayButton21DarkFrame\",\n\t\"CalendarDayButton21DateFrame\",\n\t\"CalendarDayButton21EventButton1\",\n\t\"CalendarDayButton21EventButton2\",\n\t\"CalendarDayButton21EventButton3\",\n\t\"CalendarDayButton21EventButton4\",\n\t\"CalendarDayButton21MoreEventsButton\",\n\t\"CalendarDayButton21OverlayFrame\",\n\t\"CalendarDayButton22\",\n\t\"CalendarDayButton22DarkFrame\",\n\t\"CalendarDayButton22DateFrame\",\n\t\"CalendarDayButton22EventButton1\",\n\t\"CalendarDayButton22EventButton2\",\n\t\"CalendarDayButton22EventButton3\",\n\t\"CalendarDayButton22EventButton4\",\n\t\"CalendarDayButton22MoreEventsButton\",\n\t\"CalendarDayButton22OverlayFrame\",\n\t\"CalendarDayButton23\",\n\t\"CalendarDayButton23DarkFrame\",\n\t\"CalendarDayButton23DateFrame\",\n\t\"CalendarDayButton23EventButton1\",\n\t\"CalendarDayButton23EventButton2\",\n\t\"CalendarDayButton23EventButton3\",\n\t\"CalendarDayButton23EventButton4\",\n\t\"CalendarDayButton23MoreEventsButton\",\n\t\"CalendarDayButton23OverlayFrame\",\n\t\"CalendarDayButton24\",\n\t\"CalendarDayButton24DarkFrame\",\n\t\"CalendarDayButton24DateFrame\",\n\t\"CalendarDayButton24EventButton1\",\n\t\"CalendarDayButton24EventButton2\",\n\t\"CalendarDayButton24EventButton3\",\n\t\"CalendarDayButton24EventButton4\",\n\t\"CalendarDayButton24MoreEventsButton\",\n\t\"CalendarDayButton24OverlayFrame\",\n\t\"CalendarDayButton25\",\n\t\"CalendarDayButton25DarkFrame\",\n\t\"CalendarDayButton25DateFrame\",\n\t\"CalendarDayButton25EventButton1\",\n\t\"CalendarDayButton25EventButton2\",\n\t\"CalendarDayButton25EventButton3\",\n\t\"CalendarDayButton25EventButton4\",\n\t\"CalendarDayButton25MoreEventsButton\",\n\t\"CalendarDayButton25OverlayFrame\",\n\t\"CalendarDayButton26\",\n\t\"CalendarDayButton26DarkFrame\",\n\t\"CalendarDayButton26DateFrame\",\n\t\"CalendarDayButton26EventButton1\",\n\t\"CalendarDayButton26EventButton2\",\n\t\"CalendarDayButton26EventButton3\",\n\t\"CalendarDayButton26EventButton4\",\n\t\"CalendarDayButton26MoreEventsButton\",\n\t\"CalendarDayButton26OverlayFrame\",\n\t\"CalendarDayButton27\",\n\t\"CalendarDayButton27DarkFrame\",\n\t\"CalendarDayButton27DateFrame\",\n\t\"CalendarDayButton27EventButton1\",\n\t\"CalendarDayButton27EventButton2\",\n\t\"CalendarDayButton27EventButton3\",\n\t\"CalendarDayButton27EventButton4\",\n\t\"CalendarDayButton27MoreEventsButton\",\n\t\"CalendarDayButton27OverlayFrame\",\n\t\"CalendarDayButton28\",\n\t\"CalendarDayButton28DarkFrame\",\n\t\"CalendarDayButton28DateFrame\",\n\t\"CalendarDayButton28EventButton1\",\n\t\"CalendarDayButton28EventButton2\",\n\t\"CalendarDayButton28EventButton3\",\n\t\"CalendarDayButton28EventButton4\",\n\t\"CalendarDayButton28MoreEventsButton\",\n\t\"CalendarDayButton28OverlayFrame\",\n\t\"CalendarDayButton29\",\n\t\"CalendarDayButton29DarkFrame\",\n\t\"CalendarDayButton29DateFrame\",\n\t\"CalendarDayButton29EventButton1\",\n\t\"CalendarDayButton29EventButton2\",\n\t\"CalendarDayButton29EventButton3\",\n\t\"CalendarDayButton29EventButton4\",\n\t\"CalendarDayButton29MoreEventsButton\",\n\t\"CalendarDayButton29OverlayFrame\",\n\t\"CalendarDayButton2DarkFrame\",\n\t\"CalendarDayButton2DateFrame\",\n\t\"CalendarDayButton2EventButton1\",\n\t\"CalendarDayButton2EventButton2\",\n\t\"CalendarDayButton2EventButton3\",\n\t\"CalendarDayButton2EventButton4\",\n\t\"CalendarDayButton2MoreEventsButton\",\n\t\"CalendarDayButton2OverlayFrame\",\n\t\"CalendarDayButton3\",\n\t\"CalendarDayButton30\",\n\t\"CalendarDayButton30DarkFrame\",\n\t\"CalendarDayButton30DateFrame\",\n\t\"CalendarDayButton30EventButton1\",\n\t\"CalendarDayButton30EventButton2\",\n\t\"CalendarDayButton30EventButton3\",\n\t\"CalendarDayButton30EventButton4\",\n\t\"CalendarDayButton30MoreEventsButton\",\n\t\"CalendarDayButton30OverlayFrame\",\n\t\"CalendarDayButton31\",\n\t\"CalendarDayButton31DarkFrame\",\n\t\"CalendarDayButton31DateFrame\",\n\t\"CalendarDayButton31EventButton1\",\n\t\"CalendarDayButton31EventButton2\",\n\t\"CalendarDayButton31EventButton3\",\n\t\"CalendarDayButton31EventButton4\",\n\t\"CalendarDayButton31MoreEventsButton\",\n\t\"CalendarDayButton31OverlayFrame\",\n\t\"CalendarDayButton32\",\n\t\"CalendarDayButton32DarkFrame\",\n\t\"CalendarDayButton32DateFrame\",\n\t\"CalendarDayButton32EventButton1\",\n\t\"CalendarDayButton32EventButton2\",\n\t\"CalendarDayButton32EventButton3\",\n\t\"CalendarDayButton32EventButton4\",\n\t\"CalendarDayButton32MoreEventsButton\",\n\t\"CalendarDayButton32OverlayFrame\",\n\t\"CalendarDayButton33\",\n\t\"CalendarDayButton33DarkFrame\",\n\t\"CalendarDayButton33DateFrame\",\n\t\"CalendarDayButton33EventButton1\",\n\t\"CalendarDayButton33EventButton2\",\n\t\"CalendarDayButton33EventButton3\",\n\t\"CalendarDayButton33EventButton4\",\n\t\"CalendarDayButton33MoreEventsButton\",\n\t\"CalendarDayButton33OverlayFrame\",\n\t\"CalendarDayButton34\",\n\t\"CalendarDayButton34DarkFrame\",\n\t\"CalendarDayButton34DateFrame\",\n\t\"CalendarDayButton34EventButton1\",\n\t\"CalendarDayButton34EventButton2\",\n\t\"CalendarDayButton34EventButton3\",\n\t\"CalendarDayButton34EventButton4\",\n\t\"CalendarDayButton34MoreEventsButton\",\n\t\"CalendarDayButton34OverlayFrame\",\n\t\"CalendarDayButton35\",\n\t\"CalendarDayButton35DarkFrame\",\n\t\"CalendarDayButton35DateFrame\",\n\t\"CalendarDayButton35EventButton1\",\n\t\"CalendarDayButton35EventButton2\",\n\t\"CalendarDayButton35EventButton3\",\n\t\"CalendarDayButton35EventButton4\",\n\t\"CalendarDayButton35MoreEventsButton\",\n\t\"CalendarDayButton35OverlayFrame\",\n\t\"CalendarDayButton36\",\n\t\"CalendarDayButton36DarkFrame\",\n\t\"CalendarDayButton36DateFrame\",\n\t\"CalendarDayButton36EventButton1\",\n\t\"CalendarDayButton36EventButton2\",\n\t\"CalendarDayButton36EventButton3\",\n\t\"CalendarDayButton36EventButton4\",\n\t\"CalendarDayButton36MoreEventsButton\",\n\t\"CalendarDayButton36OverlayFrame\",\n\t\"CalendarDayButton37\",\n\t\"CalendarDayButton37DarkFrame\",\n\t\"CalendarDayButton37DateFrame\",\n\t\"CalendarDayButton37EventButton1\",\n\t\"CalendarDayButton37EventButton2\",\n\t\"CalendarDayButton37EventButton3\",\n\t\"CalendarDayButton37EventButton4\",\n\t\"CalendarDayButton37MoreEventsButton\",\n\t\"CalendarDayButton37OverlayFrame\",\n\t\"CalendarDayButton38\",\n\t\"CalendarDayButton38DarkFrame\",\n\t\"CalendarDayButton38DateFrame\",\n\t\"CalendarDayButton38EventButton1\",\n\t\"CalendarDayButton38EventButton2\",\n\t\"CalendarDayButton38EventButton3\",\n\t\"CalendarDayButton38EventButton4\",\n\t\"CalendarDayButton38MoreEventsButton\",\n\t\"CalendarDayButton38OverlayFrame\",\n\t\"CalendarDayButton39\",\n\t\"CalendarDayButton39DarkFrame\",\n\t\"CalendarDayButton39DateFrame\",\n\t\"CalendarDayButton39EventButton1\",\n\t\"CalendarDayButton39EventButton2\",\n\t\"CalendarDayButton39EventButton3\",\n\t\"CalendarDayButton39EventButton4\",\n\t\"CalendarDayButton39MoreEventsButton\",\n\t\"CalendarDayButton39OverlayFrame\",\n\t\"CalendarDayButton3DarkFrame\",\n\t\"CalendarDayButton3DateFrame\",\n\t\"CalendarDayButton3EventButton1\",\n\t\"CalendarDayButton3EventButton2\",\n\t\"CalendarDayButton3EventButton3\",\n\t\"CalendarDayButton3EventButton4\",\n\t\"CalendarDayButton3MoreEventsButton\",\n\t\"CalendarDayButton3OverlayFrame\",\n\t\"CalendarDayButton4\",\n\t\"CalendarDayButton40\",\n\t\"CalendarDayButton40DarkFrame\",\n\t\"CalendarDayButton40DateFrame\",\n\t\"CalendarDayButton40EventButton1\",\n\t\"CalendarDayButton40EventButton2\",\n\t\"CalendarDayButton40EventButton3\",\n\t\"CalendarDayButton40EventButton4\",\n\t\"CalendarDayButton40MoreEventsButton\",\n\t\"CalendarDayButton40OverlayFrame\",\n\t\"CalendarDayButton41\",\n\t\"CalendarDayButton41DarkFrame\",\n\t\"CalendarDayButton41DateFrame\",\n\t\"CalendarDayButton41EventButton1\",\n\t\"CalendarDayButton41EventButton2\",\n\t\"CalendarDayButton41EventButton3\",\n\t\"CalendarDayButton41EventButton4\",\n\t\"CalendarDayButton41MoreEventsButton\",\n\t\"CalendarDayButton41OverlayFrame\",\n\t\"CalendarDayButton42\",\n\t\"CalendarDayButton42DarkFrame\",\n\t\"CalendarDayButton42DateFrame\",\n\t\"CalendarDayButton42EventButton1\",\n\t\"CalendarDayButton42EventButton2\",\n\t\"CalendarDayButton42EventButton3\",\n\t\"CalendarDayButton42EventButton4\",\n\t\"CalendarDayButton42MoreEventsButton\",\n\t\"CalendarDayButton42OverlayFrame\",\n\t\"CalendarDayButton4DarkFrame\",\n\t\"CalendarDayButton4DateFrame\",\n\t\"CalendarDayButton4EventButton1\",\n\t\"CalendarDayButton4EventButton2\",\n\t\"CalendarDayButton4EventButton3\",\n\t\"CalendarDayButton4EventButton4\",\n\t\"CalendarDayButton4MoreEventsButton\",\n\t\"CalendarDayButton4OverlayFrame\",\n\t\"CalendarDayButton5\",\n\t\"CalendarDayButton5DarkFrame\",\n\t\"CalendarDayButton5DateFrame\",\n\t\"CalendarDayButton5EventButton1\",\n\t\"CalendarDayButton5EventButton2\",\n\t\"CalendarDayButton5EventButton3\",\n\t\"CalendarDayButton5EventButton4\",\n\t\"CalendarDayButton5MoreEventsButton\",\n\t\"CalendarDayButton5OverlayFrame\",\n\t\"CalendarDayButton6\",\n\t\"CalendarDayButton6DarkFrame\",\n\t\"CalendarDayButton6DateFrame\",\n\t\"CalendarDayButton6EventButton1\",\n\t\"CalendarDayButton6EventButton2\",\n\t\"CalendarDayButton6EventButton3\",\n\t\"CalendarDayButton6EventButton4\",\n\t\"CalendarDayButton6MoreEventsButton\",\n\t\"CalendarDayButton6OverlayFrame\",\n\t\"CalendarDayButton7\",\n\t\"CalendarDayButton7DarkFrame\",\n\t\"CalendarDayButton7DateFrame\",\n\t\"CalendarDayButton7EventButton1\",\n\t\"CalendarDayButton7EventButton2\",\n\t\"CalendarDayButton7EventButton3\",\n\t\"CalendarDayButton7EventButton4\",\n\t\"CalendarDayButton7MoreEventsButton\",\n\t\"CalendarDayButton7OverlayFrame\",\n\t\"CalendarDayButton8\",\n\t\"CalendarDayButton8DarkFrame\",\n\t\"CalendarDayButton8DateFrame\",\n\t\"CalendarDayButton8EventButton1\",\n\t\"CalendarDayButton8EventButton2\",\n\t\"CalendarDayButton8EventButton3\",\n\t\"CalendarDayButton8EventButton4\",\n\t\"CalendarDayButton8MoreEventsButton\",\n\t\"CalendarDayButton8OverlayFrame\",\n\t\"CalendarDayButton9\",\n\t\"CalendarDayButton9DarkFrame\",\n\t\"CalendarDayButton9DateFrame\",\n\t\"CalendarDayButton9EventButton1\",\n\t\"CalendarDayButton9EventButton2\",\n\t\"CalendarDayButton9EventButton3\",\n\t\"CalendarDayButton9EventButton4\",\n\t\"CalendarDayButton9MoreEventsButton\",\n\t\"CalendarDayButton9OverlayFrame\",\n\t\"CalendarEventFrameBlocker\",\n\t\"CalendarEventPickerCloseButton\",\n\t\"CalendarEventPickerFrame\",\n\t\"CalendarEventPickerScrollBar\",\n\t\"CalendarEventPickerScrollBarScrollDownButton\",\n\t\"CalendarEventPickerScrollBarScrollUpButton\",\n\t\"CalendarEventPickerScrollFrame\",\n\t\"CalendarEventPickerScrollFrameScrollChild\",\n\t\"CalendarEventPickerTitleFrame\",\n\t\"CalendarFilterButton\",\n\t\"CalendarFilterDropDown\",\n\t\"CalendarFilterDropDownButton\",\n\t\"CalendarFilterFrame\",\n\t\"CalendarFrame\",\n\t\"CalendarFrameBlocker\",\n\t\"CalendarFrameModalOverlay\",\n\t\"CalendarInviteStatusContextMenu\",\n\t\"CalendarInviteStatusContextMenuButton1\",\n\t\"CalendarInviteStatusContextMenuButton10\",\n\t\"CalendarInviteStatusContextMenuButton11\",\n\t\"CalendarInviteStatusContextMenuButton12\",\n\t\"CalendarInviteStatusContextMenuButton13\",\n\t\"CalendarInviteStatusContextMenuButton14\",\n\t\"CalendarInviteStatusContextMenuButton15\",\n\t\"CalendarInviteStatusContextMenuButton16\",\n\t\"CalendarInviteStatusContextMenuButton17\",\n\t\"CalendarInviteStatusContextMenuButton18\",\n\t\"CalendarInviteStatusContextMenuButton19\",\n\t\"CalendarInviteStatusContextMenuButton2\",\n\t\"CalendarInviteStatusContextMenuButton20\",\n\t\"CalendarInviteStatusContextMenuButton21\",\n\t\"CalendarInviteStatusContextMenuButton22\",\n\t\"CalendarInviteStatusContextMenuButton23\",\n\t\"CalendarInviteStatusContextMenuButton24\",\n\t\"CalendarInviteStatusContextMenuButton25\",\n\t\"CalendarInviteStatusContextMenuButton26\",\n\t\"CalendarInviteStatusContextMenuButton27\",\n\t\"CalendarInviteStatusContextMenuButton28\",\n\t\"CalendarInviteStatusContextMenuButton29\",\n\t\"CalendarInviteStatusContextMenuButton3\",\n\t\"CalendarInviteStatusContextMenuButton30\",\n\t\"CalendarInviteStatusContextMenuButton31\",\n\t\"CalendarInviteStatusContextMenuButton32\",\n\t\"CalendarInviteStatusContextMenuButton4\",\n\t\"CalendarInviteStatusContextMenuButton5\",\n\t\"CalendarInviteStatusContextMenuButton6\",\n\t\"CalendarInviteStatusContextMenuButton7\",\n\t\"CalendarInviteStatusContextMenuButton8\",\n\t\"CalendarInviteStatusContextMenuButton9\",\n\t\"CalendarMassInviteArenaButton2\",\n\t\"CalendarMassInviteArenaButton3\",\n\t\"CalendarMassInviteArenaButton5\",\n\t\"CalendarMassInviteCloseButton\",\n\t\"CalendarMassInviteFrame\",\n\t\"CalendarMassInviteFrameModalOverlay\",\n\t\"CalendarMassInviteGuildAcceptButton\",\n\t\"CalendarMassInviteGuildMaxLevelEdit\",\n\t\"CalendarMassInviteGuildMinLevelEdit\",\n\t\"CalendarMassInviteGuildRankMenu\",\n\t\"CalendarMassInviteGuildRankMenuButton\",\n\t\"CalendarMassInviteTitleFrame\",\n\t\"CalendarModalDummy\",\n\t\"CalendarNextMonthButton\",\n\t\"CalendarPrevMonthButton\",\n\t\"CalendarTexturePickerAcceptButton\",\n\t\"CalendarTexturePickerCancelButton\",\n\t\"CalendarTexturePickerFrame\",\n\t\"CalendarTexturePickerScrollBar\",\n\t\"CalendarTexturePickerScrollBarScrollDownButton\",\n\t\"CalendarTexturePickerScrollBarScrollUpButton\",\n\t\"CalendarTexturePickerScrollFrame\",\n\t\"CalendarTexturePickerScrollFrameButton1\",\n\t\"CalendarTexturePickerScrollFrameButton10\",\n\t\"CalendarTexturePickerScrollFrameButton11\",\n\t\"CalendarTexturePickerScrollFrameButton12\",\n\t\"CalendarTexturePickerScrollFrameButton13\",\n\t\"CalendarTexturePickerScrollFrameButton14\",\n\t\"CalendarTexturePickerScrollFrameButton15\",\n\t\"CalendarTexturePickerScrollFrameButton16\",\n\t\"CalendarTexturePickerScrollFrameButton2\",\n\t\"CalendarTexturePickerScrollFrameButton3\",\n\t\"CalendarTexturePickerScrollFrameButton4\",\n\t\"CalendarTexturePickerScrollFrameButton5\",\n\t\"CalendarTexturePickerScrollFrameButton6\",\n\t\"CalendarTexturePickerScrollFrameButton7\",\n\t\"CalendarTexturePickerScrollFrameButton8\",\n\t\"CalendarTexturePickerScrollFrameButton9\",\n\t\"CalendarTexturePickerScrollFrameScrollChild\",\n\t\"CalendarTexturePickerTitleFrame\",\n\t\"CalendarTodayFrame\",\n\t\"CalendarViewEventAcceptButton\",\n\t\"CalendarViewEventCloseButton\",\n\t\"CalendarViewEventDeclineButton\",\n\t\"CalendarViewEventDescriptionContainer\",\n\t\"CalendarViewEventDescriptionScrollChild\",\n\t\"CalendarViewEventDescriptionScrollFrame\",\n\t\"CalendarViewEventDescriptionScrollFrameScrollBar\",\n\t\"CalendarViewEventDescriptionScrollFrameScrollBarScrollDownButton\",\n\t\"CalendarViewEventDescriptionScrollFrameScrollBarScrollUpButton\",\n\t\"CalendarViewEventFrame\",\n\t\"CalendarViewEventFrameModalOverlay\",\n\t\"CalendarViewEventInviteList\",\n\t\"CalendarViewEventInviteListClassSortButton\",\n\t\"CalendarViewEventInviteListNameSortButton\",\n\t\"CalendarViewEventInviteListScrollFrame\",\n\t\"CalendarViewEventInviteListScrollFrameScrollBar\",\n\t\"CalendarViewEventInviteListScrollFrameScrollBarScrollDownButton\",\n\t\"CalendarViewEventInviteListScrollFrameScrollBarScrollUpButton\",\n\t\"CalendarViewEventInviteListScrollFrameScrollChild\",\n\t\"CalendarViewEventInviteListSection\",\n\t\"CalendarViewEventInviteListStatusSortButton\",\n\t\"CalendarViewEventRemoveButton\",\n\t\"CalendarViewEventTentativeButton\",\n\t\"CalendarViewEventTitleFrame\",\n\t\"CalendarViewHolidayCloseButton\",\n\t\"CalendarViewHolidayFrame\",\n\t\"CalendarViewHolidayFrameModalOverlay\",\n\t\"CalendarViewHolidayScrollChild\",\n\t\"CalendarViewHolidayScrollFrame\",\n\t\"CalendarViewHolidayScrollFrameScrollBar\",\n\t\"CalendarViewHolidayScrollFrameScrollBarScrollDownButton\",\n\t\"CalendarViewHolidayScrollFrameScrollBarScrollUpButton\",\n\t\"CalendarViewHolidayTitleFrame\",\n\t\"CalendarViewRaidCloseButton\",\n\t\"CalendarViewRaidFrame\",\n\t\"CalendarViewRaidFrameModalOverlay\",\n\t\"CalendarViewRaidScrollChild\",\n\t\"CalendarViewRaidScrollFrame\",\n\t\"CalendarViewRaidScrollFrameScrollBar\",\n\t\"CalendarViewRaidScrollFrameScrollBarScrollDownButton\",\n\t\"CalendarViewRaidScrollFrameScrollBarScrollUpButton\",\n\t\"CalendarViewRaidTitleFrame\",\n\t-- frames: Blizzard_Calendar\n\t\"CalendarFrame\",\n\t\"CalendarTodayFrame\",\n\t\"CalendarPrevMonthButton\",\n\t\"CalendarNextMonthButton\",\n\t\"CalendarFilterFrame\",\n\t\"CalendarFilterButton\",\n\t\"CalendarFilterDropDown\",\n\t\"CalendarFilterDropDownButton\",\n\t\"CalendarCloseButton\",\n\t\"CalendarContextMenu\",\n\t\"CalendarContextMenuButton1\",\n\t\"CalendarContextMenuButton2\",\n\t\"CalendarContextMenuButton3\",\n\t\"CalendarContextMenuButton4\",\n\t\"CalendarContextMenuButton5\",\n\t\"CalendarContextMenuButton6\",\n\t\"CalendarContextMenuButton7\",\n\t\"CalendarContextMenuButton8\",\n\t\"CalendarContextMenuButton9\",\n\t\"CalendarContextMenuButton10\",\n\t\"CalendarContextMenuButton11\",\n\t\"CalendarContextMenuButton12\",\n\t\"CalendarContextMenuButton13\",\n\t\"CalendarContextMenuButton14\",\n\t\"CalendarContextMenuButton15\",\n\t\"CalendarContextMenuButton16\",\n\t\"CalendarContextMenuButton17\",\n\t\"CalendarContextMenuButton18\",\n\t\"CalendarContextMenuButton19\",\n\t\"CalendarContextMenuButton20\",\n\t\"CalendarContextMenuButton21\",\n\t\"CalendarContextMenuButton22\",\n\t\"CalendarContextMenuButton23\",\n\t\"CalendarContextMenuButton24\",\n\t\"CalendarContextMenuButton25\",\n\t\"CalendarContextMenuButton26\",\n\t\"CalendarContextMenuButton27\",\n\t\"CalendarContextMenuButton28\",\n\t\"CalendarContextMenuButton29\",\n\t\"CalendarContextMenuButton30\",\n\t\"CalendarContextMenuButton31\",\n\t\"CalendarContextMenuButton32\",\n\t\"CalendarArenaTeamContextMenu\",\n\t\"CalendarArenaTeamContextMenuButton1\",\n\t\"CalendarArenaTeamContextMenuButton2\",\n\t\"CalendarArenaTeamContextMenuButton3\",\n\t\"CalendarArenaTeamContextMenuButton4\",\n\t\"CalendarArenaTeamContextMenuButton5\",\n\t\"CalendarArenaTeamContextMenuButton6\",\n\t\"CalendarArenaTeamContextMenuButton7\",\n\t\"CalendarArenaTeamContextMenuButton8\",\n\t\"CalendarArenaTeamContextMenuButton9\",\n\t\"CalendarArenaTeamContextMenuButton10\",\n\t\"CalendarArenaTeamContextMenuButton11\",\n\t\"CalendarArenaTeamContextMenuButton12\",\n\t\"CalendarArenaTeamContextMenuButton13\",\n\t\"CalendarArenaTeamContextMenuButton14\",\n\t\"CalendarArenaTeamContextMenuButton15\",\n\t\"CalendarArenaTeamContextMenuButton16\",\n\t\"CalendarArenaTeamContextMenuButton17\",\n\t\"CalendarArenaTeamContextMenuButton18\",\n\t\"CalendarArenaTeamContextMenuButton19\",\n\t\"CalendarArenaTeamContextMenuButton20\",\n\t\"CalendarArenaTeamContextMenuButton21\",\n\t\"CalendarArenaTeamContextMenuButton22\",\n\t\"CalendarArenaTeamContextMenuButton23\",\n\t\"CalendarArenaTeamContextMenuButton24\",\n\t\"CalendarArenaTeamContextMenuButton25\",\n\t\"CalendarArenaTeamContextMenuButton26\",\n\t\"CalendarArenaTeamContextMenuButton27\",\n\t\"CalendarArenaTeamContextMenuButton28\",\n\t\"CalendarArenaTeamContextMenuButton29\",\n\t\"CalendarArenaTeamContextMenuButton30\",\n\t\"CalendarArenaTeamContextMenuButton31\",\n\t\"CalendarArenaTeamContextMenuButton32\",\n\t\"CalendarInviteStatusContextMenu\",\n\t\"CalendarInviteStatusContextMenuButton1\",\n\t\"CalendarInviteStatusContextMenuButton2\",\n\t\"CalendarInviteStatusContextMenuButton3\",\n\t\"CalendarInviteStatusContextMenuButton4\",\n\t\"CalendarInviteStatusContextMenuButton5\",\n\t\"CalendarInviteStatusContextMenuButton6\",\n\t\"CalendarInviteStatusContextMenuButton7\",\n\t\"CalendarInviteStatusContextMenuButton8\",\n\t\"CalendarInviteStatusContextMenuButton9\",\n\t\"CalendarInviteStatusContextMenuButton10\",\n\t\"CalendarInviteStatusContextMenuButton11\",\n\t\"CalendarInviteStatusContextMenuButton12\",\n\t\"CalendarInviteStatusContextMenuButton13\",\n\t\"CalendarInviteStatusContextMenuButton14\",\n\t\"CalendarInviteStatusContextMenuButton15\",\n\t\"CalendarInviteStatusContextMenuButton16\",\n\t\"CalendarInviteStatusContextMenuButton17\",\n\t\"CalendarInviteStatusContextMenuButton18\",\n\t\"CalendarInviteStatusContextMenuButton19\",\n\t\"CalendarInviteStatusContextMenuButton20\",\n\t\"CalendarInviteStatusContextMenuButton21\",\n\t\"CalendarInviteStatusContextMenuButton22\",\n\t\"CalendarInviteStatusContextMenuButton23\",\n\t\"CalendarInviteStatusContextMenuButton24\",\n\t\"CalendarInviteStatusContextMenuButton25\",\n\t\"CalendarInviteStatusContextMenuButton26\",\n\t\"CalendarInviteStatusContextMenuButton27\",\n\t\"CalendarInviteStatusContextMenuButton28\",\n\t\"CalendarInviteStatusContextMenuButton29\",\n\t\"CalendarInviteStatusContextMenuButton30\",\n\t\"CalendarInviteStatusContextMenuButton31\",\n\t\"CalendarInviteStatusContextMenuButton32\",\n\t\"CalendarModalDummy\",\n\t\"CalendarFrameBlocker\",\n\t\"CalendarEventFrameBlocker\",\n\t\"CalendarFrameModalOverlay\",\n\t\"CalendarDayButton1\",\n\t\"CalendarDayButton1OverlayFrame\",\n\t\"CalendarDayButton1DateFrame\",\n\t\"CalendarDayButton1MoreEventsButton\",\n\t\"CalendarDayButton1DarkFrame\",\n\t\"CalendarDayButton1EventButton1\",\n\t\"CalendarDayButton1EventButton2\",\n\t\"CalendarDayButton1EventButton3\",\n\t\"CalendarDayButton1EventButton4\",\n\t\"CalendarDayButton2\",\n\t\"CalendarDayButton2OverlayFrame\",\n\t\"CalendarDayButton2DateFrame\",\n\t\"CalendarDayButton2MoreEventsButton\",\n\t\"CalendarDayButton2DarkFrame\",\n\t\"CalendarDayButton2EventButton1\",\n\t\"CalendarDayButton2EventButton2\",\n\t\"CalendarDayButton2EventButton3\",\n\t\"CalendarDayButton2EventButton4\",\n\t\"CalendarDayButton3\",\n\t\"CalendarDayButton3OverlayFrame\",\n\t\"CalendarDayButton3DateFrame\",\n\t\"CalendarDayButton3MoreEventsButton\",\n\t\"CalendarDayButton3DarkFrame\",\n\t\"CalendarDayButton3EventButton1\",\n\t\"CalendarDayButton3EventButton2\",\n\t\"CalendarDayButton3EventButton3\",\n\t\"CalendarDayButton3EventButton4\",\n\t\"CalendarDayButton4\",\n\t\"CalendarDayButton4OverlayFrame\",\n\t\"CalendarDayButton4DateFrame\",\n\t\"CalendarDayButton4MoreEventsButton\",\n\t\"CalendarDayButton4DarkFrame\",\n\t\"CalendarDayButton4EventButton1\",\n\t\"CalendarDayButton4EventButton2\",\n\t\"CalendarDayButton4EventButton3\",\n\t\"CalendarDayButton4EventButton4\",\n\t\"CalendarDayButton5\",\n\t\"CalendarDayButton5OverlayFrame\",\n\t\"CalendarDayButton5DateFrame\",\n\t\"CalendarDayButton5MoreEventsButton\",\n\t\"CalendarDayButton5DarkFrame\",\n\t\"CalendarDayButton5EventButton1\",\n\t\"CalendarDayButton5EventButton2\",\n\t\"CalendarDayButton5EventButton3\",\n\t\"CalendarDayButton5EventButton4\",\n\t\"CalendarDayButton6\",\n\t\"CalendarDayButton6OverlayFrame\",\n\t\"CalendarDayButton6DateFrame\",\n\t\"CalendarDayButton6MoreEventsButton\",\n\t\"CalendarDayButton6DarkFrame\",\n\t\"CalendarDayButton6EventButton1\",\n\t\"CalendarDayButton6EventButton2\",\n\t\"CalendarDayButton6EventButton3\",\n\t\"CalendarDayButton6EventButton4\",\n\t\"CalendarDayButton7\",\n\t\"CalendarDayButton7OverlayFrame\",\n\t\"CalendarDayButton7DateFrame\",\n\t\"CalendarDayButton7MoreEventsButton\",\n\t\"CalendarDayButton7DarkFrame\",\n\t\"CalendarDayButton7EventButton1\",\n\t\"CalendarDayButton7EventButton2\",\n\t\"CalendarDayButton7EventButton3\",\n\t\"CalendarDayButton7EventButton4\",\n\t\"CalendarDayButton8\",\n\t\"CalendarDayButton8OverlayFrame\",\n\t\"CalendarDayButton8DateFrame\",\n\t\"CalendarDayButton8MoreEventsButton\",\n\t\"CalendarDayButton8DarkFrame\",\n\t\"CalendarDayButton8EventButton1\",\n\t\"CalendarDayButton8EventButton2\",\n\t\"CalendarDayButton8EventButton3\",\n\t\"CalendarDayButton8EventButton4\",\n\t\"CalendarDayButton9\",\n\t\"CalendarDayButton9OverlayFrame\",\n\t\"CalendarDayButton9DateFrame\",\n\t\"CalendarDayButton9MoreEventsButton\",\n\t\"CalendarDayButton9DarkFrame\",\n\t\"CalendarDayButton9EventButton1\",\n\t\"CalendarDayButton9EventButton2\",\n\t\"CalendarDayButton9EventButton3\",\n\t\"CalendarDayButton9EventButton4\",\n\t\"CalendarDayButton10\",\n\t\"CalendarDayButton10OverlayFrame\",\n\t\"CalendarDayButton10DateFrame\",\n\t\"CalendarDayButton10MoreEventsButton\",\n\t\"CalendarDayButton10DarkFrame\",\n\t\"CalendarDayButton10EventButton1\",\n\t\"CalendarDayButton10EventButton2\",\n\t\"CalendarDayButton10EventButton3\",\n\t\"CalendarDayButton10EventButton4\",\n\t\"CalendarDayButton11\",\n\t\"CalendarDayButton11OverlayFrame\",\n\t\"CalendarDayButton11DateFrame\",\n\t\"CalendarDayButton11MoreEventsButton\",\n\t\"CalendarDayButton11DarkFrame\",\n\t\"CalendarDayButton11EventButton1\",\n\t\"CalendarDayButton11EventButton2\",\n\t\"CalendarDayButton11EventButton3\",\n\t\"CalendarDayButton11EventButton4\",\n\t\"CalendarDayButton12\",\n\t\"CalendarDayButton12OverlayFrame\",\n\t\"CalendarDayButton12DateFrame\",\n\t\"CalendarDayButton12MoreEventsButton\",\n\t\"CalendarDayButton12DarkFrame\",\n\t\"CalendarDayButton12EventButton1\",\n\t\"CalendarDayButton12EventButton2\",\n\t\"CalendarDayButton12EventButton3\",\n\t\"CalendarDayButton12EventButton4\",\n\t\"CalendarDayButton13\",\n\t\"CalendarDayButton13OverlayFrame\",\n\t\"CalendarDayButton13DateFrame\",\n\t\"CalendarDayButton13MoreEventsButton\",\n\t\"CalendarDayButton13DarkFrame\",\n\t\"CalendarDayButton13EventButton1\",\n\t\"CalendarDayButton13EventButton2\",\n\t\"CalendarDayButton13EventButton3\",\n\t\"CalendarDayButton13EventButton4\",\n\t\"CalendarDayButton14\",\n\t\"CalendarDayButton14OverlayFrame\",\n\t\"CalendarDayButton14DateFrame\",\n\t\"CalendarDayButton14MoreEventsButton\",\n\t\"CalendarDayButton14DarkFrame\",\n\t\"CalendarDayButton14EventButton1\",\n\t\"CalendarDayButton14EventButton2\",\n\t\"CalendarDayButton14EventButton3\",\n\t\"CalendarDayButton14EventButton4\",\n\t\"CalendarDayButton15\",\n\t\"CalendarDayButton15OverlayFrame\",\n\t\"CalendarDayButton15DateFrame\",\n\t\"CalendarDayButton15MoreEventsButton\",\n\t\"CalendarDayButton15DarkFrame\",\n\t\"CalendarDayButton15EventButton1\",\n\t\"CalendarDayButton15EventButton2\",\n\t\"CalendarDayButton15EventButton3\",\n\t\"CalendarDayButton15EventButton4\",\n\t\"CalendarDayButton16\",\n\t\"CalendarDayButton16OverlayFrame\",\n\t\"CalendarDayButton16DateFrame\",\n\t\"CalendarDayButton16MoreEventsButton\",\n\t\"CalendarDayButton16DarkFrame\",\n\t\"CalendarDayButton16EventButton1\",\n\t\"CalendarDayButton16EventButton2\",\n\t\"CalendarDayButton16EventButton3\",\n\t\"CalendarDayButton16EventButton4\",\n\t\"CalendarDayButton17\",\n\t\"CalendarDayButton17OverlayFrame\",\n\t\"CalendarDayButton17DateFrame\",\n\t\"CalendarDayButton17MoreEventsButton\",\n\t\"CalendarDayButton17DarkFrame\",\n\t\"CalendarDayButton17EventButton1\",\n\t\"CalendarDayButton17EventButton2\",\n\t\"CalendarDayButton17EventButton3\",\n\t\"CalendarDayButton17EventButton4\",\n\t\"CalendarDayButton18\",\n\t\"CalendarDayButton18OverlayFrame\",\n\t\"CalendarDayButton18DateFrame\",\n\t\"CalendarDayButton18MoreEventsButton\",\n\t\"CalendarDayButton18DarkFrame\",\n\t\"CalendarDayButton18EventButton1\",\n\t\"CalendarDayButton18EventButton2\",\n\t\"CalendarDayButton18EventButton3\",\n\t\"CalendarDayButton18EventButton4\",\n\t\"CalendarDayButton19\",\n\t\"CalendarDayButton19OverlayFrame\",\n\t\"CalendarDayButton19DateFrame\",\n\t\"CalendarDayButton19MoreEventsButton\",\n\t\"CalendarDayButton19DarkFrame\",\n\t\"CalendarDayButton19EventButton1\",\n\t\"CalendarDayButton19EventButton2\",\n\t\"CalendarDayButton19EventButton3\",\n\t\"CalendarDayButton19EventButton4\",\n\t\"CalendarDayButton20\",\n\t\"CalendarDayButton20OverlayFrame\",\n\t\"CalendarDayButton20DateFrame\",\n\t\"CalendarDayButton20MoreEventsButton\",\n\t\"CalendarDayButton20DarkFrame\",\n\t\"CalendarDayButton20EventButton1\",\n\t\"CalendarDayButton20EventButton2\",\n\t\"CalendarDayButton20EventButton3\",\n\t\"CalendarDayButton20EventButton4\",\n\t\"CalendarDayButton21\",\n\t\"CalendarDayButton21OverlayFrame\",\n\t\"CalendarDayButton21DateFrame\",\n\t\"CalendarDayButton21MoreEventsButton\",\n\t\"CalendarDayButton21DarkFrame\",\n\t\"CalendarDayButton21EventButton1\",\n\t\"CalendarDayButton21EventButton2\",\n\t\"CalendarDayButton21EventButton3\",\n\t\"CalendarDayButton21EventButton4\",\n\t\"CalendarDayButton22\",\n\t\"CalendarDayButton22OverlayFrame\",\n\t\"CalendarDayButton22DateFrame\",\n\t\"CalendarDayButton22MoreEventsButton\",\n\t\"CalendarDayButton22DarkFrame\",\n\t\"CalendarDayButton22EventButton1\",\n\t\"CalendarDayButton22EventButton2\",\n\t\"CalendarDayButton22EventButton3\",\n\t\"CalendarDayButton22EventButton4\",\n\t\"CalendarDayButton23\",\n\t\"CalendarDayButton23OverlayFrame\",\n\t\"CalendarDayButton23DateFrame\",\n\t\"CalendarDayButton23MoreEventsButton\",\n\t\"CalendarDayButton23DarkFrame\",\n\t\"CalendarDayButton23EventButton1\",\n\t\"CalendarDayButton23EventButton2\",\n\t\"CalendarDayButton23EventButton3\",\n\t\"CalendarDayButton23EventButton4\",\n\t\"CalendarDayButton24\",\n\t\"CalendarDayButton24OverlayFrame\",\n\t\"CalendarDayButton24DateFrame\",\n\t\"CalendarDayButton24MoreEventsButton\",\n\t\"CalendarDayButton24DarkFrame\",\n\t\"CalendarDayButton24EventButton1\",\n\t\"CalendarDayButton24EventButton2\",\n\t\"CalendarDayButton24EventButton3\",\n\t\"CalendarDayButton24EventButton4\",\n\t\"CalendarDayButton25\",\n\t\"CalendarDayButton25OverlayFrame\",\n\t\"CalendarDayButton25DateFrame\",\n\t\"CalendarDayButton25MoreEventsButton\",\n\t\"CalendarDayButton25DarkFrame\",\n\t\"CalendarDayButton25EventButton1\",\n\t\"CalendarDayButton25EventButton2\",\n\t\"CalendarDayButton25EventButton3\",\n\t\"CalendarDayButton25EventButton4\",\n\t\"CalendarDayButton26\",\n\t\"CalendarDayButton26OverlayFrame\",\n\t\"CalendarDayButton26DateFrame\",\n\t\"CalendarDayButton26MoreEventsButton\",\n\t\"CalendarDayButton26DarkFrame\",\n\t\"CalendarDayButton26EventButton1\",\n\t\"CalendarDayButton26EventButton2\",\n\t\"CalendarDayButton26EventButton3\",\n\t\"CalendarDayButton26EventButton4\",\n\t\"CalendarDayButton27\",\n\t\"CalendarDayButton27OverlayFrame\",\n\t\"CalendarDayButton27DateFrame\",\n\t\"CalendarDayButton27MoreEventsButton\",\n\t\"CalendarDayButton27DarkFrame\",\n\t\"CalendarDayButton27EventButton1\",\n\t\"CalendarDayButton27EventButton2\",\n\t\"CalendarDayButton27EventButton3\",\n\t\"CalendarDayButton27EventButton4\",\n\t\"CalendarDayButton28\",\n\t\"CalendarDayButton28OverlayFrame\",\n\t\"CalendarDayButton28DateFrame\",\n\t\"CalendarDayButton28MoreEventsButton\",\n\t\"CalendarDayButton28DarkFrame\",\n\t\"CalendarDayButton28EventButton1\",\n\t\"CalendarDayButton28EventButton2\",\n\t\"CalendarDayButton28EventButton3\",\n\t\"CalendarDayButton28EventButton4\",\n\t\"CalendarDayButton29\",\n\t\"CalendarDayButton29OverlayFrame\",\n\t\"CalendarDayButton29DateFrame\",\n\t\"CalendarDayButton29MoreEventsButton\",\n\t\"CalendarDayButton29DarkFrame\",\n\t\"CalendarDayButton29EventButton1\",\n\t\"CalendarDayButton29EventButton2\",\n\t\"CalendarDayButton29EventButton3\",\n\t\"CalendarDayButton29EventButton4\",\n\t\"CalendarDayButton30\",\n\t\"CalendarDayButton30OverlayFrame\",\n\t\"CalendarDayButton30DateFrame\",\n\t\"CalendarDayButton30MoreEventsButton\",\n\t\"CalendarDayButton30DarkFrame\",\n\t\"CalendarDayButton30EventButton1\",\n\t\"CalendarDayButton30EventButton2\",\n\t\"CalendarDayButton30EventButton3\",\n\t\"CalendarDayButton30EventButton4\",\n\t\"CalendarDayButton31\",\n\t\"CalendarDayButton31OverlayFrame\",\n\t\"CalendarDayButton31DateFrame\",\n\t\"CalendarDayButton31MoreEventsButton\",\n\t\"CalendarDayButton31DarkFrame\",\n\t\"CalendarDayButton31EventButton1\",\n\t\"CalendarDayButton31EventButton2\",\n\t\"CalendarDayButton31EventButton3\",\n\t\"CalendarDayButton31EventButton4\",\n\t\"CalendarDayButton32\",\n\t\"CalendarDayButton32OverlayFrame\",\n\t\"CalendarDayButton32DateFrame\",\n\t\"CalendarDayButton32MoreEventsButton\",\n\t\"CalendarDayButton32DarkFrame\",\n\t\"CalendarDayButton32EventButton1\",\n\t\"CalendarDayButton32EventButton2\",\n\t\"CalendarDayButton32EventButton3\",\n\t\"CalendarDayButton32EventButton4\",\n\t\"CalendarDayButton33\",\n\t\"CalendarDayButton33OverlayFrame\",\n\t\"CalendarDayButton33DateFrame\",\n\t\"CalendarDayButton33MoreEventsButton\",\n\t\"CalendarDayButton33DarkFrame\",\n\t\"CalendarDayButton33EventButton1\",\n\t\"CalendarDayButton33EventButton2\",\n\t\"CalendarDayButton33EventButton3\",\n\t\"CalendarDayButton33EventButton4\",\n\t\"CalendarDayButton34\",\n\t\"CalendarDayButton34OverlayFrame\",\n\t\"CalendarDayButton34DateFrame\",\n\t\"CalendarDayButton34MoreEventsButton\",\n\t\"CalendarDayButton34DarkFrame\",\n\t\"CalendarDayButton34EventButton1\",\n\t\"CalendarDayButton34EventButton2\",\n\t\"CalendarDayButton34EventButton3\",\n\t\"CalendarDayButton34EventButton4\",\n\t\"CalendarDayButton35\",\n\t\"CalendarDayButton35OverlayFrame\",\n\t\"CalendarDayButton35DateFrame\",\n\t\"CalendarDayButton35MoreEventsButton\",\n\t\"CalendarDayButton35DarkFrame\",\n\t\"CalendarDayButton35EventButton1\",\n\t\"CalendarDayButton35EventButton2\",\n\t\"CalendarDayButton35EventButton3\",\n\t\"CalendarDayButton35EventButton4\",\n\t\"CalendarDayButton36\",\n\t\"CalendarDayButton36OverlayFrame\",\n\t\"CalendarDayButton36DateFrame\",\n\t\"CalendarDayButton36MoreEventsButton\",\n\t\"CalendarDayButton36DarkFrame\",\n\t\"CalendarDayButton36EventButton1\",\n\t\"CalendarDayButton36EventButton2\",\n\t\"CalendarDayButton36EventButton3\",\n\t\"CalendarDayButton36EventButton4\",\n\t\"CalendarDayButton37\",\n\t\"CalendarDayButton37OverlayFrame\",\n\t\"CalendarDayButton37DateFrame\",\n\t\"CalendarDayButton37MoreEventsButton\",\n\t\"CalendarDayButton37DarkFrame\",\n\t\"CalendarDayButton37EventButton1\",\n\t\"CalendarDayButton37EventButton2\",\n\t\"CalendarDayButton37EventButton3\",\n\t\"CalendarDayButton37EventButton4\",\n\t\"CalendarDayButton38\",\n\t\"CalendarDayButton38OverlayFrame\",\n\t\"CalendarDayButton38DateFrame\",\n\t\"CalendarDayButton38MoreEventsButton\",\n\t\"CalendarDayButton38DarkFrame\",\n\t\"CalendarDayButton38EventButton1\",\n\t\"CalendarDayButton38EventButton2\",\n\t\"CalendarDayButton38EventButton3\",\n\t\"CalendarDayButton38EventButton4\",\n\t\"CalendarDayButton39\",\n\t\"CalendarDayButton39OverlayFrame\",\n\t\"CalendarDayButton39DateFrame\",\n\t\"CalendarDayButton39MoreEventsButton\",\n\t\"CalendarDayButton39DarkFrame\",\n\t\"CalendarDayButton39EventButton1\",\n\t\"CalendarDayButton39EventButton2\",\n\t\"CalendarDayButton39EventButton3\",\n\t\"CalendarDayButton39EventButton4\",\n\t\"CalendarDayButton40\",\n\t\"CalendarDayButton40OverlayFrame\",\n\t\"CalendarDayButton40DateFrame\",\n\t\"CalendarDayButton40MoreEventsButton\",\n\t\"CalendarDayButton40DarkFrame\",\n\t\"CalendarDayButton40EventButton1\",\n\t\"CalendarDayButton40EventButton2\",\n\t\"CalendarDayButton40EventButton3\",\n\t\"CalendarDayButton40EventButton4\",\n\t\"CalendarDayButton41\",\n\t\"CalendarDayButton41OverlayFrame\",\n\t\"CalendarDayButton41DateFrame\",\n\t\"CalendarDayButton41MoreEventsButton\",\n\t\"CalendarDayButton41DarkFrame\",\n\t\"CalendarDayButton41EventButton1\",\n\t\"CalendarDayButton41EventButton2\",\n\t\"CalendarDayButton41EventButton3\",\n\t\"CalendarDayButton41EventButton4\",\n\t\"CalendarDayButton42\",\n\t\"CalendarDayButton42OverlayFrame\",\n\t\"CalendarDayButton42DateFrame\",\n\t\"CalendarDayButton42MoreEventsButton\",\n\t\"CalendarDayButton42DarkFrame\",\n\t\"CalendarDayButton42EventButton1\",\n\t\"CalendarDayButton42EventButton2\",\n\t\"CalendarDayButton42EventButton3\",\n\t\"CalendarDayButton42EventButton4\",\n\t\"CalendarViewHolidayFrame\",\n\t\"CalendarViewHolidayTitleFrame\",\n\t\"CalendarViewHolidayScrollFrame\",\n\t\"CalendarViewHolidayScrollChild\",\n\t\"CalendarViewHolidayScrollFrameScrollBar\",\n\t\"CalendarViewHolidayScrollFrameScrollBarScrollUpButton\",\n\t\"CalendarViewHolidayScrollFrameScrollBarScrollDownButton\",\n\t\"CalendarViewHolidayCloseButton\",\n\t\"CalendarViewHolidayFrameModalOverlay\",\n\t\"CalendarViewRaidFrame\",\n\t\"CalendarViewRaidTitleFrame\",\n\t\"CalendarViewRaidScrollFrame\",\n\t\"CalendarViewRaidScrollChild\",\n\t\"CalendarViewRaidScrollFrameScrollBar\",\n\t\"CalendarViewRaidScrollFrameScrollBarScrollUpButton\",\n\t\"CalendarViewRaidScrollFrameScrollBarScrollDownButton\",\n\t\"CalendarViewRaidCloseButton\",\n\t\"CalendarViewRaidFrameModalOverlay\",\n\t\"CalendarViewEventFrame\",\n\t\"CalendarViewEventTitleFrame\",\n\t\"CalendarViewEventDescriptionContainer\",\n\t\"CalendarViewEventDescriptionScrollFrame\",\n\t\"CalendarViewEventDescriptionScrollChild\",\n\t\"CalendarViewEventDescriptionScrollFrameScrollBar\",\n\t\"CalendarViewEventDescriptionScrollFrameScrollBarScrollUpButton\",\n\t\"CalendarViewEventDescriptionScrollFrameScrollBarScrollDownButton\",\n\t\"CalendarViewEventInviteListSection\",\n\t\"CalendarViewEventAcceptButton\",\n\t\"CalendarViewEventTentativeButton\",\n\t\"CalendarViewEventDeclineButton\",\n\t\"CalendarViewEventRemoveButton\",\n\t\"CalendarViewEventInviteList\",\n\t\"CalendarViewEventInviteListScrollFrame\",\n\t\"CalendarViewEventInviteListScrollFrameScrollChild\",\n\t\"CalendarViewEventInviteListScrollFrameScrollBar\",\n\t\"CalendarViewEventInviteListScrollFrameScrollBarScrollUpButton\",\n\t\"CalendarViewEventInviteListScrollFrameScrollBarScrollDownButton\",\n\t\"CalendarViewEventInviteListNameSortButton\",\n\t\"CalendarViewEventInviteListClassSortButton\",\n\t\"CalendarViewEventInviteListStatusSortButton\",\n\t\"CalendarViewEventCloseButton\",\n\t\"CalendarViewEventFrameModalOverlay\",\n\t\"CalendarCreateEventFrame\",\n\t\"CalendarCreateEventTitleFrame\",\n\t\"CalendarCreateEventTitleEdit\",\n\t\"CalendarCreateEventTypeDropDown\",\n\t\"CalendarCreateEventTypeDropDownButton\",\n\t\"CalendarCreateEventHourDropDown\",\n\t\"CalendarCreateEventHourDropDownButton\",\n\t\"CalendarCreateEventMinuteDropDown\",\n\t\"CalendarCreateEventMinuteDropDownButton\",\n\t\"CalendarCreateEventAMPMDropDown\",\n\t\"CalendarCreateEventAMPMDropDownButton\",\n\t\"CalendarCreateEventRepeatOptionDropDown\",\n\t\"CalendarCreateEventRepeatOptionDropDownButton\",\n\t\"CalendarCreateEventDescriptionContainer\",\n\t\"CalendarCreateEventDescriptionScrollFrame\",\n\t\"CalendarCreateEventDescriptionEdit\",\n\t\"CalendarCreateEventDescriptionScrollFrameScrollBar\",\n\t\"CalendarCreateEventDescriptionScrollFrameScrollBarScrollUpButton\",\n\t\"CalendarCreateEventDescriptionScrollFrameScrollBarScrollDownButton\",\n\t\"CalendarCreateEventDescriptionScrollFrameFocusButton\",\n\t\"CalendarCreateEventInviteListSection\",\n\t\"CalendarCreateEventAutoApproveCheck\",\n\t\"CalendarCreateEventLockEventCheck\",\n\t\"CalendarCreateEventInviteList\",\n\t\"CalendarCreateEventInviteListScrollFrame\",\n\t\"CalendarCreateEventInviteListScrollFrameScrollChild\",\n\t\"CalendarCreateEventInviteListScrollFrameScrollBar\",\n\t\"CalendarCreateEventInviteListScrollFrameScrollBarScrollUpButton\",\n\t\"CalendarCreateEventInviteListScrollFrameScrollBarScrollDownButton\",\n\t\"CalendarCreateEventInviteListNameSortButton\",\n\t\"CalendarCreateEventInviteListClassSortButton\",\n\t\"CalendarCreateEventInviteListStatusSortButton\",\n\t\"CalendarCreateEventInviteEdit\",\n\t\"CalendarCreateEventInviteButton\",\n\t\"CalendarCreateEventMassInviteButton\",\n\t\"CalendarCreateEventRaidInviteButton\",\n\t\"CalendarCreateEventCreateButton\",\n\t\"CalendarCreateEventCloseButton\",\n\t\"CalendarCreateEventFrameModalOverlay\",\n\t\"CalendarMassInviteFrame\",\n\t\"CalendarMassInviteTitleFrame\",\n\t\"CalendarMassInviteGuildMinLevelEdit\",\n\t\"CalendarMassInviteGuildMaxLevelEdit\",\n\t\"CalendarMassInviteGuildRankMenu\",\n\t\"CalendarMassInviteGuildRankMenuButton\",\n\t\"CalendarMassInviteGuildAcceptButton\",\n\t\"CalendarMassInviteArenaButton2\",\n\t\"CalendarMassInviteArenaButton3\",\n\t\"CalendarMassInviteArenaButton5\",\n\t\"CalendarMassInviteCloseButton\",\n\t\"CalendarMassInviteFrameModalOverlay\",\n\t\"CalendarEventPickerFrame\",\n\t\"CalendarEventPickerTitleFrame\",\n\t\"CalendarEventPickerScrollFrame\",\n\t\"CalendarEventPickerScrollFrameScrollChild\",\n\t\"CalendarEventPickerScrollBar\",\n\t\"CalendarEventPickerScrollBarScrollUpButton\",\n\t\"CalendarEventPickerScrollBarScrollDownButton\",\n\t\"CalendarEventPickerCloseButton\",\n\t\"CalendarTexturePickerFrame\",\n\t\"CalendarTexturePickerTitleFrame\",\n\t\"CalendarTexturePickerScrollFrame\",\n\t\"CalendarTexturePickerScrollFrameScrollChild\",\n\t\"CalendarTexturePickerScrollBar\",\n\t\"CalendarTexturePickerScrollBarScrollUpButton\",\n\t\"CalendarTexturePickerScrollBarScrollDownButton\",\n\t\"CalendarTexturePickerCancelButton\",\n\t\"CalendarTexturePickerAcceptButton\",\n\t\"CalendarTexturePickerScrollFrameButton1\",\n\t\"CalendarTexturePickerScrollFrameButton2\",\n\t\"CalendarTexturePickerScrollFrameButton3\",\n\t\"CalendarTexturePickerScrollFrameButton4\",\n\t\"CalendarTexturePickerScrollFrameButton5\",\n\t\"CalendarTexturePickerScrollFrameButton6\",\n\t\"CalendarTexturePickerScrollFrameButton7\",\n\t\"CalendarTexturePickerScrollFrameButton8\",\n\t\"CalendarTexturePickerScrollFrameButton9\",\n\t\"CalendarTexturePickerScrollFrameButton10\",\n\t\"CalendarTexturePickerScrollFrameButton11\",\n\t\"CalendarTexturePickerScrollFrameButton12\",\n\t\"CalendarTexturePickerScrollFrameButton13\",\n\t\"CalendarTexturePickerScrollFrameButton14\",\n\t\"CalendarTexturePickerScrollFrameButton15\",\n\t\"CalendarTexturePickerScrollFrameButton16\",\n\t\"CalendarClassButtonContainer\",\n\t\"CalendarClassTotalsButton\",\n\t\"CalendarClassButton1\",\n\t\"CalendarClassButton2\",\n\t\"CalendarClassButton3\",\n\t\"CalendarClassButton4\",\n\t\"CalendarClassButton5\",\n\t\"CalendarClassButton6\",\n\t\"CalendarClassButton7\",\n\t\"CalendarClassButton8\",\n\t\"CalendarClassButton9\",\n\t\"CalendarClassButton10\",\n\t-- widgets: Blizzard_Calendar\n\t\"CalendarArenaTeamContextMenuButton10ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton11ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton12ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton13ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton14ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton15ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton16ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton17ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton18ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton19ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton1ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton20ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton21ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton22ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton23ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton24ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton25ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton26ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton27ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton28ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton29ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton2ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton30ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton31ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton32ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton3ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton4ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton5ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton6ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton7ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton8ShortcutText\",\n\t\"CalendarArenaTeamContextMenuButton9ShortcutText\",\n\t\"CalendarClassButton10Count\",\n\t\"CalendarClassButton1Count\",\n\t\"CalendarClassButton2Count\",\n\t\"CalendarClassButton3Count\",\n\t\"CalendarClassButton4Count\",\n\t\"CalendarClassButton5Count\",\n\t\"CalendarClassButton6Count\",\n\t\"CalendarClassButton7Count\",\n\t\"CalendarClassButton8Count\",\n\t\"CalendarClassButton9Count\",\n\t\"CalendarClassTotalsButtonBackgroundBottom\",\n\t\"CalendarClassTotalsButtonBackgroundMiddle\",\n\t\"CalendarClassTotalsButtonBackgroundTop\",\n\t\"CalendarClassTotalsText\",\n\t\"CalendarContextMenuButton10ShortcutText\",\n\t\"CalendarContextMenuButton11ShortcutText\",\n\t\"CalendarContextMenuButton12ShortcutText\",\n\t\"CalendarContextMenuButton13ShortcutText\",\n\t\"CalendarContextMenuButton14ShortcutText\",\n\t\"CalendarContextMenuButton15ShortcutText\",\n\t\"CalendarContextMenuButton16ShortcutText\",\n\t\"CalendarContextMenuButton17ShortcutText\",\n\t\"CalendarContextMenuButton18ShortcutText\",\n\t\"CalendarContextMenuButton19ShortcutText\",\n\t\"CalendarContextMenuButton1ShortcutText\",\n\t\"CalendarContextMenuButton20ShortcutText\",\n\t\"CalendarContextMenuButton21ShortcutText\",\n\t\"CalendarContextMenuButton22ShortcutText\",\n\t\"CalendarContextMenuButton23ShortcutText\",\n\t\"CalendarContextMenuButton24ShortcutText\",\n\t\"CalendarContextMenuButton25ShortcutText\",\n\t\"CalendarContextMenuButton26ShortcutText\",\n\t\"CalendarContextMenuButton27ShortcutText\",\n\t\"CalendarContextMenuButton28ShortcutText\",\n\t\"CalendarContextMenuButton29ShortcutText\",\n\t\"CalendarContextMenuButton2ShortcutText\",\n\t\"CalendarContextMenuButton30ShortcutText\",\n\t\"CalendarContextMenuButton31ShortcutText\",\n\t\"CalendarContextMenuButton32ShortcutText\",\n\t\"CalendarContextMenuButton3ShortcutText\",\n\t\"CalendarContextMenuButton4ShortcutText\",\n\t\"CalendarContextMenuButton5ShortcutText\",\n\t\"CalendarContextMenuButton6ShortcutText\",\n\t\"CalendarContextMenuButton7ShortcutText\",\n\t\"CalendarContextMenuButton8ShortcutText\",\n\t\"CalendarContextMenuButton9ShortcutText\",\n\t\"CalendarCreateEventAMPMDropDownButtonDisabledTexture\",\n\t\"CalendarCreateEventAMPMDropDownButtonHighlightTexture\",\n\t\"CalendarCreateEventAMPMDropDownButtonNormalTexture\",\n\t\"CalendarCreateEventAMPMDropDownButtonPushedTexture\",\n\t\"CalendarCreateEventAMPMDropDownLeft\",\n\t\"CalendarCreateEventAMPMDropDownMiddle\",\n\t\"CalendarCreateEventAMPMDropDownRight\",\n\t\"CalendarCreateEventAMPMDropDownText\",\n\t\"CalendarCreateEventAutoApproveCheckText\",\n\t\"CalendarCreateEventBackground\",\n\t\"CalendarCreateEventCreateButtonBorder\",\n\t\"CalendarCreateEventCreateButtonLeft\",\n\t\"CalendarCreateEventCreateButtonMiddle\",\n\t\"CalendarCreateEventCreateButtonRight\",\n\t\"CalendarCreateEventCreateButtonText\",\n\t\"CalendarCreateEventCreatorName\",\n\t\"CalendarCreateEventDateLabel\",\n\t\"CalendarCreateEventDescriptionScrollFrameScrollBarThumbTexture\",\n\t\"CalendarCreateEventDivider\",\n\t\"CalendarCreateEventFrameButtonBackground\",\n\t\"CalendarCreateEventHourDropDownButtonDisabledTexture\",\n\t\"CalendarCreateEventHourDropDownButtonHighlightTexture\",\n\t\"CalendarCreateEventHourDropDownButtonNormalTexture\",\n\t\"CalendarCreateEventHourDropDownButtonPushedTexture\",\n\t\"CalendarCreateEventHourDropDownLeft\",\n\t\"CalendarCreateEventHourDropDownMiddle\",\n\t\"CalendarCreateEventHourDropDownRight\",\n\t\"CalendarCreateEventHourDropDownText\",\n\t\"CalendarCreateEventIcon\",\n\t\"CalendarCreateEventInviteButtonLeft\",\n\t\"CalendarCreateEventInviteButtonMiddle\",\n\t\"CalendarCreateEventInviteButtonRight\",\n\t\"CalendarCreateEventInviteButtonText\",\n\t\"CalendarCreateEventInviteEditLeft\",\n\t\"CalendarCreateEventInviteEditMiddle\",\n\t\"CalendarCreateEventInviteEditRight\",\n\t\"CalendarCreateEventInviteListClassSortButtonDirection\",\n\t\"CalendarCreateEventInviteListNameSortButtonDirection\",\n\t\"CalendarCreateEventInviteListScrollFrameScrollBarBG\",\n\t\"CalendarCreateEventInviteListScrollFrameScrollBarBottom\",\n\t\"CalendarCreateEventInviteListScrollFrameScrollBarMiddle\",\n\t\"CalendarCreateEventInviteListScrollFrameScrollBarThumbTexture\",\n\t\"CalendarCreateEventInviteListScrollFrameScrollBarTop\",\n\t\"CalendarCreateEventInviteListStatusSortButtonDirection\",\n\t\"CalendarCreateEventLockEventCheckText\",\n\t\"CalendarCreateEventMassInviteButtonBorder\",\n\t\"CalendarCreateEventMassInviteButtonLeft\",\n\t\"CalendarCreateEventMassInviteButtonMiddle\",\n\t\"CalendarCreateEventMassInviteButtonRight\",\n\t\"CalendarCreateEventMassInviteButtonText\",\n\t\"CalendarCreateEventMinuteDropDownButtonDisabledTexture\",\n\t\"CalendarCreateEventMinuteDropDownButtonHighlightTexture\",\n\t\"CalendarCreateEventMinuteDropDownButtonNormalTexture\",\n\t\"CalendarCreateEventMinuteDropDownButtonPushedTexture\",\n\t\"CalendarCreateEventMinuteDropDownLeft\",\n\t\"CalendarCreateEventMinuteDropDownMiddle\",\n\t\"CalendarCreateEventMinuteDropDownRight\",\n\t\"CalendarCreateEventMinuteDropDownText\",\n\t\"CalendarCreateEventRaidInviteButtonBorder\",\n\t\"CalendarCreateEventRaidInviteButtonLeft\",\n\t\"CalendarCreateEventRaidInviteButtonMiddle\",\n\t\"CalendarCreateEventRaidInviteButtonRight\",\n\t\"CalendarCreateEventRaidInviteButtonText\",\n\t\"CalendarCreateEventRepeatOptionDropDownButtonDisabledTexture\",\n\t\"CalendarCreateEventRepeatOptionDropDownButtonHighlightTexture\",\n\t\"CalendarCreateEventRepeatOptionDropDownButtonNormalTexture\",\n\t\"CalendarCreateEventRepeatOptionDropDownButtonPushedTexture\",\n\t\"CalendarCreateEventRepeatOptionDropDownLeft\",\n\t\"CalendarCreateEventRepeatOptionDropDownMiddle\",\n\t\"CalendarCreateEventRepeatOptionDropDownRight\",\n\t\"CalendarCreateEventRepeatOptionDropDownText\",\n\t\"CalendarCreateEventTextureName\",\n\t\"CalendarCreateEventTitleEditLeft\",\n\t\"CalendarCreateEventTitleEditMiddle\",\n\t\"CalendarCreateEventTitleEditRight\",\n\t\"CalendarCreateEventTitleFrameBackgroundLeft\",\n\t\"CalendarCreateEventTitleFrameBackgroundMiddle\",\n\t\"CalendarCreateEventTitleFrameBackgroundRight\",\n\t\"CalendarCreateEventTitleFrameText\",\n\t\"CalendarCreateEventTypeDropDownButtonDisabledTexture\",\n\t\"CalendarCreateEventTypeDropDownButtonHighlightTexture\",\n\t\"CalendarCreateEventTypeDropDownButtonNormalTexture\",\n\t\"CalendarCreateEventTypeDropDownButtonPushedTexture\",\n\t\"CalendarCreateEventTypeDropDownLeft\",\n\t\"CalendarCreateEventTypeDropDownMiddle\",\n\t\"CalendarCreateEventTypeDropDownRight\",\n\t\"CalendarCreateEventTypeDropDownText\",\n\t\"CalendarDayButton10DarkFrameBottom\",\n\t\"CalendarDayButton10DarkFrameTop\",\n\t\"CalendarDayButton10DateFrameBackground\",\n\t\"CalendarDayButton10DateFrameDate\",\n\t\"CalendarDayButton10EventBackgroundTexture\",\n\t\"CalendarDayButton10EventButton1Black\",\n\t\"CalendarDayButton10EventButton1Text1\",\n\t\"CalendarDayButton10EventButton1Text2\",\n\t\"CalendarDayButton10EventButton2Black\",\n\t\"CalendarDayButton10EventButton2Text1\",\n\t\"CalendarDayButton10EventButton2Text2\",\n\t\"CalendarDayButton10EventButton3Black\",\n\t\"CalendarDayButton10EventButton3Text1\",\n\t\"CalendarDayButton10EventButton3Text2\",\n\t\"CalendarDayButton10EventButton4Black\",\n\t\"CalendarDayButton10EventButton4Text1\",\n\t\"CalendarDayButton10EventButton4Text2\",\n\t\"CalendarDayButton10EventTexture\",\n\t\"CalendarDayButton10OverlayFrameTexture\",\n\t\"CalendarDayButton10PendingInviteTexture\",\n\t\"CalendarDayButton11DarkFrameBottom\",\n\t\"CalendarDayButton11DarkFrameTop\",\n\t\"CalendarDayButton11DateFrameBackground\",\n\t\"CalendarDayButton11DateFrameDate\",\n\t\"CalendarDayButton11EventBackgroundTexture\",\n\t\"CalendarDayButton11EventButton1Black\",\n\t\"CalendarDayButton11EventButton1Text1\",\n\t\"CalendarDayButton11EventButton1Text2\",\n\t\"CalendarDayButton11EventButton2Black\",\n\t\"CalendarDayButton11EventButton2Text1\",\n\t\"CalendarDayButton11EventButton2Text2\",\n\t\"CalendarDayButton11EventButton3Black\",\n\t\"CalendarDayButton11EventButton3Text1\",\n\t\"CalendarDayButton11EventButton3Text2\",\n\t\"CalendarDayButton11EventButton4Black\",\n\t\"CalendarDayButton11EventButton4Text1\",\n\t\"CalendarDayButton11EventButton4Text2\",\n\t\"CalendarDayButton11EventTexture\",\n\t\"CalendarDayButton11OverlayFrameTexture\",\n\t\"CalendarDayButton11PendingInviteTexture\",\n\t\"CalendarDayButton12DarkFrameBottom\",\n\t\"CalendarDayButton12DarkFrameTop\",\n\t\"CalendarDayButton12DateFrameBackground\",\n\t\"CalendarDayButton12DateFrameDate\",\n\t\"CalendarDayButton12EventBackgroundTexture\",\n\t\"CalendarDayButton12EventButton1Black\",\n\t\"CalendarDayButton12EventButton1Text1\",\n\t\"CalendarDayButton12EventButton1Text2\",\n\t\"CalendarDayButton12EventButton2Black\",\n\t\"CalendarDayButton12EventButton2Text1\",\n\t\"CalendarDayButton12EventButton2Text2\",\n\t\"CalendarDayButton12EventButton3Black\",\n\t\"CalendarDayButton12EventButton3Text1\",\n\t\"CalendarDayButton12EventButton3Text2\",\n\t\"CalendarDayButton12EventButton4Black\",\n\t\"CalendarDayButton12EventButton4Text1\",\n\t\"CalendarDayButton12EventButton4Text2\",\n\t\"CalendarDayButton12EventTexture\",\n\t\"CalendarDayButton12OverlayFrameTexture\",\n\t\"CalendarDayButton12PendingInviteTexture\",\n\t\"CalendarDayButton13DarkFrameBottom\",\n\t\"CalendarDayButton13DarkFrameTop\",\n\t\"CalendarDayButton13DateFrameBackground\",\n\t\"CalendarDayButton13DateFrameDate\",\n\t\"CalendarDayButton13EventBackgroundTexture\",\n\t\"CalendarDayButton13EventButton1Black\",\n\t\"CalendarDayButton13EventButton1Text1\",\n\t\"CalendarDayButton13EventButton1Text2\",\n\t\"CalendarDayButton13EventButton2Black\",\n\t\"CalendarDayButton13EventButton2Text1\",\n\t\"CalendarDayButton13EventButton2Text2\",\n\t\"CalendarDayButton13EventButton3Black\",\n\t\"CalendarDayButton13EventButton3Text1\",\n\t\"CalendarDayButton13EventButton3Text2\",\n\t\"CalendarDayButton13EventButton4Black\",\n\t\"CalendarDayButton13EventButton4Text1\",\n\t\"CalendarDayButton13EventButton4Text2\",\n\t\"CalendarDayButton13EventTexture\",\n\t\"CalendarDayButton13OverlayFrameTexture\",\n\t\"CalendarDayButton13PendingInviteTexture\",\n\t\"CalendarDayButton14DarkFrameBottom\",\n\t\"CalendarDayButton14DarkFrameTop\",\n\t\"CalendarDayButton14DateFrameBackground\",\n\t\"CalendarDayButton14DateFrameDate\",\n\t\"CalendarDayButton14EventBackgroundTexture\",\n\t\"CalendarDayButton14EventButton1Black\",\n\t\"CalendarDayButton14EventButton1Text1\",\n\t\"CalendarDayButton14EventButton1Text2\",\n\t\"CalendarDayButton14EventButton2Black\",\n\t\"CalendarDayButton14EventButton2Text1\",\n\t\"CalendarDayButton14EventButton2Text2\",\n\t\"CalendarDayButton14EventButton3Black\",\n\t\"CalendarDayButton14EventButton3Text1\",\n\t\"CalendarDayButton14EventButton3Text2\",\n\t\"CalendarDayButton14EventButton4Black\",\n\t\"CalendarDayButton14EventButton4Text1\",\n\t\"CalendarDayButton14EventButton4Text2\",\n\t\"CalendarDayButton14EventTexture\",\n\t\"CalendarDayButton14OverlayFrameTexture\",\n\t\"CalendarDayButton14PendingInviteTexture\",\n\t\"CalendarDayButton15DarkFrameBottom\",\n\t\"CalendarDayButton15DarkFrameTop\",\n\t\"CalendarDayButton15DateFrameBackground\",\n\t\"CalendarDayButton15DateFrameDate\",\n\t\"CalendarDayButton15EventBackgroundTexture\",\n\t\"CalendarDayButton15EventButton1Black\",\n\t\"CalendarDayButton15EventButton1Text1\",\n\t\"CalendarDayButton15EventButton1Text2\",\n\t\"CalendarDayButton15EventButton2Black\",\n\t\"CalendarDayButton15EventButton2Text1\",\n\t\"CalendarDayButton15EventButton2Text2\",\n\t\"CalendarDayButton15EventButton3Black\",\n\t\"CalendarDayButton15EventButton3Text1\",\n\t\"CalendarDayButton15EventButton3Text2\",\n\t\"CalendarDayButton15EventButton4Black\",\n\t\"CalendarDayButton15EventButton4Text1\",\n\t\"CalendarDayButton15EventButton4Text2\",\n\t\"CalendarDayButton15EventTexture\",\n\t\"CalendarDayButton15OverlayFrameTexture\",\n\t\"CalendarDayButton15PendingInviteTexture\",\n\t\"CalendarDayButton16DarkFrameBottom\",\n\t\"CalendarDayButton16DarkFrameTop\",\n\t\"CalendarDayButton16DateFrameBackground\",\n\t\"CalendarDayButton16DateFrameDate\",\n\t\"CalendarDayButton16EventBackgroundTexture\",\n\t\"CalendarDayButton16EventButton1Black\",\n\t\"CalendarDayButton16EventButton1Text1\",\n\t\"CalendarDayButton16EventButton1Text2\",\n\t\"CalendarDayButton16EventButton2Black\",\n\t\"CalendarDayButton16EventButton2Text1\",\n\t\"CalendarDayButton16EventButton2Text2\",\n\t\"CalendarDayButton16EventButton3Black\",\n\t\"CalendarDayButton16EventButton3Text1\",\n\t\"CalendarDayButton16EventButton3Text2\",\n\t\"CalendarDayButton16EventButton4Black\",\n\t\"CalendarDayButton16EventButton4Text1\",\n\t\"CalendarDayButton16EventButton4Text2\",\n\t\"CalendarDayButton16EventTexture\",\n\t\"CalendarDayButton16OverlayFrameTexture\",\n\t\"CalendarDayButton16PendingInviteTexture\",\n\t\"CalendarDayButton17DarkFrameBottom\",\n\t\"CalendarDayButton17DarkFrameTop\",\n\t\"CalendarDayButton17DateFrameBackground\",\n\t\"CalendarDayButton17DateFrameDate\",\n\t\"CalendarDayButton17EventBackgroundTexture\",\n\t\"CalendarDayButton17EventButton1Black\",\n\t\"CalendarDayButton17EventButton1Text1\",\n\t\"CalendarDayButton17EventButton1Text2\",\n\t\"CalendarDayButton17EventButton2Black\",\n\t\"CalendarDayButton17EventButton2Text1\",\n\t\"CalendarDayButton17EventButton2Text2\",\n\t\"CalendarDayButton17EventButton3Black\",\n\t\"CalendarDayButton17EventButton3Text1\",\n\t\"CalendarDayButton17EventButton3Text2\",\n\t\"CalendarDayButton17EventButton4Black\",\n\t\"CalendarDayButton17EventButton4Text1\",\n\t\"CalendarDayButton17EventButton4Text2\",\n\t\"CalendarDayButton17EventTexture\",\n\t\"CalendarDayButton17OverlayFrameTexture\",\n\t\"CalendarDayButton17PendingInviteTexture\",\n\t\"CalendarDayButton18DarkFrameBottom\",\n\t\"CalendarDayButton18DarkFrameTop\",\n\t\"CalendarDayButton18DateFrameBackground\",\n\t\"CalendarDayButton18DateFrameDate\",\n\t\"CalendarDayButton18EventBackgroundTexture\",\n\t\"CalendarDayButton18EventButton1Black\",\n\t\"CalendarDayButton18EventButton1Text1\",\n\t\"CalendarDayButton18EventButton1Text2\",\n\t\"CalendarDayButton18EventButton2Black\",\n\t\"CalendarDayButton18EventButton2Text1\",\n\t\"CalendarDayButton18EventButton2Text2\",\n\t\"CalendarDayButton18EventButton3Black\",\n\t\"CalendarDayButton18EventButton3Text1\",\n\t\"CalendarDayButton18EventButton3Text2\",\n\t\"CalendarDayButton18EventButton4Black\",\n\t\"CalendarDayButton18EventButton4Text1\",\n\t\"CalendarDayButton18EventButton4Text2\",\n\t\"CalendarDayButton18EventTexture\",\n\t\"CalendarDayButton18OverlayFrameTexture\",\n\t\"CalendarDayButton18PendingInviteTexture\",\n\t\"CalendarDayButton19DarkFrameBottom\",\n\t\"CalendarDayButton19DarkFrameTop\",\n\t\"CalendarDayButton19DateFrameBackground\",\n\t\"CalendarDayButton19DateFrameDate\",\n\t\"CalendarDayButton19EventBackgroundTexture\",\n\t\"CalendarDayButton19EventButton1Black\",\n\t\"CalendarDayButton19EventButton1Text1\",\n\t\"CalendarDayButton19EventButton1Text2\",\n\t\"CalendarDayButton19EventButton2Black\",\n\t\"CalendarDayButton19EventButton2Text1\",\n\t\"CalendarDayButton19EventButton2Text2\",\n\t\"CalendarDayButton19EventButton3Black\",\n\t\"CalendarDayButton19EventButton3Text1\",\n\t\"CalendarDayButton19EventButton3Text2\",\n\t\"CalendarDayButton19EventButton4Black\",\n\t\"CalendarDayButton19EventButton4Text1\",\n\t\"CalendarDayButton19EventButton4Text2\",\n\t\"CalendarDayButton19EventTexture\",\n\t\"CalendarDayButton19OverlayFrameTexture\",\n\t\"CalendarDayButton19PendingInviteTexture\",\n\t\"CalendarDayButton1DarkFrameBottom\",\n\t\"CalendarDayButton1DarkFrameTop\",\n\t\"CalendarDayButton1DateFrameBackground\",\n\t\"CalendarDayButton1DateFrameDate\",\n\t\"CalendarDayButton1EventBackgroundTexture\",\n\t\"CalendarDayButton1EventButton1Black\",\n\t\"CalendarDayButton1EventButton1Text1\",\n\t\"CalendarDayButton1EventButton1Text2\",\n\t\"CalendarDayButton1EventButton2Black\",\n\t\"CalendarDayButton1EventButton2Text1\",\n\t\"CalendarDayButton1EventButton2Text2\",\n\t\"CalendarDayButton1EventButton3Black\",\n\t\"CalendarDayButton1EventButton3Text1\",\n\t\"CalendarDayButton1EventButton3Text2\",\n\t\"CalendarDayButton1EventButton4Black\",\n\t\"CalendarDayButton1EventButton4Text1\",\n\t\"CalendarDayButton1EventButton4Text2\",\n\t\"CalendarDayButton1EventTexture\",\n\t\"CalendarDayButton1OverlayFrameTexture\",\n\t\"CalendarDayButton1PendingInviteTexture\",\n\t\"CalendarDayButton20DarkFrameBottom\",\n\t\"CalendarDayButton20DarkFrameTop\",\n\t\"CalendarDayButton20DateFrameBackground\",\n\t\"CalendarDayButton20DateFrameDate\",\n\t\"CalendarDayButton20EventBackgroundTexture\",\n\t\"CalendarDayButton20EventButton1Black\",\n\t\"CalendarDayButton20EventButton1Text1\",\n\t\"CalendarDayButton20EventButton1Text2\",\n\t\"CalendarDayButton20EventButton2Black\",\n\t\"CalendarDayButton20EventButton2Text1\",\n\t\"CalendarDayButton20EventButton2Text2\",\n\t\"CalendarDayButton20EventButton3Black\",\n\t\"CalendarDayButton20EventButton3Text1\",\n\t\"CalendarDayButton20EventButton3Text2\",\n\t\"CalendarDayButton20EventButton4Black\",\n\t\"CalendarDayButton20EventButton4Text1\",\n\t\"CalendarDayButton20EventButton4Text2\",\n\t\"CalendarDayButton20EventTexture\",\n\t\"CalendarDayButton20OverlayFrameTexture\",\n\t\"CalendarDayButton20PendingInviteTexture\",\n\t\"CalendarDayButton21DarkFrameBottom\",\n\t\"CalendarDayButton21DarkFrameTop\",\n\t\"CalendarDayButton21DateFrameBackground\",\n\t\"CalendarDayButton21DateFrameDate\",\n\t\"CalendarDayButton21EventBackgroundTexture\",\n\t\"CalendarDayButton21EventButton1Black\",\n\t\"CalendarDayButton21EventButton1Text1\",\n\t\"CalendarDayButton21EventButton1Text2\",\n\t\"CalendarDayButton21EventButton2Black\",\n\t\"CalendarDayButton21EventButton2Text1\",\n\t\"CalendarDayButton21EventButton2Text2\",\n\t\"CalendarDayButton21EventButton3Black\",\n\t\"CalendarDayButton21EventButton3Text1\",\n\t\"CalendarDayButton21EventButton3Text2\",\n\t\"CalendarDayButton21EventButton4Black\",\n\t\"CalendarDayButton21EventButton4Text1\",\n\t\"CalendarDayButton21EventButton4Text2\",\n\t\"CalendarDayButton21EventTexture\",\n\t\"CalendarDayButton21OverlayFrameTexture\",\n\t\"CalendarDayButton21PendingInviteTexture\",\n\t\"CalendarDayButton22DarkFrameBottom\",\n\t\"CalendarDayButton22DarkFrameTop\",\n\t\"CalendarDayButton22DateFrameBackground\",\n\t\"CalendarDayButton22DateFrameDate\",\n\t\"CalendarDayButton22EventBackgroundTexture\",\n\t\"CalendarDayButton22EventButton1Black\",\n\t\"CalendarDayButton22EventButton1Text1\",\n\t\"CalendarDayButton22EventButton1Text2\",\n\t\"CalendarDayButton22EventButton2Black\",\n\t\"CalendarDayButton22EventButton2Text1\",\n\t\"CalendarDayButton22EventButton2Text2\",\n\t\"CalendarDayButton22EventButton3Black\",\n\t\"CalendarDayButton22EventButton3Text1\",\n\t\"CalendarDayButton22EventButton3Text2\",\n\t\"CalendarDayButton22EventButton4Black\",\n\t\"CalendarDayButton22EventButton4Text1\",\n\t\"CalendarDayButton22EventButton4Text2\",\n\t\"CalendarDayButton22EventTexture\",\n\t\"CalendarDayButton22OverlayFrameTexture\",\n\t\"CalendarDayButton22PendingInviteTexture\",\n\t\"CalendarDayButton23DarkFrameBottom\",\n\t\"CalendarDayButton23DarkFrameTop\",\n\t\"CalendarDayButton23DateFrameBackground\",\n\t\"CalendarDayButton23DateFrameDate\",\n\t\"CalendarDayButton23EventBackgroundTexture\",\n\t\"CalendarDayButton23EventButton1Black\",\n\t\"CalendarDayButton23EventButton1Text1\",\n\t\"CalendarDayButton23EventButton1Text2\",\n\t\"CalendarDayButton23EventButton2Black\",\n\t\"CalendarDayButton23EventButton2Text1\",\n\t\"CalendarDayButton23EventButton2Text2\",\n\t\"CalendarDayButton23EventButton3Black\",\n\t\"CalendarDayButton23EventButton3Text1\",\n\t\"CalendarDayButton23EventButton3Text2\",\n\t\"CalendarDayButton23EventButton4Black\",\n\t\"CalendarDayButton23EventButton4Text1\",\n\t\"CalendarDayButton23EventButton4Text2\",\n\t\"CalendarDayButton23EventTexture\",\n\t\"CalendarDayButton23OverlayFrameTexture\",\n\t\"CalendarDayButton23PendingInviteTexture\",\n\t\"CalendarDayButton24DarkFrameBottom\",\n\t\"CalendarDayButton24DarkFrameTop\",\n\t\"CalendarDayButton24DateFrameBackground\",\n\t\"CalendarDayButton24DateFrameDate\",\n\t\"CalendarDayButton24EventBackgroundTexture\",\n\t\"CalendarDayButton24EventButton1Black\",\n\t\"CalendarDayButton24EventButton1Text1\",\n\t\"CalendarDayButton24EventButton1Text2\",\n\t\"CalendarDayButton24EventButton2Black\",\n\t\"CalendarDayButton24EventButton2Text1\",\n\t\"CalendarDayButton24EventButton2Text2\",\n\t\"CalendarDayButton24EventButton3Black\",\n\t\"CalendarDayButton24EventButton3Text1\",\n\t\"CalendarDayButton24EventButton3Text2\",\n\t\"CalendarDayButton24EventButton4Black\",\n\t\"CalendarDayButton24EventButton4Text1\",\n\t\"CalendarDayButton24EventButton4Text2\",\n\t\"CalendarDayButton24EventTexture\",\n\t\"CalendarDayButton24OverlayFrameTexture\",\n\t\"CalendarDayButton24PendingInviteTexture\",\n\t\"CalendarDayButton25DarkFrameBottom\",\n\t\"CalendarDayButton25DarkFrameTop\",\n\t\"CalendarDayButton25DateFrameBackground\",\n\t\"CalendarDayButton25DateFrameDate\",\n\t\"CalendarDayButton25EventBackgroundTexture\",\n\t\"CalendarDayButton25EventButton1Black\",\n\t\"CalendarDayButton25EventButton1Text1\",\n\t\"CalendarDayButton25EventButton1Text2\",\n\t\"CalendarDayButton25EventButton2Black\",\n\t\"CalendarDayButton25EventButton2Text1\",\n\t\"CalendarDayButton25EventButton2Text2\",\n\t\"CalendarDayButton25EventButton3Black\",\n\t\"CalendarDayButton25EventButton3Text1\",\n\t\"CalendarDayButton25EventButton3Text2\",\n\t\"CalendarDayButton25EventButton4Black\",\n\t\"CalendarDayButton25EventButton4Text1\",\n\t\"CalendarDayButton25EventButton4Text2\",\n\t\"CalendarDayButton25EventTexture\",\n\t\"CalendarDayButton25OverlayFrameTexture\",\n\t\"CalendarDayButton25PendingInviteTexture\",\n\t\"CalendarDayButton26DarkFrameBottom\",\n\t\"CalendarDayButton26DarkFrameTop\",\n\t\"CalendarDayButton26DateFrameBackground\",\n\t\"CalendarDayButton26DateFrameDate\",\n\t\"CalendarDayButton26EventBackgroundTexture\",\n\t\"CalendarDayButton26EventButton1Black\",\n\t\"CalendarDayButton26EventButton1Text1\",\n\t\"CalendarDayButton26EventButton1Text2\",\n\t\"CalendarDayButton26EventButton2Black\",\n\t\"CalendarDayButton26EventButton2Text1\",\n\t\"CalendarDayButton26EventButton2Text2\",\n\t\"CalendarDayButton26EventButton3Black\",\n\t\"CalendarDayButton26EventButton3Text1\",\n\t\"CalendarDayButton26EventButton3Text2\",\n\t\"CalendarDayButton26EventButton4Black\",\n\t\"CalendarDayButton26EventButton4Text1\",\n\t\"CalendarDayButton26EventButton4Text2\",\n\t\"CalendarDayButton26EventTexture\",\n\t\"CalendarDayButton26OverlayFrameTexture\",\n\t\"CalendarDayButton26PendingInviteTexture\",\n\t\"CalendarDayButton27DarkFrameBottom\",\n\t\"CalendarDayButton27DarkFrameTop\",\n\t\"CalendarDayButton27DateFrameBackground\",\n\t\"CalendarDayButton27DateFrameDate\",\n\t\"CalendarDayButton27EventBackgroundTexture\",\n\t\"CalendarDayButton27EventButton1Black\",\n\t\"CalendarDayButton27EventButton1Text1\",\n\t\"CalendarDayButton27EventButton1Text2\",\n\t\"CalendarDayButton27EventButton2Black\",\n\t\"CalendarDayButton27EventButton2Text1\",\n\t\"CalendarDayButton27EventButton2Text2\",\n\t\"CalendarDayButton27EventButton3Black\",\n\t\"CalendarDayButton27EventButton3Text1\",\n\t\"CalendarDayButton27EventButton3Text2\",\n\t\"CalendarDayButton27EventButton4Black\",\n\t\"CalendarDayButton27EventButton4Text1\",\n\t\"CalendarDayButton27EventButton4Text2\",\n\t\"CalendarDayButton27EventTexture\",\n\t\"CalendarDayButton27OverlayFrameTexture\",\n\t\"CalendarDayButton27PendingInviteTexture\",\n\t\"CalendarDayButton28DarkFrameBottom\",\n\t\"CalendarDayButton28DarkFrameTop\",\n\t\"CalendarDayButton28DateFrameBackground\",\n\t\"CalendarDayButton28DateFrameDate\",\n\t\"CalendarDayButton28EventBackgroundTexture\",\n\t\"CalendarDayButton28EventButton1Black\",\n\t\"CalendarDayButton28EventButton1Text1\",\n\t\"CalendarDayButton28EventButton1Text2\",\n\t\"CalendarDayButton28EventButton2Black\",\n\t\"CalendarDayButton28EventButton2Text1\",\n\t\"CalendarDayButton28EventButton2Text2\",\n\t\"CalendarDayButton28EventButton3Black\",\n\t\"CalendarDayButton28EventButton3Text1\",\n\t\"CalendarDayButton28EventButton3Text2\",\n\t\"CalendarDayButton28EventButton4Black\",\n\t\"CalendarDayButton28EventButton4Text1\",\n\t\"CalendarDayButton28EventButton4Text2\",\n\t\"CalendarDayButton28EventTexture\",\n\t\"CalendarDayButton28OverlayFrameTexture\",\n\t\"CalendarDayButton28PendingInviteTexture\",\n\t\"CalendarDayButton29DarkFrameBottom\",\n\t\"CalendarDayButton29DarkFrameTop\",\n\t\"CalendarDayButton29DateFrameBackground\",\n\t\"CalendarDayButton29DateFrameDate\",\n\t\"CalendarDayButton29EventBackgroundTexture\",\n\t\"CalendarDayButton29EventButton1Black\",\n\t\"CalendarDayButton29EventButton1Text1\",\n\t\"CalendarDayButton29EventButton1Text2\",\n\t\"CalendarDayButton29EventButton2Black\",\n\t\"CalendarDayButton29EventButton2Text1\",\n\t\"CalendarDayButton29EventButton2Text2\",\n\t\"CalendarDayButton29EventButton3Black\",\n\t\"CalendarDayButton29EventButton3Text1\",\n\t\"CalendarDayButton29EventButton3Text2\",\n\t\"CalendarDayButton29EventButton4Black\",\n\t\"CalendarDayButton29EventButton4Text1\",\n\t\"CalendarDayButton29EventButton4Text2\",\n\t\"CalendarDayButton29EventTexture\",\n\t\"CalendarDayButton29OverlayFrameTexture\",\n\t\"CalendarDayButton29PendingInviteTexture\",\n\t\"CalendarDayButton2DarkFrameBottom\",\n\t\"CalendarDayButton2DarkFrameTop\",\n\t\"CalendarDayButton2DateFrameBackground\",\n\t\"CalendarDayButton2DateFrameDate\",\n\t\"CalendarDayButton2EventBackgroundTexture\",\n\t\"CalendarDayButton2EventButton1Black\",\n\t\"CalendarDayButton2EventButton1Text1\",\n\t\"CalendarDayButton2EventButton1Text2\",\n\t\"CalendarDayButton2EventButton2Black\",\n\t\"CalendarDayButton2EventButton2Text1\",\n\t\"CalendarDayButton2EventButton2Text2\",\n\t\"CalendarDayButton2EventButton3Black\",\n\t\"CalendarDayButton2EventButton3Text1\",\n\t\"CalendarDayButton2EventButton3Text2\",\n\t\"CalendarDayButton2EventButton4Black\",\n\t\"CalendarDayButton2EventButton4Text1\",\n\t\"CalendarDayButton2EventButton4Text2\",\n\t\"CalendarDayButton2EventTexture\",\n\t\"CalendarDayButton2OverlayFrameTexture\",\n\t\"CalendarDayButton2PendingInviteTexture\",\n\t\"CalendarDayButton30DarkFrameBottom\",\n\t\"CalendarDayButton30DarkFrameTop\",\n\t\"CalendarDayButton30DateFrameBackground\",\n\t\"CalendarDayButton30DateFrameDate\",\n\t\"CalendarDayButton30EventBackgroundTexture\",\n\t\"CalendarDayButton30EventButton1Black\",\n\t\"CalendarDayButton30EventButton1Text1\",\n\t\"CalendarDayButton30EventButton1Text2\",\n\t\"CalendarDayButton30EventButton2Black\",\n\t\"CalendarDayButton30EventButton2Text1\",\n\t\"CalendarDayButton30EventButton2Text2\",\n\t\"CalendarDayButton30EventButton3Black\",\n\t\"CalendarDayButton30EventButton3Text1\",\n\t\"CalendarDayButton30EventButton3Text2\",\n\t\"CalendarDayButton30EventButton4Black\",\n\t\"CalendarDayButton30EventButton4Text1\",\n\t\"CalendarDayButton30EventButton4Text2\",\n\t\"CalendarDayButton30EventTexture\",\n\t\"CalendarDayButton30OverlayFrameTexture\",\n\t\"CalendarDayButton30PendingInviteTexture\",\n\t\"CalendarDayButton31DarkFrameBottom\",\n\t\"CalendarDayButton31DarkFrameTop\",\n\t\"CalendarDayButton31DateFrameBackground\",\n\t\"CalendarDayButton31DateFrameDate\",\n\t\"CalendarDayButton31EventBackgroundTexture\",\n\t\"CalendarDayButton31EventButton1Black\",\n\t\"CalendarDayButton31EventButton1Text1\",\n\t\"CalendarDayButton31EventButton1Text2\",\n\t\"CalendarDayButton31EventButton2Black\",\n\t\"CalendarDayButton31EventButton2Text1\",\n\t\"CalendarDayButton31EventButton2Text2\",\n\t\"CalendarDayButton31EventButton3Black\",\n\t\"CalendarDayButton31EventButton3Text1\",\n\t\"CalendarDayButton31EventButton3Text2\",\n\t\"CalendarDayButton31EventButton4Black\",\n\t\"CalendarDayButton31EventButton4Text1\",\n\t\"CalendarDayButton31EventButton4Text2\",\n\t\"CalendarDayButton31EventTexture\",\n\t\"CalendarDayButton31OverlayFrameTexture\",\n\t\"CalendarDayButton31PendingInviteTexture\",\n\t\"CalendarDayButton32DarkFrameBottom\",\n\t\"CalendarDayButton32DarkFrameTop\",\n\t\"CalendarDayButton32DateFrameBackground\",\n\t\"CalendarDayButton32DateFrameDate\",\n\t\"CalendarDayButton32EventBackgroundTexture\",\n\t\"CalendarDayButton32EventButton1Black\",\n\t\"CalendarDayButton32EventButton1Text1\",\n\t\"CalendarDayButton32EventButton1Text2\",\n\t\"CalendarDayButton32EventButton2Black\",\n\t\"CalendarDayButton32EventButton2Text1\",\n\t\"CalendarDayButton32EventButton2Text2\",\n\t\"CalendarDayButton32EventButton3Black\",\n\t\"CalendarDayButton32EventButton3Text1\",\n\t\"CalendarDayButton32EventButton3Text2\",\n\t\"CalendarDayButton32EventButton4Black\",\n\t\"CalendarDayButton32EventButton4Text1\",\n\t\"CalendarDayButton32EventButton4Text2\",\n\t\"CalendarDayButton32EventTexture\",\n\t\"CalendarDayButton32OverlayFrameTexture\",\n\t\"CalendarDayButton32PendingInviteTexture\",\n\t\"CalendarDayButton33DarkFrameBottom\",\n\t\"CalendarDayButton33DarkFrameTop\",\n\t\"CalendarDayButton33DateFrameBackground\",\n\t\"CalendarDayButton33DateFrameDate\",\n\t\"CalendarDayButton33EventBackgroundTexture\",\n\t\"CalendarDayButton33EventButton1Black\",\n\t\"CalendarDayButton33EventButton1Text1\",\n\t\"CalendarDayButton33EventButton1Text2\",\n\t\"CalendarDayButton33EventButton2Black\",\n\t\"CalendarDayButton33EventButton2Text1\",\n\t\"CalendarDayButton33EventButton2Text2\",\n\t\"CalendarDayButton33EventButton3Black\",\n\t\"CalendarDayButton33EventButton3Text1\",\n\t\"CalendarDayButton33EventButton3Text2\",\n\t\"CalendarDayButton33EventButton4Black\",\n\t\"CalendarDayButton33EventButton4Text1\",\n\t\"CalendarDayButton33EventButton4Text2\",\n\t\"CalendarDayButton33EventTexture\",\n\t\"CalendarDayButton33OverlayFrameTexture\",\n\t\"CalendarDayButton33PendingInviteTexture\",\n\t\"CalendarDayButton34DarkFrameBottom\",\n\t\"CalendarDayButton34DarkFrameTop\",\n\t\"CalendarDayButton34DateFrameBackground\",\n\t\"CalendarDayButton34DateFrameDate\",\n\t\"CalendarDayButton34EventBackgroundTexture\",\n\t\"CalendarDayButton34EventButton1Black\",\n\t\"CalendarDayButton34EventButton1Text1\",\n\t\"CalendarDayButton34EventButton1Text2\",\n\t\"CalendarDayButton34EventButton2Black\",\n\t\"CalendarDayButton34EventButton2Text1\",\n\t\"CalendarDayButton34EventButton2Text2\",\n\t\"CalendarDayButton34EventButton3Black\",\n\t\"CalendarDayButton34EventButton3Text1\",\n\t\"CalendarDayButton34EventButton3Text2\",\n\t\"CalendarDayButton34EventButton4Black\",\n\t\"CalendarDayButton34EventButton4Text1\",\n\t\"CalendarDayButton34EventButton4Text2\",\n\t\"CalendarDayButton34EventTexture\",\n\t\"CalendarDayButton34OverlayFrameTexture\",\n\t\"CalendarDayButton34PendingInviteTexture\",\n\t\"CalendarDayButton35DarkFrameBottom\",\n\t\"CalendarDayButton35DarkFrameTop\",\n\t\"CalendarDayButton35DateFrameBackground\",\n\t\"CalendarDayButton35DateFrameDate\",\n\t\"CalendarDayButton35EventBackgroundTexture\",\n\t\"CalendarDayButton35EventButton1Black\",\n\t\"CalendarDayButton35EventButton1Text1\",\n\t\"CalendarDayButton35EventButton1Text2\",\n\t\"CalendarDayButton35EventButton2Black\",\n\t\"CalendarDayButton35EventButton2Text1\",\n\t\"CalendarDayButton35EventButton2Text2\",\n\t\"CalendarDayButton35EventButton3Black\",\n\t\"CalendarDayButton35EventButton3Text1\",\n\t\"CalendarDayButton35EventButton3Text2\",\n\t\"CalendarDayButton35EventButton4Black\",\n\t\"CalendarDayButton35EventButton4Text1\",\n\t\"CalendarDayButton35EventButton4Text2\",\n\t\"CalendarDayButton35EventTexture\",\n\t\"CalendarDayButton35OverlayFrameTexture\",\n\t\"CalendarDayButton35PendingInviteTexture\",\n\t\"CalendarDayButton36DarkFrameBottom\",\n\t\"CalendarDayButton36DarkFrameTop\",\n\t\"CalendarDayButton36DateFrameBackground\",\n\t\"CalendarDayButton36DateFrameDate\",\n\t\"CalendarDayButton36EventBackgroundTexture\",\n\t\"CalendarDayButton36EventButton1Black\",\n\t\"CalendarDayButton36EventButton1Text1\",\n\t\"CalendarDayButton36EventButton1Text2\",\n\t\"CalendarDayButton36EventButton2Black\",\n\t\"CalendarDayButton36EventButton2Text1\",\n\t\"CalendarDayButton36EventButton2Text2\",\n\t\"CalendarDayButton36EventButton3Black\",\n\t\"CalendarDayButton36EventButton3Text1\",\n\t\"CalendarDayButton36EventButton3Text2\",\n\t\"CalendarDayButton36EventButton4Black\",\n\t\"CalendarDayButton36EventButton4Text1\",\n\t\"CalendarDayButton36EventButton4Text2\",\n\t\"CalendarDayButton36EventTexture\",\n\t\"CalendarDayButton36OverlayFrameTexture\",\n\t\"CalendarDayButton36PendingInviteTexture\",\n\t\"CalendarDayButton37DarkFrameBottom\",\n\t\"CalendarDayButton37DarkFrameTop\",\n\t\"CalendarDayButton37DateFrameBackground\",\n\t\"CalendarDayButton37DateFrameDate\",\n\t\"CalendarDayButton37EventBackgroundTexture\",\n\t\"CalendarDayButton37EventButton1Black\",\n\t\"CalendarDayButton37EventButton1Text1\",\n\t\"CalendarDayButton37EventButton1Text2\",\n\t\"CalendarDayButton37EventButton2Black\",\n\t\"CalendarDayButton37EventButton2Text1\",\n\t\"CalendarDayButton37EventButton2Text2\",\n\t\"CalendarDayButton37EventButton3Black\",\n\t\"CalendarDayButton37EventButton3Text1\",\n\t\"CalendarDayButton37EventButton3Text2\",\n\t\"CalendarDayButton37EventButton4Black\",\n\t\"CalendarDayButton37EventButton4Text1\",\n\t\"CalendarDayButton37EventButton4Text2\",\n\t\"CalendarDayButton37EventTexture\",\n\t\"CalendarDayButton37OverlayFrameTexture\",\n\t\"CalendarDayButton37PendingInviteTexture\",\n\t\"CalendarDayButton38DarkFrameBottom\",\n\t\"CalendarDayButton38DarkFrameTop\",\n\t\"CalendarDayButton38DateFrameBackground\",\n\t\"CalendarDayButton38DateFrameDate\",\n\t\"CalendarDayButton38EventBackgroundTexture\",\n\t\"CalendarDayButton38EventButton1Black\",\n\t\"CalendarDayButton38EventButton1Text1\",\n\t\"CalendarDayButton38EventButton1Text2\",\n\t\"CalendarDayButton38EventButton2Black\",\n\t\"CalendarDayButton38EventButton2Text1\",\n\t\"CalendarDayButton38EventButton2Text2\",\n\t\"CalendarDayButton38EventButton3Black\",\n\t\"CalendarDayButton38EventButton3Text1\",\n\t\"CalendarDayButton38EventButton3Text2\",\n\t\"CalendarDayButton38EventButton4Black\",\n\t\"CalendarDayButton38EventButton4Text1\",\n\t\"CalendarDayButton38EventButton4Text2\",\n\t\"CalendarDayButton38EventTexture\",\n\t\"CalendarDayButton38OverlayFrameTexture\",\n\t\"CalendarDayButton38PendingInviteTexture\",\n\t\"CalendarDayButton39DarkFrameBottom\",\n\t\"CalendarDayButton39DarkFrameTop\",\n\t\"CalendarDayButton39DateFrameBackground\",\n\t\"CalendarDayButton39DateFrameDate\",\n\t\"CalendarDayButton39EventBackgroundTexture\",\n\t\"CalendarDayButton39EventButton1Black\",\n\t\"CalendarDayButton39EventButton1Text1\",\n\t\"CalendarDayButton39EventButton1Text2\",\n\t\"CalendarDayButton39EventButton2Black\",\n\t\"CalendarDayButton39EventButton2Text1\",\n\t\"CalendarDayButton39EventButton2Text2\",\n\t\"CalendarDayButton39EventButton3Black\",\n\t\"CalendarDayButton39EventButton3Text1\",\n\t\"CalendarDayButton39EventButton3Text2\",\n\t\"CalendarDayButton39EventButton4Black\",\n\t\"CalendarDayButton39EventButton4Text1\",\n\t\"CalendarDayButton39EventButton4Text2\",\n\t\"CalendarDayButton39EventTexture\",\n\t\"CalendarDayButton39OverlayFrameTexture\",\n\t\"CalendarDayButton39PendingInviteTexture\",\n\t\"CalendarDayButton3DarkFrameBottom\",\n\t\"CalendarDayButton3DarkFrameTop\",\n\t\"CalendarDayButton3DateFrameBackground\",\n\t\"CalendarDayButton3DateFrameDate\",\n\t\"CalendarDayButton3EventBackgroundTexture\",\n\t\"CalendarDayButton3EventButton1Black\",\n\t\"CalendarDayButton3EventButton1Text1\",\n\t\"CalendarDayButton3EventButton1Text2\",\n\t\"CalendarDayButton3EventButton2Black\",\n\t\"CalendarDayButton3EventButton2Text1\",\n\t\"CalendarDayButton3EventButton2Text2\",\n\t\"CalendarDayButton3EventButton3Black\",\n\t\"CalendarDayButton3EventButton3Text1\",\n\t\"CalendarDayButton3EventButton3Text2\",\n\t\"CalendarDayButton3EventButton4Black\",\n\t\"CalendarDayButton3EventButton4Text1\",\n\t\"CalendarDayButton3EventButton4Text2\",\n\t\"CalendarDayButton3EventTexture\",\n\t\"CalendarDayButton3OverlayFrameTexture\",\n\t\"CalendarDayButton3PendingInviteTexture\",\n\t\"CalendarDayButton40DarkFrameBottom\",\n\t\"CalendarDayButton40DarkFrameTop\",\n\t\"CalendarDayButton40DateFrameBackground\",\n\t\"CalendarDayButton40DateFrameDate\",\n\t\"CalendarDayButton40EventBackgroundTexture\",\n\t\"CalendarDayButton40EventButton1Black\",\n\t\"CalendarDayButton40EventButton1Text1\",\n\t\"CalendarDayButton40EventButton1Text2\",\n\t\"CalendarDayButton40EventButton2Black\",\n\t\"CalendarDayButton40EventButton2Text1\",\n\t\"CalendarDayButton40EventButton2Text2\",\n\t\"CalendarDayButton40EventButton3Black\",\n\t\"CalendarDayButton40EventButton3Text1\",\n\t\"CalendarDayButton40EventButton3Text2\",\n\t\"CalendarDayButton40EventButton4Black\",\n\t\"CalendarDayButton40EventButton4Text1\",\n\t\"CalendarDayButton40EventButton4Text2\",\n\t\"CalendarDayButton40EventTexture\",\n\t\"CalendarDayButton40OverlayFrameTexture\",\n\t\"CalendarDayButton40PendingInviteTexture\",\n\t\"CalendarDayButton41DarkFrameBottom\",\n\t\"CalendarDayButton41DarkFrameTop\",\n\t\"CalendarDayButton41DateFrameBackground\",\n\t\"CalendarDayButton41DateFrameDate\",\n\t\"CalendarDayButton41EventBackgroundTexture\",\n\t\"CalendarDayButton41EventButton1Black\",\n\t\"CalendarDayButton41EventButton1Text1\",\n\t\"CalendarDayButton41EventButton1Text2\",\n\t\"CalendarDayButton41EventButton2Black\",\n\t\"CalendarDayButton41EventButton2Text1\",\n\t\"CalendarDayButton41EventButton2Text2\",\n\t\"CalendarDayButton41EventButton3Black\",\n\t\"CalendarDayButton41EventButton3Text1\",\n\t\"CalendarDayButton41EventButton3Text2\",\n\t\"CalendarDayButton41EventButton4Black\",\n\t\"CalendarDayButton41EventButton4Text1\",\n\t\"CalendarDayButton41EventButton4Text2\",\n\t\"CalendarDayButton41EventTexture\",\n\t\"CalendarDayButton41OverlayFrameTexture\",\n\t\"CalendarDayButton41PendingInviteTexture\",\n\t\"CalendarDayButton42DarkFrameBottom\",\n\t\"CalendarDayButton42DarkFrameTop\",\n\t\"CalendarDayButton42DateFrameBackground\",\n\t\"CalendarDayButton42DateFrameDate\",\n\t\"CalendarDayButton42EventBackgroundTexture\",\n\t\"CalendarDayButton42EventButton1Black\",\n\t\"CalendarDayButton42EventButton1Text1\",\n\t\"CalendarDayButton42EventButton1Text2\",\n\t\"CalendarDayButton42EventButton2Black\",\n\t\"CalendarDayButton42EventButton2Text1\",\n\t\"CalendarDayButton42EventButton2Text2\",\n\t\"CalendarDayButton42EventButton3Black\",\n\t\"CalendarDayButton42EventButton3Text1\",\n\t\"CalendarDayButton42EventButton3Text2\",\n\t\"CalendarDayButton42EventButton4Black\",\n\t\"CalendarDayButton42EventButton4Text1\",\n\t\"CalendarDayButton42EventButton4Text2\",\n\t\"CalendarDayButton42EventTexture\",\n\t\"CalendarDayButton42OverlayFrameTexture\",\n\t\"CalendarDayButton42PendingInviteTexture\",\n\t\"CalendarDayButton4DarkFrameBottom\",\n\t\"CalendarDayButton4DarkFrameTop\",\n\t\"CalendarDayButton4DateFrameBackground\",\n\t\"CalendarDayButton4DateFrameDate\",\n\t\"CalendarDayButton4EventBackgroundTexture\",\n\t\"CalendarDayButton4EventButton1Black\",\n\t\"CalendarDayButton4EventButton1Text1\",\n\t\"CalendarDayButton4EventButton1Text2\",\n\t\"CalendarDayButton4EventButton2Black\",\n\t\"CalendarDayButton4EventButton2Text1\",\n\t\"CalendarDayButton4EventButton2Text2\",\n\t\"CalendarDayButton4EventButton3Black\",\n\t\"CalendarDayButton4EventButton3Text1\",\n\t\"CalendarDayButton4EventButton3Text2\",\n\t\"CalendarDayButton4EventButton4Black\",\n\t\"CalendarDayButton4EventButton4Text1\",\n\t\"CalendarDayButton4EventButton4Text2\",\n\t\"CalendarDayButton4EventTexture\",\n\t\"CalendarDayButton4OverlayFrameTexture\",\n\t\"CalendarDayButton4PendingInviteTexture\",\n\t\"CalendarDayButton5DarkFrameBottom\",\n\t\"CalendarDayButton5DarkFrameTop\",\n\t\"CalendarDayButton5DateFrameBackground\",\n\t\"CalendarDayButton5DateFrameDate\",\n\t\"CalendarDayButton5EventBackgroundTexture\",\n\t\"CalendarDayButton5EventButton1Black\",\n\t\"CalendarDayButton5EventButton1Text1\",\n\t\"CalendarDayButton5EventButton1Text2\",\n\t\"CalendarDayButton5EventButton2Black\",\n\t\"CalendarDayButton5EventButton2Text1\",\n\t\"CalendarDayButton5EventButton2Text2\",\n\t\"CalendarDayButton5EventButton3Black\",\n\t\"CalendarDayButton5EventButton3Text1\",\n\t\"CalendarDayButton5EventButton3Text2\",\n\t\"CalendarDayButton5EventButton4Black\",\n\t\"CalendarDayButton5EventButton4Text1\",\n\t\"CalendarDayButton5EventButton4Text2\",\n\t\"CalendarDayButton5EventTexture\",\n\t\"CalendarDayButton5OverlayFrameTexture\",\n\t\"CalendarDayButton5PendingInviteTexture\",\n\t\"CalendarDayButton6DarkFrameBottom\",\n\t\"CalendarDayButton6DarkFrameTop\",\n\t\"CalendarDayButton6DateFrameBackground\",\n\t\"CalendarDayButton6DateFrameDate\",\n\t\"CalendarDayButton6EventBackgroundTexture\",\n\t\"CalendarDayButton6EventButton1Black\",\n\t\"CalendarDayButton6EventButton1Text1\",\n\t\"CalendarDayButton6EventButton1Text2\",\n\t\"CalendarDayButton6EventButton2Black\",\n\t\"CalendarDayButton6EventButton2Text1\",\n\t\"CalendarDayButton6EventButton2Text2\",\n\t\"CalendarDayButton6EventButton3Black\",\n\t\"CalendarDayButton6EventButton3Text1\",\n\t\"CalendarDayButton6EventButton3Text2\",\n\t\"CalendarDayButton6EventButton4Black\",\n\t\"CalendarDayButton6EventButton4Text1\",\n\t\"CalendarDayButton6EventButton4Text2\",\n\t\"CalendarDayButton6EventTexture\",\n\t\"CalendarDayButton6OverlayFrameTexture\",\n\t\"CalendarDayButton6PendingInviteTexture\",\n\t\"CalendarDayButton7DarkFrameBottom\",\n\t\"CalendarDayButton7DarkFrameTop\",\n\t\"CalendarDayButton7DateFrameBackground\",\n\t\"CalendarDayButton7DateFrameDate\",\n\t\"CalendarDayButton7EventBackgroundTexture\",\n\t\"CalendarDayButton7EventButton1Black\",\n\t\"CalendarDayButton7EventButton1Text1\",\n\t\"CalendarDayButton7EventButton1Text2\",\n\t\"CalendarDayButton7EventButton2Black\",\n\t\"CalendarDayButton7EventButton2Text1\",\n\t\"CalendarDayButton7EventButton2Text2\",\n\t\"CalendarDayButton7EventButton3Black\",\n\t\"CalendarDayButton7EventButton3Text1\",\n\t\"CalendarDayButton7EventButton3Text2\",\n\t\"CalendarDayButton7EventButton4Black\",\n\t\"CalendarDayButton7EventButton4Text1\",\n\t\"CalendarDayButton7EventButton4Text2\",\n\t\"CalendarDayButton7EventTexture\",\n\t\"CalendarDayButton7OverlayFrameTexture\",\n\t\"CalendarDayButton7PendingInviteTexture\",\n\t\"CalendarDayButton8DarkFrameBottom\",\n\t\"CalendarDayButton8DarkFrameTop\",\n\t\"CalendarDayButton8DateFrameBackground\",\n\t\"CalendarDayButton8DateFrameDate\",\n\t\"CalendarDayButton8EventBackgroundTexture\",\n\t\"CalendarDayButton8EventButton1Black\",\n\t\"CalendarDayButton8EventButton1Text1\",\n\t\"CalendarDayButton8EventButton1Text2\",\n\t\"CalendarDayButton8EventButton2Black\",\n\t\"CalendarDayButton8EventButton2Text1\",\n\t\"CalendarDayButton8EventButton2Text2\",\n\t\"CalendarDayButton8EventButton3Black\",\n\t\"CalendarDayButton8EventButton3Text1\",\n\t\"CalendarDayButton8EventButton3Text2\",\n\t\"CalendarDayButton8EventButton4Black\",\n\t\"CalendarDayButton8EventButton4Text1\",\n\t\"CalendarDayButton8EventButton4Text2\",\n\t\"CalendarDayButton8EventTexture\",\n\t\"CalendarDayButton8OverlayFrameTexture\",\n\t\"CalendarDayButton8PendingInviteTexture\",\n\t\"CalendarDayButton9DarkFrameBottom\",\n\t\"CalendarDayButton9DarkFrameTop\",\n\t\"CalendarDayButton9DateFrameBackground\",\n\t\"CalendarDayButton9DateFrameDate\",\n\t\"CalendarDayButton9EventBackgroundTexture\",\n\t\"CalendarDayButton9EventButton1Black\",\n\t\"CalendarDayButton9EventButton1Text1\",\n\t\"CalendarDayButton9EventButton1Text2\",\n\t\"CalendarDayButton9EventButton2Black\",\n\t\"CalendarDayButton9EventButton2Text1\",\n\t\"CalendarDayButton9EventButton2Text2\",\n\t\"CalendarDayButton9EventButton3Black\",\n\t\"CalendarDayButton9EventButton3Text1\",\n\t\"CalendarDayButton9EventButton3Text2\",\n\t\"CalendarDayButton9EventButton4Black\",\n\t\"CalendarDayButton9EventButton4Text1\",\n\t\"CalendarDayButton9EventButton4Text2\",\n\t\"CalendarDayButton9EventTexture\",\n\t\"CalendarDayButton9OverlayFrameTexture\",\n\t\"CalendarDayButton9PendingInviteTexture\",\n\t\"CalendarEventPickerCloseButtonBorder\",\n\t\"CalendarEventPickerCloseButtonLeft\",\n\t\"CalendarEventPickerCloseButtonMiddle\",\n\t\"CalendarEventPickerCloseButtonRight\",\n\t\"CalendarEventPickerCloseButtonText\",\n\t\"CalendarEventPickerFrameButtonBackground\",\n\t\"CalendarEventPickerScrollBarBG\",\n\t\"CalendarEventPickerScrollBarBottom\",\n\t\"CalendarEventPickerScrollBarMiddle\",\n\t\"CalendarEventPickerScrollBarThumbTexture\",\n\t\"CalendarEventPickerScrollBarTop\",\n\t\"CalendarEventPickerTitleFrameBackgroundLeft\",\n\t\"CalendarEventPickerTitleFrameBackgroundMiddle\",\n\t\"CalendarEventPickerTitleFrameBackgroundRight\",\n\t\"CalendarEventPickerTitleFrameText\",\n\t\"CalendarFilterButtonDisabledTexture\",\n\t\"CalendarFilterButtonHighlightTexture\",\n\t\"CalendarFilterButtonNormalTexture\",\n\t\"CalendarFilterButtonPushedTexture\",\n\t\"CalendarFilterDropDownButtonDisabledTexture\",\n\t\"CalendarFilterDropDownButtonHighlightTexture\",\n\t\"CalendarFilterDropDownButtonNormalTexture\",\n\t\"CalendarFilterDropDownButtonPushedTexture\",\n\t\"CalendarFilterDropDownLeft\",\n\t\"CalendarFilterDropDownMiddle\",\n\t\"CalendarFilterDropDownRight\",\n\t\"CalendarFilterDropDownText\",\n\t\"CalendarFilterFrameLeft\",\n\t\"CalendarFilterFrameMiddle\",\n\t\"CalendarFilterFrameRight\",\n\t\"CalendarFilterFrameText\",\n\t\"CalendarFrameBottomLeftTexture\",\n\t\"CalendarFrameBottomMiddleTexture\",\n\t\"CalendarFrameBottomRightTexture\",\n\t\"CalendarFrameLeftBottomTexture\",\n\t\"CalendarFrameLeftMiddleTexture\",\n\t\"CalendarFrameLeftTopTexture\",\n\t\"CalendarFrameRightBottomTexture\",\n\t\"CalendarFrameRightMiddleTexture\",\n\t\"CalendarFrameRightTopTexture\",\n\t\"CalendarFrameTopLeftTexture\",\n\t\"CalendarFrameTopMiddleTexture\",\n\t\"CalendarFrameTopRightTexture\",\n\t\"CalendarInviteStatusContextMenuButton10ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton11ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton12ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton13ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton14ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton15ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton16ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton17ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton18ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton19ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton1ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton20ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton21ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton22ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton23ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton24ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton25ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton26ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton27ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton28ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton29ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton2ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton30ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton31ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton32ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton3ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton4ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton5ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton6ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton7ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton8ShortcutText\",\n\t\"CalendarInviteStatusContextMenuButton9ShortcutText\",\n\t\"CalendarLastDayDarkTexture\",\n\t\"CalendarMassInviteArenaButton2Left\",\n\t\"CalendarMassInviteArenaButton2Middle\",\n\t\"CalendarMassInviteArenaButton2Right\",\n\t\"CalendarMassInviteArenaButton2Text\",\n\t\"CalendarMassInviteArenaButton3Left\",\n\t\"CalendarMassInviteArenaButton3Middle\",\n\t\"CalendarMassInviteArenaButton3Right\",\n\t\"CalendarMassInviteArenaButton3Text\",\n\t\"CalendarMassInviteArenaButton5Left\",\n\t\"CalendarMassInviteArenaButton5Middle\",\n\t\"CalendarMassInviteArenaButton5Right\",\n\t\"CalendarMassInviteArenaButton5Text\",\n\t\"CalendarMassInviteFrameDivider\",\n\t\"CalendarMassInviteFrameLevelDivider\",\n\t\"CalendarMassInviteGuildAcceptButtonLeft\",\n\t\"CalendarMassInviteGuildAcceptButtonMiddle\",\n\t\"CalendarMassInviteGuildAcceptButtonRight\",\n\t\"CalendarMassInviteGuildAcceptButtonText\",\n\t\"CalendarMassInviteGuildLevelText\",\n\t\"CalendarMassInviteGuildMaxLevelEditLeft\",\n\t\"CalendarMassInviteGuildMaxLevelEditMiddle\",\n\t\"CalendarMassInviteGuildMaxLevelEditRight\",\n\t\"CalendarMassInviteGuildMinLevelEditLeft\",\n\t\"CalendarMassInviteGuildMinLevelEditMiddle\",\n\t\"CalendarMassInviteGuildMinLevelEditRight\",\n\t\"CalendarMassInviteGuildRankMenuButtonDisabledTexture\",\n\t\"CalendarMassInviteGuildRankMenuButtonHighlightTexture\",\n\t\"CalendarMassInviteGuildRankMenuButtonNormalTexture\",\n\t\"CalendarMassInviteGuildRankMenuButtonPushedTexture\",\n\t\"CalendarMassInviteGuildRankMenuLeft\",\n\t\"CalendarMassInviteGuildRankMenuMiddle\",\n\t\"CalendarMassInviteGuildRankMenuRight\",\n\t\"CalendarMassInviteGuildRankMenuText\",\n\t\"CalendarMassInviteGuildRankText\",\n\t\"CalendarMassInviteTitleFrameBackgroundLeft\",\n\t\"CalendarMassInviteTitleFrameBackgroundMiddle\",\n\t\"CalendarMassInviteTitleFrameBackgroundRight\",\n\t\"CalendarMassInviteTitleFrameText\",\n\t\"CalendarMonthBackground\",\n\t\"CalendarMonthName\",\n\t\"CalendarTexturePickerAcceptButtonBorder\",\n\t\"CalendarTexturePickerAcceptButtonLeft\",\n\t\"CalendarTexturePickerAcceptButtonMiddle\",\n\t\"CalendarTexturePickerAcceptButtonRight\",\n\t\"CalendarTexturePickerAcceptButtonText\",\n\t\"CalendarTexturePickerCancelButtonBorder\",\n\t\"CalendarTexturePickerCancelButtonLeft\",\n\t\"CalendarTexturePickerCancelButtonMiddle\",\n\t\"CalendarTexturePickerCancelButtonRight\",\n\t\"CalendarTexturePickerCancelButtonText\",\n\t\"CalendarTexturePickerFrameButtonBackground\",\n\t\"CalendarTexturePickerScrollBarBG\",\n\t\"CalendarTexturePickerScrollBarBottom\",\n\t\"CalendarTexturePickerScrollBarMiddle\",\n\t\"CalendarTexturePickerScrollBarThumbTexture\",\n\t\"CalendarTexturePickerScrollBarTop\",\n\t\"CalendarTexturePickerScrollFrameButton10Icon\",\n\t\"CalendarTexturePickerScrollFrameButton10Title\",\n\t\"CalendarTexturePickerScrollFrameButton11Icon\",\n\t\"CalendarTexturePickerScrollFrameButton11Title\",\n\t\"CalendarTexturePickerScrollFrameButton12Icon\",\n\t\"CalendarTexturePickerScrollFrameButton12Title\",\n\t\"CalendarTexturePickerScrollFrameButton13Icon\",\n\t\"CalendarTexturePickerScrollFrameButton13Title\",\n\t\"CalendarTexturePickerScrollFrameButton14Icon\",\n\t\"CalendarTexturePickerScrollFrameButton14Title\",\n\t\"CalendarTexturePickerScrollFrameButton15Icon\",\n\t\"CalendarTexturePickerScrollFrameButton15Title\",\n\t\"CalendarTexturePickerScrollFrameButton16Icon\",\n\t\"CalendarTexturePickerScrollFrameButton16Title\",\n\t\"CalendarTexturePickerScrollFrameButton1Icon\",\n\t\"CalendarTexturePickerScrollFrameButton1Title\",\n\t\"CalendarTexturePickerScrollFrameButton2Icon\",\n\t\"CalendarTexturePickerScrollFrameButton2Title\",\n\t\"CalendarTexturePickerScrollFrameButton3Icon\",\n\t\"CalendarTexturePickerScrollFrameButton3Title\",\n\t\"CalendarTexturePickerScrollFrameButton4Icon\",\n\t\"CalendarTexturePickerScrollFrameButton4Title\",\n\t\"CalendarTexturePickerScrollFrameButton5Icon\",\n\t\"CalendarTexturePickerScrollFrameButton5Title\",\n\t\"CalendarTexturePickerScrollFrameButton6Icon\",\n\t\"CalendarTexturePickerScrollFrameButton6Title\",\n\t\"CalendarTexturePickerScrollFrameButton7Icon\",\n\t\"CalendarTexturePickerScrollFrameButton7Title\",\n\t\"CalendarTexturePickerScrollFrameButton8Icon\",\n\t\"CalendarTexturePickerScrollFrameButton8Title\",\n\t\"CalendarTexturePickerScrollFrameButton9Icon\",\n\t\"CalendarTexturePickerScrollFrameButton9Title\",\n\t\"CalendarTexturePickerTitleFrameBackgroundLeft\",\n\t\"CalendarTexturePickerTitleFrameBackgroundMiddle\",\n\t\"CalendarTexturePickerTitleFrameBackgroundRight\",\n\t\"CalendarTexturePickerTitleFrameText\",\n\t\"CalendarTodayTexture\",\n\t\"CalendarTodayTextureGlow\",\n\t\"CalendarViewEventAcceptButtonFlashTexture\",\n\t\"CalendarViewEventAcceptButtonLeft\",\n\t\"CalendarViewEventAcceptButtonMiddle\",\n\t\"CalendarViewEventAcceptButtonRight\",\n\t\"CalendarViewEventAcceptButtonText\",\n\t\"CalendarViewEventBackground\",\n\t\"CalendarViewEventCreatorName\",\n\t\"CalendarViewEventDateLabel\",\n\t\"CalendarViewEventDeclineButtonFlashTexture\",\n\t\"CalendarViewEventDeclineButtonLeft\",\n\t\"CalendarViewEventDeclineButtonMiddle\",\n\t\"CalendarViewEventDeclineButtonRight\",\n\t\"CalendarViewEventDeclineButtonText\",\n\t\"CalendarViewEventDescription\",\n\t\"CalendarViewEventDescriptionScrollFrameScrollBarThumbTexture\",\n\t\"CalendarViewEventDivider\",\n\t\"CalendarViewEventFlashTimer\",\n\t\"CalendarViewEventIcon\",\n\t\"CalendarViewEventInviteListClassSortButtonDirection\",\n\t\"CalendarViewEventInviteListNameSortButtonDirection\",\n\t\"CalendarViewEventInviteListScrollFrameScrollBarBG\",\n\t\"CalendarViewEventInviteListScrollFrameScrollBarBottom\",\n\t\"CalendarViewEventInviteListScrollFrameScrollBarMiddle\",\n\t\"CalendarViewEventInviteListScrollFrameScrollBarThumbTexture\",\n\t\"CalendarViewEventInviteListScrollFrameScrollBarTop\",\n\t\"CalendarViewEventInviteListStatusSortButtonDirection\",\n\t\"CalendarViewEventRemoveButtonLeft\",\n\t\"CalendarViewEventRemoveButtonMiddle\",\n\t\"CalendarViewEventRemoveButtonRight\",\n\t\"CalendarViewEventRemoveButtonText\",\n\t\"CalendarViewEventTentativeButtonFlashTexture\",\n\t\"CalendarViewEventTentativeButtonLeft\",\n\t\"CalendarViewEventTentativeButtonMiddle\",\n\t\"CalendarViewEventTentativeButtonRight\",\n\t\"CalendarViewEventTentativeButtonText\",\n\t\"CalendarViewEventTimeLabel\",\n\t\"CalendarViewEventTitle\",\n\t\"CalendarViewEventTitleFrameBackgroundLeft\",\n\t\"CalendarViewEventTitleFrameBackgroundMiddle\",\n\t\"CalendarViewEventTitleFrameBackgroundRight\",\n\t\"CalendarViewEventTitleFrameText\",\n\t\"CalendarViewEventTypeName\",\n\t\"CalendarViewHolidayBackground\",\n\t\"CalendarViewHolidayDescription\",\n\t\"CalendarViewHolidayInfoTexture\",\n\t\"CalendarViewHolidayScrollFrameScrollBarThumbTexture\",\n\t\"CalendarViewHolidayTitleFrameBackgroundLeft\",\n\t\"CalendarViewHolidayTitleFrameBackgroundMiddle\",\n\t\"CalendarViewHolidayTitleFrameBackgroundRight\",\n\t\"CalendarViewHolidayTitleFrameText\",\n\t\"CalendarViewRaidBackground\",\n\t\"CalendarViewRaidDescription\",\n\t\"CalendarViewRaidScrollFrameScrollBarThumbTexture\",\n\t\"CalendarViewRaidTitleFrameBackgroundLeft\",\n\t\"CalendarViewRaidTitleFrameBackgroundMiddle\",\n\t\"CalendarViewRaidTitleFrameBackgroundRight\",\n\t\"CalendarViewRaidTitleFrameText\",\n\t\"CalendarWeekday1Background\",\n\t\"CalendarWeekday1Name\",\n\t\"CalendarWeekday2Background\",\n\t\"CalendarWeekday2Name\",\n\t\"CalendarWeekday3Background\",\n\t\"CalendarWeekday3Name\",\n\t\"CalendarWeekday4Background\",\n\t\"CalendarWeekday4Name\",\n\t\"CalendarWeekday5Background\",\n\t\"CalendarWeekday5Name\",\n\t\"CalendarWeekday6Background\",\n\t\"CalendarWeekday6Name\",\n\t\"CalendarWeekday7Background\",\n\t\"CalendarWeekday7Name\",\n\t\"CalendarWeekdaySelectedTexture\",\n\t\"CalendarYearBackground\",\n\t\"CalendarYearName\",\n\n\t-- functions: Blizzard_DebugTools\n\t\"DebugTooltip_OnLoad\",\n\t\"DevTools_Dump\",\n\t\"DevTools_DumpCommand\",\n\t\"DevTools_RunDump\",\n\t\"EventTraceFrameEvent_DisplayTooltip\",\n\t\"EventTraceFrameEvent_OnClick\",\n\t\"EventTraceFrameEvent_OnEnter\",\n\t\"EventTraceFrameEvent_OnLeave\",\n\t\"EventTraceFrame_HandleSlashCmd\",\n\t\"EventTraceFrame_OnEvent\",\n\t\"EventTraceFrame_OnKeyUp\",\n\t\"EventTraceFrame_OnLoad\",\n\t\"EventTraceFrame_OnMouseWheel\",\n\t\"EventTraceFrame_OnSizeChanged\",\n\t\"EventTraceFrame_OnUpdate\",\n\t\"EventTraceFrame_StartEventCapture\",\n\t\"EventTraceFrame_StopEventCapture\",\n\t\"EventTraceFrame_Update\",\n\t\"EventTraceFrame_UpdateKeyboardStatus\",\n\t\"FrameStackTooltip_OnEnter\",\n\t\"FrameStackTooltip_OnUpdate\",\n\t\"FrameStackTooltip_Toggle\",\n\t\"ScriptErrorsFrameButton_OnClick\",\n\t\"ScriptErrorsFrame_DeleteError\",\n\t\"ScriptErrorsFrame_OnError\",\n\t\"ScriptErrorsFrame_OnLoad\",\n\t\"ScriptErrorsFrame_OnShow\",\n\t\"ScriptErrorsFrame_Update\",\n\t\"ScriptErrorsFrame_UpdateButtons\",\n\t-- tables: Blizzard_DebugTools\n\t\"CalendarCreateEventInviteListScrollFrameButton1\",\n\t\"CalendarCreateEventInviteListScrollFrameButton10\",\n\t\"CalendarCreateEventInviteListScrollFrameButton11\",\n\t\"CalendarCreateEventInviteListScrollFrameButton12\",\n\t\"CalendarCreateEventInviteListScrollFrameButton13\",\n\t\"CalendarCreateEventInviteListScrollFrameButton14\",\n\t\"CalendarCreateEventInviteListScrollFrameButton15\",\n\t\"CalendarCreateEventInviteListScrollFrameButton16\",\n\t\"CalendarCreateEventInviteListScrollFrameButton17\",\n\t\"CalendarCreateEventInviteListScrollFrameButton18\",\n\t\"CalendarCreateEventInviteListScrollFrameButton19\",\n\t\"CalendarCreateEventInviteListScrollFrameButton2\",\n\t\"CalendarCreateEventInviteListScrollFrameButton3\",\n\t\"CalendarCreateEventInviteListScrollFrameButton4\",\n\t\"CalendarCreateEventInviteListScrollFrameButton5\",\n\t\"CalendarCreateEventInviteListScrollFrameButton6\",\n\t\"CalendarCreateEventInviteListScrollFrameButton7\",\n\t\"CalendarCreateEventInviteListScrollFrameButton8\",\n\t\"CalendarCreateEventInviteListScrollFrameButton9\",\n\t\"CalendarEventPickerScrollFrameButton1\",\n\t\"CalendarEventPickerScrollFrameButton10\",\n\t\"CalendarEventPickerScrollFrameButton11\",\n\t\"CalendarEventPickerScrollFrameButton12\",\n\t\"CalendarEventPickerScrollFrameButton2\",\n\t\"CalendarEventPickerScrollFrameButton3\",\n\t\"CalendarEventPickerScrollFrameButton4\",\n\t\"CalendarEventPickerScrollFrameButton5\",\n\t\"CalendarEventPickerScrollFrameButton6\",\n\t\"CalendarEventPickerScrollFrameButton7\",\n\t\"CalendarEventPickerScrollFrameButton8\",\n\t\"CalendarEventPickerScrollFrameButton9\",\n\t\"CalendarViewEventInviteListScrollFrameButton1\",\n\t\"CalendarViewEventInviteListScrollFrameButton10\",\n\t\"CalendarViewEventInviteListScrollFrameButton11\",\n\t\"CalendarViewEventInviteListScrollFrameButton12\",\n\t\"CalendarViewEventInviteListScrollFrameButton13\",\n\t\"CalendarViewEventInviteListScrollFrameButton14\",\n\t\"CalendarViewEventInviteListScrollFrameButton15\",\n\t\"CalendarViewEventInviteListScrollFrameButton16\",\n\t\"CalendarViewEventInviteListScrollFrameButton17\",\n\t\"CalendarViewEventInviteListScrollFrameButton18\",\n\t\"CalendarViewEventInviteListScrollFrameButton19\",\n\t\"CalendarViewEventInviteListScrollFrameButton2\",\n\t\"CalendarViewEventInviteListScrollFrameButton3\",\n\t\"CalendarViewEventInviteListScrollFrameButton4\",\n\t\"CalendarViewEventInviteListScrollFrameButton5\",\n\t\"CalendarViewEventInviteListScrollFrameButton6\",\n\t\"CalendarViewEventInviteListScrollFrameButton7\",\n\t\"CalendarViewEventInviteListScrollFrameButton8\",\n\t\"CalendarViewEventInviteListScrollFrameButton9\",\n\t\"EVENT_TRACE_EVENT_COLORS\",\n\t\"EVENT_TRACE_SYSTEM_TIMES\",\n\t\"EventTraceFrame\",\n\t\"EventTraceFrameButton1\",\n\t\"EventTraceFrameButton10\",\n\t\"EventTraceFrameButton11\",\n\t\"EventTraceFrameButton12\",\n\t\"EventTraceFrameButton13\",\n\t\"EventTraceFrameButton14\",\n\t\"EventTraceFrameButton15\",\n\t\"EventTraceFrameButton16\",\n\t\"EventTraceFrameButton17\",\n\t\"EventTraceFrameButton18\",\n\t\"EventTraceFrameButton19\",\n\t\"EventTraceFrameButton2\",\n\t\"EventTraceFrameButton20\",\n\t\"EventTraceFrameButton21\",\n\t\"EventTraceFrameButton22\",\n\t\"EventTraceFrameButton23\",\n\t\"EventTraceFrameButton24\",\n\t\"EventTraceFrameButton25\",\n\t\"EventTraceFrameButton26\",\n\t\"EventTraceFrameButton27\",\n\t\"EventTraceFrameButton28\",\n\t\"EventTraceFrameButton29\",\n\t\"EventTraceFrameButton3\",\n\t\"EventTraceFrameButton4\",\n\t\"EventTraceFrameButton5\",\n\t\"EventTraceFrameButton6\",\n\t\"EventTraceFrameButton7\",\n\t\"EventTraceFrameButton8\",\n\t\"EventTraceFrameButton9\",\n\t\"EventTraceFrameCloseButton\",\n\t\"EventTraceFrameScroll\",\n\t\"EventTraceFrameTitleButton\",\n\t\"EventTraceFrameTitleButtonHighlight\",\n\t\"EventTraceTooltip\",\n\t\"EventTraceTooltipStatusBar\",\n\t\"FrameStackTooltip\",\n\t\"FrameStackTooltipStatusBar\",\n\t\"ScriptErrorsFrame\",\n\t\"ScriptErrorsFrameClose\",\n\t\"ScriptErrorsFrameScrollFrame\",\n\t\"ScriptErrorsFrameScrollFrameScrollBar\",\n\t\"ScriptErrorsFrameScrollFrameScrollBarScrollDownButton\",\n\t\"ScriptErrorsFrameScrollFrameScrollBarScrollUpButton\",\n\t\"ScriptErrorsFrameScrollFrameText\",\n\t\"ScriptErrorsFrameTitleButton\",\n\t-- frames: Blizzard_DebugTools\n\t\"CalendarViewEventInviteListScrollFrameButton1\",\n\t\"CalendarViewEventInviteListScrollFrameButton2\",\n\t\"CalendarViewEventInviteListScrollFrameButton3\",\n\t\"CalendarViewEventInviteListScrollFrameButton4\",\n\t\"CalendarViewEventInviteListScrollFrameButton5\",\n\t\"CalendarViewEventInviteListScrollFrameButton6\",\n\t\"CalendarViewEventInviteListScrollFrameButton7\",\n\t\"CalendarViewEventInviteListScrollFrameButton8\",\n\t\"CalendarViewEventInviteListScrollFrameButton9\",\n\t\"CalendarViewEventInviteListScrollFrameButton10\",\n\t\"CalendarViewEventInviteListScrollFrameButton11\",\n\t\"CalendarViewEventInviteListScrollFrameButton12\",\n\t\"CalendarViewEventInviteListScrollFrameButton13\",\n\t\"CalendarViewEventInviteListScrollFrameButton14\",\n\t\"CalendarViewEventInviteListScrollFrameButton15\",\n\t\"CalendarViewEventInviteListScrollFrameButton16\",\n\t\"CalendarViewEventInviteListScrollFrameButton17\",\n\t\"CalendarViewEventInviteListScrollFrameButton18\",\n\t\"CalendarViewEventInviteListScrollFrameButton19\",\n\t\"CalendarCreateEventInviteListScrollFrameButton1\",\n\t\"CalendarCreateEventInviteListScrollFrameButton2\",\n\t\"CalendarCreateEventInviteListScrollFrameButton3\",\n\t\"CalendarCreateEventInviteListScrollFrameButton4\",\n\t\"CalendarCreateEventInviteListScrollFrameButton5\",\n\t\"CalendarCreateEventInviteListScrollFrameButton6\",\n\t\"CalendarCreateEventInviteListScrollFrameButton7\",\n\t\"CalendarCreateEventInviteListScrollFrameButton8\",\n\t\"CalendarCreateEventInviteListScrollFrameButton9\",\n\t\"CalendarCreateEventInviteListScrollFrameButton10\",\n\t\"CalendarCreateEventInviteListScrollFrameButton11\",\n\t\"CalendarCreateEventInviteListScrollFrameButton12\",\n\t\"CalendarCreateEventInviteListScrollFrameButton13\",\n\t\"CalendarCreateEventInviteListScrollFrameButton14\",\n\t\"CalendarCreateEventInviteListScrollFrameButton15\",\n\t\"CalendarCreateEventInviteListScrollFrameButton16\",\n\t\"CalendarCreateEventInviteListScrollFrameButton17\",\n\t\"CalendarCreateEventInviteListScrollFrameButton18\",\n\t\"CalendarCreateEventInviteListScrollFrameButton19\",\n\t\"CalendarEventPickerScrollFrameButton1\",\n\t\"CalendarEventPickerScrollFrameButton2\",\n\t\"CalendarEventPickerScrollFrameButton3\",\n\t\"CalendarEventPickerScrollFrameButton4\",\n\t\"CalendarEventPickerScrollFrameButton5\",\n\t\"CalendarEventPickerScrollFrameButton6\",\n\t\"CalendarEventPickerScrollFrameButton7\",\n\t\"CalendarEventPickerScrollFrameButton8\",\n\t\"CalendarEventPickerScrollFrameButton9\",\n\t\"CalendarEventPickerScrollFrameButton10\",\n\t\"CalendarEventPickerScrollFrameButton11\",\n\t\"CalendarEventPickerScrollFrameButton12\",\n\t\"EventTraceFrame\",\n\t\"EventTraceFrameCloseButton\",\n\t\"EventTraceFrameTitleButton\",\n\t\"EventTraceFrameTitleButtonHighlight\",\n\t\"EventTraceFrameScroll\",\n\t\"EventTraceFrameButton1\",\n\t\"EventTraceFrameButton2\",\n\t\"EventTraceFrameButton3\",\n\t\"EventTraceFrameButton4\",\n\t\"EventTraceFrameButton5\",\n\t\"EventTraceFrameButton6\",\n\t\"EventTraceFrameButton7\",\n\t\"EventTraceFrameButton8\",\n\t\"EventTraceFrameButton9\",\n\t\"EventTraceFrameButton10\",\n\t\"EventTraceFrameButton11\",\n\t\"EventTraceFrameButton12\",\n\t\"EventTraceFrameButton13\",\n\t\"EventTraceFrameButton14\",\n\t\"EventTraceFrameButton15\",\n\t\"EventTraceFrameButton16\",\n\t\"EventTraceFrameButton17\",\n\t\"EventTraceFrameButton18\",\n\t\"EventTraceFrameButton19\",\n\t\"EventTraceFrameButton20\",\n\t\"EventTraceFrameButton21\",\n\t\"EventTraceFrameButton22\",\n\t\"EventTraceFrameButton23\",\n\t\"EventTraceFrameButton24\",\n\t\"EventTraceFrameButton25\",\n\t\"EventTraceFrameButton26\",\n\t\"EventTraceFrameButton27\",\n\t\"EventTraceFrameButton28\",\n\t\"EventTraceFrameButton29\",\n\t\"ScriptErrorsFrame\",\n\t\"ScriptErrorsFrameClose\",\n\t\"ScriptErrorsFrameTitleButton\",\n\t\"ScriptErrorsFrameScrollFrame\",\n\t\"ScriptErrorsFrameScrollFrameText\",\n\t\"ScriptErrorsFrameScrollFrameScrollBar\",\n\t\"ScriptErrorsFrameScrollFrameScrollBarScrollUpButton\",\n\t\"ScriptErrorsFrameScrollFrameScrollBarScrollDownButton\",\n\t\"FrameStackTooltip\",\n\t\"FrameStackTooltipStatusBar\",\n\t\"EventTraceTooltip\",\n\t\"EventTraceTooltipStatusBar\",\n\t-- widgets: Blizzard_DebugTools\n\t\"CalendarCreateEventInviteListScrollFrameButton10Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton10ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton10Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton10PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton10Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton11Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton11ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton11Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton11PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton11Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton12Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton12ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton12Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton12PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton12Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton13Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton13ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton13Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton13PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton13Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton14Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton14ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton14Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton14PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton14Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton15Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton15ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton15Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton15PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton15Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton16Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton16ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton16Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton16PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton16Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton17Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton17ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton17Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton17PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton17Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton18Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton18ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton18Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton18PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton18Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton19Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton19ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton19Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton19PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton19Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton1Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton1ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton1Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton1PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton1Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton2Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton2ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton2Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton2PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton2Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton3Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton3ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton3Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton3PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton3Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton4Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton4ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton4Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton4PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton4Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton5Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton5ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton5Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton5PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton5Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton6Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton6ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton6Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton6PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton6Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton7Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton7ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton7Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton7PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton7Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton8Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton8ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton8Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton8PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton8Status\",\n\t\"CalendarCreateEventInviteListScrollFrameButton9Class\",\n\t\"CalendarCreateEventInviteListScrollFrameButton9ModIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton9Name\",\n\t\"CalendarCreateEventInviteListScrollFrameButton9PartyIcon\",\n\t\"CalendarCreateEventInviteListScrollFrameButton9Status\",\n\t\"CalendarEventPickerScrollFrameButton10Icon\",\n\t\"CalendarEventPickerScrollFrameButton10Time\",\n\t\"CalendarEventPickerScrollFrameButton10Title\",\n\t\"CalendarEventPickerScrollFrameButton11Icon\",\n\t\"CalendarEventPickerScrollFrameButton11Time\",\n\t\"CalendarEventPickerScrollFrameButton11Title\",\n\t\"CalendarEventPickerScrollFrameButton12Icon\",\n\t\"CalendarEventPickerScrollFrameButton12Time\",\n\t\"CalendarEventPickerScrollFrameButton12Title\",\n\t\"CalendarEventPickerScrollFrameButton1Icon\",\n\t\"CalendarEventPickerScrollFrameButton1Time\",\n\t\"CalendarEventPickerScrollFrameButton1Title\",\n\t\"CalendarEventPickerScrollFrameButton2Icon\",\n\t\"CalendarEventPickerScrollFrameButton2Time\",\n\t\"CalendarEventPickerScrollFrameButton2Title\",\n\t\"CalendarEventPickerScrollFrameButton3Icon\",\n\t\"CalendarEventPickerScrollFrameButton3Time\",\n\t\"CalendarEventPickerScrollFrameButton3Title\",\n\t\"CalendarEventPickerScrollFrameButton4Icon\",\n\t\"CalendarEventPickerScrollFrameButton4Time\",\n\t\"CalendarEventPickerScrollFrameButton4Title\",\n\t\"CalendarEventPickerScrollFrameButton5Icon\",\n\t\"CalendarEventPickerScrollFrameButton5Time\",\n\t\"CalendarEventPickerScrollFrameButton5Title\",\n\t\"CalendarEventPickerScrollFrameButton6Icon\",\n\t\"CalendarEventPickerScrollFrameButton6Time\",\n\t\"CalendarEventPickerScrollFrameButton6Title\",\n\t\"CalendarEventPickerScrollFrameButton7Icon\",\n\t\"CalendarEventPickerScrollFrameButton7Time\",\n\t\"CalendarEventPickerScrollFrameButton7Title\",\n\t\"CalendarEventPickerScrollFrameButton8Icon\",\n\t\"CalendarEventPickerScrollFrameButton8Time\",\n\t\"CalendarEventPickerScrollFrameButton8Title\",\n\t\"CalendarEventPickerScrollFrameButton9Icon\",\n\t\"CalendarEventPickerScrollFrameButton9Time\",\n\t\"CalendarEventPickerScrollFrameButton9Title\",\n\t\"CalendarViewEventInviteListScrollFrameButton10Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton10ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton10Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton10PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton10Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton11Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton11ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton11Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton11PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton11Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton12Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton12ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton12Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton12PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton12Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton13Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton13ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton13Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton13PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton13Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton14Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton14ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton14Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton14PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton14Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton15Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton15ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton15Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton15PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton15Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton16Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton16ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton16Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton16PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton16Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton17Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton17ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton17Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton17PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton17Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton18Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton18ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton18Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton18PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton18Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton19Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton19ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton19Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton19PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton19Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton1Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton1ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton1Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton1PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton1Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton2Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton2ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton2Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton2PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton2Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton3Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton3ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton3Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton3PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton3Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton4Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton4ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton4Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton4PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton4Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton5Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton5ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton5Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton5PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton5Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton6Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton6ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton6Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton6PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton6Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton7Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton7ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton7Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton7PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton7Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton8Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton8ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton8Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton8PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton8Status\",\n\t\"CalendarViewEventInviteListScrollFrameButton9Class\",\n\t\"CalendarViewEventInviteListScrollFrameButton9ModIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton9Name\",\n\t\"CalendarViewEventInviteListScrollFrameButton9PartyIcon\",\n\t\"CalendarViewEventInviteListScrollFrameButton9Status\",\n\t\"EventTraceFrameBottom\",\n\t\"EventTraceFrameBottomLeft\",\n\t\"EventTraceFrameBottomRight\",\n\t\"EventTraceFrameDialogBG\",\n\t\"EventTraceFrameLeft\",\n\t\"EventTraceFrameRight\",\n\t\"EventTraceFrameScrollBG\",\n\t\"EventTraceFrameTitle\",\n\t\"EventTraceFrameTitleBG\",\n\t\"EventTraceFrameTop\",\n\t\"EventTraceFrameTopLeft\",\n\t\"EventTraceFrameTopRight\",\n\t\"EventTraceTooltipStatusBarTexture\",\n\t\"EventTraceTooltipTextLeft1\",\n\t\"EventTraceTooltipTextLeft2\",\n\t\"EventTraceTooltipTextLeft3\",\n\t\"EventTraceTooltipTextLeft4\",\n\t\"EventTraceTooltipTextLeft5\",\n\t\"EventTraceTooltipTextLeft6\",\n\t\"EventTraceTooltipTextLeft7\",\n\t\"EventTraceTooltipTextLeft8\",\n\t\"EventTraceTooltipTextRight1\",\n\t\"EventTraceTooltipTextRight2\",\n\t\"EventTraceTooltipTextRight3\",\n\t\"EventTraceTooltipTextRight4\",\n\t\"EventTraceTooltipTextRight5\",\n\t\"EventTraceTooltipTextRight6\",\n\t\"EventTraceTooltipTextRight7\",\n\t\"EventTraceTooltipTextRight8\",\n\t\"EventTraceTooltipTexture1\",\n\t\"EventTraceTooltipTexture10\",\n\t\"EventTraceTooltipTexture2\",\n\t\"EventTraceTooltipTexture3\",\n\t\"EventTraceTooltipTexture4\",\n\t\"EventTraceTooltipTexture5\",\n\t\"EventTraceTooltipTexture6\",\n\t\"EventTraceTooltipTexture7\",\n\t\"EventTraceTooltipTexture8\",\n\t\"EventTraceTooltipTexture9\",\n\t\"FrameStackTooltipStatusBarTexture\",\n\t\"FrameStackTooltipTextLeft1\",\n\t\"FrameStackTooltipTextLeft2\",\n\t\"FrameStackTooltipTextLeft3\",\n\t\"FrameStackTooltipTextLeft4\",\n\t\"FrameStackTooltipTextLeft5\",\n\t\"FrameStackTooltipTextLeft6\",\n\t\"FrameStackTooltipTextLeft7\",\n\t\"FrameStackTooltipTextLeft8\",\n\t\"FrameStackTooltipTextRight1\",\n\t\"FrameStackTooltipTextRight2\",\n\t\"FrameStackTooltipTextRight3\",\n\t\"FrameStackTooltipTextRight4\",\n\t\"FrameStackTooltipTextRight5\",\n\t\"FrameStackTooltipTextRight6\",\n\t\"FrameStackTooltipTextRight7\",\n\t\"FrameStackTooltipTextRight8\",\n\t\"FrameStackTooltipTexture1\",\n\t\"FrameStackTooltipTexture10\",\n\t\"FrameStackTooltipTexture2\",\n\t\"FrameStackTooltipTexture3\",\n\t\"FrameStackTooltipTexture4\",\n\t\"FrameStackTooltipTexture5\",\n\t\"FrameStackTooltipTexture6\",\n\t\"FrameStackTooltipTexture7\",\n\t\"FrameStackTooltipTexture8\",\n\t\"FrameStackTooltipTexture9\",\n\t\"ScriptErrorsFrameBottom\",\n\t\"ScriptErrorsFrameBottomLeft\",\n\t\"ScriptErrorsFrameBottomRight\",\n\t\"ScriptErrorsFrameDialogBG\",\n\t\"ScriptErrorsFrameLeft\",\n\t\"ScriptErrorsFrameRight\",\n\t\"ScriptErrorsFrameScrollFrameScrollBarThumbTexture\",\n\t\"ScriptErrorsFrameText\",\n\t\"ScriptErrorsFrameTitleBG\",\n\t\"ScriptErrorsFrameTop\",\n\t\"ScriptErrorsFrameTopLeft\",\n\t\"ScriptErrorsFrameTopRight\",\n\n\t-- functions: Blizzard_GMChatUI\n\t\"GMChatFrame_Close\",\n\t\"GMChatFrame_IsGM\",\n\t\"GMChatFrame_OnEvent\",\n\t\"GMChatFrame_OnHide\",\n\t\"GMChatFrame_OnLoad\",\n\t\"GMChatFrame_OnShow\",\n\t\"GMChatFrame_OnUpdate\",\n\t\"GMChatFrame_Show\",\n\t\"GMChatStatusFrame_OnClick\",\n\t\"GMChatStatusFrame_Pulse\",\n\t-- tables: Blizzard_GMChatUI\n\t\"GMChatFrame\",\n\t\"GMChatFrameButtonFrame\",\n\t\"GMChatFrameButtonFrameBottomButton\",\n\t\"GMChatFrameButtonFrameDownButton\",\n\t\"GMChatFrameButtonFrameMinimizeButton\",\n\t\"GMChatFrameButtonFrameUpButton\",\n\t\"GMChatFrameClickAnywhereButton\",\n\t\"GMChatFrameCloseButton\",\n\t\"GMChatFrameEditBox\",\n\t\"GMChatFrameEditBoxLanguage\",\n\t\"GMChatFrameResizeButton\",\n\t\"GMChatStatusFrame\",\n\t\"GMChatStatusFrameButton\",\n\t\"GMChatTab\",\n\t\"GMChatTabFlash\",\n\t-- frames: Blizzard_GMChatUI\n\t\"GMChatFrame\",\n\t\"GMChatFrameClickAnywhereButton\",\n\t\"GMChatFrameResizeButton\",\n\t\"GMChatFrameButtonFrame\",\n\t\"GMChatFrameButtonFrameBottomButton\",\n\t\"GMChatFrameButtonFrameDownButton\",\n\t\"GMChatFrameButtonFrameUpButton\",\n\t\"GMChatFrameButtonFrameMinimizeButton\",\n\t\"GMChatFrameEditBox\",\n\t\"GMChatFrameEditBoxLanguage\",\n\t\"GMChatTab\",\n\t\"GMChatTabFlash\",\n\t\"GMChatFrameCloseButton\",\n\t\"GMChatStatusFrame\",\n\t\"GMChatStatusFrameButton\",\n\t-- widgets: Blizzard_GMChatUI\n\t\"GMChatFrameBackground\",\n\t\"GMChatFrameBottomLeftTexture\",\n\t\"GMChatFrameBottomRightTexture\",\n\t\"GMChatFrameBottomTexture\",\n\t\"GMChatFrameButtonFrameBackground\",\n\t\"GMChatFrameButtonFrameBottomButtonFlash\",\n\t\"GMChatFrameButtonFrameBottomLeftTexture\",\n\t\"GMChatFrameButtonFrameBottomRightTexture\",\n\t\"GMChatFrameButtonFrameBottomTexture\",\n\t\"GMChatFrameButtonFrameLeftTexture\",\n\t\"GMChatFrameButtonFrameRightTexture\",\n\t\"GMChatFrameButtonFrameTopLeftTexture\",\n\t\"GMChatFrameButtonFrameTopRightTexture\",\n\t\"GMChatFrameButtonFrameTopTexture\",\n\t\"GMChatFrameEditBoxFocusLeft\",\n\t\"GMChatFrameEditBoxFocusMid\",\n\t\"GMChatFrameEditBoxFocusRight\",\n\t\"GMChatFrameEditBoxHeader\",\n\t\"GMChatFrameEditBoxLeft\",\n\t\"GMChatFrameEditBoxMid\",\n\t\"GMChatFrameEditBoxRight\",\n\t\"GMChatFrameLeftTexture\",\n\t\"GMChatFrameRightTexture\",\n\t\"GMChatFrameTopLeftTexture\",\n\t\"GMChatFrameTopRightTexture\",\n\t\"GMChatFrameTopTexture\",\n\t\"GMChatStatusFrameDescription\",\n\t\"GMChatStatusFramePulse\",\n\t\"GMChatStatusFrameTitleText\",\n\t\"GMChatTabLeft\",\n\t\"GMChatTabMiddle\",\n\t\"GMChatTabRight\",\n\t\"GMChatTabText\",\n\n\t-- functions: Blizzard_GMSurveyUI\n\t\"GMSurveyCommentScrollFrame_OnEvent\",\n\t\"GMSurveyCommentScrollFrame_OnLoad\",\n\t\"GMSurveyFrame_Update\",\n\t\"GMSurveyQuestion_OnLoad\",\n\t\"GMSurveyQuestion_OnShow\",\n\t\"GMSurveyQuestion_SpaceAnswers\",\n\t\"GMSurveyRadioButton_OnClick\",\n\t\"GMSurveyScrollFrame_OnEvent\",\n\t\"GMSurveyScrollFrame_OnLoad\",\n\t\"GMSurveySubmitButton_OnClick\",\n\t-- tables: Blizzard_GMSurveyUI\n\t\"GMBlock\",\n\t\"GMSurveyCancelButton\",\n\t\"GMSurveyCloseButton\",\n\t\"GMSurveyCommentFrame\",\n\t\"GMSurveyCommentScrollFrame\",\n\t\"GMSurveyCommentScrollFrameScrollBar\",\n\t\"GMSurveyCommentScrollFrameScrollBarScrollDownButton\",\n\t\"GMSurveyCommentScrollFrameScrollBarScrollUpButton\",\n\t\"GMSurveyFrame\",\n\t\"GMSurveyFrameComment\",\n\t\"GMSurveyHeader\",\n\t\"GMSurveyQuestion1\",\n\t\"GMSurveyQuestion10\",\n\t\"GMSurveyQuestion10RadioButton0\",\n\t\"GMSurveyQuestion10RadioButton1\",\n\t\"GMSurveyQuestion10RadioButton10\",\n\t\"GMSurveyQuestion10RadioButton11\",\n\t\"GMSurveyQuestion10RadioButton2\",\n\t\"GMSurveyQuestion10RadioButton3\",\n\t\"GMSurveyQuestion10RadioButton4\",\n\t\"GMSurveyQuestion10RadioButton5\",\n\t\"GMSurveyQuestion10RadioButton6\",\n\t\"GMSurveyQuestion10RadioButton7\",\n\t\"GMSurveyQuestion10RadioButton8\",\n\t\"GMSurveyQuestion10RadioButton9\",\n\t\"GMSurveyQuestion1RadioButton0\",\n\t\"GMSurveyQuestion1RadioButton1\",\n\t\"GMSurveyQuestion1RadioButton10\",\n\t\"GMSurveyQuestion1RadioButton11\",\n\t\"GMSurveyQuestion1RadioButton2\",\n\t\"GMSurveyQuestion1RadioButton3\",\n\t\"GMSurveyQuestion1RadioButton4\",\n\t\"GMSurveyQuestion1RadioButton5\",\n\t\"GMSurveyQuestion1RadioButton6\",\n\t\"GMSurveyQuestion1RadioButton7\",\n\t\"GMSurveyQuestion1RadioButton8\",\n\t\"GMSurveyQuestion1RadioButton9\",\n\t\"GMSurveyQuestion2\",\n\t\"GMSurveyQuestion2RadioButton0\",\n\t\"GMSurveyQuestion2RadioButton1\",\n\t\"GMSurveyQuestion2RadioButton10\",\n\t\"GMSurveyQuestion2RadioButton11\",\n\t\"GMSurveyQuestion2RadioButton2\",\n\t\"GMSurveyQuestion2RadioButton3\",\n\t\"GMSurveyQuestion2RadioButton4\",\n\t\"GMSurveyQuestion2RadioButton5\",\n\t\"GMSurveyQuestion2RadioButton6\",\n\t\"GMSurveyQuestion2RadioButton7\",\n\t\"GMSurveyQuestion2RadioButton8\",\n\t\"GMSurveyQuestion2RadioButton9\",\n\t\"GMSurveyQuestion3\",\n\t\"GMSurveyQuestion3RadioButton0\",\n\t\"GMSurveyQuestion3RadioButton1\",\n\t\"GMSurveyQuestion3RadioButton10\",\n\t\"GMSurveyQuestion3RadioButton11\",\n\t\"GMSurveyQuestion3RadioButton2\",\n\t\"GMSurveyQuestion3RadioButton3\",\n\t\"GMSurveyQuestion3RadioButton4\",\n\t\"GMSurveyQuestion3RadioButton5\",\n\t\"GMSurveyQuestion3RadioButton6\",\n\t\"GMSurveyQuestion3RadioButton7\",\n\t\"GMSurveyQuestion3RadioButton8\",\n\t\"GMSurveyQuestion3RadioButton9\",\n\t\"GMSurveyQuestion4\",\n\t\"GMSurveyQuestion4RadioButton0\",\n\t\"GMSurveyQuestion4RadioButton1\",\n\t\"GMSurveyQuestion4RadioButton10\",\n\t\"GMSurveyQuestion4RadioButton11\",\n\t\"GMSurveyQuestion4RadioButton2\",\n\t\"GMSurveyQuestion4RadioButton3\",\n\t\"GMSurveyQuestion4RadioButton4\",\n\t\"GMSurveyQuestion4RadioButton5\",\n\t\"GMSurveyQuestion4RadioButton6\",\n\t\"GMSurveyQuestion4RadioButton7\",\n\t\"GMSurveyQuestion4RadioButton8\",\n\t\"GMSurveyQuestion4RadioButton9\",\n\t\"GMSurveyQuestion5\",\n\t\"GMSurveyQuestion5RadioButton0\",\n\t\"GMSurveyQuestion5RadioButton1\",\n\t\"GMSurveyQuestion5RadioButton10\",\n\t\"GMSurveyQuestion5RadioButton11\",\n\t\"GMSurveyQuestion5RadioButton2\",\n\t\"GMSurveyQuestion5RadioButton3\",\n\t\"GMSurveyQuestion5RadioButton4\",\n\t\"GMSurveyQuestion5RadioButton5\",\n\t\"GMSurveyQuestion5RadioButton6\",\n\t\"GMSurveyQuestion5RadioButton7\",\n\t\"GMSurveyQuestion5RadioButton8\",\n\t\"GMSurveyQuestion5RadioButton9\",\n\t\"GMSurveyQuestion6\",\n\t\"GMSurveyQuestion6RadioButton0\",\n\t\"GMSurveyQuestion6RadioButton1\",\n\t\"GMSurveyQuestion6RadioButton10\",\n\t\"GMSurveyQuestion6RadioButton11\",\n\t\"GMSurveyQuestion6RadioButton2\",\n\t\"GMSurveyQuestion6RadioButton3\",\n\t\"GMSurveyQuestion6RadioButton4\",\n\t\"GMSurveyQuestion6RadioButton5\",\n\t\"GMSurveyQuestion6RadioButton6\",\n\t\"GMSurveyQuestion6RadioButton7\",\n\t\"GMSurveyQuestion6RadioButton8\",\n\t\"GMSurveyQuestion6RadioButton9\",\n\t\"GMSurveyQuestion7\",\n\t\"GMSurveyQuestion7RadioButton0\",\n\t\"GMSurveyQuestion7RadioButton1\",\n\t\"GMSurveyQuestion7RadioButton10\",\n\t\"GMSurveyQuestion7RadioButton11\",\n\t\"GMSurveyQuestion7RadioButton2\",\n\t\"GMSurveyQuestion7RadioButton3\",\n\t\"GMSurveyQuestion7RadioButton4\",\n\t\"GMSurveyQuestion7RadioButton5\",\n\t\"GMSurveyQuestion7RadioButton6\",\n\t\"GMSurveyQuestion7RadioButton7\",\n\t\"GMSurveyQuestion7RadioButton8\",\n\t\"GMSurveyQuestion7RadioButton9\",\n\t\"GMSurveyQuestion8\",\n\t\"GMSurveyQuestion8RadioButton0\",\n\t\"GMSurveyQuestion8RadioButton1\",\n\t\"GMSurveyQuestion8RadioButton10\",\n\t\"GMSurveyQuestion8RadioButton11\",\n\t\"GMSurveyQuestion8RadioButton2\",\n\t\"GMSurveyQuestion8RadioButton3\",\n\t\"GMSurveyQuestion8RadioButton4\",\n\t\"GMSurveyQuestion8RadioButton5\",\n\t\"GMSurveyQuestion8RadioButton6\",\n\t\"GMSurveyQuestion8RadioButton7\",\n\t\"GMSurveyQuestion8RadioButton8\",\n\t\"GMSurveyQuestion8RadioButton9\",\n\t\"GMSurveyQuestion9\",\n\t\"GMSurveyQuestion9RadioButton0\",\n\t\"GMSurveyQuestion9RadioButton1\",\n\t\"GMSurveyQuestion9RadioButton10\",\n\t\"GMSurveyQuestion9RadioButton11\",\n\t\"GMSurveyQuestion9RadioButton2\",\n\t\"GMSurveyQuestion9RadioButton3\",\n\t\"GMSurveyQuestion9RadioButton4\",\n\t\"GMSurveyQuestion9RadioButton5\",\n\t\"GMSurveyQuestion9RadioButton6\",\n\t\"GMSurveyQuestion9RadioButton7\",\n\t\"GMSurveyQuestion9RadioButton8\",\n\t\"GMSurveyQuestion9RadioButton9\",\n\t\"GMSurveyScrollChildFrame\",\n\t\"GMSurveyScrollFrame\",\n\t\"GMSurveyScrollFrameScrollBar\",\n\t\"GMSurveyScrollFrameScrollBarScrollDownButton\",\n\t\"GMSurveyScrollFrameScrollBarScrollUpButton\",\n\t\"GMSurveySubmitButton\",\n\t-- frames: Blizzard_GMSurveyUI\n\t\"GMSurveyFrame\",\n\t\"GMSurveyHeader\",\n\t\"GMSurveyScrollFrame\",\n\t\"GMSurveyScrollChildFrame\",\n\t\"GMSurveyQuestion1\",\n\t\"GMSurveyQuestion1RadioButton0\",\n\t\"GMSurveyQuestion1RadioButton1\",\n\t\"GMSurveyQuestion1RadioButton2\",\n\t\"GMSurveyQuestion1RadioButton3\",\n\t\"GMSurveyQuestion1RadioButton4\",\n\t\"GMSurveyQuestion1RadioButton5\",\n\t\"GMSurveyQuestion1RadioButton6\",\n\t\"GMSurveyQuestion1RadioButton7\",\n\t\"GMSurveyQuestion1RadioButton8\",\n\t\"GMSurveyQuestion1RadioButton9\",\n\t\"GMSurveyQuestion1RadioButton10\",\n\t\"GMSurveyQuestion1RadioButton11\",\n\t\"GMSurveyQuestion2\",\n\t\"GMSurveyQuestion2RadioButton0\",\n\t\"GMSurveyQuestion2RadioButton1\",\n\t\"GMSurveyQuestion2RadioButton2\",\n\t\"GMSurveyQuestion2RadioButton3\",\n\t\"GMSurveyQuestion2RadioButton4\",\n\t\"GMSurveyQuestion2RadioButton5\",\n\t\"GMSurveyQuestion2RadioButton6\",\n\t\"GMSurveyQuestion2RadioButton7\",\n\t\"GMSurveyQuestion2RadioButton8\",\n\t\"GMSurveyQuestion2RadioButton9\",\n\t\"GMSurveyQuestion2RadioButton10\",\n\t\"GMSurveyQuestion2RadioButton11\",\n\t\"GMBlock\",\n\t\"GMSurveyQuestion3\",\n\t\"GMSurveyQuestion3RadioButton0\",\n\t\"GMSurveyQuestion3RadioButton1\",\n\t\"GMSurveyQuestion3RadioButton2\",\n\t\"GMSurveyQuestion3RadioButton3\",\n\t\"GMSurveyQuestion3RadioButton4\",\n\t\"GMSurveyQuestion3RadioButton5\",\n\t\"GMSurveyQuestion3RadioButton6\",\n\t\"GMSurveyQuestion3RadioButton7\",\n\t\"GMSurveyQuestion3RadioButton8\",\n\t\"GMSurveyQuestion3RadioButton9\",\n\t\"GMSurveyQuestion3RadioButton10\",\n\t\"GMSurveyQuestion3RadioButton11\",\n\t\"GMSurveyQuestion4\",\n\t\"GMSurveyQuestion4RadioButton0\",\n\t\"GMSurveyQuestion4RadioButton1\",\n\t\"GMSurveyQuestion4RadioButton2\",\n\t\"GMSurveyQuestion4RadioButton3\",\n\t\"GMSurveyQuestion4RadioButton4\",\n\t\"GMSurveyQuestion4RadioButton5\",\n\t\"GMSurveyQuestion4RadioButton6\",\n\t\"GMSurveyQuestion4RadioButton7\",\n\t\"GMSurveyQuestion4RadioButton8\",\n\t\"GMSurveyQuestion4RadioButton9\",\n\t\"GMSurveyQuestion4RadioButton10\",\n\t\"GMSurveyQuestion4RadioButton11\",\n\t\"GMSurveyQuestion5\",\n\t\"GMSurveyQuestion5RadioButton0\",\n\t\"GMSurveyQuestion5RadioButton1\",\n\t\"GMSurveyQuestion5RadioButton2\",\n\t\"GMSurveyQuestion5RadioButton3\",\n\t\"GMSurveyQuestion5RadioButton4\",\n\t\"GMSurveyQuestion5RadioButton5\",\n\t\"GMSurveyQuestion5RadioButton6\",\n\t\"GMSurveyQuestion5RadioButton7\",\n\t\"GMSurveyQuestion5RadioButton8\",\n\t\"GMSurveyQuestion5RadioButton9\",\n\t\"GMSurveyQuestion5RadioButton10\",\n\t\"GMSurveyQuestion5RadioButton11\",\n\t\"GMSurveyQuestion6\",\n\t\"GMSurveyQuestion6RadioButton0\",\n\t\"GMSurveyQuestion6RadioButton1\",\n\t\"GMSurveyQuestion6RadioButton2\",\n\t\"GMSurveyQuestion6RadioButton3\",\n\t\"GMSurveyQuestion6RadioButton4\",\n\t\"GMSurveyQuestion6RadioButton5\",\n\t\"GMSurveyQuestion6RadioButton6\",\n\t\"GMSurveyQuestion6RadioButton7\",\n\t\"GMSurveyQuestion6RadioButton8\",\n\t\"GMSurveyQuestion6RadioButton9\",\n\t\"GMSurveyQuestion6RadioButton10\",\n\t\"GMSurveyQuestion6RadioButton11\",\n\t\"GMSurveyQuestion7\",\n\t\"GMSurveyQuestion7RadioButton0\",\n\t\"GMSurveyQuestion7RadioButton1\",\n\t\"GMSurveyQuestion7RadioButton2\",\n\t\"GMSurveyQuestion7RadioButton3\",\n\t\"GMSurveyQuestion7RadioButton4\",\n\t\"GMSurveyQuestion7RadioButton5\",\n\t\"GMSurveyQuestion7RadioButton6\",\n\t\"GMSurveyQuestion7RadioButton7\",\n\t\"GMSurveyQuestion7RadioButton8\",\n\t\"GMSurveyQuestion7RadioButton9\",\n\t\"GMSurveyQuestion7RadioButton10\",\n\t\"GMSurveyQuestion7RadioButton11\",\n\t\"GMSurveyQuestion8\",\n\t\"GMSurveyQuestion8RadioButton0\",\n\t\"GMSurveyQuestion8RadioButton1\",\n\t\"GMSurveyQuestion8RadioButton2\",\n\t\"GMSurveyQuestion8RadioButton3\",\n\t\"GMSurveyQuestion8RadioButton4\",\n\t\"GMSurveyQuestion8RadioButton5\",\n\t\"GMSurveyQuestion8RadioButton6\",\n\t\"GMSurveyQuestion8RadioButton7\",\n\t\"GMSurveyQuestion8RadioButton8\",\n\t\"GMSurveyQuestion8RadioButton9\",\n\t\"GMSurveyQuestion8RadioButton10\",\n\t\"GMSurveyQuestion8RadioButton11\",\n\t\"GMSurveyQuestion9\",\n\t\"GMSurveyQuestion9RadioButton0\",\n\t\"GMSurveyQuestion9RadioButton1\",\n\t\"GMSurveyQuestion9RadioButton2\",\n\t\"GMSurveyQuestion9RadioButton3\",\n\t\"GMSurveyQuestion9RadioButton4\",\n\t\"GMSurveyQuestion9RadioButton5\",\n\t\"GMSurveyQuestion9RadioButton6\",\n\t\"GMSurveyQuestion9RadioButton7\",\n\t\"GMSurveyQuestion9RadioButton8\",\n\t\"GMSurveyQuestion9RadioButton9\",\n\t\"GMSurveyQuestion9RadioButton10\",\n\t\"GMSurveyQuestion9RadioButton11\",\n\t\"GMSurveyQuestion10\",\n\t\"GMSurveyQuestion10RadioButton0\",\n\t\"GMSurveyQuestion10RadioButton1\",\n\t\"GMSurveyQuestion10RadioButton2\",\n\t\"GMSurveyQuestion10RadioButton3\",\n\t\"GMSurveyQuestion10RadioButton4\",\n\t\"GMSurveyQuestion10RadioButton5\",\n\t\"GMSurveyQuestion10RadioButton6\",\n\t\"GMSurveyQuestion10RadioButton7\",\n\t\"GMSurveyQuestion10RadioButton8\",\n\t\"GMSurveyQuestion10RadioButton9\",\n\t\"GMSurveyQuestion10RadioButton10\",\n\t\"GMSurveyQuestion10RadioButton11\",\n\t\"GMSurveyCommentFrame\",\n\t\"GMSurveyCommentScrollFrame\",\n\t\"GMSurveyFrameComment\",\n\t\"GMSurveyCommentScrollFrameScrollBar\",\n\t\"GMSurveyCommentScrollFrameScrollBarScrollUpButton\",\n\t\"GMSurveyCommentScrollFrameScrollBarScrollDownButton\",\n\t\"GMSurveyScrollFrameScrollBar\",\n\t\"GMSurveyScrollFrameScrollBarScrollUpButton\",\n\t\"GMSurveyScrollFrameScrollBarScrollDownButton\",\n\t\"GMSurveyCloseButton\",\n\t\"GMSurveyCancelButton\",\n\t\"GMSurveySubmitButton\",\n\t-- widgets: Blizzard_GMSurveyUI\n\t\"GMBlockText\",\n\t\"GMSurveyAdditionalCommentsText\",\n\t\"GMSurveyBottom\",\n\t\"GMSurveyBottomFiller\",\n\t\"GMSurveyBottomLeft\",\n\t\"GMSurveyBottomRight\",\n\t\"GMSurveyCancelButtonText\",\n\t\"GMSurveyCommentScrollFrameScrollBarThumbTexture\",\n\t\"GMSurveyHeaderCenter\",\n\t\"GMSurveyHeaderLeft\",\n\t\"GMSurveyHeaderRight\",\n\t\"GMSurveyHeaderText\",\n\t\"GMSurveyLeft\",\n\t\"GMSurveyMiddle\",\n\t\"GMSurveyMiddleFiller\",\n\t\"GMSurveyQuestion10RadioButton0Score\",\n\t\"GMSurveyQuestion10RadioButton0Text\",\n\t\"GMSurveyQuestion10RadioButton10Score\",\n\t\"GMSurveyQuestion10RadioButton10Text\",\n\t\"GMSurveyQuestion10RadioButton11NetPromoterHigh\",\n\t\"GMSurveyQuestion10RadioButton11Score\",\n\t\"GMSurveyQuestion10RadioButton11Text\",\n\t\"GMSurveyQuestion10RadioButton1NetPromoterLow\",\n\t\"GMSurveyQuestion10RadioButton1Score\",\n\t\"GMSurveyQuestion10RadioButton1Text\",\n\t\"GMSurveyQuestion10RadioButton2Score\",\n\t\"GMSurveyQuestion10RadioButton2Text\",\n\t\"GMSurveyQuestion10RadioButton3Score\",\n\t\"GMSurveyQuestion10RadioButton3Text\",\n\t\"GMSurveyQuestion10RadioButton4Score\",\n\t\"GMSurveyQuestion10RadioButton4Text\",\n\t\"GMSurveyQuestion10RadioButton5Score\",\n\t\"GMSurveyQuestion10RadioButton5Text\",\n\t\"GMSurveyQuestion10RadioButton6Score\",\n\t\"GMSurveyQuestion10RadioButton6Text\",\n\t\"GMSurveyQuestion10RadioButton7Score\",\n\t\"GMSurveyQuestion10RadioButton7Text\",\n\t\"GMSurveyQuestion10RadioButton8Score\",\n\t\"GMSurveyQuestion10RadioButton8Text\",\n\t\"GMSurveyQuestion10RadioButton9Score\",\n\t\"GMSurveyQuestion10RadioButton9Text\",\n\t\"GMSurveyQuestion10Text\",\n\t\"GMSurveyQuestion1RadioButton0Score\",\n\t\"GMSurveyQuestion1RadioButton0Text\",\n\t\"GMSurveyQuestion1RadioButton10Score\",\n\t\"GMSurveyQuestion1RadioButton10Text\",\n\t\"GMSurveyQuestion1RadioButton11NetPromoterHigh\",\n\t\"GMSurveyQuestion1RadioButton11Score\",\n\t\"GMSurveyQuestion1RadioButton11Text\",\n\t\"GMSurveyQuestion1RadioButton1NetPromoterLow\",\n\t\"GMSurveyQuestion1RadioButton1Score\",\n\t\"GMSurveyQuestion1RadioButton1Text\",\n\t\"GMSurveyQuestion1RadioButton2Score\",\n\t\"GMSurveyQuestion1RadioButton2Text\",\n\t\"GMSurveyQuestion1RadioButton3Score\",\n\t\"GMSurveyQuestion1RadioButton3Text\",\n\t\"GMSurveyQuestion1RadioButton4Score\",\n\t\"GMSurveyQuestion1RadioButton4Text\",\n\t\"GMSurveyQuestion1RadioButton5Score\",\n\t\"GMSurveyQuestion1RadioButton5Text\",\n\t\"GMSurveyQuestion1RadioButton6Score\",\n\t\"GMSurveyQuestion1RadioButton6Text\",\n\t\"GMSurveyQuestion1RadioButton7Score\",\n\t\"GMSurveyQuestion1RadioButton7Text\",\n\t\"GMSurveyQuestion1RadioButton8Score\",\n\t\"GMSurveyQuestion1RadioButton8Text\",\n\t\"GMSurveyQuestion1RadioButton9Score\",\n\t\"GMSurveyQuestion1RadioButton9Text\",\n\t\"GMSurveyQuestion1Text\",\n\t\"GMSurveyQuestion2RadioButton0Score\",\n\t\"GMSurveyQuestion2RadioButton0Text\",\n\t\"GMSurveyQuestion2RadioButton10Score\",\n\t\"GMSurveyQuestion2RadioButton10Text\",\n\t\"GMSurveyQuestion2RadioButton11NetPromoterHigh\",\n\t\"GMSurveyQuestion2RadioButton11Score\",\n\t\"GMSurveyQuestion2RadioButton11Text\",\n\t\"GMSurveyQuestion2RadioButton1NetPromoterLow\",\n\t\"GMSurveyQuestion2RadioButton1Score\",\n\t\"GMSurveyQuestion2RadioButton1Text\",\n\t\"GMSurveyQuestion2RadioButton2Score\",\n\t\"GMSurveyQuestion2RadioButton2Text\",\n\t\"GMSurveyQuestion2RadioButton3Score\",\n\t\"GMSurveyQuestion2RadioButton3Text\",\n\t\"GMSurveyQuestion2RadioButton4Score\",\n\t\"GMSurveyQuestion2RadioButton4Text\",\n\t\"GMSurveyQuestion2RadioButton5Score\",\n\t\"GMSurveyQuestion2RadioButton5Text\",\n\t\"GMSurveyQuestion2RadioButton6Score\",\n\t\"GMSurveyQuestion2RadioButton6Text\",\n\t\"GMSurveyQuestion2RadioButton7Score\",\n\t\"GMSurveyQuestion2RadioButton7Text\",\n\t\"GMSurveyQuestion2RadioButton8Score\",\n\t\"GMSurveyQuestion2RadioButton8Text\",\n\t\"GMSurveyQuestion2RadioButton9Score\",\n\t\"GMSurveyQuestion2RadioButton9Text\",\n\t\"GMSurveyQuestion2Text\",\n\t\"GMSurveyQuestion3RadioButton0Score\",\n\t\"GMSurveyQuestion3RadioButton0Text\",\n\t\"GMSurveyQuestion3RadioButton10Score\",\n\t\"GMSurveyQuestion3RadioButton10Text\",\n\t\"GMSurveyQuestion3RadioButton11NetPromoterHigh\",\n\t\"GMSurveyQuestion3RadioButton11Score\",\n\t\"GMSurveyQuestion3RadioButton11Text\",\n\t\"GMSurveyQuestion3RadioButton1NetPromoterLow\",\n\t\"GMSurveyQuestion3RadioButton1Score\",\n\t\"GMSurveyQuestion3RadioButton1Text\",\n\t\"GMSurveyQuestion3RadioButton2Score\",\n\t\"GMSurveyQuestion3RadioButton2Text\",\n\t\"GMSurveyQuestion3RadioButton3Score\",\n\t\"GMSurveyQuestion3RadioButton3Text\",\n\t\"GMSurveyQuestion3RadioButton4Score\",\n\t\"GMSurveyQuestion3RadioButton4Text\",\n\t\"GMSurveyQuestion3RadioButton5Score\",\n\t\"GMSurveyQuestion3RadioButton5Text\",\n\t\"GMSurveyQuestion3RadioButton6Score\",\n\t\"GMSurveyQuestion3RadioButton6Text\",\n\t\"GMSurveyQuestion3RadioButton7Score\",\n\t\"GMSurveyQuestion3RadioButton7Text\",\n\t\"GMSurveyQuestion3RadioButton8Score\",\n\t\"GMSurveyQuestion3RadioButton8Text\",\n\t\"GMSurveyQuestion3RadioButton9Score\",\n\t\"GMSurveyQuestion3RadioButton9Text\",\n\t\"GMSurveyQuestion3Text\",\n\t\"GMSurveyQuestion4RadioButton0Score\",\n\t\"GMSurveyQuestion4RadioButton0Text\",\n\t\"GMSurveyQuestion4RadioButton10Score\",\n\t\"GMSurveyQuestion4RadioButton10Text\",\n\t\"GMSurveyQuestion4RadioButton11NetPromoterHigh\",\n\t\"GMSurveyQuestion4RadioButton11Score\",\n\t\"GMSurveyQuestion4RadioButton11Text\",\n\t\"GMSurveyQuestion4RadioButton1NetPromoterLow\",\n\t\"GMSurveyQuestion4RadioButton1Score\",\n\t\"GMSurveyQuestion4RadioButton1Text\",\n\t\"GMSurveyQuestion4RadioButton2Score\",\n\t\"GMSurveyQuestion4RadioButton2Text\",\n\t\"GMSurveyQuestion4RadioButton3Score\",\n\t\"GMSurveyQuestion4RadioButton3Text\",\n\t\"GMSurveyQuestion4RadioButton4Score\",\n\t\"GMSurveyQuestion4RadioButton4Text\",\n\t\"GMSurveyQuestion4RadioButton5Score\",\n\t\"GMSurveyQuestion4RadioButton5Text\",\n\t\"GMSurveyQuestion4RadioButton6Score\",\n\t\"GMSurveyQuestion4RadioButton6Text\",\n\t\"GMSurveyQuestion4RadioButton7Score\",\n\t\"GMSurveyQuestion4RadioButton7Text\",\n\t\"GMSurveyQuestion4RadioButton8Score\",\n\t\"GMSurveyQuestion4RadioButton8Text\",\n\t\"GMSurveyQuestion4RadioButton9Score\",\n\t\"GMSurveyQuestion4RadioButton9Text\",\n\t\"GMSurveyQuestion4Text\",\n\t\"GMSurveyQuestion5RadioButton0Score\",\n\t\"GMSurveyQuestion5RadioButton0Text\",\n\t\"GMSurveyQuestion5RadioButton10Score\",\n\t\"GMSurveyQuestion5RadioButton10Text\",\n\t\"GMSurveyQuestion5RadioButton11NetPromoterHigh\",\n\t\"GMSurveyQuestion5RadioButton11Score\",\n\t\"GMSurveyQuestion5RadioButton11Text\",\n\t\"GMSurveyQuestion5RadioButton1NetPromoterLow\",\n\t\"GMSurveyQuestion5RadioButton1Score\",\n\t\"GMSurveyQuestion5RadioButton1Text\",\n\t\"GMSurveyQuestion5RadioButton2Score\",\n\t\"GMSurveyQuestion5RadioButton2Text\",\n\t\"GMSurveyQuestion5RadioButton3Score\",\n\t\"GMSurveyQuestion5RadioButton3Text\",\n\t\"GMSurveyQuestion5RadioButton4Score\",\n\t\"GMSurveyQuestion5RadioButton4Text\",\n\t\"GMSurveyQuestion5RadioButton5Score\",\n\t\"GMSurveyQuestion5RadioButton5Text\",\n\t\"GMSurveyQuestion5RadioButton6Score\",\n\t\"GMSurveyQuestion5RadioButton6Text\",\n\t\"GMSurveyQuestion5RadioButton7Score\",\n\t\"GMSurveyQuestion5RadioButton7Text\",\n\t\"GMSurveyQuestion5RadioButton8Score\",\n\t\"GMSurveyQuestion5RadioButton8Text\",\n\t\"GMSurveyQuestion5RadioButton9Score\",\n\t\"GMSurveyQuestion5RadioButton9Text\",\n\t\"GMSurveyQuestion5Text\",\n\t\"GMSurveyQuestion6RadioButton0Score\",\n\t\"GMSurveyQuestion6RadioButton0Text\",\n\t\"GMSurveyQuestion6RadioButton10Score\",\n\t\"GMSurveyQuestion6RadioButton10Text\",\n\t\"GMSurveyQuestion6RadioButton11NetPromoterHigh\",\n\t\"GMSurveyQuestion6RadioButton11Score\",\n\t\"GMSurveyQuestion6RadioButton11Text\",\n\t\"GMSurveyQuestion6RadioButton1NetPromoterLow\",\n\t\"GMSurveyQuestion6RadioButton1Score\",\n\t\"GMSurveyQuestion6RadioButton1Text\",\n\t\"GMSurveyQuestion6RadioButton2Score\",\n\t\"GMSurveyQuestion6RadioButton2Text\",\n\t\"GMSurveyQuestion6RadioButton3Score\",\n\t\"GMSurveyQuestion6RadioButton3Text\",\n\t\"GMSurveyQuestion6RadioButton4Score\",\n\t\"GMSurveyQuestion6RadioButton4Text\",\n\t\"GMSurveyQuestion6RadioButton5Score\",\n\t\"GMSurveyQuestion6RadioButton5Text\",\n\t\"GMSurveyQuestion6RadioButton6Score\",\n\t\"GMSurveyQuestion6RadioButton6Text\",\n\t\"GMSurveyQuestion6RadioButton7Score\",\n\t\"GMSurveyQuestion6RadioButton7Text\",\n\t\"GMSurveyQuestion6RadioButton8Score\",\n\t\"GMSurveyQuestion6RadioButton8Text\",\n\t\"GMSurveyQuestion6RadioButton9Score\",\n\t\"GMSurveyQuestion6RadioButton9Text\",\n\t\"GMSurveyQuestion6Text\",\n\t\"GMSurveyQuestion7RadioButton0Score\",\n\t\"GMSurveyQuestion7RadioButton0Text\",\n\t\"GMSurveyQuestion7RadioButton10Score\",\n\t\"GMSurveyQuestion7RadioButton10Text\",\n\t\"GMSurveyQuestion7RadioButton11NetPromoterHigh\",\n\t\"GMSurveyQuestion7RadioButton11Score\",\n\t\"GMSurveyQuestion7RadioButton11Text\",\n\t\"GMSurveyQuestion7RadioButton1NetPromoterLow\",\n\t\"GMSurveyQuestion7RadioButton1Score\",\n\t\"GMSurveyQuestion7RadioButton1Text\",\n\t\"GMSurveyQuestion7RadioButton2Score\",\n\t\"GMSurveyQuestion7RadioButton2Text\",\n\t\"GMSurveyQuestion7RadioButton3Score\",\n\t\"GMSurveyQuestion7RadioButton3Text\",\n\t\"GMSurveyQuestion7RadioButton4Score\",\n\t\"GMSurveyQuestion7RadioButton4Text\",\n\t\"GMSurveyQuestion7RadioButton5Score\",\n\t\"GMSurveyQuestion7RadioButton5Text\",\n\t\"GMSurveyQuestion7RadioButton6Score\",\n\t\"GMSurveyQuestion7RadioButton6Text\",\n\t\"GMSurveyQuestion7RadioButton7Score\",\n\t\"GMSurveyQuestion7RadioButton7Text\",\n\t\"GMSurveyQuestion7RadioButton8Score\",\n\t\"GMSurveyQuestion7RadioButton8Text\",\n\t\"GMSurveyQuestion7RadioButton9Score\",\n\t\"GMSurveyQuestion7RadioButton9Text\",\n\t\"GMSurveyQuestion7Text\",\n\t\"GMSurveyQuestion8RadioButton0Score\",\n\t\"GMSurveyQuestion8RadioButton0Text\",\n\t\"GMSurveyQuestion8RadioButton10Score\",\n\t\"GMSurveyQuestion8RadioButton10Text\",\n\t\"GMSurveyQuestion8RadioButton11NetPromoterHigh\",\n\t\"GMSurveyQuestion8RadioButton11Score\",\n\t\"GMSurveyQuestion8RadioButton11Text\",\n\t\"GMSurveyQuestion8RadioButton1NetPromoterLow\",\n\t\"GMSurveyQuestion8RadioButton1Score\",\n\t\"GMSurveyQuestion8RadioButton1Text\",\n\t\"GMSurveyQuestion8RadioButton2Score\",\n\t\"GMSurveyQuestion8RadioButton2Text\",\n\t\"GMSurveyQuestion8RadioButton3Score\",\n\t\"GMSurveyQuestion8RadioButton3Text\",\n\t\"GMSurveyQuestion8RadioButton4Score\",\n\t\"GMSurveyQuestion8RadioButton4Text\",\n\t\"GMSurveyQuestion8RadioButton5Score\",\n\t\"GMSurveyQuestion8RadioButton5Text\",\n\t\"GMSurveyQuestion8RadioButton6Score\",\n\t\"GMSurveyQuestion8RadioButton6Text\",\n\t\"GMSurveyQuestion8RadioButton7Score\",\n\t\"GMSurveyQuestion8RadioButton7Text\",\n\t\"GMSurveyQuestion8RadioButton8Score\",\n\t\"GMSurveyQuestion8RadioButton8Text\",\n\t\"GMSurveyQuestion8RadioButton9Score\",\n\t\"GMSurveyQuestion8RadioButton9Text\",\n\t\"GMSurveyQuestion8Text\",\n\t\"GMSurveyQuestion9RadioButton0Score\",\n\t\"GMSurveyQuestion9RadioButton0Text\",\n\t\"GMSurveyQuestion9RadioButton10Score\",\n\t\"GMSurveyQuestion9RadioButton10Text\",\n\t\"GMSurveyQuestion9RadioButton11NetPromoterHigh\",\n\t\"GMSurveyQuestion9RadioButton11Score\",\n\t\"GMSurveyQuestion9RadioButton11Text\",\n\t\"GMSurveyQuestion9RadioButton1NetPromoterLow\",\n\t\"GMSurveyQuestion9RadioButton1Score\",\n\t\"GMSurveyQuestion9RadioButton1Text\",\n\t\"GMSurveyQuestion9RadioButton2Score\",\n\t\"GMSurveyQuestion9RadioButton2Text\",\n\t\"GMSurveyQuestion9RadioButton3Score\",\n\t\"GMSurveyQuestion9RadioButton3Text\",\n\t\"GMSurveyQuestion9RadioButton4Score\",\n\t\"GMSurveyQuestion9RadioButton4Text\",\n\t\"GMSurveyQuestion9RadioButton5Score\",\n\t\"GMSurveyQuestion9RadioButton5Text\",\n\t\"GMSurveyQuestion9RadioButton6Score\",\n\t\"GMSurveyQuestion9RadioButton6Text\",\n\t\"GMSurveyQuestion9RadioButton7Score\",\n\t\"GMSurveyQuestion9RadioButton7Text\",\n\t\"GMSurveyQuestion9RadioButton8Score\",\n\t\"GMSurveyQuestion9RadioButton8Text\",\n\t\"GMSurveyQuestion9RadioButton9Score\",\n\t\"GMSurveyQuestion9RadioButton9Text\",\n\t\"GMSurveyQuestion9Text\",\n\t\"GMSurveyRight\",\n\t\"GMSurveyScrollFrameBottom\",\n\t\"GMSurveyScrollFrameMiddle\",\n\t\"GMSurveyScrollFrameScrollBarThumbTexture\",\n\t\"GMSurveyScrollFrameTop\",\n\t\"GMSurveySubmitButtonText\",\n\t\"GMSurveyTop\",\n\t\"GMSurveyTopFiller\",\n\t\"GMSurveyTopLeft\",\n\t\"GMSurveyTopRight\",\n\n\t-- functions: Blizzard_GlyphUI\n\t\"GlyphFrameGlyph_OnClick\",\n\t\"GlyphFrameGlyph_OnEnter\",\n\t\"GlyphFrameGlyph_OnLeave\",\n\t\"GlyphFrameGlyph_OnLoad\",\n\t\"GlyphFrameGlyph_OnUpdate\",\n\t\"GlyphFrameGlyph_SetGlyphType\",\n\t\"GlyphFrameGlyph_UpdateSlot\",\n\t\"GlyphFrame_OnEnter\",\n\t\"GlyphFrame_OnEvent\",\n\t\"GlyphFrame_OnLeave\",\n\t\"GlyphFrame_OnLoad\",\n\t\"GlyphFrame_OnShow\",\n\t\"GlyphFrame_OnUpdate\",\n\t\"GlyphFrame_Open\",\n\t\"GlyphFrame_PulseGlow\",\n\t\"GlyphFrame_StartSlotAnimation\",\n\t\"GlyphFrame_StopSlotAnimation\",\n\t\"GlyphFrame_Toggle\",\n\t\"GlyphFrame_Update\",\n\t-- tables: Blizzard_GlyphUI\n\t\"GLYPH_MAJOR\",\n\t\"GLYPH_MINOR\",\n\t\"GLYPH_SLOTS\",\n\t\"GlyphFrame\",\n\t\"GlyphFrameGlyph1\",\n\t\"GlyphFrameGlyph2\",\n\t\"GlyphFrameGlyph3\",\n\t\"GlyphFrameGlyph4\",\n\t\"GlyphFrameGlyph5\",\n\t\"GlyphFrameGlyph6\",\n\t\"GlyphFrameSparkleFrame\",\n\t-- frames: Blizzard_GlyphUI\n\t\"GlyphFrame\",\n\t\"GlyphFrameGlyph1\",\n\t\"GlyphFrameGlyph4\",\n\t\"GlyphFrameGlyph6\",\n\t\"GlyphFrameGlyph2\",\n\t\"GlyphFrameGlyph5\",\n\t\"GlyphFrameGlyph3\",\n\t\"GlyphFrameSparkleFrame\",\n\t-- widgets: Blizzard_GlyphUI\n\t\"GlyphFrameBackground\",\n\t\"GlyphFrameGlow\",\n\t\"GlyphFrameGlowPulse\",\n\t\"GlyphFrameGlowPulseIn\",\n\t\"GlyphFrameGlowPulseOut\",\n\t\"GlyphFrameGlyph1Background\",\n\t\"GlyphFrameGlyph1Glyph\",\n\t\"GlyphFrameGlyph1Highlight\",\n\t\"GlyphFrameGlyph1Ring\",\n\t\"GlyphFrameGlyph1Setting\",\n\t\"GlyphFrameGlyph1Shine\",\n\t\"GlyphFrameGlyph2Background\",\n\t\"GlyphFrameGlyph2Glyph\",\n\t\"GlyphFrameGlyph2Highlight\",\n\t\"GlyphFrameGlyph2Ring\",\n\t\"GlyphFrameGlyph2Setting\",\n\t\"GlyphFrameGlyph2Shine\",\n\t\"GlyphFrameGlyph3Background\",\n\t\"GlyphFrameGlyph3Glyph\",\n\t\"GlyphFrameGlyph3Highlight\",\n\t\"GlyphFrameGlyph3Ring\",\n\t\"GlyphFrameGlyph3Setting\",\n\t\"GlyphFrameGlyph3Shine\",\n\t\"GlyphFrameGlyph4Background\",\n\t\"GlyphFrameGlyph4Glyph\",\n\t\"GlyphFrameGlyph4Highlight\",\n\t\"GlyphFrameGlyph4Ring\",\n\t\"GlyphFrameGlyph4Setting\",\n\t\"GlyphFrameGlyph4Shine\",\n\t\"GlyphFrameGlyph5Background\",\n\t\"GlyphFrameGlyph5Glyph\",\n\t\"GlyphFrameGlyph5Highlight\",\n\t\"GlyphFrameGlyph5Ring\",\n\t\"GlyphFrameGlyph5Setting\",\n\t\"GlyphFrameGlyph5Shine\",\n\t\"GlyphFrameGlyph6Background\",\n\t\"GlyphFrameGlyph6Glyph\",\n\t\"GlyphFrameGlyph6Highlight\",\n\t\"GlyphFrameGlyph6Ring\",\n\t\"GlyphFrameGlyph6Setting\",\n\t\"GlyphFrameGlyph6Shine\",\n\t\"GlyphFrameTitleText\",\n\n\t-- functions: Blizzard_GuildBankUI\n\t\"GuildBankFrameTab_OnClick\",\n\t\"GuildBankFrame_ChangeBackground\",\n\t\"GuildBankFrame_ChangeBorder\",\n\t\"GuildBankFrame_ChangeEmblem\",\n\t\"GuildBankFrame_DesaturateColumns\",\n\t\"GuildBankFrame_HideColumns\",\n\t\"GuildBankFrame_OnEvent\",\n\t\"GuildBankFrame_OnLoad\",\n\t\"GuildBankFrame_OnShow\",\n\t\"GuildBankFrame_SelectAvailableTab\",\n\t\"GuildBankFrame_ShowColumns\",\n\t\"GuildBankFrame_Update\",\n\t\"GuildBankFrame_UpdateEmblem\",\n\t\"GuildBankFrame_UpdateLog\",\n\t\"GuildBankFrame_UpdateMoneyLog\",\n\t\"GuildBankFrame_UpdateTabBuyingInfo\",\n\t\"GuildBankFrame_UpdateTabInfo\",\n\t\"GuildBankFrame_UpdateTabard\",\n\t\"GuildBankFrame_UpdateTabs\",\n\t\"GuildBankFrame_UpdateWithdrawMoney\",\n\t\"GuildBankItemButton_OnEnter\",\n\t\"GuildBankItemButton_OnLoad\",\n\t\"GuildBankLogScroll\",\n\t\"GuildBankPopupButton_OnClick\",\n\t\"GuildBankPopupFrame_CancelEdit\",\n\t\"GuildBankPopupFrame_OnShow\",\n\t\"GuildBankPopupFrame_Update\",\n\t\"GuildBankPopupOkayButton_OnClick\",\n\t\"GuildBankTab_OnClick\",\n\t\"HandleModifiedItemClick\",\n\t\"IsTabViewable\",\n\t\"SetItemButtonCount\",\n\t\"SetItemButtonDesaturated\",\n\t\"SetItemButtonNameFrameVertexColor\",\n\t\"SetItemButtonNormalTextureVertexColor\",\n\t\"SetItemButtonSlotVertexColor\",\n\t\"SetItemButtonStock\",\n\t\"SetItemButtonTexture\",\n\t\"SetItemButtonTextureVertexColor\",\n\t-- tables: Blizzard_GuildBankUI\n\t\"GuildBankColumn1\",\n\t\"GuildBankColumn1Button1\",\n\t\"GuildBankColumn1Button10\",\n\t\"GuildBankColumn1Button10Cooldown\",\n\t\"GuildBankColumn1Button11\",\n\t\"GuildBankColumn1Button11Cooldown\",\n\t\"GuildBankColumn1Button12\",\n\t\"GuildBankColumn1Button12Cooldown\",\n\t\"GuildBankColumn1Button13\",\n\t\"GuildBankColumn1Button13Cooldown\",\n\t\"GuildBankColumn1Button14\",\n\t\"GuildBankColumn1Button14Cooldown\",\n\t\"GuildBankColumn1Button1Cooldown\",\n\t\"GuildBankColumn1Button2\",\n\t\"GuildBankColumn1Button2Cooldown\",\n\t\"GuildBankColumn1Button3\",\n\t\"GuildBankColumn1Button3Cooldown\",\n\t\"GuildBankColumn1Button4\",\n\t\"GuildBankColumn1Button4Cooldown\",\n\t\"GuildBankColumn1Button5\",\n\t\"GuildBankColumn1Button5Cooldown\",\n\t\"GuildBankColumn1Button6\",\n\t\"GuildBankColumn1Button6Cooldown\",\n\t\"GuildBankColumn1Button7\",\n\t\"GuildBankColumn1Button7Cooldown\",\n\t\"GuildBankColumn1Button8\",\n\t\"GuildBankColumn1Button8Cooldown\",\n\t\"GuildBankColumn1Button9\",\n\t\"GuildBankColumn1Button9Cooldown\",\n\t\"GuildBankColumn2\",\n\t\"GuildBankColumn2Button1\",\n\t\"GuildBankColumn2Button10\",\n\t\"GuildBankColumn2Button10Cooldown\",\n\t\"GuildBankColumn2Button11\",\n\t\"GuildBankColumn2Button11Cooldown\",\n\t\"GuildBankColumn2Button12\",\n\t\"GuildBankColumn2Button12Cooldown\",\n\t\"GuildBankColumn2Button13\",\n\t\"GuildBankColumn2Button13Cooldown\",\n\t\"GuildBankColumn2Button14\",\n\t\"GuildBankColumn2Button14Cooldown\",\n\t\"GuildBankColumn2Button1Cooldown\",\n\t\"GuildBankColumn2Button2\",\n\t\"GuildBankColumn2Button2Cooldown\",\n\t\"GuildBankColumn2Button3\",\n\t\"GuildBankColumn2Button3Cooldown\",\n\t\"GuildBankColumn2Button4\",\n\t\"GuildBankColumn2Button4Cooldown\",\n\t\"GuildBankColumn2Button5\",\n\t\"GuildBankColumn2Button5Cooldown\",\n\t\"GuildBankColumn2Button6\",\n\t\"GuildBankColumn2Button6Cooldown\",\n\t\"GuildBankColumn2Button7\",\n\t\"GuildBankColumn2Button7Cooldown\",\n\t\"GuildBankColumn2Button8\",\n\t\"GuildBankColumn2Button8Cooldown\",\n\t\"GuildBankColumn2Button9\",\n\t\"GuildBankColumn2Button9Cooldown\",\n\t\"GuildBankColumn3\",\n\t\"GuildBankColumn3Button1\",\n\t\"GuildBankColumn3Button10\",\n\t\"GuildBankColumn3Button10Cooldown\",\n\t\"GuildBankColumn3Button11\",\n\t\"GuildBankColumn3Button11Cooldown\",\n\t\"GuildBankColumn3Button12\",\n\t\"GuildBankColumn3Button12Cooldown\",\n\t\"GuildBankColumn3Button13\",\n\t\"GuildBankColumn3Button13Cooldown\",\n\t\"GuildBankColumn3Button14\",\n\t\"GuildBankColumn3Button14Cooldown\",\n\t\"GuildBankColumn3Button1Cooldown\",\n\t\"GuildBankColumn3Button2\",\n\t\"GuildBankColumn3Button2Cooldown\",\n\t\"GuildBankColumn3Button3\",\n\t\"GuildBankColumn3Button3Cooldown\",\n\t\"GuildBankColumn3Button4\",\n\t\"GuildBankColumn3Button4Cooldown\",\n\t\"GuildBankColumn3Button5\",\n\t\"GuildBankColumn3Button5Cooldown\",\n\t\"GuildBankColumn3Button6\",\n\t\"GuildBankColumn3Button6Cooldown\",\n\t\"GuildBankColumn3Button7\",\n\t\"GuildBankColumn3Button7Cooldown\",\n\t\"GuildBankColumn3Button8\",\n\t\"GuildBankColumn3Button8Cooldown\",\n\t\"GuildBankColumn3Button9\",\n\t\"GuildBankColumn3Button9Cooldown\",\n\t\"GuildBankColumn4\",\n\t\"GuildBankColumn4Button1\",\n\t\"GuildBankColumn4Button10\",\n\t\"GuildBankColumn4Button10Cooldown\",\n\t\"GuildBankColumn4Button11\",\n\t\"GuildBankColumn4Button11Cooldown\",\n\t\"GuildBankColumn4Button12\",\n\t\"GuildBankColumn4Button12Cooldown\",\n\t\"GuildBankColumn4Button13\",\n\t\"GuildBankColumn4Button13Cooldown\",\n\t\"GuildBankColumn4Button14\",\n\t\"GuildBankColumn4Button14Cooldown\",\n\t\"GuildBankColumn4Button1Cooldown\",\n\t\"GuildBankColumn4Button2\",\n\t\"GuildBankColumn4Button2Cooldown\",\n\t\"GuildBankColumn4Button3\",\n\t\"GuildBankColumn4Button3Cooldown\",\n\t\"GuildBankColumn4Button4\",\n\t\"GuildBankColumn4Button4Cooldown\",\n\t\"GuildBankColumn4Button5\",\n\t\"GuildBankColumn4Button5Cooldown\",\n\t\"GuildBankColumn4Button6\",\n\t\"GuildBankColumn4Button6Cooldown\",\n\t\"GuildBankColumn4Button7\",\n\t\"GuildBankColumn4Button7Cooldown\",\n\t\"GuildBankColumn4Button8\",\n\t\"GuildBankColumn4Button8Cooldown\",\n\t\"GuildBankColumn4Button9\",\n\t\"GuildBankColumn4Button9Cooldown\",\n\t\"GuildBankColumn5\",\n\t\"GuildBankColumn5Button1\",\n\t\"GuildBankColumn5Button10\",\n\t\"GuildBankColumn5Button10Cooldown\",\n\t\"GuildBankColumn5Button11\",\n\t\"GuildBankColumn5Button11Cooldown\",\n\t\"GuildBankColumn5Button12\",\n\t\"GuildBankColumn5Button12Cooldown\",\n\t\"GuildBankColumn5Button13\",\n\t\"GuildBankColumn5Button13Cooldown\",\n\t\"GuildBankColumn5Button14\",\n\t\"GuildBankColumn5Button14Cooldown\",\n\t\"GuildBankColumn5Button1Cooldown\",\n\t\"GuildBankColumn5Button2\",\n\t\"GuildBankColumn5Button2Cooldown\",\n\t\"GuildBankColumn5Button3\",\n\t\"GuildBankColumn5Button3Cooldown\",\n\t\"GuildBankColumn5Button4\",\n\t\"GuildBankColumn5Button4Cooldown\",\n\t\"GuildBankColumn5Button5\",\n\t\"GuildBankColumn5Button5Cooldown\",\n\t\"GuildBankColumn5Button6\",\n\t\"GuildBankColumn5Button6Cooldown\",\n\t\"GuildBankColumn5Button7\",\n\t\"GuildBankColumn5Button7Cooldown\",\n\t\"GuildBankColumn5Button8\",\n\t\"GuildBankColumn5Button8Cooldown\",\n\t\"GuildBankColumn5Button9\",\n\t\"GuildBankColumn5Button9Cooldown\",\n\t\"GuildBankColumn6\",\n\t\"GuildBankColumn6Button1\",\n\t\"GuildBankColumn6Button10\",\n\t\"GuildBankColumn6Button10Cooldown\",\n\t\"GuildBankColumn6Button11\",\n\t\"GuildBankColumn6Button11Cooldown\",\n\t\"GuildBankColumn6Button12\",\n\t\"GuildBankColumn6Button12Cooldown\",\n\t\"GuildBankColumn6Button13\",\n\t\"GuildBankColumn6Button13Cooldown\",\n\t\"GuildBankColumn6Button14\",\n\t\"GuildBankColumn6Button14Cooldown\",\n\t\"GuildBankColumn6Button1Cooldown\",\n\t\"GuildBankColumn6Button2\",\n\t\"GuildBankColumn6Button2Cooldown\",\n\t\"GuildBankColumn6Button3\",\n\t\"GuildBankColumn6Button3Cooldown\",\n\t\"GuildBankColumn6Button4\",\n\t\"GuildBankColumn6Button4Cooldown\",\n\t\"GuildBankColumn6Button5\",\n\t\"GuildBankColumn6Button5Cooldown\",\n\t\"GuildBankColumn6Button6\",\n\t\"GuildBankColumn6Button6Cooldown\",\n\t\"GuildBankColumn6Button7\",\n\t\"GuildBankColumn6Button7Cooldown\",\n\t\"GuildBankColumn6Button8\",\n\t\"GuildBankColumn6Button8Cooldown\",\n\t\"GuildBankColumn6Button9\",\n\t\"GuildBankColumn6Button9Cooldown\",\n\t\"GuildBankColumn7\",\n\t\"GuildBankColumn7Button1\",\n\t\"GuildBankColumn7Button10\",\n\t\"GuildBankColumn7Button10Cooldown\",\n\t\"GuildBankColumn7Button11\",\n\t\"GuildBankColumn7Button11Cooldown\",\n\t\"GuildBankColumn7Button12\",\n\t\"GuildBankColumn7Button12Cooldown\",\n\t\"GuildBankColumn7Button13\",\n\t\"GuildBankColumn7Button13Cooldown\",\n\t\"GuildBankColumn7Button14\",\n\t\"GuildBankColumn7Button14Cooldown\",\n\t\"GuildBankColumn7Button1Cooldown\",\n\t\"GuildBankColumn7Button2\",\n\t\"GuildBankColumn7Button2Cooldown\",\n\t\"GuildBankColumn7Button3\",\n\t\"GuildBankColumn7Button3Cooldown\",\n\t\"GuildBankColumn7Button4\",\n\t\"GuildBankColumn7Button4Cooldown\",\n\t\"GuildBankColumn7Button5\",\n\t\"GuildBankColumn7Button5Cooldown\",\n\t\"GuildBankColumn7Button6\",\n\t\"GuildBankColumn7Button6Cooldown\",\n\t\"GuildBankColumn7Button7\",\n\t\"GuildBankColumn7Button7Cooldown\",\n\t\"GuildBankColumn7Button8\",\n\t\"GuildBankColumn7Button8Cooldown\",\n\t\"GuildBankColumn7Button9\",\n\t\"GuildBankColumn7Button9Cooldown\",\n\t\"GuildBankEmblemFrame\",\n\t\"GuildBankFrame\",\n\t\"GuildBankFrameBuyInfo\",\n\t\"GuildBankFrameDepositButton\",\n\t\"GuildBankFrameLog\",\n\t\"GuildBankFramePurchaseButton\",\n\t\"GuildBankFrameTab1\",\n\t\"GuildBankFrameTab2\",\n\t\"GuildBankFrameTab3\",\n\t\"GuildBankFrameTab4\",\n\t\"GuildBankFrameTabCostMoneyFrame\",\n\t\"GuildBankFrameTabCostMoneyFrameCopperButton\",\n\t\"GuildBankFrameTabCostMoneyFrameGoldButton\",\n\t\"GuildBankFrameTabCostMoneyFrameSilverButton\",\n\t\"GuildBankFrameWithdrawButton\",\n\t\"GuildBankInfo\",\n\t\"GuildBankInfoSaveButton\",\n\t\"GuildBankInfoScrollFrame\",\n\t\"GuildBankInfoScrollFrameScrollBar\",\n\t\"GuildBankInfoScrollFrameScrollBarScrollDownButton\",\n\t\"GuildBankInfoScrollFrameScrollBarScrollUpButton\",\n\t\"GuildBankMessageFrame\",\n\t\"GuildBankMoneyFrame\",\n\t\"GuildBankMoneyFrameCopperButton\",\n\t\"GuildBankMoneyFrameGoldButton\",\n\t\"GuildBankMoneyFrameSilverButton\",\n\t\"GuildBankPopupButton1\",\n\t\"GuildBankPopupButton10\",\n\t\"GuildBankPopupButton11\",\n\t\"GuildBankPopupButton12\",\n\t\"GuildBankPopupButton13\",\n\t\"GuildBankPopupButton14\",\n\t\"GuildBankPopupButton15\",\n\t\"GuildBankPopupButton16\",\n\t\"GuildBankPopupButton2\",\n\t\"GuildBankPopupButton3\",\n\t\"GuildBankPopupButton4\",\n\t\"GuildBankPopupButton5\",\n\t\"GuildBankPopupButton6\",\n\t\"GuildBankPopupButton7\",\n\t\"GuildBankPopupButton8\",\n\t\"GuildBankPopupButton9\",\n\t\"GuildBankPopupCancelButton\",\n\t\"GuildBankPopupEditBox\",\n\t\"GuildBankPopupFrame\",\n\t\"GuildBankPopupOkayButton\",\n\t\"GuildBankPopupScrollFrame\",\n\t\"GuildBankPopupScrollFrameScrollBar\",\n\t\"GuildBankPopupScrollFrameScrollBarScrollDownButton\",\n\t\"GuildBankPopupScrollFrameScrollBarScrollUpButton\",\n\t\"GuildBankPopupScrollFrameScrollChildFrame\",\n\t\"GuildBankTab1\",\n\t\"GuildBankTab1Button\",\n\t\"GuildBankTab2\",\n\t\"GuildBankTab2Button\",\n\t\"GuildBankTab3\",\n\t\"GuildBankTab3Button\",\n\t\"GuildBankTab4\",\n\t\"GuildBankTab4Button\",\n\t\"GuildBankTab5\",\n\t\"GuildBankTab5Button\",\n\t\"GuildBankTab6\",\n\t\"GuildBankTab6Button\",\n\t\"GuildBankTabInfoEditBox\",\n\t\"GuildBankTransactionsScrollFrame\",\n\t\"GuildBankTransactionsScrollFrameScrollBar\",\n\t\"GuildBankTransactionsScrollFrameScrollBarScrollDownButton\",\n\t\"GuildBankTransactionsScrollFrameScrollBarScrollUpButton\",\n\t\"GuildBankTransactionsScrollFrameScrollChildFrame\",\n\t\"GuildBankWithdrawMoneyFrame\",\n\t\"GuildBankWithdrawMoneyFrameCopperButton\",\n\t\"GuildBankWithdrawMoneyFrameGoldButton\",\n\t\"GuildBankWithdrawMoneyFrameSilverButton\",\n\t-- frames: Blizzard_GuildBankUI\n\t\"GuildBankFrame\",\n\t\"GuildBankEmblemFrame\",\n\t\"GuildBankColumn1\",\n\t\"GuildBankColumn1Button1\",\n\t\"GuildBankColumn1Button1Cooldown\",\n\t\"GuildBankColumn1Button2\",\n\t\"GuildBankColumn1Button2Cooldown\",\n\t\"GuildBankColumn1Button3\",\n\t\"GuildBankColumn1Button3Cooldown\",\n\t\"GuildBankColumn1Button4\",\n\t\"GuildBankColumn1Button4Cooldown\",\n\t\"GuildBankColumn1Button5\",\n\t\"GuildBankColumn1Button5Cooldown\",\n\t\"GuildBankColumn1Button6\",\n\t\"GuildBankColumn1Button6Cooldown\",\n\t\"GuildBankColumn1Button7\",\n\t\"GuildBankColumn1Button7Cooldown\",\n\t\"GuildBankColumn1Button8\",\n\t\"GuildBankColumn1Button8Cooldown\",\n\t\"GuildBankColumn1Button9\",\n\t\"GuildBankColumn1Button9Cooldown\",\n\t\"GuildBankColumn1Button10\",\n\t\"GuildBankColumn1Button10Cooldown\",\n\t\"GuildBankColumn1Button11\",\n\t\"GuildBankColumn1Button11Cooldown\",\n\t\"GuildBankColumn1Button12\",\n\t\"GuildBankColumn1Button12Cooldown\",\n\t\"GuildBankColumn1Button13\",\n\t\"GuildBankColumn1Button13Cooldown\",\n\t\"GuildBankColumn1Button14\",\n\t\"GuildBankColumn1Button14Cooldown\",\n\t\"GuildBankColumn2\",\n\t\"GuildBankColumn2Button1\",\n\t\"GuildBankColumn2Button1Cooldown\",\n\t\"GuildBankColumn2Button2\",\n\t\"GuildBankColumn2Button2Cooldown\",\n\t\"GuildBankColumn2Button3\",\n\t\"GuildBankColumn2Button3Cooldown\",\n\t\"GuildBankColumn2Button4\",\n\t\"GuildBankColumn2Button4Cooldown\",\n\t\"GuildBankColumn2Button5\",\n\t\"GuildBankColumn2Button5Cooldown\",\n\t\"GuildBankColumn2Button6\",\n\t\"GuildBankColumn2Button6Cooldown\",\n\t\"GuildBankColumn2Button7\",\n\t\"GuildBankColumn2Button7Cooldown\",\n\t\"GuildBankColumn2Button8\",\n\t\"GuildBankColumn2Button8Cooldown\",\n\t\"GuildBankColumn2Button9\",\n\t\"GuildBankColumn2Button9Cooldown\",\n\t\"GuildBankColumn2Button10\",\n\t\"GuildBankColumn2Button10Cooldown\",\n\t\"GuildBankColumn2Button11\",\n\t\"GuildBankColumn2Button11Cooldown\",\n\t\"GuildBankColumn2Button12\",\n\t\"GuildBankColumn2Button12Cooldown\",\n\t\"GuildBankColumn2Button13\",\n\t\"GuildBankColumn2Button13Cooldown\",\n\t\"GuildBankColumn2Button14\",\n\t\"GuildBankColumn2Button14Cooldown\",\n\t\"GuildBankColumn3\",\n\t\"GuildBankColumn3Button1\",\n\t\"GuildBankColumn3Button1Cooldown\",\n\t\"GuildBankColumn3Button2\",\n\t\"GuildBankColumn3Button2Cooldown\",\n\t\"GuildBankColumn3Button3\",\n\t\"GuildBankColumn3Button3Cooldown\",\n\t\"GuildBankColumn3Button4\",\n\t\"GuildBankColumn3Button4Cooldown\",\n\t\"GuildBankColumn3Button5\",\n\t\"GuildBankColumn3Button5Cooldown\",\n\t\"GuildBankColumn3Button6\",\n\t\"GuildBankColumn3Button6Cooldown\",\n\t\"GuildBankColumn3Button7\",\n\t\"GuildBankColumn3Button7Cooldown\",\n\t\"GuildBankColumn3Button8\",\n\t\"GuildBankColumn3Button8Cooldown\",\n\t\"GuildBankColumn3Button9\",\n\t\"GuildBankColumn3Button9Cooldown\",\n\t\"GuildBankColumn3Button10\",\n\t\"GuildBankColumn3Button10Cooldown\",\n\t\"GuildBankColumn3Button11\",\n\t\"GuildBankColumn3Button11Cooldown\",\n\t\"GuildBankColumn3Button12\",\n\t\"GuildBankColumn3Button12Cooldown\",\n\t\"GuildBankColumn3Button13\",\n\t\"GuildBankColumn3Button13Cooldown\",\n\t\"GuildBankColumn3Button14\",\n\t\"GuildBankColumn3Button14Cooldown\",\n\t\"GuildBankColumn4\",\n\t\"GuildBankColumn4Button1\",\n\t\"GuildBankColumn4Button1Cooldown\",\n\t\"GuildBankColumn4Button2\",\n\t\"GuildBankColumn4Button2Cooldown\",\n\t\"GuildBankColumn4Button3\",\n\t\"GuildBankColumn4Button3Cooldown\",\n\t\"GuildBankColumn4Button4\",\n\t\"GuildBankColumn4Button4Cooldown\",\n\t\"GuildBankColumn4Button5\",\n\t\"GuildBankColumn4Button5Cooldown\",\n\t\"GuildBankColumn4Button6\",\n\t\"GuildBankColumn4Button6Cooldown\",\n\t\"GuildBankColumn4Button7\",\n\t\"GuildBankColumn4Button7Cooldown\",\n\t\"GuildBankColumn4Button8\",\n\t\"GuildBankColumn4Button8Cooldown\",\n\t\"GuildBankColumn4Button9\",\n\t\"GuildBankColumn4Button9Cooldown\",\n\t\"GuildBankColumn4Button10\",\n\t\"GuildBankColumn4Button10Cooldown\",\n\t\"GuildBankColumn4Button11\",\n\t\"GuildBankColumn4Button11Cooldown\",\n\t\"GuildBankColumn4Button12\",\n\t\"GuildBankColumn4Button12Cooldown\",\n\t\"GuildBankColumn4Button13\",\n\t\"GuildBankColumn4Button13Cooldown\",\n\t\"GuildBankColumn4Button14\",\n\t\"GuildBankColumn4Button14Cooldown\",\n\t\"GuildBankColumn5\",\n\t\"GuildBankColumn5Button1\",\n\t\"GuildBankColumn5Button1Cooldown\",\n\t\"GuildBankColumn5Button2\",\n\t\"GuildBankColumn5Button2Cooldown\",\n\t\"GuildBankColumn5Button3\",\n\t\"GuildBankColumn5Button3Cooldown\",\n\t\"GuildBankColumn5Button4\",\n\t\"GuildBankColumn5Button4Cooldown\",\n\t\"GuildBankColumn5Button5\",\n\t\"GuildBankColumn5Button5Cooldown\",\n\t\"GuildBankColumn5Button6\",\n\t\"GuildBankColumn5Button6Cooldown\",\n\t\"GuildBankColumn5Button7\",\n\t\"GuildBankColumn5Button7Cooldown\",\n\t\"GuildBankColumn5Button8\",\n\t\"GuildBankColumn5Button8Cooldown\",\n\t\"GuildBankColumn5Button9\",\n\t\"GuildBankColumn5Button9Cooldown\",\n\t\"GuildBankColumn5Button10\",\n\t\"GuildBankColumn5Button10Cooldown\",\n\t\"GuildBankColumn5Button11\",\n\t\"GuildBankColumn5Button11Cooldown\",\n\t\"GuildBankColumn5Button12\",\n\t\"GuildBankColumn5Button12Cooldown\",\n\t\"GuildBankColumn5Button13\",\n\t\"GuildBankColumn5Button13Cooldown\",\n\t\"GuildBankColumn5Button14\",\n\t\"GuildBankColumn5Button14Cooldown\",\n\t\"GuildBankColumn6\",\n\t\"GuildBankColumn6Button1\",\n\t\"GuildBankColumn6Button1Cooldown\",\n\t\"GuildBankColumn6Button2\",\n\t\"GuildBankColumn6Button2Cooldown\",\n\t\"GuildBankColumn6Button3\",\n\t\"GuildBankColumn6Button3Cooldown\",\n\t\"GuildBankColumn6Button4\",\n\t\"GuildBankColumn6Button4Cooldown\",\n\t\"GuildBankColumn6Button5\",\n\t\"GuildBankColumn6Button5Cooldown\",\n\t\"GuildBankColumn6Button6\",\n\t\"GuildBankColumn6Button6Cooldown\",\n\t\"GuildBankColumn6Button7\",\n\t\"GuildBankColumn6Button7Cooldown\",\n\t\"GuildBankColumn6Button8\",\n\t\"GuildBankColumn6Button8Cooldown\",\n\t\"GuildBankColumn6Button9\",\n\t\"GuildBankColumn6Button9Cooldown\",\n\t\"GuildBankColumn6Button10\",\n\t\"GuildBankColumn6Button10Cooldown\",\n\t\"GuildBankColumn6Button11\",\n\t\"GuildBankColumn6Button11Cooldown\",\n\t\"GuildBankColumn6Button12\",\n\t\"GuildBankColumn6Button12Cooldown\",\n\t\"GuildBankColumn6Button13\",\n\t\"GuildBankColumn6Button13Cooldown\",\n\t\"GuildBankColumn6Button14\",\n\t\"GuildBankColumn6Button14Cooldown\",\n\t\"GuildBankColumn7\",\n\t\"GuildBankColumn7Button1\",\n\t\"GuildBankColumn7Button1Cooldown\",\n\t\"GuildBankColumn7Button2\",\n\t\"GuildBankColumn7Button2Cooldown\",\n\t\"GuildBankColumn7Button3\",\n\t\"GuildBankColumn7Button3Cooldown\",\n\t\"GuildBankColumn7Button4\",\n\t\"GuildBankColumn7Button4Cooldown\",\n\t\"GuildBankColumn7Button5\",\n\t\"GuildBankColumn7Button5Cooldown\",\n\t\"GuildBankColumn7Button6\",\n\t\"GuildBankColumn7Button6Cooldown\",\n\t\"GuildBankColumn7Button7\",\n\t\"GuildBankColumn7Button7Cooldown\",\n\t\"GuildBankColumn7Button8\",\n\t\"GuildBankColumn7Button8Cooldown\",\n\t\"GuildBankColumn7Button9\",\n\t\"GuildBankColumn7Button9Cooldown\",\n\t\"GuildBankColumn7Button10\",\n\t\"GuildBankColumn7Button10Cooldown\",\n\t\"GuildBankColumn7Button11\",\n\t\"GuildBankColumn7Button11Cooldown\",\n\t\"GuildBankColumn7Button12\",\n\t\"GuildBankColumn7Button12Cooldown\",\n\t\"GuildBankColumn7Button13\",\n\t\"GuildBankColumn7Button13Cooldown\",\n\t\"GuildBankColumn7Button14\",\n\t\"GuildBankColumn7Button14Cooldown\",\n\t\"GuildBankMoneyFrame\",\n\t\"GuildBankMoneyFrameCopperButton\",\n\t\"GuildBankMoneyFrameSilverButton\",\n\t\"GuildBankMoneyFrameGoldButton\",\n\t\"GuildBankWithdrawMoneyFrame\",\n\t\"GuildBankWithdrawMoneyFrameCopperButton\",\n\t\"GuildBankWithdrawMoneyFrameSilverButton\",\n\t\"GuildBankWithdrawMoneyFrameGoldButton\",\n\t\"GuildBankFrameDepositButton\",\n\t\"GuildBankFrameWithdrawButton\",\n\t\"GuildBankFrameTab1\",\n\t\"GuildBankFrameTab2\",\n\t\"GuildBankFrameTab3\",\n\t\"GuildBankFrameTab4\",\n\t\"GuildBankTab1\",\n\t\"GuildBankTab1Button\",\n\t\"GuildBankTab2\",\n\t\"GuildBankTab2Button\",\n\t\"GuildBankTab3\",\n\t\"GuildBankTab3Button\",\n\t\"GuildBankTab4\",\n\t\"GuildBankTab4Button\",\n\t\"GuildBankTab5\",\n\t\"GuildBankTab5Button\",\n\t\"GuildBankTab6\",\n\t\"GuildBankTab6Button\",\n\t\"GuildBankFrameBuyInfo\",\n\t\"GuildBankFrameTabCostMoneyFrame\",\n\t\"GuildBankFrameTabCostMoneyFrameCopperButton\",\n\t\"GuildBankFrameTabCostMoneyFrameSilverButton\",\n\t\"GuildBankFrameTabCostMoneyFrameGoldButton\",\n\t\"GuildBankFramePurchaseButton\",\n\t\"GuildBankFrameLog\",\n\t\"GuildBankMessageFrame\",\n\t\"GuildBankTransactionsScrollFrame\",\n\t\"GuildBankTransactionsScrollFrameScrollChildFrame\",\n\t\"GuildBankTransactionsScrollFrameScrollBar\",\n\t\"GuildBankTransactionsScrollFrameScrollBarScrollUpButton\",\n\t\"GuildBankTransactionsScrollFrameScrollBarScrollDownButton\",\n\t\"GuildBankInfo\",\n\t\"GuildBankInfoSaveButton\",\n\t\"GuildBankInfoScrollFrame\",\n\t\"GuildBankTabInfoEditBox\",\n\t\"GuildBankInfoScrollFrameScrollBar\",\n\t\"GuildBankInfoScrollFrameScrollBarScrollUpButton\",\n\t\"GuildBankInfoScrollFrameScrollBarScrollDownButton\",\n\t\"GuildBankPopupFrame\",\n\t\"GuildBankPopupEditBox\",\n\t\"GuildBankPopupScrollFrame\",\n\t\"GuildBankPopupScrollFrameScrollChildFrame\",\n\t\"GuildBankPopupScrollFrameScrollBar\",\n\t\"GuildBankPopupScrollFrameScrollBarScrollUpButton\",\n\t\"GuildBankPopupScrollFrameScrollBarScrollDownButton\",\n\t\"GuildBankPopupButton1\",\n\t\"GuildBankPopupButton2\",\n\t\"GuildBankPopupButton3\",\n\t\"GuildBankPopupButton4\",\n\t\"GuildBankPopupButton5\",\n\t\"GuildBankPopupButton6\",\n\t\"GuildBankPopupButton7\",\n\t\"GuildBankPopupButton8\",\n\t\"GuildBankPopupButton9\",\n\t\"GuildBankPopupButton10\",\n\t\"GuildBankPopupButton11\",\n\t\"GuildBankPopupButton12\",\n\t\"GuildBankPopupButton13\",\n\t\"GuildBankPopupButton14\",\n\t\"GuildBankPopupButton15\",\n\t\"GuildBankPopupButton16\",\n\t\"GuildBankPopupCancelButton\",\n\t\"GuildBankPopupOkayButton\",\n\t-- widgets: Blizzard_GuildBankUI\n\t\"GuildBankColumn1Background\",\n\t\"GuildBankColumn1Button10Count\",\n\t\"GuildBankColumn1Button10IconTexture\",\n\t\"GuildBankColumn1Button10NormalTexture\",\n\t\"GuildBankColumn1Button10Stock\",\n\t\"GuildBankColumn1Button11Count\",\n\t\"GuildBankColumn1Button11IconTexture\",\n\t\"GuildBankColumn1Button11NormalTexture\",\n\t\"GuildBankColumn1Button11Stock\",\n\t\"GuildBankColumn1Button12Count\",\n\t\"GuildBankColumn1Button12IconTexture\",\n\t\"GuildBankColumn1Button12NormalTexture\",\n\t\"GuildBankColumn1Button12Stock\",\n\t\"GuildBankColumn1Button13Count\",\n\t\"GuildBankColumn1Button13IconTexture\",\n\t\"GuildBankColumn1Button13NormalTexture\",\n\t\"GuildBankColumn1Button13Stock\",\n\t\"GuildBankColumn1Button14Count\",\n\t\"GuildBankColumn1Button14IconTexture\",\n\t\"GuildBankColumn1Button14NormalTexture\",\n\t\"GuildBankColumn1Button14Stock\",\n\t\"GuildBankColumn1Button1Count\",\n\t\"GuildBankColumn1Button1IconTexture\",\n\t\"GuildBankColumn1Button1NormalTexture\",\n\t\"GuildBankColumn1Button1Stock\",\n\t\"GuildBankColumn1Button2Count\",\n\t\"GuildBankColumn1Button2IconTexture\",\n\t\"GuildBankColumn1Button2NormalTexture\",\n\t\"GuildBankColumn1Button2Stock\",\n\t\"GuildBankColumn1Button3Count\",\n\t\"GuildBankColumn1Button3IconTexture\",\n\t\"GuildBankColumn1Button3NormalTexture\",\n\t\"GuildBankColumn1Button3Stock\",\n\t\"GuildBankColumn1Button4Count\",\n\t\"GuildBankColumn1Button4IconTexture\",\n\t\"GuildBankColumn1Button4NormalTexture\",\n\t\"GuildBankColumn1Button4Stock\",\n\t\"GuildBankColumn1Button5Count\",\n\t\"GuildBankColumn1Button5IconTexture\",\n\t\"GuildBankColumn1Button5NormalTexture\",\n\t\"GuildBankColumn1Button5Stock\",\n\t\"GuildBankColumn1Button6Count\",\n\t\"GuildBankColumn1Button6IconTexture\",\n\t\"GuildBankColumn1Button6NormalTexture\",\n\t\"GuildBankColumn1Button6Stock\",\n\t\"GuildBankColumn1Button7Count\",\n\t\"GuildBankColumn1Button7IconTexture\",\n\t\"GuildBankColumn1Button7NormalTexture\",\n\t\"GuildBankColumn1Button7Stock\",\n\t\"GuildBankColumn1Button8Count\",\n\t\"GuildBankColumn1Button8IconTexture\",\n\t\"GuildBankColumn1Button8NormalTexture\",\n\t\"GuildBankColumn1Button8Stock\",\n\t\"GuildBankColumn1Button9Count\",\n\t\"GuildBankColumn1Button9IconTexture\",\n\t\"GuildBankColumn1Button9NormalTexture\",\n\t\"GuildBankColumn1Button9Stock\",\n\t\"GuildBankColumn2Background\",\n\t\"GuildBankColumn2Button10Count\",\n\t\"GuildBankColumn2Button10IconTexture\",\n\t\"GuildBankColumn2Button10NormalTexture\",\n\t\"GuildBankColumn2Button10Stock\",\n\t\"GuildBankColumn2Button11Count\",\n\t\"GuildBankColumn2Button11IconTexture\",\n\t\"GuildBankColumn2Button11NormalTexture\",\n\t\"GuildBankColumn2Button11Stock\",\n\t\"GuildBankColumn2Button12Count\",\n\t\"GuildBankColumn2Button12IconTexture\",\n\t\"GuildBankColumn2Button12NormalTexture\",\n\t\"GuildBankColumn2Button12Stock\",\n\t\"GuildBankColumn2Button13Count\",\n\t\"GuildBankColumn2Button13IconTexture\",\n\t\"GuildBankColumn2Button13NormalTexture\",\n\t\"GuildBankColumn2Button13Stock\",\n\t\"GuildBankColumn2Button14Count\",\n\t\"GuildBankColumn2Button14IconTexture\",\n\t\"GuildBankColumn2Button14NormalTexture\",\n\t\"GuildBankColumn2Button14Stock\",\n\t\"GuildBankColumn2Button1Count\",\n\t\"GuildBankColumn2Button1IconTexture\",\n\t\"GuildBankColumn2Button1NormalTexture\",\n\t\"GuildBankColumn2Button1Stock\",\n\t\"GuildBankColumn2Button2Count\",\n\t\"GuildBankColumn2Button2IconTexture\",\n\t\"GuildBankColumn2Button2NormalTexture\",\n\t\"GuildBankColumn2Button2Stock\",\n\t\"GuildBankColumn2Button3Count\",\n\t\"GuildBankColumn2Button3IconTexture\",\n\t\"GuildBankColumn2Button3NormalTexture\",\n\t\"GuildBankColumn2Button3Stock\",\n\t\"GuildBankColumn2Button4Count\",\n\t\"GuildBankColumn2Button4IconTexture\",\n\t\"GuildBankColumn2Button4NormalTexture\",\n\t\"GuildBankColumn2Button4Stock\",\n\t\"GuildBankColumn2Button5Count\",\n\t\"GuildBankColumn2Button5IconTexture\",\n\t\"GuildBankColumn2Button5NormalTexture\",\n\t\"GuildBankColumn2Button5Stock\",\n\t\"GuildBankColumn2Button6Count\",\n\t\"GuildBankColumn2Button6IconTexture\",\n\t\"GuildBankColumn2Button6NormalTexture\",\n\t\"GuildBankColumn2Button6Stock\",\n\t\"GuildBankColumn2Button7Count\",\n\t\"GuildBankColumn2Button7IconTexture\",\n\t\"GuildBankColumn2Button7NormalTexture\",\n\t\"GuildBankColumn2Button7Stock\",\n\t\"GuildBankColumn2Button8Count\",\n\t\"GuildBankColumn2Button8IconTexture\",\n\t\"GuildBankColumn2Button8NormalTexture\",\n\t\"GuildBankColumn2Button8Stock\",\n\t\"GuildBankColumn2Button9Count\",\n\t\"GuildBankColumn2Button9IconTexture\",\n\t\"GuildBankColumn2Button9NormalTexture\",\n\t\"GuildBankColumn2Button9Stock\",\n\t\"GuildBankColumn3Background\",\n\t\"GuildBankColumn3Button10Count\",\n\t\"GuildBankColumn3Button10IconTexture\",\n\t\"GuildBankColumn3Button10NormalTexture\",\n\t\"GuildBankColumn3Button10Stock\",\n\t\"GuildBankColumn3Button11Count\",\n\t\"GuildBankColumn3Button11IconTexture\",\n\t\"GuildBankColumn3Button11NormalTexture\",\n\t\"GuildBankColumn3Button11Stock\",\n\t\"GuildBankColumn3Button12Count\",\n\t\"GuildBankColumn3Button12IconTexture\",\n\t\"GuildBankColumn3Button12NormalTexture\",\n\t\"GuildBankColumn3Button12Stock\",\n\t\"GuildBankColumn3Button13Count\",\n\t\"GuildBankColumn3Button13IconTexture\",\n\t\"GuildBankColumn3Button13NormalTexture\",\n\t\"GuildBankColumn3Button13Stock\",\n\t\"GuildBankColumn3Button14Count\",\n\t\"GuildBankColumn3Button14IconTexture\",\n\t\"GuildBankColumn3Button14NormalTexture\",\n\t\"GuildBankColumn3Button14Stock\",\n\t\"GuildBankColumn3Button1Count\",\n\t\"GuildBankColumn3Button1IconTexture\",\n\t\"GuildBankColumn3Button1NormalTexture\",\n\t\"GuildBankColumn3Button1Stock\",\n\t\"GuildBankColumn3Button2Count\",\n\t\"GuildBankColumn3Button2IconTexture\",\n\t\"GuildBankColumn3Button2NormalTexture\",\n\t\"GuildBankColumn3Button2Stock\",\n\t\"GuildBankColumn3Button3Count\",\n\t\"GuildBankColumn3Button3IconTexture\",\n\t\"GuildBankColumn3Button3NormalTexture\",\n\t\"GuildBankColumn3Button3Stock\",\n\t\"GuildBankColumn3Button4Count\",\n\t\"GuildBankColumn3Button4IconTexture\",\n\t\"GuildBankColumn3Button4NormalTexture\",\n\t\"GuildBankColumn3Button4Stock\",\n\t\"GuildBankColumn3Button5Count\",\n\t\"GuildBankColumn3Button5IconTexture\",\n\t\"GuildBankColumn3Button5NormalTexture\",\n\t\"GuildBankColumn3Button5Stock\",\n\t\"GuildBankColumn3Button6Count\",\n\t\"GuildBankColumn3Button6IconTexture\",\n\t\"GuildBankColumn3Button6NormalTexture\",\n\t\"GuildBankColumn3Button6Stock\",\n\t\"GuildBankColumn3Button7Count\",\n\t\"GuildBankColumn3Button7IconTexture\",\n\t\"GuildBankColumn3Button7NormalTexture\",\n\t\"GuildBankColumn3Button7Stock\",\n\t\"GuildBankColumn3Button8Count\",\n\t\"GuildBankColumn3Button8IconTexture\",\n\t\"GuildBankColumn3Button8NormalTexture\",\n\t\"GuildBankColumn3Button8Stock\",\n\t\"GuildBankColumn3Button9Count\",\n\t\"GuildBankColumn3Button9IconTexture\",\n\t\"GuildBankColumn3Button9NormalTexture\",\n\t\"GuildBankColumn3Button9Stock\",\n\t\"GuildBankColumn4Background\",\n\t\"GuildBankColumn4Button10Count\",\n\t\"GuildBankColumn4Button10IconTexture\",\n\t\"GuildBankColumn4Button10NormalTexture\",\n\t\"GuildBankColumn4Button10Stock\",\n\t\"GuildBankColumn4Button11Count\",\n\t\"GuildBankColumn4Button11IconTexture\",\n\t\"GuildBankColumn4Button11NormalTexture\",\n\t\"GuildBankColumn4Button11Stock\",\n\t\"GuildBankColumn4Button12Count\",\n\t\"GuildBankColumn4Button12IconTexture\",\n\t\"GuildBankColumn4Button12NormalTexture\",\n\t\"GuildBankColumn4Button12Stock\",\n\t\"GuildBankColumn4Button13Count\",\n\t\"GuildBankColumn4Button13IconTexture\",\n\t\"GuildBankColumn4Button13NormalTexture\",\n\t\"GuildBankColumn4Button13Stock\",\n\t\"GuildBankColumn4Button14Count\",\n\t\"GuildBankColumn4Button14IconTexture\",\n\t\"GuildBankColumn4Button14NormalTexture\",\n\t\"GuildBankColumn4Button14Stock\",\n\t\"GuildBankColumn4Button1Count\",\n\t\"GuildBankColumn4Button1IconTexture\",\n\t\"GuildBankColumn4Button1NormalTexture\",\n\t\"GuildBankColumn4Button1Stock\",\n\t\"GuildBankColumn4Button2Count\",\n\t\"GuildBankColumn4Button2IconTexture\",\n\t\"GuildBankColumn4Button2NormalTexture\",\n\t\"GuildBankColumn4Button2Stock\",\n\t\"GuildBankColumn4Button3Count\",\n\t\"GuildBankColumn4Button3IconTexture\",\n\t\"GuildBankColumn4Button3NormalTexture\",\n\t\"GuildBankColumn4Button3Stock\",\n\t\"GuildBankColumn4Button4Count\",\n\t\"GuildBankColumn4Button4IconTexture\",\n\t\"GuildBankColumn4Button4NormalTexture\",\n\t\"GuildBankColumn4Button4Stock\",\n\t\"GuildBankColumn4Button5Count\",\n\t\"GuildBankColumn4Button5IconTexture\",\n\t\"GuildBankColumn4Button5NormalTexture\",\n\t\"GuildBankColumn4Button5Stock\",\n\t\"GuildBankColumn4Button6Count\",\n\t\"GuildBankColumn4Button6IconTexture\",\n\t\"GuildBankColumn4Button6NormalTexture\",\n\t\"GuildBankColumn4Button6Stock\",\n\t\"GuildBankColumn4Button7Count\",\n\t\"GuildBankColumn4Button7IconTexture\",\n\t\"GuildBankColumn4Button7NormalTexture\",\n\t\"GuildBankColumn4Button7Stock\",\n\t\"GuildBankColumn4Button8Count\",\n\t\"GuildBankColumn4Button8IconTexture\",\n\t\"GuildBankColumn4Button8NormalTexture\",\n\t\"GuildBankColumn4Button8Stock\",\n\t\"GuildBankColumn4Button9Count\",\n\t\"GuildBankColumn4Button9IconTexture\",\n\t\"GuildBankColumn4Button9NormalTexture\",\n\t\"GuildBankColumn4Button9Stock\",\n\t\"GuildBankColumn5Background\",\n\t\"GuildBankColumn5Button10Count\",\n\t\"GuildBankColumn5Button10IconTexture\",\n\t\"GuildBankColumn5Button10NormalTexture\",\n\t\"GuildBankColumn5Button10Stock\",\n\t\"GuildBankColumn5Button11Count\",\n\t\"GuildBankColumn5Button11IconTexture\",\n\t\"GuildBankColumn5Button11NormalTexture\",\n\t\"GuildBankColumn5Button11Stock\",\n\t\"GuildBankColumn5Button12Count\",\n\t\"GuildBankColumn5Button12IconTexture\",\n\t\"GuildBankColumn5Button12NormalTexture\",\n\t\"GuildBankColumn5Button12Stock\",\n\t\"GuildBankColumn5Button13Count\",\n\t\"GuildBankColumn5Button13IconTexture\",\n\t\"GuildBankColumn5Button13NormalTexture\",\n\t\"GuildBankColumn5Button13Stock\",\n\t\"GuildBankColumn5Button14Count\",\n\t\"GuildBankColumn5Button14IconTexture\",\n\t\"GuildBankColumn5Button14NormalTexture\",\n\t\"GuildBankColumn5Button14Stock\",\n\t\"GuildBankColumn5Button1Count\",\n\t\"GuildBankColumn5Button1IconTexture\",\n\t\"GuildBankColumn5Button1NormalTexture\",\n\t\"GuildBankColumn5Button1Stock\",\n\t\"GuildBankColumn5Button2Count\",\n\t\"GuildBankColumn5Button2IconTexture\",\n\t\"GuildBankColumn5Button2NormalTexture\",\n\t\"GuildBankColumn5Button2Stock\",\n\t\"GuildBankColumn5Button3Count\",\n\t\"GuildBankColumn5Button3IconTexture\",\n\t\"GuildBankColumn5Button3NormalTexture\",\n\t\"GuildBankColumn5Button3Stock\",\n\t\"GuildBankColumn5Button4Count\",\n\t\"GuildBankColumn5Button4IconTexture\",\n\t\"GuildBankColumn5Button4NormalTexture\",\n\t\"GuildBankColumn5Button4Stock\",\n\t\"GuildBankColumn5Button5Count\",\n\t\"GuildBankColumn5Button5IconTexture\",\n\t\"GuildBankColumn5Button5NormalTexture\",\n\t\"GuildBankColumn5Button5Stock\",\n\t\"GuildBankColumn5Button6Count\",\n\t\"GuildBankColumn5Button6IconTexture\",\n\t\"GuildBankColumn5Button6NormalTexture\",\n\t\"GuildBankColumn5Button6Stock\",\n\t\"GuildBankColumn5Button7Count\",\n\t\"GuildBankColumn5Button7IconTexture\",\n\t\"GuildBankColumn5Button7NormalTexture\",\n\t\"GuildBankColumn5Button7Stock\",\n\t\"GuildBankColumn5Button8Count\",\n\t\"GuildBankColumn5Button8IconTexture\",\n\t\"GuildBankColumn5Button8NormalTexture\",\n\t\"GuildBankColumn5Button8Stock\",\n\t\"GuildBankColumn5Button9Count\",\n\t\"GuildBankColumn5Button9IconTexture\",\n\t\"GuildBankColumn5Button9NormalTexture\",\n\t\"GuildBankColumn5Button9Stock\",\n\t\"GuildBankColumn6Background\",\n\t\"GuildBankColumn6Button10Count\",\n\t\"GuildBankColumn6Button10IconTexture\",\n\t\"GuildBankColumn6Button10NormalTexture\",\n\t\"GuildBankColumn6Button10Stock\",\n\t\"GuildBankColumn6Button11Count\",\n\t\"GuildBankColumn6Button11IconTexture\",\n\t\"GuildBankColumn6Button11NormalTexture\",\n\t\"GuildBankColumn6Button11Stock\",\n\t\"GuildBankColumn6Button12Count\",\n\t\"GuildBankColumn6Button12IconTexture\",\n\t\"GuildBankColumn6Button12NormalTexture\",\n\t\"GuildBankColumn6Button12Stock\",\n\t\"GuildBankColumn6Button13Count\",\n\t\"GuildBankColumn6Button13IconTexture\",\n\t\"GuildBankColumn6Button13NormalTexture\",\n\t\"GuildBankColumn6Button13Stock\",\n\t\"GuildBankColumn6Button14Count\",\n\t\"GuildBankColumn6Button14IconTexture\",\n\t\"GuildBankColumn6Button14NormalTexture\",\n\t\"GuildBankColumn6Button14Stock\",\n\t\"GuildBankColumn6Button1Count\",\n\t\"GuildBankColumn6Button1IconTexture\",\n\t\"GuildBankColumn6Button1NormalTexture\",\n\t\"GuildBankColumn6Button1Stock\",\n\t\"GuildBankColumn6Button2Count\",\n\t\"GuildBankColumn6Button2IconTexture\",\n\t\"GuildBankColumn6Button2NormalTexture\",\n\t\"GuildBankColumn6Button2Stock\",\n\t\"GuildBankColumn6Button3Count\",\n\t\"GuildBankColumn6Button3IconTexture\",\n\t\"GuildBankColumn6Button3NormalTexture\",\n\t\"GuildBankColumn6Button3Stock\",\n\t\"GuildBankColumn6Button4Count\",\n\t\"GuildBankColumn6Button4IconTexture\",\n\t\"GuildBankColumn6Button4NormalTexture\",\n\t\"GuildBankColumn6Button4Stock\",\n\t\"GuildBankColumn6Button5Count\",\n\t\"GuildBankColumn6Button5IconTexture\",\n\t\"GuildBankColumn6Button5NormalTexture\",\n\t\"GuildBankColumn6Button5Stock\",\n\t\"GuildBankColumn6Button6Count\",\n\t\"GuildBankColumn6Button6IconTexture\",\n\t\"GuildBankColumn6Button6NormalTexture\",\n\t\"GuildBankColumn6Button6Stock\",\n\t\"GuildBankColumn6Button7Count\",\n\t\"GuildBankColumn6Button7IconTexture\",\n\t\"GuildBankColumn6Button7NormalTexture\",\n\t\"GuildBankColumn6Button7Stock\",\n\t\"GuildBankColumn6Button8Count\",\n\t\"GuildBankColumn6Button8IconTexture\",\n\t\"GuildBankColumn6Button8NormalTexture\",\n\t\"GuildBankColumn6Button8Stock\",\n\t\"GuildBankColumn6Button9Count\",\n\t\"GuildBankColumn6Button9IconTexture\",\n\t\"GuildBankColumn6Button9NormalTexture\",\n\t\"GuildBankColumn6Button9Stock\",\n\t\"GuildBankColumn7Background\",\n\t\"GuildBankColumn7Button10Count\",\n\t\"GuildBankColumn7Button10IconTexture\",\n\t\"GuildBankColumn7Button10NormalTexture\",\n\t\"GuildBankColumn7Button10Stock\",\n\t\"GuildBankColumn7Button11Count\",\n\t\"GuildBankColumn7Button11IconTexture\",\n\t\"GuildBankColumn7Button11NormalTexture\",\n\t\"GuildBankColumn7Button11Stock\",\n\t\"GuildBankColumn7Button12Count\",\n\t\"GuildBankColumn7Button12IconTexture\",\n\t\"GuildBankColumn7Button12NormalTexture\",\n\t\"GuildBankColumn7Button12Stock\",\n\t\"GuildBankColumn7Button13Count\",\n\t\"GuildBankColumn7Button13IconTexture\",\n\t\"GuildBankColumn7Button13NormalTexture\",\n\t\"GuildBankColumn7Button13Stock\",\n\t\"GuildBankColumn7Button14Count\",\n\t\"GuildBankColumn7Button14IconTexture\",\n\t\"GuildBankColumn7Button14NormalTexture\",\n\t\"GuildBankColumn7Button14Stock\",\n\t\"GuildBankColumn7Button1Count\",\n\t\"GuildBankColumn7Button1IconTexture\",\n\t\"GuildBankColumn7Button1NormalTexture\",\n\t\"GuildBankColumn7Button1Stock\",\n\t\"GuildBankColumn7Button2Count\",\n\t\"GuildBankColumn7Button2IconTexture\",\n\t\"GuildBankColumn7Button2NormalTexture\",\n\t\"GuildBankColumn7Button2Stock\",\n\t\"GuildBankColumn7Button3Count\",\n\t\"GuildBankColumn7Button3IconTexture\",\n\t\"GuildBankColumn7Button3NormalTexture\",\n\t\"GuildBankColumn7Button3Stock\",\n\t\"GuildBankColumn7Button4Count\",\n\t\"GuildBankColumn7Button4IconTexture\",\n\t\"GuildBankColumn7Button4NormalTexture\",\n\t\"GuildBankColumn7Button4Stock\",\n\t\"GuildBankColumn7Button5Count\",\n\t\"GuildBankColumn7Button5IconTexture\",\n\t\"GuildBankColumn7Button5NormalTexture\",\n\t\"GuildBankColumn7Button5Stock\",\n\t\"GuildBankColumn7Button6Count\",\n\t\"GuildBankColumn7Button6IconTexture\",\n\t\"GuildBankColumn7Button6NormalTexture\",\n\t\"GuildBankColumn7Button6Stock\",\n\t\"GuildBankColumn7Button7Count\",\n\t\"GuildBankColumn7Button7IconTexture\",\n\t\"GuildBankColumn7Button7NormalTexture\",\n\t\"GuildBankColumn7Button7Stock\",\n\t\"GuildBankColumn7Button8Count\",\n\t\"GuildBankColumn7Button8IconTexture\",\n\t\"GuildBankColumn7Button8NormalTexture\",\n\t\"GuildBankColumn7Button8Stock\",\n\t\"GuildBankColumn7Button9Count\",\n\t\"GuildBankColumn7Button9IconTexture\",\n\t\"GuildBankColumn7Button9NormalTexture\",\n\t\"GuildBankColumn7Button9Stock\",\n\t\"GuildBankEmblemBL\",\n\t\"GuildBankEmblemBR\",\n\t\"GuildBankEmblemBackgroundBL\",\n\t\"GuildBankEmblemBackgroundBR\",\n\t\"GuildBankEmblemBackgroundUL\",\n\t\"GuildBankEmblemBackgroundUR\",\n\t\"GuildBankEmblemBorderBL\",\n\t\"GuildBankEmblemBorderBR\",\n\t\"GuildBankEmblemBorderUL\",\n\t\"GuildBankEmblemBorderUR\",\n\t\"GuildBankEmblemFrameLeft\",\n\t\"GuildBankEmblemFrameRight\",\n\t\"GuildBankEmblemUL\",\n\t\"GuildBankEmblemUR\",\n\t\"GuildBankErrorMessage\",\n\t\"GuildBankFrameBuyInfoNumTabsPurchasedText\",\n\t\"GuildBankFrameBuyInfoText\",\n\t\"GuildBankFrameDepositButtonText\",\n\t\"GuildBankFrameLeft\",\n\t\"GuildBankFramePortrait\",\n\t\"GuildBankFramePurchaseButtonText\",\n\t\"GuildBankFrameRight\",\n\t\"GuildBankFrameTab1HighlightTexture\",\n\t\"GuildBankFrameTab1Left\",\n\t\"GuildBankFrameTab1LeftDisabled\",\n\t\"GuildBankFrameTab1Middle\",\n\t\"GuildBankFrameTab1MiddleDisabled\",\n\t\"GuildBankFrameTab1Right\",\n\t\"GuildBankFrameTab1RightDisabled\",\n\t\"GuildBankFrameTab1Text\",\n\t\"GuildBankFrameTab2HighlightTexture\",\n\t\"GuildBankFrameTab2Left\",\n\t\"GuildBankFrameTab2LeftDisabled\",\n\t\"GuildBankFrameTab2Middle\",\n\t\"GuildBankFrameTab2MiddleDisabled\",\n\t\"GuildBankFrameTab2Right\",\n\t\"GuildBankFrameTab2RightDisabled\",\n\t\"GuildBankFrameTab2Text\",\n\t\"GuildBankFrameTab3HighlightTexture\",\n\t\"GuildBankFrameTab3Left\",\n\t\"GuildBankFrameTab3LeftDisabled\",\n\t\"GuildBankFrameTab3Middle\",\n\t\"GuildBankFrameTab3MiddleDisabled\",\n\t\"GuildBankFrameTab3Right\",\n\t\"GuildBankFrameTab3RightDisabled\",\n\t\"GuildBankFrameTab3Text\",\n\t\"GuildBankFrameTab4HighlightTexture\",\n\t\"GuildBankFrameTab4Left\",\n\t\"GuildBankFrameTab4LeftDisabled\",\n\t\"GuildBankFrameTab4Middle\",\n\t\"GuildBankFrameTab4MiddleDisabled\",\n\t\"GuildBankFrameTab4Right\",\n\t\"GuildBankFrameTab4RightDisabled\",\n\t\"GuildBankFrameTab4Text\",\n\t\"GuildBankFrameTabCost\",\n\t\"GuildBankFrameTabCostMoneyFrameCopperButtonText\",\n\t\"GuildBankFrameTabCostMoneyFrameGoldButtonText\",\n\t\"GuildBankFrameTabCostMoneyFrameSilverButtonText\",\n\t\"GuildBankFrameWithdrawButtonText\",\n\t\"GuildBankInfoSaveButtonText\",\n\t\"GuildBankInfoScrollFrameScrollBarThumbTexture\",\n\t\"GuildBankLimitLabel\",\n\t\"GuildBankMoneyFrameCopperButtonText\",\n\t\"GuildBankMoneyFrameGoldButtonText\",\n\t\"GuildBankMoneyFrameSilverButtonText\",\n\t\"GuildBankMoneyLimitLabel\",\n\t\"GuildBankMoneyUnlimitedLabel\",\n\t\"GuildBankPopupButton10Icon\",\n\t\"GuildBankPopupButton10Name\",\n\t\"GuildBankPopupButton11Icon\",\n\t\"GuildBankPopupButton11Name\",\n\t\"GuildBankPopupButton12Icon\",\n\t\"GuildBankPopupButton12Name\",\n\t\"GuildBankPopupButton13Icon\",\n\t\"GuildBankPopupButton13Name\",\n\t\"GuildBankPopupButton14Icon\",\n\t\"GuildBankPopupButton14Name\",\n\t\"GuildBankPopupButton15Icon\",\n\t\"GuildBankPopupButton15Name\",\n\t\"GuildBankPopupButton16Icon\",\n\t\"GuildBankPopupButton16Name\",\n\t\"GuildBankPopupButton1Icon\",\n\t\"GuildBankPopupButton1Name\",\n\t\"GuildBankPopupButton2Icon\",\n\t\"GuildBankPopupButton2Name\",\n\t\"GuildBankPopupButton3Icon\",\n\t\"GuildBankPopupButton3Name\",\n\t\"GuildBankPopupButton4Icon\",\n\t\"GuildBankPopupButton4Name\",\n\t\"GuildBankPopupButton5Icon\",\n\t\"GuildBankPopupButton5Name\",\n\t\"GuildBankPopupButton6Icon\",\n\t\"GuildBankPopupButton6Name\",\n\t\"GuildBankPopupButton7Icon\",\n\t\"GuildBankPopupButton7Name\",\n\t\"GuildBankPopupButton8Icon\",\n\t\"GuildBankPopupButton8Name\",\n\t\"GuildBankPopupButton9Icon\",\n\t\"GuildBankPopupButton9Name\",\n\t\"GuildBankPopupCancelButtonText\",\n\t\"GuildBankPopupFrameBottomLeft\",\n\t\"GuildBankPopupFrameTopLeft\",\n\t\"GuildBankPopupNameLeft\",\n\t\"GuildBankPopupNameMiddle\",\n\t\"GuildBankPopupNameRight\",\n\t\"GuildBankPopupOkayButtonText\",\n\t\"GuildBankPopupScrollFrameScrollBarThumbTexture\",\n\t\"GuildBankTab1ButtonCount\",\n\t\"GuildBankTab1ButtonIconTexture\",\n\t\"GuildBankTab1ButtonNormalTexture\",\n\t\"GuildBankTab2ButtonCount\",\n\t\"GuildBankTab2ButtonIconTexture\",\n\t\"GuildBankTab2ButtonNormalTexture\",\n\t\"GuildBankTab3ButtonCount\",\n\t\"GuildBankTab3ButtonIconTexture\",\n\t\"GuildBankTab3ButtonNormalTexture\",\n\t\"GuildBankTab4ButtonCount\",\n\t\"GuildBankTab4ButtonIconTexture\",\n\t\"GuildBankTab4ButtonNormalTexture\",\n\t\"GuildBankTab5ButtonCount\",\n\t\"GuildBankTab5ButtonIconTexture\",\n\t\"GuildBankTab5ButtonNormalTexture\",\n\t\"GuildBankTab6ButtonCount\",\n\t\"GuildBankTab6ButtonIconTexture\",\n\t\"GuildBankTab6ButtonNormalTexture\",\n\t\"GuildBankTabLimitBackground\",\n\t\"GuildBankTabLimitBackgroundLeft\",\n\t\"GuildBankTabLimitBackgroundRight\",\n\t\"GuildBankTabTitle\",\n\t\"GuildBankTabTitleBackground\",\n\t\"GuildBankTabTitleBackgroundLeft\",\n\t\"GuildBankTabTitleBackgroundRight\",\n\t\"GuildBankTransactionsScrollFrameScrollBarThumbTexture\",\n\t\"GuildBankWithdrawMoneyFrameCopperButtonText\",\n\t\"GuildBankWithdrawMoneyFrameGoldButtonText\",\n\t\"GuildBankWithdrawMoneyFrameSilverButtonText\",\n\n\t-- functions: Blizzard_InspectUI\n\t\"InspectFrameTab_OnClick\",\n\t\"InspectFrame_OnEvent\",\n\t\"InspectFrame_OnHide\",\n\t\"InspectFrame_OnLoad\",\n\t\"InspectFrame_OnShow\",\n\t\"InspectFrame_OnUpdate\",\n\t\"InspectFrame_Show\",\n\t\"InspectFrame_UnitChanged\",\n\t\"InspectFrame_UpdateTalentTab\",\n\t\"InspectModelFrame_OnLoad\",\n\t\"InspectModelFrame_OnUpdate\",\n\t\"InspectModelRotateLeftButton_OnClick\",\n\t\"InspectModelRotateRightButton_OnClick\",\n\t\"InspectPVPFrame_OnEvent\",\n\t\"InspectPVPFrame_OnLoad\",\n\t\"InspectPVPFrame_OnShow\",\n\t\"InspectPVPFrame_SetFaction\",\n\t\"InspectPVPFrame_Update\",\n\t\"InspectPVPHonor_Update\",\n\t\"InspectPVPTeam_Update\",\n\t\"InspectPaperDollFrame_OnEvent\",\n\t\"InspectPaperDollFrame_OnLoad\",\n\t\"InspectPaperDollFrame_OnShow\",\n\t\"InspectPaperDollFrame_SetLevel\",\n\t\"InspectPaperDollItemSlotButton_OnEnter\",\n\t\"InspectPaperDollItemSlotButton_OnEvent\",\n\t\"InspectPaperDollItemSlotButton_OnLoad\",\n\t\"InspectPaperDollItemSlotButton_Update\",\n\t\"InspectSwitchTabs\",\n\t\"InspectTalentFrameDownArrow_OnClick\",\n\t\"InspectTalentFramePointsBar_OnEnter\",\n\t\"InspectTalentFrameTalent_OnClick\",\n\t\"InspectTalentFrameTalent_OnEnter\",\n\t\"InspectTalentFrameTalent_OnEvent\",\n\t\"InspectTalentFrame_OnEvent\",\n\t\"InspectTalentFrame_OnHide\",\n\t\"InspectTalentFrame_OnLoad\",\n\t\"InspectTalentFrame_OnShow\",\n\t\"InspectTalentFrame_Refresh\",\n\t\"InspectTalentFrame_Update\",\n\t\"InspectTalentFrame_UpdateTabs\",\n\t-- tables: Blizzard_InspectUI\n\t\"INSPECTFRAME_SUBFRAMES\",\n\t\"InspectBackSlot\",\n\t\"InspectChestSlot\",\n\t\"InspectFeetSlot\",\n\t\"InspectFinger0Slot\",\n\t\"InspectFinger1Slot\",\n\t\"InspectFrame\",\n\t\"InspectFrameCloseButton\",\n\t\"InspectFrameTab1\",\n\t\"InspectFrameTab2\",\n\t\"InspectFrameTab3\",\n\t\"InspectHandsSlot\",\n\t\"InspectHeadSlot\",\n\t\"InspectLegsSlot\",\n\t\"InspectMainHandSlot\",\n\t\"InspectModelFrame\",\n\t\"InspectModelRotateLeftButton\",\n\t\"InspectModelRotateRightButton\",\n\t\"InspectNameFrame\",\n\t\"InspectNeckSlot\",\n\t\"InspectPVPFrame\",\n\t\"InspectPVPFrameArena\",\n\t\"InspectPVPFrameHonor\",\n\t\"InspectPVPHonor\",\n\t\"InspectPVPTeam1\",\n\t\"InspectPVPTeam1Data\",\n\t\"InspectPVPTeam1Highlight\",\n\t\"InspectPVPTeam1Standard\",\n\t\"InspectPVPTeam2\",\n\t\"InspectPVPTeam2Data\",\n\t\"InspectPVPTeam2Highlight\",\n\t\"InspectPVPTeam2Standard\",\n\t\"InspectPVPTeam3\",\n\t\"InspectPVPTeam3Data\",\n\t\"InspectPVPTeam3Highlight\",\n\t\"InspectPVPTeam3Standard\",\n\t\"InspectPaperDollFrame\",\n\t\"InspectRangedSlot\",\n\t\"InspectSecondaryHandSlot\",\n\t\"InspectShirtSlot\",\n\t\"InspectShoulderSlot\",\n\t\"InspectTabardSlot\",\n\t\"InspectTalentFrame\",\n\t\"InspectTalentFrameArrowFrame\",\n\t\"InspectTalentFrameCloseButton\",\n\t\"InspectTalentFramePointsBar\",\n\t\"InspectTalentFrameScrollButtonOverlay\",\n\t\"InspectTalentFrameScrollChildFrame\",\n\t\"InspectTalentFrameScrollFrame\",\n\t\"InspectTalentFrameScrollFrameScrollBar\",\n\t\"InspectTalentFrameScrollFrameScrollBarScrollDownButton\",\n\t\"InspectTalentFrameScrollFrameScrollBarScrollUpButton\",\n\t\"InspectTalentFrameTab1\",\n\t\"InspectTalentFrameTab2\",\n\t\"InspectTalentFrameTab3\",\n\t\"InspectTalentFrameTalent1\",\n\t\"InspectTalentFrameTalent10\",\n\t\"InspectTalentFrameTalent11\",\n\t\"InspectTalentFrameTalent12\",\n\t\"InspectTalentFrameTalent13\",\n\t\"InspectTalentFrameTalent14\",\n\t\"InspectTalentFrameTalent15\",\n\t\"InspectTalentFrameTalent16\",\n\t\"InspectTalentFrameTalent17\",\n\t\"InspectTalentFrameTalent18\",\n\t\"InspectTalentFrameTalent19\",\n\t\"InspectTalentFrameTalent2\",\n\t\"InspectTalentFrameTalent20\",\n\t\"InspectTalentFrameTalent21\",\n\t\"InspectTalentFrameTalent22\",\n\t\"InspectTalentFrameTalent23\",\n\t\"InspectTalentFrameTalent24\",\n\t\"InspectTalentFrameTalent25\",\n\t\"InspectTalentFrameTalent26\",\n\t\"InspectTalentFrameTalent27\",\n\t\"InspectTalentFrameTalent28\",\n\t\"InspectTalentFrameTalent29\",\n\t\"InspectTalentFrameTalent3\",\n\t\"InspectTalentFrameTalent30\",\n\t\"InspectTalentFrameTalent31\",\n\t\"InspectTalentFrameTalent32\",\n\t\"InspectTalentFrameTalent33\",\n\t\"InspectTalentFrameTalent34\",\n\t\"InspectTalentFrameTalent35\",\n\t\"InspectTalentFrameTalent36\",\n\t\"InspectTalentFrameTalent37\",\n\t\"InspectTalentFrameTalent38\",\n\t\"InspectTalentFrameTalent39\",\n\t\"InspectTalentFrameTalent4\",\n\t\"InspectTalentFrameTalent40\",\n\t\"InspectTalentFrameTalent5\",\n\t\"InspectTalentFrameTalent6\",\n\t\"InspectTalentFrameTalent7\",\n\t\"InspectTalentFrameTalent8\",\n\t\"InspectTalentFrameTalent9\",\n\t\"InspectTrinket0Slot\",\n\t\"InspectTrinket1Slot\",\n\t\"InspectWaistSlot\",\n\t\"InspectWristSlot\",\n\t-- frames: Blizzard_InspectUI\n\t\"InspectFrame\",\n\t\"InspectNameFrame\",\n\t\"InspectFrameCloseButton\",\n\t\"InspectFrameTab1\",\n\t\"InspectFrameTab2\",\n\t\"InspectFrameTab3\",\n\t\"InspectPaperDollFrame\",\n\t\"InspectModelFrame\",\n\t\"InspectModelRotateLeftButton\",\n\t\"InspectModelRotateRightButton\",\n\t\"InspectHeadSlot\",\n\t\"InspectNeckSlot\",\n\t\"InspectShoulderSlot\",\n\t\"InspectBackSlot\",\n\t\"InspectChestSlot\",\n\t\"InspectShirtSlot\",\n\t\"InspectTabardSlot\",\n\t\"InspectWristSlot\",\n\t\"InspectHandsSlot\",\n\t\"InspectWaistSlot\",\n\t\"InspectLegsSlot\",\n\t\"InspectFeetSlot\",\n\t\"InspectFinger0Slot\",\n\t\"InspectFinger1Slot\",\n\t\"InspectTrinket0Slot\",\n\t\"InspectTrinket1Slot\",\n\t\"InspectMainHandSlot\",\n\t\"InspectSecondaryHandSlot\",\n\t\"InspectRangedSlot\",\n\t\"InspectPVPFrame\",\n\t\"InspectPVPFrameHonor\",\n\t\"InspectPVPFrameArena\",\n\t\"InspectPVPHonor\",\n\t\"InspectPVPTeam1Standard\",\n\t\"InspectPVPTeam1\",\n\t\"InspectPVPTeam1Highlight\",\n\t\"InspectPVPTeam1Data\",\n\t\"InspectPVPTeam2Standard\",\n\t\"InspectPVPTeam2\",\n\t\"InspectPVPTeam2Highlight\",\n\t\"InspectPVPTeam2Data\",\n\t\"InspectPVPTeam3Standard\",\n\t\"InspectPVPTeam3\",\n\t\"InspectPVPTeam3Highlight\",\n\t\"InspectPVPTeam3Data\",\n\t\"InspectTalentFrame\",\n\t\"InspectTalentFrameTab1\",\n\t\"InspectTalentFrameTab2\",\n\t\"InspectTalentFrameTab3\",\n\t\"InspectTalentFrameCloseButton\",\n\t\"InspectTalentFramePointsBar\",\n\t\"InspectTalentFrameScrollFrame\",\n\t\"InspectTalentFrameScrollChildFrame\",\n\t\"InspectTalentFrameTalent1\",\n\t\"InspectTalentFrameTalent2\",\n\t\"InspectTalentFrameTalent3\",\n\t\"InspectTalentFrameTalent4\",\n\t\"InspectTalentFrameTalent5\",\n\t\"InspectTalentFrameTalent6\",\n\t\"InspectTalentFrameTalent7\",\n\t\"InspectTalentFrameTalent8\",\n\t\"InspectTalentFrameTalent9\",\n\t\"InspectTalentFrameTalent10\",\n\t\"InspectTalentFrameTalent11\",\n\t\"InspectTalentFrameTalent12\",\n\t\"InspectTalentFrameTalent13\",\n\t\"InspectTalentFrameTalent14\",\n\t\"InspectTalentFrameTalent15\",\n\t\"InspectTalentFrameTalent16\",\n\t\"InspectTalentFrameTalent17\",\n\t\"InspectTalentFrameTalent18\",\n\t\"InspectTalentFrameTalent19\",\n\t\"InspectTalentFrameTalent20\",\n\t\"InspectTalentFrameTalent21\",\n\t\"InspectTalentFrameTalent22\",\n\t\"InspectTalentFrameTalent23\",\n\t\"InspectTalentFrameTalent24\",\n\t\"InspectTalentFrameTalent25\",\n\t\"InspectTalentFrameTalent26\",\n\t\"InspectTalentFrameTalent27\",\n\t\"InspectTalentFrameTalent28\",\n\t\"InspectTalentFrameTalent29\",\n\t\"InspectTalentFrameTalent30\",\n\t\"InspectTalentFrameTalent31\",\n\t\"InspectTalentFrameTalent32\",\n\t\"InspectTalentFrameTalent33\",\n\t\"InspectTalentFrameTalent34\",\n\t\"InspectTalentFrameTalent35\",\n\t\"InspectTalentFrameTalent36\",\n\t\"InspectTalentFrameTalent37\",\n\t\"InspectTalentFrameTalent38\",\n\t\"InspectTalentFrameTalent39\",\n\t\"InspectTalentFrameTalent40\",\n\t\"InspectTalentFrameArrowFrame\",\n\t\"InspectTalentFrameScrollFrameScrollBar\",\n\t\"InspectTalentFrameScrollFrameScrollBarScrollUpButton\",\n\t\"InspectTalentFrameScrollFrameScrollBarScrollDownButton\",\n\t\"InspectTalentFrameScrollButtonOverlay\",\n\t-- widgets: Blizzard_InspectUI\n\t\"InspectBackSlotCount\",\n\t\"InspectBackSlotIconTexture\",\n\t\"InspectBackSlotStock\",\n\t\"InspectChestSlotCount\",\n\t\"InspectChestSlotIconTexture\",\n\t\"InspectChestSlotStock\",\n\t\"InspectFeetSlotCount\",\n\t\"InspectFeetSlotIconTexture\",\n\t\"InspectFeetSlotStock\",\n\t\"InspectFinger0SlotCount\",\n\t\"InspectFinger0SlotIconTexture\",\n\t\"InspectFinger0SlotStock\",\n\t\"InspectFinger1SlotCount\",\n\t\"InspectFinger1SlotIconTexture\",\n\t\"InspectFinger1SlotStock\",\n\t\"InspectFramePortrait\",\n\t\"InspectFrameTab1HighlightTexture\",\n\t\"InspectFrameTab1Left\",\n\t\"InspectFrameTab1LeftDisabled\",\n\t\"InspectFrameTab1Middle\",\n\t\"InspectFrameTab1MiddleDisabled\",\n\t\"InspectFrameTab1Right\",\n\t\"InspectFrameTab1RightDisabled\",\n\t\"InspectFrameTab1Text\",\n\t\"InspectFrameTab2HighlightTexture\",\n\t\"InspectFrameTab2Left\",\n\t\"InspectFrameTab2LeftDisabled\",\n\t\"InspectFrameTab2Middle\",\n\t\"InspectFrameTab2MiddleDisabled\",\n\t\"InspectFrameTab2Right\",\n\t\"InspectFrameTab2RightDisabled\",\n\t\"InspectFrameTab2Text\",\n\t\"InspectFrameTab3HighlightTexture\",\n\t\"InspectFrameTab3Left\",\n\t\"InspectFrameTab3LeftDisabled\",\n\t\"InspectFrameTab3Middle\",\n\t\"InspectFrameTab3MiddleDisabled\",\n\t\"InspectFrameTab3Right\",\n\t\"InspectFrameTab3RightDisabled\",\n\t\"InspectFrameTab3Text\",\n\t\"InspectGuildText\",\n\t\"InspectHandsSlotCount\",\n\t\"InspectHandsSlotIconTexture\",\n\t\"InspectHandsSlotStock\",\n\t\"InspectHeadSlotCount\",\n\t\"InspectHeadSlotIconTexture\",\n\t\"InspectHeadSlotStock\",\n\t\"InspectLegsSlotCount\",\n\t\"InspectLegsSlotIconTexture\",\n\t\"InspectLegsSlotStock\",\n\t\"InspectLevelText\",\n\t\"InspectMainHandSlotCount\",\n\t\"InspectMainHandSlotIconTexture\",\n\t\"InspectMainHandSlotStock\",\n\t\"InspectNameText\",\n\t\"InspectNeckSlotCount\",\n\t\"InspectNeckSlotIconTexture\",\n\t\"InspectNeckSlotStock\",\n\t\"InspectPVPFrameArenaIcon\",\n\t\"InspectPVPFrameArenaLabel\",\n\t\"InspectPVPFrameArenaPoints\",\n\t\"InspectPVPFrameBackground\",\n\t\"InspectPVPFrameHonorIcon\",\n\t\"InspectPVPFrameHonorLabel\",\n\t\"InspectPVPFrameHonorPoints\",\n\t\"InspectPVPFrameLine1\",\n\t\"InspectPVPHonorHonorLabel\",\n\t\"InspectPVPHonorKillsLabel\",\n\t\"InspectPVPHonorLifetimeHonor\",\n\t\"InspectPVPHonorLifetimeKills\",\n\t\"InspectPVPHonorLifetimeLabel\",\n\t\"InspectPVPHonorTodayHonor\",\n\t\"InspectPVPHonorTodayKills\",\n\t\"InspectPVPHonorTodayLabel\",\n\t\"InspectPVPHonorYesterdayHonor\",\n\t\"InspectPVPHonorYesterdayKills\",\n\t\"InspectPVPHonorYesterdayLabel\",\n\t\"InspectPVPTeam1Background\",\n\t\"InspectPVPTeam1Bottom\",\n\t\"InspectPVPTeam1Data-\",\n\t\"InspectPVPTeam1DataGames\",\n\t\"InspectPVPTeam1DataGamesLabel\",\n\t\"InspectPVPTeam1DataLoss\",\n\t\"InspectPVPTeam1DataName\",\n\t\"InspectPVPTeam1DataPlayed\",\n\t\"InspectPVPTeam1DataPlayedLabel\",\n\t\"InspectPVPTeam1DataRating\",\n\t\"InspectPVPTeam1DataRatingLabel\",\n\t\"InspectPVPTeam1DataTypeLabel\",\n\t\"InspectPVPTeam1DataWinLossLabel\",\n\t\"InspectPVPTeam1DataWins\",\n\t\"InspectPVPTeam1Left\",\n\t\"InspectPVPTeam1Right\",\n\t\"InspectPVPTeam1StandardBanner\",\n\t\"InspectPVPTeam1StandardBar\",\n\t\"InspectPVPTeam1StandardBorder\",\n\t\"InspectPVPTeam1StandardEmblem\",\n\t\"InspectPVPTeam1TeamType\",\n\t\"InspectPVPTeam1Top\",\n\t\"InspectPVPTeam2Background\",\n\t\"InspectPVPTeam2Bottom\",\n\t\"InspectPVPTeam2Data-\",\n\t\"InspectPVPTeam2DataGames\",\n\t\"InspectPVPTeam2DataGamesLabel\",\n\t\"InspectPVPTeam2DataLoss\",\n\t\"InspectPVPTeam2DataName\",\n\t\"InspectPVPTeam2DataPlayed\",\n\t\"InspectPVPTeam2DataPlayedLabel\",\n\t\"InspectPVPTeam2DataRating\",\n\t\"InspectPVPTeam2DataRatingLabel\",\n\t\"InspectPVPTeam2DataTypeLabel\",\n\t\"InspectPVPTeam2DataWinLossLabel\",\n\t\"InspectPVPTeam2DataWins\",\n\t\"InspectPVPTeam2Left\",\n\t\"InspectPVPTeam2Right\",\n\t\"InspectPVPTeam2StandardBanner\",\n\t\"InspectPVPTeam2StandardBar\",\n\t\"InspectPVPTeam2StandardBorder\",\n\t\"InspectPVPTeam2StandardEmblem\",\n\t\"InspectPVPTeam2TeamType\",\n\t\"InspectPVPTeam2Top\",\n\t\"InspectPVPTeam3Background\",\n\t\"InspectPVPTeam3Bottom\",\n\t\"InspectPVPTeam3Data-\",\n\t\"InspectPVPTeam3DataGames\",\n\t\"InspectPVPTeam3DataGamesLabel\",\n\t\"InspectPVPTeam3DataLoss\",\n\t\"InspectPVPTeam3DataName\",\n\t\"InspectPVPTeam3DataPlayed\",\n\t\"InspectPVPTeam3DataPlayedLabel\",\n\t\"InspectPVPTeam3DataRating\",\n\t\"InspectPVPTeam3DataRatingLabel\",\n\t\"InspectPVPTeam3DataTypeLabel\",\n\t\"InspectPVPTeam3DataWinLossLabel\",\n\t\"InspectPVPTeam3DataWins\",\n\t\"InspectPVPTeam3Left\",\n\t\"InspectPVPTeam3Right\",\n\t\"InspectPVPTeam3StandardBanner\",\n\t\"InspectPVPTeam3StandardBar\",\n\t\"InspectPVPTeam3StandardBorder\",\n\t\"InspectPVPTeam3StandardEmblem\",\n\t\"InspectPVPTeam3TeamType\",\n\t\"InspectPVPTeam3Top\",\n\t\"InspectRangedSlotCount\",\n\t\"InspectRangedSlotIconTexture\",\n\t\"InspectRangedSlotStock\",\n\t\"InspectSecondaryHandSlotCount\",\n\t\"InspectSecondaryHandSlotIconTexture\",\n\t\"InspectSecondaryHandSlotStock\",\n\t\"InspectShirtSlotCount\",\n\t\"InspectShirtSlotIconTexture\",\n\t\"InspectShirtSlotStock\",\n\t\"InspectShoulderSlotCount\",\n\t\"InspectShoulderSlotIconTexture\",\n\t\"InspectShoulderSlotStock\",\n\t\"InspectTabardSlotCount\",\n\t\"InspectTabardSlotIconTexture\",\n\t\"InspectTabardSlotStock\",\n\t\"InspectTalentFrameArrow1\",\n\t\"InspectTalentFrameArrow10\",\n\t\"InspectTalentFrameArrow11\",\n\t\"InspectTalentFrameArrow12\",\n\t\"InspectTalentFrameArrow13\",\n\t\"InspectTalentFrameArrow14\",\n\t\"InspectTalentFrameArrow15\",\n\t\"InspectTalentFrameArrow16\",\n\t\"InspectTalentFrameArrow17\",\n\t\"InspectTalentFrameArrow18\",\n\t\"InspectTalentFrameArrow19\",\n\t\"InspectTalentFrameArrow2\",\n\t\"InspectTalentFrameArrow20\",\n\t\"InspectTalentFrameArrow21\",\n\t\"InspectTalentFrameArrow22\",\n\t\"InspectTalentFrameArrow23\",\n\t\"InspectTalentFrameArrow24\",\n\t\"InspectTalentFrameArrow25\",\n\t\"InspectTalentFrameArrow26\",\n\t\"InspectTalentFrameArrow27\",\n\t\"InspectTalentFrameArrow28\",\n\t\"InspectTalentFrameArrow29\",\n\t\"InspectTalentFrameArrow3\",\n\t\"InspectTalentFrameArrow30\",\n\t\"InspectTalentFrameArrow4\",\n\t\"InspectTalentFrameArrow5\",\n\t\"InspectTalentFrameArrow6\",\n\t\"InspectTalentFrameArrow7\",\n\t\"InspectTalentFrameArrow8\",\n\t\"InspectTalentFrameArrow9\",\n\t\"InspectTalentFrameBackgroundBottomLeft\",\n\t\"InspectTalentFrameBackgroundBottomRight\",\n\t\"InspectTalentFrameBackgroundTopLeft\",\n\t\"InspectTalentFrameBackgroundTopRight\",\n\t\"InspectTalentFrameBranch1\",\n\t\"InspectTalentFrameBranch10\",\n\t\"InspectTalentFrameBranch11\",\n\t\"InspectTalentFrameBranch12\",\n\t\"InspectTalentFrameBranch13\",\n\t\"InspectTalentFrameBranch14\",\n\t\"InspectTalentFrameBranch15\",\n\t\"InspectTalentFrameBranch16\",\n\t\"InspectTalentFrameBranch17\",\n\t\"InspectTalentFrameBranch18\",\n\t\"InspectTalentFrameBranch19\",\n\t\"InspectTalentFrameBranch2\",\n\t\"InspectTalentFrameBranch20\",\n\t\"InspectTalentFrameBranch21\",\n\t\"InspectTalentFrameBranch22\",\n\t\"InspectTalentFrameBranch23\",\n\t\"InspectTalentFrameBranch24\",\n\t\"InspectTalentFrameBranch25\",\n\t\"InspectTalentFrameBranch26\",\n\t\"InspectTalentFrameBranch27\",\n\t\"InspectTalentFrameBranch28\",\n\t\"InspectTalentFrameBranch29\",\n\t\"InspectTalentFrameBranch3\",\n\t\"InspectTalentFrameBranch30\",\n\t\"InspectTalentFrameBranch4\",\n\t\"InspectTalentFrameBranch5\",\n\t\"InspectTalentFrameBranch6\",\n\t\"InspectTalentFrameBranch7\",\n\t\"InspectTalentFrameBranch8\",\n\t\"InspectTalentFrameBranch9\",\n\t\"InspectTalentFramePointsBarBackground\",\n\t\"InspectTalentFramePointsBarBorderLeft\",\n\t\"InspectTalentFramePointsBarBorderMiddle\",\n\t\"InspectTalentFramePointsBarBorderRight\",\n\t\"InspectTalentFramePortrait\",\n\t\"InspectTalentFrameScrollFrameScrollBarThumbTexture\",\n\t\"InspectTalentFrameSpentPointsText\",\n\t\"InspectTalentFrameTab1HighlightTexture\",\n\t\"InspectTalentFrameTab1Left\",\n\t\"InspectTalentFrameTab1LeftDisabled\",\n\t\"InspectTalentFrameTab1Middle\",\n\t\"InspectTalentFrameTab1MiddleDisabled\",\n\t\"InspectTalentFrameTab1Right\",\n\t\"InspectTalentFrameTab1RightDisabled\",\n\t\"InspectTalentFrameTab1Text\",\n\t\"InspectTalentFrameTab2HighlightTexture\",\n\t\"InspectTalentFrameTab2Left\",\n\t\"InspectTalentFrameTab2LeftDisabled\",\n\t\"InspectTalentFrameTab2Middle\",\n\t\"InspectTalentFrameTab2MiddleDisabled\",\n\t\"InspectTalentFrameTab2Right\",\n\t\"InspectTalentFrameTab2RightDisabled\",\n\t\"InspectTalentFrameTab2Text\",\n\t\"InspectTalentFrameTab3HighlightTexture\",\n\t\"InspectTalentFrameTab3Left\",\n\t\"InspectTalentFrameTab3LeftDisabled\",\n\t\"InspectTalentFrameTab3Middle\",\n\t\"InspectTalentFrameTab3MiddleDisabled\",\n\t\"InspectTalentFrameTab3Right\",\n\t\"InspectTalentFrameTab3RightDisabled\",\n\t\"InspectTalentFrameTab3Text\",\n\t\"InspectTalentFrameTalent10Count\",\n\t\"InspectTalentFrameTalent10IconTexture\",\n\t\"InspectTalentFrameTalent10NormalTexture\",\n\t\"InspectTalentFrameTalent10Rank\",\n\t\"InspectTalentFrameTalent10RankBorder\",\n\t\"InspectTalentFrameTalent10Slot\",\n\t\"InspectTalentFrameTalent10Stock\",\n\t\"InspectTalentFrameTalent11Count\",\n\t\"InspectTalentFrameTalent11IconTexture\",\n\t\"InspectTalentFrameTalent11NormalTexture\",\n\t\"InspectTalentFrameTalent11Rank\",\n\t\"InspectTalentFrameTalent11RankBorder\",\n\t\"InspectTalentFrameTalent11Slot\",\n\t\"InspectTalentFrameTalent11Stock\",\n\t\"InspectTalentFrameTalent12Count\",\n\t\"InspectTalentFrameTalent12IconTexture\",\n\t\"InspectTalentFrameTalent12NormalTexture\",\n\t\"InspectTalentFrameTalent12Rank\",\n\t\"InspectTalentFrameTalent12RankBorder\",\n\t\"InspectTalentFrameTalent12Slot\",\n\t\"InspectTalentFrameTalent12Stock\",\n\t\"InspectTalentFrameTalent13Count\",\n\t\"InspectTalentFrameTalent13IconTexture\",\n\t\"InspectTalentFrameTalent13NormalTexture\",\n\t\"InspectTalentFrameTalent13Rank\",\n\t\"InspectTalentFrameTalent13RankBorder\",\n\t\"InspectTalentFrameTalent13Slot\",\n\t\"InspectTalentFrameTalent13Stock\",\n\t\"InspectTalentFrameTalent14Count\",\n\t\"InspectTalentFrameTalent14IconTexture\",\n\t\"InspectTalentFrameTalent14NormalTexture\",\n\t\"InspectTalentFrameTalent14Rank\",\n\t\"InspectTalentFrameTalent14RankBorder\",\n\t\"InspectTalentFrameTalent14Slot\",\n\t\"InspectTalentFrameTalent14Stock\",\n\t\"InspectTalentFrameTalent15Count\",\n\t\"InspectTalentFrameTalent15IconTexture\",\n\t\"InspectTalentFrameTalent15NormalTexture\",\n\t\"InspectTalentFrameTalent15Rank\",\n\t\"InspectTalentFrameTalent15RankBorder\",\n\t\"InspectTalentFrameTalent15Slot\",\n\t\"InspectTalentFrameTalent15Stock\",\n\t\"InspectTalentFrameTalent16Count\",\n\t\"InspectTalentFrameTalent16IconTexture\",\n\t\"InspectTalentFrameTalent16NormalTexture\",\n\t\"InspectTalentFrameTalent16Rank\",\n\t\"InspectTalentFrameTalent16RankBorder\",\n\t\"InspectTalentFrameTalent16Slot\",\n\t\"InspectTalentFrameTalent16Stock\",\n\t\"InspectTalentFrameTalent17Count\",\n\t\"InspectTalentFrameTalent17IconTexture\",\n\t\"InspectTalentFrameTalent17NormalTexture\",\n\t\"InspectTalentFrameTalent17Rank\",\n\t\"InspectTalentFrameTalent17RankBorder\",\n\t\"InspectTalentFrameTalent17Slot\",\n\t\"InspectTalentFrameTalent17Stock\",\n\t\"InspectTalentFrameTalent18Count\",\n\t\"InspectTalentFrameTalent18IconTexture\",\n\t\"InspectTalentFrameTalent18NormalTexture\",\n\t\"InspectTalentFrameTalent18Rank\",\n\t\"InspectTalentFrameTalent18RankBorder\",\n\t\"InspectTalentFrameTalent18Slot\",\n\t\"InspectTalentFrameTalent18Stock\",\n\t\"InspectTalentFrameTalent19Count\",\n\t\"InspectTalentFrameTalent19IconTexture\",\n\t\"InspectTalentFrameTalent19NormalTexture\",\n\t\"InspectTalentFrameTalent19Rank\",\n\t\"InspectTalentFrameTalent19RankBorder\",\n\t\"InspectTalentFrameTalent19Slot\",\n\t\"InspectTalentFrameTalent19Stock\",\n\t\"InspectTalentFrameTalent1Count\",\n\t\"InspectTalentFrameTalent1IconTexture\",\n\t\"InspectTalentFrameTalent1NormalTexture\",\n\t\"InspectTalentFrameTalent1Rank\",\n\t\"InspectTalentFrameTalent1RankBorder\",\n\t\"InspectTalentFrameTalent1Slot\",\n\t\"InspectTalentFrameTalent1Stock\",\n\t\"InspectTalentFrameTalent20Count\",\n\t\"InspectTalentFrameTalent20IconTexture\",\n\t\"InspectTalentFrameTalent20NormalTexture\",\n\t\"InspectTalentFrameTalent20Rank\",\n\t\"InspectTalentFrameTalent20RankBorder\",\n\t\"InspectTalentFrameTalent20Slot\",\n\t\"InspectTalentFrameTalent20Stock\",\n\t\"InspectTalentFrameTalent21Count\",\n\t\"InspectTalentFrameTalent21IconTexture\",\n\t\"InspectTalentFrameTalent21NormalTexture\",\n\t\"InspectTalentFrameTalent21Rank\",\n\t\"InspectTalentFrameTalent21RankBorder\",\n\t\"InspectTalentFrameTalent21Slot\",\n\t\"InspectTalentFrameTalent21Stock\",\n\t\"InspectTalentFrameTalent22Count\",\n\t\"InspectTalentFrameTalent22IconTexture\",\n\t\"InspectTalentFrameTalent22NormalTexture\",\n\t\"InspectTalentFrameTalent22Rank\",\n\t\"InspectTalentFrameTalent22RankBorder\",\n\t\"InspectTalentFrameTalent22Slot\",\n\t\"InspectTalentFrameTalent22Stock\",\n\t\"InspectTalentFrameTalent23Count\",\n\t\"InspectTalentFrameTalent23IconTexture\",\n\t\"InspectTalentFrameTalent23NormalTexture\",\n\t\"InspectTalentFrameTalent23Rank\",\n\t\"InspectTalentFrameTalent23RankBorder\",\n\t\"InspectTalentFrameTalent23Slot\",\n\t\"InspectTalentFrameTalent23Stock\",\n\t\"InspectTalentFrameTalent24Count\",\n\t\"InspectTalentFrameTalent24IconTexture\",\n\t\"InspectTalentFrameTalent24NormalTexture\",\n\t\"InspectTalentFrameTalent24Rank\",\n\t\"InspectTalentFrameTalent24RankBorder\",\n\t\"InspectTalentFrameTalent24Slot\",\n\t\"InspectTalentFrameTalent24Stock\",\n\t\"InspectTalentFrameTalent25Count\",\n\t\"InspectTalentFrameTalent25IconTexture\",\n\t\"InspectTalentFrameTalent25NormalTexture\",\n\t\"InspectTalentFrameTalent25Rank\",\n\t\"InspectTalentFrameTalent25RankBorder\",\n\t\"InspectTalentFrameTalent25Slot\",\n\t\"InspectTalentFrameTalent25Stock\",\n\t\"InspectTalentFrameTalent26Count\",\n\t\"InspectTalentFrameTalent26IconTexture\",\n\t\"InspectTalentFrameTalent26NormalTexture\",\n\t\"InspectTalentFrameTalent26Rank\",\n\t\"InspectTalentFrameTalent26RankBorder\",\n\t\"InspectTalentFrameTalent26Slot\",\n\t\"InspectTalentFrameTalent26Stock\",\n\t\"InspectTalentFrameTalent27Count\",\n\t\"InspectTalentFrameTalent27IconTexture\",\n\t\"InspectTalentFrameTalent27NormalTexture\",\n\t\"InspectTalentFrameTalent27Rank\",\n\t\"InspectTalentFrameTalent27RankBorder\",\n\t\"InspectTalentFrameTalent27Slot\",\n\t\"InspectTalentFrameTalent27Stock\",\n\t\"InspectTalentFrameTalent28Count\",\n\t\"InspectTalentFrameTalent28IconTexture\",\n\t\"InspectTalentFrameTalent28NormalTexture\",\n\t\"InspectTalentFrameTalent28Rank\",\n\t\"InspectTalentFrameTalent28RankBorder\",\n\t\"InspectTalentFrameTalent28Slot\",\n\t\"InspectTalentFrameTalent28Stock\",\n\t\"InspectTalentFrameTalent29Count\",\n\t\"InspectTalentFrameTalent29IconTexture\",\n\t\"InspectTalentFrameTalent29NormalTexture\",\n\t\"InspectTalentFrameTalent29Rank\",\n\t\"InspectTalentFrameTalent29RankBorder\",\n\t\"InspectTalentFrameTalent29Slot\",\n\t\"InspectTalentFrameTalent29Stock\",\n\t\"InspectTalentFrameTalent2Count\",\n\t\"InspectTalentFrameTalent2IconTexture\",\n\t\"InspectTalentFrameTalent2NormalTexture\",\n\t\"InspectTalentFrameTalent2Rank\",\n\t\"InspectTalentFrameTalent2RankBorder\",\n\t\"InspectTalentFrameTalent2Slot\",\n\t\"InspectTalentFrameTalent2Stock\",\n\t\"InspectTalentFrameTalent30Count\",\n\t\"InspectTalentFrameTalent30IconTexture\",\n\t\"InspectTalentFrameTalent30NormalTexture\",\n\t\"InspectTalentFrameTalent30Rank\",\n\t\"InspectTalentFrameTalent30RankBorder\",\n\t\"InspectTalentFrameTalent30Slot\",\n\t\"InspectTalentFrameTalent30Stock\",\n\t\"InspectTalentFrameTalent31Count\",\n\t\"InspectTalentFrameTalent31IconTexture\",\n\t\"InspectTalentFrameTalent31NormalTexture\",\n\t\"InspectTalentFrameTalent31Rank\",\n\t\"InspectTalentFrameTalent31RankBorder\",\n\t\"InspectTalentFrameTalent31Slot\",\n\t\"InspectTalentFrameTalent31Stock\",\n\t\"InspectTalentFrameTalent32Count\",\n\t\"InspectTalentFrameTalent32IconTexture\",\n\t\"InspectTalentFrameTalent32NormalTexture\",\n\t\"InspectTalentFrameTalent32Rank\",\n\t\"InspectTalentFrameTalent32RankBorder\",\n\t\"InspectTalentFrameTalent32Slot\",\n\t\"InspectTalentFrameTalent32Stock\",\n\t\"InspectTalentFrameTalent33Count\",\n\t\"InspectTalentFrameTalent33IconTexture\",\n\t\"InspectTalentFrameTalent33NormalTexture\",\n\t\"InspectTalentFrameTalent33Rank\",\n\t\"InspectTalentFrameTalent33RankBorder\",\n\t\"InspectTalentFrameTalent33Slot\",\n\t\"InspectTalentFrameTalent33Stock\",\n\t\"InspectTalentFrameTalent34Count\",\n\t\"InspectTalentFrameTalent34IconTexture\",\n\t\"InspectTalentFrameTalent34NormalTexture\",\n\t\"InspectTalentFrameTalent34Rank\",\n\t\"InspectTalentFrameTalent34RankBorder\",\n\t\"InspectTalentFrameTalent34Slot\",\n\t\"InspectTalentFrameTalent34Stock\",\n\t\"InspectTalentFrameTalent35Count\",\n\t\"InspectTalentFrameTalent35IconTexture\",\n\t\"InspectTalentFrameTalent35NormalTexture\",\n\t\"InspectTalentFrameTalent35Rank\",\n\t\"InspectTalentFrameTalent35RankBorder\",\n\t\"InspectTalentFrameTalent35Slot\",\n\t\"InspectTalentFrameTalent35Stock\",\n\t\"InspectTalentFrameTalent36Count\",\n\t\"InspectTalentFrameTalent36IconTexture\",\n\t\"InspectTalentFrameTalent36NormalTexture\",\n\t\"InspectTalentFrameTalent36Rank\",\n\t\"InspectTalentFrameTalent36RankBorder\",\n\t\"InspectTalentFrameTalent36Slot\",\n\t\"InspectTalentFrameTalent36Stock\",\n\t\"InspectTalentFrameTalent37Count\",\n\t\"InspectTalentFrameTalent37IconTexture\",\n\t\"InspectTalentFrameTalent37NormalTexture\",\n\t\"InspectTalentFrameTalent37Rank\",\n\t\"InspectTalentFrameTalent37RankBorder\",\n\t\"InspectTalentFrameTalent37Slot\",\n\t\"InspectTalentFrameTalent37Stock\",\n\t\"InspectTalentFrameTalent38Count\",\n\t\"InspectTalentFrameTalent38IconTexture\",\n\t\"InspectTalentFrameTalent38NormalTexture\",\n\t\"InspectTalentFrameTalent38Rank\",\n\t\"InspectTalentFrameTalent38RankBorder\",\n\t\"InspectTalentFrameTalent38Slot\",\n\t\"InspectTalentFrameTalent38Stock\",\n\t\"InspectTalentFrameTalent39Count\",\n\t\"InspectTalentFrameTalent39IconTexture\",\n\t\"InspectTalentFrameTalent39NormalTexture\",\n\t\"InspectTalentFrameTalent39Rank\",\n\t\"InspectTalentFrameTalent39RankBorder\",\n\t\"InspectTalentFrameTalent39Slot\",\n\t\"InspectTalentFrameTalent39Stock\",\n\t\"InspectTalentFrameTalent3Count\",\n\t\"InspectTalentFrameTalent3IconTexture\",\n\t\"InspectTalentFrameTalent3NormalTexture\",\n\t\"InspectTalentFrameTalent3Rank\",\n\t\"InspectTalentFrameTalent3RankBorder\",\n\t\"InspectTalentFrameTalent3Slot\",\n\t\"InspectTalentFrameTalent3Stock\",\n\t\"InspectTalentFrameTalent40Count\",\n\t\"InspectTalentFrameTalent40IconTexture\",\n\t\"InspectTalentFrameTalent40NormalTexture\",\n\t\"InspectTalentFrameTalent40Rank\",\n\t\"InspectTalentFrameTalent40RankBorder\",\n\t\"InspectTalentFrameTalent40Slot\",\n\t\"InspectTalentFrameTalent40Stock\",\n\t\"InspectTalentFrameTalent4Count\",\n\t\"InspectTalentFrameTalent4IconTexture\",\n\t\"InspectTalentFrameTalent4NormalTexture\",\n\t\"InspectTalentFrameTalent4Rank\",\n\t\"InspectTalentFrameTalent4RankBorder\",\n\t\"InspectTalentFrameTalent4Slot\",\n\t\"InspectTalentFrameTalent4Stock\",\n\t\"InspectTalentFrameTalent5Count\",\n\t\"InspectTalentFrameTalent5IconTexture\",\n\t\"InspectTalentFrameTalent5NormalTexture\",\n\t\"InspectTalentFrameTalent5Rank\",\n\t\"InspectTalentFrameTalent5RankBorder\",\n\t\"InspectTalentFrameTalent5Slot\",\n\t\"InspectTalentFrameTalent5Stock\",\n\t\"InspectTalentFrameTalent6Count\",\n\t\"InspectTalentFrameTalent6IconTexture\",\n\t\"InspectTalentFrameTalent6NormalTexture\",\n\t\"InspectTalentFrameTalent6Rank\",\n\t\"InspectTalentFrameTalent6RankBorder\",\n\t\"InspectTalentFrameTalent6Slot\",\n\t\"InspectTalentFrameTalent6Stock\",\n\t\"InspectTalentFrameTalent7Count\",\n\t\"InspectTalentFrameTalent7IconTexture\",\n\t\"InspectTalentFrameTalent7NormalTexture\",\n\t\"InspectTalentFrameTalent7Rank\",\n\t\"InspectTalentFrameTalent7RankBorder\",\n\t\"InspectTalentFrameTalent7Slot\",\n\t\"InspectTalentFrameTalent7Stock\",\n\t\"InspectTalentFrameTalent8Count\",\n\t\"InspectTalentFrameTalent8IconTexture\",\n\t\"InspectTalentFrameTalent8NormalTexture\",\n\t\"InspectTalentFrameTalent8Rank\",\n\t\"InspectTalentFrameTalent8RankBorder\",\n\t\"InspectTalentFrameTalent8Slot\",\n\t\"InspectTalentFrameTalent8Stock\",\n\t\"InspectTalentFrameTalent9Count\",\n\t\"InspectTalentFrameTalent9IconTexture\",\n\t\"InspectTalentFrameTalent9NormalTexture\",\n\t\"InspectTalentFrameTalent9Rank\",\n\t\"InspectTalentFrameTalent9RankBorder\",\n\t\"InspectTalentFrameTalent9Slot\",\n\t\"InspectTalentFrameTalent9Stock\",\n\t\"InspectTalentFrameTalentPointsText\",\n\t\"InspectTitleText\",\n\t\"InspectTrinket0SlotCount\",\n\t\"InspectTrinket0SlotIconTexture\",\n\t\"InspectTrinket0SlotStock\",\n\t\"InspectTrinket1SlotCount\",\n\t\"InspectTrinket1SlotIconTexture\",\n\t\"InspectTrinket1SlotStock\",\n\t\"InspectWaistSlotCount\",\n\t\"InspectWaistSlotIconTexture\",\n\t\"InspectWaistSlotStock\",\n\t\"InspectWristSlotCount\",\n\t\"InspectWristSlotIconTexture\",\n\t\"InspectWristSlotStock\",\n\n\t-- functions: Blizzard_ItemSocketingUI\n\t\"ItemSocketingFrame_OnEvent\",\n\t\"ItemSocketingFrame_OnLoad\",\n\t\"ItemSocketingFrame_Update\",\n\t\"ItemSocketingSocketButton_Disable\",\n\t\"ItemSocketingSocketButton_Enable\",\n\t\"ItemSocketingSocketButton_OnEnter\",\n\t\"ItemSocketingSocketButton_OnEvent\",\n\t\"ItemSocketingSocketButton_OnScrollRangeChanged\",\n\t-- tables: Blizzard_ItemSocketingUI\n\t\"GEM_TYPE_INFO\",\n\t\"ItemSocketingCloseButton\",\n\t\"ItemSocketingDescription\",\n\t\"ItemSocketingDescriptionStatusBar\",\n\t\"ItemSocketingFrame\",\n\t\"ItemSocketingScrollChild\",\n\t\"ItemSocketingScrollFrame\",\n\t\"ItemSocketingScrollFrameScrollBar\",\n\t\"ItemSocketingScrollFrameScrollBarScrollDownButton\",\n\t\"ItemSocketingScrollFrameScrollBarScrollUpButton\",\n\t\"ItemSocketingSocket1\",\n\t\"ItemSocketingSocket1BracketFrame\",\n\t\"ItemSocketingSocket1Shine\",\n\t\"ItemSocketingSocket2\",\n\t\"ItemSocketingSocket2BracketFrame\",\n\t\"ItemSocketingSocket2Shine\",\n\t\"ItemSocketingSocket3\",\n\t\"ItemSocketingSocket3BracketFrame\",\n\t\"ItemSocketingSocket3Shine\",\n\t\"ItemSocketingSocketButton\",\n\t-- frames: Blizzard_ItemSocketingUI\n\t\"ItemSocketingFrame\",\n\t\"ItemSocketingScrollFrame\",\n\t\"ItemSocketingScrollChild\",\n\t\"ItemSocketingDescription\",\n\t\"ItemSocketingDescriptionStatusBar\",\n\t\"ItemSocketingScrollFrameScrollBar\",\n\t\"ItemSocketingScrollFrameScrollBarScrollUpButton\",\n\t\"ItemSocketingScrollFrameScrollBarScrollDownButton\",\n\t\"ItemSocketingSocket1\",\n\t\"ItemSocketingSocket1Shine\",\n\t\"ItemSocketingSocket1BracketFrame\",\n\t\"ItemSocketingSocket2\",\n\t\"ItemSocketingSocket2Shine\",\n\t\"ItemSocketingSocket2BracketFrame\",\n\t\"ItemSocketingSocket3\",\n\t\"ItemSocketingSocket3Shine\",\n\t\"ItemSocketingSocket3BracketFrame\",\n\t\"ItemSocketingSocketButton\",\n\t\"ItemSocketingCloseButton\",\n\t-- widgets: Blizzard_ItemSocketingUI\n\t\"ItemSocketingDescriptionStatusBarTexture\",\n\t\"ItemSocketingDescriptionTextLeft1\",\n\t\"ItemSocketingDescriptionTextLeft2\",\n\t\"ItemSocketingDescriptionTextLeft3\",\n\t\"ItemSocketingDescriptionTextLeft4\",\n\t\"ItemSocketingDescriptionTextLeft5\",\n\t\"ItemSocketingDescriptionTextLeft6\",\n\t\"ItemSocketingDescriptionTextLeft7\",\n\t\"ItemSocketingDescriptionTextLeft8\",\n\t\"ItemSocketingDescriptionTextRight1\",\n\t\"ItemSocketingDescriptionTextRight2\",\n\t\"ItemSocketingDescriptionTextRight3\",\n\t\"ItemSocketingDescriptionTextRight4\",\n\t\"ItemSocketingDescriptionTextRight5\",\n\t\"ItemSocketingDescriptionTextRight6\",\n\t\"ItemSocketingDescriptionTextRight7\",\n\t\"ItemSocketingDescriptionTextRight8\",\n\t\"ItemSocketingDescriptionTexture1\",\n\t\"ItemSocketingDescriptionTexture10\",\n\t\"ItemSocketingDescriptionTexture2\",\n\t\"ItemSocketingDescriptionTexture3\",\n\t\"ItemSocketingDescriptionTexture4\",\n\t\"ItemSocketingDescriptionTexture5\",\n\t\"ItemSocketingDescriptionTexture6\",\n\t\"ItemSocketingDescriptionTexture7\",\n\t\"ItemSocketingDescriptionTexture8\",\n\t\"ItemSocketingDescriptionTexture9\",\n\t\"ItemSocketingFramePortrait\",\n\t\"ItemSocketingScrollFrameBottom\",\n\t\"ItemSocketingScrollFrameScrollBarThumbTexture\",\n\t\"ItemSocketingScrollFrameTop\",\n\t\"ItemSocketingSocket1Background\",\n\t\"ItemSocketingSocket1BracketFrameClosedBracket\",\n\t\"ItemSocketingSocket1BracketFrameOpenBracket\",\n\t\"ItemSocketingSocket1Color\",\n\t\"ItemSocketingSocket1IconTexture\",\n\t\"ItemSocketingSocket1Left\",\n\t\"ItemSocketingSocket1Right\",\n\t\"ItemSocketingSocket1Shine1\",\n\t\"ItemSocketingSocket1Shine2\",\n\t\"ItemSocketingSocket1Shine3\",\n\t\"ItemSocketingSocket1Shine4\",\n\t\"ItemSocketingSocket2Background\",\n\t\"ItemSocketingSocket2BracketFrameClosedBracket\",\n\t\"ItemSocketingSocket2BracketFrameOpenBracket\",\n\t\"ItemSocketingSocket2Color\",\n\t\"ItemSocketingSocket2IconTexture\",\n\t\"ItemSocketingSocket2Left\",\n\t\"ItemSocketingSocket2Right\",\n\t\"ItemSocketingSocket2Shine1\",\n\t\"ItemSocketingSocket2Shine2\",\n\t\"ItemSocketingSocket2Shine3\",\n\t\"ItemSocketingSocket2Shine4\",\n\t\"ItemSocketingSocket3Background\",\n\t\"ItemSocketingSocket3BracketFrameClosedBracket\",\n\t\"ItemSocketingSocket3BracketFrameOpenBracket\",\n\t\"ItemSocketingSocket3Color\",\n\t\"ItemSocketingSocket3IconTexture\",\n\t\"ItemSocketingSocket3Left\",\n\t\"ItemSocketingSocket3Right\",\n\t\"ItemSocketingSocket3Shine1\",\n\t\"ItemSocketingSocket3Shine2\",\n\t\"ItemSocketingSocket3Shine3\",\n\t\"ItemSocketingSocket3Shine4\",\n\t\"ItemSocketingSocketButtonLeft\",\n\t\"ItemSocketingSocketButtonMiddle\",\n\t\"ItemSocketingSocketButtonRight\",\n\n\t-- functions: Blizzard_MacroUI\n\t\"MacroButtonContainer_OnLoad\",\n\t\"MacroButton_OnClick\",\n\t\"MacroEditButton_OnClick\",\n\t\"MacroFrame_AddMacroLine\",\n\t\"MacroFrame_DeleteMacro\",\n\t\"MacroFrame_HideDetails\",\n\t\"MacroFrame_OnHide\",\n\t\"MacroFrame_OnLoad\",\n\t\"MacroFrame_OnShow\",\n\t\"MacroFrame_SaveMacro\",\n\t\"MacroFrame_SelectMacro\",\n\t\"MacroFrame_SetAccountMacros\",\n\t\"MacroFrame_SetCharacterMacros\",\n\t\"MacroFrame_Show\",\n\t\"MacroFrame_ShowDetails\",\n\t\"MacroFrame_Update\",\n\t\"MacroNewButton_OnClick\",\n\t\"MacroPopupButton_OnClick\",\n\t\"MacroPopupButton_SelectTexture\",\n\t\"MacroPopupFrame_CancelEdit\",\n\t\"MacroPopupFrame_OnHide\",\n\t\"MacroPopupFrame_OnShow\",\n\t\"MacroPopupFrame_Update\",\n\t\"MacroPopupOkayButton_OnClick\",\n\t\"MacroPopupOkayButton_Update\",\n\t-- tables: Blizzard_MacroUI\n\t\"MacroButton1\",\n\t\"MacroButton10\",\n\t\"MacroButton11\",\n\t\"MacroButton12\",\n\t\"MacroButton13\",\n\t\"MacroButton14\",\n\t\"MacroButton15\",\n\t\"MacroButton16\",\n\t\"MacroButton17\",\n\t\"MacroButton18\",\n\t\"MacroButton19\",\n\t\"MacroButton2\",\n\t\"MacroButton20\",\n\t\"MacroButton21\",\n\t\"MacroButton22\",\n\t\"MacroButton23\",\n\t\"MacroButton24\",\n\t\"MacroButton25\",\n\t\"MacroButton26\",\n\t\"MacroButton27\",\n\t\"MacroButton28\",\n\t\"MacroButton29\",\n\t\"MacroButton3\",\n\t\"MacroButton30\",\n\t\"MacroButton31\",\n\t\"MacroButton32\",\n\t\"MacroButton33\",\n\t\"MacroButton34\",\n\t\"MacroButton35\",\n\t\"MacroButton36\",\n\t\"MacroButton4\",\n\t\"MacroButton5\",\n\t\"MacroButton6\",\n\t\"MacroButton7\",\n\t\"MacroButton8\",\n\t\"MacroButton9\",\n\t\"MacroButtonContainer\",\n\t\"MacroButtonScrollFrame\",\n\t\"MacroButtonScrollFrameScrollBar\",\n\t\"MacroButtonScrollFrameScrollBarScrollDownButton\",\n\t\"MacroButtonScrollFrameScrollBarScrollUpButton\",\n\t\"MacroDeleteButton\",\n\t\"MacroEditButton\",\n\t\"MacroExitButton\",\n\t\"MacroFrame\",\n\t\"MacroFrameCloseButton\",\n\t\"MacroFrameScrollFrame\",\n\t\"MacroFrameScrollFrameScrollBar\",\n\t\"MacroFrameScrollFrameScrollBarScrollDownButton\",\n\t\"MacroFrameScrollFrameScrollBarScrollUpButton\",\n\t\"MacroFrameSelectedMacroButton\",\n\t\"MacroFrameTab1\",\n\t\"MacroFrameTab2\",\n\t\"MacroFrameText\",\n\t\"MacroFrameTextBackground\",\n\t\"MacroFrameTextButton\",\n\t\"MacroNewButton\",\n\t\"MacroPopupButton1\",\n\t\"MacroPopupButton10\",\n\t\"MacroPopupButton11\",\n\t\"MacroPopupButton12\",\n\t\"MacroPopupButton13\",\n\t\"MacroPopupButton14\",\n\t\"MacroPopupButton15\",\n\t\"MacroPopupButton16\",\n\t\"MacroPopupButton17\",\n\t\"MacroPopupButton18\",\n\t\"MacroPopupButton19\",\n\t\"MacroPopupButton2\",\n\t\"MacroPopupButton20\",\n\t\"MacroPopupButton3\",\n\t\"MacroPopupButton4\",\n\t\"MacroPopupButton5\",\n\t\"MacroPopupButton6\",\n\t\"MacroPopupButton7\",\n\t\"MacroPopupButton8\",\n\t\"MacroPopupButton9\",\n\t\"MacroPopupCancelButton\",\n\t\"MacroPopupEditBox\",\n\t\"MacroPopupFrame\",\n\t\"MacroPopupOkayButton\",\n\t\"MacroPopupScrollFrame\",\n\t\"MacroPopupScrollFrameScrollBar\",\n\t\"MacroPopupScrollFrameScrollBarScrollDownButton\",\n\t\"MacroPopupScrollFrameScrollBarScrollUpButton\",\n\t\"MacroPopupScrollFrameScrollChildFrame\",\n\t-- frames: Blizzard_MacroUI\n\t\"MacroFrame\",\n\t\"MacroFrameSelectedMacroButton\",\n\t\"MacroButtonScrollFrame\",\n\t\"MacroButtonContainer\",\n\t\"MacroButton1\",\n\t\"MacroButton2\",\n\t\"MacroButton3\",\n\t\"MacroButton4\",\n\t\"MacroButton5\",\n\t\"MacroButton6\",\n\t\"MacroButton7\",\n\t\"MacroButton8\",\n\t\"MacroButton9\",\n\t\"MacroButton10\",\n\t\"MacroButton11\",\n\t\"MacroButton12\",\n\t\"MacroButton13\",\n\t\"MacroButton14\",\n\t\"MacroButton15\",\n\t\"MacroButton16\",\n\t\"MacroButton17\",\n\t\"MacroButton18\",\n\t\"MacroButton19\",\n\t\"MacroButton20\",\n\t\"MacroButton21\",\n\t\"MacroButton22\",\n\t\"MacroButton23\",\n\t\"MacroButton24\",\n\t\"MacroButton25\",\n\t\"MacroButton26\",\n\t\"MacroButton27\",\n\t\"MacroButton28\",\n\t\"MacroButton29\",\n\t\"MacroButton30\",\n\t\"MacroButton31\",\n\t\"MacroButton32\",\n\t\"MacroButton33\",\n\t\"MacroButton34\",\n\t\"MacroButton35\",\n\t\"MacroButton36\",\n\t\"MacroButtonScrollFrameScrollBar\",\n\t\"MacroButtonScrollFrameScrollBarScrollUpButton\",\n\t\"MacroButtonScrollFrameScrollBarScrollDownButton\",\n\t\"MacroEditButton\",\n\t\"MacroFrameScrollFrame\",\n\t\"MacroFrameText\",\n\t\"MacroFrameScrollFrameScrollBar\",\n\t\"MacroFrameScrollFrameScrollBarScrollUpButton\",\n\t\"MacroFrameScrollFrameScrollBarScrollDownButton\",\n\t\"MacroFrameTextButton\",\n\t\"MacroFrameTextBackground\",\n\t\"MacroFrameTab1\",\n\t\"MacroFrameTab2\",\n\t\"MacroDeleteButton\",\n\t\"MacroNewButton\",\n\t\"MacroExitButton\",\n\t\"MacroFrameCloseButton\",\n\t\"MacroPopupFrame\",\n\t\"MacroPopupEditBox\",\n\t\"MacroPopupScrollFrame\",\n\t\"MacroPopupScrollFrameScrollChildFrame\",\n\t\"MacroPopupScrollFrameScrollBar\",\n\t\"MacroPopupScrollFrameScrollBarScrollUpButton\",\n\t\"MacroPopupScrollFrameScrollBarScrollDownButton\",\n\t\"MacroPopupButton1\",\n\t\"MacroPopupButton2\",\n\t\"MacroPopupButton3\",\n\t\"MacroPopupButton4\",\n\t\"MacroPopupButton5\",\n\t\"MacroPopupButton6\",\n\t\"MacroPopupButton7\",\n\t\"MacroPopupButton8\",\n\t\"MacroPopupButton9\",\n\t\"MacroPopupButton10\",\n\t\"MacroPopupButton11\",\n\t\"MacroPopupButton12\",\n\t\"MacroPopupButton13\",\n\t\"MacroPopupButton14\",\n\t\"MacroPopupButton15\",\n\t\"MacroPopupButton16\",\n\t\"MacroPopupButton17\",\n\t\"MacroPopupButton18\",\n\t\"MacroPopupButton19\",\n\t\"MacroPopupButton20\",\n\t\"MacroPopupCancelButton\",\n\t\"MacroPopupOkayButton\",\n\t-- widgets: Blizzard_MacroUI\n\t\"MacroButton10Icon\",\n\t\"MacroButton10Name\",\n\t\"MacroButton11Icon\",\n\t\"MacroButton11Name\",\n\t\"MacroButton12Icon\",\n\t\"MacroButton12Name\",\n\t\"MacroButton13Icon\",\n\t\"MacroButton13Name\",\n\t\"MacroButton14Icon\",\n\t\"MacroButton14Name\",\n\t\"MacroButton15Icon\",\n\t\"MacroButton15Name\",\n\t\"MacroButton16Icon\",\n\t\"MacroButton16Name\",\n\t\"MacroButton17Icon\",\n\t\"MacroButton17Name\",\n\t\"MacroButton18Icon\",\n\t\"MacroButton18Name\",\n\t\"MacroButton19Icon\",\n\t\"MacroButton19Name\",\n\t\"MacroButton1Icon\",\n\t\"MacroButton1Name\",\n\t\"MacroButton20Icon\",\n\t\"MacroButton20Name\",\n\t\"MacroButton21Icon\",\n\t\"MacroButton21Name\",\n\t\"MacroButton22Icon\",\n\t\"MacroButton22Name\",\n\t\"MacroButton23Icon\",\n\t\"MacroButton23Name\",\n\t\"MacroButton24Icon\",\n\t\"MacroButton24Name\",\n\t\"MacroButton25Icon\",\n\t\"MacroButton25Name\",\n\t\"MacroButton26Icon\",\n\t\"MacroButton26Name\",\n\t\"MacroButton27Icon\",\n\t\"MacroButton27Name\",\n\t\"MacroButton28Icon\",\n\t\"MacroButton28Name\",\n\t\"MacroButton29Icon\",\n\t\"MacroButton29Name\",\n\t\"MacroButton2Icon\",\n\t\"MacroButton2Name\",\n\t\"MacroButton30Icon\",\n\t\"MacroButton30Name\",\n\t\"MacroButton31Icon\",\n\t\"MacroButton31Name\",\n\t\"MacroButton32Icon\",\n\t\"MacroButton32Name\",\n\t\"MacroButton33Icon\",\n\t\"MacroButton33Name\",\n\t\"MacroButton34Icon\",\n\t\"MacroButton34Name\",\n\t\"MacroButton35Icon\",\n\t\"MacroButton35Name\",\n\t\"MacroButton36Icon\",\n\t\"MacroButton36Name\",\n\t\"MacroButton3Icon\",\n\t\"MacroButton3Name\",\n\t\"MacroButton4Icon\",\n\t\"MacroButton4Name\",\n\t\"MacroButton5Icon\",\n\t\"MacroButton5Name\",\n\t\"MacroButton6Icon\",\n\t\"MacroButton6Name\",\n\t\"MacroButton7Icon\",\n\t\"MacroButton7Name\",\n\t\"MacroButton8Icon\",\n\t\"MacroButton8Name\",\n\t\"MacroButton9Icon\",\n\t\"MacroButton9Name\",\n\t\"MacroButtonScrollFrameBottom\",\n\t\"MacroButtonScrollFrameMiddle\",\n\t\"MacroButtonScrollFrameScrollBarThumbTexture\",\n\t\"MacroButtonScrollFrameTop\",\n\t\"MacroEditButtonText\",\n\t\"MacroExitButtonText\",\n\t\"MacroFrameCharLimitText\",\n\t\"MacroFrameEnterMacroText\",\n\t\"MacroFramePortrait\",\n\t\"MacroFrameScrollFrameScrollBarThumbTexture\",\n\t\"MacroFrameSelectedMacroBackground\",\n\t\"MacroFrameSelectedMacroButtonIcon\",\n\t\"MacroFrameSelectedMacroButtonName\",\n\t\"MacroFrameSelectedMacroName\",\n\t\"MacroFrameTab1HighlightTexture\",\n\t\"MacroFrameTab1Left\",\n\t\"MacroFrameTab1LeftDisabled\",\n\t\"MacroFrameTab1Middle\",\n\t\"MacroFrameTab1MiddleDisabled\",\n\t\"MacroFrameTab1Right\",\n\t\"MacroFrameTab1RightDisabled\",\n\t\"MacroFrameTab1Text\",\n\t\"MacroFrameTab2HighlightTexture\",\n\t\"MacroFrameTab2Left\",\n\t\"MacroFrameTab2LeftDisabled\",\n\t\"MacroFrameTab2Middle\",\n\t\"MacroFrameTab2MiddleDisabled\",\n\t\"MacroFrameTab2Right\",\n\t\"MacroFrameTab2RightDisabled\",\n\t\"MacroFrameTab2Text\",\n\t\"MacroHorizontalBarLeft\",\n\t\"MacroNewButtonText\",\n\t\"MacroPopupButton10Icon\",\n\t\"MacroPopupButton10Name\",\n\t\"MacroPopupButton11Icon\",\n\t\"MacroPopupButton11Name\",\n\t\"MacroPopupButton12Icon\",\n\t\"MacroPopupButton12Name\",\n\t\"MacroPopupButton13Icon\",\n\t\"MacroPopupButton13Name\",\n\t\"MacroPopupButton14Icon\",\n\t\"MacroPopupButton14Name\",\n\t\"MacroPopupButton15Icon\",\n\t\"MacroPopupButton15Name\",\n\t\"MacroPopupButton16Icon\",\n\t\"MacroPopupButton16Name\",\n\t\"MacroPopupButton17Icon\",\n\t\"MacroPopupButton17Name\",\n\t\"MacroPopupButton18Icon\",\n\t\"MacroPopupButton18Name\",\n\t\"MacroPopupButton19Icon\",\n\t\"MacroPopupButton19Name\",\n\t\"MacroPopupButton1Icon\",\n\t\"MacroPopupButton1Name\",\n\t\"MacroPopupButton20Icon\",\n\t\"MacroPopupButton20Name\",\n\t\"MacroPopupButton2Icon\",\n\t\"MacroPopupButton2Name\",\n\t\"MacroPopupButton3Icon\",\n\t\"MacroPopupButton3Name\",\n\t\"MacroPopupButton4Icon\",\n\t\"MacroPopupButton4Name\",\n\t\"MacroPopupButton5Icon\",\n\t\"MacroPopupButton5Name\",\n\t\"MacroPopupButton6Icon\",\n\t\"MacroPopupButton6Name\",\n\t\"MacroPopupButton7Icon\",\n\t\"MacroPopupButton7Name\",\n\t\"MacroPopupButton8Icon\",\n\t\"MacroPopupButton8Name\",\n\t\"MacroPopupButton9Icon\",\n\t\"MacroPopupButton9Name\",\n\t\"MacroPopupCancelButtonText\",\n\t\"MacroPopupNameLeft\",\n\t\"MacroPopupNameMiddle\",\n\t\"MacroPopupNameRight\",\n\t\"MacroPopupOkayButtonText\",\n\t\"MacroPopupScrollFrameScrollBarThumbTexture\",\n\n\t-- functions: Blizzard_TalentUI\n\t\"PlayerGlyphTab_OnClick\",\n\t\"PlayerGlyphTab_OnEvent\",\n\t\"PlayerGlyphTab_OnLoad\",\n\t\"PlayerSpecTab_Load\",\n\t\"PlayerSpecTab_OnClick\",\n\t\"PlayerSpecTab_OnEnter\",\n\t\"PlayerSpecTab_Update\",\n\t\"PlayerTalentFrameActivateButton_OnClick\",\n\t\"PlayerTalentFrameActivateButton_OnEvent\",\n\t\"PlayerTalentFrameActivateButton_OnHide\",\n\t\"PlayerTalentFrameActivateButton_OnLoad\",\n\t\"PlayerTalentFrameActivateButton_OnShow\",\n\t\"PlayerTalentFrameActivateButton_Update\",\n\t\"PlayerTalentFrameDownArrow_OnClick\",\n\t\"PlayerTalentFrameLearnButton_OnClick\",\n\t\"PlayerTalentFrameLearnButton_OnEnter\",\n\t\"PlayerTalentFrameResetButton_OnClick\",\n\t\"PlayerTalentFrameResetButton_OnEnter\",\n\t\"PlayerTalentFrameTab_OnClick\",\n\t\"PlayerTalentFrameTab_OnEnter\",\n\t\"PlayerTalentFrameTab_OnLoad\",\n\t\"PlayerTalentFrameTalent_OnClick\",\n\t\"PlayerTalentFrameTalent_OnEnter\",\n\t\"PlayerTalentFrameTalent_OnEvent\",\n\t\"PlayerTalentFrame_HideGlyphFrame\",\n\t\"PlayerTalentFrame_OnEvent\",\n\t\"PlayerTalentFrame_OnHide\",\n\t\"PlayerTalentFrame_OnLoad\",\n\t\"PlayerTalentFrame_OnShow\",\n\t\"PlayerTalentFrame_Open\",\n\t\"PlayerTalentFrame_OpenGlyphFrame\",\n\t\"PlayerTalentFrame_Refresh\",\n\t\"PlayerTalentFrame_ShowGlyphFrame\",\n\t\"PlayerTalentFrame_Toggle\",\n\t\"PlayerTalentFrame_ToggleGlyphFrame\",\n\t\"PlayerTalentFrame_Update\",\n\t\"PlayerTalentFrame_UpdateActiveSpec\",\n\t\"PlayerTalentFrame_UpdateControls\",\n\t\"PlayerTalentFrame_UpdateSpecs\",\n\t\"PlayerTalentFrame_UpdateTabs\",\n\t\"PlayerTalentTab_GetBestDefaultTab\",\n\t\"PlayerTalentTab_OnClick\",\n\t\"PlayerTalentTab_OnEvent\",\n\t\"PlayerTalentTab_OnLoad\",\n\t-- tables: Blizzard_TalentUI\n\t\"PlayerSpecTab1\",\n\t\"PlayerSpecTab2\",\n\t\"PlayerSpecTab3\",\n\t\"PlayerTalentFrame\",\n\t\"PlayerTalentFrameActivateButton\",\n\t\"PlayerTalentFrameActiveTalentGroupFrame\",\n\t\"PlayerTalentFrameArrowFrame\",\n\t\"PlayerTalentFrameCloseButton\",\n\t\"PlayerTalentFrameLearnButton\",\n\t\"PlayerTalentFramePointsBar\",\n\t\"PlayerTalentFramePreviewBar\",\n\t\"PlayerTalentFramePreviewBarFiller\",\n\t\"PlayerTalentFrameResetButton\",\n\t\"PlayerTalentFrameScrollButtonOverlay\",\n\t\"PlayerTalentFrameScrollChildFrame\",\n\t\"PlayerTalentFrameScrollFrame\",\n\t\"PlayerTalentFrameScrollFrameScrollBar\",\n\t\"PlayerTalentFrameScrollFrameScrollBarScrollDownButton\",\n\t\"PlayerTalentFrameScrollFrameScrollBarScrollUpButton\",\n\t\"PlayerTalentFrameStatusFrame\",\n\t\"PlayerTalentFrameTab1\",\n\t\"PlayerTalentFrameTab2\",\n\t\"PlayerTalentFrameTab3\",\n\t\"PlayerTalentFrameTab4\",\n\t\"PlayerTalentFrameTalent1\",\n\t\"PlayerTalentFrameTalent10\",\n\t\"PlayerTalentFrameTalent11\",\n\t\"PlayerTalentFrameTalent12\",\n\t\"PlayerTalentFrameTalent13\",\n\t\"PlayerTalentFrameTalent14\",\n\t\"PlayerTalentFrameTalent15\",\n\t\"PlayerTalentFrameTalent16\",\n\t\"PlayerTalentFrameTalent17\",\n\t\"PlayerTalentFrameTalent18\",\n\t\"PlayerTalentFrameTalent19\",\n\t\"PlayerTalentFrameTalent2\",\n\t\"PlayerTalentFrameTalent20\",\n\t\"PlayerTalentFrameTalent21\",\n\t\"PlayerTalentFrameTalent22\",\n\t\"PlayerTalentFrameTalent23\",\n\t\"PlayerTalentFrameTalent24\",\n\t\"PlayerTalentFrameTalent25\",\n\t\"PlayerTalentFrameTalent26\",\n\t\"PlayerTalentFrameTalent27\",\n\t\"PlayerTalentFrameTalent28\",\n\t\"PlayerTalentFrameTalent29\",\n\t\"PlayerTalentFrameTalent3\",\n\t\"PlayerTalentFrameTalent30\",\n\t\"PlayerTalentFrameTalent31\",\n\t\"PlayerTalentFrameTalent32\",\n\t\"PlayerTalentFrameTalent33\",\n\t\"PlayerTalentFrameTalent34\",\n\t\"PlayerTalentFrameTalent35\",\n\t\"PlayerTalentFrameTalent36\",\n\t\"PlayerTalentFrameTalent37\",\n\t\"PlayerTalentFrameTalent38\",\n\t\"PlayerTalentFrameTalent39\",\n\t\"PlayerTalentFrameTalent4\",\n\t\"PlayerTalentFrameTalent40\",\n\t\"PlayerTalentFrameTalent5\",\n\t\"PlayerTalentFrameTalent6\",\n\t\"PlayerTalentFrameTalent7\",\n\t\"PlayerTalentFrameTalent8\",\n\t\"PlayerTalentFrameTalent9\",\n\t-- frames: Blizzard_TalentUI\n\t\"PlayerTalentFrame\",\n\t\"PlayerTalentFrameCloseButton\",\n\t\"PlayerTalentFrameStatusFrame\",\n\t\"PlayerTalentFrameActivateButton\",\n\t\"PlayerTalentFramePointsBar\",\n\t\"PlayerTalentFramePreviewBar\",\n\t\"PlayerTalentFrameResetButton\",\n\t\"PlayerTalentFrameLearnButton\",\n\t\"PlayerTalentFramePreviewBarFiller\",\n\t\"PlayerTalentFrameScrollFrame\",\n\t\"PlayerTalentFrameScrollChildFrame\",\n\t\"PlayerTalentFrameTalent1\",\n\t\"PlayerTalentFrameTalent2\",\n\t\"PlayerTalentFrameTalent3\",\n\t\"PlayerTalentFrameTalent4\",\n\t\"PlayerTalentFrameTalent5\",\n\t\"PlayerTalentFrameTalent6\",\n\t\"PlayerTalentFrameTalent7\",\n\t\"PlayerTalentFrameTalent8\",\n\t\"PlayerTalentFrameTalent9\",\n\t\"PlayerTalentFrameTalent10\",\n\t\"PlayerTalentFrameTalent11\",\n\t\"PlayerTalentFrameTalent12\",\n\t\"PlayerTalentFrameTalent13\",\n\t\"PlayerTalentFrameTalent14\",\n\t\"PlayerTalentFrameTalent15\",\n\t\"PlayerTalentFrameTalent16\",\n\t\"PlayerTalentFrameTalent17\",\n\t\"PlayerTalentFrameTalent18\",\n\t\"PlayerTalentFrameTalent19\",\n\t\"PlayerTalentFrameTalent20\",\n\t\"PlayerTalentFrameTalent21\",\n\t\"PlayerTalentFrameTalent22\",\n\t\"PlayerTalentFrameTalent23\",\n\t\"PlayerTalentFrameTalent24\",\n\t\"PlayerTalentFrameTalent25\",\n\t\"PlayerTalentFrameTalent26\",\n\t\"PlayerTalentFrameTalent27\",\n\t\"PlayerTalentFrameTalent28\",\n\t\"PlayerTalentFrameTalent29\",\n\t\"PlayerTalentFrameTalent30\",\n\t\"PlayerTalentFrameTalent31\",\n\t\"PlayerTalentFrameTalent32\",\n\t\"PlayerTalentFrameTalent33\",\n\t\"PlayerTalentFrameTalent34\",\n\t\"PlayerTalentFrameTalent35\",\n\t\"PlayerTalentFrameTalent36\",\n\t\"PlayerTalentFrameTalent37\",\n\t\"PlayerTalentFrameTalent38\",\n\t\"PlayerTalentFrameTalent39\",\n\t\"PlayerTalentFrameTalent40\",\n\t\"PlayerTalentFrameArrowFrame\",\n\t\"PlayerTalentFrameScrollFrameScrollBar\",\n\t\"PlayerTalentFrameScrollFrameScrollBarScrollUpButton\",\n\t\"PlayerTalentFrameScrollFrameScrollBarScrollDownButton\",\n\t\"PlayerTalentFrameActiveTalentGroupFrame\",\n\t\"PlayerTalentFrameScrollButtonOverlay\",\n\t\"PlayerTalentFrameTab1\",\n\t\"PlayerTalentFrameTab2\",\n\t\"PlayerTalentFrameTab3\",\n\t\"PlayerTalentFrameTab4\",\n\t\"PlayerSpecTab1\",\n\t\"PlayerSpecTab2\",\n\t\"PlayerSpecTab3\",\n\t-- widgets: Blizzard_TalentUI\n\t\"PlayerSpecTab1Background\",\n\t\"PlayerSpecTab2Background\",\n\t\"PlayerSpecTab3Background\",\n\t\"PlayerTalentFrameActivateButtonLeft\",\n\t\"PlayerTalentFrameActivateButtonMiddle\",\n\t\"PlayerTalentFrameActivateButtonRight\",\n\t\"PlayerTalentFrameActivateButtonText\",\n\t\"PlayerTalentFrameActiveSpecTabHighlight\",\n\t\"PlayerTalentFrameArrow1\",\n\t\"PlayerTalentFrameArrow10\",\n\t\"PlayerTalentFrameArrow11\",\n\t\"PlayerTalentFrameArrow12\",\n\t\"PlayerTalentFrameArrow13\",\n\t\"PlayerTalentFrameArrow14\",\n\t\"PlayerTalentFrameArrow15\",\n\t\"PlayerTalentFrameArrow16\",\n\t\"PlayerTalentFrameArrow17\",\n\t\"PlayerTalentFrameArrow18\",\n\t\"PlayerTalentFrameArrow19\",\n\t\"PlayerTalentFrameArrow2\",\n\t\"PlayerTalentFrameArrow20\",\n\t\"PlayerTalentFrameArrow21\",\n\t\"PlayerTalentFrameArrow22\",\n\t\"PlayerTalentFrameArrow23\",\n\t\"PlayerTalentFrameArrow24\",\n\t\"PlayerTalentFrameArrow25\",\n\t\"PlayerTalentFrameArrow26\",\n\t\"PlayerTalentFrameArrow27\",\n\t\"PlayerTalentFrameArrow28\",\n\t\"PlayerTalentFrameArrow29\",\n\t\"PlayerTalentFrameArrow3\",\n\t\"PlayerTalentFrameArrow30\",\n\t\"PlayerTalentFrameArrow4\",\n\t\"PlayerTalentFrameArrow5\",\n\t\"PlayerTalentFrameArrow6\",\n\t\"PlayerTalentFrameArrow7\",\n\t\"PlayerTalentFrameArrow8\",\n\t\"PlayerTalentFrameArrow9\",\n\t\"PlayerTalentFrameBackgroundBottomLeft\",\n\t\"PlayerTalentFrameBackgroundBottomRight\",\n\t\"PlayerTalentFrameBackgroundTopLeft\",\n\t\"PlayerTalentFrameBackgroundTopRight\",\n\t\"PlayerTalentFrameBottomLeft\",\n\t\"PlayerTalentFrameBottomRight\",\n\t\"PlayerTalentFrameBranch1\",\n\t\"PlayerTalentFrameBranch10\",\n\t\"PlayerTalentFrameBranch11\",\n\t\"PlayerTalentFrameBranch12\",\n\t\"PlayerTalentFrameBranch13\",\n\t\"PlayerTalentFrameBranch14\",\n\t\"PlayerTalentFrameBranch15\",\n\t\"PlayerTalentFrameBranch16\",\n\t\"PlayerTalentFrameBranch17\",\n\t\"PlayerTalentFrameBranch18\",\n\t\"PlayerTalentFrameBranch19\",\n\t\"PlayerTalentFrameBranch2\",\n\t\"PlayerTalentFrameBranch20\",\n\t\"PlayerTalentFrameBranch21\",\n\t\"PlayerTalentFrameBranch22\",\n\t\"PlayerTalentFrameBranch23\",\n\t\"PlayerTalentFrameBranch24\",\n\t\"PlayerTalentFrameBranch25\",\n\t\"PlayerTalentFrameBranch26\",\n\t\"PlayerTalentFrameBranch27\",\n\t\"PlayerTalentFrameBranch28\",\n\t\"PlayerTalentFrameBranch29\",\n\t\"PlayerTalentFrameBranch3\",\n\t\"PlayerTalentFrameBranch30\",\n\t\"PlayerTalentFrameBranch4\",\n\t\"PlayerTalentFrameBranch5\",\n\t\"PlayerTalentFrameBranch6\",\n\t\"PlayerTalentFrameBranch7\",\n\t\"PlayerTalentFrameBranch8\",\n\t\"PlayerTalentFrameBranch9\",\n\t\"PlayerTalentFrameLearnButtonText\",\n\t\"PlayerTalentFramePointsBarBackground\",\n\t\"PlayerTalentFramePointsBarBorderLeft\",\n\t\"PlayerTalentFramePointsBarBorderMiddle\",\n\t\"PlayerTalentFramePointsBarBorderRight\",\n\t\"PlayerTalentFramePointsLeft\",\n\t\"PlayerTalentFramePointsMiddle\",\n\t\"PlayerTalentFramePointsRight\",\n\t\"PlayerTalentFramePortrait\",\n\t\"PlayerTalentFramePreviewBarButtonBorder\",\n\t\"PlayerTalentFramePreviewBarFillerButtonBackgroundLeft\",\n\t\"PlayerTalentFramePreviewBarFillerButtonBackgroundMiddle\",\n\t\"PlayerTalentFramePreviewBarFillerButtonBackgroundRight\",\n\t\"PlayerTalentFrameResetButtonText\",\n\t\"PlayerTalentFrameScrollFrameBackgroundBottom\",\n\t\"PlayerTalentFrameScrollFrameBackgroundTop\",\n\t\"PlayerTalentFrameScrollFrameScrollBarThumbTexture\",\n\t\"PlayerTalentFrameSpentPointsText\",\n\t\"PlayerTalentFrameStatusText\",\n\t\"PlayerTalentFrameTab1HighlightTexture\",\n\t\"PlayerTalentFrameTab1Left\",\n\t\"PlayerTalentFrameTab1LeftDisabled\",\n\t\"PlayerTalentFrameTab1Middle\",\n\t\"PlayerTalentFrameTab1MiddleDisabled\",\n\t\"PlayerTalentFrameTab1Right\",\n\t\"PlayerTalentFrameTab1RightDisabled\",\n\t\"PlayerTalentFrameTab1Text\",\n\t\"PlayerTalentFrameTab2HighlightTexture\",\n\t\"PlayerTalentFrameTab2Left\",\n\t\"PlayerTalentFrameTab2LeftDisabled\",\n\t\"PlayerTalentFrameTab2Middle\",\n\t\"PlayerTalentFrameTab2MiddleDisabled\",\n\t\"PlayerTalentFrameTab2Right\",\n\t\"PlayerTalentFrameTab2RightDisabled\",\n\t\"PlayerTalentFrameTab2Text\",\n\t\"PlayerTalentFrameTab3HighlightTexture\",\n\t\"PlayerTalentFrameTab3Left\",\n\t\"PlayerTalentFrameTab3LeftDisabled\",\n\t\"PlayerTalentFrameTab3Middle\",\n\t\"PlayerTalentFrameTab3MiddleDisabled\",\n\t\"PlayerTalentFrameTab3Right\",\n\t\"PlayerTalentFrameTab3RightDisabled\",\n\t\"PlayerTalentFrameTab3Text\",\n\t\"PlayerTalentFrameTab4HighlightTexture\",\n\t\"PlayerTalentFrameTab4Left\",\n\t\"PlayerTalentFrameTab4LeftDisabled\",\n\t\"PlayerTalentFrameTab4Middle\",\n\t\"PlayerTalentFrameTab4MiddleDisabled\",\n\t\"PlayerTalentFrameTab4Right\",\n\t\"PlayerTalentFrameTab4RightDisabled\",\n\t\"PlayerTalentFrameTab4Text\",\n\t\"PlayerTalentFrameTalent10Count\",\n\t\"PlayerTalentFrameTalent10IconTexture\",\n\t\"PlayerTalentFrameTalent10NormalTexture\",\n\t\"PlayerTalentFrameTalent10Rank\",\n\t\"PlayerTalentFrameTalent10RankBorder\",\n\t\"PlayerTalentFrameTalent10Slot\",\n\t\"PlayerTalentFrameTalent10Stock\",\n\t\"PlayerTalentFrameTalent11Count\",\n\t\"PlayerTalentFrameTalent11IconTexture\",\n\t\"PlayerTalentFrameTalent11NormalTexture\",\n\t\"PlayerTalentFrameTalent11Rank\",\n\t\"PlayerTalentFrameTalent11RankBorder\",\n\t\"PlayerTalentFrameTalent11Slot\",\n\t\"PlayerTalentFrameTalent11Stock\",\n\t\"PlayerTalentFrameTalent12Count\",\n\t\"PlayerTalentFrameTalent12IconTexture\",\n\t\"PlayerTalentFrameTalent12NormalTexture\",\n\t\"PlayerTalentFrameTalent12Rank\",\n\t\"PlayerTalentFrameTalent12RankBorder\",\n\t\"PlayerTalentFrameTalent12Slot\",\n\t\"PlayerTalentFrameTalent12Stock\",\n\t\"PlayerTalentFrameTalent13Count\",\n\t\"PlayerTalentFrameTalent13IconTexture\",\n\t\"PlayerTalentFrameTalent13NormalTexture\",\n\t\"PlayerTalentFrameTalent13Rank\",\n\t\"PlayerTalentFrameTalent13RankBorder\",\n\t\"PlayerTalentFrameTalent13Slot\",\n\t\"PlayerTalentFrameTalent13Stock\",\n\t\"PlayerTalentFrameTalent14Count\",\n\t\"PlayerTalentFrameTalent14IconTexture\",\n\t\"PlayerTalentFrameTalent14NormalTexture\",\n\t\"PlayerTalentFrameTalent14Rank\",\n\t\"PlayerTalentFrameTalent14RankBorder\",\n\t\"PlayerTalentFrameTalent14Slot\",\n\t\"PlayerTalentFrameTalent14Stock\",\n\t\"PlayerTalentFrameTalent15Count\",\n\t\"PlayerTalentFrameTalent15IconTexture\",\n\t\"PlayerTalentFrameTalent15NormalTexture\",\n\t\"PlayerTalentFrameTalent15Rank\",\n\t\"PlayerTalentFrameTalent15RankBorder\",\n\t\"PlayerTalentFrameTalent15Slot\",\n\t\"PlayerTalentFrameTalent15Stock\",\n\t\"PlayerTalentFrameTalent16Count\",\n\t\"PlayerTalentFrameTalent16IconTexture\",\n\t\"PlayerTalentFrameTalent16NormalTexture\",\n\t\"PlayerTalentFrameTalent16Rank\",\n\t\"PlayerTalentFrameTalent16RankBorder\",\n\t\"PlayerTalentFrameTalent16Slot\",\n\t\"PlayerTalentFrameTalent16Stock\",\n\t\"PlayerTalentFrameTalent17Count\",\n\t\"PlayerTalentFrameTalent17IconTexture\",\n\t\"PlayerTalentFrameTalent17NormalTexture\",\n\t\"PlayerTalentFrameTalent17Rank\",\n\t\"PlayerTalentFrameTalent17RankBorder\",\n\t\"PlayerTalentFrameTalent17Slot\",\n\t\"PlayerTalentFrameTalent17Stock\",\n\t\"PlayerTalentFrameTalent18Count\",\n\t\"PlayerTalentFrameTalent18IconTexture\",\n\t\"PlayerTalentFrameTalent18NormalTexture\",\n\t\"PlayerTalentFrameTalent18Rank\",\n\t\"PlayerTalentFrameTalent18RankBorder\",\n\t\"PlayerTalentFrameTalent18Slot\",\n\t\"PlayerTalentFrameTalent18Stock\",\n\t\"PlayerTalentFrameTalent19Count\",\n\t\"PlayerTalentFrameTalent19IconTexture\",\n\t\"PlayerTalentFrameTalent19NormalTexture\",\n\t\"PlayerTalentFrameTalent19Rank\",\n\t\"PlayerTalentFrameTalent19RankBorder\",\n\t\"PlayerTalentFrameTalent19Slot\",\n\t\"PlayerTalentFrameTalent19Stock\",\n\t\"PlayerTalentFrameTalent1Count\",\n\t\"PlayerTalentFrameTalent1IconTexture\",\n\t\"PlayerTalentFrameTalent1NormalTexture\",\n\t\"PlayerTalentFrameTalent1Rank\",\n\t\"PlayerTalentFrameTalent1RankBorder\",\n\t\"PlayerTalentFrameTalent1Slot\",\n\t\"PlayerTalentFrameTalent1Stock\",\n\t\"PlayerTalentFrameTalent20Count\",\n\t\"PlayerTalentFrameTalent20IconTexture\",\n\t\"PlayerTalentFrameTalent20NormalTexture\",\n\t\"PlayerTalentFrameTalent20Rank\",\n\t\"PlayerTalentFrameTalent20RankBorder\",\n\t\"PlayerTalentFrameTalent20Slot\",\n\t\"PlayerTalentFrameTalent20Stock\",\n\t\"PlayerTalentFrameTalent21Count\",\n\t\"PlayerTalentFrameTalent21IconTexture\",\n\t\"PlayerTalentFrameTalent21NormalTexture\",\n\t\"PlayerTalentFrameTalent21Rank\",\n\t\"PlayerTalentFrameTalent21RankBorder\",\n\t\"PlayerTalentFrameTalent21Slot\",\n\t\"PlayerTalentFrameTalent21Stock\",\n\t\"PlayerTalentFrameTalent22Count\",\n\t\"PlayerTalentFrameTalent22IconTexture\",\n\t\"PlayerTalentFrameTalent22NormalTexture\",\n\t\"PlayerTalentFrameTalent22Rank\",\n\t\"PlayerTalentFrameTalent22RankBorder\",\n\t\"PlayerTalentFrameTalent22Slot\",\n\t\"PlayerTalentFrameTalent22Stock\",\n\t\"PlayerTalentFrameTalent23Count\",\n\t\"PlayerTalentFrameTalent23IconTexture\",\n\t\"PlayerTalentFrameTalent23NormalTexture\",\n\t\"PlayerTalentFrameTalent23Rank\",\n\t\"PlayerTalentFrameTalent23RankBorder\",\n\t\"PlayerTalentFrameTalent23Slot\",\n\t\"PlayerTalentFrameTalent23Stock\",\n\t\"PlayerTalentFrameTalent24Count\",\n\t\"PlayerTalentFrameTalent24IconTexture\",\n\t\"PlayerTalentFrameTalent24NormalTexture\",\n\t\"PlayerTalentFrameTalent24Rank\",\n\t\"PlayerTalentFrameTalent24RankBorder\",\n\t\"PlayerTalentFrameTalent24Slot\",\n\t\"PlayerTalentFrameTalent24Stock\",\n\t\"PlayerTalentFrameTalent25Count\",\n\t\"PlayerTalentFrameTalent25IconTexture\",\n\t\"PlayerTalentFrameTalent25NormalTexture\",\n\t\"PlayerTalentFrameTalent25Rank\",\n\t\"PlayerTalentFrameTalent25RankBorder\",\n\t\"PlayerTalentFrameTalent25Slot\",\n\t\"PlayerTalentFrameTalent25Stock\",\n\t\"PlayerTalentFrameTalent26Count\",\n\t\"PlayerTalentFrameTalent26IconTexture\",\n\t\"PlayerTalentFrameTalent26NormalTexture\",\n\t\"PlayerTalentFrameTalent26Rank\",\n\t\"PlayerTalentFrameTalent26RankBorder\",\n\t\"PlayerTalentFrameTalent26Slot\",\n\t\"PlayerTalentFrameTalent26Stock\",\n\t\"PlayerTalentFrameTalent27Count\",\n\t\"PlayerTalentFrameTalent27IconTexture\",\n\t\"PlayerTalentFrameTalent27NormalTexture\",\n\t\"PlayerTalentFrameTalent27Rank\",\n\t\"PlayerTalentFrameTalent27RankBorder\",\n\t\"PlayerTalentFrameTalent27Slot\",\n\t\"PlayerTalentFrameTalent27Stock\",\n\t\"PlayerTalentFrameTalent28Count\",\n\t\"PlayerTalentFrameTalent28IconTexture\",\n\t\"PlayerTalentFrameTalent28NormalTexture\",\n\t\"PlayerTalentFrameTalent28Rank\",\n\t\"PlayerTalentFrameTalent28RankBorder\",\n\t\"PlayerTalentFrameTalent28Slot\",\n\t\"PlayerTalentFrameTalent28Stock\",\n\t\"PlayerTalentFrameTalent29Count\",\n\t\"PlayerTalentFrameTalent29IconTexture\",\n\t\"PlayerTalentFrameTalent29NormalTexture\",\n\t\"PlayerTalentFrameTalent29Rank\",\n\t\"PlayerTalentFrameTalent29RankBorder\",\n\t\"PlayerTalentFrameTalent29Slot\",\n\t\"PlayerTalentFrameTalent29Stock\",\n\t\"PlayerTalentFrameTalent2Count\",\n\t\"PlayerTalentFrameTalent2IconTexture\",\n\t\"PlayerTalentFrameTalent2NormalTexture\",\n\t\"PlayerTalentFrameTalent2Rank\",\n\t\"PlayerTalentFrameTalent2RankBorder\",\n\t\"PlayerTalentFrameTalent2Slot\",\n\t\"PlayerTalentFrameTalent2Stock\",\n\t\"PlayerTalentFrameTalent30Count\",\n\t\"PlayerTalentFrameTalent30IconTexture\",\n\t\"PlayerTalentFrameTalent30NormalTexture\",\n\t\"PlayerTalentFrameTalent30Rank\",\n\t\"PlayerTalentFrameTalent30RankBorder\",\n\t\"PlayerTalentFrameTalent30Slot\",\n\t\"PlayerTalentFrameTalent30Stock\",\n\t\"PlayerTalentFrameTalent31Count\",\n\t\"PlayerTalentFrameTalent31IconTexture\",\n\t\"PlayerTalentFrameTalent31NormalTexture\",\n\t\"PlayerTalentFrameTalent31Rank\",\n\t\"PlayerTalentFrameTalent31RankBorder\",\n\t\"PlayerTalentFrameTalent31Slot\",\n\t\"PlayerTalentFrameTalent31Stock\",\n\t\"PlayerTalentFrameTalent32Count\",\n\t\"PlayerTalentFrameTalent32IconTexture\",\n\t\"PlayerTalentFrameTalent32NormalTexture\",\n\t\"PlayerTalentFrameTalent32Rank\",\n\t\"PlayerTalentFrameTalent32RankBorder\",\n\t\"PlayerTalentFrameTalent32Slot\",\n\t\"PlayerTalentFrameTalent32Stock\",\n\t\"PlayerTalentFrameTalent33Count\",\n\t\"PlayerTalentFrameTalent33IconTexture\",\n\t\"PlayerTalentFrameTalent33NormalTexture\",\n\t\"PlayerTalentFrameTalent33Rank\",\n\t\"PlayerTalentFrameTalent33RankBorder\",\n\t\"PlayerTalentFrameTalent33Slot\",\n\t\"PlayerTalentFrameTalent33Stock\",\n\t\"PlayerTalentFrameTalent34Count\",\n\t\"PlayerTalentFrameTalent34IconTexture\",\n\t\"PlayerTalentFrameTalent34NormalTexture\",\n\t\"PlayerTalentFrameTalent34Rank\",\n\t\"PlayerTalentFrameTalent34RankBorder\",\n\t\"PlayerTalentFrameTalent34Slot\",\n\t\"PlayerTalentFrameTalent34Stock\",\n\t\"PlayerTalentFrameTalent35Count\",\n\t\"PlayerTalentFrameTalent35IconTexture\",\n\t\"PlayerTalentFrameTalent35NormalTexture\",\n\t\"PlayerTalentFrameTalent35Rank\",\n\t\"PlayerTalentFrameTalent35RankBorder\",\n\t\"PlayerTalentFrameTalent35Slot\",\n\t\"PlayerTalentFrameTalent35Stock\",\n\t\"PlayerTalentFrameTalent36Count\",\n\t\"PlayerTalentFrameTalent36IconTexture\",\n\t\"PlayerTalentFrameTalent36NormalTexture\",\n\t\"PlayerTalentFrameTalent36Rank\",\n\t\"PlayerTalentFrameTalent36RankBorder\",\n\t\"PlayerTalentFrameTalent36Slot\",\n\t\"PlayerTalentFrameTalent36Stock\",\n\t\"PlayerTalentFrameTalent37Count\",\n\t\"PlayerTalentFrameTalent37IconTexture\",\n\t\"PlayerTalentFrameTalent37NormalTexture\",\n\t\"PlayerTalentFrameTalent37Rank\",\n\t\"PlayerTalentFrameTalent37RankBorder\",\n\t\"PlayerTalentFrameTalent37Slot\",\n\t\"PlayerTalentFrameTalent37Stock\",\n\t\"PlayerTalentFrameTalent38Count\",\n\t\"PlayerTalentFrameTalent38IconTexture\",\n\t\"PlayerTalentFrameTalent38NormalTexture\",\n\t\"PlayerTalentFrameTalent38Rank\",\n\t\"PlayerTalentFrameTalent38RankBorder\",\n\t\"PlayerTalentFrameTalent38Slot\",\n\t\"PlayerTalentFrameTalent38Stock\",\n\t\"PlayerTalentFrameTalent39Count\",\n\t\"PlayerTalentFrameTalent39IconTexture\",\n\t\"PlayerTalentFrameTalent39NormalTexture\",\n\t\"PlayerTalentFrameTalent39Rank\",\n\t\"PlayerTalentFrameTalent39RankBorder\",\n\t\"PlayerTalentFrameTalent39Slot\",\n\t\"PlayerTalentFrameTalent39Stock\",\n\t\"PlayerTalentFrameTalent3Count\",\n\t\"PlayerTalentFrameTalent3IconTexture\",\n\t\"PlayerTalentFrameTalent3NormalTexture\",\n\t\"PlayerTalentFrameTalent3Rank\",\n\t\"PlayerTalentFrameTalent3RankBorder\",\n\t\"PlayerTalentFrameTalent3Slot\",\n\t\"PlayerTalentFrameTalent3Stock\",\n\t\"PlayerTalentFrameTalent40Count\",\n\t\"PlayerTalentFrameTalent40IconTexture\",\n\t\"PlayerTalentFrameTalent40NormalTexture\",\n\t\"PlayerTalentFrameTalent40Rank\",\n\t\"PlayerTalentFrameTalent40RankBorder\",\n\t\"PlayerTalentFrameTalent40Slot\",\n\t\"PlayerTalentFrameTalent40Stock\",\n\t\"PlayerTalentFrameTalent4Count\",\n\t\"PlayerTalentFrameTalent4IconTexture\",\n\t\"PlayerTalentFrameTalent4NormalTexture\",\n\t\"PlayerTalentFrameTalent4Rank\",\n\t\"PlayerTalentFrameTalent4RankBorder\",\n\t\"PlayerTalentFrameTalent4Slot\",\n\t\"PlayerTalentFrameTalent4Stock\",\n\t\"PlayerTalentFrameTalent5Count\",\n\t\"PlayerTalentFrameTalent5IconTexture\",\n\t\"PlayerTalentFrameTalent5NormalTexture\",\n\t\"PlayerTalentFrameTalent5Rank\",\n\t\"PlayerTalentFrameTalent5RankBorder\",\n\t\"PlayerTalentFrameTalent5Slot\",\n\t\"PlayerTalentFrameTalent5Stock\",\n\t\"PlayerTalentFrameTalent6Count\",\n\t\"PlayerTalentFrameTalent6IconTexture\",\n\t\"PlayerTalentFrameTalent6NormalTexture\",\n\t\"PlayerTalentFrameTalent6Rank\",\n\t\"PlayerTalentFrameTalent6RankBorder\",\n\t\"PlayerTalentFrameTalent6Slot\",\n\t\"PlayerTalentFrameTalent6Stock\",\n\t\"PlayerTalentFrameTalent7Count\",\n\t\"PlayerTalentFrameTalent7IconTexture\",\n\t\"PlayerTalentFrameTalent7NormalTexture\",\n\t\"PlayerTalentFrameTalent7Rank\",\n\t\"PlayerTalentFrameTalent7RankBorder\",\n\t\"PlayerTalentFrameTalent7Slot\",\n\t\"PlayerTalentFrameTalent7Stock\",\n\t\"PlayerTalentFrameTalent8Count\",\n\t\"PlayerTalentFrameTalent8IconTexture\",\n\t\"PlayerTalentFrameTalent8NormalTexture\",\n\t\"PlayerTalentFrameTalent8Rank\",\n\t\"PlayerTalentFrameTalent8RankBorder\",\n\t\"PlayerTalentFrameTalent8Slot\",\n\t\"PlayerTalentFrameTalent8Stock\",\n\t\"PlayerTalentFrameTalent9Count\",\n\t\"PlayerTalentFrameTalent9IconTexture\",\n\t\"PlayerTalentFrameTalent9NormalTexture\",\n\t\"PlayerTalentFrameTalent9Rank\",\n\t\"PlayerTalentFrameTalent9RankBorder\",\n\t\"PlayerTalentFrameTalent9Slot\",\n\t\"PlayerTalentFrameTalent9Stock\",\n\t\"PlayerTalentFrameTalentPointsText\",\n\t\"PlayerTalentFrameTitleText\",\n\t\"PlayerTalentFrameTopLeft\",\n\t\"PlayerTalentFrameTopRight\",\n\n\t-- functions: Blizzard_TradeSkillUI\n\t\"TradeSkillCollapseAllButton_OnClick\",\n\t\"TradeSkillFilterFrame_InvSlotName\",\n\t\"TradeSkillFilterFrame_LoadInvSlots\",\n\t\"TradeSkillFilterFrame_LoadSubClasses\",\n\t\"TradeSkillFilter_OnTextChanged\",\n\t\"TradeSkillFrameDecrement_OnClick\",\n\t\"TradeSkillFrameIncrement_OnClick\",\n\t\"TradeSkillFrame_Hide\",\n\t\"TradeSkillFrame_OnEvent\",\n\t\"TradeSkillFrame_OnLoad\",\n\t\"TradeSkillFrame_PlaytimeUpdate\",\n\t\"TradeSkillFrame_SetSelection\",\n\t\"TradeSkillFrame_Show\",\n\t\"TradeSkillFrame_ShowFailed\",\n\t\"TradeSkillFrame_Update\",\n\t\"TradeSkillInvSlotDropDownButton_OnClick\",\n\t\"TradeSkillInvSlotDropDown_Initialize\",\n\t\"TradeSkillInvSlotDropDown_OnLoad\",\n\t\"TradeSkillItem_OnEnter\",\n\t\"TradeSkillSkillButton_OnClick\",\n\t\"TradeSkillSubClassDropDownButton_OnClick\",\n\t\"TradeSkillSubClassDropDown_Initialize\",\n\t\"TradeSkillSubClassDropDown_OnLoad\",\n\t-- tables: Blizzard_TradeSkillUI\n\t\"TradeSkillCancelButton\",\n\t\"TradeSkillCollapseAllButton\",\n\t\"TradeSkillCreateAllButton\",\n\t\"TradeSkillCreateAllButtonMask\",\n\t\"TradeSkillCreateButton\",\n\t\"TradeSkillCreateButtonMask\",\n\t\"TradeSkillDecrementButton\",\n\t\"TradeSkillDetailScrollChildFrame\",\n\t\"TradeSkillDetailScrollFrame\",\n\t\"TradeSkillDetailScrollFrameScrollBar\",\n\t\"TradeSkillDetailScrollFrameScrollBarScrollDownButton\",\n\t\"TradeSkillDetailScrollFrameScrollBarScrollUpButton\",\n\t\"TradeSkillExpandButtonFrame\",\n\t\"TradeSkillFrame\",\n\t\"TradeSkillFrameAvailableFilterCheckButton\",\n\t\"TradeSkillFrameCloseButton\",\n\t\"TradeSkillFrameEditBox\",\n\t\"TradeSkillHighlightFrame\",\n\t\"TradeSkillIncrementButton\",\n\t\"TradeSkillInputBox\",\n\t\"TradeSkillInvSlotDropDown\",\n\t\"TradeSkillInvSlotDropDownButton\",\n\t\"TradeSkillLinkButton\",\n\t\"TradeSkillListScrollFrame\",\n\t\"TradeSkillListScrollFrameScrollBar\",\n\t\"TradeSkillListScrollFrameScrollBarScrollDownButton\",\n\t\"TradeSkillListScrollFrameScrollBarScrollUpButton\",\n\t\"TradeSkillListScrollFrameScrollChildFrame\",\n\t\"TradeSkillRankFrame\",\n\t\"TradeSkillReagent1\",\n\t\"TradeSkillReagent2\",\n\t\"TradeSkillReagent3\",\n\t\"TradeSkillReagent4\",\n\t\"TradeSkillReagent5\",\n\t\"TradeSkillReagent6\",\n\t\"TradeSkillReagent7\",\n\t\"TradeSkillReagent8\",\n\t\"TradeSkillSkill1\",\n\t\"TradeSkillSkill2\",\n\t\"TradeSkillSkill3\",\n\t\"TradeSkillSkill4\",\n\t\"TradeSkillSkill5\",\n\t\"TradeSkillSkill6\",\n\t\"TradeSkillSkill7\",\n\t\"TradeSkillSkill8\",\n\t\"TradeSkillSkillIcon\",\n\t\"TradeSkillSubClassDropDownButton\",\n\t\"TradeSkillTypeColor\",\n\t\"TradeSkillTypePrefix\",\n\t\"UIDROPDOWNMENU_INIT_MENU\",\n\t-- frames: Blizzard_TradeSkillUI\n\t\"TradeSkillFrame\",\n\t\"TradeSkillLinkButton\",\n\t\"TradeSkillFrameAvailableFilterCheckButton\",\n\t\"TradeSkillRankFrame\",\n\t\"TradeSkillFrameEditBox\",\n\t\"TradeSkillExpandButtonFrame\",\n\t\"TradeSkillCollapseAllButton\",\n\t\"TradeSkillInvSlotDropDown\",\n\t\"TradeSkillInvSlotDropDownButton\",\n\t\"TradeSkillSubClassDropDown\",\n\t\"TradeSkillSubClassDropDownButton\",\n\t\"TradeSkillHighlightFrame\",\n\t\"TradeSkillSkill1\",\n\t\"TradeSkillSkill2\",\n\t\"TradeSkillSkill3\",\n\t\"TradeSkillSkill4\",\n\t\"TradeSkillSkill5\",\n\t\"TradeSkillSkill6\",\n\t\"TradeSkillSkill7\",\n\t\"TradeSkillSkill8\",\n\t\"TradeSkillListScrollFrame\",\n\t\"TradeSkillListScrollFrameScrollChildFrame\",\n\t\"TradeSkillListScrollFrameScrollBar\",\n\t\"TradeSkillListScrollFrameScrollBarScrollUpButton\",\n\t\"TradeSkillListScrollFrameScrollBarScrollDownButton\",\n\t\"TradeSkillDetailScrollFrame\",\n\t\"TradeSkillDetailScrollChildFrame\",\n\t\"TradeSkillSkillIcon\",\n\t\"TradeSkillReagent1\",\n\t\"TradeSkillReagent2\",\n\t\"TradeSkillReagent3\",\n\t\"TradeSkillReagent4\",\n\t\"TradeSkillReagent5\",\n\t\"TradeSkillReagent6\",\n\t\"TradeSkillReagent7\",\n\t\"TradeSkillReagent8\",\n\t\"TradeSkillDetailScrollFrameScrollBar\",\n\t\"TradeSkillDetailScrollFrameScrollBarScrollUpButton\",\n\t\"TradeSkillDetailScrollFrameScrollBarScrollDownButton\",\n\t\"TradeSkillCreateButton\",\n\t\"TradeSkillCreateButtonMask\",\n\t\"TradeSkillCancelButton\",\n\t\"TradeSkillCreateAllButton\",\n\t\"TradeSkillCreateAllButtonMask\",\n\t\"TradeSkillDecrementButton\",\n\t\"TradeSkillInputBox\",\n\t\"TradeSkillIncrementButton\",\n\t\"TradeSkillFrameCloseButton\",\n\t-- widgets: Blizzard_TradeSkillUI\n\t\"TradeSkillCancelButtonText\",\n\t\"TradeSkillCollapseAllButtonHighlight\",\n\t\"TradeSkillCollapseAllButtonSubText\",\n\t\"TradeSkillCollapseAllButtonText\",\n\t\"TradeSkillCreateAllButtonText\",\n\t\"TradeSkillCreateButtonText\",\n\t\"TradeSkillDescription\",\n\t\"TradeSkillDetailHeaderLeft\",\n\t\"TradeSkillDetailScrollFrameBottom\",\n\t\"TradeSkillDetailScrollFrameScrollBarThumbTexture\",\n\t\"TradeSkillDetailScrollFrameTop\",\n\t\"TradeSkillExpandTabLeft\",\n\t\"TradeSkillExpandTabMiddle\",\n\t\"TradeSkillExpandTabRight\",\n\t\"TradeSkillFrameAvailableFilterCheckButtonText\",\n\t\"TradeSkillFrameBottomLeftTexture\",\n\t\"TradeSkillFrameBottomRightTexture\",\n\t\"TradeSkillFrameDummyString\",\n\t\"TradeSkillFrameEditBoxLeft\",\n\t\"TradeSkillFrameEditBoxMiddle\",\n\t\"TradeSkillFrameEditBoxRight\",\n\t\"TradeSkillFramePortrait\",\n\t\"TradeSkillFrameTitleText\",\n\t\"TradeSkillHighlight\",\n\t\"TradeSkillHorizontalBarLeft\",\n\t\"TradeSkillInputBoxLeft\",\n\t\"TradeSkillInputBoxMiddle\",\n\t\"TradeSkillInputBoxRight\",\n\t\"TradeSkillInvSlotDropDownButtonDisabledTexture\",\n\t\"TradeSkillInvSlotDropDownButtonHighlightTexture\",\n\t\"TradeSkillInvSlotDropDownButtonNormalTexture\",\n\t\"TradeSkillInvSlotDropDownButtonPushedTexture\",\n\t\"TradeSkillInvSlotDropDownLeft\",\n\t\"TradeSkillInvSlotDropDownMiddle\",\n\t\"TradeSkillInvSlotDropDownRight\",\n\t\"TradeSkillInvSlotDropDownText\",\n\t\"TradeSkillListScrollFrameScrollBarThumbTexture\",\n\t\"TradeSkillRankFrameBackground\",\n\t\"TradeSkillRankFrameBar\",\n\t\"TradeSkillRankFrameBorder\",\n\t\"TradeSkillRankFrameSkillRank\",\n\t\"TradeSkillReagent1Count\",\n\t\"TradeSkillReagent1IconTexture\",\n\t\"TradeSkillReagent1Name\",\n\t\"TradeSkillReagent1NameFrame\",\n\t\"TradeSkillReagent2Count\",\n\t\"TradeSkillReagent2IconTexture\",\n\t\"TradeSkillReagent2Name\",\n\t\"TradeSkillReagent2NameFrame\",\n\t\"TradeSkillReagent3Count\",\n\t\"TradeSkillReagent3IconTexture\",\n\t\"TradeSkillReagent3Name\",\n\t\"TradeSkillReagent3NameFrame\",\n\t\"TradeSkillReagent4Count\",\n\t\"TradeSkillReagent4IconTexture\",\n\t\"TradeSkillReagent4Name\",\n\t\"TradeSkillReagent4NameFrame\",\n\t\"TradeSkillReagent5Count\",\n\t\"TradeSkillReagent5IconTexture\",\n\t\"TradeSkillReagent5Name\",\n\t\"TradeSkillReagent5NameFrame\",\n\t\"TradeSkillReagent6Count\",\n\t\"TradeSkillReagent6IconTexture\",\n\t\"TradeSkillReagent6Name\",\n\t\"TradeSkillReagent6NameFrame\",\n\t\"TradeSkillReagent7Count\",\n\t\"TradeSkillReagent7IconTexture\",\n\t\"TradeSkillReagent7Name\",\n\t\"TradeSkillReagent7NameFrame\",\n\t\"TradeSkillReagent8Count\",\n\t\"TradeSkillReagent8IconTexture\",\n\t\"TradeSkillReagent8Name\",\n\t\"TradeSkillReagent8NameFrame\",\n\t\"TradeSkillReagentLabel\",\n\t\"TradeSkillRequirementLabel\",\n\t\"TradeSkillRequirementText\",\n\t\"TradeSkillSkill1Count\",\n\t\"TradeSkillSkill1Highlight\",\n\t\"TradeSkillSkill1SubText\",\n\t\"TradeSkillSkill1Text\",\n\t\"TradeSkillSkill2Count\",\n\t\"TradeSkillSkill2Highlight\",\n\t\"TradeSkillSkill2SubText\",\n\t\"TradeSkillSkill2Text\",\n\t\"TradeSkillSkill3Count\",\n\t\"TradeSkillSkill3Highlight\",\n\t\"TradeSkillSkill3SubText\",\n\t\"TradeSkillSkill3Text\",\n\t\"TradeSkillSkill4Count\",\n\t\"TradeSkillSkill4Highlight\",\n\t\"TradeSkillSkill4SubText\",\n\t\"TradeSkillSkill4Text\",\n\t\"TradeSkillSkill5Count\",\n\t\"TradeSkillSkill5Highlight\",\n\t\"TradeSkillSkill5SubText\",\n\t\"TradeSkillSkill5Text\",\n\t\"TradeSkillSkill6Count\",\n\t\"TradeSkillSkill6Highlight\",\n\t\"TradeSkillSkill6SubText\",\n\t\"TradeSkillSkill6Text\",\n\t\"TradeSkillSkill7Count\",\n\t\"TradeSkillSkill7Highlight\",\n\t\"TradeSkillSkill7SubText\",\n\t\"TradeSkillSkill7Text\",\n\t\"TradeSkillSkill8Count\",\n\t\"TradeSkillSkill8Highlight\",\n\t\"TradeSkillSkill8SubText\",\n\t\"TradeSkillSkill8Text\",\n\t\"TradeSkillSkillCooldown\",\n\t\"TradeSkillSkillIconCount\",\n\t\"TradeSkillSkillName\",\n\t\"TradeSkillSubClassDropDownButtonDisabledTexture\",\n\t\"TradeSkillSubClassDropDownButtonHighlightTexture\",\n\t\"TradeSkillSubClassDropDownButtonNormalTexture\",\n\t\"TradeSkillSubClassDropDownButtonPushedTexture\",\n\t\"TradeSkillSubClassDropDownLeft\",\n\t\"TradeSkillSubClassDropDownMiddle\",\n\t\"TradeSkillSubClassDropDownRight\",\n\t\"TradeSkillSubClassDropDownText\",\n\n\t-- functions: Blizzard_TrainerUI\n\t\"ClassTrainerCollapseAllButton_OnClick\",\n\t\"ClassTrainerFrameFilterDropDown_Initialize\",\n\t\"ClassTrainerFrameFilterDropDown_OnClick\",\n\t\"ClassTrainerFrameFilterDropDown_OnLoad\",\n\t\"ClassTrainerFrame_Hide\",\n\t\"ClassTrainerFrame_OnEvent\",\n\t\"ClassTrainerFrame_OnLoad\",\n\t\"ClassTrainerFrame_Show\",\n\t\"ClassTrainerFrame_Update\",\n\t\"ClassTrainerSkillButton_OnClick\",\n\t\"ClassTrainerTrainButton_OnClick\",\n\t\"ClassTrainer_HideSkillDetails\",\n\t\"ClassTrainer_SelectFirstLearnableSkill\",\n\t\"ClassTrainer_SetSelection\",\n\t\"ClassTrainer_SetSubTextColor\",\n\t\"ClassTrainer_SetToClassTrainer\",\n\t\"ClassTrainer_SetToTradeSkillTrainer\",\n\t\"ClassTrainer_ShowSkillDetails\",\n\t-- tables: Blizzard_TrainerUI\n\t\"ClassTrainerCancelButton\",\n\t\"ClassTrainerCollapseAllButton\",\n\t\"ClassTrainerDetailMoneyFrame\",\n\t\"ClassTrainerDetailMoneyFrameCopperButton\",\n\t\"ClassTrainerDetailMoneyFrameGoldButton\",\n\t\"ClassTrainerDetailMoneyFrameSilverButton\",\n\t\"ClassTrainerDetailScrollChildFrame\",\n\t\"ClassTrainerDetailScrollFrame\",\n\t\"ClassTrainerDetailScrollFrameScrollBar\",\n\t\"ClassTrainerDetailScrollFrameScrollBarScrollDownButton\",\n\t\"ClassTrainerDetailScrollFrameScrollBarScrollUpButton\",\n\t\"ClassTrainerExpandButtonFrame\",\n\t\"ClassTrainerFrame\",\n\t\"ClassTrainerFrameCloseButton\",\n\t\"ClassTrainerFrameFilterDropDown\",\n\t\"ClassTrainerFrameFilterDropDownButton\",\n\t\"ClassTrainerListScrollFrame\",\n\t\"ClassTrainerListScrollFrameScrollBar\",\n\t\"ClassTrainerListScrollFrameScrollBarScrollDownButton\",\n\t\"ClassTrainerListScrollFrameScrollBarScrollUpButton\",\n\t\"ClassTrainerListScrollFrameScrollChildFrame\",\n\t\"ClassTrainerMoneyFrame\",\n\t\"ClassTrainerMoneyFrameCopperButton\",\n\t\"ClassTrainerMoneyFrameGoldButton\",\n\t\"ClassTrainerMoneyFrameSilverButton\",\n\t\"ClassTrainerSkill1\",\n\t\"ClassTrainerSkill10\",\n\t\"ClassTrainerSkill11\",\n\t\"ClassTrainerSkill2\",\n\t\"ClassTrainerSkill3\",\n\t\"ClassTrainerSkill4\",\n\t\"ClassTrainerSkill5\",\n\t\"ClassTrainerSkill6\",\n\t\"ClassTrainerSkill7\",\n\t\"ClassTrainerSkill8\",\n\t\"ClassTrainerSkill9\",\n\t\"ClassTrainerSkillHighlightFrame\",\n\t\"ClassTrainerSkillIcon\",\n\t\"ClassTrainerTrainButton\",\n\t-- frames: Blizzard_TrainerUI\n\t\"ClassTrainerFrame\",\n\t\"ClassTrainerExpandButtonFrame\",\n\t\"ClassTrainerCollapseAllButton\",\n\t\"ClassTrainerFrameFilterDropDown\",\n\t\"ClassTrainerFrameFilterDropDownButton\",\n\t\"ClassTrainerSkillHighlightFrame\",\n\t\"ClassTrainerSkill1\",\n\t\"ClassTrainerSkill2\",\n\t\"ClassTrainerSkill3\",\n\t\"ClassTrainerSkill4\",\n\t\"ClassTrainerSkill5\",\n\t\"ClassTrainerSkill6\",\n\t\"ClassTrainerSkill7\",\n\t\"ClassTrainerSkill8\",\n\t\"ClassTrainerSkill9\",\n\t\"ClassTrainerSkill10\",\n\t\"ClassTrainerSkill11\",\n\t\"ClassTrainerListScrollFrame\",\n\t\"ClassTrainerListScrollFrameScrollChildFrame\",\n\t\"ClassTrainerListScrollFrameScrollBar\",\n\t\"ClassTrainerListScrollFrameScrollBarScrollUpButton\",\n\t\"ClassTrainerListScrollFrameScrollBarScrollDownButton\",\n\t\"ClassTrainerMoneyFrame\",\n\t\"ClassTrainerMoneyFrameCopperButton\",\n\t\"ClassTrainerMoneyFrameSilverButton\",\n\t\"ClassTrainerMoneyFrameGoldButton\",\n\t\"ClassTrainerDetailScrollFrame\",\n\t\"ClassTrainerDetailScrollChildFrame\",\n\t\"ClassTrainerSkillIcon\",\n\t\"ClassTrainerDetailMoneyFrame\",\n\t\"ClassTrainerDetailMoneyFrameCopperButton\",\n\t\"ClassTrainerDetailMoneyFrameSilverButton\",\n\t\"ClassTrainerDetailMoneyFrameGoldButton\",\n\t\"ClassTrainerDetailScrollFrameScrollBar\",\n\t\"ClassTrainerDetailScrollFrameScrollBarScrollUpButton\",\n\t\"ClassTrainerDetailScrollFrameScrollBarScrollDownButton\",\n\t\"ClassTrainerTrainButton\",\n\t\"ClassTrainerCancelButton\",\n\t\"ClassTrainerFrameCloseButton\",\n\t-- widgets: Blizzard_TrainerUI\n\t\"ClassTrainerCancelButtonText\",\n\t\"ClassTrainerCollapseAllButtonHighlight\",\n\t\"ClassTrainerCollapseAllButtonSubText\",\n\t\"ClassTrainerCollapseAllButtonText\",\n\t\"ClassTrainerCostLabel\",\n\t\"ClassTrainerDetailMoneyFrameCopperButtonText\",\n\t\"ClassTrainerDetailMoneyFrameGoldButtonText\",\n\t\"ClassTrainerDetailMoneyFrameSilverButtonText\",\n\t\"ClassTrainerDetailScrollFrameBottom\",\n\t\"ClassTrainerDetailScrollFrameScrollBarThumbTexture\",\n\t\"ClassTrainerDetailScrollFrameTop\",\n\t\"ClassTrainerExpandTabLeft\",\n\t\"ClassTrainerExpandTabMiddle\",\n\t\"ClassTrainerFrameBottomLeft\",\n\t\"ClassTrainerFrameBottomRight\",\n\t\"ClassTrainerFrameFilterDropDownButtonDisabledTexture\",\n\t\"ClassTrainerFrameFilterDropDownButtonHighlightTexture\",\n\t\"ClassTrainerFrameFilterDropDownButtonNormalTexture\",\n\t\"ClassTrainerFrameFilterDropDownButtonPushedTexture\",\n\t\"ClassTrainerFrameFilterDropDownLeft\",\n\t\"ClassTrainerFrameFilterDropDownMiddle\",\n\t\"ClassTrainerFrameFilterDropDownRight\",\n\t\"ClassTrainerFrameFilterDropDownText\",\n\t\"ClassTrainerFramePortrait\",\n\t\"ClassTrainerGreetingText\",\n\t\"ClassTrainerHorizontalBarLeft\",\n\t\"ClassTrainerListScrollFrameScrollBarThumbTexture\",\n\t\"ClassTrainerMoneyFrameCopperButtonText\",\n\t\"ClassTrainerMoneyFrameGoldButtonText\",\n\t\"ClassTrainerMoneyFrameSilverButtonText\",\n\t\"ClassTrainerNameText\",\n\t\"ClassTrainerSkill10Highlight\",\n\t\"ClassTrainerSkill10SubText\",\n\t\"ClassTrainerSkill10Text\",\n\t\"ClassTrainerSkill11Highlight\",\n\t\"ClassTrainerSkill11SubText\",\n\t\"ClassTrainerSkill11Text\",\n\t\"ClassTrainerSkill1Highlight\",\n\t\"ClassTrainerSkill1SubText\",\n\t\"ClassTrainerSkill1Text\",\n\t\"ClassTrainerSkill2Highlight\",\n\t\"ClassTrainerSkill2SubText\",\n\t\"ClassTrainerSkill2Text\",\n\t\"ClassTrainerSkill3Highlight\",\n\t\"ClassTrainerSkill3SubText\",\n\t\"ClassTrainerSkill3Text\",\n\t\"ClassTrainerSkill4Highlight\",\n\t\"ClassTrainerSkill4SubText\",\n\t\"ClassTrainerSkill4Text\",\n\t\"ClassTrainerSkill5Highlight\",\n\t\"ClassTrainerSkill5SubText\",\n\t\"ClassTrainerSkill5Text\",\n\t\"ClassTrainerSkill6Highlight\",\n\t\"ClassTrainerSkill6SubText\",\n\t\"ClassTrainerSkill6Text\",\n\t\"ClassTrainerSkill7Highlight\",\n\t\"ClassTrainerSkill7SubText\",\n\t\"ClassTrainerSkill7Text\",\n\t\"ClassTrainerSkill8Highlight\",\n\t\"ClassTrainerSkill8SubText\",\n\t\"ClassTrainerSkill8Text\",\n\t\"ClassTrainerSkill9Highlight\",\n\t\"ClassTrainerSkill9SubText\",\n\t\"ClassTrainerSkill9Text\",\n\t\"ClassTrainerSkillDescription\",\n\t\"ClassTrainerSkillHighlight\",\n\t\"ClassTrainerSkillName\",\n\t\"ClassTrainerSkillRequirements\",\n\t\"ClassTrainerSubSkillName\",\n\t\"ClassTrainerTrainButtonText\",\n}\n"
  },
  {
    "path": "DBM-AQ20/AQ20Trash.lua",
    "content": "local mod\t= DBM:NewMod(\"AQ20Trash\", \"DBM-AQ20\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetModelID(15324) -- Qiraji Gladiator\n\nmod.isTrashMod = true\n\nmod:RegisterEvents(\n\t\"SPELL_AURA_APPLIED 22997 25698 26079\",\n\t\"SPELL_AURA_REMOVED 22997\",\n\t\"SPELL_MISSED\"\n)\n\nmod:AddRangeFrameOption(10, 22997)\n\n--local eventsRegistered = false\n\ndo-- Anubisath Plague/Explode - keep in sync - AQ40/AQ40Trash.lua AQ20/AQ20Trash.lua\n\tlocal warnPlague\t\t\t\t\t= mod:NewTargetAnnounce(22997, 2)\n\tlocal warnCauseInsanity\t\t\t\t= mod:NewTargetNoFilterAnnounce(26079, 2)\n\n\tlocal specWarnPlague\t\t\t\t= mod:NewSpecialWarningMoveAway(22997, nil, nil, nil, 1, 2)\n\tlocal yellPlague\t\t\t\t\t= mod:NewYell(22997)\n\tlocal specWarnExplode\t\t\t\t= mod:NewSpecialWarningRun(25698, \"Melee\", nil, 3, 4, 2)\n\n\t-- aura applied didn't seem to catch the reflects and other buffs\n\tfunction mod:SPELL_AURA_APPLIED(args)\n\t\tif args.spellId == 22997 then\n\t\t\tif args:IsPlayer() then\n\t\t\t\tspecWarnPlague:Show()\n\t\t\t\tspecWarnPlague:Play(\"runout\")\n\t\t\t\tyellPlague:Yell()\n\t\t\t\tif self.Options.RangeFrame then\n\t\t\t\t\tDBM.RangeCheck:Show(10)\n\t\t\t\tend\n\t\t\telse\n\t\t\t\twarnPlague:Show(args.destName)\n\t\t\tend\n\t\telseif args.spellId == 25698 then\n\t\t\tspecWarnExplode:Show()\n\t\t\tspecWarnExplode:Play(\"justrun\")\n\t\telseif args.spellId == 26079 then\n\t\t\twarnCauseInsanity:CombinedShow(0.75, args.destName)\n\t\tend\n\tend\n\n\tfunction mod:SPELL_AURA_REMOVED(args)\n\t\tif args.spellId == 22997 then\n\t\t\tif args:IsPlayer() and self.Options.RangeFrame then\n\t\t\t\tDBM.RangeCheck:Hide()\n\t\t\tend\n\t\tend\n\tend\nend\n\ndo-- Anubisath Reflect - keep in sync - AQ40/AQ40Trash.lua AQ20/AQ20Trash.lua\n\tlocal specWarnShadowFrostReflect\t= mod:NewSpecialWarningReflect(19595, nil, nil, nil, 1, 2)\n\tlocal specWarnFireArcaneReflect\t\t= mod:NewSpecialWarningReflect(13022, nil, nil, nil, 1, 2)\n\n\t-- todo: thorns, shadow storm\n\n\tlocal playerGUID = UnitGUID(\"player\")\n\tfunction mod:SPELL_MISSED(sourceGUID, _, _, _, destName, _, _, _, spellSchool, missType)\n\t\tif (missType == \"REFLECT\" or missType == \"DEFLECT\") and sourceGUID == playerGUID then\n\t\t\tif (spellSchool == 32 or spellSchool == 16) and self:AntiSpam(3, 1) then\n\t\t\t\tspecWarnShadowFrostReflect:Show(destName)\n\t\t\t\tspecWarnShadowFrostReflect:Play(\"stopattack\")\n\t\t\telseif (spellSchool == 4 or spellSchool == 64) and self:AntiSpam(3, 2) then\n\t\t\t\tspecWarnFireArcaneReflect:Show(destName)\n\t\t\t\tspecWarnFireArcaneReflect:Play(\"stopattack\")\n\t\t\tend\n\t\tend\n--\t\tif eventsRegistered then-- for AQ40 timer\n--\t\t\tself:SPELL_DAMAGE(nil, nil, nil, destGUID)\n--\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-AQ20/Ayamiss.lua",
    "content": "local mod\t= DBM:NewMod(\"Ayamiss\", \"DBM-AQ20\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15369)\nmod:SetEncounterID(722)\n\nmod:SetModelID(15369)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 25725 8269\",\n\t\"SPELL_AURA_REMOVED 25725\",\n\t\"UNIT_HEALTH mouseover target\"\n)\n\nlocal warnPhase2\t= mod:NewPhaseAnnounce(2)\nlocal warnParalyze\t= mod:NewTargetNoFilterAnnounce(25725, 3)\nlocal warnEnrage\t= mod:NewTargetNoFilterAnnounce(8269, 3)\n\nlocal timerParalyze\t= mod:NewTargetTimer(10, 25725, nil, nil, nil, 3)\n\nfunction mod:OnCombatStart()\n\tself:SetStage(1)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 25725 then\n\t\twarnParalyze:Show(args.destName)\n\t\ttimerParalyze:Start(args.destName)\n\telseif args.spellId == 8269 and args:IsDestTypeHostile() then\n\t\twarnEnrage:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 25725 then\n\t\ttimerParalyze:Stop(args.destName)\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif self.vb.phase < 2 and self:GetUnitCreatureId(uId) == 15369 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.70 then\n\t\tself:SetStage(2)\n\t\twarnPhase2:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-AQ20/Buru.lua",
    "content": "local mod\t= DBM:NewMod(\"Buru\", \"DBM-AQ20\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15370)\nmod:SetEncounterID(721)\n\nmod:SetModelID(15370)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"CHAT_MSG_MONSTER_EMOTE\"\n)\n\n--TODO, see if CLASSIC data set has a spellID for pursuit before it can use generic alerts and voice pack suppot\nlocal WarnDismember\t\t\t\t= mod:NewStackAnnounce(96, 3, nil, \"Tank\", 3)\nlocal warnPursue\t\t\t\t= mod:NewAnnounce(\"WarnPursue\", 3, 12021, false, 2)\n\nlocal specWarnDismember\t\t\t= mod:NewSpecialWarningStack(96, nil, 5, nil, nil, 1, 6)\nlocal specWarnDismemberTaunt\t= mod:NewSpecialWarningTaunt(96, nil, nil, nil, 1, 2)\nlocal specWarnPursue\t\t\t= mod:NewSpecialWarning(\"SpecWarnPursue\", nil, nil, nil, 4, 2)\n\nlocal timerDismember\t\t\t= mod:NewTargetTimer(10, 96, nil, \"Tank\", 3, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart()\n\tif not self:IsTrivial(80) then\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"SPELL_AURA_APPLIED 96\",\n\t\t\t\"SPELL_AURA_APPLIED_DOSE 96\",\n\t\t\t\"SPELL_AURA_REMOVED 96\"\n\t\t)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tself:UnregisterShortTermEvents()\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 96 then\n\t\tlocal amount = args.amount or 1\n\t\ttimerDismember:Start(args.destName)\n\t\tif amount >= 5 then\n\t\t\tif args:IsPlayer() then\n\t\t\t\tspecWarnDismember:Show(amount)\n\t\t\t\tspecWarnDismember:Play(\"stackhigh\")\n\t\t\telseif not DBM:UnitDebuff(\"player\", args.spellName) and not UnitIsDeadOrGhost(\"player\") then\n\t\t\t\tspecWarnDismemberTaunt:Show(args.destName)\n\t\t\t\tspecWarnDismemberTaunt:Play(\"tauntboss\")\n\t\t\telse\n\t\t\t\tWarnDismember:Show(args.destName, amount)\n\t\t\tend\n\t\telse\n\t\t\tWarnDismember:Show(args.destName, amount)\n\t\tend\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 96 then\n\t\ttimerDismember:Stop(args.destName)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_EMOTE(msg, _, _, _, target)\n\tif (msg:find(L.PursueEmote) or msg == L.PursueEmote) and target then\n\t\ttarget = DBM:GetUnitFullName(target)\n\t\tif target == UnitName(\"player\") then\n\t\t\tspecWarnPursue:Show()\n\t\t\tspecWarnPursue:Play(\"justrun\")\n\t\telse\n\t\t\twarnPursue:Show(target)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-AQ20/DBM-AQ20.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Ruins of Ahn'Qiraj|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Ruinen von Ahn'Qiraj|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Ruinas de Ahn'Qiraj|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Ruinas de Ahn'Qiraj|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Ruines d'Ahn'Qiraj|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Руины Ан'Киража|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0안퀴라즈 폐허|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0安其拉废墟|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0安其拉廢墟|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMAQ20_AllSavedVars\n## SavedVariablesPerCharacter: DBMAQ20_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: Classic\n## X-DBM-StatTypes: normal\n## X-DBM-Mod-Name: The Ruins of Ahn'Qiraj\n## X-DBM-Mod-Name-zhCN: 安其拉废墟\n## X-DBM-Mod-Name-ruRU: Руины Ан'Киража\n## X-DBM-Mod-Name-esES: Ruinas de Ahn'Qiraj\n## X-DBM-Mod-MapID: 718\n## X-DBM-Mod-Sort: 1103\n## X-DBM-Mod-LoadZone: Ruins of Ahn'Qiraj\n## X-DBM-Mod-LoadZone-esES: Ruinas de Ahn'Qiraj\n## X-DBM-Mod-LoadZone-ruRU: Руины Ан'Киража\n## X-DBM-Mod-LoadZone-frFR: Ruines d'Ahn'Qiraj\n## X-DBM-Mod-LoadZone-esMX: Ruinas de Ahn'Qiraj\n## X-DBM-Mod-LoadZone-zhTW: 安其拉廢墟\n## X-DBM-Mod-LoadZone-zhCN: 安其拉废墟\n## X-DBM-Mod-LoadZone-koKR: 안퀴라즈 폐허\n## X-DBM-Mod-LoadZone-deDE: Ruinen von Ahn'Qiraj\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.fr.lua\nlocalization.es.lua\nlocalization.mx.lua\nlocalization.ru.lua\nlocalization.kr.lua\nlocalization.tw.lua\nlocalization.cn.lua\n\nAQ20Trash.lua\nKurinnaxx.lua\nRajaxx.lua\nMoam.lua\nBuru.lua\nAyamiss.lua\nOssirian.lua\n"
  },
  {
    "path": "DBM-AQ20/Kurinnaxx.lua",
    "content": "local mod\t= DBM:NewMod(\"Kurinnaxx\", \"DBM-AQ20\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15348)\nmod:SetEncounterID(718)\n\nmod:SetModelID(15348)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CREATE 25648\",\n\t\"SPELL_AURA_APPLIED 25646 26527\",\n\t\"SPELL_AURA_APPLIED_DOSE 25646\",\n\t\"SPELL_AURA_REMOVED 25646\"\n)\n\nlocal warnWound\t\t\t= mod:NewStackAnnounce(25646, 2, nil, \"Tank\", 2)\nlocal warnSandTrap\t\t= mod:NewTargetNoFilterAnnounce(25656, 3)\nlocal warnFrenzy\t\t= mod:NewTargetNoFilterAnnounce(26527, 3)\n\nlocal specWarnSandTrap\t= mod:NewSpecialWarningYou(25656, nil, nil, nil, 1, 2)\nlocal yellSandTrap\t\t= mod:NewYell(25656)\nlocal specWarnWound\t\t= mod:NewSpecialWarningStack(25646, nil, 5, nil, nil, 1, 6)\nlocal specWarnWoundTaunt= mod:NewSpecialWarningTaunt(25646, nil, nil, nil, 1, 2)\n\nlocal timerWound\t\t= mod:NewTargetTimer(15, 25646, nil, \"Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerSandTrapCD\t= mod:NewCDTimer(8, 25656, nil, nil, nil, 3)\n\n--mod:AddSpeedClearOption(\"AQ20\", true)\n\n--mod.vb.firstEngageTime = nil\n\nfunction mod:OnCombatStart(delay)\n\ttimerSandTrapCD:Start(8-delay)\n--[[\tif not self.vb.firstEngageTime then\n\t\tself.vb.firstEngageTime = time()\n\t\tif self.Options.FastestClear and self.Options.SpeedClearTimer then\n\t\t\t--Custom bar creation that's bound to core, not mod, so timer doesn't stop when mod stops it's own timers\n\t\t\tDBT:CreateBar(self.Options.FastestClear, DBM_CORE_L.SPEED_CLEAR_TIMER_TEXT, \"Interface\\\\Icons\\\\Spell_Nature_TimeStop\")\n\t\tend\n\tend--]]\nend\n\nfunction mod:SPELL_CREATE(args)\n\tif args.spellId == 25648 then\n\t\ttimerSandTrapCD:Start()\n\t\tif args:IsPlayerSource() then\n\t\t\tspecWarnSandTrap:Show()\n\t\t\tspecWarnSandTrap:Play(\"targetyou\")\n\t\t\tyellSandTrap:Yell()\n\t\telse\n\t\t\twarnSandTrap:Show(args.sourceName)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\t--if args.spellId == 25646 and not self:IsTrivial(80) then\n\tif args.spellID == 25646 then\n\t\tlocal amount = args.amount or 1\n\t\ttimerWound:Start(args.destName)\n\t\tif amount >= 5 then\n\t\t\tif args:IsPlayer() then\n\t\t\t\tspecWarnWound:Show(amount)\n\t\t\t\tspecWarnWound:Play(\"stackhigh\")\n\t\t\telseif not DBM:UnitDebuff(\"player\", args.spellName) and not UnitIsDeadOrGhost(\"player\") then\n\t\t\t\tspecWarnWoundTaunt:Show(args.destName)\n\t\t\t\tspecWarnWoundTaunt:Play(\"tauntboss\")\n\t\t\telse\n\t\t\t\twarnWound:Show(args.destName, amount)\n\t\t\tend\n\t\telse\n\t\t\twarnWound:Show(args.destName, amount)\n\t\tend\n\telseif args.spellId == 26527 and args:IsDestTypeHostile() then\n\t\twarnFrenzy:Show(args.destName)\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 25646 then\n\t\ttimerWound:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-AQ20/Moam.lua",
    "content": "local mod\t= DBM:NewMod(\"Moam\", \"DBM-AQ20\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15340)\nmod:SetEncounterID(720)\n\nmod:SetModelID(15340)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 25685\",\n\t\"SPELL_AURA_REMOVED 25685\"\n)\n\n--Energize is mode boss goes in during Summon Mana Fiend Phase\n--TODO, update timrs on mana drains/etc\n--TODO, verify if arcane eruption wll always be the same\n--\"Arcane Eruption-25672-npc:15340 = pull:325.8\", -- [1]\nlocal warnEnergize\t\t= mod:NewSpellAnnounce(25685, 3)\n\nlocal timerEnergize\t\t= mod:NewNextTimer(90, 25685, nil, nil, nil, 6)\nlocal timerEnergizeDur\t= mod:NewBuffActiveTimer(90, 25685, nil, nil, nil, 6)\n\nfunction mod:OnCombatStart(delay)\n\ttimerEnergize:Start(-delay)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 25685 and args:IsDestTypeHostile() then\n\t\twarnEnergize:Show()\n\t\ttimerEnergizeDur:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 25685 and args:IsDestTypeHostile() then\n\t\ttimerEnergizeDur:Stop()\n\t\ttimerEnergize:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-AQ20/Ossirian.lua",
    "content": "local mod\t= DBM:NewMod(\"Ossirian\", \"DBM-AQ20\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15339)\nmod:SetEncounterID(723)\n\nmod:SetModelID(15339)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 25176 25189 25177 25178 25180 25181 25183\",\n\t\"SPELL_AURA_REMOVED 25189\"\n)\n\nlocal warnSupreme\t\t= mod:NewSpellAnnounce(25176, 3)\nlocal warnCyclone\t\t= mod:NewTargetNoFilterAnnounce(25189, 4)\nlocal warnVulnerable\t= mod:NewAnnounce(\"WarnVulnerable\", 3, \"Interface\\\\Icons\\\\INV_Enchant_EssenceMagicLarge\")\n\nlocal timerCyclone\t\t= mod:NewTargetTimer(10, 25189, nil, nil, nil, 3)\nlocal timerVulnerable\t= mod:NewTimer(45, \"TimerVulnerable\", \"Interface\\\\Icons\\\\INV_Enchant_EssenceMagicLarge\", nil, nil, 6)\n\n-- local firstBossMod = DBM:GetModByName(\"Kurinnaxx\")\n\n--function mod:OnCombatStart(delay, yellTriggered)\n\n--end\n\n--[[\nfunction mod:OnCombatEnd(wipe)\n\tif not wipe then\n\t\tDBT:CancelBar(DBM_CORE_L.SPEED_CLEAR_TIMER_TEXT)\n\t\tif firstBossMod.vb.firstEngageTime then\n\t\t\tlocal thisTime = time() - firstBossMod.vb.firstEngageTime\n\t\t\tif thisTime and thisTime > 0 then\n\t\t\t\tif not firstBossMod.Options.FastestClear then\n\t\t\t\t\t--First clear, just show current clear time\n\t\t\t\t\tDBM:AddMsg(DBM_CORE_L.RAID_DOWN:format(\"AQ20\", DBM:strFromTime(thisTime)))\n\t\t\t\t\tfirstBossMod.Options.FastestClear = thisTime\n\t\t\t\telseif (firstBossMod.Options.FastestClear > thisTime) then\n\t\t\t\t\t--Update record time if this clear shorter than current saved record time and show users new time, compared to old time\n\t\t\t\t\tDBM:AddMsg(DBM_CORE_L.RAID_DOWN_NR:format(\"AQ20\", DBM:strFromTime(thisTime), DBM:strFromTime(firstBossMod.Options.FastestClear)))\n\t\t\t\t\tfirstBossMod.Options.FastestClear = thisTime\n\t\t\t\telse\n\t\t\t\t\t--Just show this clear time, and current record time (that you did NOT beat)\n\t\t\t\t\tDBM:AddMsg(DBM_CORE_L.RAID_DOWN_L:format(\"AQ20\", DBM:strFromTime(thisTime), DBM:strFromTime(firstBossMod.Options.FastestClear)))\n\t\t\t\tend\n\t\t\tend\n\t\t\tfirstBossMod.vb.firstEngageTime = nil\n\t\tend\n\tend\nend\n--]]\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 25176 then\n\t\twarnSupreme:Show()\n\telseif args.spellId == 25189 then\n\t\twarnCyclone:Show(args.destName)\n\t\ttimerCyclone:Start(args.destName)\n\telseif args:IsSpellID(25177, 25178, 25180, 25181, 25183) then\n\t\twarnVulnerable:Show(args.spellName)\n\t\ttimerVulnerable:Show(args.spellName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 25189 then\n\t\ttimerCyclone:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-AQ20/Rajaxx.lua",
    "content": "local mod\t= DBM:NewMod(\"Rajaxx\", \"DBM-AQ20\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15341)\nmod:SetEncounterID(719)\n\nmod:SetModelID(15341)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(--An exception to not use incombat events, cause boss might not engage until after his waves\n\t\"SPELL_AURA_APPLIED 25471\",\n\t\"SPELL_CAST_SUCCESS 26550 25599\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal warnWave\t\t\t= mod:NewAnnounce(\"WarnWave\", 2)\nlocal warnOrder\t\t\t= mod:NewTargetNoFilterAnnounce(25471)\nlocal warnCloud\t\t\t= mod:NewSpellAnnounce(26550)\nlocal warnThundercrash\t= mod:NewSpellAnnounce(25599)\n\nlocal specWarnOrder\t\t= mod:NewSpecialWarningYou(25471, nil, nil, nil, 1, 2)\nlocal yellOrder\t\t\t= mod:NewYell(25471)\n\nlocal timerOrder\t\t= mod:NewTargetTimer(10, 25471, nil, nil, nil, 3)\nlocal timerCloud\t\t= mod:NewBuffActiveTimer(15, 26550, nil, nil, nil, 3)--? Good color?\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 25471 then\n\t\ttimerOrder:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnOrder:Show()\n\t\t\tspecWarnOrder:Play(\"targetyou\")\n\t\t\tyellOrder:Yell()\n\t\telse\n\t\t\twarnOrder:Show(args.destName)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 26550 then\n\t\twarnCloud:Show()\n\t\ttimerCloud:Start()\n\telseif args.spellId == 25599 then\n\t\twarnThundercrash:Show()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)--some of these yells have line breaks that message match doesn't grab, so will try find.\n\tif msg == L.Wave12 or msg:find(L.Wave12) or msg == L.Wave12Alt or msg:find(L.Wave12Alt) then\n\t\tself:SendSync(\"Wave\", \"1, 2\")\n\telseif msg == L.Wave3 or msg:find(L.Wave3) then\n\t\tself:SendSync(\"Wave\", 3)\n\telseif msg == L.Wave4 or msg:find(L.Wave4) then\n\t\tself:SendSync(\"Wave\", 4)\n\telseif msg == L.Wave5 or msg:find(L.Wave5) then\n\t\tself:SendSync(\"Wave\", 5)\n\telseif msg == L.Wave6 or msg:find(L.Wave6) then\n\t\tself:SendSync(\"Wave\", 6)\n\telseif msg == L.Wave7 or msg:find(L.Wave7) then\n\t\tself:SendSync(\"Wave\", 7)\n\telseif msg == L.Wave8 or msg:find(L.Wave8) then\n\t\tself:SendSync(\"Wave\", 8)\n\tend\nend\n\nfunction mod:OnSync(msg, count)\n\tif DBM:GetCurrentArea() ~= 509 then return end--Block syncs if not in the zone\n\tif msg == \"Wave\" then\n\t\twarnWave:Show(count)\n\tend\nend\n"
  },
  {
    "path": "DBM-AQ20/localization.cn.lua",
    "content": "if GetLocale() ~= \"zhCN\" then return end\nlocal L\n\n---------------\n-- Kurinnaxx --\n---------------\nL = DBM:GetModLocalization(\"Kurinnaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"库林纳克斯\"\n})\n\n------------\n-- Rajaxx --\n------------\nL = DBM:GetModLocalization(\"Rajaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"拉贾克斯将军\"\n})\n\nL:SetWarningLocalization({\n\tWarnWave\t= \"进攻次数%s\",\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t= \"显示下一次进攻\"\n})\n\nL:SetMiscLocalization({\n\tWave12\t\t= \"拉贾克斯，还记得我说过要杀光其它虫子之后再干掉你么？\",\n\tWave12Alt\t= \"它们来了。尽量别被它们干掉，新兵。\",\n\tWave3\t\t= \"我们复仇的时刻到了！让敌人的内心被黑暗吞噬吧！\",\n\tWave4\t\t= \"我们不用再呆在这座石墙里面了！我们很快就能报仇了！在我们的怒火面前，就连那些龙也会战栗！\",\n\tWave5\t\t= \"让敌人胆战心惊吧！让他们在恐惧中死去！\",\n\tWave6\t\t= \"鹿盔将会呜咽着哀求我饶他一命，就像他那懦弱的儿子一样！一千年来的屈辱会在今天洗清！\",\n\tWave7\t\t= \"范达尔！你的死期到了！藏到翡翠梦境里去吧，祈祷我们永远都找不到你！\",\n\tWave8\t\t= \"无礼的蠢货！我会亲自要了你们的命！\"\n})\n\n----------\n-- Moam --\n----------\nL = DBM:GetModLocalization(\"Moam\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"莫阿姆\"\n})\n\n----------\n-- Buru --\n----------\nL = DBM:GetModLocalization(\"Buru\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"吞咽者布鲁\"\n})\n\nL:SetWarningLocalization({\n\tWarnPursue\t\t= \">%s<被追击了\",\n\tSpecWarnPursue\t= \"你被追击了\",\n\tWarnDismember\t= \">%2$s<中了%1$s(%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPursue\t\t= \"提示被追击的目标\",\n\tSpecWarnPursue\t= \"当你被追击的时候显示特別警告\"\n})\n\nL:SetMiscLocalization({\n\tPursueEmote\t= \"%s凝视着\"\n})\n\n-------------\n-- Ayamiss --\n-------------\nL = DBM:GetModLocalization(\"Ayamiss\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"狩猎者阿亚米斯\"\n})\n\n--------------\n-- Ossirian --\n--------------\nL = DBM:GetModLocalization(\"Ossirian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"无疤者奥斯里安\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t= \"%s\"\n})\n\nL:SetTimerLocalization({\n\tTimerVulnerable\t= \"%s\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable\t= \"提示虛弱\",\n\tTimerVulnerable\t= \"为虛弱显示计时器\"\n})\n\n----------------\n-- AQ20 Trash --\n----------------\nL = DBM:GetModLocalization(\"AQ20Trash\")\n\nL:SetGeneralLocalization({\n\tname = \"AQ20：全程计时\"\n})\n"
  },
  {
    "path": "DBM-AQ20/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n---------------\n-- Kurinnaxx --\n---------------\nL = DBM:GetModLocalization(\"Kurinnaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kurinnaxx\"\n})\n\n------------\n-- Rajaxx --\n------------\nL = DBM:GetModLocalization(\"Rajaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"General Rajaxx\"\n})\n\nL:SetWarningLocalization({\n\tWarnWave\t= \"Welle %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t= \"Zeige Meldung für nächste Angriffswelle\"\n})\n\nL:SetMiscLocalization({\n\tWave12\t\t= \"Hier kommen sie. Bleibt am Leben, Welpen.\",\n\tWave12Alt\t= \"Erinnerst du dich daran, Rajaxx, wann ich dir das letzte Mal sagte, ich würde dich töten?\",\n\tWave3\t\t= \"Die Zeit der Vergeltung ist gekommen! Lasst uns die Herzen unserer Feinde mit Dunkelheit füllen!\",\n\tWave4\t\t= \"Wir werden nicht länger hinter verbarrikadierten Toren und Mauern aus Stein ausharren! Die Rache wird unser sein! Selbst die Drachen werden im Angesicht unseres Zornes erzittern!\",\n\tWave5\t\t= \"Wir kennen keine Furcht! Und wir werden unseren Feinden den Tod bringen!\",\n\tWave6\t\t= \"Staghelm wird winseln und um sein Leben betteln, genau wie sein räudiger Sohn! Eintausend Jahre der Ungerechtigkeit werden heute enden!\",\n\tWave7\t\t= \"Fandral! Deine Zeit ist gekommen! Geh und verstecke dich im Smaragdgrünen Traum, und bete, dass wir dich nie finden werden!\",\n\tWave8\t\t= \"Unverschämter Narr! Ich werde Euch höchstpersönlich töten!\"\n})\n\n----------\n-- Moam --\n----------\nL = DBM:GetModLocalization(\"Moam\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Moam\"\n})\n\n----------\n-- Buru --\n----------\nL = DBM:GetModLocalization(\"Buru\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Buru der Verschlinger\"\n})\n\nL:SetWarningLocalization({\n\tWarnPursue\t\t= \"Verfolgung auf >%s<\",\n\tSpecWarnPursue\t= \"Du wirst verfolgt\",\n\tWarnDismember\t= \"%s auf >%s< (%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPursue\t\t= \"Verkünde Ziele von Verfolgung\",\n\tSpecWarnPursue\t= \"Spezialwarnung, wenn du verfolgt wirst\"\n})\n\nL:SetMiscLocalization({\n\tPursueEmote\t= \"%s behält %s im Blickfeld!\"--MIGHT NOT WORK\n})\n\n-------------\n-- Ayamiss --\n-------------\nL = DBM:GetModLocalization(\"Ayamiss\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ayamiss der Jäger\"\n})\n\n--------------\n-- Ossirian --\n--------------\nL = DBM:GetModLocalization(\"Ossirian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ossirian der Narbenlose\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t= \"%s\"\n})\n\nL:SetTimerLocalization({\n\tTimerVulnerable\t= \"%s\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable\t= \"Verkünde Schwächen\",\n\tTimerVulnerable\t= \"Dauer der Schwächen anzeigen\"\n})\n\n----------------\n-- AQ20 Trash --\n----------------\nL = DBM:GetModLocalization(\"AQ20Trash\")\n\nL:SetGeneralLocalization({\n\tname = \"AQ20 Trash\"\n})\n"
  },
  {
    "path": "DBM-AQ20/localization.en.lua",
    "content": "local L\n\n---------------\n-- Kurinnaxx --\n---------------\nL = DBM:GetModLocalization(\"Kurinnaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kurinnaxx\"\n})\n\n------------\n-- Rajaxx --\n------------\nL = DBM:GetModLocalization(\"Rajaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"General Rajaxx\"\n})\n\nL:SetWarningLocalization({\n\tWarnWave\t= \"Wave %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t= \"Show announce for next incoming wave\"\n})\n\nL:SetMiscLocalization({\n\tWave12\t\t= \"They come now. Try not to get yourself killed, young blood.\",\n\tWave12Alt\t= \"Remember, Rajaxx, when I said I'd kill you last?\",\n\tWave3\t\t= \"The time of our retribution is at hand! Let darkness reign in the hearts of our enemies!\",\n\tWave4\t\t= \"No longer will we wait behind barred doors and walls of stone! No longer will our vengeance be denied! The dragons themselves will tremble before our wrath!\",\n\tWave5\t\t= \"Fear is for the enemy! Fear and death!\",\n\tWave6\t\t= \"Staghelm will whimper and beg for his life, just as his whelp of a son did! One thousand years of injustice will end this day!\",\n\tWave7\t\t= \"Fandral! Your time has come! Go and hide in the Emerald Dream and pray we never find you!\",\n\tWave8\t\t= \"Impudent fool! I will kill you myself!\"\n})\n\n----------\n-- Moam --\n----------\nL = DBM:GetModLocalization(\"Moam\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Moam\"\n})\n\n----------\n-- Buru --\n----------\nL = DBM:GetModLocalization(\"Buru\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Buru the Gorger\"\n})\n\nL:SetWarningLocalization({\n\tWarnPursue\t\t= \"Pursue on >%s<\",\n\tSpecWarnPursue\t= \"Pursue on you\",\n\tWarnDismember\t= \"%s on >%s< (%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPursue\t\t= \"Announce pursue targets\",\n\tSpecWarnPursue\t= \"Show special warning when you are being pursued\",\n\tWarnDismember\t= DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS.spell:format(96)\n})\n\nL:SetMiscLocalization({\n\tPursueEmote\t= \"%s sets eyes on\"\n})\n\n-------------\n-- Ayamiss --\n-------------\nL = DBM:GetModLocalization(\"Ayamiss\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ayamiss the Hunter\"\n})\n\n--------------\n-- Ossirian --\n--------------\nL = DBM:GetModLocalization(\"Ossirian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ossirian the Unscarred\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t= \"%s\"\n})\n\nL:SetTimerLocalization({\n\tTimerVulnerable\t= \"%s\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable\t= \"Announce weaknesses\",\n\tTimerVulnerable\t= \"Show timer for weaknesses\"\n})\n\n----------------\n-- AQ20 Trash --\n----------------\nL = DBM:GetModLocalization(\"AQ20Trash\")\n\nL:SetGeneralLocalization({\n\tname = \"AQ20 Trash\"\n})\n"
  },
  {
    "path": "DBM-AQ20/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" then return end\nlocal L\n\n---------------\n-- Kurinnaxx --\n---------------\nL = DBM:GetModLocalization(\"Kurinnaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kurinnaxx\"\n})\n\n------------\n-- Rajaxx --\n------------\nL = DBM:GetModLocalization(\"Rajaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"General Rajaxx\"\n})\n\nL:SetWarningLocalization({\n\tWarnWave\t= \"Oleada %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t= \"Mostrar aviso previo para la siguiente oleada\"\n})\n\nL:SetMiscLocalization({\n\tWave12\t\t= \"Ahí vienen. Intenta que no te maten,\",--Followed by 'chico' or 'chica'\n\tWave12Alt\t= \"Rajaxx, ¿recuerdas que te dije que serías el último en morir?\",\n\tWave3\t\t= \"¡Se acerca la hora de imponer nuestro castigo!\t¡Que la oscuridad reine en los corazones de nuestros enemigos!\",\n\tWave4\t\t= \"¡No nos quedaremos esperando por más tiempo tras puertas con barrotes ni muros de piedra! ¡Ya no nos negarán nuestra venganza! ¡Hasta los propios dragones temblarán antes nuestra ira!\",\n\tWave5\t\t= \"¡El miedo es para el enemigo! ¡El miedo y la muerte!\",\n\tWave6\t\t= \"¡Corzocelada lloriqueará y suplicará por su vida, al igual que hizo el mocoso de su cría! ¡Hoy se pondrá fin a mil años de injusticia!\",\n\tWave7\t\t= \"¡Fandral! ¡Tu hora ha llegado! ¡Ve y escóndete en el Sueño Esmeralda y reza para que nunca te encontremos!\",\n\tWave8\t\t= \"¡Idiota insolente! ¡Te mataré yo mismo!\"\n})\n\n----------\n-- Moam --\n----------\nL = DBM:GetModLocalization(\"Moam\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Moam\"\n})\n\n----------\n-- Buru --\n----------\nL = DBM:GetModLocalization(\"Buru\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Buru el Manducador\"\n})\n\nL:SetWarningLocalization({\n\tWarnPursue\t\t= \"Persiguiendo a >%s<\",\n\tSpecWarnPursue\t= \"Buru te está persiguiendo\",\n\tWarnDismember\t= \"%s en >%s< (%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPursue\t\t= \"Anunciar objetivos de la persecución de Buru\",\n\tSpecWarnPursue\t= \"Mostrar aviso especial cuando te persiga el jefe\",\n\tWarnDismember\t= DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS.spell:format(96)\n})\n\nL:SetMiscLocalization({\n\tPursueEmote\t= \"%s mira a\"\n})\n\n-------------\n-- Ayamiss --\n-------------\nL = DBM:GetModLocalization(\"Ayamiss\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ayamiss el Cazador\"\n})\n\n--------------\n-- Ossirian --\n--------------\nL = DBM:GetModLocalization(\"Ossirian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Osirio el Sinmarcas\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t= \"%s\"\n})\n\nL:SetTimerLocalization({\n\tTimerVulnerable\t= \"%s\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable\t= \"Anunciar debilidades\",\n\tTimerVulnerable\t= \"Mostrar temporizador para la duración de las debilidades\"\n})\n\n----------------\n-- AQ20 Trash --\n----------------\nL = DBM:GetModLocalization(\"AQ20Trash\")\n\nL:SetGeneralLocalization({\n\tname = \"AQ20: Bichos\"\n})\n"
  },
  {
    "path": "DBM-AQ20/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\nlocal L\n\n---------------\n-- Kurinnaxx --\n---------------\nL = DBM:GetModLocalization(\"Kurinnaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kurinnaxx\"\n})\n\n------------\n-- Rajaxx --\n------------\nL = DBM:GetModLocalization(\"Rajaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Général Rajaxx\"\n})\n\nL:SetWarningLocalization({\n\tWarnWave\t= \"Vague %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t= \"Afficher l'annonce pour la prochaine vague entrante\"\n})\n\nL:SetMiscLocalization({\n\tWave12\t\t= \"Ils arrivent. Essayez de ne pas vous faire tuer, bleusaille.\",\n\tWave12Alt\t= \"Alors, Rajaxx, tu te souviens que j’avais dit que je te tuerais le dernier ?\",\n\tWave3\t\t= \"L’heure de notre vengeance sonne enfin ! Que les ténèbres règnent dans le cœur de nos ennemis !\",\n\tWave4\t\t= \"C’en est fini d’attendre derrière des portes fermées et des murs de pierre ! Nous ne serons pas privés de notre vengeance ! Les dragons eux-mêmes trembleront devant notre courroux !\",\n\tWave5\t\t= \"La peur est pour l’ennemi ! La peur et la mort !\",\n\tWave6\t\t= \"Forteramure pleurnichera pour avoir la vie sauve, comme l’a fait son morveux de fils ! En ce jour, mille ans d’injustice s’achèvent !\",\n\tWave7\t\t= \"Fandral ! Ton heure est venue ! Va te cacher dans le Rêve d’Emeraude, et prie pour que nous ne te trouvions jamais !\",\n\tWave8\t\t= \"Imbécile imprudent ! Je vais te tuer moi-même !\"\n})\n\n----------\n-- Moam --\n----------\nL = DBM:GetModLocalization(\"Moam\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Moam\"\n})\n\n----------\n-- Buru --\n----------\nL = DBM:GetModLocalization(\"Buru\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Buru Grandgosier\"\n})\n\nL:SetWarningLocalization({\n\tWarnPursue\t\t= \"Poursuivre >%s<\",\n\tSpecWarnPursue\t= \"Te poursuivre\",\n\tWarnDismember\t= \"%s sur >%s< (%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPursue\t\t= \"Annoncer des cibles de poursuite\",\n\tSpecWarnPursue\t= \"Afficher un avertissement spécial lorsque vous êtes poursuivi\",\n\tWarnDismember\t= DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS.spell:format(96)\n})\n\nL:SetMiscLocalization({\n\tPursueEmote\t= \"%s pose ses yeux sur\"\n})\n\n-------------\n-- Ayamiss --\n-------------\nL = DBM:GetModLocalization(\"Ayamiss\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ayamiss le Chasseur\"\n})\n\n--------------\n-- Ossirian --\n--------------\nL = DBM:GetModLocalization(\"Ossirian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ossirian l'Intouché\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t= \"%s\"\n})\n\nL:SetTimerLocalization({\n\tTimerVulnerable\t= \"%s\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable\t= \"Annoncer les sensibilités\",\n\tTimerVulnerable\t= \"Afficher le timer pour les sensibilités\"\n})\n\n----------------\n-- AQ20 Trash --\n----------------\nL = DBM:GetModLocalization(\"AQ20Trash\")\n\nL:SetGeneralLocalization({\n\tname = \"AQ20: Ennemis communs\"\n})\n"
  },
  {
    "path": "DBM-AQ20/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n---------------\n-- Kurinnaxx --\n---------------\nL = DBM:GetModLocalization(\"Kurinnaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"쿠린낙스\"\n})\n\n------------\n-- Rajaxx --\n------------\nL = DBM:GetModLocalization(\"Rajaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"장군 라작스\"\n})\n\nL:SetWarningLocalization({\n\tWarnWave\t= \"공격 #%s\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t= \"다음 공격 알림\"\n})\n\nL:SetMiscLocalization({\n\tWave12\t\t= \"그들이 오고 있다. 자신의 몸을 지키도록 하라!\",\n\tWave12Alt\t= \"Remember, Rajaxx, when I said I'd kill you last?\",\n\tWave3\t\t= \"응보의 날이 다가왔다! 암흑이 적들의 마음을 지배하리라!\",\n\tWave4\t\t= \"더는 돌벽과 성문 뒤에서 기다릴 수 없다! 복수의 기회를 놓칠 수 없다. 우리가 분노를 터뜨리는 날 용족은 두려움에 떨리라.\",\n\tWave5\t\t= \"적에게 공포와 죽음의 향연을!\",\n\tWave6\t\t= \"스태그헬름은 흐느끼며 목숨을 구걸하리라. 그 아들놈이 그랬던 것처럼! 천 년의 한을 풀리라! 오늘에서야!\",\n\tWave7\t\t= \"판드랄! 때가 왔다! 에메랄드의 꿈속에 숨어서 기도나 올려라!\",\n\tWave8\t\t= \"건방진... 내 친히 너희를 처치해주마!\"\n})\n\n----------\n-- Moam --\n----------\nL = DBM:GetModLocalization(\"Moam\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"모암\"\n})\n\n----------\n-- Buru --\n----------\nL = DBM:GetModLocalization(\"Buru\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"먹보 부루\"\n})\n\nL:SetWarningLocalization({\n\tWarnPursue\t\t= \"추적 : >%s<\",\n\tSpecWarnPursue\t= \"당신을 추적!\",\n\tWarnDismember\t= \"%s : >%s< (%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPursue\t\t= \"추적 대상 알림 보기\",\n\tSpecWarnPursue\t= \"추적 대상이 된 경우 특수 알림 보기\"\n})\n\nL:SetMiscLocalization({\n\tPursueEmote\t= \"노려봅니다!\"\n})\n\n-------------\n-- Ayamiss --\n-------------\nL = DBM:GetModLocalization(\"Ayamiss\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"사냥꾼 아야미스\"\n})\n\n--------------\n-- Ossirian --\n--------------\nL = DBM:GetModLocalization(\"Ossirian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"무적의 오시리안\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t= \"%s\"\n})\n\nL:SetTimerLocalization({\n\tTimerVulnerable\t= \"%s\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable\t= \"약화 알림 보기\",\n\tTimerVulnerable\t= \"약화 바 보기\"\n})\n\n----------------\n-- AQ20 Trash --\n----------------\nL = DBM:GetModLocalization(\"AQ20Trash\")\n\nL:SetGeneralLocalization({\n\tname = \"안퀴20 일반몹\"\n})\n"
  },
  {
    "path": "DBM-AQ20/localization.mx.lua",
    "content": "if GetLocale() ~= \"esMX\" then return end\nlocal L\n\n---------------\n-- Kurinnaxx --\n---------------\nL = DBM:GetModLocalization(\"Kurinnaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kurinnaxx\"\n})\n\n------------\n-- Rajaxx --\n------------\nL = DBM:GetModLocalization(\"Rajaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"General Rajaxx\"\n})\n\nL:SetWarningLocalization({\n\tWarnWave\t= \"Oleada %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t= \"Mostrar aviso previo para la siguiente oleada\"\n})\n\nL:SetMiscLocalization({\n\tWave12\t\t= \"Ahí vienen. Intenta que no te maten,\",--Followed by 'chico' or 'chica'\n\tWave12Alt\t= \"Rajaxx, ¿recuerdas que te dije que serías el último en morir?\",\n\tWave3\t\t= \"¡La hora de las recompensas está próxima! ¡Que la oscuridad reine en el corazón de nuestros enemigos!\",\n\tWave4\t\t= \"¡No volveremos a esperar detrás de rejas y muros de piedra! ¡Nunca más podrán negarnos nuestra venganza! ¡Hasta los dragones temblarán frente a nuestra ira!\",\n\tWave5\t\t= \"¡El miedo es para el enemigo! ¡Miedo y muerte!\",\n\tWave6\t\t= \"¡Corzocelada llorará y rogará por su vida, igual que lo hizo su débil hijo! ¡Hoy acabará un milenio lleno de injusticia!\",\n\tWave7\t\t= \"¡Fandral! ¡Ha llegado tu hora! ¡Ve y escóndete en el Sueño Esmeralda y reza para que nunca te encontremos!\",\n\tWave8\t\t= \"¡Loco imprudente! ¡Acabaré contigo yo mismo!\"\n})\n\n----------\n-- Moam --\n----------\nL = DBM:GetModLocalization(\"Moam\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Moam\"\n})\n\n----------\n-- Buru --\n----------\nL = DBM:GetModLocalization(\"Buru\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Buru el Manducador\"\n})\n\nL:SetWarningLocalization({\n\tWarnPursue\t\t= \"Persiguiendo a >%s<\",\n\tSpecWarnPursue\t= \"Buru te está persiguiendo\",\n\tWarnDismember\t= \"%s en >%s< (%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPursue\t\t= \"Anunciar objetivos de la persecución de Buru\",\n\tSpecWarnPursue\t= \"Mostrar aviso especial cuando te persiga el jefe\",\n\tWarnDismember\t= DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS.spell:format(96)\n})\n\nL:SetMiscLocalization({\n\tPursueEmote\t= \"¡%s mira a\"\n})\n\n-------------\n-- Ayamiss --\n-------------\nL = DBM:GetModLocalization(\"Ayamiss\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ayamiss el Cazador\"\n})\n\n--------------\n-- Ossirian --\n--------------\nL = DBM:GetModLocalization(\"Ossirian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Osirio el Sinmarcas\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t= \"%s\"\n})\n\nL:SetTimerLocalization({\n\tTimerVulnerable\t= \"%s\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable\t= \"Anunciar debilidades\",\n\tTimerVulnerable\t= \"Mostrar temporizador para la duración de las debilidades\"\n})\n\n----------------\n-- AQ20 Trash --\n----------------\nL = DBM:GetModLocalization(\"AQ20Trash\")\n\nL:SetGeneralLocalization({\n\tname = \"AQ20: Bichos\"\n})\n"
  },
  {
    "path": "DBM-AQ20/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n---------------\n-- Kurinnaxx --\n---------------\nL = DBM:GetModLocalization(\"Kurinnaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Куриннакс\"\n})\n\n------------\n-- Rajaxx --\n------------\nL = DBM:GetModLocalization(\"Rajaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Генерал Раджакс\"\n})\n\nL:SetWarningLocalization({\n\tWarnWave\t= \"Волна %s\",\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t= \"Показывать предупреждение о следующей волне\"\n})\n\nL:SetMiscLocalization({\n\tWave1\t\t= \"Они пришли. Постарайся не дать себя убить, \",\n\tWave12Alt\t= \"Раджакс, напомни, когда я в последний раз обещал тебя убить?\",\n\tWave3\t\t= \"Час возмездия близок! Да охватит мрак сердца наших врагов!\",\n\tWave4\t\t= \"Мы не будем больше ждать за закрытыми дверьми и каменными стенами! Мы не будем больше отказываться от возмездия! Даже драконы содрогнутся перед нашим гневом!\",\n\tWave5\t\t= \"Пусть наши враги трепещут! Смерть им!\",\n\tWave6\t\t= \"Олений Шлем будет скулить и молить о пощаде, в точности как его сопливый сынок! Тысячелетняя несправедливость сегодня закончится!\",\n\tWave7\t\t= \"Фэндрал! Твой час пробил! Иди же, прячься в изумрудном сне и молись, чтобы мы до тебя не добрались!\",\n\tWave8\t\t= \"Настырная тварь! Я сам тебя убью!\"\n})\n\n----------\n-- Moam --\n----------\nL = DBM:GetModLocalization(\"Moam\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Моам\"\n})\n\n----------\n-- Buru --\n----------\nL = DBM:GetModLocalization(\"Buru\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Буру Ненасытный\"\n})\n\nL:SetWarningLocalization({\n\tWarnPursue\t\t= \"Преследует >%s<\",\n\tSpecWarnPursue\t= \"Преследует вас!\",\n\tWarnDismember\t= \"%s на >%s< (%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPursue\t\t= \"Называть преследуемые цели\",\n\tSpecWarnPursue\t= \"Показывать специальное предупреждение, когда преследование на вас\",\n\tWarnDismember\t= DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS.spell:format(96)\n})\n\nL:SetMiscLocalization({\n\tPursueEmote\t= \"%s смотрит на\"\n})\n\n-------------\n-- Ayamiss --\n-------------\nL = DBM:GetModLocalization(\"Ayamiss\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Аямисса Охотница\"\n})\n\n--------------\n-- Ossirian --\n--------------\nL = DBM:GetModLocalization(\"Ossirian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Оссириан Неуязвимый\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t= \"%s\"\n})\n\nL:SetTimerLocalization({\n\tTimerVulnerable\t= \"%s\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable\t= \"Объявлять слабость\",\n\tTimerVulnerable\t= \"Показывать таймер до слабости\"\n})\n\n----------------\n-- AQ20 Trash --\n----------------\nL = DBM:GetModLocalization(\"AQ20Trash\")\n\nL:SetGeneralLocalization({\n\tname = \"АК20: Треш\"\n})\n"
  },
  {
    "path": "DBM-AQ20/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n---------------\n-- Kurinnaxx --\n---------------\nL = DBM:GetModLocalization(\"Kurinnaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"庫林納克斯\"\n})\n\n------------\n-- Rajaxx --\n------------\nL = DBM:GetModLocalization(\"Rajaxx\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"拉賈克斯將軍\"\n})\n\nL:SetWarningLocalization({\n\tWarnWave\t= \"進攻波數%s\",\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t= \"為下一次波進攻顯示提示\"\n})\n\nL:SetMiscLocalization({\n\tWave12\t\t= \"記得嗎，拉賈克斯，上次我說會殺了你？\",\n\tWave12Alt\t= \"它們來了。盡量別被它們幹掉，新兵。\",\n\tWave3\t\t= \"我們復仇的時刻就在眼前！讓黑暗掌控敵人的內心吧！\",\n\tWave4\t\t= \"我們不用在被堵住的門和石牆後面等待了！沒有人能抵抗我們的復仇！巨龍將在我們的憤怒之前顫抖！\",\n\tWave5\t\t= \"恐懼留給敵人！恐懼吧！去死吧！\",\n\tWave6\t\t= \"鹿盔會為了活命而哭著乞求，就像他的兒子一樣！千年來的不公不義會在今天昭雪！\",\n\tWave7\t\t= \"范達爾！時候到了！躲進翡翠夢境，祈禱我們永遠不會找到你吧！\",\n\tWave8\t\t= \"不要臉的笨蛋！我要親手殺了你！\"\n})\n\n----------\n-- Moam --\n----------\nL = DBM:GetModLocalization(\"Moam\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"莫阿姆\"\n})\n\n----------\n-- Buru --\n----------\nL = DBM:GetModLocalization(\"Buru\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"『暴食者』布魯\"\n})\n\nL:SetWarningLocalization({\n\tWarnPursue\t\t= \">%s<被追擊了\",\n\tSpecWarnPursue\t= \"你被追擊了\",\n\tWarnDismember\t= \">%2$s<中了%1$s(%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPursue\t\t= \"提示被追擊的目標\",\n\tSpecWarnPursue\t= \"當你被追擊的時候顯示特別警告\"\n})\n\nL:SetMiscLocalization({\n\tPursueEmote\t= \"%s凝視著\"\n})\n\n-------------\n-- Ayamiss --\n-------------\nL = DBM:GetModLocalization(\"Ayamiss\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"『狩獵者』阿亞米斯\"\n})\n\n--------------\n-- Ossirian --\n--------------\nL = DBM:GetModLocalization(\"Ossirian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"『無疤者』奧斯里安\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t= \"%s\"\n})\n\nL:SetTimerLocalization({\n\tTimerVulnerable\t= \"%s\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable\t= \"提示虛弱\",\n\tTimerVulnerable\t= \"為虛弱顯示計時器\"\n})\n\n----------------\n-- AQ20 Trash --\n----------------\nL = DBM:GetModLocalization(\"AQ20Trash\")\n\nL:SetGeneralLocalization({\n\tname = \"AQ20：全程計時\"\n})\n"
  },
  {
    "path": "DBM-AQ40/AQ40Trash.lua",
    "content": "local mod\t= DBM:NewMod(\"AQ40Trash\", \"DBM-AQ40\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20240529121936\")\nmod:SetModelID(15264) -- Anubisath Sentinel\n\nmod.isTrashMod = true\n\nmod:RegisterEvents(\n\t--\"ENCOUNTER_END\",\n\t\"SPELL_AURA_APPLIED 22997 26556 25698 26079\",\n\t\"SPELL_AURA_REMOVED 22997 26556\",\n\t\"SPELL_DAMAGE\",\n\t\"SPELL_MISSED\"\n)\n\n--TODO, meteor those big guys use, maybe some other stuff\n--local specWarnPrimalRampage\t\t\t= mod:NewSpecialWarningDodge(198379, \"Melee\", nil, nil, 1, 2)\n\nmod:AddRangeFrameOption(10, 22997)\nmod:AddSpeedClearOption(\"AQ40\", true)\n\n--Speed Clear variables\nmod.vb.firstEngageTime = nil\nmod.vb.requiredBosses = 0\n\n--Register all damage events on mod load\nlocal eventsRegistered = true\nmod:RegisterShortTermEvents(\n\t\"SWING_DAMAGE\",\n\t\"SWING_MISSED\",\n\t\"SPELL_PERIODIC_DAMAGE\",\n\t\"SPELL_PERIODIC_MISSED\"\n)\n\n--Request speed clear variables, in case it was already started before mod loaded\nmod:SendSync(\"IsAQ40Started\")\n\ndo-- Anubisath Plague/Explode - keep in sync - AQ40/AQ40Trash.lua AQ20/AQ20Trash.lua\n\tlocal warnPlague\t\t\t\t\t= mod:NewTargetNoFilterAnnounce(22997, 2)\n\tlocal warnCauseInsanity\t\t\t\t= mod:NewTargetNoFilterAnnounce(26079, 2)\n\n\tlocal specWarnPlague\t\t\t\t= mod:NewSpecialWarningMoveAway(22997, nil, nil, nil, 1, 2)\n\tlocal yellPlague\t\t\t\t\t= mod:NewYell(22997)\n\tlocal specWarnExplode\t\t\t\t= mod:NewSpecialWarningRun(25698, \"Melee\", nil, 3, 4, 2)\n\n\t-- aura applied didn't seem to catch the reflects and other buffs\n\tfunction mod:SPELL_AURA_APPLIED(args)\n\t\tlocal spellId = args.spellId\n\t\tif spellId == 22997 or spellId == 26556 then\n\t\t\tif args:IsPlayer() then\n\t\t\t\tspecWarnPlague:Show()\n\t\t\t\tspecWarnPlague:Play(\"runout\")\n\t\t\t\tyellPlague:Yell()\n\t\t\t\tif self.Options.RangeFrame then\n\t\t\t\t\tDBM.RangeCheck:Show(10)\n\t\t\t\tend\n\t\t\telse\n\t\t\t\twarnPlague:Show(args.destName)\n\t\t\tend\n\t\telseif spellId == 25698 then\n\t\t\tspecWarnExplode:Show()\n\t\t\tspecWarnExplode:Play(\"justrun\")\n\t\telseif spellId == 26079 then\n\t\t\twarnCauseInsanity:CombinedShow(0.75, args.destName)\n\t\tend\n\tend\n\n\tfunction mod:SPELL_AURA_REMOVED(args)\n\t\tif args.spellId == 22997 or args.spellId == 26556 then\n\t\t\tif args:IsPlayer() and self.Options.RangeFrame then\n\t\t\t\tDBM.RangeCheck:Hide()\n\t\t\tend\n\t\tend\n\tend\nend\n\ndo\n\tlocal startCreatureIds = {\n\t\t[15264] = true,--Anubisath Sentinel\n\t\t[15262] = true--Obsidian Eradicator\n\t}\n\tlocal function checkFirstPull(self, GUID)\n\t\tlocal cid = self:GetCIDFromGUID(GUID)\n\t\tif startCreatureIds[cid] then\n\t\t\tif not self.vb.firstEngageTime then\n\t\t\t\tself.vb.firstEngageTime = time()\n\t\t\t\tif self.Options.FastestClear3 and self.Options.SpeedClearTimer then\n\t\t\t\t\t--Custom bar creation that's bound to core, not mod, so timer doesn't stop when mod stops it's own timers\n\t\t\t\t\tDBT:CreateBar(self.Options.FastestClear3, DBM_CORE_L.SPEED_CLEAR_TIMER_TEXT, \"Interface\\\\Icons\\\\Spell_Nature_TimeStop\")\n\t\t\t\tend\n\t\t\t\tself:SendSync(\"AQ40Started\", self.vb.firstEngageTime)--Also sync engage time\n\t\t\tend\n\t\t\t--Unregister high CPU combat log events\n\t\t\tself:UnregisterShortTermEvents()\n\t\t\teventsRegistered = false\n\t\tend\n\tend\n\n\t-- Anubisath Reflect - keep in sync - AQ40/AQ40Trash.lua AQ20/AQ20Trash.lua\n\tlocal specWarnShadowFrostReflect\t= mod:NewSpecialWarningReflect(19595, nil, nil, nil, 1, 2)\n\tlocal specWarnFireArcaneReflect\t\t= mod:NewSpecialWarningReflect(13022, nil, nil, nil, 1, 2)\n\tlocal specWarnShadowStorm\t\t\t= mod:NewSpecialWarningMoveTo(26555, nil, nil, nil, 1, 2)\n\n\t-- todo: thorns\n\tlocal playerGUID = UnitGUID(\"player\")\n\tfunction mod:SPELL_DAMAGE(_, sourceName, _, destGUID, _, _, spellId)\n\t\tif spellId == 26555 and destGUID == playerGUID and self:AntiSpam(3, 3) then\n\t\t\tspecWarnShadowStorm:Show(sourceName)\n\t\t\tspecWarnShadowStorm:Play(\"findshelter\")\n\t\tend\n\t\tif eventsRegistered then-- for AQ40 timer\n\t\t\tcheckFirstPull(self, destGUID or 0)\n\t\tend\n\tend\n\tfunction mod:SPELL_MISSED(sourceGUID, _, _, destGUID, destName, _, _, _, spellSchool, missType)\n\t\tif (missType == \"REFLECT\" or missType == \"DEFLECT\") and sourceGUID == playerGUID then\n\t\t\tif (spellSchool == 32 or spellSchool == 16) and self:AntiSpam(3, 1) then\n\t\t\t\tspecWarnShadowFrostReflect:Show(destName)\n\t\t\t\tspecWarnShadowFrostReflect:Play(\"stopattack\")\n\t\t\telseif (spellSchool == 4 or spellSchool == 64) and self:AntiSpam(3, 2) then\n\t\t\t\tspecWarnFireArcaneReflect:Show(destName)\n\t\t\t\tspecWarnFireArcaneReflect:Play(\"stopattack\")\n\t\t\tend\n\t\tend\n\t\tif eventsRegistered then-- for AQ40 timer\n\t\t\tcheckFirstPull(self, destGUID or 0)\n\t\tend\n\tend\n\n\tfunction mod:SPELL_PERIODIC_DAMAGE(_, _, _, destGUID)\n\t\tcheckFirstPull(self, destGUID or 0)\n\tend\n\tmod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE\n\n\tfunction mod:SWING_DAMAGE(_, _, _, destGUID)\n\t\tcheckFirstPull(self, destGUID or 0)\n\tend\n\tmod.SWING_MISSED = mod.SWING_DAMAGE\n\n--[[\tlocal function updateDefeatedBosses(self, encounterId)\n\t\tif self:AntiSpam(10, encounterId) then\n\t\t\tif encounterId == 710 or encounterId == 713 or encounterId == 716 or encounterId == 717 or encounterId == 714 then\n\t\t\t\tself.vb.requiredBosses = self.vb.requiredBosses + 1\n\t\t\t\tif self.vb.requiredBosses == 5 then\n\t\t\t\t\tDBT:CancelBar(DBM_CORE_L.SPEED_CLEAR_TIMER_TEXT)\n\t\t\t\t\tif self.vb.firstEngageTime then\n\t\t\t\t\t\tlocal thisTime = time() - self.vb.firstEngageTime\n\t\t\t\t\t\tif thisTime and thisTime > 0 then\n\t\t\t\t\t\t\tif not self.Options.FastestClear3 then\n\t\t\t\t\t\t\t\t--First clear, just show current clear time\n\t\t\t\t\t\t\t\tDBM:AddMsg(DBM_CORE_L.RAID_DOWN:format(\"AQ40\", DBM:strFromTime(thisTime)))\n\t\t\t\t\t\t\t\tself.Options.FastestClear3 = thisTime\n\t\t\t\t\t\t\telseif (self.Options.FastestClear3 > thisTime) then\n\t\t\t\t\t\t\t\t--Update record time if this clear shorter than current saved record time and show users new time, compared to old time\n\t\t\t\t\t\t\t\tDBM:AddMsg(DBM_CORE_L.RAID_DOWN_NR:format(\"AQ40\", DBM:strFromTime(thisTime), DBM:strFromTime(self.Options.FastestClear3)))\n\t\t\t\t\t\t\t\tself.Options.FastestClear3 = thisTime\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t--Just show this clear time, and current record time (that you did NOT beat)\n\t\t\t\t\t\t\t\tDBM:AddMsg(DBM_CORE_L.RAID_DOWN_L:format(\"AQ40\", DBM:strFromTime(thisTime), DBM:strFromTime(self.Options.FastestClear3)))\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\tself.vb.firstEngageTime = nil\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n ]]\n\tfunction mod:OnSync(msg, timeOrEncounter, sender)\n\t\t--Sync recieved with start time and ours is currently not started\n\t\t--The reason this doesn't just check self.vb.firstEngageTime is nil, because it might not be if SendVariableInfo send it first\n\t\tif msg == \"AQ40Started\" and timeOrEncounter --[[ and not DBT:GetBar(DBM_CORE_L.SPEED_CLEAR_TIMER_TEXT) ]] then\n\t\t\tif not self.vb.firstEngageTime then\n\t\t\t\tself.vb.firstEngageTime = tonumber(timeOrEncounter)\n\t\t\tend\n\t\t\tif self.Options.FastestClear3 and self.Options.SpeedClearTimer then\n\t\t\t\t--Custom bar creation that's bound to core, not mod, so timer doesn't stop when mod stops it's own timers\n\t\t\t\tlocal adjustment = time() - self.vb.firstEngageTime\n\t\t\t\tDBT:CreateBar(self.Options.FastestClear3 - adjustment, DBM_CORE_L.SPEED_CLEAR_TIMER_TEXT, \"Interface\\\\Icons\\\\Spell_Nature_TimeStop\")\n\t\t\tend\n\t\t\t--Unregister high CPU combat log events\n\t\t\tself:UnregisterShortTermEvents()\n\t\telseif msg == \"IsAQ40Started\" and self.vb.firstEngageTime then\n\t\t\t--Sadly this has to be done with two syncs, one for variables for bosses that have been killed and one to instruct starting of timer\n\t\t\tself:SendSync(\"AQ40Started\", self.vb.firstEngageTime)\n\t\t\t--Send all variables from the mod.vb table in whisper comm to requester (and not sent to whole raid)\n\t\t\t--This is sadly still going to generate a LOT of comm traffic on zone in. upwards of 4-117 syncs, per player zone in\n\t\t\t--Reviewing code, it's hard to do this in less comms, it's either don't support recovering the speed clear timer in all situations (disconnect, reloadui, zoning in late) or cause a burst of syncs :\\\n\t\t\tDBM:SendVariableInfo(self, sender)\n\t\t--[[ elseif msg == \"EncounterEnd\" and timeOrEncounter then\n\t\t\tupdateDefeatedBosses(self, timeOrEncounter)--In case player misses event (ie they released or are outside the raid for that particular boss ]]\n\t\tend\n\tend\n\n\t--[[function mod:ENCOUNTER_END(encounterId, _, _, _, success)\n\t\tif success == 0 then return end--wipe\n\t\t--All the required bosses for the raid to be full cleared.\n\t\tif encounterId == 710 or encounterId == 713 or encounterId == 716 or encounterId == 717 or encounterId == 714 then\n\t\t\tupdateDefeatedBosses(self, encounterId)--Still want to fire this on event because the event will always be faster than sync\n\t\t\tself:SendSync(\"EncounterEnd\", encounterId)\n\t\tend\n\tend]]\nend\n"
  },
  {
    "path": "DBM-AQ40/CThun.lua",
    "content": "local mod\t= DBM:NewMod(\"CThun\", \"DBM-AQ40\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15589, 15727)\nmod:SetEncounterID(717)\n\nmod:SetUsedIcons(1)\n\nmod:RegisterCombat(\"combat\")\nmod:SetWipeTime(25)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 26134\",\n\t\"SPELL_CAST_SUCCESS 26586\",\n\t\"SPELL_AURA_APPLIED 26476\",\n\t\"SPELL_AURA_REMOVED 26476\",\n\t\"CHAT_MSG_MONSTER_EMOTE\",\n\t\"UNIT_DIED\",\n\t\"UNIT_SPELLCAST_SUCCEEDED\"\n)\n\nlocal warnEyeTentacle\t\t\t= mod:NewAnnounce(\"WarnEyeTentacle\", 2, 126)\nlocal warnClawTentacle\t\t\t= mod:NewAnnounce(\"WarnClawTentacle2\", 2, 26391, false)\nlocal warnGiantEyeTentacle\t\t= mod:NewAnnounce(\"WarnGiantEyeTentacle\", 3, 126)\nlocal warnGiantClawTentacle\t\t= mod:NewAnnounce(\"WarnGiantClawTentacle\", 3, 26391)\nlocal warnPhase2\t\t\t\t= mod:NewPhaseAnnounce(2)\n\nlocal specWarnDarkGlare\t\t\t= mod:NewSpecialWarningDodge(26029, nil, nil, nil, 3, 2)\nlocal specWarnWeakened\t\t\t= mod:NewSpecialWarning(\"SpecWarnWeakened\", nil, nil, nil, 2, 2, nil, 28598)\nlocal specWarnEyeBeam\t\t\t= mod:NewSpecialWarningYou(26134, nil, nil, nil, 1, 2)\nlocal yellEyeBeam\t\t\t\t= mod:NewYell(26134)\n\nlocal timerDarkGlareCD\t\t\t= mod:NewNextTimer(86, 26029) -- [2024-07-05]@[19:45:12] - \"Dark Glare-26029-npc:15589-188 = pull:53.52...\nlocal timerDarkGlare\t\t\t= mod:NewBuffActiveTimer(39, 26029) -- [...], 0.98, 0.98, 1.02, 1.03, 0.97, 1.02, 1.01, 0.98, 1.00, 1.00, 1.01, 0.99, 1.00, 1.00, 1.00, 0.99, 1.02, 0.98, 1.01, 0.99, 0.99, 1.00, 1.01, 1.01, 1.00, 1.01, 0.99 = 26.99 (but missing more)\nlocal timerEyeTentacle\t\t\t= mod:NewTimer(45, \"TimerEyeTentacle\", 126, nil, nil, 1)\nlocal timerGiantEyeTentacle\t\t= mod:NewTimer(60, \"TimerGiantEyeTentacle\", 126, nil, nil, 1)\nlocal timerClawTentacle\t\t\t= mod:NewTimer(8, \"TimerClawTentacle\", 26391, nil, nil, 1) -- every 8 seconds\nlocal timerGiantClawTentacle\t= mod:NewTimer(60, \"TimerGiantClawTentacle\", 26391, nil, nil, 1)\nlocal timerWeakened\t\t\t\t= mod:NewTimer(45, \"TimerWeakened\", 28598)\n\nmod:AddRangeFrameOption(\"10\")\nmod:AddSetIconOption(\"SetIconOnEyeBeam\", 26134, true, false, {1})\nmod:AddInfoFrameOption(nil, true)\n\nlocal firstBossMod = DBM:GetModByName(\"AQ40Trash\")\nlocal playersInStomach = {}\nlocal fleshTentacles, diedTentacles = {}, {}\n\nlocal updateInfoFrame\ndo\n\tlocal twipe = table.wipe\n\tlocal lines = {}\n\tlocal sortedLines = {}\n\tlocal function addLine(key, value)\n\t\t-- sort by insertion order\n\t\tlines[key] = value\n\t\tsortedLines[#sortedLines + 1] = key\n\tend\n\tupdateInfoFrame = function()\n\t\ttwipe(lines)\n\t\ttwipe(sortedLines)\n\t\t--First, process players in stomach and gather tentacle information and debuff stacks\n\t\tfor i = 1, #playersInStomach do\n\t\t\tlocal name = playersInStomach[i]\n\t\t\tlocal uId = DBM:GetRaidUnitId(name)\n\t\t\tif uId then\n\t\t\t\t--First, display their stomach debuff stacks\n\t\t\t\tlocal spellName, _, _, count = DBM:UnitDebuff(uId, 26476)\n\t\t\t\tif spellName and count then\n\t\t\t\t\taddLine(name, count)\n\t\t\t\tend\n\t\t\t\t--Also, process their target information for tentacles\n\t\t\t\tlocal targetuId = uId..\"target\"\n\t\t\t\tlocal guid = UnitGUID(targetuId)\n\t\t\t\tif guid and (mod:GetCIDFromGUID(guid) == 15802) and not diedTentacles[guid] then--Targetting Flesh Tentacle\n\t\t\t\t\tfleshTentacles[guid] = math.floor(UnitHealth(targetuId) / UnitHealthMax(targetuId) * 100)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\t--Now, show tentacle data after it's been updated from player processing\n\t\tlocal nLines = 0\n\t\tfor _, health in pairs(fleshTentacles) do\n\t\t\tnLines = nLines + 1\n\t\t\taddLine(L.FleshTent .. \" \" .. nLines, health .. '%')\n\t\tend\n\t\treturn lines, sortedLines\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\ttable.wipe(playersInStomach)\n\ttable.wipe(fleshTentacles)\n\ttable.wipe(diedTentacles)\n\tself:SetStage(1)\n\ttimerClawTentacle:Start(9-delay) -- Combatlog told me, the first Claw Tentacle spawn in 00:00:09, but need more test.\n\ttimerEyeTentacle:Start(40.48-delay)\n\ttimerDarkGlareCD:Start(53.52-delay)\n\tself:ScheduleMethod(53.52-delay, \"DarkGlare\")\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(10)\n\tend\nend\n\nfunction mod:OnCombatEnd(wipe, isSecondRun)\n\ttable.wipe(diedTentacles)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\n\tif self.Options.InfoFrame then\n\t\tDBM.InfoFrame:Hide()\n\tend\n\t--Only run on second run, to ensure trash mod has had enough time to update requiredBosses\n\tif not wipe and isSecondRun and firstBossMod.vb.firstEngageTime and firstBossMod.Options.SpeedClearTimer then\n\t\tif firstBossMod.vb.requiredBosses < 5 then\n\t\t\tDBM:AddMsg(L.NotValid:format(5 - firstBossMod.vb.requiredBosses .. \"/4\"))\n\t\tend\n\tend\nend\n\nfunction mod:DarkGlare()\n\t--ghost check, because if someone releases during encounter, this loop continues until they zone back in\n\t--We don't want to spam dark glare warnings while they are a ghost outside running back on a wipe\n\tif not UnitIsDeadOrGhost(\"player\") then\n\t\tspecWarnDarkGlare:Show()\n\t\tspecWarnDarkGlare:Play(\"laserrun\")--Or \"watchstep\" ?\n\tend\n\ttimerDarkGlare:Start()\n\ttimerDarkGlareCD:Start()\n\tself:ScheduleMethod(86, \"DarkGlare\")\nend\n\nfunction mod:EyeBeamTarget(targetname)\n\tif not targetname then return end\n\tif self.Options.SetIconOnEyeBeam then\n\t\tself:SetIcon(targetname, 1, 3)\n\tend\n\tif targetname == UnitName(\"player\") then\n\t\tspecWarnEyeBeam:Show()\n\t\tspecWarnEyeBeam:Play(\"targetyou\")\n\t\tyellEyeBeam:Yell()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 26134 and args:IsSrcTypeHostile() then\n\t\t-- the eye target can change to the correct target a tiny bit after the cast starts\n\t\tself:ScheduleMethod(0.1, \"BossTargetScanner\", args.sourceGUID, \"EyeBeamTarget\", 0.1, 3)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 26586 then\n\t\tDBM:AddMsg(\"Birth 26586 SPELL_CAST_SUCCESS fixed on server script. Notify Zidras on Discord or GitHub\")\n\t\t local cid = self:GetCIDFromGUID(args.sourceGUID)\n\t\t if self:AntiSpam(5, cid) then--Throttle multiple spawn within 5 seconds\n\t\t\tif cid == 15726 then--Eye Tentacle\n\t\t\t\ttimerEyeTentacle:Stop()\n\t\t\t\twarnEyeTentacle:Show()\n\t\t\t\ttimerEyeTentacle:Start(self.vb.phase == 2 and 30 or 45)\n\t\t\telseif cid == 15725 then -- Claw Tentacle\n\t\t\t\ttimerClawTentacle:Stop()\n\t\t\t\twarnClawTentacle:Show()\n\t\t\t\ttimerClawTentacle:Start()\n\t\t\telseif cid == 15334 then -- Giant Eye Tentacle\n\t\t\t\ttimerGiantEyeTentacle:Stop()\n\t\t\t\twarnGiantEyeTentacle:Show()\n\t\t\t\ttimerGiantEyeTentacle:Start()\n\t\t\telseif cid == 15728 then -- Giant Claw Tentacle\n\t\t\t\ttimerGiantClawTentacle:Stop()\n\t\t\t\twarnGiantClawTentacle:Show()\n\t\t\t\ttimerGiantClawTentacle:Start()\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 26476 then\n\t\t--I'm aware debuff stacks, but it's a context that doesn't matter to this mod\n\t\tif not tContains(playersInStomach, args.destName) then\n\t\t\ttable.insert(playersInStomach, args.destName)\n\t\tend\n\t\tif self.Options.InfoFrame and not DBM.InfoFrame:IsShown() then\n\t\t\tDBM.InfoFrame:SetHeader(L.Stomach)\n\t\t\tDBM.InfoFrame:Show(42, \"function\", updateInfoFrame, false, false)\n\t\t\tDBM.InfoFrame:SetColumns(1)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 26476 then\n\t\ttDeleteItem(playersInStomach, args.destName)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_EMOTE(msg)\n\tif msg == L.Weakened or msg:find(L.Weakened) then\n\t\tself:SendSync(\"Weakened\")\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 15589 then -- Eye of C'Thun\n\t\tself:SetStage(2)\n\t\twarnPhase2:Show()\n\t\ttimerDarkGlareCD:Stop()\n\t\ttimerEyeTentacle:Stop()\n\t\ttimerClawTentacle:Stop() -- Claw Tentacle never respawns in phase2\n\t\ttimerEyeTentacle:Start(40.5)\n\t\ttimerGiantClawTentacle:Start(10.5)\n\t\ttimerGiantEyeTentacle:Start(41.3)\n\t\tself:UnscheduleMethod(\"DarkGlare\")\n\telseif cid == 15802 then -- Flesh Tentacle\n\t\tfleshTentacles[args.destGUID] = nil\n\t\tdiedTentacles[args.destGUID] = true\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == DBM:GetSpellInfo(26586) then\n\t\tDBM:Debug(\"Birth\") -- Since CLEU is hidden, this is here only as a placeholder until I get a VOD to ascertain whether or not this can be a generic warning (no cid is available, so perhaps target scanning?).\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif not self:IsInCombat() then return end\n\tif msg == \"Weakened\" then\n\t\ttable.wipe(fleshTentacles)\n\t\tspecWarnWeakened:Show()\n\t\tspecWarnWeakened:Play(\"targetchange\")\n\t\ttimerEyeTentacle:Stop()\n\t\ttimerGiantClawTentacle:Stop()\n\t\ttimerGiantEyeTentacle:Stop()\n\t\ttimerWeakened:Start()\n\t\ttimerEyeTentacle:Start(83) -- 53+30\n\t\ttimerGiantClawTentacle:Start(53) -- Renew Giant Claw Tentacle Spawn Timer, After C'Thun be Weakened\n\t\ttimerGiantEyeTentacle:Start(83.7) -- Renew Giant Eye Tentacle Spawn Timer, After C'Thun be Weakened, A litter later than Eye Tentacles Spawn.(0.7s)\n\t\tif self.Options.InfoFrame then\n\t\t\tDBM.InfoFrame:Hide()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-AQ40/DBM-AQ40.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Temple of Ahn'Qiraj|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Tempel von Ahn'Qiraj|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Templo de Ahn'Qiraj|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Templo de Ahn'Qiraj|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Temple d'Ahn'Qiraj|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Храм Ан'Киража|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0안퀴라즈 사원|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0安其拉神殿|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0安其拉神廟|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMAQ40_AllSavedVars\n## SavedVariablesPerCharacter: DBMAQ40_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: Classic\n## X-DBM-StatTypes: normal\n## X-DBM-Mod-MapID: 767\n## X-DBM-Mod-Sort: 1102\n## X-DBM-Mod-Name: The Temple of Ahn'Qiraj\n## X-DBM-Mod-Name-zhCN: 安其拉神殿\n## X-DBM-Mod-Name-ruRU: Храм Ан'Киража\n## X-DBM-Mod-Name-frFR: Le Temple d'Ahn'Qiraj\n## X-DBM-Mod-LoadZone: Ahn'Qiraj\n## X-DBM-Mod-LoadZone-esES: Ahn'Qiraj\n## X-DBM-Mod-LoadZone-ruRU: Ан'Кираж\n## X-DBM-Mod-LoadZone-frFR: Ahn'Qiraj\n## X-DBM-Mod-LoadZone-esMX: Ahn'Qiraj\n## X-DBM-Mod-LoadZone-zhTW: 安其拉\n## X-DBM-Mod-LoadZone-zhCN: 安其拉\n## X-DBM-Mod-LoadZone-koKR: 안퀴라즈\n## X-DBM-Mod-LoadZone-deDE: Ahn'Qiraj\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.fr.lua\nlocalization.es.lua\nlocalization.mx.lua\nlocalization.ru.lua\nlocalization.kr.lua\nlocalization.tw.lua\nlocalization.cn.lua\n\nAQ40Trash.lua\nSkeram.lua\nThreeBugs.lua\nSartura.lua\nFankriss.lua\nViscidus.lua\nHuhuran.lua\nOuro.lua\nTwinEmps.lua\nCThun.lua\n"
  },
  {
    "path": "DBM-AQ40/Fankriss.lua",
    "content": "local mod\t= DBM:NewMod(\"Fankriss\", \"DBM-AQ40\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15510)\nmod:SetEncounterID(712)\n\nmod:SetModelID(15510)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_SUMMON 518 25832 25831\"\n)\n\nlocal warnEntangle\t\t= mod:NewTargetAnnounce(1121, 2)\nlocal warnWound\t\t\t= mod:NewStackAnnounce(25646, 3, nil, \"Tank\", 3)\nlocal warnWorm\t\t\t= mod:NewSpellAnnounce(25831, 3)\n\nlocal specWarnWound\t\t= mod:NewSpecialWarningStack(25646, nil, 5, nil, nil, 1, 6)\nlocal specWarnWoundTaunt= mod:NewSpecialWarningTaunt(25646, nil, nil, nil, 1, 2)\n\nlocal timerWound\t\t= mod:NewTargetTimer(20, 25646, nil, \"Tank\", 3, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nlocal yellEntangle\t\t= mod:NewYell(1121)\n\nfunction mod:OnCombatStart()\n\tif not self:IsTrivial(85) then\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"SPELL_AURA_APPLIED 25646 1121\",\n\t\t\t\"SPELL_AURA_APPLIED_DOSE 25646\",\n\t\t\t\"SPELL_AURA_REMOVED 25646\"\n\t\t)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tself:UnregisterShortTermEvents()\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 25646 then\n\t\tlocal amount = args.amount or 1\n\t\ttimerWound:Show(args.destName)\n\t\tif amount >= 5 then\n\t\t\tif args:IsPlayer() then\n\t\t\t\tspecWarnWound:Show(amount)\n\t\t\t\tspecWarnWound:Play(\"stackhigh\")\n\t\t\telseif not DBM:UnitDebuff(\"player\", args.spellName) and not UnitIsDeadOrGhost(\"player\") then\n\t\t\t\tspecWarnWoundTaunt:Show(args.destName)\n\t\t\t\tspecWarnWoundTaunt:Play(\"tauntboss\")\n\t\t\telse\n\t\t\t\twarnWound:Show(args.destName, amount)\n\t\t\tend\n\t\telse\n\t\t\twarnWound:Show(args.destName, amount)\n\t\tend\n\telseif args.spellId == 1121 then\n\t\tif args:IsPlayer() then\n\t\t\tyellEntangle:Yell()\n\t\tend\n\t\twarnEntangle:Show(args.destName)\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 25646 then\n\t\ttimerWound:Stop(args.destName)\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args:IsSpellID(518, 25832, 25831) then\n\t\twarnWorm:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-AQ40/Huhuran.lua",
    "content": "local mod\t= DBM:NewMod(\"Huhuran\", \"DBM-AQ40\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15509)\nmod:SetEncounterID(714)\n\nmod:SetModelID(15509)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 26180 26053 26051 26068 26050\",\n\t\"SPELL_AURA_APPLIED_DOSE 26050\",\n\t\"SPELL_AURA_REMOVED 26180 26053 26050\",\n\t\"SPELL_CAST_SUCCESS 26053\",\n\t\"UNIT_HEALTH mouseover focus target\"\n)\n\nlocal warnSting\t\t\t= mod:NewTargetNoFilterAnnounce(26180, 2, nil, \"RemovePoison\")\nlocal warnAcid\t\t\t= mod:NewStackAnnounce(26050, 3, nil, \"Tank\", 3)\nlocal warnPoison\t\t= mod:NewSpellAnnounce(26053, 3)\nlocal warnFrenzy\t\t= mod:NewSpellAnnounce(26051, 2, nil, \"Healer|Tank|RemoveEnrage\", 4)\nlocal warnBerserkSoon\t= mod:NewSoonAnnounce(26068, 2)\nlocal warnBerserk\t\t= mod:NewSpellAnnounce(26068, 2)\n\nlocal specWarnAcid\t\t= mod:NewSpecialWarningStack(26050, nil, 10, nil, nil, 1, 6)\nlocal specWarnAcidTaunt\t= mod:NewSpecialWarningTaunt(26050, nil, nil, nil, 1, 2)\nlocal specWarnFrenzy\t= mod:NewSpecialWarningDispel(26051, \"RemoveEnrage\", nil, nil, 1, 6)\n\nlocal timerSting\t\t= mod:NewBuffFadesTimer(12, 26180, nil, nil, nil, 5, nil, DBM_COMMON_L.POISON_ICON..DBM_COMMON_L.DEADLY_ICON)\nlocal timerStingCD\t\t= mod:NewCDTimer(25, 26180, nil, nil, nil, 3, nil, DBM_COMMON_L.POISON_ICON..DBM_COMMON_L.DEADLY_ICON)\nlocal timerPoisonCD\t\t= mod:NewCDTimer(11, 26053, nil, nil, nil, 3)\nlocal timerPoison\t\t= mod:NewBuffFadesTimer(8, 26053)\nlocal timerFrenzyCD\t\t= mod:NewCDTimer(11.8, 26051, nil, false, 3, 5, nil, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.HEALER_ICON)--Off by default do to ridiculous variation\nlocal timerAcid\t\t\t= mod:NewTargetTimer(30, 26050, nil, \"Tank\", 3, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerBerserk\t\t= mod:NewBerserkTimer(300)\n\nmod:AddRangeFrameOption(\"18\", nil, \"-Melee\")\n\nmod.vb.prewarn_berserk = false\nlocal StingTargets = {}\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.prewarn_berserk = false\n\ttable.wipe(StingTargets)\n\ttimerFrenzyCD:Start(9.6-delay)\n\ttimerPoisonCD:Start(11-delay)\n\ttimerStingCD:Start(20-delay)\n\ttimerBerserk:Start(-delay)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(18)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nlocal function warnStingTargets()\n\twarnSting:Show(table.concat(StingTargets, \"<, >\"))\n\ttimerStingCD:Start()\n\ttable.wipe(StingTargets)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 26053 then\n\t\twarnPoison:Show()\n\t\ttimerPoisonCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 26180 and args:IsDestTypePlayer() then\n\t\tStingTargets[#StingTargets + 1] = args.destName\n\t\tself:Unschedule(warnStingTargets)\n\t\tself:Schedule(1, warnStingTargets)\n\t\tif args:IsPlayer() then\n\t\t\ttimerSting:Start()\n\t\tend\n\telseif args.spellId == 26053 and args:IsPlayer() then\n\t\ttimerPoison:Start()\n\telseif args.spellId == 26051 and args:IsDestTypeHostile() then\n\t\tif self.Options.SpecWarn26051dispel then\n\t\t\tspecWarnFrenzy:Show(args.destName)\n\t\t\tspecWarnFrenzy:Play(\"enrage\")\n\t\telse\n\t\t\twarnFrenzy:Show(args.destName)\n\t\tend\n\t\ttimerFrenzyCD:Start()\n\telseif args.spellId == 26068 and args:IsDestTypeHostile() then\n\t\twarnBerserk:Show()\n\t\ttimerStingCD:Stop()\n\t\ttimerFrenzyCD:Stop()\n\t\ttimerPoisonCD:Stop()\n\t\ttimerBerserk:Stop()\n\t--elseif args.spellId == 26050 and not self:IsTrivial(80) then\n\telseif args.spellId == 26050 and args:IsPlayer() then\n\t\tlocal amount = args.amount or 1\n\t\ttimerAcid:Start(args.destName)\n\t\tif amount >= 10 then\n\t\t\tif args:IsPlayer() then\n\t\t\t\tspecWarnAcid:Show(amount)\n\t\t\t\tspecWarnAcid:Play(\"stackhigh\")\n\t\t\telseif not DBM:UnitDebuff(\"player\", args.spellName) and not UnitIsDeadOrGhost(\"player\") then\n\t\t\t\tspecWarnAcidTaunt:Show(args.destName)\n\t\t\t\tspecWarnAcidTaunt:Play(\"tauntboss\")\n\t\t\telse\n\t\t\t\twarnAcid:Show(args.destName, amount)\n\t\t\tend\n\t\telse\n\t\t\twarnAcid:Show(args.destName, amount)\n\t\tend\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 26180 and args:IsDestTypePlayer() then\n\t\ttimerSting:Stop()\n\telseif args.spellId == 26053 and args:IsPlayer() then\n\t\ttimerPoison:Stop()\n\telseif args.spellId == 26050 and args:IsPlayer() then\n\t\ttimerAcid:Stop(args.destName)\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif UnitHealth(uId) / UnitHealthMax(uId) <= 0.38 and self:GetUnitCreatureId(uId) == 15509 and not self.vb.prewarn_berserk then\n\t\twarnBerserkSoon:Show()\n\t\tself.vb.prewarn_berserk = true\n\tend\nend\n"
  },
  {
    "path": "DBM-AQ40/Ouro.lua",
    "content": "local mod\t= DBM:NewMod(\"Ouro\", \"DBM-AQ40\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15517)\nmod:SetEncounterID(716)\n\nmod:SetModelID(15517)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 26615\",\n\t\"SPELL_CAST_START 26102 26103\",\n\t\"SPELL_CAST_SUCCESS 26058\",\n\t\"UNIT_HEALTH mouseover focus target\"\n)\n\n--Submerge timer is not timer based, it has some kind of hidden condition we do not know. It's not health based either (other than fact the faster you kill boss less likely you are to see it)\n--[[\n(ability.id = 26102 or ability.id = 26103) and type = \"begincast\"\n or ability.id = 26058 and type = \"cast\"\n or ability.id = 26615\n--]]\nlocal warnSubmerge\t\t= mod:NewAnnounce(\"WarnSubmerge\", 3, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendBurrow.blp\")\nlocal warnEmerge\t\t= mod:NewAnnounce(\"WarnEmerge\", 3, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\")\nlocal warnSweep\t\t\t= mod:NewSpellAnnounce(26103, 2, nil, \"Tank\", 3)\nlocal warnBerserk\t\t= mod:NewSpellAnnounce(26615, 3)\nlocal warnBerserkSoon\t= mod:NewSoonAnnounce(26615, 2)\n\nlocal specWarnBlast\t\t= mod:NewSpecialWarningSpell(26102, nil, nil, nil, 2, 2)\n\nlocal timerSubmerge\t\t= mod:NewTimer(184, \"TimerSubmerge\", \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendBurrow.blp\", nil, nil, 6) -- REVIEW! No data\nlocal timerEmerge\t\t= mod:NewTimer(58, \"TimerEmerge\", \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\", nil, nil, 6)\nlocal timerSweepCD\t\t= mod:NewNextTimer(20, 26103, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON) -- (Onyxia: 25N [2024-07-05]@[19:56:12]) - \"Sweep-26103-npc:15517-449 = pull:21.97, 20.05, 20.03, 20.04, 86.38, 20.02, 22.00\"\nlocal timerBlastCD\t\t= mod:NewNextTimer(20, 26102, nil, nil, nil, 2) -- (Onyxia: 25N [2024-07-05]@[19:56:12]) - \"Sand Blast-26102-npc:15517-449 = pull:19.92, 20.05, 20.01, 20.03, 86.42, 19.98, 20.01\"\n\nmod.vb.prewarn_Berserk = false\nmod.vb.Berserked = false\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.prewarn_Berserk = false\n\tself.vb.Berserked = false\n\ttimerSweepCD:Start(22-delay)--22-25\n\ttimerBlastCD:Start(19.92-delay)--20-26\n\ttimerSubmerge:Start(90-delay)\nend\n\nfunction mod:Emerge()\n\twarnEmerge:Show()\n\ttimerSweepCD:Start(23)--23-24 (it might be 22-25 like pull)\n\ttimerBlastCD:Start(24)--24-26 (it might be 20-26 like pull)\n\ttimerSubmerge:Start()\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 26615 and args:IsDestTypeHostile() then\n\t\tself.vb.Berserked = true\n\t\twarnBerserk:Show()\n\t\ttimerSubmerge:Stop()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 26102 then\n\t\tspecWarnBlast:Show()\n\t\tspecWarnBlast:Play(\"stunsoon\")\n\t\ttimerBlastCD:Start()\n\telseif args.spellId == 26103 and args:IsSrcTypeHostile() then\n\t\twarnSweep:Show()\n\t\ttimerSweepCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 26058 and self:AntiSpam(3) and not self.vb.Berserked then\n\t\ttimerBlastCD:Stop()\n\t\ttimerSweepCD:Stop()\n\t\ttimerSubmerge:Stop()\n\t\twarnSubmerge:Show()\n\t\ttimerEmerge:Start()\n\t\tself:ScheduleMethod(58, \"Emerge\")\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif self:GetUnitCreatureId(uId) == 15517 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.23 and not self.vb.prewarn_Berserk then\n\t\tself.vb.prewarn_Berserk = true\n\t\twarnBerserkSoon:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-AQ40/Sartura.lua",
    "content": "local mod\t= DBM:NewMod(\"Sartura\", \"DBM-AQ40\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15516)\nmod:SetEncounterID(711)\n\nmod:SetModelID(15516)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 26083 8269\",\n\t\"UNIT_HEALTH mouseover focus target\"\n)\n\n--Add sundering cleave?\nlocal warnEnrageSoon\t= mod:NewSoonAnnounce(8269, 2)\nlocal warnEnrage\t\t= mod:NewSpellAnnounce(8269, 4)\nlocal warnWhirlwind\t\t= mod:NewSpellAnnounce(26083, 3)\n\nlocal specWarnWhirlwind\t= mod:NewSpecialWarningRun(26083, false, nil, nil, 4, 2)\n\nlocal timerBerserk\t\t= mod:NewBerserkTimer(600)\n\nmod.vb.prewarn_enrage = false\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.prewarn_enrage = false\n\ttimerBerserk:Start(-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 26083 and args:IsSrcTypeHostile() and self:AntiSpam(4, 1) then\n\t\tif self:CheckInterruptFilter(args.sourceGUID, true) and self.Options.SpecWarn26083run then\n\t\t\tspecWarnWhirlwind:Show()\n\t\t\tspecWarnWhirlwind:Play(\"justrun\")\n\t\telse\n\t\t\twarnWhirlwind:Show()\n\t\tend\n\telseif args.spellId == 8269 and args:IsSrcTypeHostile() then\n\t\twarnEnrage:Show()\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif UnitHealth(uId) / UnitHealthMax(uId) <= 0.35 and self:GetUnitCreatureId(uId) == 15516 and not self.vb.prewarn_enrage then\n\t\twarnEnrageSoon:Show()\n\t\tself.vb.prewarn_enrage = true\n\tend\nend\n"
  },
  {
    "path": "DBM-AQ40/Skeram.lua",
    "content": "local mod\t= DBM:NewMod(\"Skeram\", \"DBM-AQ40\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15263)\nmod:SetEncounterID(709)\n\nmod:SetModelID(15263)\nmod:SetUsedIcons(4, 5, 6, 7, 8)\nmod:DisableBossDeathKill()\nmod:SetHotfixNoticeRev(20240716000000)\n\nmod:RegisterCombat(\"combat\")\nmod:RegisterKill(\"yell\", L.YellKillSkeram)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 785\",\n\t\"SPELL_AURA_REMOVED 785\",\n\t\"SPELL_CAST_SUCCESS 20449 4801 8195\",\n\t\"SPELL_SUMMON 747\",\n\t\"UNIT_HEALTH mouseover target\"\n)\n\n--TODO, special warning optimizing?\nlocal warnMindControl\t= mod:NewTargetNoFilterAnnounce(785, 4)\nlocal warnTeleport\t\t= mod:NewSpellAnnounce(20449, 3)\nlocal warnSummon\t\t= mod:NewSpellAnnounce(747, 3)\nlocal warnSummonSoon\t= mod:NewSoonAnnounce(747, 2)\n\nlocal timerMindControl\t= mod:NewBuffActiveTimer(20, 785, nil, nil, nil, 3)\n\nmod:AddSetIconOption(\"SetIconOnMC\", 785, true, false, {4, 5, 6, 7, 8})\n\nlocal MCTargets = {}\nmod.vb.splitCount = 0\nmod.vb.MCIcon = 8\n\nfunction mod:OnCombatStart()\n\tself.vb.splitCount = 0\n\ttable.wipe(MCTargets)\n\tself.vb.MCIcon = 8\nend\n\nlocal function warnMCTargets(self)\n\twarnMindControl:Show(table.concat(MCTargets, \"<, >\"))\n\ttimerMindControl:Start()\n\ttable.wipe(MCTargets)\n\tself.vb.MCIcon = 8\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 785 then\n\t\tMCTargets[#MCTargets + 1] = args.destName\n\t\tself:Unschedule(warnMCTargets)\n\t\tif self.Options.SetIconOnMC then\n\t\t\tself:SetIcon(args.destName, self.vb.MCIcon)\n\t\tend\n\t\tif #MCTargets >= 3 then\n\t\t\twarnMCTargets(self)\n\t\telse\n\t\t\tself:Schedule(0.5, warnMCTargets, self)\n\t\tend\n\t\tself.vb.MCIcon = self.vb.MCIcon - 1\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 785 and self.Options.SetIconOnMC then\n\t\tself:SetIcon(args.destName, 0)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(20449, 4801, 8195) and args:IsSrcTypeHostile() and self:AntiSpam(3, 1) then\n\t\twarnTeleport:Show()\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 747 and self:AntiSpam(3, 2) then\n\t\twarnSummon:Show()\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif self:GetUnitCreatureId(uId) == 15263 then\n\t\tlocal percent = UnitHealth(uId) / UnitHealthMax(uId) * 100\n\t\tif percent <= 81 and percent >= 77 and self.vb.splitCount < 1 then\n\t\t\twarnSummonSoon:Show()\n\t\t\tself.vb.splitCount = 1\n\t\telseif percent <= 56 and percent >= 52 and self.vb.splitCount < 2 then\n\t\t\twarnSummonSoon:Show()\n\t\t\tself.vb.splitCount = 2\n\t\telseif percent <= 31 and percent >= 27 and self.vb.splitCount < 3 then\n\t\t\twarnSummonSoon:Show()\n\t\t\tself.vb.splitCount = 3\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-AQ40/ThreeBugs.lua",
    "content": "local mod\t= DBM:NewMod(\"ThreeBugs\", \"DBM-AQ40\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15544, 15511, 15543)\nmod:SetEncounterID(710)\n\nmod:SetModelID(15544)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 26580 25812\",\n\t\"SPELL_CAST_START 25807\",\n\t\"UNIT_DIED\"\n)\n\nlocal warnFear\t\t\t= mod:NewSpellAnnounce(26580, 2)\nlocal warnToxicVolley\t= mod:NewSpellAnnounce(25812, 2, nil, false)\nlocal warnHeal\t\t\t= mod:NewCastAnnounce(25807, 3)\n\nlocal specWarnHeal\t\t= mod:NewSpecialWarningInterrupt(25807, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnGTFO\t\t= mod:NewSpecialWarningGTFO(25786, nil, nil, nil, 1, 8)\n\n--\"Toxic Volley-25812-npc:15511 = pull:11.8, 13.6, 16.8, 34.1, 14.8, 7.3, 8.3, 12.1, 15.8, 9.7, 19.6, 9.8\", -- [12]\n--If users ask for a toxic volley timer, unless classic is different than retail (which i doubt), 7-34 second variable timer is not acceptable\nlocal timerFearCD\t\t= mod:NewCDTimer(20, 26580, nil, nil, nil, 2) -- (Lordaeron: Timewalking [2024-05-11]@[22:21:34] || Onyxia: 25N [2024-07-05]@[18:18:12]) - \"Fear-26580-npc:15543-192 = pull:12.00\" || \"Fear-26580-npc:15543-193 = pull:11.99, 20.01\"\n\nfunction mod:OnCombatStart(delay)\n\ttimerFearCD:Start(12-delay)\n\tif not self:IsTrivial() then\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"SPELL_AURA_APPLIED 25786 25989\",\n\t\t\t\"SPELL_PERIODIC_DAMAGE 25786 25989\",\n\t\t\t\"SPELL_PERIODIC_MISSED 25786 25989\"\n\t\t)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tself:UnregisterShortTermEvents()\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 26580 and args:IsSrcTypeHostile() and self:AntiSpam(3, 1) then\n\t\twarnFear:Show()\n\t\ttimerFearCD:Start()\n\telseif args.spellId == 25812 then\n\t\twarnToxicVolley:Show()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 25807 and args:IsSrcTypeHostile() then\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnHeal:Show(args.sourceName)\n\t\t\tspecWarnHeal:Play(\"kickcast\")\n\t\telse\n\t\t\twarnHeal:Show()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif (args.spellId == 25786 or args.spellId == 25989) and args:IsPlayer() and self:AntiSpam(3, 2) then\n\t\tspecWarnGTFO:Show(args.spellName)\n\t\tspecWarnGTFO:Play(\"watchfeet\")\n\tend\nend\n\nfunction mod:SPELL_PERIODIC_DAMAGE(_, _, _, destGUID, _, _, spellId, spellName)\n\tif (spellId == 25786 or spellId == 25989) and destGUID == UnitGUID(\"player\") and self:AntiSpam(3, 2) then\n\t\tspecWarnGTFO:Show(spellName)\n\t\tspecWarnGTFO:Play(\"watchfeet\")\n\tend\nend\nmod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 15543 then\n\t\ttimerFearCD:Stop()\n\tend\nend\n"
  },
  {
    "path": "DBM-AQ40/TwinEmps.lua",
    "content": "local mod\t= DBM:NewMod(\"TwinEmpsAQ\", \"DBM-AQ40\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15276, 15275)\nmod:SetEncounterID(715)\n\n--mod:SetModelID(15778)--Renders too close\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 799 800 26613 26607 804\",\n\t\"SPELL_AURA_REMOVED 804\",\n\t\"SPELL_CAST_SUCCESS 802 804\"--26613\n)\n\n--Add warning for classic to actually swap for strike? boss taunt immune though.\nlocal warnStrike\t\t\t= mod:NewTargetNoFilterAnnounce(26613, 3, nil, \"Tank|Healer\", 2)\nlocal warnTeleport\t\t\t= mod:NewSpellAnnounce(800, 3)\nlocal warnMutateBug\t\t\t= mod:NewSpellAnnounce(802, 2, nil, false)\n\nlocal specWarnStrike\t\t= mod:NewSpecialWarningDefensive(26613, nil, nil, nil, 1, 2)\n--local specWarnExplodeBug\t= mod:NewSpecialWarningMove(804, nil, nil, nil, 1, 2)\nlocal specWarnGTFO\t\t\t= mod:NewSpecialWarningGTFO(26607, nil, nil, nil, 8, 2)\n\nlocal timerTeleport\t\t\t= mod:NewCDTimer(30, 800, nil, nil, nil, 6, nil, nil, true, 1, 4)\t-- SAA. No variance on Lordaeron. ~10s variance on Onyxia [30.17-40.23]. Added \"keep\" arg (Lordaeron: Timewalking [2024-05-11]@[22:35:41 ||| Onyxia: 25N [2024-07-05]@[18:51:40] || [2024-07-05]@[19:26:33])- \"Twin Teleport-800-npc:15275-22 = pull:30.38, 30.13, 30.34, 30.20, 30.02, 30.43, 30.33, 30.32, 30.23, 30.28, 30.30, 30.25\" ||| \"Twin Teleport-800-npc:15275-22 = pull:30.17, 30.38, 30.75, 32.40, 40.16, 40.23, 32.55, 32.80\" || \"Twin Teleport-800-npc:15275-22 = pull:30.19, 30.76, 38.16, 39.69, 35.78, 37.14, 34.98\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t-- There is also SPELL_CAST_SUCCESS, which I assume is used internally for event scheduling, but I will keep parity with old code in this case\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t- \"Twin Teleport-800-npc:15276-23 = pull:30.38, 30.13, 30.34, 30.20, 30.02, 30.44, 30.33, 30.32, 30.23, 30.28, 30.30, 30.29\" ||| \"Twin Teleport-800-npc:15276-23 = pull:30.17, 30.38, 30.75, 32.40, 40.16, 40.23, 32.55, 32.80\" || \"Twin Teleport-800-npc:15276-23 = pull:30.19, 30.76, 38.16, 39.69, 35.78, 37.14, 34.98\"\nlocal timerExplodeBugCD\t\t= mod:NewCDTimer(4.9, 804, nil, false, nil, 1)--4.9-9\nlocal timerMutateBugCD\t\t= mod:NewCDTimer(11, 802, nil, false, nil, 1)--11-16\n--local timerStrikeCD\t\t= mod:NewCDTimer(9.7, 26613, nil, \"Tank\", nil, 5, nil, DBM_COMMON_L.TANK_ICON)--9.7-42.6\n\nlocal berserkTimer\t\t\t= mod:NewBerserkTimer(900)\n\n--mod:AddNamePlateOption(\"NPAuraOnMutateBug\", 802)\n\nfunction mod:OnCombatStart(delay)\n\t--timerStrikeCD:Start(14.2-delay)\n\tberserkTimer:Start()\n\ttimerTeleport:Start(-delay)\n\tif self.Options.NPAuraOnMutateBug then\n\t\tDBM:FireEvent(\"BossMod_EnableHostileNameplates\")\n\tend\nend\n\nfunction mod:OnCombatEnd()\n--\tif self.Options.NPAuraOnMutateBug then\n--\t\tDBM.Nameplate:Hide(true, nil, nil, nil, true, true)\n--\tend\nend\n\n--pull:30.6, 35.2, 37.8, 40.1, 36.5, 36.6, 37.7, 31.9, 31.7, 38.8, 32.9, 30.4, 40.2, 30.6, 37.6, 35.4, 32.9, 34.2, 35.3, 36.5, 30.4, 29.2, 34.3, 32.8, 40.0, 35.4, 36.5, 35.3\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(799, 800) and self:AntiSpam(5, 1) then\n\t\twarnTeleport:Show()\n\t\ttimerTeleport:Start()\n\t--elseif args.spellId == 26613 and not self:IsTrivial(80) then\n\telseif args.spellId == 26613 then\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnStrike:Show()\n\t\t\tspecWarnStrike:Play(\"defensive\")\n\t\telse\n\t\t\twarnStrike:Show(args.destName)\n\t\tend\n\telseif args.spellId == 26607 and args:IsPlayer() and args:IsSrcTypeHostile() then\n\t\tspecWarnGTFO:Show(args.spellName)\n\t\tspecWarnGTFO:Play(\"watchfeet\")\n\telseif args.spellId == 804 then\n--\t\tif self.Options.NPAuraOnMutateBug then\n--\t\t\tDBM.Nameplate:Show(true, args.destGUID, 804, 135826, 4)\n--\t\tend\n--\t\tfor i = 1, 40 do\n--\t\t\tlocal GUID = UnitGUID(\"nameplate\"..i)\n--\t\t\tif GUID and GUID == args.destGUID then--Bug is in nameplate range\n--\t\t\t\tspecWarnExplodeBug:Show()\n--\t\t\t\tspecWarnExplodeBug:Play(\"runaway\")\n--\t\t\t\tbreak\n--\t\t\tend\n--\t\tend\n\tend\nend\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 804 then\n--\t\tif self.Options.NPAuraOnMutateBug then\n--\t\t\tDBM.Nameplate:Hide(true, args.destGUID, 804, 135826)\n--\t\tend\n\tend\nend\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 802 then\n\t\twarnMutateBug:Show()\n\t\ttimerMutateBugCD:Start()\n\telseif args.spellId == 804 then\n\t\ttimerExplodeBugCD:Start()\n\t--elseif spellId == 26613 then\n\t\t--timerStrikeCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-AQ40/Viscidus.lua",
    "content": "local mod\t= DBM:NewMod(\"Viscidus\", \"DBM-AQ40\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15299)\nmod:SetEncounterID(713)\n\nmod:SetModelID(15299)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 25991 25896\",\n\t\"SPELL_AURA_APPLIED 25989\",\n\t\"CHAT_MSG_MONSTER_EMOTE\"\n)\n\nlocal warnPoisonBoltVolley\t\t= mod:NewCountAnnounce(25991, 3)\nlocal warnFreeze\t\t\t\t= mod:NewAnnounce(\"WarnFreeze\", 2, 16350)\nlocal warnShatter\t\t\t\t= mod:NewAnnounce(\"WarnShatter\", 2, 12982)\n\nlocal specWarnGTFO\t\t\t\t= mod:NewSpecialWarningGTFO(25989, nil, nil, nil, 1, 8)\n\nlocal timerPoisonBoltVolleyCD\t= mod:NewCDCountTimer(10.13, 25991, nil, nil, nil, 2, nil, DBM_COMMON_L.POISON_ICON, true) -- ~5s variance [10.13-14.98]. Added \"keep\" arg (Onyxia: 25N [2024-07-05]@[18:31:25] || PTR: [2024-07-16]@[22:41:16]) - \"Poison Bolt Volley-25991-npc:15299-610 = pull:13.42, 14.33, 13.24, 13.18, 10.50, 12.49, 10.18, 10.17, 10.46, 11.12, 13.84, 11.87, 13.18, 13.47, 10.61, 13.15, 12.13, 14.30, 13.97, 12.19, 14.32, 13.99, 10.55, 10.72, 13.85, 10.21, 12.42, 10.13, 14.38, 12.72, 12.41, 14.32, 13.27, 13.75, 12.15, 14.29, 13.68, 11.05, 13.90, 10.48, 14.25, 10.92, 14.90, 11.64, 12.02, 12.54, 11.47, 12.89, 14.15, 14.40, 10.78, 10.68, 13.01, 13.17, 14.98, 10.71, 12.79, 11.44\"\n\nmod.vb.volleyCount = 0\n\nfunction mod:OnCombatStart()\n\tself.vb.volleyCount = 0\n\ttimerPoisonBoltVolleyCD:Start(7.78, 1)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 25991 then\n\t\tself.vb.volleyCount = self.vb.volleyCount + 1\n\t\twarnPoisonBoltVolley:Show(self.vb.volleyCount)\n\t\ttimerPoisonBoltVolleyCD:Start(nil, self.vb.volleyCount+1)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 25989 and args:IsPlayer() and self:AntiSpam(3, 2) then\n\t\tspecWarnGTFO:Show(args.spellName)\n\t\tspecWarnGTFO:Play(\"watchfeet\")\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_EMOTE(msg)\n\tif msg == L.Phase4 or msg:find(L.Phase4) then\n\t\tself:SendSync(\"Shatter\", 1)\n\telseif msg == L.Phase5 or msg:find(L.Phase5) then\n\t\tself:SendSync(\"Shatter\", 2)\n\telseif msg == L.Phase6 or msg:find(L.Phase6) then--No longer present in classic?\n\t\tself:SendSync(\"Shatter\", 3)\n\telseif msg == L.Slow or msg:find(L.Slow) then\n\t\tself:SendSync(\"Freeze\", 1)\n\telseif msg == L.Freezing or msg:find(L.Freezing) then\n\t\tself:SendSync(\"Freeze\", 2)\n\telseif msg == L.Frozen or msg:find(L.Frozen) then\n\t\tself:SendSync(\"Freeze\", 3)\n\tend\nend\n\nfunction mod:OnSync(msg, count)\n\tif msg == \"Shatter\" and count then\n\t\tcount = tonumber(count)\n\t\twarnShatter:Show(count)\n\telseif msg == \"Freeze\" and count then\n\t\tcount = tonumber(count)\n\t\twarnFreeze:Show(count)\n\t\tif count == 3 then\n\t\t\ttimerPoisonBoltVolleyCD:Stop()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-AQ40/localization.cn.lua",
    "content": "-- Mini Dragon(projecteurs AT gmail.com) Brilla@金色平原\n-- 枫聖@光芒 & Aoikaze@无畏\n-- Last update: 2020/09/01\n\nif GetLocale() ~= \"zhCN\" then return end\nlocal L\n\n------------\n-- Skeram --\n------------\nL = DBM:GetModLocalization(\"Skeram\")\n\nL:SetGeneralLocalization({\n\tname = \"预言者斯克拉姆\"\n})\n\nL:SetMiscLocalization({\n\tYellKillSkeram = \"你是在逃避必然的命运！\"\n})\n\n----------------\n-- Three Bugs --\n----------------\nL = DBM:GetModLocalization(\"ThreeBugs\")\n\nL:SetGeneralLocalization({\n\tname = \"安其拉三宝\"\n})\n\nL:SetMiscLocalization({\n\tYauj = \"亚尔基公主\",\n\tVem = \"维姆\",\n\tKri = \"克里勋爵\"\n})\n\n-------------\n-- Sartura --\n-------------\nL = DBM:GetModLocalization(\"Sartura\")\n\nL:SetGeneralLocalization({\n\tname = \"沙尔图拉\"\n})\n\n--------------\n-- Fankriss --\n--------------\nL = DBM:GetModLocalization(\"Fankriss\")\n\nL:SetGeneralLocalization({\n\tname = \"顽强的范克瑞斯\"\n})\n\n--------------\n-- Viscidus --\n--------------\nL = DBM:GetModLocalization(\"Viscidus\")\n\nL:SetGeneralLocalization({\n\tname = \"维希度斯\"\n})\n\nL:SetWarningLocalization({\n\tWarnFreeze\t= \"冰冻进度:%d/3\",\n\tWarnShatter\t= \"打碎进度:%d/3\"\n})\n\nL:SetOptionLocalization({\n\tWarnFreeze\t= \"提示冰冻状态\",\n\tWarnShatter\t= \"提示打碎状态\"\n})\n\nL:SetMiscLocalization({\n\tSlow\t = \"的速度慢下来了！\",\n\tFreezing = \"冻结了！\",\n\tFrozen\t = \"变成了坚硬的固体！\",\n\tPhase4\t = \"开始出现裂缝！\",\n\tPhase5\t = \"看起来就要碎裂了！\",\n\t--Phase6   = \"爆炸.\" --Checking the battle video, I didn't find this sentence. this emotion not exists in CN client. --by Aoikaze\n\tHitsRemain\t= \"剩余攻击\",\n\tFrost\t\t= \"冰霜\",\n\tPhysical\t= \"物理\"\n})\n\n-------------\n-- Huhuran --\n-------------\nL = DBM:GetModLocalization(\"Huhuran\")\n\nL:SetGeneralLocalization({\n\tname = \"哈霍兰公主\"\n})\n\n---------------\n-- Twin Emps --\n---------------\nL = DBM:GetModLocalization(\"TwinEmpsAQ\")\n\nL:SetGeneralLocalization({\n\tname = \"双子皇帝\"\n})\n\nL:SetMiscLocalization({\n\tVeklor = \"维克洛尔大帝\",\n\tVeknil = \"维克尼拉斯大帝\"\n})\n\n------------\n-- C'Thun --\n------------\nL = DBM:GetModLocalization(\"CThun\")\n\nL:SetGeneralLocalization({\n\tname = \"克苏恩\"\n})\n\nL:SetWarningLocalization({\n\tWarnEyeTentacle\t\t\t= \"眼球触须\",\n\tWarnClawTentacle2\t\t= \"利爪触须\",\n\tWarnGiantEyeTentacle\t= \"巨眼触须\",\n\tWarnGiantClawTentacle\t= \"巨钩触须\",\n\tSpecWarnWeakened\t\t= \"克苏恩的力量被削弱了！\"\n})\n\nL:SetTimerLocalization({\n\tTimerEyeTentacle\t\t= \"下一次眼球触须\",\n\tTimerClawTentacle\t\t= \"下一次利爪触须\",\n\tTimerGiantEyeTentacle\t= \"下一次巨眼触须\",\n\tTimerGiantClawTentacle\t= \"下一次巨钩触须\",\n\tTimerWeakened\t\t\t= \"虚弱结束\"\n})\n\nL:SetOptionLocalization({\n\tWarnEyeTentacle\t\t\t= \"为眼球触须显示警报\",\n\tWarnClawTentacle2\t\t= \"为利爪触须显示警报\",\n\tWarnGiantEyeTentacle\t= \"为巨眼触须显示警报\",\n\tWarnGiantClawTentacle\t= \"为巨钩触须显示警报\",\n\tWarnWeakened\t\t\t= \"当克苏恩虚弱時显示警报\",\n\tSpecWarnWeakened\t\t= \"当克苏恩虚弱時显示特別警报\",\n\tTimerEyeTentacle\t\t= \"为下一次眼球触须显示计时器\",\n\tTimerClawTentacle\t\t= \"为下一次利爪触须显示计时器\",\n\tTimerGiantEyeTentacle\t= \"为下一次巨眼触须显示计时器\",\n\tTimerGiantClawTentacle\t= \"为下一次巨钩触须显示计时器\",\n\tTimerWeakened\t\t\t= \"为克苏恩虚弱時间显示计时器\",\n\tRangeFrame\t\t\t\t= \"显示距离框架(10码)\"\n})\n\nL:SetMiscLocalization({\n\tStomach\t\t= \"内场\",\n\tEye\t\t\t= \"克苏恩之眼\",\n\tFleshTent\t= \"血肉触须\",--Localized so it shows on frame in users language, not senders\n\tWeakened\t= \"削弱了\",\n\tNotValid\t= \"AQ40 击杀信息： %s 可选Boss未击杀。\"\n})\n\n----------------\n-- Ouro --\n----------------\nL = DBM:GetModLocalization(\"Ouro\")\n\nL:SetGeneralLocalization({\n\tname = \"奥罗\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"钻地\",\n\tWarnEmerge\t\t\t= \"现身\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"强制钻地\",\n\tTimerEmerge\t\t\t= \"现身\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"为钻地显示警报\",\n\tTimerSubmerge\t\t= \"为钻地显示计时器，提示何时强制钻地。注意：如果近战都离开了奥罗近战范围，它随时可能钻地。\",\n\tWarnEmerge\t\t\t= \"为现身显示警报\",\n\tTimerEmerge\t\t\t= \"为现身显示计时器\"\n})\n\n----------------\n-- AQ40 Trash --\n----------------\nL = DBM:GetModLocalization(\"AQ40Trash\")\n\nL:SetGeneralLocalization({\n\tname = \"AQ40：全程计时\"\n})\n"
  },
  {
    "path": "DBM-AQ40/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n------------\n-- Skeram --\n------------\nL = DBM:GetModLocalization(\"Skeram\")\n\nL:SetGeneralLocalization({\n\tname = \"Der Prophet Skeram\"\n})\n\nL:SetMiscLocalization({\n\tYellKillSkeram = \"Ihr zögert das Unvermeidliche nur hinaus!\"\n})\n\n----------------\n-- Three Bugs --\n----------------\nL = DBM:GetModLocalization(\"ThreeBugs\")\n\nL:SetGeneralLocalization({\n\tname = \"Adel der Silithiden\"\n})\n\nL:SetMiscLocalization({\n\tYauj = \"Prinzessin Yauj\",\n\tVem = \"Vem\",\n\tKri = \"Lord Kri\"\n})\n\n-------------\n-- Sartura --\n-------------\nL = DBM:GetModLocalization(\"Sartura\")\n\nL:SetGeneralLocalization({\n\tname = \"Schlachtwache Sartura\"\n})\n\n--------------\n-- Fankriss --\n--------------\nL = DBM:GetModLocalization(\"Fankriss\")\n\nL:SetGeneralLocalization({\n\tname = \"Fankriss der Unnachgiebige\"\n})\n\n--------------\n-- Viscidus --\n--------------\nL = DBM:GetModLocalization(\"Viscidus\")\n\nL:SetGeneralLocalization({\n\tname = \"Viscidus\"\n})\n\nL:SetWarningLocalization({\n\tWarnFreeze\t= \"Eingefroren: %d/3\",\n\tWarnShatter\t= \"Zerspringen: %d/3\"\n})\n\nL:SetOptionLocalization({\n\tWarnFreeze\t= \"Verkünde Eingefroren Status\",\n\tWarnShatter\t= \"Verkünde Zerspringen Status\"\n})\n\nL:SetMiscLocalization({\n\tSlow\t= \"wird langsamer!\",\n\tFreezing= \"friert ein!\",\n\tFrozen\t= \"ist tiefgefroren!\",\n\tPhase4\t= \"geht die Puste aus!\",\n\tPhase5\t= \"ist kurz davor, zu zerspringen!\",\n\tPhase6\t= \"explodiert!\",\n\n\tHitsRemain\t= \"Verbleibende Treffer\",\n\tFrost\t\t= \"Frost\",\n\tPhysical\t= \"Körperlich\"\n})\n\n-------------\n-- Huhuran --\n-------------\nL = DBM:GetModLocalization(\"Huhuran\")\n\nL:SetGeneralLocalization({\n\tname = \"Prinzessin Huhuran\"\n})\n\n---------------\n-- Twin Emps --\n---------------\nL = DBM:GetModLocalization(\"TwinEmpsAQ\")\n\nL:SetGeneralLocalization({\n\tname = \"Zwillingsimperatoren\"\n})\n\nL:SetMiscLocalization({\n\tVeklor = \"Imperator Vek'lor\",\n\tVeknil = \"Imperator Vek'nilash\"\n})\n\n------------\n-- C'Thun --\n------------\nL = DBM:GetModLocalization(\"CThun\")\n\nL:SetGeneralLocalization({\n\tname = \"C'Thun\"\n})\n\nL:SetWarningLocalization({\n\tWarnEyeTentacle\t\t\t= \"Augententakel erscheinen\",\n\tWarnClawTentacle2\t\t= \"Klauententakel erscheinen\",\n\tWarnGiantEyeTentacle\t= \"Riesiges Augententakel erscheinen\",\n\tWarnGiantClawTentacle\t= \"Riesiges Klauententakel erscheinen\",\n\tSpecWarnWeakened\t\t= \"C'Thun ist geschwächt!\"\n})\n\nL:SetTimerLocalization({\n\tTimerEyeTentacle\t\t= \"Nächstes Augententakel\",\n\tTimerClawTentacle\t\t= \"Nächstes Klauententakel\",\n\tTimerGiantEyeTentacle\t= \"Nächstes Riesiges Augententakel\",\n\tTimerGiantClawTentacle\t= \"Nächstes Riesiges Klauententakel\",\n\tTimerWeakened\t\t\t= \"Schwäche endet\"\n})\n\nL:SetOptionLocalization({\n\tWarnEyeTentacle\t\t\t= \"Zeige Warnung, wenn Augententakel erscheinen\",\n\tWarnClawTentacle2\t\t= \"Zeige Warnung, wenn Klauententakel erscheinen\",\n\tWarnGiantEyeTentacle\t= \"Zeige Warnung, wenn Riesiges Augententakel erscheinen\",\n\tWarnGiantClawTentacle\t= \"Zeige Warnung, wenn Riesiges Klauententakel erscheinen\",\n\tSpecWarnWeakened\t\t= \"Spezialwarnung, wenn C'Thun geschwächt ist\",\n\tTimerEyeTentacle\t\t= \"Zeige Zeit bis die nächsten Augententakel erscheinen\",\n\tTimerClawTentacle\t\t= \"Zeige Zeit bis die nächsten Klauententakel erscheinen\",\n\tTimerGiantEyeTentacle\t= \"Zeige Zeit bis die nächsten Riesiges Augententakel erscheinen\",\n\tTimerGiantClawTentacle\t= \"Zeige Zeit bis die nächsten Riesiges Klauententakel erscheinen\",\n\tTimerWeakened\t\t\t= \"Dauer der Schwäche von C'Thun anzeigen\",\n\tRangeFrame\t\t\t\t= \"Zeige Abstandsfenster (10m)\"\n})\n\nL:SetMiscLocalization({\n\tStomach\t\t= \"Magen\",\n\tEye\t\t\t= \"Auge von C'Thun\",\n\tFleshTent\t= \"Fleischtentakel\",\n\tWeakened\t= \"ist geschwächt!\",\n\tNotValid\t= \"AQ40 teilweise gelöscht. % s optionale Bosse bleiben erhalten.\"\n})\n\n----------------\n-- Ouro --\n----------------\nL = DBM:GetModLocalization(\"Ouro\")\n\nL:SetGeneralLocalization({\n\tname = \"Ouro\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"Abtauchen\",\n\tWarnEmerge\t\t\t= \"Auftauchen\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"Abtauchen\",\n\tTimerEmerge\t\t\t= \"Auftauchen\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"Zeige Warnung für Abtauchen\",\n\tTimerSubmerge\t\t= \"Zeige Zeit bis Abtauchen\",\n\tWarnEmerge\t\t\t= \"Zeige Warnung für Auftauchen\",\n\tTimerEmerge\t\t\t= \"Zeige Zeit bis Auftauchen\"\n})\n"
  },
  {
    "path": "DBM-AQ40/localization.en.lua",
    "content": "local L\n\n------------\n-- Skeram --\n------------\nL = DBM:GetModLocalization(\"Skeram\")\n\nL:SetGeneralLocalization({\n\tname = \"The Prophet Skeram\"\n})\n\nL:SetMiscLocalization({\n\tYellKillSkeram = \"You only delay the inevitable!\"\n})\n\n----------------\n-- Three Bugs --\n----------------\nL = DBM:GetModLocalization(\"ThreeBugs\")\n\nL:SetGeneralLocalization({\n\tname = \"Bug Trio\"\n})\n\nL:SetMiscLocalization({\n\tYauj = \"Princess Yauj\",\n\tVem = \"Vem\",\n\tKri = \"Lord Kri\"\n})\n\n-------------\n-- Sartura --\n-------------\nL = DBM:GetModLocalization(\"Sartura\")\n\nL:SetGeneralLocalization({\n\tname = \"Battleguard Sartura\"\n})\n\n--------------\n-- Fankriss --\n--------------\nL = DBM:GetModLocalization(\"Fankriss\")\n\nL:SetGeneralLocalization({\n\tname = \"Fankriss the Unyielding\"\n})\n\n--------------\n-- Viscidus --\n--------------\nL = DBM:GetModLocalization(\"Viscidus\")\n\nL:SetGeneralLocalization({\n\tname = \"Viscidus\"\n})\n\nL:SetWarningLocalization({\n\tWarnFreeze\t= \"Freeze: %d/3\",\n\tWarnShatter\t= \"Shatter: %d/3\"\n})\n\nL:SetOptionLocalization({\n\tWarnFreeze\t= \"Announce Freeze status\",\n\tWarnShatter\t= \"Announce Shatter status\"\n})\n\nL:SetMiscLocalization({\n\tSlow\t= \"begins to slow\",\n\tFreezing= \"is freezing up\",\n\tFrozen\t= \"is frozen solid\",\n\tPhase4\t= \"begins to crack\",\n\tPhase5\t= \"looks ready to shatter\",\n\tPhase6\t= \"Explodes.\",\n\n\tHitsRemain\t= \"Hits Remaining\",\n\tFrost\t\t= \"Frost\",\n\tPhysical\t= \"Physical\"\n})\n\n-------------\n-- Huhuran --\n-------------\nL = DBM:GetModLocalization(\"Huhuran\")\n\nL:SetGeneralLocalization({\n\tname = \"Princess Huhuran\"\n})\n\n---------------\n-- Twin Emps --\n---------------\nL = DBM:GetModLocalization(\"TwinEmpsAQ\")\n\nL:SetGeneralLocalization({\n\tname = \"Twin Emperors\"\n})\n\nL:SetMiscLocalization({\n\tVeklor = \"Emperor Vek'lor\",\n\tVeknil = \"Emperor Vek'nilash\"\n})\n\n------------\n-- C'Thun --\n------------\nL = DBM:GetModLocalization(\"CThun\")\n\nL:SetGeneralLocalization({\n\tname = \"C'Thun\"\n})\n\nL:SetWarningLocalization({\n\tWarnEyeTentacle\t\t\t= \"Eye Tentacle\",\n\tWarnClawTentacle2\t\t= \"Claw Tentacle\",\n\tWarnGiantEyeTentacle\t= \"Giant Eye Tentacle\",\n\tWarnGiantClawTentacle\t= \"Giant Claw Tentacle\",\n\tSpecWarnWeakened\t\t= \"C'Thun Weaken!\"\n})\n\nL:SetTimerLocalization({\n\tTimerEyeTentacle\t\t= \"Eye Tentacle\",\n\tTimerClawTentacle\t\t= \"Claw Tentacle\",\n\tTimerGiantEyeTentacle\t= \"Giant Eye Tentacle\",\n\tTimerGiantClawTentacle\t= \"Giant Claw Tentacle\",\n\tTimerWeakened\t\t\t= \"Weaken ends\"\n})\n\nL:SetOptionLocalization({\n\tWarnEyeTentacle\t\t\t= \"Show warning for Eye Tentacle\",\n\tWarnClawTentacle2\t\t= \"Show warning for Claw Tentacle\",\n\tWarnGiantEyeTentacle\t= \"Show warning for Giant Eye Tentacle\",\n\tWarnGiantClawTentacle\t= \"Show warning for Giant Claw Tentacle\",\n\tSpecWarnWeakened\t\t= \"Show special warning when boss weaken\",\n\tTimerEyeTentacle\t\t= \"Show timer for next Eye Tentacle\",\n\tTimerClawTentacle\t\t= \"Show timer for next Claw Tentacle\",\n\tTimerGiantEyeTentacle\t= \"Show timer for next Giant Eye Tentacle\",\n\tTimerGiantClawTentacle\t= \"Show timer for next Giant Claw Tentacle\",\n\tTimerWeakened\t\t\t= \"Show timer for boss weaken duration\",\n\tRangeFrame\t\t\t\t= \"Show range frame (10)\"\n})\n\nL:SetMiscLocalization({\n\tStomach\t\t= \"Stomach\",\n\tEye\t\t\t= \"Eye of C'Thun\",\n\tFleshTent\t= \"Flesh Tentacle\",--Localized so it shows on frame in users language, not senders\n\tWeakened\t= \"weaken\",\n\tNotValid\t= \"AQ40 partially cleared. %s optional bosses remain.\"\n})\n\n----------------\n-- Ouro --\n----------------\nL = DBM:GetModLocalization(\"Ouro\")\n\nL:SetGeneralLocalization({\n\tname = \"Ouro\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"Submerge\",\n\tWarnEmerge\t\t\t= \"Emerge\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"Forced Submerge\",\n\tTimerEmerge\t\t\t= \"Emerge\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"Show warning for submerge\",\n\tTimerSubmerge\t\t= \"Show timer for when submerge will be forced. Note: He can still submerge at any time what so ever if his target leaves melee range.\",\n\tWarnEmerge\t\t\t= \"Show warning for emerge\",\n\tTimerEmerge\t\t\t= \"Show timer for emerge\"\n})\n\n----------------\n-- AQ40 Trash --\n----------------\nL = DBM:GetModLocalization(\"AQ40Trash\")\n\nL:SetGeneralLocalization({\n\tname = \"AQ40 Trash\"\n})\n"
  },
  {
    "path": "DBM-AQ40/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" then return end\nlocal L\n\n------------\n-- Skeram --\n------------\nL = DBM:GetModLocalization(\"Skeram\")\n\nL:SetGeneralLocalization({\n\tname = \"El profeta Skeram\"\n})\n\nL:SetMiscLocalization({\n\tYellKillSkeram = \"¡Únicamente estáis aplazando lo inevitable!\"\n})\n\n----------------\n-- Three Bugs --\n----------------\nL = DBM:GetModLocalization(\"ThreeBugs\")\n\nL:SetGeneralLocalization({\n\tname = \"Realeza silítida\"\n})\n\nL:SetMiscLocalization({\n\tYauj = \"Princesa Yauj\",\n\tVem = \"Vem\",\n\tKri = \"Lord Kri\"\n})\n\n-------------\n-- Sartura --\n-------------\nL = DBM:GetModLocalization(\"Sartura\")\n\nL:SetGeneralLocalization({\n\tname = \"Guardia de batalla Sartura\"\n})\n\n--------------\n-- Fankriss --\n--------------\nL = DBM:GetModLocalization(\"Fankriss\")\n\nL:SetGeneralLocalization({\n\tname = \"Fankriss el Implacable\"\n})\n\n--------------\n-- Viscidus --\n--------------\nL = DBM:GetModLocalization(\"Viscidus\")\n\nL:SetGeneralLocalization({\n\tname = \"Viscidus\"\n})\n\nL:SetWarningLocalization({\n\tWarnFreeze\t= \"Congelación: %d/3\",\n\tWarnShatter\t= \"Hacerse añicos: %d/3\"\n})\n\nL:SetOptionLocalization({\n\tWarnFreeze\t= \"Anunciar congelación\",\n\tWarnShatter\t= \"Anunciar hacerse añicos\"\n})\n\nL:SetMiscLocalization({\n\tSlow\t= \"comienza a remitir!\",\n\tFreezing= \"se queda inmóvil!\",\n\tFrozen\t= \"está paralizada!\",\n\tPhase4\t= \"empieza a desmoronarse!\",\n\tPhase5\t= \"parece a punto de hacerse añicos!\",\n\tPhase6\t= \"explota!\",\n\n\tHitsRemain\t= \"Golpes restantes\",\n\tFrost\t\t= \"Escarcha\",\n\tPhysical\t= \"Daño físico\"\n})\n\n-------------\n-- Huhuran --\n-------------\nL = DBM:GetModLocalization(\"Huhuran\")\n\nL:SetGeneralLocalization({\n\tname = \"Princesa Huhuran\"\n})\n\n---------------\n-- Twin Emps --\n---------------\nL = DBM:GetModLocalization(\"TwinEmpsAQ\")\n\nL:SetGeneralLocalization({\n\tname = \"Los Emperadores Gemelos\"\n})\n\nL:SetMiscLocalization({\n\tVeklor = \"Emperador Vek'lor\",\n\tVeknil = \"Emperador Vek'nilash\"\n})\n\n------------\n-- C'Thun --\n------------\nL = DBM:GetModLocalization(\"CThun\")\n\nL:SetGeneralLocalization({\n\tname = \"C'Thun\"\n})\n\nL:SetWarningLocalization({\n\tWarnEyeTentacle\t\t\t= \"Tentáculo ocular\",\n\tWarnClawTentacle2\t\t= \"Tentáculo Garral\",\n\tWarnGiantEyeTentacle\t= \"Tentáculo ocular gigante\",\n\tWarnGiantClawTentacle\t= \"Tentáculo garral gigante\",\n\tSpecWarnWeakened\t\t= \"¡C'Thun está débil!\"\n})\n\nL:SetTimerLocalization({\n\tTimerEyeTentacle\t\t= \"Siguiente Tentáculo ocular\",\n\tTimerClawTentacle\t\t= \"Siguiente Tentáculo Garral\",\n\tTimerGiantEyeTentacle\t= \"Siguiente Tentáculo ocular gigante\",\n\tTimerGiantClawTentacle\t= \"Siguiente Tentáculo garral gigante\",\n\tTimerWeakened\t\t\t= \"Debilidad termina\"\n})\n\nL:SetOptionLocalization({\n\tWarnEyeTentacle\t\t\t= \"Mostrar aviso cuando aparezca un Tentáculo ocular\",\n\tWarnClawTentacle2\t\t= \"Mostrar aviso cuando aparezca un Tentáculo Garral\",\n\tWarnGiantEyeTentacle\t= \"Mostrar aviso cuando aparezca un Tentáculo ocular gigante\",\n\tWarnGiantClawTentacle\t= \"Mostrar aviso cuando aparezca un Tentáculo garral gigante\",\n\tWarnWeakened\t\t\t= \"Mostrar aviso cuando C'Thun se vuelva débil\",\n\tSpecWarnWeakened\t\t= \"Mostrar aviso especial cuando C'Thun se vuelva débil\",\n\tTimerEyeTentacle\t\t= \"Mostrar temporizador para el siguiente Tentáculo ocular\",\n\tTimerClawTentacle\t\t= \"Mostrar temporizador para el siguiente Tentáculo Garral\",\n\tTimerGiantEyeTentacle\t= \"Mostrar temporizador para el siguiente Tentáculo ocular gigante\",\n\tTimerGiantClawTentacle\t= \"Mostrar temporizador para el siguiente Tentáculo garral gigante\",\n\tTimerWeakened\t\t\t= \"Mostrar temporizador para la duración de la debilidad de C'Thun\",\n\tRangeFrame\t\t\t\t= \"Mostrar marco de distancia (10 m)\"\n})\n\nL:SetMiscLocalization({\n\tStomach\t\t= \"Estómago\",\n\tEye\t\t\t= \"Ojo de C'Thun\",\n\tFleshTent\t= \"Tentáculo de carne\",\n\tWeakened\t= \"está débil!\",\n\tNotValid\t= \"AQ40 parcialmente limpiado. Quedan %s jefes opcionales.\"\n})\n\n----------------\n-- Ouro --\n----------------\nL = DBM:GetModLocalization(\"Ouro\")\n\nL:SetGeneralLocalization({\n\tname = \"Ouro\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"Ouro se sumerge\",\n\tWarnEmerge\t\t\t= \"Ouro regresa\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"Sumersión\",\n\tTimerEmerge\t\t\t= \"Emersión\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"Mostrar aviso cuando Ouro se sumerja\",\n\tTimerSubmerge\t\t= \"Mostrar temporizador para cuando Ouro se sumerja\",\n\tWarnEmerge\t\t\t= \"Mostrar aviso cuando Ouro regrese a la superficie\",\n\tTimerEmerge\t\t\t= \"Mostrar temporizador para cuando Ouro regrese a la superficie\"\n})\n\n----------------\n-- AQ40 Trash --\n----------------\nL = DBM:GetModLocalization(\"AQ40Trash\")\n\nL:SetGeneralLocalization({\n\tname = \"AQ40: Bichos\"\n})\n"
  },
  {
    "path": "DBM-AQ40/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\nlocal L\n\n------------\n-- Skeram --\n------------\nL = DBM:GetModLocalization(\"Skeram\")\n\nL:SetGeneralLocalization({\n\tname = \"Le Prophète Skeram\"\n})\n\nL:SetMiscLocalization({\n\tYellKillSkeram = \"Vous ne faites que retarder l’inévitable !\"\n})\n\n----------------\n-- Three Bugs --\n----------------\nL = DBM:GetModLocalization(\"ThreeBugs\")\n\nL:SetGeneralLocalization({\n\tname = \"Trio d'insectes\"\n})\n\nL:SetMiscLocalization({\n\tYauj = \"Princesse Yauj\",\n\tVem = \"Vem\",\n\tKri = \"Seigneur Kri\"\n})\n\n-------------\n-- Sartura --\n-------------\nL = DBM:GetModLocalization(\"Sartura\")\n\nL:SetGeneralLocalization({\n\tname = \"Garde de guerre Sartura\"\n})\n\n--------------\n-- Fankriss --\n--------------\nL = DBM:GetModLocalization(\"Fankriss\")\n\nL:SetGeneralLocalization({\n\tname = \"Fankriss l'Inflexible\"\n})\n\n--------------\n-- Viscidus --\n--------------\nL = DBM:GetModLocalization(\"Viscidus\")\n\nL:SetGeneralLocalization({\n\tname = \"Viscidus\"\n})\n\nL:SetWarningLocalization({\n\tWarnFreeze\t= \"Gel : %d/3\",\n\tWarnShatter\t= \"Briser : %d/3\"\n})\n\nL:SetOptionLocalization({\n\tWarnFreeze\t= \"Annoncer l'état de Gel\",\n\tWarnShatter\t= \"Annoncer l'état de Briser\"\n})\n\nL:SetMiscLocalization({\n\tSlow\t= \"commence à ralentir !\",\n\tFreezing= \"est gelé !\",\n\tFrozen\t= \"est congelé !\",\n\tPhase4\t= \"commence à se briser !\",\n\tPhase5\t= \"semble prêt à se briser !\",\n\tPhase6\t= \"explose !\",\n\n\tHitsRemain\t= \"Touche restante\",\n\tFrost\t\t= \"Givre\",\n\tPhysical\t= \"Physique\"\n})\n\n-------------\n-- Huhuran --\n-------------\nL = DBM:GetModLocalization(\"Huhuran\")\n\nL:SetGeneralLocalization({\n\tname = \"Princesse Huhuran\"\n})\n\n---------------\n-- Twin Emps --\n---------------\nL = DBM:GetModLocalization(\"TwinEmpsAQ\")\n\nL:SetGeneralLocalization({\n\tname = \"Empereurs Jumeaux\"\n})\n\nL:SetMiscLocalization({\n\tVeklor = \"Empereur Vek'lor\",\n\tVeknil = \"Empereur Vek'nilash\"\n})\n\n------------\n-- C'Thun --\n------------\nL = DBM:GetModLocalization(\"CThun\")\n\nL:SetGeneralLocalization({\n\tname = \"C'Thun\"\n})\n\nL:SetWarningLocalization({\n\tWarnEyeTentacle\t\t\t= \"Tentacule oculaire\",\n\tWarnClawTentacle2\t\t= \"Tentacule griffu\",\n\tWarnGiantEyeTentacle\t= \"Tentacule oculaire géant\",\n\tWarnGiantClawTentacle\t= \"Tentacule griffu géant\",\n\tSpecWarnWeakened\t\t= \"C'Thun est affaibli !\"\n})\n\nL:SetTimerLocalization({\n\tTimerEyeTentacle\t\t= \"Prochain Tentacule oculaire\",\n\tTimerClawTentacle\t\t= \"Prochain Tentacule griffu\",\n\tTimerGiantEyeTentacle\t= \"Prochain Tentacule oculaire géant\",\n\tTimerGiantClawTentacle\t= \"Prochain Tentacule griffu géant\",\n\tTimerWeakened\t\t\t= \"Faiblesse terminé\"\n})\n\nL:SetOptionLocalization({\n\tWarnEyeTentacle\t\t\t= \"Afficher l'avertissement pour Tentacule oculaire\",\n\tWarnClawTentacle2\t\t= \"Afficher l'avertissement pour Tentacule griffu\",\n\tWarnGiantEyeTentacle\t= \"Afficher l'avertissement pour Tentacule oculaire géant\",\n\tWarnGiantClawTentacle\t= \"Afficher l'avertissement pour Tentacule griffu géant\",\n\tSpecWarnWeakened\t\t= \"Afficher un avertissement spécial lorsque le boss s'affaiblit\",\n\tTimerEyeTentacle\t\t= \"Afficher le timer pour le prochain Tentacule oculaire\",\n\tTimerClawTentacle\t\t= \"Afficher le timer pour le prochain Tentacule griffu\",\n\tTimerGiantEyeTentacle\t= \"Afficher le timer pour le prochain Tentacule oculaire géant\",\n\tTimerGiantClawTentacle\t= \"Afficher le timer pour le prochain Tentacule griffu géant\",\n\tTimerWeakened\t\t\t= \"Afficher le timer pour la durée d'affaiblissement du boss\",\n\tRangeFrame\t\t\t\t= \"Afficher le cadre de portée (10 m)\"\n})\n\nL:SetMiscLocalization({\n\tStomach\t\t= \"Estomac\",\n\tEye\t\t\t= \"Oeil de C'Thun\",\n\tFleshTent\t= \"Tentacule de chair\",\n\tWeakened\t= \"est affaibli !\",\n\tNotValid\t= \"AQ40 partiellement effacé. %s bosses optionnels restent.\"\n})\n\n----------------\n-- Ouro --\n----------------\nL = DBM:GetModLocalization(\"Ouro\")\n\nL:SetGeneralLocalization({\n\tname = \"Ouro\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"Submerger\",\n\tWarnEmerge\t\t\t= \"Émerger\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"Submerger\",\n\tTimerEmerge\t\t\t= \"Émerger\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"Afficher l'avertissement pour submerger\",\n\tTimerSubmerge\t\t= \"Afficher le timer pour submerger\",\n\tWarnEmerge\t\t\t= \"Afficher l'avertissement pour émerger\",\n\tTimerEmerge\t\t\t= \"Afficher le timer pour émerger\"\n})\n\n----------------\n-- AQ40 Trash --\n----------------\nL = DBM:GetModLocalization(\"AQ40Trash\")\n\nL:SetGeneralLocalization({\n\tname = \"AQ40: Ennemis communs\"\n})\n"
  },
  {
    "path": "DBM-AQ40/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n------------\n-- Skeram --\n------------\nL = DBM:GetModLocalization(\"Skeram\")\n\nL:SetGeneralLocalization({\n\tname = \"예언자 스케람\"\n})\n\nL:SetMiscLocalization({\n\tYellKillSkeram = \"이런다고 피할 수는 없다!\"\n})\n\n----------------\n-- Three Bugs --\n----------------\nL = DBM:GetModLocalization(\"ThreeBugs\")\n\nL:SetGeneralLocalization({\n\tname = \"벌레 3형제\"\n})\n\nL:SetMiscLocalization({\n\tYauj\t= \"공주 야우즈\",\n\tVem\t= \"벰\",\n\tKri\t= \"군주 크리\"\n})\n\n-------------\n-- Sartura --\n-------------\nL = DBM:GetModLocalization(\"Sartura\")\n\nL:SetGeneralLocalization({\n\tname = \"전투감시병 살투라\"\n})\n\n--------------\n-- Fankriss --\n--------------\nL = DBM:GetModLocalization(\"Fankriss\")\n\nL:SetGeneralLocalization({\n\tname = \"불굴의 판크리스\"\n})\n\n--------------\n-- Viscidus --\n--------------\nL = DBM:GetModLocalization(\"Viscidus\")\n\nL:SetGeneralLocalization({\n\tname = \"비시디우스\"\n})\n\nL:SetWarningLocalization({\n\tWarnFreeze\t= \"빙결 : %d/3\",\n\tWarnShatter\t= \"분해 : %d/3\"\n})\n\nL:SetOptionLocalization({\n\tWarnFreeze\t= \"빙결 알림 보기\",\n\tWarnShatter\t= \"분해 알림 보기\"\n})\n\nL:SetMiscLocalization({\n\tSlow\t= \"느려지기 시작했습니다!\",\n\tFreezing= \"얼어붙고 있습니다!\",\n\tFrozen\t= \"단단하게 얼었습니다!\",\n\tPhase4\t= \"분해되기 시작합니다!\",\n\tPhase5\t= \"부서질 것 같습니다!\",\n\tPhase6\t= \"폭발\",\n\n\tHitsRemain\t= \"냉기 타격 남은 횟수\",\n\tFrost\t\t= \"냉기\",\n\tPhysical\t= \"물리\"\n})\n\n-------------\n-- Huhuran --\n-------------\nL = DBM:GetModLocalization(\"Huhuran\")\n\nL:SetGeneralLocalization({\n\tname = \"공주 후후란\"\n})\n\n---------------\n-- Twin Emps --\n---------------\nL = DBM:GetModLocalization(\"TwinEmpsAQ\")\n\nL:SetGeneralLocalization({\n\tname = \"쌍둥이 제왕\"\n})\n\nL:SetMiscLocalization({\n\tVeklor = \"제왕 베클로어\",\n\tVeknil = \"제왕 베크닐라쉬\"\n})\n\n------------\n-- C'Thun --\n------------\nL = DBM:GetModLocalization(\"CThun\")\n\nL:SetGeneralLocalization({\n\tname = \"쑨\"\n})\n\nL:SetWarningLocalization({\n\tWarnEyeTentacle\t\t\t= \"눈 달린 촉수\",\n\tWarnClawTentacle2\t\t= \"갈고리 촉수\",\n\tWarnGiantEyeTentacle\t\t= \"눈 달린 거대한 촉수\",\n\tWarnGiantClawTentacle\t\t= \"거대한 발톱 촉수\",\n\tSpecWarnWeakened\t\t= \"쑨 약화됨!\"\n})\n\nL:SetTimerLocalization({\n\tTimerEyeTentacle\t\t= \"눈 달린 촉수\",\n\tTimerClawTentacle\t\t= \"갈고리 촉수\",\n\tTimerGiantEyeTentacle\t\t= \"눈 달린 거대한 촉수\",\n\tTimerGiantClawTentacle\t\t= \"거대한 발톱 촉수\",\n\tTimerWeakened\t\t\t= \"쑨 약화 종료\"\n})\n\nL:SetOptionLocalization({\n\tWarnEyeTentacle\t\t\t= \"눈 달린 촉수 경고 보기\",\n\tWarnClawTentacle2\t\t= \"갈고리 촉수 경고 보기\",\n\tWarnGiantEyeTentacle\t\t= \"눈 달린 거대한 촉수 경고 보기\",\n\tWarnGiantClawTentacle\t\t= \"거대한 발톱 촉수 경고 보기\",\n\tSpecWarnWeakened\t\t= \"보스 약화시 특수 경고 보기\",\n\tTimerEyeTentacle\t\t= \"다음 눈 달린 촉수 타이머 바 보기\",\n\tTimerClawTentacle\t\t= \"다음 갈고리 촉수 타이머 바 보기\",\n\tTimerGiantEyeTentacle\t\t= \"다음 눈 달린 거대한 촉수 타이머 바 보기\",\n\tTimerGiantClawTentacle\t\t= \"다음 거대한 발톱 촉수 타이머 바 보기\",\n\tTimerWeakened\t\t\t= \"보스 약화 지속시간 타이머 바 보기\",\n\tRangeFrame\t\t\t\t= \"거리 창 보기 (10m)\"\n})\n\nL:SetMiscLocalization({\n\tStomach\t\t= \"뱃속\",\n\tEye\t\t\t= \"쑨의 눈\",\n\tFleshTent\t= \"식인 촉수\",--Localized so it shows on frame in users language, not senders\n\tWeakened\t= \"약해집니다!\",\n\tNotValid\t= \"안퀴40 레이드를 일부만 클리어 했습니다. 부차적인 네임드가 %s마리 남아있습니다.\"\n})\n\n----------------\n-- Ouro --\n----------------\nL = DBM:GetModLocalization(\"Ouro\")\n\nL:SetGeneralLocalization({\n\tname = \"아우로\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"잠수\",\n\tWarnEmerge\t\t\t= \"등장\",\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"강제 잠수\",\n\tTimerEmerge\t\t\t= \"등장\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"잠수 경고 보기\",\n\tTimerSubmerge\t\t= \"잠수가 강제로 될 때 타이머 바를 표시합니다. 알림: 아우로는 현재 대상이 평타 사거리에 있더라도 여전히 아무때나 잠수를 할 수 있습니다.\",\n\tWarnEmerge\t\t\t= \"등장 경고 보기\",\n\tTimerEmerge\t\t\t= \"등장 타이머 바 보기\"\n})\n\n----------------\n-- AQ40 Trash --\n----------------\nL = DBM:GetModLocalization(\"AQ40Trash\")\n\nL:SetGeneralLocalization({\n\tname = \"안퀴40 일반몹\"\n})\n"
  },
  {
    "path": "DBM-AQ40/localization.mx.lua",
    "content": "if GetLocale() ~= \"esMX\" then return end\nlocal L\n\n------------\n-- Skeram --\n------------\nL = DBM:GetModLocalization(\"Skeram\")\n\nL:SetGeneralLocalization({\n\tname = \"El profeta Skeram\"\n})\n\nL:SetMiscLocalization({\n\tYellKillSkeram = \"¡Únicamente retrasan lo inevitable!\"\n})\n\n----------------\n-- Three Bugs --\n----------------\nL = DBM:GetModLocalization(\"ThreeBugs\")\n\nL:SetGeneralLocalization({\n\tname = \"Realeza silítida\"\n})\n\nL:SetMiscLocalization({\n\tYauj = \"Princesa Yauj\",\n\tVem = \"Vem\",\n\tKri = \"Lord Kri\"\n})\n\n-------------\n-- Sartura --\n-------------\nL = DBM:GetModLocalization(\"Sartura\")\n\nL:SetGeneralLocalization({\n\tname = \"Guardia de batalla Sartura\"\n})\n\n--------------\n-- Fankriss --\n--------------\nL = DBM:GetModLocalization(\"Fankriss\")\n\nL:SetGeneralLocalization({\n\tname = \"Fankriss el Implacable\"\n})\n\n--------------\n-- Viscidus --\n--------------\nL = DBM:GetModLocalization(\"Viscidus\")\n\nL:SetGeneralLocalization({\n\tname = \"Viscidus\"\n})\n\nL:SetWarningLocalization({\n\tWarnFreeze\t= \"Congelación: %d/3\",\n\tWarnShatter\t= \"Hacerse añicos: %d/3\"\n})\n\nL:SetOptionLocalization({\n\tWarnFreeze\t= \"Anunciar congelación\",\n\tWarnShatter\t= \"Anunciar hacerse añicos\"\n})\n\nL:SetMiscLocalization({\n\tSlow\t= \"comienza a ir más despacio!\",\n\tFreezing= \"se está congelando!\",\n\tFrozen\t= \"no se puede mover!\",\n\tPhase4\t= \"comienza a desmoronarse!\",\n\tPhase5\t= \"parece a punto de hacerse añicos!\",\n\tPhase6\t= \"explota!\",\n\n\tHitsRemain\t= \"Golpes restantes\",\n\tFrost\t\t= \"Escarcha\",\n\tPhysical\t= \"Daño físico\"\n})\n\n-------------\n-- Huhuran --\n-------------\nL = DBM:GetModLocalization(\"Huhuran\")\n\nL:SetGeneralLocalization({\n\tname = \"Princesa Huhuran\"\n})\n\n---------------\n-- Twin Emps --\n---------------\nL = DBM:GetModLocalization(\"TwinEmpsAQ\")\n\nL:SetGeneralLocalization({\n\tname = \"Los Emperadores Gemelos\"\n})\n\nL:SetMiscLocalization({\n\tVeklor = \"Emperador Vek'lor\",\n\tVeknil = \"Emperador Vek'nilash\"\n})\n\n------------\n-- C'Thun --\n------------\nL = DBM:GetModLocalization(\"CThun\")\n\nL:SetGeneralLocalization({\n\tname = \"C'Thun\"\n})\n\nL:SetWarningLocalization({\n\tWarnEyeTentacle\t\t\t= \"Tentáculo ocular\",\n\tWarnClawTentacle2\t\t= \"Tentáculo Garral\",\n\tWarnGiantEyeTentacle\t= \"Tentáculo ocular gigante\",\n\tWarnGiantClawTentacle\t= \"Tentáculo garral gigante\",\n\tSpecWarnWeakened\t\t= \"¡C'Thun está débil!\"\n})\n\nL:SetTimerLocalization({\n\tTimerEyeTentacle\t\t= \"Siguiente Tentáculo ocular\",\n\tTimerClawTentacle\t\t= \"Siguiente Tentáculo Garral\",\n\tTimerGiantEyeTentacle\t= \"Siguiente Tentáculo ocular gigante\",\n\tTimerGiantClawTentacle\t= \"Siguiente Tentáculo garral gigante\",\n\tTimerWeakened\t\t\t= \"Debilidad termina\"\n})\n\nL:SetOptionLocalization({\n\tWarnEyeTentacle\t\t\t= \"Mostrar aviso cuando aparezca un Tentáculo ocular\",\n\tWarnClawTentacle2\t\t= \"Mostrar aviso cuando aparezca un Tentáculo Garral\",\n\tWarnGiantEyeTentacle\t= \"Mostrar aviso cuando aparezca un Tentáculo ocular gigante\",\n\tWarnGiantClawTentacle\t= \"Mostrar aviso cuando aparezca un Tentáculo garral gigante\",\n\tWarnWeakened\t\t\t= \"Mostrar aviso cuando C'Thun se vuelva débil\",\n\tSpecWarnWeakened\t\t= \"Mostrar aviso especial cuando C'Thun se vuelva débil\",\n\tTimerEyeTentacle\t\t= \"Mostrar temporizador para el siguiente Tentáculo ocular\",\n\tTimerClawTentacle\t\t= \"Mostrar temporizador para el siguiente Tentáculo Garral\",\n\tTimerGiantEyeTentacle\t= \"Mostrar temporizador para el siguiente Tentáculo ocular gigante\",\n\tTimerGiantClawTentacle\t= \"Mostrar temporizador para el siguiente Tentáculo garral gigante\",\n\tTimerWeakened\t\t\t= \"Mostrar temporizador para la duración de la debilidad de C'Thun\",\n\tRangeFrame\t\t\t\t= \"Mostrar marco de distancia (10 m)\"\n})\n\nL:SetMiscLocalization({\n\tStomach\t\t= \"Estómago\",\n\tEye\t\t\t= \"Ojo de C'Thun\",\n\tFleshTent\t= \"Tentáculo de carne\",\n\tWeakened\t= \"está débil!\",\n\tNotValid\t= \"AQ40 parcialmente limpiado. Quedan %s jefes opcionales.\"\n})\n\n----------------\n-- Ouro --\n----------------\nL = DBM:GetModLocalization(\"Ouro\")\n\nL:SetGeneralLocalization({\n\tname = \"Ouro\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"Ouro se sumerge\",\n\tWarnEmerge\t\t\t= \"Ouro regresa\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"Sumersión\",\n\tTimerEmerge\t\t\t= \"Emersión\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"Mostrar aviso cuando Ouro se sumerja\",\n\tTimerSubmerge\t\t= \"Mostrar temporizador para cuando Ouro se sumerja\",\n\tWarnEmerge\t\t\t= \"Mostrar aviso cuando Ouro regrese a la superficie\",\n\tTimerEmerge\t\t\t= \"Mostrar temporizador para cuando Ouro regrese a la superficie\"\n})\n\n----------------\n-- AQ40 Trash --\n----------------\nL = DBM:GetModLocalization(\"AQ40Trash\")\n\nL:SetGeneralLocalization({\n\tname = \"AQ40: Bichos\"\n})\n"
  },
  {
    "path": "DBM-AQ40/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n------------\n-- Skeram --\n------------\nL = DBM:GetModLocalization(\"Skeram\")\n\nL:SetGeneralLocalization({\n\tname = \"Пророк Скерам\"\n})\n\nL:SetMiscLocalization({\n\tYellKillSkeram = \"Вы лишь откладываете неизбежное!\"\n})\n\n----------------\n-- Three Bugs --\n----------------\nL = DBM:GetModLocalization(\"ThreeBugs\")\n\nL:SetGeneralLocalization({\n\tname = \"Семейство жуков\"\n})\n\nL:SetMiscLocalization({\n\tYauj = \"Принцесса Яудж\",\n\tVem = \"Вем\",\n\tKri = \"Лорд Кри\"\n})\n\n-------------\n-- Sartura --\n-------------\nL = DBM:GetModLocalization(\"Sartura\")\n\nL:SetGeneralLocalization({\n\tname = \"Боевой страж Сартура\"\n})\n\n--------------\n-- Fankriss --\n--------------\nL = DBM:GetModLocalization(\"Fankriss\")\n\nL:SetGeneralLocalization({\n\tname = \"Фанкрисс Непреклонный\"\n})\n\n--------------\n-- Viscidus --\n--------------\nL = DBM:GetModLocalization(\"Viscidus\")\n\nL:SetGeneralLocalization({\n\tname = \"Нечистотон\"\n})\n\nL:SetWarningLocalization({\n\tWarnFreeze\t= \"Заморожен: %d/3\",\n\tWarnShatter\t= \"Расколот: %d/3\"\n})\n\nL:SetOptionLocalization({\n\tWarnFreeze\t= \"Объявлять статус Заморозки\",\n\tWarnShatter\t= \"Объявлять статус Раскола\"\n})\n\nL:SetMiscLocalization({\n\tSlow\t\t= \"замедляется!\",\n\tFreezing\t= \"замораживается!\",\n\tFrozen\t\t= \"застывает!\",\n\tPhase4\t\t= \"начинает раскалываться!\",\n\tPhase5\t\t= \"едва держится!\",\n\tPhase6\t\t= \"взрывается!\",\n\n\tHitsRemain\t= \"Ударов Осталось\",\n\tFrost\t\t= \"Лёд\",\n\tPhysical\t= \"Физический урон\"\n})\n\n-------------\n-- Huhuran --\n-------------\nL = DBM:GetModLocalization(\"Huhuran\")\n\nL:SetGeneralLocalization({\n\tname = \"Принцесса Хухуран\"\n})\n\n---------------\n-- Twin Emps --\n---------------\nL = DBM:GetModLocalization(\"TwinEmpsAQ\")\n\nL:SetGeneralLocalization({\n\tname = \"Императоры-близнецы\"\n})\n\nL:SetMiscLocalization({\n\tVeklor = \"Император Век'лор\",\n\tVeknil = \"Император Век'нилаш\"\n})\n\n------------\n-- C'Thun --\n------------\nL = DBM:GetModLocalization(\"CThun\")\n\nL:SetGeneralLocalization({\n\tname = \"К'Тун\"\n})\n\nL:SetWarningLocalization({\n\tWarnEyeTentacle\t= \"Глазной отросток\",\n\tWarnClawTentacle2\t= \"Когтещупальце\",\n\tWarnGiantEyeTentacle\t= \"Огромное глазастое щупальце\",\n\tWarnGiantClawTentacle\t= \"Гигантский когтещуп\",\n\tWarnWeakened\t\t= \"К'Тун ослаблен!\"\n})\n\nL:SetTimerLocalization({\n\tTimerEyeTentacle\t= \"Глазной отросток\",\n\tTimerGiantEyeTentacle\t= \"Огромное глазастое щупальце\",\n\tTimerClawTentacle\t= \"Когтещупальце\",\n\tTimerGiantClawTentacle\t= \"Гигантский когтещуп\",\n\tTimerWeakened\t\t= \"Ослаблен закончен\"\n})\n\nL:SetOptionLocalization({\n\tWarnEyeTentacle\t\t\t= \"Показывать предупреждение для Глазного отростка\",\n\tWarnClawTentacle2\t\t= \"Показывать предупреждение для Когтещупальца\",\n\tWarnGiantEyeTentacle\t= \"Показывать предупреждение для Огромного глазастого щупальца\",\n\tWarnGiantClawTentacle\t= \"Показывать предупреждение для Гигантского когтещупа\",\n\tSpecWarnWeakened\t\t= \"Показывать специальное предупреждение, когда босс ослаблен\",\n\tTimerEyeTentacle\t\t= \"Показывать таймер до следующего Глазного отростка\",\n\tTimerClawTentacle\t\t= \"Показывать таймер до следующего Когтещупальца\",\n\tTimerGiantEyeTentacle\t= \"Показывать таймер до следующего Огромного глазастого щупальца\",\n\tTimerGiantClawTentacle\t= \"Показывать таймер до следующего Гигантского когтещупа\",\n\tTimerWeakened\t\t\t= \"Показывать таймер продолжительности ослабления босса\",\n\tRangeFrame\t\t\t\t= \"Показывать индикатор расстояния (10)\"\n})\n\nL:SetMiscLocalization({\n\tStomach\t\t= \"Живот\",\n\tEye\t\t\t= \"Око К'Туна\",\n\tFleshTent\t= \"Мясистое щупальце\",--Localized so it shows on frame in users language, not senders\n\tWeakened\t= \"ослаблен!\",\n\tNotValid\t= \"АК40 частично зачищен. %s необязательные боссы остались.\"\n})\n\n----------------\n-- Ouro --\n----------------\nL = DBM:GetModLocalization(\"Ouro\")\n\nL:SetGeneralLocalization({\n\tname = \"Оуро\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"Закапывание\",\n\tWarnEmerge\t\t\t= \"Появление\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"Закапывание\",\n\tTimerEmerge\t\t\t= \"Появление\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"Показывать предупреждение о закапывании\",\n\tTimerSubmerge\t\t= \"Показывать таймер до закапывания\",\n\tWarnEmerge\t\t\t= \"Показывать предупреждение о появлении\",\n\tTimerEmerge\t\t\t= \"Показывать таймер до появления\"\n})\n\n----------------\n-- AQ40 Trash --\n----------------\nL = DBM:GetModLocalization(\"AQ40Trash\")\n\nL:SetGeneralLocalization({\n\tname = \"АК40: Треш\"\n})\n"
  },
  {
    "path": "DBM-AQ40/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n------------\n-- Skeram --\n------------\nL = DBM:GetModLocalization(\"Skeram\")\n\nL:SetGeneralLocalization({\n\tname = \"預言者斯克拉姆\"\n})\n\nL:SetMiscLocalization({\n\tYellKillSkeram = \"你只不過在延後遲早會發生的事情罷了!\"\n})\n\n----------------\n-- Three Bugs --\n----------------\nL = DBM:GetModLocalization(\"ThreeBugs\")\n\nL:SetGeneralLocalization({\n\tname = \"異種蠍皇族\"\n})\n\nL:SetMiscLocalization({\n\tYauj = \"亞爾基公主\",\n\tVem = \"維姆\",\n\tKri = \"克里勳爵\"\n})\n\n-------------\n-- Sartura --\n-------------\nL = DBM:GetModLocalization(\"Sartura\")\n\nL:SetGeneralLocalization({\n\tname = \"沙爾圖拉\"\n})\n\n--------------\n-- Fankriss --\n--------------\nL = DBM:GetModLocalization(\"Fankriss\")\n\nL:SetGeneralLocalization({\n\tname = \"不屈的范克里斯\"\n})\n\n--------------\n-- Viscidus --\n--------------\nL = DBM:GetModLocalization(\"Viscidus\")\n\nL:SetGeneralLocalization({\n\tname = \"維希度斯\"\n})\n\nL:SetWarningLocalization({\n\tWarnFreeze\t= \"冰凍:%d/3\",\n\tWarnShatter\t= \"打碎:%d/3\"\n})\n\nL:SetOptionLocalization({\n\tWarnFreeze\t= \"提示冰凍狀態\",\n\tWarnShatter\t= \"提示打碎狀態\"\n})\n\nL:SetMiscLocalization({\n\tSlow\t= \"開始減速!\",   --Translation problem, this is an exclamation mark in English, please do not modify it.\n\tFreezing= \"凍住了！\",\n\tFrozen\t= \"變成冰凍的固體!\",  --Translation problem, this is an exclamation mark in English, please do not modify it.\n\tPhase4\t= \"開始爆裂!\",  --Translation problem, this is an exclamation mark in English, please do not modify it.\n\tPhase5\t= \"看來準備好毀滅了！\",\n\tPhase6\t= \"爆炸。\",\n\tHitsRemain\t= \"剩餘攻擊\",\n\tFrost\t\t= \"冰霜\",\n\tPhysical\t= \"物理\"\n})\n\n-------------\n-- Huhuran --\n-------------\nL = DBM:GetModLocalization(\"Huhuran\")\n\nL:SetGeneralLocalization({\n\tname = \"哈霍蘭公主\"\n})\n\n---------------\n-- Twin Emps --\n---------------\nL = DBM:GetModLocalization(\"TwinEmpsAQ\")\n\nL:SetGeneralLocalization({\n\tname = \"雙子帝王\"\n})\n\nL:SetMiscLocalization({\n\tVeklor = \"維克洛爾大帝\",\n\tVeknil = \"維克尼拉斯大帝\"\n})\n\n------------\n-- C'Thun --\n------------\nL = DBM:GetModLocalization(\"CThun\")\n\nL:SetGeneralLocalization({\n\tname = \"克蘇恩\"\n})\n\nL:SetWarningLocalization({\n\tWarnEyeTentacle\t\t\t= \"眼球觸鬚\",\n\tWarnClawTentacle2\t\t= \"利爪觸鬚\",\n\tWarnGiantEyeTentacle\t= \"巨型眼球觸鬚\",\n\tWarnGiantClawTentacle\t= \"巨型利爪觸鬚\",\n\tWarnWeakened\t\t\t= \"克蘇恩變得虛弱了\"\n})\n\nL:SetTimerLocalization({\n\tTimerEyeTentacle\t\t= \"下一次眼球觸鬚\",\n\tTimerClawTentacle\t\t= \"下一次利爪觸鬚\",\n\tTimerGiantEyeTentacle\t= \"下一次巨型眼球觸鬚\",\n\tTimerGiantClawTentacle\t= \"下一次巨型利爪觸鬚\",\n\tTimerWeakened\t\t\t= \"虛弱結束\"\n})\n\nL:SetOptionLocalization({\n\tWarnEyeTentacle\t\t\t= \"為眼球觸鬚顯示警告\",\n\tWarnClawTentacle2\t\t= \"為利爪觸鬚顯示警告\",\n\tWarnGiantEyeTentacle\t= \"為巨型眼球觸鬚顯示警告\",\n\tWarnGiantClawTentacle\t= \"為巨型利爪觸鬚顯示警告\",\n\tSpecWarnWeakened\t\t= \"當首領虛弱時顯示特別警告\",\n\tTimerEyeTentacle\t\t= \"為下一次眼球觸鬚顯示計時器\",\n\tTimerClawTentacle\t\t= \"為下一次利爪觸鬚顯示計時器\",\n\tTimerGiantEyeTentacle\t= \"為下一次巨型眼球觸鬚顯示計時器\",\n\tTimerGiantClawTentacle\t= \"為下一次巨型利爪觸鬚顯示計時器\",\n\tTimerWeakened\t\t\t= \"為首領虛弱時間顯示計時器\",\n\tRangeFrame\t\t\t\t= \"顯示距離框架(10碼)\"\n})\n\nL:SetMiscLocalization({\n\tStomach\t\t= \"內場\",\n\tEye\t\t\t= \"克蘇恩之眼\",\n\tFleshTent\t= \"血肉觸鬚\",--Localized so it shows on frame in users language, not senders\n\tWeakened\t= \"變弱了\",\n\tNotValid\t= \"AQ40 擊殺信息： %s 首領未擊殺。\"\n})\n\n----------------\n-- Ouro --\n----------------\nL = DBM:GetModLocalization(\"Ouro\")\n\nL:SetGeneralLocalization({\n\tname = \"奧羅\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"鑽地\",\n\tWarnEmerge\t\t\t= \"現身\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"強制鑽地\",\n\tTimerEmerge\t\t\t= \"現身\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"為鑽地顯示警告\",\n\tTimerSubmerge\t\t= \"為鑽地顯示計時器，確定何時將強制執行合併。 注意：如果近戰離開目標範圍，他仍然可以隨時鑽地。\",\n\tWarnEmerge\t\t\t= \"為現身顯示警告\",\n\tTimerEmerge\t\t\t= \"為現身顯示計時器\"\n})\n\n---------------\n-- AQ40 Trash --\n----------------\nL = DBM:GetModLocalization(\"AQ40Trash\")\n\nL:SetGeneralLocalization({\n\tname = \"AQ40：全程計時\"\n})\n"
  },
  {
    "path": "DBM-Azeroth/Azuregos.lua",
    "content": "local mod\t= DBM:NewMod(\"Azuregos\", \"DBM-Azeroth\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(6109)--121820 TW ID, 6109 classic ID\n--mod:SetModelID(17887)\nmod:EnableWBEngageSync()--Enable syncing engage in outdoors\n\nmod:RegisterCombat(\"yell\", L.Pull)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 21099\",\n\t\"SPELL_CAST_SUCCESS 22067 21147\"\n)\n\nlocal warningFrostBreath\t\t= mod:NewSpellAnnounce(21099, 3)\n\nlocal specWarnArcaneVacuum\t\t= mod:NewSpecialWarningSpell(21147, nil, nil, nil, 2, 5)\nlocal specWarnReflection\t\t= mod:NewSpecialWarningSpell(22067, \"CasterDps\", nil, nil, 1, 2)\n\n--Timers too variable, if the max is more than double the min time, a timer for min time is more misleading than helpful\n--local timerReflectionCD\t\t= mod:NewCDTimer(15.7, 22067, nil, \"CasterDps\", nil, 5, nil, DBM_CORE_L.DAMAGER_ICON)--15.7-33\n--local timerFrostBreathCD\t\t= mod:NewCDTimer(10, 21099, nil, nil, nil, 3)--10-40 (lovely)\n--local timerArcaneVacuumCD\t\t= mod:NewCDTimer(16, 21147, nil, nil, nil, 2)--16-35\n\n--mod:AddReadyCheckOption(48620, false)\n\nfunction mod:OnCombatStart(_, yellTriggered)\n\tif yellTriggered then\n\t\t--timerFrostBreathCD:Start(5.8-delay)\n\t\t--timerArcaneVacuumCD:Start(5.7-delay)--5.7-12\n\t\t--timerReflectionCD:Start(24.4-delay)--Recheck\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 21099 and self:AntiSpam(3, 2) then\n\t\twarningFrostBreath:Show()\n\t\t--timerFrostBreathCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 22067 then\n\t\tspecWarnReflection:Show()\n\t\tspecWarnReflection:Play(\"stilldanger\")\n\t\t--pull:176.7, 31.3, 23.1, 20.8, 30.6, 26.2, 25.5, 15.7, 33.1, 30.1\n\t\t--timerReflectionCD:Start()\n\telseif args.spellId == 21147 and self:AntiSpam(5, 1) then\n\t\tspecWarnArcaneVacuum:Show()\n\t\tspecWarnArcaneVacuum:Play(\"teleyou\")\n\t\t--timerArcaneVacuumCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Azeroth/DBM-Azeroth.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Azeroth (Classic)|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Azeroth (Classic)|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Azeroth (Clásico)|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Azeroth (Clásico)|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Azeroth (Classique)|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Азерот (классический)|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0아제로스 (클래식)|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0艾澤拉斯 (經典)|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0世界首领 (经典)|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMAzeroth_AllSavedVars\n## SavedVariablesPerCharacter: DBMAzeroth_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: Classic\n## X-DBM-Mod-World-Boss: 1\n## X-DBM-StatTypes: normal\n## X-DBM-Mod-Name: Azeroth (Classic)\n## X-DBM-Mod-Name-deDE: Azeroth (Classic)\n## X-DBM-Mod-Name-esES: Azeroth (Clásico)\n## X-DBM-Mod-Name-esMX: Azeroth (Clásico)\n## X-DBM-Mod-Name-frFR: Azeroth (Classique)\n## X-DBM-Mod-Name-ptBR: Azeroth (Clássico)\n## X-DBM-Mod-Name-ruRU: Азерот (классический)\n## X-DBM-Mod-Name-koKR: 아제로스 (클래식)\n## X-DBM-Mod-Name-zhTW: 艾澤拉斯 (經典)\n## X-DBM-Mod-Name-zhCN: 世界首领 (经典)\n## X-DBM-Mod-Sort: 1106\n## X-DBM-Mod-MapID: 182,35,44,27,122\n## X-DBM-Mod-LoadCID: 14889,14888,14887,14890,6109\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.fr.lua\nlocalization.es.lua\nlocalization.mx.lua\nlocalization.ru.lua\nlocalization.kr.lua\nlocalization.tw.lua\nlocalization.cn.lua\n\nAzuregos.lua\nTaerar.lua\nYsondre.lua\nLethon.lua\nEmeriss.lua\n"
  },
  {
    "path": "DBM-Azeroth/Emeriss.lua",
    "content": "local mod\t= DBM:NewMod(\"Emeriss\", \"DBM-Azeroth\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(14889)--121913 TW ID, 14889 classic ID\n--mod:SetModelID(17887)\nmod:EnableWBEngageSync()--Enable syncing engage in outdoors\n\nmod:RegisterCombat(\"yell\", L.Pull)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 24814 24813 24818\",\n\t\"SPELL_AURA_APPLIED 24818\",\n\t\"SPELL_AURA_APPLIED_DOSE 24818\"\n)\n\n--TODO, maybe taunt special warnings for classic version when it matters more.\n--TODO, Needs valid spellIDs for Classic\nlocal warnNoxiousBreath\t\t\t= mod:NewStackAnnounce(24818, 2, nil, \"Tank\", 2)\n\nlocal specWarnSleepingFog\t\t= mod:NewSpecialWarningDodge(24814, nil, nil, nil, 2, 2)\n--local specWarnMushroom\t\t\t= mod:NewSpecialWarningYou(243451, nil, nil, nil, 1, 2)\n\n--local timerNoxiousBreathCD\t\t= mod:NewCDTimer(18.3, 24818, nil, \"Tank\", nil, 5, nil, DBM_COMMON_L.TANK_ICON)--Iffy\nlocal timerSleepingFogCD\t\t= mod:NewCDTimer(15.8, 24814, nil, nil, nil, 3)\n\n--mod:AddReadyCheckOption(48620, false)\n\nfunction mod:OnCombatStart(delay, yellTriggered)\n\tif yellTriggered then\n\t\t--timerNoxiousBreathCD:Start(11.9-delay)--13\n\t\ttimerSleepingFogCD:Start(18.4-delay)--19.2\n\tend\nend\n\n--[[\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 243401 and self:AntiSpam(3, 1) then\n\t\ttimerNoxiousBreathCD:Start()\n\tend\nend\n--]]\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\t--if args.spellId == 24814 or args.spellId == 24813 then\n\tif args.spellId == 24814 then\n\t\tspecWarnSleepingFog:Show()\n\t\tspecWarnSleepingFog:Play(\"watchstep\")\n\t\ttimerSleepingFogCD:Start()\n\t--elseif args.spellId == 24818 and self:AntiSpam(3, 1) then\n\t\t--timerNoxiousBreathCD\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 24818 then\n\t\tif self:IsTanking(nil, nil, args.destName, nil, args.sourceGUID) then\n\t\t\twarnNoxiousBreath:Show(args.destName, args.amount or 1)\n\t\tend\n\t--elseif args.spellId == 243451 then\n\t\t--9.7-20 second timer\n\t\t--if args:IsPlayer() then\n\t\t--\tspecWarnMushroom:Show()\n\t\t--\tspecWarnMushroom:Play(\"targetyou\")\n\t\t--end\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n"
  },
  {
    "path": "DBM-Azeroth/KazzakClassic.lua",
    "content": "local mod\t= DBM:NewMod(\"KazzakClassic\", \"DBM-Azeroth\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(12397)--121818 TW ID, 12397 classic ID\n--mod:SetModelID(17887)\nmod:EnableWBEngageSync()--Enable syncing engage in outdoors\n\nmod:RegisterCombat(\"yell\", L.Pull)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 21341\",\n\t\"SPELL_AURA_APPLIED 21056\"\n)\n\nlocal warningMark\t\t\t\t= mod:NewTargetNoFilterAnnounce(21056, 4)\nlocal warningShadowBoltVolley\t= mod:NewSpellAnnounce(21341, 2)\n\nlocal specWarnMark\t\t\t\t= mod:NewSpecialWarningYou(21056, nil, nil, nil, 1, 2)--No Yell on purpose, outdoor chat restrictions and all\n\n--Timers seem totally random, like 5-40 type random nonsense, so are utterly worthless\n--local timerMarkCD\t\t\t\t= mod:NewCDTimer(19.1, 21056, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)\n--local timerShadowBoltVolleyCD\t= mod:NewCDTimer(7.6, 21341, nil, nil, nil, 2)\n\n--mod:AddReadyCheckOption(48620, false)\n\nfunction mod:OnCombatStart(_, yellTriggered)\n\tif yellTriggered then\n\t\t--timerShadowBoltVolleyCD:Start(11.5-delay)\n\t\t--timerMarkCD:Start(14.1-delay)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 21341 and args:IsSrcTypeHostile() then\n\t\twarningShadowBoltVolley:Show()\n\t\t--timerShadowBoltVolleyCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 21056 then\n\t\tself:SendSync(\"Mark\", args.destName)\n\t\tif self:AntiSpam(5, 1) then\n\t\t\tif args:IsPlayer() then\n\t\t\t\tspecWarnMark:Show()\n\t\t\t\tspecWarnMark:Play(\"targetyou\")\n\t\t\telse\n\t\t\t\twarningMark:Show(args.destName)\n\t\t\tend\n\t\tend\n\tend\nend\n\ndo\n\tlocal playerName = UnitName(\"player\")\n\n\tfunction mod:OnSync(msg, targetName)\n\t\tif not self:IsInCombat() then return end\n\t\tif msg == \"Mark\" and targetName and self:AntiSpam(5, 1) then\n\t\t\tif targetName == playerName then\n\t\t\t\tspecWarnMark:Show()\n\t\t\t\tspecWarnMark:Play(\"targetyou\")\n\t\t\telse\n\t\t\t\twarningMark:Show(targetName)\n\t\t\tend\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Azeroth/Lethon.lua",
    "content": "local mod\t= DBM:NewMod(\"Lethon\", \"DBM-Azeroth\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(14888)--121821 TW ID, 14888 classic ID\n--mod:SetModelID(17887)\nmod:EnableWBEngageSync()--Enable syncing engage in outdoors\n\nmod:RegisterCombat(\"yell\", L.Pull)\n\n\nmod:RegisterEventsInCombat(\n--\t\"SPELL_CAST_START 24818 243468\",\n\t\"SPELL_CAST_SUCCESS 24814 24813\"\n--\t\"SPELL_AURA_APPLIED 243401\",\n--\t\"SPELL_AURA_APPLIED_DOSE 243401\"\n)\n\n--TODO, maybe taunt special warnings for classic version when it matters more.\n--TODO, needs valid spellIds for Classic\nlocal warnNoxiousBreath\t\t\t= mod:NewStackAnnounce(24818, 2, nil, \"Tank\", 2)\n\nlocal specWarnSleepingFog\t\t= mod:NewSpecialWarningDodge(24814, nil, nil, nil, 2, 2)\n--local specWarnShadowBoltWhirl\t= mod:NewSpecialWarningDodge(243468, nil, nil, nil, 2, 2)\n\n--local timerNoxiousBreathCD\t\t= mod:NewCDTimer(18.3, 24818, nil, \"Tank\", nil, 5, nil, DBM_COMMON_L.TANK_ICON)--Iffy\nlocal timerSleepingFogCD\t\t= mod:NewCDTimer(16.8, 24814, nil, nil, nil, 3)\n--local timerShadowBoltWhirlCD\t= mod:NewCDTimer(15.8, 243468, nil, nil, nil, 3)\n\n--mod:AddReadyCheckOption(48620, false)\n\nfunction mod:OnCombatStart(_, yellTriggered)\n\tif yellTriggered then\n\t\t--timerNoxiousBreathCD:Start(11.9-delay)\n\t\t--timerSleepingFogCD:Start(18.4-delay)\n\tend\nend\n\n--[[\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 24818 then\n\t\t--timerNoxiousBreathCD:Start()\n\telseif args.spellId == 243468 and self:AntiSpam(5, 1) then\n\t\t--specWarnShadowBoltWhirl:Show()\n\t\t--specWarnShadowBoltWhirl:Play(\"watchorb\")\n\t\t--timerShadowBoltWhirlCD:Start()\n\tend\nend\n--]]\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\t--if args.spellId == 24814 or args.spellId == 24813 then\n\tif args.spellId == 24814 then\n\t\tspecWarnSleepingFog:Show()\n\t\tspecWarnSleepingFog:Play(\"watchstep\")\n\t\ttimerSleepingFogCD:Start()\n\t--elseif args.spellId == 24818 and self:AntiSpam(3, 1) then\n\t\t--timerNoxiousBreathCD\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 24818 then\n\t\tif self:IsTanking(nil, nil, args.destName, nil, args.sourceGUID) then--Basically, HAS to be bosses current target\n\t\t\twarnNoxiousBreath:Show(args.destName, args.amount or 1)\n\t\tend\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n"
  },
  {
    "path": "DBM-Azeroth/Taerar.lua",
    "content": "local mod\t= DBM:NewMod(\"Taerar\", \"DBM-Azeroth\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(14890)--121911 TW ID, 14890 classic ID\n--mod:SetModelID(17887)\nmod:EnableWBEngageSync()--Enable syncing engage in outdoors\n\nmod:RegisterCombat(\"yell\", L.Pull)\n\n\nmod:RegisterEventsInCombat(\n--\t\"SPELL_CAST_START 24818 243401\",\n\t\"SPELL_CAST_SUCCESS 24814 24813\",\n\t\"SPELL_AURA_APPLIED 24818\",\n\t\"SPELL_AURA_APPLIED_DOSE 24818\"\n)\n\n--TODO, maybe taunt special warnings for classic version when it matters more.\n--TODO, needs valid spellIds for classic\nlocal warnNoxiousBreath\t\t\t= mod:NewStackAnnounce(24818, 2, nil, \"Tank\", 2)\n--local warningBellowingRoar\t\t= mod:NewSpellAnnounce(243661, 3)\n\nlocal specWarnSleepingFog\t\t= mod:NewSpecialWarningDodge(24814, nil, nil, nil, 2, 2)\n\n--local timerNoxiousBreathCD\t\t= mod:NewCDTimer(19.4, 24818, nil, \"Tank\", nil, 5, nil, DBM_COMMON_L.TANK_ICON)--Iffy\nlocal timerSleepingFogCD\t\t= mod:NewCDTimer(21.9, 24814, nil, nil, nil, 3)\n--local timerBellowingRoarCD\t\t= mod:NewCDTimer(7.2, 243661, nil, nil, nil, 2)\n\n--mod:AddReadyCheckOption(48620, false)\n\nfunction mod:OnCombatStart(delay, yellTriggered)\n\tif yellTriggered then\n\t\t--timerBellowingRoarCD:Start(10.5-delay)\n\t\t--timerNoxiousBreathCD:Start(14.3-delay)\n\t\ttimerSleepingFogCD:Start(21.5-delay)\n\tend\nend\n\n--[[\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 243661 and self:AntiSpam(3, 1) then\n\t\twarningBellowingRoar:Show()\n\t\ttimerBellowingRoarCD:Start()\n\telseif args.spellId == 24818 and self:AntiSpam(3, 2) then\n\t\ttimerNoxiousBreathCD:Start()\n\tend\nend\n--]]\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\t--if args.spellId == 24814 or args.spellId == 24813 then\n\tif args.spellId == 24814 then\n\t\tspecWarnSleepingFog:Show()\n\t\tspecWarnSleepingFog:Play(\"watchstep\")\n\t\ttimerSleepingFogCD:Start()\n\t--elseif args.spellId == 24818 and self:AntiSpam(3, 1) then\n\t\t--timerNoxiousBreathCD\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 24818 then\n\t\tif self:IsTanking(nil, nil, args.destName, nil, args.sourceGUID) then--Basically, HAS to be bosses current target\n\t\t\twarnNoxiousBreath:Show(args.destName, args.amount or 1)\n\t\tend\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n"
  },
  {
    "path": "DBM-Azeroth/Ysondre.lua",
    "content": "local mod\t= DBM:NewMod(\"Ysondre\", \"DBM-Azeroth\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(14887)--121912 TW ID, 14887 classic ID\n--mod:SetModelID(17887)\nmod:EnableWBEngageSync()--Enable syncing engage in outdoors\n\nmod:RegisterCombat(\"yell\", L.Pull)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 24814 24813 24818\",\n\t\"SPELL_AURA_APPLIED 24818\",\n\t\"SPELL_AURA_APPLIED_DOSE 24818\",\n\t\"UNIT_SPELLCAST_SUCCEEDED\"\n)\n\n--TODO, maybe taunt special warnings for classic version when it matters more.\nlocal warnNoxiousBreath\t\t\t= mod:NewStackAnnounce(24818, 2, nil, \"Tank\", 2)\nlocal warningLightningWave\t\t= mod:NewSpellAnnounce(24819, 3)\n\nlocal specWarnSleepingFog\t\t= mod:NewSpecialWarningDodge(24814, nil, nil, nil, 2, 2)\n\n--local timerNoxiousBreathCD\t\t= mod:NewCDTimer(19.4, 24818, nil, \"Tank\", nil, 5, nil, DBM_COMMON_L.TANK_ICON)--Iffy\nlocal timerSleepingFogCD\t\t= mod:NewCDTimer(16.0, 24814, nil, nil, nil, 3)\nlocal timerLightningWaveCD\t\t= mod:NewCDTimer(13.4, 24819, nil, nil, nil, 3)\n\n--mod:AddReadyCheckOption(48620, false)\n\nfunction mod:OnCombatStart(delay, yellTriggered)\n\tif yellTriggered then\n\t\t--timerNoxiousBreathCD:Start(11.9-delay)\n\t\ttimerSleepingFogCD:Start(18.4-delay)\n--\t\ttimerLightningWaveCD:Start(53-delay)--Iffy\n\tend\nend\n\n--[[\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 24818 and self:AntiSpam(3, 1) then\n\t\t--timerNoxiousBreathCD:Start()\n\tend\nend\n--]]\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\t--if args.spellId == 24814 or args.spellId == 24813 then\n\tif args.spellId == 24814 then\n\t\tspecWarnSleepingFog:Show()\n\t\tspecWarnSleepingFog:Play(\"watchstep\")\n\t\ttimerSleepingFogCD:Start()\n\t--elseif args.spellId == 24818 and self:AntiSpam(3, 1) then\n\t\t--timerNoxiousBreathCD\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 24818 then\n\t\tif self:IsTanking(nil, nil, args.destName, nil, args.sourceGUID) then--Basically, HAS to be bosses current target\n\t\t\twarnNoxiousBreath:Show(args.destName, args.amount or 1)\n\t\tend\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\n--Probably won't work in classic, unit_spellcast events disabled there for all but \"player\"\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(24819) and self:AntiSpam(5, 2) then--Lightning Wave\n\t\twarningLightningWave:Show()\n\t\ttimerLightningWaveCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Azeroth/localization.cn.lua",
    "content": "if GetLocale() ~= \"zhCN\" then return end\nlocal L\n--Last update: 2020/07/03 （重新整理）\n-- Azuregos (Azshara)\nL = DBM:GetModLocalization(\"Azuregos\")\n\nL:SetGeneralLocalization({\n\tname = \"艾索雷葛斯\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"我保护着这个地方。神秘的秘法不能受到亵渎。\"\n})\n\n-- Taerar (Ashenvale)\nL = DBM:GetModLocalization(\"Taerar\")\n\nL:SetGeneralLocalization({\n\tname = \"泰拉尔\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"和平不过是短暂的梦想!让梦魇统治整个世界吧！\"\n})\n\n-- Ysondre (Feralas)\nL = DBM:GetModLocalization(\"Ysondre\")\n\nL:SetGeneralLocalization({\n\tname = \"伊森德雷\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"生命的希冀已被切断!梦游者要展开报复！\"\n})\n\n-- Lethon (Hinterlands)\nL = DBM:GetModLocalization(\"Lethon\")\n\nL:SetGeneralLocalization({\n\tname = \"莱索恩\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"我能感受到你内心的阴影。邪恶的侵蚀永远不会停止！\"\n})\n\n-- Emeriss (Duskwood)\nL = DBM:GetModLocalization(\"Emeriss\")\n\nL:SetGeneralLocalization({\n\tname = \"艾莫莉丝\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"希望是灵魂染上的疾病!这片土地应该枯竭，从此死气腾腾！\"\n})\n"
  },
  {
    "path": "DBM-Azeroth/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n-- Azuregos (Azshara)\nL = DBM:GetModLocalization(\"Azuregos\")\n\nL:SetGeneralLocalization({\n\tname = \"Azuregos\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Dieser Ort steht unter meinem Schutz. Die Mysterien des Arkanen werden unberührt bleiben.\"\n})\n\n-- Taerar (Ashenvale)\nL = DBM:GetModLocalization(\"Taerar\")\n\nL:SetGeneralLocalization({\n\tname = \"Taerar\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Frieden ist nur ein flüchtiger Traum! Von nun an herrscht der ALPTRAUM!\"\n})\n\n-- Ysondre (Feralas)\nL = DBM:GetModLocalization(\"Ysondre\")\n\nL:SetGeneralLocalization({\n\tname = \"Ysondre\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Die Fäden des LEBENS wurden durchtrennt! Die Träumer müssen gerächt werden!\"\n})\n\n-- Lethon (Hinterlands)\nL = DBM:GetModLocalization(\"Lethon\")\n\nL:SetGeneralLocalization({\n\tname = \"Lethon\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Ich fühle die SCHATTEN in Euren Herzen. Niemals darf das Böse Ruhe finden!\"\n})\n\n-- Emeriss (Duskwood)\nL = DBM:GetModLocalization(\"Emeriss\")\n\nL:SetGeneralLocalization({\n\tname = \"Emeriss\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Die Hoffnung ist eine KRANKHEIT der Seele. Dieses Land wird verdorren und sterben!\"\n})\n"
  },
  {
    "path": "DBM-Azeroth/localization.en.lua",
    "content": "local L\n\n-- Azuregos (Azshara)\nL = DBM:GetModLocalization(\"Azuregos\")\n\nL:SetGeneralLocalization({\n\tname = \"Azuregos\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"This place is under my protection. The mysteries of the arcane shall remain inviolate.\"\n})\n\n-- Taerar (Ashenvale)\nL = DBM:GetModLocalization(\"Taerar\")\n\nL:SetGeneralLocalization({\n\tname = \"Taerar\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Peace is but a fleeting dream! Let the NIGHTMARE reign!\"\n})\n\n-- Ysondre (Feralas)\nL = DBM:GetModLocalization(\"Ysondre\")\n\nL:SetGeneralLocalization({\n\tname = \"Ysondre\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"The strands of LIFE have been severed! The Dreamers must be avenged!\"\n})\n\n-- Lethon (Hinterlands)\nL = DBM:GetModLocalization(\"Lethon\")\n\nL:SetGeneralLocalization({\n\tname = \"Lethon\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"I can sense the SHADOW on your hearts. There can be no rest for the wicked!\"\n})\n\n-- Emeriss (Duskwood)\nL = DBM:GetModLocalization(\"Emeriss\")\n\nL:SetGeneralLocalization({\n\tname = \"Emeriss\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Hope is a DISEASE of the soul! This land shall wither and die!\"\n})\n"
  },
  {
    "path": "DBM-Azeroth/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" then return end\nlocal L\n\n-- Azuregos (Azshara)\nL = DBM:GetModLocalization(\"Azuregos\")\n\nL:SetGeneralLocalization({\n\tname = \"Azuregos\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Este lugar está bajo mi protección. Los misterios arcanos no serán mancillados.\"\n})\n\n-- Taerar (Ashenvale)\nL = DBM:GetModLocalization(\"Taerar\")\n\nL:SetGeneralLocalization({\n\tname = \"Taerar\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"¡La paz no es más que un sueño fugaz! ¡Que reine la PESADILLA!\"\n})\n\n-- Ysondre (Feralas)\nL = DBM:GetModLocalization(\"Ysondre\")\n\nL:SetGeneralLocalization({\n\tname = \"Ysondre\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"¡Los hilos de la VIDA se han roto! ¡Tenemos que vengar a los Soñadores!\"\n})\n\n-- Lethon (Hinterlands)\nL = DBM:GetModLocalization(\"Lethon\")\n\nL:SetGeneralLocalization({\n\tname = \"Lethon\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Puedo sentir la SOMBRA en vuestros corazones. ¡No puede haber descanso para los malos!\"\n})\n\n-- Emeriss (Duskwood)\nL = DBM:GetModLocalization(\"Emeriss\")\n\nL:SetGeneralLocalization({\n\tname = \"Emeriss\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"¡La esperanza es una ENFERMEDAD del alma! ¡Esta tierra se marchitará y morirá!\"\n})\n"
  },
  {
    "path": "DBM-Azeroth/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\nlocal L\n\n-- Azuregos (Azshara)\nL = DBM:GetModLocalization(\"Azuregos\")\n\nL:SetGeneralLocalization({\n\tname = \"Azuregos\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Cet endroit est sous ma protection. Les secrets de l'arcane resteront inviolés.\"\n})\n\n-- Taerar (Ashenvale)\nL = DBM:GetModLocalization(\"Taerar\")\n\nL:SetGeneralLocalization({\n\tname = \"Taerar\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"La paix n'est qu'un rêve éphémère ! Que le CAUCHEMAR règne !\"\n})\n\n-- Ysondre (Feralas)\nL = DBM:GetModLocalization(\"Ysondre\")\n\nL:SetGeneralLocalization({\n\tname = \"Ysondre\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Les fils de la VIE ont été coupés ! Les Rêveurs doivent être vengés !\"\n})\n\n-- Lethon (Hinterlands)\nL = DBM:GetModLocalization(\"Lethon\")\n\nL:SetGeneralLocalization({\n\tname = \"Léthon\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Je sens l'OMBRE dans vos cœurs. Il ne peut y avoir de repos pour les vilains !\"\n})\n\n-- Emeriss (Duskwood)\nL = DBM:GetModLocalization(\"Emeriss\")\n\nL:SetGeneralLocalization({\n\tname = \"Emeriss\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"L'espoir est une MALADIE de l'âme ! Ces terres vont flétrir et mourir !\"\n})\n"
  },
  {
    "path": "DBM-Azeroth/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n-- Azuregos (Azshara)\nL = DBM:GetModLocalization(\"Azuregos\")\n\nL:SetGeneralLocalization({\n\tname = \"아주어고스\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"여기는 내가 지킨다. 어느 누구도 비전술의 신비를 건드리지 못할 것이다.\"\n})\n\n-- Taerar (Ashenvale)\nL = DBM:GetModLocalization(\"Taerar\")\n\nL:SetGeneralLocalization({\n\tname = \"타에라\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"평화란 부질없는 꿈일 뿐! 이 세상은 악몽이 지배할 것이다!\"\n})\n\n-- Ysondre (Feralas)\nL = DBM:GetModLocalization(\"Ysondre\")\n\nL:SetGeneralLocalization({\n\tname = \"이손드레\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"생명의 끈이 끊어졌다! 꿈꾸는 자들이 복수하는 것이 틀림없다!\"\n})\n\n-- Lethon (Hinterlands)\nL = DBM:GetModLocalization(\"Lethon\")\n\nL:SetGeneralLocalization({\n\tname = \"레손\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"네놈들의 마음속에서 어둠이 느껴지는구나. 사악한 존재가 쉴 곳은 없다!\"\n})\n\n-- Emeriss (Duskwood)\nL = DBM:GetModLocalization(\"Emeriss\")\n\nL:SetGeneralLocalization({\n\tname = \"에메리스\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"희망은 영혼의 병! 이 땅은 말라 죽을 것이다!\"\n})\n"
  },
  {
    "path": "DBM-Azeroth/localization.mx.lua",
    "content": "if GetLocale() ~= \"esMX\" then return end\nlocal L\n\n-- Azuregos (Azshara)\nL = DBM:GetModLocalization(\"Azuregos\")\n\nL:SetGeneralLocalization({\n\tname = \"Azuregos\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Este lugar está bajo mi protección. Los misterios arcanos no serán mancillados.\"\n})\n\n-- Taerar (Ashenvale)\nL = DBM:GetModLocalization(\"Taerar\")\n\nL:SetGeneralLocalization({\n\tname = \"Taerar\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"¡La paz no es más que un sueño fugaz! ¡Que reine la PESADILLA!\"\n})\n\n-- Ysondre (Feralas)\nL = DBM:GetModLocalization(\"Ysondre\")\n\nL:SetGeneralLocalization({\n\tname = \"Ysondre\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"¡Los hilos de la VIDA se han roto! ¡Tenemos que vengar a los Soñadores!\"\n})\n\n-- Lethon (Hinterlands)\nL = DBM:GetModLocalization(\"Lethon\")\n\nL:SetGeneralLocalization({\n\tname = \"Lethon\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Puedo sentir la SOMBRA en sus corazones. ¡No puede haber descanso para los malos!\" --Does not have one :\\\n})\n\n-- Emeriss (Duskwood)\nL = DBM:GetModLocalization(\"Emeriss\")\n\nL:SetGeneralLocalization({\n\tname = \"Emeriss\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"¡La esperanza es una ENFERMEDAD del alma! ¡Esta tierra se marchitará y morirá!\"\n})\n"
  },
  {
    "path": "DBM-Azeroth/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n local L\n\n-- Azuregos (Azshara)\nL = DBM:GetModLocalization(\"Azuregos\")\n\nL:SetGeneralLocalization({\n\tname = \"Азурегос\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Это место под моей защитой. Тайные мистерии останутся неоскверненными.\"\n})\n\n-- Taerar (Ashenvale)\nL = DBM:GetModLocalization(\"Taerar\")\n\nL:SetGeneralLocalization({\n\tname = \"Таэрар\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Мир – это всего лишь мимолетный сон. Пусть правит КОШМАР!\"\n})\n\n-- Ysondre (Feralas)\nL = DBM:GetModLocalization(\"Ysondre\")\n\nL:SetGeneralLocalization({\n\tname = \"Исондра\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Нити ЖИЗНИ разорваны! Отомстим за Спящих!\"\n})\n\n-- Lethon (Hinterlands)\nL = DBM:GetModLocalization(\"Lethon\")\n\nL:SetGeneralLocalization({\n\tname = \"Летон\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Я чувствую ТЕНЬ, нависшую над вашими сердцами. Нечестивцам не будет покоя!\"\n})\n\n-- Emeriss (Duskwood)\nL = DBM:GetModLocalization(\"Emeriss\")\n\nL:SetGeneralLocalization({\n\tname = \"Эмерисс\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Надежда – это БОЛЕЗНЬ души! Эта земля зачахнет и умрет!\"\n})\n"
  },
  {
    "path": "DBM-Azeroth/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n--Last update: 2020/07/03 （重新整理）\n-- Azuregos (Azshara)\nL = DBM:GetModLocalization(\"Azuregos\")\n\nL:SetGeneralLocalization({\n\tname = \"艾索雷苟斯\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"我保護著這個地方。神秘的秘法不能受到褻瀆。\"\n})\n\n-- Taerar (Ashenvale)\nL = DBM:GetModLocalization(\"Taerar\")\n\nL:SetGeneralLocalization({\n\tname = \"泰拉爾\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"和平不過是短暫的夢想!讓夢魘統治整個世界吧！\"\n})\n\n-- Ysondre (Feralas)\nL = DBM:GetModLocalization(\"Ysondre\")\n\nL:SetGeneralLocalization({\n\tname = \"伊索德雷\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"生命的希冀已被切斷!夢遊者要展開報復！\"\n})\n\n-- Lethon (Hinterlands)\nL = DBM:GetModLocalization(\"Lethon\")\n\nL:SetGeneralLocalization({\n\tname = \"雷索\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"我能感受到你內心的陰影。邪惡的侵蝕永遠不會停止！\"\n})\n\n-- Emeriss (Duskwood)\nL = DBM:GetModLocalization(\"Emeriss\")\n\nL:SetGeneralLocalization({\n\tname = \"艾莫莉絲\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"希望是靈魂染上的疾病!這片土地應該枯竭，從此死氣騰騰！\"\n})\n"
  },
  {
    "path": "DBM-BWL/Broodlord.lua",
    "content": "local mod\t= DBM:NewMod(\"Broodlord\", \"DBM-BWL\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(12017)\nmod:SetEncounterID(612)\nmod:SetModelID(14308)\nmod:RegisterCombat(\"combat_yell\", L.Pull)--L.Pull is backup for classic, since classic probably won't have ENCOUNTER_START to rely on and player regen never works for this boss\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 23331 18670\",\n\t\"SPELL_AURA_APPLIED 24573\",\n\t\"SPELL_AURA_REMOVED 24573\"\n)\n\n--Mortal Strike: 10-20, Blast Wave: 12-32, Knock Away: 13-30. i.e., timers on this fight would be near useless\n--(ability.id = 18670 or ability.id = 23331 or ability.id = 24573) and type = \"cast\"\nlocal warnBlastWave\t\t= mod:NewSpellAnnounce(23331, 2)\nlocal warnKnockAway\t\t= mod:NewSpellAnnounce(18670, 3)\nlocal warnMortal\t\t= mod:NewTargetNoFilterAnnounce(24573, 2, nil, \"Tank|Healer\", 3)\n\nlocal timerBlastWaveCD\t= mod:NewCDTimer(20, 23331, nil, nil, nil, 2, nil, nil, true) -- 2024/02/25: timer fixed on 20 seconds. Previously was ~7s variance [8.20-15.27]. (25m Onyxia: [2024-02-03]@[22:41:24] || [2024-02-04]@[19:03:58] || [2024-02-25]@[19:27:42]) - \"Blast Wave-23331-npc:12017-135 = pull:28.34, 11.30, 10.76, 8.39, 9.12, 8.20, 12.53, 10.57, 10.51, 12.82, 12.24, 8.67, 12.19\" || \"Blast Wave-23331-npc:12017-135 = pull:24.91, 13.00, 8.95, 15.27, 11.03, 13.03 || \"Blast Wave-23331-npc:12017-135 = pull:19.96, 20.01\nlocal timerKnockAwayCD\t= mod:NewCDTimer(21.68, 18670, nil, nil, nil, 3, nil, nil, true) -- ~13s variance [21.68-34.93]. Added \"keep\" arg. (25m Onyxia: [2024-02-03]@[22:41:24] || [2024-02-04]@[19:03:58]) - \"Knock Away-25778-npc:12017-135 = pull:26.83, 24.87, 21.68, 28.09, 24.92, 34.93\" || \"Knock Away-25778-npc:12017-135 = pull:27.26, 23.44, 24.25 || \"Knock Away-18670-npc:12017-135 = pull:29.97, 26.22\nlocal timerMortal\t\t= mod:NewTargetTimer(5, 24573, nil, \"Tank|Healer\", 3, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerBlastWaveCD:Start(-delay)\n\ttimerKnockAwayCD:Start(26.83-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 23331 and args:IsSrcTypeHostile() then\n\t\twarnBlastWave:Show()\n\t\ttimerBlastWaveCD:Start()\n\telseif spellId == 18670 then\n\t\twarnKnockAway:Show()\n\t\ttimerKnockAwayCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 24573 and args:IsDestTypePlayer() then\n\t\tlocal destName = args.destName\n\t\twarnMortal:Show(destName)\n\t\ttimerMortal:Start(destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 24573 and args:IsDestTypePlayer() then\n\t\ttimerMortal:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-BWL/Chromaggus.lua",
    "content": "local mod\t= DBM:NewMod(\"Chromaggus\", \"DBM-BWL\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20251010003914\")\nmod:SetCreatureID(14020)\nmod:SetEncounterID(616)\nmod:SetModelID(14367)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 23308 23309 23313 23314 23187 23189 23315 23316 23310 23312\",\n\t\"SPELL_AURA_APPLIED 23155 23169 23153 23154 23170 23128 23537\",\n--\t\"SPELL_AURA_REFRESH\",\n\t\"SPELL_AURA_REMOVED 23155 23169 23153 23154 23170 23128\",\n\t\"UNIT_HEALTH boss1 mouseover target\",\n\t\"CHAT_MSG_MONSTER_EMOTE\"\n)\n\n--(ability.id = 23309 or ability.id = 23313 or ability.id = 23189 or ability.id = 23315 or ability.id = 23312 or ability.id = 23314) and type = \"begincast\"\nlocal warnBreath\t\t= mod:NewAnnounce(\"WarnBreath\", 2, 23316, nil, nil, nil, 17087)\nlocal warnRed\t\t\t= mod:NewSpellAnnounce(23155, 2, nil, false)\nlocal warnGreen\t\t\t= mod:NewSpellAnnounce(23169, 2, nil, false)\nlocal warnBlue\t\t\t= mod:NewSpellAnnounce(23153, 2, nil, false)\nlocal warnBlack\t\t\t= mod:NewSpellAnnounce(23154, 2, nil, false)\nlocal warnFrenzy\t\t= mod:NewSpellAnnounce(23128, 3, nil, \"Tank|RemoveEnrage|Healer\", 4)\nlocal warnPhase2Soon\t= mod:NewPrePhaseAnnounce(2, 1)\nlocal warnPhase2\t\t= mod:NewPhaseAnnounce(2)\nlocal warnMutation\t\t= mod:NewCountAnnounce(23174, 4)\nlocal warnVuln\t\t\t= mod:NewAnnounce(\"WarnVulnerable\", 1, false, nil, nil, nil, 22277)\n\nlocal specWarnBronze\t\t= mod:NewSpecialWarningYou(23170, nil, nil, nil, 1, 8)\nlocal specWarnFrenzy\t\t= mod:NewSpecialWarningDispel(23128, \"RemoveEnrage\", nil, nil, 1, 6)\nlocal specWarnBreathSoon\t= mod:NewSpecialWarningSoon(17087)\n\nlocal timerBreath\t\t= mod:NewTimer(2, \"TimerBreath\", 23316, nil, nil, 3, nil, nil, nil, nil, nil, nil, nil, 17087)\nlocal timerBreathCD\t\t= mod:NewTimer(60, \"TimerBreathCD\", 23316, nil, nil, 3, nil, nil, nil, nil, nil, nil, nil, 17087)\nlocal timerFrenzy\t\t= mod:NewBuffActiveTimer(8, 23128, nil, \"Tank|RemoveEnrage|Healer\", 3, 5, nil, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.ENRAGE_ICON)\nlocal timerVuln\t\t\t= mod:NewTimer(\"v17-25\", \"TimerVulnCD\", nil, nil, nil, nil, nil, true, nil, nil, nil, nil, nil, 22277) -- 2024/02/08 Warmane Changelog: 17-25\n\n--mod:AddNamePlateOption(\"NPAuraOnVulnerable\", 22277)\nmod:AddInfoFrameOption(22277, true)\n\nmod:GroupSpells(22277, 22278, 22279, 22280, 22281) -- Elemental Shield (Vulnerabilities to Fire, Frost, Shadow, Nature, Arcane)\n\nlocal mydebuffs = 0\n\nlocal lastVulnName = nil\nlocal vulnerabilities = {\n\t-- [guid] = school\n}\n\n--Constants\n-- https://wow.gamepedia.com/COMBAT_LOG_EVENT\nlocal spellInfo = {\n\t[2] =\t{\"Holy\",\t{r=255, g=230, b=128},\t\"585\"},-- Smite\n\t[4] =\t{\"Fire\",\t{r=255, g=128, b=0},\t\"11366\"},-- Pyroblast\n\t[8] =\t{\"Nature\",\t{r=77, g=255, b=77},\t\"5176\"},-- Wrath\n\t[16] =\t{\"Frost\",\t{r=128, g=255, b=255},\t\"116\"},-- Frostbolt\n\t[32] =\t{\"Shadow\",\t{r=128, g=128, b=255},\t\"686\"},-- Shadow Bolt\n\t[64] =\t{\"Arcane\",\t{r=255, g=128, b=255},\t\"5143\"},-- Arcane Missiles\n}\n\nlocal vulnSpells = {\n\t--No Holy?\n\t[22277] = 4,\n\t[22280] = 8,\n\t[22278] = 16,\n\t[22279] = 32,\n\t[22281] = 64,\n}\n\nlocal updateInfoFrame\ndo\n\tlocal twipe = table.wipe\n\tlocal lines, sortedLines = {}, {}\n\tlocal function addLine(key, value)\n\t\t-- sort by insertion order\n\t\tlines[key] = value\n\t\tsortedLines[#sortedLines + 1] = key\n\tend\n\tupdateInfoFrame = function()\n\t\ttwipe(lines)\n\t\ttwipe(sortedLines)\n\t\tif lastVulnName then\n\t\t\taddLine(lastVulnName, \"\")\n\t\tend\n\t\treturn lines, sortedLines\n\tend\nend\n\n--Local Functions\n-- in theory this should only alert on a new vulnerability on your target or when you change target\nlocal function update_vulnerability(self)\n\tlocal target = UnitGUID(\"target\")\n\tlocal spellSchool = vulnerabilities[target]\n\tlocal cid = self:GetCIDFromGUID(target)\n\tif not spellSchool or cid ~= 14020 then\n\t\treturn\n\tend\n\n\tlocal info = spellInfo[spellSchool]\n\tif not info then return end\n\tlocal name = L[info[1]] or info[1]\n\n\ttimerVuln:SetColor(info[2])\n\ttimerVuln:UpdateIcon(info[3])\n\ttimerVuln:UpdateName(name)\n\tif not lastVulnName or lastVulnName ~= name then\n\t\twarnVuln.icon = info[3]\n\t\twarnVuln:Show(name)\n\t\tlastVulnName = name\n\t\tif self.Options.InfoFrame then\n\t\t\tif not DBM.InfoFrame:IsShown() then\n\t\t\t\tDBM.InfoFrame:SetHeader(L.Vuln)\n\t\t\t\tDBM.InfoFrame:Show(1, \"function\", updateInfoFrame, false, false, true)\n\t\t\telse\n\t\t\t\tDBM.InfoFrame:Update()\n\t\t\tend\n\t\tend\n--\t\tif self.Options.NPAuraOnVulnerable then\n--\t\t\tDBM.Nameplate:Hide(true, target, 22277, 135924)\n--\t\t\tDBM.Nameplate:Hide(true, target, 22277, 135808)\n--\t\t\tDBM.Nameplate:Hide(true, target, 22277, 136006)\n--\t\t\tDBM.Nameplate:Hide(true, target, 22277, 135846)\n--\t\t\tDBM.Nameplate:Hide(true, target, 22277, 136197)\n--\t\t\tDBM.Nameplate:Hide(true, target, 22277, 136096)\n--\t\t\tDBM.Nameplate:Show(true, target, 22277, tonumber(info[3]))\n--\t\tend\n\tend\n\tself:UnregisterShortTermEvents()--Unregister SPELL_DAMAGE until next shimmer emote\nend\n\nlocal function check_spell_damage(self, target, amount, spellSchool, critical)\n\tlocal cid = self:GetCIDFromGUID(target)\n\tif cid ~= 14020 then\n\t\treturn\n\tend\n\tif amount > (critical and 1600 or 800) then\n\t\tif not vulnerabilities[target] or vulnerabilities[target] ~= spellSchool then\n\t\t\tvulnerabilities[target] = spellSchool\n\t\t\tupdate_vulnerability(self)\n\t\tend\n\tend\nend\n\nlocal function check_target_vulns(self)\n\tlocal target = UnitGUID(\"target\")\n\tlocal cid = self:GetCIDFromGUID(target)\n\tif cid ~= 14020 then\n\t\treturn\n\tend\n\n\tlocal spellId = select(11, DBM:UnitBuff(\"target\", 22277, 22280, 22278, 22279, 22281)) or 0\n\tlocal vulnSchool = vulnSpells[spellId]\n\tif vulnSchool then\n\t\treturn check_spell_damage(self, target, 10000, vulnSchool)\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\ttimerBreathCD:Start(30-delay, L.Breath1)\n\ttimerBreathCD:Start(60-delay, L.Breath2)--60\n\tspecWarnBreathSoon:Schedule(27-delay) -- +2 sec casting time == you got 5 seconds to run\n\tspecWarnBreathSoon:Schedule(57-delay)\n\tmydebuffs = 0\n\ttable.wipe(vulnerabilities)\n\tif self.Options.WarnVulnerable then--Don't register high cpu combat log events if option isn't enabled\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"SPELL_DAMAGE\"\n\t\t)\n\t\tcheck_target_vulns(self)\n--\t\tif self.Options.NPAuraOnVulnerable then\n--\t\t\tDBM:FireEvent(\"BossMod_EnableHostileNameplates\")\n--\t\tend\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\ttable.wipe(vulnerabilities)\n\tself:UnregisterShortTermEvents()\n--\tif self.Options.NPAuraOnVulnerable  then\n--\t\tDBM.Nameplate:Hide(true, nil, nil, nil, true, true)--isGUID, unit, spellId, texture, force, isHostile, isFriendly\n--\tend\n\tif self.Options.InfoFrame then\n\t\tDBM.InfoFrame:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(23308, 23309, 23313, 23314, 23187, 23189, 23315, 23316, 23310, 23312) then\n\t\t-- 23308 and 23309 - Incinerate (Red)\n\t\t-- 23313 and 23314 - Corrosive Acid (Green)\n\t\t-- 23187 and 23189 - Frost Burn (Blue)\n\t\t-- 23315 and 23316 - Ignite Flesh (Black)\n\t\t-- 23310 and 23312 - Time Lapse (Bronzes)\n\t\twarnBreath:Show(args.spellName)\n\t\ttimerBreath:Start(2, args.spellName)\n\t\ttimerBreath:UpdateIcon(args.spellId)\n\t\ttimerBreathCD:Start(60, args.spellName)\n\t\ttimerBreathCD:UpdateIcon(args.spellId)\n\t\tspecWarnBreathSoon:Schedule(57)\nend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 23155 and self:AntiSpam(3, 1) then\n\t\tif self:AntiSpam(3, 3) then\n\t\t\twarnRed:Show()\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tmydebuffs = mydebuffs + 1\n\t\t\tif mydebuffs >= 3 then\n\t\t\t\twarnMutation:Show(mydebuffs..\"/5\")\n\t\t\tend\n\t\tend\n\telseif spellId == 23169 and self:AntiSpam(3, 2) then\n\t\tif self:AntiSpam(3, 4) then\n\t\t\twarnGreen:Show()\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tmydebuffs = mydebuffs + 1\n\t\t\tif mydebuffs >= 3 then\n\t\t\t\twarnMutation:Show(mydebuffs..\"/5\")\n\t\t\tend\n\t\tend\n\telseif spellId == 23153 and self:AntiSpam(3, 3) then\n\t\tif self:AntiSpam(3, 5) then\n\t\t\twarnBlue:Show()\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tmydebuffs = mydebuffs + 1\n\t\t\tif mydebuffs >= 3 then\n\t\t\t\twarnMutation:Show(mydebuffs..\"/5\")\n\t\t\tend\n\t\tend\n\telseif spellId == 23154 and self:AntiSpam(3, 4) then\n\t\tif self:AntiSpam(3, 6) then\n\t\t\twarnBlack:Show()\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tmydebuffs = mydebuffs + 1\n\t\t\tif mydebuffs >= 3 then\n\t\t\t\twarnMutation:Show(mydebuffs..\"/5\")\n\t\t\tend\n\t\tend\n\telseif spellId == 23170 and args:IsPlayer() then\n\t\tspecWarnBronze:Show()\n\t\tspecWarnBronze:Play(\"useitem\")\n\t\tmydebuffs = mydebuffs + 1\n\t\tif mydebuffs >= 3 then\n\t\t\twarnMutation:Show(mydebuffs..\"/5\")\n\t\tend\n\telseif spellId == 23128 and args:IsDestTypeHostile() then\n\t\tif self.Options.SpecWarn23128dispel then\n\t\t\tspecWarnFrenzy:Show(args.destName)\n\t\t\tspecWarnFrenzy:Play(\"enrage\")\n\t\telse\n\t\t\twarnFrenzy:Show()\n\t\tend\n\t\ttimerFrenzy:Start()\n\telseif spellId == 23537 and args:IsDestTypeHostile() then\n\t\tif self.vb.phase < 2 then\n\t\t\tself:SetStage(2)\n\t\t\twarnPhase2:Show()\n\t\tend\n\tend\nend\n--Possibly needed hard to say.\n--mod.SPELL_AURA_REFRESH = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 23128 and args:IsPlayer() then\n\t\tmydebuffs = mydebuffs - 1\n\telseif spellId == 23169 and self:AntiSpam(3, 2) and args:IsPlayer() then\n\t\tmydebuffs = mydebuffs - 1\n\telseif spellId == 23153 and self:AntiSpam(3, 3) and args:IsPlayer() then\n\t\tmydebuffs = mydebuffs - 1\n\telseif spellId == 23154 and self:AntiSpam(3, 4) and args:IsPlayer() then\n\t\tmydebuffs = mydebuffs - 1\n\telseif spellId == 23170 and args:IsPlayer() then\n\t\tmydebuffs = mydebuffs - 1\n\telseif spellId == 23128 and args:IsDestTypeHostile() then\n\t\ttimerFrenzy:Stop()\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, _, _, spellSchool, amount, _, _, _, _, _, critical)\n\tcheck_spell_damage(self, destGUID, amount, spellSchool, critical)\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif UnitHealth(uId) / UnitHealthMax(uId) <= 0.25 and self:GetUnitCreatureId(uId) == 14020 and self.vb.phase == 1 then\n\t\twarnPhase2Soon:Show()\n\t\tself:SetStage(1.5)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_EMOTE(msg)\n\tif (msg == L.VulnEmote or msg:find(L.VulnEmote)) then\n\t\tself:SendSync(\"Vulnerable\")\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif not self:IsInCombat() then return end\n\tif msg == \"Vulnerable\" then\n\t\ttimerVuln:Start()\n\t\ttable.wipe(vulnerabilities)\n\t\tif self.Options.WarnVulnerable then\n\t\t\tself:RegisterShortTermEvents(\n\t\t\t\t\"SPELL_DAMAGE\"\n\t\t\t)\n\t\t\tcheck_target_vulns(self)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-BWL/DBM-BWL.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Blackwing Lair|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Pechschwingenhort|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Guarida de Alanegra|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Guarida de Alanegra|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Repaire de l'Aile noire|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Логово Крыла Тьмы|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0검은날개 둥지|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0黑翼之巢|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0黑翼之巢|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMBWL_AllSavedVars\n## SavedVariablesPerCharacter: DBMBWL_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: Classic\n## X-DBM-StatTypes: normal\n## X-DBM-Mod-MapID: 756\n## X-DBM-Mod-Sort: 1105\n## X-DBM-Mod-Name: Blackwing Lair\n## X-DBM-Mod-Name-zhCN: 黑翼之巢\n## X-DBM-Mod-Name-ruRU: Логово Крыла Тьмы\n## X-DBM-Mod-Name-frFR: Repaire de l'Aile noire\n## X-DBM-Mod-LoadZone: Blackwing Lair\n## X-DBM-Mod-LoadZone-esES: Guarida Alanegra\n## X-DBM-Mod-LoadZone-ruRU: Логово Крыла Тьмы\n## X-DBM-Mod-LoadZone-frFR: Repaire de l'Aile noire\n## X-DBM-Mod-LoadZone-esMX: Guarida Alanegra\n## X-DBM-Mod-LoadZone-zhTW: 黑翼之巢\n## X-DBM-Mod-LoadZone-zhCN: 黑翼之巢\n## X-DBM-Mod-LoadZone-koKR: 검은날개 둥지\n## X-DBM-Mod-LoadZone-deDE: Pechschwingenhort\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.es.lua\nlocalization.mx.lua\nlocalization.ru.lua\nlocalization.kr.lua\nlocalization.tw.lua\nlocalization.cn.lua\nlocalization.fr.lua\n\nRazorgore.lua\nVaelastrasz.lua\nBroodlord.lua\nFiremaw.lua\nEbonroc.lua\nFlamegor.lua\nChromaggus.lua\nNefarian.lua\nTalonGuards.lua\n"
  },
  {
    "path": "DBM-BWL/Ebonroc.lua",
    "content": "local mod\t= DBM:NewMod(\"Ebonroc\", \"DBM-BWL\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(14601)\nmod:SetEncounterID(614)\nmod:SetModelID(6377)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 23339 22539\",\n\t\"SPELL_AURA_APPLIED 23340\",\n\t\"SPELL_AURA_REMOVED 23340\"\n)\n\n--(ability.id = 23339 or ability.id = 22539) and type = \"begincast\"\nlocal warnWingBuffet\t= mod:NewCastAnnounce(23339, 2)\nlocal warnShadowFlame\t= mod:NewCastAnnounce(22539, 2)\nlocal warnShadow\t\t= mod:NewTargetNoFilterAnnounce(23340, 4, nil, \"Tank|Healer\")\n\nlocal specWarnShadowYou\t= mod:NewSpecialWarningYou(23340, nil, nil, nil, 1, 2)\nlocal specWarnShadow\t= mod:NewSpecialWarningTaunt(23340, nil, nil, nil, 1, 2)\n\nlocal timerWingBuffet\t= mod:NewNextTimer(30, 23339, nil, nil, nil, 2) -- Fixed timer. (25m Onyxia: [2024-02-04]@[19:03:58]) - \"Wing Buffet-23339-npc:14601-356 = pull:29.98, 30.03\nlocal timerShadowFlameCD= mod:NewNextTimer(20, 22539, nil, false, nil, 5) -- 08/02/2024 Warmane Changelog: Fixed Shadow Flame timer for Ebonroc. 20 seconds. Obsolete log parse will be kept for history: ~5s variance [14.02-19.44]. (25m Onyxia: [2024-02-04]@[19:03:58]) - \"Shadow Flame-22539-npc:14601-356 = pull:13.31, 19.44, 17.96, 14.02, 16.53\nlocal timerShadow\t\t= mod:NewTargetTimer(8, 23340, nil, \"Tank|Healer\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerShadowFlameCD:Start(-delay)\n\ttimerWingBuffet:Start(-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)--did not see ebon use any of these abilities\n\tlocal spellId = args.spellId\n\tif spellId == 23339 then\n\t\twarnWingBuffet:Show()\n\t\ttimerWingBuffet:Start()\n\telseif spellId == 22539 then\n\t\twarnShadowFlame:Show()\n\t\ttimerShadowFlameCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 23340 then\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnShadowYou:Show()\n\t\t\tspecWarnShadowYou:Play(\"targetyou\")\n\t\telse\n\t\t\tif self.Options.SpecWarn23340taunt and (self:IsTank() or not DBM.Options.FilterTankSpec) then\n\t\t\t\tspecWarnShadow:Show(args.destName)\n\t\t\t\tspecWarnShadow:Play(\"tauntboss\")\n\t\t\telse\n\t\t\t\twarnShadow:Show(args.destName)\n\t\t\tend\n\t\tend\n\t\ttimerShadow:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 23340 then\n\t\ttimerShadow:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-BWL/Firemaw.lua",
    "content": "local mod\t= DBM:NewMod(\"Firemaw\", \"DBM-BWL\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11983)\nmod:SetEncounterID(613)\nmod:SetModelID(6377)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 23339 22539\",\n\t\"SPELL_AURA_APPLIED_DOSE 23341\"\n)\n\n--(ability.id = 23339 or ability.id = 22539) and type = \"begincast\" or ability.id = 23341 and type = \"cast\"\nlocal warnWingBuffet\t\t= mod:NewCastAnnounce(23339, 2)\nlocal warnShadowFlame\t\t= mod:NewCastAnnounce(22539, 2)\nlocal warnFlameBuffet\t\t= mod:NewStackAnnounce(23341, 3)\n\nlocal timerWingBuffet\t\t= mod:NewNextTimer(30, 23339, nil, nil, nil, 2) -- Fixed timer. (25m Onyxia: [2024-02-04]@[19:03:58]) - \"Wing Buffet-23339-npc:11983-134 = pull:29.97, 30.03, 30.02, 30.02\nlocal timerShadowFlameCD\t= mod:NewNextTimer(20, 22539, nil, false, nil, 5) -- 08/02/2024 Warmane Changelog: Fixed Shadow Flame timer for Firemaw. 20 seconds. Obsolete log parse will be kept for history: ~4s variance [12.68-16.58]. (25m Onyxia: [2024-02-04]@[19:03:58]) - \"Shadow Flame-22539-npc:11983-134 = pull:16.71, 16.58, 15.07, 15.49, 14.93, 16.38, 12.68\n\nfunction mod:OnCombatStart(delay)\n\ttimerShadowFlameCD:Start(-delay)\n\ttimerWingBuffet:Start(-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 23339 then\n\t\twarnWingBuffet:Show()\n\t\ttimerWingBuffet:Start()\n\telseif spellId == 22539 then\n\t\twarnShadowFlame:Show()\n\t\ttimerShadowFlameCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED_DOSE(args)\n\tlocal spellId = args.spellId\n\tif spellId == 23341 and args:IsPlayer() then\n\t\tlocal amount = args.amount or 1\n\t\tif (amount >= 4) and (amount % 2 == 0) then--Starting at 4, every even amount warn stack\n\t\t\twarnFlameBuffet:Show(amount)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-BWL/Flamegor.lua",
    "content": "local mod\t= DBM:NewMod(\"Flamegor\", \"DBM-BWL\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11981)\nmod:SetEncounterID(615)\nmod:SetModelID(6377)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 23339 22539\",\n\t\"SPELL_CAST_SUCCESS 23342\",\n\t\"SPELL_AURA_APPLIED 23342\",\n\t\"SPELL_AURA_REMOVED 23342\"\n)\n\n--(ability.id = 23339 or ability.id = 22539) and type = \"begincast\" or ability.id = 23342 and type = \"cast\"\nlocal warnWingBuffet\t\t= mod:NewCastAnnounce(23339, 2)\nlocal warnShadowFlame\t\t= mod:NewCastAnnounce(22539, 2)\nlocal warnFrenzy\t\t\t= mod:NewSpellAnnounce(23342, 3, nil, \"Tank|RemoveEnrage|Healer\", 4)\n\nlocal specWarnFrenzy\t\t= mod:NewSpecialWarningDispel(23342, \"RemoveEnrage\", nil, nil, 1, 6)\n\nlocal timerWingBuffet\t\t= mod:NewNextTimer(30, 23339, nil, nil, nil, 2) -- Fixed timer. (25m Onyxia: [2024-02-04]@[19:03:58] || [2024-02-25]@[19:27:42]) - \"Wing Buffet-23339-npc:11981-357 = pull:31.79, 30.02\" || \"Wing Buffet-23339-npc:11981-357 = pull:29.99, 30.02\nlocal timerShadowFlameCD\t= mod:NewNextTimer(20, 22539, nil, false, nil, 5) -- 08/02/2024 Warmane Changelog: Fixed Shadow Flame timer for Flamegor. 20 seconds. Obsolete log parse will be kept for history: ~5s variance [12.55-17.44]. (25m Onyxia: [2024-02-04]@[19:03:58]) - \"Shadow Flame-22539-npc:11981-357 = pull:17.22, 12.55, 17.03, 17.74\"\nlocal timerFrenzy\t\t\t= mod:NewBuffActiveTimer(10, 23342, nil, \"Tank|RemoveEnrage|Healer\", 4, 5, nil, DBM_COMMON_L.ENRAGE_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerShadowFlameCD:Start(-delay)\n\ttimerWingBuffet:Start(-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)--did not see ebon use any of these abilities\n\tlocal spellId = args.spellId\n\tif spellId == 23339 then\n\t\twarnWingBuffet:Show()\n\t\ttimerWingBuffet:Start()\n\telseif spellId == 22539 then\n\t\twarnShadowFlame:Show()\n\t\ttimerShadowFlameCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 23342 and args:IsSrcTypeHostile() then\n\t\tif self.Options.SpecWarn23342dispel then\n\t\t\tspecWarnFrenzy:Show(args.sourceName)\n\t\t\tspecWarnFrenzy:Play(\"enrage\")\n\t\telse\n\t\t\twarnFrenzy:Show()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)--did not see ebon use any of these abilities\n\tlocal spellId = args.spellId\n\tif spellId == 23342 then\n\t\ttimerFrenzy:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)--did not see ebon use any of these abilities\n\tlocal spellId = args.spellId\n\tif spellId == 23342 then\n\t\ttimerFrenzy:Stop()\n\tend\nend\n"
  },
  {
    "path": "DBM-BWL/Nefarian.lua",
    "content": "local mod\t= DBM:NewMod(\"Nefarian-Classic\", \"DBM-BWL\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11583)\nmod:SetEncounterID(617)\nmod:SetModelID(11380)\nmod:RegisterCombat(\"combat_yell\", L.YellP1)--ENCOUNTER_START appears to fire when he lands, so start of phase 2, ignoring all of phase 1\nmod:SetWipeTime(50)--guesswork\nmod:SetHotfixNoticeRev(20240208000000)\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 22539 22686\",\n\t\"SPELL_AURA_APPLIED 22687 22667\",\n\t\"UNIT_DIED\",\n\t\"UNIT_HEALTH boss1 mouseover target\"\n)\n\nlocal WarnAddsLeft\t\t\t= mod:NewAnnounce(\"WarnAddsLeft\", 2, \"136116\")\nlocal warnClassCall\t\t\t= mod:NewAnnounce(\"WarnClassCall\", 3, \"136116\")\nlocal warnPhase\t\t\t\t= mod:NewPhaseChangeAnnounce()\nlocal warnPhase3Soon\t\t= mod:NewPrePhaseAnnounce(3)\nlocal warnShadowFlame\t\t= mod:NewCastAnnounce(22539, 2)\nlocal warnFear\t\t\t\t= mod:NewCastAnnounce(22686, 2)\n\nlocal specwarnShadowCommand\t= mod:NewSpecialWarningTarget(22667, nil, nil, 2, 1, 2)\nlocal specwarnVeilShadow\t= mod:NewSpecialWarningDispel(22687, \"RemoveCurse\", nil, nil, 1, 2)\nlocal specwarnClassCall\t\t= mod:NewSpecialWarning(\"specwarnClassCall\", nil, nil, nil, 1, 2)\n\nlocal timerPhase\t\t\t= mod:NewPhaseTimer(15)\nlocal timerClassCall\t\t= mod:NewTimer(30, \"TimerClassCall\", \"136116\", nil, nil, 5)\nlocal timerFearNext\t\t\t= mod:NewCDTimer(26.7, 22686, nil, nil, nil, 2)--26-42.5\n\nmod.vb.addLeft = 42\nlocal addsGuidCheck = {}\nlocal firstBossMod = DBM:GetModByName(\"Razorgore\")\n\nfunction mod:OnCombatStart()\n\ttable.wipe(addsGuidCheck)\n\tself.vb.addLeft = 42\n\tself:SetStage(1)\nend\n\nfunction mod:OnCombatEnd(wipe)\n\tif not wipe then\n\t\tDBT:CancelBar(DBM_CORE_L.SPEED_CLEAR_TIMER_TEXT)\n\t\tif firstBossMod.vb.firstEngageTime then\n\t\t\tlocal thisTime = time() - firstBossMod.vb.firstEngageTime\n\t\t\tif thisTime and thisTime > 0 then\n\t\t\t\tif not firstBossMod.Options.FastestClear then\n\t\t\t\t\t--First clear, just show current clear time\n\t\t\t\t\tDBM:AddMsg(DBM_CORE_L.RAID_DOWN:format(\"BWL\", DBM:strFromTime(thisTime)))\n\t\t\t\t\tfirstBossMod.Options.FastestClear = thisTime\n\t\t\t\telseif (firstBossMod.Options.FastestClear > thisTime) then\n\t\t\t\t\t--Update record time if this clear shorter than current saved record time and show users new time, compared to old time\n\t\t\t\t\tDBM:AddMsg(DBM_CORE_L.RAID_DOWN_NR:format(\"BWL\", DBM:strFromTime(thisTime), DBM:strFromTime(firstBossMod.Options.FastestClear)))\n\t\t\t\t\tfirstBossMod.Options.FastestClear = thisTime\n\t\t\t\telse\n\t\t\t\t\t--Just show this clear time, and current record time (that you did NOT beat)\n\t\t\t\t\tDBM:AddMsg(DBM_CORE_L.RAID_DOWN_L:format(\"BWL\", DBM:strFromTime(thisTime), DBM:strFromTime(firstBossMod.Options.FastestClear)))\n\t\t\t\tend\n\t\t\tend\n\t\t\tfirstBossMod.vb.firstEngageTime = nil\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 22539 then\n\t\twarnShadowFlame:Show()\n\telseif spellId == 22686 then\n\t\twarnFear:Show()\n\t\ttimerFearNext:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 22687 then\n\t\tif self:CheckDispelFilter(\"curse\") then\n\t\t\tspecwarnVeilShadow:Show(args.destName)\n\t\t\tspecwarnVeilShadow:Play(\"dispelnow\")\n\t\tend\n\telseif spellId == 22667 then\n\t\tspecwarnShadowCommand:Show(args.destName)\n\t\tspecwarnShadowCommand:Play(\"findmc\")\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal guid = args.destGUID\n\tlocal cid = self:GetCIDFromGUID(guid)\n\tif cid == 14264 or cid == 14263 or cid == 14261 or cid == 14265 or cid == 14262 or cid == 14302 then--Red, Bronze, Blue, Black, Green, Chromatic\n\t\tif not addsGuidCheck[guid] then\n\t\t\taddsGuidCheck[guid] = true\n\t\t\tself.vb.addLeft = self.vb.addLeft - 1\n\t\t\t--40, 35, 30, 25, 20, 15, 12, 9, 6, 3\n\t\t\tif self.vb.addLeft >= 15 and (self.vb.addLeft % 5 == 0) or self.vb.addLeft >= 1 and (self.vb.addLeft % 3 == 0) then\n\t\t\t\tWarnAddsLeft:Show(self.vb.addLeft)\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif UnitHealth(uId) / UnitHealthMax(uId) <= 0.25 and self:GetUnitCreatureId(uId) == 11583 and self.vb.phase < 2.5 then\n\t\twarnPhase3Soon:Show()\n\t\tself:SetStage(2.5)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.YellDK or msg:find(L.YellDK) then\n\t\tself:SendSync(\"ClassCall\", \"DEATHKNIGHT\")\n\telseif msg == L.YellDruid or msg:find(L.YellDruid) then\n\t\tself:SendSync(\"ClassCall\", \"DRUID\")\n\telseif msg == L.YellHunter or msg:find(L.YellHunter) then\n\t\tself:SendSync(\"ClassCall\", \"HUNTER\")\n\telseif msg == L.YellWarlock or msg:find(L.YellWarlock) then\n\t\tself:SendSync(\"ClassCall\", \"WARLOCK\")\n\telseif msg == L.YellMage or msg:find(L.YellMage) then\n\t\tself:SendSync(\"ClassCall\", \"MAGE\")\n\telseif msg == L.YellPaladin or msg:find(L.YellPaladin) then\n\t\tself:SendSync(\"ClassCall\", \"PALADIN\")\n\telseif msg == L.YellPriest or msg:find(L.YellPriest) then\n\t\tself:SendSync(\"ClassCall\", \"PRIEST\")\n\telseif msg == L.YellRogue or msg:find(L.YellRogue) then\n\t\tself:SendSync(\"ClassCall\", \"ROGUE\")\n\telseif msg == L.YellShaman or msg:find(L.YellShaman) then\n\t\tself:SendSync(\"ClassCall\", \"SHAMAN\")\n\telseif msg == L.YellWarrior or msg:find(L.YellWarrior) then\n\t\tself:SendSync(\"ClassCall\", \"WARRIOR\")\n\telseif msg == L.YellP2 or msg:find(L.YellP2) then\n\t\tself:SendSync(\"Phase\", 2)\n\telseif msg == L.YellP3 or msg:find(L.YellP3) then\n\t\tself:SendSync(\"Phase\", 3)\n\tend\nend\n\ndo\n\tlocal playerClass = UnitClass(\"player\")\n\n\tfunction mod:OnSync(msg, arg, sender)\n\t\tif msg == \"Phase\" and sender then\n\t\t\tlocal phase = tonumber(arg) or 0\n\t\t\tif phase == 2 then\n\t\t\t\tself:SetStage(2)\n\t\t\t\ttimerPhase:Start(15)--15 til encounter start fires, not til actual land?\n\t\t\t\t--timerFearNext:Start(46.6)\n\t\t\telseif phase == 3 then\n\t\t\t\tself:SetStage(3)\n\t\t\tend\n\t\t\twarnPhase:Show(DBM_CORE_L.AUTO_ANNOUNCE_TEXTS.stage:format(arg))\n\t\tend\n\t\tif not self:IsInCombat() then return end\n\t\tif msg == \"ClassCall\" and sender then\n\t\t\tlocal className = LOCALIZED_CLASS_NAMES_MALE[arg]\n\t\t\tif playerClass == className then\n\t\t\t\tspecwarnClassCall:Show()\n\t\t\t\tspecwarnClassCall:Play(\"targetyou\")\n\t\t\telse\n\t\t\t\twarnClassCall:Show(className)\n\t\t\tend\n\t\t\ttimerClassCall:Start(30, className)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-BWL/Razorgore.lua",
    "content": "local mod\t= DBM:NewMod(\"Razorgore\", \"DBM-BWL\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(12435, 99999)--Bogus detection to prevent invalid kill detection if razorgore happens to die in phase 1\nmod:SetEncounterID(610)\n--mod:DisableEEKillDetection()--So disable only EE\nmod:SetModelID(12435)\n\nmod:RegisterCombat(\"yell\", L.YellPull)\nmod:SetWipeTime(180)--guesswork\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 22425\",\n\t\"SPELL_CAST_SUCCESS 23040 19873\",\n\t\"SPELL_AURA_APPLIED 23023\",\n--\t\"CHAT_MSG_MONSTER_EMOTE\",\n\t\"UNIT_DIED\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1\"\n)\n\n--ability.id = 22425 and type = \"begincast\" or (ability.id = 23040 or ability.id = 19873) and type = \"cast\"\nlocal warnPhase2\t\t\t= mod:NewPhaseAnnounce(2)\nlocal warnFireballVolley\t= mod:NewCastAnnounce(22425, 3)\nlocal warnConflagration\t\t= mod:NewTargetAnnounce(23023, 2)\nlocal warnEggsLeft\t\t\t= mod:NewCountAnnounce(19873, 1)\n\nlocal specWarnFireballVolley= mod:NewSpecialWarningMoveTo(22425, false, nil, nil, 2, 2)\n\nlocal timerAddsSpawn\t\t= mod:NewTimer(47, \"TimerAddsSpawn\", 19879, nil, nil, 1)--Only for start of adds, not adds after the adds.\n\nmod:AddSpeedClearOption(\"BWL\", true)\n\nmod.vb.eggsLeft = 30\nmod.vb.firstEngageTime = nil\nlocal destroyEggName = DBM:GetSpellInfo(19873)\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\ttimerAddsSpawn:Start(-delay)\n\tself.vb.eggsLeft = 30\n\tif not self.vb.firstEngageTime then\n\t\tself.vb.firstEngageTime = time()\n\t\tif self.Options.FastestClear and self.Options.SpeedClearTimer then\n\t\t\t--Custom bar creation that's bound to core, not mod, so timer doesn't stop when mod stops it's own timers\n\t\t\tDBT:CreateBar(self.Options.FastestClear, DBM_CORE_L.SPEED_CLEAR_TIMER_TEXT, \"Interface\\\\Icons\\\\Spell_Nature_TimeStop\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 22425 and args:IsDestTypePlayer() then\n\t\tif self.Options.SpecWarn22425moveto then\n\t\t\tspecWarnFireballVolley:Show(DBM_COMMON_L.BREAK_LOS)\n\t\t\tspecWarnFireballVolley:Play(\"findshelter\")\n\t\telse\n\t\t\twarnFireballVolley:Show()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 23040 and self.vb.phase < 2 then\n\t\twarnPhase2:Show()\n\t\tself:SetStage(2)\n\t--This may not be accurate, it depends on how large expanded combat log range is\n\telseif spellId == 19873 then\n\t\tDBM:AddMsg(\"Destroy Egg SPELL_CAST_SUCCESS unhidden from combat log. Notify Zidras on Discord or GitHub\")\n--\t\tself.vb.eggsLeft = self.vb.eggsLeft - 1\n--\t\twarnEggsLeft:Show(string.format(\"%d/%d\",30-self.vb.eggsLeft,30))\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 23023 and args:IsDestTypePlayer() then\n\t\twarnConflagration:CombinedShow(0.3, args.destName)\n\tend\nend\n\n--[[function mod:CHAT_MSG_MONSTER_EMOTE(msg)\n\tif (msg == L.Phase2Emote or msg:find(L.Phase2Emote)) and self.vb.phase < 2 then\n\t\tself:SendSync(\"Phase2\")\n\tend\nend]]\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 12435 then--Only trigger kill for unit_died if he dies in phase 2 with everyone alive, otherwise it's an auto wipe.\n\t\tif DBM:NumRealAlivePlayers() > 0 and self.vb.phase == 2 then\n\t\t\tDBM:EndCombat(self)\n\t\telse\n\t\t\tDBM:EndCombat(self, true)--Pass wipe arg end combat\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == destroyEggName then\n\t\tself.vb.eggsLeft = self.vb.eggsLeft - 1\n\t\twarnEggsLeft:Show(string.format(\"%d/%d\",30-self.vb.eggsLeft,30))\n\tend\nend\n\n--[[function mod:OnSync(msg)\n\tif msg == \"Phase2\" and self.vb.phase < 2 then\n\t\twarnPhase2:Show()\n\t\tself:SetStage(2)\n\tend\nend]]\n"
  },
  {
    "path": "DBM-BWL/TalonGuards.lua",
    "content": "local mod\t= DBM:NewMod(\"TalonGuards\", \"DBM-BWL\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20240708001905\")\nmod:SetCreatureID(12460, 12461, 99999)--99999 to prevent mod from ending combat after one of each talon guard type die. Mod will effectively ALWAYS wipe, but it has disabled stats/reporting so irrelevant\nmod:SetModelID(12460)\nmod:RegisterCombat(\"combat\")\nmod.noStatistics = true\n\nlocal warnVuln\t\t\t= mod:NewAnnounce(\"WarnVulnerable\", 1, false)\n\n--mod:AddNamePlateOption(\"NPAuraOnVulnerable\", 22277)\n\nlocal vulnerabilities = {\n\t-- [guid] = school\n}\n--redudnant, but fuck it, the code in this mod is already shit\nlocal lastAnnounce = {\n\t-- [guid] = school\n}\n\n--Constants\nlocal vulnMobs = {\n\t[12460] = true,--\"Death Talon Wyrmguard\"\n\t[12461] = true,--\"Death Talon Overseer\"\n}\n\n-- https://wow.gamepedia.com/COMBAT_LOG_EVENT\nlocal spellInfo = {\n\t[2] =\t{\"Holy\",\t{r=255, g=230, b=128},\t\"585\"},-- Smite\n\t[4] =\t{\"Fire\",\t{r=255, g=128, b=0},\t\"11366\"},-- Pyroblast\n\t[8] =\t{\"Nature\",\t{r=77, g=255, b=77},\t\"5176\"},-- Wrath\n\t[16] =\t{\"Frost\",\t{r=128, g=255, b=255},\t\"116\"},-- Frostbolt\n\t[32] =\t{\"Shadow\",\t{r=128, g=128, b=255},\t\"686\"},-- Shadow Bolt\n\t[64] =\t{\"Arcane\",\t{r=255, g=128, b=255},\t\"5143\"},-- Arcane Missiles\n}\n\nlocal vulnSpells = {\n\t--No Holy?\n\t[22277] = 4,--Fire\n\t[22280] = 8,--Nature\n\t[22278] = 16,--Frost\n\t[22279] = 32,--Shadow\n\t[22281] = 64,--Arcane\n}\n\n--Local Functions\n-- in theory this should only alert on a new vulnerability on your target or when you change target\nlocal function update_vulnerability(self)\n\tlocal target = UnitGUID(\"target\") or \"\"\n\tlocal spellSchool = vulnerabilities[target]\n\tlocal cid = self:GetCIDFromGUID(target)\n\tif not spellSchool or not vulnMobs[cid] then\n\t\treturn\n\tend\n\n\tlocal info = spellInfo[spellSchool]\n\tif not info then return end\n\tlocal name = L[info[1]] or info[1]\n\n\tif not lastAnnounce[target] or lastAnnounce[target] ~= name then\n\t\twarnVuln.icon = info[3]\n\t\twarnVuln:Show(name)\n\t\tlastAnnounce[target] = name\n--\t\tif self.Options.NPAuraOnVulnerable then\n--\t\t\tDBM.Nameplate:Hide(true, target, 22277, 135924)\n--\t\t\tDBM.Nameplate:Hide(true, target, 22277, 135808)\n--\t\t\tDBM.Nameplate:Hide(true, target, 22277, 136006)\n--\t\t\tDBM.Nameplate:Hide(true, target, 22277, 135846)\n--\t\t\tDBM.Nameplate:Hide(true, target, 22277, 136197)\n--\t\t\tDBM.Nameplate:Hide(true, target, 22277, 136096)\n--\t\t\tDBM.Nameplate:Show(true, target, 22277, tonumber(info[3]))\n--\t\tend\n\tend\nend\n\nlocal function check_spell_damage(self, guid, amount, spellSchool, critical)\n\tlocal cid = self:GetCIDFromGUID(guid)\n\tif cid ~= 12460 and cid ~= 12461 then\n\t\treturn\n\tend\n\tif amount > (critical and 1600 or 800) then\n\t\tif not vulnerabilities[guid] or vulnerabilities[guid] ~= spellSchool then\n\t\t\tvulnerabilities[guid] = spellSchool\n\t\t\tupdate_vulnerability(self)\n\t\tend\n\tend\nend\n\nlocal function check_target_vulns(self)\n\tlocal target = UnitGUID(\"target\")\n\tlocal cid = self:GetCIDFromGUID(target)\n\tif not vulnMobs[cid] then\n\t\treturn\n\tend\n\n\tlocal spellId = select(11, DBM:UnitBuff(\"target\", 22277, 22280, 22278, 22279, 22281)) or 0\n\tlocal vulnSchool = vulnSpells[spellId]\n\tif vulnSchool then\n\t\treturn check_spell_damage(self, target, 10000, vulnSchool)\n\tend\nend\n\nfunction mod:OnCombatStart()\n\ttable.wipe(vulnerabilities)\n\tif self.Options.WarnVulnerable then--Don't register high cpu combat log events if option isn't enabled\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"SPELL_DAMAGE\",\n\t\t\t\"PLAYER_TARGET_CHANGED\"\n\t\t)\n\t\tcheck_target_vulns(self)\n--\t\tif self.Options.NPAuraOnVulnerable then\n--\t\t\tDBM:FireEvent(\"BossMod_EnableHostileNameplates\")\n--\t\tend\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\ttable.wipe(vulnerabilities)\n\tself:UnregisterShortTermEvents()\n--\tif self.Options.NPAuraOnVulnerable  then\n--\t\tDBM.Nameplate:Hide(true, nil, nil, nil, true, true)--isGUID, unit, spellId, texture, force, isHostile, isFriendly\n--\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, _, _, spellSchool, amount, _, _, _, _, _, critical)\n\tcheck_spell_damage(self, destGUID, amount, spellSchool, critical)\nend\n\nfunction mod:PLAYER_TARGET_CHANGED()\n\tcheck_target_vulns(self)\nend\n"
  },
  {
    "path": "DBM-BWL/Vaelastrasz.lua",
    "content": "local mod\t= DBM:NewMod(\"Vaelastrasz\", \"DBM-BWL\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(13020)\nmod:SetEncounterID(611)\nmod:SetModelID(13992)\nmod:SetUsedIcons(8, 7, 6)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 23461\",\n\t\"SPELL_CAST_SUCCESS 18173\",\n\t\"SPELL_AURA_APPLIED 18173\",\n\t\"SPELL_AURA_REMOVED 18173\"\n)\n\nlocal warnBreath\t\t\t= mod:NewCastAnnounce(23461, 2, nil, nil, \"Tank\", 2)\nlocal warnAdrenaline\t\t= mod:NewTargetNoFilterAnnounce(18173, 2)\n\nlocal specWarnAdrenaline\t= mod:NewSpecialWarningYou(18173, nil, nil, nil, 1, 2)\nlocal specWarnAdrenalineOut\t= mod:NewSpecialWarningMoveAway(18173, nil, nil, nil, 1, 2)\nlocal yellAdrenaline\t\t= mod:NewYell(18173, nil, false)\nlocal yellAdrenalineFades\t= mod:NewShortFadesYell(18173)\n\nlocal timerAdrenalineCD\t\t= mod:NewCDTimer(15.05, 18173, nil, nil, nil, 3) -- REVIEW! variance? (25m Onyxia: [2024-02-04]@[19:03:58]) - \"Burning Adrenaline-23620-npc:13020-127 = pull:16.97, 15.05\nlocal timerAdrenaline\t\t= mod:NewTargetTimer(20, 18173, nil, nil, nil, 3)\nlocal timerCombatStart\t\t= mod:NewCombatTimer(44.08) -- [IEEU-YELL] - 770.50-726.42\n\nmod:AddSetIconOption(\"SetIconOnDebuffTarget2\", 18173, true, false, {8, 7, 6})\n\nmod.vb.debuffIcon = 8\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.debuffIcon = 8\n\ttimerAdrenalineCD:Start(16.97-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 23461 then\n\t\twarnBreath:Show()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 18173 then\n\t\ttimerAdrenalineCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 18173 then\n\t\ttimerAdrenaline:Start(args.destName)\n\t\tif self.Options.SetIconOnDebuffTarget2 then\n\t\t\tself:SetIcon(args.destName, self.vb.debuffIcon)\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnAdrenaline:Show()\n\t\t\tspecWarnAdrenaline:Play(\"targetyou\")\n\t\t\tyellAdrenaline:Yell()\n\t\t\tspecWarnAdrenalineOut:Schedule(15)\n\t\t\tspecWarnAdrenalineOut:ScheduleVoice(15, \"runout\")\n\t\t\tyellAdrenalineFades:Countdown(20)\n\t\telse\n\t\t\twarnAdrenaline:Show(args.destName)\n\t\tend\n\t\tself.vb.debuffIcon = self.vb.debuffIcon - 1\n\t\tif self.vb.debuffIcon == 5 then\n\t\t\tself.vb.debuffIcon = 8\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 18173 then\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnAdrenalineOut:Cancel()\n\t\t\tspecWarnAdrenalineOut:CancelVoice()\n\t\t\tyellAdrenalineFades:Cancel()\n\t\tend\n\t\tif self.Options.SetIconOnDebuffTarget2 then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\t\ttimerAdrenaline:Stop(args.destName)\n\tend\nend\n\n--\"<726.42 19:16:04> [CHAT_MSG_MONSTER_YELL] Too late, friends! Nefarius' corruption has taken hold...I cannot...control myself.\\n#Vaelastrasz the Corrupt#####0#0##0#4985##0#\"\n--\"<8.85 19:59:36> [CHAT_MSG_MONSTER_YELL] I beg you, mortals - FLEE! Flee before I lose all sense of control! The black fire rages within my heart! I MUST- release it! #Vaelastrasz the Corrupt###Adornment##0#0##0#13862#nil#0#false#false#\n--\"<28.25 19:59:55> [CHAT_MSG_MONSTER_YELL] FLAME! DEATH! DESTRUCTION! Cower, mortals before the wrath of Lord...NO - I MUST fight this! Alexstrasza help me, I MUST fight it! #Vaelastrasz the Corrupt###Adornment\n--\"<38.98 20:00:06> [ENCOUNTER_START] 611#Vaelastrasz the Corrupt#9#40\", -- [152]\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.Event or msg:find(L.Event) then\n\t\tself:SendSync(\"PullRP\")\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif msg == \"PullRP\" then\n\t\ttimerCombatStart:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-BWL/localization.cn.lua",
    "content": "--Mini Dragon (projecteurs[at]gmail.com)\n--Last update: 2020/5/24\n\nif GetLocale() ~= \"zhCN\" then return end\nlocal L\n\n-----------------\n--  Razorgore  --\n-----------------\nL = DBM:GetModLocalization(\"Razorgore\")\n\nL:SetGeneralLocalization({\n\tname = \"狂野的拉佐格尔\"\n})\n\nL:SetTimerLocalization({\n\tTimerAddsSpawn\t= \"小怪重生\"\n})\n\nL:SetOptionLocalization({\n\tTimerAddsSpawn\t= \"为第一次小怪重生显示计时器\"\n})\n\nL:SetMiscLocalization({\n\tPhase2Emote\t= \"在宝珠的控制力消失的瞬间，%s逃走了。\",\n\tYellPull\t= \"入侵者闯进了孵化间！我们要不惜一切代价保护龙蛋！\"\n})\n\n-------------------\n--  Vaelastrasz  --\n-------------------\nL = DBM:GetModLocalization(\"Vaelastrasz\")\n\nL:SetGeneralLocalization({\n\tname\t= \"堕落的瓦拉斯塔茲\"\n})\n\nL:SetMiscLocalization({\n\tEvent\t= \"太晚了，朋友们！奈法利安的堕落力量已经生效……我无法……控制自己。\"\n})\n\n-----------------\n--  Broodlord  --\n-----------------\nL = DBM:GetModLocalization(\"Broodlord\")\n\nL:SetGeneralLocalization({\n\tname\t= \"勒什雷尔\"\n})\n\nL:SetMiscLocalization({\n\tPull\t= \"你怎么进来的？你们这种生物不能进来！我要毁灭你们！\"\n})\n\n---------------\n--  Firemaw  --\n---------------\nL = DBM:GetModLocalization(\"Firemaw\")\n\nL:SetGeneralLocalization({\n\tname = \"费尔默\"\n})\n\n---------------\n--  Ebonroc  --\n---------------\nL = DBM:GetModLocalization(\"Ebonroc\")\n\nL:SetGeneralLocalization({\n\tname = \"埃博诺克\"\n})\n\n----------------\n--  Flamegor  --\n----------------\nL = DBM:GetModLocalization(\"Flamegor\")\n\nL:SetGeneralLocalization({\n\tname = \"弗莱格尔\"\n})\n\n-----------------------\n--  Vulnerabilities  --\n-----------------------\n-- Chromaggus, Death Talon Overseer and Death Talon Wyrmguard\nL = DBM:GetModLocalization(\"TalonGuards\")\n\nL:SetGeneralLocalization({\n\tname = \"龙人护卫\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t\t= \"%s易伤\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable\t\t= \"为法术易伤显示提示\"\n})\n\nL:SetMiscLocalization({\n\tFire\t\t= \"火焰\",\n\tNature\t\t= \"自然\",\n\tFrost\t\t= \"冰霜\",\n\tShadow\t\t= \"暗影\",\n\tArcane\t\t= \"奥术\",\n\tHoly\t\t= \"神圣\"\n})\n\n------------------\n--  Chromaggus  --\n------------------\nL = DBM:GetModLocalization(\"Chromaggus\")\n\nL:SetGeneralLocalization({\n\tname = \"克洛玛古斯\"\n})\n\nL:SetWarningLocalization({\n\tWarnBreath\t\t= \"%s\",\n\tWarnVulnerable\t= \"%s易伤\"\n})\n\nL:SetTimerLocalization({\n\tTimerBreathCD\t= \"%s冷却\",\n\tTimerBreath\t\t= \"%s施法\",\n\tTimerVulnCD\t\t= \"易伤切换\"\n})\n\nL:SetOptionLocalization({\n\tWarnBreath\t\t= \"为克洛玛古斯其中一个吐息显示警告\",\n\tWarnVulnerable\t= \"为易伤显示警告\",\n\tTimerBreathCD\t= \"显示吐息冷却\",\n\tTimerBreath\t\t= \"显示吐息施法\",\n\tTimerVulnCD\t\t= \"显示易伤周期\"\n})\n\nL:SetMiscLocalization({\n\tBreath1\t= \"第一次吐息\",\n\tBreath2\t= \"第二次吐息\",\n\tVulnEmote\t= \"%s的皮肤闪着微光，它畏缩了。\",\n\tFire\t\t= \"火焰\",\n\tNature\t\t= \"自然\",\n\tFrost\t\t= \"冰霜\",\n\tShadow\t\t= \"暗影\",\n\tArcane\t\t= \"奥术\",\n\tHoly\t\t= \"神圣\"\n})\n\n----------------\n--  Nefarian  --\n----------------\nL = DBM:GetModLocalization(\"Nefarian-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"奈法利安\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsLeft\t\t= \"还剩%d个小怪\",\n\tWarnClassCall\t\t= \"点名%s\",\n\tspecwarnClassCall\t= \"你的职业被点名！\"\n})\n\nL:SetTimerLocalization({\n\tTimerClassCall\t\t= \"点名%s结束\"\n})\n\nL:SetOptionLocalization({\n\tTimerClassCall\t\t= \"为点名持续时间显示计时器\",\n\tWarnAddsLeft\t\t= \"通报杀死的龙兽数量，直到进入第2阶段\",\n\tWarnClassCall\t\t= \"提示职业点名\",\n\tspecwarnClassCall\t= \"警报：当你的职业被点名时显示警报。\",\n\tWarnPhase\t\t\t= \"提示阶段转换\"\n})\n\nL:SetMiscLocalization({\n\tYellP1\t\t= \"让游戏开始吧！\",\n\tYellP2\t\t= \"干得好，我的手下。凡人的勇气开始消退了！现在，让我们看看他们如何应对黑石塔的真正主人的力量！！！\",\n\tYellP3\t\t= \"不可能！出现吧，我的仆人！再次为你们的主人效力！\",\n\tYellShaman\t= \"萨满祭司，让我看看你们的图腾到底是干什么用的！\",\n\tYellPaladin\t= \"圣骑士……听说你们有无数条命。让我看看到底是怎么样的吧。\",\n\tYellDruid\t= \"德鲁伊和你们愚蠢的变形法术。让我们看看有什么事情会发生吧！\",\n\tYellPriest\t= \"牧师们！如果你们要继续这么治疗的话，那我们就来玩点有趣的东西吧！\",\n\tYellWarrior\t= \"战士们，我知道你们可以更加勇猛！让我们见识一下！\",\n\tYellRogue\t= \"潜行者？不要躲躲藏藏了，勇敢地面对我吧！\",\n\tYellWarlock\t= \"术士们，不要随便去尝试那些你们根本不理解的法术。看到后果了吧？\",\n\tYellHunter\t= \"猎人们，还有你们那些讨厌的玩具枪！\",\n\tYellMage\t= \"你们也是法师？小心别玩火自焚……\",\n\tYellDK\t\t= \"死亡骑士们……到这儿来！\"\n})\n"
  },
  {
    "path": "DBM-BWL/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n-----------------\n--  Razorgore  --\n-----------------\nL = DBM:GetModLocalization(\"Razorgore\")\n\nL:SetGeneralLocalization({\n\tname = \"Razorgore der Ungezähmte\"\n})\n\nL:SetTimerLocalization({\n\tTimerAddsSpawn\t= \"Adds erscheinen\"\n})\n\nL:SetOptionLocalization({\n\tTimerAddsSpawn\t= \"Zeige Zeit bis die ersten Adds erscheinen\"\n})\n\nL:SetMiscLocalization({\n\tPhase2Emote\t= \"flieht während die kontrollierenden Kräfte der Kugel schwinden.\",\n\tYellPull\t= \"Eindringlinge sind in die Brutstätte vorgestoßen! Schlagt Alarm! Beschützt die Eier um jeden Preis!\"\n})\n\n-------------------\n--  Vaelastrasz  --\n-------------------\nL = DBM:GetModLocalization(\"Vaelastrasz\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"Vaelastrasz der Verdorbene\"\n})\n\nL:SetMiscLocalization({\n\tEvent\t\t\t\t= \"Zu spät, Freunde! Nefarius üble Macht wirkt bereits... Ich habe mich nicht... nicht mehr unter Kontrolle..\"\n})\n\n-----------------\n--  Broodlord  --\n-----------------\nL = DBM:GetModLocalization(\"Broodlord\")\n\nL:SetGeneralLocalization({\n\tname\t= \"Brutwächter Dreschbringer\"\n})\n\nL:SetMiscLocalization({\n\tPull\t= \"Euresgleichen sollte nicht hier sein! Ich werde Euch vernichten!\"\n})\n\n---------------\n--  Firemaw  --\n---------------\nL = DBM:GetModLocalization(\"Firemaw\")\n\nL:SetGeneralLocalization({\n\tname = \"Feuerschwinge\"\n})\n\n---------------\n--  Ebonroc  --\n---------------\nL = DBM:GetModLocalization(\"Ebonroc\")\n\nL:SetGeneralLocalization({\n\tname = \"Schattenschwinge\"\n})\n\n----------------\n--  Flamegor  --\n----------------\nL = DBM:GetModLocalization(\"Flamegor\")\n\nL:SetGeneralLocalization({\n\tname = \"Flammenmaul\"\n})\n\n-----------------------\n--  Vulnerabilities  --\n-----------------------\n-- Chromaggus, Death Talon Overseer and Death Talon Wyrmguard\nL = DBM:GetModLocalization(\"TalonGuards\")\n\nL:SetGeneralLocalization({\n\tname = \"Todeskrallenwache\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable = \"%sverwundbarkeit\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable = \"Zeige Warnung für Zauberverwundbarkeit\"\n})\n\nL:SetMiscLocalization({\n\tFire = \"Feuer\",\n\tNature = \"Natur\",\n\tFrost = \"Frost\",\n\tShadow = \"Schatten\",\n\tArcane = \"Arkan\",\n\tHoly = \"Heilig\"\n})\n\n------------------\n--  Chromaggus  --\n------------------\nL = DBM:GetModLocalization(\"Chromaggus\")\n\nL:SetGeneralLocalization({\n\tname = \"Chromaggus\"\n})\n\nL:SetWarningLocalization({\n\tWarnBreath = \"%s\",\n\tWarnVulnerable = \"%sverwundbarkeit\"\n})\n\nL:SetTimerLocalization({\n\tTimerBreathCD = \"Abklingzeit der %s\",\n\tTimerBreath = \"%s Zauber\",\n\tTimerVulnCD = \"Abklingzeit der Verwundbarkeit\"\n})\n\nL:SetOptionLocalization({\n\tWarnBreath = \"Zeige Warnung, wenn Chromaggus einen seiner Atem wirkt\",\n\tWarnVulnerable = \"Zeige Warnung für Zauberverwundbarkeit\",\n\tTimerBreathCD = \"Abklingzeit des Atem anzeigen\",\n\tTimerBreath = \"Zeige Atem Zauber\",\n\tTimerVulnCD = \"Zeige Abklingzeit der Verwundbarkeit\"\n})\n\nL:SetMiscLocalization({\n\tBreath1 = \"Erster Atem\",\n\tBreath2 = \"Zweiter Atem\",\n\tVulnEmote = \"%s weicht zurück, als die Haut schimmert.\",\n\tVuln = \"Verwundbarkeit\",\n\tFire = \"Feuer\",\n\tNature = \"Natur\",\n\tFrost = \"Frost\",\n\tShadow = \"Schatten\",\n\tArcane = \"Arkan\",\n\tHoly = \"Heilig\"\n})\n\n----------------\n--  Nefarian  --\n----------------\nL = DBM:GetModLocalization(\"Nefarian-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Nefarian\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsLeft = \"%d ausstehende Tötungen\",\n\tWarnClassCall = \"%s Ruf\",\n\tspecwarnClassCall = \"Klassenruf auf Dir!\"\n})\n\nL:SetTimerLocalization({\n\tTimerClassCall = \"%s Ruf endet\"\n})\n\nL:SetOptionLocalization({\n\tTimerClassCall = \"Dauer der Klassenrufe anzeigen\",\n\tWarnAddsLeft = \"Kündige verbleibend Tötungen an bis 2 Phase ausgelöst ist.\",\n\tWarnClassCall = \"Verkünde Klassenrufe\",\n\tspecwarnClassCall = \"Zeige besondere Warnung wenn Du von einem Klassenruf betroffen bist\"\n})\n\nL:SetMiscLocalization({\n\tYellP1\t\t= \"Lasst die Spiele beginnen!\",\n\tYellP2\t\t= \"Sehr gut, meine Diener. Der Mut der Sterblichen scheint zu schwinden! Nun lasst uns sehen, wie sie sich gegen den wahren Herrscher des Schwarzfels behaupten werden!\",\n\tYellP3\t\t= \"Unmöglich! Erhebt Euch, meine Diener! Kämpft erneut für Euren Meister!\",\n\tYellShaman\t= \"Schamane, zeigt mir was eure Totems können!\",\n\tYellPaladin\t= \"Paladine... ich habe gehört, dass Ihr viele Leben habt. Zeigt es mir.\",\n\tYellDruid\t= \"Druiden und ihre lächerliche Gestaltwandlung. Zeigt mal was Ihr könnt!\",\n\tYellPriest\t= \"Priester! Wenn Ihr weiterhin so heilt, können wir es auch gerne etwas interessanter gestalten!\",\n\tYellWarrior\t= \"Krieger, Ich bin mir sicher, dass ihr kräftiger als das zuschlagen könnt! Lasst es mich sehen!\",\n\tYellRogue\t= \"Schurken? Kommt aus den Schatten und zeigt Euch!\",\n\tYellWarlock\t= \"Hexenmeister, Ihr solltet nicht mit Magie spielen, die Ihr nicht versteht. Seht Ihr was ich meine?\",\n\tYellHunter\t= \"Jäger und ihre lästigen Knallbüchsen!\",\n\tYellMage\t= \"Auch Magier? Ihr solltet vorsichtiger sein, wenn Ihr mit Magie spielt...\",\n\tYellDK\t\t= \"Todesritter... kommt hierher!\"\n})\n"
  },
  {
    "path": "DBM-BWL/localization.en.lua",
    "content": "local L\n\n-----------------\n--  Razorgore  --\n-----------------\nL = DBM:GetModLocalization(\"Razorgore\")\n\nL:SetGeneralLocalization({\n\tname = \"Razorgore the Untamed\"\n})\n\nL:SetTimerLocalization({\n\tTimerAddsSpawn\t= \"Adds spawning\"\n})\n\nL:SetOptionLocalization({\n\tTimerAddsSpawn\t= \"Show timer for first adds spawning\"\n})\n\nL:SetMiscLocalization({\n\tPhase2Emote\t= \"flee as the controlling power of the orb is drained.\",\n\tYellPull\t= \"Intruders have breached the hatchery! Sound the alarm! Protect the eggs at all costs!\\n\"\n})\n\n-------------------\n--  Vaelastrasz  --\n-------------------\nL = DBM:GetModLocalization(\"Vaelastrasz\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"Vaelastrasz the Corrupt\"\n})\n\nL:SetMiscLocalization({\n\tEvent\t\t\t\t= \"Too late, friends! Nefarius' corruption has taken hold...I cannot...control myself.\\n\"\n})\n\n-----------------\n--  Broodlord  --\n-----------------\nL = DBM:GetModLocalization(\"Broodlord\")\n\nL:SetGeneralLocalization({\n\tname\t= \"Broodlord Lashlayer\"\n})\n\nL:SetMiscLocalization({\n\tPull\t= \"None of your kind should be here!  You've doomed only yourselves!\"\n})\n\n---------------\n--  Firemaw  --\n---------------\nL = DBM:GetModLocalization(\"Firemaw\")\n\nL:SetGeneralLocalization({\n\tname = \"Firemaw\"\n})\n\n---------------\n--  Ebonroc  --\n---------------\nL = DBM:GetModLocalization(\"Ebonroc\")\n\nL:SetGeneralLocalization({\n\tname = \"Ebonroc\"\n})\n\n----------------\n--  Flamegor  --\n----------------\nL = DBM:GetModLocalization(\"Flamegor\")\n\nL:SetGeneralLocalization({\n\tname = \"Flamegor\"\n})\n\n-----------------------\n--  Vulnerabilities  --\n-----------------------\n-- Chromaggus, Death Talon Overseer and Death Talon Wyrmguard\nL = DBM:GetModLocalization(\"TalonGuards\")\n\nL:SetGeneralLocalization({\n\tname = \"Talon Guards\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t\t= \"%s Vulnerability\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable\t\t= \"Show warning for spell vulnerabilities\"\n})\n\nL:SetMiscLocalization({\n\tFire\t\t= \"Fire\",\n\tNature\t\t= \"Nature\",\n\tFrost\t\t= \"Frost\",\n\tShadow\t\t= \"Shadow\",\n\tArcane\t\t= \"Arcane\",\n\tHoly\t\t= \"Holy\"\n})\n\n------------------\n--  Chromaggus  --\n------------------\nL = DBM:GetModLocalization(\"Chromaggus\")\n\nL:SetGeneralLocalization({\n\tname = \"Chromaggus\"\n})\n\nL:SetWarningLocalization({\n\tWarnBreath\t\t= \"%s\",\n\tWarnVulnerable\t= \"%s Vulnerability\"\n})\n\nL:SetTimerLocalization({\n\tTimerBreathCD\t= \"%s CD\",\n\tTimerBreath\t\t= \"%s cast\",\n\tTimerVulnCD\t\t= \"Vulnerability CD\"\n})\n\nL:SetOptionLocalization({\n\tWarnBreath\t\t= \"Show warning when Chromaggus casts one of his Breaths\",\n\tWarnVulnerable\t= \"Show warning for spell vulnerabilities\",\n\tTimerBreathCD\t= \"Show Breath CD\",\n\tTimerBreath\t\t= \"Show Breath cast\",\n\tTimerVulnCD\t\t= \"Show Vulnerability CD\"\n})\n\nL:SetMiscLocalization({\n\tBreath1\t\t= \"First Breath\",\n\tBreath2\t\t= \"Second Breath\",\n\tVulnEmote\t= \"%s flinches as its skin shimmers.\",\n\tVuln\t\t= \"Vulnerability\",\n\tFire\t\t= \"Fire\",\n\tNature\t\t= \"Nature\",\n\tFrost\t\t= \"Frost\",\n\tShadow\t\t= \"Shadow\",\n\tArcane\t\t= \"Arcane\",\n\tHoly\t\t= \"Holy\"\n})\n\n----------------\n--  Nefarian  --\n----------------\nL = DBM:GetModLocalization(\"Nefarian-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Nefarian\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsLeft\t\t= \"%d kills remaining\",\n\tWarnClassCall\t\t= \"%s call\",\n\tspecwarnClassCall\t= \"Class call on you!\"\n})\n\nL:SetTimerLocalization({\n\tTimerClassCall\t\t= \"%s call ends\"\n})\n\nL:SetOptionLocalization({\n\tTimerClassCall\t\t= \"Show timer for class call duration\",\n\tWarnAddsLeft\t\t= \"Announce kills remaining until Stage 2 is triggered\",\n\tWarnClassCall\t\t= \"Announce class calls\",\n\tspecwarnClassCall\t= \"Show Special warning when you are affected by class call\"\n})\n\nL:SetMiscLocalization({\n\tYellP1\t\t= \"Let the games begin!\",\n\tYellP2\t\t= \"Well done, my minions. The mortals' courage begins to wane! Now, let's see how they contend with the true Lord of Blackrock Spire!!!\",\n\tYellP3\t\t= \"Impossible! Rise my minions!  Serve your master once more!\",\n\tYellShaman\t= \"Shamans, show me what your totems can do!\",\n\tYellPaladin\t= \"Paladins... I've heard you have many lives. Show me.\",\n\tYellDruid\t= \"Druids and your silly shapeshifting. Lets see it in action!\",\n\tYellPriest\t= \"Priests! If you're going to keep healing like that, we might as well make it a little more interesting!\",\n\tYellWarrior\t= \"Warriors, I know you can hit harder than that! Let's see it!\",\n\tYellRogue\t= \"Rogues? Stop hiding and face me!\",\n\tYellWarlock\t= \"Warlocks, you shouldn't be playing with magic you don't understand. See what happens?\",\n\tYellHunter\t= \"Hunters and your annoying pea-shooters!\",\n\tYellMage\t= \"Mages too? You should be more careful when you play with magic...\",\n\tYellDK\t\t= \"Death Knights... get over here!\"\n})\n"
  },
  {
    "path": "DBM-BWL/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" then return end\nlocal L\n\n-----------------\n--  Razorgore  --\n-----------------\nL = DBM:GetModLocalization(\"Razorgore\")\n\nL:SetGeneralLocalization({\n\tname = \"Sangrevaja el Indomable\"\n})\n\nL:SetTimerLocalization({\n\tTimerAddsSpawn\t= \"Primeros esbirros\"\n})\n\nL:SetOptionLocalization({\n\tTimerAddsSpawn\t= \"Mostrar temporizador para cuando aparezcan los primeros esbirros\"\n})\n\nL:SetMiscLocalization({\n\tPhase2Emote\t= \"huyen mientras se consume el poder del orbe.\",\n\tYellPull\t= \"¡Los invasores han penetrado en El Criadero! ¡Activad la alarma! ¡Hay que proteger los huevos a toda costa!\"\n})\n\n-------------------\n--  Vaelastrasz  --\n-------------------\nL = DBM:GetModLocalization(\"Vaelastrasz\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"Vaelastrasz el Corrupto\"\n})\n\nL:SetMiscLocalization({\n\tEvent\t\t\t\t= \"¡Demasiado tarde, amigos! Ahora estoy poseído por la corrupción de Nefarius... No puedo... controlarme.\"\n})\n\n-----------------\n--  Broodlord  --\n-----------------\nL = DBM:GetModLocalization(\"Broodlord\")\n\nL:SetGeneralLocalization({\n\tname\t= \"Señor de prole Capazote\"\n})\n\nL:SetMiscLocalization({\n\tPull\t= \"¡Nadie de vuestra raza debería estar aquí! ¡Os aniquilaré!\"\n})\n\n---------------\n--  Firemaw  --\n---------------\nL = DBM:GetModLocalization(\"Firemaw\")\n\nL:SetGeneralLocalization({\n\tname = \"Faucefogo\"\n})\n\n---------------\n--  Ebonroc  --\n---------------\nL = DBM:GetModLocalization(\"Ebonroc\")\n\nL:SetGeneralLocalization({\n\tname = \"Ebanorroca\"\n})\n\n----------------\n--  Flamegor  --\n----------------\nL = DBM:GetModLocalization(\"Flamegor\")\n\nL:SetGeneralLocalization({\n\tname = \"Flamagor\"\n})\n\n-----------------------\n--  Vulnerabilities  --\n-----------------------\n-- Chromaggus, Death Talon Overseer and Death Talon Wyrmguard\nL = DBM:GetModLocalization(\"TalonGuards\")\n\nL:SetGeneralLocalization({\n\tname = \"Guardias Garramortal\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t\t= \"Vulnerabilidad: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable\t\t= \"Mostrar aviso de vulnerabilidades de hechizo\"\n})\n\nL:SetMiscLocalization({\n\tFire\t\t= \"Fuego\",\n\tNature\t\t= \"Naturaleza\",\n\tFrost\t\t= \"Escarcha\",\n\tShadow\t\t= \"Sombras\",\n\tArcane\t\t= \"Arcano\",\n\tHoly\t\t= \"Sagrado\"\n})\n\n------------------\n--  Chromaggus  --\n------------------\nL = DBM:GetModLocalization(\"Chromaggus\")\n\nL:SetGeneralLocalization({\n\tname = \"Chromaggus\"\n})\n\nL:SetWarningLocalization({\n\tWarnBreath\t\t= \"%s\",\n\tWarnVulnerable\t= \"Vulnerabilidad: %s\"\n})\n\nL:SetTimerLocalization({\n\tTimerBreathCD\t= \"%s TdR\",\n\tTimerBreath\t\t= \"%s lanzamiento\",\n\tTimerVulnCD\t\t= \"TdR de Vulnerabilidad\"\n})\n\nL:SetOptionLocalization({\n\tWarnBreath\t\t= \"Mostrar aviso cuando Chromaggus lance uno de sus alientos\",\n\tWarnVulnerable\t= \"Mostrar temporizador para el tiempo de reutilización de los alientos\",\n\tTimerBreathCD\t= \"Mostrar TdR de aliento\",\n\tTimerBreath\t\t= \"Mostrar lanzamiento de aliento\",\n\tTimerVulnCD\t\t= \"Mostrar TdR de Vulnerabilidad\"\n})\n\nL:SetMiscLocalization({\n\tBreath1\t= \"Primer aliento\",\n\tBreath2\t= \"Segundo aliento\",\n\tVulnEmote\t= \"%s se estremece mientras su piel empieza a brillar.\",\n\tVuln\t\t= \"Vulnerabilidad\",\n\tFire\t\t= \"Fuego\",\n\tNature\t\t= \"Naturaleza\",\n\tFrost\t\t= \"Escarcha\",\n\tShadow\t\t= \"Sombras\",\n\tArcane\t\t= \"Arcano\",\n\tHoly\t\t= \"Sagrado\"\n})\n\n----------------\n--  Nefarian  --\n----------------\nL = DBM:GetModLocalization(\"Nefarian-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Nefarian\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsLeft\t\t= \"%d restante\",\n\tWarnClassCall\t\t= \"Llamada de %s\",\n\tspecwarnClassCall\t= \"¡Llamada de tu clase!\"\n})\n\nL:SetTimerLocalization({\n\tTimerClassCall\t\t= \"Llamada de %s termina\"\n})\n\nL:SetOptionLocalization({\n\tTimerClassCall\t\t= \"Mostrar temporizador para la duración de las llamadas en cada clase\",\n\tWarnAddsLeft\t\t= \"Anunciar muertes restante hasta Fase 2\",\n\tWarnClassCall\t\t= \"Mostrar aviso para las llamadas de clase\",\n\tspecwarnClassCall\t= \"Mostrar aviso especial cuando se ve afectado por la llamada de clase\"\n})\n\nL:SetMiscLocalization({\n\tYellP1\t\t= \"¡Que comiencen los juegos!\",\n\tYellP2\t\t= \"Bien hecho, mis esbirros. El coraje de los mortales empieza a mermar. ¡Veamos ahora cómo se enfrentan al verdadero Señor de la Cumbre de Roca Negra!\",\n\tYellP3\t\t= \"¡Imposible! ¡Erguíos, mis esbirros! ¡Servid a vuestro maestro una vez más!\",\n\tYellShaman\t= \"¡Chamanes, mostradme lo que pueden hacer vuestros tótems!\",\n\tYellPaladin\t= \"Paladines... He oído que tenéis muchas vidas. Demostrádmelo.\",\n\tYellDruid\t= \"Los druidas y vuestro estúpido poder de cambiar de forma. ¡Veámoslo en acción!\",\n\tYellPriest\t= \"¡Sacerdotes! Si vais a seguir curando de esa forma, ¡podíamos hacerlo más interesante!\",\n\tYellWarrior\t= \"¡Sé que podéis golpear más fuerte, guerreros! ¡Veámoslo!\",\n\tYellRogue\t= \"¿Pícaros? ¡Dejad de esconderos y enfrentaos a mí!\",\n\tYellWarlock\t= \"Brujos... No deberíais estar jugando con magia que no comprendéis. ¿Veis lo que pasa?\",\n\tYellHunter\t= \"¡Cazadores y vuestras molestas cerbatanas!\",\n\tYellMage\t= \"¿Magos también? Deberíais tener más cuidado cuando jugáis con la magia...\",\n\tYellDK\t\t= \"¡Caballeros de la Muerte... venid aquí!\"\n})\n"
  },
  {
    "path": "DBM-BWL/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\nlocal L\n\n-----------------\n--  Razorgore  --\n-----------------\nL = DBM:GetModLocalization(\"Razorgore\")\n\nL:SetGeneralLocalization({\n\tname = \"Tranchetripe l'Indompté\"\n})\n\nL:SetTimerLocalization({\n\tTimerAddsSpawn\t= \"Premiers serviteurs\"\n})\n\nL:SetOptionLocalization({\n\tTimerAddsSpawn\t= \"Afficher le timer pour les premiers serviteurs\"\n})\n\nL:SetMiscLocalization({\n\tPhase2Emote\t= \"s'enfuit car le contrôle de l'orbe s'affaiblit.\",\n\tYellPull = \"La chambre des œufs est envahie ! Sonnez l'alarme ! Protégez les œufs à tout prix !\"\n})\n\n-------------------\n--  Vaelastrasz  --\n-------------------\nL = DBM:GetModLocalization(\"Vaelastrasz\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"Vaelastrasz le Corrompu\"\n})\n\nL:SetMiscLocalization({\n\tEvent\t\t\t\t= \"Trop tard, mes amis ! La corruption de Nefarius s'empare de moi… Je ne peux plus… me contrôler.\"\n})\n\n-----------------\n--  Broodlord  --\n-----------------\nL = DBM:GetModLocalization(\"Broodlord\")\n\nL:SetGeneralLocalization({\n\tname\t= \"Seigneur des couvées Lashlayer\"\n})\n\nL:SetMiscLocalization({\n\tPull\t= \"Aucun membre de votre espèce ne devrait être ici ! Vous vous êtes condamnés vous-mêmes !\t\"\n})\n\n---------------\n--  Firemaw  --\n---------------\nL = DBM:GetModLocalization(\"Firemaw\")\n\nL:SetGeneralLocalization({\n\tname = \"Gueule-de-feu\"\n})\n\n---------------\n--  Ebonroc  --\n---------------\nL = DBM:GetModLocalization(\"Ebonroc\")\n\nL:SetGeneralLocalization({\n\tname = \"Rochébène\"\n})\n\n----------------\n--  Flamegor  --\n----------------\nL = DBM:GetModLocalization(\"Flamegor\")\n\nL:SetGeneralLocalization({\n\tname = \"Flamegor\"\n})\n\n-----------------------\n--  Vulnerabilities  --\n-----------------------\n-- Chromaggus, Death Talon Overseer and Death Talon Wyrmguard\nL = DBM:GetModLocalization(\"TalonGuards\")\n\nL:SetGeneralLocalization({\n\tname = \"Gardes Griffemort\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t\t= \"Vulnérabilité : %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable\t\t= \"Afficher un avertissement pour les vulnérabilités des sorts\"\n})\n\nL:SetMiscLocalization({\n\tFire\t\t= \"Feu\",\n\tNature\t\t= \"Nature\",\n\tFrost\t\t= \"Givre\",\n\tShadow\t\t= \"Ombre\",\n\tArcane\t\t= \"Arcanes\",\n\tHoly\t\t= \"Sacré\"\n})\n\n------------------\n--  Chromaggus  --\n------------------\nL = DBM:GetModLocalization(\"Chromaggus\")\n\nL:SetGeneralLocalization({\n\tname = \"Chromaggus\"\n})\n\nL:SetWarningLocalization({\n\tWarnBreath\t\t= \"%s\",\n\tWarnVulnerable\t= \"Vulnérabilité : %s\"\n})\n\nL:SetTimerLocalization({\n\tTimerBreathCD\t= \"%s recharge\",\n\tTimerBreath\t\t= \"%s lancement\",\n\tTimerVulnCD\t\t= \"Recharge de Vulnérabilité\"\n})\n\nL:SetOptionLocalization({\n\tWarnBreath\t\t= \"Afficher un avertissement lorsque Chromaggus lance un de ses souffles\",\n\tWarnVulnerable\t= \"Afficher un avertissement pour les vulnérabilités des sorts\",\n\tTimerBreathCD\t= \"Afficher le temps de recharge de souffle\",\n\tTimerBreath\t\t= \"Afficher le lancement du souffle\",\n\tTimerVulnCD\t\t= \"Afficher le temps de recharge de vulnérabilité\"\n})\n\nL:SetMiscLocalization({\n\tBreath1\t\t= \"Premier souffle\",\n\tBreath2\t\t= \"Deuxième souffle\",\n\tVulnEmote\t= \"%s grimace lorsque sa peau se met à briller.\",\n\tFire\t\t= \"Feu\",\n\tNature\t\t= \"Nature\",\n\tFrost\t\t= \"Givre\",\n\tShadow\t\t= \"Ombre\",\n\tArcane\t\t= \"Arcanes\",\n\tHoly\t\t= \"Sacré\"\n})\n\n----------------\n--  Nefarian  --\n----------------\nL = DBM:GetModLocalization(\"Nefarian-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Nefarian\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsLeft\t\t= \"%d restants\",\n\tWarnClassCall\t\t= \"L'appel de %s\",\n\tspecwarnClassCall\t= \"Votre appel de classe !\"\n})\n\nL:SetTimerLocalization({\n\tTimerClassCall\t\t= \"L'appel de %s termine\"\n})\n\nL:SetOptionLocalization({\n\tTimerClassCall\t\t= \"Afficher le timer pour la durée de l'appel en classe\",\n\tWarnAddsLeft\t\t= \"Annoncer les éliminations restantes jusqu'au déclenchement de la phase 2\",\n\tWarnClassCall\t\t= \"Annoncer les appels de classe\",\n\tspecwarnClassCall\t= \"Afficher un avertissement spécial lorsque vous êtes affecté par un appel de classe\"\n})\n\nL:SetMiscLocalization({\n\tYellP1\t\t\t= \"Que les jeux commencent !\",\n\tYellP2\t\t\t= \"Beau travail ! Le courage des mortels commence à faiblir ! Voyons maintenant s'ils peuvent lutter contre le véritable seigneur du pic Rochenoire !\",\n\tYellP3\t\t\t= \"C'est impossible ! Relevez-vous, serviteurs ! Servez une nouvelle fois votre maître !\",\n\tYellShaman\t\t= \"Chamans, montrez-moi ce que vos totems peuvent faire !\",\n\tYellPaladin\t\t= \"Les paladins… J'ai entendu dire que vous aviez de nombreuses vies… Montrez-moi.\",\n\tYellDruid\t\t= \"Les druides et leur stupides changements de forme. Voyons ce qu'ils donnent en vrai…\",\n\tYellPriest\t\t= \"Prêtres ! Si vous continuez à soigner comme ça, nous pourrions rendre le processus plus intéressant !\",\n\tYellWarrior\t\t= \"Guerriers, je sais que vous pouvez frapper plus fort que ça ! Voyons ça !\",\n\tYellRogue\t\t= \"Voleurs, arrêtez de vous cacher et affrontez-moi !\",\n\tYellWarlock\t\t= \"Démonistes, vous ne devriez pas jouer avec une magie qui vous dépasse. Vous voyez ce qui arrive ?\",\n\tYellHunter\t\t= \"Ah, les chasseurs et les stupides sarbacanes !\",\n\tYellMage\t\t= \"Les mages aussi ? Vous devriez être plus prudents lorsque vous jouez avec la magie.\",\n\tYellDK\t\t\t= \"Chevalier de la mort… Venez ici !\"\n})\n"
  },
  {
    "path": "DBM-BWL/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n-----------------\n--  Razorgore  --\n-----------------\nL = DBM:GetModLocalization(\"Razorgore\")\n\nL:SetGeneralLocalization({\n\tname = \"폭군 서슬송곳니\"\n})\n\nL:SetTimerLocalization({\n\tTimerAddsSpawn\t= \"추가 병력 등장\"\n})\n\nL:SetOptionLocalization({\n\tTimerAddsSpawn\t= \"첫번째 추가 병력 등장 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tPhase2Emote\t= \"수정 구슬에서 통제력이 빠져나가자 %s|1이;가; 도망칩니다.\",\n\tYellPull\t= \"침입자들이 들어왔다! 어떤 희생이 있더라도 알을 반드시 수호하라!\"\n})\n\n-------------------\n--  Vaelastrasz  --\n-------------------\nL = DBM:GetModLocalization(\"Vaelastrasz\")\n\nL:SetGeneralLocalization({\n\tname = \"타락한 밸라스트라즈\"\n})\n\nL:SetMiscLocalization({\n\tEvent\t= \"너무 늦었어! 네파리우스의 타락이 뿌리를 내려... 난... 나 자신을 통제할 수가 없어.\"\n})\n\n-----------------\n--  Broodlord  --\n-----------------\nL = DBM:GetModLocalization(\"Broodlord\")\n\nL:SetGeneralLocalization({\n\tname = \"용기대장 래쉬레이어\"\n})\n\nL:SetMiscLocalization({\n\tPull\t= \"너희 같은 놈들이 올 곳은 아닌데... 죽음을 자초했구나!\"\n})\n\n---------------\n--  Firemaw  --\n---------------\nL = DBM:GetModLocalization(\"Firemaw\")\n\nL:SetGeneralLocalization({\n\tname = \"화염아귀\"\n})\n\n---------------\n--  Ebonroc  --\n---------------\nL = DBM:GetModLocalization(\"Ebonroc\")\n\nL:SetGeneralLocalization({\n\tname = \"에본로크\"\n})\n\n----------------\n--  Flamegor  --\n----------------\nL = DBM:GetModLocalization(\"Flamegor\")\n\nL:SetGeneralLocalization({\n\tname = \"플레임고르\"\n})\n\n-----------------------\n--  Vulnerabilities  --\n-----------------------\n-- Chromaggus, Death Talon Overseer and Death Talon Wyrmguard\nL = DBM:GetModLocalization(\"TalonGuards\")\n\nL:SetGeneralLocalization({\n\tname = \"죽음의발톱 수호병\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t\t= \"%s 약화\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable\t\t= \"주문 속성 약화 경고 보기\"\n})\n\nL:SetMiscLocalization({\n\tFire\t\t= \"화염\",\n\tNature\t\t= \"자연\",\n\tFrost\t\t= \"냉기\",\n\tShadow\t\t= \"암흑\",\n\tArcane\t\t= \"비전\",\n\tHoly\t\t= \"신성\"\n})\n\n------------------\n--  Chromaggus  --\n------------------\nL = DBM:GetModLocalization(\"Chromaggus\")\n\nL:SetGeneralLocalization({\n\tname = \"크로마구스\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t= \"%s 약화\"\n})\n\nL:SetTimerLocalization({\n\tTimerBreathCD\t= \"%s 쿨타임\",\n\tTimerBreath\t\t= \"%s 시전\",\n\tTimerVulnCD\t\t= \"약화 쿨타임\"\n})\n\nL:SetOptionLocalization({\n\tWarnBreath\t\t= \"크로마구스가 숨결 시전 시 경고 보기\",\n\tWarnVulnerable\t= \"주문 속성 약화 경고 보기\",\n\tTimerBreathCD\t= \"숨결 쿨타임 보기\",\n\tTimerBreath\t\t= \"숨결 시전 보기\",\n\tTimerVulnCD\t\t= \"약화 쿨타임 보기\"\n})\n\nL:SetMiscLocalization({\n\tBreath1\t= \"1번 숨결\",\n\tBreath2\t= \"2번 숨결\",\n\tVulnEmote\t= \"%s|1이;가; 가죽을 빛내며 주춤 물러섭니다.\",\n\tVuln\t\t= \"약화 속성\",\n\tFire\t\t= \"화염\",\n\tNature\t\t= \"자연\",\n\tFrost\t\t= \"냉기\",\n\tShadow\t\t= \"암흑\",\n\tArcane\t\t= \"비전\",\n\tHoly\t\t= \"신성\"\n})\n\n----------------\n--  Nefarian  --\n----------------\nL = DBM:GetModLocalization(\"Nefarian-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"네파리안\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsLeft\t\t= \"%d킬 남음\",\n\tWarnClassCall\t\t= \"%s 지목\",\n\tspecwarnClassCall\t= \"당신이 직업 지목 대상입니다!\"\n})\n\nL:SetTimerLocalization({\n\tTimerClassCall\t\t= \"%s 지목 종료\"\n})\n\nL:SetOptionLocalization({\n\tTimerClassCall\t\t= \"직업 지목 지속 시간 타이머 바 보기\",\n\tWarnAddsLeft\t\t= \"2페이즈 전환까지 남은 쫄 킬 수 알림\",\n\tWarnClassCall\t\t= \"직업 지목 알림 보기\",\n\tspecwarnClassCall\t= \"직업 지목 대상일 때 특수 알림 보기\"\n})\n\nL:SetMiscLocalization({\n\tYellP1\t\t\t= \"경기를 시작하게!\",\n\tYellP2\t\t\t= \"잘했다! 적들의 사기가 떨어지고 있다! 검은바위 첨탑의 군주에게 도전한 대가를 치르게 해주자!\",\n\tYellP3\t\t\t= \"말도 안 돼! 일어나라! 다시 한 번 너희 주인을 섬겨라!\",\n\tYellShaman\t\t= \"주술사, 네 놈의 토템이 얼마나 쓸모 있는지 한번 보자!\",\n\tYellPaladin\t\t= \"성기사여... 네 목숨은 여러 개라고 하던데 어디 한번 보여 다오.\",\n\tYellDruid\t\t= \"드루이드 녀석, 그 바보 같은 변신을 했다고 내가 모를 줄 알았더냐? 받아라!\",\n\tYellPriest\t\t= \"사제야, 그렇게 치유를 계속할 테냐?! 그럼 어디 좀 더 재미있게 만들어 줄까!\",\n\tYellWarrior\t\t= \"전사들이로군, 네가 그보다 더 강하게 내려 칠 수 있다는 걸 알고 있다! 어디 한번 제대로 쳐 보란 말이다!\",\n\tYellRogue\t\t= \"도적들인가? 숨어 다니지만 말고 나와서 나와 맞서라!\",\n\tYellWarlock\t\t= \"흑마법사여, 네가 이해하지도 못하는 마법을 가지고 장난을 쳐서야 쓰나... 바로 이런 꼴이 되어 버렸지 않는가!\",\n\tYellHunter\t\t= \"사냥꾼 놈에다 그 장난감 같은 총이라니, 정말 거슬리는구나!\",\n\tYellMage\t\t= \"네가 마법사냐? 마법을 가지고 장난칠 상대를 고를 때는 좀 더 신중했어야지...\",\n\tYellDK\t\t\t= \"죽음의 기사여... 당장 이리 와라!\"\n})\n"
  },
  {
    "path": "DBM-BWL/localization.mx.lua",
    "content": "if GetLocale() ~= \"esMX\" then return end\nlocal L\n\n-----------------\n--  Razorgore  --\n-----------------\nL = DBM:GetModLocalization(\"Razorgore\")\n\nL:SetGeneralLocalization({\n\tname = \"Sangrevaja el Indomable\"\n})\n\nL:SetTimerLocalization({\n\tTimerAddsSpawn\t= \"Primeros esbirros\"\n})\n\nL:SetOptionLocalization({\n\tTimerAddsSpawn\t= \"Mostrar temporizador para cuando aparezcan los primeros esbirros\"\n})\n\nL:SetMiscLocalization({\n\tPhase2Emote\t= \"huyen mientras se consume el poder del orbe.\",\n\tYellPull\t= \"¡Los invasores han penetrado en El Criadero! ¡Activa la alarma! ¡Hay que proteger los huevos a toda costa!\"\n})\n\n-------------------\n--  Vaelastrasz  --\n-------------------\nL = DBM:GetModLocalization(\"Vaelastrasz\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"Vaelastrasz el Corrupto\"\n})\n\nL:SetMiscLocalization({\n\tEvent\t\t\t\t= \"¡Demasiado tarde, amigos! Ahora estoy poseído por la corrupción de Nefarius... No puedo... controlarme.\"\n})\n\n-----------------\n--  Broodlord  --\n-----------------\nL = DBM:GetModLocalization(\"Broodlord\")\n\nL:SetGeneralLocalization({\n\tname\t= \"Señor de linaje Capazote\"\n})\n\nL:SetMiscLocalization({\n\tPull\t= \"¡Nadie de su raza debería estar aquí! ¡Están condenados!\"\n})\n\n---------------\n--  Firemaw  --\n---------------\nL = DBM:GetModLocalization(\"Firemaw\")\n\nL:SetGeneralLocalization({\n\tname = \"Faucefogo\"\n})\n\n---------------\n--  Ebonroc  --\n---------------\nL = DBM:GetModLocalization(\"Ebonroc\")\n\nL:SetGeneralLocalization({\n\tname = \"Ebanorroca\"\n})\n\n----------------\n--  Flamegor  --\n----------------\nL = DBM:GetModLocalization(\"Flamegor\")\n\nL:SetGeneralLocalization({\n\tname = \"Flamagor\"\n})\n\n-----------------------\n--  Vulnerabilities  --\n-----------------------\n-- Chromaggus, Death Talon Overseer and Death Talon Wyrmguard\nL = DBM:GetModLocalization(\"TalonGuards\")\n\nL:SetGeneralLocalization({\n\tname = \"Guardias Garramortal\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t\t= \"Vulnerabilidad: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable\t\t= \"Mostrar aviso de vulnerabilidades de hechizo\"\n})\n\nL:SetMiscLocalization({\n\tFire\t\t= \"Fuego\",\n\tNature\t\t= \"Naturaleza\",\n\tFrost\t\t= \"Escarcha\",\n\tShadow\t\t= \"Sombras\",\n\tArcane\t\t= \"Arcano\",\n\tHoly\t\t= \"Sagrado\"\n})\n\n------------------\n--  Chromaggus  --\n------------------\nL = DBM:GetModLocalization(\"Chromaggus\")\n\nL:SetGeneralLocalization({\n\tname = \"Chromaggus\"\n})\n\nL:SetWarningLocalization({\n\tWarnBreath\t\t= \"%s\",\n\tWarnVulnerable\t= \"Vulnerabilidad: %s\"\n})\n\nL:SetTimerLocalization({\n\tTimerBreathCD\t= \"%s TdR\",\n\tTimerBreath\t\t= \"%s lanzamiento\",\n\tTimerVulnCD\t\t= \"TdR de Vulnerabilidad\"\n})\n\nL:SetOptionLocalization({\n\tWarnBreath\t\t= \"Mostrar aviso cuando Chromaggus lance uno de sus alientos\",\n\tWarnVulnerable\t= \"Mostrar temporizador para el tiempo de reutilización de los alientos\",\n\tTimerBreathCD\t= \"Mostrar TdR de aliento\",\n\tTimerBreath\t\t= \"Mostrar lanzamiento de aliento\",\n\tTimerVulnCD\t\t= \"Mostrar TdR de Vulnerabilidad\"\n})\n\nL:SetMiscLocalization({\n\tBreath1\t= \"Primer aliento\",\n\tBreath2\t= \"Segundo aliento\",\n\tVulnEmote\t= \"%s se estremece mientras su piel empieza a brillar.\",\n\tVuln\t\t= \"Vulnerabilidad\",\n\tFire\t\t= \"Fuego\",\n\tNature\t\t= \"Naturaleza\",\n\tFrost\t\t= \"Escarcha\",\n\tShadow\t\t= \"Sombras\",\n\tArcane\t\t= \"Arcano\",\n\tHoly\t\t= \"Sagrado\"\n})\n\n----------------\n--  Nefarian  --\n----------------\nL = DBM:GetModLocalization(\"Nefarian-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Nefarian\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsLeft\t\t= \"%d restante\",\n\tWarnClassCall\t\t= \"Llamada de %s\",\n\tspecwarnClassCall\t= \"¡Llamada de tu clase!\"\n})\n\nL:SetTimerLocalization({\n\tTimerClassCall\t\t= \"Llamada de %s termina\"\n})\n\nL:SetOptionLocalization({\n\tTimerClassCall\t\t= \"Mostrar temporizador para la duración de las llamadas en cada clase\",\n\tWarnAddsLeft\t\t= \"Anunciar muertes restante hasta Fase 2\",\n\tWarnClassCall\t\t= \"Mostrar aviso para las llamadas de clase\",\n\tspecwarnClassCall\t= \"Mostrar aviso especial cuando se ve afectado por la llamada de clase\"\n})\n\nL:SetMiscLocalization({\n\tYellP1\t\t= \"¡Que comiencen los juegos!\",\n\tYellP2\t\t= \"Bien hecho, mis esbirros. El coraje de los mortales empieza a mermar. ¡Veamos ahora cómo se enfrentan al verdadero Señor de la Cumbre de Roca Negra!\",\n\tYellP3\t\t= \"¡Imposible! ¡Levántense, mis esbirros! ¡Sirvan a su amo una vez más!\",\n\tYellShaman\t= \"¡Chamanes, muéstrenme lo que pueden hacer sus tótems!\",\n\tYellPaladin\t= \"Paladines... He oído que tenéis muchas vidas. Demostrádmelo.\",\n\tYellDruid\t= \"Los druidas y su estúpido poder de cambiar de forma. ¡Veámoslo en acción!\",\n\tYellPriest\t= \"¡Sacerdotes! Si vais a seguir curando de esa forma, ¡podíamos hacerlo más interesante!\",\n\tYellWarrior\t= \"¡Sé que podéis golpear más fuerte, guerreros! ¡Veámoslo!\",\n\tYellRogue\t= \"¿Pícaros? ¡Dejad de esconderos y enfrentaos a mí!\",\n\tYellWarlock\t= \"Brujos... No deberíais estar jugando con magia que no comprendéis. ¿Veis lo que pasa?\",\n\tYellHunter\t= \"¡Cazadores y sus molestas cerbatanas!\",\n\tYellMage\t= \"¿Magos también? Deberíais tener más cuidado cuando jugáis con la magia...\",\n\tYellDK\t\t= \"¡Caballeros de la Muerte... venid aquí!\"\n})\n"
  },
  {
    "path": "DBM-BWL/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n-----------------\n--  Razorgore  --\n-----------------\nL = DBM:GetModLocalization(\"Razorgore\")\n\nL:SetGeneralLocalization({\n\tname = \"Бритвосмерт Неукротимый\"\n})\n\nL:SetTimerLocalization({\n\tTimerAddsSpawn\t= \"Появление аддов\"\n})\n\nL:SetOptionLocalization({\n\tTimerAddsSpawn\t= \"Показывать таймер до первого появления аддов\"\n})\n\nL:SetMiscLocalization({\n\tPhase2Emote = \"убегает, как только сила сферы пошла на спад.\",\n\tYellPull = \"Враги в инкубаторе! Бейте тревогу! Защищайте яйца любой ценой!\"\n})\n\n-------------------\n--  Vaelastrasz  --\n-------------------\nL = DBM:GetModLocalization(\"Vaelastrasz\")\n\nL:SetGeneralLocalization({\n\tname = \"Валестраз Порочный\"\n})\n\nL:SetMiscLocalization({\n\tEvent = \"Умоляю, смертные! Бегите! Бегите, пока я еще могу себя удержать! Черный огонь бушует в моем сердце! Я должен... дать ему волю!\"\n})\n\n-----------------\n--  Broodlord  --\n-----------------\nL = DBM:GetModLocalization(\"Broodlord\")\n\nL:SetGeneralLocalization({\n\tname = \"Предводитель драконов Разящий Бич\"\n})\n\nL:SetMiscLocalization({\n\tPull = \"Таких, как вы, здесь быть не должно! Смерть грозит лишь вам!\"\n})\n\n---------------\n--  Firemaw  --\n---------------\nL = DBM:GetModLocalization(\"Firemaw\")\n\nL:SetGeneralLocalization({\n\tname = \"Огнечрев\"\n})\n\n---------------\n--  Ebonroc  --\n---------------\nL = DBM:GetModLocalization(\"Ebonroc\")\n\nL:SetGeneralLocalization({\n\tname = \"Черноскал\"\n})\n\n----------------\n--  Flamegor  --\n----------------\nL = DBM:GetModLocalization(\"Flamegor\")\n\nL:SetGeneralLocalization({\n\tname = \"Пламегор\"\n})\n\n-----------------------\n--  Vulnerabilities  --\n-----------------------\n-- Chromaggus, Death Talon Overseer and Death Talon Wyrmguard\nL = DBM:GetModLocalization(\"TalonGuards\")\n\nL:SetGeneralLocalization({\n\tname = \"Стражи Когтя Смерти\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t\t= \"Уязвимость к %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable\t\t= \"Показывать предупреждение об уязвимости к заклинаниям\"\n})\n\nL:SetMiscLocalization({\n\tFire\t\t= \"Огню\",\n\tNature\t\t= \"силам Природы\",\n\tFrost\t\t= \"магии Льда\",\n\tShadow\t\t= \"Темной магии\",\n\tArcane\t\t= \"Тайной магии\",\n\tHoly\t\t= \"Светлой магии\"\n})\n\n------------------\n--  Chromaggus  --\n------------------\nL = DBM:GetModLocalization(\"Chromaggus\")\n\nL:SetGeneralLocalization({\n\tname = \"Хромаггус\"\n})\n\nL:SetWarningLocalization({\n\tWarnBreathSoon\t= \"Скоро дыхание\",\n\tWarnBreath\t\t= \"%s\",\n\tWarnVulnerable\t= \"Уязвимость к %s\",\n\tWarnPhase2Soon\t= \"Скоро 2-ая фаза\"\n})\n\nL:SetTimerLocalization({\n\tTimerBreathCD\t= \"%s восстановление\",\n\tTimerBreath\t\t= \"Применение %s\",\n\tTimerVulnCD\t\t= \"Восстановление уязвимости\"\n})\n\nL:SetOptionLocalization({\n\tWarnBreathSoon\t= \"Предварительное предупреждение Дыхания Хромаггуса\",\n\tWarnBreath\t\t= \"Показывать предупреждение о дыханиях Хромаггуса\",\n\tWarnVulnerable\t= \"Показывать предупреждение об уязвимости к заклинаниям\",\n\tTimerBreathCD\t= \"Показывать время восстановления дыханий\",\n\tTimerBreath\t\t= \"Показывать применение Дыхания\",\n\tTimerVulnCD\t\t= \"Показывать восстановление уязвимости\",\n\tWarnPhase2Soon\t= \"Предупреждать о второй фазе\"\n})\n\nL:SetMiscLocalization({\n\tBreath1\t\t= \"Первое Дыхание\",\n\tBreath2\t\t= \"Второе Дыхание\",\n\tVulnEmote\t= \"%s изменяется, мерцая.\",\n\tVuln\t\t= \"Уязвимость\",\n\tFire\t\t= \"Огню\",\n\tNature\t\t= \"силам Природы\",\n\tFrost\t\t= \"магии Льда\",\n\tShadow\t\t= \"Темной магии\",\n\tArcane\t\t= \"Тайной магии\",\n\tHoly\t\t= \"Светлой магии\"\n})\n\n----------------\n--  Nefarian  --\n----------------\nL = DBM:GetModLocalization(\"Nefarian-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Нефариан\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsLeft\t\t= \"Осталось %d убийств\",\n\tWarnClassCallSoon\t= \"Скоро вызов класса\",\n\tWarnClassCall\t\t= \"Дебафф на %s\",\n\tWarnPhaseSoon\t\t= \"Скоро фаза %s\",\n\tWarnPhase\t\t\t= \"Фаза %s\",\n\tspecwarnClassCall\t= \"Классовый зов на тебе!\"\n})\n\nL:SetTimerLocalization({\n\tTimerClassCall\t\t= \"%s зов заканчивается\"\n})\n\nL:SetOptionLocalization({\n\tTimerClassCall\t\t= \"Показывать таймер классовых вызовов\",\n\tWarnClassCallSoon\t= \"Предупреждение классовых вызовов\",\n\tWarnClassCall\t\t= \"Объявлять классовый вызов\",\n\tWarnPhaseSoon\t\t= \"Объявлять, когда следующая фаза скоро начнется\",\n\tWarnPhase\t\t\t= \"Объявлять смену фаз\",\n\tspecwarnClassCall\t= \"Показывать специальное предупреждение, когда вы подвержены классовому зову\"\n})\n\nL:SetMiscLocalization({\n\tYellP1\t\t= \"Пусть состязания начнутся!\",\n\tYellP2\t\t= \"Браво, слуги мои! Смертные утрачивают мужество! Поглядим же, как они справятся с истинным владыкой Черной горы!!!\",\n\tYellP3\t\t= \"Не может быть! Восстаньте, мои прислужники! Послужите господину еще раз!\",\n\tYellShaman\t= \"Шаманы, покажите, на что способны ваши тотемы!\",\n\tYellPaladin\t= \"Паладины... Я слышал, у вас несколько жизней. Докажите.\",\n\tYellDruid\t= \"Друиды и их дурацкие превращения... Ну что ж, поглядим!\",\n\tYellPriest\t= \"Жрецы! Если вы собираетесь продолжать так лечить, то давайте хоть немного разнообразим процесс!\",\n\tYellWarrior\t= \"Я знаю, воины, вы можете бить сильнее! Ну-ка, покажите!\",\n\tYellRogue = \"Разбойники? Хватит прятаться, покажитесь!\",\n\tYellWarlock\t= \"Чернокнижники, ну не беритесь вы за волшебство, которого сами не понимаете! Видите, что получилось?\",\n\tYellHunter\t= \"Охотники со своими жалкими пугачами!\",\n\tYellMage\t= \"И маги тоже? Осторожнее надо быть, когда играешь с магией...\",\n\tYellDK\t\t= \"Рыцари смерти! Сюда!\"\n})\n"
  },
  {
    "path": "DBM-BWL/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n-----------------\n--  Razorgore  --\n-----------------\nL = DBM:GetModLocalization(\"Razorgore\")\n\nL:SetGeneralLocalization({\n\tname = \"狂野的拉佐格爾\"\n})\n\nL:SetTimerLocalization({\n\tTimerAddsSpawn\t= \"小怪重生\"\n})\n\nL:SetOptionLocalization({\n\tTimerAddsSpawn\t= \"為第一次小怪重生顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tPhase2Emote\t= \"在寶珠的控制力消失之前逃走。\",\n\tYellPull\t= \"入侵者闖入孵化室了!警報!不惜一切代價保護蛋!\"\n})\n\n-------------------\n--  Vaelastrasz  --\n-------------------\nL = DBM:GetModLocalization(\"Vaelastrasz\")\n\nL:SetGeneralLocalization({\n\tname = \"墮落的瓦拉斯塔茲\"\n})\n\nL:SetMiscLocalization({\n\tEvent\t= \"太遲了，朋友! 奈法利斯的腐化已經掌握了我...我已經無法...控制我自己了。\"\n})\n\n-----------------\n--  Broodlord  --\n-----------------\nL = DBM:GetModLocalization(\"Broodlord\")\n\nL:SetGeneralLocalization({\n\tname = \"勒西雷爾\"\n})\n\nL:SetMiscLocalization({\n\tPull\t= \"你怎麼進來的?你們這種生物不能進來!我要毀滅你們!\"\n})\n\n---------------\n--  Firemaw  --\n---------------\nL = DBM:GetModLocalization(\"Firemaw\")\n\nL:SetGeneralLocalization({\n\tname = \"費爾默\"\n})\n\n---------------\n--  Ebonroc  --\n---------------\nL = DBM:GetModLocalization(\"Ebonroc\")\n\nL:SetGeneralLocalization({\n\tname = \"埃博諾克\"\n})\n\n----------------\n--  Flamegor  --\n----------------\nL = DBM:GetModLocalization(\"Flamegor\")\n\nL:SetGeneralLocalization({\n\tname = \"弗萊格爾\"\n})\n\n-----------------------\n--  Vulnerabilities  --\n-----------------------\n-- Chromaggus, Death Talon Overseer and Death Talon Wyrmguard\nL = DBM:GetModLocalization(\"TalonGuards\")\n\nL:SetGeneralLocalization({\n\tname = \"龍人護衛\"\n})\n\nL:SetWarningLocalization({\n\tWarnVulnerable\t\t= \"%s弱點\"\n})\n\nL:SetOptionLocalization({\n\tWarnVulnerable\t\t= \"爲法術弱點顯示警告\"\n})\n\nL:SetMiscLocalization({\n\tFire\t\t= \"火焰\",\n\tNature\t\t= \"自然\",\n\tFrost\t\t= \"冰霜\",\n\tShadow\t\t= \"暗影\",\n\tArcane\t\t= \"祕法\",\n\tHoly\t\t= \"神聖\"\n})\n\n------------------\n--  Chromaggus  --\n------------------\nL = DBM:GetModLocalization(\"Chromaggus\")\n\nL:SetGeneralLocalization({\n\tname = \"克洛瑪古斯\"\n})\n\nL:SetWarningLocalization({\n\tWarnBreath\t\t= \"%s\",\n\tWarnVulnerable\t= \"%s弱點\"\n})\n\nL:SetTimerLocalization({\n\tTimerBreathCD\t= \"%s冷卻\",\n\tTimerBreath\t\t= \"%s施放\",\n\tTimerVulnCD\t\t= \"弱點冷卻\"\n})\n\nL:SetOptionLocalization({\n\tWarnBreath\t\t= \"為克洛瑪古斯其中一個吐息顯示警告\",\n\tWarnVulnerable\t= \"爲法術弱點顯示警告\",\n\tTimerBreathCD\t= \"顯示吐息冷卻\",\n\tTimerBreath\t\t= \"顯示吐息施放\",\n\tTimerVulnCD\t\t= \"顯示弱點冷卻\"\n})\n\nL:SetMiscLocalization({\n\tBreath1\t= \"第一次吐息\",\n\tBreath2\t= \"第二次吐息\",\n\tVulnEmote\t= \"%s因皮膚閃著微光而驚訝退縮。\",\n\tFire\t\t= \"火焰\",\n\tNature\t\t= \"自然\",\n\tFrost\t\t= \"冰霜\",\n\tShadow\t\t= \"暗影\",\n\tArcane\t\t= \"祕法\",\n\tHoly\t\t= \"神聖\"\n})\n\n----------------\n--  Nefarian  --\n----------------\nL = DBM:GetModLocalization(\"Nefarian-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"奈法利安\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsLeft\t\t= \"剩下%d擊殺\",\n\tWarnClassCall\t\t= \"%s點名\",\n\tspecwarnClassCall\t= \"你中了職業點名！\"\n})\n\nL:SetTimerLocalization({\n\tTimerClassCall\t\t= \"%s點名結束\"\n})\n\nL:SetOptionLocalization({\n\tTimerClassCall\t\t= \"為職業點名持續時間顯示計時器\",\n\tWarnAddsLeft\t\t= \"提示離第二階段開始剩多少擊殺\",\n\tWarnClassCall\t\t= \"提示職業點名\",\n\tspecwarnClassCall\t= \"特別警告：當你中了職業點名時\"\n})\n\nL:SetMiscLocalization({\n\tYellP1\t\t= \"讓賽事開始吧!\",\n\tYellP2\t\t= \"幹得好，我的手下。凡人的勇氣開始消退!現在，現在讓我們看看他們如何應對黑石之王的力量!!!\",\n\tYellP3\t\t= \"不可能!出現吧，我的僕人!再次為我的主人服務!\",\n\tYellShaman\t= \"薩滿，讓我看看你圖騰到底是什麼用處的!\",\n\tYellPaladin\t= \"聖騎士...聽說你有無數條命。讓我看看到底是怎麼樣的吧。\",\n\tYellDruid\t= \"德魯伊和你們愚蠢的變身術。讓我們看看什麼會發生吧!\",\n\tYellPriest\t= \"牧師!如果你要繼續這麼治療的話，那我們來玩點有趣的東西!\",\n\tYellWarrior\t= \"戰士，我知道你的力量不只如此!讓我們來見識一下吧!\",\n\tYellRogue\t= \"盜賊?不要躲了，面對我吧!\",\n\tYellWarlock\t= \"術士，不要隨便去玩那些你不理解的法術。看看會發生什麼吧?\",\n\tYellHunter\t= \"獵人和你那討厭的豌豆射擊!\",\n\tYellMage\t= \"還有法師?你應該小心使用你的魔法...\",\n\tYellDK\t\t= \"死亡騎士們...來這。\"\n})\n"
  },
  {
    "path": "DBM-BlackTemple/Bloodboil.lua",
    "content": "local mod\t= DBM:NewMod(\"Bloodboil\", \"DBM-BlackTemple\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(22948)\nmod:SetEncounterID(605)\nmod:SetModelID(21443)\nmod:SetHotfixNoticeRev(20230108000000)\nmod:SetMinSyncRevision(20230108000000)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 40508\",\n\t\"SPELL_CAST_SUCCESS 42005 40491\",\n\t\"SPELL_AURA_APPLIED 42005 40481 40491 40604 40594\",\n\t\"SPELL_AURA_APPLIED_DOSE 40481\",\n\t\"SPELL_AURA_REFRESH 40481\",\n\t\"SPELL_AURA_REMOVED 40604 40594\"\n)\n\n--[[\nability.id = 40508 and type = \"begincast\"\n or (ability.id = 40491 or ability.id = 42005) and type = \"cast\"\n or ability.id = 40604 and type = \"applydebuff\"\n or ability.id = 40594\n--]]\n\n--Most timers on fight are bad. there is a reason there is no strike or breath timer. blood and rage only ones that are kinda consistent\n-- General\nlocal berserkTimer\t\t= mod:NewBerserkTimer(600)\n\n-- Stage One: Boiling Blood\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1)..\": \"..DBM:GetSpellInfo(38027))\nlocal warnBlood\t\t\t= mod:NewTargetAnnounce(42005, 3)\nlocal warnWound\t\t\t= mod:NewStackAnnounce(40481, 2, nil, \"Tank\", 2)\nlocal warnStrike\t\t= mod:NewTargetNoFilterAnnounce(40491, 3, nil, \"Tank\", 2)\n\nlocal specWarnBlood\t\t= mod:NewSpecialWarningStack(42005, nil, 1, nil, nil, 1, 2)\n\nlocal timerBloodCD\t\t= mod:NewCDCountTimer(10, 42005, nil, nil, nil, 5, nil, DBM_COMMON_L.IMPORTANT_ICON) -- (Timewalking Frostmourne 2023-01-07) \"Bloodboil-42005-npc:22948-406 = pull:9.5, 10.0, 10.0, 10.0, 10.0, 40.0, 10.0, 10.0, 10.0, 10.0, 10.0, 40.0, 10.0, 10.0, 10.0, 10.0, 10.0, 40.0, 10.0, 10.0, 10.0, 10.0, 10.0, 40.0\"\nlocal timerStrikeCD\t\t= mod:NewCDCountTimer(20, 40491, nil, \"Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON) -- (Timewalking Frostmourne 2023-01-07) \"Bewildering Strike-40491-npc:22948-406 = pull:9.4, 20.0, 20.0, 50.0, 20.0, 20.0, 50.0, 20.0, 20.0, 50.0, 20.0, 20.0\n\n-- Stage Two: Fel Rage\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2)..\": \"..DBM:GetSpellInfo(40594))\nlocal warnRage\t\t\t= mod:NewTargetAnnounce(40604, 4)\nlocal warnRageSoon\t\t= mod:NewSoonAnnounce(40604, 3)\nlocal warnRageEnd\t\t= mod:NewEndAnnounce(40604, 4)\nlocal warnBreath\t\t= mod:NewSpellAnnounce(40508, 2)\n\nlocal specWarnRage\t\t= mod:NewSpecialWarningYou(40604, nil, nil, nil, 1, 2)\nlocal yellRage\t\t\t= mod:NewYell(40604)\n\nlocal timerRageCD\t\t= mod:NewCDTimer(90, 40604, nil, nil, nil, 3, nil, DBM_COMMON_L.IMPORTANT_ICON) -- (Timewalking Frostmourne 2023-01-07) \"Fel Rage-40594-npc:22948-406 = pull:59.6, 89.9, 90.0, 90.0\"\nlocal timerRageEnd\t\t= mod:NewBuffActiveTimer(30, 40604, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON) -- (Timewalking Frostmourne 2023-01-07) - 40604 (player debuff) is 30s ; 40594 (boss debuff) is 28s\n\nmod:AddInfoFrameOption(42005)\n\nmod.vb.bloodCount = 0\nmod.vb.strikeCount = 0\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tself.vb.bloodCount = 0\n\tself.vb.strikeCount = 0\n\tberserkTimer:Start(-delay)\n\twarnRageSoon:Schedule(54.6-delay)\n\ttimerBloodCD:Start(9.5-delay, 1) -- REVIEW! (Timewalking Frostmourne 2023-01-07) - 9.5\n\ttimerStrikeCD:Start(9.4-delay, 1) -- REVIEW! (Timewalking Frostmourne 2023-01-07) - 9.4\n\ttimerRageCD:Start(59.6-delay) -- REVIEW! (Timewalking Frostmourne 2023-01-07) - 59.6\n\tif self.Options.InfoFrame then\n\t\tDBM.InfoFrame:SetHeader(DBM:GetSpellInfo(42005))\n\t\tDBM.InfoFrame:Show(30, \"playerdebuffstacks\", 42005, 1)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.InfoFrame then\n\t\tDBM.InfoFrame:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 40508 then\n\t\twarnBreath:Show()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 42005 then\n\t\tself.vb.bloodCount = self.vb.bloodCount + 1\n\t\tif self.vb.bloodCount == 5 then\n\t\t\ttimerBloodCD:Start(40, 1)\n\t\telse\n\t\t\ttimerBloodCD:Start(self.vb.bloodCount+1)\n\t\tend\n\telseif spellId == 40491 then\n\t\tself.vb.strikeCount = self.vb.strikeCount + 1\n\t\tif self.vb.strikeCount == 3 then\n\t\t\tself.vb.strikeCount = 0\n\t\t\ttimerStrikeCD:Start(50, 1)\n\t\telse\n\t\t\ttimerStrikeCD:Start(nil, self.vb.strikeCount+1)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 42005 then\n\t\twarnBlood:CombinedShow(0.8, args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnBlood:Show(args.amount)\n\t\t\tspecWarnBlood:Play(\"targetyou\")\n\t\tend\n\telseif spellId == 40481 then\n\t\tlocal amount = args.amount or 1\n\t\tif (amount % 5 == 0) then\n\t\t\twarnWound:Show(args.destName, amount)\n\t\tend\n\telseif spellId == 40491 then\n\t\twarnStrike:Show(args.destName)\n\telseif spellId == 40594 then -- Fel Rage (boss)\n\t\ttimerRageEnd:Start(28, args.destName)\n\t\twarnRageSoon:Schedule(85)\n\t\ttimerRageCD:Start()\n\telseif spellId == 40604 then -- Fel Rage (player)\n\t\tself:SetStage(2)\n--\t\ttimerBloodCD:Stop()\n\t\ttimerRageEnd:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnRage:Show()\n\t\t\tspecWarnRage:Play(\"targetyou\")\n\t\t\tyellRage:Yell()\n\t\telse\n\t\t\twarnRage:Show(args.destName)\n\t\tend\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\nmod.SPELL_AURA_REFRESH = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 40604 then--Ending on player\n--\t\ttimerRageEnd:Stop(args.destName)\n\telseif spellId == 40594 then--Ending on Boss\n\t\tself.vb.bloodCount = 0\n\t\tself:SetStage(1)\n\t\twarnRageEnd:Show()\n--\t\ttimerBloodCD:Start(12.5)\n--\t\twarnRageSoon:Schedule(47)\n--\t\ttimerRageCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-BlackTemple/DBM-BlackTemple.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Black Temple|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0검은 사원|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Der Schwarze Tempel|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Templo Oscuro|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Temple noir|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0黑暗神殿|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0黑暗神廟|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Черный храм|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMBlackTemple_AllSavedVars\n## SavedVariablesPerCharacter: DBMBlackTemple_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: BC\n## X-DBM-StatTypes: normal, timewalker\n## X-DBM-Mod-MapID: 797\n## X-DBM-Mod-Sort: 1002\n## X-DBM-Mod-Name: Black Temple\n## X-DBM-Mod-Name-zhCN: 黑暗神殿\n## X-DBM-Mod-Name-frFR: Temple noir\n## X-DBM-Mod-Name-ruRU: Черный храм\n## X-DBM-Mod-LoadZone: Black Temple\n## X-DBM-Mod-LoadZone-deDE: Der Schwarze Tempel\n## X-DBM-Mod-LoadZone-esES: Templo Oscuro\n## X-DBM-Mod-LoadZone-esMX: Templo Oscuro\n## X-DBM-Mod-LoadZone-frFR: Temple noir\n## X-DBM-Mod-LoadZone-koKR: 검은 사원\n## X-DBM-Mod-LoadZone-zhCN: 黑暗神殿\n## X-DBM-Mod-LoadZone-zhTW: 黑暗神廟\n## X-DBM-Mod-LoadZone-ruRU: Черный храм\n\nlocalization.en.lua\nlocalization.cn.lua\nlocalization.de.lua\nlocalization.es.lua\nlocalization.fr.lua\nlocalization.kr.lua\nlocalization.ru.lua\nlocalization.tw.lua\n\nNajentus.lua\nSupremus.lua\nShadeOfAkama.lua\nTeronGorefiend.lua\nBloodboil.lua\nEssenceOfSouls.lua\nShahraz.lua\nIllidariCouncil.lua\nIllidan.lua\n"
  },
  {
    "path": "DBM-BlackTemple/EssenceOfSouls.lua",
    "content": "local mod\t= DBM:NewMod(\"Souls\", \"DBM-BlackTemple\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20251027151520\")\nmod:SetCreatureID(23418) -- 23418: Essence of Suffering ; 23419: Essence of Desire ; 23420: Essence of Anger\nmod:SetEncounterID(606)\nmod:SetHotfixNoticeRev(20250717000000)\n\nmod:SetModelID(21483)\nmod:SetUsedIcons(4, 5, 6, 7, 8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 41305 41431 41376 41303 41294 41410\",\n\t\"SPELL_AURA_REMOVED 41305\",\n\t\"SPELL_CAST_START 41410 41426\",\n\t\"SPELL_CAST_SUCCESS 41350 41337\",\n\t\"SPELL_DAMAGE 41545\",\n\t\"SPELL_MISSED 41545\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"UNIT_SPELLCAST_SUCCEEDED\"\n)\n\n--maybe a warning for Seethe if tanks mess up in phase 3\nlocal warnFixate\t\t= mod:NewTargetNoFilterAnnounce(41294, 3, nil, \"Tank|Healer\", 2)\nlocal warnDrain\t\t\t= mod:NewTargetNoFilterAnnounce(41303, 3, nil, \"Healer\", 2)\nlocal warnFrenzy\t\t= mod:NewSpellAnnounce(41305, 3, nil, \"Tank|Healer\", 2)\nlocal warnFrenzySoon\t= mod:NewPreWarnAnnounce(41305, 5, 2)\nlocal warnFrenzyEnd\t\t= mod:NewEndAnnounce(41305, 1, nil, \"Tank|Healer\", 2)\n\nlocal warnPhase2\t\t= mod:NewPhaseAnnounce(2, 2)\nlocal warnMana\t\t\t= mod:NewAnnounce(\"WarnMana\", 4, 41350)\nlocal warnDeaden\t\t= mod:NewTargetNoFilterAnnounce(41410, 1)\nlocal specWarnShock\t\t= mod:NewSpecialWarningInterrupt(41426, \"HasInterrupt\", nil, 2)\n\nlocal warnPhase3\t\t= mod:NewPhaseAnnounce(3, 2)\nlocal warnSoul\t\t\t= mod:NewSpellAnnounce(41545, 2, nil, \"Tank\", 2)\nlocal warnSpite\t\t\t= mod:NewTargetAnnounce(41376, 3)\n\nlocal specWarnShield\t= mod:NewSpecialWarningDispel(41431, \"MagicDispeller\", nil, 2, 1, 2)\nlocal specWarnSpite\t\t= mod:NewSpecialWarningYou(41376, nil, nil, nil, 1, 2)\n\n--Phase 1\nlocal timerPhaseChange\t= mod:NewPhaseTimer(41)\nlocal timerFrenzy\t\t= mod:NewBuffActiveTimer(8, 41305, nil, \"Tank|Healer\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerNextFrenzy\t= mod:NewNextTimer(40, 41305, nil, \"Tank|Healer\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\n--Phase 2\nlocal timerDeaden\t\t= mod:NewTargetTimer(10, 41410, nil, nil, nil, 5, nil, DBM_COMMON_L.DAMAGE_ICON, nil, mod:IsTank() and select(2, UnitClass(\"player\")) == \"WARRIOR\" and 2, 4)\nlocal timerNextDeaden\t= mod:NewNextTimer(30, 41410, nil, nil, nil, 5)--Roll timer because I don't want to assign it interrupt one when many groups will use prot warrior. SPELL_CAST_START: (Onyxia: 25m [2025-10-17]@[21:31:34]) - \"Deaden-41410-npc:23419-2404 = pull:152.22, 30.00, 30.01\"\nlocal timerMana\t\t\t= mod:NewTimer(160, \"TimerMana\", 41350)\nlocal timerNextShock\t= mod:NewCDTimer(\"v5-12\", 41426, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON) -- Blizz lied, you can NOT solo interrupt these with most classes. SPELL_CAST_START: (Onyxia: 25m [2025-10-17]@[21:31:34]) - \"Spirit Shock-41426-npc:23419-2404 = pull:134.25, 11.14, 5.71, 11.44, 6.55, 5.37, 6.72, 6.40, 10.76, 11.95, 5.54, 6.67, 5.28, 6.36, 6.35\"\n--Phase 3\nlocal timerNextShield\t= mod:NewCDTimer(15, 41431, nil, \"MagicDispeller\", 2, 5, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerNextSoul\t\t= mod:NewCDTimer(10, 41545, nil, \"Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nmod:AddSetIconOption(\"DrainIcon\", 41303, false)\nmod:AddSetIconOption(\"SpiteIcon\", 41376, false)\n\nmod.vb.lastFixate = \"None\"\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.lastFixate = \"None\"\n\ttimerNextFrenzy:Start(49-delay)\n\twarnFrenzySoon:Schedule(44-delay)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 41305 then\n\t\twarnFrenzy:Show()\n\t\ttimerFrenzy:Start()\n\telseif args.spellId == 41431 and not args:IsDestTypePlayer() then\n\t\ttimerNextShield:Start()\n\t\tspecWarnShield:Show(args.destName)\n\t\tspecWarnShield:Play(\"dispelboss\")\n\telseif args.spellId == 41376 then\n\t\twarnSpite:CombinedShow(0.3, args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnSpite:Show()\n\t\t\tspecWarnSpite:Play(\"defensive\")\n\t\tend\n\t\tif self.Options.SpiteIcon then\n\t\t\tself:SetAlphaIcon(0.5, args.destName)\n\t\tend\n\telseif args.spellId == 41303 then\n\t\twarnDrain:CombinedShow(1, args.destName)\n\t\tif self.Options.DrainIcon then\n\t\t\tself:SetAlphaIcon(1, args.destName)\n\t\tend\n\telseif args.spellId == 41294 then\n\t\tif self.vb.lastFixate ~= args.destName then\n\t\t\twarnFixate:Show(args.destName)\n\t\t\tself.vb.lastFixate = args.destName\n\t\tend\n\telseif args.spellId == 41410 and not args:IsDestTypePlayer() then\n\t\twarnDeaden:Show(args.destName)\n\t\ttimerDeaden:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 41305 then\n\t\twarnFrenzyEnd:Show()\n\t\twarnFrenzySoon:Schedule(35)\n\t\ttimerNextFrenzy:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 41410 then\n\t\ttimerNextDeaden:Start()\n\telseif args.spellId == 41426 then\n\t\ttimerNextShock:Start()\n\t\tspecWarnShock:Show(args.sourceName)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 41350 then --Aura of Desire\n\t\twarnPhase2:Show()\n\t\twarnMana:Schedule(130)\n\t\ttimerMana:Start()\n\t\ttimerNextShield:Start(13)\n\t\ttimerNextDeaden:Start(25) -- REVIEW! ~1s variance?\n\telseif args.spellId == 41337 then --Aura of Anger\n\t\twarnPhase3:Show()\n\t\ttimerNextSoul:Start()\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, _, _, _, spellId)\n\tif spellId == 41545 and self:AntiSpam(3, 1) then\n\t\twarnSoul:Show()\n\t\ttimerNextSoul:Start()\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\n--Boss Unit IDs stilln ot present in 7.2.5 so mouseover/target and antispam required\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(28819) and self:AntiSpam(2, 2) then--Submerge Visual\n\t\tself:SendSync(\"PhaseEnd\")\n\tend\nend\n\n--Backup to no one targetting boss\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.Phase1End or msg:find(L.Phase1End) or msg == L.Phase2End or msg:find(L.Phase2End) then\n\t\tself:SendSync(\"PhaseEnd\")\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif not self:IsInCombat() then return end\n\tif msg == \"PhaseEnd\" then\n\t\twarnFrenzyEnd:Cancel()\n\t\twarnFrenzySoon:Cancel()\n\t\twarnMana:Cancel()\n\t\ttimerNextFrenzy:Stop()\n\t\ttimerFrenzy:Stop()\n\t\ttimerMana:Stop()\n\t\ttimerNextShield:Stop()\n\t\ttimerNextDeaden:Stop()\n\t\ttimerNextShock:Stop()\n\t\ttimerPhaseChange:Start()--41\n\tend\nend\n"
  },
  {
    "path": "DBM-BlackTemple/Illidan.lua",
    "content": "local mod\t= DBM:NewMod(\"Illidan\", \"DBM-BlackTemple\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20251027154359\")\nmod:SetCreatureID(22917)\nmod:SetEncounterID(609)\n\nmod:SetModelID(21135)\nmod:SetUsedIcons(8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 40904 41117 39849 41032\",\n\t\"SPELL_CAST_SUCCESS 41126\",\n\t\"SPELL_AURA_APPLIED 41917 41914 40585 40932 41083 40683 40695 41032 39869\",\n\t\"SPELL_AURA_REMOVED 41917 41914\",\n--\t\"SPELL_SUMMON 40018\",\n\t\"UNIT_DIED\"\n)\n\n--TODO, phase 4 log where I don't overkill boss too fast.\n\n-- General\nlocal timerCombatStart\t\t= mod:NewCombatTimer(42.35)\nlocal berserkTimer\t\t\t= mod:NewBerserkTimer(1500)\n\n-- Stage One: You Are Not Prepared\nmod:AddTimerLine(L.S1YouAreNotPrepared)\nlocal warnShearSoon\t\t\t= mod:NewSoonAnnounce(41032, 2, nil, \"Tank\")\nlocal warnDrawSoul\t\t\t= mod:NewSpellAnnounce(40904, 3, nil, \"Tank\", 2)--Needed?\nlocal warnParasite\t\t\t= mod:NewTargetAnnounce(41917, 3)\nlocal warnPhase2Soon\t\t= mod:NewPrePhaseAnnounce(2, 3)\n\nlocal specWarnShearBlock\t= mod:NewSpecialWarningDefensive(41032, \"Tank\", nil, nil, 1, 2)\nlocal specWarnShearTaunt\t= mod:NewSpecialWarningTaunt(41032, \"Tank\", nil, nil, 1, 2)\nlocal specWarnGTFO\t\t\t= mod:NewSpecialWarningGTFO(40832, nil, nil, nil, 1, 2) -- Phase 1: Flame Crash // Phase 2: Blaze\nlocal specWarnParasite\t\t= mod:NewSpecialWarningYou(41917, nil, nil, nil, 1, 2)\nlocal yellParasiteFades\t\t= mod:NewShortFadesYell(41917)\n\nlocal timerShearCD\t\t\t= mod:NewCDTimer(10, 41032, nil, \"Tank\", nil, 5, nil, DBM_COMMON_L.TANK_ICON) -- (Timewalking Frostmourne [2023-02-18]@[22:07:38]) - \"Shear-41032-npc:22917-337 = pull:10.0/Stage 1/10.0, 10.1, 11.3, 10.6, 10.1, 10.6, 10.8, 10.5, 11.9, 11.9, 10.5, 10.0, 10.5, Stage 2/13.0, Stage 3/76.5, 27.6/104.1/117.1, 10.0, 11.3, 10.1, 10.7, 88.9, 11.8, 11.3, 10.6, 10.0, Stage 4/81.4, 39.1/120.5, 10.1, 11.7, 10.2, 102.9\"\nlocal timerDrawSoul\t\t\t= mod:NewCDTimer(35, 40904, nil, \"Tank\", nil, 5, nil, DBM_COMMON_L.TANK_ICON) -- (Timewalking Frostmourne [2023-02-18]@[22:07:38]) - \"Draw Soul-40904-npc:22917-337 = pull:35.0/Stage 1/35.0, 35.0, 35.0, 35.6, Stage 2/11.4, Stage 3/76.5, 52.6/129.1/140.5, 131.0, Stage 4/100.1, 64.1/164.2\", -- [3]\nlocal timerFlameCrash\t\t= mod:NewNextTimer(30, 40832, nil, nil ,nil, 3) -- (Timewalking Frostmourne [2023-02-18]@[22:07:38]) - \"Flame Crash-40832-npc:22917-337 = pull:30.0/Stage 1/30.0, 30.0, 30.0, 30.0, Stage 2/31.9, Stage 3/76.5, 47.5/124.0/156.0, 131.0, Stage 4/105.1, 59.1/164.2\"\nlocal timerParasite\t\t\t= mod:NewTargetTimer(10, 41917, nil, false, nil, 1, nil, DBM_COMMON_L.IMPORTANT_ICON)\n\nmod:AddSetIconOption(\"ParasiteIcon\", 41917)\n\n-- Stage Two: Flames of Azzinoth\nmod:AddTimerLine(L.S2FlamesOfAzzinoth)\n--Illidan Stormrage\nlocal warnPhase2\t\t\t= mod:NewPhaseAnnounce(2)\nlocal warnBarrage\t\t\t= mod:NewTargetAnnounce(40585, 3)\nlocal warnEyebeam\t\t\t= mod:NewSpellAnnounce(40018, 3)\n\nlocal specWarnBarrage\t\t= mod:NewSpecialWarningMoveAway(40585, nil, nil, nil, 1, 2)\nlocal specWarnUncagedWrath\t= mod:NewSpecialWarningDefensive(39869, nil, nil, nil, 3, 2)\n\nlocal timerBarrage\t\t\t= mod:NewTargetTimer(10, 40585, nil, false, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerNextBarrage\t\t= mod:NewCDTimer(44, 40585, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON) -- REVIEW! broken?? Fired on P3...\nlocal timerEyebeam\t\t\t= mod:NewCDTimer(30, 40018, nil, nil, nil, 2) -- (Timewalking Frostmourne [2023-02-18]@[22:07:38]) - \"?-Stare into the eyes of the Betrayer!-npc:Illidan Stormrage = pull:182.7/Stage 2/31.2, 30.3, Stage 3/15.0, Stage 4/283.7\", -- [16]\n-- Flame of Azzinoth\n--local specWarnGTFO\t\t\t= mod:NewSpecialWarningGTFO(40611, nil, nil, nil, 1, 2) -- Phase 2: Blaze\n\n-- Stage Three: The Demon Within\nmod:AddTimerLine(L.S3TheDemonWithin)\nlocal warnPhase3\t\t\t= mod:NewPhaseAnnounce(3)\nlocal warnFlame\t\t\t\t= mod:NewTargetAnnounce(40932, 3)\nlocal warnPhase4Soon\t\t= mod:NewPrePhaseAnnounce(4, 3)\n\n--local timerFlame\t\t\t= mod:NewTargetTimer(60, 40932)\n\n-- [Stage Three: The Demon Within] Demon Form\nmod:AddTimerLine(DBM:GetSpellInfo(40506))\nlocal warnDemon\t\t\t\t= mod:NewSpellAnnounce(40506, 3)\nlocal warnFlameBurst\t\t= mod:NewSpellAnnounce(41131, 3)\nlocal warnShadowDemon\t\t= mod:NewTargetNoFilterAnnounce(41117, 3)\nlocal warnHuman\t\t\t\t= mod:NewAnnounce(\"WarnHuman\", 3, 62844, nil, nil, nil, 40506)\n\nlocal specWarnShadowDemon\t= mod:NewSpecialWarningSwitch(41117, \"Dps\", nil, nil, 3, 2)\nlocal timerNextFlameBurst\t= mod:NewCDTimer(20, 41131, nil, nil, nil, 3)\n\nlocal timerNextDemon\t\t= mod:NewCDTimer(60, 40506, nil, nil, nil, 6, nil, DBM_COMMON_L.IMPORTANT_ICON) -- REVIEW! phase 3 and 5 variance? (Timewalking Frostmourne [2023-02-18]@[21:51:02] || Timewalking Frostmourne [2023-02-18]@[22:07:38]) - ?-Behold the power... of the demon within!-npc:Illidan Stormrage = pull:296.2/Stage 3/77.8, 131.0, Stage 4/90.6, 89.1/179.7, 114.8 || pull:305.6/Stage 3/77.6, 131.0, Stage 4/75.1, 93.0/168.1\"\nlocal timerShadowDemon\t\t= mod:NewCDTimer(34, 41117, nil, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerNextHuman\t\t= mod:NewTimer(60, \"TimerNextHuman\", 62844, nil, nil, 6, nil, nil, nil, nil, nil, nil, nil, 40506)\n\n-- Stage Four: The Long Hunt\nmod:AddTimerLine(L.S4TheLongHunt)\nlocal warnPhase4\t\t\t= mod:NewPhaseAnnounce(4)\nlocal warnEnrage\t\t\t= mod:NewSpellAnnounce(40683, 3) -- Frenzy\n\nlocal timerPhase4\t\t\t= mod:NewPhaseTimer(30)\nlocal timerEnrage\t\t\t= mod:NewBuffActiveTimer(10, 40683)\n--local timerNextEnrage\t\t= mod:NewCDTimer(40, 40683)\n\n-- Maiev Shadowsong\nlocal warnCaged\t\t\t\t= mod:NewSpellAnnounce(40695, 3)\n\nlocal timerCaged\t\t\t= mod:NewBuffActiveTimer(15, 40695, nil, nil, nil, 6)\n\nmod:AddRangeFrameOption(\"6/8\")-- 40932: Spell is 5 yards, but give it 6 or good measure since 5 yard check is probably least precise one since nerfs. / 41917: Parasitic. REVIEW! arbitrary range\n\nmod.vb.flamesDown = 0\nmod.vb.flameBursts = 0\nmod.vb.warned_preP2 = false\nmod.vb.warned_preP4 = false\nmod.vb.demonForm = false\n\nlocal parasiticDebuffName = DBM:GetSpellInfo(41917)\n\nlocal parasiticDebuffFilter\ndo\n\tparasiticDebuffFilter = function(uId)\n\t\treturn DBM:UnitDebuff(uId, parasiticDebuffName)\n\tend\nend\n\nlocal function humanForms(self) -- corrected on the fly using UNIT_AURA, and checking debuff 40506 to OnSync\n\tself:Unschedule(humanForms)\n\tself.vb.demonForm = false\n\twarnHuman:Show()\n\ttimerNextFlameBurst:Cancel()\n\ttimerNextDemon:Start()\n\ttimerShearCD:Start()\n\ttimerFlameCrash:Start()\n\tif self.vb.phase == 4 then\n\t\ttimerEnrage:Start()\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tself.vb.flamesDown = 0\n\tself.vb.flameBursts = 0\n\tself.vb.warned_preP2 = false\n\tself.vb.warned_preP4 = false\n\tself.vb.demonForm = false\n\ttimerShearCD:Start()\n\ttimerFlameCrash:Start()\n\tberserkTimer:Start(-delay)\n\tif not self:IsTrivial() then\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"SPELL_DAMAGE 40841 40832 40611\",\n\t\t\t\"SPELL_MISSED 40841 40832 40611\",\n\t\t\t\"UNIT_HEALTH\"\n\t\t)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tself:UnregisterShortTermEvents()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 40904 then\n\t\twarnDrawSoul:Show()\n\t\ttimerDrawSoul:Start()\n\telseif spellId == 41117 then\n\t\tspecWarnShadowDemon:Show()\n\t\tspecWarnShadowDemon:Play(\"killmob\")\n\telseif spellId == 39849 then--Throw Glaive\n\t\tself:SetStage(2)\n\t\tself.vb.flamesDown = 0\n\t\tself.vb.warned_preP2 = true\n\t\ttimerShearCD:Cancel()\n\t\ttimerFlameCrash:Cancel()\n\t\twarnPhase2:Show()\n\t\ttimerNextBarrage:Start(85)\n\t\ttimerEyebeam:Start()\n\telseif spellId == 41032 then -- Shear\n\t\twarnShearSoon:Schedule(7) -- 3s (+1.5s from cast time) is good enough to plan ahead\n\t\ttimerShearCD:Start()\n\t\tspecWarnShearBlock:Show()\n\t\tspecWarnShearBlock:Play(\"defensive\")\n\telseif spellId == 40832 then -- Flame Crash\n\t\ttimerFlameCrash:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 41126 then\n\t\twarnFlameBurst:Show()\n\t\tself.vb.flameBursts = self.vb.flameBursts + 1\n\t\tif self.vb.flameBursts < 3 then\n\t\t\ttimerNextFlameBurst:Start()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 41917 or spellId == 41914 then\n\t\ttimerParasite:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnParasite:Show()\n\t\t\tspecWarnParasite:Play(\"targetyou\")\n\t\t\tyellParasiteFades:Countdown(spellId)\n\t\telse\n\t\t\twarnParasite:Show(args.destName)\n\t\tend\n\t\tif self.Options.ParasiteIcon then\n\t\t\tself:SetIcon(args.destName, 8)\n\t\tend\n\t\tif self.Options.RangeFrame then\n\t\t\tif DBM:UnitDebuff(\"player\", args.spellName) then -- You have debuff, show everyone\n\t\t\t\tDBM.RangeCheck:Show(8, nil)\n\t\t\telse -- You do not have debuff, only show players who do\n\t\t\t\tDBM.RangeCheck:Show(8, parasiticDebuffFilter)\n\t\t\tend\n\t\tend\n\telseif spellId == 40585 then\n\t\ttimerBarrage:Start(args.destName)\n\t\ttimerNextBarrage:Start()\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnBarrage:Show()\n\t\t\tspecWarnBarrage:Play(\"runout\")\n\t\t\tspecWarnBarrage:ScheduleVoice(1, \"keepmove\")\n\t\telse\n\t\t\twarnBarrage:Show(args.destName)\n\t\tend\n\telseif spellId == 40932 then\n\t\twarnFlame:CombinedShow(0.3, args.destName)\n\t\t--timerFlame:Start(args.destName)\n\telseif spellId == 41083 then\n\t\twarnShadowDemon:CombinedShow(1, args.destName)\n\telseif spellId == 40683 then\n\t\twarnEnrage:Show()\n\t\ttimerEnrage:Start()\n\telseif spellId == 40695 then\n\t\twarnCaged:Show()\n\t\ttimerCaged:Start()\n\telseif spellId == 41032 then -- Shear\n\t\tif not args:IsPlayer() then\n\t\t\tspecWarnShearTaunt:Show(args.destName)\n\t\t\tspecWarnShearTaunt:Play(\"tauntboss\")\n\t\tend\n\telseif spellId == 39869 then -- Uncaged Wrath\n\t\tspecWarnUncagedWrath:Show()\n\t\tspecWarnUncagedWrath:Play(\"defensive\")\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 41917 or spellId == 41914 then\n\t\ttimerParasite:Stop(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tyellParasiteFades:Cancel()\n\t\tend\n\t\tif self.Options.ParasiteIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, spellId)\n\tif (spellId == 40841 or spellId == 40832 or spellId == 40611) and destGUID == UnitGUID(\"player\") and self:AntiSpam(4, 5) then -- Flame Crash / Blaze (Flame of Azzinoth)\n\t\tspecWarnGTFO:Show()\n\t\tspecWarnGTFO:Play(\"runaway\")\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 22997 then\n\t\tself.vb.flamesDown = self.vb.flamesDown + 1\n\t\tif self.vb.flamesDown >= 2 then\n\t\t\tself:SetStage(3)\n\t\t\tif self.Options.RangeFrame then\n\t\t\t\tDBM.RangeCheck:Show(6)\n\t\t\tend\n\t\t\ttimerNextBarrage:Cancel()\n\t\t\ttimerEyebeam:Cancel()\n\t\t\twarnPhase3:Show()\n\t\t\ttimerNextDemon:Start(77.6) -- (Timewalking Frostmourne [2023-02-18]@[22:07:38]) - 77.6\n\t\t\ttimerShearCD:Start(27.6)\n\t\t\ttimerFlameCrash:Start(47.5)\n\t\t\tself:RegisterShortTermEvents(\n\t\t\t\t\"UNIT_AURA focus target mouseover\"\n\t\t\t)\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.Pull or msg:find(L.Pull) or msg == L.PullWarmane or msg:find(L.PullWarmane)then -- Warmane bad string: https://www.warmane.com/bugtracker/report/131679\n\t\ttimerCombatStart:Start()\n\telseif msg == L.Eyebeam or msg:find(L.Eyebeam) then\n\t\twarnEyebeam:Show()\n\t\ttimerEyebeam:Start()\n\telseif msg == L.Demon or msg:find(L.Demon) then\n\t\tself.vb.flameBursts = 0\n\t\tself.vb.demonForm = true\n\t\ttimerNextDemon:Cancel()\n\t\twarnDemon:Show()\n\t\ttimerNextHuman:Start()\n\t\ttimerNextFlameBurst:Start()\n\t\ttimerShadowDemon:Start()\n--\t\tself:Schedule(74, humanForms, self)\n\telseif (msg == L.Phase4 or msg:find(L.Phase4)) and self.vb.phase < 4 then\n\t\tself:SetStage(4)\n\t\tself.vb.warned_preP4 = true\n--\t\tself:Unschedule(humanForms)\n\t\ttimerParasite:Cancel()\n\t\t--timerFlame:Cancel()\n\t\ttimerNextFlameBurst:Cancel()\n\t\ttimerShadowDemon:Cancel()\n\t\ttimerNextHuman:Cancel()\n\t\ttimerNextDemon:Cancel()\n\t\ttimerPhase4:Start()\n\t\twarnPhase4:Schedule(30)\n\t\ttimerNextDemon:Start(89.1) -- REVIEW! 5s variance? (Timewalking Frostmourne [2023-02-18]@[21:51:02] || Timewalking Frostmourne [2023-02-18]@[22:07:38]) - 89.1 || 93.0\n\n\tend\nend\n\nfunction mod:UNIT_AURA(uId)\n\tif not self.vb.demonForm then return end -- Demon phase\n\tif DBM:GetUnitCreatureId(uId) ~= 22917 then return end -- Illidan\n\n\tlocal demonForm = DBM:UnitBuff(uId, 40506)\n\tif self.vb.demonForm and not demonForm then -- Illidan was in Demon Form but just lost buff and morphed into Human Form\n--\t\tself.vb.demonForm = false -- redundancy. untested if it is actually needed, but theoretically I want to prevent UNIT_AURA from rerunning during OnSync runtime\n\t\tDBM:Debug(\"<personal> Illidan switched to Human Form!\")\n\t\tself:SendSync(\"humanForm\")\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tlocal cid = self:GetUnitCreatureId(uId)\n\tif not self.vb.warned_preP2 and cid == 22917 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.75 then\n\t\tself.vb.warned_preP2 = true\n\t\twarnPhase2Soon:Show()\n\telseif not self.vb.warned_preP4 and cid == 22917 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.35 then\n\t\tself.vb.warned_preP4 = true\n\t\twarnPhase4Soon:Show()\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif msg == \"humanForm\" and self.vb.demonForm then\n\t\tDBM:Debug(\"<sync> Illidan switched to Human Form!\")\n\t\thumanForms(self)\n\tend\nend\n"
  },
  {
    "path": "DBM-BlackTemple/IllidariCouncil.lua",
    "content": "local mod\t= DBM:NewMod(\"Council\", \"DBM-BlackTemple\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(22949, 22950, 22951, 22952)\nmod:SetEncounterID(608)\n\nmod:SetModelID(21416)\nmod:SetUsedIcons(1)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 41455\",\n\t\"SPELL_CAST_SUCCESS 41455\",\n\t\"SPELL_AURA_APPLIED 41485 41481 41482 41541 41476 41475 41452 41453 41450 41451\",\n\t\"SPELL_AURA_REMOVED 41479 41485\"\n)\n\nlocal warnPoison\t\t\t= mod:NewTargetNoFilterAnnounce(41485, 3, nil, \"Healer\", 3)\nlocal warnVanish\t\t\t= mod:NewTargetNoFilterAnnounce(41476, 3)\nlocal warnVanishEnd\t\t\t= mod:NewEndAnnounce(41476, 3)\nlocal warnDevAura\t\t\t= mod:NewSpellAnnounce(41452, 3, nil, \"Physical\", 2)\nlocal warnResAura\t\t\t= mod:NewSpellAnnounce(41453, 3, nil, \"-Physical\", 2)\n\nlocal specWarnShield\t\t= mod:NewSpecialWarningReflect(41475, \"Dps\", nil, nil, 1, 2)\nlocal specWarnFlame\t\t\t= mod:NewSpecialWarningMove(41481, nil, nil, nil, 1, 2)\nlocal specWarnBlizzard\t\t= mod:NewSpecialWarningMove(41482, nil, nil, nil, 1, 2)\nlocal specWarnConsecration\t= mod:NewSpecialWarningMove(41541, nil, nil, nil, 1, 2)\nlocal specWarnCoH\t\t\t= mod:NewSpecialWarningInterrupt(41455, \"HasInterrupt\", nil, 2, 1, 2)\nlocal specWarnImmune\t\t= mod:NewSpecialWarning(\"Immune\", false)\n\nlocal timerVanish\t\t\t= mod:NewBuffActiveTimer(31, 41476, nil, nil, nil, 6)\nlocal timerShield\t\t\t= mod:NewBuffActiveTimer(20, 41475, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON..DBM_COMMON_L.DAMAGE_ICON)\nlocal timerMeleeImmune\t\t= mod:NewTargetTimer(15, 41450, nil, \"Physical\", 2, 5, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerSpellImmune\t\t= mod:NewTargetTimer(15, 41451, nil, \"-Physical\", 2, 5, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerDevAura\t\t\t= mod:NewBuffActiveTimer(30, 41452, nil, \"Physical\", 2, 5, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerResAura\t\t\t= mod:NewBuffActiveTimer(30, 41453, nil, \"-Physical\", 2, 5, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerNextCoH\t\t\t= mod:NewCDTimer(14, 41455, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nlocal berserkTimer\t\t\t= mod:NewBerserkTimer(900)\n\nmod:AddSetIconOption(\"PoisonIcon\", 41485)\n\nfunction mod:OnCombatStart(delay)\n\tberserkTimer:Start(-delay)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 41485 then\n\t\twarnPoison:Show(args.destName)\n\t\tif self.Options.PoisonIcon then\n\t\t\tself:SetIcon(args.destName, 1)\n\t\tend\n\telseif spellId == 41481 and args:IsPlayer() and self:AntiSpam(3, 1) and not self:IsTrivial() then\n\t\t specWarnFlame:Show()\n\t\t specWarnFlame:Play(\"runaway\")\n\telseif spellId == 41482 and args:IsPlayer() and self:AntiSpam(3, 2) and not self:IsTrivial() then\n\t\t specWarnBlizzard:Show()\n\t\t specWarnBlizzard:Play(\"runaway\")\n\telseif spellId == 41541 and args:IsPlayer() and self:AntiSpam(3, 3) and not self:IsTrivial() then\n\t\t specWarnConsecration:Show()\n\t\t specWarnConsecration:Play(\"runaway\")\n\telseif spellId == 41476 then\n\t\twarnVanish:Show(args.destName)\n\t\ttimerVanish:Start(args.destName)\n\telseif spellId == 41475 and not self:IsTrivial() then\n\t\tspecWarnShield:Show(args.destName)\n\t\tspecWarnShield:Play(\"stopattack\")\n\t\ttimerShield:Start(args.destName)\n\telseif spellId == 41452 and self:GetCIDFromGUID(args.destGUID) == 22949 then\n\t\twarnDevAura:Show()\n\t\ttimerDevAura:Start()\n\telseif spellId == 41453 and self:GetCIDFromGUID(args.destGUID) == 22949 then\n\t\twarnResAura:Show()\n\t\ttimerResAura:Start()\n\telseif spellId == 41450 and self:GetCIDFromGUID(args.destGUID) == 22951 then\n\t\ttimerMeleeImmune:Start(args.destName)\n\t\tspecWarnImmune:Show(L.Melee)\n\telseif spellId == 41451 and self:GetCIDFromGUID(args.destGUID) == 22951 then\n\t\ttimerSpellImmune:Start(args.destName)\n\t\tspecWarnImmune:Show(L.Spell)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 41479 then\n\t\twarnVanishEnd:Show()\n\telseif spellId == 41485 then\n\t\tif self.Options.PoisonIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 41455 then\n\t\tif self:CheckInterruptFilter(args.sourceGUID) then\n\t\t\tspecWarnCoH:Show(args.sourceName)\n\t\t\tspecWarnCoH:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 41455 then\n\t\ttimerNextCoH:Start(13.3)\n\tend\nend\n"
  },
  {
    "path": "DBM-BlackTemple/Najentus.lua",
    "content": "local mod\t= DBM:NewMod(\"Najentus\", \"DBM-BlackTemple\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20251027142500\")\nmod:SetCreatureID(22887)\nmod:SetEncounterID(601)\n\nmod:SetModelID(21174)\nmod:SetUsedIcons(8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 39872 39837\",\n\t\"SPELL_AURA_REMOVED 39837\"\n)\n\nlocal warnShield\t\t= mod:NewSpellAnnounce(39872, 4)\nlocal warnShieldSoon\t= mod:NewSoonAnnounce(39872, 10, 3)\nlocal warnSpine\t\t\t= mod:NewTargetNoFilterAnnounce(39837, 3)\n\nlocal specWarnSpineTank\t= mod:NewSpecialWarningTaunt(39837, nil, nil, nil, 1, 2)\nlocal yellSpine\t\t\t= mod:NewYell(39837)\n\nlocal timerShield\t\t= mod:NewNextTimer(60, 39872, nil, nil, nil, 5) -- (Onyxia: 25m [2025-10-17]@[20:25:19]) - \"Tidal Shield-39872-npc:22887-247 = pull:60.02, 60.05\"\n\nlocal berserkTimer\t\t= mod:NewBerserkTimer(300)\n\nmod:AddSetIconOption(\"SpineIcon\", 39837)\nmod:AddInfoFrameOption(39878, true)\nmod:AddRangeFrameOption(\"8\")\n\nfunction mod:OnCombatStart(delay)\n\tberserkTimer:Start(-delay)\n\ttimerShield:Start(-delay)\n\twarnShieldSoon:Schedule(50-delay)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(8)\n\tend\n\tif self.Options.InfoFrame and not self:IsTrivial() then\n\t\tDBM.InfoFrame:SetHeader(L.HealthInfo)\n\t\tDBM.InfoFrame:Show(5, \"health\", 1800)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\n\tif self.Options.InfoFrame then\n\t\tDBM.InfoFrame:Hide()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 39872 then\n\t\twarnShield:Show()\n\t\twarnShieldSoon:Schedule(50)\n\t\ttimerShield:Start()\n\telseif args.spellId == 39837 then\n\t\twarnSpine:Show(args.destName)\n\t\tif self.Options.SpineIcon then\n\t\t\tself:SetIcon(args.destName, 8)\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tyellSpine:Yell()\n\t\telse\n\t\t\tlocal uId = DBM:GetRaidUnitId(args.destName)\n\t\t\tif self:IsTanking(uId) then--Tank got spike and it wasn't us\n\t\t\t\t--Taunt off spiked tank\n\t\t\t\tspecWarnSpineTank:Show(args.destName)\n\t\t\t\tspecWarnSpineTank:Play(\"tauntboss\")\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 39837 and self.Options.SpineIcon then\n\t\tself:SetIcon(args.destName, 0)\n\tend\nend\n"
  },
  {
    "path": "DBM-BlackTemple/ShadeOfAkama.lua",
    "content": "local mod\t= DBM:NewMod(\"Akama\", \"DBM-BlackTemple\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(22841)\nmod:SetEncounterID(603)\n\nmod:SetModelID(21357)\n\nmod:RegisterCombat(\"combat\")\nmod:SetWipeTime(50)--Adds come about every 50 seconds, so require at least this long to wipe combat if they die instantly\n\nmod:RegisterEventsInCombat(\n\t\"UNIT_DIED\"\n)\n\nmod:RegisterEvents(\n\t\"SPELL_AURA_REMOVED 34189\"\n)\n\nlocal warnPhase2\t\t= mod:NewPhaseAnnounce(2)\nlocal warnDefender\t\t= mod:NewAnnounce(\"warnAshtongueDefender\", 2, 41180)\nlocal warnSorc\t\t\t= mod:NewAnnounce(\"warnAshtongueSorcerer\", 2, 40520)\n\nlocal specWarnAdds\t\t= mod:NewSpecialWarningAddsCustom(42035, \"-Healer\", nil, nil, 1, 2)\n\nlocal timerCombatStart\t= mod:NewCombatTimer(12)\nlocal timerAddsCD\t\t= mod:NewAddsCustomTimer(25, 42035)--NewAddsCustomTimer\nlocal timerDefenderCD\t= mod:NewTimer(25, \"timerAshtongueDefender\", 41180, nil, nil, 1)\nlocal timerSorcCD\t\t= mod:NewTimer(25, \"timerAshtongueSorcerer\", 40520, nil, nil, 1)\n\nmod.vb.AddsWestCount = 0\n\nlocal function addsWestLoop(self)\n\tself.vb.AddsWestCount = self.vb.AddsWestCount + 1\n\tspecWarnAdds:Show(DBM_COMMON_L.WEST)\n\tspecWarnAdds:Play(\"killmob\")\n\tspecWarnAdds:ScheduleVoice(1, \"west\")\n\tif self.vb.AddsWestCount == 2 then--Special\n\t\tself:Schedule(51, addsWestLoop, self)\n\t\ttimerAddsCD:Start(51, DBM_COMMON_L.WEST)\n\telse\n\t\tself:Schedule(47, addsWestLoop, self)\n\t\ttimerAddsCD:Start(47, DBM_COMMON_L.WEST)\n\tend\nend\n\nlocal function addsEastLoop(self)\n\tspecWarnAdds:Show(DBM_COMMON_L.EAST)\n\tspecWarnAdds:Play(\"killmob\")\n\tspecWarnAdds:ScheduleVoice(1, \"east\")\n\tself:Schedule(51, addsEastLoop, self)\n\ttimerAddsCD:Start(51, DBM_COMMON_L.EAST)\nend\n\nlocal function sorcLoop(self)\n\twarnSorc:Show()\n\tself:Schedule(25, sorcLoop, self)\n\ttimerSorcCD:Start(25)\nend\n\nlocal function defenderLoop(self)\n\twarnDefender:Show()\n\tself:Schedule(30, defenderLoop, self)\n\ttimerDefenderCD:Start(30)\nend\n\nfunction mod:OnCombatStart()\n\tself:SetStage(1)\n\tself.vb.AddsWestCount = 0\n\tself:RegisterShortTermEvents(\n\t\t\"SWING_DAMAGE\",\n\t\t\"SWING_MISSED\",\n\t\t\"UNIT_SPELLCAST_SUCCEEDED\"\n\t)\n\tself:Schedule(1, defenderLoop, self)\n\tself:Schedule(1, sorcLoop, self)\n\tself:Schedule(1, addsWestLoop, self)\n\tself:Schedule(18, addsEastLoop, self)\n\ttimerAddsCD:Start(18, DBM_COMMON_L.EAST or \"East\")\nend\n\nfunction mod:OnCombatEnd()\n\tself:UnregisterShortTermEvents()\nend\n\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 34189 and args:GetDestCreatureID() == 23191 then--Coming out of stealth (he's been activated)\n\t\ttimerCombatStart:Start()\n\tend\nend\n\nfunction mod:SWING_DAMAGE(_, sourceName)\n\tif sourceName == L.name and self.vb.phase == 1 then\n\t\tself:UnregisterShortTermEvents()\n\t\tself:SetStage(2)\n\t\twarnPhase2:Show()\n\t\ttimerAddsCD:Stop()\n\t\ttimerDefenderCD:Stop()\n\t\ttimerSorcCD:Stop()\n\t\tself:Unschedule(addsWestLoop)\n\t\tself:Unschedule(addsEastLoop)\n\t\tself:Unschedule(sorcLoop)\n\t\tself:Unschedule(defenderLoop)\n\tend\nend\nmod.SWING_MISSED = mod.SWING_DAMAGE\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif (spellName == GetSpellInfo(40607) or spellName == GetSpellInfo(40955)) and self.vb.phase == 1 and self:AntiSpam(3, 1) then--Fixate/Summon Shade of Akama Trigger\n\t\tself:UnregisterShortTermEvents()\n\t\tself:SetStage(2)\n\t\twarnPhase2:Show()\n\t\ttimerAddsCD:Stop()\n\t\ttimerDefenderCD:Stop()\n\t\ttimerSorcCD:Stop()\n\t\tself:Unschedule(addsWestLoop)\n\t\tself:Unschedule(addsEastLoop)\n\t\tself:Unschedule(sorcLoop)\n\t\tself:Unschedule(defenderLoop)\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tif self:GetCIDFromGUID(args.destGUID) == 22841 then\n\t\tDBM:EndCombat(self)\n\tend\nend\n"
  },
  {
    "path": "DBM-BlackTemple/Shahraz.lua",
    "content": "local mod\t= DBM:NewMod(\"Shahraz\", \"DBM-BlackTemple\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(22947)\nmod:SetEncounterID(607)\n\nmod:SetModelID(21252)\nmod:SetUsedIcons(1, 2, 3)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\"SPELL_AURA_APPLIED 41001\",\n\t\"SPELL_AURA_REMOVED 41001\",\n\t\"SPELL_CAST_SUCCESS 40823\",\n\t\"UNIT_SPELLCAST_SUCCEEDED\"\n)\n\n--TODO, announce auras?\nlocal warnFA\t\t\t= mod:NewTargetNoFilterAnnounce(41001, 4)\nlocal warnShriek\t\t= mod:NewSpellAnnounce(40823)\nlocal warnEnrageSoon\t= mod:NewSoonAnnounce(21340)--not actual spell id\nlocal warnEnrage\t\t= mod:NewSpellAnnounce(21340)\n\nlocal specWarnFA\t\t= mod:NewSpecialWarningMoveAway(41001, nil, nil, nil, 1, 2)\n\nlocal timerFACD\t\t\t= mod:NewCDTimer(20.7, 41001, nil, nil, nil, 3)--20-28\nlocal timerAura\t\t\t= mod:NewTimer(15, \"timerAura\", 22599)\nlocal timerShriekCD\t\t= mod:NewCDTimer(15.8, 40823, nil, nil, nil, 2)\n\nmod:AddSetIconOption(\"FAIcons\", 41001, true)\n\nmod.vb.prewarn_enrage = false\nmod.vb.enrage = false\nmod.vb.FATargets = 0\n\nlocal GetSpellInfo = GetSpellInfo\nlocal aura = {\n\t[GetSpellInfo(40880)] = true,\n\t[GetSpellInfo(40882)] = true,\n\t[GetSpellInfo(40883)] = true,\n\t[GetSpellInfo(40891)] = true,\n\t[GetSpellInfo(40896)] = true,\n\t[GetSpellInfo(40897)] = true\n}\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.prewarn_enrage = false\n\tself.vb.enrage = false\n\tself.vb.FATargets = 0\n\ttimerShriekCD:Start(15.8-delay)\n\ttimerFACD:Start(24.4-delay)\n\tif not self:IsTrivial() then\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"UNIT_HEALTH boss1\"\n\t\t)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tself:UnregisterShortTermEvents()\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 41001 then\n\t\twarnFA:CombinedShow(1, args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnFA:Show()\n\t\t\tspecWarnFA:Play(\"scatter\")\n\t\tend\n\t\tif self.Options.FAIcons then\n\t\t\tself:SetIcon(args.destName, self.vb.FATargets + 1)\n\t\t\tself.vb.FATargets = self.vb.FATargets + 1\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 41001 and self.Options.FAIcons then\n\t\tself:SetIcon(args.destName, 0)\n\t\tself.vb.FATargets = self.vb.FATargets - 1\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 40823 then\n\t\twarnShriek:Show()\n\t\ttimerShriekCD:Start()\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(_, source)\n\tif not self.vb.enrage and (source or \"\") == L.name then\n\t\tself.vb.enrage = true\n\t\twarnEnrage:Show()\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif UnitHealth(uId) / UnitHealthMax(uId) <= 0.23 and self:GetUnitCreatureId(uId) == 22947 and not self.vb.prewarn_enrage then\n\t\tself:UnregisterShortTermEvents()\n\t\tself.vb.prewarn_enrage = true\n\t\twarnEnrageSoon:Show()\n\tend\nend\n\n--[\"40869-Fatal Attraction\"] = \"pull:24.4, 26.8, 28.0, 20.7, 21.9, 26.6, 22.0, 23.2, 23.0, 25.7, 26.6, 26.8, 25.6, 23.1, 26.8, 25.4\",\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif self:AntiSpam(3, spellName) then\n\t\tif aura[spellName] then\n\t\t\ttimerAura:Start(spellName)\n\t\telseif spellName == GetSpellInfo(40869) then--Cast event not in combat log, only applied and that can be resisted (especially on non timewalker). this ensures timer always exists\n\t\t\ttimerFACD:Start()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-BlackTemple/Supremus.lua",
    "content": "local mod\t= DBM:NewMod(\"Supremus\", \"DBM-BlackTemple\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(22898)\nmod:SetEncounterID(602)\nmod:SetModelID(21145)\nmod:SetUsedIcons(8)\nmod:SetHotfixNoticeRev(20230108000000)\nmod:SetMinSyncRevision(20230108000000)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"CHAT_MSG_RAID_BOSS_WHISPER\"\n)\n\n--TODO, see if CLEU method is reliable enough to scrap scan method. scan method may still have been faster.\n\n-- General\nlocal warnPhase\t\t\t= mod:NewAnnounce(\"WarnPhase\", 4, 42052)\n\nlocal timerPhase\t\t= mod:NewTimer(60, \"TimerPhase\", 42052, nil, nil, 6)\nlocal berserkTimer\t\t= mod:NewBerserkTimer(600)\n\n-- Stage One: Supremus\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1)..\": \"..L.name)\nlocal specWarnMolten\t= mod:NewSpecialWarningMove(40265, nil, nil, nil, 1, 2)\nlocal timerMoltenCD\t\t= mod:NewCDTimer(20, 40265, nil, nil, nil, 3)\n\n-- Stage Two: Pursuit\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2)..\": \"..DBM:GetSpellInfo(68987))\nlocal warnFixate\t\t= mod:NewTargetNoFilterAnnounce(41295, 3)\n\nlocal specWarnVolcano\t= mod:NewSpecialWarningMove(42052, nil, nil, nil, 1, 2)\nlocal specWarnFixate\t= mod:NewSpecialWarningRun(41295, nil, nil, nil, 4, 2)\n\nmod:AddBoolOption(\"KiteIcon\", true)\n\n--mod.vb.phase2 = false\nmod.vb.lastTarget = \"None\"\n\nlocal function ScanTarget(self)\n\tlocal target, uId = self:GetBossTarget(22898)\n\tif target then\n\t\tif self.vb.lastTarget ~= target then\n\t\t\tself.vb.lastTarget = target\n\t\t\tif UnitIsUnit(uId, \"player\") and not self:IsTrivial() then\n\t\t\t\tspecWarnFixate:Show()\n\t\t\t\tspecWarnFixate:Play(\"justrun\")\n\t\t\t\tspecWarnFixate:ScheduleVoice(1, \"keepmove\")\n\t\t\telse\n\t\t\t\twarnFixate:Show(target)\n\t\t\tend\n\t\t\tif self.Options.KiteIcon then\n\t\t\t\tself:SetIcon(target, 8)\n\t\t\tend\n\t\tend\n\tend\nend\n\nlocal function warnMoltenSpawn(self)\n\tspecWarnMolten:Show()\n\tspecWarnMolten:Play(\"watchstep\")\n\ttimerMoltenCD:Start(20)\n\tself:Schedule(20, warnMoltenSpawn, self)\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tberserkTimer:Start(-delay)\n\ttimerPhase:Start(-delay, L.Kite)\n\ttimerMoltenCD:Start(10-delay)\n\tself:Schedule(10-delay, warnMoltenSpawn, self)\n\tself.vb.lastTarget = \"None\"\n\tif not self:IsTrivial() then--Only warning that uses these events is remorseless winter and that warning is completely useless spam for level 90s.\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"SPELL_DAMAGE 40265 42052\",\n\t\t\t\"SPELL_MISSED 40265 42052\"\n\t\t)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tself:Unschedule(warnMoltenSpawn)\n\tself:UnregisterShortTermEvents()\n\tif self.vb.lastTarget ~= \"None\" then\n\t\tself:SetIcon(self.vb.lastTarget, 0)\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, spellId)\n\tif spellId == 40265 and destGUID == UnitGUID(\"player\") and self:AntiSpam(4, 1) and not self:IsTrivial() then\n\t\tspecWarnMolten:Show()\n\t\tspecWarnMolten:Play(\"runaway\")\n\telseif spellId == 42052 and destGUID == UnitGUID(\"player\") and self:AntiSpam(4, 2) and not self:IsTrivial() then\n\t\tspecWarnVolcano:Show()\n\t\tspecWarnVolcano:Play(\"runaway\")\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\nfunction mod:CHAT_MSG_RAID_BOSS_WHISPER(msg)\n\tif msg == L.PhaseKite or msg:find(L.PhaseKite) then\n\t\tself:SetStage(2)\n\t\twarnPhase:Show(L.Kite)\n\t\ttimerPhase:Start(L.Tank)\n\t\tself:Unschedule(ScanTarget)\n\t\tself:Schedule(4, ScanTarget, self)\n\t\tif self.vb.lastTarget ~= \"None\" then\n\t\t\tself:SetIcon(self.vb.lastTarget, 0)\n\t\tend\n\t\tif self:IsMelee() and not self:IsTrivial() then\n\t\t\t--Melee Dps Not technically fixated but melee should run out at start of kite phase in case chosen.\n\t\t\t--Tank should run out because boss actually fixates tank for couple seconds before choosing new target.\n\t\t\tspecWarnFixate:Show()\n\t\t\tspecWarnFixate:Play(\"justrun\")\n\t\tend\n\telseif msg == L.PhaseTank or msg:find(L.PhaseTank) then\n\t\tself:SetStage(1)\n\t\twarnPhase:Show(L.Tank)\n\t\ttimerPhase:Start(L.Kite)\n\t\tself:Unschedule(ScanTarget)\n\t\tif self.vb.lastTarget ~= \"None\" then\n\t\t\tself:SetIcon(self.vb.lastTarget, 0)\n\t\tend\n\telseif msg == L.ChangeTarget or msg:find(L.ChangeTarget) then\n\t\tself:Unschedule(ScanTarget)\n\t\tself:Schedule(0.5, ScanTarget, self)\n\tend\nend\n"
  },
  {
    "path": "DBM-BlackTemple/TeronGorefiend.lua",
    "content": "local mod\t= DBM:NewMod(\"TeronGorefiend\", \"DBM-BlackTemple\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(22871)\nmod:SetEncounterID(604)\n\nmod:SetModelID(21254)\nmod:SetUsedIcons(4, 5, 6, 7, 8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 40243 40251\",\n\t\"SPELL_AURA_REMOVED 40243 40251\",\n\t\"SPELL_CAST_SUCCESS 40239\"\n)\n\n--Incinerate useful?\nlocal warnCrushed\t\t\t= mod:NewTargetNoFilterAnnounce(40243, 3, nil, \"Healer\")\nlocal warnIncinerate\t\t= mod:NewSpellAnnounce(40239, 3)\nlocal warnDeath\t\t\t\t= mod:NewTargetNoFilterAnnounce(40251, 3)\n\nlocal specWarnDeath\t\t\t= mod:NewSpecialWarningYou(40251, nil, nil, nil, 1, 2)\nlocal specWarnDeathEnding\t= mod:NewSpecialWarningMoveAway(40251, nil, nil, nil, 3, 2)\n\nlocal timerCrushed\t\t\t= mod:NewBuffActiveTimer(15, 40243, nil, \"Healer\", 2, 5, nil, DBM_COMMON_L.HEALER_ICON)\nlocal timerDeathCD\t\t\t= mod:NewCDTimer(32, 40251, nil, nil, nil, 3)--32-40 (small sample size, could be bigger range)\nlocal timerDeath\t\t\t= mod:NewTargetTimer(55, 40251, nil, nil, nil, 3)\nlocal timerVengefulSpirit\t= mod:NewTimer(60, \"TimerVengefulSpirit\", 40325, nil, nil, 1)\n\nlocal berserkTimer\t\t\t= mod:NewBerserkTimer(300)\n\nmod:AddSetIconOption(\"CrushIcon\", 40243, false, false, {1, 2, 3, 4, 5})\n\nlocal CrushedTargets = {}\nmod.vb.crushIcon = 1\n\nlocal function showCrushedTargets(self)\n\twarnCrushed:Show(table.concat(CrushedTargets, \"<, >\"))\n\ttable.wipe(CrushedTargets)\n\tself.vb.crushIcon = 1\nend\n\nfunction mod:OnCombatStart(delay)\n\tberserkTimer:Start(-delay)\n\ttable.wipe(CrushedTargets)\n\ttimerDeathCD:Start(11.1-delay)--11-13?\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 40243 then\n\t\tCrushedTargets[#CrushedTargets + 1] = args.destName\n\t\ttimerCrushed:Start()\n\t\tself:Unschedule(showCrushedTargets)\n\t\tif self.Options.CrushIcon then\n\t\t\tself:SetIcon(args.destName, self.vb.crushIcon, 15)\n\t\t\tself.vb.crushIcon = self.vb.crushIcon + 1\n\t\tend\n\t\tself:Schedule(0.5, showCrushedTargets, self)\n\telseif args.spellId == 40251 then\n\t\ttimerDeath:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnDeath:Show()\n\t\t\tspecWarnDeath:Play(\"targetyou\")\n\t\t\tspecWarnDeathEnding:Schedule(50)\n\t\t\tspecWarnDeathEnding:ScheduleVoice(50, \"runout\")\n\t\telse\n\t\t\twarnDeath:Show(args.destName)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 40243 then\n\t\tif self.Options.CrushIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\telseif args.spellId == 40251 then\n\t\ttimerDeath:Stop(args.destName)\n\t\ttimerVengefulSpirit:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnDeathEnding:Cancel()\n\t\t\tspecWarnDeathEnding:CancelVoice()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 40239 then\n\t\twarnIncinerate:Show()\n\telseif args.spellId == 40251 then\n\t\ttimerDeathCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-BlackTemple/localization.cn.lua",
    "content": "-- yleaf(yaroot@gmail.com)\n-- Mini Dragon(projecteurs@gmail.com)\n-- Last update: 2017/07/18\n\nif GetLocale() ~= \"zhCN\" then return end\nlocal L\n\n-----------------\n--  Najentus  --\n-----------------\nL = DBM:GetModLocalization(\"Najentus\")\n\nL:SetGeneralLocalization({\n\tname = \"高阶督军纳因图斯\"\n})\n\nL:SetMiscLocalization({\n\tHealthInfo\t= \"Health Info\"\n})\n\n----------------\n-- Supremus --\n----------------\nL = DBM:GetModLocalization(\"Supremus\")\n\nL:SetGeneralLocalization({\n\tname = \"苏普雷姆斯\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%s Phase\",--Translate\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"Next %s phase\"--Translate\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"Show warning for next phase\",\n\tTimerPhase\t\t= \"Show time for next phase\",\n\tKiteIcon\t\t= \"Set icon on Kite target\"\n})\n\nL:SetMiscLocalization({\n\tPhaseTank\t\t= \"愤怒地击打着地面！\",--Check if Backwards\n\tPhaseKite\t\t= \"地面崩裂了！\",--Check if Backwards\n\tChangeTarget\t= \"锁定了一个新目标！\",\n\tKite\t\t\t= \"Kite\",--Translate\n\tTank\t\t\t= \"Tank\"--Translate\n})\n\n-------------------------\n--  Shape of Akama  --\n-------------------------\nL = DBM:GetModLocalization(\"Akama\")\n\nL:SetGeneralLocalization({\n\tname = \"阿卡玛之影\"\n})\n\n-------------------------\n--  Teron Gorefiend  --\n-------------------------\nL = DBM:GetModLocalization(\"TeronGorefiend\")\n\nL:SetGeneralLocalization({\n\tname = \"塔隆·血魔\"\n})\n\nL:SetTimerLocalization({\n\tTimerVengefulSpirit\t\t= \"Ghost : %s\"--Translate\n})\n\nL:SetOptionLocalization({\n\tTimerVengefulSpirit\t\t= \"Show timer for Ghost durations\"--Translate\n})\n\n----------------------------\n--  Gurtogg Bloodboil  --\n----------------------------\nL = DBM:GetModLocalization(\"Bloodboil\")\n\nL:SetGeneralLocalization({\n\tname = \"古尔图格·血沸\"\n})\n\n--------------------------\n--  Essence Of Souls  --\n--------------------------\nL = DBM:GetModLocalization(\"Souls\")\n\nL:SetGeneralLocalization({\n\tname = \"灵魂之匣\"\n})\n\nL:SetWarningLocalization({\n\tWarnMana\t\t= \"30秒后法力消耗殆尽\"\n})\n\nL:SetTimerLocalization({\n\tTimerMana\t\t= \"法力吸取\"\n})\n\nL:SetOptionLocalization({\n\tWarnMana\t\t= \"Show warning from zero mana in Phase 2\",--Translate\n\tTimerEnrage\t\t= \"Show timer for Enrage\"--Translate\n})\n\nL:SetMiscLocalization({\n\tSuffering\t\t= \"Essence of Suffering\",--Translate\n\tDesire\t\t\t= \"Essence of Desire\",--Translate\n\tAnger\t\t\t= \"Essence of Anger\",--Translate\n\tPhase1End\t\t= \"I don't want to go back!\",\n\tPhase2End\t\t= \"I won't be far!\"\n})\n\n-----------------------\n--  Mother Shahraz --\n-----------------------\nL = DBM:GetModLocalization(\"Shahraz\")\n\nL:SetGeneralLocalization({\n\tname = \"莎赫拉丝主母\"\n})\n\nL:SetTimerLocalization({\n\ttimerAura\t= \"%s\"\n})\n\nL:SetOptionLocalization({\n\ttimerAura\t= \"Show timer for Prismatic Aura\"\n})\n\n----------------------\n--  Illidari Council  --\n----------------------\nL = DBM:GetModLocalization(\"Council\")\n\nL:SetGeneralLocalization({\n\tname = \"伊利达雷议会\"\n})\n\nL:SetGeneralLocalization({\n\tname = \"Illidari Council\"\n})\n\nL:SetWarningLocalization({\n\tImmune\t\t\t= \"Malande - %s immune for 15 sec\"\n})\n\nL:SetOptionLocalization({\n\tImmune\t\t\t= \"Show warning when Manalde becomes spell or melee immune\"\n})\n\nL:SetMiscLocalization({\n\tGathios\t\t\t= \"击碎者加西奥斯\",\n\tMalande\t\t\t= \"女公爵玛兰德\",\n\tZerevor\t\t\t= \"高阶灵术师塞勒沃尔\",\n\tVeras\t\t\t= \"薇尔莱丝·深影\",\n\tMelee\t\t\t= \"近战\",\n\tSpell\t\t\t= \"法术\"\n})\n\n-------------------------\n--  Illidan Stormrage --\n-------------------------\nL = DBM:GetModLocalization(\"Illidan\")\n\nL:SetGeneralLocalization({\n\tname = \"伊利丹·怒风\"\n})\n\nL:SetWarningLocalization({\n\tWarnHuman\t\t= \"普通形态\",\n\tWarnDemon\t\t= \"恶魔形态\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextHuman\t\t= \"下一个普通形态\",\n\tTimerNextDemon\t\t= \"下一个恶魔形态\"\n})\n\nL:SetOptionLocalization({\n\tWarnHuman\t\t= \"Show warning for 普通形态\",\n\tWarnDemon\t\t= \"Show warning for 恶魔形态\",\n\tTimerNextHuman\t= \"Show time for 下一个普通形态\",\n\tTimerNextDemon\t= \"Show time for 下一个恶魔形态\",\n\tRangeFrame\t\t= \"为阶段3和阶段4显示10码距离提示\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"阿卡玛。你的两面三刀并没有让我感到意外。我早就应该把你和你那些畸形的同胞全部杀掉。\",\n\tEyebeam\t\t\t= \"直视背叛者的双眼吧！\",\n\tDemon\t\t\t= \"感受我体内的恶魔之力吧！\",\n\tPhase4\t\t\t= \"你们就这点本事吗？这就是你们全部的能耐？\",\n\tS1YouAreNotPrepared\t= \"第一阶段：自寻死路\",\n\tS2FlamesOfAzzinoth\t= \"第二阶段：埃辛诺斯之焰\",\n\tS3TheDemonWithin\t= \"第三阶段：心魔\",\n\tS4TheLongHunt\t\t= \"第四阶段：漫长的追猎\"\n})\n"
  },
  {
    "path": "DBM-BlackTemple/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n-----------------\n--  Najentus  --\n-----------------\nL = DBM:GetModLocalization(\"Najentus\")\n\nL:SetGeneralLocalization({\n\tname = \"Oberster Kriegsfürst Naj'entus\"\n})\n\nL:SetMiscLocalization({\n\tHealthInfo\t= \"Gesundheitsinfo\"\n})\n\n----------------\n-- Supremus --\n----------------\nL = DBM:GetModLocalization(\"Supremus\")\n\nL:SetGeneralLocalization({\n\tname = \"Supremus\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%sphase\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"Nächste %sphase\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"Zeige Warnung für nächste Phase\",\n\tTimerPhase\t\t= \"Zeige Zeit bis nächste Phase\",\n\tKiteIcon\t\t= \"Setze Zeichen auf das verfolgte Ziel\"\n})\n\nL:SetMiscLocalization({\n\tPhaseTank\t\t= \"schlägt wütend auf den Boden!\",\n\tPhaseKite\t\t= \"Der Boden beginnt aufzubrechen!\",\n\tChangeTarget\t= \"wählt ein neues Ziel!\",\n\tKite\t\t\t= \"Kite\",\n\tTank\t\t\t= \"Tank\"\n})\n\n-------------------------\n--  Shape of Akama  --\n-------------------------\nL = DBM:GetModLocalization(\"Akama\")\n\nL:SetGeneralLocalization({\n\tname = \"Akamas Schemen\"\n})\n\n-------------------------\n--  Teron Gorefiend  --\n-------------------------\nL = DBM:GetModLocalization(\"TeronGorefiend\")\n\nL:SetGeneralLocalization({\n\tname = \"Teron Blutschatten\"\n})\n\nL:SetTimerLocalization({\n\tTimerVengefulSpirit\t\t= \"Geist : %s\"\n})\n\nL:SetOptionLocalization({\n\tTimerVengefulSpirit\t\t= \"Dauer der Rachsüchtigen Geister anzeigen\"\n})\n\n----------------------------\n--  Gurtogg Bloodboil  --\n----------------------------\nL = DBM:GetModLocalization(\"Bloodboil\")\n\nL:SetGeneralLocalization({\n\tname = \"Gurtogg Siedeblut\"\n})\n\n--------------------------\n--  Essence Of Souls  --\n--------------------------\nL = DBM:GetModLocalization(\"Souls\")\n\nL:SetGeneralLocalization({\n\tname = \"Reliquiar der Seelen\"\n})\n\nL:SetWarningLocalization({\n\tWarnMana\t\t= \"Null Mana in 30 Sek\"\n})\n\nL:SetTimerLocalization({\n\tTimerMana\t\t= \"Null Mana\"\n})\n\nL:SetOptionLocalization({\n\tWarnMana\t\t= \"Zeige Warnung für 0 Mana in Phase 2\",\n\tTimerMana\t\t= \"Zeige Zeit bis 0 Mana in Phase 2\"\n})\n\nL:SetMiscLocalization({\n\tSuffering\t\t= \"Essenz des Leidens\",\n\tDesire\t\t\t= \"Essenz der Begierde\",\n\tAnger\t\t\t= \"Essenz des Zorns\",\n\tPhase1End\t\t= \"Ich will nicht zurück!\",\n\tPhase2End\t\t= \"Ich bin immer in Eurer Nähe!\"\n})\n\n-----------------------\n--  Mother Shahraz --\n-----------------------\nL = DBM:GetModLocalization(\"Shahraz\")\n\nL:SetGeneralLocalization({\n\tname = \"Mutter Shahraz\"\n})\n\nL:SetTimerLocalization({\n\ttimerAura\t= \"%s\"\n})\n\nL:SetOptionLocalization({\n\ttimerAura\t= \"Dauer der Prismatischen Auren anzeigen\"\n})\n\n----------------------\n--  Illidari Council  --\n----------------------\nL = DBM:GetModLocalization(\"Council\")\n\nL:SetGeneralLocalization({\n\tname = \"Der Rat der Illidari\"\n})\n\nL:SetWarningLocalization({\n\tImmune\t\t\t= \"Malande - %s für 15 Sek\"\n})\n\nL:SetOptionLocalization({\n\tImmune\t\t\t= \"Spezialwarnung, wenn Malande gegen magische oder körperliche Angriffe immun wird\"\n})\n\nL:SetMiscLocalization({\n\tGathios\t\t\t= \"Gathios der Zerschmetterer\",\n\tMalande\t\t\t= \"Lady Malande\",\n\tZerevor\t\t\t= \"Hochnethermant Zerevor\",\n\tVeras\t\t\t= \"Veras Schwarzschatten\",\n\tMelee\t\t\t= \"Körperliche Immunität\",\n\tSpell\t\t\t= \"Magieimmunität\"\n})\n\n-------------------------\n--  Illidan Stormrage --\n-------------------------\nL = DBM:GetModLocalization(\"Illidan\")\n\nL:SetGeneralLocalization({\n\tname = \"Illidan Sturmgrimm\"\n})\n\nL:SetWarningLocalization({\n\tWarnHuman\t\t= \"Normalform\",\n\tWarnDemon\t\t= \"Dämonenform\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextHuman\t\t= \"Normalform\",\n\tTimerNextDemon\t\t= \"Dämonenform\"\n})\n\nL:SetOptionLocalization({\n\tWarnHuman\t\t= \"Zeige Warnung für Normalform\",\n\tWarnDemon\t\t= \"Zeige Warnung für Dämonenform\",\n\tTimerNextHuman\t= \"Zeige Zeit bis nächste Normalform\",\n\tTimerNextDemon\t= \"Zeige Zeit bis nächste Dämonenform\",\n\tRangeFrame\t\t= \"Zeige Abstandsfenster (10m) in Phase 3 und 4\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"Akama. Euer falsches Spiel überrascht mich nicht. Ich hätte Euch und Eure missgestalteten Brüder schon vor langer Zeit abschlachten sollen.\",\n\tEyebeam\t\t\t= \"Blickt in die Augen des Verräters!\",\n\tDemon\t\t\t= \"Erzittert vor der Macht des Dämonen!\",\n\tPhase4\t\t\t= \"War's das schon, Sterbliche? Ist das alles, was Ihr zu bieten habt?\",\n\tS1YouAreNotPrepared\t= \"Phase 1: Ihr wisst nicht, was Euch erwartet\",\n\tS2FlamesOfAzzinoth\t= \"Phase 2: Flammen von Azzinoth\",\n\tS3TheDemonWithin\t= \"Phase 3: Der innere Dämon\",\n\tS4TheLongHunt\t\t= \"Phase 4: Die lange Jagd\"\n})\n"
  },
  {
    "path": "DBM-BlackTemple/localization.en.lua",
    "content": "local L\n\n-----------------\n--  Najentus  --\n-----------------\nL = DBM:GetModLocalization(\"Najentus\")\n\nL:SetGeneralLocalization({\n\tname = \"High Warlord Naj'entus\"\n})\n\nL:SetMiscLocalization({\n\tHealthInfo\t= \"Health Info\"\n})\n\n----------------\n-- Supremus --\n----------------\nL = DBM:GetModLocalization(\"Supremus\")\n\nL:SetGeneralLocalization({\n\tname = \"Supremus\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%s Phase\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"Next %s phase\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"Show warning for next phase\",\n\tTimerPhase\t\t= \"Show time for next phase\",\n\tKiteIcon\t\t= \"Set icon on Kite target\"\n})\n\nL:SetMiscLocalization({\n\tPhaseTank\t\t= \"punches the ground in anger!\",\n\tPhaseKite\t\t= \"The ground begins to crack open!\",\n\tChangeTarget\t= \"acquires a new target\",\n\tKite\t\t\t= \"Kite\",\n\tTank\t\t\t= \"Tank\"\n})\n\n-------------------------\n--  Shade of Akama  --\n-------------------------\nL = DBM:GetModLocalization(\"Akama\")\n\nL:SetGeneralLocalization({\n\tname = \"Shade of Akama\"\n})\n\nL:SetWarningLocalization({\n\twarnAshtongueDefender\t= \"Ashtongue Defender\",\n\twarnAshtongueSorcerer\t= \"Ashtongue Sorcerer\"\n})\n\nL:SetTimerLocalization({\n\ttimerAshtongueDefender\t= \"Ashtongue Defender: %s\",\n\ttimerAshtongueSorcerer\t= \"Ashtongue Sorcerer: %s\"\n})\n\nL:SetOptionLocalization({\n\twarnAshtongueDefender\t= \"Show warning for Ashtongue Defender\",\n\twarnAshtongueSorcerer\t= \"Show warning for Ashtongue Sorcerer\",\n\ttimerAshtongueDefender\t= \"Show timer for Ashtongue Defender\",\n\ttimerAshtongueSorcerer\t= \"Show timer for Ashtongue Sorcerer\"\n})\n\n-------------------------\n--  Teron Gorefiend  --\n-------------------------\nL = DBM:GetModLocalization(\"TeronGorefiend\")\n\nL:SetGeneralLocalization({\n\tname = \"Teron Gorefiend\"\n})\n\nL:SetTimerLocalization({\n\tTimerVengefulSpirit\t\t= \"Ghost : %s\"\n})\n\nL:SetOptionLocalization({\n\tTimerVengefulSpirit\t\t= \"Show timer for Ghost durations\"\n})\n\n----------------------------\n--  Gurtogg Bloodboil  --\n----------------------------\nL = DBM:GetModLocalization(\"Bloodboil\")\n\nL:SetGeneralLocalization({\n\tname = \"Gurtogg Bloodboil\"\n})\n\n--------------------------\n--  Essence Of Souls  --\n--------------------------\nL = DBM:GetModLocalization(\"Souls\")\n\nL:SetGeneralLocalization({\n\tname = \"Essence of Souls\"\n})\n\nL:SetWarningLocalization({\n\tWarnMana\t\t= \"Zero Mana in 30 sec\"\n})\n\nL:SetTimerLocalization({\n\tTimerMana\t\t= \"Mana 0\"\n})\n\nL:SetOptionLocalization({\n\tWarnMana\t\t= \"Show warning from zero mana in Phase 2\",\n\tTimerMana\t\t= \"Show timer for zero mana in Phase 2\"\n})\n\nL:SetMiscLocalization({\n\tSuffering\t\t= \"Essence of Suffering\",\n\tDesire\t\t\t= \"Essence of Desire\",\n\tAnger\t\t\t= \"Essence of Anger\",\n\tPhase1End\t\t= \"I don't want to go back!\",\n\tPhase2End\t\t= \"I won't be far!\"\n})\n\n-----------------------\n--  Mother Shahraz --\n-----------------------\nL = DBM:GetModLocalization(\"Shahraz\")\n\nL:SetGeneralLocalization({\n\tname = \"Mother Shahraz\"\n})\n\nL:SetTimerLocalization({\n\ttimerAura\t= \"%s\"\n})\n\nL:SetOptionLocalization({\n\ttimerAura\t= \"Show timer for Prismatic Aura\"\n})\n\n----------------------\n--  Illidari Council  --\n----------------------\nL = DBM:GetModLocalization(\"Council\")\n\nL:SetGeneralLocalization({\n\tname = \"Illidari Council\"\n})\n\nL:SetWarningLocalization({\n\tImmune\t\t\t= \"Malande - %s immune for 15 sec\"\n})\n\nL:SetOptionLocalization({\n\tImmune\t\t\t= \"Show warning when Manalde becomes spell or melee immune\"\n})\n\nL:SetMiscLocalization({\n\tGathios\t\t\t= \"Gathios the Shatterer\",\n\tMalande\t\t\t= \"Lady Malande\",\n\tZerevor\t\t\t= \"High Nethermancer Zerevor\",\n\tVeras\t\t\t= \"Veras Darkshadow\",\n\tMelee\t\t\t= \"Melee\",\n\tSpell\t\t\t= \"Spell\"\n})\n\n-------------------------\n--  Illidan Stormrage --\n-------------------------\nL = DBM:GetModLocalization(\"Illidan\")\n\nL:SetGeneralLocalization({\n\tname = \"Illidan Stormrage\"\n})\n\nL:SetWarningLocalization({\n\tWarnHuman\t\t= \"Human Phase\",\n--\tWarnDemon\t\t= \"Demon Phase\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextHuman\t\t= \"Next Human Phase\",\n--\tTimerNextDemon\t\t= \"Next Demon Phase\"\n})\n\nL:SetOptionLocalization({\n\tWarnHuman\t\t= \"Show warning for Human Phase\",\n--\tWarnDemon\t\t= \"Show warning for Demon Phase\",\n\tTimerNextHuman\t= \"Show time for Next Human Phase\"\n--\tTimerNextDemon\t= \"Show time for Demon Human Phase\"\n--\tRangeFrame\t\t= \"Show range frame (10 yards) in Phase 3 and 4\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"Akama. Your duplicity is hardly surprising. I should have slaughtered you and your malformed brethren long ago.\",\n\tPullWarmane\t\t= \"Akama... your duplicity is hardly surprising. I should have slaughtered you and your malformed brethren long ago.\",\n\tEyebeam\t\t\t= \"Stare into the eyes of the Betrayer!\",\n\tDemon\t\t\t= \"Behold the power... of the demon within!\",\n\tPhase4\t\t\t= \"Is this it, mortals? Is this all the fury you can muster?\",\n\tS1YouAreNotPrepared\t= \"Stage One: You Are Not Prepared\",\n\tS2FlamesOfAzzinoth\t= \"Stage Two: Flames of Azzinoth\",\n\tS3TheDemonWithin\t= \"Stage Three: The Demon Within\",\n\tS4TheLongHunt\t\t= \"Stage Four: The Long Hunt\"\n})\n"
  },
  {
    "path": "DBM-BlackTemple/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" or GetLocale() ~= \"esMX\" then return end\nlocal L\n\n-----------------\n--  Najentus  --\n-----------------\nL = DBM:GetModLocalization(\"Najentus\")\n\nL:SetGeneralLocalization({\n\tname = \"Gran señor de la guerra Naj'entus\"\n})\n\nL:SetOptionLocalization({\n\tRangeFrame\t= DBM_CORE_L.AUTO_RANGE_OPTION_TEXT_SHORT:format(8)\n})\n\nL:SetMiscLocalization({\n\tHealthInfo\t= \"Salud de los jugadores\"\n})\n\n----------------\n-- Supremus --\n----------------\nL = DBM:GetModLocalization(\"Supremus\")\n\nL:SetGeneralLocalization({\n\tname = \"Supremus\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"Fase de %s\",\n\tWarnKite\t\t= \"Mirada en >%s<\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"Siguiente fase de %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"Anunciar cambios de fase\",\n\tWarnKite\t\t= \"Anunciar objetivos de Mirada\",\n\tTimerPhase\t\t= \"Mostrar temporizador para los cambios de fase\",\n\tKiteIcon\t\t= \"Poner icono en el objetivo de Mirada\"\n})\n\nL:SetMiscLocalization({\n\tPhaseTank\t\t= \"golpea el suelo enfadado!\",\n\tPhaseKite\t\t= \"El suelo comienza a abrirse.\",\n\tChangeTarget\t= \"adquiere un nuevo objetivo!\",\n\tKite\t\t\t= \"persecución\",\n\tTank\t\t\t= \"tanqueo\"\n})\n\n-------------------------\n--  Shape of Akama  --\n-------------------------\nL = DBM:GetModLocalization(\"Akama\")\n\nL:SetGeneralLocalization({\n\tname = \"Sombra de Akama\"\n})\n\n-------------------------\n--  Teron Gorefiend  --\n-------------------------\nL = DBM:GetModLocalization(\"TeronGorefiend\")\n\nL:SetGeneralLocalization({\n\tname = \"Teron Sanguino\"\n})\n\nL:SetTimerLocalization({\n\tTimerVengefulSpirit\t\t= \"Fantasma: %s\"\n})\n\nL:SetOptionLocalization({\n\tTimerVengefulSpirit\t\t= \"Mostrar temporizador para la duración de la forma de fantasma\"\n})\n\n----------------------------\n--  Gurtogg Bloodboil  --\n----------------------------\nL = DBM:GetModLocalization(\"Bloodboil\")\n\nL:SetGeneralLocalization({\n\tname = \"Gurtogg Sangre Hirviente\"\n})\n\n--------------------------\n--  Essence Of Souls  --\n--------------------------\nL = DBM:GetModLocalization(\"Souls\")\n\nL:SetGeneralLocalization({\n\tname = \"Relicario de Almas\"\n})\n\nL:SetWarningLocalization({\n\tWarnMana\t\t= \"Sin maná en 30 s\"\n})\n\nL:SetTimerLocalization({\n\tTimerMana\t\t= \"Sin maná\"\n})\n\nL:SetOptionLocalization({\n\tWarnMana\t\t= \"Mostrar aviso previo para cuando el maná máximo de los jugadores llegue a cero en Fase 2\",\n\tTimerMana\t\t= \"Mostrar temporizador para cuando el maná máximo de los jugadores llegue a cero en Fase 2\"\n})\n\nL:SetMiscLocalization({\n\tSuffering\t\t= \"Esencia de sufrimiento\",\n\tDesire\t\t\t= \"Esencia de deseo\",\n\tAnger\t\t\t= \"Esencia de inquina\"\n})\n\n-----------------------\n--  Mother Shahraz --\n-----------------------\nL = DBM:GetModLocalization(\"Shahraz\")\n\nL:SetGeneralLocalization({\n\tname = \"Madre Shahraz\"\n})\n\nL:SetTimerLocalization({\n\ttimerAura\t= \"%s\"\n})\n\nL:SetOptionLocalization({\n\ttimerAura\t= \"Mostrar temporizador para la siguiente Aura centelleante\"\n})\n\n----------------------\n--  Illidari Council  --\n----------------------\nL = DBM:GetModLocalization(\"Council\")\n\nL:SetGeneralLocalization({\n\tname = \"El Consejo Illidari\"\n})\n\nL:SetWarningLocalization({\n\tImmune\t\t\t= \"Malande inmune a %s durante 15 s\"\n})\n\nL:SetOptionLocalization({\n\tImmune\t\t\t= \"Mostrar aviso cuando Manalde se vuelva inmune al daño físico o de hechizos\"\n})\n\nL:SetMiscLocalization({\n\tGathios\t\t\t= \"Gathios el Despedazador\",\n\tMalande\t\t\t= \"Lady Malande\",\n\tZerevor\t\t\t= \"Sumo abisálico Zerevor\",\n\tVeras\t\t\t= \"Veras Sombra Oscura\",\n\tMelee\t\t\t= \"físico\",\n\tSpell\t\t\t= \"hechizos\"\n})\n\n-------------------------\n--  Illidan Stormrage --\n-------------------------\nL = DBM:GetModLocalization(\"Illidan\")\n\nL:SetGeneralLocalization({\n\tname = \"Illidan Tempestira\"\n})\n\nL:SetWarningLocalization({\n\tWarnHuman\t\t= \"Fase humanoide\",\n\tWarnDemon\t\t= \"Fase demoníaca\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextHuman\t\t= \"Siguiente fase humanoide\",\n\tTimerNextDemon\t\t= \"Siguiente fase demoníaca\"\n})\n\nL:SetOptionLocalization({\n\tWarnHuman\t\t= \"Anunciar cambio a fase humanoide\",\n\tWarnDemon\t\t= \"Anunciar cambio a fase demoníaca\",\n\tTimerNextHuman\t= \"Mostrar temporizador para la siguiente fase humanoide\",\n\tTimerNextDemon\t= \"Mostrar temporizador para la siguiente fase demoníaca\",\n\tRangeFrame\t\t= \"Mostrar marco de distancia (10 m) en las fases 3 y 4\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"Akama. Tu hipocresía no me sorprende. Debí acabar contigo y con tus malogrados hermanos hace tiempo.\",\n\tEyebeam\t\t\t= \"¡Mirad los ojos del Traidor!\",\n\tDemon\t\t\t= \"¡Observad el poder...del demonio interior!\",--sic\n\tPhase4\t\t\t= \"¿Esto es todo, mortales? ¿Es esta toda la furia que podéis reunir?\",\n\tS1YouAreNotPrepared\t= \"Fase 1: No estáis preparados\",\n\tS2FlamesOfAzzinoth\t= \"Fase 2: Las llamas de Azzinoth\",\n\tS3TheDemonWithin\t= \"Fase 3: El demonio interior\",\n\tS4TheLongHunt\t\t= \"Fase 4: La gran cacería\"\n})\n"
  },
  {
    "path": "DBM-BlackTemple/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\nlocal L\n\n-- -----------------\n-- --  Najentus  --\n-- -----------------\nL = DBM:GetModLocalization(\"Najentus\")\n\nL:SetGeneralLocalization({\n\tname = \"Grand seigneur de guerre Naj'entus\"\n})\n\nL:SetMiscLocalization({\n\tHealthInfo\t= \"Health Info\"\n})\n\n-- ----------------\n-- -- Supremus --\n-- ----------------\nL = DBM:GetModLocalization(\"Supremus\")\n\nL:SetGeneralLocalization({\n\tname = \"Supremus\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%s Phase\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"Next %s phase\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"Montre une alerte pour la prochaine phase\",\n\tTimerPhase\t\t= \"Montre un timer pour la prochaine phase\",\n\tKiteIcon\t\t= \"Mettre une icône sur la cible de $spell:41295\",\n})\n\nL:SetMiscLocalization({\n\tPhaseTank\t\t= \"De rage, Supremus frappe le sol !\",\n\tPhaseKite\t\t= \"Le sol commence à se fissurer !\",\n\tChangeTarget\t= \"Supremus choisit une nouvelle cible !\",\n\tKite\t\t\t= \"Kite\",\n\tTank\t\t\t= \"Tank\"\n})\n\n-- -------------------------\n-- --  Shade of Akama  --\n-- -------------------------\nL = DBM:GetModLocalization(\"Akama\")\n\nL:SetGeneralLocalization({\n\tname = \"Ombre d'Akama\"\n})\n\nL:SetWarningLocalization({\n\twarnAshtongueDefender\t= \"Défenseur cendrelangue\",\n\twarnAshtongueSorcerer\t= \"Sorcier cendrelangue\"\n})\n\nL:SetTimerLocalization({\n\ttimerAshtongueDefender\t= \"Défenseur cendrelangue : %s\",\n\ttimerAshtongueSorcerer\t= \"Sorcier cendrelangue : %s\"\n})\n\nL:SetOptionLocalization({\n\twarnAshtongueDefender\t= \"Afficher une alerte pour le Défenseur cendrelangue\",\n\twarnAshtongueSorcerer\t= \"Afficher une alerte pour le Sorcier cendrelangue\",\n\ttimerAshtongueDefender\t= \"Afficher un timer pour le Défenseur cendrelangue\",\n\ttimerAshtongueSorcerer\t= \"Afficher un timer pour le Sorcier cendrelangue\"\n})\n\n-- -------------------------\n-- --  Teron Gorefiend  --\n-- -------------------------\nL = DBM:GetModLocalization(\"TeronGorefiend\")\n\nL:SetGeneralLocalization({\n\tname = \"Teron Fielsang\"\n})\n\nL:SetTimerLocalization({\n\tTimerVengefulSpirit\t\t= \"Esprit vengeur : %s\"\n})\n\nL:SetOptionLocalization({\n\tTimerVengefulSpirit\t\t= \"Afficher un timer pour la durée d'esprit vengeur\"\n})\n\n-- ----------------------------\n-- --  Gurtogg Bloodboil  --\n-- ----------------------------\nL = DBM:GetModLocalization(\"Bloodboil\")\n\nL:SetGeneralLocalization({\n\tname = \"Gurtogg Fièvresang\"\n})\n\n-- --------------------------\n-- --  Essence Of Souls  --\n-- --------------------------\nL = DBM:GetModLocalization(\"Souls\")\n\nL:SetGeneralLocalization({\n\tname = \"Essence des âmes\"\n})\n\nL:SetWarningLocalization({\n\tWarnMana\t\t= \"Mana à zéro dans 30 sec\"\n})\n\nL:SetTimerLocalization({\n\tTimerMana\t\t= \"Mana à 0\"\n})\n\nL:SetOptionLocalization({\n\tWarnMana\t\t= \"Afficher une alerte pour le mana à zéro pendant la phase 2\",\n\tTimerMana\t\t= \"Afficher un timer pour le mana à zéro pendant la phase 2\"\n})\n\nL:SetMiscLocalization({\n\tSuffering\t\t= \"Essence de la souffrance\",\n\tDesire\t\t\t= \"Essence du désir.\",\n\tAnger\t\t\t= \"Essence de la colère\",\n\tPhase1End\t\t= \"Je ne veux pas y retourner !\",\n\tPhase2End\t\t= \"Je ne serai jamais loin !\"\n})\n\n-- -----------------------\n-- --  Mother Shahraz --\n-- -----------------------\nL = DBM:GetModLocalization(\"Shahraz\")\n\nL:SetGeneralLocalization({\n\tname = \"Mère Shahraz\"\n})\n\nL:SetTimerLocalization({\n\ttimerAura\t= \"%s\"\n})\n\nL:SetOptionLocalization({\n\ttimerAura\t= \"Afficher un timer pour l'Aura prismatique\"\n})\n\n-- ----------------------\n-- --  Illidari Council  --\n-- ----------------------\nL = DBM:GetModLocalization(\"Council\")\n\nL:SetGeneralLocalization({\n\tname = \"Conseil illidari\"\n})\n\nL:SetWarningLocalization({\n\tImmune\t\t\t= \"Malande - %s immunisée pendant 15 sec\"\n})\n\nL:SetOptionLocalization({\n\tImmune\t\t\t= \"Afficher une alerte quand Malande devient immunisée aux sorts ou aux attaques\"\n})\n\nL:SetMiscLocalization({\n\tGathios\t\t\t= \"Gathios le Briseur\",\n\tMalande\t\t\t= \"Dame Malande\",\n\tZerevor\t\t\t= \"Grand néantomancien Zerevor\",\n\tVeras\t\t\t= \"Veras Ombrenoir\",\n\tMelee\t\t\t= \"Melee\",\n\tSpell\t\t\t= \"Spell\"\n})\n\n-------------------------\n--  Illidan Stormrage --\n-------------------------\nL = DBM:GetModLocalization(\"Illidan\")\n\nL:SetGeneralLocalization({\n\tname = \"Illidan Hurlorage\"\n})\n\nL:SetWarningLocalization({\n\tWarnHuman\t\t= \"Phase humaine\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextHuman\t\t= \"Prochaine phase humaine\"\n})\n\nL:SetOptionLocalization({\n\tWarnHuman\t\t= \"Afficher l'avertissement pour la phase humaine\",\n\tTimerNextHuman\t= \"Afficher l'heure de la prochaine phase humaine\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"Akama. Ta duplicité n'est pas très étonnante. J'aurais dû vous massacrer depuis longtemps, toi et tes frères déformés.\",\n\tEyebeam\t\t\t= \"Soutenez le regard du Traître !\",\n\tDemon\t\t\t= \"Contemplez la puissance... du démon intérieur !\",\n\tPhase4\t\t\t= \"C'est tout, mortels ? Est-ce là toute la fureur que vous pouvez évoquer ?\",\n\tS1YouAreNotPrepared\t= \"Phase 1 : Vous n’êtes pas prêts\",\n\tS2FlamesOfAzzinoth\t= \"Phase 2 : Les flammes d’Azzinoth\",\n\tS3TheDemonWithin\t= \"Phase 3 : Le démon intérieur\",\n\tS4TheLongHunt\t\t= \"Phase 4 : La longue traque\"\n})\n"
  },
  {
    "path": "DBM-BlackTemple/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n-----------------\n--  Najentus  --\n-----------------\nL = DBM:GetModLocalization(\"Najentus\")\n\nL:SetGeneralLocalization({\n\tname = \"대장군 나젠투스\"\n})\n\nL:SetMiscLocalization({\n\tHealthInfo\t= \"생명력 정보\"\n})\n\n----------------\n-- Supremus --\n----------------\nL = DBM:GetModLocalization(\"Supremus\")\n\nL:SetGeneralLocalization({\n\tname = \"궁극의 심연\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%s 단계\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"다음 %s 단계\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"다음 단계 경고 보기\",\n\tTimerPhase\t\t= \"다음 단계 타이머 바 보기\",\n\tKiteIcon\t\t= \"드리블 대상에 공격대 징표 설정\"\n})\n\nL:SetMiscLocalization({\n\tPhaseTank\t\t= \"땅이 갈라져서 열리기 시작합니다!\",\n\tPhaseKite\t\t= \"분노하여 땅을 내리찍습니다!\",\n\tChangeTarget\t= \"새로운 대상이 필요합니다!\",\n\tKite\t\t\t= \"드리블\",\n\tTank\t\t\t= \"일반\"\n})\n\n-------------------------\n--  Shape of Akama  --\n-------------------------\nL = DBM:GetModLocalization(\"Akama\")\n\nL:SetGeneralLocalization({\n\tname = \"아카마의 망령\"\n})\n\n-------------------------\n--  Teron Gorefiend  --\n-------------------------\nL = DBM:GetModLocalization(\"TeronGorefiend\")\n\nL:SetGeneralLocalization({\n\tname = \"테론 고어핀드\"\n})\n\nL:SetTimerLocalization({\n\tTimerVengefulSpirit\t\t= \"유령 : %s\"\n})\n\nL:SetOptionLocalization({\n\tTimerVengefulSpirit\t\t= \"유령 지속시간 타이머 바 보기\"\n})\n\n----------------------------\n--  Gurtogg Bloodboil  --\n----------------------------\nL = DBM:GetModLocalization(\"Bloodboil\")\n\nL:SetGeneralLocalization({\n\tname = \"구르토그 블러드보일\"\n})\n\n--------------------------\n--  Essence Of Souls  --\n--------------------------\nL = DBM:GetModLocalization(\"Souls\")\n\nL:SetGeneralLocalization({\n\tname = \"영혼의 성물함\"\n})\n\nL:SetWarningLocalization({\n\tWarnMana\t\t= \"30초 후 마나 0\"\n})\n\nL:SetTimerLocalization({\n\tTimerMana\t\t= \"마나 0\"\n})\n\nL:SetOptionLocalization({\n\tWarnMana\t\t= \"2단계에서 마나 0이 되기 30초 전에 경고 보기\",\n\tTimerMana\t\t= \"2단계 마나 0 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tSuffering\t\t= \"고뇌의 정수\",\n\tDesire\t\t\t= \"욕망의 정수\",\n\tAnger\t\t\t= \"격노의 정수\",\n\tPhase1End\t\t= \"나 안 돌아갈래!\",\n\tPhase2End\t\t= \"멀리 가진 않겠다!\"\n})\n\n-----------------------\n--  Mother Shahraz --\n-----------------------\nL = DBM:GetModLocalization(\"Shahraz\")\n\nL:SetGeneralLocalization({\n\tname = \"대모 샤라즈\"\n})\n\nL:SetOptionLocalization({\n\ttimerAura\t= \"변위의 오라 타이머 바 보기\"\n})\n\n----------------------\n--  Illidari Council  --\n----------------------\nL = DBM:GetModLocalization(\"Council\")\n\nL:SetGeneralLocalization({\n\tname = \"일리다리 의회\"\n})\n\nL:SetWarningLocalization({\n\tImmune\t\t\t= \"말란데 - %s 면역 15초\"\n})\n\nL:SetOptionLocalization({\n\tImmune\t\t\t= \"말란데가 물리 또는 주문 면역이 되었을 때 특수 경고 보기\"\n})\n\nL:SetMiscLocalization({\n\tGathios\t\t\t= \"파괴자 가디오스\",\n\tMalande\t\t\t= \"여군주 말란데\",\n\tZerevor\t\t\t= \"고위 황천술사 제레보르\",\n\tVeras\t\t\t= \"베라스 다크섀도\",\n\tMelee\t\t\t= \"물리\",\n\tSpell\t\t\t= \"주문\"\n})\n\n-------------------------\n--  Illidan Stormrage --\n-------------------------\nL = DBM:GetModLocalization(\"Illidan\")\n\nL:SetGeneralLocalization({\n\tname = \"일리단 스톰레이지\"\n})\n\nL:SetWarningLocalization({\n\tWarnHuman\t\t= \"인간 단계\",\n\tWarnDemon\t\t= \"악마 단계\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextHuman\t\t= \"다음 인간 단계\",\n\tTimerNextDemon\t\t= \"다음 악마 단계\"\n})\n\nL:SetOptionLocalization({\n\tWarnHuman\t\t= \"인간 단계 경고 보기\",\n\tWarnDemon\t\t= \"악마 단계 경고 보기\",\n\tTimerNextHuman\t= \"다음 인간 단계 타이머 바 보기\",\n\tTimerNextDemon\t= \"다음 악마 단계 타이머 바 보기\",\n\tRangeFrame\t\t= \"3, 4단계에서 거리 창 보기 (10m)\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"아카마, 너의 불충은 그리 놀랍지도 않구나. 너희 흉측한 형제들을 벌써 오래전에 없애버렸어야 했는데...\",\n\tEyebeam\t\t\t= \"배신자의 눈을 똑바로 쳐다봐라!\",\n\tDemon\t\t\t= \"내 안에 깃든... 악마의 힘을 보여주마!\",\n\tPhase4\t\t\t= \"필멸의 종족들이여, 나에 대한 증오가 고작 이 정도냐?\",\n\tS1YouAreNotPrepared\t= \"1단계: 너흰 아직 준비가 안 됐다\",\n\tS2FlamesOfAzzinoth\t= \"2단계: 아지노스의 불꽃\",\n\tS3TheDemonWithin\t= \"3단계: 내면의 악마\",\n\tS4TheLongHunt\t\t= \"4단계: 기나긴 사냥\"\n})\n"
  },
  {
    "path": "DBM-BlackTemple/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\nlocal L\n\n-----------------\n--  Najentus  --\n-----------------\nL = DBM:GetModLocalization(\"Najentus\")\n\nL:SetGeneralLocalization({\n\tname = \"Верховный Полководец Надж'ентус\"\n})\n\nL:SetOptionLocalization({\n\tRangeFrame\t= \"Show range frame (10)\"--Translate\n})\n\n----------------\n-- Supremus --\n----------------\nL = DBM:GetModLocalization(\"Supremus\")\n\nL:SetGeneralLocalization({\n\tname = \"Супремус\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%s Phase\",--Translate\n\tWarnPhaseSoon\t= \"%s Phase in 10\",--Translate\n\tWarnKite\t\t= \"Gaze on >%s<\"--Translate\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"Next %s phase\"--Translate\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"Show warning for next phase\",--Translate\n\tWarnPhaseSoon\t= \"Show pre-warning for next phase\",--Translate\n\tWarnKite\t\t= \"Announce Kite targets\",--Translate\n\tTimerPhase\t\t= \"Show time for next phase\",--Translate\n\tKiteIcon\t\t= \"Set icon on Kite target\",--Translate\n\tKiteWhisper\t\t= \"Send whisper to Kite target (requires Raid Leader)\"--Translate\n})\n\nL:SetMiscLocalization({\n\tPhaseTank\t\t= \"в гневе ударяет по земле!\",--Check if Backwards\n\tPhaseKite\t\t= \"Земля начинает раскалываться!\",--Check if Backwards\n\tChangeTarget\t= \"атакует новую цель!\",\n\tKite\t\t\t= \"Kite\",--Translate\n\tTank\t\t\t= \"Tank\"--Translate\n})\n\n-------------------------\n--  Shape of Akama  --\n-------------------------\nL = DBM:GetModLocalization(\"Akama\")\n\nL:SetGeneralLocalization({\n\tname = \"Тень Акамы\"\n})\n\n-------------------------\n--  Teron Gorefiend  --\n-------------------------\nL = DBM:GetModLocalization(\"TeronGorefiend\")\n\nL:SetGeneralLocalization({\n\tname = \"Терон Кровожад\"\n})\n\nL:SetTimerLocalization({\n\tTimerVengefulSpirit\t\t= \"Ghost : %s\"--Translate\n})\n\nL:SetOptionLocalization({\n\tTimerVengefulSpirit\t\t= \"Show timer for Ghost durations\"--Translate\n})\n\n----------------------------\n--  Gurtogg Bloodboil  --\n----------------------------\nL = DBM:GetModLocalization(\"Bloodboil\")\n\nL:SetGeneralLocalization({\n\tname = \"Гуртогг Кипящая Кровь\"\n})\n\nL:SetWarningLocalization({\n\tWarnRageEnd\t\t= \"Fel Rage End\",--Translate\n})\n\nL:SetTimerLocalization({\n\tTimerRageEnd\t= \"Fel Rage End\"--Translate\n})\n\nL:SetOptionLocalization({\n\tWarnRageEnd\t\t= \"Show warning for $spell:40604 ends\",--Translate\n\tTimerRageEnd\t= \"Show timer for $spell:40604 ends\"--Translate\n})\n\n--------------------------\n--  Essence Of Souls  --\n--------------------------\nL = DBM:GetModLocalization(\"Souls\")\n\nL:SetGeneralLocalization({\n\tname = \"Воплощение Душ\"\n})\n\nL:SetWarningLocalization({\n\tWarnEnrage\t\t= \"Озверение\",\n\tWarnEnrageSoon\t= \"Озверение скоро\",\n\tWarnEnrageEnd\t= \"Озверение закончилось\",\n\tWarnMana\t\t= \"Ноль маны через 30 сек\"\n})\n\nL:SetTimerLocalization({\n\tTimerEnrage\t\t= \"Озверение\",\n\tTimerNextEnrage\t= \"Next Озверение\",--Translate\n\tTimerMana\t\t= \"Mana 0\"--Translate\n})\n\nL:SetOptionLocalization({\n\tWarnEnrage\t\t= \"Show warning for Enrage\",--Translate\n\tWarnEnrageSoon\t= \"Show pre-warning for Enrage\",--Translate\n\tWarnEnrageEnd\t= \"Show warning when Enrage ends\",--Translate\n\tWarnMana\t\t= \"Show warning from zero mana in Phase 2\",--Translate\n\tTimerEnrage\t\t= \"Show timer for Enrage\",--Translate\n\tTimerNextEnrage\t= \"Show timer for next Enrage\",--Translate\n\tTimerMana\t\t= \"Show timer for zero mana in Phase 2\",--Translate\n\tSpiteWhisper\t= \"Send whisper to $spell:41376 targets (requires Raid Leader)\"--Translate\n})\n\nL:SetMiscLocalization({\n\tEnrage\t\t\t= \"%s впадает в ярость!\",\n\tSpiteWhisper\t= \"Злоба на Вас!\",\n\tSuffering\t\t= \"Essence of Suffering\",--Translate\n\tDesire\t\t\t= \"Essence of Desire\",--Translate\n\tAnger\t\t\t= \"Essence of Anger\"--Translate\n})\n\n-----------------------\n--  Mother Shahraz --\n-----------------------\nL = DBM:GetModLocalization(\"Shahraz\")\n\nL:SetGeneralLocalization({\n\tname = \"Матушка Шахраз\"\n})\n\n----------------------\n--  Illidari Council  --\n----------------------\nL = DBM:GetModLocalization(\"Council\")\n\nL:SetGeneralLocalization({\n\tname = \"Совет Иллидари\"\n})\n\nL:SetWarningLocalization({\n\tWarnFadeSoon\t= \"Vanish fades in 5 sec\",--Translate\n\tWarnFaded\t\t= \"Vanish faded\",--Translate\n\tWarnDevAura\t\t= \"Devotion Aura for 30 sec\",--Translate\n\tWarnResAura\t\t= \"Resistance Aura for 30 sec\",--Translate\n\tImmune\t\t\t= \"Malande - %s immune for 15 sec\"--Translate\n})\n\nL:SetOptionLocalization({\n\tWarnFadeSoon\t= \"Show warning 5 seconds before $spell:41476 fades\",--Translate\n\tWarnFaded\t\t= \"Show warning when $spell:41476 fades\",--Translate\n\tWarnDevAura\t\t= \"Show warning for $spell:41452\",--Translate\n\tWarnResAura\t\t= \"Show warning for $spell:41453\",--Translate\n\tImmune\t\t\t= \"Show warning when Manalde becomes spell or melee immune\"--Translate\n})\n\nL:SetMiscLocalization({\n\tGathios\t\t\t= \"Гатиос Изувер\",\n\tMalande\t\t\t= \"Леди Маланда\",\n\tZerevor\t\t\t= \"Верховный пустомант Зеревор\",\n\tVeras\t\t\t= \"Верас Глубокий Мрак\",\n\tMelee\t\t\t= \"Melee\",--Translate\n\tSpell\t\t\t= \"Spell\",--Translate\n\tPoisonWhisper\t= \"Deadly Poison on you!\"--Translate\n})\n\n-------------------------\n--  Illidan Stormrage --\n-------------------------\nL = DBM:GetModLocalization(\"Illidan\")\n\nL:SetGeneralLocalization({\n\tname = \"Иллидан Ярость Бури\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase2Soon\t= \"Фаза 2 скоро\",\n\tWarnPhase4Soon\t= \"Фаза 4 скоро\",\n\tWarnHuman\t\t= \"Обычная Фаза\",\n\tWarnHumanSoon\t= \"Обычная Фаза скоро\",\n\tWarnDemon\t\t= \"Демона Фаза\",\n\tWarnDemonSoon\t= \"Демона Фаза скоро\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextHuman\t\t= \"Next Обычная Фаза\",--Translate\n\tTimerNextDemon\t\t= \"Next Демона Фаза\"--Translate\n})\n\nL:SetOptionLocalization({\n\tWarnPhase2Soon\t= \"Show pre-warning for Phase 2 transition (at ~75%)\",--Translate\n\tWarnPhase4Soon\t= \"Show pre-warning for Phase 4 transition (at ~35%)\",--Translate\n\tWarnHuman\t\t= \"Show warning for Human Phase\",--Translate\n\tWarnHumanSoon\t= \"Show pre-warning for Human Phase\",--Translate\n\tWarnDemon\t\t= \"Show warning for Demon Phase\",--Translate\n\tWarnDemonSoon\t= \"Show pre-warning for Demon Phase\",--Translate\n\tTimerNextHuman\t= \"Show time for Next Human Phase\",--Translate\n\tTimerNextDemon\t= \"Show time for Demon Human Phase\",--Translate\n\tRangeFrame\t\t= \"Show range frame (10 yards) in Phase 3 and 4\"--Translate\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"Акама! Твое двуличие меня не удивляет. Мне давным-давно стоило уничтожить тебя и твоих уродливых собратьев.\",\n\tEyebeam\t\t\t= \"Посмотри в глаза Предателя!\",\n\tDemon\t\t\t= \"Узрите мощь демона!\",\n\tPhase4\t\t\t= \"Это все, смертные? Это и есть вся ваша ярость?\",\n\tS1YouAreNotPrepared\t= \"Stage One: You Are Not Prepared\",\n\tS2FlamesOfAzzinoth\t= \"Stage Two: Flames of Azzinoth\",\n\tS3TheDemonWithin\t= \"Stage Three: The Demon Within\",\n\tS4TheLongHunt\t\t= \"Stage Four: The Long Hunt\"\n})\n"
  },
  {
    "path": "DBM-BlackTemple/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n-----------------\n--  Najentus  --\n-----------------\nL = DBM:GetModLocalization(\"Najentus\")\n\nL:SetGeneralLocalization({\n\tname = \"高階督軍納珍塔斯\"\n})\n\nL:SetMiscLocalization({\n\tHealthInfo\t= \"血量資訊\"\n})\n\n----------------\n-- Supremus --\n----------------\nL = DBM:GetModLocalization(\"Supremus\")\n\nL:SetGeneralLocalization({\n\tname = \"瑟普莫斯\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%s階段\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"下一次%s階段\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"為下個階段顯示警告\",\n\tTimerPhase\t\t= \"為下個階段顯示計時器\",\n\tKiteIcon\t\t= \"為注視目標設置圖示\",\n})\n\nL:SetMiscLocalization({\n\tPhaseTank\t\t= \"瑟普莫斯憤怒的捶擊地面!\",--Check if Backwards\n\tPhaseKite\t\t= \"地上開始裂開!\",--Check if Backwards\n\tChangeTarget\t= \"瑟普莫斯需要一個新目標!\",\n\tKite\t\t\t= \"風箏\",\n\tTank\t\t\t= \"坦克\"\n})\n\n-------------------------\n--  Shape of Akama  --\n-------------------------\nL = DBM:GetModLocalization(\"Akama\")\n\nL:SetGeneralLocalization({\n\tname = \"阿卡瑪的黑暗面\"\n})\n\n-------------------------\n--  Teron Gorefiend  --\n-------------------------\nL = DBM:GetModLocalization(\"TeronGorefiend\")\n\nL:SetGeneralLocalization({\n\tname = \"泰朗·血魔\"\n})\n\nL:SetTimerLocalization({\n\tTimerVengefulSpirit\t= \"鬼魂:%s\"\n})\n\nL:SetOptionLocalization({\n\tTimerVengefulSpirit\t= \"為鬼魂持續時間顯示計時器\"\n})\n\n----------------------------\n--  Gurtogg Bloodboil  --\n----------------------------\nL = DBM:GetModLocalization(\"Bloodboil\")\n\nL:SetGeneralLocalization({\n\tname = \"葛塔格·血沸\"\n})\n\n--------------------------\n--  Essence Of Souls  --\n--------------------------\nL = DBM:GetModLocalization(\"Souls\")\n\nL:SetGeneralLocalization({\n\tname = \"靈魂聖匣\"\n})\n\nL:SetWarningLocalization({\n\tWarnMana\t\t= \"30秒後法力用盡\"\n})\n\nL:SetTimerLocalization({\n\tTimerMana\t\t= \"法力耗盡\"\n})\n\nL:SetOptionLocalization({\n\tWarnMana\t\t= \"在第二階段耗盡法力顯示警告\",\n\tTimerMana\t\t= \"在第二階段法力耗盡顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tSuffering\t\t= \"受難精華\",\n\tDesire\t\t\t= \"慾望精華\",\n\tAnger\t\t\t= \"憤怒精華\",\n\tPhase1End\t\t= \"I don't want to go back!\",\n\tPhase2End\t\t= \"I won't be far!\"\n})\n\n-----------------------\n--  Mother Shahraz --\n-----------------------\nL = DBM:GetModLocalization(\"Shahraz\")\n\nL:SetGeneralLocalization({\n\tname = \"薩拉茲女士\"\n})\n\nL:SetTimerLocalization({\n\ttimerAura\t= \"%s\"\n})\n\nL:SetOptionLocalization({\n\ttimerAura\t= \"為稜石光環顯示計時器\"\n})\n\n----------------------\n--  Illidari Council  --\n----------------------\nL = DBM:GetModLocalization(\"Council\")\n\nL:SetGeneralLocalization({\n\tname = \"伊利達瑞議會\"\n})\n\nL:SetWarningLocalization({\n\tImmune\t\t\t= \"瑪蘭黛 - %s免疫15秒\"\n})\n\nL:SetOptionLocalization({\n\tImmune\t\t\t= \"當瑪蘭黛法術或物理免疫時顯示警告\",\n})\n\nL:SetMiscLocalization({\n\tGathios\t\t\t= \"粉碎者高希歐\",\n\tMalande\t\t\t= \"瑪蘭黛女士\",\n\tZerevor\t\t\t= \"高等虛空術師札瑞佛\",\n\tVeras\t\t\t= \"維拉斯·深影\",\n\tMelee\t\t\t= \"物理\",\n\tSpell\t\t\t= \"法術\",\n})\n\n-------------------------\n--  Illidan Stormrage --\n-------------------------\nL = DBM:GetModLocalization(\"Illidan\")\n\nL:SetGeneralLocalization({\n\tname = \"伊利丹·怒風\"\n})\n\nL:SetWarningLocalization({\n\tWarnHuman\t\t= \"人形階段即將到來\",\n\tWarnDemon\t\t= \"惡魔階段\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextHuman\t\t= \"人形階段\",\n\tTimerNextDemon\t\t= \"惡魔階段\"\n})\n\nL:SetOptionLocalization({\n\tWarnHuman\t\t= \"為人形階段顯示警告\",\n\tWarnDemon\t\t= \"為惡魔階段顯示計時器\",\n\tTimerNextHuman\t= \"為下一次人形階段顯示計時器\",\n\tTimerNextDemon\t= \"為下一次惡魔階段顯示計時器\",\n\tRangeFrame\t\t= \"為第3和第4階段顯示距離框架(10碼)\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"阿卡瑪。你的謊言真是老套。我很久前就應該殺了你和你那些畸形的同胞。\",\n\tEyebeam\t\t\t= \"直視背叛者的雙眼吧!\",\n\tDemon\t\t\t= \"感受我體內的惡魔之力吧!\",\n\tPhase4\t\t\t= \"你們就這點本事嗎?這就是你們全部的能耐?\",\n\tS1YouAreNotPrepared\t= \"階段一：你們還沒準備好\",\n\tS2FlamesOfAzzinoth\t= \"階段二：埃辛諾斯火焰\",\n\tS3TheDemonWithin\t= \"階段三：體內的惡魔\",\n\tS4TheLongHunt\t\t= \"階段四：長久的狩獵\"\n})\n"
  },
  {
    "path": "DBM-ChamberOfAspects/DBM-ChamberOfAspects.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Chamber of Aspects|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Kammer der Aspekte|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Палата Аспектов|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0守護巨龍之間|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0龙神之厅|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0흑요석 성소|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Chambre des Aspects|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Cámara de los Aspectos|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMChamberOfAspects_AllSavedVars\n## SavedVariablesPerCharacter: DBMChamberOfAspects_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: WOTLK\n## X-DBM-StatTypes: normal,normal25,heroic,heroic25\n## X-DBM-Mod-SubCategories: The Obsidian Sanctum, The Ruby Sanctum\n## X-DBM-Mod-SubCategories-deDE: Das Obsidiansanktum, Das Rubinsanktum\n## X-DBM-Mod-SubCategories-ruRU: Обсидиановое святилище, Рубиновое святилище\n## X-DBM-Mod-SubCategories-zhTW: 黑曜聖所, 晶紅聖所\n## X-DBM-Mod-SubCategories-zhCN: 黑曜石圣殿, 红玉圣殿\n## X-DBM-Mod-SubCategories-koKR: 흑요석 성소, 루비 성소\n## X-DBM-Mod-SubCategories-frFR: Le sanctum Obsidien,Le sanctum Rubis\n## X-DBM-Mod-SubCategories-esES: El Sagrario Obsidiana, El Sagrario Rubí\n## X-DBM-Mod-SubCategories-esMX: El Sagrario Obsidiana, El Sagrario Rubí\n## X-DBM-Mod-Name: Chamber of Aspects\n## X-DBM-Mod-Name-deDE: Kammer der Aspekte\n## X-DBM-Mod-Name-ruRU: Палата Аспектов\n## X-DBM-Mod-Name-zhTW: 守護巨龍之間\n## X-DBM-Mod-Name-zhCN: 龙神之厅\n## X-DBM-Mod-Name-koKR: 고룡쉼터 사원\n## X-DBM-Mod-Name-frFR : Chambre des aspects\n## X-DBM-Mod-Name-esES: Cámara de los Aspectos\n## X-DBM-Mod-Name-esMX: Cámara de los Aspectos\n## X-DBM-Mod-Sort: 1\n## X-DBM-Mod-MapID: 532,610\n## X-DBM-Mod-LoadZone: The Obsidian Sanctum,The Ruby Sanctum\n## X-DBM-Mod-LoadZone-deDE: Das Obsidiansanktum,Das Rubinsanktum\n## X-DBM-Mod-LoadZone-ruRU: Обсидиановое святилище,Рубиновое святилище\n## X-DBM-Mod-LoadZone-zhTW: 黑曜聖所, 晶紅聖所\n## X-DBM-Mod-LoadZone-zhCN: 黑曜石圣殿, 红玉圣殿\n## X-DBM-Mod-LoadZone-koKR: 흑요석 성소,루비 성소\n## X-DBM-Mod-LoadZone-frFR: Le sanctum Obsidien,Le sanctum Rubis\n## X-DBM-Mod-LoadZone-esES: El Sagrario Obsidiana,El Sagrario Rubí\n## X-DBM-Mod-LoadZone-esMX: El Sagrario Obsidiana,El Sagrario Rubí\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.ru.lua\nlocalization.tw.lua\nlocalization.kr.lua\nlocalization.fr.lua\nlocalization.es.lua\nlocalization.cn.lua\n\nObsidian\\Shadron.lua\nObsidian\\Tenebron.lua\nObsidian\\Vesperon.lua\nObsidian\\Sartharion.lua\n\nRuby\\Baltharus.lua\nRuby\\Saviana.lua\nRuby\\Zarithrian.lua\nRuby\\Halion.lua\n"
  },
  {
    "path": "DBM-ChamberOfAspects/Obsidian/Sartharion.lua",
    "content": "local mod\t= DBM:NewMod(\"Sartharion\", \"DBM-ChamberOfAspects\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,normal25\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(28860)\nmod:SetEncounterID(742)\n\n--mod:RegisterCombat(\"combat\") -- Don't use IEEU, because on Warmane 3 Drakes, Sartharion NOT is engaged first, but Tenebron > Shadron > Vesperon > Sartharion (Sartharion will end up on boss1).\n-- \"<15.29 22:46:09> [CHAT_MSG_MONSTER_YELL] It is my charge to watch over these eggs. I will see you burn before any harm comes to them!:Sartharion:::::0:0::0:6450::0:\", -- [120]\n-- \"<15.30 22:46:09> [CLEU] SPELL_CAST_SUCCESS:0xF1300076F4000109:Tenebron:0x0000000000000000:nil:61248:Power of Tenebron:nil:nil:\", -- [121]\n-- \"<15.30 22:46:09> [DBM_Debug] INSTANCE_ENCOUNTER_ENGAGE_UNIT event fired for zoneId532:3:\", -- [122]\n-- \"<15.30 22:46:09> [DBM_Debug] StartCombat called by : IEEU for mod : Tenebron. LastInstanceMapID is 532:nil:\", -- [123]\n-- \"<15.30 22:46:09> [DBM_Pull] Tenebron:0:nil:100:\", -- [124]\n-- \"<15.30 22:46:09> [DBM_Debug] DBMv4-Pull 0 Tenebron 20220806121300 100 20221004114721 20220805000000 IEEU:3:\", -- [125]\n-- \"<15.30 22:46:09> [INSTANCE_ENCOUNTER_ENGAGE_UNIT] Fake Args::boss1:1:1:1:Tenebron:30452:0xF1300076F4000109:worldboss:1337325:boss2:nil:nil:nil:??:1:nil:normal:0:boss3:nil:nil:nil:??:1:nil:normal:0:boss4:nil:nil:nil:??:1:nil:normal:0:boss5:nil:nil:nil:??:1:nil:normal:0:Real Args::\", -- [126]\n-- \"<15.30 22:46:09> [CLEU] SPELL_CAST_SUCCESS:0xF1300076F300010A:Shadron:0x0000000000000000:nil:58105:Power of Shadron:nil:nil:\", -- [127]\n-- \"<15.30 22:46:09> [DBM_Debug] INSTANCE_ENCOUNTER_ENGAGE_UNIT event fired for zoneId532:3:\", -- [128]\n-- \"<15.30 22:46:09> [INSTANCE_ENCOUNTER_ENGAGE_UNIT] Fake Args::boss1:1:1:1:Tenebron:30452:0xF1300076F4000109:worldboss:1337325:boss2:1:1:1:Shadron:30451:0xF1300076F300010A:worldboss:1337325:boss3:nil:nil:nil:??:1:nil:normal:0:boss4:nil:nil:nil:??:1:nil:normal:0:boss5:nil:nil:nil:??:1:nil:normal:0:Real Args::\", -- [129]\n-- \"<15.30 22:46:09> [DBM_Debug] INSTANCE_ENCOUNTER_ENGAGE_UNIT event fired for zoneId532:3:\", -- [130]\n-- \"<15.30 22:46:09> [INSTANCE_ENCOUNTER_ENGAGE_UNIT] Fake Args::boss1:1:1:1:Tenebron:30452:0xF1300076F4000109:worldboss:1337325:boss2:1:1:1:Shadron:30451:0xF1300076F300010A:worldboss:1337325:boss3:1:1:1:Vesperon:30449:0xF1300076F100010B:worldboss:1337325:boss4:nil:nil:nil:??:1:nil:normal:0:boss5:nil:nil:nil:??:1:nil:normal:0:Real Args::\", -- [131]\n-- \"<15.30 22:46:09> [UNIT_SPELLCAST_SUCCEEDED] Vesperon(??) -Power of Vesperon- [[boss3:Power of Vesperon::0:]]\", -- [132]\n-- \"<15.30 22:46:09> [CLEU] SPELL_CAST_SUCCESS:0xF1300076F100010B:Vesperon:0x0000000000000000:nil:61251:Power of Vesperon:nil:nil:\", -- [133]\n-- \"<15.30 22:46:09> [UNIT_SPELLCAST_SUCCEEDED] Sartharion(Sanarticon) -Will of Sartharion- [[target:Will of Sartharion::0:]]\", -- [134]\n-- \"<15.30 22:46:09> [CLEU] SPELL_CAST_SUCCESS:0xF1300070BC000062:Sartharion:0x0000000000000000:nil:61254:Will of Sartharion:nil:nil:\", -- [135]\n-- \"<15.30 22:46:09> [DBM_Debug] INSTANCE_ENCOUNTER_ENGAGE_UNIT event fired for zoneId532:3:\", -- [136]\n-- \"<15.30 22:46:09> [DBM_Debug] StartCombat called by : IEEU for mod : Sartharion. LastInstanceMapID is 532:nil:\", -- [137]\n-- \"<15.30 22:46:09> [DBM_Pull] Sartharion:0:nil:100:\", -- [138]\n-- \"<15.30 22:46:09> [DBM_TimerStart] Timer43113next:Next Fire Wall:30:Interface\\\\Icons\\\\Spell_Fire_MoltenBlood:next:43113:2:Sartharion:nil:nil:Fire Wall:nil:\", -- [139]\n-- \"<15.30 22:46:09> [DBM_TimerStart] Timer58956cd:Flame Breath CD:10:Interface\\\\Icons\\\\Spell_Fire_Fire:cd:58956:5:Sartharion:nil:nil:Flame Breath:nil:\", -- [140]\n-- \"<15.30 22:46:09> [DBM_Debug] DBMv4-Pull 0 Sartharion 20220925145940 100 20221004114721 0 IEEU:3:\", -- [141]\n-- \"<15.30 22:46:09> [INSTANCE_ENCOUNTER_ENGAGE_UNIT] Fake Args::boss1:1:1:1:Sartharion:28860:0xF1300070BC000062:worldboss:4392675:boss2:1:1:1:Tenebron:30452:0xF1300076F4000109:worldboss:1337325:boss3:1:1:1:Shadron:30451:0xF1300076F300010A:worldboss:1337325:boss4:1:1:1:Vesperon:30449:0xF1300076F100010B:worldboss:1337325:boss5:nil:nil:nil:??:1:nil:normal:0:Real Args::\", -- [142]\nmod:RegisterCombat(\"yell\", L.YellSarthPull)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 56908 58956\",\n\t\"SPELL_CAST_SUCCESS 57579 59127\",\n\t\"SPELL_AURA_APPLIED 57491\",\n\t\"SPELL_DAMAGE 59128\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\"CHAT_MSG_MONSTER_EMOTE\"\n)\n\nlocal warnShadowFissure\t\t\t= mod:NewSpellAnnounce(59127, 4, nil, nil, nil, nil, nil, 2)\nlocal warnBreathSoon\t\t\t= mod:NewSoonAnnounce(58956, 2, nil, \"Tank|Healer\")\nlocal warnTenebron\t\t\t\t= mod:NewAnnounce(\"WarningTenebron\", 2, 61248)\nlocal warnShadron\t\t\t\t= mod:NewAnnounce(\"WarningShadron\", 2, 58105)\nlocal warnVesperon\t\t\t\t= mod:NewAnnounce(\"WarningVesperon\", 2, 61251)\nlocal warnTenebronWhelpsSoon\t= mod:NewAnnounce(\"WarningWhelpsSoon\", 1, 1022, false)\nlocal warnShadronPortalSoon\t\t= mod:NewAnnounce(\"WarningPortalSoon\", 1, 11420, false)\nlocal warnVesperonPortalSoon\t= mod:NewAnnounce(\"WarningReflectSoon\", 1, 57988, false)\n\nlocal specWarnFireWall\t\t\t= mod:NewSpecialWarning(\"WarningFireWall\", nil, nil, nil, 2, 2)\nlocal specWarnVesperonPortal\t= mod:NewSpecialWarning(\"WarningVesperonPortal\", false, nil, nil, 1, 7)\nlocal specWarnTenebronPortal\t= mod:NewSpecialWarning(\"WarningTenebronPortal\", false, nil, nil, 1, 7)\nlocal specWarnShadronPortal\t\t= mod:NewSpecialWarning(\"WarningShadronPortal\", false, nil, nil, 1, 7)\n\nlocal timerShadowFissure\t\t= mod:NewCastTimer(5, 59128, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON) --Cast timer until Void Blast. it's what happens when shadow fissure explodes.\nlocal timerBreath\t\t\t\t= mod:NewCDTimer(10, 58956, nil, \"Tank|Healer\", nil, 5) -- REVIEW! ~1s variance? (25N Lordaeron 2022/09/23) - 10.4, 11.4, 10.4, 10.1\nlocal timerWall\t\t\t\t\t= mod:NewNextTimer(30, 43113, nil, nil, nil, 2) -- (25N Lordaeron 2022/09/23) - pull:30.0, 30.0\nlocal timerTenebron\t\t\t\t= mod:NewTimer(30, \"TimerTenebron\", 61248, nil, nil, 1)\nlocal timerShadron\t\t\t\t= mod:NewTimer(80, \"TimerShadron\", 58105, nil, nil, 1)\nlocal timerVesperon\t\t\t\t= mod:NewTimer(120, \"TimerVesperon\", 61251, nil, nil, 1)\nlocal timerTenebronWhelps\t\t= mod:NewTimer(60, \"TimerTenebronWhelps\", 1022)\nlocal timerShadronPortal\t\t= mod:NewTimer(94, \"TimerShadronPortal\", 11420)\nlocal timerVesperonPortal\t\t= mod:NewTimer(139, \"TimerVesperonPortal\", 57988)\nlocal timerVesperonPortal2\t\t= mod:NewTimer(199, \"TimerVesperonPortal2\", 57988) -- what's the purpose of this?\n\nmod:AddBoolOption(\"AnnounceFails\", true, \"announce\")\n\nmod:GroupSpells(59127, 59128)--Shadow fissure with void blast\n\nlocal lastvoids = {}\nlocal lastfire = {}\nlocal tsort, tinsert, twipe = table.sort, table.insert, table.wipe\n\nlocal function isunitdebuffed(spellName)\n\tfor uId in DBM:GetGroupMembers() do\n\t\tlocal debuff = DBM:UnitDebuff(uId, spellName)\n\t\tif debuff then\n\t\t\treturn true\n\t\tend\n\tend\n\treturn false\nend\n\nlocal function CheckDrakes(self, delay)\n\tif self.Options.HealthFrame then\n\t\tDBM.BossHealth:Show(L.name)\n\t\tDBM.BossHealth:AddBoss(28860, \"Sartharion\")\n\tend\n\tif isunitdebuffed(DBM:GetSpellInfo(61248)) then\t-- Power of Tenebron\n\t\ttimerTenebron:Start(26 - delay) -- 30\n\t\twarnTenebron:Schedule(21 - delay) -- 25\n\t\ttimerTenebronWhelps:Start(- delay)\n\t\twarnTenebronWhelpsSoon:Schedule(55 - delay)\n\t\tif self.Options.HealthFrame then\n\t\t\tDBM.BossHealth:AddBoss(30452, \"Tenebron\")\n\t\tend\n\tend\n\tif isunitdebuffed(DBM:GetSpellInfo(58105)) then\t-- Power of Shadron\n\t\ttimerShadron:Start(74 - delay) -- 75\n\t\twarnShadron:Schedule(69 - delay) -- 70\n\t\ttimerShadronPortal:Start(- delay)\n\t\twarnShadronPortalSoon:Schedule(89 - delay)\n\t\tif self.Options.HealthFrame then\n\t\t\tDBM.BossHealth:AddBoss(30451, \"Shadron\")\n\t\tend\n\tend\n\tif isunitdebuffed(DBM:GetSpellInfo(61251)) then\t-- Power of Vesperon\n\t\ttimerVesperon:Start(119 - delay) -- 120\n\t\twarnVesperon:Schedule(114 - delay) -- 115\n\t\ttimerVesperonPortal:Start(- delay)\n\t\ttimerVesperonPortal2:Start(- delay)\n\t\twarnVesperonPortalSoon:Schedule(134 - delay)\n\t\twarnVesperonPortalSoon:Schedule(194 - delay)\n\t\tif self.Options.HealthFrame then\n\t\t\tDBM.BossHealth:AddBoss(30449, \"Vesperon\")\n\t\tend\n\tend\nend\n\nlocal sortedFails = {}\nlocal function sortFails1(e1, e2)\n\treturn (lastvoids[e1] or 0) > (lastvoids[e2] or 0)\nend\nlocal function sortFails2(e1, e2)\n\treturn (lastfire[e1] or 0) > (lastfire[e2] or 0)\nend\n\nfunction mod:OnCombatStart(delay)\n\t--Cache spellnames so a solo player check doesn't fail in CheckDrakes in 8.0+\n\tself:Schedule(5, CheckDrakes, self, delay)\n\ttimerWall:Start(-delay)\n\twarnBreathSoon:Schedule(5-delay)\n\ttimerBreath:Start(-delay) -- REVIEW! variance? (25N Lordaeron 2022/09/23) - pull:11.0\n\n\ttwipe(lastvoids)\n\ttwipe(lastfire)\nend\n\nfunction mod:OnCombatEnd()\n\tif not self.Options.AnnounceFails then return end\n\tif DBM:GetRaidRank() < 1 or not self.Options.Announce then return end\n\n\tlocal voids = \"\"\n\tfor k, _ in pairs(lastvoids) do\n\t\ttinsert(sortedFails, k)\n\tend\n\ttsort(sortedFails, sortFails1)\n\tfor _, v in ipairs(sortedFails) do\n\t\tvoids = voids..\" \"..v..\"(\"..(lastvoids[v] or \"\")..\")\"\n\tend\n\tSendChatMessage(L.VoidZones:format(voids), \"RAID\")\n\ttwipe(sortedFails)\n\tlocal fire = \"\"\n\tfor k, _ in pairs(lastfire) do\n\t\ttinsert(sortedFails, k)\n\tend\n\ttsort(sortedFails, sortFails2)\n\tfor _, v in ipairs(sortedFails) do\n\t\tfire = fire..\" \"..v..\"(\"..(lastfire[v] or \"\")..\")\"\n\tend\n\tSendChatMessage(L.FireWalls:format(fire), \"RAID\")\n\ttwipe(sortedFails)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(56908, 58956) then -- Flame breath\n\t\twarnBreathSoon:Schedule(5)\n\t\ttimerBreath:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(57579, 59127) then\n\t\twarnShadowFissure:Show()\n\t\twarnShadowFissure:Play(\"watchstep\")\n\t\ttimerShadowFissure:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif self.Options.AnnounceFails and self.Options.Announce and args.spellId == 57491 and DBM:GetRaidRank() >= 1 and DBM:GetRaidUnitId(args.destName) ~= \"none\" and args.destName then\n\t\tlastfire[args.destName] = (lastfire[args.destName] or 0) + 1\n\t\tSendChatMessage(L.FireWallOn:format(args.destName), \"RAID\")\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, _, destName, _, spellId)\n\tif self.Options.AnnounceFails and self.Options.Announce and spellId == 59128 and DBM:GetRaidRank() >= 1 and DBM:GetRaidUnitId(destName) ~= \"none\" and destName then\n\t\tlastvoids[destName] = (lastvoids[destName] or 0) + 1\n\t\tSendChatMessage(L.VoidZoneOn:format(destName), \"RAID\")\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg, mob)\n\tif msg == L.Wall or msg:find(L.Wall) then\n\t\tself:SendSync(\"FireWall\")\n\telseif msg == L.Portal or msg:find(L.Portal) then\n\t\tif mob == L.NameVesperon then\n\t\t\tself:SendSync(\"VesperonPortal\")\n\t\telseif mob == L.NameTenebron then\n\t\t\tself:SendSync(\"TenebronPortal\")\n\t\telseif mob == L.NameShadron then\n\t\t\tself:SendSync(\"ShadronPortal\")\n\t\tend\n\tend\nend\nmod.CHAT_MSG_MONSTER_EMOTE = mod.CHAT_MSG_RAID_BOSS_EMOTE\n\nfunction mod:OnSync(event)\n\tif event == \"FireWall\" then\n\t\ttimerWall:Start()\n\t\tspecWarnFireWall:Show()\n\t\tspecWarnFireWall:Play(\"watchwave\")\n\telseif event == \"VesperonPortal\" then\n\t\tspecWarnVesperonPortal:Show()\n\t\tspecWarnVesperonPortal:Play(\"newportal\")\n\telseif event == \"TenebronPortal\" then\n\t\tspecWarnTenebronPortal:Show()\n\t\tspecWarnTenebronPortal:Play(\"newportal\")\n\telseif event == \"ShadronPortal\" then\n\t\tspecWarnShadronPortal:Show()\n\t\tspecWarnShadronPortal:Play(\"newportal\")\n\tend\nend\n"
  },
  {
    "path": "DBM-ChamberOfAspects/Obsidian/Shadron.lua",
    "content": "local mod\t= DBM:NewMod(\"Shadron\", \"DBM-ChamberOfAspects\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,normal25\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(30451)\nmod:SetEncounterID(738)\nmod:SetHotfixNoticeRev(20221012000000)\nmod:SetMinSyncRevision(20221012000000)\nmod:DisableMultiBossPulls()\n\n--mod:RegisterCombat(\"combat\") -- Don't use IEEU, because on Warmane 3 Drakes, Sartharion NOT is engaged first, but Tenebron > Shadron > Vesperon > Sartharion (Sartharion will end up on boss1).\nmod:RegisterCombat(\"yell\", L.YellShadronPull)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 57579 59127\"\n)\n\nlocal warnShadowFissure\t\t= mod:NewSpellAnnounce(59127, 4, nil, nil, nil, nil, 2)\nlocal timerShadowFissure\t= mod:NewCastTimer(5, 59128, nil, nil, nil, 3)--Cast timer until Void Blast. it's what happens when shadow fissure explodes.\n\nmod:GroupSpells(59127, 59128)--Shadow fissure with void blast\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(57579, 59127) then\n\t\twarnShadowFissure:Show()\n\t\twarnShadowFissure:Play(\"watchstep\")\n\t\ttimerShadowFissure:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-ChamberOfAspects/Obsidian/Tenebron.lua",
    "content": "local mod\t= DBM:NewMod(\"Tenebron\", \"DBM-ChamberOfAspects\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,normal25\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(30452)\nmod:SetEncounterID(736)\nmod:SetHotfixNoticeRev(20221012000000)\nmod:SetMinSyncRevision(20221012000000)\nmod:DisableMultiBossPulls()\n\n--mod:RegisterCombat(\"combat\") -- Don't use IEEU, because on Warmane 3 Drakes, Sartharion NOT is engaged first, but Tenebron > Shadron > Vesperon > Sartharion (Sartharion will end up on boss1).\nmod:RegisterCombat(\"yell\", L.YellTenebronPull)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 57579 59127\"\n)\n\nlocal warnShadowFissure\t\t= mod:NewSpellAnnounce(59127, 4, nil, nil, nil, nil, 2)\nlocal timerShadowFissure\t= mod:NewCastTimer(5, 59128, nil, nil, nil, 3)--Cast timer until Void Blast. it's what happens when shadow fissure explodes.\n\nmod:GroupSpells(59127, 59128)--Shadow fissure with void blast\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(57579, 59127) then\n\t\twarnShadowFissure:Show()\n\t\twarnShadowFissure:Play(\"watchstep\")\n\t\ttimerShadowFissure:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-ChamberOfAspects/Obsidian/Vesperon.lua",
    "content": "local mod\t= DBM:NewMod(\"Vesperon\", \"DBM-ChamberOfAspects\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,normal25\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(30449)\nmod:SetEncounterID(740)\nmod:SetHotfixNoticeRev(20221012000000)\nmod:SetMinSyncRevision(20221012000000)\nmod:DisableMultiBossPulls()\n\n--mod:RegisterCombat(\"combat\") -- Don't use IEEU, because on Warmane 3 Drakes, Sartharion NOT is engaged first, but Tenebron > Shadron > Vesperon > Sartharion (Sartharion will end up on boss1).\nmod:RegisterCombat(\"yell\", L.YellVesperonPull)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 57579 59127\"\n)\n\nlocal warnShadowFissure\t\t= mod:NewSpellAnnounce(59127, 4, nil, nil, nil, nil, 2)\nlocal timerShadowFissure\t= mod:NewCastTimer(5, 59128, nil, nil, nil, 3)--Cast timer until Void Blast. it's what happens when shadow fissure explodes.\n\nmod:GroupSpells(59127, 59128)--Shadow fissure with void blast\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(57579, 59127) then\n\t\twarnShadowFissure:Show()\n\t\twarnShadowFissure:Play(\"watchstep\")\n\t\ttimerShadowFissure:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-ChamberOfAspects/Ruby/Baltharus.lua",
    "content": "local mod\t= DBM:NewMod(\"Baltharus\", \"DBM-ChamberOfAspects\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(39751)\nmod:SetEncounterID(890)\nmod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7, 8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 74509\",\n\t\"SPELL_AURA_APPLIED 75125 74505\",\n\t\"INSTANCE_ENCOUNTER_ENGAGE_UNIT\",\n\t\"UNIT_HEALTH boss1\"\n)\n\nlocal warningSplitSoon\t\t= mod:NewAnnounce(\"WarningSplitSoon\", 2)\nlocal warnWhirlwind\t\t\t= mod:NewSpellAnnounce(75125, 3, nil, \"Tank|Healer\")\nlocal warningWarnBrand\t\t= mod:NewTargetAnnounce(74505, 4)\n\nlocal specWarnBrand\t\t\t= mod:NewSpecialWarningYou(74505, nil, nil, nil, 3, 2)\nlocal specWarnRepellingWave\t= mod:NewSpecialWarningSpell(74509, nil, nil, nil, 2, 2)\n\nlocal timerWhirlwind\t\t= mod:NewBuffActiveTimer(4, 75125, nil, \"Tank|Healer\", nil, 3)\nlocal timerRepellingWave\t= mod:NewCastTimer(4, 74509, nil, nil, nil, 2)--1 second cast + 3 second stun\nlocal timerBrand\t\t\t= mod:NewBuffActiveTimer(10, 74505, nil, nil, nil, 5)\nlocal timerBladeTempest\t\t= mod:NewCDCountTimer(\"d24\", 75125, nil, nil, 5) -- String timer starting with \"d\" means \"allowDouble\". REVIEW! ~1s variance? (boss1 timers: 25N Lordaeron 2022-09-19 || 25H Lordaeron 2022-09-23) - \"Blade Tempest-75125-npc:39751-2 = pull:15.0, 25.2, 24.0, 25.2\" || \"Blade Tempest-75125-npc:39751-2 = pull:15.0, 25.2, 25.2\"\n\nmod:AddRangeFrameOption(12, 74505)\nmod:AddSetIconOption(\"SetIconOnBrand\", 74505, false, false, {1, 2, 3, 4, 5, 6, 7, 8})\n\nmod.vb.warnedSplit1\t= false\nmod.vb.warnedSplit2\t= false\nmod.vb.warnedSplit3\t= false\nlocal brandTargets = {}\nmod.vb.brandIcon\t= 8\nmod.vb.allClonesSpawned = false\nlocal bossGUIDs = {}\n\nlocal function showBrandWarning(self)\n\twarningWarnBrand:Show(table.concat(brandTargets, \"<, >\"))\n\ttable.wipe(brandTargets)\n\tself.vb.brandIcon = 8\nend\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.warnedSplit1 = false\n\tself.vb.warnedSplit2 = false\n\tself.vb.warnedSplit3 = false\n\ttable.wipe(brandTargets)\n\ttable.wipe(bossGUIDs)\n\tself.vb.brandIcon = 8\n\tself.vb.allClonesSpawned = false\n\ttimerBladeTempest:Start(15-delay, 1, UnitGUID(\"boss1\")) -- REVIEW! (25N Lordaeron 2022-09-19 || 25H Lordaeron 2022-09-23) - 15.0 || 15.0\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(12)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 74509 then\n\t\tspecWarnRepellingWave:Show()\n\t\tspecWarnRepellingWave:Play(\"carefly\")\n\t\ttimerRepellingWave:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 75125 then\n\t\tif not tContains(bossGUIDs, args.destGUID) then tinsert(bossGUIDs, args.destGUID) end -- add boss to table by its first cast, checking for duplicates and preserving index to match bossN\n\t\tlocal bossN = DBM:tIndexOf(bossGUIDs, args.destGUID)\n\t\twarnWhirlwind:Show()\n\t\ttimerWhirlwind:Show()\n\t\ttimerBladeTempest:Start(nil, bossN, args.destGUID)\n\telseif spellId == 74505 and self:IsInCombat() then--Only do this when boss is actually engaged, otherwise it doesn't really matter and just spams.\n\t\tbrandTargets[#brandTargets + 1] = args.destName\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnBrand:Show()\n\t\t\tspecWarnBrand:Play(\"targetyou\")\n\t\t\ttimerBrand:Show()\n\t\tend\n\t\tif self.vb.brandIcon > 0 then\n\t\t\tif self.Options.SetIconOnBrand then\n\t\t\t\tself:SetIcon(args.destName, self.vb.brandIcon, 10)\n\t\t\tend\n\t\t\tself.vb.brandIcon = self.vb.brandIcon - 1\n\t\tend\n\t\tself:Unschedule(showBrandWarning)\n\t\tself:Schedule(0.5, showBrandWarning, self)\n\tend\nend\n\nfunction mod:INSTANCE_ENCOUNTER_ENGAGE_UNIT()\n\tif self.vb.allClonesSpawned then return end\n\tif UnitExists(\"boss3\") then\n\t\tself.vb.allClonesSpawned = true\n\t\ttimerBladeTempest:Start(20, 3, UnitGUID(\"boss3\")) -- REVIEW! 5s variance? Based on clone spawn? (25N Lordaeron 2022-09-19 || 25H Lordaeron 2022-09-23) - 20.7 || 20.2\n\telseif UnitExists(\"boss2\") then\n\t\ttimerBladeTempest:Start(20, 2, UnitGUID(\"boss2\")) -- REVIEW! 5s variance? Based on clone spawn? (25N Lordaeron 2022-09-19 || 25H Lordaeron 2022-09-23) - 24.3 || 19.9\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif self:IsDifficulty(\"normal25\", \"heroic25\") then\n\t\tif not self.vb.warnedSplit1 and self:GetUnitCreatureId(uId) == 39751 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.70 then\n\t\t\tself.vb.warnedSplit1 = true\n\t\t\twarningSplitSoon:Show()\n\t\telseif not self.vb.warnedSplit3 and self:GetUnitCreatureId(uId) == 39751 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.37 then\n\t\t\tself.vb.warnedSplit3 = true\n\t\t\twarningSplitSoon:Show()\n\t\tend\n\telse\n\t\tif not self.vb.warnedSplit2 and self:GetUnitCreatureId(uId) == 39751 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.54 then\n\t\t\tself.vb.warnedSplit2 = true\n\t\t\twarningSplitSoon:Show()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-ChamberOfAspects/Ruby/Halion.lua",
    "content": "local mod\t= DBM:NewMod(\"Halion\", \"DBM-ChamberOfAspects\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(39863)--40142 (twilight form)\nmod:SetEncounterID(887)\nmod:SetUsedIcons(7, 3)\nmod:SetMinSyncRevision(4358) -- try to preserve this as much as possible to receive old DBM comms\n\nmod:RegisterCombat(\"combat\")\n--mod:RegisterKill(\"yell\", L.Kill)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 74806 75954 75955 75956 74525 74526 74527 74528\",\n\t\"SPELL_CAST_SUCCESS 74792 74562\",\n\t\"SPELL_AURA_APPLIED 74792 74562\",\n\t\"SPELL_AURA_REMOVED 74792 74562\",\n\t\"SPELL_DAMAGE\",\n\t\"SPELL_MISSED\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\"UPDATE_WORLD_STATES\",\n\t\"UNIT_HEALTH boss1\"\n)\n\n-- General\nlocal berserkTimer\t\t\t\t\t= mod:NewBerserkTimer(480)\n\nmod:AddBoolOption(\"AnnounceAlternatePhase\", true, \"announce\")\n\n-- Stage One - Physical Realm (100%)\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1)..\": \"..L.PhysicalRealm)\nlocal warnPhase2Soon\t\t\t\t= mod:NewPrePhaseAnnounce(2)\nlocal warningFieryCombustion\t\t= mod:NewTargetNoFilterAnnounce(74562, 4)\nlocal warningMeteor\t\t\t\t\t= mod:NewSpellAnnounce(74648, 3)\nlocal warningFieryBreath\t\t\t= mod:NewSpellAnnounce(74525, 2, nil, \"Tank|Healer\")\n\nlocal specWarnFieryCombustion\t\t= mod:NewSpecialWarningRun(74562, nil, nil, nil, 4, 2)\nlocal yellFieryCombustion\t\t\t= mod:NewYellMe(74562)\nlocal specWarnMeteorStrike\t\t\t= mod:NewSpecialWarningMove(74648, nil, nil, nil, 1, 2)\n\nlocal timerFieryCombustionCD\t\t= mod:NewNextTimer(25, 74562, nil, nil, nil, 3) -- (25H Lordaeron 2022/10/09) - Stage 1/16.4, 25.6, 25.1, 25.1, Stage 2/0.2, Stage 3/104.2, 18.5/122.7/122.9, 25.1, 25.0, 26.0, 25.0, 25.0, 25.1, 25.0, 25.0\", -- [2]\nlocal timerMeteorCD\t\t\t\t\t= mod:NewNextTimer(40, 74648, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)--Target or aoe? tough call. It's a targeted aoe! Even though on pull has variance, can't implement \"keep\" due to OnSync phasing, unless I sync schedule and end timer flag but that's a bit overkill\nlocal timerMeteorCast\t\t\t\t= mod:NewCastTimer(7, 74648)--7-8 seconds from boss yell the meteor impacts.\nlocal timerFieryBreathCD\t\t\t= mod:NewCDTimer(13, 74525, nil, \"Tank|Healer\", nil, 5, nil, DBM_COMMON_L.TANK_ICON, true) -- REVIEW! ~4s variance [13.1-16.9]. Added \"keep\" arg (25H Lordaeron 2022/09/21 wipe2 || 25H Lordaeron 2022/09/23) - 16.1, 13.1, 13.8, 14.9, 14.6, 16.3, Stage 2/2.0, Stage 3/109.9, 17.4/127.3/129.3, 16.4 || 15.7, 15.7, 16.9, 16.7, 15.1, Stage 2/9.3, Stage 3/93.0, 13.0/106.0/115.4, 14.2, 14.5, 13.5, 13.8, 15.7, 15.0, 15.9, 16.0, 13.4, 15.0, 16.2, 16.8, 16.2\nlocal timerTailLashCD\t\t\t\t= mod:NewCDTimer(10, 74531, nil, nil, nil, 2) -- Almost a fixed timer, with very occasional delay, on both Physical and Shadow realms. (25H Lordaeron 2022/09/23) - pull:10.1/Stage 1/10.1, 10.0, 10.0, 10.0, 10.1, 10.5, 10.0, 10.1, 11.7, Stage 2/13.5, 10.1, 10.0, 10.0, 10.1, 10.0, 10.0, 10.0, Stage 3/10.0, 10.0, 11.2, 10.0, 10.0, 10.0, 10.1, 10.1, 10.0, 10.0, 10.0, 10.0, 10.0, 10.1, 10.0, 10.0, 10.0, 11.0, 10.0\n\nmod:AddSetIconOption(\"SetIconOnFireConsumption\", 74562, true, false, {7})--Red x for Fire\n\n-- Stage Two - Twilight Realm (75%)\nlocal twilightRealmName = DBM:GetSpellInfo(74807)\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2)..\": \"..twilightRealmName)\nlocal warnPhase3Soon\t\t\t\t= mod:NewPrePhaseAnnounce(3)\nlocal warnPhase2\t\t\t\t\t= mod:NewPhaseAnnounce(2, 2, nil, nil, nil, nil, nil, 2)\nlocal warningSoulConsumption\t\t= mod:NewTargetNoFilterAnnounce(74792, 4)\nlocal warningShadowBreath\t\t\t= mod:NewSpellAnnounce(74806, 2, nil, \"Tank|Healer\")\nlocal warningTwilightCutter\t\t\t= mod:NewAnnounce(\"TwilightCutterCast\", 4, 74769, nil, nil, nil, 74769)\n\nlocal specWarnSoulConsumption\t\t= mod:NewSpecialWarningRun(74792, nil, nil, nil, 4, 2)\nlocal yellSoulConsumption\t\t\t= mod:NewYellMe(74792)\nlocal specWarnTwilightCutter\t\t= mod:NewSpecialWarningSpell(74769, nil, nil, nil, 3, 2)\n\nlocal timerSoulConsumptionCD\t\t= mod:NewNextTimer(20, 74792, nil, nil, nil, 3) -- (25N Lordaeron 2022/09/20) - Stage 2/22.9, 20.0, 20.0, Stage 3/10.4, 9.6/20.0, 20.0, 60.0, 20.0\nlocal timerTwilightCutterCast\t\t= mod:NewCastTimer(5, 74769, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerTwilightCutter\t\t\t= mod:NewBuffActiveTimer(10, 74769, nil, nil, nil, 6)\nlocal timerTwilightCutterCD\t\t\t= mod:NewNextTimer(15, 74769, nil, nil, nil, 6)\nlocal timerTwilightCutterSpawn\t\t= mod:NewTimer(20, \"TimerCutterSpawn\", 74769, false, nil, 6, nil, nil, nil, nil, nil, nil, nil, 74769) -- Combines CD + Cast, and disables them too\nlocal timerShadowBreathCD\t\t\t= mod:NewCDTimer(13, 74806, nil, \"Tank|Healer\", nil, 5, nil, DBM_COMMON_L.TANK_ICON, true) -- REVIEW! ~4s variance [13.0-16.9]. Added \"keep\" arg (25H Lordaeron 2022/09/21 wipe2 || 25H Lordaeron 2022/09/23) -- 14.0, 15.9, 13.8, 14.9, 14.3, 13.0 || 15.8, 13.7, 16.9, 15.3\n\nmod:AddSetIconOption(\"SetIconOnShadowConsumption\", 74792, true, false, {3})--Purple diamond for shadow\n\n-- Stage Three - Corporeality (50%)\nlocal twilightDivisionName = DBM:GetSpellInfo(75063)\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(3)..\": \"..twilightDivisionName)\nlocal warnPhase3\t\t\t\t\t= mod:NewPhaseAnnounce(3, 2, nil, nil, nil, nil, nil, 2)\n\nlocal specWarnCorporeality\t\t\t= mod:NewSpecialWarningCount(74826, nil, nil, nil, 1, 2)\n\nmod.vb.warned_preP2 = false\nmod.vb.warned_preP3 = false\nlocal playerInShadowRealm = false\nlocal fieryCombustionCLEU = false -- Assigning a bool for CLEU check to prevent double timer starts from CLEU & Sync\nlocal fieryBreathCLEU = false -- Assigning a bool for CLEU check to prevent double timer starts from CLEU & Sync\nlocal soulConsumptionCLEU = false -- Assigning a bool for CLEU check to prevent double timer starts from CLEU & Sync\nlocal shadowBreathCLEU = false -- Assigning a bool for CLEU check to prevent double timer starts from CLEU & Sync\nlocal previousCorporeality = 0\n\nlocal function clearKeepTimers(self) -- Attempt to clear \"keep\" negative timers that are not relevant to the realm and would otherwise tick to infinity\n--\tif not self.AnnounceAlternatePhase then return end\n\tif timerShadowBreathCD:GetRemaining() < 0 then timerShadowBreathCD:Stop() end\n\tif timerFieryBreathCD:GetRemaining() < 0 then timerFieryBreathCD:Stop() end\nend\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.warned_preP2 = false\n\tself.vb.warned_preP3 = false\n\tself:SetStage(1)\n\tplayerInShadowRealm = false\n\tfieryCombustionCLEU = false\n\tfieryBreathCLEU = false\n\tsoulConsumptionCLEU = false\n\tshadowBreathCLEU = false\n\tpreviousCorporeality = 0\n\tberserkTimer:Start(-delay)\n\ttimerMeteorCD:Start(20-delay) -- REVIEW! ~5s variance (25N Lordaeron 2022/09/20 || 25H Lordaeron 2022/10/09) - 20.7 || 24.5\n\ttimerFieryCombustionCD:Start(15-delay) -- (25N Lordaeron 2022/09/20 || 25H Lordaeron 2022/10/09) - 17.6 || 16.4\n\ttimerFieryBreathCD:Start(10-delay) -- (25H Lordaeron 2022/09/21 wipe1 || 25H Lordaeron 2022/09/21 wipe2 || 25H Lordaeron 2022/09/21 wipe3 || 25H Lordaeron 2022/09/23) - 10.5 || 11.3 || 12.4 || 10.3\n\ttimerTailLashCD:Start(-delay)\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.HealthFrame then\n\t\tDBM.BossHealth:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(74806, 75954, 75955, 75956) then\n\t\twarningShadowBreath:Show()\n\t\ttimerShadowBreathCD:Start()\n\t\tshadowBreathCLEU = true\n\t\tif self:LatencyCheck() then\n\t\t\tself:SendSync(\"ShadowBreathCD\")\n\t\tend\n\telseif args:IsSpellID(74525, 74526, 74527, 74528) then\n\t\twarningFieryBreath:Show()\n\t\ttimerFieryBreathCD:Start()\n\t\tfieryBreathCLEU = true\n\t\tif self:LatencyCheck() then\n\t\t\tself:SendSync(\"FieryBreathCD\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)--We use spell cast success for debuff timers in case it gets resisted by a player we still get CD timer for next one\n\tlocal spellId = args.spellId\n\tif spellId == 74792 then\n\t\ttimerSoulConsumptionCD:Start()\n\t\tsoulConsumptionCLEU = true\n\t\tif self:LatencyCheck() then\n\t\t\tself:SendSync(\"ShadowCD\")\n\t\tend\n\telseif spellId == 74562 then\n\t\ttimerFieryCombustionCD:Start()\n\t\tfieryCombustionCLEU = true\n\t\tif self:GetStage(1, 2) and self:LatencyCheck() then -- useless on phase 1 since everyone is in the same realm\n\t\t\tself:SendSync(\"FieryCD\")\n\t\tend\n\telseif spellId == 74531 then -- Tail Lash\n\t\ttimerTailLashCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)--We don't use spell cast success for actual debuff on >player< warnings since it has a chance to be resisted.\n\tlocal spellId = args.spellId\n\tif spellId == 74792 then\n\t\tif self:LatencyCheck() then\n\t\t\tself:SendSync(\"ShadowTarget\", args.destName)\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnSoulConsumption:Show()\n\t\t\tspecWarnSoulConsumption:Play(\"runout\")\n\t\t\tyellSoulConsumption:Yell()\n\t\tend\n\t\tif not self.Options.AnnounceAlternatePhase then\n\t\t\twarningSoulConsumption:Show(args.destName)\n\t\tend\n\t\tif self.Options.SetIconOnShadowConsumption then\n\t\t\tself:SetIcon(args.destName, 3)\n\t\tend\n\telseif spellId == 74562 then\n\t\tif self:LatencyCheck() then\n\t\t\tself:SendSync(\"FieryTarget\", args.destName)\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnFieryCombustion:Show()\n\t\t\tspecWarnFieryCombustion:Play(\"runout\")\n\t\t\tyellFieryCombustion:Yell()\n\t\tend\n\t\tif not self.Options.AnnounceAlternatePhase then\n\t\t\twarningFieryCombustion:Show(args.destName)\n\t\tend\n\t\tif self.Options.SetIconOnFireConsumption then\n\t\t\tself:SetIcon(args.destName, 7)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 74792 then\n\t\tif self.Options.SetIconOnShadowConsumption then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\telseif spellId == 74562 then\n\t\tif self.Options.SetIconOnFireConsumption then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(sourceGUID, _, _, destGUID, _, _, spellId)\n\tif (spellId == 75952 or spellId == 75951 or spellId == 75950 or spellId == 75949 or spellId == 75948 or spellId ==  75947) and destGUID == UnitGUID(\"player\") and self:AntiSpam() then\n\t\tspecWarnMeteorStrike:Show()\n\t\tspecWarnMeteorStrike:Play(\"runaway\")\n\t-- Physical/Shadow Realm detection:\n\t-- OnCombatStarts already defines playerInShadowRealm as false.\n\t-- Code below is meant to handle P2 and P3\n\telseif (self:GetCIDFromGUID(sourceGUID) == 39863 or self:GetCIDFromGUID(destGUID) == 39863) and self.Options.HealthFrame and playerInShadowRealm then -- check if Physical Realm boss exists and playerInShadowRealm is still cached as true\n\t\tplayerInShadowRealm = false\n\t\tDBM.BossHealth:Clear()\n\t\tDBM.BossHealth:AddBoss(39863, L.NormalHalion)\n\telseif (self:GetCIDFromGUID(sourceGUID) == 40142 or self:GetCIDFromGUID(destGUID) == 40142) and self.Options.HealthFrame and not playerInShadowRealm then -- check if Shadow Realm boss exists\n\t\tplayerInShadowRealm = true\n\t\tDBM.BossHealth:Clear()\n\t\tDBM.BossHealth:AddBoss(40142, L.TwilightHalion)\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\nfunction mod:UNIT_HEALTH(uId)\n\tif not self.vb.warned_preP2 and self:GetUnitCreatureId(uId) == 39863 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.79 then\n\t\tself.vb.warned_preP2 = true\n\t\twarnPhase2Soon:Show()\n\telseif not self.vb.warned_preP3 and self:GetUnitCreatureId(uId) == 40142 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.54 then\n\t\tself:SendSync(\"Phase3soon\")\n\tend\nend\n\nfunction mod:UPDATE_WORLD_STATES()\n\tfor i = 1, GetNumWorldStateUI() do\n\t\tlocal _, state, text = GetWorldStateUIInfo(i)\n\t\tif state == 1 and strfind(text, \"%%\") then\n\t\t\tlocal corporeality = tonumber(strmatch(text, \"%d+\"))\n\t\t\tif corporeality > 0 and previousCorporeality ~= corporeality then\n\t\t\t\tspecWarnCorporeality:Show(corporeality)\n\t\t\t\tpreviousCorporeality = corporeality\n\t\t\t\tif corporeality > 60 then -- only voice for >= 70%, 60% is still manageable so default to the selected SA sound\n\t\t\t\t\tif self:IsTank() then\n\t\t\t\t\t\tspecWarnCorporeality:Play(\"defensive\")\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tif corporeality < 40 then\n\t\t\t\t\tif self:IsDps() then\n\t\t\t\t\t\tspecWarnCorporeality:Play(\"dpsstop\")\n\t\t\t\t\tend\n\t\t\t\telseif corporeality == 40 then\n\t\t\t\t\tif self:IsDps() then\n\t\t\t\t\t\tspecWarnCorporeality:Play(\"dpsslow\")\n\t\t\t\t\tend\n\t\t\t\telseif corporeality == 60 then\n\t\t\t\t\tif self:IsDps() then\n\t\t\t\t\t\tspecWarnCorporeality:Play(\"dpsmore\")\n\t\t\t\t\tend\n\t\t\t\telseif corporeality > 60 then\n\t\t\t\t\tif self:IsDps() then\n\t\t\t\t\t\tspecWarnCorporeality:Play(\"dpshard\")\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.Phase2 or msg:find(L.Phase2) then\n\t\tself:SendSync(\"Phase2\")\n\telseif msg == L.Phase3 or msg:find(L.Phase3) then\n\t\tself:SendSync(\"Phase3\")\n\telseif msg == L.MeteorCast or msg:find(L.MeteorCast) then--There is no CLEU cast trigger for meteor, only yell\n\t\twarningMeteor:Play(\"meteorrun\")\n\t\tif not self.Options.AnnounceAlternatePhase then\n\t\t\twarningMeteor:Show()\n\t\t\ttimerMeteorCast:Start()--7 seconds from boss yell the meteor impacts.\n\t\t\ttimerMeteorCD:Start()\n\t\tend\n\t\tif self:LatencyCheck() then\n\t\t\tself:SendSync(\"Meteor\")\n\t\tend\n\telseif msg == L.twilightcutter or msg:find(L.twilightcutter) then -- 2022/10/14: No longer required since this has been fixed serverside! Nevertheless, there is no loss in functionality by doing this in Yell instead of Emote; it's even the first event fired from the pair! (~~Edited (specific for Warmane since CHAT_MSG_RAID_BOSS_EMOTE fires twice: at 5s and at cutter)~~)\n\t\t\tspecWarnTwilightCutter:Schedule(5)\n\t\t\tspecWarnTwilightCutter:ScheduleVoice(5, \"farfromline\")\n\t\tif not self.Options.AnnounceAlternatePhase then\n\t\t\ttimerTwilightCutterCD:Cancel()\n\t\t\twarningTwilightCutter:Show()\n\t\t\ttimerTwilightCutter:Schedule(5)--Delay it since it happens 5 seconds after the emote\n\t\t\tif self.Options.TimerCutterSpawn then\n\t\t\t\ttimerTwilightCutterSpawn:Schedule(15)\n\t\t\telse\n\t\t\t\ttimerTwilightCutterCast:Start()\n\t\t\t\ttimerTwilightCutterCD:Schedule(15)\n\t\t\tend\n\t\tend\n\t\tif self:LatencyCheck() then\n\t\t\tself:SendSync(\"TwilightCutter\")\n\t\tend\n\tend\nend\n\nfunction mod:OnSync(msg, target)\n\tif msg == \"TwilightCutter\" then\n\t\tif self.Options.AnnounceAlternatePhase then -- 2022/10/14: Removed antispam workaround since this has been fixed serverside! (~~Edited to circumvent Warmane double cutter boss emote~~)\n\t\t\ttimerTwilightCutterCD:Cancel()\n\t\t\twarningTwilightCutter:Show()\n\t\t\ttimerTwilightCutter:Schedule(5)--Delay it since it happens 5 seconds after the emote\n\t\t\tif self.Options.TimerCutterSpawn then\n\t\t\t\ttimerTwilightCutterSpawn:Schedule(15)\n\t\t\telse\n\t\t\t\ttimerTwilightCutterCast:Start()\n\t\t\t\ttimerTwilightCutterCD:Schedule(15)\n\t\t\tend\n\t\tend\n\telseif msg == \"Meteor\" then\n\t\tif self.Options.AnnounceAlternatePhase then\n\t\t\twarningMeteor:Show()\n\t\t\ttimerMeteorCast:Start()\n\t\t\ttimerMeteorCD:Start()\n\t\tend\n\telseif msg == \"ShadowTarget\" then\n\t\tif self.Options.AnnounceAlternatePhase then\n\t\t\twarningSoulConsumption:Show(target)\n\t\tend\n\telseif msg == \"FieryTarget\" then\n\t\tif self.Options.AnnounceAlternatePhase then\n\t\t\twarningFieryCombustion:Show(target)\n\t\tend\n\telseif msg == \"ShadowCD\" then\n\t\tif self.Options.AnnounceAlternatePhase and not soulConsumptionCLEU then\n\t\t\tsoulConsumptionCLEU = false -- reset state for next CLEU/sync check\n\t\t\ttimerSoulConsumptionCD:Start()\n\t\tend\n\telseif msg == \"ShadowBreathCD\" then\n\t\tif self.Options.AnnounceAlternatePhase and not shadowBreathCLEU then\n\t\t\tshadowBreathCLEU = false -- reset state for next CLEU/sync check\n\t\t\twarningShadowBreath:Show()\n\t\t\ttimerShadowBreathCD:Start()\n\t\tend\n\telseif msg == \"FieryBreathCD\" then\n\t\tif self.Options.AnnounceAlternatePhase and not fieryBreathCLEU then\n\t\t\tfieryBreathCLEU = false -- reset state for next CLEU/sync check\n\t\t\twarningFieryBreath:Show()\n\t\t\ttimerFieryBreathCD:Start()\n\t\tend\n\telseif msg == \"FieryCD\" and self:GetStage(1, 2) then -- block old comms that run this for the entirety of the raid, which is useless on phase 1 since everyone is in the same realm\n\t\tif self.Options.AnnounceAlternatePhase and not fieryCombustionCLEU then\n\t\t\tfieryCombustionCLEU = false -- reset state for next CLEU/sync check\n\t\t\ttimerFieryCombustionCD:Start()\n\t\tend\n\telseif msg == \"Phase2\" and self:GetStage(2, 1) then\n\t\tself:SetStage(2)\n\t\ttimerFieryBreathCD:Cancel()\n\t\ttimerMeteorCD:Cancel()\n\t\ttimerFieryCombustionCD:Cancel()\n\t\twarnPhase2:Show()\n\t\twarnPhase2:Play(\"ptwo\")\n\t\ttimerShadowBreathCD:Start() -- ~5s variance [13.7-18.4] (25H Lordaeron 2022/09/21 wipe1 || 25H Lordaeron 2022/09/21 wipe2 || 25H Lordaeron 2022/09/21 wipe3 || 25H Lordaeron 2022/09/23) - 15.9 || 13.7 || 18.1 || 18.4\n\t\ttimerSoulConsumptionCD:Start(22.8)--Edited. not exact, 15 seconds from tank aggro, but easier to add 5 seconds to it as a estimate timer than trying to detect this. (25N Lordaeron 2022/10/09 || 25H Lordaeron 2022/10/15 || 25H Lordaeron 2022/10/30) - 23.8 || 23.4 || 22.8\n\t\tif self.Options.TimerCutterSpawn then\n\t\t\ttimerTwilightCutterSpawn:Start(35)\n\t\telse\n\t\t\ttimerTwilightCutterCD:Start(30) -- (25N Lordaeron 2022/09/20 || 25H Lordaeron 2022/09/21) - Stage 2/30.0 || Stage 2/30.0\n\t\tend\n\t\tself:Schedule(20, clearKeepTimers, self)\n\telseif msg == \"Phase3\" and self:GetStage(3, 1) then\n\t\tself:SetStage(3)\n\t\twarnPhase3:Show()\n\t\twarnPhase3:Play(\"pthree\")\n\t\ttimerMeteorCD:Start(23.2) --These i'm not sure if they start regardless of drake aggro, or if it varies as well. (25H Lordaeron 2022/10/09 || 25H Lordaeron 2022/10/30) - Stage 3/25.8 || 23.2\n\t\ttimerFieryCombustionCD:Start(17.8) -- REVIEW! source of variance? (25N Lordaeron 2022/10/09 || 25H Lordaeron 2022/10/15 || 25N Lordaeron [2023-06-27]@[19:37:57]) - 18.5 || 19.4 || 17.8\n\t\tself:Schedule(20, clearKeepTimers, self)\n\telseif msg == \"Phase3soon\" and not self.vb.warned_preP3 then\n\t\tself.vb.warned_preP3 = true\n\t\twarnPhase3Soon:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-ChamberOfAspects/Ruby/Saviana.lua",
    "content": "local mod\t= DBM:NewMod(\"Saviana\", \"DBM-ChamberOfAspects\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(39747)\nmod:SetEncounterID(891)\nmod:SetUsedIcons(8, 7, 6, 5, 4)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 74403 74404\",\n\t\"SPELL_AURA_APPLIED 78722 74453\",\n\t\"SPELL_AURA_REMOVED 78722\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1\"\n)\n\nlocal warningWarnBeacon\t\t= mod:NewTargetNoFilterAnnounce(74453, 4)--Will change to a target announce if possible. need to do encounter\nlocal warningWarnBreath\t\t= mod:NewSpellAnnounce(74403, 3)\n\nlocal specWarnBeacon\t\t= mod:NewSpecialWarningYou(74453, nil, nil, nil, 1, 2)--Target scanning may not even work since i haven't done encounter yet it's just a guess.\nlocal specWarnTranq\t\t\t= mod:NewSpecialWarningDispel(78722, \"RemoveEnrage\", nil, nil, 1, 2)\n\nlocal timerBeacon\t\t\t= mod:NewBuffActiveTimer(5, 74453, nil, nil, nil, 3)\nlocal timerConflag\t\t\t= mod:NewBuffActiveTimer(5, 74456, nil, nil, nil, 3)\nlocal timerConflagCD\t\t= mod:NewCDTimer(63.8, 74452, nil, nil, nil, 3) -- Using UNIT_SPELLCAST_SUCCEEDED since it only fires once. Variance depends on travel time (25N Lordaeron 2022/09/19 || 25H Lordaeron 2022/09/23) -- 63.8 || 64.3\nlocal timerBreath\t\t\t= mod:NewCDTimer(19.3, 74403, nil, \"Tank|Healer\", nil, 5, nil, DBM_COMMON_L.TANK_ICON, true) -- REVIEW! ~10s variance [19.3-29.5] Added \"Keep\" arg (25N Lordaeron 2022/09/19 || 25H Lordaeron 2022/09/23 || 25N Lordaeron [2023-06-27]@[19:12:05]) -- 38.8, 29.5, 34.2 || 38.4, 25.7 || 38.1, 22.1\nlocal timerEnrage\t\t\t= mod:NewBuffActiveTimer(10, 78722, nil, \"RemoveEnrage|Tank|Healer\", nil, 5, nil, DBM_COMMON_L.ENRAGE_ICON..DBM_COMMON_L.TANK_ICON)\nlocal timerFlight\t\t\t= mod:NewNextTimer(50, 34873, nil, nil, nil, 6, 54950)\nlocal timerLanding\t\t\t= mod:NewNextTimer(8, 30202, nil, nil, nil, 6, 54950)\n\nmod:AddRangeFrameOption(10, 74456)\nmod:AddSetIconOption(\"beaconIcon\", 74453, true, false, {8, 7, 6, 5, 4})\n\nmod:GroupSpells(74453, 74456, 74452)--Group target debuff ID with regular debuff IDs\n\nlocal beaconTargets = {}\nmod.vb.beaconIcon\t= 8\n\nlocal function warnConflagTargets(self)\n\twarningWarnBeacon:Show(table.concat(beaconTargets, \"<, >\"))\n\ttable.wipe(beaconTargets)\n\tself.vb.beaconIcon = 8\nend\n\nlocal function savianaPhaseCatcher(self)\n\tself:RegisterShortTermEvents(\n\t\t\"UNIT_TARGET boss1\"\n\t)\nend\n\nlocal function savianaAirphase(self)\n\tself:SetStage(1.5)\n\ttimerBreath:Pause()\n\tself:UnregisterShortTermEvents()\nend\n\nlocal function savianaLanding(self)\n\tself:SetStage(1)\n\ttimerFlight:Start()\n\ttimerBreath:Resume()\n\tself:Schedule(49.5, savianaPhaseCatcher, self)\n\tself:Schedule(50, savianaAirphase, self)\n\tself:UnregisterShortTermEvents()\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\ttimerConflagCD:Start(30.1-delay) -- REVIEW! variance? (25N Lordaeron 2022/09/19 || 25H Lordaeron 2022/09/23) -- 30.1 || 30.2\n\ttimerBreath:Start(14-delay) -- (25N Lordaeron 2022/09/19 || 25H Lordaeron 2022/09/23 || 25N Lordaeron [2023-06-27]@[19:12:05]) - 14.0 || 14.0 || 14.0\n\ttimerFlight:Start(25-delay)\n\ttable.wipe(beaconTargets)\n\tself.vb.beaconIcon = 8\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(12)\n\tend\n\tself:Schedule(24.5, savianaPhaseCatcher, self)\n\tself:Schedule(25, savianaAirphase, self) -- Lowest 24.96\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\n\tself:UnregisterShortTermEvents()\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(74403, 74404) then\n\t\twarningWarnBreath:Show()\n\t\ttimerBreath:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 78722 then\n\t\tspecWarnTranq:Show(args.destName)\n\t\tspecWarnTranq:Play(\"trannow\")\n\t\ttimerEnrage:Start()\n\telseif spellId == 74453 then\n\t\tbeaconTargets[#beaconTargets + 1] = args.destName\n\t\ttimerBeacon:Start()\n\t\ttimerConflag:Schedule(5)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnBeacon:Show()\n\t\t\tspecWarnBeacon:Play(\"targetyou\")\n\t\tend\n\t\tif self.Options.beaconIcon then\n\t\t\tself:SetIcon(args.destName, self.vb.beaconIcon, 11)\n\t\tend\n\t\tself.vb.beaconIcon = self.vb.beaconIcon - 1\n\t\tself:Unschedule(warnConflagTargets)\n\t\tself:Schedule(0.3, warnConflagTargets, self)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 78722 then\n\t\ttimerEnrage:Cancel()\n\tend\nend\n\nfunction mod: UNIT_SPELLCAST_SUCCEEDED(_, spellName) -- UNIT_SPELLCAST_START/CLEU fires and stops right after, and only gets SUCCEEDED one second after, one time only, which is better to optimize some calls\n\tif spellName == GetSpellInfo(74454) then -- Conflagration\n\t\ttimerConflagCD:Restart() -- This will always be prone to bad timers, since it doesn't account for travel time, which can be different!\n\t\ttimerLanding:Start()\n\t\tself:Schedule(7, savianaPhaseCatcher, self)\n\t\tself:Schedule(7.89, savianaLanding, self) -- Lowest 7.88\n\tend\nend\n\nfunction mod:UNIT_TARGET(uId)\n\tlocal unitTarget = UnitExists(uId..\"target\")\n\tif not unitTarget and  self.vb.phase == 1 then\n\t\tself:SendSync(\"SavianaAired\") -- Sync airphase with raid since UNIT_TARGET:boss1 event requires boss to be target/focus, which not all members do\n\telseif unitTarget and self.vb.phase == 1.5 then\n\t\tself:SendSync(\"SavianaLanded\") -- Sync landing with raid since UNIT_TARGET:boss1 event requires boss to be target/focus, which not all members do\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif not self:IsInCombat() then return end\n\tif msg == \"SavianaAired\" and self.vb.phase == 1 then\n\t\tself:Unschedule(savianaAirphase)\n\t\tsavianaAirphase(self)\n\telseif msg == \"SavianaLanded\" and self.vb.phase == 1.5 then\n\t\tself:Unschedule(savianaLanding)\n\t\tsavianaLanding(self)\n\tend\nend\n"
  },
  {
    "path": "DBM-ChamberOfAspects/Ruby/Zarithrian.lua",
    "content": "local mod\t= DBM:NewMod(\"Zarithrian\", \"DBM-ChamberOfAspects\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(39746)\nmod:SetEncounterID(893)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 74384\",\n\t\"SPELL_AURA_APPLIED 74367 10278 642\",\n\t\"SPELL_AURA_APPLIED_DOSE 74367\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal warningAdds\t\t\t\t= mod:NewAnnounce(\"WarnAdds\", 3, 74398)\nlocal warnCleaveArmor\t\t\t= mod:NewStackAnnounce(74367, 2, nil, \"Tank|Healer\")\nlocal warnFearSoon\t\t\t\t= mod:NewSoonAnnounce(74384, 2, nil, nil, nil, nil, nil, 2)\n\nlocal specWarnFear\t\t\t\t= mod:NewSpecialWarningSpell(74384, nil, nil, nil, 2, 2)\nlocal specWarnCleaveArmor\t\t= mod:NewSpecialWarningStack(74367, nil, 2, nil, nil, 1, 6)--ability lasts 30 seconds, has a 15 second cd, so tanks should trade at 2 stacks.\n\nlocal timerAddsCD\t\t\t\t= mod:NewTimer(40, \"TimerAdds\", 74398, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerAddsTravel\t\t\t= mod:NewTimer(10, \"AddsArrive\") -- Timer to indicate when the summoned adds arive\nlocal timerCleaveArmor\t\t\t= mod:NewTargetTimer(30, 74367, nil, \"Tank|Healer\", nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerFearCD\t\t\t\t= mod:NewCDTimer(30, 74384, nil, nil, nil, 2)\n\nmod:AddBoolOption(\"CancelBuff\")\nlocal CleaveArmorTargets = {}\n\nfunction mod:OnCombatStart(delay)\n\ttimerFearCD:Start(14-delay)\n\twarnFearSoon:ScheduleVoice(11, \"fearsoon\") -- 3 secs prewarning\n\ttimerAddsCD:Start(18-delay)\nend\n\nfunction mod:OnCombatEnd()\n\ttable.wipe(CleaveArmorTargets)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 74384 then\n\t\tspecWarnFear:Show()\n\t\twarnFearSoon:ScheduleVoice(27, \"fearsoon\") -- 3 secs prewarning\n\t\ttimerFearCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 74367 then\n\t\tif self.Options.CancelBuff and not tContains(CleaveArmorTargets, args.destName) then\n\t\t\tCleaveArmorTargets[#CleaveArmorTargets+1] = args.destName\n\t\tend\n\t\tlocal amount = args.amount or 1\n\t\ttimerCleaveArmor:Start(args.destName)\n\t\tif args:IsPlayer() and amount >= 2 then\n\t\t\tspecWarnCleaveArmor:Show(amount)\n\t\t\tspecWarnCleaveArmor:Play(\"stackhigh\")\n\t\telse\n\t\t\twarnCleaveArmor:Show(args.destName, amount)\n\t\tend\n\telseif (spellId == 10278 or spellId == 642) and self.Options.CancelBuff and self:IsInCombat() and args:IsPlayer() and #CleaveArmorTargets > 0 then\n\t\tfor i = 1, #CleaveArmorTargets do\n\t\t\tlocal targetName = CleaveArmorTargets[i]\n\t\t\tif targetName == DBM:GetMyPlayerInfo() then\n\t\t\t\tCancelUnitBuff(\"player\", GetSpellInfo(10278))\t\t-- Hand of Protection\n\t\t\t\tCancelUnitBuff(\"player\", GetSpellInfo(642))\t\t-- Divine Shield\n\t\t\t\tCleaveArmorTargets[i] = nil\n\t\t\tend\n\t\tend\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.SummonMinions or msg:match(L.SummonMinions) then\n\t\twarningAdds:Show()\n\t\ttimerAddsCD:Start()\n\t\ttimerAddsTravel:Start() -- Added timer for travel time on summoned adds\n\tend\nend\n"
  },
  {
    "path": "DBM-ChamberOfAspects/localization.cn.lua",
    "content": "-- author: callmejames @《凤凰之翼》 一区藏宝海湾\n-- commit by: yaroot <yaroot AT gmail.com>\n\n\nif GetLocale() ~= \"zhCN\" then return end\n\nlocal L\n\n----------------------------\n--  The Obsidian Sanctum  --\n----------------------------\n--  Shadron  --\n---------------\nL = DBM:GetModLocalization(\"Shadron\")\n\nL:SetGeneralLocalization({\n\tname = \"沙德隆\"\n})\n\nL:SetMiscLocalization({\n\tYellShadronPull\t= \"我无所畏惧！你们根本不值一提！\",\n})\n\n----------------\n--  Tenebron  --\n----------------\nL = DBM:GetModLocalization(\"Tenebron\")\n\nL:SetGeneralLocalization({\n\tname = \"塔尼布隆\"\n})\n\nL:SetMiscLocalization({\n\tYellTenebronPull\t= \"你们没资格来这里！你们的归宿……在死者的国度！\",\n})\n\n----------------\n--  Vesperon  --\n----------------\nL = DBM:GetModLocalization(\"Vesperon\")\n\nL:SetGeneralLocalization({\n\tname = \"维斯匹隆\"\n})\n\nL:SetMiscLocalization({\n\tYellVesperonPull\t= \"你们这些下等生物根本无法对我构成任何威胁！使出全力战斗吧！\",\n})\n\n------------------\n--  Sartharion  --\n------------------\nL = DBM:GetModLocalization(\"Sartharion\")\n\nL:SetGeneralLocalization({\n\tname = \"萨塔里奥\"\n})\n\nL:SetWarningLocalization({\n\tWarningTenebron\t\t\t= \"塔尼布隆到来\",\n\tWarningShadron\t\t\t= \"沙德隆到来\",\n\tWarningVesperon\t\t\t= \"维斯匹隆到来\",\n\tWarningFireWall\t\t\t= \"烈焰之啸\",\n\tWarningWhelpsSoon\t\t= \"铁粉幼崽很快\",\n\tWarningPortalSoon\t\t= \"莎德龙传送门很快\",\n\tWarningReflectSoon\t\t= \"维斯匹隆反映很快\",\n\tWarningVesperonPortal\t= \"维斯匹隆的传送门\",\n\tWarningTenebronPortal\t= \"塔尼布隆的传送门\",\n\tWarningShadronPortal\t= \"沙德隆的传送门\"\n})\n\nL:SetTimerLocalization({\n\tTimerTenebron\t\t\t= \"塔尼布隆到来\",\n\tTimerShadron\t\t\t= \"沙德隆到来\",\n\tTimerVesperon\t\t\t= \"维斯匹隆到来\",\n\tTimerTenebronWhelps\t\t= \"铁粉幼崽\",\n\tTimerShadronPortal\t\t= \"沙龙传送门\",\n\tTimerVesperonPortal\t\t= \"维斯匹隆传送门\",\n\tTimerVesperonPortal2\t= \"维斯匹隆传送门 2\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceFails\t\t\t= \"公布踩中暗影裂隙和撞上烈焰之啸的玩家到团队频道 (需要团长或助理权限)\",\n\tTimerTenebron\t\t\t= \"为塔尼布隆到来显示计时条\",\n\tTimerShadron\t\t\t= \"为沙德隆到来显示计时条\",\n\tTimerVesperon\t\t\t= \"为维斯匹隆到来显示计时条\",\n\tTimerTenebronWhelps\t\t= \"显示铁粉幼崽的计时器\",\n\tTimerShadronPortal\t\t= \"显示沙龙传送门的计时器\",\n\tTimerVesperonPortal\t\t= \"显示维斯匹隆传送门的计时器\",\n\tTimerVesperonPortal2\t= \"显示维斯匹隆传送门的计时器 2\",\n\tWarningFireWall\t\t\t= \"为烈焰之啸显示特别警报\",\n\tWarningTenebron\t\t\t= \"提示塔尼布隆到来\",\n\tWarningShadron\t\t\t= \"提示沙德隆到来\",\n\tWarningVesperon\t\t\t= \"提示维斯匹隆到来\",\n\tWarningWhelpsSoon\t\t= \"很快宣布铁粉幼崽\",\n\tWarningPortalSoon\t\t= \"很快宣布沙龙传送门\",\n\tWarningReflectSoon\t\t= \"宣布维斯匹隆反映很快\",\n\tWarningTenebronPortal\t= \"为塔尼布隆的传送门显示特别警报\",\n\tWarningShadronPortal\t= \"为沙德隆的传送门显示特别警报\",\n\tWarningVesperonPortal\t= \"为维斯匹隆的传送门显示特别警报\"\n})\n\nL:SetMiscLocalization({\n\tYellSarthPull\t= \"我的职责是保护这些龙卵。在伤害到它们之前，你们就会被我的龙息烧成灰烬！\",\n\tWall\t\t\t= \"%s周围的岩浆沸腾了起来！\",\n\tPortal\t\t\t= \"%s开始开启暮光传送门！\",\n\tNameTenebron\t= \"塔尼布隆\",\n\tNameShadron\t\t= \"沙德隆\",\n\tNameVesperon\t= \"维斯匹隆\",\n\tFireWallOn\t\t= \"烈焰之啸：%s\",\n\tVoidZoneOn\t\t= \"暗影裂隙：%s\",\n\tVoidZones\t\t= \"踩中暗影裂隙 (这一次)：%s\",\n\tFireWalls\t\t= \"撞上烈焰之啸 (这一次)：%s\"\n})\n\n------------------------\n--  红玉圣殿  --\n------------------------\n--  Baltharus the Warborn  --\n-----------------------------\nL = DBM:GetModLocalization(\"Baltharus\")\n\nL:SetGeneralLocalization({\n\tname = \"战争之子巴尔萨鲁斯\"\n})\n\nL:SetWarningLocalization({\n\tWarningSplitSoon\t= \"分裂 即将到来\"\n})\n\nL:SetOptionLocalization({\n\tWarningSplitSoon\t= \"预警：分裂\"\n})\n\n-------------------------\n--  Saviana Ragefire  --\n-------------------------\nL = DBM:GetModLocalization(\"Saviana\")\n\nL:SetGeneralLocalization({\n\tname = \"塞维娅娜·怒火\"\n})\n\n--------------------------\n--  General Zarithrian  --\n--------------------------\nL = DBM:GetModLocalization(\"Zarithrian\")\n\nL:SetGeneralLocalization({\n\tname = \"萨瑞瑟里安将军\"\n})\n\nL:SetWarningLocalization({\n\tWarnAdds\t\t= \"新的小怪\",\n\twarnCleaveArmor\t= \">%1$s<中了%2$s(%s)\"\t-- Cleave Armor on >args.destName< (args.amount)\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t\t= \"新的小怪\",\n\tAddsArrive\t\t= \"小怪到来：\"\n})\n\nL:SetOptionLocalization({\n\tWarnAdds\t\t= \"通报：新的小怪\",\n\tTimerAdds\t\t= \"计时条：新的小怪\",\n\tCancelBuff\t\t= \"删除 $spell:10278 和 $spell:642 如果用于删除 $spell:74367\",\n\tAddsArrive\t\t= \"计时条：小怪到来\"\n})\n\nL:SetMiscLocalization({\n\tSummonMinions\t= \"让他们化为灰烬，仆从们！\"\n})\n\n-------------------------------------\n--  Halion the Twilight Destroyer  --\n-------------------------------------\nL = DBM:GetModLocalization(\"Halion\")\n\nL:SetGeneralLocalization({\n\tname = \"海里昂 暮光摧毁者\"\n})\n\nL:SetWarningLocalization({\n\tTwilightCutterCast\t\t= \"5秒后 施放暮光撕裂射线\"\n})\n\nL:SetOptionLocalization({\n\tTwilightCutterCast\t\t= \"警报：$spell:77844开始施放\",\n\tAnnounceAlternatePhase\t= \"显示另一场地的警报/计时条\",\n\tSetIconOnConsumption\t= \"标记：$spell:74562或$spell:74792的目标\"--So we can use single functions for both versions of spell.\n})\n\nL:SetMiscLocalization({\n\tHalion\t\t\t\t\t= \"海里昂\",\n\tPhysicalRealm\t\t\t= \"物质世界\",\n\tMeteorCast\t\t\t\t= \"天空在燃烧！\",\n\tPhase2\t\t\t\t\t= \"暮光的世界将会让你痛不欲生！够胆量的就进来吧！\",\n\tPhase3\t\t\t\t\t= \"我就是交织的光影！凡人，在死亡之翼的使者面前颤抖吧！\",\n\ttwilightcutter\t\t\t= \"阴影在弥漫！\", -- \"黑暗能量正在这颗旋转的魔球中脉动！\", -- Warmane(i服)不能用此台词作为判断条件，因为Warmane(i服)服务器端会在切割前5秒和切割开始时触发此台词两次。\n\tKill\t\t\t\t\t= \"享受胜利吧，凡人们，这是你们最后的胜利。回归的主人将烧毁这个世界！\"\n})\n"
  },
  {
    "path": "DBM-ChamberOfAspects/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\n\nlocal L\n\n----------------------------\n--  The Obsidian Sanctum  --\n----------------------------\n--  Shadron  --\n---------------\nL = DBM:GetModLocalization(\"Shadron\")\n\nL:SetGeneralLocalization({\n\tname = \"Shadron\"\n})\n\nL:SetMiscLocalization({\n\tYellShadronPull\t= \"Ich fürchte nichts und niemanden! Am allerwenigsten euch!\",\n})\n\n----------------\n--  Tenebron  --\n----------------\nL = DBM:GetModLocalization(\"Tenebron\")\n\nL:SetGeneralLocalization({\n\tname = \"Tenebron\"\n})\n\nL:SetMiscLocalization({\n\tYellTenebronPull\t= \"Ihr gehört nicht hierher! Euer Platz... ist bei den Gefallenen!\",\n})\n\n----------------\n--  Vesperon  --\n----------------\nL = DBM:GetModLocalization(\"Vesperon\")\n\nL:SetGeneralLocalization({\n\tname = \"Vesperon\"\n})\n\nL:SetMiscLocalization({\n\tYellVesperonPull\t= \"Ihr stellt keine Bedrohung dar, niedere Wesen! Zeigt mir, was in Euch steckt!\",\n})\n\n------------------\n--  Sartharion  --\n------------------\nL = DBM:GetModLocalization(\"Sartharion\")\n\nL:SetGeneralLocalization({\n\tname = \"Sartharion\"\n})\n\nL:SetWarningLocalization({\n\tWarningTenebron\t\t\t= \"Tenebron kommt\",\n\tWarningShadron\t\t\t= \"Shadron kommt\",\n\tWarningVesperon\t\t\t= \"Vesperon kommt\",\n\tWarningFireWall\t\t\t= \"Feuerwand\",\n\tWarningWhelpsSoon\t\t= \"Tenebron Welpen bald\",\n\tWarningPortalSoon\t\t= \"Shadron-Portal in Kürze\",\n\tWarningReflectSoon\t\t= \"Vesperon Reflect Bald\",\n\tWarningVesperonPortal\t= \"Vesperons Portal\",\n\tWarningTenebronPortal\t= \"Tenebrons Portal\",\n\tWarningShadronPortal\t= \"Shadrons Portal\"\n})\n\nL:SetTimerLocalization({\n\tTimerTenebron\t\t\t= \"Tenebron kommt\",\n\tTimerShadron\t\t\t= \"Shadron kommt\",\n\tTimerVesperon\t\t\t= \"Vesperon kommt\",\n\tTimerTenebronWhelps\t\t= \"Tenebron Welpen\",\n\tTimerShadronPortal\t\t= \"Shadron-Portal\",\n\tTimerVesperonPortal\t\t= \"Vesperon-Portal\",\n\tTimerVesperonPortal2\t= \"Vesperon-Portal 2\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceFails\t\t\t= \"Verkünde Spieler im SZ-Chat, die bei Feuerwand und Schattenspalt scheitern (benötigt aktivierte Mitteilungen und Leiter-/Assistentenstatus)\",\n\tTimerTenebron\t\t\t= \"Zeige Zeit bis Tenebron in den Kampf eingreift\",\n\tTimerShadron\t\t\t= \"Zeige Zeit bis Shadron in den Kampf eingreift\",\n\tTimerVesperon\t\t\t= \"Zeige Zeit bis Vesperon in den Kampf eingreift\",\n\tTimerTenebronWhelps\t\t= \"Timer für Tenebron Welpen anzeigen\",\n\tTimerShadronPortal\t\t= \"Timer für Shadron-Portal anzeigen\",\n\tTimerVesperonPortal\t\t= \"Timer für Vesperon Portal anzeigen\",\n\tTimerVesperonPortal2\t= \"Timer für Vesperon Portal 2 anzeigen\",\n\tWarningFireWall\t\t\t= \"Spezialwarnung für Feuerwand\",\n\tWarningTenebron\t\t\t= \"Verkünde das Eingreifen von Tenebron in den Kampf\",\n\tWarningShadron\t\t\t= \"Verkünde das Eingreifen von Shadron in den Kampf\",\n\tWarningVesperon\t\t\t= \"Verkünde das Eingreifen von Vesperon in den Kampf\",\n\tWarningWhelpsSoon\t\t= \"Kündigen Tenebron Whelps bald an\",\n\tWarningPortalSoon\t\t= \"Shadron-Portal bald ankündigen\",\n\tWarningReflectSoon\t\t= \"Vesperon Reflect bald ankündigen\",\n\tWarningTenebronPortal\t= \"Spezialwarnung für Tenebrons Portal\",\n\tWarningShadronPortal\t= \"Spezialwarnung für Shadrons Portal\",\n\tWarningVesperonPortal\t= \"Spezialwarnung für Vesperons Portal\"\n})\n\nL:SetMiscLocalization({\n\tYellSarthPull\t= \"Meine Aufgabe ist es, über diese Eier zu wachen. Kommt ihnen zu nahe und von euch bleibt nur ein Häuflein Asche.\",\n\tWall\t\t\t= \"Die Lava um %s brodelt!\",\n\tPortal\t\t\t= \"%s beginnt, ein Portal des Zwielichts zu öffnen!\",\n\tNameTenebron\t= \"Tenebron\",\n\tNameShadron\t\t= \"Shadron\",\n\tNameVesperon\t= \"Vesperon\",\n\tFireWallOn\t\t= \"Feuerwand: %s\",\n\tVoidZoneOn\t\t= \"Schattenspalt: %s\",\n\tVoidZones\t\t= \"Fehler bei Schattenspalt (dieser Versuch): %s\",\n\tFireWalls\t\t= \"Fehler bei Feuerwand (dieser Versuch): %s\"\n})\n\n------------------------\n--  The Ruby Sanctum  --\n------------------------\n--  Baltharus the Warborn  --\n-----------------------------\nL = DBM:GetModLocalization(\"Baltharus\")\n\nL:SetGeneralLocalization({\n\tname = \"Baltharus der Kriegsjünger\"\n})\n\nL:SetWarningLocalization({\n\tWarningSplitSoon\t= \"Aufspaltung bald\"\n})\n\nL:SetOptionLocalization({\n\tWarningSplitSoon\t= \"Zeige Vorwarnung für Aufspaltung\"\n})\n\n-------------------------\n--  Saviana Ragefire  --\n-------------------------\nL = DBM:GetModLocalization(\"Saviana\")\n\nL:SetGeneralLocalization({\n\tname = \"Saviana Flammenschlund\"\n})\n\n--------------------------\n--  General Zarithrian  --\n--------------------------\nL = DBM:GetModLocalization(\"Zarithrian\")\n\nL:SetGeneralLocalization({\n\tname = \"General Zarithrian\"\n})\n\nL:SetWarningLocalization({\n\tWarnAdds\t= \"Neue Adds\",\n\twarnCleaveArmor\t= \"%s auf >%s< (%s)\"\t-- Cleave Armor on >args.destName< (args.amount)\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t= \"Neue Adds\",\n\tAddsArrive\t= \"Adds kommen an in\"\n})\n\nL:SetOptionLocalization({\n\tWarnAdds\t\t= \"Verkünde neue Adds\",\n\tTimerAdds\t\t= \"Zeige Zeit bis neue Adds erscheinen\",\n\tCancelBuff\t\t= \"Entferne $spell:10278 und $spell:642, wenn verwendet, um $spell:74367 zu entfernen\",\n\tAddsArrive\t\t= \"Timer für die Ankunft der Adds anzeigen\"\n})\n\nL:SetMiscLocalization({\n\tSummonMinions\t= \"Äschert sie ein, Lakaien!\"\n})\n\n-------------------------------------\n--  Halion the Twilight Destroyer  --\n-------------------------------------\nL = DBM:GetModLocalization(\"Halion\")\n\nL:SetGeneralLocalization({\n\tname = \"Halion der Zwielichtzerstörer\"\n})\n\nL:SetWarningLocalization({\n\tTwilightCutterCast\t= \"Wirkt Zwielichtschnitter: 5 sec\"\n})\n\nL:SetOptionLocalization({\n\tTwilightCutterCast\t\t= \"Zeige Warnung, wenn $spell:74769 gewirkt wird\",\n\tAnnounceAlternatePhase\t= \"Zeige auch Warnungen/Timer für Phasen, in denen du dich nicht befindest\",\n\tSetIconOnConsumption\t= \"Setze Zeichen auf Ziele von $spell:74562 und $spell:74792\"\n})\n\nL:SetMiscLocalization({\n\tHalion\t\t\t\t\t= \"Halion\",\n\tPhysicalRealm\t\t\t= \"Körperliches Reich\",\n\tMeteorCast\t\t\t\t= \"Die Himmel brennen!\",\n\tPhase2\t\t\t\t\t= \"Ihr werdet im Reich des Zwielichts nur Leid finden! Tretet ein, wenn ihr es wagt!\",\n\tPhase3\t\t\t\t\t= \"Ich bin das Licht und die Dunkelheit! Zittert, Sterbliche, vor dem Herold Todesschwinges!\",\n\ttwilightcutter\t\t\t= \"Hütet euch vor dem Schatten!\", --\"Die kreisenden Sphären pulsieren vor dunkler Energie!\" -- Can't use this since on Warmane it triggers twice, 5s prior and on cutter.\n\tKill\t\t\t\t\t= \"Genießt euren Sieg, Sterbliche, denn es war euer letzter. Bei der Rückkehr des Meisters wird diese Welt brennen!\"\n})\n"
  },
  {
    "path": "DBM-ChamberOfAspects/localization.en.lua",
    "content": "local L\n\n----------------------------\n--  The Obsidian Sanctum  --\n----------------------------\n--  Shadron  --\n---------------\nL = DBM:GetModLocalization(\"Shadron\")\n\nL:SetGeneralLocalization({\n\tname = \"Shadron\"\n})\n\nL:SetMiscLocalization({\n\tYellShadronPull\t= \"I fear nothing! Least of all you!\",\n})\n\n----------------\n--  Tenebron  --\n----------------\nL = DBM:GetModLocalization(\"Tenebron\")\n\nL:SetGeneralLocalization({\n\tname = \"Tenebron\"\n})\n\nL:SetMiscLocalization({\n\tYellTenebronPull\t= \"You have no place here! Your place... is among the departed!\",\n})\n\n----------------\n--  Vesperon  --\n----------------\nL = DBM:GetModLocalization(\"Vesperon\")\n\nL:SetGeneralLocalization({\n\tname = \"Vesperon\"\n})\n\nL:SetMiscLocalization({\n\tYellVesperonPull\t= \"You pose no threat, lesser beings! Give me your worst!\",\n})\n\n------------------\n--  Sartharion  --\n------------------\nL = DBM:GetModLocalization(\"Sartharion\")\n\nL:SetGeneralLocalization({\n\tname = \"Sartharion\"\n})\n\nL:SetWarningLocalization({\n\tWarningTenebron\t\t\t= \"Tenebron incoming\",\n\tWarningShadron\t\t\t= \"Shadron incoming\",\n\tWarningVesperon\t\t\t= \"Vesperon incoming\",\n\tWarningFireWall\t\t\t= \"Fire Wall\",\n\tWarningWhelpsSoon\t\t= \"Tenebron Whelps Soon\",\n\tWarningPortalSoon\t\t= \"Shadron Portal Soon\",\n\tWarningReflectSoon\t\t= \"Vesperon Reflect Soon\",\n\tWarningVesperonPortal\t= \"Vesperon's portal\",\n\tWarningTenebronPortal\t= \"Tenebron's portal\",\n\tWarningShadronPortal\t= \"Shadron's portal\"\n})\n\nL:SetTimerLocalization({\n\tTimerTenebron\t\t\t= \"Tenebron arrives\",\n\tTimerShadron\t\t\t= \"Shadron arrives\",\n\tTimerVesperon\t\t\t= \"Vesperon arrives\",\n\tTimerTenebronWhelps\t\t= \"Tenebron Whelps\",\n\tTimerShadronPortal\t\t= \"Shadron Portal\",\n\tTimerVesperonPortal\t\t= \"Vesperon Portal\",\n\tTimerVesperonPortal2\t= \"Vesperon Portal 2\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceFails\t\t\t= \"Post player fails for Fire Wall and Shadow Fissure to raid chat<br/>(requires announce to be enabled and leader/promoted status)\",\n\tTimerTenebron\t\t\t= \"Show timer for Tenebron's arrival\",\n\tTimerShadron\t\t\t= \"Show timer for Shadron's arrival\",\n\tTimerVesperon\t\t\t= \"Show timer for Vesperon's arrival\",\n\tTimerTenebronWhelps\t\t= \"Show timer for Tenebron Whelps\",\n\tTimerShadronPortal\t\t= \"Show timer for Shadron Portal\",\n\tTimerVesperonPortal\t\t= \"Show timer for Vesperon Portal\",\n\tTimerVesperonPortal2\t= \"Show timer for Vesperon Portal 2\",\n\tWarningFireWall\t\t\t= \"Show special warning for Fire Wall\",\n\tWarningTenebron\t\t\t= \"Announce Tenebron incoming\",\n\tWarningShadron\t\t\t= \"Announce Shadron incoming\",\n\tWarningVesperon\t\t\t= \"Announce Vesperon incoming\",\n\tWarningWhelpsSoon\t\t= \"Announce Tenebron Whelps soon\",\n\tWarningPortalSoon\t\t= \"Announce Shadron Portal soon\",\n\tWarningReflectSoon\t\t= \"Announce Vesperon Reflect soon\",\n\tWarningTenebronPortal\t= \"Show special warning for Tenebron's portal\",\n\tWarningShadronPortal\t= \"Show special warning for Shadron's portal\",\n\tWarningVesperonPortal\t= \"Show special warning for Vesperon's portal\"\n})\n\nL:SetMiscLocalization({\n\tYellSarthPull\t= \"It is my charge to watch over these eggs. I will see you burn before any harm comes to them!\",\n\tWall\t\t\t= \"The lava surrounding %s churns!\",\n\tPortal\t\t\t= \"%s begins to open a Twilight Portal!\",\n\tNameTenebron\t= \"Tenebron\",\n\tNameShadron\t\t= \"Shadron\",\n\tNameVesperon\t= \"Vesperon\",\n\tFireWallOn\t\t= \"Fire Wall: %s\",\n\tVoidZoneOn\t\t= \"Shadow Fissure: %s\",\n\tVoidZones\t\t= \"Shadow Fissure fails (this try): %s\",\n\tFireWalls\t\t= \"Fire Wall fails (this try): %s\"\n})\n\n------------------------\n--  The Ruby Sanctum  --\n------------------------\n--  Baltharus the Warborn  --\n-----------------------------\nL = DBM:GetModLocalization(\"Baltharus\")\n\nL:SetGeneralLocalization({\n\tname = \"Baltharus the Warborn\"\n})\n\nL:SetWarningLocalization({\n\tWarningSplitSoon\t= \"Split soon\"\n})\n\nL:SetOptionLocalization({\n\tWarningSplitSoon\t= \"Show pre-warning for Split\"\n})\n\n-------------------------\n--  Saviana Ragefire  --\n-------------------------\nL = DBM:GetModLocalization(\"Saviana\")\n\nL:SetGeneralLocalization({\n\tname = \"Saviana Ragefire\"\n})\n\n--------------------------\n--  General Zarithrian  --\n--------------------------\nL = DBM:GetModLocalization(\"Zarithrian\")\n\nL:SetGeneralLocalization({\n\tname = \"General Zarithrian\"\n})\n\nL:SetWarningLocalization({\n\tWarnAdds\t= \"New adds\",\n\twarnCleaveArmor\t= \"%s on >%s< (%s)\"\t\t-- Cleave Armor on >args.destName< (args.amount)\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t= \"New adds\",\n\tAddsArrive\t= \"Adds arrive in\"\n})\n\nL:SetOptionLocalization({\n\tWarnAdds\t\t= \"Announce new adds\",\n\tTimerAdds\t\t= \"Show timer for new adds\",\n\tAddsArrive\t\t= \"Show timer for adds arrival\",\n\tCancelBuff\t\t= \"Remove $spell:10278 and $spell:642 if used to remove $spell:74367\",\n\twarnCleaveArmor\t= DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS.spell:format(74367)\n})\n\nL:SetMiscLocalization({\n\tSummonMinions\t= \"Turn them to ash, minions!\"\n})\n\n-------------------------------------\n--  Halion the Twilight Destroyer  --\n-------------------------------------\nL = DBM:GetModLocalization(\"Halion\")\n\nL:SetGeneralLocalization({\n\tname = \"Halion the Twilight Destroyer\"\n})\n\nL:SetWarningLocalization({\n\tTwilightCutterCast\t= \"Casting Twilight Cutter: 5 sec\"\n})\n\nL:SetTimerLocalization({\n\tTimerCutterSpawn\t= \"Twilight Cutter beam\"\n})\n\nL:SetOptionLocalization({\n\tTwilightCutterCast\t\t= \"Show warning when $spell:74769 is being cast\",\n\tAnnounceAlternatePhase\t= \"Show warnings/timers for phase you aren't in as well\",\n\tSetIconOnConsumption\t= \"Set icons on $spell:74562 or $spell:74792 targets\",--So we can use single functions for both versions of spell.\n\tTimerCutterSpawn\t\t= \"Show timer until next $spell:74769 is beamed (disables Next and Cast timers)\"\n})\n\nL:SetMiscLocalization({\n\tHalion\t\t\t\t\t= \"Halion\",\n\tPhysicalRealm\t\t\t= \"Physical Realm\",\n\tMeteorCast\t\t\t\t= \"The heavens burn!\",\n\tPhase2\t\t\t\t\t= \"You will find only suffering within the realm of twilight! Enter if you dare!\",\n\tPhase3\t\t\t\t\t= \"I am the light and the darkness! Cower, mortals, before the herald of Deathwing!\",\n\ttwilightcutter\t\t\t= \"Beware the shadow!\", --\"The orbiting spheres pulse with dark energy!\". Can't use this since on Warmane it triggers twice, 5s prior and on cutter.\n\tKill\t\t\t\t\t= \"Relish this victory, mortals, for it will be your last. This world will burn with the master's return!\"\n})\n"
  },
  {
    "path": "DBM-ChamberOfAspects/localization.es.lua",
    "content": "﻿if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\n\nlocal L\n\n---------------------------\n-- El Sagrario Obsidiana --\n---------------------------\n-------------\n-- Shadron --\n-------------\nL = DBM:GetModLocalization(\"Shadron\")\n\nL:SetGeneralLocalization({\n\tname = \"Shadron\"\n})\n\nL:SetMiscLocalization({\n\tYellShadronPull\t= \"¡No temo a nada! ¡Y menos a vosotros!\", -- esES\n--\tYellShadronPull\t= \"¡A nada le temo! ¡Y menos a ti!\", -- esMX\n})\n\n--------------\n-- Tenebron --\n--------------\nL = DBM:GetModLocalization(\"Tenebron\")\n\nL:SetGeneralLocalization({\n\tname = \"Tenebron\"\n})\n\nL:SetMiscLocalization({\n\tYellTenebronPull\t= \"¡No tenéis cabida aquí! ¡Vuestro lugar está... entre... los fallecidos!\", -- esES\n--\tYellTenebronPull\t= \"¡No tienes cabida aquí! ¡Sino entre... los difuntos!\", -- esMX\n})\n\n--------------\n-- Vesperon --\n--------------\nL = DBM:GetModLocalization(\"Vesperon\")\n\nL:SetGeneralLocalization({\n\tname = \"Vesperon\"\n})\n\nL:SetMiscLocalization({\n\tYellVesperonPull\t= \"¡No suponéis una amenaza, seres inferiores! ¡A ver qué valéis!\", -- esES\n--\tYellVesperonPull\t= \"¡No representan ninguna amenaza, seres inferiores! ¡Demuestren su poderío!\", -- esMX\n})\n\n----------------\n-- Sartharion --\n----------------\nL = DBM:GetModLocalization(\"Sartharion\")\n\nL:SetGeneralLocalization({\n\tname = \"Sartharion\"\n})\n\nL:SetWarningLocalization({\n\tWarningTenebron\t\t\t= \"Tenebron se aproxima\",\n\tWarningShadron\t\t\t= \"Shadron se aproxima\",\n\tWarningVesperon\t\t\t= \"Vesperon se aproxima\",\n\tWarningFireWall\t\t\t= \"¡Muro de Fuego!\",\n\tWarningWhelpsSoon\t\t= \"Crías de Tenebron pronto\",\n\tWarningPortalSoon\t\t= \"Portal de Shadron pronto\",\n\tWarningReflectSoon\t\t= \"Vesperon Reflexiona pronto\",\n\tWarningVesperonPortal\t= \"¡Portal de Vesperon!\",\n\tWarningTenebronPortal\t= \"¡Portal de Tenebron!\",\n\tWarningShadronPortal\t= \"¡Portal de Shadron!\"\n})\n\nL:SetTimerLocalization({\n\tTimerTenebron\t\t\t= \"Tenebron llega\",\n\tTimerShadron\t\t\t= \"Shadron llega\",\n\tTimerVesperon\t\t\t= \"Vesperon llega\",\n\tTimerTenebronWhelps\t\t= \"Crías de Tenebron\",\n\tTimerShadronPortal\t\t= \"Portal de Shadron\",\n\tTimerVesperonPortal\t\t= \"Portal Vesperon\",\n\tTimerVesperonPortal2\t= \"Portal Vesperon 2\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceFails\t\t\t= \"Anunciar jugadores que reciban daño de $spell:57491 y $spell:57579 en el chat de banda (requiere líder o ayudante)\",\n\tTimerTenebron\t\t\t= \"Mostrar temporizador para la llegada de Tenebron\",\n\tTimerShadron\t\t\t= \"Mostrar temporizador para la llegada de Shadron\",\n\tTimerVesperon\t\t\t= \"Mostrar temporizador para la llegada de Vesperon\",\n\tTimerTenebronWhelps\t\t= \"Mostrar temporizador para crías de Tenebrón\",\n\tTimerShadronPortal\t\t= \"Mostrar temporizador para Shadron Portal\",\n\tTimerVesperonPortal\t\t= \"Mostrar temporizador para Vesperon Portal\",\n\tTimerVesperonPortal2\t= \"Mostrar temporizador para Vesperon Portal 2\",\n\tWarningFireWall\t\t\t= \"Mostrar aviso especial para $spell:57491\",\n\tWarningTenebron\t\t\t= \"Anunciar cuando Tenebron se aproxime\",\n\tWarningShadron\t\t\t= \"Anunciar cuando Shadron se aproxime\",\n\tWarningVesperon\t\t\t= \"Anunciar cuando Vesperon se aproxime\",\n\tWarningWhelpsSoon\t\t= \"Anunciar pronto crías de Tenebrón\",\n\tWarningPortalSoon\t\t= \"Anunciar Shadron Portal pronto\",\n\tWarningReflectSoon\t\t= \"Anunciar Vesperon Reflect pronto\",\n\tWarningTenebronPortal\t= \"Mostrar aviso especial cuando aparezca el portal de Tenebron\",\n\tWarningShadronPortal\t= \"Mostrar aviso especial cuando aparezca el portal de Shadron\",\n\tWarningVesperonPortal\t= \"Mostrar aviso especial cuando aparezca el portal de Vesperon\"\n})\n\nL:SetMiscLocalization({\n\tYellSarthPull\t= \"Mi tarea es cuidar de estos huevos. ¡Arderéis antes de hacerles el más mínimo daño!\", -- esES\n--\tYellSarthPull\t= \"Mi tarea es cuidar de estos huevos. ¡Te carbonizaré antes que le causes algún daño!\", -- esMX\n\tWall\t\t\t= \"¡La lava se arremolina alrededor de %s!\",\n\tPortal\t\t\t= \"%s comienza a abrir un Portal Crepuscular\",\n\tNameTenebron\t= \"Tenebron\",\n\tNameShadron\t\t= \"Shadron\",\n\tNameVesperon\t= \"Vesperon\",\n\tFireWallOn\t\t= \"Tsunami de llamas: %s\",\n\tVoidZoneOn\t\t= \"Fisura de las Sombras: %s\",\n\tVoidZones\t\t= \"Fallos en Fisura de las Sombras (en este intento): %s\",\n\tFireWalls\t\t= \"Fallos en Tsunami de llamas (en este intento): %s\"\n})\n\n----------------------\n-- El Sagrario Rubí --\n----------------------\n-----------------------------\n-- Baltharus el Batallante --\n-----------------------------\nL = DBM:GetModLocalization(\"Baltharus\")\n\nL:SetGeneralLocalization({\n\tname = \"Baltharus el Batallante\"\n})\n\nL:SetWarningLocalization({\n\tWarningSplitSoon\t= \"Separación en breve\"\n})\n\nL:SetOptionLocalization({\n\tWarningSplitSoon\t= \"Mostrar aviso previo para la separación de banda\"\n})\n\n-------------------------\n--  Saviana Ragefire  --\n-------------------------\nL = DBM:GetModLocalization(\"Saviana\")\n\nL:SetGeneralLocalization({\n\tname = \"Saviana Furia Ardiente\"\n})\n\n------------------------\n-- General Zarithrian --\n------------------------\nL = DBM:GetModLocalization(\"Zarithrian\")\n\nL:SetGeneralLocalization({\n\tname = \"General Zarithrian\"\n})\n\nL:SetWarningLocalization({\n\tWarnAdds\t= \"Ónices clamallamas\",\n\twarnCleaveArmor\t= \"%s en >%s< (%s)\"\t\t-- Cleave Armor on >args.destName< (args.amount)\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t= \"Siguientes Ónices clamallamas\",\n\tAddsArrive\t= \"Adds llegan en\"\n})\n\nL:SetOptionLocalization({\n\tWarnAdds\t\t= \"Anunciar cuando aparezcan Ónices clamallamas\",\n\tTimerAdds\t\t= \"Mostrar temporizador para los siguientes Ónices clamallamas\",\n\tCancelBuff\t\t= \"Eliminar $spell:10278 y $spell:642 si se usa para eliminar $spell:74367\",\n\tAddsArrive\t\t= \"Mostrar temporizador para a llegada de adds\", --Needs Translating\n})\n\nL:SetMiscLocalization({\n\tSummonMinions\t= \"¡Reducidlos a cenizas, esbirros!\"\n})\n\n------------\n-- Halion --\n------------\nL = DBM:GetModLocalization(\"Halion\")\n\nL:SetGeneralLocalization({\n\tname = \"Halion el Destructor Crepuscular\"\n})\n\nL:SetWarningLocalization({\n\tTwilightCutterCast\t= \"Lanzando Corte Crepuscular en 5 s\"\n})\n\nL:SetOptionLocalization({\n\tTwilightCutterCast\t\t= \"Mostrar aviso cuando se esté lanzando $spell:74769\",\n\tAnnounceAlternatePhase\t= \"Mostrar avisos y temporizadores que no pertenezcan a tu fase actual\",\n\tSetIconOnConsumption\t= \"Poner iconos en los objetivos de $spell:74562 y $spell:74792\"--So we can use single functions for both versions of spell.\n})\n\nL:SetMiscLocalization({\n\tHalion\t\t\t\t\t= \"Halion\",\n\tPhysicalRealm\t\t\t= \"Reino físico\",\n\tMeteorCast\t\t\t\t= \"¡Los cielos arden!\",\n\tPhase2\t\t\t\t\t= \"En el reino del crepúsculo solo encontraréis sufrimiento. ¡Entrad si os atrevéis!\",\n\tPhase3\t\t\t\t\t= \"¡Yo soy la luz y la oscuridad! ¡Temed, mortales, la llegada de Alamuerte!\",\n\ttwilightcutter\t\t\t= \"¡Temed la sombra!\", -- ¡Las esferas que orbitan emiten energía oscura!\", -- Can't use this since on Warmane it triggers twice, 5s prior and on cutter.\n\tKill\t\t\t\t\t= \"Disfrutad la victoria, mortales, porque será la última. ¡Este mundo arderá cuando vuelva el maestro!\"\n})\n"
  },
  {
    "path": "DBM-ChamberOfAspects/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\n\nlocal L\n\n----------------------------\n--  The Obsidian Sanctum  --\n----------------------------\n--  Shadron  --\n---------------\nL = DBM:GetModLocalization(\"Shadron\")\n\nL:SetGeneralLocalization({\n\tname = \"Obscuron\"\n})\n\nL:SetMiscLocalization({\n\tYellShadronPull\t= \"Je n'ai peur de rien ! Et surtout pas de vous !\",\n})\n\n----------------\n--  Tenebron  --\n----------------\nL = DBM:GetModLocalization(\"Tenebron\")\n\nL:SetGeneralLocalization({\n\tname = \"Ténébron\"\n})\n\nL:SetMiscLocalization({\n\tYellTenebronPull\t= \"Vous n'avez pas votre place ici ! Votre place... est parmi les disparus !\",\n})\n\n----------------\n--  Vesperon  --\n----------------\nL = DBM:GetModLocalization(\"Vesperon\")\n\nL:SetGeneralLocalization({\n\tname = \"Vespéron\"\n})\n\nL:SetMiscLocalization({\n\tYellVesperonPull\t= \"Vous n'êtes pas une menace, êtres inférieurs ! Faites de votre mieux !\",\n})\n\n------------------\n--  Sartharion  --\n------------------\nL = DBM:GetModLocalization(\"Sartharion\")\n\nL:SetGeneralLocalization({\n\tname = \"Sartharion\"\n})\n\nL:SetWarningLocalization({\n\tWarningTenebron\t\t\t= \"Ténébron Arrive\",\n\tWarningShadron\t\t\t= \"Obscuron Arrive\",\n\tWarningVesperon\t\t\t= \"Vespéron Arrive\",\n\tWarningFireWall\t\t\t= \"Tsunami de flammes !\",\n\tWarningWhelpsSoon\t\t= \"Bientôt des petits de Tenebron\",\n\tWarningPortalSoon\t\t= \"Bientôt le portail de Shadron\",\n\tWarningReflectSoon\t\t= \"Vesperon Réfléchir bientôt\",\n\tWarningVesperonPortal\t= \"Portail de Vespéron\",\n\tWarningTenebronPortal\t= \"Portail de Ténébron\",\n\tWarningShadronPortal\t= \"Portail d'Obscuron\"\n})\n\nL:SetTimerLocalization({\n\tTimerTenebron\t\t\t= \"Ténébron Arrive\",\n\tTimerShadron\t\t\t= \"Obscuron Arrive\",\n\tTimerVesperon\t\t\t= \"Vespéron Arrive\",\n\tTimerTenebronWhelps\t\t= \"Dragonnets de Ténébron\",\n\tTimerShadronPortal\t\t= \"Portail Shadron\",\n\tTimerVesperonPortal\t\t= \"Portail Vesperon\",\n\tTimerVesperonPortal2\t= \"Portail Vesperon 2\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceFails\t\t\t= \"Affiche les joueurs qui n'ont pas évité les zones de vide / Tsunamis de flammes (Nécessite l'activation des annonces et être promu ou leader)\",\n\tTimerTenebron\t\t\t= \"Montre le timer pour Ténébron\",\n\tTimerShadron\t\t\t= \"Montre le timer pour Obscuron\",\n\tTimerVesperon\t\t\t= \"Montre le timer pour Vespéron\",\n\tTimerTenebronWhelps\t\t= \"Montrer la minuterie pour les dragonnets Tenebron\",\n\tTimerShadronPortal\t\t= \"Afficher la minuterie pour le portail Shadron\",\n\tTimerVesperonPortal\t\t= \"Montrer la minuterie pour Vesperon Portal\",\n\tTimerVesperonPortal2\t= \"Montrer la minuterie pour Vesperon Portal 2\",\n\tWarningFireWall\t\t\t= \"Montre une alerte spéciale pour les Tsunamis de flammes\",\n\tWarningTenebron\t\t\t= \"Montre le timer avant que Ténébron arrive\",\n\tWarningShadron\t\t\t= \"Montre le timer avant qu'Obscuron arrive\",\n\tWarningVesperon\t\t\t= \"Montre le timer avant que Vespéron arrive\",\n\tWarningWhelpsSoon\t\t= \"Annoncer les dragonnets Tenebron bientôt\",\n\tWarningPortalSoon\t\t= \"Annoncer le portail Shadron bientôt\",\n\tWarningReflectSoon\t\t= \"Annonce Vesperon Reflect bientôt\",\n\tWarningTenebronPortal\t= \"Montre une alerte spéciale pour les portails de Ténébron\",\n\tWarningShadronPortal\t= \"Montre une alerte spéciale pour les portails d'Obscuron\",\n\tWarningVesperonPortal\t= \"Montre une alerte spéciale pour les portails de Vespéron\"\n})\n\nL:SetMiscLocalization({\n\tYellSarthPull\t= \"Ces œufs sont sous ma responsabilité. Je vous ferai brûler avant de vous laisser y toucher !\",\n\tWall\t\t\t= \"lave qui entoure\",\n\tPortal\t\t\t= \"commence à incanter un portail\",\n\tNameTenebron\t= \"Ténébron\",\n\tNameShadron\t\t= \"Obscuron\",\n\tNameVesperon\t= \"Vespéron\",\n\tFireWallOn\t\t= \"Tsunamis de flammes: %s\",\n\tVoidZoneOn\t\t= \"Zone de vide : %s\",\n\tVoidZones\t\t= \"Zones de vide ratées (cet essai): %s\",\n\tFireWalls\t\t= \"Tsunamis de flammes ratés (cet essai): %s\"\n})\n\n------------------------\n--  The Ruby Sanctum  --\n------------------------\n--  Baltharus the Warborn  --\n-----------------------------\nL = DBM:GetModLocalization(\"Baltharus\")\n\nL:SetGeneralLocalization({\n\tname = \"Baltharus l'Enfant de la guerre\"\n})\n\nL:SetWarningLocalization({\n\tWarningSplitSoon\t= \"Split soon\"\n})\n\nL:SetOptionLocalization({\n\tWarningSplitSoon\t= \"Show pre-warning for Split\"\n})\n\n-------------------------\n--  Saviana Ragefire  --\n-------------------------\nL = DBM:GetModLocalization(\"Saviana\")\n\nL:SetGeneralLocalization({\n\tname = \"Saviana Ragefeu\"\n})\n\n--------------------------\n--  General Zarithrian  --\n--------------------------\nL = DBM:GetModLocalization(\"Zarithrian\")\n\nL:SetGeneralLocalization({\n\tname = \"Général Zarithrian\"\n})\n\nL:SetWarningLocalization({\n\tWarnAdds\t= \"New adds\",\n\twarnCleaveArmor\t= \"%s on >%s< (%s)\"\t\t-- Cleave Armor on >args.destName< (args.amount)\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t= \"New adds\",\n\tAddsArrive\t= \"Adds arrivent dans\"\n})\n\nL:SetOptionLocalization({\n\tWarnAdds\t\t= \"Announce new adds\",\n\tTimerAdds\t\t= \"Show timer for new adds\",\n\tCancelBuff\t\t= \"Supprimer $spell:10278 et $spell:642 s'il est utilisé pour supprimer $spell:74367\",\n\tAddsArrive\t\t= \"Show timer for adds arrival\", --Needs Translating\n\twarnCleaveArmor\t= DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS.spell:format(74367, GetSpellInfo(74367) or \"unknown\")\n})\n\nL:SetMiscLocalization({\n\tSummonMinions\t= \"Serviteurs, réduisez-les en cendres !\"\n})\n\n-------------------------------------\n--  Halion the Twilight Destroyer  --\n-------------------------------------\nL = DBM:GetModLocalization(\"Halion\")\n\nL:SetGeneralLocalization({\n\tname = \"Halion le destructeur du Crépuscule\"\n})\n\nL:SetWarningLocalization({\n\tTwilightCutterCast\t= \"Casting Twilight Cutter: 5 sec\"\n})\n\nL:SetOptionLocalization({\n\tTwilightCutterCast\t\t= \"Show warning when $spell:77844 is being cast\",\n\tAnnounceAlternatePhase\t= \"Show warnings/timers for phase you aren't in as well\",\n\tSetIconOnConsumption\t= \"Set icons on $spell:74562 or $spell:74792 targets\"--So we can use single functions for both versions of spell.\n})\n\nL:SetMiscLocalization({\n\tHalion\t\t\t\t\t= \"Halion\",\n\tPhysicalRealm\t\t\t= \"Royaume matériel\",\n\tMeteorCast\t\t\t\t= \"Les cieux s'embrasent !\",\n\tPhase2\t\t\t\t\t= \"Vous ne trouverez que souffrance au royaume du crépuscule ! Entrez si vous l'osez !\",\n\tPhase3\t\t\t\t\t= \"Je suis la lumière et l'ombre ! Tremblez, mortels, devant le héraut d'Aile-de-mort !\",\n\ttwilightcutter\t\t\t= \"Méfiez-vous de l'ombre !\", --\"Les sphères volantes rayonnent d'énergie noire !\", -- Can't use this since on Warmane it triggers twice, 5s prior and on cutter.\n\tKill\t\t\t\t\t= \"Relish this victory, mortals, for it will be your last. This world will burn with the master's return!\"--needs translation\n})\n"
  },
  {
    "path": "DBM-ChamberOfAspects/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\n\nlocal L\n\n----------------------------\n--  The Obsidian Sanctum  --\n----------------------------\n--   샤드론  --\n---------------\nL = DBM:GetModLocalization(\"Shadron\")\n\nL:SetGeneralLocalization({\n\tname = \"샤드론\"\n})\n\nL:SetMiscLocalization({\n\tYellShadronPull\t= \"난 두렵지 않다! 특히 너희 같은 것들은!\",\n})\n\n---------------\n--  테네브론  --\n---------------\nL = DBM:GetModLocalization(\"Tenebron\")\n\nL:SetGeneralLocalization({\n\tname = \"테네브론\"\n})\n\nL:SetMiscLocalization({\n\tYellTenebronPull\t= \"여기에 너희 자리는 없다! 네놈들이 가야 할 곳은... 바로 저승이다!\",\n})\n\n---------------\n--  베스페론  --\n---------------\nL = DBM:GetModLocalization(\"Vesperon\")\n\nL:SetGeneralLocalization({\n\tname = \"베스페론\"\n})\n\nL:SetMiscLocalization({\n\tYellVesperonPull\t= \"네놈들 따위 겁낼 줄 아느냐... 비천한 것들! 어디 한번 덤벼봐라!\",\n})\n\n---------------\n--  살타리온  --\n---------------\nL = DBM:GetModLocalization(\"Sartharion\")\n\nL:SetGeneralLocalization({\n\tname = \"살타리온\"\n})\n\nL:SetWarningLocalization({\n\tWarningTenebron\t\t\t= \"테네브론 진입\",\n\tWarningShadron\t\t\t= \"샤드론 진입\",\n\tWarningVesperon\t\t\t= \"베스페론 진입\",\n\tWarningFireWall\t\t\t= \"화염의 벽!\",\n\tWarningWhelpsSoon\t\t= \"테네브론 새끼용 순\",\n\tWarningPortalSoon\t\t= \"곧 샤드론 차원문\",\n\tWarningReflectSoon\t\t= \"베스페론 은 곧 반영\",\n\tWarningVesperonPortal\t= \"베스페론의 차원문 생성!!\",\n\tWarningTenebronPortal\t= \"테네브론의 차원문 생성!!\",\n\tWarningShadronPortal\t= \"샤드론의 차원문 생성!!\"\n})\n\nL:SetTimerLocalization({\n\tTimerTenebron\t\t\t= \"테네브론 진입\",\n\tTimerShadron\t\t\t= \"샤드론 진입\",\n\tTimerVesperon\t\t\t= \"베스페론 진입\",\n\tTimerTenebronWhelps\t\t= \"테네브론 새끼용\",\n\tTimerShadronPortal\t\t= \"샤드론 차원문\",\n\tTimerVesperonPortal\t\t= \"베스페론 포털\",\n\tTimerVesperonPortal2\t= \"베스페론 포털 2\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceFails\t\t\t= \"화염의 벽 및 어둠의 균열을 피하지 못한 공대원을 대화창에 알리기(승급 권한 필요)\",\n\tTimerTenebron\t\t\t= \"테네브론 진입 바 보기\",\n\tTimerShadron\t\t\t= \"샤드론 진입 바 보기\",\n\tTimerVesperon\t\t\t= \"베스페론 진입 바 보기\",\n\tTimerTenebronWhelps\t\t= \"테네브론 새끼용의 타이머 표시\",\n\tTimerShadronPortal\t\t= \"샤드론 차원문의 타이머 표시\",\n\tTimerVesperonPortal\t\t= \"베스페론 포털의 타이머 표시\",\n\tTimerVesperonPortal2\t= \"베스페론 포털 2의 타이머 표시\",\n\tWarningFireWall\t\t\t= \"화염의 벽 특수 경고 보기\",\n\tWarningTenebron\t\t\t= \"테네브론 진입 알림\",\n\tWarningShadron\t\t\t= \"샤드론 진입 알림\",\n\tWarningVesperon\t\t\t= \"베스페론 진입 알림\",\n\tWarningWhelpsSoon\t\t= \"곧 테네브론 새끼용 발표\",\n\tWarningPortalSoon\t\t= \"곧 샤드론 차원문 발표\",\n\tWarningReflectSoon\t\t= \"곧 베스페론 리플렉트 발표\",\n\tWarningTenebronPortal\t= \"테네브론의 차원문 특수 경고 보기\",\n\tWarningShadronPortal\t= \"샤드론의 차원문 특수 경고 보기\",\n\tWarningVesperonPortal\t= \"베스페론의 차원문 특수 경고 보기\"\n})\n\nL:SetMiscLocalization({\n\tYellSarthPull\t= \"내 임무는 알을 보호하는 것. 알에 손대지 못하게 모두 불태워 주마.\",\n\tWall\t\t\t= \"둘러싼 용암이 끓어오릅니다!\",\n\tPortal\t\t\t= \"황혼의 차원문을 엽니다!!\",\n\tNameTenebron\t= \"테네브론\",\n\tNameShadron\t\t= \"샤드론\",\n\tNameVesperon\t= \"베스페론\",\n\tFireWallOn\t\t= \"용암 파도 : %s\",\n\tVoidZoneOn\t\t= \"어둠의 균열 : %s\",\n\tVoidZones\t\t= \"어둠의 균열 실패(현재 시도): %s\",\n\tFireWalls\t\t= \"용암 파도 실패(현재 시도): %s\"\n})\n\n------------------------\n--  The Ruby Sanctum  --\n------------------------\n--  Baltharus the Warborn  --\n-----------------------------\nL = DBM:GetModLocalization(\"Baltharus\")\n\nL:SetGeneralLocalization({\n\tname = \"전쟁의 아들 발타루스\"\n})\n\nL:SetWarningLocalization({\n\tWarningSplitSoon\t= \"곧 분리\"\n})\n\nL:SetOptionLocalization({\n\tWarningSplitSoon\t= \"분리 이전에 알림 보기\"\n})\n\n-------------------------\n--  Saviana Ragefire  --\n-------------------------\nL = DBM:GetModLocalization(\"Saviana\")\n\nL:SetGeneralLocalization({\n\tname = \"사비아나 레이지파이어\"\n})\n\n--------------------------\n--  General Zarithrian  --\n--------------------------\nL = DBM:GetModLocalization(\"Zarithrian\")\n\nL:SetGeneralLocalization({\n\tname = \"장군 자리스리안\"\n})\n\nL:SetWarningLocalization({\n\tWarnAdds\t\t\t= \"지원 병력\",\n\twarnCleaveArmor\t\t= \"%s : >%s< (%s)\"\t-- Cleave Armor on >args.destName< (args.amount)\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t= \"다음 지원 병력\"\n})\n\nL:SetOptionLocalization({\n\tWarnAdds\t\t= \"지원 병력 알림 보기\",\n\tTimerAdds\t\t= \"다음 지원 병력 바 보기\",\n\tCancelBuff\t\t= \"$spell:74367 을 제거하는 데 사용되는 경우 $spell:10278 및 $spell:642 를 제거합니다.\",\n\tAddsArrive\t\t= \"Show timer for adds arrival\", --Needs Translating\n})\n\nL:SetMiscLocalization({\n\tSummonMinions\t= \"저놈들을 재로 만들어버려라!\"\n})\n\n-------------------------------------\n--  Halion the Twilight Destroyer  --\n-------------------------------------\nL = DBM:GetModLocalization(\"Halion\")\n\nL:SetGeneralLocalization({\n\tname = \"황혼의 파괴자 할리온\"\n})\n\nL:SetWarningLocalization({\n\tTwilightCutterCast\t= \"주문시전 황혼 절단기 : 5 초\"\n})\n\nL:SetOptionLocalization({\n\tTwilightCutterCast\t\t= \"$spell:74769 시전 알림 보기\",\n\tAnnounceAlternatePhase\t= \"다른 위상 우두머리 알림/바 보기\",\n\tSetIconOnConsumption\t= \"$spell:74562 또는 $spell:74792 대상에게 전술 목표 아이콘 설정\"\n})\n\nL:SetMiscLocalization({\n\tHalion\t\t\t\t\t= \"할리온\",\n\tPhysicalRealm\t\t\t= \"물리 영역\",\n\tMeteorCast\t\t\t\t= \"하늘이 타오른다!\",\n\tPhase2\t\t\t\t\t= \"황혼 세계에서는 고통만이 있으리라! 자신 있다면 들어와 봐라!\",\n\tPhase3\t\t\t\t\t= \"나는 빛이자 어둠이다! 필멸자들아, 데스윙의 사자 앞에 무릎 꿇어라!\",\n\ttwilightcutter\t\t\t= \"어둠을 경계하라!\", --\"주위를 회전하는 구슬들이 고동치며 어둠의 기운을 내뿜습니다!\", -- Can't use this since on Warmane it triggers twice, 5s prior and on cutter.\n\tKill\t\t\t\t\t= \"필멸자들아, 승리를 만끽해라. 그것이 마지막일 테니. 주인님이 돌아오시면 이 세상은 불타버리리라!\"\n})\n"
  },
  {
    "path": "DBM-ChamberOfAspects/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n----------------------------\n--  The Obsidian Sanctum  --\n----------------------------\n--  Shadron  --\n---------------\nL = DBM:GetModLocalization(\"Shadron\")\n\nL:SetGeneralLocalization({\n\tname = \"Шадрон\"\n})\n\nL:SetMiscLocalization({\n\tYellShadronPull\t= \"Я не боюсь ничего! Тем более – вас!\",\n})\n\n----------------\n--  Tenebron  --\n----------------\nL = DBM:GetModLocalization(\"Tenebron\")\n\nL:SetGeneralLocalization({\n\tname = \"Тенеброн\"\n})\n\nL:SetMiscLocalization({\n\tYellTenebronPull\t= \"Вам здесь не место! Ваше место среди усопших!\",\n})\n\n----------------\n--  Vesperon  --\n----------------\nL = DBM:GetModLocalization(\"Vesperon\")\n\nL:SetGeneralLocalization({\n\tname = \"Весперон\"\n})\n\nL:SetMiscLocalization({\n\tYellVesperonPull\t= \"Вы безобидны, ничтожные создания. Покажите, на что вы способны!\",\n})\n\n------------------\n--  Sartharion  --\n------------------\nL = DBM:GetModLocalization(\"Sartharion\")\n\nL:SetGeneralLocalization({\n\tname = \"Сартарион\"\n})\n\nL:SetWarningLocalization({\n\tWarningTenebron\t\t\t= \"Прибытие Тенеброна\",\n\tWarningShadron\t\t\t= \"Прибытие Шадрона\",\n\tWarningVesperon\t\t\t= \"Прибытие Весперона\",\n\tWarningFireWall\t\t\t= \"Огненная стена\",\n\tWarningWhelpsSoon\t\t= \"Скоро дракончики тенеброна\",\n\tWarningPortalSoon\t\t= \"Скоро портал Шадрон\",\n\tWarningReflectSoon\t\t= \"Весперон: Скоро отражение\",\n\tWarningVesperonPortal\t= \"Портал Весперона\",\n\tWarningTenebronPortal\t= \"Портал Тенеброна\",\n\tWarningShadronPortal\t= \"Портал Шадрона\"\n})\n\nL:SetTimerLocalization({\n\tTimerTenebron\t\t\t= \"Прибытие Тенеброна\",\n\tTimerShadron\t\t\t= \"Прибытие Шадрона\",\n\tTimerVesperon\t\t\t= \"Прибытие Весперона\",\n\tTimerTenebronWhelps\t\t= \"Тенебронские дракончики\",\n\tTimerShadronPortal\t\t= \"Портал Шадрона\",\n\tTimerVesperonPortal\t\t= \"Портал Весперона\",\n\tTimerVesperonPortal2\t= \"Портал Весперона 2\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceFails\t\t\t= \"Объявлять игроков, потерпевших неудачу в Огненной стене и Расщелине тьмы<br/>(требуются права лидера или помощника)\",\n\tTimerTenebron\t\t\t= \"Отсчет времени до прибытия Тенеброна\",\n\tTimerShadron\t\t\t= \"Отсчет времени до прибытия Шадрона\",\n\tTimerVesperon\t\t\t= \"Отсчет времени до прибытия Весперона\",\n\tTimerTenebronWhelps\t\t= \"Показать таймер для тенебронских дракончиков\",\n\tTimerShadronPortal\t\t= \"Показать таймер для портала Шадрона\",\n\tTimerVesperonPortal\t\t= \"Показать таймер для портала Весперон\",\n\tTimerVesperonPortal2\t= \"Показать таймер для портала Весперон 2\",\n\tWarningFireWall\t\t\t= \"Cпец-предупреждение для Огненной стены\",\n\tWarningTenebron\t\t\t= \"Объявлять прибытие Тенеброна\",\n\tWarningShadron\t\t\t= \"Объявлять прибытие Шадрона\",\n\tWarningVesperon\t\t\t= \"Объявлять прибытие Весперона\",\n\tWarningWhelpsSoon\t\t= \"Скоро анонсируйте тенебронских дракончиков\",\n\tWarningPortalSoon\t\t= \"Анонсируйте портал Шадрон в ближайшее время\",\n\tWarningReflectSoon\t\t= \"Анонсировать Весперон, размышлять в ближайшее время\",\n\tWarningTenebronPortal\t= \"Cпец-предупреждение для порталов Тенеброна\",\n\tWarningShadronPortal\t= \"Cпец-предупреждение для порталов Шадрона\",\n\tWarningVesperonPortal\t= \"Cпец-предупреждение для порталов Весперона\"\n})\n\nL:SetMiscLocalization({\n\tYellSarthPull\t= \"Моя обязанность – оберегать эти яйца, и вы сгорите, прежде чем хоть пальцем тронете их!\",\n\tWall\t\t\t= \"Лава вокруг %s начинает бурлить!\",\n\tPortal\t\t\t= \"%s открывает сумрачный портал!\",\n\tNameTenebron\t= \"Тенеброн\",\n\tNameShadron\t\t= \"Шадрон\",\n\tNameVesperon\t= \"Весперон\",\n\tFireWallOn\t\t= \"Огненная стена: %s\",\n\tVoidZoneOn\t\t= \"Расщелина тьмы: %s\",\n\tVoidZones\t\t= \"Потерпели неудачу в Расщелине тьмы (за эту попытку): %s\",\n\tFireWalls\t\t= \"Потерпели неудачу в Огненной стене (за эту попытку): %s\"\n})\n\n------------------------\n--  The Ruby Sanctum  --\n------------------------\n--  Baltharus the Warborn  --\n-----------------------------\nL = DBM:GetModLocalization(\"Baltharus\")\n\nL:SetGeneralLocalization({\n\tname = \"Балтар Рожденный в Битве\"\n})\n\nL:SetWarningLocalization({\n\tWarningSplitSoon\t= \"Скоро разделение\"\n})\n\nL:SetOptionLocalization({\n\tWarningSplitSoon\t= \"Предупреждать заранее о разделении\"\n})\n\n-------------------------\n--  Saviana Ragefire  --\n-------------------------\nL = DBM:GetModLocalization(\"Saviana\")\n\nL:SetGeneralLocalization({\n\tname = \"Савиана Огненная Пропасть\"\n})\n\n--------------------------\n--  General Zarithrian  --\n--------------------------\nL = DBM:GetModLocalization(\"Zarithrian\")\n\nL:SetGeneralLocalization({\n\tname = \"Генерал Заритриан\"\n})\n\nL:SetWarningLocalization({\n\tWarnAdds\t= \"Новые помощники\",\n\twarnCleaveArmor\t= \"%s на |3-5(>%s<) (%s)\"\t\t-- Cleave Armor on >args.destName< (args.amount)\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t= \"Новые помощники\",\n\tAddsArrive\t= \"Прибытие помощников\"\n})\n\nL:SetOptionLocalization({\n\tWarnAdds\t\t= \"Объявлять новых помощников\",\n\tTimerAdds\t\t= \"Отсчет времени до новых помощников\",\n\tCancelBuff\t\t= \"Удалить $spell:10278 и $spell:642, если используется для удаления $spell:74367\",\n\tAddsArrive\t\t= \"Отсчет времени до прибытия помощников\"\n})\n\nL:SetMiscLocalization({\n\tSummonMinions\t= \"Слуги! Обратите их в пепел!\"\n})\n\n-------------------------------------\n--  Halion the Twilight Destroyer  --\n-------------------------------------\nL = DBM:GetModLocalization(\"Halion\")\n\nL:SetGeneralLocalization({\n\tname = \"Халион Сумеречный Разрушитель\"\n})\n\nL:SetWarningLocalization({\n\tTwilightCutterCast\t= \"Применение заклинания Лезвие сумерек: 5 сек\"\n})\n\nL:SetOptionLocalization({\n\tTwilightCutterCast\t\t= \"Предупреждать о применении заклинания $spell:77844\",\n\tAnnounceAlternatePhase\t= \"Показывать предупреждения и таймеры для обоих миров\",\n\tSetIconOnConsumption\t= \"Устанавливать метки на цели заклинаний $spell:74562 или $spell:74792\"--So we can use single functions for both versions of spell.\n})\n\nL:SetMiscLocalization({\n\tHalion\t\t\t\t\t= \"Халион\",\n\tPhysicalRealm\t\t\t= \"Реальный мир\",\n\tMeteorCast\t\t\t\t= \"Небеса в огне!\",\n\tPhase2\t\t\t\t\t= \"В мире сумерек вы найдете лишь страдания! Входите, если посмеете!\",\n\tPhase3\t\t\t\t\t= \"Я есть свет и я есть тьма! Трепещите, ничтожные, перед посланником Смертокрыла!\",\n\ttwilightcutter\t\t\t= \"Остерегайтесь теней!\", --\"Во вращающихся сферах пульсирует темная энергия!\",\n\tKill\t\t\t\t\t= \"Это ваша последняя победа. Насладитесь сполна ее вкусом. Ибо когда вернется мой господин, этот мир сгинет в огне!\"\n})\n"
  },
  {
    "path": "DBM-ChamberOfAspects/localization.tw.lua",
    "content": "﻿if GetLocale() ~= \"zhTW\" then return end\n\nlocal L\n\n----------------------------\n--  The Obsidian Sanctum  --\n----------------------------\n--  Shadron  --\n---------------\nL = DBM:GetModLocalization(\"Shadron\")\n\nL:SetGeneralLocalization({\n\tname = \"夏德朗\"\n})\n\nL:SetMiscLocalization({\n\tYellShadronPull\t= \"我無所畏懼!你們根本不值一提!\",\n})\n\n----------------\n--  Tenebron  --\n----------------\nL = DBM:GetModLocalization(\"Tenebron\")\n\nL:SetGeneralLocalization({\n\tname = \"坦納伯朗\"\n})\n\nL:SetMiscLocalization({\n\tYellTenebronPull\t= \"你們沒資格來這裡!你們的歸宿...在死者的國度!\",\n})\n\n----------------\n--  Vesperon  --\n----------------\nL = DBM:GetModLocalization(\"Vesperon\")\n\nL:SetGeneralLocalization({\n\tname = \"維斯佩朗\"\n})\n\nL:SetMiscLocalization({\n\tYellVesperonPull\t= \"你們這些下等生物根本無法對我構成任何威脅!使出全力戰鬥吧!\",\n})\n\n------------------\n--  Sartharion  --\n------------------\nL = DBM:GetModLocalization(\"Sartharion\")\n\nL:SetGeneralLocalization({\n\tname = \"『黑曜守護者』撒爾薩里安\"\n})\n\nL:SetWarningLocalization({\n\tWarningTenebron\t\t\t= \"坦納伯朗到來\",\n\tWarningShadron\t\t\t= \"夏德朗到來\",\n\tWarningVesperon\t\t\t= \"維斯佩朗到來\",\n\tWarningFireWall\t\t\t= \"火焰障壁\",\n\tWarningWhelpsSoon\t\t= \"鐵粉幼崽 很快\",\n\tWarningPortalSoon\t\t= \"莎德龍傳送門很快\",\n\tWarningReflectSoon\t\t= \"維斯佩朗 反映很快\",\n\tWarningVesperonPortal\t= \"維斯佩朗的傳送門\",\n\tWarningTenebronPortal\t= \"坦納伯朗的傳送門\",\n\tWarningShadronPortal\t= \"夏德朗的傳送門\"\n})\n\nL:SetTimerLocalization({\n\tTimerTenebron\t\t\t= \"坦納伯朗到來\",\n\tTimerShadron\t\t\t= \"夏德朗到來\",\n\tTimerVesperon\t\t\t= \"維斯佩朗到來\",\n\tTimerTenebronWhelps\t\t= \"鐵粉幼崽\",\n\tTimerShadronPortal\t\t= \"沙龍傳送門\",\n\tTimerVesperonPortal\t\t= \"維斯佩朗 傳送門\",\n\tTimerVesperonPortal2\t= \"維斯佩朗 傳送門 2\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceFails\t\t\t= \"公佈踩中暗影裂縫和撞上火焰障壁的玩家到團隊頻道 (需要團隊隊長或助理權限)\",\n\tTimerTenebron\t\t\t= \"為坦納伯朗到來顯示計時器\",\n\tTimerShadron\t\t\t= \"為夏德朗到來顯示計時器\",\n\tTimerVesperon\t\t\t= \"為維斯佩朗到來顯示計時器\",\n\tTimerTenebronWhelps\t\t= \"顯示 鐵粉幼崽 的計時器\",\n\tTimerShadronPortal\t\t= \"顯示 沙龍傳送門 的計時器\",\n\tTimerVesperonPortal\t\t= \"顯示 維斯佩朗 傳送門 的計時器\",\n\tTimerVesperonPortal2\t= \"顯示 維斯佩朗 傳送門 2 的計時器\",\n\tWarningFireWall\t\t\t= \"為火焰障壁顯示特別警告\",\n\tWarningTenebron\t\t\t= \"提示坦納伯朗到來\",\n\tWarningShadron\t\t\t= \"提示夏德朗到來\",\n\tWarningVesperon\t\t\t= \"提示維斯佩朗到來\",\n\tWarningWhelpsSoon\t\t= \"很快宣布 鐵粉幼崽\",\n\tWarningPortalSoon\t\t= \"很快宣布沙龍傳送門\",\n\tWarningReflectSoon\t\t= \"宣布 維斯佩朗 反映很快\",\n\tWarningTenebronPortal\t= \"為坦納伯朗的傳送門顯示特別警告\",\n\tWarningShadronPortal\t= \"為夏德朗的傳送門顯示特別警告\",\n\tWarningVesperonPortal\t= \"為維斯佩朗的傳送門顯示特別警告\"\n})\n\nL:SetMiscLocalization({\n\tYellSarthPull\t= \"我的職責就是要看守這些龍蛋。在他們受到任何傷害之前，我將會看著你陷入火焰之中!\",\n\tWall\t\t\t= \"圍繞著%s的熔岩開始劇烈地翻騰!\",\n\tPortal\t\t\t= \"%s開始開啟暮光傳送門!\",\n\tNameTenebron\t= \"坦納伯朗\",\n\tNameShadron\t\t= \"夏德朗\",\n\tNameVesperon\t= \"維斯佩朗\",\n\tFireWallOn\t\t= \"火焰障壁: %s\",\n\tVoidZoneOn\t\t= \"暗影裂縫: %s\",\n\tVoidZones\t\t= \"踩中暗影裂縫(這一次): %s\",\n\tFireWalls\t\t= \"撞上火焰障壁(這一次): %s\"\n})\n\n------------------------\n--  The Ruby Sanctum  --\n------------------------\n--  Baltharus the Warborn  --\n-----------------------------\nL = DBM:GetModLocalization(\"Baltharus\")\n\nL:SetGeneralLocalization({\n\tname = \"『戰爭之子』巴爾薩魯斯\"\n})\n\nL:SetWarningLocalization({\n\tWarningSplitSoon\t= \"分裂即將到來\"\n})\n\nL:SetOptionLocalization({\n\tWarningSplitSoon\t= \"為分裂顯示預先警告\"\n})\n\n-------------------------\n--  Saviana Ragefire  --\n-------------------------\nL = DBM:GetModLocalization(\"Saviana\")\n\nL:SetGeneralLocalization({\n\tname = \"薩薇安娜‧怒焰\"\n})\n\n--------------------------\n--  General Zarithrian  --\n--------------------------\nL = DBM:GetModLocalization(\"Zarithrian\")\n\nL:SetGeneralLocalization({\n\tname = \"扎里斯利安將軍\"\n})\n\nL:SetWarningLocalization({\n\tWarnAdds\t\t= \"新的小怪\",\n\twarnCleaveArmor\t= \">%1$s<中了%2$s(%s)\"\t-- Cleave Armor on >args.destName< (args.amount)\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t\t= \"新的小怪\"\n})\n\nL:SetOptionLocalization({\n\tWarnAdds\t\t= \"提示新的小怪\",\n\tTimerAdds\t\t= \"為新的小怪顯示計時器\",\n\tCancelBuff\t\t= \"刪除 $spell:10278 和 $spell:642 如果用於刪除 $spell:74367\",\n\tAddsArrive\t\t= \"Show timer for adds arrival\" --Needs Translating\n})\n\nL:SetMiscLocalization({\n\tSummonMinions\t= \"去吧，將他們挫骨揚灰！\"\n})\n\n-------------------------------------\n--  Halion the Twilight Destroyer  --\n-------------------------------------\nL = DBM:GetModLocalization(\"Halion\")\n\nL:SetGeneralLocalization({\n\tname = \"海萊恩\"\n})\n\nL:SetWarningLocalization({\n\tTwilightCutterCast\t= \"施放暮光切割: 5秒後\"\n})\n\nL:SetOptionLocalization({\n\tTwilightCutterCast\t\t= \"當$spell:77844開始施放時顯示警告\",\n\tAnnounceAlternatePhase\t= \"不管你進不進下一階段一樣顯示警告/計時器\",\n\tSetIconOnConsumption\t= \"為$spell:74562或$spell:74792的目標設置標記\"--So we can use single functions for both versions of spell.\n})\n\nL:SetMiscLocalization({\n\tHalion\t\t\t\t\t= \"物理 海萊恩\",\n\tPhysicalRealm\t\t\t= \"現實之域\",\n\tMeteorCast\t\t\t\t= \"天堂也將燃燒!\",\n\tPhase2\t\t\t\t\t= \"在暮光的國度只有磨難在等著你!有膽量的話就進去吧!\",\n\tPhase3\t\t\t\t\t= \"我是光明亦是黑暗!凡人，匍匐在死亡之翼的信使面前吧!\",\n\ttwilightcutter\t\t\t= \"暗影無所不在!\", --\"這些環繞的球體散發著黑暗能量!\", -- Can't use this since on Warmane it triggers twice, 5s prior and on cutter.\n\tKill\t\t\t\t\t= \"享受這場勝利吧，凡人們，因為這是你們最後一次的勝利。這世界將會在主人回歸時化為火海!\"\n})\n"
  },
  {
    "path": "DBM-Coliseum/Anub'arak.lua",
    "content": "local mod\t= DBM:NewMod(\"Anub'arak_Coliseum\", \"DBM-Coliseum\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal CancelUnitBuff = CancelUnitBuff\nlocal GetSpellInfo = GetSpellInfo\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(34564)\nmod:SetEncounterID(645)\nmod:SetUsedIcons(1, 2, 3, 4, 5, 8)\nmod:SetMinSyncRevision(20220909000000)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 66118 67630 68646 68647 66134\",\n\t\"SPELL_CAST_SUCCESS 66012\",\n\t\"SPELL_AURA_APPLIED 67574 66013 67700 68509 68510 66012 10278\",\n\t\"SPELL_AURA_REFRESH 67574 66013 67700 68509 68510 66012\",\n\t\"SPELL_AURA_REMOVED 66013 67700 68509 68510 10278\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1\"\n)\n\n-- General\nlocal enrageTimer\t\t\t= mod:NewBerserkTimer(570)\n\n-- Stage One: Emerge\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1)..\": \"..GetSpellInfo(65982))\nlocal warnEmerge\t\t\t= mod:NewAnnounce(\"WarnEmerge\", 3, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\", nil, nil, nil, 65982)\nlocal warnEmergeSoon\t\t= mod:NewAnnounce(\"WarnEmergeSoon\", 1, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\", nil, nil, nil, 65982)\nlocal warnAdds\t\t\t\t= mod:NewAnnounce(\"warnAdds\", 3, 45419, nil, nil, nil, 66332)\nlocal preWarnShadowStrike\t= mod:NewSoonAnnounce(66134, 3)\nlocal warnShadowStrike\t\t= mod:NewSpellAnnounce(66134, 4)\nlocal warnFreezingSlash\t\t= mod:NewTargetNoFilterAnnounce(66012, 2, nil, \"Tank|Healer\")\n\nlocal specWarnShadowStrike\t= mod:NewSpecialWarningSpell(66134, \"Tank\", nil, 2, 1) --Don't have a good voice for this. Need a \"stun mob now\"\nlocal specWarnPCold\t\t\t= mod:NewSpecialWarningYou(66013, false, nil, nil, 1, 2)\n\nlocal timerEmerge\t\t\t= mod:NewNextTimer(65, 65982, nil, nil, nil, 6, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\", DBM_COMMON_L.IMPORTANT_ICON, nil, 1) -- Time to Emerge, related to Phase 2, but it's here for better Grouping\nlocal timerAdds\t\t\t\t= mod:NewNextTimer(45, 66332, nil, nil, nil, 1, 45419, DBM_COMMON_L.TANK_ICON) -- (25H Lordaeron 2022/09/03) - Stage 1/45.1, Stage 2/24.9, Stage 1/65.0, 10.0/75.0/99.9, 45.0, Stage 3/1.9, 43.1/45.0, 45.0\nlocal timerShadowStrike\t\t= mod:NewNextTimer(30, 66134, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON, nil, 3)\nlocal timerFreezingSlash\t= mod:NewNextTimer(20, 66012, nil, \"Tank|Healer\", nil, 5, nil, DBM_COMMON_L.TANK_ICON) -- (25H Lordaeron 2022/09/03) - Stage 1/20.0, 20.0, 20.0, Stage 2/4.9, Stage 1/65.0, 15.1/80.1/85.0, 20.0, 20.1, Stage 3/1.8, 18.2/20.0, 20.0, 20.0, 20.0\nlocal timerPCold\t\t\t= mod:NewBuffActiveTimer(15, 66013, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON)\n\nmod:AddSetIconOption(\"SetIconsOnPCold\", 66013, true, 7, {1, 2, 3, 4, 5})\nmod:AddBoolOption(\"AnnouncePColdIcons\", false, nil, nil, nil, nil, 66013)\nmod:AddBoolOption(\"AnnouncePColdIconsRemoved\", false, nil, nil, nil, nil, 66013)\n\nmod:GroupSpells(66332, 66134) -- Nerubian Burrower, Shadow Strike\n\n-- Stage Two: Submerge Anub'Arak\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2)..\": \"..GetSpellInfo(65981))\nlocal warnSubmerge\t\t\t= mod:NewAnnounce(\"WarnSubmerge\", 3, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendBurrow.blp\", nil, nil, nil, 65981)\nlocal warnSubmergeSoon\t\t= mod:NewAnnounce(\"WarnSubmergeSoon\", 2, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendBurrow.blp\", nil, nil, nil, 65981)\nlocal warnPursue\t\t\t= mod:NewTargetNoFilterAnnounce(67574, 4)\nlocal warnHoP\t\t\t\t= mod:NewTargetNoFilterAnnounce(10278, 2, nil, false) --Heroic strat revolves around kiting pursue and using Hand of Protection.\n\nlocal specWarnPursue\t\t= mod:NewSpecialWarningRun(67574, nil, nil, 2, 4, 2)\n\nlocal timerSubmerge\t\t\t= mod:NewNextTimer(80, 65981, nil, nil, nil, 6, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendBurrow.blp\", DBM_COMMON_L.IMPORTANT_ICON, nil, 1) -- Time to Submerge, related to Phase 1, but it's here for better Grouping\nlocal timerHoP\t\t\t\t= mod:NewBuffActiveTimer(10, 10278, nil, nil, nil, 5) --So we will track bops to make this easier.\n\nmod:AddSetIconOption(\"PursueIcon\", 67574, true, 0, {8})\n\n-- Stage Three: Leeching Swarm\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(3)..\": \"..GetSpellInfo(66118))\nlocal warnPhase3\t\t\t= mod:NewPhaseAnnounce(3, nil, 66118)\n\nmod:AddBoolOption(\"RemoveHealthBuffsInP3\", false, nil, nil, nil, nil, 66118)\n\nmod.vb.Burrowed = false\n\n--\"<40.90 19:45:27> [UNIT_SPELLCAST_SUCCEEDED] Anub'arak -Nerubian Burrower- [[boss1:Nerubian Burrower::0:]]\", -- [1059]\n--[[disabling adds scheduling since we have proper event for this\nlocal function Adds(self)\n\tif self:IsInCombat() then\n\t\tif not self.vb.Burrowed then\n\t\t\ttimerAdds:Start()\n\t\t\twarnAdds:Schedule(45)\n\t\t\tself:Schedule(45, Adds, self)\n\t\tend\n\tend\nend]]\n\nlocal function ShadowStrike(self)\n\tself:Unschedule(ShadowStrike)\n\tif self:IsInCombat() then\n\t\ttimerShadowStrike:Cancel()\n\t\ttimerShadowStrike:Start()\n\t\tpreWarnShadowStrike:Cancel()\n\t\tpreWarnShadowStrike:Schedule(25.5)\n\t\tself:Schedule(30, ShadowStrike, self)\n\tend\nend\n\n-- Warmane workaround, since emerge boss emote is not being fired\nlocal function EmergeFix(self)\n\tself:SetStage(1)\n\tself.vb.Burrowed = false\n\ttimerEmerge:Cancel()\n\ttimerAdds:Start(5)\n--\twarnAdds:Schedule(5)\n--\tself:Schedule(5, Adds, self)\n\twarnEmerge:Show()\n\twarnSubmergeSoon:Schedule(70)\n\ttimerSubmerge:Start()\n\tif self:IsHeroic() then\n\t\tShadowStrike(self)\n\tend\nend\n\nfunction mod:AnnouncePcoldIcons(uId, icon)\n\tif self.Options.AnnouncePColdIcons and DBM:IsInGroup() and DBM:GetRaidRank() > 1 then\n\t\tSendChatMessage(L.PcoldIconSet:format(icon, DBM:GetUnitFullName(uId)), DBM:IsInRaid() and \"RAID\" or \"PARTY\")\n\tend\nend\n\nfunction mod:RemoveBuffs() -- Remove HP buffs for p3\n\tCancelUnitBuff(\"player\", (GetSpellInfo(47440)))\t\t-- Commanding Shout\n\tCancelUnitBuff(\"player\", (GetSpellInfo(48161)))\t\t-- Power Word: Fortitude\n\tCancelUnitBuff(\"player\", (GetSpellInfo(48162)))\t\t-- Prayer of Fortitude\n\tCancelUnitBuff(\"player\", (GetSpellInfo(72590)))\t\t-- Runescroll of Fortitude\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tself.vb.Burrowed = false\n\ttimerAdds:Start(10-delay) -- (25H Lordaeron 2022/09/03) - pull:10.0\n--\twarnAdds:Schedule(10-delay)\n--\tself:Schedule(10-delay, Adds, self)\n\twarnSubmergeSoon:Schedule(70-delay)\n\ttimerSubmerge:Start(-delay) -- EMOTE 2s earlier than Submerge Anub'arak unit cast. (25H Lordaeron 2022/09/03) - pull:79.9\n\tenrageTimer:Start(-delay)\n\ttimerFreezingSlash:Start(15-delay) -- (25H Lordaeron 2022/09/03) - pull:15.0\n\tif self:IsHeroic() then\n\t\ttimerShadowStrike:Start()\n\t\tpreWarnShadowStrike:Schedule(25.5-delay)\n\t\tself:Schedule(30-delay, ShadowStrike, self)\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(66118, 67630, 68646, 68647) then\t\t\t-- Swarm (start p3)\n\t\tself:SetStage(3)\n\t\twarnPhase3:Show()\n\t\twarnEmergeSoon:Cancel()\n\t\twarnSubmergeSoon:Cancel()\n\t\ttimerEmerge:Stop()\n\t\ttimerSubmerge:Stop()\n\t\tif self:IsNormal() then\n\t\t\ttimerAdds:Cancel()\n--\t\t\twarnAdds:Cancel()\n--\t\t\tself:Unschedule(Adds)\n\t\tend\n\t\tif self.Options.RemoveHealthBuffsInP3 then\n\t\t\tmod:ScheduleMethod(0.1, \"RemoveBuffs\")\n\t\tend\n\telseif args.spellId == 66134 and self:IsHeroic() and self:AntiSpam(2, 1) then\t-- Shadow Strike\n\t\tself:Unschedule(ShadowStrike)\n\t\tShadowStrike(self)\n\t\tif self.Options.SpecWarn66134spell then\n\t\t\tspecWarnShadowStrike:Show()\n\t\telse\n\t\t\twarnShadowStrike:Show()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 66012 then\t\t\t\t\t\t\t-- Freezing Slash (caught one log where AURA_APPLIED was not present in one of the casts, so start timer on cast success instead)\n\t\ttimerFreezingSlash:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 67574 then\t\t\t-- Pursue\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnPursue:Show()\n\t\t\tspecWarnPursue:Play(\"justrun\")\n\t\t\tspecWarnPursue:ScheduleVoice(1.5, \"keepmove\")\n\t\telse\n\t\t\twarnPursue:Show(args.destName)\n\t\tend\n\t\tif self.Options.PursueIcon then\n\t\t\tself:SetIcon(args.destName, 8, 15)\n\t\tend\n\telseif args:IsSpellID(66013, 67700, 68509, 68510) then\t\t-- Penetrating Cold\n\t\ttimerPCold:Show()\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnPCold:Show()\n\t\t\tspecWarnPCold:Play(\"targetyou\")\n\t\tend\n\t\tif self.Options.SetIconsOnPCold then\n\t\t\tlocal maxIcon = self:IsDifficulty(\"normal25\", \"heroic25\") and 5 or 2\n\t\t\tself:SetSortedIcon(\"roster\", 1, args.destName, 1, maxIcon, false, \"AnnouncePcoldIcons\")\n\t\tend\n\telseif spellId == 66012 then\t\t\t\t\t\t\t-- Freezing Slash\n\t\twarnFreezingSlash:Show(args.destName)\n\telseif spellId == 10278 and self:IsInCombat() then\t\t-- Hand of Protection\n\t\twarnHoP:Show(args.destName)\n\t\ttimerHoP:Start(args.destName)\n\tend\nend\nmod.SPELL_AURA_REFRESH = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(66013, 67700, 68509, 68510) then\t\t\t-- Penetrating Cold\n\t\tif self.Options.SetIconsOnPCold then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\t\tif self.Options.AnnouncePColdIconsRemoved and DBM:GetRaidRank() > 1 then\n\t\t\t\tSendChatMessage(L.PcoldIconRemoved:format(args.destName), \"RAID\")\n\t\t\tend\n\t\tend\n\telseif args.spellId == 10278 and self:IsInCombat() then\t\t-- Hand of Protection\n\t\ttimerHoP:Cancel(args.destName)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg) -- Warmane workaround since submerge emote sometimes is not being fired\n\tif msg and msg == L.YellBurrow then\n\t\tself:SetStage(2)\n\t\tself.vb.Burrowed = true\n\t\ttimerAdds:Cancel()\n\t\twarnAdds:Cancel()\n\t\twarnSubmerge:Show()\n\t\twarnEmergeSoon:Schedule(58.5)\n\t\ttimerEmerge:Start()\n\t\ttimerFreezingSlash:Stop()\n\t\tif self:IsHeroic() then\n\t\t\tself:Unschedule(ShadowStrike)\n\t\t\ttimerShadowStrike:Cancel()\n\t\t\tpreWarnShadowStrike:Cancel()\n\t\tend\n\t\tself:Schedule(65, EmergeFix, self)\t-- Warmane workaround, since emerge boss emote is not being fired\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)\n\t-- if msg and msg:find(L.Burrow) then\n\t--\tself:SetStage(2)\n\t--\tself.vb.Burrowed = true\n\t--\ttimerAdds:Cancel()\n\t--\twarnAdds:Cancel()\n\t--\twarnSubmerge:Show()\n\t--\twarnEmergeSoon:Schedule(58.5)\n\t--\ttimerEmerge:Start()\n\t--\ttimerFreezingSlash:Stop()\n\t--\tself:Schedule(65, EmergeFix, self)\t-- Warmane workaround, since emerge boss emote is not being fired\n\tif msg and msg:find(L.Emerge) then\n\t\tself:Unschedule(EmergeFix)\t\t-- Warmane workaround: failsafe if script gets fixed eventually\n\t\tself:SetStage(1)\n\t\tself.vb.Burrowed = false\n\t\ttimerEmerge:Cancel()\n\t\ttimerAdds:Start(5)\n--\t\twarnAdds:Schedule(5)\n--\t\tself:Schedule(5, Adds, self)\n\t\twarnEmerge:Show()\n\t\twarnSubmergeSoon:Schedule(70)\n\t\ttimerSubmerge:Start()\n\t\tif self:IsHeroic() then\n\t\t\tShadowStrike(self)\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(66332) then -- Nerubian Borrower\n\t\twarnAdds:Show()\n\t\ttimerAdds:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Coliseum/Champions.lua",
    "content": "local mod\t= DBM:NewMod(\"Champions\", \"DBM-Coliseum\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal UnitGUID = UnitGUID\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(34458, 34451, 34459, 34448, 34449, 34445, 34456, 34447, 34441, 34454, 34444, 34455, 34450, 34453, 34461, 34460, 34469, 34467, 34468, 34471, 34465, 34466, 34473, 34472, 34470, 34463, 34474, 34475)\nmod:SetEncounterID(637)\nmod:SetMinSyncRevision(20220907000000)\n\nmod:RegisterCombat(\"combat\")\nmod:RegisterKill(\"yell\", L.AllianceVictory, L.HordeVictory)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 66017 68753 68754 68755 66020 68758 68757 68756 66115 66009 66008 66613 66007 66011 65793 65790 65816 68145 68146 68147 65820 68141 68139 68140 65947 65932 65931 66063 65983 65980 65544 65543 65545 65542 65860 66086 67974 67975 67976 66178 68759 68760 68761 65960 65961 66207 65880 65869\",\n\t\"SPELL_AURA_APPLIED 66010 65802 65801 65809 65927 65929 66054 65859 65857 65871 65878 65877\",\n\t\"SPELL_DAMAGE 65817 68142 68143 68144\",\n\t\"SPELL_MISSED 65817 68142 68143 68144\",\n\t\"UNIT_DIED\"\n)\n\nif UnitFactionGroup(\"player\") == \"Alliance\" then\n\t--mod:RegisterKill(\"yell\", L.AllianceVictory)\n\tmod:SetBossHealthInfo(\n\t-- Horde\n\t\t34458, L.Gorgrim,\n\t\t34451, L.Birana,\n\t\t34459, L.Erin,\n\t\t34448, L.Rujkah,\n\t\t34449, L.Ginselle,\n\t\t34445, L.Liandra,\n\t\t34456, L.Malithas,\n\t\t34447, L.Caiphus,\n\t\t34441, L.Vivienne,\n\t\t34454, L.Mazdinah,\n\t\t34444, L.Thrakgar,\n\t\t34455, L.Broln,\n\t\t34450, L.Harkzog,\n\t\t34453, L.Narrhok\n\t)\nelse\n\t--mod:RegisterKill(\"yell\", L.HordeVictory)\n\tmod:SetBossHealthInfo(\n\t-- Alliance\n\t\t34461, L.Tyrius,\n\t\t34460, L.Kavina,\n\t\t34469, L.Melador,\n\t\t34467, L.Alyssia,\n\t\t34468, L.Noozle,\n\t\t34471, L.Baelnor,\n\t\t34465, L.Velanaa,\n\t\t34466, L.Anthar,\n\t\t34473, L.Brienna,\n\t\t34472, L.Irieth,\n\t\t34470, L.Saamul,\n\t\t34463, L.Shaabad,\n\t\t34474, L.Serissa,\n\t\t34475, L.Shocuul\n\t)\nend\n\nlocal FACTION_ALLIANCE, FACTION_HORDE = FACTION_ALLIANCE, FACTION_HORDE\n\n-- Announce: 1 - target player with CC, 2 - target player no CC, 3 - target self (npc)\n-- Death Knight\nlocal warnChainsofIce\t\t= mod:NewTargetNoFilterAnnounce(66020, 2)\t\t-- 66020\nlocal warnDeathgrip\t\t\t= mod:NewTargetNoFilterAnnounce(66017, 2)\n-- Paladin\nlocal warnHandofFreedom\t\t= mod:NewTargetNoFilterAnnounce(66115, 2)\nlocal warnHandofProt\t\t= mod:NewTargetNoFilterAnnounce(66009, 3)\t\t-- 66009\nlocal warnHoJ\t\t\t\t= mod:NewTargetNoFilterAnnounce(66613, 1)\t\t-- 66613, 66607\nlocal warnRepentance\t\t= mod:NewTargetNoFilterAnnounce(66008, 1)\t\t-- 66008\nlocal warnDivineShield\t\t= mod:NewSpellAnnounce(66010, 3)\t\t\t\t-- 66010\nlocal warnAvengingWrath\t\t= mod:NewSpellAnnounce(66011, 3)\t\t\t\t-- 66011\n-- Mage\nlocal warnIceBlock\t\t\t= mod:NewSpellAnnounce(65802, 3)\t\t\t\t-- 65802\nlocal warnSheep\t\t\t\t= mod:NewTargetNoFilterAnnounce(65801, 1, nil, false)\nlocal warnBlink\t\t\t\t= mod:NewSpellAnnounce(65793, 3)\t\t\t\t-- 65793\nlocal warnCounterspell\t\t= mod:NewTargetNoFilterAnnounce(65790, 1)\t\t-- 65790\n-- Warlock\nlocal warnHellfire\t\t\t= mod:NewSpellAnnounce(65816, 4)\nlocal warnFear\t\t\t\t= mod:NewTargetNoFilterAnnounce(65809, 1)\t\t-- 65809\nlocal warnDeathCoil\t\t\t= mod:NewTargetNoFilterAnnounce(65820, 1)\t\t-- 65820\n-- Warrior\nlocal preWarnBladestorm\t\t= mod:NewSoonAnnounce(65947, 3)\nlocal warnBladestorm\t\t= mod:NewSpellAnnounce(65947, 4)\nlocal warnCharge\t\t\t= mod:NewTargetNoFilterAnnounce(65927, 2)\t\t-- 65927, 65929\nlocal warnRetaliation\t\t= mod:NewSpellAnnounce(65932, 3)\t\t\t\t-- 65932\nlocal warnIntimidatingShout\t= mod:NewSpellAnnounce(65931, 1)\t\t\t\t-- 65931\n-- Shaman\nlocal warnHeroism\t\t\t= mod:NewSpellAnnounce(65983, 3)\nlocal warnBloodlust\t\t\t= mod:NewSpellAnnounce(65980, 3)\nlocal warnEarthShield\t\t= mod:NewTargetNoFilterAnnounce(66063, 3)\t\t-- 66063\nlocal warnHex\t\t\t\t= mod:NewTargetNoFilterAnnounce(66054, 1)\t\t-- 66054\n-- Priest\nlocal warnDispersion\t\t= mod:NewSpellAnnounce(65544, 3)\t\t\t\t-- 65544\nlocal warnPsychicScream\t\t= mod:NewSpellAnnounce(65543, 1)\t\t\t\t-- 65543\nlocal warnPsychicHorror\t\t= mod:NewTargetNoFilterAnnounce(65545, 1)\t\t-- 65545\nlocal warnSilence\t\t\t= mod:NewTargetNoFilterAnnounce(65542, 1)\t\t-- 65542\n-- Druid\nlocal warnBarkskin\t\t\t= mod:NewSpellAnnounce(65860, 3)\t\t\t\t-- 65860\nlocal warnTranquility\t\t= mod:NewSpellAnnounce(66086, 4)\t\t\t\t-- 66086, 67976, 67975, 67974\nlocal warnEntanglingRoots\t= mod:NewTargetNoFilterAnnounce(65857, 1)\t\t-- 65857\nlocal warnCyclone\t\t\t= mod:NewTargetNoFilterAnnounce(65859, 1, nil, false)\n-- Rogue\nlocal warnShadowstep\t\t= mod:NewSpellAnnounce(66178, 2)\nlocal warnBlind\t\t\t\t= mod:NewTargetNoFilterAnnounce(65960, 1)\t\t-- 65960\nlocal warnCloakOfShadows\t= mod:NewSpellAnnounce(65961, 3)\t\t\t\t-- 65961\n-- Hunter\nlocal warnDeterrence\t\t= mod:NewSpellAnnounce(65871, 3)\t\t\t\t-- 65871\nlocal warnWingClip\t\t\t= mod:NewTargetNoFilterAnnounce(66207, 1)\t\t-- 66207\nlocal warnWyvernSting\t\t= mod:NewTargetNoFilterAnnounce(65878, 1)\t\t-- 65878, 65877\nlocal warnFrostTrap\t\t\t= mod:NewSpellAnnounce(65880, 3)\t\t\t\t-- 65880\nlocal warnDisengage\t\t\t= mod:NewSpellAnnounce(65869, 3)\t\t\t\t-- 65869\n\nlocal specWarnHellfire\t\t= mod:NewSpecialWarningGTFO(65816, nil, nil, nil, 1, 8)\nlocal specWarnHandofProt\t= mod:NewSpecialWarningDispel(66009, \"ImmunityDispeller\", nil, nil, 1, 2)\nlocal specWarnDivineShield\t= mod:NewSpecialWarningDispel(66010, \"ImmunityDispeller\", nil, nil, 1, 2)\nlocal specWarnIceBlock\t\t= mod:NewSpecialWarningDispel(65802, \"ImmunityDispeller\", nil, nil, 1, 2)\nlocal specWarnHandofFreedom\t= mod:NewSpecialWarningDispel(66115, \"MagicDispeller\", nil, nil, 1, 2)\nlocal specWarnTranquility\t= mod:NewSpecialWarningInterrupt(66086)\nlocal specWarnEarthShield\t= mod:NewSpecialWarningDispel(66063, \"MagicDispeller\")\nlocal specWarnAvengingWrath = mod:NewSpecialWarningDispel(66011, \"MagicDispeller\")\nlocal specWarnBloodlust\t\t= mod:NewSpecialWarningDispel(65980, \"MagicDispeller\", nil, nil, 1, 2)\nlocal specWarnHeroism\t\t= mod:NewSpecialWarningDispel(65983, \"MagicDispeller\", nil, nil, 1, 2)\n\n-- log timers for this fight are all over the place. I suspect it is due to CC, and thus, only fixes I will do are if debug catches early refreshes.\nlocal timerBladestorm\t\t= mod:NewBuffActiveTimer(8, 65947, nil, nil, nil, 2)\nlocal timerShadowstepCD\t\t= mod:NewCDTimer(30, 66178, nil, nil, nil, 3) -- (25H Lordaeron 2022/09/03) - pull:25.7\nlocal timerBlindCD\t\t\t= mod:NewCDTimer(120, 65960)\nlocal timerDeathgripCD\t\t= mod:NewCDTimer(20.7, 66017, nil, nil, nil, 3) -- REVIEW! High variance (25H Lordaeron 2022/09/03 || 25H Lordaeron 2022/10/12) - pull:22.9, 31.5, 45.1, 34.9, 24.2, 21.9, 31.1, 61.4, 43.9, 21.5 || pull:62.4, 20.7, 21.3, 41.0\nlocal timerBladestormCD\t\t= mod:NewCDTimer(90.1, 65947, nil, nil, nil, 2) -- (25H Lordaeron 2022/09/03) - pull:49.0, 90.1, 90.1\nlocal timerFrostTrapCD\t\t= mod:NewCDTimer(30, 65880) -- REVIEW! ~5s variance? (25H Lordaeron 2022/09/03 || 25H Lordaeron 2022/09/23-npc:34467 || 25N Lordaeron 2022/10/21-npc:34467) - pull:46.2, 31.8 || pull:22.7, 34.4, 31.6 || pull:47.3, 30.0, 31.8\nlocal timerDisengageCD\t\t= mod:NewCDTimer(30, 65869) -- REVIEW! variance? (25H Lordaeron 2022/09/03) - pull:32.6, 40.4\nlocal timerPsychicScreamCD\t= mod:NewCDTimer(30, 65543) -- variance (25H Lordaeron 2022/09/03) - pull:49.1, 30.0, 31.7, 30.1, 33.5, 31.3, 30.6, 44.0, 37.2, 31.0\nlocal timerBlinkCD\t\t\t= mod:NewCDTimer(15.1, 65793) -- REVIEW! High variance! diff script per npc? (25H Lordaeron 2022/09/03-npc:34449 || 25H Lordaeron 2022/09/23-npc:34468) - pull:21.1, 17.6, 135.2, 20.2, 44.0, 34.7, 27.3, 18.1, 20.6, 19.2 || pull:19.3, 15.1, 28.5, 15.1, 19.3, 21.2, 92.1, 19.3\nlocal timerHoJCD\t\t\t= mod:NewCDTimer(40, 66613) -- REVIEW! variance? (25H Lordaeron 2022/09/03) - pull:178.8\nlocal timerRepentanceCD\t\t= mod:NewCDTimer(60, 66008)\nlocal timerHoPCD\t\t\t= mod:NewCDTimer(300, 66009) -- REVIEW! variance? (25H Lordaeron 2022/09/03) - pull:32.5\nlocal timerSilenceCD\t\t= mod:NewCDTimer(45, 65542)\nlocal timerHeroismCD\t\t= mod:NewCDTimer(300, 65983)\nlocal timerBloodlustCD\t\t= mod:NewCDTimer(300, 65980) -- REVIEW! variance? (25H Lordaeron 2022/09/03) - pull:26.9\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\t-- Death Knight\n\tif args:IsSpellID(66017, 68753, 68754, 68755) and args:IsDestTypePlayer() then\t-- Death Grip\n\t\twarnDeathgrip:Show(args.destName)\n\t\ttimerDeathgripCD:Start()\n\telseif spellId == 66020 and args:IsDestTypePlayer() then\t-- Chains of Ice\n\t\twarnChainsofIce:Show(args.destName)\n\t-- Paladin\n\telseif args:IsSpellID(68758, 68757, 68756, 66115) and not args:IsDestTypePlayer() then\t-- Hand of Freedom\n\t\twarnHandofFreedom:Show(args.destName)\n\t\tspecWarnHandofFreedom:Show(args.destName)\n\t\tspecWarnHandofFreedom:Play(\"dispelboss\")\n\telseif spellId == 66009 then\t\t\t\t\t\t\t\t-- Hand of Protection\n\t\twarnHandofProt:Show(args.destName)\n\t\tspecWarnHandofProt:Show(args.destName)\n\t\tspecWarnHandofProt:Play(\"dispelboss\")\n\t\ttimerHoPCD:Start()\n\telseif spellId == 66008 then\t\t\t\t\t\t\t\t-- Repentance\n\t\twarnRepentance:Show(args.destName)\n\t\ttimerRepentanceCD:Start()\n\telseif args:IsSpellID(66613, 66007) then\t\t\t\t\t\t-- Hammer of Justice\n\t\twarnHoJ:Show(args.destName)\n\t\ttimerHoJCD:Start()\n\telseif spellId == 66011 then\t\t\t\t\t\t\t\t-- Avenging Wrath\n\t\twarnAvengingWrath:Show()\n\t\tspecWarnAvengingWrath:Show(args.sourceName)\n\t-- Mage\n\telseif spellId == 65793 then\t\t\t\t\t\t\t\t-- Blink\n\t\twarnBlink:Show()\n\t\ttimerBlinkCD:Start()\n\telseif spellId == 65790 then\t\t\t\t\t\t\t\t-- Counterspell\n\t\twarnCounterspell:Show(args.destName)\n\t-- Warlock\n\telseif args:IsSpellID(65816, 68145, 68146, 68147) then\t\t\t-- Hellfire\n\t\twarnHellfire:Show()\n\telseif args:IsSpellID(65820, 68141, 68139, 68140) then\t\t\t-- Death Coil\n\t\twarnDeathCoil:Show(args.destName)\n\t-- Warrior\n\telseif spellId == 65947 then\t\t\t\t\t\t\t\t-- Bladestorm\n\t\twarnBladestorm:Show()\n\t\ttimerBladestorm:Start()\n\t\ttimerBladestormCD:Start()\n\t\tpreWarnBladestorm:Schedule(85.1)\n\t\telseif spellId == 65932 then\t\t\t\t\t\t\t-- Retaliation\n\t\twarnRetaliation:Show()\n\telseif spellId == 65931 then\t\t\t\t\t\t\t\t-- Intimidating Shout\n\t\twarnIntimidatingShout:Show()\n\t-- Shaman\n\telseif spellId == 66063 then\t\t\t\t\t\t\t\t-- Earth Shield\n\t\twarnEarthShield:Show(args.destName)\n\t\tspecWarnEarthShield:Show(args.destName)\n\telseif spellId == 65983 then\n\t\twarnHeroism:Show()\n\t\tspecWarnHeroism:Show(FACTION_ALLIANCE)\n\t\tspecWarnHeroism:Play(\"dispelboss\")\n\t\ttimerHeroismCD:Start()\n\telseif spellId == 65980 then\n\t\twarnBloodlust:Show()\n\t\tspecWarnBloodlust:Show(FACTION_HORDE)\n\t\tspecWarnBloodlust:Play(\"dispelboss\")\n\t\ttimerBloodlustCD:Start()\n\t-- Priest\n\telseif spellId == 65544 then\t\t\t\t\t\t\t\t-- Dispersion\n\t\twarnDispersion:Show()\n\telseif spellId == 65543 then\t\t\t\t\t\t\t\t-- Psychic Scream\n\t\twarnPsychicScream:Show()\n\telseif spellId == 65545 then\t\t\t\t\t\t\t\t-- Psychic Horror\n\t\twarnPsychicHorror:Show(args.destName)\n\telseif spellId == 65542 then\t\t\t\t\t\t\t\t-- Silence\n\t\twarnSilence:Show(args.destName)\n\t\ttimerSilenceCD:Start()\n\t-- Druid\n\telseif spellId == 65860 then\t\t\t\t\t\t\t\t-- Barkskin\n\t\twarnBarkskin:Show()\n\telseif args:IsSpellID(66086, 67974, 67975, 67976) then\t\t\t-- Tranquility\n\t\twarnTranquility:Show()\n\t\tspecWarnTranquility:Show(args.sourceName)\n\t-- Rogue\n\telseif args:IsSpellID(66178, 68759, 68760, 68761) then\t\t\t-- Shadowstep\n\t\twarnShadowstep:Show()\n\t\tif self:IsDifficulty(\"heroic25\") then\n\t\t\ttimerShadowstepCD:Start(20)\n\t\telse\n\t\t\ttimerShadowstepCD:Start()\n\t\tend\n\telseif spellId == 65960 then\t\t\t\t\t\t\t\t-- Blind\n\t\twarnBlind:Show(args.destName)\n\t\ttimerBlindCD:Start()\n\telseif spellId == 65961 then\t\t\t\t\t\t\t\t-- Cloak of Shadows\n\t\twarnCloakOfShadows:Show()\n\t-- Hunter\n\telseif spellId == 66207 then\t\t\t\t\t\t\t\t-- Wing Clip\n\t\twarnWingClip:Show(args.destName)\n\telseif spellId == 65880 then\t\t\t\t\t\t\t\t-- Frost Trap\n\t\twarnFrostTrap:Show()\n\t\ttimerFrostTrapCD:Start()\n\telseif spellId == 65869 then\t\t\t\t\t\t\t\t-- Disengage\n\t\twarnDisengage:Show()\n\t\ttimerDisengageCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\t-- Death Knight\n\t-- Paladin\n\tif spellId == 66010 then\t\t\t\t\t\t\t\t\t-- Divine Shield\n\t\twarnDivineShield:Show()\n\t\tspecWarnDivineShield:Show(args.destName)\n\t\tspecWarnDivineShield:Play(\"dispelboss\")\n\t-- Mage\n\telseif spellId == 65802 then\t\t\t\t\t\t\t\t-- Ice Block\n\t\twarnIceBlock:Show()\n\t\tspecWarnIceBlock:Show(args.sourceName)\n\telseif spellId == 65801 and args:IsDestTypePlayer() then\t-- Polymorph\n\t\twarnSheep:Show(args.destName)\n\t-- Warlock\n\telseif spellId == 65809 then\t\t\t\t\t\t\t\t-- Fear\n\t\twarnFear:Show(args.destName)\n\t-- Warrior\n\telseif args:IsSpellID(65927, 65929) then\t\t\t\t\t\t-- Charge\n\t\twarnCharge:Show(args.destName)\n\t-- Shaman\n\telseif spellId == 66054 then\t\t\t\t\t\t\t\t-- Hex\n\t\twarnHex:Show(args.destName)\n\t-- Priest\n\t-- Druid\n\telseif spellId == 65859 and args:IsDestTypePlayer() then\t-- Cyclone\n\t\twarnCyclone:Show(args.destName)\n\telseif spellId == 65857 then\t\t\t\t\t\t\t\t-- Entangling Roots\n\t\twarnEntanglingRoots:Show(args.destName)\n\t-- Rogue\n\t-- Hunter\n\telseif spellId == 65871 then\t\t\t\t\t\t\t\t-- Deterrence\n\t\twarnDeterrence:Show()\n\telseif args:IsSpellID(65878, 65877) then\t\t\t\t\t\t-- Wyvern Sting\n\t\twarnWyvernSting:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, spellId, spellName)\n\tif (spellId == 65817 or spellId ==  68142 or spellId == 68143 or spellId == 68144) and destGUID == UnitGUID(\"player\") and self:AntiSpam() then\n\t\tspecWarnHellfire:Show(spellName)\n\t\tspecWarnHellfire:Play(\"watchfeet\")\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 34472 or cid == 34454 then -- Rogue\n\t\ttimerShadowstepCD:Cancel()\n\t\ttimerBlindCD:Cancel()\n\t\tDBM.BossHealth:RemoveBoss(34472)\n\t\tDBM.BossHealth:RemoveBoss(34454)\n\telseif cid == 34458 or cid == 34461 then -- DK\n\t\ttimerDeathgripCD:Cancel()\n\t\tDBM.BossHealth:RemoveBoss(34458)\n\t\tDBM.BossHealth:RemoveBoss(34461)\n\telseif cid == 34475 or cid == 34453 then -- Warrior\n\t\ttimerBladestormCD:Cancel()\n\t\tpreWarnBladestorm:Cancel()\n\t\tDBM.BossHealth:RemoveBoss(34475)\n\t\tDBM.BossHealth:RemoveBoss(34453)\n\telseif cid == 34460 or cid == 34451 then -- Balance Druid\n\t\tDBM.BossHealth:RemoveBoss(34460)\n\t\tDBM.BossHealth:RemoveBoss(34451)\n\telseif cid == 34469 or cid == 34459 then -- Resto Druid\n\t\tDBM.BossHealth:RemoveBoss(34469)\n\t\tDBM.BossHealth:RemoveBoss(34459)\n\telseif cid == 34467 or cid == 34448 then -- Hunter\n\t\ttimerFrostTrapCD:Cancel()\n\t\ttimerDisengageCD:Cancel()\n\t\tDBM.BossHealth:RemoveBoss(34467)\n\t\tDBM.BossHealth:RemoveBoss(34448)\n\telseif cid == 34468 or cid == 34449 then -- Mage\n\t\ttimerBlinkCD:Cancel()\n\t\tDBM.BossHealth:RemoveBoss(34468)\n\t\tDBM.BossHealth:RemoveBoss(34449)\n\telseif cid == 34465 or cid == 34445 then -- Holy Paladin\n\t\ttimerHoJCD:Cancel()\n\t\ttimerHoPCD:Cancel()\n\t\tDBM.BossHealth:RemoveBoss(34465)\n\t\tDBM.BossHealth:RemoveBoss(34445)\n\telseif cid == 34471 or cid == 34456 then -- Retri Paladin\n\t\ttimerHoJCD:Cancel()\n\t\ttimerRepentanceCD:Cancel()\n\t\ttimerHoPCD:Cancel()\n\t\tDBM.BossHealth:RemoveBoss(34471)\n\t\tDBM.BossHealth:RemoveBoss(34456)\n\telseif cid == 34466 or cid == 34447 then -- Disco Priest\n\t\ttimerPsychicScreamCD:Cancel()\n\t\tDBM.BossHealth:RemoveBoss(34466)\n\t\tDBM.BossHealth:RemoveBoss(34447)\n\telseif cid == 34473 or cid == 34441 then -- Shadow Priest\n\t\ttimerPsychicScreamCD:Cancel()\n\t\ttimerSilenceCD:Cancel()\n\t\tDBM.BossHealth:RemoveBoss(34473)\n\t\tDBM.BossHealth:RemoveBoss(34441)\n\telseif cid == 34463 or cid == 34455 then -- Enh Shaman\n\t\tif cid == 34463 then\n\t\t\ttimerHeroismCD:Cancel()\n\t\telse\n\t\t\ttimerBloodlustCD:Cancel()\n\t\tend\n\t\tDBM.BossHealth:RemoveBoss(34463)\n\t\tDBM.BossHealth:RemoveBoss(34455)\n\telseif cid == 34470 or cid == 34444 then -- Resto Shaman\n\t\tif cid == 34470 then\n\t\t\ttimerHeroismCD:Cancel()\n\t\telse\n\t\t\ttimerBloodlustCD:Cancel()\n\t\tend\n\t\tDBM.BossHealth:RemoveBoss(34470)\n\t\tDBM.BossHealth:RemoveBoss(34444)\n\telseif cid == 34474 or cid == 34450 then -- Warlock\n\t\tDBM.BossHealth:RemoveBoss(34474)\n\t\tDBM.BossHealth:RemoveBoss(34450)\n\tend\nend\n"
  },
  {
    "path": "DBM-Coliseum/DBM-Coliseum.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Crusaders' Coliseum|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0십자군의 시험장|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Kolosseum der Kreuzfahrer|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Колизей Авангарда|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0十字軍試煉|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0十字军的试炼|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Coliseo de los Cruzados|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Coliseo de los Cruzados|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Colisée des Croisés|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMColiseum_AllSavedVars\n## SavedVariablesPerCharacter: DBMColiseum_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Category: WOTLK\n## X-DBM-StatTypes: normal,normal25,heroic,heroic25\n## X-DBM-Mod-Name: Crusader's Coliseum\n## X-DBM-Mod-Name-koKR: 십자군의 시험장\n## X-DBM-Mod-Name-deDE: Kolosseum der Kreuzfahrer\n## X-DBM-Mod-Name-frFR: Colisée des Croisés\n## X-DBM-Mod-Name-ruRU: Колизей Авангарда\n## X-DBM-Mod-Name-zhTW: 十字軍試煉\n## X-DBM-Mod-Name-zhCN: 十字军的试炼\n## X-DBM-Mod-Name-esES: Coliseo de los Cruzados\n## X-DBM-Mod-Name-esMX: Coliseo de los Cruzados\n## X-DBM-Mod-Sort: 2\n## X-DBM-Mod-MapID: 544\n## X-DBM-Mod-LoadZone: Trial of the Crusader\n## X-DBM-Mod-LoadZone-koKR: 십자군의 시험장\n## X-DBM-Mod-LoadZone-deDE: Prüfung des Kreuzfahrers\n## X-DBM-Mod-LoadZone-frFR: L'épreuve du croisé\n## X-DBM-Mod-LoadZone-ruRU: Испытание крестоносца\n## X-DBM-Mod-LoadZone-zhTW: 十字軍試煉\n## X-DBM-Mod-LoadZone-zhCN: 十字军的试炼\n## X-DBM-Mod-LoadZone-esES: Prueba del Cruzado\n## X-DBM-Mod-LoadZone-esMX: Prueba del Cruzado\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.fr.lua\nlocalization.ru.lua\nlocalization.tw.lua\nlocalization.kr.lua\nlocalization.tw.lua\nlocalization.es.lua\nlocalization.cn.lua\nlocalization.mx.lua\n\nNorthrendBeasts.lua\nJaraxxus.lua\nChampions.lua\nTwins.lua\nAnub'arak.lua\n"
  },
  {
    "path": "DBM-Coliseum/Jaraxxus.lua",
    "content": "local mod\t= DBM:NewMod(\"Jaraxxus\", \"DBM-Coliseum\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(34780)\nmod:SetEncounterID(633)\n--mod:SetMinCombatTime(30)\nmod:SetUsedIcons(7, 8)\nmod:SetMinSyncRevision(20220907000000)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 66532 66963 66964 66965\",\n\t\"SPELL_CAST_SUCCESS 66228 67106 67107 67108 67901 67902 67903 66258 66269 67898 67899 67900 66197 68123 68124 68125 67051 67050 67049 66237 66528 67029 67030 67031\",\n\t\"SPELL_AURA_APPLIED 67051 67050 67049 66237 66197 68123 68124 68125 66334 67905 67906 67907 66532 66963 66964 66965\",\n\t\"SPELL_AURA_REMOVED 67051 67050 67049 66237 66197 68123 68124 68125\",\n\t\"SPELL_DAMAGE 66877 67070 67071 67072 66496 68716 68717 68718\",\n\t\"SPELL_MISSED 66877 67070 67071 67072 66496 68716 68717 68718\",\n\t\"SPELL_HEAL\",\n\t\"SPELL_PERIODIC_HEAL\"\n)\n\n--TODO, possibly just use args.amount from combatlog versus debuff scanning for flesh?\nlocal warnPortalSoon\t\t\t= mod:NewSoonAnnounce(66269, 3)\nlocal warnVolcanoSoon\t\t\t= mod:NewSoonAnnounce(66258, 3)\nlocal warnFlame\t\t\t\t\t= mod:NewTargetAnnounce(66197, 4)\nlocal warnFlesh\t\t\t\t\t= mod:NewTargetNoFilterAnnounce(66237, 4, nil, \"Healer\")\nlocal warnFelLightning\t\t\t= mod:NewSpellAnnounce(67031, 3, nil, false)\n\nlocal specWarnFlame\t\t\t\t= mod:NewSpecialWarningRun(66877, nil, nil, 2, 4, 2)\nlocal specWarnGTFO\t\t\t\t= mod:NewSpecialWarningGTFO(66877, nil, nil, 2, 1, 8)\nlocal specWarnFlesh\t\t\t\t= mod:NewSpecialWarningYou(66237, nil, nil, nil, 1, 2)\nlocal specWarnKiss\t\t\t\t= mod:NewSpecialWarningCast(66334, \"SpellCaster\", nil, 2, 1, 2)\nlocal specWarnNetherPower\t\t= mod:NewSpecialWarningDispel(67009, \"MagicDispeller\", nil, nil, 1, 2)\nlocal specWarnFelInferno\t\t= mod:NewSpecialWarningMove(66496, nil, nil, nil, 1, 2)\nlocal SpecWarnFelFireball\t\t= mod:NewSpecialWarningInterrupt(66532, \"HasInterrupt\", nil, 2, 1, 2)\nlocal SpecWarnFelFireballDispel\t= mod:NewSpecialWarningDispel(66532, \"RemoveMagic\", nil, 2, 1, 2)\n\nlocal timerCombatStart\t\t\t= mod:NewCombatTimer(76)--roleplay for first pull\nlocal timerFlame\t\t\t\t= mod:NewTargetTimer(8, 66197, nil, nil, nil, 3)--There are 8 debuff Ids. Since we detect first to warn, use an 8sec timer to cover duration of trigger spell and damage debuff.\nlocal timerFlameCD\t\t\t\t= mod:NewNextTimer(30, 66197, nil, nil, nil, 3) -- (25H Lordaeron 2022/09/03) - 30.0, 30.0, 30.1, 30.0, 30.1, 30.0\nlocal timerNetherPowerCD\t\t= mod:NewNextTimer(45, 67009, nil, \"MagicDispeller\", nil, 5, nil, DBM_COMMON_L.MAGIC_ICON) -- (25H Lordaeron 2022/09/03) - 45.1, 45.0, 45.0, 45.0\nlocal timerFlesh\t\t\t\t= mod:NewTargetTimer(12, 66237, nil, \"Healer\", 2, 5, nil, DBM_COMMON_L.HEALER_ICON)\nlocal timerFleshCD\t\t\t\t= mod:NewNextTimer(30, 66237, nil, \"Healer\", 2, 5, nil, DBM_COMMON_L.HEALER_ICON) -- (25H Lordaeron 2022/09/03) - 30.0, 30.0, 30.0, 30.1, 30.0, 30.0\nlocal timerPortalCD\t\t\t\t= mod:NewCDTimer(120, 66269, nil, nil, nil, 1, nil, nil, true) -- REVIEW! 7s variance? Added \"keep\" arg (25H Lordaeron 2022/09/03 || 25H Lordaeron 2022/09/24) - 120.0 || 127.0\nlocal timerVolcanoCD\t\t\t= mod:NewCDTimer(120, 66258, nil, nil, nil, 1) -- REVIEW! ~1s variance? (25H Lordaeron 2022/09/03 || 25H Lordaeron 2022/09/24) - 120.0 || 120.8\nlocal timerFelLightning\t\t\t= mod:NewCDTimer(10, 67031, nil, nil, nil, 3, nil, nil, true) -- 7s variance [10-17]. Added \"keep\" arg (25H Lordaeron 2022/09/24 || 10N Lordaeron 2022/10/02) - 15.0, 12.8, 16.3, 12.1, 17.0, 14.8, 11.4, 11.1, 13.7, 14.0, 12.9, 14.2, 10.1, 10.5, 11.7 || 11.5, 12.4, 14.6, 13.4, 13.1\n\nlocal enrageTimer\t\t\t\t= mod:NewBerserkTimer(600)\n\nmod:AddSetIconOption(\"LegionFlameIcon\", 66197, true, 0, {7})\nmod:AddSetIconOption(\"IncinerateFleshIcon\", 66237, true, 0, {8})\nmod:AddInfoFrameOption(66237, true)\nmod:RemoveOption(\"HealthFrame\")\nmod:AddBoolOption(\"IncinerateShieldFrame\", false, \"misc\")\n\nmod.vb.fleshCount = 0\nlocal incinerateFleshTargetName\n\nfunction mod:OnCombatStart(delay)\n\tif self.Options.IncinerateShieldFrame then\n\t\tDBM.BossHealth:Show(L.name)\n\t\tDBM.BossHealth:AddBoss(34780, L.name)\n\tend\n\tself.vb.fleshCount = 0\n\ttimerPortalCD:Start(22-delay) -- (25H Lordaeron 2022/09/03 || 25H Lordaeron 2022/09/24) - 22.0 || 22.0\n\twarnPortalSoon:Schedule(17-delay)\n\ttimerVolcanoCD:Start(82-delay) -- (25H Lordaeron 2022/09/03 || 25H Lordaeron 2022/09/24) - 82.0 || 89.0\n\twarnVolcanoSoon:Schedule(77-delay)\n\ttimerNetherPowerCD:Start(15-delay) -- (25H Lordaeron 2022/09/03) - 15.0\n\ttimerFleshCD:Start(13-delay) -- (25H Lordaeron 2022/09/03) - 13.0\n\ttimerFlameCD:Start(20-delay) -- (25H Lordaeron 2022/09/03) - 20.0\n\ttimerFelLightning:Start(-delay) -- (25H Lordaeron 2022/09/24 || 10N Lordaeron 2022/10/02) - 10.0 || 10.1\n\tenrageTimer:Start(-delay)\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.InfoFrame then\n\t\tDBM.InfoFrame:Hide()\n\tend\n\tDBM.BossHealth:Clear()\nend\n\nlocal setIncinerateTarget, clearIncinerateTarget, updateInfoFrame\nlocal diffMaxAbsorb = {heroic25 = 85000, heroic10 = 40000, normal25 = 60000, normal10 = 30000}\ndo\n\tlocal incinerateTarget\n\tlocal healed = 0\n\tlocal maxAbsorb = diffMaxAbsorb[DBM:GetCurrentInstanceDifficulty()] or 0\n\n\tlocal twipe = table.wipe\n\tlocal lines, sortedLines = {}, {}\n\tlocal function addLine(key, value)\n\t\t-- sort by insertion order\n\t\tlines[key] = value\n\t\tsortedLines[#sortedLines + 1] = key\n\tend\n\n\tlocal function getShieldHP()\n\t\treturn math.max(1, math.floor(healed / maxAbsorb * 100))\n\tend\n\n\tfunction mod:SPELL_HEAL(_, _, _, destGUID, _, _, _, _, _, _, _, absorbed)\n\t\tif destGUID == incinerateTarget then\n\t\t\thealed = healed + (absorbed or 0)\n\t\tend\n\tend\n\tmod.SPELL_PERIODIC_HEAL = mod.SPELL_HEAL\n\n\tfunction setIncinerateTarget(_, target, name)\n\t\tincinerateTarget = target\n\t\thealed = 0\n\t\tDBM.BossHealth:RemoveBoss(getShieldHP)\n\t\tDBM.BossHealth:AddBoss(getShieldHP, L.IncinerateTarget:format(name))\n\tend\n\n\tfunction clearIncinerateTarget(self, name)\n\t\tDBM.BossHealth:RemoveBoss(getShieldHP)\n\t\thealed = 0\n\t\tif self.Options.IncinerateFleshIcon then\n\t\t\tself:RemoveIcon(name)\n\t\tend\n\tend\n\tupdateInfoFrame = function()\n\t\ttwipe(lines)\n\t\ttwipe(sortedLines)\n\t\tif incinerateFleshTargetName then\n\t\t\taddLine(incinerateFleshTargetName, getShieldHP()..\"%\")\n\t\tend\n\t\treturn lines, sortedLines\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(66532, 66963, 66964, 66965) and self:CheckInterruptFilter(args.sourceGUID, false, true) then\t-- Fel Fireball (track cast for interupt, only when targeted)\n\t\tSpecWarnFelFireball:Show(args.sourceName)\n\t\tSpecWarnFelFireball:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(66228, 67106, 67107, 67108) then\t\t\t-- Nether Power\n\t\tspecWarnNetherPower:Show(args.sourceName)\n\t\tspecWarnNetherPower:Play(\"dispelboss\")\n\t\ttimerNetherPowerCD:Start()\n\telseif args:IsSpellID(67901, 67902, 67903, 66258) then\t\t-- Infernal Eruption\n\t\ttimerVolcanoCD:Start()\n\t\twarnVolcanoSoon:Schedule(110)\n\telseif args:IsSpellID(66269, 67898, 67899, 67900) then\t\t-- Nether Portal\n\t\ttimerPortalCD:Start()\n\t\twarnPortalSoon:Schedule(110)\n\telseif args:IsSpellID(66197, 68123, 68124, 68125) then\t\t-- Legion Flame\n\t\ttimerFlameCD:Start()\n\t\twarnFlame:Show(args.destName) -- I prefer to keep this here, rather than a player elseif on aura applied. Faster and unfiltered.\n\telseif args:IsSpellID(67051, 67050, 67049, 66237) then\t\t-- Incinerate Flesh\n\t\ttimerFleshCD:Start()\n\telseif args:IsSpellID(66528, 67029, 67030, 67031) then\t\t-- Fel Lightning\n\t\ttimerFelLightning:Start()\n\t\twarnFelLightning:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(67051, 67050, 67049, 66237) then\t\t\t-- Incinerate Flesh\n\t\tself.vb.fleshCount = self.vb.fleshCount + 1\n\t\ttimerFlesh:Start(args.destName)\n\t\tif self.Options.IncinerateFleshIcon then\n\t\t\tself:SetIcon(args.destName, 8, 15)\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnFlesh:Show()\n\t\t\tspecWarnFlesh:Play(\"targetyou\")\n\t\telse\n\t\t\twarnFlesh:Show(args.destName)\n\t\tend\n\t\tif self.Options.InfoFrame and not DBM.InfoFrame:IsShown() then\n\t\t\tincinerateFleshTargetName = args.destName\n\t\t\tDBM.InfoFrame:SetHeader(args.spellName)\n\t\t\tDBM.InfoFrame:Show(6, \"function\", updateInfoFrame, false, true)\n\t\tend\n\t\tsetIncinerateTarget(self, args.destGUID, args.destName)\n\telseif args:IsSpellID(66197, 68123, 68124, 68125) then\t\t-- Legion Flame ids 66199, 68126, 68127, 68128 (second debuff) do the actual damage. First 2 seconds are trigger debuff only.\n\t\ttimerFlame:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnFlame:Show()\n\t\t\tspecWarnFlame:Play(\"runout\")\n\t\t\tspecWarnFlame:ScheduleVoice(1.5, \"keepmove\")\n\t\tend\n\t\tif self.Options.LegionFlameIcon then\n\t\t\tself:SetIcon(args.destName, 7)\n\t\tend\n\telseif args:IsSpellID(66334, 67905, 67906, 67907) and args:IsPlayer() then\n\t\tspecWarnKiss:Show()\n\t\tspecWarnKiss:Play(\"stopcast\")\n\telseif args:IsSpellID(66532, 66963, 66964, 66965) then\t\t-- Fel Fireball (announce if tank gets debuff for dispel)\n\t\tSpecWarnFelFireballDispel:Show(args.destName)\n\t\tSpecWarnFelFireballDispel:Play(\"helpdispel\")\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(67051, 67050, 67049, 66237) then\t\t\t-- Incinerate Flesh\n\t\tself.vb.fleshCount = self.vb.fleshCount - 1\n\t\tif self.Options.InfoFrame and self.vb.fleshCount == 0 then\n\t\t\tDBM.InfoFrame:Hide()\n\t\tend\n\t\ttimerFlesh:Stop(args.destName)\n\t\tif self.Options.IncinerateFleshIcon then\n\t\t\tself:RemoveIcon(args.destName)\n\t\tend\n\t\tclearIncinerateTarget(self, args.destName)\n\telseif args:IsSpellID(66197, 68123, 68124, 68125) then\t\t-- Legion Flame ids 66199, 68126, 68127, 68128 (second debuff) do the actual damage. First 2 seconds are trigger debuff only.\n\t\ttimerFlame:Stop(args.destName)\n\t\tif self.Options.LegionFlameIcon then\n\t\t\tself:RemoveIcon(args.destName)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, spellId)\n\tif (spellId == 66877 or spellId == 67070 or spellId == 67071 or spellId == 67072) and destGUID == UnitGUID(\"player\") and self:AntiSpam(3, 1) then\t-- Legion Flame\n\t\tspecWarnGTFO:Show()\n\t\tspecWarnGTFO:Play(\"watchfeet\")\n\telseif (spellId == 66496 or spellId == 68716 or spellId == 68717 or spellId == 68718) and destGUID == UnitGUID(\"player\") and self:AntiSpam(3, 1) then\t-- Fel Inferno (does not make sense to fire watchfeet for radius AoE)\n\t\tspecWarnFelInferno:Show()\n\t\tspecWarnFelInferno:Play(\"runaway\")\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.FirstPull or msg:find(L.FirstPull) then\n\t\ttimerCombatStart:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Coliseum/NorthrendBeasts.lua",
    "content": "local mod\t= DBM:NewMod(\"NorthrendBeasts\", \"DBM-Coliseum\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal UnitExists, UnitGUID, UnitName = UnitExists, UnitGUID, UnitName\nlocal GetSpellInfo = GetSpellInfo\nlocal GetPlayerMapPosition, SetMapToCurrentZone = GetPlayerMapPosition, SetMapToCurrentZone\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(34796, 35144, 34799, 34797)\nmod:SetEncounterID(629)\nmod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7, 8)\nmod:SetMinSyncRevision(20220925000000)\nmod:SetMinCombatTime(30)\nmod:SetBossHPInfoToHighest()\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 66313 66330 67647 67648 67649 66794 67644 67645 67646 66821 66818 66901 67615 67616 67617 66902 67627 67628 67629\",\n\t\"SPELL_CAST_SUCCESS 67641 66883 67642 67643 66824 67612 67613 67614 66879 67624 67625 67626 66689 67650 67651 67652\",\n\t\"SPELL_AURA_APPLIED 67477 66331 67478 67479 67657 66759 67658 67659 66823 67618 67619 67620 66869 66758 66636 68335\",\n\t\"SPELL_AURA_APPLIED_DOSE 67477 66331 67478 67479 66636\",\n\t\"SPELL_AURA_REMOVED 66869 66758\",\n\t\"SPELL_DAMAGE 66320 67472 67473 67475 66317 66881 67638 67639 67640\",\n\t\"SPELL_MISSED 66320 67472 67473 67475 66317 66881 67638 67639 67640\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\"UNIT_DIED\",\n\t\"UNIT_SPELLCAST_START boss1\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1 boss2\"\n)\n\nlocal gormok = L.Gormok\nlocal dreadscale = L.Dreadscale\nlocal acidmaw = L.Acidmaw\nlocal icehowl = L.Icehowl\n\n-- General\nlocal enrageTimer\t\t\t= mod:NewBerserkTimer(223) -- REVIEW! 2022/09/05 log with 233s fight time. Does Icehowl actually gets enraged or just the next massive crash will wipe the raid?\nlocal timerCombatStart\t\t= mod:NewCombatTimer(23)\nlocal timerNextBoss\t\t\t= mod:NewTimer(150, \"TimerNextBoss\", 2457, nil, nil, 1) -- 2min 30s, as per TC.\n\nmod:AddRangeFrameOption(\"10\")\n\n-- Stage One: Gormok the Impaler\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1)..\": \"..gormok)\nlocal warnImpaleOn\t\t\t= mod:NewStackAnnounce(66331, 2, nil, \"Tank|Healer\")\nlocal warnFireBomb\t\t\t= mod:NewSpellAnnounce(66317, 3, nil, false)\nlocal WarningSnobold\t\t= mod:NewAnnounce(\"WarningSnobold\", 4)\n\nlocal specWarnImpale3\t\t= mod:NewSpecialWarningStack(66331, nil, 3, nil, nil, 1, 6)\nlocal specWarnAnger3\t\t= mod:NewSpecialWarningStack(66636, \"Tank|Healer\", 3, nil, nil, 1, 6)\nlocal specWarnGTFO\t\t\t= mod:NewSpecialWarningGTFO(66317, nil, nil, nil, 1, 8)\nlocal specWarnSilence\t\t= mod:NewSpecialWarningSpell(66330, \"SpellCaster\")\nlocal specWarnStompPreWarn\t= mod:NewSpecialWarningPreWarn(66330, \"SpellCaster\", 3, nil, nil, 1, 2)\n\nlocal timerNextStomp\t\t= mod:NewNextTimer(20, 66330, nil, nil, nil, 2, nil, DBM_COMMON_L.INTERRUPT_ICON, nil, mod:IsSpellCaster() and 3 or nil, 3) -- (25H Lordaeron 2022/09/03) - 20.0, 20.0, 20.0\nlocal timerImpaleCD\t\t\t= mod:NewCDTimer(8, 66331, nil, \"Tank|Healer\", nil, 5, nil, DBM_COMMON_L.TANK_ICON, true) -- 2s variance [8.0-9.9]. Added \"keep\" arg (10H 2021/10/22 || 10N 2021/10/22 || 25H Lordaeron 2022/09/03) - 8.3, 8.6, 9.4, 8.0, 9.6, 9.4, 9.0, 9.1, 8.7, 9.4, 9.9, 8.2, 8.6 || 8.6, 8.1, 9.5, 9.6, 9.8, 8.7, 8.8, 9.6 || 9.2, 9.5, 9.7, 9.3, 9.5, 8.3, 8.5\nlocal timerRisingAnger\t\t= mod:NewCDTimer(20.5, 66636, nil, nil, nil, 1, nil, nil, true) -- REVIEW! Normal Dose > 2 is all over the place! Heroic variance? Added \"keep\" arg (25H Lordaeron 2022/09/03 || 25N Lordaeron 2022/09/23 || 25H Lordaeron 2022/09/24 || 25H Lordaeron 2022/09/28 || 10N Lordaeron 2022/10/02 || 25H Lordaeron [2023-08-23]@[22:38:12]) - 20, 25 || 28.9, 22.6, 2.4, 13.1, 6.8, 7.4, 4.1, 0.6, 1.7, 3.8 || 24.7 || 29.9, 17.5 || 26.8, 12.7, 3.4, 1.1 || pull:24.8, 29.7\n\nlocal soundAuraMastery\t\t= mod:NewSound(66330, \"soundConcAuraMastery\")\n\n-- Stage Two: Acidmaw & Dreadscale\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2)..\": \"..dreadscale..\" & \"..acidmaw)\nlocal warnSlimePool\t\t\t= mod:NewSpellAnnounce(66883, 2, nil, \"Melee\")\nlocal warnToxin\t\t\t\t= mod:NewTargetAnnounce(66823, 3)\nlocal warnBile\t\t\t\t= mod:NewTargetAnnounce(66869, 3)\nlocal warnEnrageWorm\t\t= mod:NewSpellAnnounce(68335, 3)\n\nlocal specWarnToxin\t\t\t= mod:NewSpecialWarningMoveTo(66823, nil, nil, nil, 1, 2)\nlocal specWarnBile\t\t\t= mod:NewSpecialWarningYou(66869, nil, nil, nil, 1, 2)\n\nlocal timerSubmerge\t\t\t= mod:NewCDSourceTimer(45, 66948, nil, nil, nil, 6, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendBurrow.blp\")\nlocal timerEmerge\t\t\t= mod:NewNextSourceTimer(5, 66947, nil, nil, nil, 6, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\")\nlocal timerSweepCD\t\t\t= mod:NewCDSourceTimer(16.5, 66794, nil, \"Melee\", nil, 3, nil, nil, true) -- REVIEW! variance? Added \"Keep\" arg. (25H Lordaeron 2022/10/09) - 16.5\nlocal timerAcidicSpewCD\t\t= mod:NewCDTimer(21, 66819, nil, \"Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON, true) -- Added \"Keep\" arg\nlocal timerMoltenSpewCD\t\t= mod:NewCDTimer(16.1, 66820, nil, \"Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON, true) -- REVIEW! variance? Added \"Keep\" arg (25H Lordaeron 2022/09/28 || ) - 19.1 || 16.1\nlocal timerParalyticSprayCD\t= mod:NewCDTimer(16.2, 66901, nil, nil, nil, 3, nil, nil, true) -- REVIEW! ~11s variance? Added \"Keep\" arg (25H Lordaeron 2022/09/28 || 25H Lordaeron 2022/10/09 || 25N Lordaeron 2022/10/21) - 27.8 || 16.2 || 26.1\nlocal timerBurningSprayCD\t= mod:NewCDTimer(19, 66902, nil, nil, nil, 3, nil, nil, true) -- REVIEW! 5s variance? (25H Lordaeron 2022/09/03 || 25H Lordaeron 2022/09/28) - 20.6, 19.0 || 24.7\nlocal timerParalyticBiteCD\t= mod:NewCDTimer(25, 66824, nil, \"Melee\", nil, 3, nil, nil, true) -- Added \"Keep\" arg\nlocal timerBurningBiteCD\t= mod:NewCDTimer(15, 66879, nil, \"Melee\", nil, 3, nil, nil, true) -- REVIEW! 2s variance?  Added \"Keep\" arg (25H Lordaeron 2022/09/03) - 16.3\nlocal timerSlimePoolCD\t\t= mod:NewCDSourceTimer(12, 66883, nil, \"Melee\", nil, 3) -- REVIEW! 2s variance? (25H Lordaeron 2022/09/03) - Dreadscale: 12.3, 12.0, *, 14.4 ; Acidmaw: 12.6, 12.0\n\nmod:AddSetIconOption(\"SetIconOnBileTarget\", 66869, false, 0, {1, 2, 3, 4, 5, 6, 7, 8})\n\n-- Stage Three: Icehowl\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(3)..\": \"..icehowl)\nlocal warnBreath\t\t\t= mod:NewSpellAnnounce(66689, 2)\nlocal warnRage\t\t\t\t= mod:NewSpellAnnounce(66759, 3)\nlocal warnCharge\t\t\t= mod:NewTargetNoFilterAnnounce(52311, 4)\n\nlocal specWarnCharge\t\t= mod:NewSpecialWarningRun(52311, nil, nil, nil, 4, 2)\nlocal specWarnChargeNear\t= mod:NewSpecialWarningClose(52311, nil, nil, nil, 3, 2)\nlocal specWarnFrothingRage\t= mod:NewSpecialWarningDispel(66759, \"RemoveEnrage\", nil, nil, 1, 2)\n\nlocal timerBreath\t\t\t= mod:NewCastTimer(5, 66689, nil, nil, nil, 3) -- 5s channel. is it random target or tank?\nlocal timerBreathCD\t\t\t= mod:NewCDTimer(20, 66689, nil, nil, nil, 3)\nlocal timerStaggeredDaze\t= mod:NewBuffActiveTimer(15, 66758, nil, nil, nil, 5, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerNextCrash\t\t= mod:NewCDTimer(63.4, 66683, nil, nil, nil, 2, nil, DBM_COMMON_L.MYTHIC_ICON) -- REVIEW! variance? (25H Lordaeron 2022/09/03) - 63.4, 63.7\n\nmod:AddSetIconOption(\"SetIconOnChargeTarget\", 52311, true, 0, {8})\nmod:AddBoolOption(\"ClearIconsOnIceHowl\", true)\nmod:AddBoolOption(\"IcehowlArrow\")\n\nmod:GroupSpells(66902, 66869)--Burning Spray with Burning Bile\nmod:GroupSpells(66901, 66823)--Paralytic Spray with Toxic Bile\nmod:GroupSpells(52311, 66758, 66759)--Furious Charge, Staggering Daze, and Frothing Rage\n\nlocal bileName = DBM:GetSpellInfo(66869)\nlocal phases = {}\nlocal acidmawEngaged = false\nlocal acidmawSubmerged = false\nlocal dreadscaleEngaged = false\nmod.vb.burnIcon = 1\nmod.vb.DreadscaleMobile = true\nmod.vb.AcidmawMobile = false\nmod.vb.DreadscaleDead = false\nmod.vb.AcidmawDead = false\n\nlocal function updateHealthFrame(phase)\n\tif phases[phase] then\n\t\treturn\n\tend\n\tphases[phase] = true\n\tmod.vb.phase = phase\n\tif phase == 1 then\n\t\tDBM.BossHealth:Clear()\n\t\tDBM.BossHealth:AddBoss(34796, gormok)\n\telseif phase == 2 then\n\t\tDBM.BossHealth:AddBoss(35144, acidmaw)\n\t\tDBM.BossHealth:AddBoss(34799, dreadscale)\n\telseif phase == 3 then\n\t\tDBM.BossHealth:AddBoss(34797, icehowl)\n\tend\nend\n\nlocal function isBuffOwner(uId, spellId)\n\tif not uId and not spellId then return end\n\tlocal _, _, _, _, _, _, _, unitCaster = DBM:UnitBuff(uId, spellId)\n\tif unitCaster == uId then\n\t\treturn true\n\telse\n\t\treturn false\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\ttable.wipe(phases)\n\tacidmawEngaged = false\n\tacidmawSubmerged = false\n\tdreadscaleEngaged = false\n\tself.vb.burnIcon = 8\n\tself.vb.DreadscaleMobile = true\n\tself.vb.AcidmawMobile = false\n\tself.vb.DreadscaleDead = false\n\tself.vb.AcidmawDead = false\n\tself:SetStage(1)\n\tspecWarnStompPreWarn:Schedule(12-delay) -- 3s pre-warn. (10N Lordaeron 2022/10/02) - 14.9\n\tif self.Options.soundConcAuraMastery and isBuffOwner(\"player\", 19746) then -- Concentration Aura Mastery by a Paladin will negate the interrupt effect of Staggering Stomp\n\t\tsoundAuraMastery:Schedule(12-delay, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\PlayerAbilities\\\\AuraMastery.ogg\")\n\telse\n\t\tspecWarnStompPreWarn:ScheduleVoice(12-delay, \"silencesoon\")\n\tend\n\tif self:IsHeroic() then\n\t\ttimerNextBoss:Start(-delay)\n\tend\n\ttimerRisingAnger:Start(18-delay) -- REVIEW! ~10s variance? (25H Lordaeron 2022/09/03 || 25N Lordaeron 2022/09/23 || 25H Lordaeron 2022/09/24 || 25H Lordaeron 2022/09/28 || 10N Lordaeron 2022/10/02) - 18.9 || 26.1 || 29.7 || 21.9 || 18.2\n\ttimerNextStomp:Start(15-delay) -- (25H Lordaeron 2022/09/03) - 15.0\n\ttimerImpaleCD:Start() -- REVIEW! same 2s variance? (10H 2021/10/22 || 10N 2021/10/22 || 25H Lordaeron 2022/09/03) - 8 || 8 || 9.9\n\tupdateHealthFrame(1)\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\n--These remain methods since they can't reverse schedule each other as local functions\n--[[ Disabling scheduling methods since worms submerge at different times on Warmane. Also, since Warmane has boss units, we also have access to the proper events\n[\"UNIT_SPELLCAST_SUCCEEDED\"] = {\n\t\"Churning Ground Visual-npc:34799-240 = pull:141.2/Stage 2/58.2, 5.0, 45.1, 5.0, Stage 3/31.2\", -- [6]\n\t\"Churning Ground Visual-npc:35144-247 = pull:144.2/Stage 2/61.2, 5.0, 45.0, 5.0, Stage 3/28.2\", -- [7]\n}\nfunction mod:WormsEmerge()\n\ttimerSubmerge:Start()\n\tif not self.vb.AcidmawDead then\n\t\tif self.vb.DreadscaleMobile then\n\t\t\ttimerSweepCD:Start(22)\t\t\t-- Log review: 22-24s (N/H?)\n\t\t\ttimerParalyticSprayCD:Start(18)\t-- Log review: 18-20s (N/H?)\n\t\telse\n\t\t\ttimerSlimePoolCD:Start(14)\n\t\t\ttimerParalyticBiteCD:Start(5)\n\t\t\ttimerAcidicSpewCD:Start(10)\n\t\tend\n\tend\n\tif not self.vb.DreadscaleDead then\n\t\tif self.vb.DreadscaleMobile then\n\t\t\ttimerSlimePoolCD:Start(15)\n\t\t\ttimerMoltenSpewCD:Start(26)\n\t\t\ttimerBurningBiteCD:Start(5)\n\t\telse\n\t\t\ttimerSweepCD:Start(16)\n\t\t\ttimerBurningSprayCD:Start(17)\n\t\tend\n\tend\n\tself:ScheduleMethod(45, \"WormsSubmerge\")\nend\n\nfunction mod:WormsSubmerge()\n\ttimerEmerge:Start()\n\ttimerSweepCD:Cancel()\n\ttimerSlimePoolCD:Cancel()\n\ttimerMoltenSpewCD:Cancel()\n\ttimerParalyticSprayCD:Cancel()\n\ttimerBurningBiteCD:Cancel()\n\ttimerAcidicSpewCD:Cancel()\n\ttimerBurningSprayCD:Cancel()\n\ttimerParalyticBiteCD:Cancel()\n\tself.vb.DreadscaleMobile = not self.vb.DreadscaleMobile\n\tself:ScheduleMethod(5, \"WormsEmerge\")\nend]]\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 66313 then\t\t\t\t\t\t\t\t\t-- FireBomb (Impaler)\n\t\twarnFireBomb:Show()\n\telseif args:IsSpellID(66330, 67647, 67648, 67649) then\t\t-- Staggering Stomp\n\t\ttimerNextStomp:Start()\n\t\tspecWarnSilence:Show()\n\t\tspecWarnStompPreWarn:Schedule(17) -- prewarn 3 sec before next\n\t\tif self.Options.soundConcAuraMastery and isBuffOwner(\"player\", 19746) then -- Concentration Aura Mastery by a Paladin will negate the interrupt effect of Staggering Stomp\n\t\t\tsoundAuraMastery:Schedule(17, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\PlayerAbilities\\\\AuraMastery.ogg\")\n\t\telse\n\t\t\tspecWarnStompPreWarn:ScheduleVoice(17, \"silencesoon\")\n\t\tend\n\telseif args:IsSpellID(66794, 67644, 67645, 67646) then\t\t-- Sweep stationary worm\n\t\ttimerSweepCD:Start(args.sourceName)\n\telseif spellId == 66821 then\t\t\t\t\t\t\t-- Molten spew\n\t\ttimerMoltenSpewCD:Start()\n\telseif spellId == 66818 then\t\t\t\t\t\t\t-- Acidic Spew\n\t\ttimerAcidicSpewCD:Start()\n\telseif args:IsSpellID(66901, 67615, 67616, 67617) then\t\t-- Paralytic Spray\n\t\ttimerParalyticSprayCD:Start()\n\telseif args:IsSpellID(66902, 67627, 67628, 67629) then\t\t-- Burning Spray\n\t\tself.vb.burnIcon = 1\n\t\ttimerBurningSprayCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(67641, 66883, 67642, 67643) then\t\t\t-- Slime Pool Cloud Spawn\n\t\twarnSlimePool:Show()\n\t\ttimerSlimePoolCD:Start(args.sourceName)\n\telseif args:IsSpellID(66824, 67612, 67613, 67614) then\t\t-- Paralytic Bite\n\t\ttimerParalyticBiteCD:Start()\n\telseif args:IsSpellID(66879, 67624, 67625, 67626) then\t\t-- Burning Bite\n\t\ttimerBurningBiteCD:Start()\n\telseif args:IsSpellID(66689, 67650, 67651, 67652) then\t\t-- Arctic Breath\n\t\ttimerBreath:Start()\n\t\ttimerBreathCD:Start()\n\t\twarnBreath:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif args:IsSpellID(67477, 66331, 67478, 67479) then\t-- Impale\n\t\ttimerImpaleCD:Start()\n\t\twarnImpaleOn:Show(args.destName, 1)\n\telseif args:IsSpellID(67657, 66759, 67658, 67659) then\t-- Frothing Rage\n\t\ttimerBreathCD:Start(5.5) -- variance? (Lordaeron 10N [2024-07-04]@[22:52:09]) - 5.5\n\t\twarnRage:Show()\n\t\tspecWarnFrothingRage:Show()\n\t\tspecWarnFrothingRage:Play(\"trannow\")\n\telseif args:IsSpellID(66823, 67618, 67619, 67620) then\t-- Paralytic Toxin\n\t\twarnToxin:CombinedShow(0.3, args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnToxin:Show(bileName)\n\t\t\tspecWarnToxin:Play(\"targetyou\")\n\t\tend\n\telseif spellId == 66869 then\t-- Burning Bile\n\t\twarnBile:CombinedShow(0.3, args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnBile:Show()\n\t\t\tspecWarnBile:Play(\"targetyou\")\n\t\tend\n\t\tif self.Options.SetIconOnBileTarget and self.vb.burnIcon < 9 then\n\t\t\tself:SetIcon(args.destName, self.vb.burnIcon)\n\t\t\tself.vb.burnIcon = self.vb.burnIcon + 1\n\t\tend\n\telseif spellId == 66758 then\t-- Staggered Daze\n\t\ttimerStaggeredDaze:Start()\n\telseif spellId == 66636 then\t-- Rising Anger\n\t\tWarningSnobold:Show(args.destName)\n\t\ttimerRisingAnger:Start()\n\telseif spellId == 68335 then\t-- Enrage\n\t\twarnEnrageWorm:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED_DOSE(args)\n\tif args:IsSpellID(67477, 66331, 67478, 67479) then\t-- Impale\n\t\tlocal amount = args.amount or 1\n\t\ttimerImpaleCD:Start()\n\t\tif (amount >= 3) or (amount >= 2 and self:IsHeroic()) then\n\t\t\tif args:IsPlayer() then\n\t\t\t\tspecWarnImpale3:Show(amount)\n\t\t\t\tspecWarnImpale3:Play(\"stackhigh\")\n\t\t\telse\n\t\t\t\twarnImpaleOn:Show(args.destName, amount)\n\t\t\tend\n\t\tend\n\telseif args.spellId == 66636 then\t-- Rising Anger\n\t\tlocal amount = args.amount or 1\n\t\tWarningSnobold:Show(args.destName)\n\t\tif amount < 3 then\n--\t\t\tif self:IsHeroic() then\n\t\t\t\ttimerRisingAnger:Start(17.5) -- (25H Lordaeron 2022/09/28) - 17.5\n--\t\t\telse\n--\t\t\t\tif amount < 3 then\n--\t\t\t\t\ttimerRisingAnger:Start() -- Variance for normal dose is all over the place... Only first dose is timed since it has \"some\" level of consistency. (25N Lordaeron 2022/09/23 || 10N Lordaeron 2022/10/02 wipe || 10N Lordaeron 2022/10/02 kill || 25N Lordaeron 2022/10/21) - 26.1, 28.9, 22.6 || 26.8, 12.7 || 20.8, 30.0 || 17.7\n--\t\t\t\tend\n--\t\t\tend\n\t\telseif amount >= 4 then -- only 4 snobolds\n\t\t\ttimerRisingAnger:Stop()\n\t\t\tspecWarnAnger3:Show(amount)\n\t\t\tspecWarnAnger3:Play(\"stackhigh\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 66869 then\n\t\tif self.Options.SetIconOnBileTarget then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\telseif spellId == 66758 then -- Staggered Daze\n\t\ttimerBreathCD:Start(5) -- 3s variance?\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, spellId, spellName)\n\tif ((spellId == 66320 or spellId == 67472 or spellId == 67473 or spellId == 67475 or spellId == 66317) or (spellId == 66881 or spellId == 67638 or spellId == 67639 or spellId == 67640)) and destGUID == UnitGUID(\"player\") then\t-- Fire Bomb (66317 is impact damage, not avoidable but leaving in because it still means earliest possible warning to move. Other 4 are tick damage from standing in it) // Slime Pool\n\t\tspecWarnGTFO:Show(spellName)\n\t\tspecWarnGTFO:Play(\"watchfeet\")\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg, _, _, _, target)\n\tif (msg:match(L.Charge) or msg:find(L.Charge)) and target then\n\t\ttarget = DBM:GetUnitFullName(target)\n\t\twarnCharge:Show(target)\n\t\tif self.Options.ClearIconsOnIceHowl then\n\t\t\tself:ClearIcons()\n\t\tend\n\t\tif target == UnitName(\"player\") then\n\t\t\tspecWarnCharge:Show()\n\t\t\tspecWarnCharge:Play(\"justrun\")\n\t\t\tif self.Options.PingCharge then\n\t\t\t\tMinimap:PingLocation()\n\t\t\tend\n\t\telseif self:CheckNearby(11, target) then\n\t\t\tspecWarnChargeNear:Show(target)\n\t\t\tspecWarnChargeNear:Play(\"runaway\")\n\t\tend\n\t\tif self.Options.IcehowlArrow then\n\t\t\tlocal uId = DBM:GetRaidUnitId(target)\n\t\t\tlocal x, y = GetPlayerMapPosition(uId)\n\t\t\tif x == 0 and y == 0 then\n\t\t\t\tSetMapToCurrentZone()\n\t\t\t\tx, y = GetPlayerMapPosition(uId)\n\t\t\tend\n\t\t\tDBM.Arrow:ShowRunAway(x, y, 12, 5)\n\t\tend\n\t\tif self.Options.SetIconOnChargeTarget then\n\t\t\tself:SetIcon(target, 8, 5)\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.CombatStart or msg:find(L.CombatStart) then\n\t\ttimerCombatStart:Start()\n\telseif msg == L.Phase2 or msg:find(L.Phase2) then\n\t\tself:SetStage(1.5)\n--\t\tself:ScheduleMethod(13.5, \"WormsEmerge\")\n\t\ttimerCombatStart:Start(13.5)\n\t\ttimerNextBoss:Cancel()\n\t\tupdateHealthFrame(2)\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Show(10)\n\t\tend\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"INSTANCE_ENCOUNTER_ENGAGE_UNIT\"\n\t\t)\n\telseif msg == L.Phase3 or msg:find(L.Phase3) then\n\t\tupdateHealthFrame(3)\n\t\tself:SetStage(2.5)\n\t\tif self:IsHeroic() then\n\t\t\tenrageTimer:Start()\n\t\tend\n--\t\tself:UnscheduleMethod(\"WormsSubmerge\")\n--\t\tself:UnscheduleMethod(\"WormsEmerge\")\n\t\ttimerCombatStart:Start(10)\n\t\ttimerNextBoss:Cancel()\n\t\ttimerSubmerge:Cancel()\n\t\ttimerEmerge:Cancel()\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Hide()\n\t\tend\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"INSTANCE_ENCOUNTER_ENGAGE_UNIT\"\n\t\t)\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 34796 then\n\t\tspecWarnStompPreWarn:Cancel()\n\t\tspecWarnStompPreWarn:CancelVoice()\n\t\tsoundAuraMastery:Cancel()\n\t\ttimerNextStomp:Stop()\n\t\ttimerImpaleCD:Stop()\n\t\ttimerRisingAnger:Stop()\n\t\tDBM.BossHealth:RemoveBoss(cid) -- remove Gormok from the health frame\n\telseif cid == 35144 then -- Acidmaw dead\n\t\tself.vb.AcidmawDead = true\n\t\ttimerParalyticSprayCD:Cancel()\n\t\ttimerParalyticBiteCD:Cancel()\n\t\ttimerAcidicSpewCD:Cancel()\n\t\ttimerSubmerge:Cancel(acidmaw)\n\t\tif self.vb.AcidmawMobile then\n\t\t\ttimerSlimePoolCD:Cancel(args.destName)\n\t\telse\n\t\t\ttimerSweepCD:Cancel(args.destName)\n\t\tend\n\t\tif self.vb.DreadscaleDead then\n\t\t\ttimerNextBoss:Cancel()\n\t\t\tDBM.BossHealth:RemoveBoss(35144)\n\t\t\tDBM.BossHealth:RemoveBoss(34799)\n\t\tend\n\telseif cid == 34799 then -- Dreadscale dead\n\t\tself.vb.DreadscaleDead = true\n\t\ttimerBurningSprayCD:Cancel()\n\t\ttimerBurningBiteCD:Cancel()\n\t\ttimerMoltenSpewCD:Cancel()\n\t\ttimerSubmerge:Cancel(dreadscale)\n\t\tif self.vb.DreadscaleMobile then\n\t\t\ttimerSlimePoolCD:Cancel(args.destName)\n\t\telse\n\t\t\ttimerSweepCD:Cancel(args.destName)\n\t\tend\n\t\tif self.vb.AcidmawDead then\n\t\t\ttimerNextBoss:Cancel()\n\t\t\tDBM.BossHealth:RemoveBoss(35144)\n\t\t\tDBM.BossHealth:RemoveBoss(34799)\n\t\tend\n\telseif cid == 34797 then\n\t\tDBM:EndCombat(self)\n\tend\nend\n\nfunction mod:INSTANCE_ENCOUNTER_ENGAGE_UNIT()\n\tfor i = 1, 5 do\n\t\tlocal unitID = \"boss\"..i\n\t\tif UnitExists(unitID) then\n\t\t\tlocal cid = self:GetUnitCreatureId(unitID)\n\t\t\tlocal bossName = UnitName(unitID)\n\t\t\tif cid == 35144 and not acidmawEngaged then -- Acidmaw (stationary on engage)\n\t\t\t\tself:SetStage(2) -- IEEU fires in tandem, so phasing only once is fine\n\t\t\t\tacidmawEngaged = true\n\t\t\t\tif self:IsHeroic() then\n\t\t\t\t\ttimerNextBoss:Start()\n\t\t\t\tend\n\t\t\t\ttimerSubmerge:Start(49.3, bossName) -- REVIEW! 2s delay from visual to submerge (25H Lordaeron 2022/09/03) - 50\n\t\t\t\ttimerSweepCD:Start(18.6, bossName) -- (2021/10/21 || 25H Lordaeron 2022/09/03 || 10N Lordaeron 2022/10/02 || 25H Lordaeron 2022/10/09) - 22-24s (N/H?) || 24 || 20.0 || 18.6\n\t\t\t\ttimerParalyticSprayCD:Start(15.5)\t-- (2021/10/21 || 25H Lordaeron 2022/09/03 || 25H Lordaeron 2022/09/28 || 10N Lordaeron 2022/10/02 || 25N Lordaeron 2022/10/21) - 18-20s (N/H?) || 22 || 20.2 || 30.3 || 15.5\n\t\t\telseif cid == 34799 and not dreadscaleEngaged then -- Dreadscale (mobile on engage)\n\t\t\t\tdreadscaleEngaged = true\n\t\t\t\ttimerSubmerge:Start(bossName)\n\t\t\t\ttimerSlimePoolCD:Start(15, bossName) -- (25H Lordaeron 2022/09/03) - 15\n\t\t\t\ttimerMoltenSpewCD:Start(19.2) -- (25H Lordaeron 2022/09/03 || 25H Lordaeron 2022/09/28 || 25N Lordaeron 2022/10/13) - 24 || 23.2 || 19.2\n\t\t\t\ttimerBurningBiteCD:Start(15.4) -- (25H Lordaeron 2022/09/03 || 25N Lordaeron 2022/10/13) - 19 || 15.4\n\t\t\telseif cid == 34797 then -- Icehowl\n\t\t\t\tself:SetStage(3)\n\t\t\t\ttimerBreathCD:Start()\n\t\t\t\ttimerNextCrash:Start(40.9) -- REVIEW!\n\t\t\t\tself:UnregisterShortTermEvents()\n\t\t\tend\n\t\t\tif unitID == \"boss2\" then\n\t\t\t\tself:UnregisterShortTermEvents() -- both worms are on boss frames, job finished.\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_START(_, spellName)\n\tif spellName == GetSpellInfo(66683) then -- Massive Crash\n\t\ttimerBreathCD:Cancel()\n\t\ttimerNextCrash:Start()\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(uId, spellName)\n\tif spellName == GetSpellInfo(66948) then -- Submerge\n\t\tlocal npcId = self:GetUnitCreatureId(uId)\n\t\tlocal unitName = UnitName(uId) or UNKNOWN\n\t\tDBM:Debug(\"Submerge casted by \" .. unitName.. \": \" .. tostring(npcId), 2)\n\t\tif npcId == 35144 then -- Acidmaw\n\t\t\tacidmawSubmerged = true -- this workaround is necessary since I had one log (25H Lordaeron 2022/09/24) that Emerged fired 1.0s after IEEU, so enforce submerge/emerge conditional logic\n\t\t\ttimerAcidicSpewCD:Stop()\n\t\t\ttimerParalyticBiteCD:Stop()\n\t\t\ttimerParalyticSprayCD:Stop()\n\t\t\ttimerSlimePoolCD:Stop(acidmaw)\n\t\t\ttimerSweepCD:Stop(acidmaw)\n\t\t\ttimerEmerge:Start(7.5, unitName) -- REVIEW! 3s delay from visual to emerge (25H Lordaeron 2022/09/03) - 8, 7\n\t\telseif npcId == 34799 then -- Dreadscale\n\t\t\ttimerMoltenSpewCD:Stop()\n\t\t\ttimerBurningBiteCD:Stop()\n\t\t\ttimerBurningSprayCD:Stop()\n\t\t\ttimerSlimePoolCD:Stop(dreadscale)\n\t\t\ttimerSweepCD:Stop(dreadscale)\n\t\t\ttimerEmerge:Start(6.5, unitName) -- (25H Lordaeron 2022/09/03) - 7, 6\n\t\tend\n\telseif spellName == GetSpellInfo(66947) then -- Emerge\n\t\tlocal npcId = self:GetUnitCreatureId(uId)\n\t\tlocal unitName = UnitName(uId) or UNKNOWN\n\t\tDBM:Debug(\"Emerge casted by \" .. unitName.. \": \" .. tostring(npcId), 2)\n\t\tif npcId == 35144 and acidmawSubmerged then -- Acidmaw\n\t\t\tself.vb.AcidmawMobile = not self.vb.AcidmawMobile\n\t\t\tacidmawSubmerged = false\n\t\t\tDBM:Debug(\"Acidmaw PHASE_STATIONARY: \" .. tostring(self.vb.AcidmawMobile), 2)\n\t\t\ttimerSubmerge:Start(43, acidmaw)\n\t\t\tif self.vb.AcidmawMobile then\n\t\t\t\ttimerSlimePoolCD:Start(acidmaw) -- (25H Lordaeron 2022/09/03) - 12\n\t\t\t\ttimerParalyticBiteCD:Start(13) -- (25H Lordaeron 2022/09/03 || 25H Lordaeron 2022/09/28 || 25H Lordearon 2022/10/09 || 25N Lordaeron 2022/10/13 || 25N Lordaeron 2022/10/21 || 25N Lordaeron 2022/12/07) - 28 || 26.2 || 22.0 || 20.2 || 16.5 || 13.0\n\t\t\t\ttimerAcidicSpewCD:Start(15.9) -- (25H Lordaeron 2022/09/03) - 21 || 15.9\n\t\t\telse\n\t\t\t\ttimerSweepCD:Start(22, acidmaw)\t-- Log review: 22-24s (N/H?)\n\t\t\t\ttimerParalyticSprayCD:Start(16.7)\t-- (old log review (N/H?) || 25H Lordaeron 2022/09/28) - 18-20 || 16.7\n\t\t\tend\n\t\telseif npcId == 34799 then -- Dreadscale\n\t\t\tself.vb.DreadscaleMobile = not self.vb.DreadscaleMobile\n\t\t\tDBM:Debug(\"Dreadscale PHASE_STATIONARY: \" .. tostring(self.vb.DreadscaleMobile), 2)\n\t\t\ttimerSubmerge:Start(44, dreadscale)\n\t\t\tif self.vb.DreadscaleMobile then\n\t\t\t\ttimerSlimePoolCD:Start(dreadscale) -- (25H Lordaeron 2022/09/03) - 12\n\t\t\t\ttimerMoltenSpewCD:Start(21.4) -- (25H Lordaeron 2022/09/03 || 25H Lordaeron 2022/09/28 || 25N Lordaeron 2022/10/13) - 24 || 21.8 || 21.4\n\t\t\t\ttimerBurningBiteCD:Start(14.2) -- (25H Lordaeron 2022/09/03 || 25H Lordaeron 2022/09/28) - 19 || 14.2\n\t\t\telse\n\t\t\t\ttimerSweepCD:Start(14.8, dreadscale) -- (25H Lordaeron 2022/09/03 || 25N Lordaeron 2022/10/21) - 17 || 14.8\n\t\t\t\ttimerBurningSprayCD:Start(13.4) -- (25H Lordaeron 2022/09/03 || 25H Lordaeron 2022/09/28) - 20 || 13.5\n\t\t\tend\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Coliseum/Twins.lua",
    "content": "local mod\t= DBM:NewMod(\"ValkTwins\", \"DBM-Coliseum\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(34497, 34496)\nmod:SetEncounterID(641)\nmod:SetMinCombatTime(30)\nmod:SetUsedIcons(1, 2, 3, 4)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 66046 67206 67207 67208 66058 67182 67183 67184 65875 67303 67304 67305 65876 67306 67307 67308\",\n\t\"SPELL_AURA_APPLIED 65724 67213 67214 67215 65748 67216 67217 67218 65950 67296 67297 67298 66001 67281 67282 67283 67246 65879 65916 67244 67245 67248 67249 67250 65874 67256 67257 67258 65858 67259 67260 67261\",\n\t\"SPELL_AURA_REMOVED 65874 67256 67257 67258 65858 67259 67260 67261\",\n\t\"SPELL_INTERRUPT\"\n)\n\nmod:SetBossHealthInfo(\n\t34497, L.Fjola,\n\t34496, L.Eydis\n)\n\nlocal warnSpecial\t\t\t\t\t= mod:NewAnnounce(\"WarnSpecialSpellSoon\", 3)\nlocal warnTouchDebuff\t\t\t\t= mod:NewAnnounce(\"WarningTouchDebuff\", 2, 66823)\nlocal warnPoweroftheTwins\t\t\t= mod:NewAnnounce(\"WarningPoweroftheTwins2\", 4, 65916, \"Healer\", nil, nil, 65916)\n\nlocal specWarnSpecial\t\t\t\t= mod:NewSpecialWarning(\"SpecWarnSpecial\", nil, nil, nil, 1, 14)\nlocal specWarnSwitch\t\t\t\t= mod:NewSpecialWarning(\"SpecWarnSwitchTarget\", nil, nil, nil, 1, 2, nil, nil, 65875)\nlocal specWarnKickNow\t\t\t\t= mod:NewSpecialWarning(\"SpecWarnKickNow\", \"HasInterrupt\", nil, nil, 1, 2, nil, nil, 65875)\nlocal specWarnPoweroftheTwins\t\t= mod:NewSpecialWarningDefensive(65916, \"Tank\", nil, 2, 1, 2)\nlocal specWarnEmpoweredDarkness\t\t= mod:NewSpecialWarningYou(65724)--No voice ideas for this\nlocal specWarnEmpoweredLight\t\t= mod:NewSpecialWarningYou(65748)--No voice ideas for this\n\nlocal timerCombatStart\t\t\t\t= mod:NewCombatTimer(22)\nlocal enrageTimer\t\t\t\t\t= mod:NewBerserkTimer(360)\nlocal timerSpecial\t\t\t\t\t= mod:NewTimer(45, \"TimerSpecialSpell\", \"Interface\\\\Icons\\\\INV_Enchant_EssenceMagicLarge\", nil, nil, 6)\nlocal timerHeal\t\t\t\t\t\t= mod:NewCastTimer(15, 65875, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerLightTouch\t\t\t\t= mod:NewTargetTimer(20, 65950, nil, false, 2, 3)\nlocal timerDarkTouch\t\t\t\t= mod:NewTargetTimer(20, 66001, nil, false, 2, 3)\nlocal timerAchieve\t\t\t\t\t= mod:NewAchievementTimer(180, 3815)\n\nlocal timerAnubRoleplay\t\t\t\t= mod:NewTimer(52, \"TimerAnubRoleplay\", 43827, nil, nil, 6)\n\nmod:AddBoolOption(\"SpecialWarnOnDebuff\", false, \"announce\")\n--mod:AddBoolOption(\"SetIconOnDebuffTarget\", false) -- only commented since retail groups to only 1 debuff ID, which is not a very good GUI approach.\nmod:AddSetIconOption(\"SetIconOnDebuffTarget\", 66001, false, 0, {1, 2, 3, 4})\nmod:AddInfoFrameOption(67258, true)\nmod:AddBoolOption(\"HealthFrame\", false)\n\nlocal lightEssence, darkEssence = DBM:GetSpellInfo(65686), DBM:GetSpellInfo(65684)\nlocal debuffTargets = {}\nmod.vb.debuffIcon = 1\n\nfunction mod:OnCombatStart(delay)\n\ttimerSpecial:Start(-delay)\n\twarnSpecial:Schedule(40-delay)\n\ttimerAchieve:Start(-delay)\n\tif self:IsHeroic() then\n\t\tenrageTimer:Start(360-delay)\n\telse\n\t\tenrageTimer:Start(480-delay)\n\tend\n\tself.vb.debuffIcon = 1\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.InfoFrame then\n\t\tDBM.InfoFrame:Hide()\n\tend\nend\n\ndo\n\tlocal function SpecialAbility(debuff)\n\t\tif not debuff then\n\t\t\tspecWarnSpecial:Show()\n\t\t\tspecWarnSpecial:Play(\"changecolor\")\n\t\tend\n\t\ttimerSpecial:Start()\n\t\twarnSpecial:Schedule(40)\n\tend\n\n\tfunction mod:SPELL_CAST_START(args)\n\t\tif args:IsSpellID(66046, 67206, 67207, 67208) then\t\t\t-- Light Vortex\n\t\t\tlocal debuff = DBM:UnitDebuff(\"player\", lightEssence)\n\t\t\tSpecialAbility(debuff)\n\t\telseif args:IsSpellID(66058, 67182, 67183, 67184) then\t\t-- Dark Vortex\n\t\t\tlocal debuff = DBM:UnitDebuff(\"player\", darkEssence)\n\t\t\tSpecialAbility(debuff)\n\t\telseif args:IsSpellID(65875, 67303, 67304, 67305) then\t\t-- Twin's Pact\n\t\t\ttimerHeal:Start()\n\t\t\tSpecialAbility(true)\n\t\t\tif self:GetUnitCreatureId(\"target\") == 34497 then\t-- if lightbane, then switch to darkbane\n\t\t\t\tspecWarnSwitch:Show()\n\t\t\t\tspecWarnSwitch:Play(\"changetarget\")\n\t\t\tend\n\t\telseif args:IsSpellID(65876, 67306, 67307, 67308) then\t-- Light Pact\n\t\t\ttimerHeal:Start()\n\t\t\tSpecialAbility(true)\n\t\t\tif self:GetUnitCreatureId(\"target\") == 34496 then\t-- if darkbane, then switch to lightbane\n\t\t\t\tspecWarnSwitch:Show()\n\t\t\t\tspecWarnSwitch:Play(\"changetarget\")\n\t\t\tend\n\t\tend\n\tend\nend\n\ndo\n\tlocal function resetDebuff(self)\n\t\tself.vb.debuffIcon = 1\n\tend\n\n\tlocal function warnDebuff(self)\n\t\twarnTouchDebuff:Show(table.concat(debuffTargets, \"<, >\"))\n\t\ttable.wipe(debuffTargets)\n\t\tself:Unschedule(resetDebuff)\n\t\tself:Schedule(5, resetDebuff, self)\n\tend\n\n\tlocal function showPowerWarning(self, cid)\n\t\tlocal target = self:GetBossTarget(cid)\n\t\tif not target then return end\n\t\tif target == UnitName(\"player\") then\n\t\t\tspecWarnPoweroftheTwins:Show()\n\t\telse\n\t\t\twarnPoweroftheTwins:Show(target)\n\t\tend\n\tend\n\n\tlocal shieldValues = {\n\t\t[65874] = 175000,\n\t\t[65858] = 175000,\n\t\t[67257] = 300000,\n\t\t[67260] = 300000,\n\t\t[67256] = 700000,\n\t\t[67259] = 700000,\n\t\t[67261] = 1200000,\n\t\t[67258] = 1200000,\n\t}\n\tlocal showShieldHealthBar, hideShieldHealthBar, shieldedBoss, updateInfoFrame\n\tlocal frame = CreateFrame(\"Frame\") -- using a separate frame avoids the overhead of the DBM event handlers which are not meant to be used with frequently occuring events like all damage events...\n\tlocal shieldedMob\n\tlocal absorbRemaining = 0\n\tlocal maxAbsorb = 0\n\n\tlocal twipe = table.wipe\n\tlocal lines, sortedLines = {}, {}\n\tlocal function addLine(key, value)\n\t\t-- sort by insertion order\n\t\tlines[key] = value\n\t\tsortedLines[#sortedLines + 1] = key\n\tend\n\n\tlocal function getShieldHP()\n\t\treturn math.max(1, math.floor(absorbRemaining / maxAbsorb * 100))\n\tend\n\tframe:RegisterEvent(\"COMBAT_LOG_EVENT_UNFILTERED\")\n\tframe:SetScript(\"OnEvent\", function(self, _, _, subEvent, _, _, _, destGUID, _, _, ...)\n\t\tif shieldedMob == destGUID then\n\t\t\tlocal absorbed\n\t\t\tif subEvent == \"SWING_MISSED\" then\n\t\t\t\tabsorbed = select(2, ... )\n\t\t\telseif subEvent == \"RANGE_MISSED\" or subEvent == \"SPELL_MISSED\" or subEvent == \"SPELL_PERIODIC_MISSED\" then\n\t\t\t\tabsorbed = select(5, ... )\n\t\t\tend\n\t\t\tif absorbed then\n\t\t\t\tabsorbRemaining = absorbRemaining - absorbed\n\t\t\tend\n\t\tend\n\tend)\n\n\tfunction showShieldHealthBar(self, mob, shieldName, absorb)\n\t\tshieldedMob = mob\n\t\tabsorbRemaining = absorb\n\t\tmaxAbsorb = absorb\n\t\tDBM.BossHealth:RemoveBoss(getShieldHP)\n\t\tDBM.BossHealth:AddBoss(getShieldHP, shieldName)\n\t\tself:Schedule(15, hideShieldHealthBar)\n\tend\n\n\tfunction hideShieldHealthBar()\n\t\tDBM.BossHealth:RemoveBoss(getShieldHP)\n\tend\n\n\tfunction updateInfoFrame()\n\t\ttwipe(lines)\n\t\ttwipe(sortedLines)\n\t\tif shieldedBoss then\n\t\t\taddLine(shieldedBoss, getShieldHP()..\"%\")\n\t\tend\n\t\treturn lines, sortedLines\n\tend\n\n\tfunction mod:SPELL_AURA_APPLIED(args)\n\t\tif args:IsPlayer() and args:IsSpellID(65724, 67213, 67214, 67215) then\t\t-- Empowered Darkness\n\t\t\tspecWarnEmpoweredDarkness:Show()\n\t\telseif args:IsPlayer() and args:IsSpellID(65748, 67216, 67217, 67218) then\t-- Empowered Light\n\t\t\tspecWarnEmpoweredLight:Show()\n\t\telseif args:IsSpellID(65950, 67296, 67297, 67298) then\t-- Touch of Light\n\t\t\tif args:IsPlayer() and self.Options.SpecialWarnOnDebuff then\n\t\t\t\tspecWarnSpecial:Show()\n\t\t\t\tspecWarnSpecial:Play(\"changecolor\")\n\t\t\tend\n\t\t\ttimerLightTouch:Start(args.destName)\n\t\t\tif self.Options.SetIconOnDebuffTarget then\n\t\t\t\tself:SetIcon(args.destName, self.vb.debuffIcon, 15)\n\t\t\tend\n\t\t\tself.vb.debuffIcon = self.vb.debuffIcon + 1\n\t\t\tdebuffTargets[#debuffTargets + 1] = args.destName\n\t\t\tself:Unschedule(warnDebuff)\n\t\t\tself:Schedule(0.9, warnDebuff, self)\n\t\telseif args:IsSpellID(66001, 67281, 67282, 67283) then\t-- Touch of Darkness\n\t\t\tif args:IsPlayer() and self.Options.SpecialWarnOnDebuff then\n\t\t\t\tspecWarnSpecial:Show()\n\t\t\t\tspecWarnSpecial:Play(\"changecolor\")\n\t\t\tend\n\t\t\ttimerDarkTouch:Start(args.destName)\n\t\t\tif self.Options.SetIconOnDebuffTarget then\n\t\t\t\tself:SetIcon(args.destName, self.vb.debuffIcon)\n\t\t\tend\n\t\t\tself.vb.debuffIcon = self.vb.debuffIcon - 1\n\t\t\tdebuffTargets[#debuffTargets + 1] = args.destName\n\t\t\tself:Unschedule(warnDebuff)\n\t\t\tself:Schedule(0.75, warnDebuff, self)\n\t\telseif args:IsSpellID(67246, 65879, 65916, 67244) or args:IsSpellID(67245, 67248, 67249, 67250) then\t-- Power of the Twins\n\t\t\tself:Schedule(0.1, showPowerWarning, self, args:GetDestCreatureID())\n\t\telseif args:IsSpellID(65874, 67256, 67257, 67258) or args:IsSpellID(65858, 67259, 67260, 67261) then  -- Shield of Darkness/Lights\n\t\t\tshieldedBoss = args.destName\n\t\t\tshowShieldHealthBar(self, args.destGUID, args.spellName, shieldValues[args.spellId] or 0)\n\t\t\tDBM.InfoFrame:SetHeader(args.spellName)\n\t\t\tDBM.InfoFrame:Show(2, \"function\", updateInfoFrame, false, true)\n\t\tend\n\tend\n\n\tfunction mod:SPELL_AURA_REMOVED(args)\n\t\tif args:IsSpellID(65874, 67256, 67257, 67258) or args:IsSpellID(65858, 67259, 67260, 67261) then\t-- Shield of Darkness/Lights\n\t\t\tshieldedBoss = nil\n\t\t\tspecWarnKickNow:Show()\n\t\t\tspecWarnKickNow:Play(\"kickcast\")\n\t\t\tif self.Options.InfoFrame then\n\t\t\t\tDBM.InfoFrame:Hide()\n\t\t\tend\n\t\t\thideShieldHealthBar()\n\t\telseif args:IsSpellID(65950, 67296, 67297, 67298) then\t-- Touch of Light\n\t\t\ttimerLightTouch:Stop(args.destName)\n\t\t\tif self.Options.SetIconOnDebuffTarget then\n\t\t\t\tself:SetIcon(args.destName, 0)\n\t\t\tend\n\t\telseif args:IsSpellID(66001, 67281, 67282, 67283) then\t-- Touch of Darkness\n\t\t\ttimerDarkTouch:Stop(args.destName)\n\t\t\tif self.Options.SetIconOnDebuffTarget then\n\t\t\t\tself:SetIcon(args.destName, 0)\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_INTERRUPT(args)\n\tif type(args.extraSpellId) == \"number\" and (args.extraSpellId == 65875 or args.extraSpellId == 67303 or args.extraSpellId == 67304 or args.extraSpellId == 67305 or args.extraSpellId == 65876 or args.extraSpellId == 67306 or args.extraSpellId == 67307 or args.extraSpellId == 67308) then\n\t\ttimerHeal:Cancel()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.ValksRP or msg:find(L.ValksRP) then\n\t\ttimerCombatStart:Start()\n\telseif msg == L.AnubRP or msg:find(L.AnubRP) then\n\t\ttimerAnubRoleplay:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Coliseum/localization.cn.lua",
    "content": "-- author: callmejames @《凤凰之翼》 一区藏宝海湾\n-- commit by: yaroot <yaroot AT gmail.com>\n-- modified by: Diablohu < 178.com / ngacn.cc / dreamgen.cn >\n-- Simplified Chinese by hihihaheho@Warmane-Icecrown\n\nif GetLocale() ~= \"zhCN\" then return end\n\nlocal L\n\n------------------------\n--  Northrend Beasts  --\n------------------------\nL = DBM:GetModLocalization(\"NorthrendBeasts\")\n\nL:SetGeneralLocalization({\n\tname = \"诺森德猛兽\"\n})\n\nL:SetWarningLocalization({\n\tWarningSnobold\t\t= \"狗头人奴隶 出现了\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextBoss\t\t= \"下一场战斗\"\n--\tTimerEmerge\t\t\t= \"钻地结束\",\n--\tTimerSubmerge\t\t= \"钻地\"\n})\n\nL:SetOptionLocalization({\n\tsoundConcAuraMastery= \"播放$spell:31821的声音来否定$spell:66330的效果（只针对$spell:19746的主人|cFFF48CBA圣骑士|r\",\n\tWarningSnobold\t\t= \"为狗头人奴隶出现显示警报\",\n\tPingCharge\t\t\t= \"当冰吼即将向你你冲锋时自动点击小地图\",\n\tClearIconsOnIceHowl\t= \"冲锋前清除所有标记\",\n\tTimerNextBoss\t\t= \"显示下一场战斗倒计时\",\n--\tTimerEmerge\t\t\t= \"显示钻地计时\",\n--\tTimerSubmerge\t\t= \"显示钻地结束计时\",\n\tIcehowlArrow\t\t= \"当冰吼即将向你附近冲锋时显示DBM箭头\"\n})\n\nL:SetMiscLocalization({\n\tCharge\t\t\t\t= \"%%s等着(%S+)，发出一阵震耳欲聋的怒吼！\",\n\tCombatStart\t\t\t= \"他来自风暴峭壁最幽深，最黑暗的洞穴，穿刺者戈莫克！准备战斗，英雄们！\",\n\tPhase2\t\t\t\t= \"做好准备，英雄们，两头猛兽已经进入了竞技场！它们是酸喉和恐鳞！\",\n\tPhase3\t\t\t\t= \"当下一名斗士出场时，空气都会为之冻结！它是冰吼，胜或是死，勇士们！\",\n\tGormok\t\t\t\t= \"穿刺者戈莫克\",\n\tAcidmaw\t\t\t\t= \"酸喉\",\n\tDreadscale\t\t\t= \"恐鳞\",\n\tIcehowl\t\t\t\t= \"冰吼\"\n})\n\n---------------------\n--  Lord Jaraxxus  --\n---------------------\nL = DBM:GetModLocalization(\"Jaraxxus\")\n\nL:SetGeneralLocalization({\n\tname = \"加拉克苏斯大王\"\n})\n\nL:SetOptionLocalization({\n\tIncinerateShieldFrame\t= \"在首领血量里显示血肉成灰目标的血量\"\n})\n\nL:SetMiscLocalization({\n\tIncinerateTarget\t\t= \"血肉成灰 -> %s\",\n\tFirstPull\t\t\t\t= \"高阶术士威尔弗雷德·菲兹班将是你们的下一个对手。等待他的上场吧。\"\n})\n\n-------------------------\n--  Faction Champions  --\n-------------------------\nL = DBM:GetModLocalization(\"Champions\")\n\nL:SetGeneralLocalization({\n\tname = \"阵营冠军\"\n})\n\nL:SetMiscLocalization({\n\t--Horde NPCs\n\tGorgrim\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:64:64:96|t 戈瑞姆·影斩\",\t\t\t\t-- 34458\n\tBirana\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t 比莱纳·雷蹄\",\t\t\t\t-- 34451\n\tErin\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t 伊林·雾蹄\",\t\t\t\t-- 34459\n\tRujkah\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:32:64|t 鲁姬卡\",\t\t\t\t\t\t-- 34448\n\tGinselle\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:0:32|t 凋零者吉塞尔\",\t\t\t\t-- 34449\n\tLiandra\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t 莉安德拉·唤日者\",\t\t\t\t-- 34445\n\tMalithas\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t 玛里萨斯·辉刃\",\t\t\t\t-- 34456\n\tCaiphus\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t 严肃的凯普斯\",\t\t\t\t-- 34447\n\tVivienne\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t 暗语者维维尼\",\t\t\t\t-- 34441\n\tMazdinah\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:0:32|t 玛兹迪娜\",\t\t\t\t\t-- 34454\n\tThrakgar\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t 萨卡加尔\",\t\t\t\t\t-- 34444\n\tBroln\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t 布罗恩·粗角\",\t\t\t\t-- 34455\n\tHarkzog\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:32:64|t 德拉克道格\",\t\t\t\t-- 34450\n\tNarrhok\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:0:32|t 断钢者纳霍克\",\t\t\t\t\t-- 34453\n\t--Alliance NPCs\n\tTyrius\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:64:64:96|t 泰利乌斯·达斯布雷德\",\t\t-- 34461\n\tKavina\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t 卡雯娜·林歌\",\t\t\t\t-- 34460\n\tMelador\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t 麦拉多·深谷游者\",\t\t\t-- 34469\n\tAlyssia\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:32:64|t 阿莱希娅·月行者\",\t\t\t\t-- 34467\n\tNoozle\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:0:32|t 努兹尔·啸钉\",\t\t\t\t-- 34468\n\tBaelnor\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t 圣光使者巴尔诺\",\t\t\t\t-- 34471\n\tVelanaa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t 维兰纳\",\t\t\t\t\t\t-- 34465\n\tAnthar\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t 安塔尔·缮炉者\",\t\t\t-- 34466\n\tBrienna\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t 布瑞娜·沉夜\",\t\t\t\t-- 34473\n\tIrieth\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:0:32|t 伊锐丝·影踪\",\t\t\t\t-- 34472\n\tSaamul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t 萨缪尔\",\t\t\t\t\t-- 34470\n\tShaabad\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t 沙拜德\",\t\t\t\t\t-- 34463\n\tSerissa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:32:64|t 塞瑞莎·术轮\",\t\t\t\t-- 34474\n\tShocuul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:0:32|t 索库尔\",\t\t\t\t\t\t-- 34475\n\n\tAllianceVictory\t\t\t= \"荣耀属于联盟！\",\n\tHordeVictory\t\t\t= \"这只是一个小小的开始。为了部落！\",\n\t--YellKill\t\t\t= \"肤浅且可悲的胜利。今天的内耗让我们又一次被削弱了。这种愚蠢的行为只能让巫妖王受益！伟大的战士们就这样白白牺牲，而真正的威胁却步步逼近。巫妖王正计算着我们的死期。\"\n})\n\n---------------------\n--  Val'kyr Twins  --\n---------------------\nL = DBM:GetModLocalization(\"ValkTwins\")\n\nL:SetGeneralLocalization({\n\tname = \"瓦格里双子\"\n})\n\nL:SetWarningLocalization({\n\tWarnSpecialSpellSoon\t= \"特殊技能 即将到来\",\n\tSpecWarnSpecial\t\t\t= \"立刻变换颜色\",\n\tSpecWarnSwitchTarget\t= \"立刻切换目标攻击双生相协\",\n\tSpecWarnKickNow\t\t\t= \"立刻打断\",\n\tWarningTouchDebuff\t\t= \"光明或黑暗之触 -> >%s<\",\n\tWarningPoweroftheTwins2\t= \"双生之能 - 加大治疗 -> >%s<\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpecialSpell\t\t= \"下一次 特殊技能\",\n\tTimerAnubRoleplay\t\t= \"坠落\"\n})\n\nL:SetOptionLocalization({\n\tTimerSpecialSpell\t\t= \"为下一次特殊技能显示计时器\",\n\tTimerAnubRoleplay\t\t= \"计时条：地板破裂前的剧情\",\n\tWarnSpecialSpellSoon\t= \"为下一次特殊技能显示提前警报\",\n\tSpecWarnSpecial\t\t\t= \"当你需要变换颜色时显示特殊警报\",\n\tSpecWarnSwitchTarget\t= \"当另一个首领施放双子相协时显示特殊警报\",\n\tSpecWarnKickNow\t\t\t= \"当你可以打断时显示特殊警报\",\n\tSpecialWarnOnDebuff\t\t= \"当你中了光明或黑暗之触时显示特殊警报(需切换颜色)\",\n\tSetIconOnDebuffTarget\t= \"为光明或黑暗之触的目标设置标记(英雄模式)\",\n\tWarningTouchDebuff\t\t= \"提示光明或黑暗之触的目标\",\n\tWarningPoweroftheTwins2\t= \"提示双生之能的目标\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull = \"以黑暗之主的名义。为了巫妖王。你必死无疑。\",\n--\tCombatStart\t= \"你们只有团结才能战胜最终的挑战。来自于冰冠冰川的深处，天灾军团最强的战将：巫妖王的双翼使者，恐怖的瓦格里！\",\n\tFjola\t\t= \"光明邪使菲奥拉\",\n\tEydis\t\t= \"黑暗邪使艾蒂丝\",\n\tValksRP\t\t= \"让游戏开始吧！\", -- 35709\n\tAnubRP\t\t= \"这是对巫妖王的一次重创！你的实力绝不亚于银色北伐军的勇士。很快，我们将携手攻入冰冠堡垒，消灭天灾军团的残余！只要心齐，我们必将胜利！\"\n})\n\n-----------------\n--  Anub'arak  --\n-----------------\nL = DBM:GetModLocalization(\"Anub'arak_Coliseum\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"阿努巴拉克\"\n})\n\n--L:SetTimerLocalization({\n--\tTimerEmerge\t\t\t= \"钻地结束\",\n--\tTimerSubmerge\t\t= \"钻地\",\n--\ttimerAdds\t\t\t= \"下一次 掘地者出现\"\n--})\n\nL:SetWarningLocalization({\n\tWarnEmerge\t\t\t= \"阿努巴拉克钻出地面了\",\n\tWarnEmergeSoon\t\t= \"10秒后 钻出地面\",\n\tWarnSubmerge\t\t= \"阿努巴拉克钻进地里了\",\n\tWarnSubmergeSoon\t= \"10秒后 钻进地里\",\n\twarnAdds\t\t\t= \"掘地者 出现了\"\n})\n\nL:SetMiscLocalization({\n\tEmerge\t\t\t\t= \"从地面上升起来了！\",\n\tBurrow\t\t\t\t= \"钻入了地下！\",\n\tYellBurrow\t\t\t= \"Auum na-l ak-k-k-k, isshhh。起来，奴仆们，吃吧……\",\n\tPcoldIconSet\t\t= \"刺骨之寒{rt%d} -> %s\",\n\tPcoldIconRemoved\t= \"移除标记 -> %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnEmerge\t\t\t= \"为钻出地面显示警报\",\n\tWarnEmergeSoon\t\t= \"为钻出地面显示提前警报\",\n\tWarnSubmerge\t\t= \"为钻进地里显示警报\",\n\tWarnSubmergeSoon\t= \"为钻进地里显示提前警报\",\n\twarnAdds\t\t\t= \"提示掘地者出现\",\n--\ttimerAdds\t\t\t= \"为下一次掘地者出现显示计时器\",\n--\tTimerEmerge\t\t\t= \"为首领钻地显示计时器\",\n--\tTimerSubmerge\t\t= \"为下一次钻地显示计时器\",\n\tAnnouncePColdIcons\t= \"公布$spell:68510目标设置的标记到团队频道 (需要团长或助理权限)\",\n\tAnnouncePColdIconsRemoved\t= \"当移除$spell:68510的标记时也提示 (需要上述选项)\",\n\tRemoveHealthBuffsInP3\t= \"在第 3 阶段开始时移除健康增益\"\n})\n"
  },
  {
    "path": "DBM-Coliseum/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\n\nlocal L\n\n------------------------\n--  Northrend Beasts  --\n------------------------\nL = DBM:GetModLocalization(\"NorthrendBeasts\")\n\nL:SetGeneralLocalization({\n\tname = \"Bestien von Nordend\"\n})\n\nL:SetWarningLocalization({\n\tWarningSnobold\t\t= \"Schneeboldvasall erschienen auf >%s<\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextBoss\t\t= \"Nächster Boss\"\n--\tTimerEmerge\t\t\t= \"Auftauchen\",\n--\tTimerSubmerge\t\t= \"Abtauchen\"\n})\n\nL:SetOptionLocalization({\n\tsoundConcAuraMastery= \"Spielt den Sound von $spell:31821, um die Effekte von $spell:66330 zu negieren (nur für den |cFFF48CBAPaladin|r, der der Besitzer von $spell:19746 ist)\",\n\tWarningSnobold\t\t= \"Zeige Warnung, wenn ein Schneeboldvasall erscheint\",\n\tPingCharge\t\t\t= \"Ping die Minimap wenn Eisheuler dich niedertrampeln will\",\n\tClearIconsOnIceHowl\t= \"Entferne alle Zeichen vor dem Trampeln\",\n\tTimerNextBoss\t\t= \"Zeige Zeit bis zum Erscheinen des nächsten Bosses\",\n--\tTimerEmerge\t\t\t= \"Zeige Zeit bis Auftauchen\",\n--\tTimerSubmerge\t\t= \"Zeige Zeit bis Abtauchen\",\n\tIcehowlArrow\t\t= \"Zeige DBM-Pfeil, wenn Eisheuler jemand in deiner Nähe niedertrampeln will\"\n})\n\nL:SetMiscLocalization({\n\tCharge\t\t\t\t= \"%%s sieht (%S+) zornig an und lässt einen gewaltigen Schrei ertönen!\",\n\tCombatStart\t\t\t= \"Er kommt aus den tiefsten, dunkelsten Höhlen der Sturmgipfel - Gormok der Pfähler! Voran, Helden!\",\n\tPhase2\t\t\t\t= \"Stählt Euch, Helden, denn die Zwillingsschrecken Ätzschlund und Schreckensmaul erscheinen in der Arena!\",\n\tPhase3\t\t\t\t= \"Mit der Ankündigung unseres nächsten Kämpfers gefriert die Luft selbst: Eisheuler! Tötet oder werdet getötet, Champions!\",\n\tGormok\t\t\t\t= \"Gormok der Pfähler\",\n\tAcidmaw\t\t\t\t= \"Ätzschlund\",\n\tDreadscale\t\t\t= \"Schreckensmaul\",\n\tIcehowl\t\t\t\t= \"Eisheuler\"\n})\n\n---------------------\n--  Lord Jaraxxus  --\n---------------------\nL = DBM:GetModLocalization(\"Jaraxxus\")\n\nL:SetGeneralLocalization({\n\tname = \"Lord Jaraxxus\"\n})\n\nL:SetOptionLocalization({\n\tIncinerateShieldFrame\t= \"Zeige Lebensanzeige mit einem Balken für Fleisch einäschern\"\n})\n\nL:SetMiscLocalization({\n\tIncinerateTarget\t\t= \"Fleisch einäschern: %s\",\n\tFirstPull\t\t\t\t= \"Großhexenmeister Wilfred Zischknall wird Eure nächste Herausforderung beschwören. Harrt seiner Ankunft.\"\n})\n\n-------------------------\n--  Faction Champions  --\n-------------------------\nL = DBM:GetModLocalization(\"Champions\")\n\nL:SetGeneralLocalization({\n\tname = \"Fraktionschampions\"\n})\n\nL:SetMiscLocalization({\n\t--Horde NPCs\n\tGorgrim\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:64:64:96|t Gorgrim Schattenspalter\",\t-- 34458\n\tBirana\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Birana Sturmhuf\",\t\t\t-- 34451\n\tErin\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Erin Nebelhuf\",\t\t\t-- 34459\n\tRujkah\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:32:64|t Ruj'kah\",\t\t\t\t\t\t-- 34448\n\tGinselle\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:0:32|t Ginselle Seuchenwerfer\",\t-- 34449\n\tLiandra\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Liandra Sonnenrufer\",\t\t\t-- 34445\n\tMalithas\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Malithas Glanzklinge\",\t\t-- 34456\n\tCaiphus\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Caiphus der Ernste\",\t\t-- 34447\n\tVivienne\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Vivienne Schwarzraunen\",\t-- 34441\n\tMazdinah\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:0:32|t Maz'dinah\",\t\t\t\t\t-- 34454\n\tThrakgar\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Thrakgar\",\t\t\t\t\t-- 34444\n\tBroln\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Broln Starkhorn\",\t\t\t-- 34455\n\tHarkzog\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:32:64|t Harkzog\",\t\t\t\t\t-- 34450\n\tNarrhok\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:0:32|t Narrhok Stahlbrecher\",\t\t\t-- 34453\n\t--Alliance NPCs\n\tTyrius\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:64:64:96|t Tyrius Dämmerklinge\",\t\t-- 34461\n\tKavina\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Kavina Haineslied\",\t\t-- 34460\n\tMelador\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Melador Talwanderer\",\t\t-- 34469\n\tAlyssia\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:32:64|t Alyssia Mondpirscher\",\t\t-- 34467\n\tNoozle\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:0:32|t Noozle Zischelstock\",\t\t-- 34468\n\tBaelnor\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Baelnor Lichtträger\",\t\t\t-- 34471\n\tVelanaa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Velanaa\",\t\t\t\t\t\t-- 34465\n\tAnthar\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Anthar Schmiedenformer\",\t-- 34466\n\tBrienna\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Brienna Tiefnacht\",\t\t-- 34473\n\tIrieth\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:0:32|t Irieth Schattenschritt\",\t-- 34472\n\tSaamul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Saamul\",\t\t\t\t\t-- 34470\n\tShaabad\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Shaabad\",\t\t\t\t\t-- 34463\n\tSerissa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:32:64|t Serissa Düsterhauch\",\t\t-- 34474\n\tShocuul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:0:32|t Shocuul\",\t\t\t\t\t\t-- 34475\n\n\tAllianceVictory\t\t= \"EHRE DER ALLIANZ!\",\n\tHordeVictory\t\t= \"Das ist nur ein Vorgeschmack auf die Zukunft. FÜR DIE HORDE!\"\n\t--YellKill\t\t\t= \"Ein tragischer Sieg. Wir wurden schwächer durch die heutigen Verluste. Wer außer dem Lichkönig profitiert von solchen Torheiten? Große Krieger gaben ihr Leben. Und wofür? Die wahre Bedrohung erwartet uns noch - der Lichkönig erwartet uns alle im Tod.\"\n})\n\n---------------------\n--  Val'kyr Twins  --\n---------------------\nL = DBM:GetModLocalization(\"ValkTwins\")\n\nL:SetGeneralLocalization({\n\tname = \"Zwillingsval'kyr\"\n})\n\nL:SetWarningLocalization({\n\tWarnSpecialSpellSoon\t\t= \"Spezialfähigkeit bald\",\n\tSpecWarnSpecial\t\t\t\t= \"Farbe wechseln\",\n\tSpecWarnSwitchTarget\t\t= \"Ziel wechseln\",\n\tSpecWarnKickNow\t\t\t\t= \"Jetzt unterbrechen\",\n\tWarningTouchDebuff\t\t\t= \"Berührung auf >%s<\",\n\tWarningPoweroftheTwins2\t\t= \"Macht der Zwillinge - Mehr Heilung auf >%s<\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpecialSpell\t= \"Nächste Spezialfähigkeit\",\n\tTimerAnubRoleplay\t= \"Bodeneinbrüche in\"\n})\n\nL:SetOptionLocalization({\n\tTimerSpecialSpell\t\t\t= \"Zeige Zeit bis nächste Spezialfähigkeit\",\n\tTimerAnubRoleplay\t\t\t= \"Rollenspiel-Timer für der Lichkönig anzeigen, der das Parkett bricht\",\n\tWarnSpecialSpellSoon\t\t= \"Zeige Vorwarnung für nächste Spezialfähigkeit\",\n\tSpecWarnSpecial\t\t\t\t= \"Spezialwarnung, wenn du die Farbe wechseln musst\",\n\tSpecWarnSwitchTarget\t\t= \"Spezialwarnung, wenn der andere Zwilling zaubert\",\n\tSpecWarnKickNow\t\t\t\t= \"Spezialwarnung zum Unterbrechen\",\n\tSpecialWarnOnDebuff\t\t\t= \"Spezialwarnung bei Berührung (um Farbe zu wechseln)\",\n\tSetIconOnDebuffTarget\t\t= \"Setze Zeichen auf Ziele von Berührung des Lichts/der Nacht (heroisch)\",\n\tWarningTouchDebuff\t\t\t= \"Verkünde Ziele von Berührung des Lichts/der Nacht\",\n\tWarningPoweroftheTwins2\t\t= \"Verkünde Ziele von Macht der Zwillinge\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t= \"Im Namen unseres dunklen Meisters. Für den Lichkönig. Ihr. Werdet. Sterben.\",\n--\tCombatStart\t= \"Nur gemeinsam werdet Ihr den letzten Kampf meistern. Aus den Tiefen Eiskrones stammen diese zwei der mächtigsten Kommandanten der Geißel: schreckliche Val'kyr, geflügelte Boten des Lichkönigs!\",\n\tFjola\t\t= \"Fjola Lichtbann\",\n\tEydis\t\t= \"Eydis Nachtbann\",\n\tValksRP\t\t= \"Lasst die Spiele beginnen!\", -- 35709\n\tAnubRP\t\t= \"Dem Lichkönig wurde ein schwerer Schlag versetzt! Ihr habt Euch als würdige Champions erwiesen. Gemeinsam werden wir den Angriff auf die Eiskronenzitadelle durchführen und den Rest der Geißel zerstören! Gemeinsam meistern wir alles!\"\n})\n\n-----------------\n--  Anub'arak  --\n-----------------\nL = DBM:GetModLocalization(\"Anub'arak_Coliseum\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t\t= \"Anub'arak\"\n})\n\n--L:SetTimerLocalization({\n--\tTimerEmerge\t\t\t\t= \"Auftauchen\",\n--\tTimerSubmerge\t\t\t= \"Abtauchen\",\n--\ttimerAdds\t\t\t\t= \"Neue Adds\"\n--})\n\nL:SetWarningLocalization({\n\tWarnEmerge\t\t\t\t= \"Auftauchen\",\n\tWarnEmergeSoon\t\t\t= \"Auftauchen in 10 Sekunden\",\n\tWarnSubmerge\t\t\t= \"Abtauchen\",\n\tWarnSubmergeSoon\t\t= \"Abtauchen in 10 Sekunden\",\n\twarnAdds\t\t\t\t= \"Neue Adds\"\n})\n\nL:SetMiscLocalization({\n\t--YellPull\t\t\t\t= \"Dieser Ort wird Euch als Grab dienen!\",\n\tEmerge\t\t\t\t\t= \"entsteigt dem Boden!\",\n\tBurrow\t\t\t\t\t= \"gräbt sich in den Boden!\",\n\tYellBurrow\t\t\t\t= \"Auum na-l ak-k-k-k, isshhh. Erhebt euch, Diener. Verschlingt...\",\n\tPcoldIconSet\t\t\t= \"DKälte-Zeichen {rt%d} auf %s gesetzt\",\n\tPcoldIconRemoved\t\t= \"DKälte-Zeichen von %s entfernt\"\n})\n\nL:SetOptionLocalization({\n\tWarnEmerge\t\t\t\t= \"Zeige Warnung für Auftauchen\",\n\tWarnEmergeSoon\t\t\t= \"Zeige Vorwarnung für Auftauchen\",\n\tWarnSubmerge\t\t\t= \"Zeige Warnung für Abtauchen\",\n\tWarnSubmergeSoon\t\t= \"Zeige Vorwarnung für Abtauchen\",\n\twarnAdds\t\t\t\t= \"Verkünde neue Adds\",\n--\ttimerAdds\t\t\t\t= \"Zeige Zeit bis neue Adds erscheinen\",\n--\tTimerEmerge\t\t\t\t= \"Zeige Zeit bis Auftauchen\",\n--\tTimerSubmerge\t\t\t= \"Zeige Zeit bis Abtauchen\",\n\tAnnouncePColdIcons\t\t= \"Verkünde Zeichen für Ziele von $spell:66013 im Schlachtzugchat (nur als Leiter)\",\n\tAnnouncePColdIconsRemoved\t= \"Verkünde auch das Entfernen von Zeichen für $spell:66013 (benötigt obige Einstellung)\",\n\tRemoveHealthBuffsInP3\t= \"Entferne lebenspunktesteigernde Buffs in Phase 3\"\n})\n"
  },
  {
    "path": "DBM-Coliseum/localization.en.lua",
    "content": "local L\n\n------------------------\n--  Northrend Beasts  --\n------------------------\nL = DBM:GetModLocalization(\"NorthrendBeasts\")\n\nL:SetGeneralLocalization({\n\tname = \"Northrend Beasts\"\n})\n\nL:SetWarningLocalization({\n\tWarningSnobold\t\t= \"Snobold Vassal spawned on >%s<\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextBoss\t\t= \"Next boss\"\n--\tTimerEmerge\t\t\t= \"Emerge\",\n--\tTimerSubmerge\t\t= \"Submerge\"\n})\n\nL:SetOptionLocalization({\n\tsoundConcAuraMastery= \"Play $spell:31821 sound to negate the effects of $spell:66330 (only for the |cFFF48CBAPaladin|r that is the owner of $spell:19746)\",\n\tWarningSnobold\t\t= \"Show warning for Snobold Vassal spawns\",\n\tPingCharge\t\t\t= \"Ping the minimap when Icehowl is about to charge you\",\n\tClearIconsOnIceHowl\t= \"Clear all icons before charge\",\n\tTimerNextBoss\t\t= \"Show timer for next boss spawn\",\n--\tTimerEmerge\t\t\t= \"Show timer for emerge\",\n--\tTimerSubmerge\t\t= \"Show timer for submerge\",\n\tIcehowlArrow\t\t= \"Show DBM arrow when Icehowl is about to charge near you\"\n})\n\nL:SetMiscLocalization({\n\tCharge\t\t\t\t= \"^%%s glares at (%S+) and lets out\",\n\tCombatStart\t\t\t= \"Hailing from the deepest, darkest caverns of the Storm Peaks, Gormok the Impaler! Battle on, heroes!\",\n\tPhase2\t\t\t\t= \"Steel yourselves, heroes, for the twin terrors, Acidmaw and Dreadscale, enter the arena!\",\n\tPhase3\t\t\t\t= \"The air itself freezes with the introduction of our next combatant, Icehowl! Kill or be killed, champions!\",\n\tGormok\t\t\t\t= \"Gormok the Impaler\",\n\tAcidmaw\t\t\t\t= \"Acidmaw\",\n\tDreadscale\t\t\t= \"Dreadscale\",\n\tIcehowl\t\t\t\t= \"Icehowl\"\n})\n\n---------------------\n--  Lord Jaraxxus  --\n---------------------\nL = DBM:GetModLocalization(\"Jaraxxus\")\n\nL:SetGeneralLocalization({\n\tname = \"Lord Jaraxxus\"\n})\n\nL:SetOptionLocalization({\n\tIncinerateShieldFrame\t= \"Show boss health with a health bar for Incinerate Flesh\"\n})\n\nL:SetMiscLocalization({\n\tIncinerateTarget\t\t= \"Incinerate Flesh: %s\",\n\tFirstPull\t\t\t\t= \"Grand Warlock Wilfred Fizzlebang will summon forth your next challenge. Stand by for his entry.\"\n})\n\n-------------------------\n--  Faction Champions  --\n-------------------------\nL = DBM:GetModLocalization(\"Champions\")\n\nlocal champions = \"Faction Champions\"\nif UnitFactionGroup(\"player\") == \"Alliance\" then\n\tchampions = \"Horde Champions\"\nelseif UnitFactionGroup(\"player\") == \"Horde\" then\n\tchampions = \"Alliance Champions\"\nend\n\nL:SetGeneralLocalization({\n\tname = champions\n})\n\nL:SetMiscLocalization({\n\t--Horde NPCs\n\tGorgrim\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:64:64:96|t Gorgrim Shadowcleave\",\t\t-- 34458\n\tBirana\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Birana Stormhoof\",\t\t\t-- 34451\n\tErin\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Erin Misthoof\",\t\t\t-- 34459\n\tRujkah\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:32:64|t Ruj'kah\",\t\t\t\t\t\t-- 34448\n\tGinselle\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:0:32|t Ginselle Blightslinger\",\t-- 34449\n\tLiandra\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Liandra Suncaller\",\t\t\t-- 34445\n\tMalithas\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Malithas Brightblade\",\t\t-- 34456\n\tCaiphus\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Caiphus the Stern\",\t\t-- 34447\n\tVivienne\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Vivienne Blackwhisper\",\t-- 34441\n\tMazdinah\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:0:32|t Maz'dinah\",\t\t\t\t\t-- 34454\n\tThrakgar\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Thrakgar\",\t\t\t\t\t-- 34444\n\tBroln\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Broln Stouthorn\",\t\t\t-- 34455\n\tHarkzog\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:32:64|t Harkzog\",\t\t\t\t\t-- 34450\n\tNarrhok\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:0:32|t Narrhok Steelbreaker\",\t\t\t-- 34453\n\t--Alliance NPCs\n\tTyrius\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:64:64:96|t Tyrius Duskblade\",\t\t\t-- 34461\n\tKavina\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Kavina Grovesong\",\t\t\t-- 34460\n\tMelador\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Melador Valestrider\",\t\t-- 34469\n\tAlyssia\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:32:64|t Alyssia Moonstalker\",\t\t\t-- 34467\n\tNoozle\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:0:32|t Noozle Whizzlestick\",\t\t-- 34468\n\tBaelnor\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Baelnor Lightbearer\",\t\t\t-- 34471\n\tVelanaa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Velanaa\",\t\t\t\t\t\t-- 34465\n\tAnthar\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Anthar Forgemender\",\t\t-- 34466\n\tBrienna\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Brienna Nightfell\",\t\t-- 34473\n\tIrieth\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:0:32|t Irieth Shadowstep\",\t\t\t-- 34472\n\tSaamul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Saamul\",\t\t\t\t\t-- 34470\n\tShaabad\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Shaabad\",\t\t\t\t\t-- 34463\n\tSerissa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:32:64|t Serissa Grimdabbler\",\t\t-- 34474\n\tShocuul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:0:32|t Shocuul\",\t\t\t\t\t\t-- 34475\n\n\tAllianceVictory\t\t= \"GLORY TO THE ALLIANCE!\",\n\tHordeVictory\t\t= \"That was just a taste of what the future brings. FOR THE HORDE!\"\n\t--YellKill\t\t\t= \"A shallow and tragic victory. We are weaker as a whole from the losses suffered today. Who but the Lich King could benefit from such foolishness? Great warriors have lost their lives. And for what? The true threat looms ahead - the Lich King awaits us all in death.\"\n})\n\n---------------------\n--  Val'kyr Twins  --\n---------------------\nL = DBM:GetModLocalization(\"ValkTwins\")\n\nL:SetGeneralLocalization({\n\tname = \"Val'kyr Twins\"\n})\n\nL:SetWarningLocalization({\n\tWarnSpecialSpellSoon\t\t= \"Special ability soon\",\n\tSpecWarnSpecial\t\t\t\t= \"Change color\",\n\tSpecWarnSwitchTarget\t\t= \"Switch target\",\n\tSpecWarnKickNow\t\t\t\t= \"Interrupt now\",\n\tWarningTouchDebuff\t\t\t= \"Debuff on >%s<\",\n\tWarningPoweroftheTwins2\t\t= \"Power of the Twins - More healing on >%s<\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpecialSpell\t\t\t= \"Next special ability\",\n\tTimerAnubRoleplay\t\t\t= \"Floor breaks in\"\n})\n\nL:SetOptionLocalization({\n\tTimerSpecialSpell\t\t\t= \"Show timer for next special ability\",\n\tTimerAnubRoleplay\t\t\t= \"Show roleplay timer for Lich King breaking the floor\",\n\tWarnSpecialSpellSoon\t\t= \"Show pre-warning for next special ability\",\n\tSpecWarnSpecial\t\t\t\t= \"Show special warning when you have to change color\",\n\tSpecWarnSwitchTarget\t\t= \"Show special warning when the other Twin is casting\",\n\tSpecWarnKickNow\t\t\t\t= \"Show special warning when you have to interrupt\",\n\tSpecialWarnOnDebuff\t\t\t= \"Show change color special warning when touch debuffed (to switch debuff)\",\n\tSetIconOnDebuffTarget\t\t= \"Set icons on Touch of Light/Darkness debuff targets (heroic)\",\n\tWarningTouchDebuff\t\t\t= \"Announce Touch of Light/Darkness debuff targets\",\n\tWarningPoweroftheTwins2\t\t= \"Announce Power of the Twins targets\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t= \"In the name of our dark master. For the Lich King. You. Will. Die.\",\n--\tCombatStart\t= \"Only by working together will you overcome the final challenge. From the depths of Icecrown come two of the Scourge's most powerful lieutenants: fearsome val'kyr, winged harbingers of the Lich King!\",\n\tFjola\t\t= \"Fjola Lightbane\",\n\tEydis\t\t= \"Eydis Darkbane\",\n\tValksRP\t\t= \"Let the games begin!\", -- 35709\n\tAnubRP\t\t= \"A mighty blow has been dealt to the Lich King! You have proven yourselves as able bodied champions of the Argent Crusade. Together we will strike against Icecrown Citadel and destroy what remains of the Scourge! There is no challenge that we cannot face united!\"\n})\n\n-----------------\n--  Anub'arak  --\n-----------------\nL = DBM:GetModLocalization(\"Anub'arak_Coliseum\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t\t= \"Anub'arak\"\n})\n\nL:SetTimerLocalization({\n--\tTimerEmerge\t\t\t\t= \"Emerge\",\n--\tTimerSubmerge\t\t\t= \"Submerge\",\n--\ttimerAdds\t\t\t\t= \"New adds\"\n})\n\nL:SetWarningLocalization({\n\tWarnEmerge\t\t\t\t= \"Anub'arak emerges\",\n\tWarnEmergeSoon\t\t\t= \"Emerge in 10 seconds\",\n\tWarnSubmerge\t\t\t= \"Anub'arak submerges\",\n\tWarnSubmergeSoon\t\t= \"Submerge in 10 seconds\",\n\twarnAdds\t\t\t\t= \"New adds\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t\t\t= \"This place will serve as your tomb!\",\n\tEmerge\t\t\t\t= \"emerges from the ground!\",\n\tBurrow\t\t\t\t= \"burrows into the ground!\",\n\tYellBurrow\t\t\t= \"Auum na-l ak-k-k-k, isshhh. Rise, minions. Devour...\",\n\tPcoldIconSet\t\t= \"PCold icon {rt%d} set on %s\",\n\tPcoldIconRemoved\t= \"PCold icon removed from %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnEmerge\t\t\t\t\t= \"Show warning for emerge\",\n\tWarnEmergeSoon\t\t\t\t= \"Show pre-warning for emerge\",\n\tWarnSubmerge\t\t\t\t= \"Show warning for submerge\",\n\tWarnSubmergeSoon\t\t\t= \"Show pre-warning for submerge\",\n\twarnAdds\t\t\t\t\t= \"Announce new adds\",\n--\ttimerAdds\t\t\t\t\t= \"Show timer for new adds\",\n--\tTimerEmerge\t\t\t\t\t= \"Show timer for emerge\",\n--\tTimerSubmerge\t\t\t\t= \"Show timer for submerge\",\n\tAnnouncePColdIcons\t\t\t= \"Announce icons for $spell:66013 targets to raid chat (requires raid leader)\",\n\tAnnouncePColdIconsRemoved\t= \"Announce when icons are removed for $spell:66013 (requires raid leader)\",\n\tRemoveHealthBuffsInP3\t\t= \"Remove HP buffs at start of Phase 3\"\n})\n"
  },
  {
    "path": "DBM-Coliseum/localization.es.lua",
    "content": "﻿if GetLocale() ~= \"esES\" then return end\n\nlocal L\n\n-------------------------------\n-- Las bestias de Rasganorte --\n-------------------------------\nL = DBM:GetModLocalization(\"NorthrendBeasts\")\n\nL:SetGeneralLocalization({\n\tname = \"Las bestias de Rasganorte\"\n})\n\nL:SetWarningLocalization({\n\tWarningSnobold\t\t= \"Vasallo snóbold en >%s<\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextBoss\t\t= \"Siguiente jefe\"\n--\tTimerEmerge\t\t\t= \"Emersión\",\n--\tTimerSubmerge\t\t= \"Sumersión\"\n})\n\nL:SetOptionLocalization({\n\tsoundConcAuraMastery= \"Reproducir el sonido de $spell:31821 para anular los efectos de $spelll:66330 (sólo para el |cFFF48CBAPaladín|r que es el propietario de $spell:19746)\",\n\tWarningSnobold\t\t= \"Mostrar aviso cuando aparezca un Vasallo snóbold\",\n\tPingCharge\t\t\t= \"Pulsar en el Minimapa si Aullahielo va a por Ti\",\n\tClearIconsOnIceHowl\t= \"Quitar todos los iconos antes de cada carga\",\n\tTimerNextBoss\t\t= \"Mostrar temporizador para el siguiente jefe\",\n--\tTimerEmerge\t\t\t= \"Mostrar temporizador para cuando Fauceácida y Aterraescama regresen a la superficie\",\n--\tTimerSubmerge\t\t= \"Mostrar temporizador para cuando Fauceácida y Aterraescama se sumerjan en la tierra\",\n\tIcehowlArrow\t\t= \"Mostrar flecha cuando Aullahielo vaya a cargar hacia ti\"\n})\n\nL:SetMiscLocalization({\n\tCharge\t\t\t\t= \"¡%%s mira a (%S+) y emite un bramido!\",\n\tCombatStart\t\t\t= \"Desde las cavernas más oscuras y profundas de Las Cumbres Tormentosas: ¡Gormok el Empalador! ¡A luchar, héroes!\",\n\tPhase2\t\t\t\t= \"Preparaos, héroes, para los temibles gemelos: ¡Fauceácida y Aterraescama! ¡A la arena!\",\n\tPhase3\t\t\t\t= \"El propio aire se congela al presentar a nuestro siguiente combatiente: ¡Aullahielo! ¡Matad o morid, campeones!\",\n\tGormok\t\t\t\t= \"Gormok el Empalador\",\n\tAcidmaw\t\t\t\t= \"Fauceácida\",\n\tDreadscale\t\t\t= \"Aterraescama\",\n\tIcehowl\t\t\t\t= \"Aullahielo\"\n})\n\n-------------------\n-- Lord Jaraxxus --\n-------------------\nL = DBM:GetModLocalization(\"Jaraxxus\")\n\nL:SetGeneralLocalization({\n\tname = \"Lord Jaraxxus\"\n})\n\nL:SetOptionLocalization({\n\tIncinerateShieldFrame\t= \"Mostrar salud del jefe en una barra de vida durante Incinerar carne\"\n})\n\nL:SetMiscLocalization({\n\tIncinerateTarget\t\t= \"Incinerar carne: %s\",\n\tFirstPull\t\t\t\t= \"El gran brujo Wilfred Chispobang invocará al siguiente contrincante. Esperad a que aparezca.\"\n})\n\n-----------------------------\n-- Campeones de la facción --\n-----------------------------\nL = DBM:GetModLocalization(\"Champions\")\n\nlocal champions = \"Campeones de la facción\"\nif UnitFactionGroup(\"player\") == \"Alliance\" then\n\tchampions = \"Campeones de la Horda\"\nelseif UnitFactionGroup(\"player\") == \"Horde\" then\n\tchampions = \"Campeones de la Alianza\"\nend\n\nL:SetGeneralLocalization({\n\tname = champions\n})\n\nL:SetMiscLocalization({\n\t--Horde NPCs\n\tGorgrim\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:64:64:96|t Gorgrim Rajasombra\",\t\t\t-- 34458\n\tBirana\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Birana Pezuña Tempestuosa\",-- 34451\n\tErin\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Erin Pezuña de Niebla\",\t-- 34459\n\tRujkah\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:32:64|t Ruj'kah\",\t\t\t\t\t\t-- 34448\n\tGinselle\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:0:32|t Ginselle Lanzaañublo\",\t\t-- 34449\n\tLiandra\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Liandra Clamasol\",\t\t\t-- 34445\n\tMalithas\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Malithas Hoja Brillante\",\t\t-- 34456\n\tCaiphus\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Caiphus el Austero\",\t\t-- 34447\n\tVivienne\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Vivienne Susurro Oscuro\",\t-- 34441\n\tMazdinah\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:0:32|t Maz'dinah\",\t\t\t\t\t-- 34454\n\tThrakgar\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Thrakgar\",\t\t\t\t\t-- 34444\n\tBroln\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Broln Cuernorrecio\",\t\t-- 34455\n\tHarkzog\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:32:64|t Harkzog\",\t\t\t\t\t-- 34450\n\tNarrhok\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:0:32|t Narrhok Rompeacero\",\t\t\t-- 34453\n\t--Alliance NPCs\n\tTyrius\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:64:64:96|t Tyrius Hoja Umbría\",\t\t\t-- 34461\n\tKavina\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Kavina Canto Arboleda\",\t-- 34460\n\tMelador\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Melador Caminavalles\",\t\t-- 34469\n\tAlyssia\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:32:64|t Alyssia Acechalunas\",\t\t\t-- 34467\n\tNoozle\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:0:32|t Noozle Varapalo\",\t\t\t-- 34468\n\tBaelnor\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Baelnor Portador de la Luz\",\t-- 34471\n\tVelanaa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Velanaa\",\t\t\t\t\t\t-- 34465\n\tAnthar\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Anthar Ensalmaforja\",\t\t-- 34466\n\tBrienna\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Brienna Talanoche\",\t\t-- 34473\n\tIrieth\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:0:32|t Irieth Paso Sombrío\",\t\t-- 34472\n\tSaamul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Saamul\",\t\t\t\t\t-- 34470\n\tShaabad\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Shaabad\",\t\t\t\t\t-- 34463\n\tSerissa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:32:64|t Serissa Desventura\",\t\t-- 34474\n\tShocuul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:0:32|t Shocuul\",\t\t\t\t\t\t-- 34475\n\n\tAllianceVictory\t\t= \"¡GLORIA A LA ALIANZA!\",\n\t--AllianceVictory\t= \"¡GLORIA PARA LA ALIANZA!\" -- esMX\n\tHordeVictory\t\t= \"Eso solo ha sido una muestra de lo que depara el futuro. ¡POR LA HORDA!\"\n\t--HordeVictory\t\t= \"Eso es sólo una probada de lo que traerá el futuro. ¡POR LA HORDA!\" -- esMX\n\t--YellKill\t\t\t= \"Una victoria trágica y fútil. Hoy somos menos por las pérdidas que hemos sufrido. ¿Quién podría beneficiarse de tal insensatez además del Rey Exánime? Grandes guerreros han perdido la vida. ¿Y para qué? La verdadera amenaza aguarda, el Rey Exánime nos espera a todos en la muerte.\"\n\t--YellKill\t\t\t= \"Una victoria trágica y superficial. Nuestra integridad se vio debilitada por las pérdidas que hoy sufrimos. ¿Quién más que el Rey Exánime puede haberse beneficiado de tal insensatez? Grandes guerreros han perdido sus vidas. ¿Y para qué? La verdadera amenaza se entreteje en el futuro: el Rey Exánime nos espera en la muerte.\" -- esMX\n})\n\nL:SetOptionLocalization({\n\tPlaySoundOnBladestorm\t= \"Reproducir sonido en Filotormenta\"\n})\n\n---------------------\n-- Gemelas Val'kyr --\n---------------------\nL = DBM:GetModLocalization(\"ValkTwins\")\n\nL:SetGeneralLocalization({\n\tname = \"Gemelas Val'kyr\"\n})\n\nL:SetWarningLocalization({\n\tWarnSpecialSpellSoon\t\t= \"Facultad especial en breve\",\n\tSpecWarnSpecial\t\t\t\t= \"Cambia de color\",\n\tSpecWarnSwitchTarget\t\t= \"Cambia de objetivo\",\n\tSpecWarnKickNow\t\t\t\t= \"Interrumpe ahora\",\n\tWarningTouchDebuff\t\t\t= \"Perjuicio en >%s<\",\n\tWarningPoweroftheTwins2\t\t= \"Poder de las Gemelas - ¡más sanación en >%s<!\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpecialSpell\t\t\t= \"Siguiente facultad especial\",\n\tTimerAnubRoleplay\t\t\t= \"El piso se rompe en\"\n})\n\nL:SetOptionLocalization({\n\tTimerSpecialSpell\t\t\t= \"Mostrar temporizador para la siguiente facultad especial\",\n\tTimerAnubRoleplay\t\t\t= \"Mostrar temporizador de diálogo de El Rey Exánime rompiendo el piso\",\n\tWarnSpecialSpellSoon\t\t= \"Mostrar aviso previo para la siguiente facultad especial\",\n\tSpecWarnSpecial\t\t\t\t= \"Mostrar aviso especial cuando debas cambiar de color\",\n\tSpecWarnSwitchTarget\t\t= \"Mostrar aviso especial cuando la otra gemela esté lanzando un hechizo\",\n\tSpecWarnKickNow\t\t\t\t= \"Mostrar aviso especial cuando debas interrumpir\",\n\tSpecialWarnOnDebuff\t\t\t= \"Mostrar aviso especial cuando estés afectado por un perjuicio (para cambiarlo por otro)\",\n\tSetIconOnDebuffTarget\t\t= \"Poner iconos en los objetivos de los perjuicios de $spell:65950 y $spell:66001 (dificultad heroica)\",\n\tWarningTouchDebuff\t\t\t= \"Anunciar objetivos de los perjuicios de $spell:65950 y $spell:66001\",\n\tWarningPoweroftheTwins2\t\t= \"Anunciar la gemela afectada por $spell:65916\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t= \"En el nombre de nuestro oscuro maestro. Por el Rey Exánime. Morirás.\",\n--\tCombatStart\t= \"Solo superaréis el reto final si trabajáis juntos. Desde las profundidades de Corona de Hielo, llegan dos de los tenientes más poderosos de la Plaga: las temibles Val'kyr, presagistas aladas del Rey Exánime.\",\t-- esES\n--\tCombatStart\t= \"Sólo trabajando juntos superarán el desafío final. De las profundidades de Corona de Hielo llegan estos poderosos tenientes de la Plaga: ¡los val'kyres, heraldos alados del Rey Exánime!\",\t-- esMX\n\tFjola\t\t= \"Fjola Penívea\",\n\tEydis\t\t= \"Eydis Penaumbra\",\n\tValksRP\t\t= \"¡Que comiencen los juegos!\", -- 35709\n\tAnubRP\t\t= \"¡Se ha asestado un gran golpe al Rey Exánime! Habéis demostrado ser diestros campeones de la Cruzada Argenta. ¡Juntos atacaremos la Ciudadela de la Corona de Hielo y acabaremos con lo que queda de la Plaga! ¡No hay ningún reto al que no podamos enfrentarnos si estamos unidos!\" -- esES\n--\tAnubRP\t\t= \"¡El Rey Exánime ha sufrido un poderoso revés! Han demostrado ser campeones dignos de la Cruzada Argenta. ¡Juntos atacaremos la Ciudadela Corona de Hielo y destruiremos lo que queda de la Plaga! ¡No existe el desafío que no podamos enfrentar unidos!\"\t-- esMX\n})\n\n---------------\n-- Anub'arak --\n---------------\nL = DBM:GetModLocalization(\"Anub'arak_Coliseum\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t\t= \"Anub'arak\"\n})\n\n--L:SetTimerLocalization({\n--\tTimerEmerge\t\t\t\t= \"Emersión\",\n--\tTimerSubmerge\t\t\t= \"Sumersión\",\n--\ttimerAdds\t\t\t\t= \"Siguientes esbirros\"\n--})\n\nL:SetWarningLocalization({\n\tWarnEmerge\t\t\t\t= \"Anub'arak regresa a la superficie\",\n\tWarnEmergeSoon\t\t\t= \"Emersión en 10 s\",\n\tWarnSubmerge\t\t\t= \"Anub'arak se entierra en el suelo\",\n\tWarnSubmergeSoon\t\t= \"Sumersión en 10 s\",\n\twarnAdds\t\t\t\t= \"Siguientes esbirros\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t\t\t\t= \"¡Este lugar será vuestra tumba!\",\n\tEmerge\t\t\t\t= \"emerge de la tierra!\",\n\tBurrow\t\t\t\t= \"se entierra en el suelo!\",\n\tYellBurrow\t\t\t= \"Auum na-l ak-k-k-k, isshhh. Alzaos, esbirros. Devorad…\",\n--\tYellBurrow\t\t\t= \"Auum na-l ak-k-k-k, isshhh. Despierten, lacayos. Devoren…\" --esMX\n\tPcoldIconSet\t\t= \"Icono {rt%d} colocado en %s\",\n\tPcoldIconRemoved\t= \"Icono quitado en %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnEmerge\t\t\t\t= \"Mostrar aviso cuando Anub'arak regrese a la superficie\",\n\tWarnEmergeSoon\t\t\t= \"Mostrar aviso previo para cuando Anub'arak regrese a la superficie\",\n\tWarnSubmerge\t\t\t= \"Mostrar aviso cuando Anub'arak se entierre en el suelo\",\n\tWarnSubmergeSoon\t\t= \"Mostrar aviso previo para cuando Anub'arak se entierre en el suelo\",\n\twarnAdds\t\t\t\t= \"Anunciar cuando aparezcan esbirros\",\n--\ttimerAdds\t\t\t\t= \"Mostrar temporizador para los siguientes esbirros\",\n--\tTimerEmerge\t\t\t\t= \"Mostrar temporizador para cuando Anub'arak regrese a la superficie\",\n--\tTimerSubmerge\t\t\t= \"Mostrar temporizador para cuando Anub'arak se entierre en el suelo\",\n\tAnnouncePColdIcons\t\t= \"Anunciar iconos de los objetivos de $spell:66013 en el chat de banda (requiere líder o ayudante)\",\n\tAnnouncePColdIconsRemoved\t= \"Anunciar iconos quitados de los objetivos de $spell:66013 (requiere que la opción anterior esté habilitada)\",\n\tRemoveHealthBuffsInP3\t= \"Quitar bufos de vida al inicio de la fase 3\"\n})\n"
  },
  {
    "path": "DBM-Coliseum/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\n\nlocal L\n\n------------------------\n--  Northrend Beasts  --\n------------------------\nL = DBM:GetModLocalization(\"NorthrendBeasts\")\n\nL:SetGeneralLocalization({\n\tname = \"Les Bêtes du Norfendre\"\n})\n\nL:SetWarningLocalization({\n\tWarningSnobold\t\t\t\t= \"Un Vassal frigbold viens d'arriver sur >%s<\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextBoss\t\t\t\t= \"Prochain boss dans\"\n--\tTimerEmerge\t\t\t\t\t= \"Sort du sol\",\n--\tTimerSubmerge\t\t\t\t= \"Rentre dans le sol\"\n})\n\nL:SetOptionLocalization({\n\tsoundConcAuraMastery\t\t= \"Jouer le son $spell:31821 pour annuler les effets de $spell:66330 (seulement pour le |cFFF48CBAPaladin|r qui est le propriétaire de $spell:19746)\",\n\tWarningSnobold\t\t\t\t= \"Montre une alerte quand les Vassal arrivent\",\n\tPingCharge\t\t\t\t\t= \"Ping sur la minimap quand Glace-hurlante va vous charger\",\n\tClearIconsOnIceHowl\t\t\t= \"Enlève toutes les icônes avant la prochaine charge\",\n--\tTimerNextBoss\t\t\t\t= \"Montre le timer pour l'arrivée du prochain boss\",\n--\tTimerEmerge\t\t\t\t\t= \"Montre le timer avant que les vers rentre dans le sol\",\n\tTimerSubmerge\t\t\t\t= \"Montre le timer avant que les vers sortent du sol\"\n})\n\nL:SetMiscLocalization({\n\tCharge\t\t\t= \"fusille (%S+) du regard\",\n\tCombatStart\t\t= \"Arrivant tout droit des plus noires et profondes cavernes des pics Foudroyés, Gormok l'Empaleur !\",\n\tPhase2\t\t\t= \"car voici que les terreurs jumelles\",\n\tPhase3\t\t\t= \"de notre prochain combattant\",\n\tGormok\t\t\t= \"Gormok l'Empaleur\",\n\tAcidmaw\t\t\t= \"Gueule-d'acide\",\n\tDreadscale\t\t= \"Ecaille-d'effroi\",\n\tIcehowl\t\t\t= \"Glace-hurlante\"\n})\n\n-------------------\n-- Lord Jaraxxus --\n-------------------\nL = DBM:GetModLocalization(\"Jaraxxus\")\n\nL:SetGeneralLocalization({\n\tname = \"Seigneur Jaraxxus\"\n})\n\nL:SetOptionLocalization({\n\tIncinerateShieldFrame\t= \"Montre la vie du Boss avec une barre de vie pour Incinérer la chair\"\n})\n\nL:SetMiscLocalization({\n\tIncinerateTarget\t\t= \"Incinérer la chair: %s\",\n\tFirstPull\t\t\t\t= \"Le grand démoniste Wilfred Flopboum va invoquer votre prochain défi. Ne bougez pas, il arrive.\"\n})\n\n-----------------------\n-- Faction Champions --\n-----------------------\nL = DBM:GetModLocalization(\"Champions\")\n\nL:SetGeneralLocalization({\n\tname = \"Champion des Factions\"\n})\n\nL:SetMiscLocalization({\n\t--Horde NPCs\n\tGorgrim\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:64:64:96|t Gorgrim Fend-les-ombres\",\t-- 34458\n\tBirana\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Birana Sabot-Tempête\",\t\t-- 34451\n\tErin\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Erin Sabot-de-brume\",\t\t-- 34459\n\tRujkah\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:32:64|t Ruj'kah\",\t\t\t\t\t\t-- 34448\n\tGinselle\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:0:32|t Ginselle Jettechancre\",\t\t-- 34449\n\tLiandra\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Liandra Mande-soleil\",\t\t-- 34445\n\tMalithas\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Malithas Brillelame\",\t\t\t-- 34456\n\tCaiphus\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Caiphus le Sévère\",\t\t-- 34447\n\tVivienne\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Vivienne Murmenoir\",\t\t-- 34441\n\tMazdinah\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:0:32|t Maz'dinah\",\t\t\t\t\t-- 34454\n\tThrakgar\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Thrakgar\",\t\t\t\t\t-- 34444\n\tBroln\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Broln Corne-Rude\",\t\t\t-- 34455\n\tHarkzog\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:32:64|t Harkzog\",\t\t\t\t\t-- 34450\n\tNarrhok\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:0:32|t Narrhok Brise-acier\",\t\t\t-- 34453\n\t--Alliance NPCs\n\tTyrius\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:64:64:96|t Tyrius Lamebrune\",\t\t\t-- 34461\n\tKavina\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Kavina Chantebosquet\",\t\t-- 34460\n\tMelador\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Melador Arpenteval\",\t\t-- 34469\n\tAlyssia\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:32:64|t Alyssia Traquelune\",\t\t\t-- 34467\n\tNoozle\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:0:32|t Touillert Vizitige\",\t\t-- 34468\n\tBaelnor\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Baelnor Portelumière\",\t\t-- 34471\n\tVelanaa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Velanaa\",\t\t\t\t\t\t-- 34465\n\tAnthar\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Anthar Soigneforge\",\t\t-- 34466\n\tBrienna\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Brienna Tombenuit\",\t\t-- 34473\n\tIrieth\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:0:32|t Irieth Pas-de-l'ombre\",\t\t-- 34472\n\tSaamul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Saamul\",\t\t\t\t\t-- 34470\n\tShaabad\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Shaabad\",\t\t\t\t\t-- 34463\n\tSerissa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:32:64|t Serissa Funèbricole\",\t\t-- 34474\n\tShocuul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:0:32|t Shocuul\",\t\t\t\t\t\t-- 34475\n\n\tAllianceVictory\t\t\t= \"GLOIRE À L'ALLIANCE !\",\n\tHordeVictory\t\t\t= \"Et ce n'était qu'un avant-goût de ce que l'avenir vous réserve. POUR LA HORDE !\"\n\t--YellKill\t\t\t\t= \"Une victoire tragique et dépourvue de sens. La perte subie aujourd'hui nous affaiblira tous, car qui d'autre que le roi-liche pourrait bénéficier d'une telle folie ? De grands guerriers ont perdu la vie. Et pour quoi ? La vraie menace plane à l'horizon : le roi-liche nous attend, tous, dans la mort.\"\n})\n\n------------------\n-- Valkyr Twins --\n------------------\nL = DBM:GetModLocalization(\"ValkTwins\")\n\nL:SetGeneralLocalization({\n\tname = \"Soeurs Val'kyr\"\n})\n\nL:SetWarningLocalization({\n\tWarnSpecialSpellSoon\t\t= \"Capacité spéciale Bientôt !\",\n\tSpecWarnSpecial\t\t\t\t= \"Changement de couleur !\",\n\tSpecWarnSwitchTarget\t\t= \"Changement de cible !\",\n\tSpecWarnKickNow\t\t\t\t= \"Casser Maintenant !\",\n\tWarningTouchDebuff\t\t\t= \"Toucher sur >%s<\",\n\tWarningPoweroftheTwins2\t\t= \"Puissance des jumelles - plus de soins sur >%s<\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpecialSpell\t\t\t= \"Prochaine Capacité Spéciale\",\n\tTimerAnubRoleplay\t\t\t= \"Pauses de sol en\"\n})\n\nL:SetOptionLocalization({\n\tTimerSpecialSpell\t\t\t= \"Montre une alerte spéciale pour la prochaine Capacité spéciale\",\n\tTimerAnubRoleplay\t\t\t= \"Afficher le timer de la durée du roleplay du Le Roi Liche cassant le sol\",\n\tWarnSpecialSpellSoon\t\t= \"Montre une Pré-Alerte pour la prochaine Capacité spéciale\",\n\tSpecWarnSpecial\t\t\t\t= \"Montre une alerte spéciale quand vous devez changer de couleur\",\n\tSpecWarnSwitchTarget\t\t= \"Montre une alerte spéciale quand l'autre boss est en train d'incanter\",\n\tSpecWarnKickNow\t\t\t\t= \"Montre une alerte spéciale quand vous devez interrompre l'incantation\",\n\tSpecialWarnOnDebuff\t\t\t= \"Montre une alerte spéciale quand vous avez un Toucher (pour changer de debuff)\",\n\tSetIconOnDebuffTarget\t\t= \"Met des icônes sur les cibles des Toucher (héroique)\",\n\tWarningTouchDebuff\t\t\t= \"Annoncer les cibles des débuff Toucher de Lumière/des Ténèbres\",\n\tWarningPoweroftheTwins2\t\t= \"Annoncer la cible pour Puissance des jumelles\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t= \"Au nom de notre ténébreux maître. Pour le roi-liche. Vous. Allez. Mourir.\",\n--\tCombatStart\t= \"Ce n'est qu'en travaillant côte à côte que vous pourrez triompher de l'ultime défi. Venus des profondeurs de la Couronne de glace, voici deux des lieutenants les plus puissants du Fléau : de redoutables val'kyrs, messagères ailées du roi-liche !\",\n\tFjola\t\t= \"Fjola Plaie-lumineuse\",\n\tEydis\t\t= \"Eydis Plaie-sombre\",\n\tValksRP\t\t= \"Que les jeux commencent !\", -- 35709\n\tAnubRP\t\t= \"C'est un rude coup qui vient d'être porté au roi-liche ! Vous avez prouvé que vous êtes aptes à servir comme champions de la Croisade d'argent. Ensemble, nous frapperons la citadelle de la Couronne de glace, et détruirons ce qui reste du Fléau ! Aucun défi ne pourra résister à notre unité !\"\n})\n\n-----------------\n--  Anub'arak  --\n-----------------\nL = DBM:GetModLocalization(\"Anub'arak_Coliseum\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t\t= \"Anub'arak\"\n})\n\n--L:SetTimerLocalization({\n--\tTimerEmerge\t\t\t\t= \"Sort du sol\",\n--\tTimerSubmerge\t\t\t= \"Rentre dans le sol\",\n--\ttimerAdds\t\t\t\t= \"Nouveaux add dans\"\n--})\n\nL:SetWarningLocalization({\n\tWarnEmerge\t\t\t\t= \"Anub'arak Sort du sol\",\n\tWarnEmergeSoon\t\t\t= \"Anub'arak Sort du sol dans 10 sec\",\n\tWarnSubmerge\t\t\t= \"Anub'arak Rentre dans le sol\",\n\tWarnSubmergeSoon\t\t= \"Anub'arak Rentre dans le sol dans 10 sec\",\n\twarnAdds\t\t\t\t= \"Les add arrivent\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t\t\t\t= \"Ce terreau sera votre tombeau !\",\n\tEmerge\t\t\t\t\t= \"surgit de la terre\",\n\tBurrow\t\t\t\t\t= \"enfonce dans le sol\",\n\tYellBurrow\t\t\t\t= \"Auum na-l ak-k-k-k, isshhh. Debout, mes serviteurs. Dévorez...\",\n\tPcoldIconSet\t\t\t= \"Pcold Icon {rt%d} set on %s\",\n\tPcoldIconRemoved\t\t= \"Pcold Icon removed from %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnEmerge\t\t\t\t= \"Montre une alerte quand le boss sort du sol\",\n\tWarnEmergeSoon\t\t\t= \"Montre une alerte avant que le boss sorte du sol\",\n\tWarnSubmerge\t\t\t= \"Montre une alerte quand le boss rentre dans le sol\",\n\tWarnSubmergeSoon\t\t= \"Montre une alerte avant que le boss ne rentre dans le sol\",\n\twarnAdds\t\t\t\t= \"Montre une alerte pour l'arrivée des add\",\n--\ttimerAdds\t\t\t\t= \"Montre le timer avant l'arrivée des nouveaux add\",\n--\tTimerEmerge\t\t\t\t= \"Montre le timer pour la sortie du boss\",\n--\tTimerSubmerge\t\t\t= \"Montre le timer pour la rentrée du boss dans la terre\",\n\tAnnouncePColdIcons\t\t= \"Marque les icones des cible du Froid pénétrant dans le chatt (Requiert les annonces activer et être le leader ou avoir une promot)\",\n\tAnnouncePColdIconsRemoved\t= \"Annoncez également lorsque les icônes sont supprimées pour $spell:66013 (nécessite l'option ci-dessus)\",\n\tRemoveHealthBuffsInP3\t= \"Enlève les buffs de soins au début de la phase 3\"\n})\n"
  },
  {
    "path": "DBM-Coliseum/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\n\nlocal L\n\n------------------------\n--  Northrend Beasts  --\n------------------------\nL = DBM:GetModLocalization(\"NorthrendBeasts\")\n\nL:SetGeneralLocalization({\n\tname = \"노스렌드의 야수\"\n})\n\nL:SetWarningLocalization({\n\tWarningSnobold\t\t\t= \"스노볼트 부하 생성 : >%s<\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextBoss\t\t\t= \"곧 다음 우두머리\"\n--\tTimerEmerge\t\t\t\t= \"출현\",\n--\tTimerSubmerge\t\t\t= \"숨기\"\n})\n\nL:SetOptionLocalization({\n\tsoundConcAuraMastery\t= \"$spell:31821 사운드를 재생하여 $spell:66330의 효과를 무효화합니다($spell:19746의 소유자인 |cFFF48CBA성기사|r만 해당)\",\n\tWarningSnobold\t\t\t= \"스노볼트 부하 생성 알림 보기\",\n\tPingCharge\t\t\t\t= \"얼음울음에게 사나운 돌진의 대상이 될 경우 미니맵에 핑 표시하기\",\n\tClearIconsOnIceHowl\t\t= \"사나운 돌진 전에 모든 전술 목표 아이콘 지움\",\n\tTimerNextBoss\t\t\t= \"다음 우두머리 등장 바 보기\",\n--\tTimerEmerge\t\t\t\t= \"출현 바 보기\",\n--\tTimerSubmerge\t\t\t= \"숨기 바 보기\",\n\tIcehowlArrow\t\t\t= \"사나운 돌진 대상이 가까이 있을 경우 DBM 화살표 보기\"\n})\n\nL:SetMiscLocalization({\n\tCharge\t\t\t\t\t= \"노려보며 큰 소리로 울부짖습니다.\",\n\tCombatStart\t\t\t\t= \"폭풍우 봉우리의 가장 깊고 어두운 동굴에서 온, 꿰뚫는 자 고르목일세! 영웅들이여, 전투에 임하게!\",\n\tPhase2\t\t\t\t\t= \"마음을 단단히 먹게, 영웅들이여. 두 배의 공포, 산성아귀와 공포비늘이 투기장으로 들어온다네!\",\n\tPhase3\t\t\t\t\t= \"다음은, 소개하는 순간 공기마저 얼어붙게 하는 얼음울음일세! 죽이지 않으면 죽을 걸세, 용사들이여!\",\n\tGormok\t\t\t\t\t= \"꿰뚫는 자 고르목\",\n\tAcidmaw\t\t\t\t\t= \"산성아귀\",\n\tDreadscale\t\t\t\t= \"공포비늘\",\n\tIcehowl\t\t\t\t\t= \"얼음울음\"\n})\n\n-------------------\n-- Lord Jaraxxus --\n-------------------\nL = DBM:GetModLocalization(\"Jaraxxus\")\n\nL:SetGeneralLocalization({\n\tname = \"군주 자락서스\"\n})\n\nL:SetOptionLocalization({\n\tIncinerateShieldFrame\t= \"우두머리 체력 바 사용시 살점 소각 치유량 바 함께 보기\"\n})\n\nL:SetMiscLocalization({\n\tIncinerateTarget\t\t= \"살점 소각: %s\",\n\tFirstPull\t\t\t\t= \"대흑마법사 윌프레드 피즐뱅이 다음 상대를 소환할 걸세. 기다리고 있게나.\"\n})\n\n-----------------------\n-- Faction Champions --\n-----------------------\nL = DBM:GetModLocalization(\"Champions\")\n\nL:SetGeneralLocalization({\n\tname = \"진영 대표 용사\"\n})\n\nL:SetMiscLocalization({\n\t--Horde NPCs\n\tGorgrim\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:64:64:96|t 고르그림 섀도클리브\",\t\t-- 34458\n\tBirana\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t 비라나 스톰후프\",\t\t\t-- 34451\n\tErin\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t 에린 미스트후프\",\t\t\t-- 34459\n\tRujkah\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:32:64|t 루즈카\",\t\t\t\t\t\t-- 34448\n\tGinselle\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:0:32|t 진셀 브라이트슬링어\",\t\t-- 34449\n\tLiandra\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t 리안드라 선콜러\",\t\t\t\t-- 34445\n\tMalithas\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t 말리타스 브라이트블레이드\",\t-- 34456\n\tCaiphus\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t 준엄한 카이푸스\",\t\t\t-- 34447\n\tVivienne\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t 비비안 블랙위스퍼\",\t\t-- 34441\n\tMazdinah\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:0:32|t 마즈디나\",\t\t\t\t\t-- 34454\n\tThrakgar\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t 스락가르\",\t\t\t\t\t-- 34444\n\tBroln\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t 브롤른 스타우트혼\",\t\t-- 34455\n\tHarkzog\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:32:64|t 하크조그\",\t\t\t\t-- 34450\n\tNarrhok\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:0:32|t 나르호크 스틸브레이커\",\t\t-- 34453\n\t--Alliance NPCs\n\tTyrius\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:64:64:96|t 티리우스 더스크블레이드\",\t-- 34461\n\tKavina\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t 카비나 그로브송\",\t\t\t-- 34460\n\tMelador\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t 멜라도르 베일스트라이더\",\t-- 34469\n\tAlyssia\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:32:64|t 알리시아 문스토커\",\t\t\t-- 34467\n\tNoozle\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:0:32|t 누즐 위즐스틱\",\t\t\t\t-- 34468\n\tBaelnor\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t 밸노르 라이트베어러\",\t\t\t-- 34471\n\tVelanaa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t 벨라나\",\t\t\t\t\t\t-- 34465\n\tAnthar\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t 안타르 포지멘더\",\t\t\t-- 34466\n\tBrienna\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t 브리에나 나이트펠\",\t\t-- 34473\n\tIrieth\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:0:32|t 이리에스 섀도스텝\",\t\t\t-- 34472\n\tSaamul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t 사아물\",\t\t\t\t\t-- 34470\n\tShaabad\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t 샤바드\",\t\t\t\t\t-- 34463\n\tSerissa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:32:64|t 세리사 그림대블러\",\t\t-- 34474\n\tShocuul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:0:32|t 쇼쿨\",\t\t\t\t\t\t\t-- 34475\n\n\tAllianceVictory\t= \"얼라이언스에 영광을!\",\n\tHordeVictory\t\t= \"앞으로 일어날 일의 맛보기일 뿐이다. 호드를 위하여!\"\n\t--YellKill\t\t\t= \"상처뿐인 승리로군. 오늘 받은 손해로 우리 전력은 약해졌네. 이런 어리석은 짓으로 리치 왕 말고 또 누가 이득을 보겠나? 위대한 용사들이 목숨을 잃었네. 무엇을 위해서였나? 진짜 위협은 저 앞에 있네. 리치 왕이 우리 모두를 죽음 안에서 기다린다네.\",\n})\n\n------------------\n-- Valkyr Twins --\n------------------\nL = DBM:GetModLocalization(\"ValkTwins\")\n\nL:SetGeneralLocalization({\n\tname = \"발키르 쌍둥이\"\n})\n\nL:SetWarningLocalization({\n\tWarnSpecialSpellSoon\t\t= \"곧 소용돌이 또는 서약\",\n\tSpecWarnSpecial\t\t\t\t= \"차원문 클릭하여 반대 속성으로 변경!\",\n\tSpecWarnSwitchTarget\t\t= \"대상 전환!\",\n\tSpecWarnKickNow\t\t\t\t= \"지금 차단!\",\n\tWarningTouchDebuff\t\t\t= \"손길 : >%s<\",\n\tWarningPoweroftheTwins2\t\t= \"쌍둥이의 힘 : %s\",\n})\n\nL:SetTimerLocalization({\n\tTimerSpecialSpell\t\t\t= \"다음 소용돌이/서약\",\n\tTimerAnubRoleplay\t\t\t= \"바닥 파손\"\n})\n\nL:SetOptionLocalization({\n\tTimerSpecialSpell\t\t\t= \"다음 속성의 소용돌이 또는 쌍둥이의 서약 바 보기\",\n\tTimerAnubRoleplay\t\t\t= \"역할 수행(롤플레이) 지속 시간 타이머 바 보기\",\n\tWarnSpecialSpellSoon\t\t= \"속성의 소용돌이 또는 쌍둥이의 서약 이전에 일림 보기\",\n\tSpecWarnSpecial\t\t\t\t= \"속성(색) 변경을 해야할 때 특수 경고 보기\",\n\tSpecWarnSwitchTarget\t\t= \"쌍둥이의 서약 대상 전환 특수 경고 보기\",\n\tSpecWarnKickNow\t\t\t\t= \"쌍둥이의 서약 차단 특수 경고 보기\",\n\tSpecialWarnOnDebuff\t\t\t= \"빛/어둠의 손길 대상이 된 경우 특수 경고 보기\",\n\tSetIconOnDebuffTarget\t\t= \"빛/어둠의 손길 대상에게 전술 목표 아이콘 설정(영웅 난이도)\",\n\tWarningTouchDebuff\t\t\t= \"빛/어둠의 손길 대상 알림 보기\",\n\tWarningPoweroftheTwins2\t\t= \"쌍둥이의 힘 대상 알림 보기\",\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t= \"어둠의 주인님을 받들어. 리치 왕을 위하여. 너희에게. 죽음을. 안기리라.\",\n--\tCombatStart\t= \"함께 힘을 모아야만 마지막 도전을 이겨낼 수 있네. 얼음왕관 심연에서 가장 강력한 스컬지 대리인 둘이 왔네. 무시무시한 발키르, 날개를 단 리치 왕의 전령일세!\",\n\tFjola\t\t= \"피욜라 라이트베인\",\n\tEydis\t\t= \"아이디스 다크베인\",\n\tValksRP\t\t= \"경기를 시작하게!\", -- 35709\n\tAnubRP\t\t= \"리치 왕에게 큰 타격을 주었군! 그대들은 은빛십자군의 강건한 용사임을 입증했네. 우리는 함께 얼음왕관 성채를 공격하고 남은 스컬지를 물리칠 걸세! 힘을 합친 우리가 이겨내지 못할 도전은 없네!\"\n})\n\n------------------\n-- Anub'arak --\n------------------\nL = DBM:GetModLocalization(\"Anub'arak_Coliseum\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"아눕아락\"\n})\n\n--L:SetTimerLocalization({\n--\tTimerEmerge\t\t\t= \"다음 출현\",\n--\tTimerSubmerge\t\t= \"다음 잠수\",\n--\ttimerAdds\t\t\t= \"다음 네루비안 땅무지\"\n--})\n\nL:SetWarningLocalization({\n\tWarnEmerge\t\t\t\t= \"아눕아락 출현\",\n\tWarnEmergeSoon\t\t\t= \"10초 이내 출현\",\n\tWarnSubmerge\t\t\t= \"아눕아락 잠수\",\n\tWarnSubmergeSoon\t\t= \"10초 이내 잠수\",\n\twarnAdds\t\t\t\t= \"네루비안 땅무지\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t\t\t\t= \"여기가 네 무덤이 되리라!\",\n--\tSwarm\t\t\t\t\t= \"착취의 무리가 너희를 덮치리라!\",\n\tEmerge\t\t\t\t\t= \"땅속에서 모습을 드러냅니다!\",\n\tBurrow\t\t\t\t\t= \"땅속으로 숨어버립니다!\",\n\tYellBurrow\t\t\t\t= \"아움 날락크, 쉬. 일어나라, 부하들아. 먹어치워라...\",\n\tPcoldIconSet\t\t\t= \"냉기 관통 아이콘{rt%d} : %s\",\n\tPcoldIconRemoved\t\t= \"냉기 관통 아이콘 제거 : %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnEmerge\t\t\t\t\t= \"출현 알림 보기\",\n\tWarnEmergeSoon\t\t\t\t= \"출현 이전에 알림 보기\",\n\tWarnSubmerge\t\t\t\t= \"잠수 알림 보기\",\n\tWarnSubmergeSoon\t\t\t= \"잠수 이전에 알림 보기\",\n\twarnAdds\t\t\t\t\t= \"네루비안 땅무지 알림 보기\",\n--\ttimerAdds\t\t\t\t\t= \"다음 네루비안 땅무지 바 보기\",\n--\tTimerEmerge\t\t\t\t\t= \"다음 출현 바 보기\",\n--\tTimerSubmerge\t\t\t\t= \"다음 잠수 바 보기\",\n\tAnnouncePColdIcons\t\t\t= \"$spell:66013 전술 목표 아이콘 설정시 공격대 대화로 알리기(공격대장 권한 필요)\",\n\tAnnouncePColdIconsRemoved\t= \"$spell:66013 전술 목표 아이콘 제거시 공격대 대화로 알리기(위 설정 필요)\",\n\tRemoveHealthBuffsInP3\t\t= \"3 페이즈를 시작할 때 HP 버프 지우기\"\n})\n"
  },
  {
    "path": "DBM-Coliseum/localization.mx.lua",
    "content": "﻿if GetLocale() ~= \"esMX\" then return end\n\nlocal L\n\n-------------------------------\n-- Las bestias de Rasganorte --\n-------------------------------\nL = DBM:GetModLocalization(\"NorthrendBeasts\")\n\nL:SetGeneralLocalization({\n\tname = \"Las bestias de Rasganorte\"\n})\n\nL:SetWarningLocalization({\n\tWarningSnobold\t\t= \"Vasallo snóbold en >%s<\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextBoss\t\t= \"Siguiente jefe\"\n--\tTimerEmerge\t\t\t= \"Emersión\",\n--\tTimerSubmerge\t\t= \"Sumersión\"\n})\n\nL:SetOptionLocalization({\n\tsoundConcAuraMastery= \"Reproducir el sonido de $spell:31821 para anular los efectos de $spelll:66330 (sólo para el |cFFF48CBAPaladín|r que es el propietario de $spell:19746)\",\n\tWarningSnobold\t\t= \"Mostrar aviso cuando aparezca un Vasallo snóbold\",\n\tPingCharge\t\t\t= \"Pulsar en el Minimapa si Aullahielo va a por Ti\",\n\tClearIconsOnIceHowl\t= \"Quitar todos los iconos antes de cada carga\",\n\tTimerNextBoss\t\t= \"Mostrar temporizador para el siguiente jefe\",\n--\tTimerEmerge\t\t\t= \"Mostrar temporizador para cuando Fauceácida y Aterraescama regresen a la superficie\",\n--\tTimerSubmerge\t\t= \"Mostrar temporizador para cuando Fauceácida y Aterraescama se sumerjan en la tierra\",\n\tIcehowlArrow\t\t= \"Mostrar flecha cuando Aullahielo vaya a cargar hacia ti\"\n})\n\nL:SetMiscLocalization({\n\tCharge\t\t\t\t= \"¡%%s mira a (%S+) y emite un bramido!\",\n\tCombatStart\t\t\t= \"¡De las cavernas más profundas y oscuras de las Cumbres Tormentosas: Gormok el Empalador! ¡Al combate, héroes!\",\n\tPhase2\t\t\t\t= \"¡Prepárense, héroes: los gemelos terribles, Fauceácida y Aterraescama, entran a la arena!\",\n\tPhase3\t\t\t\t= \"El mismísimo aire se congela al presentar a nuestro próximo combatiente, ¡Aullahielo! ¡Maten o mueran, campeones!\",\n\tGormok\t\t\t\t= \"Gormok el Empalador\",\n\tAcidmaw\t\t\t\t= \"Fauceácida\",\n\tDreadscale\t\t\t= \"Aterraescama\",\n\tIcehowl\t\t\t\t= \"Aullahielo\"\n})\n\n-------------------\n-- Lord Jaraxxus --\n-------------------\nL = DBM:GetModLocalization(\"Jaraxxus\")\n\nL:SetGeneralLocalization({\n\tname = \"Lord Jaraxxus\"\n})\n\nL:SetOptionLocalization({\n\tIncinerateShieldFrame\t= \"Mostrar salud del jefe en una barra de vida durante Incinerar carne\"\n})\n\nL:SetMiscLocalization({\n\tIncinerateTarget\t\t= \"Incinerar carne: %s\",\n\tFirstPull\t\t\t\t= \"El gran brujo Wilfred Chispobang invocará al siguiente contrincante. Esperad a que aparezca.\"\n})\n\n-----------------------------\n-- Campeones de la facción --\n-----------------------------\nL = DBM:GetModLocalization(\"Champions\")\n\nlocal champions = \"Campeones de la facción\"\nif UnitFactionGroup(\"player\") == \"Alliance\" then\n\tchampions = \"Campeones de la Horda\"\nelseif UnitFactionGroup(\"player\") == \"Horde\" then\n\tchampions = \"Campeones de la Alianza\"\nend\n\nL:SetGeneralLocalization({\n\tname = champions\n})\n\nL:SetMiscLocalization({\n\t--Horde NPCs\n\tGorgrim\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:64:64:96|t Gorgrim Rajasombra\",\t\t\t-- 34458\n\tBirana\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Birana Pezuña Tempestuosa\",-- 34451\n\tErin\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Erin Pezuña de Niebla\",\t-- 34459\n\tRujkah\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:32:64|t Ruj'kah\",\t\t\t\t\t\t-- 34448\n\tGinselle\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:0:32|t Ginselle Lanzaañublo\",\t\t-- 34449\n\tLiandra\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Liandra Clamasol\",\t\t\t-- 34445\n\tMalithas\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Malithas Hoja Brillante\",\t\t-- 34456\n\tCaiphus\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Caiphus el Austero\",\t\t-- 34447\n\tVivienne\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Vivienne Susurro Oscuro\",\t-- 34441\n\tMazdinah\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:0:32|t Maz'dinah\",\t\t\t\t\t-- 34454\n\tThrakgar\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Thrakgar\",\t\t\t\t\t-- 34444\n\tBroln\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Broln Cuernorrecio\",\t\t-- 34455\n\tHarkzog\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:32:64|t Harkzog\",\t\t\t\t\t-- 34450\n\tNarrhok\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:0:32|t Narrhok Rompeacero\",\t\t\t-- 34453\n\t--Alliance NPCs\n\tTyrius\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:64:64:96|t Tyrius Hoja Umbría\",\t\t\t-- 34461\n\tKavina\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Kavina Canto Arboleda\",\t-- 34460\n\tMelador\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Melador Caminavalles\",\t\t-- 34469\n\tAlyssia\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:32:64|t Alyssia Acechalunas\",\t\t\t-- 34467\n\tNoozle\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:0:32|t Noozle Varapalo\",\t\t\t-- 34468\n\tBaelnor\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Baelnor Portador de la Luz\",\t-- 34471\n\tVelanaa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Velanaa\",\t\t\t\t\t\t-- 34465\n\tAnthar\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Anthar Ensalmaforja\",\t\t-- 34466\n\tBrienna\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Brienna Talanoche\",\t\t-- 34473\n\tIrieth\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:0:32|t Irieth Paso Sombrío\",\t\t-- 34472\n\tSaamul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Saamul\",\t\t\t\t\t-- 34470\n\tShaabad\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Shaabad\",\t\t\t\t\t-- 34463\n\tSerissa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:32:64|t Serissa Desventura\",\t\t-- 34474\n\tShocuul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:0:32|t Shocuul\",\t\t\t\t\t\t-- 34475\n\n\tAllianceVictory\t\t= \"¡GLORIA A LA ALIANZA!\",\n\t--AllianceVictory\t= \"¡GLORIA PARA LA ALIANZA!\" -- esMX\n\tHordeVictory\t\t= \"Eso solo ha sido una muestra de lo que depara el futuro. ¡POR LA HORDA!\"\n\t--HordeVictory\t\t= \"Eso es sólo una probada de lo que traerá el futuro. ¡POR LA HORDA!\" -- esMX\n\t--YellKill\t\t\t= \"Una victoria trágica y fútil. Hoy somos menos por las pérdidas que hemos sufrido. ¿Quién podría beneficiarse de tal insensatez además del Rey Exánime? Grandes guerreros han perdido la vida. ¿Y para qué? La verdadera amenaza aguarda, el Rey Exánime nos espera a todos en la muerte.\"\n\t--YellKill\t\t\t= \"Una victoria trágica y superficial. Nuestra integridad se vio debilitada por las pérdidas que hoy sufrimos. ¿Quién más que el Rey Exánime puede haberse beneficiado de tal insensatez? Grandes guerreros han perdido sus vidas. ¿Y para qué? La verdadera amenaza se entreteje en el futuro: el Rey Exánime nos espera en la muerte.\" -- esMX\n})\n\nL:SetOptionLocalization({\n\tPlaySoundOnBladestorm\t= \"Reproducir sonido en Filotormenta\"\n})\n\n---------------------\n-- Gemelas Val'kyr --\n---------------------\nL = DBM:GetModLocalization(\"ValkTwins\")\n\nL:SetGeneralLocalization({\n\tname = \"Gemelas Val'kyr\"\n})\n\nL:SetWarningLocalization({\n\tWarnSpecialSpellSoon\t\t= \"Facultad especial en breve\",\n\tSpecWarnSpecial\t\t\t\t= \"Cambia de color\",\n\tSpecWarnSwitchTarget\t\t= \"Cambia de objetivo\",\n\tSpecWarnKickNow\t\t\t\t= \"Interrumpe ahora\",\n\tWarningTouchDebuff\t\t\t= \"Perjuicio en >%s<\",\n\tWarningPoweroftheTwins2\t\t= \"Poder de las Gemelas - ¡más sanación en >%s<!\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpecialSpell\t\t\t= \"Siguiente facultad especial\",\n\tTimerAnubRoleplay\t\t\t= \"El piso se rompe en\"\n})\n\nL:SetOptionLocalization({\n\tTimerSpecialSpell\t\t\t= \"Mostrar temporizador para la siguiente facultad especial\",\n\tTimerAnubRoleplay\t\t\t= \"Mostrar temporizador de diálogo de El Rey Exánime rompiendo el piso\",\n\tWarnSpecialSpellSoon\t\t= \"Mostrar aviso previo para la siguiente facultad especial\",\n\tSpecWarnSpecial\t\t\t\t= \"Mostrar aviso especial cuando debas cambiar de color\",\n\tSpecWarnSwitchTarget\t\t= \"Mostrar aviso especial cuando la otra gemela esté lanzando un hechizo\",\n\tSpecWarnKickNow\t\t\t\t= \"Mostrar aviso especial cuando debas interrumpir\",\n\tSpecialWarnOnDebuff\t\t\t= \"Mostrar aviso especial cuando estés afectado por un perjuicio (para cambiarlo por otro)\",\n\tSetIconOnDebuffTarget\t\t= \"Poner iconos en los objetivos de los perjuicios de $spell:65950 y $spell:66001 (dificultad heroica)\",\n\tWarningTouchDebuff\t\t\t= \"Anunciar objetivos de los perjuicios de $spell:65950 y $spell:66001\",\n\tWarningPoweroftheTwins2\t\t= \"Anunciar la gemela afectada por $spell:65916\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t= \"En el nombre de nuestro oscuro maestro. Por el Rey Exánime. Morirás.\",\n--\tCombatStart\t= \"Solo superaréis el reto final si trabajáis juntos. Desde las profundidades de Corona de Hielo, llegan dos de los tenientes más poderosos de la Plaga: las temibles Val'kyr, presagistas aladas del Rey Exánime.\",\t-- esES\n--\tCombatStart\t= \"Sólo trabajando juntos superarán el desafío final. De las profundidades de Corona de Hielo llegan estos poderosos tenientes de la Plaga: ¡los val'kyres, heraldos alados del Rey Exánime!\",\t-- esMX\n\tFjola\t\t= \"Fjola Penívea\",\n\tEydis\t\t= \"Eydis Penaumbra\",\n\tValksRP\t\t= \"¡Que comiencen los juegos!\", -- 35709\n\tAnubRP\t\t= \"¡Se ha asestado un gran golpe al Rey Exánime! Habéis demostrado ser diestros campeones de la Cruzada Argenta. ¡Juntos atacaremos la Ciudadela de la Corona de Hielo y acabaremos con lo que queda de la Plaga! ¡No hay ningún reto al que no podamos enfrentarnos si estamos unidos!\" -- esES\n--\tAnubRP\t\t= \"¡El Rey Exánime ha sufrido un poderoso revés! Han demostrado ser campeones dignos de la Cruzada Argenta. ¡Juntos atacaremos la Ciudadela Corona de Hielo y destruiremos lo que queda de la Plaga! ¡No existe el desafío que no podamos enfrentar unidos!\"\t-- esMX\n})\n\n---------------\n-- Anub'arak --\n---------------\nL = DBM:GetModLocalization(\"Anub'arak_Coliseum\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t\t= \"Anub'arak\"\n})\n\n--L:SetTimerLocalization({\n--\tTimerEmerge\t\t\t\t= \"Emersión\",\n--\tTimerSubmerge\t\t\t= \"Sumersión\",\n--\ttimerAdds\t\t\t\t= \"Siguientes esbirros\"\n--})\n\nL:SetWarningLocalization({\n\tWarnEmerge\t\t\t\t= \"Anub'arak regresa a la superficie\",\n\tWarnEmergeSoon\t\t\t= \"Emersión en 10 s\",\n\tWarnSubmerge\t\t\t= \"Anub'arak se entierra en el suelo\",\n\tWarnSubmergeSoon\t\t= \"Sumersión en 10 s\",\n\twarnAdds\t\t\t\t= \"Siguientes esbirros\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t\t\t\t= \"¡Este lugar será vuestra tumba!\",\n\tEmerge\t\t\t\t= \"emerge de la tierra!\",\n\tBurrow\t\t\t\t= \"se entierra en el suelo!\",\n\tYellBurrow\t\t\t= \"Auum na-l ak-k-k-k, isshhh. Alzaos, esbirros. Devorad…\",\n--\tYellBurrow\t\t\t= \"Auum na-l ak-k-k-k, isshhh. Despierten, lacayos. Devoren…\" --esMX\n\tPcoldIconSet\t\t= \"Icono {rt%d} colocado en %s\",\n\tPcoldIconRemoved\t= \"Icono quitado en %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnEmerge\t\t\t\t= \"Mostrar aviso cuando Anub'arak regrese a la superficie\",\n\tWarnEmergeSoon\t\t\t= \"Mostrar aviso previo para cuando Anub'arak regrese a la superficie\",\n\tWarnSubmerge\t\t\t= \"Mostrar aviso cuando Anub'arak se entierre en el suelo\",\n\tWarnSubmergeSoon\t\t= \"Mostrar aviso previo para cuando Anub'arak se entierre en el suelo\",\n\twarnAdds\t\t\t\t= \"Anunciar cuando aparezcan esbirros\",\n--\ttimerAdds\t\t\t\t= \"Mostrar temporizador para los siguientes esbirros\",\n--\tTimerEmerge\t\t\t\t= \"Mostrar temporizador para cuando Anub'arak regrese a la superficie\",\n--\tTimerSubmerge\t\t\t= \"Mostrar temporizador para cuando Anub'arak se entierre en el suelo\",\n\tAnnouncePColdIcons\t\t= \"Anunciar iconos de los objetivos de $spell:66013 en el chat de banda (requiere líder o ayudante)\",\n\tAnnouncePColdIconsRemoved\t= \"Anunciar iconos quitados de los objetivos de $spell:66013 (requiere que la opción anterior esté habilitada)\",\n\tRemoveHealthBuffsInP3\t= \"Quitar bufos de vida al inicio de la fase 3\"\n})\n"
  },
  {
    "path": "DBM-Coliseum/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n------------------------\n--  Northrend Beasts  --\n------------------------\nL = DBM:GetModLocalization(\"NorthrendBeasts\")\n\nL:SetGeneralLocalization({\n\tname = \"Чудовища Нордскола\"\n})\n\nL:SetWarningLocalization({\n\tWarningSnobold\t\t= \"Призыв снобольда-вассала на >%s<\",\n})\n\nL:SetTimerLocalization({\n\tTimerNextBoss\t\t= \"Прибытие следующего босса\"\n--\tTimerEmerge\t\t\t= \"Появление\",\n--\tTimerSubmerge\t\t= \"Зарывание\"\n})\n\nL:SetOptionLocalization({\n\tsoundConcAuraMastery= \"Воспроизвести звук $spell:31821, чтобы отменить эффекты $spell:66330 (только для |cFFF48CBAПаладин|r, который является владельцем $spell:19746)\",\n\tWarningSnobold\t\t= \"Предупреждение о призыве Снобольда-вассала\",\n\tPingCharge\t\t\t= \"Показать на миникарте место, куда попадает Ледяной Рев, если он избрал вас целью\",\n\tClearIconsOnIceHowl\t= \"Снимать все иконки перед Топотом\",\n\tTimerNextBoss\t\t= \"Отсчет времени до появления следующего противника\",\n--\tTimerEmerge\t\t\t= \"Отсчет времени до появления\",\n--\tTimerSubmerge\t\t= \"Отсчет времени до зарывания\",\n\tIcehowlArrow\t\t= \"Показывать стрелку, когда Ледяной Рев готовится сделать рывок на цель рядом с вами\"\n})\n\nL:SetMiscLocalization({\n\tCharge\t\t\t\t= \"^%%s глядит на (%S+) и испускает гортанный вой!\",\n\tCombatStart\t\t\t= \"Из самых глубоких и темных пещер Грозовой Гряды был призван Гормок Пронзающий Бивень! В бой, герои!\",\n\tPhase2\t\t\t\t= \"Приготовьтесь к схватке с близнецами-чудовищами, Кислотной Утробой и Жуткой Чешуей!\",\n\tPhase3\t\t\t\t= \"В воздухе повеяло ледяным дыханием следующего бойца: на арену выходит Ледяной Рев! Сражайтесь или погибните, чемпионы!\",\n\tGormok\t\t\t\t= \"Гормок Пронзающий Бивень\",\n\tAcidmaw\t\t\t\t= \"Кислотная Утроба\",\n\tDreadscale\t\t\t= \"Жуткая Чешуя\",\n\tIcehowl\t\t\t\t= \"Ледяной Рев\"\n})\n\n---------------------\n--  Lord Jaraxxus  --\n---------------------\nL = DBM:GetModLocalization(\"Jaraxxus\")\n\nL:SetGeneralLocalization({\n\tname = \"Лорд Джараксус\"\n})\n\nL:SetOptionLocalization({\n\tIncinerateShieldFrame\t= \"Показать здоровье босса с индикатором здоровья для Испепеления плоти\"\n})\n\nL:SetMiscLocalization({\n\tIncinerateTarget\t\t= \"Испепеление плоти: %s\",\n\tFirstPull\t\t\t\t= \"Сейчас великий чернокнижник Вилфред Непопамс призовет вашего нового противника. Готовьтесь к бою!\"\n})\n\n-------------------------\n--  Faction Champions  --\n-------------------------\nL = DBM:GetModLocalization(\"Champions\")\n\nL:SetGeneralLocalization({\n\tname = \"Чемпионы фракций\"\n})\n\nL:SetMiscLocalization({\n\t--Horde NPCs\n\tGorgrim\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:64:64:96|t Горгрим Темный Раскол\",\t\t\t-- 34458\n\tBirana\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Бирана Штормовое Копыто\",\t\t-- 34451\n\tErin\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Эрин Мглистое Копыто\",\t\t\t-- 34459\n\tRujkah\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:32:64|t Руж'ка\",\t\t\t\t\t\t\t-- 34448\n\tGinselle\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:0:32|t Гинзелль Отразительница Гнили\",\t-- 34449\n\tLiandra\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Лиандра Зовущая Солнце\",\t\t\t-- 34445\n\tMalithas\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Малитас Сияющий Клинок\",\t\t\t-- 34456\n\tCaiphus\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Каифа Неумолимый\",\t\t\t\t-- 34447\n\tVivienne\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Вивьен Шепот Тьмы\",\t\t\t-- 34441\n\tMazdinah\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:0:32|t Маз'дина\",\t\t\t\t\t\t-- 34454\n\tThrakgar\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Тракгар\",\t\t\t\t\t\t-- 34444\n\tBroln\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Бролн Крепкий Рог\",\t\t\t-- 34455\n\tHarkzog\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:32:64|t Харкзог\",\t\t\t\t\t\t-- 34450\n\tNarrhok\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:0:32|t Наррок Крушитель Стали\",\t\t\t-- 34453\n\t--Alliance NPCs\n\tTyrius\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:64:64:96|t Тирий Клинок Сумерек\",\t\t\t-- 34461\n\tKavina\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Кавина Песня Рощи\",\t\t\t-- 34460\n\tMelador\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:0:32|t Меладор Дальний Гонец\",\t\t-- 34469\n\tAlyssia\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:32:64|t Алисса Лунопард\",\t\t\t\t\t-- 34467\n\tNoozle\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:0:32|t Нуззл Чудодей\",\t\t\t\t\t-- 34468\n\tBaelnor\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Бельнор Светоносный\",\t\t\t\t-- 34471\n\tVelanaa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:64:96|t Веланаа\",\t\t\t\t\t\t\t-- 34465\n\tAnthar\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Антар Очистительный Горн\",\t\t-- 34466\n\tBrienna\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:32:64|t Бриенна Приход Ночи\",\t\t\t-- 34473\n\tIrieth\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:63.5:95:0:32|t Ириэт Шаг Сквозь Тень\",\t\t\t-- 34472\n\tSaamul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Саамул\",\t\t\t\t\t\t-- 34470\n\tShaabad\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:32:63.5:32:64|t Шаабад\",\t\t\t\t\t\t-- 34463\n\tSerissa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:95:126.5:32:64|t Серисса Мрачная Кропильщица\",\t-- 34474\n\tShocuul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:24:24:0:0:128:128:0:32:0:32|t Шокул\",\t\t\t\t\t\t\t-- 34475\n\n\tAllianceVictory\t\t= \"СЛАВА АЛЬЯНСУ!\",\n\tHordeVictory\t\t= \"Это было лишь пробой того, что ждет нас в будущем! ЗА ОРДУ!\"\n\t--YellKill\t\t\t= \"Пустая и горькая победа. После сегодняшних потерь мы стали слабее как целое. Кто еще, кроме Короля-лича, выиграет от подобной глупости? Пали великие воины. И ради чего? Истинная опасность еще впереди – нас ждет битва с Королем-личом.\"\n})\n\n---------------------\n--  Val'kyr Twins  --\n---------------------\nL = DBM:GetModLocalization(\"ValkTwins\")\n\nL:SetGeneralLocalization({\n\tname = \"Валь'киры-близнецы\"\n})\n\nL:SetWarningLocalization({\n\tWarnSpecialSpellSoon\t\t= \"Скоро спец-способность\",\n\tSpecWarnSpecial\t\t\t\t= \"Смена цвета\",\n\tSpecWarnSwitchTarget\t\t= \"Смена цели\",\n\tSpecWarnKickNow\t\t\t\t= \"Прерывание\",\n\tWarningTouchDebuff\t\t\t= \"Отрицательный эффект на |3-5(>%s<)\",\n\tWarningPoweroftheTwins2\t\t= \"Сила близнецов - больше исцеления на |3-3(>%s<)\",\n})\n\nL:SetTimerLocalization({\n\tTimerSpecialSpell\t\t\t= \"Следующая спец-способность\",\n\tTimerAnubRoleplay\t\t\t= \"Представление перед падением\"\n})\n\nL:SetOptionLocalization({\n\tTimerSpecialSpell\t\t\t= \"Отсчет времени до перезарядки спец-способности\",\n\tTimerAnubRoleplay\t\t\t= \"Таймер представления перед падением (после победы)\",\n\tWarnSpecialSpellSoon\t\t= \"Предупреждение о следующуюей спец-способность\",\n\tSpecWarnSpecial\t\t\t\t= \"Спец-предупреждение для смены цветов\",\n\tSpecWarnSwitchTarget\t\t= \"Спец-предупреждение для других, когда босс читает заклинание\",\n\tSpecWarnKickNow\t\t\t\t= \"Спец-предупреждение, когда вы должы прервать заклинание\",\n\tSpecialWarnOnDebuff\t\t\t= \"Спец-предупреждение, когда отрицательный эффект\",\n\tSetIconOnDebuffTarget\t\t= \"Установить метку на получившего отрицательный эффект (героический режим)\",\n\tWarningTouchDebuff\t\t\t= \"Объявлять цели, получившие отрицательный эффект\",\n\tWarningPoweroftheTwins2\t\t= \"Объявлять цель под воздействем Силы близнецов\",\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t= \"Во имя темного повелителя. Во имя Короля-лича. Вы. Умрете.\",\n--\tCombatStart\t= \"Лишь сплотившись, вы сможете пройти последнее испытание. Из глубин Ледяной Короны навстречу вам подымаются две могучие воительницы Плети: жуткие валь'киры, крылатые вестницы Короля-лича!\",\n\tFjola\t\t= \"Фьола Погибель Света\",\n\tEydis\t\t= \"Эйдис Погибель Тьмы\",\n\tValksRP\t\t= \"Пусть состязания начнутся!\", -- 35709\n\tAnubRP\t\t= \"Король-лич понес тяжелую потерю! Вы проявили себя как бесстрашные герои Серебряного Авангарда! Мы вместе нанесем удар по Цитадели Ледяной Короны и разнесем в клочья остатки Плети! Нет такого испытания, которое мы бы не могли пройти сообща!\"\n})\n\n-----------------\n--  Anub'arak  --\n-----------------\nL = DBM:GetModLocalization(\"Anub'arak_Coliseum\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t\t= \"Ануб'арак\"\n})\n\n--L:SetTimerLocalization({\n--\tTimerEmerge\t\t\t\t= \"Появление через\",\n--\tTimerSubmerge\t\t\t= \"Зарывание через\",\n--\ttimerAdds\t\t\t\t= \"Призыв помощников через\"\n--})\n\nL:SetWarningLocalization({\n\tWarnEmerge\t\t\t\t= \"Ануб'арак появляется\",\n\tWarnEmergeSoon\t\t\t= \"Появление через 10 сек\",\n\tWarnSubmerge\t\t\t= \"Ануб'арак зарывается\",\n\tWarnSubmergeSoon\t\t= \"Зарывание через 10 сек\",\n\twarnAdds\t\t\t\t= \"Новые помощники\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t\t\t= \"Это место станет вашей могилой!\",\n\tEmerge\t\t\t\t= \"вылезает на поверхность!\",\n\tBurrow\t\t\t\t= \"зарывается в землю!\",\n\tYellBurrow\t\t\t= \"Ауум на-л ак-к-к-к, ишшш. Вставайте, слуги мои. Время пожирать...\",\n\tPcoldIconSet\t\t= \"Метка холода {rt%d} установлена на: %s\",\n\tPcoldIconRemoved\t= \"Метка холода снята с: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnEmerge\t\t\t\t= \"Предупреждение о появлении\",\n\tWarnEmergeSoon\t\t\t= \"Предупреждать заранее о появлении\",\n\tWarnSubmerge\t\t\t= \"Предупреждение о зарывании\",\n\tWarnSubmergeSoon\t\t= \"Предупреждать заранее о зарывании\",\n\twarnAdds\t\t\t\t= \"Предупреждение о призыве помощников\",\n--\ttimerAdds\t\t\t\t= \"Отсчет времени до призыва помощников\",\n--\tTimerEmerge\t\t\t\t= \"Отсчет времени до появления\",\n--\tTimerSubmerge\t\t\t= \"Отсчет времени до зарывания\",\n\tAnnouncePColdIcons\t\t= \"Объявлять метки целей заклинания $spell:68510 в рейд-чат (требуются права лидера или помощника)\",\n\tAnnouncePColdIconsRemoved\t= \"Объявлять также о снятии меток с целей заклинания $spell:68510 (требуется предыдущая опция)\",\n\tRemoveHealthBuffsInP3\t= \"Удалять усиления здоровья в начале фазы 3\"\n})\n"
  },
  {
    "path": "DBM-Coliseum/localization.tw.lua",
    "content": "﻿if GetLocale() ~= \"zhTW\" then return end\n\nlocal L\n\n------------------------\n--  Northrend Beasts  --\n------------------------\nL = DBM:GetModLocalization(\"NorthrendBeasts\")\n\nL:SetGeneralLocalization({\n\tname = \"北裂境巨獸\"\n})\n\nL:SetWarningLocalization({\n\tWarningSnobold\t\t= \"極地狗頭人奴僕出現在>%s<\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextBoss\t\t= \"下一隻王到來\"\n--\tTimerEmerge\t\t\t= \"持續鑽地\",\n--\tTimerSubmerge\t\t= \"下一次鑽地\"\n})\n\nL:SetOptionLocalization({\n\tsoundConcAuraMastery= \"播放 $spell:31821 聲音以抵消 $spell:66330 的效果（僅適用於 $spell:19746 的所有者 |cFFF48CBA聖騎士|r）\",\n\tWarningSnobold\t\t= \"為極地狗頭人奴僕出現顯示警告\",\n\tPingCharge\t\t\t= \"當冰嚎即將衝鋒你時自動點擊小地圖\",\n\tClearIconsOnIceHowl\t= \"衝鋒前消除所有標記\",\n\tTimerNextBoss\t\t= \"為下一隻王到來顯示計時器\",\n--\tTimerEmerge\t\t\t= \"為持續鑽地顯示計時器\",\n--\tTimerSubmerge\t\t= \"為下一次鑽地顯示計時器\",\n\tIcehowlArrow\t\t= \"當冰嚎即將衝鋒在你附近時顯示DBM箭頭\"\n})\n\nL:SetMiscLocalization({\n\tCharge\t\t\t\t= \"%%s怒視著(%S+)，並發出震耳的咆哮!\",\n\tCombatStart\t\t\t= \"來自風暴群山最深邃，最黑暗的洞穴。歡迎『穿刺者』戈莫克!戰鬥吧，英雄們!\",\n\tPhase2\t\t\t\t= \"準備面對酸喉和懼鱗的雙重夢魘吧，英雄們，快就定位!\",\n\tPhase3\t\t\t\t= \"下一場參賽者的出場連空氣都會為之凝結:冰嚎!戰個你死我活吧，勇士們!\",\n\tGormok\t\t\t\t= \"『穿刺者』戈莫克\",\n\tAcidmaw\t\t\t\t= \"酸喉\",\n\tDreadscale\t\t\t= \"懼鱗\",\n\tIcehowl\t\t\t\t= \"冰嚎\"\n})\n\n---------------------\n--  Lord Jaraxxus  --\n---------------------\nL = DBM:GetModLocalization(\"Jaraxxus\")\n\nL:SetGeneralLocalization({\n\tname = \"賈拉克瑟斯領主\"\n})\n\nL:SetOptionLocalization({\n\tIncinerateShieldFrame\t= \"在首領血量裡顯示焚化血肉的血量\"\n})\n\nL:SetMiscLocalization({\n\tIncinerateTarget\t\t= \"焚化血肉: %s\",\n\tFirstPull\t\t\t\t= \"大術士威爾弗雷德·菲斯巴恩將會召喚你們的下一個挑戰者。等待他的登場吧。\"\n})\n\n-------------------------\n--  Faction Champions  --\n-------------------------\nL = DBM:GetModLocalization(\"Champions\")\n\nL:SetGeneralLocalization({\n\tname = \"陣營勇士\"\n})\n\nL:SetMiscLocalization({\n\t--Horde NPCs\n\tGorgrim\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:32:64:64:96|t 高葛林·影斬\",\t\t-- 34458\n\tBirana\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:95:126.5:0:32|t 碧菈娜·風暴之蹄\",\t-- 34451\n\tErin\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:95:126.5:0:32|t 艾琳·霧蹄\",\t\t-- 34459\n\tRujkah\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:0:32:32:64|t 茹卡\",\t\t\t\t-- 34448\n\tGinselle\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:32:63.5:0:32|t 金賽兒·凋擲\",\t\t-- 34449\n\tLiandra\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:0:32:64:96|t 黎安卓·喚日\",\t\t\t-- 34445\n\tMalithas\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:0:32:64:96|t 瑪力薩·亮刃\",\t\t\t-- 34456\n\tCaiphus\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:63.5:95:32:64|t 嚴厲的凱普司\",\t\t-- 34447\n\tVivienne\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:63.5:95:32:64|t 薇薇安·黑語\",\t\t-- 34441\n\tMazdinah\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:63.5:95:0:32|t 馬茲迪娜\",\t\t\t-- 34454\n\tThrakgar\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:32:63.5:32:64|t 瑟瑞克加爾\",\t\t-- 34444\n\tBroln\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:32:63.5:32:64|t 伯洛連·頑角\",\t\t-- 34455\n\tHarkzog\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:95:126.5:32:64|t 哈克佐格\",\t\t-- 34450\n\tNarrhok\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:0:32:0:32|t 納霍克·破鋼者\",\t\t-- 34453\n\t--Alliance NPCs\n\tTyrius\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:32:64:64:96|t 提瑞斯·暮刃\",\t\t-- 34461\n\tKavina\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:95:126.5:0:32|t 卡薇娜·林地之歌\",\t-- 34460\n\tMelador\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:95:126.5:0:32|t 梅拉朵·谷行者\",\t-- 34469\n\tAlyssia\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:0:32:32:64|t 愛莉希雅·月巡者\",\t\t-- 34467\n\tNoozle\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:32:63.5:0:32|t 諾佐·嘯棍\",\t\t\t-- 34468\n\tBaelnor\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:0:32:64:96|t 貝爾諾·攜光者\",\t\t-- 34471\n\tVelanaa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:0:32:64:96|t 維蘭娜\",\t\t\t\t-- 34465\n\tAnthar\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:63.5:95:32:64|t 安薩·修爐匠\",\t\t-- 34466\n\tBrienna\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:63.5:95:32:64|t 布芮娜·夜墜\",\t\t-- 34473\n\tIrieth\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:63.5:95:0:32|t 艾芮絲·影步\",\t\t-- 34472\n\tSaamul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:32:63.5:32:64|t 薩繆爾\",\t\t\t-- 34470\n\tShaabad\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:32:63.5:32:64|t 夏巴德\",\t\t\t-- 34463\n\tSerissa\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:95:126.5:32:64|t 瑟芮莎·厲濺\",\t\t-- 34474\n\tShocuul\t\t\t\t= \"|TInterface\\\\WorldStateFrame\\\\Icons-Classes.blp:36:36:0:0:128:128:0:32:0:32|t 修庫爾\",\t\t\t\t-- 34475\n\n\tAllianceVictory\t\t= \"榮耀歸於聯盟!\",\n\tHordeVictory\t\t= \"那只是讓你們知道將來必須面對的命運。為了部落!\"\n\t--YellKill\t\t\t= \"膚淺而悲痛的勝利。今天痛失的生命反而令我們更加的頹弱。除了巫妖王之外，誰還能從中獲利?偉大的戰士失去了寶貴生命。為了什麼?真正的威脅就在前方 - 巫妖王在死亡的領域中等著我們。\"\n})\n\n---------------------\n--  Val'kyr Twins  --\n---------------------\nL = DBM:GetModLocalization(\"ValkTwins\")\n\nL:SetGeneralLocalization({\n\tname = \"華爾琪雙子\"\n})\n\nL:SetWarningLocalization({\n\tWarnSpecialSpellSoon\t= \"特別技能即將到來\",\n\tSpecWarnSpecial\t\t\t= \"快變換顏色\",\n\tSpecWarnSwitchTarget\t= \"快換目標打雙子契印\",\n\tSpecWarnKickNow\t\t\t= \"現在斷法\",\n\tWarningTouchDebuff\t\t= \"光明或黑暗之觸:>%s<\",\n\tWarningPoweroftheTwins2\t= \"雙子威能 - 對>%s<加大治療\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpecialSpell\t\t= \"下一次特別技能\",\n\tTimerAnubRoleplay\t\t= \"樓斷裂處\"\n})\n\nL:SetOptionLocalization({\n\tTimerSpecialSpell\t\t= \"為下一次特別技能顯示計時器\",\n\tTimerAnubRoleplay\t\t= \"計時條：劇情持續時間\",\n\tWarnSpecialSpellSoon\t= \"為下一次特別技能顯示預先警告\",\n\tSpecWarnSpecial\t\t\t= \"當你需要變換顏色時顯示特別警告\",\n\tSpecWarnSwitchTarget\t= \"當另一個首領施放雙子契印時顯示特別警告\",\n\tSpecWarnKickNow\t\t\t= \"當你可以斷法時顯示特別警告\",\n\tSpecialWarnOnDebuff\t\t= \"當你中了光明或黑暗之觸時顯示特別警告 (需切換顏色)\",\n\tSetIconOnDebuffTarget\t= \"為光明或黑暗之觸的目標設置標記 (英雄模式)\",\n\tWarningTouchDebuff\t\t= \"提示光明或黑暗之觸的目標\",\n\tWarningPoweroftheTwins2\t= \"提示雙子威能的目標\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t\t\t\t= \"以我們的黑暗君王之名。為了巫妖王。你‧得‧死。\",\n--\tCombatStart\t\t\t\t= \"唯有同心協力，你們才能克服最後的難關。來自寒冰皇冠的深處，兩名天譴軍團最強大的副官:令人生畏的華爾琪，披著羽翼的巫妖王先驅。\",\n\tFjola\t\t\t\t\t= \"菲歐拉·光寂\",\n\tEydis\t\t\t\t\t= \"艾狄絲·暗寂\",\n\tValksRP\t\t\t\t\t= \"讓賽事開始吧!\", -- 35709\n\tAnubRP\t\t\t\t\t= \"巫妖王遭受了迎頭痛擊!你們已經證明了你們是銀白十字軍的精銳勇士。我們將聯手攻陷冰冠城塞，並且把天譴軍團消滅殆盡!團結一心，我們將可破除所有難關。\"\n})\n\n-----------------\n--  Anub'arak  --\n-----------------\nL = DBM:GetModLocalization(\"Anub'arak_Coliseum\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"阿努巴拉克\"\n})\n\n--L:SetTimerLocalization({\n--\tTimerEmerge\t\t\t= \"下一次現身\",\n--\tTimerSubmerge\t\t= \"下一次鑽地\",\n--\ttimerAdds\t\t\t= \"下一次中蟲出現\"\n--})\n\nL:SetWarningLocalization({\n\tWarnEmerge\t\t\t\t= \"阿努巴拉克現身了\",\n\tWarnEmergeSoon\t\t\t= \"10秒後現身\",\n\tWarnSubmerge\t\t\t= \"阿努巴拉克鑽進地裡了\",\n\tWarnSubmergeSoon\t\t= \"10秒後鑽進地裡\",\n\twarnAdds\t\t\t\t= \"奈幽掘洞者 出現了\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t\t\t= \"這裡將會是你們的墳墓!\",\n\tEmerge\t\t\t\t= \"從地底鑽出!\",\n\tBurrow\t\t\t\t= \"鑽進地裡!\",\n\tYellBurrow\t\t\t= \"(蟲族語)靠上來，兄弟們。起來，爪牙們，吞噬...\",\n\tPcoldIconSet\t\t= \"透骨之寒{rt%d}於%s\",\n\tPcoldIconRemoved\t= \"移除標記:%s\"\n})\n\nL:SetOptionLocalization({\n\tWarnEmerge\t\t\t\t= \"為鑽出地面顯示警告\",\n\tWarnEmergeSoon\t\t\t= \"為鑽出地面顯示預先警告\",\n\tWarnSubmerge\t\t\t= \"為鑽進地裡顯示警告\",\n\tWarnSubmergeSoon\t\t= \"為鑽進地裡顯示預先警告\",\n\twarnAdds\t\t\t\t= \"提示奈幽掘洞者出現\",\n--\ttimerAdds\t\t\t\t= \"為下一次 奈幽掘洞者出現顯示計時器\",\n--\tTimerEmerge\t\t\t\t= \"為持續鑽地顯示計時器\",\n--\tTimerSubmerge\t\t\t= \"為下一次 鑽地顯示計時器\",\n\tAnnouncePColdIcons\t\t= \"公佈$spell:68510目標設置的標記到團隊頻道 (需要團隊隊長或助理權限)\",\n\tAnnouncePColdIconsRemoved\t= \"當移除$spell:68510的標記時也提示 (需要上述選項)\",\n\tRemoveHealthBuffsInP3\t= \"當進入第3階段時移除耐力的增益\"\n})\n"
  },
  {
    "path": "DBM-Core/DBM-Arrow.lua",
    "content": "-- This file uses models and textures taken from TomTom. The 3D arrow model was created by Guillotine (curse.guillotine@gmail.com) and 2D minimap textures by Cladhaire.\n\nlocal L = DBM_CORE_L\n\n---------------\n--  Globals  --\n---------------\nDBM.Arrow = {}\n\n--------------\n--  Locals  --\n--------------\nlocal arrowFrame = DBM.Arrow\nlocal frame, runAwayArrow, targetType, targetPlayer, targetX, targetY, hideTime, hideDistance\n\n--------------------------------------------------------\n--  Cache frequently used global variables in locals  --\n--------------------------------------------------------\nlocal pi, pi2 = math.pi, math.pi * 2\nlocal floor, sin, cos, atan2, sqrt, min = math.floor, math.sin, math.cos, math.atan2, math.sqrt, math.min\nlocal GetPlayerMapPosition, GetTime = GetPlayerMapPosition, GetTime\n\n--------------------\n--  Create Frame  --\n--------------------\nframe = CreateFrame(\"Button\", \"DBMArrow\", UIParent)\nframe:Hide()\nframe:SetFrameStrata(\"HIGH\")\nframe:SetSize(56, 42)\nframe:SetMovable(true)\nframe:EnableMouse(false)\nframe:RegisterForDrag(\"LeftButton\", \"RightButton\")\nframe:SetScript(\"OnDragStart\", function(self)\n\tself:StartMoving()\nend)\nframe:SetScript(\"OnDragStop\", function(self)\n\tself:StopMovingOrSizing()\n\tlocal point, _, _, x, y = self:GetPoint(1)\n\tDBM.Options.ArrowPoint = point\n\tDBM.Options.ArrowPosX = x\n\tDBM.Options.ArrowPosY = y\nend)\n\nlocal textframe = CreateFrame(\"Frame\", nil, frame)\nframe.distance = textframe:CreateFontString(nil, \"OVERLAY\", \"GameFontNormalSmall\")\nframe.title = textframe:CreateFontString(nil, \"OVERLAY\", \"GameFontHighlightSmall\")\nframe.title:SetPoint(\"TOP\", frame, \"BOTTOM\")\nframe.distance:SetPoint(\"TOP\", frame.title, \"BOTTOM\")\ntextframe:Hide()\n\nlocal arrow = frame:CreateTexture(nil, \"OVERLAY\")\narrow:SetTexture(\"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\arrows\\\\Arrow.blp\")\narrow:SetAllPoints(frame)\n\n---------------------\n--  Map Utilities  --\n---------------------\nlocal SetMapToCurrentZone -- throttled SetMapToCurrentZone function to prevent lag issues with unsupported WorldMap addons\ndo\n\tlocal lastMapUpdate = 0\n\tfunction SetMapToCurrentZone(...)\n\t\tif GetTime() - lastMapUpdate > 1 then\n\t\t\tlastMapUpdate = GetTime()\n\t\t\treturn _G.SetMapToCurrentZone(...)\n\t\tend\n\tend\nend\n\nlocal calculateDistance\ndo\n\tfunction calculateDistance(x1, y1, x2, y2)\n\t\tlocal mapX, mapY = DBM:GetMapSize()\n\t\tlocal dX = (x1 - x2) * mapX\n\t\tlocal dY = (y1 - y2) * mapY\n\t\treturn sqrt(dX * dX + dY * dY)\n\tend\nend\n\n-- GetPlayerFacing seems to return values between -pi and pi instead of 0 - 2pi sometimes since 3.3.3\nlocal GetPlayerFacing = function(...)\n\tlocal result = GetPlayerFacing(...) or 0\n\tif result < 0 then\n\t\tresult = result + pi2\n\tend\n\treturn result\nend\n\n------------------------\n--  Update the arrow  --\n------------------------\nlocal updateArrow\ndo\n\tlocal currentCell\n\tlocal formatText = \"%dy\"\n\tfunction updateArrow(direction, distance)\n\t\tlocal cell = floor(direction / pi2 * 108 + 0.5) % 108\n\t\tif cell ~= currentCell then\n\t\t\tcurrentCell = cell\n\t\t\tlocal column = cell % 9\n\t\t\tlocal row = floor(cell / 9)\n\t\t\tlocal xStart = (column * 56) / 512\n\t\t\tlocal yStart = (row * 42) / 512\n\t\t\tlocal xEnd = ((column + 1) * 56) / 512\n\t\t\tlocal yEnd = ((row + 1) * 42) / 512\n\t\t\tarrow:SetTexCoord(xStart, xEnd, yStart, yEnd)\n\t\tend\n\t\tif distance then\n\t\t\tif runAwayArrow then\n\t\t\t\tlocal perc = distance / hideDistance\n\t\t\t\tarrow:SetVertexColor(1 - perc, perc, 0)\n\t\t\t\tif distance >= hideDistance then\n\t\t\t\t\tframe:Hide()\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tlocal perc = min(distance, 100) / 100\n\t\t\t\tarrow:SetVertexColor(1, 1 - perc, 0)\n\t\t\t\tif distance <= hideDistance then\n\t\t\t\t\tframe:Hide()\n\t\t\t\telse\n\t\t\t\t\tframe.distance:SetText(formatText:format(distance))\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\tif runAwayArrow then\n\t\t\t\tarrow:SetVertexColor(1, 0.3, 0)\n\t\t\telse\n\t\t\t\tarrow:SetVertexColor(1, 1, 0)\n\t\t\tend\n\t\tend\n\tend\nend\n\n------------------------\n--  OnUpdate Handler  --\n------------------------\ndo\n\tlocal rotateState = 0\n\n\tframe:SetScript(\"OnUpdate\", function(self, elapsed)\n\t\tif hideTime and GetTime() > hideTime then\n\t\t\tframe:Hide()\n\t\tend\n\t\tarrow:Show()\n\t\t-- the static arrow type is special because it doesn't depend on the player's orientation or position\n\t\tif targetType == \"static\" then\n\t\t\treturn updateArrow(targetX) -- targetX contains the static angle to show\n\t\tend\n\n\t\tlocal x, y = GetPlayerMapPosition(\"player\")\n\t\tif x == 0 and y == 0 then\n\t\t\tSetMapToCurrentZone()\n\t\t\tx, y = GetPlayerMapPosition(\"player\")\n\t\t\tif x == 0 and y == 0 then\n\t\t\t\tself:Hide() -- Hide the arrow if you enter a zone without a map\n\t\t\t\treturn\n\t\t\tend\n\t\tend\n\t\tif targetType == \"player\" then\n\t\t\ttargetX, targetY = GetPlayerMapPosition(targetPlayer)\n\t\t\tif targetX == 0 and targetY == 0 then\n\t\t\t\tself:Hide() -- hide the arrow if the target doesn't exist. TODO: just hide the texture and add a timeout\n\t\t\tend\n\t\telseif targetType == \"rotate\" then\n\t\t\trotateState = rotateState + elapsed\n\t\t\ttargetX = x + cos(rotateState)\n\t\t\ttargetY = y + sin(rotateState)\n\t\tend\n\t\tif not targetX or not targetY then\n\t\t\treturn\n\t\tend\n\t\tlocal angle = atan2(x - targetX, targetY - y)\n\t\tif angle <= 0 then -- -pi < angle < pi but we need/want a value between 0 and 2 pi\n\t\t\tif runAwayArrow then\n\t\t\t\tangle = -angle -- 0 < angle < pi\n\t\t\telse\n\t\t\t\tangle = pi - angle -- pi < angle < 2pi\n\t\t\tend\n\t\telse\n\t\t\tif runAwayArrow then\n\t\t\t\tangle = pi2 - angle -- pi < angle < 2pi\n\t\t\telse\n\t\t\t\tangle = pi - angle  -- 0 < angle < pi\n\t\t\tend\n\t\tend\n\t\tupdateArrow(angle - GetPlayerFacing(), calculateDistance(x, y, targetX, targetY))\n\tend)\nend\n\n\n----------------------\n--  Public Methods  --\n----------------------\n\n--/run DBM.Arrow:ShowRunTo(50, 50, 1, nil, true, true, \"Waypoint\", custom local mapID)\nlocal function show(runAway, x, y, distance, time, _, _, title)\n\tif DBM:HasMapRestrictions() then return end\n\tlocal player\n\tif type(x) == \"string\" then\n\t\tplayer, hideDistance, hideTime = x, y, hideDistance\n\tend\n\tframe:Show()\n\ttextframe:Show()\n\tif title then\n\t\tframe.title:Show()\n\t\tframe.title:SetText(title)\n\telse\n\t\tframe.title:Hide()\n\tend\n\tif runAway then\n\t\tframe.distance:Hide()\n\telse\n\t\tframe.distance:Show()\n\tend\n\trunAwayArrow = runAway\n\thideDistance = distance or runAway and 100 or 3\n\tif time then\n\t\thideTime = time + GetTime()\n\telse\n\t\thideTime = nil\n\tend\n\tif player then\n\t\ttargetType = \"player\"\n\t\ttargetPlayer = player\n\telse\n\t\ttargetType = \"fixed\"\n\t\ttargetX, targetY = x, y\n\tend\nend\n\nfunction arrowFrame:ShowRunTo(...)\n\treturn show(false, ...)\nend\n\nfunction arrowFrame:ShowRunAway(...)\n\treturn show(true, ...)\nend\n\n-- shows a static arrow\nfunction arrowFrame:ShowStatic(angle, time)\n\t--Static arrows do not need restrictions, and are still permitted even in 7.1\n\trunAwayArrow = false\n\thideDistance = 0\n\ttargetType = \"static\"\n\ttargetX = angle * pi2 / 360\n\tif time then\n\t\thideTime = time + GetTime()\n\telse\n\t\thideTime = nil\n\tend\n\tframe:Show()\n\ttextframe:Hide()--just in case they call static while a non static was already showing\nend\n\nfunction arrowFrame:IsShown()\n\treturn frame and frame:IsShown()\nend\n\nfunction arrowFrame:Hide()\n\ttextframe:Hide()\n\tframe:Hide()\nend\n\nlocal function endMove()\n\tframe:EnableMouse(false)\n\tarrowFrame:Hide()\nend\n\nfunction arrowFrame:Move()\n\ttargetType = \"rotate\"\n\trunAwayArrow = false\n\thideDistance = 0\n\tframe:EnableMouse(true)\n\tframe:Show()\n\tDBT:CreateBar(25, L.ARROW_MOVABLE, \"Interface\\\\Icons\\\\Spell_Holy_BorrowedTime\")\n\tDBM:Unschedule(endMove)\n\tDBM:Schedule(25, endMove)\nend\n\nfunction arrowFrame:LoadPosition()\n\tframe:SetPoint(DBM.Options.ArrowPoint, DBM.Options.ArrowPosX, DBM.Options.ArrowPosY)\nend\n\ndo\n\tSLASH_DEADLYBOSSMODSDWAY1 = \"/dway\"--/way not used because DBM would load before TomTom and can't check\n\tSlashCmdList[\"DEADLYBOSSMODSDWAY\"] = function(msg)\n\t\tif DBM:HasMapRestrictions() then\n\t\t\tDBM:AddMsg(L.NO_ARROW)\n\t\t\treturn\n\t\tend\n\t\tmsg = msg:sub(1):trim()\n\t\tlocal x, y = strsplit(\" \", msg) -- Try splitting by space\n\t\tlocal xNum, yNum = tonumber(x or \"\"), tonumber(y or \"\")\n\t\tif not xNum or not yNum then\n\t\t\tx, y = strsplit(\",\", msg) -- And then by comma\n\t\t\txNum, yNum = tonumber(x or \"\"), tonumber(y or \"\")\n\t\tend\n\t\tif xNum and yNum then\n\t\t\tDBM.Arrow:ShowRunTo(xNum, yNum, 1, nil, true)\n\t\t\treturn\n\t\tend\n\t\tif DBM.Arrow:IsShown() then\n\t\t\tDBM.Arrow:Hide()\n\t\telse\n\t\t\tDBM:AddMsg(L.ARROW_WAY_USAGE)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Core/DBM-BossBannerToast.lua",
    "content": "-- ************************************************************************************************************************************************************\n-- **** BOSS BANNER *******************************************************************************************************************************************\n-- ************************************************************************************************************************************************************\nlocal _, private = ...\n\n--------------\n--  Locals  --\n--------------\nlocal strfind, strformat, tostring = strfind, string.format, tostring\nlocal next, pairs, tconcat, tinsert, wipe = next, pairs, table.concat, tinsert, table.wipe\nlocal max, tonumber = max, tonumber\n\nlocal CreateFrame = CreateFrame\nlocal GetCurrentMapAreaID = GetCurrentMapAreaID\nlocal GetCurrentMapContinent = GetCurrentMapContinent\nlocal GetItemInfo = GetItemInfo\nlocal GetLocale = GetLocale\nlocal GetLootSlotInfo = GetLootSlotInfo\nlocal GetLootSlotLink = GetLootSlotLink\nlocal GetNumLootItems = GetNumLootItems\nlocal GetRealZoneText = GetRealZoneText\nlocal IsDressableItem = IsDressableItem\nlocal PlaySoundFile = PlaySoundFile\nlocal UnitIsDead = UnitIsDead\nlocal UnitIsFriend = UnitIsFriend\nlocal UnitGUID = UnitGUID\nlocal UnitName = UnitName\n\nlocal ITEM_QUALITY_COLORS = ITEM_QUALITY_COLORS\n--local ITEM_SET_NAME = ITEM_SET_NAME\n\nlocal L = DBM_CORE_L\n\nlocal BB_EXPAND_TIME = 0.25\t\t\t-- time to expand per item\nlocal BB_EXPAND_HEIGHT = 50\t\t\t-- pixels to expand per item\nlocal BB_MAX_LOOT = 8\t\t\t\t-- changed retail value from 7 to 8, since TOC Tribute chest (gob 195665) can drop 8 items\n\nlocal BB_STATE_BANNER_IN = 1\t\t-- banner is animating in\nlocal BB_STATE_KILL_HOLD = 2\t\t-- banner is holding with kill info\nlocal BB_STATE_SWITCH = 3\t\t\t-- banner is switching from kill to loot look\nlocal BB_STATE_LOOT_EXPAND = 4\t\t-- banner is expanding for loot items\nlocal BB_STATE_LOOT_INSERT = 5\t\t-- loot item is being inserted. banner will hold for longer than insertion animation to catch more loot.\nlocal BB_STATE_BANNER_OUT = 6\t\t-- banner is animating out\n\nlocal SOUNDKIT = {\n\t[\"UI_RAID_BOSS_DEFEATED\"] = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\UI_Raid_Boss_Defeated_01.ogg\", -- 50111\n\t[\"UI_PERSONAL_LOOT_BANNER\"] = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\UI_Raid_Loot_Banner_01.ogg\", -- 50893\n}\n\n--Hard code STANDARD_TEXT_FONT since skinning mods like to taint it (or worse, set it to nil, wtf?)\nlocal standardFont\nlocal BBfont = nil -- keep Luacheck happy\nif LOCALE_koKR then\n\tstandardFont = \"Fonts\\\\2002.TTF\"\nelseif LOCALE_zhCN then\n\tstandardFont = \"Fonts\\\\ARKai_T.ttf\"\nelseif LOCALE_zhTW then\n\tstandardFont = \"Fonts\\\\blei00d.TTF\"\nelseif LOCALE_ruRU then\n\tstandardFont = \"Fonts\\\\FRIZQT___CYR.TTF\"\nelse\n\tstandardFont = \"Fonts\\\\FRIZQT__.TTF\"\nend\n\n-- math toolkit\nlocal function round(value, dp)\n\treturn tonumber(strformat(\"%.\"..(dp or 14)..\"f\", tostring(value)))\nend\n\n-- Animations\nlocal function CreateScaleAnim(group, order, duration, scaleX, scaleY, delay, smoothing, endDelay, originPoint, originOffsetX, originOffsetY)\n\tlocal anim = group:CreateAnimation(\"Scale\")\n\tanim:SetOrder(order)\n\tanim:SetDuration(duration)\n\tanim:SetScale(scaleX, scaleY) -- Multipliers. Example: fromScaleX=\"5\" toScaleX=\"1\" is 1/5\n\n\tif delay then\n\t\tanim:SetStartDelay(delay)\n\tend\n\tif endDelay then\n\t\tanim:SetEndDelay(endDelay)\n\tend\n\tif smoothing then\n\t\tanim:SetSmoothing(smoothing)\n\tend\n\tif originPoint then\n\t\tanim:SetOrigin(originPoint, originOffsetX or 0, originOffsetY or 0)\n\tend\nend\n\nlocal function CreateAlphaAnim(group, order, duration, change, delay, smoothing, endDelay)\n\tlocal anim = group:CreateAnimation(\"Alpha\")\n\tanim:SetOrder(order)\n\tanim:SetDuration(duration)\n\tanim:SetChange(change)\n\n\tif delay then\n\t\tanim:SetStartDelay(delay)\n\tend\n\tif endDelay then\n\t\tanim:SetEndDelay(endDelay)\n\tend\n\tif smoothing then\n\t\tanim:SetSmoothing(smoothing)\n\tend\n\t-- OnFinished scripts do not work to set alpha since the group resets the alpha of the region back to its original value on the first frame after OnFinished.\nend\n\nlocal function CreateTranslationAnim(group, order, duration, xOffset, yOffset, delay, smoothing, endDelay)\n\tlocal anim = group:CreateAnimation(\"Translation\")\n\tanim:SetOrder(order)\n\tanim:SetDuration(duration)\n\tanim:SetOffset(xOffset, yOffset)\n\n\tif delay then\n\t\tanim:SetStartDelay(delay)\n\tend\n\tif endDelay then\n\t\tanim:SetEndDelay(endDelay)\n\tend\n\tif smoothing then\n\t\tanim:SetSmoothing(smoothing)\n\tend\nend\n\n-- Loot Handling\nlocal tooltipTextCache\nlocal tooltipSwitchCounter = 0\nlocal function GameTooltipCacheName(self)\n\t-- Fetch tooltip text from mouseover to also catch gob container name (e.g. Treasure chest).\n\n\t-- Don't keep cache indefinitely. Main use is to preserve the gob container name.\n\ttooltipSwitchCounter = tooltipSwitchCounter + 1\n\tif tooltipSwitchCounter > 2 then -- REVIEW!\n\t\ttooltipTextCache = nil\n\tend\n\n\tif not self:IsOwned(UIParent) then return end -- Only cache if tooltip refers to UIParent (used by gob tooltips). Discards many false positives like PlayerFrame, Interface Options, ElvUI, etc, that are picked up by below color text.\n\n\t-- Will fail with Interact with Target keybind if mouseover on something else, so attempt to mitigate it by restricting the caching to tooltips with only yellow text on the first line (can't restrict to only 1 line since there is, at least, one chest, on Hodir [gob 194201] - Rare Cache of Winter - which will have more than 1 line with the Quest [13822] \"Heroic: Hodir's Sigil\")\n\tlocal rt, gt, bt, at = _G[\"GameTooltipTextLeft1\"]:GetTextColor()\n\tif round(rt) == 0.99999780301005 and round(gt) == 0.82352757453918 and round(bt) == 0 and round(at) == 0.99999779462814 then -- yellow text from gob\n\t\ttooltipSwitchCounter = 0\n\t\ttooltipTextCache = _G[\"GameTooltipTextLeft1\"]:GetText()\n\tend\nend\nGameTooltip:SetScript(\"OnShow\", GameTooltipCacheName) -- Tooltip fetching resulting in unreliable results, where on a split frame it would not update the text (either nil or different than expected), so run it always to catch it as fast as possible. Will fail if mouseover another unit, since TT updates before LOOT_OPENED.\n\nlocal encounterLootCache = {}\nlocal locale = GetLocale()\nlocal function BossBanner_FetchAndSyncLootItems(self)\n\tlocal numLootItems = GetNumLootItems()\n\tlocal encounterId = self.encounterID\n\tlocal encounterName = self.encounterName or \"Unknown encounter\"\n\tlocal targetNpcDead = not UnitIsFriend(\"player\", \"target\") and UnitIsDead(\"target\")\n\tlocal lootSourceTTName = tooltipTextCache -- Not reliable to fetch tooltip text here (see above)\n\tlocal lootSourceMobName = targetNpcDead and UnitName(\"target\") -- targeted loot always refreshes in time\n\tlocal lootSourceName = lootSourceMobName or lootSourceTTName -- Prefer target unit rather than mouseover (chances of this being wrong are lower than the inverse)\n\tlocal lootSourceGUID = targetNpcDead and UnitGUID(\"target\")\n\tlocal lootSourceID = lootSourceGUID or lootSourceName\n\n\t-- build encounter loot cache\n\tencounterLootCache[encounterId] = encounterLootCache[encounterId] or {}\n\n\t-- check if looted corpse belongs to the DBM boss mod\n\tDBM:Debug(\"BossBanner for \"..encounterId..\" (\"..encounterName..\"), with loot arguments --> lootSourceGUID: \"..tostring(lootSourceGUID).. \" ; lootSourceName: \"..tostring(lootSourceName).. \" ; TT name: \"..tostring(_G[\"GameTooltipTextLeft1\"]:GetText()), 3)\n\tif lootSourceGUID then\n\t\tlocal lootSourceCID = DBM:GetCIDFromGUID(lootSourceGUID)\n\t\tDBM:Debug(\"BossBanner: pre-check on CID: \"..tostring(lootSourceCID)..\" and lootSouceName: \"..tostring(lootSourceName)..\" and lootSourceMobName: \"..tostring(lootSourceMobName)..\". Npcdead is: \"..tostring(targetNpcDead), 3)\n\t\tif lootSourceName == lootSourceMobName then\n\t\t\tlocal encounterBossMod = DBM:GetModByName(encounterId)\n\n\t\t\tif not encounterBossMod then\n\t\t\t\tDBM:Debug(\"BossBanner: no mod found for encounter \"..tostring(encounterId)..\". Ending fetching and syncing process.\")\n\t\t\t\treturn\n\t\t\tend\n\n\t\t\tif encounterBossMod.combatInfo.killMobs then -- Mod has multiple mobs\n\t\t\t\tlocal found = false\n\t\t\t\tfor mobId in pairs(encounterBossMod.combatInfo.killMobs) do -- key checking required, as value can be either true or false\n\t\t\t\t\tif mobId == lootSourceCID then\n\t\t\t\t\t\tfound = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tif not found then\n\t\t\t\t\tDBM:Debug(\"BossBanner: LootSourceCID (\"..lootSourceCID..\") does not belong to DBM mod (multiboss). Ending fetching and syncing process.\", 3)\n\t\t\t\t\treturn\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tif encounterBossMod.creatureId ~= lootSourceCID then\n\t\t\t\t\tDBM:Debug(\"BossBanner: LootSourceCID (\"..lootSourceCID..\") does not belong to DBM mod. Ending fetching and syncing process.\", 3)\n\t\t\t\t\treturn\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\t-- check if lootSourceID exists\n\tif not lootSourceID then\n\t\tDBM:Debug(\"BossBanner: no lootSourceID. Ending fetching and syncing process.\", 3)\n\t\treturn\n\tend\n\n\t-- check if player already opened loot window\n\tif encounterLootCache[encounterId][lootSourceID] and encounterLootCache[encounterId][lootSourceID].looted then\n\t\tDBM:Debug(\"BossBanner: Boss/Container (\"..lootSourceID..\") already looted. Ending fetching and syncing process.\", 3)\n\t\treturn\n\tend\n\n\tencounterLootCache[encounterId][lootSourceID] = encounterLootCache[encounterId][lootSourceID] or {}\n\tencounterLootCache[encounterId][lootSourceID].looted = true\n\n\tlocal tempLootItemCounter = {}\n\tif numLootItems > 0 then\n\t\tfor slot = 1, numLootItems do\n\t\t\tlocal texture, _, quantity = GetLootSlotInfo(slot) -- texture, itemName, quantity, quality, locked\n\t\t\tlocal itemLink = GetLootSlotLink(slot)\n\t\t\t-- Duplicate loot items cannot be distinguished from each other. Only by lootslot, which will only be preserved during looting while loot window is open. If loot window reopened after item(s) have been looted, it will be repopulated with ascending index.\n\t\t\t-- Dump: value=GetLootSlotLink(3)\n\t\t\t-- [1]=\"|cffa335ee|Hitem:50603:0:0:0:0:0:0:0:80|h[Cryptmaker]|h|r\"\n\t\t\t-- Dump: value=GetLootSlotLink(4)\n\t\t\t-- [1]=\"|cffa335ee|Hitem:50603:0:0:0:0:0:0:0:80|h[Cryptmaker]|h|r\"\n\t\t\tif itemLink then\n\t\t\t\tlocal _, _, _, _, itemID --[[_, _, Color, Ltype, Id, Enchant, Gem1, Gem2, Gem3, Gem4, Suffix, unique, LinkLvl, Name]] = strfind(itemLink, \"|?c?(%x*)|?H?([^:]*):?(%d+):?(%d*):?(%d*):?(%d*):?(%d*):?(%d*):?(%-?%d*):?(%-?%d*):?(%d*)|?h?%[?([^%[%]]*)%]?|?h?|?r?\")\n\t\t\t\tlocal finalItem = tostring(slot == numLootItems)\n\n\t\t\t\tencounterLootCache[encounterId][lootSourceID][itemID] = encounterLootCache[encounterId][lootSourceID][itemID] or {}\n\t\t\t\ttempLootItemCounter[itemID] = (tempLootItemCounter[itemID] or 0) + 1\n\n\t\t\t\tif next(encounterLootCache[encounterId][lootSourceID][itemID]) == nil then\n\t\t\t\t\ttinsert(encounterLootCache[encounterId][lootSourceID][itemID], false) -- insert it this way to account for duplicates. Boolean will be used in the Core sync handler\n\t\t\t\telse\n\n\t\t\t\t\tfor key, synced in ipairs(encounterLootCache[encounterId][lootSourceID][itemID]) do\n\t\t\t\t\t\tif key < tempLootItemCounter[itemID] and not synced then\n\t\t\t\t\t\t\ttinsert(encounterLootCache[encounterId][lootSourceID][itemID], false) -- insert it this way to account for duplicates. Boolean will be used in the Core sync handler\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\t\tif finalItem == \"true\" then\n\t\t\t\t\twipe(tempLootItemCounter)\n\t\t\t\tend\n\n\t\t\t\tDBM:Debug(\"BossBanner: Sending sync (v3) with the following args: \"..locale..\", \"..encounterId..\", \"..encounterName..\", \"..lootSourceName..\", \"..tostring(lootSourceGUID)..\", \"..itemID..\", \"..itemLink..\", \"..tostring(quantity)..\", \"..tostring(slot)..\", \"..texture..\", \"..finalItem, 3)\n\t\t\t\tprivate.sendSync(\"DBMv4-L\", (\"%s\\t%s\\t%s\\t%s\\t%s\\t%s\\t%s\\t%s\\t%s\\t%s\\t%s\\t%s\"):format(--[[version:]]\"3\", locale, encounterId, encounterName, lootSourceName, tostring(lootSourceGUID), itemID, itemLink, tostring(quantity), tostring(slot), texture, finalItem)) -- needs to be less than 255 characters, otherwise it won't be sent\n\t\t\tend\n\t\tend\n\tend\nend\n\n-- https://github.com/Gethe/wow-ui-source/blob/live/Interface/AddOns/Blizzard_FrameXML/TopBannerManager.lua\n------------------------------------------------------------------\n-- Top Banner Display Manager\n--\n-- Manager for displaying large UI elements at the top of the HUD.\n--\n-- Frames that want to display must have the following functions defined:\n-- PlayBanner(self, [data, [isExclusiveQueued]])\n-- StopBanner(self)\n--\n-- The following functions are optional:\n-- ResumeBanner(self) -- restart banner animation\n--\n------------------------------------------------------------------\nlocal TopBannerMgr = {}\nlocal TopBannerQueue = {}\n\nlocal function TopBannerManager_Show(frame, data, isExclusiveQueued)\n\tlocal banner = {frame = frame, data = data}\n\tif TopBannerMgr.currentBanner then\n\t\t-- queue up this frame to play later\n\t\tif (isExclusiveQueued) then\n\t\t\t-- check if multiple instances of this frame should be queued\n\t\t\tfor _, queuedBanner in pairs(TopBannerQueue) do\n\t\t\t\tif (isExclusiveQueued(banner, queuedBanner)) then\n\t\t\t\t\treturn\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\ttinsert(TopBannerQueue, banner)\n\telse\n\t\tTopBannerMgr.currentBanner = banner\n\t\tframe:PlayBanner(data)\n\tend\nend\n\n-- LOADING_SCREEN events not currently supported on 3.3.5a\n--[[local function TopBannerManager_LoadingScreenEnabled()\n\tif TopBannerMgr.currentBanner then\n\t\tTopBannerMgr.currentBanner.frame:StopBanner()\n\tend\nend\n\nlocal function TopBannerManager_LoadingScreenDisabled()\n\tlocal currentBanner = TopBannerMgr.currentBanner\n\tif currentBanner and currentBanner.frame.ResumeBanner then\n\t\tcurrentBanner.frame:ResumeBanner(currentBanner.data)\n\telse\n\t\tTopBannerManager_BannerFinished()\n\tend\nend]]\n\nlocal function TopBannerManager_BannerFinished()\n\tif #TopBannerQueue > 0 then\n\t\tTopBannerMgr.currentBanner = table.remove(TopBannerQueue, 1)\n--\t\tTopBannerMgr.currentBanner.frame:PlayBanner(TopBannerMgr.currentBanner.data) -- Needs investigation, crashes the client!\n\t\tDBM:Schedule(0, TopBannerMgr.currentBanner.frame.PlayBanner, TopBannerMgr.currentBanner.frame, TopBannerMgr.currentBanner.data)\n\telse\n\t\tif TopBannerMgr.currentBanner and next(TopBannerMgr.currentBanner.frame.pendingLoot) then -- has pending loot, send next. Checking for currentBanner to prevent nil Lua error on right-click\n\t\t\tTopBannerMgr.currentBanner.data.mode = \"LOOT\" -- change mode to LOOT, since KILL would show kill banner again\n\t\t\tDBM:Schedule(0, TopBannerMgr.currentBanner.frame.PlayBanner, TopBannerMgr.currentBanner.frame, TopBannerMgr.currentBanner.data)\n\t\telse\n\t\t\tTopBannerMgr.currentBanner = nil\n\t\tend\n\tend\nend\n\n--[[local function TopBannerManager_IsIdle()\n\treturn TopBannerMgr.currentBanner == nil\nend]]\n\n------------------------------------------------------------------\n-- https://www.townlong-yak.com/framexml/live/Helix/AtlasInfo.lua\nlocal AtlasInfo = {\n--\t[\"Interface/LevelUp/BossBanner\"]={\n\t\t[\"BossBanner-BottomFillagree\"]={66, 28, 0.865234, 0.994141, 0.314453, 0.369141, false, false, \"1x\"},\n\t\t[\"BossBanner-SkullCircle\"]={44, 44, 0.865234, 0.951172, 0.134766, 0.220703, false, false, \"1x\"},\n\t\t[\"BossBanner-TopFillagree\"]={176, 74, 0.244141, 0.587891, 0.576172, 0.720703, false, false, \"1x\"},\n\t\t[\"BossBanner-RedFlash\"]={92, 92, 0.00195312, 0.181641, 0.810547, 0.990234, false, false, \"1x\"},\n\t\t[\"BossBanner-LeftFillagree\"]={72, 40, 0.591797, 0.732422, 0.576172, 0.654297, false, false, \"1x\"},\n\t\t[\"BossBanner-RightFillagree\"]={72, 40, 0.736328, 0.876953, 0.576172, 0.654297, false, false, \"1x\"},\n\t\t[\"BossBanner-SkullSpikes\"]={50, 66, 0.865234, 0.962891, 0.00195312, 0.130859, false, false, \"1x\"},\n\t\t[\"BossBanner-BgBanner-Bottom\"]={440, 112, 0.00195312, 0.861328, 0.00195312, 0.220703, false, false, \"1x\"},\n\t\t[\"BossBanner-BgBanner-Top\"]={440, 112, 0.00195312, 0.861328, 0.224609, 0.443359, false, false, \"1x\"},\n\t\t[\"LootBanner-IconGlow\"]={40, 40, 0.865234, 0.943359, 0.447266, 0.525391, false, false, \"1x\"},\n\t\t[\"LootBanner-ItemBg\"]={269, 41, 0.244141, 0.769531, 0.724609, 0.804688, false, false, \"1x\"},\n\t\t[\"LootBanner-LootBagCircle\"]={44, 44, 0.865234, 0.951172, 0.224609, 0.310547, false, false, \"1x\"},\n\t\t[\"BossBanner-BgBanner-Mid\"]={440, 64, 0.00195312, 0.861328, 0.447266, 0.572266, false, false, \"1x\"},\n\t\t[\"BossBanner-RedLightning\"]={122, 118, 0.00195312, 0.240234, 0.576172, 0.806641, false, false, \"1x\"},\n--\t}, -- Interface/LevelUp/BossBanner\n}\n\nlocal function SetAtlas(textureObject, atlasName, useAtlasSize)\n\tlocal atlas = AtlasInfo[atlasName]\n\tif textureObject and atlas then\n\t\ttextureObject:SetTexture(\"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\BossBannerToast\\\\BossBanner\") -- hardcode texture, since there is only one required for this Toast\n\t\ttextureObject:SetTexCoord(atlas[3], atlas[4], atlas[5], atlas[6])\n\t\tif useAtlasSize then\n\t\t\ttextureObject:SetSize(atlas[1], atlas[2])\n\t\tend\n\t\treturn textureObject\n\tend\nend\n\n------------------------------------------------------------------\n-- https://github.com/Gethe/wow-ui-source/blob/live/Interface/AddOns/Blizzard_FrameXML/BossBannerToast.xml\n-- BossBanner frame from XML\nlocal BossBanner = CreateFrame(\"Frame\", \"BossBanner\", UIParent)\nBossBanner:Hide()\nBossBanner:SetSize(128, 156)\nBossBanner:SetPoint(\"TOP\", UIParent, 0, -120)\nBossBanner:EnableMouse(true) -- required for Mouse scripts\nBossBanner:SetAlpha(1)\nBossBanner.LootFrames = {}\nBossBanner.encounterLootCache = encounterLootCache -- custom, for debugging purposes\n\nlocal bossBannerEffectiveScale = BossBanner:GetEffectiveScale() -- workaround to 3.3.5a bug with UIScale not being accounted for in Translation animations\n\n-- BORDER\nBossBanner.BannerTop = BossBanner:CreateTexture(\"BannerTop\", \"BORDER\")\nlocal BannerTop = BossBanner.BannerTop\nBannerTop:SetBlendMode(\"BLEND\")\nBannerTop = SetAtlas(BannerTop, \"BossBanner-BgBanner-Top\", true)\nBannerTop:SetPoint(\"TOP\", 0, -44)\n--BannerTop:SetAlpha(0)\n\nBossBanner.BannerTopGlow = BossBanner:CreateTexture(\"BannerTopGlow\", \"BORDER\")\nlocal BannerTopGlow = BossBanner.BannerTopGlow\nBannerTopGlow:SetBlendMode(\"ADD\")\nBannerTopGlow = SetAtlas(BannerTopGlow, \"BossBanner-BgBanner-Top\", true)\nBannerTopGlow:SetPoint(\"TOP\", 0, -44)\nBannerTopGlow:SetAlpha(0)\n\nBossBanner.BannerBottom = BossBanner:CreateTexture(\"BannerBottom\", \"BORDER\")\nlocal BannerBottom = BossBanner.BannerBottom\nBannerBottom:SetBlendMode(\"BLEND\")\nBannerBottom = SetAtlas(BannerBottom, \"BossBanner-BgBanner-Bottom\", true)\nBannerBottom:SetPoint(\"BOTTOM\", 0, 0)\n--BannerBottom:SetAlpha(0)\n\nBossBanner.BannerBottomGlow = BossBanner:CreateTexture(\"BannerBottomGlow\", \"BORDER\")\nlocal BannerBottomGlow = BossBanner.BannerBottomGlow\nBannerBottomGlow:SetBlendMode(\"ADD\")\nBannerBottomGlow = SetAtlas(BannerBottomGlow, \"BossBanner-BgBanner-Bottom\", true)\nBannerBottomGlow:SetPoint(\"BOTTOM\", 0, 0)\nBannerBottomGlow:SetAlpha(0)\n\n-- BACKGROUND\nBossBanner.BannerMiddle = BossBanner:CreateTexture(\"BannerMiddle\", \"BACKGROUND\")\nlocal BannerMiddle = BossBanner.BannerMiddle\nBannerMiddle = SetAtlas(BannerMiddle, \"BossBanner-BgBanner-Mid\", true)\nBannerMiddle:SetBlendMode(\"BLEND\")\nBannerMiddle:SetPoint(\"TOPLEFT\", BannerTop, 0, -34)\nBannerMiddle:SetPoint(\"BOTTOMRIGHT\", BannerBottom, 0, 25)\n--BannerMiddle:SetAlpha(0)\n\nBossBanner.BannerMiddleGlow = BossBanner:CreateTexture(\"BannerMiddleGlow\", \"BACKGROUND\")\nlocal BannerMiddleGlow = BossBanner.BannerMiddleGlow\nBannerMiddleGlow = SetAtlas(BannerMiddleGlow, \"BossBanner-BgBanner-Mid\", true)\nBannerMiddleGlow:SetBlendMode(\"ADD\")\nBannerMiddleGlow:SetPoint(\"TOPLEFT\", BannerTop, 0, -34)\nBannerMiddleGlow:SetPoint(\"BOTTOMRIGHT\", BannerBottom, 0, 25)\nBannerMiddleGlow:SetAlpha(0)\n\n-- OVERLAY\nBossBanner.SkullCircle = BossBanner:CreateTexture(\"SkullCircle\", \"OVERLAY\")\nlocal SkullCircle = BossBanner.SkullCircle\nSkullCircle:SetBlendMode(\"BLEND\")\nSkullCircle = SetAtlas(SkullCircle, \"BossBanner-SkullCircle\", true)\nSkullCircle:SetPoint(\"CENTER\", BannerTop, 0, 36)\n--SkullCircle:SetAlpha(0)\n\nBossBanner.LootCircle = BossBanner:CreateTexture(\"LootCircle\", \"OVERLAY\")\nlocal LootCircle = BossBanner.LootCircle\nLootCircle:SetBlendMode(\"BLEND\")\nLootCircle = SetAtlas(LootCircle, \"LootBanner-LootBagCircle\", true)\nLootCircle:SetPoint(\"CENTER\", BannerTop, 0, 36)\n--LootCircle:SetAlpha(0)\n\n-- BossBanner.RedFlash = BossBanner:CreateTexture(\"RedFlash\", \"OVERLAY\") -- unused, see below on sublevel 4\n-- local RedFlash = BossBanner.RedFlash\n-- RedFlash:SetBlendMode(\"ADD\")\n-- RedFlash = SetAtlas(RedFlash, \"BossBanner-RedFlash\", true)\n-- RedFlash:SetPoint(\"CENTER\", SkullCircle, 0, 3)\n-- RedFlash:SetAlpha(0)\n\n-- ARTWORK\nBossBanner.BottomFillagree = BossBanner:CreateTexture(\"BottomFillagree\", \"ARTWORK\")\nlocal BottomFillagree = BossBanner.BottomFillagree\nBottomFillagree:SetBlendMode(\"BLEND\")\nBottomFillagree = SetAtlas(BottomFillagree, \"BossBanner-BottomFillagree\", true)\nBottomFillagree:SetPoint(\"BOTTOM\", 0, 8)\n--BottomFillagree:SetAlpha(0)\n\nBossBanner.SkullSpikes = BossBanner:CreateTexture(\"SkullSpikes\", \"ARTWORK\")\nlocal SkullSpikes = BossBanner.SkullSpikes\nSkullSpikes:SetBlendMode(\"BLEND\")\nSkullSpikes = SetAtlas(SkullSpikes, \"BossBanner-SkullSpikes\", true)\nSkullSpikes:SetPoint(\"CENTER\", SkullCircle, -1, 6)\n--SkullSpikes:SetAlpha(0)\n\nBossBanner.RightFillagree = BossBanner:CreateTexture(\"RightFillagree\", \"ARTWORK\")\nlocal RightFillagree = BossBanner.RightFillagree\nRightFillagree:SetBlendMode(\"BLEND\")\nRightFillagree = SetAtlas(RightFillagree, \"BossBanner-RightFillagree\", true)\nRightFillagree:SetPoint(\"CENTER\", SkullCircle, 47, 6) -- edited to final position\n--RightFillagree:SetAlpha(0)\n\nBossBanner.LeftFillagree = BossBanner:CreateTexture(\"LeftFillagree\", \"ARTWORK\")\nlocal LeftFillagree = BossBanner.LeftFillagree\nLeftFillagree:SetBlendMode(\"BLEND\")\nLeftFillagree = SetAtlas(LeftFillagree, \"BossBanner-LeftFillagree\", true)\nLeftFillagree:SetPoint(\"CENTER\", SkullCircle, -47, 6) -- edited to final position\n--LeftFillagree:SetAlpha(0)\n\nBossBanner.Title = BossBanner:CreateFontString(\"Title\", \"ARTWORK\", \"QuestFont_Large\") -- REVIEW for non latin locales. Retail uses QuestFont_Enormous with 30 value height\nlocal Title = BossBanner.Title\nTitle:SetHeight(30) -- Doesn't increase text height, only FontString height\nlocal titleFont, _, titleFlag = Title:GetFont()\nTitle:SetFont(titleFont, 30, titleFlag) -- Doesn't reach size 30. Client limitation. SetTextHeight would pixelify the font, so keep it tiny\nTitle:SetText(L.BOSS_YOU_DEFEATED)\nTitle:SetPoint(\"TOP\", BannerTop, 0, -47)\nTitle:SetTextColor(1, 0, 0, 0)\nTitle:SetAlpha(1) -- Workaround for alpha animation bug. Keep it below SetTextColor, since it sets alpha to zero\n\nBossBanner.SubTitle = BossBanner:CreateFontString(\"SubTitle\", \"ARTWORK\", \"GameFontNormalLarge\")\nlocal SubTitle = BossBanner.SubTitle\nSubTitle:SetText(L.BOSS_KILL_SUBTITLE)\nSubTitle:SetPoint(\"TOP\", BottomFillagree, \"BOTTOM\", 0, 0)\nSubTitle:SetTextColor(1, 0, 0, 0)\nSubTitle:SetAlpha(1) -- Workaround for alpha animation bug. Keep it below SetTextColor, since it sets alpha to zero\n\n-- OVERLAY, texture sublevel 2\nBossBanner.FlashBurst = BossBanner:CreateTexture(\"FlashBurst\", \"OVERLAY\", nil, 2)\nlocal FlashBurst = BossBanner.FlashBurst\nFlashBurst:SetBlendMode(\"ADD\")\nFlashBurst = SetAtlas(FlashBurst, \"BossBanner-RedLightning\", true)\nFlashBurst:SetPoint(\"CENTER\", SkullSpikes, 15, -4)\nFlashBurst:SetAlpha(0.01)\n\nBossBanner.FlashBurstLeft = BossBanner:CreateTexture(\"FlashBurstLeft\", \"OVERLAY\", nil, 2)\nlocal FlashBurstLeft = BossBanner.FlashBurstLeft\nFlashBurstLeft:SetBlendMode(\"ADD\")\nFlashBurstLeft = SetAtlas(FlashBurstLeft, \"BossBanner-RedLightning\", true)\nFlashBurstLeft:SetPoint(\"CENTER\", SkullSpikes, -15, -4)\nFlashBurstLeft:SetAlpha(0.01)\n\n-- OVERLAY, texture sublevel 3\nBossBanner.FlashBurstCenter = BossBanner:CreateTexture(\"FlashBurstCenter\", \"OVERLAY\", nil, 3)\nlocal FlashBurstCenter = BossBanner.FlashBurstCenter\nFlashBurstCenter:SetBlendMode(\"ADD\")\nFlashBurstCenter = SetAtlas(FlashBurstCenter, \"BossBanner-RedLightning\", true)\nFlashBurstCenter:SetPoint(\"CENTER\", SkullSpikes)\nFlashBurstCenter:SetAlpha(0.01)\n\n-- OVERLAY, texture sublevel 4\nBossBanner.RedFlash = BossBanner:CreateTexture(\"RedFlash\", \"OVERLAY\", nil, 4) -- retail writes RedFlash twice, but the animation runs on this texture\nlocal RedFlash = BossBanner.RedFlash\nRedFlash:SetBlendMode(\"ADD\")\nRedFlash = SetAtlas(RedFlash, \"BossBanner-RedFlash\", true)\nRedFlash:SetPoint(\"CENTER\", SkullSpikes, 1, -4)\nRedFlash:SetAlpha(0.01)\n\n\n-- OnItemEnter/Leave functions, for the loot frame\nlocal function BossBanner_OnLootItemEnter(self)\n\t-- no tooltip when banner is animating out\n\tif BossBanner.animState ~= BB_STATE_BANNER_OUT and not BossBanner.showingTooltip then -- avoid OnEnter spam by checking for tooltip being visible\n\t\tGameTooltip:SetOwner(self, \"ANCHOR_LEFT\")\n\t\tGameTooltip:SetHyperlink(self:GetParent().itemLink)\n\t\tGameTooltip:Show()\n\t\tBossBanner.showingTooltip = true\n\tend\nend\n\nlocal function BossBanner_OnLootItemLeave() -- self\n\tif BossBanner.showingTooltip then\n\t\tGameTooltip:Hide()\n\t\tBossBanner.showingTooltip = false\n\tend\nend\n\n-- Loot frame factory, based on BossBannerLootFrameTemplate\nlocal function createLootFrame(parent)\n\tlocal frame = CreateFrame(\"Frame\", nil, parent)\n\tframe:SetSize(269, 44)\n\n\tlocal effectiveScale = frame:GetEffectiveScale()\n\n\t-- Background texture\n\tframe.Background = frame:CreateTexture(nil, \"BACKGROUND\")\n\tlocal Background = frame.Background\n\tBackground:SetBlendMode(\"BLEND\")\n\tBackground = SetAtlas(Background, \"LootBanner-ItemBg\", true)\n\tBackground:SetPoint(\"CENTER\")\n\n\t-- Icon texture\n\tframe.Icon = frame:CreateTexture(nil, \"BORDER\")\n\tlocal Icon = frame.Icon\n\tIcon:SetSize(37, 37)\n\tIcon:SetPoint(\"LEFT\", --[[124]] 14, 0) -- Workaround for Translation last frame flicker of IconHitBox animations 124 initial point is mimicked in animations. Also prevents the need for OnFinished SetPoint\n\tIcon:SetTexture(\"Interface\\\\Icons\\\\inv_misc_bag_felclothbag\")\n\n\t-- FontString for Item Count\n\tframe.Count = frame:CreateFontString(nil, \"ARTWORK\", \"NumberFontNormal\")\n\tlocal Count = frame.Count\n\tif BBfont then\n\t\tCount:SetFont(BBfont, 14 + DBM.Options.BBFontSize, DBM.Options.BBFontStyle)\n\t\tif DBM.Options.BBFontShadow then\n\t\t\tCount:SetShadowOffset(1, -1)\n\t\tend\n\tend\n\tCount:SetJustifyH(\"RIGHT\")\n\tCount:SetPoint(\"BOTTOMRIGHT\", Icon, -5, 2)\n\tCount:Hide()\n\n\t-- FontString for Item Name\n\tframe.ItemName = frame:CreateFontString(nil, \"ARTWORK\", \"GameFontNormalMed3\") -- Same as retail GameFontNormalMed2\n\tlocal ItemName = frame.ItemName\n\tif BBfont then\n\t\tItemName:SetFont(BBfont, 14 + DBM.Options.BBFontSize, DBM.Options.BBFontStyle)\n\t\tif DBM.Options.BBFontShadow then\n\t\t\tItemName:SetShadowOffset(1, -1)\n\t\tend\n\tend\n\tItemName:SetWordWrap(false) -- try to mimic maxLines = 1\n\tItemName:SetJustifyH(\"LEFT\")\n\tItemName:SetSize(204, 0)\n\tItemName:SetPoint(\"TOPLEFT\", frame, 56, -7)\n\n\t-- FontString for Set Name (hidden)\n\tframe.SetName = frame:CreateFontString(nil, \"ARTWORK\", \"GameFontHighlight\")\n\tlocal SetName = frame.SetName\n\tif BBfont then\n\t\tSetName:SetFont(BBfont, 12 + DBM.Options.BBFontSize, DBM.Options.BBFontStyle)\n\t\tif DBM.Options.BBFontShadow then\n\t\t\tSetName:SetShadowOffset(1, -1)\n\t\tend\n\tend\n\tSetName:SetWordWrap(false) -- try to mimic maxLines = 1\n\tSetName:SetJustifyH(\"LEFT\")\n\tSetName:SetSize(204, 0)\n\tSetName:SetPoint(\"TOPLEFT\", ItemName, \"BOTTOMLEFT\", 0, 0)\n\tSetName:SetTextColor(0, 1.0, 0)\n\tSetName:Hide()\n\n\t-- FontString for Player Name (originally), re-used for looted Boss name)\n\tframe.PlayerName = frame:CreateFontString(nil, \"ARTWORK\", \"GameFontNormal\")\n\tlocal PlayerName = frame.PlayerName\n\tif BBfont then\n\t\tPlayerName:SetFont(BBfont, 12 + DBM.Options.BBFontSize, DBM.Options.BBFontStyle)\n\t\tif DBM.Options.BBFontShadow then\n\t\t\tPlayerName:SetShadowOffset(1, -1)\n\t\tend\n\tend\n\tPlayerName:SetWordWrap(false) -- try to mimic maxLines = 1\n\tPlayerName:SetJustifyH(\"LEFT\")\n\tPlayerName:SetSize(204, 0)\n\tPlayerName:SetPoint(\"TOPLEFT\", ItemName, \"BOTTOMLEFT\", 0, 0)\n\n\t-- Icon Hitbox Frame\n\tframe.IconHitBox = CreateFrame(\"Frame\", nil, frame)\n\tlocal IconHitBox = frame.IconHitBox\n\tIconHitBox:SetSize(37, 37)\n\tIconHitBox:SetPoint(\"CENTER\", Icon)\n\tIconHitBox:EnableMouse(true) -- required for Mouse scripts\n\n\t-- IconBorder (hidden)\n\tIconHitBox.IconBorder = IconHitBox:CreateTexture(nil, \"BORDER\")\n\tlocal IconBorder = IconHitBox.IconBorder\n\tIconBorder:SetTexture(\"Interface\\\\Common\\\\WhiteIconFrame\")\n\tIconBorder:SetSize(37, 37)\n\tIconBorder:SetPoint(\"CENTER\")\n\tIconBorder:Hide()\n\n\t-- Glow Texture\n\tIconHitBox.Glow = IconHitBox:CreateTexture(nil, \"ARTWORK\")\n\tlocal Glow = IconHitBox.Glow\n\tGlow:SetBlendMode(\"ADD\")\n\tGlow = SetAtlas(Glow, \"LootBanner-IconGlow\", true)\n\tGlow:SetPoint(\"CENTER\")\n\tGlow:SetVertexColor(0.63921568627451, 0.2078431372549, 0.93333333333333)\n\tGlow:SetAlpha(0) -- Workaround to SetAlpha bug on OnFinished\n\n\t-- GlowWhite Texture\n\tIconHitBox.GlowWhite = IconHitBox:CreateTexture(nil, \"ARTWORK\")\n\tlocal GlowWhite = IconHitBox.GlowWhite\n\tGlowWhite:SetBlendMode(\"ADD\")\n\tGlowWhite = SetAtlas(GlowWhite, \"LootBanner-IconGlow\", true)\n\tGlowWhite:SetPoint(\"CENTER\")\n\tGlowWhite:SetAlpha(0) -- Workaround to SetAlpha bug on OnFinished\n\n\t-- Icon Overlay\n\tIconHitBox.IconOverlay = IconHitBox:CreateTexture(nil, \"OVERLAY\", nil, 1)\n\tlocal IconOverlay = IconHitBox.IconOverlay\n\tIconOverlay:SetSize(37, 37)\n\tIconOverlay:SetPoint(\"CENTER\")\n\tIconOverlay:Hide()\n\n\t-- Icon Overlay 2\n\tIconHitBox.IconOverlay2 = IconHitBox:CreateTexture(nil, \"OVERLAY\", nil, 2)\n\tlocal IconOverlay2 = IconHitBox.IconOverlay2\n\tIconOverlay2:SetSize(37, 37)\n\tIconOverlay2:SetPoint(\"CENTER\")\n\tIconOverlay2:Hide()\n\n\t-- Add the frame to the LootFrames table\n\ttinsert(parent.LootFrames, frame)\n\n\t-- Add scripts\n\t-- Add OnLoad script manually\n\tIconHitBox.UpdateTooltip = function(owner)\n\t\tBossBanner_OnLootItemEnter(owner)\n\tend\n\tIconHitBox:SetScript(\"OnEnter\", BossBanner_OnLootItemEnter)\n\tIconHitBox:SetScript(\"OnLeave\", BossBanner_OnLootItemLeave)\n\n\t-- Animations\n\tBackground.animForAnim = Background:CreateAnimationGroup()\n\tIcon.animForAnim = Icon:CreateAnimationGroup()\n\tIconBorder.animForAnim = IconBorder:CreateAnimationGroup()\n\tIconOverlay.animForAnim = IconOverlay:CreateAnimationGroup()\n\tIconOverlay2.animForAnim = IconOverlay2:CreateAnimationGroup()\n\tGlow.animForAnim = Glow:CreateAnimationGroup()\n\tIconHitBox.animForAnim = IconHitBox:CreateAnimationGroup()\n\tGlowWhite.animForAnim = GlowWhite:CreateAnimationGroup()\n\tItemName.animForAnim = ItemName:CreateAnimationGroup()\n\tPlayerName.animForAnim = PlayerName:CreateAnimationGroup()\n\tSetName.animForAnim = SetName:CreateAnimationGroup()\n\n\t-- Animation\n\tCreateAlphaAnim(Background.animForAnim, 1, 0, -1) -- Workaround to SetAlpha bug on OnFinished. fromAlpha=\"0\" toAlpha=\"1\"\n\tCreateAlphaAnim(Background.animForAnim, 1, 0.45, 1)\n\n\tCreateAlphaAnim(Icon.animForAnim, 1, 0, -1, 0.1) -- Workaround to SetAlpha bug on OnFinished. fromAlpha=\"0\" toAlpha=\"1\"\n\tCreateAlphaAnim(Icon.animForAnim, 1, 0.25, 1, 0.1)\n\n\tCreateAlphaAnim(IconBorder.animForAnim, 1, 0, -1, 0.1) -- Workaround to SetAlpha bug on OnFinished. fromAlpha=\"0\" toAlpha=\"1\"\n\tCreateAlphaAnim(IconBorder.animForAnim, 1, 0.25, 1, 0.1)\n\n\tCreateAlphaAnim(IconOverlay.animForAnim, 1, 0, -1, 0.1) -- Workaround to SetAlpha bug on OnFinished. fromAlpha=\"0\" toAlpha=\"1\"\n\tCreateAlphaAnim(IconOverlay.animForAnim, 1, 0.25, 1, 0.1)\n\n\tCreateAlphaAnim(IconOverlay2.animForAnim, 1, 0, -1, 0) -- Workaround to SetAlpha bug on OnFinished. fromAlpha=\"0\" toAlpha=\"1\"\n\tCreateAlphaAnim(IconOverlay2.animForAnim, 1, 0.25, 1, 0)\n\n\tCreateTranslationAnim(Icon.animForAnim, 1, 0, 110*effectiveScale, 0)\n\tCreateTranslationAnim(Icon.animForAnim, 1, 0.4, -110*effectiveScale, 0, 0.25, \"OUT\")\n\n\tCreateTranslationAnim(IconHitBox.animForAnim, 1, 0, 110*effectiveScale, 0)\n\tCreateTranslationAnim(IconHitBox.animForAnim, 1, 0.4, -110*effectiveScale, 0, 0.25, \"OUT\") -- group, order, duration, xOffset, yOffset, delay, smoothing\n\n\tCreateAlphaAnim(Glow.animForAnim, 1, 0, -1) -- Workaround to SetAlpha bug on OnFinished. fromAlpha=\"0\" toAlpha=\"1\"\n\tCreateAlphaAnim(Glow.animForAnim, 1, 0.15, 1, nil, \"IN\")\n\tCreateAlphaAnim(Glow.animForAnim, 1, 0.10, 1, 0.15) -- Workaround to SetAlpha bug on OnFinished. fromAlpha=\"1\" toAlpha=\"0\"\n\tCreateAlphaAnim(Glow.animForAnim, 1, 1, -1, 0.25) -- REVIEW order of this animation. May change order and delays\n\n\tCreateAlphaAnim(GlowWhite.animForAnim, 1, 0, -1) -- Workaround to SetAlpha bug on OnFinished. fromAlpha=\"0\" toAlpha=\"1\"\n\tCreateAlphaAnim(GlowWhite.animForAnim, 1, 0.25, 1, nil, \"IN\")\n\tCreateAlphaAnim(GlowWhite.animForAnim, 1, 0.25, -1, 0.25) --  REVIEW order\n--\tCreateScaleAnim(GlowWhite.animForAnim, 1, 0, 1, 1)\n\tCreateScaleAnim(GlowWhite.animForAnim, 1, 0.25, 1.25, 1.25, nil, \"IN_OUT\") -- group, order, duration, scaleX, scaleY, delay, smoothing)\n\n\tCreateAlphaAnim(ItemName.animForAnim, 1, 0, -1, 0.4)\n\tCreateAlphaAnim(ItemName.animForAnim, 1, 0.25, 1, 0.4)\n\n\tCreateAlphaAnim(PlayerName.animForAnim, 1, 0, -1, 0.4)\n\tCreateAlphaAnim(PlayerName.animForAnim, 1, 0.25, 1, 0.4)\n\n\tCreateAlphaAnim(SetName.animForAnim, 1, 0, -1, 0.4)\n\tCreateAlphaAnim(SetName.animForAnim, 1, 0.25, 1, 0.4)\n\n\t-- AnimationGroup\n\tframe.Anim = {}\n\tlocal Anim = frame.Anim\n\tAnim.Background = Background.animForAnim\n\tAnim.Icon = Icon.animForAnim\n\tAnim.IconBorder = IconBorder.animForAnim\n\tAnim.IconOverlay = IconOverlay.animForAnim\n\tAnim.IconOverlay2 = IconOverlay2.animForAnim\n\tAnim.Glow = Glow.animForAnim\n\tAnim.IconHitBox = IconHitBox.animForAnim\n\tAnim.GlowWhite = GlowWhite.animForAnim\n\tAnim.ItemName = ItemName.animForAnim\n\tAnim.PlayerName = PlayerName.animForAnim\n\tAnim.SetName = SetName.animForAnim\n\n\tAnim.Background.DebugName = \"Background\"\n\tAnim.Icon.DebugName = \"Icon\"\n\tAnim.IconBorder.DebugName = \"IconBorder\"\n\tAnim.IconOverlay.DebugName = \"IconOverlay\"\n\tAnim.IconOverlay2.DebugName = \"IconOverlay2\"\n\tAnim.Glow.DebugName = \"Glow\"\n\tAnim.IconHitBox.DebugName = \"IconHitBox\"\n\tAnim.GlowWhite.DebugName = \"GlowWhite\"\n\tAnim.ItemName.DebugName = \"ItemName\"\n\tAnim.PlayerName.DebugName = \"PlayerName\"\n\tAnim.SetName.DebugName = \"SetName\"\n\n--\tlocal animCounter, animFinishedCounter = 0,0\n\tAnim.Play = function(self)\n\t\t-- Add OnPlay functionality manually\n\t\t-- SetAlpha cannot be set manually with OnPlay/OnFinished scripts, due to 3.3.5a animation system limitation. It will blink for 1 frame since AnimationGroup resets alpha to previous value.\n--\t\tIcon:SetPoint(\"LEFT\", 124, 0)\n\n\t\t-- Play the AnimationGroup\n\t\tfor _, anim in pairs(self) do\n\t\t\tif type(anim) == \"table\" then\n--\t\t\t\tanimCounter = animCounter + 1\n\t\t\t\tanim:Stop()\n\t\t\t\tanim:Play()\n\t\t\t\t--[[\n\t\t\t\tanim:SetScript(\"OnFinished\", function()\n\t\t\t\t\tanimFinishedCounter = animFinishedCounter + 1\n\t\t\t\t\tif animFinishedCounter == animCounter then\n\t\t\t\t\t\tAnim.OnFinished()\n\t\t\t\t\tend\n\t\t\t\tend)\n\t\t\t\t]]\n\t\t\tend\n\t\tend\n\tend\n\n\t--[[ Add OnFinished functionality manually\n\tAnim.OnFinished = function()\n\t\tanimCounter, animFinishedCounter = 0,0\n\t\tIcon:SetPoint(\"LEFT\", 14, 0)\n\tend]]\n\n\t-- Return the frame\n\treturn frame\nend\n\n-- Frames\nlocal bossBannerLootFrame = createLootFrame(BossBanner)\nbossBannerLootFrame:Hide()\nbossBannerLootFrame:SetPoint(\"TOP\", 0, -84)\n\n-- Animations\n-- AnimationGroup: AnimIn\nSkullCircle.animForAnimIn = SkullCircle:CreateAnimationGroup()\nBannerTop.animForAnimIn = BannerTop:CreateAnimationGroup()\nBannerBottom.animForAnimIn = BannerBottom:CreateAnimationGroup()\nBannerMiddle.animForAnimIn = BannerMiddle:CreateAnimationGroup()\nBottomFillagree.animForAnimIn = BottomFillagree:CreateAnimationGroup()\nSkullSpikes.animForAnimIn = SkullSpikes:CreateAnimationGroup()\nRightFillagree.animForAnimIn = RightFillagree:CreateAnimationGroup()\nLeftFillagree.animForAnimIn = LeftFillagree:CreateAnimationGroup()\nBannerTopGlow.animForAnimIn = BannerTopGlow:CreateAnimationGroup()\nBannerBottomGlow.animForAnimIn = BannerBottomGlow:CreateAnimationGroup()\nBannerMiddleGlow.animForAnimIn = BannerMiddleGlow:CreateAnimationGroup()\nRedFlash.animForAnimIn = RedFlash:CreateAnimationGroup()\nFlashBurst.animForAnimIn = FlashBurst:CreateAnimationGroup()\nFlashBurstLeft.animForAnimIn = FlashBurstLeft:CreateAnimationGroup()\nFlashBurstCenter.animForAnimIn = FlashBurstCenter:CreateAnimationGroup()\nTitle.animForAnimIn = Title:CreateAnimationGroup()\nSubTitle.animForAnimIn = SubTitle:CreateAnimationGroup()\n\n-- Order 1 of AnimIn (0.15s duration)\nCreateScaleAnim(SkullCircle.animForAnimIn, 1, 0, 5, 5)\nCreateScaleAnim(SkullCircle.animForAnimIn, 1, 0.15, 0.2, 0.2)\nCreateAlphaAnim(SkullCircle.animForAnimIn, 1, 0, -1)\nCreateAlphaAnim(SkullCircle.animForAnimIn, 1, 0.1, 1)\n\n-- Order 2 of AnimIn (with order 1 set to 0.15s endDelay)\nCreateAlphaAnim(BannerTop.animForAnimIn, 1, 0, -1, nil, nil, 0.15)\nCreateAlphaAnim(BannerTop.animForAnimIn, 2, 0.25, 1, 0.2)\nCreateScaleAnim(BannerTop.animForAnimIn, 1, 0, 0.1, 1, 0.15)\nCreateScaleAnim(BannerTop.animForAnimIn, 2, 0.3, 10, 1, 0.1)\n\nCreateAlphaAnim(BannerBottom.animForAnimIn, 1, 0, -1, nil, nil, 0.15)\nCreateAlphaAnim(BannerBottom.animForAnimIn, 2, 0.25, 1, 0.2)\nCreateScaleAnim(BannerBottom.animForAnimIn, 1, 0, 0.1, 1, 0.15)\nCreateScaleAnim(BannerBottom.animForAnimIn, 2, 0.3, 10, 1, 0.1)\n\nCreateAlphaAnim(BannerMiddle.animForAnimIn, 1, 0, -1, nil, nil, 0.15)\nCreateAlphaAnim(BannerMiddle.animForAnimIn, 2, 0.25, 1, 0.2)\nCreateScaleAnim(BannerMiddle.animForAnimIn, 1, 0, 0.1, 1, 0.15)\nCreateScaleAnim(BannerMiddle.animForAnimIn, 2, 0.3, 10, 1, 0.1)\n\nCreateAlphaAnim(BottomFillagree.animForAnimIn, 1, 0, -1, nil, nil, 0.15)\nCreateAlphaAnim(BottomFillagree.animForAnimIn, 2, 0.15, 1)\n\nCreateScaleAnim(SkullSpikes.animForAnimIn, 1, 0, 0.5, 0.5, 0.15)\nCreateScaleAnim(SkullSpikes.animForAnimIn, 2, 0.1, 2, 2, 0.1)\nCreateAlphaAnim(SkullSpikes.animForAnimIn, 1, 0, -1, nil, nil, 0.15)\nCreateAlphaAnim(SkullSpikes.animForAnimIn, 2, 0.1, 1)\n\nCreateAlphaAnim(RightFillagree.animForAnimIn, 1, 0, -1, nil, nil, 0.15)\nCreateAlphaAnim(RightFillagree.animForAnimIn, 2, 0.1, 1)\n--CreateTranslationAnim(RightFillagree.animForAnimIn, 1, 0, -37*bossBannerEffectiveScale, 0, 0.15)\nCreateTranslationAnim(RightFillagree.animForAnimIn, 2, 0.15, 37*bossBannerEffectiveScale, 0, 0.15)\nCreateScaleAnim(RightFillagree.animForAnimIn, 1, 0, 0.5, 0.5, 0.15, nil, nil, \"BOTTOMLEFT\")\nCreateScaleAnim(RightFillagree.animForAnimIn, 2, 0.15, 2, 2, 0.15, nil, nil, \"BOTTOMLEFT\")\nRightFillagree.animForAnimIn:SetScript(\"OnFinished\", function()\n\tRightFillagree:SetPoint(\"CENTER\", SkullCircle, \"CENTER\", 47, 6)\nend)\n\nCreateAlphaAnim(LeftFillagree.animForAnimIn, 1, 0, -1, nil, nil, 0.15)\nCreateAlphaAnim(LeftFillagree.animForAnimIn, 2, 0.1, 1)\n--CreateTranslationAnim(LeftFillagree.animForAnimIn, 1, 0, 37*bossBannerEffectiveScale, 0, 0.15)\nCreateTranslationAnim(LeftFillagree.animForAnimIn, 2, 0.15, -37*bossBannerEffectiveScale, 0, 0.15)\nCreateScaleAnim(LeftFillagree.animForAnimIn, 1, 0, 0.5, 0.5, 0.15, nil, nil, \"BOTTOMRIGHT\")\nCreateScaleAnim(LeftFillagree.animForAnimIn, 2, 0.15, 2, 2, 0.15, nil, nil, \"BOTTOMRIGHT\")\nLeftFillagree.animForAnimIn:SetScript(\"OnFinished\", function()\n\tLeftFillagree:SetPoint(\"CENTER\", SkullCircle, \"CENTER\", -47, 6)\nend)\n\nCreateAlphaAnim(BannerTopGlow.animForAnimIn, 1, 0, -1, nil, nil, 0.15)\nCreateAlphaAnim(BannerTopGlow.animForAnimIn, 2, 0.25, 1, 0.9)\nCreateScaleAnim(BannerTopGlow.animForAnimIn, 1, 0, 0.5, 1, 0.15)\nCreateScaleAnim(BannerTopGlow.animForAnimIn, 2, 0.5, 3.2, 1, 0.9)\nCreateAlphaAnim(BannerTopGlow.animForAnimIn, 2, 0.6, -1, 1.1)\n\nCreateAlphaAnim(BannerBottomGlow.animForAnimIn, 1, 0, -1, nil, nil, 0.15)\nCreateAlphaAnim(BannerBottomGlow.animForAnimIn, 2, 0.25, 1, 0.9)\nCreateScaleAnim(BannerBottomGlow.animForAnimIn, 1, 0, 0.5, 1, 0.15)\nCreateScaleAnim(BannerBottomGlow.animForAnimIn, 2, 0.5, 3.2, 1, 0.9)\nCreateAlphaAnim(BannerBottomGlow.animForAnimIn, 2, 0.6, -1, 1.1)\n\nCreateAlphaAnim(BannerMiddleGlow.animForAnimIn, 1, 0, -1, nil, nil, 0.15)\nCreateAlphaAnim(BannerMiddleGlow.animForAnimIn, 2, 0.25, 1, 0.9)\nCreateScaleAnim(BannerMiddleGlow.animForAnimIn, 1, 0, 0.5, 1, 0.15)\nCreateScaleAnim(BannerMiddleGlow.animForAnimIn, 2, 0.5, 3.2, 1, 0.9)\nCreateAlphaAnim(BannerMiddleGlow.animForAnimIn, 2, 0.6, -1, 1.1)\n\nCreateAlphaAnim(Title.animForAnimIn, 1, 0, -1, nil, nil, 0.15)\nCreateAlphaAnim(Title.animForAnimIn, 2, 0.25, 1, 0.2)\n\nCreateAlphaAnim(SubTitle.animForAnimIn, 1, 0, -1, nil, nil, 0.15)\nCreateAlphaAnim(SubTitle.animForAnimIn, 1, 0.25, 1, 0.2)\n\nCreateAlphaAnim(RedFlash.animForAnimIn, 1, 0, -1, nil, nil, 0.15)\nCreateAlphaAnim(RedFlash.animForAnimIn, 2, 0.1, 1)\nCreateScaleAnim(RedFlash.animForAnimIn, 1, 0, 2.5, 2.5, 0.15)\nCreateScaleAnim(RedFlash.animForAnimIn, 2, 0.25, 0.4, 0.4, nil, \"IN\")\nCreateAlphaAnim(RedFlash.animForAnimIn, 2, 0.5, -1, 0.25)\n\nCreateAlphaAnim(FlashBurst.animForAnimIn, 1, 0, -1, nil, nil, 0.15)\nCreateAlphaAnim(FlashBurst.animForAnimIn, 2, 0.25, 1, 0.25)\nCreateScaleAnim(FlashBurst.animForAnimIn, 1, 0, 1, 0.75, 0.15, nil, nil, \"LEFT\")\nCreateScaleAnim(FlashBurst.animForAnimIn, 2, 0.4, 1.25, 1, 0.25, nil, nil, \"LEFT\")\n--CreateTranslationAnim(FlashBurst.animForAnimIn, 1, 0, 0, 0, nil, nil, 0.15)\nCreateTranslationAnim(FlashBurst.animForAnimIn, 2, 0.5, 10*bossBannerEffectiveScale, 0, 0.25)\nCreateAlphaAnim(FlashBurst.animForAnimIn, 2, 0.4, -1, 0.25)\n\nCreateAlphaAnim(FlashBurstLeft.animForAnimIn, 1, 0, -1, nil, nil, 0.15)\nCreateAlphaAnim(FlashBurstLeft.animForAnimIn, 2, 0.25, 1, 0.25)\nCreateScaleAnim(FlashBurstLeft.animForAnimIn, 1, 0, 1, 0.75, 0.15, nil, nil, \"RIGHT\")\nCreateScaleAnim(FlashBurstLeft.animForAnimIn, 2, 0.5, 1.25, 1, 0.25, nil, nil, \"RIGHT\")\n--CreateTranslationAnim(FlashBurstLeft.animForAnimIn, 1, 0, 0, 0, nil, nil, 0.15)\nCreateTranslationAnim(FlashBurstLeft.animForAnimIn, 2, 0.5, -10*bossBannerEffectiveScale, 0, 0.25)\nCreateAlphaAnim(FlashBurstLeft.animForAnimIn, 2, 0.5, -1, 0.25)\n\nCreateAlphaAnim(FlashBurstCenter.animForAnimIn, 1, 0, -1, nil, nil, 0.15)\nCreateAlphaAnim(FlashBurstCenter.animForAnimIn, 2, 0.25, 1, 0.25)\nCreateScaleAnim(FlashBurstCenter.animForAnimIn, 1, 0, 1, 1, 0.15)\nCreateScaleAnim(FlashBurstCenter.animForAnimIn, 2, 0.5, 1.25, 1.25, 0.25)\nCreateAlphaAnim(FlashBurstCenter.animForAnimIn, 2, 0.5, -1, 0.25)\n\nBossBanner.AnimIn = {}\nlocal AnimIn = BossBanner.AnimIn\nAnimIn.SkullCircle = SkullCircle.animForAnimIn\nAnimIn.BannerTop = BannerTop.animForAnimIn\nAnimIn.BannerBottom = BannerBottom.animForAnimIn\nAnimIn.BannerMiddle = BannerMiddle.animForAnimIn\nAnimIn.BottomFillagree = BottomFillagree.animForAnimIn\nAnimIn.SkullSpikes = SkullSpikes.animForAnimIn\nAnimIn.RightFillagree = RightFillagree.animForAnimIn\nAnimIn.LeftFillagree = LeftFillagree.animForAnimIn\nAnimIn.BannerTopGlow = BannerTopGlow.animForAnimIn\nAnimIn.BannerBottomGlow = BannerBottomGlow.animForAnimIn\nAnimIn.BannerMiddleGlow = BannerMiddleGlow.animForAnimIn\nAnimIn.RedFlash = RedFlash.animForAnimIn\nAnimIn.FlashBurst = FlashBurst.animForAnimIn\nAnimIn.FlashBurstLeft = FlashBurstLeft.animForAnimIn\nAnimIn.FlashBurstCenter = FlashBurstCenter.animForAnimIn\nAnimIn.Title = Title.animForAnimIn\nAnimIn.SubTitle = SubTitle.animForAnimIn\n\nAnimIn.Play = function(self)\n\tif BossBanner.AnimOut:IsPlaying() then\n\t\tBossBanner.AnimOut:Stop()\n\tend\n\n\tLeftFillagree:SetPoint(\"CENTER\", SkullCircle, \"CENTER\", -10, 6)\n\tRightFillagree:SetPoint(\"CENTER\", SkullCircle, \"CENTER\", 10, 6)\n\tSkullCircle:SetAlpha(1)\n\tLootCircle:SetAlpha(0)\n\n\tfor _, anim in pairs(self) do\n\t\tif type(anim) == \"table\" then -- reject functions\n\t\t\tanim:Stop()\n\t\t\tanim:Play()\n\t\tend\n\tend\nend\n\nAnimIn.Stop = function(self)\n\tfor _, anim in pairs(self) do\n\t\tif type(anim) == \"table\" then\n\t\t\tanim:Stop()\n\t\tend\n\tend\nend\n\n-- AnimationGroup: AnimSwitch\nSkullCircle.animForAnimSwitch = SkullCircle:CreateAnimationGroup()\nTitle.animForAnimSwitch = Title:CreateAnimationGroup()\nSubTitle.animForAnimSwitch = SubTitle:CreateAnimationGroup()\nLootCircle.animForAnimSwitch = LootCircle:CreateAnimationGroup()\n\nCreateAlphaAnim(SkullCircle.animForAnimSwitch, 1, 0, 1)\nCreateAlphaAnim(SkullCircle.animForAnimSwitch, 1, 0.5, -1)\n\nCreateAlphaAnim(Title.animForAnimSwitch, 1, 0, 1)\nCreateAlphaAnim(Title.animForAnimSwitch, 1, 0.25, -1)\n\nCreateAlphaAnim(SubTitle.animForAnimSwitch, 1, 0, 1)\nCreateAlphaAnim(SubTitle.animForAnimSwitch, 1, 0.25, -1)\n\nCreateAlphaAnim(LootCircle.animForAnimSwitch, 1, 0, 0)\nCreateAlphaAnim(LootCircle.animForAnimSwitch, 1, 0.5, 1)\n\nBossBanner.AnimSwitch = {}\nlocal AnimSwitch = BossBanner.AnimSwitch\nAnimSwitch.SkullCircle = SkullCircle.animForAnimSwitch\nAnimSwitch.Title = Title.animForAnimSwitch\nAnimSwitch.SubTitle = SubTitle.animForAnimSwitch\nAnimSwitch.LootCircle = LootCircle.animForAnimSwitch\n\nAnimSwitch.Play = function(self)\n\t-- intended final alpha, and animation will workaround OnFinished alpha bug\n\tSkullCircle:SetAlpha(0)\n\tTitle:SetAlpha(0)\n\tSubTitle:SetAlpha(0)\n\tLootCircle:SetAlpha(1)\n\n\tfor _, anim in pairs(self) do\n\t\tif type(anim) == \"table\" then\n\t\t\tanim:Stop()\n\t\t\tanim:Play()\n\t\tend\n\tend\nend\n\nAnimSwitch.Stop = function(self)\n\tfor _, anim in pairs(self) do\n\t\tif type(anim) == \"table\" then\n\t\t\tanim:Stop()\n\t\tend\n\tend\nend\n\nlocal function BossBanner_OnAnimOutFinished(self) -- moved up from retail source code, to avoid globals\n\tlocal banner = self:GetParent()\n\tbanner.animState = nil\n\tbanner.lootShown = 0\n\tbanner:Hide()\n\tbanner:SetHeight(banner.baseHeight)\n\t-- Disabling all of these SetAlpha due to 3.3.5a animation bug that holds attributes like alpha hostage until AnimationGroup OnFinished ends.\n\t-- banner.BannerTop:SetAlpha(0)\n\t-- banner.BannerBottom:SetAlpha(0)\n\t-- banner.BannerMiddle:SetAlpha(0)\n\t-- banner.BottomFillagree:SetAlpha(0)\n\t-- banner.SkullSpikes:SetAlpha(0)\n\t-- banner.RightFillagree:SetAlpha(0)\n\t-- banner.LeftFillagree:SetAlpha(0)\n\t-- banner.Title:SetAlpha(0)\n\t-- banner.SubTitle:SetAlpha(0)\n\t-- banner.FlashBurst:SetAlpha(0)\n\t-- banner.FlashBurstLeft:SetAlpha(0)\n\t-- banner.FlashBurstCenter:SetAlpha(0)\n\t-- banner.RedFlash:SetAlpha(0)\n\tfor i = 1, #banner.LootFrames do\n\t\tbanner.LootFrames[i]:Hide()\n\tend\n\tbanner:SetHeight(banner.baseHeight)\n\tTopBannerManager_BannerFinished()\nend\n\n-- AnimationGroup: AnimOut\nBossBanner.AnimOut = BossBanner:CreateAnimationGroup()\nCreateAlphaAnim(BossBanner.AnimOut, 1, 0, 1)\nCreateAlphaAnim(BossBanner.AnimOut, 1, 0.5, -1)\nBossBanner.AnimOut:SetScript(\"OnFinished\", function(self)\n\tBossBanner_OnAnimOutFinished(self)\nend)\n\n------------------------------------------------------------------\n-- https://github.com/Gethe/wow-ui-source/blob/live/Interface/AddOns/Blizzard_FrameXML/BossBannerToast.lua\nlocal function BossBanner_AnimBannerIn(self)\n\tself.lootShown = 0\t\t-- how many items the UI is displaying\n\tself.AnimIn:Play()\nend\n\nlocal function BossBanner_AnimKillHold() -- self\n\t-- nothing here\nend\n\nlocal function BossBanner_AnimSwitch(self, entry)\n\tif next(self.pendingLoot) then\n\t\t-- we have loot\n\t\tself.AnimSwitch:Play()\n\t\tif DBM.Options.PlayBBSound then\n\t\t\tPlaySoundFile(SOUNDKIT.UI_PERSONAL_LOOT_BANNER)\n\t\tend\n\t\tentry.duration = 0.5\n\telse\n\t\tentry.duration = 0\n\tend\nend\n\nlocal function BossBanner_AnimLootExpand(self, entry)\n\t-- don't need to expand for first item\n\tif self.lootShown > 0 and self.lootShown < BB_MAX_LOOT and next(self.pendingLoot) then\n\t\tentry.duration = BB_EXPAND_TIME\n\telse\n\t\tentry.duration = 0\n\tend\nend\n\nlocal function SetItemButtonQuality(button, quality)\n\tif button and button.IconBorder then\n\t\tbutton.IconBorder:SetTexture(\"Interface\\\\Addons\\\\DBM-Core\\\\textures\\\\WhiteIconFrame\")\n\n\t\tlocal color = quality and ITEM_QUALITY_COLORS[quality]\n\t\tbutton.IconBorder:SetVertexColor(color.r, color.g, color.b)\n\tend\nend\n\nlocal colorRarity = {\n\t[\"ff9d9d9d\"] = 0,\t-- Poor\n\t[\"ffffffff\"] = 1,\t-- Common\n\t[\"ff1eff00\"] = 2,\t-- Uncommon\n\t[\"ff0070dd\"] = 3,\t-- Rare\n\t[\"ffa335ee\"] = 4,\t-- Epic\n\t[\"ffff8000\"] = 5,\t-- Legendary\n\t[\"ffe6cc80\"] = 6,\t-- Artifact/Heirloom\n}\n\nlocal function findSetName(text)\n    -- Pattern to match (X/Y) at the end of a string\n    local pattern = \"(.+)%s?%((%d+)/(%d+)%)$\"\n\n\tlocal setName, current, total = text:match(pattern)\n\n\tif setName then\n\t\treturn setName:trim(), tonumber(current), tonumber(total)\n\tend\n\n    return nil  -- Set name not found\nend\n\nlocal itemScanTooltip\nlocal function BossBanner_ConfigureLootFrame(lootFrame, data) -- moved up from retail source code, to avoid globals\n\t-- data: { itemID = itemID, quantity = quantity, slot = slot, lootSourceName = lootSourceName, itemLink = itemLink, texture = texture }\n\tlocal _, itemName, itemRarity, itemTexture, colorString, rarityColor, setName\n\titemName, _, itemRarity, _, _, _, _, _, _, itemTexture = GetItemInfo(data.itemLink)\n\n\tif not itemTexture then -- uncached item\n\t\tDBM:Debug(\"BossBanner caught an uncached item: \" .. data.itemLink)\n\t\t-- retrieve itemName and itemRarity from itemLink\n\t\t_, _, colorString, _, _, _, _, _, _, _, _, _, _, itemName = strfind(data.itemLink, \"|?c?(%x*)|?H?([^:]*):?(%d+):?(%d*):?(%d*):?(%d*):?(%d*):?(%d*):?(%-?%d*):?(%-?%d*):?(%d*)|?h?%[?([^%[%]]*)%]?|?h?|?r?\")\n\t\titemRarity = colorRarity[colorString]\n\n\t\titemTexture = data.texture\n\tend\n\n\tif IsDressableItem(data.itemLink) then -- is gear\n\t\t-- retrieve item set through a hidden tooltip\n\t\titemScanTooltip = itemScanTooltip or CreateFrame(\"GameTooltip\", \"BossBannerItemScanningTooltip\", nil, \"GameTooltipTemplate\")\n\t\titemScanTooltip:SetOwner(UIParent, \"ANCHOR_NONE\")\n\t\titemScanTooltip:SetHyperlink(data.itemLink)\n\t\tfor i = 2, itemScanTooltip:NumLines() do\n\t\t\tlocal text = _G[\"BossBannerItemScanningTooltipTextLeft\"..i]:GetText()\n\t\t\tsetName = findSetName(text)\n\t\t\tif setName then\n\t\t\t\tbreak\n\t\t\tend\n\t\tend\n\tend\n\n\tlootFrame.ItemName:SetText(itemName)\n\trarityColor = ITEM_QUALITY_COLORS[itemRarity]\n\tlootFrame.ItemName:SetTextColor(rarityColor.r, rarityColor.g, rarityColor.b)\n\tlootFrame.Background:SetVertexColor(rarityColor.r, rarityColor.g, rarityColor.b)\n\tlootFrame.Icon:SetTexture(itemTexture)\n\n\tSetItemButtonQuality(lootFrame.IconHitBox, itemRarity)\n\n\tif data.quantity > 1 then\n\t\tlootFrame.Count:Show()\n\t\tlootFrame.Count:SetText(data.quantity)\n\telse\n\t\tlootFrame.Count:Hide()\n\tend\n\n\tif setName then\n\t\tlootFrame.ItemName:ClearAllPoints()\n\t\tlootFrame.ItemName:SetPoint(\"TOPLEFT\", 56, -2)\n\t\tlootFrame.SetName:SetText((\"Set: %s\"):format(setName))\n\t\tlootFrame.SetName:Show()\n\t\tlootFrame.PlayerName:ClearAllPoints()\n\t\tlootFrame.PlayerName:SetPoint(\"TOPLEFT\", lootFrame.SetName, \"BOTTOMLEFT\", 0, 0)\n\telse\n\t\tlootFrame.ItemName:ClearAllPoints()\n\t\tlootFrame.ItemName:SetPoint(\"TOPLEFT\", 56, -7)\n\t\tlootFrame.SetName:Hide()\n\t\tlootFrame.PlayerName:ClearAllPoints()\n\t\tlootFrame.PlayerName:SetPoint(\"TOPLEFT\", lootFrame.ItemName, \"BOTTOMLEFT\", 0, 0)\n\tend\n\n\tlootFrame.PlayerName:SetText(data.lootSourceName) -- Will be used for looted Boss/Treasure Chest name, so replaced data.playerName with a custom value\n--\tlocal classColor = RAID_CLASS_COLORS[data.className]\n--\tlootFrame.PlayerName:SetTextColor(classColor.r, classColor.g, classColor.b)\n\tlootFrame.itemLink = data.itemLink\nend\n\nlocal function BossBanner_AnimLootInsert(self, entry)\n\tlocal key, data = next(self.pendingLoot)\n\tif key and self.lootShown < BB_MAX_LOOT then\n\t\t-- we have an item, show it\n\t\tself.pendingLoot[key] = nil\n\t\tself.lootShown = self.lootShown + 1\n\t\tlocal lootFrame = self.LootFrames[self.lootShown]\n\t\tif not lootFrame then\n\t\t\tlootFrame = createLootFrame(self)\n\t\t\tlootFrame:SetPoint(\"TOP\", self.LootFrames[self.lootShown - 1], \"BOTTOM\", 0, -6)\n\t\tend\n\t\tBossBanner_ConfigureLootFrame(lootFrame, data)\n\t\tlootFrame:Show()\n\t\tlootFrame.Anim:Play()\n\t\t-- loop back if more items\n\t\tif next(self.pendingLoot) and self.lootShown < BB_MAX_LOOT then\n\t\t\tBossBanner.SetAnimState(self, BB_STATE_LOOT_EXPAND)\n\t\t\treturn true\n\t\tend\n\tend\n\tif self.lootShown > 0 then\n\t\tentry.duration = 4\n\telse\n\t\tentry.duration = 0\n\tend\nend\n\nlocal function BossBanner_AnimBannerOut(self) -- self, entry\n\tself.AnimOut:Play()\nend\n\nlocal BB_ANIMATION_CONTROL = {\n\t[BB_STATE_BANNER_IN] =\t{ duration = 1.85,\tonStartFunc = BossBanner_AnimBannerIn },\n\t[BB_STATE_KILL_HOLD] =\t{ duration = 2,\t\tonStartFunc = BossBanner_AnimKillHold },\n\t[BB_STATE_SWITCH] =\t\t{ duration = nil,\tonStartFunc = BossBanner_AnimSwitch },\n\t[BB_STATE_LOOT_EXPAND] ={ duration = nil,\tonStartFunc = BossBanner_AnimLootExpand },\n\t[BB_STATE_LOOT_INSERT] ={ duration = nil,\tonStartFunc = BossBanner_AnimLootInsert },\n\n\t-- The duration for BB_STATE_BANNER_OUT only needs to be longer than the animation time of AnimOut,\n\t-- which is 0.5 seconds. BossBanner_OnAnimOutFinished will then preempt the state machine and end the animation.\n\t[BB_STATE_BANNER_OUT] =\t{ duration = 5,\tonStartFunc = BossBanner_AnimBannerOut },\n}\n\nlocal function BossBanner_BeginAnims(self, animState)\n\tBossBanner.SetAnimState(self, animState or BB_STATE_BANNER_IN)\nend\n\nfunction BossBanner.SetAnimState(self, animState)\n\tlocal entry = BB_ANIMATION_CONTROL[animState]\n\tif entry then\n\t\tlocal redirected = entry.onStartFunc(self, entry)\n\t\tif not redirected then\n\t\t\tself.animState = animState\n\t\t\tself.animTimeLeft = entry.duration\n\t\tend\n\telse\n\t\tself.animState = nil\n\t\tself.animTimeLeft = nil\n\tend\nend\n\nlocal defaultTranslationOffsetsTable = {\n\t[\"RightFillagree-From\"] = {-37, 0},\n\t[\"RightFillagree-To\"] = {37, 0},\n\t[\"LeftFillagree-From\"] = {37, 0},\n\t[\"LeftFillagree-To\"] = {-37, 0},\n--\t[\"FlashBurst-From\"] = {0, 0},\n\t[\"FlashBurst-To\"] = {10, 0},\n--\t[\"FlashBurstLeft-From\"] = {0, 0},\n\t[\"FlashBurstLeft-To\"] = {-10, 0},\n\t[\"LootFrame-Icon-From\"] = {110, 0},\n\t[\"LootFrame-Icon-To\"] = {-110, 0},\n}\n\nlocal xOffset, yOffset\nlocal function validateOffsets(animation, defaultkey, effectiveScale)\n\txOffset, yOffset = animation:GetOffset()\n\tif round(xOffset, 0) ~= round((defaultTranslationOffsetsTable[defaultkey][1]*effectiveScale), 0) then -- due to inconsistent precision with floats, use round for a preventive measure\n\t\txOffset = defaultTranslationOffsetsTable[defaultkey][1]*effectiveScale\n\tend\n\tif round(yOffset, 0) ~= round((defaultTranslationOffsetsTable[defaultkey][2]*effectiveScale), 0) then -- due to inconsistent precision with floats, use round for a preventive measure\n\t\tyOffset = defaultTranslationOffsetsTable[defaultkey][2]*effectiveScale\n\tend\n\n\tanimation:SetOffset(xOffset, yOffset)\nend\n\nlocal function fixTranslationAnim()\n\tlocal effectiveScale = BossBanner:GetEffectiveScale() -- Lootframes inherit from this too, so keep it as is\n--\tlocal rightFillagreeTranslationAnimFrom = (select(3, BossBanner.RightFillagree.animForAnimIn:GetAnimations()))\n--\tlocal rightFillagreeTranslationAnimTo = (select(4, BossBanner.RightFillagree.animForAnimIn:GetAnimations()))\n\tlocal rightFillagreeTranslationAnimTo = (select(3, BossBanner.RightFillagree.animForAnimIn:GetAnimations()))\n--\tlocal leftFillagreeTranslationAnimFrom = (select(3, BossBanner.LeftFillagree.animForAnimIn:GetAnimations()))\n--\tlocal leftFillagreeTranslationAnimTo = (select(4, BossBanner.LeftFillagree.animForAnimIn:GetAnimations()))\n\tlocal leftFillagreeTranslationAnimTo = (select(3, BossBanner.LeftFillagree.animForAnimIn:GetAnimations()))\n--\tlocal flashBurstTranslationAnimTo = (select(6, BossBanner.FlashBurst.animForAnimIn:GetAnimations()))\n--\tlocal flashBurstLeftTranslationAnimTo = (select(6, BossBanner.FlashBurstLeft.animForAnimIn:GetAnimations()))\n\tlocal flashBurstTranslationAnimTo = (select(5, BossBanner.FlashBurst.animForAnimIn:GetAnimations()))\n\tlocal flashBurstLeftTranslationAnimTo = (select(5, BossBanner.FlashBurstLeft.animForAnimIn:GetAnimations()))\n\n\tlocal lootFrameIconTranslationAnimFrom, lootFrameIconTranslationAnimTo\n\n--\tvalidateOffsets(rightFillagreeTranslationAnimFrom, \"RightFillagree-From\", effectiveScale)\n\tvalidateOffsets(rightFillagreeTranslationAnimTo, \"RightFillagree-To\", effectiveScale)\n--\tvalidateOffsets(leftFillagreeTranslationAnimFrom, \"LeftFillagree-From\", effectiveScale)\n\tvalidateOffsets(leftFillagreeTranslationAnimTo, \"LeftFillagree-To\", effectiveScale)\n\tvalidateOffsets(flashBurstTranslationAnimTo, \"FlashBurst-To\", effectiveScale)\n\tvalidateOffsets(flashBurstLeftTranslationAnimTo, \"FlashBurstLeft-To\", effectiveScale)\n\n\tfor _, lootFrame in ipairs(BossBanner.LootFrames) do\n\t\tlootFrameIconTranslationAnimFrom, lootFrameIconTranslationAnimTo = select(3, lootFrame.Icon.animForAnim:GetAnimations())\n\t\tvalidateOffsets(lootFrameIconTranslationAnimFrom, \"LootFrame-Icon-From\", effectiveScale)\n\t\tvalidateOffsets(lootFrameIconTranslationAnimTo, \"LootFrame-Icon-To\", effectiveScale)\n\n\t\tlootFrameIconTranslationAnimFrom, lootFrameIconTranslationAnimTo = lootFrame.IconHitBox.animForAnim:GetAnimations()\n\t\tvalidateOffsets(lootFrameIconTranslationAnimFrom, \"LootFrame-Icon-From\", effectiveScale)\n\t\tvalidateOffsets(lootFrameIconTranslationAnimTo, \"LootFrame-Icon-To\", effectiveScale)\n\tend\nend\n\nlocal function BossBanner_Play(self, data)\n\tif data then\n\t\tfixTranslationAnim()\n\t\tif data.mode == \"KILL\" then\n\t\t\tself.Title:SetAlpha(1)\n\t\t\tself.SubTitle:SetAlpha(1)\n\t\t\tself.Title:SetText(data.name)\n\t\t\tself.SubTitle:Show()\n\t\t\tself.Title:Show()\n\t\t\tself:Show()\n\t\t\tself.encounterID = data.encounterID\n\t\t\tself.encounterName = data.name\n\t\t\tBossBanner_BeginAnims(self)\n\t\t\tif DBM.Options.PlayBBSound then\n\t\t\t\tPlaySoundFile(SOUNDKIT.UI_RAID_BOSS_DEFEATED)\n\t\t\tend\n\t\telseif data.mode == \"LOOT\" then\n\t\t\tself.BannerTop:SetAlpha(1)\n\t\t\tself.BannerBottom:SetAlpha(1)\n\t\t\tself.BannerMiddle:SetAlpha(1)\n\t\t\tself.RightFillagree:SetAlpha(1)\n\t\t\tself.LeftFillagree:SetAlpha(1)\n\t\t\tself.BottomFillagree:SetAlpha(1)\n\t\t\tself.SkullSpikes:SetAlpha(1)\n\t\t\tself.SkullCircle:SetAlpha(0)\n\t\t\tself.LootCircle:SetAlpha(1)\n\t\t\tself.Title:Hide()\n\t\t\tself.SubTitle:Hide()\n\t\t\tself:Show()\n\t\t\tBossBanner_BeginAnims(self, BB_STATE_LOOT_EXPAND)\n\t\t\tif DBM.Options.PlayBBSound then\n\t\t\t\tPlaySoundFile(SOUNDKIT.UI_PERSONAL_LOOT_BANNER)\n\t\t\tend\n\t\tend\n\tend\nend\n\nlocal function BossBanner_Stop(self)\n\tself.AnimIn:Stop()\n\tself.AnimSwitch:Stop()\n\tself.AnimOut:Stop()\n\tself:Hide()\nend\n\nlocal function BossBanner_IsExclusiveQueued() -- moved up from retail source code, to avoid globals\n\treturn true\nend\n\n\nfunction BossBanner:OnEvent(event, ...)\n\tif not DBM.Options.EnableBB then return end\n\tDBM:Debug(\"DBM BossBanner:OnEvent called with the following args--> event: \"..event..\", vararg: \"..tconcat({...}, \", \"), 3)\n\tif event == \"BOSS_KILL\" then\n\t\twipe(self.pendingLoot)\n\t\tlocal encounterID, name = ...\n\t\tTopBannerManager_Show(self, { encounterID = encounterID, name = name, mode = \"KILL\" }, BossBanner_IsExclusiveQueued)\n\t\tDBM:Unschedule(BossBanner.ClearEncounterCache)\n\t\tDBM:Schedule(150, BossBanner.ClearEncounterCache, BossBanner)\n\telseif event == \"ENCOUNTER_LOOT_RECEIVED\" and DBM.Options.PlayBBLoot then -- encounterId, itemID, itemLink, quantity, slot, texture, lootSourceName, lootSourceGUID\n\t\tlocal encounterID, itemID, itemLink, quantity, slot, texture, lootSourceName = ...\n\t\t-- local _, instanceType = GetInstanceInfo()\n\t\tif encounterID == self.encounterID --[[and (instanceType == \"party\" or instanceType == \"raid\")]] then\n\t\t\t-- add loot to pending list\n\t\t\tlocal data = { itemID = itemID, quantity = quantity, slot = slot, lootSourceName = lootSourceName, itemLink = itemLink, texture = texture } -- added texture to circumvent uncached items\n\t\t\ttinsert(self.pendingLoot, data)\n\t\t\t-- check state\n\t\t\tif ( self.animState == BB_STATE_LOOT_INSERT and self.lootShown < BB_MAX_LOOT ) then\n\t\t\t\t-- show it now\n\t\t\t\tBossBanner.SetAnimState(self, BB_STATE_LOOT_EXPAND)\n\t\t\telseif ( not self.animState and self.lootShown == 0 ) then\n\t\t\t\t-- banner is not displaying and have not done loot for this encounter yet\n\t\t\t\t-- TODO: animate in kill banner\n\t\t\t\tTopBannerManager_Show(self, { encounterID = encounterID, name = nil, mode = \"LOOT\" }, BossBanner_IsExclusiveQueued)\n\t\t\tend\n\t\tend\n\tend\nend\n\nlocal function BossBanner_OnLoad(self)\n\tself.PlayBanner = BossBanner_Play\n\tself.StopBanner = BossBanner_Stop\n\tself:RegisterEvent(\"LOOT_OPENED\")\n\tself.pendingLoot = {}\n\tself.baseHeight = self:GetHeight()\nend\n\nlocal function keyPairsConcat(table, separator)\n\tlocal array = {}\n\tfor k in pairs(table) do\n\t\ttinsert(array, k)\n\tend\n\tif not array then return \"\" end\n\treturn tconcat(array, separator or \", \")\nend\n\nlocal function BossBanner_OnEvent(self, event)\n\tif event == \"LOOT_OPENED\" then\n\t\tif self.encounterID then\n\t\t\tlocal encounterBossMod = DBM:GetModByName(self.encounterID)\n\t\t\t-- check if DBM mod exists/is loaded\n\t\t\tif not encounterBossMod then\n\t\t\t\tDBM:Debug(\"BossBanner: no mod found for encounter \"..tostring(self.encounterID)..\". Loot fetching denied.\", 3)\n\t\t\t\treturn\n\t\t\tend\n\n\t\t\t-- check if player is in DBM mod mapID/zone\n\t\t\tlocal zoneName = GetRealZoneText()\n\t\t\tlocal mapID = GetCurrentMapAreaID() > 4 and GetCurrentMapAreaID() or GetCurrentMapContinent() -- workaround to support world bosses mod loading\n\t\t\tlocal encounterBossModMapOrZone = encounterBossMod.zones\n\t\t\tDBM:Debug(\"BossBanner: Before fetching loot, checking encounter \"..tostring(self.encounterID)..\" zones {\"..keyPairsConcat(encounterBossModMapOrZone)..\"}, for map: \"..tostring(mapID)..\" or zone: \"..tostring(zoneName)..\". Results are: map-\"..tostring(encounterBossModMapOrZone[mapID])..\", zone-\"..tostring(encounterBossModMapOrZone[zoneName]), 3)\n\t\t\tif not encounterBossModMapOrZone[mapID] and not encounterBossModMapOrZone[zoneName] then\n\t\t\t\tDBM:Debug(\"BossBanner: Looting outside of zone for encounter \"..tostring(self.encounterID)..\". Loot fetching denied.\", 3)\n\t\t\t\treturn\n\t\t\tend\n\t\t\tDBM:Debug(\"BossBanner: Loot fetching allowed for encounter \"..tostring(self.encounterID), 3)\n\t\t\tBossBanner_FetchAndSyncLootItems(self)\n\t\tend\n\tend\nend\n\nlocal function BossBanner_OnUpdate(self, elapsed)\n\tif not self.animState then\n\t\treturn\n\tend\n\tself.animTimeLeft = self.animTimeLeft - elapsed\n\tif self.animState == BB_STATE_LOOT_EXPAND then\n\t\tlocal newHeight = self.baseHeight + (self.lootShown * BB_EXPAND_HEIGHT) - (max(self.animTimeLeft, 0) / BB_EXPAND_TIME * BB_EXPAND_HEIGHT)\n\t\tself:SetHeight(newHeight)\n\telseif self.animState == BB_STATE_LOOT_INSERT and self.showingTooltip then\n\t\t-- keep it at 2 seconds left\n\t\tself.animTimeLeft = 2\n\tend\n\tif ( self.animTimeLeft <= 0 ) then\n\t\tBossBanner.SetAnimState(self, self.animState + 1)\n\t\tif ( not self.animTimeLeft ) then\n\t\t\tself.animState = nil\n\t\tend\n\tend\nend\n\nlocal function BossBanner_OnMouseDown(...)\n\tlocal frame, button = ...\n\tif button == \"RightButton\" then\n\t\tBossBanner_Stop(frame)\n\t\twipe(frame.pendingLoot) -- prevent pending loot from refiring BossBanner on my workaround in TopBannerManager_BannerFinished\n\t\tBossBanner_OnAnimOutFinished(frame.AnimOut) -- passing a children frame of BossBanner to reuse code of self:GetParent, without disrupting the retail diff.\n--\t\tTopBannerManager_BannerFinished(frame) -- disabling this since it does not properly cancel the banner, and will cause previous shown loot to populate lootframes. This is a bug that is present on Retail blizzard code. To work around it, fire BossBanner_OnAnimOutFinished instead.\n\tend\nend\n\nBossBanner_OnLoad(BossBanner) -- simulate OnLoad script\nBossBanner:SetScript(\"OnEvent\", BossBanner_OnEvent)\nBossBanner:SetScript(\"OnUpdate\", BossBanner_OnUpdate)\nBossBanner:SetScript(\"OnMouseDown\", BossBanner_OnMouseDown)\n\nfunction BossBanner:ClearEncounterCache()\n\twipe(self.pendingLoot)\n\tself.encounterID = nil\n\tDBM:Debug(\"BossBanner:ClearEncounterCache called\", 3)\nend\n\nfunction BossBanner:UpdateStyle()\n\tif not DBM.Options.OverrideBBFont then return end\n\tBBfont = DBM.Options.BBFont == \"standardFont\" and standardFont or DBM.Options.BBFont\n\tTitle:SetFont(BBfont, 30 + DBM.Options.BBFontSize, DBM.Options.BBFontStyle)\n\tSubTitle:SetFont(BBfont, 16 + DBM.Options.BBFontSize, DBM.Options.BBFontStyle)\n\tif DBM.Options.BBFontShadow then\n\t\tTitle:SetShadowOffset(1, -1)\n\t\tSubTitle:SetShadowOffset(1, -1)\n\telse\n\t\tTitle:SetShadowOffset(0, 0)\n\t\tSubTitle:SetShadowOffset(0, 0)\n\tend\n\n\tfor _, lootFrame in ipairs(BossBanner.LootFrames) do\n\t\tlootFrame.Count:SetFont(BBfont, 14 + DBM.Options.BBFontSize, DBM.Options.BBFontStyle)\n\t\tlootFrame.ItemName:SetFont(BBfont, 14 + DBM.Options.BBFontSize, DBM.Options.BBFontStyle)\n\t\tlootFrame.SetName:SetFont(BBfont, 12 + DBM.Options.BBFontSize, DBM.Options.BBFontStyle)\n\t\tlootFrame.PlayerName:SetFont(BBfont, 12 + DBM.Options.BBFontSize, DBM.Options.BBFontStyle)\n\n\t\tif DBM.Options.BBFontShadow then\n\t\t\tlootFrame.Count:SetShadowOffset(1, -1)\n\t\t\tlootFrame.ItemName:SetShadowOffset(1, -1)\n\t\t\tlootFrame.SetName:SetShadowOffset(1, -1)\n\t\t\tlootFrame.PlayerName:SetShadowOffset(1, -1)\n\t\telse\n\t\t\tlootFrame.Count:SetShadowOffset(0, 0)\n\t\t\tlootFrame.ItemName:SetShadowOffset(0, 0)\n\t\t\tlootFrame.SetName:SetShadowOffset(0, 0)\n\t\t\tlootFrame.PlayerName:SetShadowOffset(0, 0)\n\t\tend\n\tend\nend\n\nfunction BossBanner:Test(mode)\n\tif mode == \"KILL\" then\n\t\t-- self:OnEvent(\"BOSS_KILL\", \"TestMod\", \"DBM Boss Test\") -- goes into queue manager, so not great for testing\n\t\tBossBanner_Play(self, { encounterID = \"TestMod\", name = \"DBM Test Boss\", mode = \"KILL\" })\n\telseif mode == \"LOOT\" then\n\t\tself.encounterID = \"TestMod\"\n\t\tself.encounterName = \"DBM Test Boss\"\n\t\tself.lootShown = 0\t\t-- how many items the UI is displaying\n\n\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 3377, \"|cff9d9d9d|Hitem:3377:0:0:0:0:0:0:0:80|h[Canvas Bracers]|h|r\", 1, 1, \"Interface\\\\Icons\\\\INV_Bracer_13\",\"Large Battered Chest\", \"\") -- grey loot (from chest)\n\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 2770, \"|cffffffff|Hitem:2770:0:0:0:0:0:0:0:80|h[Copper Ore]|h|r\", 4, 2, \"Interface\\\\Icons\\\\INV_Ore_Copper_01\", \"Large Battered Chest\", \"\") -- white loot (from chest), with count\n\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 2977, \"|cff1eff00|Hitem:2977:0:0:0:0:0:0:0:80|h[Veteran Armor]|h|r\", 1, 3, \"Interface\\\\Icons\\\\INV_Chest_Chain_09\", \"Large Battered Chest\", \"\") -- green loot (from chest)\n\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 45087, \"|cff0070dd|Hitem:45087:0:0:0:0:0:0:0:80|h[Runed Orb]|h|r\", 1, 4, \"Interface\\\\Icons\\\\inv_misc_runedorb_01\", \"Auriaya\", \"0xF1300082EB000A6D\") -- blue loot (from boss)\n\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 45857, \"|cffa335ee|Hitem:45857:0:0:0:0:0:0:0:80|h[Archivum Data Disc]|h|r\", 1, 5, \"Interface\\\\Icons\\\\INV_Misc_Platnumdisks\", \"Runemaster Molgeim\", \"0xF13000809F00091F\") -- purple loot (from boss), quest item\n\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 45466, \"|cffa335ee|Hitem:45466:0:0:0:0:0:0:0:80|h[Scale of Fates]|h|r\", 1, 6, \"Interface\\\\Icons\\\\INV_SpiritShard_02\", \"Cache of Storms\", \"\") -- purple loot (from chest)\n--\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 45246, \"|cffa335ee|Hitem:45246:0:0:0:0:0:0:0:80|h[Golem-Shard Sticker]|h|r\", 1, 7, \"Interface\\\\Icons\\\\INV_Weapon_Shortblade_78\", \"XT-002 Deconstructor\", \"0xF15000820D0001AB#\") -- purple loot (from boss)\n\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 51172, \"|cffa335ee|Hitem:51172:0:0:0:0:0:0:0:80|h[Sanctified Lightsworn Handguards]|h|r\", 1, 7, \"Interface\\\\Icons\\\\inv_gauntlets_85\", \"Toravon the Ice Watcher\", \"0xF13000962100000F\") -- purple loot (from boss), setitem\n\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 45038, \"|cffff8000|Hitem:45038:0:0:0:0:0:0:0:80|h[Fragment of Val'anyr]|h|r\", 1, 8, \"Interface\\\\Icons\\\\INV_Ingot_Titansteel_red\", \"Cache of Storms\", \"\") -- legendary loot (from chest)\n\telse\n\t\tself:OnEvent(\"BOSS_KILL\", \"TestMod\", \"DBM Boss Test\")\n\n\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 3377, \"|cff9d9d9d|Hitem:3377:0:0:0:0:0:0:0:80|h[Canvas Bracers]|h|r\", 1, 1, \"Interface\\\\Icons\\\\INV_Bracer_13\",\"Large Battered Chest\", \"\") -- grey loot (from chest)\n\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 2770, \"|cffffffff|Hitem:2770:0:0:0:0:0:0:0:80|h[Copper Ore]|h|r\", 4, 2, \"Interface\\\\Icons\\\\INV_Ore_Copper_01\", \"Large Battered Chest\", \"\") -- white loot (from chest), with count\n\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 2977, \"|cff1eff00|Hitem:2977:0:0:0:0:0:0:0:80|h[Veteran Armor]|h|r\", 1, 3, \"Interface\\\\Icons\\\\INV_Chest_Chain_09\", \"Large Battered Chest\", \"\") -- green loot (from chest)\n\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 45087, \"|cff0070dd|Hitem:45087:0:0:0:0:0:0:0:80|h[Runed Orb]|h|r\", 1, 4, \"Interface\\\\Icons\\\\inv_misc_runedorb_01\", \"Auriaya\", \"0xF1300082EB000A6D\") -- blue loot (from boss)\n\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 45857, \"|cffa335ee|Hitem:45857:0:0:0:0:0:0:0:80|h[Archivum Data Disc]|h|r\", 1, 5, \"Interface\\\\Icons\\\\INV_Misc_Platnumdisks\", \"Runemaster Molgeim\", \"0xF13000809F00091F\") -- purple loot (from boss), quest item\n\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 45466, \"|cffa335ee|Hitem:45466:0:0:0:0:0:0:0:80|h[Scale of Fates]|h|r\", 1, 6, \"Interface\\\\Icons\\\\INV_SpiritShard_02\", \"Cache of Storms\", \"\") -- purple loot (from chest)\n--\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 45246, \"|cffa335ee|Hitem:45246:0:0:0:0:0:0:0:80|h[Golem-Shard Sticker]|h|r\", 1, 7, \"Interface\\\\Icons\\\\INV_Weapon_Shortblade_78\", \"XT-002 Deconstructor\", \"0xF15000820D0001AB#\") -- purple loot (from boss)\n\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 51172, \"|cffa335ee|Hitem:51172:0:0:0:0:0:0:0:80|h[Sanctified Lightsworn Handguards]|h|r\", 1, 7, \"Interface\\\\Icons\\\\inv_gauntlets_85\", \"Toravon the Ice Watcher\", \"0xF13000962100000F\") -- purple loot (from boss), setitem\n\t\tself:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", \"TestMod\", 45038, \"|cffff8000|Hitem:45038:0:0:0:0:0:0:0:80|h[Fragment of Val'anyr]|h|r\", 1, 8, \"Interface\\\\Icons\\\\INV_Ingot_Titansteel_red\", \"Cache of Storms\", \"\") -- legendary loot (from chest)\n\tend\nend\n"
  },
  {
    "path": "DBM-Core/DBM-BossHealth.lua",
    "content": "---------------\n--  Globals  --\n---------------\nDBM.BossHealth = {}\n\n\n-------------\n--  Locals --\n-------------\nlocal L = DBM_CORE_L\nlocal bossHealth = DBM.BossHealth\nlocal bars = {}\nlocal barCache = {}\nlocal updateFrame\nlocal getBarId\nlocal updateBar\nlocal anchor\nlocal header\nlocal dropdownFrame\nlocal AceTimer = LibStub(\"AceTimer-3.0\")\n\n--local sortingEnabled\nlocal tremove, tinsert = table.remove, table.insert\n\ndo\n\tlocal id = 0\n\tfunction getBarId()\n\t\tid = id + 1\n\t\treturn id\n\tend\nend\n\n-- checks if a given value is in an array\n-- returns true if it finds the value, false otherwise\nlocal function checkEntry(t, val)\n\tfor _, v in ipairs(t) do\n\t\tif v == val then\n\t\t\treturn true\n\t\tend\n\tend\n\treturn false\nend\n\n------------\n--  Menu  --\n------------\nlocal menu\nmenu = {\n\t{\n\t\ttext = L.RANGECHECK_LOCK,\n\t\tchecked = false, -- requires DBM.Options which is not available yet\n\t\tfunc = function()\n\t\t\tmenu[1].checked = not menu[1].checked\n\t\t\tDBM.Options.HealthFrameLocked = menu[1].checked\n\t\tend\n\t},\n\t{\n\t\ttext = L.BOSSHEALTH_HIDE_FRAME,\n\t\tnotCheckable = true,\n\t\tfunc = function() bossHealth:Hide() end\n\t}\n}\n\n\n-----------------------\n--  Script Handlers  --\n-----------------------\nlocal function onMouseDown(self, button)\n\tif button == \"LeftButton\" and not DBM.Options.HealthFrameLocked then\n\t\tanchor.moving = true\n\t\tanchor:StartMoving()\n\tend\nend\n\nlocal function onMouseUp(self, button)\n\tanchor.moving = nil\n\tanchor:StopMovingOrSizing()\n\tlocal point, _, _, x, y = anchor:GetPoint(1)\n\tDBM.Options.HPFramePoint = point\n\tDBM.Options.HPFrameX = x\n\tDBM.Options.HPFrameY = y\n\tif button == \"RightButton\" then\n\t\tEasyMenu(menu, dropdownFrame, \"cursor\", nil, nil, \"MENU\")\n\tend\nend\n\nlocal onHide = onMouseUp\n\n\n-----------------\n-- Apply Style --\n-----------------\nlocal function updateBarStyle(bar, id)\n\tbar:ClearAllPoints()\n\tif DBM.Options.HealthFrameGrowUp then\n\t\tbar:SetPoint(\"BOTTOM\", bars[id - 1] or anchor, \"TOP\", 0, 0)\n\telse\n\t\tbar:SetPoint(\"TOP\", bars[id - 1] or anchor, \"BOTTOM\", 0, 0)\n\tend\n\tlocal barborder = _G[bar:GetName()..\"BarBorder\"]\n\tlocal barbar = _G[bar:GetName()..\"Bar\"]\n\tlocal width = DBM.Options.HealthFrameWidth\n\tif width < 175 then -- these health frames really suck :(\n\t\tbarbar:ClearAllPoints()\n\t\tbarbar:SetPoint(\"CENTER\", barbar:GetParent(), \"CENTER\", -6, 0)\n\t\tbar:SetWidth(DBM.Options.HealthFrameWidth)\n\t\tbarborder:SetWidth(DBM.Options.HealthFrameWidth * 0.99)\n\t\tbarbar:SetWidth(DBM.Options.HealthFrameWidth * 0.95)\n\telseif width >= 225 then\n\t\tbarbar:ClearAllPoints()\n\t\tbarbar:SetPoint(\"CENTER\", barbar:GetParent(), \"CENTER\", 5, 0)\n\t\tbar:SetWidth(DBM.Options.HealthFrameWidth)\n\t\tbarborder:SetWidth(DBM.Options.HealthFrameWidth * 0.995)\n\t\tbarbar:SetWidth(DBM.Options.HealthFrameWidth * 0.965)\n\telse\n\t\tbar:SetWidth(DBM.Options.HealthFrameWidth)\n\t\tbarborder:SetWidth(DBM.Options.HealthFrameWidth * 0.99)\n\t\tbarbar:SetWidth(DBM.Options.HealthFrameWidth * 0.95)\n\tend\nend\n\n-----------------------\n-- Create the Frame  --\n-----------------------\nlocal function createFrame(self)\n\tanchor = CreateFrame(\"Frame\", nil, UIParent)\n\tanchor:SetWidth(60)\n\tanchor:SetHeight(10)\n\tanchor:SetMovable(1)\n\tanchor:EnableMouse(1)\n\tanchor:SetPoint(DBM.Options.HPFramePoint, UIParent, DBM.Options.HPFramePoint, DBM.Options.HPFrameX, DBM.Options.HPFrameY)\n\theader = anchor:CreateFontString(nil, \"ARTWORK\", \"GameFontNormalSmall\")\n\theader:SetPoint(\"BOTTOM\", anchor, \"BOTTOM\")\n\t--anchor:SetScript(\"OnUpdate\", updateFrame)\n\tanchor:SetScript(\"OnMouseDown\", onMouseDown)\n\tanchor:SetScript(\"OnMouseUp\", onMouseUp)\n\tanchor:SetScript(\"OnHide\", onHide)\n\tdropdownFrame = CreateFrame(\"Frame\", \"DBMBossHealthDropdown\", anchor, \"UIDropDownMenuTemplate\")\n\tmenu[1].checked = DBM.Options.HealthFrameLocked\nend\n\nlocal function createBar(self, name, ...) -- the vararg will also contain the name, see method AddBoss for details (TODO: this should be handled earlier, seriously...)\n\tlocal bar = tremove(barCache, #barCache) or CreateFrame(\"Frame\", \"DBM_BossHealth_Bar_\"..getBarId(), anchor, \"DBMBossHealthBarTemplate\")\n\tbar:Show()\n\tlocal bartext = _G[bar:GetName()..\"BarName\"]\n\tlocal barborder = _G[bar:GetName()..\"BarBorder\"]\n--\tlocal barbar = _G[bar:GetName()..\"Bar\"]\n\tbarborder:SetScript(\"OnMouseDown\", onMouseDown)\n\tbarborder:SetScript(\"OnMouseUp\", onMouseUp)\n\tbarborder:SetScript(\"OnHide\", onHide)\n\tif select(\"#\", ...) <= 2 then -- 2 as the name is in the vararg\n\t\tbar.id = ...\n\telse\n\t\tbar.id = {...}\n\t\tbar.id[#bar.id] = nil -- we don't want the name in here\n\tend\n\tbar.hidden = false\n\tbar:ClearAllPoints()\n\tbartext:SetText(name or \"\")\n\tbar.nameused = name and true or nil\n\tif type(bar.id) == \"function\" then\n\t\tlocal health, icon = bar.id()\n\t\tupdateBar(bar, health, icon, true)\n\telse\n\t\tupdateBar(bar, 100)\n\tend\n\treturn bar\nend\n\n\n\n------------------\n--  Bar Update  --\n------------------\nfunction updateBar(bar, percent, icon, dontShowDead, name)\n\tif not percent then return end\n\tlocal barName = bar:GetName()\n\tlocal bartimer = _G[barName .. \"BarTimer\"]\n\tlocal barbar = _G[barName .. \"Bar\"]\n\tlocal barIcon = _G[barName .. \"BarIcon\"]\n\tlocal bartext = _G[barName .. \"BarName\"]\n\tif percent >= 1 then\n\t\tbartimer:SetText(math.floor(percent)..\"%\")\n\t\tbarbar:SetValue(percent)\n\t\tbarbar:SetStatusBarColor((100 - percent) / 100, percent/100, 0)\n\t\tbar.value = percent\n\telseif (bar.value == 0) or (percent >= 0) then\n\t\tif percent == 0 or percent == -1 then\n\t\t\tbartimer:SetText(dontShowDead and \"0%\" or DEAD)\n\t\telse\n\t\t\tbartimer:SetText(\"0%\")\n\t\tend\n\t\tbarbar:SetValue(0)\n\t\tbarbar:SetStatusBarColor(0, 0, 0)\n\t\tbar.value = 0\n\telse--can't detect health. show unknown\n\t\tif not bar.value or bar.value >= 1 then\n\t\t\t-- bartimer:SetText(DBM_COMMON_L.UNKNOWN)\n\t\t\t-- don't update when no target\n\t\telse\n\t\t\tbartimer:SetText(dontShowDead and \"0%\" or DEAD)\n\t\tend\n\tend\n\tif not icon or type(icon) ~= \"number\" or icon < 1 or icon > 8 then\n\t\tbarIcon:Hide()\n\telse\n\t\tbarIcon:Show()\n\t\tbarIcon:SetTexCoord((icon - 1) % 4 / 4, (icon - 1) % 4 / 4 + 0.25, icon < 5 and 0 or 0.25, icon < 5 and 0.25 or 0.5)\n\tend\n\tif name and not bar.nameused then\n\t\tbartext:SetText(name)\n\tend\nend\n\ndo\n\tfunction updateFrame(self)\n--\t\tif #bars > DBM.Options.HPFrameMaxEntries then\n--\t\t\tsortingEnabled = true\n--\t\tend\n--\t\tif sortingEnabled then\n--\t\t\ttable.sort(bars, compareBars)\n--\t\tend\n\t\tfor _, v in ipairs(bars) do\n--\t\t\tif i > DBM.Options.HPFrameMaxEntries then\n--\t\t\t\tv:Hide()\n--\t\t\telse\n--\t\t\t\tv:Show()\n--\t\t\tend\n\t\t\tif type(v.id) == \"number\" then -- creature ID\n\t\t\t\tlocal health, id, name = DBM:GetBossHP(v.id)\n\t\t\t\tif health then\n\t\t\t\t\tupdateBar(v, health, GetRaidTargetIndex(id), nil, name)\n\t\t\t\telse\n\t\t\t\t\tupdateBar(v, -1)\n\t\t\t\tend\n\t\t\telseif type(v.id) == \"string\" then -- UnitID or GUID\n\t\t\t\tlocal health, id, name\n\t\t\t\tif v.id:match(\"boss\") then\n\t\t\t\t\thealth, id, name = DBM:GetBossHPByUnitID(v.id)\n\t\t\t\telse\n\t\t\t\t\thealth, id, name = DBM:GetBossHPByGUID(v.id)\n\t\t\t\tend\n\t\t\t\tif health then\n\t\t\t\t\tupdateBar(v, health, GetRaidTargetIndex(id), nil, name)\n\t\t\t\telse\n\t\t\t\t\tupdateBar(v, -1)\n\t\t\t\tend\n\t\t\telseif type(v.id) == \"table\" then -- multi boss\n\t\t\t\t-- TODO: it would be more efficient to scan all party/raid members for all IDs instead of going over all raid members n times\n\t\t\t\t-- this is especially important for the cache\n\t\t\t\tfor _, id in ipairs(v.id) do\n\t\t\t\t\tlocal health = DBM:GetBossHP(id)\n\t\t\t\t\tif health then\n\t\t\t\t\t\tupdateBar(v, health)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\telseif type(v.id) == \"function\" then -- generic bars\n\t\t\t\tlocal health, icon = v.id()\n\t\t\t\tupdateBar(v, health, icon, true)\n\t\t\tend\n\t\tend\n\tend\nend\n\n-----------------------\n--  General Methods  --\n-----------------------\nfunction bossHealth:Show(name)\n\tif not anchor then createFrame(bossHealth) end\n\theader:SetText(name)\n\tanchor:Show()\n\tbossHealth:Clear()\n\tupdateFrame(bossHealth)\n\tif not bossHealth.ticker then\n\t\tbossHealth.ticker = AceTimer:ScheduleRepeatingTimer(function() updateFrame(bossHealth) end, 0.5)\n\tend\nend\n\nfunction bossHealth:SetHeaderText(name)\n\tif not anchor then return end\n\theader:SetText(name)\nend\n\nfunction bossHealth:Clear()\n\tif not anchor or not anchor:IsShown() then return end\n\tfor i = #bars, 1, -1 do\n\t\tlocal bar = bars[i]\n\t\tbar:Hide()\n\t\tbar:ClearAllPoints()\n\t\tbarCache[#barCache + 1] = bar\n\t\tbars[i] = nil\n\tend\n--\tsortingEnabled = false\nend\n\nfunction bossHealth:Hide()\n\tif anchor then\n\t\tif bossHealth.ticker then\n\t\t\tAceTimer:CancelTimer(bossHealth.ticker)\n\t\t\tbossHealth.ticker = nil\n\t\tend\n\t\tanchor:Hide()\n\tend\nend\n\nfunction bossHealth:IsShown()\n\treturn anchor and anchor:IsShown()\nend\n\n-- HACK to support the old API cId, name. TODO: change API to name, cId and update _all_ boss mods (or: add new method AddSharedHealthBoss or something but this would also be ugly...) (or: use addBoss({cId1, cId2, ...}, name) for multi-cId bosses but that's just ugly)\n-- for now: using this ugly code here instead of ugly code in all boss mods that make use of multi-cId health bars\n\n-- hack to support shared health bosses\nlocal function addBoss(self, name, ...) -- name, cId1, cId2, ..., cIdN, name\n\tif not anchor or not anchor:IsShown() then\n\t\treturn\n\tend\n\ttinsert(bars, createBar(self, name, ...))\n\tupdateBarStyle(bars[#bars], #bars)\nend\n\n-- the signature of this method is (cId1, cId2, ..., cIdN, name) for compatibility reasons (used to be cId, name)\nfunction bossHealth:AddBoss(...)\n\t-- copy the name to the front of the arg list\n\t-- note: name is now twice in the arg list but we can't really fix that in an efficient way (this is handled in createBar()\n\tif select(\"#\", ...) == 1 then\n\t\treturn addBoss(self, nil, ...)\n\telse\n\t\treturn addBoss(self, select(select(\"#\", ...), ...), ...)\n\tend\nend\n\n-- just pass any of the creature IDs for shared health bosses\n-- also accepts the name of the bar for generic bars (i.e. id == function) as you probably don't have access to the specific closure when removing something later\nfunction bossHealth:RemoveBoss(cId)\n\tif not anchor or not anchor:IsShown() then return end\n\tfor i = #bars, 1, -1 do\n\t\tlocal bar = bars[i]\n\t\tif bar.id == cId or type(bar.id) == \"table\" and checkEntry(bar.id, cId) or type(bar.id) == \"function\" and (_G[bar:GetName()..\"BarName\"]):GetText() == cId then\n\t\t\tif bars[i + 1] then\n\t\t\t\tlocal next = bars[i + 1]\n\t\t\t\tif DBM.Options.HealthFrameGrowUp then\n\t\t\t\t\tnext:SetPoint(\"BOTTOM\", bars[i - 1] or anchor, \"TOP\", 0, 0)\n\t\t\t\telse\n\t\t\t\t\tnext:SetPoint(\"TOP\", bars[i - 1] or anchor, \"BOTTOM\", 0, 0)\n\t\t\t\tend\n\t\t\tend\n\t\t\tbar:Hide()\n\t\t\tbar:ClearAllPoints()\n\t\t\tbarCache[#barCache + 1] = bar\n\t\t\ttremove(bars, i)\n\t\tend\n\tend\nend\n\n--workaround for stuff\nfunction bossHealth:RemoveLowest()\n\tif not anchor or not anchor:IsShown() then return end\n\tlocal lowest = 100\n\tlocal index\n\tfor i = #bars, 1, -1 do\n\t\tlocal bar = bars[i]\n\t\tif bar.value < lowest then\n\t\t\tlowest = bar.value\n\t\t\tindex = bar.id\n\t\tend\n\tend\n\tfor i = #bars, 1, -1 do\n\t\tlocal bar = bars[i]\n\t\tif bar.id == index or type(bar.id) == \"table\" and checkEntry(bar.id, index) or type(bar.id) == \"function\" and (_G[bar:GetName()..\"BarName\"]):GetText() == index then\n\t\t\tif bars[i + 1] then\n\t\t\t\tlocal next = bars[i + 1]\n\t\t\t\tif DBM.Options.HealthFrameGrowUp then\n\t\t\t\t\tnext:SetPoint(\"BOTTOM\", bars[i - 1] or anchor, \"TOP\", 0, 0)\n\t\t\t\telse\n\t\t\t\t\tnext:SetPoint(\"TOP\", bars[i - 1] or anchor, \"BOTTOM\", 0, 0)\n\t\t\t\tend\n\t\t\tend\n\t\t\tbar:Hide()\n\t\t\tbar:ClearAllPoints()\n\t\t\tbarCache[#barCache + 1] = bar\n\t\t\ttremove(bars, i)\n\t\tend\n\tend\nend\n\n-- any ID for shared health bosses\nfunction bossHealth:HasBoss(id)\n\tif not anchor or not anchor:IsShown() then return end\n\tfor _, bar in ipairs(bars) do\n\t\tif bar.id == id or type(bar.id) == \"table\" and checkEntry(bar.id, id) then\n\t\t\treturn true\n\t\tend\n\tend\n\treturn false\nend\n\n-- renames an entry in the health frame\n-- just pass any of the creature IDs for shared health bosses\nfunction bossHealth:RenameBoss(cId, newName)\n\tif not anchor or not anchor:IsShown() then return end -- TODO: the entries should still be added even if the frame was never created if someone enables the frame mid-combat...\n\tfor i = #bars, 1, -1 do\n\t\tlocal bar = bars[i]\n\t\tif bar.id == cId or type(bar.id) == \"table\" and checkEntry(bar.id, cId) then\n\t\t\t(_G[bar:GetName()..\"BarName\"]):SetText(newName)\n\t\tend\n\tend\nend\n\nfunction bossHealth:UpdateSettings()\n\tif not anchor then createFrame(bossHealth) end\n\tanchor:SetPoint(DBM.Options.HPFramePoint, UIParent, DBM.Options.HPFramePoint, DBM.Options.HPFrameX, DBM.Options.HPFrameY)\n\tfor i, v in ipairs(bars) do\n\t\tupdateBarStyle(v, i)\n\tend\nend\n\nfunction bossHealth:Update()\n\tif not anchor or not anchor:IsShown() then return end\n\tupdateFrame(self)\nend\n"
  },
  {
    "path": "DBM-Core/DBM-BossHealth.xml",
    "content": "<Ui xmlns=\"http://www.blizzard.com/wow/ui/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.blizzard.com/wow/ui/\n..\\FrameXML\\UI.xsd\">\n\t<Frame name=\"DBMBossHealthBarTemplate\" enableMouse=\"true\" virtual=\"true\" frameStrata=\"MEDIUM\" topLevel=\"true\">\n\t\t<Size>\n\t\t\t<AbsDimension x=\"200\" y=\"20\"/>\n\t\t</Size>\n\t\t<Frames>\n\t\t\t<StatusBar name=\"$parentBar\">\n\t\t\t\t<Size>\n\t\t\t\t\t<AbsDimension x=\"190\" y=\"12\"/>\n\t\t\t\t</Size>\n\t\t\t\t<Anchors>\n\t\t\t\t\t<Anchor point=\"CENTER\" relativePoint=\"CENTER\">\n\t\t\t\t\t\t<Offset>\n\t\t\t\t\t\t\t<AbsDimension x=\"2\" y=\"0\"/>\n\t\t\t\t\t\t</Offset>\n\t\t\t\t\t</Anchor>\n\t\t\t\t</Anchors>\n\t\t\t\t<Layers>\n\t\t\t\t\t<Layer level=\"BACKGROUND\">\n\t\t\t\t\t\t<Texture name=\"$parentBackground\">\n\t\t\t\t\t\t\t<Color r=\"0\" g=\"0\" b=\"0\" a=\"0.3\"/>\n\t\t\t\t\t\t</Texture>\n\t\t\t\t\t</Layer>\n\t\t\t\t\t<Layer level=\"OVERLAY\">\n\t\t\t\t\t\t<FontString name=\"$parentName\" inherits=\"GameFontHighlightSmall\" text=\"\">\n\t\t\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t\t\t<Anchor point=\"LEFT\" relativePoint=\"LEFT\">\n\t\t\t\t\t\t\t\t\t<Offset>\n\t\t\t\t\t\t\t\t\t\t<AbsDimension x=\"2\" y=\"1\"/>\n\t\t\t\t\t\t\t\t\t</Offset>\n\t\t\t\t\t\t\t\t</Anchor>\n\t\t\t\t\t\t\t</Anchors>\n\t\t\t\t\t\t</FontString>\n\t\t\t\t\t\t<FontString name=\"$parentTimer\" inherits=\"GameFontHighlightSmall\" text=\"\">\n\t\t\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t\t\t<Anchor point=\"RIGHT\" relativePoint=\"RIGHT\">\n\t\t\t\t\t\t\t\t\t<Offset>\n\t\t\t\t\t\t\t\t\t\t<AbsDimension x=\"-2\" y=\"1\"/>\n\t\t\t\t\t\t\t\t\t</Offset>\n\t\t\t\t\t\t\t\t</Anchor>\n\t\t\t\t\t\t\t</Anchors>\n\t\t\t\t\t\t</FontString>\n\t\t\t\t\t\t<Texture name=\"$parentIcon\" file=\"Interface\\TargetingFrame\\UI-RaidTargetingIcons.blp\">\n\t\t\t\t\t\t\t<Size>\n\t\t\t\t\t\t\t\t<AbsDimension x=\"12\" y=\"12\"/>\n\t\t\t\t\t\t\t</Size>\n\t\t\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t\t\t<Anchor point=\"RIGHT\" relativePoint=\"LEFT\">\n\t\t\t\t\t\t\t\t\t<Offset>\n\t\t\t\t\t\t\t\t\t\t<AbsDimension x=\"-4\" y=\"0\"/>\n\t\t\t\t\t\t\t\t\t</Offset>\n\t\t\t\t\t\t\t\t</Anchor>\n\t\t\t\t\t\t\t</Anchors>\n\t\t\t\t\t\t</Texture>\n\t\t\t\t\t</Layer>\n\t\t\t\t</Layers>\n\t\t\t\t<Frames>\n\t\t\t\t\t<Button name=\"$parentBorder\">\n\t\t\t\t\t\t<Size>\n\t\t\t\t\t\t\t<AbsDimension x=\"198\" y=\"32\"/>\n\t\t\t\t\t\t</Size>\n\t\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t\t<Anchor point=\"LEFT\">\n\t\t\t\t\t\t\t\t<Offset>\n\t\t\t\t\t\t\t\t\t<AbsDimension x=\"-4\" y=\"0\"/>\n\t\t\t\t\t\t\t\t</Offset>\n\t\t\t\t\t\t\t</Anchor>\n\t\t\t\t\t\t</Anchors>\n\t\t\t\t\t\t<NormalTexture name=\"$parentTextureNormal\" file=\"Interface\\PaperDollInfoFrame\\UI-Character-Skills-BarBorder\"/>\n\t\t\t\t\t</Button>\n\t\t\t\t</Frames>\n\t\t\t\t<BarTexture name=\"$parentTextureBar\" file=\"Interface\\PaperDollInfoFrame\\UI-Character-Skills-Bar\"/>\n\t\t\t\t<BarColor r=\"1.0\" g=\"0.7\" b=\"0.0\"/>\n\t\t\t\t<Scripts>\n\t\t\t\t\t<OnLoad>\n\t\t\t\t\t\tself:SetMinMaxValues(0, 100)\n\t\t\t\t\t</OnLoad>\n\t\t\t\t</Scripts>\n\t\t\t</StatusBar>\n\t\t</Frames>\n\t</Frame>\n</Ui>\n"
  },
  {
    "path": "DBM-Core/DBM-Core.lua",
    "content": "-- *********************************************************\n-- **               Deadly Boss Mods - Core               **\n-- **            http://www.deadlybossmods.com            **\n-- *********************************************************\n--\n-- This addon is written and copyrighted by:\n--    * Paul Emmerich (Tandanu @ EU-Aegwynn) (DBM-Core)\n--    * Martin Verges (Nitram @ EU-Azshara) (DBM-GUI)\n--    * Adam Williams (Omegal @ US-Whisperwind) (Primary boss mod author & DBM maintainer)\n--\n-- The localizations are written by:\n--    * enGB/enUS: Omegal\t\t\t\tTwitter @MysticalOS\n--    * deDE: Ebmor\n--    * ruRU: TOM_RUS\t\t\t\t\thttps://curseforge.com/profiles/TOM_RUS/\n--    * zhTW: Whyv\t\t\t\t\t\tultrashining@gmail.com\n--    * koKR: Elnarfim\t\t\t\t\t---\n--    * zhCN: Mini Dragon\t\t\t\tprojecteurs@gmail.com\n--\n--\n-- Special thanks to:\n--    * Arta\n--    * Tennberg (a lot of fixes in the enGB/enUS localization)\n--    * nBlueWiz (a lot of previous fixes in the koKR localization as well as boss mod work) Contact: everfinale@gmail.com\n--\n--\n-- The code of this addon is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License. (see license.txt)\n-- All included textures and sounds are copyrighted by their respective owners, license information for these media files can be found in the modules that make use of them.\n--\n--\n--  You are free:\n--    * to Share - to copy, distribute, display, and perform the work\n--    * to Remix - to make derivative works\n--  Under the following conditions:\n--    * Attribution. You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). (A link to http://www.deadlybossmods.com is sufficient)\n--    * Noncommercial. You may not use this work for commercial purposes.\n--    * Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.\n--\nlocal _, private = ...\n\nlocal wowVersionString, wowBuild, _, wowTOC = GetBuildInfo()\nlocal testBuild = false -- no API for 3.3.5a, just assume false since it's a final build for private servers\n\nlocal DBMPrefix = \"DBMv4\"\nprivate.DBMPrefix = DBMPrefix\n\nlocal L = DBM_CORE_L\nlocal CL = DBM_COMMON_L\n\n-------------------------------\n--  Globals/Default Options  --\n-------------------------------\nlocal function releaseDate(year, month, day, hour, minute, second)\n\thour = hour or 0\n\tminute = minute or 0\n\tsecond = second or 0\n\treturn second + minute * 10^2 + hour * 10^4 + day * 10^6 + month * 10^8 + year * 10^10\nend\n\nlocal function parseCurseDate(date)\n\tdate = tostring(date)\n\tif #date == 13 then\n\t\t-- support for broken curse timestamps: leading 0 in hours is missing...\n\t\tdate = date:sub(1, 8) .. \"0\" .. date:sub(9, #date)\n\tend\n\tlocal year, month, day, hour, minute, second = tonumber(date:sub(1, 4)), tonumber(date:sub(5, 6)), tonumber(date:sub(7, 8)), tonumber(date:sub(9, 10)), tonumber(date:sub(11, 12)), tonumber(date:sub(13, 14))\n\tif year and month and day and hour and minute and second then\n\t\treturn releaseDate(year, month, day, hour, minute, second)\n\tend\nend\n\nlocal function showRealDate(curseDate)\n\tcurseDate = tostring(curseDate)\n\tlocal year, month, day, hour, minute, second = curseDate:sub(1, 4), curseDate:sub(5, 6), curseDate:sub(7, 8), curseDate:sub(9, 10), curseDate:sub(11, 12), curseDate:sub(13, 14)\n\tif year and month and day and hour and minute and second then\n\t\treturn year..\"/\"..month..\"/\"..day..\" \"..hour..\":\"..minute..\":\"..second\n\tend\nend\n\nlocal function currentFullDate()\n\tlocal datetable = date(\"*t\")\n\treturn releaseDate(datetable.year, datetable.month, datetable.day, datetable.hour, datetable.min, datetable.sec)\nend\n\nDBM = {\n\tRevision = parseCurseDate(\"20251102143218\"),\n\tDisplayVersion = \"10.1.13 alpha\", -- the string that is shown as version\n\tReleaseRevision = releaseDate(2024, 07, 20) -- the date of the latest stable version that is available, optionally pass hours, minutes, and seconds for multiple releases in one day\n}\n\nlocal fakeBWVersion = 7558\nlocal bwVersionResponseString = \"%d\"\nDBM.HighestRelease = DBM.ReleaseRevision --Updated if newer version is detected, used by update nags to reflect critical fixes user is missing on boss pulls\n\n-- support for github downloads, which doesn't support curse keyword expansion\n-- just use the latest release revision\nif not DBM.Revision then\n\tDBM.Revision = DBM.ReleaseRevision\nend\n\nfunction DBM:ShowRealDate(curseDate)\n\treturn showRealDate(curseDate)\nend\n\nfunction DBM:ReleaseDate(year, month, day, hour, minute, second)\n\treturn releaseDate(year, month, day, hour, minute, second)\nend\n\nfunction DBM:GetTOC()\n\treturn wowTOC, wowVersionString, wowBuild\nend\n\n-- dual profile setup\nlocal _, playerClass = UnitClass(\"player\")\nDBM_UseDualProfile = false -- Having this as true requires user to know how mod profiles work and auto-generate new ones for new specs\n-- if playerClass == \"MAGE\" or playerClass == \"WARLOCK\" or playerClass == \"ROGUE\" or playerClass == \"HUNTER\" then\n--\tDBM_UseDualProfile = false\n-- end\nDBM_CharSavedRevision = 2\n\n--Hard code STANDARD_TEXT_FONT since skinning mods like to taint it (or worse, set it to nil, wtf?)\nlocal standardFont\nif LOCALE_koKR then\n\tstandardFont = \"Fonts\\\\2002.TTF\"\nelseif LOCALE_zhCN then\n\tstandardFont = \"Fonts\\\\ARKai_T.ttf\"\nelseif LOCALE_zhTW then\n\tstandardFont = \"Fonts\\\\blei00d.TTF\"\nelseif LOCALE_ruRU then\n\tstandardFont = \"Fonts\\\\FRIZQT___CYR.TTF\"\nelse\n\tstandardFont = \"Fonts\\\\FRIZQT__.TTF\"\nend\n\nDBM.DefaultOptions = {\n\tWarningColors = {\n\t\t{r = 0.41, g = 0.80, b = 0.94}, -- Color 1 - #69CCF0 - Turqoise\n\t\t{r = 0.95, g = 0.95, b = 0.00}, -- Color 2 - #F2F200 - Yellow\n\t\t{r = 1.00, g = 0.50, b = 0.00}, -- Color 3 - #FF8000 - Orange\n\t\t{r = 1.00, g = 0.10, b = 0.10}, -- Color 4 - #FF1A1A - Red\n\t},\n\tRaidWarningSound = \"Sound\\\\Doodad\\\\BellTollNightElf.wav\",\n\tSpecialWarningSound = \"Sound\\\\Spells\\\\PVPFlagTaken.wav\",\n\tSpecialWarningSound2 = \"Sound\\\\Creature\\\\AlgalonTheObserver\\\\UR_Algalon_BHole01.wav\",\n\tSpecialWarningSound3 = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\AirHorn.ogg\",\n\tSpecialWarningSound4 = \"Sound\\\\Creature\\\\HoodWolf\\\\HoodWolfTransformPlayer01.wav\",\n\tSpecialWarningSound5 = \"Sound\\\\Creature\\\\Loathstare\\\\Loa_Naxx_Aggro02.wav\",\n\tModelSoundValue = \"Short\",\n\tCountdownVoice = \"Corsica\",\n\tCountdownVoice2 = \"Kolt\",\n\tCountdownVoice3 = \"Smooth\",\n\tPullVoice = \"Corsica\",\n\tChosenVoicePack2 = (GetLocale() == \"enUS\" or GetLocale() == \"enGB\") and \"VEM\" or \"None\",\n\tVPReplacesAnnounce = true,\n\tVPReplacesSA1 = true,\n\tVPReplacesSA2 = true,\n\tVPReplacesSA3 = true,\n\tVPReplacesSA4 = true,\n\tVPReplacesGTFO = true,\n\tVPReplacesCustom = false,\n\tAlwaysPlayVoice = false,\n\tVPDontMuteSounds = false,\n\tEventSoundVictory2 = \"None\", --\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\Victory\\\\SmoothMcGroove_Fanfare.ogg\",\n\tEventSoundWipe = \"None\",\n\tEventSoundPullTimer = \"None\",\n\tEventSoundEngage2 = \"None\",\n\tEventSoundMusic = \"None\",\n\tEventSoundDungeonBGM = \"None\",\n\tEventSoundMusicCombined = false,\n\tEventDungMusicMythicFilter = true,\n\tEventMusicMythicFilter = true,\n\tEnabled = true,\n\tShowWarningsInChat = true,\n\tShowFakedRaidWarnings = false,\n\tShowSWarningsInChat = true,\n\tWarningIconLeft = true,\n\tWarningIconRight = true,\n\tWarningIconChat = true,\n\tWarningAlphabetical = true,\n\tWarningShortText = true,\n\tStripServerName = true,\n\tShowAllVersions = true,\n\tShowReminders = true,\n\tShowPizzaMessage = true,\n\tShowEngageMessage = true,\n\tShowDefeatMessage = true,\n\tShowGuildMessages = true,\n\tShowGuildMessagesPlus = false,\n\tAutoRespond = true,\n\tEnableWBSharing = true,\n\tWhisperStats = false,\n\tDisableStatusWhisper = false,\n\tDisableGuildStatus = false,\n\tDisableRaidIcons = false,\n\tDisableChatBubbles = false,\n\tOverrideBossAnnounce = false,\n\tOverrideBossTimer = false,\n\tOverrideBossIcon = false,\n\tOverrideBossSay = false,\n\tNoAnnounceOverride = true,\n\tNoTimerOverridee = true,\n\tReplaceMyConfigOnOverride = false,\n\tHideBossEmoteFrame2 = false,\n\tSWarningAlphabetical = true,\n\tSWarnNameInNote = true,\n\tCustomSounds = 0,\n\tSpamBlockRaidWarning = true,\n\tSpamBlockBossWhispers = false,\n\tFixCLEUOnCombatStart = true,\n\tAlwaysShowHealthFrame = false,\n\tShowBigBrotherOnCombatStart = false,\n\tFilterTankSpec = true,\n\tFilterBTargetFocus = true,\n\tFilterBInterruptCooldown = true,\n\tFilterBInterruptHealer = false,\n\tFilterInterruptNoteName = false,\n\tFilterTTargetFocus = true,\n\tFilterTInterruptCooldown = true,\n\tFilterTInterruptHealer = false,\n\tFilterDispel = true,\n\tFilterTrashWarnings2 = true,\n\tFilterVoidFormSay = true,\n\t--FilterSelfHud = true,\n\tAutologBosses = false,\n\tAdvancedAutologBosses = false,\n\tRecordOnlyBosses = false,\n\tDoNotLogLFG = true,\n\tLogCurrentMythicRaids = true,\n\tLogCurrentRaids = true,\n\tLogCurrentMPlus = true,\n\tLogCurrentMythicZero = false,\n\tLogCurrentHeroic = false,\n\tLogCurrentNormal = false,\n\tLogTrivialRaids = false,\n\tLogTWRaids = false,\n\tLogTrivialDungeons = false,\n\tLogTWDungeons = false,\n\tUseSoundChannel = \"Master\",\n\tLFDEnhance = true,\n\tWorldBossNearAlert = false,\n\tRLReadyCheckSound = true,\n\tAFKHealthWarning = false,\n\tAutoReplySound = true,\n\tHideObjectivesFrame = false, --true,\n\tHideGarrisonToasts = true,\n\tHideGuildChallengeUpdates = true,\n\tHideTooltips = false,\n\tDisableSFX = false,\n\tEnableModels = true,\n\tGUIWidth = 800,\n\tGUIHeight = 600,\n\tGroupOptionsBySpell = true,\n\tGroupOptionsExcludeIcon = false,\n\tAutoExpandSpellGroups = false,\n\t--ShowSpellDescWhenExpanded = false,\n\tRangeFrameFrames = \"radar\",\n\tRangeFrameUpdates = \"Fast\",\n\tRangeFramePoint = \"CENTER\",\n\tRangeFrameX = 50,\n\tRangeFrameY = -50,\n\tRangeFrameSound1 = \"none\",\n\tRangeFrameSound2 = \"none\",\n\tRangeFrameLocked = false,\n\tRangeFrameRadarPoint = \"CENTER\",\n\tRangeFrameRadarX = 100,\n\tRangeFrameRadarY = -100,\n\tHPFramePoint = \"CENTER\",\n\tHPFrameX = -150,\n\tHPFrameY = 300,\n\tHPFrameMaxEntries = 5,\n\tInfoFramePoint = \"CENTER\",\n\tInfoFrameX = 75,\n\tInfoFrameY = -75,\n\tInfoFrameShowSelf = false,\n\tInfoFrameLines = 0,\n\tInfoFrameCols = 0,\n\tInfoFrameLocked = false,\n\tInfoFrameFont = \"standardFont\",\n\tInfoFrameFontSize = 12,\n\tInfoFrameFontStyle = \"None\",\n\tWarningDuration2 = 5,\n\tWarningPoint = \"CENTER\",\n\tWarningX = 0,\n\tWarningY = 260,\n\tWarningFont = \"standardFont\",\n\tWarningFontSize = 20,\n\tWarningFontStyle = \"None\",\n\tWarningFontShadow = true,\n\tSpecialWarningDuration2 = 1.5,\n\tSpecialWarningPoint = \"CENTER\",\n\tSpecialWarningX = 0,\n\tSpecialWarningY = 75,\n\tSpecialWarningFont = \"standardFont\",\n\tSpecialWarningFontSize2 = 35,\n\tSpecialWarningFontStyle = \"THICKOUTLINE\",\n\tSpecialWarningFontShadow = false,\n\tSpecialWarningIcon = true,\n\tSpecialWarningShortText = true,\n\tSpecialWarningFontCol = {1.0, 0.7, 0.0},--Yellow, with a tint of orange\n\tSpecialWarningFlashCol1 = {1.0, 1.0, 0.0},--Yellow\n\tSpecialWarningFlashCol2 = {1.0, 0.5, 0.0},--Orange\n\tSpecialWarningFlashCol3 = {1.0, 0.0, 0.0},--Red\n\tSpecialWarningFlashCol4 = {1.0, 0.0, 1.0},--Purple\n\tSpecialWarningFlashCol5 = {0.2, 1.0, 1.0},--Tealish\n\tSpecialWarningFlashDura1 = 0.3,\n\tSpecialWarningFlashDura2 = 0.4,\n\tSpecialWarningFlashDura3 = 1,\n\tSpecialWarningFlashDura4 = 0.7,\n\tSpecialWarningFlashDura5 = 1,\n\tSpecialWarningFlashAlph1 = 0.3,\n\tSpecialWarningFlashAlph2 = 0.3,\n\tSpecialWarningFlashAlph3 = 0.4,\n\tSpecialWarningFlashAlph4 = 0.4,\n\tSpecialWarningFlashAlph5 = 0.5,\n\tSpecialWarningFlash1 = false,\n\tSpecialWarningFlash2 = false,\n\tSpecialWarningFlash3 = false,\n\tSpecialWarningFlash4 = false,\n\tSpecialWarningFlash5 = false,\n\tSpecialWarningFlashCount1 = 1,\n\tSpecialWarningFlashCount2 = 1,\n\tSpecialWarningFlashCount3 = 3,\n\tSpecialWarningFlashCount4 = 2,\n\tSpecialWarningFlashCount5 = 3,\n--\tSpecialWarningVibrate1 = false,\n--\tSpecialWarningVibrate2 = false,\n--\tSpecialWarningVibrate3 = true,\n--\tSpecialWarningVibrate4 = true,\n--\tSpecialWarningVibrate5 = true,\n\tSWarnClassColor = true,\n\tHealthFrameGrowUp = false,\n\tHealthFrameLocked = false,\n\tHealthFrameWidth = 200,\n\tArrowPosX = 0,\n\tArrowPosY = -150,\n\tArrowPoint = \"TOP\",\n\t-- global boss mod settings (overrides mod-specific settings for some options)\n\tDontShowBossAnnounces = false,\n\tDontShowTargetAnnouncements = false,\n\tDontShowSpecialWarningText = false,\n\tDontShowSpecialWarningFlash = false,\n--\tDontDoSpecialWarningVibrate = false,\n\tDontPlaySpecialWarningSound = false,\n\tDontPlayTrivialSpecialWarningSound = true,\n\tSpamSpecInformationalOnly = false,\n\tSpamSpecRoledispel = false,\n\tSpamSpecRoleinterrupt = false,\n\tSpamSpecRoledefensive = false,\n\tSpamSpecRoletaunt = false,\n\tSpamSpecRolesoak = false,\n\tSpamSpecRolestack = false,\n\tSpamSpecRoleswitch = false,\n\tSpamSpecRolegtfo = false,\n\tDontShowBossTimers = false,\n\tDontShowTrashTimers = false,\n\tDontShowEventTimers = false,\n\tDontShowUserTimers = false,\n\tDontShowFarWarnings = true,\n\tDontSetIcons = false,\n\tDontRestoreIcons = false,\n\tDontShowRangeFrame = false,\n\tDontRestoreRange = false,\n\tDontShowInfoFrame = false,\n\tDontShowHudMap2 = false,\n\tDontShowNameplateIcons = false,\n\tDontSendBossGUIDs = false,\n\tDontShowTimersWithNameplates = true,\n\tUseNameplateHandoff = true,\n\tNPAuraSize = 40,\n\tDontPlayCountdowns = false,\n\tDontSendYells = false,\n\tBlockNoteShare = false,\n\tDontShowPT2 = false,\n\tDontShowPTCountdownText = false,\n\tDontPlayPTCountdown = false,\n\tDontShowPTText = false,\n\tDontShowPTNoID = false,\n\tPTCountThreshold2 = 5,\n\tPlayTT = true,\n\tPlayTTCountdown = false,\n\tPlayTTCountdownFinished = false,\n\tEnableBB = true,\n\tPlayBBLoot = true,\n\tPlayBBSound = false,\n\tOverrideBBFont = false,\n\tBBFont = \"standardFont\",\n\tBBFontStyle = \"OUTLINE\",\n\tBBFontShadow = true,\n\tBBFontSize = 0,\n\tLatencyThreshold = 250,\n\tBigBrotherAnnounceToRaid = false,\n\tSettingsMessageShown = false,\n\tNewsMessageShown2 = 1,--Apparently variable without 2 can still exist in some configs (config cleanup of no longer existing variables not working?)\n\tAlwaysShowSpeedKillTimer2 = false,\n\tShowRespawn = true,\n\tShowQueuePop = true,\n\tHelpMessageVersion = 3,\n\tMoviesSeen = {},\n\tMovieFilter2 = \"Never\",\n\tLastRevision = 0,\n\tDebugMode = false,\n\tDebugLevel = 1,\n\tRoleSpecAlert = true,\n\tCheckGear = true,\n\tWorldBossAlert = false,\n\tWorldBuffAlert = false,\n\tBadTimerAlert = false,\n\tBadIDAlert = false,\n\tAutoAcceptFriendInvite = false,\n\tAutoAcceptGuildInvite = false,\n\tFakeBWVersion = false,\n\tAITimer = true,\n\tShortTimerText = true,\n\tChatFrame = \"DEFAULT_CHAT_FRAME\",\n\tCoreSavedRevision = 1,\n\tSilentMode = false,\n\tReportRecount = false,\n\tReportSkada = false,\n\tPerCharacterSettings = false,\n}\n\nDBM.Mods = {}\nDBM.ModLists = {}\nlocal checkDuplicateObjects = {}\n\n------------------------\n-- Global Identifiers --\n------------------------\nDBM_DISABLE_ZONE_DETECTION = newproxy(false)\nDBM_OPTION_SPACER = newproxy(false)\n\n--------------\n--  Privates  --\n--------------\nprivate.modSyncSpam = {}\nprivate.updateFunctions = {}\n--Raid Leader Disable variables\nprivate.statusGuildDisabled, private.statusWhisperDisabled, private.raidIconsDisabled, private.chatBubblesDisabled = false, false, false, false\n\n--------------\n--  Locals  --\n--------------\nlocal bossModPrototype = {}\nlocal mainFrame, unitMainFrame = CreateFrame(\"Frame\", \"DBMMainFrame\"), CreateFrame(\"Frame\", \"DBMUnitMainFrame\")\nlocal playerName = UnitName(\"player\")\nlocal playerLevel = UnitLevel(\"player\")\nlocal playerRealm = GetRealmName()\n--local lastCombatStarted = GetTime()\nlocal chatPrefix = \"<Deadly Boss Mods> \"\nlocal chatPrefixShort = \"<\" .. L.DBM .. \"> \"\nlocal usedProfile = \"Default\"\nlocal dbmIsEnabled = true\nprivate.dbmIsEnabled = dbmIsEnabled\n-- Table variables\nlocal newerVersionPerson, cSyncSender, iconSetRevision, iconSetPerson, loadcIds, inCombat, oocBWComms, combatInfo, bossIds, raid, autoRespondSpam, queuedBattlefield, bossHealth, bossHealthuIdCache, lastBossEngage, lastBossDefeat = {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}\n-- False variables\nlocal voiceSessionDisabled, targetEventsRegistered, combatInitialized, healthCombatInitialized, watchFrameRestore, bossuIdFound, timerRequestInProgress, encounterInProgress = false, false, false, false, false, false, false, false\n-- Nil variables\nlocal currentModProfileScope, currentModProfileName, currentSpecID, currentSpecName, currentSpecGroup, pformat, loadOptions, checkWipe, checkBossHealth, checkCustomBossHealth, fireEvent, LastInstanceType, breakTimerStart, AddMsg, delayedFunction, handleSync, savedDifficulty, difficultyText, difficultyIndex, encounterDifficulty, encounterDifficultyText, encounterDifficultyIndex, lastGroupLeader\n-- 0 variables\nlocal dbmToc, cSyncReceived, showConstantReminder, updateNotificationDisplayed, LastGroupSize = 0, 0, 0, 0\nlocal LastInstanceMapID = -1\nlocal LastInstanceZoneName = \"\"\nlocal SWFilterDisabled = 12\nlocal iconFolder = \"Interface\\\\AddOns\\\\DBM-Core\\\\icon\\\\\"\n\nlocal bannedMods = { -- a list of \"banned\" (meaning they are replaced by another mod or discontinued). These mods will not be loaded by DBM (and they wont show up in the GUI)\n\t\"DBM_API\",\n\t\"DBM-Outlands\",\n\t\"DBM-Battlegrounds\", --replaced by DBM-PvP\n\t\"DBM-Profiles\" -- replaced by inline module since 7.00\n}\n\n--[InstanceID]={level,zoneType}\n--zoneType: 1 = outdoor, 2 = dungeon, 3 = raid\nlocal instanceDifficultyBylevel = {\n\t--World\n\t[27]={60, 1},[35]={60, 1},[44]={60, 1},[122]={60, 1},[182]={60, 1},--Eastern Kingdoms and Kalimdor world bosses.\n\t[162]={70, 1},[466]={70, 1},[474]={70, 1},[482]={70, 1},--Outlands World Bosses\n\t--Raids\n\t[718]={60, 3},[767]={60, 3},[756]={60, 3},[697]={60, 3},[698]={60, 3},--Classic Raids\n\t[797]={70, 3},[776]={70, 3},[800]={70, 3},[777]={70, 3},[780]={70, 3},[781]={70, 3},[790]={70, 3},[783]={70, 3},[782]={70, 3},--BC Raids\n\t[532]={80, 3},[610]={80, 3},[544]={80, 3},[528]={80, 3},[605]={80, 3},[536]={80, 3},[719]={80, 3},[530]={80, 3},[533]={80, 3},--Wrath Raids\n\t--Dungeons\n\t[700]={45, 2},[681]={18, 2},[751]={52, 2},[766]={60, 2},[764]={60, 2},[705]={60, 2},[722]={60, 2},[687]={54, 2},[763]={45, 2},[761]={47, 2},[688]={60, 2},[692]={34, 2},[693]={52, 2},[689]={32, 2},[762]={42, 2},[750]={27, 2},[757]={25, 2},[691]={32, 2},[765]={30, 2},--Classic Dungeons\n\t[711]={70, 2},[723]={70, 2},[724]={70, 2},[725]={70, 2},[726]={70, 2},[727]={70, 2},[728]={70, 2},[729]={70, 2},[730]={70, 2},[731]={70, 2},[732]={70, 2},[733]={70, 2},[734]={70, 2},[735]={70, 2},[798]={70, 2},[799]={70, 2},--BC Dungeons\n\t[523]={80, 2},[534]={80, 2},[522]={80, 2},[535]={80, 2},[531]={80, 2},[526]={80, 2},[527]={80, 2},[521]={80, 2},[529]={80, 2},[524]={80, 2},[525]={80, 2},[537]={80, 2},[603]={80, 2},[602]={80, 2},[604]={80, 2},[543]={80, 2},--Wrath Dungeons\n}\n\n-----------------\n--  Libraries  --\n-----------------\nlocal LibStub = _G[\"LibStub\"]\nlocal AceTimer = LibStub(\"AceTimer-3.0\")\nlocal LGT = LibStub(\"LibGroupTalents-1.0\", true)\n\n--------------------------------------------------------\n--  Cache frequently used global variables in locals  --\n--------------------------------------------------------\nlocal DBM = DBM\n-- these global functions are accessed all the time by the event handler\n-- so caching them is worth the effort\nlocal ipairs, pairs, next = ipairs, pairs, next\nlocal tonumber, tostring = tonumber, tostring\nlocal tinsert, tremove, twipe, tsort, tconcat = table.insert, table.remove, table.wipe, table.sort, table.concat\nlocal type, select = type, select\nlocal GetTime = GetTime\nlocal bband = bit.band\nlocal mabs, floor, mhuge, mmin, mmax, mrandom = math.abs, math.floor, math.huge, math.min, math.max, math.random\nlocal GetNumGroupMembers, GetNumSubgroupMembers, GetNumPartyMembers, GetNumRaidMembers, GetRaidRosterInfo = private.GetNumGroupMembers, private.GetNumSubgroupMembers, GetNumPartyMembers, GetNumRaidMembers, GetRaidRosterInfo -- with compat.lua\nlocal UnitName, GetUnitName = UnitName, GetUnitName\nlocal IsInRaid, IsInGroup, IsInInstance, IsOutdoors = private.IsInRaid, private.IsInGroup, IsInInstance, IsOutdoors -- with compat.lua\nlocal UnitAffectingCombat, InCombatLockdown, IsFalling, UnitPlayerOrPetInRaid, UnitPlayerOrPetInParty = UnitAffectingCombat, InCombatLockdown, IsFalling, UnitPlayerOrPetInRaid, UnitPlayerOrPetInParty\nlocal UnitGUID, UnitHealth, UnitHealthMax, UnitBuff, UnitDebuff, UnitAura = UnitGUID, UnitHealth, UnitHealthMax, UnitBuff, UnitDebuff, UnitAura\nlocal UnitExists, UnitIsDead, UnitIsFriend, UnitIsUnit = UnitExists, UnitIsDead, UnitIsFriend, UnitIsUnit\nlocal GetSpellInfo, GetSpellTexture, GetSpellCooldown = GetSpellInfo, GetSpellTexture, GetSpellCooldown\nlocal GetInstanceInfo = GetInstanceInfo\nlocal GetActiveTalentGroup = GetActiveTalentGroup\nlocal GetMapInfo, GetCurrentMapDungeonLevel, DungeonUsesTerrainMap, GetPlayerMapPosition, SetMapToCurrentZone = GetMapInfo, GetCurrentMapDungeonLevel, DungeonUsesTerrainMap, GetPlayerMapPosition, SetMapToCurrentZone\nlocal UnitDetailedThreatSituation = UnitDetailedThreatSituation\nlocal UnitIsPartyLeader, UnitIsRaidOfficer = UnitIsPartyLeader, UnitIsRaidOfficer\nlocal PlaySoundFile, PlaySound = PlaySoundFile, PlaySound\n\nlocal SendAddonMessage = SendAddonMessage\n\n-- for Phanx' Class Colors\nlocal RAID_CLASS_COLORS = CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS\n\n---------------------------\n--  Retail API backport  --\n---------------------------\n-- prevent other addons from messing with the global function from compat.lua\nfunction DBM:tIndexOf(tbl, item)\n\treturn private.tIndexOf(tbl, item)\nend\n\nfunction DBM:IsInGroup()\n\treturn private.IsInGroup()\nend\n\nfunction DBM:IsInRaid()\n\treturn private.IsInRaid()\nend\n\nfunction DBM:GetNumSubgroupMembers()\n\treturn private.GetNumSubgroupMembers()\nend\n\nfunction DBM:GetNumGroupMembers()\n\treturn private.GetNumGroupMembers()\nend\n\n---------------------------------\n--  General (local) functions  --\n---------------------------------\n-- checks if a given value is in an array\n-- returns true if it finds the value, false otherwise\nlocal function checkEntry(t, val)\n\tfor _, v in ipairs(t) do\n\t\tif v == val then\n\t\t\treturn true\n\t\tend\n\tend\n\treturn false\nend\n\n-- removes all occurrences of a value in an array\n-- returns true if at least one occurrence was remove, false otherwise\nlocal function removeEntry(t, val)\n\tlocal existed = false\n\tfor i = #t, 1, -1 do\n\t\tif t[i] == val then\n\t\t\ttremove(t, i)\n\t\t\texisted = true\n\t\tend\n\tend\n\treturn existed\nend\n\nlocal function OrderedTable()\n\tlocal nextkey, firstkey = {}, {}\n\tnextkey[nextkey] = firstkey\n\n\tlocal function onext(self, key)\n\t\twhile key ~= nil do\n\t\t\tkey = nextkey[key]\n\t\t\tlocal val = self[key]\n\t\t\tif val ~= nil then\n\t\t\t\treturn key, val\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal selfmeta = firstkey\n\tselfmeta.__nextkey = nextkey\n\n\tfunction selfmeta:__newindex(key, val)\n\t\trawset(self, key, val)\n\t\tif nextkey[key] == nil then\n\t\t\tnextkey[nextkey[nextkey]] = key\n\t\t\tnextkey[nextkey] = key\n\t\tend\n\tend\n\n\tfunction selfmeta:__pairs() return\n\t\tonext, self, firstkey\n\tend\n\n\treturn setmetatable({}, selfmeta)\nend\n\n--Whisper/Whisper Sync filter function\nlocal function checkForSafeSender(sender, checkFriends, checkGuild, filterRaid)\n\tif checkFriends then\n\t\t--Check if it's a non bnet friend\n\t\tfor i = 1, GetNumFriends() do\n\t\t\tlocal name = GetFriendInfo(i)\n\t\t\tif name == sender then\n\t\t\t\treturn not (filterRaid and DBM:GetRaidUnitId(name)) -- Person is in raid group and filter raid enabled\n\t\t\tend\n\t\tend\n\tend\n\t--Check Guildies (not used by whisper syncs, but used by status whispers)\n\tif checkGuild then\n\t\tlocal totalMembers = GetNumGuildMembers()\n\t\tfor i = 1, totalMembers do\n\t\t\tlocal name = GetGuildRosterInfo(i)\n\t\t\tif not name then break end\n\t\t\tif name == sender then\n\t\t\t\treturn not (filterRaid and DBM:GetRaidUnitId(name))\n\t\t\tend\n\t\tend\n\tend\n\treturn false\nend\n\n-- automatically sends an addon message to the appropriate channel (BATTLEGROUND, RAID or PARTY)\nlocal function sendSync(prefix, msg)\n\tif dbmIsEnabled or prefix == \"DBMv4-V\" or prefix == \"DBMv4-H\" then--Only show version checks if force disabled, nothing else\n\t\tmsg = msg or \"\"\n\t\tlocal zoneType = select(2, IsInInstance())\n\t\tif zoneType == \"pvp\" or zoneType == \"arena\" then\n\t\t\tSendAddonMessage(prefix, msg, \"BATTLEGROUND\")\n\t\telseif GetRealNumRaidMembers() > 0 then\n\t\t\tSendAddonMessage(prefix, msg, \"RAID\")\n\t\telseif GetRealNumPartyMembers() > 0 then\n\t\t\tSendAddonMessage(prefix, msg, \"PARTY\")\n\t\telse\n\t\t\thandleSync(\"SOLO\", playerName, prefix, strsplit(\"\\t\", msg))\n\t\tend\n\t\tDBM:Debug(prefix..\" \"..tostring(msg):gsub(\"\\t\", \" \"), 3)\n\tend\nend\nprivate.sendSync = sendSync\n\nlocal function sendGuildSync(prefix, msg)\n\tif IsInGuild() and (dbmIsEnabled or prefix == \"DBMv4-V\" or prefix == \"DBMv4-H\") then--Only show version checks if force disabled, nothing else\n\t\tmsg = msg or \"\"\n\t\tSendAddonMessage(prefix, msg, \"GUILD\")--Even guild syncs send realm so we can keep antispam the same across realid as well.\n\tend\nend\nprivate.sendGuildSync = sendGuildSync\n\n--Reworked BNet friends to ingame friends since BNet doesn't exist on private servers\n--Sync Object specifically for out in the world sync messages that have different rules than standard syncs\nlocal function SendWorldSync(self, prefix, msg, noBNet)\n\tif not dbmIsEnabled then return end--Block all world syncs if force disabled\n\tDBM:Debug(\"SendWorldSync running for \"..prefix)\n\tif GetNumRaidMembers() > 0 then\n\t\tSendAddonMessage(DBMPrefix .. \"-\" .. prefix, msg, \"RAID\")\n\telseif IsInGroup(1) then\n\t\tSendAddonMessage(DBMPrefix .. \"-\" .. prefix, msg, \"PARTY\")\n\telse--for solo raid\n\t\thandleSync(\"SOLO\", playerName, DBMPrefix .. \"-\" .. prefix, strsplit(\"\\t\", msg))\n\tend\n\tif IsInGuild() then\n\t\tSendAddonMessage(DBMPrefix .. \"-\" .. prefix, msg, \"GUILD\")--Even guild syncs send realm so we can keep antispam the same across realid as well.\n\tend\n\tif self.Options.EnableWBSharing and not noBNet then\n\t\tlocal _, numFriendsOnline = GetNumFriends()\n\t\tfor i = 1, numFriendsOnline do\n\t\t\tlocal name, _, _, _, isOnline = GetFriendInfo(i)\n\t\t\tif name and isOnline then\n\t\t\t\tSendAddonMessage(DBMPrefix .. \"-\" .. prefix, msg, \"WHISPER\", name)--Just send users realm for pull, so we can eliminate connectedServers checks on sync handler\n\t\t\tend\n\t\tend\n\tend\nend\n\nlocal function strFromTime(time)\n\tif type(time) ~= \"number\" then time = 0 end\n\ttime = floor(time)\n\tif time < 60 then\n\t\treturn L.TIMER_FORMAT_SECS:format(time)\n\telseif time % 60 == 0 then\n\t\treturn L.TIMER_FORMAT_MINS:format(time/60)\n\telse\n\t\treturn L.TIMER_FORMAT:format(time/60, time % 60)\n\tend\nend\n\nfunction DBM:strFromTime(time)\n\treturn strFromTime(time)\nend\n\ndo\n\t-- fail-safe format, replaces missing arguments with unknown\n\t-- note: doesn't handle cases like %%%s correctly at the moment (should become %unknown, but becomes %%s)\n\t-- also, the end of the format directive is not detected in all cases, but handles everything that occurs in our boss mods ;)\n\t--> not suitable for general-purpose use, just for our warnings and timers (where an argument like a spell-target might be nil due to missing target information from unreliable detection methods)\n\tlocal function replace(cap1)\n\t\treturn cap1 == \"%\" and CL.UNKNOWN\n\tend\n\n\tfunction pformat(fstr, ...)\n\t\tlocal ok, str = pcall(format, fstr, ...)\n\t\treturn ok and str or fstr:gsub(\"(%%+)([^%%%s%)<]+)\", replace):gsub(\"%%%%\", \"%%\")\n\tend\nend\n\n-- sends a whisper to a player by his or her character name or BNet presence id\n-- returns true if the message was sent, nil otherwise\nlocal function sendWhisper(target, msg)\n\tif type(target) == \"number\" then\n\t\tif not BNIsSelf(target) then -- Never send BNet whispers to ourselves\n\t\t\tBNSendWhisper(target, msg)\n\t\tend\n\telseif type(target) == \"string\" then\n\t\tSendChatMessage(msg, \"WHISPER\", nil, target) -- Whispering to ourselves here is okay and somewhat useful for whisper-warnings\n\tend\nend\n\n--Another custom server name strip function that first strips out the \"><\" DBM wraps around playernames\nlocal function stripServerName(cap)\n\treturn DBM:GetShortServerName(cap:sub(2, -2))\nend\n\n--------------\n--  Events  --\n--------------\ndo\n\tlocal registeredEvents = {}\n\tlocal registeredSpellIds = {}\n\tlocal unfilteredCLEUEvents = {}\n\tlocal registeredUnitEventIds = {}\n\tlocal argsMT = {__index = {}}\n\tlocal args = setmetatable({}, argsMT)\n\n\tfunction argsMT.__index:IsSpellID(...)\n\t\treturn DBM:tIndexOf({...}, args.spellId) ~= nil\n\tend\n\n\tfunction argsMT.__index:IsPlayer()\n\t\treturn bband(args.destFlags, COMBATLOG_OBJECT_AFFILIATION_MINE) ~= 0 and bband(args.destFlags, COMBATLOG_OBJECT_TYPE_PLAYER) ~= 0\n\tend\n\n\tfunction argsMT.__index:IsPlayerSource()\n\t\treturn bband(args.sourceFlags, COMBATLOG_OBJECT_AFFILIATION_MINE) ~= 0 and bband(args.sourceFlags, COMBATLOG_OBJECT_TYPE_PLAYER) ~= 0\n\tend\n\n\tfunction argsMT.__index:IsNPC()\n\t\treturn bband(args.destFlags, COMBATLOG_OBJECT_TYPE_NPC) ~= 0\n\tend\n\n\tfunction argsMT.__index:IsPet()\n\t\treturn bband(args.destFlags, COMBATLOG_OBJECT_TYPE_PET) ~= 0\n\tend\n\n\tfunction argsMT.__index:IsPetSource()\n\t\treturn bband(args.sourceFlags, COMBATLOG_OBJECT_TYPE_PET) ~= 0\n\tend\n\n\tfunction argsMT.__index:IsSrcTypePlayer()\n\t\treturn bband(args.sourceFlags, COMBATLOG_OBJECT_TYPE_PLAYER) ~= 0\n\tend\n\n\tfunction argsMT.__index:IsDestTypePlayer()\n\t\treturn bband(args.destFlags, COMBATLOG_OBJECT_TYPE_PLAYER) ~= 0\n\tend\n\n\tfunction argsMT.__index:IsSrcTypeHostile()\n\t\treturn bband(args.sourceFlags, COMBATLOG_OBJECT_REACTION_HOSTILE) ~= 0\n\tend\n\n\tfunction argsMT.__index:IsDestTypeHostile()\n\t\treturn bband(args.destFlags, COMBATLOG_OBJECT_REACTION_HOSTILE) ~= 0\n\tend\n\n\tfunction argsMT.__index:GetSrcCreatureID()\n\t\treturn DBM:GetCIDFromGUID(self.sourceGUID)\n\tend\n\n\tfunction argsMT.__index:GetDestCreatureID()\n\t\treturn DBM:GetCIDFromGUID(self.destGUID)\n\tend\n\n\tlocal function handleEvent(self, event, ...)\n\t\tlocal isUnitEvent = event:sub(0, 5) == \"UNIT_\" and event ~= \"UNIT_DIED\" and event ~= \"UNIT_DESTROYED\"\n\t\tif self == mainFrame and isUnitEvent then\n\t\t\t-- UNIT_* events that come from mainFrame are _UNFILTERED variants and need their suffix\n\t\t\tevent = event .. \"_UNFILTERED\"\n\t\t\tisUnitEvent = false -- not actually a real unit id for this function...\n\t\tend\n\t\tif not registeredEvents[event] or not dbmIsEnabled then return end\n\t\tfor _, v in ipairs(registeredEvents[event]) do\n\t\t\tlocal zones = v.zones\n\t\t\tlocal handler = v[event]\n\t\t\tlocal modEvents = v.registeredUnitEvents\n\t\t\t--if isUnitEvent --[[and v.id == DBM.currentModId]] then -- Me and Kader initially coded a current mod check to save some CPU but noticed it would not work with RegisterEvents (to be listened out of modCombat) since currentModId is being set on StartCombat\n\t\t\t\t-- Workaround for retail-like mod:RegisterEvents(\"UNIT_SPELLCAST_START boss1\"). Check if we have valid units registered and filter out everything else.\n\t\t\t\t-- v is mod here... so we check registered mods for registered events with registered uIds (v.registeredUnitEvents[event]).\n\t\t\t\t-- then we check if we have our unit (args) in the table ... self.registeredUnitEvents[event] = args which is defined below\n\t\t\t\t--if modEvents and modEvents[event] and not checkEntry(modEvents[event], ...) then return end\n\t\t\t--end\n\n\t\t\tif not (isUnitEvent and modEvents and modEvents[event] and not checkEntry(modEvents[event], ...)) then\n\t\t\t\tif handler and (not zones or zones[LastInstanceMapID] or zones[LastInstanceZoneName]) and not (not v.isTrashModBossFightAllowed and v.isTrashMod and #inCombat > 0) then\n\t\t\t\t\thandler(v, ...)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal registerUnitEvent, unregisterUnitEvent, registerSpellId, unregisterSpellId, registerCLEUEvent, unregisterCLEUEvent\n\tdo\n\t\tfunction registerUnitEvent(mod, event, uIds)\n\t\t\t-- Since RegisterUnitEvent does not exist in WotLK, Unit Events will be registered only once in a dedicated frame, to avoid mainFrame logic in handleEvents.\n\t\t\t-- mod.RegisteredUnitEvents will also be saved differently, in a table of the Event with each uID in the value pair instead of event..uId strings.\n\t\t\t-- Register valid units for retail-like mod:RegisterEvents(\"UNIT_SPELLCAST_START boss1\")\n\t\t\tmod.registeredUnitEvents = mod.registeredUnitEvents or {}\n\t\t\tif next(uIds) then\n\t\t\t\tregisteredUnitEventIds[event] = (registeredUnitEventIds[event] or 0) + 1\n\t\t\t\tmod.registeredUnitEvents[event] = uIds\n\t\t\tend\n\t\t\tunitMainFrame:RegisterEvent(event)\n\t\tend\n\n\t\tfunction unregisterUnitEvent(mod, event, ...)\n\t\t\tfor i = 1, select(\"#\", ...) do\n\t\t\t\tlocal uId = select(i, ...)\n\t\t\t\tif not uId then break end\n\t\t\t\tlocal refs = (registeredUnitEventIds[event] or 1) - 1\n\t\t\t\tregisteredUnitEventIds[event] = refs\n\t\t\t\tif refs <= 0 then\n\t\t\t\t\tregisteredUnitEventIds[event] = nil\n\t\t\t\t\tif unitMainFrame then\n\t\t\t\t\t\tunitMainFrame:UnregisterEvent(event)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tif mod.registeredUnitEvents and mod.registeredUnitEvents[event] then\n\t\t\t\t\tfor k, v in ipairs(mod.registeredUnitEvents[event]) do\n\t\t\t\t\t\tif v == uId then\n\t\t\t\t\t\t\ttremove(mod.registeredUnitEvents[event], k)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\t-- Remove empty event uId table\n\t\t\t\t\tif #mod.registeredUnitEvents[event] <= 0 then\n\t\t\t\t\t\tmod.registeredUnitEvents[event] = nil\n\t\t\t\t\tend\n\t\t\t\t\t-- Remove empty registered unit events table\n\t\t\t\t\tlocal count = 0\n\t\t\t\t\tfor _ in pairs(mod.registeredUnitEvents) do\n\t\t\t\t\t\tcount = count + 1\n\t\t\t\t\tend\n\t\t\t\t\tif count <= 0 then\n\t\t\t\t\t\tmod.registeredUnitEvents = nil\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tfor i = #registeredEvents[event], 1, -1 do\n\t\t\t\tif registeredEvents[event][i] == mod then\n\t\t\t\t\ttremove(registeredEvents[event], i)\n\t\t\t\tend\n\t\t\tend\n\t\t\tif #registeredEvents[event] == 0 then\n\t\t\t\tregisteredEvents[event] = nil\n\t\t\tend\n\t\tend\n\n\t\tfunction registerSpellId(event, spellId)\n\t\t\tif type(spellId) == \"string\" then--Something is screwed up, like SPELL_AURA_APPLIED DOSE\n\t\t\t\tDBM:Debug(\"DBM RegisterEvents Warning: \"..spellId..\" is not a number!\")\n\t\t\t\treturn\n\t\t\tend\n\t\t\tif spellId and not DBM:GetSpellInfo(spellId) then\n\t\t\t\tDBM:Debug(\"DBM RegisterEvents Warning: \"..spellId..\" spell id does not exist!\")\n\t\t\t\treturn\n\t\t\tend\n\t\t\tif not registeredSpellIds[event] then\n\t\t\t\tregisteredSpellIds[event] = {}\n\t\t\tend\n\t\t\tregisteredSpellIds[event][spellId] = (registeredSpellIds[event][spellId] or 0) + 1\n\t\tend\n\n\t\tfunction unregisterSpellId(event, spellId)\n\t\t\tif not registeredSpellIds[event] then return end\n\t\t\tif spellId and not DBM:GetSpellInfo(spellId) then\n\t\t\t\tDBM:Debug(\"DBM unregisterSpellId Warning: \"..spellId..\" spell id does not exist!\")\n\t\t\t\treturn\n\t\t\tend\n\t\t\tlocal refs = (registeredSpellIds[event][spellId] or 1) - 1\n\t\t\tregisteredSpellIds[event][spellId] = refs\n\t\t\tif refs <= 0 then\n\t\t\t\tregisteredSpellIds[event][spellId] = nil\n\t\t\tend\n\t\tend\n\n\t\t--There are 2 tables. unfilteredCLEUEvents and registeredSpellIds table.\n\t\t--unfilteredCLEUEvents saves UNFILTERED cleu event count. this is count table to prevent bad unregister.\n\t\t--registeredSpellIds tables filtered table. this saves event and spell ids. works smiliar with unfilteredCLEUEvents table.\n\t\tfunction registerCLEUEvent(mod, event)\n\t\t\tlocal argTable = {strsplit(\" \", event)}\n\t\t\t-- filtered cleu event. save information in registeredSpellIds table.\n\t\t\tif #argTable > 1 then\n\t\t\t\tevent = argTable[1]\n\t\t\t\tfor i = 2, #argTable do\n\t\t\t\t\tregisterSpellId(event, tonumber(argTable[i]))\n\t\t\t\tend\n\t\t\t-- no args. works as unfiltered. save information in unfilteredCLEUEvents table.\n\t\t\telse\n\t\t\t\tunfilteredCLEUEvents[event] = (unfilteredCLEUEvents[event] or 0) + 1\n\t\t\tend\n\t\t\tregisteredEvents[event] = registeredEvents[event] or {}\n\t\t\ttinsert(registeredEvents[event], mod)\n\t\tend\n\n\t\tfunction unregisterCLEUEvent(mod, event)\n\t\t\tlocal argTable = {strsplit(\" \", event)}\n\t\t\tlocal eventCleared = false\n\t\t\t-- filtered cleu event. save information in registeredSpellIds table.\n\t\t\tif #argTable > 1 then\n\t\t\t\tevent = argTable[1]\n\t\t\t\tfor i = 2, #argTable do\n\t\t\t\t\tunregisterSpellId(event, tonumber(argTable[i]))\n\t\t\t\tend\n\t\t\t\tlocal remainingSpellIdCount = 0\n\t\t\t\tif registeredSpellIds[event] then\n\t\t\t\t\tfor _, _ in pairs(registeredSpellIds[event]) do\n\t\t\t\t\t\tremainingSpellIdCount = remainingSpellIdCount + 1\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tif remainingSpellIdCount == 0 then\n\t\t\t\t\tregisteredSpellIds[event] = nil\n\t\t\t\t\t-- if unfilteredCLEUEvents and registeredSpellIds do not exists, clear registeredEvents.\n\t\t\t\t\tif not unfilteredCLEUEvents[event] then\n\t\t\t\t\t\teventCleared = true\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t-- no args. works as unfiltered. save information in unfilteredCLEUEvents table.\n\t\t\telse\n\t\t\t\tlocal refs = (unfilteredCLEUEvents[event] or 1) - 1\n\t\t\t\tunfilteredCLEUEvents[event] = refs\n\t\t\t\tif refs <= 0 then\n\t\t\t\t\tunfilteredCLEUEvents[event] = nil\n\t\t\t\t\t-- if unfilteredCLEUEvents and registeredSpellIds do not exists, clear registeredEvents.\n\t\t\t\t\tif not registeredSpellIds[event] then\n\t\t\t\t\t\teventCleared = true\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tfor i = #registeredEvents[event], 1, -1 do\n\t\t\t\tif registeredEvents[event][i] == mod then\n\t\t\t\t\tregisteredEvents[event][i] = {}\n\t\t\t\t\tbreak\n\t\t\t\tend\n\t\t\tend\n\t\t\tif eventCleared then\n\t\t\t\tregisteredEvents[event] = nil\n\t\t\tend\n\t\tend\n\tend\n\n\t-- UNIT_* events are special: they can take 'parameters' like this: \"UNIT_HEALTH boss1 boss2\" which only trigger the event for the given unit ids\n\tfunction DBM:RegisterEvents(...)\n\t\tfor _, event in ipairs({...}) do\n\t\t\t-- spell events with special care.\n\t\t\tif event:sub(0, 6) == \"SPELL_\" and event ~= \"SPELL_NAME_UPDATE\" or event:sub(0, 6) == \"RANGE_\" or event:sub(0, 6) == \"SWING_\" or event == \"UNIT_DIED\" or event == \"UNIT_DESTROYED\" or event == \"PARTY_KILL\" then\n\t\t\t\tregisterCLEUEvent(self, event)\n\t\t\telse\n\t\t\t\tlocal eventWithArgs = event\n\t\t\t\tif event:sub(0, 5) == \"UNIT_\" then\n\t\t\t\t\tlocal uIds = {strsplit(\" \", event)}\n\t\t\t\t\tevent = tremove(uIds, 1)\n\t\t\t\t\tif event:sub(-11) == \"_UNFILTERED\" then\n\t\t\t\t\t\t-- we really want *all* unit ids\n\t\t\t\t\t\tmainFrame:RegisterEvent(event:sub(0, -12))\n\t\t\t\t\telse\n\t\t\t\t\t\tregisterUnitEvent(self, event, uIds)\n\t\t\t\t\tend\n\t\t\t\t-- spell events with filter\n\t\t\t\telse\n\t\t\t\t\t-- normal events\n\t\t\t\t\tmainFrame:RegisterEvent(event)\n\t\t\t\tend\n\t\t\t\tregisteredEvents[eventWithArgs] = registeredEvents[eventWithArgs] or {}\n\t\t\t\ttinsert(registeredEvents[eventWithArgs], self)\n\t\t\t\tif event ~= eventWithArgs then\n\t\t\t\t\tregisteredEvents[event] = registeredEvents[event] or {}\n\t\t\t\t\ttinsert(registeredEvents[event], self)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal function unregisterUEvent(mod, event)\n\t\tif event:sub(0, 5) == \"UNIT_\" and event ~= \"UNIT_DIED\" and event ~= \"UNIT_DESTROYED\" then\n\t\t\tlocal eventName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 = strsplit(\" \", event)\n\t\t\tif eventName:sub(eventName:len() - 10) == \"_UNFILTERED\" then\n\t\t\t\tmainFrame:UnregisterEvent(eventName:sub(0, -12))\n\t\t\telse\n\t\t\t\tunregisterUnitEvent(mod, eventName, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal function findRealEvent(t, val)\n\t\tfor _, v in ipairs(t) do\n\t\t\tlocal event = strsplit(\" \", v)\n\t\t\tif event == val then\n\t\t\t\treturn v\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction DBM:UnregisterInCombatEvents(srmOnly, srmIncluded)\n\t\tfor event, mods in pairs(registeredEvents) do\n\t\t\tif srmOnly then\n\t\t\t\tlocal i = 1\n\t\t\t\twhile mods[i] do\n\t\t\t\t\tif mods[i] == self and event == \"SPELL_AURA_REMOVED\" then\n\t\t\t\t\t\tlocal findEvent = findRealEvent(self.inCombatOnlyEvents, \"SPELL_AURA_REMOVED\")\n\t\t\t\t\t\tif findEvent then\n\t\t\t\t\t\t\tunregisterCLEUEvent(self, findEvent)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\ti = i +1\n\t\t\t\tend\n\t\t\telseif (event:sub(0, 6) == \"SPELL_\"and event ~= \"SPELL_NAME_UPDATE\" or event:sub(0, 6) == \"RANGE_\") then\n\t\t\t\tlocal i = 1\n\t\t\t\twhile mods[i] do\n\t\t\t\t\tif mods[i] == self and (srmIncluded or event ~= \"SPELL_AURA_REMOVED\") then\n\t\t\t\t\t\tlocal findEvent = findRealEvent(self.inCombatOnlyEvents, event)\n\t\t\t\t\t\tif findEvent then\n\t\t\t\t\t\t\tunregisterCLEUEvent(self, findEvent)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\ti = i +1\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tlocal match = false\n\t\t\t\tfor i = #mods, 1, -1 do\n\t\t\t\t\tif mods[i] == self and checkEntry(self.inCombatOnlyEvents, event) then\n\t\t\t\t\t\ttremove(mods, i)\n\t\t\t\t\t\tmatch = true\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tif #mods == 0 or (match and event:sub(0, 5) == \"UNIT_\" and event:sub(0, -10) ~= \"_UNFILTERED\" and event ~= \"UNIT_DIED\" and event ~= \"UNIT_DESTROYED\") then -- unit events have their own reference count\n\t\t\t\t\tunregisterUEvent(self, event)\n\t\t\t\tend\n\t\t\t\tif #mods == 0 then\n\t\t\t\t\tregisteredEvents[event] = nil\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction DBM:RegisterShortTermEvents(...)\n\t\tDBM:Debug(\"RegisterShortTermEvents fired\", 2)\n\t\tlocal _shortTermRegisterEvents = {...}\n\t\tfor k, v in pairs(_shortTermRegisterEvents) do\n\t\t\tif v:sub(0, 5) == \"UNIT_\" and v:sub(v:len() - 10) ~= \"_UNFILTERED\" and not v:find(\" \") and v ~= \"UNIT_DIED\" and v ~= \"UNIT_DESTROYED\" then\n\t\t\t\t-- legacy event, oh noes\n\t\t\t\t_shortTermRegisterEvents[k] = v--[[ .. \" boss1 boss2 boss3 boss4 boss5 target focus\"]] -- don't preassign units if the event does not state them. LK Ice Spheres scanner requires listening to the entire raid units\n\t\t\tend\n\t\tend\n\t\tself.shortTermEventsRegistered = 1\n\t\tself:RegisterEvents(unpack(_shortTermRegisterEvents))\n\t\t-- Fix so we can register multiple short term events. Use at your own risk, as unsucribing will cause\n\t\t-- all short term events to unregister.\n\t\tif not self.shortTermRegisterEvents then\n\t\t\tself.shortTermRegisterEvents = {}\n\t\tend\n\t\tfor k, v in pairs(_shortTermRegisterEvents) do\n\t\t\tif #self.shortTermRegisterEvents ~= 0 then\n\t\t\t\tif not checkEntry(self.shortTermRegisterEvents, v) then -- check to prevent event duplication\n\t\t\t\t\ttinsert(self.shortTermRegisterEvents, v) -- use tinsert instead to achieve numeric order for checkEntry ipairs to work\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tself.shortTermRegisterEvents[k] = v\n\t\t\tend\n\t\tend\n\t\t-- End fix\n\tend\n\n\tfunction DBM:UnregisterShortTermEvents()\n\t\tDBM:Debug(\"UnregisterShortTermEvents fired\", 2)\n\t\tif self.shortTermRegisterEvents then\n\t\t\tDBM:Debug(\"UnregisterShortTermEvents found registered shortTermRegisterEvents\", 2)\n\t\t\tfor event, mods in pairs(registeredEvents) do\n\t\t\t\tif event:sub(0, 6) == \"SPELL_\" or event:sub(0, 6) == \"RANGE_\" then\n\t\t\t\t\tlocal i = 1\n\t\t\t\t\twhile mods[i] do\n\t\t\t\t\t\tif mods[i] == self then\n\t\t\t\t\t\t\tlocal findEvent = findRealEvent(self.shortTermRegisterEvents, event)\n\t\t\t\t\t\t\tif findEvent then\n\t\t\t\t\t\t\t\tunregisterCLEUEvent(self, findEvent)\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\ti = i +1\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tlocal match = false\n\t\t\t\t\tfor i = #mods, 1, -1 do\n\t\t\t\t\t\tif mods[i] == self then\n\t\t\t\t\t\t\tlocal findEvent = findRealEvent(self.shortTermRegisterEvents, event)\n\t\t\t\t\t\t\tif findEvent then\n\t\t\t\t\t\t\t\ttremove(mods, i)\n\t\t\t\t\t\t\t\tmatch = true\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\tif #mods == 0 or (match and event:sub(0, 5) == \"UNIT_\" and event:sub(0, -10) ~= \"_UNFILTERED\" and event ~= \"UNIT_DIED\" and event ~= \"UNIT_DESTROYED\") then\n\t\t\t\t\t\tunregisterUEvent(self, event)\n\t\t\t\t\t\tDBM:Debug(\"unregisterUEvent for unit event \"..event..\" unregistered\", 3)\n\t\t\t\t\tend\n\t\t\t\t\tif #mods == 0 then\n\t\t\t\t\t\tregisteredEvents[event] = nil\n\t\t\t\t\t\tDBM:Debug(\"registeredEvents for event \"..event..\" nilled\", 3)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tself.shortTermEventsRegistered = nil\n\t\t\tself.shortTermRegisterEvents = nil\n\t\tend\n\tend\n\n\tDBM:RegisterEvents(\"ADDON_LOADED\")\n\n\tfunction DBM:FilterRaidBossEmote(msg, ...)\n\t\treturn handleEvent(nil, \"CHAT_MSG_RAID_BOSS_EMOTE_FILTERED\", msg:gsub(\"\\124c%x+(.-)\\124r\", \"%1\"), ...)\n\tend\n\n\tlocal noArgTableEvents = {\n\t\tSWING_DAMAGE = true,\n\t\tSWING_MISSED = true,\n\t\tRANGE_DAMAGE = true,\n\t\tRANGE_MISSED = true,\n\t\tSPELL_DAMAGE = true,\n\t\tSPELL_BUILDING_DAMAGE = true,\n\t\tSPELL_MISSED = true,\n\t\tSPELL_ABSORBED = true,\n\t\tSPELL_HEAL = true,\n\t\tSPELL_ENERGIZE = true,\n\t\tSPELL_PERIODIC_ENERGIZE = true,\n\t\tSPELL_PERIODIC_MISSED = true,\n\t\tSPELL_PERIODIC_DAMAGE = true,\n\t\tSPELL_PERIODIC_DRAIN = true,\n\t\tSPELL_PERIODIC_LEECH = true,\n\t\tSPELL_DRAIN = true,\n\t\tSPELL_LEECH = true,\n\t\tSPELL_CAST_FAILED = true\n\t}\n\tfunction DBM:COMBAT_LOG_EVENT_UNFILTERED(timestamp, event, sourceGUID, sourceName, sourceFlags, destGUID, destName, destFlags, extraArg1, extraArg2, extraArg3, extraArg4, extraArg5, extraArg6, extraArg7, extraArg8, extraArg9, extraArg10, extraArg11, extraArg12)\n\t\tif not registeredEvents[event] then return end\n\t\tlocal eventSub6 = event:sub(0, 6)\n\t\tif (eventSub6 == \"SPELL_\" or eventSub6 == \"RANGE_\") --[[and not unfilteredCLEUEvents[event]--]] and registeredSpellIds[event] then -- why is unfilteredCLEUEvents event count even needed here? Just broke the function altogether\n\t\t\tif not registeredSpellIds[event][extraArg1] then return end\n\t\tend\n\t\t-- process some high volume events without building the whole table which is somewhat faster\n\t\t-- this prevents work-around with mods that used to have their own event handler to prevent this overhead\n\t\tif noArgTableEvents[event] then\n\t\t\treturn handleEvent(nil, event, sourceGUID, sourceName, sourceFlags, destGUID, destName, destFlags, extraArg1, extraArg2, extraArg3, extraArg4, extraArg5, extraArg6, extraArg7, extraArg8, extraArg9, extraArg10, extraArg11, extraArg12)\n\t\telse\n\t\t\ttwipe(args)\n\t\t\targs.timestamp = timestamp\n\t\t\targs.event = event\n\t\t\targs.sourceGUID = sourceGUID\n\t\t\targs.sourceName = sourceName\n\t\t\targs.sourceFlags = sourceFlags\n\t\t\targs.destGUID = destGUID\n\t\t\targs.destName = destName\n\t\t\targs.destFlags = destFlags\n\t\t\t-- taken from Blizzard_CombatLog.lua\n\t\t\tif eventSub6 == \"SPELL_\" then\n\t\t\t\targs.spellId, args.spellName, args.spellSchool = extraArg1, extraArg2, extraArg3\n\t\t\t\tif event == \"SPELL_AURA_APPLIED\" or event == \"SPELL_AURA_REFRESH\" or event == \"SPELL_AURA_REMOVED\" or event == \"SPELL_AURA_BROKEN\" then\n\t\t\t\t\targs.auraType = extraArg4\n\t\t\t\t\tif not args.sourceName then\n\t\t\t\t\t\targs.sourceName = args.destName\n\t\t\t\t\t\targs.sourceGUID = args.destGUID\n\t\t\t\t\t\targs.sourceFlags = args.destFlags\n\t\t\t\t\tend\n\t\t\t\telseif event == \"SPELL_AURA_APPLIED_DOSE\" or event == \"SPELL_AURA_REMOVED_DOSE\" then\n\t\t\t\t\targs.auraType = extraArg4\n\t\t\t\t\targs.amount = extraArg5\n\t\t\t\t\tif not args.sourceName then\n\t\t\t\t\t\targs.sourceName = args.destName\n\t\t\t\t\t\targs.sourceGUID = args.destGUID\n\t\t\t\t\t\targs.sourceFlags = args.destFlags\n\t\t\t\t\tend\n\t\t\t\telseif event == \"SPELL_CAST_FAILED\" then\n\t\t\t\t\targs.failedType = extraArg4\n\t\t\t\telseif event == \"SPELL_INTERRUPT\" or event == \"SPELL_DISPEL_FAILED\" then\n\t\t\t\t\targs.extraSpellId, args.extraSpellName, args.extraSpellSchool = extraArg4, extraArg5, extraArg6\n\t\t\t\telseif event == \"SPELL_EXTRA_ATTACKS\" then\n\t\t\t\t\targs.amount = extraArg4\n\t\t\t\telseif event == \"SPELL_DISPEL\" or event == \"SPELL_STOLEN\" or event == \"SPELL_AURA_BROKEN_SPELL\" then\n\t\t\t\t\targs.extraSpellId, args.extraSpellName, args.extraSpellSchool, args.auraType = extraArg4, extraArg5, extraArg6, extraArg7\n\t\t\t\tend\n\t\t\telseif event == \"DAMAGE_SHIELD\" or event == \"DAMAGE_SPLIT\" then\n\t\t\t\targs.spellId, args.spellName, args.spellSchool, args.amount, args.overkill, args.school, args.resisted, args.blocked, args.absorbed, args.critical, args.glancing, args.crushing = extraArg1, extraArg2, extraArg3, extraArg4, extraArg5, extraArg6, extraArg7, extraArg8, extraArg9, extraArg10, extraArg11, extraArg12\n\t\t\telseif event == \"DAMAGE_SHIELD_MISSED\" then\n\t\t\t\targs.spellId, args.spellName, args.spellSchool, args.missType = extraArg1, extraArg2, extraArg3, extraArg4\n\t\t\telseif event == \"ENCHANT_APPLIED\" or event == \"ENCHANT_REMOVED\" then\n\t\t\t\targs.spellName,\targs.itemId, args.itemName = extraArg1, extraArg2, extraArg3\n\t\t\telseif event == \"UNIT_DIED\" or event == \"UNIT_DESTROYED\" then\n\t\t\t\targs.sourceName = args.destName\n\t\t\t\targs.sourceGUID = args.destGUID\n\t\t\t\targs.sourceFlags = args.destFlags\n\t\t\telseif event == \"ENVIRONMENTAL_DAMAGE\" then\n\t\t\t\targs.environmentalType, args.amount, args.overkill, args.school, args.resisted, args.blocked, args.absorbed, args.critical, args.glancing, args.crushing = extraArg1, extraArg2, extraArg3, extraArg4, extraArg5, extraArg6, extraArg7, extraArg8, extraArg9, extraArg10\n\t\t\t\targs.spellName = _G[\"ACTION_\"..event..\"_\"..args.environmentalType]\n\t\t\t\targs.spellSchool = args.school\n\t\t\tend\n\t\t\treturn handleEvent(nil, event, args)\n\t\tend\n\tend\n\tunitMainFrame:SetScript(\"OnEvent\", handleEvent)\n\tmainFrame:SetScript(\"OnEvent\", handleEvent)\nend\n\n--------------\n--  OnLoad  --\n--------------\ndo\n\tlocal isLoaded = false\n\tlocal onLoadCallbacks, disabledMods = {}, {}\n\n\tlocal function runDelayedFunctions(self)\n\t\t--Check if voice pack missing\n\t\tlocal activeVP = self.Options.ChosenVoicePack2\n\t\tif activeVP ~= \"None\" then\n\t\t\tif not self.VoiceVersions[activeVP] or (self.VoiceVersions[activeVP] and self.VoiceVersions[activeVP] == 0) then--A voice pack is selected that does not belong\n\t\t\t\tvoiceSessionDisabled = true\n\t\t\t\t--Since VEM is now bundled, users may elect to disable it by simply disabling the module\n\t\t\t\t--let's not nag them, only remind for 3rd party because then we know user installed it themselves\n\t\t\t\tif activeVP ~= \"VEM\" then\n\t\t\t\t\tAddMsg(self, L.VOICE_MISSING)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\t--Check if any of countdown sounds are using missing voice pack\n\t\tlocal found1, found2, found3, found4 = false, false, false, false\n\t\tfor _, count in pairs(DBM:GetCountSounds()) do\n\t\t\tlocal voice = count.value\n\t\t\tif voice == self.Options.CountdownVoice then\n\t\t\t\tfound1 = true\n\t\t\tend\n\t\t\tif voice == self.Options.CountdownVoice2 then\n\t\t\t\tfound2 = true\n\t\t\tend\n\t\t\tif voice == self.Options.CountdownVoice3 then\n\t\t\t\tfound3 = true\n\t\t\tend\n\t\t\tif voice == self.Options.PullVoice then\n\t\t\t\tfound4 = true\n\t\t\tend\n\t\tend\n\t\tif not found1 then\n\t\t\tAddMsg(self, L.VOICE_COUNT_MISSING:format(1, self.DefaultOptions.CountdownVoice))\n\t\t\tself.Options.CountdownVoice = self.DefaultOptions.CountdownVoice\n\t\tend\n\t\tif not found2 then\n\t\t\tAddMsg(self, L.VOICE_COUNT_MISSING:format(2, self.DefaultOptions.CountdownVoice2))\n\t\t\tself.Options.CountdownVoice2 = self.DefaultOptions.CountdownVoice2\n\t\tend\n\t\tif not found3 then\n\t\t\tAddMsg(self, L.VOICE_COUNT_MISSING:format(3, self.DefaultOptions.CountdownVoice3))\n\t\t\tself.Options.CountdownVoice3 = self.DefaultOptions.CountdownVoice3\n\t\tend\n\t\tif not found4 then\n\t\t\tAddMsg(self, L.VOICE_COUNT_MISSING:format(4, self.DefaultOptions.PullVoice))\n\t\t\tself.Options.PullVoice = self.DefaultOptions.PullVoice\n\t\tend\n\t\tself:BuildVoiceCountdownCache()\n\t\t--Break timer recovery\n\t\t--Try local settings\n\t\tif self.Options.RestoreSettingBreakTimer then\n\t\t\tlocal timer, startTime = string.split(\"/\", self.Options.RestoreSettingBreakTimer)\n\t\t\tlocal elapsed = time() - tonumber(startTime)\n\t\t\tlocal remaining = timer - elapsed\n\t\t\tif remaining > 0 then\n\t\t\t\tbreakTimerStart(DBM, remaining, playerName)\n\t\t\telse--It must have ended while we were offline, kill variable.\n\t\t\t\tself.Options.RestoreSettingBreakTimer = nil\n\t\t\tend\n\t\tend\n\t\tsendGuildSync(\"DBMv4-GH\", \"Hi!\")\n\t\tif not savedDifficulty or not difficultyText or not difficultyIndex then--prevent error if savedDifficulty or difficultyText is nil\n\t\t\tsavedDifficulty, difficultyText, difficultyIndex, LastGroupSize = self:GetCurrentInstanceDifficulty()\n\t\tend\n\t\tDBM:Debug(\"Delayed functions finished\", 3)\n\tend\n\n\t-- register a callback that will be executed once the addon is fully loaded (ADDON_LOADED fired, saved vars are available)\n\tfunction DBM:RegisterOnLoadCallback(cb)\n\t\tif isLoaded then\n\t\t\tcb()\n\t\telse\n\t\t\tonLoadCallbacks[#onLoadCallbacks + 1] = cb\n\t\tend\n\tend\n\n\tfunction DBM:ADDON_LOADED(modname)\n\t\tif modname == \"DBM-Core\" and not isLoaded then\n\t\t\tdbmToc = tonumber(GetAddOnMetadata(\"DBM-Core\", \"X-Min-Interface\"))\n\t\t\tisLoaded = true\n\t\t\tfor _, v in ipairs(onLoadCallbacks) do\n\t\t\t\txpcall(v, geterrorhandler())\n\t\t\tend\n\t\t\tonLoadCallbacks = nil\n\t\t\tloadOptions(self)\n\t\t\tDBT:LoadOptions(\"DBM\")\n\t\t\tself.AddOns = {}\n\t\t\tprivate:OnModuleLoad()\n\t\t\tself.Arrow:LoadPosition()\n\t\t\t-- LibDBIcon setup\n\t\t\tif type(DBM_MinimapIcon) ~= \"table\" then\n\t\t\t\tDBM_MinimapIcon = {}\n\t\t\tend\n\t\t\tif LibStub(\"LibDBIcon-1.0\", true) then\n\t\t\t\tLibStub(\"LibDBIcon-1.0\"):Register(\"DBM\", private.dataBroker, DBM_MinimapIcon)\n\t\t\tend\n\t\t\tself.Voices = { {text = \"None\",value = \"None\"}, }--Create voice table, with default \"None\" value\n\t\t\tself.VoiceVersions = {}\n\t\t\tfor i = 1, GetNumAddOns() do\n\t\t\t\tlocal addonName, _, _, enabled = GetAddOnInfo(i)\n\t\t\t\tif GetAddOnMetadata(i, \"X-DBM-Mod\") then\n\t\t\t\t\tif enabled then\n\t\t\t\t\t\tif checkEntry(bannedMods, addonName) then\n\t\t\t\t\t\t\tAddMsg(self, \"The mod \" .. addonName .. \" is deprecated and will not be available. Please remove the folder \" .. addonName .. \" from your Interface\" .. (IsWindowsClient() and \"\\\\\" or \"/\") .. \"AddOns folder to get rid of this message. Check for an updated version of \" .. addonName .. \" that is compatible with your game version.\")\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlocal minToc = tonumber(GetAddOnMetadata(i, \"X-Min-Interface\") or 0)\n\n\t\t\t\t\t\t\ttinsert(self.AddOns, {\n\t\t\t\t\t\t\t\tsort\t\t\t= tonumber(GetAddOnMetadata(i, \"X-DBM-Mod-Sort\") or math.huge) or math.huge,\n\t\t\t\t\t\t\t\ttype\t\t\t= GetAddOnMetadata(i, \"X-DBM-Mod-Type\") or \"OTHER\",\n\t\t\t\t\t\t\t\tcategory\t\t= GetAddOnMetadata(i, \"X-DBM-Mod-Category\") or \"Other\",\n\t\t\t\t\t\t\t\tstatTypes\t\t= GetAddOnMetadata(i, \"X-DBM-StatTypes\") or \"\",\n\t\t\t\t\t\t\t\toldOptions\t\t= tonumber(GetAddOnMetadata(i, \"X-DBM-OldOptions\") or 0) == 1,\n\t\t\t\t\t\t\t\tname\t\t\t= GetAddOnMetadata(i, \"X-DBM-Mod-Name\") or \"\",\n\t\t\t\t\t\t\t\tzone\t\t\t= {strsplit(\",\", GetAddOnMetadata(i, \"X-DBM-Mod-LoadZone\") or CL.UNKNOWN)},\n\t\t\t\t\t\t\t\tmapId\t\t\t= {strsplit(\",\", GetAddOnMetadata(i, \"X-DBM-Mod-MapID\") or \"\")},\n\t\t\t\t\t\t\t\trealm\t\t\t= {strsplit(\",\", GetAddOnMetadata(i, \"X-DBM-Mod-LoadRealm\") or \"\")},\n\t\t\t\t\t\t\t\tblockRealm\t\t= {strsplit(\",\", GetAddOnMetadata(i, \"X-DBM-Mod-BlockRealm\") or \"None\")}, -- meant to prevent double load by blocking mod if it exists in different expansions\n\t\t\t\t\t\t\t\tsubTabs\t\t\t= GetAddOnMetadata(i, \"X-DBM-Mod-SubCategoriesID\") and {strsplit(\",\", GetAddOnMetadata(i, \"X-DBM-Mod-SubCategoriesID\"))} or GetAddOnMetadata(i, \"X-DBM-Mod-SubCategories\") and {strsplit(\",\", GetAddOnMetadata(i, \"X-DBM-Mod-SubCategories\"))},\n\t\t\t\t\t\t\t\toneFormat\t\t= tonumber(GetAddOnMetadata(i, \"X-DBM-Mod-Has-Single-Format\") or 0) == 1, -- Deprecated\n\t\t\t\t\t\t\t\thasLFR\t\t\t= tonumber(GetAddOnMetadata(i, \"X-DBM-Mod-Has-LFR\") or 0) == 1, -- Deprecated\n\t\t\t\t\t\t\t\thasChallenge\t= tonumber(GetAddOnMetadata(i, \"X-DBM-Mod-Has-Challenge\") or 0) == 1, -- Deprecated\n\t\t\t\t\t\t\t\thasHeroic\t\t= tonumber(GetAddOnMetadata(i, \"X-DBM-Mod-Has-Heroic-Mode\") or 1) == 1, -- Deprecated\n\t\t\t\t\t\t\t\tnoHeroic\t\t= tonumber(GetAddOnMetadata(i, \"X-DBM-Mod-No-Heroic\") or 0) == 1, -- Deprecated\n\t\t\t\t\t\t\t\thasMythic\t\t= tonumber(GetAddOnMetadata(i, \"X-DBM-Mod-Has-Mythic\") or 0) == 1, -- Deprecated\n\t\t\t\t\t\t\t\thasTimeWalker\t= tonumber(GetAddOnMetadata(i, \"X-DBM-Mod-Has-TimeWalker\") or 0) == 1, -- Deprecated\n\t\t\t\t\t\t\t\tnoStatistics\t= tonumber(GetAddOnMetadata(i, \"X-DBM-Mod-No-Statistics\") or 0) == 1,\n\t\t\t\t\t\t\t\tisWorldBoss\t\t= tonumber(GetAddOnMetadata(i, \"X-DBM-Mod-World-Boss\") or 0) == 1,\n\t\t\t\t\t\t\t\tisExpedition\t= tonumber(GetAddOnMetadata(i, \"X-DBM-Mod-Expedition\") or 0) == 1,\n\t\t\t\t\t\t\t\tminRevision\t\t= tonumber(GetAddOnMetadata(i, \"X-DBM-Mod-MinCoreRevision\") or 0),\n\t\t\t\t\t\t\t\tminExpansion\t= tonumber(GetAddOnMetadata(i, \"X-DBM-Mod-MinExpansion\") or 0),\n\t\t\t\t\t\t\t\tminToc\t\t\t= minToc,\n\t\t\t\t\t\t\t\tmodId\t\t\t= addonName,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tfor k, _ in ipairs(self.AddOns[#self.AddOns].zone) do\n\t\t\t\t\t\t\t\tself.AddOns[#self.AddOns].zone[k] = (self.AddOns[#self.AddOns].zone[k]):trim()\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tfor j = #self.AddOns[#self.AddOns].mapId, 1, -1 do\n\t\t\t\t\t\t\t\tlocal id = tonumber(self.AddOns[#self.AddOns].mapId[j])\n\t\t\t\t\t\t\t\tif id then\n\t\t\t\t\t\t\t\t\tself.AddOns[#self.AddOns].mapId[j] = id\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttremove(self.AddOns[#self.AddOns].mapId, j)\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tfor k, _ in ipairs(self.AddOns[#self.AddOns].realm) do\n\t\t\t\t\t\t\t\tself.AddOns[#self.AddOns].realm[k] = (self.AddOns[#self.AddOns].realm[k]):trim()\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tfor k, _ in ipairs(self.AddOns[#self.AddOns].blockRealm) do\n\t\t\t\t\t\t\t\tself.AddOns[#self.AddOns].blockRealm[k] = (self.AddOns[#self.AddOns].blockRealm[k]):trim()\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif self.AddOns[#self.AddOns].subTabs then\n\t\t\t\t\t\t\t\tlocal subTabs = self.AddOns[#self.AddOns].subTabs\n\t\t\t\t\t\t\t\tfor k, _ in ipairs(subTabs) do\n\t\t\t\t\t\t\t\t\tself.AddOns[#self.AddOns].subTabs[k] = (subTabs[k]):trim()\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif GetAddOnMetadata(i, \"X-DBM-Mod-LoadCID\") then\n\t\t\t\t\t\t\t\tlocal idTable = {strsplit(\",\", GetAddOnMetadata(i, \"X-DBM-Mod-LoadCID\"))}\n\t\t\t\t\t\t\t\tfor j = 1, #idTable do\n\t\t\t\t\t\t\t\t\tloadcIds[tonumber(idTable[j]) or \"\"] = addonName\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\telse\n\t\t\t\t\t\tdisabledMods[#disabledMods+1] = addonName\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tif GetAddOnMetadata(i, \"X-DBM-Voice\") and enabled then\n\t\t\t\t\tif checkEntry(bannedMods, addonName) then\n\t\t\t\t\t\tAddMsg(self, \"The mod \" .. addonName .. \" is deprecated and will not be available. Please remove the folder \" .. addonName .. \" from your Interface\" .. (IsWindowsClient() and \"\\\\\" or \"/\") .. \"AddOns folder to get rid of this message. Check for an updated version of \" .. addonName .. \" that is compatible with your game version.\")\n\t\t\t\t\telse\n\t\t\t\t\t\tself:Schedule(0.01, function()\n\t\t\t\t\t\t\tlocal voiceValue = GetAddOnMetadata(i, \"X-DBM-Voice-ShortName\")\n\t\t\t\t\t\t\tlocal voiceVersion = tonumber(GetAddOnMetadata(i, \"X-DBM-Voice-Version\") or 0)\n\t\t\t\t\t\t\tif voiceVersion > 0 then--Do not insert voice version 0 into THIS table. 0 should be used by voice packs that insert only countdown\n\t\t\t\t\t\t\t\ttinsert(self.Voices, { text = GetAddOnMetadata(i, \"X-DBM-Voice-Name\"), value = voiceValue })\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tself.VoiceVersions[voiceValue] = voiceVersion\n\t\t\t\t\t\t\tself:Schedule(10, self.CheckVoicePackVersion, self, voiceValue)--Still at 1 since the count sounds won't break any mods or affect filter. V2 if support countsound path\n\t\t\t\t\t\t\tif GetAddOnMetadata(i, \"X-DBM-Voice-HasCount\") then--Supports adding countdown options, insert new countdown into table\n\t\t\t\t\t\t\t\tDBM:AddCountSound(GetAddOnMetadata(i, \"X-DBM-Voice-Name\"), \"VP:\"..voiceValue, \"Interface\\\\AddOns\\\\DBM-VP\"..voiceValue..\"\\\\count\\\\\")\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tif GetAddOnMetadata(i, \"X-DBM-CountPack\") and enabled ~= 0 then\n\t\t\t\t\tif checkEntry(bannedMods, addonName) then\n\t\t\t\t\t\tAddMsg(self, \"The mod \" .. addonName .. \" is deprecated and will not be available. Please remove the folder \" .. addonName .. \" from your Interface\" .. (IsWindowsClient() and \"\\\\\" or \"/\") .. \"AddOns folder to get rid of this message. Check for an updated version of \" .. addonName .. \" that is compatible with your game version.\")\n\t\t\t\t\telse\n\t\t\t\t\t\tlocal loaded = LoadAddOn(addonName)\n\t\t\t\t\t\tself:Schedule(0.01, function()\n\t\t\t\t\t\t\tlocal voiceGlobal = GetAddOnMetadata(i, \"X-DBM-CountPack-GlobalName\")\n\t\t\t\t\t\t\tlocal insertFunction = _G[voiceGlobal]\n\t\t\t\t\t\t\tif loaded and insertFunction then\n\t\t\t\t\t\t\t\tinsertFunction()\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tself:Debug(addonName..\" failed to load at time CountPack function \"..voiceGlobal..\"ran\", 2)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tif GetAddOnMetadata(i, \"X-DBM-VictoryPack\") and enabled then\n\t\t\t\t\tif checkEntry(bannedMods, addonName) then\n\t\t\t\t\t\tAddMsg(self, \"The mod \" .. addonName .. \" is deprecated and will not be available. Please remove the folder \" .. addonName .. \" from your Interface\" .. (IsWindowsClient() and \"\\\\\" or \"/\") .. \"AddOns folder to get rid of this message. Check for an updated version of \" .. addonName .. \" that is compatible with your game version.\")\n\t\t\t\t\telse\n\t\t\t\t\t\tlocal loaded = LoadAddOn(addonName)\n\t\t\t\t\t\tself:Schedule(0.01, function()\n\t\t\t\t\t\t\tlocal victoryGlobal = GetAddOnMetadata(i, \"X-DBM-VictoryPack-GlobalName\")\n\t\t\t\t\t\t\tlocal insertFunction = _G[victoryGlobal]\n\t\t\t\t\t\t\tif loaded and insertFunction then\n\t\t\t\t\t\t\t\tinsertFunction()\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tself:Debug(addonName..\" failed to load at time VictoryPack function \"..victoryGlobal..\" ran\", 2)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tif GetAddOnMetadata(i, \"X-DBM-DefeatPack\") and enabled then\n\t\t\t\t\tif checkEntry(bannedMods, addonName) then\n\t\t\t\t\t\tAddMsg(self, \"The mod \" .. addonName .. \" is deprecated and will not be available. Please remove the folder \" .. addonName .. \" from your Interface\" .. (IsWindowsClient() and \"\\\\\" or \"/\") .. \"AddOns folder to get rid of this message. Check for an updated version of \" .. addonName .. \" that is compatible with your game version.\")\n\t\t\t\t\telse\n\t\t\t\t\t\tlocal loaded = LoadAddOn(addonName)\n\t\t\t\t\t\tself:Schedule(0.01, function()\n\t\t\t\t\t\t\tlocal defeatGlobal = GetAddOnMetadata(i, \"X-DBM-DefeatPack-GlobalName\")\n\t\t\t\t\t\t\tlocal insertFunction = _G[defeatGlobal]\n\t\t\t\t\t\t\tif loaded and insertFunction then\n\t\t\t\t\t\t\t\tinsertFunction()\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tself:Debug(addonName..\" failed to load at time DefeatPack function \"..defeatGlobal..\" ran\", 2)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tif GetAddOnMetadata(i, \"X-DBM-MusicPack\") and enabled then\n\t\t\t\t\tif checkEntry(bannedMods, addonName) then\n\t\t\t\t\t\tAddMsg(self, \"The mod \" .. addonName .. \" is deprecated and will not be available. Please remove the folder \" .. addonName .. \" from your Interface\" .. (IsWindowsClient() and \"\\\\\" or \"/\") .. \"AddOns folder to get rid of this message. Check for an updated version of \" .. addonName .. \" that is compatible with your game version.\")\n\t\t\t\t\telse\n\t\t\t\t\t\tlocal loaded = LoadAddOn(addonName)\n\t\t\t\t\t\tself:Schedule(0.01, function()\n\t\t\t\t\t\t\tlocal musicGlobal = GetAddOnMetadata(i, \"X-DBM-MusicPack-GlobalName\")\n\t\t\t\t\t\t\tlocal insertFunction = _G[musicGlobal]\n\t\t\t\t\t\t\tif loaded and insertFunction then\n\t\t\t\t\t\t\t\tinsertFunction()\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tself:Debug(addonName..\" failed to load at time MusicPack function \"..musicGlobal..\" ran\", 2)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\ttsort(self.AddOns, function(v1, v2) return v1.sort < v2.sort end)\n\t\t\tself:RegisterEvents(\n\t\t\t\t\"COMBAT_LOG_EVENT_UNFILTERED\",\n\t\t\t\t\"ZONE_CHANGED_NEW_AREA\",\n\t\t\t\t\"ZONE_CHANGED_INDOORS\",\n\t\t\t\t\"ZONE_CHANGED\",\n\t\t\t\t\"RAID_ROSTER_UPDATE\",\n\t\t\t\t\"PARTY_MEMBERS_CHANGED\",\n\t\t\t\t\"CHAT_MSG_ADDON\",\n\t\t\t\t\"PLAYER_REGEN_DISABLED\",\n\t\t\t\t\"PLAYER_REGEN_ENABLED\",\n\t\t\t\t\"INSTANCE_ENCOUNTER_ENGAGE_UNIT\",\n\t\t\t\t\"UNIT_DIED\",\n\t\t\t\t\"UNIT_DESTROYED\",\n\t\t\t\t\"UNIT_HEALTH mouseover target focus player\",\n\t\t\t\t\"CHAT_MSG_WHISPER\",\n\t\t\t\t\"CHAT_MSG_BN_WHISPER\",\n\t\t\t\t\"CHAT_MSG_MONSTER_YELL\",\n\t\t\t\t\"CHAT_MSG_MONSTER_EMOTE\",\n\t\t\t\t\"CHAT_MSG_MONSTER_SAY\",\n\t\t\t\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\t\t\t\"CHAT_MSG_RAID_BOSS_WHISPER\",\n\t\t\t\t\"PLAYER_ENTERING_WORLD\",\n\t\t\t\t\"SPELL_CAST_SUCCESS\",\n\t\t\t\t\"LFG_PROPOSAL_SHOW\",\n\t\t\t\t\"LFG_PROPOSAL_FAILED\",\n\t\t\t\t\"READY_CHECK\",\n\t\t\t\t\"UPDATE_BATTLEFIELD_STATUS\",\n\t\t\t\t\"PLAY_MOVIE\",\n\t\t\t\t\"CINEMATIC_START\",\n\t\t\t\t\"CINEMATIC_STOP\",\n\t\t\t\t\"PARTY_INVITE_REQUEST\",\n\t\t\t\t\"LFG_PROPOSAL_SUCCEEDED\",\n\t\t\t\t\"LFG_UPDATE\",\n\t\t\t\t\"CHARACTER_POINTS_CHANGED\",\n\t\t\t\t\"PLAYER_TALENT_UPDATE\"\n\t\t\t)\n\t\t\tself:ZONE_CHANGED_NEW_AREA()\n\t\t\tself:RAID_ROSTER_UPDATE()\n\t\t\tself:Schedule(1.5, function()\n\t\t\t\tcombatInitialized = true\n\t\t\tend)\n\t\t\tself:Schedule(20, function()\n\t\t\t\thealthCombatInitialized = true\n\t\t\tend)\n\t\t\tself:Schedule(10, runDelayedFunctions, self)\n\t\t\tif DBM and TT then\n\t\t\t\tTT:Initialize(true)\n\t\t\tend\n\t\tend\n\tend\nend\n\n-----------------\n--  Callbacks  --\n-----------------\ndo\n\tlocal callbacks = {}\n\n\tfunction fireEvent(event, ...)\n\t\tif not callbacks[event] then return end\n\t\tfor _, v in ipairs(callbacks[event]) do\n\t\t\tlocal ok, err = pcall(v, event, ...)\n\t\t\tif not ok then DBM:AddMsg((\"Error while executing callback %s for event %s: %s\"):format(tostring(v), tostring(event), err)) end\n\t\tend\n\tend\n\n\tfunction DBM:FireEvent(event, ...)\n\t\tfireEvent(event, ...)\n\tend\n\n\tfunction DBM:IsCallbackRegistered(event, f)\n\t\tif not event or type(f) ~= \"function\" then\n\t\t\terror(\"Usage: IsCallbackRegistered(event, callbackFunc)\", 2)\n\t\tend\n\t\tif not callbacks[event] then return end\n\t\tfor i = 1, #callbacks[event] do\n\t\t\tif callbacks[event][i] == f then return true end\n\t\tend\n\t\treturn false\n\tend\n\n\tfunction DBM:RegisterCallback(event, f)\n\t\tif not event or type(f) ~= \"function\" then\n\t\t\terror(\"Usage: DBM:RegisterCallback(event, callbackFunc)\", 2)\n\t\tend\n\t\tcallbacks[event] = callbacks[event] or {}\n\t\ttinsert(callbacks[event], f)\n\t\treturn #callbacks[event]\n\tend\n\n\tfunction DBM:UnregisterCallback(event, f)\n\t\tif not event or not callbacks[event] then return end\n\t\tif f then\n\t\t\tif type(f) ~= \"function\" then\n\t\t\t\terror(\"Usage: UnregisterCallback(event, callbackFunc)\", 2)\n\t\t\tend\n\t\t\t--> checking from the end to start and not stoping after found one result in case of a func being twice registered.\n\t\t\tfor i = #callbacks[event], 1, -1 do\n\t\t\t\tif callbacks[event][i] == f then tremove (callbacks[event], i) end\n\t\t\tend\n\t\telse\n\t\t\tcallbacks[event] = nil\n\t\tend\n\tend\nend\n\n--------------------------\n--  OnUpdate/Scheduler  --\n--------------------------\nlocal DBMScheduler = private:GetModule(\"DBMScheduler\")\n\nfunction DBM:Schedule(t, f, ...)\n\treturn DBMScheduler:Schedule(t, f, nil, ...)\nend\n\nfunction DBM:Unschedule(f, ...)\n\treturn DBMScheduler:Unschedule(f, nil, ...)\nend\n\n---------------\n--  Profile  --\n---------------\nfunction DBM:CreateProfile(name)\n\tif not name or name == \"\" or name:find(\" \") then\n\t\tself:AddMsg(L.PROFILE_CREATE_ERROR)\n\t\treturn\n\tend\n\tif DBM_AllSavedOptions[name] then\n\t\tself:AddMsg(L.PROFILE_CREATE_ERROR_D:format(name))\n\t\treturn\n\tend\n\t-- create profile\n\tusedProfile = name\n\tDBM_UsedProfile = usedProfile\n\tDBM_AllSavedOptions[usedProfile] = DBM_AllSavedOptions[usedProfile] or {}\n\tself:AddDefaultOptions(DBM_AllSavedOptions[usedProfile], self.DefaultOptions)\n\tself.Options = DBM_AllSavedOptions[usedProfile]\n\t-- rearrange position\n\tDBT:CreateProfile(\"DBM\")\n\tself:RepositionFrames()\n\tself:AddMsg(L.PROFILE_CREATED:format(name))\nend\n\nfunction DBM:ApplyProfile(name)\n\tif not name or not DBM_AllSavedOptions[name] then\n\t\tself:AddMsg(L.PROFILE_APPLY_ERROR:format(name or CL.UNKNOWN))\n\t\treturn\n\tend\n\tusedProfile = name\n\tDBM_UsedProfile = usedProfile\n\tself:AddDefaultOptions(DBM_AllSavedOptions[usedProfile], self.DefaultOptions)\n\tself.Options = DBM_AllSavedOptions[usedProfile]\n\t-- rearrange position\n\tDBT:ApplyProfile(\"DBM\")\n\tself:RepositionFrames()\n\tself:AddMsg(L.PROFILE_APPLIED:format(name))\nend\n\nfunction DBM:CopyProfile(name)\n\tif not name or not DBM_AllSavedOptions[name] then\n\t\tself:AddMsg(L.PROFILE_COPY_ERROR:format(name or CL.UNKNOWN))\n\t\treturn\n\telseif name == usedProfile then\n\t\tself:AddMsg(L.PROFILE_COPY_ERROR_SELF)\n\t\treturn\n\tend\n\tDBM_AllSavedOptions[usedProfile] = DBM_AllSavedOptions[name]\n\tself:AddDefaultOptions(DBM_AllSavedOptions[usedProfile], self.DefaultOptions)\n\tself.Options = DBM_AllSavedOptions[usedProfile]\n\t-- rearrange position\n\tDBT:CopyProfile(name, \"DBM\", true)\n\tself:RepositionFrames()\n\tself:AddMsg(L.PROFILE_COPIED:format(name))\nend\n\nfunction DBM:DeleteProfile(name)\n\tif not name or not DBM_AllSavedOptions[name] then\n\t\tself:AddMsg(L.PROFILE_DELETE_ERROR:format(name or CL.UNKNOWN))\n\t\treturn\n\telseif name == \"Default\" then-- Default profile cannot be deleted.\n\t\tself:AddMsg(L.PROFILE_CANNOT_DELETE)\n\t\treturn\n\tend\n\t--Delete\n\tDBM_AllSavedOptions[name] = nil\n\tusedProfile = \"Default\"--Restore to default\n\tDBM_UsedProfile = usedProfile\n\tself.Options = DBM_AllSavedOptions[usedProfile]\n\tif not self.Options then\n\t\t-- the default profile got lost somehow (maybe WoW crashed and the saved variables file got corrupted)\n\t\tself:CreateProfile(\"Default\")\n\tend\n\t-- rearrange position\n\tDBT:DeleteProfile(name, \"DBM\")\n\tself:RepositionFrames()\n\tself:AddMsg(L.PROFILE_DELETED:format(name))\nend\n\nfunction DBM:RepositionFrames()\n\t-- rearrange position\n\tself:UpdateWarningOptions()\n\tself:UpdateSpecialWarningOptions()\n\tself.Arrow:LoadPosition()\n\tlocal rangeCheck = _G[\"DBMRangeCheck\"]\n\tif rangeCheck then\n\t\trangeCheck:ClearAllPoints()\n\t\trangeCheck:SetPoint(self.Options.RangeFramePoint, UIParent, self.Options.RangeFramePoint, self.Options.RangeFrameX, self.Options.RangeFrameY)\n\tend\n\tlocal rangeCheckRadar = _G[\"DBMRangeCheckRadar\"]\n\tif rangeCheckRadar then\n\t\trangeCheckRadar:ClearAllPoints()\n\t\trangeCheckRadar:SetPoint(self.Options.RangeFrameRadarPoint, UIParent, self.Options.RangeFrameRadarPoint, self.Options.RangeFrameRadarX, self.Options.RangeFrameRadarY)\n\tend\n\tlocal infoFrame = _G[\"DBMInfoFrame\"]\n\tif infoFrame then\n\t\tinfoFrame:ClearAllPoints()\n\t\tinfoFrame:SetPoint(self.Options.InfoFramePoint, UIParent, self.Options.InfoFramePoint, self.Options.InfoFrameX, self.Options.InfoFrameY)\n\tend\nend\n\n----------------------\n--  Slash Commands  --\n----------------------\n\ndo\n\tlocal function Sort(v1, v2)\n\t\tif v1.revision and not v2.revision then\n\t\t\treturn true\n\t\telseif v2.revision and not v1.revision then\n\t\t\treturn false\n\t\telseif v1.revision and v2.revision then\n\t\t\treturn v1.revision > v2.revision\n\t\telse\n\t\t\treturn (v1.bwversion or 0) > (v2.bwversion or 0)\n\t\tend\n\tend\n\n\tfunction DBM:ShowVersions(notify)\n\t\tlocal sortMe, outdatedUsers = {}, {}\n\t\tfor _, v in pairs(raid) do\n\t\t\ttinsert(sortMe, v)\n\t\tend\n\t\ttsort(sortMe, Sort)\n\t\tself:AddMsg(L.VERSIONCHECK_HEADER)\n\t\tlocal nreq = 1\n\t\tfor _, v in ipairs(sortMe) do\n\t\t\tlocal name = v.name\n\t\t\tlocal playerColor = RAID_CLASS_COLORS[DBM:GetRaidClass(name)]\n\t\t\tif playerColor then\n\t\t\t\tname = (\"|r|cff%.2x%.2x%.2x%s|r|cff%.2x%.2x%.2x\"):format(playerColor.r * 255, playerColor.g * 255, playerColor.b * 255, name, 0.41 * 255, 0.8 * 255, 0.94 * 255)\n\t\t\tend\n\t\t\tif v.displayVersion and not v.bwversion then--DBM, no BigWigs\n\t\t\t\tif self.Options.ShowAllVersions then\n\t\t\t\t\tself:AddMsg(L.VERSIONCHECK_ENTRY:format(name, L.DBM..\" \"..v.displayVersion, showRealDate(v.revision), v.VPVersion or \"\"), false)--Only display VP version if not running two mods\n\t\t\t\tend\n\t\t\t\tif notify and v.revision < self.ReleaseRevision then\n\t\t\t\t\tDBM:Schedule(nreq*10, SendChatMessage, chatPrefixShort..L.YOUR_VERSION_OUTDATED, \"WHISPER\", nil, v.name)\n\t\t\t\t\tnreq = nreq + 1\n\t\t\t\tend\n\t\t\telseif self.Options.ShowAllVersions and v.displayVersion and v.bwversion then--DBM & BigWigs\n\t\t\t\tself:AddMsg(L.VERSIONCHECK_ENTRY_TWO:format(name, L.DBM..\" \"..v.displayVersion, showRealDate(v.revision), L.BIG_WIGS, bwVersionResponseString:format(v.bwversion)), false)\n\t\t\telseif self.Options.ShowAllVersions and not v.displayVersion and v.bwversion then--BigWigs, No DBM\n\t\t\t\tself:AddMsg(L.VERSIONCHECK_ENTRY:format(name, L.BIG_WIGS, bwVersionResponseString:format(v.bwversion), \"\"), false)\n\t\t\telse\n\t\t\t\tif self.Options.ShowAllVersions then\n\t\t\t\t\tself:AddMsg(L.VERSIONCHECK_ENTRY_NO_DBM:format(name), false)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tlocal NoDBM = 0\n\t\tlocal NoBigwigs = 0\n\t\tlocal OldMod = 0\n\t\tfor i = #sortMe, 1, -1 do\n\t\t\tif not sortMe[i].revision then\n\t\t\t\tNoDBM = NoDBM + 1\n\t\t\tend\n\t\t\tif not (sortMe[i].bwversion) then\n\t\t\t\tNoBigwigs = NoBigwigs + 1\n\t\t\tend\n\t\t\t--Table sorting sorts dbm to top, bigwigs underneath. Highest version dbm always at top. so sortMe[1]\n\t\t\t--This check compares all dbm version to highest RELEASE version in raid.\n\t\t\tif sortMe[i].revision and (sortMe[i].revision < sortMe[1].version) or sortMe[i].bwversion and (sortMe[i].bwversion < fakeBWVersion) then\n\t\t\t\tOldMod = OldMod + 1\n\t\t\t\tlocal name = sortMe[i].name\n\t\t\t\tlocal playerColor = RAID_CLASS_COLORS[DBM:GetRaidClass(name)]\n\t\t\t\tif playerColor then\n\t\t\t\t\tname = (\"|r|cff%.2x%.2x%.2x%s|r|cff%.2x%.2x%.2x\"):format(playerColor.r * 255, playerColor.g * 255, playerColor.b * 255, name, 0.41 * 255, 0.8 * 255, 0.94 * 255)\n\t\t\t\tend\n\t\t\t\ttinsert(outdatedUsers, name)\n\t\t\tend\n\t\tend\n\t\tlocal TotalUsers = #sortMe\n\t\tself:AddMsg(\"---\", false)\n\t\tself:AddMsg(L.VERSIONCHECK_FOOTER:format(TotalUsers - NoDBM, TotalUsers - NoBigwigs), false)\n\t\tself:AddMsg(L.VERSIONCHECK_OUTDATED:format(OldMod, #outdatedUsers > 0 and tconcat(outdatedUsers, \", \") or NONE), false)\n\tend\nend\n\n-------------------\n--  Pizza Timer  --\n-------------------\ndo\n\n\tlocal function loopTimer(time, text, broadcast, sender)\n\t\tDBM:CreatePizzaTimer(time, text, broadcast, sender, true)\n\tend\n\n\tlocal ignore = {}\n\t--Standard Pizza Timer\n\tfunction DBM:CreatePizzaTimer(time, text, broadcast, sender, loop, terminate)\n\t\tif terminate or time == 0 then\n\t\t\tself:Unschedule(loopTimer)\n\t\t\tDBT:CancelBar(text)\n\t\t\tfireEvent(\"DBM_TimerStop\", \"DBMPizzaTimer\")\n\t\t\treturn\n\t\tend\n\t\tif sender and ignore[sender] then return end\n--\t\ttext = text:sub(1, 16) -- I don't see any point in limiting text to 16 char string\n\t\ttext = text:gsub(\"%%t\", UnitName(\"target\") or \"<no target>\")\n\t\tif time < 3 then\n\t\t\tself:AddMsg(L.PIZZA_ERROR_USAGE)\n\t\t\treturn\n\t\tend\n\t\tDBT:CreateBar(time, text, \"Interface\\\\Icons\\\\SPELL_HOLY_BORROWEDTIME\")\n\t\tfireEvent(\"DBM_TimerBegin\", \"DBMPizzaTimer\", text, time, \"Interface\\\\Icons\\\\SPELL_HOLY_BORROWEDTIME\", \"pizzatimer\", nil, 0, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, true)\n\t\tfireEvent(\"DBM_TimerStart\", \"DBMPizzaTimer\", text, time, \"Interface\\\\Icons\\\\SPELL_HOLY_BORROWEDTIME\", \"pizzatimer\", nil, 0)\n\t\tif broadcast and self:GetRaidRank() >= 1 then\n\t\t\tsendSync(\"DBMv4-Pizza\", (\"%s\\t%s\"):format(time, text))\n\t\tend\n\t\tif sender then self:ShowPizzaInfo(text, sender) end\n\t\tif loop then\n\t\t\tself:Unschedule(loopTimer)--Only one loop timer supported at once doing this, but much cleaner this way\n\t\t\tself:Schedule(time, loopTimer, time, text, broadcast, sender)\n\t\tend\n\tend\n\n\tfunction DBM:AddToPizzaIgnore(name)\n\t\tignore[name] = true\n\tend\nend\n\nfunction DBM:ShowPizzaInfo(id, sender)\n\tif self.Options.ShowPizzaMessage then\n\t\tself:AddMsg(L.PIZZA_SYNC_INFO:format(sender, id))\n\tend\nend\n\n-----------------\n--  GUI Stuff  --\n-----------------\ndo\n\tlocal callOnLoad = {}\n\tfunction DBM:LoadGUI()\n\t\tif not dbmIsEnabled then\n\t\t\tself:ForceDisableSpam()\n\t\t\treturn\n\t\tend\n\t\tif self.NewerVersion and showConstantReminder >= 1 then\n\t\t\tAddMsg(self, L.UPDATEREMINDER_HEADER:format(self.NewerVersion, showRealDate(self.HighestRelease)))\n\t\tend\n\t\tlocal firstLoad = false\n\t\tif not IsAddOnLoaded(\"DBM-GUI\") then\n\t\t\tlocal _, _, _, enabled = GetAddOnInfo(\"DBM-GUI\")\n\t\t\tif not enabled then\n\t\t\t\tEnableAddOn(\"DBM-GUI\")\n\t\t\tend\n\t\t\tlocal loaded, reason = LoadAddOn(\"DBM-GUI\")\n\t\t\tif not loaded then\n\t\t\t\tif reason then\n\t\t\t\t\tself:AddMsg(L.LOAD_GUI_ERROR:format(tostring(_G[\"ADDON_\"..reason or \"\"])))\n\t\t\t\telse\n\t\t\t\t\tself:AddMsg(L.LOAD_GUI_ERROR:format(CL.UNKNOWN))\n\t\t\t\tend\n\t\t\t\treturn false\n\t\t\tend\n\t\t\tif not InCombatLockdown() and not UnitAffectingCombat(\"player\") and not IsFalling() then--We loaded in combat but still need to avoid garbage collect in combat\n\t\t\t\tcollectgarbage(\"collect\")\n\t\t\tend\n\t\t\tfirstLoad = true\n\t\tend\n\t\tDBM_GUI:ShowHide()\n\t\tif firstLoad then\n\t\t\ttsort(callOnLoad, function(v1, v2) return v1[2] < v2[2] end)\n\t\t\tfor _, v in ipairs(callOnLoad) do v[1]() end\n\t\tend\n\tend\n\n\tfunction DBM:RegisterOnGuiLoadCallback(f, sort)\n\t\ttinsert(callOnLoad, {f, sort or mhuge})\n\tend\nend\n\n-------------------------------------------------\n--  Raid/Party Handling and Unit ID Utilities  --\n-------------------------------------------------\ndo\n\tlocal bwVersionQueryString = \"%d\"--Only used here\n\tlocal inRaid = false\n\n\tlocal raidGuids = {}\n\tlocal iconSeter = {}\n\n\t--\tsave playerinfo into raid table on load. (for solo raid)\n\tDBM:RegisterOnLoadCallback(function()\n\t\tAceTimer:ScheduleTimer(function()\n\t\t\tif not raid[playerName] then\n\t\t\t\traid[playerName] = {}\n\t\t\t\traid[playerName].name = playerName\n\t\t\t\traid[playerName].shortname = playerName\n\t\t\t\traid[playerName].guid = UnitGUID(\"player\") or \"\"\n\t\t\t\traid[playerName].rank = 0\n\t\t\t\traid[playerName].class = playerClass\n\t\t\t\traid[playerName].id = \"player\"\n\t\t\t\traid[playerName].groupId = 0\n\t\t\t\traid[playerName].revision = DBM.Revision\n\t\t\t\traid[playerName].version = DBM.ReleaseRevision\n\t\t\t\traid[playerName].displayVersion = DBM.DisplayVersion\n\t\t\t\traid[playerName].locale = GetLocale()\n\t\t\t\traid[playerName].enabledIcons = tostring(not DBM.Options.DontSetIcons)\n\t\t\t\traidGuids[UnitGUID(\"player\") or \"\"] = playerName\n\t\t\tend\n\t\tend, 6)\n\tend)\n\n\tlocal function updateAllRoster(self)\n\t\tDBM:Debug(\"Updating roster\", 3)\n\t\tif GetNumRaidMembers() >= 1 then\n\t\t\tif not inRaid then\n\t\t\t\ttwipe(newerVersionPerson)--Wipe guild syncs on group join so we trigger a new out of date notice on raid join even if one triggered on login\n\t\t\t\tinRaid = true\n\t\t\t\tsendSync(\"DBMv4-Ver\", \"Hi!\")\n\t\t\t\tif dbmIsEnabled then\n\t\t\t\t\tSendAddonMessage(\"BWVQ3\", bwVersionQueryString:format(0), \"RAID\")\n\t\t\t\tend\n\t\t\t\tself:Schedule(2, DBM.RequestTimers, DBM)\n\t\t\t\tfireEvent(\"raidJoin\", playerName) -- backwards compatibility\n\t\t\t\tfireEvent(\"DBM_raidJoin\", playerName)\n\t\t\t\tlocal bigWigs = _G[\"BigWigs\"]\n\t\t\t\tif bigWigs and bigWigs.db.profile.raidicon and not self.Options.DontSetIcons and self:GetRaidRank() > 0 then--Both DBM and bigwigs have raid icon marking turned on.\n\t\t\t\t\tself:AddMsg(L.BIGWIGS_ICON_CONFLICT)--Warn that one of them should be turned off to prevent conflict (which they turn off is obviously up to raid leaders preference, dbm accepts either or turned off to stop this alert)\n\t\t\t\tend\n\t\t\tend\n\t\t\tfor i = 1, GetNumRaidMembers() do\n\t\t\t\tlocal name, rank, subgroup, _, _, className = GetRaidRosterInfo(i)\n\t\t\t\tif name and name ~= UNKNOWN then\n\t\t\t\t\tlocal id = \"raid\" .. i\n\t\t\t\t\tlocal shortname = UnitName(id)\n\t\t\t\t\tif (not raid[name]) and inRaid then\n\t\t\t\t\t\tfireEvent(\"raidJoin\", name) -- backwards compatibility\n\t\t\t\t\t\tfireEvent(\"DBM_raidJoin\", name)\n\t\t\t\t\tend\n\t\t\t\t\traid[name] = raid[name] or {}\n\t\t\t\t\traid[name].name = name\n\t\t\t\t\traid[name].shortname = shortname\n\t\t\t\t\traid[name].rank = rank\n\t\t\t\t\traid[name].subgroup = subgroup\n\t\t\t\t\traid[name].class = className\n\t\t\t\t\traid[name].id = id\n\t\t\t\t\traid[name].groupId = i\n\t\t\t\t\traid[name].guid = UnitGUID(id) or \"\"\n\t\t\t\t\traid[name].updated = true\n\t\t\t\t\traidGuids[UnitGUID(id) or \"\"] = name\n\t\t\t\t\tif rank == 2 then\n\t\t\t\t\t\tlastGroupLeader = name\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tprivate.enableIcons = false\n\t\t\ttwipe(iconSeter)\n\t\t\tfor i, v in pairs(raid) do\n\t\t\t\tif not v.updated then\n\t\t\t\t\traidGuids[v.guid] = nil\n\t\t\t\t\traid[i] = nil\n\t\t\t\t\tremoveEntry(newerVersionPerson, i)\n\t\t\t\t\tfireEvent(\"raidLeave\", i) -- backwards compatibility\n\t\t\t\t\tfireEvent(\"DBM_raidLeave\", i)\n\t\t\t\telse\n\t\t\t\t\tv.updated = nil\n\t\t\t\t\tif v.revision and v.rank > 0 and (v.enabledIcons or \"\") == \"true\" then\n\t\t\t\t\t\ticonSeter[#iconSeter + 1] = v.revision..\" \"..v.name\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tif #iconSeter > 0 then\n\t\t\t\ttsort(iconSeter, function(a, b) return a > b end)\n\t\t\t\tlocal elected = iconSeter[1]\n\t\t\t\tif playerName == elected:sub(elected:find(\" \") + 1) then--Highest revision in raid, auto allow, period, even if out of date, you're revision in raid that has assist\n\t\t\t\t\tprivate.enableIcons = true\n\t\t\t\t\tDBM:Debug(\"You have been elected as primary icon setter for raid for having newest revision in raid that has assist/lead\", 2)\n\t\t\t\tend\n\t\t\t\t--Initiate backups that at least have latest version, in case the main elect doesn't have icons enabled\n\t\t\t\tfor i = 2, 3 do--Allow top 3 revisions in raid to set icons, instead of just top one\n\t\t\t\t\tlocal electedBackup = iconSeter[i]\n\t\t\t\t\tif updateNotificationDisplayed == 0 and electedBackup and playerName == electedBackup:sub(elected:find(\" \") + 1) then\n\t\t\t\t\t\tprivate.enableIcons = true\n\t\t\t\t\t\tDBM:Debug(\"You have been elected as one of 2 backup icon setters in raid that have assist/lead\", 2)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\telseif IsInGroup() then\n\t\t\tif not inRaid then\n\t\t\t\t-- joined a new party\n\t\t\t\ttwipe(newerVersionPerson)--Wipe guild syncs on group join so we trigger a new out of date notice on raid join even if one triggered on login\n\t\t\t\tinRaid = true\n\t\t\t\tsendSync(\"DBMv4-Ver\", \"Hi!\")\n\t\t\t\tif dbmIsEnabled then\n\t\t\t\t\tSendAddonMessage(\"BWVQ3\", bwVersionQueryString:format(0), \"PARTY\")\n\t\t\t\tend\n\t\t\t\tfireEvent(\"partyJoin\", playerName) -- backwards compatibility\n\t\t\t\tfireEvent(\"DBM_partyJoin\", playerName)\n\t\t\tend\n\t\t\tfor i = 0, GetNumPartyMembers() do\n\t\t\t\tlocal id\n\t\t\t\tif (i == 0) then\n\t\t\t\t\tid = \"player\"\n\t\t\t\telse\n\t\t\t\t\tid = \"party\"..i\n\t\t\t\tend\n\t\t\t\tlocal name = GetUnitName(id, true)\n\t\t\t\tlocal shortname = UnitName(id)\n\t\t\t\tlocal rank = UnitIsPartyLeader(id) and 2 or 0\n\t\t\t\tlocal _, className = UnitClass(id)\n\t\t\t\tif (not raid[name]) and inRaid then\n\t\t\t\t\tfireEvent(\"partyJoin\", name) -- backwards compatibility\n\t\t\t\t\tfireEvent(\"DBM_partyJoin\", name)\n\t\t\t\tend\n\t\t\t\traid[name] = raid[name] or {}\n\t\t\t\traid[name].name = name\n\t\t\t\traid[name].shortname = shortname\n\t\t\t\traid[name].guid = UnitGUID(id) or \"\"\n\t\t\t\traid[name].rank = rank\n\t\t\t\traid[name].class = className\n\t\t\t\traid[name].id = id\n\t\t\t\traid[name].groupId = i\n\t\t\t\traid[name].updated = true\n\t\t\t\traidGuids[UnitGUID(id) or \"\"] = name\n\t\t\t\tif rank >= 1 then\n\t\t\t\t\tlastGroupLeader = name\n\t\t\t\tend\n\t\t\tend\n\t\t\tprivate.enableIcons = false\n\t\t\ttwipe(iconSeter)\n\t\t\tfor k, v in pairs(raid) do\n\t\t\t\tif not v.updated then\n\t\t\t\t\traidGuids[v.guid] = nil\n\t\t\t\t\traid[k] = nil\n\t\t\t\t\tremoveEntry(newerVersionPerson, k)\n\t\t\t\t\tfireEvent(\"partyLeave\", k) -- backwards compatibility\n\t\t\t\t\tfireEvent(\"DBM_partyLeave\", k)\n\t\t\t\telse\n\t\t\t\t\tv.updated = nil\n\t\t\t\t\tif v.revision and v.rank > 0 and (v.enabledIcons or \"\") == \"true\" then\n\t\t\t\t\t\ticonSeter[#iconSeter + 1] = v.revision..\" \"..v.name\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tif #iconSeter > 0 then\n\t\t\t\ttsort(iconSeter, function(a, b) return a > b end)\n\t\t\t\tlocal elected = iconSeter[1]\n\t\t\t\tif playerName == elected:sub(elected:find(\" \") + 1) then\n\t\t\t\t\tprivate.enableIcons = true\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\t-- left the current group/raid\n\t\t\tinRaid = false\n\t\t\tprivate.enableIcons = true\n\t\t\tfireEvent(\"raidLeave\", playerName) -- backwards compatibility\n\t\t\tfireEvent(\"DBM_raidLeave\", playerName)\n\t\t\ttwipe(raid)\n\t\t\ttwipe(newerVersionPerson)\n\t\t\t-- restore playerinfo into raid table on raidleave. (for solo raid)\n\t\t\traid[playerName] = {}\n\t\t\traid[playerName].name = playerName\n\t\t\traid[playerName].shortname = playerName\n\t\t\traid[playerName].guid = UnitGUID(\"player\") or \"\" -- 2023/04/20: On Warmane, UnitGUID(\"player\") can be nil\n\t\t\traid[playerName].rank = 0\n\t\t\traid[playerName].class = playerClass\n\t\t\traid[playerName].id = \"player\"\n\t\t\traid[playerName].groupId = 0\n\t\t\traid[playerName].revision = DBM.Revision\n\t\t\traid[playerName].version = DBM.ReleaseRevision\n\t\t\traid[playerName].displayVersion = DBM.DisplayVersion\n\t\t\traid[playerName].locale = GetLocale()\n\t\t\traidGuids[UnitGUID(\"player\") or \"\"] = playerName\n\t\t\tlastGroupLeader = nil\n\t\tend\n\tend\n\n\tfunction DBM:RAID_ROSTER_UPDATE(force)\n\t\tself:Unschedule(updateAllRoster)\n\t\tif force then\n\t\t\tupdateAllRoster(self)\n\t\telse\n\t\t\tself:Schedule(1.5, updateAllRoster, self)\n\t\tend\n\tend\n\n\tfunction DBM:PARTY_MEMBERS_CHANGED(force)\n\t\tself:Unschedule(updateAllRoster)\n\t\tif force then\n\t\t\tupdateAllRoster(self)\n\t\telse\n\t\t\tself:Schedule(1.5, updateAllRoster, self)\n\t\tend\n\tend\n\n\tfunction DBM:GetNumGuildPlayersInZone() -- Classic/BCC only\n\t\tif not IsInGroup() then return 1 end\n\t\tlocal total = 0\n\t\tlocal myGuild = GetGuildInfo(\"player\")\n\t\tif IsInRaid() then\n\t\t\tfor i = 1, GetNumGroupMembers() do\n\t\t\t\tlocal unitGuild = GetGuildInfo(\"raid\"..i)--This api only works if unit is nearby, so don't even need to check location\n\t\t\t\tif unitGuild and unitGuild == myGuild then\n\t\t\t\t\ttotal = total + 1\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\ttotal = 1--add player/self for \"party\" count\n\t\t\tfor i = 1, GetNumSubgroupMembers() do\n\t\t\t\tlocal unitGuild = GetGuildInfo(\"party\"..i)--This api only works if unit is nearby, so don't even need to check location\n\t\t\t\tif unitGuild and unitGuild == myGuild then\n\t\t\t\t\ttotal = total + 1\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\treturn total\n\tend\n\n\tfunction DBM:GetRaidRank(name)\n\t\tname = name or playerName\n\t\tif name == playerName then--If name is player, try to get actual rank. Because raid[name].rank sometimes seems returning 0 even player is promoted.\n\t\t\treturn UnitIsPartyLeader(\"player\") and 2 or UnitIsRaidOfficer(\"player\") and 1 or 0\n\t\telse\n\t\t\treturn (raid[name] and raid[name].rank) or 0\n\t\tend\n\tend\n\n\tfunction DBM:GetRaidSubgroup(name)\n\t\treturn (raid[name] and raid[name].subgroup) or 0\n\tend\n\n\tfunction DBM:GetRaidRoster(name)\n\t\tif name then\n\t\t\treturn raid[name] ~= nil\n\t\tend\n\t\treturn raid\n\tend\n\n\tfunction DBM:GetRaidClass(name)\n\t\tif raid[name] then\n\t\t\treturn raid[name].class or \"UNKNOWN\", raid[name].id and GetRaidTargetIndex(raid[name].id) or 0\n\t\telse\n\t\t\treturn \"UNKNOWN\", 0\n\t\tend\n\tend\n\n\tfunction DBM:GetRaidUnitId(name)\n\t\tfor i = 1, 5 do\n\t\t\tlocal unitId = \"boss\"..i\n\t\t\tlocal bossName = UnitName(unitId)\n\t\t\tif bossName and bossName == name then\n\t\t\t\treturn unitId\n\t\t\tend\n\t\tend\n\t\treturn raid[name] and raid[name].id\n\tend\n\n\tlocal fullUids = {\n\t\t\"boss1\", \"boss2\", \"boss3\", \"boss4\", \"boss5\",\n\t\t\"mouseover\", \"target\", \"focus\", \"focustarget\", \"targettarget\", \"mouseovertarget\",\n\t\t\"party1target\", \"party2target\", \"party3target\", \"party4target\",\n\t\t\"raid1target\", \"raid2target\", \"raid3target\", \"raid4target\", \"raid5target\", \"raid6target\", \"raid7target\", \"raid8target\", \"raid9target\", \"raid10target\",\n\t\t\"raid11target\", \"raid12target\", \"raid13target\", \"raid14target\", \"raid15target\", \"raid16target\", \"raid17target\", \"raid18target\", \"raid19target\", \"raid20target\",\n\t\t\"raid21target\", \"raid22target\", \"raid23target\", \"raid24target\", \"raid25target\", \"raid26target\", \"raid27target\", \"raid28target\", \"raid29target\", \"raid30target\",\n\t\t\"raid31target\", \"raid32target\", \"raid33target\", \"raid34target\", \"raid35target\", \"raid36target\", \"raid37target\", \"raid38target\", \"raid39target\", \"raid40target\"\n\t}\n\n\tlocal bossTargetuIds = {\n\t\t\"boss1\", \"boss2\", \"boss3\", \"boss4\", \"boss5\", \"focus\", \"target\", \"mouseover\"\n\t}\n\n\t--Not to be confused with GetUnitIdFromCID\n\tfunction DBM:GetUnitIdFromGUID(guid, scanOnlyBoss)\n\t\tlocal usedTable = scanOnlyBoss and bossTargetuIds or fullUids\n\t\tfor _, unitId in ipairs(usedTable) do\n\t\t\tlocal guid2 = UnitGUID(unitId)\n\t\t\tif guid == guid2 then\n\t\t\t\treturn unitId\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction DBM:GetPlayerGUIDByName(name)\n\t\treturn raid[name] and raid[name].guid\n\tend\n\n\tfunction DBM:GetMyPlayerInfo()\n\t\treturn playerName, playerLevel, playerRealm\n\tend\n\n\t--Intentionally grabs server name at all times, usually to make sure warning/infoframe target info can name match the combat log in the table\n\tfunction DBM:GetUnitFullName(uId)\n\t\tif not uId then return end\n\t\treturn GetUnitName(uId, true)\n\tend\n\n\t--Shortens name but custom so we add * to off realmers instead of stripping it entirely like Ambiguate does\n\t--Technically GetUnitName without \"true\" can be used to shorten name to \"name (*)\" but \"name*\" is even shorter which is why we do this\n\tfunction DBM:GetShortServerName(name)\n\t\tif not self.Options.StripServerName then return name end--If strip is disabled, just return name\n\t\tlocal shortName, serverName = string.split(\"-\", name)\n\t\tif serverName and serverName ~= playerRealm then\n\t\t\treturn shortName..\"*\"\n\t\telse\n\t\t\treturn name\n\t\tend\n\tend\n\n\tfunction DBM:GetFullPlayerNameByGUID(guid)\n\t\treturn raidGuids[guid]\n\tend\n\n\tfunction DBM:GetPlayerNameByGUID(guid)\n\t\treturn raidGuids[guid] and raidGuids[guid]:gsub(\"%-.*$\", \"\")\n\tend\n\n\tfunction DBM:GetGroupId(name, higher)\n\t\tlocal raidMember = raid[name] or raid[GetUnitName(name, true) or \"\"]\n\t\treturn raidMember and raidMember.groupId or UnitInRaid(name) or higher and 99 or 0\n\tend\nend\n\ndo\n\t-- yes, we still do avoid memory allocations during fights; so we don't use a closure around a counter here\n\t-- this seems to be the easiest way to write an iterator that returns the unit id *string* as first argument without a memory allocation\n\tlocal function raidIterator(groupMembers, uId)\n\t\tlocal a, b = uId:byte(-2, -1)\n\t\tlocal i = (a >= 0x30 and a <= 0x39 and (a - 0x30) * 10 or 0) + b - 0x30\n\t\tif i < groupMembers then\n\t\t\treturn \"raid\" .. i + 1, i + 1\n\t\tend\n\tend\n\n\tlocal function partyIterator(groupMembers, uId)\n\t\tif not uId then\n\t\t\treturn \"player\", 0\n\t\telseif uId == \"player\" then\n\t\t\tif groupMembers > 0 then\n\t\t\t\treturn \"party1\", 1\n\t\t\tend\n\t\telse\n\t\t\tlocal i = uId:byte(-1) - 0x30\n\t\t\tif i < groupMembers then\n\t\t\t\treturn \"party\" .. i + 1, i + 1\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal function soloIterator(_, state)\n\t\tif not state then -- no state == first call\n\t\t\treturn \"player\", 0\n\t\tend\n\tend\n\n\t-- returns the unit ids of all raid or party members, including the player's own id\n\t-- limitations: will break if there are ever raids with more than 99 players or partys with more than 10\n\tfunction DBM:GetGroupMembers()\n\t\tif IsInRaid() then\n\t\t\treturn raidIterator, GetNumGroupMembers(), \"raid0\"\n\t\telseif IsInGroup() then\n\t\t\treturn partyIterator, GetNumSubgroupMembers(), nil\n\t\telse\n\t\t\t-- solo!\n\t\t\treturn soloIterator, nil, nil\n\t\tend\n\tend\nend\n\nfunction DBM:GetNumGroupMembers()\n\treturn IsInGroup() and GetNumGroupMembers() or 1\nend\n\n--For returning the number of players actually in zone with us for status functions\n--This is very touchy though and will fail if everyone isn't in same SUB zone (ie same room/area)\n--It should work for pretty much any case but outdoor\nfunction DBM:GetNumRealGroupMembers()\n\tif not IsInInstance() then--Not accurate outside of instances (such as world bosses)\n\t\treturn IsInGroup() and GetNumGroupMembers() or 1--So just return regular group members.\n\tend\n\tlocal playerCurrentZone = GetRealZoneText()\n\tlocal realGroupMembers = 0\n\tif GetNumRaidMembers() > 0 then\n\t\tfor i = 1, GetNumRaidMembers() do\n\t\t\tlocal _, _, _, _, _, _, targetCurrentZone = GetRaidRosterInfo(i)\n\t\t\tif targetCurrentZone == playerCurrentZone then\n\t\t\t\trealGroupMembers = realGroupMembers + 1\n\t\t\tend\n\t\tend\n\telseif GetNumPartyMembers() > 0 then\n\t\tlocal numPartyMembers = GetRealNumPartyMembers() -- this function return is terrible, but I didn't find any workaround to check unit zone, so for now this will do\n\t\trealGroupMembers = numPartyMembers\n\telse\n\t\treturn 1\n\tend\n\treturn realGroupMembers\nend\n\nfunction DBM:GetUnitCreatureId(uId)\n\treturn self:GetCIDFromGUID(UnitGUID(uId))\nend\n\nfunction DBM:GetCIDFromGUID(guid)\n\treturn guid and tonumber(guid:sub(8, 12), 16) or 0\nend\n\nfunction DBM:IsNonPlayableGUID(guid)\n\tif not guid or type(guid) ~= \"string\" then return false end\n\tlocal guidType = tonumber(guid:sub(5,5), 16)\n\treturn guidType and (guidType == 3 or guidType == 5) -- Creature and NPC. To determine, add pet or not?\nend\n\nfunction DBM:IsCreatureGUID(guid)\n\tif bband(guid:sub(1, 5), 0x00F) == 3 or bband(guid:sub(1, 5), 0x00F) == 5 then\n\t\treturn true\n\tend\n\treturn false\nend\n\nfunction DBM:GetBossUnitId(name, bossOnly)--Deprecated, only old mods use this\n\tlocal returnUnitID\n\tfor i = 1, 5 do\n\t\tif UnitName(\"boss\" .. i) == name then\n\t\t\treturnUnitID = \"boss\"..i\n\t\tend\n\tend\n\tif not returnUnitID and not bossOnly then\n\t\tfor uId in DBM:GetGroupMembers() do\n\t\t\tif UnitName(uId .. \"target\") == name and not UnitIsPlayer(uId .. \"target\") then\n\t\t\t\treturnUnitID = uId..\"target\"\n\t\t\tend\n\t\tend\n\tend\n\treturn returnUnitID\nend\n\n--Not to be confused with GetUnitIdFromGUID\nfunction DBM:GetUnitIdFromCID(creatureID, bossOnly)\n\tlocal returnUnitID\n\tfor i = 1, 5 do\n\t\tlocal unitId = \"boss\"..i\n\t\tlocal bossGUID = UnitGUID(unitId)\n\t\tlocal cid = self:GetCIDFromGUID(bossGUID)\n\t\tif cid == creatureID then\n\t\t\treturnUnitID = unitId\n\t\tend\n\tend\n\t--Didn't find valid unitID from boss units, scan raid targets\n\tif not returnUnitID and not bossOnly then\n\t\tfor uId in DBM:GetGroupMembers() do -- Do not use self on this function, because self might be bossModPrototype\n\t\t\tlocal unitId = uId .. \"target\"\n\t\t\tlocal bossGUID = UnitGUID(unitId)\n\t\t\tlocal cid = self:GetCIDFromGUID(bossGUID)\n\t\t\tif cid == creatureID then\n\t\t\t\treturnUnitID = unitId\n\t\t\tend\n\t\tend\n\tend\n\treturn returnUnitID\nend\n\nfunction DBM:CheckNearby(range, targetname)\n\tif not targetname and DBM.RangeCheck:GetDistanceAll(range) then\n\t\treturn true--No target name means check if anyone is near self, period\n\telse\n\t\tlocal uId = DBM:GetRaidUnitId(targetname)\n\t\tif uId and not UnitIsUnit(\"player\", uId) then\n\t\t\tlocal inRange = DBM.RangeCheck:GetDistance(uId)\n\t\t\tDBM:Debug(\"CheckNearby fired for targetname: \" .. targetname .. \" (\" .. uId .. \") and range: \".. range .. \"yd. Actual distance found: \" .. inRange, 3) -- self can be mod too\n\t\t\tif inRange and inRange < range + 0.5 then\n\t\t\t\treturn true\n\t\t\tend\n\t\tend\n\tend\n\treturn false\nend\n\nfunction DBM:IsTrivial(customLevel)\n\t--if timewalking or mythic it's always non trivial content\n\tif difficultyIndex == 24 or difficultyIndex == 33 or difficultyIndex == 23 then\n\t\treturn false\n\tend\n\t--if custom level passed, we always hard check that level for trivial vs non trivial\n\tif customLevel then--Custom level parameter\n\t\tif playerLevel >= customLevel then\n\t\t\treturn true\n\t\tend\n\telse\n\t\t--First, auto bail and return non trivial if it's an instance not in table to prevent nil error\n\t\tif not instanceDifficultyBylevel[LastInstanceMapID] then return false end\n\t\t--Content is trivial if player level is 10 higher than content involved\n\t\tif playerLevel >= (instanceDifficultyBylevel[LastInstanceMapID][1]+15) then\n\t\t\treturn true\n\t\tend\n\tend\n\treturn false\nend\n\n---------------\n--  Options  --\n---------------\nfunction DBM:AddDefaultOptions(t1, t2)\n\tfor i, v in pairs(t2) do\n\t\tif t1[i] == nil then\n\t\t\tt1[i] = v\n\t\telseif type(v) == \"table\" and type(t1[i]) == \"table\" then\n\t\t\tself:AddDefaultOptions(t1[i], v)\n\t\tend\n\tend\nend\n\nfunction DBM:LoadModOptions(modId, inCombat, first, profileName, profileID)\n\tlocal oldSavedVarsName = modId:gsub(\"-\", \"\")..\"_SavedVars\"\n\tlocal savedVarsName = modId:gsub(\"-\", \"\")..\"_AllSavedVars\"\n\tlocal savedStatsName = modId:gsub(\"-\", \"\")..\"_SavedStats\"\n\tlocal fullname = profileName or self.Options.PerCharacterSettings and playerName..\"-\"..playerRealm or \"Global\"\n\tcurrentModProfileScope = fullname\n\tself:Debug(\"using profile namespace \" .. fullname, 3)\n\tif not currentSpecID or not currentSpecGroup or (currentSpecName or \"\") == playerClass then\n\t\tself:SetCurrentSpecInfo()\n\tend\n\tlocal profileNum = profileID or playerLevel > 9 and DBM_UseDualProfile and currentSpecGroup or 0\n\tif not _G[savedVarsName] then _G[savedVarsName] = {} end\n\tlocal savedOptions = _G[savedVarsName][fullname] or {}\n\tlocal savedStats = _G[savedStatsName] or {}\n\tlocal existId = {}\n\tfor _, id in ipairs(self.ModLists[modId]) do\n\t\texistId[id] = true\n\t\t-- init\n\t\tif not savedOptions[id] then savedOptions[id] = {} end\n\t\tlocal mod = self:GetModByName(id)\n\t\t-- migrate old option\n\t\tif _G[oldSavedVarsName] and _G[oldSavedVarsName][id] then\n\t\t\tself:Debug(\"LoadModOptions: Found old options, importing\", 2)\n\t\t\tlocal oldTable = _G[oldSavedVarsName][id]\n\t\t\t_G[oldSavedVarsName][id] = nil\n\t\t\tsavedOptions[id][profileNum] = oldTable\n\t\tend\n\t\tif not savedOptions[id][profileNum] and not first then--previous profile not found. load defaults\n\t\t\tself:Debug(\"LoadModOptions: No saved options, creating defaults for profile \"..profileNum, 2)\n\t\t\tlocal defaultOptions = {}\n\t\t\tfor option, optionValue in pairs(mod.DefaultOptions) do\n\t\t\t\tif type(optionValue) == \"table\" then\n\t\t\t\t\toptionValue = optionValue.value\n\t\t\t\telseif type(optionValue) == \"string\" then\n\t\t\t\t\toptionValue = mod:GetRoleFlagValue(optionValue)\n\t\t\t\tend\n\t\t\t\tdefaultOptions[option] = optionValue\n\t\t\tend\n\t\t\tsavedOptions[id][profileNum] = defaultOptions\n\t\telse\n\t\t\tsavedOptions[id][profileNum] = savedOptions[id][profileNum] or mod.Options\n\t\t\t--check new option\n\t\t\tfor option, optionValue in pairs(mod.DefaultOptions) do\n\t\t\t\tif savedOptions[id][profileNum][option] == nil then\n\t\t\t\t\tif type(optionValue) == \"table\" then\n\t\t\t\t\t\toptionValue = optionValue.value\n\t\t\t\t\telseif type(optionValue) == \"string\" then\n\t\t\t\t\t\toptionValue = mod:GetRoleFlagValue(optionValue)\n\t\t\t\t\tend\n\t\t\t\t\tsavedOptions[id][profileNum][option] = optionValue\n\t\t\t\tend\n\t\t\tend\n\t\t\t--clean unused saved variables (do not work on combat load)\n\t\t\tif not inCombat then\n\t\t\t\tfor option, _ in pairs(savedOptions[id][profileNum]) do\n\t\t\t\t\tif mod.DefaultOptions[option] == nil and not (option:find(\"talent\") or option:find(\"FastestClear\") or option:find(\"CVAR\") or option:find(\"RestoreSetting\") or option:find(\"Permanent\")) then -- added Permanent for mod options that I want to keep between sessions e.g. Frame positions\n\t\t\t\t\t\tsavedOptions[id][profileNum][option] = nil\n\t\t\t\t\telseif mod.DefaultOptions[option] and (type(mod.DefaultOptions[option]) == \"table\") then--recover broken dropdown option\n\t\t\t\t\t\tif savedOptions[id][profileNum][option] and (type(savedOptions[id][profileNum][option]) == \"boolean\") then\n\t\t\t\t\t\t\tsavedOptions[id][profileNum][option] = mod.DefaultOptions[option].value\n\t\t\t\t\t\tend\n\t\t\t\t\t--Fix default options for colored bar by type that were set to 0 because no defaults existed at time they were created, but do now.\n\t\t\t\t\telseif option:find(\"TColor\") then\n\t\t\t\t\t\tif savedOptions[id][profileNum][option] and savedOptions[id][profileNum][option] == 0 and mod.DefaultOptions[option] and mod.DefaultOptions[option] ~= 0 then\n\t\t\t\t\t\t\tsavedOptions[id][profileNum][option] = mod.DefaultOptions[option]\n\t\t\t\t\t\t\tself:Debug(\"Migrated \"..option..\" to option defaults\")\n\t\t\t\t\t\tend\n\t\t\t\t\t--Fix options for custom special warning sounds not in addons folder that are not using soundkit IDs\n\t\t\t\t\t--[[elseif option:find(\"SWSound\") then\n\t\t\t\t\t\tif savedOptions[id][profileNum][option] and (type(savedOptions[id][profileNum][option]) == \"string\") and (savedOptions[id][profileNum][option] ~= \"\") and (savedOptions[id][profileNum][option] ~= \"None\") then\n\t\t\t\t\t\t\tlocal searchMsg = (savedOptions[id][profileNum][option]):lower()\n\t\t\t\t\t\t\tif not searchMsg:find(\"addons\") then\n\t\t\t\t\t\t\t\tsavedOptions[id][profileNum][option] = mod.DefaultOptions[option]\n\t\t\t\t\t\t\t\tself:Debug(\"Migrated \"..option..\" to option defaults\")\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend]]\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\t--apply saved option to actual option table\n\t\tmod.Options = savedOptions[id][profileNum]\n\t\t--stats init (only first load)\n\t\tif first then\n\t\t\tsavedStats[id] = savedStats[id] or {}\n\t\t\tlocal stats = savedStats[id]\n\t\t\tstats.normalKills = stats.normalKills or 0\n\t\t\tstats.normalPulls = stats.normalPulls or 0\n\t\t\tstats.heroicKills = stats.heroicKills or 0\n\t\t\tstats.heroicPulls = stats.heroicPulls or 0\n\t\t\tstats.mythicKills = stats.mythicKills or 0\n\t\t\tstats.mythicPulls = stats.mythicPulls or 0\n\t\t\tstats.normal25Kills = stats.normal25Kills or 0\n\t\t\tstats.normal25Pulls = stats.normal25Pulls or 0\n\t\t\tstats.heroic25Kills = stats.heroic25Kills or 0\n\t\t\tstats.heroic25Pulls = stats.heroic25Pulls or 0\n\t\t\tstats.timewalkerKills = stats.timewalkerKills or 0\n\t\t\tstats.timewalkerPulls = stats.timewalkerPulls or 0\n\t\t\tmod.stats = stats\n\t\t\t--run OnInitialize function\n\t\t\tif mod.OnInitialize then mod:OnInitialize(mod) end\n\t\tend\n\tend\n\t--clean unused saved variables (do not work on combat load)\n\t--Why are saved options cleaned twice?\n\tif not inCombat then\n\t\tfor id, _ in pairs(savedOptions) do\n\t\t\tif not existId[id] and not id:find(\"talent\") then\n\t\t\t\tsavedOptions[id] = nil\n\t\t\tend\n\t\tend\n\t\tfor id, _ in pairs(savedStats) do\n\t\t\tif not existId[id] then\n\t\t\t\tsavedStats[id] = nil\n\t\t\tend\n\t\tend\n\tend\n\t_G[savedVarsName][fullname] = savedOptions\n\tif profileNum > 0 then\n\t\t_G[savedVarsName][fullname][\"talent\"..profileNum] = currentSpecName\n\t\tcurrentModProfileName = (\"%s (%s%d-%s)\"):format(fullname, L.SPECIALIZATION, profileNum, currentSpecName) -- Example: Global (Specialization1-Holy)\n\t\tself:Debug(\"LoadModOptions-\"..modId..\": Finished loading \"..(_G[savedVarsName][fullname][\"talent\"..profileNum] or CL.UNKNOWN))\n\tend\n\t_G[savedStatsName] = savedStats\n\tlocal optionsFrame = _G[\"DBM_GUI_OptionsFrame\"]\n\tif not first and DBM_GUI and DBM_GUI.currentViewing and optionsFrame:IsShown() then\n\t\toptionsFrame:DisplayFrame(DBM_GUI.currentViewing)\n\tend\n\ttable.wipe(checkDuplicateObjects)\nend\n\nfunction DBM:SpecChanged(force)\n\tif not force and not DBM_UseDualProfile then return end\n\t--Load Options again.\n\tself:Debug(\"SpecChanged fired\", 2)\n\tfor modId, _ in pairs(self.ModLists) do\n\t\tself:LoadModOptions(modId)\n\tend\nend\n\nfunction DBM:PLAYER_LEVEL_CHANGED()\n\tplayerLevel = UnitLevel(\"player\")\n\tif playerLevel < 15 and playerLevel > 9 then\n\t\tself:CHARACTER_POINTS_CHANGED()\n\tend\nend\n\nfunction DBM:LoadAllModDefaultOption(modId)\n\t-- modId is string like \"DBM-Highmaul\"\n\tif not modId or not self.ModLists[modId] then return end\n\t-- prevent error\n\tif not currentSpecID or not currentSpecGroup or (currentSpecName or \"\") == playerClass then\n\t\tself:SetCurrentSpecInfo()\n\tend\n\t-- variable init\n\tlocal savedVarsName = modId:gsub(\"-\", \"\")..\"_AllSavedVars\"\n\tlocal fullname = self.Options.PerCharacterSettings and playerName..\"-\"..playerRealm or \"Global\"\n\tlocal profileNum = playerLevel > 9 and DBM_UseDualProfile and currentSpecGroup or 0\n\t-- prevent nil table error\n\tif not _G[savedVarsName] then _G[savedVarsName] = {} end\n\tfor _, id in ipairs(self.ModLists[modId]) do\n\t\t-- prevent nil table error\n\t\tif not _G[savedVarsName][fullname][id] then _G[savedVarsName][fullname][id] = {} end\n\t\t-- actual do load default option\n\t\tlocal mod = self:GetModByName(id)\n\t\tlocal defaultOptions = {}\n\t\tfor option, optionValue in pairs(mod.DefaultOptions) do\n\t\t\tif type(optionValue) == \"table\" then\n\t\t\t\toptionValue = optionValue.value\n\t\t\telseif type(optionValue) == \"string\" then\n\t\t\t\toptionValue = mod:GetRoleFlagValue(optionValue)\n\t\t\tend\n\t\t\tdefaultOptions[option] = optionValue\n\t\tend\n\t\tmod.Options = {}\n\t\tmod.Options = defaultOptions\n\t\t_G[savedVarsName][fullname][id][profileNum] = {}\n\t\t_G[savedVarsName][fullname][id][profileNum] = mod.Options\n\tend\n\tself:AddMsg(L.ALLMOD_DEFAULT_LOADED)\n\t-- update gui if showing\n\tlocal optionsFrame = _G[\"DBM_GUI_OptionsFrame\"]\n\tif DBM_GUI and DBM_GUI.currentViewing and optionsFrame:IsShown() then\n\t\toptionsFrame:DisplayFrame(DBM_GUI.currentViewing)\n\tend\nend\n\nfunction DBM:LoadModDefaultOption(mod)\n\t-- mod must be table\n\tif not mod then return end\n\t-- prevent error\n\tif not currentSpecID or not currentSpecGroup or (currentSpecName or \"\") == playerClass then\n\t\tself:SetCurrentSpecInfo()\n\tend\n\t-- variable init\n\tlocal savedVarsName = (mod.modId):gsub(\"-\", \"\")..\"_AllSavedVars\"\n\tlocal fullname = self.Options.PerCharacterSettings and playerName..\"-\"..playerRealm or \"Global\"\n\tlocal profileNum = playerLevel > 9 and DBM_UseDualProfile and currentSpecGroup or 0\n\t-- prevent nil table error\n\tif not _G[savedVarsName] then _G[savedVarsName] = {} end\n\tif not _G[savedVarsName][fullname] then _G[savedVarsName][fullname] = {} end\n\tif not _G[savedVarsName][fullname][mod.id] then _G[savedVarsName][fullname][mod.id] = {} end\n\t-- do load default\n\tlocal defaultOptions = {}\n\tfor option, optionValue in pairs(mod.DefaultOptions) do\n\t\tif type(optionValue) == \"table\" then\n\t\t\toptionValue = optionValue.value\n\t\telseif type(optionValue) == \"string\" then\n\t\t\toptionValue = mod:GetRoleFlagValue(optionValue)\n\t\tend\n\t\tdefaultOptions[option] = optionValue\n\tend\n\tmod.Options = {}\n\tmod.Options = defaultOptions\n\t_G[savedVarsName][fullname][mod.id][profileNum] = {}\n\t_G[savedVarsName][fullname][mod.id][profileNum] = mod.Options\n\tself:AddMsg(L.MOD_DEFAULT_LOADED)\n\t-- update gui if showing\n\tlocal optionsFrame = _G[\"DBM_GUI_OptionsFrame\"]\n\tif DBM_GUI and DBM_GUI.currentViewing and optionsFrame:IsShown() then\n\t\toptionsFrame:DisplayFrame(DBM_GUI.currentViewing)\n\tend\nend\n\nfunction DBM:CopyAllModOption(modId, sourceName, sourceProfile)\n\t-- modId is string like \"DBM-Highmaul\"\n\tif not modId or not sourceName or not sourceProfile or not DBM.ModLists[modId] then return end\n\t-- prevent error\n\tif not currentSpecID or not currentSpecGroup or (currentSpecName or \"\") == playerClass then\n\t\tself:SetCurrentSpecInfo()\n\tend\n\t-- variable init\n\tlocal savedVarsName = modId:gsub(\"-\", \"\")..\"_AllSavedVars\"\n\tlocal targetName = self.Options.PerCharacterSettings and playerName..\"-\"..playerRealm or \"Global\"\n\tlocal targetProfile = playerLevel > 9 and DBM_UseDualProfile and currentSpecGroup or 0\n\t-- do not copy setting itself\n\tif targetName == sourceName and targetProfile == sourceProfile then\n\t\tself:AddMsg(L.MPROFILE_COPY_SELF_ERROR)\n\t\treturn\n\tend\n\t-- prevent nil table error\n\tif not _G[savedVarsName] then _G[savedVarsName] = {} end\n\t-- check source is exist\n\tif not _G[savedVarsName][sourceName] then\n\t\tself:AddMsg(L.MPROFILE_COPY_S_ERROR)\n\t\treturn\n\tend\n\tfor _, id in ipairs(self.ModLists[modId]) do\n\t\t-- check source is exist\n\t\tif not _G[savedVarsName][sourceName][id] then\n\t\t\tself:AddMsg(L.MPROFILE_COPY_S_ERROR)\n\t\t\treturn\n\t\tend\n\t\tif not _G[savedVarsName][sourceName][id][sourceProfile] then\n\t\t\tself:AddMsg(L.MPROFILE_COPY_S_ERROR)\n\t\t\treturn\n\t\tend\n\t\t-- prevent nil table error\n\t\tif not _G[savedVarsName][targetName][id] then _G[savedVarsName][targetName][id] = {} end\n\t\t-- copy table\n\t\t_G[savedVarsName][targetName][id][targetProfile] = {}--clear before copy\n\t\t_G[savedVarsName][targetName][id][targetProfile] = _G[savedVarsName][sourceName][id][sourceProfile]\n\t\t--check new option\n\t\tlocal mod = self:GetModByName(id)\n\t\tfor option, optionValue in pairs(mod.Options) do\n\t\t\tif _G[savedVarsName][targetName][id][targetProfile][option] == nil then\n\t\t\t\t_G[savedVarsName][targetName][id][targetProfile][option] = optionValue\n\t\t\tend\n\t\tend\n\t\t-- apply to options table\n\t\tmod.Options = {}\n\t\tmod.Options = _G[savedVarsName][targetName][id][targetProfile]\n\tend\n\tif targetProfile > 0 then\n\t\t_G[savedVarsName][targetName][\"talent\"..targetProfile] = currentSpecName\n\tend\n\tself:AddMsg(L.MPROFILE_COPY_SUCCESS:format(sourceName, sourceProfile))\n\t-- update gui if showing\n\tlocal optionsFrame = _G[\"DBM_GUI_OptionsFrame\"]\n\tif DBM_GUI and DBM_GUI.currentViewing and optionsFrame:IsShown() then\n\t\toptionsFrame:DisplayFrame(DBM_GUI.currentViewing)\n\tend\nend\n\nfunction DBM:CopyAllModTypeOption(modId, sourceName, sourceProfile, Type)\n\t-- modId is string like \"DBM-Highmaul\"\n\tif not modId or not sourceName or not sourceProfile or not self.ModLists[modId] or not Type then return end\n\t-- prevent error\n\tif not currentSpecID or not currentSpecGroup or (currentSpecName or \"\") == playerClass then\n\t\tself:SetCurrentSpecInfo()\n\tend\n\t-- variable init\n\tlocal savedVarsName = modId:gsub(\"-\", \"\")..\"_AllSavedVars\"\n\tlocal targetName = self.Options.PerCharacterSettings and playerName..\"-\"..playerRealm or \"Global\"\n\tlocal targetProfile = playerLevel > 9 and DBM_UseDualProfile and currentSpecGroup or 0\n\t-- do not copy setting itself\n\tif targetName == sourceName and targetProfile == sourceProfile then\n\t\tself:AddMsg(L.MPROFILE_COPYS_SELF_ERROR)\n\t\treturn\n\tend\n\t-- prevent nil table error\n\tif not _G[savedVarsName] then _G[savedVarsName] = {} end\n\t-- check source is exist\n\tif not _G[savedVarsName][sourceName] then\n\t\tself:AddMsg(L.MPROFILE_COPYS_S_ERROR)\n\t\treturn\n\tend\n\tfor _, id in ipairs(self.ModLists[modId]) do\n\t\t-- check source is exist\n\t\tif not _G[savedVarsName][sourceName][id] then\n\t\t\tself:AddMsg(L.MPROFILE_COPYS_S_ERROR)\n\t\t\treturn\n\t\tend\n\t\tif not _G[savedVarsName][sourceName][id][sourceProfile] then\n\t\t\tself:AddMsg(L.MPROFILE_COPYS_S_ERROR)\n\t\t\treturn\n\t\tend\n\t\t-- prevent nil table error\n\t\tif not _G[savedVarsName][targetName][id] then _G[savedVarsName][targetName][id] = {} end\n\t\t-- copy table\n\t\tfor option, optionValue in pairs(_G[savedVarsName][sourceName][id][sourceProfile]) do\n\t\t\tif option:find(Type) then\n\t\t\t\t_G[savedVarsName][targetName][id][targetProfile][option] = optionValue\n\t\t\tend\n\t\tend\n\t\t-- apply to options table\n\t\tlocal mod = self:GetModByName(id)\n\t\tmod.Options = {}\n\t\tmod.Options = _G[savedVarsName][targetName][id][targetProfile]\n\tend\n\tif targetProfile > 0 then\n\t\t_G[savedVarsName][targetName][\"talent\"..targetProfile] = currentSpecName\n\tend\n\tself:AddMsg(L.MPROFILE_COPYS_SUCCESS:format(sourceName, sourceProfile))\n\t-- update gui if showing\n\tlocal optionsFrame = _G[\"DBM_GUI_OptionsFrame\"]\n\tif DBM_GUI and DBM_GUI.currentViewing and optionsFrame:IsShown() then\n\t\toptionsFrame:DisplayFrame(DBM_GUI.currentViewing)\n\tend\nend\n\nfunction DBM:DeleteAllModOption(modId, name, profile)\n\t-- modId is string like \"DBM-Highmaul\"\n\tif not modId or not name or not profile or not self.ModLists[modId] then return end\n\t-- prevent error\n\tif not currentSpecID or not currentSpecGroup or (currentSpecName or \"\") == playerClass then\n\t\tself:SetCurrentSpecInfo()\n\tend\n\t-- variable init\n\tlocal savedVarsName = modId:gsub(\"-\", \"\")..\"_AllSavedVars\"\n\tlocal fullname = self.Options.PerCharacterSettings and playerName..\"-\"..playerRealm or \"Global\"\n\tlocal profileNum = playerLevel > 9 and DBM_UseDualProfile and currentSpecGroup or 0\n\t-- cannot delete current profile.\n\tif fullname == name and profileNum == profile then\n\t\tself:AddMsg(L.MPROFILE_DELETE_SELF_ERROR)\n\t\treturn\n\tend\n\t-- prevent nil table error\n\tif not _G[savedVarsName] then _G[savedVarsName] = {} end\n\tif not _G[savedVarsName][name] then\n\t\tself:AddMsg(L.MPROFILE_DELETE_S_ERROR)\n\t\treturn\n\tend\n\tfor _, id in ipairs(self.ModLists[modId]) do\n\t\t-- prevent nil table error\n\t\tif not _G[savedVarsName][name][id] then\n\t\t\tself:AddMsg(L.MPROFILE_DELETE_S_ERROR)\n\t\t\treturn\n\t\tend\n\t\t-- delete\n\t\t_G[savedVarsName][name][id][profile] = nil\n\tend\n\t_G[savedVarsName][name][\"talent\"..profile] = nil\n\tself:AddMsg(L.MPROFILE_DELETE_SUCCESS:format(name, profile))\nend\n\nfunction DBM:ClearAllStats(modId)\n\t-- modId is string like \"DBM-Highmaul\"\n\tif not modId or not self.ModLists[modId] then return end\n\t-- variable init\n\tlocal savedStatsName = modId:gsub(\"-\", \"\")..\"_SavedStats\"\n\t-- prevent nil table error\n\tif not _G[savedStatsName] then _G[savedStatsName] = {} end\n\tfor _, id in ipairs(self.ModLists[modId]) do\n\t\tlocal mod = self:GetModByName(id)\n\t\t-- prevent nil table error\n\t\tlocal defaultStats = {}\n\t\tdefaultStats.normalKills = 0\n\t\tdefaultStats.normalPulls = 0\n\t\tdefaultStats.heroicKills = 0\n\t\tdefaultStats.heroicPulls = 0\n\t\tdefaultStats.mythicKills = 0\n\t\tdefaultStats.mythicPulls = 0\n\t\tdefaultStats.normal25Kills = 0\n\t\tdefaultStats.normal25Pulls = 0\n\t\tdefaultStats.heroic25Kills = 0\n\t\tdefaultStats.heroic25Pulls = 0\n\t\tdefaultStats.timewalkerKills = 0\n\t\tdefaultStats.timewalkerPulls = 0\n\t\tmod.stats = {}\n\t\tmod.stats = defaultStats\n\t\t_G[savedStatsName][id] = {}\n\t\t_G[savedStatsName][id] = defaultStats\n\tend\n\tself:AddMsg(L.ALLMOD_STATS_RESETED)\n\tDBM_GUI:UpdateModList()\nend\n\nfunction DBM:CurrentModProfile()\n\tlocal profile = currentModProfileName or currentModProfileScope .. \" (All)\"\n\t-- Even though this function is not mod specific, the profile name is applied equally to all loaded mods in ModList.\n\tself:Debug(\"Currently loaded mod profile: \" .. profile, 3)\n\treturn profile\nend\n\ndo\n\tlocal gsub = string.gsub\n\n\tlocal function FixElv(optionName)\n\t\tif DBM.Options[optionName]:lower():find(\"interface\\\\addons\\\\elvui\\\\core\\\\media\\\\\") then -- Retail ElvUI structure\n\t\t\tDBM.Options[optionName] = gsub(DBM.Options[optionName], gsub(\"Interface\\\\AddOns\\\\ElvUI\\\\Core\\\\Media\\\\\", \"(%a)\", function(v)\n\t\t\t\treturn \"[\" .. v:upper() .. v:lower() .. \"]\"\n\t\t\tend), \"Interface\\\\AddOns\\\\ElvUI\\\\Media\\\\\") -- 3.3.5a ElvUI structure\n\t\tend\n\tend\n\n\tfunction loadOptions(self)\n\t\t--init\n\t\tif not DBM_AllSavedOptions then DBM_AllSavedOptions = {} end\n\t\tusedProfile = DBM_UsedProfile or usedProfile\n\t\tif not usedProfile or (usedProfile ~= \"Default\" and not DBM_AllSavedOptions[usedProfile]) then\n\t\t\t-- DBM.Option is not loaded. so use print function\n\t\t\tprint(L.PROFILE_NOT_FOUND)\n\t\t\tusedProfile = \"Default\"\n\t\tend\n\t\tDBM_UsedProfile = usedProfile\n\t\t--migrate old options\n\t\tif DBM_SavedOptions and not DBM_AllSavedOptions[usedProfile] then\n\t\t\tDBM_AllSavedOptions[usedProfile] = DBM_SavedOptions\n\t\tend\n\t\tself.Options = DBM_AllSavedOptions[usedProfile] or {}\n\t\tself:Enable()\n\t\tself:AddDefaultOptions(self.Options, self.DefaultOptions)\n\t\tDBM_AllSavedOptions[usedProfile] = self.Options\n\n\t\t-- force enable dual profile (change default)\n\t\t--[[ Custom edit: disabled override, since having this as true requires user to know how mod profiles work and wonder why the mod profile they had previously configured is not \"working\"\n\t\tif DBM_CharSavedRevision < 12976 then\n\t\t\tif playerClass ~= \"MAGE\" and playerClass ~= \"WARLOCK\" and playerClass ~= \"ROGUE\" then\n\t\t\t\tDBM_UseDualProfile = true\n\t\t\tend\n\t\tend\n\t\t--]]\n\t\tDBM_CharSavedRevision = self.Revision\n\t\t-- load special warning options\n\t\tself:UpdateWarningOptions()\n\t\tself:UpdateSpecialWarningOptions()\n\t\tif BossBanner then\n\t\t\tBossBanner:UpdateStyle()\n\t\tend\n\t\tself.Options.CoreSavedRevision = self.Revision\n\t\t--Fix fonts if they are nil\n\t\tif not self.Options.WarningFont then\n\t\t\tself.Options.WarningFont = \"standardFont\"\n\t\tend\n\t\tif not self.Options.SpecialWarningFont then\n\t\t\tself.Options.SpecialWarningFont = \"standardFont\"\n\t\tend\n\t\t--If users previous voice pack was not set to none, don't force change it to VEM, honor whatever it was set to before\n\t\tif self.Options.ChosenVoicePack and self.Options.ChosenVoicePack ~= \"None\" then\n\t\t\tself.Options.ChosenVoicePack2 = self.Options.ChosenVoicePack\n\t\t\tself.Options.ChosenVoicePack = nil\n\t\tend\n\t\t-- Migrate ElvUI changes\n\t\tfor _, setting in ipairs({\n\t\t\t-- Sounds\n\t\t\t\"RaidWarningSound\", \"SpecialWarningSound\", \"SpecialWarningSound2\", \"SpecialWarningSound3\", \"SpecialWarningSound4\", \"SpecialWarningSound5\", \"EventSoundVictory2\",\n\t\t\t\"EventSoundWipe\", \"EventSoundEngage2\", \"EventSoundMusic\", \"EventSoundDungeonBGM\", \"RangeFrameSound1\", \"RangeFrameSound2\",\n\t\t\t-- Fonts\n\t\t\t\"InfoFrameFont\", \"WarningFont\", \"SpecialWarningFont\"\n\t\t}) do\n\t\t\tif type(self.Options[setting]) == \"string\" and self.Options[setting]:lower() ~= \"none\" then\n\t\t\t\tFixElv(setting)\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction DBM:LFG_PROPOSAL_SHOW()\n\tlocal timerEnabled = self.Options.ShowQueuePop and not self.Options.DontShowEventTimers\n\tif timerEnabled then\n\t\tDBT:CreateBar(40, L.LFG_INVITE, \"Interface\\\\Icons\\\\Spell_Holy_BorrowedTime\")\n\t\tfireEvent(\"DBM_TimerStart\", \"DBMLFGTimer\", L.LFG_INVITE, 40, \"Interface\\\\Icons\\\\Spell_Holy_BorrowedTime\", \"extratimer\", nil, 0)\n\tend\n\tfireEvent(\"DBM_TimerBegin\", \"DBMLFGTimer\", L.LFG_INVITE, 40, \"Interface\\\\Icons\\\\Spell_Holy_BorrowedTime\", \"extratimer\", nil, 0, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, timerEnabled)\n\tif self.Options.LFDEnhance then\n\t\tself:FlashClientIcon(true)\n\t\tself:PlaySound(8960, true)--Because regular sound uses SFX channel which is too low of volume most of time\n\tend\nend\n\nfunction DBM:LFG_PROPOSAL_FAILED()\n\tDBT:CancelBar(L.LFG_INVITE)\n\tfireEvent(\"DBM_TimerStop\", \"DBMLFGTimer\")\nend\n\nfunction DBM:LFG_PROPOSAL_SUCCEEDED()\n\tDBT:CancelBar(L.LFG_INVITE)\n\tfireEvent(\"DBM_TimerStop\", \"DBMLFGTimer\")\nend\n\nfunction DBM:LFG_UPDATE()\n\tlocal _, joined = GetLFGInfoServer()\n\tif not joined then\n\t\tDBT:CancelBar(L.LFG_INVITE)\n\t\tfireEvent(\"DBM_TimerStop\", \"DBMLFGTimer\")\n\tend\nend\n\nfunction DBM:READY_CHECK()\n\tif self.Options.RLReadyCheckSound then--readycheck sound, if ora3 not installed (bad to have 2 mods do it)\n\t\tself:FlashClientIcon(true)\n\t\tif not BINDING_HEADER_oRA3 then\n\t\t\tself:PlaySound(8960, true)--Because regular sound uses SFX channel which is too low of volume most of time\n\t\tend\n\tend\n\tself:TransitionToDungeonBGM(false, true)\n\tself:Schedule(4, self.TransitionToDungeonBGM, self)\nend\n\ndo\n\tlocal function throttledTalentCheck(self)\n\t\tlocal lastSpecID = currentSpecID\n\t\tif GetNumTalentTabs() == 0 then\n\t\t\tself:Debug(\"No talents detected. Registering PLAYER_ALIVE for talent data\")\n\t\t\tself:RegisterEvents(\"PLAYER_ALIVE\")\n\t\tend\n\t\tself:SetCurrentSpecInfo() -- always delay a bit (previously had it at 0.1s) because Unit API like UnitExists and UnitClass were returning nil on this event.\n\t\tif not InCombatLockdown() then\n\t\t\t--Refresh entire spec table if not in combat\n\t\t\tDBMExtraGlobal:rebuildSpecTable()\n\t\tend\n\t\tif currentSpecID ~= lastSpecID then--Don't fire specchanged unless spec actually has changed.\n\t\t\tself:SpecChanged()\n\t\tend\n\tend\n\n\t--Throttle checks on talent point updates so that if multiple CHARACTER_POINTS_CHANGED fire in succession\n\t--It doesnt spam DBMs code and cause performance lag\n\tfunction DBM:CHARACTER_POINTS_CHANGED() -- Classic/BCC support\n\t\tself:Unschedule(throttledTalentCheck)\n\t\tself:Schedule(2, throttledTalentCheck, self)\n\tend\n\t--Throttle this api too.\n\tDBM.PLAYER_TALENT_UPDATE = DBM.CHARACTER_POINTS_CHANGED -- Wrath support\n\n\t-- This workaround is likely not needed anymore since talent check is now delayed by two seconds\n\tfunction DBM:PLAYER_ALIVE()\n\t\tself:CHARACTER_POINTS_CHANGED()\n\t\tmainFrame:UnregisterEvent(\"PLAYER_ALIVE\")\n\tend\nend\n\ndo\n\tlocal function AcceptPartyInvite()\n\t\tAcceptGroup()\n\t\tfor i=1, STATICPOPUP_NUMDIALOGS do\n\t\t\tlocal whichDialog = _G[\"StaticPopup\"..i].which\n\t\t\tif whichDialog == \"PARTY_INVITE\" or whichDialog == \"PARTY_INVITE_XREALM\" then\n\t\t\t\t_G[\"StaticPopup\"..i].inviteAccepted = 1\n\t\t\t\tStaticPopup_Hide(whichDialog)\n\t\t\t\tbreak\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction DBM:PARTY_INVITE_REQUEST(sender)\n\t\t--First off, if you are in queue for something, lets not allow guildies or friends boot you from it.\n\t\tif IsInInstance() or GetLFGMode() then return end\n\t\t--Checks friends and guildies\n\t\tif self.Options.AutoAcceptFriendInvite then\n\t\t\tif checkForSafeSender(sender, self.Options.AutoAcceptFriendInvite, self.Options.AutoAcceptGuildInvite) then\n\t\t\t\tAcceptPartyInvite()\n\t\t\tend\n\t\tend\n\tend\nend\n\nlocal function GetBattlefieldFaction(unit) -- workaround to detect faction in Cross-Faction BG\n\tif not unit then return UnitFactionGroup(\"player\") end\n\tlocal numScores = GetNumBattlefieldScores()\n\tif numScores == 0 then return UnitFactionGroup(\"player\")\n\telse\n\t\tlocal unitName = GetUnitName(unit, true)\n\t\tfor i = 1, numScores do\n\t\t\tlocal name, _, _, _, _, faction = GetBattlefieldScore(i)\n\t\t\tif name == unitName then\n\t\t\t\tif faction == 0 then\n\t\t\t\t\treturn \"Horde\"\n\t\t\t\telse\n\t\t\t\t\treturn \"Alliance\"\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction DBM:UPDATE_BATTLEFIELD_STATUS(queueID)\n\tfor i = 1, 2 do\n\t\tif GetBattlefieldStatus(i) == \"confirm\" then\n\t\t\tlocal timerEnabled = self.Options.ShowQueuePop and not self.Options.DontShowEventTimers\n\t\t\tqueuedBattlefield[i] = select(2, GetBattlefieldStatus(i))\n\t\t\tlocal expiration = GetBattlefieldPortExpiration(queueID)\n\t\t\tlocal timerIcon = GetBattlefieldFaction(\"player\") == \"Alliance\" and \"Interface\\\\Icons\\\\INV_BannerPVP_02\" or \"Interface\\\\Icons\\\\INV_BannerPVP_01\"\n\t\t\tif timerEnabled then\n\t\t\t\tDBT:CreateBar(expiration or 85, queuedBattlefield[i], timerIcon)\n\t\t\t\tself:FlashClientIcon()\n\t\t\t\tfireEvent(\"DBM_TimerStart\", \"DBMBFSTimer\", queuedBattlefield[i], expiration or 85, tostring(timerIcon), \"extratimer\", nil, 0)\n\t\t\tend\n\t\t\tfireEvent(\"DBM_TimerBegin\", \"DBMBFSTimer\", queuedBattlefield[i], expiration or 85, tostring(timerIcon), \"extratimer\", nil, 0, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, timerEnabled)\n\t\t\tif self.Options.LFDEnhance then\n\t\t\t\tself:PlaySound(8960, true)--Because regular sound uses SFX channel which is too low of volume most of time\n\t\t\tend\n\t\telseif queuedBattlefield[i] then\n\t\t\tDBT:CancelBar(queuedBattlefield[i])\n\t\t\tfireEvent(\"DBM_TimerStop\", \"DBMBFSTimer\")\n\t\t\ttremove(queuedBattlefield, i)\n\t\tend\n\tend\nend\n\n--------------------------------\n--  Load Boss Mods on Demand  --\n--------------------------------\ndo\n\tlocal pvpShown = false\n\tlocal classicZones = {[718]=true,[767]=true,[756]=true,[697]=true}\n\tlocal bcZones = {[797]=true,[776]=true,[800]=true,[777]=true,[780]=true,[781]=true,[790]=true,[783]=true,[782]=true}\n\tlocal wrathZones = {[532]=true,[610]=true,[544]=true,[528]=true,[605]=true,[536]=true,[719]=true,[530]=true,[533]=true}\n\tlocal pvpZones = {[402]=true,[444]=true,[462]=true,[483]=true,[513]=true,[541]=true}\n\tlocal oldDungeons = {\n\t\t[689]=true,[705]=true,[700]=true,[681]=true,[691]=true,--Classic\n\t\t[711]=true,[723]=true,[724]=true,[725]=true,[726]=true,[727]=true,[728]=true,[729]=true,[730]=true,[731]=true,[732]=true,[733]=true,[734]=true,[735]=true,[798]=true,[799]=true,--BC\n\t\t[523]=true,[534]=true,[522]=true,[535]=true,[531]=true,[526]=true,[527]=true,[521]=true,[529]=true,[524]=true,[825]=true,[537]=true,[603]=true,[602]=true,[604]=true,[543]=true,--Wrath\n\t}\n\t--This never wants to spam you to use mods for trivial content you don't need mods for.\n\t--It's intended to suggest mods for content that's relevant to your level (TW, leveling up in dungeons, or even older raids you can't just roll over)\n\tfunction DBM:CheckAvailableMods()\n\t\tif _G[\"BigWigs\"] then return end--If they are running two boss mods at once, lets assume they are only using DBM for a specific feature (such as brawlers) and not nag\n\t\tif not self:IsTrivial() then\n\t\t\tif oldDungeons[LastInstanceMapID] and not GetAddOnInfo(\"DBM-Party-BC\") then\n\t\t\t\tAddMsg(self, L.MOD_AVAILABLE:format(\"DBM Dungeon mods\"))\n\t\t\telseif (classicZones[LastInstanceMapID] or bcZones[LastInstanceMapID]) and not GetAddOnInfo(\"DBM-BlackTemple\") then\n\t\t\t\tAddMsg(self, L.MOD_AVAILABLE:format(\"DBM BC/Vanilla mods\"))\n\t\t\telseif wrathZones[LastInstanceMapID] and not GetAddOnInfo(\"DBM-Ulduar\") then\n\t\t\t\tAddMsg(self, L.MOD_AVAILABLE:format(\"DBM Wrath of the Lich King mods\"))\n\t\t\tend\n\t\tend\n\t\tlocal _, instanceType = GetInstanceInfo()\n\t\tif (pvpZones[LastInstanceMapID] or instanceType == \"arena\") and not GetAddOnInfo(\"DBM-PvP\") and not pvpShown then\n\t\t\tAddMsg(self, L.MOD_AVAILABLE:format(\"DBM-PvP\"))\n\t\t\tpvpShown = true\n\t\tend\n\tend\n\tfunction DBM:TransitionToDungeonBGM(force, cleanup)\n\t\tif cleanup then--Runs on zone change/cinematic Start (first load delay) and combat end\n\t\t\tself:Unschedule(self.TransitionToDungeonBGM)\n\t\t\tif self.Options.RestoreSettingMusic then\n\t\t\t\tSetCVar(\"Sound_EnableMusic\", self.Options.RestoreSettingMusic)\n\t\t\t\tself.Options.RestoreSettingMusic = nil\n\t\t\t\tself:Debug(\"Restoring Sound_EnableMusic CVAR\")\n\t\t\tend\n\t\t\tif self.Options.musicPlaying then--Primarily so DBM doesn't call StopMusic unless DBM is one that started it. We don't want to screw with other addons\n\t\t\t\tStopMusic()\n\t\t\t\tself.Options.musicPlaying = nil\n\t\t\t\tself:Debug(\"Stopping music\")\n\t\t\tend\n\t\t\tfireEvent(\"DBM_MusicStop\", \"ZoneOrCombatEndTransition\")\n\t\t\treturn\n\t\tend\n\t\tif LastInstanceType ~= \"raid\" and LastInstanceType ~= \"party\" and not force then return end\n\t\tfireEvent(\"DBM_MusicStart\", \"RaidOrDungeon\")\n\t\tif self.Options.EventSoundDungeonBGM and self.Options.EventSoundDungeonBGM ~= \"None\" and self.Options.EventSoundDungeonBGM ~= \"\" and not (self.Options.EventDungMusicMythicFilter and (savedDifficulty == \"mythic\" or savedDifficulty == \"challenge\")) then\n\t\t\tif not self.Options.RestoreSettingMusic then\n\t\t\t\tself.Options.RestoreSettingMusic = tonumber(GetCVar(\"Sound_EnableMusic\")) or 1\n\t\t\t\tif self.Options.RestoreSettingMusic == 0 then\n\t\t\t\t\tSetCVar(\"Sound_EnableMusic\", 1)\n\t\t\t\telse\n\t\t\t\t\tself.Options.RestoreSettingMusic = nil--Don't actually need it\n\t\t\t\tend\n\t\t\tend\n\t\t\tlocal path = \"MISSING\"\n\t\t\tif self.Options.EventSoundDungeonBGM == \"Random\" then\n\t\t\t\tlocal usedTable = self.Options.EventSoundMusicCombined and DBM:GetMusic() or DBM:GetDungeonMusic()\n\t\t\t\tif #usedTable >= 3 then\n\t\t\t\t\tlocal random = random(3, #usedTable)\n\t\t\t\t\tpath = usedTable[random].value\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tpath = self.Options.EventSoundDungeonBGM\n\t\t\tend\n\t\t\tif path ~= \"MISSING\" then\n\t\t\t\tPlayMusic(path)\n\t\t\t\tself.Options.musicPlaying = true\n\t\t\t\tself:Debug(\"Starting Dungeon music with file: \"..path)\n\t\t\tend\n\t\tend\n\tend\n\tlocal function SecondaryLoadCheck(self)\n\t\tlocal zoneName = GetRealZoneText()\n\t\tlocal mapID = GetCurrentMapAreaID() > 4 and GetCurrentMapAreaID() or GetCurrentMapContinent() -- workaround to support world bosses mod loading\n\t\tlocal _, instanceType, difficulty, _, instanceGroupSize = GetInstanceInfo()\n\t\tlocal currentDifficulty, currentDifficultyText, currentDifficultyIndex = self:GetCurrentInstanceDifficulty()\n\t\tif currentDifficulty and currentDifficulty ~= savedDifficulty then -- added currentDifficulty nil check to prevent this from overriding savedDifficulty when outside instance\n\t\t\tsavedDifficulty, difficultyText = currentDifficulty, currentDifficultyText\n\t\tend\n\t\tself:Debug(\"Instance Check fired with mapID \"..mapID..\" and difficulty \"..difficulty, 2)\n\t\t-- Auto Logging for entire zone if record only bosses is off\n\t\tif not self.Options.RecordOnlyBosses then\n\t\t\tif LastInstanceType == \"raid\" or LastInstanceType == \"party\" then\n\t\t\t\tself:StartLogging(0)\n\t\t\telse\n\t\t\t\tself:StopLogging()\n\t\t\tend\n\t\tend\n\t\tif self.Options.FixCLEUOnCombatStart then\n\t\t\tself:Schedule(0.5, CombatLogClearEntries)\n\t\t\tself:Debug(\"Scheduled FixCLEU from SecondaryLoadCheck\")\n\t\tend\n\t\t--These can still change even if mapID doesn't\n\t\tdifficultyIndex = currentDifficultyIndex or difficulty\n\t\tLastGroupSize = instanceGroupSize\n\t\tif LastInstanceMapID == mapID and LastInstanceZoneName == zoneName then -- ZoneName check for non-patch users\n\t\t\tself:TransitionToDungeonBGM()\n\t\t\tself:Debug(\"No action taken because mapID hasn't changed since last check\", 2)\n\t\t\treturn\n\t\tend--ID hasn't changed, don't waste cpu doing anything else (example situation, porting into garrosh stage 4 is a loading screen)\n\t\tLastInstanceZoneName = zoneName\n\t\tLastInstanceMapID = mapID\n\t\tDBMScheduler:UpdateZone()--Also update zone in scheduler\n\t\tfireEvent(\"DBM_UpdateZone\", mapID)\n\t\tif instanceType == \"none\" then\n\t\t\tLastInstanceType = \"none\"\n\t\t\tif not targetEventsRegistered then\n\t\t\t\tself:RegisterShortTermEvents(\"UPDATE_MOUSEOVER_UNIT\", \"UNIT_TARGET_UNFILTERED\")\n\t\t\t\ttargetEventsRegistered = true\n\t\t\tend\n\t\telse\n\t\t\tLastInstanceType = instanceType\n\t\t\tif targetEventsRegistered then\n\t\t\t\tself:UnregisterShortTermEvents()\n\t\t\t\ttargetEventsRegistered = false\n\t\t\tend\n\t\t\tif savedDifficulty == \"worldboss\" then\n\t\t\t\tfor i = #inCombat, 1, -1 do\n\t\t\t\t\tself:EndCombat(inCombat[i], true, nil, \"Left zone of world boss\")\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\t-- LoadMod\n\t\tself:LoadModsOnDemand(\"zone\", zoneName, playerRealm)\n\t\tself:LoadModsOnDemand(\"mapId\", mapID, playerRealm)\n--\t\tif self.Options.ShowReminders then\n\t\t\tself:CheckAvailableMods()\n--\t\tend\n\t\tif self:HasMapRestrictions() then\n\t\t\tself.Arrow:Hide()\n--\t\t\tself.HudMap:Disable()\n\t\t\tif self.RangeCheck:IsRadarShown() then\n\t\t\t\tself.RangeCheck:Hide(true)\n\t\t\tend\n\t\tend\n\tend\n\n\t-- Check so that when viewing the world map, the zone doesn't \"yank\" to the current one\n\tlocal cachedZoneChangedEvent = \"\"\n\tlocal function IsWorldMapFrameOpen(event)\n\t\tif IsOutdoors() and WorldMapFrame:IsShown() then\n\t\t\t-- Prioritize ZONE_CHANGED_NEW_AREA if both events got fired over the course of the world map being open\n\t\t\tif cachedZoneChangedEvent ~= \"ZONE_CHANGED_NEW_AREA\" then\n\t\t\t\tcachedZoneChangedEvent = event\n\t\t\tend\n\t\t\treturn true\n\t\tend\n\tend\n\t-- Hook World Map close event\n\tlocal function WorldMapFrameCloseHook()\n\t\tif cachedZoneChangedEvent == \"ZONE_CHANGED_NEW_AREA\" then\n\t\t\tDBM:ZONE_CHANGED_NEW_AREA()\n\t\telseif cachedZoneChangedEvent == \"ZONE_CHANGED_INDOORS\" then\n\t\t\tDBM:ZONE_CHANGED_INDOORS()\n\t\tend\n\t\tcachedZoneChangedEvent = \"\"\n\tend\n\tWorldMapFrame:HookScript(\"OnHide\", WorldMapFrameCloseHook)\n\n\tfunction DBM:ZONE_CHANGED_NEW_AREA()\n\t\tif IsWorldMapFrameOpen(\"ZONE_CHANGED_NEW_AREA\") then return end\n\t\tSetMapToCurrentZone()\n\t\ttimerRequestInProgress = false\n\t\tself:Debug(\"ZONE_CHANGED_NEW_AREA fired on zoneID: \" .. GetCurrentMapAreaID())\n\t\tself:Unschedule(SecondaryLoadCheck)\n\t\t--SecondaryLoadCheck(self)\n\t\tself:Schedule(1, SecondaryLoadCheck, self)--Now delayed by one second to work around an issue on 8.x where spec info isn't available yet on reloadui\n\t\tself:TransitionToDungeonBGM(false, true)\n\t\tself:Schedule(5, SecondaryLoadCheck, self)\n\t\tif self.Options.FixCLEUOnCombatStart then\n\t\t\tself:Schedule(0.5, CombatLogClearEntries)\n\t\t\tself:Debug(\"Scheduled FixCLEU from ZONE_CHANGED_NEW_AREA\")\n\t\tend\n\tend\n\n\tfunction DBM:ZONE_CHANGED_INDOORS()\n\t\tif IsWorldMapFrameOpen(\"ZONE_CHANGED_INDOORS\") then return end\n\t\tSetMapToCurrentZone()\n\t\tself:Debug(\"Indoor/SubZone changed on zoneID: \" .. GetCurrentMapAreaID() .. \" and subZone: \" .. GetSubZoneText())\n\tend\n\tDBM.ZONE_CHANGED = DBM.ZONE_CHANGED_INDOORS\n\n\tfunction DBM:LoadModsOnDemand(checkTable, checkValue, checkRealm)\n\t\tself:Debug(\"LoadModsOnDemand fired\")\n\t\tfor _, v in ipairs(self.AddOns) do\n\t\t\tlocal modTable = v[checkTable]\n\t\t\tlocal modRealm = v.realm\n\t\t\tlocal modBlockRealm = v.blockRealm\n\t\t\tlocal _, _, _, enabled = GetAddOnInfo(v.modId)\n\t\t\t--self:Debug(v.modId..\" is \"..enabled, 2)\n\t\t\tif not IsAddOnLoaded(v.modId) and modTable and checkEntry(modTable, checkValue) then\n\t\t\t\tif not checkEntry(modBlockRealm, checkRealm) and (modRealm[1] == \"\" or checkEntry(modRealm, checkRealm)) then -- custom realm check (for non-WotLK specific mods, like Vanilla Onyxia). Toc only filled if necessary for conditional mod load based on realm\n\t\t\t\t\tif enabled then\n\t\t\t\t\t\tself:LoadMod(v)\n\t\t\t\t\telse\n\t\t\t\t\t\tif self.Options.ShowReminders then\n\t\t\t\t\t\t\tself:AddMsg(L.LOAD_MOD_DISABLED:format(v.name))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction DBM:LoadMod(mod, force)\n\tif type(mod) ~= \"table\" then\n\t\tself:Debug(\"LoadMod failed because mod table not valid\")\n\t\treturn false\n\tend\n\t--Block loading world boss mods by zoneID\n\tif mod.isWorldBoss and not IsInInstance() and not force then\n\t\treturn\n\tend\n\tif mod.minRevision > self.Revision then\n\t\tif self:AntiSpam(60, \"VER_MISMATCH\") then--Throttle message in case person keeps trying to load mod (or it's a world boss player keeps targeting\n\t\t\tself:AddMsg(L.LOAD_MOD_VER_MISMATCH:format(mod.name))\n\t\tend\n\t\treturn\n\tend\n\tif mod.minExpansion > GetExpansionLevel() then\n\t\tself:AddMsg(L.LOAD_MOD_EXP_MISMATCH:format(mod.name))\n\t\treturn\n\telseif not testBuild and mod.minToc > wowTOC then\n\t\tself:AddMsg(L.LOAD_MOD_TOC_MISMATCH:format(mod.name, mod.minToc))\n\t\treturn\n\tend\n\tif not currentSpecID or (currentSpecName or \"\") == playerClass then\n\t\tself:SetCurrentSpecInfo()\n\tend\n\tself:Debug(\"LoadAddOn should have fired for \"..mod.name, 2)\n\tlocal loaded, reason = LoadAddOn(mod.modId)\n\tif not loaded then\n\t\tif reason then\n\t\t\tif reason == \"DISABLED\" then\n\t\t\t\tself:AddMsg(L.LOAD_MOD_DISABLED:format(mod.name))\n\t\t\telse\n\t\t\t\tself:AddMsg(L.LOAD_MOD_ERROR:format(tostring(mod.name), tostring(_G[\"ADDON_\"..reason or \"\"])))\n\t\t\tend\n\t\telse\n\t\t\tself:Debug(\"LoadAddOn failed and did not give reason\")\n\t\tend\n\t\treturn false\n\telse\n\t\tself:Debug(\"LoadAddOn should have succeeded for \"..mod.name, 2)\n\t\tself:AddMsg(L.LOAD_MOD_SUCCESS:format(tostring(mod.name)))\n\t\tif self.NewerVersion and showConstantReminder >= 1 then\n\t\t\tAddMsg(self, L.UPDATEREMINDER_HEADER:format(self.NewerVersion, showRealDate(self.HighestRelease)))\n\t\tend\n\t\tself:LoadModOptions(mod.modId, InCombatLockdown(), true)\n\t\tif DBM_GUI then\n\t\t\tDBM_GUI:UpdateModList()\n\t\tend\n\t\tif LastInstanceType ~= \"pvp\" and #inCombat == 0 and IsInGroup() then--do timer recovery only mod load\n\t\t\tif not timerRequestInProgress then\n\t\t\t\ttimerRequestInProgress = true\n\t\t\t\t-- Request timer to 3 person to prevent failure.\n\t\t\t\tself:Unschedule(self.RequestTimers)\n\t\t\t\tself:Schedule(7, self.RequestTimers, self, 1)\n\t\t\t\tself:Schedule(10, self.RequestTimers, self, 2)\n\t\t\t\tself:Schedule(13, self.RequestTimers, self, 3)\n\t\t\t\tself:Schedule(15, function() timerRequestInProgress = false end)\n\t\t\t\tself:RAID_ROSTER_UPDATE(true)\n\t\t\tend\n\t\tend\n\t\tif not InCombatLockdown() and not UnitAffectingCombat(\"player\") and not IsFalling() then--We loaded in combat but still need to avoid garbage collect in combat\n\t\t\tcollectgarbage(\"collect\")\n\t\tend\n\t\treturn true\n\tend\nend\n\ndo\n\tlocal function loadModByUnit(uId)\n\t\tif IsInInstance() or not UnitIsFriend(\"player\", uId) and UnitIsDead(\"player\") or UnitIsDead(uId) then return end--If you're in an instance no reason to waste cpu. If THE BOSS dead, no reason to load a mod for it. To prevent rare lua error, needed to filter on player dead.\n\t\tlocal guid = UnitGUID(uId)\n\t\tif guid and DBM:IsCreatureGUID(guid) then\n\t\t\tlocal cId = DBM:GetCIDFromGUID(guid)\n\t\t\tfor bosscId, addon in pairs(loadcIds) do\n\t\t\t\tlocal _, _, _, enabled = GetAddOnInfo(addon)\n\t\t\t\tif cId and bosscId and cId == bosscId and not IsAddOnLoaded(addon) and enabled ~= 0 then\n\t\t\t\t\tfor _, v in ipairs(DBM.AddOns) do\n\t\t\t\t\t\tif v.modId == addon then\n\t\t\t\t\t\t\tDBM:LoadMod(v, true)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\t--Loading routines checks for world bosses based on target or mouseover.\n\tfunction DBM:UPDATE_MOUSEOVER_UNIT()\n\t\tloadModByUnit(\"mouseover\")\n\tend\n\n\tfunction DBM:UNIT_TARGET_UNFILTERED(uId)\n\t\tloadModByUnit(uId..\"target\")\n\tend\nend\n\n-----------------------------\n--  Handle Incoming Syncs  --\n-----------------------------\n\ndo\n\tlocal function checkForActualPull()\n\t\tif DBM.Options.RecordOnlyBosses and #inCombat == 0 then\n\t\t\tDBM:StopLogging()\n\t\tend\n\tend\n\n\tlocal syncHandlers, whisperSyncHandlers, guildSyncHandlers = {}, {}, {}\n\n\t-- DBM uses the following prefixes since 4.1 as pre-4.1 sync code is going to be incompatible anways, so this is the perfect opportunity to throw away the old and long names\n\t-- M = Mod\n\t-- C = Combat start\n\t-- GC = Guild Combat Start\n\t-- IS = Icon set info\n\t-- K = Kill\n\t-- H = Hi!\n\t-- V = Incoming version information\n\t-- U = User Timer\n\t-- PT = Pull Timer (for sound effects, the timer itself is still sent as a normal timer)\n\t-- RT = Request Timers\n\t-- CI = Combat Info\n\t-- TR = Timer Recovery\n\t-- IR = Instance Info Request\n\t-- IRE = Instance Info Requested Ended/Canceled\n\t-- II = Instance Info\n\t-- WBE = World Boss engage info\n\t-- WBD = World Boss defeat info\n\t-- WBA = World Buff Activation\n\t-- RLO = Raid Leader Override\n\t-- NS = Note Share\n\t-- L = Boss Loot Info\n\n\tsyncHandlers[\"DBMv4-Mod\"] = function(sender, mod, revision, event, ...)\n\t\tmod = DBM:GetModByName(mod or \"\")\n\t\tif mod and event and revision then\n\t\t\trevision = tonumber(revision) or 0\n\t\t\tmod:ReceiveSync(event, sender, revision, ...)\n\t\tend\n\tend\n\n\tsyncHandlers[\"DBMv4-NS\"] = function(sender, modid, modvar, text, abilityName)\n\t\tif sender == playerName then return end\n\t\tif DBM.Options.BlockNoteShare or InCombatLockdown() or UnitAffectingCombat(\"player\") or IsFalling() or DBM:GetRaidRank(sender) == 0 then return end\n\t\tlocal _, zoneType = IsInInstance()\n\t\tif zoneType == \"pvp\" or zoneType == \"arena\" then return end\n\t\tlocal mod = DBM:GetModByName(modid or \"\")\n\t\tlocal ability = abilityName or CL.UNKNOWN\n\t\tif mod and modvar and text and text ~= \"\" then\n\t\t\tif DBM:AntiSpam(5, modvar) then--Don't allow calling same note more than once per 5 seconds\n\t\t\t\tDBM:AddMsg(L.NOTE_SHARE_SUCCESS:format(sender, abilityName))\n\t\t\t\tDBM:ShowNoteEditor(mod, modvar, ability, text, sender)\n\t\t\telse\n\t\t\t\tDBM:Debug(sender..\" is attempting to send too many notes so notes are being throttled\")\n\t\t\tend\n\t\telse\n\t\t\tDBM:AddMsg(L.NOTE_SHARE_FAIL:format(sender, ability))\n\t\tend\n\tend\n\n\tsyncHandlers[\"DBMv4-Pull\"] = function(sender, delay, mod, modRevision, startHp, _, modHFRevision, event) -- sender, delay, mod, modRevision, startHp, dbmRevision, modHFRevision, event\n\t\tif not dbmIsEnabled or sender == playerName then return end\n\t\tif LastInstanceType == \"pvp\" then return end\n\t\tif LastInstanceType == \"none\" and (not UnitAffectingCombat(\"player\") or #inCombat > 0) then--world boss\n\t\t\tlocal senderuId = DBM:GetRaidUnitId(sender)\n\t\t\tif not senderuId then return end--Should never happen, but just in case. If happens, MANY \"C\" syncs are sent. losing 1 no big deal.\n\t\t\tlocal x, y = GetPlayerMapPosition(senderuId)\n\t\t\tif x == 0 and y == 0 then return end--not same zone\n\t\t\tlocal range = DBM.RangeCheck:GetDistance(\"player\", senderuId)--Same zone, so check range\n\t\t\tif not range or range > 120 then return end\n\t\tend\n\t\tif not cSyncSender[sender] then\n\t\t\tcSyncSender[sender] = true\n\t\t\tcSyncReceived = cSyncReceived + 1\n\t\t\tif cSyncReceived > 2 then -- need at least 3 sync to combat start. (for security)\n\t\t\t\tlocal lag = select(3, GetNetStats()) / 1000\n\t\t\t\tdelay = tonumber(delay or 0) or 0\n\t\t\t\tmod = DBM:GetModByName(mod or \"\")\n\t\t\t\tmodRevision = tonumber(modRevision or 0) or 0\n\t\t\t\t--dbmRevision = tonumber(dbmRevision or 0) or 0\n\t\t\t\tmodHFRevision = tonumber(modHFRevision or 0) or 0\n\t\t\t\tstartHp = tonumber(startHp or -1) or -1\n\t\t\t\t--if dbmRevision < 10481 then return end\n\t\t\t\tif mod and delay and (not mod.zones or mod.zones[LastInstanceMapID] or mod.zones[LastInstanceZoneName]) and (not mod.minSyncRevision or modRevision >= mod.minSyncRevision) and not (#inCombat > 0 and mod.noMultiBoss) then\n\t\t\t\t\tDBM:StartCombat(mod, delay + lag, \"SYNC from - \"..sender, true, startHp, event)\n\t\t\t\t\tif mod.revision < modHFRevision then--mod.revision because we want to compare to OUR revision not senders\n\t\t\t\t\t\t--There is a newer RELEASE version of DBM out that has this mods fixes that we do not possess\n\t\t\t\t\t\tif DBM.HighestRelease >= modHFRevision and DBM.ReleaseRevision < modHFRevision then\n\t\t\t\t\t\t\tshowConstantReminder = 2\n\t\t\t\t\t\t\tif DBM:AntiSpam(3, \"HOTFIX\") then\n\t\t\t\t\t\t\t\tAddMsg(DBM, L.UPDATEREMINDER_HOTFIX)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\telse--This mods fixes are in an alpha version\n\t\t\t\t\t\t\tif DBM:AntiSpam(3, \"HOTFIX\") then\n\t\t\t\t\t\t\t\tAddMsg(DBM, L.UPDATEREMINDER_HOTFIX_ALPHA)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\tsyncHandlers[\"DBMv4-RLO\"] = function(sender, version, statusWhisper, guildStatus, raidIcons, chatBubbles)\n\t\tif (DBM:GetRaidRank(sender) ~= 2 or not IsInGroup()) then return end--If not on group, we're probably sender, don't disable status. IF not leader, someone is trying to spoof this, block that too\n\t\tif not version or version ~= \"1\" then return end--Ignore old versions\n\t\tDBM:Debug(\"Raid leader override comm Received\")\n\t\tstatusWhisper, guildStatus, raidIcons, chatBubbles = tonumber(statusWhisper) or 0, tonumber(guildStatus) or 0, tonumber(raidIcons) or 0, tonumber(chatBubbles) or 0\n\t\tlocal activated = false\n\t\tif statusWhisper == 1 then\n\t\t\tactivated = true\n\t\t\tprivate.statusWhisperDisabled = true\n\t\tend\n\t\tif guildStatus == 1 then\n\t\t\tactivated = true\n\t\t\tprivate.statusGuildDisabled = true\n\t\tend\n\t\tif raidIcons == 1 then\n\t\t\tactivated = true\n\t\t\tprivate.raidIconsDisabled = true\n\t\tend\n\t\tif chatBubbles == 1 then\n\t\t\tactivated = true\n\t\t\tprivate.chatBubblesDisabled = true\n\t\tend\n\t\tif activated then\n\t\t\tAddMsg(L.OVERRIDE_ACTIVATED)\n\t\tend\n\tend\n\n\tsyncHandlers[\"DBMv4-IS\"] = function(_, guid, ver, optionName)\n\t\tDBM:Debug((\"DBMv4-IS received %s %s %s\"):format(guid, ver, optionName), 3)\n\t\tver = tonumber(ver) or 0\n\t\tif ver > (iconSetRevision[optionName] or 0) then--Save first synced version and person, ignore same version. refresh occurs only above version (fastest person)\n\t\t\ticonSetRevision[optionName] = ver\n\t\t\ticonSetPerson[optionName] = guid\n\t\tend\n\t\tif iconSetPerson[optionName] == UnitGUID(\"player\") then--Check if that highest version was from ourself\n\t\t\tprivate.canSetIcons[optionName] = true\n\t\telse--Not from self, it means someone with a higher version than us probably sent it\n\t\t\tprivate.canSetIcons[optionName] = false\n\t\tend\n\t\tlocal name = DBM:GetFullPlayerNameByGUID(iconSetPerson[optionName]) or CL.UNKNOWN\n\t\tDBM:Debug(name..\" was elected icon setter for \"..optionName, 2)\n\t\tDBM:AddMsg(name..\" was elected icon setter for \"..optionName)\n\tend\n\n\tsyncHandlers[\"DBMv4-Kill\"] = function(_, cId)\n\t\tif select(2, IsInInstance()) == \"pvp\" or select(2, IsInInstance()) == \"none\" then return end\n\t\tcId = tonumber(cId or \"\")\n\t\tif cId then DBM:OnMobKill(cId, true) end\n\tend\n\n\tdo\n\t\tlocal lootTableBySender = {}\n\t\tlocal function lootValidateAndSendEvent(encounterId, lootSourceName, lootSourceGUID, lootSourceID, itemID, itemLink, quantity, slot, texture, _, counter) -- finalItem\n\t\t\t-- build BossBanner encounter cache if needed\n\t\t\tBossBanner.encounterLootCache[encounterId] = BossBanner.encounterLootCache[encounterId] or {}\n\t\t\tBossBanner.encounterLootCache[encounterId][lootSourceID] = BossBanner.encounterLootCache[encounterId][lootSourceID] or {}\n\t\t\tBossBanner.encounterLootCache[encounterId][lootSourceID][itemID] = BossBanner.encounterLootCache[encounterId][lootSourceID][itemID] or {}\n\n\t\t\tif BossBanner.encounterLootCache[encounterId][lootSourceID][itemID][counter] == nil then -- only check for nil. false has different meaning (cached, not synced)\n\t\t\t\ttinsert(BossBanner.encounterLootCache[encounterId][lootSourceID][itemID], false)\n\t\t\tend\n\n\t\t\t-- check if BossBanner encounterLootCache already has the looted item\n\t\t\tif BossBanner.encounterLootCache[encounterId] and BossBanner.encounterLootCache[encounterId][lootSourceID] and BossBanner.encounterLootCache[encounterId][lootSourceID][itemID] then\n\t\t\t\tlocal foundUnsyncedItem = false\n\t\t\t\tfor lootItemIdx, synced in ipairs(BossBanner.encounterLootCache[encounterId][lootSourceID][itemID]) do\n\t\t\t\t\tif not synced then\n\t\t\t\t\t\tfoundUnsyncedItem = true\n\t\t\t\t\t\tBossBanner.encounterLootCache[encounterId][lootSourceID][itemID][lootItemIdx] = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tif not foundUnsyncedItem then\n\t\t\t\t\tDBM:Debug(\"BossBanner: item already cached and synced. Ending sync for encounterId: \"..encounterId..\", lootSourceName: \"..lootSourceName..\", lootSourceGUID: \"..lootSourceGUID..\", itemID: \"..itemID..\", itemLink: \"..itemLink..\", quantity: \"..quantity..\", slot: \"..slot..\", texture: \"..texture, 3)\n\t\t\t\t\treturn\n\t\t\t\tend\n\t\t\tend\n\n\t\t\t-- check if BossBanner.pendingLoot is empty or already has the looted item\n\t\t\tif next(BossBanner.pendingLoot) == nil then\n\t\t\t\tDBM:Debug(\"Sending BossBanner event, no pendingLoot: ENCOUNTER_LOOT_RECEIVED, with args: \"..encounterId..\", \"..itemID..\", \"..itemLink..\", \"..quantity..\", \"..slot..\", \"..texture..\", \"..lootSourceName..\", \"..lootSourceGUID, 3)\n\t\t\t\tBossBanner:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", encounterId, itemID, itemLink, quantity, slot, texture, lootSourceName, lootSourceGUID)\n\t\t\telse\n\t\t\t\tlocal sendLootEvent = true\n\t\t\t\tfor _, lootEntry in ipairs(BossBanner.pendingLoot) do -- indexed table with each pair being a loot entry with { itemID = itemID, quantity = quantity, slot = slot, lootNameToDisplay = lootNameToDisplay, itemLink = itemLink }\n\t\t\t\t\tif lootEntry[\"itemID\"] == itemID and lootEntry[\"slot\"] == slot then -- item already added to pendingLoot, don't add it again\n\t\t\t\t\t\tsendLootEvent = false\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tif sendLootEvent then\n\t\t\t\t\tDBM:Debug(\"Sending BossBanner event: ENCOUNTER_LOOT_RECEIVED, with args: \"..encounterId..\", \"..itemID..\", \"..itemLink..\", \"..quantity..\", \"..slot..\", \"..texture..\", \"..lootSourceName..\", \"..lootSourceGUID, 3)\n\t\t\t\t\tBossBanner:OnEvent(\"ENCOUNTER_LOOT_RECEIVED\", encounterId, itemID, itemLink, quantity, slot, texture, lootSourceName, lootSourceGUID)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\n\t\tlocal function lootDispatcher(sender, encounterId, lootSourceID, lootSourceName, lootSourceGUID, itemID, itemLink, quantity, slot, texture, finalItem)\n\t\t\tlootTableBySender[sender] = lootTableBySender[sender] or {}\n\t\t\tlootTableBySender[sender][encounterId] = lootTableBySender[sender][encounterId] or {}\n\t\t\tlootTableBySender[sender][encounterId][lootSourceID] = lootTableBySender[sender][encounterId][lootSourceID] or {}\n\t\t\tlootTableBySender[sender][encounterId][lootSourceID][slot] = { itemID = itemID, itemLink = itemLink, quantity = quantity, slot = slot, texture = texture, finalItem = finalItem }\n\n\t\t\tif finalItem then\n\t\t\t\t-- add counter of each itemID and max number of duplicates\n\t\t\t\tlocal lootCounter = {}\n\t\t\t\tfor _, lootSlotTable in pairs(lootTableBySender[sender][encounterId][lootSourceID]) do\n\t\t\t\t\tlootCounter[lootSlotTable.itemID] = (lootCounter[lootSlotTable.itemID] or 0) + 1\n\t\t\t\t\tDBM:Debug(\"Dispatching BossBanner loot by sender \"..sender..\", with args: encounterId: \"..encounterId..\", lootSourceName: \"..lootSourceName..\", lootSourceGUID: \"..lootSourceGUID..\", itemID: \"..lootSlotTable.itemID..\", itemLink: \"..lootSlotTable.itemLink..\", quantity: \"..lootSlotTable.quantity..\", slot: \"..lootSlotTable.slot..\", texture: \"..lootSlotTable.texture..\", finalItem: \"..tostring(lootSlotTable.finalItem)..\", lootCounter: \"..lootCounter[lootSlotTable.itemID], 3)\n\t\t\t\t\tlootValidateAndSendEvent(encounterId, lootSourceName, lootSourceGUID, lootSourceID, lootSlotTable.itemID, lootSlotTable.itemLink, lootSlotTable.quantity, lootSlotTable.slot, lootSlotTable.texture, lootSlotTable.finalItem, lootCounter[lootSlotTable.itemID])\n\t\t\t\tend\n\t\t\t\ttwipe(lootCounter)\n\t\t\tend\n\t\tend\n\n\t\tsyncHandlers[\"DBMv4-L\"] = function(sender, version, locale, encounterId, _, lootSourceName, lootSourceGUID, itemID, itemLink, quantity, slot, texture, finalItem) -- version, locale, encounterId, encounterName, lootSourceName, lootSourceGUID, itemID, itemLink, tostring(quantity), tostring(slot), texture, finalItem\n\t\t\tif not BossBanner then return end\n\t\t\tDBM:Debug(\"Receiving BossBanner loot sync from \"..sender..\", with args --> version: \"..tostring(version)..\", locale: \"..tostring(locale)..\", encounterId: \"..tostring(encounterId)..\", lootSourceName: \"..tostring(lootSourceName)..\", lootSourceGUID: \"..tostring(lootSourceGUID)..\", itemID: \"..tostring(itemID)..\", itemLink: \"..tostring(itemLink)..\", quantity: \"..tostring(quantity)..\", slot: \"..tostring(slot)..\", texture: \"..tostring(texture)..\", finalItem: \"..tostring(finalItem), 3)\n\t\t\tif not version or version ~= \"3\" then return end -- ignore old versions (previous sync had no version and antispam string changed during development)\n\t\t\t-- check BossBanner encounterLootCache for the looted item\n\t\t\tlocal isNPC = lootSourceGUID ~= \"nil\"\n\t\t\tlocal lootSourceID = isNPC and lootSourceGUID or lootSourceName\n\t\t\tif locale ~= GetLocale() then\n\t\t\t\t-- try to recover lootSourceName with correct locale from NPC\n\t\t\t\tif isNPC then\n\t\t\t\t\tlocal senderUnit = DBM:GetRaidUnitId(sender)\n\t\t\t\t\tif not senderUnit then\n\t\t\t\t\t\tDBM:Debug(\"BossBanner: ignored loot from (\"..lootSourceID..\") with different locale (\"..locale..\") because sender not found in raid or party.\", 3)\n\t\t\t\t\t\treturn\n\t\t\t\t\tend\n\t\t\t\t\tlootSourceName = UnitName(senderUnit..\"target\")\n\t\t\t\t\tif not lootSourceName or lootSourceName == \"\" then\n\t\t\t\t\t\tDBM:Debug(\"BossBanner: ignored loot from (\"..lootSourceID..\") with different locale (\"..locale..\") because sender target has no name.\", 3)\n\t\t\t\t\t\treturn\n\t\t\t\t\tend\n\t\t\t\t\tDBM:Debug(\"BossBanner: recovered lootSourceName (\"..lootSourceName..\") with different locale (\"..locale..\").\", 3)\n\t\t\t\telse\n\t\t\t\t\tDBM:Debug(\"BossBanner: ignored loot from (\"..lootSourceID..\") with different locale (\"..locale..\").\", 3)\n\t\t\t\t\treturn\n\t\t\t\tend\n\t\t\tend\n\t\t\tlootDispatcher(sender, encounterId, lootSourceID, lootSourceName, lootSourceGUID, itemID, itemLink, tonumber(quantity), tonumber(slot), texture, (finalItem == \"true\" and true or false))\n\t\tend\n\tend\n\n\tlocal dummyMod -- dummy mod for the pull timer\n\tsyncHandlers[\"DBMv4-PT\"] = function(sender, timer, senderMapID, target)\n\t\tif DBM.Options.DontShowUserTimers then return end\n\t\tlocal isTank = UnitGroupRolesAssigned(sender)\n\t\tlocal LFGTankException = IsPartyLFG() and isTank\n\t\tif (DBM:GetRaidRank(sender) == 0 and IsInGroup() and not LFGTankException) or select(2, IsInInstance()) == \"pvp\" then\n\t\t\treturn\n\t\tend\n\t\t--Abort if mapID filter is enabled and sender actually sent a mapID. if no mapID is sent, it's always passed through (IE BW pull timers)\n\t\tif DBM.Options.DontShowPTNoID and senderMapID and tonumber(senderMapID) ~= LastInstanceMapID then return end\n\t\ttimer = tonumber(timer or 0)\n\t\t--We want to permit 0 itself, but block anything negative number or anything between 0 and 3\n\t\tif (timer > 0 and timer < 3) or timer < 0 then\n\t\t\treturn\n\t\tend\n\t\tif timer == 0 or DBM:AntiSpam(1, \"PT\"..sender) then--prevent double pull timer from BW and other mods that are sending D4 and D5 at same time\n\t\t\tif not dummyMod then\n\t\t\t\tlocal threshold = DBM.Options.PTCountThreshold2\n\t\t\t\tthreshold = floor(threshold)\n\t\t\t\tdummyMod = DBM:NewMod(\"PullTimerCountdownDummy\")\n\t\t\t\tDBM:GetModLocalization(\"PullTimerCountdownDummy\"):SetGeneralLocalization{ name = L.MINIMAP_TOOLTIP_HEADER }\n\t\t\t\tdummyMod.text = dummyMod:NewAnnounce(\"%s\", 1, \"Interface\\\\Icons\\\\Ability_Warrior_OffensiveStance\")\n\t\t\t\tdummyMod.geartext = dummyMod:NewSpecialWarning(\"  %s  \", nil, nil, nil, 3)\n\t\t\t\tdummyMod.timer = dummyMod:NewTimer(20, \"%s\", \"Interface\\\\Icons\\\\Ability_Warrior_OffensiveStance\", nil, nil, 0, nil, nil, DBM.Options.DontPlayPTCountdown and 0 or 4, threshold, nil, nil, nil, nil, nil, nil, \"pull\")\n\t\t\tend\n\t\t\t--Cancel any existing pull timers before creating new ones, we don't want double countdowns or mismatching blizz countdown text (cause you can't call another one if one is in progress)\n\t\t\tif not DBM.Options.DontShowPT2 then--and DBT:GetBar(L.TIMER_PULL)\n\t\t\t\tdummyMod.timer:Stop()\n\t\t\tend\n\t\t\tlocal timerTrackerRunning = false\n\t\t\tif not DBM.Options.DontShowPTCountdownText and TT then\n\t\t\t\tfor _, tttimer in pairs(TT.timerList) do\n\t\t\t\t\tif not tttimer.isFree then--Timer event running\n\t\t\t\t\t\tif tttimer.type == 3 then--Its a pull timer event, this is one we cancel before starting a new pull timer\n\t\t\t\t\t\t\tTT:FreeTimerTrackerTimer(tttimer)\n\t\t\t\t\t\telse--Verify that a TimerTracker event NOT started by DBM isn't running, if it is, prevent executing new TimerTracker events below\n\t\t\t\t\t\t\ttimerTrackerRunning = true\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tdummyMod.text:Cancel()\n\t\t\tif timer == 0 then return end--\"/dbm pull 0\" will strictly be used to cancel the pull timer (which is why we let above part of code run but not below)\n\t\t\tDBM:FlashClientIcon()\n\t\t\tif not DBM.Options.DontShowPT2 then\n\t\t\t\tdummyMod.timer:Start(timer, L.TIMER_PULL)\n\t\t\t\tsendSync(\"DBMv4-Pizza\", (\"%s\\t%s\\t%s\"):format(timer, L.TIMER_PULL, tostring(true))) -- Backwards compatibility so old DBMs can receive pull timers from this DBM\n\t\t\tend\n\t\t\tif not DBM.Options.DontShowPTCountdownText and TT then\n\t\t\t\tif not timerTrackerRunning then--if a TimerTracker event is running not started by DBM, block creating one of our own (object gets buggy if it has 2+ events running)\n\t\t\t\t\t--Start A TimerTracker timer using the new countdown type 3 type (ie what C_PartyInfo.DoCountdown triggers, but without sending it to entire group)\n\t\t\t\t\tTT:OnEvent(\"START_TIMER\", 3, timer, timer)\n\t\t\t\t\t--Find the timer object DBM just created and hack our own changes into it.\n\t\t\t\t\tfor _, tttimer in pairs(TT.timerList) do\n\t\t\t\t\t\tif tttimer.type == 3 and not tttimer.isFree then\n\t\t\t\t\t\t\t--We don't want the PVP bar, we only want timer text\n\t\t\t\t\t\t\tif timer > 10 then\n\t\t\t\t\t\t\t\t--b.startNumbers:Play()\n\t\t\t\t\t\t\t\ttttimer.StatusBar:Hide()\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tif not DBM.Options.DontShowPTText then\n\t\t\t\tif target then\n\t\t\t\t\tdummyMod.text:Show(L.ANNOUNCE_PULL_TARGET:format(target, timer, sender))\n\t\t\t\t\tdummyMod.text:Schedule(timer, L.ANNOUNCE_PULL_NOW_TARGET:format(target))\n\t\t\t\telse\n\t\t\t\t\tdummyMod.text:Show(L.ANNOUNCE_PULL:format(timer, sender))\n\t\t\t\t\tdummyMod.text:Schedule(timer, L.ANNOUNCE_PULL_NOW)\n\t\t\t\tend\n\t\t\tend\n\t\t\tif DBM.Options.EventSoundPullTimer and DBM.Options.EventSoundPullTimer ~= \"\" and DBM.Options.EventSoundPullTimer ~= \"None\" then\n\t\t\t\tDBM:PlaySoundFile(DBM.Options.EventSoundPullTimer, nil, true)\n\t\t\tend\n\t\t\tif DBM.Options.RecordOnlyBosses then\n\t\t\t\tDBM:StartLogging(timer, checkForActualPull)--Start logging here to catch pre pots.\n\t\t\tend\n\t\t\tif DBM.Options.CheckGear then\n\t\t\t\tlocal weapon = GetInventoryItemLink(\"player\", 16)\n\t\t\t\tlocal fishingPole = false\n\t\t\t\tif weapon then\n\t\t\t\t\tlocal _, _, _, _, _, _, type = GetItemInfo(weapon)\n\t\t\t\t\tif type and type == L.GEAR_FISHING_POLE then\n\t\t\t\t\t\tfishingPole = true\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tif GetNumRaidMembers() > 0 and (not weapon or fishingPole) then\n\t\t\t\t\tdummyMod.geartext:Show(L.GEAR_WARNING_WEAPON)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\tdo\n\t\tlocal dummyMod2 -- dummy mod for the break timer\n\t\tfunction breakTimerStart(self, timer, sender)\n\t\t\tif not dummyMod2 then\n\t\t\t\tlocal threshold = DBM.Options.PTCountThreshold2\n\t\t\t\tthreshold = floor(threshold)\n\t\t\t\tdummyMod2 = DBM:NewMod(\"BreakTimerCountdownDummy\")\n\t\t\t\tDBM:GetModLocalization(\"BreakTimerCountdownDummy\"):SetGeneralLocalization{ name = L.MINIMAP_TOOLTIP_HEADER }\n\t\t\t\tdummyMod2.text = dummyMod2:NewAnnounce(\"%s\", 1, \"Interface\\\\Icons\\\\SPELL_HOLY_BORROWEDTIME\")\n\t\t\t\t--timer, name, icon, optionDefault, optionName, colorType, inlineIcon, keep, countdown, countdownMax, r, g, b, spellId, requiresCombat, waCustomName, customType\n\t\t\t\tdummyMod2.timer = dummyMod2:NewTimer(20, L.TIMER_BREAK, \"Interface\\\\Icons\\\\SPELL_HOLY_BORROWEDTIME\", nil, nil, 0, nil, nil, DBM.Options.DontPlayPTCountdown and 0 or 1, threshold, nil, nil, nil, nil, nil, nil, \"break\")\n\t\t\tend\n\t\t\t--Cancel any existing break timers before creating new ones, we don't want double countdowns or mismatching blizz countdown text (cause you can't call another one if one is in progress)\n\t\t\tif not DBM.Options.DontShowPT2 then--and DBT:GetBar(L.TIMER_BREAK)\n\t\t\t\tdummyMod2.timer:Stop()\n\t\t\tend\n\t\t\tdummyMod2.text:Cancel()\n\t\t\tDBM.Options.RestoreSettingBreakTimer = nil\n\t\t\tif timer == 0 then return end--\"/dbm break 0\" will strictly be used to cancel the break timer (which is why we let above part of code run but not below)\n\t\t\tself.Options.RestoreSettingBreakTimer = timer..\"/\"..time()\n\t\t\tif not self.Options.DontShowPT2 then\n\t\t\t\tdummyMod2.timer:Start(timer)\n\t\t\t\tsendSync(\"DBMv4-Pizza\", (\"%s\\t%s\\t%s\"):format(timer, L.TIMER_BREAK, tostring(true))) -- Backwards compatibility so old DBMs can receive break timers from this DBM\n\t\t\tend\n\t\t\tif not self.Options.DontShowPTText then\n\t\t\t\tlocal hour, minute = GetGameTime()\n\t\t\t\tminute = minute+(timer/60)\n\t\t\t\tif minute >= 60 then\n\t\t\t\t\thour = hour + 1\n\t\t\t\t\tminute = minute - 60\n\t\t\t\tend\n\t\t\t\tminute = floor(minute)\n\t\t\t\tif minute < 10 then\n\t\t\t\t\tminute = tostring(0 .. minute)\n\t\t\t\tend\n\t\t\t\tdummyMod2.text:Show(L.BREAK_START:format(strFromTime(timer)..\" (\"..hour..\":\"..minute..\")\", sender))\n\t\t\t\tif timer/60 > 10 then dummyMod2.text:Schedule(timer - 10*60, L.BREAK_MIN:format(10)) end\n\t\t\t\tif timer/60 > 5 then dummyMod2.text:Schedule(timer - 5*60, L.BREAK_MIN:format(5)) end\n\t\t\t\tif timer/60 > 2 then dummyMod2.text:Schedule(timer - 2*60, L.BREAK_MIN:format(2)) end\n\t\t\t\tif timer/60 > 1 then dummyMod2.text:Schedule(timer - 1*60, L.BREAK_MIN:format(1)) end\n\t\t\t\tdummyMod2.text:Schedule(timer, L.ANNOUNCE_BREAK_OVER:format(hour..\":\"..minute))\n\t\t\tend\n\t\t\tAceTimer:ScheduleTimer(function() self.Options.RestoreSettingBreakTimer = nil end, timer)\n\t\tend\n\tend\n\n\tsyncHandlers[\"DBMv4-BT\"] = function(sender, timer)\n\t\tif DBM.Options.DontShowUserTimers then return end\n\t\ttimer = tonumber(timer or 0)\n\t\tif timer > 3600 then return end\n\t\tif (DBM:GetRaidRank(sender) == 0 and IsInGroup()) or select(2, IsInInstance()) == \"pvp\" then\n\t\t\treturn\n\t\tend\n\t\tif timer == 0 or DBM:AntiSpam(1, \"BT\"..sender) then\n\t\t\tbreakTimerStart(DBM, timer, sender)\n\t\tend\n\tend\n\n\twhisperSyncHandlers[\"DBMv4-BTR3\"] = function(sender, timer)\n\t\tif DBM.Options.DontShowUserTimers then return end\n\t\ttimer = tonumber(timer or 0)\n\t\tif timer > 3600 then return end\n\t\tDBM:Unschedule(DBM.RequestTimers)--IF we got BTR3 sync, then we know immediately RequestTimers was successful, so abort others\n\t\tif #inCombat >= 1 then return end\n\t\tif DBT:GetBar(L.TIMER_BREAK) then return end--Already recovered. Prevent duplicate recovery\n\t\tDBM:Debug(\"BTR3 calling breakTimerStart from \"..sender..\" with remaining \"..timer, 3)\n\t\tbreakTimerStart(DBM, timer, sender)\n\tend\n\n\tlocal function SendVersion(guild)\n\t\tif guild then\n\t\t\tlocal message = (\"%s\\t%s\\t%s\"):format(tostring(DBM.Revision), tostring(DBM.ReleaseRevision), DBM.DisplayVersion)\n\t\t\tsendGuildSync(\"DBMv4-GV\", message)\n\t\t\treturn\n\t\tend\n\t\tif DBM.Options.FakeBWVersion and not dbmIsEnabled then\n\t\t\tSendAddonMessage(\"BWVR3\", bwVersionResponseString:format(fakeBWVersion), GetNumRaidMembers() > 0 and \"RAID\" or \"PARTY\")\n\t\t\treturn\n\t\tend\n\t\t--(Note, faker isn't to screw with bigwigs nor is theirs to screw with dbm, but rathor raid leaders who don't let people run WTF they want to run)\n\t\tlocal VPVersion\n\t\tlocal VoicePack = DBM.Options.ChosenVoicePack2\n\t\tif not voiceSessionDisabled and VoicePack ~= \"None\" and DBM.VoiceVersions[VoicePack] then\n\t\t\tVPVersion = \"/ VP\"..VoicePack..\": v\"..DBM.VoiceVersions[VoicePack]\n\t\tend\n\t\tif VPVersion then\n\t\t\tsendSync(\"DBMv4-Ver\", (\"%s\\t%s\\t%s\\t%s\\t%s\\t%s\"):format(tostring(DBM.Revision), tostring(DBM.ReleaseRevision), DBM.DisplayVersion, GetLocale(), tostring(not DBM.Options.DontSetIcons), VPVersion))\n\t\telse\n\t\t\tsendSync(\"DBMv4-Ver\", (\"%s\\t%s\\t%s\\t%s\\t%s\"):format(tostring(DBM.Revision), tostring(DBM.ReleaseRevision), DBM.DisplayVersion, GetLocale(), tostring(not DBM.Options.DontSetIcons)))\n\t\tend\n\tend\n\n\tlocal function HandleVersion(revision, version, displayVersion, sender)\n\t\tif version > DBM.Revision then -- Update reminder\n\t\t\tif version > currentFullDate() then return end -- ignore versions higher than current date to prevent abuse\n\t\t\tif #newerVersionPerson < 4 then\n\t\t\t\tif not checkEntry(newerVersionPerson, sender) then\n\t\t\t\t\tnewerVersionPerson[#newerVersionPerson + 1] = sender\n\t\t\t\t\tDBM:Debug(\"Newer version detected from \"..sender..\" : Rev - \"..revision..\", Ver - \"..version..\", Rev Diff - \"..(revision - DBM.Revision), 3)\n\t\t\t\tend\n\t\t\t\tif #newerVersionPerson == 2 and updateNotificationDisplayed < 2 then--Only requires 2 for update notification.\n\t\t\t\t\tif DBM.HighestRelease < version then\n\t\t\t\t\t\tDBM.HighestRelease = version--Increase HighestRelease\n\t\t\t\t\t\tDBM.NewerVersion = displayVersion--Apply NewerVersion\n\t\t\t\t\t\t--UGLY hack to get release version number instead of alpha one\n\t\t\t\t\t\tif DBM.NewerVersion:find(\"alpha\") then\n\t\t\t\t\t\t\tlocal temp1, _ = string.split(\" \", DBM.NewerVersion)--Strip down to just version, no alpha\n\t\t\t\t\t\t\tif temp1 then\n\t\t\t\t\t\t\t\tlocal temp3, temp4, temp5 = string.split(\".\", temp1)--Strip version down to 3 numbers\n\t\t\t\t\t\t\t\tif temp3 and temp4 and temp5 and tonumber(temp5) then\n\t\t\t\t\t\t\t\t\ttemp5 = tonumber(temp5)\n\t\t\t\t\t\t\t\t\ttemp5 = temp5 - 1\n\t\t\t\t\t\t\t\t\ttemp5 = tostring(temp5)\n\t\t\t\t\t\t\t\t\tDBM.NewerVersion = temp3..\".\"..temp4..\".\"..temp5\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\t--Find min revision.\n\t\t\t\t\tupdateNotificationDisplayed = 2\n\t\t\t\t\tAddMsg(DBM, L.UPDATEREMINDER_HEADER:match(\"([^\\n]*)\"))\n\t\t\t\t\tAddMsg(DBM, L.UPDATEREMINDER_HEADER:match(\"\\n(.*)\"):format(displayVersion, showRealDate(version)))\n\t\t\t\t\tshowConstantReminder = 1\n\t\t\t\telseif #newerVersionPerson >= 3 and updateNotificationDisplayed < 3 then--The following code requires at least THREE people to send that higher revision. That should be more than adaquate\n\t\t\t\t\t--Disable if out of date and it's a major patch.\n\t\t\t\t\tif not testBuild and dbmToc < wowTOC then\n\t\t\t\t\t\tupdateNotificationDisplayed = 3\n\t\t\t\t\t\tDBM:ForceDisableSpam()\n\t\t\t\t\t\tDBM:Disable(true)\n\t\t\t\t\t\t--Disallow out of date to run during beta/ptr what so ever.\n\t\t\t\t\telseif testBuild then\n\t\t\t\t\t\tupdateNotificationDisplayed = 3\n\t\t\t\t\t\tDBM:ForceDisableSpam()\n\t\t\t\t\t\tDBM:Disable(true)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\t-- is there a good reason that version information is broadcasted and not unicasted?\n\tsyncHandlers[\"DBMv4-H\"] = function()\n\t\tDBM:Unschedule(SendVersion)--Throttle so we don't needlessly send tons of comms during initial raid invites\n\t\tDBM:Schedule(3, SendVersion)--Send version if 3 seconds have past since last \"Hi\" sync\n\tend\n\n\tguildSyncHandlers[\"DBMv4-GH\"] = function()\n\t\tif DBM.ReleaseRevision >= DBM.HighestRelease then--Do not send version to guild if it's not up to date, since this is only used for update notifcation\n\t\t\tDBM:Unschedule(SendVersion, true)\n\t\t\t--Throttle so we don't needlessly send tons of comms\n\t\t\t--For every 50 players online, DBM has an increasingly lower chance of replying to a version check request. This is because only 3 people actually need to reply\n\t\t\t--50 people or less, 100% chance anyone who saw request will reply\n\t\t\t--100 people on, only 50% chance DBM users replies to request\n\t\t\t--150 people on, only 33% chance a DBM user replies to request\n\t\t\t--1000 people online, only 5% chance a DBM user replies to request\n\t\t\tlocal totalMembers = GetNumGuildMembers()\n\t\t\tlocal online = 0\n\t\t\tfor i = 1, totalMembers do\n\t\t\t\tlocal name, _, _, _, _, _, _, _, connected = GetGuildRosterInfo(i)\n\t\t\t\tif not name then break end\n\n\t\t\t\tif connected then\n\t\t\t\t\tonline = online + 1\n\t\t\t\tend\n\t\t\tend\n\t\t\tlocal chances = (online or 1) / 50\n\t\t\tif chances < 1 then chances = 1 end\n\t\t\tif mrandom(1, chances) == 1 then\n\t\t\t\tDBM:Schedule(5, SendVersion, true)--Send version if 5 seconds have past since last \"Hi\" sync\n\t\t\tend\n\t\tend\n\tend\n\n\tsyncHandlers[\"DBMv4-BV\"] = function(sender, version, hash)--Parsed from bigwigs V7+\n\t\tif version and raid[sender] then\n\t\t\traid[sender].bwversion = version\n\t\t\traid[sender].bwhash = hash or \"\"\n\t\tend\n\tend\n\n\tsyncHandlers[\"DBMv4-Ver\"] = function(sender, revision, version, displayVersion, locale, iconEnabled, VPVersion)\n\t\tif revision == \"Hi!\" then\n\t\t\tDBM:Debug((\"DBMv4-Ver Hi! %s %s %s %s\"):format(DBM.Revision, DBM.ReleaseRevision, DBM.DisplayVersion, GetLocale()), 3)\n\t\t\t-- Use Retail \"H\" syncHandler instead\n\t\t\thandleSync(nil, sender, \"DBMv4-H\")\n\t\telse\n\t\t\tDBM:Debug((\"DBMv4-Ver received %s %s %s %s from %s\"):format(revision, version, displayVersion, locale, sender), 3)\n\t\t\t-- Use Retail \"V\" syncHandler instead\n\t\t\thandleSync(nil, sender, \"DBMv4-V\", revision, version, displayVersion, locale, iconEnabled, VPVersion)\n\t\tend\n\tend\n\n\tsyncHandlers[\"DBMv4-V\"] = function(sender, revision, version, displayVersion, locale, iconEnabled, VPVersion)\n\t\trevision, version = tonumber(revision), tonumber(version)\n\t\tif revision and version and displayVersion and raid[sender] then\n\t\t\traid[sender].revision = revision\n\t\t\traid[sender].version = version\n\t\t\traid[sender].displayVersion = displayVersion\n\t\t\traid[sender].VPVersion = VPVersion\n\t\t\traid[sender].locale = locale\n\t\t\traid[sender].enabledIcons = iconEnabled or \"false\"\n\t\t\tDBM:Debug(\"Received version info from \"..sender..\" : Rev - \"..revision..\", Ver - \"..version..\", Rev Diff - \"..(revision - DBM.Revision), 3)\n\t\t\tHandleVersion(revision, version, displayVersion, sender)\n\t\tend\n\t\tDBM:RAID_ROSTER_UPDATE()\n\tend\n\n\tguildSyncHandlers[\"DBMv4-GV\"] = function(sender, revision, version, displayVersion)\n\t\trevision, version = tonumber(revision), tonumber(version)\n\t\tif revision and version and displayVersion then\n\t\t\tDBM:Debug(\"Received G version info from \"..sender..\" : Rev - \"..revision..\", Ver - \"..version..\", Rev Diff - \"..(revision - DBM.Revision)..\", Display Version \"..displayVersion, 3)\n\t\t\tHandleVersion(revision, version, displayVersion, sender)\n\t\tend\n\tend\n\n\t-- Workaround for mismatched clients locales: L.TIMER_PULL and L.TIMER_BREAK would be different and therefore would not play sounds since the receiver locale would be different than sender locale.\n\tlocal localized_TIMER_PULL = {\n\t\t\"开怪倒计时\",\t--CN\n\t\t\"Pull in\",\t\t--DE, EN\n\t\t\"Iniciando en\",\t--ES\n\t\t\"Pull en\",\t\t-- ES (old DBM)\n\t\t\"Pull dans\",\t--FR\n\t\t\"풀링\",\t\t\t--KR\n\t\t\"풀링 중 입니다\",--KR (old DBM)\n\t\t\"Атака\",\t\t--RU\n\t\t\"戰鬥準備\"\t\t--TW\n\t}\n\tlocal localized_TIMER_BREAK = {\n\t\t\"休息时间！\",\t\t-- CN\n\t\t\"Pause!\",\t\t\t-- DE\n\t\t\"Pause\",\t\t\t-- DE (old DBM)\n\t\t\"Break time!\",\t\t-- EN, FR (old DBM)\n\t\t\"Break starting now -- you have %s! (Sent by %s)\", -- EN (wrong locale, pre 7.09)\n\t\t\"¡Toca descanso!\",\t-- ES\n\t\t\"¡Descanso!\",\t\t-- ES (old DBM)\n\t\t\"Pause !\",\t\t\t-- FR\n\t\t\"쉬는 시간!\",\t\t-- KR\n\t\t\"Перерыв!\",\t\t\t-- RU\n\t\t\"休息時間!\"\t\t\t-- TW\n\t}\n\n\tsyncHandlers[\"DBMv4-Pizza\"] = function(sender, time, text, new)\n\t\tif select(2, IsInInstance()) == \"pvp\" then return end\n\t\tif DBM:GetRaidRank(sender) == 0 then return end\n\t\tif sender == UnitName(\"player\") then return end\n\t\ttime = tonumber(time or 0)\n\t\ttext = tostring(text)\n\t\tif time and text then\n\t\t\tlocal pullTimer = tContains(localized_TIMER_PULL, tostring(text)) and L.TIMER_PULL or nil -- Fixes localization of pull bar text\n\t\t\tlocal breakTimer = tContains(localized_TIMER_BREAK, tostring(text)) and L.TIMER_BREAK or nil -- Fixes localization of break bar text\n\t\t\tif pullTimer then\n\t\t\t\tif new then return end\n\t\t\t\thandleSync(nil, sender, \"DBMv4-PT\", time, text)\n\t\t\telseif breakTimer then\n\t\t\t\tif new then return end\n\t\t\t\thandleSync(nil, sender, \"DBMv4-BT\", time, text)\n\t\t\telse\n\t\t\t\tDBM:CreatePizzaTimer(time, text, nil, sender)\n\t\t\tend\n\t\tend\n\tend\n\n\t-- beware, ugly and missplaced code ahead\n\t-- todo: move this somewhere else\n\tdo\n\t\tlocal accessList = {}\n\t\tlocal savedSender\n\n\t\tlocal inspopup = CreateFrame(\"Frame\", \"DBMPopupLockout\", UIParent)\n\t\tinspopup:SetBackdrop({bgFile = \"Interface\\\\DialogFrame\\\\UI-DialogBox-Background-Dark\",\n\t\t\tedgeFile = \"Interface\\\\DialogFrame\\\\UI-DialogBox-Border\",\n\t\t\ttile = true, tileSize = 16, edgeSize = 16,\n\t\t\tinsets = {left = 1, right = 1, top = 1, bottom = 1}}\n\t\t)\n\t\tinspopup:SetSize(500, 120)\n\t\tinspopup:SetPoint(\"TOP\", UIParent, \"TOP\", 0, -200)\n\t\tinspopup:SetFrameStrata(\"DIALOG\")\n\n\t\tlocal inspopuptext = inspopup:CreateFontString()\n\t\tinspopuptext:SetFontObject(ChatFontNormal)\n\t\tinspopuptext:SetWidth(470)\n\t\tinspopuptext:SetWordWrap(true)\n\t\tinspopuptext:SetPoint(\"TOP\", inspopup, \"TOP\", 0, -15)\n\n\t\tlocal buttonaccept = CreateFrame(\"Button\", nil, inspopup)\n\t\tbuttonaccept:SetNormalTexture(\"Interface\\\\Buttons\\\\UI-DialogBox-Button-Up\")\n\t\tbuttonaccept:SetPushedTexture(\"Interface\\\\Buttons\\\\UI-DialogBox-Button-Down\")\n\t\tbuttonaccept:SetHighlightTexture(\"Interface\\\\Buttons\\\\UI-DialogBox-Button-Highlight\", \"ADD\")\n\t\tbuttonaccept:SetSize(128, 35)\n\t\tbuttonaccept:SetPoint(\"BOTTOM\", inspopup, \"BOTTOM\", -75, 0)\n\n\t\tlocal buttonatext = buttonaccept:CreateFontString()\n\t\tbuttonatext:SetFontObject(ChatFontNormal)\n\t\tbuttonatext:SetPoint(\"CENTER\", buttonaccept, \"CENTER\", 0, 5)\n\t\tbuttonatext:SetText(YES)\n\n\t\tlocal buttondecline = CreateFrame(\"Button\", nil, inspopup)\n\t\tbuttondecline:SetNormalTexture(\"Interface\\\\Buttons\\\\UI-DialogBox-Button-Up\")\n\t\tbuttondecline:SetPushedTexture(\"Interface\\\\Buttons\\\\UI-DialogBox-Button-Down\")\n\t\tbuttondecline:SetHighlightTexture(\"Interface\\\\Buttons\\\\UI-DialogBox-Button-Highlight\", \"ADD\")\n\t\tbuttondecline:SetSize(128, 35)\n\t\tbuttondecline:SetPoint(\"BOTTOM\", inspopup, \"BOTTOM\", 75, 0)\n\n\t\tlocal buttondtext = buttondecline:CreateFontString()\n\t\tbuttondtext:SetFontObject(ChatFontNormal)\n\t\tbuttondtext:SetPoint(\"CENTER\", buttondecline, \"CENTER\", 0, 5)\n\t\tbuttondtext:SetText(NO)\n\n\t\tinspopup:Hide()\n\n\t\tlocal function autoDecline(sender, force)\n\t\t\tinspopup:Hide()\n\t\t\tsavedSender = nil\n\t\t\tif force then\n\t\t\t\tSendAddonMessage(\"DBMv4-II\", \"denied\",  \"WHISPER\", sender)\n\t\t\telse\n\t\t\t\tSendAddonMessage(\"DBMv4-II\", \"timeout\", \"WHISPER\", sender)\n\t\t\tend\n\t\tend\n\n\t\tlocal function showPopupInstanceIdPermission(sender)\n\t\t\tDBM:Unschedule(autoDecline)\n\t\t\tDBM:Schedule(59, autoDecline, sender)\n\t\t\tinspopup:Hide()\n\t\t\tif savedSender ~= sender then\n\t\t\t\tif savedSender then\n\t\t\t\t\tautoDecline(savedSender, 1) -- Do not allow multiple popups, so auto decline to previous sender.\n\t\t\t\tend\n\t\t\t\tsavedSender = sender\n\t\t\tend\n\t\t\tinspopuptext:SetText(L.REQ_INSTANCE_ID_PERMISSION:format(sender, sender))\n\t\t\tbuttonaccept:SetScript(\"OnClick\", function(f) savedSender = nil DBM:Unschedule(autoDecline) accessList[sender] = true syncHandlers[\"DBMv4-IR\"](sender) f:GetParent():Hide() end)\n\t\t\tbuttondecline:SetScript(\"OnClick\", function() autoDecline(sender, 1) end)\n\t\t\tDBM:PlaySound(850)\n\t\t\tinspopup:Show()\n\t\tend\n\n\t\tsyncHandlers[\"DBMv4-IR\"] = function(sender)\n\t\t\tif DBM:GetRaidRank(sender) == 0 or sender == playerName then\n\t\t\t\treturn\n\t\t\tend\n\t\t\taccessList = accessList or {}\n\t\t\tif not accessList[sender] then\n\t\t\t\t-- ask for permission\n\t\t\t\tshowPopupInstanceIdPermission(sender)\n\t\t\t\treturn\n\t\t\tend\n\t\t\t-- okay, send data\n\t\t\tlocal sentData = false\n\t\t\tfor i = 1, GetNumSavedInstances() do\n\t\t\t\tlocal name, id, _, difficulty, locked, extended, _, isRaid, maxPlayers, textDiff, _, progress = GetSavedInstanceInfo(i)\n\t\t\t\tif (locked or extended) and isRaid then -- only report locked raid instances\n\t\t\t\t\tSendAddonMessage(\"DBMv4-II\", \"Data\\t\" .. name .. \"\\t\" .. id .. \"\\t\" .. difficulty .. \"\\t\" .. maxPlayers .. \"\\t\" .. (progress or 0) .. \"\\t\" .. textDiff, \"WHISPER\", sender)\n\t\t\t\t\tsentData = true\n\t\t\t\tend\n\t\t\tend\n\t\t\tif not sentData then\n\t\t\t\t-- send something even if there is nothing to report so the receiver is able to tell you apart from someone who just didn't respond...\n\t\t\t\tSendAddonMessage(\"DBMv4-II\", \"NoData\", \"WHISPER\", sender)\n\t\t\tend\n\t\tend\n\n\t\tsyncHandlers[\"DBMv4-IRE\"] = function(sender)\n\t\t\tlocal popup = inspopup:IsShown()\n\t\t\tif popup and savedSender == sender then -- found the popup with the correct data\n\t\t\t\tsavedSender = nil\n\t\t\t\tDBM:Unschedule(autoDecline)\n\t\t\t\tinspopup:Hide()\n\t\t\tend\n\t\tend\n\n\t\tguildSyncHandlers[\"DBMv4-GCB\"] = function(_, modId, ver, difficulty, name, groupLeader)\n\t\t\tif not DBM.Options.ShowGuildMessages or not difficulty or DBM:GetRaidRank(groupLeader or \"\") == 2 then return end\n\t\t\tif not ver or ver ~= \"4\" then return end--Ignore old versions\n\t\t\tif DBM:AntiSpam(10, \"GCB\") then\n\t\t\t\tif IsInInstance() then return end--Simple filter, if you are inside an instance, just filter it, if not in instance, good to go.\n\t\t\t\tdifficulty = tonumber(difficulty)\n\t\t\t\tif not DBM.Options.ShowGuildMessagesPlus then return end\n\t\t\t\tmodId = tonumber(modId)\n\t\t\t\tlocal bossName = modId and DBM:GetModLocalization(modId).general.name or name or CL.UNKNOWN\n\t\t\t\tlocal difficultyName\n\t\t\t\tif difficulty == 4 then\n\t\t\t\t\tdifficultyName = RAID_DIFFICULTY4\n\t\t\t\telseif difficulty == 3 then\n\t\t\t\t\tdifficultyName = RAID_DIFFICULTY3\n\t\t\t\telseif difficulty == 2 then\n\t\t\t\t\tdifficultyName = PLAYER_DIFFICULTY2\n\t\t\t\telse\n\t\t\t\t\tdifficultyName = PLAYER_DIFFICULTY1\n\t\t\t\tend\n\t\t\t\tDBM:AddMsg(L.GUILD_COMBAT_STARTED:format(difficultyName..\"-\"..bossName, groupLeader))-- \"%s has been engaged by %s's guild group\"\n\t\t\tend\n\t\tend\n\n\t\tguildSyncHandlers[\"DBMv4-GCE\"] = function(_, modId, ver, wipe, time, difficulty, name, groupLeader, wipeHP)\n\t\t\tif not DBM.Options.ShowGuildMessages or not difficulty or DBM:GetRaidRank(groupLeader or \"\") == 2 then return end\n\t\t\tif not ver or ver ~=\"8\" then return end--Ignore old versions\n\t\t\tif DBM:AntiSpam(10, \"GCE\") then\n\t\t\t\tif IsInInstance() then return end--Simple filter, if you are inside an instance, just filter it, if not in instance, good to go.\n\t\t\t\tdifficulty = tonumber(difficulty)\n\t\t\t\tif not DBM.Options.ShowGuildMessagesPlus then return end\n\t\t\t\tmodId = tonumber(modId)\n\t\t\t\tlocal bossName = modId and DBM:GetModLocalization(modId).general.name or name or CL.UNKNOWN\n\t\t\t\tlocal difficultyName\n\t\t\t\tif difficulty == 4 then\n\t\t\t\t\tdifficultyName = RAID_DIFFICULTY4\n\t\t\t\telseif difficulty == 3 then\n\t\t\t\t\tdifficultyName = RAID_DIFFICULTY3\n\t\t\t\telseif difficulty == 2 then\n\t\t\t\t\tdifficultyName = PLAYER_DIFFICULTY2\n\t\t\t\telse\n\t\t\t\t\tdifficultyName = PLAYER_DIFFICULTY1\n\t\t\t\tend\n\t\t\t\tif wipe == \"1\" then\n\t\t\t\t\tDBM:AddMsg(L.GUILD_COMBAT_ENDED_AT:format(groupLeader or CL.UNKNOWN, difficultyName..\"-\"..bossName, wipeHP, time))--\"%s's Guild group has wiped on %s (%s) after %s.\n\t\t\t\telse\n\t\t\t\t\tDBM:AddMsg(L.GUILD_BOSS_DOWN:format(difficultyName..\"-\"..bossName, groupLeader or CL.UNKNOWN, time))--\"%s has been defeated by %s's guild group after %s!\"\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\n\t\tlocal lastRequest = 0\n\t\tlocal numResponses = 0\n\t\tlocal expectedResponses = 0\n\t\tlocal allResponded = false\n\t\tlocal results\n\n\t\tlocal updateInstanceInfo, showResults\n\n\t\twhisperSyncHandlers[\"DBMv4-II\"] = function(sender, result, name, _, diff, maxPlayers, progress, textDiff) -- sender, result, name, id, diff, maxPlayers, progress, textDiff\n\t\t\tif GetTime() - lastRequest > 62 or not results then\n\t\t\t\treturn\n\t\t\tend\n\t\t\tif not result then\n\t\t\t\treturn\n\t\t\tend\n\t\t\tname = name or CL.UNKNOWN\n\t\t\tdiff = tonumber(diff or 0) or 0\n\t\t\tmaxPlayers = tonumber(maxPlayers or 0) or 0\n\t\t\tprogress = tonumber(progress or 0) or 0\n\t\t\ttextDiff = textDiff or \"\"\n\n\t\t\t-- count responses\n\t\t\tif not results.responses[sender] then\n\t\t\t\tresults.responses[sender] = result\n\t\t\t\tnumResponses = numResponses + 1\n\t\t\tend\n\n\t\t\t-- get localized difficulty text\n\t\t\tif textDiff ~= \"\" then\n\t\t\t\tresults.difftext[diff] = textDiff\n\t\t\tend\n\n\t\t\tif result == \"Data\" then\n\t\t\t\t-- got data in that response and not just a \"no\" or \"i'm away\"\n\t\t\t\tlocal instanceId = name..\" \"..maxPlayers..\" \"..diff -- locale-dependant dungeon ID\n\t\t\t\tresults.data[instanceId] = results.data[instanceId] or {\n\t\t\t\t\tids = {}, -- array of all ids of all raid members\n\t\t\t\t\tname = name,\n\t\t\t\t\tdiff = diff,\n\t\t\t\t\tmaxPlayers = maxPlayers,\n\t\t\t\t}\n\n\t\t\t\tresults.data[instanceId].ids[progress] = results.data[instanceId].ids[progress] or { progress = progress }\n\t\t\t\ttinsert(results.data[instanceId].ids[progress], sender)\n\t\t\tend\n\n\t\t\tif numResponses >= expectedResponses then -- unlikely, lol\n\t\t\t\tDBM:Unschedule(updateInstanceInfo)\n\t\t\t\tDBM:Unschedule(showResults)\n\t\t\t\tif not allResponded then --Only display message once in case we get for example 4 syncs the last sender\n\t\t\t\t\tDBM:Schedule(0.99, DBM.AddMsg, DBM, L.INSTANCE_INFO_ALL_RESPONSES)\n\t\t\t\t\tallResponded = true\n\t\t\t\tend\n\t\t\t\tAceTimer:ScheduleTimer(showResults, 1) --Delay results so we allow time for same sender to send more than 1 lockout, otherwise, if we get expectedResponses before all data is sent from 1 user, we clip some of their data.\n\t\t\tend\n\t\tend\n\n\t\tfunction showResults()\n\t\t\tif not results then return end\n\t\t\tlocal resultCount = 0\n\t\t\t-- you could catch some localized instances by observing IDs if there are multiple players with the same instance ID but a different name ;) (not that useful if you are trying to get a fresh instance)\n\t\t\tDBM:AddMsg(L.INSTANCE_INFO_RESULTS, false)\n\t\t\tDBM:AddMsg(\"---\", false)\n\t\t\tfor _, v in pairs(results.data) do\n\t\t\t\tresultCount = resultCount + 1\n\t\t\t\tDBM:AddMsg(L.INSTANCE_INFO_DETAIL_HEADER:format(v.name, (results.difftext[v.diff] or v.diff)), false)\n\t\t\t\tfor id, r in pairs(v.ids) do\n\t\t\t\t\tif r.haveid then\n\t\t\t\t\t\tDBM:AddMsg(L.INSTANCE_INFO_DETAIL_INSTANCE:format(id, r.progress, tconcat(r, \", \")), false)\n\t\t\t\t\telse\n\t\t\t\t\t\tDBM:AddMsg(L.INSTANCE_INFO_DETAIL_INSTANCE2:format(r.progress, tconcat(r, \", \")), false)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tDBM:AddMsg(\"---\", false)\n\t\t\tend\n\t\t\tif resultCount == 0 then\n\t\t\t\tDBM:AddMsg(L.INSTANCE_INFO_NOLOCKOUT, false)\n\t\t\tend\n\t\t\tlocal denied = {}\n\t\t\tlocal away = {}\n\t\t\tlocal noResponse = {}\n\t\t\tfor i = 1, GetNumRaidMembers() do\n\t\t\t\tif not UnitIsUnit(\"raid\"..i, \"player\") then\n\t\t\t\t\ttinsert(noResponse, (GetRaidRosterInfo(i)))\n\t\t\t\tend\n\t\t\tend\n\t\t\tfor i, v in pairs(results.responses) do\n\t\t\t\tif v == \"Data\" or v == \"NoData\" then\n\t\t\t\telseif v == \"timeout\" then\n\t\t\t\t\ttinsert(away, i)\n\t\t\t\telse -- could be \"clicked\" or \"override\", in both cases we don't get the data because the dialog requesting it was dismissed\n\t\t\t\t\ttinsert(denied, i)\n\t\t\t\tend\n\t\t\t\tremoveEntry(noResponse, i)\n\t\t\tend\n\t\t\tif #denied > 0 then\n\t\t\t\tDBM:AddMsg(L.INSTANCE_INFO_STATS_DENIED:format(tconcat(denied, \", \")), false)\n\t\t\tend\n\t\t\tif #away > 0 then\n\t\t\t\tDBM:AddMsg(L.INSTANCE_INFO_STATS_AWAY:format(tconcat(away, \", \")), false)\n\t\t\tend\n\t\t\tif #noResponse > 0 then\n\t\t\t\tDBM:AddMsg(L.INSTANCE_INFO_STATS_NO_RESPONSE:format(tconcat(noResponse, \", \")), false)\n\t\t\tend\n\t\t\tresults = nil\n\t\tend\n\n\t\t-- called when the chat link is clicked\n\t\tfunction DBM:ShowRaidIDRequestResults()\n\t\t\tif not results then -- check if we are currently querying raid IDs, results will be nil if we don't\n\t\t\t\treturn\n\t\t\tend\n\t\t\tself:Unschedule(updateInstanceInfo)\n\t\t\tself:Unschedule(showResults)\n\t\t\tshowResults() -- sets results to nil after the results are displayed, ending the current id request; future incoming data will be discarded\n\t\t\tsendSync(\"DBMv4-IRE\")\n\t\tend\n\n\t\tlocal function getResponseStats()\n\t\t\tif not results then return 0, 0, 0, 0 end\n\t\t\tlocal numResponses = 0\n\t\t\tlocal sent = 0\n\t\t\tlocal denied = 0\n\t\t\tlocal away = 0\n\t\t\tfor _, v in pairs(results.responses) do\n\t\t\t\tnumResponses = numResponses + 1\n\t\t\t\tif v == \"Data\" or v == \"NoData\" then\n\t\t\t\t\tsent = sent + 1\n\t\t\t\telseif v == \"timeout\" then\n\t\t\t\t\taway = away + 1\n\t\t\t\telse -- could be \"clicked\" or \"override\", in both cases we don't get the data because the dialog requesting it was dismissed\n\t\t\t\t\tdenied = denied + 1\n\t\t\t\tend\n\t\t\tend\n\t\t\treturn numResponses, sent, denied, away\n\t\tend\n\n\t\tlocal function getNumDBMUsers() -- without ourselves\n\t\t\tlocal r = 0\n\t\t\tfor _, v in pairs(raid) do\n\t\t\t\tif v.revision and v.name ~= playerName and UnitIsConnected(v.id) then\n\t\t\t\t\tr = r + 1\n\t\t\t\tend\n\t\t\tend\n\t\t\treturn r\n\t\tend\n\n\t\tfunction updateInstanceInfo(timeRemaining, dontAddShowResultNowButton)\n\t\t\tif not results then return end\n\t\t\tlocal numResponses, sent, denied = getResponseStats()\n\t\t\tlocal dbmUsers = getNumDBMUsers()\n\t\t\tDBM:AddMsg(L.INSTANCE_INFO_STATUS_UPDATE:format(numResponses, dbmUsers, sent, denied, timeRemaining), false)\n\t\t\tif not dontAddShowResultNowButton then\n\t\t\t\tif dbmUsers - numResponses <= 7 then -- waiting for 7 or less players, show their names and the early result option\n\t\t\t\t\t-- copied from above, todo: implement a smarter way of keeping track of stuff like this\n\t\t\t\t\tlocal noResponse = {}\n\t\t\t\t\tfor i = 1, GetNumRaidMembers() do\n\t\t\t\t\t\tif not UnitIsUnit(\"raid\"..i, \"player\") and raid[GetRaidRosterInfo(i)] and raid[GetRaidRosterInfo(i)].revision then -- only show players who actually can respond (== DBM users)\n\t\t\t\t\t\t\ttinsert(noResponse, (GetRaidRosterInfo(i)))\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\tfor i, _ in pairs(results.responses) do\n\t\t\t\t\t\tremoveEntry(noResponse, i)\n\t\t\t\t\tend\n\n\t\t\t\t\t--[[\n\t\t\t\t\t-- this looked like the easiest way (for some reason?) to create the player string when writing this code -.-\n\t\t\t\t\tlocal function dup(...) if select(\"#\", ...) == 0 then return else return ..., ..., dup(select(2, ...)) end end\n\t\t\t\t\tDBM:AddMsg(L.INSTANCE_INFO_SHOW_RESULTS:format((\"|Hplayer:%s|h[%s]|h| \"):rep(#noResponse):format(dup(unpack(noResponse)))), false)\n\t\t\t\t\t]]\n\t\t\t\t\t-- code that one can actually read\n\t\t\t\t\tfor i, v in ipairs(noResponse) do\n\t\t\t\t\t\tnoResponse[i] = (\"|Hplayer:%s|h[%s]|h|\"):format(v, v)\n\t\t\t\t\tend\n\t\t\t\t\tDBM:AddMsg(L.INSTANCE_INFO_SHOW_RESULTS:format(tconcat(noResponse, \", \")), false)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\n\t\tfunction DBM:RequestInstanceInfo()\n\t\t\tself:AddMsg(L.INSTANCE_INFO_REQUESTED)\n\t\t\tlastRequest = GetTime()\n\t\t\tallResponded = false\n\t\t\tresults = {\n\t\t\t\tresponses = { -- who responded to our request?\n\t\t\t\t},\n\t\t\t\tdata = { -- the actual data\n\t\t\t\t},\n\t\t\t\tdifftext = {\n\t\t\t\t}\n\t\t\t}\n\t\t\tnumResponses = 0\n\t\t\texpectedResponses = getNumDBMUsers()\n\t\t\tsendSync(\"DBMv4-IR\")\n\t\t\tself:Unschedule(updateInstanceInfo)\n\t\t\tself:Unschedule(showResults)\n\t\t\tself:Schedule(17, updateInstanceInfo, 45, true)\n\t\t\tself:Schedule(32, updateInstanceInfo, 30)\n\t\t\tself:Schedule(48, updateInstanceInfo, 15)\n--\t\t\tAceTimer:ScheduleTimer(showResults,62)\n\t\tend\n\tend\n\n\tguildSyncHandlers[\"DBMv4-WBE\"] = function(sender, modId, realm, health, ver, name)\n\t\tif not ver or ver ~=\"8\" then return end--Ignore old versions\n\t\tif lastBossEngage[modId..realm] and (GetTime() - lastBossEngage[modId..realm] < 30) then return end--We recently got a sync about this boss on this realm, so do nothing.\n\t\tlastBossEngage[modId..realm] = GetTime()\n\t\tif realm == playerRealm and DBM.Options.WorldBossAlert and not mod.InCombat then\n\t\t\tmodId = tonumber(modId)--If it fails to convert into number, this makes it nil\n\t\t\tlocal bossName = modId and DBM:GetModLocalization(modId).general.name or name or CL.UNKNOWN\n\t\t\tDBM:AddMsg(L.WORLDBOSS_ENGAGED:format(bossName, floor(health), sender))\n\t\tend\n\tend\n\n\tguildSyncHandlers[\"DBMv4-WBD\"] = function(sender, modId, realm, ver, name)\n\t\tif not ver or ver ~=\"8\" then return end--Ignore old versions\n\t\tif lastBossDefeat[modId..realm] and (GetTime() - lastBossDefeat[modId..realm] < 30) then return end\n\t\tlastBossDefeat[modId..realm] = GetTime()\n\t\tif realm == playerRealm and DBM.Options.WorldBossAlert and not mod.InCombat then\n\t\t\tmodId = tonumber(modId)--If it fails to convert into number, this makes it nil\n\t\t\tlocal bossName = modId and DBM:GetModLocalization(modId).general.name or name or CL.UNKNOWN\n\t\t\tDBM:AddMsg(L.WORLDBOSS_DEFEATED:format(bossName, sender))\n\t\tend\n\tend\n\n\tguildSyncHandlers[\"DBMv4-WBA\"] = function(sender, bossName, faction, spellId, time, ver)\n\t\tDBM:Debug(\"WBA sync recieved\")\n\t\tif not ver or ver ~= \"4\" then return end--Ignore old versions\n\t\tif lastBossEngage[bossName..faction] and (GetTime() - lastBossEngage[bossName..faction] < 30) then return end--We recently got a sync about this buff on this realm, so do nothing.\n\t\tlastBossEngage[bossName..faction] = GetTime()\n\t\tif DBM.Options.WorldBuffAlert and #inCombat == 0 then\n\t\t\tDBM:Debug(\"WBA sync processing\")\n\t\t\tlocal factionText = faction == \"Alliance\" and FACTION_ALLIANCE or faction == \"Horde\" and FACTION_HORDE or CL.BOTH\n\t\t\tlocal buffName, _, buffIcon = DBM:GetSpellInfo(tonumber(spellId) or 0)\n\t\t\tDBM:AddMsg(L.WORLDBUFF_STARTED:format(buffName or CL.UNKNOWN, factionText, sender))\n\t\t\tDBM:PlaySound(DBM.Options.RaidWarningSound, true)\n\t\t\ttime = tonumber(time)\n\t\t\tif time then\n\t\t\t\tDBT:CreateBar(time, buffName or CL.UNKNOWN, buffIcon or \"Interface\\\\Icons\\\\Spell_Holy_BorrowedTime\")\n\t\t\tend\n\t\tend\n\tend\n\n\twhisperSyncHandlers[\"DBMv4-WBE\"] = function(sender, modId, realm, health, ver, name)\n\t\tif not ver or ver ~= \"8\" then return end--Ignore old versions\n\t\tif lastBossEngage[modId..realm] and (GetTime() - lastBossEngage[modId..realm] < 30) then return end\n\t\tlastBossEngage[modId..realm] = GetTime()\n\t\tif realm == playerRealm and DBM.Options.WorldBossAlert and (not DBM:IsEncounterInProgress() or #inCombat == 0) then\n\t\t\tlocal toonName = sender or CL.UNKNOWN\n\t\t\tmodId = tonumber(modId)--If it fails to convert into number, this makes it nil\n\t\t\tlocal bossName = modId and DBM:GetModLocalization(modId).general.name or name or CL.UNKNOWN\n\t\t\tDBM:AddMsg(L.WORLDBOSS_ENGAGED:format(bossName, floor(health), toonName))\n\t\tend\n\tend\n\n\twhisperSyncHandlers[\"DBMv4-WBD\"] = function(sender, modId, realm, ver, name)\n\t\tif not ver or ver ~=\"8\" then return end--Ignore old versions\n\t\tif lastBossDefeat[modId..realm] and (GetTime() - lastBossDefeat[modId..realm] < 30) then return end\n\t\tlastBossDefeat[modId..realm] = GetTime()\n\t\tif realm == playerRealm and DBM.Options.WorldBossAlert and not mod.InCombat then\n\t\t\tlocal toonName = sender or CL.UNKNOWN\n\t\t\tmodId = tonumber(modId)--If it fails to convert into number, this makes it nil\n\t\t\tlocal bossName = modId and DBM:GetModLocalization(modId).general.name or name or CL.UNKNOWN\n\t\t\tDBM:AddMsg(L.WORLDBOSS_DEFEATED:format(bossName, toonName))\n\t\tend\n\tend\n\n\twhisperSyncHandlers[\"DBMv4-RequestTimers\"] = function(sender)\n\t\tif UnitInBattleground(\"player\") then\n\t\t\tDBM:SendPVPTimers(sender)\n\t\telse\n\t\t\tDBM:SendTimers(sender)\n\t\tend\n\tend\n\n\twhisperSyncHandlers[\"DBMv4-CombatInfo\"] = function(sender, mod, time)\n\t\tmod = DBM:GetModByName(mod or \"\")\n\t\ttime = tonumber(time or 0)\n\t\tif mod and time then\n\t\t\tDBM:ReceiveCombatInfo(sender, mod, time)\n\t\tend\n\tend\n\n\twhisperSyncHandlers[\"DBMv4-TimerInfo\"] = function(sender, mod, timeLeft, totalTime, id, paused, ...)\n\t\tmod = DBM:GetModByName(mod or \"\")\n\t\ttimeLeft = tonumber(timeLeft or 0)\n\t\ttotalTime = tonumber(totalTime or 0)\n\t\tif mod and timeLeft and timeLeft > 0 and totalTime and totalTime > 0 and id then\n\t\t\tDBM:ReceiveTimerInfo(sender, mod, timeLeft, totalTime, id, paused and paused == \"1\" and true or false, ...)\n\t\tend\n\tend\n\n\twhisperSyncHandlers[\"DBMv4-VarInfo\"] = function(sender, mod, name, value)\n\t\tmod = DBM:GetModByName(mod or \"\")\n\t\tvalue = tonumber(value) or value\n\t\tif mod and name and value then\n\t\t\tDBM:ReceiveVariableInfo(sender, mod, name, value)\n\t\tend\n\tend\n\n\thandleSync = function(channel, sender, prefix, ...)\n\t\tif not prefix then\n\t\t\treturn\n\t\tend\n\t\tlocal handler\n\t\t--Whisper syncs sent from non friends are automatically rejected if not from a friend or someone in your group\n\t\tif channel == \"WHISPER\" and sender ~= playerName then -- separate between broadcast and unicast, broadcast must not be sent as unicast or vice-versa\n\t\t\tif (checkForSafeSender(sender, true) or DBM:GetRaidUnitId(sender)) then--Sender passes safety check, or is in group\n\t\t\t\thandler = whisperSyncHandlers[prefix]\n\t\t\tend\n\t\telseif channel == \"GUILD\" then\n\t\t\thandler = guildSyncHandlers[prefix]\n\t\telse\n\t\t\thandler = syncHandlers[prefix]\n\t\tend\n\t\tif handler then\n\t\t\treturn handler(sender, ...)\n\t\tend\n\tend\n\n\tfunction DBM:CHAT_MSG_ADDON(prefix, msg, channel, sender)\n\t\tif strsub(prefix, 1, 5) == DBMPrefix and msg and (channel == \"PARTY\" or channel == \"RAID\" or channel == \"BATTLEGROUND\" or channel == \"WHISPER\" or channel == \"GUILD\") then\n\t\t\thandleSync(channel, sender, prefix, strsplit(\"\\t\", msg))\n\t\telseif (prefix == \"BigWigs\" or strsub(prefix, 1, 2) == \"BW\") and msg and (channel == \"PARTY\" or channel == \"RAID\") then\n\t\t\tif prefix == \"BigWigs\" then--Boss Mod Sync\n\t\t\t\tfor i = 1, #inCombat do\n\t\t\t\t\tlocal mod = inCombat[i]\n\t\t\t\t\tif mod and mod.OnBWSync then\n\t\t\t\t\t\tmod:OnBWSync(msg, sender)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tfor i = 1, #oocBWComms do\n\t\t\t\t\tlocal mod = oocBWComms[i]\n\t\t\t\t\tif mod and mod.OnBWSync then\n\t\t\t\t\t\tmod:OnBWSync(msg, sender)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tlocal bwPrefix = strsub(prefix, 3, 5)\n\t\t\t\tif bwPrefix then\n\t\t\t\t\tif bwPrefix == \"VR3\" then\n\t\t\t\t\t\tlocal verString = msg\n\t\t\t\t\t\tlocal version = tonumber(verString) or 0\n\t\t\t\t\t\tif version == 0 then return end--Just a query\n\t\t\t\t\t\thandleSync(channel, sender, \"DBMv4-BV\", version)--Prefix changed, so it's not handled by DBMs \"V\" handler\n\t\t\t\t\t\tif version > fakeBWVersion then--Newer revision found, upgrade!\n\t\t\t\t\t\t\tfakeBWVersion = version\n\t\t\t\t\t\tend\n\t\t\t\t\telseif bwPrefix == \"VQ3\" then--Version request prefix\n\t\t\t\t\t\tself:Unschedule(SendVersion)\n\t\t\t\t\t\tself:Schedule(3, SendVersion)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\telseif prefix == \"Transcriptor\" and msg then\n\t\t\tfor i = 1, #inCombat do\n\t\t\t\tlocal mod = inCombat[i]\n\t\t\t\tif mod and mod.OnTranscriptorSync then\n\t\t\t\t\tmod:OnTranscriptorSync(msg, sender)\n\t\t\t\tend\n\t\t\tend\n\t\t\tlocal transcriptor = _G[\"Transcriptor\"]\n\t\t\tif msg:find(\"spell:\") and (DBM.Options.DebugLevel > 2 or (transcriptor and transcriptor:IsLogging())) then\n\t\t\t\tlocal spellId = string.match(msg, \"spell:(%d+)\") or CL.UNKNOWN\n\t\t\t\tlocal spellName = string.match(msg, \"h%[(.-)%]|h\") or CL.UNKNOWN\n\t\t\t\tlocal message = \"RAID_BOSS_WHISPER on \"..sender..\" with spell of \"..spellName..\" (\"..spellId..\")\"\n\t\t\t\tself:Debug(message)\n\t\t\tend\n\t\tend\n\tend\nend\n\n----------------------\n--  Pull Detection  --\n----------------------\ndo\n\tlocal targetList = {}\n\tlocal function buildTargetList()\n\t\t-- target or groupMemberTarget\n\t\tlocal uId = ((GetNumRaidMembers() == 0) and \"party\") or \"raid\"\n\t\tfor i = 0, mmax(GetNumRaidMembers(), GetNumPartyMembers()) do\n\t\t\tlocal id = (i == 0 and \"target\") or uId..i..\"target\"\n\t\t\tlocal guid = UnitGUID(id)\n\t\t\tif guid and DBM:IsCreatureGUID(guid) then\n\t\t\t\tlocal cId = DBM:GetCIDFromGUID(guid)\n\t\t\t\ttargetList[cId] = id\n\t\t\tend\n\t\tend\n\t\t-- boss\n\t\tfor i = 0, 5 do\n\t\t\tlocal id = \"boss\" .. i\n\t\t\tlocal guid = UnitGUID(id)\n\t\t\tif guid and DBM:IsCreatureGUID(guid) then\n\t\t\t\tlocal cId = DBM:GetCIDFromGUID(guid)\n\t\t\t\ttargetList[cId] = id\n\t\t\tend\n\t\tend\n\t\t-- focus (for non IEEU scripts)\n\t\tlocal guid = UnitGUID(\"focus\")\n\t\tif guid and DBM:IsCreatureGUID(guid) then\n\t\t\tlocal cId = DBM:GetCIDFromGUID(guid)\n\t\t\ttargetList[cId] = \"focus\"\n\t\tend\n\tend\n\n\tlocal function clearTargetList()\n\t\ttwipe(targetList)\n\tend\n\n\tlocal function scanForCombat(mod, mob, delay, force) -- custom \"force\" arg for 3.3.5a PLAYER_REGEN_DISABLED\n\t\tif not checkEntry(inCombat, mob) then\n\t\t\tbuildTargetList()\n\t\t\tif targetList[mob] then\n\t\t\t\tif mod.noFriendlyEngagement and UnitIsFriend(\"player\", targetList[mob]) then return end\n\t\t\t\tif (force or delay > 0) and UnitAffectingCombat(targetList[mob]) and not (UnitPlayerOrPetInRaid(targetList[mob]) or UnitPlayerOrPetInParty(targetList[mob])) then\n\t\t\t\t\tDBM:StartCombat(mod, delay, \"PLAYER_REGEN_DISABLED\")\n\t\t\t\telseif (delay == 0) and not force then\n\t\t\t\t\tDBM:StartCombat(mod, 0, \"PLAYER_REGEN_DISABLED_AND_MESSAGE\")\n\t\t\t\tend\n\t\t\tend\n\t\t\tclearTargetList()\n\t\tend\n\tend\n\n\tlocal function checkForPull(mob, combatInfo)\n\t\thealthCombatInitialized = false\n\t\t--This just can't be avoided, trying to save cpu by using C_TimerAfter broke this\n\t\t--This needs the redundancy and ability to pass args.\n\t\tscanForCombat(combatInfo.mod, mob, 0, true) -- Since 3.3.5a does not have ENCOUNTER_START, and IEEU is not implemented everywhere, a scan is fired instantly on PLAYER_REGEN_DISABLED, rather than waiting 0.5s. Uses custom arg to use the scanForCombat UnitAffectingCombat checks\n\t\tDBM:Schedule(0.5, scanForCombat, combatInfo.mod, mob, 0.5)\n\t\t-- DBM:Schedule(1.25, scanForCombat, combatInfo.mod, mob, 1.25)\n\t\tDBM:Schedule(2, scanForCombat, combatInfo.mod, mob, 2)\n\t\tDBM:Schedule(2.1, function()\n\t\t\thealthCombatInitialized = true\n\t\tend)\n\tend\n\n\t-- TODO: fix the duplicate code that was added for quick & dirty support of zone IDs\n\n\t-- detects a boss pull based on combat state, this is required for pre-ICC bosses that do not fire INSTANCE_ENCOUNTER_ENGAGE_UNIT events on engage\n\tfunction DBM:PLAYER_REGEN_DISABLED()\n--\t\tlastCombatStarted = GetTime()\n\t\tif not combatInitialized then return end\n\t\tlocal combat = combatInfo[LastInstanceMapID] or combatInfo[LastInstanceZoneName]\n\t\tif dbmIsEnabled and combat then\n\t\t\tfor _, v in ipairs(combat) do\n\t\t\t\tif v.type:find(\"combat\") and not v.noRegenDetection and not (#inCombat > 0 and v.noMultiBoss) then\n\t\t\t\t\tif v.multiMobPullDetection then\n\t\t\t\t\t\tfor _, mob in ipairs(v.multiMobPullDetection) do\n\t\t\t\t\t\t\tif checkForPull(mob, v) then\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\telse\n\t\t\t\t\t\tcheckForPull(v.mob, v)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tif self.Options.AFKHealthWarning and not DBM:IsEncounterInProgress() and UnitIsAFK(\"player\") and self:AntiSpam(5, \"AFK\") then--You are afk and losing health, some griever is trying to kill you while you are afk/tabbed out.\n\t\t\tself:FlashClientIcon()\n\t\t\tlocal voice = DBM.Options.ChosenVoicePack2\n\t\t\tlocal path = 8585--\"Sound\\\\Creature\\\\CThun\\\\CThunYouWillDIe.wav\"\n\t\t\tif not voiceSessionDisabled and voice ~= \"None\" then\n\t\t\t\tpath = \"Interface\\\\AddOns\\\\DBM-VP\"..voice..\"\\\\checkhp.ogg\"\n\t\t\tend\n\t\t\tself:PlaySound(path)\n\t\t\tif UnitHealthMax(\"player\") ~= 0 then\n\t\t\t\tlocal health = UnitHealth(\"player\") / UnitHealthMax(\"player\") * 100\n\t\t\t\tself:AddMsg(L.AFK_WARNING:format(health))\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction DBM:PLAYER_REGEN_ENABLED()\n\t\tif delayedFunction then--Will throw error if not a function, purposely not doing and type(delayedFunction) == \"function\" for now to make sure code works though because it always should be function\n\t\t\tdelayedFunction()\n\t\t\tdelayedFunction = nil\n\t\tend\n\t\tif watchFrameRestore then\n\t\t\tWatchFrame:Show()\n\t\t\twatchFrameRestore = false\n\t\tend\n\t\tif self.Options.FixCLEUOnCombatStart then\n\t\t\tself:Schedule(0.5, CombatLogClearEntries)\n\t\t\tself:Debug(\"Scheduled FixCLEU from PLAYER_REGEN_DISABLED\")\n\t\tend\n\tend\n\n\tlocal function isBossEngaged(cId)\n\t\t-- note that this is designed to work with any number of bosses, but it might be sufficient to check the first 5 unit ids\n\t\tlocal i = 1\n\t\trepeat\n\t\t\tlocal bossUnitId = \"boss\"..i\n\t\t\tlocal bossGUID = not UnitIsDead(bossUnitId) and UnitGUID(bossUnitId) -- check for UnitIsVisible maybe?\n\t\t\tlocal bossCId = bossGUID and DBM:GetCIDFromGUID(bossGUID)\n\t\t\tif bossCId and (type(cId) == \"number\" and cId == bossCId or type(cId) == \"table\" and checkEntry(cId, bossCId)) then\n\t\t\t\treturn true\n\t\t\tend\n\t\t\ti = i + 1\n\t\tuntil not bossGUID\n\tend\n\n\tfunction DBM:INSTANCE_ENCOUNTER_ENGAGE_UNIT()\n\t\tif timerRequestInProgress then return end--do not start ieeu combat if timer request is progressing. (not to break Timer Recovery stuff)\n\t\tlocal combat =  combatInfo[LastInstanceMapID] or combatInfo[LastInstanceZoneName]\n\t\tif dbmIsEnabled and combat then\n\t\t\tself:Debug(\"INSTANCE_ENCOUNTER_ENGAGE_UNIT event fired for zoneId\"..LastInstanceMapID, 3)\n\t\t\tfor _, v in ipairs(combat) do\n\t\t\t\tif not v.noIEEUDetection and not (#inCombat > 0 and v.noMultiBoss) then\n\t\t\t\t\tif v.type:find(\"combat\") and isBossEngaged(v.multiMobPullDetection or v.mob) then\n\t\t\t\t\t\tself:StartCombat(v.mod, 0, \"IEEU\")\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal questFrame\n\tlocal questTbl = {}\n\tlocal function IsQuestFlaggedCompleted(questID)\n\t\t-- Load completed quests from the server\n\t\tif not questFrame then\n\t\t\tquestFrame = CreateFrame(\"Frame\")\n\t\t\tquestFrame:RegisterEvent(\"QUEST_QUERY_COMPLETE\")\n\t\t\tquestFrame:SetScript(\"OnEvent\", function()\n\t\t\t\tquestTbl = GetQuestsCompleted()\n\t\t\tend)\n\t\tend\n\t\tQueryQuestsCompleted()\n\n\t\t-- Check if questID is completed from the table\n\t\tif tContains(questTbl, questID) then\n\t\t\treturn true\n\t\telse\n\t\t\treturn false\n\t\tend\n\tend\n\n\tlocal function checkExpressionList(exp, str)\n\t\tfor _, v in ipairs(exp) do\n\t\t\tif str:match(v) then\n\t\t\t\treturn true\n\t\t\tend\n\t\tend\n\t\treturn false\n\tend\n\n\t-- called for all mob chat events\n\tlocal function onMonsterMessage(self, type, msg)\n\t\t-- pull detection\n\t\tlocal combat = combatInfo[LastInstanceMapID] or combatInfo[LastInstanceZoneName]\n\t\tif dbmIsEnabled and combat then\n\t\t\tfor _, v in ipairs(combat) do\n\t\t\t\tif (v.type == type and checkEntry(v.msgs, msg) or v.type == type .. \"_regex\" and checkExpressionList(v.msgs, msg)) and not (#inCombat > 0 and v.noMultiBoss) then\n\t\t\t\t\tself:StartCombat(v.mod, 0, \"MONSTER_MESSAGE\")\n\t\t\t\telseif (v.type == \"combat_\" .. type .. \"find\" and tContains(v.msgs, msg) or v.type == \"combat_\" .. type and checkEntry(v.msgs, msg)) and not (#inCombat > 0 and v.noMultiBoss) then\n\t\t\t\t\tif IsInInstance() then--Indoor boss that uses both combat and message for combat, so in other words (such as hodir), don't require \"target\" of boss for yell like scanForCombat does for World Bosses\n\t\t\t\t\t\tself:StartCombat(v.mod, 0, \"MONSTER_MESSAGE\")\n\t\t\t\t\telse--World Boss\n\t\t\t\t\t\tscanForCombat(v.mod, v.mob, 0)\n\t\t\t\t\t\tif v.mod.readyCheckQuestId and (self.Options.WorldBossNearAlert or v.mod.Options.ReadyCheck) and not IsQuestFlaggedCompleted(v.mod.readyCheckQuestId) and v.mod.readyCheckMaxLevel >= playerLevel then\n\t\t\t\t\t\t\tself:FlashClientIcon()\n\t\t\t\t\t\t\tself:PlaySound(8960, true)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\t-- kill detection (wipe detection would also be nice to have)\n\t\t-- todo: add sync\n\t\tfor i = #inCombat, 1, -1 do\n\t\t\tlocal v = inCombat[i]\n\t\t\tif not v.combatInfo then return end\n\t\t\tif v.combatInfo.killType == type and v.combatInfo.killMsgs[msg] then\n\t\t\t\tself:EndCombat(v, nil, nil, \"onMonsterMessage\")\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction DBM:IsEncounterInProgress()\n\t\treturn encounterInProgress\n\tend\n\n\tfunction DBM:CHAT_MSG_MONSTER_YELL(msg, npc, _, _, target)\n\t\tif DBM:IsEncounterInProgress() or (IsInInstance() and InCombatLockdown()) then--Too many 5 mans/old raids don't properly return encounterinprogress\n\t\t\tlocal targetName = target or \"nil\"\n\t\t\tself:Debug(\"CHAT_MSG_MONSTER_YELL from \"..npc..\" while looking at \"..targetName, 2)\n\t\tend\n\t\tif not IsInInstance() then\n\t\t\tif msg:find(L.WORLD_BUFFS.hordeOny) then\n\t\t\t\tSendWorldSync(self, \"WBA\", \"Onyxia\\tHorde\\t22888\\t15\\t4\")\n\t\t\t\tDBM:Debug(\"L.WORLD_BUFFS.hordeOny detected\")\n\t\t\telseif msg:find(L.WORLD_BUFFS.allianceOny) then\n\t\t\t\tSendWorldSync(self, \"WBA\", \"Onyxia\\tAlliance\\t22888\\t15\\t4\")\n\t\t\t\tDBM:Debug(\"L.WORLD_BUFFS.allianceOny detected\")\n\t\t\telseif msg:find(L.WORLD_BUFFS.hordeNef) then\n\t\t\t\tSendWorldSync(self, \"WBA\", \"Nefarian\\tHorde\\t22888\\t16\\t4\")\n\t\t\t\tDBM:Debug(\"L.WORLD_BUFFS.hordeNef detected\")\n\t\t\telseif msg:find(L.WORLD_BUFFS.allianceNef) then\n\t\t\t\tSendWorldSync(self, \"WBA\", \"Nefarian\\tAlliance\\t22888\\t16\\t4\")\n\t\t\t\tDBM:Debug(\"L.WORLD_BUFFS.allianceNef detected\")\n\t\t\telseif msg:find(L.WORLD_BUFFS.rendHead) then\n\t\t\t\tSendWorldSync(self, \"WBA\", \"rendBlackhand\\tHorde\\t16609\\t7\\t4\")\n\t\t\t\tDBM:Debug(\"L.WORLD_BUFFS.rendHead detected\")\n\t\t\telseif msg:find(L.WORLD_BUFFS.zgHeartYojamba) then\n\t\t\t\t-- zg buff transcripts https://gist.github.com/venuatu/18174f0e98759f83b9834574371b8d20\n\t\t\t\t-- 28.58, 28.67, 27.77, 29.39, 28.67, 29.03, 28.12, 28.19, 29.61\n\t\t\t\tSendWorldSync(self, \"WBA\", \"Zandalar\\tBoth\\t24425\\t28\\t4\")\n\t\t\t\tDBM:Debug(\"L.WORLD_BUFFS.zgHeartYojamba detected\")\n\t\t\telseif msg:find(L.WORLD_BUFFS.zgHeartBooty) then\n\t\t\t\t-- 48.7, 49.76, 50.64, 49.42, 49.8, 50.67, 50.94, 51.06\n\t\t\t\tSendWorldSync(self, \"WBA\", \"Zandalar\\tBoth\\t24425\\t49\\t4\")\n\t\t\t\tDBM:Debug(\"L.WORLD_BUFFS.zgHeartBooty detected\")\n\t\t\tend\n\t\tend\n\t\treturn onMonsterMessage(self, \"yell\", msg)\n\tend\n\n\tfunction DBM:CHAT_MSG_MONSTER_EMOTE(msg)\n\t\treturn onMonsterMessage(self, \"emote\", msg)\n\tend\n\n\tfunction DBM:CHAT_MSG_RAID_BOSS_EMOTE(msg, ...)\n\t\tonMonsterMessage(self, \"emote\", msg)\n\t\treturn self:FilterRaidBossEmote(msg, ...)\n\tend\n\n\tfunction DBM:CHAT_MSG_RAID_BOSS_WHISPER(msg)\n\t\t--Make it easier for devs to detect whispers they are unable to see\n\t\t--TINTERFACE\\\\ICONS\\\\ability_socererking_arcanewrath.blp:20|t You have been branded by |cFFF00000|Hspell:156238|h[Arcane Wrath]|h|r!\"\n\t\tif msg and msg ~= \"\" and IsInGroup() and not _G[\"BigWigs\"] then\n\t\t\tSendAddonMessage(\"Transcriptor\", msg, IsInRaid() and \"RAID\" or \"PARTY\")--Send any emote to transcriptor, even if no spellid\n\t\tend\n\tend\n\n\tfunction DBM:CHAT_MSG_MONSTER_SAY(msg)\n\t\tif not IsInInstance() then\n\t\t\tif msg:find(L.WORLD_BUFFS.zgHeart) then\n\t\t\t\t-- 51.01 51.82 51.85 51.53\n\t\t\t\tSendWorldSync(self, \"WBA\", \"Zandalar\\tBoth\\t24425\\t51\\t4\")\n\t\t\tend\n\t\tend\n\t\treturn onMonsterMessage(self, \"say\", msg)\n\tend\nend\n\n---------------------------\n--  Kill/Wipe Detection  --\n---------------------------\n\nfunction checkWipe(self, confirm)\n\tif #inCombat > 0 then\n\t\tif not savedDifficulty or not difficultyText or not difficultyIndex then--prevent error if savedDifficulty or difficultyText is nil\n\t\t\tsavedDifficulty, difficultyText, difficultyIndex, LastGroupSize = self:GetCurrentInstanceDifficulty()\n\t\tend\n\t\t-- Apply correction to savedDifficulty for out-of-instance ghost checks\n\t\tif encounterDifficulty and encounterDifficulty ~= savedDifficulty then\n\t\t\tsavedDifficulty = encounterDifficulty\n\t\tend\n\t\t--hack for no iEEU information is provided.\n\t\tif not bossuIdFound then\n\t\t\tfor i = 1, 5 do\n\t\t\t\tif UnitExists(\"boss\"..i) then\n\t\t\t\t\tbossuIdFound = true\n\t\t\t\t\tbreak\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tlocal wipe -- 0: no wipe, 1: normal wipe, 2: wipe by UnitExists check.\n\t\t-- DBM:IsEncounterInProgress() wouldn't work here since this WotLK workaround sets the boolean variable on StartCombat and EndCombat, and since checkwipe is one of the triggers for EndCombat, it would never properly wipe.\n\t\t-- if DBM:IsEncounterInProgress() then -- Encounter Progress marked, you obviously in combat with boss. So do not Wipe\n\t\t--\twipe = 0\n\t\tif savedDifficulty == \"worldboss\" and UnitIsDeadOrGhost(\"player\") then -- On dead or ghost, unit combat status detection would be fail. If you ghost in instance, that means wipe. But in worldboss, ghost means not wipe. So do not wipe.\n\t\t\twipe = 0\n\t\telseif bossuIdFound and LastInstanceType == \"raid\" then -- Combat started by IEEU and no boss exist and no EncounterProgress marked, that means wipe\n\t\t\twipe = 2\n\t\t\tfor i = 1, 5 do\n\t\t\t\tif UnitExists(\"boss\"..i) then\n\t\t\t\t\twipe = 0 -- Boss found. No wipe\n\t\t\t\t\tbreak\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\t-- Commenting this else check since there is no EncounterProgress info on WotLK, so whenever IEEU fired and there was no boss frames, it was considering a wipe without running the group unit combat detection\n--\t\telse -- Unit combat status detection. No combat unit in your party and no EncounterProgress marked, that means wipe\n\t\tif wipe ~= 0 then\n\t\t\twipe = wipe or 1\n\t\t\tlocal uId = ((GetNumRaidMembers() == 0) and \"party\") or \"raid\"\n\t\t\tfor i = 0, mmax(GetNumRaidMembers(), GetNumPartyMembers()) do\n\t\t\t\tlocal id = (i == 0 and \"player\") or uId..i\n\t\t\t\tif UnitAffectingCombat(id) and not UnitIsDeadOrGhost(id) then\n\t\t\t\t\twipe = 0 -- Someone still in combat. No wipe\n\t\t\t\t\tbreak\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tif wipe == 0 then\n\t\t\tself:Schedule(3, checkWipe, self)\n\t\telseif confirm then\n\t\t\tfor i = #inCombat, 1, -1 do\n\t\t\t\tlocal mod = inCombat[i]\n\t\t\t\tif not mod.noStatistics then\n\t\t\t\t\tself:Debug(\"You wiped. Reason : \" .. (wipe == 1 and \"No combat unit found in your party.\" or \"No boss found : \"..(wipe or \"nil\")))\n\t\t\t\tend\n\t\t\t\tself:EndCombat(mod, true, nil, \"checkWipe\")\n\t\t\tend\n\t\telse\n\t\t\tlocal maxDelayTime = (savedDifficulty == \"worldboss\" and 15) or 5 --wait 10s more on worldboss do actual wipe.\n\t\t\tfor _, v in ipairs(inCombat) do\n\t\t\t\tmaxDelayTime = v.combatInfo and v.combatInfo.wipeTimer and v.combatInfo.wipeTimer > maxDelayTime and v.combatInfo.wipeTimer or maxDelayTime\n\t\t\tend\n\t\t\tself:Schedule(maxDelayTime, checkWipe, self, true)\n\t\tend\n\tend\nend\n\nfunction DBM:FireCustomEvent(event, ...)\n\tfireEvent(event, ...)\nend\n\nfunction checkBossHealth(self, onlyHighest)\n\tif #inCombat > 0 then\n\t\tfor _, v in ipairs(inCombat) do\n\t\t\tif not v.multiMobPullDetection or v.mainBoss then\n\t\t\t\tself:GetBossHP(v.mainBoss or v.combatInfo.mob or -1, onlyHighest)\n\t\t\telse\n\t\t\t\tfor _, mob in ipairs(v.multiMobPullDetection) do\n\t\t\t\t\tself:GetBossHP(mob, onlyHighest)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tself:Schedule(1, checkBossHealth, self, onlyHighest)\n\tend\nend\n\nfunction checkCustomBossHealth(self, mod)\n\tmod:CustomHealthUpdate()\n\tself:Schedule(1, checkCustomBossHealth, self, mod)\nend\n\nfunction DBM:InGuildParty()\n\tlocal guildName = GetGuildInfo(\"player\")\n\tlocal numRaid = GetNumPartyMembers()\n\n\tif guildName and numRaid > 0 then\n\t\tlocal guldMatch = 0\n\t\tfor i = 1, numRaid do\n\t\t\tlocal guild = GetGuildInfo(\"raid\"..i) or \"\"\n\t\t\tif guild == guildName then\n\t\t\t\tguldMatch = guldMatch + 1\n\t\t\tend\n\t\tend\n\t\tif guldMatch >= numRaid * 0.75 then\n\t\t\treturn true\n\t\tend\n\tend\nend\n\ndo\n\tlocal tooltipsHidden = false\n\t--Delayed Guild Combat sync object so we allow time for RL to disable them\n\tlocal function delayedGCSync(modId, difficultyIndex, name, thisTime, wipeHP)\n\t\tif not dbmIsEnabled then return end\n\t\tif not private.statusGuildDisabled and updateNotificationDisplayed == 0 then\n\t\t\tif thisTime then--Wipe event\n\t\t\t\tif wipeHP then\n\t\t\t\t\tsendGuildSync(DBMPrefix..\"-GCE\", modId..\"\\t8\\t1\\t\"..thisTime..\"\\t\"..difficultyIndex..\"\\t\"..name..\"\\t\"..lastGroupLeader..\"\\t\"..wipeHP)\n\t\t\t\telse\n\t\t\t\t\tsendGuildSync(DBMPrefix..\"-GCE\", modId..\"\\t8\\t0\\t\"..thisTime..\"\\t\"..difficultyIndex..\"\\t\"..name..\"\\t\"..lastGroupLeader)\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tsendGuildSync(DBMPrefix..\"-GCB\", modId..\"\\t3\\t\"..difficultyIndex..\"\\t\"..name)\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal statVarTable = {\n\t\t--Current\n\t\t[\"event5\"] = \"normal\",\n\t\t[\"event20\"] = \"lfr25\",\n\t\t[\"event40\"] = \"lfr25\",\n\t\t[\"normal5\"] = \"normal\",\n\t\t[\"heroic5\"] = \"heroic\",\n\t\t[\"normal\"] = \"normal\",\n\t\t[\"heroic\"] = \"heroic\",\n\t\t[\"mythic\"] = \"mythic\",\n\t\t[\"worldboss\"] = \"normal\",\n\t\t[\"timewalker\"] = \"timewalker\",\n\t\t--Legacy\n\t\t[\"normal10\"] = \"normal\",\n\t\t[\"normal20\"] = \"normal\",\n\t\t[\"normal25\"] = \"normal25\",\n\t\t[\"normal40\"] = \"normal\",\n\t\t[\"heroic10\"] = \"heroic\",\n\t\t[\"heroic25\"] = \"heroic25\",\n\t}\n\n\tfunction DBM:StartCombat(mod, delay, event, synced, syncedStartHp, syncedEvent)\n\t\tcSyncSender = {}\n\t\tcSyncReceived = 0\n\t\tif not checkEntry(inCombat, mod) then\n\t\t\tif not mod.Options.Enabled then return end\n\t\t\t--HACK: makes sure that we don't detect a false pull if the event fires again when the boss dies...\n\t\t\tif mod.lastKillTime and GetTime() - mod.lastKillTime < 10 then return end\n\t\t\tif not mod.combatInfo then return end\n\t\t\tif mod.combatInfo.noCombatInVehicle and UnitInVehicle(\"player\") then -- HACK\n\t\t\t\treturn\n\t\t\tend\n\t\t\tif self.Options.RecordOnlyBosses then\n\t\t\t\tself:StartLogging(0)\n\t\t\tend\n\t\t\tsavedDifficulty, difficultyText, difficultyIndex, LastGroupSize = self:GetCurrentInstanceDifficulty()\n\t\t\tencounterDifficulty, encounterDifficultyText, encounterDifficultyIndex = savedDifficulty, difficultyText, difficultyIndex\n\t\t\tif event then\n\t\t\t\tself:Debug(\"StartCombat called by : \"..event..\" for mod : \"..mod.id..\" (revision: \"..(mod.revision or 0)..\") with difficulty : \"..encounterDifficulty..\". LastInstanceMapID is \"..LastInstanceMapID)\n\t\t\telse\n\t\t\t\tself:Debug(\"StartCombat called by individual mod or unknown reason for mod : \"..mod.id..\" (revision: \"..(mod.revision or 0)..\") with difficulty : \"..encounterDifficulty..\". LastInstanceMapID is \"..LastInstanceMapID)\n\t\t\t\tevent = \"\"\n\t\t\tend\n\t\t\tself.currentModId = mod.id\n\t\t\t--check completed. starting combat\n\t\t\ttinsert(inCombat, mod)\n\t\t\tif mod.inCombatOnlyEvents and not mod.inCombatOnlyEventsRegistered then\n\t\t\t\tmod.inCombatOnlyEventsRegistered = 1\n\t\t\t\tmod:RegisterEvents(unpack(mod.inCombatOnlyEvents))\n\t\t\tend\n\t\t\t--Fix for \"attempt to perform arithmetic on field 'stats' (a nil value)\"\n\t\t\tif not mod.stats and not mod.noStatistics then\n\t\t\t\tself:AddMsg(L.BAD_LOAD)--Warn user that they should reload ui soon as they leave combat to get their mod to load correctly as soon as possible\n\t\t\t\tmod.ignoreBestkill = true--Force this to true so we don't check any more occurances of \"stats\"\n\t\t\telseif event == \"TIMER_RECOVERY\" then --add a lag time to delay when TIMER_RECOVERY\n\t\t\t\tdelay = delay + select(3, GetNetStats()) / 1000\n\t\t\telse\n\t\t\t\tmod.ignoreBestkill = false\n\t\t\tend\n--\t\t\tMoving this up, to be logged with the StartCombat debug\n--\t\t\tsavedDifficulty, difficultyText, difficultyIndex, LastGroupSize = self:GetCurrentInstanceDifficulty()\n--\t\t\tencounterDifficulty, encounterDifficultyText, encounterDifficultyIndex = savedDifficulty, difficultyText, difficultyIndex\n\t\t\tlocal name = mod.combatInfo.name\n\t\t\tlocal modId = mod.id\n\t\t\tmod.inCombat = true\n\t\t\tencounterInProgress = true\n\t\t\tmod.combatInfo.pull = GetTime() - (delay or 0)\n\t\t\tbossuIdFound = event == \"IEEU\"\n\t\t\tif (self.Options.AlwaysShowHealthFrame or mod.Options.HealthFrame) and mod.Options.Enabled then\n\t\t\t\tself.BossHealth:Show(mod.localization.general.name)\n\t\t\t\tif mod.bossHealthInfo then\n\t\t\t\t\tfor i = 1, #mod.bossHealthInfo, 2 do\n\t\t\t\t\t\tself.BossHealth:AddBoss(mod.bossHealthInfo[i], mod.bossHealthInfo[i + 1])\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tself.BossHealth:AddBoss(mod.combatInfo.mob, mod.localization.general.name)\n\t\t\t\tend\n\t\t\tend\n\t\t\tif mod.minCombatTime then\n\t\t\t\tself:Schedule(mmax((mod.minCombatTime - delay), 3), checkWipe, self)\n\t\t\telse\n\t\t\t\tself:Schedule(3, checkWipe, self)\n\t\t\tend\n\t\t\t--get boss hp at pull\n\t\t\tif syncedStartHp and syncedStartHp < 1 then\n\t\t\t\tsyncedStartHp = syncedStartHp * 100\n\t\t\tend\n\t\t\tlocal startHp = syncedStartHp or mod:GetBossHP(mod.mainBoss or mod.combatInfo.mob or -1) or 100\n\t\t\t--check boss engaged first?\n\t\t\tif (savedDifficulty == \"worldboss\" and startHp < 98) or (event == \"UNIT_HEALTH\" and delay > 4) or event == \"TIMER_RECOVERY\" then--Boss was not full health when engaged, disable combat start timer and kill record\n\t\t\t\tmod.ignoreBestkill = true\n\t\t\telse--Reset ignoreBestkill after wipe\n\t\t\t\tmod.ignoreBestkill = false\n\t\t\t\t--It was a clean pull, so cancel any RequestTimers which might fire after boss was pulled if boss was pulled right after mod load\n\t\t\t\t--Only want timer recovery on in progress bosses, not clean pulls\n\t\t\t\tif startHp > 98 and (savedDifficulty == \"worldboss\" or event == \"IEEU\") then\n\t\t\t\t\tself:Unschedule(self.RequestTimers)\n\t\t\t\tend\n\t\t\tend\n\t\t\tif self.Options.HideTooltips then\n\t\t\t\t--Better or cleaner way?\n\t\t\t\ttooltipsHidden = true\n\t\t\t\tGameTooltip.Temphide = function() GameTooltip:Hide() end; GameTooltip:SetScript(\"OnShow\", GameTooltip.Temphide)\n\t\t\tend\n\t\t\tif self.Options.DisableSFX and GetCVar(\"Sound_EnableSFX\") == \"1\" then\n\t\t\t\tSetCVar(\"Sound_EnableSFX\", 0)\n\t\t\tend\n\t\t\t--boss health info scheduler\n\t\t\tif mod.CustomHealthUpdate then\n\t\t\t\tself:Schedule(1, checkCustomBossHealth, self, mod)\n\t\t\telse\n\t\t\t\tself:Schedule(1, checkBossHealth, self, mod.onlyHighest)\n\t\t\tend\n\t\t\t--process global options\n\t\t\tself:HideBlizzardEvents(1)\n--\t\t\tI prefer starting the log at the beginning of the function, to catch the StartCombat debug\n--\t\t\tif self.Options.RecordOnlyBosses then\n--\t\t\t\tself:StartLogging(0)\n--\t\t\tend\n\t\t\tif self.Options.HideObjectivesFrame and GetNumTrackedAchievements() == 0 then -- doesn't need InCombatLockdown() check since it's not a protected function\n\t\t\t\tif WatchFrame:IsVisible() then\n\t\t\t\t\tWatchFrame:Hide()\n\t\t\t\t\twatchFrameRestore = true\n\t\t\t\tend\n\t\t\tend\n\t\t\tfireEvent(\"DBM_Pull\", mod, delay, synced, startHp)\n\t\t\tself:FlashClientIcon()\n\t\t\t--serperate timer recovery and normal start.\n\t\t\tif event ~= \"TIMER_RECOVERY\" then\n\t\t\t\t--add pull count\n\t\t\t\tif mod.stats and not mod.noStatistics then\n\t\t\t\t\tif not mod.stats[statVarTable[savedDifficulty]..\"Pulls\"] then mod.stats[statVarTable[savedDifficulty]..\"Pulls\"] = 0 end\n\t\t\t\t\tmod.stats[statVarTable[savedDifficulty]..\"Pulls\"] = mod.stats[statVarTable[savedDifficulty]..\"Pulls\"] + 1\n\t\t\t\tend\n\t\t\t\t--show speed timer\n\t\t\t\tif self.Options.AlwaysShowSpeedKillTimer2 and mod.stats and not mod.ignoreBestkill and not mod.noStatistics then\n\t\t\t\t\tlocal bestTime = mod.stats[statVarTable[savedDifficulty]..\"BestTime\"]\n\t\t\t\t\tif bestTime and bestTime > 0 then\n\t\t\t\t\t\tlocal speedTimer = mod:NewTimer(bestTime, L.SPEED_KILL_TIMER_TEXT, \"Interface\\\\Icons\\\\SPELL_HOLY_BORROWEDTIME\", nil, false)\n\t\t\t\t\t\tspeedTimer:Start()\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\t--update boss left\n\t\t\t\tif mod.numBoss then\n\t\t\t\t\tmod.vb.bossLeft = mod.numBoss\n\t\t\t\tend\n\t\t\t\t--elect icon person\n\t\t\t\tif mod.findFastestComputer and not self.Options.DontSetIcons then\n\t\t\t\t\tif self:GetRaidRank() > 0 then\n\t\t\t\t\t\tfor i = 1, #mod.findFastestComputer do\n\t\t\t\t\t\t\tlocal option = mod.findFastestComputer[i]\n\t\t\t\t\t\t\tif mod.Options[option] then\n\t\t\t\t\t\t\t\tDBM:Debug((\"DBMv4-IS sending %s %s %s\"):format(UnitGUID(\"player\"), tostring(self.Revision), option), 3)\n\t\t\t\t\t\t\t\tsendSync(\"DBMv4-IS\", UnitGUID(\"player\")..\"\\t\"..tostring(self.Revision)..\"\\t\"..option)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\telseif not IsInGroup() then\n\t\t\t\t\t\tfor i = 1, #mod.findFastestComputer do\n\t\t\t\t\t\t\tlocal option = mod.findFastestComputer[i]\n\t\t\t\t\t\t\tif mod.Options[option] then\n\t\t\t\t\t\t\t\tprivate.canSetIcons[option] = true\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\t--call OnCombatStart\n\t\t\t\tif mod.OnCombatStart then\n\t\t\t\t\tlocal startEvent = syncedEvent or event\n\t\t\t\t\tmod:OnCombatStart(delay or 0, startEvent == \"PLAYER_REGEN_DISABLED_AND_MESSAGE\" or startEvent == \"SPELL_CAST_SUCCESS\" or startEvent == \"MONSTER_MESSAGE\", startEvent == \"ENCOUNTER_START\")\n\t\t\t\tend\n\t\t\t\t--send \"C\" sync\n\t\t\t\tevent = event or \"\"\n\t\t\t\tif not synced then\n\t\t\t\t\tsendSync(\"DBMv4-Pull\", (delay or 0)..\"\\t\"..modId..\"\\t\"..(mod.revision or 0)..\"\\t\"..startHp..\"\\t\"..tostring(self.Revision)..\"\\t\"..(mod.hotfixNoticeRev or 0)..\"\\t\"..event)\n\t\t\t\tend\n\t\t\t\tif UnitIsPartyLeader(\"player\") then\n\t\t\t\t\t--Global disables require normal, heroic, mythic raid on retail, or 10 man normal, 25 man normal, 40 man normal, 10 man heroic, or 25 man heroic on classic\n\t\t\t\t\tif difficultyIndex == 14 or difficultyIndex == 15 or difficultyIndex == 16 or difficultyIndex == 175 or difficultyIndex == 176 or difficultyIndex == 186 or difficultyIndex == 193 or difficultyIndex == 194 then\n\t\t\t\t\t\tlocal statusWhisper, guildStatus, raidIcons, chatBubbles = self.Options.DisableStatusWhisper and 1 or 0, self.Options.DisableGuildStatus and 1 or 0, self.Options.DisableRaidIcons and 1 or 0, self.Options.DisableChatBubbles and 1 or 0\n\t\t\t\t\t\tif statusWhisper ~= 0 or guildStatus ~= 0 or raidIcons ~= 0 or chatBubbles ~= 0 then\n\t\t\t\t\t\t\tsendSync(\"DBMv4-RLO\", \"1\\t\"..statusWhisper..\"\\t\"..guildStatus..\"\\t\"..raidIcons..\"\\t\"..chatBubbles)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\t--show bigbrother check\n\t\t\t\tif self.Options.ShowBigBrotherOnCombatStart and BigBrother and type(BigBrother.ConsumableCheck) == \"function\" then\n\t\t\t\t\tif self.Options.BigBrotherAnnounceToRaid then\n\t\t\t\t\t\tBigBrother:ConsumableCheck(\"RAID\")\n\t\t\t\t\telse\n\t\t\t\t\t\tBigBrother:ConsumableCheck(\"SELF\")\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\t--show engage message\n\t\t\t\tif self.Options.ShowEngageMessage and not mod.noStatistics then\n\t\t\t\t\tif mod.ignoreBestkill and (savedDifficulty == \"worldboss\") then--Should only be true on in progress field bosses, not in progress raid bosses we did timer recovery on.\n\t\t\t\t\t\tself:AddMsg(L.COMBAT_STARTED_IN_PROGRESS:format(difficultyText..name))\n\t\t\t\t\telse\n\t\t\t\t\t\tself:AddMsg(L.COMBAT_STARTED:format(difficultyText..name))\n\t\t\t\t\t\tlocal check = not private.statusGuildDisabled and self:InGuildParty() and DBM:GetNumGuildPlayersInZone() >= 10\n\t\t\t\t\t\tif check and not self.Options.DisableGuildStatus then--Only send relevant content\n\t\t\t\t\t\t\tself:Unschedule(delayedGCSync, modId)\n\t\t\t\t\t\t\tself:Schedule(1.5, delayedGCSync, modId, difficultyIndex, name)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\t--stop pull count\n\t\t\t\tlocal dummyMod = self:GetModByName(\"PullTimerCountdownDummy\")\n\t\t\t\tif dummyMod then--stop pull timer\n\t\t\t\t\tdummyMod.text:Cancel()\n\t\t\t\t\tdummyMod.timer:Stop()\n\t\t\t\t\tif not self.Options.DontShowPTCountdownText then\n\t\t\t\t\t\tfor _, tttimer in pairs(TT.timerList) do\n\t\t\t\t\t\t\tif tttimer.type == 3 and not tttimer.isFree then\n\t\t\t\t\t\t\t\tTT:FreeTimerTrackerTimer(tttimer)\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\tDBM:Unschedule(SendChatMessage) -- unschedule chat spam on pull\n\t\t\t\tend\n\t\t\t\t-- stop combat start timer and debug if refreshed early\n--\t\t\t\tif DBM.Options.BadTimerAlert or DBM.Options.DebugMode and DBM.Options.DebugLevel > 1 then\n\t\t\t\t\tlocal bar = DBT:GetBar(L.GENERIC_TIMER_COMBAT)\n\t\t\t\t\tif bar then\n\t\t\t\t\t\tif bar.timer > 0 then -- Catch all early refreshes, since pull timers are generally fixed and can be precise\n\t\t\t\t\t\t\tlocal remaining = (\"%.2f\"):format(bar.timer)\n\t\t\t\t\t\t\tlocal ttext = bar.id\n\t\t\t\t\t\t\tif DBM.Options.BadTimerAlert and bar.timer > 1 then--If greater than 1 seconds off, report this out of debug mode to all users\n\t\t\t\t\t\t\t\tDBM:AddMsg(\"Timer \"..ttext..\" refreshed before expired. Remaining time is : \"..remaining..\". Please report this bug\")\n\t\t\t\t\t\t\t\tfireEvent(\"DBM_Debug\", \"Timer \"..ttext..\" refreshed before expired. Remaining time is : \"..remaining..\". Please report this bug\", 2)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tDBM:Debug(\"Timer \"..ttext..\" refreshed before expired. Remaining time is : \"..remaining, 2)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\tDBT:CancelBar(L.GENERIC_TIMER_COMBAT)\n\t\t\t\t\tend\n--\t\t\t\tend\n\t\t\t\tlocal bigWigs = _G[\"BigWigs\"]\n\t\t\t\tif bigWigs and bigWigs.db.profile.raidicon and not self.Options.DontSetIcons and self:GetRaidRank() > 0 then--Both DBM and bigwigs have raid icon marking turned on.\n\t\t\t\t\tself:AddMsg(L.BIGWIGS_ICON_CONFLICT)--Warn that one of them should be turned off to prevent conflict (which they turn off is obviously up to raid leaders preference, dbm accepts either or turned off to stop this alert)\n\t\t\t\tend\n\t\t\t\tif self.Options.EventSoundEngage2 and self.Options.EventSoundEngage2 ~= \"\" and self.Options.EventSoundEngage2 ~= \"None\" then\n\t\t\t\t\tself:PlaySoundFile(self.Options.EventSoundEngage2, nil, true)\n\t\t\t\tend\n\t\t\t\tif self.Options.EventSoundMusic and self.Options.EventSoundMusic ~= \"None\" and self.Options.EventSoundMusic ~= \"\" and not (self.Options.EventMusicMythicFilter and (savedDifficulty == \"mythic\" or savedDifficulty == \"challenge\")) and not mod.noStatistics then\n\t\t\t\t\tfireEvent(\"DBM_MusicStart\", \"BossEncounter\")\n\t\t\t\t\tif not self.Options.RestoreSettingMusic then\n\t\t\t\t\t\tself.Options.RestoreSettingMusic = tonumber(GetCVar(\"Sound_EnableMusic\")) or 1\n\t\t\t\t\t\tif self.Options.RestoreSettingMusic == 0 then\n\t\t\t\t\t\t\tSetCVar(\"Sound_EnableMusic\", 1)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tself.Options.RestoreSettingMusic = nil--Don't actually need it\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\tlocal path = \"MISSING\"\n\t\t\t\t\tif self.Options.EventSoundMusic == \"Random\" then\n\t\t\t\t\t\tlocal usedTable = self.Options.EventSoundMusicCombined and self.Music or self.BattleMusic\n\t\t\t\t\t\tif #usedTable >= 3 then\n\t\t\t\t\t\t\tlocal random = random(3, #usedTable)\n\t\t\t\t\t\t\tpath = usedTable[random].value\n\t\t\t\t\t\tend\n\t\t\t\t\telse\n\t\t\t\t\t\tpath = self.Options.EventSoundMusic\n\t\t\t\t\tend\n\t\t\t\t\tif path ~= \"MISSING\" then\n\t\t\t\t\t\tPlayMusic(path)\n\t\t\t\t\t\tself.Options.musicPlaying = true\n\t\t\t\t\t\tself:Debug(\"Starting combat music with file: \"..path)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tself:AddMsg(L.COMBAT_STATE_RECOVERED:format(difficultyText..name, strFromTime(delay)))\n\t\t\t\tif mod.OnTimerRecovery then\n\t\t\t\t\tmod:OnTimerRecovery()\n\t\t\t\tend\n\t\t\tend\n\t\t\tif savedDifficulty == \"worldboss\" and mod.WBEsync then\n\t\t\t\tif lastBossEngage[modId..playerRealm] and (GetTime() - lastBossEngage[modId..playerRealm] < 30) then return end--Someone else synced in last 10 seconds so don't send out another sync to avoid needless sync spam.\n\t\t\t\tlastBossEngage[modId..playerRealm] = GetTime()--Update last engage time, that way we ignore our own sync\n\t\t\t\tSendWorldSync(self, \"WBE\", modId..\"\\t\"..playerRealm..\"\\t\"..startHp..\"\\t8\\t\"..name)\n\t\t\tend\n\t\t\tif self.Options.FixCLEUOnCombatStart then\n\t\t\t\tself:Schedule(0.5, CombatLogClearEntries) -- schedule prevents client crash with DBM:StartCombat function (tested on Leotheras)\n\t\t\t\tself:Debug(\"Scheduled FixCLEU from CombatStart\")\n\t\t\tend\n\t\t\t-- Debug loaded mod profile and options\n\t\t\tself:Debug(\"Loaded Mod profile: \" .. DBM:CurrentModProfile(), 3)\n\t\t\tfor i, v in pairs(mod.Options) do\n\t\t\t\tself:Debug((\"Mod Option %s returns %s\"):format(i, tostring(v)), 3)\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction DBM:UNIT_HEALTH(uId)\n\t\tlocal cId = self:GetCIDFromGUID(UnitGUID(uId))\n\t\tlocal health\n\t\tif UnitHealthMax(uId) ~= 0 then\n\t\t\thealth = UnitHealth(uId) / UnitHealthMax(uId) * 100\n\t\tend\n\t\tif not health or health < 2 then return end -- no worthy of combat start if health is below 2%\n\t\tif dbmIsEnabled and InCombatLockdown() then\n\t\t\tif cId ~= 0 and not bossHealth[cId] and bossIds[cId] and UnitAffectingCombat(uId) and not (UnitPlayerOrPetInRaid(uId) or UnitPlayerOrPetInParty(uId)) and healthCombatInitialized then -- StartCombat by UNIT_HEALTH.\n\t\t\t\tlocal combat = combatInfo[LastInstanceMapID] or combatInfo[LastInstanceZoneName]\n\t\t\t\tif combat then\n\t\t\t\t\tfor _, v in ipairs(combat) do\n\t\t\t\t\t\tif v.mod.Options.Enabled and not v.mod.disableHealthCombat and v.type:find(\"combat\") and (v.multiMobPullDetection and checkEntry(v.multiMobPullDetection, cId) or v.mob == cId) and not (#inCombat > 0 and v.noMultiBoss) then\n\t\t\t\t\t\t\tif v.mod.noFriendlyEngagement and UnitIsFriend(\"player\", uId) then return end\n\t\t\t\t\t\t\t-- No sense in assuming delay based on boss health! Realistically, delay is 0 since it fires as soon as boss drops HP. This ensures a more accurate StartCombat. (Previous logic from retail: Delay set, > 97% = 0.5 (consider as normal pulling), max delay limited to 20s.)\n\t\t\t\t\t\t\tself:StartCombat(v.mod, 0--[[health > 97 and 0.5 or mmin(GetTime() - lastCombatStarted, 20)]], \"UNIT_HEALTH\", nil, health)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tif self.Options.AFKHealthWarning and UnitIsUnit(uId, \"player\") and (health < 85) and not DBM:IsEncounterInProgress() and UnitIsAFK(\"player\") and self:AntiSpam(5, \"AFK\") then--You are afk and losing health, some griever is trying to kill you while you are afk/tabbed out.\n\t\t\t\tself:PlaySound(8585)--So fire an alert sound to save yourself from this person's behavior.\n\t\t\t\tself:AddMsg(L.AFK_WARNING:format(health))\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction DBM:EndCombat(mod, wipe, srmIncluded, event)\n\t\tif removeEntry(inCombat, mod) then\n\t\t\tself.currentModId = nil\n\t\t\tif mod.inCombatOnlyEvents and mod.inCombatOnlyEventsRegistered then\n\t\t\t\tif srmIncluded then-- unregister all events including SPELL_AURA_REMOVED events\n\t\t\t\t\tmod:UnregisterInCombatEvents(false, true)\n\t\t\t\telse-- unregister all events except for SPELL_AURA_REMOVED events (might still be needed to remove icons etc...)\n\t\t\t\t\tmod:UnregisterInCombatEvents()\n\t\t\t\t\tself:Schedule(2, mod.UnregisterInCombatEvents, mod, true) -- 2 seconds should be enough for all auras to fade\n\t\t\t\tend\n\t\t\t\tself:Schedule(3, mod.Stop, mod) -- Remove accident started timers.\n\t\t\t\tmod.inCombatOnlyEventsRegistered = nil\n\t\t\t\tif mod.OnCombatEnd then\n\t\t\t\t\tself:Schedule(3, mod.OnCombatEnd, mod, wipe, true) -- Remove accidentally shown frames\n\t\t\t\tend\n\t\t\tend\n\t\t\tif mod.updateInterval then\n\t\t\t\tmod:UnregisterOnUpdateHandler()\n\t\t\tend\n\t\t\tmod:Stop()\n\t\t\tif event then\n\t\t\t\tself:Debug(\"EndCombat called by : \"..event..\" for mod: \" ..mod.id..\". LastInstanceMapID is \"..LastInstanceMapID)\n\t\t\tend\n\t\t\tif private.enableIcons and not self.Options.DontSetIcons and not self.Options.DontRestoreIcons then\n\t\t\t\t-- restore saved previous icon\n\t\t\t\tfor uId, icon in pairs(mod.iconRestore) do\n\t\t\t\t\tSetRaidTarget(uId, icon)\n\t\t\t\tend\n\t\t\t\ttwipe(mod.iconRestore)\n\t\t\tend\n\t\t\tmod.inCombat = false\n\t\t\tencounterInProgress = false\n\t\t\tif mod.combatInfo.killMobs then\n\t\t\t\tfor i, _ in pairs(mod.combatInfo.killMobs) do\n\t\t\t\t\tmod.combatInfo.killMobs[i] = true\n\t\t\t\tend\n\t\t\tend\n\t\t\tif not savedDifficulty or not difficultyText or not difficultyIndex then--prevent error if savedDifficulty or difficultyText is nil\n\t\t\t\tsavedDifficulty, difficultyText, difficultyIndex, LastGroupSize = DBM:GetCurrentInstanceDifficulty()\n\t\t\tend\n\t\t\tif encounterDifficulty and encounterDifficultyText and encounterDifficultyIndex and (encounterDifficulty ~= savedDifficulty or encounterDifficultyText ~= difficultyText or encounterDifficultyIndex ~= difficultyIndex) then\n\t\t\t\tsavedDifficulty, difficultyText, difficultyIndex = encounterDifficulty, encounterDifficultyText, encounterDifficultyIndex\n\t\t\tend\n\t\t\tlocal name = mod.combatInfo.name\n\t\t\tlocal modId = mod.id\n\t\t\tif wipe and mod.stats and not mod.noStatistics then\n\t\t\t\tmod.lastWipeTime = GetTime()\n\t\t\t\t--Fix for \"attempt to perform arithmetic on field 'pull' (a nil value)\" (which was actually caused by stats being nil, so we never did getTime on pull, fixing one SHOULD fix the other)\n\t\t\t\tlocal thisTime = GetTime() - mod.combatInfo.pull\n\t\t\t\tlocal hp = mod.highesthealth and mod:GetHighestBossHealth() or mod:GetLowestBossHealth()\n\t\t\t\tlocal wipeHP = mod.CustomHealthUpdate and mod:CustomHealthUpdate() or hp and (\"%d%%\"):format(hp) or CL.UNKNOWN\n\t\t\t\tif mod.vb.phase then\n\t\t\t\t\twipeHP = wipeHP..\" (\"..L.SCENARIO_STAGE:format(mod.vb.phase)..\")\"\n\t\t\t\tend\n\t\t\t\tif mod.numBoss and mod.vb.bossLeft and mod.numBoss > 1 then\n\t\t\t\t\tlocal bossesKilled = mod.numBoss - mod.vb.bossLeft\n\t\t\t\t\twipeHP = wipeHP..\" (\"..BOSSES_KILLED:format(bossesKilled, mod.numBoss)..\")\"\n\t\t\t\tend\n\t\t\t\tlocal totalPulls = mod.stats[statVarTable[savedDifficulty]..\"Pulls\"]\n\t\t\t\tlocal totalKills = mod.stats[statVarTable[savedDifficulty]..\"Kills\"]\n\t\t\t\tif thisTime < 30 then -- Normally, one attempt will last at least 30 sec.\n\t\t\t\t\ttotalPulls = totalPulls - 1\n\t\t\t\t\tmod.stats[statVarTable[savedDifficulty]..\"Pulls\"] = totalPulls\n\t\t\t\t\tif self.Options.ShowDefeatMessage then\n\t\t\t\t\t\tself:AddMsg(L.COMBAT_ENDED_AT:format(difficultyText..name, wipeHP, strFromTime(thisTime)))\n\t\t\t\t\t\t--No reason to GCE it here, so omited on purpose.\n\t\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tif self.Options.ShowDefeatMessage then\n\t\t\t\t\t\tself:AddMsg(L.COMBAT_ENDED_AT_LONG:format(difficultyText..name, wipeHP, strFromTime(thisTime), totalPulls - totalKills))\n\t\t\t\t\t\tlocal check = self:InGuildParty() and DBM:GetNumGuildPlayersInZone() >= 10\n\t\t\t\t\t\tif check and not self.Options.DisableGuildStatus then\n\t\t\t\t\t\t\tself:Unschedule(delayedGCSync, modId)\n\t\t\t\t\t\t\tself:Schedule(1.5, delayedGCSync, modId, difficultyIndex, name, strFromTime(thisTime), wipeHP)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\tif self.Options.EventSoundWipe and self.Options.EventSoundWipe ~= \"None\" and self.Options.EventSoundWipe ~= \"\" then\n\t\t\t\t\t\tif self.Options.EventSoundWipe == \"Random\" then\n\t\t\t\t\t\t\tlocal defeatSounds = DBM:GetDefeatSounds()\n\t\t\t\t\t\t\tif #defeatSounds >= 3 then\n\t\t\t\t\t\t\t\tself:PlaySoundFile(defeatSounds[random(3, #defeatSounds)].value)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tself:PlaySoundFile(self.Options.EventSoundWipe, nil, true)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tif showConstantReminder == 2 and IsInGroup() then\n\t\t\t\t\tshowConstantReminder = 1\n\t\t\t\t\t--Show message any time this is a mod that has a newer hotfix revision and it's a wipe\n\t\t\t\t\t--These people need to know the wipe could very well be their fault.\n\t\t\t\t\tself:AddMsg(L.OUT_OF_DATE_NAG)\n\t\t\t\tend\n\t\t\t\tlocal msg\n\t\t\t\tfor k, _ in pairs(autoRespondSpam) do\n\t\t\t\t\tif self.Options.WhisperStats then\n\t\t\t\t\t\tmsg = msg or chatPrefixShort..L.WHISPER_COMBAT_END_WIPE_STATS_AT:format(playerName, difficultyText..(name or \"\"), wipeHP, totalPulls - totalKills)\n\t\t\t\t\telse\n\t\t\t\t\t\tmsg = msg or chatPrefixShort..L.WHISPER_COMBAT_END_WIPE_AT:format(playerName, difficultyText..(name or \"\"), wipeHP)\n\t\t\t\t\tend\n\t\t\t\t\tsendWhisper(k, msg)\n\t\t\t\tend\n\t\t\t\tfireEvent(\"wipe\", mod) -- Backwards compatibility\n\t\t\t\tfireEvent(\"DBM_Wipe\", mod)\n\t\t\telseif not wipe and mod.stats and not mod.noStatistics then\n\t\t\t\tmod.lastKillTime = GetTime()\n\t\t\t\tlocal thisTime = GetTime() - (mod.combatInfo.pull or 0)\n\t\t\t\tlocal lastTime = mod.stats[statVarTable[savedDifficulty]..\"LastTime\"]\n\t\t\t\tlocal bestTime = mod.stats[statVarTable[savedDifficulty]..\"BestTime\"]\n\t\t\t\tif not mod.stats[statVarTable[savedDifficulty]..\"Kills\"] or mod.stats[statVarTable[savedDifficulty]..\"Kills\"] < 0 then mod.stats[statVarTable[savedDifficulty]..\"Kills\"] = 0 end\n\t\t\t\t--Fix logical error i've seen where for some reason we have more kills then pulls for boss as seen by - stats for wipe messages.\n\t\t\t\tmod.stats[statVarTable[savedDifficulty]..\"Kills\"] = mod.stats[statVarTable[savedDifficulty]..\"Kills\"] + 1\n\t\t\t\tif mod.stats[statVarTable[savedDifficulty]..\"Kills\"] > mod.stats[statVarTable[savedDifficulty]..\"Pulls\"] then mod.stats[statVarTable[savedDifficulty]..\"Kills\"] = mod.stats[statVarTable[savedDifficulty]..\"Pulls\"] end\n\t\t\t\tif not mod.ignoreBestkill and mod.combatInfo.pull then\n\t\t\t\t\tmod.stats[statVarTable[savedDifficulty]..\"LastTime\"] = thisTime\n\t\t\t\t\t--Just to prevent pre mature end combat calls from broken mods from saving bad time stats.\n\t\t\t\t\tif bestTime and bestTime > 0 and bestTime < 1.5 then\n\t\t\t\t\t\tmod.stats[statVarTable[savedDifficulty]..\"BestTime\"] = thisTime\n\t\t\t\t\telse\n\t\t\t\t\t\tmod.stats[statVarTable[savedDifficulty]..\"BestTime\"] = mmin(bestTime or mhuge, thisTime)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tlocal totalKills = mod.stats[statVarTable[savedDifficulty]..\"Kills\"]\n\t\t\t\tif self.Options.ShowDefeatMessage then\n\t\t\t\t\tlocal msg\n\t\t\t\t\tlocal thisTimeString = thisTime and strFromTime(thisTime)\n\t\t\t\t\tif not mod.combatInfo.pull then--was a bad pull so we ignored thisTime, should never happen\n\t\t\t\t\t\tmsg = L.BOSS_DOWN:format(difficultyText..name, CL.UNKNOWN)\n\t\t\t\t\telseif mod.ignoreBestkill then--Should never happen in a scenario so no need for scenario check.\n\t\t\t\t\t\tmsg = L.BOSS_DOWN_I:format(difficultyText..name, totalKills)\n\t\t\t\t\telseif not lastTime then\n\t\t\t\t\t\tmsg = L.BOSS_DOWN:format(difficultyText..name, thisTimeString)\n\t\t\t\t\telseif thisTime < (bestTime or mhuge) then\n\t\t\t\t\t\tmsg = L.BOSS_DOWN_NR:format(difficultyText..name, thisTimeString, strFromTime(bestTime), totalKills)\n\t\t\t\t\telse\n\t\t\t\t\t\tmsg = L.BOSS_DOWN_L:format(difficultyText..name, thisTimeString, strFromTime(lastTime), strFromTime(bestTime), totalKills)\n\t\t\t\t\tend\n\t\t\t\t\tlocal check = not private.statusGuildDisabled and self:InGuildParty() and DBM:GetNumGuildPlayersInZone() >= 10\n\t\t\t\t\tif thisTimeString and check and not self.Options.DisableGuildStatus and updateNotificationDisplayed == 0 then\n\t\t\t\t\t\tself:Unschedule(delayedGCSync, modId)\n\t\t\t\t\t\tself:Schedule(1.5, delayedGCSync, modId, encounterDifficultyIndex, name, thisTimeString)\n\t\t\t\t\tend\n\t\t\t\t\tself:Schedule(1, self.AddMsg, self, msg)\n\t\t\t\tend\n\t\t\t\tlocal msg\n\t\t\t\tfor k, _ in pairs(autoRespondSpam) do\n\t\t\t\t\tif self.Options.WhisperStats then\n\t\t\t\t\t\tmsg = msg or chatPrefixShort..L.WHISPER_COMBAT_END_KILL_STATS:format(playerName, difficultyText..(name or \"\"), totalKills)\n\t\t\t\t\telse\n\t\t\t\t\t\tmsg = msg or chatPrefixShort..L.WHISPER_COMBAT_END_KILL:format(playerName, difficultyText..(name or \"\"))\n\t\t\t\t\tend\n\t\t\t\t\tsendWhisper(k, msg)\n\t\t\t\tend\n\t\t\t\tif self.Options.ReportRecount and self:GetRaidRank() > 0 and Recount then\n\t\t\t\t\tRecount:ReportData(25,(GetNumRaidMembers() > 0 and \"raid\") or \"party\")\n\t\t\t\tend\n\t\t\t\tif self.Options.ReportSkada and self:GetRaidRank() > 0 and Skada and Skada.revisited then\n\t\t\t\t\tself:Schedule(1, function() -- delayed by one second to prevent CombatLogClearEntries wow crash\n\t\t\t\t\t\tSkada:Report(\"RAID\", \"preset\", nil, nil, 25)\n\t\t\t\t\tend)\n\t\t\t\tend\n\t\t\t\tfireEvent(\"kill\", mod) -- Backwards compatibility\n\t\t\t\tfireEvent(\"DBM_Kill\", mod)\n\t\t\t\tif BossBanner then\n\t\t\t\t\tlocal encounterName = mod.localization.general.name or \"Unknown\"\n\t\t\t\t\tBossBanner:OnEvent(\"BOSS_KILL\", modId, encounterName) -- modId is mocked up as encounterID, encounterName is mocked up via mod translation table\n\t\t\t\tend\n\t\t\t\tif savedDifficulty == \"worldboss\" and mod.WBEsync then\n\t\t\t\t\tif lastBossDefeat[modId..playerRealm] and (GetTime() - lastBossDefeat[modId..playerRealm] < 30) then return end--Someone else synced in last 10 seconds so don't send out another sync to avoid needless sync spam.\n\t\t\t\t\tlastBossDefeat[modId..playerRealm] = GetTime()--Update last defeat time before we send it, so we don't handle our own sync\n\t\t\t\t\tSendWorldSync(self, \"WBD\", modId..\"\\t\"..playerRealm..\"\\t8\\t\"..name)\n\t\t\t\tend\n\t\t\t\tif self.Options.EventSoundVictory2 and self.Options.EventSoundVictory2 ~= \"None\" and self.Options.EventSoundVictory2 ~= \"\" then\n\t\t\t\t\tif self.Options.EventSoundVictory2 == \"Random\" then\n\t\t\t\t\t\tlocal victorySounds = DBM:GetVictorySounds()\n\t\t\t\t\t\tif #victorySounds >= 3 then\n\t\t\t\t\t\t\tself:PlaySoundFile(victorySounds[random(3, #victorySounds)].value)\n\t\t\t\t\t\tend\n\t\t\t\t\telse\n\t\t\t\t\t\tself:PlaySoundFile(self.Options.EventSoundVictory2, nil, true)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tif mod.OnCombatEnd then mod:OnCombatEnd(wipe) end\n\t\t\tif mod.OnLeavingCombat then delayedFunction = mod.OnLeavingCombat end\n\t\t\tself.BossHealth:Hide()\n\t\t\tif #inCombat == 0 then--prevent error if you pulled multiple boss. (Earth, Wind and Fire)\n\t\t\t\tprivate.statusGuildDisabled, private.statusWhisperDisabled, private.raidIconsDisabled, private.chatBubblesDisabled = false, false, false, false\n\t\t\t\tif self.Options.RecordOnlyBosses then\n\t\t\t\t\tself:Schedule(10, self.StopLogging, self)--small delay to catch kill/died combatlog events\n\t\t\t\tend\n\t\t\t\tself:HideBlizzardEvents(0)\n\t\t\t\tself:Unschedule(checkBossHealth)\n\t\t\t\tself:Unschedule(checkCustomBossHealth)\n\t\t\t\tself.Arrow:Hide(true)\n\t\t\t\t-- doesn't need InCombatLockdown() check since it's not a protected function\n\t\t\t\tif watchFrameRestore then\n\t\t\t\t\tWatchFrame:Show()\n\t\t\t\t\twatchFrameRestore = false\n\t\t\t\tend\n\t\t\tif tooltipsHidden then\n\t\t\t\t\t--Better or cleaner way?\n\t\t\t\t\ttooltipsHidden = false\n\t\t\t\t\tGameTooltip:SetScript(\"OnShow\", GameTooltip.Show)\n\t\t\t\tend\n\t\t\t\tif self.Options.DisableSFX then\n\t\t\t\t\tSetCVar(\"Sound_EnableSFX\", 1)\n\t\t\t\tend\n\t\t\t\t--cache table\n\t\t\t\ttwipe(autoRespondSpam)\n\t\t\t\ttwipe(bossHealth)\n\t\t\t\ttwipe(bossHealthuIdCache)\n\t\t\t\t--sync table\n\t\t\t\ttwipe(private.canSetIcons)\n\t\t\t\ttwipe(iconSetRevision)\n\t\t\t\ttwipe(iconSetPerson)\n\t\t\t\tbossuIdFound = false\n\t\t\t\tencounterDifficulty, encounterDifficultyText, encounterDifficultyIndex = nil, nil, nil\n\n\t\t\t\tself:CreatePizzaTimer(time, \"\", nil, nil, nil, true)--Auto Terminate infinite loop timers on combat end\n\t\t\t\tself:TransitionToDungeonBGM(false, true)\n\t\t\t\tself:Schedule(22, self.TransitionToDungeonBGM, self)\n\t\t\t\t--module cleanup\n\t\t\t\tprivate:ClearModuleTasks()\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction DBM:OnMobKill(cId, synced)\n\tif cId ~= 0 and bossIds[cId] then\n\t\tlocal combat = combatInfo[LastInstanceMapID] or combatInfo[LastInstanceZoneName]\n\t\tif dbmIsEnabled and combat then\n\t\t\tfor _, v in ipairs(combat) do\n\t\t\t\tif v.mod.Options.Enabled and v.type:find(\"combat\") and (v.multiMobPullDetection and checkEntry(v.multiMobPullDetection, cId) or v.mob == cId) and not (#inCombat > 0 and v.noMultiBoss) then\n\t\t\t\t\tlocal uId = DBM:GetUnitIdFromCID(cId) or \"target\"\n\t\t\t\t\tif v.mod.noFriendlyEngagement and UnitIsFriend(\"player\", uId) then return end\n\t\t\t\t\tself:StartCombat(v.mod, 0, \"UNIT_DIED\") -- StartCombat on instant kills, for proper Encounter Start/End detection\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\tfor i = #inCombat, 1, -1 do\n\t\tlocal v = inCombat[i]\n\t\tif not v.combatInfo then\n\t\t\treturn\n\t\tend\n\t\tif v.combatInfo.noBossDeathKill then return end\n\t\tif v.combatInfo.killMobs and v.combatInfo.killMobs[cId] then\n\t\t\tif not synced then\n\t\t\t\tsendSync(\"DBMv4-Kill\", cId)\n\t\t\tend\n\t\t\tv.combatInfo.killMobs[cId] = false\n\t\t\tif v.numBoss then\n\t\t\t\tv.vb.bossLeft = (v.vb.bossLeft or v.numBoss) - 1\n\t\t\t\tself:Debug(\"Boss left - \"..v.vb.bossLeft..\"/\"..v.numBoss, 2)\n\t\t\tend\n\t\t\tlocal allMobsDown = true\n\t\t\tfor _, k in pairs(v.combatInfo.killMobs) do\n\t\t\t\tif k then\n\t\t\t\t\tallMobsDown = false\n\t\t\t\t\tbreak\n\t\t\t\tend\n\t\t\tend\n\t\t\tif allMobsDown then\n\t\t\t\tself:EndCombat(v, nil, nil, \"All Mobs Down\")\n\t\t\tend\n\t\telseif cId == v.combatInfo.mob and not v.combatInfo.killMobs and not v.combatInfo.multiMobPullDetection then\n\t\t\tif not synced then\n\t\t\t\tsendSync(\"DBMv4-Kill\", cId)\n\t\t\tend\n\t\t\tself:EndCombat(v, nil, nil, \"Main CID Down\")\n\t\tend\n\tend\nend\n\ndo\n\tlocal autoLog = false\n\tlocal autoTLog = false\n\n\tlocal function isLogableContent(self)\n\t\t--1: Check for any broad global filters like LFG/LFR filter\n\t\t--2: Check for what content specifically selected for logging\n\t\t--3: Boss Only filter is handled somewhere else (where StartLogging is called)\n\n\t\tif self.Options.DoNotLogLFG and IsPartyLFG() then\n\t\t\treturn false\n\t\tend\n\n\t\t--First checks are manual index checks versus table because even old content can be scaled up using M+ or TW scaling tech\n\t\t--Current player level Mythic+\n\t\tif self.Options.LogCurrentMPlus and (difficultyIndex or 0) == 8 then\n\t\t\treturn true\n\t\tend\n\t\t--Timewalking raid\n\t\tif self.Options.LogTWRaids and (difficultyIndex == 24 or difficultyIndex == 33) and (instanceDifficultyBylevel[LastInstanceMapID] and instanceDifficultyBylevel[LastInstanceMapID][2] == 3) then\n\t\t\treturn true\n\t\tend\n\t\t--Timewalking Dungeon\n\t\tif self.Options.LogTWDungeons and (difficultyIndex == 24 or difficultyIndex == 33) and (instanceDifficultyBylevel[LastInstanceMapID] and instanceDifficultyBylevel[LastInstanceMapID][2] == 2) then\n\t\t\treturn true\n\t\tend\n\n\t\t--Now we do checks relying on pre coded trivial check table\n\t\t--Current level Mythic raid\n\t\tif self.Options.LogCurrentMythicRaids and instanceDifficultyBylevel[LastInstanceMapID] and (instanceDifficultyBylevel[LastInstanceMapID][1] >= playerLevel) and (instanceDifficultyBylevel[LastInstanceMapID][2] == 3) and difficultyIndex == 16 then\n\t\t\treturn true\n\t\tend\n\t\t--Current player level non Mythic raid\n\t\tif self.Options.LogCurrentRaids and instanceDifficultyBylevel[LastInstanceMapID] and (instanceDifficultyBylevel[LastInstanceMapID][1] >= playerLevel) and (instanceDifficultyBylevel[LastInstanceMapID][2] == 3) and difficultyIndex ~= 16\n\t\tor difficultyIndex == 18 -- Custom (Warmane Events)\n\t\tthen\n\t\t\treturn true\n\t\tend\n\t\t--Trivial raid (ie one below players level)\n\t\tif self.Options.LogTrivialRaids and instanceDifficultyBylevel[LastInstanceMapID] and (instanceDifficultyBylevel[LastInstanceMapID][1] < playerLevel) and (instanceDifficultyBylevel[LastInstanceMapID][2] == 3) then\n\t\t\treturn true\n\t\tend\n\t\t--Current level Mythic dungeon\n\t\tif self.Options.LogCurrentMythicZero and instanceDifficultyBylevel[LastInstanceMapID] and (instanceDifficultyBylevel[LastInstanceMapID][1] >= playerLevel) and (instanceDifficultyBylevel[LastInstanceMapID][2] == 2) and difficultyIndex == 23 then\n\t\t\treturn true\n\t\tend\n\t\t--Current level Heroic dungeon\n\t\tif self.Options.LogCurrentHeroic and instanceDifficultyBylevel[LastInstanceMapID] and (instanceDifficultyBylevel[LastInstanceMapID][1] >= playerLevel) and (instanceDifficultyBylevel[LastInstanceMapID][2] == 2) and (difficultyIndex == 2 or difficultyIndex == 174) then\n\t\t\treturn true\n\t\tend\n\t\t--Current level Normal dungeon\n\t\tif self.Options.LogCurrentNormal and instanceDifficultyBylevel[LastInstanceMapID] and (instanceDifficultyBylevel[LastInstanceMapID][1] >= playerLevel) and (instanceDifficultyBylevel[LastInstanceMapID][2] == 2) and (difficultyIndex == 1 or difficultyIndex == 173) then\n\t\t\treturn true\n\t\tend\n\t\t--Trivial dungeon (ie one below players level)\n\t\tif self.Options.LogTrivialDungeons and instanceDifficultyBylevel[LastInstanceMapID] and (instanceDifficultyBylevel[LastInstanceMapID][1] < playerLevel) and (instanceDifficultyBylevel[LastInstanceMapID][2] == 2) then\n\t\t\treturn true\n\t\tend\n\n\t\treturn false\n\tend\n\n\tfunction DBM:StartLogging(timer, checkFunc, force)\n\t\tself:Unschedule(DBM.StopLogging)\n\t\tif not force and not isLogableContent(self) then return end\n\t\tif self.Options.AutologBosses then\n\t\t\tif not LoggingCombat() then\n\t\t\t\tautoLog = true\n\t\t\t\tself:AddMsg(\"|cffffff00\"..COMBATLOGENABLED..\"|r\")\n\t\t\t\tLoggingCombat(true)\n\t\t\tend\n\t\tend\n\t\tlocal transcriptor = _G[\"Transcriptor\"]\n\t\tif self.Options.AdvancedAutologBosses and transcriptor then\n\t\t\tif not transcriptor:IsLogging() then\n\t\t\t\tautoTLog = true\n\t\t\t\tself:AddMsg(\"|cffffff00\"..L.TRANSCRIPTOR_LOG_START..\"|r\")\n\t\t\t\ttranscriptor:StartLog(1)\n\t\t\tend\n\t\tend\n\t\tif checkFunc and (autoLog or autoTLog) then\n\t\t\tself:Unschedule(checkFunc)\n\t\t\tself:Schedule(timer+10, checkFunc)--But if pull was canceled and we don't have a boss engaged within 10 seconds of pull timer ending, abort log\n\t\tend\n\tend\n\n\tfunction DBM:StopLogging()\n\t\tif self.Options.AutologBosses and LoggingCombat() and autoLog then\n\t\t\tautoLog = false\n\t\t\tself:AddMsg(\"|cffffff00\"..COMBATLOGDISABLED..\"|r\")\n\t\t\tLoggingCombat(false)\n\t\tend\n\t\tlocal transcriptor = _G[\"Transcriptor\"]\n\t\tif self.Options.AdvancedAutologBosses and transcriptor and autoTLog then\n\t\t\tif transcriptor:IsLogging() then\n\t\t\t\tautoTLog = false\n\t\t\t\tself:AddMsg(\"|cffffff00\"..L.TRANSCRIPTOR_LOG_END..\"|r\")\n\t\t\t\ttranscriptor:StopLog(1)\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction DBM:AddSpecialEventToTranscriptorLog(name) -- custom implementation, to further improve Transcriptor timer diffs with scheduled functions from DBM\n\t\tlocal transcriptor = _G[\"Transcriptor\"]\n\t\tif not transcriptor then return end\n\n\t\tif transcriptor:IsLogging() then -- checking for running log (might be unnecessary, but doesnt hurt)\n\t\t\tif not transcriptor.InsertSpecialEvent then -- checking for existence of function, to prevent nil from outdated Transcriptor versions\n\t\t\t\tDBM:AddMsg(\"Transcriptor addon is outdated. Download the latest version from the following link: https://github.com/Zidras/Transcriptor-WOTLK\")\n\t\t\t\treturn\n\t\t\tend\n\t\t\tif name and type(name) == \"string\" then\n\t\t\t\tself:Debug(\"Added Special Event to Transcriptor Log: \"..name)\n\t\t\t\ttranscriptor.InsertSpecialEvent(name)\n\t\t\telse\n\t\t\t\terror(\"DBM:AddEventToTranscriptorLog(name) must receive a string.\")\n\t\t\tend\n\t\tend\n\tend\nend\n\ndo\n\t-- From Kader's Compat lib\n\tlocal LGTRoleTable = {melee = \"DAMAGER\", caster = \"DAMAGER\", healer = \"HEALER\", tank = \"TANK\"}\n\tlocal roleIconTable = {[\"DAMAGER\"] = CL.DAMAGE_ICON, [\"HEALER\"] = CL.HEALER_ICON, [\"TANK\"] = CL.TANK_ICON, [\"NONE\"] = \"|TInterface\\\\Icons\\\\INV_Misc_QuestionMark:16:16:0:0:64:64:5:59:5:59|t\"}\n\tlocal specsTable = {\n\t\t[\"MAGE\"] = {62, 63, 64},\n\t\t[\"PRIEST\"] = {256, 257, 258},\n\t\t[\"ROGUE\"] = {259, 260, 261},\n\t\t[\"WARLOCK\"] = {265, 266, 267},\n\t\t[\"WARRIOR\"] = {71, 72, 73},\n\t\t[\"PALADIN\"] = {65, 66, 70},\n\t\t[\"DEATHKNIGHT\"] = {250, 251, 252},\n\t\t[\"DRUID\"] = {102, 103, 104, 105},\n\t\t[\"HUNTER\"] = {253, 254, 255},\n\t\t[\"SHAMAN\"] = {262, 263, 264}\n\t}\n\n\tlocal function GetSpecialization(isInspect, isPet, specGroup)\n\t\tlocal currentSpecGroup = GetActiveTalentGroup(isInspect, isPet) or (specGroup or 1)\n\t\tlocal points, specname, specid = 0, nil, nil\n\n\t\tfor i = 1, MAX_TALENT_TABS do\n\t\t\tlocal name, _, pointsSpent = GetTalentTabInfo(i, isInspect, isPet, currentSpecGroup)\n\t\t\tif points <= pointsSpent then\n\t\t\t\tpoints = pointsSpent\n\t\t\t\tspecname = name\n\t\t\t\tspecid = i\n\t\t\tend\n\t\tend\n\t\treturn specid, specname, points\n\tend\n\n\tlocal function UnitHasTalent(unit, spell, talentGroup)\n\t\tspell = (type(spell) == \"number\") and GetSpellInfo(spell) or spell\n\t\treturn LGT:UnitHasTalent(unit, spell, talentGroup)\n\tend\n\n\tlocal function GetInspectSpecialization(unit, class)\n\t\tlocal spec  -- start with nil\n\n\t\tif UnitExists(unit) then\n\t\t\tclass = class or select(2, UnitClass(unit))\n\t\t\tif class and specsTable[class] then\n\t\t\t\tlocal talentGroup = LGT:GetActiveTalentGroup(unit)\n\t\t\t\tlocal maxPoints, index = 0, 0\n\n\t\t\t\tfor i = 1, MAX_TALENT_TABS do\n\t\t\t\t\tlocal _, _, pointsSpent = LGT:GetTalentTabInfo(unit, i, talentGroup)\n\t\t\t\t\tif pointsSpent ~= nil then\n\t\t\t\t\t\tif maxPoints < pointsSpent then\n\t\t\t\t\t\t\tmaxPoints = pointsSpent\n\t\t\t\t\t\t\tif class == \"DRUID\" and i >= 2 then\n\t\t\t\t\t\t\t\tif i == 3 then\n\t\t\t\t\t\t\t\t\tindex = 4\n\t\t\t\t\t\t\t\telseif i == 2 then\n\t\t\t\t\t\t\t\t\tlocal points = UnitHasTalent(unit, 57881)\n\t\t\t\t\t\t\t\t\tindex = (points and points > 0) and 3 or 2\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tindex = i\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tspec = specsTable[class][index]\n\t\t\tend\n\t\tend\n\n\t\treturn spec\n\tend\n\n\tlocal function GetSpecializationRole(unit, class)\n\t\tunit = unit or \"player\" -- always fallback to player\n\n\t\t-- For LFG using \"UnitGroupRolesAssigned\" is enough.\n\t\tlocal isTank, isHealer, isDamager = UnitGroupRolesAssigned(unit)\n\t\tif isTank then\n\t\t\treturn \"TANK\"\n\t\telseif isHealer then\n\t\t\treturn \"HEALER\"\n\t\telseif isDamager then\n\t\t\treturn \"DAMAGER\"\n\t\tend\n\n\t\t-- speedup things using classes.\n\t\tclass = class or select(2, UnitClass(unit))\n\t\tif class == \"HUNTER\" or class == \"MAGE\" or class == \"ROGUE\" or class == \"WARLOCK\" then\n\t\t\treturn \"DAMAGER\"\n\t\tend\n\t\treturn LGTRoleTable[LGT:GetUnitRole(unit)] or \"NONE\"\n\tend\n\n\tlocal function GetSpecializationInfo(specIndex, isInspect, isPet, specGroup)\n\t\tlocal name, icon, _, background = GetTalentTabInfo(specIndex, isInspect, isPet, specGroup)\n\t\tlocal id, role\n\t\tif isInspect and UnitExists(\"target\") then\n\t\t\tid, role = GetInspectSpecialization(\"target\"), GetSpecializationRole(\"target\")\n\t\telse\n\t\t\tid, role = GetInspectSpecialization(\"player\"), GetSpecializationRole(\"player\")\n\t\tend\n\t\treturn id, name, \"NaN\", icon, background, role\n\tend\n\n\tlocal function update(_, _, unit)\n\t\tlocal specID, name = GetInspectSpecialization(unit), UnitName(unit)\n\t\t-- if raid table doesn't findd the player, force an update\n\t\tif not raid[name] then\n\t\t\tDBM:RAID_ROSTER_UPDATE(true)\n\t\tend\n\t\t-- populate specID\n\t\tif raid[name] then\n\t\t\traid[name].specID = specID\n\t\tend\n\tend\n\tLGT.RegisterCallback(DBM, \"LibGroupTalents_Update\", update)\n\n\t--In event api fails to pull any data at all, just assign classes to their initial template roles from exiles reach\n\tlocal fallbackClassToRole = {\n\t\t[\"MAGE\"] = 1449,\n\t\t[\"PALADIN\"] = 1451,\n\t\t[\"WARRIOR\"] = 1446,\n\t\t[\"DRUID\"] = 1447,\n\t\t[\"DEATHKNIGHT\"] = 1455,\n\t\t[\"HUNTER\"] = 1448,\n\t\t[\"PRIEST\"] = 1452,\n\t\t[\"ROGUE\"] = 1453,\n\t\t[\"SHAMAN\"] = 1444,\n\t\t[\"WARLOCK\"] = 1454,\n\t}\n\n\tfunction DBM:SetCurrentSpecInfo()\n\t\tcurrentSpecGroup = GetSpecialization() or 1\n\t\tif GetSpecializationInfo(currentSpecGroup) then\n\t\t\tcurrentSpecID, currentSpecName = GetSpecializationInfo(currentSpecGroup)--give temp first spec id for non-specialization char. no one should use dbm with no specialization, below level 10, should not need dbm.\n\t\t\tcurrentSpecID = tonumber(currentSpecID)\n\t\telse\n\t\t\tcurrentSpecID, currentSpecName = fallbackClassToRole[playerClass], playerClass\n\t\tend\n\tend\n\n\tfunction DBM:GetUnitRole(uId, class)\n\t\treturn GetSpecializationRole(uId, class)\n\tend\n\n\tfunction DBM:GetUnitRoleIcon(uId, class)\n\t\tlocal role = GetSpecializationRole(uId, class)\n\t\treturn roleIconTable[role]\n\tend\nend\n\n-- https://wowpedia.fandom.com/wiki/DifficultyID\n-- ID\tName\t\t\t\tType\t\tFlavour\n-- 1\tNormal\t\t\t\tparty\t\tretail\n-- 2\tHeroic\t\t\t\tparty\t\tretail\n-- 3\t10 Player\t\t\traid\t\tretail\n-- 4\t25 Player\t\t\traid\t\tretail\n-- 5\t10 Player (Heroic)\traid\t\tretail\n-- 6\t25 Player (Heroic)\traid\t\tretail\n-- 9\t40 Player\t\t\traid\n-- 16\tMythic\t\t\t\traid\n-- 18\tEvent\t\t\t\traid\t\tretail (custom)\n-- 23\tMythic\t\t\t\tparty\n-- 24\tTimewalking\t\t\tparty\n-- 33\tTimewalking\t\t\traid\n-- 148\t20 Player\t\t\traid\n-- 173\tNormal\t\t\t\tparty\t\tclassic\n-- 174\tHeroic\t\t\t\tparty\t\tclassic\n-- 175\t10 Player\t\t\traid\t\tclassic\n-- 176\t25 Player\t\t\traid\t\tclassic\n-- 186\t40 Player\t\t\traid\t\tclassic (custom?)\n-- 193\t10 Player (Heroic)\traid\t\tclassic\n-- 194\t25 Player (Heroic)\traid\t\tclassic\nfunction DBM:GetCurrentInstanceDifficulty()\n\tlocal instanceName, instanceType, difficulty, difficultyName, maxPlayers, dynamicDifficulty, isDynamicInstance = GetInstanceInfo()\n\tif instanceType == \"none\" then\n\t\treturn difficulty == 1 and \"worldboss\", L.RAID_INFO_WORLD_BOSS..\" - \", 0, maxPlayers\n\telseif instanceType == \"raid\" then\n\t\tif isDynamicInstance then -- Dynamic raids (ICC, RS)\n\t\t\tif difficulty == 1 then -- 10 players\n\t\t\t\tif dynamicDifficulty == 0 then\n\t\t\t\t\treturn \"normal10\", difficultyName..\" - \", 175, maxPlayers\n\t\t\t\telseif dynamicDifficulty == 1 then\n\t\t\t\t\treturn \"heroic10\" , difficultyName..\" - \", 193, maxPlayers\n\t\t\t\telse\n\t\t\t\t\treturn \"unknown\" , difficultyName..\" - \", difficulty, maxPlayers\n\t\t\t\tend\n\t\t\telseif difficulty == 2 then -- 25 players\n\t\t\t\tif dynamicDifficulty == 0 then\n\t\t\t\t\treturn \"normal25\", difficultyName..\" - \", 176, maxPlayers\n\t\t\t\telseif dynamicDifficulty == 1 then\n\t\t\t\t\treturn \"heroic25\", difficultyName..\" - \", 194, maxPlayers\n\t\t\t\telse\n\t\t\t\t\treturn \"unknown\", difficultyName..\" - \", difficulty, maxPlayers\n\t\t\t\tend\n\t\t\t-- On Warmane, it was confirmed by Midna that difficulty returning only 1 or 2 is their intended behaviour: https://www.warmane.com/bugtracker/report/91065\n\t\t\t-- code below (difficulty 3 and 4 in dynamic instances) prevents GetCurrentInstanceDifficulty() from breaking on servers that correctly assign difficulty 1-4 in dynamic instances.\n\t\t\telseif difficulty == 3 then -- 10 heroic, dynamic\n\t\t\t\treturn \"heroic10\", difficultyName..\" - \", 193, maxPlayers\n\t\t\telseif difficulty == 4 then -- 25 heroic, dynamic\n\t\t\t\treturn \"heroic25\", difficultyName..\" - \", 194, maxPlayers\n\t\t\tend\n\t\telse -- Non-dynamic raids\n\t\t\tif difficulty == 1 then\n\t\t\t\t-- check for Timewalking instance (workaround using GetRaidDifficulty since on Warmane all the usual APIs fail and return \"normal\" difficulty)\n\t\t\t\tlocal raidDifficulty = GetRaidDifficulty()\n\t\t\t\tif raidDifficulty ~= difficulty and (raidDifficulty == 2 or raidDifficulty == 4) then -- extra checks due to lack of tests and no access to a timewalking server\n\t\t\t\t\treturn \"timewalker\", difficultyName..\" - \", 33, maxPlayers\n\t\t\t\telse\n\t\t\t\t\tif maxPlayers == 40 then\n\t\t\t\t\t\treturn \"normal40\", difficultyName..\" - \", 186, maxPlayers\n\t\t\t\t\telseif maxPlayers == 25 then\n\t\t\t\t\t\treturn \"normal25\", difficultyName..\" - \", 176, maxPlayers\n\t\t\t\t\telseif maxPlayers == 20 then -- ZG, AQ20\n\t\t\t\t\t\treturn \"normal20\", difficultyName..\" - \", 148, maxPlayers\n\t\t\t\t\telseif maxPlayers == 10 then\n\t\t\t\t\t\treturn \"normal10\", difficultyName..\" - \", 175, maxPlayers\n\t\t\t\t\telseif maxPlayers == 0 and instanceName == \"Azshara Crater\" then -- Warmane 2024 Tower Defense, with completely borked API\n\t\t\t\t\t\treturn \"event25\", \"Event - \", 18, 25\n\t\t\t\t\telseif maxPlayers then\n\t\t\t\t\t\tDBM:AddMsg(\"Instance difficulty not registered. Please report this bug! -> \".. maxPlayers)\n\t\t\t\t\t\treturn maxPlayers and \"normal\"..maxPlayers, difficultyName..\" - \", difficulty, maxPlayers\n\t\t\t\t\telse\n\t\t\t\t\t\treturn \"unknown\", difficultyName..\" - \", difficulty, maxPlayers\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\telseif difficulty == 2 then\n\t\t\t\treturn \"normal25\", difficultyName..\" - \", 176, maxPlayers\n\t\t\telseif difficulty == 3 then\n\t\t\t\treturn \"heroic10\", difficultyName..\" - \", 193, maxPlayers\n\t\t\telseif difficulty == 4 then\n\t\t\t\treturn \"heroic25\", difficultyName..\" - \", 194, maxPlayers\n\t\t\tend\n\t\tend\n\telseif instanceType == \"party\" then -- 5 man Dungeons\n\t\tif difficulty == 1 then\n\t\t\treturn \"normal5\", difficultyName..\" - \", 173, maxPlayers\n\t\telseif difficulty == 2 then\n\t\t\t-- check for Mythic instance (workaround using GetDungeonDifficulty since on Warmane all the usual APIs fail and return \"heroic\" difficulty)\n\t\t\tlocal dungeonDifficulty = GetDungeonDifficulty()\n\t\t\tif dungeonDifficulty == 3 then\n\t\t\t\treturn \"mythic\", difficultyName..\" - \", 23, maxPlayers\n\t\t\telse\n\t\t\t\treturn \"heroic5\", difficultyName..\" - \", 174, maxPlayers\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction DBM:GetCurrentArea()\n\treturn LastInstanceMapID\nend\n\nfunction DBM:GetCurrentAreaName()\n\treturn LastInstanceZoneName\nend\n\nfunction DBM:GetCurrentDifficulty()\n\treturn difficultyIndex\nend\n\nfunction DBM:GetGroupSize()\n\treturn LastGroupSize\nend\n\n--Public api for requesting what phase a boss is in, in case they missed the DBM_SetStage callback\n--ModId would be journal Id or mod string of mod.\n--If not mod is not provided, it'll simply return stage for first boss in combat table if a boss is engaged\nfunction DBM:GetStage(modId)\n\tif modId then\n\t\tlocal mod = self:GetModByName(modId)\n\t\tif mod and mod.inCombat then\n\t\t\treturn mod.vb.phase or 0, mod.vb.stageTotality or 0\n\t\tend\n\telse\n\t\tif #inCombat > 0 then--At least one boss is engaged\n\t\t\tlocal mod = inCombat[1]--Get first mod in table\n\t\t\tif mod then\n\t\t\t\treturn mod.vb.phase or 0, mod.vb.stageTotality or 0\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction DBM:HasMapRestrictions()\n\tlocal playerX, playerY = GetPlayerMapPosition(\"player\")\n\t-- if playerX == 0 or playerY == 0 then -- attempt to fix zone once. Disabled for now to confirm LK 2.5 FPS issues.\n\t-- \tSetMapToCurrentZone() -- DO NOT RUN THIS FUNCTION IN A LOOP! It's a waste of cpu power and will tank FPS due to radar loop scan.\n\t-- \tplayerX, playerY = GetPlayerMapPosition(\"player\")\n\t-- end\n\tlocal mapName = GetMapInfo()\n\tlocal level = GetCurrentMapDungeonLevel()\n\tlocal usesTerrainMap = DungeonUsesTerrainMap()\n\tlevel = usesTerrainMap and level - 1 or level\n\tif (playerX == 0 and playerY == 0) or (self.MapSizes[mapName] and not self.MapSizes[mapName][level]) then\n\t\treturn true\n\tend\n\treturn false\nend\n\ndo\n\tlocal LSMMediaCacheBuilt, sharedMediaFileCache, validateCache = false, {}, {}\n\n\tlocal function buildLSMFileCache()\n\t\tlocal hashtable = LibStub(\"LibSharedMedia-3.0\", true):HashTable(\"sound\")\n\t\tlocal keytable = {}\n\t\tfor k in next, hashtable do\n\t\t\ttinsert(keytable, k)\n\t\tend\n\t\tfor i = 1, #keytable do\n\t\t\tsharedMediaFileCache[hashtable[keytable[i]]] = true\n\t\tend\n\t\tLSMMediaCacheBuilt = true\n\tend\n\n\tfunction DBM:ValidateSound(path, log, ignoreCustom)\n\t\t-- Ignore built-in sounds\n\t\tif string.find(path:lower(), \"^sound[\\\\/]+\") then -- type(path) == \"number\" removed since it's not supported in WotLK\n\t\t\treturn true\n\t\tend\n\t\t-- Validate LibSharedMedia\n\t\tif not LSMMediaCacheBuilt then\n\t\t\tbuildLSMFileCache()\n\t\tend\n\t\tif not sharedMediaFileCache[path] and not path:find(\"DBM\") then\n\t\t\tif log then\n\t\t\t\tif ignoreCustom then\n\t\t\t\t\t-- This uses debug print because it has potential to cause mid fight spam\n\t\t\t\t\tself:Debug(\"PlaySoundFile failed do to missing media at \" .. path .. \". To fix this, re-add missing sound or change setting using this sound to a different sound.\")\n\t\t\t\telse\n\t\t\t\t\tAddMsg(self, \"PlaySoundFile failed do to missing media at \" .. path .. \". To fix this, re-add missing sound or change setting using this sound to a different sound.\")\n\t\t\t\tend\n\t\t\tend\n\t\t\treturn false\n\t\tend\n\t\t-- Validate audio packs\n\t\tif not validateCache[path] then\n\t\t\tlocal splitTable = {}\n\t\t\tfor split in string.gmatch(path, \"[^\\\\/]+\") do -- Matches \\ and / as path delimiters (incl. more than one)\n\t\t\t\ttinsert(splitTable, split)\n\t\t\tend\n\t\t\tif #splitTable >= 3 and splitTable[3]:lower() == \"dbm-customsounds\" then\n\t\t\t\tvalidateCache[path] = {\n\t\t\t\t\texists = ignoreCustom or false\n\t\t\t\t}\n\t\t\telseif #splitTable >= 3 and splitTable[1]:lower() == \"interface\" and splitTable[2]:lower() == \"addons\" then -- We're an addon sound\n\t\t\t\tvalidateCache[path] = {\n\t\t\t\t\texists = IsAddOnLoaded(splitTable[3]),\n\t\t\t\t\tAddOn = splitTable[3]\n\t\t\t\t}\n\t\t\telse\n\t\t\t\tvalidateCache[path] = {\n\t\t\t\t\texists = true\n\t\t\t\t}\n\t\t\tend\n\t\tend\n\t\tif validateCache[path] and not validateCache[path].exists then\n\t\t\tif log then\n\t\t\t\t-- This uses actual user print because these events only occur at start or end of instance or fight.\n\t\t\t\tAddMsg(self, \"PlaySoundFile failed due to missing media at \" .. path .. \". To fix this, re-add/enable \" .. validateCache[path].AddOn .. \" or change setting using this sound to a different sound.\")\n\t\t\tend\n\t\t\treturn false\n\t\tend\n\t\treturn true\n\tend\n\n\tlocal function playSoundFile(self, path, _, validate)\n\t\tif self.Options.SilentMode or path == \"\" or path == \"None\" then\n\t\t\treturn\n\t\tend\n\t\tif validate and not self:ValidateSound(path, true, true) then\n\t\t\treturn\n\t\tend\n\t\tself:Debug(\"PlaySoundFile playing with media \" .. path, 3)\n\t\tPlaySoundFile(path)\n\t\tfireEvent(\"DBM_PlaySound\", path)\n\tend\n\tlocal ingameSoundPath = {\n\t\t[850] = \"Sound\\\\Interface\\\\uEscapeScreenOpen.wav\",\n\t\t[856] = \"Sound\\\\Interface\\\\uChatScrollButton.wav\",\n\t\t[8585] = \"Sound\\\\Creature\\\\CThun\\\\CThunYouWillDIe.wav\",\n\t\t[8960] = \"Sound\\\\Interface\\\\levelup2.wav\"\n\t}\n\tlocal function playSound(self, path, ignoreSFX)\n\t\tif self.Options.SilentMode or path == \"\" or path == \"None\" then\n\t\t\treturn\n\t\tend\n\t\tlocal soundSetting = self.Options.UseSoundChannel\n\t\tself:Debug(\"PlaySound playing with media \" .. path, 3)\n\t\tif ignoreSFX or soundSetting == \"Master\" then\n\t\t\tif ingameSoundPath[path] then\n\t\t\t\tPlaySoundFile(ingameSoundPath[path])\n\t\t\telse\n\t\t\t\tPlaySound(path)\n\t\t\t\tif not GetCVarBool(\"Sound_EnableSFX\") then\n\t\t\t\t\tself:AddMsg(\"No sound because SFX is disabled and DBM ingameSoundPath table does not have a sound path for \" .. path .. \". Report the path (the numbers) to maintainer on Discord or Github.\")\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\tPlaySound(path) -- Using SFX channel, leave forceNoDuplicates on.\n\t\tend\n\t\tfireEvent(\"DBM_PlaySound\", path)\n\tend\n\n\tfunction DBM:PlaySoundFile(path, ignoreSFX, validate)\n\t\tplaySoundFile(self, path, ignoreSFX, validate)\n\tend\n\n\tfunction DBM:PlaySound(path, ignoreSFX)\n\t\tplaySound(self, path, ignoreSFX)\n\tend\nend\n\n--Handle new spell name requesting with wrapper, to make api changes easier to handle\nfunction DBM:GetSpellInfo(spellId)\n\tlocal name, rank, icon, cost, isFunnel, powerType, castingTime, minRange, maxRange = GetSpellInfo(spellId)\n\tif not name then--Bad request all together\n\t\tDBM:Debug(\"|cffff0000Invalid call to GetSpellInfo for spellID: |r\"..spellId)\n\t\treturn nil\n\telse--Good request, return now\n\t\treturn name, rank, icon, cost, isFunnel, powerType, castingTime, minRange, maxRange\n\tend\nend\n\nfunction DBM:UnitAura(uId, spellInput, spellInput2, spellInput3, spellInput4)\n\tif not uId then return end\n\tfor i = 1, 60 do\n\t\tlocal spellName, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId = UnitAura(uId, i)\n\t\tif not spellName then return end\n\t\tif spellInput == spellName or spellInput == spellId or spellInput2 == spellName or spellInput2 == spellId or spellInput3 == spellName or spellInput3 == spellId or spellInput4 == spellName or spellInput4 == spellId then\n\t\t\treturn spellName, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId\n\t\tend\n\tend\nend\n\nfunction DBM:UnitDebuff(uId, spellInput, spellInput2, spellInput3, spellInput4)\n\tif not uId then return end\n\tfor i = 1, 60 do\n\t\tlocal spellName, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId = UnitDebuff(uId, i)\n\t\tif not spellName then return end\n\t\tif spellInput == spellName or spellInput == spellId or spellInput2 == spellName or spellInput2 == spellId or spellInput3 == spellName or spellInput3 == spellId or spellInput4 == spellName or spellInput4 == spellId then\n\t\t\treturn spellName, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId\n\t\tend\n\tend\nend\n\nfunction DBM:UnitBuff(uId, spellInput, spellInput2, spellInput3, spellInput4)\n\tif not uId then return end\n\tfor i = 1, 60 do\n\t\tlocal spellName, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId = UnitBuff(uId, i)\n\t\tif not spellName then return end\n\t\tif spellInput == spellName or spellInput == spellId or spellInput2 == spellName or spellInput2 == spellId or spellInput3 == spellName or spellInput3 == spellId or spellInput4 == spellName or spellInput4 == spellId then\n\t\t\treturn spellName, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId\n\t\tend\n\tend\nend\n\n--Handle new spell name requesting with wrapper, to make api changes easier to handle\nfunction DBM:GetSpellInfoNew(spellId)\n\tlocal name, rank, icon, _, _, _, castingTime, minRange, maxRange = GetSpellInfo(spellId)\n\tif not name then--Bad request all together\n\t\tDBM:Debug(\"|cffff0000Invalid call to GetSpellInfo for spellID: |r\"..spellId)\n\t\treturn nil\n\telse--Good request, return now\n\t\treturn name, rank, icon, castingTime, minRange, maxRange, spellId\n\tend\nend\n\nfunction DBM:UnitDebuffNew(uId, spellInput, spellInput2, spellInput3, spellInput4)\n\tif not uId then return end\n\tfor i = 1, 60 do\n\t\tlocal spellName, _, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId = UnitDebuff(uId, i)\n\t\tif not spellName then return end\n\t\tif spellInput == spellName or spellInput == spellId or spellInput2 == spellName or spellInput2 == spellId or spellInput3 == spellName or spellInput3 == spellId or spellInput4 == spellName or spellInput4 == spellId then\n\t\t\treturn spellName, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId\n\t\tend\n\tend\nend\n\nfunction DBM:UnitBuffNew(uId, spellInput, spellInput2, spellInput3, spellInput4)\n\tif not uId then return end\n\tfor i = 1, 60 do\n\t\tlocal spellName, _, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId = UnitBuff(uId, i)\n\t\tif not spellName then return end\n\t\tif spellInput == spellName or spellInput == spellId or spellInput2 == spellName or spellInput2 == spellId or spellInput3 == spellName or spellInput3 == spellId or spellInput4 == spellName or spellInput4 == spellId then\n\t\t\treturn spellName, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId\n\t\tend\n\tend\nend\n\nfunction DBM:UNIT_DIED(args)\n\tlocal GUID = args.destGUID\n\tif self:IsCreatureGUID(GUID) then\n\t\tself:OnMobKill(self:GetCIDFromGUID(GUID))\n\tend\n\t----GUIDIsPlayer\n\tif self.Options.AFKHealthWarning and GUID == UnitGUID(\"player\") and not DBM:IsEncounterInProgress() and UnitIsAFK(\"player\") and self:AntiSpam(5, \"AFK\") then--You are afk and losing health, some griever is trying to kill you while you are afk/tabbed out.\n\t\tself:FlashClientIcon()\n\t\tself:PlaySound(8585)--So fire an alert sound to save yourself from this person's behavior.\n\t\tself:AddMsg(L.AFK_WARNING:format(0))\n\tend\nend\nDBM.UNIT_DESTROYED = DBM.UNIT_DIED\n\n----------------------\n--  Timer recovery  --\n----------------------\ndo\n\tlocal requestedFrom = {}\n\tlocal requestTime = 0\n\n\tlocal function sort(v1, v2)\n\t\tif v1.revision and not v2.revision then\n\t\t\treturn true\n\t\telseif v2.revision and not v1.revision then\n\t\t\treturn false\n\t\telseif v1.revision and v2.revision then\n\t\t\treturn (tonumber(v1.revision) or 0) > (tonumber(v2.revision) or 0)\n\t\tend\n\tend\n\n\tfunction DBM:RequestTimers(requestNum)\n\t\tif not dbmIsEnabled then return end\n\t\tlocal sortMe, clientUsed = {}, {}\n\t\tfor _, v in pairs(raid) do\n\t\t\ttinsert(sortMe, v)\n\t\tend\n\t\ttsort(sortMe, sort)\n\t\tself:Debug(\"RequestTimers Running\", 2)\n\t\tlocal selectedClient\n\t\tlocal listNum = 0\n\t\tfor _, v in ipairs(sortMe) do\n\t\t\t-- If selectedClient player's realm is not same with your's, timer recovery by selectedClient not works at all.\n\t\t\t-- SendAddonMessage target channel is \"WHISPER\" and target player is other realm, no msg sends at all. At same realm, message sending works fine. (Maybe bliz bug or SendAddonMessage function restriction?)\n\t\t\tif v.name ~= playerName and UnitIsConnected(v.id) and UnitIsPlayer(v.id) and (not UnitIsGhost(v.id)) and (GetTime() - (clientUsed[v.name] or 0)) > 10 then\n\t\t\t\tlistNum = listNum + 1\n\t\t\t\tif listNum == requestNum then\n\t\t\t\t\tselectedClient = v\n\t\t\t\t\tclientUsed[v.name] = GetTime()\n\t\t\t\t\tbreak\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tif not selectedClient then return end\n\t\tself:Debug(\"Requesting timer recovery to \"..selectedClient.name)\n\t\trequestedFrom[selectedClient.name] = true\n\t\trequestTime = GetTime()\n\t\tSendAddonMessage(\"DBMv4-RequestTimers\", \"\", \"WHISPER\", selectedClient.name)\n\tend\n\n\tfunction DBM:ReceiveCombatInfo(sender, mod, time)\n\t\tif dbmIsEnabled and requestedFrom[sender] and (GetTime() - requestTime) < 5 and #inCombat == 0 then\n\t\t\tself:StartCombat(mod, time, \"TIMER_RECOVERY\")\n\t\t\t--Recovery successful, someone sent info, abort other recovery requests\n\t\t\tself:Unschedule(self.RequestTimers)\n\t\t\ttwipe(requestedFrom)\n\t\tend\n\tend\n\n\tfunction DBM:ReceiveTimerInfo(sender, mod, timeLeft, totalTime, id, paused, ...)\n\t\tDBM:Debug((\"Receiving Timer Info: %s %s %s %s from %s\"):format(mod.id, timeLeft, totalTime, \"123\", sender), 3)\n\t\tif requestedFrom[sender] and (GetTime() - requestTime) < 5 then\n\t\t\tlocal lag = paused and 0 or select(3, GetNetStats()) / 1000\n\t\t\tfor _, v in ipairs(mod.timers) do\n\t\t\t\tif v.id == id then\n\t\t\t\t\tv:Start(totalTime, ...)\n\t\t\t\t\tif paused then\n\t\t\t\t\t\tv.paused = true\n\t\t\t\t\tend\n\t\t\t\t\tv:Update(totalTime - timeLeft + lag, totalTime, ...)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction DBM:ReceiveVariableInfo(sender, mod, name, value)\n\t\tif requestedFrom[sender] and (GetTime() - requestTime) < 5 then\n\t\t\tif value == \"true\" then\n\t\t\t\tmod.vb[name] = true\n\t\t\telseif value == \"false\" then\n\t\t\t\tmod.vb[name] = false\n\t\t\telse\n\t\t\t\tmod.vb[name] = value\n\t\t\t\tif name == \"phase\" then\n\t\t\t\t\tmod:SetStage(value)--Fire stage callback for 3rd party mods when stage is recovered\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend\n\ndo\n\tlocal spamProtection = {}\n\tfunction DBM:SendTimers(target)\n\t\tif not dbmIsEnabled then return end\n\t\tself:Debug(\"SendTimers requested by \"..target, 2)\n\t\tlocal spamForTarget = spamProtection[target] or 0\n\t\t-- just try to clean up the table, that should keep the hash table at max. 4 entries or something :)\n\t\tfor k, v in pairs(spamProtection) do\n\t\t\tif GetTime() - v >= 1 then\n\t\t\t\tspamProtection[k] = nil\n\t\t\tend\n\t\tend\n\t\tif GetTime() - spamForTarget < 1 then -- just to prevent players from flooding this on purpose\n\t\t\treturn\n\t\tend\n\t\tspamProtection[target] = GetTime()\n\t\tif #inCombat < 1 then\n\t\t\t--Break timer is up, so send that\n\t\t\t--But only if we are not in combat with a boss\n\t\t\tlocal breakBar = DBT:GetBar(\"%s\\t\"..L.TIMER_BREAK) or DBT:GetBar(L.TIMER_BREAK)\n\t\t\tif breakBar then\n\t\t\t\tlocal remaining = breakBar.timer\n\t\t\t\tself:Debug(\"Sending Break timer to \"..target, 2)\n\t\t\t\tSendAddonMessage(\"DBMv4-BTR3\", remaining, \"WHISPER\", target)\n\t\t\t\tSendAddonMessage(\"DBMv4-Pizza\", (\"%s\\t%s\\t%s\"):format(remaining, L.TIMER_BREAK, tostring(true))) -- Backwards compatibility so old DBMs can receive break timers from this DBM\n\t\t\tend\n\t\t\treturn\n\t\tend\n\t\tlocal mod\n\t\tfor _, v in ipairs(inCombat) do\n\t\t\tmod = not v.isCustomMod and v\n\t\tend\n\t\tmod = mod or inCombat[1]\n\t\tself:SendCombatInfo(mod, target)\n\t\tself:SendVariableInfo(mod, target)\n\t\tself:SendTimerInfo(mod, target)\n\tend\n\tfunction DBM:SendPVPTimers(target)\n\t\tif not dbmIsEnabled then return end\n\t\tself:Debug(\"SendPVPTimers requested by \"..target, 2)\n\t\tlocal spamForTarget = spamProtection[target] or 0\n\t\tlocal time = GetTime()\n\t\t-- just try to clean up the table, that should keep the hash table at max. 4 entries or something :)\n\t\tfor k, v in pairs(spamProtection) do\n\t\t\tif time - v >= 1 then\n\t\t\t\tspamProtection[k] = nil\n\t\t\tend\n\t\tend\n\t\tif time - spamForTarget < 1 then -- just to prevent players from flooding this on purpose\n\t\t\treturn\n\t\tend\n\t\tspamProtection[target] = time\n\t\tlocal mod = self:GetModByName(\"PvPGeneral\")\n\t\tif mod then\n\t\t\tself:SendTimerInfo(mod, target)\n\t\tend\n\tend\nend\n\nfunction DBM:SendCombatInfo(mod, target)\n\tif not dbmIsEnabled then return end\n\treturn SendAddonMessage(\"DBMv4-CombatInfo\", (\"%s\\t%s\"):format(mod.id, GetTime() - mod.combatInfo.pull), \"WHISPER\", target)\nend\n\nfunction DBM:SendTimerInfo(mod, target)\n\tif not dbmIsEnabled then return end\n\tfor _, v in ipairs(mod.timers) do\n\t\t--Pass on any timer that has no type, or has one that isn't an ai timer\n\t\tif not v.type or v.type and v.type ~= \"ai\" then\n\t\t\tfor _, uId in ipairs(v.startedTimers) do\n\t\t\t\tlocal elapsed, totalTime, timeLeft\n\t\t\t\tif select(\"#\", string.split(\"\\t\", uId)) > 1 then\n\t\t\t\t\telapsed, totalTime = v:GetTime(select(2, string.split(\"\\t\", uId)))\n\t\t\t\telse\n\t\t\t\t\telapsed, totalTime = v:GetTime()\n\t\t\t\tend\n\t\t\t\ttimeLeft = totalTime - elapsed\n\t\t\t\tif timeLeft > 0 and totalTime > 0 then\n\t\t\t\t\tself:Debug((\"Sending Timer Info: %s %s %s %s to %s\"):format(mod.id, timeLeft, totalTime, uId, v.paused and \"1\" or \"0\", target), 3)\n\t\t\t\t\tSendAddonMessage(\"DBMv4-TimerInfo\", (\"%s\\t%s\\t%s\\t%s\\t%s\"):format(mod.id, timeLeft, totalTime, uId, v.paused and \"1\" or \"0\"), \"WHISPER\", target)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction DBM:SendVariableInfo(mod, target)\n\tif not dbmIsEnabled then return end\n\tfor vname, v in pairs(mod.vb) do\n\t\tlocal v2 = tostring(v)\n\t\tif v2 then\n\t\t\tSendAddonMessage(\"DBMv4-VarInfo\", (\"%s\\t%s\\t%s\"):format(mod.id, vname, v2), \"WHISPER\", target)\n\t\tend\n\tend\nend\n\ndo\n\tfunction DBM:PLAYER_ENTERING_WORLD()\n\t\tif self.Options.ShowReminders then\n\t\t\tself:Schedule(25, function() if self.Options.SilentMode then self:AddMsg(L.SILENT_REMINDER) end end)\n\t\t\tself:Schedule(30, function() if not self.Options.SettingsMessageShown then self.Options.SettingsMessageShown = true self:AddMsg(L.HOW_TO_USE_MOD) end end)\n--\t\t\tself:Schedule(35, function() if self.Options.NewsMessageShown2 < 2 then self.Options.NewsMessageShown2 = 2 self:AddMsg(L.NEWS_UPDATE) end end)\n\t\tend\n\t\t--Check if any previous changed cvars were not restored and restore them\n\t\tif self.Options.DisableSFX then\n\t\t\tSetCVar(\"Sound_EnableSFX\", 1)\n\t\t\tself:Debug(\"Restoring Sound_EnableSFX CVAR\")\n\t\tend\n\t\tif #inCombat == 0 then\n\t\t\tDBM:Schedule(0, self.RequestTimers, self, 1)\n\t\tend\n\t\tself:LFG_UPDATE()\n\t\tDBM.BossHealth:Hide()\n\tend\nend\n\n------------------------------------\n--  Auto-respond/Status whispers  --\n------------------------------------\ndo\n\tlocal function getNumAlivePlayers()\n\t\tlocal alive = 0\n\t\tif IsInRaid() then\n\t\t\tfor i = 1, GetNumGroupMembers() do\n\t\t\t\talive = alive + ((UnitIsDeadOrGhost(\"raid\"..i) and 0) or 1)\n\t\t\tend\n\t\telse\n\t\t\talive = (UnitIsDeadOrGhost(\"player\") and 0) or 1\n\t\t\tfor i = 1, GetNumSubgroupMembers() do\n\t\t\t\talive = alive + ((UnitIsDeadOrGhost(\"party\"..i) and 0) or 1)\n\t\t\tend\n\t\tend\n\t\treturn alive\n\tend\n\n\tlocal function getNumRealAlivePlayers()\n\t\tlocal alive = 0\n\t\tlocal playerCurrentZone = GetRealZoneText() or CL.UNKNOWN\n\t\tif IsInRaid() then\n\t\t\tfor i = 1, GetNumGroupMembers() do\n\t\t\t\tlocal _, _, _, _, _, _, zone = GetRaidRosterInfo(i)\n\t\t\t\tif zone == playerCurrentZone then\n\t\t\t\t\talive = alive + ((UnitIsDeadOrGhost(\"raid\"..i) and 0) or 1)\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\talive = (UnitIsDeadOrGhost(\"player\") and 0) or 1\n\t\t\tfor i = 1, GetNumSubgroupMembers() do\n\t\t\t\tif UnitInRange(\"party\"..i) then -- this is VERY conservative to check for same zone. Might remove if too many false negatives\n\t\t\t\t\talive = alive + ((UnitIsDeadOrGhost(\"party\"..i) and 0) or 1)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\treturn alive\n\tend\n\tfunction DBM:NumRealAlivePlayers()\n\t\treturn getNumRealAlivePlayers()\n\tend\n\n\t-- sender is a presenceId for real id messages, a character name otherwise\n\tlocal function onWhisper(msg, sender) -- msg, sender, isRealIdMessage\n\t\tif private.statusWhisperDisabled then return end--RL has disabled status whispers for entire raid.\n\t\tif not checkForSafeSender(sender, true, true, true) then return end--Automatically reject all whisper functions from non friends, non guildies, or people in group with us\n\t\tif msg == \"status\" and #inCombat > 0 and DBM.Options.AutoRespond then\n\t\t\tif not difficultyText then -- prevent error when timer recovery function worked and etc (StartCombat not called)\n\t\t\t\tsavedDifficulty, difficultyText, difficultyIndex, LastGroupSize = DBM:GetCurrentInstanceDifficulty()\n\t\t\tend\n\t\t\tlocal mod\n\t\t\tfor _, v in ipairs(inCombat) do\n\t\t\t\tmod = not v.isCustomMod and v\n\t\t\tend\n\t\t\tmod = mod or inCombat[1]\n\t\t\tif mod.noStatistics then return end\n\t\t\tlocal hp = mod.highesthealth and mod:GetHighestBossHealth() or mod:GetLowestBossHealth()\n\t\t\tlocal hpText = mod.CustomHealthUpdate and mod:CustomHealthUpdate() or hp and (\"%d%%\"):format(hp) or CL.UNKNOWN\n\t\t\tif mod.vb.phase then\n\t\t\t\thpText = hpText..\" (\"..L.SCENARIO_STAGE:format(mod.vb.phase)..\")\"\n\t\t\tend\n\t\t\tif mod.numBoss and mod.vb.bossLeft and mod.numBoss > 1 then\n\t\t\t\tlocal bossesKilled = mod.numBoss - mod.vb.bossLeft\n\t\t\t\thpText = hpText..\" (\"..BOSSES_KILLED:format(bossesKilled, mod.numBoss)..\")\"\n\t\t\tend\n\t\t\tsendWhisper(sender, chatPrefixShort..L.STATUS_WHISPER:format(difficultyText..(mod.combatInfo.name or \"\"), hpText, getNumAlivePlayers(), mmax(GetNumRaidMembers(), GetNumPartyMembers() + 1)))\n\t\telseif #inCombat > 0 and DBM.Options.AutoRespond then\n\t\t\tif not difficultyText then -- prevent error when timer recovery function worked and etc (StartCombat not called)\n\t\t\t\tsavedDifficulty, difficultyText, difficultyIndex, LastGroupSize = DBM:GetCurrentInstanceDifficulty()\n\t\t\tend\n\t\t\tlocal mod\n\t\t\tfor _, v in ipairs(inCombat) do\n\t\t\t\tmod = not v.isCustomMod and v\n\t\t\tend\n\t\t\tmod = mod or inCombat[1]\n\t\t\tif mod.noStatistics then return end\n\t\t\tlocal hp = mod.highesthealth and mod:GetHighestBossHealth() or mod:GetLowestBossHealth()\n\t\t\tlocal hpText = mod.CustomHealthUpdate and mod:CustomHealthUpdate() or hp and (\"%d%%\"):format(hp) or CL.UNKNOWN\n\t\t\tif mod.vb.phase then\n\t\t\t\thpText = hpText..\" (\"..L.SCENARIO_STAGE:format(mod.vb.phase)..\")\"\n\t\t\tend\n\t\t\tif mod.numBoss and mod.vb.bossLeft and mod.numBoss > 1 then\n\t\t\t\tlocal bossesKilled = mod.numBoss - mod.vb.bossLeft\n\t\t\t\thpText = hpText..\" (\"..BOSSES_KILLED:format(bossesKilled, mod.numBoss)..\")\"\n\t\t\tend\n\t\t\tif not autoRespondSpam[sender] then\n\t\t\t\tsendWhisper(sender, chatPrefixShort..L.AUTO_RESPOND_WHISPER:format(playerName, difficultyText..(mod.combatInfo.name or \"\"), hpText, getNumAlivePlayers(), mmax(GetNumRaidMembers(), GetNumPartyMembers() + 1)))\n\t\t\t\tDBM:AddMsg(L.AUTO_RESPONDED)\n\t\t\tend\n\t\t\tautoRespondSpam[sender] = true\n\t\tend\n\tend\n\n\tfunction DBM:CHAT_MSG_WHISPER(msg, name)\n\t\treturn onWhisper(msg, name, false)\n\tend\n\n\tfunction DBM:CHAT_MSG_BN_WHISPER(msg, ...)\n\t\tlocal presenceId = select(12, ...) -- srsly?\n\t\treturn onWhisper(msg, presenceId, true)\n\tend\nend\n\n--This completely unregisteres or registers distruptive events so they don't obstruct combat\n--Toggle is for if we are turning off or on.\n--Custom is for external mods to call function without duplication and allowing pvp mods custom toggle.\ndo\n\tlocal unregisteredEvents = {}\n\tlocal function DisableEvent(frameName, eventName)\n\t\tif frameName:IsEventRegistered(eventName) then\n\t\t\tframeName:UnregisterEvent(eventName)\n\t\t\tunregisteredEvents[eventName] = true\n\t\tend\n\tend\n\tlocal function EnableEvent(frameName, eventName)\n\t\tif unregisteredEvents[eventName] then\n\t\t\tframeName:RegisterEvent(eventName)\n\t\t\tunregisteredEvents[eventName] = nil\n\t\tend\n\tend\n\tfunction DBM:HideBlizzardEvents(toggle, custom)\n\t\tif toggle == 1 then\n\t\t\tif (self.Options.HideBossEmoteFrame2 or custom) then\n\t\t\t\tDisableEvent(RaidBossEmoteFrame, \"CHAT_MSG_RAID_BOSS_EMOTE\")\n\t\t\t\tDisableEvent(RaidBossEmoteFrame, \"CHAT_MSG_RAID_BOSS_WHISPER\")\n\t\t\t\t-- SOUNDKIT.UI_RAID_BOSS_WHISPER_WARNING = 999999 --Commented out and not backported since I don't want to touch blizzard function to edit out the PlaySound(\"RaidBossEmoteWarning\"). Since blizzard can still play the sound via RaidBossEmoteFrame_OnEvent (line 137) via encounter scripts in certain cases despite the frame having no registered events\n\t\t\tend\n\t\telseif toggle == 0 then\n\t\t\tif (self.Options.HideBossEmoteFrame2 or custom) then\n\t\t\t\tEnableEvent(RaidBossEmoteFrame, \"CHAT_MSG_RAID_BOSS_EMOTE\")\n\t\t\t\tEnableEvent(RaidBossEmoteFrame, \"CHAT_MSG_RAID_BOSS_WHISPER\")\n\t\t\t\t-- SOUNDKIT.UI_RAID_BOSS_WHISPER_WARNING = 37666 --restore it\n\t\t\tend\n\t\tend\n\tend\nend\n\n-------------------\n--  Chat Filter  --\n-------------------\ndo\n\tlocal function filterOutgoing(self, event, ...)\n\t\tlocal msg = ...\n\t\tif not msg and self then -- compatibility mode!\n\t\t\t-- we also check if self exists to prevent a possible freeze if the function is called without arguments at all\n\t\t\t-- as this would be even worse than the issue with missing whisper messages ;)\n\t\t\treturn filterOutgoing(nil, nil, self, event)\n\t\tend\n\t\treturn msg:sub(1, chatPrefix:len()) == chatPrefix or msg:sub(1, chatPrefixShort:len()) == chatPrefixShort, ...\n\tend\n\n\tlocal function filterIncoming(self, event, ...)\n\t\tlocal msg = ...\n\t\tif not msg and self then -- compatibility mode!\n\t\t\treturn filterIncoming(nil, nil, self, event)\n\t\tend\n\t\tif DBM.Options.SpamBlockBossWhispers then\n\t\t\treturn #inCombat > 0 and (msg == \"status\" or msg:sub(1, chatPrefix:len()) == chatPrefix or msg:sub(1, chatPrefixShort:len()) == chatPrefixShort), ...\n\t\telse\n\t\t\treturn msg == \"status\" and #inCombat > 0, ...\n\t\tend\n\tend\n\n\tlocal function filterRaidWarning(self, event, ...)\n\t\tlocal msg = ...\n\t\tif not msg and self then -- compatibility mode!\n\t\t\treturn filterRaidWarning(nil, nil, self, event)\n\t\tend\n\t\treturn DBM.Options.SpamBlockRaidWarning and type(msg) == \"string\" and (not not msg:match(\"^%s*%*%*%*\")), ...\n\tend\n\n\tChatFrame_AddMessageEventFilter(\"CHAT_MSG_WHISPER_INFORM\", filterOutgoing)\n\tChatFrame_AddMessageEventFilter(\"CHAT_MSG_BN_WHISPER_INFORM\", filterOutgoing)\n\tChatFrame_AddMessageEventFilter(\"CHAT_MSG_WHISPER\", filterIncoming)\n\tChatFrame_AddMessageEventFilter(\"CHAT_MSG_BN_WHISPER\", filterIncoming)\n\tChatFrame_AddMessageEventFilter(\"CHAT_MSG_RAID_WARNING\", filterRaidWarning)\n\tChatFrame_AddMessageEventFilter(\"CHAT_MSG_PARTY\", filterRaidWarning)\n\tChatFrame_AddMessageEventFilter(\"CHAT_MSG_PARTY_LEADER\", filterRaidWarning)\nend\n\n\ndo\n\tlocal old = RaidWarningFrame:GetScript(\"OnEvent\")\n\tRaidWarningFrame:SetScript(\"OnEvent\", function(self, event, msg, ...)\n\t\tif DBM.Options.SpamBlockRaidWarning and msg:find(\"%*%*%* .* %*%*%*\") then\n\t\t\treturn\n\t\tend\n\t\treturn old(self, event, msg, ...)\n\tend)\nend\n\n--------------------------\n--  Enable/Disable DBM  --\n--------------------------\ndo\n\tlocal forceDisabled = false\n\tfunction DBM:Disable(forceDisable)\n\t\tDBMScheduler:Unschedule()\n\t\tdbmIsEnabled = false\n\t\tprivate.dbmIsEnabled = false\n\t\tforceDisabled = forceDisable\n\tend\n\n\tfunction DBM:Enable()\n\t\tif not forceDisabled then\n\t\t\tdbmIsEnabled = true\n\t\tend\n\tend\n\n\tfunction DBM:IsEnabled()\n\t\treturn dbmIsEnabled\n\tend\n\n\tfunction DBM:ForceDisableSpam()\n\t\tif testBuild then\n\t\t\tDBM:AddMsg(L.UPDATEREMINDER_DISABLETEST)\n\t\telseif dbmToc < wowTOC then\n\t\t\tDBM:AddMsg(L.UPDATEREMINDER_MAJORPATCH)\n\t\telse\n\t\t\tDBM:AddMsg(L.UPDATEREMINDER_DISABLE)\n\t\tend\n\tend\nend\n\n-----------------------\n--  Misc. Functions  --\n-----------------------\nfunction DBM:AddMsg(text, prefix)\n\tlocal tag = prefix or (self.localization and self.localization.general.name) or L.DBM\n\tlocal frame = DBM.Options.ChatFrame and _G[tostring(DBM.Options.ChatFrame)] or DEFAULT_CHAT_FRAME\n\tif not frame or not frame:IsShown() then\n\t\tframe = DEFAULT_CHAT_FRAME\n\tend\n\tif prefix ~= false then\n\t\tframe:AddMessage((\"|cffff7d0a<|r|cffffd200%s|r|cffff7d0a>|r %s\"):format(tostring(tag), tostring(text)), 0.41, 0.8, 0.94)\n\telse\n\t\tframe:AddMessage(text, 0.41, 0.8, 0.94)\n\tend\nend\nAddMsg = DBM.AddMsg\n\ndo\n\tlocal testMod\n\tlocal testWarning1, testWarning2, testWarning3\n\tlocal testTimer1, testTimer2, testTimer3, testTimer4, testTimer5, testTimer6, testTimer7, testTimer8\n\tlocal testSpecialWarning1, testSpecialWarning2, testSpecialWarning3\n\tfunction DBM:DemoMode()\n\t\tif not testMod then\n\t\t\ttestMod = self:NewMod(\"TestMod\")\n\t\t\tself:GetModLocalization(\"TestMod\"):SetGeneralLocalization{ name = \"Test Mod\" }\n\t\t\ttestWarning1 = testMod:NewAnnounce(\"%s\", 1, \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\")\n\t\t\ttestWarning2 = testMod:NewAnnounce(\"%s\", 2, \"Interface\\\\Icons\\\\Spell_Shadow_Shadesofdarkness\")\n\t\t\ttestWarning3 = testMod:NewAnnounce(\"%s\", 3, \"Interface\\\\Icons\\\\Spell_Fire_SelfDestruct\")\n\t\t\ttestTimer1 = testMod:NewTimer(20, \"%s\", \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\", nil, nil)\n\t\t\ttestTimer2 = testMod:NewTimer(20, \"%s \", \"Interface\\\\Icons\\\\INV_Misc_Head_Orc_01\", nil, nil, 1)\n\t\t\ttestTimer3 = testMod:NewTimer(20, \"%s  \", \"Interface\\\\Icons\\\\Spell_Shadow_Shadesofdarkness\", nil, nil, 3, CL.MAGIC_ICON, nil, 1, 4)--inlineIcon, keep, countdown, countdownMax\n\t\t\ttestTimer4 = testMod:NewTimer(20, \"%s   \", \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\", nil, nil, 4, CL.INTERRUPT_ICON)\n\t\t\ttestTimer5 = testMod:NewTimer(20, \"%s    \", \"Interface\\\\Icons\\\\Spell_Fire_SelfDestruct\", nil, nil, 2, CL.HEALER_ICON, nil, 3, 4)--inlineIcon, keep, countdown, countdownMax\n\t\t\ttestTimer6 = testMod:NewTimer(20, \"%s     \", \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\", nil, nil, 5, CL.TANK_ICON, nil, 2, 4)--inlineIcon, keep, countdown, countdownMax\n\t\t\ttestTimer7 = testMod:NewTimer(20, \"%s      \", \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\", nil, nil, 6)\n\t\t\ttestTimer8 = testMod:NewTimer(20, \"%s       \", \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\", nil, nil, 7)\n\t\t\ttestSpecialWarning1 = testMod:NewSpecialWarning(\"%s\", nil, nil, nil, 1, 2)\n\t\t\ttestSpecialWarning2 = testMod:NewSpecialWarning(\" %s \", nil, nil, nil, 2, 2)\n\t\t\ttestSpecialWarning3 = testMod:NewSpecialWarning(\"  %s  \", nil, nil, nil, 3, 2) -- hack: non auto-generated special warnings need distinct names (we could go ahead and give them proper names with proper localization entries, but this is much easier)\n\t\tend\n\t\ttestTimer1:Stop(\"Test Bar showing 5s Variance\")\n\t\ttestTimer2:Stop(\"Adds\")\n\t\ttestTimer3:Stop(\"Evil Debuff\")\n\t\ttestTimer4:Stop(\"Important Interrupt\")\n\t\ttestTimer5:Stop(\"Boom!\")\n\t\ttestTimer6:Stop(\"Handle your Role\")\n\t\ttestTimer7:Stop(\"Next Stage\")\n\t\ttestTimer8:Stop(\"Custom User Bar\")\n\t\ttestTimer1:Start(\"v5-10\", \"Test Bar showing 5s Variance\")\n\t\ttestTimer2:Start(\"v25-30\", \"Adds\")\n\t\ttestTimer3:Start(43, \"Evil Debuff\")\n\t\ttestTimer4:Start(20, \"Important Interrupt\")\n\t\ttestTimer5:Start(60, \"Boom!\")\n\t\ttestTimer6:Start(\"v32-35\", \"Handle your Role\")\n\t\ttestTimer7:Start(50, \"Next Stage\")\n\t\ttestTimer8:Start(55, \"Custom User Bar\")\n\t\ttestWarning1:Cancel()\n\t\ttestWarning2:Cancel()\n\t\ttestWarning3:Cancel()\n\t\ttestSpecialWarning1:Cancel()\n\t\ttestSpecialWarning1:CancelVoice()\n\t\ttestSpecialWarning2:Cancel()\n\t\ttestSpecialWarning2:CancelVoice()\n\t\ttestSpecialWarning3:Cancel()\n\t\ttestSpecialWarning3:CancelVoice()\n\t\ttestWarning1:Show(\"Test-mode started...\")\n\t\ttestWarning1:Schedule(62, \"Test-mode finished!\")\n\t\ttestWarning3:Schedule(50, \"Boom in 10 sec!\")\n\t\ttestWarning3:Schedule(20, \"Pew Pew Laser Owl!\")\n\t\ttestWarning2:Schedule(38, \"Evil Spell in 5 sec!\")\n\t\ttestWarning2:Schedule(43, \"Evil Spell!\")\n\t\ttestWarning1:Schedule(10, \"Test Bar expired!\")\n\t\ttestSpecialWarning1:Schedule(20, \"Pew Pew Laser Owl\")\n\t\ttestSpecialWarning1:ScheduleVoice(20, \"runaway\")\n\t\ttestSpecialWarning2:Schedule(43, \"Fear!\")\n\t\ttestSpecialWarning2:ScheduleVoice(43, \"fearsoon\")\n\t\ttestSpecialWarning3:Schedule(60, \"Boom!\")\n\t\ttestSpecialWarning3:ScheduleVoice(60, \"defensive\")\n\tend\nend\n\nDBT:SetAnnounceHook(function(bar)\n\tlocal prefix\n\tif bar.color and bar.color.r == 1 and bar.color.g == 0 and bar.color.b == 0 then\n\t\tprefix = L.HORDE or FACTION_HORDE\n\telseif bar.color and bar.color.r == 0 and bar.color.g == 0 and bar.color.b == 1 then\n\t\tprefix = L.ALLIANCE or FACTION_ALLIANCE\n\tend\n\tif prefix then\n\t\treturn (\"%s: %s  %d:%02d\"):format(prefix, _G[bar.frame:GetName()..\"BarName\"]:GetText(), floor(bar.timer / 60), bar.timer % 60)\n\tend\nend)\n\nfunction DBM:Capitalize(str)\n\tlocal firstByte = str:byte(1, 1)\n\tlocal numBytes = 1\n\tif firstByte >= 0xF0 then -- firstByte & 0b11110000\n\t\tnumBytes = 4\n\telseif firstByte >= 0xE0 then -- firstByte & 0b11100000\n\t\tnumBytes = 3\n\telseif firstByte >= 0xC0 then  -- firstByte & 0b11000000\n\t\tnumBytes = 2\n\tend\n\treturn str:sub(1, numBytes):upper()..str:sub(numBytes + 1):lower()\nend\n\n-- An anti spam function to throttle spammy events (e.g. SPELL_AURA_APPLIED on all group members)\n-- @param time the time to wait between two events (optional, default 2.5 seconds)\n-- @param id the id to distinguish different events (optional, only necessary if your mod keeps track of two different spam events at the same time)\nfunction DBM:AntiSpam(time, id)\n\tif GetTime() - (id and (self[\"lastAntiSpam\" .. tostring(id)] or 0) or self.lastAntiSpam or 0) > (time or 2.5) then\n\t\tif id then\n\t\t\tself[\"lastAntiSpam\" .. tostring(id)] = GetTime()\n\t\telse\n\t\t\tself.lastAntiSpam = GetTime()\n\t\tend\n\t\treturn true\n\tend\n\treturn false\nend\n\nfunction DBM:InCombat()\n\treturn #inCombat > 0\nend\n\nlocal FlashWindow = FlashWindow\nfunction DBM:FlashClientIcon(checkAddon)\n\tif not FlashWindow then return end -- Check for FlashClient exe patch\n\t-- Check for addon via argument to prevent double API call from both DBM and FlashWindow since it would negate the icon flashing\n\tif checkAddon and IsAddOnLoaded(\"FlashWindow\") then return end\n\n\tif self:AntiSpam(5, \"FLASH\") then\n\t\tFlashWindow()\n\tend\nend\n\ndo\n\t--Search Tags: iconto, toicon, raid icon, diamond, star, triangle\n\tlocal iconStrings = {[1] = RAID_TARGET_1, [2] = RAID_TARGET_2, [3] = RAID_TARGET_3, [4] = RAID_TARGET_4, [5] = RAID_TARGET_5, [6] = RAID_TARGET_6, [7] = RAID_TARGET_7, [8] = RAID_TARGET_8,}\n\tfunction DBM:IconNumToString(number)\n\t\treturn iconStrings[number] or number\n\tend\n\tfunction DBM:IconNumToTexture(number)\n\t\treturn \"|TInterface\\\\TargetingFrame\\\\UI-RaidTargetingIcon_\"..number..\".blp:12:12|t\" or number\n\tend\nend\n\ndo\n\tlocal DevTools = private:GetModule(\"DevTools\")\n\tfunction DBM:Debug(...)\n\t\treturn DevTools:Debug(...)\n\tend\nend\n\n-----------------\n--  Map Sizes  --\n-----------------\nDBM.MapSizes = {}\n\nfunction DBM:RegisterMapSize(zone, ...)\n\tif not DBM.MapSizes[zone] then\n\t\tDBM.MapSizes[zone] = {}\n\tend\n\tfor i = 1, select(\"#\", ...), 3 do\n\t\tlocal level, width, height = select(i, ...)\n\t\tDBM.MapSizes[zone][level] = {width, height}\n\tend\nend\n\nfunction DBM:GetMapSize()\n\tlocal mapName = GetMapInfo()\n\tlocal level = GetCurrentMapDungeonLevel()\n\tlocal usesTerrainMap = DungeonUsesTerrainMap()\n\tlevel = usesTerrainMap and level - 1 or level\n\tlocal dims = self.MapSizes[mapName] and self.MapSizes[mapName][level]\n\treturn dims[1], dims[2]\nend\n\n--------------------\n--  Movie Filter  --\n--------------------\ndo\n\tlocal neverFilter = {\n\t}\n\tfunction DBM:PLAY_MOVIE(id)\n\t\tif id and not neverFilter[id] then\n\t\t\tself:Debug(\"PLAY_MOVIE fired for ID: \"..id, 2)\n\t\t\tlocal isInstance = IsInInstance()\n\t\t\tif not isInstance or self.Options.MovieFilter2 == \"Never\" or self.Options.MovieFilter2 == \"OnlyFight\" and not DBM:IsEncounterInProgress() then return end\n\t\t\tif self.Options.MovieFilter2 == \"Block\" or (self.Options.MovieFilter2 == \"AfterFirst\" or self.Options.MovieFilter2 == \"OnlyFight\") and self.Options.MoviesSeen[id] then\n\t\t\t\tMovieFrame:Hide()--can only just hide movie frame safely now, which means can't stop audio anymore :\\\n\t\t\t\tGameMovieFinished()\n\t\t\t\tself:AddMsg(L.MOVIE_SKIPPED)\n\t\t\telse\n\t\t\t\tself.Options.MoviesSeen[id] = true\n\t\t\tend\n\t\tend\n\t\tself:TransitionToDungeonBGM(false, true)\n\tend\n\n\tfunction DBM:CINEMATIC_START()\n\t\tself:Debug(\"CINEMATIC_START fired\", 2)\n--\t\tself.HudMap:SupressCanvas()\n\t\tlocal isInstance = IsInInstance()\n\t\tif not isInstance or self.Options.MovieFilter2 == \"Never\" or DBM.Options.MovieFilter2 == \"OnlyFight\" and not DBM:IsEncounterInProgress() then return end\n\t\tlocal currentMapID = GetCurrentMapAreaID()\n\t\tlocal currentSubZone = GetSubZoneText() or \"\"\n\t\tif not currentMapID then return end--Protection from map failures in zones that have no maps yet\n\t\tif self.Options.MovieFilter2 == \"Block\" or (self.Options.MovieFilter2 == \"AfterFirst\" or self.Options.MovieFilter2 == \"OnlyFight\") and self.Options.MoviesSeen[currentMapID..currentSubZone] then\n\t\t\tStopCinematic()\n\t\t\tself:AddMsg(L.MOVIE_SKIPPED)\n\t\telse\n\t\t\tself.Options.MoviesSeen[currentMapID..currentSubZone] = true\n\t\tend\n\t\tself:TransitionToDungeonBGM(false, true)\n\tend\n\tfunction DBM:CINEMATIC_STOP()\n\t\tself:Debug(\"CINEMATIC_STOP fired\", 2)\n--\t\tself.HudMap:UnSupressCanvas()\n\tend\nend\n\n----------------------------\n--  Boss Mod Constructor  --\n----------------------------\ndo\n\tlocal modsById = setmetatable({}, {__mode = \"v\"})\n\tlocal mt = {__index = bossModPrototype}\n\n\tfunction DBM:NewMod(name, modId, modSubTab, instanceId)\n\t\tname = tostring(name) -- the name should never be a number of something as it confuses sync handlers that just receive some string and try to get the mod from it\n\t\tif name == \"DBM-ProfilesDummy\" then return end\n\t\tif modsById[name] then error(\"DBM:NewMod(): Mod names are used as IDs and must therefore be unique.\", 2) end\n\t\tlocal obj = setmetatable(\n\t\t\t{\n\t\t\t\tOptions = {\n\t\t\t\t\tEnabled = true,\n\t\t\t\t},\n\t\t\t\tDefaultOptions = {\n\t\t\t\t\tEnabled = true,\n\t\t\t\t},\n\t\t\t\tsubTab = modSubTab,\n\t\t\t\toptionCategories = {\n\t\t\t\t},\n\t\t\t\tcategorySort = {\"announce\", \"announceother\", \"announcepersonal\", \"announcerole\", \"specialannounce\", \"timer\", \"sound\", \"yell\", \"nameplate\", \"icon\", \"misc\"},\n\t\t\t\tid = name,\n\t\t\t\tannounces = {},\n\t\t\t\tspecwarns = {},\n\t\t\t\ttimers = {},\n\t\t\t\tvb = {},\n\t\t\t\ticonRestore = {},\n\t\t\t\tmodId = modId,\n\t\t\t\tinstanceId = instanceId,\n\t\t\t\trevision = 0,\n\t\t\t\tSyncThreshold = 8,\n\t\t\t\tlocalization = self:GetModLocalization(name),\n\t\t\t\tgroupSpells = {},\n\t\t\t\tgroupOptions = OrderedTable(),\n\t\t\t},\n\t\t\tmt\n\t\t)\n\t\tfor _, v in ipairs(self.AddOns) do\n\t\t\tif v.modId == modId then\n\t\t\t\tobj.addon = v\n\t\t\t\tbreak\n\t\t\tend\n\t\tend\n\t\tobj.localization.general.name = obj.localization.general.name or name\n\t\ttinsert(self.Mods, obj)\n\t\tif modId then\n\t\t\tself.ModLists[modId] = self.ModLists[modId] or {}\n\t\t\ttinsert(self.ModLists[modId], name)\n\t\tend\n\t\tmodsById[name] = obj\n\t\tobj:AddBoolOption(\"HealthFrame\", false, \"misc\")\n\t\tobj:SetZone()\n\t\treturn obj\n\tend\n\n\tfunction DBM:GetModByName(name)\n\t\treturn modsById[tostring(name)]\n\tend\nend\n\n-----------------------\n--  General Methods  --\n-----------------------\nbossModPrototype.RegisterEvents = DBM.RegisterEvents\nbossModPrototype.UnregisterInCombatEvents = DBM.UnregisterInCombatEvents\nbossModPrototype.AddMsg = DBM.AddMsg\nbossModPrototype.RegisterShortTermEvents = DBM.RegisterShortTermEvents\nbossModPrototype.UnregisterShortTermEvents = DBM.UnregisterShortTermEvents\n\nfunction bossModPrototype:SetZone(...)\n\tif select(\"#\", ...) == 0 then\n\t\tself.zones = {}\n\t\tif self.addon then\n\t\t\tif self.addon.mapId then\n\t\t\t\tfor _, v in ipairs(self.addon.mapId) do\n\t\t\t\t\tself.zones[v] = true\n\t\t\t\tend\n\t\t\tend\n\t\t\tif self.addon.zone and #self.addon.zone > 0 then\n\t\t\t\tfor _, v in ipairs(self.addon.zone) do\n\t\t\t\t\tself.zones[v] = true\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\telseif select(1, ...) ~= DBM_DISABLE_ZONE_DETECTION then\n\t\tself.zones = {}\n\t\tfor i = 1, select(\"#\", ...) do\n\t\t\tself.zones[select(i, ...)] = true\n\t\tend\n\telse -- disable zone detection\n\t\tself.zones = nil\n\tend\nend\n\nfunction bossModPrototype:Toggle()\n\tif self.Options.Enabled then\n\t\tself:DisableMod()\n\telse\n\t\tself:EnableMod()\n\tend\nend\n\nfunction bossModPrototype:EnableMod()\n\tself.Options.Enabled = true\nend\n\nfunction bossModPrototype:DisableMod()\n\tself:Stop()\n\tself.Options.Enabled = false\nend\n\nfunction bossModPrototype:Stop()\n\tfor _, v in ipairs(self.timers) do\n\t\tv:Stop()\n\tend\n\tself:Unschedule()\nend\n\nfunction bossModPrototype:SetUsedIcons(...)\n\tself.usedIcons = {}\n\tfor i = 1, select(\"#\", ...) do\n\t\tself.usedIcons[select(i, ...)] = true\n\tend\nend\n\nfunction bossModPrototype:RegisterOnUpdateHandler(func, interval)\n\tif type(func) ~= \"function\" then return end\n\tDBM:Debug(\"Registering RegisterOnUpdateHandler\")\n\tDBMScheduler:StartScheduler()\n\tself.elapsed = 0\n\tself.updateInterval = interval or 0\n\tprivate.updateFunctions[self] = func\nend\n\nfunction bossModPrototype:UnregisterOnUpdateHandler()\n\tself.elapsed = nil\n\tself.updateInterval = nil\n\ttwipe(private.updateFunctions)\nend\n\nfunction bossModPrototype:SetStage(stage)\n\tif stage == 0 then--Increment request instead of hard value\n\t\tif not self.vb.phase then return end--Person DCed mid fight and somehow managed to perfectly time running SetStage with a value of 0 before getting variable recovery\n\t\tself.vb.phase = self.vb.phase + 1\n\telseif stage == 0.5 then--Half Increment request instead of hard value\n\t\tself.vb.phase = self.vb.phase + 0.5\n\telse\n\t\tself.vb.phase = stage\n\tend\n\t--Separate variable to use SetStage totality for very niche weak aura practices\n\tif not self.vb.stageTotality then\n\t\tself.vb.stageTotality = 0\n\tend\n\tself.vb.stageTotality = self.vb.stageTotality + 1\n\tif self.inCombat then--Safety, in event mod manages to run any phase change calls out of combat/during a wipe we'll just safely ignore it\n\t\tfireEvent(\"DBM_SetStage\", self, self.id, self.vb.phase, self.vb.stageTotality)--Mod, modId, Stage (if available), total number of times SetStage has been called since combat start\n\t\tDBM:Debug(\"DBM_SetStage: \" .. self.vb.phase .. \"/\" .. self.vb.stageTotality)\n\tend\nend\n\n--If args are passed, returns true or false\n--If no args given, just returns current stage and stage total\n--stage: stage value to checkf or true/false rules\n--checkType: 0 or nil for just current stage match, 1 for less than check, 2 for greater than check, 3 not equal check\n--useTotal: uses stage total instead of current\nfunction bossModPrototype:GetStage(stage, checkType, useTotal)\n\tlocal currentStage, currentTotal = self.vb.phase or 0, self.vb.stageTotality or 0\n\tif stage then\n\t\tcheckType = checkType or 0--Optional pass if just an exact match check\n\t\tif (checkType == 0) and (useTotal and currentTotal or currentStage) == stage then\n\t\t\treturn true\n\t\telseif (checkType == 1) and (useTotal and currentTotal or currentStage) < stage then\n\t\t\treturn true\n\t\telseif (checkType == 2) and (useTotal and currentTotal or currentStage) > stage then\n\t\t\treturn true\n\t\telseif (checkType == 3) and (useTotal and currentTotal or currentStage) ~= stage then\n\t\t\treturn true\n\t\tend\n\t\treturn false\n\telse\n\t\treturn currentStage, currentTotal\n\tend\nend\n\n--------------\n--  Events  --\n--------------\nfunction bossModPrototype:RegisterEventsInCombat(...)\n\tif self.inCombatOnlyEvents then\n\t\tgeterrorhandler()(\"combat events already set\")\n\tend\n\tself.inCombatOnlyEvents = {...}\n\tfor k, v in pairs(self.inCombatOnlyEvents) do\n\t\tif v:sub(0, 5) == \"UNIT_\" and v:sub(v:len() - 10) ~= \"_UNFILTERED\" and not v:find(\" \") and v ~= \"UNIT_DIED\" and v ~= \"UNIT_DESTROYED\" then\n\t\t\t-- legacy event, oh noes\n\t\t\tself.inCombatOnlyEvents[k] = v--[[ .. \" boss1 boss2 boss3 boss4 boss5 target focus\"]] -- same as ShortTermEvents - don't preassign units if the event does not state them\n\t\tend\n\tend\nend\n\n-----------------------\n--  Utility Methods  --\n-----------------------\n\nfunction bossModPrototype:IsDifficulty(...)\n\tlocal diff = savedDifficulty or DBM:GetCurrentInstanceDifficulty()\n\tfor i = 1, select(\"#\", ...) do\n\t\tif diff == select(i, ...) then\n\t\t\treturn true\n\t\tend\n\tend\n\treturn false\nend\n\nfunction bossModPrototype:IsLFR()\n\tlocal diff = savedDifficulty or DBM:GetCurrentInstanceDifficulty()\n\treturn diff == \"lfr\" or diff == \"lfr25\"\nend\n\n--Dungeons: normal, heroic. (Raids excluded)\nfunction bossModPrototype:IsEasyDungeon()\n\tlocal diff = savedDifficulty or DBM:GetCurrentInstanceDifficulty()\n\treturn diff == \"heroic5\" or diff == \"normal5\"\nend\n\n--Dungeons: normal, heroic. Raids: LFR, normal\nfunction bossModPrototype:IsEasy()\n\tlocal diff = savedDifficulty or DBM:GetCurrentInstanceDifficulty()\n\treturn diff == \"normal\" or diff == \"heroic5\" or diff == \"normal5\"\nend\n\n--Dungeons: mythic, mythic+. Raids: heroic, mythic\nfunction bossModPrototype:IsHard()\n\tlocal diff = savedDifficulty or DBM:GetCurrentInstanceDifficulty()\n\treturn diff == \"mythic\" or diff == \"heroic\"\nend\n\n--Pretty much ANYTHING that has a normal mode\nfunction bossModPrototype:IsNormal()\n\tlocal diff = savedDifficulty or DBM:GetCurrentInstanceDifficulty()\n\treturn diff == \"normal5\" or diff == \"normal10\" or diff == \"normal20\" or diff == \"normal25\" or diff == \"normal40\"\nend\n\n--Pretty much ANYTHING that has a heroic mode\nfunction bossModPrototype:IsHeroic()\n\tlocal diff = savedDifficulty or DBM:GetCurrentInstanceDifficulty()\n\treturn diff == \"heroic5\" or diff == \"heroic10\" or diff == \"heroic25\"\nend\n\n--Pretty much ANYTHING that has mythic mode\nfunction bossModPrototype:IsMythic()\n\tlocal diff = savedDifficulty or DBM:GetCurrentInstanceDifficulty()\n\treturn diff == \"mythic\"\nend\n\n-- Timewalking\nfunction bossModPrototype:IsTimewalking()\n\tlocal diff = savedDifficulty or DBM:GetCurrentInstanceDifficulty()\n\treturn diff == \"timewalker\"\nend\n\nfunction bossModPrototype:IsValidWarning(sourceGUID, customunitID, loose, allowFriendly)\n\tif loose and InCombatLockdown() and GetNumGroupMembers() < 2 then return true end--In a loose check, this basically just checks if we're in combat, important for solo runs of torghast to not gimp mod too much\n\tif customunitID then\n\t\tif UnitExists(customunitID) and UnitGUID(customunitID) == sourceGUID and UnitAffectingCombat(customunitID) and (allowFriendly or not UnitIsFriend(\"player\", customunitID)) then return true end\n\telse\n\t\tlocal unitId = DBM:GetUnitIdFromGUID(sourceGUID)\n\t\tif unitId and UnitExists(unitId) and UnitAffectingCombat(unitId) and (allowFriendly or not UnitIsFriend(\"player\", unitId)) then\n\t\t\treturn true\n\t\tend\n\tend\n\treturn false\nend\n\nfunction bossModPrototype:IsEquipmentSetAvailable(setName)\n\tsetName = setName or 'pve'\n\tlocal _, index = GetEquipmentSetInfoByName(setName)\n\tif index then\n\t\tDBM:Debug(setName.. \" set found.\", 2)\n\t\treturn true\n\tend\n\tDBM:Debug(setName.. \" set NOT found.\", 2)\n\treturn false\nend\n\nfunction bossModPrototype:LatencyCheck(custom)\n\treturn select(3, GetNetStats()) < (custom or DBM.Options.LatencyThreshold)\nend\n\nfunction bossModPrototype:CheckBigWigs(name)\n\tif raid[name] and raid[name].bwversion then\n\t\treturn raid[name].bwversion\n\telse\n\t\treturn false\n\tend\nend\n\nbossModPrototype.IconNumToString = DBM.IconNumToString\nbossModPrototype.IconNumToTexture = DBM.IconNumToTexture\nbossModPrototype.AntiSpam = DBM.AntiSpam\nbossModPrototype.HasMapRestrictions = DBM.HasMapRestrictions\nbossModPrototype.GetUnitCreatureId = DBM.GetUnitCreatureId\nbossModPrototype.GetCIDFromGUID = DBM.GetCIDFromGUID\nbossModPrototype.IsCreatureGUID = DBM.IsCreatureGUID\nbossModPrototype.GetUnitIdFromCID = DBM.GetUnitIdFromCID\nbossModPrototype.GetUnitIdFromGUID = DBM.GetUnitIdFromGUID\nbossModPrototype.CheckNearby = DBM.CheckNearby\nbossModPrototype.IsTrivial = DBM.IsTrivial\n\ndo\n\tlocal TargetScanning = private:GetModule(\"TargetScanning\")\n\n\tfunction bossModPrototype:GetBossTarget(...)\n\t\treturn TargetScanning:GetBossTarget(self, ...)\n\tend\n\n\tfunction bossModPrototype:GetBossUnitByCreatureId(...)\n\t\treturn TargetScanning:GetBossUnitByCreatureId(self, ...)\n\tend\n\n\tfunction bossModPrototype:BossTargetScannerAbort(...)\n\t\treturn TargetScanning:BossTargetScannerAbort(self, ...)\n\tend\n\n\tfunction bossModPrototype:BossUnitTargetScannerAbort(...)\n\t\treturn TargetScanning:BossUnitTargetScannerAbort(self, ...)\n\tend\n\n\tfunction bossModPrototype:BossUnitTargetScanner(...)\n\t\treturn TargetScanning:BossUnitTargetScanner(self, ...)\n\tend\n\n\tfunction bossModPrototype:BossTargetScanner(...)\n\t\treturn TargetScanning:BossTargetScanner(self, ...)\n\tend\n\n\tfunction bossModPrototype:StartRepeatedScan(...)\n\t\treturn TargetScanning:StartRepeatedScan(self, ...)\n\tend\n\n\tfunction bossModPrototype:StopRepeatedScan(...)\n\t\treturn TargetScanning:StopRepeatedScan(...)--self/bossModPrototype missing not a bug, function doesn't need it\n\tend\nend\n\ndo\n\tlocal bossCache = {}\n\tlocal lastTank\n\n\tfunction bossModPrototype:GetCurrentTank(cidOrGuid)\n\t\tif lastTank and GetTime() - (bossCache[cidOrGuid] or 0) < 2 then -- return last tank within 2 seconds of call\n\t\t\treturn lastTank\n\t\telse\n\t\t\tcidOrGuid = cidOrGuid or self.creatureId--GetBossTarget supports GUID or CID and it will automatically return correct values with EITHER ONE\n\t\t\tlocal uId\n\t\t\tlocal _, fallbackuId, mobuId = self:GetBossTarget(cidOrGuid)\n\t\t\tif mobuId then--Have a valid mob unit ID\n\t\t\t\t--First, use trust threat more than fallbackuId and see what we pull from it first.\n\t\t\t\t--This is because for GetCurrentTank we want to know who is tanking it, not who it's targeting.\n\t\t\t\tlocal unitId = (IsInRaid() and \"raid\") or \"party\"\n\t\t\t\tfor i = 0, GetNumGroupMembers() do\n\t\t\t\t\tlocal id = (i == 0 and \"target\") or unitId..i\n\t\t\t\t\tlocal tanking, status = UnitDetailedThreatSituation(id, mobuId)--Tanking may return 0 if npc is temporarily looking at an NPC (IE fracture) but status will still be 3 on true tank\n\t\t\t\t\tif tanking or (status == 3) then uId = id end--Found highest threat target, make them uId\n\t\t\t\t\tif uId then break end\n\t\t\t\tend\n\t\t\t\t--Did not get anything useful from threat, so use who the boss was looking at, at time of cast (ie fallbackuId)\n\t\t\t\tif fallbackuId and not uId then\n\t\t\t\t\tuId = fallbackuId\n\t\t\t\tend\n\t\t\tend\n\t\t\tif uId then--Now we have a valid uId\n\t\t\t\tbossCache[cidOrGuid] = GetTime()\n\t\t\t\tlastTank = UnitName(uId)\n\t\t\t\treturn UnitName(lastTank), uId\n\t\t\tend\n\t\t\treturn false\n\t\tend\n\tend\nend\n\n--Now this function works perfectly. But have some limitation due to DBM.RangeCheck:GetDistance() function.\n--Unfortunely, DBM.RangeCheck:GetDistance() function cannot reflects altitude difference. This makes range unreliable.\n--So, we need to cafefully check range in difference altitude (Especially, tower top and bottom)\ndo\n\tlocal rangeCache = {}\n\tlocal rangeUpdated = {}\n\n\tfunction bossModPrototype:CheckBossDistance(cidOrGuid, onlyBoss, itemId, distance, defaultReturn)\n\t\tif not DBM.Options.DontShowFarWarnings then return true end--Global disable.\n\t\tcidOrGuid = cidOrGuid or self.creatureId\n\t\tlocal uId\n\t\tif type(cidOrGuid) == \"number\" then--CID passed\n\t\t\tuId = DBM:GetUnitIdFromCID(cidOrGuid, onlyBoss)\n\t\telse--GUID\n\t\t\tuId = DBM:GetUnitIdFromGUID(cidOrGuid, onlyBoss)\n\t\tend\n\t\tif uId then\n\t\t\titemId = itemId or 32698\n\t\t\tlocal inRange = IsItemInRange(itemId, uId)\n\t\t\tif inRange then--IsItemInRange was a success\n\t\t\t\treturn inRange\n\t\t\telse--IsItemInRange doesn't work on all bosses/npcs, but tank checks do\n\t\t\t\tDBM:Debug(\"CheckBossDistance failed on IsItemInRange for: \"..cidOrGuid, 2)\n\t\t\t\treturn self:CheckTankDistance(cidOrGuid, distance, onlyBoss, defaultReturn)--Return tank distance check fallback\n\t\t\tend\n\t\tend\n\t\tDBM:Debug(\"CheckBossDistance failed on uId for: \"..cidOrGuid, 2)\n\t\treturn (defaultReturn == nil) or defaultReturn--When we simply can't figure anything out, return true and allow warnings using this filter to fire\n\tend\n\n\tfunction bossModPrototype:CheckTankDistance(cidOrGuid, distance, onlyBoss, defaultReturn)\n\t\tif not DBM.Options.DontShowFarWarnings then return true end--Global disable.\n\t\tdistance = distance or 43\n\t\tif rangeCache[cidOrGuid] and (GetTime() - (rangeUpdated[cidOrGuid] or 0)) < 2 then -- return same range within 2 sec call\n\t\t\treturn rangeCache[cidOrGuid] < distance\n\t\telse\n\t\t\tcidOrGuid = cidOrGuid or self.creatureId--GetBossTarget supports GUID or CID and it will automatically return correct values with EITHER ONE\n\t\t\tlocal uId\n\t\t\tlocal _, fallbackuId, mobuId = self:GetBossTarget(cidOrGuid, onlyBoss)\n\t\t\tif mobuId then--Have a valid mob unit ID\n\t\t\t\t--First, use trust threat more than fallbackuId and see what we pull from it first.\n\t\t\t\t--This is because for CheckTankDistance we want to know who is tanking it, not who it's targeting.\n\t\t\t\tlocal unitId = (IsInRaid() and \"raid\") or \"party\"\n\t\t\t\tfor i = 0, GetNumGroupMembers() do\n\t\t\t\t\tlocal id = (i == 0 and \"target\") or unitId..i\n\t\t\t\t\tlocal tanking, status = UnitDetailedThreatSituation(id, mobuId)--Tanking may return 0 if npc is temporarily looking at an NPC (IE fracture) but status will still be 3 on true tank\n\t\t\t\t\tif tanking or (status == 3) then uId = id end--Found highest threat target, make them uId\n\t\t\t\t\tif uId then break end\n\t\t\t\tend\n\t\t\t\t--Did not get anything useful from threat, so use who the boss was looking at, at time of cast (ie fallbackuId)\n\t\t\t\tif fallbackuId and not uId then\n\t\t\t\t\tuId = fallbackuId\n\t\t\t\tend\n\t\t\tend\n\t\t\tif uId then--Now we have a valid uId\n\t\t\t\tif UnitIsUnit(uId, \"player\") then return true end--If \"player\" is target, avoid doing any complicated stuff\n\t\t\t\tif not UnitIsPlayer(uId) then\n\t\t\t\t\tlocal inRange2, checkedRange = UnitInRange(uId)--43\n\t\t\t\t\tif checkedRange then--checkedRange only returns true if api worked, so if we get false, true then we are not near npc\n\t\t\t\t\t\treturn inRange2\n\t\t\t\t\telse--Its probably a totem or just something we can't assess. Fall back to no filtering\n\t\t\t\t\t\treturn true\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tlocal inRange = DBM.RangeCheck:GetDistance(\"player\", uId)--We check how far we are from the tank who has that boss\n\t\t\t\trangeCache[cidOrGuid] = inRange\n\t\t\t\trangeUpdated[cidOrGuid] = GetTime()\n\t\t\t\tif inRange and (inRange > distance) then--You are not near the person tanking boss\n\t\t\t\t\treturn false\n\t\t\t\tend\n\t\t\t\t--Tank in range, return true.\n\t\t\t\treturn true\n\t\t\tend\n\t\t\tDBM:Debug(\"CheckTankDistance failed on uId for: \"..cidOrGuid, 2)\n\t\t\treturn (defaultReturn == nil) or defaultReturn--When we simply can't figure anything out, return true and allow warnings using this filter to fire. But some spells will prefer not to fire(i.e : Galakras tower spell), we can define it on this function calling.\n\t\tend\n\tend\nend\n\n---------------------\n--  Class Methods  --\n---------------------\ndo\n\t--[[function bossModPrototype:GetRoleFlagValue(flag)\n\t\tif not flag then return false end\n\t\tlocal flags = {strsplit(\"|\", flag)}\n\t\tfor i = 1, #flags do\n\t\t\tlocal flagText = flags[i]\n\t\t\tflagText = flagText:gsub(\"-\", \"\")\n\t\t\tif not specFlags[flagText] then\n\t\t\t\tprint(\"bad flag found : \"..flagText)\n\t\t\tend\n\t\tend\n\t\tself:GetRoleFlagValue2(flag)\n\tend]]\n\n\t--to check flag is correct, remove comment block specFlags table and GetRoleFlagValue function, change this to GetRoleFlagValue2\n\t--disable flag check normally because double flag check comsumes more cpu on mod load.\n\tfunction bossModPrototype:GetRoleFlagValue(flag)\n\t\tif not flag then return false end\n\t\tif not currentSpecID then\n\t\t\tDBM:SetCurrentSpecInfo()\n\t\tend\n\t\tlocal flags = {strsplit(\"|\", flag)}\n\t\tfor i = 1, #flags do\n\t\t\tlocal flagText = flags[i]\n\t\t\tif flagText:match(\"^-\") then\n\t\t\t\tflagText = flagText:gsub(\"-\", \"\")\n\t\t\t\tif not private.specRoleTable[currentSpecID][flagText] then\n\t\t\t\t\treturn true\n\t\t\t\tend\n\t\t\telseif private.specRoleTable[currentSpecID][flagText] then\n\t\t\t\treturn true\n\t\t\tend\n\t\tend\n\t\treturn false\n\tend\n\n\tfunction bossModPrototype:IsMeleeDps(uId)\n\t\tif uId then--This version includes ONLY melee dps\n\t\t\tlocal name = GetUnitName(uId, true)\n\t\t\t--First we check if we have acccess to specID (ie remote player is using DBM or Bigwigs)\n\t\t\tif raid[name].specID then--We know their specId\n\t\t\t\tlocal specID = raid[name].specID\n\t\t\t\treturn private.specRoleTable[specID][\"MeleeDps\"]\n\t\t\telse\n\t\t\t\t--Role checks are second best thing\n\t\t\t\tlocal isTank, isHealer = UnitGroupRolesAssigned(uId)\n\t\t\t\tif (isHealer or isTank) or GetPartyAssignment(\"MAINTANK\", uId, 1) then--Auto filter healer/tank from dps check, can't filter healers in classic\n\t\t\t\t\treturn false\n\t\t\t\tend\n\t\t\t\t--Class checks for things that are a sure thing anyways\n\t\t\t\tlocal _, class = UnitClass(uId)\n\t\t\t\tif class == \"WARRIOR\" or class == \"ROGUE\" or class == \"DEATHKNIGHT\" then\n\t\t\t\t\treturn true\n\t\t\t\tend\n\t\t\t\t--Now we do the ugly checks thanks to Inspect throttle\n\t\t\t\tif class == \"DRUID\" or class == \"SHAMAN\" or class == \"PALADIN\" then\n\t\t\t\t\tlocal unitMaxPower = UnitPowerMax(uId)\n\t\t\t\t\tif unitMaxPower < 7500 then\n\t\t\t\t\t\treturn true\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\treturn false\n\t\tend\n\t\t--Personal check Only\n\t\tif not currentSpecID then\n\t\t\tDBM:SetCurrentSpecInfo()\n\t\tend\n\t\treturn private.specRoleTable[currentSpecID][\"MeleeDps\"]\n\tend\n\n\tfunction DBM:IsMelee(uId, mechanical)--mechanical arg means the check is asking if boss mechanics consider them melee (even if they aren't, such as holy paladin/mistweaver monks)\n\t\tif uId then--This version includes monk healers as melee and tanks as melee\n\t\t\t--Class checks performed first due to mechanical check needing to be broader than a specID check\n\t\t\tlocal _, class = UnitClass(uId)\n\t\t\t--In mechanical check, ALL paladins are melee so don't need anything fancy, as for rest of classes here, same deal\n\t\t\tif class == \"WARRIOR\" or class == \"ROGUE\" or class == \"DEATHKNIGHT\" or (mechanical and class == \"PALADIN\") then\n\t\t\t\treturn true\n\t\t\tend\n\t\t\t--Now we check if we have acccess to specID (ie remote player is using DBM or Bigwigs)\n\t\t\tlocal name = GetUnitName(uId, true)\n\t\t\tif raid[name].specID then--We know their specId\n\t\t\t\tlocal specID = raid[name].specID\n\t\t\t\treturn private.specRoleTable[specID][\"Melee\"]\n\t\t\telse\n\t\t\t\t--Now we do the ugly checks thanks to Inspect throttle\n\t\t\t\tif (class == \"DRUID\" or class == \"SHAMAN\" or class == \"PALADIN\") then\n\t\t\t\t\tlocal unitMaxPower = UnitPowerMax(uId)\n\t\t\t\t\tif unitMaxPower < 7500 then\n\t\t\t\t\t\treturn true\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\treturn false\n\t\tend\n\t\t--Personal check Only\n\t\tif not currentSpecID then\n\t\t\tDBM:SetCurrentSpecInfo()\n\t\tend\n\t\treturn private.specRoleTable[currentSpecID][\"Melee\"]\n\tend\n\tbossModPrototype.IsMelee = DBM.IsMelee\n\n\tfunction DBM:IsRanged(uId)\n\t\tif uId then\n\t\t\tlocal name = GetUnitName(uId, true)\n\t\t\tif raid[name].specID then--We know their specId\n\t\t\t\tlocal specID = raid[name].specID\n\t\t\t\treturn private.specRoleTable[specID][\"Ranged\"]\n\t\t\telse\n\t\t\t\tprint(\"bossModPrototype:IsRanged should not be called on external units if specID is unavailable, report this message\")\n\t\t\tend\n\t\tend\n\t\t--Personal check Only\n\t\tif not currentSpecID then\n\t\t\tDBM:SetCurrentSpecInfo()\n\t\tend\n\t\treturn private.specRoleTable[currentSpecID][\"Ranged\"]\n\tend\n\tbossModPrototype.IsRanged = DBM.IsRanged\n\n\tfunction bossModPrototype:IsSpellCaster(uId)\n\t\tif uId then\n\t\t\tlocal name = GetUnitName(uId, true)\n\t\t\tif raid[name].specID then--We know their specId\n\t\t\t\tlocal specID = raid[name].specID\n\t\t\t\treturn private.specRoleTable[specID][\"SpellCaster\"]\n\t\t\telse\n\t\t\t\tprint(\"bossModPrototype:IsSpellCaster should not be called on external units if specID is unavailable, report this message\")\n\t\t\tend\n\t\tend\n\t\t--Personal check Only\n\t\tif not currentSpecID then\n\t\t\tDBM:SetCurrentSpecInfo()\n\t\tend\n\t\treturn private.specRoleTable[currentSpecID][\"SpellCaster\"]\n\tend\n\n\tfunction bossModPrototype:IsMagicDispeller(uId)\n\t\tif uId then\n\t\t\tlocal name = GetUnitName(uId, true)\n\t\t\tif raid[name].specID then--We know their specId\n\t\t\t\tlocal specID = raid[name].specID\n\t\t\t\treturn private.specRoleTable[specID][\"MagicDispeller\"]\n\t\t\telse\n\t\t\t\tprint(\"bossModPrototype:IsMagicDispeller should not be called on external units if specID is unavailable, report this message\")\n\t\t\tend\n\t\tend\n\t\t--Personal check Only\n\t\tif not currentSpecID then\n\t\t\tDBM:SetCurrentSpecInfo()\n\t\tend\n\t\treturn private.specRoleTable[currentSpecID][\"MagicDispeller\"]\n\tend\n\n\t---------------------\n\t--  Sort Methods  --\n\t---------------------\n\tfunction DBM.SortByGroup(v1, v2)\n\t\treturn DBM:GetGroupId(DBM:GetUnitFullName(v1), true) < DBM:GetGroupId(DBM:GetUnitFullName(v2), true)\n\tend\n\tfunction DBM.SortByTankAlpha(v1, v2)\n\t\t--Tank > Melee > Ranged prio, and if two of any of types, alphabetical names are preferred\n\t\tif DBM:IsTanking(v1) == DBM:IsTanking(v2) then\n\t\t\treturn DBM:GetUnitFullName(v1) < DBM:GetUnitFullName(v2)\n\t\t--if one is tank and one isn't, they are not equal so it goes to the below elseifs that prio melee\n\t\telseif DBM:IsTanking(v1) and not DBM:IsTanking(v2) then\n\t\t\treturn true\n\t\telseif DBM:IsTanking(v2) and not DBM:IsTanking(v1) then\n\t\t\treturn false\n\t\telseif DBM:IsMelee(v1) == DBM:IsMelee(v2) then\n\t\t\treturn DBM:GetUnitFullName(v1) < DBM:GetUnitFullName(v2)\n\t\t--if one is melee and one is ranged, they are not equal so it goes to the below elseifs that prio melee\n\t\telseif DBM:IsMelee(v1) and not DBM:IsMelee(v2) then\n\t\t\treturn true\n\t\telseif DBM:IsMelee(v2) and not DBM:IsMelee(v1) then\n\t\t\treturn false\n\t\tend\n\tend\n\tfunction DBM.SortByTankRoster(v1, v2)\n\t\t--Tank > Melee > Ranged prio, and if two of any of types, roster index as secondary\n\t\tif DBM:IsTanking(v1) == DBM:IsTanking(v2) then\n\t\t\treturn DBM:GetGroupId(DBM:GetUnitFullName(v1), true) < DBM:GetGroupId(DBM:GetUnitFullName(v2), true)\n\t\t--if one is melee and one is ranged, they are not equal so it goes to the below elseifs that prio melee\n\t\telseif DBM:IsTanking(v1) and not DBM:IsTanking(v2) then\n\t\t\treturn true\n\t\telseif DBM:IsTanking(v2) and not DBM:IsTanking(v1) then\n\t\t\treturn false\n\t\telseif DBM:IsMelee(v1) == DBM:IsMelee(v2) then\n\t\t\treturn DBM:GetGroupId(DBM:GetUnitFullName(v1), true) < DBM:GetGroupId(DBM:GetUnitFullName(v2), true)\n\t\t--if one is melee and one is ranged, they are not equal so it goes to the below elseifs that prio melee\n\t\telseif DBM:IsMelee(v1) and not DBM:IsMelee(v2) then\n\t\t\treturn true\n\t\telseif DBM:IsMelee(v2) and not DBM:IsMelee(v1) then\n\t\t\treturn false\n\t\tend\n\tend\n\tfunction DBM.SortByMeleeAlpha(v1, v2)\n\t\t--if both are melee, the return values are equal and we use alpha sort\n\t\t--if both are ranged, the return values are equal and we use alpha sort\n\t\tif DBM:IsMelee(v1) == DBM:IsMelee(v2) then\n\t\t\treturn DBM:GetUnitFullName(v1) < DBM:GetUnitFullName(v2)\n\t\t--if one is melee and one is ranged, they are not equal so it goes to the below elseifs that prio melee\n\t\telseif DBM:IsMelee(v1) and not DBM:IsMelee(v2) then\n\t\t\treturn true\n\t\telseif DBM:IsMelee(v2) and not DBM:IsMelee(v1) then\n\t\t\treturn false\n\t\tend\n\tend\n\tfunction DBM.SortByMeleeRoster(v1, v2)\n\t\t--if both are melee, the return values are equal and we use raid roster index sort\n\t\t--if both are ranged, the return values are equal and we use raid roster index sort\n\t\tif DBM:IsMelee(v1) == DBM:IsMelee(v2) then\n\t\t\treturn DBM:GetGroupId(DBM:GetUnitFullName(v1), true) < DBM:GetGroupId(DBM:GetUnitFullName(v2), true)\n\t\t--if one is melee and one is ranged, they are not equal so it goes to the below elseifs that prio melee\n\t\telseif DBM:IsMelee(v1) and not DBM:IsMelee(v2) then\n\t\t\treturn true\n\t\telseif DBM:IsMelee(v2) and not DBM:IsMelee(v1) then\n\t\t\treturn false\n\t\tend\n\tend\n\tfunction DBM.SortByRangedAlpha(v1, v2)\n\t\t--if both are melee, the return values are equal and we use alpha sort\n\t\t--if both are ranged, the return values are equal and we use alpha sort\n\t\tif DBM:IsRanged(v1) == DBM:IsRanged(v2) then\n\t\t\treturn DBM:GetUnitFullName(v1) < DBM:GetUnitFullName(v2)\n\t\t--if one is melee and one is ranged, they are not equal so it goes to the below elseifs that prio melee\n\t\telseif DBM:IsRanged(v1) and not DBM:IsRanged(v2) then\n\t\t\treturn true\n\t\telseif DBM:IsRanged(v2) and not DBM:IsRanged(v1) then\n\t\t\treturn false\n\t\tend\n\tend\n\tfunction DBM.SortByRangedRoster(v1, v2)\n\t\t--if both are melee, the return values are equal and we use raid roster index sort\n\t\t--if both are ranged, the return values are equal and we use raid roster index sort\n\t\tif DBM:IsRanged(v1) == DBM:IsRanged(v2) then\n\t\t\treturn DBM:GetGroupId(DBM:GetUnitFullName(v1), true) < DBM:GetGroupId(DBM:GetUnitFullName(v2), true)\n\t\t--if one is melee and one is ranged, they are not equal so it goes to the below elseifs that prio melee\n\t\telseif DBM:IsRanged(v1) and not DBM:IsRanged(v2) then\n\t\t\treturn true\n\t\telseif DBM:IsRanged(v2) and not DBM:IsRanged(v1) then\n\t\t\treturn false\n\t\tend\n\tend\nend\n\nfunction bossModPrototype:UnitClass(uId)\n\tif uId then--Return unit requested\n\t\tlocal _, class = UnitClass(uId)\n\t\treturn class\n\tend\n\treturn playerClass--else return \"player\"\nend\n\nfunction bossModPrototype:IsTank()\n\t--IsTanking already handles external calls, no need here.\n\tif not currentSpecID then\n\t\tDBM:SetCurrentSpecInfo()\n\tend\n\treturn private.specRoleTable[currentSpecID][\"Tank\"]\nend\n\nfunction bossModPrototype:IsDps(uId)\n\tif uId then--External unit call.\n\t\t--no SpecID checks because SpecID is only availalbe with DBM/Bigwigs, but both DBM/Bigwigs auto set DAMAGER/HEALER/TANK roles anyways so it'd be redundant\n\t\tif IsPartyLFG() then -- On WotLK, Role API only works on LFG\n\t\t\tlocal _, _, isDamager = UnitGroupRolesAssigned(uId)\n\t\t\treturn isDamager -- or not GetPartyAssignment(\"MAINTANK\", uId, 1) -- Using this GetPartyAssignment API here makes no sense, since it being a non MAINTANK could be a healer...\n\t\telse\n\t\t\treturn DBM:GetUnitRole(uId) == \"DAMAGER\"\n\t\tend\n\tend\n\tif not currentSpecID then\n\t\tDBM:SetCurrentSpecInfo()\n\tend\n\treturn private.specRoleTable[currentSpecID][\"Dps\"]\nend\n\nfunction DBM:IsHealer(uId)\n\tif uId then--External unit call.\n\t\t--no SpecID checks because SpecID is only availalbe with DBM/Bigwigs, but both DBM/Bigwigs auto set DAMAGER/HEALER/TANK roles anyways so it'd be redundant\n\t\tif IsPartyLFG() then -- On WotLK, Role API only works on LFG\n\t\t\tlocal _, isHealer = UnitGroupRolesAssigned(uId)\n\t\t\treturn isHealer\n\t\telse\n\t\t\treturn DBM:GetUnitRole(uId) == \"HEALER\"\n\t\tend\n\tend\n\tif not currentSpecID then\n\t\tDBM:SetCurrentSpecInfo()\n\tend\n\treturn private.specRoleTable[currentSpecID][\"Healer\"]\nend\nbossModPrototype.IsHealer = DBM.IsHealer\n\nfunction DBM:IsTanking(playerUnitID, enemyUnitID, isName, onlyRequested, enemyGUID, includeTarget, onlyS3)\n\t--Didn't have playerUnitID so combat log name was passed\n\tif isName then\n\t\tplayerUnitID = DBM:GetRaidUnitId(playerUnitID)\n\tend\n\tif not playerUnitID then\n\t\tDBM:Debug(\"IsTanking passed with invalid unit\", 2)\n\t\treturn false\n\tend\n\t--If we don't know enemy unit token, but know it's GUID\n\tif not enemyUnitID and enemyGUID then\n\t\tenemyUnitID = DBM:GetUnitIdFromGUID(enemyGUID)\n\tend\n\n\tDBM:Debug((\"IsTanking run with playerUnitID: %s (%s) and enemyUnitID: %s (%s). DBM arguments - onlyRequested: %s ; enemyGUID: %s ; includeTarget: %s ; onlyS3: %s\"):format(playerUnitID or \"nil\", playerUnitID and UnitName(playerUnitID) or \"nil\", enemyUnitID or \"nil\", enemyUnitID and UnitName(enemyUnitID) or \"nil\", tostring(onlyRequested) or \"nil\", enemyGUID or \"nil\", tostring(includeTarget) or \"nil\", tostring(onlyS3) or \"nil\"), 3)\n\t--Threat/Tanking Checks\n\t--We have both units. No need to find unitID\n\tif enemyUnitID then\n\t\t--Check threat first\n\t\tlocal tanking, status, scaledPercent, rawPercent, threatValue = UnitDetailedThreatSituation(playerUnitID, enemyUnitID)\n\t\tDBM:Debug((\"Threat API arguments - tanking: %s ; status: %s ; scaledPercent: %s ; rawPercent: %s ; threatValue: %s\"):format(tostring(tanking) or \"nil\", tostring(status) or \"nil\", tostring(scaledPercent) or \"nil\", tostring(rawPercent) or \"nil\", tostring(threatValue) or \"nil\"), 3)\n\t\tif (not onlyS3 and tanking) or (status == 3) then\n\t\t\treturn true\n\t\tend\n\t\t--Non threat fallback\n\t\tif includeTarget and UnitExists(enemyUnitID..\"target\") then\n\t\t\tif UnitIsUnit(playerUnitID, enemyUnitID..\"target\") then\n\t\t\t\tDBM:Debug(\"IsTanking found tank, using enemyUnitID target\", 3)\n\t\t\t\treturn true\n\t\t\tend\n\t\tend\n\tend\n\t--if onlyRequested is false/nil, it means we also accept anyone that's a tank role or tanking any boss unit\n\tif not onlyRequested then\n\t\t--Use these as fallback if threat target not found\n\t\tif GetPartyAssignment(\"MAINTANK\", playerUnitID, 1) then\n\t\t\tDBM:Debug(\"IsTanking found MAINTANK, using GetPartyAssignment\", 3)\n\t\t\treturn true\n\t\tend\n\t\t--no SpecID checks because SpecID is only availalbe with DBM/Bigwigs, but both DBM/Bigwigs auto set DAMAGER/HEALER/TANK roles anyways so it'd be redundant\n\t\tif IsPartyLFG() then -- On WotLK, Role API only works on LFG\n\t\t\tlocal isTank = UnitGroupRolesAssigned(playerUnitID)\n\t\t\tif isTank then\n\t\t\t\tDBM:Debug(\"IsTanking found TANK role, using UnitGroupRolesAssigned\", 3)\n\t\t\t\treturn true\n\t\t\tend\n\t\telse\n\t\t\tif DBM:GetUnitRole(playerUnitID) == \"TANK\" then\n\t\t\t\tDBM:Debug(\"IsTanking found TANK role, using DBM:GetUnitRole\", 3)\n\t\t\t\treturn true\n\t\t\tend\n\t\tend\n\t\tfor i = 1, 5 do\n\t\t\tlocal unitID = \"boss\"..i\n\t\t\tlocal guid = UnitGUID(unitID)\n\t\t\t--No GUID, any unit having threat returns true, GUID, only specific unit matching guid\n\t\t\tif not enemyGUID or (guid and guid == enemyGUID) then\n\t\t\t\t--Check threat first\n\t\t\t\tlocal tanking, status = UnitDetailedThreatSituation(playerUnitID, unitID)\n\t\t\t\tif (not onlyS3 and tanking) or (status == 3) then\n\t\t\t\t\tDBM:Debug(\"IsTanking found TANK, using Threat API on boss units\", 3)\n\t\t\t\t\treturn true\n\t\t\t\tend\n\t\t\t\t--Non threat fallback\n\t\t\t\tif includeTarget and UnitExists(unitID..\"target\") then\n\t\t\t\t\tif UnitIsUnit(playerUnitID, unitID..\"target\") then\n\t\t\t\t\t\tDBM:Debug(\"IsTanking found TANK, using bosstarget fallback\", 3)\n\t\t\t\t\t\treturn true\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\tDBM:Debug(\"IsTanking return false\", 3)\n\treturn false\nend\nbossModPrototype.IsTanking = DBM.IsTanking\n\nfunction bossModPrototype:GetNumAliveTanks()\n\tif not IsInGroup() then return 1 end--Solo raid, you're the \"tank\"\n\tlocal count = 0\n\tlocal uId = (IsInRaid() and \"raid\") or \"party\"\n\tfor i = 1, DBM:GetNumRealGroupMembers() do\n\t\tlocal isTank = UnitGroupRolesAssigned(uId..i)\n\t\tif (isTank or GetPartyAssignment(\"MAINTANK\", uId..i, 1)) and not UnitIsDeadOrGhost(uId..i) then\n\t\t\tcount = count + 1\n\t\tend\n\tend\n\treturn count\nend\n\n-----------------------\n--  Filter Methods  --\n-----------------------\n\ndo\n\tlocal interruptSpells = {\n\t\t[1766] = true,--Rogue Kick\n\t\t[2139] = true,--Mage Counterspell\n\t\t[6552] = true,--Warrior Pummel\n\t\t[15487] = true,--Priest Silence\n\t\t[19647] = true,--Warlock pet Spell Lock\n\t\t[47528] = true,--Death Knight Mind Freeze\n\t\t[49377] = true,--Druid Feral Charge\n\t\t[57994] = true,--Shaman Wind Shear\n\t}\n\t--onlyTandF param is used when CheckInterruptFilter is actually being used for a simple target/focus check and nothing more.\n\t--checkCooldown should always be passed true except for special rotations like count warnings when you should be alerted it's your turn even if you dropped ball and put it on CD at wrong time\n\t--ignoreTandF is passed usually when interrupt is on a main boss or event that is global to entire raid and should always be alerted regardless of targetting.\n\tfunction bossModPrototype:CheckInterruptFilter(sourceGUID, checkOnlyTandF, checkCooldown, ignoreTandF)\n\t\t--Check healer spec filter\n\t\tif self:IsHealer() and (self.isTrashMod and DBM.Options.FilterTInterruptHealer or not self.isTrashMod and DBM.Options.FilterBInterruptHealer) then\n\t\t\treturn false\n\t\tend\n\n\t\t--Check if cooldown check is required\n\t\tif checkCooldown and (self.isTrashMod and DBM.Options.FilterTInterruptCooldown or not self.isTrashMod and DBM.Options.FilterBInterruptCooldown) then\n\t\t\tfor spellID, _ in pairs(interruptSpells) do\n\t\t\t\t--For an inverse check, don't need to check if it's known, if it's on cooldown it's known\n\t\t\t\t--This is possible since no class has 2 interrupt spells (well, actual interrupt spells)\n\t\t\t\tif (GetSpellCooldown(spellID)) ~= 0 then--Spell is on cooldown\n\t\t\t\t\treturn false\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\n\t\tlocal unitID = (UnitGUID(\"target\") == sourceGUID) and \"target\" or (UnitGUID(\"focus\") == sourceGUID) and \"focus\"\n\t\t--Check if target/focus is required (or if onlyTandF is used, meaning this isn't actually an interrupt API check)\n\t\tif checkOnlyTandF or (self.isTrashMod and DBM.Options.FilterTTargetFocus or not self.isTrashMod and DBM.Options.FilterBTargetFocus) then\n\t\t\t--Just return false if source isn't our target or focus, no need to do further checks\n\t\t\tif not ignoreTandF and not unitID then\n\t\t\t\treturn false\n\t\t\tend\n\t\tend\n\n\t\t--Check if it's casting something that's not interruptable at the moment\n\t\t--needed for torghast since many mobs can have interrupt immunity with same spellIds as other mobs that can be interrupted\n\t\tif unitID then\n\t\t\tif UnitCastingInfo(unitID) then\n\t\t\t\tlocal _, _, _, _, _, _, _, _, notInterruptible = UnitCastingInfo(unitID)\n\t\t\t\tif notInterruptible then return false end\n\t\t\telseif UnitChannelInfo(unitID) then\n\t\t\t\tlocal _, _, _, _, _, _, _, notInterruptible = UnitChannelInfo(unitID)\n\t\t\t\tif notInterruptible then return false end\n\t\t\tend\n\t\tend\n\t\treturn true\n\tend\nend\n\ndo\n\t--lazyCheck mostly for migration, doesn't distinguish dispel types\n\tlocal lazyCheck = {\n\t\t[2782] = true,--Druid: Remove Curse (Curse and Poison)\n\t\t[2893] = true,--Druid: Abolish Poison (Poison)\n\t\t[8946] = true,--Druid: Cure Poison (Poison)\n\t\t[527] = true,--Priest: Dispel Magic (Magic and Disease)\n\t\t[528] = true,--Priest: Cure Disease (Disease)\n\t\t[552] = true,--Priest: Abolish Disease (Disease)\n\t\t[32375] = true,--Priest: Mass Dispel (Magic and Disease)\n\t\t[1022] = true,--Paladin: Hand of Protection (Bleed)\n\t\t[1152] = true,--Paladin: Purify (Poison and Disease)\n\t\t[4987] = true,--Paladin: Cleanse (Magic, Poison and Disease)\n\t\t[526] = true,--Shaman: Cure Toxins (Poison and Disease)\n\t\t[51886] = true,--Shaman: Cleanse Spirit (Curse, Poison and Disease)\n\t\t[475] = true,--Mage: Remove Curse (Curse)\n\t}\n\t--Obviously only checks spells relevant for the dispel type\n\tlocal typeCheck = {\n\t\t[\"magic\"] = {\n\t\t\t[527] = true,--Priest: Dispel Magic (Magic and Disease)\n\t\t\t[32375] = true,--Priest: Mass Dispel (Magic and Disease)\n\t\t\t[4987] = true,--Paladin: Cleanse (Magic, Poison and Disease)\n\t\t\t[77130] = true,--Shaman: Purify Spirit (Magic and Curse)\n\t\t},\n\t\t[\"curse\"] = {\n\t\t\t[2782] = true,--Druid: Remove Curse (Curse and Poison)\n\t\t\t[51886] = DBM:IsHealer() and true,--Shaman: Cleanse Spirit (Curse, Poison and Disease)\n\t\t\t[475] = true,--Mage: Remove Curse (Curse)\n\t\t},\n\t\t[\"poison\"] = {\n\t\t\t[2782] = true,--Druid: Remove Corruption (Curse and Poison)\n\t\t\t[2893] = true,--Druid: Abolish Poison (Poison)\n\t\t\t[8946] = true,--Druid: Cure Poison (Poison)\n\t\t\t[1152] = true,--Paladin: Purify (Poison and Disease)\n\t\t\t[4987] = true,--Paladin: Cleanse (Magic, Poison and Disease)\n\t\t\t[526] = true,--Shaman: Cure Toxins (Poison and Disease)\n\t\t\t[51886] = DBM:IsHealer() and true,--Shaman: Cleanse Spirit (Curse, Poison and Disease)\n\t\t},\n\t\t[\"disease\"] = {\n\t\t\t[527] = true,--Priest: Dispel Magic (Magic and Disease)\n\t\t\t[528] = true,--Priest: Cure Disease (Disease)\n\t\t\t[552] = true,--Priest: Abolish Disease (Disease)\n\t\t\t[32375] = true,--Priest: Mass Dispel (Magic and Disease)\n\t\t\t[1152] = true,--Paladin: Purify (Poison and Disease)\n\t\t\t[4987] = true,--Paladin: Cleanse (Magic, Poison and Disease)\n\t\t\t[526] = true,--Shaman: Cure Toxins (Poison and Disease)\n\t\t\t[51886] = DBM:IsHealer() and true,--Shaman: Cleanse Spirit (Curse, Poison and Disease)\n\t\t},\n\t\t[\"bleed\"] = {\n\t\t\t[1022] = true,--Paladin: Hand of Protection (Bleed)\n\t\t},\n\t}\n\tlocal lastCheck, lastReturn = 0, true\n\tfunction bossModPrototype:CheckDispelFilter(dispelType)\n\t\tif not DBM.Options.FilterDispel then return true end\n\t\t-- WotLK: Druid: Abolish Poison (2893), Cure Poison (8946), Remove Curse (2782); Priest: Dispel Magic (527), Abolish Disease (552), Cure Disease (528), Mass Dispel (32375); Paladin: Cleanse (4987), Purify (1152); Shaman: Cleanse Spirit (51886), Cure Toxins (526); Mage: Remove Curse (475), Warlock (pet Felhunter): Devour Magic (48011)\n\t\t--start, duration, enable = GetSpellCooldown\n\t\t--start & duration == 0 if spell not on cd\n\t\tif UnitIsDeadOrGhost(\"player\") then return false end--if dead, can't dispel\n\t\tif GetTime() - lastCheck < 0.1 then--Recently returned status, return same status to save cpu from aggressive api checks caused by CheckDispelFilter running on multiple raid members getting debuffed at once\n\t\t\treturn lastReturn\n\t\tend\n\t\tif dispelType then\n\t\t\t--Devour Magic requires checking if Felhunter pet is out (Warlock only)\n\t\t\t--Only checking 48011 (rank 7) for convenience, since API returns 0 for every other rank below it (possibly an unwanted behaviour with API and pet)\n\t\t\tif dispelType == \"magic\" and (GetSpellCooldown(48011)) == 0 and (UnitExists(\"pet\") and self:GetCIDFromGUID(UnitGUID(\"pet\")) == 6) then\n\t\t\t\tlastCheck = GetTime()\n\t\t\t\tlastReturn = true\n\t\t\t\treturn true\n\t\t\tend\n\t\t\t--We cannot do inverse check here because some classes actually have two dispels for same type (such as evoker)\n\t\t\t--Therefor, we can't go false if only one of them are on cooldown. We have to go true of any of them aren't on CD instead\n\t\t\t--As such, we have to check if a spell is known in addition to it not being on cooldown\n\t\t\tfor spellID, _ in pairs(typeCheck[dispelType]) do\n\t\t\t\tif typeCheck[dispelType][spellID] and IsSpellKnown(spellID) and (GetSpellCooldown(spellID)) == 0 then--Spell is known and not on cooldown\n\t\t\t\t\tlastCheck = GetTime()\n\t\t\t\t\tlastReturn = true\n\t\t\t\t\treturn true\n\t\t\t\tend\n\t\t\tend\n\t\telse--use lazy check until all mods are migrated to define type\n\t\t\tfor spellID, _ in pairs(lazyCheck) do\n\t\t\t\tif IsSpellKnown(spellID) and (GetSpellCooldown(spellID)) == 0 then--Spell is known and not on cooldown\n\t\t\t\t\tlastCheck = GetTime()\n\t\t\t\t\tlastReturn = true\n\t\t\t\t\treturn true\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tlastCheck = GetTime()\n\t\tlastReturn = false\n\t\treturn false\n\tend\nend\n\n-------------------------\n--  Boss Health Frame  --\n-------------------------\nfunction bossModPrototype:SetBossHealthInfo(...)\n\tself.bossHealthInfo = {...}\nend\n\n----------------------------\n--  Boss Health Function  --\n----------------------------\n--This accepts both CID and GUID\nfunction DBM:GetBossHP(cIdOrGUID, onlyHighest)\n\tlocal uId = bossHealthuIdCache[cIdOrGUID] or \"target\"\n\tlocal guid = UnitGUID(uId)\n\t--Target or Cached (if already called with this cid or GUID before)\n\tif (self:GetCIDFromGUID(guid) == cIdOrGUID or guid == cIdOrGUID) and UnitHealthMax(uId) ~= 0 then\n\t\tif bossHealth[cIdOrGUID] and (UnitHealth(uId) == 0 and not UnitIsDead(uId)) then return bossHealth[cIdOrGUID], uId, UnitName(uId) end--Return last non 0 value if value is 0, since it's last valid value we had.\n\t\tlocal hp = UnitHealth(uId) / UnitHealthMax(uId) * 100\n\t\tif not onlyHighest or onlyHighest and hp > (bossHealth[cIdOrGUID] or 0) then\n\t\t\tbossHealth[cIdOrGUID] = hp\n\t\tend\n\t\treturn hp, uId, UnitName(uId)\n\t--Focus\n\telseif (self:GetCIDFromGUID(UnitGUID(\"focus\")) == cIdOrGUID or UnitGUID(\"focus\") == cIdOrGUID) and UnitHealthMax(\"focus\") ~= 0 then\n\t\tif bossHealth[cIdOrGUID] and (UnitHealth(\"focus\") == 0 and not UnitIsDead(\"focus\")) then return bossHealth[cIdOrGUID], \"focus\", UnitName(\"focus\") end--Return last non 0 value if value is 0, since it's last valid value we had.\n\t\tlocal hp = UnitHealth(\"focus\") / UnitHealthMax(\"focus\") * 100\n\t\tif not onlyHighest or onlyHighest and hp > (bossHealth[cIdOrGUID] or 0) then\n\t\t\tbossHealth[cIdOrGUID] = hp\n\t\tend\n\t\treturn hp, \"focus\", UnitName(\"focus\")\n\telse\n\t\t--Boss UnitIds\n\t\tfor i = 1, 5 do\n\t\t\tlocal unitID = \"boss\"..i\n\t\t\tlocal bossguid = UnitGUID(unitID)\n\t\t\tif (self:GetCIDFromGUID(bossguid) == cIdOrGUID or bossguid == cIdOrGUID) and UnitHealthMax(unitID) ~= 0 then\n\t\t\t\tif bossHealth[cIdOrGUID] and (UnitHealth(unitID) == 0 and not UnitIsDead(unitID)) then return bossHealth[cIdOrGUID], unitID, UnitName(unitID) end--Return last non 0 value if value is 0, since it's last valid value we had.\n\t\t\t\tlocal hp = UnitHealth(unitID) / UnitHealthMax(unitID) * 100\n\t\t\t\tif not onlyHighest or onlyHighest and hp > (bossHealth[cIdOrGUID] or 0) then\n\t\t\t\t\tbossHealth[cIdOrGUID] = hp\n\t\t\t\tend\n\t\t\t\tbossHealthuIdCache[cIdOrGUID] = unitID\n\t\t\t\treturn hp, unitID, UnitName(unitID)\n\t\t\tend\n\t\tend\n\t\t--Scan raid/party target frames\n\t\tlocal idType = (IsInRaid() and \"raid\") or \"party\"\n\t\tfor i = 0, GetNumGroupMembers() do\n\t\t\tlocal unitId = ((i == 0) and \"target\") or idType..i..\"target\"\n\t\t\tlocal bossguid = UnitGUID(unitId)\n\t\t\tif (self:GetCIDFromGUID(bossguid) == cIdOrGUID or bossguid == cIdOrGUID) and UnitHealthMax(unitId) ~= 0 then\n\t\t\t\tif bossHealth[cIdOrGUID] and (UnitHealth(unitId) == 0 and not UnitIsDead(unitId)) then return bossHealth[cIdOrGUID], unitId, UnitName(unitId) end--Return last non 0 value if value is 0, since it's last valid value we had.\n\t\t\t\tlocal hp = UnitHealth(unitId) / UnitHealthMax(unitId) * 100\n\t\t\t\tif not onlyHighest or onlyHighest and hp > (bossHealth[cIdOrGUID] or 0) then\n\t\t\t\t\tbossHealth[cIdOrGUID] = hp\n\t\t\t\tend\n\t\t\t\tbossHealthuIdCache[cIdOrGUID] = unitId\n\t\t\t\treturn hp, unitId, UnitName(unitId)\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction DBM:GetBossHPByGUID(guid)\n\tlocal uId = bossHealthuIdCache[guid] or \"target\"\n\tif UnitGUID(uId) == guid and UnitHealthMax(uId) ~= 0 then\n\t\tif bossHealth[guid] and (UnitHealth(uId) == 0 and not UnitIsDead(uId)) then return bossHealth[guid], uId, UnitName(uId) end--Return last non 0 value if value is 0, since it's last valid value we had.\n\t\tlocal hp = UnitHealth(uId) / UnitHealthMax(uId) * 100\n\t\tbossHealth[guid] = hp\n\t\treturn hp, uId, UnitName(uId)\n\telseif UnitGUID(\"focus\") == guid and UnitHealthMax(\"focus\") ~= 0 then\n\t\tif bossHealth[guid] and (UnitHealth(\"focus\") == 0  and not UnitIsDead(\"focus\")) then return bossHealth[guid], \"focus\", UnitName(\"focus\") end--Return last non 0 value if value is 0, since it's last valid value we had.\n\t\tlocal hp = UnitHealth(\"focus\") / UnitHealthMax(\"focus\") * 100\n\t\tbossHealth[guid] = hp\n\t\treturn hp, \"focus\", UnitName(\"focus\")\n\telse\n\t\tfor i = 1, 5 do\n\t\t\tlocal guid2 = UnitGUID(\"boss\"..i)\n\t\t\tif guid == guid2 and UnitHealthMax(\"boss\"..i) ~= 0 then\n\t\t\t\tif bossHealth[guid] and (UnitHealth(\"boss\"..i) == 0 and not UnitIsDead(\"boss\"..i)) then return bossHealth[guid], \"boss\"..i, UnitName(\"boss\"..i) end--Return last non 0 value if value is 0, since it's last valid value we had.\n\t\t\t\tlocal hp = UnitHealth(\"boss\"..i) / UnitHealthMax(\"boss\"..i) * 100\n\t\t\t\tbossHealth[guid] = hp\n\t\t\t\tbossHealthuIdCache[guid] = \"boss\"..i\n\t\t\t\treturn hp, \"boss\"..i, UnitName(\"boss\"..i)\n\t\t\tend\n\t\tend\n\t\tlocal idType = (GetNumRaidMembers() > 0 and \"raid\") or \"party\"\n\t\tfor i = 0, GetNumGroupMembers() do\n\t\t\tlocal unitId = ((i == 0) and \"target\") or idType..i..\"target\"\n\t\t\tlocal guid2 = UnitGUID(unitId)\n\t\t\tif guid == guid2 and UnitHealthMax(unitId) ~= 0 then\n\t\t\t\tif bossHealth[guid] and (UnitHealth(unitId) == 0 and not UnitIsDead(unitId)) then return bossHealth[guid], unitId, UnitName(unitId) end--Return last non 0 value if value is 0, since it's last valid value we had.\n\t\t\t\tlocal hp = UnitHealth(unitId) / UnitHealthMax(unitId) * 100\n\t\t\t\tbossHealth[guid] = hp\n\t\t\t\tbossHealthuIdCache[guid] = unitId\n\t\t\t\treturn hp, unitId, UnitName(unitId)\n\t\t\tend\n\t\tend\n\tend\n\treturn nil\nend\n\nfunction DBM:GetBossHPByUnitID(uId)\n\tif UnitHealthMax(uId) ~= 0 then\n\t\tlocal hp = UnitHealth(uId) / UnitHealthMax(uId) * 100\n\t\tbossHealth[uId] = hp\n\t\treturn hp, uId, UnitName(uId)\n\tend\nend\n\nfunction bossModPrototype:SetMainBossID(cid)\n\tself.mainBoss = cid\nend\n\nfunction bossModPrototype:SetBossHPInfoToHighest(numBoss)\n\tif numBoss ~= false then\n\t\tself.numBoss = numBoss or (self.multiMobPullDetection and #self.multiMobPullDetection)\n\tend\n\tself.highesthealth = true\nend\n\nfunction bossModPrototype:GetHighestBossHealth()\n\tlocal hp\n\tif not self.multiMobPullDetection or self.mainBoss then\n\t\thp = bossHealth[self.mainBoss or self.combatInfo.mob or -1]\n\t\tif hp and (hp > 100 or hp <= 0) then\n\t\t\thp = nil\n\t\tend\n\telse\n\t\tfor _, mob in ipairs(self.multiMobPullDetection) do\n\t\t\tif (bossHealth[mob] or 0) > (hp or 0) and (bossHealth[mob] or 0) < 100 then-- ignore full health.\n\t\t\t\thp = bossHealth[mob]\n\t\t\tend\n\t\tend\n\tend\n\treturn hp\nend\n\nfunction bossModPrototype:GetLowestBossHealth()\n\tlocal hp\n\tif not self.multiMobPullDetection or self.mainBoss then\n\t\thp = bossHealth[self.mainBoss or self.combatInfo.mob or -1]\n\t\tif hp and (hp > 100 or hp <= 0) then\n\t\t\thp = nil\n\t\tend\n\telse\n\t\tfor _, mob in ipairs(self.multiMobPullDetection) do\n\t\t\tif (bossHealth[mob] or 100) < (hp or 100) and (bossHealth[mob] or 100) > 0 then-- ignore zero health.\n\t\t\t\thp = bossHealth[mob]\n\t\t\tend\n\t\tend\n\tend\n\treturn hp\nend\n\nbossModPrototype.GetBossHP = DBM.GetBossHP\nbossModPrototype.GetBossHPByGUID = DBM.GetBossHPByGUID\nbossModPrototype.GetBossHPByUnitID = DBM.GetBossHPByUnitID\n\n\n-------------------------\n--  Timers Table Util  --\n-------------------------\nfunction bossModPrototype:GetFromTimersTable(table, difficultyName, phase, spellId, count)\n\tlocal prev = table\n\n\tif difficultyName ~= false then\n\t\tif not difficultyName or not prev[difficultyName] then\n\t\t\tDBM:Debug(\"difficultyName is missing from table\")\n\t\t\treturn\n\t\tend\n\t\tprev = prev[difficultyName]\n\tend\n\n\tif phase ~= false then\n\t\tif not phase or not prev[phase] then\n\t\t\tDBM:Debug(\"phase is missing from table\")\n\t\t\treturn\n\t\tend\n\t\tprev = prev[phase]\n\tend\n\n\tif not prev[spellId] then\n\t\tDBM:Debug(\"spellId is missing from table\")\n\t\treturn\n\tend\n\tprev = prev[spellId]\n\n\tif count then\n\t\tprev = prev[count]\n\tend\n\n\treturn prev\nend\n\n-----------------------\n--  Announce Object  --\n-----------------------\ndo\n\tlocal frame = CreateFrame(\"Frame\", \"DBMWarning\", UIParent)\n\tlocal font1u = CreateFrame(\"Frame\", \"DBMWarning1Updater\", UIParent)\n\tlocal font2u = CreateFrame(\"Frame\", \"DBMWarning2Updater\", UIParent)\n\tlocal font3u = CreateFrame(\"Frame\", \"DBMWarning3Updater\", UIParent)\n\tlocal font1 = frame:CreateFontString(\"DBMWarning1\", \"OVERLAY\", \"GameFontNormal\")\n\tfont1:SetWidth(0) -- Don't hardcode, it WILL cause client crashes if a string with icons and certain fonts reach a certain FontHeight on the OnUpdate grow\n\tfont1:SetHeight(0)\n\tfont1:SetPoint(\"TOP\", 0, 0)\n\tlocal font2 = frame:CreateFontString(\"DBMWarning2\", \"OVERLAY\", \"GameFontNormal\")\n\tfont2:SetWidth(0) -- Don't hardcode, it WILL cause client crashes if a string with icons and certain fonts reach a certain FontHeight on the OnUpdate grow\n\tfont2:SetHeight(0)\n\tfont2:SetPoint(\"TOP\", font1, \"BOTTOM\", 0, 0)\n\tlocal font3 = frame:CreateFontString(\"DBMWarning3\", \"OVERLAY\", \"GameFontNormal\")\n\tfont3:SetWidth(0) -- Don't hardcode, it WILL cause client crashes if a string with icons and certain fonts reach a certain FontHeight on the OnUpdate grow\n\tfont3:SetHeight(0)\n\tfont3:SetPoint(\"TOP\", font2, \"BOTTOM\", 0, 0)\n\tframe:SetMovable(1)\n\tframe:SetWidth(1)\n\tframe:SetHeight(1)\n\tframe:SetFrameStrata(\"HIGH\")\n\tframe:SetClampedToScreen()\n\tframe:SetPoint(\"CENTER\", UIParent, \"CENTER\", 0, 300)\n\tfont1u:Hide()\n\tfont2u:Hide()\n\tfont3u:Hide()\n\n\tlocal font1elapsed, font2elapsed, font3elapsed\n\n\tlocal function fontHide1()\n\t\tlocal duration = DBM.Options.WarningDuration2\n\t\tif font1elapsed > duration * 1.3 then\n\t\t\tfont1u:Hide()\n\t\t\tfont1:Hide()\n\t\t\tif frame.font1ticker then\n\t\t\t\tAceTimer:CancelTimer(frame.font1ticker)\n\t\t\t\tframe.font1ticker = nil\n\t\t\tend\n\t\telseif font1elapsed > duration then\n\t\t\tfont1elapsed = font1elapsed + 0.05\n\t\t\tlocal alpha = 1 - (font1elapsed - duration) / (duration * 0.3)\n\t\t\tfont1:SetAlpha(alpha > 0 and alpha or 0)\n\t\telse\n\t\t\tfont1elapsed = font1elapsed + 0.05\n\t\t\tfont1:SetAlpha(1)\n\t\tend\n\tend\n\n\tlocal function fontHide2()\n\t\tlocal duration = DBM.Options.WarningDuration2\n\t\tif font2elapsed > duration * 1.3 then\n\t\t\tfont2u:Hide()\n\t\t\tfont2:Hide()\n\t\t\tif frame.font2ticker then\n\t\t\t\tAceTimer:CancelTimer(frame.font2ticker)\n\t\t\t\tframe.font2ticker = nil\n\t\t\tend\n\t\telseif font2elapsed > duration then\n\t\t\tfont2elapsed = font2elapsed + 0.05\n\t\t\tlocal alpha = 1 - (font2elapsed - duration) / (duration * 0.3)\n\t\t\tfont2:SetAlpha(alpha > 0 and alpha or 0)\n\t\telse\n\t\t\tfont2elapsed = font2elapsed + 0.05\n\t\t\tfont2:SetAlpha(1)\n\t\tend\n\tend\n\n\tlocal function fontHide3()\n\t\tlocal duration = DBM.Options.WarningDuration2\n\t\tif font3elapsed > duration * 1.3 then\n\t\t\tfont3u:Hide()\n\t\t\tfont3:Hide()\n\t\t\tif frame.font3ticker then\n\t\t\t\tAceTimer:CancelTimer(frame.font3ticker)\n\t\t\t\tframe.font3ticker = nil\n\t\t\tend\n\t\telseif font3elapsed > duration then\n\t\t\tfont3elapsed = font3elapsed + 0.05\n\t\t\tlocal alpha = 1 - (font3elapsed - duration) / (duration * 0.3)\n\t\t\tfont3:SetAlpha(alpha > 0 and alpha or 0)\n\t\telse\n\t\t\tfont3elapsed = font3elapsed + 0.05\n\t\t\tfont3:SetAlpha(1)\n\t\tend\n\tend\n\n\tfont1u:SetScript(\"OnUpdate\", function(self)\n\t\tlocal diff = GetTime() - font1.lastUpdate\n\t\tlocal origSize = DBM.Options.WarningFontSize\n\t\tif diff > 0.4 then\n\t\t\tfont1:SetTextHeight(origSize)\n\t\t\tself:Hide()\n\t\telseif diff > 0.2 then\n\t\t\tfont1:SetTextHeight(origSize * (1.5 - (diff-0.2) * 2.5))\n\t\telse\n\t\t\tfont1:SetTextHeight(origSize * (1 + diff * 2.5))\n\t\tend\n\tend)\n\n\tfont2u:SetScript(\"OnUpdate\", function(self)\n\t\tlocal diff = GetTime() - font2.lastUpdate\n\t\tlocal origSize = DBM.Options.WarningFontSize\n\t\tif diff > 0.4 then\n\t\t\tfont2:SetTextHeight(origSize)\n\t\t\tself:Hide()\n\t\telseif diff > 0.2 then\n\t\t\tfont2:SetTextHeight(origSize * (1.5 - (diff-0.2) * 2.5))\n\t\telse\n\t\t\tfont2:SetTextHeight(origSize * (1 + diff * 2.5))\n\t\tend\n\tend)\n\n\tfont3u:SetScript(\"OnUpdate\", function(self)\n\t\tlocal diff = GetTime() - font3.lastUpdate\n\t\tlocal origSize = DBM.Options.WarningFontSize\n\t\tif diff > 0.4 then\n\t\t\tfont3:SetTextHeight(origSize)\n\t\t\tself:Hide()\n\t\telseif diff > 0.2 then\n\t\t\tfont3:SetTextHeight(origSize * (1.5 - (diff-0.2) * 2.5))\n\t\telse\n\t\t\tfont3:SetTextHeight(origSize * (1 + diff * 2.5))\n\t\tend\n\tend)\n\n\tfunction DBM:UpdateWarningOptions()\n\t\tframe:ClearAllPoints()\n\t\tframe:SetPoint(self.Options.WarningPoint, UIParent, self.Options.WarningPoint, self.Options.WarningX, self.Options.WarningY)\n\t\tlocal font = self.Options.WarningFont == \"standardFont\" and standardFont or self.Options.WarningFont\n\t\tfont1:SetFont(font, self.Options.WarningFontSize, self.Options.WarningFontStyle == \"None\" and nil or self.Options.WarningFontStyle)\n\t\tfont2:SetFont(font, self.Options.WarningFontSize, self.Options.WarningFontStyle == \"None\" and nil or self.Options.WarningFontStyle)\n\t\tfont3:SetFont(font, self.Options.WarningFontSize, self.Options.WarningFontStyle == \"None\" and nil or self.Options.WarningFontStyle)\n\t\tif self.Options.WarningFontShadow then\n\t\t\tfont1:SetShadowOffset(1, -1)\n\t\t\tfont2:SetShadowOffset(1, -1)\n\t\t\tfont3:SetShadowOffset(1, -1)\n\t\telse\n\t\t\tfont1:SetShadowOffset(0, 0)\n\t\t\tfont2:SetShadowOffset(0, 0)\n\t\t\tfont3:SetShadowOffset(0, 0)\n\t\tend\n\tend\n\n\tfunction DBM:AddWarning(text, force)\n\t\tlocal added = false\n\t\tif not frame.font1ticker then\n\t\t\tfont1elapsed = 0\n\t\t\tfont1.lastUpdate = GetTime()\n\t\t\tfont1:SetText(text)\n\t\t\tfont1:Show()\n\t\t\tfont1u:Show()\n\t\t\tadded = true\n\t\t\tframe.font1ticker = frame.font1ticker or AceTimer:ScheduleRepeatingTimer(fontHide1, 0.05)\n\t\telseif not frame.font2ticker then\n\t\t\tfont2elapsed = 0\n\t\t\tfont2.lastUpdate = GetTime()\n\t\t\tfont2:SetText(text)\n\t\t\tfont2:Show()\n\t\t\tfont2u:Show()\n\t\t\tadded = true\n\t\t\tframe.font2ticker = frame.font2ticker or AceTimer:ScheduleRepeatingTimer(fontHide2, 0.05)\n\t\telseif not frame.font3ticker or force then\n\t\t\tfont3elapsed = 0\n\t\t\tfont3.lastUpdate = GetTime()\n\t\t\tfont3:SetText(text)\n\t\t\tfont3:Show()\n\t\t\tfont3u:Show()\n\t\t\tfontHide3()\n\t\t\tadded = true\n\t\t\tframe.font3ticker = frame.font3ticker or AceTimer:ScheduleRepeatingTimer(fontHide3, 0.05)\n\t\tend\n\t\tif not added then\n\t\t\tlocal prevText1 = font2:GetText()\n\t\t\tlocal prevText2 = font3:GetText()\n\t\t\tfont1:SetText(prevText1)\n\t\t\tfont1elapsed = font2elapsed\n\t\t\tfont2:SetText(prevText2)\n\t\t\tfont2elapsed = font3elapsed\n\t\t\tself:AddWarning(text, true)\n\t\tend\n\tend\n\n\tdo\n\t\tlocal anchorFrame\n\t\tlocal function moveEnd(self)\n\t\t\tanchorFrame:Hide()\n\t\t\tif anchorFrame.ticker then\n\t\t\t\tAceTimer:CancelTimer(anchorFrame.ticker)\n\t\t\t\tanchorFrame.ticker = nil\n\t\t\tend\n\t\t\tfont1elapsed = self.Options.WarningDuration2\n\t\t\tfont2elapsed = self.Options.WarningDuration2\n\t\t\tfont3elapsed = self.Options.WarningDuration2\n\t\t\tframe:SetFrameStrata(\"HIGH\")\n\t\t\tself:Unschedule(moveEnd)\n\t\t\tDBT:CancelBar(L.MOVE_WARNING_BAR)\n\t\tend\n\n\t\tfunction DBM:MoveWarning()\n\t\t\tif not anchorFrame then\n\t\t\t\tanchorFrame = CreateFrame(\"Frame\", nil, frame)\n\t\t\t\tanchorFrame:SetWidth(32)\n\t\t\t\tanchorFrame:SetHeight(32)\n\t\t\t\tanchorFrame:EnableMouse(true)\n\t\t\t\tanchorFrame:SetPoint(\"TOP\", frame, \"TOP\", 0, 32)\n\t\t\t\tanchorFrame:RegisterForDrag(\"LeftButton\")\n\t\t\t\tanchorFrame:SetClampedToScreen()\n\t\t\t\tanchorFrame:Hide()\n\t\t\t\tlocal texture = anchorFrame:CreateTexture()\n\t\t\t\ttexture:SetTexture(\"Interface\\\\Addons\\\\DBM-Core\\\\textures\\\\dot.blp\")\n\t\t\t\ttexture:SetPoint(\"CENTER\", anchorFrame, \"CENTER\", 0, 0)\n\t\t\t\ttexture:SetWidth(32)\n\t\t\t\ttexture:SetHeight(32)\n\t\t\t\tanchorFrame:SetScript(\"OnDragStart\", function()\n\t\t\t\t\tframe:StartMoving()\n\t\t\t\t\tself:Unschedule(moveEnd)\n\t\t\t\t\tDBT:CancelBar(L.MOVE_WARNING_BAR)\n\t\t\t\tend)\n\t\t\t\tanchorFrame:SetScript(\"OnDragStop\", function()\n\t\t\t\t\tframe:StopMovingOrSizing()\n\t\t\t\t\tlocal point, _, _, xOfs, yOfs = frame:GetPoint(1)\n\t\t\t\t\tself.Options.WarningPoint = point\n\t\t\t\t\tself.Options.WarningX = xOfs\n\t\t\t\t\tself.Options.WarningY = yOfs\n\t\t\t\t\tself:Schedule(15, moveEnd, self)\n\t\t\t\t\tDBT:CreateBar(15, L.MOVE_WARNING_BAR, \"Interface\\\\Icons\\\\Spell_Holy_BorrowedTime\")\n\t\t\t\tend)\n\t\t\tend\n\t\t\tif anchorFrame:IsShown() then\n\t\t\t\tmoveEnd(self)\n\t\t\telse\n\t\t\t\tanchorFrame:Show()\n\t\t\t\tanchorFrame.ticker = anchorFrame.ticker or AceTimer:ScheduleRepeatingTimer(function() self:AddWarning(L.MOVE_WARNING_MESSAGE) end, 5)\n\t\t\t\tself:AddWarning(L.MOVE_WARNING_MESSAGE)\n\t\t\t\tself:Schedule(15, moveEnd, self)\n\t\t\t\tDBT:CreateBar(15, L.MOVE_WARNING_BAR, \"Interface\\\\Icons\\\\Spell_Holy_BorrowedTime\")\n\t\t\t\tframe:Show()\n\t\t\t\tframe:SetFrameStrata(\"TOOLTIP\")\n\t\t\t\tframe:SetAlpha(1)\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal textureCode = \" |T%s:12:12|t \"\n\tlocal textureExp = \" |T(%S+......%S+):12:12|t \"--Fix texture file including blank not strips(example: Interface\\\\Icons\\\\Spell_Frost_Ring of Frost). But this have limitations. Since I'm poor at regular expressions, this is not good fix. Do you have another good regular expression, tandanu?\n\tlocal announcePrototype = {}\n\tlocal mt = {__index = announcePrototype}\n\n\t-- TODO: is there a good reason that this is a weak table?\n\tlocal cachedColorFunctions = setmetatable({}, {__mode = \"kv\"})\n\n\tlocal function setText(announceType, spellId, castTime, preWarnTime, customName, originalSpellID)\n\t\tlocal spellName\n\t\tif customName then\n\t\t\tspellName = customName\n\t\telse\n\t\t\tspellName = (spellId or 0) >= 6 and DBM:GetSpellInfo(spellId) or CL.UNKNOWN\n\t\tend\n\t\tlocal text\n\t\tif announceType == \"cast\" then\n\t\t\tlocal spellHaste = select(7, DBM:GetSpellInfo(53142)) / 10000 -- 53142 = Dalaran Portal, should have 10000 ms cast time\n\t\t\tlocal timer = (select(7, DBM:GetSpellInfo(originalSpellID or spellId)) or 1000) / spellHaste\n\t\t\ttext = L.AUTO_ANNOUNCE_TEXTS[announceType]:format(spellName, castTime or (timer / 1000))\n\t\telseif announceType == \"prewarn\" then\n\t\t\tif type(preWarnTime) == \"string\" then\n\t\t\t\ttext = L.AUTO_ANNOUNCE_TEXTS[announceType]:format(spellName, preWarnTime)\n\t\t\telse\n\t\t\t\ttext = L.AUTO_ANNOUNCE_TEXTS[announceType]:format(spellName, L.SEC_FMT:format(tostring(preWarnTime or 5)))\n\t\t\tend\n\t\telseif announceType == \"stage\" or announceType == \"prestage\" then\n\t\t\ttext = L.AUTO_ANNOUNCE_TEXTS[announceType]:format(tostring(spellId))\n\t\telseif announceType == \"stagechange\" then\n\t\t\ttext = L.AUTO_ANNOUNCE_TEXTS.spell\n\t\telse\n\t\t\ttext = L.AUTO_ANNOUNCE_TEXTS[announceType]:format(spellName)\n\t\tend\n\t\treturn text, spellName\n\tend\n\n\tfunction announcePrototype:SetText(customName)\n\t\tlocal text, spellName = setText(self.announceType, self.spellId, self.castTime, self.preWarnTime, customName)\n\t\tself.text = text\n\t\tself.spellName = spellName\n\tend\n\n\t-- TODO: this function is an abomination, it needs to be rewritten. Also: check if these work-arounds are still necessary\n\tfunction announcePrototype:Show(...) -- todo: reduce amount of unneeded strings\n\t\tif not self.option or self.mod.Options[self.option] then\n\t\t\tif DBM.Options.DontShowBossAnnounces then return end\t-- don't show the announces if the spam filter option is set\n\t\t\tif DBM.Options.DontShowTargetAnnouncements and (self.announceType == \"target\" or self.announceType == \"targetdistance\" or self.announceType == \"targetcount\" or self.announceType == \"targetcountdistance\") and not self.noFilter then return end--don't show announces that are generic target announces\n\t\t\tlocal argTable = {...}\n\t\t\tlocal colorCode = (\"|cff%.2x%.2x%.2x\"):format(self.color.r * 255, self.color.g * 255, self.color.b * 255)\n\t\t\tif #self.combinedtext > 0 then\n\t\t\t\t--Throttle spam.\n\t\t\t\tif DBM.Options.WarningAlphabetical then\n\t\t\t\t\ttsort(self.combinedtext)\n\t\t\t\tend\n\t\t\t\tlocal combinedText = tconcat(self.combinedtext, \"<, >\")\n\t\t\t\tif self.combinedcount == 1 then\n\t\t\t\t\tcombinedText = combinedText..\" \"..L.GENERIC_WARNING_OTHERS\n\t\t\t\telseif self.combinedcount > 1 then\n\t\t\t\t\tcombinedText = combinedText..\" \"..L.GENERIC_WARNING_OTHERS2:format(self.combinedcount)\n\t\t\t\tend\n\t\t\t\t--Process\n\t\t\t\tfor i = 1, #argTable do\n\t\t\t\t\tif type(argTable[i]) == \"string\" then\n\t\t\t\t\t\targTable[i] = combinedText\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tlocal message = pformat(self.text, unpack(argTable))\n\t\t\tlocal text = (\"%s%s%s|r%s\"):format(\n\t\t\t\t(DBM.Options.WarningIconLeft and self.icon and textureCode:format(self.icon)) or \"\",\n\t\t\t\tcolorCode,\n\t\t\t\tmessage,\n\t\t\t\t(DBM.Options.WarningIconRight and self.icon and textureCode:format(self.icon)) or \"\"\n\t\t\t)\n\t\t\tself.combinedcount = 0\n\t\t\tself.combinedtext = {}\n\t\t\tif not cachedColorFunctions[self.color] then\n\t\t\t\tlocal color = self.color -- upvalue for the function to colorize names, accessing self in the colorize closure is not safe as the color of the announce object might change (it would also prevent the announce from being garbage-collected but announce objects are never destroyed)\n\t\t\t\tcachedColorFunctions[color] = function(cap)\n\t\t\t\t\tcap = cap:sub(2, -2)\n\t\t\t\t\tlocal noStrip = cap:match(\"noStrip \")\n\t\t\t\t\tif not noStrip then\n\t\t\t\t\t\tlocal name = cap\n\t\t\t\t\t\tlocal playerClass, playerIcon = DBM:GetRaidClass(name)\n\t\t\t\t\t\tif playerClass ~= \"UNKNOWN\" then\n\t\t\t\t\t\t\tcap = DBM:GetShortServerName(cap)--Only run realm strip function if class color was valid (IE it's an actual playername)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tlocal playerColor = RAID_CLASS_COLORS[playerClass] or color\n\t\t\t\t\t\tif playerColor then\n\t\t\t\t\t\t\tif playerIcon > 0 and playerIcon <= 8 then\n\t\t\t\t\t\t\t\tcap = (\"|TInterface\\\\TargetingFrame\\\\UI-RaidTargetingIcon_%d:0|t\"):format(playerIcon) .. (\"|r|cff%.2x%.2x%.2x%s|r|cff%.2x%.2x%.2x\"):format(playerColor.r * 255, playerColor.g * 255, playerColor.b * 255, cap, color.r * 255, color.g * 255, color.b * 255)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tcap = (\"|r|cff%.2x%.2x%.2x%s|r|cff%.2x%.2x%.2x\"):format(playerColor.r * 255, playerColor.g * 255, playerColor.b * 255, cap, color.r * 255, color.g * 255, color.b * 255)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\telse\n\t\t\t\t\t\tcap = cap:sub(9)\n\t\t\t\t\tend\n\t\t\t\t\treturn cap\n\t\t\t\tend\n\t\t\tend\n\t\t\ttext = text:gsub(\">.-<\", cachedColorFunctions[self.color])\n\t\t\tDBM:AddWarning(text)\n\t\t\tif DBM.Options.ShowWarningsInChat then\n\t\t\t\tif not DBM.Options.WarningIconChat then\n\t\t\t\t\ttext = text:gsub(textureExp, \"\") -- textures @ chat frame can (and will) distort the font if using certain combinations of UI scale, resolution and font size TODO: is this still true as of cataclysm?\n\t\t\t\tend\n\t\t\t\tif DBM.Options.ShowFakedRaidWarnings then\n\t\t\t\t\tfor i = 1, select(\"#\", GetFramesRegisteredForEvent(\"CHAT_MSG_RAID_WARNING\")) do\n\t\t\t\t\t\tlocal frame = select(i, GetFramesRegisteredForEvent(\"CHAT_MSG_RAID_WARNING\"))\n\t\t\t\t\t\tif frame ~= RaidWarningFrame and frame:GetScript(\"OnEvent\") then\n\t\t\t\t\t\t\tframe:GetScript(\"OnEvent\")(frame, \"CHAT_MSG_RAID_WARNING\", text, playerName, GetDefaultLanguage(\"player\"), \"\", playerName, \"\", 0, 0, \"\", 0, 99, \"\")\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tself.mod:AddMsg(text, nil)\n\t\t\t\tend\n\t\t\tend\n\t\t\t--Message: Full message text\n\t\t\t--Icon: Texture path/id for icon\n\t\t\t--Type: Announce type\n\t\t\t----Types: you, target, targetsource, spell, ends, endtarget, fades, adds, count, stack, cast, soon, sooncount, prewarn, bait, stage, stagechange, prestage, moveto\n\t\t\t------Personal/Role (Applies to you, or your job): you, stack, bait, moveto, fades\n\t\t\t------General Target Messages (informative, doesn't usually apply to you): target, targetsource\n\t\t\t------Fight Changes (Stages, adds, boss buff/debuff, etc): stage, stagechange, prestage, adds, ends, endtarget\n\t\t\t------General (can really apply to anything): spell, count, soon, sooncount, prewarn\n\t\t\t--SpellId: Raw spell or encounter journal Id if available.\n\t\t\t--Mod ID: Encounter ID as string, or a generic string for mods that don't have encounter ID (such as trash, dummy/test mods)\n\t\t\t--boolean: Whether or not this warning is a special warning (higher priority).\n\t\t\tfireEvent(\"DBM_Announce\", message, self.icon, self.type, self.spellId, self.mod.id, false)\n\t\t\tif self.sound > 0 then--0 means muted, 1 means no voice pack support, 2 means voice pack version/support\n\t\t\t\tif self.sound > 1 and DBM.Options.ChosenVoicePack2 ~= \"None\" and DBM.Options.VPReplacesAnnounce and not voiceSessionDisabled and not DBM.Options.VPDontMuteSounds and self.sound <= SWFilterDisabled then return end\n\t\t\t\tif not self.option or self.mod.Options[self.option..\"SWSound\"] ~= \"None\" then\n\t\t\t\t\tDBM:PlaySoundFile(DBM.Options.RaidWarningSound, nil, true)--Validate true\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\tself.combinedcount = 0\n\t\t\tself.combinedtext = {}\n\t\tend\n\tend\n\n\tfunction announcePrototype:CombinedShow(delay, ...)\n\t\tif self.option and not self.mod.Options[self.option] then return end\n\t\tif DBM.Options.DontShowBossAnnounces then return end\t-- don't show the announces if the spam filter option is set\n\t\tif DBM.Options.DontShowTargetAnnouncements and (self.announceType == \"target\" or self.announceType == \"targetdistance\" or self.announceType == \"targetcount\" or self.announceType == \"targetcountdistance\") and not self.noFilter then return end--don't show announces that are generic target announces\n\t\tlocal argTable = {...}\n\t\tfor i = 1, #argTable do\n\t\t\tif type(argTable[i]) == \"string\" then\n\t\t\t\tif #self.combinedtext < 8 then--Throttle spam. We may not need more than 9 targets..\n\t\t\t\t\tif not checkEntry(self.combinedtext, argTable[i]) then\n\t\t\t\t\t\tself.combinedtext[#self.combinedtext + 1] = argTable[i]\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tself.combinedcount = self.combinedcount + 1\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tDBMScheduler:Unschedule(self.Show, self.mod, self)\n\t\tDBMScheduler:Schedule(delay or 0.5, self.Show, self.mod, self, ...)\n\tend\n\n\tfunction announcePrototype:Schedule(t, ...)\n\t\treturn DBMScheduler:Schedule(t, self.Show, self.mod, self, ...)\n\tend\n\n\tfunction announcePrototype:Countdown(time, numAnnounces, ...)\n\t\tDBMScheduler:ScheduleCountdown(time, numAnnounces, self.Show, self.mod, self, ...)\n\tend\n\n\tfunction announcePrototype:Cancel(...)\n\t\treturn DBMScheduler:Unschedule(self.Show, self.mod, self, ...)\n\tend\n\n\tfunction announcePrototype:Play(name, customPath)\n\t\tlocal voice = DBM.Options.ChosenVoicePack2\n\t\tif voiceSessionDisabled or voice == \"None\" or not DBM.Options.VPReplacesAnnounce then return end\n\t\tlocal always = DBM.Options.AlwaysPlayVoice\n\t\tif DBM.Options.DontShowTargetAnnouncements and (self.announceType == \"target\" or self.announceType == \"targetdistance\" or self.announceType == \"targetcount\" or self.announceType == \"targetcountdistance\") and not self.noFilter and not always then return end--don't show announces that are generic target announces\n\t\tif (not DBM.Options.DontShowBossAnnounces and (not self.option or self.mod.Options[self.option]) or always) and self.sound <= SWFilterDisabled then\n\t\t\t--Filter tank specific voice alerts for non tanks if tank filter enabled\n\t\t\t--But still allow AlwaysPlayVoice to play as well.\n\t\t\tif (name == \"changemt\" or name == \"tauntboss\") and DBM.Options.FilterTankSpec and not self.mod:IsTank() and not always then return end\n\t\t\tlocal path = customPath or \"Interface\\\\AddOns\\\\DBM-VP\"..voice..\"\\\\\"..name..\".ogg\"\n\t\t\tDBM:PlaySoundFile(path)\n\t\tend\n\tend\n\n\tfunction announcePrototype:ScheduleVoice(t, ...)\n\t\tif voiceSessionDisabled or DBM.Options.ChosenVoicePack2 == \"None\" or not DBM.Options.VPReplacesAnnounce then return end\n\t\tDBMScheduler:Unschedule(self.Play, self.mod, self)--Allow ScheduleVoice to be used in same way as CombinedShow\n\t\treturn DBMScheduler:Schedule(t, self.Play, self.mod, self, ...)\n\tend\n\n\t--Object Permits scheduling voice multiple times for same object\n\tfunction announcePrototype:ScheduleVoiceOverLap(t, ...)\n\t\tif voiceSessionDisabled or DBM.Options.ChosenVoicePack2 == \"None\" or not DBM.Options.VPReplacesAnnounce then return end\n\t\treturn DBMScheduler:Schedule(t, self.Play, self.mod, self, ...)\n\tend\n\n\tfunction announcePrototype:CancelVoice(...)\n\t\tif voiceSessionDisabled or DBM.Options.ChosenVoicePack2 == \"None\" or not DBM.Options.VPReplacesAnnounce then return end\n\t\treturn DBMScheduler:Unschedule(self.Play, self.mod, self, ...)\n\tend\n\n\t-- old constructor (no auto-localize)\n\tfunction bossModPrototype:NewAnnounce(text, color, icon, optionDefault, optionName, soundOption, spellID)\n\t\tif not text then\n\t\t\terror(\"NewAnnounce: you must provide announce text\", 2)\n\t\t\treturn\n\t\tend\n\t\tif type(text) == \"number\" then\n\t\t\tDBM:Debug(\"|cffff0000NewAnnounce: Non auto localized text cannot be numbers, fix this for |r\"..text)\n\t\tend\n\t\tif type(optionName) == \"number\" then\n\t\t\tDBM:Debug(\"|cffff0000NewAnnounce: Non auto localized optionNames cannot be numbers, fix this for |r\"..text)\n\t\t\toptionName = nil\n\t\tend\n\t\tif soundOption and type(soundOption) == \"boolean\" then\n\t\t\tsoundOption = 0--No Sound\n\t\tend\n\t\tlocal obj = setmetatable(\n\t\t\t{\n\t\t\t\ttext = self.localization.warnings[text],\n\t\t\t\tcombinedtext = {},\n\t\t\t\tcombinedcount = 0,\n\t\t\t\tcolor = DBM.Options.WarningColors[color or 1] or DBM.Options.WarningColors[1],\n\t\t\t\tsound = soundOption or 1,\n\t\t\t\tmod = self,\n\t\t\t\ticon = (type(icon) == \"number\" and ( icon <=8 and (iconFolder .. icon) or select(3, GetSpellInfo(icon)))) or icon or \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\",\n\t\t\t},\n\t\t\tmt\n\t\t)\n\t\tif optionName then\n\t\t\tobj.option = optionName\n\t\t\tself:AddBoolOption(obj.option, optionDefault, \"announce\", nil, nil, nil, spellID)\n\t\telseif optionName ~= false then\n\t\t\tobj.option = text\n\t\t\tself:AddBoolOption(obj.option, optionDefault, \"announce\", nil, nil, nil, spellID)\n\t\tend\n\t\ttinsert(self.announces, obj)\n\t\treturn obj\n\tend\n\n\t-- new constructor (partially auto-localized warnings and options, yay!)\n\tlocal function newAnnounce(self, announceType, spellId, color, icon, optionDefault, optionName, castTime, preWarnTime, soundOption, noFilter)\n\t\tif not spellId then\n\t\t\terror(\"newAnnounce: you must provide spellId\", 2)\n\t\t\treturn\n\t\tend\n\t\tlocal optionVersion, alternateSpellId\n\t\tif type(optionName) == \"number\" then\n\t\t\tif optionName > 10 then--Being used as spell name shortening\n\t\t\t\tif DBM.Options.WarningShortText then\n\t\t\t\t\talternateSpellId = optionName\n\t\t\t\tend\n\t\t\telse--Being used as option version\n\t\t\t\toptionVersion = optionName\n\t\t\tend\n\t\t\toptionName = nil\n\t\tend\n\t\tif soundOption and type(soundOption) == \"boolean\" then\n\t\t\tsoundOption = 0--No Sound\n\t\tend\n\t\tlocal text, spellName = setText(announceType, alternateSpellId or spellId, castTime, preWarnTime, nil, spellId)\n\t\ticon = icon or spellId\n\t\tlocal obj = setmetatable( -- todo: fix duplicate code\n\t\t\t{\n\t\t\t\ttext = text,\n\t\t\t\tcombinedtext = {},\n\t\t\t\tcombinedcount = 0,\n\t\t\t\tannounceType = announceType,\n\t\t\t\tcolor = DBM.Options.WarningColors[color or 1] or DBM.Options.WarningColors[1],\n\t\t\t\tmod = self,\n\t\t\t\ticon = (type(icon) == \"number\" and (icon <=8 and (iconFolder .. icon) or select(3, GetSpellInfo(icon)))) or icon or \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\",\n\t\t\t\tsound = soundOption or 1,\n\t\t\t\ttype = announceType,\n\t\t\t\tspellId = spellId,\n\t\t\t\tspellName = spellName,\n\t\t\t\tnoFilter = noFilter,\n\t\t\t\tcastTime = castTime,\n\t\t\t\tpreWarnTime = preWarnTime,\n\t\t\t},\n\t\t\tmt\n\t\t)\n\t\tlocal catType = \"announce\"--Default to General announce\n\t\tif not self.NoSortAnnounce then--ALL announce objects will be assigned \"announce\", usually for mods that sort by phase instead\n\t\t\t--Change if Personal or Other\n\t\t\tif announceType == \"target\" or self.announceType == \"targetdistance\" or announceType == \"targetcount\" or self.announceType == \"targetcountdistance\" or announceType == \"stack\" then\n\t\t\t\tcatType = \"announceother\"\n\t\t\tend\n\t\tend\n\t\tif optionName then\n\t\t\tobj.option = optionName\n\t\t\tself:AddBoolOption(obj.option, optionDefault, catType, nil, nil, nil, spellId, announceType)\n\t\telseif optionName ~= false then\n\t\t\tobj.option = catType..spellId..announceType..(optionVersion or \"\")\n\t\t\tself:AddBoolOption(obj.option, optionDefault, catType, nil, nil, nil, spellId, announceType)\n\t\t\tif noFilter and announceType == \"target\" then\n\t\t\t\tself.localization.options[obj.option] = L.AUTO_ANNOUNCE_OPTIONS[\"targetNF\"]:format(spellId)\n\t\t\telse\n\t\t\t\tself.localization.options[obj.option] = L.AUTO_ANNOUNCE_OPTIONS[announceType]:format(spellId)\n\t\t\tend\n\t\tend\n\t\ttinsert(self.announces, obj)\n\t\treturn obj\n\tend\n\n\tfunction bossModPrototype:NewYouAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"you\", spellId, color or 1, ...)\n\tend\n\n\tfunction bossModPrototype:NewTargetNoFilterAnnounce(spellId, color, icon, optionDefault, optionName, castTime, preWarnTime, soundOption) -- spellId, color, icon, optionDefault, optionName, castTime, preWarnTime, soundOption, noFilter\n\t\treturn newAnnounce(self, \"target\", spellId, color or 3, icon, optionDefault, optionName, castTime, preWarnTime, soundOption, true)\n\tend\n\n\tfunction bossModPrototype:NewTargetAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"target\", spellId, color or 3, ...)\n\tend\n\n\tfunction bossModPrototype:NewTargetDistanceAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"targetdistance\", spellId, color or 3, ...)\n\tend\n\n\tfunction bossModPrototype:NewTargetSourceAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"targetsource\", spellId, color or 3, ...)\n\tend\n\n\tfunction bossModPrototype:NewTargetCountAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"targetcount\", spellId, color or 3, ...)\n\tend\n\n\tfunction bossModPrototype:NewTargetCountDistanceAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"targetcountdistance\", spellId, color or 3, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpellAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"spell\", spellId, color or 2, ...)\n\tend\n\n\tfunction bossModPrototype:NewIncomingAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"incoming\", spellId, color or 2, ...)\n\tend\n\n\tfunction bossModPrototype:NewIncomingCountAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"incomingcount\", spellId, color or 2, ...)\n\tend\n\n\tfunction bossModPrototype:NewEndAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"ends\", spellId, color or 2, ...)\n\tend\n\n\tfunction bossModPrototype:NewEndTargetAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"endtarget\", spellId, color or 2, ...)\n\tend\n\n\tfunction bossModPrototype:NewFadesAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"fades\", spellId, color or 2, ...)\n\tend\n\n\tfunction bossModPrototype:NewAddsLeftAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"addsleft\", spellId, color or 3, ...)\n\tend\n\n\tfunction bossModPrototype:NewCountAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"count\", spellId, color or 2, ...)\n\tend\n\n\tfunction bossModPrototype:NewStackAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"stack\", spellId, color or 2, ...)\n\tend\n\n\tfunction bossModPrototype:NewCastAnnounce(spellId, color, castTime, icon, optionDefault, optionName, _, soundOption) -- spellId, color, castTime, icon, optionDefault, optionName, noArg, soundOption\n\t\treturn newAnnounce(self, \"cast\", spellId, color or 3, icon, optionDefault, optionName, castTime, nil, soundOption)\n\tend\n\n\tfunction bossModPrototype:NewSoonAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"soon\", spellId, color or 2, ...)\n\tend\n\n\tfunction bossModPrototype:NewSoonCountAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"sooncount\", spellId, color or 2, ...)\n\tend\n\n\t--This object disables sounds, it's almost always used in combation with a countdown timer. Even if not a countdown, its a text only spam not a sound spam\n\tfunction bossModPrototype:NewCountdownAnnounce(spellId, color, icon, optionDefault, optionName, castTime, preWarnTime, _, noFilter) -- spellId, color, icon, optionDefault, optionName, castTime, preWarnTime, soundOption, noFilter\n\t\treturn newAnnounce(self, \"countdown\", spellId, color or 4, icon, optionDefault, optionName, castTime, preWarnTime, 0, noFilter)\n\tend\n\n\tfunction bossModPrototype:NewPreWarnAnnounce(spellId, time, color, icon, optionDefault, optionName, _, soundOption) -- spellId, time, color, icon, optionDefault, optionName, noArg, soundOption\n\t\treturn newAnnounce(self, \"prewarn\", spellId, color or 2, icon, optionDefault, optionName, nil, time, soundOption)\n\tend\n\n\tfunction bossModPrototype:NewBaitAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"bait\", spellId, color or 3, ...)\n\tend\n\n\tfunction bossModPrototype:NewPhaseAnnounce(stage, color, icon, ...)\n\t\treturn newAnnounce(self, \"stage\", stage, color or 2, icon or \"Interface\\\\Icons\\\\Spell_Shadow_ShadesOfDarkness\", ...)\n\tend\n\n\tfunction bossModPrototype:NewPhaseChangeAnnounce(color, icon, ...)\n\t\treturn newAnnounce(self, \"stagechange\", 0, color or 2, icon or \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\", ...)\n\tend\n\n\tfunction bossModPrototype:NewPrePhaseAnnounce(stage, color, icon, ...)\n\t\treturn newAnnounce(self, \"prestage\", stage, color or 2, icon or \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\", ...)\n\tend\n\n\tfunction bossModPrototype:NewMoveToAnnounce(spellId, color, ...)\n\t\treturn newAnnounce(self, \"moveto\", spellId, color or 3, ...)\n\tend\nend\n\n--------------------\n--  Sound Object  --\n--------------------\ndo\n\tlocal soundPrototype = {}\n\tlocal mt = { __index = soundPrototype }\n\tfunction bossModPrototype:NewSound(spellId, optionName, optionDefault)\n\t\tself.numSounds = self.numSounds and self.numSounds + 1 or 1\n\t\tlocal obj = setmetatable(\n\t\t\t{\n\t\t\t\tmod = self,\n\t\t\t},\n\t\t\tmt\n\t\t)\n\t\tif optionName then\n\t\t\tobj.option = optionName\n\t\t\tself:AddBoolOption(obj.option, optionDefault, \"sound\", nil, nil, nil, spellId)\n\t\telseif optionName ~= false then\n\t\t\tobj.option = \"Sound\"..spellId\n\t\t\tself:AddBoolOption(obj.option, optionDefault, \"sound\", nil, nil, nil, spellId)\n\t\t\tself.localization.options[obj.option] = L.AUTO_SOUND_OPTION_TEXT:format(spellId)\n\t\tend\n\t\treturn obj\n\tend\n\tbossModPrototype.NewRunAwaySound = bossModPrototype.NewSound\n\n\tfunction soundPrototype:Play(file)\n\t\tif not self.option or self.mod.Options[self.option] then\n\t\t\tPlaySoundFile(file or \"Sound\\\\Creature\\\\HoodWolf\\\\HoodWolfTransformPlayer01.wav\", \"Master\")\n\t\tend\n\tend\n\n\tfunction soundPrototype:Schedule(t, ...)\n\t\treturn DBMScheduler:Schedule(t, self.Play, self.mod, self, ...)\n\tend\n\n\tfunction soundPrototype:Cancel(...)\n\t\treturn DBMScheduler:Unschedule(self.Play, self.mod, self, ...)\n\tend\nend\n\ndo\n\tlocal soundPrototype5 = {}\n\tlocal mt = { __index = soundPrototype5 }\n\tfunction bossModPrototype:NewSound5(spellId, optionName, optionDefault)\n\t\tself.numSounds = self.numSounds and self.numSounds + 1 or 1\n\t\tlocal obj = setmetatable(\n\t\t\t{\n\t\t\t\tmod = self,\n\t\t\t},\n\t\t\tmt\n\t\t)\n\t\tif optionName then\n\t\t\tobj.option = optionName\n\t\t\tself:AddBoolOption(obj.option, optionDefault, \"sound\", nil, nil, nil, spellId)\n\t\telseif optionName ~= false then\n\t\t\tobj.option = \"Sound\"..spellId..\"in5\"\n\t\t\tself:AddBoolOption(obj.option, optionDefault, \"sound\", nil, nil, nil, spellId)\n\t\t\tself.localization.options[obj.option] = L.AUTO_SOUND_OPTION_TEXT5:format(spellId)\n\t\tend\n\t\treturn obj\n\tend\n\n\tfunction soundPrototype5:Play(file)\n\t\tif not self.option or self.mod.Options[self.option] then\n\t\t\tPlaySoundFile(file or \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\5to1.mp3\", \"Master\")\n\t\tend\n\tend\n\n\tfunction soundPrototype5:Schedule(t, ...)\n\t\treturn DBMScheduler:Schedule(t, self.Play, self.mod, self, ...)\n\tend\n\n\tfunction soundPrototype5:Cancel(...)\n\t\treturn DBMScheduler:Unschedule(self.Play, self.mod, self, ...)\n\tend\nend\n\ndo\n\tlocal soundPrototype3 = {}\n\tlocal mt = { __index = soundPrototype3 }\n\tfunction bossModPrototype:NewSound3(spellId, optionName, optionDefault)\n\t\tself.numSounds = self.numSounds and self.numSounds + 1 or 1\n\t\tlocal obj = setmetatable(\n\t\t\t{\n\t\t\t\tmod = self,\n\t\t\t},\n\t\t\tmt\n\t\t)\n\t\tif optionName then\n\t\t\tobj.option = optionName\n\t\t\tself:AddBoolOption(obj.option, optionDefault, \"sound\", nil, nil, nil, spellId)\n\t\telseif optionName ~= false then\n\t\t\tobj.option = \"Sound\"..spellId..\"in3\"\n\t\t\tself:AddBoolOption(obj.option, optionDefault, \"sound\", nil, nil, nil, spellId)\n\t\t\tself.localization.options[obj.option] = L.AUTO_SOUND_OPTION_TEXT3:format(spellId)\n\t\tend\n\t\treturn obj\n\tend\n\n\tfunction soundPrototype3:Play(file)\n\t\tif not self.option or self.mod.Options[self.option] then\n\t\t\tPlaySoundFile(file or \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\3to1.mp3\", \"Master\")\n\t\tend\n\tend\n\n\tfunction soundPrototype3:Schedule(t, ...)\n\t\treturn DBMScheduler:Schedule(t, self.Play, self.mod, self, ...)\n\tend\n\n\tfunction soundPrototype3:Cancel(...)\n\t\treturn DBMScheduler:Unschedule(self.Play, self.mod, self, ...)\n\tend\nend\n\ndo\n\tlocal soundPrototypeYou = {}\n\tlocal mt = { __index = soundPrototypeYou }\n\tfunction bossModPrototype:NewSoundYou(spellId, optionName, optionDefault)\n\t\tself.numSounds = self.numSounds and self.numSounds + 1 or 1\n\t\tlocal obj = setmetatable(\n\t\t\t{\n\t\t\t\tmod = self,\n\t\t\t},\n\t\t\tmt\n\t\t)\n\t\tif optionName then\n\t\t\tobj.option = optionName\n\t\t\tself:AddBoolOption(obj.option, optionDefault, \"sound\", nil, nil, nil, spellId)\n\t\telseif optionName ~= false then\n\t\t\tobj.option = \"Sound\"..spellId..\"you\"\n\t\t\tself:AddBoolOption(obj.option, optionDefault, \"sound\", nil, nil, nil, spellId)\n\t\t\tself.localization.options[obj.option] = L.AUTO_SOUND_OPTION_TEXT_YOU:format(spellId)\n\t\tend\n\t\treturn obj\n\tend\n\n\tfunction soundPrototypeYou:Play(file)\n\t\tif not self.option or self.mod.Options[self.option] then\n\t\t\tPlaySoundFile(file or \"Sound\\\\Creature\\\\HoodWolf\\\\HoodWolfTransformPlayer01.wav\", \"Master\")\n\t\tend\n\tend\n\n\tfunction soundPrototypeYou:Schedule(t, ...)\n\t\treturn DBMScheduler:Schedule(t, self.Play, self.mod, self, ...)\n\tend\n\n\tfunction soundPrototypeYou:Cancel(...)\n\t\treturn DBMScheduler:Unschedule(self.Play, self.mod, self, ...)\n\tend\nend\n\ndo\n\tlocal soundPrototypeSoon = {}\n\tlocal mt = { __index = soundPrototypeSoon }\n\tfunction bossModPrototype:NewSoundSoon(spellId, optionName, optionDefault)\n\t\tself.numSounds = self.numSounds and self.numSounds + 1 or 1\n\t\tlocal obj = setmetatable(\n\t\t\t{\n\t\t\t\tmod = self,\n\t\t\t},\n\t\t\tmt\n\t\t)\n\t\tif optionName then\n\t\t\tobj.option = optionName\n\t\t\tself:AddBoolOption(obj.option, optionDefault, \"sound\", nil, nil, nil, spellId)\n\t\telseif optionName ~= false then\n\t\t\tobj.option = \"Sound\"..spellId..\"soon\"\n\t\t\tself:AddBoolOption(obj.option, optionDefault, \"sound\", nil, nil, nil, spellId)\n\t\t\tself.localization.options[obj.option] = L.AUTO_SOUND_OPTION_TEXT_SOON:format(spellId)\n\t\tend\t\treturn obj\n\tend\n\n\tfunction soundPrototypeSoon:Play(file)\n\t\tif not self.option or self.mod.Options[self.option] then\n\t\t\tPlaySoundFile(file or \"Sound\\\\Creature\\\\HoodWolf\\\\HoodWolfTransformPlayer01.wav\", \"Master\")\n\t\tend\n\tend\n\n\tfunction soundPrototypeSoon:Schedule(t, ...)\n\t\treturn DBMScheduler:Schedule(t, self.Play, self.mod, self, ...)\n\tend\n\n\tfunction soundPrototypeSoon:Cancel(...)\n\t\treturn DBMScheduler:Unschedule(self.Play, self.mod, self, ...)\n\tend\nend\n\ndo\n\tlocal soundPrototypeClose = {}\n\tlocal mt = { __index = soundPrototypeClose }\n\tfunction bossModPrototype:NewSoundClose(spellId, optionName, optionDefault)\n\t\tself.numSounds = self.numSounds and self.numSounds + 1 or 1\n\t\tlocal obj = setmetatable(\n\t\t\t{\n\t\t\t\tmod = self,\n\t\t\t},\n\t\t\tmt\n\t\t)\n\t\tif optionName then\n\t\t\tobj.option = optionName\n\t\t\tself:AddBoolOption(obj.option, optionDefault, \"sound\", nil, nil, nil, spellId)\n\t\telseif optionName ~= false then\n\t\t\tobj.option = \"Sound\"..spellId..\"close\"\n\t\t\tself:AddBoolOption(obj.option, optionDefault, \"sound\", nil, nil, nil, spellId)\n\t\t\tself.localization.options[obj.option] = L.AUTO_SOUND_OPTION_TEXT_CLOSE:format(spellId)\n\t\tend\n\t\treturn obj\n\tend\n\n\tfunction soundPrototypeClose:Play(file)\n\t\tif not self.option or self.mod.Options[self.option] then\n\t\t\tPlaySoundFile(file or \"Sound\\\\Creature\\\\HoodWolf\\\\HoodWolfTransformPlayer01.wav\", \"Master\")\n\t\tend\n\tend\n\n\tfunction soundPrototypeClose:Schedule(t, ...)\n\t\treturn DBMScheduler:Schedule(t, self.Play, self.mod, self, ...)\n\tend\n\n\tfunction soundPrototypeClose:Cancel(...)\n\t\treturn DBMScheduler:Unschedule(self.Play, self.mod, self, ...)\n\tend\nend\n\n--------------------\n--  Yell Object  --\n--------------------\ndo\n\tlocal demonForm = GetSpellInfo(47241)\n\tlocal yellPrototype = {}\n\tlocal mt = { __index = yellPrototype }\n\tlocal function newYell(self, yellType, spellId, yellText, optionDefault, optionName, chatType)\n\t\tif not spellId and not yellText then\n\t\t\terror(\"NewYell: you must provide either spellId or yellText\", 2)\n\t\t\treturn\n\t\tend\n\t\tlocal optionVersion\n\t\tif type(optionName) == \"number\" then\n\t\t\toptionVersion = optionName\n\t\t\toptionName = nil\n\t\tend\n\t\tlocal displayText\n\t\tif not yellText then\n\t\t\tdisplayText = L.AUTO_YELL_ANNOUNCE_TEXT[yellType]:format(DBM:GetSpellInfo(spellId) or CL.UNKNOWN)\n\t\tend\n\t\t--Passed spellid as yellText.\n\t\t--Auto localize spelltext using yellText instead\n\t\tif yellText and type(yellText) == \"number\" then\n\t\t\tdisplayText = L.AUTO_YELL_ANNOUNCE_TEXT[yellType]:format(DBM:GetSpellInfo(yellText) or CL.UNKNOWN)\n\t\tend\n\t\tlocal obj = setmetatable(\n\t\t\t{\n\t\t\t\tspellId = spellId,\n\t\t\t\ttext = displayText or yellText,\n\t\t\t\tmod = self,\n\t\t\t\tchatType = chatType,\n\t\t\t\tyellType = yellType\n\t\t\t},\n\t\t\tmt\n\t\t)\n\t\tif optionName then\n\t\t\tobj.option = optionName\n\t\t\tself:AddBoolOption(obj.option, optionDefault, \"yell\", nil, nil, nil, spellId, yellType)\n\t\telseif optionName ~= false then\n\t\t\tobj.option = \"Yell\"..(spellId or yellText)..(yellType ~= \"yell\" and yellType or \"\")..(optionVersion or \"\")\n\t\t\tself:AddBoolOption(obj.option, optionDefault, \"yell\", nil, nil, nil, spellId, yellType)\n\t\t\tself.localization.options[obj.option] = L.AUTO_YELL_OPTION_TEXT[yellType]:format(spellId)\n\t\tend\n\t\treturn obj\n\tend\n\n\t--Standard \"Yell\" object that will use SAY/YELL based on what's defined in the object (Defaulting to SAY if nil)\n\t--I realize object being :Yell is counter intuitive to default being \"SAY\" but for many years the default was YELL and it's too many years of mods to change now\n\tfunction yellPrototype:Yell(...)\n\t\tif DBM.Options.DontSendYells or private.chatBubblesDisabled or self.yellType and self.yellType == \"position\" and DBM:UnitBuff(\"player\", demonForm) and DBM.Options.FilterVoidFormSay then return end\n\t\tif not self.option or self.mod.Options[self.option] then\n\t\t\tif self.yellType == \"combo\" then\n\t\t\t\tSendChatMessage(pformat(self.text, ...), self.chatType or \"YELL\")\n\t\t\telse\n\t\t\t\tSendChatMessage(pformat(self.text, ...), self.chatType or \"SAY\")\n\t\t\tend\n\t\tend\n\tend\n\tyellPrototype.Show = yellPrototype.Yell\n\n\t--Force override to use say message, even when object defines \"YELL\"\n\tfunction yellPrototype:Say(...)\n\t\tif DBM.Options.DontSendYells or private.chatBubblesDisabled or self.yellType and self.yellType == \"position\" and DBM:UnitBuff(\"player\", demonForm) and DBM.Options.FilterVoidFormSay then return end\n\t\tif not self.option or self.mod.Options[self.option] then\n\t\t\tSendChatMessage(pformat(self.text, ...), \"SAY\")\n\t\tend\n\tend\n\n\tfunction yellPrototype:Schedule(t, ...)\n\t\treturn DBMScheduler:Schedule(t, self.Yell, self.mod, self, ...)\n\tend\n\n\t--Standard schedule object to schedule a say/yell based on what's defined in object\n\tfunction yellPrototype:Countdown(time, numAnnounces, ...)\n\t\tif time > 60 then--It's a spellID not a time\n\t\t\tlocal _, _, _, _, _, _, expireTime = DBM:UnitDebuff(\"player\", time)\n\t\t\tif expireTime then\n\t\t\t\tlocal remaining = expireTime-GetTime()\n\t\t\t\tDBMScheduler:ScheduleCountdown(remaining, numAnnounces, self.Yell, self.mod, self, ...)\n\t\t\tend\n\t\telse\n\t\t\tDBMScheduler:ScheduleCountdown(time, numAnnounces, self.Yell, self.mod, self, ...)\n\t\tend\n\tend\n\n\t--Scheduled Force override to use SAY message, even when object defines \"YELL\"\n\tfunction yellPrototype:CountdownSay(time, numAnnounces, ...)\n\t\tif time > 60 then--It's a spellID not a time\n\t\t\tlocal _, _, _, _, _, _, expireTime = DBM:UnitDebuff(\"player\", time)\n\t\t\tif expireTime then\n\t\t\t\tlocal remaining = expireTime-GetTime()\n\t\t\t\tDBMScheduler:ScheduleCountdown(remaining, numAnnounces, self.Say, self.mod, self, ...)\n\t\t\tend\n\t\telse\n\t\t\tDBMScheduler:ScheduleCountdown(time, numAnnounces, self.Say, self.mod, self, ...)\n\t\tend\n\tend\n\n\tfunction yellPrototype:Cancel(...)\n\t\treturn DBMScheduler:Unschedule(self.Yell, self.mod, self, ...)\n\tend\n\n\tfunction bossModPrototype:NewYell(...)\n\t\treturn newYell(self, \"yell\", ...)\n\tend\n\n\tfunction bossModPrototype:NewYellMe(...)\n\t\treturn newYell(self, \"yellme\", ...)\n\tend\n\n\tfunction bossModPrototype:NewShortYell(...)\n\t\treturn newYell(self, \"shortyell\", ...)\n\tend\n\n\tfunction bossModPrototype:NewCountYell(...)\n\t\treturn newYell(self, \"count\", ...)\n\tend\n\n\tfunction bossModPrototype:NewFadesYell(...)\n\t\treturn newYell(self, \"fade\", ...)\n\tend\n\n\tfunction bossModPrototype:NewShortFadesYell(...)\n\t\treturn newYell(self, \"shortfade\", ...)\n\tend\n\n\tfunction bossModPrototype:NewIconFadesYell(...)\n\t\treturn newYell(self, \"iconfade\", ...)\n\tend\n\n\tfunction bossModPrototype:NewPosYell(...)\n\t\treturn newYell(self, \"position\", ...)\n\tend\n\n\tfunction bossModPrototype:NewShortPosYell(...)\n\t\treturn newYell(self, \"shortposition\", ...)\n\tend\n\n\tfunction bossModPrototype:NewComboYell(...)\n\t\treturn newYell(self, \"combo\", ...)\n\tend\n\n\tfunction bossModPrototype:NewPlayerRepeatYell(...)\n\t\treturn newYell(self, \"repeatplayer\", ...)\n\tend\n\n\tfunction bossModPrototype:NewIconRepeatYell(...)\n\t\treturn newYell(self, \"repeaticon\", ...)\n\tend\nend\n\n------------------------------\n--  Special Warning Object  --\n------------------------------\ndo\n\tlocal frame = CreateFrame(\"Frame\", \"DBMSpecialWarning\", UIParent)\n\tlocal font1 = frame:CreateFontString(\"DBMSpecialWarning1\", \"OVERLAY\", \"ZoneTextFont\")\n\tfont1:SetWidth(1024)\n\tfont1:SetHeight(0)\n\tfont1:SetPoint(\"TOP\", 0, 0)\n\tlocal font2 = frame:CreateFontString(\"DBMSpecialWarning2\", \"OVERLAY\", \"ZoneTextFont\")\n\tfont2:SetWidth(1024)\n\tfont2:SetHeight(0)\n\tfont2:SetPoint(\"TOP\", font1, \"BOTTOM\", 0, 0)\n\tframe:SetMovable(1)\n\tframe:SetWidth(1)\n\tframe:SetHeight(1)\n\tframe:SetFrameStrata(\"HIGH\")\n\tframe:SetClampedToScreen()\n\tframe:SetPoint(\"CENTER\", UIParent, \"CENTER\", 0, 0)\n\n\tlocal font1elapsed, font2elapsed, moving\n\n\tlocal function fontHide1()\n\t\tlocal duration = DBM.Options.SpecialWarningDuration2\n\t\tif font1elapsed > duration * 1.3 then\n\t\t\tfont1:Hide()\n\t\t\tif frame.font1ticker then\n\t\t\t\tAceTimer:CancelTimer(frame.font1ticker)\n\t\t\t\tframe.font1ticker = nil\n\t\t\tend\n\t\telseif font1elapsed > duration then\n\t\t\tfont1elapsed = font1elapsed + 0.05\n\t\t\tlocal alpha = 1 - (font1elapsed - duration) / (duration * 0.3)\n\t\t\tfont1:SetAlpha(alpha > 0 and alpha or 0)\n\t\telse\n\t\t\tfont1elapsed = font1elapsed + 0.05\n\t\t\tfont1:SetAlpha(1)\n\t\tend\n\tend\n\n\tlocal function fontHide2()\n\t\tlocal duration = DBM.Options.SpecialWarningDuration2\n\t\tif font2elapsed > duration * 1.3 then\n\t\t\tfont2:Hide()\n\t\t\tif frame.font2ticker then\n\t\t\t\tAceTimer:CancelTimer(frame.font2ticker)\n\t\t\t\tframe.font2ticker = nil\n\t\t\tend\n\t\telseif font2elapsed > duration then\n\t\t\tfont2elapsed = font2elapsed + 0.05\n\t\t\tlocal alpha = 1 - (font2elapsed - duration) / (duration * 0.3)\n\t\t\tfont2:SetAlpha(alpha > 0 and alpha or 0)\n\t\telse\n\t\t\tfont2elapsed = font2elapsed + 0.05\n\t\t\tfont2:SetAlpha(1)\n\t\tend\n\tend\n\n\tfunction DBM:UpdateSpecialWarningOptions()\n\t\tframe:ClearAllPoints()\n\t\tlocal font = self.Options.SpecialWarningFont == \"standardFont\" and standardFont or self.Options.SpecialWarningFont\n\t\tframe:SetPoint(self.Options.SpecialWarningPoint, UIParent, self.Options.SpecialWarningPoint, self.Options.SpecialWarningX, self.Options.SpecialWarningY)\n\t\tfont1:SetFont(font, self.Options.SpecialWarningFontSize2, self.Options.SpecialWarningFontStyle == \"None\" and nil or self.Options.SpecialWarningFontStyle)\n\t\tfont2:SetFont(font, self.Options.SpecialWarningFontSize2, self.Options.SpecialWarningFontStyle == \"None\" and nil or self.Options.SpecialWarningFontStyle)\n\t\tfont1:SetTextColor(unpack(self.Options.SpecialWarningFontCol))\n\t\tfont2:SetTextColor(unpack(self.Options.SpecialWarningFontCol))\n\t\tif self.Options.SpecialWarningFontShadow then\n\t\t\tfont1:SetShadowOffset(1, -1)\n\t\t\tfont2:SetShadowOffset(1, -1)\n\t\telse\n\t\t\tfont1:SetShadowOffset(0, 0)\n\t\t\tfont2:SetShadowOffset(0, 0)\n\t\tend\n\tend\n\n\tfunction DBM:AddSpecialWarning(text, force)\n\t\tlocal added = false\n\t\tif not frame.font1ticker then\n\t\t\tfont1elapsed = 0\n\t\t\tfont1.lastUpdate = GetTime()\n\t\t\tfont1:SetText(text)\n\t\t\tfont1:Show()\n\t\t\tadded = true\n\t\t\tframe.font1ticker = frame.font1ticker or AceTimer:ScheduleRepeatingTimer(fontHide1, 0.05)\n\t\telseif not frame.font2ticker or force then\n\t\t\tfont2elapsed = 0\n\t\t\tfont2.lastUpdate = GetTime()\n\t\t\tfont2:SetText(text)\n\t\t\tfont2:Show()\n\t\t\tadded = true\n\t\t\tframe.font2ticker = frame.font2ticker or AceTimer:ScheduleRepeatingTimer(fontHide2, 0.05)\n\t\tend\n\t\tif not added then\n\t\t\tlocal prevText1 = font2:GetText()\n\t\t\tfont1:SetText(prevText1)\n\t\t\tfont1elapsed = font2elapsed\n\t\t\tself:AddSpecialWarning(text, true)\n\t\tend\n\tend\n\n\tdo\n\t\tlocal anchorFrame\n\t\tlocal function moveEnd(self)\n\t\t\tmoving = false\n\t\t\tanchorFrame:Hide()\n\t\t\tfont1elapsed = self.Options.SpecialWarningDuration2\n\t\t\tfont2elapsed = self.Options.SpecialWarningDuration2\n\t\t\tframe:SetFrameStrata(\"HIGH\")\n\t\t\tself:Unschedule(moveEnd)\n\t\t\tDBT:CancelBar(L.MOVE_SPECIAL_WARNING_BAR)\n\t\tend\n\n\t\tfunction DBM:MoveSpecialWarning()\n\t\t\tif not anchorFrame then\n\t\t\t\tanchorFrame = CreateFrame(\"Frame\", nil, frame)\n\t\t\t\tanchorFrame:SetWidth(32)\n\t\t\t\tanchorFrame:SetHeight(32)\n\t\t\t\tanchorFrame:EnableMouse(true)\n\t\t\t\tanchorFrame:SetPoint(\"TOP\", frame, \"TOP\", 0, 32)\n\t\t\t\tanchorFrame:RegisterForDrag(\"LeftButton\")\n\t\t\t\tanchorFrame:SetClampedToScreen()\n\t\t\t\tanchorFrame:Hide()\n\t\t\t\tlocal texture = anchorFrame:CreateTexture()\n\t\t\t\ttexture:SetTexture(\"Interface\\\\Addons\\\\DBM-Core\\\\textures\\\\dot.blp\")\n\t\t\t\ttexture:SetPoint(\"CENTER\", anchorFrame, \"CENTER\", 0, 0)\n\t\t\t\ttexture:SetWidth(32)\n\t\t\t\ttexture:SetHeight(32)\n\t\t\t\tanchorFrame:SetScript(\"OnDragStart\", function()\n\t\t\t\t\tframe:StartMoving()\n\t\t\t\t\tself:Unschedule(moveEnd)\n\t\t\t\t\tDBT:CancelBar(L.MOVE_SPECIAL_WARNING_BAR)\n\t\t\t\tend)\n\t\t\t\tanchorFrame:SetScript(\"OnDragStop\", function()\n\t\t\t\t\tframe:StopMovingOrSizing()\n\t\t\t\t\tlocal point, _, _, xOfs, yOfs = frame:GetPoint(1)\n\t\t\t\t\tself.Options.SpecialWarningPoint = point\n\t\t\t\t\tself.Options.SpecialWarningX = xOfs\n\t\t\t\t\tself.Options.SpecialWarningY = yOfs\n\t\t\t\t\tself:Schedule(15, moveEnd, self)\n\t\t\t\t\tDBT:CreateBar(15, L.MOVE_SPECIAL_WARNING_BAR, \"Interface\\\\Icons\\\\Spell_Holy_BorrowedTime\")\n\t\t\t\tend)\n\t\t\tend\n\t\t\tif anchorFrame:IsShown() then\n\t\t\t\tmoveEnd(self)\n\t\t\telse\n\t\t\t\tmoving = true\n\t\t\t\tanchorFrame:Show()\n\t\t\t\tself:AddSpecialWarning(L.MOVE_SPECIAL_WARNING_TEXT)\n\t\t\t\tself:AddSpecialWarning(L.MOVE_SPECIAL_WARNING_TEXT)\n\t\t\t\tself:Schedule(15, moveEnd, self)\n\t\t\t\tDBT:CreateBar(15, L.MOVE_SPECIAL_WARNING_BAR, \"Interface\\\\Icons\\\\Spell_Holy_BorrowedTime\")\n\t\t\t\tframe:Show()\n\t\t\t\tframe:SetFrameStrata(\"TOOLTIP\")\n\t\t\t\tframe:SetAlpha(1)\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal specialWarningPrototype = {}\n\tlocal mt = {__index = specialWarningPrototype}\n\n\tlocal function classColoringFunction(cap)\n\t\tcap = cap:sub(2, -2)\n\t\tlocal noStrip = cap:match(\"noStrip \")\n\t\tif not noStrip then\n\t\t\tlocal name = cap\n\t\t\tlocal playerClass, playerIcon = DBM:GetRaidClass(name)\n\t\t\tif playerClass ~= \"UNKNOWN\" then\n\t\t\t\tcap = DBM:GetShortServerName(cap)--Only run strip code on valid player classes\n\t\t\t\tif DBM.Options.SWarnClassColor then\n\t\t\t\t\tlocal playerColor = RAID_CLASS_COLORS[playerClass]\n\t\t\t\t\tif playerColor then\n\t\t\t\t\t\tif playerIcon > 0 and playerIcon <= 8 then\n\t\t\t\t\t\t\tcap = (\"|TInterface\\\\TargetingFrame\\\\UI-RaidTargetingIcon_%d:0|t\"):format(playerIcon) .. (\"|r|cff%.2x%.2x%.2x%s|r|cff%.2x%.2x%.2x\"):format(playerColor.r * 255, playerColor.g * 255, playerColor.b * 255, cap, DBM.Options.SpecialWarningFontCol[1] * 255, DBM.Options.SpecialWarningFontCol[2] * 255, DBM.Options.SpecialWarningFontCol[3] * 255)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tcap = (\"|r|cff%.2x%.2x%.2x%s|r|cff%.2x%.2x%.2x\"):format(playerColor.r * 255, playerColor.g * 255, playerColor.b * 255, cap, DBM.Options.SpecialWarningFontCol[1] * 255, DBM.Options.SpecialWarningFontCol[2] * 255, DBM.Options.SpecialWarningFontCol[3] * 255)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\tcap = cap:sub(9)\n\t\tend\n\t\treturn cap\n\tend\n\n\tlocal textureCode = \" |T%s:12:12|t \"\n\n\tlocal specInstructionalRemapTable = {\n\t\t[\"dispel\"] = \"target\",\n\t\t[\"interrupt\"] = \"spell\",\n\t\t[\"interruptcount\"] = \"count\",\n\t\t[\"defensive\"] = \"spell\",\n\t\t[\"taunt\"] = \"target\",\n\t\t[\"soak\"] = \"spell\",\n\t\t[\"soakcount\"] = \"count\",\n\t\t[\"soakpos\"] = \"spell\",\n\t\t[\"switch\"] = \"spell\",\n\t\t[\"switchcount\"] = \"count\",\n--\t\t[\"adds\"] = \"spell\",\n--\t\t[\"addscount\"] = \"spell\",\n--\t\t[\"addscustom\"] = \"spell\",\n\t\t[\"targetchange\"] = \"target\",\n\t\t[\"gtfo\"] = \"spell\",\n\t\t[\"bait\"] = \"soon\",\n\t\t[\"youpos\"] = \"you\",\n\t\t[\"youposcount\"] = \"youcount\",\n\t\t[\"move\"] = \"spell\",\n\t\t[\"keepmove\"] = \"spell\",\n\t\t[\"stopmove\"] = \"spell\",\n\t\t[\"dodge\"] = \"spell\",\n\t\t[\"dodgecount\"] = \"count\",\n\t\t[\"dodgeloc\"] = \"spell\",\n\t\t[\"moveaway\"] = \"spell\",\n\t\t[\"moveawaycount\"] = \"count\",\n\t\t[\"moveto\"] = \"spell\",\n\t\t[\"jump\"] = \"spell\",\n\t\t[\"run\"] = \"spell\",\n\t\t[\"runcount\"] = \"spell\",\n\t\t[\"cast\"] = \"spell\",\n\t\t[\"lookaway\"] = \"spell\",\n\t\t[\"reflect\"] = \"target\",\n\t}\n\n\tlocal function setText(announceType, spellId, stacks, customName)\n\t\tlocal text, spellName\n\t\tif customName then\n\t\t\tspellName = customName\n\t\telse\n\t\t\tspellName = (spellId or 0) >= 6 and DBM:GetSpellInfo(spellId) or CL.UNKNOWN\n\t\tend\n\t\tif announceType == \"prewarn\" then\n\t\t\tif type(stacks) == \"string\" then\n\t\t\t\ttext = L.AUTO_SPEC_WARN_TEXTS[announceType]:format(spellName, stacks)\n\t\t\telse\n\t\t\t\ttext = L.AUTO_SPEC_WARN_TEXTS[announceType]:format(spellName, L.SEC_FMT:format(tostring(stacks or 5)))\n\t\t\tend\n\t\telse\n\t\t\tif DBM.Options.SpamSpecInformationalOnly and specInstructionalRemapTable[announceType] then\n\t\t\t\tlocal newType = specInstructionalRemapTable[announceType]\n\t\t\t\ttext = L.AUTO_SPEC_WARN_TEXTS[newType]:format(spellName)\n\t\t\telse\n\t\t\t\ttext = L.AUTO_SPEC_WARN_TEXTS[announceType]:format(spellName)\n\t\t\tend\n\t\tend\n\t\treturn text, spellName\n\tend\n\n\tfunction specialWarningPrototype:SetText(customName)\n\t\tlocal text, spellName = setText(self.announceType, self.spellId, self.stacks, customName)\n\t\tself.text = text\n\t\tself.spellName = spellName\n\tend\n\n\tlocal function canVoiceReplace(self, soundId)\n\t\tsoundId = soundId or self.option and self.mod.Options[self.option .. \"SWSound\"] or self.flash\n\t\tlocal isVoicePackUsed\n\t\tif self.announceType == \"gtfo\" then\n\t\t\tisVoicePackUsed = DBM.Options.VPReplacesGTFO\n\t\telseif type(soundId) == \"number\" then\n\t\t\tisVoicePackUsed = DBM.Options[\"VPReplacesSA\"..soundId]\n\t\telse\n\t\t\tisVoicePackUsed = DBM.Options.VPReplacesCustom\n\t\tend\n\t\treturn isVoicePackUsed\n\tend\n\n\tlocal specTypeFilterTable = {\n\t\t[\"dispel\"] = \"dispel\",\n\t\t[\"interrupt\"] = \"interrupt\",\n\t\t[\"interruptcount\"] = \"interrupt\",\n\t\t[\"defensive\"] = \"defensive\",\n\t\t[\"taunt\"] = \"taunt\",\n\t\t[\"soak\"] = \"soak\",\n\t\t[\"soakcount\"] = \"soak\",\n\t\t[\"soakpos\"] = \"soak\",\n\t\t[\"stack\"] = \"stack\",\n\t\t[\"switch\"] = \"switch\",\n\t\t[\"switchcount\"] = \"switch\",\n\t\t[\"adds\"] = \"switch\",\n\t\t[\"addscount\"] = \"switch\",\n\t\t[\"addscustom\"] = \"switch\",\n\t\t[\"targetchange\"] = \"switch\",\n\t\t[\"gtfo\"] = \"gtfo\",\n\t}\n\n\tfunction specialWarningPrototype:Show(...)\n\t\t--Check if option for this warning is even enabled\n\t\tif (not self.option or self.mod.Options[self.option]) and not moving and frame then\n\t\t\t--Now, check if all special warning filters are enabled to save cpu and abort immediately if true.\n\t\t\tif DBM.Options.DontPlaySpecialWarningSound and DBM.Options.DontShowSpecialWarningFlash and DBM.Options.DontShowSpecialWarningText then return end\n\t\t\t--Next, we check if trash mod warning and if so check the filter trash warning filter for trivial difficulties\n\t\t\tif self.mod.isTrashMod and DBM.Options.FilterTrashWarnings2 and (self.mod:IsEasyDungeon() or DBM:IsTrivial()) then return end\n\t\t\t--We also check if person has the role filter turned on (typical for highest end raiders who don't want as much handholding from DBM)\n\t\t\tif specTypeFilterTable[self.announceType] then\n\t\t\t\tif DBM.Options[\"SpamSpecRole\"..specTypeFilterTable[self.announceType]] then return end\n\t\t\tend\n\t\t\t--Lastly, we check if it's a tank warning and filter if not in tank spec. This is done because tank warnings on by default and handled fluidly by spec, not option setting\n\t\t\tif self.announceType == \"taunt\" and DBM.Options.FilterTankSpec and not self.mod:IsTank() then return end--Don't tell non tanks to taunt, ever.\n\t\t\tlocal argTable = {...}\n\t\t\t-- add a default parameter for move away warnings\n\t\t\tif self.announceType == \"gtfo\" then\n\t\t\t\tif DBM:UnitBuff(\"player\", 27827) then return end--Don't tell a priest in spirit of redemption form to GTFO, they can't, and they don't take damage from it anyhow\n\t\t\t\tif #argTable == 0 then\n\t\t\t\t\targTable[1] = L.BAD\n\t\t\t\tend\n\t\t\tend\n\t\t\tif #self.combinedtext > 0 then\n\t\t\t\t--Throttle spam.\n\t\t\t\tif DBM.Options.SWarningAlphabetical then\n\t\t\t\t\ttsort(self.combinedtext)\n\t\t\t\tend\n\t\t\t\tlocal combinedText = tconcat(self.combinedtext, \"<, >\")\n\t\t\t\tif self.combinedcount == 1 then\n\t\t\t\t\tcombinedText = combinedText..\" \"..L.GENERIC_WARNING_OTHERS\n\t\t\t\telseif self.combinedcount > 1 then\n\t\t\t\t\tcombinedText = combinedText..\" \"..L.GENERIC_WARNING_OTHERS2:format(self.combinedcount)\n\t\t\t\tend\n\t\t\t\t--Process\n\t\t\t\tfor i = 1, #argTable do\n\t\t\t\t\tif type(argTable[i]) == \"string\" then\n\t\t\t\t\t\targTable[i] = combinedText\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tlocal message = pformat(self.text, unpack(argTable))\n\t\t\tlocal text = (\"%s%s%s\"):format(\n\t\t\t\t(DBM.Options.SpecialWarningIcon and self.icon and textureCode:format(self.icon)) or \"\",\n\t\t\t\tmessage,\n\t\t\t\t(DBM.Options.SpecialWarningIcon and self.icon and textureCode:format(self.icon)) or \"\"\n\t\t\t)\n\t\t\tlocal noteHasName = false\n\t\t\tif self.option then\n\t\t\t\tlocal noteText = self.mod.Options[self.option .. \"SWNote\"]\n\t\t\t\tif noteText and type(noteText) == \"string\" and noteText ~= \"\" then--Filter false bool and empty strings\n\t\t\t\t\tlocal count1 = self.announceType == \"count\" or self.announceType == \"switchcount\" or self.announceType == \"targetcount\"\n\t\t\t\t\tlocal count2 = self.announceType == \"interruptcount\"\n\t\t\t\t\tif count1 or count2 then--Counts support different note for EACH count\n\t\t\t\t\t\tlocal noteCount\n\t\t\t\t\t\tlocal notesTable = {string.split(\"/\", noteText)}\n\t\t\t\t\t\tif count1 then\n\t\t\t\t\t\t\tnoteCount = argTable[1]--Count should be first arg in table\n\t\t\t\t\t\telseif count2 then\n\t\t\t\t\t\t\tnoteCount = argTable[2]--Count should be second arg in table\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif type(noteCount) == \"string\" then\n\t\t\t\t\t\t\t--Probably a hypehnated double count like inferno slice or marked for death\n\t\t\t\t\t\t\tlocal mainCount = string.split(\"-\", noteCount)\n\t\t\t\t\t\t\tnoteCount = tonumber(mainCount)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tnoteText = notesTable[noteCount]\n\t\t\t\t\t\tif noteText and type(noteText) == \"string\" and noteText ~= \"\" then--Refilter after string split to make sure a note for this count exists\n\t\t\t\t\t\t\tlocal hasPlayerName = noteText:find(playerName)\n\t\t\t\t\t\t\tif DBM.Options.SWarnNameInNote and hasPlayerName then\n\t\t\t\t\t\t\t\tnoteHasName = 5\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t--Terminate special warning, it's an interrupt count warning without player name and filter enabled\n\t\t\t\t\t\t\tif count2 and DBM.Options.FilterInterruptNoteName and not hasPlayerName then return end\n\t\t\t\t\t\t\tnoteText = \" (\"..noteText..\")\"\n\t\t\t\t\t\t\ttext = text..noteText\n\t\t\t\t\t\tend\n\t\t\t\t\telse--Non count warnings will have one note, period\n\t\t\t\t\t\tif DBM.Options.SWarnNameInNote and noteText:find(playerName) then\n\t\t\t\t\t\t\tnoteHasName = 5\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif self.announceType and not self.announceType:find(\"switch\") then\n\t\t\t\t\t\t\tnoteText = noteText:gsub(\">.-<\", classColoringFunction)--Class color note text before combining with warning text.\n\t\t\t\t\t\tend\n\t\t\t\t\t\tnoteText = \" (\"..noteText..\")\"\n\t\t\t\t\t\ttext = text..noteText\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\t--Text is disabled, suresss text from screen and chat frame\n\t\t\tif not DBM.Options.DontShowSpecialWarningText then\n\t\t\t\t--No stripping on switch warnings, ever. They will NEVER have player name, but often have adds with \"-\" in name\n\t\t\t\tif self.announceType and not self.announceType:find(\"switch\") then\n\t\t\t\t\ttext = text:gsub(\">.-<\", classColoringFunction)\n\t\t\t\tend\n\t\t\t\tDBM:AddSpecialWarning(text)\n\t\t\t\tif DBM.Options.ShowSWarningsInChat then\n\t\t\t\t\tlocal colorCode = (\"|cff%.2x%.2x%.2x\"):format(DBM.Options.SpecialWarningFontCol[1] * 255, DBM.Options.SpecialWarningFontCol[2] * 255, DBM.Options.SpecialWarningFontCol[3] * 255)\n\t\t\t\t\tself.mod:AddMsg(colorCode..\"[\"..L.MOVE_SPECIAL_WARNING_TEXT..\"] \"..text..\"|r\", nil)\n\t\t\t\tend\n\t\t\tend\n\t\t\tself.combinedcount = 0\n\t\t\tself.combinedtext = {}\n\t\t\tif not UnitIsDeadOrGhost(\"player\") then\n\t\t\t\tif noteHasName then\n\t\t\t\t\tif not DBM.Options.DontShowSpecialWarningFlash and DBM.Options.SpecialWarningFlash5 then--Not included in above if statement on purpose. we don't want to trigger else rule if noteHasName is true but SpecialWarningFlash5 is false\n\t\t\t\t\t\tlocal repeatCount = DBM.Options.SpecialWarningFlashCount5 or 1\n\t\t\t\t\t\tDBM.Flash:Show(DBM.Options.SpecialWarningFlashCol5[1],DBM.Options.SpecialWarningFlashCol5[2], DBM.Options.SpecialWarningFlashCol5[3], DBM.Options.SpecialWarningFlashDura5, DBM.Options.SpecialWarningFlashAlph5, repeatCount-1)\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tlocal number = self.flash\n\t\t\t\t\tif not DBM.Options.DontShowSpecialWarningFlash and DBM.Options[\"SpecialWarningFlash\"..number] then\n\t\t\t\t\t\tlocal repeatCount = DBM.Options[\"SpecialWarningFlashCount\"..number] or 1\n\t\t\t\t\t\tlocal flashcolor = DBM.Options[\"SpecialWarningFlashCol\"..number]\n\t\t\t\t\t\tDBM.Flash:Show(flashcolor[1], flashcolor[2], flashcolor[3], DBM.Options[\"SpecialWarningFlashDura\"..number], DBM.Options[\"SpecialWarningFlashAlph\"..number], repeatCount-1)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\t--Text: Full message text\n\t\t\t--Icon: Texture path/id for icon\n\t\t\t--Type: Announce type\n\t\t\t----Types: spell, ends, fades, soon, bait, dispel, interrupt, interruptcount, you, youcount, youpos, soakpos, target, targetcount, defensive, taunt, close, move, keepmove, stopmove,\n\t\t\t----gtfo, dodge, dodgecount, dodgeloc, moveaway, moveawaycount, moveto, soak, jump, run, cast, lookaway, reflect, count, sooncount, stack, switch, switchcount, adds, addscount, addscustom, targetchange, prewarn\n\t\t\t------General Target Messages (but since it's a special warning, it applies to you in some way): target, targetcount\n\t\t\t------Fight Changes (Stages, adds, boss buff/debuff, etc): adds, addscount, addscustom, targetchange, switch, switchcount, ends\n\t\t\t------General (can really apply to anything): spell, count, soon, sooncount, prewarn\n\t\t\t------Personal/Role (Applies to you, or your job): Everything Else\n\t\t\t--SpellId: Raw spell or encounter journal Id if available.\n\t\t\t--Mod ID: Encounter ID as string, or a generic string for mods that don't have encounter ID (such as trash, dummy/test mods)\n\t\t\t--boolean: Whether or not this warning is a special warning (higher priority).\n\t\t\tfireEvent(\"DBM_Announce\", text, self.icon, self.type, self.spellId, self.mod.id, true)\n\t\t\tif self.sound and not DBM.Options.DontPlaySpecialWarningSound and (not self.option or self.mod.Options[self.option..\"SWSound\"] ~= \"None\") then\n\t\t\t\tlocal soundId = self.option and self.mod.Options[self.option .. \"SWSound\"] or self.flash\n\t\t\t\tif noteHasName and type(soundId) == \"number\" then soundId = noteHasName end--Change number to 5 if it's not a custom sound, else, do nothing with it\n\t\t\t\tif self.hasVoice and DBM.Options.ChosenVoicePack2 ~= \"None\" and not voiceSessionDisabled and not DBM.Options.VPDontMuteSounds and canVoiceReplace(self, soundId) and self.hasVoice <= SWFilterDisabled then return end\n\t\t\t\tDBM:PlaySpecialWarningSound(soundId or 1)\n\t\t\tend\n\t\telse\n\t\t\tself.combinedcount = 0\n\t\t\tself.combinedtext = {}\n\t\tend\n\tend\n\n\tfunction specialWarningPrototype:CombinedShow(delay, ...)\n\t\t--Check if option for this warning is even enabled\n\t\tif self.option and not self.mod.Options[self.option] then return end\n\t\t--Now, check if all special warning filters are enabled to save cpu and abort immediately if true.\n\t\tif DBM.Options.DontPlaySpecialWarningSound and DBM.Options.DontShowSpecialWarningFlash and DBM.Options.DontShowSpecialWarningText then return end\n\t\t--Next, we check if trash mod warning and if so check the filter trash warning filter for trivial difficulties\n\t\tif self.mod:IsEasyDungeon() and self.mod.isTrashMod and DBM.Options.FilterTrashWarnings2 then return end\n\t\tlocal argTable = {...}\n\t\tfor i = 1, #argTable do\n\t\t\tif type(argTable[i]) == \"string\" then\n\t\t\t\tif #self.combinedtext < 8 then--Throttle spam. We may not need more than 9 targets..\n\t\t\t\t\tif not checkEntry(self.combinedtext, argTable[i]) then\n\t\t\t\t\t\tself.combinedtext[#self.combinedtext + 1] = argTable[i]\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tself.combinedcount = self.combinedcount + 1\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tDBMScheduler:Unschedule(self.Show, self.mod, self)\n\t\tDBMScheduler:Schedule(delay or 0.5, self.Show, self.mod, self, ...)\n\tend\n\n\tfunction specialWarningPrototype:DelayedShow(delay, ...)\n\t\tDBMScheduler:Unschedule(self.Show, self.mod, self, ...)\n\t\tDBMScheduler:Schedule(delay or 0.5, self.Show, self.mod, self, ...)\n\tend\n\n\tfunction specialWarningPrototype:Schedule(t, ...)\n\t\treturn DBMScheduler:Schedule(t, self.Show, self.mod, self, ...)\n\tend\n\n\tfunction specialWarningPrototype:Countdown(time, numAnnounces, ...)\n\t\tDBMScheduler:ScheduleCountdown(time, numAnnounces, self.Show, self.mod, self, ...)\n\tend\n\n\tfunction specialWarningPrototype:Cancel(_, ...) -- t, ...\n\t\treturn DBMScheduler:Unschedule(self.Show, self.mod, self, ...)\n\tend\n\n\t--Several voice lines still need generic alternatives that don't feel \"instructional\"\n\tlocal specInstructionalRemapVoiceTable = {\n--\t\t[\"dispel\"] = \"target\",\n--\t\t[\"interrupt\"] = \"spell\",\n--\t\t[\"interruptcount\"] = \"count\",\n--\t\t[\"defensive\"] = \"spell\",\n\t\t[\"taunt\"] = \"changemt\",--Remaps sound to say a swap is happening, rather than telling you to taunt boss\n--\t\t[\"soak\"] = \"spell\",\n--\t\t[\"soakcount\"] = \"count\",\n--\t\t[\"soakpos\"] = \"spell\",\n--\t\t[\"switch\"] = \"spell\",\n--\t\t[\"switchcount\"] = \"count\",\n\t\t[\"adds\"] = \"mobsoon\",--Remaps sound to say mobs incoming only, not to kill them or cc them or anything else.\n\t\t[\"addscount\"] = \"mobsoon\",\n\t\t[\"addscustom\"] = \"mobsoon\",--Remaps sound to say mobs incoming only, not to kill them or cc them or anything else.\n--\t\t[\"targetchange\"] = \"target\",\n--\t\t[\"gtfo\"] = \"spell\",\n--\t\t[\"bait\"] = \"soon\",\n\t\t[\"you\"] = \"targetyou\",--Remaps personal alert to just say \"target you\", without instruction\n\t\t[\"youpos\"] = \"targetyou\",--Remaps personal alert to just say \"target you\", without instruction\n\t\t[\"youposcount\"] = \"targetyou\",--Remaps personal alert to just say \"target you\", without instruction\n--\t\t[\"move\"] = \"spell\",\n--\t\t[\"keepmove\"] = \"spell\",\n--\t\t[\"stopmove\"] = \"spell\",\n--\t\t[\"dodge\"] = \"spell\",\n--\t\t[\"dodgecount\"] = \"count\",\n--\t\t[\"dodgeloc\"] = \"spell\",\n\t\t[\"moveaway\"] = \"targetyou\",--Remaps personal alert to just say \"target you\", without instruction\n\t\t[\"moveawaycount\"] = \"targetyou\",--Remaps personal alert to just say \"target you\", without instruction\n--\t\t[\"moveto\"] = \"spell\",\n--\t\t[\"jump\"] = \"spell\",\n--\t\t[\"run\"] = \"spell\",\n--\t\t[\"runcount\"] = \"spell\",\n--\t\t[\"cast\"] = \"spell\",\n--\t\t[\"lookaway\"] = \"spell\",\n--\t\t[\"reflect\"] = \"target\",\n\t}\n\n\tfunction specialWarningPrototype:Play(name, customPath)\n\t\tlocal always = DBM.Options.AlwaysPlayVoice\n\t\tlocal voice = DBM.Options.ChosenVoicePack2\n\t\tlocal soundId = self.option and self.mod.Options[self.option .. \"SWSound\"] or self.flash\n\t\tif voiceSessionDisabled or voice == \"None\" or not canVoiceReplace(self, soundId) then return end\n\t\tif self.mod:IsEasyDungeon() and self.mod.isTrashMod and DBM.Options.FilterTrashWarnings2 then return end\n\t\tif specTypeFilterTable[self.announceType] then\n\t\t\t--Filtered warning, filtered voice\n\t\t\tif DBM.Options[\"SpamSpecRole\"..specTypeFilterTable[self.announceType]] then return end\n\t\telseif DBM.Options.SpamSpecInformationalOnly and specInstructionalRemapVoiceTable[self.announceType] then\n\t\t\t--Instructional disabled, remap to a less instructional voice line\n\t\t\tname = specInstructionalRemapVoiceTable[self.announceType]\n\t\tend\n\t\tif ((not self.option or self.mod.Options[self.option]) or always) and self.hasVoice <= SWFilterDisabled then\n\t\t\t--Filter tank specific voice alerts for non tanks if tank filter enabled\n\t\t\t--But still allow AlwaysPlayVoice to play as well.\n\t\t\tif (name == \"changemt\" or name == \"tauntboss\") and DBM.Options.FilterTankSpec and not self.mod:IsTank() and not always then return end\n\t\t\t--Mute VP if SW sound is set to None in the boss mod.\n\t\t\tif soundId == \"None\" then return end\n\t\t\tlocal path = customPath or \"Interface\\\\AddOns\\\\DBM-VP\"..voice..\"\\\\\"..name..\".ogg\"\n\t\t\tDBM:PlaySoundFile(path)\n\t\tend\n\tend\n\n\tfunction specialWarningPrototype:ScheduleVoice(t, ...)\n\t\tif voiceSessionDisabled or DBM.Options.ChosenVoicePack2 == \"None\" or not canVoiceReplace(self) then return end\n\t\tDBMScheduler:Unschedule(self.Play, self.mod, self)--Allow ScheduleVoice to be used in same way as CombinedShow\n\t\treturn DBMScheduler:Schedule(t, self.Play, self.mod, self, ...)\n\tend\n\n\t--Object Permits scheduling voice multiple times for same object\n\tfunction specialWarningPrototype:ScheduleVoiceOverLap(t, ...)\n\t\tif voiceSessionDisabled or DBM.Options.ChosenVoicePack2 == \"None\" or not canVoiceReplace(self) then return end\n\t\treturn DBMScheduler:Schedule(t, self.Play, self.mod, self, ...)\n\tend\n\n\tfunction specialWarningPrototype:CancelVoice(...)\n\t\tif voiceSessionDisabled or DBM.Options.ChosenVoicePack2 == \"None\" or not canVoiceReplace(self) then return end\n\t\treturn DBMScheduler:Unschedule(self.Play, self.mod, self, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarning(text, optionDefault, optionName, optionVersion, runSound, hasVoice, difficulty, texture, spellID)\n\t\tif not text then\n\t\t\terror(\"NewSpecialWarning: you must provide special warning text\", 2)\n\t\t\treturn\n\t\tend\n\t\tif type(text) == \"string\" and text:match(\"OptionVersion\") then\n\t\t\terror(\"NewSpecialWarning: you must provide remove optionversion hack for \"..optionDefault)\n\t\t\treturn\n\t\tend\n\t\tif runSound == true then\n\t\t\trunSound = 2\n\t\telseif not runSound then\n\t\t\trunSound = 1\n\t\tend\n\t\tif hasVoice == true then--if not a number, set it to 2, old mods that don't use new numbered system\n\t\t\thasVoice = 2\n\t\tend\n\t\tlocal seticon\n\t\tif texture then\n\t\t\tif type(texture) == \"string\" and texture:match(\"ej%d+\") then\n\t\t\t\tself:AddMsg(\"|cffff0000Invalid call to EJ_GetSectionInfo for texture: |r\"..texture..\". Please report this bug\")\n\t\t\tend\n\t\t\tseticon = type(texture) == \"number\" and GetSpellTexture(texture) or texture\n\t\tend\n\t\tlocal obj = setmetatable(\n\t\t\t{\n\t\t\t\ttext = self.localization.warnings[text],\n\t\t\t\tcombinedtext = {},\n\t\t\t\tcombinedcount = 0,\n\t\t\t\tmod = self,\n\t\t\t\tsound = runSound>0,\n\t\t\t\tflash = runSound,--Set flash color to hard coded runsound (even if user sets custom sounds)\n\t\t\t\thasVoice = hasVoice,\n\t\t\t\tdifficulty = difficulty,\n\t\t\t\ticon = seticon,\n\t\t\t},\n\t\t\tmt\n\t\t)\n\t\tlocal optionId = optionName or optionName ~= false and text\n\t\tif optionId then\n\t\t\tobj.voiceOptionId = hasVoice and \"Voice\"..optionId or nil\n\t\t\tobj.option = optionId..(optionVersion or \"\")\n\t\t\tself:AddSpecialWarningOption(obj.option, optionDefault, runSound, self.NoSortAnnounce and \"specialannounce\" or \"announce\", spellID)\n\t\tend\n\t\ttinsert(self.specwarns, obj)\n\t\treturn obj\n\tend\n\n\tlocal function newSpecialWarning(self, announceType, spellId, stacks, optionDefault, optionName, optionVersion, runSound, hasVoice, difficulty)\n\t\tif not spellId then\n\t\t\terror(\"newSpecialWarning: you must provide spellId\", 2)\n\t\t\treturn\n\t\tend\n\t\tif runSound == true then\n\t\t\trunSound = 2\n\t\telseif not runSound then\n\t\t\trunSound = 1\n\t\tend\n\t\tif hasVoice == true then--if not a number, set it to 2, old mods that don't use new numbered system\n\t\t\thasVoice = 2\n\t\tend\n\t\tlocal alternateSpellId\n\t\tif type(optionName) == \"number\" then\n\t\t\tif DBM.Options.SpecialWarningShortText then\n\t\t\t\talternateSpellId = optionName\n\t\t\tend\n\t\t\toptionName = nil\n\t\tend\n\t\tlocal text, spellName = setText(announceType, alternateSpellId or spellId, stacks)\n\t\tlocal obj = setmetatable( -- todo: fix duplicate code\n\t\t\t{\n\t\t\t\ttext = text,\n\t\t\t\tcombinedtext = {},\n\t\t\t\tcombinedcount = 0,\n\t\t\t\tannounceType = announceType,\n\t\t\t\tmod = self,\n\t\t\t\tsound = runSound>0,\n\t\t\t\tflash = runSound,--Set flash color to hard coded runsound (even if user sets custom sounds)\n\t\t\t\thasVoice = hasVoice,\n\t\t\t\tdifficulty = difficulty,\n\t\t\t\ttype = announceType,\n\t\t\t\tspellId = spellId,\n\t\t\t\tspellName = spellName,\n\t\t\t\tstacks = stacks,\n\t\t\t\ticon = select(3, GetSpellInfo(spellId))\n\t\t\t},\n\t\t\tmt\n\t\t)\n\t\tif optionName then\n\t\t\tobj.option = optionName\n\t\telseif optionName ~= false then\n\t\t\tlocal difficultyIcon = \"\"\n\t\t\tif difficulty then\n\t\t\t\t--1 LFR, 2 Normal, 3 Heroic, 4 Mythic\n\t\t\t\t--Likely 1 and 2 will never be used, but being prototyped just in case\n\t\t\t\tlocal path = \"AddOns\\\\DBM-Core\\\\textures\"\n\t\t\t\tif difficulty == 3 then\n\t\t\t\t\tdifficultyIcon = \"|TInterface\\\\\" .. path .. \"\\\\UI-EJ-Icons.blp:18:18:0:0:255:66:102:118:7:27|t\"\n\t\t\t\telseif difficulty == 4 then\n\t\t\t\t\tdifficultyIcon = \"|TInterface\\\\\" .. path .. \"\\\\UI-EJ-Icons.blp:18:18:0:0:255:66:133:153:40:58|t\"\n\t\t\t\tend\n\t\t\tend\n\t\t\tobj.option = \"SpecWarn\"..spellId..announceType..(optionVersion or \"\")\n\t\t\tif announceType == \"stack\" then\n\t\t\t\tself.localization.options[obj.option] = difficultyIcon..L.AUTO_SPEC_WARN_OPTIONS[announceType]:format(stacks or 3, spellId)\n\t\t\telseif announceType == \"prewarn\" then\n\t\t\t\tself.localization.options[obj.option] = difficultyIcon..L.AUTO_SPEC_WARN_OPTIONS[announceType]:format(tostring(stacks or 5), spellId)\n\t\t\telse\n\t\t\t\tself.localization.options[obj.option] = difficultyIcon..L.AUTO_SPEC_WARN_OPTIONS[announceType]:format(spellId)\n\t\t\tend\n\t\tend\n\t\tif obj.option then\n\t\t\tlocal catType = \"announce\"--Default to General announce\n\t\t\tif self.NoSortAnnounce then--ALL special announce objects will be assigned \"specialannounce\", usually for mods that sort by phase instead\n\t\t\t\tcatType = \"specialannounce\"\n\t\t\telse\n\t\t\t\t--Directly affects another target (boss or player) that you need to know about\n\t\t\t\tif announceType == \"target\" or announceType == \"targetcount\" or announceType == \"close\" or announceType == \"reflect\" then\n\t\t\t\t\tcatType = \"announceother\"\n\t\t\t\t--Directly affects you\n\t\t\t\telseif announceType == \"you\" or announceType == \"youcount\" or announceType == \"youpos\" or announceType == \"move\" or announceType == \"dodge\" or announceType == \"dodgecount\" or announceType == \"moveaway\" or announceType == \"moveawaycount\" or announceType == \"keepmove\" or announceType == \"stopmove\" or announceType == \"run\" or announceType == \"runcount\" or announceType == \"stack\" or announceType == \"moveto\" or announceType == \"soak\" or announceType == \"soakcount\" or announceType == \"soakpos\" then\n\t\t\t\t\tcatType = \"announcepersonal\"\n\t\t\t\t--Things you have to do to fulfil your role\n\t\t\t\telseif announceType == \"taunt\" or announceType == \"dispel\" or announceType == \"interrupt\" or announceType == \"interruptcount\" or announceType == \"switch\" or announceType == \"switchcount\" then\n\t\t\t\t\tcatType = \"announcerole\"\n\t\t\t\tend\n\t\t\tend\n\t\t\tself:AddSpecialWarningOption(obj.option, optionDefault, runSound, catType, spellId, announceType)\n\t\tend\n\t\tobj.voiceOptionId = hasVoice and \"Voice\"..spellId or nil\n\t\ttinsert(self.specwarns, obj)\n\t\treturn obj\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningSpell(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"spell\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningEnd(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"ends\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningFades(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"fades\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningSoon(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"soon\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningBait(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"bait\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningDispel(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"dispel\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningInterrupt(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"interrupt\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningInterruptCount(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"interruptcount\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningYou(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"you\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningYouCount(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"youcount\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningYouPos(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"youpos\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningYouPosCount(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"youposcount\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningSoakPos(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"soakpos\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningTarget(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"target\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningTargetCount(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"targetcount\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningDefensive(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"defensive\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningTaunt(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"taunt\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningClose(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"close\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningMove(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"move\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningKeepMove(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"keepmove\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningStopMove(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"stopmove\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningGTFO(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"gtfo\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningDodge(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"dodge\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningDodgeCount(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"dodgecount\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningDodgeLoc(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"dodgeloc\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningMoveAway(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"moveaway\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningMoveAwayCount(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"moveawaycount\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningMoveTo(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"moveto\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningSoak(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"soak\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningSoakCount(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"soakcount\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningJump(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"jump\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningRun(spellId, optionDefault, optionName, optionVersion, runSound, ...)\n\t\treturn newSpecialWarning(self, \"run\", spellId, nil, optionDefault, optionName, optionVersion, runSound or 4, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningRunCount(spellId, optionDefault, optionName, optionVersion, runSound, ...)\n\t\treturn newSpecialWarning(self, \"runcount\", spellId, nil, optionDefault, optionName, optionVersion, runSound or 4, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningCast(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"cast\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningLookAway(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"lookaway\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningReflect(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"reflect\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningCount(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"count\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningSoonCount(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"sooncount\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningStack(spellId, optionDefault, stacks, ...)\n\t\treturn newSpecialWarning(self, \"stack\", spellId, stacks, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningSwitch(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"switch\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningSwitchCount(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"switchcount\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningAdds(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"adds\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningAddsCount(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"addscount\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningAddsCustom(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"addscustom\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningTargetChange(spellId, optionDefault, ...)\n\t\treturn newSpecialWarning(self, \"targetchange\", spellId, nil, optionDefault, ...)\n\tend\n\n\tfunction bossModPrototype:NewSpecialWarningPreWarn(spellId, optionDefault, time, ...)\n\t\treturn newSpecialWarning(self, \"prewarn\", spellId, time, optionDefault, ...)\n\tend\n\n\tfunction DBM:PlayCountSound(number, forceVoice, forcePath)\n\t\tif number > 10 then return end\n\t\tlocal voice\n\t\tif forceVoice then--For options example\n\t\t\tvoice = forceVoice\n\t\telse\n\t\t\tvoice = self.Options.CountdownVoice\n\t\tend\n\t\tlocal path\n\t\tlocal maxCount = 5\n\t\tif forcePath then\n\t\t\tpath = forcePath\n\t\telse\n\t\t\tfor _, count in pairs(DBM:GetCountSounds()) do\n\t\t\t\tif count.value == voice then\n\t\t\t\t\tpath = count.path\n\t\t\t\t\tmaxCount = count.max\n\t\t\t\t\tbreak\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tif not path or (number > maxCount) then return end\n\t\tself:PlaySoundFile(path..number..\".ogg\")\n\tend\n\n\tdo\n\t\tlocal minVoicePackVersion = 14\n\n\t\tfunction DBM:CheckVoicePackVersion(value)\n\t\t\tlocal activeVP = self.Options.ChosenVoicePack2\n\t\t\t--Check if voice pack out of date\n\t\t\tif activeVP ~= \"None\" and activeVP == value then\n\t\t\t\t-- User might reselect \"missing\" entry shown in GUI if previously selected voice pack is uninstalled or disabled\n\t\t\t\tif self.VoiceVersions[value] then\n\t\t\t\t\tvoiceSessionDisabled = false\n\t\t\t\t\tif self.VoiceVersions[value] < minVoicePackVersion then--Version will be bumped when new voice packs released that contain new voices.\n\t\t\t\t\t\tif self.Options.ShowReminders then\n\t\t\t\t\t\t\tself:AddMsg(L.VOICE_PACK_OUTDATED)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tSWFilterDisabled = self.VoiceVersions[value]--Set disable to version on current voice pack\n\t\t\t\t\telse\n\t\t\t\t\t\tSWFilterDisabled = minVoicePackVersion\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tvoiceSessionDisabled = true\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction DBM:PlaySpecialWarningSound(soundId, force)\n\t\tlocal sound\n\t\tif not force and self:IsTrivial() and self.Options.DontPlayTrivialSpecialWarningSound then\n\t\t\tsound = self.Options.RaidWarningSound\n\t\telse\n\t\t\tsound = type(soundId) == \"number\" and self.Options[\"SpecialWarningSound\" .. (soundId == 1 and \"\" or soundId)] or soundId or self.Options.SpecialWarningSound\n\t\tend\n\t\tself:PlaySoundFile(sound, nil, true)\n\tend\n\n\tlocal function testWarningEnd()\n\t\tframe:SetFrameStrata(\"HIGH\")\n\tend\n\n\tfunction DBM:ShowTestSpecialWarning(_, number, noSound, force) -- text, number, noSound, force\n\t\tif moving then\n\t\t\treturn\n\t\tend\n\t\tself:AddSpecialWarning(L.MOVE_SPECIAL_WARNING_TEXT)\n\t\tframe:SetFrameStrata(\"TOOLTIP\")\n\t\tself:Unschedule(testWarningEnd)\n\t\tself:Schedule(self.Options.SpecialWarningDuration2 * 1.3, testWarningEnd)\n\t\tif number and not noSound then\n\t\t\tself:PlaySpecialWarningSound(number, force)\n\t\tend\n\t\tif number then\n\t\t\tif self.Options[\"SpecialWarningFlash\"..number] then\n\t\t\t\tif not force and self:IsTrivial() and self.Options.DontPlayTrivialSpecialWarningSound then return end--No flash if trivial\n\t\t\t\tlocal flashColor = self.Options[\"SpecialWarningFlashCol\"..number]\n\t\t\t\tlocal repeatCount = self.Options[\"SpecialWarningFlashCount\"..number] or 1\n\t\t\t\tself.Flash:Show(flashColor[1], flashColor[2], flashColor[3], self.Options[\"SpecialWarningFlashDura\"..number], self.Options[\"SpecialWarningFlashAlph\"..number], repeatCount-1)\n\t\t\tend\n\t\tend\n\tend\nend\n\n--------------------\n--  Timer Object  --\n--------------------\ndo\n\tlocal timerPrototype = {}\n\tlocal mt = {__index = timerPrototype}\n\tlocal countvoice1, countvoice2, countvoice3, countvoice4\n\tlocal countvoice1max, countvoice2max, countvoice3max, countvoice4max = 5, 5, 5, 5\n\tlocal countpath1, countpath2, countpath3, countpath4\n\n\t--Merged countdown object for timers with build-in countdown\n\tfunction DBM:BuildVoiceCountdownCache()\n\t\tcountvoice1 = self.Options.CountdownVoice\n\t\tcountvoice2 = self.Options.CountdownVoice2\n\t\tcountvoice3 = self.Options.CountdownVoice3\n\t\tcountvoice4 = self.Options.PullVoice\n\t\tfor _, count in pairs(DBM:GetCountSounds()) do\n\t\t\tif count.value == countvoice1 then\n\t\t\t\tcountpath1 = count.path\n\t\t\t\tcountvoice1max = count.max\n\t\t\tend\n\t\t\tif count.value == countvoice2 then\n\t\t\t\tcountpath2 = count.path\n\t\t\t\tcountvoice2max = count.max\n\t\t\tend\n\t\t\tif count.value == countvoice3 then\n\t\t\t\tcountpath3 = count.path\n\t\t\t\tcountvoice3max = count.max\n\t\t\tend\n\t\t\tif count.value == countvoice4 then\n\t\t\t\tcountpath4 = count.path\n\t\t\t\tcountvoice4max = count.max\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal function playCountSound(timerId, path, requiresCombat)\n\t\tDBM:Debug(\"playCountSound originated from timer: \"..(timerId or \"nil\")..\" with path: \"..(path or \"nil\"), 3) -- doubling this here to confirm sound provenance on debug logs\n\t\tif requiresCombat and not (InCombatLockdown() or UnitAffectingCombat(\"player\")) then return end\n\t\tDBM:PlaySoundFile(path)\n\tend\n\n\tlocal function playCountdown(timerId, timer, voice, count, requiresCombat)\n\t\tif DBM.Options.DontPlayCountdowns then return end\n\t\ttimer = timer or 10\n\t\tcount = count or 4\n\t\tvoice = voice or 1\n\t\tif timer <= count then count = floor(timer) end\n\t\tif not countpath1 or not countpath2 or not countpath3 then\n\t\t\tDBM:Debug(\"Voice cache not built at time of playCountdown. On fly caching.\", 3)\n\t\t\tDBM:BuildVoiceCountdownCache()\n\t\tend\n\t\tlocal maxCount, path\n\t\tif type(voice) == \"string\" then\n\t\t\tmaxCount = 5--Safe to assume if it's not one of the built ins, it's likely heroes/OW, which has a max of 5\n\t\t\tpath = voice\n\t\telseif voice == 2 then\n\t\t\tmaxCount = countvoice2max or 10\n\t\t\tpath = countpath2 or \"Interface\\\\AddOns\\\\DBM-Core\\\\Sounds\\\\Kolt\\\\\"\n\t\telseif voice == 3 then\n\t\t\tmaxCount = countvoice3max or 5\n\t\t\tpath = countpath3 or \"Interface\\\\AddOns\\\\DBM-Core\\\\Sounds\\\\Smooth\\\\\"\n\t\telseif voice == 4 then\n\t\t\tmaxCount = countvoice4max or 10\n\t\t\tpath = countpath4 or \"Interface\\\\AddOns\\\\DBM-Core\\\\Sounds\\\\Corsica\\\\\"\n\t\telse\n\t\t\tmaxCount = countvoice1max or 10\n\t\t\tpath = countpath1 or \"Interface\\\\AddOns\\\\DBM-Core\\\\Sounds\\\\Corsica\\\\\"\n\t\tend\n\t\tif not path then--Should not happen but apparently it does somehow\n\t\t\tDBM:Debug(\"Voice path failed in countdownProtoType:Start.\")\n\t\t\treturn\n\t\tend\n\t\tif count == 0 then--If a count of 0 is passed,then it's a \"Countout\" timer, not \"Countdown\"\n\t\t\tfor i = 1, timer do\n\t\t\t\tif i < maxCount then\n\t\t\t\t\tDBM:Schedule(i, playCountSound, timerId, path..i..\".ogg\", requiresCombat)\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\tfor i = count, 1, -1 do\n\t\t\t\tif i <= maxCount then\n\t\t\t\t\tDBM:Schedule(timer-i, playCountSound, timerId, path..i..\".ogg\", requiresCombat)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\t--\"break\" and \"pull\" timers have custom classifications that are straight forward and not in this table\n\tlocal timerTypeSimplification = {\n\t\t--All cooldown times, be they approx cd or next exact, or even AI timers, map to \"CD\"\n\t\t[\"cdcount\"] = \"cd\",\n\t\t[\"cdsource\"] = \"cd\",\n\t\t[\"cdspecial\"] = \"cd\",\n\t\t[\"nextcount\"] = \"cd\",\n\t\t[\"nextsource\"] = \"cd\",\n\t\t[\"nextspecial\"] = \"cd\",\n\t\t[\"var\"] = \"cd\",\n\t\t[\"varcount\"] = \"cd\",\n\t\t[\"varsource\"] = \"cd\",\n\t\t[\"varspecial\"] = \"cd\",\n\t\t[\"ai\"] = \"cd\",\n\t\t[\"adds\"] = \"cd\",\n\t\t[\"addscustom\"] = \"cd\",\n\n\t\t--All nameplate only timers, be they approx or exact or ai cooldowns, or nameplate only cast timers\n\t\t--CDs all map to cdnp but cast maps to castnp\n\t\t[\"cdnp\"] = \"cdnp\",\n\t\t[\"cdpnp\"] = \"cdnp\",\n\t\t[\"nextnp\"] = \"cdnp\",\n\t\t[\"nextpnp\"] = \"cdnp\",\n\t\t[\"castpnp\"] = \"castnp\",\n\n\t\t--RPs all map to \"warmup\"\n\t\t[\"roleplay\"] = \"warmup\",\n\t\t[\"combat\"] = \"warmup\",\n\n\t\t--all stage types will map to \"stage\"\n\t\t[\"achievement\"] = \"stage\",\n\t\t[\"stagecount\"] = \"stage\",\n\t\t[\"stagecountcycle\"] = \"stage\",\n\t\t[\"stagecontext\"] = \"stage\",\n\t\t[\"stagecontextcount\"] = \"stage\",\n\t\t[\"intermission\"] = \"stage\",\n\t\t[\"intermissioncount\"] = \"stage\",\n\n\t\t--Target Bars such as buff/debuff on another player, on self, or on the boss, RPs all map to \"target\"\n\t\t[\"targetcount\"] = \"target\",\n\t\t[\"fades\"] = \"target\",--Fades is usually used as a personal target timer. So like debuff on other player is \"debuff (targetname)\" but on self it's just \"debuff fades\"\n\n\t\t--All cast bar types map to \"cast\"\n\t\t[\"active\"] = \"cast\",--Active bars are usually things like Whirlwind is active on the boss, or a channeled cast is being done. so effectively it's for channeled casts, as upposed to regular casts\n\t\t[\"castsource\"] = \"cast\",\n\t\t[\"castcount\"] = \"cast\",\n\t}\n\n\t--Very similar to above but more specific to key replacement and not type replacement, to match BW behavior for unification of WAs\n\tlocal waKeyOverrides = {\n\t\t[\"combat\"] = \"warmup\",\n\t\t[\"roleplay\"] = \"warmup\",\n\t\t[\"achievement\"] = \"stages\",\n\t\t[\"stagecount\"] = \"stages\",\n\t\t[\"stagecountcycle\"] = \"stages\",\n\t\t[\"stagecontext\"] = \"stages\",\n\t\t[\"stagecontextcount\"] = \"stages\",\n\t\t[\"intermission\"] = \"stages\",\n\t\t[\"intermissioncount\"] = \"stages\",\n\t}\n\n\tlocal function isNegativeZero(x)\n\t\treturn x == 0 and 1/x < 0  -- Only true for -0\n\tend\n\n\t-- Parse variance from timer string (\"v30.5-40\" or \"dv30.5-40\"), into minimum and maximum timer, and calculated variance duration\n\t---@param timer string\n\t---@return number maxTimer, number minTimer, number varianceDuration\n\tlocal function parseVarianceFromTimer(timer)\n\t\t-- ^(d?v) matches starting character d (optional) or v\n\t\t-- (%d+%.?%d*) matches any number of digits with optional decimal\n\t\t-- %- matches literal character \"-\"\n\t\t-- (%d+%.?%d*)$ matches any number of digits with optional decimal, at the end of the string\n\t\tlocal minTimer, maxTimer = timer:match(\"v(%d+%.?%d*)%-(%d+%.?%d*)\")\n\t\tminTimer, maxTimer = tonumber(minTimer), tonumber(maxTimer)\n\t\tif type(minTimer) ~= \"number\" or type(maxTimer) ~= \"number\" then\n\t\t\tDBM:Debug(\"|cffff0000No timers found in the string passed to parseVarianceFromTimer function: \"..timer..\". Returning zero.|r\")\n\t\t\treturn 0, 0, 0\n\t\t\tend\n\t\tlocal varianceDuration = maxTimer - minTimer\n\n\t\treturn maxTimer, minTimer, varianceDuration  -- maximum possible timer from the variance window, minimum..., variance duration\n\tend\n\n\tlocal function correctWithVarianceDuration(numberToCorrect, timerBar)\n\t\tif not numberToCorrect then\n\t\t\tDBM:Debug(\"|cffff0000No number passed to correctWithVarianceDuration function.|r\")\n\t\t\treturn\n\t\tend\n\n\t\tif not timerBar then\n\t\t\tDBM:Debug(\"|cffff0000No timerBar passed to correctWithVarianceDuration function.|r\")\n\t\t\treturn numberToCorrect\n\t\tend\n\n\t\treturn timerBar.hasVariance and (numberToCorrect + timerBar.varianceDuration) or numberToCorrect\n\tend\n\n\tfunction timerPrototype:Start(timer, ...)\n\t\tif not self.mod.isDummyMod then--Don't apply following rulesets to pull timers and such\n\t\t\tif DBM.Options.DontShowBossTimers and not self.mod.isTrashMod then return end\n\t\t\tif DBM.Options.DontShowTrashTimers and self.mod.isTrashMod then return end\n\t\tend\n\t\tlocal isDelayed = type(timer) == \"number\" and (isNegativeZero(timer) or timer < 0)\n\t\tlocal hasVariance = type(timer) == \"number\" and timer > 0 and false or not timer and self.hasVariance -- account for metavariant timers that were fired with a fixed timer start, like timer:Start(10). Does not account for timer:Start(-delay), which is parsed below after variance started timers\n\t\tlocal timerStringWithVariance, maxTimer, minTimer\n\t\tif type(timer) == \"string\" and timer:match(\"^v%d+%.?%d*-%d+%.?%d*$\") then -- catch \"timer variance\" pattern, expressed like v10.5-20.5\n\t\t\thasVariance = true\n\t\t\ttimerStringWithVariance = timer -- cache timer string\n\t\t\tmaxTimer, minTimer = parseVarianceFromTimer(timer) -- use highest possible value as the actual End timer\n\t\t\ttimer = DBT.Options.VarianceEnabled and maxTimer or minTimer\n\t\t\tend\n\t\tif isDelayed then -- catch metavariant timers with delay, expressed like timer:Start(-delay)\n\t\t\tif self.hasVariance then\n\t\t\t\thasVariance = self.hasVariance\n\t\t\t\tmaxTimer, minTimer = parseVarianceFromTimer(self.timerStringWithVariance) -- use highest possible value as the actual End timer\n\t\t\t\ttimerStringWithVariance = (\"v%s-%s\"):format(minTimer + timer, maxTimer + timer) -- rebuild timer string with delay applied\n\t\t\t\ttimer = (DBT.Options.VarianceEnabled and maxTimer or minTimer) + timer\n\t\t\tend\n\t\tend\n--\t\tif DBM.Options.DebugMode and self.mod.id ~= \"TestMod\" then\n--\t\t\tself.keep = hasVariance -- keep variance timers for debug purposes\n--\t\tend\n\t\tif timer and type(timer) ~= \"number\" then\n\t\t\treturn self:Start(nil, timer, ...) -- first argument is optional!\n\t\tend\n\t\tlocal isBarEnabled = not self.option or self.mod.Options[self.option]\n\t\t--this segment needs to run regardless of enabled to collect info for callback\n\t\tlocal isCountTimer = false\n\t\tif self.type and (self.type == \"cdcount\" or self.type == \"nextcount\" or self.type == \"stagecount\" or self.type == \"stagecontextcount\" or self.type == \"stagecountcycle\" or self.type == \"intermissioncount\" or self.type == \"varcount\") then\n\t\t\tisCountTimer = true\n\t\tend\n\t\tlocal guid, timerCount\n\t\tif select(\"#\", ...) > 0 then--If timer has args\n\t\t\tfor i = 1, select(\"#\", ...) do\n\t\t\t\tlocal v = select(i, ...)\n\t\t\t\tif DBM:IsNonPlayableGUID(v) then--Then scan them for a mob guid\n\t\t\t\t\tguid = v--If found, guid will be passed in DBM_TimerStart callback\n\t\t\t\tend\n\t\t\t\t--Not most efficient way to do it, but since it's already being done for guid, it's best not to repeat the work\n\t\t\t\tif isCountTimer and type(v) == \"number\" then\n\t\t\t\t\ttimerCount = v\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\ttimer = timer and ((timer > 0 and timer) or self.timer + timer) or self.timer\n\t\tif isCountTimer and not self.allowdouble then--remove previous timer.\n\t\t\tfor i = #self.startedTimers, 1, -1 do\n--\t\t\t\t\tif DBM.Options.BadTimerAlert or DBM.Options.DebugMode and DBM.Options.DebugLevel > 1 then\n\t\t\t\t\tlocal bar = DBT:GetBar(self.startedTimers[i])\n\t\t\t\t\tif bar then\n\t\t\t\t\t\tif mabs(bar.timer) > 0.1 then -- Positive and Negative (\"keep\") timers. Also shortened time window\n\t\t\t\t\t\t\tlocal remaining = (\"%.2f\"):format(bar.timer)\n\t\t\t\t\t\t\tlocal ttext = _G[bar.frame:GetName() .. \"BarName\"]:GetText() or \"\"\n\t\t\t\t\t\t\tttext = ttext .. \"(\" .. self.id .. \"-\" .. (timer or 0) .. \")\"\n\t\t\t\t\t\t\tlocal deltaFromVarianceMinTimer = (\"%.2f\"):format(bar.hasVariance and bar.timer - bar.varianceDuration or bar.timer)\n\t\t\t\t\t\t\tlocal phaseText = self.mod.vb.phase and \" (\" .. L.SCENARIO_STAGE:format(self.mod.vb.phase) .. \")\" or \"\"\n\t\t\t\t\t\t\tif bar.hasVariance then\n\t\t\t\t\t\t\t\tif DBM.Options.BadTimerAlert and bar.timer > correctWithVarianceDuration(1, bar) then--If greater than 1 seconds off, report this out of debug mode to all users\n\t\t\t\t\t\t\t\t\tDBM:AddMsg(\"Timer \"..ttext..phaseText.. \" refreshed before expired, outside known variance window. Remaining time is : \"..remaining..\" (until variance minimum timer: \"..deltaFromVarianceMinTimer..\"). Please report this bug\")\n\t\t\t\t\t\t\t\t\tfireEvent(\"DBM_Debug\", \"Timer \"..ttext..phaseText.. \" refreshed before expired, outside known variance window. Remaining time is : \"..remaining..\" (until variance minimum timer: \"..deltaFromVarianceMinTimer..\"). Please report this bug\", 2)\n\t\t\t\t\t\t\t\telseif bar.timer < -0.1 then -- Would be useful to implement a variance detector, and report outside the known variance, however this would need to happen on a timer after it was refreshed. For the moment, only \"keep\" arg can achieve this.\n\t\t\t\t\t\t\t\t\tDBM:Debug(\"Timer \"..ttext..phaseText.. \" refreshed after zero, outside known variance window. Remaining time is : \"..remaining, 2)\n\t\t\t\t\t\t\t\telseif bar.timer > correctWithVarianceDuration(0.1, bar) then\n\t\t\t\t\t\t\t\t\tDBM:Debug(\"Timer \"..ttext..phaseText.. \" refreshed before expired. Remaining time is : \"..remaining..\" (until variance minimum timer: \"..deltaFromVarianceMinTimer..\")\", 2)\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\telse -- duplicated code, should be refactored\n\t\t\t\t\t\t\t\tif DBM.Options.BadTimerAlert and bar.timer > 1 then--If greater than 1 seconds off, report this out of debug mode to all users\n\t\t\t\t\t\t\t\t\tDBM:AddMsg(\"Timer \"..ttext..phaseText.. \" refreshed before expired. Remaining time is : \"..remaining..\". Please report this bug\")\n\t\t\t\t\t\t\t\t\tfireEvent(\"DBM_Debug\", \"Timer \"..ttext..phaseText.. \" refreshed before expired. Remaining time is : \"..remaining..\". Please report this bug\", 2)\n\t\t\t\t\t\t\t\telseif bar.timer < -5 then -- arbitrary threshold\n\t\t\t\t\t\t\t\t\tDBM:Debug(\"Timer \"..ttext..phaseText.. \" refreshed after zero. Remaining time is : \"..remaining, 2)\n\t\t\t\t\t\t\t\telseif bar.timer > 0.1 then\n\t\t\t\t\t\t\t\t\tDBM:Debug(\"Timer \"..ttext..phaseText.. \" refreshed before expired. Remaining time is : \"..remaining, 2)\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n--\t\t\t\t\tend\n\t\t\t\tDBT:CancelBar(self.startedTimers[i])\n\t\t\t\tfireEvent(\"DBM_TimerStop\", self.startedTimers[i])\n\t\t\t\ttremove(self.startedTimers, i)\n\t\t\tend\n\t\tend\n\t\tlocal id = self.id .. pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\t--AI timer api:\n\t\t--Starting ai timer with (1) indicates it's a first timer after pull\n\t\t--Starting timer with (2) or (3) indicates it's a stage 2 or stage 3 first timer\n\t\t--Starting AI timer with anything above 3 indicarets it's a regular timer and to use shortest time in between two regular casts\n\t\tif self.type == \"ai\" then--A learning timer\n\t\t\tif not DBM.Options.AITimer then return end\n\t\t\tif timer > 5 then--Normal behavior.\n\t\t\t\tlocal newPhase = false\n\t\t\t\tfor i = 1, 5 do\n\t\t\t\t\t--Check for any phase timers that are strings, if a string it means last cast of this ability was first case of a given stage\n\t\t\t\t\tif self[\"phase\"..i..\"CastTimer\"] and type(self[\"phase\"..i..\"CastTimer\"]) == \"string\" then--This is first cast of spell, we need to generate self.firstPullTimer\n\t\t\t\t\t\tself[\"phase\"..i..\"CastTimer\"] = tonumber(self[\"phase\"..i..\"CastTimer\"])\n\t\t\t\t\t\tself[\"phase\"..i..\"CastTimer\"] = GetTime() - self[\"phase\"..i..\"CastTimer\"]--We have generated a self.phase1CastTimer! Next pull, DBM should know timer for first cast next pull. FANCY!\n\t\t\t\t\t\tDBM:Debug(\"AI timer learned a first timer for current phase of \"..self[\"phase\"..i..\"CastTimer\"], 2)\n\t\t\t\t\t\tnewPhase = true\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tif self.lastCast and not newPhase then--We have a GetTime() on last cast and it's not affected by a phase change\n\t\t\t\t\tlocal timeLastCast = GetTime() - self.lastCast--Get time between current cast and last cast\n\t\t\t\t\tif timeLastCast > 5 then--Prevent infinite loop cpu hang. Plus anything shorter than 5 seconds doesn't need a timer\n\t\t\t\t\t\tif not self.lowestSeenCast or (self.lowestSeenCast and self.lowestSeenCast > timeLastCast) then--Always use lowest seen cast for a timer\n\t\t\t\t\t\t\tself.lowestSeenCast = timeLastCast\n\t\t\t\t\t\t\tDBM:Debug(\"AI timer learned a new lowest timer of \"..self.lowestSeenCast, 2)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tself.lastCast = GetTime()\n\t\t\t\tif self.lowestSeenCast then--Always use lowest seen cast for timer\n\t\t\t\t\ttimer = self.lowestSeenCast\n\t\t\t\telse\n\t\t\t\t\treturn--Don't start the bogus timer shoved into timer field in the mod\n\t\t\t\tend\n\t\t\telse--AI timer passed with 4 or less is indicating phase change, with timer as phase number\n\t\t\t\tif self[\"phase\" .. timer .. \"CastTimer\"] and type(self[\"phase\" .. timer .. \"CastTimer\"]) == \"number\" then\n\t\t\t\t\t--Check if timer is shorter than previous learned first timer by scanning remaining time on existing bar\n\t\t\t\t\tlocal bar = DBT:GetBar(id)\n\t\t\t\t\tif bar then\n\t\t\t\t\t\tlocal remaining = (\"%.1f\"):format(bar.timer)\n\t\t\t\t\t\tif bar.timer > 0.1 then -- Shortened time window\n\t\t\t\t\t\t\tself[\"phase\"..timer..\"CastTimer\"] = self[\"phase\"..timer..\"CastTimer\"] - remaining\n\t\t\t\t\t\t\tDBM:Debug(\"AI timer learned a lower first timer for current phase of \"..self[\"phase\"..timer..\"CastTimer\"], 2)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\ttimer = self[\"phase\"..timer..\"CastTimer\"]\n\t\t\t\telse--No first pull timer generated yet, set it to GetTime, as a string\n\t\t\t\t\tself[\"phase\"..timer..\"CastTimer\"] = tostring(GetTime())\n\t\t\t\t\treturn--Don't start the x second timer\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\t--This should only run if bar is actually enabled, else we don't have a previous bar to compare it to anyways\n\t\tif isBarEnabled --[[and DBM.Options.BadTimerAlert or DBM.Options.DebugMode and DBM.Options.DebugLevel > 1]] then\n\t\t\tif not self.type or (self.type ~= \"target\" and self.type ~= \"active\" and self.type ~= \"fades\" and self.type ~= \"ai\") and not self.allowdouble then\n\t\t\t\tlocal bar = DBT:GetBar(id)\n\t\t\t\tif bar then\n\t\t\t\t\tif mabs(bar.timer) > 0.1 then -- Positive and Negative (\"keep\") timers. Also shortened time window\n\t\t\t\t\t\tlocal remaining = (\"%.2f\"):format(bar.timer)\n\t\t\t\t\t\tlocal deltaFromVarianceMinTimer = (\"%.2f\"):format(bar.hasVariance and bar.timer - bar.varianceDuration or bar.timer)\n\t\t\t\t\t\tlocal ttext = _G[bar.frame:GetName() .. \"BarName\"]:GetText() or \"\"\n\t\t\t\t\t\tttext = ttext .. \"(\" .. self.id .. \"-\" .. (timer or 0) .. \")\"\n\t\t\t\t\t\tlocal phaseText = self.mod.vb.phase and \" (\" .. L.SCENARIO_STAGE:format(self.mod.vb.phase) .. \")\" or \"\"\n\t\t\t\t\t\tif bar.hasVariance then\n\t\t\t\t\t\t\tif DBM.Options.BadTimerAlert and bar.timer > correctWithVarianceDuration(1, bar) then--If greater than 1 seconds off, report this out of debug mode to all users\n\t\t\t\t\t\t\t\tDBM:AddMsg(\"Timer \"..ttext..phaseText.. \" refreshed before expired, outside known variance window. Remaining time is : \"..remaining..\" (until variance minimum timer: \"..deltaFromVarianceMinTimer..\"). Please report this bug\")\n\t\t\t\t\t\t\t\tfireEvent(\"DBM_Debug\", \"Timer \"..ttext..phaseText.. \" refreshed before expired, outside known variance window. Remaining time is : \"..remaining..\" (until variance minimum timer: \"..deltaFromVarianceMinTimer..\"). Please report this bug\", 2)\n\t\t\t\t\t\t\telseif bar.timer < -0.1 then -- Would be useful to implement a variance detector, and report outside the known variance, however this would need to happen on a timer after it was refreshed. For the moment, only \"keep\" arg can achieve this.\n\t\t\t\t\t\t\t\tDBM:Debug(\"Timer \"..ttext..phaseText.. \" refreshed after zero, outside known variance window. Remaining time is : \"..remaining, 2)\n\t\t\t\t\t\t\telseif bar.timer > correctWithVarianceDuration(0.1, bar) then\n\t\t\t\t\t\t\t\tDBM:Debug(\"Timer \"..ttext..phaseText.. \" refreshed before expired. Remaining time is : \"..remaining..\" (until variance minimum timer: \"..deltaFromVarianceMinTimer..\")\", 2)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\telse -- duplicated code, should be refactored\n\t\t\t\t\t\t\tif DBM.Options.BadTimerAlert and bar.timer > 1 then--If greater than 1 seconds off, report this out of debug mode to all users\n\t\t\t\t\t\t\t\tDBM:AddMsg(\"Timer \"..ttext..phaseText.. \" refreshed before expired. Remaining time is : \"..remaining..\". Please report this bug\")\n\t\t\t\t\t\t\t\tfireEvent(\"DBM_Debug\", \"Timer \"..ttext..phaseText.. \" refreshed before expired. Remaining time is : \"..remaining..\". Please report this bug\", 2)\n\t\t\t\t\t\t\telseif bar.timer < -5 then -- arbitrary threshold\n\t\t\t\t\t\t\t\tDBM:Debug(\"Timer \"..ttext..phaseText.. \" refreshed after zero. Remaining time is : \"..remaining, 2)\n\t\t\t\t\t\t\telseif bar.timer > 0.1 then\n\t\t\t\t\t\t\t\tDBM:Debug(\"Timer \"..ttext..phaseText.. \" refreshed before expired. Remaining time is : \"..remaining, 2)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tlocal colorId\n\t\tif self.option then\n\t\t\tcolorId = self.mod.Options[self.option .. \"TColor\"]\n\t\telseif self.colorType and type(self.colorType) == \"string\" then--No option for specific timer, but another bool option given that tells us where to look for TColor (for mods such as trio boss for valentines day in events mods)\n\t\t\tcolorId = self.mod.Options[self.colorType .. \"TColor\"]\n\t\telse--No option, or secondary option, set colorId to hardcoded color type\n\t\t\tcolorId = self.colorType or 0\n\t\tend\n\t\tlocal bar\n\t\t--Bar and countdown construction should only actually occur if enabled\n\t\tif isBarEnabled then\n\t\t\tlocal countVoice, countVoiceMax = 0, self.countdownMax or 4\n\t\t\tif self.option then\n\t\t\t\tcountVoice = self.mod.Options[self.option .. \"CVoice\"]\n\t\t\t\tif not self.fade and (type(countVoice) == \"string\" or countVoice > 0) then--Started without faded and has count voice assigned\n\t\t\t\t\tDBM:Unschedule(playCountSound, id) -- Prevents count sound if timer is started again before timer expires\n\t\t\t\t\t-- minTimer checks for the minimum possible timer in the variance timer string sent from Start method, self.minTimer is from newTimer constructor. Else, use timer value\n\t\t\t\t\tplayCountdown(id, minTimer or (hasVariance and self.minTimer) or timer, countVoice, countVoiceMax, self.requiresCombat)--timerId, timer, voice, count\n\t\t\t\tend\n\t\t\tend\n\t\t\t-- timerStringWithVariance checks for timer string sent from Start method, self.timerStringWithVariance is from newTimer constructor. Else, use timer value\n\t\t\tbar = DBT:CreateBar(timerStringWithVariance or (hasVariance and self.timerStringWithVariance) or timer, id, self.icon, nil, nil, nil, nil, colorId, nil, self.keep, self.fade, countVoice, countVoiceMax, self.simpType == \"cd\" or self.simpType == \"cdnp\")\n\t\t\tif not bar then\n\t\t\t\treturn false, \"error\" -- creating the timer failed somehow, maybe hit the hard-coded timer limit of 15\n\t\t\tend\n\t\tend\n\t\tlocal msg\n\t\tif self.type and not self.text then\n\t\t\tmsg = pformat(self.mod:GetLocalizedTimerText(self.type, self.spellId, self.name), ...)\n\t\telse\n\t\t\tif type(self.text) == \"number\" then--spellId passed in timer text, it's a timer with short text\n\t\t\t\tmsg = pformat(self.mod:GetLocalizedTimerText(self.type, self.text, self.name), ...)\n\t\t\telse\n\t\t\t\tmsg = pformat(self.text, ...)\n\t\t\tend\n\t\tend\n\t\tmsg = msg:gsub(\">.-<\", stripServerName)\n\t\tif bar then\n\t\t\tbar:SetText(msg, self.inlineIcon)\n\t\tend\n\t\t--ID (string) Internal DBM timer ID\n\t\t--msg (string) Timer Text (Do not use msg has an event trigger, it varies language to language or based on user timer options. Use this to DISPLAY only (such as timer replacement UI). use spellId field 99% of time\n\t\t--timer (number) Raw timer value. Will return lowest number in variance timers (like DBM has always done, earliest an ability comes off CD is expected behavior for weak auras)\n\t\t--Icon (string or number): Texture Path for Icon\n\t\t--simpleType (string): Timer type, which is one of only 7 possible types: \"cd\" for coolodwns, \"target\" for target bars such as debuff on a player, \"stage\" for any kind of stage timer (stage ends, next stage, or even just a warmup timer like \"fight begins\"), and then \"cast\" timer which is used for both a regular cast and a channeled cast (ie boss is casting frostbolt, or boss is channeling whirlwind). Lastly, break, pull, and berserk timers are \"breaK\", \"pull\", and \"berserk\" respectively\n\t\t--spellId (string or number): Raw spellid if available (most timers will have spellId or EJ ID unless it's a specific timer not tied to ability such as pull or combat start or rez timers. EJ id will be in format ej%d\n\t\t--colorID (number): Type classification (1-Add, 2-Aoe, 3-targeted ability, 4-Interrupt, 5-Role, 6-Stage, 7-User(custom))\n\t\t--Mod ID (string or number): Encounter ID as string, or a generic string for mods that don't have encounter ID (such as trash, dummy/test mods)\n\t\t--Keep (true or nil), whether or not to keep bar on screen when it expires (if true, timer should be retained until an actual TimerStop occurs or a new TimerStart with same barId happens (in which case you replace bar with new one)\n\t\t--fade (true or nil), whether or not to fade a bar (set alpha to usersetting/2)\n\t\t--spellName (string) Sent so users can use a spell name instead of spellId, if they choose. Mostly to be more classic wow friendly, spellID is still preferred method (even for classic)\n\t\t--MobGUID (string) if it could be parsed out of args\n\t\t--timerCount (number) if current timer is a count timer. Returns number (count value) needed to have weak auras that trigger off a specific timer count without using localized message text\n\t\t--isPriority: If true, this ability has been flagged as extra important. Can be used for weak auras or nameplate addons to add extra emphasis onto specific timer like a glow\n\t\t--fullType (the true type of timer, for those who really want to filter timers by DBM classifications such as \"adds\" or \"interrupt\")\n\t\t--hasVariance (true or nil) if timer has variance.\n\t\t--variancePeaktimer (number) if timer has variance, this is the peak timer in the variance window, otherwise nil\n\t\t--isEnabled (true or nil) if timer is enabled\n\n\t\t--Mods that have specifically flagged that it's safe to assume all timers from that boss mod belong to boss1\n\t\t--This check is performed secondary to args scan so that no adds guids are overwritten\n\t\t--NOTE: Begin fires regardless of enabled status, and includes additional enabled flag. Start only fires if option is enabled (old behavior)\n\t\tif not guid and self.mod.sendMainBossGUID and not DBM.Options.DontSendBossGUIDs and (self.type == \"cd\" or self.type == \"next\" or self.type == \"cdcount\" or self.type == \"nextcount\" or self.type == \"cdspecial\" or self.type == \"ai\") then--Variance excluded for now while NP timers don't support yet\n\t\t\tguid = UnitGUID(\"boss1\")\n\t\tend\n\t\tif self.simpType and (self.simpType == \"cdnp\" or self.simpType == \"castnp\") then--Only send nampelate callback\n\t\t\tfireEvent(\"DBM_NameplateBegin\", id, msg, minTimer or (hasVariance and self.minTimer) or timer, self.icon, self.simpType, self.waSpecialKey or self.spellId, colorId, self.mod.id, (self.simpType == \"cdnp\" and DBM.Options.AlwaysKeepNPs) and true or self.keep, self.fade, self.name, guid, timerCount, self.isPriority, self.type, hasVariance, hasVariance and timer, isBarEnabled)\n\t\t\tif isBarEnabled then\n\t\t\t\tfireEvent(\"DBM_NameplateStart\", id, msg, minTimer or (hasVariance and self.minTimer) or timer, self.icon, self.simpType, self.waSpecialKey or self.spellId, colorId, self.mod.id, (self.simpType == \"cdnp\" and DBM.Options.AlwaysKeepNPs) and true or self.keep, self.fade, self.name, guid, timerCount, self.isPriority, self.type, hasVariance, hasVariance and timer)\n\t\t\tend\n\t\telse--Send both callbacks\n\t\t\tfireEvent(\"DBM_TimerBegin\", id, msg, minTimer or (hasVariance and self.minTimer) or timer, self.icon, self.simpType, self.waSpecialKey or self.spellId, colorId, self.mod.id, self.keep, self.fade, self.name, guid, timerCount, self.isPriority, self.type, hasVariance, hasVariance and timer, isBarEnabled)\n\t\t\tif isBarEnabled then\n\t\t\t\tfireEvent(\"DBM_TimerStart\", id, msg, minTimer or (hasVariance and self.minTimer) or timer, self.icon, self.simpType, self.waSpecialKey or self.spellId, colorId, self.mod.id, self.keep, self.fade, self.name, guid, timerCount, self.isPriority, self.type, hasVariance, hasVariance and timer, isBarEnabled)\n\t\t\tend\n\t\t\tif guid then--But nameplate is only sent if actual GUID\n\t\t\t\tfireEvent(\"DBM_NameplateBegin\", id, msg, minTimer or (hasVariance and self.minTimer) or timer, self.icon, self.simpType, self.waSpecialKey or self.spellId, colorId, self.mod.id, self.keep, self.fade, self.name, guid, timerCount, self.isPriority, self.type, hasVariance, hasVariance and timer, isBarEnabled)\n\t\t\t\tif isBarEnabled then\n\t\t\t\t\tfireEvent(\"DBM_NameplateStart\", id, msg, minTimer or (hasVariance and self.minTimer) or timer, self.icon, self.simpType, self.waSpecialKey or self.spellId, colorId, self.mod.id, self.keep, self.fade, self.name, guid, timerCount, self.isPriority, self.type, hasVariance, hasVariance and timer)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tlocal nameplateAborted\n\t\tif isBarEnabled then\n\t\t\t--Basically tops bar from starting if it's being put on a plater nameplate, to give plater users option to have nameplate CDs without actually using the bars\n\t\t\t--This filter will only apply to trash mods though, boss timers will always be shown due to need to have them exist for Pause, Resume, Update, and GetTime/GetRemaining methods\n\t\t\tif guid and DBM.Options.DontShowTimersWithNameplates and Plater and Plater.db.profile.bossmod_support_bars_enabled and self.mod.isTrashMod then\n\t\t\t\tDBT:CancelBar(id)--Cancel bar without stop callback\n\t\t\t\tnameplateAborted = true\n\t\t\tend\n\t\tend\n\t\t--We still want to store timer references in started timers even if we didn't actually start them, so they can be tracked and stoped accordingly\n\t\tif not tContains(self.startedTimers, id) then--Make sure timer doesn't exist already before adding it\n\t\t\ttinsert(self.startedTimers, id)\n\t\tend\n\t\tself.mod:Unschedule(removeEntry, self.startedTimers, id)\n\t\tif not self.keep then--Don't ever remove startedTimers on a schedule, if it's a keep timer\n\t\t\tself.mod:Schedule(timer, removeEntry, self.startedTimers, id)\n\t\tend\n\t\tif bar and not nameplateAborted then\n\t\t\treturn bar\n\t\telse\n\t\t\treturn false, \"disabled\"\n\t\tend\n\tend\n\ttimerPrototype.Show = timerPrototype.Start\n\n\t--A way to set the fade to yes or no, overriding hardcoded value in NewTimer object with temporary one\n\t--If this method is used, it WILL persist until reload or changing it back\n\tfunction timerPrototype:SetFade(fadeOn, ...)\n\t\t--Done this way so SetFade can be used with :Start without needless performance cost (ie, ApplyStyle won't run unless it needs to)\n\t\tif fadeOn and not self.fade then\n\t\t\tself.fade = true--set timer object metatable, which will make sure next bar started uses fade\n\t\t\t--Find and Update an existing bar that's already started\n\t\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\t\tlocal bar = DBT:GetBar(id)\n\t\t\tif bar and not bar.fade then\n\t\t\t\tfireEvent(\"DBM_TimerFadeUpdate\", id, self.spellId, self.mod.id, true, self.name)--Timer ID, spellId, modId, true/nil, spellName (new callback only needed if we update an existing timers fade, self.fade is passed in timer start object for new timers)\n\t\t\t\tbar.fade = true--Set bar object metatable, which is copied from timer metatable at bar start only\n\t\t\t\tbar:ApplyStyle()\n\t\t\t\tDBM:Unschedule(playCountSound, id)--Don't even need to check option, it's faster cpu wise to just unschedule countdown either way\n\t\t\tend\n\t\telseif not fadeOn and self.fade then\n\t\t\tself.fade = nil--set timer object metatable, which will make sure next bar started does NOT use fade\n\t\t\t--Find and Update an existing bar that's already started\n\t\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\t\tlocal bar = DBT:GetBar(id)\n\t\t\tif bar and bar.fade then\n\t\t\t\tfireEvent(\"DBM_TimerFadeUpdate\", id, self.spellId, self.mod.id, nil, self.name)--Timer ID, spellId, modId, true/nil, spellName (new callback only needed if we update an existing timers fade, self.fade is passed in timer start object for new timers)\n\t\t\t\tbar.fade = nil--Set bar object metatable, which is copied from timer metatable at bar start only\n\t\t\t\tbar:ApplyStyle()\n\t\t\t\tif self.option then\n\t\t\t\t\tlocal countVoice = self.mod.Options[self.option .. \"CVoice\"] or 0\n\t\t\t\t\tif (type(countVoice) == \"string\" or countVoice > 0) then--Unfading bar, start countdown\n\t\t\t\t\t\tDBM:Unschedule(playCountSound, id)\n\t\t\t\t\t\tplayCountdown(id, bar.timer, countVoice, bar.countdownMax, bar.requiresCombat)--timerId, timer, voice, count\n\t\t\t\t\t\tDBM:Debug(\"Re-enabling a countdown on bar ID: \"..id..\" after a SetFade disable call\")\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\t--This version does NOT set timer object meta, only started bar meta\n\t--Use this if you only want to alter an already STARTED temporarily\n\t--As such it also only needs fadeOn. fadeoff isn't needed since this temp alter never affects newly started bars\n\tfunction timerPrototype:SetSTFade(fadeOn, ...)\n\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\tlocal bar = DBT:GetBar(id)\n\t\tif bar then\n\t\t\tif fadeOn and not bar.fade then\n\t\t\t\tfireEvent(\"DBM_TimerFadeUpdate\", id, self.spellId, self.mod.id, true, self.name)--Timer ID, spellId, modId, true/nil, spellName (new callback only needed if we update an existing timers fade, self.fade is passed in timer start object for new timers)\n\t\t\t\tbar.fade = true--Set bar object metatable, which is copied from timer metatable at bar start only\n\t\t\t\tbar:ApplyStyle()\n\t\t\t\tDBM:Unschedule(playCountSound, id)\n\t\t\telseif not fadeOn and bar.fade then\n\t\t\t\tfireEvent(\"DBM_TimerFadeUpdate\", id, self.spellId, self.mod.id, nil, self.name)\n\t\t\t\tbar.fade = false\n\t\t\t\tbar:ApplyStyle()\n\t\t\t\tif self.option then\n\t\t\t\t\tlocal countVoice = self.mod.Options[self.option .. \"CVoice\"] or 0\n\t\t\t\t\tif (type(countVoice) == \"string\" or countVoice > 0) then--Unfading bar, start countdown\n\t\t\t\t\t\tDBM:Unschedule(playCountSound, id)\n\t\t\t\t\t\tplayCountdown(id, bar.timer, countVoice, bar.countdownMax)--timerId, timer, voice, count\n\t\t\t\t\t\tDBM:Debug(\"Re-enabling a countdown on bar ID: \"..id..\" after a SetSTFade disable call\")\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction timerPrototype:SetSTKeep(keepOn, ...)\n\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\tlocal bar = DBT:GetBar(id)\n\t\tif bar then\n\t\t\tif keepOn and not bar.keep then\n\t\t\t\tbar.keep = true--Set bar object metatable, which is copied from timer metatable at bar start only\n\t\t\t\tbar:ApplyStyle()\n\t\t\telseif not keepOn and bar.keep then\n\t\t\t\tfireEvent(\"DBM_TimerFadeUpdate\", id, self.spellId, self.mod.id, nil)\n\t\t\t\tbar.keep = false\n\t\t\t\tbar:ApplyStyle()\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction timerPrototype:DelayedStart(delay, ...)\n\t\tDBMScheduler:Unschedule(self.Start, self.mod, self, ...)\n\t\tDBMScheduler:Schedule(delay or 0.5, self.Start, self.mod, self, ...)\n\tend\n\ttimerPrototype.DelayedShow = timerPrototype.DelayedStart\n\n\tfunction timerPrototype:Schedule(t, ...)\n\t\treturn DBMScheduler:Schedule(t, self.Start, self.mod, self, ...)\n\tend\n\n\tfunction timerPrototype:Unschedule(...)\n\t\treturn DBMScheduler:Unschedule(self.Start, self.mod, self, ...)\n\tend\n\n\t--TODO, figure out why this function doesn't properly stop count timers when calling stop without count on count timers\n\tfunction timerPrototype:Stop(...)\n\t\tif select(\"#\", ...) == 0 then\n\t\t\tfor i = #self.startedTimers, 1, -1 do\n\t\t\t\tfireEvent(\"DBM_TimerStop\", self.startedTimers[i])\n\t\t\t\tDBT:CancelBar(self.startedTimers[i])\n\t\t\t\tDBM:Unschedule(playCountSound, self.startedTimers[i])--Unschedule countdown by timerId\n\t\t\t\tDBM:Unschedule(removeEntry, self.startedTimers, self.startedTimers[i])\n\t\t\t\ttremove(self.startedTimers, i)\n\t\t\tend\n\t\telse\n\t\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\t\tfor i = #self.startedTimers, 1, -1 do\n\t\t\t\tif self.startedTimers[i] == id then\n\t\t\t\t\tlocal guid\n\t\t\t\t\tfor j = 1, select(\"#\", ...) do\n\t\t\t\t\t\tlocal v = select(j, ...)\n\t\t\t\t\t\tif DBM:IsNonPlayableGUID(v) then--Then scan them for a mob guid\n\t\t\t\t\t\t\tguid = v--If found, guid will be passed in DBM_TimerStart callback\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\tfireEvent(\"DBM_TimerStop\", id, guid)\n\t\t\t\t\tDBT:CancelBar(id)\n\t\t\t\t\tDBM:Unschedule(playCountSound, id)--Unschedule countdown by timerId\n\t\t\t\t\tDBM:Unschedule(removeEntry, self.startedTimers, self.startedTimers[i])\n\t\t\t\t\ttremove(self.startedTimers, i)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tif self.type == \"ai\" then--A learning timer\n\t\t\tif not DBM.Options.AITimer then return end\n\t\t\tself.lastCast = nil\n\t\t\tfor i = 1, 4 do\n\t\t\t\t--Check for any phase timers that are strings and never got a chance to become AI timers, then wipe them\n\t\t\t\tif self[\"phase\"..i..\"CastTimer\"] and type(self[\"phase\"..i..\"CastTimer\"]) == \"string\" then\n\t\t\t\t\tself[\"phase\"..i..\"CastTimer\"] = nil\n\t\t\t\t\tDBM:Debug(\"Wiping incomplete new timer of stage \"..i, 2)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\t--In past boss mods have always had to manually call Stop just to restart a timer, to avoid triggering false debug messages\n\t--This function should simplify boss mod creation by allowing you to \"Restart\" a timer with one call in mod instead of 2\n\tfunction timerPrototype:Restart(timer, ...)\n\t\tif self.type and (self.type == \"cdcount\" or self.type == \"nextcount\") and not self.allowdouble then\n\t\t\tself:Stop()--Cleanup any count timers left over on a restart\n\t\telse\n\t\t\tself:Stop(...)\n\t\tend\n\t\tself:Unschedule(...)--Also unschedules not yet started timers that used timer:Schedule()\n\t\tself:Start(timer, ...)\n\tend\n\ttimerPrototype.Reboot = timerPrototype.Restart\n\n\tfunction timerPrototype:Cancel(...)\n\t\tself:Stop(...)\n\t\tself:Unschedule(...)--Also unschedules not yet started timers that used timer:Schedule()\n\tend\n\n\tfunction timerPrototype:GetTime(...)\n\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\tlocal bar = DBT:GetBar(id)\n\t\treturn bar and (bar.totalTime - bar.timer) or 0, (bar and bar.totalTime) or 0\n\tend\n\n\tfunction timerPrototype:GetRemaining(...)\n\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\tlocal bar = DBT:GetBar(id)\n\t\treturn bar and bar.timer or 0\n\tend\n\n\tfunction timerPrototype:Time(...)\n\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\tlocal bar = DBT:GetBar(id)\n\t\treturn bar.totalTime or 0\n\tend\n\n\tfunction timerPrototype:IsStarted(...)\n\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\tlocal bar = DBT:GetBar(id)\n\t\treturn bar and true\n\tend\n\n\tfunction timerPrototype:SetTimer(timer)\n\t\tself.timer = timer\n\tend\n\n\tfunction timerPrototype:Update(elapsed, totalTime, ...)\n\t\tif DBM.Options.DontShowBossTimers and not self.mod.isTrashMod then return end\n\t\tif DBM.Options.DontShowTrashTimers and self.mod.isTrashMod then return end\n\t\tif self:GetTime(...) == 0 then\n\t\t\tself:Start(totalTime, ...)\n\t\tend\n\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\tlocal bar = DBT:GetBar(id)\n\t\t-- parse variance from totalTime if necessary\n\t\tlocal maxTimer, minTimer, correctedTimer\n\t\tif type(totalTime) == \"string\" and totalTime:match(\"^v%d+%.?%d*-%d+%.?%d*$\") then -- catch \"timer variance\" pattern, expressed like v10.5-20.5\n\t\t\tmaxTimer, minTimer = parseVarianceFromTimer(totalTime)\n\t\t\tcorrectedTimer = DBT.Options.VarianceEnabled and maxTimer or minTimer\n\t\tend\n\t\tfireEvent(\"DBM_TimerUpdate\", id, elapsed, (correctedTimer or totalTime))\n\t\tif bar then\n\t\t\tlocal newRemaining = (correctedTimer or totalTime)-elapsed\n\t\t\tlocal newMinRemaining = (minTimer or totalTime)-elapsed\n\t\t\tself.mod:Unschedule(removeEntry, self.startedTimers, id)\n\t\t\tif not bar.keep and newRemaining > 0 then\n\t\t\t\t--Correct table for tracked timer objects for adjusted time, or else timers may get stuck if stop is called on them\n\t\t\t\tself.mod:Schedule(newRemaining, removeEntry, self.startedTimers, id)\n\t\t\tend\n\t\t\tif self.option then\n\t\t\t\tlocal countVoice = self.mod.Options[self.option .. \"CVoice\"] or 0\n\t\t\t\tif (type(countVoice) == \"string\" or countVoice > 0) then\n\t\t\t\t\tDBM:Unschedule(playCountSound, id)\n\t\t\t\t\tif not bar.fade then--Don't start countdown voice if it's faded bar\n\t\t\t\t\t\tif newMinRemaining > 2 then\n\t\t\t\t\t\t\tplayCountdown(id, newMinRemaining, countVoice, bar.countdownMax, bar.requiresCombat)--timerId, timer, voice, count\n\t\t\t\t\t\t\tDBM:Debug(\"Updating a countdown after a timer Update call for timer ID:\"..id)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\treturn DBT:UpdateBar(id, elapsed, totalTime)\n\tend\n\n\tfunction timerPrototype:AddTime(extendAmount, ...)\n\t\tif DBM.Options.DontShowBossTimers and not self.mod.isTrashMod then return end\n\t\tif DBM.Options.DontShowTrashTimers and self.mod.isTrashMod then return end\n\t\tif self:GetTime(...) == 0 then\n\t\t\treturn self:Start(extendAmount, ...)\n\t\telse\n\t\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\t\tlocal bar = DBT:GetBar(id)\n\t\t\tif bar then\n\t\t\t\tlocal elapsed, total = (bar.totalTime - bar.timer), bar.totalTime\n\t\t\t\tif elapsed and total then\n\t\t\t\t\tlocal newRemaining = (total + extendAmount) - elapsed\n\t\t\t\t\tself.mod:Unschedule(removeEntry, self.startedTimers, id)\n\t\t\t\t\tif not bar.keep then\n\t\t\t\t\t--Correct table for tracked timer objects for adjusted time, or else timers may get stuck if stop is called on them\n\t\t\t\t\t\tself.mod:Schedule(newRemaining, removeEntry, self.startedTimers, id)\n\t\t\t\t\tend\n\t\t\t\t\tif self.option then\n\t\t\t\t\t\tlocal countVoice = self.mod.Options[self.option .. \"CVoice\"] or 0\n\t\t\t\t\t\tif (type(countVoice) == \"string\" or countVoice > 0) then\n\t\t\t\t\t\t\tDBM:Unschedule(playCountSound, id)\n\t\t\t\t\t\t\tif not bar.fade then--Don't start countdown voice if it's faded bar\n\t\t\t\t\t\t\t\tplayCountdown(id, newRemaining, countVoice, bar.countdownMax, bar.requiresCombat)--timerId, timer, voice, count\n\t\t\t\t\t\t\t\tDBM:Debug(\"Updating a countdown after a timer AddTime call for timer ID:\"..id)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\tfireEvent(\"DBM_TimerUpdate\", id, elapsed, total+extendAmount)\n\t\t\t\t\treturn DBT:UpdateBar(id, elapsed, total+extendAmount)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction timerPrototype:RemoveTime(reduceAmount, ...)\n\t\tif DBM.Options.DontShowBossTimers and not self.mod.isTrashMod then return end\n\t\tif DBM.Options.DontShowTrashTimers and self.mod.isTrashMod then return end\n\t\tif self:GetTime(...) == 0 then\n\t\t\treturn--Do nothing\n\t\telse\n\t\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\t\tlocal bar = DBT:GetBar(id)\n\t\t\tif bar then\n\t\t\t\tself.mod:Unschedule(removeEntry, self.startedTimers, id)--Needs to be unscheduled here, or the entry might just get left in table until original expire time, if new expire time is less than 0\n\t\t\t\tDBM:Unschedule(playCountSound, id)--Needs to be unscheduled here,or countdown might not be canceled if removing time made it cease to have a > 0 value\n\t\t\t\tlocal elapsed, total = (bar.totalTime - bar.timer), bar.totalTime\n\t\t\t\tif elapsed and total then\n\t\t\t\t\tlocal newRemaining = (total-reduceAmount) - elapsed\n\t\t\t\t\tif newRemaining > 0 then\n\t\t\t\t\t\t--Correct table for tracked timer objects for adjusted time, or else timers may get stuck if stop is called on them\n\t\t\t\t\t\tif not bar.keep then\n\t\t\t\t\t\t\tself.mod:Schedule(newRemaining, removeEntry, self.startedTimers, id)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif self.option and newRemaining > 2 then\n\t\t\t\t\t\t\tlocal countVoice = self.mod.Options[self.option .. \"CVoice\"] or 0\n\t\t\t\t\t\t\tif (type(countVoice) == \"string\" or countVoice > 0) then\n\t\t\t\t\t\t\t\tif not bar.fade then--Don't start countdown voice if it's faded bar\n\t\t\t\t\t\t\t\t\tif newRemaining > 2 then\n\t\t\t\t\t\t\t\t\t\tplayCountdown(id, newRemaining, countVoice, bar.countdownMax, bar.requiresCombat)--timerId, timer, voice, count\n\t\t\t\t\t\t\t\t\t\tDBM:Debug(\"Updating a countdown after a timer RemoveTime call for timer ID:\"..id)\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\tfireEvent(\"DBM_TimerUpdate\", id, elapsed, total-reduceAmount)\n\t\t\t\t\t\treturn DBT:UpdateBar(id, elapsed, total-reduceAmount)\n\t\t\t\t\telse--New remaining less than 0\n\t\t\t\t\t\tfireEvent(\"DBM_TimerStop\", id)\n\t\t\t\t\t\treturn DBT:CancelBar(id)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction timerPrototype:Pause(...)\n\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\tlocal bar = DBT:GetBar(id)\n\t\tif bar then\n\t\t\tDBM:Unschedule(playCountSound, id)--Kill countdown on pause\n\t\t\tself.mod:Unschedule(removeEntry, self.startedTimers, id)--Prevent removal from startedTimers table while bar is paused\n\t\t\tfireEvent(\"DBM_TimerPause\", id)\n\t\t\treturn bar:Pause()\n\t\tend\n\tend\n\n\tfunction timerPrototype:Resume(...)\n\t\tlocal id = self.id .. pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\tlocal bar = DBT:GetBar(id)\n\t\tif bar then\n\t\t\tlocal elapsed, total = (bar.totalTime - bar.timer), bar.totalTime\n\t\t\tif elapsed and total then\n\t\t\t\tlocal remaining = total - elapsed\n\t\t\t\tif not bar.keep then\n\t\t\t\t\tself.mod:Schedule(remaining, removeEntry, self.startedTimers, id)--Re-schedule the auto remove entry stuff\n\t\t\t\tend\n\t\t\t\t--Have to check if paused bar had a countdown on resume so we can restore it\n\t\t\t\tif self.option and not bar.fade then\n\t\t\t\t\tlocal countVoice = self.mod.Options[self.option .. \"CVoice\"] or 0\n\t\t\t\t\tif (type(countVoice) == \"string\" or countVoice > 0) then\n\t\t\t\t\t\tplayCountdown(id, remaining, countVoice, bar.countdownMax, bar.requiresCombat)--timerId, timer, voice, count\n\t\t\t\t\t\tDBM:Debug(\"Updating a countdown after a timer Resume call for timer ID:\"..id)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tfireEvent(\"DBM_TimerResume\", id)\n\t\t\treturn bar:Resume()\n\t\tend\n\tend\n\n\tfunction timerPrototype:UpdateIcon(icon, ...)\n\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\tlocal bar = DBT:GetBar(id)\n\t\tif bar then\n\t\t\treturn bar:SetIcon((type(icon) == \"number\" and ( icon <=8 and (iconFolder .. icon) or select(3, GetSpellInfo(icon)))) or icon or \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\")\n\t\tend\n\tend\n\n\tfunction timerPrototype:UpdateInline(newInline, ...)\n\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\tlocal bar = DBT:GetBar(id)\n\t\tif bar then\n\t\t\tlocal ttext = _G[bar.frame:GetName()..\"BarName\"]:GetText() or \"\"\n\t\t\treturn bar:SetText(ttext, newInline or self.inlineIcon)\n\t\tend\n\tend\n\n\tfunction timerPrototype:UpdateName(name, ...)\n\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\tlocal bar = DBT:GetBar(id)\n\t\tif bar then\n\t\t\treturn bar:SetText(name, self.inlineIcon)\n\t\tend\n\tend\n\n\tfunction timerPrototype:SetColor(c, ...)\n\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\tlocal bar = DBT:GetBar(id)\n\t\tif bar then\n\t\t\treturn bar:SetColor(c)\n\t\tend\n\tend\n\n\tfunction timerPrototype:DisableEnlarge(...)\n\t\tlocal id = self.id..pformat(((\"\\t%s\"):rep(select(\"#\", ...))), ...)\n\t\tlocal bar = DBT:GetBar(id)\n\t\tif bar then\n\t\t\tbar.small = true\n\t\tend\n\tend\n\n\tfunction timerPrototype:AddOption(optionDefault, optionName, colorType, countdown, spellId, optionType)\n\t\tif optionName ~= false then\n\t\t\tself.option = optionName or self.id\n\t\t\tself.mod:AddBoolOption(self.option, optionDefault, \"timer\", nil, colorType, countdown, spellId, optionType)\n\t\tend\n\tend\n\n\t--If a new countdown default is added to a NewTimer object, change optionName of timer to reset a new default\n\tfunction bossModPrototype:NewTimer(timer, name, texture, optionDefault, optionName, colorType, inlineIcon, keep, countdown, countdownMax, r, g, b, spellId, requiresCombat, waCustomName, customType, isPriority)\n\t\tif r and type(r) == \"string\" then\n\t\t\tDBM:Debug(\"|cffff0000r probably has inline icon in it and needs to be fixed for |r\" .. name .. r)\n\t\t\tr = nil--Fix it for users\n\t\tend\n\t\tif inlineIcon and type(inlineIcon) == \"number\" then\n\t\t\tDBM:Debug(\"|cffff0000spellID texture path or colorType is in inlineIcon field and needs to be fixed for |r\" .. name .. inlineIcon)\n\t\t\tinlineIcon = nil--Fix it for users\n\t\tend\n\t\tlocal hasVariance, timerStringWithVariance, minTimer, varianceDuration\n\t\tif type(timer) == \"string\" then\n\t\t\tif timer:match(\"^v%d+%.?%d*%-%d+%.?%d*$\") then -- parse variance, e.g. \"v20.5-25.5\"\n\t\t\t\thasVariance = true\n\t\t\t\ttimerStringWithVariance = timer\n\t\t\t\ttimer, minTimer, varianceDuration = parseVarianceFromTimer(timer)\n\t\t\tend\n\t\tend\n\t\tlocal icon = type(texture) == \"number\" and ( texture <=8 and (iconFolder .. texture) or select(3, GetSpellInfo(texture))) or texture or \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\"\n\t\tlocal waSpecialKey, simpType\n\t\tif customType then\n\t\t\tsimpType = timerTypeSimplification[customType] or customType\n\t\t\twaSpecialKey = waKeyOverrides[customType]\n\t\tend\n\t\tlocal obj = setmetatable(\n\t\t\t{\n\t\t\t\tobjClass = \"Timer\",\n\t\t\t\ttext = self.localization.timers[name],\n\t\t\t\ttype = customType or \"cd\",--Auto assign\n\t\t\t\tsimpType = simpType or \"cd\",\n\t\t\t\twaSpecialKey = waSpecialKey,\n\t\t\t\tspellId = spellId,--Allows Localized timer text to still have a spellId arg weak auras can latch onto\n\t\t\t\ttimer = timer,\n\t\t\t\tid = name,\n\t\t\t\ticon = icon,\n\t\t\t\tcolorType = colorType or 0,\n\t\t\t\tinlineIcon = inlineIcon,\n\t\t\t\tkeep = keep,\n\t\t\t\tcountdown = countdown,\n\t\t\t\tcountdownMax = countdownMax,\n\t\t\t\tr = r,\n\t\t\t\tg = g,\n\t\t\t\tb = b,\n\t\t\t\trequiresCombat = requiresCombat,\n\t\t\t\thasVariance = hasVariance,\n\t\t\t\tminTimer = minTimer,\n\t\t\t\ttimerStringWithVariance = timerStringWithVariance,\n\t\t\t\tvarianceDuration = varianceDuration,\n\t\t\t\tstartedTimers = {},\n\t\t\t\tmod = self,\n\t\t\t\tstartLarge = nil,\n\t\t\t\tisPriority = isPriority,\n\t\t\t},\n\t\t\tmt\n\t\t)\n\t\tobj:AddOption(optionDefault, optionName, colorType, countdown, spellId, nil, waCustomName)\n\t\ttinsert(self.timers, obj)\n\t\treturn obj\n\tend\n\n\t-- new constructor for the new auto-localized timer types\n\t-- note that the function might look unclear because it needs to handle different timer types, especially achievement timers need special treatment\n\t-- If a new countdown is added to an existing timer that didn't have one before, use optionName (number) to force timer to reset defaults by assigning it a new variable\n\tlocal function newTimer(self, timerType, timer, spellId, timerText, optionDefault, optionName, colorType, texture, inlineIcon, keep, countdown, countdownMax, r, g, b, requiresCombat, isPriority)\n\t\tif type(timer) == \"string\" and timer:match(\"OptionVersion\") then\n\t\t\tDBM:Debug(\"|cffff0000OptionVersion hack depricated, remove it from: |r\"..spellId)\n\t\t\treturn\n\t\tend\n\t\tif type(colorType) == \"number\" and colorType > 7 then\n\t\t\tDBM:Debug(\"|cffff0000texture is in the colorType arg for: |r\"..spellId)\n\t\tend\n\t\t--Use option optionName for optionVersion as well, no reason to split.\n\t\t--This ensures that remaining arg positions match for auto generated and regular NewTimer\n\t\tlocal optionVersion\n\t\tif type(optionName) == \"number\" then\n\t\t\toptionVersion = optionName\n\t\t\toptionName = nil\n\t\tend\n\t\tlocal allowdouble, hasVariance, timerStringWithVariance, minTimer, varianceDuration, timerStringVarianceGUI\n\t\tif type(timer) == \"string\" then\n\t\t\tif timer:match(\"d%d+\") then -- parse doubling timers, e.g. \"d20\"\n\t\t\t\tallowdouble = true\n\t\t\t\ttimer = tonumber(string.sub(timer, 2))\n\t\t\telseif timer:match(\"^v%d+%.?%d*%-%d+%.?%d*$\") then -- parse variance, e.g. \"v20.5-25.5\"\n\t\t\t\thasVariance = true\n\t\t\t\ttimerStringWithVariance = timer\n\t\t\t\ttimer, minTimer, varianceDuration = parseVarianceFromTimer(timer)\n\t\t\t\ttimerStringVarianceGUI = (\"%s-%s\"):format(minTimer, timer)\n\t\t\telseif timer:match(\"dv%d+%.?%d*%-%d+%.?%d*$\") then -- parse doubling and variance, e.g. \"dv20.5-25.5\"\n\t\t\t\tallowdouble = true\n\t\t\t\thasVariance = true\n\t\t\t\ttimerStringWithVariance = timer\n\t\t\t\ttimer, minTimer, varianceDuration = parseVarianceFromTimer(timer)\n\t\t\t\ttimerStringVarianceGUI = (\"%s-%s\"):format(minTimer, timer)\n\t\t\telse\n\t\t\t\terror(\"bad string timer, expected number or string starting with d, v, or dv\", 2)\n\t\t\tend\n\t\tend\n\t\tlocal spellName, icon\n\t\tlocal unparsedId = spellId\n\t\tif timerType == \"achievement\" then\n\t\t\tspellName = select(2, GetAchievementInfo(spellId))\n\t\t\ticon = type(texture) == \"number\" and select(10, GetAchievementInfo(texture)) or texture or spellId and select(10, GetAchievementInfo(spellId))\n\t\telseif timerType == \"cdspecial\" or timerType == \"nextspecial\" or timerType == \"stage\" or timerType == \"stagecount\" or timerType == \"stagecountcycle\" or timerType == \"stagecontext\" or timerType == \"stagecontextcount\" or timerType == \"intermission\" or timerType == \"intermissioncount\" then\n\t\t\ticon = type(texture) == \"number\" and select(3, GetSpellInfo(texture)) or texture or (type(spellId) == \"number\" and select(3, GetSpellInfo(spellId))) or \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\"\n\t\t\tif timerType == \"stage\" or timerType == \"stagecount\" or timerType == \"stagecountcycle\" or timerType == \"stagecontext\" or timerType == \"stagecontextcount\" or timerType == \"intermission\" or timerType == \"intermissioncount\" then\n\t\t\t\tcolorType = 6\n\t\t\tend\n\t\telseif timerType == \"roleplay\" then\n\t\t\ticon = type(texture) == \"number\" and select(3, GetSpellInfo(texture)) or texture or (type(spellId) == \"number\" and select(3, GetSpellInfo(spellId))) or \"Interface\\\\Icons\\\\SPELL_HOLY_BORROWEDTIME\"\n\t\t\tcolorType = 6\n\t\telseif timerType == \"adds\" or timerType == \"addscustom\" then\n\t\t\ticon = type(texture) == \"number\" and select(3, GetSpellInfo(texture)) or texture or (type(spellId) == \"number\" and select(3, GetSpellInfo(spellId))) or \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\"\n\t\t\tcolorType = 1\n\t\telse\n\t\t\tspellName = DBM:GetSpellInfo(spellId or 0)\n\t\t\tif spellName then\n\t\t\t\ticon = type(texture) == \"number\" and ( texture <=8 and (iconFolder .. texture) or select(3, GetSpellInfo(texture))) or texture or spellId and select(3, GetSpellInfo(spellId))\n\t\t\telse\n\t\t\t\ticon = nil\n\t\t\tend\n\t\tend\n\t\tspellName = spellName or tostring(spellId)\n\t\tlocal timerTextValue\n\t\tif timerText then\n\t\t\t--If timertext is a number, accept it as a secondary auto translate spellid\n\t\t\tif DBM.Options.ShortTimerText and type(timerText) == \"number\" then\n\t\t\t\ttimerTextValue = timerText\n\t\t\t\tspellName = DBM:GetSpellInfo(timerText or 0)--Override Cached spell Name\n\t\t\telse\n\t\t\t\ttimerTextValue = self.localization.timers[timerText] or timerText--Check timers table first, otherwise accept it as literal timer text\n\t\t\tend\n\t\tend\n\t\tlocal id = \"Timer\" .. (spellId or 0) .. timerType .. (optionVersion or \"\")\n\t\tlocal simpType = timerTypeSimplification[timerType] or timerType\n\t\tlocal waSpecialKey = waKeyOverrides[timerType]\n\t\tlocal obj = setmetatable(\n\t\t\t{\n\t\t\t\tobjClass = \"Timer\",\n\t\t\t\ttext = timerTextValue,\n\t\t\t\ttype = timerType,\n\t\t\t\tsimpType = simpType,\n\t\t\t\twaSpecialKey = waSpecialKey,--Not same as simpType, this overrides option key\n\t\t\t\tspellId = spellId,\n\t\t\t\tname = spellName,--If name gets stored as nil, it'll be corrected later in Timer start, if spell name returns in a later attempt\n\t\t\t\ttimer = timer,\n\t\t\t\tid = id,\n\t\t\t\ticon = icon,\n\t\t\t\tcolorType = colorType,\n\t\t\t\tinlineIcon = inlineIcon,\n\t\t\t\tkeep = keep,\n\t\t\t\tcountdown = countdown,\n\t\t\t\tcountdownMax = countdownMax,\n\t\t\t\tr = r,\n\t\t\t\tg = g,\n\t\t\t\tb = b,\n\t\t\t\trequiresCombat = requiresCombat,\n\t\t\t\tisPriority = isPriority or false,\n\t\t\t\tallowdouble = allowdouble,\n\t\t\t\thasVariance = hasVariance,\n\t\t\t\tminTimer = minTimer,\n\t\t\t\ttimerStringWithVariance = timerStringWithVariance,\n\t\t\t\tvarianceDuration = varianceDuration,\n\t\t\t\tstartedTimers = {},\n\t\t\t\tmod = self,\n\t\t\t},\n\t\t\tmt\n\t\t)\n\t\tobj:AddOption(optionDefault, optionName, colorType, countdown, spellId, timerType)\n\t\ttinsert(self.timers, obj)\n\t\t-- todo: move the string creation to the GUI with SetFormattedString...\n\t\tif timerType == \"achievement\" then\n\t\t\tself.localization.options[id] = L.AUTO_TIMER_OPTIONS[timerType]:format(GetAchievementLink(spellId):gsub(\"%[(.+)%]\", \"%1\"), timer)\n\t\telseif timerType == \"cdspecial\" or timerType == \"cdcombo\" or timerType == \"nextspecial\" or timerType == \"nextcombo\" or timerType == \"stage\" or timerType == \"stagecount\" or timerType == \"stagecountcycle\" or timerType == \"intermission\" or timerType == \"intermissioncount\" or timerType == \"adds\" or timerType == \"addscustom\" or timerType == \"roleplay\" or timerType == \"combat\" then--Timers without spellid, generic (do not add stagecontext here, it has spellname parsing)\n\t\t\tself.localization.options[id] = L.AUTO_TIMER_OPTIONS[timerType]:format(timerStringVarianceGUI or timer)--Using more than 1 stage timer or more than 1 special timer will break this, fortunately you should NEVER use more than 1 of either in a mod\n\t\telse\n\t\t\tself.localization.options[id] = L.AUTO_TIMER_OPTIONS[timerType]:format(unparsedId, timerStringVarianceGUI or timer)\n\t\tend\n\t\treturn obj\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewTargetTimer(...)\n\t\treturn newTimer(self, \"target\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewTargetCountTimer(...)\n\t\treturn newTimer(self, \"targetcount\", ...)\n\tend\n\n\t--Buff/Debuff/event on boss\n\tfunction bossModPrototype:NewBuffActiveTimer(...)\n\t\treturn newTimer(self, \"active\", ...)\n\tend\n\n\t----Buff/Debuff on players\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewBuffFadesTimer(...)\n\t\treturn newTimer(self, \"fades\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewCastTimer(timer, ...)\n\t\tif tonumber(timer) and timer > 1000 then -- hehe :) best hack in DBM. This makes the first argument optional, so we can omit it to use the cast time from the spell id ;)\n\t\t\tlocal spellId = timer\n\t\t\ttimer = select(7, DBM:GetSpellInfo(spellId)) or 1000 -- GetSpellInfo takes YOUR spell haste into account...WTF?\n\t\t\tlocal spellHaste = select(7, DBM:GetSpellInfo(53142)) / 10000 -- 53142 = Dalaran Portal, should have 10000 ms cast time\n\t\t\ttimer = timer / spellHaste -- calculate the real cast time of the spell...\n\t\t\treturn self:NewCastTimer(timer / 1000, spellId, ...)\n\t\tend\n\t\treturn newTimer(self, \"cast\", timer, ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewCastCountTimer(timer, ...)\n\t\tif tonumber(timer) and timer > 1000 then -- hehe :) best hack in DBM. This makes the first argument optional, so we can omit it to use the cast time from the spell id ;)\n\t\t\tlocal spellId = timer\n\t\t\ttimer = select(7, DBM:GetSpellInfo(spellId)) or 1000 -- GetSpellInfo takes YOUR spell haste into account...WTF?\n\t\t\tlocal spellHaste = select(7, DBM:GetSpellInfo(53142)) / 10000 -- 53142 = Dalaran Portal, should have 10000 ms cast time\n\t\t\ttimer = timer / spellHaste -- calculate the real cast time of the spell...\n\t\t\treturn self:NewCastTimer(timer / 1000, spellId, ...)\n\t\tend\n\t\treturn newTimer(self, \"castcount\", timer, ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewCastSourceTimer(timer, ...)\n\t\tif tonumber(timer) and timer > 1000 then -- hehe :) best hack in DBM. This makes the first argument optional, so we can omit it to use the cast time from the spell id ;)\n\t\t\tlocal spellId = timer\n\t\t\ttimer = select(7, DBM:GetSpellInfo(spellId)) or 1000 -- GetSpellInfo takes YOUR spell haste into account...WTF?\n\t\t\tlocal spellHaste = select(7, DBM:GetSpellInfo(53142)) / 10000 -- 53142 = Dalaran Portal, should have 10000 ms cast time\n\t\t\ttimer = timer / spellHaste -- calculate the real cast time of the spell...\n\t\t\treturn self:NewCastSourceTimer(timer / 1000, spellId, ...)\n\t\tend\n\t\treturn newTimer(self, \"castsource\", timer, ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewCDTimer(...)\n\t\treturn newTimer(self, \"cd\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewCDCountTimer(...)\n\t\treturn newTimer(self, \"cdcount\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewCDSourceTimer(...)\n\t\treturn newTimer(self, \"cdsource\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewCDSpecialTimer(...)\n\t\treturn newTimer(self, \"cdspecial\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewNextTimer(...)\n\t\treturn newTimer(self, \"next\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewNextCountTimer(...)\n\t\treturn newTimer(self, \"nextcount\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewNextSourceTimer(...)\n\t\treturn newTimer(self, \"nextsource\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewNextSpecialTimer(...)\n\t\treturn newTimer(self, \"nextspecial\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewVarTimer(...)\n\t\treturn newTimer(self, \"var\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewVarCountTimer(...)\n\t\treturn newTimer(self, \"varcount\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewVarSourceTimer(...)\n\t\treturn newTimer(self, \"varsource\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewVarSpecialTimer(...)\n\t\treturn newTimer(self, \"varspecial\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewVarComboTimer(...)\n\t\treturn newTimer(self, \"varcombo\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewAchievementTimer(...)\n\t\treturn newTimer(self, \"achievement\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewPhaseTimer(...)\n\t\treturn newTimer(self, \"stage\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewRPTimer(...)\n\t\treturn newTimer(self, \"roleplay\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewAddsTimer(...)\n\t\treturn newTimer(self, \"adds\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewAddsCustomTimer(...)\n\t\treturn newTimer(self, \"addscustom\", ...)\n\tend\n\n\tfunction bossModPrototype:NewNextNPTimer(...)\n\t\treturn newTimer(self, \"nextnp\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewCDNPTimer(...)\n\t\treturn newTimer(self, \"cdnp\", ...)\n\tend\n\n\tfunction bossModPrototype:NewCDCountNPTimer(...)\n\t\treturn newTimer(self, \"cdcountnp\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewNextCountNPTimer(...)\n\t\treturn newTimer(self, \"nextcountnp\", ...)\n\tend\n\n\t---@overload fun(self: DBMMod, timer: number|string, spellId: number|string?, timerText: number|string?, optionDefault: SpecFlags|boolean?, optionName: string|number|boolean?, colorType: number?, texture: number|string?, inlineIcon: string?, keep: boolean?, countdown: number?, countdownMax: number?, r: number?, g: number?, b: number?, requiresCombat: boolean?, isPriority: boolean?): Timer\n\tfunction bossModPrototype:NewAITimer(...)\n\t\treturn newTimer(self, \"ai\", ...)\n\tend\n\n\tfunction bossModPrototype:GetLocalizedTimerText(timerType, spellId, Name)\n\t\tlocal spellName\n\t\tif Name then\n\t\t\tspellName = Name--Pull from name stored in object\n\t\telseif spellId then\n\t\t\tDBM:Debug(\"|cffff0000GetLocalizedTimerText fallback, this should not happen and is a bug. this fallback should be deleted if this message is never seen after async code is live|r\")\n\t\t\tif timerType == \"achievement\" then\n\t\t\t\tspellName = select(2, GetAchievementInfo(spellId))\n\t\t\telse\n\t\t\t\tspellName = DBM:GetSpellInfo(spellId)\n\t\t\tend\n\t\t\t--Name wasn't provided, but we succeeded in getting a name, generate one into object now for caching purposes\n\t\t\t--This would really only happen if GetSpellInfo failed to return spell name on first attempt (which now happens in 9.0)\n\t\t\tif spellName then\n\t\t\t\tself.name = spellName\n\t\t\tend\n\t\tend\n\t\tif L.AUTO_TIMER_TEXTS[timerType..\"short\"] and DBT.Options.StripCDText then\n\t\t\treturn pformat(L.AUTO_TIMER_TEXTS[timerType..\"short\"], spellName)\n\t\telse\n\t\t\treturn pformat(L.AUTO_TIMER_TEXTS[timerType], spellName)\n\t\tend\n\tend\nend\n\n------------------------------\n--  Berserk/Combat Objects  --\n------------------------------\ndo\n\tlocal enragePrototype = {}\n\tlocal mt = {__index = enragePrototype}\n\n\tfunction enragePrototype:Start(timer)\n\t\ttimer = timer or self.timer or 600\n\t\ttimer = timer <= 0 and self.timer - mabs(timer) or timer\n\t\tself.bar:SetTimer(timer)\n\t\tself.bar:Start()\n\t\tif self.warning1 then\n\t\t\tif timer > 660 then self.warning1:Schedule(timer - 600, 10, L.MIN) end\n\t\t\tif timer > 300 then self.warning1:Schedule(timer - 300, 5, L.MIN) end\n\t\t\tif timer > 180 then self.warning2:Schedule(timer - 180, 3, L.MIN) end\n\t\tend\n\t\tif self.warning2 then\n\t\t\tif timer > 60 then self.warning2:Schedule(timer - 60, 1, L.MIN) end\n\t\t\tif timer > 30 then self.warning2:Schedule(timer - 30, 30, L.SEC) end\n\t\t\tif timer > 10 then self.warning2:Schedule(timer - 10, 10, L.SEC) end\n\t\tend\n\tend\n\n\tfunction enragePrototype:Schedule(t)\n\t\treturn self.owner:Schedule(t, self.Start, self)\n\tend\n\n\tfunction enragePrototype:Cancel()\n\t\tself.owner:Unschedule(self.Start, self)\n\t\tif self.warning1 then\n\t\t\tself.warning1:Cancel()\n\t\tend\n\t\tif self.warning2 then\n\t\t\tself.warning2:Cancel()\n\t\tend\n\t\tself.bar:Stop()\n\tend\n\tenragePrototype.Stop = enragePrototype.Cancel\n\n\tfunction bossModPrototype:NewBerserkTimer(timer, text, barText, barIcon)\n\t\ttimer = timer or 600\n\t\tlocal warning1 = self:NewAnnounce(text or L.GENERIC_WARNING_BERSERK, 1, nil, \"warning_berserk\", false)\n\t\tlocal warning2 = self:NewAnnounce(text or L.GENERIC_WARNING_BERSERK, 4, nil, \"warning_berserk\", false)\n\t\t--timer, name, icon, optionDefault, optionName, colorType, inlineIcon, keep, countdown, countdownMax, r, g, b, spellId, requiresCombat, waCustomName, customType\n\t\tlocal bar = self:NewTimer(timer, barText or L.GENERIC_TIMER_BERSERK, barIcon or 28131, nil, \"timer_berserk\", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, \"berserk\")\n\t\tlocal obj = setmetatable(\n\t\t\t{\n\t\t\t\twarning1 = warning1,\n\t\t\t\twarning2 = warning2,\n\t\t\t\tbar = bar,\n\t\t\t\ttimer = timer,\n\t\t\t\towner = self\n\t\t\t},\n\t\t\tmt\n\t\t)\n\t\treturn obj\n\tend\n\n\tfunction bossModPrototype:NewCombatTimer(timer, _, barText, barIcon) -- timer, text, barText, barIcon\n\t\ttimer = timer or 10\n\t\t--NewTimer(timer, name, texture, optionDefault, optionName, colorType, inlineIcon, keep, countdown, countdownMax, r, g, b)\n\t\tlocal bar = self:NewTimer(timer, barText or L.GENERIC_TIMER_COMBAT, barIcon or \"Interface\\\\Icons\\\\Ability_Warrior_OffensiveStance\", nil, \"timer_combat\", nil, nil, nil, 1, 5, nil, nil, nil, nil, nil, nil, \"combat\")\n\t\tlocal obj = setmetatable(\n\t\t\t{\n\t\t\t\tbar = bar,\n\t\t\t\ttimer = timer,\n\t\t\t\towner = self\n\t\t\t},\n\t\t\tmt\n\t\t)\n\t\treturn obj\n\tend\nend\n\n---------------\n--  Options  --\n---------------\nfunction bossModPrototype:AddBoolOption(name, default, cat, func, extraOption, extraOptionTwo, spellId, optionType)\n\tif checkDuplicateObjects[name] and name ~= \"timer_berserk\" and name ~= \"HealthFrame\" then\n\t\tDBM:Debug(\"|cffff0000Option already exists for: |r\"..name)\n\telse\n\t\tcheckDuplicateObjects[name] = true\n\tend\n\tcat = cat or \"misc\"\n\tself.DefaultOptions[name] = (default == nil) or default\n\tif cat == \"timer\" then\n\t\tself.DefaultOptions[name..\"TColor\"] = extraOption or 0\n\t\tself.DefaultOptions[name..\"CVoice\"] = extraOptionTwo or 0\n\tend\n\tif default and type(default) == \"string\" then\n\t\tdefault = self:GetRoleFlagValue(default)\n\tend\n\tself.Options[name] = (default == nil) or default\n\tif cat == \"timer\" then\n\t\tself.Options[name..\"TColor\"] = extraOption or 0\n\t\tself.Options[name..\"CVoice\"] = extraOptionTwo or 0\n\tend\n\tif spellId then\n\t\tif optionType and optionType == \"achievement\" then\n\t\t\tspellId = \"at\"..spellId--\"at\" for achievement timer\n\t\tend\n\t\tself:GroupSpells(spellId, name)\n\tend\n\tself:SetOptionCategory(name, cat, optionType)\n\tif func then\n\t\tself.optionFuncs = self.optionFuncs or {}\n\t\tself.optionFuncs[name] = func\n\tend\nend\n\nfunction bossModPrototype:AddSpecialWarningOption(name, default, defaultSound, cat, spellId, optionType)\n\tif checkDuplicateObjects[name] then\n\t\tDBM:Debug(\"|cffff0000Option already exists for: |r\"..name)\n\telse\n\t\tcheckDuplicateObjects[name] = true\n\tend\n\tcat = cat or \"misc\"\n\tself.DefaultOptions[name] = (default == nil) or default\n\tself.DefaultOptions[name..\"SWSound\"] = defaultSound or 1\n\tself.DefaultOptions[name..\"SWNote\"] = true\n\tif default and type(default) == \"string\" then\n\t\tdefault = self:GetRoleFlagValue(default)\n\tend\n\tself.Options[name] = (default == nil) or default\n\tself.Options[name..\"SWSound\"] = defaultSound or 1\n\tself.Options[name..\"SWNote\"] = true\n\tif spellId then\n\t\tself:GroupSpells(spellId, name)\n\tend\n\tself:SetOptionCategory(name, cat, optionType)\nend\n\n--[[\n--auraspellId must match debuff ID so EnablePrivateAuraSound function can call right option key and right debuff ID\n--groupSpellId is used if a diff option key is used in all other options with spell (will be quite common)\nfunction bossModPrototype:AddPrivateAuraSoundOption(auraspellId, default, groupSpellId)\n\tself.DefaultOptions[\"PrivateAuraSound\"..auraspellId] = (default == nil) or default\n\tif default and type(default) == \"string\" then\n\t\tdefault = self:GetRoleFlagValue(default)\n\tend\n\tself.Options[\"PrivateAuraSound\"..auraspellId] = (default == nil) or default\n\tself.localization.options[\"PrivateAuraSound\"..auraspellId] = L.AUTO_PRIVATEAURA_OPTION_TEXT:format(auraspellId)\n\tself:GroupSpells(groupSpellId or auraspellId, \"PrivateAuraSound\"..auraspellId)\n\tself:SetOptionCategory(\"PrivateAuraSound\"..auraspellId, \"misc\")\nend\n\n--Function to actually register specific media to specific auras\n--auraspellId: Private aura spellId\n--voice: voice pack media path\n--voiceVersion: Required voice pack verion (if not met, falls back to airhorn\nfunction bossModPrototype:EnablePrivateAuraSound(auraspellId, voice, voiceVersion)\n\tif self.Options[\"PrivateAuraSound\"..auraspellId] then\n\t\tif not self.paSounds then self.paSounds = {} end\n\t\tlocal mediaPath\n\t\t--Check valid voice pack sound\n\t\tlocal chosenVoice = DBM.Options.ChosenVoicePack2\n\t\tif chosenVoice ~= \"None\" and not voiceSessionDisabled and voiceVersion <= SWFilterDisabled then\n\t\t\tmediaPath = \"Interface\\\\AddOns\\\\DBM-VP\"..chosenVoice..\"\\\\\"..voice..\".ogg\"\n\t\telse\n\t\t\tmediaPath = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\AirHorn.ogg\"\n\t\tend\n\t\tself.paSounds[#self.paSounds + 1] = C_UnitAuras.AddPrivateAuraAppliedSound({\n\t\t\tspellID = auraspellId,\n\t\t\tunitToken = \"player\",\n\t\t\tsoundFileName = mediaPath,\n\t\t\toutputChannel = \"master\",\n\t\t})\n\tend\nend\n\nfunction bossModPrototype:DisablePrivateAuraSounds()\n\tfor _, id in next, self.paSounds do\n\t\tC_UnitAuras.RemovePrivateAuraAppliedSound(id)\n\tend\n\tself.paSounds = nil\nend\n--]]\n\n--Extended Icon Usage Notes\n--Any time extended icons is used, option must be OFF by default\n--Option must be hidden from GUI if extended icoins not enabled\n--If extended icons are disabled, then on mod load, users option is reset to default (off) to prevent their mod from still executing SetIcon functions (this is because even if it's hidden from GUI, if option was created and enabled, it'd still run)\nfunction bossModPrototype:AddSetIconOption(name, spellId, default, iconType, iconsUsed, conflictWarning)\n\tself.DefaultOptions[name] = (default == nil) or default\n\tif default and type(default) == \"string\" then\n\t\tdefault = self:GetRoleFlagValue(default)\n\tend\n\tself.Options[name] = (default == nil) or default\n\tif spellId and not DBM.Options.GroupOptionsExcludeIcon then\n\t\tself:GroupSpells(spellId, name)\n\tend\n\tself:SetOptionCategory(name, \"icon\")\n\t--Legacy bool and nil support\n\tif type(iconType) ~= \"number\" then\n\t\tif iconType then--true\n\t\t\ticonType = 5\n\t\telse --false/nil\n\t\t\ticonType = 0\n\t\tend\n\tend\n\tif iconType == 1 then\n\t\tself.localization.options[name] = spellId and L.AUTO_ICONS_OPTION_TARGETS_MELEE_A:format(spellId) or self.localization.options[name]\n\telseif iconType == 2 then\n\t\tself.localization.options[name] = spellId and L.AUTO_ICONS_OPTION_TARGETS_MELEE_R:format(spellId) or self.localization.options[name]\n\telseif iconType == 3 then\n\t\tself.localization.options[name] = spellId and L.AUTO_ICONS_OPTION_TARGETS_RANGED_A:format(spellId) or self.localization.options[name]\n\telseif iconType == 4 then\n\t\tself.localization.options[name] = spellId and L.AUTO_ICONS_OPTION_TARGETS_RANGED_R:format(spellId) or self.localization.options[name]\n\telseif iconType == 5 then\n\t\t--NPC/Mob setting uses icon elect feature and needs to establish latency check table\n\t\tif not self.findFastestComputer then\n\t\t\tself.findFastestComputer = {}\n\t\tend\n\t\tself.findFastestComputer[#self.findFastestComputer + 1] = name\n\t\tself.localization.options[name] = spellId and L.AUTO_ICONS_OPTION_NPCS:format(spellId) or self.localization.options[name]\n\telseif iconType == 6 then\n\t\tself.localization.options[name] = spellId and L.AUTO_ICONS_OPTION_TARGETS_ALPHA:format(spellId) or self.localization.options[name]\n\telseif iconType == 7 then\n\t\tself.localization.options[name] = spellId and L.AUTO_ICONS_OPTION_TARGETS_ROSTER:format(spellId) or self.localization.options[name]\n\telseif iconType == 8 then\n\t\tself.localization.options[name] = spellId and L.AUTO_ICONS_OPTION_TARGETS_TANK_A:format(spellId) or self.localization.options[name]\n\telseif iconType == 9 then\n\t\tself.localization.options[name] = spellId and L.AUTO_ICONS_OPTION_TARGETS_TANK_R:format(spellId) or self.localization.options[name]\n\telse--Type 0 (Generic for targets)\n\t\tself.localization.options[name] = spellId and L.AUTO_ICONS_OPTION_TARGETS:format(spellId) or self.localization.options[name]\n\tend\n\t--A table defining used icons by number, insert icon textures to end of option\n\tif iconsUsed then\n\t\tself.localization.options[name] = self.localization.options[name]..\" (\"\n\t\tfor i=1, #iconsUsed do\n\t\t\t--Texture ID 137009 if direct calling RaidTargetingIcons stops working one day\n\t\t\tif\t\ticonsUsed[i] == 1 then\t\tself.localization.options[name] = self.localization.options[name]..\"|TInterface\\\\TargetingFrame\\\\UI-RaidTargetingIcons.blp:13:13:0:0:64:64:0:16:0:16|t\"\n\t\t\telseif\ticonsUsed[i] == 2 then\t\tself.localization.options[name] = self.localization.options[name]..\"|TInterface\\\\TargetingFrame\\\\UI-RaidTargetingIcons.blp:13:13:0:0:64:64:16:32:0:16|t\"\n\t\t\telseif\ticonsUsed[i] == 3 then\t\tself.localization.options[name] = self.localization.options[name]..\"|TInterface\\\\TargetingFrame\\\\UI-RaidTargetingIcons.blp:13:13:0:0:64:64:32:48:0:16|t\"\n\t\t\telseif\ticonsUsed[i] == 4 then\t\tself.localization.options[name] = self.localization.options[name]..\"|TInterface\\\\TargetingFrame\\\\UI-RaidTargetingIcons.blp:13:13:0:0:64:64:48:64:0:16|t\"\n\t\t\telseif\ticonsUsed[i] == 5 then\t\tself.localization.options[name] = self.localization.options[name]..\"|TInterface\\\\TargetingFrame\\\\UI-RaidTargetingIcons.blp:13:13:0:0:64:64:0:16:16:32|t\"\n\t\t\telseif\ticonsUsed[i] == 6 then\t\tself.localization.options[name] = self.localization.options[name]..\"|TInterface\\\\TargetingFrame\\\\UI-RaidTargetingIcons.blp:13:13:0:0:64:64:16:32:16:32|t\"\n\t\t\telseif\ticonsUsed[i] == 7 then\t\tself.localization.options[name] = self.localization.options[name]..\"|TInterface\\\\TargetingFrame\\\\UI-RaidTargetingIcons.blp:13:13:0:0:64:64:32:48:16:32|t\"\n\t\t\telseif\ticonsUsed[i] == 8 then\t\tself.localization.options[name] = self.localization.options[name]..\"|TInterface\\\\TargetingFrame\\\\UI-RaidTargetingIcons.blp:13:13:0:0:64:64:48:64:16:32|t\"\n\t\t\tend\n\t\tend\n\t\tself.localization.options[name] = self.localization.options[name]..\")\"\n\t\tif conflictWarning then\n\t\t\tself.localization.options[name] = self.localization.options[name] .. L.AUTO_ICONS_OPTION_CONFLICT\n\t\tend\n\tend\nend\n\nfunction bossModPrototype:AddArrowOption(name, spellId, default, isRunTo)\n\tif isRunTo == true then isRunTo = 2 end--Support legacy\n\tself.DefaultOptions[name] = (default == nil) or default\n\tif default and type(default) == \"string\" then\n\t\tdefault = self:GetRoleFlagValue(default)\n\tend\n\tself.Options[name] = (default == nil) or default\n\tself:GroupSpells(spellId, name)\n\tself:SetOptionCategory(name, \"misc\")\n\tif isRunTo == 2 then\n\t\tself.localization.options[name] = L.AUTO_ARROW_OPTION_TEXT:format(spellId)\n\telseif isRunTo == 3 then\n\t\tself.localization.options[name] = L.AUTO_ARROW_OPTION_TEXT3:format(spellId)\n\telse\n\t\tself.localization.options[name] = L.AUTO_ARROW_OPTION_TEXT2:format(spellId)\n\tend\nend\n\nfunction bossModPrototype:AddRangeFrameOption(range, spellId, default)\n\tself.DefaultOptions[\"RangeFrame\"] = (default == nil) or default\n\tif default and type(default) == \"string\" then\n\t\tdefault = self:GetRoleFlagValue(default)\n\tend\n\tself.Options[\"RangeFrame\"] = (default == nil) or default\n\tif spellId then\n\t\tself:GroupSpells(spellId, \"RangeFrame\")\n\t\tself.localization.options[\"RangeFrame\"] = L.AUTO_RANGE_OPTION_TEXT:format(range, spellId)\n\telse\n\t\tself.localization.options[\"RangeFrame\"] = L.AUTO_RANGE_OPTION_TEXT_SHORT:format(range)\n\tend\n\tself:SetOptionCategory(\"RangeFrame\", \"misc\")\nend\n\nfunction bossModPrototype:AddHudMapOption(name, spellId, default)\n\tself.DefaultOptions[name] = (default == nil) or default\n\tif default and type(default) == \"string\" then\n\t\tdefault = self:GetRoleFlagValue(default)\n\tend\n\tself.Options[name] = (default == nil) or default\n\tif spellId then\n\t\tself:GroupSpells(spellId, name)\n\t\tself.localization.options[name] = L.AUTO_HUD_OPTION_TEXT:format(spellId)\n\telse\n\t\tself.localization.options[name] = L.AUTO_HUD_OPTION_TEXT_MULTI\n\tend\n\tself:SetOptionCategory(name, \"misc\")\nend\n\nfunction bossModPrototype:AddNamePlateOption(name, spellId, default, forceDBM)\n\tif not spellId then\n\t\terror(\"AddNamePlateOption must provide valid spellId\", 2)\n\tend\n\tself.DefaultOptions[name] = (default == nil) or default\n\tif default and type(default) == \"string\" then\n\t\tdefault = self:GetRoleFlagValue(default)\n\tend\n\tself.Options[name] = (default == nil) or default\n\tself:GroupSpells(spellId, name)\n\tself:SetOptionCategory(name, \"nameplate\")\n\tself.localization.options[name] = forceDBM and L.AUTO_NAMEPLATE_OPTION_TEXT_FORCED:format(spellId) or L.AUTO_NAMEPLATE_OPTION_TEXT:format(spellId)\nend\n\nfunction bossModPrototype:AddInfoFrameOption(spellId, default, optionVersion, optionalThreshold)\n\tlocal oVersion = \"\"\n\tif optionVersion then\n\t\toVersion = tostring(optionVersion)\n\tend\n\tself.DefaultOptions[\"InfoFrame\"..oVersion] = (default == nil) or default\n\tif default and type(default) == \"string\" then\n\t\tdefault = self:GetRoleFlagValue(default)\n\tend\n\tself.Options[\"InfoFrame\"..oVersion] = (default == nil) or default\n\tif spellId then\n\t\tself:GroupSpells(spellId, \"InfoFrame\" .. oVersion)\n\t\tif optionalThreshold then\n\t\t\tself.localization.options[\"InfoFrame\"..oVersion] = L.AUTO_INFO_FRAME_OPTION_TEXT3:format(spellId, optionalThreshold)\n\t\telse\n\t\t\tself.localization.options[\"InfoFrame\"..oVersion] = L.AUTO_INFO_FRAME_OPTION_TEXT:format(spellId)\n\t\tend\n\telse\n\t\tself.localization.options[\"InfoFrame\"..oVersion] = L.AUTO_INFO_FRAME_OPTION_TEXT2\n\tend\n\tself:SetOptionCategory(\"InfoFrame\"..oVersion, \"misc\")\nend\n\nfunction bossModPrototype:AddReadyCheckOption(questId, default, maxLevel)\n\tself.readyCheckQuestId = questId\n\tself.readyCheckMaxLevel = maxLevel or 999\n\tself.DefaultOptions[\"ReadyCheck\"] = (default == nil) or default\n\tif default and type(default) == \"string\" then\n\t\tdefault = self:GetRoleFlagValue(default)\n\tend\n\tself.Options[\"ReadyCheck\"] = (default == nil) or default\n\tself.localization.options[\"ReadyCheck\"] = L.AUTO_READY_CHECK_OPTION_TEXT\n\tself:SetOptionCategory(\"ReadyCheck\", \"misc\")\nend\n\nfunction bossModPrototype:AddSpeedClearOption(name, default)\n\tself.DefaultOptions[\"SpeedClearTimer\"] = (default == nil) or default\n\tif default and type(default) == \"string\" then\n\t\tdefault = self:GetRoleFlagValue(default)\n\tend\n\tself.Options[\"SpeedClearTimer\"] = (default == nil) or default\n\tself:SetOptionCategory(\"SpeedClearTimer\", \"timer\")\n\tself.localization.options[\"SpeedClearTimer\"] = L.AUTO_SPEEDCLEAR_OPTION_TEXT:format(name)\nend\n\nfunction bossModPrototype:AddSliderOption(name, minValue, maxValue, valueStep, default, cat, func)\n\tcat = cat or \"misc\"\n\tself.DefaultOptions[name] = {type = \"slider\", value = default or 0}\n\tself.Options[name] = default or 0\n\tself:SetOptionCategory(name, cat)\n\tself.sliders = self.sliders or {}\n\tself.sliders[name] = {\n\t\tminValue = minValue,\n\t\tmaxValue = maxValue,\n\t\tvalueStep = valueStep,\n\t}\n\tif func then\n\t\tself.optionFuncs = self.optionFuncs or {}\n\t\tself.optionFuncs[name] = func\n\tend\nend\n\nfunction bossModPrototype:AddEditboxOption(name, default, cat, width, height, func)\n\tcat = cat or \"misc\"\n\tself.DefaultOptions[name] = {type = \"editbox\", value = default or \"\"}\n\tself.Options[name] = default or \"\"\n\tself:SetOptionCategory(name, cat)\n\tself.editboxes = self.editboxes or {}\n\tself.editboxes[name] = {\n\t\twidth = width,\n\t\theight = height\n\t}\n\tif func then\n\t\tself.optionFuncs = self.optionFuncs or {}\n\t\tself.optionFuncs[name] = func\n\tend\nend\n\nfunction bossModPrototype:AddButton(name, onClick, cat, width, height, fontObject)\n\tcat = cat or \"misc\"\n\tself:SetOptionCategory(name, cat)\n\tself.buttons = self.buttons or {}\n\tself.buttons[name] = {\n\t\tonClick = onClick,\n\t\twidth = width,\n\t\theight = height,\n\t\tfontObject = fontObject\n\t}\nend\n\n-- this function does not reset any settings to default if you remove an option in a later revision and a user has selected this option in an earlier revision were it still was available\n-- this will be fixed as soon as it is necessary due to removed options ;-)\nfunction bossModPrototype:AddDropdownOption(name, options, default, cat, func, spellId)\n\tcat = cat or \"misc\"\n\tself.DefaultOptions[name] = {type = \"dropdown\", value = default}\n\tself.Options[name] = default\n\tif spellId then\n\t\tself:GroupSpells(spellId, name)\n\tend\n\tself:SetOptionCategory(name, cat)\n\tself.dropdowns = self.dropdowns or {}\n\tself.dropdowns[name] = options\n\tif func then\n\t\tself.optionFuncs = self.optionFuncs or {}\n\t\tself.optionFuncs[name] = func\n\tend\nend\n\nfunction bossModPrototype:AddOptionSpacer(cat)\n\tcat = cat or \"misc\"\n\tif self.optionCategories[cat] then\n\t\ttinsert(self.optionCategories[cat], DBM_OPTION_SPACER)\n\tend\nend\n\ndo\n\tlocal lineCount = 1\n\n\tfunction bossModPrototype:AddOptionLine(text, cat, forceIgnore)\n\t\tif self.addon and not self.addon.oldOptions and DBM.Options.GroupOptionsBySpell and not forceIgnore then\n\t\t\tself.groupOptions[\"line\" .. lineCount] = text\n\t\t\tlineCount = lineCount + 1\n\t\telse\n\t\t\tcat = cat or \"misc\"\n\t\t\tif not self.optionCategories[cat] then\n\t\t\t\tself.optionCategories[cat] = {}\n\t\t\tend\n\t\t\tif self.optionCategories[cat] then\n\t\t\t\ttinsert(self.optionCategories[cat], {line = true, text = text})\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction bossModPrototype:AddAnnounceSpacer()\n\treturn self:AddOptionSpacer(\"announce\")\nend\n\nfunction bossModPrototype:AddTimerSpacer()\n\treturn self:AddOptionSpacer(\"timer\")\nend\n\nfunction bossModPrototype:AddAnnounceLine(text)\n\treturn self:AddOptionLine(text, \"announce\")\nend\n\nfunction bossModPrototype:AddTimerLine(text)\n\treturn self:AddOptionLine(text, \"timer\")\nend\n\nfunction bossModPrototype:AddNamePlateLine(text)\n\treturn self:AddOptionLine(text, \"nameplate\")\nend\n\nfunction bossModPrototype:AddIconLine(text)\n\treturn self:AddOptionLine(text, \"icon\")\nend\n\nfunction bossModPrototype:AddMiscLine(text)\n\treturn self:AddOptionLine(text, \"misc\", true)\nend\n\nfunction bossModPrototype:RemoveOption(name)\n\tself.Options[name] = nil\n\tfor k, options in pairs(self.optionCategories) do\n\t\tremoveEntry(options, name)\n\t\tif #options == 0 then\n\t\t\tself.optionCategories[k] = nil\n\t\tend\n\tend\n\tif self.optionFuncs then\n\t\tself.optionFuncs[name] = nil\n\tend\nend\n\nfunction bossModPrototype:GroupSpells(...)\n\tlocal spells = {...}\n\tlocal catSpell = tostring(tremove(spells, 1))\n\tif not self.groupSpells[catSpell] then\n\t\tself.groupSpells[catSpell] = {}\n\tend\n\tfor _, spell in ipairs(spells) do\n\t\tlocal sSpell = tostring(spell)\n\t\tself.groupSpells[sSpell] = catSpell\n\t\tif sSpell ~= catSpell and self.groupOptions[sSpell] then\n\t\t\tif not self.groupOptions[catSpell] then\n\t\t\t\tself.groupOptions[catSpell] = {}\n\t\t\tend\n\t\t\tfor _, spell2 in ipairs(self.groupOptions[sSpell]) do\n\t\t\t\ttinsert(self.groupOptions[catSpell], spell2)\n\t\t\tend\n\t\t\tself.groupOptions[sSpell] = nil\n\t\tend\n\tend\nend\n\nfunction bossModPrototype:SetOptionCategory(name, cat, optionType)\n\toptionType = optionType or \"\"\n\tfor _, options in pairs(self.optionCategories) do\n\t\tremoveEntry(options, name)\n\tend\n\tif self.addon and not self.addon.oldOptions and DBM.Options.GroupOptionsBySpell and self.groupSpells[name] and not (optionType == \"gtfo\" or optionType == \"adds\" or optionType == \"addscount\" or optionType == \"addscustom\" or optionType:find(\"stage\") or cat == \"icon\" and DBM.Options.GroupOptionsExcludeIcon) then\n\t\tlocal sSpell = self.groupSpells[name]\n\t\tif not self.groupOptions[sSpell] then\n\t\t\tself.groupOptions[sSpell] = {}\n\t\tend\n\t\ttinsert(self.groupOptions[sSpell], name)\n\telse\n\t\tif not self.optionCategories[cat] then\n\t\t\tself.optionCategories[cat] = {}\n\t\tend\n\t\ttinsert(self.optionCategories[cat], name)\n\t\ttinsert(self.categorySort, cat)\n\tend\nend\n\n--------------\n--  Combat  --\n--------------\nfunction bossModPrototype:RegisterCombat(cType, ...)\n\tif cType then\n\t\tcType = cType:lower()\n\tend\n\tlocal info = {\n\t\ttype = cType,\n\t\tmob = self.creatureId,\n\t\tname = self.localization.general.name or self.id,\n\t\tmsgs = (cType ~= \"combat\") and {...},\n\t\tmod = self\n\t}\n\tif self.multiMobPullDetection then\n\t\tinfo.multiMobPullDetection = self.multiMobPullDetection\n\tend\n\tif self.noIEEUDetection then\n\t\tinfo.noIEEUDetection = self.noIEEUDetection\n\tend\n\tif self.noFriendlyEngagement then\n\t\tinfo.noFriendlyEngagement = self.noFriendlyEngagement\n\tend\n\tif self.noRegenDetection then\n\t\tinfo.noRegenDetection = self.noRegenDetection\n\tend\n\tif self.noMultiBoss then\n\t\tinfo.noMultiBoss = self.noMultiBoss\n\tend\n\tif self.WBEsync then\n\t\tinfo.WBEsync = self.WBEsync\n\tend\n\tif self.noBossDeathKill then\n\t\tinfo.noBossDeathKill = self.noBossDeathKill\n\tend\n\t-- use pull-mobs as kill mobs by default, can be overriden by RegisterKill\n\tif self.multiMobPullDetection then\n\t\tfor _, v in ipairs(self.multiMobPullDetection) do\n\t\t\tinfo.killMobs = info.killMobs or {}\n\t\t\tinfo.killMobs[v] = true\n\t\tend\n\tend\n\tself.combatInfo = info\n\tif not self.zones then return end\n\tfor v in pairs(self.zones) do\n\t\tcombatInfo[v] = combatInfo[v] or {}\n\t\ttinsert(combatInfo[v], info)\n\tend\nend\n\n-- needs to be called _AFTER_ RegisterCombat\nfunction bossModPrototype:RegisterKill(msgType, ...)\n\tif not self.combatInfo then\n\t\terror(\"mod.combatInfo not yet initialized, use mod:RegisterCombat before using this method\", 2)\n\tend\n\tif msgType == \"kill\" then\n\t\tif select(\"#\", ...) > 0 then -- calling this method with 0 IDs means \"use the values from SetCreatureID\", this is already done by RegisterCombat as calling RegisterKill should be optional --> mod:RegisterKill(\"kill\") with no IDs is never necessary\n\t\t\tself.combatInfo.killMobs = {}\n\t\t\tfor i = 1, select(\"#\", ...) do\n\t\t\t\tlocal v = select(i, ...)\n\t\t\t\tif type(v) == \"number\" then\n\t\t\t\t\tself.combatInfo.killMobs[v] = true\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\telse\n\t\tself.combatInfo.killType = msgType\n\t\tself.combatInfo.killMsgs = {}\n\t\tfor i = 1, select(\"#\", ...) do\n\t\t\tlocal v = select(i, ...)\n\t\t\tself.combatInfo.killMsgs[v] = true\n\t\tend\n\tend\nend\n\nfunction bossModPrototype:SetDetectCombatInVehicle(flag)\n\tif not self.combatInfo then\n\t\terror(\"mod.combatInfo not yet initialized, use mod:RegisterCombat before using this method\", 2)\n\tend\n\tself.combatInfo.noCombatInVehicle = not flag\nend\n\nfunction bossModPrototype:SetCreatureID(...)\n\tself.creatureId = ...\n\tif select(\"#\", ...) > 1 then\n\t\tself.multiMobPullDetection = {...}\n\t\tif self.combatInfo then\n\t\t\tself.combatInfo.multiMobPullDetection = self.multiMobPullDetection\n\t\t\tself.numBoss = #self.multiMobPullDetection\n\t\t\tif self.inCombat then\n\t\t\t\t--Called mid combat, fix some variables\n\t\t\t\tself.vb.bossLeft = self.numBoss\n\t\t\tend\n\t\tend\n\t\tfor i = 1, select(\"#\", ...) do\n\t\t\tlocal cId = select(i, ...)\n\t\t\tbossIds[cId] = true\n\t\tend\n\telse\n\t\tlocal cId = ...\n\t\tbossIds[cId] = true\n\t\tself.numBoss = 1\n\t\tif self.combatInfo then\n\t\t\t--Called mid combat, update combatinfo mob for boss health and win detection\n\t\t\tself.combatInfo.mob = self.creatureId\n\t\tend\n\tend\nend\n\n---Used to set Encounter IDs this mod will pass to ENCOUNTER_START/ENCOUNTER_END/BOSS_KILL\nfunction bossModPrototype:SetEncounterID(...)\n\tself.encounterId = ...\n\tif select(\"#\", ...) > 1 then\n\t\tself.multiEncounterPullDetection = {...}\n\t\tif self.combatInfo then\n\t\t\tself.combatInfo.multiEncounterPullDetection = self.multiEncounterPullDetection\n\t\tend\n\tend\nend\n\nfunction bossModPrototype:DisableIEEUCombatDetection()\n\tself.noIEEUDetection = true\n\tif self.combatInfo then\n\t\tself.combatInfo.noIEEUDetection = true\n\tend\nend\n\nfunction bossModPrototype:DisableFriendlyDetection()\n\tself.noFriendlyEngagement = true\n\tif self.combatInfo then\n\t\tself.combatInfo.noFriendlyEngagement = true\n\tend\nend\n\nfunction bossModPrototype:DisableRegenDetection()\n\tself.noRegenDetection = true\n\tif self.combatInfo then\n\t\tself.combatInfo.noRegenDetection = true\n\tend\nend\n\nfunction bossModPrototype:DisableMultiBossPulls()\n\tself.noMultiBoss = true\n\tif self.combatInfo then\n\t\tself.combatInfo.noMultiBoss = true\n\tend\nend\n\nfunction bossModPrototype:EnableWBEngageSync()\n\tself.WBEsync = true\n\tif self.combatInfo then\n\t\tself.combatInfo.WBEsync = true\n\tend\nend\n\n---Used when a bosses death condition should be ignored (maybe they die repeatedly for example)\nfunction bossModPrototype:DisableBossDeathKill()\n\tself.noBossDeathKill = true\n\tif self.combatInfo then\n\t\tself.combatInfo.noBossDeathKill = true\n\tend\nend\n\n---Used when a boss is scripted in a hacky way that their creature Id changes mid fight, and we want to treat multiple IDs as a single boss\nfunction bossModPrototype:SetMultiIDSingleBoss()\n\tself.multiIDSingleBoss = true\nend\n\n--used for knowing if a specific mod is engaged\nfunction bossModPrototype:IsInCombat()\n\treturn self.inCombat\nend\n\n--Used for knowing if any person is in any kind of combat period\nfunction bossModPrototype:GroupInCombat()\n\tlocal combatFound = false\n\t--Any Boss engaged\n\tif DBM:IsEncounterInProgress() then\n\t\tcombatFound = true\n\tend\n\t--Self in Combat\n\tif InCombatLockdown() or UnitAffectingCombat(\"player\") then\n\t\tcombatFound = true\n\tend\n\t--Any Other group member in combat\n\tif not combatFound then\n\t\tfor uId in DBM:GetGroupMembers() do\n\t\t\tif UnitAffectingCombat(uId) and not UnitIsDeadOrGhost(uId) then\n\t\t\t\tcombatFound = true\n\t\t\t\tbreak\n\t\t\tend\n\t\tend\n\tend\n\treturn combatFound\nend\n\nfunction bossModPrototype:IsAlive()\n\treturn not UnitIsDeadOrGhost(\"player\")\nend\n\nfunction bossModPrototype:SetMinCombatTime(t)\n\tself.minCombatTime = t\nend\n\n-- needs to be called after RegisterCombat\nfunction bossModPrototype:SetWipeTime(t)\n\tif not self.combatInfo then\n\t\terror(\"mod.combatInfo not yet initialized, use mod:RegisterCombat before using this method\", 2)\n\tend\n\tself.combatInfo.wipeTimer = t\nend\n\n-- fix for LFR ToES Tsulong combat detection bug after killed.\nfunction bossModPrototype:SetReCombatTime(t, t2)--T1, after kill. T2 after wipe\n\tself.reCombatTime = t\n\tself.reCombatTime2 = t2\nend\n\nfunction bossModPrototype:SetOOCBWComms()\n\ttinsert(oocBWComms, self)\nend\n\nfunction bossModPrototype:GetBossHPString(cId)\n\tlocal idType = (GetNumRaidMembers() == 0 and \"party\") or \"raid\"\n\tfor i = 0, mmax(GetNumRaidMembers(), GetNumPartyMembers()) do\n\t\tlocal unitId = ((i == 0) and \"target\") or idType..i..\"target\"\n\t\tlocal guid = UnitGUID(unitId)\n\t\tif guid and tonumber(guid:sub(8, 12), 16) == cId then\n\t\t\treturn floor(UnitHealth(unitId)/UnitHealthMax(unitId) * 100)..\"%\"\n\t\tend\n\tend\n\treturn CL.UNKNOWN\nend\n\nfunction bossModPrototype:GetHP()\n\treturn self:GetBossHPString((self.combatInfo and self.combatInfo.mob) or self.creatureId)\nend\n\n-----------------------\n--  Synchronization  --\n-----------------------\nfunction bossModPrototype:SendSync(event, ...)\n\tevent = event or \"\"\n\tlocal arg = select(\"#\", ...) > 0 and strjoin(\"\\t\", tostringall(...)) or \"\"\n\tlocal str = (\"%s\\t%s\\t%s\\t%s\"):format(self.id, self.revision or 0, event, arg)\n\tlocal spamId = self.id .. event .. arg -- *not* the same as the sync string, as it doesn't use the revision information\n\tlocal time = GetTime()\n\t--Mod syncs are more strict and enforce latency threshold always.\n\t--Do not put latency check in main sendSync local function (line 313) though as we still want to get version information, etc from these users.\n\tif not private.modSyncSpam[spamId] or (time - private.modSyncSpam[spamId]) > 8 then\n\t\tself:ReceiveSync(event, playerName, self.revision or 0, tostringall(...))\n\t\tsendSync(\"DBMv4-Mod\", str)\n\tend\nend\n\nfunction bossModPrototype:SendBigWigsSync(msg, extra)\n\tif not dbmIsEnabled then return end\n\tmsg = \"B^\".. msg\n\tif extra then\n\t\tmsg = msg ..\"^\".. extra\n\tend\n\tif IsInGroup() then\n\t\tSendAddonMessage(\"BigWigs\", msg, IsInRaid() and \"RAID\" or \"PARTY\")\n\tend\nend\n\nfunction bossModPrototype:ReceiveSync(event, sender, revision, ...)\n\tlocal spamId = self.id .. event .. strjoin(\"\\t\", ...)\n\tlocal time = GetTime()\n\tif (not private.modSyncSpam[spamId] or (time - private.modSyncSpam[spamId]) > self.SyncThreshold) and self.OnSync and (not self.minSyncRevision or revision >= self.minSyncRevision) then\n\t\tprivate.modSyncSpam[spamId] = time\n\t\t-- we have to use the sender as last argument for compatibility reasons (stupid old API...)\n\t\t-- avoid table allocations for frequently used number of arguments\n\t\tif select(\"#\", ...) <= 1 then\n\t\t\t-- syncs with no arguments have an empty argument (also for compatibility reasons)\n\t\t\tself:OnSync(event, ... or \"\", sender)\n\t\telseif select(\"#\", ...) == 2 then\n\t\t\tself:OnSync(event, ..., select(2, ...), sender)\n\t\telse\n\t\t\tlocal tmp = { ... }\n\t\t\ttmp[#tmp + 1] = sender\n\t\t\tself:OnSync(event, unpack(tmp))\n\t\tend\n\tend\nend\n\nfunction bossModPrototype:SetRevision(revision)\n\trevision = parseCurseDate(revision or \"\")\n\tif not revision or type(revision) == \"string\" then\n\t\t-- bad revision: either forgot the svn keyword or using github\n\t\trevision = DBM.Revision\n\tend\n\tself.revision = revision\nend\n\n--Either treat it as a valid number, or a curse string that needs to be made into a valid number\nfunction bossModPrototype:SetMinSyncRevision(revision)\n\tself.minSyncRevision = (type(revision or \"\") == \"number\") and revision or parseCurseDate(revision)\nend\n\nfunction bossModPrototype:SetHotfixNoticeRev(revision)\n\tself.hotfixNoticeRev = (type(revision or \"\") == \"number\") and revision or parseCurseDate(revision)\nend\n\n-----------------\n--  Scheduler  --\n-----------------\nfunction bossModPrototype:Schedule(t, f, ...)\n\treturn DBMScheduler:Schedule(t, f, self, ...)\nend\n\nfunction bossModPrototype:Unschedule(f, ...)\n\treturn DBMScheduler:Unschedule(f, self, ...)\nend\n\nfunction bossModPrototype:ScheduleMethod(t, method, ...)\n\tif not self[method] then\n\t\terror((\"Method %s does not exist\"):format(tostring(method)), 2)\n\tend\n\treturn self:Schedule(t, self[method], self, ...)\nend\nbossModPrototype.ScheduleEvent = bossModPrototype.ScheduleMethod\n\nfunction bossModPrototype:UnscheduleMethod(method, ...)\n\tif not self[method] then\n\t\terror((\"Method %s does not exist\"):format(tostring(method)), 2)\n\tend\n\treturn self:Unschedule(self[method], self, ...)\nend\nbossModPrototype.UnscheduleEvent = bossModPrototype.UnscheduleMethod\n\n-------------\n--  Icons  --\n-------------\ndo\n\tlocal iconsModule = private:GetModule(\"Icons\")\n\n\tfunction bossModPrototype:SetIcon(...)\n\t\treturn iconsModule:SetIcon(self, ...)\n\tend\n\n\tfunction bossModPrototype:SetIconByTable(...)\n\t\treturn iconsModule:SetIconByTable(self, ...)\n\tend\n\n\tfunction bossModPrototype:SetUnsortedIcon(...)\n\t\treturn iconsModule:SetUnsortedIcon(self, ...)\n\tend\n\n\t--Backwards compat for old mods using this method, which is now merged into SetSortedIcon\n\tfunction bossModPrototype:SetAlphaIcon(delay, target, maxIcon, returnFunc, scanId, ...)\n\t\treturn iconsModule:SetSortedIcon(self, \"alpha\", delay, target, 1, maxIcon, false, returnFunc, scanId, ...)\n\tend\n\n\tfunction bossModPrototype:SetIconBySortedTable(...)\n\t\treturn iconsModule:SetIconBySortedTable(self, ...)\n\tend\n\n\tfunction bossModPrototype:SetSortedIcon(...)\n\t\treturn iconsModule:SetSortedIcon(self, ...)\n\tend\n\n\tfunction bossModPrototype:ScanForMobs(...)\n\t\treturn iconsModule:ScanForMobs(self, ...)\n\tend\n\n\tfunction bossModPrototype:RemoveIcon(...)\n\t\treturn iconsModule:RemoveIcon(self, ...)\n\tend\n\n\tbossModPrototype.GetIcon = iconsModule.GetIcon\n\tbossModPrototype.ClearIcons = iconsModule.ClearIcons\n\tbossModPrototype.CanSetIcon = iconsModule.CanSetIcon\nend\n\n-----------------------\n--  Model Functions  --\n-----------------------\nfunction bossModPrototype:SetModelScale(scale)\n\tself.modelScale = scale\nend\n\nfunction bossModPrototype:SetModelOffset(x, y, z)\n\tself.modelOffsetX = x\n\tself.modelOffsetY = y\n\tself.modelOffsetZ = z\nend\n\nfunction bossModPrototype:SetModelRotation(r)\n\tself.modelRotation = r\nend\n\nfunction bossModPrototype:SetModelMoveSpeed(v)\n\tself.modelMoveSpeed = v\nend\n\nfunction bossModPrototype:SetModelID(id)\n\tself.modelId = id\nend\n\nfunction bossModPrototype:SetModelSound(long, short)--PlaySoundFile prototype for model viewer, long is long sound, short is a short clip, configurable in UI, both sound paths defined in boss mods.\n\tself.modelSoundLong = long\n\tself.modelSoundShort = short\nend\n\nfunction bossModPrototype:EnableModel()\n\tself.modelEnabled = true\nend\n\nfunction bossModPrototype:DisableModel()\n\tself.modelEnabled = nil\nend\n\n--------------------\n--  Localization  --\n--------------------\nfunction bossModPrototype:GetLocalizedStrings()\n\tself.localization.miscStrings.name = self.localization.general.name\n\treturn self.localization.miscStrings\nend\n"
  },
  {
    "path": "DBM-Core/DBM-Core.toc",
    "content": "## Interface: 30300\n## X-Min-Interface: 30300\n\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF Core|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF 核心|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF Ядро|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF 核心|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF 핵심 모듈|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF Núcleo|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF Núcleo|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF Noyau|r\n## Notes: Deadly Boss Mods\n## Dependencies: DBM-StatusBarTimers\n## OptionalDeps: LibStub, CallbackHandler-1.0, LibSharedMedia-3.0, LibChatAnims, LibDBIcon-1.0, LibDeflate, LibSerialize, LibGroupTalents-1.0, LibTalentQuery-1.0, ElvUI\n## SavedVariables: DBM_AllSavedOptions, DBM_MinimapIcon\n## SavedVariablesPerCharacter: DBM_UsedProfile, DBM_UseDualProfile, DBM_CharSavedRevision, DBM_SavedOptions\n## LoadOnDemand: 0\n## DefaultState: enabled\n## Author: Barsoom, Bunny67, Zidras, DBM-Frostmourne contributors, original DBM team\n## Version: 10.1.13_alpha\n## X-Website: https://github.com/Zidras/DBM-Warmane/\n\ncompat.lua\n\nLibs\\Ace3\\LibStub\\LibStub.lua\nLibs\\Ace3\\CallbackHandler-1.0\\CallbackHandler-1.0.lua\nLibs\\Ace3\\AceAddon-3.0\\AceAddon-3.0.lua\nLibs\\Ace3\\AceEvent-3.0\\AceEvent-3.0.lua\nLibs\\Ace3\\AceHook-3.0\\AceHook-3.0.lua\nLibs\\Ace3\\AceTimer-3.0\\AceTimer-3.0.lua\nLibs\\Ace3\\AceDB-3.0\\AceDB-3.0.lua\nLibs\\Ace3\\AceLocale-3.0\\AceLocale-3.0.lua\nLibs\\Ace3\\AceConsole-3.0\\AceConsole-3.0.lua\nLibs\\Ace3\\AceGUI-3.0\\AceGUI-3.0.xml\nLibs\\Ace3\\AceComm-3.0\\AceComm-3.0.xml\nLibs\\Ace3\\AceSerializer-3.0\\AceSerializer-3.0.lua\nLibs\\LibAnim\\LibAnim.lua\nLibs\\LibDataBroker-1.1\\LibDataBroker-1.1.lua\nLibs\\LibDBIcon-1.0\\LibDBIcon-1.0.lua\nLibs\\LibTalentQuery-1.0\\LibTalentQuery-1.0.lua\nLibs\\LibGroupTalents-1.0\\LibGroupTalents-1.0.lua\nLibs\\LibSharedMedia-3.0\\LibSharedMedia-3.0.lua\nLibs\\LibDurability\\LibDurability.lua\nLibs\\LibLatency\\LibLatency.lua\nLibs\\LibDeflate\\LibDeflate.lua\nLibs\\LibSerialize\\LibSerialize.lua\nLibs\\LibRangeCheck-2.0\\LibRangeCheck-2.0.lua\nLibs\\SpecializedAbsorbs-1.0\\SpecializedAbsorbs-1.0.lua\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.cn.lua\nlocalization.ru.lua\nlocalization.fr.lua\nlocalization.tw.lua\nlocalization.kr.lua\nlocalization.es.lua\n\ncommonlocal.en.lua\ncommonlocal.tw.lua\ncommonlocal.cn.lua\ncommonlocal.de.lua\ncommonlocal.es.lua\ncommonlocal.fr.lua\ncommonlocal.kr.lua\ncommonlocal.ru.lua\n\n# Pre-core modules\nmodules\\Modules.lua\n\nmodules\\SpecRole.lua\nmodules\\Scheduler.lua\nmodules\\DevTools.lua\nmodules\\Icons.lua\nmodules\\TargetScanning.lua\n\n# Core\nDBM-Core.lua\nDBM-Arrow.lua\nDBM-Flash.lua\nDBM-RangeCheck.lua\nDBM-InfoFrame.lua\nDBM-BossHealth.lua\nDBM-BossHealth.xml\nDBM-TimerTracker.xml\nDBM-TimerTracker.lua\nDBM-BossBannerToast.lua\n\n# Modules\nmodules\\Commands.lua\nmodules\\Hyperlinks.lua\nmodules\\MinimapButton.lua\nmodules\\Notes.lua\nmodules\\Sounds.lua\nmodules\\UpdateReminder.lua\n\nmodules\\objects\\Localization.lua\n"
  },
  {
    "path": "DBM-Core/DBM-Flash.lua",
    "content": "---------------\n--  Globals  --\n---------------\nDBM.Flash = {}\n\n--------------\n--  Locals  --\n--------------\nlocal flashFrame = DBM.Flash\nlocal frame, duration, elapsed, totalRepeat\n\n--------------------\n--  Create Frame  --\n--------------------\nframe = CreateFrame(\"Frame\", \"DBMFlash\", UIParent)\nframe.backdropInfo = {\n\tbgFile = \"Interface\\\\Tooltips\\\\UI-Tooltip-Background\" -- 137056\n}\nframe:SetBackdrop(frame.backdropInfo)\nframe:SetAllPoints(UIParent)\nframe:SetFrameStrata(\"BACKGROUND\")\nframe:Hide()\n\n------------------------\n--  OnUpdate Handler  --\n------------------------\nframe:SetScript(\"OnUpdate\", function(self, e)\n\telapsed = elapsed + e\n\tif elapsed >= duration then\n\t\tif totalRepeat == 0 then\n\t\t\tself:Hide()\n\t\t\treturn\n\t\tend\n\t\telapsed = 0\n\t\ttotalRepeat = totalRepeat - 1\n\t\tself:SetAlpha(0)\n\t\treturn\n\tend\n\tself:SetAlpha(-(elapsed / (duration / 2) - 1) ^ 2 + 1)\nend)\n\nfunction flashFrame:Show(red, green, blue, dur, alpha, repeatFlash)\n\tduration = dur or 0.4\n\telapsed = 0\n\ttotalRepeat = repeatFlash or 0\n\tframe:SetBackdropColor(red or 1, green or 0, blue or 0, alpha or 0.3)\n\tframe:Show()\nend\n\nfunction flashFrame:IsShown()\n\treturn frame and frame:IsShown()\nend\n\nfunction flashFrame:Hide()\n\tframe:Hide()\nend\n"
  },
  {
    "path": "DBM-Core/DBM-InfoFrame.lua",
    "content": "---------------\n--  Globals  --\n---------------\nDBM.InfoFrame = {}\n\n-------------------\n-- Local Globals --\n-------------------\nlocal DBM = DBM\nlocal L = DBM_CORE_L\nlocal UnitClass, GetTime, GetPartyAssignment, UnitGroupRolesAssigned, GetRaidTargetIndex, UnitExists, UnitName, UnitHealth, UnitPower, UnitPowerMax, UnitIsDeadOrGhost, UnitThreatSituation, UnitIsUnit, UIDropDownMenu_CreateInfo, UIDropDownMenu_AddButton = UnitClass, GetTime, GetPartyAssignment, UnitGroupRolesAssigned, GetRaidTargetIndex, UnitExists, UnitName, UnitHealth, UnitPower, UnitPowerMax, UnitIsDeadOrGhost, UnitThreatSituation, UnitIsUnit, UIDropDownMenu_CreateInfo, UIDropDownMenu_AddButton\nlocal error, tostring, type, pairs, ipairs, select, tonumber, tsort, twipe, mfloor, mmax, mmin, mrandom, schar, ssplit = error, tostring, type, pairs, ipairs, select, tonumber, table.sort, table.wipe, math.floor, math.max, math.min, math.random, string.char, string.split\nlocal ADDITIONAL_POWER_BAR_INDEX = ADDITIONAL_POWER_BAR_INDEX or 0\nlocal NORMAL_FONT_COLOR, SPELL_FAILED_OUT_OF_RANGE = NORMAL_FONT_COLOR, SPELL_FAILED_OUT_OF_RANGE\nlocal RAID_CLASS_COLORS = _G[\"CUSTOM_CLASS_COLORS\"] or RAID_CLASS_COLORS-- for Phanx' Class Colors\n\n--Hard code STANDARD_TEXT_FONT since skinning mods like to taint it (or worse, set it to nil, wtf?)\nlocal standardFont\nif LOCALE_koKR then\n\tstandardFont = \"Fonts\\\\2002.TTF\"\nelseif LOCALE_zhCN then\n\tstandardFont = \"Fonts\\\\ARKai_T.ttf\"\nelseif LOCALE_zhTW then\n\tstandardFont = \"Fonts\\\\blei00d.TTF\"\nelseif LOCALE_ruRU then\n\tstandardFont = \"Fonts\\\\FRIZQT___CYR.TTF\"\nelse\n\tstandardFont = \"Fonts\\\\FRIZQT__.TTF\"\nend\n\n--------------\n--  Locals  --\n--------------\nlocal infoFrame = DBM.InfoFrame\nlocal frame, initializeDropdown, currentEvent, createFrame\nlocal maxLines, modLines, maxCols, modCols, prevLines = 5, 5, 1, 1, 0\nlocal sortMethod = 1--1 Default, 2 SortAsc, 3 GroupId\nlocal lines, sortedLines, icons, value = {}, {}, {}, {}\nlocal playerName = UnitName(\"player\")\nlocal AceTimer = LibStub(\"AceTimer-3.0\")\nlocal SpecializedAbsorbs = LibStub(\"SpecializedAbsorbs-1.0\")\n---------------------\n--  Dropdown Menu  --\n---------------------\ndo\n\tlocal function toggleLocked()\n\t\tDBM.Options.InfoFrameLocked = not DBM.Options.InfoFrameLocked\n\tend\n\n\tlocal function toggleShowSelf()\n\t\tDBM.Options.InfoFrameShowSelf = not DBM.Options.InfoFrameShowSelf\n\tend\n\n\tlocal function setLines(_, line)\n\t\tprevLines = 0\n\t\tDBM.Options.InfoFrameLines = line\n\t\tif line ~= 0 then\n\t\t\tmaxLines = line\n\t\telse\n\t\t\tmaxLines = modLines or 5\n\t\tend\n\tend\n\n\tlocal function setCols(_, col)\n\t\tprevLines = 0\n\t\tDBM.Options.InfoFrameCols = col\n\t\tif col ~= 0 then\n\t\t\tmaxCols = col\n\t\telse\n\t\t\tmaxCols = modCols or 5\n\t\tend\n\tend\n\n\tfunction initializeDropdown(_, level, menu)\n\t\tlocal info\n\n\t\tif level == 1 then\n\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\tinfo.text = L.LOCK_FRAME\n\t\t\tif DBM.Options.InfoFrameLocked then\n\t\t\t\tinfo.checked = true\n\t\t\tend\n\t\t\tinfo.func = toggleLocked\n\t\t\tUIDropDownMenu_AddButton(info, 1)\n\n\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\tinfo.keepShownOnClick = true\n\t\t\tinfo.text = L.INFOFRAME_SHOW_SELF\n\t\t\tif DBM.Options.InfoFrameShowSelf then\n\t\t\t\tinfo.checked = true\n\t\t\tend\n\t\t\tinfo.func = toggleShowSelf\n\t\t\tUIDropDownMenu_AddButton(info, 1)\n\n\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\tinfo.text = L.INFOFRAME_SETLINES\n\t\t\tinfo.notCheckable = true\n\t\t\tinfo.hasArrow = true\n\t\t\tinfo.keepShownOnClick = true\n\t\t\tinfo.menuList = \"lines\"\n\t\t\tUIDropDownMenu_AddButton(info, 1)\n\n\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\tinfo.text = L.INFOFRAME_SETCOLS\n\t\t\tinfo.notCheckable = true\n\t\t\tinfo.hasArrow = true\n\t\t\tinfo.keepShownOnClick = true\n\t\t\tinfo.menuList = \"cols\"\n\t\t\tUIDropDownMenu_AddButton(info, 1)\n\n\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\tinfo.text = HIDE\n\t\t\tinfo.notCheckable = true\n\t\t\tinfo.func = infoFrame.Hide\n\t\t\tinfo.arg1 = infoFrame\n\t\t\tUIDropDownMenu_AddButton(info, 1)\n\t\telseif level == 2 then\n\t\t\tif menu == \"lines\" then\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.INFOFRAME_LINESDEFAULT\n\t\t\t\tinfo.func = setLines\n\t\t\t\tinfo.arg1 = 0\n\t\t\t\tinfo.checked = (DBM.Options.InfoFrameLines == 0)\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.INFOFRAME_LINES_TO:format(3)\n\t\t\t\tinfo.func = setLines\n\t\t\t\tinfo.arg1 = 3\n\t\t\t\tinfo.checked = (DBM.Options.InfoFrameLines == 3)\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.INFOFRAME_LINES_TO:format(5)\n\t\t\t\tinfo.func = setLines\n\t\t\t\tinfo.arg1 = 5\n\t\t\t\tinfo.checked = (DBM.Options.InfoFrameLines == 5)\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.INFOFRAME_LINES_TO:format(8)\n\t\t\t\tinfo.func = setLines\n\t\t\t\tinfo.arg1 = 8\n\t\t\t\tinfo.checked = (DBM.Options.InfoFrameLines == 8)\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.INFOFRAME_LINES_TO:format(10)\n\t\t\t\tinfo.func = setLines\n\t\t\t\tinfo.arg1 = 10\n\t\t\t\tinfo.checked = (DBM.Options.InfoFrameLines == 10)\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.INFOFRAME_LINES_TO:format(15)\n\t\t\t\tinfo.func = setLines\n\t\t\t\tinfo.arg1 = 15\n\t\t\t\tinfo.checked = (DBM.Options.InfoFrameLines == 15)\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.INFOFRAME_LINES_TO:format(20)\n\t\t\t\tinfo.func = setLines\n\t\t\t\tinfo.arg1 = 20\n\t\t\t\tinfo.checked = (DBM.Options.InfoFrameLines == 20)\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.INFOFRAME_LINES_TO:format(40)\n\t\t\t\tinfo.func = setLines\n\t\t\t\tinfo.arg1 = 40 -- Use 40 in classic for full man raids\n\t\t\t\tinfo.checked = (DBM.Options.InfoFrameLines == 40)\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\t\t\telseif menu == \"cols\" then\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.INFOFRAME_LINESDEFAULT\n\t\t\t\tinfo.func = setCols\n\t\t\t\tinfo.arg1 = 0\n\t\t\t\tinfo.checked = (DBM.Options.InfoFrameCols == 0)\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.INFOFRAME_COLS_TO:format(1)\n\t\t\t\tinfo.func = setCols\n\t\t\t\tinfo.arg1 = 1\n\t\t\t\tinfo.checked = (DBM.Options.InfoFrameCols == 1)\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.INFOFRAME_COLS_TO:format(2)\n\t\t\t\tinfo.func = setCols\n\t\t\t\tinfo.arg1 = 2\n\t\t\t\tinfo.checked = (DBM.Options.InfoFrameCols == 2)\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.INFOFRAME_COLS_TO:format(3)\n\t\t\t\tinfo.func = setCols\n\t\t\t\tinfo.arg1 = 3\n\t\t\t\tinfo.checked = (DBM.Options.InfoFrameCols == 3)\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.INFOFRAME_COLS_TO:format(4)\n\t\t\t\tinfo.func = setCols\n\t\t\t\tinfo.arg1 = 4\n\t\t\t\tinfo.checked = (DBM.Options.InfoFrameCols == 4)\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.INFOFRAME_COLS_TO:format(5)\n\t\t\t\tinfo.func = setCols\n\t\t\t\tinfo.arg1 = 5\n\t\t\t\tinfo.checked = (DBM.Options.InfoFrameCols == 5)\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.INFOFRAME_COLS_TO:format(6)\n\t\t\t\tinfo.func = setCols\n\t\t\t\tinfo.arg1 = 6\n\t\t\t\tinfo.checked = (DBM.Options.InfoFrameCols == 6)\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\t\t\tend\n\t\tend\n\tend\nend\n\n------------------------\n--  Create the frame  --\n------------------------\nfunction createFrame()\n\tframe = CreateFrame(\"Frame\", \"DBMInfoFrame\", UIParent)\n\tframe:Hide()\n\tframe:SetFrameStrata(\"DIALOG\")\n\tframe.backdropInfo = {\n\t\tbgFile\t\t= \"Interface\\\\DialogFrame\\\\UI-DialogBox-Background\", -- 131071\n\t\ttile\t\t= true,\n\t\ttileSize\t= 16\n\t}\n\tframe:SetBackdrop(frame.backdropInfo)\n\tframe:SetPoint(DBM.Options.InfoFramePoint, UIParent, DBM.Options.InfoFramePoint, DBM.Options.InfoFrameX, DBM.Options.InfoFrameY)\n\tframe:SetSize(10, 10)\n\tframe:SetClampedToScreen(true)\n\tframe:EnableMouse(true)\n\tframe:SetToplevel(true)\n\tframe:SetMovable(true)\n\tframe:RegisterForDrag(\"LeftButton\")\n\tframe:SetScript(\"OnDragStart\", function(self)\n\t\tif not DBM.Options.InfoFrameLocked then\n\t\t\tself:StartMoving()\n\t\tend\n\tend)\n\tframe:SetScript(\"OnDragStop\", function(self)\n\t\tself:StopMovingOrSizing()\n\t\tlocal point, _, _, x, y = self:GetPoint(1)\n\t\tDBM.Options.InfoFrameX = x\n\t\tDBM.Options.InfoFrameY = y\n\t\tDBM.Options.InfoFramePoint = point\n\tend)\n\tframe:SetScript(\"OnEvent\", function(self, event, ...)\n\t\tif infoFrame[event] then\n\t\t\tinfoFrame[event](self, ...)\n\t\tend\n\tend)\n\tframe:SetScript(\"OnMouseDown\", function(_, button)\n\t\tif button == \"RightButton\" then\n\t\t\tlocal dropdownFrame = CreateFrame(\"Frame\", \"DBMInfoFrameDropdown\", frame, \"UIDropDownMenuTemplate\")\n\t\t\tUIDropDownMenu_Initialize(dropdownFrame, initializeDropdown)\n\t\t\tToggleDropDownMenu(1, nil, dropdownFrame, \"cursor\", 5, -10)\n\t\tend\n\tend)\n\n\tlocal header = frame:CreateFontString(nil, \"OVERLAY\", \"GameFontNormal\")\n\theader:SetTextColor(1, 1, 1)\n\theader:SetPoint(\"BOTTOMLEFT\", frame, \"TOPLEFT\", 2, 2)\n\tframe.header = header\n\tinfoFrame:SetHeader()\n\n\tframe.lines = {}\nend\n\n------------------------\n--  Update functions  --\n------------------------\nlocal updateCallbacks = {}\n\nlocal function sortFuncDesc(a, b)\n\treturn lines[a] > lines[b]\nend\n\nlocal function sortFuncAsc(a, b)\n\treturn lines[a] < lines[b]\nend\n\nlocal function sortGroupId(a, b)\n\treturn DBM.GetGroupId(DBM, a) < DBM.GetGroupId(DBM, b)\nend\n\nlocal function updateLines(preSorted)\n\ttwipe(sortedLines)\n\tif preSorted then\n\t\t-- Copy table as code from mod keeps around references this this and the \"normal\" table is wiped regularly\n\t\tfor i, v in ipairs(preSorted) do\n\t\t\tsortedLines[i] = v\n\t\tend\n\telse\n\t\tfor i in pairs(lines) do\n\t\t\tsortedLines[#sortedLines + 1] = i\n\t\tend\n\t\tif sortMethod == 3 then\n\t\t\ttsort(sortedLines, sortGroupId)\n\t\telseif sortMethod == 2 then\n\t\t\ttsort(sortedLines, sortFuncAsc)\n\t\telse\n\t\t\ttsort(sortedLines, sortFuncDesc)\n\t\tend\n\tend\n\tfor _, v in ipairs(updateCallbacks) do\n\t\tv(sortedLines)\n\tend\nend\n\n--[[\nlocal function namesortFuncAsc(a, b)\n\treturn a < b\nend\n\nlocal function updateNamesortLines()\n\ttwipe(sortedLines)\n\tfor i in pairs(lines) do\n\t\tsortedLines[#sortedLines + 1] = i\n\tend\n\ttsort(sortedLines, namesortFuncAsc)\n\tfor _, v in ipairs(updateCallbacks) do\n\t\tv(sortedLines)\n\tend\nend\n]]--\n\nlocal function updateLinesCustomSort(sortFunc)\n\ttwipe(sortedLines)\n\tfor i in pairs(lines) do\n\t\tsortedLines[#sortedLines + 1] = i\n\tend\n\ttsort(sortedLines, sortFunc)\n\tfor _, v in ipairs(updateCallbacks) do\n\t\tv(sortedLines)\n\tend\nend\n\nlocal function updateIcons()\n\ttwipe(icons)\n\tfor uId in DBM:GetGroupMembers() do\n\t\tlocal icon = GetRaidTargetIndex(uId)\n\t\tlocal icon2 = GetRaidTargetIndex(uId .. \"target\")\n\t\tif icon and icon <= 8 then\n\t\t\ticons[DBM:GetUnitFullName(uId)] = (\"|TInterface\\\\TargetingFrame\\\\UI-RaidTargetingIcon_%d:0|t\"):format(icon)\n\t\tend\n\t\tif icon2 and icon2 <= 8 then\n\t\t\ticons[DBM:GetUnitFullName(uId .. \"target\")] = (\"|TInterface\\\\TargetingFrame\\\\UI-RaidTargetingIcon_%d:0|t\"):format(icon2)\n\t\tend\n\tend\n\tfor i = 1, 5 do\n\t\tlocal icon = GetRaidTargetIndex(\"boss\" .. i)\n\t\tif icon then\n\t\t\ticons[UnitName(\"boss\" .. i)] = (\"|TInterface\\\\TargetingFrame\\\\UI-RaidTargetingIcon_%d:0|t\"):format(icon)\n\t\tend\n\tend\nend\n\nlocal function updateHealth()\n\ttwipe(lines)\n\tlocal threshold = value[1]\n\tfor uId in DBM:GetGroupMembers() do\n\t\tif UnitHealth(uId) < threshold and not UnitIsDeadOrGhost(uId) then\n\t\t\tlines[DBM:GetUnitFullName(uId)] = UnitHealth(uId) - threshold\n\t\tend\n\tend\n\tupdateLines()\n\tupdateIcons()\nend\n\nlocal function updatePlayerPower()\n\ttwipe(lines)\n\tlocal threshold = value[1]\n\tlocal powerType = value[2]\n\tlocal spellFilter = value[3]\n\t-- Value 4 is the noUpdate handler\n\t-- Value 5 is sorting method, handled in show handler\n\tfor uId in DBM:GetGroupMembers() do\n\t\tif not spellFilter or not DBM:UnitDebuff(uId, spellFilter) then\n\t\t\tlocal maxPower = UnitPowerMax(uId, powerType)\n\t\t\tif maxPower ~= 0 and not UnitIsDeadOrGhost(uId) and UnitPower(uId, powerType) / UnitPowerMax(uId, powerType) * 100 >= threshold then\n\t\t\t\tlines[DBM:GetUnitFullName(uId)] = UnitPower(uId, powerType)\n\t\t\tend\n\t\tend\n\tend\n\tif DBM.Options.InfoFrameShowSelf and not lines[playerName] and UnitPower(\"player\", powerType) > 0 then\n\t\tlines[playerName] = UnitPower(\"player\", powerType)\n\tend\n\tupdateLines()\n\tupdateIcons()\nend\n\nlocal function updateEnemyPower()\n\ttwipe(lines)\n\tlocal threshold = value[1]\n\tlocal powerType = value[2]\n\tlocal specificUnit = value[3]\n\tif powerType then -- Only do power type defined\n\t\tif specificUnit then\n\t\t\tspecificUnit = UnitExists(specificUnit) or DBM:GetUnitIdFromGUID(specificUnit)--unitID already passed or GUID we convert into unitID\n\t\t\tif UnitExists(specificUnit) then\n\t\t\t\tlocal currentPower, maxPower = UnitPower(specificUnit, powerType), UnitPowerMax(specificUnit, powerType)\n\t\t\t\tif maxPower and maxPower > 0 then\n\t\t\t\t\tlocal percent = currentPower / maxPower * 100\n\t\t\t\t\tif percent >= threshold then\n\t\t\t\t\t\tlines[UnitName(specificUnit)] = mfloor(percent) .. \"%\"\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\tfor i = 1, 5 do\n\t\t\t\tlocal uId = \"boss\" .. i\n\t\t\t\tlocal currentPower, maxPower = UnitPower(uId), UnitPowerMax(uId)\n\t\t\t\tif maxPower and maxPower > 0 then\n\t\t\t\t\tlocal percent = currentPower / maxPower * 100\n\t\t\t\t\tif percent >= threshold then\n\t\t\t\t\t\tlines[UnitName(uId)] = mfloor(percent) .. \"%\"\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\telse -- Check primary power type and alternate power types together. This should only be used if BOTH power types exist on same boss\n\t\tif specificUnit then\n\t\t\tspecificUnit = UnitExists(specificUnit) or DBM:GetUnitIdFromGUID(specificUnit)--unitID already passed or GUID we convert into unitID\n\t\t\tif UnitExists(specificUnit) then\n\t\t\t\t-- Primary Power\n\t\t\t\tlocal currentPower, maxPower = UnitPower(specificUnit), UnitPowerMax(specificUnit)\n\t\t\t\tif maxPower and maxPower > 0 then\n\t\t\t\t\tlocal percent = currentPower / maxPower * 100\n\t\t\t\t\tif percent >= threshold then\n\t\t\t\t\t\tlines[UnitName(specificUnit)] = mfloor(percent) .. \"%\"\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\t-- Alternate Power\n\t\t\t\tlocal currentAltPower, maxAltPower = UnitPower(specificUnit, ADDITIONAL_POWER_BAR_INDEX), UnitPowerMax(specificUnit, ADDITIONAL_POWER_BAR_INDEX)\n\t\t\t\tif maxAltPower and maxAltPower > 0 then\n\t\t\t\t\tif currentAltPower / maxAltPower * 100 >= threshold then\n\t\t\t\t\t\tlines[UnitName(specificUnit)] = L.INFOFRAME_ALT .. currentAltPower\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\tfor i = 1, 5 do\n\t\t\t\tlocal uId = \"boss\" .. i\n\t\t\t\t-- Primary Power\n\t\t\t\tlocal currentPower, maxPower = UnitPower(uId), UnitPowerMax(uId)\n\t\t\t\tif maxPower and maxPower > 0 then\n\t\t\t\t\tif currentPower / maxPower * 100 >= threshold then\n\t\t\t\t\t\tlines[UnitName(uId)] = currentPower\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\t-- Alternate Power\n\t\t\t\tlocal currentAltPower, maxAltPower = UnitPower(uId, ADDITIONAL_POWER_BAR_INDEX), UnitPowerMax(uId, ADDITIONAL_POWER_BAR_INDEX)\n\t\t\t\tif maxAltPower and maxAltPower > 0 then\n\t\t\t\t\tif currentAltPower / maxAltPower * 100 >= threshold then\n\t\t\t\t\t\tlines[UnitName(uId)] = L.INFOFRAME_ALT .. currentAltPower\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\tupdateLines()\n\tupdateIcons()\nend\n\n-- WotLK does not have absorb API, so absorb numbers will be estimated using SpecializedAbsorbs library\nlocal function updateEnemyAbsorb()\n\ttwipe(lines)\n\tlocal spellInput = value[1]\n\tlocal totalAbsorb = value[2]\n\tlocal specificUnit = value[3]\n\tif specificUnit then\n\t\tspecificUnit = UnitExists(specificUnit) or DBM:GetUnitIdFromGUID(specificUnit)--unitID already passed or GUID we convert into unitID\n\t\tif UnitExists(specificUnit) then\n\t\t\tlocal absorbAmount\n\t\t\tif spellInput then -- Get specific spell absorb\n\t\t\t\tabsorbAmount = SpecializedAbsorbs:UnitEffect(UnitGUID(specificUnit), spellInput)\n\t\t\telse -- Get all of them\n\t\t\t\tabsorbAmount = SpecializedAbsorbs:UnitTotal(UnitGUID(specificUnit))\n\t\t\tend\n\t\t\tif absorbAmount and absorbAmount > 0 then\n\t\t\t\tif totalAbsorb then\n\t\t\t\t\tlines[UnitName(specificUnit)] = mfloor(absorbAmount / totalAbsorb * 100) .. \"%\"\n\t\t\t\telse\n\t\t\t\t\tlines[UnitName(specificUnit)] = mfloor(absorbAmount)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\telse--Generic absorbs for bosses. Not to be mistaken for updateMultiEnemyAbsorb, which supports checking multiple units that might or might not be bosses\n\t\tfor i = 1, 5 do\n\t\t\tlocal uId = \"boss\" .. i\n\t\t\tif UnitExists(uId) then\n\t\t\t\tlocal absorbAmount\n\t\t\t\tif spellInput then -- Get specific spell absorb\n\t\t\t\t\tabsorbAmount = SpecializedAbsorbs:UnitEffect(UnitGUID(uId), spellInput)\n\t\t\t\telse -- Get all of them\n\t\t\t\t\tabsorbAmount = SpecializedAbsorbs:UnitTotal(UnitGUID(uId))\n\t\t\t\tend\n\t\t\t\tif absorbAmount and absorbAmount > 0 then\n\t\t\t\t\tif totalAbsorb then\n\t\t\t\t\t\tlines[UnitName(uId)] = mfloor(totalAbsorb and absorbAmount / totalAbsorb * 100) .. \"%\"\n\t\t\t\t\telse\n\t\t\t\t\t\tlines[UnitName(uId)] = mfloor(absorbAmount)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\tupdateLines()\n\tupdateIcons()\nend\n\n--Really hate splitting this off from updateEnemyAbsorb but having them merged was even uglier\n--Note, this method also less efficient than boss only or single unit absorb tracking.\n--Don't use this function to be lazy (ie just passing 1 guid instead of finding valid unit at mod level)\nlocal function updateMultiEnemyAbsorb()\n\ttwipe(lines)\n\tlocal spellInput = value[1]\n\tlocal totalAbsorb = value[2]\n\tlocal guidTable = value[3]--Multi target by table\n\tlocal guidTracked = {}\n\tfor i = 1, 10 do\n\t\tif #guidTable == #guidTracked then--Stop searching, found everything we're looking for.\n\t\t\tbreak\n\t\tend\n\t\tlocal uId = \"boss\" .. i\n\t\tif UnitExists(uId) then\n\t\t\tlocal targetGUID = UnitGUID(uId)\n\t\t\tif guidTable[targetGUID] and not guidTracked[targetGUID] then\n\t\t\t\tguidTracked[targetGUID] = true\n\t\t\t\tlocal absorbAmount\n\t\t\t\tif spellInput then -- Get specific spell absorb\n\t\t\t\t\tabsorbAmount = SpecializedAbsorbs:UnitEffect(targetGUID, spellInput)\n\t\t\t\telse -- Get all of them\n\t\t\t\t\tabsorbAmount = SpecializedAbsorbs:UnitTotal(targetGUID)\n\t\t\t\tend\n\t\t\t\tif absorbAmount and absorbAmount > 0 then\n\t\t\t\t\tif totalAbsorb then\n\t\t\t\t\t\tlines[UnitName(uId)] = mfloor(totalAbsorb and absorbAmount / totalAbsorb * 100) .. \"%\"\n\t\t\t\t\telse\n\t\t\t\t\t\tlines[UnitName(uId)] = mfloor(absorbAmount)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\tfor unitId in DBM:GetGroupMembers() do--Do not use self on this function, because self might be bossModPrototype\n\t\tif #guidTable == #guidTracked then--Stop searching, found everything we're looking for.\n\t\t\tbreak\n\t\tend\n\t\tlocal uId = unitId .. \"target\"\n\t\tlocal targetGUID = UnitGUID(unitId)\n\t\tif guidTable[targetGUID] and not guidTracked[targetGUID] then\n\t\t\tguidTracked[targetGUID] = true\n\t\t\tlocal absorbAmount\n\t\t\tif spellInput then -- Get specific spell absorb\n\t\t\t\tabsorbAmount = SpecializedAbsorbs:UnitEffect(UnitGUID(uId), spellInput)\n\t\t\telse -- Get all of them\n\t\t\t\tabsorbAmount = SpecializedAbsorbs:UnitTotal(UnitGUID(uId))\n\t\t\tend\n\t\t\tif absorbAmount and absorbAmount > 0 then\n\t\t\t\tif totalAbsorb then\n\t\t\t\t\tlines[UnitName(uId)] = mfloor(totalAbsorb and absorbAmount / totalAbsorb * 100) .. \"%\"\n\t\t\t\telse\n\t\t\t\t\tlines[UnitName(uId)] = mfloor(absorbAmount)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\tupdateLines()\n\tupdateIcons()\nend\n\nlocal function updateAllAbsorb()\n\ttwipe(lines)\n\tlocal spellInput = value[1]\n\tlocal totalAbsorb = value[2]\n\tfor i = 1, 5 do\n\t\tlocal uId = \"boss\" .. i\n\t\tif UnitExists(uId) then\n\t\t\tlocal absorbAmount\n\t\t\tif spellInput then -- Get specific spell absorb\n\t\t\t\tabsorbAmount = SpecializedAbsorbs:UnitEffect(UnitGUID(uId), spellInput)\n\t\t\telse -- Get all of them\n\t\t\t\tabsorbAmount = SpecializedAbsorbs:UnitTotal(UnitGUID(uId))\n\t\t\tend\n\t\t\tif absorbAmount and absorbAmount > 0 then\n\t\t\t\tif totalAbsorb then\n\t\t\t\t\tlines[UnitName(uId)] = mfloor(totalAbsorb and absorbAmount / totalAbsorb * 100) .. \"%\"\n\t\t\t\telse\n\t\t\t\t\tlines[UnitName(uId)] = mfloor(absorbAmount)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\tif spellInput then\n\t\tfor uId in DBM:GetGroupMembers() do\n\t\t\tlocal absorbAmount = SpecializedAbsorbs:UnitEffect(UnitGUID(uId), spellInput)\n\t\t\tif absorbAmount and absorbAmount > 0 then\n\t\t\t\tif totalAbsorb then\n\t\t\t\t\tlines[UnitName(uId)] = mfloor(totalAbsorb and absorbAmount / totalAbsorb * 100) .. \"%\"\n\t\t\t\telse\n\t\t\t\t\tlines[UnitName(uId)] = mfloor(absorbAmount)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\tupdateLines()\n\tupdateIcons()\nend\n\nlocal function updatePlayerAbsorb()\n\ttwipe(lines)\n\tlocal spellInput = value[1]\n\tlocal totalAbsorb = value[2]\n\tfor uId in DBM:GetGroupMembers() do\n\t\tlocal absorbAmount\n\t\tif spellInput then -- Get specific spell absorb\n\t\t\tabsorbAmount = SpecializedAbsorbs:UnitEffect(UnitGUID(uId), spellInput)\n\t\telse--Not even spell input given, this is a very generic infoframe\n\t\t\tabsorbAmount = SpecializedAbsorbs:UnitTotal(UnitGUID(uId))\n\t\tend\n\t\tif absorbAmount and absorbAmount > 0 then\n\t\t\tif totalAbsorb then\n\t\t\t\tlines[UnitName(uId)] = mfloor(totalAbsorb and absorbAmount / totalAbsorb * 100) .. \"%\"\n\t\t\telse\n\t\t\t\tlines[UnitName(uId)] = mfloor(absorbAmount)\n\t\t\tend\n\t\tend\n\tend\n\tupdateLines()\n\tupdateIcons()\nend\n\n-- Buffs that are good to have, therefor bad not to have them.\nlocal function updatePlayerBuffs()\n\ttwipe(lines)\n\tlocal spellName = value[1]\n\tlocal tankIgnored = value[2]\n\tfor uId in DBM:GetGroupMembers() do\n\t\tif tankIgnored and (UnitGroupRolesAssigned(uId) == \"TANK\" or GetPartyAssignment(\"MAINTANK\", uId, 1)) then\n\t\telse\n\t\t\tif not DBM:UnitBuff(uId, spellName) and not UnitIsDeadOrGhost(uId) then\n\t\t\t\tlines[DBM:GetUnitFullName(uId)] = \"\"\n\t\t\tend\n\t\tend\n\tend\n\tupdateLines()\n\tupdateIcons()\nend\n\n-- Debuffs that are good to have, therefor it's bad NOT to have them.\nlocal function updateGoodPlayerDebuffs()\n\ttwipe(lines)\n\tlocal spellInput = value[1]\n\tlocal tankIgnored = value[2]\n\tfor uId in DBM:GetGroupMembers() do\n\t\tif tankIgnored and (UnitGroupRolesAssigned(uId) == \"TANK\" or GetPartyAssignment(\"MAINTANK\", uId, 1)) then\n\t\telse\n\t\t\tif not DBM:UnitDebuff(uId, spellInput) and not UnitIsDeadOrGhost(uId) then\n\t\t\t\tlines[DBM:GetUnitFullName(uId)] = \"\"\n\t\t\tend\n\t\tend\n\tend\n\tupdateLines()\n\tupdateIcons()\nend\n\n-- Debuffs that are bad to have, therefor it is bad to have them.\n-- Function will auto handle spellName or spellId via DBMs unit debuff handler and spellInput type\nlocal function updateBadPlayerDebuffs()\n\ttwipe(lines)\n\tlocal spellInput = value[1]\n\tlocal tankIgnored = value[2]\n\tfor uId in DBM:GetGroupMembers() do\n\t\tif tankIgnored and (UnitGroupRolesAssigned(uId) == \"TANK\" or GetPartyAssignment(\"MAINTANK\", uId, 1)) then\n\t\telse\n\t\t\tif DBM:UnitDebuff(uId, spellInput) and not UnitIsDeadOrGhost(uId) then\n\t\t\t\tlines[DBM:GetUnitFullName(uId)] = \"\"\n\t\t\tend\n\t\tend\n\tend\n\tupdateLines()\n\tupdateIcons()\nend\n\n--Debuffs with important durations that we track\nlocal function updatePlayerDebuffRemaining()\n\ttwipe(lines)\n\tlocal spellInput = value[1]\n\tfor uId in DBM:GetGroupMembers() do\n\t\tlocal expires = select(6, DBM:UnitDebuffNew(uId, spellInput))\n\t\tif expires then\n\t\t\tif expires == 0 then\n\t\t\t\tlines[DBM:GetUnitFullName(uId)] = 9000--Force sorting the unknowns under the ones we do know.\n\t\t\telse\n\t\t\t\tlocal debuffTime = expires - GetTime()\n\t\t\t\tlines[DBM:GetUnitFullName(uId)] = mfloor(debuffTime)\n\t\t\tend\n\t\tend\n\tend\n\tupdateLines()\n\tupdateIcons()\nend\n\n-- Buffs with important durations that we track\nlocal function updatePlayerBuffRemaining()\n\ttwipe(lines)\n\tlocal spellInput = value[1]\n\tfor uId in DBM:GetGroupMembers() do\n\t\tlocal expires = select(6, DBM:UnitBuffNew(uId, spellInput))\n\t\tif expires then\n\t\t\tif expires == 0 then\n\t\t\t\tlines[DBM:GetUnitFullName(uId)] = 9000--Force sorting the unknowns under the ones we do know.\n\t\t\telse\n\t\t\t\tlocal debuffTime = expires - GetTime()\n\t\t\t\tlines[DBM:GetUnitFullName(uId)] = mfloor(debuffTime)\n\t\t\tend\n\t\tend\n\tend\n\tupdateLines()\n\tupdateIcons()\nend\n\n-- Debuffs that are bad to have, but we want to show players who do NOT have them\n-- Function will auto handle spellName or spellId via DBMs unit debuff handler and spellInput type\nlocal function updateReverseBadPlayerDebuffs()\n\ttwipe(lines)\n\tlocal spellInput = value[1]\n\tlocal tankIgnored = value[2]\n\tfor uId in DBM:GetGroupMembers() do\n\t\tif tankIgnored and (UnitGroupRolesAssigned(uId) == \"TANK\" or GetPartyAssignment(\"MAINTANK\", uId, 1)) then\n\t\telse\n\t\t\tif not DBM:UnitDebuff(uId, spellInput) and not UnitIsDeadOrGhost(uId) and not DBM:UnitBuff(uId, 27827) then--27827 Spirit of Redemption. This particular info frame wants to ignore this\n\t\t\t\tlines[DBM:GetUnitFullName(uId)] = \"\"\n\t\t\tend\n\t\tend\n\tend\n\tupdateLines()\n\tupdateIcons()\nend\n\nlocal function updatePlayerBuffStacks()\n\ttwipe(lines)\n\tlocal spellInput = value[1]\n\tfor uId in DBM:GetGroupMembers() do\n\t\tlocal spellName, _, count = DBM:UnitBuffNew(uId, spellInput)\n\t\tif spellName and count then\n\t\t\tlines[DBM:GetUnitFullName(uId)] = count\n\t\tend\n\tend\n\tupdateIcons()\n\tupdateLines()\nend\n\nlocal function updatePlayerDebuffStacks()\n\ttwipe(lines)\n\tlocal spellInput = value[1]\n\tfor uId in DBM:GetGroupMembers() do\n\t\tlocal spellName, _, count = DBM:UnitDebuffNew(uId, spellInput)\n\t\tif spellName and count then\n\t\t\tlines[DBM:GetUnitFullName(uId)] = count\n\t\tend\n\tend\n\tupdateIcons()\n\tupdateLines()\nend\n\nlocal function updatePlayerAggro()\n\ttwipe(lines)\n\tlocal aggroType = value[1]\n\tlocal tankIgnored = value[2]\n\tfor uId in DBM:GetGroupMembers() do\n\t\tif tankIgnored and (UnitGroupRolesAssigned(uId) == \"TANK\" or GetPartyAssignment(\"MAINTANK\", uId, 1)) then\n\t\telse\n\t\t\tlocal currentThreat = UnitThreatSituation(uId) or 0\n\t\t\tif currentThreat >= aggroType then\n\t\t\t\tlines[DBM:GetUnitFullName(uId)] = \"\"\n\t\t\tend\n\t\tend\n\tend\n\tupdateLines()\n\tupdateIcons()\nend\n\nlocal function updatePlayerTargets()\n\ttwipe(lines)\n\tlocal cId = value[1]\n\tfor uId, _ in DBM:GetGroupMembers() do\n\t\tif DBM:GetUnitCreatureId(uId .. \"target\") ~= cId and (UnitGroupRolesAssigned(uId) == \"DAMAGER\" or UnitGroupRolesAssigned(uId) == \"NONE\") then\n\t\t\tlines[DBM:GetUnitFullName(uId)] = \"\"\n\t\tend\n\tend\n\tupdateLines()\n\tupdateIcons()\nend\n\nlocal function updateByFunction()\n\tlocal func = value[1]\n\tlocal sortFunc = value[2]\n\tlocal useIcon = value[3]\n\tlocal presortedLines\n\tlines, presortedLines = func()\n\tif sortFunc then\n\t\tif type(sortFunc) == \"function\" then\n\t\t\tupdateLinesCustomSort(sortFunc)\n\t\telse\n\t\t\tupdateLines()\n\t\tend\n\telse\n\t\tupdateLines(presortedLines)\n\tend\n\tif useIcon then\n\t\tupdateIcons()\n\tend\nend\n\n-- Unsorted table maintained by mod and just sent here.\n-- Never updated by onupdate method, requires manual updates when mod updates table\nlocal function updateByTable(table)\n\ttwipe(lines)\n\tif table then\n\t\tfor i, v in pairs(table) do\n\t\t\tlines[i] = v\n\t\tend\n\tend\n\tupdateLines()\n\tupdateIcons()\nend\n\nlocal function updateTest()\n\ttwipe(lines)\n\tlines[\"Alpha\"] = 1\n\tlines[\"Beta\"] = 10\n\tlines[\"Gamma\"] = 25\n\tlines[\"Delta\"] = 50\n\tlines[\"Epsilon\"] = 100\n\tupdateLines()\nend\n\nlocal test2Table\nlocal function updateTest2()\n\ttwipe(lines)\n\tif not test2Table then\n\t\ttest2Table = {}\n\t\tfor _ = 1, 40 do\n\t\t\tlocal ident = \"\"\n\t\t\tfor _ = 1, mrandom(5, 12) do\n\t\t\t\tident = ident .. schar(mrandom(65, 90))\n\t\t\tend\n\t\t\ttest2Table[ident] = mrandom(1, 10) * 10\n\t\tend\n\tend\n\tfor k, v in pairs(test2Table) do\n\t\tlines[k] = v\n\tend\n\tupdateLines()\nend\n\nlocal test3Counter = 0\nlocal function updateTest3()\n\ttwipe(lines)\n\tif not test2Table then\n\t\ttest2Table = {}\n\t\tfor _ = 1, 40 do\n\t\t\tlocal ident = \"\"\n\t\t\tfor _ = 1, mrandom(5, 12) do\n\t\t\t\tident = ident .. schar(mrandom(65, 90))\n\t\t\tend\n\t\t\ttest2Table[ident] = mrandom(1, 10) * 10\n\t\tend\n\tend\n\tif test3Counter < 40 then\n\t\tlocal count = 0\n\t\tfor k, _ in pairs(test2Table) do\n\t\t\tif count > 40 - test3Counter then\n\t\t\t\tbreak\n\t\t\tend\n\t\t\tcount = count + 1\n\t\t\tlines[k] = mrandom(1, 10) * 10\n\t\tend\n\t\ttest3Counter = test3Counter + 1\n\tend\n\tupdateLines()\nend\n\nlocal events = {\n\t[\"health\"] = updateHealth,\n\t[\"playerpower\"] = updatePlayerPower,\n\t[\"enemypower\"] = updateEnemyPower,\n\t[\"enemyabsorb\"] = updateEnemyAbsorb,\n\t[\"multienemyabsorb\"] = updateMultiEnemyAbsorb,\n\t[\"allabsorb\"] = updateAllAbsorb,\n\t[\"playerabsorb\"] = updatePlayerAbsorb,\n\t[\"playerbuff\"] = updatePlayerBuffs,\n\t[\"playergooddebuff\"] = updateGoodPlayerDebuffs,\n\t[\"playerbaddebuff\"] = updateBadPlayerDebuffs,\n\t[\"playerdebuffremaining\"] = updatePlayerDebuffRemaining,\n\t[\"playerbuffremaining\"] = updatePlayerBuffRemaining,\n\t[\"reverseplayerbaddebuff\"] = updateReverseBadPlayerDebuffs,\n\t[\"playeraggro\"] = updatePlayerAggro,\n\t[\"playerbuffstacks\"] = updatePlayerBuffStacks,\n\t[\"playerdebuffstacks\"] = updatePlayerDebuffStacks,\n\t[\"playertargets\"] = updatePlayerTargets,\n\t[\"function\"] = updateByFunction,\n\t[\"table\"] = updateByTable,\n\t[\"test\"] = updateTest,\n\t[\"test2\"] = updateTest2,\n\t[\"test3\"] = updateTest3\n}\n\n----------------\n--  OnUpdate  --\n----------------\nlocal friendlyEvents = {\n\t[\"health\"] = true,\n\t[\"playerpower\"] = true,\n\t[\"playerabsorb\"] = true,\n\t[\"playerbuff\"] = true,\n\t[\"playergooddebuff\"] = true,\n\t[\"playerbaddebuff\"] = true,\n\t[\"playerdebuffremaining\"] = true,\n\t[\"playerbuffremaining\"] = true,\n\t[\"reverseplayerbaddebuff\"] = true,\n\t[\"playeraggro\"] = true,\n\t[\"playerbuffstacks\"] = true,\n\t[\"playerdebuffstacks\"] = true,\n\t[\"playertargets\"] = true\n}\n\nlocal function onUpdate(frame, table)\n\tif events[currentEvent] then\n\t\tevents[currentEvent](table)\n\telse\n\t\tif frame then\n\t\t\tframe:Hide()\n\t\tend\n\tend\n\tlocal color = NORMAL_FONT_COLOR\n\tinfoFrame:ClearLines()\n\tlocal linesShown = 0\n\tfor i = 1, #sortedLines do\n\t\tif linesShown >= maxLines * maxCols then\n\t\t\tbreak\n\t\tend\n\t\tlocal leftText = sortedLines[i]\n\t\tif not leftText then\n\t\t\terror(\"DBM InfoFrame: leftText cannot be nil, Notify DBM author. Infoframe force shutting down \", 2)\n\t\t\tframe:Hide()\n\t\t\treturn\n\t\telseif leftText and type(leftText) ~= \"string\" then\n\t\t\tleftText = tostring(leftText)\n\t\tend\n\t\tlocal rightText = lines[leftText]\n\t\tlocal extra, extraName = ssplit(\"*\", leftText) -- Find just unit name, if extra info had to be added to make unique\n\t\tlocal icon = icons[extraName or leftText] and icons[extraName or leftText] .. leftText\n\t\tif friendlyEvents[currentEvent] then\n\t\t\tlocal unitId = DBM:GetRaidUnitId(DBM:GetUnitFullName(extraName or leftText)) or \"player\"--Prevent nil logical error\n\t\t\tif unitId and UnitExists(unitId) then\n\t\t\t\tlocal _, class = UnitClass(unitId)\n\t\t\t\tif class then\n\t\t\t\t\tcolor = RAID_CLASS_COLORS[class]\n\t\t\t\t\tif DBM.Options.StripServerName then -- StripServerName option is checked here, even though it's checked in GetShortServerName function, because we have to apply custom 3rd column hack reconstruction\n\t\t\t\t\t\tlocal shortName = DBM:GetShortServerName(extraName or leftText)\n\t\t\t\t\t\tif extraName then -- 3 column hack is present, we need to reconstruct leftText with shortened name\n\t\t\t\t\t\t\tleftText = extra..\"*\"..shortName\n\t\t\t\t\t\telse -- LeftText is name, just replace it with shortname\n\t\t\t\t\t\t\tleftText = shortName\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tlinesShown = linesShown + 1\n\t\t\t\tif unitId and UnitIsUnit(unitId, \"player\") then -- It's player.\n\t\t\t\t\tif currentEvent == \"health\" or currentEvent == \"playerpower\" or currentEvent == \"playerabsorb\" or currentEvent == \"playerbuff\" or currentEvent == \"playergooddebuff\" or currentEvent == \"playerbaddebuff\" or currentEvent == \"playerdebuffremaining\" or currentEvent == \"playerdebuffstacks\" or currentEvent == \"playerbuffremaining\" or currentEvent == \"playertargets\" or currentEvent == \"playeraggro\" then--Red\n\t\t\t\t\t\tinfoFrame:SetLine(linesShown, icon or leftText, rightText, 255, 0, 0, 255, 255, 255)\n\t\t\t\t\telse -- Green\n\t\t\t\t\t\tinfoFrame:SetLine(linesShown, icon or leftText, rightText, 0, 255, 0, 255, 255, 255)\n\t\t\t\t\tend\n\t\t\t\telse -- It's not player, do nothing special with it. Ordinary class colored text.\n\t\t\t\t\tif currentEvent == \"playerdebuffremaining\" or currentEvent == \"playerbuffremaining\" then\n\t\t\t\t\t\tlocal numberValue = tonumber(rightText)\n\t\t\t\t\t\tif numberValue < 6 then\n\t\t\t\t\t\t\tinfoFrame:SetLine(linesShown, icon or leftText, rightText, color.r, color.g, color.b, 255, 0, 0)--Red\n\t\t\t\t\t\telseif numberValue < 11 then\n\t\t\t\t\t\t\tinfoFrame:SetLine(linesShown, icon or leftText, rightText, color.r, color.g, color.b, 255, 127.5, 0)--Orange\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tif numberValue == 9000 then -- Out of range players\n\t\t\t\t\t\t\t\tinfoFrame:SetLine(linesShown, icon or leftText, SPELL_FAILED_OUT_OF_RANGE, color.r, color.g, color.b, 255, 0, 0)--Red\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tinfoFrame:SetLine(linesShown, icon or leftText, rightText, color.r, color.g, color.b, 255, 255, 255)--White\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\telse\n\t\t\t\t\t\tinfoFrame:SetLine(linesShown, icon or leftText, rightText, color.r, color.g, color.b, 255, 255, 255)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\tlocal color2 = NORMAL_FONT_COLOR -- Only custom into frames will have chance of putting player names on right side\n\t\t\tlocal unitId = DBM:GetRaidUnitId(DBM:GetUnitFullName(extraName or leftText))\n\t\t\tlocal unitId2 = DBM:GetRaidUnitId(DBM:GetUnitFullName(rightText))\n\t\t\t-- Class color names in custom functions too, IF unitID exists\n\t\t\tif unitId then -- Check left text\n\t\t\t\tlocal _, class = UnitClass(unitId)\n\t\t\t\tif class then\n\t\t\t\t\tcolor = RAID_CLASS_COLORS[class]\n\t\t\t\t\tif DBM.Options.StripServerName then--StripServerName option is checked here, even though it's checked in GetShortServerName function, because we have to apply custom 3rd column hack reconstruction\n\t\t\t\t\t\tlocal shortName = DBM:GetShortServerName(extraName or leftText)\n\t\t\t\t\t\tif extraName then -- 3 column hack is present, we need to reconstruct leftText with shortened name\n\t\t\t\t\t\t\tleftText = extra..\"*\"..shortName\n\t\t\t\t\t\telse -- LeftText is name, just replace it with shortname\n\t\t\t\t\t\t\tleftText = shortName\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tcolor = NORMAL_FONT_COLOR\n\t\t\t\tleftText = extraName or leftText\n\t\t\tend\n\t\t\tif unitId2 then -- Check right text\n\t\t\t\tlocal _, class = UnitClass(unitId2)\n\t\t\t\tif class then\n\t\t\t\t\tcolor2 = RAID_CLASS_COLORS[class]\n\t\t\t\t\trightText = DBM:GetShortServerName(rightText)\n\t\t\t\tend\n\t\t\tend\n\t\t\tlinesShown = linesShown + 1\n\t\t\tinfoFrame:SetLine(linesShown, icon or leftText, rightText, color.r, color.g, color.b, color2.r, color2.g, color2.b)\n\t\tend\n\tend\n\tlocal maxWidth1, maxWidth2, linesPerRow = {}, {}, 5\n\tif linesShown > 5 then\n\t\tlinesPerRow = mmin(maxLines, mfloor(linesShown / maxCols + 0.99))\n\tend\n\tlocal shouldUpdate = prevLines ~= linesShown\n\tfor i = 1, linesShown do\n\t\tif shouldUpdate then\n\t\t\tinfoFrame:AlignLine(i * 2 - 1, linesPerRow * 2)\n\t\t\tinfoFrame:AlignLine(i * 2, linesPerRow * 2)\n\t\tend\n\t\tlocal m = mfloor(i / linesPerRow + 0.99)\n\t\tframe.lines[i * 2 - 1]:SetWidth(0) -- Hack here, because the string width doesn't calculate properly.\n\t\tframe.lines[i * 2]:SetWidth(0)\n\t\tmaxWidth1[m] = mmax(maxWidth1[m] or 0, frame.lines[i * 2 - 1]:GetStringWidth())\n\t\tmaxWidth2[m] = mmax(maxWidth2[m] or 0, frame.lines[i * 2]:GetStringWidth())\n\tend\n\tlocal size = DBM.Options.InfoFrameFontSize\n\tlocal width = 0\n\tfor i, _ in pairs(maxWidth1) do\n\t\tlocal maxWid, maxWid2 = maxWidth1[i], maxWidth2[i]\n\t\twidth = width + maxWid + maxWid2 + size + (size / 2)\n\t\tfor ii = 1, linesPerRow do\n\t\t\tlocal m = ((i - 1) * linesPerRow * 2) + (ii * 2)\n\t\t\tif not frame.lines[m] then\n\t\t\t\tbreak\n\t\t\tend\n\t\t\tframe.lines[m - 1]:SetSize(maxWid, size)\n\t\t\tframe.lines[m]:SetSize(maxWid2, size)\n\t\tend\n\tend\n\tif width == 0 then\n\t\twidth = 105\n\tend\n\tlocal height = size\n\tif linesShown > linesPerRow then\n\t\theight = height + (linesPerRow * size)\n\telse\n\t\theight = height + (mmin(linesShown, maxLines) * size)\n\tend\n\tframe:SetSize(width, height)\n\tframe:Show()\n\tprevLines = linesShown\nend\n\n---------------\n--  Methods  --\n---------------\n--Arg 1: spellName, health/powervalue, customfunction, table type. Arg 2: TankIgnore, Powertype, SortFunction, totalAbsorb, sortmethod (table/stacks). Arg 3: SpellFilter, UseIcon. Arg 4: disable onUpdate. Arg 5: sortmethod (playerpower)\nfunction infoFrame:Show(modMaxLines, event, ...)\n\tif DBM.Options.DontShowInfoFrame and not (event or \"\"):find(\"test\") then\n\t\treturn\n\tend\n\tprevLines = 0\n\t-- local currentMapId = GetCurrentMapAreaID()\n\tmodLines = modMaxLines\n\tif DBM.Options.InfoFrameLines and DBM.Options.InfoFrameLines ~= 0 then\n\t\tmaxLines = DBM.Options.InfoFrameLines\n\telse\n\t\tmaxLines = modMaxLines or 5\n\tend\n\tif DBM.Options.InfoFrameCols and DBM.Options.InfoFrameCols ~= 0 then\n\t\tmaxCols = DBM.Options.InfoFrameCols\n\telse\n\t\t-- TODO, still needs more finite control via gui later on\n\t\t-- I think dynamic options modMaxLines/10 modMaxLines/5 are both valid options, as well as just capping at 2 >= 10\n\t\tmaxCols = modMaxLines and modMaxLines >= 10 and 2 or 1\n\tend\n\ttwipe(value)\n\tfor i = 1, select(\"#\", ...) do\n\t\tvalue[i] = select(i, ...)\n\tend\n\tif not frame then\n\t\tcreateFrame()\n\tend\n\t-- Orders event to use spellID no matter what and not spell name\n\tif event:find(\"byspellid\") then\n\t\tevent = event:gsub(\"byspellid\", \"\") -- Strip off the byspellid, it served it's purpose, it simply told infoframe to not convert to spellName\n\t\tif type(value[1]) ~= \"number\" then\n\t\t\terror(\"DBM-InfoFrame: byspellid method must use spellId\", 2)\n\t\t\treturn\n\t\tend\n\t-- If spellId is given as value one and it's not a byspellid event, convert to spellname\n\t-- This also allows spell name to be given by mod, since value 1 verifies it's a number\n\telseif type(value[1]) == \"number\" and event ~= \"health\" and event ~= \"function\" and event ~= \"table\" and event ~= \"playertargets\" and event ~= \"playeraggro\" and event ~= \"playerpower\" and event ~= \"enemypower\" and event ~= \"test\" and event ~= \"test2\" then\n\t\t-- Outside of \"byspellid\" functions, typical frames will still use spell NAME matching not spellID.\n\t\t-- This just determines if we convert the spell input to a spell Name, if a spellId was provided for a non byspellid infoframe\n\t\tvalue[1] = DBM:GetSpellInfo(value[1])\n\tend\n\tcurrentEvent = event\n\tif event == \"playerbuff\" or event == \"playerbaddebuff\" or event == \"playergooddebuff\" then\n\t\tsortMethod = 3 -- Sort by group ID\n\telseif (event == \"playerdebuffstacks\" or event == \"table\" or event == \"playerdebuffremaining\") and value[2] and type(value[2]) == \"number\" then\n\t\tsortMethod = value[2]\n\telseif event == \"health\" or event == \"playerdebuffremaining\" then\n\t\tsortMethod = 2 -- Sort lowest first\n\telseif event == \"playerpower\" and value[5] and type(value[5]) == \"number\" then\n\t\tsortMethod = value[5]\n\telse\n\t\tsortMethod = 1 -- Sort highest first\n\tend\n\tif events[currentEvent] then\n\t\tevents[currentEvent](value[1])\n\telse\n\t\terror(\"DBM-InfoFrame: Unsupported event\", 2)\n\t\treturn\n\tend\n\tif not friendlyEvents[currentEvent] then\n\t\ttwipe(icons)\n\tend\n\tframe:Show()\n\tonUpdate(frame, value[1])\n\tif not frame.ticker and not value[4] and event ~= \"table\" then\n\t\tframe.ticker = AceTimer:ScheduleRepeatingTimer(function()\n\t\t\tonUpdate(frame)\n\t\tend, 0.5)\n\telseif frame.ticker and value[4] then -- Redundancy, in event calling a non onupdate infoframe show without a hide event to unschedule ticker based infoframe\n\t\tAceTimer:CancelTimer(frame.ticker)\n\t\tframe.ticker = nil\n\tend\nend\n\nfunction infoFrame:RegisterCallback(cb)\n\tupdateCallbacks[#updateCallbacks + 1] = cb\nend\n\nfunction infoFrame:Update(time)\n\tif not frame then\n\t\tcreateFrame()\n\tend\n\tif frame:IsShown() then\n\t\tif time then\n\t\t\tDBM:Unschedule(onUpdate)\n\t\t\tDBM:Schedule(time, onUpdate, frame)\n\t\telse\n\t\t\tonUpdate(frame)\n\t\tend\n\tend\nend\n\nfunction infoFrame:UpdateTable(table, time)\n\tif not frame then\n\t\tcreateFrame()\n\tend\n\tif frame:IsShown() and table then\n\t\tif time then\n\t\t\tDBM:Unschedule(onUpdate)\n\t\t\tDBM:Schedule(time, onUpdate, frame, table)\n\t\telse\n\t\t\tonUpdate(frame, table)\n\t\tend\n\tend\nend\n\nfunction infoFrame:SetHeader(text)\n\tif not frame then\n\t\tcreateFrame()\n\tend\n\tframe.header:SetText(text or \"DBM Info Frame\")\nend\n\nfunction infoFrame:ClearLines()\n\tif not frame then\n\t\tcreateFrame()\n\tend\n\tfor i = 1, #frame.lines do\n\t\tframe.lines[i]:SetText(\"\")\n\t\tframe.lines[i]:Hide()\n\tend\nend\n\nfunction infoFrame:AlignLine(lineNum, linesPerRow)\n\tlocal size = DBM.Options.InfoFrameFontSize\n\tlocal line = frame.lines[lineNum]\n\tline:SetJustifyH(lineNum % 2 == 0 and \"RIGHT\" or \"LEFT\")\n\tif lineNum == 1 then -- 1st entry left\n\t\tline:SetPoint(\"TOPLEFT\", frame, \"TOPLEFT\", size / 2, -(size / 2))\n\telseif lineNum == 2 then -- 1st entry right\n\t\tline:SetPoint(\"TOPLEFT\", frame.lines[1], \"TOPRIGHT\", size / 2, 0)\n\telse\n\t\tif lineNum % linesPerRow == 1 then -- Column 2-x, 1st entry left\n\t\t\tline:SetPoint(\"TOPLEFT\", frame.lines[lineNum - linesPerRow + 1], \"TOPRIGHT\", size, 0)\n\t\telseif lineNum % 2 == 0 then -- Column 2-x, Right entry\n\t\t\tline:SetPoint(\"TOPLEFT\", frame.lines[lineNum - 1], \"TOPRIGHT\", size / 2, 0)\n\t\telse -- Column 2-x, Left entry\n\t\t\tline:SetPoint(\"TOPLEFT\", frame.lines[lineNum - 2], \"LEFT\", 0, -(size / 2))\n\t\tend\n\tend\nend\n\nfunction infoFrame:UpdateStyle()\n\tif not frame then\n\t\tcreateFrame()\n\tend\n\tprevLines = 0\n\tlocal font = DBM.Options.InfoFrameFont == \"standardFont\" and standardFont or DBM.Options.InfoFrameFont\n\tlocal size = DBM.Options.InfoFrameFontSize\n\tlocal style = DBM.Options.InfoFrameFontStyle == \"none\" and nil or DBM.Options.InfoFrameFontStyle\n\tfor i = 1, #frame.lines do\n\t\tframe.lines[i]:SetFont(font, size, style)\n\tend\nend\n\nfunction infoFrame:SetLine(lineNum, leftText, rightText, colorR, colorG, colorB, color2R, color2G, color2B)\n\tif not frame then\n\t\tcreateFrame()\n\tend\n\tlineNum = lineNum * 2 - 1\n\tif not frame.lines[lineNum] then\n\t\tlocal font = DBM.Options.InfoFrameFont == \"standardFont\" and standardFont or DBM.Options.InfoFrameFont\n\t\tlocal size = DBM.Options.InfoFrameFontSize\n\t\tlocal style = DBM.Options.InfoFrameFontStyle == \"none\" and nil or DBM.Options.InfoFrameFontStyle\n\t\tframe.lines[lineNum] = frame:CreateFontString(\"Line\" .. lineNum, \"OVERLAY\", \"GameFontNormal\")\n\t\tframe.lines[lineNum]:SetFont(font, size, style)\n\t\tframe.lines[lineNum + 1] = frame:CreateFontString(\"Line\" .. lineNum + 1, \"OVERLAY\", \"GameFontNormal\")\n\t\tframe.lines[lineNum + 1]:SetFont(font, size, style)\n\t\tframe.lines[lineNum + 1]:SetJustifyH(\"RIGHT\")\n\tend\n\tframe.lines[lineNum]:SetText(leftText)\n\tframe.lines[lineNum]:SetTextColor(colorR or 255, colorG or 255, colorB or 255)\n\tframe.lines[lineNum]:Show()\n\tframe.lines[lineNum + 1]:SetText(rightText)\n\tframe.lines[lineNum + 1]:SetTextColor(color2R or 255, color2G or 255, color2B or 255)\n\tframe.lines[lineNum + 1]:Show()\nend\n\nfunction infoFrame:Hide()\n\ttwipe(lines)\n\ttwipe(icons)\n\ttwipe(sortedLines)\n\ttwipe(updateCallbacks)\n\tinfoFrame:SetHeader()\n\ttwipe(value)\n\tif frame then\n\t\tif frame.ticker then\n\t\t\tAceTimer:CancelTimer(frame.ticker)\n\t\t\tframe.ticker = nil\n\t\tend\n\t\tframe:Hide()\n\tend\n\tcurrentEvent = nil\n\tsortMethod = 1\nend\n\nfunction infoFrame:SetLines(lines)\n\tmodLines = lines\n\tif DBM.Options.InfoFrameLines == 0 then\n\t\tmaxLines = lines\n\tend\nend\n\nfunction infoFrame:SetColumns(columns)\n\tmodCols = columns\n\tif DBM.Options.InfoFrameCols == 0 then\n\t\tmaxCols = columns\n\tend\nend\n\nfunction infoFrame:IsShown()\n\treturn frame and frame:IsShown()\nend\n\nfunction infoFrame:SetSortingAsc()\n\tsortMethod = 2\nend\n\nfunction infoFrame:SetSortingGroupId()\n\tsortMethod = 3\nend\n"
  },
  {
    "path": "DBM-Core/DBM-RangeCheck.lua",
    "content": "-- ***************************************************\n-- **             DBM Range Check Frame             **\n-- **         http://www.deadlybossmods.com         **\n-- ***************************************************\n--\n-- This addon is written and copyrighted by:\n--    * Paul Emmerich (Tandanu @ EU-Aegwynn) (DBM-Core)\n--    * Martin Verges (Nitram @ EU-Azshara) (DBM-GUI)\n--\n-- The localizations are written by:\n--    * enGB/enUS: Tandanu\t\t\t\thttp://www.deadlybossmods.com\n--    * deDE: Tandanu\t\t\t\t\thttp://www.deadlybossmods.com\n--    * zhCN: Diablohu\t\t\t\t\thttp://wow.gamespot.com.cn\n--    * ruRU: BootWin\t\t\t\t\tbootwin@gmail.com\n--    * ruRU: Vampik\t\t\t\t\tadmin@vampik.ru\n--    * zhTW: Hman\t\t\t\t\t\therman_c1@hotmail.com\n--    * zhTW: Azael/kc10577\t\t\t\tpaul.poon.kw@gmail.com\n--    * koKR: BlueNyx/nBlueWiz\t\t\tbluenyx@gmail.com / everfinale@gmail.com\n--    * esES: Snamor/1nn7erpLaY     \tromanscat@hotmail.com\n--\n-- Special thanks to:\n--    * Arta\n--    * Omegal @ US-Whisperwind (continuing mod support for 3.2+)\n--    * Tennberg (a lot of fixes in the enGB/enUS localization)\n--\n--\n-- The code of this addon is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License. (see license.txt)\n-- All included textures and sounds are copyrighted by their respective owners.\n--\n--\n--  You are free:\n--    * to Share ?to copy, distribute, display, and perform the work\n--    * to Remix ?to make derivative works\n--  Under the following conditions:\n--    * Attribution. You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).\n--    * Noncommercial. You may not use this work for commercial purposes.\n--    * Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.\n--\n--\n-- This file makes use of the following free (Creative Commons Sampling Plus 1.0) sounds:\n--    * alarmclockbeeps.ogg by tedthetrumpet (http://www.freesound.org/usersViewSingle.php?id=177)\n--    * blip_8.ogg by Corsica_S (http://www.freesound.org/usersViewSingle.php?id=7037)\n--  The full of text of the license can be found in the file \"Sounds\\Creative Commons Sampling Plus 1.0.txt\".\n\n----------------\n--  MapSizes  --\n----------------\n-- Based on the [MPQ Patch] Classic/BC Dungeon Maps for WotLK, by Trimitor\nDBM:RegisterMapSize(\"AhnQiraj\",\t\t\t\t-- Ahn'Qiraj 40 (Raid-Classic)\n\t1, 2777.544113162, 1851.6962890599989,\n\t2, 977.55993651999984, 651.70654296999965,\n\t3, 577.5600585899997, 385.04003906999969\n)\nDBM:RegisterMapSize(\"Ahnkahet\",\t\t\t\t1, 972.417968747, 648.27902221699992) -- Ahn'Kahet (Party-WotLK)\nDBM:RegisterMapSize(\"Alterac\",\t\t\t\t0, 2799.9999389679997, 1866.666656494)\nDBM:RegisterMapSize(\"AlteracValley\",\t\t0, 4237.49987793, 2824.99987793)\nDBM:RegisterMapSize(\"Arathi\",\t\t\t\t0, 3599.999877933, 2399.999923703)\nDBM:RegisterMapSize(\"ArathiBasin\",\t\t\t0, 1756.249923703, 1170.83325195)\nDBM:RegisterMapSize(\"Ashenvale\",\t\t\t0, 5766.6663818399993, 3843.749877933)\nDBM:RegisterMapSize(\"Aszhara\",\t\t\t\t0, 5070.83276368, 3381.24987793)\nDBM:RegisterMapSize(\"AuchenaiCrypts\",\t\t-- Auchenai Crypts (Party-BC)\n\t1, 742.54043579099994, 495.026992798,\n\t2, 817.540466309, 545.026992798\n)\nDBM:RegisterMapSize(\"Azeroth\",\t\t\t\t0, 40741.1816406, 27149.6875)\nDBM:RegisterMapSize(\"AzjolNerub\",\t\t\t\t-- Azjol-Nerub (Party-WotLK)\n\t1, 752.973999023, 501.983001709,\t\t\t-- The Brood Pit\n\t2, 292.97399902300003, 195.31597900399998,\t-- Hadronox's Lair\n\t3, 367.5, 245\t\t\t\t\t\t\t\t-- The Gilded Gate\n)\nDBM:RegisterMapSize(\"AzuremystIsle\",\t\t0, 4070.8330078, 2714.58300781)\nDBM:RegisterMapSize(\"Badlands\",\t\t\t\t0, 2487.5, 1658.3334961)\nDBM:RegisterMapSize(\"Barrens\",\t\t\t\t0, 10133.33300782, 6756.24987793)\nDBM:RegisterMapSize(\"BlackTemple\",\t\t\t-- Black Temple (Raid-BC). Has DungeonUsesTerrainMap()\n\t0, 783.333343506, 522.916625977,\n\t1, 1252.2495784784999, 834.833007813,\n\t2, 975, 650,\n\t3, 1005, 670,\n\t4, 440.000976562, 293.333984375,\n\t5, 670, 446.66668701599986,\n\t6, 705, 470,\n\t7, 355, 236.66662597599998\n)\nDBM:RegisterMapSize(\"BlackfathomDeeps\",\t\t-- Blackfathom Deeps (Party-Classic)\n\t1, 884.22000122000009, 589.4799728391,\n\t2, 884.220031738, 589.480010986,\n\t3, 284.22400426826, 189.48266601600005\n)\nDBM:RegisterMapSize(\"BlackrockDepths\",\t\t-- Blackrock Depths (Party-Classic)\n\t1, 1407.060974121, 938.040756224,\n\t2, 1507.060974121, 1004.7074279820001\n)\nDBM:RegisterMapSize(\"BlackrockSpire\",\t\t-- Blackrock Spire (Party-Classic)\n\t1, 886.8390140532, 591.22601318400007,\n\t2, 886.8390140532, 591.22601318400007,\n\t3, 886.8390140532, 591.22601318400007,\n\t4, 886.8390140532, 591.22601318400007,\n\t5, 886.8390140532, 591.22601318400007,\n\t6, 886.8390140532, 591.22601318400007,\n\t7, 886.8390140532, 591.22601318400007\n)\nDBM:RegisterMapSize(\"BlackwingLair\",\t\t-- Blackwing Lair (Raid-Classic)\n\t1, 499.42803955299996, 332.94970702999944,\n\t2, 649.42706299, 432.94970702999944,\n\t3, 649.42706299, 432.94970702999944,\n\t4, 649.42706299, 432.94970702999944\n)\nDBM:RegisterMapSize(\"BladesEdgeMountains\",\t0, 5424.9997558600007, 3616.666381833)\nDBM:RegisterMapSize(\"BlastedLands\",\t\t\t0, 3349.99987793, 2233.3339844)\nDBM:RegisterMapSize(\"BloodmystIsle\",\t\t0, 3262.4990233999997, 2174.9999389619998)\nDBM:RegisterMapSize(\"BoreanTundra\",\t\t\t0, 5764.5830078100007, 3843.74987793)\nDBM:RegisterMapSize(\"BurningSteppes\",\t\t0, 2929.166595456, 1952.0834960900011)\nDBM:RegisterMapSize(\"CoTHillsbradFoothills\", -- Caverns of Time: Old Hillsbrad Foothils (Party-BC)\n\t0, 2331.2499389679997, 1554.16662597\n)\nDBM:RegisterMapSize(\"CoTMountHyjal\",\t\t0, 2499.99975586, 1666.6665039)\nDBM:RegisterMapSize(\"CoTStratholme\",\t\t-- The Culling of Stratholme (Party-WotLK) ; API returns levels 1 and 2 - this is corrected with DungeonUsesTerrainMap()\n\t0, 1824.999938962, 1216.6665039099998,\t-- DUNGEON_FLOOR_COTSTRATHOLME0 = \"The Road to Stratholme\"\n\t1, 1125.2999877910001, 750.1999511700003-- DUNGEON_FLOOR_COTSTRATHOLME1 = \"Stratholme City\"\n)\nDBM:RegisterMapSize(\"CoTTheBlackMorass\",\t-- Caverns of Time: The Black Morass (Party-BC)\n\t0, 1087.5, 725\n)\nDBM:RegisterMapSize(\"CoilfangReservoir\",\t-- Coilfang: Serpentshrine Cavern (Raid-BC)\n\t1, 1575.002975463, 1050.00201416\n)\nDBM:RegisterMapSize(\"CrystalsongForest\",\t0, 2722.91662598, 1814.5830078099998)\nDBM:RegisterMapSize(\"Dalaran\",\n\t1, 830.01501465299987, 553.33984375,\n\t2, 563.223999023, 375.48974609000015\n)\nDBM:RegisterMapSize(\"Darkshore\",\t\t\t0, 6549.99975586, 4366.6665039000009)\nDBM:RegisterMapSize(\"Darnassis\",\t\t\t0, 1058.3332519500002, 705.72949223999967)\nDBM:RegisterMapSize(\"DeadwindPass\",\t\t\t0, 2499.9999389619998, 1666.6669921699995)\nDBM:RegisterMapSize(\"DeeprunTram\",\n\t1, 312, 208,\n\t2, 309, 208\n)\nDBM:RegisterMapSize(\"Desolace\",\t\t\t\t0, 4495.83300781, 2997.916564938)\nDBM:RegisterMapSize(\"DireMaul\",\t\t\t\t-- Dire Maul (Party-Classic)\n\t1, 1275, 850,\n\t2, 525, 350,\n\t3, 487.5, 325,\n\t4, 750, 500,\n\t5, 800.0008010864, 533.33399963400007,\n\t6, 975, 650\n)\nDBM:RegisterMapSize(\"Dragonblight\",\t\t\t0, 5608.33312988, 3739.58337402)\nDBM:RegisterMapSize(\"DrakTharonKeep\",\t\t-- Drak'Tharon Keep (Party-WotLK)\n\t1, 619.94100952200006, 413.293991089,\t-- The Vestibules of Drak'Tharon\n\t2, 619.941009526, 413.293991089\t\t\t-- Drak'Tharon Overlook\n)\nDBM:RegisterMapSize(\"DunMorogh\",\t\t\t0, 4924.99975586, 3283.33325196)\nDBM:RegisterMapSize(\"Durotar\",\t\t\t\t0, 5287.4996337899993, 3524.99987793)\nDBM:RegisterMapSize(\"Duskwood\",\t\t\t\t0, 2699.9999389679997, 1799.9999999699994)\nDBM:RegisterMapSize(\"Dustwallow\",\t\t\t0, 5250.000061035, 3499.99975586)\nDBM:RegisterMapSize(\"EasternPlaguelands\",\t0, 4031.25, 2687.49987793)\nDBM:RegisterMapSize(\"Elwynn\",\t\t\t\t0, 3470.83325196, 2314.58300779)\nDBM:RegisterMapSize(\"EversongWoods\" ,\t\t0, 4925, 3283.33300779)\nDBM:RegisterMapSize(\"Expansion01\",\t\t\t0, 17464.078125, 11642.71875) -- Old client Zangarmarsh BC dungeons. [MPQ Patch] \"Classic/BC Dungeon Maps for WotLK\" fixes mapInfo\nDBM:RegisterMapSize(\"Felwood\",\t\t\t\t0, 5749.9996337899993, 3833.33325195)\nDBM:RegisterMapSize(\"Feralas\",\t\t\t\t0, 6949.99975586, 4633.33300781)\nDBM:RegisterMapSize(\"Ghostlands\",\t\t\t0, 3300.0000000000009, 2199.9995117200006)\nDBM:RegisterMapSize(\"Gnomeregan\",\t\t\t-- Gnomeregan (Party-Classic)\n\t1, 769.667999268, 513.111999512,\n\t2, 769.6679992678, 513.111999512,\n\t3, 869.667999268, 579.778015137,\n\t4, 869.6697082523001, 579.77999877899992\n)\nDBM:RegisterMapSize(\"GrizzlyHills\",\t\t\t0, 5249.99987793, 3499.99987793)\nDBM:RegisterMapSize(\"GruulsLair\",\t\t\t-- Gruul's Lair (Raid-BC)\n\t1, 525, 350\n)\nDBM:RegisterMapSize(\"Gundrak\",\t\t\t\t-- Gundrak (Party-WotLK)\n\t1, 905.033050542, 603.3500976600003\n)\nDBM:RegisterMapSize(\"HallsofLightning\",\t\t\t-- Halls of Lightning (Party-WotLK)\n\t1, 566.235015869, 377.4899902300001,\t\t-- Unyielding Garrison\n\t2, 708.23701477000009, 472.16003417699994\t-- Walk of the Makers\n)\nDBM:RegisterMapSize(\"HallsofReflection\",\t-- Halls of Reflection (Party-WotLK)\n\t1, 879.02001954, 586.0195312399992\n)\nDBM:RegisterMapSize(\"Hellfire\",\t\t\t\t0, 5164.58300781, 3443.74987793)\nDBM:RegisterMapSize(\"HellfireRamparts\",\t\t-- Hellfire Citadel: Ramparts (Party-BC)\n\t1, 694.5600586, 463.04003906\n)\nDBM:RegisterMapSize(\"Hilsbrad\",\t\t\t\t0, 3199.99987793, 2133.33325195)\nDBM:RegisterMapSize(\"Hinterlands\",\t\t\t0, 3850, 2566.66662598)\nDBM:RegisterMapSize(\"HowlingFjord\",\t\t\t0, 6045.8328857399993, 4031.249816898)\nDBM:RegisterMapSize(\"HrothgarsLanding\",\t\t0, 3677.083129887, 2452.0839843699996)\nDBM:RegisterMapSize(\"IcecrownCitadel\",\t\t\t-- Icecrown Citadel (Raid-WotLK)\n\t1, 1355.47009278, 903.647033691,\t\t\t-- The Lower Citadel\n\t2, 1067, 711.3336906438,\t\t\t\t\t-- The Rampart of Skulls\n\t3, 195.46997069999998, 130.315002441,\t\t-- Deathbringer's Rise\n\t4, 773.71008301000006, 515.81030273000033,\t-- The Frost Queen's Lair\n\t5, 1148.7399902399998, 765.82006835999982,\t-- The Upper Reaches\n\t6, 373.7099609400002, 249.1298828099998,\t-- Royal Quarters\n\t7, 293.2600097699999, 195.50701904200002,\t-- The Frozen Throne\n\t8, 247.92993164000018, 165.287994385\t\t-- Frostmourne\n)\nDBM:RegisterMapSize(\"IcecrownGlacier\",\t\t0, 6270.833312988, 4181.2500000000009)\nDBM:RegisterMapSize(\"Ironforge\",\t\t\t0, 790.625061031, 527.6044921900002)\nDBM:RegisterMapSize(\"IsleofConquest\",\t\t0, 2650, 1766.6665840118)\nDBM:RegisterMapSize(\"Kalimdor\",\t\t\t\t0, 36799.8105469, 24533.2001953)\nDBM:RegisterMapSize(\"Karazhan\",\t\t\t\t-- Karazhan (Raid-BC)\n\t1, 550.04882811999983, 366.69921880000038,\n\t2, 257.85986329, 171.90625,\n\t3, 345.1494140599998, 230.09960940000019,\n\t4, 520.04882811999983, 346.69921880000038,\n\t5, 234.14990233999993, 156.09960940000019,\n\t6, 581.54882811999983, 387.69921880000038,\n\t7, 191.54882811999983, 127.69921880000038,\n\t8, 139.35058593999997, 92.90039059999981,\n\t9, 760.04882811999983, 506.69921880000038,\n\t10, 450.25, 300.16601559999981,\n\t11, 271.05004882999992, 180.69921880000038,\n\t12, 595.04882811999983, 396.69921880000038,\n\t13, 529.04882812, 352.69921880000038,\n\t14, 245.25, 163.5,\n\t15, 211.14990233999993, 140.765625,\n\t16, 101.25, 67.5,\n\t17, 341.24999999999977, 227.5\n)\nDBM:RegisterMapSize(\"LakeWintergrasp\",\t\t0, 2974.99987793, 1983.3332519599999)\nDBM:RegisterMapSize(\"LochModan\",\t\t\t0, 2758.33312988, 1839.5830078099998)\nDBM:RegisterMapSize(\"MagistersTerrace\",\t-- Magister's Terrace (Party-BC)\n\t1, 530.334014893, 353.5559692383,\n\t2, 530.334014893, 353.5559921261\n)\nDBM:RegisterMapSize(\"MagtheridonsLair\",\t-- Magtheridon's Lair (Raid-BC)\n\t1, 556, 370.666694641\n)\nDBM:RegisterMapSize(\"ManaTombs\",\t\t-- Mana-Tombs (Party-BC)\n\t1, 823.28515625, 548.85681152329994\n)\nDBM:RegisterMapSize(\"Maraudon\",\t\t\t-- Maraudon (Party-Classic)\n\t1, 975, 650,\n\t2, 1637.5, 1091.666000367\n)\nDBM:RegisterMapSize(\"MoltenCore\",\t\t-- Molten Core (Raid-Classic)\n\t1, 1264.800064083, 843.19906615799994\n)\nDBM:RegisterMapSize(\"Moonglade\",\t\t\t0, 2308.33325195, 1539.5830078200006)\nDBM:RegisterMapSize(\"Mulgore\",\t\t\t\t0, 5137.49987793, 3424.9998474159997)\nDBM:RegisterMapSize(\"Nagrand\",\t\t\t\t0, 5524.99999999, 3683.3331680335)\nDBM:RegisterMapSize(\"Naxxramas\",\t\t\t-- Naxxramas (Raid-WotLK)\n\t1, 1093.83007813, 729.21997070999987,\t-- The Construct Quarter\n\t2, 1093.83007813, 729.21997070999987,\t-- The Arachnid Quarter\n\t3, 1200, 800,\t\t\t\t\t\t\t-- The Military Quarter\n\t4, 1200.33007813, 800.21997070999987,\t-- The Plague Quarter\n\t5, 2069.80981445, 1379.8798828099998,\t-- The Lower Necropolis\n\t6, 655.9399414, 437.2900390599998\t\t-- The Upper Necropolis\n)\nDBM:RegisterMapSize(\"Netherstorm\",\t\t\t0, 5574.9996719334995, 3716.66674805)\nDBM:RegisterMapSize(\"NetherstormArena\",\t\t0, 2270.8331909219996, 1514.58337402)\nDBM:RegisterMapSize(\"Nexus80\",\t\t\t\t\t-- The Oculus (Party-WotLK)\n\t1, 514.70697021699993, 343.13897705299996,\t-- Band of Variance\n\t2, 664.70697021699993, 443.13897705299996,\t-- Band of Acceleration\n\t3, 514.70697021699993, 343.13897705299996,\t-- Band of Transmutation\n\t4, 294.70098877199996, 196.46398926100017\t-- Band of Alignment\n)\nDBM:RegisterMapSize(\"Northrend\",\t\t\t0, 17751.3984375, 11834.26501465)\nDBM:RegisterMapSize(\"Ogrimmar\",\t\t\t\t0, 1402.6044921899997, 935.41662598000016)\nDBM:RegisterMapSize(\"OnyxiasLair\",\t\t\t-- Onyxia's Lair (Raid-WotLK)\n\t1, 483.117988587, 322.07878875759997\n)\nDBM:RegisterMapSize(\"PitofSaron\",\t\t\t0, 1533.333312988, 1022.916671753) -- Pit of Saron (Party-WotLK)\nDBM:RegisterMapSize(\"Ragefire\",\t\t\t\t-- Ragefire Chasm (Party-Classic)\n\t1, 738.864013672, 492.57620239290003\n)\nDBM:RegisterMapSize(\"RazorfenDowns\",\t\t-- Razorfen Downs (Party-Classic)\n\t1, 709.048950199, 472.69995117000008\n)\nDBM:RegisterMapSize(\"RazorfenKraul\",\t\t-- Razorfen Kraul (Party-Classic)\n\t1, 736.44995118, 490.95983886999988\n)\nDBM:RegisterMapSize(\"Redridge\",\t\t\t\t0, 2170.83325196, 1447.9160155999998)\nDBM:RegisterMapSize(\"RuinsofAhnQiraj\",\t\t0, 2512.499877933, 1675) -- Ahn'Qiraj 20 (Raid-Classic)\n\nDBM:RegisterMapSize(\"ScarletEnclave\",\t\t0, 3162.5, 2108.333374023)\nDBM:RegisterMapSize(\"ScarletMonastery\",\t\t-- Scarlet Monastery (Party-Classic)\n\t1, 619.983947751, 413.32275390000018,\n\t2, 320.190994263, 213.4604949947,\n\t3, 612.6966094966, 408.45996094,\n\t4, 703.30004882, 468.86669921500004\n)\nDBM:RegisterMapSize(\"Scholomance\",\t\t\t-- Scholomance (Party-Classic)\n\t1, 320.0489044188, 213.364997864,\n\t2, 440.04901123, 293.3664054871,\n\t3, 410.0779953, 273.3857994075,\n\t4, 531.04200744700006, 354.0281982418\n)\nDBM:RegisterMapSize(\"SearingGorge\",\t\t\t0, 2231.2498474159997, 1487.4995117199996)\nDBM:RegisterMapSize(\"SethekkHalls\",\t\t\t-- Auchindoun: Sethekk Halls (Party-BC)\n\t1, 703.495483399, 468.996994019,\n\t2, 703.495483399, 468.996994019\n)\nDBM:RegisterMapSize(\"ShadowLabyrinth\",\t\t-- Shadow Labyrinth (Party-BC)\n\t1, 841.522354126, 561.0148887639\n)\nDBM:RegisterMapSize(\"ShadowfangKeep\",\t\t-- Shadowfang Keep (Party-Classic)\n\t1, 352.43005371000004, 234.95339202830002,\n\t2, 212.42675781000025, 141.617996216,\n\t3, 152.42993164000018, 101.6199646001,\n\t4, 152.42993164000018, 101.6246948243,\n\t5, 152.42993164000018, 101.6246948243,\n\t6, 198.42993164000018, 132.2866287233,\n\t7, 272.42993164000018, 181.6199646001\n)\nDBM:RegisterMapSize(\"ShadowmoonValley\",\t\t0, 5500, 3666.66638183)\nDBM:RegisterMapSize(\"ShattrathCity\",\t\t0, 1306.25, 870.83337403)\nDBM:RegisterMapSize(\"SholazarBasin\",\t\t0, 4356.25, 2904.16650391)\nDBM:RegisterMapSize(\"Silithus\",\t\t\t\t0, 3483.333984375, 2322.9160156199996)\nDBM:RegisterMapSize(\"SilvermoonCity\",\t\t0, 1211.4584960900002, 806.77050783999948)\nDBM:RegisterMapSize(\"Silverpine\",\t\t\t0, 4199.99975586, 2799.99987793)\nDBM:RegisterMapSize(\"StonetalonMountains\",\t0, 4883.33312988, 3256.249816898)\nDBM:RegisterMapSize(\"Stormwind\",\t\t\t0, 1737.4999589954, 1158.3330078200006)\nDBM:RegisterMapSize(\"StrandoftheAncients\",\t0, 1743.749938965, 1162.499938962)\nDBM:RegisterMapSize(\"Stranglethorn\",\t\t0, 6381.24975586, 4254.1660156)\nDBM:RegisterMapSize(\"Stratholme\",\t\t\t-- Stratholme (Party-Classic)\n\t1, 705.7199707, 470.4799804700001,\n\t2, 1005.7204589799999, 670.48022460999982\n)\nDBM:RegisterMapSize(\"Sunwell\",\t\t\t\t0, 3327.0830078200006, 2218.7490233999997)\nDBM:RegisterMapSize(\"SunwellPlateau\",\t\t-- The Sunwell (Raid-BC)\n\t0, 906.25, 604.16662597999994,\n\t1, 465, 310\n)\nDBM:RegisterMapSize(\"SwampOfSorrows\",\t\t0, 2293.75, 1529.1669921899993)\nDBM:RegisterMapSize(\"Tanaris\",\t\t\t\t0, 6899.999526979, 4600)\nDBM:RegisterMapSize(\"Teldrassil\",\t\t\t0, 5091.6665039, 3393.75)\nDBM:RegisterMapSize(\"TempestKeep\",\t\t\t-- Tempest Keep (Raid-BC)\n\t1, 1575, 1050\n)\nDBM:RegisterMapSize(\"TerokkarForest\",\t\t0, 5399.99975586, 3600.000061035)\nDBM:RegisterMapSize(\"TheArcatraz\",\t\t\t-- Tempest Keep: The Arcatraz (Party-BC)\n\t1, 689.68402099600007, 459.78935241700003,\n\t2, 546.048049927, 364.032012939,\n\t3, 636.684005737, 424.45602417\n)\nDBM:RegisterMapSize(\"TheArgentColiseum\",\t-- Trial of the Crusader (Raid-WotLK)\n\t1, 369.9861869814, 246.657989502,\t\t-- The Argent Coliseum\n\t2, 739.996017456, 493.33001709\t\t\t-- The Icy Depths\n)\nDBM:RegisterMapSize(\"TheBloodFurnace\",\t\t-- Hellfire Citadel: The Blood Furnace (Party-BC)\n\t1, 1003.519012451, 669.012687683\n)\nDBM:RegisterMapSize(\"TheBotanica\",\t\t\t-- Tempest Keep: The Botanica (Party-BC)\n\t1, 757.40248107899993, 504.934997558\n)\nDBM:RegisterMapSize(\"TheDeadmines\",\t\t\t-- Deadmines (Party-Classic)\n\t1, 559.2640075679999, 372.8425025944,\n\t2, 499.26300049099996, 332.84230041549995\n)\nDBM:RegisterMapSize(\"TheExodar\",\t\t\t0, 1056.7705078, 704.68774414000018)\nDBM:RegisterMapSize(\"TheEyeofEternity\",\t\t-- The Eye of Eternity (Raid-WotLK)\n\t1, 430.07006836000005, 286.713012695\n)\nDBM:RegisterMapSize(\"TheForgeofSouls\",\t\t-- The Forge of Souls (Party-WotLK)\n\t1, 1448.0998535099998, 965.40039062000051\n)\nDBM:RegisterMapSize(\"TheMechanar\",\t\t\t-- Tempest Keep: The Mechanar (Party-BC)\n\t1, 676.23800659199992, 450.825401306,\n\t2, 676.23800659199992, 450.8253669737\n)\nDBM:RegisterMapSize(\"TheNexus\",\t\t\t\t1, 1101.280975342, 734.1874999997) -- The Nexus (Party-WotLK)\nDBM:RegisterMapSize(\"TheObsidianSanctum\",\t0, 1162.4999179809, 775) -- The Obsidian Sanctum (Raid-WotLK)\nDBM:RegisterMapSize(\"TheRubySanctum\",\t\t0, 752.083312988, 502.08325195999987) -- The Ruby Sanctum (Raid-WotLK)\nDBM:RegisterMapSize(\"TheShatteredHalls\",\t1, 1063.747467041, 709.1649932866) -- Hellfire Citadel: The Shattered Hall (Party-BC)\nDBM:RegisterMapSize(\"TheSlavePens\",\t\t\t1, 890.05812454269994, 593.372070312) -- Coilfang: The Slave Pens (Party-BC)\nDBM:RegisterMapSize(\"TheSteamvault\",\t\t-- Coilfang: The Steamvault (Party-BC)\n\t1, 876.764007569, 584.509414673,\n\t2, 876.764007569, 584.509414673\n)\nDBM:RegisterMapSize(\"TheStockade\",\t\t\t1, 378.152999878, 252.10249519299998) -- Stormwind Stockade (Party-Classic)\nDBM:RegisterMapSize(\"TheStormPeaks\",\t\t0, 7112.4996337899993, 4741.6660156)\nDBM:RegisterMapSize(\"TheTempleOfAtalHakkar\",\t-- Sunken Temple (Party-Classic)\n\t1, 695.028991699, 463.35298156799996,\n\t2, 248.1767673494, 166.03546142599998,\n\t3, 556.16923522999991, 370.38801574700005\n)\nDBM:RegisterMapSize(\"TheUnderbog\",\t\t\t1, 894.919998169, 596.613357544) -- Coilfang: The Underbog (Party-BC)\nDBM:RegisterMapSize(\"ThousandNeedles\",\t\t0, 4399.999694822, 2933.33300781)\nDBM:RegisterMapSize(\"ThunderBluff\",\t\t\t0, 1043.749938965, 695.833312985)\nDBM:RegisterMapSize(\"Tirisfal\",\t\t\t\t0, 4518.74987793, 3012.4998168949996)\nDBM:RegisterMapSize(\"Uldaman\",\t\t\t\t-- Uldaman (Party-Classic)\n\t1, 893.668014527, 595.778991699,\n\t2, 492.57041931180004, 328.3804931642\n)\nDBM:RegisterMapSize(\"Ulduar\",\t\t\t\t-- Ulduar (Raid-WotLK). Has DungeonUsesTerrainMap()\n\t0, 3287.49987793, 2191.66662598,\t\t\t-- DUNGEON_FLOOR_ULDUAR0 = \"The Grand Approach\"\n\t1, 669.45098877000009, 446.30004882999992,\t-- DUNGEON_FLOOR_ULDUAR1 = \"The Antechamber of Ulduar\"\n\t2, 1328.4609985349998, 885.63989258000015,\t-- DUNGEON_FLOOR_ULDUAR2 = \"The Inner Sanctum of Ulduar\"\n\t3, 910.5, 607,\t\t\t\t\t\t\t\t-- DUNGEON_FLOOR_ULDUAR3 = \"The Prison of Yogg-Saron\"\n\t4, 1569.45996094, 1046.30004883,\t\t\t-- DUNGEON_FLOOR_ULDUAR4 = \"The Spark of Imagination\"\n\t5, 619.46899414, 412.9799804700001\t\t\t-- DUNGEON_FLOOR_ULDUAR5 = \"The Mind's Eye\"\n)\nDBM:RegisterMapSize(\"Ulduar77\",\t\t\t\t1, 920.19601440299994, 613.466064453) -- Halls of Stone (Party-WotLK)\nDBM:RegisterMapSize(\"Undercity\",\t\t\t0, 959.37503051749991, 640.10412597999994)\nDBM:RegisterMapSize(\"UngoroCrater\",\t\t\t0, 33699.999816898, 2466.6665039000009)\nDBM:RegisterMapSize(\"UtgardeKeep\",\t\t-- Utgarde Keep (Party-WotLK)\n\t1, 734.580993652, 489.72150039639996,\t-- Norndir Preperation\n\t2, 481.081008911, 320.72029304480003,\t-- Dragonflayer Ascent\n\t3, 736.581008911, 491.05451202409995\t-- Tyr's Terrace\n)\nDBM:RegisterMapSize(\"UtgardePinnacle\",\t\t-- Utgarde Pinnacle (Party-WotLK)\n\t1, 548.93601989699994, 365.95701599100005,\t-- Lower Pinnacle\n\t2, 756.17994308428, 504.11900329599996\t\t-- Upper Pinnacle\n)\nDBM:RegisterMapSize(\"VaultofArchavon\",\t\t1, 1398.2550048829999, 932.170013428) -- Vault of Archavon (Raid-WotLK)\nDBM:RegisterMapSize(\"VioletHold\",\t\t\t1, 256.229003907, 170.82006836000005) -- The Violet Hold (Raid-WotLK)\nDBM:RegisterMapSize(\"WailingCaverns\",\t\t1, 936.47500610299994, 624.315994263) -- Wailing Caverns (Party-Classic)\nDBM:RegisterMapSize(\"WarsongGulch\",\t\t\t0, 1145.833312992, 764.583312985)\nDBM:RegisterMapSize(\"WesternPlaguelands\",\t0, 4299.999908444, 2866.666534428)\nDBM:RegisterMapSize(\"Westfall\",\t\t\t\t0, 3499.999816898, 2333.3330078)\nDBM:RegisterMapSize(\"Wetlands\",\t\t\t\t0, 4135.416687012, 2756.25)\nDBM:RegisterMapSize(\"Winterspring\",\t\t\t0, 7099.999847416, 4733.3332519500009)\nDBM:RegisterMapSize(\"Zangarmarsh\",\t\t\t0, 5027.08349609, 3352.08325196)\nDBM:RegisterMapSize(\"ZulAman\",\t\t\t\t0, 1268.749938962, 845.833312988) -- Zul'Aman (Raid-BC)\nDBM:RegisterMapSize(\"ZulDrak\",\t\t\t\t0, 4993.75, 3329.16650391)\nDBM:RegisterMapSize(\"ZulFarrak\",\t\t\t0, 1383.3332214359998, 922.91662597) -- Zul'Farrak (Party-Classic)\nDBM:RegisterMapSize(\"ZulGurub\",\t\t\t\t0, 2120.83325195, 1414.5830078) -- Zul'Gurub (Raid-Classic)\n\nlocal _, private = ...\n\n---------------\n--  Globals  --\n---------------\nDBM.RangeCheck = {}\n\n--------------\n--  Locals  --\n--------------\nlocal L = DBM_CORE_L\nlocal rangeCheck = DBM.RangeCheck\nlocal mainFrame = CreateFrame(\"Frame\")\nlocal textFrame, radarFrame, updateIcon, updateRangeFrame, initializeDropdown\nlocal RAID_CLASS_COLORS = _G[\"CUSTOM_CLASS_COLORS\"] or RAID_CLASS_COLORS -- For Phanx' Class Colors\n\n---------------------------\n--  Unit Position/Range  --\n---------------------------\n-- API\nlocal GetPlayerMapPosition = GetPlayerMapPosition\nlocal UnitInRaid, UnitInParty, UnitIsPlayer = UnitInRaid, UnitInParty, UnitIsPlayer\n-- Nil variables\nlocal rangeX, rangeY\n-- Lib\nlocal LibRangeCheck = LibStub(\"LibRangeCheck-2.0\")\n\nlocal HarmItems = { -- for BossMode, to avoid iterating thru pairs of lib harmRC\n\t[5] = {\n\t\t37727, -- Ruby Acorn\n\t},\n\t[8] = {\n\t\t34368, -- Attuned Crystal Cores\n\t\t33278, -- Burning Torch\n\t},\n\t[10] = {\n\t\t32321, -- Sparrowhawk Net\n\t},\n\t[15] = {\n\t\t33069, -- Sturdy Rope\n\t},\n\t[20] = {\n\t\t10645, -- Gnomish Death Ray\n\t},\n\t[25] = {\n\t\t24268, -- Netherweave Net\n\t\t41509, -- Frostweave Net\n\t\t31463, -- Zezzak's Shard\n\t},\n\t[30] = {\n\t\t835, -- Large Rope Net\n\t\t7734, -- Six Demon Bag\n\t\t34191, -- Handful of Snowflakes\n\t},\n\t[35] = {\n\t\t24269, -- Heavy Netherweave Net\n\t\t18904, -- Zorbin's Ultra-Shrinker\n\t},\n\t[40] = {\n\t\t28767, -- The Decapitator\n\t},\n\t[45] = {\n\t\t32698, -- Wrangling Rope\n\t},\n\t[60] = {\n\t\t32825, -- Soul Cannon\n\t\t37887, -- Seeds of Nature's Wrath\n\t},\n\t[80] = {\n\t\t35278, -- Reinforced Net\n\t},\n}\n\nlocal function getUnitRange(unit)\n\tlocal restrictionsActive = DBM:HasMapRestrictions()\n\tif not restrictionsActive and (UnitInRaid(unit) or UnitInParty(unit)) and UnitIsPlayer(unit) then\n\t\tlocal mapX, mapY = DBM:GetMapSize()\n\n\t\tlocal playerX, playerY = GetPlayerMapPosition(\"player\")\n\t\tlocal unitX, unitY = GetPlayerMapPosition(unit)\n\t\trangeX, rangeY = (unitX - playerX) * mapX, (unitY - playerY) * mapY\n\t\tlocal range = (rangeX * rangeX + rangeY * rangeY) ^ 0.5\n\n\t\treturn range\n\telse\n\t\treturn LibRangeCheck:GetRange(unit)\n\tend\nend\n\n---------------------\n--  Dropdown Menu  --\n---------------------\ndo\n\tlocal sounds = {\n\t\t\"none\",\n\t\t\"Interface\\\\AddOns\\\\DBM-Core\\\\Sounds\\\\blip_8.ogg\",\n\t\t\"Interface\\\\AddOns\\\\DBM-Core\\\\Sounds\\\\alarmclockbeeps.ogg\"\n\t}\n\n\tlocal function setSound(self, option, sound)\n\t\tDBM.Options[option] = sound\n\t\tif sound ~= \"none\" then\n\t\t\tDBM:PlaySoundFile(sound)\n\t\tend\n\tend\n\n\tlocal function setRange(self, range)\n\t\trangeCheck:Hide(true)\n\t\trangeCheck:Show(range, mainFrame.filter, true, mainFrame.redCircleNumPlayers or 1)\n\tend\n\n\tlocal function setThreshold(self, threshold)\n\t\trangeCheck:Hide(true)\n\t\trangeCheck:Show(mainFrame.range, mainFrame.filter, true, threshold)\n\tend\n\n\tlocal function setFrames(self, option)\n\t\tDBM.Options.RangeFrameFrames = option\n\t\trangeCheck:Hide(true)\n\t\trangeCheck:Show(mainFrame.range, mainFrame.filter, true, mainFrame.redCircleNumPlayers or 1)\n\tend\n\n\t-- local function setSpeed(self, option)\n\t--\tDBM.Options.RangeFrameUpdates = option\n\t-- end\n\n\tlocal function toggleLocked()\n\t\tDBM.Options.RangeFrameLocked = not DBM.Options.RangeFrameLocked\n\tend\n\n\tfunction initializeDropdown(_, level, menu) -- dropdownFrame, level, menu\n\t\tlocal info\n\n\t\tif level == 1 then\n\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\tinfo.text = L.RANGECHECK_SETRANGE\n\t\t\tinfo.notCheckable = true\n\t\t\tinfo.hasArrow = true\n\t\t\tinfo.keepShownOnClick = true\n\t\t\tinfo.menuList = \"range\"\n\t\t\tUIDropDownMenu_AddButton(info, 1)\n\n\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\tinfo.text = L.RANGECHECK_SETTHRESHOLD\n\t\t\tinfo.notCheckable = true\n\t\t\tinfo.hasArrow = true\n\t\t\tinfo.keepShownOnClick = true\n\t\t\tinfo.menuList = \"threshold\"\n\t\t\tUIDropDownMenu_AddButton(info, 1)\n\n\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\tinfo.text = L.RANGECHECK_SOUNDS\n\t\t\tinfo.notCheckable = true\n\t\t\tinfo.hasArrow = true\n\t\t\tinfo.keepShownOnClick = true\n\t\t\tinfo.menuList = \"sounds\"\n\t\t\tUIDropDownMenu_AddButton(info, 1)\n\n\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\tinfo.text = L.RANGECHECK_OPTION_FRAMES\n\t\t\tinfo.notCheckable = true\n\t\t\tinfo.hasArrow = true\n\t\t\tinfo.keepShownOnClick = true\n\t\t\tinfo.menuList = \"frames\"\n\t\t\tUIDropDownMenu_AddButton(info, 1)\n\n\t\t\t-- info = UIDropDownMenu_CreateInfo()\n\t\t\t-- info.text = L.RANGECHECK_OPTION_SPEED\n\t\t\t-- info.notCheckable = true\n\t\t\t-- info.hasArrow = true\n\t\t\t-- info.keepShownOnClick = true\n\t\t\t-- info.menuList = \"speed\"\n\t\t\t-- UIDropDownMenu_AddButton(info, 1)\n\n\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\tinfo.text = L.RANGECHECK_LOCK\n\t\t\tif DBM.Options.RangeFrameLocked then\n\t\t\t\tinfo.checked = true\n\t\t\tend\n\t\t\tinfo.func = toggleLocked\n\t\t\tUIDropDownMenu_AddButton(info, 1)\n\n\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\tinfo.text = HIDE\n\t\t\tinfo.notCheckable = true\n\t\t\tinfo.func = function() rangeCheck:Hide(true) end\n\t\t\tinfo.arg1 = rangeCheck\n\t\t\tUIDropDownMenu_AddButton(info, 1)\n\t\telseif level == 2 then\n\t\t\tif menu == \"range\" then\n\t\t\t\tlocal ranges = {5, 8, 10, 15, 20, 25, 30, 35, 40, 45, 60, 80}\n\n\t\t\t\tfor _, r in pairs(ranges) do\n\t\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\t\tinfo.text = L.RANGECHECK_SETRANGE_TO:format(r)\n\t\t\t\t\tinfo.func = setRange\n\t\t\t\t\tinfo.arg1 = r\n\t\t\t\t\tinfo.checked = (mainFrame.range == r)\n\t\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\t\t\t\tend\n\t\t\telseif menu == \"threshold\" then\n\t\t\t\tlocal thresholds = {1, 2, 3, 4, 5, 6, 8}\n\n\t\t\t\tfor _, t in pairs(thresholds) do\n\t\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\t\tinfo.text = t\n\t\t\t\t\tinfo.func = setThreshold\n\t\t\t\t\tinfo.arg1 = t\n\t\t\t\t\tinfo.checked = (mainFrame.redCircleNumPlayers == t)\n\t\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\t\t\t\tend\n\t\t\telseif menu == \"sounds\" then\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.RANGECHECK_SOUND_OPTION_1\n\t\t\t\tinfo.notCheckable = true\n\t\t\t\tinfo.hasArrow = true\n\t\t\t\tinfo.menuList = \"RangeFrameSound1\"\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.RANGECHECK_SOUND_OPTION_2\n\t\t\t\tinfo.notCheckable = true\n\t\t\t\tinfo.hasArrow = true\n\t\t\t\tinfo.menuList = \"RangeFrameSound2\"\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\t\t\telseif menu == \"frames\" then\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.RANGECHECK_OPTION_TEXT\n\t\t\t\tinfo.func = setFrames\n\t\t\t\tinfo.arg1 = \"text\"\n\t\t\t\tinfo.checked = (DBM.Options.RangeFrameFrames == \"text\")\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.RANGECHECK_OPTION_RADAR\n\t\t\t\tinfo.func = setFrames\n\t\t\t\tinfo.arg1 = \"radar\"\n\t\t\t\tinfo.checked = (DBM.Options.RangeFrameFrames == \"radar\")\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L.RANGECHECK_OPTION_BOTH\n\t\t\t\tinfo.func = setFrames\n\t\t\t\tinfo.arg1 = \"both\"\n\t\t\t\tinfo.checked = (DBM.Options.RangeFrameFrames == \"both\")\n\t\t\t\tUIDropDownMenu_AddButton(info, 2)\n\t\t\t-- elseif menu == \"speed\" then\n\t\t\t--\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t--\tinfo.text = L.RANGECHECK_OPTION_SLOW\n\t\t\t--\tinfo.func = setSpeed\n\t\t\t--\tinfo.arg1 = \"Slow\"\n\t\t\t--\tinfo.checked = (DBM.Options.RangeFrameUpdates == \"Slow\")\n\t\t\t--\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t--\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t--\tinfo.text = L.RANGECHECK_OPTION_AVERAGE\n\t\t\t--\tinfo.func = setSpeed\n\t\t\t--\tinfo.arg1 = \"Average\"\n\t\t\t--\tinfo.checked = (DBM.Options.RangeFrameUpdates == \"Average\")\n\t\t\t--\tUIDropDownMenu_AddButton(info, 2)\n\n\t\t\t--\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t--\tinfo.text = L.RANGECHECK_OPTION_FAST\n\t\t\t--\tinfo.func = setSpeed\n\t\t\t--\tinfo.arg1 = \"Fast\"\n\t\t\t--\tinfo.checked = (DBM.Options.RangeFrameUpdates == \"Fast\")\n\t\t\t--\tUIDropDownMenu_AddButton(info, 2)\n\t\t\tend\n\t\telseif level == 3 then\n\t\t\tlocal option = menu\n\n\t\t\tfor k, s in ipairs(sounds) do\n\t\t\t\tinfo = UIDropDownMenu_CreateInfo()\n\t\t\t\tinfo.text = L[\"RANGECHECK_SOUND_\"..tostring(k - 1)]\n\t\t\t\tinfo.func = setSound\n\t\t\t\tinfo.arg1 = option\n\t\t\t\tinfo.arg2 = s\n\t\t\t\tinfo.checked = (DBM.Options[option] == s)\n\t\t\t\tUIDropDownMenu_AddButton(info, 3)\n\t\t\tend\n\n\t\tend\n\tend\nend\n\n-----------------\n-- Play Sounds --\n-----------------\nlocal updateSound\nlocal soundUpdate = 0\n\ndo\n\tlocal UnitAffectingCombat = UnitAffectingCombat\n\n\tfunction updateSound(num)\n\t\tif not UnitAffectingCombat(\"player\") or (GetTime() - soundUpdate) < 5 then\n\t\t\treturn\n\t\tend\n\t\tsoundUpdate = GetTime()\n\t\tif num == 1 then\n\t\t\tif DBM.Options.RangeFrameSound1 ~= \"none\" then\n\t\t\t\tDBM:PlaySoundFile(DBM.Options.RangeFrameSound1)\n\t\t\tend\n\t\telseif num > 1 then\n\t\t\tif DBM.Options.RangeFrameSound2 ~= \"none\" then\n\t\t\t\tDBM:PlaySoundFile(DBM.Options.RangeFrameSound2)\n\t\t\tend\n\t\tend\n\tend\nend\n\n------------------------\n--  Create the frame  --\n------------------------\nlocal function createTextFrame()\n\ttextFrame = CreateFrame(\"Frame\", \"DBMRangeCheck\", UIParent)\n\ttextFrame:SetFrameStrata(\"DIALOG\")\n\ttextFrame.backdropInfo = {\n\t\tbgFile\t\t= \"Interface\\\\DialogFrame\\\\UI-DialogBox-Background\",--131071\n\t\ttile\t\t= true,\n\t\ttileSize\t= 16\n\t}\n\ttextFrame:SetBackdrop(textFrame.backdropInfo)\n\ttextFrame:SetPoint(DBM.Options.RangeFramePoint, UIParent, DBM.Options.RangeFramePoint, DBM.Options.RangeFrameX, DBM.Options.RangeFrameY)\n\ttextFrame:SetSize(128, 12)\n\ttextFrame:SetClampedToScreen(true)\n\ttextFrame:EnableMouse(true)\n\ttextFrame:SetToplevel(true)\n\ttextFrame:SetMovable(true)\n\ttextFrame:RegisterForDrag(\"LeftButton\")\n\ttextFrame:SetScript(\"OnDragStart\", function(self)\n\t\tif not DBM.Options.RangeFrameLocked then\n\t\t\tself:StartMoving()\n\t\tend\n\tend)\n\ttextFrame:SetScript(\"OnDragStop\", function(self)\n\t\tself:StopMovingOrSizing()\n\t\tlocal point, _, _, x, y = self:GetPoint(1)\n\t\tDBM.Options.RangeFrameX = x\n\t\tDBM.Options.RangeFrameY = y\n\t\tDBM.Options.RangeFramePoint = point\n\tend)\n\ttextFrame:SetScript(\"OnMouseDown\", function(_, button)\n\t\tif button == \"RightButton\" then\n\t\t\tlocal dropdownFrame = CreateFrame(\"Frame\", \"DBMRangeCheckDropdown\", UIParent)\n\t\t\tUIDropDownMenu_Initialize(dropdownFrame, initializeDropdown)\n\t\t\tToggleDropDownMenu(1, nil, dropdownFrame, \"cursor\", 5, -10)\n\t\tend\n\tend)\n\n\tlocal text = textFrame:CreateFontString(nil, \"OVERLAY\", \"GameTooltipText\")\n\ttext:SetSize(128, 15)\n\ttext:SetPoint(\"BOTTOMLEFT\", textFrame, \"TOPLEFT\")\n\ttext:SetTextColor(1, 1, 1, 1)\n\ttext:Show()\n\ttext.OldSetText = text.SetText\n\ttext.SetText = function(self, text)\n\t\tself:OldSetText(text)\n\t\tself:SetWidth(0) -- Set the text width to 0, so the system can auto-calculate the size\n\tend\n\ttextFrame.text = text\n\n\tlocal inRangeText = textFrame:CreateFontString(nil, \"OVERLAY\", \"GameTooltipText\")\n\tinRangeText:SetSize(128, 15)\n\tinRangeText:SetPoint(\"TOPLEFT\", textFrame, \"BOTTOMLEFT\")\n\tinRangeText:SetTextColor(1, 1, 1, 1)\n\tinRangeText:Hide()\n\ttextFrame.inRangeText = inRangeText\n\n\ttextFrame.lines = {}\n\tfor i = 1, 5 do\n\t\tlocal line = textFrame:CreateFontString(nil, \"OVERLAY\", \"GameFontNormal\")\n\t\tline:SetSize(128, 12)\n\t\tline:SetJustifyH(\"LEFT\")\n\t\tif i == 1 then\n\t\t\tline:SetPoint(\"TOPLEFT\", textFrame, \"TOPLEFT\", 6, -6)\n\t\telse\n\t\t\tline:SetPoint(\"TOPLEFT\", textFrame.lines[i - 1], \"LEFT\", 0, -6)\n\t\tend\n\t\ttextFrame.lines[i] = line\n\tend\n\n\ttextFrame:Hide()\nend\n\nlocal function createRadarFrame()\n\tradarFrame = CreateFrame(\"Frame\", \"DBMRangeCheckRadar\", UIParent)\n\tradarFrame:SetFrameStrata(\"DIALOG\")\n\tradarFrame:SetPoint(DBM.Options.RangeFrameRadarPoint, UIParent, DBM.Options.RangeFrameRadarPoint, DBM.Options.RangeFrameRadarX, DBM.Options.RangeFrameRadarY)\n\tradarFrame:SetSize(128, 128)\n\tradarFrame:SetClampedToScreen(true)\n\tradarFrame:EnableMouse(true)\n\tradarFrame:SetToplevel(true)\n\tradarFrame:SetMovable(true)\n\tradarFrame:RegisterForDrag(\"LeftButton\")\n\tradarFrame:SetScript(\"OnDragStart\", function(self)\n\t\tif not DBM.Options.RangeFrameLocked then\n\t\t\tself:StartMoving()\n\t\tend\n\tend)\n\tradarFrame:SetScript(\"OnDragStop\", function(self)\n\t\tself:StopMovingOrSizing()\n\t\tlocal point, _, _, x, y = self:GetPoint(1)\n\t\tDBM.Options.RangeFrameRadarX = x\n\t\tDBM.Options.RangeFrameRadarY = y\n\t\tDBM.Options.RangeFrameRadarPoint = point\n\tend)\n\tradarFrame:SetScript(\"OnMouseDown\", function(_, button)\n\t\tif button == \"RightButton\" then\n\t\t\tlocal dropdownFrame = CreateFrame(\"Frame\", \"DBMRangeCheckDropdown\", UIParent--[[, \"UIDropDownMenuTemplate\"]])\n\t\t\tUIDropDownMenu_Initialize(dropdownFrame, initializeDropdown)\n\t\t\tToggleDropDownMenu(1, nil, dropdownFrame, \"cursor\", 5, -10)\n\t\tend\n\tend)\n\n\tlocal bg = radarFrame:CreateTexture(nil, \"BACKGROUND\")\n\tbg:SetAllPoints(radarFrame)\n\tbg:SetBlendMode(\"BLEND\")\n\tbg:SetTexture(0, 0, 0, 0.3)\n\tradarFrame.background = bg\n\n\tlocal circle = radarFrame:CreateTexture(nil, \"ARTWORK\")\n\tcircle:SetSize(85, 85)\n\tcircle:SetPoint(\"CENTER\")\n\tcircle:SetTexture(\"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\radar_circle.blp\")\n\tcircle:SetVertexColor(0, 1, 0)\n\tcircle:SetBlendMode(\"ADD\")\n\tradarFrame.circle = circle\n\n\tlocal player = radarFrame:CreateTexture(nil, \"OVERLAY\")\n\tplayer:SetSize(32, 32)\n\tplayer:SetTexture(\"Interface\\\\Minimap\\\\MinimapArrow.blp\")\n\tplayer:SetBlendMode(\"ADD\")\n\tplayer:SetPoint(\"CENTER\")\n\n\tlocal text = radarFrame:CreateFontString(nil, \"OVERLAY\", \"GameTooltipText\")\n\ttext:SetSize(128, 15)\n\ttext:SetPoint(\"BOTTOMLEFT\", radarFrame, \"TOPLEFT\")\n\ttext:SetTextColor(1, 1, 1, 1)\n\ttext:Show()\n\tradarFrame.text = text\n\n\tlocal inRangeText = radarFrame:CreateFontString(nil, \"OVERLAY\", \"GameTooltipText\")\n\tinRangeText:SetSize(128, 15)\n\tinRangeText:SetPoint(\"TOPLEFT\", radarFrame, \"BOTTOMLEFT\")\n\tinRangeText:SetTextColor(1, 1, 1, 1)\n\tinRangeText:Hide()\n\tradarFrame.inRangeText = inRangeText\n\n\tradarFrame.dots = {}\n\tfor i = 1, 40 do\n\t\tlocal dot = radarFrame:CreateTexture(nil, \"OVERLAY\")\n\t\tdot:SetSize(24, 24)\n\t\tdot:SetTexture(\"Interface\\\\Minimap\\\\PartyRaidBlips\") -- 249183\n\t\tdot:Hide()\n\t\tradarFrame.dots[i] = dot\n\tend\n\n\tradarFrame:Hide()\nend\n\n----------------\n--  OnUpdate  --\n----------------\ndo\n\tlocal UnitExists, UnitIsUnit, UnitIsDeadOrGhost, UnitIsConnected, GetPlayerFacing, UnitClass, IsInRaid, GetNumGroupMembers, GetRaidTargetIndex = UnitExists, UnitIsUnit, UnitIsDeadOrGhost, UnitIsConnected, GetPlayerFacing, UnitClass, private.IsInRaid, private.GetNumGroupMembers, GetRaidTargetIndex\n\tlocal max, min, sin, cos, pi2 = math.max, math.min, math.sin, math.cos, math.pi * 2\n\tlocal circleColor, rotation, pixelsperyard, activeDots, prevRange, prevThreshold, prevNumClosePlayer, prevclosestRange, prevColor, prevType = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\n\tlocal bossMode\n\tlocal unitList = {}\n\tlocal BLIP_TEX_COORDS = {\n\t\t[\"WARRIOR\"]\t\t = { 0, 0.125, 0, 0.25 },\n\t\t[\"PALADIN\"]\t\t = { 0.125, 0.25, 0, 0.25 },\n\t\t[\"HUNTER\"]\t\t = { 0.25, 0.375, 0, 0.25 },\n\t\t[\"ROGUE\"]\t\t = { 0.375, 0.5, 0, 0.25 },\n\t\t[\"PRIEST\"]\t\t = { 0.5, 0.625, 0, 0.25 },\n\t\t[\"DEATHKNIGHT\"]\t = { 0.625, 0.75, 0, 0.25 },\n\t\t[\"SHAMAN\"]\t\t = { 0.75, 0.875, 0, 0.25 },\n\t\t[\"MAGE\"]\t\t = { 0.875, 1, 0, 0.25 },\n\t\t[\"WARLOCK\"]\t\t = { 0, 0.125, 0.25, 0.5 },\n\t\t[\"DRUID\"]\t\t = { 0.25, 0.375, 0.25, 0.5 },\n\t}\n\n\tlocal function setDot(id, sinTheta, cosTheta)\n\t\tlocal dot = radarFrame.dots[id]\n\t\tif dot.range < (mainFrame.range * 1.5) then -- If person is closer than 1.5 * range, show the dot. Else hide it\n\t\t\tdot:ClearAllPoints()\n\t\t\tdot:SetPoint(\"CENTER\", radarFrame, \"CENTER\", ((dot.x * cosTheta) - (-dot.y * sinTheta)) * pixelsperyard, ((dot.x * sinTheta) + (-dot.y * cosTheta)) * pixelsperyard)\n\t\t\tdot:Show()\n\t\telseif dot:IsShown() then\n\t\t\tdot:Hide()\n\t\tend\n\tend\n\n\tfunction updateIcon()\n\t\tlocal numPlayers = GetNumGroupMembers()\n\t\tactiveDots = max(numPlayers, activeDots)\n\t\tfor i = 1, activeDots do\n\t\t\tlocal dot = radarFrame.dots[i]\n\t\t\tif i <= numPlayers then\n\t\t\t\tunitList[i] = IsInRaid() and \"raid\" .. i or \"party\" .. i\n\t\t\t\tlocal _, class = UnitClass(unitList[i])\n\t\t\t\tlocal icon = GetRaidTargetIndex(unitList[i])\n\t\t\t\tdot.class = class\n\t\t\t\tif icon and icon < 9 then\n\t\t\t\t\tdot.icon = icon\n\t\t\t\t\tdot:SetTexture(\"Interface\\\\TargetingFrame\\\\UI-RaidTargetingIcon_\" .. icon) -- 13700 .. icon\n\t\t\t\t\tdot:SetTexCoord(0, 1, 0, 1)\n\t\t\t\t\tdot:SetSize(16, 16)\n\t\t\t\t\tdot:SetDrawLayer(\"OVERLAY\", 1)\n\t\t\t\telse\n\t\t\t\t\tdot.icon = nil\n\t\t\t\t\tclass = class or \"PRIEST\"\n\t\t\t\t\tdot:SetTexture(\"Interface\\\\Minimap\\\\PartyRaidBlips\") -- 249183\n\t\t\t\t\tdot:SetTexCoord(BLIP_TEX_COORDS[class][1], BLIP_TEX_COORDS[class][2], BLIP_TEX_COORDS[class][3], BLIP_TEX_COORDS[class][4])\n\t\t\t\t\tdot:SetSize(24, 24)\n\t\t\t\t\tdot:SetDrawLayer(\"OVERLAY\", 0)\n\t\t\t\tend\n\t\t\telseif dot:IsShown() then\n\t\t\t\tdot:Hide()\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction updateRangeFrame()\n\t\tif mainFrame.hideTime > 0 and GetTime() > mainFrame.hideTime then\n\t\t\trangeCheck:Hide()\n\t\t\treturn\n\t\tend\n\t\tlocal activeRange = mainFrame.range\n--\t\tlocal restricted = mainFrame.restrictions -- GetPlayerFacing() was only protected in 7.1.0\n\t\tlocal tEnabled = textFrame:IsShown()\n\t\tlocal rEnabled = radarFrame:IsShown()\n\t\tlocal reverse = mainFrame.reverse\n\t\tlocal warnThreshold = mainFrame.redCircleNumPlayers\n\t\tif tEnabled then\n\t\t\tfor i = 1, 5 do\n\t\t\t\ttextFrame.lines[i]:SetText(\"\")\n\t\t\t\ttextFrame.lines[i]:Hide()\n\t\t\tend\n\t\t\tif mainFrame.bossMode then\n\t\t\t\ttextFrame.text:SetText(L.RANGERADAR_BOSS_HEADER:format(activeRange))\n\t\t\telse\n\t\t\t\tif reverse then\n\t\t\t\t\tif warnThreshold > 1 then\n\t\t\t\t\t\ttextFrame.text:SetText(L.RANGECHECK_RHEADERT:format(activeRange, warnThreshold))\n\t\t\t\t\telse\n\t\t\t\t\t\ttextFrame.text:SetText(L.RANGECHECK_RHEADER:format(activeRange))\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tif warnThreshold > 1 then\n\t\t\t\t\t\ttextFrame.text:SetText(L.RANGECHECK_HEADERT:format(activeRange, warnThreshold))\n\t\t\t\t\telse\n\t\t\t\t\t\ttextFrame.text:SetText(L.RANGECHECK_HEADER:format(activeRange))\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tif rEnabled and (prevRange ~= activeRange or prevThreshold ~= mainFrame.redCircleNumPlayers) then\n\t\t\tprevRange = activeRange\n\t\t\tpixelsperyard = min(radarFrame:GetWidth(), radarFrame:GetHeight()) / (activeRange * 3)\n\t\t\tradarFrame.circle:SetSize(activeRange * pixelsperyard * 2, activeRange * pixelsperyard * 2)\n\t\t\tif mainFrame.bossMode then\n\t\t\t\tif bossMode ~= mainFrame.bossMode then\n\t\t\t\t\tbossMode = mainFrame.bossMode\n\t\t\t\tend\n\t\t\t\tradarFrame.text:SetText(L.RANGERADAR_BOSS_HEADER:format(activeRange))\n\t\t\telse\n\t\t\t\tif reverse then\n\t\t\t\t\tradarFrame.text:SetText(L.RANGERADAR_RHEADER:format(activeRange, mainFrame.redCircleNumPlayers))\n\t\t\t\telse\n\t\t\t\t\tradarFrame.text:SetText(L.RANGERADAR_HEADER:format(activeRange, mainFrame.redCircleNumPlayers))\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\n\t\trotation = pi2 - (GetPlayerFacing() or 0)\n\t\tlocal sinTheta = sin(rotation)\n\t\tlocal cosTheta = cos(rotation)\n\t\tlocal closePlayer = 0\n\t\tlocal closestRange = nil -- declare as nil to prevent luacheck error\n\t\tlocal closetName\n\t\tlocal filter = mainFrame.filter\n\t\tlocal type = reverse and 2 or filter and 1 or 0\n\t\tlocal onlySummary = mainFrame.onlySummary\n\n\t\tif mainFrame.bossMode then\n\t\t\tlocal uId = mainFrame.bossUnit\n\t\t\tlocal range = getUnitRange(uId)\n\t\t\tif uId and range and range <= activeRange and (not filter or filter(uId)) then\n\t\t\t\tclosePlayer = closePlayer + 1\n\t\t\t\tlocal color = NORMAL_FONT_COLOR\n\t\t\t\tclosetName = UnitName(uId)\n\t\t\t\tif rEnabled then -- Only used by radar\n\t\t\t\t\tif not closestRange then\n\t\t\t\t\t\tclosestRange = range\n\t\t\t\t\telseif range < closestRange then\n\t\t\t\t\t\tclosestRange = range\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\t\tif tEnabled and not onlySummary and closePlayer < 6 then -- Display up to 5 players in text range frame.\n\t\t\t\t\ttextFrame.lines[closePlayer]:SetText(closetName, color.r, color.g, color.b)\n\t\t\t\t\ttextFrame.lines[closePlayer]:SetTextColor(color.r, color.g, color.b)\n\t\t\t\t\ttextFrame.lines[closePlayer]:Show()\n\t\t\t\t\ttextFrame:SetHeight((closePlayer * 12) + 12)\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\tfor i = 1, GetNumGroupMembers() do\n\t\t\t\tlocal uId = unitList[i]\n\t\t\t\tlocal dot = radarFrame.dots[i]\n\t\t\t\tif UnitExists(uId) and not UnitIsUnit(uId, \"player\") and not UnitIsDeadOrGhost(uId) and UnitIsConnected(uId) and (not filter or filter(uId)) then\n\t\t\t\t\tlocal range = getUnitRange(uId)\n\t\t\t\t\tlocal inRange = false\n\t\t\t\t\tif range < activeRange + 0.5 then\n\t\t\t\t\t\tclosePlayer = closePlayer + 1\n\t\t\t\t\t\tinRange = true\n\t\t\t\t\t\tif rEnabled then -- Only used by radar\n\t\t\t\t\t\t\tif not closestRange then\n\t\t\t\t\t\t\t\tclosestRange = range\n\t\t\t\t\t\t\telseif range < closestRange then\n\t\t\t\t\t\t\t\tclosestRange = range\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif not closetName then\n\t\t\t\t\t\t\tclosetName = DBM:GetUnitFullName(uId)\n\t\t\t\t\t\t\tclosetName = DBM:GetShortServerName(closetName)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\tif tEnabled and inRange and not onlySummary and closePlayer < 6 then -- Display up to 5 players in text range frame.\n\t\t\t\t\t\tlocal playerName = DBM:GetUnitFullName(uId)\n\t\t\t\t\t\tplayerName = DBM:GetShortServerName(playerName)\n\t\t\t\t\t\tlocal color = RAID_CLASS_COLORS[dot.class] or NORMAL_FONT_COLOR\n\t\t\t\t\t\ttextFrame.lines[closePlayer]:SetText(dot.icon and (\"|TInterface\\\\TargetingFrame\\\\UI-RaidTargetingIcon_%d:0|t %s\"):format(dot.icon, playerName) or playerName)\n\t\t\t\t\t\ttextFrame.lines[closePlayer]:SetTextColor(color.r, color.g, color.b)\n\t\t\t\t\t\ttextFrame.lines[closePlayer]:Show()\n\t\t\t\t\t\ttextFrame:SetHeight((closePlayer * 12) + 12)\n\t\t\t\t\tend\n\t\t\t\t\tif rEnabled then\n\t\t\t\t\t\tlocal playerX, playerY = GetPlayerMapPosition(\"player\")\n\t\t\t\t\t\tif playerX == 0 and playerY == 0 then\n\t\t\t\t\t\t\trangeCheck:Hide(true)\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\tend\n\t\t\t\t\t\tdot.x = rangeX\n\t\t\t\t\t\tdot.y = rangeY\n\t\t\t\t\t\tdot.range = range\n\t\t\t\t\t\tsetDot(i, sinTheta, cosTheta)\n\t\t\t\t\tend\n\t\t\t\telseif rEnabled and dot:IsShown() then\n\t\t\t\t\tdot:Hide()\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\n\t\tif tEnabled then\n\t\t\t-- Green Text (Regular range frame and not near too many players, or reverse range frame and we ARE near enough)\n\t\t\ttextFrame.inRangeText:SetText(L.RANGECHECK_IN_RANGE_TEXT:format(closePlayer, activeRange))\n\t\t\ttextFrame.inRangeText:Show()\n\t\t\tif (reverse and closePlayer >= warnThreshold) or (not reverse and closePlayer < warnThreshold) then\n\t\t\t\ttextFrame.inRangeText:SetTextColor(0, 1, 0)\n\t\t\t-- Red Text (Regular range frame and we are near too many players, or reverse range frame and we aren't near enough)\n\t\t\telse\n\t\t\t\tupdateSound(closePlayer)\n\t\t\t\ttextFrame.inRangeText:SetTextColor(1, 0, 0)\n\t\t\tend\n\t\t\ttextFrame:Show()\n\t\tend\n\t\tif rEnabled then\n\t\t\tif prevNumClosePlayer ~= closePlayer or prevclosestRange ~= closestRange or prevType ~= type then\n\t\t\t\tif closePlayer >= warnThreshold then -- Only show the text if the circle is red\n\t\t\t\t\tcircleColor = reverse and 1 or 2\n\t\t\t\t\tif closePlayer == 1 then\n\t\t\t\t\t\tradarFrame.inRangeText:SetText(L.RANGERADAR_IN_RANGE_TEXTONE:format(closetName, closestRange))\n\t\t\t\t\telse\n\t\t\t\t\t\tradarFrame.inRangeText:SetText(L.RANGERADAR_IN_RANGE_TEXT:format(closePlayer, closestRange))\n\t\t\t\t\tend\n\t\t\t\t\tradarFrame.inRangeText:Show()\n\t\t\t\telse\n\t\t\t\t\tcircleColor = reverse and 2 or 1\n\t\t\t\t\tradarFrame.inRangeText:Hide()\n\t\t\t\tend\n\t\t\t\tprevNumClosePlayer = closePlayer\n\t\t\t\tprevclosestRange = closestRange\n\t\t\t\tprevType = type\n\t\t\tend\n\n\t\t\tif UnitIsDeadOrGhost(\"player\") then\n\t\t\t\tcircleColor = 3\n\t\t\tend\n\n\t\t\tif prevColor ~= circleColor then\n\t\t\t\tif circleColor == 1 then\n\t\t\t\t\tradarFrame.circle:SetVertexColor(0, 1, 0)\n\t\t\t\telseif circleColor == 2 then\n\t\t\t\t\tradarFrame.circle:SetVertexColor(1, 0, 0)\n\t\t\t\telse\n\t\t\t\t\tradarFrame.circle:SetVertexColor(1, 1, 1)\n\t\t\t\tend\n\t\t\t\tprevColor = circleColor\n\t\t\tend\n\t\t\tif circleColor == 2 then -- Red\n\t\t\t\tupdateSound(closePlayer)\n\t\t\tend\n\t\tend\n\tend\nend\n\nlocal updater = mainFrame:CreateAnimationGroup()\nupdater:SetLooping(\"REPEAT\")\nlocal anim = updater:CreateAnimation()\nanim:SetDuration(0.05)\n\nmainFrame:SetSize(0, 0)\nmainFrame:SetScript(\"OnEvent\", function(self, event)\n\tif event == \"PARTY_MEMBERS_CHANGED\" or event == \"RAID_ROSTER_UPDATE\" or event == \"RAID_TARGET_UPDATE\" then\n\t\tupdateIcon()\n\tend\nend)\n\n-----------------------\n--  Check functions  --\n-----------------------\nlocal getDistanceBetween, getDistanceBetweenAll\n\ndo\n\tlocal UnitExists, UnitIsUnit, UnitIsDeadOrGhost, UnitIsConnected = UnitExists, UnitIsUnit, UnitIsDeadOrGhost, UnitIsConnected\n\n\tfunction getDistanceBetweenAll(checkrange)\n\t\tlocal range\n\t\tfor uId in DBM:GetGroupMembers() do\n\t\t\tif UnitExists(uId) and not UnitIsUnit(uId, \"player\") and not UnitIsDeadOrGhost(uId) and UnitIsConnected(uId) then\n\t\t\t\trange = getUnitRange(uId)\n\t\t\t\tif checkrange < (range + 0.5) then\n\t\t\t\t\treturn true\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\treturn false\n\tend\n\n\tfunction getDistanceBetween(uId, x, y)\n\t\tlocal restrictionsActive = DBM:HasMapRestrictions()\n\t\tif restrictionsActive then\n\t\t\tif not x then -- If only one arg then 2nd arg is always assumed to be player\n\t\t\t\treturn getUnitRange(uId)\n\t\t\tend\n\t\t\tif type(x) == \"string\" and UnitExists(x) then -- arguments: uId, uId2\n\t\t\t\tif UnitIsUnit(\"player\", uId) then\n\t\t\t\t\treturn getUnitRange(x)\n\t\t\t\telseif UnitIsUnit(\"player\", x) then\n\t\t\t\t\treturn getUnitRange(uId)\n\t\t\t\tend\n\t\t\tend\n\t\telse -- Neither unit is player, no way to avoid GetPlayerMapPosition\n\t\t\tif not x then -- If only one arg then 2nd arg is always assumed to be player\n\t\t\t\tx, y = GetPlayerMapPosition(\"player\")\n\t\t\tend\n\t\t\tif type(x) == \"string\" and UnitExists(x) then -- arguments: uId, uId2\n\t\t\t\tlocal uId2 = x\n\t\t\t\tx, y = GetPlayerMapPosition(uId2)\n\t\t\t\tif not x then\n\t\t\t\t\tprint(\"getDistanceBetween failed for: \" .. uId .. \" (\" .. tostring(UnitExists(uId)) .. \") and \" .. uId2 .. \" (\" .. tostring(UnitExists(uId2)) .. \")\")\n\t\t\t\t\treturn\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tif restrictionsActive then -- Cannot check distance between player and a location (not another unit, again, fail quietly)\n\t\t\treturn 1000\n\t\tend\n\t\tlocal mapX, mapY = DBM:GetMapSize()\n\t\tlocal startX, startY = GetPlayerMapPosition(uId)\n\t\tlocal dX = (startX - x) * mapX\n\t\tlocal dY = (startY - y) * mapY\n\t\treturn (dX * dX + dY * dY) ^ 0.5\n\tend\nend\n\n---------------\n--  Methods  --\n---------------\nlocal restoreRange, restoreFilter, restoreThreshold, restoreReverse\n\nfunction rangeCheck:Show(range, filter, forceshow, redCircleNumPlayers, reverse, hideTime, onlySummary, bossUnit)\n\tDBM:Debug((\"Range Frame called. #members: %d ; Options: %s + %s + %s ; forceshow: %s ; MapRestrictions: %s\"):format(DBM:GetNumRealGroupMembers(), tostring(DBM.Options.DontShowRangeFrame), tostring(DBM.Options.SpamSpecInformationalOnly), DBM.Options.RangeFrameFrames or \"nil\", tostring(forceshow) or \"nil\", tostring(DBM:HasMapRestrictions())), 3)\n\tif (DBM:GetNumRealGroupMembers() < 2 or DBM.Options.DontShowRangeFrame or DBM.Options.SpamSpecInformationalOnly) and not forceshow then\n\t\treturn\n\tend\n\tif type(range) == \"function\" then -- The first argument is optional\n\t\treturn self:Show(nil, range)\n\tend\n\trange = range or 10\n\tredCircleNumPlayers = redCircleNumPlayers or 1\n\tif not textFrame then\n\t\tcreateTextFrame()\n\tend\n\tif not radarFrame then\n\t\tcreateRadarFrame()\n\tend\n\tmainFrame.previouslyShown = self:IsShown()\n\tlocal restrictionsActive = DBM:HasMapRestrictions()\n\tif (DBM.Options.RangeFrameFrames == \"text\" or DBM.Options.RangeFrameFrames == \"both\" or restrictionsActive) and not textFrame:IsShown() then\n\t\tDBM:Debug(\"Range TEXT frame shown\", 3)\n\t\ttextFrame:Show()\n\tend\n\t-- TODO, add check for restricted area here so we can prevent radar frame loading.\n\tif not restrictionsActive and (DBM.Options.RangeFrameFrames == \"radar\" or DBM.Options.RangeFrameFrames == \"both\") and not radarFrame:IsShown() then\n\t\tDBM:Debug(\"Range RADAR frame shown\", 3)\n\t\tradarFrame:Show()\n\tend\n\tmainFrame.previousRange = mainFrame.range or range\n\tmainFrame.range = range\n\tmainFrame.filter = filter\n\tmainFrame.redCircleNumPlayers = redCircleNumPlayers\n\tmainFrame.reverse = reverse\n\tmainFrame.hideTime = hideTime and (GetTime() + hideTime) or 0\n\tmainFrame.restrictions = restrictionsActive\n\tmainFrame.onlySummary = onlySummary\n\tmainFrame.bossUnit = bossUnit\n\tmainFrame.bossMode = bossUnit ~= nil\n\tif not mainFrame.eventRegistered then\n\t\tmainFrame.eventRegistered = true\n\t\tupdateIcon()\n\t\tmainFrame:RegisterEvent(\"PARTY_MEMBERS_CHANGED\")\n\t\tmainFrame:RegisterEvent(\"RAID_ROSTER_UPDATE\")\n\t\tmainFrame:RegisterEvent(\"RAID_TARGET_UPDATE\")\n\tend\n\tupdater:SetScript(\"OnLoop\", updateRangeFrame)\n\tupdater:Play()\n\tif forceshow and not DBM.Options.DontRestoreRange then -- Force means user activated range frame, store user value for restore function\n\t\trestoreRange, restoreFilter, restoreThreshold, restoreReverse = mainFrame.range, mainFrame.filter, mainFrame.redCircleNumPlayers, mainFrame.reverse\n\tend\nend\n\nfunction rangeCheck:SetBossRange(range, bossUnit)\n\tif DBM.Options.DontShowRangeFrame then return end\n\tif not HarmItems[range] then\n\t\terror((\"Boss mode range \\\"%d yd\\\" is not supported.\"):format(range), 2)\n\tend\n\tself:Show(range, nil, true, nil, nil, nil, nil, bossUnit)\nend\n\nfunction rangeCheck:DisableBossMode()\n\tif mainFrame and mainFrame.bossMode then\n\t\tmainFrame.bossMode = false\n\t\tmainFrame.bossUnit = nil\n\t\tmainFrame.range = mainFrame.previousRange\n\t\trestoreRange = mainFrame.range\n\t\tif not mainFrame.previouslyShown then\n\t\t\tself:Hide(true)\n\t\tend\n\tend\nend\n\nfunction rangeCheck:Hide(force)\n\tif not DBM.Options.DontRestoreRange and restoreRange and not force then -- Restore range frame to way it was when boss mod is done with it\n\t\trangeCheck:Show(restoreRange, restoreFilter, true, restoreThreshold, restoreReverse)\n\telse\n\t\trestoreRange, restoreFilter, restoreThreshold, restoreReverse = nil, nil, nil, nil\n\t\tupdater:Stop()\n\t\tif mainFrame.eventRegistered then\n\t\t\tmainFrame.eventRegistered = nil\n\t\t\tmainFrame:UnregisterAllEvents()\n\t\tend\n\t\tif textFrame then\n\t\t\ttextFrame:Hide()\n\t\tend\n\t\tif radarFrame then\n\t\t\tradarFrame:Hide()\n\t\tend\n\tend\nend\n\nfunction rangeCheck:IsShown()\n\treturn textFrame and textFrame:IsShown() or radarFrame and radarFrame:IsShown()\nend\n\nfunction rangeCheck:IsRadarShown()\n\treturn radarFrame and radarFrame:IsShown()\nend\n\nfunction rangeCheck:UpdateRestrictions(force)\n\tmainFrame.restrictions = force or DBM:HasMapRestrictions()\nend\n\nfunction rangeCheck:SetHideTime(hideTime)\n\tmainFrame.hideTime = hideTime and (GetTime() + hideTime) or 0\nend\n\n-- GetDistance(uId) -- distance between you and the given uId\n-- GetDistance(uId, x, y) -- distance between uId and the coordinates\n-- GetDistance(uId, uId2) -- distance between the two uIds\nfunction rangeCheck:GetDistance(...)\n\treturn getDistanceBetween(...)\nend\n\nfunction rangeCheck:GetDistanceAll(checkrange)\n\treturn getDistanceBetweenAll(checkrange)\nend\n\ndo\n\tlocal function UpdateRangeFrame(r, reverse)\n\t\tif rangeCheck:IsShown() then\n\t\t\trangeCheck:Hide(true)\n\t\telse\n\t\t\tif DBM:HasMapRestrictions() then\n\t\t\t\tDBM:AddMsg(L.NO_RANGE)\n\t\t\tend\n\t\t\trangeCheck:Show((r and r < 201) and r or 10, nil, true, nil, reverse)\n\t\tend\n\tend\n\tSLASH_DBMRANGE1 = \"/range\"\n\tSLASH_DBMRANGE2 = \"/distance\"\n\tSLASH_DBMRRANGE1 = \"/rrange\"\n\tSLASH_DBMRRANGE2 = \"/rdistance\"\n\tSLASH_DBMBOSSRANGE1 = \"/bossrange\"\n\tSlashCmdList[\"DBMRANGE\"] = function(msg)\n\t\tUpdateRangeFrame(tonumber(msg), false)\n\tend\n\tSlashCmdList[\"DBMRRANGE\"] = function(msg)\n\t\tUpdateRangeFrame(tonumber(msg), true)\n\tend\n\tSlashCmdList[\"DBMBOSSRANGE\"] = function(msg)\n\t\tlocal r = tonumber(msg)\n\t\tif not r then\n\t\t\tDBM.RangeCheck:DisableBossMode()\n\t\telse\n\t\t\tDBM.RangeCheck:SetBossRange(r, \"target\")\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Core/DBM-TimerTracker.lua",
    "content": "local CallbackHandler = LibStub(\"CallbackHandler-1.0\")\nlocal AddOn = LibStub(\"AceAddon-3.0\"):NewAddon(\"DBM-TimerTracker\", \"AceConsole-3.0\", \"AceEvent-3.0\", \"AceTimer-3.0\", \"AceHook-3.0\")\nAddOn.callbacks = AddOn.callbacks or CallbackHandler:New(AddOn)\nTT = AddOn:NewModule(\"Enhanced_TimerTracker\", \"AceHook-3.0\", \"AceEvent-3.0\")\nAddOn.RegisteredModules = {}\nAddOn.RegisteredInitialModules = {}\nlocal ipairs = ipairs\nlocal unpack = unpack\nlocal floor, fmod, modf = math.floor, math.fmod, math.modf\nlocal LSM = LibStub(\"LibSharedMedia-3.0\")\nlocal GetTime = GetTime\nlocal GetBattlefieldScore, GetNumBattlefieldScores, GetUnitName, UnitFactionGroup = GetBattlefieldScore, GetNumBattlefieldScores, GetUnitName, UnitFactionGroup\nlocal function GetBattlefieldFaction(unit) -- workaround to detect faction in Cross-Faction BG\n\tif not unit then return UnitFactionGroup(\"player\") end\n\tlocal numScores = GetNumBattlefieldScores()\n\tif numScores == 0 then return UnitFactionGroup(\"player\")\n\telse\n\t\tlocal unitName = GetUnitName(unit, true)\n\t\tfor i = 1, numScores do\n\t\t\tlocal name, _, _, _, _, faction = GetBattlefieldScore(i)\n\t\t\tif name == unitName then\n\t\t\t\tif faction == 0 then\n\t\t\t\t\treturn \"Horde\"\n\t\t\t\telse\n\t\t\t\t\treturn \"Alliance\"\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend\nlocal media = {}\nLSM:Register(\"statusbar\", \"ElvUI Norm\", [[Interface\\AddOns\\DBM-Core\\textures\\NormTex2.tga]])\nLSM:Register(\"background\", \"ElvUI Blank\", [[Interface\\BUTTONS\\WHITE8X8]])\nmedia.blankTex = LSM:Fetch(\"background\", \"ElvUI Blank\")\nmedia.glossTex = LSM:Fetch(\"statusbar\",  \"ElvUI Norm\")\n\nlocal timerTypes = {\n\t[\"30-120\"] = {1, 30, 120},\n\t[\"60-120\"] = {1, 60, 120},\n\t[\"120-120\"] = {1, 120, 120},\n\t[\"15-60\"] = {1, 15, 60},\n\t[\"30-60\"] = {1, 30, 60},\n\t[\"60-60\"] = {1, 60, 60},\n}\n\nlocal chatMessage = {\n\t-- enUS\n\t-- WSG\n\t[\"The battle for Warsong Gulch begins in 30 seconds. Prepare yourselves!\"] = timerTypes[\"30-120\"],\n\t[\"The battle for Warsong Gulch begins in 1 minute.\"] = timerTypes[\"60-120\"],\n\t[\"The battle for Warsong Gulch begins in 2 minutes.\"] = timerTypes[\"120-120\"],\n\t-- AB\n\t[\"The Battle for Arathi Basin begins in 30 seconds. Prepare yourselves!\"] = timerTypes[\"30-120\"],\n\t[\"The Battle for Arathi Basin begins in 1 minute.\"] = timerTypes[\"60-120\"],\n\t[\"The battle for Arathi Basin begins in 2 minutes.\"] = timerTypes[\"120-120\"],\n\t-- EotS\n\t[\"The Battle for Eye of the Storm begins in 30 seconds.\"] = timerTypes[\"30-120\"],\n\t[\"The Battle for Eye of the Storm begins in 1 minute.\"] = timerTypes[\"60-120\"],\n\t[\"The battle for Eye of the Storm begins in 2 minutes.\"] = timerTypes[\"120-120\"],\n\t-- AV\n\t[\"The Battle for Alterac Valley begins in 30 seconds. Prepare yourselves!\"] = timerTypes[\"30-120\"],\n\t[\"30 seconds until the battle for Alterac Valley begins.\"] = timerTypes[\"30-120\"],\n\t[\"The Battle for Alterac Valley begins in 1 minute.\"] = timerTypes[\"60-120\"],\n\t[\"1 minute until the battle for Alterac Valley begins.\"] = timerTypes[\"60-120\"],\n\t[\"The Battle for Alterac Valley begins in 2 minutes.\"] = timerTypes[\"120-120\"],\n\t-- SotA\n\t[\"The battle for Strand of the Ancients begins in 30 seconds. Prepare yourselves!.\"] = timerTypes[\"30-120\"],\n\t[\"The battle for Strand of the Ancients begins in 1 minute.\"] = timerTypes[\"60-120\"],\n\t[\"The battle for Strand of the Ancients begins in 2 minutes.\"] = timerTypes[\"120-120\"],\n\t-- SotA 2 round\n\t[\"Round 2 begins in 30 seconds. Prepare yourselves!\"] = timerTypes[\"30-60\"],\n\t[\"Round 2 of the Battle for the Strand of the Ancients begins in 1 minute.\"] = timerTypes[\"60-60\"],\n\t-- Other\n\t[\"The battle will begin in 30 seconds!\"] = timerTypes[\"30-120\"],\n\t[\"The battle will begin in 1 minute.\"] = timerTypes[\"60-120\"],\n\t[\"The battle will begin in two minutes.\"] = timerTypes[\"120-120\"],\n\t[\"The battle begins in 30 seconds!\"] = timerTypes[\"30-120\"],\n\t[\"The battle begins in 1 minute!\"] = timerTypes[\"60-120\"],\n\t[\"The battle begins in 2 minutes!\"] = timerTypes[\"120-120\"],\n\t-- Arena\n\t[\"Fifteen seconds until the Arena battle begins!\"] = timerTypes[\"15-60\"],\n\t[\"Thirty seconds until the Arena battle begins!\"] = timerTypes[\"30-60\"],\n\t[\"One minute until the Arena battle begins!\"] = timerTypes[\"60-60\"],\n\n\t-- deDE\n\t-- WSG\n\t[\"Der Kampf um die Kriegshymnenschlucht beginnt in 30 Sekunden. Haltet Euch bereit!\"] = timerTypes[\"30-120\"],\n\t[\"Der Kampf um die Kriegshymnenschlucht beginnt in 1 Minute.\"] = timerTypes[\"60-120\"],\n\t-- AV\n\t[\"Der Kampf um das Alteractal beginnt in 30 Sekunden.\"] = timerTypes[\"30-120\"],\n\t[\"Der Kampf um das Alteractal beginnt in 1 Minute.\"] = timerTypes[\"60-120\"],\n\t-- SotA 2 round\n\t[\"Runde 2 beginnt in 30 Sekunden. Macht Euch bereit!\"] = timerTypes[\"30-60\"],\n\t[\"Runde 2 der Schlacht um den Strand der Uralten beginnt in 1 Minute.\"] = timerTypes[\"60-60\"],\n\t-- Other\n\t[\"Die Schlacht beginnt in 30 Sekunden!\"] = timerTypes[\"30-120\"],\n\t[\"Die Schlacht beginnt in 1 Minute!\"] = timerTypes[\"60-120\"],\n\t[\"Die Schlacht beginnt in 2 Minuten!\"] = timerTypes[\"120-120\"],\n\t-- Arena\n\t[\"Noch fünfzehn Sekunden bis der Arenakampf beginnt!\"] = timerTypes[\"15-60\"],\n\t[\"Noch dreißig Sekunden bis der Arenakampf beginnt!\"] = timerTypes[\"30-60\"],\n\t[\"Noch eine Minute bis der Arenakampf beginnt!\"] = timerTypes[\"60-60\"],\n\n\t-- esES & esMX\n\t-- WSG\n\t[\"La batalla por la Garganta Grito de Guerra comenzará en 30 segundos. ¡Preparaos!\"] = timerTypes[\"30-120\"],\n\t[\"La batalla por la Garganta Grito de Guerra comenzará en 1 minuto.\"] = timerTypes[\"60-120\"],\n\t-- AV\n\t[\"30 segundos para que dé comienzo la batalla por el Valle de Alterac.\"] = timerTypes[\"30-120\"],\n\t[\"1 minuto para que dé comienzo la batalla por el Valle de Alterac.\"] = timerTypes[\"60-120\"],\n\t-- SotA 2 round\n\t[\"La ronda 2 comenzará en 30 segundos. ¡Preparaos!\"] = timerTypes[\"30-60\"],\n\t[\"La ronda 2 de la batalla por la Playa de los Ancestros comenzará en 1 minuto.\"] = timerTypes[\"60-60\"],\n\t-- Other\n\t[\"¡La batalla comienza en treinta segundos!\"] = timerTypes[\"30-120\"],\n\t[\"¡La batalla comienza en un minuto!\"] = timerTypes[\"60-120\"],\n\t[\"¡La batalla comienza en dos minutos!\"] = timerTypes[\"120-120\"],\n\t-- Arena\n\t[\"¡Quince segundos para que comience la batalla de arena!\"] = timerTypes[\"15-60\"],\n\t[\"¡Treinta segundos hasta que comience la batalla en arena!\"] = timerTypes[\"30-60\"],\n\t[\"¡Un minuto hasta que dé comienzo la batalla en arena!\"] = timerTypes[\"60-60\"],\n\n\t-- frFR\n\t-- WSG\n\t[\"La bataille pour le goulet des Chanteguerres commence dans 30 secondes. Préparez-vous !\"] = timerTypes[\"30-120\"],\n\t[\"La bataille pour le goulet des Chanteguerres commence dans 1 minute.\"] = timerTypes[\"60-120\"],\n\t-- AV\n\t[\"La bataille pour la vallée d’Alterac commence dans 30 secondes.\"] = timerTypes[\"30-120\"],\n\t[\"La bataille pour la vallée d’Alterac commence dans 1 minute.\"] = timerTypes[\"60-120\"],\n\t-- SotA 2 round\n\t[\"Début de la deuxième manche dans 30 secondes. Préparez-vous !\"] = timerTypes[\"30-60\"],\n\t[\"Deuxième manche de la bataille du rivage des Anciens dans 1 minute.\"] = timerTypes[\"60-60\"],\n\t-- Other\n\t[\"La bataille commence dans 30 secondes !\"] = timerTypes[\"30-120\"],\n\t[\"La bataille commence dans 1 minute !\"] = timerTypes[\"60-120\"],\n\t[\"La bataille commence dans 2 minutes !\"] = timerTypes[\"120-120\"],\n\t-- Arena\n\t[\"Le combat commence dans quinze secondes !\"] = timerTypes[\"15-60\"],\n\t[\"Le combat d’arène commence dans trente secondes !\"] = timerTypes[\"30-60\"],\n\t[\"Le combat d’arène commence dans une minute !\"] = timerTypes[\"60-60\"],\n\n\t-- koKR\n\t-- WSG\n\t[\"30초 후 전쟁노래 협곡 전투가 시작됩니다. 준비하십시오!\"] = timerTypes[\"30-120\"],\n\t[\"1분 후 전쟁노래 협곡 전투가 시작됩니다!\"] = timerTypes[\"60-120\"],\n\t-- AV\n\t[\"알터랙 계곡 전투 개시 30초 전...\"] = timerTypes[\"30-120\"],\n\t[\"알터랙 계곡 전투 개시 1분 전...\"] = timerTypes[\"60-120\"],\n\t-- SotA 2 round\n\t[\"30초 후 두 번째 전투가 시작됩니다. 준비하세요!\"] = timerTypes[\"30-60\"],\n\t[\"1분 후 고대의 해안 두 번째 전투가 시작됩니다.\"] = timerTypes[\"60-60\"],\n\t-- Other\n\t[\"30초 후 전투가 시작됩니다!\"] = timerTypes[\"30-120\"],\n\t[\"1분 후 전투가 시작됩니다!\"] = timerTypes[\"60-120\"],\n\t[\"2분 후 전투가 시작됩니다!\"] = timerTypes[\"120-120\"],\n\t-- Arena\n\t[\"투기장 전투 시작 15초 전입니다!\"] = timerTypes[\"15-60\"],\n\t[\"투기장 전투 시작 30초 전입니다!\"] = timerTypes[\"30-60\"],\n\t[\"투기장 전투 시작 1분 전입니다!\"] = timerTypes[\"60-60\"],\n\n\t-- ruRU\n\t-- Ущелье Песни Войны\n\t[\"Битва за Ущелье Песни Войны начнется через 30 секунд. Приготовьтесь!\"] = timerTypes[\"30-120\"],\n\t[\"Битва за Ущелье Песни Войны начнется через 30 секунд. Приготовиться!\"] = timerTypes[\"30-120\"],\n\t[\"Битва за Ущелье Песни Войны начнется через 1 минуту.\"] = timerTypes[\"60-120\"],\n\t[\"Сражение в Ущелье Песни Войны начнется через 2 минуты.\"] = timerTypes[\"120-120\"],\n\t-- Низина Арати\n\t[\"Битва за Низину Арати начнется через 30 секунд. Приготовьтесь!\"] = timerTypes[\"30-120\"],\n\t[\"Битва за Низину Арати начнется через 30 секунд.\"] = timerTypes[\"30-120\"],\n\t[\"Битва за Низину Арати начнется через 1 минуту.\"] = timerTypes[\"60-120\"],\n\t[\"Битва за Низину Арати начнется через минуту.\"] = timerTypes[\"60-120\"],\n\t[\"Сражение в Низине Арати начнется через 2 минуты.\"] = timerTypes[\"120-120\"],\n\t-- Око Бури\n\t[\"Битва за Око Бури начнется через 30 секунд.\"] = timerTypes[\"30-120\"],\n\t[\"Битва за Око Бури начнется через 1 минуту.\"] = timerTypes[\"60-120\"],\n\t[\"Сражение в Око Бури начнется через 2 минуты.\"] = timerTypes[\"120-120\"],\n\t-- Альтеракская долина\n\t[\"Сражение на Альтеракской долине начнется через 30 секунд. Приготовьтесь!\"] = timerTypes[\"30-120\"],\n\t[\"30 секунд до начала битвы в Альтеракской долине.\"] = timerTypes[\"30-120\"],\n\t[\"Сражение на Альтеракской долине начнется через 1 минуту.\"] = timerTypes[\"60-120\"],\n\t[\"До начала сражения за Альтеракскую долину остается 1 минута.\"] = timerTypes[\"60-120\"],\n\t[\"Сражение на Альтеракской долине начнется через 2 минуты.\"] = timerTypes[\"120-120\"],\n\t-- Берег Древних\n\t[\"Битва за Берег Древних начнется через 30 секунд. Приготовьтесь!\"] = timerTypes[\"30-120\"],\n\t[\"Сражение за Берег Древних начнется через 30 секунд. Готовьтесь!\"] = timerTypes[\"30-120\"],\n\t[\"Битва за Берег Древних начнется через 1 минуту.\"] = timerTypes[\"60-120\"],\n\t[\"Сражение за Берег Древних начнется через 1 минуту.\"] = timerTypes[\"60-120\"],\n\t[\"Битва за Берег Древних начнется через 2 минуты.\"] = timerTypes[\"120-120\"],\n\t-- Берег древних 2-й раунд\n\t[\"Второй раунд начнется через 30 секунд. Приготовьтесь!\"] = timerTypes[\"30-60\"],\n\t[\"Второй раунд начинается через 30 секунд. Приготовьтесь!\"] = timerTypes[\"30-60\"],\n\t[\"Второй раунд битвы за Берег Древних начнется через 1 минуту.\"] = timerTypes[\"60-60\"],\n\t[\"Второй раунд сражения за Берег Древних начнется через 1 минуту.\"] = timerTypes[\"60-60\"],\n\t-- Другие\n\t[\"Битва начнется через 30 секунд!\"] = timerTypes[\"30-120\"],\n\t[\"Битва начнется через 30 секунд.\"] = timerTypes[\"30-120\"],\n\t[\"Битва начнется через 1 минуту.\"] = timerTypes[\"60-120\"],\n\t[\"Битва начнется через минуту!\"] = timerTypes[\"60-120\"],\n\t[\"Битва начнется через 60 секунд.\"] = timerTypes[\"60-120\"],\n\t[\"Битва начнется через 2 минуты!\"] = timerTypes[\"120-120\"],\n\t-- Арена\n\t[\"15 секунд до начала боя на арене!\"] = timerTypes[\"15-60\"],\n\t[\"Пятнадцать секунд до начала боя на арене!\"] = timerTypes[\"15-60\"],\n\t[\"30 секунд до начала боя на арене!\"] = timerTypes[\"30-60\"],\n\t[\"Тридцать секунд до начала боя на арене !\"] = timerTypes[\"30-60\"],\n\t[\"1 минута до начала боя на арене!\"] = timerTypes[\"60-60\"],\n\t[\"Одна минута до начала боя на арене!\"] = timerTypes[\"60-60\"],\n\n\t-- zhCN\n\t-- WSG\n\t[\"战歌峡谷战斗将在30秒钟内开始。做好准备！\"] = timerTypes[\"30-120\"],\n\t[\"战歌峡谷战斗将在1分钟内开始。\"] = timerTypes[\"60-120\"],\n\t-- AV\n\t[\"奥特兰克山谷的战斗将在30秒之后开始。\"] = timerTypes[\"30-120\"],\n\t[\"奥特兰克山谷的战斗将在1分钟之后开始。\"] = timerTypes[\"60-120\"],\n\t-- SotA 2 round\n\t[\"第2轮比赛将在30秒后开始。备战！\"] = timerTypes[\"30-60\"],\n\t[\"远古海滩的第2轮比赛将在1分钟后开始。\"] = timerTypes[\"60-60\"],\n\t-- Other\n\t[\"战斗将在30秒后开始！\"] = timerTypes[\"30-120\"],\n\t[\"战斗将在1分钟后开始！\"] = timerTypes[\"60-120\"],\n\t[\"战斗将在2分钟后开始！\"] = timerTypes[\"120-120\"],\n\t-- Arena\n\t[\"竞技场战斗将在十五秒后开始！\"] = timerTypes[\"15-60\"],\n\t[\"竞技场战斗将在三十秒后开始！\"] = timerTypes[\"30-60\"],\n\t[\"竞技场战斗将在一分钟后开始！\"] = timerTypes[\"60-60\"],\n\n\t-- zhTW\n\t-- WSG\n\t[\"戰歌峽谷戰鬥將在30秒鐘內開始。做好準備!\"] = timerTypes[\"30-120\"],\n\t[\"戰歌峽谷戰鬥將在1分鐘內開始。\"] = timerTypes[\"60-120\"],\n\t-- AV\n\t[\"奧特蘭克山谷30秒後開始戰鬥。\"] = timerTypes[\"30-120\"],\n\t[\"奧特蘭克山谷一分鐘後開始戰鬥。\"] = timerTypes[\"60-120\"],\n\t-- SotA 2 round\n\t[\"第2回合將在30秒後開始。做好準備!\"] = timerTypes[\"30-60\"],\n\t[\"遠祖灘頭的第2回合戰鬥將在1分鐘後開始。\"] = timerTypes[\"60-60\"],\n\t-- Other\n\t[\"戰鬥在30秒內開始!\"] = timerTypes[\"30-120\"],\n\t[\"戰鬥在1分鐘內開始!\"] = timerTypes[\"60-120\"],\n\t[\"戰鬥在2分鐘內開始!\"] = timerTypes[\"120-120\"],\n\t-- Arena\n\t[\"15秒後競技場戰鬥開始!\"] = timerTypes[\"15-60\"],\n\t[\"30秒後競技場戰鬥開始!\"] = timerTypes[\"30-60\"],\n\t[\"1分鐘後競技場戰鬥開始!\"] = timerTypes[\"60-60\"]\n}\n\nlocal TIMER_MINUTES_DISPLAY = \"%d:%02d\"\nlocal TIMER_TYPE_PVP = 1\nlocal TIMER_TYPE_CHALLENGE_MODE = 2\nlocal TIMER_TYPE_PLAYER_COUNTDOWN = 3\n\n-- SOUND KITS\nlocal SOUNDKIT = {\n\tUI_COUNTDOWN_BAR_STATE_STARTS = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\Timer\\\\TempMono.ogg\", -- 158958\n\tUI_COUNTDOWN_BAR_STATE_FINISHED = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\Timer\\\\TempMono.ogg\", -- 158959\n\tUI_COUNTDOWN_MEDIUM_NUMBER_FINISHED = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\Timer\\\\TempMono.ogg\", -- 158960\n\tUI_COUNTDOWN_TIMER = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\Timer\\\\UI_BattlegroundCountdown_Timer.ogg\", -- 158565\n\tUI_COUNTDOWN_FINISHED = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\Timer\\\\UI_BattlegroundCountdown_End.ogg\", -- 158566\n\tUI_BATTLEGROUND_COUNTDOWN_TIMER = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\Timer\\\\UI_BattlegroundCountdown_Timer.ogg\", -- 25477\n\tUI_BATTLEGROUND_COUNTDOWN_FINISHED = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\Timer\\\\UI_BattlegroundCountdown_End.ogg\", -- 25478\n}\n\nlocal TIMER_DATA = {\n\t[1] = {mediumMarker = 11, largeMarker = 6, updateInterval = 10},\n\t[2] = {mediumMarker = 100, largeMarker = 100, updateInterval = 100},\n\t[3] = {mediumMarker = 31, largeMarker = 11, updateInterval = 10, finishedSoundKitID = SOUNDKIT.UI_COUNTDOWN_FINISHED, bigNumberSoundKitID = SOUNDKIT.UI_COUNTDOWN_TIMER, mediumNumberFinishedSoundKitID = SOUNDKIT.UI_COUNTDOWN_MEDIUM_NUMBER_FINISHED, barShowSoundKitID = SOUNDKIT.UI_COUNTDOWN_BAR_STATE_STARTS, barHideSoundKitID = SOUNDKIT.UI_COUNTDOWN_BAR_STATE_FINISHED}\n}\n\nlocal TIMER_NUMBERS_SETS = {}\nTIMER_NUMBERS_SETS[\"BigGold\"] = {\n\ttexture = \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\Timer\\\\BigTimerNumbers\",\n\tw = 256, h = 170, texW = 1024, texH = 512,\n\tnumberHalfWidths = {\n\t\t35/128, -- 0\n\t\t14/128, -- 1\n\t\t33/128, -- 2\n\t\t32/128, -- 3\n\t\t36/128, -- 4\n\t\t32/128, -- 5\n\t\t33/128, -- 6\n\t\t29/128, -- 7\n\t\t31/128, -- 8\n\t\t31/128, -- 9\n\t}\n}\nlocal scale = UIParent:GetEffectiveScale()\nlocal pixel, ratio = 1, 768 / GetScreenHeight()\nAddOn.mult = (pixel / scale) - ((pixel - ratio) / scale)\n\nfunction AddOn:Scale(x)\n\tlocal mult = AddOn.mult\n\treturn mult * floor(x / mult + 0.5)\nend\n\nlocal function Size(frame, width, height)\n\tassert(width)\n\tframe:SetSize(AddOn:Scale(width), AddOn:Scale(height or width))\nend\n\nlocal function Width(frame, width)\n\tassert(width)\n\tframe:SetWidth(AddOn:Scale(width))\nend\n\nlocal function Height(frame, height)\n\tassert(height)\n\tframe:SetHeight(AddOn:Scale(height))\nend\n\nlocal function Point(obj, arg1, arg2, arg3, arg4, arg5)\n\tif arg2 == nil then arg2 = obj:GetParent() end\n\n\tif type(arg2) == \"number\" then arg2 = AddOn:Scale(arg2) end\n\tif type(arg3) == \"number\" then arg3 = AddOn:Scale(arg3) end\n\tif type(arg4) == \"number\" then arg4 = AddOn:Scale(arg4) end\n\tif type(arg5) == \"number\" then arg5 = AddOn:Scale(arg5) end\n\n\tobj:SetPoint(arg1, arg2, arg3, arg4, arg5)\nend\n\nlocal function addapi(object)\n\tlocal mt = getmetatable(object).__index\n\tif not object.Size then mt.Size = Size end\n\tif not object.Point then mt.Point = Point end\n\tif not object.Width then mt.Width = Width end\n\tif not object.Height then mt.Height = Height end\nend\n\nlocal function CreateAlphaAnim(group, order, duration, change, delay, smoothing)\n\tlocal anim = group:CreateAnimation(\"Alpha\")\n\tanim:SetOrder(order)\n\tanim:SetDuration(duration)\n\tanim:SetChange(change)\n\n\tif delay then\n\t\tanim:SetStartDelay(delay)\n\tend\n\tif smoothing then\n\t\tanim:SetSmoothing(smoothing)\n\tend\nend\n\nlocal function CreateScaleAnim(group, order, duration, scale, delay, smoothing)\n\tlocal anim = group:CreateAnimation(\"Scale\")\n\tanim:SetOrder(order)\n\tanim:SetDuration(duration)\n\tanim:SetScale(scale, scale)\n\n\tif delay then\n\t\tanim:SetStartDelay(delay)\n\tend\n\tif smoothing then\n\t\tanim:SetSmoothing(smoothing)\n\tend\nend\n\nlocal function Timer_OnShow(self)\n\tself.time = self.endTime - GetTime()\n\n\tif self.time <= 0 then\n\t\tself:Hide()\n\t\tself.isFree = true\n\telseif self.StartNumbers:IsPlaying() then\n\t\tself.StartNumbers:Stop()\n\t\tself.StartNumbers:Play()\n\t\tself.StartGlowNumbers:Stop()\n\t\tself.StartGlowNumbers:Play()\n\tend\nend\n\nlocal function StartNumbers_OnPlay(self)\n\tlocal timer = self:GetParent():GetParent()\n\tTT:SetTexNumbers(timer, timer.Digit1, timer.Digit2)\nend\n\nlocal function StartNumbers_OnFinished(self)\n\tlocal timer = self:GetParent():GetParent()\n\ttimer.time = timer.time - 1\n\n\tif timer.time > 0 then\n\t\tif timer.time < TIMER_DATA[timer.type].largeMarker and not self.anchorCenter then\n\t\t\tTT:SwitchToLargeDisplay(timer)\n\t\tend\n\n\t\ttimer.StartNumbers:Play()\n\t\ttimer.StartGlowNumbers:Play()\n\telse\n\t\tif DBM.Options.PlayTTCountdownFinished then\n\t\t\tif TIMER_DATA[timer.type].finishedSoundKitID then\n\t\t\t\tPlaySoundFile(TIMER_DATA[timer.type].finishedSoundKitID)\n\t\t\telse\n\t\t\t\tPlaySoundFile(SOUNDKIT.UI_BATTLEGROUND_COUNTDOWN_FINISHED)\n\t\t\tend\n\t\tend\n\t\ttimer.anchorCenter = false\n\t\ttimer.isFree = true\n\t\ttimer.GoTextureAnim:Play()\n\t\ttimer.GoTextureGlowAnim:Play()\n\tend\nend\n\nlocal function FadeBarIn_OnPlay(self)\n\tlocal timer = self:GetParent():GetParent()\n\ttimer.StatusBar:Show()\nend\n\nlocal function FadeBarOut_OnFinished(self)\n\tlocal timer = self:GetParent():GetParent()\n\ttimer.time = timer.time - 0.9\n\ttimer.StatusBar:Hide()\n\ttimer.StartNumbers:Play()\n\ttimer.StartGlowNumbers:Play()\nend\n\nfunction TT:ColorGradient(perc, ...)\n\tif perc >= 1 then\n\t\treturn select(select(\"#\", ...) - 2, ...)\n\telseif perc <= 0 then\n\t\treturn ...\n\tend\n\n\tlocal num = select(\"#\", ...) / 3\n\tlocal segment, relperc = modf(perc*(num - 1))\n\tlocal r1, g1, b1, r2, g2, b2 = select((segment*3) + 1, ...)\n\n\treturn r1 + (r2 - r1)*relperc, g1 + (g2 - g1)*relperc, b1 + (b2 - b1)*relperc\nend\n\nfunction TT:CreateTimerBar()\n\tlocal timer = CreateFrame(\"Frame\", \"DBM_GoldTimer\"..(#self.timerList + 1), UIParent)\n\ttimer:Size(206, 26)\n\n\ttimer.GoFrame = CreateFrame(\"Frame\", \"$parentGoFrame\", timer)\n\ttimer.GoFrame:SetFrameLevel(1)\n\ttimer.GoFrame:SetAlpha(0)\n\ttimer.GoFrame:SetSize(256, 256)\n\ttimer.GoFrame:SetPoint(\"CENTER\", UIParent)\n\ttimer.GoTextureAnim = timer.GoFrame:CreateAnimationGroup()\n\tCreateScaleAnim(timer.GoTextureAnim, 1, 0, 0.25)\n\tCreateAlphaAnim(timer.GoTextureAnim, 1, 0, 1)\n\tCreateScaleAnim(timer.GoTextureAnim, 2, 0.4, 4, nil, \"OUT\")\n\tCreateScaleAnim(timer.GoTextureAnim, 3, 0.2, 1.4, 0.6, \"OUT\")\n\tCreateAlphaAnim(timer.GoTextureAnim, 3, 0.2, -1, 0.6, \"OUT\")\n\n\ttimer.GoTexture = timer.GoFrame:CreateTexture()\n\ttimer.GoTexture:SetAllPoints()\n\n\ttimer.GoGlowFrame = CreateFrame(\"Frame\", \"$parentGoGlowFrame\", timer)\n\ttimer.GoGlowFrame:SetFrameLevel(2)\n\ttimer.GoGlowFrame:SetAlpha(0)\n\ttimer.GoGlowFrame:SetAllPoints(timer.GoFrame)\n\ttimer.GoTextureGlowAnim = timer.GoGlowFrame:CreateAnimationGroup()\n\tCreateScaleAnim(timer.GoTextureGlowAnim, 1, 0, 0.25)\n\tCreateAlphaAnim(timer.GoTextureGlowAnim, 1, 0, 1)\n\tCreateScaleAnim(timer.GoTextureGlowAnim, 2, 0.4, 4, nil, \"OUT\")\n\tCreateAlphaAnim(timer.GoTextureGlowAnim, 2, 0.4, -1, nil, \"IN\")\n\n\ttimer.GoTextureGlow = timer.GoGlowFrame:CreateTexture()\n\ttimer.GoTextureGlow:SetAllPoints()\n\n\ttimer.DigitFrame = CreateFrame(\"Frame\", \"$parentDigitFrame\", timer)\n\ttimer.DigitFrame:SetFrameLevel(1)\n\ttimer.DigitFrame:SetAlpha(0)\n\ttimer.StartNumbers = timer.DigitFrame:CreateAnimationGroup()\n\tCreateScaleAnim(timer.StartNumbers, 1, 0, 0.25)\n\tCreateAlphaAnim(timer.StartNumbers, 1, 0, -1)\n\tCreateAlphaAnim(timer.StartNumbers, 2, 0, 1)\n\tCreateScaleAnim(timer.StartNumbers, 3, 0.3, 4, nil, \"OUT\")\n\tCreateScaleAnim(timer.StartNumbers, 4, 0.1, 1.2, 0.6)\n\tCreateAlphaAnim(timer.StartNumbers, 4, 0.1, -1, 0.6)\n\ttimer.StartNumbers:SetScript(\"OnPlay\", StartNumbers_OnPlay)\n\ttimer.StartNumbers:SetScript(\"OnFinished\", StartNumbers_OnFinished)\n\n\ttimer.Digit1 = timer.DigitFrame:CreateTexture()\n\ttimer.Digit2 = timer.DigitFrame:CreateTexture()\n\n\ttimer.DigitGlowFrame = CreateFrame(\"Frame\", \"$parentDigitGlowFrame\", timer)\n\ttimer.DigitGlowFrame:SetFrameLevel(2)\n\ttimer.DigitGlowFrame:SetAlpha(0)\n\ttimer.StartGlowNumbers = timer.DigitGlowFrame:CreateAnimationGroup()\n\tCreateScaleAnim(timer.StartGlowNumbers, 1, 0, 0.25)\n\tCreateAlphaAnim(timer.StartGlowNumbers, 1, 0, 1)\n\tCreateScaleAnim(timer.StartGlowNumbers, 2, 0.3, 4, nil, \"OUT\")\n\tCreateAlphaAnim(timer.StartGlowNumbers, 2, 0.3, -1, nil, \"IN\")\n\n\ttimer.Digit1.Glow = timer.DigitGlowFrame:CreateTexture()\n\ttimer.Digit1.Glow:SetAllPoints(timer.Digit1)\n\ttimer.Digit2.Glow = timer.DigitGlowFrame:CreateTexture()\n\ttimer.Digit2.Glow:SetAllPoints(timer.Digit2)\n\n\ttimer.StatusBar = CreateFrame(\"StatusBar\", \"$parentStatusBar\", timer)\n\ttimer.StatusBar:Hide()\n\ttimer.StatusBar:Size(195, 13)\n\ttimer.StatusBar:Point(\"TOP\", 0, -2)\n\ttimer.StatusBar:SetStatusBarTexture(media.glossTex)\n\n\ttimer.StatusBar.Background = timer.StatusBar:CreateTexture(\"$parentBackground\", \"BORDER\")\n\ttimer.StatusBar.Background:SetAllPoints()\n\ttimer.StatusBar.Background:SetTexture(media.blankTex)\n\n\ttimer.StatusBar.Text = timer.StatusBar:CreateFontString(\"$parentTimeText\", \"OVERLAY\", \"GameFontHighlight\")\n\ttimer.StatusBar.Text:SetPoint(\"CENTER\", 0, 0)\n\n\ttimer.FadeBarIn = timer.StatusBar:CreateAnimationGroup()\n\tCreateAlphaAnim(timer.FadeBarIn, 1, 0, -1)\n\tCreateAlphaAnim(timer.FadeBarIn, 2, 1.9, 1)\n\ttimer.FadeBarIn:SetScript(\"OnPlay\", FadeBarIn_OnPlay)\n\n\ttimer.FadeBarOut = timer.StatusBar:CreateAnimationGroup()\n\tCreateAlphaAnim(timer.FadeBarOut, 1, 0.9, -1)\n\ttimer.FadeBarOut:SetScript(\"OnFinished\", FadeBarOut_OnFinished)\n\n\ttimer:SetScript(\"OnShow\", Timer_OnShow)\n\n\treturn timer\nend\n\nfunction TT:CreateTimer(timerType, timeSeconds, totalTime)\n\tif not timerType then return end\n\n\tlocal timer\n\tlocal isTimerRunning = false\n\n\tfor _, frame in ipairs(self.timerList) do\n\t\tif frame.type == timerType and not frame.isFree then\n\t\t\ttimer = frame\n\t\t\tisTimerRunning = true\n\t\t\tbreak\n\t\tend\n\tend\n\n\tif isTimerRunning and timer.type ~= TIMER_TYPE_PLAYER_COUNTDOWN then\n\t\tif not timer.StartNumbers:IsPlaying() then\n\t\t\ttimer.time = timeSeconds\n\t\t\ttimer.endTime = GetTime() + timeSeconds\n\t\tend\n\telse\n\t\tfor _, frame in ipairs(self.timerList) do\n\t\t\tif frame.isFree then\n\t\t\t\ttimer = frame\n\t\t\t\tbreak\n\t\t\tend\n\t\tend\n\n\t\tif timer and timer.type == TIMER_TYPE_PLAYER_COUNTDOWN then\n\t\t\tself:FreeTimerTrackerTimer(timer)\n\t\tend\n\n\t\tif not timer then\n\t\t\ttimer = self:CreateTimerBar()\n\t\t\tself.timerList[#self.timerList + 1] = timer\n\t\tend\n\n\t\ttimer:ClearAllPoints()\n\t\ttimer:Point(\"TOP\", 0, -100 - (24 * #self.timerList))\n\n\t\ttimer.isFree = false\n\t\ttimer.type = timerType\n\t\ttimer.time = timeSeconds\n\t\ttimer.endTime = GetTime() + timeSeconds\n\t\ttimer.totalTime = totalTime\n\t\ttimer.StatusBar:SetMinMaxValues(0, totalTime)\n\t\ttimer.style = TIMER_NUMBERS_SETS[\"BigGold\"]\n\n\t\ttimer.Digit1:Size(timer.style.w / 2, timer.style.h / 2)\n\t\ttimer.Digit2:Size(timer.style.w / 2, timer.style.h / 2)\n\t\ttimer.Digit1.width = timer.style.w / 2\n\t\ttimer.Digit2.width = timer.style.w / 2\n\t\ttimer.Digit1:SetTexture(timer.style.texture)\n\t\ttimer.Digit2:SetTexture(timer.style.texture)\n\t\ttimer.Digit1.Glow:SetTexture(timer.style.texture..\"Glow\")\n\t\ttimer.Digit2.Glow:SetTexture(timer.style.texture..\"Glow\")\n\n\t\ttimer.updateTime = TIMER_DATA[timer.type].updateInterval\n\t\ttimer:SetScript(\"OnUpdate\", self.BigNumberOnUpdate)\n\t\ttimer:Show()\n\tend\n\n\tself:SetGoTexture(timer)\nend\n\nfunction TT:BigNumberOnUpdate(elapsed)\n\tself.time = self.endTime - GetTime()\n\tself.updateTime = self.updateTime - elapsed\n\n\tif self.time < TIMER_DATA[self.type].mediumMarker then\n\t\tif (self.time < TIMER_DATA[self.type].largeMarker) and not self.anchorCenter then\n\t\t\tTT:SwitchToLargeDisplay(self)\n\t\telseif self.anchorCenter then\n\t\t\tself.anchorCenter = false\n\t\tend\n\n\t\tself:SetScript(\"OnUpdate\", nil)\n\n\t\tif self.barShowing then\n\t\t\tself.barShowing = false\n\t\t\tself.FadeBarOut:Play()\n\t\t\tif TIMER_DATA[self.type].barHideSoundKitID then\n\t\t\t\tPlaySoundFile(TIMER_DATA[self.type].barHideSoundKitID)\n\t\t\tend\n\t\telse\n\t\t\tself.StartNumbers:Play()\n\t\t\tself.StartGlowNumbers:Play()\n\t\tend\n\telseif not self.barShowing then\n\t\tself.FadeBarIn:Play()\n\t\tself.barShowing = true\n\t\tif TIMER_DATA[self.type].barShowSoundKitID then\n\t\t\tPlaySoundFile(TIMER_DATA[self.type].barShowSoundKitID)\n\t\tend\n\telseif self.updateTime <= 0 then\n\t\tself.updateTime = TIMER_DATA[self.type].updateInterval\n\tend\n\n\tself.StatusBar:SetValue(self.time)\n\tlocal minutes, seconds = floor(self.time / 60), floor(fmod(self.time, 60))\n\tself.StatusBar.Text:SetFormattedText(TIMER_MINUTES_DISPLAY, minutes, seconds)\n\n\tlocal r, g, b = TT:ColorGradient((self.time - 10) / self.totalTime, 1,0,0, 1,1,0, 0,1,0)\n\tself.StatusBar:SetStatusBarColor(r, g, b)\n\tself.StatusBar.Background:SetVertexColor(r * 0.25, g * 0.25, b * 0.25)\nend\n\nfunction TT:SetTexNumbers(timer, ...)\n\tlocal digits = {...}\n\tlocal timeDigits = floor(timer.time)\n\tlocal style = timer.style\n\n\tlocal texCoW = style.w / style.texW\n\tlocal texCoH = style.h / style.texH\n\tlocal columns = floor(style.texW / style.w)\n\n\tlocal digit, l, r, t, b\n\tlocal numberOffset, numShown = 0, 0\n\tlocal i = 1\n\n\twhile digits[i] do\n\t\tif timeDigits > 0 then\n\t\t\tdigit = fmod(timeDigits, 10)\n\n\t\t\tdigits[i].hw = style.numberHalfWidths[digit + 1] * digits[i].width\n\t\t\tnumberOffset = numberOffset + digits[i].hw\n\n\t\t\tl = fmod(digit, columns) * texCoW\n\t\t\tr = l + texCoW\n\t\t\tt = floor(digit / columns) * texCoH\n\t\t\tb = t + texCoH\n\n\t\t\tdigits[i]:SetTexCoord(l, r, t, b)\n\t\t\tdigits[i].Glow:SetTexCoord(l, r, t, b)\n\n\t\t\ttimeDigits = floor(timeDigits / 10)\n\t\t\tnumShown = numShown + 1\n\t\telse\n\t\t\tdigits[i]:SetTexCoord(0, 0, 0, 0)\n\t\t\tdigits[i].Glow:SetTexCoord(0, 0, 0, 0)\n\t\tend\n\n\t\ti = i + 1\n\tend\n\n\tif numberOffset > 0 then\n\t\tif DBM.Options.PlayTTCountdown then\n\t\t\tif TIMER_DATA[timer.type].bigNumberSoundKitID and numShown < TIMER_DATA[timer.type].largeMarker then\n\t\t\t\tPlaySoundFile(TIMER_DATA[timer.type].bigNumberSoundKitID)\n\t\t\telse\n\t\t\t\tPlaySoundFile(SOUNDKIT.UI_BATTLEGROUND_COUNTDOWN_TIMER)\n\t\t\tend\n\t\tend\n\t\tdigits[1]:ClearAllPoints()\n\n\t\tif timer.anchorCenter then\n\t\t\tdigits[1]:Point(\"CENTER\", UIParent, \"CENTER\", numberOffset - digits[1].hw, 0)\n\t\telse\n\t\t\tdigits[1]:Point(\"CENTER\", timer, \"CENTER\", numberOffset - digits[1].hw, 0)\n\t\tend\n\n\t\tfor j = 2, numShown do\n\t\t\tdigits[j]:ClearAllPoints()\n\t\t\tdigits[j]:Point(\"CENTER\", digits[j - 1], \"CENTER\", -(digits[j].hw + digits[j - 1].hw), 0)\n\t\tend\n\tend\nend\n\nfunction TT:SetGoTexture(timer)\n\tif timer.type == TIMER_TYPE_PVP then\n\t\tlocal factionGroup = GetBattlefieldFaction(\"player\")\n\n\t\tif factionGroup and factionGroup ~= \"Neutral\" then\n\t\t\ttimer.GoTexture:SetTexture(\"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\Timer\\\\\"..factionGroup..\"-Logo\")\n\t\t\ttimer.GoTextureGlow:SetTexture(\"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\Timer\\\\\"..factionGroup..\"Glow-Logo\")\n\t\tend\n\telseif timer.type == TIMER_TYPE_CHALLENGE_MODE then\n\t\ttimer.GoTexture:SetTexture(\"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\Timer\\\\Challenges-Logo\")\n\t\ttimer.GoTextureGlow:SetTexture(\"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\Timer\\\\ChallengesGlow-Logo\")\n\telseif timer.type == TIMER_TYPE_PLAYER_COUNTDOWN then\n\t\ttimer.GoTexture:SetTexture(\"\")\n\t\ttimer.GoTextureGlow:SetTexture(\"\")\n\tend\nend\n\nfunction TT:SwitchToLargeDisplay(timer)\n\ttimer.Digit1:Size(timer.style.w, timer.style.h)\n\ttimer.Digit2:Size(timer.style.w, timer.style.h)\n\ttimer.Digit1.width = timer.style.w\n\ttimer.Digit2.width = timer.style.w\n\ttimer.anchorCenter = true\n\tif TIMER_DATA[timer.type].mediumNumberFinishedSoundKitID then\n\t\tPlaySoundFile(TIMER_DATA[timer.type].mediumNumberFinishedSoundKitID)\n\tend\nend\n\nfunction TT:ReleaseTimers()\n\tfor _, timer in ipairs(self.timerList) do\n\t\ttimer.barShowing = false\n\t\ttimer.isFree = true\n\tend\nend\n\nfunction TT:FreeTimerTrackerTimer(timer)\n\ttimer.time = nil\n\ttimer.type = nil\n\ttimer.isFree = true\n\ttimer.barShowing = false\n\ttimer:SetScript(\"OnUpdate\", nil)\n\ttimer.FadeBarOut:Stop()\n\ttimer.FadeBarIn:Stop()\n\ttimer.StartNumbers:Stop()\n\ttimer.GoTextureAnim:Stop()\n\ttimer.StatusBar:Hide()\nend\n\nfunction TT:OnEvent(event, ...)\n\tif not DBM.Options.PlayTT then return end\n\tif event == \"START_TIMER\" then\n\t\tlocal timerType, timeSeconds, totalTime  = ...\n\t\tself:CreateTimer(timerType, timeSeconds + 0.1, totalTime + 0.1)\n\telseif event == \"CHAT_MSG_BG_SYSTEM_NEUTRAL\" then\n\t\tlocal msg = ...\n\t\tif msg and chatMessage[msg] then\n\t\t\tself:CreateTimer(unpack(chatMessage[msg]))\n\t\tend\n\telseif event == \"PLAYER_ENTERING_WORLD\" then\n\t\tfor _, timer in pairs(self.timerList) do\n\t\t\tif timer.type == TIMER_TYPE_PVP then\n\t\t\t\tself:FreeTimerTrackerTimer(timer)\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction TT:ToggleState(force)\n\tif DBM or force then\n\t\tself.timerList = self.timerList or {}\n\n\t\t--self:RegisterEvent(\"CHAT_MSG_BG_SYSTEM_NEUTRAL\", \"OnEvent\")\n\t\tself:RegisterEvent(\"PLAYER_ENTERING_WORLD\", \"OnEvent\")\n\n\telse\n\t\t--self:UnregisterEvent(\"CHAT_MSG_BG_SYSTEM_NEUTRAL\")\n\t\tself:UnregisterEvent(\"PLAYER_ENTERING_WORLD\")\n\n\t\tself:ReleaseTimers()\n\tend\nend\n\nfunction TT:Initialize()\n\tif not DBM then return end\n\n\tself:ToggleState()\nend\n\nlocal function InitializeCallback()\n\tTT:Initialize()\nend\n\nfunction AddOn:CallLoadedModule(obj, silent, object, index)\n\tlocal name, func\n\tif type(obj) == \"table\" then name, func = unpack(obj) else name = obj end\n\tlocal module = name and self:GetModule(name, silent)\n\n\tif not module then return end\n\tif func and type(func) == \"string\" then\n\t\tAddOn:RegisterCallback(name, module[func], module)\n\telseif func and type(func) == \"function\" then\n\t\tAddOn:RegisterCallback(name, func, module)\n\telseif module.Initialize then\n\t\tAddOn:RegisterCallback(name, module.Initialize, module)\n\tend\n\n\tAddOn.callbacks:Fire(name)\n\n\tif object and index then object[index] = nil end\nend\n\nfunction AddOn:RegisterInitialModule(name, func)\n\tself.RegisteredInitialModules[#self.RegisteredInitialModules + 1] = (func and {name, func}) or name\nend\n\nfunction AddOn:RegisterModule(name, func)\n\tif self.initialized then\n\t\tAddOn:CallLoadedModule((func and {name, func}) or name)\n\telse\n\t\tself.RegisteredModules[#self.RegisteredModules + 1] = (func and {name, func}) or name\n\tend\nend\n\nfunction AddOn:InitializeInitialModules()\n\tfor index, object in ipairs(AddOn.RegisteredInitialModules) do\n\t\tAddOn:CallLoadedModule(object, true, AddOn.RegisteredInitialModules, index)\n\tend\nend\n\nfunction AddOn:InitializeModules()\n\tfor index, object in ipairs(AddOn.RegisteredModules) do\n\t\tAddOn:CallLoadedModule(object, true, AddOn.RegisteredModules, index)\n\tend\nend\n\nif not ElvUI then\n\tlocal handled = {[\"Frame\"] = true}\n\tlocal object = CreateFrame(\"Frame\")\n\taddapi(object)\n\taddapi(object:CreateTexture())\n\taddapi(object:CreateFontString())\n\tobject = EnumerateFrames()\n\twhile object do\n\t\tif not handled[object:GetObjectType()] then\n\t\t\taddapi(object)\n\t\t\thandled[object:GetObjectType()] = true\n\t\tend\n\n\t\tobject = EnumerateFrames(object)\n\tend\n\taddapi(GameFontNormal)\nend\nAddOn:RegisterModule(TT:GetName(), InitializeCallback)\n"
  },
  {
    "path": "DBM-Core/DBM-TimerTracker.xml",
    "content": "<Ui xmlns=\"http://www.blizzard.com/wow/ui/\">\n\t<Frame name=\"DBM_StartTimerBar\" virtual=\"true\" hidden=\"true\">\n\t\t<Size x=\"206\" y=\"26\"/>\n\t\t<Layers>\n\t\t\t<Layer level=\"OVERLAY\">\n\t\t\t\t<Texture name=\"$parentGoTexture\" parentKey=\"GoTexture\" alpha=\"0\">\n\t\t\t\t\t<Size x=\"256\" y=\"256\"/>\n\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t<Anchor point=\"CENTER\" relativeTo=\"UIParent\" x=\"0\" y=\"0\"/>\n\t\t\t\t\t</Anchors>\n\t\t\t\t\t<Animations>\n\t\t\t\t\t\t<AnimationGroup parentKey=\"GoTextureAnim\">\n\t\t\t\t\t\t\t<Scale scaleX=\"0.25\" scaleY=\"0.25\" duration=\"0.0\" order=\"1\"/>\n\t\t\t\t\t\t\t<Alpha change=\"1\" duration=\"0.0\" order=\"2\"/>\n\t\t\t\t\t\t\t<Scale scaleX=\"4\" scaleY=\"4\" duration=\"0.4\" smoothing=\"OUT\" order=\"3\"/>\n\t\t\t\t\t\t\t<Scale startDelay=\"0.6\" scaleX=\"1.4\" scaleY=\"1.4\" duration=\"0.2\" smoothing=\"OUT\" order=\"4\"/>\n\t\t\t\t\t\t\t<Alpha startDelay=\"0.6\" change=\"-1.0\" duration=\"0.2\" smoothing=\"OUT\" order=\"4\"/>\n\t\t\t\t\t\t</AnimationGroup>\n\t\t\t\t\t</Animations>\n\t\t\t\t</Texture>\n\t\t\t</Layer>\n\t\t\t<Layer level=\"OVERLAY\" textureSubLevel=\"2\">\n\t\t\t\t<Texture name=\"$parentGlow1\" parentKey=\"glow1\" alpha=\"0\">\n\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t<Anchor point=\"TOPLEFT\" relativeTo=\"$parentDigit1\" x=\"0\" y=\"0\"/>\n\t\t\t\t\t\t<Anchor point=\"BOTTOMRIGHT\" relativeTo=\"$parentDigit1\" x=\"0\" y=\"0\"/>\n\t\t\t\t\t</Anchors>\n\t\t\t\t</Texture>\n\t\t\t\t<Texture name=\"$parentGlow2\" parentKey=\"glow2\" alpha=\"0\">\n\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t<Anchor point=\"TOPLEFT\" relativeTo=\"$parentDigit2\" x=\"0\" y=\"0\"/>\n\t\t\t\t\t\t<Anchor point=\"BOTTOMRIGHT\" relativeTo=\"$parentDigit2\" x=\"0\" y=\"0\"/>\n\t\t\t\t\t</Anchors>\n\t\t\t\t</Texture>\n\t\t\t\t<Texture name=\"$parentGoTextureGlow\" parentKey=\"GoTextureGlow\" alpha=\"0\">\n\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t<Anchor point=\"TOPLEFT\" relativeTo=\"$parentGoTexture\" x=\"0\" y=\"0\"/>\n\t\t\t\t\t\t<Anchor point=\"BOTTOMRIGHT\" relativeTo=\"$parentGoTexture\" x=\"0\" y=\"0\"/>\n\t\t\t\t\t</Anchors>\n\t\t\t\t\t<Animations>\n\t\t\t\t\t\t<AnimationGroup parentKey=\"GoTextureAnim\">\n\t\t\t\t\t\t\t<Scale scaleX=\"0.25\" scaleY=\"0.25\" duration=\"0.0\" order=\"1\"/>\n\t\t\t\t\t\t\t<Alpha change=\"1\" duration=\"0.0\" order=\"2\"/>\n\t\t\t\t\t\t\t<Scale scaleX=\"4\" scaleY=\"4\" duration=\"0.4\" smoothing=\"OUT\" order=\"3\"/>\n\t\t\t\t\t\t\t<Alpha change=\"-1.0\" duration=\"0.4\" smoothing=\"IN\" order=\"3\"/>\n\t\t\t\t\t\t</AnimationGroup>\n\t\t\t\t\t</Animations>\n\t\t\t\t</Texture>\n\t\t\t</Layer>\n\t\t</Layers>\n\t\t<Frames>\n\t\t\t<Frame parentKey=\"digit\" alpha=\"0\">\n\t\t\t\t<Animations>\n\t\t\t\t\t<AnimationGroup parentKey=\"startNumbers\">\n\t\t\t\t\t\t<Scale scaleX=\"0.25\" scaleY=\"0.25\" duration=\"0.0\" order=\"1\"/>\n\t\t\t\t\t\t<Alpha change=\"1\" duration=\"0.0\" order=\"1\"/>\n\t\t\t\t\t\t<Scale scaleX=\"4\" scaleY=\"4\" duration=\"0.3\" smoothing=\"OUT\" order=\"2\"/>\n\t\t\t\t\t\t<Scale startDelay=\"0.6\" scaleX=\"1.2\" scaleY=\"1.2\" duration=\"0.1\" order=\"3\"/>\n\t\t\t\t\t\t<Alpha startDelay=\"0.6\" change=\"-1.0\" duration=\"0.1\" order=\"3\"/>\n\t\t\t\t\t\t<Scripts>\n\t\t\t\t\t\t\t<OnPlay>\n\t\t\t\t\t\t\t\tlocal frame = self:GetParent():GetParent()\n\t\t\t\t\t\t\t\tTT:SetTexNumbers(frame, frame.digit.digit1, frame.digit.digit2)\n\t\t\t\t\t\t\t</OnPlay>\n\t\t\t\t\t\t\t<OnFinished>\n\t\t\t\t\t\t\t\tlocal frame = self:GetParent():GetParent()\n\t\t\t\t\t\t\t\tTT:NumberAnimOnFinished(frame)\n\t\t\t\t\t\t\t</OnFinished>\n\t\t\t\t\t\t</Scripts>\n\t\t\t\t\t</AnimationGroup>\n\t\t\t\t</Animations>\n\t\t\t\t<Layers>\n\t\t\t\t\t<Layer level=\"OVERLAY\">\n\t\t\t\t\t\t<Texture parentKey=\"digit1\"/>\n\t\t\t\t\t\t<Texture parentKey=\"digit2\"/>\n\t\t\t\t\t</Layer>\n\t\t\t\t</Layers>\n\t\t\t</Frame>\n\t\t</Frames>\n\t\t<Scripts>\n\t\t\t<OnShow>\n\t\t\t\tTT:OnShow(self)\n\t\t\t</OnShow>\n\t\t</Scripts>\n\t</Frame>\n</Ui>\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceAddon-3.0/AceAddon-3.0.lua",
    "content": "--- **AceAddon-3.0** provides a template for creating addon objects.\n-- It'll provide you with a set of callback functions that allow you to simplify the loading\n-- process of your addon.\\\\\n-- Callbacks provided are:\\\\\n-- * **OnInitialize**, which is called directly after the addon is fully loaded.\n-- * **OnEnable** which gets called during the PLAYER_LOGIN event, when most of the data provided by the game is already present.\n-- * **OnDisable**, which is only called when your addon is manually being disabled.\n-- @usage\n-- -- A small (but complete) addon, that doesn't do anything,\n-- -- but shows usage of the callbacks.\n-- local MyAddon = LibStub(\"AceAddon-3.0\"):NewAddon(\"MyAddon\")\n--\n-- function MyAddon:OnInitialize()\n--   -- do init tasks here, like loading the Saved Variables,\n--   -- or setting up slash commands.\n-- end\n--\n-- function MyAddon:OnEnable()\n--   -- Do more initialization here, that really enables the use of your addon.\n--   -- Register Events, Hook functions, Create Frames, Get information from\n--   -- the game that wasn't available in OnInitialize\n-- end\n--\n-- function MyAddon:OnDisable()\n--   -- Unhook, Unregister Events, Hide frames that you created.\n--   -- You would probably only use an OnDisable if you want to\n--   -- build a \"standby\" mode, or be able to toggle modules on/off.\n-- end\n-- @class file\n-- @name AceAddon-3.0.lua\n-- @release $Id$\n\nlocal MAJOR, MINOR = \"AceAddon-3.0\", 12\nlocal AceAddon, oldminor = LibStub:NewLibrary(MAJOR, MINOR)\n\nif not AceAddon then return end -- No Upgrade needed.\n\nAceAddon.frame = AceAddon.frame or CreateFrame(\"Frame\", \"AceAddon30Frame\") -- Our very own frame\nAceAddon.addons = AceAddon.addons or {} -- addons in general\nAceAddon.statuses = AceAddon.statuses or {} -- statuses of addon.\nAceAddon.initializequeue = AceAddon.initializequeue or {} -- addons that are new and not initialized\nAceAddon.enablequeue = AceAddon.enablequeue or {} -- addons that are initialized and waiting to be enabled\nAceAddon.embeds = AceAddon.embeds or setmetatable({}, {__index = function(tbl, key) tbl[key] = {} return tbl[key] end }) -- contains a list of libraries embedded in an addon\n\n-- Lua APIs\nlocal tinsert, tconcat, tremove = table.insert, table.concat, table.remove\nlocal fmt, tostring = string.format, tostring\nlocal select, pairs, next, type, unpack = select, pairs, next, type, unpack\nlocal loadstring, assert, error = loadstring, assert, error\nlocal setmetatable, getmetatable, rawset, rawget = setmetatable, getmetatable, rawset, rawget\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: LibStub, IsLoggedIn, geterrorhandler\n\n--[[\n\t xpcall safecall implementation\n]]\nlocal xpcall = xpcall\n\nlocal function errorhandler(err)\n\treturn geterrorhandler()(err)\nend\n\nlocal function CreateDispatcher(argCount)\n\tlocal code = [[\n\t\tlocal xpcall, eh = ...\n\t\tlocal method, ARGS\n\t\tlocal function call() return method(ARGS) end\n\n\t\tlocal function dispatch(func, ...)\n\t\t\t method = func\n\t\t\t if not method then return end\n\t\t\t ARGS = ...\n\t\t\t return xpcall(call, eh)\n\t\tend\n\n\t\treturn dispatch\n\t]]\n\n\tlocal ARGS = {}\n\tfor i = 1, argCount do ARGS[i] = \"arg\"..i end\n\tcode = code:gsub(\"ARGS\", tconcat(ARGS, \", \"))\n\treturn assert(loadstring(code, \"safecall Dispatcher[\"..argCount..\"]\"))(xpcall, errorhandler)\nend\n\nlocal Dispatchers = setmetatable({}, {__index=function(self, argCount)\n\tlocal dispatcher = CreateDispatcher(argCount)\n\trawset(self, argCount, dispatcher)\n\treturn dispatcher\nend})\nDispatchers[0] = function(func)\n\treturn xpcall(func, errorhandler)\nend\n\nlocal function safecall(func, ...)\n\t-- we check to see if the func is passed is actually a function here and don't error when it isn't\n\t-- this safecall is used for optional functions like OnInitialize OnEnable etc. When they are not\n\t-- present execution should continue without hinderance\n\tif type(func) == \"function\" then\n\t\treturn Dispatchers[select('#', ...)](func, ...)\n\tend\nend\n\n-- local functions that will be implemented further down\nlocal Enable, Disable, EnableModule, DisableModule, Embed, NewModule, GetModule, GetName, SetDefaultModuleState, SetDefaultModuleLibraries, SetEnabledState, SetDefaultModulePrototype\n\n-- used in the addon metatable\nlocal function addontostring( self ) return self.name end\n\n-- Check if the addon is queued for initialization\nlocal function queuedForInitialization(addon)\n\tfor i = 1, #AceAddon.initializequeue do\n\t\tif AceAddon.initializequeue[i] == addon then\n\t\t\treturn true\n\t\tend\n\tend\n\treturn false\nend\n\n--- Create a new AceAddon-3.0 addon.\n-- Any libraries you specified will be embeded, and the addon will be scheduled for\n-- its OnInitialize and OnEnable callbacks.\n-- The final addon object, with all libraries embeded, will be returned.\n-- @paramsig [object ,]name[, lib, ...]\n-- @param object Table to use as a base for the addon (optional)\n-- @param name Name of the addon object to create\n-- @param lib List of libraries to embed into the addon\n-- @usage\n-- -- Create a simple addon object\n-- MyAddon = LibStub(\"AceAddon-3.0\"):NewAddon(\"MyAddon\", \"AceEvent-3.0\")\n--\n-- -- Create a Addon object based on the table of a frame\n-- local MyFrame = CreateFrame(\"Frame\")\n-- MyAddon = LibStub(\"AceAddon-3.0\"):NewAddon(MyFrame, \"MyAddon\", \"AceEvent-3.0\")\nfunction AceAddon:NewAddon(objectorname, ...)\n\tlocal object,name\n\tlocal i=1\n\tif type(objectorname)==\"table\" then\n\t\tobject=objectorname\n\t\tname=...\n\t\ti=2\n\telse\n\t\tname=objectorname\n\tend\n\tif type(name)~=\"string\" then\n\t\terror((\"Usage: NewAddon([object,] name, [lib, lib, lib, ...]): 'name' - string expected got '%s'.\"):format(type(name)), 2)\n\tend\n\tif self.addons[name] then\n\t\terror((\"Usage: NewAddon([object,] name, [lib, lib, lib, ...]): 'name' - Addon '%s' already exists.\"):format(name), 2)\n\tend\n\n\tobject = object or {}\n\tobject.name = name\n\n\tlocal addonmeta = {}\n\tlocal oldmeta = getmetatable(object)\n\tif oldmeta then\n\t\tfor k, v in pairs(oldmeta) do addonmeta[k] = v end\n\tend\n\taddonmeta.__tostring = addontostring\n\n\tsetmetatable( object, addonmeta )\n\tself.addons[name] = object\n\tobject.modules = {}\n\tobject.orderedModules = {}\n\tobject.defaultModuleLibraries = {}\n\tEmbed( object ) -- embed NewModule, GetModule methods\n\tself:EmbedLibraries(object, select(i,...))\n\n\t-- add to queue of addons to be initialized upon ADDON_LOADED\n\ttinsert(self.initializequeue, object)\n\treturn object\nend\n\n\n--- Get the addon object by its name from the internal AceAddon registry.\n-- Throws an error if the addon object cannot be found (except if silent is set).\n-- @param name unique name of the addon object\n-- @param silent if true, the addon is optional, silently return nil if its not found\n-- @usage\n-- -- Get the Addon\n-- MyAddon = LibStub(\"AceAddon-3.0\"):GetAddon(\"MyAddon\")\nfunction AceAddon:GetAddon(name, silent)\n\tif not silent and not self.addons[name] then\n\t\terror((\"Usage: GetAddon(name): 'name' - Cannot find an AceAddon '%s'.\"):format(tostring(name)), 2)\n\tend\n\treturn self.addons[name]\nend\n\n-- - Embed a list of libraries into the specified addon.\n-- This function will try to embed all of the listed libraries into the addon\n-- and error if a single one fails.\n--\n-- **Note:** This function is for internal use by :NewAddon/:NewModule\n-- @paramsig addon, [lib, ...]\n-- @param addon addon object to embed the libs in\n-- @param lib List of libraries to embed into the addon\nfunction AceAddon:EmbedLibraries(addon, ...)\n\tfor i=1,select(\"#\", ... ) do\n\t\tlocal libname = select(i, ...)\n\t\tself:EmbedLibrary(addon, libname, false, 4)\n\tend\nend\n\n-- - Embed a library into the addon object.\n-- This function will check if the specified library is registered with LibStub\n-- and if it has a :Embed function to call. It'll error if any of those conditions\n-- fails.\n--\n-- **Note:** This function is for internal use by :EmbedLibraries\n-- @paramsig addon, libname[, silent[, offset]]\n-- @param addon addon object to embed the library in\n-- @param libname name of the library to embed\n-- @param silent marks an embed to fail silently if the library doesn't exist (optional)\n-- @param offset will push the error messages back to said offset, defaults to 2 (optional)\nfunction AceAddon:EmbedLibrary(addon, libname, silent, offset)\n\tlocal lib = LibStub:GetLibrary(libname, true)\n\tif not lib and not silent then\n\t\terror((\"Usage: EmbedLibrary(addon, libname, silent, offset): 'libname' - Cannot find a library instance of %q.\"):format(tostring(libname)), offset or 2)\n\telseif lib and type(lib.Embed) == \"function\" then\n\t\tlib:Embed(addon)\n\t\ttinsert(self.embeds[addon], libname)\n\t\treturn true\n\telseif lib then\n\t\terror((\"Usage: EmbedLibrary(addon, libname, silent, offset): 'libname' - Library '%s' is not Embed capable\"):format(libname), offset or 2)\n\tend\nend\n\n--- Return the specified module from an addon object.\n-- Throws an error if the addon object cannot be found (except if silent is set)\n-- @name //addon//:GetModule\n-- @paramsig name[, silent]\n-- @param name unique name of the module\n-- @param silent if true, the module is optional, silently return nil if its not found (optional)\n-- @usage\n-- -- Get the Addon\n-- MyAddon = LibStub(\"AceAddon-3.0\"):GetAddon(\"MyAddon\")\n-- -- Get the Module\n-- MyModule = MyAddon:GetModule(\"MyModule\")\nfunction GetModule(self, name, silent)\n\tif not self.modules[name] and not silent then\n\t\terror((\"Usage: GetModule(name, silent): 'name' - Cannot find module '%s'.\"):format(tostring(name)), 2)\n\tend\n\treturn self.modules[name]\nend\n\nlocal function IsModuleTrue(self) return true end\n\n--- Create a new module for the addon.\n-- The new module can have its own embeded libraries and/or use a module prototype to be mixed into the module.\\\\\n-- A module has the same functionality as a real addon, it can have modules of its own, and has the same API as\n-- an addon object.\n-- @name //addon//:NewModule\n-- @paramsig name[, prototype|lib[, lib, ...]]\n-- @param name unique name of the module\n-- @param prototype object to derive this module from, methods and values from this table will be mixed into the module (optional)\n-- @param lib List of libraries to embed into the addon\n-- @usage\n-- -- Create a module with some embeded libraries\n-- MyModule = MyAddon:NewModule(\"MyModule\", \"AceEvent-3.0\", \"AceHook-3.0\")\n--\n-- -- Create a module with a prototype\n-- local prototype = { OnEnable = function(self) print(\"OnEnable called!\") end }\n-- MyModule = MyAddon:NewModule(\"MyModule\", prototype, \"AceEvent-3.0\", \"AceHook-3.0\")\nfunction NewModule(self, name, prototype, ...)\n\tif type(name) ~= \"string\" then error((\"Usage: NewModule(name, [prototype, [lib, lib, lib, ...]): 'name' - string expected got '%s'.\"):format(type(name)), 2) end\n\tif type(prototype) ~= \"string\" and type(prototype) ~= \"table\" and type(prototype) ~= \"nil\" then error((\"Usage: NewModule(name, [prototype, [lib, lib, lib, ...]): 'prototype' - table (prototype), string (lib) or nil expected got '%s'.\"):format(type(prototype)), 2) end\n\n\tif self.modules[name] then error((\"Usage: NewModule(name, [prototype, [lib, lib, lib, ...]): 'name' - Module '%s' already exists.\"):format(name), 2) end\n\n\t-- modules are basically addons. We treat them as such. They will be added to the initializequeue properly as well.\n\t-- NewModule can only be called after the parent addon is present thus the modules will be initialized after their parent is.\n\tlocal module = AceAddon:NewAddon(fmt(\"%s_%s\", self.name or tostring(self), name))\n\n\tmodule.IsModule = IsModuleTrue\n\tmodule:SetEnabledState(self.defaultModuleState)\n\tmodule.moduleName = name\n\n\tif type(prototype) == \"string\" then\n\t\tAceAddon:EmbedLibraries(module, prototype, ...)\n\telse\n\t\tAceAddon:EmbedLibraries(module, ...)\n\tend\n\tAceAddon:EmbedLibraries(module, unpack(self.defaultModuleLibraries))\n\n\tif not prototype or type(prototype) == \"string\" then\n\t\tprototype = self.defaultModulePrototype or nil\n\tend\n\n\tif type(prototype) == \"table\" then\n\t\tlocal mt = getmetatable(module)\n\t\tmt.__index = prototype\n\t\tsetmetatable(module, mt)  -- More of a Base class type feel.\n\tend\n\n\tsafecall(self.OnModuleCreated, self, module) -- Was in Ace2 and I think it could be a cool thing to have handy.\n\tself.modules[name] = module\n\ttinsert(self.orderedModules, module)\n\n\treturn module\nend\n\n--- Returns the real name of the addon or module, without any prefix.\n-- @name //addon//:GetName\n-- @paramsig\n-- @usage\n-- print(MyAddon:GetName())\n-- -- prints \"MyAddon\"\nfunction GetName(self)\n\treturn self.moduleName or self.name\nend\n\n--- Enables the Addon, if possible, return true or false depending on success.\n-- This internally calls AceAddon:EnableAddon(), thus dispatching a OnEnable callback\n-- and enabling all modules of the addon (unless explicitly disabled).\\\\\n-- :Enable() also sets the internal `enableState` variable to true\n-- @name //addon//:Enable\n-- @paramsig\n-- @usage\n-- -- Enable MyModule\n-- MyAddon = LibStub(\"AceAddon-3.0\"):GetAddon(\"MyAddon\")\n-- MyModule = MyAddon:GetModule(\"MyModule\")\n-- MyModule:Enable()\nfunction Enable(self)\n\tself:SetEnabledState(true)\n\n\t-- nevcairiel 2013-04-27: don't enable an addon/module if its queued for init still\n\t-- it'll be enabled after the init process\n\tif not queuedForInitialization(self) then\n\t\treturn AceAddon:EnableAddon(self)\n\tend\nend\n\n--- Disables the Addon, if possible, return true or false depending on success.\n-- This internally calls AceAddon:DisableAddon(), thus dispatching a OnDisable callback\n-- and disabling all modules of the addon.\\\\\n-- :Disable() also sets the internal `enableState` variable to false\n-- @name //addon//:Disable\n-- @paramsig\n-- @usage\n-- -- Disable MyAddon\n-- MyAddon = LibStub(\"AceAddon-3.0\"):GetAddon(\"MyAddon\")\n-- MyAddon:Disable()\nfunction Disable(self)\n\tself:SetEnabledState(false)\n\treturn AceAddon:DisableAddon(self)\nend\n\n--- Enables the Module, if possible, return true or false depending on success.\n-- Short-hand function that retrieves the module via `:GetModule` and calls `:Enable` on the module object.\n-- @name //addon//:EnableModule\n-- @paramsig name\n-- @usage\n-- -- Enable MyModule using :GetModule\n-- MyAddon = LibStub(\"AceAddon-3.0\"):GetAddon(\"MyAddon\")\n-- MyModule = MyAddon:GetModule(\"MyModule\")\n-- MyModule:Enable()\n--\n-- -- Enable MyModule using the short-hand\n-- MyAddon = LibStub(\"AceAddon-3.0\"):GetAddon(\"MyAddon\")\n-- MyAddon:EnableModule(\"MyModule\")\nfunction EnableModule(self, name)\n\tlocal module = self:GetModule( name )\n\treturn module:Enable()\nend\n\n--- Disables the Module, if possible, return true or false depending on success.\n-- Short-hand function that retrieves the module via `:GetModule` and calls `:Disable` on the module object.\n-- @name //addon//:DisableModule\n-- @paramsig name\n-- @usage\n-- -- Disable MyModule using :GetModule\n-- MyAddon = LibStub(\"AceAddon-3.0\"):GetAddon(\"MyAddon\")\n-- MyModule = MyAddon:GetModule(\"MyModule\")\n-- MyModule:Disable()\n--\n-- -- Disable MyModule using the short-hand\n-- MyAddon = LibStub(\"AceAddon-3.0\"):GetAddon(\"MyAddon\")\n-- MyAddon:DisableModule(\"MyModule\")\nfunction DisableModule(self, name)\n\tlocal module = self:GetModule( name )\n\treturn module:Disable()\nend\n\n--- Set the default libraries to be mixed into all modules created by this object.\n-- Note that you can only change the default module libraries before any module is created.\n-- @name //addon//:SetDefaultModuleLibraries\n-- @paramsig lib[, lib, ...]\n-- @param lib List of libraries to embed into the addon\n-- @usage\n-- -- Create the addon object\n-- MyAddon = LibStub(\"AceAddon-3.0\"):NewAddon(\"MyAddon\")\n-- -- Configure default libraries for modules (all modules need AceEvent-3.0)\n-- MyAddon:SetDefaultModuleLibraries(\"AceEvent-3.0\")\n-- -- Create a module\n-- MyModule = MyAddon:NewModule(\"MyModule\")\nfunction SetDefaultModuleLibraries(self, ...)\n\tif next(self.modules) then\n\t\terror(\"Usage: SetDefaultModuleLibraries(...): cannot change the module defaults after a module has been registered.\", 2)\n\tend\n\tself.defaultModuleLibraries = {...}\nend\n\n--- Set the default state in which new modules are being created.\n-- Note that you can only change the default state before any module is created.\n-- @name //addon//:SetDefaultModuleState\n-- @paramsig state\n-- @param state Default state for new modules, true for enabled, false for disabled\n-- @usage\n-- -- Create the addon object\n-- MyAddon = LibStub(\"AceAddon-3.0\"):NewAddon(\"MyAddon\")\n-- -- Set the default state to \"disabled\"\n-- MyAddon:SetDefaultModuleState(false)\n-- -- Create a module and explicilty enable it\n-- MyModule = MyAddon:NewModule(\"MyModule\")\n-- MyModule:Enable()\nfunction SetDefaultModuleState(self, state)\n\tif next(self.modules) then\n\t\terror(\"Usage: SetDefaultModuleState(state): cannot change the module defaults after a module has been registered.\", 2)\n\tend\n\tself.defaultModuleState = state\nend\n\n--- Set the default prototype to use for new modules on creation.\n-- Note that you can only change the default prototype before any module is created.\n-- @name //addon//:SetDefaultModulePrototype\n-- @paramsig prototype\n-- @param prototype Default prototype for the new modules (table)\n-- @usage\n-- -- Define a prototype\n-- local prototype = { OnEnable = function(self) print(\"OnEnable called!\") end }\n-- -- Set the default prototype\n-- MyAddon:SetDefaultModulePrototype(prototype)\n-- -- Create a module and explicitly Enable it\n-- MyModule = MyAddon:NewModule(\"MyModule\")\n-- MyModule:Enable()\n-- -- should print \"OnEnable called!\" now\n-- @see NewModule\nfunction SetDefaultModulePrototype(self, prototype)\n\tif next(self.modules) then\n\t\terror(\"Usage: SetDefaultModulePrototype(prototype): cannot change the module defaults after a module has been registered.\", 2)\n\tend\n\tif type(prototype) ~= \"table\" then\n\t\terror((\"Usage: SetDefaultModulePrototype(prototype): 'prototype' - table expected got '%s'.\"):format(type(prototype)), 2)\n\tend\n\tself.defaultModulePrototype = prototype\nend\n\n--- Set the state of an addon or module\n-- This should only be called before any enabling actually happend, e.g. in/before OnInitialize.\n-- @name //addon//:SetEnabledState\n-- @paramsig state\n-- @param state the state of an addon or module  (enabled=true, disabled=false)\nfunction SetEnabledState(self, state)\n\tself.enabledState = state\nend\n\n\n--- Return an iterator of all modules associated to the addon.\n-- @name //addon//:IterateModules\n-- @paramsig\n-- @usage\n-- -- Enable all modules\n-- for name, module in MyAddon:IterateModules() do\n--    module:Enable()\n-- end\nlocal function IterateModules(self) return pairs(self.modules) end\n\n-- Returns an iterator of all embeds in the addon\n-- @name //addon//:IterateEmbeds\n-- @paramsig\nlocal function IterateEmbeds(self) return pairs(AceAddon.embeds[self]) end\n\n--- Query the enabledState of an addon.\n-- @name //addon//:IsEnabled\n-- @paramsig\n-- @usage\n-- if MyAddon:IsEnabled() then\n--     MyAddon:Disable()\n-- end\nlocal function IsEnabled(self) return self.enabledState end\nlocal mixins = {\n\tNewModule = NewModule,\n\tGetModule = GetModule,\n\tEnable = Enable,\n\tDisable = Disable,\n\tEnableModule = EnableModule,\n\tDisableModule = DisableModule,\n\tIsEnabled = IsEnabled,\n\tSetDefaultModuleLibraries = SetDefaultModuleLibraries,\n\tSetDefaultModuleState = SetDefaultModuleState,\n\tSetDefaultModulePrototype = SetDefaultModulePrototype,\n\tSetEnabledState = SetEnabledState,\n\tIterateModules = IterateModules,\n\tIterateEmbeds = IterateEmbeds,\n\tGetName = GetName,\n}\nlocal function IsModule(self) return false end\nlocal pmixins = {\n\tdefaultModuleState = true,\n\tenabledState = true,\n\tIsModule = IsModule,\n}\n-- Embed( target )\n-- target (object) - target object to embed aceaddon in\n--\n-- this is a local function specifically since it's meant to be only called internally\nfunction Embed(target, skipPMixins)\n\tfor k, v in pairs(mixins) do\n\t\ttarget[k] = v\n\tend\n\tif not skipPMixins then\n\t\tfor k, v in pairs(pmixins) do\n\t\t\ttarget[k] = target[k] or v\n\t\tend\n\tend\nend\n\n\n-- - Initialize the addon after creation.\n-- This function is only used internally during the ADDON_LOADED event\n-- It will call the **OnInitialize** function on the addon object (if present),\n-- and the **OnEmbedInitialize** function on all embeded libraries.\n--\n-- **Note:** Do not call this function manually, unless you're absolutely sure that you know what you are doing.\n-- @param addon addon object to intialize\nfunction AceAddon:InitializeAddon(addon)\n\tsafecall(addon.OnInitialize, addon)\n\n\tlocal embeds = self.embeds[addon]\n\tfor i = 1, #embeds do\n\t\tlocal lib = LibStub:GetLibrary(embeds[i], true)\n\t\tif lib then safecall(lib.OnEmbedInitialize, lib, addon) end\n\tend\n\n\t-- we don't call InitializeAddon on modules specifically, this is handled\n\t-- from the event handler and only done _once_\nend\n\n-- - Enable the addon after creation.\n-- Note: This function is only used internally during the PLAYER_LOGIN event, or during ADDON_LOADED,\n-- if IsLoggedIn() already returns true at that point, e.g. for LoD Addons.\n-- It will call the **OnEnable** function on the addon object (if present),\n-- and the **OnEmbedEnable** function on all embeded libraries.\\\\\n-- This function does not toggle the enable state of the addon itself, and will return early if the addon is disabled.\n--\n-- **Note:** Do not call this function manually, unless you're absolutely sure that you know what you are doing.\n-- Use :Enable on the addon itself instead.\n-- @param addon addon object to enable\nfunction AceAddon:EnableAddon(addon)\n\tif type(addon) == \"string\" then addon = AceAddon:GetAddon(addon) end\n\tif self.statuses[addon.name] or not addon.enabledState then return false end\n\n\t-- set the statuses first, before calling the OnEnable. this allows for Disabling of the addon in OnEnable.\n\tself.statuses[addon.name] = true\n\n\tsafecall(addon.OnEnable, addon)\n\n\t-- make sure we're still enabled before continueing\n\tif self.statuses[addon.name] then\n\t\tlocal embeds = self.embeds[addon]\n\t\tfor i = 1, #embeds do\n\t\t\tlocal lib = LibStub:GetLibrary(embeds[i], true)\n\t\t\tif lib then safecall(lib.OnEmbedEnable, lib, addon) end\n\t\tend\n\n\t\t-- enable possible modules.\n\t\tlocal modules = addon.orderedModules\n\t\tfor i = 1, #modules do\n\t\t\tself:EnableAddon(modules[i])\n\t\tend\n\tend\n\treturn self.statuses[addon.name] -- return true if we're disabled\nend\n\n-- - Disable the addon\n-- Note: This function is only used internally.\n-- It will call the **OnDisable** function on the addon object (if present),\n-- and the **OnEmbedDisable** function on all embeded libraries.\\\\\n-- This function does not toggle the enable state of the addon itself, and will return early if the addon is still enabled.\n--\n-- **Note:** Do not call this function manually, unless you're absolutely sure that you know what you are doing.\n-- Use :Disable on the addon itself instead.\n-- @param addon addon object to enable\nfunction AceAddon:DisableAddon(addon)\n\tif type(addon) == \"string\" then addon = AceAddon:GetAddon(addon) end\n\tif not self.statuses[addon.name] then return false end\n\n\t-- set statuses first before calling OnDisable, this allows for aborting the disable in OnDisable.\n\tself.statuses[addon.name] = false\n\n\tsafecall( addon.OnDisable, addon )\n\n\t-- make sure we're still disabling...\n\tif not self.statuses[addon.name] then\n\t\tlocal embeds = self.embeds[addon]\n\t\tfor i = 1, #embeds do\n\t\t\tlocal lib = LibStub:GetLibrary(embeds[i], true)\n\t\t\tif lib then safecall(lib.OnEmbedDisable, lib, addon) end\n\t\tend\n\t\t-- disable possible modules.\n\t\tlocal modules = addon.orderedModules\n\t\tfor i = 1, #modules do\n\t\t\tself:DisableAddon(modules[i])\n\t\tend\n\tend\n\n\treturn not self.statuses[addon.name] -- return true if we're disabled\nend\n\n--- Get an iterator over all registered addons.\n-- @usage\n-- -- Print a list of all installed AceAddon's\n-- for name, addon in AceAddon:IterateAddons() do\n--   print(\"Addon: \" .. name)\n-- end\nfunction AceAddon:IterateAddons() return pairs(self.addons) end\n\n--- Get an iterator over the internal status registry.\n-- @usage\n-- -- Print a list of all enabled addons\n-- for name, status in AceAddon:IterateAddonStatus() do\n--   if status then\n--     print(\"EnabledAddon: \" .. name)\n--   end\n-- end\nfunction AceAddon:IterateAddonStatus() return pairs(self.statuses) end\n\n-- Following Iterators are deprecated, and their addon specific versions should be used\n-- e.g. addon:IterateEmbeds() instead of :IterateEmbedsOnAddon(addon)\nfunction AceAddon:IterateEmbedsOnAddon(addon) return pairs(self.embeds[addon]) end\nfunction AceAddon:IterateModulesOfAddon(addon) return pairs(addon.modules) end\n\n-- Event Handling\nlocal function onEvent(this, event, arg1)\n\t-- 2011-08-17 nevcairiel - ignore the load event of Blizzard_DebugTools, so a potential startup error isn't swallowed up\n\tif (event == \"ADDON_LOADED\"  and arg1 ~= \"Blizzard_DebugTools\") or event == \"PLAYER_LOGIN\" then\n\t\t-- if a addon loads another addon, recursion could happen here, so we need to validate the table on every iteration\n\t\twhile(#AceAddon.initializequeue > 0) do\n\t\t\tlocal addon = tremove(AceAddon.initializequeue, 1)\n\t\t\t-- this might be an issue with recursion - TODO: validate\n\t\t\tif event == \"ADDON_LOADED\" then addon.baseName = arg1 end\n\t\t\tAceAddon:InitializeAddon(addon)\n\t\t\ttinsert(AceAddon.enablequeue, addon)\n\t\tend\n\n\t\tif IsLoggedIn() then\n\t\t\twhile(#AceAddon.enablequeue > 0) do\n\t\t\t\tlocal addon = tremove(AceAddon.enablequeue, 1)\n\t\t\t\tAceAddon:EnableAddon(addon)\n\t\t\tend\n\t\tend\n\tend\nend\n\nAceAddon.frame:RegisterEvent(\"ADDON_LOADED\")\nAceAddon.frame:RegisterEvent(\"PLAYER_LOGIN\")\nAceAddon.frame:SetScript(\"OnEvent\", onEvent)\n\n-- upgrade embeded\nfor name, addon in pairs(AceAddon.addons) do\n\tEmbed(addon, true)\nend\n\n-- 2010-10-27 nevcairiel - add new \"orderedModules\" table\nif oldminor and oldminor < 10 then\n\tfor name, addon in pairs(AceAddon.addons) do\n\t\taddon.orderedModules = {}\n\t\tfor module_name, module in pairs(addon.modules) do\n\t\t\ttinsert(addon.orderedModules, module)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceComm-3.0/AceComm-3.0.lua",
    "content": "--- **AceComm-3.0** allows you to send messages of unlimited length over the addon comm channels.\n-- It'll automatically split the messages into multiple parts and rebuild them on the receiving end.\\\\\n-- **ChatThrottleLib** is of course being used to avoid being disconnected by the server.\n--\n-- **AceComm-3.0** can be embeded into your addon, either explicitly by calling AceComm:Embed(MyAddon) or by\n-- specifying it as an embeded library in your AceAddon. All functions will be available on your addon object\n-- and can be accessed directly, without having to explicitly call AceComm itself.\\\\\n-- It is recommended to embed AceComm, otherwise you'll have to specify a custom `self` on all calls you\n-- make into AceComm.\n-- @class file\n-- @name AceComm-3.0\n-- @release $Id$\n\n--[[ AceComm-3.0\n\nTODO: Time out old data rotting around from dead senders? Not a HUGE deal since the number of possible sender names is somewhat limited.\n\n]]\n\nlocal CallbackHandler = LibStub(\"CallbackHandler-1.0\")\nlocal CTL = assert(ChatThrottleLib, \"AceComm-3.0 requires ChatThrottleLib\")\n\nlocal MAJOR, MINOR = \"AceComm-3.0\", 12\nlocal AceComm,oldminor = LibStub:NewLibrary(MAJOR, MINOR)\n\nif not AceComm then return end\n\n-- Lua APIs\nlocal type, next, pairs, tostring = type, next, pairs, tostring\nlocal strsub, strfind = string.sub, string.find\nlocal tinsert, tconcat = table.insert, table.concat\nlocal error, assert = error, assert\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: LibStub, DEFAULT_CHAT_FRAME, geterrorhandler\n\nAceComm.embeds = AceComm.embeds or {}\n\n-- for my sanity and yours, let's give the message type bytes some names\nlocal MSG_MULTI_FIRST = \"\\001\"\nlocal MSG_MULTI_NEXT  = \"\\002\"\nlocal MSG_MULTI_LAST  = \"\\003\"\n\nAceComm.multipart_origprefixes = AceComm.multipart_origprefixes or {} -- e.g. \"Prefix\\001\"=\"Prefix\", \"Prefix\\002\"=\"Prefix\"\nAceComm.multipart_reassemblers = AceComm.multipart_reassemblers or {} -- e.g. \"Prefix\\001\"=\"OnReceiveMultipartFirst\"\n\n-- the multipart message spool: indexed by a combination of sender+distribution+\nAceComm.multipart_spool = AceComm.multipart_spool or {}\n\n--- Register for Addon Traffic on a specified prefix\n-- @param prefix A printable character (\\032-\\255) classification of the message (typically AddonName or AddonNameEvent)\n-- @param method Callback to call on message reception: Function reference, or method name (string) to call on self. Defaults to \"OnCommReceived\"\nfunction AceComm:RegisterComm(prefix, method)\n\tif method == nil then\n\t\tmethod = \"OnCommReceived\"\n\tend\n\n\treturn AceComm._RegisterComm(self, prefix, method)\t-- created by CallbackHandler\nend\n\nlocal warnedPrefix=false\n\n--- Send a message over the Addon Channel\n-- @param prefix A printable character (\\032-\\255) classification of the message (typically AddonName or AddonNameEvent)\n-- @param text Data to send, nils (\\000) not allowed. Any length.\n-- @param distribution Addon channel, e.g. \"RAID\", \"GUILD\", etc; see SendAddonMessage API\n-- @param target Destination for some distributions; see SendAddonMessage API\n-- @param prio OPTIONAL: ChatThrottleLib priority, \"BULK\", \"NORMAL\" or \"ALERT\". Defaults to \"NORMAL\".\n-- @param callbackFn OPTIONAL: callback function to be called as each chunk is sent. receives 3 args: the user supplied arg (see next), the number of bytes sent so far, and the number of bytes total to send.\n-- @param callbackArg: OPTIONAL: first arg to the callback function. nil will be passed if not specified.\nfunction AceComm:SendCommMessage(prefix, text, distribution, target, prio, callbackFn, callbackArg)\n\tprio = prio or \"NORMAL\"\t-- pasta's reference implementation had different prio for singlepart and multipart, but that's a very bad idea since that can easily lead to out-of-sequence delivery!\n\tif not( type(prefix)==\"string\" and\n\t\t\ttype(text)==\"string\" and\n\t\t\ttype(distribution)==\"string\" and\n\t\t\t(target==nil or type(target)==\"string\" or type(target)==\"number\") and\n\t\t\t(prio==\"BULK\" or prio==\"NORMAL\" or prio==\"ALERT\")\n\t\t) then\n\t\terror('Usage: SendCommMessage(addon, \"prefix\", \"text\", \"distribution\"[, \"target\"[, \"prio\"[, callbackFn, callbackarg]]])', 2)\n\tend\n\n\tif strfind(prefix, \"[\\001-\\009]\") then\n\t\tif strfind(prefix, \"[\\001-\\003]\") then\n\t\t\terror(\"SendCommMessage: Characters \\\\001--\\\\003 in prefix are reserved for AceComm metadata\", 2)\n\t\telseif not warnedPrefix then\n\t\t\t-- I have some ideas about future extensions that require more control characters /mikk, 20090808\n\t\t\tgeterrorhandler()(\"SendCommMessage: Heads-up developers: Characters \\\\004--\\\\009 in prefix are reserved for AceComm future extension\")\n\t\t\twarnedPrefix = true\n\t\tend\n\tend\n\n\n\tlocal textlen = #text\n\tlocal maxtextlen = 254 - #prefix\t-- 254 is the max length of prefix + text that can be sent in one message\n\tlocal queueName = prefix..distribution..(target or \"\")\n\n\tlocal ctlCallback = nil\n\tif callbackFn then\n\t\tctlCallback = function(sent)\n\t\t\treturn callbackFn(callbackArg, sent, textlen)\n\t\tend\n\tend\n\n\tif textlen <= maxtextlen then\n\t\t-- fits all in one message\n\t\tCTL:SendAddonMessage(prio, prefix, text, distribution, target, queueName, ctlCallback, textlen)\n\telse\n\t\tmaxtextlen = maxtextlen - 1\t-- 1 extra byte for part indicator in prefix\n\n\t\t-- first part\n\t\tlocal chunk = strsub(text, 1, maxtextlen)\n\t\tCTL:SendAddonMessage(prio, prefix..MSG_MULTI_FIRST, chunk, distribution, target, queueName, ctlCallback, maxtextlen)\n\n\t\t-- continuation\n\t\tlocal pos = 1+maxtextlen\n\t\tlocal prefix2 = prefix..MSG_MULTI_NEXT\n\n\t\twhile pos+maxtextlen <= textlen do\n\t\t\tchunk = strsub(text, pos, pos+maxtextlen-1)\n\t\t\tCTL:SendAddonMessage(prio, prefix2, chunk, distribution, target, queueName, ctlCallback, pos+maxtextlen-1)\n\t\t\tpos = pos + maxtextlen\n\t\tend\n\n\t\t-- final part\n\t\tchunk = strsub(text, pos)\n\t\tCTL:SendAddonMessage(prio, prefix..MSG_MULTI_LAST, chunk, distribution, target, queueName, ctlCallback, textlen)\n\tend\nend\n\n\n----------------------------------------\n-- Message receiving\n----------------------------------------\n\ndo\n\tlocal compost = setmetatable({}, {__mode = \"k\"})\n\tlocal function new()\n\t\tlocal t = next(compost)\n\t\tif t then\n\t\t\tcompost[t]=nil\n\t\t\tfor i=#t,3,-1 do\t-- faster than pairs loop. don't even nil out 1/2 since they'll be overwritten\n\t\t\t\tt[i]=nil\n\t\t\tend\n\t\t\treturn t\n\t\tend\n\n\t\treturn {}\n\tend\n\n\tlocal function lostdatawarning(prefix,sender,where)\n\t\tDEFAULT_CHAT_FRAME:AddMessage(MAJOR..\": Warning: lost network data regarding '\"..tostring(prefix)..\"' from '\"..tostring(sender)..\"' (in \"..where..\")\")\n\tend\n\n\tfunction AceComm:OnReceiveMultipartFirst(prefix, message, distribution, sender)\n\t\tlocal key = prefix..\"\\t\"..distribution..\"\\t\"..sender\t-- a unique stream is defined by the prefix + distribution + sender\n\t\tlocal spool = AceComm.multipart_spool\n\n\t\t--[[\n\t\tif spool[key] then\n\t\t\tlostdatawarning(prefix,sender,\"First\")\n\t\t\t-- continue and overwrite\n\t\tend\n\t\t--]]\n\n\t\tspool[key] = message  -- plain string for now\n\tend\n\n\tfunction AceComm:OnReceiveMultipartNext(prefix, message, distribution, sender)\n\t\tlocal key = prefix..\"\\t\"..distribution..\"\\t\"..sender\t-- a unique stream is defined by the prefix + distribution + sender\n\t\tlocal spool = AceComm.multipart_spool\n\t\tlocal olddata = spool[key]\n\n\t\tif not olddata then\n\t\t\t--lostdatawarning(prefix,sender,\"Next\")\n\t\t\treturn\n\t\tend\n\n\t\tif type(olddata)~=\"table\" then\n\t\t\t-- ... but what we have is not a table. So make it one. (Pull a composted one if available)\n\t\t\tlocal t = new()\n\t\t\tt[1] = olddata    -- add old data as first string\n\t\t\tt[2] = message    -- and new message as second string\n\t\t\tspool[key] = t    -- and put the table in the spool instead of the old string\n\t\telse\n\t\t\ttinsert(olddata, message)\n\t\tend\n\tend\n\n\tfunction AceComm:OnReceiveMultipartLast(prefix, message, distribution, sender)\n\t\tlocal key = prefix..\"\\t\"..distribution..\"\\t\"..sender\t-- a unique stream is defined by the prefix + distribution + sender\n\t\tlocal spool = AceComm.multipart_spool\n\t\tlocal olddata = spool[key]\n\n\t\tif not olddata then\n\t\t\t--lostdatawarning(prefix,sender,\"End\")\n\t\t\treturn\n\t\tend\n\n\t\tspool[key] = nil\n\n\t\tif type(olddata) == \"table\" then\n\t\t\t-- if we've received a \"next\", the spooled data will be a table for rapid & garbage-free tconcat\n\t\t\ttinsert(olddata, message)\n\t\t\tAceComm.callbacks:Fire(prefix, tconcat(olddata, \"\"), distribution, sender)\n\t\t\tcompost[olddata] = true\n\t\telse\n\t\t\t-- if we've only received a \"first\", the spooled data will still only be a string\n\t\t\tAceComm.callbacks:Fire(prefix, olddata..message, distribution, sender)\n\t\tend\n\tend\nend\n\n\n\n\n\n\n----------------------------------------\n-- Embed CallbackHandler\n----------------------------------------\n\nif not AceComm.callbacks then\n\t-- ensure that 'prefix to watch' table is consistent with registered\n\t-- callbacks\n\tAceComm.__prefixes = {}\n\n\tAceComm.callbacks = CallbackHandler:New(AceComm,\n\t\t\t\t\t\t\"_RegisterComm\",\n\t\t\t\t\t\t\"UnregisterComm\",\n\t\t\t\t\t\t\"UnregisterAllComm\")\nend\n\nfunction AceComm.callbacks:OnUsed(target, prefix)\n\tAceComm.multipart_origprefixes[prefix..MSG_MULTI_FIRST] = prefix\n\tAceComm.multipart_reassemblers[prefix..MSG_MULTI_FIRST] = \"OnReceiveMultipartFirst\"\n\n\tAceComm.multipart_origprefixes[prefix..MSG_MULTI_NEXT] = prefix\n\tAceComm.multipart_reassemblers[prefix..MSG_MULTI_NEXT] = \"OnReceiveMultipartNext\"\n\n\tAceComm.multipart_origprefixes[prefix..MSG_MULTI_LAST] = prefix\n\tAceComm.multipart_reassemblers[prefix..MSG_MULTI_LAST] = \"OnReceiveMultipartLast\"\nend\n\nfunction AceComm.callbacks:OnUnused(target, prefix)\n\tAceComm.multipart_origprefixes[prefix..MSG_MULTI_FIRST] = nil\n\tAceComm.multipart_reassemblers[prefix..MSG_MULTI_FIRST] = nil\n\n\tAceComm.multipart_origprefixes[prefix..MSG_MULTI_NEXT] = nil\n\tAceComm.multipart_reassemblers[prefix..MSG_MULTI_NEXT] = nil\n\n\tAceComm.multipart_origprefixes[prefix..MSG_MULTI_LAST] = nil\n\tAceComm.multipart_reassemblers[prefix..MSG_MULTI_LAST] = nil\nend\n\nlocal function OnEvent(this, event, ...)\n\tif event == \"CHAT_MSG_ADDON\" then\n\t\tlocal prefix,message,distribution,sender = ...\n\t\tlocal reassemblername = AceComm.multipart_reassemblers[prefix]\n\t\tif reassemblername then\n\t\t\t-- multipart: reassemble\n\t\t\tlocal aceCommReassemblerFunc = AceComm[reassemblername]\n\t\t\tlocal origprefix = AceComm.multipart_origprefixes[prefix]\n\t\t\taceCommReassemblerFunc(AceComm, origprefix, message, distribution, sender)\n\t\telse\n\t\t\t-- single part: fire it off immediately and let CallbackHandler decide if it's registered or not\n\t\t\tAceComm.callbacks:Fire(prefix, message, distribution, sender)\n\t\tend\n\telse\n\t\tassert(false, \"Received \"..tostring(event)..\" event?!\")\n\tend\nend\n\nAceComm.frame = AceComm.frame or CreateFrame(\"Frame\", \"AceComm30Frame\")\nAceComm.frame:SetScript(\"OnEvent\", OnEvent)\nAceComm.frame:UnregisterAllEvents()\nAceComm.frame:RegisterEvent(\"CHAT_MSG_ADDON\")\n\n\n----------------------------------------\n-- Base library stuff\n----------------------------------------\n\nlocal mixins = {\n\t\"RegisterComm\",\n\t\"UnregisterComm\",\n\t\"UnregisterAllComm\",\n\t\"SendCommMessage\",\n}\n\n-- Embeds AceComm-3.0 into the target object making the functions from the mixins list available on target:..\n-- @param target target object to embed AceComm-3.0 in\nfunction AceComm:Embed(target)\n\tfor k, v in pairs(mixins) do\n\t\ttarget[v] = self[v]\n\tend\n\tself.embeds[target] = true\n\treturn target\nend\n\nfunction AceComm:OnEmbedDisable(target)\n\ttarget:UnregisterAllComm()\nend\n\n-- Update embeds\nfor target, v in pairs(AceComm.embeds) do\n\tAceComm:Embed(target)\nend\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceComm-3.0/AceComm-3.0.xml",
    "content": "<Ui xmlns=\"http://www.blizzard.com/wow/ui/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.blizzard.com/wow/ui/\n..\\FrameXML\\UI.xsd\">\n\t<Script file=\"ChatThrottleLib.lua\"/>\n\t<Script file=\"AceComm-3.0.lua\"/>\n</Ui>"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceComm-3.0/ChatThrottleLib.lua",
    "content": "--\n-- ChatThrottleLib by Mikk\n--\n-- Manages AddOn chat output to keep player from getting kicked off.\n--\n-- ChatThrottleLib:SendChatMessage/:SendAddonMessage functions that accept\n-- a Priority (\"BULK\", \"NORMAL\", \"ALERT\") as well as prefix for SendChatMessage.\n--\n-- Priorities get an equal share of available bandwidth when fully loaded.\n-- Communication channels are separated on extension+chattype+destination and\n-- get round-robinned. (Destination only matters for whispers and channels,\n-- obviously)\n--\n-- Will install hooks for SendChatMessage and SendAddonMessage to measure\n-- bandwidth bypassing the library and use less bandwidth itself.\n--\n--\n-- Fully embeddable library. Just copy this file into your addon directory,\n-- add it to the .toc, and it's done.\n--\n-- Can run as a standalone addon also, but, really, just embed it! :-)\n--\n-- LICENSE: ChatThrottleLib is released into the Public Domain\n--\n\nlocal CTL_VERSION = 24\n\nlocal _G = _G\n\nif _G.ChatThrottleLib then\n\tif _G.ChatThrottleLib.version >= CTL_VERSION then\n\t\t-- There's already a newer (or same) version loaded. Buh-bye.\n\t\treturn\n\telseif not _G.ChatThrottleLib.securelyHooked then\n\t\tprint(\"ChatThrottleLib: Warning: There's an ANCIENT ChatThrottleLib.lua (pre-wow 2.0, <v16) in an addon somewhere. Get the addon updated or copy in a newer ChatThrottleLib.lua (>=v16) in it!\")\n\t\t-- ATTEMPT to unhook; this'll behave badly if someone else has hooked...\n\t\t-- ... and if someone has securehooked, they can kiss that goodbye too... >.<\n\t\t_G.SendChatMessage = _G.ChatThrottleLib.ORIG_SendChatMessage\n\t\tif _G.ChatThrottleLib.ORIG_SendAddonMessage then\n\t\t\t_G.SendAddonMessage = _G.ChatThrottleLib.ORIG_SendAddonMessage\n\t\tend\n\tend\n\t_G.ChatThrottleLib.ORIG_SendChatMessage = nil\n\t_G.ChatThrottleLib.ORIG_SendAddonMessage = nil\nend\n\nif not _G.ChatThrottleLib then\n\t_G.ChatThrottleLib = {}\nend\n\nChatThrottleLib = _G.ChatThrottleLib  -- in case some addon does \"local ChatThrottleLib\" above us and we're copypasted (AceComm-2, sigh)\nlocal ChatThrottleLib = _G.ChatThrottleLib\n\nChatThrottleLib.version = CTL_VERSION\n\n\n\n------------------ TWEAKABLES -----------------\n\nChatThrottleLib.MAX_CPS = 800\t\t\t  -- 2000 seems to be safe if NOTHING ELSE is happening. let's call it 800.\nChatThrottleLib.MSG_OVERHEAD = 40\t\t-- Guesstimate overhead for sending a message; source+dest+chattype+protocolstuff\n\nChatThrottleLib.BURST = 4000\t\t\t\t-- WoW's server buffer seems to be about 32KB. 8KB should be safe, but seen disconnects on _some_ servers. Using 4KB now.\n\nChatThrottleLib.MIN_FPS = 20\t\t\t\t-- Reduce output CPS to half (and don't burst) if FPS drops below this value\n\n\nlocal setmetatable = setmetatable\nlocal table_remove = table.remove\nlocal tostring = tostring\nlocal GetTime = GetTime\nlocal math_min = math.min\nlocal math_max = math.max\nlocal next = next\nlocal strlen = string.len\nlocal GetFramerate = GetFramerate\nlocal strlower = string.lower\nlocal unpack,type,pairs,wipe = unpack,type,pairs,wipe\nlocal UnitInRaid,GetNumPartyMembers = UnitInRaid,GetNumPartyMembers\n\n\n-----------------------------------------------------------------------\n-- Double-linked ring implementation\n\nlocal Ring = {}\nlocal RingMeta = { __index = Ring }\n\nfunction Ring:New()\n\tlocal ret = {}\n\tsetmetatable(ret, RingMeta)\n\treturn ret\nend\n\nfunction Ring:Add(obj)\t-- Append at the \"far end\" of the ring (aka just before the current position)\n\tif self.pos then\n\t\tobj.prev = self.pos.prev\n\t\tobj.prev.next = obj\n\t\tobj.next = self.pos\n\t\tobj.next.prev = obj\n\telse\n\t\tobj.next = obj\n\t\tobj.prev = obj\n\t\tself.pos = obj\n\tend\nend\n\nfunction Ring:Remove(obj)\n\tobj.next.prev = obj.prev\n\tobj.prev.next = obj.next\n\tif self.pos == obj then\n\t\tself.pos = obj.next\n\t\tif self.pos == obj then\n\t\t\tself.pos = nil\n\t\tend\n\tend\nend\n\n\n\n-----------------------------------------------------------------------\n-- Recycling bin for pipes\n-- A pipe is a plain integer-indexed queue of messages\n-- Pipes normally live in Rings of pipes  (3 rings total, one per priority)\n\nChatThrottleLib.PipeBin = nil -- pre-v19, drastically different\nlocal PipeBin = setmetatable({}, {__mode=\"k\"})\n\nlocal function DelPipe(pipe)\n\tPipeBin[pipe] = true\nend\n\nlocal function NewPipe()\n\tlocal pipe = next(PipeBin)\n\tif pipe then\n\t\twipe(pipe)\n\t\tPipeBin[pipe] = nil\n\t\treturn pipe\n\tend\n\treturn {}\nend\n\n\n\n\n-----------------------------------------------------------------------\n-- Recycling bin for messages\n\nChatThrottleLib.MsgBin = nil -- pre-v19, drastically different\nlocal MsgBin = setmetatable({}, {__mode=\"k\"})\n\nlocal function DelMsg(msg)\n\tmsg[1] = nil\n\t-- there's more parameters, but they're very repetetive so the string pool doesn't suffer really, and it's faster to just not delete them.\n\tMsgBin[msg] = true\nend\n\nlocal function NewMsg()\n\tlocal msg = next(MsgBin)\n\tif msg then\n\t\tMsgBin[msg] = nil\n\t\treturn msg\n\tend\n\treturn {}\nend\n\n\n-----------------------------------------------------------------------\n-- ChatThrottleLib:Init\n-- Initialize queues, set up frame for OnUpdate, etc\n\n\nfunction ChatThrottleLib:Init()\n\n\t-- Set up queues\n\tif not self.Prio then\n\t\tself.Prio = {}\n\t\tself.Prio[\"ALERT\"] = { ByName = {}, Ring = Ring:New(), avail = 0 }\n\t\tself.Prio[\"NORMAL\"] = { ByName = {}, Ring = Ring:New(), avail = 0 }\n\t\tself.Prio[\"BULK\"] = { ByName = {}, Ring = Ring:New(), avail = 0 }\n\tend\n\n\t-- v4: total send counters per priority\n\tfor _, Prio in pairs(self.Prio) do\n\t\tPrio.nTotalSent = Prio.nTotalSent or 0\n\tend\n\n\tif not self.avail then\n\t\tself.avail = 0 -- v5\n\tend\n\tif not self.nTotalSent then\n\t\tself.nTotalSent = 0 -- v5\n\tend\n\n\n\t-- Set up a frame to get OnUpdate events\n\tif not self.Frame then\n\t\tself.Frame = CreateFrame(\"Frame\")\n\t\tself.Frame:Hide()\n\tend\n\tself.Frame:SetScript(\"OnUpdate\", self.OnUpdate)\n\tself.Frame:SetScript(\"OnEvent\", self.OnEvent)\t-- v11: Monitor P_E_W so we can throttle hard for a few seconds\n\tself.Frame:RegisterEvent(\"PLAYER_ENTERING_WORLD\")\n\tself.OnUpdateDelay = 0\n\tself.LastAvailUpdate = GetTime()\n\tself.HardThrottlingBeginTime = GetTime()\t-- v11: Throttle hard for a few seconds after startup\n\n\t-- Hook SendChatMessage and SendAddonMessage so we can measure unpiped traffic and avoid overloads (v7)\n\tif not self.securelyHooked then\n\t\t-- Use secure hooks as of v16. Old regular hook support yanked out in v21.\n\t\tself.securelyHooked = true\n\t\t--SendChatMessage\n\t\thooksecurefunc(\"SendChatMessage\", function(...)\n\t\t\treturn ChatThrottleLib.Hook_SendChatMessage(...)\n\t\tend)\n\t\t--SendAddonMessage\n\t\thooksecurefunc(\"SendAddonMessage\", function(...)\n\t\t\treturn ChatThrottleLib.Hook_SendAddonMessage(...)\n\t\tend)\n\tend\n\tself.nBypass = 0\nend\n\n\n-----------------------------------------------------------------------\n-- ChatThrottleLib.Hook_SendChatMessage / .Hook_SendAddonMessage\n\nlocal bMyTraffic = false\n\nfunction ChatThrottleLib.Hook_SendChatMessage(text, chattype, language, destination, ...)\n\tif bMyTraffic then\n\t\treturn\n\tend\n\tlocal self = ChatThrottleLib\n\tlocal size = strlen(tostring(text or \"\")) + strlen(tostring(destination or \"\")) + self.MSG_OVERHEAD\n\tself.avail = self.avail - size\n\tself.nBypass = self.nBypass + size\t-- just a statistic\nend\nfunction ChatThrottleLib.Hook_SendAddonMessage(prefix, text, chattype, destination, ...)\n\tif bMyTraffic then\n\t\treturn\n\tend\n\tlocal self = ChatThrottleLib\n\tlocal size = tostring(text or \"\"):len() + tostring(prefix or \"\"):len();\n\tsize = size + tostring(destination or \"\"):len() + self.MSG_OVERHEAD\n\tself.avail = self.avail - size\n\tself.nBypass = self.nBypass + size\t-- just a statistic\nend\n\n\n\n-----------------------------------------------------------------------\n-- ChatThrottleLib:UpdateAvail\n-- Update self.avail with how much bandwidth is currently available\n\nfunction ChatThrottleLib:UpdateAvail()\n\tlocal now = GetTime()\n\tlocal MAX_CPS = self.MAX_CPS;\n\tlocal newavail = MAX_CPS * (now - self.LastAvailUpdate)\n\tlocal avail = self.avail\n\n\tif now - self.HardThrottlingBeginTime < 5 then\n\t\t-- First 5 seconds after startup/zoning: VERY hard clamping to avoid irritating the server rate limiter, it seems very cranky then\n\t\tavail = math_min(avail + (newavail*0.1), MAX_CPS*0.5)\n\t\tself.bChoking = true\n\telseif GetFramerate() < self.MIN_FPS then\t\t-- GetFramerate call takes ~0.002 secs\n\t\tavail = math_min(MAX_CPS, avail + newavail*0.5)\n\t\tself.bChoking = true\t\t-- just a statistic\n\telse\n\t\tavail = math_min(self.BURST, avail + newavail)\n\t\tself.bChoking = false\n\tend\n\n\tavail = math_max(avail, 0-(MAX_CPS*2))\t-- Can go negative when someone is eating bandwidth past the lib. but we refuse to stay silent for more than 2 seconds; if they can do it, we can.\n\n\tself.avail = avail\n\tself.LastAvailUpdate = now\n\n\treturn avail\nend\n\n\n-----------------------------------------------------------------------\n-- Despooling logic\n-- Reminder:\n-- - We have 3 Priorities, each containing a \"Ring\" construct ...\n-- - ... made up of N \"Pipe\"s (1 for each destination/pipename)\n-- - and each pipe contains messages\n\nfunction ChatThrottleLib:Despool(Prio)\n\tlocal ring = Prio.Ring\n\twhile ring.pos and Prio.avail > ring.pos[1].nSize do\n\t\tlocal msg = table_remove(ring.pos, 1)\n\t\tif not ring.pos[1] then  -- did we remove last msg in this pipe?\n\t\t\tlocal pipe = Prio.Ring.pos\n\t\t\tPrio.Ring:Remove(pipe)\n\t\t\tPrio.ByName[pipe.name] = nil\n\t\t\tDelPipe(pipe)\n\t\telse\n\t\t\tPrio.Ring.pos = Prio.Ring.pos.next\n\t\tend\n\t\tlocal didSend=false\n\t\tlocal lowerDest = strlower(msg[3] or \"\")\n\t\tif lowerDest == \"raid\" and not UnitInRaid(\"player\") then\n\t\t\t-- do nothing\n\t\telseif lowerDest == \"party\" and GetNumPartyMembers() == 0 then\n\t\t\t-- do nothing\n\t\telse\n\t\t\tPrio.avail = Prio.avail - msg.nSize\n\t\t\tbMyTraffic = true\n\t\t\tmsg.f(unpack(msg, 1, msg.n))\n\t\t\tbMyTraffic = false\n\t\t\tPrio.nTotalSent = Prio.nTotalSent + msg.nSize\n\t\t\tDelMsg(msg)\n\t\t\tdidSend = true\n\t\tend\n\t\t-- notify caller of delivery (even if we didn't send it)\n\t\tif msg.callbackFn then\n\t\t\tmsg.callbackFn (msg.callbackArg, didSend)\n\t\tend\n\t\t-- USER CALLBACK MAY ERROR\n\tend\nend\n\n\nfunction ChatThrottleLib.OnEvent(this,event)\n\t-- v11: We know that the rate limiter is touchy after login. Assume that it's touchy after zoning, too.\n\tlocal self = ChatThrottleLib\n\tif event == \"PLAYER_ENTERING_WORLD\" then\n\t\tself.HardThrottlingBeginTime = GetTime()\t-- Throttle hard for a few seconds after zoning\n\t\tself.avail = 0\n\tend\nend\n\n\nfunction ChatThrottleLib.OnUpdate(this,delay)\n\tlocal self = ChatThrottleLib\n\n\tself.OnUpdateDelay = self.OnUpdateDelay + delay\n\tif self.OnUpdateDelay < 0.08 then\n\t\treturn\n\tend\n\tself.OnUpdateDelay = 0\n\n\tself:UpdateAvail()\n\n\tif self.avail < 0  then\n\t\treturn -- argh. some bastard is spewing stuff past the lib. just bail early to save cpu.\n\tend\n\n\t-- See how many of our priorities have queued messages (we only have 3, don't worry about the loop)\n\tlocal n = 0\n\tfor prioname,Prio in pairs(self.Prio) do\n\t\tif Prio.Ring.pos or Prio.avail < 0 then\n\t\t\tn = n + 1\n\t\tend\n\tend\n\n\t-- Anything queued still?\n\tif n<1 then\n\t\t-- Nope. Move spillover bandwidth to global availability gauge and clear self.bQueueing\n\t\tfor prioname, Prio in pairs(self.Prio) do\n\t\t\tself.avail = self.avail + Prio.avail\n\t\t\tPrio.avail = 0\n\t\tend\n\t\tself.bQueueing = false\n\t\tself.Frame:Hide()\n\t\treturn\n\tend\n\n\t-- There's stuff queued. Hand out available bandwidth to priorities as needed and despool their queues\n\tlocal avail = self.avail/n\n\tself.avail = 0\n\n\tfor prioname, Prio in pairs(self.Prio) do\n\t\tif Prio.Ring.pos or Prio.avail < 0 then\n\t\t\tPrio.avail = Prio.avail + avail\n\t\t\tif Prio.Ring.pos and Prio.avail > Prio.Ring.pos[1].nSize then\n\t\t\t\tself:Despool(Prio)\n\t\t\t\t-- Note: We might not get here if the user-supplied callback function errors out! Take care!\n\t\t\tend\n\t\tend\n\tend\n\nend\n\n\n\n\n-----------------------------------------------------------------------\n-- Spooling logic\n\nfunction ChatThrottleLib:Enqueue(prioname, pipename, msg)\n\tlocal Prio = self.Prio[prioname]\n\tlocal pipe = Prio.ByName[pipename]\n\tif not pipe then\n\t\tself.Frame:Show()\n\t\tpipe = NewPipe()\n\t\tpipe.name = pipename\n\t\tPrio.ByName[pipename] = pipe\n\t\tPrio.Ring:Add(pipe)\n\tend\n\n\tpipe[#pipe + 1] = msg\n\n\tself.bQueueing = true\nend\n\nfunction ChatThrottleLib:SendChatMessage(prio, prefix,   text, chattype, language, destination, queueName, callbackFn, callbackArg)\n\tif not self or not prio or not prefix or not text or not self.Prio[prio] then\n\t\terror('Usage: ChatThrottleLib:SendChatMessage(\"{BULK||NORMAL||ALERT}\", \"prefix\", \"text\"[, \"chattype\"[, \"language\"[, \"destination\"]]]', 2)\n\tend\n\tif callbackFn and type(callbackFn)~=\"function\" then\n\t\terror('ChatThrottleLib:ChatMessage(): callbackFn: expected function, got '..type(callbackFn), 2)\n\tend\n\n\tlocal nSize = text:len()\n\n\tif nSize>255 then\n\t\terror(\"ChatThrottleLib:SendChatMessage(): message length cannot exceed 255 bytes\", 2)\n\tend\n\n\tnSize = nSize + self.MSG_OVERHEAD\n\n\t-- Check if there's room in the global available bandwidth gauge to send directly\n\tif not self.bQueueing and nSize < self:UpdateAvail() then\n\t\tself.avail = self.avail - nSize\n\t\tbMyTraffic = true\n\t\t_G.SendChatMessage(text, chattype, language, destination)\n\t\tbMyTraffic = false\n\t\tself.Prio[prio].nTotalSent = self.Prio[prio].nTotalSent + nSize\n\t\tif callbackFn then\n\t\t\tcallbackFn (callbackArg, true)\n\t\tend\n\t\t-- USER CALLBACK MAY ERROR\n\t\treturn\n\tend\n\n\t-- Message needs to be queued\n\tlocal msg = NewMsg()\n\tmsg.f = _G.SendChatMessage\n\tmsg[1] = text\n\tmsg[2] = chattype or \"SAY\"\n\tmsg[3] = language\n\tmsg[4] = destination\n\tmsg.n = 4\n\tmsg.nSize = nSize\n\tmsg.callbackFn = callbackFn\n\tmsg.callbackArg = callbackArg\n\n\tself:Enqueue(prio, queueName or (prefix..(chattype or \"SAY\")..(destination or \"\")), msg)\nend\n\n\nfunction ChatThrottleLib:SendAddonMessage(prio, prefix, text, chattype, target, queueName, callbackFn, callbackArg)\n\tif not self or not prio or not prefix or not text or not chattype or not self.Prio[prio] then\n\t\terror('Usage: ChatThrottleLib:SendAddonMessage(\"{BULK||NORMAL||ALERT}\", \"prefix\", \"text\", \"chattype\"[, \"target\"])', 2)\n\tend\n\tif callbackFn and type(callbackFn)~=\"function\" then\n\t\terror('ChatThrottleLib:SendAddonMessage(): callbackFn: expected function, got '..type(callbackFn), 2)\n\tend\n\n\tlocal nSize = prefix:len() + 1 + text:len();\n\n\tif nSize>255 then\n\t\terror(\"ChatThrottleLib:SendAddonMessage(): prefix + message length cannot exceed 254 bytes\", 2)\n\tend\n\n\tnSize = nSize + self.MSG_OVERHEAD;\n\n\t-- Check if there's room in the global available bandwidth gauge to send directly\n\tif not self.bQueueing and nSize < self:UpdateAvail() then\n\t\tself.avail = self.avail - nSize\n\t\tbMyTraffic = true\n\t\t_G.SendAddonMessage(prefix, text, chattype, target)\n\t\tbMyTraffic = false\n\t\tself.Prio[prio].nTotalSent = self.Prio[prio].nTotalSent + nSize\n\t\tif callbackFn then\n\t\t\tcallbackFn (callbackArg, true)\n\t\tend\n\t\t-- USER CALLBACK MAY ERROR\n\t\treturn\n\tend\n\n\t-- Message needs to be queued\n\tlocal msg = NewMsg()\n\tmsg.f = _G.SendAddonMessage\n\tmsg[1] = prefix\n\tmsg[2] = text\n\tmsg[3] = chattype\n\tmsg[4] = target\n\tmsg.n = (target~=nil) and 4 or 3;\n\tmsg.nSize = nSize\n\tmsg.callbackFn = callbackFn\n\tmsg.callbackArg = callbackArg\n\n\tself:Enqueue(prio, queueName or (prefix..chattype..(target or \"\")), msg)\nend\n\n\n\n\n-----------------------------------------------------------------------\n-- Get the ball rolling!\n\nChatThrottleLib:Init()\n\n--[[ WoWBench debugging snippet\nif(WOWB_VER) then\n\tlocal function SayTimer()\n\t\tprint(\"SAY: \"..GetTime()..\" \"..arg1)\n\tend\n\tChatThrottleLib.Frame:SetScript(\"OnEvent\", SayTimer)\n\tChatThrottleLib.Frame:RegisterEvent(\"CHAT_MSG_SAY\")\nend\n]]\n\n\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceConsole-3.0/AceConsole-3.0.lua",
    "content": "--- **AceConsole-3.0** provides registration facilities for slash commands.\n-- You can register slash commands to your custom functions and use the `GetArgs` function to parse them\n-- to your addons individual needs.\n--\n-- **AceConsole-3.0** can be embeded into your addon, either explicitly by calling AceConsole:Embed(MyAddon) or by\n-- specifying it as an embeded library in your AceAddon. All functions will be available on your addon object\n-- and can be accessed directly, without having to explicitly call AceConsole itself.\\\\\n-- It is recommended to embed AceConsole, otherwise you'll have to specify a custom `self` on all calls you\n-- make into AceConsole.\n-- @class file\n-- @name AceConsole-3.0\n-- @release $Id$\nlocal MAJOR,MINOR = \"AceConsole-3.0\", 7\n\nlocal AceConsole, oldminor = LibStub:NewLibrary(MAJOR, MINOR)\n\nif not AceConsole then return end -- No upgrade needed\n\nAceConsole.embeds = AceConsole.embeds or {} -- table containing objects AceConsole is embedded in.\nAceConsole.commands = AceConsole.commands or {} -- table containing commands registered\nAceConsole.weakcommands = AceConsole.weakcommands or {} -- table containing self, command => func references for weak commands that don't persist through enable/disable\n\n-- Lua APIs\nlocal tconcat, tostring, select = table.concat, tostring, select\nlocal type, pairs, error = type, pairs, error\nlocal format, strfind, strsub = string.format, string.find, string.sub\nlocal max = math.max\n\n-- WoW APIs\nlocal _G = _G\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: DEFAULT_CHAT_FRAME, SlashCmdList, hash_SlashCmdList\n\nlocal tmp={}\nlocal function Print(self,frame,...)\n\tlocal n=0\n\tif self ~= AceConsole then\n\t\tn=n+1\n\t\ttmp[n] = \"|cff33ff99\"..tostring( self )..\"|r:\"\n\tend\n\tfor i=1, select(\"#\", ...) do\n\t\tn=n+1\n\t\ttmp[n] = tostring(select(i, ...))\n\tend\n\tframe:AddMessage( tconcat(tmp,\" \",1,n) )\nend\n\n--- Print to DEFAULT_CHAT_FRAME or given ChatFrame (anything with an .AddMessage function)\n-- @paramsig [chatframe ,] ...\n-- @param chatframe Custom ChatFrame to print to (or any frame with an .AddMessage function)\n-- @param ... List of any values to be printed\nfunction AceConsole:Print(...)\n\tlocal frame = ...\n\tif type(frame) == \"table\" and frame.AddMessage then\t-- Is first argument something with an .AddMessage member?\n\t\treturn Print(self, frame, select(2,...))\n\telse\n\t\treturn Print(self, DEFAULT_CHAT_FRAME, ...)\n\tend\nend\n\n\n--- Formatted (using format()) print to DEFAULT_CHAT_FRAME or given ChatFrame (anything with an .AddMessage function)\n-- @paramsig [chatframe ,] \"format\"[, ...]\n-- @param chatframe Custom ChatFrame to print to (or any frame with an .AddMessage function)\n-- @param format Format string - same syntax as standard Lua format()\n-- @param ... Arguments to the format string\nfunction AceConsole:Printf(...)\n\tlocal frame = ...\n\tif type(frame) == \"table\" and frame.AddMessage then\t-- Is first argument something with an .AddMessage member?\n\t\treturn Print(self, frame, format(select(2,...)))\n\telse\n\t\treturn Print(self, DEFAULT_CHAT_FRAME, format(...))\n\tend\nend\n\n\n\n\n--- Register a simple chat command\n-- @param command Chat command to be registered WITHOUT leading \"/\"\n-- @param func Function to call when the slash command is being used (funcref or methodname)\n-- @param persist if false, the command will be soft disabled/enabled when aceconsole is used as a mixin (default: true)\nfunction AceConsole:RegisterChatCommand( command, func, persist )\n\tif type(command)~=\"string\" then error([[Usage: AceConsole:RegisterChatCommand( \"command\", func[, persist ]): 'command' - expected a string]], 2) end\n\n\tif persist==nil then persist=true end\t-- I'd rather have my addon's \"/addon enable\" around if the author screws up. Having some extra slash regged when it shouldnt be isn't as destructive. True is a better default. /Mikk\n\n\tlocal name = \"ACECONSOLE_\"..command:upper()\n\n\tif type( func ) == \"string\" then\n\t\tSlashCmdList[name] = function(input, editBox)\n\t\t\tself[func](self, input, editBox)\n\t\tend\n\telse\n\t\tSlashCmdList[name] = func\n\tend\n\t_G[\"SLASH_\"..name..\"1\"] = \"/\"..command:lower()\n\tAceConsole.commands[command] = name\n\t-- non-persisting commands are registered for enabling disabling\n\tif not persist then\n\t\tif not AceConsole.weakcommands[self] then AceConsole.weakcommands[self] = {} end\n\t\tAceConsole.weakcommands[self][command] = func\n\tend\n\treturn true\nend\n\n--- Unregister a chatcommand\n-- @param command Chat command to be unregistered WITHOUT leading \"/\"\nfunction AceConsole:UnregisterChatCommand( command )\n\tlocal name = AceConsole.commands[command]\n\tif name then\n\t\tSlashCmdList[name] = nil\n\t\t_G[\"SLASH_\" .. name .. \"1\"] = nil\n\t\thash_SlashCmdList[\"/\" .. command:upper()] = nil\n\t\tAceConsole.commands[command] = nil\n\tend\nend\n\n--- Get an iterator over all Chat Commands registered with AceConsole\n-- @return Iterator (pairs) over all commands\nfunction AceConsole:IterateChatCommands() return pairs(AceConsole.commands) end\n\n\nlocal function nils(n, ...)\n\tif n>1 then\n\t\treturn nil, nils(n-1, ...)\n\telseif n==1 then\n\t\treturn nil, ...\n\telse\n\t\treturn ...\n\tend\nend\n\n\n--- Retreive one or more space-separated arguments from a string.\n-- Treats quoted strings and itemlinks as non-spaced.\n-- @param str The raw argument string\n-- @param numargs How many arguments to get (default 1)\n-- @param startpos Where in the string to start scanning (default  1)\n-- @return Returns arg1, arg2, ..., nextposition\\\\\n-- Missing arguments will be returned as nils. 'nextposition' is returned as 1e9 at the end of the string.\nfunction AceConsole:GetArgs(str, numargs, startpos)\n\tnumargs = numargs or 1\n\tstartpos = max(startpos or 1, 1)\n\n\tlocal pos=startpos\n\n\t-- find start of new arg\n\tpos = strfind(str, \"[^ ]\", pos)\n\tif not pos then\t-- whoops, end of string\n\t\treturn nils(numargs, 1e9)\n\tend\n\n\tif numargs<1 then\n\t\treturn pos\n\tend\n\n\t-- quoted or space separated? find out which pattern to use\n\tlocal delim_or_pipe\n\tlocal ch = strsub(str, pos, pos)\n\tif ch=='\"' then\n\t\tpos = pos + 1\n\t\tdelim_or_pipe='([|\"])'\n\telseif ch==\"'\" then\n\t\tpos = pos + 1\n\t\tdelim_or_pipe=\"([|'])\"\n\telse\n\t\tdelim_or_pipe=\"([| ])\"\n\tend\n\n\tstartpos = pos\n\n\twhile true do\n\t\t-- find delimiter or hyperlink\n\t\tlocal ch,_\n\t\tpos,_,ch = strfind(str, delim_or_pipe, pos)\n\n\t\tif not pos then break end\n\n\t\tif ch==\"|\" then\n\t\t\t-- some kind of escape\n\n\t\t\tif strsub(str,pos,pos+1)==\"|H\" then\n\t\t\t\t-- It's a |H....|hhyper link!|h\n\t\t\t\tpos=strfind(str, \"|h\", pos+2)\t-- first |h\n\t\t\t\tif not pos then break end\n\n\t\t\t\tpos=strfind(str, \"|h\", pos+2)\t-- second |h\n\t\t\t\tif not pos then break end\n\t\t\telseif strsub(str,pos, pos+1) == \"|T\" then\n\t\t\t\t-- It's a |T....|t  texture\n\t\t\t\tpos=strfind(str, \"|t\", pos+2)\n\t\t\t\tif not pos then break end\n\t\t\tend\n\n\t\t\tpos=pos+2 -- skip past this escape (last |h if it was a hyperlink)\n\n\t\telse\n\t\t\t-- found delimiter, done with this arg\n\t\t\treturn strsub(str, startpos, pos-1), AceConsole:GetArgs(str, numargs-1, pos+1)\n\t\tend\n\n\tend\n\n\t-- search aborted, we hit end of string. return it all as one argument. (yes, even if it's an unterminated quote or hyperlink)\n\treturn strsub(str, startpos), nils(numargs-1, 1e9)\nend\n\n\n--- embedding and embed handling\n\nlocal mixins = {\n\t\"Print\",\n\t\"Printf\",\n\t\"RegisterChatCommand\",\n\t\"UnregisterChatCommand\",\n\t\"GetArgs\",\n}\n\n-- Embeds AceConsole into the target object making the functions from the mixins list available on target:..\n-- @param target target object to embed AceBucket in\nfunction AceConsole:Embed( target )\n\tfor k, v in pairs( mixins ) do\n\t\ttarget[v] = self[v]\n\tend\n\tself.embeds[target] = true\n\treturn target\nend\n\nfunction AceConsole:OnEmbedEnable( target )\n\tif AceConsole.weakcommands[target] then\n\t\tfor command, func in pairs( AceConsole.weakcommands[target] ) do\n\t\t\ttarget:RegisterChatCommand( command, func, false, true ) -- nonpersisting and silent registry\n\t\tend\n\tend\nend\n\nfunction AceConsole:OnEmbedDisable( target )\n\tif AceConsole.weakcommands[target] then\n\t\tfor command, func in pairs( AceConsole.weakcommands[target] ) do\n\t\t\ttarget:UnregisterChatCommand( command ) -- TODO: this could potentially unregister a command from another application in case of command conflicts. Do we care?\n\t\tend\n\tend\nend\n\nfor addon in pairs(AceConsole.embeds) do\n\tAceConsole:Embed(addon)\nend\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceDB-3.0/AceDB-3.0.lua",
    "content": "--- **AceDB-3.0** manages the SavedVariables of your addon.\n-- It offers profile management, smart defaults and namespaces for modules.\\\\\n-- Data can be saved in different data-types, depending on its intended usage.\n-- The most common data-type is the `profile` type, which allows the user to choose\n-- the active profile, and manage the profiles of all of his characters.\\\\\n-- The following data types are available:\n-- * **char** Character-specific data. Every character has its own database.\n-- * **realm** Realm-specific data. All of the players characters on the same realm share this database.\n-- * **class** Class-specific data. All of the players characters of the same class share this database.\n-- * **race** Race-specific data. All of the players characters of the same race share this database.\n-- * **faction** Faction-specific data. All of the players characters of the same faction share this database.\n-- * **factionrealm** Faction and realm specific data. All of the players characters on the same realm and of the same faction share this database.\n-- * **locale** Locale specific data, based on the locale of the players game client.\n-- * **global** Global Data. All characters on the same account share this database.\n-- * **profile** Profile-specific data. All characters using the same profile share this database. The user can control which profile should be used.\n--\n-- Creating a new Database using the `:New` function will return a new DBObject. A database will inherit all functions\n-- of the DBObjectLib listed here. \\\\\n-- If you create a new namespaced child-database (`:RegisterNamespace`), you'll get a DBObject as well, but note\n-- that the child-databases cannot individually change their profile, and are linked to their parents profile - and because of that,\n-- the profile related APIs are not available. Only `:RegisterDefaults` and `:ResetProfile` are available on child-databases.\n--\n-- For more details on how to use AceDB-3.0, see the [[AceDB-3.0 Tutorial]].\n--\n-- You may also be interested in [[libdualspec-1-0|LibDualSpec-1.0]] to do profile switching automatically when switching specs.\n--\n-- @usage\n-- MyAddon = LibStub(\"AceAddon-3.0\"):NewAddon(\"DBExample\")\n--\n-- -- declare defaults to be used in the DB\n-- local defaults = {\n--   profile = {\n--     setting = true,\n--   }\n-- }\n--\n-- function MyAddon:OnInitialize()\n--   -- Assuming the .toc says ## SavedVariables: MyAddonDB\n--   self.db = LibStub(\"AceDB-3.0\"):New(\"MyAddonDB\", defaults, true)\n-- end\n-- @class file\n-- @name AceDB-3.0.lua\n-- @release $Id$\nlocal ACEDB_MAJOR, ACEDB_MINOR = \"AceDB-3.0\", 27\nlocal AceDB = LibStub:NewLibrary(ACEDB_MAJOR, ACEDB_MINOR)\n\nif not AceDB then return end -- No upgrade needed\n\n-- Lua APIs\nlocal type, pairs, next, error = type, pairs, next, error\nlocal setmetatable, rawset, rawget = setmetatable, rawset, rawget\n\n-- WoW APIs\nlocal _G = _G\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: LibStub\n\nAceDB.db_registry = AceDB.db_registry or {}\nAceDB.frame = AceDB.frame or CreateFrame(\"Frame\")\n\nlocal CallbackHandler\nlocal CallbackDummy = { Fire = function() end }\n\nlocal DBObjectLib = {}\n\n--[[-------------------------------------------------------------------------\n\tAceDB Utility Functions\n---------------------------------------------------------------------------]]\n\n-- Simple shallow copy for copying defaults\nlocal function copyTable(src, dest)\n\tif type(dest) ~= \"table\" then dest = {} end\n\tif type(src) == \"table\" then\n\t\tfor k,v in pairs(src) do\n\t\t\tif type(v) == \"table\" then\n\t\t\t\t-- try to index the key first so that the metatable creates the defaults, if set, and use that table\n\t\t\t\tv = copyTable(v, dest[k])\n\t\t\tend\n\t\t\tdest[k] = v\n\t\tend\n\tend\n\treturn dest\nend\n\n-- Called to add defaults to a section of the database\n--\n-- When a [\"*\"] default section is indexed with a new key, a table is returned\n-- and set in the host table.  These tables must be cleaned up by removeDefaults\n-- in order to ensure we don't write empty default tables.\nlocal function copyDefaults(dest, src)\n\t-- this happens if some value in the SV overwrites our default value with a non-table\n\t--if type(dest) ~= \"table\" then return end\n\tfor k, v in pairs(src) do\n\t\tif k == \"*\" or k == \"**\" then\n\t\t\tif type(v) == \"table\" then\n\t\t\t\t-- This is a metatable used for table defaults\n\t\t\t\tlocal mt = {\n\t\t\t\t\t-- This handles the lookup and creation of new subtables\n\t\t\t\t\t__index = function(t,k)\n\t\t\t\t\t\t\tif k == nil then return nil end\n\t\t\t\t\t\t\tlocal tbl = {}\n\t\t\t\t\t\t\tcopyDefaults(tbl, v)\n\t\t\t\t\t\t\trawset(t, k, tbl)\n\t\t\t\t\t\t\treturn tbl\n\t\t\t\t\t\tend,\n\t\t\t\t}\n\t\t\t\tsetmetatable(dest, mt)\n\t\t\t\t-- handle already existing tables in the SV\n\t\t\t\tfor dk, dv in pairs(dest) do\n\t\t\t\t\tif not rawget(src, dk) and type(dv) == \"table\" then\n\t\t\t\t\t\tcopyDefaults(dv, v)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\telse\n\t\t\t\t-- Values are not tables, so this is just a simple return\n\t\t\t\tlocal mt = {__index = function(t,k) return k~=nil and v or nil end}\n\t\t\t\tsetmetatable(dest, mt)\n\t\t\tend\n\t\telseif type(v) == \"table\" then\n\t\t\tif not rawget(dest, k) then rawset(dest, k, {}) end\n\t\t\tif type(dest[k]) == \"table\" then\n\t\t\t\tcopyDefaults(dest[k], v)\n\t\t\t\tif src['**'] then\n\t\t\t\t\tcopyDefaults(dest[k], src['**'])\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\tif rawget(dest, k) == nil then\n\t\t\t\trawset(dest, k, v)\n\t\t\tend\n\t\tend\n\tend\nend\n\n-- Called to remove all defaults in the default table from the database\nlocal function removeDefaults(db, defaults, blocker)\n\t-- remove all metatables from the db, so we don't accidentally create new sub-tables through them\n\tsetmetatable(db, nil)\n\t-- loop through the defaults and remove their content\n\tfor k,v in pairs(defaults) do\n\t\tif k == \"*\" or k == \"**\" then\n\t\t\tif type(v) == \"table\" then\n\t\t\t\t-- Loop through all the actual k,v pairs and remove\n\t\t\t\tfor key, value in pairs(db) do\n\t\t\t\t\tif type(value) == \"table\" then\n\t\t\t\t\t\t-- if the key was not explicitly specified in the defaults table, just strip everything from * and ** tables\n\t\t\t\t\t\tif defaults[key] == nil and (not blocker or blocker[key] == nil) then\n\t\t\t\t\t\t\tremoveDefaults(value, v)\n\t\t\t\t\t\t\t-- if the table is empty afterwards, remove it\n\t\t\t\t\t\t\tif next(value) == nil then\n\t\t\t\t\t\t\t\tdb[key] = nil\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t-- if it was specified, only strip ** content, but block values which were set in the key table\n\t\t\t\t\t\telseif k == \"**\" then\n\t\t\t\t\t\t\tremoveDefaults(value, v, defaults[key])\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\telseif k == \"*\" then\n\t\t\t\t-- check for non-table default\n\t\t\t\tfor key, value in pairs(db) do\n\t\t\t\t\tif defaults[key] == nil and v == value then\n\t\t\t\t\t\tdb[key] = nil\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\telseif type(v) == \"table\" and type(db[k]) == \"table\" then\n\t\t\t-- if a blocker was set, dive into it, to allow multi-level defaults\n\t\t\tremoveDefaults(db[k], v, blocker and blocker[k])\n\t\t\tif next(db[k]) == nil then\n\t\t\t\tdb[k] = nil\n\t\t\tend\n\t\telse\n\t\t\t-- check if the current value matches the default, and that its not blocked by another defaults table\n\t\t\tif db[k] == defaults[k] and (not blocker or blocker[k] == nil) then\n\t\t\t\tdb[k] = nil\n\t\t\tend\n\t\tend\n\tend\nend\n\n-- This is called when a table section is first accessed, to set up the defaults\nlocal function initSection(db, section, svstore, key, defaults)\n\tlocal sv = rawget(db, \"sv\")\n\n\tlocal tableCreated\n\tif not sv[svstore] then sv[svstore] = {} end\n\tif not sv[svstore][key] then\n\t\tsv[svstore][key] = {}\n\t\ttableCreated = true\n\tend\n\n\tlocal tbl = sv[svstore][key]\n\n\tif defaults then\n\t\tcopyDefaults(tbl, defaults)\n\tend\n\trawset(db, section, tbl)\n\n\treturn tableCreated, tbl\nend\n\n-- Metatable to handle the dynamic creation of sections and copying of sections.\nlocal dbmt = {\n\t__index = function(t, section)\n\t\t\tlocal keys = rawget(t, \"keys\")\n\t\t\tlocal key = keys[section]\n\t\t\tif key then\n\t\t\t\tlocal defaultTbl = rawget(t, \"defaults\")\n\t\t\t\tlocal defaults = defaultTbl and defaultTbl[section]\n\n\t\t\t\tif section == \"profile\" then\n\t\t\t\t\tlocal new = initSection(t, section, \"profiles\", key, defaults)\n\t\t\t\t\tif new then\n\t\t\t\t\t\t-- Callback: OnNewProfile, database, newProfileKey\n\t\t\t\t\t\tt.callbacks:Fire(\"OnNewProfile\", t, key)\n\t\t\t\t\tend\n\t\t\t\telseif section == \"profiles\" then\n\t\t\t\t\tlocal sv = rawget(t, \"sv\")\n\t\t\t\t\tif not sv.profiles then sv.profiles = {} end\n\t\t\t\t\trawset(t, \"profiles\", sv.profiles)\n\t\t\t\telseif section == \"global\" then\n\t\t\t\t\tlocal sv = rawget(t, \"sv\")\n\t\t\t\t\tif not sv.global then sv.global = {} end\n\t\t\t\t\tif defaults then\n\t\t\t\t\t\tcopyDefaults(sv.global, defaults)\n\t\t\t\t\tend\n\t\t\t\t\trawset(t, section, sv.global)\n\t\t\t\telse\n\t\t\t\t\tinitSection(t, section, section, key, defaults)\n\t\t\t\tend\n\t\t\tend\n\n\t\t\treturn rawget(t, section)\n\t\tend\n}\n\nlocal function validateDefaults(defaults, keyTbl, offset)\n\tif not defaults then return end\n\toffset = offset or 0\n\tfor k in pairs(defaults) do\n\t\tif not keyTbl[k] or k == \"profiles\" then\n\t\t\terror((\"Usage: AceDBObject:RegisterDefaults(defaults): '%s' is not a valid datatype.\"):format(k), 3 + offset)\n\t\tend\n\tend\nend\n\nlocal preserve_keys = {\n\t[\"callbacks\"] = true,\n\t[\"RegisterCallback\"] = true,\n\t[\"UnregisterCallback\"] = true,\n\t[\"UnregisterAllCallbacks\"] = true,\n\t[\"children\"] = true,\n}\n\nlocal realmKey = GetRealmName()\nlocal charKey = UnitName(\"player\") .. \" - \" .. realmKey\nlocal _, classKey = UnitClass(\"player\")\nlocal _, raceKey = UnitRace(\"player\")\nlocal factionKey = UnitFactionGroup(\"player\")\nlocal factionrealmKey = factionKey .. \" - \" .. realmKey\nlocal factionrealmregionKey = factionrealmKey .. \" - \" .. string.sub(GetCVar(\"realmList\"), 1, 2):upper()\nlocal localeKey = GetLocale():lower()\n\n-- Actual database initialization function\nlocal function initdb(sv, defaults, defaultProfile, olddb, parent)\n\t-- Generate the database keys for each section\n\n\t-- map \"true\" to our \"Default\" profile\n\tif defaultProfile == true then defaultProfile = \"Default\" end\n\n\tlocal profileKey\n\tif not parent then\n\t\t-- Make a container for profile keys\n\t\tif not sv.profileKeys then sv.profileKeys = {} end\n\n\t\t-- Try to get the profile selected from the char db\n\t\tprofileKey = sv.profileKeys[charKey] or defaultProfile or charKey\n\n\t\t-- save the selected profile for later\n\t\tsv.profileKeys[charKey] = profileKey\n\telse\n\t\t-- Use the profile of the parents DB\n\t\tprofileKey = parent.keys.profile or defaultProfile or charKey\n\n\t\t-- clear the profileKeys in the DB, namespaces don't need to store them\n\t\tsv.profileKeys = nil\n\tend\n\n\t-- This table contains keys that enable the dynamic creation\n\t-- of each section of the table.  The 'global' and 'profiles'\n\t-- have a key of true, since they are handled in a special case\n\tlocal keyTbl= {\n\t\t[\"char\"] = charKey,\n\t\t[\"realm\"] = realmKey,\n\t\t[\"class\"] = classKey,\n\t\t[\"race\"] = raceKey,\n\t\t[\"faction\"] = factionKey,\n\t\t[\"factionrealm\"] = factionrealmKey,\n\t\t[\"factionrealmregion\"] = factionrealmregionKey,\n\t\t[\"profile\"] = profileKey,\n\t\t[\"locale\"] = localeKey,\n\t\t[\"global\"] = true,\n\t\t[\"profiles\"] = true,\n\t}\n\n\tvalidateDefaults(defaults, keyTbl, 1)\n\n\t-- This allows us to use this function to reset an entire database\n\t-- Clear out the old database\n\tif olddb then\n\t\tfor k,v in pairs(olddb) do if not preserve_keys[k] then olddb[k] = nil end end\n\tend\n\n\t-- Give this database the metatable so it initializes dynamically\n\tlocal db = setmetatable(olddb or {}, dbmt)\n\n\tif not rawget(db, \"callbacks\") then\n\t\t-- try to load CallbackHandler-1.0 if it loaded after our library\n\t\tif not CallbackHandler then CallbackHandler = LibStub:GetLibrary(\"CallbackHandler-1.0\", true) end\n\t\tdb.callbacks = CallbackHandler and CallbackHandler:New(db) or CallbackDummy\n\tend\n\n\t-- Copy methods locally into the database object, to avoid hitting\n\t-- the metatable when calling methods\n\n\tif not parent then\n\t\tfor name, func in pairs(DBObjectLib) do\n\t\t\tdb[name] = func\n\t\tend\n\telse\n\t\t-- hack this one in\n\t\tdb.RegisterDefaults = DBObjectLib.RegisterDefaults\n\t\tdb.ResetProfile = DBObjectLib.ResetProfile\n\tend\n\n\t-- Set some properties in the database object\n\tdb.profiles = sv.profiles\n\tdb.keys = keyTbl\n\tdb.sv = sv\n\t--db.sv_name = name\n\tdb.defaults = defaults\n\tdb.parent = parent\n\n\t-- store the DB in the registry\n\tAceDB.db_registry[db] = true\n\n\treturn db\nend\n\n-- handle PLAYER_LOGOUT\n-- strip all defaults from all databases\n-- and cleans up empty sections\nlocal function logoutHandler(frame, event)\n\tif event == \"PLAYER_LOGOUT\" then\n\t\tfor db in pairs(AceDB.db_registry) do\n\t\t\tdb.callbacks:Fire(\"OnDatabaseShutdown\", db)\n\t\t\tdb:RegisterDefaults(nil)\n\n\t\t\t-- cleanup sections that are empty without defaults\n\t\t\tlocal sv = rawget(db, \"sv\")\n\t\t\tfor section in pairs(db.keys) do\n\t\t\t\tif rawget(sv, section) then\n\t\t\t\t\t-- global is special, all other sections have sub-entrys\n\t\t\t\t\t-- also don't delete empty profiles on main dbs, only on namespaces\n\t\t\t\t\tif section ~= \"global\" and (section ~= \"profiles\" or rawget(db, \"parent\")) then\n\t\t\t\t\t\tfor key in pairs(sv[section]) do\n\t\t\t\t\t\t\tif not next(sv[section][key]) then\n\t\t\t\t\t\t\t\tsv[section][key] = nil\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\tif not next(sv[section]) then\n\t\t\t\t\t\tsv[section] = nil\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend\n\nAceDB.frame:RegisterEvent(\"PLAYER_LOGOUT\")\nAceDB.frame:SetScript(\"OnEvent\", logoutHandler)\n\n\n--[[-------------------------------------------------------------------------\n\tAceDB Object Method Definitions\n---------------------------------------------------------------------------]]\n\n--- Sets the defaults table for the given database object by clearing any\n-- that are currently set, and then setting the new defaults.\n-- @param defaults A table of defaults for this database\nfunction DBObjectLib:RegisterDefaults(defaults)\n\tif defaults and type(defaults) ~= \"table\" then\n\t\terror((\"Usage: AceDBObject:RegisterDefaults(defaults): 'defaults' - table or nil expected, got %q.\"):format(type(defaults)), 2)\n\tend\n\n\tvalidateDefaults(defaults, self.keys)\n\n\t-- Remove any currently set defaults\n\tif self.defaults then\n\t\tfor section,key in pairs(self.keys) do\n\t\t\tif self.defaults[section] and rawget(self, section) then\n\t\t\t\tremoveDefaults(self[section], self.defaults[section])\n\t\t\tend\n\t\tend\n\tend\n\n\t-- Set the DBObject.defaults table\n\tself.defaults = defaults\n\n\t-- Copy in any defaults, only touching those sections already created\n\tif defaults then\n\t\tfor section,key in pairs(self.keys) do\n\t\t\tif defaults[section] and rawget(self, section) then\n\t\t\t\tcopyDefaults(self[section], defaults[section])\n\t\t\tend\n\t\tend\n\tend\nend\n\n--- Changes the profile of the database and all of it's namespaces to the\n-- supplied named profile\n-- @param name The name of the profile to set as the current profile\nfunction DBObjectLib:SetProfile(name)\n\tif type(name) ~= \"string\" then\n\t\terror((\"Usage: AceDBObject:SetProfile(name): 'name' - string expected, got %q.\"):format(type(name)), 2)\n\tend\n\n\t-- changing to the same profile, dont do anything\n\tif name == self.keys.profile then return end\n\n\tlocal oldProfile = self.profile\n\tlocal defaults = self.defaults and self.defaults.profile\n\n\t-- Callback: OnProfileShutdown, database\n\tself.callbacks:Fire(\"OnProfileShutdown\", self)\n\n\tif oldProfile and defaults then\n\t\t-- Remove the defaults from the old profile\n\t\tremoveDefaults(oldProfile, defaults)\n\tend\n\n\tself.profile = nil\n\tself.keys[\"profile\"] = name\n\n\t-- if the storage exists, save the new profile\n\t-- this won't exist on namespaces.\n\tif self.sv.profileKeys then\n\t\tself.sv.profileKeys[charKey] = name\n\tend\n\n\t-- populate to child namespaces\n\tif self.children then\n\t\tfor _, db in pairs(self.children) do\n\t\t\tDBObjectLib.SetProfile(db, name)\n\t\tend\n\tend\n\n\t-- Callback: OnProfileChanged, database, newProfileKey\n\tself.callbacks:Fire(\"OnProfileChanged\", self, name)\nend\n\n--- Returns a table with the names of the existing profiles in the database.\n-- You can optionally supply a table to re-use for this purpose.\n-- @param tbl A table to store the profile names in (optional)\nfunction DBObjectLib:GetProfiles(tbl)\n\tif tbl and type(tbl) ~= \"table\" then\n\t\terror((\"Usage: AceDBObject:GetProfiles(tbl): 'tbl' - table or nil expected, got %q.\"):format(type(tbl)), 2)\n\tend\n\n\t-- Clear the container table\n\tif tbl then\n\t\tfor k,v in pairs(tbl) do tbl[k] = nil end\n\telse\n\t\ttbl = {}\n\tend\n\n\tlocal curProfile = self.keys.profile\n\n\tlocal i = 0\n\tfor profileKey in pairs(self.profiles) do\n\t\ti = i + 1\n\t\ttbl[i] = profileKey\n\t\tif curProfile and profileKey == curProfile then curProfile = nil end\n\tend\n\n\t-- Add the current profile, if it hasn't been created yet\n\tif curProfile then\n\t\ti = i + 1\n\t\ttbl[i] = curProfile\n\tend\n\n\treturn tbl, i\nend\n\n--- Returns the current profile name used by the database\nfunction DBObjectLib:GetCurrentProfile()\n\treturn self.keys.profile\nend\n\n--- Deletes a named profile.  This profile must not be the active profile.\n-- @param name The name of the profile to be deleted\n-- @param silent If true, do not raise an error when the profile does not exist\nfunction DBObjectLib:DeleteProfile(name, silent)\n\tif type(name) ~= \"string\" then\n\t\terror((\"Usage: AceDBObject:DeleteProfile(name): 'name' - string expected, got %q.\"):format(type(name)), 2)\n\tend\n\n\tif self.keys.profile == name then\n\t\terror((\"Cannot delete the active profile (%q) in an AceDBObject.\"):format(name), 2)\n\tend\n\n\tif not rawget(self.profiles, name) and not silent then\n\t\terror((\"Cannot delete profile %q as it does not exist.\"):format(name), 2)\n\tend\n\n\tself.profiles[name] = nil\n\n\t-- populate to child namespaces\n\tif self.children then\n\t\tfor _, db in pairs(self.children) do\n\t\t\tDBObjectLib.DeleteProfile(db, name, true)\n\t\tend\n\tend\n\n\t-- switch all characters that use this profile back to the default\n\tif self.sv.profileKeys then\n\t\tfor key, profile in pairs(self.sv.profileKeys) do\n\t\t\tif profile == name then\n\t\t\t\tself.sv.profileKeys[key] = nil\n\t\t\tend\n\t\tend\n\tend\n\n\t-- Callback: OnProfileDeleted, database, profileKey\n\tself.callbacks:Fire(\"OnProfileDeleted\", self, name)\nend\n\n--- Copies a named profile into the current profile, overwriting any conflicting\n-- settings.\n-- @param name The name of the profile to be copied into the current profile\n-- @param silent If true, do not raise an error when the profile does not exist\nfunction DBObjectLib:CopyProfile(name, silent)\n\tif type(name) ~= \"string\" then\n\t\terror((\"Usage: AceDBObject:CopyProfile(name): 'name' - string expected, got %q.\"):format(type(name)), 2)\n\tend\n\n\tif name == self.keys.profile then\n\t\terror((\"Cannot have the same source and destination profiles (%q).\"):format(name), 2)\n\tend\n\n\tif not rawget(self.profiles, name) and not silent then\n\t\terror((\"Cannot copy profile %q as it does not exist.\"):format(name), 2)\n\tend\n\n\t-- Reset the profile before copying\n\tDBObjectLib.ResetProfile(self, nil, true)\n\n\tlocal profile = self.profile\n\tlocal source = self.profiles[name]\n\n\tcopyTable(source, profile)\n\n\t-- populate to child namespaces\n\tif self.children then\n\t\tfor _, db in pairs(self.children) do\n\t\t\tDBObjectLib.CopyProfile(db, name, true)\n\t\tend\n\tend\n\n\t-- Callback: OnProfileCopied, database, sourceProfileKey\n\tself.callbacks:Fire(\"OnProfileCopied\", self, name)\nend\n\n--- Resets the current profile to the default values (if specified).\n-- @param noChildren if set to true, the reset will not be populated to the child namespaces of this DB object\n-- @param noCallbacks if set to true, won't fire the OnProfileReset callback\nfunction DBObjectLib:ResetProfile(noChildren, noCallbacks)\n\tlocal profile = self.profile\n\n\tfor k,v in pairs(profile) do\n\t\tprofile[k] = nil\n\tend\n\n\tlocal defaults = self.defaults and self.defaults.profile\n\tif defaults then\n\t\tcopyDefaults(profile, defaults)\n\tend\n\n\t-- populate to child namespaces\n\tif self.children and not noChildren then\n\t\tfor _, db in pairs(self.children) do\n\t\t\tDBObjectLib.ResetProfile(db, nil, noCallbacks)\n\t\tend\n\tend\n\n\t-- Callback: OnProfileReset, database\n\tif not noCallbacks then\n\t\tself.callbacks:Fire(\"OnProfileReset\", self)\n\tend\nend\n\n--- Resets the entire database, using the string defaultProfile as the new default\n-- profile.\n-- @param defaultProfile The profile name to use as the default\nfunction DBObjectLib:ResetDB(defaultProfile)\n\tif defaultProfile and type(defaultProfile) ~= \"string\" then\n\t\terror((\"Usage: AceDBObject:ResetDB(defaultProfile): 'defaultProfile' - string or nil expected, got %q.\"):format(type(defaultProfile)), 2)\n\tend\n\n\tlocal sv = self.sv\n\tfor k,v in pairs(sv) do\n\t\tsv[k] = nil\n\tend\n\n\tinitdb(sv, self.defaults, defaultProfile, self)\n\n\t-- fix the child namespaces\n\tif self.children then\n\t\tif not sv.namespaces then sv.namespaces = {} end\n\t\tfor name, db in pairs(self.children) do\n\t\t\tif not sv.namespaces[name] then sv.namespaces[name] = {} end\n\t\t\tinitdb(sv.namespaces[name], db.defaults, self.keys.profile, db, self)\n\t\tend\n\tend\n\n\t-- Callback: OnDatabaseReset, database\n\tself.callbacks:Fire(\"OnDatabaseReset\", self)\n\t-- Callback: OnProfileChanged, database, profileKey\n\tself.callbacks:Fire(\"OnProfileChanged\", self, self.keys[\"profile\"])\n\n\treturn self\nend\n\n--- Creates a new database namespace, directly tied to the database.  This\n-- is a full scale database in it's own rights other than the fact that\n-- it cannot control its profile individually\n-- @param name The name of the new namespace\n-- @param defaults A table of values to use as defaults\nfunction DBObjectLib:RegisterNamespace(name, defaults)\n\tif type(name) ~= \"string\" then\n\t\terror((\"Usage: AceDBObject:RegisterNamespace(name, defaults): 'name' - string expected, got %q.\"):format(type(name)), 2)\n\tend\n\tif defaults and type(defaults) ~= \"table\" then\n\t\terror((\"Usage: AceDBObject:RegisterNamespace(name, defaults): 'defaults' - table or nil expected, got %q.\"):format(type(defaults)), 2)\n\tend\n\tif self.children and self.children[name] then\n\t\terror((\"Usage: AceDBObject:RegisterNamespace(name, defaults): 'name' - a namespace called %q already exists.\"):format(name), 2)\n\tend\n\n\tlocal sv = self.sv\n\tif not sv.namespaces then sv.namespaces = {} end\n\tif not sv.namespaces[name] then\n\t\tsv.namespaces[name] = {}\n\tend\n\n\tlocal newDB = initdb(sv.namespaces[name], defaults, self.keys.profile, nil, self)\n\n\tif not self.children then self.children = {} end\n\tself.children[name] = newDB\n\treturn newDB\nend\n\n--- Returns an already existing namespace from the database object.\n-- @param name The name of the new namespace\n-- @param silent if true, the addon is optional, silently return nil if its not found\n-- @usage\n-- local namespace = self.db:GetNamespace('namespace')\n-- @return the namespace object if found\nfunction DBObjectLib:GetNamespace(name, silent)\n\tif type(name) ~= \"string\" then\n\t\terror((\"Usage: AceDBObject:GetNamespace(name): 'name' - string expected, got %q.\"):format(type(name)), 2)\n\tend\n\tif not silent and not (self.children and self.children[name]) then\n\t\terror((\"Usage: AceDBObject:GetNamespace(name): 'name' - namespace %q does not exist.\"):format(name), 2)\n\tend\n\tif not self.children then self.children = {} end\n\treturn self.children[name]\nend\n\n--[[-------------------------------------------------------------------------\n\tAceDB Exposed Methods\n---------------------------------------------------------------------------]]\n\n--- Creates a new database object that can be used to handle database settings and profiles.\n-- By default, an empty DB is created, using a character specific profile.\n--\n-- You can override the default profile used by passing any profile name as the third argument,\n-- or by passing //true// as the third argument to use a globally shared profile called \"Default\".\n--\n-- Note that there is no token replacement in the default profile name, passing a defaultProfile as \"char\"\n-- will use a profile named \"char\", and not a character-specific profile.\n-- @param tbl The name of variable, or table to use for the database\n-- @param defaults A table of database defaults\n-- @param defaultProfile The name of the default profile. If not set, a character specific profile will be used as the default.\n-- You can also pass //true// to use a shared global profile called \"Default\".\n-- @usage\n-- -- Create an empty DB using a character-specific default profile.\n-- self.db = LibStub(\"AceDB-3.0\"):New(\"MyAddonDB\")\n-- @usage\n-- -- Create a DB using defaults and using a shared default profile\n-- self.db = LibStub(\"AceDB-3.0\"):New(\"MyAddonDB\", defaults, true)\nfunction AceDB:New(tbl, defaults, defaultProfile)\n\tif type(tbl) == \"string\" then\n\t\tlocal name = tbl\n\t\ttbl = _G[name]\n\t\tif not tbl then\n\t\t\ttbl = {}\n\t\t\t_G[name] = tbl\n\t\tend\n\tend\n\n\tif type(tbl) ~= \"table\" then\n\t\terror((\"Usage: AceDB:New(tbl, defaults, defaultProfile): 'tbl' - table expected, got %q.\"):format(type(tbl)), 2)\n\tend\n\n\tif defaults and type(defaults) ~= \"table\" then\n\t\terror((\"Usage: AceDB:New(tbl, defaults, defaultProfile): 'defaults' - table expected, got %q.\"):format(type(defaults)), 2)\n\tend\n\n\tif defaultProfile and type(defaultProfile) ~= \"string\" and defaultProfile ~= true then\n\t\terror((\"Usage: AceDB:New(tbl, defaults, defaultProfile): 'defaultProfile' - string or true expected, got %q.\"):format(type(defaultProfile)), 2)\n\tend\n\n\treturn initdb(tbl, defaults, defaultProfile)\nend\n\n-- upgrade existing databases\nfor db in pairs(AceDB.db_registry) do\n\tif not db.parent then\n\t\tfor name,func in pairs(DBObjectLib) do\n\t\t\tdb[name] = func\n\t\tend\n\telse\n\t\tdb.RegisterDefaults = DBObjectLib.RegisterDefaults\n\t\tdb.ResetProfile = DBObjectLib.ResetProfile\n\tend\nend\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceEvent-3.0/AceEvent-3.0.lua",
    "content": "--- AceEvent-3.0 provides event registration and secure dispatching.\n-- All dispatching is done using **CallbackHandler-1.0**. AceEvent is a simple wrapper around\n-- CallbackHandler, and dispatches all game events or addon message to the registrees.\n--\n-- **AceEvent-3.0** can be embeded into your addon, either explicitly by calling AceEvent:Embed(MyAddon) or by\n-- specifying it as an embeded library in your AceAddon. All functions will be available on your addon object\n-- and can be accessed directly, without having to explicitly call AceEvent itself.\\\\\n-- It is recommended to embed AceEvent, otherwise you'll have to specify a custom `self` on all calls you\n-- make into AceEvent.\n-- @class file\n-- @name AceEvent-3.0\n-- @release $Id$\nlocal CallbackHandler = LibStub(\"CallbackHandler-1.0\")\n\nlocal MAJOR, MINOR = \"AceEvent-3.0\", 4\nlocal AceEvent = LibStub:NewLibrary(MAJOR, MINOR)\n\nif not AceEvent then return end\n\n-- Lua APIs\nlocal pairs = pairs\n\nAceEvent.frame = AceEvent.frame or CreateFrame(\"Frame\", \"AceEvent30Frame\") -- our event frame\nAceEvent.embeds = AceEvent.embeds or {} -- what objects embed this lib\n\n-- APIs and registry for blizzard events, using CallbackHandler lib\nif not AceEvent.events then\n\tAceEvent.events = CallbackHandler:New(AceEvent,\n\t\t\"RegisterEvent\", \"UnregisterEvent\", \"UnregisterAllEvents\")\nend\n\nfunction AceEvent.events:OnUsed(target, eventname)\n\tAceEvent.frame:RegisterEvent(eventname)\nend\n\nfunction AceEvent.events:OnUnused(target, eventname)\n\tAceEvent.frame:UnregisterEvent(eventname)\nend\n\n\n-- APIs and registry for IPC messages, using CallbackHandler lib\nif not AceEvent.messages then\n\tAceEvent.messages = CallbackHandler:New(AceEvent,\n\t\t\"RegisterMessage\", \"UnregisterMessage\", \"UnregisterAllMessages\"\n\t)\n\tAceEvent.SendMessage = AceEvent.messages.Fire\nend\n\n--- embedding and embed handling\nlocal mixins = {\n\t\"RegisterEvent\", \"UnregisterEvent\",\n\t\"RegisterMessage\", \"UnregisterMessage\",\n\t\"SendMessage\",\n\t\"UnregisterAllEvents\", \"UnregisterAllMessages\",\n}\n\n--- Register for a Blizzard Event.\n-- The callback will be called with the optional `arg` as the first argument (if supplied), and the event name as the second (or first, if no arg was supplied)\n-- Any arguments to the event will be passed on after that.\n-- @name AceEvent:RegisterEvent\n-- @class function\n-- @paramsig event[, callback [, arg]]\n-- @param event The event to register for\n-- @param callback The callback function to call when the event is triggered (funcref or method, defaults to a method with the event name)\n-- @param arg An optional argument to pass to the callback function\n\n--- Unregister an event.\n-- @name AceEvent:UnregisterEvent\n-- @class function\n-- @paramsig event\n-- @param event The event to unregister\n\n--- Register for a custom AceEvent-internal message.\n-- The callback will be called with the optional `arg` as the first argument (if supplied), and the event name as the second (or first, if no arg was supplied)\n-- Any arguments to the event will be passed on after that.\n-- @name AceEvent:RegisterMessage\n-- @class function\n-- @paramsig message[, callback [, arg]]\n-- @param message The message to register for\n-- @param callback The callback function to call when the message is triggered (funcref or method, defaults to a method with the event name)\n-- @param arg An optional argument to pass to the callback function\n\n--- Unregister a message\n-- @name AceEvent:UnregisterMessage\n-- @class function\n-- @paramsig message\n-- @param message The message to unregister\n\n--- Send a message over the AceEvent-3.0 internal message system to other addons registered for this message.\n-- @name AceEvent:SendMessage\n-- @class function\n-- @paramsig message, ...\n-- @param message The message to send\n-- @param ... Any arguments to the message\n\n\n-- Embeds AceEvent into the target object making the functions from the mixins list available on target:..\n-- @param target target object to embed AceEvent in\nfunction AceEvent:Embed(target)\n\tfor k, v in pairs(mixins) do\n\t\ttarget[v] = self[v]\n\tend\n\tself.embeds[target] = true\n\treturn target\nend\n\n-- AceEvent:OnEmbedDisable( target )\n-- target (object) - target object that is being disabled\n--\n-- Unregister all events messages etc when the target disables.\n-- this method should be called by the target manually or by an addon framework\nfunction AceEvent:OnEmbedDisable(target)\n\ttarget:UnregisterAllEvents()\n\ttarget:UnregisterAllMessages()\nend\n\n-- Script to fire blizzard events into the event listeners\nlocal events = AceEvent.events\nAceEvent.frame:SetScript(\"OnEvent\", function(this, event, ...)\n\tevents:Fire(event, ...)\nend)\n\n--- Finally: upgrade our old embeds\nfor target, v in pairs(AceEvent.embeds) do\n\tAceEvent:Embed(target)\nend\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/AceGUI-3.0.lua",
    "content": "--- **AceGUI-3.0** provides access to numerous widgets which can be used to create GUIs.\n-- AceGUI is used by AceConfigDialog to create the option GUIs, but you can use it by itself\n-- to create any custom GUI. There are more extensive examples in the test suite in the Ace3 \n-- stand-alone distribution.\n--\n-- **Note**: When using AceGUI-3.0 directly, please do not modify the frames of the widgets directly,\n-- as any \"unknown\" change to the widgets will cause addons that get your widget out of the widget pool\n-- to misbehave. If you think some part of a widget should be modifiable, please open a ticket, and we\"ll\n-- implement a proper API to modify it.\n-- @usage\n-- local AceGUI = LibStub(\"AceGUI-3.0\")\n-- -- Create a container frame\n-- local f = AceGUI:Create(\"Frame\")\n-- f:SetCallback(\"OnClose\",function(widget) AceGUI:Release(widget) end)\n-- f:SetTitle(\"AceGUI-3.0 Example\")\n-- f:SetStatusText(\"Status Bar\")\n-- f:SetLayout(\"Flow\")\n-- -- Create a button\n-- local btn = AceGUI:Create(\"Button\")\n-- btn:SetWidth(170)\n-- btn:SetText(\"Button !\")\n-- btn:SetCallback(\"OnClick\", function() print(\"Click!\") end)\n-- -- Add the button to the container\n-- f:AddChild(btn)\n-- @class file\n-- @name AceGUI-3.0\n-- @release $Id: AceGUI-3.0.lua 924 2010-05-13 15:12:20Z nevcairiel $\nlocal ACEGUI_MAJOR, ACEGUI_MINOR = \"AceGUI-3.0\", 33\nlocal AceGUI, oldminor = LibStub:NewLibrary(ACEGUI_MAJOR, ACEGUI_MINOR)\n\nif not AceGUI then return end -- No upgrade needed\n\n-- Lua APIs\nlocal tconcat, tremove, tinsert = table.concat, table.remove, table.insert\nlocal select, pairs, next, type = select, pairs, next, type\nlocal error, assert, loadstring = error, assert, loadstring\nlocal setmetatable, rawget, rawset = setmetatable, rawget, rawset\nlocal math_max = math.max\n\n-- WoW APIs\nlocal UIParent = UIParent\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: geterrorhandler, LibStub\n\n--local con = LibStub(\"AceConsole-3.0\",true)\n\nAceGUI.WidgetRegistry = AceGUI.WidgetRegistry or {}\nAceGUI.LayoutRegistry = AceGUI.LayoutRegistry or {}\nAceGUI.WidgetBase = AceGUI.WidgetBase or {}\nAceGUI.WidgetContainerBase = AceGUI.WidgetContainerBase or {}\nAceGUI.WidgetVersions = AceGUI.WidgetVersions or {}\n \n-- local upvalues\nlocal WidgetRegistry = AceGUI.WidgetRegistry\nlocal LayoutRegistry = AceGUI.LayoutRegistry\nlocal WidgetVersions = AceGUI.WidgetVersions\n\n--[[\n\t xpcall safecall implementation\n]]\nlocal xpcall = xpcall\n\nlocal function errorhandler(err)\n\treturn geterrorhandler()(err)\nend\n\nlocal function CreateDispatcher(argCount)\n\tlocal code = [[\n\t\tlocal xpcall, eh = ...\n\t\tlocal method, ARGS\n\t\tlocal function call() return method(ARGS) end\n\t\n\t\tlocal function dispatch(func, ...)\n\t\t\tmethod = func\n\t\t\tif not method then return end\n\t\t\tARGS = ...\n\t\t\treturn xpcall(call, eh)\n\t\tend\n\t\n\t\treturn dispatch\n\t]]\n\t\n\tlocal ARGS = {}\n\tfor i = 1, argCount do ARGS[i] = \"arg\"..i end\n\tcode = code:gsub(\"ARGS\", tconcat(ARGS, \", \"))\n\treturn assert(loadstring(code, \"safecall Dispatcher[\"..argCount..\"]\"))(xpcall, errorhandler)\nend\n\nlocal Dispatchers = setmetatable({}, {__index=function(self, argCount)\n\tlocal dispatcher = CreateDispatcher(argCount)\n\trawset(self, argCount, dispatcher)\n\treturn dispatcher\nend})\nDispatchers[0] = function(func)\n\treturn xpcall(func, errorhandler)\nend\n \nlocal function safecall(func, ...)\n\treturn Dispatchers[select(\"#\", ...)](func, ...)\nend\n\n-- Recycling functions\nlocal newWidget, delWidget\ndo\n\t-- Version Upgrade in Minor 29\n\t-- Internal Storage of the objects changed, from an array table\n\t-- to a hash table, and additionally we introduced versioning on\n\t-- the widgets which would discard all widgets from a pre-29 version\n\t-- anyway, so we just clear the storage now, and don't try to \n\t-- convert the storage tables to the new format.\n\t-- This should generally not cause *many* widgets to end up in trash,\n\t-- since once dialogs are opened, all addons should be loaded already\n\t-- and AceGUI should be on the latest version available on the users\n\t-- setup.\n\t-- -- nevcairiel - Nov 2nd, 2009\n\tif oldminor and oldminor < 29 and AceGUI.objPools then\n\t\tAceGUI.objPools = nil\n\tend\n\t\n\tAceGUI.objPools = AceGUI.objPools or {}\n\tlocal objPools = AceGUI.objPools\n\t--Returns a new instance, if none are available either returns a new table or calls the given contructor\n\tfunction newWidget(type)\n\t\tif not WidgetRegistry[type] then\n\t\t\terror(\"Attempt to instantiate unknown widget type\", 2)\n\t\tend\n\t\t\n\t\tif not objPools[type] then\n\t\t\tobjPools[type] = {}\n\t\tend\n\t\t\n\t\tlocal newObj = next(objPools[type])\n\t\tif not newObj then\n\t\t\tnewObj = WidgetRegistry[type]()\n\t\t\tnewObj.AceGUIWidgetVersion = WidgetVersions[type]\n\t\telse\n\t\t\tobjPools[type][newObj] = nil\n\t\t\t-- if the widget is older then the latest, don't even try to reuse it\n\t\t\t-- just forget about it, and grab a new one.\n\t\t\tif not newObj.AceGUIWidgetVersion or newObj.AceGUIWidgetVersion < WidgetVersions[type] then\n\t\t\t\treturn newWidget(type)\n\t\t\tend\n\t\tend\n\t\treturn newObj\n\tend\n\t-- Releases an instance to the Pool\n\tfunction delWidget(obj,type)\n\t\tif not objPools[type] then\n\t\t\tobjPools[type] = {}\n\t\tend\n\t\tif objPools[type][obj] then\n\t\t\terror(\"Attempt to Release Widget that is already released\", 2)\n\t\tend\n\t\tobjPools[type][obj] = true\n\tend\nend\n\n\n-------------------\n-- API Functions --\n-------------------\n\n-- Gets a widget Object\n\n--- Create a new Widget of the given type.\n-- This function will instantiate a new widget (or use one from the widget pool), and call the\n-- OnAcquire function on it, before returning.\n-- @param type The type of the widget.\n-- @return The newly created widget.\nfunction AceGUI:Create(type)\n\tif WidgetRegistry[type] then\n\t\tlocal widget = newWidget(type)\n\n\t\tif rawget(widget, \"Acquire\") then\n\t\t\twidget.OnAcquire = widget.Acquire\n\t\t\twidget.Acquire = nil\n\t\telseif rawget(widget, \"Aquire\") then\n\t\t\twidget.OnAcquire = widget.Aquire\n\t\t\twidget.Aquire = nil\n\t\tend\n\t\t\n\t\tif rawget(widget, \"Release\") then\n\t\t\twidget.OnRelease = rawget(widget, \"Release\") \n\t\t\twidget.Release = nil\n\t\tend\n\t\t\n\t\tif widget.OnAcquire then\n\t\t\twidget:OnAcquire()\n\t\telse\n\t\t\terror((\"Widget type %s doesn't supply an OnAcquire Function\"):format(type))\n\t\tend\n\t\t-- Set the default Layout (\"List\")\n\t\tsafecall(widget.SetLayout, widget, \"List\")\n\t\tsafecall(widget.ResumeLayout, widget)\n\t\treturn widget\n\tend\nend\n\n--- Releases a widget Object.\n-- This function calls OnRelease on the widget and places it back in the widget pool.\n-- Any data on the widget is being erased, and the widget will be hidden.\\\\\n-- If this widget is a Container-Widget, all of its Child-Widgets will be releases as well.\n-- @param widget The widget to release\nfunction AceGUI:Release(widget)\n\tsafecall(widget.PauseLayout, widget)\n\twidget:Fire(\"OnRelease\")\n\tsafecall(widget.ReleaseChildren, widget)\n\n\tif widget.OnRelease then\n\t\twidget:OnRelease()\n--\telse\n--\t\terror((\"Widget type %s doesn't supply an OnRelease Function\"):format(widget.type))\n\tend\n\tfor k in pairs(widget.userdata) do\n\t\twidget.userdata[k] = nil\n\tend\n\tfor k in pairs(widget.events) do\n\t\twidget.events[k] = nil\n\tend\n\twidget.width = nil\n\twidget.relWidth = nil\n\twidget.height = nil\n\twidget.relHeight = nil\n\twidget.noAutoHeight = nil\n\twidget.frame:ClearAllPoints()\n\twidget.frame:Hide()\n\twidget.frame:SetParent(UIParent)\n\twidget.frame.width = nil\n\twidget.frame.height = nil\n\tif widget.content then\n\t\twidget.content.width = nil\n\t\twidget.content.height = nil\n\tend\n\tdelWidget(widget, widget.type)\nend\n\n-----------\n-- Focus --\n-----------\n\n\n--- Called when a widget has taken focus.\n-- e.g. Dropdowns opening, Editboxes gaining kb focus\n-- @param widget The widget that should be focused\nfunction AceGUI:SetFocus(widget)\n\tif self.FocusedWidget and self.FocusedWidget ~= widget then\n\t\tsafecall(self.FocusedWidget.ClearFocus, self.FocusedWidget)\n\tend\n\tself.FocusedWidget = widget\nend\n\n\n--- Called when something has happened that could cause widgets with focus to drop it\n-- e.g. titlebar of a frame being clicked\nfunction AceGUI:ClearFocus()\n\tif self.FocusedWidget then\n\t\tsafecall(self.FocusedWidget.ClearFocus, self.FocusedWidget)\n\t\tself.FocusedWidget = nil\n\tend\nend\n\n-------------\n-- Widgets --\n-------------\n--[[\n\tWidgets must provide the following functions\n\t\tOnAcquire() - Called when the object is acquired, should set everything to a default hidden state\n\t\t\n\tAnd the following members\n\t\tframe - the frame or derivitive object that will be treated as the widget for size and anchoring purposes\n\t\ttype - the type of the object, same as the name given to :RegisterWidget()\n\t\t\n\tWidgets contain a table called userdata, this is a safe place to store data associated with the wigdet\n\tIt will be cleared automatically when a widget is released\n\tPlacing values directly into a widget object should be avoided\n\t\n\tIf the Widget can act as a container for other Widgets the following\n\t\tcontent - frame or derivitive that children will be anchored to\n\t\t\n\tThe Widget can supply the following Optional Members\n\t\t:OnRelease() - Called when the object is Released, should remove any additional anchors and clear any data\n\t\t:OnWidthSet(width) - Called when the width of the widget is changed\n\t\t:OnHeightSet(height) - Called when the height of the widget is changed\n\t\t\tWidgets should not use the OnSizeChanged events of thier frame or content members, use these methods instead\n\t\t\tAceGUI already sets a handler to the event\n\t\t:LayoutFinished(width, height) - called after a layout has finished, the width and height will be the width and height of the\n\t\t\tarea used for controls. These can be nil if the layout used the existing size to layout the controls.\n\n]]\n\n--------------------------\n-- Widget Base Template --\n--------------------------\ndo\n\tlocal WidgetBase = AceGUI.WidgetBase \n\t\n\tWidgetBase.SetParent = function(self, parent)\n\t\tlocal frame = self.frame\n\t\tframe:SetParent(nil)\n\t\tframe:SetParent(parent.content)\n\t\tself.parent = parent\n\tend\n\t\n\tWidgetBase.SetCallback = function(self, name, func)\n\t\tif type(func) == \"function\" then\n\t\t\tself.events[name] = func\n\t\tend\n\tend\n\t\n\tWidgetBase.Fire = function(self, name, ...)\n\t\tif self.events[name] then\n\t\t\tlocal success, ret = safecall(self.events[name], self, name, ...)\n\t\t\tif success then\n\t\t\t\treturn ret\n\t\t\tend\n\t\tend\n\tend\n\t\n\tWidgetBase.SetWidth = function(self, width)\n\t\tself.frame:SetWidth(width)\n\t\tself.frame.width = width\n\t\tif self.OnWidthSet then\n\t\t\tself:OnWidthSet(width)\n\t\tend\n\tend\n\t\n\tWidgetBase.SetRelativeWidth = function(self, width)\n\t\tif width <= 0 or width > 1 then\n\t\t\terror(\":SetRelativeWidth(width): Invalid relative width.\", 2)\n\t\tend\n\t\tself.relWidth = width\n\t\tself.width = \"relative\"\n\tend\n\t\n\tWidgetBase.SetHeight = function(self, height)\n\t\tself.frame:SetHeight(height)\n\t\tself.frame.height = height\n\t\tif self.OnHeightSet then\n\t\t\tself:OnHeightSet(height)\n\t\tend\n\tend\n\t\n\t--[[ WidgetBase.SetRelativeHeight = function(self, height)\n\t\tif height <= 0 or height > 1 then\n\t\t\terror(\":SetRelativeHeight(height): Invalid relative height.\", 2)\n\t\tend\n\t\tself.relHeight = height\n\t\tself.height = \"relative\"\n\tend ]]\n\n\tWidgetBase.IsVisible = function(self)\n\t\treturn self.frame:IsVisible()\n\tend\n\t\n\tWidgetBase.IsShown= function(self)\n\t\treturn self.frame:IsShown()\n\tend\n\t\t\n\tWidgetBase.Release = function(self)\n\t\tAceGUI:Release(self)\n\tend\n\t\n\tWidgetBase.SetPoint = function(self, ...)\n\t\treturn self.frame:SetPoint(...)\n\tend\n\t\n\tWidgetBase.ClearAllPoints = function(self)\n\t\treturn self.frame:ClearAllPoints()\n\tend\n\t\n\tWidgetBase.GetNumPoints = function(self)\n\t\treturn self.frame:GetNumPoints()\n\tend\n\t\n\tWidgetBase.GetPoint = function(self, ...)\n\t\treturn self.frame:GetPoint(...)\n\tend\t\n\t\n\tWidgetBase.GetUserDataTable = function(self)\n\t\treturn self.userdata\n\tend\n\t\n\tWidgetBase.SetUserData = function(self, key, value)\n\t\tself.userdata[key] = value\n\tend\n\t\n\tWidgetBase.GetUserData = function(self, key)\n\t\treturn self.userdata[key]\n\tend\n\t\n\tWidgetBase.IsFullHeight = function(self)\n\t\treturn self.height == \"fill\"\n\tend\n\t\n\tWidgetBase.SetFullHeight = function(self, isFull)\n\t\tif isFull then\n\t\t\tself.height = \"fill\"\n\t\telse\n\t\t\tself.height = nil\n\t\tend\n\tend\n\t\n\tWidgetBase.IsFullWidth = function(self)\n\t\treturn self.width == \"fill\"\n\tend\n\t\t\n\tWidgetBase.SetFullWidth = function(self, isFull)\n\t\tif isFull then\n\t\t\tself.width = \"fill\"\n\t\telse\n\t\t\tself.width = nil\n\t\tend\n\tend\n\t\n--\tlocal function LayoutOnUpdate(this)\n--\t\tthis:SetScript(\"OnUpdate\",nil)\n--\t\tthis.obj:PerformLayout()\n--\tend\n\t\n\tlocal WidgetContainerBase = AceGUI.WidgetContainerBase\n\t\t\n\tWidgetContainerBase.PauseLayout = function(self)\n\t\tself.LayoutPaused = true\n\tend\n\t\n\tWidgetContainerBase.ResumeLayout = function(self)\n\t\tself.LayoutPaused = nil\n\tend\n\t\n\tWidgetContainerBase.PerformLayout = function(self)\n\t\tif self.LayoutPaused then\n\t\t\treturn\n\t\tend\n\t\tsafecall(self.LayoutFunc, self.content, self.children)\n\tend\n\t\n\t--call this function to layout, makes sure layed out objects get a frame to get sizes etc\n\tWidgetContainerBase.DoLayout = function(self)\n\t\tself:PerformLayout()\n--\t\tif not self.parent then\n--\t\t\tself.frame:SetScript(\"OnUpdate\", LayoutOnUpdate)\n--\t\tend\n\tend\n\t\n\tWidgetContainerBase.AddChild = function(self, child, beforeWidget)\n\t\tif beforeWidget then\n\t\t\tlocal siblingIndex = 1\n\t\t\tfor _, widget in pairs(self.children) do\n\t\t\t\tif widget == beforeWidget then\n\t\t\t\t\tbreak\n\t\t\t\tend\n\t\t\t\tsiblingIndex = siblingIndex + 1 \n\t\t\tend\n\t\t\ttinsert(self.children, siblingIndex, child)\n\t\telse\n\t\t\ttinsert(self.children, child)\n\t\tend\n\t\tchild:SetParent(self)\n\t\tchild.frame:Show()\n\t\tself:DoLayout()\n\tend\n\t\n\tWidgetContainerBase.AddChildren = function(self, ...)\n\t\tfor i = 1, select(\"#\", ...) do\n\t\t\tlocal child = select(i, ...)\n\t\t\ttinsert(self.children, child)\n\t\t\tchild:SetParent(self)\n\t\t\tchild.frame:Show()\n\t\tend\n\t\tself:DoLayout()\n\tend\n\t\n\tWidgetContainerBase.ReleaseChildren = function(self)\n\t\tlocal children = self.children\n\t\tfor i = 1,#children do\n\t\t\tAceGUI:Release(children[i])\n\t\t\tchildren[i] = nil\n\t\tend\n\tend\n\t\n\tWidgetContainerBase.SetLayout = function(self, Layout)\n\t\tself.LayoutFunc = AceGUI:GetLayout(Layout)\n\tend\n\n\tWidgetContainerBase.SetAutoAdjustHeight = function(self, adjust)\n\t\tif adjust then\n\t\t\tself.noAutoHeight = nil\n\t\telse\n\t\t\tself.noAutoHeight = true\n\t\tend\n\tend\n\n\tlocal function FrameResize(this)\n\t\tlocal self = this.obj\n\t\tif this:GetWidth() and this:GetHeight() then\n\t\t\tif self.OnWidthSet then\n\t\t\t\tself:OnWidthSet(this:GetWidth())\n\t\t\tend\n\t\t\tif self.OnHeightSet then\n\t\t\t\tself:OnHeightSet(this:GetHeight())\n\t\t\tend\n\t\tend\n\tend\n\t\n\tlocal function ContentResize(this)\n\t\tif this:GetWidth() and this:GetHeight() then\n\t\t\tthis.width = this:GetWidth()\n\t\t\tthis.height = this:GetHeight()\n\t\t\tthis.obj:DoLayout()\n\t\tend\n\tend\n\n\tsetmetatable(WidgetContainerBase, {__index=WidgetBase})\n\n\t--One of these function should be called on each Widget Instance as part of its creation process\n\t\n\t--- Register a widget-class as a container for newly created widgets.\n\t-- @param widget The widget class\n\tfunction AceGUI:RegisterAsContainer(widget)\n\t\twidget.children = {}\n\t\twidget.userdata = {}\n\t\twidget.events = {}\n\t\twidget.base = WidgetContainerBase\n\t\twidget.content.obj = widget\n\t\twidget.frame.obj = widget\n\t\twidget.content:SetScript(\"OnSizeChanged\", ContentResize)\n\t\twidget.frame:SetScript(\"OnSizeChanged\", FrameResize)\n\t\tsetmetatable(widget, {__index = WidgetContainerBase})\n\t\twidget:SetLayout(\"List\")\n\t\treturn widget\n\tend\n\t\n\t--- Register a widget-class as a widget.\n\t-- @param widget The widget class\n\tfunction AceGUI:RegisterAsWidget(widget)\n\t\twidget.userdata = {}\n\t\twidget.events = {}\n\t\twidget.base = WidgetBase\n\t\twidget.frame.obj = widget\n\t\twidget.frame:SetScript(\"OnSizeChanged\", FrameResize)\n\t\tsetmetatable(widget, {__index = WidgetBase})\n\t\treturn widget\n\tend\nend\n\n\n\n\n------------------\n-- Widget API   --\n------------------\n\n--- Registers a widget Constructor, this function returns a new instance of the Widget\n-- @param Name The name of the widget\n-- @param Constructor The widget constructor function\n-- @param Version The version of the widget\nfunction AceGUI:RegisterWidgetType(Name, Constructor, Version)\n\tassert(type(Constructor) == \"function\")\n\tassert(type(Version) == \"number\") \n\t\n\tlocal oldVersion = WidgetVersions[Name]\n\tif oldVersion and oldVersion >= Version then return end\n\t\n\tWidgetVersions[Name] = Version\n\tWidgetRegistry[Name] = Constructor\nend\n\n--- Registers a Layout Function\n-- @param Name The name of the layout\n-- @param LayoutFunc Reference to the layout function\nfunction AceGUI:RegisterLayout(Name, LayoutFunc)\n\tassert(type(LayoutFunc) == \"function\")\n\tif type(Name) == \"string\" then\n\t\tName = Name:upper()\n\tend\n\tLayoutRegistry[Name] = LayoutFunc\nend\n\n--- Get a Layout Function from the registry\n-- @param Name The name of the layout\nfunction AceGUI:GetLayout(Name)\n\tif type(Name) == \"string\" then\n\t\tName = Name:upper()\n\tend\n\treturn LayoutRegistry[Name]\nend\n\nAceGUI.counts = AceGUI.counts or {}\n\n--- A type-based counter to count the number of widgets created.\n-- This is used by widgets that require a named frame, e.g. when a Blizzard\n-- Template requires it.\n-- @param type The widget type\nfunction AceGUI:GetNextWidgetNum(type)\n\tif not self.counts[type] then\n\t\tself.counts[type] = 0\n\tend\n\tself.counts[type] = self.counts[type] + 1\n\treturn self.counts[type]\nend\n\n--- Return the number of created widgets for this type.\n-- In contrast to GetNextWidgetNum, the number is not incremented.\n-- @param type The widget type\nfunction AceGUI:GetWidgetCount(type)\n\treturn self.counts[type] or 0\nend\n\n--- Return the version of the currently registered widget type.\n-- @param type The widget type\nfunction AceGUI:GetWidgetVersion(type)\n\treturn WidgetVersions[type]\nend\n\n-------------\n-- Layouts --\n-------------\n\n--[[\n\tA Layout is a func that takes 2 parameters\n\t\tcontent - the frame that widgets will be placed inside\n\t\tchildren - a table containing the widgets to layout\n]]\n\n-- Very simple Layout, Children are stacked on top of each other down the left side\nAceGUI:RegisterLayout(\"List\",\n\tfunction(content, children)\n\t\tlocal height = 0\n\t\tlocal width = content.width or content:GetWidth() or 0\n\t\tfor i = 1, #children do\n\t\t\tlocal child = children[i]\n\t\t\t\n\t\t\tlocal frame = child.frame\n\t\t\tframe:ClearAllPoints()\n\t\t\tframe:Show()\n\t\t\tif i == 1 then\n\t\t\t\tframe:SetPoint(\"TOPLEFT\", content)\n\t\t\telse\n\t\t\t\tframe:SetPoint(\"TOPLEFT\", children[i-1].frame, \"BOTTOMLEFT\")\n\t\t\tend\n\t\t\t\n\t\t\tif child.width == \"fill\" then\n\t\t\t\tchild:SetWidth(width)\n\t\t\t\tframe:SetPoint(\"RIGHT\", content)\n\t\t\t\t\n\t\t\t\tif child.DoLayout then\n\t\t\t\t\tchild:DoLayout()\n\t\t\t\tend\n\t\t\telseif child.width == \"relative\" then\n\t\t\t\tchild:SetWidth(width * child.relWidth)\n\t\t\t\t\n\t\t\t\tif child.DoLayout then\n\t\t\t\t\tchild:DoLayout()\n\t\t\t\tend\n\t\t\tend\n\t\t\t\n\t\t\theight = height + (frame.height or frame:GetHeight() or 0)\n\t\tend\n\t\tsafecall(content.obj.LayoutFinished, content.obj, nil, height)\n\tend)\n\n-- A single control fills the whole content area\nAceGUI:RegisterLayout(\"Fill\",\n\tfunction(content, children)\n\t\tif children[1] then\n\t\t\tchildren[1]:SetWidth(content:GetWidth() or 0)\n\t\t\tchildren[1]:SetHeight(content:GetHeight() or 0)\n\t\t\tchildren[1].frame:SetAllPoints(content)\n\t\t\tchildren[1].frame:Show()\n\t\t\tsafecall(content.obj.LayoutFinished, content.obj, nil, children[1].frame:GetHeight())\n\t\tend\n\tend)\n\nAceGUI:RegisterLayout(\"Flow\",\n\tfunction(content, children)\n\t\t--used height so far\n\t\tlocal height = 0\n\t\t--width used in the current row\n\t\tlocal usedwidth = 0\n\t\t--height of the current row\n\t\tlocal rowheight = 0\n\t\tlocal rowoffset = 0\n\t\tlocal lastrowoffset\n\t\t\n\t\tlocal width = content.width or content:GetWidth() or 0\n\t\t\n\t\t--control at the start of the row\n\t\tlocal rowstart\n\t\tlocal rowstartoffset\n\t\tlocal lastrowstart\n\t\tlocal isfullheight\n\t\t\n\t\tlocal frameoffset\n\t\tlocal lastframeoffset\n\t\tlocal oversize \n\t\tfor i = 1, #children do\n\t\t\tlocal child = children[i]\n\t\t\toversize = nil\n\t\t\tlocal frame = child.frame\n\t\t\tlocal frameheight = frame.height or frame:GetHeight() or 0\n\t\t\tlocal framewidth = frame.width or frame:GetWidth() or 0\n\t\t\tlastframeoffset = frameoffset\n\t\t\t-- HACK: Why did we set a frameoffset of (frameheight / 2) ? \n\t\t\t-- That was moving all widgets half the widgets size down, is that intended?\n\t\t\t-- Actually, it seems to be neccessary for many cases, we'll leave it in for now.\n\t\t\t-- If widgets seem to anchor weirdly with this, provide a valid alignoffset for them.\n\t\t\t-- TODO: Investigate moar!\n\t\t\tframeoffset = child.alignoffset or (frameheight / 2)\n\t\t\t\n\t\t\tif child.width == \"relative\" then\n\t\t\t\tframewidth = width * child.relWidth\n\t\t\tend\n\t\t\t\n\t\t\tframe:Show()\n\t\t\tframe:ClearAllPoints()\n\t\t\tif i == 1 then\n\t\t\t\t-- anchor the first control to the top left\n\t\t\t\tframe:SetPoint(\"TOPLEFT\", content)\n\t\t\t\trowheight = frameheight\n\t\t\t\trowoffset = frameoffset\n\t\t\t\trowstart = frame\n\t\t\t\trowstartoffset = frameoffset\n\t\t\t\tusedwidth = framewidth\n\t\t\t\tif usedwidth > width then\n\t\t\t\t\toversize = true\n\t\t\t\tend\n\t\t\telse\n\t\t\t\t-- if there isn't available width for the control start a new row\n\t\t\t\t-- if a control is \"fill\" it will be on a row of its own full width\n\t\t\t\tif usedwidth == 0 or ((framewidth) + usedwidth > width) or child.width == \"fill\" then\n\t\t\t\t\tif isfullheight then\n\t\t\t\t\t\t-- a previous row has already filled the entire height, there's nothing we can usefully do anymore\n\t\t\t\t\t\t-- (maybe error/warn about this?)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tend\n\t\t\t\t\t--anchor the previous row, we will now know its height and offset\n\t\t\t\t\trowstart:SetPoint(\"TOPLEFT\", content, \"TOPLEFT\", 0, -(height + (rowoffset - rowstartoffset) + 3))\n\t\t\t\t\theight = height + rowheight + 3\n\t\t\t\t\t--save this as the rowstart so we can anchor it after the row is complete and we have the max height and offset of controls in it\n\t\t\t\t\trowstart = frame\n\t\t\t\t\trowstartoffset = frameoffset\n\t\t\t\t\trowheight = frameheight\n\t\t\t\t\trowoffset = frameoffset\n\t\t\t\t\tusedwidth = framewidth\n\t\t\t\t\tif usedwidth > width then\n\t\t\t\t\t\toversize = true\n\t\t\t\t\tend\n\t\t\t\t-- put the control on the current row, adding it to the width and checking if the height needs to be increased\n\t\t\t\telse\n\t\t\t\t\t--handles cases where the new height is higher than either control because of the offsets\n\t\t\t\t\t--math.max(rowheight-rowoffset+frameoffset, frameheight-frameoffset+rowoffset)\n\t\t\t\t\t\n\t\t\t\t\t--offset is always the larger of the two offsets\n\t\t\t\t\trowoffset = math_max(rowoffset, frameoffset)\n\t\t\t\t\trowheight = math_max(rowheight, rowoffset + (frameheight / 2))\n\t\t\t\t\t\n\t\t\t\t\tframe:SetPoint(\"TOPLEFT\", children[i-1].frame, \"TOPRIGHT\", 0, frameoffset - lastframeoffset)\n\t\t\t\t\tusedwidth = framewidth + usedwidth\n\t\t\t\tend\n\t\t\tend\n\n\t\t\tif child.width == \"fill\" then\n\t\t\t\tchild:SetWidth(width)\n\t\t\t\tframe:SetPoint(\"RIGHT\", content)\n\t\t\t\t\n\t\t\t\tusedwidth = 0\n\t\t\t\trowstart = frame\n\t\t\t\trowstartoffset = frameoffset\n\t\t\t\t\n\t\t\t\tif child.DoLayout then\n\t\t\t\t\tchild:DoLayout()\n\t\t\t\tend\n\t\t\t\trowheight = frame.height or frame:GetHeight() or 0\n\t\t\t\trowoffset = child.alignoffset or (rowheight / 2)\n\t\t\t\trowstartoffset = rowoffset\n\t\t\telseif child.width == \"relative\" then\n\t\t\t\tchild:SetWidth(width * child.relWidth)\n\t\t\t\t\n\t\t\t\tif child.DoLayout then\n\t\t\t\t\tchild:DoLayout()\n\t\t\t\tend\n\t\t\telseif oversize then\n\t\t\t\tif width > 1 then\n\t\t\t\t\tframe:SetPoint(\"RIGHT\", content)\n\t\t\t\tend\n\t\t\tend\n\t\t\t\n\t\t\tif child.height == \"fill\" then\n\t\t\t\tframe:SetPoint(\"BOTTOM\", content)\n\t\t\t\tisfullheight = true\n\t\t\tend\n\t\tend\n\t\t\n\t\t--anchor the last row, if its full height needs a special case since  its height has just been changed by the anchor\n\t\tif isfullheight then\n\t\t\trowstart:SetPoint(\"TOPLEFT\", content, \"TOPLEFT\", 0, -height)\n\t\telseif rowstart then\n\t\t\trowstart:SetPoint(\"TOPLEFT\", content, \"TOPLEFT\", 0, -(height + (rowoffset - rowstartoffset) + 3))\n\t\tend\n\t\t\n\t\theight = height + rowheight + 3\n\t\tsafecall(content.obj.LayoutFinished, content.obj, nil, height)\n\tend)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/AceGUI-3.0.xml",
    "content": "<Ui xmlns=\"http://www.blizzard.com/wow/ui/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.blizzard.com/wow/ui/\n..\\FrameXML\\UI.xsd\">\n\t<Script file=\"AceGUI-3.0.lua\"/>\n\t<!-- Container -->\n\t<Script file=\"widgets\\AceGUIContainer-BlizOptionsGroup.lua\"/>\n\t<Script file=\"widgets\\AceGUIContainer-DropDownGroup.lua\"/>\n\t<Script file=\"widgets\\AceGUIContainer-Frame.lua\"/>\n\t<Script file=\"widgets\\AceGUIContainer-InlineGroup.lua\"/>\n\t<Script file=\"widgets\\AceGUIContainer-ScrollFrame.lua\"/>\n\t<Script file=\"widgets\\AceGUIContainer-SimpleGroup.lua\"/>\n\t<Script file=\"widgets\\AceGUIContainer-TabGroup.lua\"/>\n\t<Script file=\"widgets\\AceGUIContainer-TreeGroup.lua\"/>\n\t<Script file=\"widgets\\AceGUIContainer-Window.lua\"/>\n\t<!-- Widgets -->\n\t<Script file=\"widgets\\AceGUIWidget-Button.lua\"/>\n\t<Script file=\"widgets\\AceGUIWidget-CheckBox.lua\"/>\n\t<Script file=\"widgets\\AceGUIWidget-ColorPicker.lua\"/>\n\t<Script file=\"widgets\\AceGUIWidget-DropDown.lua\"/>\n\t<Script file=\"widgets\\AceGUIWidget-DropDown-Items.lua\"/>\n\t<Script file=\"widgets\\AceGUIWidget-EditBox.lua\"/>\n\t<Script file=\"widgets\\AceGUIWidget-Heading.lua\"/>\n\t<Script file=\"widgets\\AceGUIWidget-Icon.lua\"/>\n\t<Script file=\"widgets\\AceGUIWidget-InteractiveLabel.lua\"/>\n\t<Script file=\"widgets\\AceGUIWidget-Keybinding.lua\"/>\n\t<Script file=\"widgets\\AceGUIWidget-Label.lua\"/>\n\t<Script file=\"widgets\\AceGUIWidget-MultiLineEditBox.lua\"/>\n\t<Script file=\"widgets\\AceGUIWidget-Slider.lua\"/>\n</Ui>\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIContainer-BlizOptionsGroup.lua",
    "content": "--[[-----------------------------------------------------------------------------\nBlizOptionsGroup Container\nSimple container widget for the integration of AceGUI into the Blizzard Interface Options\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"BlizOptionsGroup\", 20\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal pairs = pairs\n\n-- WoW APIs\nlocal CreateFrame = CreateFrame\n\n--[[-----------------------------------------------------------------------------\nScripts\n-------------------------------------------------------------------------------]]\n\nlocal function OnShow(frame)\n\tframe.obj:Fire(\"OnShow\")\nend\n\nlocal function OnHide(frame)\n\tframe.obj:Fire(\"OnHide\")\nend\n\n--[[-----------------------------------------------------------------------------\nSupport functions\n-------------------------------------------------------------------------------]]\n\nlocal function okay(frame)\n\tframe.obj:Fire(\"okay\")\nend\n\nlocal function cancel(frame)\n\tframe.obj:Fire(\"cancel\")\nend\n\nlocal function defaults(frame)\n\tframe.obj:Fire(\"defaults\")\nend\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\n\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\tself:SetName()\n\t\tself:SetTitle()\n\tend,\n\n\t-- [\"OnRelease\"] = nil,\n\n\t[\"OnWidthSet\"] = function(self, width)\n\t\tlocal content = self.content\n\t\tlocal contentwidth = width - 63\n\t\tif contentwidth < 0 then\n\t\t\tcontentwidth = 0\n\t\tend\n\t\tcontent:SetWidth(contentwidth)\n\t\tcontent.width = contentwidth\n\tend,\n\n\t[\"OnHeightSet\"] = function(self, height)\n\t\tlocal content = self.content\n\t\tlocal contentheight = height - 26\n\t\tif contentheight < 0 then\n\t\t\tcontentheight = 0\n\t\tend\n\t\tcontent:SetHeight(contentheight)\n\t\tcontent.height = contentheight\n\tend,\n\n\t[\"SetName\"] = function(self, name, parent)\n\t\tself.frame.name = name\n\t\tself.frame.parent = parent\n\tend,\n\n\t[\"SetTitle\"] = function(self, title)\n\t\tlocal content = self.content\n\t\tcontent:ClearAllPoints()\n\t\tif not title or title == \"\" then\n\t\t\tcontent:SetPoint(\"TOPLEFT\", 10, -10)\n\t\t\tself.label:SetText(\"\")\n\t\telse\n\t\t\tcontent:SetPoint(\"TOPLEFT\", 10, -40)\n\t\t\tself.label:SetText(title)\n\t\tend\n\t\tcontent:SetPoint(\"BOTTOMRIGHT\", -10, 10)\n\tend\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal function Constructor()\n\tlocal frame = CreateFrame(\"Frame\")\n\tframe:Hide()\n\n\t-- support functions for the Blizzard Interface Options\n\tframe.okay = okay\n\tframe.cancel = cancel\n\tframe.defaults = defaults\n\n\tframe:SetScript(\"OnHide\", OnHide)\n\tframe:SetScript(\"OnShow\", OnShow)\n\n\tlocal label = frame:CreateFontString(nil, \"OVERLAY\", \"GameFontNormalLarge\")\n\tlabel:SetPoint(\"TOPLEFT\", 10, -15)\n\tlabel:SetPoint(\"BOTTOMRIGHT\", frame, \"TOPRIGHT\", 10, -45)\n\tlabel:SetJustifyH(\"LEFT\")\n\tlabel:SetJustifyV(\"TOP\")\n\n\t--Container Support\n\tlocal content = CreateFrame(\"Frame\", nil, frame)\n\tcontent:SetPoint(\"TOPLEFT\", 10, -10)\n\tcontent:SetPoint(\"BOTTOMRIGHT\", -10, 10)\n\n\tlocal widget = {\n\t\tlabel   = label,\n\t\tframe   = frame,\n\t\tcontent = content,\n\t\ttype    = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\n\treturn AceGUI:RegisterAsContainer(widget)\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua",
    "content": "--[[-----------------------------------------------------------------------------\nDropdownGroup Container\nContainer controlled by a dropdown on the top.\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"DropdownGroup\", 20\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal assert, pairs, type = assert, pairs, type\n\n-- WoW APIs\nlocal CreateFrame = CreateFrame\n\n--[[-----------------------------------------------------------------------------\nScripts\n-------------------------------------------------------------------------------]]\nlocal function SelectedGroup(self, event, value)\n\tlocal group = self.parentgroup\n\tlocal status = group.status or group.localstatus\n\tstatus.selected = value\n\tself.parentgroup:Fire(\"OnGroupSelected\", value)\nend\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\tself.dropdown:SetText(\"\")\n\t\tself:SetDropdownWidth(200)\n\t\tself:SetTitle(\"\")\n\tend,\n\n\t[\"OnRelease\"] = function(self)\n\t\tself.dropdown.list = nil\n\t\tself.status = nil\n\t\tfor k in pairs(self.localstatus) do\n\t\t\tself.localstatus[k] = nil\n\t\tend\n\tend,\n\n\t[\"SetTitle\"] = function(self, title)\n\t\tself.titletext:SetText(title)\n\t\tself.dropdown.frame:ClearAllPoints()\n\t\tif title and title ~= \"\" then\n\t\t\tself.dropdown.frame:SetPoint(\"TOPRIGHT\", -2, 0)\n\t\telse\n\t\t\tself.dropdown.frame:SetPoint(\"TOPLEFT\", -1, 0)\n\t\tend\n\tend,\n\n\t[\"SetGroupList\"] = function(self,list)\n\t\tself.dropdown:SetList(list)\n\tend,\n\n\t[\"SetStatusTable\"] = function(self, status)\n\t\tassert(type(status) == \"table\")\n\t\tself.status = status\n\tend,\n\n\t[\"SetGroup\"] = function(self,group)\n\t\tself.dropdown:SetValue(group)\n\t\tlocal status = self.status or self.localstatus\n\t\tstatus.selected = group\n\t\tself:Fire(\"OnGroupSelected\", group)\n\tend,\n\n\t[\"OnWidthSet\"] = function(self, width)\n\t\tlocal content = self.content\n\t\tlocal contentwidth = width - 26\n\t\tif contentwidth < 0 then\n\t\t\tcontentwidth = 0\n\t\tend\n\t\tcontent:SetWidth(contentwidth)\n\t\tcontent.width = contentwidth\n\tend,\n\n\t[\"OnHeightSet\"] = function(self, height)\n\t\tlocal content = self.content\n\t\tlocal contentheight = height - 63\n\t\tif contentheight < 0 then\n\t\t\tcontentheight = 0\n\t\tend\n\t\tcontent:SetHeight(contentheight)\n\t\tcontent.height = contentheight\n\tend,\n\n\t[\"LayoutFinished\"] = function(self, width, height)\n\t\tself:SetHeight((height or 0) + 63)\n\tend,\n\n\t[\"SetDropdownWidth\"] = function(self, width)\n\t\tself.dropdown:SetWidth(width)\n\tend\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal PaneBackdrop  = {\n\tbgFile = \"Interface\\\\ChatFrame\\\\ChatFrameBackground\",\n\tedgeFile = \"Interface\\\\Tooltips\\\\UI-Tooltip-Border\",\n\ttile = true, tileSize = 16, edgeSize = 16,\n\tinsets = { left = 3, right = 3, top = 5, bottom = 3 }\n}\n\nlocal function Constructor()\n\tlocal frame = CreateFrame(\"Frame\")\n\tframe:SetHeight(100)\n\tframe:SetWidth(100)\n\tframe:SetFrameStrata(\"FULLSCREEN_DIALOG\")\n\n\tlocal titletext = frame:CreateFontString(nil, \"OVERLAY\", \"GameFontNormal\")\n\ttitletext:SetPoint(\"TOPLEFT\", 4, -5)\n\ttitletext:SetPoint(\"TOPRIGHT\", -4, -5)\n\ttitletext:SetJustifyH(\"LEFT\")\n\ttitletext:SetHeight(18)\n\n\tlocal dropdown = AceGUI:Create(\"Dropdown\")\n\tdropdown.frame:SetParent(frame)\n\tdropdown.frame:SetFrameLevel(dropdown.frame:GetFrameLevel() + 2)\n\tdropdown:SetCallback(\"OnValueChanged\", SelectedGroup)\n\tdropdown.frame:SetPoint(\"TOPLEFT\", -1, 0)\n\tdropdown.frame:Show()\n\tdropdown:SetLabel(\"\")\n\n\tlocal border = CreateFrame(\"Frame\", nil, frame)\n\tborder:SetPoint(\"TOPLEFT\", 0, -26)\n\tborder:SetPoint(\"BOTTOMRIGHT\", 0, 3)\n\tborder:SetBackdrop(PaneBackdrop)\n\tborder:SetBackdropColor(0.1,0.1,0.1,0.5)\n\tborder:SetBackdropBorderColor(0.4,0.4,0.4)\n\n\t--Container Support\n\tlocal content = CreateFrame(\"Frame\", nil, border)\n\tcontent:SetPoint(\"TOPLEFT\", 10, -10)\n\tcontent:SetPoint(\"BOTTOMRIGHT\", -10, 10)\n\n\tlocal widget = {\n\t\tframe       = frame,\n\t\tlocalstatus = {},\n\t\ttitletext   = titletext,\n\t\tdropdown    = dropdown,\n\t\tborder      = border,\n\t\tcontent     = content,\n\t\ttype        = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\tdropdown.parentgroup = widget\n\t\n\treturn AceGUI:RegisterAsContainer(widget)\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua",
    "content": "--[[-----------------------------------------------------------------------------\nFrame Container\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"Frame\", 21\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal pairs, assert, type = pairs, assert, type\nlocal wipe = table.wipe\n\n-- WoW APIs\nlocal PlaySound = PlaySound\nlocal CreateFrame, UIParent = CreateFrame, UIParent\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: CLOSE\n\n--[[-----------------------------------------------------------------------------\nScripts\n-------------------------------------------------------------------------------]]\nlocal function Button_OnClick(frame)\n\tPlaySound(\"gsTitleOptionExit\")\n\tframe.obj:Hide()\nend\n\nlocal function Frame_OnClose(frame)\n\tframe.obj:Fire(\"OnClose\")\nend\n\nlocal function Frame_OnMouseDown(frame)\n\tAceGUI:ClearFocus()\nend\n\nlocal function Title_OnMouseDown(frame)\n\tframe:GetParent():StartMoving()\n\tAceGUI:ClearFocus()\nend\n\nlocal function MoverSizer_OnMouseUp(mover)\n\tlocal frame = mover:GetParent()\n\tframe:StopMovingOrSizing()\n\tlocal self = frame.obj\n\tlocal status = self.status or self.localstatus\n\tstatus.width = frame:GetWidth()\n\tstatus.height = frame:GetHeight()\n\tstatus.top = frame:GetTop()\n\tstatus.left = frame:GetLeft()\nend\n\nlocal function SizerSE_OnMouseDown(frame)\n\tframe:GetParent():StartSizing(\"BOTTOMRIGHT\")\n\tAceGUI:ClearFocus()\nend\n\nlocal function SizerS_OnMouseDown(frame)\n\tframe:GetParent():StartSizing(\"BOTTOM\")\n\tAceGUI:ClearFocus()\nend\n\nlocal function SizerE_OnMouseDown(frame)\n\tframe:GetParent():StartSizing(\"RIGHT\")\n\tAceGUI:ClearFocus()\nend\n\nlocal function StatusBar_OnEnter(frame)\n\tframe.obj:Fire(\"OnEnterStatusBar\")\nend\n\nlocal function StatusBar_OnLeave(frame)\n\tframe.obj:Fire(\"OnLeaveStatusBar\")\nend\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\tself.frame:SetParent(UIParent)\n\t\tself.frame:SetFrameStrata(\"FULLSCREEN_DIALOG\")\n\t\tself:SetTitle()\n\t\tself:SetStatusText()\n\t\tself:ApplyStatus()\n\t\tself:Show()\n\tend,\n\n\t[\"OnRelease\"] = function(self)\n\t\tself.status = nil\n\t\twipe(self.localstatus)\n\tend,\n\n\t[\"OnWidthSet\"] = function(self, width)\n\t\tlocal content = self.content\n\t\tlocal contentwidth = width - 34\n\t\tif contentwidth < 0 then\n\t\t\tcontentwidth = 0\n\t\tend\n\t\tcontent:SetWidth(contentwidth)\n\t\tcontent.width = contentwidth\n\tend,\n\n\t[\"OnHeightSet\"] = function(self, height)\n\t\tlocal content = self.content\n\t\tlocal contentheight = height - 57\n\t\tif contentheight < 0 then\n\t\t\tcontentheight = 0\n\t\tend\n\t\tcontent:SetHeight(contentheight)\n\t\tcontent.height = contentheight\n\tend,\n\n\t[\"SetTitle\"] = function(self, title)\n\t\tself.titletext:SetText(title)\n\tend,\n\n\t[\"SetStatusText\"] = function(self, text)\n\t\tself.statustext:SetText(text)\n\tend,\n\n\t[\"Hide\"] = function(self)\n\t\tself.frame:Hide()\n\tend,\n\n\t[\"Show\"] = function(self)\n\t\tself.frame:Show()\n\tend,\n\n\t-- called to set an external table to store status in\n\t[\"SetStatusTable\"] = function(self, status)\n\t\tassert(type(status) == \"table\")\n\t\tself.status = status\n\t\tself:ApplyStatus()\n\tend,\n\n\t[\"ApplyStatus\"] = function(self)\n\t\tlocal status = self.status or self.localstatus\n\t\tlocal frame = self.frame\n\t\tself:SetWidth(status.width or 700)\n\t\tself:SetHeight(status.height or 500)\n\t\tframe:ClearAllPoints()\n\t\tif status.top and status.left then\n\t\t\tframe:SetPoint(\"TOP\", UIParent, \"BOTTOM\", 0, status.top)\n\t\t\tframe:SetPoint(\"LEFT\", UIParent, \"LEFT\", status.left, 0)\n\t\telse\n\t\t\tframe:SetPoint(\"CENTER\")\n\t\tend\n\tend\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal FrameBackdrop = {\n\tbgFile = \"Interface\\\\DialogFrame\\\\UI-DialogBox-Background\",\n\tedgeFile = \"Interface\\\\DialogFrame\\\\UI-DialogBox-Border\",\n\ttile = true, tileSize = 32, edgeSize = 32,\n\tinsets = { left = 8, right = 8, top = 8, bottom = 8 }\n}\n\nlocal PaneBackdrop  = {\n\tbgFile = \"Interface\\\\ChatFrame\\\\ChatFrameBackground\",\n\tedgeFile = \"Interface\\\\Tooltips\\\\UI-Tooltip-Border\",\n\ttile = true, tileSize = 16, edgeSize = 16,\n\tinsets = { left = 3, right = 3, top = 5, bottom = 3 }\n}\n\nlocal function Constructor()\n\tlocal frame = CreateFrame(\"Frame\", nil, UIParent)\n\tframe:Hide()\n\n\tframe:EnableMouse(true)\n\tframe:SetMovable(true)\n\tframe:SetResizable(true)\n\tframe:SetFrameStrata(\"FULLSCREEN_DIALOG\")\n\tframe:SetBackdrop(FrameBackdrop)\n\tframe:SetBackdropColor(0, 0, 0, 1)\n\tframe:SetMinResize(400, 200)\n\tframe:SetToplevel(true)\n\tframe:SetScript(\"OnHide\", Frame_OnClose)\n\tframe:SetScript(\"OnMouseDown\", Frame_OnMouseDown)\n\n\tlocal closebutton = CreateFrame(\"Button\", nil, frame, \"UIPanelButtonTemplate\")\n\tclosebutton:SetScript(\"OnClick\", Button_OnClick)\n\tclosebutton:SetPoint(\"BOTTOMRIGHT\", -27, 17)\n\tclosebutton:SetHeight(20)\n\tclosebutton:SetWidth(100)\n\tclosebutton:SetText(CLOSE)\n\n\tlocal statusbg = CreateFrame(\"Button\", nil, frame)\n\tstatusbg:SetPoint(\"BOTTOMLEFT\", 15, 15)\n\tstatusbg:SetPoint(\"BOTTOMRIGHT\", -132, 15)\n\tstatusbg:SetHeight(24)\n\tstatusbg:SetBackdrop(PaneBackdrop)\n\tstatusbg:SetBackdropColor(0.1,0.1,0.1)\n\tstatusbg:SetBackdropBorderColor(0.4,0.4,0.4)\n\tstatusbg:SetScript(\"OnEnter\", StatusBar_OnEnter)\n\tstatusbg:SetScript(\"OnLeave\", StatusBar_OnLeave)\n\n\tlocal statustext = statusbg:CreateFontString(nil, \"OVERLAY\", \"GameFontNormal\")\n\tstatustext:SetPoint(\"TOPLEFT\", 7, -2)\n\tstatustext:SetPoint(\"BOTTOMRIGHT\", -7, 2)\n\tstatustext:SetHeight(20)\n\tstatustext:SetJustifyH(\"LEFT\")\n\tstatustext:SetText(\"\")\n\n\tlocal titlebg = frame:CreateTexture(nil, \"OVERLAY\")\n\ttitlebg:SetTexture(\"Interface\\\\DialogFrame\\\\UI-DialogBox-Header\")\n\ttitlebg:SetTexCoord(0.31, 0.67, 0, 0.63)\n\ttitlebg:SetPoint(\"TOP\", 0, 12)\n\ttitlebg:SetWidth(100)\n\ttitlebg:SetHeight(40)\n\n\tlocal title = CreateFrame(\"Frame\", nil, frame)\n\ttitle:EnableMouse(true)\n\ttitle:SetScript(\"OnMouseDown\", Title_OnMouseDown)\n\ttitle:SetScript(\"OnMouseUp\", MoverSizer_OnMouseUp)\n\ttitle:SetAllPoints(titlebg)\n\n\tlocal titletext = title:CreateFontString(nil, \"OVERLAY\", \"GameFontNormal\")\n\ttitletext:SetPoint(\"TOP\", titlebg, \"TOP\", 0, -14)\n\n\tlocal titlebg_l = frame:CreateTexture(nil, \"OVERLAY\")\n\ttitlebg_l:SetTexture(\"Interface\\\\DialogFrame\\\\UI-DialogBox-Header\")\n\ttitlebg_l:SetTexCoord(0.21, 0.31, 0, 0.63)\n\ttitlebg_l:SetPoint(\"RIGHT\", titlebg, \"LEFT\")\n\ttitlebg_l:SetWidth(30)\n\ttitlebg_l:SetHeight(40)\n\n\tlocal titlebg_r = frame:CreateTexture(nil, \"OVERLAY\")\n\ttitlebg_r:SetTexture(\"Interface\\\\DialogFrame\\\\UI-DialogBox-Header\")\n\ttitlebg_r:SetTexCoord(0.67, 0.77, 0, 0.63)\n\ttitlebg_r:SetPoint(\"LEFT\", titlebg, \"RIGHT\")\n\ttitlebg_r:SetWidth(30)\n\ttitlebg_r:SetHeight(40)\n\n\tlocal sizer_se = CreateFrame(\"Frame\", nil, frame)\n\tsizer_se:SetPoint(\"BOTTOMRIGHT\")\n\tsizer_se:SetWidth(25)\n\tsizer_se:SetHeight(25)\n\tsizer_se:EnableMouse()\n\tsizer_se:SetScript(\"OnMouseDown\",SizerSE_OnMouseDown)\n\tsizer_se:SetScript(\"OnMouseUp\", MoverSizer_OnMouseUp)\n\n\tlocal line1 = sizer_se:CreateTexture(nil, \"BACKGROUND\")\n\tline1:SetWidth(14)\n\tline1:SetHeight(14)\n\tline1:SetPoint(\"BOTTOMRIGHT\", -8, 8)\n\tline1:SetTexture(\"Interface\\\\Tooltips\\\\UI-Tooltip-Border\")\n\tlocal x = 0.1 * 14/17\n\tline1:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5)\n\n\tlocal line2 = sizer_se:CreateTexture(nil, \"BACKGROUND\")\n\tline2:SetWidth(8)\n\tline2:SetHeight(8)\n\tline2:SetPoint(\"BOTTOMRIGHT\", -8, 8)\n\tline2:SetTexture(\"Interface\\\\Tooltips\\\\UI-Tooltip-Border\")\n\tlocal x = 0.1 * 8/17\n\tline2:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5)\n\n\tlocal sizer_s = CreateFrame(\"Frame\", nil, frame)\n\tsizer_s:SetPoint(\"BOTTOMRIGHT\", -25, 0)\n\tsizer_s:SetPoint(\"BOTTOMLEFT\")\n\tsizer_s:SetHeight(25)\n\tsizer_s:EnableMouse(true)\n\tsizer_s:SetScript(\"OnMouseDown\", SizerS_OnMouseDown)\n\tsizer_s:SetScript(\"OnMouseUp\", MoverSizer_OnMouseUp)\n\n\tlocal sizer_e = CreateFrame(\"Frame\", nil, frame)\n\tsizer_e:SetPoint(\"BOTTOMRIGHT\", 0, 25)\n\tsizer_e:SetPoint(\"TOPRIGHT\")\n\tsizer_e:SetWidth(25)\n\tsizer_e:EnableMouse(true)\n\tsizer_e:SetScript(\"OnMouseDown\", SizerE_OnMouseDown)\n\tsizer_e:SetScript(\"OnMouseUp\", MoverSizer_OnMouseUp)\n\n\t--Container Support\n\tlocal content = CreateFrame(\"Frame\", nil, frame)\n\tcontent:SetPoint(\"TOPLEFT\", 17, -27)\n\tcontent:SetPoint(\"BOTTOMRIGHT\", -17, 40)\n\n\tlocal widget = {\n\t\tlocalstatus = {},\n\t\ttitletext   = titletext,\n\t\tstatustext  = statustext,\n\t\tcontent     = content,\n\t\tframe       = frame,\n\t\ttype        = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\tclosebutton.obj, statusbg.obj = widget, widget\n\n\treturn AceGUI:RegisterAsContainer(widget)\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIContainer-InlineGroup.lua",
    "content": "--[[-----------------------------------------------------------------------------\nInlineGroup Container\nSimple container widget that creates a visible \"box\" with an optional title.\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"InlineGroup\", 20\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal pairs = pairs\n\n-- WoW APIs\nlocal CreateFrame, UIParent = CreateFrame, UIParent\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\tself:SetWidth(300)\n\t\tself:SetHeight(100)\n\tend,\n\n\t-- [\"OnRelease\"] = nil,\n\n\t[\"SetTitle\"] = function(self,title)\n\t\tself.titletext:SetText(title)\n\tend,\n\n\n\t[\"LayoutFinished\"] = function(self, width, height)\n\t\tif self.noAutoHeight then return end\n\t\tself:SetHeight((height or 0) + 40)\n\tend,\n\n\t[\"OnWidthSet\"] = function(self, width)\n\t\tlocal content = self.content\n\t\tlocal contentwidth = width - 20\n\t\tif contentwidth < 0 then\n\t\t\tcontentwidth = 0\n\t\tend\n\t\tcontent:SetWidth(contentwidth)\n\t\tcontent.width = contentwidth\n\tend,\n\n\t[\"OnHeightSet\"] = function(self, height)\n\t\tlocal content = self.content\n\t\tlocal contentheight = height - 20\n\t\tif contentheight < 0 then\n\t\t\tcontentheight = 0\n\t\tend\n\t\tcontent:SetHeight(contentheight)\n\t\tcontent.height = contentheight\n\tend\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal PaneBackdrop  = {\n\tbgFile = \"Interface\\\\ChatFrame\\\\ChatFrameBackground\",\n\tedgeFile = \"Interface\\\\Tooltips\\\\UI-Tooltip-Border\",\n\ttile = true, tileSize = 16, edgeSize = 16,\n\tinsets = { left = 3, right = 3, top = 5, bottom = 3 }\n}\n\nlocal function Constructor()\n\tlocal frame = CreateFrame(\"Frame\", nil, UIParent)\n\tframe:SetFrameStrata(\"FULLSCREEN_DIALOG\")\n\n\tlocal titletext = frame:CreateFontString(nil, \"OVERLAY\", \"GameFontNormal\")\n\ttitletext:SetPoint(\"TOPLEFT\", 14, 0)\n\ttitletext:SetPoint(\"TOPRIGHT\", -14, 0)\n\ttitletext:SetJustifyH(\"LEFT\")\n\ttitletext:SetHeight(18)\n\n\tlocal border = CreateFrame(\"Frame\", nil, frame)\n\tborder:SetPoint(\"TOPLEFT\", 0, -17)\n\tborder:SetPoint(\"BOTTOMRIGHT\", -1, 3)\n\tborder:SetBackdrop(PaneBackdrop)\n\tborder:SetBackdropColor(0.1, 0.1, 0.1, 0.5)\n\tborder:SetBackdropBorderColor(0.4, 0.4, 0.4)\n\n\t--Container Support\n\tlocal content = CreateFrame(\"Frame\", nil, border)\n\tcontent:SetPoint(\"TOPLEFT\", 10, -10)\n\tcontent:SetPoint(\"BOTTOMRIGHT\", -10, 10)\n\n\tlocal widget = {\n\t\tframe     = frame,\n\t\tcontent   = content,\n\t\ttitletext = titletext,\n\t\ttype      = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\n\treturn AceGUI:RegisterAsContainer(widget)\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua",
    "content": "--[[-----------------------------------------------------------------------------\nScrollFrame Container\nPlain container that scrolls its content and doesn't grow in height.\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"ScrollFrame\", 21\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal pairs, assert, type = pairs, assert, type\nlocal min, max, floor, abs = math.min, math.max, math.floor, math.abs\n\n-- WoW APIs\nlocal CreateFrame, UIParent = CreateFrame, UIParent\n\n--[[-----------------------------------------------------------------------------\nSupport functions\n-------------------------------------------------------------------------------]]\nlocal function FixScrollOnUpdate(frame)\n\tframe:SetScript(\"OnUpdate\", nil)\n\tframe.obj:FixScroll()\nend\n\n--[[-----------------------------------------------------------------------------\nScripts\n-------------------------------------------------------------------------------]]\nlocal function ScrollFrame_OnMouseWheel(frame, value)\n\tframe.obj:MoveScroll(value)\nend\n\nlocal function ScrollFrame_OnSizeChanged(frame)\n\tframe:SetScript(\"OnUpdate\", FixScrollOnUpdate)\nend\n\nlocal function ScrollBar_OnScrollValueChanged(frame, value)\n\tframe.obj:SetScroll(value)\nend\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self) \n\t\tself:SetScroll(0)\n\tend,\n\n\t[\"OnRelease\"] = function(self)\n\t\tself.status = nil\n\t\tfor k in pairs(self.localstatus) do\n\t\t\tself.localstatus[k] = nil\n\t\tend\n\t\tself.scrollframe:SetPoint(\"BOTTOMRIGHT\")\n\t\tself.scrollbar:Hide()\n\t\tself.scrollBarShown = nil\n\t\tself.content.height, self.content.width = nil, nil\n\tend,\n\n\t[\"SetScroll\"] = function(self, value)\n\t\tlocal status = self.status or self.localstatus\n\t\tlocal viewheight = self.scrollframe:GetHeight()\n\t\tlocal height = self.content:GetHeight()\n\t\tlocal offset\n\n\t\tif viewheight > height then\n\t\t\toffset = 0\n\t\telse\n\t\t\toffset = floor((height - viewheight) / 1000.0 * value)\n\t\tend\n\t\tself.content:ClearAllPoints()\n\t\tself.content:SetPoint(\"TOPLEFT\", 0, offset)\n\t\tself.content:SetPoint(\"TOPRIGHT\", 0, offset)\n\t\tstatus.offset = offset\n\t\tstatus.scrollvalue = value\n\tend,\n\n\t[\"MoveScroll\"] = function(self, value)\n\t\tlocal status = self.status or self.localstatus\n\t\tlocal height, viewheight = self.scrollframe:GetHeight(), self.content:GetHeight()\n\t\t\n\t\tif self.scrollBarShown then\n\t\t\tlocal diff = height - viewheight\n\t\t\tlocal delta = 1\n\t\t\tif value < 0 then\n\t\t\t\tdelta = -1\n\t\t\tend\n\t\t\tself.scrollbar:SetValue(min(max(status.scrollvalue + delta*(1000/(diff/45)),0), 1000))\n\t\tend\n\tend,\n\n\t[\"FixScroll\"] = function(self)\n\t\tif self.updateLock then return end\n\t\tself.updateLock = true\n\t\tlocal status = self.status or self.localstatus\n\t\tlocal height, viewheight = self.scrollframe:GetHeight(), self.content:GetHeight()\n\t\tlocal offset = status.offset or 0\n\t\tlocal curvalue = self.scrollbar:GetValue()\n\t\t-- Give us a margin of error of 2 pixels to stop some conditions that i would blame on floating point inaccuracys\n\t\t-- No-one is going to miss 2 pixels at the bottom of the frame, anyhow!\n\t\tif viewheight < height + 2 then\n\t\t\tif self.scrollBarShown then\n\t\t\t\tself.scrollBarShown = nil\n\t\t\t\tself.scrollbar:Hide()\n\t\t\t\tself.scrollbar:SetValue(0)\n\t\t\t\tself.scrollframe:SetPoint(\"BOTTOMRIGHT\")\n\t\t\t\tself:DoLayout()\n\t\t\tend\n\t\telse\n\t\t\tif not self.scrollBarShown then\n\t\t\t\tself.scrollBarShown = true\n\t\t\t\tself.scrollbar:Show()\n\t\t\t\tself.scrollframe:SetPoint(\"BOTTOMRIGHT\", -20, 0)\n\t\t\t\tself:DoLayout()\n\t\t\tend\n\t\t\tlocal value = (offset / (viewheight - height) * 1000)\n\t\t\tif value > 1000 then value = 1000 end\n\t\t\tself.scrollbar:SetValue(value)\n\t\t\tself:SetScroll(value)\n\t\t\tif value < 1000 then\n\t\t\t\tself.content:ClearAllPoints()\n\t\t\t\tself.content:SetPoint(\"TOPLEFT\", 0, offset)\n\t\t\t\tself.content:SetPoint(\"TOPRIGHT\", 0, offset)\n\t\t\t\tstatus.offset = offset\n\t\t\tend\n\t\tend\n\t\tself.updateLock = nil\n\tend,\n\n\t[\"LayoutFinished\"] = function(self, width, height)\n\t\tself.content:SetHeight(height or 0 + 20)\n\t\tself.scrollframe:SetScript(\"OnUpdate\", FixScrollOnUpdate)\n\tend,\n\n\t[\"SetStatusTable\"] = function(self, status)\n\t\tassert(type(status) == \"table\")\n\t\tself.status = status\n\t\tif not status.scrollvalue then\n\t\t\tstatus.scrollvalue = 0\n\t\tend\n\tend,\n\n\t[\"OnWidthSet\"] = function(self, width)\n\t\tlocal content = self.content\n\t\tcontent.width = width\n\tend,\n\n\t[\"OnHeightSet\"] = function(self, height)\n\t\tlocal content = self.content\n\t\tcontent.height = height\n\tend\n}\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal function Constructor()\n\tlocal frame = CreateFrame(\"Frame\", nil, UIParent)\n\tlocal num = AceGUI:GetNextWidgetNum(Type)\n\n\tlocal scrollframe = CreateFrame(\"ScrollFrame\", nil, frame)\n\tscrollframe:SetPoint(\"TOPLEFT\")\n\tscrollframe:SetPoint(\"BOTTOMRIGHT\")\n\tscrollframe:EnableMouseWheel(true)\n\tscrollframe:SetScript(\"OnMouseWheel\", ScrollFrame_OnMouseWheel)\n\tscrollframe:SetScript(\"OnSizeChanged\", ScrollFrame_OnSizeChanged)\n\n\tlocal scrollbar = CreateFrame(\"Slider\", (\"AceConfigDialogScrollFrame%dScrollBar\"):format(num), scrollframe, \"UIPanelScrollBarTemplate\")\n\tscrollbar:SetPoint(\"TOPLEFT\", scrollframe, \"TOPRIGHT\", 4, -16)\n\tscrollbar:SetPoint(\"BOTTOMLEFT\", scrollframe, \"BOTTOMRIGHT\", 4, 16)\n\tscrollbar:SetMinMaxValues(0, 1000)\n\tscrollbar:SetValueStep(1)\n\tscrollbar:SetValue(0)\n\tscrollbar:SetWidth(16)\n\tscrollbar:Hide()\n\t-- set the script as the last step, so it doesn't fire yet\n\tscrollbar:SetScript(\"OnValueChanged\", ScrollBar_OnScrollValueChanged)\n\n\tlocal scrollbg = scrollbar:CreateTexture(nil, \"BACKGROUND\")\n\tscrollbg:SetAllPoints(scrollbar)\n\tscrollbg:SetTexture(0, 0, 0, 0.4)\n\n\t--Container Support\n\tlocal content = CreateFrame(\"Frame\", nil, scrollframe)\n\tcontent:SetPoint(\"TOPLEFT\")\n\tcontent:SetPoint(\"TOPRIGHT\")\n\tcontent:SetHeight(400)\n\tscrollframe:SetScrollChild(content)\n\n\tlocal widget = {\n\t\tlocalstatus = { scrollvalue = 0 },\n\t\tscrollframe = scrollframe,\n\t\tscrollbar   = scrollbar,\n\t\tcontent     = content,\n\t\tframe       = frame,\n\t\ttype        = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\tscrollframe.obj, scrollbar.obj = widget, widget\n\n\treturn AceGUI:RegisterAsContainer(widget)\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIContainer-SimpleGroup.lua",
    "content": "--[[-----------------------------------------------------------------------------\nSimpleGroup Container\nSimple container widget that just groups widgets.\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"SimpleGroup\", 20\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal pairs = pairs\n\n-- WoW APIs\nlocal CreateFrame, UIParent = CreateFrame, UIParent\n\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\tself:SetWidth(300)\n\t\tself:SetHeight(100)\n\tend,\n\n\t-- [\"OnRelease\"] = nil,\n\n\t[\"LayoutFinished\"] = function(self, width, height)\n\t\tif self.noAutoHeight then return end\n\t\tself:SetHeight(height or 0)\n\tend,\n\n\t[\"OnWidthSet\"] = function(self, width)\n\t\tlocal content = self.content\n\t\tcontent:SetWidth(width)\n\t\tcontent.width = width\n\tend,\n\n\t[\"OnHeightSet\"] = function(self, height)\n\t\tlocal content = self.content\n\t\tcontent:SetHeight(height)\n\t\tcontent.height = height\n\tend\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal function Constructor()\n\tlocal frame = CreateFrame(\"Frame\", nil, UIParent)\n\tframe:SetFrameStrata(\"FULLSCREEN_DIALOG\")\n\n\t--Container Support\n\tlocal content = CreateFrame(\"Frame\", nil, frame)\n\tcontent:SetPoint(\"TOPLEFT\")\n\tcontent:SetPoint(\"BOTTOMRIGHT\")\n\n\tlocal widget = {\n\t\tframe     = frame,\n\t\tcontent   = content,\n\t\ttype      = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\n\treturn AceGUI:RegisterAsContainer(widget)\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua",
    "content": "--[[-----------------------------------------------------------------------------\nTabGroup Container\nContainer that uses tabs on top to switch between groups.\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"TabGroup\", 30\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal pairs, ipairs, assert, type, wipe = pairs, ipairs, assert, type, wipe\n\n-- WoW APIs\nlocal PlaySound = PlaySound\nlocal CreateFrame, UIParent = CreateFrame, UIParent\nlocal _G = _G\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: PanelTemplates_TabResize, PanelTemplates_SetDisabledTabState, PanelTemplates_SelectTab, PanelTemplates_DeselectTab\n\n-- local upvalue storage used by BuildTabs\nlocal widths = {}\nlocal rowwidths = {}\nlocal rowends = {}\n\n--[[-----------------------------------------------------------------------------\nSupport functions\n-------------------------------------------------------------------------------]]\nlocal function UpdateTabLook(frame)\n\tif frame.disabled then\n\t\tPanelTemplates_SetDisabledTabState(frame)\n\telseif frame.selected then\n\t\tPanelTemplates_SelectTab(frame)\n\telse\n\t\tPanelTemplates_DeselectTab(frame)\n\tend\nend\n\nlocal function Tab_SetText(frame, text)\n\tframe:_SetText(text)\n\tlocal width = frame.obj.frame.width or frame.obj.frame:GetWidth() or 0\n\tPanelTemplates_TabResize(frame, 0, nil, width)\nend\n\nlocal function Tab_SetSelected(frame, selected)\n\tframe.selected = selected\n\tUpdateTabLook(frame)\nend\n\nlocal function Tab_SetDisabled(frame, disabled)\n\tframe.disabled = disabled\n\tUpdateTabLook(frame)\nend\n\nlocal function BuildTabsOnUpdate(frame)\n\tlocal self = frame.obj\n\tself:BuildTabs()\n\tframe:SetScript(\"OnUpdate\", nil)\nend\n\n--[[-----------------------------------------------------------------------------\nScripts\n-------------------------------------------------------------------------------]]\nlocal function Tab_OnClick(frame)\n\tif not (frame.selected or frame.disabled) then\n\t\tPlaySound(\"igCharacterInfoTab\")\n\t\tframe.obj:SelectTab(frame.value)\n\tend\nend\n\nlocal function Tab_OnEnter(frame)\n\tlocal self = frame.obj\n\tself:Fire(\"OnTabEnter\", self.tabs[frame.id].value, frame)\nend\n\nlocal function Tab_OnLeave(frame)\n\tlocal self = frame.obj\n\tself:Fire(\"OnTabLeave\", self.tabs[frame.id].value, frame)\nend\n\nlocal function Tab_OnShow(frame)\n\t_G[frame:GetName()..\"HighlightTexture\"]:SetWidth(frame:GetTextWidth() + 30)\nend\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\tself:SetTitle()\n\tend,\n\n\t[\"OnRelease\"] = function(self)\n\t\tself.status = nil\n\t\tfor k in pairs(self.localstatus) do\n\t\t\tself.localstatus[k] = nil\n\t\tend\n\t\tself.tablist = nil\n\t\tfor _, tab in pairs(self.tabs) do\n\t\t\ttab:Hide()\n\t\tend\n\tend,\n\n\t[\"CreateTab\"] = function(self, id)\n\t\tlocal tabname = (\"AceGUITabGroup%dTab%d\"):format(self.num, id)\n\t\tlocal tab = CreateFrame(\"Button\", tabname, self.border, \"OptionsFrameTabButtonTemplate\")\n\t\ttab.obj = self\n\t\ttab.id = id\n\n\t\ttab.text = _G[tabname .. \"Text\"]\n\t\ttab.text:ClearAllPoints()\n\t\ttab.text:SetPoint(\"LEFT\", 14, -3)\n\t\ttab.text:SetPoint(\"RIGHT\", -12, -3)\n\n\t\ttab:SetScript(\"OnClick\", Tab_OnClick)\n\t\ttab:SetScript(\"OnEnter\", Tab_OnEnter)\n\t\ttab:SetScript(\"OnLeave\", Tab_OnLeave)\n\t\ttab:SetScript(\"OnShow\", Tab_OnShow)\n\n\t\ttab._SetText = tab.SetText\n\t\ttab.SetText = Tab_SetText\n\t\ttab.SetSelected = Tab_SetSelected\n\t\ttab.SetDisabled = Tab_SetDisabled\n\n\t\treturn tab\n\tend,\n\n\t[\"SetTitle\"] = function(self, text)\n\t\tself.titletext:SetText(text or \"\")\n\t\tif text and text ~= \"\" then\n\t\t\tself.alignoffset = 25\n\t\telse\n\t\t\tself.alignoffset = 18\n\t\tend\n\t\tself:BuildTabs()\n\tend,\n\n\t[\"SetStatusTable\"] = function(self, status)\n\t\tassert(type(status) == \"table\")\n\t\tself.status = status\n\tend,\n\n\t[\"SelectTab\"] = function(self, value)\n\t\tlocal status = self.status or self.localstatus\n\t\tlocal found\n\t\tfor i, v in ipairs(self.tabs) do\n\t\t\tif v.value == value then\n\t\t\t\tv:SetSelected(true)\n\t\t\t\tfound = true\n\t\t\telse\n\t\t\t\tv:SetSelected(false)\n\t\t\tend\n\t\tend\n\t\tstatus.selected = value\n\t\tif found then\n\t\t\tself:Fire(\"OnGroupSelected\",value)\n\t\tend\n\tend,\n\n\t[\"SetTabs\"] = function(self, tabs)\n\t\tself.tablist = tabs\n\t\tself:BuildTabs()\n\tend,\n\t\n\n\t[\"BuildTabs\"] = function(self)\n\t\tlocal hastitle = (self.titletext:GetText() and self.titletext:GetText() ~= \"\")\n\t\tlocal status = self.status or self.localstatus\n\t\tlocal tablist = self.tablist\n\t\tlocal tabs = self.tabs\n\t\t\n\t\tif not tablist then return end\n\t\t\n\t\tlocal width = self.frame.width or self.frame:GetWidth() or 0\n\t\t\n\t\twipe(widths)\n\t\twipe(rowwidths)\n\t\twipe(rowends)\n\t\t\n\t\t--Place Text into tabs and get thier initial width\n\t\tfor i, v in ipairs(tablist) do\n\t\t\tlocal tab = tabs[i]\n\t\t\tif not tab then\n\t\t\t\ttab = self:CreateTab(i)\n\t\t\t\ttabs[i] = tab\n\t\t\tend\n\t\t\t\n\t\t\ttab:Show()\n\t\t\ttab:SetText(v.text)\n\t\t\ttab:SetDisabled(v.disabled)\n\t\t\ttab.value = v.value\n\t\t\t\n\t\t\twidths[i] = tab:GetWidth() - 6 --tabs are anchored 10 pixels from the right side of the previous one to reduce spacing, but add a fixed 4px padding for the text\n\t\tend\n\t\t\n\t\tfor i = (#tablist)+1, #tabs, 1 do\n\t\t\ttabs[i]:Hide()\n\t\tend\n\t\t\n\t\t--First pass, find the minimum number of rows needed to hold all tabs and the initial tab layout\n\t\tlocal numtabs = #tablist\n\t\tlocal numrows = 1\n\t\tlocal usedwidth = 0\n\n\t\tfor i = 1, #tablist do\n\t\t\t--If this is not the first tab of a row and there isn't room for it\n\t\t\tif usedwidth ~= 0 and (width - usedwidth - widths[i]) < 0 then\n\t\t\t\trowwidths[numrows] = usedwidth + 10 --first tab in each row takes up an extra 10px\n\t\t\t\trowends[numrows] = i - 1\n\t\t\t\tnumrows = numrows + 1\n\t\t\t\tusedwidth = 0\n\t\t\tend\n\t\t\tusedwidth = usedwidth + widths[i]\n\t\tend\n\t\trowwidths[numrows] = usedwidth + 10 --first tab in each row takes up an extra 10px\n\t\trowends[numrows] = #tablist\n\t\t\n\t\t--Fix for single tabs being left on the last row, move a tab from the row above if applicable\n\t\tif numrows > 1 then\n\t\t\t--if the last row has only one tab\n\t\t\tif rowends[numrows-1] == numtabs-1 then\n\t\t\t\t--if there are more than 2 tabs in the 2nd last row\n\t\t\t\tif (numrows == 2 and rowends[numrows-1] > 2) or (rowends[numrows] - rowends[numrows-1] > 2) then\n\t\t\t\t\t--move 1 tab from the second last row to the last, if there is enough space\n\t\t\t\t\tif (rowwidths[numrows] + widths[numtabs-1]) <= width then\n\t\t\t\t\t\trowends[numrows-1] = rowends[numrows-1] - 1\n\t\t\t\t\t\trowwidths[numrows] = rowwidths[numrows] + widths[numtabs-1]\n\t\t\t\t\t\trowwidths[numrows-1] = rowwidths[numrows-1] - widths[numtabs-1]\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\n\t\t--anchor the rows as defined and resize tabs to fill thier row\n\t\tlocal starttab = 1\n\t\tfor row, endtab in ipairs(rowends) do\n\t\t\tlocal first = true\n\t\t\tfor tabno = starttab, endtab do\n\t\t\t\tlocal tab = tabs[tabno]\n\t\t\t\ttab:ClearAllPoints()\n\t\t\t\tif first then\n\t\t\t\t\ttab:SetPoint(\"TOPLEFT\", self.frame, \"TOPLEFT\", 0, -(hastitle and 14 or 7)-(row-1)*20 )\n\t\t\t\t\tfirst = false\n\t\t\t\telse\n\t\t\t\t\ttab:SetPoint(\"LEFT\", tabs[tabno-1], \"RIGHT\", -10, 0)\n\t\t\t\tend\n\t\t\tend\n\t\t\t\n\t\t\t-- equal padding for each tab to fill the available width,\n\t\t\t-- if the used space is above 75% already\n\t\t\tlocal padding = 0\n\t\t\tif not (numrows == 1 and rowwidths[1] < width*0.75) then\n\t\t\t\tpadding = (width - rowwidths[row]) / (endtab - starttab+1)\n\t\t\tend\n\t\t\t\n\t\t\tfor i = starttab, endtab do\n\t\t\t\tPanelTemplates_TabResize(tabs[i], padding + 4, nil, width)\n\t\t\tend\n\t\t\tstarttab = endtab + 1\n\t\tend\n\t\t\n\t\tself.borderoffset = (hastitle and 17 or 10)+((numrows)*20)\n\t\tself.border:SetPoint(\"TOPLEFT\", 1, -self.borderoffset)\n\tend,\n\n\t[\"OnWidthSet\"] = function(self, width)\n\t\tlocal content = self.content\n\t\tlocal contentwidth = width - 60\n\t\tif contentwidth < 0 then\n\t\t\tcontentwidth = 0\n\t\tend\n\t\tcontent:SetWidth(contentwidth)\n\t\tcontent.width = contentwidth\n\t\tself:BuildTabs(self)\n\t\tself.frame:SetScript(\"OnUpdate\", BuildTabsOnUpdate)\n\tend,\n\n\t[\"OnHeightSet\"] = function(self, height)\n\t\tlocal content = self.content\n\t\tlocal contentheight = height - (self.borderoffset + 23)\n\t\tif contentheight < 0 then\n\t\t\tcontentheight = 0\n\t\tend\n\t\tcontent:SetHeight(contentheight)\n\t\tcontent.height = contentheight\n\tend,\n\t\n\t[\"LayoutFinished\"] = function(self, width, height)\n\t\tif self.noAutoHeight then return end\n\t\tself:SetHeight((height or 0) + (self.borderoffset + 23))\n\tend\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal PaneBackdrop  = {\n\tbgFile = \"Interface\\\\ChatFrame\\\\ChatFrameBackground\",\n\tedgeFile = \"Interface\\\\Tooltips\\\\UI-Tooltip-Border\",\n\ttile = true, tileSize = 16, edgeSize = 16,\n\tinsets = { left = 3, right = 3, top = 5, bottom = 3 }\n}\n\nlocal function Constructor()\n\tlocal num = AceGUI:GetNextWidgetNum(Type)\n\tlocal frame = CreateFrame(\"Frame\",nil,UIParent)\n\tframe:SetHeight(100)\n\tframe:SetWidth(100)\n\tframe:SetFrameStrata(\"FULLSCREEN_DIALOG\")\n\n\tlocal titletext = frame:CreateFontString(nil,\"OVERLAY\",\"GameFontNormal\")\n\ttitletext:SetPoint(\"TOPLEFT\", 14, 0)\n\ttitletext:SetPoint(\"TOPRIGHT\", -14, 0)\n\ttitletext:SetJustifyH(\"LEFT\")\n\ttitletext:SetHeight(18)\n\ttitletext:SetText(\"\")\n\n\tlocal border = CreateFrame(\"Frame\", nil, frame)\n\tborder:SetPoint(\"TOPLEFT\", 1, -27)\n\tborder:SetPoint(\"BOTTOMRIGHT\", -1, 3)\n\tborder:SetBackdrop(PaneBackdrop)\n\tborder:SetBackdropColor(0.1, 0.1, 0.1, 0.5)\n\tborder:SetBackdropBorderColor(0.4, 0.4, 0.4)\n\n\tlocal content = CreateFrame(\"Frame\", nil, border)\n\tcontent:SetPoint(\"TOPLEFT\", 10, -7)\n\tcontent:SetPoint(\"BOTTOMRIGHT\", -10, 7)\n\n\tlocal widget = {\n\t\tnum          = num,\n\t\tframe        = frame,\n\t\tlocalstatus  = {},\n\t\talignoffset  = 18,\n\t\ttitletext    = titletext,\n\t\tborder       = border,\n\t\tborderoffset = 27,\n\t\ttabs         = {},\n\t\tcontent      = content,\n\t\ttype         = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\t\n\treturn AceGUI:RegisterAsContainer(widget)\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua",
    "content": "--[[-----------------------------------------------------------------------------\nTreeGroup Container\nContainer that uses a tree control to switch between groups.\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"TreeGroup\", 30\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal next, pairs, ipairs, assert, type = next, pairs, ipairs, assert, type\nlocal math_min, math_max, floor = math.min, math.max, floor\nlocal select, tremove, unpack = select, table.remove, unpack\n\n-- WoW APIs\nlocal CreateFrame, UIParent = CreateFrame, UIParent\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: GameTooltip, FONT_COLOR_CODE_CLOSE\n\n-- Recycling functions\nlocal new, del\ndo\n\tlocal pool = setmetatable({},{__mode='k'})\n\tfunction new()\n\t\tlocal t = next(pool)\n\t\tif t then\n\t\t\tpool[t] = nil\n\t\t\treturn t\n\t\telse\n\t\t\treturn {}\n\t\tend\n\tend\n\tfunction del(t)\n\t\tfor k in pairs(t) do\n\t\t\tt[k] = nil\n\t\tend\t\n\t\tpool[t] = true\n\tend\nend\n\nlocal DEFAULT_TREE_WIDTH = 175\nlocal DEFAULT_TREE_SIZABLE = true\n\n--[[-----------------------------------------------------------------------------\nSupport functions\n-------------------------------------------------------------------------------]]\nlocal function GetButtonUniqueValue(line)\n\tlocal parent = line.parent\n\tif parent and parent.value then\n\t\treturn GetButtonUniqueValue(parent)..\"\\001\"..line.value\n\telse\n\t\treturn line.value\n\tend\nend\n\nlocal function UpdateButton(button, treeline, selected, canExpand, isExpanded)\n\tlocal self = button.obj\n\tlocal toggle = button.toggle\n\tlocal frame = self.frame\n\tlocal text = treeline.text or \"\"\n\tlocal icon = treeline.icon\n\tlocal iconCoords = treeline.iconCoords\n\tlocal level = treeline.level\n\tlocal value = treeline.value\n\tlocal uniquevalue = treeline.uniquevalue\n\tlocal disabled = treeline.disabled\n\t\n\tbutton.treeline = treeline\n\tbutton.value = value\n\tbutton.uniquevalue = uniquevalue\n\tif selected then\n\t\tbutton:LockHighlight()\n\t\tbutton.selected = true\n\telse\n\t\tbutton:UnlockHighlight()\n\t\tbutton.selected = false\n\tend\n\tlocal normalTexture = button:GetNormalTexture()\n\tlocal line = button.line\n\tbutton.level = level\n\tif ( level == 1 ) then\n\t\tbutton:SetNormalFontObject(\"GameFontNormal\")\n\t\tbutton:SetHighlightFontObject(\"GameFontHighlight\")\n\t\tbutton.text:SetPoint(\"LEFT\", (icon and 16 or 0) + 8, 2)\n\telse\n\t\tbutton:SetNormalFontObject(\"GameFontHighlightSmall\")\n\t\tbutton:SetHighlightFontObject(\"GameFontHighlightSmall\")\n\t\tbutton.text:SetPoint(\"LEFT\", (icon and 16 or 0) + 8 * level, 2)\n\tend\n\t\n\tif disabled then\n\t\tbutton:EnableMouse(false)\n\t\tbutton.text:SetText(\"|cff808080\"..text..FONT_COLOR_CODE_CLOSE)\n\telse\n\t\tbutton.text:SetText(text)\n\t\tbutton:EnableMouse(true)\n\tend\n\t\n\tif icon then\n\t\tbutton.icon:SetTexture(icon)\n\t\tbutton.icon:SetPoint(\"LEFT\", 8 * level, (level == 1) and 0 or 1)\n\telse\n\t\tbutton.icon:SetTexture(nil)\n\tend\n\t\n\tif iconCoords then\n\t\tbutton.icon:SetTexCoord(unpack(iconCoords))\n\telse\n\t\tbutton.icon:SetTexCoord(0, 1, 0, 1)\n\tend\n\t\n\tif canExpand then\n\t\tif not isExpanded then\n\t\t\ttoggle:SetNormalTexture(\"Interface\\\\Buttons\\\\UI-PlusButton-UP\")\n\t\t\ttoggle:SetPushedTexture(\"Interface\\\\Buttons\\\\UI-PlusButton-DOWN\")\n\t\telse\n\t\t\ttoggle:SetNormalTexture(\"Interface\\\\Buttons\\\\UI-MinusButton-UP\")\n\t\t\ttoggle:SetPushedTexture(\"Interface\\\\Buttons\\\\UI-MinusButton-DOWN\")\n\t\tend\n\t\ttoggle:Show()\n\telse\n\t\ttoggle:Hide()\n\tend\nend\n\nlocal function ShouldDisplayLevel(tree)\n\tlocal result = false\n\tfor k, v in ipairs(tree) do\n\t\tif v.children == nil and v.visible ~= false then\n\t\t\tresult = true\n\t\telseif v.children then\n\t\t\tresult = result or ShouldDisplayLevel(v.children)\n\t\tend\n\t\tif result then return result end\n\tend\n\treturn false\nend\n\nlocal function addLine(self, v, tree, level, parent)\n\tlocal line = new()\n\tline.value = v.value\n\tline.text = v.text\n\tline.icon = v.icon\n\tline.iconCoords = v.iconCoords\n\tline.disabled = v.disabled\n\tline.tree = tree\n\tline.level = level\n\tline.parent = parent\n\tline.visible = v.visible\n\tline.uniquevalue = GetButtonUniqueValue(line)\n\tif v.children then\n\t\tline.hasChildren = true\n\telse\n\t\tline.hasChildren = nil\n\tend\n\tself.lines[#self.lines+1] = line\n\treturn line\nend\n\n--fire an update after one frame to catch the treeframes height\nlocal function FirstFrameUpdate(frame)\n\tlocal self = frame.obj\n\tframe:SetScript(\"OnUpdate\", nil)\n\tself:RefreshTree()\nend\n\nlocal function BuildUniqueValue(...)\n\tlocal n = select('#', ...)\n\tif n == 1 then\n\t\treturn ...\n\telse\n\t\treturn (...)..\"\\001\"..BuildUniqueValue(select(2,...))\n\tend\nend\n\n--[[-----------------------------------------------------------------------------\nScripts\n-------------------------------------------------------------------------------]]\nlocal function Expand_OnClick(frame)\n\tlocal button = frame.button\n\tlocal self = button.obj\n\tlocal status = (self.status or self.localstatus).groups\n\tstatus[button.uniquevalue] = not status[button.uniquevalue]\n\tself:RefreshTree()\nend\n\nlocal function Button_OnClick(frame)\n\tlocal self = frame.obj\n\tself:Fire(\"OnClick\", frame.uniquevalue, frame.selected)\n\tif not frame.selected then\n\t\tself:SetSelected(frame.uniquevalue)\n\t\tframe.selected = true\n\t\tframe:LockHighlight()\n\t\tself:RefreshTree()\n\tend\n\tAceGUI:ClearFocus()\nend\n\nlocal function Button_OnDoubleClick(button)\n\tlocal self = button.obj\n\tlocal status = self.status or self.localstatus\n\tlocal status = (self.status or self.localstatus).groups\n\tstatus[button.uniquevalue] = not status[button.uniquevalue]\n\tself:RefreshTree()\nend\n\nlocal function Button_OnEnter(frame)\n\tlocal self = frame.obj\n\tself:Fire(\"OnButtonEnter\", frame.uniquevalue, frame)\n\n\tif self.enabletooltips then\n\t\tGameTooltip:SetOwner(frame, \"ANCHOR_NONE\")\n\t\tGameTooltip:SetPoint(\"LEFT\",frame,\"RIGHT\")\n\t\tGameTooltip:SetText(frame.text:GetText() or \"\", 1, .82, 0, 1)\n\n\t\tGameTooltip:Show()\n\tend\nend\n\nlocal function Button_OnLeave(frame)\n\tlocal self = frame.obj\n\tself:Fire(\"OnButtonLeave\", frame.uniquevalue, frame)\n\n\tif self.enabletooltips then\n\t\tGameTooltip:Hide()\n\tend\nend\n\nlocal function OnScrollValueChanged(frame, value)\n\tif frame.obj.noupdate then return end\n\tlocal self = frame.obj\n\tlocal status = self.status or self.localstatus\n\tstatus.scrollvalue = value\n\tself:RefreshTree()\n\tAceGUI:ClearFocus()\nend\n\nlocal function Tree_OnSizeChanged(frame)\n\tframe.obj:RefreshTree()\nend\n\nlocal function Tree_OnMouseWheel(frame, delta)\n\tlocal self = frame.obj\n\tif self.showscroll then\n\t\tlocal scrollbar = self.scrollbar\n\t\tlocal min, max = scrollbar:GetMinMaxValues()\n\t\tlocal value = scrollbar:GetValue()\n\t\tlocal newvalue = math_min(max,math_max(min,value - delta))\n\t\tif value ~= newvalue then\n\t\t\tscrollbar:SetValue(newvalue)\n\t\tend\n\tend\nend\n\nlocal function Dragger_OnLeave(frame)\n\tframe:SetBackdropColor(1, 1, 1, 0)\nend\n\nlocal function Dragger_OnEnter(frame)\n\tframe:SetBackdropColor(1, 1, 1, 0.8)\nend\n\nlocal function Dragger_OnMouseDown(frame)\n\tlocal treeframe = frame:GetParent()\n\ttreeframe:StartSizing(\"RIGHT\")\nend\n\nlocal function Dragger_OnMouseUp(frame)\n\tlocal treeframe = frame:GetParent()\n\tlocal self = treeframe.obj\n\tlocal frame = treeframe:GetParent()\n\ttreeframe:StopMovingOrSizing()\n\t--treeframe:SetScript(\"OnUpdate\", nil)\n\ttreeframe:SetUserPlaced(false)\n\t--Without this :GetHeight will get stuck on the current height, causing the tree contents to not resize\n\ttreeframe:SetHeight(0)\n\ttreeframe:SetPoint(\"TOPLEFT\", frame, \"TOPLEFT\",0,0)\n\ttreeframe:SetPoint(\"BOTTOMLEFT\", frame, \"BOTTOMLEFT\",0,0)\n\t\n\tlocal status = self.status or self.localstatus\n\tstatus.treewidth = treeframe:GetWidth()\n\t\n\ttreeframe.obj:Fire(\"OnTreeResize\",treeframe:GetWidth())\n\t-- recalculate the content width\n\ttreeframe.obj:OnWidthSet(status.fullwidth)\n\t-- update the layout of the content\n\ttreeframe.obj:DoLayout()\nend\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\tself:SetTreeWidth(DEFAULT_TREE_WIDTH, DEFAULT_TREE_SIZABLE)\n\t\tself:EnableButtonTooltips(true)\n\tend,\n\n\t[\"OnRelease\"] = function(self)\n\t\tself.status = nil\n\t\tfor k, v in pairs(self.localstatus) do\n\t\t\tif k == \"groups\" then\n\t\t\t\tfor k2 in pairs(v) do\n\t\t\t\t\tv[k2] = nil\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tself.localstatus[k] = nil\n\t\t\tend\n\t\tend\n\t\tself.localstatus.scrollvalue = 0\n\t\tself.localstatus.treewidth = DEFAULT_TREE_WIDTH\n\t\tself.localstatus.treesizable = DEFAULT_TREE_SIZABLE\n\tend,\n\n\t[\"EnableButtonTooltips\"] = function(self, enable)\n\t\tself.enabletooltips = enable\n\tend,\n\n\t[\"CreateButton\"] = function(self)\n\t\tlocal num = AceGUI:GetNextWidgetNum(\"TreeGroupButton\")\n\t\tlocal button = CreateFrame(\"Button\", (\"AceGUI30TreeButton%d\"):format(num), self.treeframe, \"OptionsListButtonTemplate\")\n\t\tbutton.obj = self\n\n\t\tlocal icon = button:CreateTexture(nil, \"OVERLAY\")\n\t\ticon:SetWidth(14)\n\t\ticon:SetHeight(14)\n\t\tbutton.icon = icon\n\n\t\tbutton:SetScript(\"OnClick\",Button_OnClick)\n\t\tbutton:SetScript(\"OnDoubleClick\", Button_OnDoubleClick)\n\t\tbutton:SetScript(\"OnEnter\",Button_OnEnter)\n\t\tbutton:SetScript(\"OnLeave\",Button_OnLeave)\n\n\t\tbutton.toggle.button = button\n\t\tbutton.toggle:SetScript(\"OnClick\",Expand_OnClick)\n\n\t\treturn button\n\tend,\n\n\t[\"SetStatusTable\"] = function(self, status)\n\t\tassert(type(status) == \"table\")\n\t\tself.status = status\n\t\tif not status.groups then\n\t\t\tstatus.groups = {}\n\t\tend\n\t\tif not status.scrollvalue then\n\t\t\tstatus.scrollvalue = 0\n\t\tend\n\t\tif not status.treewidth then\n\t\t\tstatus.treewidth = DEFAULT_TREE_WIDTH\n\t\tend\n\t\tif not status.treesizable then\n\t\t\tstatus.treesizable = DEFAULT_TREE_SIZABLE\n\t\tend\n\t\tself:SetTreeWidth(status.treewidth,status.treesizable)\n\t\tself:RefreshTree()\n\tend,\n\n\t--sets the tree to be displayed\n\t[\"SetTree\"] = function(self, tree, filter)\n\t\tself.filter = filter\n\t\tif tree then \n\t\t\tassert(type(tree) == \"table\") \n\t\tend\n\t\tself.tree = tree\n\t\tself:RefreshTree()\n\tend,\n\n\t[\"BuildLevel\"] = function(self, tree, level, parent)\n\t\tlocal groups = (self.status or self.localstatus).groups\n\t\tlocal hasChildren = self.hasChildren\n\t\t\n\t\tfor i, v in ipairs(tree) do\n\t\t\tif v.children then\n\t\t\t\tif not self.filter or ShouldDisplayLevel(v.children) then\n\t\t\t\t\tlocal line = addLine(self, v, tree, level, parent)\n\t\t\t\t\tif groups[line.uniquevalue] then\n\t\t\t\t\t\tself:BuildLevel(v.children, level+1, line)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\telseif v.visible ~= false or not self.filter then\n\t\t\t\taddLine(self, v, tree, level, parent)\n\t\t\tend\n\t\tend\n\tend,\n\n\t[\"RefreshTree\"] = function(self)\n\t\tlocal buttons = self.buttons \n\t\tlocal lines = self.lines\n\n\t\tfor i, v in ipairs(buttons) do\n\t\t\tv:Hide()\n\t\tend\n\t\twhile lines[1] do\n\t\t\tlocal t = tremove(lines)\n\t\t\tfor k in pairs(t) do\n\t\t\t\tt[k] = nil\n\t\t\tend\n\t\t\tdel(t)\n\t\tend\n\n\t\tif not self.tree then return end\n\t\t--Build the list of visible entries from the tree and status tables\n\t\tlocal status = self.status or self.localstatus\n\t\tlocal groupstatus = status.groups\n\t\tlocal tree = self.tree\n\n\t\tlocal treeframe = self.treeframe\n\n\t\tself:BuildLevel(tree, 1)\n\n\t\tlocal numlines = #lines\n\n\t\tlocal maxlines = (floor(((self.treeframe:GetHeight()or 0) - 20 ) / 18))\n\n\t\tlocal first, last\n\n\t\tif numlines <= maxlines then\n\t\t\t--the whole tree fits in the frame\n\t\t\tstatus.scrollvalue = 0\n\t\t\tself:ShowScroll(false)\n\t\t\tfirst, last = 1, numlines\n\t\telse\n\t\t\tself:ShowScroll(true)\n\t\t\t--scrolling will be needed\n\t\t\tself.noupdate = true\n\t\t\tself.scrollbar:SetMinMaxValues(0, numlines - maxlines)\n\t\t\t--check if we are scrolled down too far\n\t\t\tif numlines - status.scrollvalue < maxlines then\n\t\t\t\tstatus.scrollvalue = numlines - maxlines\n\t\t\t\tself.scrollbar:SetValue(status.scrollvalue)\n\t\t\tend\n\t\t\tself.noupdate = nil\n\t\t\tfirst, last = status.scrollvalue+1, status.scrollvalue + maxlines\n\t\tend\n\n\t\tlocal buttonnum = 1\n\t\tfor i = first, last do\n\t\t\tlocal line = lines[i]\n\t\t\tlocal button = buttons[buttonnum]\n\t\t\tif not button then\n\t\t\t\tbutton = self:CreateButton()\n\n\t\t\t\tbuttons[buttonnum] = button\n\t\t\t\tbutton:SetParent(treeframe)\n\t\t\t\tbutton:SetFrameLevel(treeframe:GetFrameLevel()+1)\n\t\t\t\tbutton:ClearAllPoints()\n\t\t\t\tif i == 1 then\n\t\t\t\t\tif self.showscroll then\n\t\t\t\t\t\tbutton:SetPoint(\"TOPRIGHT\", self.treeframe,\"TOPRIGHT\",-22,-10)\n\t\t\t\t\t\tbutton:SetPoint(\"TOPLEFT\", self.treeframe, \"TOPLEFT\", 0, -10)\n\t\t\t\t\telse\n\t\t\t\t\t\tbutton:SetPoint(\"TOPRIGHT\", self.treeframe,\"TOPRIGHT\",0,-10)\n\t\t\t\t\t\tbutton:SetPoint(\"TOPLEFT\", self.treeframe, \"TOPLEFT\", 0, -10)\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tbutton:SetPoint(\"TOPRIGHT\", buttons[buttonnum-1], \"BOTTOMRIGHT\",0,0)\n\t\t\t\t\tbutton:SetPoint(\"TOPLEFT\", buttons[buttonnum-1], \"BOTTOMLEFT\",0,0)\n\t\t\t\tend\n\t\t\tend\n\n\t\t\tUpdateButton(button, line, status.selected == line.uniquevalue, line.hasChildren, groupstatus[line.uniquevalue] )\n\t\t\tbutton:Show()\n\t\t\tbuttonnum = buttonnum + 1\n\t\tend\n\tend,\n\t\n\t[\"SetSelected\"] = function(self, value)\n\t\tlocal status = self.status or self.localstatus\n\t\tif status.selected ~= value then\n\t\t\tstatus.selected = value\n\t\t\tself:Fire(\"OnGroupSelected\", value)\n\t\tend\n\tend,\n\n\t[\"Select\"] = function(self, uniquevalue, ...)\n\t\tself.filter = false\n\t\tlocal status = self.status or self.localstatus\n\t\tlocal groups = status.groups\n\t\tfor i = 1, select('#', ...) do\n\t\t\tgroups[BuildUniqueValue(select(i, ...))] = true\n\t\tend\n\t\tstatus.selected = uniquevalue\n\t\tself:RefreshTree()\n\t\tself:Fire(\"OnGroupSelected\", uniquevalue)\n\tend,\n\n\t[\"SelectByPath\"] = function(self, ...)\n\t\tself:Select(BuildUniqueValue(...), ...)\n\tend,\n\n\t[\"SelectByValue\"] = function(self, uniquevalue)\n\t\tself:Select(uniquevalue, (\"\\001\"):split(uniquevalue))\n\tend,\n\n\t[\"ShowScroll\"] = function(self, show)\n\t\tself.showscroll = show\n\t\tif show then\n\t\t\tself.scrollbar:Show()\n\t\t\tif self.buttons[1] then\n\t\t\t\tself.buttons[1]:SetPoint(\"TOPRIGHT\", self.treeframe,\"TOPRIGHT\",-22,-10)\n\t\t\tend\n\t\telse\n\t\t\tself.scrollbar:Hide()\n\t\t\tif self.buttons[1] then\n\t\t\t\tself.buttons[1]:SetPoint(\"TOPRIGHT\", self.treeframe,\"TOPRIGHT\",0,-10)\n\t\t\tend\n\t\tend\n\tend,\n\n\t[\"OnWidthSet\"] = function(self, width)\n\t\tlocal content = self.content\n\t\tlocal treeframe = self.treeframe\n\t\tlocal status = self.status or self.localstatus\n\t\tstatus.fullwidth = width\n\t\t\n\t\tlocal contentwidth = width - status.treewidth - 20\n\t\tif contentwidth < 0 then\n\t\t\tcontentwidth = 0\n\t\tend\n\t\tcontent:SetWidth(contentwidth)\n\t\tcontent.width = contentwidth\n\t\t\n\t\tlocal maxtreewidth = math_min(400, width - 50)\n\t\t\n\t\tif maxtreewidth > 100 and status.treewidth > maxtreewidth then\n\t\t\tself:SetTreeWidth(maxtreewidth, status.treesizable)\n\t\tend\n\t\ttreeframe:SetMaxResize(maxtreewidth, 1600)\n\tend,\n\n\t[\"OnHeightSet\"] = function(self, height)\n\t\tlocal content = self.content\n\t\tlocal contentheight = height - 20\n\t\tif contentheight < 0 then\n\t\t\tcontentheight = 0\n\t\tend\n\t\tcontent:SetHeight(contentheight)\n\t\tcontent.height = contentheight\n\tend,\n\n\t[\"SetTreeWidth\"] = function(self, treewidth, resizable)\n\t\tif not resizable then\n\t\t\tif type(treewidth) == 'number' then\n\t\t\t\tresizable = false\n\t\t\telseif type(treewidth) == 'boolean' then\n\t\t\t\tresizable = treewidth\n\t\t\t\ttreewidth = DEFAULT_TREE_WIDTH\n\t\t\telse\n\t\t\t\tresizable = false\n\t\t\t\ttreewidth = DEFAULT_TREE_WIDTH \n\t\t\tend\n\t\tend\n\t\tself.treeframe:SetWidth(treewidth)\n\t\tself.dragger:EnableMouse(resizable)\n\t\t\n\t\tlocal status = self.status or self.localstatus\n\t\tstatus.treewidth = treewidth\n\t\tstatus.treesizable = resizable\n\t\t\n\t\t-- recalculate the content width\n\t\tif status.fullwidth then\n\t\t\tself:OnWidthSet(status.fullwidth)\n\t\tend\n\tend,\n\n\t[\"LayoutFinished\"] = function(self, width, height)\n\t\tif self.noAutoHeight then return end\n\t\tself:SetHeight((height or 0) + 20)\n\tend\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal PaneBackdrop  = {\n\tbgFile = \"Interface\\\\ChatFrame\\\\ChatFrameBackground\",\n\tedgeFile = \"Interface\\\\Tooltips\\\\UI-Tooltip-Border\",\n\ttile = true, tileSize = 16, edgeSize = 16,\n\tinsets = { left = 3, right = 3, top = 5, bottom = 3 }\n}\n\nlocal DraggerBackdrop  = {\n\tbgFile = \"Interface\\\\Tooltips\\\\UI-Tooltip-Background\",\n\tedgeFile = nil,\n\ttile = true, tileSize = 16, edgeSize = 0,\n\tinsets = { left = 3, right = 3, top = 7, bottom = 7 }\n}\n\nlocal function Constructor()\n\tlocal num = AceGUI:GetNextWidgetNum(Type)\n\tlocal frame = CreateFrame(\"Frame\", nil, UIParent)\n\n\tlocal treeframe = CreateFrame(\"Frame\", nil, frame)\n\ttreeframe:SetPoint(\"TOPLEFT\")\n\ttreeframe:SetPoint(\"BOTTOMLEFT\")\n\ttreeframe:SetWidth(DEFAULT_TREE_WIDTH)\n\ttreeframe:EnableMouseWheel(true)\n\ttreeframe:SetBackdrop(PaneBackdrop)\n\ttreeframe:SetBackdropColor(0.1, 0.1, 0.1, 0.5)\n\ttreeframe:SetBackdropBorderColor(0.4, 0.4, 0.4)\n\ttreeframe:SetResizable(true)\n\ttreeframe:SetMinResize(100, 1)\n\ttreeframe:SetMaxResize(400, 1600)\n\ttreeframe:SetScript(\"OnUpdate\", FirstFrameUpdate)\n\ttreeframe:SetScript(\"OnSizeChanged\", Tree_OnSizeChanged)\n\ttreeframe:SetScript(\"OnMouseWheel\", Tree_OnMouseWheel)\n\n\tlocal dragger = CreateFrame(\"Frame\", nil, treeframe)\n\tdragger:SetWidth(8)\n\tdragger:SetPoint(\"TOP\", treeframe, \"TOPRIGHT\")\n\tdragger:SetPoint(\"BOTTOM\", treeframe, \"BOTTOMRIGHT\")\n\tdragger:SetBackdrop(DraggerBackdrop)\n\tdragger:SetBackdropColor(1, 1, 1, 0)\n\tdragger:SetScript(\"OnEnter\", Dragger_OnEnter)\n\tdragger:SetScript(\"OnLeave\", Dragger_OnLeave)\n\tdragger:SetScript(\"OnMouseDown\", Dragger_OnMouseDown)\n\tdragger:SetScript(\"OnMouseUp\", Dragger_OnMouseUp)\n\n\tlocal scrollbar = CreateFrame(\"Slider\", (\"AceConfigDialogTreeGroup%dScrollBar\"):format(num), treeframe, \"UIPanelScrollBarTemplate\")\n\tscrollbar:SetScript(\"OnValueChanged\", nil)\n\tscrollbar:SetPoint(\"TOPRIGHT\", -10, -26)\n\tscrollbar:SetPoint(\"BOTTOMRIGHT\", -10, 26)\n\tscrollbar:SetMinMaxValues(0,0)\n\tscrollbar:SetValueStep(1)\n\tscrollbar:SetValue(0)\n\tscrollbar:SetWidth(16)\n\tscrollbar:SetScript(\"OnValueChanged\", OnScrollValueChanged)\n\n\tlocal scrollbg = scrollbar:CreateTexture(nil, \"BACKGROUND\")\n\tscrollbg:SetAllPoints(scrollbar)\n\tscrollbg:SetTexture(0,0,0,0.4)\n\n\tlocal border = CreateFrame(\"Frame\",nil,frame)\n\tborder:SetPoint(\"TOPLEFT\", treeframe, \"TOPRIGHT\")\n\tborder:SetPoint(\"BOTTOMRIGHT\")\n\tborder:SetBackdrop(PaneBackdrop)\n\tborder:SetBackdropColor(0.1, 0.1, 0.1, 0.5)\n\tborder:SetBackdropBorderColor(0.4, 0.4, 0.4)\n\n\t--Container Support\n\tlocal content = CreateFrame(\"Frame\", nil, border)\n\tcontent:SetPoint(\"TOPLEFT\", 10, -10)\n\tcontent:SetPoint(\"BOTTOMRIGHT\", -10, 10)\n\n\tlocal widget = {\n\t\tframe        = frame,\n\t\tlines        = {},\n\t\tlevels       = {},\n\t\tbuttons      = {},\n\t\thasChildren  = {},\n\t\tlocalstatus  = { groups = {}, scrollvalue = 0 },\n\t\tfilter       = false,\n\t\ttreeframe    = treeframe,\n\t\tdragger      = dragger,\n\t\tscrollbar    = scrollbar,\n\t\tborder       = border,\n\t\tcontent      = content,\n\t\ttype         = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\ttreeframe.obj, dragger.obj, scrollbar.obj = widget, widget, widget\n\n\treturn AceGUI:RegisterAsContainer(widget)\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIContainer-Window.lua",
    "content": "local AceGUI = LibStub(\"AceGUI-3.0\")\n\n-- Lua APIs\nlocal pairs, assert, type = pairs, assert, type\n\n-- WoW APIs\nlocal PlaySound = PlaySound\nlocal CreateFrame, UIParent = CreateFrame, UIParent\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: GameFontNormal\n\n----------------\n-- Main Frame --\n----------------\n--[[\n\tEvents :\n\t\tOnClose\n\n]]\ndo\n\tlocal Type = \"Window\"\n\tlocal Version = 4\n\n\tlocal function frameOnClose(this)\n\t\tthis.obj:Fire(\"OnClose\")\n\tend\n\t\n\tlocal function closeOnClick(this)\n\t\tPlaySound(\"gsTitleOptionExit\")\n\t\tthis.obj:Hide()\n\tend\n\t\n\tlocal function frameOnMouseDown(this)\n\t\tAceGUI:ClearFocus()\n\tend\n\t\n\tlocal function titleOnMouseDown(this)\n\t\tthis:GetParent():StartMoving()\n\t\tAceGUI:ClearFocus()\n\tend\n\t\n\tlocal function frameOnMouseUp(this)\n\t\tlocal frame = this:GetParent()\n\t\tframe:StopMovingOrSizing()\n\t\tlocal self = frame.obj\n\t\tlocal status = self.status or self.localstatus\n\t\tstatus.width = frame:GetWidth()\n\t\tstatus.height = frame:GetHeight()\n\t\tstatus.top = frame:GetTop()\n\t\tstatus.left = frame:GetLeft()\n\tend\n\t\n\tlocal function sizerseOnMouseDown(this)\n\t\tthis:GetParent():StartSizing(\"BOTTOMRIGHT\")\n\t\tAceGUI:ClearFocus()\n\tend\n\t\n\tlocal function sizersOnMouseDown(this)\n\t\tthis:GetParent():StartSizing(\"BOTTOM\")\n\t\tAceGUI:ClearFocus()\n\tend\n\t\n\tlocal function sizereOnMouseDown(this)\n\t\tthis:GetParent():StartSizing(\"RIGHT\")\n\t\tAceGUI:ClearFocus()\n\tend\n\t\n\tlocal function sizerOnMouseUp(this)\n\t\tthis:GetParent():StopMovingOrSizing()\n\tend\n\n\tlocal function SetTitle(self,title)\n\t\tself.titletext:SetText(title)\n\tend\n\t\n\tlocal function SetStatusText(self,text)\n\t\t-- self.statustext:SetText(text)\n\tend\n\t\n\tlocal function Hide(self)\n\t\tself.frame:Hide()\n\tend\n\t\n\tlocal function Show(self)\n\t\tself.frame:Show()\n\tend\n\t\n\tlocal function OnAcquire(self)\n\t\tself.frame:SetParent(UIParent)\n\t\tself.frame:SetFrameStrata(\"FULLSCREEN_DIALOG\")\n\t\tself:ApplyStatus()\n\t\tself:EnableResize(true)\n\t\tself:Show()\n\tend\n\t\n\tlocal function OnRelease(self)\n\t\tself.status = nil\n\t\tfor k in pairs(self.localstatus) do\n\t\t\tself.localstatus[k] = nil\n\t\tend\n\tend\n\t\n\t-- called to set an external table to store status in\n\tlocal function SetStatusTable(self, status)\n\t\tassert(type(status) == \"table\")\n\t\tself.status = status\n\t\tself:ApplyStatus()\n\tend\n\t\n\tlocal function ApplyStatus(self)\n\t\tlocal status = self.status or self.localstatus\n\t\tlocal frame = self.frame\n\t\tself:SetWidth(status.width or 700)\n\t\tself:SetHeight(status.height or 500)\n\t\tif status.top and status.left then\n\t\t\tframe:SetPoint(\"TOP\",UIParent,\"BOTTOM\",0,status.top)\n\t\t\tframe:SetPoint(\"LEFT\",UIParent,\"LEFT\",status.left,0)\n\t\telse\n\t\t\tframe:SetPoint(\"CENTER\",UIParent,\"CENTER\")\n\t\tend\n\tend\n\t\n\tlocal function OnWidthSet(self, width)\n\t\tlocal content = self.content\n\t\tlocal contentwidth = width - 34\n\t\tif contentwidth < 0 then\n\t\t\tcontentwidth = 0\n\t\tend\n\t\tcontent:SetWidth(contentwidth)\n\t\tcontent.width = contentwidth\n\tend\n\t\n\t\n\tlocal function OnHeightSet(self, height)\n\t\tlocal content = self.content\n\t\tlocal contentheight = height - 57\n\t\tif contentheight < 0 then\n\t\t\tcontentheight = 0\n\t\tend\n\t\tcontent:SetHeight(contentheight)\n\t\tcontent.height = contentheight\n\tend\n\t\n\tlocal function EnableResize(self, state)\n\t\tlocal func = state and \"Show\" or \"Hide\"\n\t\tself.sizer_se[func](self.sizer_se)\n\t\tself.sizer_s[func](self.sizer_s)\n\t\tself.sizer_e[func](self.sizer_e)\n\tend\n\t\n\tlocal function Constructor()\n\t\tlocal frame = CreateFrame(\"Frame\",nil,UIParent)\n\t\tlocal self = {}\n\t\tself.type = \"Window\"\n\t\t\n\t\tself.Hide = Hide\n\t\tself.Show = Show\n\t\tself.SetTitle =  SetTitle\n\t\tself.OnRelease = OnRelease\n\t\tself.OnAcquire = OnAcquire\n\t\tself.SetStatusText = SetStatusText\n\t\tself.SetStatusTable = SetStatusTable\n\t\tself.ApplyStatus = ApplyStatus\n\t\tself.OnWidthSet = OnWidthSet\n\t\tself.OnHeightSet = OnHeightSet\n\t\tself.EnableResize = EnableResize\n\t\t\n\t\tself.localstatus = {}\n\t\t\n\t\tself.frame = frame\n\t\tframe.obj = self\n\t\tframe:SetWidth(700)\n\t\tframe:SetHeight(500)\n\t\tframe:SetPoint(\"CENTER\",UIParent,\"CENTER\",0,0)\n\t\tframe:EnableMouse()\n\t\tframe:SetMovable(true)\n\t\tframe:SetResizable(true)\n\t\tframe:SetFrameStrata(\"FULLSCREEN_DIALOG\")\n\t\tframe:SetScript(\"OnMouseDown\", frameOnMouseDown)\n\t\t\n\t\tframe:SetScript(\"OnHide\",frameOnClose)\n\t\tframe:SetMinResize(240,240)\n\t\tframe:SetToplevel(true)\n\n\t\tlocal titlebg = frame:CreateTexture(nil, \"BACKGROUND\")\n\t\ttitlebg:SetTexture([[Interface\\PaperDollInfoFrame\\UI-GearManager-Title-Background]])\n\t\ttitlebg:SetPoint(\"TOPLEFT\", 9, -6)\n\t\ttitlebg:SetPoint(\"BOTTOMRIGHT\", frame, \"TOPRIGHT\", -28, -24)\n\t\t\n\t\tlocal dialogbg = frame:CreateTexture(nil, \"BACKGROUND\")\n\t\tdialogbg:SetTexture([[Interface\\Tooltips\\UI-Tooltip-Background]])\n\t\tdialogbg:SetPoint(\"TOPLEFT\", 8, -24)\n\t\tdialogbg:SetPoint(\"BOTTOMRIGHT\", -6, 8)\n\t\tdialogbg:SetVertexColor(0, 0, 0, .75)\n\t\t\n\t\tlocal topleft = frame:CreateTexture(nil, \"BORDER\")\n\t\ttopleft:SetTexture([[Interface\\PaperDollInfoFrame\\UI-GearManager-Border]])\n\t\ttopleft:SetWidth(64)\n\t\ttopleft:SetHeight(64)\n\t\ttopleft:SetPoint(\"TOPLEFT\")\n\t\ttopleft:SetTexCoord(0.501953125, 0.625, 0, 1)\n\t\t\n\t\tlocal topright = frame:CreateTexture(nil, \"BORDER\")\n\t\ttopright:SetTexture([[Interface\\PaperDollInfoFrame\\UI-GearManager-Border]])\n\t\ttopright:SetWidth(64)\n\t\ttopright:SetHeight(64)\n\t\ttopright:SetPoint(\"TOPRIGHT\")\n\t\ttopright:SetTexCoord(0.625, 0.75, 0, 1)\n\t\t\n\t\tlocal top = frame:CreateTexture(nil, \"BORDER\")\n\t\ttop:SetTexture([[Interface\\PaperDollInfoFrame\\UI-GearManager-Border]])\n\t\ttop:SetHeight(64)\n\t\ttop:SetPoint(\"TOPLEFT\", topleft, \"TOPRIGHT\")\n\t\ttop:SetPoint(\"TOPRIGHT\", topright, \"TOPLEFT\")\n\t\ttop:SetTexCoord(0.25, 0.369140625, 0, 1)\n\t\t\n\t\tlocal bottomleft = frame:CreateTexture(nil, \"BORDER\")\n\t\tbottomleft:SetTexture([[Interface\\PaperDollInfoFrame\\UI-GearManager-Border]])\n\t\tbottomleft:SetWidth(64)\n\t\tbottomleft:SetHeight(64)\n\t\tbottomleft:SetPoint(\"BOTTOMLEFT\")\n\t\tbottomleft:SetTexCoord(0.751953125, 0.875, 0, 1)\n\t\t\n\t\tlocal bottomright = frame:CreateTexture(nil, \"BORDER\")\n\t\tbottomright:SetTexture([[Interface\\PaperDollInfoFrame\\UI-GearManager-Border]])\n\t\tbottomright:SetWidth(64)\n\t\tbottomright:SetHeight(64)\n\t\tbottomright:SetPoint(\"BOTTOMRIGHT\")\n\t\tbottomright:SetTexCoord(0.875, 1, 0, 1)\n\t\t\n\t\tlocal bottom = frame:CreateTexture(nil, \"BORDER\")\n\t\tbottom:SetTexture([[Interface\\PaperDollInfoFrame\\UI-GearManager-Border]])\n\t\tbottom:SetHeight(64)\n\t\tbottom:SetPoint(\"BOTTOMLEFT\", bottomleft, \"BOTTOMRIGHT\")\n\t\tbottom:SetPoint(\"BOTTOMRIGHT\", bottomright, \"BOTTOMLEFT\")\n\t\tbottom:SetTexCoord(0.376953125, 0.498046875, 0, 1)\n\t\t\n\t\tlocal left = frame:CreateTexture(nil, \"BORDER\")\n\t\tleft:SetTexture([[Interface\\PaperDollInfoFrame\\UI-GearManager-Border]])\n\t\tleft:SetWidth(64)\n\t\tleft:SetPoint(\"TOPLEFT\", topleft, \"BOTTOMLEFT\")\n\t\tleft:SetPoint(\"BOTTOMLEFT\", bottomleft, \"TOPLEFT\")\n\t\tleft:SetTexCoord(0.001953125, 0.125, 0, 1)\n\t\t\n\t\tlocal right = frame:CreateTexture(nil, \"BORDER\")\n\t\tright:SetTexture([[Interface\\PaperDollInfoFrame\\UI-GearManager-Border]])\n\t\tright:SetWidth(64)\n\t\tright:SetPoint(\"TOPRIGHT\", topright, \"BOTTOMRIGHT\")\n\t\tright:SetPoint(\"BOTTOMRIGHT\", bottomright, \"TOPRIGHT\")\n\t\tright:SetTexCoord(0.1171875, 0.2421875, 0, 1)\n\t\t\n\t\tlocal close = CreateFrame(\"Button\", nil, frame, \"UIPanelCloseButton\")\n\t\tclose:SetPoint(\"TOPRIGHT\", 2, 1)\n\t\tclose:SetScript(\"OnClick\", closeOnClick)\n\t\tself.closebutton = close\n\t\tclose.obj = self\n\t\t\n\t\tlocal titletext = frame:CreateFontString(nil, \"ARTWORK\")\n\t\ttitletext:SetFontObject(GameFontNormal)\n\t\ttitletext:SetPoint(\"TOPLEFT\", 12, -8)\n\t\ttitletext:SetPoint(\"TOPRIGHT\", -32, -8)\n\t\tself.titletext = titletext\n\t\t\n\t\tlocal title = CreateFrame(\"Button\", nil, frame)\n\t\ttitle:SetPoint(\"TOPLEFT\", titlebg)\n\t\ttitle:SetPoint(\"BOTTOMRIGHT\", titlebg)\n\t\ttitle:EnableMouse()\n\t\ttitle:SetScript(\"OnMouseDown\",titleOnMouseDown)\n\t\ttitle:SetScript(\"OnMouseUp\", frameOnMouseUp)\n\t\tself.title = title\n\t\t\n\t\tlocal sizer_se = CreateFrame(\"Frame\",nil,frame)\n\t\tsizer_se:SetPoint(\"BOTTOMRIGHT\",frame,\"BOTTOMRIGHT\",0,0)\n\t\tsizer_se:SetWidth(25)\n\t\tsizer_se:SetHeight(25)\n\t\tsizer_se:EnableMouse()\n\t\tsizer_se:SetScript(\"OnMouseDown\",sizerseOnMouseDown)\n\t\tsizer_se:SetScript(\"OnMouseUp\", sizerOnMouseUp)\n\t\tself.sizer_se = sizer_se\n\n\t\tlocal line1 = sizer_se:CreateTexture(nil, \"BACKGROUND\")\n\t\tself.line1 = line1\n\t\tline1:SetWidth(14)\n\t\tline1:SetHeight(14)\n\t\tline1:SetPoint(\"BOTTOMRIGHT\", -8, 8)\n\t\tline1:SetTexture(\"Interface\\\\Tooltips\\\\UI-Tooltip-Border\")\n\t\tlocal x = 0.1 * 14/17\n\t\tline1:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5)\n\n\t\tlocal line2 = sizer_se:CreateTexture(nil, \"BACKGROUND\")\n\t\tself.line2 = line2\n\t\tline2:SetWidth(8)\n\t\tline2:SetHeight(8)\n\t\tline2:SetPoint(\"BOTTOMRIGHT\", -8, 8)\n\t\tline2:SetTexture(\"Interface\\\\Tooltips\\\\UI-Tooltip-Border\")\n\t\tlocal x = 0.1 * 8/17\n\t\tline2:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5)\n\n\t\tlocal sizer_s = CreateFrame(\"Frame\",nil,frame)\n\t\tsizer_s:SetPoint(\"BOTTOMRIGHT\",frame,\"BOTTOMRIGHT\",-25,0)\n\t\tsizer_s:SetPoint(\"BOTTOMLEFT\",frame,\"BOTTOMLEFT\",0,0)\n\t\tsizer_s:SetHeight(25)\n\t\tsizer_s:EnableMouse()\n\t\tsizer_s:SetScript(\"OnMouseDown\",sizersOnMouseDown)\n\t\tsizer_s:SetScript(\"OnMouseUp\", sizerOnMouseUp)\n\t\tself.sizer_s = sizer_s\n\t\t\n\t\tlocal sizer_e = CreateFrame(\"Frame\",nil,frame)\n\t\tsizer_e:SetPoint(\"BOTTOMRIGHT\",frame,\"BOTTOMRIGHT\",0,25)\n\t\tsizer_e:SetPoint(\"TOPRIGHT\",frame,\"TOPRIGHT\",0,0)\n\t\tsizer_e:SetWidth(25)\n\t\tsizer_e:EnableMouse()\n\t\tsizer_e:SetScript(\"OnMouseDown\",sizereOnMouseDown)\n\t\tsizer_e:SetScript(\"OnMouseUp\", sizerOnMouseUp)\n\t\tself.sizer_e = sizer_e\n\t\n\t\t--Container Support\n\t\tlocal content = CreateFrame(\"Frame\",nil,frame)\n\t\tself.content = content\n\t\tcontent.obj = self\n\t\tcontent:SetPoint(\"TOPLEFT\",frame,\"TOPLEFT\",12,-32)\n\t\tcontent:SetPoint(\"BOTTOMRIGHT\",frame,\"BOTTOMRIGHT\",-12,13)\n\t\t\n\t\tAceGUI:RegisterAsContainer(self)\n\t\treturn self\t\n\tend\n\t\n\tAceGUI:RegisterWidgetType(Type,Constructor,Version)\nend\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIWidget-Button.lua",
    "content": "--[[-----------------------------------------------------------------------------\nButton Widget\nGraphical Button.\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"Button\", 20\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal pairs = pairs\n\n-- WoW APIs\nlocal _G = _G\nlocal PlaySound, CreateFrame, UIParent = PlaySound, CreateFrame, UIParent\n\n--[[-----------------------------------------------------------------------------\nScripts\n-------------------------------------------------------------------------------]]\nlocal function Button_OnClick(frame, ...)\n\tPlaySound(\"igMainMenuOption\")\n\tframe.obj:Fire(\"OnClick\", ...)\n\tAceGUI:ClearFocus()\nend\n\nlocal function Control_OnEnter(frame)\n\tframe.obj:Fire(\"OnEnter\")\nend\n\nlocal function Control_OnLeave(frame)\n\tframe.obj:Fire(\"OnLeave\")\nend\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\t-- restore default values\n\t\tself:SetHeight(24)\n\t\tself:SetWidth(200)\n\t\tself:SetDisabled(false)\n\t\tself:SetText()\n\tend,\n\n\t-- [\"OnRelease\"] = nil,\n\n\t[\"SetText\"] = function(self, text)\n\t\tself.text:SetText(text)\n\tend,\n\n\t[\"SetDisabled\"] = function(self, disabled)\n\t\tself.disabled = disabled\n\t\tif disabled then\n\t\t\tself.frame:Disable()\n\t\telse\n\t\t\tself.frame:Enable()\n\t\tend\n\tend\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal function Constructor()\n\tlocal name = \"AceGUI30Button\" .. AceGUI:GetNextWidgetNum(Type)\n\tlocal frame = CreateFrame(\"Button\", name, UIParent, \"UIPanelButtonTemplate2\")\n\tframe:Hide()\n\n\tframe:EnableMouse(true)\n\tframe:SetScript(\"OnClick\", Button_OnClick)\n\tframe:SetScript(\"OnEnter\", Control_OnEnter)\n\tframe:SetScript(\"OnLeave\", Control_OnLeave)\n\n\tlocal text = frame:GetFontString()\n\ttext:ClearAllPoints()\n\ttext:SetPoint(\"TOPLEFT\", 15, -1)\n\ttext:SetPoint(\"BOTTOMRIGHT\", -15, 1)\n\ttext:SetJustifyV(\"MIDDLE\")\n\n\tlocal widget = {\n\t\ttext  = text,\n\t\tframe = frame,\n\t\ttype  = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\n\treturn AceGUI:RegisterAsWidget(widget)\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua",
    "content": "--[[-----------------------------------------------------------------------------\nCheckbox Widget\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"CheckBox\", 21\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal select, pairs = select, pairs\n\n-- WoW APIs\nlocal PlaySound = PlaySound\nlocal CreateFrame, UIParent = CreateFrame, UIParent\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: SetDesaturation, GameFontHighlight\n\n--[[-----------------------------------------------------------------------------\nSupport functions\n-------------------------------------------------------------------------------]]\nlocal function AlignImage(self)\n\tlocal img = self.image:GetTexture()\n\tself.text:ClearAllPoints()\n\tif not img then\n\t\tself.text:SetPoint(\"LEFT\", self.checkbg, \"RIGHT\")\n\t\tself.text:SetPoint(\"RIGHT\")\n\telse\n\t\tself.text:SetPoint(\"LEFT\", self.image,\"RIGHT\", 1, 0)\n\t\tself.text:SetPoint(\"RIGHT\")\n\tend\nend\n\n--[[-----------------------------------------------------------------------------\nScripts\n-------------------------------------------------------------------------------]]\nlocal function Control_OnEnter(frame)\n\tframe.obj:Fire(\"OnEnter\")\nend\n\nlocal function Control_OnLeave(frame)\n\tframe.obj:Fire(\"OnLeave\")\nend\n\nlocal function CheckBox_OnMouseDown(frame)\n\tlocal self = frame.obj\n\tif not self.disabled then\n\t\tif self.image:GetTexture() then\n\t\t\tself.text:SetPoint(\"LEFT\", self.image,\"RIGHT\", 2, -1)\n\t\telse\n\t\t\tself.text:SetPoint(\"LEFT\", self.checkbg, \"RIGHT\", 1, -1)\n\t\tend\n\tend\n\tAceGUI:ClearFocus()\nend\n\nlocal function CheckBox_OnMouseUp(frame)\n\tlocal self = frame.obj\n\tif not self.disabled then\n\t\tself:ToggleChecked()\n\n\t\tif self.checked then\n\t\t\tPlaySound(\"igMainMenuOptionCheckBoxOn\")\n\t\telse -- for both nil and false (tristate)\n\t\t\tPlaySound(\"igMainMenuOptionCheckBoxOff\")\n\t\tend\n\n\t\tself:Fire(\"OnValueChanged\", self.checked)\n\t\tAlignImage(self)\n\tend\nend\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\tself:SetType()\n\t\tself:SetValue(false)\n\t\tself:SetTriState(nil)\n\t\t-- height is calculated from the width and required space for the description\n\t\tself:SetWidth(200)\n\t\tself:SetImage()\n\t\tself:SetDisabled(nil)\n\t\tself:SetDescription(nil)\n\tend,\n\n\t-- [\"OnRelease\"] = nil,\n\n\t[\"OnWidthSet\"] = function(self, width)\n\t\tif self.desc then\n\t\t\tself.desc:SetWidth(width - 30)\n\t\t\tif self.desc:GetText() and self.desc:GetText() ~= \"\" then\n\t\t\t\tself:SetHeight(28 + self.desc:GetHeight())\n\t\t\tend\n\t\tend\n\tend,\n\n\t[\"SetDisabled\"] = function(self, disabled)\n\t\tself.disabled = disabled\n\t\tif disabled then\n\t\t\tself.frame:Disable()\n\t\t\tself.text:SetTextColor(0.5, 0.5, 0.5)\n\t\t\tSetDesaturation(self.check, true)\n\t\telse\n\t\t\tself.frame:Enable()\n\t\t\tself.text:SetTextColor(1, 1, 1)\n\t\t\tif self.tristate and self.checked == nil then\n\t\t\t\tSetDesaturation(self.check, true)\n\t\t\telse\n\t\t\t\tSetDesaturation(self.check, false)\n\t\t\tend\n\t\tend\n\tend,\n\n\t[\"SetValue\"] = function(self,value)\n\t\tlocal check = self.check\n\t\tself.checked = value\n\t\tif value then\n\t\t\tSetDesaturation(self.check, false)\n\t\t\tself.check:Show()\n\t\telse\n\t\t\t--Nil is the unknown tristate value\n\t\t\tif self.tristate and value == nil then\n\t\t\t\tSetDesaturation(self.check, true)\n\t\t\t\tself.check:Show()\n\t\t\telse\n\t\t\t\tSetDesaturation(self.check, false)\n\t\t\t\tself.check:Hide()\n\t\t\tend\n\t\tend\n\t\tself:SetDisabled(self.disabled)\n\tend,\n\n\t[\"GetValue\"] = function(self)\n\t\treturn self.checked\n\tend,\n\n\t[\"SetTriState\"] = function(self, enabled)\n\t\tself.tristate = enabled\n\t\tself:SetValue(self:GetValue())\n\tend,\n\n\t[\"SetType\"] = function(self, type)\n\t\tlocal checkbg = self.checkbg\n\t\tlocal check = self.check\n\t\tlocal highlight = self.highlight\n\n\t\tlocal size\n\t\tif type == \"radio\" then\n\t\t\tsize = 16\n\t\t\tcheckbg:SetTexture(\"Interface\\\\Buttons\\\\UI-RadioButton\")\n\t\t\tcheckbg:SetTexCoord(0, 0.25, 0, 1)\n\t\t\tcheck:SetTexture(\"Interface\\\\Buttons\\\\UI-RadioButton\")\n\t\t\tcheck:SetTexCoord(0.25, 0.5, 0, 1)\n\t\t\tcheck:SetBlendMode(\"ADD\")\n\t\t\thighlight:SetTexture(\"Interface\\\\Buttons\\\\UI-RadioButton\")\n\t\t\thighlight:SetTexCoord(0.5, 0.75, 0, 1)\n\t\telse\n\t\t\tsize = 24\n\t\t\tcheckbg:SetTexture(\"Interface\\\\Buttons\\\\UI-CheckBox-Up\")\n\t\t\tcheckbg:SetTexCoord(0, 1, 0, 1)\n\t\t\tcheck:SetTexture(\"Interface\\\\Buttons\\\\UI-CheckBox-Check\")\n\t\t\tcheck:SetTexCoord(0, 1, 0, 1)\n\t\t\tcheck:SetBlendMode(\"BLEND\")\n\t\t\thighlight:SetTexture(\"Interface\\\\Buttons\\\\UI-CheckBox-Highlight\")\n\t\t\thighlight:SetTexCoord(0, 1, 0, 1)\n\t\tend\n\t\tcheckbg:SetHeight(size)\n\t\tcheckbg:SetWidth(size)\n\tend,\n\n\t[\"ToggleChecked\"] = function(self)\n\t\tlocal value = self:GetValue()\n\t\tif self.tristate then\n\t\t\t--cycle in true, nil, false order\n\t\t\tif value then\n\t\t\t\tself:SetValue(nil)\n\t\t\telseif value == nil then\n\t\t\t\tself:SetValue(false)\n\t\t\telse\n\t\t\t\tself:SetValue(true)\n\t\t\tend\n\t\telse\n\t\t\tself:SetValue(not self:GetValue())\n\t\tend\n\tend,\n\n\t[\"SetLabel\"] = function(self, label)\n\t\tself.text:SetText(label)\n\tend,\n\n\t[\"SetDescription\"] = function(self, desc)\n\t\tif desc then\n\t\t\tif not self.desc then\n\t\t\t\tlocal desc = self.frame:CreateFontString(nil, \"OVERLAY\", \"GameFontHighlightSmall\")\n\t\t\t\tdesc:ClearAllPoints()\n\t\t\t\tdesc:SetPoint(\"TOPLEFT\", self.checkbg, \"TOPRIGHT\", 5, -21)\n\t\t\t\tdesc:SetWidth(self.frame.width - 30)\n\t\t\t\tdesc:SetJustifyH(\"LEFT\")\n\t\t\t\tdesc:SetJustifyV(\"TOP\")\n\t\t\t\tself.desc = desc\n\t\t\tend\n\t\t\tself.desc:Show()\n\t\t\t--self.text:SetFontObject(GameFontNormal)\n\t\t\tself.desc:SetText(desc)\n\t\t\tself:SetHeight(28 + self.desc:GetHeight())\n\t\telse\n\t\t\tif self.desc then\n\t\t\t\tself.desc:SetText(\"\")\n\t\t\t\tself.desc:Hide()\n\t\t\tend\n\t\t\t--self.text:SetFontObject(GameFontHighlight)\n\t\t\tself:SetHeight(24)\n\t\tend\n\tend,\n\t\n\t[\"SetImage\"] = function(self, path, ...)\n\t\tlocal image = self.image\n\t\timage:SetTexture(path)\n\t\t\n\t\tif image:GetTexture() then\n\t\t\tlocal n = select(\"#\", ...)\n\t\t\tif n == 4 or n == 8 then\n\t\t\t\timage:SetTexCoord(...)\n\t\t\telse\n\t\t\t\timage:SetTexCoord(0, 1, 0, 1)\n\t\t\tend\n\t\tend\n\t\tAlignImage(self)\n\tend\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal function Constructor()\n\tlocal frame = CreateFrame(\"Button\", nil, UIParent)\n\tframe:Hide()\n\n\tframe:EnableMouse(true)\n\tframe:SetScript(\"OnEnter\", Control_OnEnter)\n\tframe:SetScript(\"OnLeave\", Control_OnLeave)\n\tframe:SetScript(\"OnMouseDown\", CheckBox_OnMouseDown)\n\tframe:SetScript(\"OnMouseUp\", CheckBox_OnMouseUp)\n\n\tlocal checkbg = frame:CreateTexture(nil, \"ARTWORK\")\n\tcheckbg:SetWidth(24)\n\tcheckbg:SetHeight(24)\n\tcheckbg:SetPoint(\"TOPLEFT\")\n\tcheckbg:SetTexture(\"Interface\\\\Buttons\\\\UI-CheckBox-Up\")\n\n\tlocal check = frame:CreateTexture(nil, \"OVERLAY\")\n\tcheck:SetAllPoints(checkbg)\n\tcheck:SetTexture(\"Interface\\\\Buttons\\\\UI-CheckBox-Check\")\n\n\tlocal text = frame:CreateFontString(nil, \"OVERLAY\", \"GameFontHighlight\")\n\ttext:SetJustifyH(\"LEFT\")\n\ttext:SetHeight(18)\n\ttext:SetPoint(\"LEFT\", checkbg, \"RIGHT\")\n\ttext:SetPoint(\"RIGHT\")\n\n\tlocal highlight = frame:CreateTexture(nil, \"HIGHLIGHT\")\n\thighlight:SetTexture(\"Interface\\\\Buttons\\\\UI-CheckBox-Highlight\")\n\thighlight:SetBlendMode(\"ADD\")\n\thighlight:SetAllPoints(checkbg)\n\n\tlocal image = frame:CreateTexture(nil, \"OVERLAY\")\n\timage:SetHeight(16)\n\timage:SetWidth(16)\n\timage:SetPoint(\"LEFT\", checkbg, \"RIGHT\", 1, 0)\n\n\tlocal widget = {\n\t\tcheckbg   = checkbg,\n\t\tcheck     = check,\n\t\ttext      = text,\n\t\thighlight = highlight,\n\t\timage     = image,\n\t\tframe     = frame,\n\t\ttype      = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\n\treturn AceGUI:RegisterAsWidget(widget)\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua",
    "content": "--[[-----------------------------------------------------------------------------\nColorPicker Widget\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"ColorPicker\", 20\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal pairs = pairs\n\n-- WoW APIs\nlocal CreateFrame, UIParent = CreateFrame, UIParent\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: ShowUIPanel, HideUIPanel, ColorPickerFrame, OpacitySliderFrame\n\n--[[-----------------------------------------------------------------------------\nSupport functions\n-------------------------------------------------------------------------------]]\nlocal function ColorCallback(self, r, g, b, a, isAlpha)\n\tif not self.HasAlpha then\n\t\ta = 1\n\tend\n\tself:SetColor(r, g, b, a)\n\tif ColorPickerFrame:IsVisible() then\n\t\t--colorpicker is still open\n\t\tself:Fire(\"OnValueChanged\", r, g, b, a)\n\telse\n\t\t--colorpicker is closed, color callback is first, ignore it,\n\t\t--alpha callback is the final call after it closes so confirm now\n\t\tif isAlpha then\n\t\t\tself:Fire(\"OnValueConfirmed\", r, g, b, a)\n\t\tend\n\tend\nend\n\n--[[-----------------------------------------------------------------------------\nScripts\n-------------------------------------------------------------------------------]]\nlocal function Control_OnEnter(frame)\n\tframe.obj:Fire(\"OnEnter\")\nend\n\nlocal function Control_OnLeave(frame)\n\tframe.obj:Fire(\"OnLeave\")\nend\n\nlocal function ColorSwatch_OnClick(frame)\n\tHideUIPanel(ColorPickerFrame)\n\tlocal self = frame.obj\n\tif not self.disabled then\n\t\tColorPickerFrame:SetFrameStrata(\"FULLSCREEN_DIALOG\")\n\n\t\tColorPickerFrame.func = function()\n\t\t\tlocal r, g, b = ColorPickerFrame:GetColorRGB()\n\t\t\tlocal a = 1 - OpacitySliderFrame:GetValue()\n\t\t\tColorCallback(self, r, g, b, a)\n\t\tend\n\n\t\tColorPickerFrame.hasOpacity = self.HasAlpha\n\t\tColorPickerFrame.opacityFunc = function()\n\t\t\tlocal r, g, b = ColorPickerFrame:GetColorRGB()\n\t\t\tlocal a = 1 - OpacitySliderFrame:GetValue()\n\t\t\tColorCallback(self, r, g, b, a, true)\n\t\tend\n\n\t\tlocal r, g, b, a = self.r, self.g, self.b, self.a\n\t\tif self.HasAlpha then\n\t\t\tColorPickerFrame.opacity = 1 - (a or 0)\n\t\tend\n\t\tColorPickerFrame:SetColorRGB(r, g, b)\n\n\t\tColorPickerFrame.cancelFunc = function()\n\t\t\tColorCallback(self, r, g, b, a, true)\n\t\tend\n\n\t\tShowUIPanel(ColorPickerFrame)\n\tend\n\tAceGUI:ClearFocus()\nend\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\tself:SetHeight(24)\n\t\tself:SetWidth(200)\n\t\tself:SetHasAlpha(false)\n\t\tself:SetColor(0, 0, 0, 1)\n\t\tself:SetDisabled(nil)\n\t\tself:SetLabel(nil)\n\tend,\n\n\t-- [\"OnRelease\"] = nil,\n\n\t[\"SetLabel\"] = function(self, text)\n\t\tself.text:SetText(text)\n\tend,\n\n\t[\"SetColor\"] = function(self, r, g, b, a)\n\t\tself.r = r\n\t\tself.g = g\n\t\tself.b = b\n\t\tself.a = a or 1\n\t\tself.colorSwatch:SetVertexColor(r, g, b, a)\n\tend,\n\n\t[\"SetHasAlpha\"] = function(self, HasAlpha)\n\t\tself.HasAlpha = HasAlpha\n\tend,\n\n\t[\"SetDisabled\"] = function(self, disabled)\n\t\tself.disabled = disabled\n\t\tif self.disabled then\n\t\t\tself.frame:Disable()\n\t\t\tself.text:SetTextColor(0.5, 0.5, 0.5)\n\t\telse\n\t\t\tself.frame:Enable()\n\t\t\tself.text:SetTextColor(1, 1, 1)\n\t\tend\n\tend\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal function Constructor()\n\tlocal frame = CreateFrame(\"Button\", nil, UIParent)\n\tframe:Hide()\n\n\tframe:EnableMouse(true)\n\tframe:SetScript(\"OnEnter\", Control_OnEnter)\n\tframe:SetScript(\"OnLeave\", Control_OnLeave)\n\tframe:SetScript(\"OnClick\", ColorSwatch_OnClick)\n\n\tlocal colorSwatch = frame:CreateTexture(nil, \"OVERLAY\")\n\tcolorSwatch:SetWidth(19)\n\tcolorSwatch:SetHeight(19)\n\tcolorSwatch:SetTexture(\"Interface\\\\ChatFrame\\\\ChatFrameColorSwatch\")\n\tcolorSwatch:SetPoint(\"LEFT\")\n\n\tlocal texture = frame:CreateTexture(nil, \"BACKGROUND\")\n\ttexture:SetWidth(16)\n\ttexture:SetHeight(16)\n\ttexture:SetTexture(1, 1, 1)\n\ttexture:SetPoint(\"CENTER\", colorSwatch)\n\ttexture:Show()\n\n\tlocal checkers = frame:CreateTexture(nil, \"BACKGROUND\")\n\tcheckers:SetWidth(14)\n\tcheckers:SetHeight(14)\n\tcheckers:SetTexture(\"Tileset\\\\Generic\\\\Checkers\")\n\tcheckers:SetTexCoord(.25, 0, 0.5, .25)\n\tcheckers:SetDesaturated(true)\n\tcheckers:SetVertexColor(1, 1, 1, 0.75)\n\tcheckers:SetPoint(\"CENTER\", colorSwatch)\n\tcheckers:Show()\n\n\tlocal text = frame:CreateFontString(nil,\"OVERLAY\",\"GameFontHighlight\")\n\ttext:SetHeight(24)\n\ttext:SetJustifyH(\"LEFT\")\n\ttext:SetTextColor(1, 1, 1)\n\ttext:SetPoint(\"LEFT\", colorSwatch, \"RIGHT\", 2, 0)\n\ttext:SetPoint(\"RIGHT\")\n\n\t--local highlight = frame:CreateTexture(nil, \"HIGHLIGHT\")\n\t--highlight:SetTexture(\"Interface\\\\QuestFrame\\\\UI-QuestTitleHighlight\")\n\t--highlight:SetBlendMode(\"ADD\")\n\t--highlight:SetAllPoints(frame)\n\n\tlocal widget = {\n\t\tcolorSwatch = colorSwatch,\n\t\ttext        = text,\n\t\tframe       = frame,\n\t\ttype        = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\n\treturn AceGUI:RegisterAsWidget(widget)\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua",
    "content": "--[[ $Id: AceGUIWidget-DropDown-Items.lua 916 2010-03-15 12:24:36Z nevcairiel $ ]]--\n\nlocal AceGUI = LibStub(\"AceGUI-3.0\")\n\n-- Lua APIs\nlocal select, assert = select, assert\n\n-- WoW APIs\nlocal PlaySound = PlaySound\nlocal CreateFrame = CreateFrame\n\nlocal function fixlevels(parent,...)\n\tlocal i = 1\n\tlocal child = select(i, ...)\n\twhile child do\n\t\tchild:SetFrameLevel(parent:GetFrameLevel()+1)\n\t\tfixlevels(child, child:GetChildren())\n\t\ti = i + 1\n\t\tchild = select(i, ...)\n\tend\nend\n\nlocal function fixstrata(strata, parent, ...)\n\tlocal i = 1\n\tlocal child = select(i, ...)\n\tparent:SetFrameStrata(strata)\n\twhile child do\n\t\tfixstrata(strata, child, child:GetChildren())\n\t\ti = i + 1\n\t\tchild = select(i, ...)\n\tend\nend\n\n-- ItemBase is the base \"class\" for all dropdown items.\n-- Each item has to use ItemBase.Create(widgetType) to\n-- create an initial 'self' value. \n-- ItemBase will add common functions and ui event handlers.\n-- Be sure to keep basic usage when you override functions.\n\nlocal ItemBase = {\n\t-- NOTE: The ItemBase version is added to each item's version number\n\t--       to ensure proper updates on ItemBase changes.\n\t--       Use at least 1000er steps.\n\tversion = 1000,\n\tcounter = 0,\n}\n\nfunction ItemBase.Frame_OnEnter(this)\n\tlocal self = this.obj\n\n\tif self.useHighlight then\n\t\tself.highlight:Show()\n\tend\n\tself:Fire(\"OnEnter\")\n\t\n\tif self.specialOnEnter then\n\t\tself.specialOnEnter(self)\n\tend\nend\n\nfunction ItemBase.Frame_OnLeave(this)\n\tlocal self = this.obj\n\t\n\tself.highlight:Hide()\n\tself:Fire(\"OnLeave\")\n\t\n\tif self.specialOnLeave then\n\t\tself.specialOnLeave(self)\n\tend\nend\n\n-- exported, AceGUI callback\nfunction ItemBase.OnAcquire(self)\n\tself.frame:SetToplevel(true)\n\tself.frame:SetFrameStrata(\"FULLSCREEN_DIALOG\")\nend\n\n-- exported, AceGUI callback\nfunction ItemBase.OnRelease(self)\n\tself:SetDisabled(false)\n\tself.pullout = nil\n\tself.frame:SetParent(nil)\n\tself.frame:ClearAllPoints()\n\tself.frame:Hide()\nend\n\n-- exported\n-- NOTE: this is called by a Dropdown-Pullout.\n--       Do not call this method directly\nfunction ItemBase.SetPullout(self, pullout)\n\tself.pullout = pullout\n\t\n\tself.frame:SetParent(nil)\n\tself.frame:SetParent(pullout.itemFrame)\n\tself.parent = pullout.itemFrame\n\tfixlevels(pullout.itemFrame, pullout.itemFrame:GetChildren())\nend\n\n-- exported\nfunction ItemBase.SetText(self, text)\n\tself.text:SetText(text or \"\")\nend\n\n-- exported\nfunction ItemBase.GetText(self)\n\treturn self.text:GetText()\nend\n\n-- exported\nfunction ItemBase.SetPoint(self, ...)\n\tself.frame:SetPoint(...)\nend\n\n-- exported\nfunction ItemBase.Show(self)\n\tself.frame:Show()\nend\n\n-- exported\nfunction ItemBase.Hide(self)\n\tself.frame:Hide()\nend\n\n-- exported\nfunction ItemBase.SetDisabled(self, disabled)\n\tself.disabled = disabled\n\tif disabled then\n\t\tself.useHighlight = false\n\t\tself.text:SetTextColor(.5, .5, .5)\n\telse\n\t\tself.useHighlight = true\n\t\tself.text:SetTextColor(1, 1, 1)\n\tend\nend\n\n-- exported\n-- NOTE: this is called by a Dropdown-Pullout.\n--       Do not call this method directly\nfunction ItemBase.SetOnLeave(self, func)\n\tself.specialOnLeave = func\nend\n\n-- exported\n-- NOTE: this is called by a Dropdown-Pullout.\n--       Do not call this method directly\nfunction ItemBase.SetOnEnter(self, func)\n\tself.specialOnEnter = func\nend\n\nfunction ItemBase.Create(type)\n\t-- NOTE: Most of the following code is copied from AceGUI-3.0/Dropdown widget\n\tlocal count = AceGUI:GetNextWidgetNum(type)\n\tlocal frame = CreateFrame(\"Button\", \"AceGUI30DropDownItem\"..count)\n\tlocal self = {}\n\tself.frame = frame\n\tframe.obj = self\n\tself.type = type\n\t\n\tself.useHighlight = true\n\t\n\tframe:SetHeight(17)\n\tframe:SetFrameStrata(\"FULLSCREEN_DIALOG\")\n\t\n\tlocal text = frame:CreateFontString(nil,\"OVERLAY\",\"GameFontNormalSmall\")\n\ttext:SetTextColor(1,1,1)\n\ttext:SetJustifyH(\"LEFT\")\n\ttext:SetPoint(\"TOPLEFT\",frame,\"TOPLEFT\",18,0)\n\ttext:SetPoint(\"BOTTOMRIGHT\",frame,\"BOTTOMRIGHT\",-8,0)\n\tself.text = text\n\n\tlocal highlight = frame:CreateTexture(nil, \"OVERLAY\")\n\thighlight:SetTexture(\"Interface\\\\QuestFrame\\\\UI-QuestTitleHighlight\")\n\thighlight:SetBlendMode(\"ADD\")\n\thighlight:SetHeight(14)\n\thighlight:ClearAllPoints()\n\thighlight:SetPoint(\"RIGHT\",frame,\"RIGHT\",-3,0)\n\thighlight:SetPoint(\"LEFT\",frame,\"LEFT\",5,0)\n\thighlight:Hide()\n\tself.highlight = highlight\n\n\tlocal check = frame:CreateTexture(\"OVERLAY\")\t\n\tcheck:SetWidth(16)\n\tcheck:SetHeight(16)\n\tcheck:SetPoint(\"LEFT\",frame,\"LEFT\",3,-1)\n\tcheck:SetTexture(\"Interface\\\\Buttons\\\\UI-CheckBox-Check\")\n\tcheck:Hide()\n\tself.check = check\n\n\tlocal sub = frame:CreateTexture(\"OVERLAY\")\n\tsub:SetWidth(16)\n\tsub:SetHeight(16)\n\tsub:SetPoint(\"RIGHT\",frame,\"RIGHT\",-3,-1)\n\tsub:SetTexture(\"Interface\\\\ChatFrame\\\\ChatFrameExpandArrow\")\n\tsub:Hide()\n\tself.sub = sub\t\n\t\n\tframe:SetScript(\"OnEnter\", ItemBase.Frame_OnEnter)\n\tframe:SetScript(\"OnLeave\", ItemBase.Frame_OnLeave)\n\t\n\tself.OnAcquire = ItemBase.OnAcquire\n\tself.OnRelease = ItemBase.OnRelease\n\t\n\tself.SetPullout = ItemBase.SetPullout\n\tself.GetText    = ItemBase.GetText\n\tself.SetText    = ItemBase.SetText\n\tself.SetDisabled = ItemBase.SetDisabled\n\t\n\tself.SetPoint   = ItemBase.SetPoint\n\tself.Show       = ItemBase.Show\n\tself.Hide       = ItemBase.Hide\n\t\n\tself.SetOnLeave = ItemBase.SetOnLeave\n\tself.SetOnEnter = ItemBase.SetOnEnter\n\t\n\treturn self\nend\n\n--[[\n\tTemplate for items:\n\t\n-- Item:\n--\ndo\n\tlocal widgetType = \"Dropdown-Item-\"\n\tlocal widgetVersion = 1\n\t\n\tlocal function Constructor()\n\t\tlocal self = ItemBase.Create(widgetType)\n\t\t\n\t\tAceGUI:RegisterAsWidget(self)\n\t\treturn self\n\tend\n\t\n\tAceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version)\nend\n--]]\n\n-- Item: Header\n-- A single text entry.\n-- Special: Different text color and no highlight\ndo\n\tlocal widgetType = \"Dropdown-Item-Header\"\n\tlocal widgetVersion = 1\n\t\n\tlocal function OnEnter(this)\n\t\tlocal self = this.obj\n\t\tself:Fire(\"OnEnter\")\n\t\t\n\t\tif self.specialOnEnter then\n\t\t\tself.specialOnEnter(self)\n\t\tend\n\tend\n\t\n\tlocal function OnLeave(this)\n\t\tlocal self = this.obj\n\t\tself:Fire(\"OnLeave\")\n\t\t\n\t\tif self.specialOnLeave then\n\t\t\tself.specialOnLeave(self)\n\t\tend\n\tend\n\t\n\t-- exported, override\n\tlocal function SetDisabled(self, disabled)\n\t\tItemBase.SetDisabled(self, disabled)\n\t\tif not disabled then\n\t\t\tself.text:SetTextColor(1, 1, 0)\n\t\tend\n\tend\n\t\n\tlocal function Constructor()\n\t\tlocal self = ItemBase.Create(widgetType)\n\t\t\n\t\tself.SetDisabled = SetDisabled\n\t\t\n\t\tself.frame:SetScript(\"OnEnter\", OnEnter)\n\t\tself.frame:SetScript(\"OnLeave\", OnLeave)\n\t\t\n\t\tself.text:SetTextColor(1, 1, 0)\n\t\t\n\t\tAceGUI:RegisterAsWidget(self)\n\t\treturn self\n\tend\n\t\n\tAceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version)\nend\n\n-- Item: Execute\n-- A simple button\ndo\n\tlocal widgetType = \"Dropdown-Item-Execute\"\n\tlocal widgetVersion = 1\n\t\n\tlocal function Frame_OnClick(this, button)\n\t\tlocal self = this.obj\n\t\tif self.disabled then return end\n\t\tself:Fire(\"OnClick\")\n\t\tif self.pullout then\n\t\t\tself.pullout:Close()\n\t\tend\n\tend\n\t\n\tlocal function Constructor()\n\t\tlocal self = ItemBase.Create(widgetType)\n\t\t\n\t\tself.frame:SetScript(\"OnClick\", Frame_OnClick)\n\t\t\n\t\tAceGUI:RegisterAsWidget(self)\n\t\treturn self\n\tend\n\t\n\tAceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version)\nend\n\n-- Item: Toggle\n-- Some sort of checkbox for dropdown menus.\n-- Does not close the pullout on click.\ndo\n\tlocal widgetType = \"Dropdown-Item-Toggle\"\n\tlocal widgetVersion = 3\n\t\n\tlocal function UpdateToggle(self)\n\t\tif self.value then\n\t\t\tself.check:Show()\n\t\telse\n\t\t\tself.check:Hide()\n\t\tend\n\tend\n\t\n\tlocal function OnRelease(self)\n\t\tItemBase.OnRelease(self)\n\t\tself:SetValue(nil)\n\tend\n\t\n\tlocal function Frame_OnClick(this, button)\n\t\tlocal self = this.obj\n\t\tif self.disabled then return end\n\t\tself.value = not self.value\n\t\tif self.value then\n\t\t\tPlaySound(\"igMainMenuOptionCheckBoxOn\")\n\t\telse\n\t\t\tPlaySound(\"igMainMenuOptionCheckBoxOff\")\n\t\tend\n\t\tUpdateToggle(self)\n\t\tself:Fire(\"OnValueChanged\", self.value)\n\tend\n\t\n\t-- exported\n\tlocal function SetValue(self, value)\n\t\tself.value = value\n\t\tUpdateToggle(self)\n\tend\n\t\n\t-- exported\n\tlocal function GetValue(self)\n\t\treturn self.value\n\tend\n\t\n\tlocal function Constructor()\n\t\tlocal self = ItemBase.Create(widgetType)\n\t\t\n\t\tself.frame:SetScript(\"OnClick\", Frame_OnClick)\n\t\t\n\t\tself.SetValue = SetValue\n\t\tself.GetValue = GetValue\n\t\tself.OnRelease = OnRelease\n\t\t\n\t\tAceGUI:RegisterAsWidget(self)\n\t\treturn self\n\tend\n\t\n\tAceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version)\nend\n\n-- Item: Menu\n-- Shows a submenu on mouse over\n-- Does not close the pullout on click\ndo\n\tlocal widgetType = \"Dropdown-Item-Menu\"\n\tlocal widgetVersion = 2\n\t\n\tlocal function OnEnter(this)\n\t\tlocal self = this.obj\n\t\tself:Fire(\"OnEnter\")\n\t\t\n\t\tif self.specialOnEnter then\n\t\t\tself.specialOnEnter(self)\n\t\tend\n\t\t\n\t\tself.highlight:Show()\n\t\t\n\t\tif not self.disabled and self.submenu then\n\t\t\tself.submenu:Open(\"TOPLEFT\", self.frame, \"TOPRIGHT\", self.pullout:GetRightBorderWidth(), 0, self.frame:GetFrameLevel() + 100)\n\t\tend\n\tend\n\t\n\tlocal function OnHide(this)\n\t\tlocal self = this.obj\n\t\tif self.submenu then\n\t\t\tself.submenu:Close()\n\t\tend\n\tend\n\t\n\t-- exported\n\tlocal function SetMenu(self, menu)\n\t\tassert(menu.type == \"Dropdown-Pullout\")\n\t\tself.submenu = menu\n\tend\n\t\t\n\t-- exported\n\tlocal function CloseMenu(self)\n\t\tself.submenu:Close()\n\tend\n\t\t\n\tlocal function Constructor()\n\t\tlocal self = ItemBase.Create(widgetType)\n\t\t\n\t\tself.sub:Show()\n\t\t\n\t\tself.frame:SetScript(\"OnEnter\", OnEnter)\n\t\tself.frame:SetScript(\"OnHide\", OnHide)\n\t\t\n\t\tself.SetMenu   = SetMenu\n\t\tself.CloseMenu = CloseMenu\n\t\t\n\t\tAceGUI:RegisterAsWidget(self)\n\t\treturn self\n\tend\n\t\n\tAceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version)\nend\n\n-- Item: Separator\n-- A single line to separate items\ndo\n\tlocal widgetType = \"Dropdown-Item-Separator\"\n\tlocal widgetVersion = 1\n\t\n\t-- exported, override\n\tlocal function SetDisabled(self, disabled)\n\t\tItemBase.SetDisabled(self, disabled)\n\t\tself.useHighlight = false\n\tend\n\t\t\n\tlocal function Constructor()\n\t\tlocal self = ItemBase.Create(widgetType)\n\t\t\n\t\tself.SetDisabled = SetDisabled\n\t\t\n\t\tlocal line = self.frame:CreateTexture(nil, \"OVERLAY\")\n\t\tline:SetHeight(1)\n\t\tline:SetTexture(.5, .5, .5)\n\t\tline:SetPoint(\"LEFT\", self.frame, \"LEFT\", 10, 0)\n\t\tline:SetPoint(\"RIGHT\", self.frame, \"RIGHT\", -10, 0)\n\t\t\n\t\tself.text:Hide()\n\t\t\n\t\tself.useHighlight = false\n\t\t\n\t\tAceGUI:RegisterAsWidget(self)\n\t\treturn self\n\tend\n\t\n\tAceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version)\nend\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua",
    "content": "--[[ $Id: AceGUIWidget-DropDown.lua 916 2010-03-15 12:24:36Z nevcairiel $ ]]--\nlocal AceGUI = LibStub(\"AceGUI-3.0\")\n\n-- Lua APIs\nlocal min, max, floor = math.min, math.max, math.floor\nlocal select, pairs, ipairs = select, pairs, ipairs\nlocal tsort = table.sort\n\n-- WoW APIs\nlocal PlaySound = PlaySound\nlocal UIParent, CreateFrame = UIParent, CreateFrame\nlocal _G = _G\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: CLOSE\n\nlocal function fixlevels(parent,...)\n\tlocal i = 1\n\tlocal child = select(i, ...)\n\twhile child do\n\t\tchild:SetFrameLevel(parent:GetFrameLevel()+1)\n\t\tfixlevels(child, child:GetChildren())\n\t\ti = i + 1\n\t\tchild = select(i, ...)\n\tend\nend\n\nlocal function fixstrata(strata, parent, ...)\n\tlocal i = 1\n\tlocal child = select(i, ...)\n\tparent:SetFrameStrata(strata)\n\twhile child do\n\t\tfixstrata(strata, child, child:GetChildren())\n\t\ti = i + 1\n\t\tchild = select(i, ...)\n\tend\nend\n\ndo\n\tlocal widgetType = \"Dropdown-Pullout\"\n\tlocal widgetVersion = 3\n\t\n\t--[[ Static data ]]--\n\t\n\tlocal backdrop = {\n\t\tbgFile = \"Interface\\\\ChatFrame\\\\ChatFrameBackground\",\n\t\tedgeFile = \"Interface\\\\DialogFrame\\\\UI-DialogBox-Border\",\n\t\tedgeSize = 32,\n\t\ttileSize = 32,\n\t\ttile = true,\n\t\tinsets = { left = 11, right = 12, top = 12, bottom = 11 },\n\t}\n\tlocal sliderBackdrop  = {\n\t\tbgFile = \"Interface\\\\Buttons\\\\UI-SliderBar-Background\",\n\t\tedgeFile = \"Interface\\\\Buttons\\\\UI-SliderBar-Border\",\n\t\ttile = true, tileSize = 8, edgeSize = 8,\n\t\tinsets = { left = 3, right = 3, top = 3, bottom = 3 }\n\t}\n\n\tlocal defaultWidth = 200\n\tlocal defaultMaxHeight = 600\n\t\n\t--[[ UI Event Handlers ]]--\n\t\n\t-- HACK: This should be no part of the pullout, but there\n\t--       is no other 'clean' way to response to any item-OnEnter\n\t--       Used to close Submenus when an other item is entered\n\tlocal function OnEnter(item)\n\t\tlocal self = item.pullout\n\t\tfor k, v in ipairs(self.items) do\n\t\t\tif v.CloseMenu and v ~= item then\n\t\t\t\tv:CloseMenu()\n\t\t\tend\n\t\tend\n\tend\n\t\n\t-- See the note in Constructor() for each scroll related function\n\tlocal function OnMouseWheel(this, value)\n\t\tthis.obj:MoveScroll(value)\n\tend\n\t\n\tlocal function OnScrollValueChanged(this, value)\n\t\tthis.obj:SetScroll(value)\n\tend\n\t\n\tlocal function OnSizeChanged(this)\n\t\tthis.obj:FixScroll()\n\tend\n\t\n\t--[[ Exported methods ]]--\n\t\n\t-- exported\n\tlocal function SetScroll(self, value)\n\t\tlocal status = self.scrollStatus\n\t\tlocal frame, child = self.scrollFrame, self.itemFrame\n\t\tlocal height, viewheight = frame:GetHeight(), child:GetHeight()\n\n\t\tlocal offset\n\t\tif height > viewheight then\n\t\t\toffset = 0\n\t\telse\n\t\t\toffset = floor((viewheight - height) / 1000 * value)\n\t\tend\n\t\tchild:ClearAllPoints()\n\t\tchild:SetPoint(\"TOPLEFT\", frame, \"TOPLEFT\", 0, offset)\n\t\tchild:SetPoint(\"TOPRIGHT\", frame, \"TOPRIGHT\", self.slider:IsShown() and -12 or 0, offset)\n\t\tstatus.offset = offset\n\t\tstatus.scrollvalue = value\t\t\n\tend\n\t\n\t-- exported\n\tlocal function MoveScroll(self, value)\n\t\tlocal status = self.scrollStatus\n\t\tlocal frame, child = self.scrollFrame, self.itemFrame\n\t\tlocal height, viewheight = frame:GetHeight(), child:GetHeight()\n\n\t\tif height > viewheight then\n\t\t\tself.slider:Hide()\n\t\telse\n\t\t\tself.slider:Show()\n\t\t\tlocal diff = height - viewheight\n\t\t\tlocal delta = 1\n\t\t\tif value < 0 then\n\t\t\t\tdelta = -1\n\t\t\tend\n\t\t\tself.slider:SetValue(min(max(status.scrollvalue + delta*(1000/(diff/45)),0), 1000))\n\t\tend\n\tend\n\t\n\t-- exported\n\tlocal function FixScroll(self)\n\t\tlocal status = self.scrollStatus\n\t\tlocal frame, child = self.scrollFrame, self.itemFrame\n\t\tlocal height, viewheight = frame:GetHeight(), child:GetHeight()\n\t\tlocal offset = status.offset or 0\n\n\t\tif viewheight < height then\n\t\t\tself.slider:Hide()\n\t\t\tchild:SetPoint(\"TOPRIGHT\", frame, \"TOPRIGHT\", 0, offset)\n\t\t\tself.slider:SetValue(0)\n\t\telse\n\t\t\tself.slider:Show()\t\t\t\n\t\t\tlocal value = (offset / (viewheight - height) * 1000)\n\t\t\tif value > 1000 then value = 1000 end\n\t\t\tself.slider:SetValue(value)\n\t\t\tself:SetScroll(value)\n\t\t\tif value < 1000 then\n\t\t\t\tchild:ClearAllPoints()\n\t\t\t\tchild:SetPoint(\"TOPLEFT\", frame, \"TOPLEFT\", 0, offset)\n\t\t\t\tchild:SetPoint(\"TOPRIGHT\", frame, \"TOPRIGHT\", -12, offset)\n\t\t\t\tstatus.offset = offset\n\t\t\tend\n\t\tend\n\tend\n\t\n\t-- exported, AceGUI callback\n\tlocal function OnAcquire(self)\n\t\tself.frame:SetParent(UIParent)\n\t\t--self.itemFrame:SetToplevel(true)\n\tend\n\t\n\t-- exported, AceGUI callback\n\tlocal function OnRelease(self)\n\t\tself:Clear()\n\t\tself.frame:ClearAllPoints()\n\t\tself.frame:Hide()\n\tend\n\t\n\t-- exported\n\tlocal function AddItem(self, item)\n\t\tself.items[#self.items + 1] = item\n\t\t\n\t\tlocal h = #self.items * 16\n\t\tself.itemFrame:SetHeight(h)\n\t\tself.frame:SetHeight(min(h + 34, self.maxHeight)) -- +34: 20 for scrollFrame placement (10 offset) and +14 for item placement\n\t\t\n\t\titem.frame:SetPoint(\"LEFT\", self.itemFrame, \"LEFT\")\n\t\titem.frame:SetPoint(\"RIGHT\", self.itemFrame, \"RIGHT\")\n\t\t\n\t\titem:SetPullout(self)\n\t\titem:SetOnEnter(OnEnter)\n\tend\n\t\t\n\t-- exported\n\tlocal function Open(self, point, relFrame, relPoint, x, y)\t\t\n\t\tlocal items = self.items\n\t\tlocal frame = self.frame\n\t\tlocal itemFrame = self.itemFrame\n\t\t\n\t\tframe:SetPoint(point, relFrame, relPoint, x, y)\n\n\t\t\t\t\n\t\tlocal height = 8\n\t\tfor i, item in pairs(items) do\n\t\t\tif i == 1 then\n\t\t\t\titem:SetPoint(\"TOP\", itemFrame, \"TOP\", 0, -2)\n\t\t\telse\n\t\t\t\titem:SetPoint(\"TOP\", items[i-1].frame, \"BOTTOM\", 0, 1)\n\t\t\tend\n\t\t\t\n\t\t\titem:Show()\n\t\t\t\n\t\t\theight = height + 16\n\t\tend\n\t\titemFrame:SetHeight(height)\n\t\tfixstrata(\"TOOLTIP\", frame, frame:GetChildren())\n\t\tframe:Show()\n\t\tself:Fire(\"OnOpen\")\n\tend\t\n\t\n\t-- exported\n\tlocal function Close(self)\n\t\tself.frame:Hide()\n\t\tself:Fire(\"OnClose\")\n\tend\t\n\t\n\t-- exported\n\tlocal function Clear(self)\n\t\tlocal items = self.items\n\t\tfor i, item in pairs(items) do\n\t\t\tAceGUI:Release(item)\n\t\t\titems[i] = nil\n\t\tend\n\tend\t\n\t\n\t-- exported\n\tlocal function IterateItems(self)\n\t\treturn ipairs(self.items)\n\tend\n\t\n\t-- exported\n\tlocal function SetHideOnLeave(self, val)\n\t\tself.hideOnLeave = val\n\tend\n\t\n\t-- exported\n\tlocal function SetMaxHeight(self, height)\n\t\tself.maxHeight = height or defaultMaxHeight\n\t\tif self.frame:GetHeight() > height then\n\t\t\tself.frame:SetHeight(height)\n\t\telseif (self.itemFrame:GetHeight() + 34) < height then\n\t\t\tself.frame:SetHeight(self.itemFrame:GetHeight() + 34) -- see :AddItem\n\t\tend\n\tend\n\t\t\n\t-- exported\n\tlocal function GetRightBorderWidth(self)\n\t\treturn 6 + (self.slider:IsShown() and 12 or 0)\n\tend\n\t\n\t-- exported\n\tlocal function GetLeftBorderWidth(self)\n\t\treturn 6\n\tend\n\t\n\t--[[ Constructor ]]--\n\t\n\tlocal function Constructor()\n\t\tlocal count = AceGUI:GetNextWidgetNum(widgetType)\n\t\tlocal frame = CreateFrame(\"Frame\", \"AceGUI30Pullout\"..count, UIParent)\n\t\tlocal self = {}\n\t\tself.count = count\n\t\tself.type = widgetType\n\t\tself.frame = frame\n\t\tframe.obj = self\n\t\t\n\t\tself.OnAcquire = OnAcquire\n\t\tself.OnRelease = OnRelease\n\n\t\tself.AddItem = AddItem\n\t\tself.Open    = Open\n\t\tself.Close   = Close\n\t\tself.Clear   = Clear\n\t\tself.IterateItems = IterateItems\n\t\tself.SetHideOnLeave = SetHideOnLeave\n\n\t\tself.SetScroll  = SetScroll\n\t\tself.MoveScroll = MoveScroll\n\t\tself.FixScroll  = FixScroll\n\t\t\n\t\tself.SetMaxHeight = SetMaxHeight\n\t\tself.GetRightBorderWidth = GetRightBorderWidth\n\t\tself.GetLeftBorderWidth = GetLeftBorderWidth\n\t\t\n\t\tself.items = {}\n\t\t\n\t\tself.scrollStatus = {\n\t\t\tscrollvalue = 0,\n\t\t}\n\t\t\n\t\tself.maxHeight = defaultMaxHeight\n\t\t\t\n\t\tframe:SetBackdrop(backdrop)\n\t\tframe:SetBackdropColor(0, 0, 0)\n\t\tframe:SetFrameStrata(\"FULLSCREEN_DIALOG\")\n\t\tframe:SetClampedToScreen(true)\n\t\tframe:SetWidth(defaultWidth)\n\t\tframe:SetHeight(self.maxHeight)\t\n\t\t--frame:SetToplevel(true)\n\t\n\t\t-- NOTE: The whole scroll frame code is copied from the AceGUI-3.0 widget ScrollFrame\n\t\tlocal scrollFrame = CreateFrame(\"ScrollFrame\", nil, frame)\n\t\tlocal itemFrame = CreateFrame(\"Frame\", nil, scrollFrame)\n\t\t\n\t\tself.scrollFrame = scrollFrame\n\t\tself.itemFrame = itemFrame\n\t\t\n\t\tscrollFrame.obj = self\n\t\titemFrame.obj = self\n\t\t\n\t\tlocal slider = CreateFrame(\"Slider\", \"AceGUI30PulloutScrollbar\"..count, scrollFrame)\n\t\tslider:SetOrientation(\"VERTICAL\")\n\t\tslider:SetHitRectInsets(0, 0, -10, 0)\n\t\tslider:SetBackdrop(sliderBackdrop)\n\t\tslider:SetWidth(8)\n\t\tslider:SetThumbTexture(\"Interface\\\\Buttons\\\\UI-SliderBar-Button-Vertical\")\n\t\tslider:SetFrameStrata(\"FULLSCREEN_DIALOG\")\n\t\tself.slider = slider\n\t\tslider.obj = self\n\t\t\t\t\t\n\t\tscrollFrame:SetScrollChild(itemFrame)\n\t\tscrollFrame:SetPoint(\"TOPLEFT\", frame, \"TOPLEFT\", 6, -12)\n\t\tscrollFrame:SetPoint(\"BOTTOMRIGHT\", frame, \"BOTTOMRIGHT\", -6, 12)\n\t\tscrollFrame:EnableMouseWheel(true)\n\t\tscrollFrame:SetScript(\"OnMouseWheel\", OnMouseWheel)\n\t\tscrollFrame:SetScript(\"OnSizeChanged\", OnSizeChanged)\n\t\tscrollFrame:SetToplevel(true)\n\t\tscrollFrame:SetFrameStrata(\"FULLSCREEN_DIALOG\")\n\t\t\n\t\titemFrame:SetPoint(\"TOPLEFT\", scrollFrame, \"TOPLEFT\", 0, 0)\n\t\titemFrame:SetPoint(\"TOPRIGHT\", scrollFrame, \"TOPRIGHT\", -12, 0)\n\t\titemFrame:SetHeight(400)\n\t\titemFrame:SetToplevel(true)\n\t\titemFrame:SetFrameStrata(\"FULLSCREEN_DIALOG\")\n\t\t\n\t\tslider:SetPoint(\"TOPLEFT\", scrollFrame, \"TOPRIGHT\", -16, 0)\n\t\tslider:SetPoint(\"BOTTOMLEFT\", scrollFrame, \"BOTTOMRIGHT\", -16, 0)\n\t\tslider:SetScript(\"OnValueChanged\", OnScrollValueChanged)\n\t\tslider:SetMinMaxValues(0, 1000)\n\t\tslider:SetValueStep(1)\n\t\tslider:SetValue(0)\n\t\t\n\t\tscrollFrame:Show()\n\t\titemFrame:Show()\n\t\tslider:Hide()\n\t\t\t\t\t\t\n\t\tself:FixScroll()\n\t\t\n\t\tAceGUI:RegisterAsWidget(self)\n\t\treturn self\n\tend\n\t\n\tAceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion)\nend\n\ndo\n\tlocal widgetType = \"Dropdown\"\n\tlocal widgetVersion = 22\n\t\n\t--[[ Static data ]]--\n\t\n\t--[[ UI event handler ]]--\n\t\n\tlocal function Control_OnEnter(this)\n\t\tthis.obj:Fire(\"OnEnter\")\n\tend\n\t\n\tlocal function Control_OnLeave(this)\n\t\tthis.obj:Fire(\"OnLeave\")\n\tend\n\n\tlocal function Dropdown_OnHide(this)\n\t\tlocal self = this.obj\n\t\tif self.open then\n\t\t\tself.pullout:Close()\n\t\tend\n\tend\n\t\n\tlocal function Dropdown_TogglePullout(this)\n\t\tlocal self = this.obj\n\t\tPlaySound(\"igMainMenuOptionCheckBoxOn\") -- missleading name, but the Blizzard code uses this sound\n\t\tif self.open then\n\t\t\tself.open = nil\n\t\t\tself.pullout:Close()\n\t\t\tAceGUI:ClearFocus()\n\t\telse\n\t\t\tself.open = true\n\t\t\tself.pullout:SetWidth(self.frame:GetWidth())\n\t\t\tself.pullout:Open(\"TOPLEFT\", self.frame, \"BOTTOMLEFT\", 0, self.label:IsShown() and -2 or 0)\n\t\t\tAceGUI:SetFocus(self)\n\t\tend\n\tend\n\t\n\tlocal function OnPulloutOpen(this)\n\t\tlocal self = this.userdata.obj\n\t\tlocal value = self.value\n\t\t\n\t\tif not self.multiselect then\n\t\t\tfor i, item in this:IterateItems() do\n\t\t\t\titem:SetValue(item.userdata.value == value)\n\t\t\tend\n\t\tend\n\t\t\n\t\tself.open = true\n\tend\n\n\tlocal function OnPulloutClose(this)\n\t\tlocal self = this.userdata.obj\n\t\tself.open = nil\n\t\tself:Fire(\"OnClosed\")\n\tend\n\t\n\tlocal function ShowMultiText(self)\n\t\tlocal text\n\t\tfor i, widget in self.pullout:IterateItems() do\n\t\t\tif widget.type == \"Dropdown-Item-Toggle\" then\n\t\t\t\tif widget:GetValue() then\n\t\t\t\t\tif text then\n\t\t\t\t\t\ttext = text..\", \"..widget:GetText()\n\t\t\t\t\telse\n\t\t\t\t\t\ttext = widget:GetText()\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tself:SetText(text)\n\tend\n\t\n\tlocal function OnItemValueChanged(this, event, checked)\n\t\tlocal self = this.userdata.obj\n\t\t\n\t\tif self.multiselect then\n\t\t\tself:Fire(\"OnValueChanged\", this.userdata.value, checked)\n\t\t\tShowMultiText(self)\n\t\telse\n\t\t\tif checked then\n\t\t\t\tself:SetValue(this.userdata.value)\n\t\t\t\tself:Fire(\"OnValueChanged\", this.userdata.value)\n\t\t\telse\n\t\t\t\tthis:SetValue(true)\n\t\t\tend\n\t\t\tif self.open then\t\n\t\t\t\tself.pullout:Close()\n\t\t\tend\n\t\tend\n\tend\n\t\n\t--[[ Exported methods ]]--\n\t\n\t-- exported, AceGUI callback\n\tlocal function OnAcquire(self)\n\t\tlocal pullout = AceGUI:Create(\"Dropdown-Pullout\")\n\t\tself.pullout = pullout\n\t\tpullout.userdata.obj = self\n\t\tpullout:SetCallback(\"OnClose\", OnPulloutClose)\n\t\tpullout:SetCallback(\"OnOpen\", OnPulloutOpen)\n\t\tself.pullout.frame:SetFrameLevel(self.frame:GetFrameLevel() + 1)\n\t\tfixlevels(self.pullout.frame, self.pullout.frame:GetChildren())\n\t\t\n\t\tself:SetHeight(44)\n\t\tself:SetWidth(200)\n\tend\n\t\n\t-- exported, AceGUI callback\n\tlocal function OnRelease(self)\n\t\tif self.open then\n\t\t\tself.pullout:Close()\n\t\tend\n\t\tAceGUI:Release(self.pullout)\n\t\tself.pullout = nil\n\t\t\n\t\tself:SetText(\"\")\n\t\tself:SetLabel(\"\")\n\t\tself:SetDisabled(false)\n\t\tself:SetMultiselect(false)\n\t\t\n\t\tself.value = nil\n\t\tself.list = nil\n\t\tself.open = nil\n\t\tself.hasClose = nil\n\t\t\n\t\tself.frame:ClearAllPoints()\n\t\tself.frame:Hide()\n\tend\n\t\n\t-- exported\n\tlocal function SetDisabled(self, disabled)\n\t\tself.disabled = disabled\n\t\tif disabled then\n\t\t\tself.text:SetTextColor(0.5,0.5,0.5)\n\t\t\tself.button:Disable()\n\t\t\tself.label:SetTextColor(0.5,0.5,0.5)\n\t\telse\n\t\t\tself.button:Enable()\n\t\t\tself.label:SetTextColor(1,.82,0)\n\t\t\tself.text:SetTextColor(1,1,1)\n\t\tend\n\tend\n\t\n\t-- exported\n\tlocal function ClearFocus(self)\n\t\tif self.open then\n\t\t\tself.pullout:Close()\n\t\tend\n\tend\n\t\n\t-- exported\n\tlocal function SetText(self, text)\n\t\tself.text:SetText(text or \"\")\n\tend\n\t\n\t-- exported\n\tlocal function SetLabel(self, text)\n\t\tif text and text ~= \"\" then\n\t\t\tself.label:SetText(text)\n\t\t\tself.label:Show()\n\t\t\tself.dropdown:SetPoint(\"TOPLEFT\",self.frame,\"TOPLEFT\",-15,-18)\n\t\t\tself.frame:SetHeight(44)\n\t\telse\n\t\t\tself.label:SetText(\"\")\n\t\t\tself.label:Hide()\n\t\t\tself.dropdown:SetPoint(\"TOPLEFT\",self.frame,\"TOPLEFT\",-15,0)\n\t\t\tself.frame:SetHeight(26)\n\t\tend\n\tend\n\t\n\t-- exported\n\tlocal function SetValue(self, value)\n\t\tif self.list then\n\t\t\tself:SetText(self.list[value] or \"\")\n\t\tend\n\t\tself.value = value\n\tend\n\t\n\t-- exported\n\tlocal function GetValue(self)\n\t\treturn self.value\n\tend\n\t\n\t-- exported\n\tlocal function SetItemValue(self, item, value)\n\t\tif not self.multiselect then return end\n\t\tfor i, widget in self.pullout:IterateItems() do\n\t\t\tif widget.userdata.value == item then\n\t\t\t\tif widget.SetValue then\n\t\t\t\t\twidget:SetValue(value)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tShowMultiText(self)\n\tend\n\t\n\t-- exported\n\tlocal function SetItemDisabled(self, item, disabled)\n\t\tfor i, widget in self.pullout:IterateItems() do\n\t\t\tif widget.userdata.value == item then\n\t\t\t\twidget:SetDisabled(disabled)\n\t\t\tend\n\t\tend\n\tend\n\t\n\tlocal function AddListItem(self, value, text)\n\t\tlocal item = AceGUI:Create(\"Dropdown-Item-Toggle\")\n\t\titem:SetText(text)\n\t\titem.userdata.obj = self\n\t\titem.userdata.value = value\n\t\titem:SetCallback(\"OnValueChanged\", OnItemValueChanged)\n\t\tself.pullout:AddItem(item)\n\tend\n\t\n\tlocal function AddCloseButton(self)\n\t\tif not self.hasClose then\n\t\t\tlocal close = AceGUI:Create(\"Dropdown-Item-Execute\")\n\t\t\tclose:SetText(CLOSE)\n\t\t\tself.pullout:AddItem(close)\n\t\t\tself.hasClose = true\n\t\tend\n\tend\n\t\n\t-- exported\n\tlocal sortlist = {}\n\tlocal function SetList(self, list)\n\t\tself.list = list\n\t\tself.pullout:Clear()\n\t\tself.hasClose = nil\n\t\tif not list then return end\n\t\t\n\t\tfor v in pairs(list) do\n\t\t\tsortlist[#sortlist + 1] = v\n\t\tend\n\t\ttsort(sortlist)\n\t\t\n\t\tfor i, value in pairs(sortlist) do\n\t\t\tAddListItem(self, value, list[value])\n\t\t\tsortlist[i] = nil\n\t\tend\n\t\tif self.multiselect then\n\t\t\tShowMultiText(self)\n\t\t\tAddCloseButton(self)\n\t\tend\n\tend\n\t\n\t-- exported\n\tlocal function AddItem(self, value, text)\n\t\tif self.list then\n\t\t\tself.list[value] = text\n\t\t\tAddListItem(self, value, text)\n\t\tend\n\tend\n\t\n\t-- exported\n\tlocal function SetMultiselect(self, multi)\n\t\tself.multiselect = multi\n\t\tif multi then\n\t\t\tShowMultiText(self)\n\t\t\tAddCloseButton(self)\n\t\tend\n\tend\n\t\n\t-- exported\n\tlocal function GetMultiselect(self)\n\t\treturn self.multiselect\n\tend\n\t\n\t--[[ Constructor ]]--\n\t\n\tlocal function Constructor()\n\t\tlocal count = AceGUI:GetNextWidgetNum(widgetType)\n\t\tlocal frame = CreateFrame(\"Frame\", nil, UIParent)\n\t\tlocal dropdown = CreateFrame(\"Frame\", \"AceGUI30DropDown\"..count, frame, \"UIDropDownMenuTemplate\")\n\t\t\n\t\tlocal self = {}\n\t\tself.type = widgetType\n\t\tself.frame = frame\n\t\tself.dropdown = dropdown\n\t\tself.count = count\n\t\tframe.obj = self\n\t\tdropdown.obj = self\n\t\t\n\t\tself.OnRelease   = OnRelease\n\t\tself.OnAcquire   = OnAcquire\n\t\t\n\t\tself.ClearFocus  = ClearFocus\n\n\t\tself.SetText     = SetText\n\t\tself.SetValue    = SetValue\n\t\tself.GetValue    = GetValue\n\t\tself.SetList     = SetList\n\t\tself.SetLabel    = SetLabel\n\t\tself.SetDisabled = SetDisabled\n\t\tself.AddItem     = AddItem\n\t\tself.SetMultiselect = SetMultiselect\n\t\tself.GetMultiselect = GetMultiselect\n\t\tself.SetItemValue = SetItemValue\n\t\tself.SetItemDisabled = SetItemDisabled\n\t\t\n\t\tself.alignoffset = 31\n\t\t\n\t\tframe:SetHeight(44)\n\t\tframe:SetWidth(200)\n\t\tframe:SetScript(\"OnHide\",Dropdown_OnHide)\n\n\t\tdropdown:ClearAllPoints()\n\t\tdropdown:SetPoint(\"TOPLEFT\",frame,\"TOPLEFT\",-15,0)\n\t\tdropdown:SetPoint(\"BOTTOMRIGHT\",frame,\"BOTTOMRIGHT\",17,0)\n\t\tdropdown:SetScript(\"OnHide\", nil)\n\n\t\tlocal left = _G[dropdown:GetName() .. \"Left\"]\n\t\tlocal middle = _G[dropdown:GetName() .. \"Middle\"]\n\t\tlocal right = _G[dropdown:GetName() .. \"Right\"]\n\t\t\n\t\tmiddle:ClearAllPoints()\n\t\tright:ClearAllPoints()\n\t\t\n\t\tmiddle:SetPoint(\"LEFT\", left, \"RIGHT\", 0, 0)\n\t\tmiddle:SetPoint(\"RIGHT\", right, \"LEFT\", 0, 0)\n\t\tright:SetPoint(\"TOPRIGHT\", dropdown, \"TOPRIGHT\", 0, 17)\n\n\t\tlocal button = _G[dropdown:GetName() .. \"Button\"]\n\t\tself.button = button\n\t\tbutton.obj = self\n\t\tbutton:SetScript(\"OnEnter\",Control_OnEnter)\n\t\tbutton:SetScript(\"OnLeave\",Control_OnLeave)\n\t\tbutton:SetScript(\"OnClick\",Dropdown_TogglePullout)\n\t\t\n\t\tlocal text = _G[dropdown:GetName() .. \"Text\"]\n\t\tself.text = text\n\t\ttext.obj = self\n\t\ttext:ClearAllPoints()\n\t\ttext:SetPoint(\"RIGHT\", right, \"RIGHT\" ,-43, 2)\n\t\ttext:SetPoint(\"LEFT\", left, \"LEFT\", 25, 2)\n\t\t\n\t\tlocal label = frame:CreateFontString(nil,\"OVERLAY\",\"GameFontNormalSmall\")\n\t\tlabel:SetPoint(\"TOPLEFT\",frame,\"TOPLEFT\",0,0)\n\t\tlabel:SetPoint(\"TOPRIGHT\",frame,\"TOPRIGHT\",0,0)\n\t\tlabel:SetJustifyH(\"LEFT\")\n\t\tlabel:SetHeight(18)\n\t\tlabel:Hide()\n\t\tself.label = label\n\n\t\tAceGUI:RegisterAsWidget(self)\n\t\treturn self\n\tend\n\t\n\tAceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion)\nend\t\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua",
    "content": "--[[-----------------------------------------------------------------------------\nEditBox Widget\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"EditBox\", 22\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal tostring, pairs = tostring, pairs\n\n-- WoW APIs\nlocal PlaySound = PlaySound\nlocal GetCursorInfo, ClearCursor, GetSpellName = GetCursorInfo, ClearCursor, GetSpellName\nlocal CreateFrame, UIParent = CreateFrame, UIParent\nlocal _G = _G\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: AceGUIEditBoxInsertLink, ChatFontNormal, OKAY\n\n--[[-----------------------------------------------------------------------------\nSupport functions\n-------------------------------------------------------------------------------]]\nif not AceGUIEditBoxInsertLink then\n\t-- upgradeable hook\n\thooksecurefunc(\"ChatEdit_InsertLink\", function(...) return _G.AceGUIEditBoxInsertLink(...) end)\nend\n\nfunction _G.AceGUIEditBoxInsertLink(text)\n\tfor i = 1, AceGUI:GetWidgetCount(Type) do\n\t\tlocal editbox = _G[\"AceGUI-3.0EditBox\"..i]\n\t\tif editbox and editbox:IsVisible() and editbox:HasFocus() then\n\t\t\teditbox:Insert(text)\n\t\t\treturn true\n\t\tend\n\tend\nend\n\nlocal function ShowButton(self)\n\tif not self.disablebutton then\n\t\tself.button:Show()\n\t\tself.editbox:SetTextInsets(0, 20, 3, 3)\n\tend\nend\n\nlocal function HideButton(self)\n\tself.button:Hide()\n\tself.editbox:SetTextInsets(0, 0, 3, 3)\nend\n\n--[[-----------------------------------------------------------------------------\nScripts\n-------------------------------------------------------------------------------]]\nlocal function Control_OnEnter(frame)\n\tframe.obj:Fire(\"OnEnter\")\nend\n\nlocal function Control_OnLeave(frame)\n\tframe.obj:Fire(\"OnLeave\")\nend\n\nlocal function EditBox_OnEscapePressed(frame)\n\tAceGUI:ClearFocus()\nend\n\nlocal function EditBox_OnEnterPressed(frame)\n\tlocal self = frame.obj\n\tlocal value = frame:GetText()\n\tlocal cancel = self:Fire(\"OnEnterPressed\", value)\n\tif not cancel then\n\t\tPlaySound(\"igMainMenuOptionCheckBoxOn\")\n\t\tHideButton(self)\n\tend\nend\n\nlocal function EditBox_OnReceiveDrag(frame)\n\tlocal self = frame.obj\n\tlocal type, id, info = GetCursorInfo()\n\tif type == \"item\" then\n\t\tself:SetText(info)\n\t\tself:Fire(\"OnEnterPressed\", info)\n\t\tClearCursor()\n\telseif type == \"spell\" then\n\t\tlocal name, rank = GetSpellName(id, info)\n\t\tif rank and rank:match(\"%d\") then\n\t\t\tname = name..\"(\"..rank..\")\"\n\t\tend\n\t\tself:SetText(name)\n\t\tself:Fire(\"OnEnterPressed\", name)\n\t\tClearCursor()\n\tend\n\tHideButton(self)\n\tAceGUI:ClearFocus()\nend\n\nlocal function EditBox_OnTextChanged(frame)\n\tlocal self = frame.obj\n\tlocal value = frame:GetText()\n\tif tostring(value) ~= tostring(self.lasttext) then\n\t\tself:Fire(\"OnTextChanged\", value)\n\t\tself.lasttext = value\n\t\tShowButton(self)\n\tend\nend\n\nlocal function Button_OnClick(frame)\n\tlocal editbox = frame.obj.editbox\n\teditbox:ClearFocus()\n\tEditBox_OnEnterPressed(editbox)\nend\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\t-- height is controlled by SetLabel\n\t\tself:SetWidth(200)\n\t\tself:SetDisabled(false)\n\t\tself:SetLabel()\n\t\tself:SetText()\n\t\tself:DisableButton(false)\n\t\tself:SetMaxLetters(0)\n\tend,\n\n\t-- [\"OnRelease\"] = nil,\n\n\t[\"SetDisabled\"] = function(self, disabled)\n\t\tself.disabled = disabled\n\t\tif disabled then\n\t\t\tself.editbox:EnableMouse(false)\n\t\t\tself.editbox:ClearFocus()\n\t\t\tself.editbox:SetTextColor(0.5,0.5,0.5)\n\t\t\tself.label:SetTextColor(0.5,0.5,0.5)\n\t\telse\n\t\t\tself.editbox:EnableMouse(true)\n\t\t\tself.editbox:SetTextColor(1,1,1)\n\t\t\tself.label:SetTextColor(1,.82,0)\n\t\tend\n\tend,\n\n\t[\"SetText\"] = function(self, text)\n\t\tself.lasttext = text or \"\"\n\t\tself.editbox:SetText(text or \"\")\n\t\tself.editbox:SetCursorPosition(0)\n\t\tHideButton(self)\n\tend,\n\n\t[\"GetText\"] = function(self, text)\n\t\treturn self.editbox:GetText()\n\tend,\n\n\t[\"SetLabel\"] = function(self, text)\n\t\tif text and text ~= \"\" then\n\t\t\tself.label:SetText(text)\n\t\t\tself.label:Show()\n\t\t\tself.editbox:SetPoint(\"TOPLEFT\",self.frame,\"TOPLEFT\",7,-18)\n\t\t\tself:SetHeight(44)\n\t\t\tself.alignoffset = 30\n\t\telse\n\t\t\tself.label:SetText(\"\")\n\t\t\tself.label:Hide()\n\t\t\tself.editbox:SetPoint(\"TOPLEFT\",self.frame,\"TOPLEFT\",7,0)\n\t\t\tself:SetHeight(26)\n\t\t\tself.alignoffset = 12\n\t\tend\n\tend,\n\n\t[\"DisableButton\"] = function(self, disabled)\n\t\tself.disablebutton = disabled\n\t\tif disabled then\n\t\t\tHideButton(self)\n\t\tend\n\tend,\n\n\t[\"SetMaxLetters\"] = function (self, num)\n\t\tself.editbox:SetMaxLetters(num or 0)\n\tend\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal function Constructor()\n\tlocal num  = AceGUI:GetNextWidgetNum(Type)\n\tlocal frame = CreateFrame(\"Frame\", nil, UIParent)\n\tframe:Hide()\n\n\tlocal editbox = CreateFrame(\"EditBox\", \"AceGUI-3.0EditBox\"..num, frame, \"InputBoxTemplate\")\n\teditbox:SetAutoFocus(false)\n\teditbox:SetFontObject(ChatFontNormal)\n\teditbox:SetScript(\"OnEnter\", Control_OnEnter)\n\teditbox:SetScript(\"OnLeave\", Control_OnLeave)\n\teditbox:SetScript(\"OnEscapePressed\", EditBox_OnEscapePressed)\n\teditbox:SetScript(\"OnEnterPressed\", EditBox_OnEnterPressed)\n\teditbox:SetScript(\"OnTextChanged\", EditBox_OnTextChanged)\n\teditbox:SetScript(\"OnReceiveDrag\", EditBox_OnReceiveDrag)\n\teditbox:SetScript(\"OnMouseDown\", EditBox_OnReceiveDrag)\n\teditbox:SetTextInsets(0, 0, 3, 3)\n\teditbox:SetMaxLetters(256)\n\teditbox:SetPoint(\"BOTTOMLEFT\", 6, 0)\n\teditbox:SetPoint(\"BOTTOMRIGHT\")\n\teditbox:SetHeight(19)\n\n\tlocal label = frame:CreateFontString(nil, \"OVERLAY\", \"GameFontNormalSmall\")\n\tlabel:SetPoint(\"TOPLEFT\", 0, -2)\n\tlabel:SetPoint(\"TOPRIGHT\", 0, -2)\n\tlabel:SetJustifyH(\"LEFT\")\n\tlabel:SetHeight(18)\n\n\tlocal button = CreateFrame(\"Button\", nil, editbox, \"UIPanelButtonTemplate\")\n\tbutton:SetWidth(40)\n\tbutton:SetHeight(20)\n\tbutton:SetPoint(\"RIGHT\", -2, 0)\n\tbutton:SetText(OKAY)\n\tbutton:SetScript(\"OnClick\", Button_OnClick)\n\tbutton:Hide()\n\n\tlocal widget = {\n\t\talignoffset = 30,\n\t\teditbox     = editbox,\n\t\tlabel       = label,\n\t\tbutton      = button,\n\t\tframe       = frame,\n\t\ttype        = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\teditbox.obj, button.obj = widget, widget\n\n\treturn AceGUI:RegisterAsWidget(widget)\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIWidget-Heading.lua",
    "content": "--[[-----------------------------------------------------------------------------\nHeading Widget\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"Heading\", 20\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal pairs = pairs\n\n-- WoW APIs\nlocal CreateFrame, UIParent = CreateFrame, UIParent\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\tself:SetText()\n\t\tself:SetFullWidth()\n\t\tself:SetHeight(18)\n\tend,\n\n\t-- [\"OnRelease\"] = nil,\n\n\t[\"SetText\"] = function(self, text)\n\t\tself.label:SetText(text or \"\")\n\t\tif text and text ~= \"\" then\n\t\t\tself.left:SetPoint(\"RIGHT\", self.label, \"LEFT\", -5, 0)\n\t\t\tself.right:Show()\n\t\telse\n\t\t\tself.left:SetPoint(\"RIGHT\", -3, 0)\n\t\t\tself.right:Hide()\n\t\tend\n\tend\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal function Constructor()\n\tlocal frame = CreateFrame(\"Frame\", nil, UIParent)\n\tframe:Hide()\n\n\tlocal label = frame:CreateFontString(nil, \"BACKGROUND\", \"GameFontNormal\")\n\tlabel:SetPoint(\"TOP\")\n\tlabel:SetPoint(\"BOTTOM\")\n\tlabel:SetJustifyH(\"CENTER\")\n\n\tlocal left = frame:CreateTexture(nil, \"BACKGROUND\")\n\tleft:SetHeight(8)\n\tleft:SetPoint(\"LEFT\", 3, 0)\n\tleft:SetPoint(\"RIGHT\", label, \"LEFT\", -5, 0)\n\tleft:SetTexture(\"Interface\\\\Tooltips\\\\UI-Tooltip-Border\")\n\tleft:SetTexCoord(0.81, 0.94, 0.5, 1)\n\n\tlocal right = frame:CreateTexture(nil, \"BACKGROUND\")\n\tright:SetHeight(8)\n\tright:SetPoint(\"RIGHT\", -3, 0)\n\tright:SetPoint(\"LEFT\", label, \"RIGHT\", 5, 0)\n\tright:SetTexture(\"Interface\\\\Tooltips\\\\UI-Tooltip-Border\")\n\tright:SetTexCoord(0.81, 0.94, 0.5, 1)\n\n\tlocal widget = {\n\t\tlabel = label,\n\t\tleft  = left,\n\t\tright = right,\n\t\tframe = frame,\n\t\ttype  = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\n\treturn AceGUI:RegisterAsWidget(widget)\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua",
    "content": "--[[-----------------------------------------------------------------------------\nIcon Widget\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"Icon\", 20\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal select, pairs, print = select, pairs, print\n\n-- WoW APIs\nlocal CreateFrame, UIParent, GetBuildInfo = CreateFrame, UIParent, GetBuildInfo\n\n--[[-----------------------------------------------------------------------------\nScripts\n-------------------------------------------------------------------------------]]\nlocal function Control_OnEnter(frame)\n\tframe.obj:Fire(\"OnEnter\")\nend\n\nlocal function Control_OnLeave(frame)\n\tframe.obj:Fire(\"OnLeave\")\nend\n\nlocal function Button_OnClick(frame, button)\n\tframe.obj:Fire(\"OnClick\", button)\n\tAceGUI:ClearFocus()\nend\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\tself:SetHeight(110)\n\t\tself:SetWidth(110)\n\t\tself:SetLabel()\n\t\tself:SetImage(nil)\n\t\tself:SetImageSize(64, 64)\n\t\tself:SetDisabled(false)\n\tend,\n\n\t-- [\"OnRelease\"] = nil,\n\n\t[\"SetLabel\"] = function(self, text)\n\t\tif text and text ~= \"\" then\n\t\t\tself.label:Show()\n\t\t\tself.label:SetText(text)\n\t\t\tself:SetHeight(self.image:GetHeight() + 25)\n\t\telse\n\t\t\tself.label:Hide()\n\t\t\tself:SetHeight(self.image:GetHeight() + 10)\n\t\tend\n\tend,\n\n\t[\"SetImage\"] = function(self, path, ...)\n\t\tlocal image = self.image\n\t\timage:SetTexture(path)\n\t\t\n\t\tif image:GetTexture() then\n\t\t\tlocal n = select(\"#\", ...)\n\t\t\tif n == 4 or n == 8 then\n\t\t\t\timage:SetTexCoord(...)\n\t\t\telse\n\t\t\t\timage:SetTexCoord(0, 1, 0, 1)\n\t\t\tend\n\t\tend\n\tend,\n\n\t[\"SetImageSize\"] = function(self, width, height)\n\t\tself.image:SetWidth(width)\n\t\tself.image:SetHeight(height)\n\t\t--self.frame:SetWidth(width + 30)\n\t\tif self.label:IsShown() then\n\t\t\tself:SetHeight(height + 25)\n\t\telse\n\t\t\tself:SetHeight(height + 10)\n\t\tend\n\tend,\n\n\t[\"SetDisabled\"] = function(self, disabled)\n\t\tself.disabled = disabled\n\t\tif disabled then\n\t\t\tself.frame:Disable()\n\t\t\tself.label:SetTextColor(0.5, 0.5, 0.5)\n\t\t\tself.image:SetVertexColor(0.5, 0.5, 0.5, 0.5)\n\t\telse\n\t\t\tself.frame:Enable()\n\t\t\tself.label:SetTextColor(1, 1, 1)\n\t\t\tself.image:SetVertexColor(1, 1, 1)\n\t\tend\n\tend\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal function Constructor()\n\tlocal frame = CreateFrame(\"Button\", nil, UIParent)\n\tframe:Hide()\n\n\tframe:EnableMouse(true)\n\tframe:SetScript(\"OnEnter\", Control_OnEnter)\n\tframe:SetScript(\"OnLeave\", Control_OnLeave)\n\tframe:SetScript(\"OnClick\", Button_OnClick)\n\n\tlocal label = frame:CreateFontString(nil, \"BACKGROUND\", \"GameFontHighlight\")\n\tlabel:SetPoint(\"BOTTOMLEFT\")\n\tlabel:SetPoint(\"BOTTOMRIGHT\")\n\tlabel:SetJustifyH(\"CENTER\")\n\tlabel:SetJustifyV(\"TOP\")\n\tlabel:SetHeight(18)\n\n\tlocal image = frame:CreateTexture(nil, \"BACKGROUND\")\n\timage:SetWidth(64)\n\timage:SetHeight(64)\n\timage:SetPoint(\"TOP\", 0, -5)\n\n\tlocal highlight = frame:CreateTexture(nil, \"HIGHLIGHT\")\n\thighlight:SetAllPoints(image)\n\thighlight:SetTexture(\"Interface\\\\PaperDollInfoFrame\\\\UI-Character-Tab-Highlight\")\n\thighlight:SetTexCoord(0, 1, 0.23, 0.77)\n\thighlight:SetBlendMode(\"ADD\")\n\n\tlocal widget = {\n\t\tlabel = label,\n\t\timage = image,\n\t\tframe = frame,\n\t\ttype  = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\t-- SetText is deprecated, but keep it around for a while. (say, to WoW 4.0)\n\tif (select(4, GetBuildInfo()) < 40000) then\n\t\twidget.SetText = widget.SetLabel\n\telse\n\t\twidget.SetText = function(self, ...) print(\"AceGUI-3.0-Icon: SetText is deprecated! Use SetLabel instead!\"); self:SetLabel(...) end\n\tend\n\n\treturn AceGUI:RegisterAsWidget(widget)\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIWidget-InteractiveLabel.lua",
    "content": "--[[-----------------------------------------------------------------------------\nInteractiveLabel Widget\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"InteractiveLabel\", 20\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal select, pairs = select, pairs\n\n-- WoW APIs\nlocal CreateFrame, UIParent = CreateFrame, UIParent\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: GameFontHighlightSmall\n\n--[[-----------------------------------------------------------------------------\nScripts\n-------------------------------------------------------------------------------]]\nlocal function Control_OnEnter(frame)\n\tframe.obj:Fire(\"OnEnter\")\nend\n\nlocal function Control_OnLeave(frame)\n\tframe.obj:Fire(\"OnLeave\")\nend\n\nlocal function Label_OnClick(frame, button)\n\tframe.obj:Fire(\"OnClick\", button)\n\tAceGUI:ClearFocus()\nend\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\tself:LabelOnAcquire()\n\t\tself:SetHighlight()\n\t\tself:SetHighlightTexCoord()\n\t\tself:SetDisabled(false)\n\tend,\n\n\t-- [\"OnRelease\"] = nil,\n\n\t[\"SetHighlight\"] = function(self, ...)\n\t\tself.highlight:SetTexture(...)\n\tend,\n\n\t[\"SetHighlightTexCoord\"] = function(self, ...)\n\t\tlocal c = select(\"#\", ...)\n\t\tif c == 4 or c == 8 then\n\t\t\tself.highlight:SetTexCoord(...)\n\t\telse\n\t\t\tself.highlight:SetTexCoord(0, 1, 0, 1)\n\t\tend\n\tend,\n\n\t[\"SetDisabled\"] = function(self,disabled)\n\t\tself.disabled = disabled\n\t\tif disabled then\n\t\t\tself.frame:EnableMouse(false)\n\t\t\tself.label:SetTextColor(0.5, 0.5, 0.5)\n\t\telse\n\t\t\tself.frame:EnableMouse(true)\n\t\t\tself.label:SetTextColor(1, 1, 1)\n\t\tend\n\tend\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal function Constructor()\n\t-- create a Label type that we will hijack\n\tlocal label = AceGUI:Create(\"Label\")\n\n\tlocal frame = label.frame\n\tframe:EnableMouse(true)\n\tframe:SetScript(\"OnEnter\", Control_OnEnter)\n\tframe:SetScript(\"OnLeave\", Control_OnLeave)\n\tframe:SetScript(\"OnMouseDown\", Label_OnClick)\n\n\tlocal highlight = frame:CreateTexture(nil, \"HIGHLIGHT\")\n\thighlight:SetTexture(nil)\n\thighlight:SetAllPoints()\n\thighlight:SetBlendMode(\"ADD\")\n\n\tlabel.highlight = highlight\n\tlabel.type = Type\n\tlabel.LabelOnAcquire = label.OnAcquire\n\tfor method, func in pairs(methods) do\n\t\tlabel[method] = func\n\tend\n\n\treturn label\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua",
    "content": "--[[-----------------------------------------------------------------------------\nKeybinding Widget\nSet Keybindings in the Config UI.\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"Keybinding\", 21\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal pairs = pairs\n\n-- WoW APIs\nlocal IsShiftKeyDown, IsControlKeyDown, IsAltKeyDown = IsShiftKeyDown, IsControlKeyDown, IsAltKeyDown\nlocal CreateFrame, UIParent = CreateFrame, UIParent\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: NOT_BOUND\n\n--[[-----------------------------------------------------------------------------\nScripts\n-------------------------------------------------------------------------------]]\n\nlocal function Control_OnEnter(frame)\n\tframe.obj:Fire(\"OnEnter\")\nend\n\nlocal function Control_OnLeave(frame)\n\tframe.obj:Fire(\"OnLeave\")\nend\n\nlocal function Keybinding_OnClick(frame, button)\n\tif button == \"LeftButton\" or button == \"RightButton\" then\n\t\tlocal self = frame.obj\n\t\tif self.waitingForKey then\n\t\t\tframe:EnableKeyboard(false)\n\t\t\tself.msgframe:Hide()\n\t\t\tframe:UnlockHighlight()\n\t\t\tself.waitingForKey = nil\n\t\telse\n\t\t\tframe:EnableKeyboard(true)\n\t\t\tself.msgframe:Show()\n\t\t\tframe:LockHighlight()\n\t\t\tself.waitingForKey = true\n\t\tend\n\tend\n\tAceGUI:ClearFocus()\nend\n\nlocal ignoreKeys = {\n\t[\"BUTTON1\"] = true, [\"BUTTON2\"] = true,\n\t[\"UNKNOWN\"] = true,\n\t[\"LSHIFT\"] = true, [\"LCTRL\"] = true, [\"LALT\"] = true,\n\t[\"RSHIFT\"] = true, [\"RCTRL\"] = true, [\"RALT\"] = true,\n}\nlocal function Keybinding_OnKeyDown(frame, key)\n\tlocal self = frame.obj\n\tif self.waitingForKey then\n\t\tlocal keyPressed = key\n\t\tif keyPressed == \"ESCAPE\" then\n\t\t\tkeyPressed = \"\"\n\t\telse\n\t\t\tif ignoreKeys[keyPressed] then return end\n\t\t\tif IsShiftKeyDown() then\n\t\t\t\tkeyPressed = \"SHIFT-\"..keyPressed\n\t\t\tend\n\t\t\tif IsControlKeyDown() then\n\t\t\t\tkeyPressed = \"CTRL-\"..keyPressed\n\t\t\tend\n\t\t\tif IsAltKeyDown() then\n\t\t\t\tkeyPressed = \"ALT-\"..keyPressed\n\t\t\tend\n\t\tend\n\n\t\tframe:EnableKeyboard(false)\n\t\tself.msgframe:Hide()\n\t\tframe:UnlockHighlight()\n\t\tself.waitingForKey = nil\n\n\t\tif not self.disabled then\n\t\t\tself:SetKey(keyPressed)\n\t\t\tself:Fire(\"OnKeyChanged\", keyPressed)\n\t\tend\n\tend\nend\n\nlocal function Keybinding_OnMouseDown(frame, button)\n\tif button == \"LeftButton\" or button == \"RightButton\" then\n\t\treturn\n\telseif button == \"MiddleButton\" then\n\t\tbutton = \"BUTTON3\"\n\telseif button == \"Button4\" then\n\t\tbutton = \"BUTTON4\"\n\telseif button == \"Button5\" then\n\t\tbutton = \"BUTTON5\"\n\tend\n\tKeybinding_OnKeyDown(frame, button)\nend\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\tself:SetWidth(200)\n\t\tself:SetLabel(\"\")\n\t\tself:SetKey(\"\")\n\t\tself.waitingForKey = nil\n\t\tself.msgframe:Hide()\n\t\tself:SetDisabled(false)\n\tend,\n\n\t-- [\"OnRelease\"] = nil,\n\n\t[\"SetDisabled\"] = function(self, disabled)\n\t\tself.disabled = disabled\n\t\tif disabled then\n\t\t\tself.button:Disable()\n\t\t\tself.label:SetTextColor(0.5,0.5,0.5)\n\t\telse\n\t\t\tself.button:Enable()\n\t\t\tself.label:SetTextColor(1,1,1)\n\t\tend\n\tend,\n\n\t[\"SetKey\"] = function(self, key)\n\t\tif (key or \"\") == \"\" then\n\t\t\tself.button:SetText(NOT_BOUND)\n\t\t\tself.button:SetNormalFontObject(\"GameFontNormal\")\n\t\telse\n\t\t\tself.button:SetText(key)\n\t\t\tself.button:SetNormalFontObject(\"GameFontHighlight\")\n\t\tend\n\tend,\n\n\t[\"GetKey\"] = function(self)\n\t\tlocal key = self.button:GetText()\n\t\tif key == NOT_BOUND then\n\t\t\tkey = nil\n\t\tend\n\t\treturn key\n\tend,\n\n\t[\"SetLabel\"] = function(self, label)\n\t\tself.label:SetText(label or \"\")\n\t\tif (label or \"\") == \"\" then\n\t\t\tself.alignoffset = nil\n\t\t\tself:SetHeight(24)\n\t\telse\n\t\t\tself.alignoffset = 30\n\t\t\tself:SetHeight(44)\n\t\tend\n\tend,\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\n\nlocal ControlBackdrop  = {\n\tbgFile = \"Interface\\\\Tooltips\\\\UI-Tooltip-Background\",\n\tedgeFile = \"Interface\\\\Tooltips\\\\UI-Tooltip-Border\",\n\ttile = true, tileSize = 16, edgeSize = 16,\n\tinsets = { left = 3, right = 3, top = 3, bottom = 3 }\n}\n\nlocal function keybindingMsgFixWidth(frame)\n\tframe:SetWidth(frame.msg:GetWidth() + 10)\n\tframe:SetScript(\"OnUpdate\", nil)\nend\n\nlocal function Constructor()\n\tlocal name = \"AceGUI30KeybindingButton\" .. AceGUI:GetNextWidgetNum(Type)\n\n\tlocal frame = CreateFrame(\"Frame\", nil, UIParent)\n\tlocal button = CreateFrame(\"Button\", name, frame, \"UIPanelButtonTemplate2\")\n\n\tbutton:EnableMouse(true)\n\tbutton:RegisterForClicks(\"AnyDown\")\n\tbutton:SetScript(\"OnEnter\", Control_OnEnter)\n\tbutton:SetScript(\"OnLeave\", Control_OnLeave)\n\tbutton:SetScript(\"OnClick\", Keybinding_OnClick)\n\tbutton:SetScript(\"OnKeyDown\", Keybinding_OnKeyDown)\n\tbutton:SetScript(\"OnMouseDown\", Keybinding_OnMouseDown)\n\tbutton:SetPoint(\"BOTTOMLEFT\")\n\tbutton:SetPoint(\"BOTTOMRIGHT\")\n\tbutton:SetHeight(24)\n\n\tlocal text = button:GetFontString()\n\ttext:SetPoint(\"LEFT\", 7, 0)\n\ttext:SetPoint(\"RIGHT\", -7, 0)\n\n\tlocal label = frame:CreateFontString(nil, \"OVERLAY\", \"GameFontHighlight\")\n\tlabel:SetPoint(\"TOPLEFT\")\n\tlabel:SetPoint(\"TOPRIGHT\")\n\tlabel:SetJustifyH(\"CENTER\")\n\tlabel:SetHeight(18)\n\n\tlocal msgframe = CreateFrame(\"Frame\", nil, UIParent)\n\tmsgframe:SetHeight(30)\n\tmsgframe:SetBackdrop(ControlBackdrop)\n\tmsgframe:SetBackdropColor(0,0,0)\n\tmsgframe:SetFrameStrata(\"FULLSCREEN_DIALOG\")\n\tmsgframe:SetFrameLevel(1000)\n\n\tlocal msg = msgframe:CreateFontString(nil, \"OVERLAY\", \"GameFontNormal\")\n\tmsg:SetText(\"Press a key to bind, ESC to clear the binding or click the button again to cancel.\")\n\tmsgframe.msg = msg\n\tmsg:SetPoint(\"TOPLEFT\", 5, -5)\n\tmsgframe:SetScript(\"OnUpdate\", keybindingMsgFixWidth)\n\tmsgframe:SetPoint(\"BOTTOM\", button, \"TOP\")\n\tmsgframe:Hide()\n\n\tlocal widget = {\n\t\tbutton      = button,\n\t\tlabel       = label,\n\t\tmsgframe    = msgframe,\n\t\tframe       = frame,\n\t\talignoffset = 30,\n\t\ttype        = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\tbutton.obj = widget\n\n\treturn AceGUI:RegisterAsWidget(widget)\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIWidget-Label.lua",
    "content": "--[[-----------------------------------------------------------------------------\nLabel Widget\nDisplays text and optionally an icon.\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"Label\", 21\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal max, select, pairs = math.max, select, pairs\n\n-- WoW APIs\nlocal CreateFrame, UIParent = CreateFrame, UIParent\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: GameFontHighlightSmall\n\n--[[-----------------------------------------------------------------------------\nSupport functions\n-------------------------------------------------------------------------------]]\n\nlocal function UpdateImageAnchor(self)\n\tif self.resizing then return end\n\tlocal frame = self.frame\n\tlocal width = frame.width or frame:GetWidth() or 0\n\tlocal image = self.image\n\tlocal label = self.label\n\tlocal height\n\n\tlabel:ClearAllPoints()\n\timage:ClearAllPoints()\n\n\tif self.imageshown then\n\t\tlocal imagewidth = image:GetWidth()\n\t\tif (width - imagewidth) < 200 or (label:GetText() or \"\") == \"\" then\n\t\t\t-- image goes on top centered when less than 200 width for the text, or if there is no text\n\t\t\timage:SetPoint(\"TOP\")\n\t\t\tlabel:SetPoint(\"TOP\", image, \"BOTTOM\")\n\t\t\tlabel:SetPoint(\"LEFT\")\n\t\t\tlabel:SetWidth(width)\n\t\t\theight = image:GetHeight() + label:GetHeight()\n\t\telse\n\t\t\t-- image on the left\n\t\t\timage:SetPoint(\"TOPLEFT\")\n\t\t\tlabel:SetPoint(\"TOPLEFT\", image, \"TOPRIGHT\", 4, 0)\n\t\t\tlabel:SetWidth(width - imagewidth - 4)\n\t\t\theight = max(image:GetHeight(), label:GetHeight())\n\t\tend\n\telse\n\t\t-- no image shown\n\t\tlabel:SetPoint(\"TOPLEFT\")\n\t\tlabel:SetWidth(width)\n\t\theight = label:GetHeight()\n\tend\n\t\n\tself.resizing = true\n\tframe:SetHeight(height)\n\tframe.height = height\n\tself.resizing = nil\nend\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\t-- set the flag to stop constant size updates\n\t\tself.resizing = true\n\t\t-- height is set dynamically by the text and image size\n\t\tself:SetWidth(200)\n\t\tself:SetText()\n\t\tself:SetImage(nil)\n\t\tself:SetImageSize(16, 16)\n\t\tself:SetColor()\n\t\tself:SetFontObject()\n\n\t\t-- reset the flag\n\t\tself.resizing = nil\n\t\t-- run the update explicitly\n\t\tUpdateImageAnchor(self)\n\tend,\n\n\t-- [\"OnRelease\"] = nil,\n\n\t[\"OnWidthSet\"] = function(self, width)\n\t\tUpdateImageAnchor(self)\n\tend,\n\n\t[\"SetText\"] = function(self, text)\n\t\tself.label:SetText(text)\n\t\tUpdateImageAnchor(self)\n\tend,\n\n\t[\"SetColor\"] = function(self, r, g, b)\n\t\tif not (r and g and b) then\n\t\t\tr, g, b = 1, 1, 1\n\t\tend\n\t\tself.label:SetVertexColor(r, g, b)\n\tend,\n\n\t[\"SetImage\"] = function(self, path, ...)\n\t\tlocal image = self.image\n\t\timage:SetTexture(path)\n\t\t\n\t\tif image:GetTexture() then\n\t\t\tself.imageshown = true\n\t\t\tlocal n = select(\"#\", ...)\n\t\t\tif n == 4 or n == 8 then\n\t\t\t\timage:SetTexCoord(...)\n\t\t\telse\n\t\t\t\timage:SetTexCoord(0, 1, 0, 1)\n\t\t\tend\n\t\telse\n\t\t\tself.imageshown = nil\n\t\tend\n\t\tUpdateImageAnchor(self)\n\tend,\n\n\t[\"SetFont\"] = function(self, font, height, flags)\n\t\tself.label:SetFont(font, height, flags)\n\tend,\n\n\t[\"SetFontObject\"] = function(self, font)\n\t\tself:SetFont((font or GameFontHighlightSmall):GetFont())\n\tend,\n\n\t[\"SetImageSize\"] = function(self, width, height)\n\t\tself.image:SetWidth(width)\n\t\tself.image:SetHeight(height)\n\t\tUpdateImageAnchor(self)\n\tend,\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal function Constructor()\n\tlocal frame = CreateFrame(\"Frame\", nil, UIParent)\n\tframe:Hide()\n\n\tlocal label = frame:CreateFontString(nil, \"BACKGROUND\", \"GameFontHighlightSmall\")\n\tlabel:SetJustifyH(\"LEFT\")\n\tlabel:SetJustifyV(\"TOP\")\n\n\tlocal image = frame:CreateTexture(nil, \"BACKGROUND\")\n\n\t-- create widget\n\tlocal widget = {\n\t\tlabel = label,\n\t\timage = image,\n\t\tframe = frame,\n\t\ttype  = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\n\treturn AceGUI:RegisterAsWidget(widget)\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua",
    "content": "local Type, Version = \"MultiLineEditBox\", 23\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal pairs = pairs\n\n-- WoW APIs\nlocal GetCursorInfo, GetSpellName, ClearCursor = GetCursorInfo, GetSpellName, ClearCursor\nlocal CreateFrame, UIParent = CreateFrame, UIParent\nlocal _G = _G\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: ACCEPT, ChatFontNormal\n\n--[[-----------------------------------------------------------------------------\nSupport functions\n-------------------------------------------------------------------------------]]\nlocal function Layout(self)\n\tself:SetHeight(self.numlines * 14 + (self.disablebutton and 19 or 41) + self.labelHeight)\n\n\tif self.labelHeight == 0 then\n\t\tself.scrollBar:SetPoint(\"TOP\", self.frame, \"TOP\", 0, -23)\n\telse\n\t\tself.scrollBar:SetPoint(\"TOP\", self.label, \"BOTTOM\", 0, -19)\n\tend\n\n\tif self.disablebutton then\n\t\tself.scrollBar:SetPoint(\"BOTTOM\", self.frame, \"BOTTOM\", 0, 21)\n\t\tself.scrollBG:SetPoint(\"BOTTOMLEFT\", 0, 4)\n\telse\n\t\tself.scrollBar:SetPoint(\"BOTTOM\", self.button, \"TOP\", 0, 18)\n\t\tself.scrollBG:SetPoint(\"BOTTOMLEFT\", self.button, \"TOPLEFT\")\n\tend\nend\n\n--[[-----------------------------------------------------------------------------\nScripts\n-------------------------------------------------------------------------------]]\nlocal function OnClick(self)                                                     -- Button\n\tself = self.obj\n\tself.editBox:ClearFocus()\n\tif not self:Fire(\"OnEnterPressed\", self.editBox:GetText()) then\n\t\tself.button:Disable()\n\tend\nend\n\nlocal function OnCursorChanged(self, _, y, _, cursorHeight)                      -- EditBox\n\tself, y = self.obj.scrollFrame, -y\n\tlocal offset = self:GetVerticalScroll()\n\tif y < offset then\n\t\tself:SetVerticalScroll(y)\n\telse\n\t\ty = y + cursorHeight - self:GetHeight()\n\t\tif y > offset then\n\t\t\tself:SetVerticalScroll(y)\n\t\tend\n\tend\nend\n\nlocal function OnEditFocusLost(self)                                             -- EditBox\n\tself:HighlightText(0, 0)\nend\n\nlocal function OnEnter(self)                                                     -- EditBox / ScrollFrame\n\tself = self.obj\n\tif not self.entered then\n\t\tself.entered = true\n\t\tself:Fire(\"OnEnter\")\n\tend\nend\n\nlocal function OnLeave(self)                                                     -- EditBox / ScrollFrame\n\tself = self.obj\n\tif self.entered then\n\t\tself.entered = nil\n\t\tself:Fire(\"OnLeave\")\n\tend\nend\n\nlocal function OnMouseUp(self)                                                   -- ScrollFrame\n\tself = self.obj.editBox\n\tself:SetFocus()\n\tself:SetCursorPosition(self:GetNumLetters())\nend\n\nlocal function OnReceiveDrag(self)                                               -- EditBox / ScrollFrame\n\tlocal type, id, info = GetCursorInfo()\n\tif type == \"spell\" then\n\t\tinfo, id = GetSpellName(id, info)\n\t\tif id and id:match(\"%d\") then\n\t\t\tinfo = info .. \"(\" .. id .. \")\"\n\t\tend\n\telseif type ~= \"item\" then\n\t\treturn\n\tend\n\tClearCursor()\n\tself = self.obj\n\tlocal editBox = self.editBox\n\tif not editBox:HasFocus() then\n\t\teditBox:SetFocus()\n\t\teditBox:SetCursorPosition(editBox:GetNumLetters())\n\tend\n\teditBox:Insert(info)\n\tself.button:Enable()\nend\n\nlocal function OnSizeChanged(self, width, height)                                -- ScrollFrame\n\tself.obj.editBox:SetWidth(width)\nend\n\nlocal function OnTextChanged(self, userInput)                                    -- EditBox\n\tif userInput then\n\t\tself = self.obj\n\t\tself:Fire(\"OnTextChanged\", self.editBox:GetText())\n\t\tself.button:Enable()\n\tend\nend\n\nlocal function OnTextSet(self)                                                   -- EditBox\n\tself:HighlightText(0, 0)\n\tself:SetCursorPosition(self:GetNumLetters())\n\tself:SetCursorPosition(0)\n\tself.obj.button:Disable()\nend\n\nlocal function OnVerticalScroll(self, offset)                                    -- ScrollFrame\n\tlocal editBox = self.obj.editBox\n\teditBox:SetHitRectInsets(0, 0, offset, editBox:GetHeight() - offset - self:GetHeight())\nend\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\tself.editBox:SetText(\"\")\n\t\tself:SetDisabled(false)\n\t\tself:SetWidth(200)\n\t\tself:DisableButton(false)\n\t\tself:SetNumLines()\n\t\tself.entered = nil\n\t\tself:SetMaxLetters(0)\n\tend,\n\n\t-- [\"OnRelease\"] = nil,\n\n\t[\"SetDisabled\"] = function(self, disabled)\n\t\tlocal editBox = self.editBox\n\t\tif disabled then\n\t\t\teditBox:ClearFocus()\n\t\t\teditBox:EnableMouse(false)\n\t\t\teditBox:SetTextColor(0.5, 0.5, 0.5)\n\t\t\tself.label:SetTextColor(0.5, 0.5, 0.5)\n\t\t\tself.scrollFrame:EnableMouse(false)\n\t\t\tself.button:Disable()\n\t\telse\n\t\t\teditBox:EnableMouse(true)\n\t\t\teditBox:SetTextColor(1, 1, 1)\n\t\t\tself.label:SetTextColor(1, 0.82, 0)\n\t\t\tself.scrollFrame:EnableMouse(true)\n\t\tend\n\tend,\n\n\t[\"SetLabel\"] = function(self, text)\n\t\tif text and text ~= \"\" then\n\t\t\tself.label:SetText(text)\n\t\t\tif self.labelHeight ~= 10 then\n\t\t\t\tself.labelHeight = 10\n\t\t\t\tself.label:Show()\n\t\t\tend\n\t\telseif self.labelHeight ~= 0 then\n\t\t\tself.labelHeight = 0\n\t\t\tself.label:Hide()\n\t\tend\n\t\tLayout(self)\n\tend,\n\n\t[\"SetNumLines\"] = function(self, value)\n\t\tif not value or value < 4 then\n\t\t\tvalue = 4\n\t\tend\n\t\tself.numlines = value\n\t\tLayout(self)\n\tend,\n\n\t[\"SetText\"] = function(self, text)\n\t\tself.editBox:SetText(text)\n\tend,\n\n\t[\"GetText\"] = function(self)\n\t\treturn self.editBox:GetText()\n\tend,\n\n\t[\"SetMaxLetters\"] = function (self, num)\n\t\tself.editBox:SetMaxLetters(num or 0)\n\tend,\n\n\t[\"DisableButton\"] = function(self, disabled)\n\t\tself.disablebutton = disabled\n\t\tif disabled then\n\t\t\tself.button:Hide()\n\t\telse\n\t\t\tself.button:Show()\n\t\tend\n\t\tLayout(self)\n\tend\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal backdrop = {\n\tbgFile = [[Interface\\Tooltips\\UI-Tooltip-Background]],\n\tedgeFile = [[Interface\\Tooltips\\UI-Tooltip-Border]], edgeSize = 16,\n\tinsets = { left = 4, right = 3, top = 4, bottom = 3 }\n}\n\nlocal function Constructor()\n\tlocal frame = CreateFrame(\"Frame\", nil, UIParent)\n\tframe:Hide()\n\t\n\tlocal widgetNum = AceGUI:GetNextWidgetNum(Type)\n\n\tlocal label = frame:CreateFontString(nil, \"OVERLAY\", \"GameFontNormalSmall\")\n\tlabel:SetPoint(\"TOPLEFT\", frame, \"TOPLEFT\", 0, -4)\n\tlabel:SetPoint(\"TOPRIGHT\", frame, \"TOPRIGHT\", 0, -4)\n\tlabel:SetJustifyH(\"LEFT\")\n\tlabel:SetText(ACCEPT)\n\tlabel:SetHeight(10)\n\n\tlocal button = CreateFrame(\"Button\", (\"%s%dButton\"):format(Type, widgetNum), frame, \"UIPanelButtonTemplate2\")\n\tbutton:SetPoint(\"BOTTOMLEFT\", 0, 4)\n\tbutton:SetHeight(22)\n\tbutton:SetWidth(label:GetStringWidth() + 24)\n\tbutton:SetText(ACCEPT)\n\tbutton:SetScript(\"OnClick\", OnClick)\n\tbutton:Disable()\n\t\n\tlocal text = button:GetFontString()\n\ttext:ClearAllPoints()\n\ttext:SetPoint(\"TOPLEFT\", button, \"TOPLEFT\", 5, -5)\n\ttext:SetPoint(\"BOTTOMRIGHT\", button, \"BOTTOMRIGHT\", -5, 1)\n\ttext:SetJustifyV(\"MIDDLE\")\n\n\tlocal scrollBG = CreateFrame(\"Frame\", nil, frame)\n\tscrollBG:SetBackdrop(backdrop)\n\tscrollBG:SetBackdropColor(0, 0, 0)\n\tscrollBG:SetBackdropBorderColor(0.4, 0.4, 0.4)\n\n\tlocal scrollFrame = CreateFrame(\"ScrollFrame\", (\"%s%dScrollFrame\"):format(Type, widgetNum), frame, \"UIPanelScrollFrameTemplate\")\n\n\tlocal scrollBar = _G[scrollFrame:GetName() .. \"ScrollBar\"]\n\tscrollBar:ClearAllPoints()\n\tscrollBar:SetPoint(\"TOP\", label, \"BOTTOM\", 0, -19)\n\tscrollBar:SetPoint(\"BOTTOM\", button, \"TOP\", 0, 18)\n\tscrollBar:SetPoint(\"RIGHT\", frame, \"RIGHT\")\n\n\tscrollBG:SetPoint(\"TOPRIGHT\", scrollBar, \"TOPLEFT\", 0, 19)\n\tscrollBG:SetPoint(\"BOTTOMLEFT\", button, \"TOPLEFT\")\n\n\tscrollFrame:SetPoint(\"TOPLEFT\", scrollBG, \"TOPLEFT\", 5, -6)\n\tscrollFrame:SetPoint(\"BOTTOMRIGHT\", scrollBG, \"BOTTOMRIGHT\", -4, 4)\n\tscrollFrame:SetScript(\"OnEnter\", OnEnter)\n\tscrollFrame:SetScript(\"OnLeave\", OnLeave)\n\tscrollFrame:SetScript(\"OnMouseUp\", OnMouseUp)\n\tscrollFrame:SetScript(\"OnReceiveDrag\", OnReceiveDrag)\n\tscrollFrame:SetScript(\"OnSizeChanged\", OnSizeChanged)\n\tscrollFrame:HookScript(\"OnVerticalScroll\", OnVerticalScroll)\n\n\tlocal editBox = CreateFrame(\"EditBox\", nil, scrollFrame)\n\teditBox:SetAllPoints()\n\teditBox:SetFontObject(ChatFontNormal)\n\teditBox:SetMultiLine(true)\n\teditBox:EnableMouse(true)\n\teditBox:SetAutoFocus(false)\n\teditBox:SetCountInvisibleLetters(false)\n\teditBox:SetScript(\"OnCursorChanged\", OnCursorChanged)\n\teditBox:SetScript(\"OnEditFocusLost\", OnEditFocusLost)\n\teditBox:SetScript(\"OnEnter\", OnEnter)\n\teditBox:SetScript(\"OnEscapePressed\", editBox.ClearFocus)\n\teditBox:SetScript(\"OnLeave\", OnLeave)\n\teditBox:SetScript(\"OnMouseDown\", OnReceiveDrag)\n\teditBox:SetScript(\"OnReceiveDrag\", OnReceiveDrag)\n\teditBox:SetScript(\"OnTextChanged\", OnTextChanged)\n\teditBox:SetScript(\"OnTextSet\", OnTextSet)\n\n\tscrollFrame:SetScrollChild(editBox)\n\n\tlocal widget = {\n\t\tbutton      = button,\n\t\teditBox     = editBox,\n\t\tframe       = frame,\n\t\tlabel       = label,\n\t\tlabelHeight = 10,\n\t\tnumlines    = 4,\n\t\tscrollBar   = scrollBar,\n\t\tscrollBG    = scrollBG,\n\t\tscrollFrame = scrollFrame,\n\t\ttype        = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\tbutton.obj, editBox.obj, scrollFrame.obj = widget, widget, widget\n\n\treturn AceGUI:RegisterAsWidget(widget)\nend\n\nAceGUI:RegisterWidgetType(Type, Constructor, Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua",
    "content": "--[[-----------------------------------------------------------------------------\nSlider Widget\nGraphical Slider, like, for Range values.\n-------------------------------------------------------------------------------]]\nlocal Type, Version = \"Slider\", 20\nlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\nif not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end\n\n-- Lua APIs\nlocal min, max, floor = math.min, math.max, math.floor\nlocal tonumber, pairs = tonumber, pairs\n\n-- WoW APIs\nlocal PlaySound = PlaySound\nlocal CreateFrame, UIParent = CreateFrame, UIParent\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: GameFontHighlightSmall\n\n--[[-----------------------------------------------------------------------------\nSupport functions\n-------------------------------------------------------------------------------]]\nlocal function UpdateText(self)\n\tlocal value = self.value or 0\n\tif self.ispercent then\n\t\tself.editbox:SetText((\"%s%%\"):format(floor(value * 1000 + 0.5) / 10))\n\telse\n\t\tself.editbox:SetText(floor(value * 100 + 0.5) / 100)\n\tend\nend\n\nlocal function UpdateLabels(self)\n\tlocal min, max = (self.min or 0), (self.max or 100)\n\tif self.ispercent then\n\t\tself.lowtext:SetFormattedText(\"%s%%\", (min * 100))\n\t\tself.hightext:SetFormattedText(\"%s%%\", (max * 100))\n\telse\n\t\tself.lowtext:SetText(min)\n\t\tself.hightext:SetText(max)\n\tend\nend\n\n--[[-----------------------------------------------------------------------------\nScripts\n-------------------------------------------------------------------------------]]\nlocal function Control_OnEnter(frame)\n\tframe.obj:Fire(\"OnEnter\")\nend\n\nlocal function Control_OnLeave(frame)\n\tframe.obj:Fire(\"OnLeave\")\nend\n\nlocal function Frame_OnMouseDown(frame)\n\tframe.obj.slider:EnableMouseWheel(true)\n\tAceGUI:ClearFocus()\nend\n\nlocal function Slider_OnValueChanged(frame)\n\tlocal self = frame.obj\n\tif not frame.setup then\n\t\tlocal newvalue = frame:GetValue()\n\t\tif newvalue ~= self.value and not self.disabled then\n\t\t\tself.value = newvalue\n\t\t\tself:Fire(\"OnValueChanged\", newvalue)\n\t\tend\n\t\tif self.value then\n\t\t\tUpdateText(self)\n\t\tend\n\tend\nend\n\nlocal function Slider_OnMouseUp(frame)\n\tlocal self = frame.obj\n\tself:Fire(\"OnMouseUp\", self.value)\nend\n\nlocal function Slider_OnMouseWheel(frame, v)\n\tlocal self = frame.obj\n\tif not self.disabled then\n\t\tlocal value = self.value\n\t\tif v > 0 then\n\t\t\tvalue = min(value + (self.step or 1), self.max)\n\t\telse\n\t\t\tvalue = max(value - (self.step or 1), self.min)\n\t\tend\n\t\tself.slider:SetValue(value)\n\tend\nend\n\nlocal function EditBox_OnEscapePressed(frame)\n\tframe:ClearFocus()\nend\n\nlocal function EditBox_OnEnterPressed(frame)\n\tlocal self = frame.obj\n\tlocal value = frame:GetText()\n\tif self.ispercent then\n\t\tvalue = value:gsub('%%', '')\n\t\tvalue = tonumber(value) / 100\n\telse\n\t\tvalue = tonumber(value)\n\tend\n\t\n\tif value then\n\t\tPlaySound(\"igMainMenuOptionCheckBoxOn\")\n\t\tself.slider:SetValue(value)\n\t\tself:Fire(\"OnMouseUp\", value)\n\tend\nend\n\nlocal function EditBox_OnEnter(frame)\n\tframe:SetBackdropBorderColor(0.5, 0.5, 0.5, 1)\nend\n\nlocal function EditBox_OnLeave(frame)\n\tframe:SetBackdropBorderColor(0.3, 0.3, 0.3, 0.8)\nend\n\n--[[-----------------------------------------------------------------------------\nMethods\n-------------------------------------------------------------------------------]]\nlocal methods = {\n\t[\"OnAcquire\"] = function(self)\n\t\tself:SetWidth(200)\n\t\tself:SetHeight(44)\n\t\tself:SetDisabled(false)\n\t\tself:SetIsPercent(nil)\n\t\tself:SetSliderValues(0,100,1)\n\t\tself:SetValue(0)\n\t\tself.slider:EnableMouseWheel(false)\n\tend,\n\n\t-- [\"OnRelease\"] = nil,\n\n\t[\"SetDisabled\"] = function(self, disabled)\n\t\tself.disabled = disabled\n\t\tif disabled then\n\t\t\tself.slider:EnableMouse(false)\n\t\t\tself.label:SetTextColor(.5, .5, .5)\n\t\t\tself.hightext:SetTextColor(.5, .5, .5)\n\t\t\tself.lowtext:SetTextColor(.5, .5, .5)\n\t\t\t--self.valuetext:SetTextColor(.5, .5, .5)\n\t\t\tself.editbox:SetTextColor(.5, .5, .5)\n\t\t\tself.editbox:EnableMouse(false)\n\t\t\tself.editbox:ClearFocus()\n\t\telse\n\t\t\tself.slider:EnableMouse(true)\n\t\t\tself.label:SetTextColor(1, .82, 0)\n\t\t\tself.hightext:SetTextColor(1, 1, 1)\n\t\t\tself.lowtext:SetTextColor(1, 1, 1)\n\t\t\t--self.valuetext:SetTextColor(1, 1, 1)\n\t\t\tself.editbox:SetTextColor(1, 1, 1)\n\t\t\tself.editbox:EnableMouse(true)\n\t\tend\n\tend,\n\n\t[\"SetValue\"] = function(self, value)\n\t\tself.slider.setup = true\n\t\tself.slider:SetValue(value)\n\t\tself.value = value\n\t\tUpdateText(self)\n\t\tself.slider.setup = nil\n\tend,\n\n\t[\"GetValue\"] = function(self)\n\t\treturn self.value\n\tend,\n\n\t[\"SetLabel\"] = function(self, text)\n\t\tself.label:SetText(text)\n\tend,\n\n\t[\"SetSliderValues\"] = function(self, min, max, step)\n\t\tlocal frame = self.slider\n\t\tframe.setup = true\n\t\tself.min = min\n\t\tself.max = max\n\t\tself.step = step\n\t\tframe:SetMinMaxValues(min or 0,max or 100)\n\t\tUpdateLabels(self)\n\t\tframe:SetValueStep(step or 1)\n\t\tif self.value then\n\t\t\tframe:SetValue(self.value)\n\t\tend\n\t\tframe.setup = nil\n\tend,\n\n\t[\"SetIsPercent\"] = function(self, value)\n\t\tself.ispercent = value\n\t\tUpdateLabels(self)\n\t\tUpdateText(self)\n\tend\n}\n\n--[[-----------------------------------------------------------------------------\nConstructor\n-------------------------------------------------------------------------------]]\nlocal SliderBackdrop  = {\n\tbgFile = \"Interface\\\\Buttons\\\\UI-SliderBar-Background\",\n\tedgeFile = \"Interface\\\\Buttons\\\\UI-SliderBar-Border\",\n\ttile = true, tileSize = 8, edgeSize = 8,\n\tinsets = { left = 3, right = 3, top = 6, bottom = 6 }\n}\n\nlocal ManualBackdrop = {\n\tbgFile = \"Interface\\\\ChatFrame\\\\ChatFrameBackground\",\n\tedgeFile = \"Interface\\\\ChatFrame\\\\ChatFrameBackground\",\n\ttile = true, edgeSize = 1, tileSize = 5,\n}\n\nlocal function Constructor()\n\tlocal frame = CreateFrame(\"Frame\", nil, UIParent)\n\n\tframe:EnableMouse(true)\n\tframe:SetScript(\"OnMouseDown\", Frame_OnMouseDown)\n\n\tlocal label = frame:CreateFontString(nil, \"OVERLAY\", \"GameFontNormal\")\n\tlabel:SetPoint(\"TOPLEFT\")\n\tlabel:SetPoint(\"TOPRIGHT\")\n\tlabel:SetJustifyH(\"CENTER\")\n\tlabel:SetHeight(15)\n\n\tlocal slider = CreateFrame(\"Slider\", nil, frame)\n\tslider:SetOrientation(\"HORIZONTAL\")\n\tslider:SetHeight(15)\n\tslider:SetHitRectInsets(0, 0, -10, 0)\n\tslider:SetBackdrop(SliderBackdrop)\n\tslider:SetThumbTexture(\"Interface\\\\Buttons\\\\UI-SliderBar-Button-Horizontal\")\n\tslider:SetPoint(\"TOP\", label, \"BOTTOM\")\n\tslider:SetPoint(\"LEFT\", 3, 0)\n\tslider:SetPoint(\"RIGHT\", -3, 0)\n\tslider:SetValue(0)\n\tslider:SetScript(\"OnValueChanged\",Slider_OnValueChanged)\n\tslider:SetScript(\"OnEnter\", Control_OnEnter)\n\tslider:SetScript(\"OnLeave\", Control_OnLeave)\n\tslider:SetScript(\"OnMouseUp\", Slider_OnMouseUp)\n\tslider:SetScript(\"OnMouseWheel\", Slider_OnMouseWheel)\n\n\tlocal lowtext = slider:CreateFontString(nil, \"ARTWORK\", \"GameFontHighlightSmall\")\n\tlowtext:SetPoint(\"TOPLEFT\", slider, \"BOTTOMLEFT\", 2, 3)\n\n\tlocal hightext = slider:CreateFontString(nil, \"ARTWORK\", \"GameFontHighlightSmall\")\n\thightext:SetPoint(\"TOPRIGHT\", slider, \"BOTTOMRIGHT\", -2, 3)\n\n\tlocal editbox = CreateFrame(\"EditBox\", nil, frame)\n\teditbox:SetAutoFocus(false)\n\teditbox:SetFontObject(GameFontHighlightSmall)\n\teditbox:SetPoint(\"TOP\", slider, \"BOTTOM\")\n\teditbox:SetHeight(14)\n\teditbox:SetWidth(70)\n\teditbox:SetJustifyH(\"CENTER\")\n\teditbox:EnableMouse(true)\n\teditbox:SetBackdrop(ManualBackdrop)\n\teditbox:SetBackdropColor(0, 0, 0, 0.5)\n\teditbox:SetBackdropBorderColor(0.3, 0.3, 0.30, 0.80)\n\teditbox:SetScript(\"OnEnter\", EditBox_OnEnter)\n\teditbox:SetScript(\"OnLeave\", EditBox_OnLeave)\n\teditbox:SetScript(\"OnEnterPressed\", EditBox_OnEnterPressed)\n\teditbox:SetScript(\"OnEscapePressed\", EditBox_OnEscapePressed)\n\n\tlocal widget = {\n\t\tlabel       = label,\n\t\tslider      = slider,\n\t\tlowtext     = lowtext,\n\t\thightext    = hightext,\n\t\teditbox     = editbox,\n\t\talignoffset = 25,\n\t\tframe       = frame,\n\t\ttype        = Type\n\t}\n\tfor method, func in pairs(methods) do\n\t\twidget[method] = func\n\tend\n\tslider.obj, editbox.obj = widget, widget\n\n\treturn AceGUI:RegisterAsWidget(widget)\nend\n\nAceGUI:RegisterWidgetType(Type,Constructor,Version)\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceHook-3.0/AceHook-3.0.lua",
    "content": "--- **AceHook-3.0** offers safe Hooking/Unhooking of functions, methods and frame scripts.\n-- Using AceHook-3.0 is recommended when you need to unhook your hooks again, so the hook chain isn't broken\n-- when you manually restore the original function.\n--\n-- **AceHook-3.0** can be embeded into your addon, either explicitly by calling AceHook:Embed(MyAddon) or by\n-- specifying it as an embeded library in your AceAddon. All functions will be available on your addon object\n-- and can be accessed directly, without having to explicitly call AceHook itself.\\\\\n-- It is recommended to embed AceHook, otherwise you'll have to specify a custom `self` on all calls you\n-- make into AceHook.\n-- @class file\n-- @name AceHook-3.0\n-- @release $Id$\nlocal ACEHOOK_MAJOR, ACEHOOK_MINOR = \"AceHook-3.0\", 8\nlocal AceHook, oldminor = LibStub:NewLibrary(ACEHOOK_MAJOR, ACEHOOK_MINOR)\n\nif not AceHook then return end -- No upgrade needed\n\nAceHook.embeded = AceHook.embeded or {}\nAceHook.registry = AceHook.registry or setmetatable({}, {__index = function(tbl, key) tbl[key] = {} return tbl[key] end })\nAceHook.handlers = AceHook.handlers or {}\nAceHook.actives = AceHook.actives or {}\nAceHook.scripts = AceHook.scripts or {}\nAceHook.onceSecure = AceHook.onceSecure or {}\nAceHook.hooks = AceHook.hooks or {}\n\n-- local upvalues\nlocal registry = AceHook.registry\nlocal handlers = AceHook.handlers\nlocal actives = AceHook.actives\nlocal scripts = AceHook.scripts\nlocal onceSecure = AceHook.onceSecure\n\n-- Lua APIs\nlocal pairs, next, type = pairs, next, type\nlocal format = string.format\nlocal assert, error = assert, error\n\n-- WoW APIs\nlocal issecurevariable, hooksecurefunc = issecurevariable, hooksecurefunc\nlocal _G = _G\n\n-- functions for later definition\nlocal donothing, createHook, hook\n\nlocal protectedScripts = {\n\tOnClick = true,\n}\n\n-- upgrading of embeded is done at the bottom of the file\n\nlocal mixins = {\n\t\"Hook\", \"SecureHook\",\n\t\"HookScript\", \"SecureHookScript\",\n\t\"Unhook\", \"UnhookAll\",\n\t\"IsHooked\",\n\t\"RawHook\", \"RawHookScript\"\n}\n\n-- AceHook:Embed( target )\n-- target (object) - target object to embed AceHook in\n--\n-- Embeds AceEevent into the target object making the functions from the mixins list available on target:..\nfunction AceHook:Embed( target )\n\tfor k, v in pairs( mixins ) do\n\t\ttarget[v] = self[v]\n\tend\n\tself.embeded[target] = true\n\t-- inject the hooks table safely\n\ttarget.hooks = target.hooks or {}\n\treturn target\nend\n\n-- AceHook:OnEmbedDisable( target )\n-- target (object) - target object that is being disabled\n--\n-- Unhooks all hooks when the target disables.\n-- this method should be called by the target manually or by an addon framework\nfunction AceHook:OnEmbedDisable( target )\n\ttarget:UnhookAll()\nend\n\nfunction createHook(self, handler, orig, secure, failsafe)\n\tlocal uid\n\tlocal method = type(handler) == \"string\"\n\tif failsafe and not secure then\n\t\t-- failsafe hook creation\n\t\tuid = function(...)\n\t\t\tif actives[uid] then\n\t\t\t\tif method then\n\t\t\t\t\tself[handler](self, ...)\n\t\t\t\telse\n\t\t\t\t\thandler(...)\n\t\t\t\tend\n\t\t\tend\n\t\t\treturn orig(...)\n\t\tend\n\t\t-- /failsafe hook\n\telse\n\t\t-- all other hooks\n\t\tuid = function(...)\n\t\t\tif actives[uid] then\n\t\t\t\tif method then\n\t\t\t\t\treturn self[handler](self, ...)\n\t\t\t\telse\n\t\t\t\t\treturn handler(...)\n\t\t\t\tend\n\t\t\telseif not secure then -- backup on non secure\n\t\t\t\treturn orig(...)\n\t\t\tend\n\t\tend\n\t\t-- /hook\n\tend\n\treturn uid\nend\n\nfunction donothing() end\n\nfunction hook(self, obj, method, handler, script, secure, raw, forceSecure, usage)\n\tif not handler then handler = method end\n\n\t-- These asserts make sure AceHooks's devs play by the rules.\n\tassert(not script or type(script) == \"boolean\")\n\tassert(not secure or type(secure) == \"boolean\")\n\tassert(not raw or type(raw) == \"boolean\")\n\tassert(not forceSecure or type(forceSecure) == \"boolean\")\n\tassert(usage)\n\n\t-- Error checking Battery!\n\tif obj and type(obj) ~= \"table\" then\n\t\terror(format(\"%s: 'object' - nil or table expected got %s\", usage, type(obj)), 3)\n\tend\n\tif type(method) ~= \"string\" then\n\t\terror(format(\"%s: 'method' - string expected got %s\", usage, type(method)), 3)\n\tend\n\tif type(handler) ~= \"string\" and type(handler) ~= \"function\" then\n\t\terror(format(\"%s: 'handler' - nil, string, or function expected got %s\", usage, type(handler)), 3)\n\tend\n\tif type(handler) == \"string\" and type(self[handler]) ~= \"function\" then\n\t\terror(format(\"%s: 'handler' - Handler specified does not exist at self[handler]\", usage), 3)\n\tend\n\tif script then\n\t\tif not obj or not obj.GetScript or not obj:HasScript(method) then\n\t\t\terror(format(\"%s: You can only hook a script on a frame object\", usage), 3)\n\t\tend\n\t\tif not secure and obj.IsProtected and obj:IsProtected() and protectedScripts[method] then\n\t\t\terror(format(\"Cannot hook secure script %q; Use SecureHookScript(obj, method, [handler]) instead.\", method), 3)\n\t\tend\n\telse\n\t\tlocal issecure\n\t\tif obj then\n\t\t\tissecure = onceSecure[obj] and onceSecure[obj][method] or issecurevariable(obj, method)\n\t\telse\n\t\t\tissecure = onceSecure[method] or issecurevariable(method)\n\t\tend\n\t\tif issecure then\n\t\t\tif forceSecure then\n\t\t\t\tif obj then\n\t\t\t\t\tonceSecure[obj] = onceSecure[obj] or {}\n\t\t\t\t\tonceSecure[obj][method] = true\n\t\t\t\telse\n\t\t\t\t\tonceSecure[method] = true\n\t\t\t\tend\n\t\t\telseif not secure then\n\t\t\t\terror(format(\"%s: Attempt to hook secure function %s. Use `SecureHook' or add `true' to the argument list to override.\", usage, method), 3)\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal uid\n\tif obj then\n\t\tuid = registry[self][obj] and registry[self][obj][method]\n\telse\n\t\tuid = registry[self][method]\n\tend\n\n\tif uid then\n\t\tif actives[uid] then\n\t\t\t-- Only two sane choices exist here.  We either a) error 100% of the time or b) always unhook and then hook\n\t\t\t-- choice b would likely lead to odd debuging conditions or other mysteries so we're going with a.\n\t\t\terror(format(\"Attempting to rehook already active hook %s.\", method))\n\t\tend\n\n\t\tif handlers[uid] == handler then -- turn on a decative hook, note enclosures break this ability, small memory leak\n\t\t\tactives[uid] = true\n\t\t\treturn\n\t\telseif obj then -- is there any reason not to call unhook instead of doing the following several lines?\n\t\t\tif self.hooks and self.hooks[obj] then\n\t\t\t\tself.hooks[obj][method] = nil\n\t\t\tend\n\t\t\tregistry[self][obj][method] = nil\n\t\telse\n\t\t\tif self.hooks then\n\t\t\t\tself.hooks[method] = nil\n\t\t\tend\n\t\t\tregistry[self][method] = nil\n\t\tend\n\t\thandlers[uid], actives[uid], scripts[uid] = nil, nil, nil\n\t\tuid = nil\n\tend\n\n\tlocal orig\n\tif script then\n\t\torig = obj:GetScript(method) or donothing\n\telseif obj then\n\t\torig = obj[method]\n\telse\n\t\torig = _G[method]\n\tend\n\n\tif not orig then\n\t\terror(format(\"%s: Attempting to hook a non existing target\", usage), 3)\n\tend\n\n\tuid = createHook(self, handler, orig, secure, not (raw or secure))\n\n\tif obj then\n\t\tself.hooks[obj] = self.hooks[obj] or {}\n\t\tregistry[self][obj] = registry[self][obj] or {}\n\t\tregistry[self][obj][method] = uid\n\n\t\tif not secure then\n\t\t\tself.hooks[obj][method] = orig\n\t\tend\n\n\t\tif script then\n\t\t\tif not secure then\n\t\t\t\tobj:SetScript(method, uid)\n\t\t\telse\n\t\t\t\tobj:HookScript(method, uid)\n\t\t\tend\n\t\telse\n\t\t\tif not secure then\n\t\t\t\tobj[method] = uid\n\t\t\telse\n\t\t\t\thooksecurefunc(obj, method, uid)\n\t\t\tend\n\t\tend\n\telse\n\t\tregistry[self][method] = uid\n\n\t\tif not secure then\n\t\t\t_G[method] = uid\n\t\t\tself.hooks[method] = orig\n\t\telse\n\t\t\thooksecurefunc(method, uid)\n\t\tend\n\tend\n\n\tactives[uid], handlers[uid], scripts[uid] = true, handler, script and true or nil\nend\n\n--- Hook a function or a method on an object.\n-- The hook created will be a \"safe hook\", that means that your handler will be called\n-- before the hooked function (\"Pre-Hook\"), and you don't have to call the original function yourself,\n-- however you cannot stop the execution of the function, or modify any of the arguments/return values.\\\\\n-- This type of hook is typically used if you need to know if some function got called, and don't want to modify it.\n-- @paramsig [object], method, [handler], [hookSecure]\n-- @param object The object to hook a method from\n-- @param method If object was specified, the name of the method, or the name of the function to hook.\n-- @param handler The handler for the hook, a funcref or a method name. (Defaults to the name of the hooked function)\n-- @param hookSecure If true, AceHook will allow hooking of secure functions.\n-- @usage\n-- -- create an addon with AceHook embeded\n-- MyAddon = LibStub(\"AceAddon-3.0\"):NewAddon(\"HookDemo\", \"AceHook-3.0\")\n--\n-- function MyAddon:OnEnable()\n--   -- Hook ActionButton_UpdateHotkeys, overwriting the secure status\n--   self:Hook(\"ActionButton_UpdateHotkeys\", true)\n-- end\n--\n-- function MyAddon:ActionButton_UpdateHotkeys(button, type)\n--   print(button:GetName() .. \" is updating its HotKey\")\n-- end\nfunction AceHook:Hook(object, method, handler, hookSecure)\n\tif type(object) == \"string\" then\n\t\tmethod, handler, hookSecure, object = object, method, handler, nil\n\tend\n\n\tif handler == true then\n\t\thandler, hookSecure = nil, true\n\tend\n\n\thook(self, object, method, handler, false, false, false, hookSecure or false, \"Usage: Hook([object], method, [handler], [hookSecure])\")\nend\n\n--- RawHook a function or a method on an object.\n-- The hook created will be a \"raw hook\", that means that your handler will completly replace\n-- the original function, and your handler has to call the original function (or not, depending on your intentions).\\\\\n-- The original function will be stored in `self.hooks[object][method]` or `self.hooks[functionName]` respectively.\\\\\n-- This type of hook can be used for all purposes, and is usually the most common case when you need to modify arguments\n-- or want to control execution of the original function.\n-- @paramsig [object], method, [handler], [hookSecure]\n-- @param object The object to hook a method from\n-- @param method If object was specified, the name of the method, or the name of the function to hook.\n-- @param handler The handler for the hook, a funcref or a method name. (Defaults to the name of the hooked function)\n-- @param hookSecure If true, AceHook will allow hooking of secure functions.\n-- @usage\n-- -- create an addon with AceHook embeded\n-- MyAddon = LibStub(\"AceAddon-3.0\"):NewAddon(\"HookDemo\", \"AceHook-3.0\")\n--\n-- function MyAddon:OnEnable()\n--   -- Hook ActionButton_UpdateHotkeys, overwriting the secure status\n--   self:RawHook(\"ActionButton_UpdateHotkeys\", true)\n-- end\n--\n-- function MyAddon:ActionButton_UpdateHotkeys(button, type)\n--   if button:GetName() == \"MyButton\" then\n--     -- do stuff here\n--   else\n--     self.hooks.ActionButton_UpdateHotkeys(button, type)\n--   end\n-- end\nfunction AceHook:RawHook(object, method, handler, hookSecure)\n\tif type(object) == \"string\" then\n\t\tmethod, handler, hookSecure, object = object, method, handler, nil\n\tend\n\n\tif handler == true then\n\t\thandler, hookSecure = nil, true\n\tend\n\n\thook(self, object, method, handler, false, false, true, hookSecure or false,  \"Usage: RawHook([object], method, [handler], [hookSecure])\")\nend\n\n--- SecureHook a function or a method on an object.\n-- This function is a wrapper around the `hooksecurefunc` function in the WoW API. Using AceHook\n-- extends the functionality of secure hooks, and adds the ability to unhook once the hook isn't\n-- required anymore, or the addon is being disabled.\\\\\n-- Secure Hooks should be used if the secure-status of the function is vital to its function,\n-- and taint would block execution. Secure Hooks are always called after the original function was called\n-- (\"Post Hook\"), and you cannot modify the arguments, return values or control the execution.\n-- @paramsig [object], method, [handler]\n-- @param object The object to hook a method from\n-- @param method If object was specified, the name of the method, or the name of the function to hook.\n-- @param handler The handler for the hook, a funcref or a method name. (Defaults to the name of the hooked function)\nfunction AceHook:SecureHook(object, method, handler)\n\tif type(object) == \"string\" then\n\t\tmethod, handler, object = object, method, nil\n\tend\n\n\thook(self, object, method, handler, false, true, false, false,  \"Usage: SecureHook([object], method, [handler])\")\nend\n\n--- Hook a script handler on a frame.\n-- The hook created will be a \"safe hook\", that means that your handler will be called\n-- before the hooked script (\"Pre-Hook\"), and you don't have to call the original function yourself,\n-- however you cannot stop the execution of the function, or modify any of the arguments/return values.\\\\\n-- This is the frame script equivalent of the :Hook safe-hook. It would typically be used to be notified\n-- when a certain event happens to a frame.\n-- @paramsig frame, script, [handler]\n-- @param frame The Frame to hook the script on\n-- @param script The script to hook\n-- @param handler The handler for the hook, a funcref or a method name. (Defaults to the name of the hooked script)\n-- @usage\n-- -- create an addon with AceHook embeded\n-- MyAddon = LibStub(\"AceAddon-3.0\"):NewAddon(\"HookDemo\", \"AceHook-3.0\")\n--\n-- function MyAddon:OnEnable()\n--   -- Hook the OnShow of FriendsFrame\n--   self:HookScript(FriendsFrame, \"OnShow\", \"FriendsFrameOnShow\")\n-- end\n--\n-- function MyAddon:FriendsFrameOnShow(frame)\n--   print(\"The FriendsFrame was shown!\")\n-- end\nfunction AceHook:HookScript(frame, script, handler)\n\thook(self, frame, script, handler, true, false, false, false,  \"Usage: HookScript(object, method, [handler])\")\nend\n\n--- RawHook a script handler on a frame.\n-- The hook created will be a \"raw hook\", that means that your handler will completly replace\n-- the original script, and your handler has to call the original script (or not, depending on your intentions).\\\\\n-- The original script will be stored in `self.hooks[frame][script]`.\\\\\n-- This type of hook can be used for all purposes, and is usually the most common case when you need to modify arguments\n-- or want to control execution of the original script.\n-- @paramsig frame, script, [handler]\n-- @param frame The Frame to hook the script on\n-- @param script The script to hook\n-- @param handler The handler for the hook, a funcref or a method name. (Defaults to the name of the hooked script)\n-- @usage\n-- -- create an addon with AceHook embeded\n-- MyAddon = LibStub(\"AceAddon-3.0\"):NewAddon(\"HookDemo\", \"AceHook-3.0\")\n--\n-- function MyAddon:OnEnable()\n--   -- Hook the OnShow of FriendsFrame\n--   self:RawHookScript(FriendsFrame, \"OnShow\", \"FriendsFrameOnShow\")\n-- end\n--\n-- function MyAddon:FriendsFrameOnShow(frame)\n--   -- Call the original function\n--   self.hooks[frame].OnShow(frame)\n--   -- Do our processing\n--   -- .. stuff\n-- end\nfunction AceHook:RawHookScript(frame, script, handler)\n\thook(self, frame, script, handler, true, false, true, false, \"Usage: RawHookScript(object, method, [handler])\")\nend\n\n--- SecureHook a script handler on a frame.\n-- This function is a wrapper around the `frame:HookScript` function in the WoW API. Using AceHook\n-- extends the functionality of secure hooks, and adds the ability to unhook once the hook isn't\n-- required anymore, or the addon is being disabled.\\\\\n-- Secure Hooks should be used if the secure-status of the function is vital to its function,\n-- and taint would block execution. Secure Hooks are always called after the original function was called\n-- (\"Post Hook\"), and you cannot modify the arguments, return values or control the execution.\n-- @paramsig frame, script, [handler]\n-- @param frame The Frame to hook the script on\n-- @param script The script to hook\n-- @param handler The handler for the hook, a funcref or a method name. (Defaults to the name of the hooked script)\nfunction AceHook:SecureHookScript(frame, script, handler)\n\thook(self, frame, script, handler, true, true, false, false, \"Usage: SecureHookScript(object, method, [handler])\")\nend\n\n--- Unhook from the specified function, method or script.\n-- @paramsig [obj], method\n-- @param obj The object or frame to unhook from\n-- @param method The name of the method, function or script to unhook from.\nfunction AceHook:Unhook(obj, method)\n\tlocal usage = \"Usage: Unhook([obj], method)\"\n\tif type(obj) == \"string\" then\n\t\tmethod, obj = obj, nil\n\tend\n\n\tif obj and type(obj) ~= \"table\" then\n\t\terror(format(\"%s: 'obj' - expecting nil or table got %s\", usage, type(obj)), 2)\n\tend\n\tif type(method) ~= \"string\" then\n\t\terror(format(\"%s: 'method' - expeting string got %s\", usage, type(method)), 2)\n\tend\n\n\tlocal uid\n\tif obj then\n\t\tuid = registry[self][obj] and registry[self][obj][method]\n\telse\n\t\tuid = registry[self][method]\n\tend\n\n\tif not uid or not actives[uid] then\n\t\t-- Declining to error on an unneeded unhook since the end effect is the same and this would just be annoying.\n\t\treturn false\n\tend\n\n\tactives[uid], handlers[uid] = nil, nil\n\n\tif obj then\n\t\tregistry[self][obj][method] = nil\n\t\tregistry[self][obj] = next(registry[self][obj]) and registry[self][obj] or nil\n\n\t\t-- if the hook reference doesnt exist, then its a secure hook, just bail out and dont do any unhooking\n\t\tif not self.hooks[obj] or not self.hooks[obj][method] then return true end\n\n\t\tif scripts[uid] and obj:GetScript(method) == uid then  -- unhooks scripts\n\t\t\tobj:SetScript(method, self.hooks[obj][method] ~= donothing and self.hooks[obj][method] or nil)\n\t\t\tscripts[uid] = nil\n\t\telseif obj and self.hooks[obj] and self.hooks[obj][method] and obj[method] == uid then -- unhooks methods\n\t\t\tobj[method] = self.hooks[obj][method]\n\t\tend\n\n\t\tself.hooks[obj][method] = nil\n\t\tself.hooks[obj] = next(self.hooks[obj]) and self.hooks[obj] or nil\n\telse\n\t\tregistry[self][method] = nil\n\n\t\t-- if self.hooks[method] doesn't exist, then this is a SecureHook, just bail out\n\t\tif not self.hooks[method] then return true end\n\n\t\tif self.hooks[method] and _G[method] == uid then -- unhooks functions\n\t\t\t_G[method] = self.hooks[method]\n\t\tend\n\n\t\tself.hooks[method] = nil\n\tend\n\treturn true\nend\n\n--- Unhook all existing hooks for this addon.\nfunction AceHook:UnhookAll()\n\tfor key, value in pairs(registry[self]) do\n\t\tif type(key) == \"table\" then\n\t\t\tfor method in pairs(value) do\n\t\t\t\tself:Unhook(key, method)\n\t\t\tend\n\t\telse\n\t\t\tself:Unhook(key)\n\t\tend\n\tend\nend\n\n--- Check if the specific function, method or script is already hooked.\n-- @paramsig [obj], method\n-- @param obj The object or frame to unhook from\n-- @param method The name of the method, function or script to unhook from.\nfunction AceHook:IsHooked(obj, method)\n\t-- we don't check if registry[self] exists, this is done by evil magicks in the metatable\n\tif type(obj) == \"string\" then\n\t\tif registry[self][obj] and actives[registry[self][obj]] then\n\t\t\treturn true, handlers[registry[self][obj]]\n\t\tend\n\telse\n\t\tif registry[self][obj] and registry[self][obj][method] and actives[registry[self][obj][method]] then\n\t\t\treturn true, handlers[registry[self][obj][method]]\n\t\tend\n\tend\n\n\treturn false, nil\nend\n\n--- Upgrade our old embeded\nfor target, v in pairs( AceHook.embeded ) do\n\tAceHook:Embed( target )\nend\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceLocale-3.0/AceLocale-3.0.lua",
    "content": "--- **AceLocale-3.0** manages localization in addons, allowing for multiple locale to be registered with fallback to the base locale for untranslated strings.\n-- @class file\n-- @name AceLocale-3.0\n-- @release $Id$\nlocal MAJOR,MINOR = \"AceLocale-3.0-ElvUI\", 6\n\nlocal AceLocale, oldminor = LibStub:NewLibrary(MAJOR, MINOR)\n\nif not AceLocale then return end -- no upgrade needed\n\n-- Lua APIs\nlocal assert, tostring, error = assert, tostring, error\nlocal getmetatable, setmetatable, rawset, rawget = getmetatable, setmetatable, rawset, rawget\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: GAME_LOCALE, geterrorhandler\n\nlocal gameLocale = GetLocale()\nif gameLocale == \"enGB\" then\n\tgameLocale = \"enUS\"\nend\n\nAceLocale.apps = AceLocale.apps or {}          -- array of [\"AppName\"]=localetableref\nAceLocale.appnames = AceLocale.appnames or {}  -- array of [localetableref]=\"AppName\"\n\n-- This metatable is used on all tables returned from GetLocale\nlocal readmeta = {\n\t__index = function(self, key) -- requesting totally unknown entries: fire off a nonbreaking error and return key\n\t\trawset(self, key, key)      -- only need to see the warning once, really\n\t\tgeterrorhandler()(MAJOR..\": \"..tostring(AceLocale.appnames[self])..\": Missing entry for '\"..tostring(key)..\"'\")\n\t\treturn key\n\tend\n}\n\n-- This metatable is used on all tables returned from GetLocale if the silent flag is true, it does not issue a warning on unknown keys\nlocal readmetasilent = {\n\t__index = function(self, key) -- requesting totally unknown entries: return key\n\t\trawset(self, key, key)      -- only need to invoke this function once\n\t\treturn key\n\tend\n}\n\n-- Remember the locale table being registered right now (it gets set by :NewLocale())\n-- NOTE: Do never try to register 2 locale tables at once and mix their definition.\nlocal registering\n\n-- local assert false function\nlocal assertfalse = function() assert(false) end\n\n-- This metatable proxy is used when registering nondefault locales\nlocal writeproxy = setmetatable({}, {\n\t__newindex = function(self, key, value)\n\t\trawset(registering, key, value == true and key or value) -- assigning values: replace 'true' with key string\n\tend,\n\t__index = assertfalse\n})\n\n-- This metatable proxy is used when registering the default locale.\n-- It refuses to overwrite existing values\n-- Reason 1: Allows loading locales in any order\n-- Reason 2: If 2 modules have the same string, but only the first one to be\n--           loaded has a translation for the current locale, the translation\n--           doesn't get overwritten.\n--\nlocal writedefaultproxy = setmetatable({}, {\n\t__newindex = function(self, key, value)\n\t\tif not rawget(registering, key) then\n\t\t\trawset(registering, key, value == true and key or value)\n\t\tend\n\tend,\n\t__index = assertfalse\n})\n\n--- Register a new locale (or extend an existing one) for the specified application.\n-- :NewLocale will return a table you can fill your locale into, or nil if the locale isn't needed for the players\n-- game locale.\n-- @paramsig application, locale[, isDefault[, silent]]\n-- @param application Unique name of addon / module\n-- @param locale Name of the locale to register, e.g. \"enUS\", \"deDE\", etc.\n-- @param isDefault If this is the default locale being registered (your addon is written in this language, generally enUS)\n-- @param silent If true, the locale will not issue warnings for missing keys. Must be set on the first locale registered. If set to \"raw\", nils will be returned for unknown keys (no metatable used).\n-- @usage\n-- -- enUS.lua\n-- local L = LibStub(\"AceLocale-3.0\"):NewLocale(\"TestLocale\", \"enUS\", true)\n-- L[\"string1\"] = true\n--\n-- -- deDE.lua\n-- local L = LibStub(\"AceLocale-3.0\"):NewLocale(\"TestLocale\", \"deDE\")\n-- if not L then return end\n-- L[\"string1\"] = \"Zeichenkette1\"\n-- @return Locale Table to add localizations to, or nil if the current locale is not required.\nfunction AceLocale:NewLocale(application, locale, isDefault, silent)\n\tlocal app = AceLocale.apps[application]\n\n\tif silent and app and getmetatable(app) ~= readmetasilent then\n\t\tgeterrorhandler()(\"Usage: NewLocale(application, locale[, isDefault[, silent]]): 'silent' must be specified for the first locale registered\")\n\tend\n\n\tif not app then\n\t\tif silent==\"raw\" then\n\t\t\tapp = {}\n\t\telse\n\t\t\tapp = setmetatable({}, silent and readmetasilent or readmeta)\n\t\tend\n\t\tAceLocale.apps[application] = app\n\t\tAceLocale.appnames[app] = application\n\tend\n\n\t-- ElvUI block\n\tif (not app[locale]) or (app[locale] and type(app[locale]) ~= 'table') then\n\t\t--\tapp[locale] = setmetatable({}, silent and readmetasilent or readmeta) -- To find missing keys\n\t\tapp[locale] = setmetatable({}, readmetasilent)\n\tend\n\n\tregistering = app[locale] -- remember globally for writeproxy and writedefaultproxy\n\t-- end block\n\n\tif isDefault then\n\t\treturn writedefaultproxy\n\tend\n\n\treturn writeproxy\nend\n\n--- Returns localizations for the current locale (or default locale if translations are missing).\n-- Errors if nothing is registered (spank developer, not just a missing translation)\n-- @param application Unique name of addon / module\n-- @param silent If true, the locale is optional, silently return nil if it's not found (defaults to false, optional)\n-- @return The locale table for the current language.\n--- Modified by ElvUI to add `locale` as second arg\nfunction AceLocale:GetLocale(application, locale, silent)\n\tif type(locale) == \"boolean\" then\n\t\tsilent = locale\n\t\tlocale = gameLocale\n\tend\n\n\tif not silent and not AceLocale.apps[application] then\n\t\terror(\"Usage: GetLocale(application[,locale[, silent]]): 'application' - No locales registered for '\"..tostring(application)..\"'\", 2)\n\tend\n\n\treturn AceLocale.apps[application][locale] or AceLocale.apps[application][gameLocale] -- Just in case the table doesn't exist it reverts to default\nend\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceSerializer-3.0/AceSerializer-3.0.lua",
    "content": "--- **AceSerializer-3.0** can serialize any variable (except functions or userdata) into a string format,\n-- that can be send over the addon comm channel. AceSerializer was designed to keep all data intact, especially\n-- very large numbers or floating point numbers, and table structures. The only caveat currently is, that multiple\n-- references to the same table will be send individually.\n--\n-- **AceSerializer-3.0** can be embeded into your addon, either explicitly by calling AceSerializer:Embed(MyAddon) or by\n-- specifying it as an embeded library in your AceAddon. All functions will be available on your addon object\n-- and can be accessed directly, without having to explicitly call AceSerializer itself.\\\\\n-- It is recommended to embed AceSerializer, otherwise you'll have to specify a custom `self` on all calls you\n-- make into AceSerializer.\n-- @class file\n-- @name AceSerializer-3.0\n-- @release $Id$\nlocal MAJOR,MINOR = \"AceSerializer-3.0\", 3\nlocal AceSerializer, oldminor = LibStub:NewLibrary(MAJOR, MINOR)\n\nif not AceSerializer then return end\n\n-- Lua APIs\nlocal strbyte, strchar, gsub, gmatch, format = string.byte, string.char, string.gsub, string.gmatch, string.format\nlocal assert, error, pcall = assert, error, pcall\nlocal type, tostring, tonumber = type, tostring, tonumber\nlocal pairs, select, frexp = pairs, select, math.frexp\nlocal tconcat = table.concat\n\n-- quick copies of string representations of wonky numbers\nlocal serNaN = tostring(0/0)\nlocal serInf = tostring(1/0)\nlocal serNegInf = tostring(-1/0)\n\n\n-- Serialization functions\n\nlocal function SerializeStringHelper(ch)\t-- Used by SerializeValue for strings\n\t-- We use \\126 (\"~\") as an escape character for all nonprints plus a few more\n\tlocal n = strbyte(ch)\n\tif n==30 then           -- v3 / ticket 115: catch a nonprint that ends up being \"~^\" when encoded... DOH\n\t\treturn \"\\126\\122\"\n\telseif n<=32 then \t\t\t-- nonprint + space\n\t\treturn \"\\126\"..strchar(n+64)\n\telseif n==94 then\t\t-- value separator\n\t\treturn \"\\126\\125\"\n\telseif n==126 then\t\t-- our own escape character\n\t\treturn \"\\126\\124\"\n\telseif n==127 then\t\t-- nonprint (DEL)\n\t\treturn \"\\126\\123\"\n\telse\n\t\tassert(false)\t-- can't be reached if caller uses a sane regex\n\tend\nend\n\nlocal function SerializeValue(v, res, nres)\n\t-- We use \"^\" as a value separator, followed by one byte for type indicator\n\tlocal t=type(v)\n\n\tif t==\"string\" then\t\t-- ^S = string (escaped to remove nonprints, \"^\"s, etc)\n\t\tres[nres+1] = \"^S\"\n\t\tres[nres+2] = gsub(v,\"[%c \\94\\126\\127]\", SerializeStringHelper)\n\t\tnres=nres+2\n\n\telseif t==\"number\" then\t-- ^N = number (just tostring()ed) or ^F (float components)\n\t\tlocal str = tostring(v)\n\t\tif tonumber(str)==v  or str==serNaN or str==serInf or str==serNegInf then\n\t\t\t-- translates just fine, transmit as-is\n\t\t\tres[nres+1] = \"^N\"\n\t\t\tres[nres+2] = str\n\t\t\tnres=nres+2\n\t\telse\n\t\t\tlocal m,e = frexp(v)\n\t\t\tres[nres+1] = \"^F\"\n\t\t\tres[nres+2] = format(\"%.0f\",m*2^53)\t-- force mantissa to become integer (it's originally 0.5--0.9999)\n\t\t\tres[nres+3] = \"^f\"\n\t\t\tres[nres+4] = tostring(e-53)\t-- adjust exponent to counteract mantissa manipulation\n\t\t\tnres=nres+4\n\t\tend\n\n\telseif t==\"table\" then\t-- ^T...^t = table (list of key,value pairs)\n\t\tnres=nres+1\n\t\tres[nres] = \"^T\"\n\t\tfor k,v in pairs(v) do\n\t\t\tnres = SerializeValue(k, res, nres)\n\t\t\tnres = SerializeValue(v, res, nres)\n\t\tend\n\t\tnres=nres+1\n\t\tres[nres] = \"^t\"\n\n\telseif t==\"boolean\" then\t-- ^B = true, ^b = false\n\t\tnres=nres+1\n\t\tif v then\n\t\t\tres[nres] = \"^B\"\t-- true\n\t\telse\n\t\t\tres[nres] = \"^b\"\t-- false\n\t\tend\n\n\telseif t==\"nil\" then\t\t-- ^Z = nil (zero, \"N\" was taken :P)\n\t\tnres=nres+1\n\t\tres[nres] = \"^Z\"\n\n\telse\n\t\terror(MAJOR..\": Cannot serialize a value of type '\"..t..\"'\")\t-- can't produce error on right level, this is wildly recursive\n\tend\n\n\treturn nres\nend\n\n\n\nlocal serializeTbl = { \"^1\" }\t-- \"^1\" = Hi, I'm data serialized by AceSerializer protocol rev 1\n\n--- Serialize the data passed into the function.\n-- Takes a list of values (strings, numbers, booleans, nils, tables)\n-- and returns it in serialized form (a string).\\\\\n-- May throw errors on invalid data types.\n-- @param ... List of values to serialize\n-- @return The data in its serialized form (string)\nfunction AceSerializer:Serialize(...)\n\tlocal nres = 1\n\n\tfor i=1,select(\"#\", ...) do\n\t\tlocal v = select(i, ...)\n\t\tnres = SerializeValue(v, serializeTbl, nres)\n\tend\n\n\tserializeTbl[nres+1] = \"^^\"\t-- \"^^\" = End of serialized data\n\n\treturn tconcat(serializeTbl, \"\", 1, nres+1)\nend\n\n-- Deserialization functions\nlocal function DeserializeStringHelper(escape)\n\tif escape<\"~\\122\" then\n\t\treturn strchar(strbyte(escape,2,2)-64)\n\telseif escape==\"~\\122\" then\t-- v3 / ticket 115: special case encode since 30+64=94 (\"^\") - OOPS.\n\t\treturn \"\\030\"\n\telseif escape==\"~\\123\" then\n\t\treturn \"\\127\"\n\telseif escape==\"~\\124\" then\n\t\treturn \"\\126\"\n\telseif escape==\"~\\125\" then\n\t\treturn \"\\94\"\n\tend\n\terror(\"DeserializeStringHelper got called for '\"..escape..\"'?!?\")  -- can't be reached unless regex is screwed up\nend\n\nlocal function DeserializeNumberHelper(number)\n\tif number == serNaN then\n\t\treturn 0/0\n\telseif number == serNegInf then\n\t\treturn -1/0\n\telseif number == serInf then\n\t\treturn 1/0\n\telse\n\t\treturn tonumber(number)\n\tend\nend\n\n-- DeserializeValue: worker function for :Deserialize()\n-- It works in two modes:\n--   Main (top-level) mode: Deserialize a list of values and return them all\n--   Recursive (table) mode: Deserialize only a single value (_may_ of course be another table with lots of subvalues in it)\n--\n-- The function _always_ works recursively due to having to build a list of values to return\n--\n-- Callers are expected to pcall(DeserializeValue) to trap errors\n\nlocal function DeserializeValue(iter,single,ctl,data)\n\n\tif not single then\n\t\tctl,data = iter()\n\tend\n\n\tif not ctl then\n\t\terror(\"Supplied data misses AceSerializer terminator ('^^')\")\n\tend\n\n\tif ctl==\"^^\" then\n\t\t-- ignore extraneous data\n\t\treturn\n\tend\n\n\tlocal res\n\n\tif ctl==\"^S\" then\n\t\tres = gsub(data, \"~.\", DeserializeStringHelper)\n\telseif ctl==\"^N\" then\n\t\tres = DeserializeNumberHelper(data)\n\t\tif not res then\n\t\t\terror(\"Invalid serialized number: '\"..tostring(data)..\"'\")\n\t\tend\n\telseif ctl==\"^F\" then     -- ^F<mantissa>^f<exponent>\n\t\tlocal ctl2,e = iter()\n\t\tif ctl2~=\"^f\" then\n\t\t\terror(\"Invalid serialized floating-point number, expected '^f', not '\"..tostring(ctl2)..\"'\")\n\t\tend\n\t\tlocal m=tonumber(data)\n\t\te=tonumber(e)\n\t\tif not (m and e) then\n\t\t\terror(\"Invalid serialized floating-point number, expected mantissa and exponent, got '\"..tostring(m)..\"' and '\"..tostring(e)..\"'\")\n\t\tend\n\t\tres = m*(2^e)\n\telseif ctl==\"^B\" then\t-- yeah yeah ignore data portion\n\t\tres = true\n\telseif ctl==\"^b\" then   -- yeah yeah ignore data portion\n\t\tres = false\n\telseif ctl==\"^Z\" then\t-- yeah yeah ignore data portion\n\t\tres = nil\n\telseif ctl==\"^T\" then\n\t\t-- ignore ^T's data, future extensibility?\n\t\tres = {}\n\t\tlocal k,v\n\t\twhile true do\n\t\t\tctl,data = iter()\n\t\t\tif ctl==\"^t\" then break end\t-- ignore ^t's data\n\t\t\tk = DeserializeValue(iter,true,ctl,data)\n\t\t\tif k==nil then\n\t\t\t\terror(\"Invalid AceSerializer table format (no table end marker)\")\n\t\t\tend\n\t\t\tctl,data = iter()\n\t\t\tv = DeserializeValue(iter,true,ctl,data)\n\t\t\tif v==nil then\n\t\t\t\terror(\"Invalid AceSerializer table format (no table end marker)\")\n\t\t\tend\n\t\t\tres[k]=v\n\t\tend\n\telse\n\t\terror(\"Invalid AceSerializer control code '\"..ctl..\"'\")\n\tend\n\n\tif not single then\n\t\treturn res,DeserializeValue(iter)\n\telse\n\t\treturn res\n\tend\nend\n\n--- Deserializes the data into its original values.\n-- Accepts serialized data, ignoring all control characters and whitespace.\n-- @param str The serialized data (from :Serialize)\n-- @return true followed by a list of values, OR false followed by an error message\nfunction AceSerializer:Deserialize(str)\n\tstr = gsub(str, \"[%c ]\", \"\")\t-- ignore all control characters; nice for embedding in email and stuff\n\n\tlocal iter = gmatch(str, \"(^.)([^^]*)\")\t-- Any ^x followed by string of non-^\n\tlocal ctl,data = iter()\n\tif not ctl or ctl~=\"^1\" then\n\t\t-- we purposefully ignore the data portion of the start code, it can be used as an extension mechanism\n\t\treturn false, \"Supplied data is not AceSerializer data (rev 1)\"\n\tend\n\n\treturn pcall(DeserializeValue, iter)\nend\n\n\n----------------------------------------\n-- Base library stuff\n----------------------------------------\n\nAceSerializer.internals = {\t-- for test scripts\n\tSerializeValue = SerializeValue,\n\tSerializeStringHelper = SerializeStringHelper,\n}\n\nlocal mixins = {\n\t\"Serialize\",\n\t\"Deserialize\",\n}\n\nAceSerializer.embeds = AceSerializer.embeds or {}\n\nfunction AceSerializer:Embed(target)\n\tfor k, v in pairs(mixins) do\n\t\ttarget[v] = self[v]\n\tend\n\tself.embeds[target] = true\n\treturn target\nend\n\n-- Update embeds\nfor target, v in pairs(AceSerializer.embeds) do\n\tAceSerializer:Embed(target)\nend\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/AceTimer-3.0/AceTimer-3.0.lua",
    "content": "--- **AceTimer-3.0** provides a central facility for registering timers.\n-- AceTimer supports one-shot timers and repeating timers. All timers are stored in an efficient\n-- data structure that allows easy dispatching and fast rescheduling. Timers can be registered\n-- or canceled at any time, even from within a running timer, without conflict or large overhead.\\\\\n-- AceTimer is currently limited to firing timers at a frequency of 0.01s.\n--\n-- All `:Schedule` functions will return a handle to the current timer, which you will need to store if you\n-- need to cancel the timer you just registered.\n--\n-- **AceTimer-3.0** can be embeded into your addon, either explicitly by calling AceTimer:Embed(MyAddon) or by\n-- specifying it as an embeded library in your AceAddon. All functions will be available on your addon object\n-- and can be accessed directly, without having to explicitly call AceTimer itself.\\\\\n-- It is recommended to embed AceTimer, otherwise you'll have to specify a custom `self` on all calls you\n-- make into AceTimer.\n-- @class file\n-- @name AceTimer-3.0\n-- @release $Id$\n\nlocal MAJOR, MINOR = \"AceTimer-3.0\", 1017 -- Bump minor on changes\nlocal AceTimer, oldminor = LibStub:NewLibrary(MAJOR, MINOR)\n\nif not AceTimer then return end -- No upgrade needed\nAceTimer.frame = AceTimer.frame or CreateFrame(\"Frame\", \"AceTimer30Frame\")\nAceTimer.activeTimers = AceTimer.activeTimers or {} -- Active timer list\nlocal activeTimers = AceTimer.activeTimers -- Upvalue our private data\n\n-- Lua APIs\nlocal assert, loadstring, rawset, tconcat = assert, loadstring, rawset, table.concat\nlocal type, unpack, next, error, select = type, unpack, next, error, select\n-- WoW APIs\nlocal GetTime = GetTime\n\n--[[\n\t xpcall safecall implementation\n]]\nlocal xpcall = xpcall\n\nlocal function errorhandler(err)\n\treturn geterrorhandler()(err)\nend\n\nlocal function CreateDispatcher(argCount)\n\tlocal code = [[\n\t\tlocal xpcall, eh = ...\n\t\tlocal method, ARGS\n\t\tlocal function call() return method(ARGS) end\n\n\t\tlocal function dispatch(func, ...)\n\t\t\tmethod = func\n\t\t\tif not method then return end\n\t\t\tARGS = ...\n\t\t\treturn xpcall(call, eh)\n\t\tend\n\n\t\treturn dispatch\n\t]]\n\n\tlocal ARGS = {}\n\tfor i = 1, argCount do ARGS[i] = \"arg\"..i end\n\tcode = code:gsub(\"ARGS\", tconcat(ARGS, \", \"))\n\treturn assert(loadstring(code, \"safecall Dispatcher[\"..argCount..\"]\"))(xpcall, errorhandler)\nend\n\nlocal Dispatchers = setmetatable({}, {__index=function(self, argCount)\n\tlocal dispatcher = CreateDispatcher(argCount)\n\trawset(self, argCount, dispatcher)\n\treturn dispatcher\nend})\nDispatchers[0] = function(func)\n\treturn xpcall(func, errorhandler)\nend\n\nlocal function safecall(func, ...)\n\treturn Dispatchers[select(\"#\", ...)](func, ...)\nend\n\nlocal function new(self, loop, func, delay, ...)\n\tif delay < 0.01 then\n\t\tdelay = 0.01 -- Restrict to the lowest time\n\tend\n\n\tlocal timer = {\n\t\tobject = self,\n\t\tfunc = func,\n\t\tlooping = loop,\n\t\targsCount = select(\"#\", ...),\n\t\tdelay = delay,\n\t\ttimeleft = delay,\n\t\tends = GetTime() + delay,\n\t\t...\n\t}\n\n\tactiveTimers[timer] = timer\n\n\treturn timer\nend\n\n--- Schedule a new one-shot timer.\n-- The timer will fire once in `delay` seconds, unless canceled before.\n-- @param callback Callback function for the timer pulse (funcref or method name).\n-- @param delay Delay for the timer, in seconds.\n-- @param ... An optional, unlimited amount of arguments to pass to the callback function.\n-- @usage\n-- MyAddOn = LibStub(\"AceAddon-3.0\"):NewAddon(\"MyAddOn\", \"AceTimer-3.0\")\n--\n-- function MyAddOn:OnEnable()\n--   self:ScheduleTimer(\"TimerFeedback\", 5)\n-- end\n--\n-- function MyAddOn:TimerFeedback()\n--   print(\"5 seconds passed\")\n-- end\nfunction AceTimer:ScheduleTimer(func, delay, ...)\n\tif not func or not delay then\n\t\terror(MAJOR..\": ScheduleTimer(callback, delay, args...): 'callback' and 'delay' must have set values.\", 2)\n\tend\n\tif type(func) == \"string\" then\n\t\tif type(self) ~= \"table\" then\n\t\t\terror(MAJOR..\": ScheduleTimer(callback, delay, args...): 'self' - must be a table.\", 2)\n\t\telseif not self[func] then\n\t\t\terror(MAJOR..\": ScheduleTimer(callback, delay, args...): Tried to register '\"..func..\"' as the callback, but it doesn't exist in the module.\", 2)\n\t\tend\n\tend\n\treturn new(self, nil, func, delay, ...)\nend\n\n--- Schedule a repeating timer.\n-- The timer will fire every `delay` seconds, until canceled.\n-- @param callback Callback function for the timer pulse (funcref or method name).\n-- @param delay Delay for the timer, in seconds.\n-- @param ... An optional, unlimited amount of arguments to pass to the callback function.\n-- @usage\n-- MyAddOn = LibStub(\"AceAddon-3.0\"):NewAddon(\"MyAddOn\", \"AceTimer-3.0\")\n--\n-- function MyAddOn:OnEnable()\n--   self.timerCount = 0\n--   self.testTimer = self:ScheduleRepeatingTimer(\"TimerFeedback\", 5)\n-- end\n--\n-- function MyAddOn:TimerFeedback()\n--   self.timerCount = self.timerCount + 1\n--   print((\"%d seconds passed\"):format(5 * self.timerCount))\n--   -- run 30 seconds in total\n--   if self.timerCount == 6 then\n--     self:CancelTimer(self.testTimer)\n--   end\n-- end\nfunction AceTimer:ScheduleRepeatingTimer(func, delay, ...)\n\tif not func or not delay then\n\t\terror(MAJOR..\": ScheduleRepeatingTimer(callback, delay, args...): 'callback' and 'delay' must have set values.\", 2)\n\tend\n\tif type(func) == \"string\" then\n\t\tif type(self) ~= \"table\" then\n\t\t\terror(MAJOR..\": ScheduleRepeatingTimer(callback, delay, args...): 'self' - must be a table.\", 2)\n\t\telseif not self[func] then\n\t\t\terror(MAJOR..\": ScheduleRepeatingTimer(callback, delay, args...): Tried to register '\"..func..\"' as the callback, but it doesn't exist in the module.\", 2)\n\t\tend\n\tend\n\treturn new(self, true, func, delay, ...)\nend\n\n--- Cancels a timer with the given id, registered by the same addon object as used for `:ScheduleTimer`\n-- Both one-shot and repeating timers can be canceled with this function, as long as the `id` is valid\n-- and the timer has not fired yet or was canceled before.\n-- @param id The id of the timer, as returned by `:ScheduleTimer` or `:ScheduleRepeatingTimer`\nfunction AceTimer:CancelTimer(id)\n\tlocal timer = activeTimers[id]\n\n\tif not timer then\n\t\treturn false\n\telse\n\t\ttimer.cancelled = true\n\t\tactiveTimers[id] = nil\n\t\treturn true\n\tend\nend\n\n--- Cancels all timers registered to the current addon object ('self')\nfunction AceTimer:CancelAllTimers()\n\tfor k,v in next, activeTimers do\n\t\tif v.object == self then\n\t\t\tAceTimer.CancelTimer(self, k)\n\t\tend\n\tend\nend\n\n--- Returns the time left for a timer with the given id, registered by the current addon object ('self').\n-- This function will return 0 when the id is invalid.\n-- @param id The id of the timer, as returned by `:ScheduleTimer` or `:ScheduleRepeatingTimer`\n-- @return The time left on the timer.\nfunction AceTimer:TimeLeft(id)\n\tlocal timer = activeTimers[id]\n\tif not timer then\n\t\treturn\n\telse\n\t\treturn timer.ends - GetTime()\n\tend\nend\n\n\n-- ---------------------------------------------------------------------\n-- Upgrading\n\n-- Upgrade from old hash-bucket based timers to C_Timer.After timers.\nif oldminor and oldminor < 10 then\n\t-- disable old timer logic\n\tAceTimer.frame:SetScript(\"OnUpdate\", nil)\n\tAceTimer.frame:SetScript(\"OnEvent\", nil)\n\tAceTimer.frame:UnregisterAllEvents()\n\t-- convert timers\n\tfor object,timers in next, AceTimer.selfs do\n\t\tfor handle,timer in next, timers do\n\t\t\tif type(timer) == \"table\" and timer.callback then\n\t\t\t\tlocal newTimer\n\t\t\t\tif timer.delay then\n\t\t\t\t\tnewTimer = AceTimer.ScheduleRepeatingTimer(timer.object, timer.callback, timer.delay, timer.arg)\n\t\t\t\telse\n\t\t\t\t\tnewTimer = AceTimer.ScheduleTimer(timer.object, timer.callback, timer.when - GetTime(), timer.arg)\n\t\t\t\tend\n\t\t\t\t-- Use the old handle for old timers\n\t\t\t\tactiveTimers[newTimer] = nil\n\t\t\t\tactiveTimers[handle] = newTimer\n\t\t\t\tnewTimer.handle = handle\n\t\t\tend\n\t\tend\n\tend\n\tAceTimer.selfs = nil\n\tAceTimer.hash = nil\n\tAceTimer.debug = nil\nelseif oldminor and oldminor < 17 then\n\t-- Upgrade from old animation based timers to C_Timer.After timers.\n\tAceTimer.inactiveTimers = nil\n\tlocal oldTimers = AceTimer.activeTimers\n\t-- Clear old timer table and update upvalue\n\tAceTimer.activeTimers = {}\n\tactiveTimers = AceTimer.activeTimers\n\tfor handle, timer in next, oldTimers do\n\t\tlocal newTimer\n\t\t-- Stop the old timer animation\n\t\tlocal duration, elapsed = timer:GetDuration(), timer:GetElapsed()\n\t\ttimer:GetParent():Stop()\n\t\tif timer.looping then\n\t\t\tnewTimer = AceTimer.ScheduleRepeatingTimer(timer.object, timer.func, duration, unpack(timer.args, 1, timer.argsCount))\n\t\telse\n\t\t\tnewTimer = AceTimer.ScheduleTimer(timer.object, timer.func, duration - elapsed, unpack(timer.args, 1, timer.argsCount))\n\t\tend\n\t\t-- Use the old handle for old timers\n\t\tactiveTimers[newTimer] = nil\n\t\tactiveTimers[handle] = newTimer\n\t\tnewTimer.handle = handle\n\tend\n\n\t-- Migrate transitional handles\n\tif oldminor < 13 and AceTimer.hashCompatTable then\n\t\tfor handle, id in next, AceTimer.hashCompatTable do\n\t\t\tlocal t = activeTimers[id]\n\t\t\tif t then\n\t\t\t\tactiveTimers[id] = nil\n\t\t\t\tactiveTimers[handle] = t\n\t\t\t\tt.handle = handle\n\t\t\tend\n\t\tend\n\t\tAceTimer.hashCompatTable = nil\n\tend\nend\n\n-- ---------------------------------------------------------------------\n-- Embed handling\n\nAceTimer.embeds = AceTimer.embeds or {}\n\nlocal mixins = {\n\t\"ScheduleTimer\", \"ScheduleRepeatingTimer\",\n\t\"CancelTimer\", \"CancelAllTimers\",\n\t\"TimeLeft\"\n}\n\nfunction AceTimer:Embed(target)\n\tAceTimer.embeds[target] = true\n\tfor _,v in next, mixins do\n\t\ttarget[v] = AceTimer[v]\n\tend\n\treturn target\nend\n\n-- AceTimer:OnEmbedDisable(target)\n-- target (object) - target object that AceTimer is embedded in.\n--\n-- cancel all timers registered for the object\nfunction AceTimer:OnEmbedDisable(target)\n\ttarget:CancelAllTimers()\nend\n\nfor addon in next, AceTimer.embeds do\n\tAceTimer:Embed(addon)\nend\n\nAceTimer.frame:SetScript(\"OnUpdate\", function(self, elapsed)\n\tfor _, timer in next, activeTimers do\n\t\tif not timer.cancelled then\n\t\t\tif timer.timeleft > elapsed then\n\t\t\t\ttimer.timeleft = timer.timeleft - elapsed\n\t\t\telse\n\t\t\t\tif type(timer.func) == \"string\" then\n\t\t\t\t\t-- We manually set the unpack count to prevent issues with an arg set that contains nil and ends with nil\n\t\t\t\t\t-- e.g. local t = {1, 2, nil, 3, nil} print(#t) will result in 2, instead of 5. This fixes said issue.\n\t\t\t\t\tsafecall(timer.object[timer.func], timer.object, unpack(timer, 1, timer.argsCount))\n\t\t\t\telse\n\t\t\t\t\tsafecall(timer.func, unpack(timer, 1, timer.argsCount))\n\t\t\t\tend\n\n\t\t\t\tif timer.looping and not timer.cancelled then\n\t\t\t\t\t-- Compensate delay to get a perfect average delay, even if individual times don't match up perfectly\n\t\t\t\t\t-- due to fps differences\n\t\t\t\t\tlocal time = GetTime()\n\t\t\t\t\tlocal delay = timer.delay - (time - timer.ends)\n\t\t\t\t\t-- Ensure the delay doesn't go below the threshold\n\t\t\t\t\tif delay < 0.01 then delay = 0.01 end\n\t\t\t\t\ttimer.ends = time + delay\n\t\t\t\t\ttimer.timeleft = timer.delay\n\t\t\t\telse\n\t\t\t\t\tactiveTimers[timer.handle or timer] = nil\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend)"
  },
  {
    "path": "DBM-Core/Libs/Ace3/CallbackHandler-1.0/CallbackHandler-1.0.lua",
    "content": "--[[ $Id: CallbackHandler-1.0.lua 18 2014-10-16 02:52:20Z mikk $ ]]\nlocal MAJOR, MINOR = \"CallbackHandler-1.0\", 6\nlocal CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR)\n\nif not CallbackHandler then return end -- No upgrade needed\n\nlocal meta = {__index = function(tbl, key) tbl[key] = {} return tbl[key] end}\n\n-- Lua APIs\nlocal tconcat = table.concat\nlocal assert, error, loadstring = assert, error, loadstring\nlocal setmetatable, rawset, rawget = setmetatable, rawset, rawget\nlocal next, select, pairs, type, tostring = next, select, pairs, type, tostring\n\n-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded\n-- List them here for Mikk's FindGlobals script\n-- GLOBALS: geterrorhandler\n\nlocal xpcall = xpcall\n\nlocal function errorhandler(err)\n\treturn geterrorhandler()(err)\nend\n\nlocal function CreateDispatcher(argCount)\n\tlocal code = [[\n\tlocal next, xpcall, eh = ...\n\n\tlocal method, ARGS\n\tlocal function call() method(ARGS) end\n\n\tlocal function dispatch(handlers, ...)\n\t\tlocal index\n\t\tindex, method = next(handlers)\n\t\tif not method then return end\n\t\tlocal OLD_ARGS = ARGS\n\t\tARGS = ...\n\t\trepeat\n\t\t\txpcall(call, eh)\n\t\t\tindex, method = next(handlers, index)\n\t\tuntil not method\n\t\tARGS = OLD_ARGS\n\tend\n\n\treturn dispatch\n\t]]\n\n\tlocal ARGS, OLD_ARGS = {}, {}\n\tfor i = 1, argCount do ARGS[i], OLD_ARGS[i] = \"arg\"..i, \"old_arg\"..i end\n\tcode = code:gsub(\"OLD_ARGS\", tconcat(OLD_ARGS, \", \")):gsub(\"ARGS\", tconcat(ARGS, \", \"))\n\treturn assert(loadstring(code, \"safecall Dispatcher[\"..argCount..\"]\"))(next, xpcall, errorhandler)\nend\n\nlocal Dispatchers = setmetatable({}, {__index=function(self, argCount)\n\tlocal dispatcher = CreateDispatcher(argCount)\n\trawset(self, argCount, dispatcher)\n\treturn dispatcher\nend})\n\n--------------------------------------------------------------------------\n-- CallbackHandler:New\n--\n--   target            - target object to embed public APIs in\n--   RegisterName      - name of the callback registration API, default \"RegisterCallback\"\n--   UnregisterName    - name of the callback unregistration API, default \"UnregisterCallback\"\n--   UnregisterAllName - name of the API to unregister all callbacks, default \"UnregisterAllCallbacks\". false == don't publish this API.\n\nfunction CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAllName)\n\n\tRegisterName = RegisterName or \"RegisterCallback\"\n\tUnregisterName = UnregisterName or \"UnregisterCallback\"\n\tif UnregisterAllName==nil then\t-- false is used to indicate \"don't want this method\"\n\t\tUnregisterAllName = \"UnregisterAllCallbacks\"\n\tend\n\n\t-- we declare all objects and exported APIs inside this closure to quickly gain access\n\t-- to e.g. function names, the \"target\" parameter, etc\n\n\n\t-- Create the registry object\n\tlocal events = setmetatable({}, meta)\n\tlocal registry = { recurse=0, events=events }\n\n\t-- registry:Fire() - fires the given event/message into the registry\n\tfunction registry:Fire(eventname, ...)\n\t\tif not rawget(events, eventname) or not next(events[eventname]) then return end\n\t\tlocal oldrecurse = registry.recurse\n\t\tregistry.recurse = oldrecurse + 1\n\n\t\tDispatchers[select('#', ...) + 1](events[eventname], eventname, ...)\n\n\t\tregistry.recurse = oldrecurse\n\n\t\tif registry.insertQueue and oldrecurse==0 then\n\t\t\t-- Something in one of our callbacks wanted to register more callbacks; they got queued\n\t\t\tfor eventname,callbacks in pairs(registry.insertQueue) do\n\t\t\t\tlocal first = not rawget(events, eventname) or not next(events[eventname])\t-- test for empty before. not test for one member after. that one member may have been overwritten.\n\t\t\t\tfor self,func in pairs(callbacks) do\n\t\t\t\t\tevents[eventname][self] = func\n\t\t\t\t\t-- fire OnUsed callback?\n\t\t\t\t\tif first and registry.OnUsed then\n\t\t\t\t\t\tregistry.OnUsed(registry, target, eventname)\n\t\t\t\t\t\tfirst = nil\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tregistry.insertQueue = nil\n\t\tend\n\tend\n\n\t-- Registration of a callback, handles:\n\t--   self[\"method\"], leads to self[\"method\"](self, ...)\n\t--   self with function ref, leads to functionref(...)\n\t--   \"addonId\" (instead of self) with function ref, leads to functionref(...)\n\t-- all with an optional arg, which, if present, gets passed as first argument (after self if present)\n\ttarget[RegisterName] = function(self, eventname, method, ... --[[actually just a single arg]])\n\t\tif type(eventname) ~= \"string\" then\n\t\t\terror(\"Usage: \"..RegisterName..\"(eventname, method[, arg]): 'eventname' - string expected.\", 2)\n\t\tend\n\n\t\tmethod = method or eventname\n\n\t\tlocal first = not rawget(events, eventname) or not next(events[eventname])\t-- test for empty before. not test for one member after. that one member may have been overwritten.\n\n\t\tif type(method) ~= \"string\" and type(method) ~= \"function\" then\n\t\t\terror(\"Usage: \"..RegisterName..\"(\\\"eventname\\\", \\\"methodname\\\"): 'methodname' - string or function expected.\", 2)\n\t\tend\n\n\t\tlocal regfunc\n\n\t\tif type(method) == \"string\" then\n\t\t\t-- self[\"method\"] calling style\n\t\t\tif type(self) ~= \"table\" then\n\t\t\t\terror(\"Usage: \"..RegisterName..\"(\\\"eventname\\\", \\\"methodname\\\"): self was not a table?\", 2)\n\t\t\telseif self==target then\n\t\t\t\terror(\"Usage: \"..RegisterName..\"(\\\"eventname\\\", \\\"methodname\\\"): do not use Library:\"..RegisterName..\"(), use your own 'self'\", 2)\n\t\t\telseif type(self[method]) ~= \"function\" then\n\t\t\t\terror(\"Usage: \"..RegisterName..\"(\\\"eventname\\\", \\\"methodname\\\"): 'methodname' - method '\"..tostring(method)..\"' not found on self.\", 2)\n\t\t\tend\n\n\t\t\tif select(\"#\",...)>=1 then\t-- this is not the same as testing for arg==nil!\n\t\t\t\tlocal arg=select(1,...)\n\t\t\t\tregfunc = function(...) self[method](self,arg,...) end\n\t\t\telse\n\t\t\t\tregfunc = function(...) self[method](self,...) end\n\t\t\tend\n\t\telse\n\t\t\t-- function ref with self=object or self=\"addonId\" or self=thread\n\t\t\tif type(self)~=\"table\" and type(self)~=\"string\" and type(self)~=\"thread\" then\n\t\t\t\terror(\"Usage: \"..RegisterName..\"(self or \\\"addonId\\\", eventname, method): 'self or addonId': table or string or thread expected.\", 2)\n\t\t\tend\n\n\t\t\tif select(\"#\",...)>=1 then\t-- this is not the same as testing for arg==nil!\n\t\t\t\tlocal arg=select(1,...)\n\t\t\t\tregfunc = function(...) method(arg,...) end\n\t\t\telse\n\t\t\t\tregfunc = method\n\t\t\tend\n\t\tend\n\n\n\t\tif events[eventname][self] or registry.recurse<1 then\n\t\t-- if registry.recurse<1 then\n\t\t\t-- we're overwriting an existing entry, or not currently recursing. just set it.\n\t\t\tevents[eventname][self] = regfunc\n\t\t\t-- fire OnUsed callback?\n\t\t\tif registry.OnUsed and first then\n\t\t\t\tregistry.OnUsed(registry, target, eventname)\n\t\t\tend\n\t\telse\n\t\t\t-- we're currently processing a callback in this registry, so delay the registration of this new entry!\n\t\t\t-- yes, we're a bit wasteful on garbage, but this is a fringe case, so we're picking low implementation overhead over garbage efficiency\n\t\t\tregistry.insertQueue = registry.insertQueue or setmetatable({},meta)\n\t\t\tregistry.insertQueue[eventname][self] = regfunc\n\t\tend\n\tend\n\n\t-- Unregister a callback\n\ttarget[UnregisterName] = function(self, eventname)\n\t\tif not self or self==target then\n\t\t\terror(\"Usage: \"..UnregisterName..\"(eventname): bad 'self'\", 2)\n\t\tend\n\t\tif type(eventname) ~= \"string\" then\n\t\t\terror(\"Usage: \"..UnregisterName..\"(eventname): 'eventname' - string expected.\", 2)\n\t\tend\n\t\tif rawget(events, eventname) and events[eventname][self] then\n\t\t\tevents[eventname][self] = nil\n\t\t\t-- Fire OnUnused callback?\n\t\t\tif registry.OnUnused and not next(events[eventname]) then\n\t\t\t\tregistry.OnUnused(registry, target, eventname)\n\t\t\tend\n\t\tend\n\t\tif registry.insertQueue and rawget(registry.insertQueue, eventname) and registry.insertQueue[eventname][self] then\n\t\t\tregistry.insertQueue[eventname][self] = nil\n\t\tend\n\tend\n\n\t-- OPTIONAL: Unregister all callbacks for given selfs/addonIds\n\tif UnregisterAllName then\n\t\ttarget[UnregisterAllName] = function(...)\n\t\t\tif select(\"#\",...)<1 then\n\t\t\t\terror(\"Usage: \"..UnregisterAllName..\"([whatFor]): missing 'self' or \\\"addonId\\\" to unregister events for.\", 2)\n\t\t\tend\n\t\t\tif select(\"#\",...)==1 and ...==target then\n\t\t\t\terror(\"Usage: \"..UnregisterAllName..\"([whatFor]): supply a meaningful 'self' or \\\"addonId\\\"\", 2)\n\t\t\tend\n\n\n\t\t\tfor i=1,select(\"#\",...) do\n\t\t\t\tlocal self = select(i,...)\n\t\t\t\tif registry.insertQueue then\n\t\t\t\t\tfor eventname, callbacks in pairs(registry.insertQueue) do\n\t\t\t\t\t\tif callbacks[self] then\n\t\t\t\t\t\t\tcallbacks[self] = nil\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tfor eventname, callbacks in pairs(events) do\n\t\t\t\t\tif callbacks[self] then\n\t\t\t\t\t\tcallbacks[self] = nil\n\t\t\t\t\t\t-- Fire OnUnused callback?\n\t\t\t\t\t\tif registry.OnUnused and not next(callbacks) then\n\t\t\t\t\t\t\tregistry.OnUnused(registry, target, eventname)\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\treturn registry\nend\n\n\n-- CallbackHandler purposefully does NOT do explicit embedding. Nor does it\n-- try to upgrade old implicit embeds since the system is selfcontained and\n-- relies on closures to work.\n\n"
  },
  {
    "path": "DBM-Core/Libs/Ace3/LibStub/LibStub.lua",
    "content": "-- $Id: LibStub.lua 103 2014-10-16 03:02:50Z mikk $\n-- LibStub is a simple versioning stub meant for use in Libraries.  http://www.wowace.com/addons/libstub/ for more info\n-- LibStub is hereby placed in the Public Domain\n-- Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke\nlocal LIBSTUB_MAJOR, LIBSTUB_MINOR = \"LibStub\", 2  -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS!\nlocal LibStub = _G[LIBSTUB_MAJOR]\n\n-- Check to see is this version of the stub is obsolete\nif not LibStub or LibStub.minor < LIBSTUB_MINOR then\n\tLibStub = LibStub or {libs = {}, minors = {} }\n\t_G[LIBSTUB_MAJOR] = LibStub\n\tLibStub.minor = LIBSTUB_MINOR\n\n\t-- LibStub:NewLibrary(major, minor)\n\t-- major (string) - the major version of the library\n\t-- minor (string or number ) - the minor version of the library\n\t--\n\t-- returns nil if a newer or same version of the lib is already present\n\t-- returns empty library object or old library object if upgrade is needed\n\tfunction LibStub:NewLibrary(major, minor)\n\t\tassert(type(major) == \"string\", \"Bad argument #2 to `NewLibrary' (string expected)\")\n\t\tminor = assert(tonumber(strmatch(minor, \"%d+\")), \"Minor version must either be a number or contain a number.\")\n\n\t\tlocal oldminor = self.minors[major]\n\t\tif oldminor and oldminor >= minor then return nil end\n\t\tself.minors[major], self.libs[major] = minor, self.libs[major] or {}\n\t\treturn self.libs[major], oldminor\n\tend\n\n\t-- LibStub:GetLibrary(major, [silent])\n\t-- major (string) - the major version of the library\n\t-- silent (boolean) - if true, library is optional, silently return nil if its not found\n\t--\n\t-- throws an error if the library can not be found (except silent is set)\n\t-- returns the library object if found\n\tfunction LibStub:GetLibrary(major, silent)\n\t\tif not self.libs[major] and not silent then\n\t\t\terror((\"Cannot find a library instance of %q.\"):format(tostring(major)), 2)\n\t\tend\n\t\treturn self.libs[major], self.minors[major]\n\tend\n\n\t-- LibStub:IterateLibraries()\n\t--\n\t-- Returns an iterator for the currently registered libraries\n\tfunction LibStub:IterateLibraries()\n\t\treturn pairs(self.libs)\n\tend\n\n\tsetmetatable(LibStub, { __call = LibStub.GetLibrary })\nend\n"
  },
  {
    "path": "DBM-Core/Libs/LibAnim/LibAnim.lua",
    "content": "-- LibAnim by Hydra\nlocal Version = 2.03\n\n-- Note, deprecated items will be removed next version. Please update your usage accordingly. (ctrl + f - \"Deprecated\")\n\nif (_LibAnim and _LibAnim >= Version) then\n\treturn\nend\n\nlocal pi = math.pi\nlocal cos = math.cos\nlocal sin = math.sin\nlocal sqrt = math.sqrt\nlocal floor = math.floor\nlocal tinsert = table.insert\nlocal tremove = table.remove\nlocal lower = string.lower\nlocal pairs = pairs\nlocal Updater = CreateFrame(\"StatusBar\")\nlocal Texture = Updater:CreateTexture()\nlocal FontString = Updater:CreateFontString()\nlocal Initialize = {}\nlocal Update = {}\nlocal Easing = {}\nlocal Callbacks = {[\"onplay\"] = {}, [\"onpause\"] = {}, [\"onresume\"] = {}, [\"onstop\"] = {}, [\"onreset\"] = {}, [\"onfinished\"] = {}}\n\n-- Update all current animations\nlocal AnimationOnUpdate = function(self, elapsed)\n\tfor i = 1, #self do\n\t\tif self[i] then -- Double check that the index still exists, due to pauses/stops removing them on the fly\n\t\t\tself[i]:Update(elapsed, i)\n\t\tend\n\tend\n\t\n\tif (#self == 0) then\n\t\tself:SetScript(\"OnUpdate\", nil)\n\tend\nend\n\nlocal StartUpdating = function(anim)\n\ttinsert(Updater, anim)\n\t\n\tif (not Updater:GetScript(\"OnUpdate\")) then\n\t\tUpdater:SetScript(\"OnUpdate\", AnimationOnUpdate)\n\tend\nend\n\nlocal GetColor = function(p, r1, g1, b1, r2, g2, b2)\n\treturn r1 + (r2 - r1) * p, g1 + (g2 - g1) * p, b1 + (b2 - b1) * p\nend\n\nlocal Set = {\n\t[\"backdrop\"] = Updater.SetBackdropColor,\n\t[\"border\"] = Updater.SetBackdropBorderColor,\n\t[\"statusbar\"] = Updater.SetStatusBarColor,\n\t[\"text\"] = FontString.SetTextColor,\n\t[\"texture\"] = Texture.SetTexture,\n\t[\"vertex\"] = Texture.SetVertexColor,\n}\n\nlocal Get = {\n\t[\"backdrop\"] = Updater.GetBackdropColor,\n\t[\"border\"] = Updater.GetBackdropBorderColor,\n\t[\"statusbar\"] = Updater.GetStatusBarColor,\n\t[\"text\"] = FontString.GetTextColor,\n\t[\"texture\"] = Texture.GetVertexColor,\n\t[\"vertex\"] = Texture.GetVertexColor,\n}\n\n-- Linear\nlocal Linear = function(t, b, c, d)\n\treturn c * t / d + b\nend\n\n-- Quadratic\nlocal InQuadratic = function(t, b, c, d)\n\tt = t / d\n\t\n\treturn c * (t ^ 2) + b\nend\n\nlocal OutQuadratic = function(t, b, c, d)\n\tt = t / d\n\t\n\treturn -c * t * (t - 2) + b\nend\n\nlocal InOutQuadratic = function(t, b, c, d)\n\tt = t / d * 2\n\t\n\tif (t < 1) then\n\t\treturn c / 2 * (t ^ 2) + b\n\telse\n\t\treturn -c / 2 * ((t - 1) * (t - 3) - 1) + b\n\tend\nend\n\n-- Cubic\nlocal InCubic = function(t, b, c, d)\n\tt = t / d\n\t\n\treturn c * (t ^ 3) + b\nend\n\nlocal OutCubic = function(t, b, c, d)\n\tt = t / d - 1\n\t\n\treturn c * (t ^ 3 + 1) + b\nend\n\nlocal InOutCubic = function(t, b, c, d)\n\tt = t / d * 2\n\t\n\tif (t < 1) then\n\t\treturn c / 2 * (t ^ 3) + b\n\telse\n\t\tt = t - 2\n\t\t\n\t\treturn c / 2 * (t ^ 3 + 2) + b\n\tend\nend\n\n-- Quartic\nlocal InQuartic = function(t, b, c, d)\n\tt = t / d\n\t\n\treturn c * (t ^ 4) + b\nend\n\nlocal OutQuartic = function(t, b, c, d)\n\tt = t / d - 1\n\t\n\treturn -c * (t ^ 4 - 1) + b\nend\n\nlocal InOutQuartic = function(t, b, c, d)\n\tt = t / d * 2\n\t\n\tif (t < 1) then\n\t\treturn c / 2 * t ^ 4 + b\n\telse\n\t\tt = t - 2\n\t\t\n\t\treturn -c / 2 * (t ^ 4 - 2) + b\n\tend\nend\n\n-- Quintic\nlocal InQuintic = function(t, b, c, d)\n\tt = t / d\n\t\n\treturn c * (t ^ 5) + b\nend\n\nlocal OutQuintic = function(t, b, c, d)\n\tt = t / d - 1\n\t\n\treturn c * (t ^ 5 + 1) + b\nend\n\nlocal InOutQuintic = function(t, b, c, d)\n\tt = t / d * 2\n\t\n\tif (t < 1) then\n\t\treturn c / 2 * t ^ 5 + b\n\telse\n\t\tt = t - 2\n\t\t\n\t\treturn c / 2 * (t ^ 5 + 2) + b\n\tend\nend\n\n-- Sinusoidal\nlocal InSinusoidal = function(t, b, c, d)\n\treturn -c * cos(t / d * (pi / 2)) + c + b\nend\n\nlocal OutSinusoidal = function(t, b, c, d)\n\treturn c * sin(t / d * (pi / 2)) + b\nend\n\nlocal InOutSinusoidal = function(t, b, c, d)\n\treturn -c / 2 * (cos(pi * t / d) - 1) + b\nend\n\n-- Exponential\nlocal InExponential = function(t, b, c, d)\n\tif (t == 0) then\n\t\treturn b\n\telse\n\t\treturn c * (2 ^ (10 * (t / d - 1))) + b - c * 0.001\n\tend\nend\n\nlocal OutExponential = function(t, b, c, d)\n\tif (t == d) then\n\t\treturn b + c\n\telse\n\t\treturn c * 1.001 * (-(2 ^ (-10 * t / d)) + 1) + b\n\tend\nend\n\nlocal InOutExponential = function(t, b, c, d)\n\tif (t == 0) then\n\t\treturn b\n\tend\n\t\n\tif (t == d) then\n\t\treturn b + c\n\tend\n\t\n\tt = t / d * 2\n\t\n\tif (t < 1) then\n\t\treturn c / 2 * (2 ^ (10 * (t - 1))) + b - c * 0.0005\n\telse\n\t\tt = t - 1\n\t\t\n\t\treturn c / 2 * 1.0005 * (-(2 ^ (-10 * t)) + 2) + b\n\tend\nend\n\n-- Circular\nlocal InCircular = function(t, b, c, d)\n\tt = t / d\n\t\n\treturn (-c * (sqrt(1 - t * t) - 1) + b)\nend\n\nlocal OutCircular = function(t, b, c, d)\n\tt = t / d - 1\n\t\n\treturn (c * sqrt(1 - t * t) + b)\nend\n\nlocal InOutCircular = function(t, b, c, d)\n\tt = t / d * 2\n\t\n\tif (t < 1) then\n\t\treturn -c / 2 * (sqrt(1 - t * t) - 1) + b\n\telse\n\t\tt = t - 2\n\t\t\n\t\treturn c / 2 * (sqrt(1 - t * t) + 1) + b\n\tend\nend\n\n-- Bounce\nlocal OutBounce = function(t, b, c, d)\n\tt = t / d\n\t\n\tif (t < (1 / 2.75)) then\n\t\treturn c * (7.5625 * t * t) + b\n\telseif (t < (2 / 2.75)) then\n\t\tt = t - (1.5 / 2.75)\n\t\t\n\t\treturn c * (7.5625 * t * t + 0.75) + b\n\telseif (t < (2.5 / 2.75)) then\n\t\tt = t - (2.25 / 2.75)\n\t\t\n\t\treturn c * (7.5625 * t * t + 0.9375) + b\n\telse\n\t\tt = t - (2.625 / 2.75)\n\t\t\n\t\treturn c * (7.5625 * t * t + 0.984375) + b\n\tend\nend\n\nlocal InBounce = function(t, b, c, d)\n\treturn c - OutBounce(d - t, 0, c, d) + b\nend\n\nlocal InOutBounce = function(t, b, c, d)\n\tif (t < d / 2) then\n\t\treturn InBounce(t * 2, 0, c, d) * 0.5 + b\n\telse\n\t\treturn OutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b\n\tend\nend\n\n-- Elastic\nlocal InElastic = function(t, b, c, d)\n\tif (t == 0) then\n\t\treturn b\n\tend\n\t\n\tt = t / d\n\t\n\tif (t == 1) then\n\t\treturn b + c\n\tend\n\t\n\tlocal a = c\n\tlocal p = d * 0.3\n\tlocal s = p / 4\n\t\n\tt = t - 1\n\t\n\treturn -(a * 2 ^ (10 * t) * sin((t * d - s) * (2 * pi) / p)) + b\nend\n\nlocal OutElastic = function(t, b, c, d)\n\tif (t == 0) then\n\t\treturn b\n\tend\n\t\n\tt = t / d\n\t\n\tif (t == 1) then\n\t\treturn b + c\n\tend\n\t\n\tlocal a = c\n\tlocal p = d * 0.3\n\tlocal s = p / 4\n\t\n\treturn a * 2 ^ (-10 * t) * sin((t * d - s) * (2 * pi) / p) + c + b\nend\n\nlocal InOutElastic = function(t, b, c, d)\n\tif (t == 0) then\n\t\treturn b\n\tend\n\t\n\tt = t / d * 2\n\t\n\tif (t == 2) then\n\t\treturn b + c\n\tend\n\t\n\tlocal a = c\n\tlocal p = d * (0.3 * 1.5)\n\tlocal s = p / 4\n\t\n\tif (t < 1) then\n\t\tt = t - 1\n\t\t\n\t\treturn -0.5 * (a * 2 ^ (10 * t) * sin((t * d - s) * (2 * pi) / p)) + b\n\telse\n\t\tt = t - 1\n\t\t\n\t\treturn a * 2 ^ (-10 * t) * sin((t * d - s) * (2 * pi) / p ) * 0.5 + c + b\n\tend\nend\n\nEasing[\"linear\"] = Linear\nEasing[\"in-quadratic\"] = InQuadratic\nEasing[\"out-quadratic\"] = OutQuadratic\nEasing[\"inout-quadratic\"] = InOutQuadratic\nEasing[\"in-cubic\"] = InCubic\nEasing[\"out-cubic\"] = OutCubic\nEasing[\"inout-cubic\"] = InOutCubic\nEasing[\"in-quartic\"] = InQuartic\nEasing[\"out-quartic\"] = OutQuartic\nEasing[\"inout-quartic\"] = InOutQuartic\nEasing[\"in-quintic\"] = InQuintic\nEasing[\"out-quintic\"] = OutQuintic\nEasing[\"inout-quintic\"] = InOutQuintic\nEasing[\"in-sinusoidal\"] = InSinusoidal\nEasing[\"out-sinusoidal\"] = OutSinusoidal\nEasing[\"inout-sinusoidal\"] = InOutSinusoidal\nEasing[\"in-exponential\"] = InExponential\nEasing[\"out-exponential\"] = OutExponential\nEasing[\"inout-exponential\"] = InOutExponential\nEasing[\"in-circular\"] = InCircular\nEasing[\"out-circular\"] = OutCircular\nEasing[\"inout-circular\"] = InOutCircular\nEasing[\"in-bounce\"] = InBounce\nEasing[\"out-bounce\"] = OutBounce\nEasing[\"inout-bounce\"] = InOutBounce\nEasing[\"in-elastic\"] = InElastic\nEasing[\"out-elastic\"] = OutElastic\nEasing[\"inout-elastic\"] = InOutElastic\n\n-- Some fallbacks / lazy options\nEasing[\"in\"] = Easing[\"in-quadratic\"]\nEasing[\"out\"] = Easing[\"out-quadratic\"]\nEasing[\"inout\"] = Easing[\"inout-quadratic\"]\nEasing[\"bounce\"] = Easing[\"out-bounce\"] -- Deprecated, don't use bounce without an explicit motion anymore\n\nlocal AnimMethods = {\n\tAll = {\n\t\tPlay = function(self)\n\t\t\tif (not self.Paused) then\n\t\t\t\tInitialize[self.Type](self)\n\t\t\t\tself:Callback(\"OnPlay\")\n\t\t\telse\n\t\t\t\tStartUpdating(self)\n\t\t\t\tself:Callback(\"OnResume\")\n\t\t\tend\n\t\t\t\n\t\t\tself.Playing = true\n\t\t\tself.Paused = false\n\t\t\tself.Stopped = false\n\t\tend,\n\t\t\n\t\tIsPlaying = function(self)\n\t\t\treturn self.Playing\n\t\tend,\n\t\t\n\t\tPause = function(self)\n\t\t\tfor i = 1, #Updater do\n\t\t\t\tif (Updater[i] == self) then\n\t\t\t\t\ttremove(Updater, i)\n\t\t\t\t\t\n\t\t\t\t\tbreak\n\t\t\t\tend\n\t\t\tend\n\t\t\t\n\t\t\tself.Playing = false\n\t\t\tself.Paused = true\n\t\t\tself.Stopped = false\n\t\t\tself:Callback(\"OnPause\")\n\t\tend,\n\t\t\n\t\tIsPaused = function(self)\n\t\t\treturn self.Paused\n\t\tend,\n\t\t\n\t\tStop = function(self, reset)\n\t\t\tfor i = 1, #Updater do\n\t\t\t\tif (Updater[i] == self) then\n\t\t\t\t\ttremove(Updater, i)\n\t\t\t\t\t\n\t\t\t\t\tbreak\n\t\t\t\tend\n\t\t\tend\n\t\t\t\n\t\t\tself.Playing = false\n\t\t\tself.Paused = false\n\t\t\tself.Stopped = true\n\t\t\tself.Timer = 0\n\t\t\t\n\t\t\tif reset then\n\t\t\t\tself:Reset()\n\t\t\t\tself:Callback(\"OnReset\")\n\t\t\telse\n\t\t\t\tself:Callback(\"OnStop\")\n\t\t\tend\n\t\tend,\n\t\t\n\t\tIsStopped = function(self)\n\t\t\treturn self.Stopped\n\t\tend,\n\t\t\n\t\tSetEasing = function(self, easing)\n\t\t\teasing = lower(easing)\n\t\t\t\n\t\t\tself.Easing = Easing[easing] and easing or \"linear\"\n\t\tend,\n\t\t\n\t\tGetEasing = function(self)\n\t\t\treturn self.Easing\n\t\tend,\n\t\t\n\t\tSetSmoothing = function(self, easing) -- Deprecated, change \"SetSmoothing\" to \"SetEasing\"\n\t\t\teasing = lower(easing)\n\t\t\t\n\t\t\tself.Easing = Easing[easing] and easing or \"linear\"\n\t\tend,\n\t\t\n\t\tGetSmoothing = function(self) -- Deprecated, change \"GetSmoothing\" to \"GetEasing\"\n\t\t\treturn self.Easing\n\t\tend,\n\t\t\n\t\tSetDuration = function(self, duration)\n\t\t\tself.Duration = duration or 0\n\t\tend,\n\t\t\n\t\tGetDuration = function(self)\n\t\t\treturn self.Duration\n\t\tend,\n\t\t\n\t\tGetProgressByTimer = function(self)\n\t\t\treturn self.Timer\n\t\tend,\n\t\t\n\t\tSetOrder = function(self, order)\n\t\t\tself.Order = order or 1\n\t\t\t\n\t\t\tif (order > self.Group.MaxOrder) then\n\t\t\t\tself.Group.MaxOrder = order\n\t\t\tend\n\t\tend,\n\t\t\n\t\tGetOrder = function(self)\n\t\t\treturn self.Order\n\t\tend,\n\t\t\n\t\tGetParent = function(self)\n\t\t\treturn self.Parent\n\t\tend,\n\t\t\n\t\tSetScript = function(self, handler, func)\n\t\t\thandler = lower(handler)\n\t\t\t\n\t\t\tif Callbacks[handler] then\n\t\t\t\tCallbacks[handler][self] = func\n\t\t\tend\n\t\tend,\n\t\t\n\t\tGetScript = function(self, handler)\n\t\t\thandler = lower(handler)\n\t\t\t\n\t\t\tif (Callbacks[handler] and Callbacks[handler][self]) then\n\t\t\t\treturn Callbacks[handler][self]\n\t\t\tend\n\t\tend,\n\t\t\n\t\tCallback = function(self, handler)\n\t\t\thandler = lower(handler)\n\t\t\t\n\t\t\tif Callbacks[handler][self] then\n\t\t\t\tCallbacks[handler][self](self)\n\t\t\tend\n\t\tend,\n\t},\n\t\n\tmove = {\n\t\tSetOffset = function(self, x, y)\n\t\t\tself.XSetting = x or 0\n\t\t\tself.YSetting = y or 0\n\t\tend,\n\t\t\n\t\tGetOffset = function(self)\n\t\t\treturn self.XSetting, self.YSetting\n\t\tend,\n\t\t\n\t\tSetRounded = function(self, flag)\n\t\t\tself.IsRounded = flag\n\t\tend,\n\t\t\n\t\tGetRounded = function(self)\n\t\t\treturn self.IsRounded\n\t\tend,\n\t\t\n\t\tGetProgress = function(self)\n\t\t\treturn self.XOffset, self.YOffset\n\t\tend,\n\t\t\n\t\tReset = function(self)\n\t\t\tself.Timer = 0\n\t\t\tself.Parent:ClearAllPoints()\n\t\t\tself.Parent:SetPoint(self.A1, self.P, self.A2, self.StartX, self.StartY)\n\t\t\t\n\t\t\tif self.IsRounded then\n\t\t\t\tself.ModTimer = 0\n\t\t\tend\n\t\tend,\n\t},\n\t\n\tfade = {\n\t\tSetChange = function(self, alpha)\n\t\t\tself.EndAlphaSetting = alpha or 0\n\t\tend,\n\t\t\n\t\tGetChange = function(self)\n\t\t\treturn self.EndAlphaSetting\n\t\tend,\n\t\t\n\t\tGetProgress = function(self)\n\t\t\treturn self.AlphaOffset\n\t\tend,\n\t\t\n\t\tReset = function(self)\n\t\t\tself.Timer = 0\n\t\t\tself.Parent:SetAlpha(self.StartAlpha)\n\t\tend,\n\t},\n\t\n\theight = {\n\t\tSetChange = function(self, height)\n\t\t\tself.EndHeightSetting = height or 0\n\t\tend,\n\t\t\n\t\tGetChange = function(self)\n\t\t\treturn self.EndHeightSetting\n\t\tend,\n\t\t\n\t\tGetProgress = function(self)\n\t\t\treturn self.HeightOffset\n\t\tend,\n\t\t\n\t\tReset = function(self)\n\t\t\tself.Timer = 0\n\t\t\tself.Parent:SetHeight(self.StartHeight)\n\t\tend,\n\t},\n\t\n\twidth = {\n\t\tSetChange = function(self, width)\n\t\t\tself.EndWidthSetting = width or 0\n\t\tend,\n\t\t\n\t\tGetChange = function(self)\n\t\t\treturn self.EndWidthSetting\n\t\tend,\n\t\t\n\t\tGetProgress = function(self)\n\t\t\treturn self.WidthOffset\n\t\tend,\n\t\t\n\t\tReset = function(self)\n\t\t\tself.Timer = 0\n\t\t\tself.Parent:SetWidth(self.StartWidth)\n\t\tend,\n\t},\n\t\n\tcolor = {\n\t\tSetChange = function(self, r, g, b)\n\t\t\tself.EndRSetting = r or 1\n\t\t\tself.EndGSetting = g or 1\n\t\t\tself.EndBSetting = b or 1\n\t\tend,\n\t\t\n\t\tGetChange = function(self)\n\t\t\treturn self.EndRSetting, self.EndGSetting, self.EndBSetting\n\t\tend,\n\t\t\n\t\tSetColorType = function(self, region)\n\t\t\tregion = lower(region)\n\t\t\t\n\t\t\tself.ColorType = Set[region] and region or \"border\"\n\t\tend,\n\t\t\n\t\tGetColorType = function(self)\n\t\t\treturn self.ColorType\n\t\tend,\n\t\t\n\t\tGetProgress = function(self)\n\t\t\treturn self.ColorOffset\n\t\tend,\n\t\t\n\t\tReset = function(self)\n\t\t\tself.Timer = 0\n\t\t\tSet[self.ColorType](self.Parent, self.StartR, self.StartG, self.StartB)\n\t\tend,\n\t},\n\t\n\tprogress = {\n\t\tSetChange = function(self, value)\n\t\t\tself.EndValueSetting = value or 0\n\t\tend,\n\t\t\n\t\tGetChange = function(self)\n\t\t\treturn self.EndValueSetting\n\t\tend,\n\t\t\n\t\tGetProgress = function(self)\n\t\t\treturn self.ValueOffset\n\t\tend,\n\t\t\n\t\tReset = function(self)\n\t\t\tself.Timer = 0\n\t\t\tself.Parent:SetValue(self.StartValue)\n\t\tend,\n\t},\n\t\n\tnumber = {\n\t\tSetChange = function(self, value)\n\t\t\tself.EndNumberSetting = value or 0\n\t\tend,\n\t\t\n\t\tGetChange = function(self)\n\t\t\treturn self.EndNumberSetting\n\t\tend,\n\t\t\n\t\tSetStart = function(self, value)\n\t\t\tself.StartNumber = value\n\t\tend,\n\t\t\n\t\tGetStart = function(self, value)\n\t\t\treturn self.StartNumber\n\t\tend,\n\t\t\n\t\tSetPrefix = function(self, text)\n\t\t\tself.Prefix = text or \"\"\n\t\tend,\n\t\t\n\t\tGetPrefix = function(self)\n\t\t\treturn self.Prefix\n\t\tend,\n\t\t\n\t\tSetPostfix = function(self, text)\n\t\t\tself.Postfix = text or \"\"\n\t\tend,\n\t\t\n\t\tGetPostfix = function(self)\n\t\t\treturn self.Postfix\n\t\tend,\n\t\t\n\t\tGetProgress = function(self)\n\t\t\treturn self.NumberOffset\n\t\tend,\n\t\t\n\t\tReset = function(self)\n\t\t\tself.Timer = 0\n\t\t\tself.Parent:SetText(self.StartNumber)\n\t\tend,\n\t},\n\t\n\tsleep = {\n\t\tGetProgress = function(self)\n\t\t\treturn self.Timer\n\t\tend,\n\t\t\n\t\tReset = function(self)\n\t\t\tself.Timer = 0\n\t\tend,\n\t},\n}\n\nlocal GroupMethods = {\n\tPlay = function(self)\n\t\tfor i = 1, #self.Animations do\n\t\t\tif (self.Animations[i].Order == self.Order) then\n\t\t\t\tself.Animations[i]:Play()\n\t\t\tend\n\t\tend\n\t\t\n\t\tself.Playing = true\n\t\tself.Paused = false\n\t\tself.Stopped = false\n\t\t\n\t\tself:Callback(\"OnPlay\")\n\tend,\n\t\n\tIsPlaying = function(self)\n\t\treturn self.Playing\n\tend,\n\t\n\tPause = function(self)\n\t\tfor i = 1, #self.Animations do\n\t\t\tif (self.Animations[i].Order == self.Order) then\n\t\t\t\tself.Animations[i]:Pause()\n\t\t\tend\n\t\tend\n\t\t\n\t\tself.Playing = false\n\t\tself.Paused = true\n\t\tself.Stopped = false\n\t\t\n\t\tself:Callback(\"OnPause\")\n\tend,\n\t\n\tIsPaused = function(self)\n\t\treturn self.Paused\n\tend,\n\t\n\tStop = function(self)\n\t\tfor i = 1, #self.Animations do\n\t\t\tself.Animations[i]:Stop()\n\t\tend\n\t\t\n\t\tself.Playing = false\n\t\tself.Paused = false\n\t\tself.Stopped = true\n\t\tself.Order = 1\n\t\t\n\t\tself:Callback(\"OnStop\")\n\tend,\n\t\n\tIsStopped = function(self)\n\t\treturn self.Stopped\n\tend,\n\t\n\tSetLooping = function(self, shouldLoop)\n\t\tself.Looping = shouldLoop\n\tend,\n\t\n\tGetLooping = function(self)\n\t\treturn self.Looping\n\tend,\n\t\n\tGetParent = function(self)\n\t\treturn self.Parent\n\tend,\n\t\n\tSetScript = function(self, handler, func)\n\t\thandler = lower(handler)\n\t\t\n\t\tif Callbacks[handler] then\n\t\t\tCallbacks[handler][self] = func\n\t\tend\n\tend,\n\t\n\tGetScript = function(self, handler)\n\t\thandler = lower(handler)\n\t\t\n\t\tif (Callbacks[handler] and Callbacks[handler][self]) then\n\t\t\treturn Callbacks[handler][self]\n\t\tend\n\tend,\n\t\n\tCallback = function(self, handler)\n\t\thandler = lower(handler)\n\t\t\n\t\tif Callbacks[handler][self] then\n\t\t\tCallbacks[handler][self](self)\n\t\tend\n\tend,\n\t\n\tCheckOrder = function(self)\n\t\t-- Check if we're done all animations at the current order, then proceed to the next order.\n\t\tlocal NumAtOrder = 0\n\t\tlocal NumDoneAtOrder = 0\n\t\t\n\t\tfor i = 1, #self.Animations do\n\t\t\tif (self.Animations[i].Order == self.Order) then\n\t\t\t\tNumAtOrder = NumAtOrder + 1\n\t\t\t\t\n\t\t\t\tif (not self.Animations[i].Playing) then\n\t\t\t\t\tNumDoneAtOrder = NumDoneAtOrder + 1\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\t\n\t\t-- All the animations at x order finished, go to next order\n\t\tif (NumAtOrder == NumDoneAtOrder) then\n\t\t\tself.Order = self.Order + 1\n\t\t\t\n\t\t\t-- We exceeded max order, reset to 1 and bail the function, or restart if we're looping\n\t\t\tif (self.Order > self.MaxOrder) then\n\t\t\t\tself.Order = 1\n\t\t\t\t\n\t\t\t\tself:Callback(\"OnFinished\")\n\t\t\t\t\n\t\t\t\tif (self.Stopped or not self.Looping) then\n\t\t\t\t\tself.Playing = false\n\t\t\t\t\t\n\t\t\t\t\treturn\n\t\t\t\tend\n\t\t\tend\n\t\t\t\n\t\t\t-- Play!\n\t\t\tfor i = 1, #self.Animations do\n\t\t\t\tif (self.Animations[i].Order == self.Order) then\n\t\t\t\t\tself.Animations[i]:Play()\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend,\n\t\n\tCreateAnimation = function(self, style)\n\t\tstyle = lower(style)\n\t\t\n\t\tif (not Initialize[style]) then\n\t\t\treturn\n\t\tend\n\t\t\n\t\tlocal Animation = {}\n\t\t\n\t\t-- General methods\n\t\tfor key, func in pairs(AnimMethods.All) do\n\t\t\tAnimation[key] = func\n\t\tend\n\t\t\n\t\t-- Animation specific methods\n\t\tif AnimMethods[style] then\n\t\t\tfor key, func in pairs(AnimMethods[style]) do\n\t\t\t\tAnimation[key] = func\n\t\t\tend\n\t\tend\n\t\t\n\t\t-- Set some attributes and defaults\n\t\tAnimation.Paused = false\n\t\tAnimation.Playing = false\n\t\tAnimation.Stopped = false\n\t\tAnimation.Looping = false\n\t\tAnimation.Type = style\n\t\tAnimation.Group = self\n\t\tAnimation.Parent = self.Parent\n\t\tAnimation.Order = 1\n\t\tAnimation.Duration = 0.3\n\t\tAnimation.Easing = \"linear\"\n\t\tAnimation.Update = Update[style]\n\t\t\n\t\ttinsert(self.Animations, Animation)\n\t\t\n\t\treturn Animation\n\tend,\n}\n\nCreateAnimationGroup = function(parent)\n\tlocal Group = {Animations = {}}\n\t\n\t-- Add methods to the group\n\tfor key, func in pairs(GroupMethods) do\n\t\tGroup[key] = func\n\tend\n\t\n\tGroup.Parent = parent\n\tGroup.Playing = false\n\tGroup.Paused = false\n\tGroup.Stopped = false\n\tGroup.Order = 1\n\tGroup.MaxOrder = 1\n\t\n\treturn Group\nend\n\n-- Movement\nInitialize[\"move\"] = function(self)\n\tif self.Playing then\n\t\treturn\n\tend\n\t\n\tlocal A1, P, A2, X, Y = self.Parent:GetPoint()\n\t\n\tself.Timer = 0\n\tself.A1 = A1\n\tself.P = P\n\tself.A2 = A2\n\tself.StartX = X\n\tself.EndX = (X + self.XSetting) or 0\n\tself.StartY = Y\n\tself.EndY = (Y + self.YSetting) or 0\n\tself.XChange = self.EndX - self.StartX\n\tself.YChange = self.EndY - self.StartY\n\t\n\tif self.IsRounded then\n\t\tif (self.XChange == 0 or self.YChange == 0) then -- Double check if we're valid to be rounded\n\t\t\tself.IsRounded = false\n\t\telse\n\t\t\tself.ModTimer = 0\n\t\tend\n\tend\n\t\n\tStartUpdating(self)\nend\n\nUpdate[\"move\"] = function(self, elapsed, i)\n\tself.Timer = self.Timer + elapsed\n\t\n\tif (self.Timer >= self.Duration) then\n\t\ttremove(Updater, i)\n\t\tself.Parent:SetPoint(self.A1, self.P, self.A2, self.EndX, self.EndY)\n\t\tself.Playing = false\n\t\tself:Callback(\"OnFinished\")\n\t\tself.Group:CheckOrder()\n\telse\n\t\tif self.IsRounded then\n\t\t\tself.ModTimer = Easing[self.Easing](self.Timer, 0, self.Duration, self.Duration)\n\t\t\tself.XOffset = self.StartX - (-1) * (self.XChange * (1 - cos(90 * self.ModTimer / self.Duration)))\n\t\t\tself.YOffset = self.StartY + self.YChange * sin(90 * self.ModTimer / self.Duration)\n\t\telse\n\t\t\tself.XOffset = Easing[self.Easing](self.Timer, self.StartX, self.XChange, self.Duration)\n\t\t\tself.YOffset = Easing[self.Easing](self.Timer, self.StartY, self.YChange, self.Duration)\n\t\tend\n\t\t\n\t\tself.Parent:SetPoint(self.A1, self.P, self.A2, (self.EndX ~= 0 and self.XOffset or self.StartX), (self.EndY ~= 0 and self.YOffset or self.StartY))\n\tend\nend\n\n-- Fade\nInitialize[\"fade\"] = function(self)\n\tif self.Playing then\n\t\treturn\n\tend\n\t\n\tself.Timer = 0\n\tself.StartAlpha = self.Parent:GetAlpha() or 1\n\tself.EndAlpha = self.EndAlphaSetting or 0\n\tself.Change = self.EndAlpha - self.StartAlpha\n\t\n\tStartUpdating(self)\nend\n\nUpdate[\"fade\"] = function(self, elapsed, i)\n\tself.Timer = self.Timer + elapsed\n\t\n\tif (self.Timer >= self.Duration) then\n\t\ttremove(Updater, i)\n\t\tself.Parent:SetAlpha(self.EndAlpha)\n\t\tself.Playing = false\n\t\tself:Callback(\"OnFinished\")\n\t\tself.Group:CheckOrder()\n\telse\n\t\tself.AlphaOffset = Easing[self.Easing](self.Timer, self.StartAlpha, self.Change, self.Duration)\n\t\tself.Parent:SetAlpha(self.AlphaOffset)\n\tend\nend\n\n-- Height\nInitialize[\"height\"] = function(self)\n\tif self.Playing then\n\t\treturn\n\tend\n\t\n\tself.Timer = 0\n\tself.StartHeight = self.Parent:GetHeight() or 0\n\tself.EndHeight = self.EndHeightSetting or 0\n\tself.HeightChange = self.EndHeight - self.StartHeight\n\t\n\tStartUpdating(self)\nend\n\nUpdate[\"height\"] = function(self, elapsed, i)\n\tself.Timer = self.Timer + elapsed\n\t\n\tif (self.Timer >= self.Duration) then\n\t\ttremove(Updater, i)\n\t\tself.Parent:SetHeight(self.EndHeight)\n\t\tself.Playing = false\n\t\tself:Callback(\"OnFinished\")\n\t\tself.Group:CheckOrder()\n\telse\n\t\tself.HeightOffset = Easing[self.Easing](self.Timer, self.StartHeight, self.HeightChange, self.Duration)\n\t\tself.Parent:SetHeight(self.HeightOffset)\n\tend\nend\n\n-- Width\nInitialize[\"width\"] = function(self)\n\tif self.Playing then\n\t\treturn\n\tend\n\t\n\tself.Timer = 0\n\tself.StartWidth = self.Parent:GetWidth() or 0\n\tself.EndWidth = self.EndWidthSetting or 0\n\tself.WidthChange = self.EndWidth - self.StartWidth\n\t\n\tStartUpdating(self)\nend\n\nUpdate[\"width\"] = function(self, elapsed, i)\n\tself.Timer = self.Timer + elapsed\n\t\n\tif (self.Timer >= self.Duration) then\n\t\ttremove(Updater, i)\n\t\tself.Parent:SetWidth(self.EndWidth)\n\t\tself.Playing = false\n\t\tself:Callback(\"OnFinished\")\n\t\tself.Group:CheckOrder()\n\telse\n\t\tself.WidthOffset = Easing[self.Easing](self.Timer, self.StartWidth, self.WidthChange, self.Duration)\n\t\tself.Parent:SetWidth(self.WidthOffset)\n\tend\nend\n\n-- Color\nInitialize[\"color\"] = function(self)\n\tself.Timer = 0\n\tself.ColorType = self.ColorType or \"backdrop\"\n\tself.StartR, self.StartG, self.StartB = Get[self.ColorType](self.Parent)\n\tself.EndR = self.EndRSetting or 1\n\tself.EndG = self.EndGSetting or 1\n\tself.EndB = self.EndBSetting or 1\n\t\n\tStartUpdating(self)\nend\n\nUpdate[\"color\"] = function(self, elapsed, i)\n\tself.Timer = self.Timer + elapsed\n\t\n\tif (self.Timer >= self.Duration) then\n\t\ttremove(Updater, i)\n\t\tSet[self.ColorType](self.Parent, self.EndR, self.EndG, self.EndB)\n\t\tself.Playing = false\n\t\tself:Callback(\"OnFinished\")\n\t\tself.Group:CheckOrder()\n\telse\n\t\tself.ColorOffset = Easing[self.Easing](self.Timer, 0, self.Duration, self.Duration)\n\t\tSet[self.ColorType](self.Parent, GetColor(self.Timer / self.Duration, self.StartR, self.StartG, self.StartB, self.EndR, self.EndG, self.EndB))\n\tend\nend\n\n-- Progress\nInitialize[\"progress\"] = function(self)\n\tself.Timer = 0\n\tself.StartValue = self.Parent:GetValue() or 0\n\tself.EndValue = self.EndValueSetting or 0\n\tself.ProgressChange = self.EndValue - self.StartValue\n\t\n\tStartUpdating(self)\nend\n\nUpdate[\"progress\"] = function(self, elapsed, i)\n\tself.Timer = self.Timer + elapsed\n\t\n\tif (self.Timer >= self.Duration) then\n\t\ttremove(Updater, i)\n\t\tself.Parent:SetValue(self.EndValue)\n\t\tself.Playing = false\n\t\tself:Callback(\"OnFinished\")\n\t\tself.Group:CheckOrder()\n\telse\n\t\tself.ValueOffset = Easing[self.Easing](self.Timer, self.StartValue, self.ProgressChange, self.Duration)\n\t\tself.Parent:SetValue(self.ValueOffset)\n\tend\nend\n\n-- Sleep\nInitialize[\"sleep\"] = function(self)\n\tself.Timer = 0\n\t\n\tStartUpdating(self)\nend\n\nUpdate[\"sleep\"] = function(self, elapsed, i)\n\tself.Timer = self.Timer + elapsed\n\t\n\tif (self.Timer >= self.Duration) then\n\t\ttremove(Updater, i)\n\t\tself.Playing = false\n\t\tself:Callback(\"OnFinished\")\n\t\tself.Group:CheckOrder()\n\tend\nend\n\n-- Number\nInitialize[\"number\"] = function(self)\n\tself.Timer = 0\n\t\n\tif (not self.StartNumber) then\n\t\tself.StartNumber = tonumber(self.Parent:GetText()) or 0\n\tend\n\t\n\tself.EndNumber = self.EndNumberSetting or 0\n\tself.NumberChange = self.EndNumberSetting - self.StartNumber\n\tself.Prefix = self.Prefix or \"\"\n\tself.Postfix = self.Postfix or \"\"\n\t\n\tStartUpdating(self)\nend\n\nUpdate[\"number\"] = function(self, elapsed, i)\n\tself.Timer = self.Timer + elapsed\n\t\n\tif (self.Timer >= self.Duration) then\n\t\ttremove(Updater, i)\n\t\tself.Parent:SetText(self.Prefix..floor(self.EndNumber)..self.Postfix)\n\t\tself.Playing = false\n\t\tself:Callback(\"OnFinished\")\n\t\tself.Group:CheckOrder()\n\telse\n\t\tself.NumberOffset = Easing[self.Easing](self.Timer, self.StartNumber, self.NumberChange, self.Duration)\n\t\tself.Parent:SetText(self.Prefix..floor(self.NumberOffset)..self.Postfix)\n\tend\nend\n\n-- Global exposure\n_G[\"_LibAnim\"] = Version\n\nLibAnimStartUpdating = StartUpdating\nLibAnimUpdater = Updater\n\nfunction LibAnimAddType(name, init, update)\n\tif (type(init) ~= \"function\" or type(update) ~= \"function\") then\n\t\treturn\n\tend\n\t\n\tname = lower(name)\n\t\n\tif Initialize[name] then\n\t\treturn\n\tend\n\t\n\tInitialize[name] = init\n\tUpdate[name] = update\nend\n\n--[[\n\tWant to create your own animations for this system? Follow the example below\n\tIf you make a custom animation I would love to see it!\n\t\n\tExample:\n\t\n\tlocal MyInitialize = function(self)\n\t\tself.Timer = 0\n\t\t\n\t\t-- do any initialization right before the animation plays\n\t\t\n\t\tLibAnimStartUpdating(self)\n\tend\n\t\n\tlocal MyUpdate = function(self, elapsed, i)\n\t\tself.Timer = self.Timer + elapsed\n\t\t\n\t\tif (self.Timer >= self.Duration) then\n\t\t\ttable.remove(LibAnimUpdater, i)\n\t\t\t\n\t\t\t-- Set finished attributes here\n\t\t\t\n\t\t\tself.Playing = false\n\t\t\tself:Callback(\"OnFinished\")\n\t\t\tself.Group:CheckOrder() \n\t\telse\n\t\t\t-- Do any updating necessary here\n\t\tend\n\tend\n\t\n\tLibAnimAddType(\"MyAnim\", MyInitialize, MyUpdate)\n--]]"
  },
  {
    "path": "DBM-Core/Libs/LibDBIcon-1.0/LibDBIcon-1.0.lua",
    "content": "--[[\nName: DBIcon-1.0\nRevision: $Rev: 15 $\nAuthor(s): Rabbit (rabbit.magtheridon@gmail.com)\nDescription: Allows addons to register to recieve a lightweight minimap icon as an alternative to more heavy LDB displays.\nDependencies: LibStub\nLicense: GPL v2 or later.\n]]\n\n--[[\nCopyright (C) 2008-2010 Rabbit\n\nThis program is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public License\nas published by the Free Software Foundation; either version 2\nof the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\n]]\n\n-----------------------------------------------------------------------\n-- DBIcon-1.0\n--\n-- Disclaimer: Most of this code was ripped from Barrel but fixed, streamlined\n--             and cleaned up a lot so that it no longer sucks.\n--\n\nlocal DBICON10 = \"LibDBIcon-1.0\"\nlocal DBICON10_MINOR = tonumber((\"$Rev: 20 $\"):match(\"(%d+)\"))\nif not LibStub then error(DBICON10 .. \" requires LibStub.\") end\nlocal ldb = LibStub(\"LibDataBroker-1.1\", true)\nif not ldb then error(DBICON10 .. \" requires LibDataBroker-1.1.\") end\nlocal lib = LibStub:NewLibrary(DBICON10, DBICON10_MINOR)\nif not lib then return end\n\nlib.disabled = lib.disabled or nil\nlib.objects = lib.objects or {}\nlib.callbackRegistered = lib.callbackRegistered or nil\nlib.notCreated = lib.notCreated or {}\n\nfunction lib:IconCallback(event, name, key, value, dataobj)\n\tif lib.objects[name] then\n\t\tlib.objects[name].icon:SetTexture(dataobj.icon)\n\tend\nend\nif not lib.callbackRegistered then\n\tldb.RegisterCallback(lib, \"LibDataBroker_AttributeChanged__icon\", \"IconCallback\")\n\tlib.callbackRegistered = true\nend\n\n-- Tooltip code ripped from StatBlockCore by Funkydude\nlocal function getAnchors(frame)\n\tlocal x, y = frame:GetCenter()\n\tif not x or not y then return \"CENTER\" end\n\tlocal hhalf = (x > UIParent:GetWidth()*2/3) and \"RIGHT\" or (x < UIParent:GetWidth()/3) and \"LEFT\" or \"\"\n\tlocal vhalf = (y > UIParent:GetHeight()/2) and \"TOP\" or \"BOTTOM\"\n\treturn vhalf..hhalf, frame, (vhalf == \"TOP\" and \"BOTTOM\" or \"TOP\")..hhalf\nend\n\nlocal function onEnter(self)\n\tif self.isMoving then return end\n\tlocal obj = self.dataObject\n\tif obj.OnTooltipShow then\n\t\tGameTooltip:SetOwner(self, \"ANCHOR_NONE\")\n\t\tGameTooltip:SetPoint(getAnchors(self))\n\t\tobj.OnTooltipShow(GameTooltip)\n\t\tGameTooltip:Show()\n\telseif obj.OnEnter then\n\t\tobj.OnEnter(self)\n\tend\nend\n\nlocal function onLeave(self)\n\tlocal obj = self.dataObject\n\tGameTooltip:Hide()\n\tif obj.OnLeave then obj.OnLeave(self) end\nend\n\n--------------------------------------------------------------------------------\n\nlocal minimapShapes = {\n\t[\"ROUND\"] = {true, true, true, true},\n\t[\"SQUARE\"] = {false, false, false, false},\n\t[\"CORNER-TOPLEFT\"] = {true, false, false, false},\n\t[\"CORNER-TOPRIGHT\"] = {false, false, true, false},\n\t[\"CORNER-BOTTOMLEFT\"] = {false, true, false, false},\n\t[\"CORNER-BOTTOMRIGHT\"] = {false, false, false, true},\n\t[\"SIDE-LEFT\"] = {true, true, false, false},\n\t[\"SIDE-RIGHT\"] = {false, false, true, true},\n\t[\"SIDE-TOP\"] = {true, false, true, false},\n\t[\"SIDE-BOTTOM\"] = {false, true, false, true},\n\t[\"TRICORNER-TOPLEFT\"] = {true, true, true, false},\n\t[\"TRICORNER-TOPRIGHT\"] = {true, false, true, true},\n\t[\"TRICORNER-BOTTOMLEFT\"] = {true, true, false, true},\n\t[\"TRICORNER-BOTTOMRIGHT\"] = {false, true, true, true},\n}\n\nlocal function updatePosition(button)\n\tlocal angle = math.rad(button.db and button.db.minimapPos or button.minimapPos or 225)\n\tlocal x, y, q = math.cos(angle), math.sin(angle), 1\n\tif x < 0 then q = q + 1 end\n\tif y > 0 then q = q + 2 end\n\tlocal minimapShape = GetMinimapShape and GetMinimapShape() or \"ROUND\"\n\tlocal quadTable = minimapShapes[minimapShape]\n\tif quadTable[q] then\n\t\tx, y = x*80, y*80\n\telse\n\t\tlocal diagRadius = 103.13708498985 --math.sqrt(2*(80)^2)-10\n\t\tx = math.max(-80, math.min(x*diagRadius, 80))\n\t\ty = math.max(-80, math.min(y*diagRadius, 80))\n\tend\n\tbutton:SetPoint(\"CENTER\", Minimap, \"CENTER\", x, y)\nend\n\nlocal function onClick(self, b) if self.dataObject.OnClick then self.dataObject.OnClick(self, b) end end\nlocal function onMouseDown(self) self.icon:SetTexCoord(0, 1, 0, 1) end\nlocal function onMouseUp(self) self.icon:SetTexCoord(0.05, 0.95, 0.05, 0.95) end\n\nlocal function onUpdate(self)\n\tlocal mx, my = Minimap:GetCenter()\n\tlocal px, py = GetCursorPosition()\n\tlocal scale = Minimap:GetEffectiveScale()\n\tpx, py = px / scale, py / scale\n\tif self.db then\n\t\tself.db.minimapPos = math.deg(math.atan2(py - my, px - mx)) % 360\n\telse\n\t\tself.minimapPos = math.deg(math.atan2(py - my, px - mx)) % 360\n\tend\n\tupdatePosition(self)\nend\n\nlocal function onDragStart(self)\n\tself:LockHighlight()\n\tself.icon:SetTexCoord(0, 1, 0, 1)\n\tself:SetScript(\"OnUpdate\", onUpdate)\n\tself.isMoving = true\n\tGameTooltip:Hide()\nend\n\nlocal function onDragStop(self)\n\tself:SetScript(\"OnUpdate\", nil)\n\tself.icon:SetTexCoord(0.05, 0.95, 0.05, 0.95)\n\tself:UnlockHighlight()\n\tself.isMoving = nil\nend\n\nlocal function createButton(name, object, db)\n\tlocal button = CreateFrame(\"Button\", \"LibDBIcon10_\"..name, Minimap)\n\tbutton.dataObject = object\n\tbutton.db = db\n\tbutton:SetFrameStrata(\"MEDIUM\")\n\tbutton:SetWidth(31); button:SetHeight(31)\n\tbutton:SetFrameLevel(8)\n\tbutton:RegisterForClicks(\"anyUp\")\n\tbutton:RegisterForDrag(\"LeftButton\")\n\tbutton:SetHighlightTexture(\"Interface\\\\Minimap\\\\UI-Minimap-ZoomButton-Highlight\")\n\tlocal overlay = button:CreateTexture(nil, \"OVERLAY\")\n\toverlay:SetWidth(53); overlay:SetHeight(53)\n\toverlay:SetTexture(\"Interface\\\\Minimap\\\\MiniMap-TrackingBorder\")\n\toverlay:SetPoint(\"TOPLEFT\")\n\tlocal background = button:CreateTexture(nil, \"BACKGROUND\")\n\tbackground:SetSize(20, 20)\n\tbackground:SetTexture(\"Interface\\\\Minimap\\\\UI-Minimap-Background\")\n\tbackground:SetPoint(\"TOPLEFT\", 7, -5)\n\tlocal icon = button:CreateTexture(nil, \"ARTWORK\")\n\ticon:SetWidth(20); icon:SetHeight(20)\n\ticon:SetTexture(object.icon)\n\ticon:SetTexCoord(0.05, 0.95, 0.05, 0.95)\n\ticon:SetPoint(\"TOPLEFT\", 7, -5)\n\tbutton.icon = icon\n\n\tbutton:SetScript(\"OnEnter\", onEnter)\n\tbutton:SetScript(\"OnLeave\", onLeave)\n\tbutton:SetScript(\"OnClick\", onClick)\n\tbutton:SetScript(\"OnDragStart\", onDragStart)\n\tbutton:SetScript(\"OnDragStop\", onDragStop)\n\tbutton:SetScript(\"OnMouseDown\", onMouseDown)\n\tbutton:SetScript(\"OnMouseUp\", onMouseUp)\n\n\tlib.objects[name] = button\n\n\tif lib.loggedIn then\n\t\tupdatePosition(button)\n\t\tif not db or not db.hide then button:Show()\n\t\telse button:Hide() end\n\tend\nend\n\n-- We could use a metatable.__index on lib.objects, but then we'd create\n-- the icons when checking things like :IsRegistered, which is not necessary.\nlocal function check(name)\n\tif lib.notCreated[name] then\n\t\tcreateButton(name, lib.notCreated[name][1], lib.notCreated[name][2])\n\t\tlib.notCreated[name] = nil\n\tend\nend\n\nlib.loggedIn = lib.loggedIn or false\n-- Wait a bit with the initial positioning to let any GetMinimapShape addons\n-- load up.\nif not lib.loggedIn then\n\tlocal f = CreateFrame(\"Frame\")\n\tf:SetScript(\"OnEvent\", function()\n\t\tfor _, object in pairs(lib.objects) do\n\t\t\tupdatePosition(object)\n\t\t\tif not lib.disabled and (not object.db or not object.db.hide) then object:Show()\n\t\t\telse object:Hide() end\n\t\tend\n\t\tlib.loggedIn = true\n\t\tf:SetScript(\"OnEvent\", nil)\n\t\tf = nil\n\tend)\n\tf:RegisterEvent(\"PLAYER_LOGIN\")\nend\n\nfunction lib:Register(name, object, db)\n\tif lib.disabled then return end\n\tif not object.icon then error(\"Can't register LDB objects without icons set!\") end\n\tif lib.objects[name] or lib.notCreated[name] then error(\"Already registered, nubcake.\") end\n\tif not db or not db.hide then\n\t\tcreateButton(name, object, db)\n\telse\n\t\tlib.notCreated[name] = {object, db}\n\tend\nend\n\nfunction lib:Hide(name)\n\tif not lib.objects[name] then return end\n\tlib.objects[name]:Hide()\nend\nfunction lib:Show(name)\n\tif lib.disabled then return end\n\tcheck(name)\n\tlib.objects[name]:Show()\n\tupdatePosition(lib.objects[name])\nend\nfunction lib:IsRegistered(name)\n\treturn (lib.objects[name] or lib.notCreated[name]) and true or false\nend\nfunction lib:Refresh(name, db)\n\tif lib.disabled then return end\n\tcheck(name)\n\tlocal button = lib.objects[name]\n\tif db then button.db = db end\n\tupdatePosition(button)\n\tif not db or not db.hide then\n\t\tbutton:Show()\n\telse\n\t\tbutton:Hide()\n\tend\nend\n\nfunction lib:EnableLibrary()\n\tlib.disabled = nil\n\tfor name, object in pairs(lib.objects) do\n\t\tif not object.db or (object.db and not object.db.hide) then\n\t\t\tobject:Show()\n\t\t\tupdatePosition(object)\n\t\tend\n\tend\nend\n\nfunction lib:DisableLibrary()\n\tlib.disabled = true\n\tfor name, object in pairs(lib.objects) do\n\t\tobject:Hide()\n\tend\nend\n\n"
  },
  {
    "path": "DBM-Core/Libs/LibDataBroker-1.1/LibDataBroker-1.1.lua",
    "content": "\nassert(LibStub, \"LibDataBroker-1.1 requires LibStub\")\nassert(LibStub:GetLibrary(\"CallbackHandler-1.0\", true), \"LibDataBroker-1.1 requires CallbackHandler-1.0\")\n\nlocal lib, oldminor = LibStub:NewLibrary(\"LibDataBroker-1.1\", 3)\nif not lib then return end\noldminor = oldminor or 0\n\n\nlib.callbacks = lib.callbacks or LibStub:GetLibrary(\"CallbackHandler-1.0\"):New(lib)\nlib.attributestorage, lib.namestorage, lib.proxystorage = lib.attributestorage or {}, lib.namestorage or {}, lib.proxystorage or {}\nlocal attributestorage, namestorage, callbacks = lib.attributestorage, lib.namestorage, lib.callbacks\n\nif oldminor < 2 then\n\tlib.domt = {\n\t\t__metatable = \"access denied\",\n\t\t__index = function(self, key) return attributestorage[self] and attributestorage[self][key] end,\n\t}\nend\n\nif oldminor < 3 then\n\tlib.domt.__newindex = function(self, key, value)\n\t\tif not attributestorage[self] then attributestorage[self] = {} end\n\t\tif attributestorage[self][key] == value then return end\n\t\tattributestorage[self][key] = value\n\t\tlocal name = namestorage[self]\n\t\tif not name then return end\n\t\tcallbacks:Fire(\"LibDataBroker_AttributeChanged\", name, key, value, self)\n\t\tcallbacks:Fire(\"LibDataBroker_AttributeChanged_\"..name, name, key, value, self)\n\t\tcallbacks:Fire(\"LibDataBroker_AttributeChanged_\"..name..\"_\"..key, name, key, value, self)\n\t\tcallbacks:Fire(\"LibDataBroker_AttributeChanged__\"..key, name, key, value, self)\n\tend\nend\n\nif oldminor < 2 then\n\tfunction lib:NewDataObject(name, dataobj)\n\t\tif self.proxystorage[name] then return end\n\n\t\tif dataobj then\n\t\t\tassert(type(dataobj) == \"table\", \"Invalid dataobj, must be nil or a table\")\n\t\t\tself.attributestorage[dataobj] = {}\n\t\t\tfor i,v in pairs(dataobj) do\n\t\t\t\tself.attributestorage[dataobj][i] = v\n\t\t\t\tdataobj[i] = nil\n\t\t\tend\n\t\tend\n\t\tdataobj = setmetatable(dataobj or {}, self.domt)\n\t\tself.proxystorage[name], self.namestorage[dataobj] = dataobj, name\n\t\tself.callbacks:Fire(\"LibDataBroker_DataObjectCreated\", name, dataobj)\n\t\treturn dataobj\n\tend\nend\n\nif oldminor < 1 then\n\tfunction lib:DataObjectIterator()\n\t\treturn pairs(self.proxystorage)\n\tend\n\n\tfunction lib:GetDataObjectByName(dataobjectname)\n\t\treturn self.proxystorage[dataobjectname]\n\tend\n\n\tfunction lib:GetNameByDataObject(dataobject)\n\t\treturn self.namestorage[dataobject]\n\tend\nend\n"
  },
  {
    "path": "DBM-Core/Libs/LibDeflate/LibDeflate.lua",
    "content": "--[[--\nLibDeflate 1.0.0-release <br>\nPure Lua compressor and decompressor with high compression ratio using\nDEFLATE/zlib format.\n\n@file LibDeflate.lua\n@author Haoqian He (Github: SafeteeWoW; World of Warcraft: Safetyy-Illidan(US))\n@copyright LibDeflate <2018> Haoqian He\n@license GNU General Public License Version 3 or later\n\nThis library is implemented according to the following specifications. <br>\nReport a bug if LibDeflate is not fully compliant with those specs. <br>\nBoth compressors and decompressors have been implemented in the library.<br>\n1. RFC1950: DEFLATE Compressed Data Format Specification version 1.3 <br>\nhttps://tools.ietf.org/html/rfc1951 <br>\n2. RFC1951: ZLIB Compressed Data Format Specification version 3.3 <br>\nhttps://tools.ietf.org/html/rfc1950 <br>\n\nThis library requires Lua 5.1/5.2/5.3 interpreter or LuaJIT v2.0+. <br>\nThis library does not have any dependencies. <br>\n<br>\nThis file \"LibDeflate.lua\" is the only source file of\nthe library. <br>\nSubmit suggestions or report bugs to\nhttps://github.com/safeteeWow/LibDeflate/issues\n]]\n\n--[[\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\nany later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program.  If not, see https://www.gnu.org/licenses/.\n\nCredits:\n1. zlib, by Jean-loup Gailly (compression) and Mark Adler (decompression).\n\thttp://www.zlib.net/\n\tLicensed under zlib License. http://www.zlib.net/zlib_license.html\n\tFor the compression algorithm.\n2. puff, by Mark Adler. https://github.com/madler/zlib/tree/master/contrib/puff\n\tLicensed under zlib License. http://www.zlib.net/zlib_license.html\n\tFor the decompression algorithm.\n3. LibCompress, by jjsheets and Galmok of European Stormrage (Horde)\n\thttps://www.wowace.com/projects/libcompress\n\tLicensed under GPLv2.\n\thttps://www.gnu.org/licenses/old-licenses/gpl-2.0.html\n\tFor the code to create customized codec.\n4. WeakAuras2,\n\thttps://github.com/WeakAuras/WeakAuras2\n\tLicensed under GPLv2.\n\tFor the 6bit encoding and decoding.\n]]\n\n--[[\n\tCurseforge auto-packaging replacements:\n\n\tProject Date: 2018-07-29T18:58:38Z\n\tProject Hash: 420f583c8c1ad0d4fc12398c86e99a65cf37a79a\n\tProject Version: 1.0.0-release\n--]]\n\nlocal LibDeflate\n\ndo\n\t-- Semantic version. all lowercase.\n\t-- Suffix can be alpha1, alpha2, beta1, beta2, rc1, rc2, etc.\n\t-- NOTE: Two version numbers needs to modify.\n\t-- 1. On the top of LibDeflate.lua\n\t-- 2. HERE\n\tlocal _VERSION = \"1.0.0-release\"\n\n\tlocal _COPYRIGHT =\n\t\"LibDeflate \".._VERSION\n\t..\" Copyright (C) 2018 Haoqian He.\"\n\t..\" License GPLv3+: GNU GPL version 3 or later\"\n\n\t-- Register in the World of Warcraft library \"LibStub\" if detected.\n\tif LibStub then\n\t\tlocal MAJOR, MINOR = \"LibDeflate\", -1\n\t\t-- When MAJOR is changed, I should name it as LibDeflate2\n\t\tlocal lib, minor = LibStub:GetLibrary(MAJOR, true)\n\t\tif lib and minor and minor >= MINOR then -- No need to update.\n\t\t\treturn lib\n\t\telse -- Update or first time register\n\t\t\tLibDeflate = LibStub:NewLibrary(MAJOR, _VERSION)\n\t\t\t-- NOTE: It is important that new version has implemented\n\t\t\t-- all exported APIs and tables in the old version,\n\t\t\t-- so the old library is fully garbage collected,\n\t\t\t-- and we 100% ensure the backward compatibility.\n\t\tend\n\telse -- \"LibStub\" is not detected.\n\t\tLibDeflate = {}\n\tend\n\n\tLibDeflate._VERSION = _VERSION\n\tLibDeflate._COPYRIGHT = _COPYRIGHT\nend\n\n-- localize Lua api for faster access.\nlocal assert = assert\nlocal error = error\nlocal pairs = pairs\nlocal string_byte = string.byte\nlocal string_char = string.char\nlocal string_find = string.find\nlocal string_gsub = string.gsub\nlocal string_sub = string.sub\nlocal table_concat = table.concat\nlocal table_sort = table.sort\nlocal tostring = tostring\nlocal type = type\n\n-- Converts i to 2^i, (0<=i<=32)\n-- This is used to implement bit left shift and bit right shift.\n-- \"x >> y\" in C:   \"(x-x%_pow2[y])/_pow2[y]\" in Lua\n-- \"x << y\" in C:   \"x*_pow2[y]\" in Lua\nlocal _pow2 = {}\n\n-- Converts any byte to a character, (0<=byte<=255)\nlocal _byte_to_char = {}\n\n-- _reverseBitsTbl[len][val] stores the bit reverse of\n-- the number with bit length \"len\" and value \"val\"\n-- For example, decimal number 6 with bits length 5 is binary 00110\n-- It's reverse is binary 01100,\n-- which is decimal 12 and 12 == _reverseBitsTbl[5][6]\n-- 1<=len<=9, 0<=val<=2^len-1\n-- The reason for 1<=len<=9 is that the max of min bitlen of huffman code\n-- of a huffman alphabet is 9?\nlocal _reverse_bits_tbl = {}\n\n-- Convert a LZ77 length (3<=len<=258) to\n-- a deflate literal/LZ77_length code (257<=code<=285)\nlocal _length_to_deflate_code = {}\n\n-- convert a LZ77 length (3<=len<=258) to\n-- a deflate literal/LZ77_length code extra bits.\nlocal _length_to_deflate_extra_bits = {}\n\n-- Convert a LZ77 length (3<=len<=258) to\n-- a deflate literal/LZ77_length code extra bit length.\nlocal _length_to_deflate_extra_bitlen = {}\n\n-- Convert a small LZ77 distance (1<=dist<=256) to a deflate code.\nlocal _dist256_to_deflate_code = {}\n\n-- Convert a small LZ77 distance (1<=dist<=256) to\n-- a deflate distance code extra bits.\nlocal _dist256_to_deflate_extra_bits = {}\n\n-- Convert a small LZ77 distance (1<=dist<=256) to\n-- a deflate distance code extra bit length.\nlocal _dist256_to_deflate_extra_bitlen = {}\n\n-- Convert a literal/LZ77_length deflate code to LZ77 base length\n-- The key of the table is (code - 256), 257<=code<=285\nlocal _literal_deflate_code_to_base_len = {\n\t3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n\t35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258,\n}\n\n-- Convert a literal/LZ77_length deflate code to base LZ77 length extra bits\n-- The key of the table is (code - 256), 257<=code<=285\nlocal _literal_deflate_code_to_extra_bitlen = {\n\t0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,\n\t3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0,\n}\n\n-- Convert a distance deflate code to base LZ77 distance. (0<=code<=29)\nlocal _dist_deflate_code_to_base_dist = {\n\t[0] = 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n\t257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n\t8193, 12289, 16385, 24577,\n}\n\n-- Convert a distance deflate code to LZ77 bits length. (0<=code<=29)\nlocal _dist_deflate_code_to_extra_bitlen = {\n\t[0] = 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,\n\t7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13,\n}\n\n-- The code order of the first huffman header in the dynamic deflate block.\n-- See the page 12 of RFC1951\nlocal _rle_codes_huffman_bitlen_order = {16, 17, 18,\n\t0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15,\n}\n\n-- The following tables are used by fixed deflate block.\n-- The value of these tables are assigned at the bottom of the source.\n\n-- The huffman code of the literal/LZ77_length deflate codes,\n-- in fixed deflate block.\nlocal _fix_block_literal_huffman_code\n\n-- Convert huffman code of the literal/LZ77_length to deflate codes,\n-- in fixed deflate block.\nlocal _fix_block_literal_huffman_to_deflate_code\n\n-- The bit length of the huffman code of literal/LZ77_length deflate codes,\n-- in fixed deflate block.\nlocal _fix_block_literal_huffman_bitlen\n\n-- The count of each bit length of the literal/LZ77_length deflate codes,\n-- in fixed deflate block.\nlocal _fix_block_literal_huffman_bitlen_count\n\n-- The huffman code of the distance deflate codes,\n-- in fixed deflate block.\nlocal _fix_block_dist_huffman_code\n\n-- Convert huffman code of the distance to deflate codes,\n-- in fixed deflate block.\nlocal _fix_block_dist_huffman_to_deflate_code\n\n-- The bit length of the huffman code of the distance deflate codes,\n-- in fixed deflate block.\nlocal _fix_block_dist_huffman_bitlen\n\n-- The count of each bit length of the huffman code of\n-- the distance deflate codes,\n-- in fixed deflate block.\nlocal _fix_block_dist_huffman_bitlen_count\n\nfor i = 0, 255 do\n\t_byte_to_char[i] = string_char(i)\nend\n\ndo\n\tlocal pow = 1\n\tfor i = 0, 32 do\n\t\t_pow2[i] = pow\n\t\tpow = pow * 2\n\tend\nend\n\nfor i = 1, 9 do\n\t_reverse_bits_tbl[i] = {}\n\tfor j=0, _pow2[i+1]-1 do\n\t\tlocal reverse = 0\n\t\tlocal value = j\n\t\tfor _ = 1, i do\n\t\t\t-- The following line is equivalent to \"res | (code %2)\" in C.\n\t\t\treverse = reverse - reverse%2\n\t\t\t\t+ (((reverse%2==1) or (value % 2) == 1) and 1 or 0)\n\t\t\tvalue = (value-value%2)/2\n\t\t\treverse = reverse * 2\n\t\tend\n\t\t_reverse_bits_tbl[i][j] = (reverse-reverse%2)/2\n\tend\nend\n\n-- The source code is written according to the pattern in the numbers\n-- in RFC1951 Page10.\ndo\n\tlocal a = 18\n\tlocal b = 16\n\tlocal c = 265\n\tlocal bitlen = 1\n\tfor len = 3, 258 do\n\t\tif len <= 10 then\n\t\t\t_length_to_deflate_code[len] = len + 254\n\t\t\t_length_to_deflate_extra_bitlen[len] = 0\n\t\telseif len == 258 then\n\t\t\t_length_to_deflate_code[len] = 285\n\t\t\t_length_to_deflate_extra_bitlen[len] = 0\n\t\telse\n\t\t\tif len > a then\n\t\t\t\ta = a + b\n\t\t\t\tb = b * 2\n\t\t\t\tc = c + 4\n\t\t\t\tbitlen = bitlen + 1\n\t\t\tend\n\t\t\tlocal t = len-a-1+b/2\n\t\t\t_length_to_deflate_code[len] = (t-(t%(b/8)))/(b/8) + c\n\t\t\t_length_to_deflate_extra_bitlen[len] = bitlen\n\t\t\t_length_to_deflate_extra_bits[len] = t % (b/8)\n\t\tend\n\tend\nend\n\n-- The source code is written according to the pattern in the numbers\n-- in RFC1951 Page11.\ndo\n\t_dist256_to_deflate_code[1] = 0\n\t_dist256_to_deflate_code[2] = 1\n\t_dist256_to_deflate_extra_bitlen[1] = 0\n\t_dist256_to_deflate_extra_bitlen[2] = 0\n\n\tlocal a = 3\n\tlocal b = 4\n\tlocal code = 2\n\tlocal bitlen = 0\n\tfor dist = 3, 256 do\n\t\tif dist > b then\n\t\t\ta = a * 2\n\t\t\tb = b * 2\n\t\t\tcode = code + 2\n\t\t\tbitlen = bitlen + 1\n\t\tend\n\t\t_dist256_to_deflate_code[dist] = (dist <= a) and code or (code+1)\n\t\t_dist256_to_deflate_extra_bitlen[dist] = (bitlen < 0) and 0 or bitlen\n\t\tif b >= 8 then\n\t\t\t_dist256_to_deflate_extra_bits[dist] = (dist-b/2-1) % (b/4)\n\t\tend\n\tend\nend\n\n--- Calculate the Adler-32 checksum of the string. <br>\n-- See RFC1950 Page 9 https://tools.ietf.org/html/rfc1950 for the\n-- definition of Adler-32 checksum.\n-- @param str [string] the input string to calcuate its Adler-32 checksum.\n-- @return [integer] The Adler-32 checksum, which is greater or equal to 0,\n-- and less than 2^32 (4294967296).\nfunction LibDeflate:Adler32(str)\n\t-- This function is loop unrolled by better performance.\n\t--\n\t-- Here is the minimum code:\n\t--\n\t-- local a = 1\n\t-- local b = 0\n\t-- for i=1, #str do\n\t-- \t\tlocal s = string.byte(str, i, i)\n\t-- \t\ta = (a+s)%65521\n\t-- \t\tb = (b+a)%65521\n\t-- \t\tend\n\t-- return b*65536+a\n\tif type(str) ~= \"string\" then\n\t\terror((\"Usage: LibDeflate:Adler32(str):\"\n\t\t\t..\" 'str' - string expected got '%s'.\"):format(type(str)), 2)\n\tend\n\tlocal strlen = #str\n\n\tlocal i = 1\n\tlocal a = 1\n\tlocal b = 0\n\twhile i <= strlen - 15 do\n\t\tlocal x1, x2, x3, x4, x5, x6, x7, x8,\n\t\t\tx9, x10, x11, x12, x13, x14, x15, x16 = string_byte(str, i, i+15)\n\t\tb = (b+16*a+16*x1+15*x2+14*x3+13*x4+12*x5+11*x6+10*x7+9*x8+8*x9\n\t\t\t+7*x10+6*x11+5*x12+4*x13+3*x14+2*x15+x16)%65521\n\t\ta = (a+x1+x2+x3+x4+x5+x6+x7+x8+x9+x10+x11+x12+x13+x14+x15+x16)%65521\n\t\ti =  i + 16\n\tend\n\twhile (i <= strlen) do\n\t\tlocal x = string_byte(str, i, i)\n\t\ta = (a + x) % 65521\n\t\tb = (b + a) % 65521\n\t\ti = i + 1\n\tend\n\treturn (b*65536+a) % 4294967296\nend\n\n-- Compare adler32 checksum.\n-- adler32 should be compared with a mod to avoid sign problem\n-- 4072834167 (unsigned) is the same adler32 as -222133129\nlocal function IsEqualAdler32(actual, expected)\n\treturn (actual % 4294967296) == (expected % 4294967296)\nend\n\n--- Create a preset dictionary.\n--\n-- This function is not fast, and the memory consumption of the produced\n-- dictionary is about 50 times of the input string. Therefore, it is suggestted\n-- to run this function only once in your program.\n--\n-- It is very important to know that if you do use a preset dictionary,\n-- compressors and decompressors MUST USE THE SAME dictionary. That is,\n-- dictionary must be created using the same string. If you update your program\n-- with a new dictionary, people with the old version won't be able to transmit\n-- data with people with the new version. Therefore, changing the dictionary\n-- must be very careful.\n--\n-- The parameters \"strlen\" and \"adler32\" add a layer of verification to ensure\n-- the parameter \"str\" is not modified unintentionally during the program\n-- development.\n--\n-- @usage local dict_str = \"1234567890\"\n--\n-- -- print(dict_str:len(), LibDeflate:Adler32(dict_str))\n-- -- Hardcode the print result below to verify it to avoid acciently\n-- -- modification of 'str' during the program development.\n-- -- string length: 10, Adler-32: 187433486,\n-- -- Don't calculate string length and its Adler-32 at run-time.\n--\n-- local dict = LibDeflate:CreateDictionary(dict_str, 10, 187433486)\n--\n-- @param str [string] The string used as the preset dictionary. <br>\n-- You should put stuffs that frequently appears in the dictionary\n-- string and preferablely put more frequently appeared stuffs toward the end\n-- of the string. <br>\n-- Empty string and string longer than 32768 bytes are not allowed.\n-- @param strlen [integer] The length of 'str'. Please pass in this parameter\n-- as a hardcoded constant, in order to verify the content of 'str'. The value\n-- of this parameter should be known before your program runs.\n-- @param adler32 [integer] The Adler-32 checksum of 'str'. Please pass in this\n-- parameter as a hardcoded constant, in order to verify the content of 'str'.\n-- The value of this parameter should be known before your program runs.\n-- @return  [table] The dictionary used for preset dictionary compression and\n-- decompression.\n-- @raise error if 'strlen' does not match the length of 'str',\n-- or if 'adler32' does not match the Adler-32 checksum of 'str'.\nfunction LibDeflate:CreateDictionary(str, strlen, adler32)\n\tif type(str) ~= \"string\" then\n\t\terror((\"Usage: LibDeflate:CreateDictionary(str, strlen, adler32):\"\n\t\t\t..\" 'str' - string expected got '%s'.\"):format(type(str)), 2)\n\tend\n\tif type(strlen) ~= \"number\" then\n\t\terror((\"Usage: LibDeflate:CreateDictionary(str, strlen, adler32):\"\n\t\t\t..\" 'strlen' - number expected got '%s'.\"):format(\n\t\t\ttype(strlen)), 2)\n\tend\n\tif type(adler32) ~= \"number\" then\n\t\terror((\"Usage: LibDeflate:CreateDictionary(str, strlen, adler32):\"\n\t\t\t..\" 'adler32' - number expected got '%s'.\"):format(\n\t\t\ttype(adler32)), 2)\n\tend\n\tif strlen ~= #str then\n\t\terror((\"Usage: LibDeflate:CreateDictionary(str, strlen, adler32):\"\n\t\t\t\t..\" 'strlen' does not match the actual length of 'str'.\"\n\t\t\t\t..\" 'strlen': %u, '#str': %u .\"\n\t\t\t\t..\" Please check if 'str' is modified unintentionally.\")\n\t\t\t:format(strlen, #str))\n\tend\n\tif strlen == 0 then\n\t\terror((\"Usage: LibDeflate:CreateDictionary(str, strlen, adler32):\"\n\t\t\t..\" 'str' - Empty string is not allowed.\"), 2)\n\tend\n\tif strlen > 32768 then\n\t\terror((\"Usage: LibDeflate:CreateDictionary(str, strlen, adler32):\"\n\t\t\t..\" 'str' - string longer than 32768 bytes is not allowed.\"\n\t\t\t ..\" Got %d bytes.\"):format(strlen), 2)\n\tend\n\tlocal actual_adler32 = self:Adler32(str)\n\tif not IsEqualAdler32(adler32, actual_adler32) then\n\t\terror((\"Usage: LibDeflate:CreateDictionary(str, strlen, adler32):\"\n\t\t\t\t..\" 'adler32' does not match the actual adler32 of 'str'.\"\n\t\t\t\t..\" 'adler32': %u, 'Adler32(str)': %u .\"\n\t\t\t\t..\" Please check if 'str' is modified unintentionally.\")\n\t\t\t:format(adler32, actual_adler32))\n\tend\n\n\tlocal dictionary = {}\n\tdictionary.adler32 = adler32\n\tdictionary.hash_tables = {}\n\tdictionary.string_table = {}\n\tdictionary.strlen = strlen\n\tlocal string_table = dictionary.string_table\n\tlocal hash_tables = dictionary.hash_tables\n\tstring_table[1] = string_byte(str, 1, 1)\n\tstring_table[2] = string_byte(str, 2, 2)\n\tif strlen >= 3 then\n\t\tlocal i = 1\n\t\tlocal hash = string_table[1]*256+string_table[2]\n\t\twhile i <= strlen - 2 - 3 do\n\t\t\tlocal x1, x2, x3, x4 = string_byte(str, i+2, i+5)\n\t\t\tstring_table[i+2] = x1\n\t\t\tstring_table[i+3] = x2\n\t\t\tstring_table[i+4] = x3\n\t\t\tstring_table[i+5] = x4\n\t\t\thash = (hash*256+x1)%16777216\n\t\t\tlocal t = hash_tables[hash]\n\t\t\tif not t then t = {}; hash_tables[hash] = t end\n\t\t\tt[#t+1] = i-strlen\n\t\t\ti = i + 1\n\t\t\thash = (hash*256+x2)%16777216\n\t\t\tt = hash_tables[hash]\n\t\t\tif not t then t = {}; hash_tables[hash] = t end\n\t\t\tt[#t+1] = i-strlen\n\t\t\ti = i + 1\n\t\t\thash = (hash*256+x3)%16777216\n\t\t\tt = hash_tables[hash]\n\t\t\tif not t then t = {}; hash_tables[hash] = t end\n\t\t\tt[#t+1] = i-strlen\n\t\t\ti = i + 1\n\t\t\thash = (hash*256+x4)%16777216\n\t\t\tt = hash_tables[hash]\n\t\t\tif not t then t = {}; hash_tables[hash] = t end\n\t\t\tt[#t+1] = i-strlen\n\t\t\ti = i + 1\n\t\tend\n\t\twhile i <= strlen - 2 do\n\t\t\tlocal x = string_byte(str, i+2)\n\t\t\tstring_table[i+2] = x\n\t\t\thash = (hash*256+x)%16777216\n\t\t\tlocal t = hash_tables[hash]\n\t\t\tif not t then t = {}; hash_tables[hash] = t end\n\t\t\tt[#t+1] = i-strlen\n\t\t\ti = i + 1\n\t\tend\n\tend\n\treturn dictionary\nend\n\n-- Check if the dictionary is valid.\n-- @param dictionary The preset dictionary for compression and decompression.\n-- @return true if valid, false if not valid.\n-- @return if not valid, the error message.\nlocal function IsValidDictionary(dictionary)\n\tif type(dictionary) ~= \"table\" then\n\t\treturn false, (\"'dictionary' - table expected got '%s'.\")\n\t\t\t:format(type(dictionary))\n\tend\n\tif type(dictionary.adler32) ~= \"number\"\n\t\tor type(dictionary.string_table) ~= \"table\"\n\t\tor type(dictionary.strlen) ~= \"number\"\n\t\tor dictionary.strlen <= 0\n\t\tor dictionary.strlen > 32768\n\t\tor dictionary.strlen ~= #dictionary.string_table\n\t\tor type(dictionary.hash_tables) ~= \"table\"\n\t\tthen\n\t\treturn false, (\"'dictionary' - corrupted dictionary.\")\n\t\t\t:format(type(dictionary))\n\tend\n\treturn true, \"\"\nend\n\n--[[\n\tkey of the configuration table is the compression level,\n\tand its value stores the compression setting.\n\tThese numbers come from zlib source code.\n\n\tHigher compression level usually means better compression.\n\t(Because LibDeflate uses a simplified version of zlib algorithm,\n\tthere is no guarantee that higher compression level does not create\n\tbigger file than lower level, but I can say it's 99% likely)\n\n\tBe careful with the high compression level. This is a pure lua\n\timplementation compressor/decompressor, which is significant slower than\n\ta C/C++ equivalant compressor/decompressor. Very high compression level\n\tcosts significant more CPU time, and usually compression size won't be\n\tsignificant smaller when you increase compression level by 1, when the\n\tlevel is already very high. Benchmark yourself if you can afford it.\n\n\tSee also https://github.com/madler/zlib/blob/master/doc/algorithm.txt,\n\thttps://github.com/madler/zlib/blob/master/deflate.c for more information.\n\n\tThe meaning of each field:\n\t@field 1 use_lazy_evaluation:\n\t\ttrue/false. Whether the program uses lazy evaluation.\n\t\tSee what is \"lazy evaluation\" in the link above.\n\t\tlazy_evaluation improves ratio, but relatively slow.\n\t@field 2 good_prev_length:\n\t\tOnly effective if lazy is set, Only use 1/4 of max_chain,\n\t\tif prev length of lazy match is above this.\n\t@field 3 max_insert_length/max_lazy_match:\n\t\tIf not using lazy evaluation,\n\t\tinsert new strings in the hash table only if the match length is not\n\t\tgreater than this length.\n\t\tIf using lazy evaluation, only continue lazy evaluation,\n\t\tif previous match length is strictly smaller than this value.\n\t@field 4 nice_length:\n\t\tNumber. Don't continue to go down the hash chain,\n\t\tif match length is above this.\n\t@field 5 max_chain:\n\t\tNumber. The maximum number of hash chains we look.\n--]]\nlocal _compression_level_configs = {\n\t[0] = {false, nil, 0, 0, 0}, -- level 0, no compression\n\t[1] = {false, nil, 4, 8, 4}, -- level 1, similar to zlib level 1\n\t[2] = {false, nil, 5, 18, 8}, -- level 2, similar to zlib level 2\n\t[3] = {false, nil, 6, 32, 32},\t-- level 3, similar to zlib level 3\n\t[4] = {true, 4,\t4, 16, 16},\t-- level 4, similar to zlib level 4\n\t[5] = {true, 8,\t16,\t32,\t32}, -- level 5, similar to zlib level 5\n\t[6] = {true, 8,\t16,\t128, 128}, -- level 6, similar to zlib level 6\n\t[7] = {true, 8,\t32,\t128, 256}, -- (SLOW) level 7, similar to zlib level 7\n\t[8] = {true, 32, 128, 258, 1024} , --(SLOW) level 8,similar to zlib level 8\n\t[9] = {true, 32, 258, 258, 4096},\n\t\t-- (VERY SLOW) level 9, similar to zlib level 9\n}\n\n-- Check if the compression/decompression arguments is valid\n-- @param str The input string.\n-- @param check_dictionary if true, check if dictionary is valid.\n-- @param dictionary The preset dictionary for compression and decompression.\n-- @param check_configs if true, check if config is valid.\n-- @param configs The compression configuration table\n-- @return true if valid, false if not valid.\n-- @return if not valid, the error message.\nlocal function IsValidArguments(str,\n\tcheck_dictionary, dictionary,\n\tcheck_configs, configs)\n\n\tif type(str) ~= \"string\" then\n\t\treturn false,\n\t\t\t(\"'str' - string expected got '%s'.\"):format(type(str))\n\tend\n\tif check_dictionary then\n\t\tlocal dict_valid, dict_err = IsValidDictionary(dictionary)\n\t\tif not dict_valid then\n\t\t\treturn false, dict_err\n\t\tend\n\tend\n\tif check_configs then\n\t\tlocal type_configs = type(configs)\n\t\tif type_configs ~= \"nil\" and type_configs ~= \"table\" then\n\t\t\treturn false,\n\t\t\t(\"'configs' - nil or table expected got '%s'.\")\n\t\t\t\t:format(type(configs))\n\t\tend\n\t\tif type_configs == \"table\" then\n\t\t\tfor k, v in pairs(configs) do\n\t\t\t\tif k ~= \"level\" and k ~= \"strategy\" then\n\t\t\t\t\treturn false,\n\t\t\t\t\t(\"'configs' - unsupported table key in the configs: '%s'.\")\n\t\t\t\t\t:format(k)\n\t\t\t\telseif k == \"level\" and not _compression_level_configs[v] then\n\t\t\t\t\treturn false,\n\t\t\t\t\t(\"'configs' - unsupported 'level': %s.\"):format(tostring(v))\n\t\t\t\telseif k == \"strategy\" and v ~= \"fixed\" and v ~= \"huffman_only\"\n\t\t\t\t\t\tand v ~= \"dynamic\" then\n\t\t\t\t\t\t-- random_block_type is for testing purpose\n\t\t\t\t\treturn false, (\"'configs' - unsupported 'strategy': '%s'.\")\n\t\t\t\t\t\t:format(tostring(v))\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\treturn true, \"\"\nend\n\n\n\n--[[ --------------------------------------------------------------------------\n\tCompress code\n--]] --------------------------------------------------------------------------\n\n-- partial flush to save memory\nlocal _FLUSH_MODE_MEMORY_CLEANUP = 0\n-- full flush with partial bytes\nlocal _FLUSH_MODE_OUTPUT = 1\n-- write bytes to get to byte boundary\nlocal _FLUSH_MODE_BYTE_BOUNDARY = 2\n-- no flush, just get num of bits written so far\nlocal _FLUSH_MODE_NO_FLUSH = 3\n\n--[[\n\tCreate an empty writer to easily write stuffs as the unit of bits.\n\tReturn values:\n\t1. WriteBits(code, bitlen):\n\t2. WriteString(str):\n\t3. Flush(mode):\n--]]\nlocal function CreateWriter()\n\tlocal buffer_size = 0\n\tlocal cache = 0\n\tlocal cache_bitlen = 0\n\tlocal total_bitlen = 0\n\tlocal buffer = {}\n\t-- When buffer is big enough, flush into result_buffer to save memory.\n\tlocal result_buffer = {}\n\n\t-- Write bits with value \"value\" and bit length of \"bitlen\" into writer.\n\t-- @param value: The value being written\n\t-- @param bitlen: The bit length of \"value\"\n\t-- @return nil\n\tlocal function WriteBits(value, bitlen)\n\t\tcache = cache + value * _pow2[cache_bitlen]\n\t\tcache_bitlen = cache_bitlen + bitlen\n\t\ttotal_bitlen = total_bitlen + bitlen\n\t\t-- Only bulk to buffer every 4 bytes. This is quicker.\n\t\tif cache_bitlen >= 32 then\n\t\t\tbuffer_size = buffer_size + 1\n\t\t\tbuffer[buffer_size] =\n\t\t\t\t_byte_to_char[cache % 256]\n\t\t\t\t.._byte_to_char[((cache-cache%256)/256 % 256)]\n\t\t\t\t.._byte_to_char[((cache-cache%65536)/65536 % 256)]\n\t\t\t\t.._byte_to_char[((cache-cache%16777216)/16777216 % 256)]\n\t\t\tlocal rshift_mask = _pow2[32 - cache_bitlen + bitlen]\n\t\t\tcache = (value - value%rshift_mask)/rshift_mask\n\t\t\tcache_bitlen = cache_bitlen - 32\n\t\tend\n\tend\n\n\t-- Write the entire string into the writer.\n\t-- @param str The string being written\n\t-- @return nil\n\tlocal function WriteString(str)\n\t\tfor _ = 1, cache_bitlen, 8 do\n\t\t\tbuffer_size = buffer_size + 1\n\t\t\tbuffer[buffer_size] = string_char(cache % 256)\n\t\t\tcache = (cache-cache%256)/256\n\t\tend\n\t\tcache_bitlen = 0\n\t\tbuffer_size = buffer_size + 1\n\t\tbuffer[buffer_size] = str\n\t\ttotal_bitlen = total_bitlen + #str*8\n\tend\n\n\t-- Flush current stuffs in the writer and return it.\n\t-- This operation will free most of the memory.\n\t-- @param mode See the descrtion of the constant and the source code.\n\t-- @return The total number of bits stored in the writer right now.\n\t-- for byte boundary mode, it includes the padding bits.\n\t-- for output mode, it does not include padding bits.\n\t-- @return Return the outputs if mode is output.\n\tlocal function FlushWriter(mode)\n\t\tif mode == _FLUSH_MODE_NO_FLUSH then\n\t\t\treturn total_bitlen\n\t\tend\n\n\t\tif mode == _FLUSH_MODE_OUTPUT\n\t\t\tor mode == _FLUSH_MODE_BYTE_BOUNDARY then\n\t\t\t-- Full flush, also output cache.\n\t\t\t-- Need to pad some bits if cache_bitlen is not multiple of 8.\n\t\t\tlocal padding_bitlen = (8 - cache_bitlen % 8) % 8\n\n\t\t\tif cache_bitlen > 0 then\n\t\t\t\t-- padding with all 1 bits, mainly because \"\\000\" is not\n\t\t\t\t-- good to be tranmitted. I do this so \"\\000\" is a little bit\n\t\t\t\t-- less frequent.\n\t\t\t\tcache = cache - _pow2[cache_bitlen]\n\t\t\t\t\t+ _pow2[cache_bitlen+padding_bitlen]\n\t\t\t\tfor _ = 1, cache_bitlen, 8 do\n\t\t\t\t\tbuffer_size = buffer_size + 1\n\t\t\t\t\tbuffer[buffer_size] = _byte_to_char[cache % 256]\n\t\t\t\t\tcache = (cache-cache%256)/256\n\t\t\t\tend\n\n\t\t\t\tcache = 0\n\t\t\t\tcache_bitlen = 0\n\t\t\tend\n\t\t\tif mode == _FLUSH_MODE_BYTE_BOUNDARY then\n\t\t\t\ttotal_bitlen = total_bitlen + padding_bitlen\n\t\t\t\treturn total_bitlen\n\t\t\tend\n\t\tend\n\n\t\tlocal flushed = table_concat(buffer)\n\t\tbuffer = {}\n\t\tbuffer_size = 0\n\t\tresult_buffer[#result_buffer+1] = flushed\n\n\t\tif mode == _FLUSH_MODE_MEMORY_CLEANUP then\n\t\t\treturn total_bitlen\n\t\telse\n\t\t\treturn total_bitlen, table_concat(result_buffer)\n\t\tend\n\tend\n\n\treturn WriteBits, WriteString, FlushWriter\nend\n\n-- Push an element into a max heap\n-- @param heap A max heap whose max element is at index 1.\n-- @param e The element to be pushed. Assume element \"e\" is a table\n--  and comparison is done via its first entry e[1]\n-- @param heap_size current number of elements in the heap.\n--  NOTE: There may be some garbage stored in\n--  heap[heap_size+1], heap[heap_size+2], etc..\n-- @return nil\nlocal function MinHeapPush(heap, e, heap_size)\n\theap_size = heap_size + 1\n\theap[heap_size] = e\n\tlocal value = e[1]\n\tlocal pos = heap_size\n\tlocal parent_pos = (pos-pos%2)/2\n\n\twhile (parent_pos >= 1 and heap[parent_pos][1] > value) do\n\t\tlocal t = heap[parent_pos]\n\t\theap[parent_pos] = e\n\t\theap[pos] = t\n\t\tpos = parent_pos\n\t\tparent_pos = (parent_pos-parent_pos%2)/2\n\tend\nend\n\n-- Pop an element from a max heap\n-- @param heap A max heap whose max element is at index 1.\n-- @param heap_size current number of elements in the heap.\n-- @return the poped element\n-- Note: This function does not change table size of \"heap\" to save CPU time.\nlocal function MinHeapPop(heap, heap_size)\n\tlocal top = heap[1]\n\tlocal e = heap[heap_size]\n\tlocal value = e[1]\n\theap[1] = e\n\theap[heap_size] = top\n\theap_size = heap_size - 1\n\n\tlocal pos = 1\n\tlocal left_child_pos = pos * 2\n\tlocal right_child_pos = left_child_pos + 1\n\n\twhile (left_child_pos <= heap_size) do\n\t\tlocal left_child = heap[left_child_pos]\n\t\tif (right_child_pos <= heap_size\n\t\t\tand heap[right_child_pos][1] < left_child[1]) then\n\t\t\tlocal right_child = heap[right_child_pos]\n\t\t\tif right_child[1] < value then\n\t\t\t\theap[right_child_pos] = e\n\t\t\t\theap[pos] = right_child\n\t\t\t\tpos = right_child_pos\n\t\t\t\tleft_child_pos = pos * 2\n\t\t\t\tright_child_pos = left_child_pos + 1\n\t\t\telse\n\t\t\t\tbreak\n\t\t\tend\n\t\telse\n\t\t\tif left_child[1] < value then\n\t\t\t\theap[left_child_pos] = e\n\t\t\t\theap[pos] = left_child\n\t\t\t\tpos = left_child_pos\n\t\t\t\tleft_child_pos = pos * 2\n\t\t\t\tright_child_pos = left_child_pos + 1\n\t\t\telse\n\t\t\t\tbreak\n\t\t\tend\n\t\tend\n\tend\n\n\treturn top\nend\n\n-- Deflate defines a special huffman tree, which is unique once the bit length\n-- of huffman code of all symbols are known.\n-- @param bitlen_count Number of symbols with a specific bitlen\n-- @param symbol_bitlen The bit length of a symbol\n-- @param max_symbol The max symbol among all symbols,\n--\t\twhich is (number of symbols - 1)\n-- @param max_bitlen The max huffman bit length among all symbols.\n-- @return The huffman code of all symbols.\nlocal function GetHuffmanCodeFromBitlen(bitlen_counts, symbol_bitlens\n\t\t, max_symbol, max_bitlen)\n\tlocal huffman_code = 0\n\tlocal next_codes = {}\n\tlocal symbol_huffman_codes = {}\n\tfor bitlen = 1, max_bitlen do\n\t\thuffman_code = (huffman_code+(bitlen_counts[bitlen-1] or 0))*2\n\t\tnext_codes[bitlen] = huffman_code\n\tend\n\tfor symbol = 0, max_symbol do\n\t\tlocal bitlen = symbol_bitlens[symbol]\n\t\tif bitlen then\n\t\t\thuffman_code = next_codes[bitlen]\n\t\t\tnext_codes[bitlen] = huffman_code + 1\n\n\t\t\t-- Reverse the bits of huffman code,\n\t\t\t-- because most signifant bits of huffman code\n\t\t\t-- is stored first into the compressed data.\n\t\t\t-- @see RFC1951 Page5 Section 3.1.1\n\t\t\tif bitlen <= 9 then -- Have cached reverse for small bitlen.\n\t\t\t\tsymbol_huffman_codes[symbol] =\n\t\t\t\t\t_reverse_bits_tbl[bitlen][huffman_code]\n\t\t\telse\n\t\t\t\tlocal reverse = 0\n\t\t\t\tfor _ = 1, bitlen do\n\t\t\t\t\treverse = reverse - reverse%2\n\t\t\t\t\t\t+ (((reverse%2==1)\n\t\t\t\t\t\t\tor (huffman_code % 2) == 1) and 1 or 0)\n\t\t\t\t\thuffman_code = (huffman_code-huffman_code%2)/2\n\t\t\t\t\treverse = reverse*2\n\t\t\t\tend\n\t\t\t\tsymbol_huffman_codes[symbol] = (reverse-reverse%2)/2\n\t\t\tend\n\t\tend\n\tend\n\treturn symbol_huffman_codes\nend\n\n-- A helper function to sort heap elements\n-- a[1], b[1] is the huffman frequency\n-- a[2], b[2] is the symbol value.\nlocal function SortByFirstThenSecond(a, b)\n\treturn a[1] < b[1] or\n\t\t(a[1] == b[1] and a[2] < b[2])\nend\n\n-- Calculate the huffman bit length and huffman code.\n-- @param symbol_count: A table whose table key is the symbol, and table value\n--\t\tis the symbol frenquency (nil means 0 frequency).\n-- @param max_bitlen: See description of return value.\n-- @param max_symbol: The maximum symbol\n-- @return a table whose key is the symbol, and the value is the huffman bit\n--\t\tbit length. We guarantee that all bit length <= max_bitlen.\n--\t\tFor 0<=symbol<=max_symbol, table value could be nil if the frequency\n--\t\tof the symbol is 0 or nil.\n-- @return a table whose key is the symbol, and the value is the huffman code.\n-- @return a number indicating the maximum symbol whose bitlen is not 0.\nlocal function GetHuffmanBitlenAndCode(symbol_counts, max_bitlen, max_symbol)\n\tlocal heap_size\n\tlocal max_non_zero_bitlen_symbol = -1\n\tlocal leafs = {}\n\tlocal heap = {}\n\tlocal symbol_bitlens = {}\n\tlocal symbol_codes = {}\n\tlocal bitlen_counts = {}\n\n\t--[[\n\t\ttree[1]: weight, temporarily used as parent and bitLengths\n\t\ttree[2]: symbol\n\t\ttree[3]: left child\n\t\ttree[4]: right child\n\t--]]\n\tlocal number_unique_symbols = 0\n\tfor symbol, count in pairs(symbol_counts) do\n\t\tnumber_unique_symbols = number_unique_symbols + 1\n\t\tleafs[number_unique_symbols] = {count, symbol}\n\tend\n\n\tif (number_unique_symbols == 0) then\n\t\t-- no code.\n\t\treturn {}, {}, -1\n\telseif (number_unique_symbols == 1) then\n\t\t-- Only one code. In this case, its huffman code\n\t\t-- needs to be assigned as 0, and bit length is 1.\n\t\t-- This is the only case that the return result\n\t\t-- represents an imcomplete huffman tree.\n\t\tlocal symbol = leafs[1][2]\n\t\tsymbol_bitlens[symbol] = 1\n\t\tsymbol_codes[symbol] = 0\n\t\treturn symbol_bitlens, symbol_codes, symbol\n\telse\n\t\ttable_sort(leafs, SortByFirstThenSecond)\n\t\theap_size = number_unique_symbols\n\t\tfor i = 1, heap_size do\n\t\t\theap[i] = leafs[i]\n\t\tend\n\n\t\twhile (heap_size > 1) do\n\t\t\t-- Note: pop does not change table size of heap\n\t\t\tlocal leftChild = MinHeapPop(heap, heap_size)\n\t\t\theap_size = heap_size - 1\n\t\t\tlocal rightChild = MinHeapPop(heap, heap_size)\n\t\t\theap_size = heap_size - 1\n\t\t\tlocal newNode =\n\t\t\t\t{leftChild[1]+rightChild[1], -1, leftChild, rightChild}\n\t\t\tMinHeapPush(heap, newNode, heap_size)\n\t\t\theap_size = heap_size + 1\n\t\tend\n\n\t\t-- Number of leafs whose bit length is greater than max_len.\n\t\tlocal number_bitlen_overflow = 0\n\n\t\t-- Calculate bit length of all nodes\n\t\tlocal fifo = {heap[1], 0, 0, 0} -- preallocate some spaces.\n\t\tlocal fifo_size = 1\n\t\tlocal index = 1\n\t\theap[1][1] = 0\n\t\twhile (index <= fifo_size) do -- Breath first search\n\t\t\tlocal e = fifo[index]\n\t\t\tlocal bitlen = e[1]\n\t\t\tlocal symbol = e[2]\n\t\t\tlocal left_child = e[3]\n\t\t\tlocal right_child = e[4]\n\t\t\tif left_child then\n\t\t\t\tfifo_size = fifo_size + 1\n\t\t\t\tfifo[fifo_size] = left_child\n\t\t\t\tleft_child[1] = bitlen + 1\n\t\t\tend\n\t\t\tif right_child then\n\t\t\t\tfifo_size = fifo_size + 1\n\t\t\t\tfifo[fifo_size] = right_child\n\t\t\t\tright_child[1] = bitlen + 1\n\t\t\tend\n\t\t\tindex = index + 1\n\n\t\t\tif (bitlen > max_bitlen) then\n\t\t\t\tnumber_bitlen_overflow = number_bitlen_overflow + 1\n\t\t\t\tbitlen = max_bitlen\n\t\t\tend\n\t\t\tif symbol >= 0 then\n\t\t\t\tsymbol_bitlens[symbol] = bitlen\n\t\t\t\tmax_non_zero_bitlen_symbol =\n\t\t\t\t\t(symbol > max_non_zero_bitlen_symbol)\n\t\t\t\t\tand symbol or max_non_zero_bitlen_symbol\n\t\t\t\tbitlen_counts[bitlen] = (bitlen_counts[bitlen] or 0) + 1\n\t\t\tend\n\t\tend\n\n\t\t-- Resolve bit length overflow\n\t\t-- @see ZLib/trees.c:gen_bitlen(s, desc), for reference\n\t\tif (number_bitlen_overflow > 0) then\n\t\t\trepeat\n\t\t\t\tlocal bitlen = max_bitlen - 1\n\t\t\t\twhile ((bitlen_counts[bitlen] or 0) == 0) do\n\t\t\t\t\tbitlen = bitlen - 1\n\t\t\t\tend\n\t\t\t\t-- move one leaf down the tree\n\t\t\t\tbitlen_counts[bitlen] = bitlen_counts[bitlen] - 1\n\t\t\t\t-- move one overflow item as its brother\n\t\t\t\tbitlen_counts[bitlen+1] = (bitlen_counts[bitlen+1] or 0) + 2\n\t\t\t\tbitlen_counts[max_bitlen] = bitlen_counts[max_bitlen] - 1\n\t\t\t\tnumber_bitlen_overflow = number_bitlen_overflow - 2\n\t\t\tuntil (number_bitlen_overflow <= 0)\n\n\t\t\tindex = 1\n\t\t\tfor bitlen = max_bitlen, 1, -1 do\n\t\t\t\tlocal n = bitlen_counts[bitlen] or 0\n\t\t\t\twhile (n > 0) do\n\t\t\t\t\tlocal symbol = leafs[index][2]\n\t\t\t\t\tsymbol_bitlens[symbol] = bitlen\n\t\t\t\t\tn = n - 1\n\t\t\t\t\tindex = index + 1\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\n\t\tsymbol_codes = GetHuffmanCodeFromBitlen(bitlen_counts, symbol_bitlens,\n\t\t\t\tmax_symbol, max_bitlen)\n\t\treturn symbol_bitlens, symbol_codes, max_non_zero_bitlen_symbol\n\tend\nend\n\n-- Calculate the first huffman header in the dynamic huffman block\n-- @see RFC1951 Page 12\n-- @param lcode_bitlen: The huffman bit length of literal/LZ77_length.\n-- @param max_non_zero_bitlen_lcode: The maximum literal/LZ77_length symbol\n--\t\twhose huffman bit length is not zero.\n-- @param dcode_bitlen: The huffman bit length of LZ77 distance.\n-- @param max_non_zero_bitlen_dcode: The maximum LZ77 distance symbol\n--\t\twhose huffman bit length is not zero.\n-- @return The run length encoded codes.\n-- @return The extra bits. One entry for each rle code that needs extra bits.\n--\t\t(code == 16 or 17 or 18).\n-- @return The count of appearance of each rle codes.\nlocal function RunLengthEncodeHuffmanBitlen(\n\t\tlcode_bitlens,\n\t\tmax_non_zero_bitlen_lcode,\n\t\tdcode_bitlens,\n\t\tmax_non_zero_bitlen_dcode)\n\tlocal rle_code_tblsize = 0\n\tlocal rle_codes = {}\n\tlocal rle_code_counts = {}\n\tlocal rle_extra_bits_tblsize = 0\n\tlocal rle_extra_bits = {}\n\tlocal prev = nil\n\tlocal count = 0\n\n\t-- If there is no distance code, assume one distance code of bit length 0.\n\t-- RFC1951: One distance code of zero bits means that\n\t-- there are no distance codes used at all (the data is all literals).\n\tmax_non_zero_bitlen_dcode = (max_non_zero_bitlen_dcode < 0)\n\t\t\tand 0 or max_non_zero_bitlen_dcode\n\tlocal max_code = max_non_zero_bitlen_lcode+max_non_zero_bitlen_dcode+1\n\n\tfor code = 0, max_code+1 do\n\t\tlocal len = (code <= max_non_zero_bitlen_lcode)\n\t\t\tand (lcode_bitlens[code] or 0)\n\t\t\tor ((code <= max_code)\n\t\t\tand (dcode_bitlens[code-max_non_zero_bitlen_lcode-1] or 0) or nil)\n\t\tif len == prev then\n\t\t\tcount = count + 1\n\t\t\tif len ~= 0 and count == 6 then\n\t\t\t\trle_code_tblsize = rle_code_tblsize + 1\n\t\t\t\trle_codes[rle_code_tblsize] = 16\n\t\t\t\trle_extra_bits_tblsize = rle_extra_bits_tblsize + 1\n\t\t\t\trle_extra_bits[rle_extra_bits_tblsize] = 3\n\t\t\t\trle_code_counts[16] = (rle_code_counts[16] or 0) + 1\n\t\t\t\tcount = 0\n\t\t\telseif len == 0 and count == 138 then\n\t\t\t\trle_code_tblsize = rle_code_tblsize + 1\n\t\t\t\trle_codes[rle_code_tblsize] = 18\n\t\t\t\trle_extra_bits_tblsize = rle_extra_bits_tblsize + 1\n\t\t\t\trle_extra_bits[rle_extra_bits_tblsize] = 127\n\t\t\t\trle_code_counts[18] = (rle_code_counts[18] or 0) + 1\n\t\t\t\tcount = 0\n\t\t\tend\n\t\telse\n\t\t\tif count == 1 then\n\t\t\t\trle_code_tblsize = rle_code_tblsize + 1\n\t\t\t\trle_codes[rle_code_tblsize] = prev\n\t\t\t\trle_code_counts[prev] = (rle_code_counts[prev] or 0) + 1\n\t\t\telseif count == 2 then\n\t\t\t\trle_code_tblsize = rle_code_tblsize + 1\n\t\t\t\trle_codes[rle_code_tblsize] = prev\n\t\t\t\trle_code_tblsize = rle_code_tblsize + 1\n\t\t\t\trle_codes[rle_code_tblsize] = prev\n\t\t\t\trle_code_counts[prev] = (rle_code_counts[prev] or 0) + 2\n\t\t\telseif count >= 3 then\n\t\t\t\trle_code_tblsize = rle_code_tblsize + 1\n\t\t\t\tlocal rleCode = (prev ~= 0) and 16 or (count <= 10 and 17 or 18)\n\t\t\t\trle_codes[rle_code_tblsize] = rleCode\n\t\t\t\trle_code_counts[rleCode] = (rle_code_counts[rleCode] or 0) + 1\n\t\t\t\trle_extra_bits_tblsize = rle_extra_bits_tblsize + 1\n\t\t\t\trle_extra_bits[rle_extra_bits_tblsize] =\n\t\t\t\t\t(count <= 10) and (count - 3) or (count - 11)\n\t\t\tend\n\n\t\t\tprev = len\n\t\t\tif len and len ~= 0 then\n\t\t\t\trle_code_tblsize = rle_code_tblsize + 1\n\t\t\t\trle_codes[rle_code_tblsize] = len\n\t\t\t\trle_code_counts[len] = (rle_code_counts[len] or 0) + 1\n\t\t\t\tcount = 0\n\t\t\telse\n\t\t\t\tcount = 1\n\t\t\tend\n\t\tend\n\tend\n\n\treturn rle_codes, rle_extra_bits, rle_code_counts\nend\n\n-- Load the string into a table, in order to speed up LZ77.\n-- Loop unrolled 16 times to speed this function up.\n-- @param str The string to be loaded.\n-- @param t The load destination\n-- @param start str[index] will be the first character to be loaded.\n-- @param end str[index] will be the last character to be loaded\n-- @param offset str[index] will be loaded into t[index-offset]\n-- @return t\nlocal function LoadStringToTable(str, t, start, stop, offset)\n\tlocal i = start - offset\n\twhile i <= stop - 15 - offset do\n\t\tt[i], t[i+1], t[i+2], t[i+3], t[i+4], t[i+5], t[i+6], t[i+7], t[i+8],\n\t\tt[i+9], t[i+10], t[i+11], t[i+12], t[i+13], t[i+14], t[i+15] =\n\t\t\tstring_byte(str, i + offset, i + 15 + offset)\n\t\ti = i + 16\n\tend\n\twhile (i <= stop - offset) do\n\t\tt[i] = string_byte(str, i + offset, i + offset)\n\t\ti = i + 1\n\tend\n\treturn t\nend\n\n-- Do LZ77 process. This function uses the majority of the CPU time.\n-- @see zlib/deflate.c:deflate_fast(), zlib/deflate.c:deflate_slow()\n-- @see https://github.com/madler/zlib/blob/master/doc/algorithm.txt\n-- This function uses the algorithms used above. You should read the\n-- algorithm.txt above to understand what is the hash function and the\n-- lazy evaluation.\n--\n-- The special optimization used here is hash functions used here.\n-- The hash function is just the multiplication of the three consective\n-- characters. So if the hash matches, it guarantees 3 characters are matched.\n-- This optimization can be implemented because Lua table is a hash table.\n--\n-- @param level integer that describes compression level.\n-- @param string_table table that stores the value of string to be compressed.\n--\t\t\tThe index of this table starts from 1.\n--\t\t\tThe caller needs to make sure all values needed by this function\n--\t\t\tare loaded.\n--\t\t\tAssume \"str\" is the origin input string into the compressor\n--\t\t\tstr[block_start]..str[block_end+3] needs to be loaded into\n--\t\t\tstring_table[block_start-offset]..string_table[block_end-offset]\n--\t\t\tIf dictionary is presented, the last 258 bytes of the dictionary\n--\t\t\tneeds to be loaded into sing_table[-257..0]\n--\t\t\t(See more in the description of offset.)\n-- @param hash_tables. The table key is the hash value (0<=hash<=16777216=256^3)\n--\t\t\tThe table value is an array0 that stores the indexes of the\n--\t\t\tinput data string to be compressed, such that\n--\t\t\thash == str[index]*str[index+1]*str[index+2]\n--\t\t\tIndexes are ordered in this array.\n-- @param block_start The indexes of the input data string to be compressed.\n--\t\t\t\tthat starts the LZ77 block.\n-- @param block_end The indexes of the input data string to be compressed.\n--\t\t\t\tthat stores the LZ77 block.\n-- @param offset str[index] is stored in string_table[index-offset],\n--\t\t\tThis offset is mainly an optimization to limit the index\n--\t\t\tof string_table, so lua can access this table quicker.\n-- @param dictionary See LibDeflate:CreateDictionary\n-- @return literal/LZ77_length deflate codes.\n-- @return the extra bits of literal/LZ77_length deflate codes.\n-- @return the count of each literal/LZ77 deflate code.\n-- @return LZ77 distance deflate codes.\n-- @return the extra bits of LZ77 distance deflate codes.\n-- @return the count of each LZ77 distance deflate code.\nlocal function GetBlockLZ77Result(level, string_table, hash_tables, block_start,\n\t\tblock_end, offset, dictionary)\n\tlocal config = _compression_level_configs[level]\n\tlocal config_use_lazy\n\t\t, config_good_prev_length\n\t\t, config_max_lazy_match\n\t\t, config_nice_length\n\t\t, config_max_hash_chain =\n\t\t\tconfig[1], config[2], config[3], config[4], config[5]\n\n\tlocal config_max_insert_length = (not config_use_lazy)\n\t\tand config_max_lazy_match or 2147483646\n\tlocal config_good_hash_chain =\n\t\t(config_max_hash_chain-config_max_hash_chain%4/4)\n\n\tlocal hash\n\n\tlocal dict_hash_tables\n\tlocal dict_string_table\n\tlocal dict_string_len = 0\n\n\tif dictionary then\n\t\tdict_hash_tables = dictionary.hash_tables\n\t\tdict_string_table = dictionary.string_table\n\t\tdict_string_len = dictionary.strlen\n\t\tassert(block_start == 1)\n\t\tif block_end >= block_start and dict_string_len >= 2 then\n\t\t\thash = dict_string_table[dict_string_len-1]*65536\n\t\t\t\t+ dict_string_table[dict_string_len]*256 + string_table[1]\n\t\t\tlocal t = hash_tables[hash]\n\t\t\tif not t then t = {}; hash_tables[hash] = t end\n\t\t\tt[#t+1] = -1\n\t\tend\n\t\tif block_end >= block_start+1 and dict_string_len >= 1 then\n\t\t\thash = dict_string_table[dict_string_len]*65536\n\t\t\t\t+ string_table[1]*256 + string_table[2]\n\t\t\tlocal t = hash_tables[hash]\n\t\t\tif not t then t = {}; hash_tables[hash] = t end\n\t\t\tt[#t+1] = 0\n\t\tend\n\tend\n\n\thash = (string_table[block_start-offset] or 0)*256\n\t\t+ (string_table[block_start+1-offset] or 0)\n\n\tlocal lcodes = {}\n\tlocal lcode_tblsize = 0\n\tlocal lcodes_counts = {}\n\tlocal dcodes = {}\n\tlocal dcodes_tblsize = 0\n\tlocal dcodes_counts = {}\n\n\tlocal lextra_bits = {}\n\tlocal lextra_bits_tblsize = 0\n\tlocal dextra_bits = {}\n\tlocal dextra_bits_tblsize = 0\n\n\tlocal match_available = false\n\tlocal prev_len\n\tlocal prev_dist\n\tlocal cur_len = 0\n\tlocal cur_dist = 0\n\n\tlocal index = block_start\n\tlocal index_end = block_end + (config_use_lazy and 1 or 0)\n\n\t-- the zlib source code writes separate code for lazy evaluation and\n\t-- not lazy evaluation, which is easier to understand.\n\t-- I put them together, so it is a bit harder to understand.\n\t-- because I think this is easier for me to maintain it.\n\twhile (index <= index_end) do\n\t\tlocal string_table_index = index - offset\n\t\tprev_len = cur_len\n\t\tprev_dist = cur_dist\n\t\tcur_len = 0\n\n\t\thash = (hash*256+(string_table[string_table_index+2] or 0))%16777216\n\n\t\tlocal chain_index\n\t\tlocal cur_chain\n\t\tlocal hash_chain = hash_tables[hash]\n\t\tlocal chain_old_size\n\t\tif not hash_chain then\n\t\t\tchain_old_size = 0\n\t\t\thash_chain = {}\n\t\t\thash_tables[hash] = hash_chain\n\t\t\tif dict_hash_tables then\n\t\t\t\tcur_chain = dict_hash_tables[hash]\n\t\t\t\tchain_index = cur_chain and #cur_chain or 0\n\t\t\telse\n\t\t\t\tchain_index = 0\n\t\t\tend\n\t\telse\n\t\t\tchain_old_size = #hash_chain\n\t\t\tcur_chain = hash_chain\n\t\t\tchain_index = chain_old_size\n\t\tend\n\n\t\tif index <= block_end then\n\t\t\thash_chain[chain_old_size+1] = index\n\t\tend\n\n\t\tif (chain_index > 0 and index + 2 <= block_end\n\t\t\tand (not config_use_lazy or prev_len < config_max_lazy_match)) then\n\n\t\t\tlocal depth =\n\t\t\t\t(config_use_lazy and prev_len >= config_good_prev_length)\n\t\t\t\tand config_good_hash_chain or config_max_hash_chain\n\n\t\t\twhile chain_index >= 1 and depth > 0 do\n\t\t\t\tlocal prev = cur_chain[chain_index]\n\n\t\t\t\tif index - prev > 32768 then\n\t\t\t\t\tbreak\n\t\t\t\tend\n\t\t\t\tif prev < index then\n\t\t\t\t\tlocal j = 3\n\n\t\t\t\t\tif prev >= -257 then\n\t\t\t\t\t\tlocal prev_table_index = prev-offset\n\t\t\t\t\t\t-- NOTE for author:\n\t\t\t\t\t\t-- j < 258 and index + j <= block_end\n\t\t\t\t\t\t-- This is the right condition\n\t\t\t\t\t\twhile (j < 258 and index + j <= block_end) do\n\t\t\t\t\t\t\tif (string_table[prev_table_index+j]\n\t\t\t\t\t\t\t\t== string_table[string_table_index+j]) then\n\t\t\t\t\t\t\t\tj = j + 1\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\telse\n\t\t\t\t\t\tlocal prev_table_index = dict_string_len+prev\n\t\t\t\t\t\t-- NOTE for author:\n\t\t\t\t\t\t-- j < 258 and index + j <= block_end\n\t\t\t\t\t\t-- This is the right condition\n\t\t\t\t\t\twhile (j < 258 and index + j <= block_end) do\n\t\t\t\t\t\t\tif (dict_string_table[prev_table_index+j]\n\t\t\t\t\t\t\t\t== string_table[string_table_index+j]) then\n\t\t\t\t\t\t\t\tj = j + 1\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\tif j > cur_len then\n\t\t\t\t\t\tcur_len = j\n\t\t\t\t\t\tcur_dist = index - prev\n\t\t\t\t\tend\n\t\t\t\t\tif cur_len >= config_nice_length then\n\t\t\t\t\t\tbreak\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\t\tchain_index = chain_index - 1\n\t\t\t\tdepth = depth - 1\n\t\t\t\tif chain_index == 0 and prev > 0 and dict_hash_tables then\n\t\t\t\t\tcur_chain = dict_hash_tables[hash]\n\t\t\t\t\tchain_index = cur_chain and #cur_chain or 0\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\n\t\tif not config_use_lazy then\n\t\t\tprev_len, prev_dist = cur_len, cur_dist\n\t\tend\n\t\tif ((not config_use_lazy or match_available)\n\t\t\tand (prev_len > 3 or (prev_len == 3 and prev_dist < 4096))\n\t\t\tand cur_len <= prev_len )then\n\t\t\tlocal code = _length_to_deflate_code[prev_len]\n\t\t\tlocal length_extra_bits_bitlen =\n\t\t\t\t_length_to_deflate_extra_bitlen[prev_len]\n\t\t\tlocal dist_code, dist_extra_bits_bitlen, dist_extra_bits\n\t\t\tif prev_dist <= 256 then -- have cached code for small distance.\n\t\t\t\tdist_code = _dist256_to_deflate_code[prev_dist]\n\t\t\t\tdist_extra_bits = _dist256_to_deflate_extra_bits[prev_dist]\n\t\t\t\tdist_extra_bits_bitlen =\n\t\t\t\t\t_dist256_to_deflate_extra_bitlen[prev_dist]\n\t\t\telse\n\t\t\t\tdist_code = 16\n\t\t\t\tdist_extra_bits_bitlen = 7\n\t\t\t\tlocal a = 384\n\t\t\t\tlocal b = 512\n\n\t\t\t\twhile true do\n\t\t\t\t\tif prev_dist <= a then\n\t\t\t\t\t\tdist_extra_bits = (prev_dist-(b/2)-1) % (b/4)\n\t\t\t\t\t\tbreak\n\t\t\t\t\telseif prev_dist <= b then\n\t\t\t\t\t\tdist_extra_bits = (prev_dist-(b/2)-1) % (b/4)\n\t\t\t\t\t\tdist_code = dist_code + 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\telse\n\t\t\t\t\t\tdist_code = dist_code + 2\n\t\t\t\t\t\tdist_extra_bits_bitlen = dist_extra_bits_bitlen + 1\n\t\t\t\t\t\ta = a*2\n\t\t\t\t\t\tb = b*2\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tlcode_tblsize = lcode_tblsize + 1\n\t\t\tlcodes[lcode_tblsize] = code\n\t\t\tlcodes_counts[code] = (lcodes_counts[code] or 0) + 1\n\n\t\t\tdcodes_tblsize = dcodes_tblsize + 1\n\t\t\tdcodes[dcodes_tblsize] = dist_code\n\t\t\tdcodes_counts[dist_code] = (dcodes_counts[dist_code] or 0) + 1\n\n\t\t\tif length_extra_bits_bitlen > 0 then\n\t\t\t\tlocal lenExtraBits = _length_to_deflate_extra_bits[prev_len]\n\t\t\t\tlextra_bits_tblsize = lextra_bits_tblsize + 1\n\t\t\t\tlextra_bits[lextra_bits_tblsize] = lenExtraBits\n\t\t\tend\n\t\t\tif dist_extra_bits_bitlen > 0 then\n\t\t\t\tdextra_bits_tblsize = dextra_bits_tblsize + 1\n\t\t\t\tdextra_bits[dextra_bits_tblsize] = dist_extra_bits\n\t\t\tend\n\n\t\t\tfor i=index+1, index+prev_len-(config_use_lazy and 2 or 1) do\n\t\t\t\thash = (hash*256+(string_table[i-offset+2] or 0))%16777216\n\t\t\t\tif prev_len <= config_max_insert_length then\n\t\t\t\t\thash_chain = hash_tables[hash]\n\t\t\t\t\tif not hash_chain then\n\t\t\t\t\t\thash_chain = {}\n\t\t\t\t\t\thash_tables[hash] = hash_chain\n\t\t\t\t\tend\n\t\t\t\t\thash_chain[#hash_chain+1] = i\n\t\t\t\tend\n\t\t\tend\n\t\t\tindex = index + prev_len - (config_use_lazy and 1 or 0)\n\t\t\tmatch_available = false\n\t\telseif (not config_use_lazy) or match_available then\n\t\t\tlocal code = string_table[config_use_lazy\n\t\t\t\tand (string_table_index-1) or string_table_index]\n\t\t\tlcode_tblsize = lcode_tblsize + 1\n\t\t\tlcodes[lcode_tblsize] = code\n\t\t\tlcodes_counts[code] = (lcodes_counts[code] or 0) + 1\n\t\t\tindex = index + 1\n\t\telse\n\t\t\tmatch_available = true\n\t\t\tindex = index + 1\n\t\tend\n\tend\n\n\t-- Write \"end of block\" symbol\n\tlcode_tblsize = lcode_tblsize + 1\n\tlcodes[lcode_tblsize] = 256\n\tlcodes_counts[256] = (lcodes_counts[256] or 0) + 1\n\n\treturn lcodes, lextra_bits, lcodes_counts, dcodes, dextra_bits\n\t\t, dcodes_counts\nend\n\n-- Get the header data of dynamic block.\n-- @param lcodes_count The count of each literal/LZ77_length codes.\n-- @param dcodes_count The count of each Lz77 distance codes.\n-- @return a lots of stuffs.\n-- @see RFC1951 Page 12\nlocal function GetBlockDynamicHuffmanHeader(lcodes_counts, dcodes_counts)\n\tlocal lcodes_huffman_bitlens, lcodes_huffman_codes\n\t\t, max_non_zero_bitlen_lcode =\n\t\tGetHuffmanBitlenAndCode(lcodes_counts, 15, 285)\n\tlocal dcodes_huffman_bitlens, dcodes_huffman_codes\n\t\t, max_non_zero_bitlen_dcode =\n\t\tGetHuffmanBitlenAndCode(dcodes_counts, 15, 29)\n\n\tlocal rle_deflate_codes, rle_extra_bits, rle_codes_counts =\n\t\tRunLengthEncodeHuffmanBitlen(lcodes_huffman_bitlens\n\t\t,max_non_zero_bitlen_lcode, dcodes_huffman_bitlens\n\t\t, max_non_zero_bitlen_dcode)\n\n\tlocal rle_codes_huffman_bitlens, rle_codes_huffman_codes =\n\t\tGetHuffmanBitlenAndCode(rle_codes_counts, 7, 18)\n\n\tlocal HCLEN = 0\n\tfor i = 1, 19 do\n\t\tlocal symbol = _rle_codes_huffman_bitlen_order[i]\n\t\tlocal length = rle_codes_huffman_bitlens[symbol] or 0\n\t\tif length ~= 0 then\n\t\t\tHCLEN = i\n\t\tend\n\tend\n\n\tHCLEN = HCLEN - 4\n\tlocal HLIT = max_non_zero_bitlen_lcode + 1 - 257\n\tlocal HDIST = max_non_zero_bitlen_dcode + 1 - 1\n\tif HDIST < 0 then HDIST = 0 end\n\n\treturn HLIT, HDIST, HCLEN, rle_codes_huffman_bitlens\n\t\t, rle_codes_huffman_codes, rle_deflate_codes, rle_extra_bits\n\t\t, lcodes_huffman_bitlens, lcodes_huffman_codes\n\t\t, dcodes_huffman_bitlens, dcodes_huffman_codes\nend\n\n-- Get the size of dynamic block without writing any bits into the writer.\n-- @param ... Read the source code of GetBlockDynamicHuffmanHeader()\n-- @return the bit length of the dynamic block\nlocal function GetDynamicHuffmanBlockSize(lcodes, dcodes, HCLEN\n\t, rle_codes_huffman_bitlens, rle_deflate_codes\n\t, lcodes_huffman_bitlens, dcodes_huffman_bitlens)\n\n\tlocal block_bitlen = 17 -- 1+2+5+5+4\n\tblock_bitlen = block_bitlen + (HCLEN+4)*3\n\n\tfor i = 1, #rle_deflate_codes do\n\t\tlocal code = rle_deflate_codes[i]\n\t\tblock_bitlen = block_bitlen + rle_codes_huffman_bitlens[code]\n\t\tif code >= 16 then\n\t\t\tblock_bitlen = block_bitlen +\n\t\t\t((code == 16) and 2 or (code == 17 and 3 or 7))\n\t\tend\n\tend\n\n\tlocal length_code_count = 0\n\tfor i = 1, #lcodes do\n\t\tlocal code = lcodes[i]\n\t\tlocal huffman_bitlen = lcodes_huffman_bitlens[code]\n\t\tblock_bitlen = block_bitlen + huffman_bitlen\n\t\tif code > 256 then -- Length code\n\t\t\tlength_code_count = length_code_count + 1\n\t\t\tif code > 264 and code < 285 then -- Length code with extra bits\n\t\t\t\tlocal extra_bits_bitlen =\n\t\t\t\t\t_literal_deflate_code_to_extra_bitlen[code-256]\n\t\t\t\tblock_bitlen = block_bitlen + extra_bits_bitlen\n\t\t\tend\n\t\t\tlocal dist_code = dcodes[length_code_count]\n\t\t\tlocal dist_huffman_bitlen = dcodes_huffman_bitlens[dist_code]\n\t\t\tblock_bitlen = block_bitlen + dist_huffman_bitlen\n\n\t\t\tif dist_code > 3 then -- dist code with extra bits\n\t\t\t\tlocal dist_extra_bits_bitlen = (dist_code-dist_code%2)/2 - 1\n\t\t\t\tblock_bitlen = block_bitlen + dist_extra_bits_bitlen\n\t\t\tend\n\t\tend\n\tend\n\treturn block_bitlen\nend\n\n-- Write dynamic block.\n-- @param ... Read the source code of GetBlockDynamicHuffmanHeader()\nlocal function CompressDynamicHuffmanBlock(WriteBits, is_last_block\n\t\t, lcodes, lextra_bits, dcodes, dextra_bits, HLIT, HDIST, HCLEN\n\t\t, rle_codes_huffman_bitlens, rle_codes_huffman_codes\n\t\t, rle_deflate_codes, rle_extra_bits\n\t\t, lcodes_huffman_bitlens, lcodes_huffman_codes\n\t\t, dcodes_huffman_bitlens, dcodes_huffman_codes)\n\n\tWriteBits(is_last_block and 1 or 0, 1) -- Last block identifier\n\tWriteBits(2, 2) -- Dynamic Huffman block identifier\n\n\tWriteBits(HLIT, 5)\n\tWriteBits(HDIST, 5)\n\tWriteBits(HCLEN, 4)\n\n\tfor i = 1, HCLEN+4 do\n\t\tlocal symbol = _rle_codes_huffman_bitlen_order[i]\n\t\tlocal length = rle_codes_huffman_bitlens[symbol] or 0\n\t\tWriteBits(length, 3)\n\tend\n\n\tlocal rleExtraBitsIndex = 1\n\tfor i=1, #rle_deflate_codes do\n\t\tlocal code = rle_deflate_codes[i]\n\t\tWriteBits(rle_codes_huffman_codes[code]\n\t\t\t, rle_codes_huffman_bitlens[code])\n\t\tif code >= 16 then\n\t\t\tlocal extraBits = rle_extra_bits[rleExtraBitsIndex]\n\t\t\tWriteBits(extraBits, (code == 16) and 2 or (code == 17 and 3 or 7))\n\t\t\trleExtraBitsIndex = rleExtraBitsIndex + 1\n\t\tend\n\tend\n\n\tlocal length_code_count = 0\n\tlocal length_code_with_extra_count = 0\n\tlocal dist_code_with_extra_count = 0\n\n\tfor i=1, #lcodes do\n\t\tlocal deflate_codee = lcodes[i]\n\t\tlocal huffman_code = lcodes_huffman_codes[deflate_codee]\n\t\tlocal huffman_bitlen = lcodes_huffman_bitlens[deflate_codee]\n\t\tWriteBits(huffman_code, huffman_bitlen)\n\t\tif deflate_codee > 256 then -- Length code\n\t\t\tlength_code_count = length_code_count + 1\n\t\t\tif deflate_codee > 264 and deflate_codee < 285 then\n\t\t\t\t-- Length code with extra bits\n\t\t\t\tlength_code_with_extra_count = length_code_with_extra_count + 1\n\t\t\t\tlocal extra_bits = lextra_bits[length_code_with_extra_count]\n\t\t\t\tlocal extra_bits_bitlen =\n\t\t\t\t\t_literal_deflate_code_to_extra_bitlen[deflate_codee-256]\n\t\t\t\tWriteBits(extra_bits, extra_bits_bitlen)\n\t\t\tend\n\t\t\t-- Write distance code\n\t\t\tlocal dist_deflate_code = dcodes[length_code_count]\n\t\t\tlocal dist_huffman_code = dcodes_huffman_codes[dist_deflate_code]\n\t\t\tlocal dist_huffman_bitlen =\n\t\t\t\tdcodes_huffman_bitlens[dist_deflate_code]\n\t\t\tWriteBits(dist_huffman_code, dist_huffman_bitlen)\n\n\t\t\tif dist_deflate_code > 3 then -- dist code with extra bits\n\t\t\t\tdist_code_with_extra_count = dist_code_with_extra_count + 1\n\t\t\t\tlocal dist_extra_bits = dextra_bits[dist_code_with_extra_count]\n\t\t\t\tlocal dist_extra_bits_bitlen =\n\t\t\t\t\t(dist_deflate_code-dist_deflate_code%2)/2 - 1\n\t\t\t\tWriteBits(dist_extra_bits, dist_extra_bits_bitlen)\n\t\t\tend\n\t\tend\n\tend\nend\n\n-- Get the size of fixed block without writing any bits into the writer.\n-- @param lcodes literal/LZ77_length deflate codes\n-- @param decodes LZ77 distance deflate codes\n-- @return the bit length of the fixed block\nlocal function GetFixedHuffmanBlockSize(lcodes, dcodes)\n\tlocal block_bitlen = 3\n\tlocal length_code_count = 0\n\tfor i=1, #lcodes do\n\t\tlocal code = lcodes[i]\n\t\tlocal huffman_bitlen = _fix_block_literal_huffman_bitlen[code]\n\t\tblock_bitlen = block_bitlen + huffman_bitlen\n\t\tif code > 256 then -- Length code\n\t\t\tlength_code_count = length_code_count + 1\n\t\t\tif code > 264 and code < 285 then -- Length code with extra bits\n\t\t\t\tlocal extra_bits_bitlen =\n\t\t\t\t\t_literal_deflate_code_to_extra_bitlen[code-256]\n\t\t\t\tblock_bitlen = block_bitlen + extra_bits_bitlen\n\t\t\tend\n\t\t\tlocal dist_code = dcodes[length_code_count]\n\t\t\tblock_bitlen = block_bitlen + 5\n\n\t\t\tif dist_code > 3 then -- dist code with extra bits\n\t\t\t\tlocal dist_extra_bits_bitlen =\n\t\t\t\t\t(dist_code-dist_code%2)/2 - 1\n\t\t\t\tblock_bitlen = block_bitlen + dist_extra_bits_bitlen\n\t\t\tend\n\t\tend\n\tend\n\treturn block_bitlen\nend\n\n-- Write fixed block.\n-- @param lcodes literal/LZ77_length deflate codes\n-- @param decodes LZ77 distance deflate codes\nlocal function CompressFixedHuffmanBlock(WriteBits, is_last_block,\n\t\tlcodes, lextra_bits, dcodes, dextra_bits)\n\tWriteBits(is_last_block and 1 or 0, 1) -- Last block identifier\n\tWriteBits(1, 2) -- Fixed Huffman block identifier\n\tlocal length_code_count = 0\n\tlocal length_code_with_extra_count = 0\n\tlocal dist_code_with_extra_count = 0\n\tfor i=1, #lcodes do\n\t\tlocal deflate_code = lcodes[i]\n\t\tlocal huffman_code = _fix_block_literal_huffman_code[deflate_code]\n\t\tlocal huffman_bitlen = _fix_block_literal_huffman_bitlen[deflate_code]\n\t\tWriteBits(huffman_code, huffman_bitlen)\n\t\tif deflate_code > 256 then -- Length code\n\t\t\tlength_code_count = length_code_count + 1\n\t\t\tif deflate_code > 264 and deflate_code < 285 then\n\t\t\t\t-- Length code with extra bits\n\t\t\t\tlength_code_with_extra_count = length_code_with_extra_count + 1\n\t\t\t\tlocal extra_bits = lextra_bits[length_code_with_extra_count]\n\t\t\t\tlocal extra_bits_bitlen =\n\t\t\t\t\t_literal_deflate_code_to_extra_bitlen[deflate_code-256]\n\t\t\t\tWriteBits(extra_bits, extra_bits_bitlen)\n\t\t\tend\n\t\t\t-- Write distance code\n\t\t\tlocal dist_code = dcodes[length_code_count]\n\t\t\tlocal dist_huffman_code = _fix_block_dist_huffman_code[dist_code]\n\t\t\tWriteBits(dist_huffman_code, 5)\n\n\t\t\tif dist_code > 3 then -- dist code with extra bits\n\t\t\t\tdist_code_with_extra_count = dist_code_with_extra_count + 1\n\t\t\t\tlocal dist_extra_bits = dextra_bits[dist_code_with_extra_count]\n\t\t\t\tlocal dist_extra_bits_bitlen = (dist_code-dist_code%2)/2 - 1\n\t\t\t\tWriteBits(dist_extra_bits, dist_extra_bits_bitlen)\n\t\t\tend\n\t\tend\n\tend\nend\n\n-- Get the size of store block without writing any bits into the writer.\n-- @param block_start The start index of the origin input string\n-- @param block_end The end index of the origin input string\n-- @param Total bit lens had been written into the compressed result before,\n-- because store block needs to shift to byte boundary.\n-- @return the bit length of the fixed block\nlocal function GetStoreBlockSize(block_start, block_end, total_bitlen)\n\tassert(block_end-block_start+1 <= 65535)\n\tlocal block_bitlen = 3\n\ttotal_bitlen = total_bitlen + 3\n\tlocal padding_bitlen = (8-total_bitlen%8)%8\n\tblock_bitlen = block_bitlen + padding_bitlen\n\tblock_bitlen = block_bitlen + 32\n\tblock_bitlen = block_bitlen + (block_end - block_start + 1) * 8\n\treturn block_bitlen\nend\n\n-- Write the store block.\n-- @param ... lots of stuffs\n-- @return nil\nlocal function CompressStoreBlock(WriteBits, WriteString, is_last_block, str\n\t, block_start, block_end, total_bitlen)\n\tassert(block_end-block_start+1 <= 65535)\n\tWriteBits(is_last_block and 1 or 0, 1) -- Last block identifer.\n\tWriteBits(0, 2) -- Store block identifier.\n\ttotal_bitlen = total_bitlen + 3\n\tlocal padding_bitlen = (8-total_bitlen%8)%8\n\tif padding_bitlen > 0 then\n\t\tWriteBits(_pow2[padding_bitlen]-1, padding_bitlen)\n\tend\n\tlocal size = block_end - block_start + 1\n\tWriteBits(size, 16)\n\n\t-- Write size's one's complement\n\tlocal comp = (255 - size % 256) + (255 - (size-size%256)/256)*256\n\tWriteBits(comp, 16)\n\n\tWriteString(str:sub(block_start, block_end))\nend\n\n-- Do the deflate\n-- Currently using a simple way to determine the block size\n-- (This is why the compression ratio is little bit worse than zlib when\n-- the input size is very large\n-- The first block is 64KB, the following block is 32KB.\n-- After each block, there is a memory cleanup operation.\n-- This is not a fast operation, but it is needed to save memory usage, so\n-- the memory usage does not grow unboundly. If the data size is less than\n-- 64KB, then memory cleanup won't happen.\n-- This function determines whether to use store/fixed/dynamic blocks by\n-- calculating the block size of each block type and chooses the smallest one.\nlocal function Deflate(configs, WriteBits, WriteString, FlushWriter, str\n\t, dictionary)\n\tlocal string_table = {}\n\tlocal hash_tables = {}\n\tlocal is_last_block = nil\n\tlocal block_start\n\tlocal block_end\n\tlocal bitlen_written\n\tlocal total_bitlen = FlushWriter(_FLUSH_MODE_NO_FLUSH)\n\tlocal strlen = #str\n\tlocal offset\n\n\tlocal level\n\tlocal strategy\n\tif configs then\n\t\tif configs.level then\n\t\t\tlevel = configs.level\n\t\tend\n\t\tif configs.strategy then\n\t\t\tstrategy = configs.strategy\n\t\tend\n\tend\n\n\tif not level then\n\t\tif strlen < 2048 then\n\t\t\tlevel = 7\n\t\telseif strlen > 65536 then\n\t\t\tlevel = 3\n\t\telse\n\t\t\tlevel = 5\n\t\tend\n\tend\n\n\twhile not is_last_block do\n\t\tif not block_start then\n\t\t\tblock_start = 1\n\t\t\tblock_end = 64*1024 - 1\n\t\t\toffset = 0\n\t\telse\n\t\t\tblock_start = block_end + 1\n\t\t\tblock_end = block_end + 32*1024\n\t\t\toffset = block_start - 32*1024 - 1\n\t\tend\n\n\t\tif block_end >= strlen then\n\t\t\tblock_end = strlen\n\t\t\tis_last_block = true\n\t\telse\n\t\t\tis_last_block = false\n\t\tend\n\n\t\tlocal lcodes, lextra_bits, lcodes_counts, dcodes, dextra_bits\n\t\t\t, dcodes_counts\n\n\t\tlocal HLIT, HDIST, HCLEN, rle_codes_huffman_bitlens\n\t\t\t, rle_codes_huffman_codes, rle_deflate_codes\n\t\t\t, rle_extra_bits, lcodes_huffman_bitlens, lcodes_huffman_codes\n\t\t\t, dcodes_huffman_bitlens, dcodes_huffman_codes\n\n\t\tlocal dynamic_block_bitlen\n\t\tlocal fixed_block_bitlen\n\t\tlocal store_block_bitlen\n\n\t\tif level ~= 0 then\n\n\t\t\t-- GetBlockLZ77 needs block_start to block_end+3 to be loaded.\n\t\t\tLoadStringToTable(str, string_table, block_start, block_end + 3\n\t\t\t\t, offset)\n\t\t\tif block_start == 1 and dictionary then\n\t\t\t\tlocal dict_string_table = dictionary.string_table\n\t\t\t\tlocal dict_strlen = dictionary.strlen\n\t\t\t\tfor i=0, (-dict_strlen+1)<-257\n\t\t\t\t\tand -257 or (-dict_strlen+1), -1 do\n\t\t\t\t\tstring_table[i] = dict_string_table[dict_strlen+i]\n\t\t\t\tend\n\t\t\tend\n\n\t\t\tif strategy == \"huffman_only\" then\n\t\t\t\tlcodes = {}\n\t\t\t\tLoadStringToTable(str, lcodes, block_start, block_end\n\t\t\t\t\t, block_start-1)\n\t\t\t\tlextra_bits = {}\n\t\t\t\tlcodes_counts = {}\n\t\t\t\tlcodes[block_end - block_start+2] = 256 -- end of block\n\t\t\t\tfor i=1, block_end - block_start+2 do\n\t\t\t\t\tlocal code = lcodes[i]\n\t\t\t\t\tlcodes_counts[code] = (lcodes_counts[code] or 0) + 1\n\t\t\t\tend\n\t\t\t\tdcodes = {}\n\t\t\t\tdextra_bits = {}\n\t\t\t\tdcodes_counts = {}\n\t\t\telse\n\t\t\t\tlcodes, lextra_bits, lcodes_counts, dcodes, dextra_bits\n\t\t\t\t, dcodes_counts = GetBlockLZ77Result(level, string_table\n\t\t\t\t, hash_tables, block_start, block_end, offset, dictionary\n\t\t\t\t)\n\t\t\tend\n\n\t\t\tHLIT, HDIST, HCLEN, rle_codes_huffman_bitlens\n\t\t\t\t, rle_codes_huffman_codes, rle_deflate_codes\n\t\t\t\t, rle_extra_bits, lcodes_huffman_bitlens, lcodes_huffman_codes\n\t\t\t\t, dcodes_huffman_bitlens, dcodes_huffman_codes =\n\t\t\t\tGetBlockDynamicHuffmanHeader(lcodes_counts, dcodes_counts)\n\t\t\tdynamic_block_bitlen = GetDynamicHuffmanBlockSize(\n\t\t\t\t\tlcodes, dcodes, HCLEN, rle_codes_huffman_bitlens\n\t\t\t\t\t, rle_deflate_codes, lcodes_huffman_bitlens\n\t\t\t\t\t, dcodes_huffman_bitlens)\n\t\t\tfixed_block_bitlen = GetFixedHuffmanBlockSize(lcodes, dcodes)\n\t\tend\n\n\t\tstore_block_bitlen = GetStoreBlockSize(block_start, block_end\n\t\t\t, total_bitlen)\n\n\t\tlocal min_bitlen = store_block_bitlen\n\t\tmin_bitlen = (fixed_block_bitlen and fixed_block_bitlen < min_bitlen)\n\t\t\tand fixed_block_bitlen or min_bitlen\n\t\tmin_bitlen = (dynamic_block_bitlen\n\t\t\tand dynamic_block_bitlen < min_bitlen)\n\t\t\tand dynamic_block_bitlen or min_bitlen\n\n\t\tif level == 0 or (strategy ~= \"fixed\" and strategy ~= \"dynamic\" and\n\t\t\tstore_block_bitlen == min_bitlen) then\n\t\t\tCompressStoreBlock(WriteBits, WriteString, is_last_block\n\t\t\t\t, str, block_start, block_end, total_bitlen)\n\t\t\ttotal_bitlen = total_bitlen + store_block_bitlen\n\t\telseif strategy ~= \"dynamic\" and (\n\t\t\tstrategy == \"fixed\" or fixed_block_bitlen == min_bitlen) then\n\t\t\tCompressFixedHuffmanBlock(WriteBits, is_last_block,\n\t\t\t\t\tlcodes, lextra_bits, dcodes, dextra_bits)\n\t\t\ttotal_bitlen = total_bitlen + fixed_block_bitlen\n\t\telseif strategy == \"dynamic\" or dynamic_block_bitlen == min_bitlen then\n\t\t\tCompressDynamicHuffmanBlock(WriteBits, is_last_block, lcodes\n\t\t\t\t, lextra_bits, dcodes, dextra_bits, HLIT, HDIST, HCLEN\n\t\t\t\t, rle_codes_huffman_bitlens, rle_codes_huffman_codes\n\t\t\t\t, rle_deflate_codes, rle_extra_bits\n\t\t\t\t, lcodes_huffman_bitlens, lcodes_huffman_codes\n\t\t\t\t, dcodes_huffman_bitlens, dcodes_huffman_codes)\n\t\t\ttotal_bitlen = total_bitlen + dynamic_block_bitlen\n\t\tend\n\n\t\tif is_last_block then\n\t\t\tbitlen_written = FlushWriter(_FLUSH_MODE_NO_FLUSH)\n\t\telse\n\t\t\tbitlen_written = FlushWriter(_FLUSH_MODE_MEMORY_CLEANUP)\n\t\tend\n\n\t\tassert(bitlen_written == total_bitlen)\n\n\t\t-- Memory clean up, so memory consumption does not always grow linearly\n\t\t-- , even if input string is > 64K.\n\t\t-- Not a very efficient operation, but this operation won't happen\n\t\t-- when the input data size is less than 64K.\n\t\tif not is_last_block then\n\t\t\tlocal j\n\t\t\tif dictionary and block_start == 1 then\n\t\t\t\tj = 0\n\t\t\t\twhile (string_table[j]) do\n\t\t\t\t\tstring_table[j] = nil\n\t\t\t\t\tj = j - 1\n\t\t\t\tend\n\t\t\tend\n\t\t\tdictionary = nil\n\t\t\tj = 1\n\t\t\tfor i = block_end-32767, block_end do\n\t\t\t\tstring_table[j] = string_table[i-offset]\n\t\t\t\tj = j + 1\n\t\t\tend\n\n\t\t\tfor k, t in pairs(hash_tables) do\n\t\t\t\tlocal tSize = #t\n\t\t\t\tif tSize > 0 and block_end+1 - t[1] > 32768 then\n\t\t\t\t\tif tSize == 1 then\n\t\t\t\t\t\thash_tables[k] = nil\n\t\t\t\t\telse\n\t\t\t\t\t\tlocal new = {}\n\t\t\t\t\t\tlocal newSize = 0\n\t\t\t\t\t\tfor i = 2, tSize do\n\t\t\t\t\t\t\tj = t[i]\n\t\t\t\t\t\t\tif block_end+1 - j <= 32768 then\n\t\t\t\t\t\t\t\tnewSize = newSize + 1\n\t\t\t\t\t\t\t\tnew[newSize] = j\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\thash_tables[k] = new\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend\n\n--- The description to compression configuration table. <br>\n-- Any field can be nil to use its default. <br>\n-- Table with keys other than those below is an invalid table.\n-- @class table\n-- @name compression_configs\n-- @field level The compression level ranged from 0 to 9. 0 is no compression.\n-- 9 is the slowest but best compression. Use nil for default level.\n-- @field strategy The compression strategy. \"fixed\" to only use fixed deflate\n-- compression block. \"dynamic\" to only use dynamic block. \"huffman_only\" to\n-- do no LZ77 compression. Only do huffman compression.\n\n\n-- @see LibDeflate:CompressDeflate(str, configs)\n-- @see LibDeflate:CompressDeflateWithDict(str, dictionary, configs)\nlocal function CompressDeflateInternal(str, dictionary, configs)\n\tlocal WriteBits, WriteString, FlushWriter = CreateWriter()\n\tDeflate(configs, WriteBits, WriteString, FlushWriter, str, dictionary)\n\tlocal total_bitlen, result = FlushWriter(_FLUSH_MODE_OUTPUT)\n\tlocal padding_bitlen = (8-total_bitlen%8)%8\n\treturn result, padding_bitlen\nend\n\n-- @see LibDeflate:CompressZlib\n-- @see LibDeflate:CompressZlibWithDict\nlocal function CompressZlibInternal(str, dictionary, configs)\n\tlocal WriteBits, WriteString, FlushWriter = CreateWriter()\n\n\tlocal CM = 8 -- Compression method\n\tlocal CINFO = 7 --Window Size = 32K\n\tlocal CMF = CINFO*16+CM\n\tWriteBits(CMF, 8)\n\n\tlocal FDIST = dictionary and 1 or 0\n\tlocal FLEVEL = 2 -- Default compression\n\tlocal FLG = FLEVEL*64+FDIST*32\n\tlocal FCHECK = (31-(CMF*256+FLG)%31)\n\t-- The FCHECK value must be such that CMF and FLG,\n\t-- when viewed as a 16-bit unsigned integer stored\n\t-- in MSB order (CMF*256 + FLG), is a multiple of 31.\n\tFLG = FLG + FCHECK\n\tWriteBits(FLG, 8)\n\n\tif FDIST == 1 then\n\t\tlocal adler32 = dictionary.adler32\n\t\tlocal byte0 = adler32 % 256\n\t\tadler32 = (adler32 - byte0) / 256\n\t\tlocal byte1 = adler32 % 256\n\t\tadler32 = (adler32 - byte1) / 256\n\t\tlocal byte2 = adler32 % 256\n\t\tadler32 = (adler32 - byte2) / 256\n\t\tlocal byte3 = adler32 % 256\n\t\tWriteBits(byte3, 8)\n\t\tWriteBits(byte2, 8)\n\t\tWriteBits(byte1, 8)\n\t\tWriteBits(byte0, 8)\n\tend\n\n\tDeflate(configs, WriteBits, WriteString, FlushWriter, str, dictionary)\n\tFlushWriter(_FLUSH_MODE_BYTE_BOUNDARY)\n\n\tlocal adler32 = LibDeflate:Adler32(str)\n\n\t-- Most significant byte first\n\tlocal byte3 = adler32%256\n\tadler32 = (adler32 - byte3) / 256\n\tlocal byte2 = adler32%256\n\tadler32 = (adler32 - byte2) / 256\n\tlocal byte1 = adler32%256\n\tadler32 = (adler32 - byte1) / 256\n\tlocal byte0 = adler32%256\n\n\tWriteBits(byte0, 8)\n\tWriteBits(byte1, 8)\n\tWriteBits(byte2, 8)\n\tWriteBits(byte3, 8)\n\tlocal total_bitlen, result = FlushWriter(_FLUSH_MODE_OUTPUT)\n\tlocal padding_bitlen = (8-total_bitlen%8)%8\n\treturn result, padding_bitlen\nend\n\n--- Compress using the raw deflate format.\n-- @param str [string] The data to be compressed.\n-- @param configs [table/nil] The configuration table to control the compression\n-- . If nil, use the default configuration.\n-- @return [string] The compressed data.\n-- @return [integer] The number of bits padded at the end of output.\n-- 0 <= bits < 8  <br>\n-- This means the most significant \"bits\" of the last byte of the returned\n-- compressed data are padding bits and they don't affect decompression.\n-- You don't need to use this value unless you want to do some postprocessing\n-- to the compressed data.\n-- @see compression_configs\n-- @see LibDeflate:DecompressDeflate\nfunction LibDeflate:CompressDeflate(str, configs)\n\tlocal arg_valid, arg_err = IsValidArguments(str, false, nil, true, configs)\n\tif not arg_valid then\n\t\terror((\"Usage: LibDeflate:CompressDeflate(str, configs): \"\n\t\t\t..arg_err), 2)\n\tend\n\treturn CompressDeflateInternal(str, nil, configs)\nend\n\n--- Compress using the raw deflate format with a preset dictionary.\n-- @param str [string] The data to be compressed.\n-- @param dictionary [table] The preset dictionary produced by\n-- LibDeflate:CreateDictionary\n-- @param configs [table/nil] The configuration table to control the compression\n-- . If nil, use the default configuration.\n-- @return [string] The compressed data.\n-- @return [integer] The number of bits padded at the end of output.\n-- 0 <= bits < 8  <br>\n-- This means the most significant \"bits\" of the last byte of the returned\n-- compressed data are padding bits and they don't affect decompression.\n-- You don't need to use this value unless you want to do some postprocessing\n-- to the compressed data.\n-- @see compression_configs\n-- @see LibDeflate:CreateDictionary\n-- @see LibDeflate:DecompressDeflateWithDict\nfunction LibDeflate:CompressDeflateWithDict(str, dictionary, configs)\n\tlocal arg_valid, arg_err = IsValidArguments(str, true, dictionary\n\t\t, true, configs)\n\tif not arg_valid then\n\t\terror((\"Usage: LibDeflate:CompressDeflateWithDict\"\n\t\t\t..\"(str, dictionary, configs): \"\n\t\t\t..arg_err), 2)\n\tend\n\treturn CompressDeflateInternal(str, dictionary, configs)\nend\n\n--- Compress using the zlib format.\n-- @param str [string] the data to be compressed.\n-- @param configs [table/nil] The configuration table to control the compression\n-- . If nil, use the default configuration.\n-- @return [string] The compressed data.\n-- @return [integer] The number of bits padded at the end of output.\n-- Should always be 0.\n-- Zlib formatted compressed data never has padding bits at the end.\n-- @see compression_configs\n-- @see LibDeflate:DecompressZlib\nfunction LibDeflate:CompressZlib(str, configs)\n\tlocal arg_valid, arg_err = IsValidArguments(str, false, nil, true, configs)\n\tif not arg_valid then\n\t\terror((\"Usage: LibDeflate:CompressZlib(str, configs): \"\n\t\t\t..arg_err), 2)\n\tend\n\treturn CompressZlibInternal(str, nil, configs)\nend\n\n--- Compress using the zlib format with a preset dictionary.\n-- @param str [string] the data to be compressed.\n-- @param dictionary [table] A preset dictionary produced\n-- by LibDeflate:CreateDictionary()\n-- @param configs [table/nil] The configuration table to control the compression\n-- . If nil, use the default configuration.\n-- @return [string] The compressed data.\n-- @return [integer] The number of bits padded at the end of output.\n-- Should always be 0.\n-- Zlib formatted compressed data never has padding bits at the end.\n-- @see compression_configs\n-- @see LibDeflate:CreateDictionary\n-- @see LibDeflate:DecompressZlibWithDict\nfunction LibDeflate:CompressZlibWithDict(str, dictionary, configs)\n\tlocal arg_valid, arg_err = IsValidArguments(str, true, dictionary\n\t\t, true, configs)\n\tif not arg_valid then\n\t\terror((\"Usage: LibDeflate:CompressZlibWithDict\"\n\t\t\t..\"(str, dictionary, configs): \"\n\t\t\t..arg_err), 2)\n\tend\n\treturn CompressZlibInternal(str, dictionary, configs)\nend\n\n--[[ --------------------------------------------------------------------------\n\tDecompress code\n--]] --------------------------------------------------------------------------\n\n--[[\n\tCreate a reader to easily reader stuffs as the unit of bits.\n\tReturn values:\n\t1. ReadBits(bitlen)\n\t2. ReadBytes(bytelen, buffer, buffer_size)\n\t3. Decode(huffman_bitlen_count, huffman_symbol, min_bitlen)\n\t4. ReaderBitlenLeft()\n\t5. SkipToByteBoundary()\n--]]\nlocal function CreateReader(input_string)\n\tlocal input = input_string\n\tlocal input_strlen = #input_string\n\tlocal input_next_byte_pos = 1\n\tlocal cache_bitlen = 0\n\tlocal cache = 0\n\n\t-- Read some bits.\n\t-- To improve speed, this function does not\n\t-- check if the input has been exhausted.\n\t-- Use ReaderBitlenLeft() < 0 to check it.\n\t-- @param bitlen the number of bits to read\n\t-- @return the data is read.\n\tlocal function ReadBits(bitlen)\n\t\tlocal rshift_mask = _pow2[bitlen]\n\t\tlocal code\n\t\tif bitlen <= cache_bitlen then\n\t\t\tcode = cache % rshift_mask\n\t\t\tcache = (cache - code) / rshift_mask\n\t\t\tcache_bitlen = cache_bitlen - bitlen\n\t\telse -- Whether input has been exhausted is not checked.\n\t\t\tlocal lshift_mask = _pow2[cache_bitlen]\n\t\t\tlocal byte1, byte2, byte3, byte4 = string_byte(input\n\t\t\t\t, input_next_byte_pos, input_next_byte_pos+3)\n\t\t\t-- This requires lua number to be at least double ()\n\t\t\tcache = cache + ((byte1 or 0)+(byte2 or 0)*256\n\t\t\t\t+ (byte3 or 0)*65536+(byte4 or 0)*16777216)*lshift_mask\n\t\t\tinput_next_byte_pos = input_next_byte_pos + 4\n\t\t\tcache_bitlen = cache_bitlen + 32 - bitlen\n\t\t\tcode = cache % rshift_mask\n\t\t\tcache = (cache - code) / rshift_mask\n\t\tend\n\t\treturn code\n\tend\n\n\t-- Read some bytes from the reader.\n\t-- Assume reader is on the byte boundary.\n\t-- @param bytelen The number of bytes to be read.\n\t-- @param buffer The byte read will be stored into this buffer.\n\t-- @param buffer_size The buffer will be modified starting from\n\t--\tbuffer[buffer_size+1], ending at buffer[buffer_size+bytelen-1]\n\t-- @return the new buffer_size\n\tlocal function ReadBytes(bytelen, buffer, buffer_size)\n\t\tassert(cache_bitlen % 8 == 0)\n\n\t\tlocal byte_from_cache = (cache_bitlen/8 < bytelen)\n\t\t\tand (cache_bitlen/8) or bytelen\n\t\tfor _=1, byte_from_cache do\n\t\t\tlocal byte = cache % 256\n\t\t\tbuffer_size = buffer_size + 1\n\t\t\tbuffer[buffer_size] = string_char(byte)\n\t\t\tcache = (cache - byte) / 256\n\t\tend\n\t\tcache_bitlen = cache_bitlen - byte_from_cache*8\n\t\tbytelen = bytelen - byte_from_cache\n\t\tif (input_strlen - input_next_byte_pos - bytelen + 1) * 8\n\t\t\t+ cache_bitlen < 0 then\n\t\t\treturn -1 -- out of input\n\t\tend\n\t\tfor i=input_next_byte_pos, input_next_byte_pos+bytelen-1 do\n\t\t\tbuffer_size = buffer_size + 1\n\t\t\tbuffer[buffer_size] = string_sub(input, i, i)\n\t\tend\n\n\t\tinput_next_byte_pos = input_next_byte_pos + bytelen\n\t\treturn buffer_size\n\tend\n\n\t-- Decode huffman code\n\t-- To improve speed, this function does not check\n\t-- if the input has been exhausted.\n\t-- Use ReaderBitlenLeft() < 0 to check it.\n\t-- Credits for Mark Adler. This code is from puff:Decode()\n\t-- @see puff:Decode(...)\n\t-- @param huffman_bitlen_count\n\t-- @param huffman_symbol\n\t-- @param min_bitlen The minimum huffman bit length of all symbols\n\t-- @return The decoded deflate code.\n\t--\tNegative value is returned if decoding fails.\n\tlocal function Decode(huffman_bitlen_counts, huffman_symbols, min_bitlen)\n\t\tlocal code = 0\n\t\tlocal first = 0\n\t\tlocal index = 0\n\t\tlocal count\n\t\tif min_bitlen > 0 then\n\t\t\tif cache_bitlen < 15 and input then\n\t\t\t\tlocal lshift_mask = _pow2[cache_bitlen]\n\t\t\t\tlocal byte1, byte2, byte3, byte4 =\n\t\t\t\t\tstring_byte(input, input_next_byte_pos\n\t\t\t\t\t, input_next_byte_pos+3)\n\t\t\t\t-- This requires lua number to be at least double ()\n\t\t\t\tcache = cache + ((byte1 or 0)+(byte2 or 0)*256\n\t\t\t\t\t+(byte3 or 0)*65536+(byte4 or 0)*16777216)*lshift_mask\n\t\t\t\tinput_next_byte_pos = input_next_byte_pos + 4\n\t\t\t\tcache_bitlen = cache_bitlen + 32\n\t\t\tend\n\n\t\t\tlocal rshift_mask = _pow2[min_bitlen]\n\t\t\tcache_bitlen = cache_bitlen - min_bitlen\n\t\t\tcode = cache % rshift_mask\n\t\t\tcache = (cache - code) / rshift_mask\n\t\t\t-- Reverse the bits\n\t\t\tcode = _reverse_bits_tbl[min_bitlen][code]\n\n\t\t\tcount = huffman_bitlen_counts[min_bitlen]\n\t\t\tif code < count then\n\t\t\t\treturn huffman_symbols[code]\n\t\t\tend\n\t\t\tindex = count\n\t\t\tfirst = count * 2\n\t\t\tcode = code * 2\n\t\tend\n\n\t\tfor bitlen = min_bitlen+1, 15 do\n\t\t\tlocal bit\n\t\t\tbit = cache % 2\n\t\t\tcache = (cache - bit) / 2\n\t\t\tcache_bitlen = cache_bitlen - 1\n\n\t\t\tcode = (bit==1) and (code + 1 - code % 2) or code\n\t\t\tcount = huffman_bitlen_counts[bitlen] or 0\n\t\t\tlocal diff = code - first\n\t\t\tif diff < count then\n\t\t\t\treturn huffman_symbols[index + diff]\n\t\t\tend\n\t\t\tindex = index + count\n\t\t\tfirst = first + count\n\t\t\tfirst = first * 2\n\t\t\tcode = code * 2\n\t\tend\n\t\t-- invalid literal/length or distance code\n\t\t-- in fixed or dynamic block (run out of code)\n\t\treturn -10\n\tend\n\n\tlocal function ReaderBitlenLeft()\n\t\treturn (input_strlen - input_next_byte_pos + 1) * 8 + cache_bitlen\n\tend\n\n\tlocal function SkipToByteBoundary()\n\t\tlocal skipped_bitlen = cache_bitlen%8\n\t\tlocal rshift_mask = _pow2[skipped_bitlen]\n\t\tcache_bitlen = cache_bitlen - skipped_bitlen\n\t\tcache = (cache - cache % rshift_mask) / rshift_mask\n\tend\n\n\treturn ReadBits, ReadBytes, Decode, ReaderBitlenLeft, SkipToByteBoundary\nend\n\n-- Create a deflate state, so I can pass in less arguments to functions.\n-- @param str the whole string to be decompressed.\n-- @param dictionary The preset dictionary. nil if not provided.\n--\t\tThis dictionary should be produced by LibDeflate:CreateDictionary(str)\n-- @return The decomrpess state.\nlocal function CreateDecompressState(str, dictionary)\n\tlocal ReadBits, ReadBytes, Decode, ReaderBitlenLeft\n\t\t, SkipToByteBoundary = CreateReader(str)\n\tlocal state =\n\t{\n\t\tReadBits = ReadBits,\n\t\tReadBytes = ReadBytes,\n\t\tDecode = Decode,\n\t\tReaderBitlenLeft = ReaderBitlenLeft,\n\t\tSkipToByteBoundary = SkipToByteBoundary,\n\t\tbuffer_size = 0,\n\t\tbuffer = {},\n\t\tresult_buffer = {},\n\t\tdictionary = dictionary,\n\t}\n\treturn state\nend\n\n-- Get the stuffs needed to decode huffman codes\n-- @see puff.c:construct(...)\n-- @param huffman_bitlen The huffman bit length of the huffman codes.\n-- @param max_symbol The maximum symbol\n-- @param max_bitlen The min huffman bit length of all codes\n-- @return zero or positive for success, negative for failure.\n-- @return The count of each huffman bit length.\n-- @return A table to convert huffman codes to deflate codes.\n-- @return The minimum huffman bit length.\nlocal function GetHuffmanForDecode(huffman_bitlens, max_symbol, max_bitlen)\n\tlocal huffman_bitlen_counts = {}\n\tlocal min_bitlen = max_bitlen\n\tfor symbol = 0, max_symbol do\n\t\tlocal bitlen = huffman_bitlens[symbol] or 0\n\t\tmin_bitlen = (bitlen > 0 and bitlen < min_bitlen)\n\t\t\tand bitlen or min_bitlen\n\t\thuffman_bitlen_counts[bitlen] = (huffman_bitlen_counts[bitlen] or 0)+1\n\tend\n\n\tif huffman_bitlen_counts[0] == max_symbol+1 then -- No Codes\n\t\treturn 0, huffman_bitlen_counts, {}, 0 -- Complete, but decode will fail\n\tend\n\n\tlocal left = 1\n\tfor len = 1, max_bitlen do\n\t\tleft = left * 2\n\t\tleft = left - (huffman_bitlen_counts[len] or 0)\n\t\tif left < 0 then\n\t\t\treturn left -- Over-subscribed, return negative\n\t\tend\n\tend\n\n\t-- Generate offsets info symbol table for each length for sorting\n\tlocal offsets = {}\n\toffsets[1] = 0\n\tfor len = 1, max_bitlen-1 do\n\t\toffsets[len + 1] = offsets[len] + (huffman_bitlen_counts[len] or 0)\n\tend\n\n\tlocal huffman_symbols = {}\n\tfor symbol = 0, max_symbol do\n\t\tlocal bitlen = huffman_bitlens[symbol] or 0\n\t\tif bitlen ~= 0 then\n\t\t\tlocal offset = offsets[bitlen]\n\t\t\thuffman_symbols[offset] = symbol\n\t\t\toffsets[bitlen] = offsets[bitlen] + 1\n\t\tend\n\tend\n\n\t-- Return zero for complete set, positive for incomplete set.\n\treturn left, huffman_bitlen_counts, huffman_symbols, min_bitlen\nend\n\n-- Decode a fixed or dynamic huffman blocks, excluding last block identifier\n-- and block type identifer.\n-- @see puff.c:codes()\n-- @param state decompression state that will be modified by this function.\n--\t@see CreateDecompressState\n-- @param ... Read the source code\n-- @return 0 on success, other value on failure.\nlocal function DecodeUntilEndOfBlock(state, lcodes_huffman_bitlens\n\t, lcodes_huffman_symbols, lcodes_huffman_min_bitlen\n\t, dcodes_huffman_bitlens, dcodes_huffman_symbols\n\t, dcodes_huffman_min_bitlen)\n\tlocal buffer, buffer_size, ReadBits, Decode, ReaderBitlenLeft\n\t\t, result_buffer =\n\t\tstate.buffer, state.buffer_size, state.ReadBits, state.Decode\n\t\t, state.ReaderBitlenLeft, state.result_buffer\n\tlocal dictionary = state.dictionary\n\tlocal dict_string_table\n\tlocal dict_strlen\n\n\tlocal buffer_end = 1\n\tif dictionary and not buffer[0] then\n\t\t-- If there is a dictionary, copy the last 258 bytes into\n\t\t-- the string_table to make the copy in the main loop quicker.\n\t\t-- This is done only once per decompression.\n\t\tdict_string_table = dictionary.string_table\n\t\tdict_strlen = dictionary.strlen\n\t\tbuffer_end = -dict_strlen + 1\n\t\tfor i=0, (-dict_strlen+1)<-257 and -257 or (-dict_strlen+1), -1 do\n\t\t\tbuffer[i] = _byte_to_char[dict_string_table[dict_strlen+i]]\n\t\tend\n\tend\n\n\trepeat\n\t\tlocal symbol = Decode(lcodes_huffman_bitlens\n\t\t\t, lcodes_huffman_symbols, lcodes_huffman_min_bitlen)\n\t\tif symbol < 0 or symbol > 285 then\n\t\t-- invalid literal/length or distance code in fixed or dynamic block\n\t\t\treturn -10\n\t\telseif symbol < 256 then -- Literal\n\t\t\tbuffer_size = buffer_size + 1\n\t\t\tbuffer[buffer_size] = _byte_to_char[symbol]\n\t\telseif symbol > 256 then -- Length code\n\t\t\tsymbol = symbol - 256\n\t\t\tlocal bitlen = _literal_deflate_code_to_base_len[symbol]\n\t\t\tbitlen = (symbol >= 8)\n\t\t\t\t and (bitlen\n\t\t\t\t + ReadBits(_literal_deflate_code_to_extra_bitlen[symbol]))\n\t\t\t\t\tor bitlen\n\t\t\tsymbol = Decode(dcodes_huffman_bitlens, dcodes_huffman_symbols\n\t\t\t\t, dcodes_huffman_min_bitlen)\n\t\t\tif symbol < 0 or symbol > 29 then\n\t\t\t-- invalid literal/length or distance code in fixed or dynamic block\n\t\t\t\treturn -10\n\t\t\tend\n\t\t\tlocal dist = _dist_deflate_code_to_base_dist[symbol]\n\t\t\tdist = (dist > 4) and (dist\n\t\t\t\t+ ReadBits(_dist_deflate_code_to_extra_bitlen[symbol])) or dist\n\n\t\t\tlocal char_buffer_index = buffer_size-dist+1\n\t\t\tif char_buffer_index < buffer_end then\n\t\t\t-- distance is too far back in fixed or dynamic block\n\t\t\t\treturn -11\n\t\t\tend\n\t\t\tif char_buffer_index >= -257 then\n\t\t\t\tfor _=1, bitlen do\n\t\t\t\t\tbuffer_size = buffer_size + 1\n\t\t\t\t\tbuffer[buffer_size] = buffer[char_buffer_index]\n\t\t\t\t\tchar_buffer_index = char_buffer_index + 1\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tchar_buffer_index = dict_strlen + char_buffer_index\n\t\t\t\tfor _=1, bitlen do\n\t\t\t\t\tbuffer_size = buffer_size + 1\n\t\t\t\t\tbuffer[buffer_size] =\n\t\t\t\t\t_byte_to_char[dict_string_table[char_buffer_index]]\n\t\t\t\t\tchar_buffer_index = char_buffer_index + 1\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\n\t\tif ReaderBitlenLeft() < 0 then\n\t\t\treturn 2 -- available inflate data did not terminate\n\t\tend\n\n\t\tif buffer_size >= 65536 then\n\t\t\tresult_buffer[#result_buffer+1] =\n\t\t\t\ttable_concat(buffer, \"\", 1, 32768)\n\t\t\tfor i=32769, buffer_size do\n\t\t\t\tbuffer[i-32768] = buffer[i]\n\t\t\tend\n\t\t\tbuffer_size = buffer_size - 32768\n\t\t\tbuffer[buffer_size+1] = nil\n\t\t\t-- NOTE: buffer[32769..end] and buffer[-257..0] are not cleared.\n\t\t\t-- This is why \"buffer_size\" variable is needed.\n\t\tend\n\tuntil symbol == 256\n\n\tstate.buffer_size = buffer_size\n\n\treturn 0\nend\n\n-- Decompress a store block\n-- @param state decompression state that will be modified by this function.\n-- @return 0 if succeeds, other value if fails.\nlocal function DecompressStoreBlock(state)\n\tlocal buffer, buffer_size, ReadBits, ReadBytes, ReaderBitlenLeft\n\t\t, SkipToByteBoundary, result_buffer =\n\t\tstate.buffer, state.buffer_size, state.ReadBits, state.ReadBytes\n\t\t, state.ReaderBitlenLeft, state.SkipToByteBoundary, state.result_buffer\n\n\tSkipToByteBoundary()\n\tlocal bytelen = ReadBits(16)\n\tif ReaderBitlenLeft() < 0 then\n\t\treturn 2 -- available inflate data did not terminate\n\tend\n\tlocal bytelenComp = ReadBits(16)\n\tif ReaderBitlenLeft() < 0 then\n\t\treturn 2 -- available inflate data did not terminate\n\tend\n\n\tif bytelen % 256 + bytelenComp % 256 ~= 255 then\n\t\treturn -2 -- Not one's complement\n\tend\n\tif (bytelen-bytelen % 256)/256\n\t\t+ (bytelenComp-bytelenComp % 256)/256 ~= 255 then\n\t\treturn -2 -- Not one's complement\n\tend\n\n\t-- Note that ReadBytes will skip to the next byte boundary first.\n\tbuffer_size = ReadBytes(bytelen, buffer, buffer_size)\n\tif buffer_size < 0 then\n\t\treturn 2 -- available inflate data did not terminate\n\tend\n\n\t-- memory clean up when there are enough bytes in the buffer.\n\tif buffer_size >= 65536 then\n\t\tresult_buffer[#result_buffer+1] = table_concat(buffer, \"\", 1, 32768)\n\t\tfor i=32769, buffer_size do\n\t\t\tbuffer[i-32768] = buffer[i]\n\t\tend\n\t\tbuffer_size = buffer_size - 32768\n\t\tbuffer[buffer_size+1] = nil\n\tend\n\tstate.buffer_size = buffer_size\n\treturn 0\nend\n\n-- Decompress a fixed block\n-- @param state decompression state that will be modified by this function.\n-- @return 0 if succeeds other value if fails.\nlocal function DecompressFixBlock(state)\n\treturn DecodeUntilEndOfBlock(state\n\t\t, _fix_block_literal_huffman_bitlen_count\n\t\t, _fix_block_literal_huffman_to_deflate_code, 7\n\t\t, _fix_block_dist_huffman_bitlen_count\n\t\t, _fix_block_dist_huffman_to_deflate_code, 5)\nend\n\n-- Decompress a dynamic block\n-- @param state decompression state that will be modified by this function.\n-- @return 0 if success, other value if fails.\nlocal function DecompressDynamicBlock(state)\n\tlocal ReadBits, Decode = state.ReadBits, state.Decode\n\tlocal nlen = ReadBits(5) + 257\n\tlocal ndist = ReadBits(5) + 1\n\tlocal ncode = ReadBits(4) + 4\n\tif nlen > 286 or ndist > 30 then\n\t\t-- dynamic block code description: too many length or distance codes\n\t\treturn -3\n\tend\n\n\tlocal rle_codes_huffman_bitlens = {}\n\n\tfor i = 1, ncode do\n\t\trle_codes_huffman_bitlens[_rle_codes_huffman_bitlen_order[i]] =\n\t\t\tReadBits(3)\n\tend\n\n\tlocal rle_codes_err, rle_codes_huffman_bitlen_counts,\n\t\trle_codes_huffman_symbols, rle_codes_huffman_min_bitlen =\n\t\tGetHuffmanForDecode(rle_codes_huffman_bitlens, 18, 7)\n\tif rle_codes_err ~= 0 then -- Require complete code set here\n\t\t-- dynamic block code description: code lengths codes incomplete\n\t\treturn -4\n\tend\n\n\tlocal lcodes_huffman_bitlens = {}\n\tlocal dcodes_huffman_bitlens = {}\n\t-- Read length/literal and distance code length tables\n\tlocal index = 0\n\twhile index < nlen + ndist do\n\t\tlocal symbol -- Decoded value\n\t\tlocal bitlen -- Last length to repeat\n\n\t\tsymbol = Decode(rle_codes_huffman_bitlen_counts\n\t\t\t, rle_codes_huffman_symbols, rle_codes_huffman_min_bitlen)\n\n\t\tif symbol < 0 then\n\t\t\treturn symbol -- Invalid symbol\n\t\telseif symbol < 16 then\n\t\t\tif index < nlen then\n\t\t\t\tlcodes_huffman_bitlens[index] = symbol\n\t\t\telse\n\t\t\t\tdcodes_huffman_bitlens[index-nlen] = symbol\n\t\t\tend\n\t\t\tindex = index + 1\n\t\telse\n\t\t\tbitlen = 0\n\t\t\tif symbol == 16 then\n\t\t\t\tif index == 0 then\n\t\t\t\t\t-- dynamic block code description: repeat lengths\n\t\t\t\t\t-- with no first length\n\t\t\t\t\treturn -5\n\t\t\t\tend\n\t\t\t\tif index-1 < nlen then\n\t\t\t\t\tbitlen = lcodes_huffman_bitlens[index-1]\n\t\t\t\telse\n\t\t\t\t\tbitlen = dcodes_huffman_bitlens[index-nlen-1]\n\t\t\t\tend\n\t\t\t\tsymbol = 3 + ReadBits(2)\n\t\t\telseif symbol == 17 then -- Repeat zero 3..10 times\n\t\t\t\tsymbol = 3 + ReadBits(3)\n\t\t\telse -- == 18, repeat zero 11.138 times\n\t\t\t\tsymbol = 11 + ReadBits(7)\n\t\t\tend\n\t\t\tif index + symbol > nlen + ndist then\n\t\t\t\t-- dynamic block code description:\n\t\t\t\t-- repeat more than specified lengths\n\t\t\t\treturn -6\n\t\t\tend\n\t\t\twhile symbol > 0 do -- Repeat last or zero symbol times\n\t\t\t\tsymbol = symbol - 1\n\t\t\t\tif index < nlen then\n\t\t\t\t\tlcodes_huffman_bitlens[index] = bitlen\n\t\t\t\telse\n\t\t\t\t\tdcodes_huffman_bitlens[index-nlen] = bitlen\n\t\t\t\tend\n\t\t\t\tindex = index + 1\n\t\t\tend\n\t\tend\n\tend\n\n\tif (lcodes_huffman_bitlens[256] or 0) == 0 then\n\t\t-- dynamic block code description: missing end-of-block code\n\t\treturn -9\n\tend\n\n\tlocal lcodes_err, lcodes_huffman_bitlen_counts\n\t\t, lcodes_huffman_symbols, lcodes_huffman_min_bitlen =\n\t\tGetHuffmanForDecode(lcodes_huffman_bitlens, nlen-1, 15)\n\t--dynamic block code description: invalid literal/length code lengths,\n\t-- Incomplete code ok only for single length 1 code\n\tif (lcodes_err ~=0 and (lcodes_err < 0\n\t\tor nlen ~= (lcodes_huffman_bitlen_counts[0] or 0)\n\t\t\t+(lcodes_huffman_bitlen_counts[1] or 0))) then\n\t\treturn -7\n\tend\n\n\tlocal dcodes_err, dcodes_huffman_bitlen_counts\n\t\t, dcodes_huffman_symbols, dcodes_huffman_min_bitlen =\n\t\tGetHuffmanForDecode(dcodes_huffman_bitlens, ndist-1, 15)\n\t-- dynamic block code description: invalid distance code lengths,\n\t-- Incomplete code ok only for single length 1 code\n\tif (dcodes_err ~=0 and (dcodes_err < 0\n\t\tor ndist ~= (dcodes_huffman_bitlen_counts[0] or 0)\n\t\t\t+ (dcodes_huffman_bitlen_counts[1] or 0))) then\n\t\treturn -8\n\tend\n\n\t-- Build buffman table for literal/length codes\n\treturn DecodeUntilEndOfBlock(state, lcodes_huffman_bitlen_counts\n\t\t, lcodes_huffman_symbols, lcodes_huffman_min_bitlen\n\t\t, dcodes_huffman_bitlen_counts, dcodes_huffman_symbols\n\t\t, dcodes_huffman_min_bitlen)\nend\n\n-- Decompress a deflate stream\n-- @param state: a decompression state\n-- @return the decompressed string if succeeds. nil if fails.\nlocal function Inflate(state)\n\tlocal ReadBits = state.ReadBits\n\n\tlocal is_last_block\n\twhile not is_last_block do\n\t\tis_last_block = (ReadBits(1) == 1)\n\t\tlocal block_type = ReadBits(2)\n\t\tlocal status\n\t\tif block_type == 0 then\n\t\t\tstatus = DecompressStoreBlock(state)\n\t\telseif block_type == 1 then\n\t\t\tstatus = DecompressFixBlock(state)\n\t\telseif block_type == 2 then\n\t\t\tstatus = DecompressDynamicBlock(state)\n\t\telse\n\t\t\treturn nil, -1 -- invalid block type (type == 3)\n\t\tend\n\t\tif status ~= 0 then\n\t\t\treturn nil, status\n\t\tend\n\tend\n\n\tstate.result_buffer[#state.result_buffer+1] =\n\t\ttable_concat(state.buffer, \"\", 1, state.buffer_size)\n\tlocal result = table_concat(state.result_buffer)\n\treturn result\nend\n\n-- @see LibDeflate:DecompressDeflate(str)\n-- @see LibDeflate:DecompressDeflateWithDict(str, dictionary)\nlocal function DecompressDeflateInternal(str, dictionary)\n\tlocal state = CreateDecompressState(str, dictionary)\n\tlocal result, status = Inflate(state)\n\tif not result then\n\t\treturn nil, status\n\tend\n\n\tlocal bitlen_left = state.ReaderBitlenLeft()\n\tlocal bytelen_left = (bitlen_left - bitlen_left % 8) / 8\n\treturn result, bytelen_left\nend\n\n-- @see LibDeflate:DecompressZlib(str)\n-- @see LibDeflate:DecompressZlibWithDict(str)\nlocal function DecompressZlibInternal(str, dictionary)\n\tlocal state = CreateDecompressState(str, dictionary)\n\tlocal ReadBits = state.ReadBits\n\n\tlocal CMF = ReadBits(8)\n\tif state.ReaderBitlenLeft() < 0 then\n\t\treturn nil, 2 -- available inflate data did not terminate\n\tend\n\tlocal CM = CMF % 16\n\tlocal CINFO = (CMF - CM) / 16\n\tif CM ~= 8 then\n\t\treturn nil, -12 -- invalid compression method\n\tend\n\tif CINFO > 7 then\n\t\treturn nil, -13 -- invalid window size\n\tend\n\n\tlocal FLG = ReadBits(8)\n\tif state.ReaderBitlenLeft() < 0 then\n\t\treturn nil, 2 -- available inflate data did not terminate\n\tend\n\tif (CMF*256+FLG)%31 ~= 0 then\n\t\treturn nil, -14 -- invalid header checksum\n\tend\n\n\tlocal FDIST = ((FLG-FLG%32)/32 % 2)\n\tlocal FLEVEL = ((FLG-FLG%64)/64 % 4) -- luacheck: ignore FLEVEL\n\n\tif FDIST == 1 then\n\t\tif not dictionary then\n\t\t\treturn nil, -16 -- need dictonary, but dictionary is not provided.\n\t\tend\n\t\tlocal byte3 = ReadBits(8)\n\t\tlocal byte2 = ReadBits(8)\n\t\tlocal byte1 = ReadBits(8)\n\t\tlocal byte0 = ReadBits(8)\n\t\tlocal actual_adler32 = byte3*16777216+byte2*65536+byte1*256+byte0\n\t\tif state.ReaderBitlenLeft() < 0 then\n\t\t\treturn nil, 2 -- available inflate data did not terminate\n\t\tend\n\t\tif not IsEqualAdler32(actual_adler32, dictionary.adler32) then\n\t\t\treturn nil, -17 -- dictionary adler32 does not match\n\t\tend\n\tend\n\tlocal result, status = Inflate(state)\n\tif not result then\n\t\treturn nil, status\n\tend\n\tstate.SkipToByteBoundary()\n\n\tlocal adler_byte0 = ReadBits(8)\n\tlocal adler_byte1 = ReadBits(8)\n\tlocal adler_byte2 = ReadBits(8)\n\tlocal adler_byte3 = ReadBits(8)\n\tif state.ReaderBitlenLeft() < 0 then\n\t\treturn nil, 2 -- available inflate data did not terminate\n\tend\n\n\tlocal adler32_expected = adler_byte0*16777216\n\t\t+ adler_byte1*65536 + adler_byte2*256 + adler_byte3\n\tlocal adler32_actual = LibDeflate:Adler32(result)\n\tif not IsEqualAdler32(adler32_expected, adler32_actual) then\n\t\treturn nil, -15 -- Adler32 checksum does not match\n\tend\n\n\tlocal bitlen_left = state.ReaderBitlenLeft()\n\tlocal bytelen_left = (bitlen_left - bitlen_left % 8) / 8\n\treturn result, bytelen_left\nend\n\n--- Decompress a raw deflate compressed data.\n-- @param str [string] The data to be decompressed.\n-- @return [string/nil] If the decompression succeeds, return the decompressed\n-- data. If the decompression fails, return nil. You should check if this return\n-- value is non-nil to know if the decompression succeeds.\n-- @return [integer] If the decompression succeeds, return the number of\n-- unprocessed bytes in the input compressed data. This return value is a\n-- positive integer if the input data is a valid compressed data appended by an\n-- arbitary non-empty string. This return value is 0 if the input data does not\n-- contain any extra bytes.<br>\n-- If the decompression fails (The first return value of this function is nil),\n-- this return value is undefined.\n-- @see LibDeflate:CompressDeflate\nfunction LibDeflate:DecompressDeflate(str)\n\tlocal arg_valid, arg_err = IsValidArguments(str)\n\tif not arg_valid then\n\t\terror((\"Usage: LibDeflate:DecompressDeflate(str): \"\n\t\t\t..arg_err), 2)\n\tend\n\treturn DecompressDeflateInternal(str)\nend\n\n--- Decompress a raw deflate compressed data with a preset dictionary.\n-- @param str [string] The data to be decompressed.\n-- @param dictionary [table] The preset dictionary used by\n-- LibDeflate:CompressDeflateWithDict when the compressed data is produced.\n-- Decompression and compression must use the same dictionary.\n-- Otherwise wrong decompressed data could be produced without generating any\n-- error.\n-- @return [string/nil] If the decompression succeeds, return the decompressed\n-- data. If the decompression fails, return nil. You should check if this return\n-- value is non-nil to know if the decompression succeeds.\n-- @return [integer] If the decompression succeeds, return the number of\n-- unprocessed bytes in the input compressed data. This return value is a\n-- positive integer if the input data is a valid compressed data appended by an\n-- arbitary non-empty string. This return value is 0 if the input data does not\n-- contain any extra bytes.<br>\n-- If the decompression fails (The first return value of this function is nil),\n-- this return value is undefined.\n-- @see LibDeflate:CompressDeflateWithDict\nfunction LibDeflate:DecompressDeflateWithDict(str, dictionary)\n\tlocal arg_valid, arg_err = IsValidArguments(str, true, dictionary)\n\tif not arg_valid then\n\t\terror((\"Usage: LibDeflate:DecompressDeflateWithDict(str, dictionary): \"\n\t\t\t..arg_err), 2)\n\tend\n\treturn DecompressDeflateInternal(str, dictionary)\nend\n\n--- Decompress a zlib compressed data.\n-- @param str [string] The data to be decompressed\n-- @return [string/nil] If the decompression succeeds, return the decompressed\n-- data. If the decompression fails, return nil. You should check if this return\n-- value is non-nil to know if the decompression succeeds.\n-- @return [integer] If the decompression succeeds, return the number of\n-- unprocessed bytes in the input compressed data. This return value is a\n-- positive integer if the input data is a valid compressed data appended by an\n-- arbitary non-empty string. This return value is 0 if the input data does not\n-- contain any extra bytes.<br>\n-- If the decompression fails (The first return value of this function is nil),\n-- this return value is undefined.\n-- @see LibDeflate:CompressZlib\nfunction LibDeflate:DecompressZlib(str)\n\tlocal arg_valid, arg_err = IsValidArguments(str)\n\tif not arg_valid then\n\t\terror((\"Usage: LibDeflate:DecompressZlib(str): \"\n\t\t\t..arg_err), 2)\n\tend\n\treturn DecompressZlibInternal(str)\nend\n\n--- Decompress a zlib compressed data with a preset dictionary.\n-- @param str [string] The data to be decompressed\n-- @param dictionary [table] The preset dictionary used by\n-- LibDeflate:CompressDeflateWithDict when the compressed data is produced.\n-- Decompression and compression must use the same dictionary.\n-- Otherwise wrong decompressed data could be produced without generating any\n-- error.\n-- @return [string/nil] If the decompression succeeds, return the decompressed\n-- data. If the decompression fails, return nil. You should check if this return\n-- value is non-nil to know if the decompression succeeds.\n-- @return [integer] If the decompression succeeds, return the number of\n-- unprocessed bytes in the input compressed data. This return value is a\n-- positive integer if the input data is a valid compressed data appended by an\n-- arbitary non-empty string. This return value is 0 if the input data does not\n-- contain any extra bytes.<br>\n-- If the decompression fails (The first return value of this function is nil),\n-- this return value is undefined.\n-- @see LibDeflate:CompressZlibWithDict\nfunction LibDeflate:DecompressZlibWithDict(str, dictionary)\n\tlocal arg_valid, arg_err = IsValidArguments(str, true, dictionary)\n\tif not arg_valid then\n\t\terror((\"Usage: LibDeflate:DecompressZlibWithDict(str, dictionary): \"\n\t\t\t..arg_err), 2)\n\tend\n\treturn DecompressZlibInternal(str, dictionary)\nend\n\n-- Calculate the huffman code of fixed block\ndo\n\t_fix_block_literal_huffman_bitlen = {}\n\tfor sym=0, 143 do\n\t\t_fix_block_literal_huffman_bitlen[sym] = 8\n\tend\n\tfor sym=144, 255 do\n\t\t_fix_block_literal_huffman_bitlen[sym] = 9\n\tend\n\tfor sym=256, 279 do\n\t    _fix_block_literal_huffman_bitlen[sym] = 7\n\tend\n\tfor sym=280, 287 do\n\t\t_fix_block_literal_huffman_bitlen[sym] = 8\n\tend\n\n\t_fix_block_dist_huffman_bitlen = {}\n\tfor dist=0, 31 do\n\t\t_fix_block_dist_huffman_bitlen[dist] = 5\n\tend\n\tlocal status\n\tstatus, _fix_block_literal_huffman_bitlen_count\n\t\t, _fix_block_literal_huffman_to_deflate_code =\n\t\tGetHuffmanForDecode(_fix_block_literal_huffman_bitlen, 287, 9)\n\tassert(status == 0)\n\tstatus, _fix_block_dist_huffman_bitlen_count,\n\t\t_fix_block_dist_huffman_to_deflate_code =\n\t\tGetHuffmanForDecode(_fix_block_dist_huffman_bitlen, 31, 5)\n\tassert(status == 0)\n\n\t_fix_block_literal_huffman_code =\n\t\tGetHuffmanCodeFromBitlen(_fix_block_literal_huffman_bitlen_count\n\t\t, _fix_block_literal_huffman_bitlen, 287, 9)\n\t_fix_block_dist_huffman_code =\n\t\tGetHuffmanCodeFromBitlen(_fix_block_dist_huffman_bitlen_count\n\t\t, _fix_block_dist_huffman_bitlen, 31, 5)\nend\n\n-- Encoding algorithms\n-- Prefix encoding algorithm\n-- implemented by Galmok of European Stormrage (Horde), galmok@gmail.com\n-- From LibCompress <https://www.wowace.com/projects/libcompress>,\n-- which is licensed under GPLv2\n-- The code has been modified by the author of LibDeflate.\n------------------------------------------------------------------------------\n\n-- to be able to match any requested byte value, the search\n-- string must be preprocessed characters to escape with %:\n-- ( ) . % + - * ? [ ] ^ $\n-- \"illegal\" byte values:\n-- 0 is replaces %z\nlocal _gsub_escape_table = {\n\t[\"\\000\"] = \"%z\", [\"(\"] = \"%(\", [\")\"] = \"%)\", [\".\"] = \"%.\",\n\t[\"%\"] = \"%%\", [\"+\"] = \"%+\", [\"-\"] = \"%-\", [\"*\"] = \"%*\",\n\t[\"?\"] = \"%?\", [\"[\"] = \"%[\", [\"]\"] = \"%]\", [\"^\"] = \"%^\",\n\t[\"$\"] = \"%$\",\n}\n\nlocal function escape_for_gsub(str)\n\treturn str:gsub(\"([%z%(%)%.%%%+%-%*%?%[%]%^%$])\", _gsub_escape_table)\nend\n\n--- Create a custom codec with encoder and decoder. <br>\n-- This codec is used to convert an input string to make it not contain\n-- some specific bytes.\n-- This created codec and the parameters of this function do NOT take\n-- localization into account. One byte (0-255) in the string is exactly one\n-- character (0-255).\n-- Credits to LibCompress.\n-- @param reserved_chars [string] The created encoder will ensure encoded\n-- data does not contain any single character in reserved_chars. This parameter\n-- should be non-empty.\n-- @param escape_chars [string] The escape character(s) used in the created\n-- codec. The codec converts any character included in reserved\\_chars /\n-- escape\\_chars / map\\_chars to (one escape char + one character not in\n-- reserved\\_chars / escape\\_chars / map\\_chars).\n-- You usually only need to provide a length-1 string for this parameter.\n-- Length-2 string is only needed when\n-- reserved\\_chars + escape\\_chars + map\\_chars is longer than 127.\n-- This parameter should be non-empty.\n-- @param map_chars [string] The created encoder will map every\n-- reserved\\_chars:sub(i, i) (1 <= i <= #map\\_chars) to map\\_chars:sub(i, i).\n-- This parameter CAN be empty string.\n-- @return [table/nil] If the codec cannot be created, return nil.<br>\n-- If the codec can be created according to the given\n-- parameters, return the codec, which is a encode/decode table.\n-- The table contains two functions: <br>\n-- t:Encode(str) returns the encoded string. <br>\n-- t:Decode(str) returns the decoded string if succeeds. nil if fails.\n-- @return [nil/string] If the codec is successfully created, return nil.\n-- If not, return a string that describes the reason why the codec cannot be\n-- created.\n-- @usage\n-- -- Create an encoder/decoder that maps all \"\\000\" to \"\\003\",\n-- -- and escape \"\\001\" (and \"\\002\" and \"\\003\") properly\n-- local codec = LibDeflate:CreateCodec(\"\\000\\001\", \"\\002\", \"\\003\")\n--\n-- local encoded = codec:Encode(SOME_STRING)\n-- -- \"encoded\" does not contain \"\\000\" or \"\\001\"\n-- local decoded = codec:Decode(encoded)\n-- -- assert(decoded == SOME_STRING)\nfunction LibDeflate:CreateCodec(reserved_chars, escape_chars\n\t, map_chars)\n\t-- select a default escape character\n\tif type(reserved_chars) ~= \"string\"\n\t\tor type(escape_chars) ~= \"string\"\n\t\tor type(map_chars) ~= \"string\" then\n\t\t\terror(\n\t\t\t\t\"Usage: LibDeflate:CreateCodec(reserved_chars,\"\n\t\t\t\t..\" escape_chars, map_chars):\"\n\t\t\t\t..\" All arguments must be string.\", 2)\n\tend\n\n\tif escape_chars == \"\" then\n\t\treturn nil, \"No escape characters supplied.\"\n\tend\n\tif #reserved_chars < #map_chars then\n\t\treturn nil, \"The number of reserved characters must be\"\n\t\t\t..\" at least as many as the number of mapped chars.\"\n\tend\n\tif reserved_chars == \"\" then\n\t\treturn nil, \"No characters to encode.\"\n\tend\n\n\tlocal encode_bytes = reserved_chars..escape_chars..map_chars\n\t-- build list of bytes not available as a suffix to a prefix byte\n\tlocal taken = {}\n\tfor i = 1, #encode_bytes do\n\t\tlocal byte = string_byte(encode_bytes, i, i)\n\t\tif taken[byte] then -- Modified by LibDeflate:\n\t\t\treturn nil, \"There must be no duplicate characters in the\"\n\t\t\t\t..\" concatenation of reserved_chars, escape_chars and\"\n\t\t\t\t..\" map_chars.\"\n\t\tend\n\t\ttaken[byte] = true\n\tend\n\n\t-- Modified by LibDeflate:\n\t-- Store the patterns and replacement in tables for later use.\n\t-- This function is modified that loadstring() lua api is no longer used.\n\tlocal decode_patterns = {}\n\tlocal decode_repls = {}\n\n\t-- the encoding can be a single gsub\n\t-- , but the decoding can require multiple gsubs\n\tlocal encode_search = {}\n\tlocal encode_translate = {}\n\n\t-- map single byte to single byte\n\tif #map_chars > 0 then\n\t\tlocal decode_search = {}\n\t\tlocal decode_translate = {}\n\t\tfor i = 1, #map_chars do\n\t\t\tlocal from = string_sub(reserved_chars, i, i)\n\t\t\tlocal to = string_sub(map_chars, i, i)\n\t\t\tencode_translate[from] = to\n\t\t\tencode_search[#encode_search+1] = from\n\t\t\tdecode_translate[to] = from\n\t\t\tdecode_search[#decode_search+1] = to\n\t\tend\n\t\tdecode_patterns[#decode_patterns+1] =\n\t\t\t\"([\".. escape_for_gsub(table_concat(decode_search))..\"])\"\n\t\tdecode_repls[#decode_repls+1] = decode_translate\n\tend\n\n\tlocal escape_char_index = 1\n\tlocal escape_char = string_sub(escape_chars\n\t\t, escape_char_index, escape_char_index)\n\t-- map single byte to double-byte\n\tlocal r = 0 -- suffix char value to the escapeChar\n\n\tlocal decode_search = {}\n\tlocal decode_translate = {}\n\tfor i = 1, #encode_bytes do\n\t\tlocal c = string_sub(encode_bytes, i, i)\n\t\tif not encode_translate[c] then\n\t\t\t-- this loop will update escapeChar and r\n\t\t\twhile r >= 256 or taken[r] do\n\t\t\t-- Bug in LibCompress r81\n\t\t\t-- while r < 256 and taken[r] do\n\t\t\t\tr = r + 1\n\t\t\t\tif r > 255 then -- switch to next escapeChar\n\t\t\t\t\tdecode_patterns[#decode_patterns+1] =\n\t\t\t\t\t\tescape_for_gsub(escape_char)\n\t\t\t\t\t\t..\"([\"\n\t\t\t\t\t\t.. escape_for_gsub(table_concat(decode_search))..\"])\"\n\t\t\t\t\tdecode_repls[#decode_repls+1] = decode_translate\n\n\t\t\t\t\tescape_char_index = escape_char_index + 1\n\t\t\t\t\tescape_char = string_sub(escape_chars, escape_char_index\n\t\t\t\t\t\t, escape_char_index)\n\t\t\t\t\tr = 0\n\t\t\t\t\tdecode_search = {}\n\t\t\t\t\tdecode_translate = {}\n\n\t\t\t\t\t-- Fixes Another bug in LibCompress r82.\n\t\t\t\t\t-- LibCompress checks this error condition\n\t\t\t\t\t-- right after \"if r > 255 then\"\n\t\t\t\t\t-- This is why error case should also be tested.\n\t\t\t\t\tif not escape_char or escape_char == \"\" then\n\t\t\t\t\t\t-- actually I don't need to check\n\t\t\t\t\t\t-- \"not ecape_char\", but what if Lua changes\n\t\t\t\t\t\t-- the behavior of string.sub() in the future?\n\t\t\t\t\t\t-- we are out of escape chars and we need more!\n\t\t\t\t\t\treturn nil, \"Out of escape characters.\"\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\n\t\t\tlocal char_r = _byte_to_char[r]\n\t\t\tencode_translate[c] = escape_char..char_r\n\t\t\tencode_search[#encode_search+1] = c\n\t\t\tdecode_translate[char_r] = c\n\t\t\tdecode_search[#decode_search+1] = char_r\n\t\t\tr = r + 1\n\t\tend\n\t\tif i == #encode_bytes then\n\t\t\tdecode_patterns[#decode_patterns+1] =\n\t\t\t\tescape_for_gsub(escape_char)..\"([\"\n\t\t\t\t.. escape_for_gsub(table_concat(decode_search))..\"])\"\n\t\t\tdecode_repls[#decode_repls+1] = decode_translate\n\t\tend\n\tend\n\n\tlocal codec = {}\n\n\tlocal encode_pattern = \"([\"\n\t\t.. escape_for_gsub(table_concat(encode_search))..\"])\"\n\tlocal encode_repl = encode_translate\n\n\tfunction codec:Encode(str)\n\t\tif type(str) ~= \"string\" then\n\t\t\terror((\"Usage: codec:Encode(str):\"\n\t\t\t\t..\" 'str' - string expected got '%s'.\"):format(type(str)), 2)\n\t\tend\n\t\treturn string_gsub(str, encode_pattern, encode_repl)\n\tend\n\n\tlocal decode_tblsize = #decode_patterns\n\tlocal decode_fail_pattern = \"([\"\n\t\t.. escape_for_gsub(reserved_chars)..\"])\"\n\n\tfunction codec:Decode(str)\n\t\tif type(str) ~= \"string\" then\n\t\t\terror((\"Usage: codec:Decode(str):\"\n\t\t\t\t..\" 'str' - string expected got '%s'.\"):format(type(str)), 2)\n\t\tend\n\t\tif string_find(str, decode_fail_pattern) then\n\t\t\treturn nil\n\t\tend\n\t\tfor i = 1, decode_tblsize do\n\t\t\tstr = string_gsub(str, decode_patterns[i], decode_repls[i])\n\t\tend\n\t\treturn str\n\tend\n\n\treturn codec\nend\n\nlocal _addon_channel_codec\n\nlocal function GenerateWoWAddonChannelCodec()\n\treturn LibDeflate:CreateCodec(\"\\000\\124\", \"\\001\", \"\")\nend\n\n--- Encode the string to make it ready to be transmitted in World of\n-- Warcraft addon channel. <br>\n-- The encoded string is guaranteed to contain no NULL (\"\\000\") character.\n-- @param str [string] The string to be encoded.\n-- @return The encoded string.\n-- @see LibDeflate:DecodeForWoWAddonChannel\nfunction LibDeflate:EncodeForWoWAddonChannel(str)\n\tif type(str) ~= \"string\" then\n\t\terror((\"Usage: LibDeflate:EncodeForWoWAddonChannel(str):\"\n\t\t\t..\" 'str' - string expected got '%s'.\"):format(type(str)), 2)\n\tend\n\tif not _addon_channel_codec then\n\t\t_addon_channel_codec = GenerateWoWAddonChannelCodec()\n\tend\n\treturn _addon_channel_codec:Encode(str)\nend\n\n--- Decode the string produced by LibDeflate:EncodeForWoWAddonChannel\n-- @param str [string] The string to be decoded.\n-- @return [string/nil] The decoded string if succeeds. nil if fails.\n-- @see LibDeflate:EncodeForWoWAddonChannel\nfunction LibDeflate:DecodeForWoWAddonChannel(str)\n\tif type(str) ~= \"string\" then\n\t\terror((\"Usage: LibDeflate:DecodeForWoWAddonChannel(str):\"\n\t\t\t..\" 'str' - string expected got '%s'.\"):format(type(str)), 2)\n\tend\n\tif not _addon_channel_codec then\n\t\t_addon_channel_codec = GenerateWoWAddonChannelCodec()\n\tend\n\treturn _addon_channel_codec:Decode(str)\nend\n\n-- For World of Warcraft Chat Channel Encoding\n-- implemented by Galmok of European Stormrage (Horde), galmok@gmail.com\n-- From LibCompress <https://www.wowace.com/projects/libcompress>,\n-- which is licensed under GPLv2\n-- The code has been modified by the author of LibDeflate.\n-- Following byte values are not allowed:\n-- \\000, s, S, \\010, \\013, \\124, %\n-- Because SendChatMessage will error\n-- if an UTF8 multibyte character is incomplete,\n-- all character values above 127 have to be encoded to avoid this.\n-- This costs quite a bit of bandwidth (about 13-14%)\n-- Also, because drunken status is unknown for the received\n-- , strings used with SendChatMessage should be terminated with\n-- an identifying byte value, after which the server MAY add \"...hic!\"\n-- or as much as it can fit(!).\n-- Pass the identifying byte as a reserved character to this function\n-- to ensure the encoding doesn't contain that value.\n-- or use this: local message, match = arg1:gsub(\"^(.*)\\029.-$\", \"%1\")\n-- arg1 is message from channel, \\029 is the string terminator\n-- , but may be used in the encoded datastream as well. :-)\n-- This encoding will expand data anywhere from:\n-- 0% (average with pure ascii text)\n-- 53.5% (average with random data valued zero to 255)\n-- 100% (only encoding data that encodes to two bytes)\nlocal function GenerateWoWChatChannelCodec()\n\tlocal r = {}\n\tfor i = 128, 255 do\n\t\tr[#r+1] = _byte_to_char[i]\n\tend\n\n\tlocal reserved_chars = \"sS\\000\\010\\013\\124%\"..table_concat(r)\n\treturn LibDeflate:CreateCodec(reserved_chars\n\t\t, \"\\029\\031\", \"\\015\\020\")\nend\n\nlocal _chat_channel_codec\n\n--- Encode the string to make it ready to be transmitted in World of\n-- Warcraft chat channel. <br>\n-- See also https://wow.gamepedia.com/ValidChatMessageCharacters\n-- @param str [string] The string to be encoded.\n-- @return [string] The encoded string.\n-- @see LibDeflate:DecodeForWoWChatChannel\nfunction LibDeflate:EncodeForWoWChatChannel(str)\n\tif type(str) ~= \"string\" then\n\t\terror((\"Usage: LibDeflate:EncodeForWoWChatChannel(str):\"\n\t\t\t..\" 'str' - string expected got '%s'.\"):format(type(str)), 2)\n\tend\n\tif not _chat_channel_codec then\n\t\t_chat_channel_codec = GenerateWoWChatChannelCodec()\n\tend\n\treturn _chat_channel_codec:Encode(str)\nend\n\n--- Decode the string produced by LibDeflate:EncodeForWoWChatChannel.\n-- @param str [string] The string to be decoded.\n-- @return [string/nil] The decoded string if succeeds. nil if fails.\n-- @see LibDeflate:EncodeForWoWChatChannel\nfunction LibDeflate:DecodeForWoWChatChannel(str)\n\tif type(str) ~= \"string\" then\n\t\terror((\"Usage: LibDeflate:DecodeForWoWChatChannel(str):\"\n\t\t\t..\" 'str' - string expected got '%s'.\"):format(type(str)), 2)\n\tend\n\tif not _chat_channel_codec then\n\t\t_chat_channel_codec = GenerateWoWChatChannelCodec()\n\tend\n\treturn _chat_channel_codec:Decode(str)\nend\n\n-- Credits to WeakAuras <https://github.com/WeakAuras/WeakAuras2>,\n-- and Galmok (galmok@gmail.com) for the 6 bit encoding algorithm.\n-- The result of encoding will be 25% larger than the\n-- origin string, but every single byte of the encoding result will be\n-- printable characters as the following.\nlocal _byte_to_6bit_char = {\n\t[0]=\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\",\n\t\"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\",\n\t\"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\",\n\t\"y\", \"z\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\",\n\t\"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\",\n\t\"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\",\n\t\"W\", \"X\", \"Y\", \"Z\", \"0\", \"1\", \"2\", \"3\",\n\t\"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"(\", \")\",\n}\n\nlocal _6bit_to_byte = {\n\t[97]=0,[98]=1,[99]=2,[100]=3,[101]=4,[102]=5,[103]=6,[104]=7,\n\t[105]=8,[106]=9,[107]=10,[108]=11,[109]=12,[110]=13,[111]=14,[112]=15,\n\t[113]=16,[114]=17,[115]=18,[116]=19,[117]=20,[118]=21,[119]=22,[120]=23,\n\t[121]=24,[122]=25,[65]=26,[66]=27,[67]=28,[68]=29,[69]=30,[70]=31,\n\t[71]=32,[72]=33,[73]=34,[74]=35,[75]=36,[76]=37,[77]=38,[78]=39,\n\t[79]=40,[80]=41,[81]=42,[82]=43,[83]=44,[84]=45,[85]=46,[86]=47,\n\t[87]=48,[88]=49,[89]=50,[90]=51,[48]=52,[49]=53,[50]=54,[51]=55,\n\t[52]=56,[53]=57,[54]=58,[55]=59,[56]=60,[57]=61,[40]=62,[41]=63,\n}\n\n--- Encode the string to make it printable. <br>\n--\n-- Credis to WeakAuras2, this function is equivalant to the implementation\n-- it is using right now. <br>\n-- The encoded string will be 25% larger than the origin string. However, every\n-- single byte of the encoded string will be one of 64 printable ASCII\n-- characters, which are can be easier copied, pasted and displayed.\n-- (26 lowercase letters, 26 uppercase letters, 10 numbers digits,\n-- left parenthese, or right parenthese)\n-- @param str [string] The string to be encoded.\n-- @return [string] The encoded string.\nfunction LibDeflate:EncodeForPrint(str)\n\tif type(str) ~= \"string\" then\n\t\terror((\"Usage: LibDeflate:EncodeForPrint(str):\"\n\t\t\t..\" 'str' - string expected got '%s'.\"):format(type(str)), 2)\n\tend\n\tlocal strlen = #str\n\tlocal strlenMinus2 = strlen - 2\n\tlocal i = 1\n\tlocal buffer = {}\n\tlocal buffer_size = 0\n\twhile i <= strlenMinus2 do\n\t\tlocal x1, x2, x3 = string_byte(str, i, i+2)\n\t\ti = i + 3\n\t\tlocal cache = x1+x2*256+x3*65536\n\t\tlocal b1 = cache % 64\n\t\tcache = (cache - b1) / 64\n\t\tlocal b2 = cache % 64\n\t\tcache = (cache - b2) / 64\n\t\tlocal b3 = cache % 64\n\t\tlocal b4 = (cache - b3) / 64\n\t\tbuffer_size = buffer_size + 1\n\t\tbuffer[buffer_size] =\n\t\t\t_byte_to_6bit_char[b1].._byte_to_6bit_char[b2]\n\t\t\t.._byte_to_6bit_char[b3].._byte_to_6bit_char[b4]\n\tend\n\n\tlocal cache = 0\n\tlocal cache_bitlen = 0\n\twhile i <= strlen do\n\t\tlocal x = string_byte(str, i, i)\n\t\tcache = cache + x * _pow2[cache_bitlen]\n\t\tcache_bitlen = cache_bitlen + 8\n\t\ti = i + 1\n\tend\n\twhile cache_bitlen > 0 do\n\t\tlocal bit6 = cache % 64\n\t\tbuffer_size = buffer_size + 1\n\t\tbuffer[buffer_size] = _byte_to_6bit_char[bit6]\n\t\tcache = (cache - bit6) / 64\n\t\tcache_bitlen = cache_bitlen - 6\n\tend\n\n\treturn table_concat(buffer)\nend\n\n--- Decode the printable string produced by LibDeflate:EncodeForPrint.\n-- \"str\" will have its prefixed and trailing control characters or space\n-- removed before it is decoded, so it is easier to use if \"str\" comes form\n-- user copy and paste with some prefixed or trailing spaces.\n-- Then decode fails if the string contains any characters cant be produced by\n-- LibDeflate:EncodeForPrint. That means, decode fails if the string contains a\n-- characters NOT one of 26 lowercase letters, 26 uppercase letters,\n-- 10 numbers digits, left parenthese, or right parenthese.\n-- @param str [string] The string to be decoded\n-- @return [string/nil] The decoded string if succeeds. nil if fails.\nfunction LibDeflate:DecodeForPrint(str)\n\tif type(str) ~= \"string\" then\n\t\terror((\"Usage: LibDeflate:DecodeForPrint(str):\"\n\t\t\t..\" 'str' - string expected got '%s'.\"):format(type(str)), 2)\n\tend\n\tstr = str:gsub(\"^[%c ]+\", \"\")\n\tstr = str:gsub(\"[%c ]+$\", \"\")\n\n\tlocal strlen = #str\n\tif strlen == 1 then\n\t\treturn nil\n\tend\n\tlocal strlenMinus3 = strlen - 3\n\tlocal i = 1\n\tlocal buffer = {}\n\tlocal buffer_size = 0\n\twhile i <= strlenMinus3 do\n\t\tlocal x1, x2, x3, x4 = string_byte(str, i, i+3)\n\t\tx1 = _6bit_to_byte[x1]\n\t\tx2 = _6bit_to_byte[x2]\n\t\tx3 = _6bit_to_byte[x3]\n\t\tx4 = _6bit_to_byte[x4]\n\t\tif not (x1 and x2 and x3 and x4) then\n\t\t\treturn nil\n\t\tend\n\t\ti = i + 4\n\t\tlocal cache = x1+x2*64+x3*4096+x4*262144\n\t\tlocal b1 = cache % 256\n\t\tcache = (cache - b1) / 256\n\t\tlocal b2 = cache % 256\n\t\tlocal b3 = (cache - b2) / 256\n\t\tbuffer_size = buffer_size + 1\n\t\tbuffer[buffer_size] =\n\t\t\t_byte_to_char[b1].._byte_to_char[b2].._byte_to_char[b3]\n\tend\n\n\tlocal cache  = 0\n\tlocal cache_bitlen = 0\n\twhile i <= strlen do\n\t\tlocal x = string_byte(str, i, i)\n\t\tx =  _6bit_to_byte[x]\n\t\tif not x then\n\t\t\treturn nil\n\t\tend\n\t\tcache = cache + x * _pow2[cache_bitlen]\n\t\tcache_bitlen = cache_bitlen + 6\n\t\ti = i + 1\n\tend\n\n\twhile cache_bitlen >= 8 do\n\t\tlocal byte = cache % 256\n\t\tbuffer_size = buffer_size + 1\n\t\tbuffer[buffer_size] = _byte_to_char[byte]\n\t\tcache = (cache - byte) / 256\n\t\tcache_bitlen = cache_bitlen - 8\n\tend\n\n\treturn table_concat(buffer)\nend\n\nlocal function InternalClearCache()\n\t_chat_channel_codec = nil\n\t_addon_channel_codec = nil\nend\n\n-- For test. Don't use the functions in this table for real application.\n-- Stuffs in this table is subject to change.\nLibDeflate.internals = {\n\tLoadStringToTable = LoadStringToTable,\n\tIsValidDictionary = IsValidDictionary,\n\tIsEqualAdler32 = IsEqualAdler32,\n\t_byte_to_6bit_char = _byte_to_6bit_char,\n\t_6bit_to_byte = _6bit_to_byte,\n\tInternalClearCache = InternalClearCache,\n}\n\n--[[-- Commandline options\n@class table\n@name CommandlineOptions\n@usage lua LibDeflate.lua [OPTION] [INPUT] [OUTPUT]\n\\-0    store only. no compression.\n\\-1    fastest compression.\n\\-9    slowest and best compression.\n\\-d    do decompression instead of compression.\n\\--dict <filename> specify the file that contains\nthe entire preset dictionary.\n\\-h    give this help.\n\\--strategy <fixed/huffman_only/dynamic> specify a special compression strategy.\n\\-v    print the version and copyright info.\n\\--zlib  use zlib format instead of raw deflate.\n]]\n\n-- currently no plan to support stdin and stdout.\n-- Because Lua in Windows does not set stdout with binary mode.\nif io and os and debug and _G.arg then\n\tlocal io = io\n\tlocal os = os\n\tlocal debug = debug\n\tlocal arg = _G.arg\n\tlocal debug_info = debug.getinfo(1)\n\tif debug_info.source == arg[0]\n\t\tor debug_info.short_src == arg[0] then\n\t-- We are indeed runnning THIS file from the commandline.\n\t\tlocal input\n\t\tlocal output\n\t\tlocal i = 1\n\t\tlocal status\n\t\tlocal is_zlib = false\n\t\tlocal is_decompress = false\n\t\tlocal level\n\t\tlocal strategy\n\t\tlocal dictionary\n\t\twhile (arg[i]) do\n\t\t\tlocal a = arg[i]\n\t\t\tif a == \"-h\" then\n\t\t\t\tprint(LibDeflate._COPYRIGHT\n\t\t\t\t\t..\"\\nUsage: lua LibDeflate.lua [OPTION] [INPUT] [OUTPUT]\\n\"\n\t\t\t\t\t..\"  -0    store only. no compression.\\n\"\n\t\t\t\t\t..\"  -1    fastest compression.\\n\"\n\t\t\t\t\t..\"  -9    slowest and best compression.\\n\"\n\t\t\t\t\t..\"  -d    do decompression instead of compression.\\n\"\n\t\t\t\t\t..\"  --dict <filename> specify the file that contains\"\n\t\t\t\t\t..\" the entire preset dictionary.\\n\"\n\t\t\t\t\t..\"  -h    give this help.\\n\"\n\t\t\t\t\t..\"  --strategy <fixed/huffman_only/dynamic>\"\n\t\t\t\t\t..\" specify a special compression strategy.\\n\"\n\t\t\t\t\t..\"  -v    print the version and copyright info.\\n\"\n\t\t\t\t\t..\"  --zlib  use zlib format instead of raw deflate.\\n\")\n\t\t\t\tos.exit(0)\n\t\t\telseif a == \"-v\" then\n\t\t\t\tprint(LibDeflate._COPYRIGHT)\n\t\t\t\tos.exit(0)\n\t\t\telseif a:find(\"^%-[0-9]$\") then\n\t\t\t\tlevel = tonumber(a:sub(2, 2))\n\t\t\telseif a == \"-d\" then\n\t\t\t\tis_decompress = true\n\t\t\telseif a == \"--dict\" then\n\t\t\t\ti = i + 1\n\t\t\t\tlocal dict_filename = arg[i]\n\t\t\t\tif not dict_filename then\n\t\t\t\t\tio.stderr:write(\"You must speicify the dict filename\")\n\t\t\t\t\tos.exit(1)\n\t\t\t\tend\n\t\t\t\tlocal dict_file, dict_status = io.open(dict_filename, \"rb\")\n\t\t\t\tif not dict_file then\n\t\t\t\t\tio.stderr:write(\n\t\t\t\t\t(\"LibDeflate: Cannot read the dictionary file '%s': %s\")\n\t\t\t\t\t:format(dict_filename, dict_status))\n\t\t\t\t\tos.exit(1)\n\t\t\t\tend\n\t\t\t\tlocal dict_str = dict_file:read(\"*all\")\n\t\t\t\tdict_file:close()\n\t\t\t\t-- In your lua program, you should pass in adler32 as a CONSTANT\n\t\t\t\t-- , so it actually prevent you from modifying dictionary\n\t\t\t\t-- unintentionally during the program development. I do this\n\t\t\t\t-- here just because no convenient way to verify in commandline.\n\t\t\t\tdictionary = LibDeflate:CreateDictionary(dict_str,\n\t\t\t\t\t#dict_str, LibDeflate:Adler32(dict_str))\n\t\t\telseif a == \"--strategy\" then\n\t\t\t\t-- Not sure if I should check error here\n\t\t\t\t-- If I do, redudant code.\n\t\t\t\ti = i + 1\n\t\t\t\tstrategy = arg[i]\n\t\t\telseif a == \"--zlib\" then\n\t\t\t\tis_zlib = true\n\t\t\telseif a:find(\"^%-\") then\n\t\t\t\tio.stderr:write((\"LibDeflate: Invalid argument: %s\")\n\t\t\t\t\t\t:format(a))\n\t\t\t\tos.exit(1)\n\t\t\telse\n\t\t\t\tif not input then\n\t\t\t\t\tinput, status = io.open(a, \"rb\")\n\t\t\t\t\tif not input then\n\t\t\t\t\t\tio.stderr:write(\n\t\t\t\t\t\t\t(\"LibDeflate: Cannot read the file '%s': %s\")\n\t\t\t\t\t\t\t:format(a, tostring(status)))\n\t\t\t\t\t\tos.exit(1)\n\t\t\t\t\tend\n\t\t\t\telseif not output then\n\t\t\t\t\toutput, status = io.open(a, \"wb\")\n\t\t\t\t\tif not output then\n\t\t\t\t\t\tio.stderr:write(\n\t\t\t\t\t\t\t(\"LibDeflate: Cannot write the file '%s': %s\")\n\t\t\t\t\t\t\t:format(a, tostring(status)))\n\t\t\t\t\t\tos.exit(1)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\ti = i + 1\n\t\tend -- while (arg[i])\n\n\t\tif not input or not output then\n\t\t\tio.stderr:write(\"LibDeflate:\"\n\t\t\t\t..\" You must specify both input and output files.\")\n\t\t\tos.exit(1)\n\t\tend\n\n\t\tlocal input_data = input:read(\"*all\")\n\t\tlocal configs = {\n\t\t\tlevel = level,\n\t\t\tstrategy = strategy,\n\t\t}\n\t\tlocal output_data\n\t\tif not is_decompress then\n\t\t\tif not is_zlib then\n\t\t\t\tif not dictionary then\n\t\t\t\t\toutput_data =\n\t\t\t\t\tLibDeflate:CompressDeflate(input_data, configs)\n\t\t\t\telse\n\t\t\t\t\toutput_data =\n\t\t\t\t\tLibDeflate:CompressDeflateWithDict(input_data, dictionary\n\t\t\t\t\t\t, configs)\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tif not dictionary then\n\t\t\t\t\toutput_data =\n\t\t\t\t\tLibDeflate:CompressZlib(input_data, configs)\n\t\t\t\telse\n\t\t\t\t\toutput_data =\n\t\t\t\t\tLibDeflate:CompressZlibWithDict(input_data, dictionary\n\t\t\t\t\t\t, configs)\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\tif not is_zlib then\n\t\t\t\tif not dictionary then\n\t\t\t\t\toutput_data = LibDeflate:DecompressDeflate(input_data)\n\t\t\t\telse\n\t\t\t\t\toutput_data = LibDeflate:DecompressDeflateWithDict(\n\t\t\t\t\t\tinput_data, dictionary)\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tif not dictionary then\n\t\t\t\t\toutput_data = LibDeflate:DecompressZlib(input_data)\n\t\t\t\telse\n\t\t\t\t\toutput_data = LibDeflate:DecompressZlibWithDict(\n\t\t\t\t\t\tinput_data, dictionary)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\n\t\tif not output_data then\n\t\t\tio.stderr:write(\"LibDeflate: Decompress fails.\")\n\t\t\tos.exit(1)\n\t\tend\n\n\t\toutput:write(output_data)\n\t\tif input and input ~= io.stdin then\n\t\t\tinput:close()\n\t\tend\n\t\tif output and output ~= io.stdout then\n\t\t\toutput:close()\n\t\tend\n\n\t\tio.stderr:write((\"Successfully writes %d bytes\"):format(\n\t\t\toutput_data:len()))\n\t\tos.exit(0)\n\tend\nend\n\nreturn LibDeflate\n"
  },
  {
    "path": "DBM-Core/Libs/LibDurability/LibDurability.lua",
    "content": "\nlocal LD = LibStub:NewLibrary(\"LibDurability\", 2)\nif not LD then return end -- No upgrade needed\n\n-- Throttle times for separate channels\nLD.throttleTable = LD.throttleTable or {\n\t[\"RAID\"] = 0,\n\t[\"PARTY\"] = 0,\n}\nLD.throttleSendTable = LD.throttleSendTable or {\n\t[\"RAID\"] = 0,\n\t[\"PARTY\"] = 0,\n}\nLD.callbackMap = LD.callbackMap or {}\nLD.frame = LD.frame or CreateFrame(\"Frame\")\n\nlocal throttleTable = LD.throttleTable\nlocal throttleSendTable = LD.throttleSendTable\nlocal callbackMap = LD.callbackMap\nlocal frame = LD.frame\n\nlocal next, type, error, tonumber, format, match = next, type, error, tonumber, string.format, string.match\nlocal GetTime, GetInventoryItemDurability, GetNumPartyMembers, GetNumRaidMembers, SendAddonMessage = GetTime, GetInventoryItemDurability, GetNumPartyMembers, GetNumRaidMembers, SendAddonMessage\nlocal pName = UnitName(\"player\")\n\nlocal function IsInGroup()\n\treturn GetNumPartyMembers() > 0 or GetNumRaidMembers() > 0\nend\n\nlocal function IsInRaid()\n\treturn GetNumRaidMembers() > 0\nend\n\nlocal function GetDurability()\n\tlocal curTotal, maxTotal, broken = 0, 0, 0\n\tfor i = 1, 18 do\n\t\tlocal curItemDurability, maxItemDurability = GetInventoryItemDurability(i)\n\t\tif curItemDurability and maxItemDurability then\n\t\t\tcurTotal = curTotal + curItemDurability\n\t\t\tmaxTotal = maxTotal + maxItemDurability\n\t\t\tif maxItemDurability > 0 and curItemDurability == 0 then\n\t\t\t\tbroken = broken + 1\n\t\t\tend\n\t\tend\n\tend\n\tlocal percent = curTotal / maxTotal * 100\n\treturn percent, broken\nend\nLD.GetDurability = GetDurability\n\nframe:SetScript(\"OnEvent\", function(_, _, prefix, msg, channel, sender)\n\tif prefix == \"Durability\" and throttleTable[channel] then\n\t\tif msg == \"R\" then\n\t\t\tlocal t = GetTime()\n\t\t\tif t - throttleTable[channel] > 1 then\n\t\t\t\tthrottleTable[channel] = t\n\t\t\t\tlocal percent, broken = GetDurability()\n\t\t\t\tSendAddonMessage(\"Durability\", format(\"%d,%d\", percent, broken), channel)\n\t\t\tend\n\t\t\treturn\n\t\tend\n\n\t\tlocal percent, broken = match(msg, \"^(%d+),(%d+)$\")\n\t\tpercent = tonumber(percent)\n\t\tbroken = tonumber(broken)\n\t\tif percent and broken then\n\t\t\tfor _,func in next, callbackMap do\n\t\t\t\tfunc(percent, broken, sender, channel)\n\t\t\tend\n\t\tend\n\tend\nend)\nframe:RegisterEvent(\"CHAT_MSG_ADDON\")\n\n-- For automatic group handling, don't pass a channel. The order is INSTANCE_CHAT > RAID > GROUP.\nfunction LD:RequestDurability(channel)\n\tif channel and not throttleSendTable[channel] then\n\t\terror(\"LibDurability: Incorrect channel type for :RequestDurability.\")\n\telse\n\t\tif not channel and IsInGroup() then\n\t\t\tchannel = IsInRaid() and \"RAID\" or \"PARTY\"\n\t\tend\n\n\t\tlocal percent, broken = GetDurability()\n\t\tfor _,func in next, callbackMap do\n\t\t\tfunc(percent, broken, pName, channel) -- This allows us to show our own durability when not grouped\n\t\tend\n\n\t\tif channel then\n\t\t\tlocal t = GetTime()\n\t\t\tif t - throttleSendTable[channel] > 1 then\n\t\t\t\tthrottleSendTable[channel] = t\n\t\t\t\tSendAddonMessage(\"Durability\", \"R\", channel)\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction LD:Register(addon, func)\n\tif not addon or addon == LD then\n\t\terror(\"LibDurability: You must pass your own addon name or object to :Register.\")\n\tend\n\n\tlocal t = type(func)\n\tif t == \"string\" then\n\t\tcallbackMap[addon] = function(...) addon[func](addon, ...) end\n\telseif t == \"function\" then\n\t\tcallbackMap[addon] = func\n\telse\n\t\terror(\"LibDurability: Incorrect function type for :Register.\")\n\tend\nend\n\nfunction LD:Unregister(addon)\n\tif not addon or addon == LD then\n\t\terror(\"LibDurability: You must pass your own addon name or object to :Unregister.\")\n\tend\n\tcallbackMap[addon] = nil\nend\n\n"
  },
  {
    "path": "DBM-Core/Libs/LibGroupTalents-1.0/LibGroupTalents-1.0.lua",
    "content": "--[[\nName: LibGroupTalents-1.0\nRevision: $Rev: 56 $\nAuthor: Zek\nDocumentation: http://wowace.com/wiki/LibGroupTalents-1.0\nSVN: svn://svn.wowace.com/wow/libgrouptalents-1-0/mainline/trunk\nDescription: Talent Library abstraction layer to provide easy interface to the lower level system\nDependancies: LibStub, CallbackHandler-1.0, LibTalentQuery-1.0\nLicense: GPL v3\n\nPurpose:\n\tLibGroupTalents-1.0 is intended to do the following basic functions usually handled at the mod level.\n\n\t- Maintain a raid wide table of talents, automatically updated on roster changes, notifying you on talent receipts.\n\t- Provide easy access to talent queries (spec weight, spec name, specific talent presence)\n\t- Monitor talent changes in players, and notify of changes (respec, talent swap, update after out of sight, level up)\n\t- Monitor player roles, and notify of changes (melee, tank, healer, caster)\n\t- Communicate directly with itself to other users to update talents via addon channel when possible\n\nNotes:\n\tThe LibTalentQuery-1.0 dependancy must be included before LibGroupTalents-1.0 in any lib.xml or mod side TOC declarations.\n\nFunctions:\n\tUnitHasTalent(unit, talentName[, group])-- Returns: Points spent in talent or nil\n\tGUIDHasTalent(guid, talentName[, group])-- As UnitHasTalent\n\tGetUnitTalentSpec(unitid[, group])\t\t-- Returns: Dominant Tree, spent1, spent2, spent3\n\tGetGUIDTalentSpec(guid[, group])\t\t-- As GetUnitTalentSpec\n\tGetUnitTalents(unit, refresh)\t\t\t-- Returns: Raw talent information in form of table of 3 strings of points spent. The refresh arg will force a re-query of the unit's talents\n\tGetGUIDTalents(guid, refresh)\t\t\t-- As GetUnitTalents\n\tGetUnitRole(unit)\t\t\t\t\t\t-- Returns one of: \"melee\", \"caster\", \"healer\", \"tank\"\n\tGetGUIDRole(guid)\t\t\t\t\t\t-- As GetUnitRole\n\tRefreshTalentsByUnit(unit)\t\t\t\t-- Force a refresh of talents for the specific unit\n\tRefreshTalentsByGUID(guid)\t\t\t\t-- Force a refresh of talents for the specific player GUID\n\tGetTreeNames(class)\t\t\t\t\t\t-- Returns: The three talent tree names for that class (Note: These return values are only valid after a player of that class has been inspected)\n\tGetTreeIcons(class)\t\t\t\t\t\t-- Returns: The three talent tree icons for that class (Note: As above)\n\tGetTalentCount()\t\t\t\t\t\t-- Returns: Talent info got, Talent info missing\n\tGetTalentMissingNames()\t\t\t\t\t-- Returns: Comma delimited list of player names we're missing talents for\n\tGetClassTalentInfo(class, talentName)\t-- Returns: Max Rank, Icon, Tab, Tier, Column, Tree Index\n\tGetUnitStorageString(unit)\t\t\t\t-- Returns: An encoded data string containing talent information for the player which can be stored by mods to set in later sessions using SetStorageString()\n\tGetGUIDStorageString(guid)\t\t\t\t-- As GetUnitStorageString\n\tSetStorageString(talentString)\t\t\t-- Returns: true on success (applicable). Any second return value indicates the data was invalid and should not be kept\n\tGetUnitGlyphs(unit[, group])\t\t\t-- Returns: Up to 6 spell IDs for the currently assigned Glyphs (Note: For the moment, we can only see the glyphs of players running LibGroupTalents-1.0)\n\tGetGUIDGlyphs(guid[, group])\t\t\t-- As GetUnitGlyphs\n\tUnitHasGlyph(unit, glyph [, group])\t\t-- Returns: true if the player has the glyph associated with spellID or spellName (Note: For the moment, we can only see the glyphs of players running LibGroupTalents-1.0)\n\tGUIDHasGlyph(unit, glyph [, group])\t\t-- As UnitHasGlyph\n\tPurgeAndRescanTalents()\t\t\t\t\t-- Wipe current roster of all talents and rescan from start\n\nConvenience Functions (Similar to Blizzard API functions, but callable with a unit ID):\n\tGetActiveTalentGroup(unit)\t\t\t\t-- Returns: Active talent group for unit\n\tGetNumTalentGroups(unit)\t\t\t\t-- Returns: Number of talent groups for unit\n\tGetNumTalentTabs(unit)\t\t\t\t\t-- Returns: Number of talent tabs. Here's a clue; it's going to be 3...\n\tGetTalentTabInfo(unit, tab[, group])\t-- Returns: Tree Name, Tree Icon, Points Spent, Tree Background\n\tGetNumTalents(unit, tab)\t\t\t\t-- Returns: Number of talents for specified tree\n\tGetTalentInfo(unit, tab, index[, group])-- Returns: Talent Name, Icon, Tier, Column, Points Spent, Max Rank (Note that preview return values are not given unless called with \"player\")\n\tGetUnspentTalentPoints(unit[, group])\t-- Returns: Number of un-spent talent points for the unit\n\nEvents:\n\tLibGroupTalents_Update(guid, unit, newSpec, n1, n2, n3 [, oldSpec, o1, o2, o3])\t-- Received updated talents. If it's a respec, or old set is know, it passes the old info also (this is not sent if new talent scan is same as previous)\n\tLibGroupTalents_UpdateComplete(guid1, guid2[, ...])\t-- Sent when there are no more pending talent reads due (passes all GUIDs that were updated since last time this event was fired)\n\tLibGroupTalents_Add(guid, unit, name, realm)\t-- Unit added to talent roster (Talents not necessarily available yet, but this is the mod's chance to feed talents using SetStorageString)\n\tLibGroupTalents_Remove(guid, name, realm)\t\t\t\t\t\t\t\t\t\t-- Unit removed from talent roster (This is your last chance to store talents if required using GetUnitStorageString)\n\tLibGroupTalents_RoleChange(guid, unit, newrole, oldrole)\t\t-- Roles are: \"melee\", \"caster\", \"healer\", \"tank\"\n\tLibGroupTalents_GlyphUpdate(guid, unit)\t\t\t-- Fired when a player's glyphs change (Note: For the moment, we can only see the glyphs of players running LibGroupTalents-1.0)\n\n]]\n\nlocal TalentQuery = LibStub(\"LibTalentQuery-1.0\")\n\nlocal MAJOR, MINOR = \"LibGroupTalents-1.0\", tonumber((\"$Rev: 56 $\"):match(\"(%d+)\"))\nlocal lib = LibStub:NewLibrary(MAJOR, MINOR)\nif not lib then return end\n\nlocal ChatThrottleLib = _G.ChatThrottleLib\n\nlib.roster = lib.roster or {}\nlib.classTalentData = lib.classTalentData or {}\nlib.batch = lib.batch or {}\nlib.pendingStorageStrings = lib.pendingStorageStrings or {}\n\nlocal function UnitFullName(unit)\n\tlocal name, realm = UnitName(unit)\n\tlocal namerealm = realm and realm ~= \"\" and name .. \"-\" .. realm or name\n\treturn namerealm\nend\n\nlocal function RosterInfoFullName(info)\n\tlocal name, realm = info.name, info.realm\n\tlocal namerealm = realm and realm ~= \"\" and name .. \"-\" .. realm or name\n\treturn namerealm\nend\n\nlocal specChangers = {}\nfor index,spellid in ipairs(_G.TALENT_ACTIVATION_SPELLS) do\n\tspecChangers[GetSpellInfo(spellid)] = index\nend\n\nlocal frame = lib.frame\nif (not frame) then\n\tframe = CreateFrame(\"Frame\", \"LibGroupTalents_Frame\")\n\tlib.frame = frame\nend\nframe:UnregisterAllEvents()\nframe:RegisterEvent(\"RAID_ROSTER_UPDATE\")\nframe:RegisterEvent(\"PARTY_MEMBERS_CHANGED\")\nframe:RegisterEvent(\"UNIT_NAME_UPDATE\")\nframe:RegisterEvent(\"PLAYER_TALENT_UPDATE\")\nframe:RegisterEvent(\"UNIT_LEVEL\")\nframe:RegisterEvent(\"UNIT_AURA\")\t\t\t\t\t-- Always get a UNIT_AURA when a unit's UnitIsVisible() changes\nframe:RegisterEvent(\"CHAT_MSG_ADDON\")\nframe:RegisterEvent(\"UNIT_SPELLCAST_SUCCEEDED\")\nframe:RegisterEvent(\"PLAYER_LOGIN\")\nframe:RegisterEvent(\"GLYPH_ADDED\")\nframe:RegisterEvent(\"GLYPH_REMOVED\")\nframe:RegisterEvent(\"GLYPH_UPDATED\")\n\nframe:SetScript(\"OnEvent\", function(self, event, ...)\n\treturn lib[event](lib, ...)\nend)\n\nif not lib.events then\n\tlib.events = LibStub(\"CallbackHandler-1.0\"):New(lib)\nend\n\nlocal next, select, pairs, type = next, select, pairs, type\nlocal new, del, deepDel\ndo\n\tlocal list = setmetatable({},{__mode='k'})\n\tfunction new(...)\n\t\tlocal t = next(list)\n\t\tif t then\n\t\t\tlist[t] = nil\n\t\t\tfor i = 1, select('#', ...) do\n\t\t\t\tt[i] = select(i, ...)\n\t\t\tend\n\t\t\treturn t\n\t\telse\n\t\t\treturn {...}\n\t\tend\n\tend\n\tfunction del(t)\n\t\tif (t) then\n\t\t\twipe(t)\n\t\t\tt[''] = true\n\t\t\tt[''] = nil\n\t\t\tlist[t] = true\n\t\tend\n\tend\n\tfunction deepDel(t)\n\t\tif (t) then\n\t\t\tfor k,v in pairs(t) do\n\t\t\t\tif type(v) == \"table\" then\n\t\t\t\t\tdeepDel(v)\n\t\t\t\tend\n\t\t\t\tt[k] = nil\n\t\t\tend\n\t\t\tt[''] = true\n\t\t\tt[''] = nil\n\t\t\tlist[t] = true\n\t\tend\n\tend\nend\n\ndo\n\tlocal delay = 0\n\tframe:SetScript(\"OnUpdate\", function(self, elapsed)\n\t\tif (lib.raidRosterUpdate) then\n\t\t\tlib.raidRosterUpdate = nil\n\t\t\tlib:OnRaidRosterUpdate()\n\t\tend\n\n\t\tif (lib.refreshCheckTimer) then\n\t\t\tlib.refreshCheckTimer = lib.refreshCheckTimer - elapsed\n\t\t\tif (lib.refreshCheckTimer < 0) then\n\t\t\t\tlib.refreshCheckTimer = nil\n\t\t\t\tlib:CheckForMissingTalents()\n\t\t\tend\n\t\tend\n\n\t\tif (lib.talentTimers) then\n\t\t\tdelay = delay + elapsed\n\t\t\tif (delay > 1) then\n\t\t\t\tdelay = 0\n\t\t\t\tlocal now = GetTime()\n\t\t\t\tlocal triggers\n\t\t\t\tfor guid,when in pairs(lib.talentTimers) do\n\t\t\t\t\tif (now > when) then\n\t\t\t\t\t\t-- Pass to second table to process, because RefreshTimers can affect this talentTimers table\n\t\t\t\t\t\t-- So it's important we're not still iterating it at the time\n\t\t\t\t\t\tif (not triggers) then\n\t\t\t\t\t\t\ttriggers = new()\n\t\t\t\t\t\tend\n\t\t\t\t\t\ttriggers[guid] = true\n\t\t\t\t\t\tlib.talentTimers[guid] = nil\n\t\t\t\t\t\tif (not next(lib.talentTimers)) then\n\t\t\t\t\t\t\tlib.talentTimers = del(lib.talentTimers)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\t\tif (triggers) then\n\t\t\t\t\tfor guid in pairs(triggers) do\n\t\t\t\t\t\tlib:RefreshTalentsByGUID(guid)\n\t\t\t\t\tend\n\t\t\t\t\tdel(triggers)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\n\t\tif (not lib.talentTimers and not lib.refreshCheckTimer) then\n\t\t\tself:Hide()\n\t\tend\n\tend)\nend\nframe:Show()\nlib.raidRosterUpdate = true\n\n-- GetGUIDTalentsRaw\nlocal function GetGUIDTalentsRaw(guid, group)\n\tlocal r = guid and lib.roster[guid]\n\treturn r and r.talents and r.talents[group or r.active], r\nend\n\n-- PLAYER_LOGIN\nfunction lib:PLAYER_LOGIN()\n\tChatThrottleLib = _G.ChatThrottleLib\n\tself:TriggerRefreshTalents(UnitGUID(\"player\"), 2)\n\tlib.PLAYER_LOGIN = nil\nend\n\n-- RAID_ROSTER_UPDATE\nfunction lib:RAID_ROSTER_UPDATE()\n\tself.raidRosterUpdate = true\n\tframe:Show()\nend\nlib.PARTY_MEMBERS_CHANGED = lib.RAID_ROSTER_UPDATE\n\n-- UNIT_NAME_UPDATE\nfunction lib:UNIT_NAME_UPDATE(unit)\n\tlocal guid = unit and UnitGUID(unit)\n\tlocal r = guid and self.roster[guid]\n\tif (r) then\n\t\tlocal needsAdd = r.name == UNKNOWN\n\t\tr.name, r.realm = UnitName(unit)\n\t\tif (r.realm == \"\") then\n\t\t\tr.realm = nil\n\t\tend\n\t\tr.class = select(2, UnitClass(unit))\n\t\tr.level = UnitLevel(unit)\n\t\tif (not r.talents) then\n\t\t\tif (needsAdd) then\n\t\t\t\tself.events:Fire(\"LibGroupTalents_Add\", guid, unit, r.name, r.realm)\n\t\t\tend\n\n\t\t\tself:CheckForMissingTalents()\n\t\tend\n\tend\nend\n\n-- AnyPending\nlocal function AnyPending()\n\tlocal checkUpdate\n\tfor guid,info in pairs(lib.roster) do\n\t\tlocal namerealm = RosterInfoFullName(info)\n\t\tif (UnitIsConnected(namerealm)) then\n\t\t\tif (lib.wasOffline) then\n\t\t\t\tlib.wasOffline[guid] = nil\n\t\t\tend\n\t\t\tif (not info.talents or info.refresh) then\n\t\t\t\treturn true\n\t\t\tend\n\t\telse\n\t\t\tif (not lib.wasOffline) then\n\t\t\t\tlib.wasOffline = new()\n\t\t\tend\n\t\t\tlib.wasOffline[guid] = true\n\t\tend\n\tend\n\tif (lib.wasOffline and not next(lib.wasOffline)) then\n\t\tlib.wasOffline = del(lib.wasOffline)\n\tend\nend\n\n-- CheckForUpdateComplete\nlocal function CheckForUpdateComplete()\n\t-- When all pending updates are complete, send an event to notify nothing else is due\n\tif (next(lib.batch)) then\n\t\tif (not AnyPending()) then\n\t\t\tlib.events:Fire(\"LibGroupTalents_UpdateComplete\", unpack(lib.batch))\n\t\t\twipe(lib.batch)\n\t\tend\n\tend\nend\n\n-- UNIT_LEVEL\nfunction lib:UNIT_LEVEL(unit)\n\tif (UnitInParty(unit) or UnitInRaid(unit)) then\n\t\tlocal guid = UnitGUID(unit)\n\t\tlocal r = guid and self.roster[guid]\n\t\tif (r) then\n\t\t\tr.level = UnitLevel(unit)\n\t\t\tself:RefreshTalentsByUnit(unit)\n\t\tend\n\tend\nend\n\n-- UNIT_AURA\nfunction lib:UNIT_AURA(unit)\n\tlocal guid = UnitGUID(unit)\n\tif (not UnitIsVisible(unit) or (self.wasOffline and self.wasOffline[guid])) then\n\t\tif (not self.outOfSight) then\n\t\t\tself.outOfSight = {}\n\t\tend\n\t\tself.outOfSight[guid] = true\n\t\tself:RefreshTalentsByGUID(guid)\n\tend\nend\n\n-- OnRaidRosterUpdate\nfunction lib:OnRaidRosterUpdate()\n\tlocal instanceType = select(2, IsInInstance())\n\tif (instanceType == \"pvp\" or instanceType == \"arena\") then\n\t\tself.distribution = \"BATTLEGROUND\"\n\telse\n\t\tif (GetNumRaidMembers() > 0) then\n\t\t\tself.distribution = \"RAID\"\n\t\telseif (GetNumPartyMembers() > 0) then\n\t\t\tself.distribution = \"PARTY\"\n\t\telse\n\t\t\tself.distribution = nil\n\t\tend\n\tend\n\tif (self.distribution) then\n\t\tif (self.sentHello ~= self.distribution) then\n\t\t\tself.sentHello = self.distribution\n\t\t\tself:SendCommMessage(\"HELLO \"..MINOR, nil, self.distribution)\n\t\tend\n\telse\n\t\tself.sentHello = nil\n\t\tself.talentThrottle = del(self.talentThrottle)\n\t\tself.wasOffline = del(self.wasOffline)\n\t\tself.outOfSight = del(self.outOfSight)\n\t\twipe(self.pendingStorageStrings)\n\tend\n\n\t-- Now check for roster changes\n\tlocal subtractions = new()\n\tlocal additions = new()\n\tlocal changes = new()\n\n\tif (self.roster) then\n\t\tfor guid,info in pairs(self.roster) do\n\t\t\tsubtractions[guid] = info.level or 0\n\t\tend\n\tend\n\n\tfor unit in self:IterateRoster() do\n\t\tlocal guid = UnitGUID(unit)\n\t\tif (guid) then\n\t\t\tlocal n = self.roster[guid]\n\t\t\tif (not n) then\n\t\t\t\tn = new()\n\t\t\t\tself.roster[guid] = n\n\t\t\tend\n\n\t\t\tn.name, n.realm = UnitName(unit)\n\t\t\tif (n.realm == \"\") then\n\t\t\t\tn.realm = nil\t\t\t\t-- Fix this already..\n\t\t\tend\n\t\t\tn.level = UnitLevel(unit)\n\t\t\tn.class = select(2, UnitClass(unit))\n\t\t\tn.unit = unit\n\n\t\t\tif (subtractions[guid]) then\n\t\t\t\tif (subtractions[guid] ~= n.level) then\n\t\t\t\t\tchanges[guid] = unit\t\t\t\t-- Level changed, needs a rescan\n\t\t\t\tend\n\n\t\t\t\tsubtractions[guid] = nil\n\t\t\telse\n\t\t\t\tif (n.name ~= UNKNOWN) then\n\t\t\t\t\tself.events:Fire(\"LibGroupTalents_Add\", guid, unit, n.name, n.realm)\n\t\t\t\tend\n\t\t\t\tadditions[guid] = unit\n\t\t\tend\n\t\tend\n\tend\n\n\tif (next(additions)) then\n\t\tfor guid,unit in pairs(additions) do\n\t\t\tself:GetUnitTalents(unit)\n\t\tend\n\tend\n\n\tif (next(changes)) then\n\t\tfor guid,unit in pairs(changes) do\n\t\t\tself:GetUnitTalents(unit)\n\t\tend\n\tend\n\n\tif (next(subtractions)) then\n\t\tfor guid in pairs(subtractions) do\n\t\t\tlocal r = self.roster[guid]\n\t\t\tif (r) then\n\t\t\t\tself.events:Fire(\"LibGroupTalents_Remove\", guid, r.name, r.realm)\n\t\t\t\tself.roster[guid] = deepDel(r)\n\n\t\t\t\tlocal classStorageStrings = self.pendingStorageStrings[r.class]\n\t\t\t\tif (classStorageStrings) then\n\t\t\t\t    classStorageStrings[guid] = del(classStorageStrings[guid])\n\t\t\t\t    if (not next(classStorageStrings)) then\n\t\t\t\t    \tself.pendingStorageStrings[r.class] = del(self.pendingStorageStrings[r.class])\n\t\t\t\t    end\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\n\t\tCheckForUpdateComplete()\n\tend\n\n\tdel(additions)\n\tdel(subtractions)\n\tdel(changes)\n\n\tself:CheckForMissingTalents()\nend\n\n-- ValidateUnit\nlocal function ValidateUnit(r, guid)\n\tlocal unit = r.unit\t\n\tif (UnitGUID(unit) ~= guid) then\n\t\tlocal name = r.name .. (r.realm and \"-\" or \"\") .. (r.realm or \"\")\n\t\tlocal index = UnitInRaid(name)\n\t\tif (index) then\n\t\t\tr.unit = \"raid\"..index\n\t\t\treturn true\n\t\telse\n\t\t\tif (UnitGUID(\"player\") == guid) then\n\t\t\t\tr.unit = \"player\"\n\t\t\t\treturn true\n\n\t\t\telseif (UnitInParty(name)) then\n\t\t\t\tfor i = 1,4 do\n\t\t\t\t\tif (UnitGUID(\"party\"..i) == guid) then\n\t\t\t\t\t\tr.unit = \"party\"..i\n\t\t\t\t\t\treturn true\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\treturn\n\tend\n\n\treturn true\nend\n\n-- CountTree\nlocal function CountTree(branch)\n\tlocal count = 0\n\tfor i = 1,#branch do\n\t\tcount = count + branch:byte(i) - 48\n\tend\n\treturn count\nend\n\n-- TalentWeight\nlocal function TalentWeight(talents, class)\n\tif (talents and #talents == 3 and class) then\n\t\tlocal c1, c2, c3 = CountTree(talents[1]), CountTree(talents[2]), CountTree(talents[3])\n\n\t\tlocal weight = 1\n\t\tif (c2 > c1 and c2 > c3) then\n\t\t\tweight = 2\n\t\telseif (c3 > c1 and c3 > c2) then\n\t\t\tweight = 3\n\t\tend\n\n\t\tlocal data = lib.classTalentData[class]\n\t\tif (data and data[weight]) then\n\t\t\treturn data[weight].name, c1, c2, c3\n\t\tend\n\n\t\treturn weight, c1, c2, c3\n\tend\n\treturn nil, 0, 0, 0\nend\n\ndo\n-- First segment: Player ID (from GUID), Name, level, class, activePage, TalentString\n-- Subsequent: spec number, talentString()\n\n\t-- crc\n\tlocal function crc32(str)\n\t\tlocal val = tonumber((select(2, GetBuildInfo())))\t-- Use WoW build as CRC base\n\t\tfor i = 1,#str do\n\t\t\tval = bit.band(val * 2 + str:byte(i), 0xFFFF)\n\t\tend\n\t\treturn val\n\tend\n\n\t-- GetUnitStorageString\n\tfunction lib:GetUnitStorageString(unit)\n\t\treturn self:GetGUIDStorageString(UnitGUID(unit))\n\tend\n\n\t-- GetGUIDStorageString\n\t-- Make a storage string for mods to store talents.\n\t-- Rules: 1) Your own realm only 2) Their talents are complete (nothing unspent)\n\tfunction lib:GetGUIDStorageString(guid)\n\t\tlocal r = self.roster[guid]\n\t\tif (r) then\n\t\t\tlocal id\n\t\t\tlocal playerGUID = UnitGUID(\"player\")\n\t\t\tif (playerGUID:sub(1, 6) == guid:sub(1, 6)) then\n\t\t\t\t-- Same realm code, so just trim it off. This is likely always true from what I've seen\n\t\t\t\tid = format(\"%X\", tonumber(guid:sub(7), 16))\n\t\t\telse\n\t\t\t\tid = guid:sub(4)\n\t\t\tend\n\n\t\t\tif (r.talents and r.active and not r.realm and (not r.unspent or not r.unspent[r.active])) then\n\t\t\t\tif (r.level < 1) then\n\t\t\t\t\tr.level = UnitLevel(r.name) or 0\n\t\t\t\tend\n\t\t\t\tlocal str = format(\"%s,%d,%s,%d,%d\", id, r.level, r.class, r.active, r.numActive)\n\t\t\t\tfor i = 1,r.numActive do\n\t\t\t\t\tlocal t = r.talents[i]\n\t\t\t\t\tif (t) then\n\t\t\t\t\t\tstr = format(\"%s;%d,%s\", str, i, table.concat(t, \"-\"))\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\treturn format(\"%s;%d\", str, crc32(str))\n\t\t\tend\n\t\tend\n\tend\n\n\t-- SetStorageString\n\tfunction lib:SetStorageString(str, comms)\n\t\tlocal ret, retInfo\n\t\tif (str) then\n\t\t\tlocal parts = new(strsplit(\";\", str))\n\t\t\tif (#parts >= 2) then\n\t\t\t\tlocal strCRC = tonumber(parts[#parts])\n\t\t\t\tlocal temp = table.concat(parts, \";\", 1, #parts - 1)\n\t\t\t\tif (crc32(temp) == strCRC) then\n\t\t\t\t\tlocal part1 = new(strsplit(\",\", parts[1]))\n\n\t\t\t\t\twhile true do\n\t\t\t\t\t\tlocal guid\n\t\t\t\t\t\tlocal id = part1[1]\n\t\t\t\t\t\tif (id:len() < 12) then\n\t\t\t\t\t\t\t-- Trimmed GUID, we'll prefix it with our own GUID's realm code\n\t\t\t\t\t\t\tguid = format(\"%s%012X\", UnitGUID(\"player\"):sub(1, 6), tonumber(id, 16))\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tguid = format(\"0x0%015s\", id)\n\t\t\t\t\t\tend\n\n\t\t\t\t\t\tlocal r = self.roster[guid]\n\t\t\t\t\t\tif (not r) then\n\t\t\t\t\t\t\tretInfo = format(\"Unexpected SetStorageString for ID %s\", guid)\n\t\t\t\t\t\t\tret = true\t-- Still return true, we just didn't want this string yet\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\telseif (r.name == UNKNOWN) then\n\t\t\t\t\t\t\tretInfo = format(\"Premature SetStorageString for ID %s\", guid)\n\t\t\t\t\t\t\tret = true\t-- Still return true, we just didn't want this string yet\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif (r.talents) then\n\t\t\t\t\t\t\t-- We've already received talents for this player\n\t\t\t\t\t\t\tret = true\t-- Still return true, we just didn't want this string because we have their talents\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tend\n\n\t\t\t\t\t\tif (not self.classTalentData[r.class]) then\n\t\t\t\t\t\t\t-- Received a storage string for a class that we've not yet been able to scan\n\t\t\t\t\t\t\t-- the talent trees for. We store this until we have that data\n\t\t\t\t\t\t\tlocal classStorageStrings = self.pendingStorageStrings[r.class]\n\t\t\t\t\t\t\tif (not classStorageStrings) then\n\t\t\t\t\t\t\t\tclassStorageStrings = new()\n\t\t\t\t\t\t\t\tself.pendingStorageStrings[r.class] = classStorageStrings\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tclassStorageStrings[guid] = str\n\t\t\t\t\t\t\tret = true\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tend\n\n\t\t\t\t\t\tlocal level = tonumber(part1[2])\n\t\t\t\t\t\tlocal class = part1[3]\n\t\t\t\t\t\tlocal active = tonumber(part1[4])\n\t\t\t\t\t\tlocal numActive = tonumber(part1[5])\n\n\t\t\t\t\t\tif (r.level < 1) then\n\t\t\t\t\t\t\tr.level = UnitLevel(r.name) or 0\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif (level ~= r.level and r.level > 1) then\n\t\t\t\t\t\t\t-- Won't accept talents for mismatched levels (but ignore errors reading the UnitLevel early)\n\t\t\t\t\t\t\tretInfo = \"Wrong level\"\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif (not r.class and class) then\n\t\t\t\t\t\t\t-- If we don't have the class, but the storage string does, we'll take it\n\t\t\t\t\t\t\tr.class = class\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif (class ~= r.class) then\n\t\t\t\t\t\t\t-- Class doesn't match, probably a char delete/remake or xrealm\n\t\t\t\t\t\t\tretInfo = format(\"Wrong class: expected %q, got %q\", tostring(r.class), tostring(class))\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tend\n\n\t\t\t\t\t\t-- Now the talent trees\n\t\t\t\t\t\tlocal talents = new()\n\t\t\t\t\t\tfor i = 2,#parts - 1 do\n\t\t\t\t\t\t\tlocal partN = new(strsplit(\",\", parts[i]))\n\t\t\t\t\t\t\tif (#partN == 2) then\n\t\t\t\t\t\t\t\tlocal specNumber = tonumber(partN[1])\n\t\t\t\t\t\t\t\tlocal specTalents = new(strsplit(\"-\", partN[2]))\n\n\t\t\t\t\t\t\t\tif (specNumber and #specTalents >= 3) then\n\t\t\t\t\t\t\t\t\ttalents[specNumber] = specTalents\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tdel(specTalents)\n\t\t\t\t\t\t\t\t\ttalents = del(talents)\n\t\t\t\t\t\t\t\t\tretInfo = \"Invalid talent specs in tree \"..i\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\n\t\t\t\t\t\tif (talents) then\n\t\t\t\t\t\t\tr.talents = talents\n\t\t\t\t\t\t\tr.active = active\n\t\t\t\t\t\t\tr.numActive = numActive\n\t\t\t\t\t\t\tif (comms ~= r.name) then\n\t\t\t\t\t\t\t\t-- If comms part sends player name along with packet, then we'll skip the refresh later\n\t\t\t\t\t\t\t\t-- which we'd normally do when Storage is set via app startup\n\t\t\t\t\t\t\t\tr.refresh = true\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tr.refresh = nil\n\t\t\t\t\t\t\tend\n\n\t\t\t\t\t\t\tValidateUnit(r, guid)\n\t\t\t\t\t\t\tlocal newSpec, n1, n2, n3 = TalentWeight(r.talents[r.active], r.class)\n\t\t\t\t\t\t\tself.events:Fire(\"LibGroupTalents_Update\", guid, r.unit, newSpec, n1, n2, n3)\n\t\t\t\t\t\t\tself:GetGUIDRole(guid, true)\n\t\t\t\t\t\t\tret = true\n\t\t\t\t\t\tend\n\t\t\t\t\t\tbreak\n\t\t\t\t\tend\n\n\t\t\t\t\tdel(part1)\n\t\t\t\telse\n\t\t\t\t\tretInfo = \"Invalid string\"\n\t\t\t\tend\n\t\t\tend\n\t\t\tdel(parts)\n\t\tend\n\n\t\treturn ret, retInfo\n\tend\nend\n\n-- GetClassTalentData\n-- Builds an internal table for talent name -> tree/index lookups.\nfunction GetClassTalentData(unit)\n\tlocal _, class = UnitClass(unit)\n\tif (class) then\n\t\tlocal data = lib.classTalentData[class]\n\t\tif (not data) then\n\t\t\tlocal isnotplayer = not UnitIsUnit(\"player\", unit)\n\t\t\tif (GetNumTalentTabs(isnotplayer) > 0) then\n\t\t\t\tdata = new()\n\n\t\t\t\tfor tab = 1, GetNumTalentTabs(isnotplayer) do\n\t\t\t\t\tlocal tree = new()\n\t\t\t\t\tlocal _\n\t\t\t\t\ttree.name, tree.icon, _, tree.background = GetTalentTabInfo(tab, isnotplayer)\n\t\t\t\t\ttinsert(data, tree)\n\n\t\t\t\t\ttree.list = new()\n\t\t\t\t\tfor i = 1,GetNumTalents(tab, isnotplayer) do\n\t\t\t\t\t\tlocal name, icon, tier, column, currentRank, maxRank = GetTalentInfo(tab, i, isnotplayer)\n\t\t\t\t\t\tif (name) then\n\t\t\t\t\t\t\tlocal entry = new()\n\t\t\t\t\t\t\tentry.name = name\n\t\t\t\t\t\t\tentry.icon = icon\n\t\t\t\t\t\t\tentry.tier = tier\n\t\t\t\t\t\t\tentry.column = column\n\t\t\t\t\t\t\tentry.maxRank = maxRank\n\t\t\t\t\t\t\tentry.index = i\n\t\t\t\t\t\t\tentry.treeIndex = tab\n\t\t\t\t\t\t\ttinsert(tree.list, entry)\n\t\t\t\t\t\t\tif (not data.list) then\n\t\t\t\t\t\t\t\tdata.list = new()\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tdata.list[name] = entry\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\t\tif (next(data)) then\n\t\t\t\t\tlib.classTalentData[class] = data\n\n\t\t\t\t\t--for guid,r in pairs(lib.roster) do\n\t\t\t\t\t--\tif (r.class == class and r.talents) then\n\t\t\t\t\t--\t\t-- We picked up class talent data for a class after receiving talents for them via comms\n\t\t\t\t\t--\t\t-- So, we fire an Update event for any members of the class we already have so that\n\t\t\t\t\t--\t\t-- talents can now be interpreted correctly.\n\t\t\t\t\t--\t\tlocal spec, n1, n2, n3 = TalentWeight(r.talents[r.active], class)\n\t\t\t\t\t--\t\tlib.events:Fire(\"LibGroupTalents_Update\", guid, unit, spec, n1, n2, n3)\n\t\t\t\t\t--\tend\n\t\t\t\t\t--end\n\n\t\t\t\t\tlocal classStorageStrings = lib.pendingStorageStrings[class]\n\t\t\t\t\tif (classStorageStrings) then\n\t\t\t\t\t\tlocal unitGUID = UnitGUID(unit)\n\t\t\t\t\t\tfor guid, str in pairs(classStorageStrings) do\n\t\t\t\t\t\t\tif (guid ~= unitGUID) then\n\t\t\t\t\t\t\t\tlib:SetStorageString(str)\n\t\t\t\t\t\t\tend\n \t\t\t\t\t\tend\n\t\t\t\t\t\tlib.pendingStorageStrings[class] = del(lib.pendingStorageStrings[class])\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tdeepDel(data)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend\n\n-- GetTreeNames\nfunction lib:GetTreeNames(class)\n\tlocal info = self.classTalentData[class]\n\tif (info) then\n\t\treturn info[1].name, info[2].name, info[3].name\n\tend\nend\n\n-- GetTreeIcons\nfunction lib:GetTreeIcons(class)\n\tlocal info = self.classTalentData[class]\n\tif (info) then\n\t\treturn info[1].icon, info[2].icon, info[3].icon\n\tend\nend\n\n-- ReadTalentGroup\nlocal function ReadTalentGroup(isnotplayer, group, class)\n\tlocal numTabs = GetNumTalentTabs(isnotplayer)\n\tif (numTabs and numTabs >= 3 and GetNumTalents(1, isnotplayer) > 0) then\n\t\tlocal ctd = lib.classTalentData[class]\n--[===[@debug@\nassert(ctd and ctd[1] and ctd[2] and ctd[3])\nassert(ctd[1].list and ctd[2].list and ctd[3].list)\n--@end-debug@]===]\n\n\t\tlocal n = new()\n\t\tfor tab = 1, numTabs do\n\t\t\tlocal branchLength = GetNumTalents(tab, isnotplayer, nil, group)\n\t\t\tif (branchLength ~= #ctd[tab].list) then\n\t\t\t\t-- Tab tree size is not what we expected for this class\n\t\t\t\tdel(n)\n\t\t\t\treturn\n\t\t\tend\n\n\t\t\tlocal t = new()\n\t\t\tlocal trim\n\t\t\tfor i = 1,branchLength do\n\t\t\t\tlocal name, icon, tier, column, currentRank, maxRank = GetTalentInfo(tab, i, isnotplayer, nil, group)\n\t\t\t\ttinsert(t, currentRank)\n\t\t\t\tif (currentRank > 0) then\n\t\t\t\t\ttrim = i\t\t\t-- We strip off trailing zeros from talent strings to save storage space\n\t\t\t\tend\n\t\t\tend\n\n\t\t\ttinsert(n, table.concat(t, nil, 1, trim or 0))\n\t\t\tdel(t)\n\t\tend\n\n\t\treturn n\n\tend\nend\n\n-- TalentQuery_Ready\nfunction lib:TalentQuery_Ready_Outsider(e, name, realm, unit)\n\tself:TalentQuery_Ready(e, name, realm, unit)\nend\n\n-- TalentQuery_Ready\nfunction lib:TalentQuery_Ready(e, name, realm, unit)\n\tGetClassTalentData(unit)\n\n\tlocal guid = unit and UnitGUID(unit)\n\tlocal r = guid and self.roster[guid]\n\tif (r) then\n\t\tlocal namerealm = realm and realm ~= \"\" and name .. \"-\" .. realm or name\n\t\tlocal isnotplayer = not UnitIsUnit(unit, \"player\")\n\n\t\tif (GetTalentTabInfo(1, isnotplayer)) then\n\t\t\tlocal active = GetActiveTalentGroup(isnotplayer)\n\t\t\tlocal numActive = GetNumTalentGroups(isnotplayer)\n\t\t\tlocal listUnspent, invalid\n\t\t\tlocal talents = new()\n\n\t\t\tfor group = 1,numActive do\n\t\t\t\tlocal n = ReadTalentGroup(isnotplayer, group, r.class)\n\t\t\t\tif (n and #n >= 3) then\n\t\t\t\t\ttalents[group] = n\n\t\t\t\telse\n\t\t\t\t\tinvalid = true\n\t\t\t\t\tbreak\n\t\t\t\tend\n\n\t\t\t\tlocal unspent = GetUnspentTalentPoints(isnotplayer, nil, group)\n\t\t\t\tif (unspent and unspent > 0) then\n\t\t\t\t\tif (not listUnspent) then\n\t\t\t\t\t\tlistUnspent = new()\n\t\t\t\t\tend\n\t\t\t\t\tlistUnspent[group] = unspent\n\t\t\t\tend\n\t\t\tend\n\n\t\t\tif (isnotplayer and (invalid or (listUnspent and listUnspent[active] or 0) > 0)) then\n\t\t\t\t-- Unit didn't have all their points spent in active group, so we'll have another look in 10 seconds\n\t\t\t\t-- Don't need to check when it's \"player\" because we get PLAYER_TALENT_UPDATE event on changes\n\t\t\t\tself:TriggerRefreshTalents(guid, 10)\n\t\t\tend\n\n\t\t\tif (not invalid) then\n\t\t\t\tif (active > numActive) then\n\t\t\t\t\t-- May be better to discard instead? We'll see\n\t\t\t\t\tactive = 1\n\t\t\t\tend\n\t\t\t\tself:OnReceiveTalents(guid, unit, talents, active, numActive, listUnspent)\n\t\t\tend\n\t\tend\n\tend\nend\nTalentQuery.RegisterCallback(lib, \"TalentQuery_Ready\")\nTalentQuery.RegisterCallback(lib, \"TalentQuery_Ready_Outsider\")\n\n-- GetUnitTalentSpec\nfunction lib:GetUnitTalentSpec(unit, group)\n\treturn self:GetGUIDTalentSpec(UnitGUID(unit), group)\nend\n\n-- GetGUIDTalentSpec\nfunction lib:GetGUIDTalentSpec(guid, group)\n\tlocal talents, r = GetGUIDTalentsRaw(guid, group)\n\tif (talents) then\n\t\treturn TalentWeight(talents, r.class)\n\tend\nend\n\n-- CompareTalents\nlocal function CompareTalents(tree1, tree2)\n\tif ((tree1 ~= nil) ~= (tree2 ~= nil)) then\n\t\treturn\n\tend\n\tif (tree1 and tree2 and #tree1 == #tree2) then\n\t\tfor i = 1,#tree1 do\n\t\t\tif (tree1[i] ~= tree2[i]) then\n\t\t\t\treturn\n\t\t\tend\n\t\tend\n\t\treturn true\n\tend\nend\n\n-- OnReceiveTalents\nfunction lib:OnReceiveTalents(guid, unit, talents, active, numActive, listUnspent)\n\tlocal r = self.roster[guid]\n\tif (r) then\n\t\tif (active ~= r.active or numActive ~= r.numActive or not CompareTalents(talents and talents[active], r.talents and r.talents[r.active])) then\n\t\t\tlocal oldTalents\n\t\t\tif (r.talents) then\n\t\t\t\toldTalents = r.talents[r.active]\n\t\t\tend\n\t\t\tdel(r.unspent)\n\n\t\t\tr.talents = talents\n\t\t\tr.active = active\n\t\t\tr.numActive = numActive\n\t\t\tr.unspent = listUnspent\n\n\t\t\tlocal newSpec, n1, n2, n3 = TalentWeight(r.talents[active], r.class)\n\n\t\t\tlocal fired\n\t\t\tif (oldTalents) then\n\t\t\t\t-- For those cases when we didn't have the alternate talents for a player for whatever reason.\n\t\t\t\t-- Maybe they just picked up dual talent spec, or gated to trainer to respec.\n\t\t\t\tlocal oldSpec, o1, o2, o3 = TalentWeight(oldTalents, r.class)\n\n\t\t\t\tif (o1 ~= n1 or o2 ~= n2 or o3 ~= n3) then\n\t\t\t\t\tself.events:Fire(\"LibGroupTalents_Update\", guid, unit, newSpec, n1, n2, n3, oldSpec, o1, o2, o3)\n\t\t\t\t\tfired = true\n\t\t\t\tend\n\t\t\tend\n\n\t\t\tif (not fired) then\n\t\t\t\tself.events:Fire(\"LibGroupTalents_Update\", guid, unit, newSpec, n1, n2, n3)\n\t\t\tend\n\t\t\tself:GetGUIDRole(guid, true)\n\n\t\t\ttinsert(self.batch, guid)\n\t\t\tCheckForUpdateComplete()\n\n\t\t\toldTalents = del(oldTalents)\n\t\t\treturn\n\t\tend\n\tend\n\tdel(talents)\nend\n\n-- OnReceiveGlyphs\nfunction lib:OnReceiveGlyphs(guid, sender, glyphs)\n\tlocal r = self.roster[guid]\n\tif (r) then\n\t\tif (ValidateUnit(r, guid)) then\n\t\t\tlocal oldGlyphs\n\t\t\tif (r.glyphs) then\n\t\t\t\toldGlyphs = r.glyphs[r.active]\n\t\t\t\tr.glyphs = del(r.glyphs)\n\t\t\tend\n\n\t\t\tr.glyphs = glyphs\n\n\t\t\tlocal newGlyphs = r.glyphs and r.glyphs[r.active]\n\t\t\tif (newGlyphs ~= oldGlyphs) then\n\t\t\t\tself.events:Fire(\"LibGroupTalents_GlyphUpdate\", guid, r.unit)\n\t\t\tend\n\t\t\treturn\n\t\tend\n\tend\n\n\tdel(glyphs)\nend\n\n-- GetUnitGlyphs\nfunction lib:GetUnitGlyphs(unit, group)\n\treturn self:GetGUIDGlyphs(UnitGUID(unit), group)\nend\n\n-- GetGUIDGlyphs\nfunction lib:GetGUIDGlyphs(guid, group)\n\tlocal r = self.roster[guid]\n\tif (r) then\n\t\tlocal g = r.glyphs and r.glyphs[group or r.active]\n\t\tif (g) then\n\t\t\tlocal temp = new(strsplit(\",\", g))\n\t\t\tfor i,str in ipairs(temp) do\n\t\t\t\ttemp[i] = tonumber(str)\n\t\t\tend\n\t\t\tlocal a, b, c, d, e, f = unpack(temp)\n\t\t\tdel(temp)\n\t\t\treturn a, b, c, d, e, f\n\t\tend\n\tend\nend\n                                        \n-- UnitHasGlyph\nfunction lib:UnitHasGlyph(unit, glyphID, group)\n\treturn lib:GUIDHasGlyph(UnitGUID(unit), glyphID, group)\nend\n\n-- GUIDHasGlyph\nfunction lib:GUIDHasGlyph(guid, glyphID, group)\n\tlocal ret\n\tlocal r = self.roster[guid]\n\tif (r) then\n\t\tlocal g = r.glyphs and r.glyphs[group or r.active]\n\t\tif (g) then\n\t\t\tlocal temp = new(strsplit(\",\", g))\n\t\t\tfor i,str in ipairs(temp) do\n\t\t\t\tlocal id = tonumber(str)\n\t\t\t\tif (type(glyphID) == \"number\") then\n\t\t\t\t\tif (glyphID == id) then\n\t\t\t\t\t\tret = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tif (glyphID == GetSpellInfo(id)) then\n\t\t\t\t\t\tret = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tdel(temp)\n\t\tend\n\tend\n\treturn ret\nend\n\n-- GLYPH_ADDED\nfunction lib:GLYPH_ADDED(index, a, b, c)\n\tself:RefreshPlayerGlyphs()\nend\n\n-- GLYPH_REMOVED\nfunction lib:GLYPH_REMOVED(index, a, b, c)\n\tself:RefreshPlayerGlyphs()\nend\n\n-- GLYPH_UPDATED\nfunction lib:GLYPH_UPDATED(index, a, b, c)\n\tself:RefreshPlayerGlyphs()\nend\n\n-- RefreshPlayerGlyphs\nfunction lib:RefreshPlayerGlyphs()\n\tlocal guid = UnitGUID(\"player\")\n\tlocal r = self.roster[guid]\n\tif (not r) then\n\t\treturn\n\tend\n\n\tlocal glyphs = new()\n\tlocal any\n\tfor talentGroup = 1,GetNumTalentGroups() do\n\t\tlocal list = new()\n\t\tfor i = 1,GetNumGlyphSockets() do\n\t\t\tlocal enabled, glyphType, glyphSpell, icon = GetGlyphSocketInfo(i, talentGroup)\n\t\t\tif (enabled and glyphType and glyphSpell) then\n\t\t\t\ttinsert(list, glyphSpell)\n\t\t\t\tany = true\n\t\t\tend\n\t\tend\n\t\tglyphs[talentGroup] = table.concat(list, \",\")\n\t\tdel(list)\n\tend\n\n\tlocal oldGlyphs = r.glyphs\n\tif (any) then\n\t\tr.glyphs = glyphs\n\telse\n\t\tdel(glyphs)\n\tend\n\n\tlocal change = (oldGlyphs and oldGlyphs[r.active]) ~= (r.glyphs and r.glyphs[r.active])\n\tif (change) then\n\t\tself:SendMyGlyphs()\n\t\tself.events:Fire(\"LibGroupTalents_GlyphUpdate\", guid, \"player\")\n\tend\n\n\tdel(oldGlyphs)\nend\n\n-- PLAYER_TALENT_UPDATE\nfunction lib:PLAYER_TALENT_UPDATE()\n\tself:TriggerRefreshTalents(UnitGUID(\"player\"), 2)\nend\n\n-- UNIT_SPELLCAST_SUCCEEDED\nfunction lib:UNIT_SPELLCAST_SUCCEEDED(unit, spell)\n\tlocal newActiveGroup = specChangers[spell]\n\tif (newActiveGroup) then\n\t\tlocal guid = UnitGUID(unit)\n\t\tlocal r = guid and self.roster[guid]\n\t\tif (r) then\n\t\t\tif (newActiveGroup == r.active) then\n\t\t\t\t-- We obviously didn't see them switch from this set\n\t\t\t\tself:GetGUIDRole(guid, true)\n\t\t\t\treturn\n\t\t\tend\n\n\t\t\tif (r.talents) then\n\t\t\t\tlocal oldSet = r.talents[r.active]\n\t\t\t\tlocal newSet = r.talents[newActiveGroup]\n\t\t\t\tif (oldSet and newSet) then\n\t\t\t\t\t-- We have the other talent set, so no need to refresh anything. Just compare and notify\n\t\t\t\t\tr.active = newActiveGroup\n\n\t\t\t\t\tlocal oldSpec, o1, o2, o3 = TalentWeight(oldSet, r.class)\n\t\t\t\t\tlocal newSpec, n1, n2, n3 = TalentWeight(newSet, r.class)\n\n\t\t\t\t\tif (o1 ~= n1 or o2 ~= n2 or o3 ~= n3) then\n\t\t\t\t\t\tself.events:Fire(\"LibGroupTalents_Update\", guid, unit, newSpec, n1, n2, n3, oldSpec, o1, o2, o3)\n\t\t\t\t\telse\n\t\t\t\t\t\tself.events:Fire(\"LibGroupTalents_Update\", guid, unit, newSpec, n1, n2, n3)\n\t\t\t\t\tend\n\t\t\t\t\tself:GetGUIDRole(guid, true)\n\t\t\t\t\treturn\n\t\t\t\tend\n\t\t\tend\n\n\t\t\t-- If we get this far, then someone probably gated to respec\n\t\t\tself:RefreshTalentsByGUID(guid)\n\t\tend\n\tend\nend\n\n-- TriggerRefreshTalents\nfunction lib:TriggerRefreshTalents(guid, delay)\n\tif (not self.talentTimers) then\n\t\tself.talentTimers = new()\n\tend\n\tif (guid) then\n\t\tself.talentTimers[guid] = GetTime() + delay\n\t\tframe:Show()\n\tend\nend\n\n-- RefreshTalentsByUnit\nfunction lib:RefreshTalentsByUnit(unit)\n\tlocal guid = UnitGUID(unit)\n\tif (guid) then\n\t\tself:RefreshTalentsByGUID(guid)\n\tend\nend\n\n-- RefreshTalentsByGUID\nfunction lib:RefreshTalentsByGUID(guid)\n\tlocal r = self.roster[guid]\n\tif (not r) then\n\t\treturn\n\tend\n\tif (not ValidateUnit(r, guid)) then\n\t\treturn\n\tend\n\n\tif (self.talentTimers) then\n\t\tself.talentTimers[guid] = nil\n\tend\n\n\tif (not self.talentThrottle) then\n\t\tself.talentThrottle = {}\n\tend\n\tfor guidThrottle,when in pairs(self.talentThrottle) do\n\t\tif (when < GetTime() - 5) then\n\t\t\tself.talentThrottle[guidThrottle] = nil\n\t\telseif (guid == guidThrottle) then\n\t\t\treturn\n\t\tend\n\tend\n\tself.talentThrottle[guid] = GetTime()\n\n\tif (self.commQueried) then\n\t\tself.commQueried[guid] = nil\n\t\tif (not next(self.commQueried)) then\n\t\t\tself.commQueried = del(self.commQueried)\n\t\tend\n\tend\n\n\tr.refresh = true\n\tself:CheckForMissingTalents()\n\n\tif (UnitGUID(\"player\") == guid) then\n\t\tself:SendMyTalents()\n\tend\nend\n\n-- CheckForMissingTalents\nfunction lib:CheckForMissingTalents()\n\tlocal any\n\tfor guid,info in pairs(self.roster) do\n\t\tlocal namerealm = RosterInfoFullName(info)\n\t\tif (not info.talents or (not UnitIsVisible(namerealm) and UnitExists(namerealm)) or info.refresh) then\n\t\t\tany = true\n\t\t\tinfo.refresh = nil\n\t\t\tself:GetUnitTalents(info.unit, true)\n\t\tend\n\tend\n\n\tif (any) then\n\t\tlib.refreshCheckTimer = 15\n\t\tframe:Show()\n\tend\nend\n\ndo\n\tlocal survivalOfTheFittest = GetSpellInfo(33853)\t\t-- Survival of the Fittest\n\tlocal protectorOfThePack = GetSpellInfo(57873)\t\t\t-- Protector of the Pack\n\tlocal dkBladeBarrier = GetSpellInfo(49182)\t\t\t\t-- Blade Barrier\n\tlocal dkToughness = GetSpellInfo(49042)\t\t\t\t\t-- Toughness\n\tlocal dkAnticipation = GetSpellInfo(55129)\t\t\t\t-- Anticipation\n\n\t-- GetUnitRole\n\tfunction lib:GetUnitRole(unit, reset)\n\t\tlocal guid = UnitGUID(unit)\n\t\tif (guid) then\n\t\t\treturn self:GetGUIDRole(guid, reset)\n\t\tend\n\tend\n\n\t-- GetGUIDRole\n\tfunction lib:GetGUIDRole(guid, reset)\n\t\tlocal r = guid and self.roster[guid]\n\t\tif (not r) then\n\t\t\treturn\n\t\tend\n\t\tif (r.role and not reset) then\n\t\t\treturn r.role\n\t\tend\n\t\tif (not ValidateUnit(r, guid)) then\n\t\t\treturn\n\t\tend\n\n\t\tlocal class = r.class\n\t\tlocal role\n\n\t\tlocal unit = r.unit\n\t\tif (class == \"ROGUE\" or class == \"HUNTER\") then\n\t\t\trole = \"melee\"\n\t\telseif (class == \"MAGE\" or class == \"WARLOCK\") then\n\t\t\trole = \"caster\"\n\t\telseif (r.talents and r.talents[r.active]) then\n\t\t\tif (class == \"DEATHKNIGHT\") then\n\t\t\t\tlocal score = self:GUIDHasTalent(guid, dkBladeBarrier) and 1 or 0\n\t\t\t\tscore = score + (self:GUIDHasTalent(guid, dkToughness) and 1 or 0)\n\t\t\t\tscore = score + (self:GUIDHasTalent(guid, dkAnticipation) and 1 or 0)\n\t\t\t\trole = score >= 2 and \"tank\" or \"melee\"\t\t-- Has 2 of the 3 tanking talents at least\n\n\t\t\telse\n\t\t\t\tlocal specName, t1, t2, t3 = TalentWeight(r.talents[r.active], class)\n\n\t\t\t\tif (class == \"PRIEST\") then\n\t\t\t\t\trole = ((t1 + t2) > t3) and \"healer\" or \"caster\"\n\t\t\t\telseif (class == \"WARRIOR\") then\n\t\t\t\t\trole = ((t1 + t2) > t3) and \"melee\" or \"tank\" \n\t\t\t\telse\n\t\t\t\t\tlocal heavy = (t1 > t2 and t1 > t3 and 1) or (t2 > t1 and t2 > t3 and 2) or (t3 > t1 and t3 > t2 and 3) or 0\n\t\t\t\t\tif (class == \"PALADIN\") then\n\t\t\t\t\t\trole = heavy == 1 and \"healer\" or heavy == 2 and \"tank\" or heavy == 3 and \"melee\"\n\n\t\t\t\t\telseif (class == \"DRUID\") then\n\t\t\t\t\t\tif (heavy == 2) then\n\t\t\t\t\t\t\tif (self:GUIDHasTalent(guid, survivalOfTheFittest) and self:GUIDHasTalent(guid, protectorOfThePack)) then\n\t\t\t\t\t\t\t\trole = \"tank\"\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\trole = \"melee\"\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\trole = heavy == 1 and \"caster\" or \"healer\"\n\t\t\t\t\t\tend\n\n\t\t\t\t\telseif (class == \"SHAMAN\") then\n\t\t\t\t\t\trole = heavy == 1 and \"caster\" or heavy == 2 and \"melee\" or heavy == 3 and \"healer\"\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\n\t\tlocal oldrole = r.role\n\t\tr.role = role\n\n\t\tif (role and role ~= oldrole) then\n\t\t\tself.events:Fire(\"LibGroupTalents_RoleChange\", guid, unit, role, oldrole)\n\t\tend\n\t\treturn role\n\tend\nend\n\n-- GetUnitTalents\nfunction lib:GetUnitTalents(unit, refetch)\n\tlocal guid = UnitGUID(unit)\n\tif (not guid) then\n\t\treturn\n\tend\n\treturn self:GetGUIDTalents(guid, refetch)\nend\n\n-- CanCommQuery\nlocal function CanCommQuery(guid)\n\tif (not lib.commQueried or not lib.commQueried[guid]) then\n\t\tif (not lib.commQueried) then\n\t\t\tlib.commQueried = new()\n\t\tend\n\t\tlib.commQueried[guid] = true\n\t\treturn true\n\tend\nend\n\n-- GetGUIDTalents\nfunction lib:GetGUIDTalents(guid, refetch)\n\tlocal r = self.roster[guid]\n\tif (not r) then\n\t\treturn\n\tend\n\tif (not ValidateUnit(r, guid)) then\n\t\treturn\n\tend\n\n\tlocal unit = r.unit\n\tlocal name, realm = UnitName(unit)\n\tlocal activeTalents = r.talents and r.talents[r.active]\n\n\tif (activeTalents) then\n\t\t-- If someone is out of sight, we won't catch their talent swap spell cast, so we'll invalidate them here and recheck talents\n\t\tif ((not UnitIsVisible(unit) and UnitIsConnected(unit)) or (self.outOfSight and self.outOfSight[guid])) then\n\t\t\tif (not r.version) then\n\t\t\t\trefetch = true\n\t\t\tend\n\t\tend\n\tend\n\n\tif (not activeTalents or refetch) then\n\t\tif (UnitIsUnit(\"player\", unit)) then\n\t\t\tself:RefreshPlayerGlyphs()\n\t\t\tself:TalentQuery_Ready(nil, name, nil, unit)\n\n\t\telseif ((UnitInRaid(unit) or UnitInParty(unit)) and UnitIsConnected(unit)) then\n\t\t\tTalentQuery:Query(unit)\n\n\t\t\tlocal namerealm = UnitFullName(unit)\n\t\t\tlocal skipGlyphs\n\t\t\tif (not r.talents and not r.requested) then\n\t\t\t\t-- Don't need to query on a 'refetch' because they'll send changes anyway via comms\n\t\t\t\tif (not UnitIsVisible(unit) or not CanInspect(unit)) then\n\t\t\t\t\tif (r.version) then\n\t\t\t\t\t\tif (CanCommQuery(guid)) then\n\t\t\t\t\t\t\t-- We request talents via comms for anyone that may be out of inspect range\n\t\t\t\t\t\t\tself:SendCommMessage(\"REQUESTTALENTS\", namerealm)\n\t\t\t\t\t\t\tr.requested = true\n\t\t\t\t\t\t\tskipGlyphs = true\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\n\t\t\tif (not r.glyphs and not skipGlyphs) then\n\t\t\t\tif (r.version and r.version >= 15) then\n\t\t\t\t\tif (CanCommQuery(guid)) then\n\t\t\t\t\t\t-- They're in range to inspect, but we'll still want to ask for their glyphs\n\t\t\t\t\t\tself:SendCommMessage(\"REQUESTGLYPHS\", namerealm)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\n\t\tif (self.outOfSight) then\n\t\t\tself.outOfSight[guid] = nil\n\t\tend\n\tend\n\n\treturn activeTalents\nend\n\n-- SendCommMessage\nfunction lib:SendCommMessage(msg, target, channel)\n\tif (msg) then\n\t\tif (ChatThrottleLib) then\n\t\t\tChatThrottleLib:SendAddonMessage(\"NORMAL\", MAJOR, msg, channel or \"WHISPER\", target)\n\t\telse\n\t\t\tSendAddonMessage(MAJOR, msg, channel or \"WHISPER\", target)\n\t\tend\n\tend\nend\n\n-- Throttle - Purposely local to here\n-- Abuse prevention. Yes, who would abuse addon comms? Noone would make a macro to crash a mod user would they. Right?\n-- Well, this one time, at band camp. Someone thought it was super funny to make a macro that DCd PallyPower users\nlocal throttle\nlocal function Throttle(sender, key)\n\tif (not throttle) then\n\t\tthrottle = {}\n\tend\n\tlocal s = throttle[sender]\n\tif (not s) then\n\t\ts = {}\n\t\tthrottle[sender] = s\n\tend\n\n\tif ((s[key] or 0) < GetTime() - 4.5) then\n\t\t-- Same message key only allowable once every 4.5 secs from 1 person (Respec cast time is 5 seconds)\n\t\ts[key] = GetTime()\n\t\treturn true\n\tend\nend\n\n-- CHAT_MSG_ADDON\nfunction lib:CHAT_MSG_ADDON(prefix, msg, channel, sender)\n\tif (prefix == MAJOR) then\n\t\tif (sender == UnitName(\"player\")) then\n\t\t\treturn\n\t\telseif (not UnitInRaid(sender) and not UnitInParty(sender)) then\n\t\t\treturn\n\t\tend\n\n\t\tlocal guid = UnitGUID(sender)\n\t\tif (not guid) then\n\t\t\treturn\n\t\tend\n\t\tlocal r = self.roster[guid]\n\t\tif (not r) then\n\t\t\treturn\n\t\tend\n\n\t\tlocal cmd, str = msg:match(\"^(%a+) *(.*)$\")\n\t\tif (not cmd) then\n\t\t\treturn\n\t\tend\n\n\t\tif (cmd == \"TALENTS\") then\n\t\t\t-- Talents come in form of:\n\t\t\tlocal t = r.talents\n\t\t\tr.talents = nil\t\t-- SetStorageString won't overwrite talents usually, but we want it to here, without providing a means to do it easily with an arg from a mod\n\t\t\tif (not self:SetStorageString(str, sender)) then\n\t\t\t\tr.talents = t\n\t\t\telse\n\t\t\t\tdeepDel(t)\n\t\t\tend\n\n\t\telseif (cmd == \"GLYPHS\") then\n\t\t\tlocal invalid\n\t\t\tlocal pages = new(strsplit(\";\", str))\n\t\t\tlocal glyphs = new()\n\t\t\tfor page,info in ipairs(pages) do\n\t\t\t\tlocal list = new(strsplit(\",\", info))\n\t\t\t\tlocal tab = tonumber(tremove(list, 1))\n\t\t\t\tif (tab) then\n\t\t\t\t\tglyphs[tab] = table.concat(list, \",\")\n\t\t\t\t\tdel(list)\n\t\t\t\telse\n\t\t\t\t\tinvalid = true\n\t\t\t\t\tdel(glyphs)\n\t\t\t\t\tdel(list)\n\t\t\t\t\tbreak\n\t\t\t\tend\n\t\t\tend\n\t\t\tif (not invalid) then\n\t\t\t\tself:OnReceiveGlyphs(guid, sender, glyphs)\n\t\t\tend\n\t\t\tdel(pages)\n\n\t\telseif (cmd == \"REQUESTTALENTS\") then\n\t\t\tif (Throttle(sender, \"REQUESTTALENTS\")) then\n\t\t\t\tif ((r.version or 0) < 39) then\n\t\t\t\t\tif (lib.sentToOld and lib.sentToOld[guid]) then\n\t\t\t\t\t\treturn\n\t\t\t\t\tend\n\t\t\t\t\tif (not lib.sentToOld) then\n\t\t\t\t\t\tlib.sentToOld = new()\n\t\t\t\t\tend\n\t\t\t\t\tlib.sentToOld[guid] = time()\n\t\t\t\tend\n\n\t\t\t\tself:SendMyTalents(sender)\n\t\t\t\tself:SendMyGlyphs(sender)\n\t\t\tend\n\n\t\telseif (cmd == \"REQUESTGLYPHS\") then\n\t\t\tif (Throttle(sender, \"REQUESTGLYPHS\")) then\n\t\t\t\tself:SendMyGlyphs(sender)\n\t\t\tend\n\n\t\telseif (cmd == \"HELLO\") then\n\t\t\tr.version = tonumber(str)\n\t\t\tif (channel ~= \"WHISPER\") then\n\t\t\t\tif (lib.sentToOld) then\n\t\t\t\t\tlib.sentToOld[guid] = nil\n\t\t\t\tend\n\t\t\t\tif (UnitIsConnected(sender) and Throttle(sender, \"HELLO\")) then\n\t\t\t\t\tself:SendCommMessage(\"HELLO \"..MINOR, sender)\n\t\t\t\t\tself:SendMyGlyphs(sender)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend\n\n-- SendMy\nlocal function SendMy(sender, str)\n\tif (sender) then\n\t\tif (UnitIsConnected(sender)) then\n\t\t\tlib:SendCommMessage(str, sender)\n\t\tend\n\telse\n\t\tfor guid,info in pairs(lib.roster) do\n\t\t\tif (info.version) then\n\t\t\t\tlocal namerealm = RosterInfoFullName(info)\n\t\t\t\tif (UnitIsConnected(namerealm)) then\n\t\t\t\t\tlib:SendCommMessage(str, namerealm)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend\n\n-- SendMyTalents\nfunction lib:SendMyTalents(sender)\n\tif (sender or self:UserCount() > 0) then\n\t\tlocal str = self:GetGUIDStorageString(UnitGUID(\"player\"))\n\t\tif (str) then\n\t\t\tSendMy(sender, \"TALENTS \"..str)\n\t\tend\n\tend\nend\n\n-- SendMyGlyphs\nfunction lib:SendMyGlyphs(sender)\n\tif (sender or self:UserCount() > 0) then\n\t\tlocal r = self.roster[UnitGUID(\"player\")]\n\t\tif (r and r.glyphs) then\n\t\t\tlocal str = \"GLYPHS \"\n\t\t\tlocal i = 1\n\t\t\tfor tab,g in pairs(r.glyphs) do\n\t\t\t\tlocal temp = format(\"%d,%s\", tab, g)\n\t\t\t\tstr = str .. (i > 1 and \";\" or \"\") .. temp\n\t\t\t\ti = i + 1\n\t\t\tend\n\t\t\tSendMy(sender, str)\n\t\tend\n\tend\nend\n\n-- UserCount\nfunction lib:UserCount()\n\tlocal count = 0\n\tfor guid,info in pairs(self.roster) do\n\t\tif (info.version and not UnitIsUnit(\"player\", RosterInfoFullName(info))) then\n\t\t\tcount = count + 1\n\t\tend\n\tend\n\treturn count\nend\n\n-- UnitHasTalent\n-- eg: lib:UnitHasTalent(\"player\", GetSpellInfo(talentSpellID))\n-- Returns: nil, or number of points spent into talent\n-- If the talent group is not specified, then the active talent group is used\nfunction lib:UnitHasTalent(unit, talentName, group)\n\treturn unit and self:GUIDHasTalent(UnitGUID(unit), talentName, group)\nend\n\n-- GUIDHasTalent\n-- Returns: nil, or number of points spent into talent\nfunction lib:GUIDHasTalent(guid, talentName, group)\n\tlocal talents, r = GetGUIDTalentsRaw(guid, group)\n\tif (talents and r.class) then\n\t\tlocal data = self.classTalentData[r.class]\n\t\tif (data) then\n\t\t\tlocal info = data.list and data.list[talentName]\n\t\t\tif (info) then\n\t\t\t\tlocal str = talents[info.treeIndex]\n\t\t\t\tif (str) then\n\t\t\t\t\tlocal amount = (str:byte(info.index) or 48) - 48\n\t\t\t\t\treturn (amount or 0) > 0 and amount or nil\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend\n\n-- GetClassTalentInfo\nfunction lib:GetClassTalentInfo(class, talentName)\n-- Returns: Max Rank, Icon, Tab, Tier, Column, Tree Index\n\tlocal data = self.classTalentData[class]\n\tif (data) then\n\t\tlocal info = data.list and data.list[talentName]\n\t\tif (info) then\n\t\t\treturn info.maxRank, info.icon, info.treeIndex, info.column, info.tier, info.index\n\t\tend\n\tend\nend\n\n-- GetActiveTalentGroup\nfunction lib:GetActiveTalentGroup(unit)\n\tif (UnitIsUnit(unit, \"player\")) then\n\t\treturn GetActiveTalentGroup()\n\telse\n\t\tlocal guid = unit and UnitGUID(unit)\n\t\tlocal r = guid and self.roster[guid]\n\t\treturn r and r.active or nil\n\tend\nend\n\n-- GetNumTalentGroups\nfunction lib:GetNumTalentGroups(unit)\n\tif (UnitIsUnit(unit, \"player\")) then\n\t\treturn GetNumTalentGroups()\n\telse\n\t\tlocal guid = unit and UnitGUID(unit)\n\t\tlocal r = guid and self.roster[guid]\n\t\treturn r and r.numActive or nil\n\tend\nend\n\n-- GetTalentTabInfo\nfunction lib:GetTalentTabInfo(unit, tab, group)\n\tif (UnitIsUnit(unit, \"player\")) then\n\t\treturn GetTalentTabInfo(tab, nil, nil, group or GetActiveTalentGroup())\n\telse\n\t\tlocal guid = unit and UnitGUID(unit)\n\t\tlocal r = guid and self.roster[guid]\n\t\tif (r and r.class) then\n\t\t\tlocal ctd = self.classTalentData[r.class]\n\t\t\tif (ctd and tab >= 1 and tab <= #ctd) then\n\t\t\t\tlocal spec, c1, c2, c3 = self:GetGUIDTalentSpec(guid, group)\n\t\t\t\treturn ctd[tab].name, ctd[tab].icon, tab == 1 and c1 or tab == 2 and c2 or c3, ctd[tab].background, 0\n\t\t\tend\n\t\tend\n\tend\nend\n\n-- GetNumTalents\nfunction lib:GetNumTalents(unit, tab)\n\tif (UnitIsUnit(unit, \"player\")) then\n\t\treturn GetNumTalents(tab)\n\telse\n\t\tlocal _, class = UnitClass(unit)\n\t\tif (class) then\n\t\t\tlocal ctd = self.classTalentData[class]\n\t\t\tif (ctd and tab >= 1 and tab <= #ctd) then\n\t\t\t\treturn #ctd[tab].list\n\t\t\tend\n\t\tend\n\tend\nend\n\n-- GetTalentInfo\nfunction lib:GetTalentInfo(unit, tab, index, group)\n\tif (UnitIsUnit(unit, \"player\")) then\n\t\treturn GetTalentInfo(tab, index, nil, nil, group or GetActiveTalentGroup())\n\telse\n\t\tlocal _, class = UnitClass(unit)\n\t\tif (class) then\n\t\t\tlocal ctd = self.classTalentData[class]\n\t\t\tif (ctd and tab >= 1 and tab <= #ctd) then\n\t\t\t\tlocal info = ctd[tab].list[index]\n\t\t\t\tif (info) then\n\t\t\t\t\tlocal spent = self:UnitHasTalent(unit, info.name, group)\n\t\t\t\t\treturn info.name, info.icon, info.tier, info.column, spent or 0, info.maxRank\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend\n\n-- GetNumTalentTabs\nfunction lib:GetNumTalentTabs()\n\treturn GetNumTalentTabs()\nend\n\n-- GetNumTalentTabs\nfunction lib:GetUnspentTalentPoints(unit, group)\n\tif (UnitIsUnit(unit, \"player\")) then\n\t\treturn GetUnspentTalentPoints(nil, nil, group)\n\telse\n\t\tlocal guid = unit and UnitGUID(unit)\n\t\tlocal r = guid and self.roster[guid]\n\t\tif (r) then\n\t\t\treturn r.unspent and r.unspent[group or r.active or 1]\n\t\tend\n\tend\nend\n\n-- GetTalentCount\nfunction lib:GetTalentCount()\n\tlocal count, missing = 0, 0\n\tfor guid,info in pairs(self.roster) do\n\t\tif (info.talents) then\n\t\t\tcount = count + 1\n\t\telse\n\t\t\tmissing = missing + 1\n\t\tend\n\tend\n\treturn count, missing\nend\n\n-- GetTalentMissingNames\nfunction lib:GetTalentMissingNames()\n\tlocal list = new()\n\tfor unit in self:IterateRoster() do\n\t\tlocal guid = UnitGUID(unit)\n\t\tlocal r = guid and self.roster[guid]\n\t\tif (not r or not r.talents) then\n\t\t\ttinsert(list, UnitFullName(unit))\n\t\tend\n\tend\n\tlocal ret\n\tif (next(list)) then\n\t\tret = table.concat(list, \",\")\n\tend\n\tdel(list)\n\treturn ret\nend\n\n-- PurgeAndRescanTalents\nfunction lib:PurgeAndRescanTalents()\n\tif (self.roster) then\n\t\twipe(self.pendingStorageStrings)\n\t\tfor guid,info in pairs(self.roster) do\n\t\t\tinfo.talents = del(info.talents)\n\t\t\tinfo.active = nil\n\t\t\tinfo.numActive = nil\n\t\t\tinfo.requested = nil\n\t\tend\n\tend\n\tself:CheckForMissingTalents()\nend\n\n-- Roster iterator\ndo\n\tlocal function iter(t)\n\t\tlocal key = t.id\n\t\tlocal ret\n\t\tif (t.mode == \"raid\") then\n\t\t\tif (key > t.r) then\n\t\t\t\tdel(t)\n\t\t\t\treturn nil\n\t\t\tend\n\t\t\tret = \"raid\"..key\n\t\telse\n\t\t\tif (key > t.p) then\n\t\t\t\tdel(t)\n\t\t\t\treturn nil\n\t\t\tend\n\t\t\tret = key == 0 and \"player\" or \"party\"..key\n\t\tend\n\t\tt.id = key + 1\n\t\treturn ret\n\tend\n\n\t-- IterateRoster\n\tfunction lib:IterateRoster()\n\t\tlocal t = new()\n\t\tif (GetNumRaidMembers() > 0) then\n\t\t\tt.mode = \"raid\"\n\t\t\tt.id = 1\n\t\t\tt.r = GetNumRaidMembers()\n\t\telse\n\t\t\tt.mode = \"party\"\n\t\t\tt.id = 0\n\t\t\tt.p = GetNumPartyMembers()\n\t\tend\n\t\treturn iter, t\n\tend\nend\n"
  },
  {
    "path": "DBM-Core/Libs/LibLatency/LibLatency.lua",
    "content": "\nlocal LL = LibStub:NewLibrary(\"LibLatency\", 3)\nif not LL then return end -- No upgrade needed\n\n-- Throttle times for separate channels\nLL.throttleTable = LL.throttleTable or {\n\t[\"RAID\"] = 0,\n\t[\"PARTY\"] = 0,\n\t[\"GUILD\"] = 0,\n}\nLL.throttleSendTable = LL.throttleSendTable or {\n\t[\"RAID\"] = 0,\n\t[\"PARTY\"] = 0,\n\t[\"GUILD\"] = 0,\n}\nLL.callbackMap = LL.callbackMap or {}\nLL.frame = LL.frame or CreateFrame(\"Frame\")\nLL.serverFrame = LL.serverFrame or CreateFrame(\"Frame\")\n\nlocal throttleTable = LL.throttleTable\nlocal throttleSendTable = LL.throttleSendTable\nlocal callbackMap = LL.callbackMap\nlocal frame = LL.frame\nlocal serverFrame = LL.serverFrame\n\nlocal next, type, error, tonumber, format, match = next, type, error, tonumber, string.format, string.match\nlocal GetTime, GetNetStats, GetNumPartyMembers, GetNumRaidMembers, SendAddonMessage = GetTime, GetNetStats, GetNumPartyMembers, GetNumRaidMembers, SendAddonMessage\nlocal SendChatMessage = SendChatMessage\nlocal pName = UnitName(\"player\")\n\nlocal function IsInGroup()\n\treturn GetNumPartyMembers() > 0 or GetNumRaidMembers() > 0\nend\n\nlocal function IsInRaid()\n\treturn GetNumRaidMembers() > 0\nend\n\nframe:SetScript(\"OnEvent\", function(_, _, prefix, msg, channel, sender)\n\tif prefix == \"Lag\" and throttleTable[channel] then\n\t\tif msg == \"R\" then\n\t\t\tlocal t = GetTime()\n\t\t\tif t - throttleTable[channel] > 1 then\n\t\t\t\tthrottleTable[channel] = t\n\t\t\t\tlocal _, _, latencyHome = GetNetStats()\n\t\t\t\tlocal latencyWorld = latencyHome -- compatibility with newer api\n\t\t\t\t-- 4.0.6 has added a return value so that two distinct latency values are now returned\n\t\t\t\t-- may be able to parse .server info but different servers have different stuff, so just a workaround for now\n\t\t\t\tSendAddonMessage(\"Lag\", format(\"%d,%d\", latencyHome or 0, latencyWorld or 0), channel)\n\t\t\tend\n\t\t\treturn\n\t\tend\n\n\t\tlocal latencyHome, latencyWorld = match(msg, \"^(%d+),(%d+)$\")\n\t\tlatencyHome = tonumber(latencyHome)\n\t\tlatencyWorld = tonumber(latencyWorld)\n\t\tif latencyHome and latencyWorld then\n\t\t\tfor _,func in next, callbackMap do\n\t\t\t\tfunc(latencyHome, latencyWorld, sender, channel)\n\t\t\tend\n\t\tend\n\tend\nend)\nframe:RegisterEvent(\"CHAT_MSG_ADDON\")\n\n-- For automatic group handling, don't pass a channel. The order is INSTANCE_CHAT > RAID > GROUP.\n-- GUILD is not covered by auto handling.\nfunction LL:RequestLatency(channel)\n\tif channel and not throttleSendTable[channel] then\n\t\terror(\"LibLatency: Incorrect channel type for :RequestLatency.\")\n\telse\n\t\tif not channel and IsInGroup() then\n\t\t\tchannel = IsInRaid() and \"RAID\" or \"PARTY\"\n\t\tend\n\n\t\tlocal _, _, latencyHome = GetNetStats()\n\t\tlocal latencyWorld = latencyHome\n\n\t\tfor _,func in next, callbackMap do\n\t\t\tfunc(latencyHome, latencyWorld, pName, channel) -- This allows us to show our own latency when not grouped\n\t\tend\n\n\t\tif channel then\n\t\t\tlocal t = GetTime()\n\t\t\tif t - throttleSendTable[channel] > 1 then\n\t\t\t\tthrottleSendTable[channel] = t\n\t\t\t\tSendAddonMessage(\"Lag\", \"R\", channel)\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction LL:Register(addon, func)\n\tif not addon or addon == LL then\n\t\terror(\"LibLatency: You must pass your own addon name or object to :Register.\")\n\tend\n\n\tlocal t = type(func)\n\tif t == \"string\" then\n\t\tcallbackMap[addon] = function(...) addon[func](addon, ...) end\n\telseif t == \"function\" then\n\t\tcallbackMap[addon] = func\n\telse\n\t\terror(\"LibLatency: Incorrect function type for :Register.\")\n\tend\nend\n\nfunction LL:Unregister(addon)\n\tif not addon or addon == LL then\n\t\terror(\"LibLatency: You must pass your own addon name or object to :Unregister.\")\n\tend\n\tcallbackMap[addon] = nil\nend\n\n"
  },
  {
    "path": "DBM-Core/Libs/LibRangeCheck-2.0/LibRangeCheck-2.0.lua",
    "content": "--[[\nName: LibRangeCheck-2.0\nRevision: $Revision: 98 $\nAuthor(s): mitch0\nWebsite: http://www.wowace.com/projects/librangecheck-2-0/\nDescription: A range checking library based on interact distances and spell ranges\nDependencies: LibStub\nLicense: Public Domain\n]]\n\n--- LibRangeCheck-2.0 provides an easy way to check for ranges and get suitable range checking functions for specific ranges.\\\\\n-- The checkers use spell and item range checks, or interact based checks for special units where those two cannot be used.\\\\\n-- The lib handles the refreshing of checker lists in case talents / spells / glyphs change and in some special cases when equipment changes (for example some of the mage pvp gloves change the range of the Fire Blast spell), and also handles the caching of items used for item-based range checks.\\\\\n-- A callback is provided for those interested in checker changes.\n-- @usage\n-- local rc = LibStub(\"LibRangeCheck-2.0\")\n--\n-- rc.RegisterCallback(self, rc.CHECKERS_CHANGED, function() print(\"need to refresh my stored checkers\") end)\n--\n-- local minRange, maxRange = rc:GetRange('target')\n-- if not minRange then\n--     print(\"cannot get range estimate for target\")\n-- elseif not maxRange then\n--     print(\"target is over \" .. minRange .. \" yards\")\n-- else\n--     print(\"target is between \" .. minRange .. \" and \" .. maxRange .. \" yards\")\n-- end\n--\n-- local meleeChecker = rc:GetFriendMaxChecker(rc.MeleeRange) -- 5 yds\n-- for i = 1, 4 do\n--     -- TODO: check if unit is valid, etc\n--     if meleeChecker(\"party\" .. i) then\n--         print(\"Party member \" .. i .. \" is in Melee range\")\n--     end\n-- end\n--\n-- local safeDistanceChecker = rc:GetHarmMinChecker(30)\n-- -- negate the result of the checker!\n-- local isSafelyAway = not safeDistanceChecker('target')\n--\n-- @class file\n-- @name LibRangeCheck-2.0\nlocal MAJOR_VERSION = \"LibRangeCheck-2.0\"\nlocal MINOR_VERSION = tonumber((\"$Revision: 99 $\"):match(\"%d+\")) + 100000\n\nlocal lib, oldminor = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION)\nif not lib then\n    return\nend\n\n-- << STATIC CONFIG\n\nlocal UpdateDelay = .5\nlocal ItemRequestTimeout = 10.0\n\n-- interact distance based checks. ranges are based on my own measurements (thanks for all the folks who helped me with this)\nlocal DefaultInteractList = {\n    [3] = 8,\n    [2] = 9,\n    [4] = 28,\n}\n\n-- interact list overrides for races\nlocal InteractLists = {\n    [\"Tauren\"] = {\n        [3] = 6,\n        [2] = 7,\n        [4] = 25,\n    },\n    [\"Scourge\"] = {\n        [3] = 7,\n        [2] = 8,\n        [4] = 27,\n    },\n}\n\nlocal MeleeRange = 5\n\n-- list of friendly spells that have different ranges\nlocal FriendSpells = {}\n-- list of harmful spells that have different ranges\nlocal HarmSpells = {}\n\nFriendSpells[\"DRUID\"] = {\n    5185, -- [\"Healing Touch\"], -- 40\n    467, -- [\"Thorns\"], -- 30 (Nature's Reach: 33, 36)\n    1126, -- [\"Mark of the Wild\"], -- 30\n}\nHarmSpells[\"DRUID\"] = {\n    16979, -- [\"Feral Charge\"], -- 8-25\n    5176, -- [\"Wrath\"], -- 30 (Nature's Reach: 33, 36)\n    33786, -- [\"Cyclone\"], -- 20 (Nature's Reach: 22, 24; Gale Winds: +10/20%)\n    6795, -- [\"Growl\"], -- 20\n    5211, -- [\"Bash\"], -- 5\n}\n\nFriendSpells[\"HUNTER\"] = {}\nHarmSpells[\"HUNTER\"] = {\n    1130, -- [\"Hunter's Mark\"] -- 100\n    53351, -- [\"Kill Shot\"] -- 5-45 (Hawk Eye: 47, 49, 51)\n    75, -- [\"Auto Shot\"], -- 5-35 (Hawk Eye: 37, 39, 41)\n    2764, -- [\"Throw\"], -- 30\n    19503, -- [\"Scatter Shot\"], -- 15 (Hawk Eye: 17, 19, 21; Glyph of Scatter Shot: +3)\n    2974, -- [\"Wing Clip\"], -- 5\n}\n\nFriendSpells[\"MAGE\"] = {\n    475, -- [\"Remove Curse\"], -- 40 (Magic Attunement: 43, 46)\n    1459, -- [\"Arcane Intellect\"], -- 30 (Magic Attunement: 33, 36)\n}\nHarmSpells[\"MAGE\"] = {\n    44614, -- [\"Frostfire Bolt\"], -- 40\n    133, -- [\"Fireball\"], -- 35 (Flame Throwing: 38, 41)\n    116, -- [\"Frostbolt\"], -- 30 (Arctic Reach: 33, 36)\n    30455, -- [\"Ice Lance\"], -- 30 (Arctic Reach: 33, 36, Glyph of Ice Lance: +5)\n    5143, -- [\"Arcane Missiles\"], -- 30 (Magic Attunement: 33, 36; Glyph of Arcane Missiles: +5)\n    30451, -- [\"Arcane Blast\"], -- 30 (Magic Attunement: 33, 36)\n    2948, -- [\"Scorch\"], -- 30 (Flame Throwing: 33, 36)\n    5019, -- [\"Shoot\"], -- 30\n    2136, -- [\"Fire Blast\"], -- 20 (Flame Throwing: 23, 26; Gladiator Gloves: +5)\n}\n\nFriendSpells[\"PALADIN\"] = {\n    635, -- [\"Holy Light\"], -- 40\n    19740, -- [\"Blessing of Might\"], -- 30\n    20473, -- [\"Holy Shock\"], -- 20\n}\nHarmSpells[\"PALADIN\"] = {\n    24275, -- [\"Hammer of Wrath\"],  -- 30 (Glyph of Hammer of Wrath: +5)\n    20473, -- [\"Holy Shock\"], -- 20\n    20271, -- [\"Judgement\"], -- 10\n    35395, -- [\"Crusader Strike\"], -- 5\n}\n\nFriendSpells[\"PRIEST\"] = {\n    2050, -- [\"Lesser Heal\"], -- 40\n    1243, -- [\"Power Word: Fortitude\"], -- 30\n}\nHarmSpells[\"PRIEST\"] = {\n    585, -- [\"Smite\"], -- 30 (Holy Reach: 33, 36)\n    589, -- [\"Shadow Word: Pain\"], -- 30 (Shadow Reach: 33, 36)\n    5019, -- [\"Shoot\"], -- 30\n    15407, -- [\"Mind Flay\"], -- 20 (Shadow Reach: 22, 24, Glyph of Mind Flay: +10)\n}\n\nFriendSpells[\"ROGUE\"] = {}\nHarmSpells[\"ROGUE\"] = {\n    2764, -- [\"Throw\"], -- 30\n    26679, -- [\"Deadly Throw\"], -- 30 (Glyph of Deadly Throw: +5)\n    2094, -- [\"Blind\"], -- 10 (Dirty Tricks: 12, 15)\n    2098, -- [\"Eviscerate\"], -- 5\n}\n\nFriendSpells[\"SHAMAN\"] = {\n    331, -- [\"Healing Wave\"], -- 40\n    526, -- [\"Cure Poison\"], -- 30\n}\nHarmSpells[\"SHAMAN\"] = {\n    403, -- [\"Lightning Bolt\"], -- 30 (Storm Reach: 33, 36)\n    370, -- [\"Purge\"], -- 30\n    8050, -- [\"Flame Shock\"], -- 20 (Elemental Reach: 27, 35; Gladiator Gloves: +5)\n--    8042, -- [\"Earth Shock\"], -- 20 (Storm, Earth and Fire: 21-25; Gladiator Gloves: +5)\n    8056, -- [\"Frost Shock\"], -- 20 (Gladiator Gloves: +5)\n}\n\nFriendSpells[\"WARRIOR\"] = {}\nHarmSpells[\"WARRIOR\"] = {\n    100, -- [\"Charge\"], -- 8-25 (Glyph of Charge: +5)\n    3018, -- [\"Shoot\"], -- 30\n    2764, -- [\"Throw\"], -- 30\n    355, -- [\"Taunt\"], -- 30\n    5246, -- [\"Intimidating Shout\"], -- 8\n    772, -- [\"Rend\"], -- 5\n}\n\nFriendSpells[\"WARLOCK\"] = {\n    5697, -- [\"Unending Breath\"], -- 30 (demo)\n}\nHarmSpells[\"WARLOCK\"] = {\n    5019, -- [\"Shoot\"], -- 30\n    348, -- [\"Immolate\"], -- 30 (Destructive Reach: 33, 36)\n    172, -- [\"Corruption\"], -- 30 (Grim Reach: 33, 36)\n    18223, -- [\"Curse of Exhaustion\"], -- 30 (Grim Reach: 33, 36, Glyph of Curse of Exhaustion: +5)\n    5782, -- [\"Fear\"], -- 20 (Grim Reach: 22, 24)\n    17877, -- [\"Shadowburn\"], -- 20 (Destructive Reach: 22, 24)\n}\n\nFriendSpells[\"DEATHKNIGHT\"] = {\n}\nHarmSpells[\"DEATHKNIGHT\"] = {\n    47541, -- [\"Death Coil\"], -- 30\n    47476, -- [\"Strangulate\"], -- 30 (Glyph of Strangulate: +20)\n    45477, -- [\"Icy Touch\"], -- 20 (Icy Reach: 25, 30)\n    56222, -- [\"Dark Command\"], -- 20\n    50842, -- [\"Pestilence\"], -- 5\n    45902, -- [\"Blood Strike\"], -- 5, but requires weapon, use Pestilence if possible, so keep it after Pestilence in this list\n}\n\n-- Items [Special thanks to Maldivia for the nice list]\n\nlocal FriendItems  = {\n    [5] = {\n        37727, -- Ruby Acorn\n    },\n    [8] = {\n        34368, -- Attuned Crystal Cores\n        33278, -- Burning Torch\n    },\n    [10] = {\n        32321, -- Sparrowhawk Net\n    },\n    [15] = {\n        1251, -- Linen Bandage\n        2581, -- Heavy Linen Bandage\n        3530, -- Wool Bandage\n        3531, -- Heavy Wool Bandage\n        6450, -- Silk Bandage\n        6451, -- Heavy Silk Bandage\n        8544, -- Mageweave Bandage\n        8545, -- Heavy Mageweave Bandage\n        14529, -- Runecloth Bandage\n        14530, -- Heavy Runecloth Bandage\n        21990, -- Netherweave Bandage\n        21991, -- Heavy Netherweave Bandage\n        34721, -- Frostweave Bandage\n        34722, -- Heavy Frostweave Bandage\n--        38643, -- Thick Frostweave Bandage\n--        38640, -- Dense Frostweave Bandage\n    },\n    [20] = {\n        21519, -- Mistletoe\n    },\n    [25] = {\n        31463, -- Zezzak's Shard\n    },\n    [30] = {\n        1180, -- Scroll of Stamina\n        1478, -- Scroll of Protection II\n        3012, -- Scroll of Agility\n        1712, -- Scroll of Spirit II\n        2290, -- Scroll of Intellect II\n        1711, -- Scroll of Stamina II\n        34191, -- Handful of Snowflakes\n    },\n    [35] = {\n        18904, -- Zorbin's Ultra-Shrinker\n    },\n    [40] = {\n        34471, -- Vial of the Sunwell\n    },\n    [45] = {\n        32698, -- Wrangling Rope\n    },\n    [60] = {\n        32825, -- Soul Cannon\n        37887, -- Seeds of Nature's Wrath\n    },\n    [80] = {\n        35278, -- Reinforced Net\n    },\n\t[100] = {\n\t\t41058 -- Hyldnir Harpoon (WotLK)\n\t},\n}\n\nlocal HarmItems = {\n    [5] = {\n        37727, -- Ruby Acorn\n    },\n    [8] = {\n        34368, -- Attuned Crystal Cores\n        33278, -- Burning Torch\n    },\n    [10] = {\n        32321, -- Sparrowhawk Net\n    },\n    [15] = {\n        33069, -- Sturdy Rope\n    },\n    [20] = {\n        10645, -- Gnomish Death Ray\n    },\n    [25] = {\n        24268, -- Netherweave Net\n        41509, -- Frostweave Net\n        31463, -- Zezzak's Shard\n    },\n    [30] = {\n        835, -- Large Rope Net\n        7734, -- Six Demon Bag\n        34191, -- Handful of Snowflakes\n    },\n    [35] = {\n        24269, -- Heavy Netherweave Net\n        18904, -- Zorbin's Ultra-Shrinker\n    },\n    [40] = {\n        28767, -- The Decapitator\n    },\n    [45] = {\n        32698, -- Wrangling Rope\n    },\n    [60] = {\n        32825, -- Soul Cannon\n        37887, -- Seeds of Nature's Wrath\n    },\n    [80] = {\n        35278, -- Reinforced Net\n    },\n\t[100] = {\n\t\t41058 -- Hyldnir Harpoon (WotLK)\n\t},\n}\n\n-- This could've been done by checking player race as well and creating tables for those, but it's easier like this\nfor k, v in pairs(FriendSpells) do\n    tinsert(v, 28880) -- [\"Gift of the Naaru\"]\nend\nfor k, v in pairs(HarmSpells) do\n    tinsert(v, 28734) -- [\"Mana Tap\"]\nend\n\n-- >> END OF STATIC CONFIG\n\n-- cache\n\nlocal setmetatable = setmetatable\nlocal tonumber = tonumber\nlocal pairs = pairs\nlocal tostring = tostring\nlocal print = print\nlocal next = next\nlocal type = type\nlocal wipe = wipe\nlocal tinsert = tinsert\nlocal tremove = tremove\nlocal BOOKTYPE_SPELL = BOOKTYPE_SPELL\nlocal GetSpellInfo = GetSpellInfo\nlocal GetSpellName = GetSpellName\nlocal GetItemInfo = GetItemInfo\nlocal UnitCanAttack = UnitCanAttack\nlocal UnitCanAssist = UnitCanAssist\nlocal UnitExists = UnitExists\nlocal UnitIsDeadOrGhost = UnitIsDeadOrGhost\nlocal CheckInteractDistance = CheckInteractDistance\nlocal IsSpellInRange = IsSpellInRange\nlocal IsItemInRange = IsItemInRange\nlocal UnitClass = UnitClass\nlocal UnitRace = UnitRace\nlocal GetInventoryItemLink = GetInventoryItemLink\nlocal GetTime = GetTime\nlocal HandSlotId = GetInventorySlotInfo(\"HandsSlot\")\nlocal TT = ItemRefTooltip\n\n-- temporary stuff\n\nlocal itemRequestTimeoutAt\nlocal foundNewItems\nlocal cacheAllItems\nlocal friendItemRequests\nlocal harmItemRequests\nlocal lastUpdate = 0\n\n-- minRangeCheck is a function to check if spells with minimum range are really out of range, or fail due to range < minRange. See :init() for its setup\nlocal minRangeCheck = function(unit) return CheckInteractDistance(unit, 2) end\n\nlocal checkers_Spell = setmetatable({}, {\n    __index = function(t, spellIdx)\n        local func = function(unit)\n            if IsSpellInRange(spellIdx, BOOKTYPE_SPELL, unit) == 1 then\n                 return true\n            end\n        end\n        t[spellIdx] = func\n        return func\n    end\n})\nlocal checkers_SpellWithMin = setmetatable({}, {\n    __index = function(t, spellIdx)\n        local func = function(unit)\n            if IsSpellInRange(spellIdx, BOOKTYPE_SPELL, unit) == 1 then\n                return true\n            elseif minRangeCheck(unit) then\n                return true, true\n            end\n        end\n        t[spellIdx] = func\n        return func\n    end\n})\nlocal checkers_Item = setmetatable({}, {\n    __index = function(t, item)\n        local func = function(unit)\n            if IsItemInRange(item, unit) == 1 then\n                 return true\n            end\n        end\n        t[item] = func\n        return func\n    end\n})\nlocal checkers_Interact = setmetatable({}, {\n    __index = function(t, index)\n        local func = function(unit)\n            if CheckInteractDistance(unit, index) then\n                 return true\n            end\n        end\n        t[index] = func\n        return func\n    end\n})\n\n-- helper functions\n\nlocal function copyTable(src, dst)\n    if type(dst) ~= \"table\" then dst = {} end\n    if type(src) == \"table\" then\n        for k, v in pairs(src) do\n            if type(v) == \"table\" then\n                v = copyTable(v, dst[k])\n            end\n            dst[k] = v\n        end\n    end\n    return dst\nend\n\n\nlocal function initItemRequests(cacheAll)\n    friendItemRequests = copyTable(FriendItems)\n    harmItemRequests = copyTable(HarmItems)\n    cacheAllItems = cacheAll\n    foundNewItems = nil\nend\n\nlocal function requestItemInfo(itemId)\n    if not itemId then return end\n    TT:SetHyperlink(string.format(\"item:%d\", itemId))\nend\n\n-- return the spellIndex of the given spell by scanning the spellbook\nlocal function findSpellIdx(spellName)\n    local i = 1\n    while true do\n        local spell, rank = GetSpellName(i, BOOKTYPE_SPELL)\n        if not spell then return nil end\n        if spell == spellName then return i end\n        i = i + 1\n    end\n    return nil\nend\n\n-- minRange should be nil if there's no minRange, not 0\nlocal function addChecker(t, range, minRange, checker)\n    local rc = { [\"range\"] = range, [\"minRange\"] = minRange, [\"checker\"] = checker }\n    for i = 1, #t do\n        local v = t[i]\n        if rc.range == v.range then return end\n        if rc.range > v.range then\n            tinsert(t, i, rc)\n            return\n        end\n    end\n    tinsert(t, rc)\nend\n\nlocal function createCheckerList(spellList, itemList, interactList)\n    local res = {}\n    if spellList then\n        for i = 1, #spellList do\n            local sid = spellList[i]\n            local name, _, _, _, _, _, _, minRange, range = GetSpellInfo(sid or 0)\n            local spellIdx = findSpellIdx(name)\n            if spellIdx and range then\n                minRange = math.floor(minRange + 0.5)\n                range = math.floor(range + 0.5)\n                -- print(\"### spell: \" .. tostring(name) .. \", \" .. tostring(minRange) .. \" - \" ..  tostring(range))\n                if minRange == 0 then -- getRange() expects minRange to be nil in this case\n                    minRange = nil\n                end\n                if range == 0 then\n                    range = MeleeRange\n                end\n                if minRange then\n                    addChecker(res, range, minRange, checkers_SpellWithMin[spellIdx])\n                else\n                    addChecker(res, range, minRange, checkers_Spell[spellIdx])\n                end\n            end\n        end\n    end\n\n    if itemList then\n        for range, items in pairs(itemList) do\n            for i = 1, #items do\n                local item = items[i]\n                if GetItemInfo(item) then\n                    addChecker(res, range, nil, checkers_Item[item])\n                    break\n                end\n            end\n        end\n    end\n\n    if interactList and not next(res) then\n        for index, range in pairs(interactList) do\n            addChecker(res, range, nil,  checkers_Interact[index])\n        end\n    end\n\n    return res\nend\n\n-- returns minRange, maxRange  or nil\nlocal function getRange(unit, checkerList)\n    local min, max = 0, nil\n    for i = 1, #checkerList do\n        local rc = checkerList[i]\n        if not max or max > rc.range then\n            if rc.minRange then\n                local inRange, inMinRange = rc.checker(unit)\n                if inMinRange then\n                    max = rc.minRange\n                elseif inRange then\n                    min, max = rc.minRange, rc.range\n                elseif min > rc.range then\n                    return min, max\n                else\n                    return rc.range, max\n                end\n            elseif rc.checker(unit) then\n                max = rc.range\n            elseif min > rc.range then\n                return min, max\n            else\n                return rc.range, max\n            end\n        end\n    end\n    return min, max\nend\n\nlocal function updateCheckers(origList, newList)\n    if #origList ~= #newList then\n        wipe(origList)\n        copyTable(newList, origList)\n        return true\n    end\n    for i = 1, #origList do\n        if origList[i].range ~= newList[i].range or origList[i].checker ~= newList[i].checker then\n            wipe(origList)\n            copyTable(newList, origList)\n            return true\n        end\n    end\nend\n\nlocal function rcIterator(checkerList)\n    local curr = #checkerList\n    return function()\n        local rc = checkerList[curr]\n        if not rc then\n             return nil\n        end\n        curr = curr - 1\n        return rc.range, rc.checker\n    end\nend\n\nlocal function getMinChecker(checkerList, range)\n    local checker, checkerRange\n    for i = 1, #checkerList do\n        local rc = checkerList[i]\n        if rc.range < range then\n            return checker, checkerRange\n        end\n        checker, checkerRange = rc.checker, rc.range\n    end\n    return checker, checkerRange\nend\n\nlocal function getMaxChecker(checkerList, range)\n    for i = 1, #checkerList do\n        local rc = checkerList[i]\n        if rc.range <= range then\n            return rc.checker, rc.range\n        end\n    end\nend\n\nlocal function getChecker(checkerList, range)\n    for i = 1, #checkerList do\n        local rc = checkerList[i]\n        if rc.range == range then\n            return rc.checker\n        end\n    end\nend\n\nlocal function null()\nend\n\nlocal function createSmartChecker(friendChecker, harmChecker, miscChecker)\n    miscChecker = miscChecker or null\n    friendChecker = friendChecker or miscChecker\n    harmChecker = harmChecker or miscChecker\n    return function(unit)\n        if not UnitExists(unit) then\n            return nil\n        end\n        if UnitIsDeadOrGhost(unit) then\n            return miscChecker(unit)\n        end\n        if UnitCanAttack(\"player\", unit) then\n            return harmChecker(unit)\n        elseif UnitCanAssist(\"player\", unit) then\n            return friendChecker(unit)\n        else\n            return miscChecker(unit)\n        end\n    end\nend\n\n\n-- OK, here comes the actual lib\n\n-- pre-initialize the checkerLists here so that we can return some meaningful result even if\n-- someone manages to call us before we're properly initialized. miscRC should be independent of\n-- race/class/talents, so it's safe to initialize it here\n-- friendRC and harmRC will be properly initialized later when we have all the necessary data for them\nlib.checkerCache_Spell = lib.checkerCache_Spell or {}\nlib.checkerCache_Item = lib.checkerCache_Item or {}\nlib.miscRC = createCheckerList(nil, nil, DefaultInteractList)\nlib.friendRC = createCheckerList(nil, nil, DefaultInteractList)\nlib.harmRC = createCheckerList(nil, nil, DefaultInteractList)\n\nlib.failedItemRequests = {}\n\n-- << Public API\n\n\n\n--- The callback name that is fired when checkers are changed.\n-- @field\nlib.CHECKERS_CHANGED = \"CHECKERS_CHANGED\"\n-- \"export\" it, maybe someone will need it for formatting\n--- Constant for Melee range (5yd).\n-- @field\nlib.MeleeRange = MeleeRange\n\nfunction lib:findSpellIndex(spell)\n    if type(spell) == 'number' then\n        spell = GetSpellInfo(spell)\n    end\n    if not spell then return nil end\n    return findSpellIdx(spell)\nend\n\n-- returns the range estimate as a string\n-- deprecated, use :getRange(unit) instead and build your own strings\n-- (checkVisible is not used any more, kept for compatibility only)\nfunction lib:getRangeAsString(unit, checkVisible, showOutOfRange)\n    local minRange, maxRange = self:getRange(unit)\n    if not minRange then return nil end\n    if not maxRange then\n        return showOutOfRange and minRange .. \" +\" or nil\n    end\n    return minRange .. \" - \" .. maxRange\nend\n\n-- initialize RangeCheck if not yet initialized or if \"forced\"\nfunction lib:init(forced)\n    if self.initialized and (not forced) then return end\n    self.initialized = true\n    local _, playerClass = UnitClass(\"player\")\n    local _, playerRace = UnitRace(\"player\")\n\n    minRangeCheck = nil\n    -- first try to find a nice item we can use for minRangeCheck\n    if HarmItems[15] then\n        local items = HarmItems[15]\n        for i = 1, #items do\n            local item = items[i]\n            if GetItemInfo(item) then\n                minRangeCheck = function(unit)\n                    return (IsItemInRange(item, unit) == 1)\n                end\n                break\n            end\n        end\n    end\n    if not minRangeCheck then\n        -- ok, then try to find some class specific spell\n        if playerClass == \"WARRIOR\" then\n            -- for warriors, use Intimidating Shout if available\n            local name = GetSpellInfo(5246) -- [\"Intimidating Shout\"]\n            local spellIdx = findSpellIdx(name)\n            if spellIdx then\n                minRangeCheck = function(unit)\n                    return (IsSpellInRange(spellIdx, BOOKTYPE_SPELL, unit) == 1)\n                end\n            end\n        elseif playerClass == \"ROGUE\" then\n            -- for rogues, use Blind if available\n            local name = GetSpellInfo(2094) -- [\"Blind\"]\n            local spellIdx = findSpellIdx(name)\n            if spellIdx then\n                minRangeCheck = function(unit)\n                    return (IsSpellInRange(spellIdx, BOOKTYPE_SPELL, unit) == 1)\n                end\n            end\n        end\n    end\n    if not minRangeCheck then\n        -- fall back to interact distance checks\n        if playerClass == \"HUNTER\" or playerRace == \"Tauren\" then\n            -- for hunters, use interact4 as it's safer\n            -- for Taurens interact4 is actually closer than 25yd and interact2 is closer than 8yd, so we can't use that\n            minRangeCheck = checkers_Interact[4]\n        else\n            minRangeCheck = checkers_Interact[2]\n        end\n    end\n\n    local interactList = InteractLists[playerRace] or DefaultInteractList\n    self.handSlotItem = GetInventoryItemLink(\"player\", HandSlotId)\n    local changed = false\n    if updateCheckers(self.friendRC, createCheckerList(FriendSpells[playerClass], FriendItems, interactList)) then\n        changed = true\n    end\n    if updateCheckers(self.harmRC, createCheckerList(HarmSpells[playerClass], HarmItems, interactList)) then\n        changed = true\n    end\n    if updateCheckers(self.miscRC, createCheckerList(nil, nil, interactList)) then\n        changed = true\n    end\n    if changed and self.callbacks then\n        self.callbacks:Fire(self.CHECKERS_CHANGED)\n    end\nend\n\n--- Return an iterator for checkers usable on friendly units as (**range**, **checker**) pairs.\nfunction lib:GetFriendCheckers()\n    return rcIterator(self.friendRC)\nend\n\n--- Return an iterator for checkers usable on enemy units as (**range**, **checker**) pairs.\nfunction lib:GetHarmCheckers()\n    return rcIterator(self.harmRC)\nend\n\n--- Return an iterator for checkers usable on miscellaneous units as (**range**, **checker**) pairs.  These units are neither enemy nor friendly, such as people in sanctuaries or corpses.\nfunction lib:GetMiscCheckers()\n    return rcIterator(self.miscRC)\nend\n\n--- Return a checker suitable for out-of-range checking on friendly units, that is, a checker whose range is equal or larger than the requested range.\n-- @param range the range to check for.\n-- @return **checker**, **range** pair or **nil** if no suitable checker is available. **range** is the actual range the returned **checker** checks for.\nfunction lib:GetFriendMinChecker(range)\n    return getMinChecker(self.friendRC, range)\nend\n\n--- Return a checker suitable for out-of-range checking on enemy units, that is, a checker whose range is equal or larger than the requested range.\n-- @param range the range to check for.\n-- @return **checker**, **range** pair or **nil** if no suitable checker is available. **range** is the actual range the returned **checker** checks for.\nfunction lib:GetHarmMinChecker(range)\n    return getMinChecker(self.harmRC, range)\nend\n\n--- Return a checker suitable for out-of-range checking on miscellaneous units, that is, a checker whose range is equal or larger than the requested range.\n-- @param range the range to check for.\n-- @return **checker**, **range** pair or **nil** if no suitable checker is available. **range** is the actual range the returned **checker** checks for.\nfunction lib:GetMiscMinChecker(range)\n    return getMinChecker(self.miscRC, range)\nend\n\n--- Return a checker suitable for in-range checking on friendly units, that is, a checker whose range is equal or smaller than the requested range.\n-- @param range the range to check for.\n-- @return **checker**, **range** pair or **nil** if no suitable checker is available. **range** is the actual range the returned **checker** checks for.\nfunction lib:GetFriendMaxChecker(range)\n    return getMaxChecker(self.friendRC, range)\nend\n\n--- Return a checker suitable for in-range checking on enemy units, that is, a checker whose range is equal or smaller than the requested range.\n-- @param range the range to check for.\n-- @return **checker**, **range** pair or **nil** if no suitable checker is available. **range** is the actual range the returned **checker** checks for.\nfunction lib:GetHarmMaxChecker(range)\n    return getMaxChecker(self.harmRC, range)\nend\n\n--- Return a checker suitable for in-range checking on miscellaneous units, that is, a checker whose range is equal or smaller than the requested range.\n-- @param range the range to check for.\n-- @return **checker**, **range** pair or **nil** if no suitable checker is available. **range** is the actual range the returned **checker** checks for.\nfunction lib:GetMiscMaxChecker(range)\n    return getMaxChecker(self.miscRC, range)\nend\n\n--- Return a checker for the given range for friendly units.\n-- @param range the range to check for.\n-- @return **checker** function or **nil** if no suitable checker is available.\nfunction lib:GetFriendChecker(range)\n    return getChecker(self.friendRC, range)\nend\n\n--- Return a checker for the given range for enemy units.\n-- @param range the range to check for.\n-- @return **checker** function or **nil** if no suitable checker is available.\nfunction lib:GetHarmChecker(range)\n    return getChecker(self.harmRC, range)\nend\n\n--- Return a checker for the given range for miscellaneous units.\n-- @param range the range to check for.\n-- @return **checker** function or **nil** if no suitable checker is available.\nfunction lib:GetMiscChecker(range)\n    return getChecker(self.miscRC, range)\nend\n\n--- Return a checker suitable for out-of-range checking that checks the unit type and calls the appropriate checker (friend/harm/misc).\n-- @param range the range to check for.\n-- @return **checker** function.\nfunction lib:GetSmartMinChecker(range)\n    return createSmartChecker(\n        getMinChecker(self.friendRC, range),\n        getMinChecker(self.harmRC, range),\n        getMinChecker(self.miscRC, range))\nend\n\n--- Return a checker suitable for in-of-range checking that checks the unit type and calls the appropriate checker (friend/harm/misc).\n-- @param range the range to check for.\n-- @return **checker** function.\nfunction lib:GetSmartMaxChecker(range)\n    return createSmartChecker(\n        getMaxChecker(self.friendRC, range),\n        getMaxChecker(self.harmRC, range),\n        getMaxChecker(self.miscRC, range))\nend\n\n--- Return a checker for the given range that checks the unit type and calls the appropriate checker (friend/harm/misc).\n-- @param range the range to check for.\n-- @param fallback optional fallback function that gets called as fallback(unit) if a checker is not available for the given type (friend/harm/misc) at the requested range. The default fallback function return nil.\n-- @return **checker** function.\nfunction lib:GetSmartChecker(range, fallback)\n    return createSmartChecker(\n        getChecker(self.friendRC, range) or fallback,\n        getChecker(self.harmRC, range) or fallback,\n        getChecker(self.miscRC, range) or fallback)\nend\n\n--- Get a range estimate as **minRange**, **maxRange**.\n-- @param unit the target unit to check range to.\n-- @return **minRange**, **maxRange** pair if a range estimate could be determined, **nil** otherwise. **maxRange** is **nil** if **unit** is further away than the highest possible range we can check.\n-- Includes checks for unit validity and friendly/enemy status.\n-- @usage\n-- local rc = LibStub(\"LibRangeCheck-2.0\")\n-- local minRange, maxRange = rc:GetRange('target')\nfunction lib:GetRange(unit)\n    if not UnitExists(unit) then\n        return nil\n    end\n    if UnitIsDeadOrGhost(unit) then\n        return getRange(unit, self.miscRC)\n    end\n    if UnitCanAttack(\"player\", unit) then\n        return getRange(unit, self.harmRC)\n    elseif UnitCanAssist(\"player\", unit) then\n        return getRange(unit, self.friendRC)\n    else\n        return getRange(unit, self.miscRC)\n    end\nend\n\n-- keep this for compatibility\nlib.getRange = lib.GetRange\n\n-- >> Public API\n\nfunction lib:OnEvent(event, ...)\n    if type(self[event]) == 'function' then\n        self[event](self, event, ...)\n    end\nend\n\nfunction lib:LEARNED_SPELL_IN_TAB()\n    self:scheduleInit()\nend\n\nfunction lib:CHARACTER_POINTS_CHANGED()\n    self:scheduleInit()\nend\n\nfunction lib:PLAYER_TALENT_UPDATE()\n    self:scheduleInit()\nend\n\nfunction lib:GLYPH_ADDED()\n    self:scheduleInit()\nend\n\nfunction lib:GLYPH_REMOVED()\n    self:scheduleInit()\nend\n\nfunction lib:GLYPH_UPDATED()\n    self:scheduleInit()\nend\n\nfunction lib:UNIT_INVENTORY_CHANGED(event, unit)\n    if self.initialized and unit == \"player\" and self.handSlotItem ~= GetInventoryItemLink(\"player\", HandSlotId) then\n        self:scheduleInit()\n    end\nend\n\nfunction lib:processItemRequests(itemRequests)\n    while true do\n        local range, items = next(itemRequests)\n        if not range then return end\n        while true do\n            local i, item = next(items)\n            if not i then\n                itemRequests[range] = nil\n                break\n            elseif self.failedItemRequests[item] then\n                tremove(items, i)\n            elseif GetItemInfo(item) then\n                if itemRequestTimeoutAt then\n                    foundNewItems = true\n                    itemRequestTimeoutAt = nil\n                end\n                if not cacheAllItems then\n                    itemRequests[range] = nil\n                    break\n                end\n                tremove(items, i)\n            elseif not itemRequestTimeoutAt then\n                requestItemInfo(item)\n                itemRequestTimeoutAt = GetTime() + ItemRequestTimeout\n                return true\n            elseif GetTime() > itemRequestTimeoutAt then\n                if cacheAllItems then\n                    print(MAJOR_VERSION .. \": timeout for item: \" .. tostring(item))\n                end\n                self.failedItemRequests[item] = true\n                itemRequestTimeoutAt = nil\n                tremove(items, i)\n            else\n                return true -- still waiting for server response\n            end\n        end\n    end\nend\n\nfunction lib:initialOnUpdate()\n    self:init()\n    if friendItemRequests then\n        if self:processItemRequests(friendItemRequests) then return end\n        friendItemRequests = nil\n    end\n    if harmItemRequests then\n        if self:processItemRequests(harmItemRequests) then return end\n        harmItemRequests = nil\n    end\n    if foundNewItems then\n        self:init(true)\n        foundNewItems = nil\n    end\n    if cacheAllItems then\n        print(MAJOR_VERSION .. \": finished cache\")\n        cacheAllItems = nil\n    end\n    self.frame:Hide()\nend\n\nfunction lib:scheduleInit()\n    self.initialized = nil\n    lastUpdate = 0\n    self.frame:Show()\nend\n\n\n\n-- << load-time initialization\n\nfunction lib:activate()\n    if not self.frame then\n        local frame = CreateFrame(\"Frame\")\n        self.frame = frame\n        frame:RegisterEvent(\"LEARNED_SPELL_IN_TAB\")\n        frame:RegisterEvent(\"CHARACTER_POINTS_CHANGED\")\n        frame:RegisterEvent(\"PLAYER_TALENT_UPDATE\")\n        frame:RegisterEvent(\"GLYPH_ADDED\")\n        frame:RegisterEvent(\"GLYPH_REMOVED\")\n        frame:RegisterEvent(\"GLYPH_UPDATED\")\n        local _, playerClass = UnitClass(\"player\")\n        if playerClass == \"MAGE\" or playerClass == \"SHAMAN\" then\n            -- Mage and Shaman gladiator gloves modify spell ranges\n            frame:RegisterEvent(\"UNIT_INVENTORY_CHANGED\")\n        end\n    end\n    initItemRequests()\n    self.frame:SetScript(\"OnEvent\", function(frame, ...) self:OnEvent(...) end)\n    self.frame:SetScript(\"OnUpdate\", function(frame, elapsed)\n        lastUpdate = lastUpdate + elapsed\n        if lastUpdate < UpdateDelay then\n            return\n        end\n        lastUpdate = 0\n        self:initialOnUpdate()\n    end)\n    self:scheduleInit()\nend\n\n--- BEGIN CallbackHandler stuff\n\ndo\n    local lib = lib -- to keep a ref even though later we nil lib\n    --- Register a callback to get called when checkers are updated\n    -- @class function\n    -- @name lib.RegisterCallback\n    -- @usage\n    -- rc.RegisterCallback(self, rc.CHECKERS_CHANGED, \"myCallback\")\n    -- -- or\n    -- rc.RegisterCallback(self, \"CHECKERS_CHANGED\", someCallbackFunction)\n    -- @see CallbackHandler-1.0 documentation for more details\n    lib.RegisterCallback = lib.RegisterCallback or function(...)\n        local CBH = LibStub(\"CallbackHandler-1.0\")\n        lib.RegisterCallback = nil -- extra safety, we shouldn't get this far if CBH is not found, but better an error later than an infinite recursion now\n        lib.callbacks = CBH:New(lib)\n        -- ok, CBH hopefully injected or new shiny RegisterCallback\n        return lib.RegisterCallback(...)\n    end\nend\n\n--- END CallbackHandler stuff\n\nlib:activate()\nlib = nil"
  },
  {
    "path": "DBM-Core/Libs/LibSerialize/LibSerialize.lua",
    "content": "--[[\nCopyright (c) 2020 Ross Nichols\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nCredits:\nThe following projects served as inspiration for aspects of this project:\n\n1. LibDeflate, by Haoqian He. https://github.com/SafeteeWoW/LibDeflate\n    For the CreateReader/CreateWriter functions.\n2. lua-MessagePack, by François Perrad. https://framagit.org/fperrad/lua-MessagePack\n    For the mechanism for packing/unpacking floats and ints.\n3. LibQuestieSerializer, by aero. https://github.com/AeroScripts/LibQuestieSerializer\n    For the basis of the implementation, and initial inspiration.\n]]\n\n\n-- Latest version can be found at https://github.com/rossnichols/LibSerialize.\n\n--[[\n# LibSerialize\n\nLibSerialize is a Lua library for efficiently serializing/deserializing arbitrary values.\nIt supports serializing nils, numbers, booleans, strings, and tables containing these types.\n\nIt is best paired with [LibDeflate](https://github.com/safeteeWow/LibDeflate), to compress\nthe serialized output and optionally encode it for World of Warcraft addon or chat channels.\nIMPORTANT: if you decide not to compress the output and plan on transmitting over an addon\nchannel, it still needs to be encoded, but encoding via `LibDeflate:EncodeForWoWAddonChannel()`\nor `LibCompress:GetAddonEncodeTable()` will likely inflate the size of the serialization\nby a considerable amount. See the usage below for an alternative.\n\nNote that serialization and compression are sensitive to the specifics of your data set.\nYou should experiment with the available libraries (LibSerialize, AceSerializer, LibDeflate,\nLibCompress, etc.) to determine which combination works best for you.\n\n\n## Usage:\n\n```lua\n-- Dependencies: AceAddon-3.0, AceComm-3.0, LibSerialize, LibDeflate\nMyAddon = LibStub(\"AceAddon-3.0\"):NewAddon(\"MyAddon\", \"AceComm-3.0\")\nlocal LibSerialize = LibStub(\"LibSerialize\")\nlocal LibDeflate = LibStub(\"LibDeflate\")\n\nfunction MyAddon:OnEnable()\n    self:RegisterComm(\"MyPrefix\")\nend\n\n-- With compression (recommended):\nfunction MyAddon:Transmit(data)\n    local serialized = LibSerialize:Serialize(data)\n    local compressed = LibDeflate:CompressDeflate(serialized)\n    local encoded = LibDeflate:EncodeForWoWAddonChannel(compressed)\n    self:SendCommMessage(\"MyPrefix\", encoded, \"WHISPER\", UnitName(\"player\"))\nend\n\nfunction MyAddon:OnCommReceived(prefix, payload, distribution, sender)\n    local decoded = LibDeflate:DecodeForWoWAddonChannel(payload)\n    if not decoded then return end\n    local decompressed = LibDeflate:DecompressDeflate(decoded)\n    if not decompressed then return end\n    local success, data = LibSerialize:Deserialize(decompressed)\n    if not success then return end\n\n    -- Handle `data`\nend\n\n-- Without compression (custom codec):\nMyAddon._codec = LibDeflate:CreateCodec(\"\\000\", \"\\255\", \"\")\nfunction MyAddon:Transmit(data)\n    local serialized = LibSerialize:Serialize(data)\n    local encoded = self._codec:Encode(serialized)\n    self:SendCommMessage(\"MyPrefix\", encoded, \"WHISPER\", UnitName(\"player\"))\nend\nfunction MyAddon:OnCommReceived(prefix, payload, distribution, sender)\n    local decoded = self._codec:Decode(payload)\n    if not decoded then return end\n    local success, data = LibSerialize:Deserialize(decoded)\n    if not success then return end\n\n    -- Handle `data`\nend\n```\n\n\n## API:\n* **`LibSerialize:SerializeEx(opts, ...)`**\n\n    Arguments:\n    * `opts`: options (see below)\n    * `...`: a variable number of serializable values\n\n    Returns:\n    * result: `...` serialized as a string\n\n* **`LibSerialize:Serialize(...)`**\n\n    Arguments:\n    * `...`: a variable number of serializable values\n\n    Returns:\n    * `result`: `...` serialized as a string\n\n    Calls `SerializeEx(opts, ...)` with the default options (see below)\n\n* **`LibSerialize:Deserialize(input)`**\n\n    Arguments:\n    * `input`: a string previously returned from `LibSerialize:Serialize()`\n\n    Returns:\n    * `success`: a boolean indicating if deserialization was successful\n    * `...`: the deserialized value(s), or a string containing the encountered Lua error\n\n* **`LibSerialize:DeserializeValue(input)`**\n\n    Arguments:\n    * `input`: a string previously returned from `LibSerialize:Serialize()`\n\n    Returns:\n    * `...`: the deserialized value(s)\n\n* **`LibSerialize:IsSerializableType(...)`**\n\n    Arguments:\n    * `...`: a variable number of values\n\n    Returns:\n    * `result`: true if all of the values' types are serializable.\n\n    Note that if you pass a table, it will be considered serializable\n    even if it contains unserializable keys or values. Only the types\n    of the arguments are checked.\n\n`Serialize()` will raise a Lua error if the input cannot be serialized.\nThis will occur if any of the following exceed 16777215: any string length,\nany table key count, number of unique strings, number of unique tables.\nIt will also occur by default if any unserializable types are encountered,\nthough that behavior may be disabled (see options).\n\n`Deserialize()` and `DeserializeValue()` are equivalent, except the latter\nreturns the deserialization result directly and will not catch any Lua\nerrors that may occur when deserializing invalid input.\n\nNote that none of the serialization/deseriazation methods support reentrancy,\nand modifying tables during the serialization process is unspecified and\nshould be avoided. Table serialization is multi-phased and assumes a consistent\nstate for the key/value pairs across the phases.\n\n\n## Options:\nThe following serialization options are supported:\n* `errorOnUnserializableType`: `boolean` (default true)\n  * `true`: unserializable types will raise a Lua error\n  * `false`: unserializable types will be ignored. If it's a table key or value,\n     the key/value pair will be skipped. If it's one of the arguments to the\n     call to SerializeEx(), it will be replaced with `nil`.\n* `filter`: `function(t, k, v) => boolean` (default nil)\n  * If specified, the function will be called on every key/value pair in every\n    table encountered during serialization. The function must return true for\n    the pair to be serialized. It may be called multiple times on a table for\n    the same key/value pair. See notes on reeentrancy and table modification.\n\nIf an option is unspecified in the table, then its default will be used.\nThis means that if an option `foo` defaults to true, then:\n* `myOpts.foo = false`: option `foo` is false\n* `myOpts.foo = nil`: option `foo` is true\n\n\n## Customizing table serialization:\nFor any serialized table, LibSerialize will check for the presence of a\nmetatable key `__LibSerialize`. It will be interpreted as a table with\nthe following possible keys:\n* `filter`: `function(t, k, v) => boolean`\n  * If specified, the function will be called on every key/value pair in that\n    table. The function must return true for the pair to be serialized. It may\n    be called multiple times on a table for the same key/value pair. See notes\n    on reeentrancy and table modification. If combined with the `filter` option,\n    both functions must return true.\n\n\n## Examples:\n1. `LibSerialize:Serialize()` supports variadic arguments and arbitrary key types,\n   maintaining a consistent internal table identity.\n    ```lua\n    local t = { \"test\", [false] = {} }\n    t[ t[false] ] = \"hello\"\n    local serialized = LibSerialize:Serialize(t, \"extra\")\n    local success, tab, str = LibSerialize:Deserialize(serialized)\n    assert(success)\n    assert(tab[1] == \"test\")\n    assert(tab[ tab[false] ] == \"hello\")\n    assert(str == \"extra\")\n    ```\n\n2. Normally, unserializable types raise an error when encountered during serialization,\n   but that behavior can be disabled in order to silently ignore them instead.\n    ```lua\n    local serialized = LibSerialize:SerializeEx(\n        { errorOnUnserializableType = false },\n        print, { a = 1, b = print })\n    local success, fn, tab = LibSerialize:Deserialize(serialized)\n    assert(success)\n    assert(fn == nil)\n    assert(tab.a == 1)\n    assert(tab.b == nil)\n    ```\n\n3. Tables may reference themselves recursively and will still be serialized properly.\n    ```lua\n    local t = { a = 1 }\n    t.t = t\n    t[t] = \"test\"\n    local serialized = LibSerialize:Serialize(t)\n    local success, tab = LibSerialize:Deserialize(serialized)\n    assert(success)\n    assert(tab.t.t.t.t.t.t.a == 1)\n    assert(tab[tab.t] == \"test\")\n    ```\n\n4. You may specify a global filter that applies to all tables encountered during\n   serialization, and to individual tables via their metatable.\n    ```lua\n    local t = { a = 1, b = print, c = 3 }\n    local nested = { a = 1, b = print, c = 3 }\n    t.nested = nested\n    setmetatable(nested, { __LibSerialize = {\n        filter = function(t, k, v) return k ~= \"c\" end\n    }})\n    local opts = {\n        filter = function(t, k, v) return LibSerialize:IsSerializableType(k, v) end\n    }\n    local serialized = LibSerialize:SerializeEx(opts, t)\n    local success, tab = LibSerialize:Deserialize(serialized)\n    assert(success)\n    assert(tab.a == 1)\n    assert(tab.b == nil)\n    assert(tab.c == 3)\n    assert(tab.nested.a == 1)\n    assert(tab.nested.b == nil)\n    assert(tab.nested.c == nil)\n    ```\n\n\n## Encoding format:\nEvery object is encoded as a type byte followed by type-dependent payload.\n\nFor numbers, the payload is the number itself, using a number of bytes\nappropriate for the number. Small numbers can be embedded directly into\nthe type byte, optionally with an additional byte following for more\npossible values. Negative numbers are encoded as their absolute value,\nwith the type byte indicating that it is negative. Floats are decomposed\ninto their eight bytes, unless serializing as a string is shorter.\n\nFor strings and tables, the length/count is also encoded so that the\npayload doesn't need a special terminator. Small counts can be embedded\ndirectly into the type byte, whereas larger counts are encoded directly\nfollowing the type byte, before the payload.\n\nStrings are stored directly, with no transformations. Tables are stored\nin one of three ways, depending on their layout:\n* Array-like: all keys are numbers starting from 1 and increasing by 1.\n    Only the table's values are encoded.\n* Map-like: the table has no array-like keys.\n    The table is encoded as key-value pairs.\n* Mixed: the table has both map-like and array-like keys.\n    The table is encoded first with the values of the array-like keys,\n    followed by key-value pairs for the map-like keys. For this version,\n    two counts are encoded, one each for the two different portions.\n\nStrings and tables are also tracked as they are encountered, to detect reuse.\nIf a string or table is reused, it is encoded instead as an index into the\ntracking table for that type. Strings must be >2 bytes in length to be tracked.\nTables may reference themselves recursively.\n\n\n#### Type byte:\nThe type byte uses the following formats to implement the above:\n\n* `NNNN NNN1`: a 7 bit non-negative int\n* `CCCC TT10`: a 2 bit type index and 4 bit count (strlen, #tab, etc.)\n    * Followed by the type-dependent payload\n* `NNNN S100`: the lower four bits of a 12 bit int and 1 bit for its sign\n    * Followed by a byte for the upper bits\n* `TTTT T000`: a 5 bit type index\n    * Followed by the type-dependent payload, including count(s) if needed\n--]]\n\nlocal MAJOR, MINOR = \"LibSerialize\", 1\nlocal LibSerialize\nif LibStub then\n    LibSerialize = LibStub:NewLibrary(MAJOR, MINOR)\n    if not LibSerialize then return end -- This version is already loaded.\nelse\n    LibSerialize = {}\nend\n\nlocal assert = assert\nlocal error = error\nlocal pcall = pcall\nlocal print = print\nlocal getmetatable = getmetatable\nlocal pairs = pairs\nlocal ipairs = ipairs\nlocal select = select\nlocal unpack = unpack\nlocal type = type\nlocal tostring = tostring\nlocal tonumber = tonumber\nlocal max = math.max\nlocal frexp = math.frexp\nlocal ldexp = math.ldexp\nlocal floor = math.floor\nlocal math_modf = math.modf\nlocal math_huge = math.huge\nlocal string_byte = string.byte\nlocal string_char = string.char\nlocal string_sub = string.sub\nlocal table_concat = table.concat\nlocal table_insert = table.insert\n\nlocal defaultOptions = {\n    errorOnUnserializableType = true\n}\n\nlocal canSerializeFnOptions = {\n    errorOnUnserializableType = false\n}\n\n\n--[[---------------------------------------------------------------------------\n    Helper functions.\n--]]---------------------------------------------------------------------------\n\n-- Returns the number of bytes required to store the value,\n-- up to a maximum of three. Errors if three bytes is insufficient.\nlocal function GetRequiredBytes(value)\n    if value < 256 then return 1 end\n    if value < 65536 then return 2 end\n    if value < 16777216 then return 3 end\n    error(\"Object limit exceeded\")\nend\n\n-- Returns the number of bytes required to store the value,\n-- though always returning seven if four bytes is insufficient.\n-- Doubles have room for 53bit numbers, so seven bits max.\nlocal function GetRequiredBytesNumber(value)\n    if value < 256 then return 1 end\n    if value < 65536 then return 2 end\n    if value < 16777216 then return 3 end\n    if value < 4294967296 then return 4 end\n    return 7\nend\n\n-- Returns whether the value (a number) is fractional,\n-- as opposed to a whole number.\nlocal function IsFractional(value)\n    local _, fract = math_modf(value)\n    return fract ~= 0\nend\n\n-- Prints args to the chat window. To enable debug statements,\n-- do a find/replace in this file with \"-- DebugPrint(\" for \"DebugPrint(\",\n-- or the reverse to disable them again.\nlocal DebugPrint = function(...)\n    print(...)\n    -- ABGP:WriteLogged(\"SERIALIZE\", table_concat({tostringall(...)}, \" \"))\nend\n\n\n--[[---------------------------------------------------------------------------\n    Helpers for reading/writing streams of bytes from/to a string\n--]]---------------------------------------------------------------------------\n\n-- Creates a writer to lazily construct a string over multiple writes.\n-- Return values:\n-- 1. WriteString(str)\n-- 2. Flush()\nlocal function CreateWriter()\n    local bufferSize = 0\n    local buffer = {}\n\n    -- Write the entire string into the writer.\n    local function WriteString(str)\n        -- DebugPrint(\"Writing string:\", str, #str)\n        bufferSize = bufferSize + 1\n        buffer[bufferSize] = str\n    end\n\n    -- Return a string built from the previous calls to WriteString.\n    local function FlushWriter()\n        local flushed = table_concat(buffer, \"\", 1, bufferSize)\n        bufferSize = 0\n        return flushed\n    end\n\n    return WriteString, FlushWriter\nend\n\n-- Creates a reader to sequentially read bytes from the input string.\n-- Return values:\n-- 1. ReadBytes(bytelen)\n-- 2. ReaderBytesLeft()\nlocal function CreateReader(input)\n    local input = input\n    local inputLen = #input\n    local nextPos = 1\n\n    -- Read some bytes from the reader.\n    -- @param bytelen The number of bytes to be read.\n    -- @return the bytes as a string\n    local function ReadBytes(bytelen)\n        local result = string_sub(input, nextPos, nextPos + bytelen - 1)\n        nextPos = nextPos + bytelen\n        return result\n    end\n\n    local function ReaderBytesLeft()\n        return inputLen - nextPos + 1\n    end\n\n    return ReadBytes, ReaderBytesLeft\nend\n\n\n--[[---------------------------------------------------------------------------\n    Helpers for serializing/deserializing numbers (ints and floats)\n--]]---------------------------------------------------------------------------\n\nlocal function FloatToString(n)\n    local sign = 0\n    if n < 0.0 then\n        sign = 0x80\n        n = -n\n    end\n    local mant, expo = frexp(n)\n    if mant ~= mant then -- nan\n        return string_char(0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)\n    elseif mant == math_huge or expo > 0x400 then\n        if sign == 0 then -- inf\n            return string_char(0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)\n        else -- -inf\n            return string_char(0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)\n        end\n    elseif (mant == 0.0 and expo == 0) or expo < -0x3FE then -- zero\n        return string_char(sign, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)\n    else\n        expo = expo + 0x3FE\n        mant = floor((mant * 2.0 - 1.0) * ldexp(0.5, 53))\n        return string_char(sign + floor(expo / 0x10),\n                           (expo % 0x10) * 0x10 + floor(mant / 281474976710656),\n                           floor(mant / 1099511627776) % 256,\n                           floor(mant / 4294967296) % 256,\n                           floor(mant / 16777216) % 256,\n                           floor(mant / 65536) % 256,\n                           floor(mant / 256) % 256,\n                           mant % 256)\n    end\nend\n\nlocal function StringToFloat(str)\n    local b1, b2, b3, b4, b5, b6, b7, b8 = string_byte(str, 1, 8)\n    local sign = b1 > 0x7F\n    local expo = (b1 % 0x80) * 0x10 + floor(b2 / 0x10)\n    local mant = ((((((b2 % 0x10) * 256 + b3) * 256 + b4) * 256 + b5) * 256 + b6) * 256 + b7) * 256 + b8\n    if sign then\n        sign = -1\n    else\n        sign = 1\n    end\n    local n\n    if mant == 0 and expo == 0 then\n        n = sign * 0.0\n    elseif expo == 0x7FF then\n        if mant == 0 then\n            n = sign * math_huge\n        else\n            n = 0.0/0.0\n        end\n    else\n        n = sign * ldexp(1.0 + mant / 4503599627370496.0, expo - 0x3FF)\n    end\n    return n\nend\n\nlocal function IntToString(n, required)\n    if required == 1 then\n        return string_char(n)\n    elseif required == 2 then\n        return string_char(floor(n / 256),\n                           n % 256)\n    elseif required == 3 then\n        return string_char(floor(n / 65536),\n                           floor(n / 256) % 256,\n                           n % 256)\n    elseif required == 4 then\n        return string_char(floor(n / 16777216),\n                           floor(n / 65536) % 256,\n                           floor(n / 256) % 256,\n                           n % 256)\n    elseif required == 7 then\n        return string_char(floor(n / 281474976710656) % 256,\n                           floor(n / 1099511627776) % 256,\n                           floor(n / 4294967296) % 256,\n                           floor(n / 16777216) % 256,\n                           floor(n / 65536) % 256,\n                           floor(n / 256) % 256,\n                           n % 256)\n    end\n\n    error(\"Invalid required bytes: \" .. required)\nend\n\nlocal function StringToInt(str, required)\n    if required == 1 then\n        return string_byte(str)\n    elseif required == 2 then\n        local b1, b2 = string_byte(str, 1, 2)\n        return b1 * 256 + b2\n    elseif required == 3 then\n        local b1, b2, b3 = string_byte(str, 1, 3)\n        return (b1 * 256 + b2) * 256 + b3\n    elseif required == 4 then\n        local b1, b2, b3, b4 = string_byte(str, 1, 4)\n        return ((b1 * 256 + b2) * 256 + b3) * 256 + b4\n    elseif required == 7 then\n        local b1, b2, b3, b4, b5, b6, b7, b8 = 0, string_byte(str, 1, 7)\n        return ((((((b1 * 256 + b2) * 256 + b3) * 256 + b4) * 256 + b5) * 256 + b6) * 256 + b7) * 256 + b8\n    end\n\n    error(\"Invalid required bytes: \" .. required)\nend\n\n\n--[[---------------------------------------------------------------------------\n    Object reuse:\n    As strings/tables are serialized or deserialized, they are stored in this lookup\n    table in case they're encountered again, at which point they can be referenced\n    by their index into this table rather than repeating the string contents.\n--]]---------------------------------------------------------------------------\n\nlocal refsDirty = false\nlocal stringRefs = {}\nlocal tableRefs = {}\n\nfunction LibSerialize:_AddReference(refs, value)\n    refsDirty = true\n\n    local ref = #refs + 1\n    refs[ref] = value\n    refs[value] = ref\nend\n\nfunction LibSerialize:_ClearReferences()\n    if refsDirty then\n        stringRefs = {}\n        tableRefs = {}\n    end\nend\n\n\n--[[---------------------------------------------------------------------------\n    Read (deserialization) support.\n--]]---------------------------------------------------------------------------\n\nfunction LibSerialize:_ReadObject()\n    local value = self:_ReadByte()\n\n    if value % 2 == 1 then\n        -- Number embedded in the top 7 bits.\n        local num = (value - 1) / 2\n        -- DebugPrint(\"Found embedded number (1byte):\", value, num)\n        return num\n    end\n\n    if value % 4 == 2 then\n        -- Type with embedded count. Extract both.\n        -- The type is in bits 3-4, count in 5-8.\n        local typ = (value - 2) / 4\n        local count = (typ - typ % 4) / 4\n        typ = typ % 4\n        -- DebugPrint(\"Found type with embedded count:\", value, typ, count)\n        return self._EmbeddedReaderTable[typ](self, count)\n    end\n\n    if value % 8 == 4 then\n        -- Number embedded in the top 4 bits, plus an additional byte's worth (so 12 bits).\n        -- If bit 4 is set, the number is negative.\n        local packed = self:_ReadByte() * 256 + value\n        local num\n        if value % 16 == 12 then\n            num = -(packed - 12) / 16\n        else\n            num = (packed - 4) / 16\n        end\n        -- DebugPrint(\"Found embedded number (2bytes):\", value, packed, num)\n        return num\n    end\n\n    -- Otherwise, the type index is embedded in the upper 5 bits.\n    local typ = value / 8\n    -- DebugPrint(\"Found type:\", value, typ)\n    return self._ReaderTable[typ](self)\nend\n\nfunction LibSerialize:_ReadTable(entryCount, value)\n    -- DebugPrint(\"Extracting keys/values for table:\", entryCount)\n\n    if value == nil then\n        value = {}\n        self:_AddReference(tableRefs, value)\n    end\n\n    for i = 1, entryCount do\n        local k, v = self:_ReadPair(self._ReadObject)\n        value[k] = v\n    end\n\n    return value\nend\n\nfunction LibSerialize:_ReadArray(entryCount, value)\n    -- DebugPrint(\"Extracting values for array:\", entryCount)\n\n    if value == nil then\n        value = {}\n        self:_AddReference(tableRefs, value)\n    end\n\n    for i = 1, entryCount do\n        value[i] = self:_ReadObject()\n    end\n\n    return value\nend\n\nfunction LibSerialize:_ReadMixed(arrayCount, mapCount)\n    -- DebugPrint(\"Extracting values for mixed table:\", arrayCount, mapCount)\n\n    local value = {}\n    self:_AddReference(tableRefs, value)\n\n    self:_ReadArray(arrayCount, value)\n    self:_ReadTable(mapCount, value)\n\n    return value\nend\n\nfunction LibSerialize:_ReadString(len)\n    -- DebugPrint(\"Reading string,\", len)\n\n    local value = self._readBytes(len)\n    if len > 2 then\n        self:_AddReference(stringRefs, value)\n    end\n    return value\nend\n\nfunction LibSerialize:_ReadByte()\n    -- DebugPrint(\"Reading byte\")\n\n    return self:_ReadInt(1)\nend\n\nfunction LibSerialize:_ReadInt(required)\n    -- DebugPrint(\"Reading int\", required)\n\n    return StringToInt(self._readBytes(required), required)\nend\n\nfunction LibSerialize:_ReadPair(fn, ...)\n    local first = fn(self, ...)\n    local second = fn(self, ...)\n    return first, second\nend\n\nlocal embeddedIndexShift = 4\nlocal embeddedCountShift = 16\nLibSerialize._EmbeddedIndex = {\n    STRING = 0,\n    TABLE = 1,\n    ARRAY = 2,\n    MIXED = 3,\n}\nLibSerialize._EmbeddedReaderTable = {\n    [LibSerialize._EmbeddedIndex.STRING] = function(self, c) return self:_ReadString(c) end,\n    [LibSerialize._EmbeddedIndex.TABLE] =  function(self, c) return self:_ReadTable(c) end,\n    [LibSerialize._EmbeddedIndex.ARRAY] =  function(self, c) return self:_ReadArray(c) end,\n    -- For MIXED, the 4-bit count contains two 2-bit counts that are one less than the true count.\n    [LibSerialize._EmbeddedIndex.MIXED] =  function(self, c) return self:_ReadMixed((c % 4) + 1, floor(c / 4) + 1) end,\n}\n\nlocal readerIndexShift = 8\nLibSerialize._ReaderIndex = {\n    NIL = 0,\n\n    NUM_16_POS = 1,\n    NUM_16_NEG = 2,\n    NUM_24_POS = 3,\n    NUM_24_NEG = 4,\n    NUM_32_POS = 5,\n    NUM_32_NEG = 6,\n    NUM_64_POS = 7,\n    NUM_64_NEG = 8,\n    NUM_FLOAT = 9,\n    NUM_FLOATSTR_POS = 10,\n    NUM_FLOATSTR_NEG = 11,\n\n    BOOL_T = 12,\n    BOOL_F = 13,\n\n    STR_8 = 14,\n    STR_16 = 15,\n    STR_24 = 16,\n\n    TABLE_8 = 17,\n    TABLE_16 = 18,\n    TABLE_24 = 19,\n\n    ARRAY_8 = 20,\n    ARRAY_16 = 21,\n    ARRAY_24 = 22,\n\n    MIXED_8 = 23,\n    MIXED_16 = 24,\n    MIXED_24 = 25,\n\n    STRINGREF_8 = 26,\n    STRINGREF_16 = 27,\n    STRINGREF_24 = 28,\n\n    TABLEREF_8 = 29,\n    TABLEREF_16 = 30,\n    TABLEREF_24 = 31,\n}\nLibSerialize._ReaderTable = {\n    -- Nil\n    [LibSerialize._ReaderIndex.NIL]  = function(self) return nil end,\n\n    -- Numbers (ones requiring <=12 bits are handled separately)\n    [LibSerialize._ReaderIndex.NUM_16_POS] = function(self) return self:_ReadInt(2) end,\n    [LibSerialize._ReaderIndex.NUM_16_NEG] = function(self) return -self:_ReadInt(2) end,\n    [LibSerialize._ReaderIndex.NUM_24_POS] = function(self) return self:_ReadInt(3) end,\n    [LibSerialize._ReaderIndex.NUM_24_NEG] = function(self) return -self:_ReadInt(3) end,\n    [LibSerialize._ReaderIndex.NUM_32_POS] = function(self) return self:_ReadInt(4) end,\n    [LibSerialize._ReaderIndex.NUM_32_NEG] = function(self) return -self:_ReadInt(4) end,\n    [LibSerialize._ReaderIndex.NUM_64_POS] = function(self) return self:_ReadInt(7) end,\n    [LibSerialize._ReaderIndex.NUM_64_NEG] = function(self) return -self:_ReadInt(7) end,\n    [LibSerialize._ReaderIndex.NUM_FLOAT]  = function(self) return StringToFloat(self._readBytes(8)) end,\n    [LibSerialize._ReaderIndex.NUM_FLOATSTR_POS]  = function(self) return tonumber(self._readBytes(self:_ReadByte())) end,\n    [LibSerialize._ReaderIndex.NUM_FLOATSTR_NEG]  = function(self) return -tonumber(self._readBytes(self:_ReadByte())) end,\n\n    -- Booleans\n    [LibSerialize._ReaderIndex.BOOL_T] = function(self) return true end,\n    [LibSerialize._ReaderIndex.BOOL_F] = function(self) return false end,\n\n    -- Strings (encoded as size + buffer)\n    [LibSerialize._ReaderIndex.STR_8]  = function(self) return self:_ReadString(self:_ReadByte()) end,\n    [LibSerialize._ReaderIndex.STR_16] = function(self) return self:_ReadString(self:_ReadInt(2)) end,\n    [LibSerialize._ReaderIndex.STR_24] = function(self) return self:_ReadString(self:_ReadInt(3)) end,\n\n    -- Tables (encoded as count + key/value pairs)\n    [LibSerialize._ReaderIndex.TABLE_8]  = function(self) return self:_ReadTable(self:_ReadByte()) end,\n    [LibSerialize._ReaderIndex.TABLE_16] = function(self) return self:_ReadTable(self:_ReadInt(2)) end,\n    [LibSerialize._ReaderIndex.TABLE_24] = function(self) return self:_ReadTable(self:_ReadInt(3)) end,\n\n    -- Arrays (encoded as count + values)\n    [LibSerialize._ReaderIndex.ARRAY_8]  = function(self) return self:_ReadArray(self:_ReadByte()) end,\n    [LibSerialize._ReaderIndex.ARRAY_16] = function(self) return self:_ReadArray(self:_ReadInt(2)) end,\n    [LibSerialize._ReaderIndex.ARRAY_24] = function(self) return self:_ReadArray(self:_ReadInt(3)) end,\n\n    -- Mixed arrays/maps (encoded as arrayCount + mapCount + arrayValues + key/value pairs)\n    [LibSerialize._ReaderIndex.MIXED_8]  = function(self) return self:_ReadMixed(self:_ReadPair(self._ReadByte)) end,\n    [LibSerialize._ReaderIndex.MIXED_16] = function(self) return self:_ReadMixed(self:_ReadPair(self._ReadInt, 2)) end,\n    [LibSerialize._ReaderIndex.MIXED_24] = function(self) return self:_ReadMixed(self:_ReadPair(self._ReadInt, 3)) end,\n\n    -- Previously referenced strings\n    [LibSerialize._ReaderIndex.STRINGREF_8]  = function(self) return stringRefs[self:_ReadByte()] end,\n    [LibSerialize._ReaderIndex.STRINGREF_16] = function(self) return stringRefs[self:_ReadInt(2)] end,\n    [LibSerialize._ReaderIndex.STRINGREF_24] = function(self) return stringRefs[self:_ReadInt(3)] end,\n\n    -- Previously referenced tables\n    [LibSerialize._ReaderIndex.TABLEREF_8]  = function(self) return tableRefs[self:_ReadByte()] end,\n    [LibSerialize._ReaderIndex.TABLEREF_16] = function(self) return tableRefs[self:_ReadInt(2)] end,\n    [LibSerialize._ReaderIndex.TABLEREF_24] = function(self) return tableRefs[self:_ReadInt(3)] end,\n}\n\n\n--[[---------------------------------------------------------------------------\n    Write (serialization) support.\n--]]---------------------------------------------------------------------------\n\n-- Returns the appropriate function from the writer table for the object's type.\n-- If the object's type isn't supported and opts.errorOnUnserializableType is true,\n-- then an error will be raised.\nfunction LibSerialize:_GetWriteFn(obj, opts)\n    local typ = type(obj)\n    local writeFn = self._WriterTable[typ]\n    if not writeFn and opts.errorOnUnserializableType then\n        error((\"Unhandled type: %s\"):format(typ))\n    end\n\n    return writeFn\nend\n\n-- Returns true if all of the variadic arguments are serializable.\n-- Note that _GetWriteFn will raise a Lua error if it finds an\n-- unserializable type, unless this behavior is suppressed via options.\nfunction LibSerialize:_CanSerialize(opts, ...)\n    for i = 1, select(\"#\", ...) do\n        local obj = select(i, ...)\n        local writeFn = self:_GetWriteFn(obj, opts)\n        if not writeFn then\n            return false\n        end\n    end\n\n    return true\nend\n\n-- Returns true if the table's key/value pair should be serialized.\n-- Both filter functions (if present) must return true, and the\n-- key/value types must be serializable. Note that _CanSerialize\n-- will raise a Lua error if it finds an unserializable type, unless\n-- this behavior is suppressed via options.\nfunction LibSerialize:_ShouldSerialize(t, k, v, opts, filterFn)\n    return (not opts.filter or opts.filter(t, k, v)) and\n           (not filterFn or filterFn(t, k, v)) and\n           self:_CanSerialize(opts, k, v)\nend\n\n-- Note that _GetWriteFn will raise a Lua error if it finds an\n-- unserializable type, unless this behavior is suppressed via options.\nfunction LibSerialize:_WriteObject(obj, opts)\n    local writeFn = self:_GetWriteFn(obj, opts)\n    if not writeFn then\n        return false\n    end\n\n    writeFn(self, obj, opts)\n    return true\nend\n\nfunction LibSerialize:_WriteByte(value)\n    self:_WriteInt(value, 1)\nend\n\nfunction LibSerialize:_WriteInt(n, threshold)\n    self._writeString(IntToString(n, threshold))\nend\n\n-- Lookup tables to map the number of required bytes to the\n-- appropriate reader table index.\nlocal numberIndices = {\n    [2] = LibSerialize._ReaderIndex.NUM_16_POS,\n    [3] = LibSerialize._ReaderIndex.NUM_24_POS,\n    [4] = LibSerialize._ReaderIndex.NUM_32_POS,\n    [7] = LibSerialize._ReaderIndex.NUM_64_POS,\n}\nlocal stringIndices = {\n    [1] = LibSerialize._ReaderIndex.STR_8,\n    [2] = LibSerialize._ReaderIndex.STR_16,\n    [3] = LibSerialize._ReaderIndex.STR_24,\n}\nlocal tableIndices = {\n    [1] = LibSerialize._ReaderIndex.TABLE_8,\n    [2] = LibSerialize._ReaderIndex.TABLE_16,\n    [3] = LibSerialize._ReaderIndex.TABLE_24,\n}\nlocal arrayIndices = {\n    [1] = LibSerialize._ReaderIndex.ARRAY_8,\n    [2] = LibSerialize._ReaderIndex.ARRAY_16,\n    [3] = LibSerialize._ReaderIndex.ARRAY_24,\n}\nlocal mixedIndices = {\n    [1] = LibSerialize._ReaderIndex.MIXED_8,\n    [2] = LibSerialize._ReaderIndex.MIXED_16,\n    [3] = LibSerialize._ReaderIndex.MIXED_24,\n}\nlocal stringRefIndices = {\n    [1] = LibSerialize._ReaderIndex.STRINGREF_8,\n    [2] = LibSerialize._ReaderIndex.STRINGREF_16,\n    [3] = LibSerialize._ReaderIndex.STRINGREF_24,\n}\nlocal tableRefIndices = {\n    [1] = LibSerialize._ReaderIndex.TABLEREF_8,\n    [2] = LibSerialize._ReaderIndex.TABLEREF_16,\n    [3] = LibSerialize._ReaderIndex.TABLEREF_24,\n}\n\nLibSerialize._WriterTable = {\n    [\"nil\"] = function(self)\n        -- DebugPrint(\"Serializing nil\")\n        self:_WriteByte(readerIndexShift * self._ReaderIndex.NIL)\n    end,\n    [\"number\"] = function(self, num)\n        if IsFractional(num) then\n            -- DebugPrint(\"Serializing float:\", num)\n            -- Normally a float takes 8 bytes. See if it's cheaper to encode as a string.\n            -- If we encode as a string, though, we'll need a byte for its length.\n            local sign = 0\n            local numAbs = num\n            if num < 0 then\n                sign = readerIndexShift\n                numAbs = -num\n            end\n            local asString = tostring(numAbs)\n            if #asString < 7 and tonumber(asString) == numAbs then\n                self:_WriteByte(sign + readerIndexShift * self._ReaderIndex.NUM_FLOATSTR_POS)\n                self:_WriteByte(#asString, 1)\n                self._writeString(asString)\n            else\n                self:_WriteByte(readerIndexShift * self._ReaderIndex.NUM_FLOAT)\n                self._writeString(FloatToString(num))\n            end\n        elseif num > -4096 and num < 4096 then\n            -- The type byte supports two modes by which a number can be embedded:\n            -- A 1-byte mode for 7-bit numbers, and a 2-byte mode for 12-bit numbers.\n            if num >= 0 and num < 128 then\n                -- DebugPrint(\"Serializing embedded number (1byte):\", num)\n                self:_WriteByte(num * 2 + 1)\n            else\n                -- DebugPrint(\"Serializing embedded number (2bytes):\", num)\n                local sign = 0\n                if num < 0 then\n                    sign = 8\n                    num = -num\n                end\n                num = num * 16 + sign + 4\n                local upper, lower = floor(num / 256), num % 256\n                self:_WriteByte(lower)\n                self:_WriteByte(upper)\n            end\n        else\n            -- DebugPrint(\"Serializing number:\", num)\n            local sign = 0\n            if num < 0 then\n                num = -num\n                sign = readerIndexShift\n            end\n            local required = GetRequiredBytesNumber(num)\n            self:_WriteByte(sign + readerIndexShift * numberIndices[required])\n            self:_WriteInt(num, required)\n        end\n    end,\n    [\"boolean\"] = function(self, bool)\n        -- DebugPrint(\"Serializing bool:\", bool)\n        self:_WriteByte(readerIndexShift * (bool and self._ReaderIndex.BOOL_T or self._ReaderIndex.BOOL_F))\n    end,\n    [\"string\"] = function(self, str)\n        local ref = stringRefs[str]\n        if ref then\n            -- DebugPrint(\"Serializing string ref:\", str)\n            local required = GetRequiredBytes(ref)\n            self:_WriteByte(readerIndexShift * stringRefIndices[required])\n            self:_WriteInt(stringRefs[str], required)\n        else\n            local len = #str\n            if len < 16 then\n                -- Short lengths can be embedded directly into the type byte.\n                -- DebugPrint(\"Serializing string, embedded count:\", str, len)\n                self:_WriteByte(embeddedCountShift * len + embeddedIndexShift * self._EmbeddedIndex.STRING + 2)\n            else\n                -- DebugPrint(\"Serializing string:\", str, len)\n                local required = GetRequiredBytes(len)\n                self:_WriteByte(readerIndexShift * stringIndices[required])\n                self:_WriteInt(len, required)\n            end\n\n            self._writeString(str)\n            if len > 2 then\n                self:_AddReference(stringRefs, str)\n            end\n        end\n    end,\n    [\"table\"] = function(self, tab, opts)\n        local ref = tableRefs[tab]\n        if ref then\n            -- DebugPrint(\"Serializing table ref:\", tab)\n            local required = GetRequiredBytes(ref)\n            self:_WriteByte(readerIndexShift * tableRefIndices[required])\n            self:_WriteInt(tableRefs[tab], required)\n        else\n            -- Add a reference before trying to serialize the table's contents,\n            -- so that if the table recursively references itself, we can still\n            -- properly serialize it.\n            self:_AddReference(tableRefs, tab)\n\n            local filter\n            local mt = getmetatable(tab)\n            if mt and type(mt) == \"table\" and mt.__LibSerialize then\n                filter = mt.__LibSerialize.filter\n            end\n\n            -- First determine the \"proper\" length of the array portion of the table,\n            -- which terminates at its first nil value. Note that some values in this\n            -- range may not be serializable, which is fine - we'll handle them later.\n            -- It's better to maximize the number of values that can be serialized\n            -- without needing to also serialize their keys.\n            local arrayCount, serializableArrayCount = 0, 0\n            local entireArraySerializable = true\n            local totalArraySerializable = 0\n            for i, v in ipairs(tab) do\n                arrayCount = i\n                if self:_ShouldSerialize(tab, i, v, opts, filter) then\n                    totalArraySerializable = totalArraySerializable + 1\n                    if entireArraySerializable then\n                        serializableArrayCount = i\n                    end\n                else\n                    entireArraySerializable = false\n                end\n            end\n\n            -- Consider the array portion as a series of zero or more serializable\n            -- entries followed by zero or more entries that may or may not be\n            -- serializable. For the latter portion, we can either write them in\n            -- the array portion, padding the unserializable entries with nils,\n            -- or just write them as key/value pairs in the map portion. We'll choose\n            -- the former if there are more serializable entries in this portion than\n            -- unserializable, or the latter if more are unserializable.\n            if arrayCount - totalArraySerializable > totalArraySerializable - serializableArrayCount then\n                arrayCount = serializableArrayCount\n                entireArraySerializable = true\n            end\n\n            -- Next determine the count of all entries in the table whose keys are not\n            -- included in the array portion, only counting keys that are serializable.\n            local mapCount = 0\n            local entireMapSerializable = true\n            for k, v in pairs(tab) do\n                local isArrayKey = type(k) == \"number\" and k >= 1 and k <= arrayCount and not IsFractional(k)\n                if not isArrayKey then\n                    if self:_ShouldSerialize(tab, k, v, opts, filter) then\n                        mapCount = mapCount + 1\n                    else\n                        entireMapSerializable = false\n                    end\n                end\n            end\n\n            if mapCount == 0 then\n                -- The table is an array. We can avoid writing the keys.\n                if arrayCount < 16 then\n                    -- Short counts can be embedded directly into the type byte.\n                    -- DebugPrint(\"Serializing array, embedded count:\", arrayCount)\n                    self:_WriteByte(embeddedCountShift * arrayCount + embeddedIndexShift * self._EmbeddedIndex.ARRAY + 2)\n                else\n                    -- DebugPrint(\"Serializing array:\", arrayCount)\n                    local required = GetRequiredBytes(arrayCount)\n                    self:_WriteByte(readerIndexShift * arrayIndices[required])\n                    self:_WriteInt(arrayCount, required)\n                end\n\n                for i = 1, arrayCount do\n                    local v = tab[i]\n                    if entireArraySerializable or self:_ShouldSerialize(tab, i, v, opts, filter) then\n                        self:_WriteObject(v, opts)\n                    else\n                        -- Since the keys are being omitted, write a `nil` entry\n                        -- for any values that shouldn't be serialized.\n                        self:_WriteObject(nil, opts)\n                    end\n                end\n            elseif arrayCount ~= 0 then\n                -- The table has both array and dictionary keys. We can still save space\n                -- by writing the array values first without keys.\n\n                if mapCount < 5 and arrayCount < 5 then\n                    -- Short counts can be embedded directly into the type byte.\n                    -- They have to be really short though, since we have two counts.\n                    -- Since neither can be zero (this is a mixed table),\n                    -- we can get away with not being able to represent 0.\n                    -- DebugPrint(\"Serializing mixed array-table, embedded counts:\", arrayCount, mapCount)\n                    local combined = (mapCount - 1) * 4 + arrayCount - 1\n                    self:_WriteByte(embeddedCountShift * combined + embeddedIndexShift * self._EmbeddedIndex.MIXED + 2)\n                else\n                    -- Use the max required bytes for the two counts.\n                    -- DebugPrint(\"Serializing mixed array-table:\", arrayCount, mapCount)\n                    local required = max(GetRequiredBytes(mapCount), GetRequiredBytes(arrayCount))\n                    self:_WriteByte(readerIndexShift * mixedIndices[required])\n                    self:_WriteInt(arrayCount, required)\n                    self:_WriteInt(mapCount, required)\n                end\n\n                for i = 1, arrayCount do\n                    local v = tab[i]\n                    if entireArraySerializable or self:_ShouldSerialize(tab, i, v, opts, filter) then\n                        self:_WriteObject(v, opts)\n                    else\n                        -- Since the keys are being omitted, write a `nil` entry\n                        -- for any values that shouldn't be serialized.\n                        self:_WriteObject(nil, opts)\n                    end\n                end\n\n                local mapCountWritten = 0\n                for k, v in pairs(tab) do\n                    -- Exclude keys that have already been written via the previous loop.\n                    local isArrayKey = type(k) == \"number\" and k >= 1 and k <= arrayCount and not IsFractional(k)\n                    if not isArrayKey and (entireMapSerializable or self:_ShouldSerialize(tab, k, v, opts, filter)) then\n                        self:_WriteObject(k, opts)\n                        self:_WriteObject(v, opts)\n                        mapCountWritten = mapCountWritten + 1\n                    end\n                end\n                assert(mapCount == mapCountWritten)\n            else\n                -- The table has only dictionary keys, so we'll write them all.\n                if mapCount < 16 then\n                    -- Short counts can be embedded directly into the type byte.\n                    -- DebugPrint(\"Serializing table, embedded count:\", mapCount)\n                    self:_WriteByte(embeddedCountShift * mapCount + embeddedIndexShift * self._EmbeddedIndex.TABLE + 2)\n                else\n                    -- DebugPrint(\"Serializing table:\", mapCount)\n                    local required = GetRequiredBytes(mapCount)\n                    self:_WriteByte(readerIndexShift * tableIndices[required])\n                    self:_WriteInt(mapCount, required)\n                end\n\n                for k, v in pairs(tab) do\n                    if entireMapSerializable or self:_ShouldSerialize(tab, k, v, opts, filter) then\n                        self:_WriteObject(k, opts)\n                        self:_WriteObject(v, opts)\n                    end\n                end\n            end\n        end\n    end,\n}\n\n\n--[[---------------------------------------------------------------------------\n    API support.\n--]]---------------------------------------------------------------------------\n\nfunction LibSerialize:IsSerializableType(...)\n    return self:_CanSerialize(canSerializeFnOptions, ...)\nend\n\nfunction LibSerialize:SerializeEx(opts, ...)\n    self:_ClearReferences()\n    local WriteString, FlushWriter = CreateWriter()\n\n    self._writeString = WriteString\n    self:_WriteByte(MINOR)\n\n    -- Create a combined options table, starting with the defaults\n    -- and then overwriting any user-supplied keys.\n    local combinedOpts = {}\n    for k, v in pairs(defaultOptions) do\n        combinedOpts[k] = v\n    end\n    for k, v in pairs(opts) do\n        combinedOpts[k] = v\n    end\n\n    for i = 1, select(\"#\", ...) do\n        local input = select(i, ...)\n        if not self:_WriteObject(input, combinedOpts) then\n            -- An unserializable object was passed as an argument.\n            -- Write nil into its slot so that we deserialize a\n            -- consistent number of objects from the resulting string.\n            self:_WriteObject(nil, combinedOpts)\n        end\n    end\n\n    self:_ClearReferences()\n    return FlushWriter()\nend\n\nfunction LibSerialize:Serialize(...)\n    return self:SerializeEx(defaultOptions, ...)\nend\n\nfunction LibSerialize:DeserializeValue(input)\n    self:_ClearReferences()\n    local ReadBytes, ReaderBytesLeft = CreateReader(input)\n\n    self._readBytes = ReadBytes\n\n    -- Since there's only one compression version currently,\n    -- no extra work needs to be done to decode the data.\n    local version = self:_ReadByte()\n    assert(version == MINOR)\n\n    -- Since the objects we read may be nil, we need to explicitly\n    -- track the number of results and assign by index so that we\n    -- can call unpack() successfully at the end.\n    local output = {}\n    local outputSize = 0\n\n    while ReaderBytesLeft() > 0 do\n        outputSize = outputSize + 1\n        output[outputSize] = self:_ReadObject()\n    end\n\n    self:_ClearReferences()\n\n    if ReaderBytesLeft() < 0 then\n        error(\"Reader went past end of input\")\n    end\n\n    return unpack(output, 1, outputSize)\nend\n\nfunction LibSerialize:_PostDeserialize(...)\n    self:_ClearReferences()\n    return ...\nend\n\nfunction LibSerialize:Deserialize(input)\n    return self:_PostDeserialize(pcall(self.DeserializeValue, self, input))\nend\n\nreturn LibSerialize\n"
  },
  {
    "path": "DBM-Core/Libs/LibSharedMedia-3.0/LibSharedMedia-3.0.lua",
    "content": "--[[\nName: LibSharedMedia-3.0\nRevision: $Revision: 62 $\nAuthor: Elkano (elkano@gmx.de)\nInspired By: SurfaceLib by Haste/Otravi (troeks@gmail.com)\nWebsite: http://www.wowace.com/projects/libsharedmedia-3-0/\nDescription: Shared handling of media data (fonts, sounds, textures, ...) between addons.\nDependencies: LibStub, CallbackHandler-1.0\nLicense: LGPL v2.1\n]]\n\nlocal MAJOR, MINOR = \"LibSharedMedia-3.0\", 3030001 -- 3.3.5 / increase manually on changes\nlocal lib = LibStub:NewLibrary(MAJOR, MINOR)\n\nif not lib then return end\n\nlocal _G = getfenv(0)\n\nlocal pairs\t\t= _G.pairs\nlocal type\t\t= _G.type\n\nlocal band\t\t\t= _G.bit.band\nlocal table_sort\t= _G.table.sort\n\nlocal locale = GetLocale()\nlocal locale_is_western\nlocal LOCALE_MASK = 0\nlib.LOCALE_BIT_koKR\t\t= 1\nlib.LOCALE_BIT_ruRU\t\t= 2\nlib.LOCALE_BIT_zhCN\t\t= 4\nlib.LOCALE_BIT_zhTW\t\t= 8\nlib.LOCALE_BIT_western\t= 128\n\nlocal CallbackHandler = LibStub:GetLibrary(\"CallbackHandler-1.0\")\n\nlib.callbacks\t\t= lib.callbacks\t\t\tor CallbackHandler:New(lib)\n\nlib.DefaultMedia\t= lib.DefaultMedia\t\tor {}\nlib.MediaList\t\t= lib.MediaList\t\t\tor {}\nlib.MediaTable\t\t= lib.MediaTable\t\tor {}\nlib.MediaType\t\t= lib.MediaType\t\t\tor {}\nlib.OverrideMedia\t= lib.OverrideMedia\t\tor {}\n\nlocal defaultMedia = lib.DefaultMedia\nlocal mediaList = lib.MediaList\nlocal mediaTable = lib.MediaTable\nlocal overrideMedia = lib.OverrideMedia\n\n\n-- create mediatype constants\nlib.MediaType.BACKGROUND\t= \"background\"\t\t\t-- background textures\nlib.MediaType.BORDER\t\t= \"border\"\t\t\t\t-- border textures\nlib.MediaType.FONT\t\t\t= \"font\"\t\t\t\t-- fonts\nlib.MediaType.STATUSBAR\t\t= \"statusbar\"\t\t\t-- statusbar textures\nlib.MediaType.SOUND\t\t\t= \"sound\"\t\t\t\t-- sound files\n\n-- populate lib with default Blizzard data\n-- BACKGROUND\nif not lib.MediaTable.background then lib.MediaTable.background = {} end\nlib.MediaTable.background[\"None\"]\t\t\t\t\t\t\t\t\t= [[]]\nlib.MediaTable.background[\"Blizzard Dialog Background\"]\t\t\t\t= [[Interface\\DialogFrame\\UI-DialogBox-Background]]\nlib.MediaTable.background[\"Blizzard Dialog Background Dark\"]\t\t= [[Interface\\DialogFrame\\UI-DialogBox-Background-Dark]]\nlib.MediaTable.background[\"Blizzard Dialog Background Gold\"]\t\t= [[Interface\\DialogFrame\\UI-DialogBox-Gold-Background]]\nlib.MediaTable.background[\"Blizzard Low Health\"]\t\t\t\t\t= [[Interface\\FullScreenTextures\\LowHealth]]\nlib.MediaTable.background[\"Blizzard Marble\"]\t\t\t\t\t\t= [[Interface\\FrameGeneral\\UI-Background-Marble]]\nlib.MediaTable.background[\"Blizzard Out of Control\"]\t\t\t\t= [[Interface\\FullScreenTextures\\OutOfControl]]\nlib.MediaTable.background[\"Blizzard Parchment\"]\t\t\t\t\t\t= [[Interface\\AchievementFrame\\UI-Achievement-Parchment-Horizontal]]\nlib.MediaTable.background[\"Blizzard Parchment 2\"]\t\t\t\t\t= [[Interface\\AchievementFrame\\UI-GuildAchievement-Parchment-Horizontal]]\nlib.MediaTable.background[\"Blizzard Rock\"]\t\t\t\t\t\t\t= [[Interface\\FrameGeneral\\UI-Background-Rock]]\nlib.MediaTable.background[\"Blizzard Tabard Background\"]\t\t\t\t= [[Interface\\TabardFrame\\TabardFrameBackground]]\nlib.MediaTable.background[\"Blizzard Tooltip\"]\t\t\t\t\t\t= [[Interface\\Tooltips\\UI-Tooltip-Background]]\nlib.MediaTable.background[\"Solid\"]\t\t\t\t\t\t\t\t\t= [[Interface\\Buttons\\WHITE8X8]]\nlib.DefaultMedia.background = \"None\"\n\n-- BORDER\nif not lib.MediaTable.border then lib.MediaTable.border = {} end\nlib.MediaTable.border[\"None\"]\t\t\t\t\t\t\t\t= [[]]\nlib.MediaTable.border[\"Blizzard Achievement Wood\"]\t\t\t= [[Interface\\AchievementFrame\\UI-Achievement-WoodBorder]]\nlib.MediaTable.border[\"Blizzard Chat Bubble\"]\t\t\t\t= [[Interface\\Tooltips\\ChatBubble-Backdrop]]\nlib.MediaTable.border[\"Blizzard Dialog\"]\t\t\t\t\t= [[Interface\\DialogFrame\\UI-DialogBox-Border]]\nlib.MediaTable.border[\"Blizzard Dialog Gold\"]\t\t\t\t= [[Interface\\DialogFrame\\UI-DialogBox-Gold-Border]]\nlib.MediaTable.border[\"Blizzard Party\"]\t\t\t\t\t\t= [[Interface\\CHARACTERFRAME\\UI-Party-Border]]\nlib.MediaTable.border[\"Blizzard Tooltip\"]\t\t\t\t\t= [[Interface\\Tooltips\\UI-Tooltip-Border]]\nlib.DefaultMedia.border = \"None\"\n\n-- FONT\nif not lib.MediaTable.font then lib.MediaTable.font = {} end\nlocal SML_MT_font = lib.MediaTable.font\nif locale == \"koKR\" then\n\tLOCALE_MASK = lib.LOCALE_BIT_koKR\n--\n\tSML_MT_font[\"굵은 글꼴\"]\t\t= [[Fonts\\2002B.TTF]]\n\tSML_MT_font[\"기본 글꼴\"]\t\t= [[Fonts\\2002.TTF]]\n\tSML_MT_font[\"데미지 글꼴\"]\t\t= [[Fonts\\K_Damage.TTF]]\n\tSML_MT_font[\"퀘스트 글꼴\"]\t\t= [[Fonts\\K_Pagetext.TTF]]\n--\n\tlib.DefaultMedia[\"font\"] = \"기본 글꼴\" -- someone from koKR please adjust if needed\n--\nelseif locale == \"zhCN\" then\n\tLOCALE_MASK = lib.LOCALE_BIT_zhCN\n--\n\tSML_MT_font[\"伤害数字\"]\t\t= [[Fonts\\ZYKai_C.ttf]]\n\tSML_MT_font[\"默认\"]\t\t\t= [[Fonts\\ZYKai_T.ttf]]\n\tSML_MT_font[\"聊天\"]\t\t\t= [[Fonts\\ZYHei.ttf]]\n--\n\tlib.DefaultMedia[\"font\"] = \"默认\" -- someone from zhCN please adjust if needed\n--\nelseif locale == \"zhTW\" then\n\tLOCALE_MASK = lib.LOCALE_BIT_zhTW\n--\n\tSML_MT_font[\"提示訊息\"]\t\t= [[Fonts\\bHEI00M.ttf]]\n\tSML_MT_font[\"聊天\"]\t\t\t= [[Fonts\\bHEI01B.ttf]]\n\tSML_MT_font[\"傷害數字\"]\t\t= [[Fonts\\bKAI00M.ttf]]\n\tSML_MT_font[\"預設\"]\t\t\t= [[Fonts\\bLEI00D.ttf]]\n--\n\tlib.DefaultMedia[\"font\"] = \"預設\" -- someone from zhTW please adjust if needed\n\nelseif locale == \"ruRU\" then\n\tLOCALE_MASK = lib.LOCALE_BIT_ruRU\n--\n\tSML_MT_font[\"Arial Narrow\"]\t\t\t= [[Fonts\\ARIALN.TTF]]\n\tSML_MT_font[\"Friz Quadrata TT\"]\t\t= [[Fonts\\FRIZQT__.TTF]]\n\tSML_MT_font[\"Morpheus\"]\t\t\t\t= [[Fonts\\MORPHEUS.TTF]]\n\tSML_MT_font[\"Nimrod MT\"]\t\t\t= [[Fonts\\NIM_____.ttf]]\n\tSML_MT_font[\"Skurri\"]\t\t\t\t= [[Fonts\\SKURRI.TTF]]\n--\n\tlib.DefaultMedia.font = \"Arial Narrow\"\n--\nelse\n\tLOCALE_MASK = lib.LOCALE_BIT_western\n\tlocale_is_western = true\n--\n\tSML_MT_font[\"Arial Narrow\"]\t\t\t\t\t\t= [[Fonts\\ARIALN.TTF]]\n\tSML_MT_font[\"Friz Quadrata TT\"]\t\t\t\t\t= [[Fonts\\FRIZQT__.TTF]]\n\tSML_MT_font[\"Morpheus\"]\t\t\t\t\t\t\t= [[Fonts\\MORPHEUS.TTF]]\n\tSML_MT_font[\"Skurri\"]\t\t\t\t\t\t\t= [[Fonts\\SKURRI.TTF]]\n--\n\tlib.DefaultMedia.font = \"Friz Quadrata TT\"\n--\nend\n\n-- STATUSBAR\nif not lib.MediaTable.statusbar then lib.MediaTable.statusbar = {} end\nlib.MediaTable.statusbar[\"Blizzard\"]\t\t\t\t\t\t= [[Interface\\TargetingFrame\\UI-StatusBar]]\nlib.MediaTable.statusbar[\"Blizzard Character Skills Bar\"]\t= [[Interface\\PaperDollInfoFrame\\UI-Character-Skills-Bar]]\nlib.DefaultMedia.statusbar = \"Blizzard\"\n\n-- SOUND\nif not lib.MediaTable.sound then lib.MediaTable.sound = {} end\nlib.MediaTable.sound[\"None\"]\t\t\t\t\t\t\t\t= [[Interface\\Quiet.ogg]] -- Relies on the fact that PlaySound[File] doesn't error on these values.\nlib.DefaultMedia.sound = \"None\"\n\nlocal function rebuildMediaList(mediatype)\n\tlocal mtable = mediaTable[mediatype]\n\tif not mtable then return end\n\tif not mediaList[mediatype] then mediaList[mediatype] = {} end\n\tlocal mlist = mediaList[mediatype]\n\t-- list can only get larger, so simply overwrite it\n\tlocal i = 0\n\tfor k in pairs(mtable) do\n\t\ti = i + 1\n\t\tmlist[i] = k\n\tend\n\ttable_sort(mlist)\nend\n\nfunction lib:Register(mediatype, key, data, langmask)\n\tif type(mediatype) ~= \"string\" then\n\t\terror(MAJOR..\":Register(mediatype, key, data, langmask) - mediatype must be string, got \"..type(mediatype))\n\tend\n\tif type(key) ~= \"string\" then\n\t\terror(MAJOR..\":Register(mediatype, key, data, langmask) - key must be string, got \"..type(key))\n\tend\n\tmediatype = mediatype:lower()\n\tif mediatype == lib.MediaType.FONT and ((langmask and band(langmask, LOCALE_MASK) == 0) or not (langmask or locale_is_western)) then\n\t\t-- ignore fonts that aren't flagged as supporting local glyphs on non-western clients\n\t\treturn false\n\tend\n\tif mediatype == lib.MediaType.SOUND and type(data) == \"string\" then\n\t\tlocal path = data:lower()\n\t\tif not path:find(\".ogg\", nil, true) and not path:find(\".mp3\", nil, true) and not path:find(\".wav\", nil, true) then\n\t\t\t-- Only wav, ogg and mp3 are valid sounds.\n\t\t\treturn false\n\t\tend\n\tend\n\tif not mediaTable[mediatype] then mediaTable[mediatype] = {} end\n\tlocal mtable = mediaTable[mediatype]\n\tif mtable[key] then return false end\n\n\tmtable[key] = data\n\trebuildMediaList(mediatype)\n\tself.callbacks:Fire(\"LibSharedMedia_Registered\", mediatype, key)\n\treturn true\nend\n\nfunction lib:Fetch(mediatype, key, noDefault)\n\tlocal mtt = mediaTable[mediatype]\n\tlocal overridekey = overrideMedia[mediatype]\n\tlocal result = mtt and ((overridekey and mtt[overridekey] or mtt[key]) or (not noDefault and defaultMedia[mediatype] and mtt[defaultMedia[mediatype]])) or nil\n\treturn result ~= \"\" and result or nil\nend\n\nfunction lib:IsValid(mediatype, key)\n\treturn mediaTable[mediatype] and (not key or mediaTable[mediatype][key]) and true or false\nend\n\nfunction lib:HashTable(mediatype)\n\treturn mediaTable[mediatype]\nend\n\nfunction lib:List(mediatype)\n\tif not mediaTable[mediatype] then\n\t\treturn nil\n\tend\n\tif not mediaList[mediatype] then\n\t\trebuildMediaList(mediatype)\n\tend\n\treturn mediaList[mediatype]\nend\n\nfunction lib:GetGlobal(mediatype)\n\treturn overrideMedia[mediatype]\nend\n\nfunction lib:SetGlobal(mediatype, key)\n\tif not mediaTable[mediatype] then\n\t\treturn false\n\tend\n\toverrideMedia[mediatype] = (key and mediaTable[mediatype][key]) and key or nil\n\tself.callbacks:Fire(\"LibSharedMedia_SetGlobal\", mediatype, overrideMedia[mediatype])\n\treturn true\nend\n\nfunction lib:GetDefault(mediatype)\n\treturn defaultMedia[mediatype]\nend\n\nfunction lib:SetDefault(mediatype, key)\n\tif mediaTable[mediatype] and mediaTable[mediatype][key] and not defaultMedia[mediatype] then\n\t\tdefaultMedia[mediatype] = key\n\t\treturn true\n\telse\n\t\treturn false\n\tend\nend\n"
  },
  {
    "path": "DBM-Core/Libs/LibTalentQuery-1.0/LibTalentQuery-1.0.lua",
    "content": "--[[\nName: LibTalentQuery-1.0\nRevision: $Rev: 84 $\nAuthor: Rich Martel (richmartel@gmail.com)\nDocumentation: http://wowace.com/wiki/LibTalentQuery-1.0\nSVN: svn://svn.wowace.com/wow/libtalentquery-1-0/mainline/trunk\nDescription: Library to help with querying unit talents\nDependancies: LibStub, CallbackHandler-1.0\nLicense: LGPL v2.1\n\nExample Usage:\n\tlocal TalentQuery = LibStub:GetLibrary(\"LibTalentQuery-1.0\")\n\tTalentQuery.RegisterCallback(self, \"TalentQuery_Ready\")\n\n\tlocal raidTalents = {}\n\t...\n\tTalentQuery:Query(unit)\n\t...\n\tfunction MyAddon:TalentQuery_Ready(e, name, realm, unitid)\n\t\tlocal isnotplayer = not UnitIsUnit(unitid, \"player\")\n\t\tlocal spec = {}\n\t\tfor tab = 1, GetNumTalentTabs(isnotplayer) do\n\t\t\tlocal treename, _, pointsspent = GetTalentTabInfo(tab, isnotplayer)\n\t\t\ttinsert(spec, pointsspent)\n\t\tend\n\t\traidTalents[UnitGUID(unitid)] = spec\n\tend\n]]\n\nlocal MAJOR, MINOR = \"LibTalentQuery-1.0\", 90000 + tonumber((\"$Rev: 84 $\"):match(\"(%d+)\"))\n\nlocal lib = LibStub:NewLibrary(MAJOR, MINOR)\nif not lib then return end\n\nlocal INSPECTDELAY = 1\nlocal INSPECTTIMEOUT = 5\nif not lib.events then\n\tlib.events = LibStub(\"CallbackHandler-1.0\"):New(lib)\nend\n\nlocal validateTrees\nlocal enteredWorld = IsLoggedIn()\nlocal frame = lib.frame\nif not frame then\n\tframe = CreateFrame(\"Frame\", MAJOR .. \"_Frame\")\n\tlib.frame = frame\nend\nframe:UnregisterAllEvents()\nframe:RegisterEvent(\"INSPECT_TALENT_READY\")\nframe:RegisterEvent(\"PLAYER_ENTERING_WORLD\")\nframe:RegisterEvent(\"PLAYER_LEAVING_WORLD\")\nframe:RegisterEvent(\"PLAYER_LOGIN\")\nframe:SetScript(\"OnEvent\", function(this, event, ...)\n\treturn lib[event](lib, ...)\nend)\n\ndo\n\tlocal lastUpdateTime = 0\n\tframe:SetScript(\"OnUpdate\", function(this, elapsed)\n\t\tlastUpdateTime = lastUpdateTime + elapsed\n\t\tif lastUpdateTime > INSPECTDELAY then\n\t\t\tlib:CheckInspectQueue()\n\t\t\tlastUpdateTime = 0\n\t\tend\n\tend)\n\tframe:Hide()\nend\n\nlocal inspectQueue = lib.inspectQueue or {}\nlib.inspectQueue = inspectQueue\nlocal garbageQueue = lib.garbageQueue or {}\t-- Added a second queue to things. Inspects that initially fail are now\nlib.garbageQueue = garbageQueue\t\t\t\t-- thrown into second queue will will be processed once main queue is empty\n\nif next(inspectQueue) then\n\tframe:Show()\nend\n\nlocal UnitIsPlayer = _G.UnitIsPlayer\nlocal UnitName = _G.UnitName\nlocal UnitExists = _G.UnitExists\nlocal UnitGUID = _G.UnitGUID\nlocal GetNumRaidMembers = _G.GetNumRaidMembers\nlocal GetNumPartyMembers = _G.GetNumPartyMembers\nlocal UnitIsVisible = _G.UnitIsVisible\nlocal UnitIsConnected = _G.UnitIsConnected\nlocal UnitCanAttack = _G.UnitCanAttack\nlocal CanInspect = _G.CanInspect\n\nlocal function UnitFullName(unit)\n\tlocal name, realm = UnitName(unit)\n\tlocal namerealm = realm and realm ~= \"\" and name .. \"-\" .. realm or name\n\treturn namerealm\nend\n\n-- GuidToUnitID\nlocal function GuidToUnitID(guid)\n\tlocal prefix, min, max = \"raid\", 1, GetNumRaidMembers()\n\tif max == 0 then\n\t\tprefix, min, max = \"party\", 0, GetNumPartyMembers()\n\tend\n\n\t-- Prioritise getting direct units first because other players targets\n\t-- can change between notify and event which can bugger things up\n\tfor i = min, max do\n\t\tlocal unit = i == 0 and \"player\" or prefix .. i\n\t\tif (UnitGUID(unit) == guid) then\n\t\t\treturn unit\n\t\tend\n\tend\n\n\t-- This properly detects target units\n\tif (UnitGUID(\"target\") == guid) then\n        return \"target\"\n\telseif (UnitGUID(\"focus\") == guid) then\n\t\treturn \"focus\"\n\telseif (UnitGUID(\"mouseover\") == guid) then\n\t\treturn \"mouseover\"\n    end\n\n\tfor i = min, max + 3 do\n\t\tlocal unit\n\t\tif i == 0 then\n\t\t\tunit = \"player\"\n\t\telseif i == max + 1 then\n\t\t\tunit = \"target\"\n\t\telseif i == max + 2 then\n\t\t\tunit = \"focus\"\n\t\telseif i == max + 3 then\n\t\t\tunit = \"mouseover\"\n\t\telse\n\t\t\tunit = prefix .. i\n\t\tend\n\t\tif (UnitGUID(unit .. \"target\") == guid) then\n\t\t\treturn unit .. \"target\"\n\t\telseif (i <= max and UnitGUID(unit..\"pettarget\") == guid) then\n\t\t\treturn unit .. \"pettarget\"\n\t\tend\n\tend\n\treturn nil\nend\n\n-- Query\nfunction lib:Query(unit)\n\tif (UnitLevel(unit) < 10 or UnitName(unit) == UNKNOWN) then\n\t\treturn\n\tend\n\n\tself.lastQueuedInspectReceived = nil\n\tif UnitIsUnit(unit, \"player\") then\n\t\tself.events:Fire(\"TalentQuery_Ready\", UnitName(\"player\"), nil, \"player\")\n\telse\n\t\tif type(unit) ~= \"string\" then\n\t\t\terror((\"Bad argument #2 to 'Query'. Expected %q, received %q (%s)\"):format(\"string\", type(unit), tostring(unit)), 2)\n\t\telseif not UnitExists(unit) or not UnitIsPlayer(unit) then\n\t\t\terror((\"Bad argument #2 to 'Query'. %q is not a valid player unit\"):format(tostring(unit)), 2)\n\t\telseif not UnitExists(unit) or not UnitIsPlayer(unit) then\n\t\t\terror((\"Bad argument #2 to 'Query'. %q does not require a server query before reading talents\"):format(\"player\"), 2)\n\t\telse\n\t\t\tlocal name = UnitFullName(unit)\n\t\t\tif (not inspectQueue[name]) then\n\t\t\t\tinspectQueue[name] = UnitGUID(unit)\n\t\t\t\tgarbageQueue[name] = nil\n\t\t\tend\n\t\t\tframe:Show()\n\t\tend\n\tend\nend\n\n-- CheckInspectQueue\n-- Originally, it would wait until no pending NotifyInspect() were expected, and then do it's own.\n-- It was also only bother looking at ready results if it had triggered the Notify for that occasion.\n-- For the changes I've done, no assumption is made about which mod is performing NotifyInspect().\n-- We note the name, unit, time of any inspects done whether from this queue or any other source,\n-- we remove from our queue any we were expecting, and use a seperate event in case extra talent\n-- info is any time wanted (opportunistic refreshes etc) - Zeksie, 20th May 2009\nfunction lib:CheckInspectQueue()\n\tif (_G.InspectFrame and _G.InspectFrame:IsShown()) then\n\t\treturn\n\tend\n\n\tif (not self.lastInspectTime or self.lastInspectTime < GetTime() - INSPECTTIMEOUT) then\n\t\tself.lastInspectPending = 0\n\tend\n\n\tif (self.lastInspectPending > 0 or not enteredWorld) then\n\t\treturn\n\tend\n\n\tif (self.lastQueuedInspectReceived and self.lastQueuedInspectReceived < GetTime() - 60) then\n\t\t-- No queued results received for a minute, so purge the queue as invalid and move on with our lives\n\t\tself.lastQueuedInspectReceived = nil\n\t\tinspectQueue = {}\n\t\tlib.inspectQueue = inspectQueue\n\t\tgarbageQueue = {}\n\t\tlib.garbageQueue = garbageQueue\n\t\tframe:Hide()\n\t\treturn\n\tend\n\n\tfor name,guid in pairs(inspectQueue) do\n\t\tlocal unit = GuidToUnitID(guid)\n\t\tif (not unit) then\n\t\t\tinspectQueue[name] = nil\n\t\telse\n\t\t\tif (UnitIsVisible(unit) and UnitIsConnected(unit) and not UnitCanAttack(\"player\", unit) and not UnitCanAttack(unit, \"player\") and CanInspect(unit) and UnitClass(unit)) then\n\t\t\t\tNotifyInspect(unit)\n\t\t\t\tbreak\n\t\t\telse\n\t\t\t\tgarbageQueue[name] = guid\t-- Not available, throw into secondary queue and continue\n\t\t\t\tinspectQueue[name] = nil\n\t\t\tend\n\t\tend\n\tend\n\n\tif (not next(inspectQueue)) then\n\t\tif (next(garbageQueue)) then\n\t\t\t-- Retry initially failed inspects\n\t\t\tlib.inspectQueue = garbageQueue\n\t\t\tinspectQueue = lib.inspectQueue\n\t\t\tlib.garbageQueue = {}\n\t\t\tgarbageQueue = lib.garbageQueue\n\t\telse\n\t\t\tframe:Hide()\n\t\tend\n\tend\nend\n\n-- NotifyInspect\nif not lib.NotifyInspect then -- don't hook twice\n\thooksecurefunc(\"NotifyInspect\", function(...) return lib:NotifyInspect(...) end)\nend\nfunction lib:NotifyInspect(unit)\n\tif (not (UnitExists(unit) and UnitIsVisible(unit) and UnitIsConnected(unit) and CheckInteractDistance(unit, 4))) then\n\t\treturn\n\tend\n\tself.lastInspectUnit = unit\n\tself.lastInspectGUID = UnitGUID(unit)\n\tself.lastInspectTime = GetTime()\n\tself.lastInspectName = UnitFullName(unit)\n\tself.lastInspectPending = self.lastInspectPending + 1\n\tlocal isnotplayer = not UnitIsUnit(\"player\", unit)\n\tself.lastInspectTree = GetTalentTabInfo(1, isnotplayer)\t\t-- Talent tree names are available immediately\nend\n\n-- Reset\nfunction lib:Reset()\n\tself.lastInspectPending = 0\n\tself.lastInspectUnit = nil\n\tself.lastInspectTime = nil\n\tself.lastInspectName = nil\n\tself.lastInspectGUID = nil\n\tself.lastInspectTree = nil\nend\n\n-- INSPECT_TALENT_READY\nfunction lib:INSPECT_TALENT_READY()\n\tself.lastInspectPending = self.lastInspectPending - 1\n\n\t-- Results are valid only when we have received as many events as we have posted notifies\n\tif (self.lastInspectName and self.lastInspectPending == 0) then\n\t\t-- Check unit ID is still pointing to same actual unit\n\t\tif (UnitGUID(self.lastInspectUnit) == self.lastInspectGUID) then\n\t\t\tlocal guid = inspectQueue[self.lastInspectName]\n\t\t\tinspectQueue[self.lastInspectName] = nil\n\n\t\t\tlocal name, realm = strsplit(\"-\", self.lastInspectName)\n\n\t\t\tself.lastQueuedInspectReceived = GetTime()\n\n\t\t\t-- Notify of expected talent results\n\t\t\tlocal isnotplayer = not UnitIsUnit(\"player\", self.lastInspectName)\n\t\t\tlocal group = GetActiveTalentGroup(isnotplayer)\n\t\t\tlocal tree1, _, spent1 = GetTalentTabInfo(1, isnotplayer, nil, group)\n\t\t\tif (tree1 ~= self.lastInspectTree) then\n\t\t\t\t-- Expected talent tree name to be the same as it was when we triggered the NotifyInspect()\n\t\t\t\tgarbageQueue[self.lastInspectName] = self.lastInspectGUID\n\t\t\t\tself:Reset()\n\t\t\t\tself:CheckInspectQueue()\n\t\t\t\treturn\n\n\t\t\telseif (validateTrees) then\n\t\t\t\t-- Double checking here. Check the tree name matches what we expect for this class\n\t\t\t\tlocal _, class = UnitClass(self.lastInspectUnit)\n\t\t\t\tif (tree1 ~= validateTrees[class]) then\n\t\t\t\t\tgarbageQueue[self.lastInspectName] = self.lastInspectGUID\n\t\t\t\t\tself:Reset()\n\t\t\t\t\tself:CheckInspectQueue()\n\t\t\t\t\treturn\n\t\t\t\tend\n\t\t\tend\n\n\t\t\tlocal tree2, _, spent2 = GetTalentTabInfo(2, isnotplayer, nil, group)\n\t\t\tlocal tree3, _, spent3 = GetTalentTabInfo(3, isnotplayer, nil, group)\n\t\t\tif ((spent1 or 0) + (spent2 or 0) + (spent3 or 0) > 0) then\n\t\t\t\tif (guid) then\n\t\t\t\t\t-- It was in our queue\n\t\t\t\t\tself.events:Fire(\"TalentQuery_Ready\", name, realm, self.lastInspectUnit)\n\t\t\t\telse\n\t\t\t\t\t-- Also notify of non-expected ones, as it's entirely useful to refresh them if they're there\n\t\t\t\t\t-- It is up to the receiving applicating to determine whether they want to receive the information\n\t\t\t\t\tself.events:Fire(\"TalentQuery_Ready_Outsider\", name, realm, self.lastInspectUnit)\n\t\t\t\tend\n\t\t\telse\n\t\t\t\t-- Tree came back with zero points spent, probably an issue while logging in\n\t\t\t\tgarbageQueue[self.lastInspectName] = guid\n\t\t\tend\n\t\tend\n\n\t\tself:Reset()\n\t\tself:CheckInspectQueue()\n\tend\nend\n\nfunction lib:PLAYER_ENTERING_WORLD()\n\t-- We can't inspect other's talents until now\n\t-- We just get 0/0/0 back even though we get an INSPECT_TALENT_READY event\n\tenteredWorld = true\nend\n\nfunction lib:PLAYER_LEAVING_WORLD()\n\tenteredWorld = nil\nend\n\nfunction lib:PLAYER_LOGIN()\n\tvalidateTrees = {\n\t\tDRUID = \"Balance\",\n\t\tPRIEST = \"Discipline\",\n\t\tROGUE = \"Assassination\",\n\t\tHUNTER = \"Beast Mastery\",\n\t\tWARLOCK = \"Affliction\",\n\t\tWARRIOR = \"Arms\",\n\t\tDEATHKNIGHT = \"Blood\",\n\t\tPALADIN = \"Holy\",\n\t\tSHAMAN = \"Elemental\",\n\t\tMAGE = \"Arcane\",\n\t}\n\n\tif (GetLocale() ~= \"enUS\" and GetLocale() ~= \"enGB\") then\n\t\t-- LibBabble-TalentTree-3.0 only loaded if present and not enUS\n\t\tlocal LBT = LibStub(\"LibBabble-TalentTree-3.0\", true)\n\t\tif (not LBT) then\n\t\t\tLoadAddOn(\"LibBabble-TalentTree-3.0\")\n\t\t\tLBT = LibStub(\"LibBabble-TalentTree-3.0\", true)\n\t\tend\n\t\tLBT = LBT and LBT:GetLookupTable()\n\t\tif (LBT) then\n\t\t\tfor class,tree1 in pairs(validateTrees) do\n\t\t\t\tvalidateTrees[class] = LBT[tree1]\n\t\t\tend\n\t\telse\n\t\t\tvalidateTrees = nil\n\t\tend\n\tend\n\t\n\tself.PLAYER_LOGIN = nil\nend\n\nlib:Reset()\n"
  },
  {
    "path": "DBM-Core/Libs/SpecializedAbsorbs-1.0/SpecializedAbsorbs-1.0.lua",
    "content": "------------------------------------------------------------------------\n-- SpecializedAbsorbs\n------------------------------------------------------------------------\n\nlocal MAJOR, MINOR = \"SpecializedAbsorbs-1.0\", 4\nlocal lib, oldminor = LibStub:NewLibrary(MAJOR, MINOR)\nif not lib then return end\nlocal Core\n\nlocal error = error\nlocal pairs, select = pairs, select\nlocal min, max, floor = math.min, math.max, math.floor\nlocal setmetatable, getmetatable = setmetatable, getmetatable\nlocal tinsert, tremove, tsort = table.insert, table.remove, table.sort\nlocal UnitBuff, UnitHealthMax, UnitAttackPower = UnitBuff, UnitHealthMax, UnitAttackPower\nlocal UnitExists, UnitGUID, UnitClass, UnitLevel = UnitExists, UnitGUID, UnitClass, UnitLevel\nlocal UnitFactionGroup, UnitInBattleground, GetTalentInfo = UnitFactionGroup, UnitInBattleground, GetTalentInfo\nlocal GetNumRaidMembers, GetNumPartyMembers = GetNumRaidMembers, GetNumPartyMembers\n\nlib.CheckFlags = lib.CheckFlags or true\nlib.NoErrors = lib.NoErrors or true\n\n---------------------\n-- Install/Upgrade --\n---------------------\n-- We have to upgrade from a previous version\nif oldminor then\n\tCore = lib.Core\n\tif lib.Enabled then\n\t\tCore.Disable()\n\tend\nelse\n\tlib.Core = {callbacks = LibStub:GetLibrary(\"CallbackHandler-1.0\"):New(lib), Events = {}}\n\tCore = lib.Core\n\n\tlocal frame = CreateFrame(\"Frame\", \"SpecializedAbsorbs_Events\")\n\tlocal events = Core.Events\n\tframe:SetScript(\"OnEvent\", function(self, event, ...) events[event](...) end)\n\tCore.Frame = frame\n\tLibStub(\"AceComm-3.0\"):Embed(Core)\n\tLibStub(\"AceTimer-3.0\"):Embed(Core)\n\tLibStub(\"AceSerializer-3.0\"):Embed(Core)\nend\n\n---------------------\n-- Local Variables --\n---------------------\n\nlocal callbacks = Core.callbacks\nlocal Events = Core.Events\n\nlocal playerid, playerclass\n\n-- Specifies the channel any AddOn message should be\n-- sent to, nil if silent\n-- Can also be used to get the last known party state\nlocal curChatChannel = nil\n\n-- Hold the group type and number of members\nlocal groupCount = 0\n\n-- Always hold the timestamp from the last COMBAT_LOG_EVENT_UNFILTERED fired\nlocal lastCombatLogEvent = 0.0\n\n-- Table of all active absorb effects indexed by GUID and then spellid\n-- at spellid == -1 there is a numeric entry with the total remaining value,\n-- at spellid == -2 there is a numeric entry with the total quality (that is, the minimal quality)\n-- The priority is also in this table for performance reasons during sort\n-- [GUID] = { [spellid] = {spellid, priority, remainingValue, maxValue, quality, durationTimerHandle, extra} }\n-- Shortcut to Core.activeEffects.bySpell\nlocal activeEffectsBySpell\n\n-- Table of all active absorb effects indexed by GUID and then a list in the order in which\n-- they will be used\n-- Shortcut to Core.activeEffects.byPriority\nlocal activeEffectsByPriority\n\n-- Table of all active area absorb effects indexed by triggerGUID\n-- same format as an entry in activeEffectsBySpell with two extra fields at the end\n-- {..., triggerGUID, refcount}\n-- Note that in this approach, a trigger can have only one absorb effect up at the same time.\n-- This should be a reasonable assumption for quite some time, considering only Anti-Magic Zone\n-- and (soon) Power Word: Barrier use this feature anyway\n-- Shortcut to Core.activeEffects.Area\nlocal activeAreaEffects\n\n-- Table of current unit charges\n-- A charge is a variant value a custom trigger can put on any unit with a limited lifetime\n-- It is organized as a (very simple) queue (FIFO) for use with Divine Aegis e.g. to save the\n-- critical heal value and then apply it on the aura gain or with Val'anyr.\n-- [GUID] = { [spellid] = { charge1, charge2, ... } }\n-- Shortcut to Core.activeCharges\nlocal activeCharges\n\n-- Table of known spells that cause an absorb effects\n-- priority: active effects above 2 are neither used in total value nor displayed (e.g. Anti-Magic Shell)\n-- [spellid] = {priority, duration, createFunc, hitFunc}\n-- Shortcut to Core.EffectInfo\nlocal Effects\n\n-- Table of spells that cause an area effect\n-- [spellid (trigger)] = spellid (absorb effect)\n-- Shortcut to Core.AreaTriggers\nlocal AreaTriggers\n\n-- Table of additional callbacks on combat log events for proc-based and other non-generic absorb effects.\n-- Shortcuts to entries of Core.CombatTriggers\nlocal CombatTriggersOnHeal\nlocal CombatTriggersOnHealCrit\nlocal CombatTriggersOnAuraApplied\nlocal CombatTriggersOnAuraRemoved\n\n-- Table of all unit stats relevant to absorb effects like attack power and spell power\n-- (mastery rating later on)\n-- [GUID] = { class, AttackPower, SpellPower, quality }\n-- Shortcut to Core.UnitStats\nlocal UnitStatsTable\n\n-- Table of all scaling factors to absorb effects like talents, items, set boni, buffs\n-- If there is no mechanism in Cataclysm to obtain the correct absorb amount by any effect\n-- this entries are meant to be distributed among a group, raid, etc\n-- [GUID] = { [scaling_Name] = scaling_Value }\n-- A numerical scaling_name above 10 should ONLY be used if it is the spellid of the affected effect,\n-- since it is sometimes used as a very quick way to check for a unit's class\n-- Scaling factors that are only relevant to the local user like priest talents and do not\n-- need to be distributed but are needed for calculation of the public one's are private ones,\n-- found at index -1\n-- Shortcuts to Core.Scaling and its entries\nlocal Scaling\nlocal privateScaling\nlocal playerScaling\n\n-- Table of all unitGUIDs that have a Heal Absorb spell effect, with shield amount as value\n-- Health threshold until it gets fully absorbed\nlocal GUIDtoAbsorbHealSpells\n\n-- Class-specific callbacks\nlocal OnEnableClass = {}\nlocal OnScalingDecode = setmetatable({}, {__index = function(table, class) return table.DEFAULT end})\n\n-- Shortcut to the most important core functions\nlocal ApplySingularEffect\nlocal ApplyAreaEffect\nlocal CreateAreaTrigger\nlocal HitUnit\nlocal RemoveActiveEffect\n\n-- Constants\nlocal LOW_VALUE_TOLERANCE = 50\nlocal ZONE_MODIFIER = 1\n\n-- addon comm prefixes\nlocal COMM_UNITSTATS = \"SpecializedAbsorbs_UnitStats\"\nlocal COMM_SCALING = \"SpecializedAbsorbs_Scaling\"\n\n-- for players using AbsorbsMonitor-1.0\nlocal COMM_UNITSTATS_ALT = \"Absorbs_UnitStats\"\nlocal COMM_SCALING_ALT = \"Absorbs_Scaling\"\n\n----------------------\n-- Helper functions --\n----------------------\n\nlocal CommStatsCooldown = false\nlocal function ClearCommStatsCooldown()\n\tCommStatsCooldown = false\nend\n\nlocal CommScalingCooldown = false\nlocal function ClearCommScalingCooldown()\n\tCommScalingCooldown = false\nend\n\nlocal function DeepTableCopy(src)\n\tlocal res = {}\n\n\tfor k, v in pairs(src) do\n\t\tif type(k) == \"table\" then\n\t\t\tk = DeepTableCopy(k)\n\t\tend\n\t\tif type(v) == \"table\" then\n\t\t\tv = DeepTableCopy(v)\n\t\tend\n\t\tres[k] = v\n\tend\n\tsetmetatable(res, getmetatable(src))\n\treturn res\nend\n\nlocal function NoOp() end\n\nlocal SortEffects\ndo\n\tlocal mage_fire_ward = {543, 8457, 8458, 10223, 10225, 27128, 43010}\n\tlocal mage_frost_ward = {6143, 8461, 8462, 10177, 28609, 32796, 43012}\n\tlocal mage_ice_barrier = {11426, 13031, 13032, 13033, 27134, 33405, 43038, 43039}\n\tlocal warlock_shadow_ward = {6229, 11739, 11740, 28610, 47890, 47891}\n\tlocal warlock_sacrifice = {7812, 19438, 19440, 19441, 19442, 19443, 27273, 47985, 47986}\n\n\tfunction SortEffects(a, b)\n\t\t-- use timestamp in case of the same id\n\t\tif a[1] == b[1] then\n\t\t\tif a[8] == nil then\n\t\t\t\treturn true\n\t\t\telseif b[8] == nil then\n\t\t\t\treturn false\n\t\t\telse\n\t\t\t\treturn (a[8] < b[8])\n\t\t\tend\n\t\tend\n\n\t\t-- Twin Val'kyr\n\t\tif a[1] == 65686 then\n\t\t\treturn true\n\t\tend\n\t\tif b[1] == 65686 then\n\t\t\treturn false\n\t\tend\n\t\tif a[1] == 65684 then\n\t\t\treturn true\n\t\tend\n\t\tif b[1] == 65684 then\n\t\t\treturn false\n\t\tend\n\n\t\t-- Frost Ward\n\t\tif tContains(mage_frost_ward, a[1]) then\n\t\t\treturn true\n\t\tend\n\t\tif tContains(mage_frost_ward, b[1]) then\n\t\t\treturn false\n\t\tend\n\n\t\t-- Fire Ward\n\t\tif tContains(mage_fire_ward, a[1]) then\n\t\t\treturn true\n\t\tend\n\t\tif tContains(mage_fire_ward, b[1]) then\n\t\t\treturn false\n\t\tend\n\n\t\t-- Shadow Ward\n\t\tif tContains(warlock_shadow_ward, a[1]) then\n\t\t\treturn true\n\t\tend\n\t\tif tContains(warlock_shadow_ward, b[1]) then\n\t\t\treturn false\n\t\tend\n\n\t\t-- Sacred Shield\n\t\tif a[1] == 58597 then\n\t\t\treturn true\n\t\tend\n\t\tif b[1] == 58597 then\n\t\t\treturn false\n\t\tend\n\n\t\t-- Fel Blossom\n\t\tif a[1] == 58597 then\n\t\t\treturn true\n\t\tend\n\t\tif b[1] == 58597 then\n\t\t\treturn false\n\t\tend\n\n\t\t-- Divine Aegis\n\t\tif a[1] == 47753 then\n\t\t\treturn true\n\t\tend\n\t\tif b[1] == 47753 then\n\t\t\treturn false\n\t\tend\n\n\t\t-- Ice Barrier\n\t\tif tContains(mage_ice_barrier, a[1]) then\n\t\t\treturn true\n\t\tend\n\t\tif tContains(mage_ice_barrier, b[1]) then\n\t\t\treturn false\n\t\tend\n\n\t\t-- Sacrifice\n\t\tif tContains(warlock_sacrifice, a[1]) then\n\t\t\treturn true\n\t\tend\n\t\tif tContains(warlock_sacrifice, b[1]) then\n\t\t\treturn false\n\t\tend\n\n\t\t-- same priority\n\t\t-- if a[2] == b[2] then\n\t\t-- \treturn (a[3] < b[3])\n\t\t-- elseif a[2] and a[2] then\n\t\t-- \treturn (a[3] > b[3])\n\t\t-- end\n\n\t\t-- latest.\n\t\treturn (a[7] < b[7])\n\tend\nend\n\n-- Tries to get a working unitId\nlocal function GetUnitId(guid, name)\n\tif name and UnitGUID(name) then\n\t\treturn name\n\tend\n\tif UnitGUID(\"target\") == guid then\n\t\treturn \"target\"\n\tend\n\tif UnitGUID(\"focus\") == guid then\n\t\treturn \"focus\"\n\tend\n\n\t-- group\n\tlocal prefix\n\tif curChatChannel == \"BATTLEGROUND\" or curChatChannel == \"RAID\" then\n\t\tprefix = \"raid\"\n\telseif curChatChannel == \"PARTY\" then\n\t\tprefix = \"party\"\n\tend\n\n\tif prefix then\n\t\tfor i = 1, groupCount do\n\t\t\tlocal unit = (i == 0) and \"player\" or prefix .. i\n\t\t\tif UnitExists(unit) then\n\t\t\t\tif UnitGUID(unit) == guid then\n\t\t\t\t\treturn unit\n\t\t\t\tend\n\t\t\t\tif UnitExists(unit .. \"pet\") and UnitGUID(unit .. \"pet\") == guid then\n\t\t\t\t\treturn unit .. \"pet\"\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\t-- solo\n\tif UnitGUID(\"player\") == guid then\n\t\treturn \"player\"\n\tend\n\tif UnitExists(\"playerpet\") and UnitGUID(\"playerpet\") == guid then\n\t\treturn \"playerpet\"\n\tend\nend\n\n-- Tries to get a working unitId and calls the given UnitXXX() function\nlocal function UnitDispatch(func, guid, name)\n\tlocal result = func(name)\n\tif not result then\n\t\tlocal unit = GetUnitId(guid, name)\n\t\tif unit then\n\t\t\tresult = func(unit)\n\t\tend\n\tend\n\treturn result\nend\n\n--------------------\n-- Core functions --\n--------------------\n\nfunction Core.Error(...)\n\tif lib.NoErrors then return end\n\terror(...)\nend\n\nfunction Core.Enable()\n\tplayerclass = select(2, UnitClass(\"player\"))\n\tplayerid = UnitGUID(\"player\")\n\n\tCore.activeEffects = {bySpell = {}, byPriority = {}, Area = {}}\n\n\tactiveEffectsBySpell = Core.activeEffects.bySpell\n\tactiveEffectsByPriority = Core.activeEffects.byPriority\n\tactiveAreaEffects = Core.activeEffects.Area\n\n\tCore.activeCharges = {}\n\tactiveCharges = Core.activeCharges\n\n\tEffects = Core.Effects\n\tAreaTriggers = Core.AreaTriggers\n\n\tCombatTriggersOnHeal = Core.CombatTriggers.OnHeal\n\tCombatTriggersOnHealCrit = Core.CombatTriggers.OnHealCrit\n\tCombatTriggersOnAuraApplied = Core.CombatTriggers.OnAuraApplied\n\tCombatTriggersOnAuraRemoved = Core.CombatTriggers.OnAuraRemoved\n\n\tCore.UnitStatsTable = {[playerid] = {playerclass, 0, 0, 1.0}}\n\tUnitStatsTable = Core.UnitStatsTable\n\n\tCore.Scaling = {[-1] = {}, [playerid] = {}}\n\tScaling = Core.Scaling\n\n\tplayerScaling = Scaling[playerid]\n\tprivateScaling = Scaling[-1]\n\n\tCore.GUIDtoAbsorbHealSpells = {}\n\tGUIDtoAbsorbHealSpells = Core.GUIDtoAbsorbHealSpells\n\n\tCore.RegisterEvent(\"ZONE_CHANGED_NEW_AREA\")\n\tEvents.ZONE_CHANGED_NEW_AREA()\n\n\tif playerclass == \"DEATHKNIGHT\" then\n\t\tCore.RegisterEvent(\"UNIT_ATTACK_POWER\")\n\telseif playerclass == \"DRUID\" then\n\t\tCore.RegisterEvent(\"UNIT_ATTACK_POWER\")\n\telseif playerclass == \"MAGE\" then\n\t\tCore.RegisterEvent(\"PLAYER_DAMAGE_DONE_MODS\")\n\telseif playerclass == \"PALADIN\" then\n\t\tCore.RegisterEvent(\"PLAYER_DAMAGE_DONE_MODS\")\n\telseif playerclass == \"PRIEST\" then\n\t\tCore.RegisterEvent(\"PLAYER_DAMAGE_DONE_MODS\")\n\telseif playerclass == \"WARLOCK\" then\n\t\tCore.RegisterEvent(\"PLAYER_DAMAGE_DONE_MODS\")\n\tend\n\n\tEvents.STATS_CHANGED()\n\n\t-- This has to happen before class init, else we get no initial scaling broadcast\n\tif not Core.Silent then\n\t\tCore.SetVerbose()\n\tend\n\n\tif OnEnableClass[playerclass] then\n\t\tOnEnableClass[playerclass]()\n\tend\n\n\tif Events.PLAYER_LEVEL_UP then\n\t\tCore.RegisterEvent(\"PLAYER_LEVEL_UP\")\n\tend\n\n\tif Events.PLAYER_TALENT_UPDATE then\n\t\tCore.RegisterEvent(\"PLAYER_TALENT_UPDATE\")\n\tend\n\n\tif Events.GLYPH_UPDATED then\n\t\tCore.RegisterEvent(\"GLYPH_UPDATED\")\n\tend\n\n\tif Events.PLAYER_EQUIPMENT_CHANGED then\n\t\tCore.RegisterEvent(\"PLAYER_EQUIPMENT_CHANGED\")\n\tend\n\n\tCore:ScheduleRepeatingTimer(Events.OnPeriodicBroadcast, 300)\n\n\tCore:RegisterComm(COMM_UNITSTATS, Events.OnUnitStatsReceived)\n\tCore:RegisterComm(COMM_UNITSTATS_ALT, Events.OnUnitStatsReceived)\n\n\tCore:RegisterComm(COMM_SCALING, Events.OnScalingReceived)\n\tCore:RegisterComm(COMM_SCALING_ALT, Events.OnScalingReceived)\n\n\tif not lib.Passive then\n\t\tCore:SetActive()\n\tend\n\n\tlib.Enabled = true\nend\n\n-- These function has to clear any memory this version of the library may\n-- have accumulated. It will be called in case this library version gets\n-- replaced by a new one\nfunction Core.Disable()\n\tfor guid, effects in pairs(activeEffectsBySpell) do\n\t\tcallbacks:Fire(\"UnitCleared\", guid)\n\tend\n\n\twipe(Core.activeEffects)\n\twipe(Core.activeCharges)\n\n\twipe(Core.Effects)\n\twipe(Core.CombatTriggers)\n\twipe(Core.AreaTriggers)\n\n\twipe(Core.UnitStatsTable)\n\twipe(Core.Scaling)\n\n\twipe(Core.GUIDtoAbsorbHealSpells)\n\n\twipe(Core.Events)\n\tCore.Frame:UnregisterAllEvents()\n\n\tCore:UnregisterAllComm()\n\tCore:CancelAllTimers()\n\n\tlib.Enabled = false\n\n\tcollectgarbage(\"collect\")\nend\n\nfunction Core.RegisterEvent(name)\n\tCore.Frame:RegisterEvent(name)\nend\n\nfunction Core.UnregisterEvent(name)\n\tCore.Frame:UnregisterEvent(name)\nend\n\nlocal Debug = false\nfunction Core.Debug(str)\n\tif not Debug then return end\n\tCore.Print(str)\nend\n\nfunction Core.Print(str)\n\tDEFAULT_CHAT_FRAME:AddMessage(\"|cff33ff99AbsMon|r: \" .. str)\nend\n\nfunction Core.ApplySingularEffect(timestamp, srcGUID, srcName, dstGUID, dstName, spellid, spellschool)\n\tlocal destEffects = activeEffectsBySpell[dstGUID]\n\tlocal effectInfo = Effects[spellid]\n\tlocal effectEntry\n\n\tlocal value, quality = effectInfo[3](srcGUID, srcName, dstGUID, dstName, spellid, destEffects)\n\tif value == nil then return end\n\n\t-- No entry yet for this unit\n\tif not destEffects then\n\t\t-- Not this specific effect yet\n\t\teffectEntry = {spellid, effectInfo[1], value, value, quality, 0, timestamp}\n\t\tdestEffects = {[-1] = 0, [-2] = 1.0, [spellid] = effectEntry}\n\t\tactiveEffectsBySpell[dstGUID] = destEffects\n\t\tactiveEffectsByPriority[dstGUID] = {effectEntry}\n\t\tcallbacks:Fire(\"EffectApplied\", srcGUID, srcName, dstGUID, dstName, spellid, spellschool, value, quality, effectInfo[2])\n\telseif not destEffects[spellid] then\n\t\t-- Effect exists already\n\t\teffectEntry = {spellid, effectInfo[1], value, value, quality, 0, timestamp}\n\t\tdestEffects[spellid] = effectEntry\n\t\ttinsert(activeEffectsByPriority[dstGUID], effectEntry)\n\t\ttsort(activeEffectsByPriority[dstGUID], SortEffects)\n\t\tcallbacks:Fire(\"EffectApplied\", srcGUID, srcName, dstGUID, dstName, spellid, spellschool, value, quality, effectInfo[2])\n\telse\n\t\teffectEntry = destEffects[spellid]\n\t\tlocal prevAmount = effectEntry[3]\n\n\t\teffectEntry[3] = value\n\t\teffectEntry[4] = value\n\t\teffectEntry[5] = quality\n\t\teffectEntry[7] = timestamp\n\n\t\ttsort(activeEffectsByPriority[dstGUID], SortEffects)\n\t\tcallbacks:Fire(\"EffectUpdated\", dstGUID, spellid, value, quality, effectInfo[2])\n\n\t\t-- Adjust value in case this is a visible absorb to get the difference\n\t\tvalue = value - prevAmount\n\n\t\t-- Cancel the exting duration timeout timer\n\t\tCore:CancelTimer(effectEntry[6], true)\n\tend\n\n\tif quality < destEffects[-2] then\n\t\tdestEffects[-2] = quality\n\tend\n\n\tif effectInfo[1] < 2 then\n\t\tdestEffects[-1] = destEffects[-1] + value\n\t\tcallbacks:Fire(\"UnitUpdated\", dstGUID, destEffects[-1], destEffects[-2])\n\tend\n\n\tif effectInfo[2] then\n\t\t-- We add a 5s grace period for latency and all kind of stuff\n\t\t-- This duration timeout should only be needed if the unit moved out of combat log\n\t\t-- reporting range anyway\n\t\teffectEntry[6] = Core:ScheduleTimer(Events.OnSingularTimeout, effectInfo[2] + 5, {dstGUID, spellid})\n\telse\n\t\teffectEntry[6] = Core:ScheduleRepeatingTimer(Events.OnSingularActivityCheck, 8, {dstGUID, spellid})\n\tend\nend\n\nfunction Core.ApplyAreaEffect(timestamp, triggerGUID, triggerName, dstGUID, dstName, spellid, spellschool)\n\tif not activeAreaEffects[triggerGUID] then\n\t\treturn ApplySingularEffect(timestamp, triggerGUID, triggerName, dstGUID, dstName, 0, spellschool)\n\tend\n\n\tlocal effectEntry = activeAreaEffects[triggerGUID]\n\tlocal destEffects = activeEffectsBySpell[dstGUID]\n\n\tif not destEffects then\n\t\t-- At the moment it is impossible for such an effect to be refreshed\n\t\t-- Since it is created by a summoned unit radiating it, it either\n\t\t-- gets removed/reapplied or removed/applied by a different unit.\n\t\t-- Quality of 1.1 to enforce message\n\t\tdestEffects = {[-1] = 0, [-2] = 1.1}\n\n\t\tactiveEffectsBySpell[dstGUID] = destEffects\n\t\tactiveEffectsByPriority[dstGUID] = {}\n\telseif destEffects[spellid] then\n\t\tCore.Error(\"Called ApplyAreaEffect on refreshed aura\")\n\t\treturn\n\tend\n\n\tdestEffects[spellid] = effectEntry\n\teffectEntry[9] = effectEntry[9] + 1 -- increase refcount\n\n\t-- While we keep the trigger itself as a normal afflicted unit to keep\n\t-- track when the area effect breaks, we do not broadcast it nor have to\n\t-- keep a sorted priority list\n\tif triggerGUID ~= dstGUID then\n\t\ttinsert(activeEffectsByPriority[dstGUID], effectEntry)\n\t\ttsort(activeEffectsByPriority[dstGUID], SortEffects)\n\n\t\t-- Note that we CANNOT use nil as an amount, since external addons can rely on this value being non-nil\n\t\t-- for sorting. We're using -1 here that usually represents infinite values\n\t\tcallbacks:Fire(\"EffectApplied\", triggerGUID, triggerName, dstGUID, dstName, spellid, spellschool, -1, effectEntry[5], nil)\n\n\t\t-- Update quality if needed\n\t\tif effectEntry[5] < destEffects[-2] then\n\t\t\tdestEffects[-2] = effectEntry[5]\n\t\t\tcallbacks:Fire(\"UnitUpdated\", dstGUID, destEffects[-1], destEffects[-2])\n\t\tend\n\tend\nend\n\nfunction Core.CreateAreaTrigger(timestamp, srcGUID, srcName, triggerGUID, triggerName, spellid, spellschool)\n\tif activeAreaEffects[triggerGUID] then\n\t\tCore.Error(\"Trying to create new area trigger on existing one, triggerGUID: \" .. triggerGUID .. \", existing spellid: \" .. activeAreaEffects[triggerGUID][1])\n\t\treturn\n\tend\n\n\tlocal effectInfo = Effects[spellid]\n\tlocal value, quality = effectInfo[3](srcGUID, srcName, triggerGUID, triggerName, spellid, nil)\n\tif value == nil then return end\n\n\tlocal effectEntry = {spellid, -1 * effectInfo[1], value, value, quality, 0, timestamp, triggerGUID, 0}\n\teffectEntry[6] = Core:ScheduleTimer(Events.OnAreaTimeout, effectInfo[2] + 5, effectEntry)\n\tactiveAreaEffects[triggerGUID] = effectEntry\n\tcallbacks:Fire(\"AreaCreated\", srcGUID, srcName, triggerGUID, spellid, spellschool, value, quality)\nend\n\nlocal Fire = callbacks.Fire\nfunction Core.HitUnit(guid, absorbedTotal, overkill, spellschool)\n\tlocal guidEffects = activeEffectsBySpell[guid]\n\tif not guidEffects then return end\n\n\tlocal absorbedRemaining = absorbedTotal\n\n\tlocal absorbed = 0\n\tlocal keepEffect, visibleAbsorb = false, false\n\tlocal i = 1\n\tlocal effectEntry\n\n\t-- This loop lasts as long as there is still an absorb value that\n\t-- no effect could account for, but it will break once the list of\n\t-- available effects got used completely.\n\twhile absorbedRemaining > 0 do\n\t\teffectEntry = activeEffectsByPriority[guid][i]\n\n\t\t-- Sometimes there can be holes in this list since we don't re-sort\n\t\t-- after removing an effect\n\t\tif effectEntry == nil then break end\n\n\t\t-- Only absorb effects with exactly zero are ignored, negative ones\n\t\t-- are treated as infinite (that is, no addon should display their value)\n\t\tif effectEntry[3] ~= 0 then\n\t\t\t-- Hit the abosrb effect\n\t\t\tabsorbed, keepEffect = Effects[effectEntry[1]][4](effectEntry, absorbedRemaining, overkill, spellschool)\n\n\t\t\tif absorbed > 0 then\n\t\t\t\t-- Reduce the value of this effect and the remaining absorb value\n\t\t\t\t-- to be accounted for\n\t\t\t\teffectEntry[3] = effectEntry[3] - absorbed\n\t\t\t\tabsorbedRemaining = absorbedRemaining - absorbed\n\n\t\t\t\tif effectEntry[8] then\n\t\t\t\t\tFire(callbacks, \"AreaUpdated\", effectEntry[8], effectEntry[3])\n\t\t\t\telse\n\t\t\t\t\t-- If it should be visible (priority < 2), correct the total value\n\t\t\t\t\tif effectEntry[2] < 2 then\n\t\t\t\t\t\tguidEffects[-1] = guidEffects[-1] - absorbed\n\t\t\t\t\t\t-- Shows us that at least one visible effect got hit\n\t\t\t\t\t\tvisibleAbsorb = true\n\t\t\t\t\tend\n\n\t\t\t\t\tFire(callbacks, \"EffectUpdated\", guid, effectEntry[1], effectEntry[3])\n\t\t\t\tend\n\t\t\tend\n\n\t\t\t-- If the hit-function told us to remove the effect, do so\n\t\t\t-- Note that only RemoveActiveEffect is allowed to remove it from the\n\t\t\t-- list, we just set the value to zero, so it gets ignored on any hit.\n\t\t\t-- This is do not come into any desync issues with the events, and to\n\t\t\t-- keep the proper clean-up code in one place\n\t\t\tif not keepEffect then\n\t\t\t\teffectEntry[3] = 0\n\t\t\tend\n\t\tend\n\n\t\ti = i + 1\n\tend\n\n\t-- There are two possibilities when things are going wrong\n\t--\n\t--\ta)\twe guessed an absorb value too high, in that case it will\n\t--\t\tautomatically be corrected when it breaks\n\t--\n\t--\tb)\twe guessed an absorb value too low, so we end up with an\n\t--\t\tamount to absorb when all effects seem to be gone\n\t--\t\t(absorbedRemaining > 0)\n\t--\t\tNote that we cannot rely on SPELL_AURA_REMOVED to check this,\n\t--\t\tsince it may happen completely out of order, but it will\n\t--\t\tclear this unit soon or did so already.\n\t--\t\twe reduce the quality to zero, since any absorb now happening\n\t--\t\tcannot be accounted for.\n\t--\t\tSince we may have rounding errors from scanning the spellbook\n\t--\t\tand calculating the value thereafter (does Blizzard round on\n\t--\t\tEVERY step?!?), we accept a small threshold\n\tif absorbedRemaining > LOW_VALUE_TOLERANCE then\n\t\tguidEffects[-1] = guidEffects[-1] - absorbedRemaining\n\t\tguidEffects[-2] = 0.0\n\t\tvisibleAbsorb = true\n\tend\n\n\tif visibleAbsorb then\n\t\tFire(Core, \"UnitUpdated\", guid, guidEffects[-1], guidEffects[-2])\n\t\tFire(Core, \"UnitAbsorbed\", guid, absorbedTotal)\n\tend\nend\n\n-- Note that this method should NOT be called on non-existing effects or units\n-- There are no exist checks within it.\nfunction Core.RemoveActiveEffect(guid, spellid)\n\tlocal guidEffects = activeEffectsBySpell and activeEffectsBySpell[guid]\n\tif not guidEffects then return end\n\n\tlocal effectEntry = guidEffects[spellid]\n\n\t-- This is a shared effect with a triggerGUID\n\tif effectEntry[8] then\n\t\teffectEntry[9] = effectEntry[9] - 1\n\n\t\tif guid ~= effectEntry[8] then\n\t\t\tcallbacks:Fire(\"EffectRemoved\", guid, spellid)\n\t\tend\n\n\t\tif effectEntry[9] == 0 then\n\t\t\tif effectEntry[6] then\n\t\t\t\tCore:CancelTimer(effectEntry[6], true)\n\t\t\tend\n\t\t\tcallbacks:Fire(\"AreaCleared\", effectEntry[8])\n\t\tend\n\telse\n\t\tif effectEntry[2] < 2 then\n\t\t\tguidEffects[-1] = guidEffects[-1] - effectEntry[3]\n\t\t\tcallbacks:Fire(\"UnitUpdated\", guid, guidEffects[-1], guidEffects[-2])\n\t\tend\n\n\t\tCore:CancelTimer(effectEntry[6], true)\n\t\tcallbacks:Fire(\"EffectRemoved\", guid, spellid)\n\tend\n\n\tif #(activeEffectsByPriority[guid]) == 1 then\n\t\tactiveEffectsBySpell[guid] = nil\n\t\tactiveEffectsByPriority[guid] = nil\n\t\tcallbacks:Fire(\"UnitCleared\", guid)\n\telse\n\t\tguidEffects[spellid] = nil\n\t\tfor k, v in pairs(activeEffectsByPriority[guid]) do\n\t\t\tif v[1] == spellid then\n\t\t\t\ttremove(activeEffectsByPriority[guid], k)\n\t\t\t\tbreak\n\t\t\tend\n\t\tend\n\t\ttsort(activeEffectsByPriority[guid], SortEffects)\n\tend\nend\n\n-- This is uses a _very_ simple queue implementation with tinsert and tremove.\n-- It will not scale very well for large values, but we're talking of a maximum\n-- of ~3 entries per GUID at any given time. A proper implementation\n-- with linked list would probably not be any faster.\nfunction Core.PushCharge(guid, spellid, amount, lifetime)\n\tlocal guidCharges = activeCharges[guid]\n\n\tif not guidCharges then\n\t\tactiveCharges[guid] = {[spellid] = {lastCombatLogEvent + lifetime, amount}}\n\telseif not guidCharges[spellid] then\n\t\tguidCharges[spellid] = {lastCombatLogEvent + lifetime, amount}\n\telse\n\t\ttinsert(guidCharges[spellid], lastCombatLogEvent + lifetime)\n\t\ttinsert(guidCharges[spellid], amount)\n\tend\nend\n\nfunction Core.PopCharge(guid, spellid)\n\tlocal guidCharges = activeCharges[guid]\n\n\tif guidCharges then\n\t\tlocal queue = guidCharges[spellid]\n\n\t\t-- For some weird reason, it will fail (true even on empty array)\n\t\t-- if checked for queue[1] ?!?\n\t\tif queue and queue[2] then\n\t\t\tlocal chargeAmount\n\t\t\tlocal chargeExpire\n\n\t\t\t-- This loop will not be able to run infinitely\n\t\t\twhile true do\n\t\t\t\t-- In this order we might save one table reshuffle\n\t\t\t\tchargeAmount = tremove(queue, 2)\n\t\t\t\tif not chargeAmount then return 0 end\n\n\t\t\t\tchargeExpire = tremove(queue, 1)\n\t\t\t\tif chargeExpire > lastCombatLogEvent then\n\t\t\t\t\treturn chargeAmount\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\treturn 0\nend\n\nfunction Core.AddCombatTrigger(target, event, func)\n\tlocal eventTriggers = Core.CombatTriggers[event]\n\tlocal oldTrigger = eventTriggers[target]\n\n\tif not oldTrigger then\n\t\teventTriggers[target] = func\n\telse\n\t\tlocal listIndex = target .. \"_list\"\n\t\tlocal funcList = eventTriggers[listIndex]\n\n\t\t-- There is already a list of callbacks, so we just add this one\n\t\tif funcList then\n\t\t\t-- We used a direct call so far, create a list and set up a handler\n\t\t\tfor k, v in pairs(funcList) do\n\t\t\t\tif v == func then\n\t\t\t\t\treturn\n\t\t\t\tend\n\t\t\tend\n\t\t\ttinsert(funcList, func)\n\t\telse\n\t\t\tif oldTrigger == func then\n\t\t\t\treturn\n\t\t\tend\n\n\t\t\tfuncList = {oldTrigger, func}\n\t\t\teventTriggers[listIndex] = funcList\n\n\t\t\tlocal handler = function(...)\n\t\t\t\tfor k, v in pairs(funcList) do\n\t\t\t\t\tv(...)\n\t\t\t\tend\n\t\t\tend\n\n\t\t\teventTriggers[target] = handler\n\t\tend\n\tend\nend\n\nfunction Core.RemoveCombatTrigger(target, event, func)\n\tlocal eventTriggers = Core.CombatTriggers[event]\n\n\tlocal listIndex = target .. \"_list\"\n\tlocal funcList = eventTriggers[listIndex]\n\n\t-- We have a list of callbacks, reduce if possible\n\tif (funcList) then\n\t\t-- It was a direct call anyway\n\t\tif (#funcList == 2) then\n\t\t\teventTriggers[target] = (funcList[1] == func) and funcList[2] or funcList[1]\n\t\t\teventTriggers[listIndex] = nil\n\t\telse\n\t\t\t-- ATTENTION: We have to keep the table in place\n\t\t\t-- because the handler references this table\n\t\t\tlocal old_funcList = DeepTableCopy(funcList)\n\t\t\twipe(funcList)\n\n\t\t\tfor k, v in pairs(old_funcList) do\n\t\t\t\tif v ~= func then\n\t\t\t\t\ttinsert(funcList, v)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\telse\n\t\teventTriggers[target] = nil\n\tend\nend\n\nlocal lastAP, lastSP = 0, 0\nfunction Core.SendUnitStats()\n\tif curChatChannel then\n\t\tlocal curAP, curSP = UnitStatsTable[playerid][2], UnitStatsTable[playerid][3]\n\t\tif (curAP ~= lastAP) or (curSP ~= lastSP) then\n\t\t\tCore:SendCommMessage(COMM_UNITSTATS, Core:Serialize(playerid, playerclass, curAP, curSP), curChatChannel)\n\t\t\tCore:SendCommMessage(COMM_UNITSTATS_ALT, Core:Serialize(playerid, playerclass, curAP, curSP), curChatChannel)\n\n\t\t\tlastAP, lastSP = curAP, curSP\n\t\t\tCommStatsCooldown = true\n\t\t\tCore:ScheduleTimer(ClearCommStatsCooldown, 15)\n\t\tend\n\tend\nend\n\nfunction Core.SendScaling()\n\tif curChatChannel then\n\t\tCore:SendCommMessage(COMM_SCALING, Core:Serialize(playerid, playerclass, Events.OnScalingEncode()), curChatChannel)\n\t\tCore:SendCommMessage(COMM_SCALING_ALT, Core:Serialize(playerid, playerclass, Events.OnScalingEncode()), curChatChannel)\n\n\t\tCommScalingCooldown = true\n\t\tCore:ScheduleTimer(ClearCommStatsCooldown, 30)\n\tend\nend\n\n-- An extension of AceTimer to schedule a one-shot timer that will not\n-- be scheduled twice if scheduled again before it's fired.\nlocal activeTimers = {}\nfunction Core:ScheduleUniqueTimer(id, callback, delay, arg)\n\tif not activeTimers[id] then\n\t\tself:ScheduleTimer(function()\n\t\t\tcallback(arg)\n\t\t\tactiveTimers[id] = nil\n\t\tend, delay)\n\t\tactiveTimers[id] = 1\n\tend\nend\n\nfunction Core.SetActive()\n\tCore.RegisterEvent(\"COMBAT_LOG_EVENT_UNFILTERED\")\n\tlib.Passive = false\nend\n\nfunction Core.SetPassive()\n\tCore.UnregisterEvent(\"COMBAT_LOG_EVENT_UNFILTERED\")\n\tlib.Passive = true\nend\n\nfunction Core.SetVerbose()\n\tCore.RegisterEvent(\"PARTY_MEMBERS_CHANGED\")\n\tCore.RegisterEvent(\"RAID_ROSTER_UPDATE\")\n\tlib.Silent = false\n\tEvents.GROUPING_CHANGED()\nend\n\nfunction Core.SetSilent()\n\tCore.UnregisterEvent(\"PARTY_MEMBERS_CHANGED\")\n\tCore.UnregisterEvent(\"RAID_ROSTER_UPDATE\")\n\tlib.Silent = true\n\tcurChatChannel = nil\nend\n\nApplySingularEffect = Core.ApplySingularEffect\nApplyAreaEffect = Core.ApplyAreaEffect\nCreateAreaTrigger = Core.CreateAreaTrigger\nHitUnit = Core.HitUnit\nRemoveActiveEffect = Core.RemoveActiveEffect\n\n---------------------\n-- Event functions --\n---------------------\n\nfunction Events.PLAYER_ENTERING_WORLD()\n\tif not GetTalentInfo(1, 1) then\n\t\tCore.RegisterEvent(\"PLAYER_ALIVE\")\n\telse\n\t\tCore.Available = true\n\t\tCore.Enable()\n\t\tCore:ScheduleTimer(Events.STATS_CHANGED, 5)\n\tend\n\tCore.UnregisterEvent(\"PLAYER_ENTERING_WORLD\")\nend\n\nfunction Events.PLAYER_ALIVE()\n\tCore.Available = true\n\tCore.Enable()\n\tCore.UnregisterEvent(\"PLAYER_ALIVE\")\nend\n\nlocal BITMASK_GROUP = COMBATLOG_OBJECT_AFFILIATION_MINE + COMBATLOG_OBJECT_AFFILIATION_PARTY + COMBATLOG_OBJECT_AFFILIATION_RAID\nlocal function CheckFlags(srcFlags, dstFlags)\n\treturn (srcFlags and bit.band(srcFlags, BITMASK_GROUP) ~= 0) or (dstFlags and bit.band(dstFlags, BITMASK_GROUP) ~= 0)\nend\n\n------------------\n-- Heal Absorbs --\n------------------\n\nlocal absorbHealSpells = {\n\t[66237] = 30000,\t-- Incinerate Flesh (10 Normal)\n\t[67049] = 60000,\t-- Incinerate Flesh (25 Normal)\n\t[67050] = 40000,\t-- Incinerate Flesh (10 Heroic)\n\t[67051] = 85000,\t-- Incinerate Flesh (25 Heroic)\n\t[66236] = 30000,\t-- Incinerate Flesh\n\t[70659] = 9000,\t\t-- Necrotic Strike (10 Normal)\n\t[71951] = 15000,\t-- Necrotic Strike\n\t[72490] = 14000,\t-- Necrotic Strike (25 Normal)\n\t[72491] = 14000,\t-- Necrotic Strike (10 Heroic)\n\t[72492] = 20000,\t-- Necrotic Strike (25 Heroic)\n}\n\nlocal environmentSchools = {\n\tFALLING = SCHOOL_MASK_PHYSICAL,\n\tDROWNING = SCHOOL_MASK_PHYSICAL,\n\tFATIGUE = SCHOOL_MASK_PHYSICAL,\n\tFIRE = SCHOOL_MASK_FIRE,\n\tLAVA = SCHOOL_MASK_FIRE,\n\tSLIME = SCHOOL_MASK_NATURE\n}\n\nfunction Events.COMBAT_LOG_EVENT_UNFILTERED(timestamp, etype, srcGUID, srcName, srcFlags, dstGUID, dstName, dstFlags, ...)\n\tif lib.CheckFlags and not CheckFlags(srcFlags, dstFlags) then return end\n\n\tlastCombatLogEvent = timestamp\n\tif etype == \"SWING_DAMAGE\" then\n\t\tlocal amount, _, _, _, _, absorbed = ...\n\t\tif not absorbed then return end\n\t\tHitUnit(dstGUID, absorbed, amount, SCHOOL_MASK_PHYSICAL)\n\telseif etype == \"RANGE_DAMAGE\" or etype == \"SPELL_DAMAGE\" or etype == \"SPELL_PERIODIC_DAMAGE\" then\n\t\tlocal _, _, spellschool, amount, _, _, _, _, absorbed = ...\n\t\tif not absorbed then return end\n\t\tHitUnit(dstGUID, absorbed, amount, spellschool)\n\telseif etype == \"ENVIRONMENTAL_DAMAGE\" then\n\t\tlocal envtype, amount, _, _, _, _, absorbed = ...\n\t\tif not absorbed then return end\n\t\tHitUnit(dstGUID, absorbed, amount, environmentSchools[envtype] or SCHOOL_MASK_PHYSICAL)\n\telseif etype == \"SWING_MISSED\" then\n\t\tlocal misstype, amount = ...\n\t\tif misstype ~= \"ABSORB\" then return end\n\t\tHitUnit(dstGUID, amount, 0, SCHOOL_MASK_PHYSICAL)\n\telseif etype == \"RANGE_MISSED\" or etype == \"SPELL_MISSED\" or etype == \"SPELL_PERIODIC_MISSED\" then\n\t\tlocal _, _, spellschool, misstype, amount = ...\n\t\tif misstype ~= \"ABSORB\" then return end\n\t\tHitUnit(dstGUID, amount, 0, spellschool)\n\telseif etype == \"SPELL_HEAL\" or etype == \"SPELL_PERIODIC_HEAL\" then\n\t\tlocal spellid, _, _, amount, overheal, absorbed, critical = ...\n\t\tif CombatTriggersOnHeal[srcGUID] then\n\t\t\tCombatTriggersOnHeal[srcGUID](srcGUID, srcName, dstGUID, dstName, spellid, amount, overheal)\n\t\tend\n\t\tif absorbed and Core.GUIDtoAbsorbHealSpells[dstGUID] then\n\t\t\tCore.GUIDtoAbsorbHealSpells[dstGUID] = Core.GUIDtoAbsorbHealSpells[dstGUID] - absorbed\n\t\tend\n\t\tif critical and CombatTriggersOnHealCrit[srcGUID] then\n\t\t\tCombatTriggersOnHealCrit[srcGUID](srcGUID, srcName, dstGUID, dstName, spellid, amount, overheal)\n\t\tend\n\telseif etype == \"SPELL_AURA_APPLIED\" or etype == \"SPELL_AURA_REFRESH\" then\n\t\tlocal spellid, _, spellschool = ...\n\t\tif Effects[spellid] then\n\t\t\tif Effects[spellid][1] > 0 then\n\t\t\t\tApplySingularEffect(timestamp, srcGUID, srcName, dstGUID, dstName, spellid, spellschool)\n\t\t\telse\n\t\t\t\tApplyAreaEffect(timestamp, srcGUID, srcName, dstGUID, dstName, spellid, spellschool)\n\t\t\tend\n\t\tend\n\t\tif CombatTriggersOnAuraApplied[spellid] then\n\t\t\tCombatTriggersOnAuraApplied[spellid](srcGUID, srcName, dstGUID, dstName, spellid)\n\t\tend\n\t\tif absorbHealSpells[spellid] then\n\t\t\tCore.GUIDtoAbsorbHealSpells[dstGUID] = absorbHealSpells[spellid]\n\t\tend\n\telseif etype == \"SPELL_AURA_REMOVED\" then\n\t\tlocal spellid, _, spellschool = ...\n\t\tif Effects[spellid] then\n\t\t\tif activeEffectsBySpell[dstGUID] and activeEffectsBySpell[dstGUID][spellid] then\n\t\t\t\tRemoveActiveEffect(dstGUID, spellid)\n\t\t\tend\n\t\tend\n\t\tif CombatTriggersOnAuraRemoved[spellid] then\n\t\t\tCombatTriggersOnAuraRemoved[spellid](srcGUID, srcName, dstGUID, dstName, spellid, spellschool)\n\t\tend\n\t\tif absorbHealSpells[spellid] then\n\t\t\tCore.GUIDtoAbsorbHealSpells[dstGUID] = nil\n\t\tend\n\telseif etype == \"SPELL_SUMMON\" then\n\t\tlocal spellid, _, spellschool = ...\n\t\tif AreaTriggers[spellid] then\n\t\t\tCreateAreaTrigger(timestamp, srcGUID, srcName, dstGUID, dstName, AreaTriggers[spellid], spellschool)\n\t\tend\n\tend\nend\n\nfunction Events.GROUPING_CHANGED()\n\t-- Note that the order here is VERY important\n\tif UnitInBattleground(\"player\") then\n\t\tcurChatChannel = \"BATTLEGROUND\"\n\t\tgroupCount = GetNumRaidMembers()\n\telseif GetNumRaidMembers() > 0 then\n\t\tcurChatChannel = \"RAID\"\n\t\tgroupCount = GetNumRaidMembers()\n\telseif GetNumPartyMembers() > 0 then\n\t\tcurChatChannel = \"PARTY\"\n\t\tgroupCount = GetNumPartyMembers()\n\telse\n\t\tcurChatChannel = nil\n\t\tgroupCount = 0\n\tend\n\n\tCore:ScheduleTimer(Events.STATS_CHANGED, 5)\n\tEvents.STATS_CHANGED()\nend\n\nfunction Events.ZONE_CHANGED_NEW_AREA()\n\tif UnitInBattleground(\"player\") then\n\t\tZONE_MODIFIER = 1.17\n\telseif IsActiveBattlefieldArena() then\n\t\tZONE_MODIFIER = 0.9\n\telseif GetCurrentMapAreaID() == 502 then\n\t\tZONE_MODIFIER = 1.17\n\telseif GetCurrentMapAreaID() == 605 then\n\t\tZONE_MODIFIER = (UnitBuff(\"player\", GetSpellInfo(73822)) or UnitBuff(\"player\", GetSpellInfo(73828))) and 1.3 or 1\n\telse\n\t\tZONE_MODIFIER = 1\n\tend\n\n\tCore:ScheduleTimer(Events.STATS_CHANGED, 5)\nend\n\nfunction Events.STATS_CHANGED()\n\tlocal baseAP, plusAP, minusAP = UnitAttackPower(\"player\")\n\n\tUnitStatsTable[playerid][2] = baseAP + plusAP - minusAP\n\t-- TODO: What about spell power ~= healing spell power?\n\tUnitStatsTable[playerid][3] = GetSpellBonusHealing()\n\tif curChatChannel then\n\t\tCore:ScheduleUniqueTimer(\"comm_stats\", Core.SendUnitStats, CommStatsCooldown and 15 or 5)\n\t\tCore:ScheduleUniqueTimer(\"comm_scaling\", Core.SendScaling, CommScalingCooldown and 30 or 5)\n\tend\nend\n\nfunction Events.OnUnitStatsReceived(prefix, text, distribution, target)\n\tif not text then return end\n\n\tlocal success, guid, class, ap, sp = Core:Deserialize(text)\n\tif not (success and guid and class and ap and sp) then return end\n\tif guid == playerid then return end\n\n\tif not UnitStatsTable[guid] then\n\t\tUnitStatsTable[guid] = {class, ap, sp, 1.0}\n\telse\n\t\tUnitStatsTable[guid][2] = ap\n\t\tUnitStatsTable[guid][3] = sp\n\t\tUnitStatsTable[guid][4] = 1.0\n\tend\nend\n\nfunction Events.OnScalingEncode()\n\treturn Scaling[playerid]\nend\n\nfunction OnScalingDecode.DEFAULT(guid, guidScaling)\n\tScaling[guid] = guidScaling\nend\n\nfunction Events.OnScalingReceived(prefix, text, distribution, target)\n\tif not text then return end\n\n\tlocal success, guid, class, inScaling = Core:Deserialize(text)\n\tif not (success and guid and class and inScaling) then return end\n\tif guid == playerid then return end\n\t(OnScalingDecode[class])(guid, inScaling)\nend\n\nfunction Events.OnPeriodicBroadcast()\n\tif not curChatChannel then return end\n\n\tlocal playerStats = UnitStatsTable[playerid]\n\tlocal playerScaling = Scaling[playerid]\n\n\tif not CommStatsCooldown then\n\t\tCore:ScheduleUniqueTimer(\"comm_stats\", Core.SendUnitStats, 5)\n\tend\n\n\tif not CommScalingCooldown then\n\t\tCore:ScheduleUniqueTimer(\"comm_scaling\", Core.SendScaling, 5)\n\tend\nend\n\nfunction Events.OnSingularTimeout(args)\n\tlocal guid, spellid = args[1], args[2]\n\tif activeEffectsBySpell[guid] and activeEffectsBySpell[guid][spellid] then\n\t\tRemoveActiveEffect(guid, spellid)\n\tend\nend\n\nfunction Events.OnSingularActivityCheck(args)\n\tlocal guid, spellid = args[1], args[2]\n\n\tif activeEffectsBySpell[guid] and activeEffectsBySpell[guid][spellid] then\n\t\tlocal name = select(6, GetPlayerInfoByGUID(guid))\n\n\t\t-- We cannot track whether it's still on, remove it\n\t\tif not name then\n\t\t\tCore:CancelTimer(activeEffectsBySpell[guid][spellid][6])\n\t\t\tRemoveActiveEffect(guid, spellid)\n\t\tend\n\n\t\tlocal stillActive = false\n\n\t\tfor i = 1, 40 do\n\t\t\tlocal buffId = select(11, UnitBuff(name, i))\n\t\t\tif not buffId then break end\n\t\t\tif buffId == spellid then\n\t\t\t\tstillActive = true\n\t\t\t\tbreak\n\t\t\tend\n\t\tend\n\n\t\tif not stillActive then\n\t\t\tCore:CancelTimer(activeEffectsBySpell[guid][spellid][6])\n\t\t\tRemoveActiveEffect(guid, spellid)\n\t\tend\n\telse\n\t\t-- Make sure to remove the timer\n\t\tCore:CancelTimer(activeEffectsBySpell[guid][spellid][6])\n\tend\nend\n\n-- This should be called in even less cases than the normal timeout\nfunction Events.OnAreaTimeout(areaEntry)\n\t-- Disable the timer handle entry already\n\tareaEntry[6] = nil\n\n\tfor guid, guidEffects in pairs(activeEffectsBySpell) do\n\t\tif areaEntry[9] == 0 then return end\n\t\tfor spellid, effectEntry in pairs(guidEffects) do\n\t\t\tif effectEntry == areaEntry then\n\t\t\t\tRemoveActiveEffect(guid, spellid)\n\t\t\tend\n\t\tend\n\tend\n\n\t-- We're only here if we didn't reduce the refcount to zero\n\tCore.Error(\"Positive refcount \" .. areaEntry[9] .. \" remained for area effect \" .. areaEntry[1] .. \" by trigger \" .. areaEntry[8])\nend\n\n-- Map client events to our callbacks\nEvents.PARTY_MEMBERS_CHANGED = Events.GROUPING_CHANGED\nEvents.RAID_ROSTER_UPDATE = Events.GROUPING_CHANGED\nEvents.PLAYER_DAMAGE_DONE_MODS = Events.STATS_CHANGED\nEvents.UNIT_ATTACK_POWER = Events.STATS_CHANGED\n\n----------------------\n-- Public functions --\n----------------------\n\nfunction lib.RegisterEffectCallbacks(self, funcApplied, funcUpdated, funcRemoved)\n\tlib.RegisterCallback(self, \"EffectApplied\", funcApplied)\n\tlib.RegisterCallback(self, \"EffectUpdated\", funcUpdated or funcApplied)\n\tlib.RegisterCallback(self, \"EffectRemoved\", funcRemoved or funcApplied)\nend\n\nfunction lib.RegisterUnitCallbacks(self, funcUpdated, funcCleared)\n\tlib.RegisterCallback(self, \"UnitUpdated\", funcUpdated)\n\tlib.RegisterCallback(self, \"UnitCleared\", funcCleared or funcUpdated)\nend\n\nfunction lib.RegisterAreaCallbacks(self, funcCreated, funcUpdated, funcCleared)\n\tlib.RegisterCallback(self, \"AreaCreated\", funcCreated)\n\tlib.RegisterCallback(self, \"AreaUpdated\", funcUpdated or funcCreated)\n\tlib.RegisterCallback(self, \"AreaCleared\", funcCleared or funcCreated)\nend\n\nfunction lib.GetLowValueTolerance()\n\treturn LOW_VALUE_TOLERANE\nend\n\nfunction lib.SetLowValueTolerance(value)\n\tLOW_VALUE_TOLERANCE = tonumber(value)\nend\n\nfunction lib.PrintProfiling()\n\tif GetCVar(\"scriptProfile\") ~= \"1\" then\n\t\tCore.Print(\"CPU profiling disabled\")\n\t\treturn\n\tend\n\n\tUpdateAddOnCPUUsage()\n\tUpdateAddOnMemoryUsage()\n\n\tCore.Print(\"Mem: \" .. format(\"%.3f\", GetAddOnMemoryUsage(\"SpecializedAbsorbs\")) .. \" kB\")\n\tCore.Print(\"Time: \" .. format(\"%.3f\", GetAddOnCPUUsage(\"SpecializedAbsorbs\")) .. \" ms\")\n\tCore.Print(\"--- critical code paths (all times in ms) ---\")\n\n\tlocal funcTable\n\n\tfuncTable = {\n\t\t[\"ApplySingularEffect\"] = ApplySingularEffect,\n\t\t[\"HitUnit\"] = HitUnit,\n\t\t[\"RemoveActiveEffect\"] = RemoveActiveEffect,\n\t\t[\"OnCombatLogEvent\"] = COMBAT_LOG_EVENT_UNFILTERED,\n\t\t[\"SortEffects\"] = SortEffects\n\t}\n\n\tlocal v_type\n\tlocal time_self, time_combined, count\n\n\tfor k, v in pairs(funcTable) do\n\t\tv_type = type(v)\n\n\t\tif v_type == \"function\" then\n\t\t\ttime_self, count = GetFunctionCPUUsage(v, false)\n\t\t\ttime_combined = GetFunctionCPUUsage(v, true)\n\t\t\tCore.Print(k .. \" (#\" .. count .. \"): \" .. format(\"%.4f\", time_self) .. \" / \" .. format(\"%.4f\", time_combined))\n\t\tend\n\tend\nend\n\nfunction lib.UnitTotal(guid)\n\tlocal total = 0\n\tif activeEffectsBySpell and activeEffectsBySpell[guid] then\n\t\ttotal = activeEffectsBySpell[guid][-1]\n\tend\n\treturn total\nend\n\nfunction lib.UnitEffect(guid, spellid)\n\tlocal guidEffects = activeEffectsBySpell and activeEffectsBySpell[guid]\n\tif guidEffects and guidEffects[spellid] then\n\t\treturn guidEffects[spellid][3]\n\tend\n\treturn 0\nend\n\nfunction lib.UnitStats(guid, missingQuality)\n\tlocal guidStats = UnitStatsTable and UnitStatsTable[guid]\n\tif guidStats then\n\t\treturn guidStats[2], guidStats[3], guidStats[4]\n\tend\n\treturn 0, 0, missingQuality\nend\n\nfunction lib.UnitScaling(guid, defaultScaling, defaultQuality)\n\tlocal guidScaling = Scaling and Scaling[guid]\n\tif guidScaling then\n\t\treturn guidScaling, 1.0\n\tend\n\treturn defaultScaling, defaultQuality\nend\n\n-- Optimized method to save one function call on creation, since a lot of spells\n-- actually require stats and scaling\nfunction lib.UnitStatsAndScaling(guid, missingQuality, defaultScaling, defaultQuality)\n\tlocal guidStats = UnitStatsTable and UnitStatsTable[guid]\n\tlocal guidScaling = Scaling and Scaling[guid]\n\tif guidStats then\n\t\tif guidScaling then\n\t\t\treturn guidStats[2], guidStats[3], guidStats[4], guidScaling, 1.0\n\t\tend\n\t\treturn guidStats[2], guidStats[3], guidStats[4], defaultScaling, defaultQuality\n\telse\n\t\tif guidScaling then\n\t\t\treturn 0, 0, missingQuality, guidScaling, 1.0\n\t\tend\n\t\treturn 0, 0, missingQuality, defaultScaling, defaultQuality\n\tend\nend\n\nfunction lib.UnitEffectsMap(guid)\n\treturn activeEffectsBySpell and activeEffectsBySpell[guid]\nend\n\nfunction lib.UnitEffectsList(guid)\n\treturn activeEffectsByPriority and activeEffectsByPriority[guid]\nend\n\nfunction lib.UnitActiveEffect(guid)\n\tlocal guidEffects = lib.UnitEffectsList(guid)\n\treturn guidEffects and guidEffects[1]\nend\n\nfunction lib.ScheduleScalingBroadcast()\n\tif curChatChannel then\n\t\tCore:ScheduleUniqueTimer(\"comm_scaling\", Core.SendScaling, CommScalingCooldown and 30 or 5)\n\tend\nend\n\nfunction lib.UnitTotalHealAbsorbs(guid)\n\tif GUIDtoAbsorbHealSpells then\n\t\tlocal guidHealAbsorbs = guid and GUIDtoAbsorbHealSpells[guid]\n\t\treturn guidHealAbsorbs\n\tend\nend\n\n------------------------------\n-- Generic Effect functions --\n------------------------------\n\nlocal PushCharge = Core.PushCharge\nlocal PopCharge = Core.PopCharge\nlocal UnitStats = lib.UnitStats\nlocal UnitScaling = lib.UnitScaling\nlocal UnitStatsAndScaling = lib.UnitStatsAndScaling\n\n--- Generic Create function (only for documentary purposes)\n-- @param\tsrcGUID\t\t\tguid of the originating unit\n-- @param\tsrcName\t\t\tname of the originating unit\n-- @param\tdstGUID\t\t\tguid of the affected unit\n-- @param\tdstName\t\t\tname of the affected unit\n-- @param\tspellid\t\t\t\tthe spellid of this absorb effect\n-- @param\tdestEffects\t\t\tactiveEffectsBySpell[dstGUID]\n-- @return\ttotal value of this absorb effect\n-- @return\tquality (that is accuracy) of this value\nlocal function generic_Create(srcGUID, srcName, dstGUID, dstName, spellid, destEffects)\nend\n\n-- Generic Create function for constant effects pulled from a table\n-- Expects the table at effect[5] indexed by spellid with base values\nlocal function generic_ConstantByTable_Create(srcGUID, srcName, dstGUID, dstName, spellid, destEffects)\n\treturn Effects[spellid][5][spellid], 1.0\nend\n\n-- Generic Create function for effects simply scaling with spellpower and a fixed\n-- coefficient.\n-- Expects at effect[5] a table indexed by spellid with the base values and at\n-- effect[6] the spellpower coefficient\nlocal function generic_SpellScalingByTable_Create(srcGUID, srcName, dstGUID, dstName, spellid, destEffects)\n\tlocal effectInfo = Effects[spellid]\n\tlocal _, sp, quality = UnitStats(srcGUID, 0.1)\n\treturn floor(effectInfo[5][spellid] + (sp * effectInfo[6])), quality\nend\n\n--- Generic Hit function suitable for most absorb effects\n-- Note that this function is only responsible for determining the amount this\n-- particular absorb effect will take, NOT to handle its consequences like updating\n-- the data structures\n-- @param\teffectEntry\t\t\tactiveEffectsBySpell[guid][spellid]\n-- @param\tabsorbedRemaining\tabsorb value left to be accounted for on this unit\n-- @param\toverkill\t\t\tamount of damage done on top of the absorb\n-- @param\tspellschool\t\t\tspell school for this hit\n-- @return\tabsorb value this effect can account fors\n-- @return\twhether this absorb was broken by this hit\nlocal function generic_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\n\tif absorbedRemaining > effectEntry[3] then\n\t\t-- dirty but efficient\n\t\tabsorbedRemaining = effectEntry[3]\n\t\toverkill = 1\n\tend\n\treturn absorbedRemaining, (overkill == 0)\nend\n\nlocal function Physical_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\n\tif spellschool ~= SCHOOL_MASK_PHYSICAL then\n\t\treturn 0, true\n\tend\n\treturn generic_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\nend\n\nlocal function Holy_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\n\tif spellschool ~= SCHOOL_MASK_HOLY then\n\t\treturn 0, true\n\tend\n\treturn generic_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\nend\n\nlocal function Fire_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\n\tif spellschool ~= SCHOOL_MASK_FIRE then\n\t\treturn 0, true\n\tend\n\treturn generic_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\nend\n\nlocal function Nature_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\n\tif spellschool ~= SCHOOL_MASK_NATURE then\n\t\treturn 0, true\n\tend\n\treturn generic_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\nend\n\nlocal function Frost_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\n\tif spellschool ~= SCHOOL_MASK_FROST then\n\t\treturn 0, true\n\tend\n\treturn generic_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\nend\n\nlocal function FrostFire_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\n\tif spellschool ~= (SCHOOL_MASK_FIRE + SCHOOL_MASK_FROST) then\n\t\treturn 0, true\n\tend\n\treturn generic_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\nend\n\nlocal function Shadow_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\n\tif spellschool ~= SCHOOL_MASK_SHADOW then\n\t\treturn 0, true\n\tend\n\treturn generic_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\nend\n\nlocal function Arcane_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\n\tif spellschool ~= SCHOOL_MASK_ARCANE then\n\t\treturn 0, true\n\tend\n\treturn generic_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\nend\n\n---------------------------\n-- Effects: Death Knight --\n---------------------------\n\nlocal deathknight_MS_Ranks = {[0] = 0, [1] = 0.08, [2] = 0.16, [3] = 0.25}\n\n-- Public Scaling: { [MagicSuppression] }\nlocal deathknight_defaultScaling = {0}\n\nlocal function deathknight_AntiMagicShell_Create(srcGUID, srcName, dstGUID, dstName, spellid, destEffects)\n\tlocal maxHealth = UnitDispatch(UnitHealthMax, dstGUID, dstName)\n\tif maxHealth == 0 then\n\t\treturn 0, 0.0\n\tend\n\n\tlocal sourceScaling, quality = UnitScaling(srcGUID, deathknight_defaultScaling, 0.5)\n\treturn floor(maxHealth * 0.5), quality, (0.75 + sourceScaling[1])\nend\n\nlocal function deathknight_AntiMagicShell_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\n\t-- TODO: what happens to mixed school attacks?\n\tif spellschool == SCHOOL_MASK_PHYSICAL then\n\t\treturn 0, true\n\tend\n\n\tlocal maxAbsorb = floor((absorbedRemaining + overkill) * effectEntry[7])\n\tif effectEntry[3] < maxAbsorb then\n\t\treturn effectEntry[3], false\n\tend\n\treturn maxAbsorb, true\nend\n\nlocal function deathknight_AntiMagicZone_Create(srcGUID, srcName, dstGUID, dstName, spellid, destEffects)\n\tlocal ap, _, quality = UnitStats(srcGUID, 0.3)\n\treturn (10000 + 2 * ap), quality\nend\n\nlocal function deathknight_AntiMagicZone_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\n\t-- TODO: what happens to mixed school attacks?\n\tif spellschool == SCHOOL_MASK_PHYSICAL then\n\t\treturn 0, true\n\tend\n\n\tlocal maxAbsorb = floor((absorbedRemaining + overkill) * 0.75)\n\n\tif effectEntry[3] < maxAbsorb then\n\t\treturn effectEntry[3], false\n\tend\n\treturn maxAbsorb, true\nend\n\nlocal function deathknight_WoN_Hit1(effectEntry, absorbedRemaining, overkill, spellschool)\n\tlocal maxAbsorb = floor((absorbedRemaining + overkill) * 0.05)\n\tif effectEntry[3] < maxAbsorb then\n\t\treturn effectEntry[3], false\n\tend\n\treturn maxAbsorb, true\nend\n\nlocal function deathknight_WoN_Hit2(effectEntry, absorbedRemaining, overkill, spellschool)\n\tlocal maxAbsorb = floor((absorbedRemaining + overkill) * 0.1)\n\tif effectEntry[3] < maxAbsorb then\n\t\treturn effectEntry[3], false\n\tend\n\treturn maxAbsorb, true\nend\n\nlocal function deathknight_WoN_Hit3(effectEntry, absorbedRemaining, overkill, spellschool)\n\tlocal maxAbsorb = floor((absorbedRemaining + overkill) * 0.15)\n\tif effectEntry[3] < maxAbsorb then\n\t\treturn effectEntry[3], false\n\tend\n\treturn maxAbsorb, true\nend\n\nlocal function deathknight_OnTalentUpdate()\n\t-- Magic Suppression\n\tlocal t = select(5, GetTalentInfo(3, 18))\n\tplayerScaling[1] = deathknight_MS_Ranks[t]\n\tlib.ScheduleScalingBroadcast()\nend\n\nfunction OnEnableClass.DEATHKNIGHT()\n\tEvents.PLAYER_TALENT_UPDATE = deathknight_OnTalentUpdate\n\tdeathknight_OnTalentUpdate()\nend\n\n--------------------\n-- Effects: Druid --\n--------------------\n\nlocal function druid_SavageDefense_Create(srcGUID, srcName, dstGUID, dstName, spellid, destEffects)\n\tlocal ap, _, quality = UnitStats(srcGUID, 0.0)\n\treturn floor(ap * 0.25), quality\nend\n\nlocal function druid_SavageDefense_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\n\t-- TODO: what happens to mixed school attacks?\n\tif spellschool == SCHOOL_MASK_PHYSICAL then\n\t\treturn min(effectEntry[3], absorbedRemaining), false\n\tend\n\treturn 0, true\nend\n\n-------------------\n-- Effects: Mage --\n-------------------\n\n-- Table for base values of\n-- Fire Ward, Frost Ward, Ice Barrier, Mana Shield\n-- TODO: base leveling increase\nlocal mage_Absorb_Spells = {\n\t-- Fire Ward\n\t[543] = 165,\n\t[8457] = 290,\n\t[8458] = 470,\n\t[10223] = 675,\n\t[10225] = 875,\n\t[27218] = 1125,\n\t[43010] = 1950,\n\t-- Frost Ward\n\t[6143] = 165,\n\t[8461] = 290,\n\t[8462] = 470,\n\t[10177] = 675,\n\t[28609] = 875,\n\t[32796] = 1125,\n\t[43012] = 1950,\n\t-- Ice Barrier\n\t[11426] = 438,\n\t[13031] = 549,\n\t[13032] = 678,\n\t[13033] = 818,\n\t[27134] = 925,\n\t[33405] = 1075,\n\t[43038] = 2800,\n\t[43039] = 3300,\n\t-- Mana Shield\n\t[1463] = 120,\n\t[8494] = 210,\n\t[8495] = 300,\n\t[10191] = 390,\n\t[10192] = 480,\n\t[10193] = 570,\n\t[27131] = 715,\n\t[43019] = 1080,\n\t[43020] = 1330\n}\n\n-- Public Scaling: { [GlyphOfIceBarrier] }\nlocal mage_defaultScaling = {1.0}\n\n-- No Downranking support here\nlocal function mage_IceBarrier_Create(srcGUID, srcName, dstGUID, dstName, spellid, destEffects)\n\tlocal _, sp, quality1, sourceScaling, quality2 = UnitStatsAndScaling(srcGUID, 0.3, mage_defaultScaling, 0.4)\n\treturn floor((mage_Absorb_Spells[spellid] + (sp * 0.8053)) * sourceScaling[1]), min(quality1, quality2)\nend\n\nlocal function mage_FireWard_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\n\tif spellschool ~= SCHOOL_MASK_FIRE then\n\t\treturn 0, true\n\tend\n\treturn generic_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\nend\n\nlocal function mage_FrostWard_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\n\tif spellschool ~= SCHOOL_MASK_FROST then\n\t\treturn 0, true\n\tend\n\treturn generic_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\nend\n\nlocal function mage_OnGlyphUpdated()\n\tlocal glyphSpellId\n\n\tplayerScaling[1] = 1.0\n\n\tfor i = 1, 6 do\n\t\tglyphSpellId = select(3, GetGlyphSocketInfo(i))\n\t\t-- Glyph of Ice Barrier\n\t\tif glyphSpellId and glyphSpellId == 63095 then\n\t\t\tplayerScaling[1] = 1.3\n\t\t\tbreak\n\t\tend\n\tend\n\tlib.ScheduleScalingBroadcast()\nend\n\nfunction OnEnableClass.MAGE()\n\tEvents.GLYPH_UPDATED = mage_OnGlyphUpdated\n\tmage_OnGlyphUpdated()\nend\n\n----------------------\n-- Effects: Paladin --\n----------------------\n\n-- Public Scaling: { [DivineGuardian] }\nlocal paladin_defaultScaling = {1.0}\n\n-- The base value is always 500\nlocal function paladin_SacredShield_Create(srcGUID, srcName, dstGUID, dstName, spellid, destEffects)\n\tlocal _, sp, quality1, sourceScaling, quality2 = UnitStatsAndScaling(srcGUID, 0.1, paladin_defaultScaling, 0.2)\n\treturn floor((500 + (sp * 0.75)) * (sourceScaling[1] or paladin_defaultScaling[1]) * ZONE_MODIFIER), min(quality1, quality2)\nend\n\nlocal function paladin_OnTalentUpdate()\n\t-- No need to do it before\n\tif UnitLevel(\"player\") < 80 then return end\n\n\t-- Divine Guardian\n\tlocal t = select(5, GetTalentInfo(2, 9))\n\tplayerScaling[1] = 1 + (t * 0.1)\n\tlib.ScheduleScalingBroadcast()\nend\n\nfunction OnEnableClass.PALADIN()\n\tEvents.PLAYER_TALENT_UPDATE = paladin_OnTalentUpdate\n\tpaladin_OnTalentUpdate()\nend\n\n---------------------\n-- Effects: Priest --\n---------------------\n\nPRIEST_DIVINEAEGIS_SPELLID = 47753\n\n-- [rank] = {spellid, level, baseValue, incValue}\nlocal priest_PWS_Ranks = {\n\t[1] = {17, 6, 44, 4},\n\t[2] = {592, 12, 88, 6},\n\t[3] = {600, 18, 158, 8},\n\t[4] = {3747, 24, 234, 10},\n\t[5] = {6065, 30, 301, 11},\n\t[6] = {6066, 36, 381, 13},\n\t[7] = {10898, 42, 484, 15},\n\t[8] = {10899, 48, 605, 17},\n\t[9] = {10900, 54, 763, 19},\n\t[10] = {10901, 60, 942, 21},\n\t[11] = {25217, 65, 1125, 18},\n\t[12] = {25218, 70, 1265, 20},\n\t[13] = {48065, 75, 1920, 30},\n\t[14] = {48066, 80, 2230, 0}\n}\n\n-- Public Scaling:\n--   Power Word: Shield: [spellid] = {base, spFactor}\n--   Divine Aegis: [47753] = healFactor\nlocal priest_defaultScaling = {[PRIEST_DIVINEAEGIS_SPELLID] = 0}\ndo\n\tfor k, v in pairs(priest_PWS_Ranks) do\n\t\tpriest_defaultScaling[v[1]] = {v[3], 0.809}\n\tend\nend\n\n-- Private Scaling\n--   Talents: \"TwinDisc\", \"ImpPWS\", \"FocusedPower\", \"DivineAegis\", \"BorrowedTime\", \"SpiritualHealing\"\n--\t Gear: \"4pcRaid9\", \"4pcRaid10\"\n--   Computed: base, sp, DA\n\nlocal function priest_PowerWordShield_Create(srcGUID, srcName, dstGUID, dstName, spellid, destEffects)\n\tlocal _, sp, quality1, sourceScaling, quality2 = UnitStatsAndScaling(srcGUID, 0.1, priest_defaultScaling, 0.1)\n\tsourceScaling[spellid] = sourceScaling[spellid] or priest_defaultScaling[spellid]\n\tif sourceScaling[spellid] then\n\t\treturn floor((sourceScaling[spellid][1] + sp * sourceScaling[spellid][2]) * ZONE_MODIFIER), min(quality1, quality2)\n\tend\nend\n\nlocal function priest_DivineAegis_Create(srcGUID, srcName, dstGUID, dstName, spellid, destEffects)\n\tlocal existing = 0\n\n\tif destEffects and destEffects[spellid] then\n\t\texisting = destEffects[spellid][3]\n\tend\n\n\tlocal charge = PopCharge(dstGUID, spellid)\n\n\tif charge == 0 then\n\t\treturn existing, 0.0\n\tend\n\n\tlocal destLevel = UnitDispatch(UnitLevel, dstGUID, dstName)\n\tlocal quality = 1.0\n\n\tif destLevel == 0 then\n\t\tdestLevel = 80\n\t\tquality = 0.4\n\tend\n\n\treturn min(destLevel * 125, existing + charge), quality\nend\n\n-- I officially HATE Divine Aegis (and Val'anyr for that matter) from now.\n-- After extensive testing and parsing/filtering a few hours of combat log, I found the following facts:\n-- \t* In MOST cases, every critical heal will trigger an AURA_APPLIED/AURA_REFRESHED event, even on multiple crits on\n--    one penance and with both AURA events being triggered after all critical heals. In rare cases, there is only one...\n--\t* If on your side the aura get removed before the next one is applied (double penance crit, both critical heals\n--    are first in your combat log), then AURA_APPLIED -> AURA_REMOVED by damage -> AURA_APPLIED for 2nd crit\n--\t* There are occasions where 2 Discipline priests apply two Divine Aegis auras. In general, the source of Divine Aegis\n--    is completely fucked up in those cases. If two priests channel penance at the same time, both crit, you can never say\n--    who will get the AURA_APPLIED event credited (yes, I found both the first-hitting priest as well as the second-hitting\n--    priest there!) and who the following AURA_REFRESHED events\nlocal function priest_DivineAegis_OnHealCrit(srcGUID, srcName, dstGUID, dstName, spellid, amount)\n\t-- We can do a direct access to Scaling here, since the callback is only in place if it was present\n\t-- in the first place\n\tPushCharge(dstGUID, PRIEST_DIVINEAEGIS_SPELLID, floor(amount * Scaling[srcGUID][PRIEST_DIVINEAEGIS_SPELLID]), 5.0)\nend\n\nlocal function priest_ApplyScaling(guid, level, baseFactor, spFactor, daFactor)\n\tlocal guidScaling\n\n\tif not Scaling[guid] then\n\t\tguidScaling = {}\n\t\tScaling[guid] = guidScaling\n\telse\n\t\tguidScaling = Scaling[guid]\n\tend\n\n\tguidScaling[PRIEST_DIVINEAEGIS_SPELLID] = daFactor\n\n\tif daFactor > 0 then\n\t\tCore.AddCombatTrigger(guid, \"OnHealCrit\", priest_DivineAegis_OnHealCrit)\n\telse\n\t\tCore.RemoveCombatTrigger(guid, \"OnHealCrit\", priest_DivineAegis_OnHealCrit)\n\tend\n\n\tlocal rankValue, rankSP\n\n\tfor k, v in pairs(priest_PWS_Ranks) do\n\t\tif v[2] <= level then\n\t\t\tif level == 80 then\n\t\t\t\trankValue = v[3] + v[4]\n\t\t\telse\n\t\t\t\t-- TODO\n\t\t\t\trankValue = v[3]\n\t\t\tend\n\n\t\t\t-- Based on the assumption that the decrease in sp coefficient is linear,\n\t\t\t-- only tested for level 80 though so far\n\t\t\t-- Cataclysm will help us get rid of this crap again\n\t\t\tif v[2] < (level - 5) then\n\t\t\t\tif level == 80 then\n\t\t\t\t\trankSP = max(spFactor * ((v[2] * 0.045228921) - 2.381389768), 0)\n\t\t\t\telse\n\t\t\t\t\trankSP = 0\n\t\t\t\tend\n\t\t\telse\n\t\t\t\trankSP = spFactor\n\t\t\tend\n\n\t\t\tguidScaling[v[1]] = {rankValue * baseFactor, rankSP}\n\t\tend\n\tend\nend\n\nlocal function priest_UpdatePlayerScaling()\n\tprivateScaling.base = ((1.0 + (privateScaling[\"TwinDisc\"] * 0.01) + (privateScaling[\"FocusedPower\"] * 0.02) + (privateScaling[\"SpiritualHealing\"] * 0.02)) * (1.0 + ((privateScaling[\"ImpPWS\"] + privateScaling[\"4pcRaid10\"]) * 0.05)))\n\n\tlocal spFactor = 0.807\n\tspFactor = spFactor + (privateScaling[\"BorrowedTime\"] * 0.08)\n\tspFactor = spFactor * (1.0 + (privateScaling[\"TwinDisc\"] * 0.01) + (privateScaling[\"FocusedPower\"] * 0.02) + (privateScaling[\"SpiritualHealing\"] * 0.02)) * (1.0 + ((privateScaling[\"ImpPWS\"] + privateScaling[\"4pcRaid10\"]) * 0.05))\n\tprivateScaling.sp = spFactor\n\tprivateScaling.DA = (privateScaling[\"DivineAegis\"] * 0.1) * (1 + (privateScaling[\"4pcRaid9\"] * 0.03))\n\tpriest_ApplyScaling(playerid, UnitLevel(\"player\"), privateScaling.base, privateScaling.sp, privateScaling.DA)\n\tlib.ScheduleScalingBroadcast()\nend\n\nlocal function priest_ScanTalents()\n\t-- Twin Disciplines\n\tlocal t = select(5, GetTalentInfo(1, 2))\n\tprivateScaling[\"TwinDisc\"] = t\n\n\t-- Improved Power Word: Shield\n\tt = select(5, GetTalentInfo(1, 9))\n\tprivateScaling[\"ImpPWS\"] = t\n\n\t-- Focused Power\n\tt = select(5, GetTalentInfo(1, 16))\n\tprivateScaling[\"FocusedPower\"] = t\n\n\t-- Divine Aegis\n\tt = select(5, GetTalentInfo(1, 24))\n\tprivateScaling[\"DivineAegis\"] = t\n\n\t-- Borrowed Time\n\tt = select(5, GetTalentInfo(1, 27))\n\tprivateScaling[\"BorrowedTime\"] = t\n\n\t-- Spiritual Healing\n\tt = select(5, GetTalentInfo(2, 16))\n\tprivateScaling[\"SpiritualHealing\"] = t\nend\n\nlocal function priest_ScanEquipment()\n\tlocal n = 0\n\n\t-- Crimson Acolyte Raiment's 4-piece Bonus\n\tif IsEquippedItem(50765) or IsEquippedItem(51178) or IsEquippedItem(51261) then\n\t\tn = 1\n\tend\n\tif IsEquippedItem(50767) or IsEquippedItem(51175) or IsEquippedItem(51264) then\n\t\tn = n + 1\n\tend\n\tif IsEquippedItem(50768) or IsEquippedItem(51176) or IsEquippedItem(51263) then\n\t\tn = n + 1\n\tend\n\tif IsEquippedItem(50766) or IsEquippedItem(51179) or IsEquippedItem(51260) then\n\t\tn = n + 1\n\tend\n\tif IsEquippedItem(50769) or IsEquippedItem(51177) or IsEquippedItem(51262) then\n\t\tn = n + 1\n\tend\n\n\tif n >= 4 then\n\t\tprivateScaling[\"4pcRaid10\"] = 1\n\n\t\t-- no way to have 4pcRaid9 now\n\t\tprivateScaling[\"4pcRaid9\"] = 0\n\t\treturn\n\telse\n\t\tprivateScaling[\"4pcRaid10\"] = 0\n\tend\n\n\tn = 0\n\n\t-- Velen's/Zabra's Raiment 4-piece Bonus\n\n\t-- UnitFactionGroup's first return value is NOT localized\n\tif UnitFactionGroup(\"player\") == \"Alliance\" then\n\t\tif IsEquippedItem(47914) or IsEquippedItem(47984) or IsEquippedItem(48035) then\n\t\t\tn = 1\n\t\tend\n\t\tif IsEquippedItem(47981) or IsEquippedItem(47987) or IsEquippedItem(48029) then\n\t\t\tn = n + 1\n\t\tend\n\t\tif IsEquippedItem(47936) or IsEquippedItem(47986) or IsEquippedItem(48031) then\n\t\t\tn = n + 1\n\t\tend\n\t\tif IsEquippedItem(47982) or IsEquippedItem(47983) or IsEquippedItem(48037) then\n\t\t\tn = n + 1\n\t\tend\n\t\tif IsEquippedItem(47980) or IsEquippedItem(47985) or IsEquippedItem(48033) then\n\t\t\tn = n + 1\n\t\tend\n\telse\n\t\tif IsEquippedItem(48068) or IsEquippedItem(48065) or IsEquippedItem(48058) then\n\t\t\tn = 1\n\t\tend\n\t\tif IsEquippedItem(48071) or IsEquippedItem(48062) or IsEquippedItem(48061) then\n\t\t\tn = n + 1\n\t\tend\n\t\tif IsEquippedItem(48070) or IsEquippedItem(48063) or IsEquippedItem(48060) then\n\t\t\tn = n + 1\n\t\tend\n\t\tif IsEquippedItem(48067) or IsEquippedItem(48066) or IsEquippedItem(48057) then\n\t\t\tn = n + 1\n\t\tend\n\t\tif IsEquippedItem(48069) or IsEquippedItem(48064) or IsEquippedItem(48059) then\n\t\t\tn = n + 1\n\t\tend\n\tend\n\n\tif n >= 4 then\n\t\tprivateScaling[\"4pcRaid9\"] = 1\n\telse\n\t\tprivateScaling[\"4pcRaid9\"] = 0\n\tend\nend\n\nlocal function priest_OnLevelUp()\n\tpriest_UpdatePlayerScaling()\nend\n\nlocal function priest_OnTalentUpdate()\n\tpriest_ScanTalents()\n\tpriest_UpdatePlayerScaling()\nend\n\nlocal function priest_OnEquipmentChangedDelayed()\n\tpriest_ScanEquipment()\n\tpriest_UpdatePlayerScaling()\nend\n\nlocal function priest_OnEquipmentChanged()\n\tCore:ScheduleUniqueTimer(\"priest_equip\", priest_OnEquipmentChangedDelayed, 0.7)\nend\n\nlocal function priest_OnScalingEncode()\n\treturn {UnitLevel(\"player\"), privateScaling.base, privateScaling.sp, privateScaling.DA}\nend\n\nfunction OnScalingDecode.PRIEST(guid, in_guidScaling)\n\tif #in_guidScaling ~= 4 then return end\n\tpriest_ApplyScaling(guid, unpack(in_guidScaling))\nend\n\nfunction OnEnableClass.PRIEST()\n\tEvents.PLAYER_LEVEL_UP = priest_OnLevelUp\n\tEvents.PLAYER_TALENT_UPDATE = priest_OnTalentUpdate\n\tEvents.PLAYER_EQUIPMENT_CHANGED = priest_OnEquipmentChanged\n\tEvents.OnScalingEncode = priest_OnScalingEncode\n\n\tpriest_ScanTalents()\n\tpriest_ScanEquipment()\n\tpriest_UpdatePlayerScaling()\nend\n\n---------------------\n-- Effects: Shaman --\n---------------------\n\n-- Public Scaling: { [AstralShift] }\n-- We default to 0.3, because quite frankly nobody will use less points except while leveling\nlocal shaman_defaultScaling = {0.3}\n\nlocal function shaman_AstralShift_Create(srcGUID, srcName, dstGUID, dstName, spellid, destEffects)\n\tlocal sourceScaling, quality = UnitScaling(srcGUID, shaman_defaultScaling, 0.7)\n\treturn -1, quality, sourceScaling[1]\nend\n\nlocal function shaman_AstralShift_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\n\tlocal total = absorbedRemaining + overkill\n\n\treturn floor(total * effectEntry[7]), true\nend\n\nlocal function shaman_OnTalentUpdate()\n\t-- Astral Shift\n\tlocal t = select(5, GetTalentInfo(1, 21))\n\tplayerScaling[1] = t * 0.1\n\tlib.ScheduleScalingBroadcast()\nend\n\nfunction OnEnableClass.SHAMAN()\n\tEvents.PLAYER_TALENT_UPDATE = shaman_OnTalentUpdate\n\tshaman_OnTalentUpdate()\nend\n\n----------------------\n-- Effects: Warlock --\n----------------------\n\n-- TODO: base leveling increase\nlocal warlock_Sacrifice_Spells = {\n\t[7812] = 305,\n\t[19438] = 510,\n\t[19440] = 770,\n\t[19441] = 1095,\n\t[19442] = 1470,\n\t[19443] = 1905,\n\t[27273] = 2855,\n\t[47985] = 6750,\n\t[47986] = 8365\n}\n\nlocal warlock_ShadowWard_Spells = {\n\t[6229] = 290,\n\t[11739] = 470,\n\t[11740] = 675,\n\t[28610] = 875,\n\t[47890] = 2750,\n\t[47891] = 3300\n}\n\n-- Public Scaling: { [DemonicBrutality] }\nlocal warlock_defaultScaling = {1.0}\n\n-- No downranking support here\nlocal function warlock_Sacrifice_Create(srcGUID, srcName, dstGUID, dstName, spellid, destEffects)\n\t-- Note that the source is the voidwalker, so dest is the warlock!\n\tlocal sourceScaling, quality = UnitScaling(dstGUID, warlock_defaultScaling, 0.4)\n\treturn floor(warlock_Sacrifice_Spells[spellid] * sourceScaling[1]), quality\nend\n\nlocal function warlock_ShadowWard_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\n\tif spellschool ~= SCHOOL_MASK_SHADOW then\n\t\treturn 0, true\n\tend\n\treturn generic_Hit(effectEntry, absorbedRemaining, overkill, spellschool)\nend\n\nlocal function warlock_OnTalentUpdate()\n\t-- Demonic Brutality\n\tlocal t = select(5, GetTalentInfo(2, 6))\n\tplayerScaling[1] = 1 + (t * 0.1)\n\tlib.ScheduleScalingBroadcast()\nend\n\nfunction OnEnableClass.WARLOCK()\n\tEvents.PLAYER_TALENT_UPDATE = warlock_OnTalentUpdate\n\twarlock_OnTalentUpdate()\nend\n\n--------------------\n-- Effects: Items --\n--------------------\n\nlocal function items_EssenceOfGossamer_Hit(effectEntry)\n\tif effectEntry[3] < 140 then\n\t\treturn effectEntry[3], false\n\tend\n\treturn 140, true\nend\n\nlocal function items_ArgussianCompass_Hit(effectEntry)\n\tif effectEntry[3] < 68 then\n\t\treturn effectEntry[3], false\n\tend\n\treturn 68, true\nend\n\nlocal function items_Valanyr_OnHeal(srcGUID, srcName, dstGUID, dstName, spellid, amount)\n\tPushCharge(dstGUID, 64413, floor(amount * 0.15), 5.0)\nend\n\nlocal function items_Valanyr_OnAuraApplied(srcGUID, srcName, dstGUID, dstName, spellid)\n\tCore.AddCombatTrigger(srcGUID, \"OnHeal\", items_Valanyr_OnHeal)\nend\n\nlocal function items_Valanyr_OnAuraRemoved(srcGUID, srcName, dstGUID, dstName, spellid)\n\tCore.RemoveCombatTrigger(srcGUID, \"OnHeal\", items_Valanyr_OnHeal)\nend\n\nlocal function items_Valanyr_Create(srcGUID, srcName, dstGUID, dstName, spellid, destEffects)\n\tlocal existing = 0\n\n\tif destEffects and destEffects[spellid] then\n\t\texisting = destEffects[spellid][3]\n\tend\n\n\tlocal charge = PopCharge(dstGUID, spellid)\n\tif charge == 0 then\n\t\treturn existing, 0.0\n\tend\n\n\t-- According to the blue post explaining the Val'anyr effect on introduction, all units are\n\t-- contributing to the same bubble with a cap of 20.000\n\treturn min(20000, existing + charge), 1.0\nend\n\nlocal function items_Stoicism_Create(srcGUID, srcName, dstGUID, dstName, spellid, destEffects)\n\tlocal maxHealth = UnitDispatch(UnitHealthMax, dstGUID, dstName)\n\tif maxHealth == 0 then\n\t\treturn 0, 0.0\n\tend\n\treturn floor(maxHealth * 0.2), 1.0\nend\n\n-----------------\n-- Data Tables --\n-----------------\n\nlocal mage_FireWard_Entry = {2.0, 30, generic_SpellScalingByTable_Create, mage_FireWard_Hit, mage_Absorb_Spells, 0.8053}\nlocal mage_FrostWard_Entry = {2.0, 30, generic_SpellScalingByTable_Create, mage_FrostWard_Hit, mage_Absorb_Spells, 0.8053}\nlocal mage_IceBarrier_Entry = {1.0, 60, mage_IceBarrier_Create, generic_Hit}\nlocal mage_ManaShield_Entry = {1.0, 60, generic_SpellScalingByTable_Create, generic_Hit, mage_Absorb_Spells, 0.8053}\nlocal priest_PWS_Entry = {1.0, 30, priest_PowerWordShield_Create, generic_Hit}\nlocal warlock_Sacrifice_Entry = {1.0, 30, generic_ConstantByTable_Create, generic_Hit, warlock_Sacrifice_Spells}\nlocal warlock_ShadowWard_Entry = {2.0, 30, generic_SpellScalingByTable_Create, warlock_ShadowWard_Hit, warlock_ShadowWard_Spells, 0.8053}\n\n-- INCOMPLETE\nCore.Effects = {\n\t-- Unknown Effect\n\t-- This is used when a known effect is applied, but it is impossible to properly account for it,\n\t-- for example if an AREA effect is applied with an unknown trigger\n\t[0] = {1.0, 0, function() return 0, 0.0 end, nil},\n\t[48707] = {3.0, 5, deathknight_AntiMagicShell_Create, deathknight_AntiMagicShell_Hit}, -- Anti-Magic Shell\n\t[50461] = {-3.0, 10, deathknight_AntiMagicZone_Create, deathknight_AntiMagicZone_Hit}, -- Anti-Magic Zone\n\n\t[52284] = {1.0, nil, function() return 0, 0.0 end, deathknight_WoN_Hit1}, -- Will of the Necropolis (Rank 1)\n\t[52285] = {1.0, nil, function() return 0, 0.0 end, deathknight_WoN_Hit2}, -- Will of the Necropolis (Rank 2)\n\t[52286] = {1.0, nil, function() return 0, 0.0 end, deathknight_WoN_Hit3}, -- Will of the Necropolis (Rank 3)\n\n\t[62606] = {1.1, 10, druid_SavageDefense_Create, druid_SavageDefense_Hit}, -- Savage Defense\n\t[543] = mage_FireWard_Entry, -- Fire Ward (rank 1)\n\t[8457] = mage_FireWard_Entry, -- Fire Ward (rank 2)\n\t[8458] = mage_FireWard_Entry, -- Fire Ward (rank 3)\n\t[10223] = mage_FireWard_Entry, -- Fire Ward (rank 4)\n\t[10225] = mage_FireWard_Entry, -- Fire Ward (rank 5)\n\t[27218] = mage_FireWard_Entry, -- Fire Ward (rank 6)\n\t[43010] = mage_FireWard_Entry, -- Fire Ward (rank 7)\n\t[6143] = mage_FrostWard_Entry, -- Frost Ward (rank 1)\n\t[8461] = mage_FrostWard_Entry, -- Frost Ward (rank 2)\n\t[8462] = mage_FrostWard_Entry, -- Frost Ward (rank 3)\n\t[10177] = mage_FrostWard_Entry, -- Frost Ward (rank 4)\n\t[28609] = mage_FrostWard_Entry, -- Frost Ward (rank 5)\n\t[32796] = mage_FrostWard_Entry, -- Frost Ward (rank 6)\n\t[43012] = mage_FrostWard_Entry, -- Frost Ward (rank 7)\n\t[11426] = mage_IceBarrier_Entry, -- Ice Barrier (rank 1)\n\t[13031] = mage_IceBarrier_Entry, -- Ice Barrier (rank 2)\n\t[13032] = mage_IceBarrier_Entry, -- Ice Barrier (rank 3)\n\t[13033] = mage_IceBarrier_Entry, -- Ice Barrier (rank 4)\n\t[27134] = mage_IceBarrier_Entry, -- Ice Barrier (rank 5)\n\t[33405] = mage_IceBarrier_Entry, -- Ice Barrier (rank 6)\n\t[43038] = mage_IceBarrier_Entry, -- Ice Barrier (rank 7)\n\t[43039] = mage_IceBarrier_Entry, -- Ice Barrier (rank 8)\n\t[1463] = mage_ManaShield_Entry, --  Mana shield (rank 1)\n\t[8494] = mage_ManaShield_Entry, --  Mana shield (rank 2)\n\t[8495] = mage_ManaShield_Entry, --  Mana shield (rank 3)\n\t[10191] = mage_ManaShield_Entry, --  Mana shield (rank 4)\n\t[10192] = mage_ManaShield_Entry, --  Mana shield (rank 5)\n\t[10193] = mage_ManaShield_Entry, --  Mana shield (rank 6)\n\t[27131] = mage_ManaShield_Entry, --  Mana shield (rank 7)\n\t[43019] = mage_ManaShield_Entry, --  Mana shield (rank 8)\n\t[43020] = mage_ManaShield_Entry, --  Mana shield (rank 9)\n\t[58597] = {1.0, 6, paladin_SacredShield_Create, generic_Hit}, -- Sacred Shield\n\t[17] = priest_PWS_Entry, -- Power Word: Shield (rank 1)\n\t[592] = priest_PWS_Entry, -- Power Word: Shield (rank 2)\n\t[600] = priest_PWS_Entry, -- Power Word: Shield (rank 3)\n\t[3747] = priest_PWS_Entry, -- Power Word: Shield (rank 4)\n\t[6065] = priest_PWS_Entry, -- Power Word: Shield (rank 5)\n\t[6066] = priest_PWS_Entry, -- Power Word: Shield (rank 6)\n\t[10898] = priest_PWS_Entry, -- Power Word: Shield (rank 7)\n\t[10899] = priest_PWS_Entry, -- Power Word: Shield (rank 8)\n\t[10900] = priest_PWS_Entry, -- Power Word: Shield (rank 9)\n\t[10901] = priest_PWS_Entry, -- Power Word: Shield (rank 10)\n\t[25217] = priest_PWS_Entry, -- Power Word: Shield (rank 11)\n\t[25218] = priest_PWS_Entry, -- Power Word: Shield (rank 12)\n\t[48065] = priest_PWS_Entry, -- Power Word: Shield (rank 13)\n\t[48066] = priest_PWS_Entry, -- Power Word: Shield (rank 14)\n\t[47753] = {1.0, 12, priest_DivineAegis_Create, generic_Hit}, -- Divine Aegis\n\t[52179] = {2.5, nil, shaman_AstralShift_Create, shaman_AstralShift_Hit}, -- Astral Shift\n\t[7812] = warlock_Sacrifice_Entry, -- Sacrifice (rank 1)\n\t[19438] = warlock_Sacrifice_Entry, -- Sacrifice (rank 2)\n\t[19440] = warlock_Sacrifice_Entry, -- Sacrifice (rank 3)\n\t[19441] = warlock_Sacrifice_Entry, -- Sacrifice (rank 4)\n\t[19442] = warlock_Sacrifice_Entry, -- Sacrifice (rank 5)\n\t[19443] = warlock_Sacrifice_Entry, -- Sacrifice (rank 6)\n\t[27273] = warlock_Sacrifice_Entry, -- Sacrifice (rank 7)\n\t[47985] = warlock_Sacrifice_Entry, -- Sacrifice (rank 8)\n\t[47986] = warlock_Sacrifice_Entry, -- Sacrifice (rank 9)\n\t[6229] = warlock_ShadowWard_Entry, -- Shadow Ward (rank 1)\n\t[11739] = warlock_ShadowWard_Entry, -- Shadow Ward (rank 1)\n\t[11740] = warlock_ShadowWard_Entry, -- Shadow Ward (rank 2)\n\t[28610] = warlock_ShadowWard_Entry, -- Shadow Ward (rank 3)\n\t[47890] = warlock_ShadowWard_Entry, -- Shadow Ward (rank 4)\n\t[47891] = warlock_ShadowWard_Entry, -- Shadow Ward (rank 5)\n\t[64413] = {1.0, 8, items_Valanyr_Create, generic_Hit}, -- Val'anyr (spellid of the created absorb effect)\n\t[60218] = {5.0, 10, function() return 4000, 1.0 end, items_EssenceOfGossamer_Hit}, -- Essence of Gossamer\n\t[71586] = {1.0, 10, function() return 6400, 1.0 end, generic_Hit}, -- Corroded Skeleton Key\n\t[36481] = {1.0, 4, function() return 100000, 1.0 end, generic_Hit}, -- Phaseshift Bulwark\n\t[57350] = {1.0, 6, function() return 1500, 1.0 end, generic_Hit}, -- Darkmoon Card: Illusion\n\t[17252] = {1.0, 1800, function() return 500, 1.0 end, generic_Hit}, -- Mark of the Dragon Lord\n\t[29506] = {1.0, 20, function() return 900, 1.0 end, generic_Hit}, -- The Burrower's Shell\n\t[31771] = {1.0, 20, function() return 440, 1.0 end, generic_Hit}, -- Runed Fungalcap\n\t[9800] = {1.0, 60, function() return 175, 1.0 end, generic_Hit}, -- Truesilver Champion\n\t[13234] = {1.0, 600, function() return 500, 1.0 end, generic_Hit}, -- Gnomish Harm Prevention Belt\n\t[30458] = {1.0, 8, function() return 4000, 1.0 end, generic_Hit}, -- Nigh Invulnerability Belt\n\t[27779] = {1.0, 30, function() return 350, 1.0 end, generic_Hit}, -- Divine Protection (Priest Dungeon Set 1/2 4pc bonus)\n\t[28810] = {1.0, 30, function() return 500, 1.0 end, generic_Hit}, -- Armor of Faith (Priest Raid Set 3 4pc bonus)\n\t[29674] = {1.0, nil, function() return 1000, 1.0 end, generic_Hit}, -- Lesser Ward of Shielding\n\t[29719] = {1.0, nil, function() return 4000, 1.0 end, generic_Hit}, -- Greater Ward of Shielding\n\t[29701] = {1.0, nil, function() return 4000, 1.0 end, generic_Hit}, -- Greater Ward of Shielding\n\t[28538] = {1.0, 120, function() return 3400, 1.0 end, Holy_Hit}, -- Major Holy Protection Potion\n\t[28537] = {1.0, 120, function() return 3400, 1.0 end, Shadow_Hit}, -- Major Shadow Protection Potion\n\t[28536] = {1.0, 120, function() return 3400, 1.0 end, Arcane_Hit}, -- Major Arcane Protection Potion\n\t[28513] = {1.0, 120, function() return 3400, 1.0 end, Nature_Hit}, -- Major Nature Protection Potion\n\t[28512] = {1.0, 120, function() return 3400, 1.0 end, Frost_Hit}, -- Major Frost Protection Potion\n\t[28511] = {1.0, 120, function() return 3400, 1.0 end, Fire_Hit}, -- Major Fire Protection Potion\n\t[7233] = {1.0, 120, function() return 1300, 1.0 end, Fire_Hit}, -- Fire Protection Potion\n\t[7239] = {1.0, 120, function() return 1300, 1.0 end, Frost_Hit}, -- Frost Protection Potion\n\t[7242] = {1.0, 120, function() return 1300, 1.0 end, Shadow_Hit}, -- Shadow Protection Potion\n\t[7245] = {1.0, 120, function() return 1300, 1.0 end, Holy_Hit}, -- Holy Protection Potion\n\t[7254] = {1.0, 120, function() return 1300, 1.0 end, Nature_Hit}, -- Nature Protection Potion\n\t[53915] = {1.0, 120, function() return 3100, 1.0 end, Shadow_Hit}, -- Mighty Shadow Protection Potion\n\t[53914] = {1.0, 120, function() return 3100, 1.0 end, Nature_Hit}, -- Mighty Nature Protection Potion\n\t[53913] = {1.0, 120, function() return 3100, 1.0 end, Frost_Hit}, -- Mighty Frost Protection Potion\n\t[53911] = {1.0, 120, function() return 3100, 1.0 end, Fire_Hit}, -- Mighty Fire Protection Potion\n\t[53910] = {1.0, 120, function() return 3100, 1.0 end, Arcane_Hit}, -- Mighty Arcane Protection Potion\n\t[17548] = {1.0, 120, function() return 2600, 1.0 end, Shadow_Hit}, --  Greater Shadow Protection Potion\n\t[17546] = {1.0, 120, function() return 2600, 1.0 end, Shadow_Hit}, -- Greater Nature Protection Potion\n\t[17545] = {1.0, 120, function() return 2600, 1.0 end, Shadow_Hit}, -- Greater Holy Protection Potion\n\t[17544] = {1.0, 120, function() return 2600, 1.0 end, Shadow_Hit}, -- Greater Frost Protection Potion\n\t[17543] = {1.0, 120, function() return 2600, 1.0 end, Shadow_Hit}, -- Greater Fire Protection Potion\n\t[17549] = {1.0, 120, function() return 2600, 1.0 end, Shadow_Hit}, -- Greater Arcane Protection Potion\n\t[28527] = {1.0, 15, function() return 1000, 1.0 end, generic_Hit}, -- Fel Blossom\n\t[29432] = {1.0, 3600, function() return 2000, 1.0 end, Fire_Hit}, -- Frozen Rune\n\t[25750] = {1.0, 15, function() return 151, 1.0 end, Physical_Hit}, -- Defiler's Talisman/Talisman of Arathor\n\t[25747] = {1.0, 15, function() return 344, 1.0 end, Physical_Hit}, -- Defiler's Talisman/Talisman of Arathor\n\t[25746] = {1.0, 15, function() return 394, 1.0 end, Physical_Hit}, -- Defiler's Talisman/Talisman of Arathor\n\t[23991] = {1.0, 15, function() return 550, 1.0 end, Physical_Hit}, -- Defiler's Talisman/Talisman of Arathor\n\t[30997] = {1.0, 300, function() return 1800, 1.0 end, Fire_Hit}, -- Pendant of Frozen Flame Usage\n\t[31002] = {1.0, 300, function() return 1800, 1.0 end, Arcane_Hit}, -- Pendant of the Null Rune\n\t[30999] = {1.0, 300, function() return 1800, 1.0 end, Nature_Hit}, -- Pendant of Withering\n\t[30994] = {1.0, 300, function() return 1800, 1.0 end, Frost_Hit}, -- Pendant of Thawing\n\t[31000] = {1.0, 300, function() return 1800, 1.0 end, Shadow_Hit}, -- Pendant of Shadow's End\n\t[23506] = {1.0, 20, function() return 1000, 1.0 end, generic_Hit}, -- Arena Grand Master\n\t[12561] = {1.0, 60, function() return 400, 1.0 end, Fire_Hit}, -- Goblin Construction Helmet\n\t[21956] = {1.0, 15, function() return 250, 1.0 end, Physical_Hit}, -- Mark of Resolution\n\t[4057] = {1.0, 60, function() return 250, 1.0 end, Fire_Hit}, -- Flame Deflector\n\t[4077] = {1.0, 60, function() return 300, 1.0 end, generic_Hit}, -- Ice Deflector\n\t[39228] = {1.0, 20, function() return 609, 1.0 end, generic_Hit}, -- Argussian Compass (may not be an actual absorb)\n\t[11657] = {1.0, 20, function() return 70, 1.0 end, generic_Hit}, -- Jang'thraze (Zul Farrak)\n\t[10368] = {1.0, 15, function() return 1000, 1.0 end, generic_Hit}, -- Uther's Strength\n\t[37515] = {1.0, 15, function() return 1000, 1.0 end, generic_Hit}, -- Warbringer Armor Proc\n\t[42137] = {1.0, 86400, function() return 1000, 1.0 end, generic_Hit}, -- Greater Rune of Warding Proc\n\t[26467] = {1.0, 30, function() return 1000, 1.0 end, generic_Hit}, -- Scarab Brooch\n\t[26470] = {1.0, 8, function() return 1000, 1.0 end, generic_Hit}, -- Scarab Brooch\n\t[27539] = {1.0, 6, function() return 1000, 1.0 end, generic_Hit}, -- Thick Obsidian Breatplate\n\t[54808] = {1.0, 12, function() return 1000, 1.0 end, generic_Hit}, -- Noise Machine Sonic Shield\n\t[55019] = {1.0, 12, function() return 1000, 1.0 end, generic_Hit}, -- Sonic Shield\n\t[70845] = {1.0, 10, items_Stoicism_Create, generic_Hit}, -- Stoicism (Warrior Raid Set 10 4pc bonus)\n\t[65686] = {1.0, 0, function() return 0, 0.0 end, nil}, -- Twin Val'kyr: Light Essence\n\t[65684] = {1.0, 0, function() return 0, 0.0 end, nil} -- Twin Val'kyr: Dark Essence\n}\n\nCore.AreaTriggers = {\n\t[51052] = 50461, -- Anti-Magic Zone\n\t[62618] = 81781 -- Power Word: Barrier\n}\n\nCore.CombatTriggers = {\n\tOnAuraApplied = {\n\t\t[64411] = items_Valanyr_OnAuraApplied\n\t},\n\tOnAuraRemoved = {\n\t\t[64411] = items_Valanyr_OnAuraRemoved\n\t},\n\tOnHeal = {},\n\tOnHealCrit = {}\n}\n\n----------------\n-- Initialize --\n----------------\n\nif not Core.Available then\n\tCore.RegisterEvent(\"PLAYER_ENTERING_WORLD\")\nelse\n\tCore.Enable()\nend\n\n------------------------\n-- Callback Reference --\n------------------------\n\n-- EffectApplied\n-- (srcGUID, srcName, dstGUID, dstName, spellid, value, quality, duration)\n-- The effect-individual messages get sent on visible and non-visible effects\n\n-- EffectUpdated\n-- (guid, spellid, value, [duration, only if refreshed])\n\n-- EffectRemoved\n-- (guid, spellid)\n\n-- Whenever the unit that radiates an AREA effect is created (visible/non-visible)\n-- Note that the actual effect on the unit that absorbs damage casues an\n-- EffectApplied/EffectRemoved message, but not EffectUpdated (instead AreaUpdated)\n-- The rationale behind this is performance, since we cannot update every unit afflicted\n-- by the area effect on every hit. Therefore, we have the shared entry in the activeEffects\n-- table of each unit, and will handle it the same way when exporting - separately from each\n-- others.\n\n-- AreaCreated\n-- (srcGUID, srcName, triggerGUID, spellid, value, quality)\n\n-- AreaUpdated\n-- (triggerGUID, value)\n\n-- AreaCleared\n-- (triggerGUID)\n\n-- UnitUpdated\n-- (guid, value, quality)\n-- Only for VISIBLE changes on the total amount\n\n-- UnitCleared\n-- (guid)\n-- Everytime a unit gets cleared from all absorb effects (quality reset)\n-- including non-visible effects"
  },
  {
    "path": "DBM-Core/commonlocal.cn.lua",
    "content": "-- CL.Core\n-- Diablohu(diablohudream@gmail.com)\n-- yleaf(yaroot@gmail.com)\n-- Mini Dragon(projecteurs@gmail.com) <流浪者酒馆-Brilla@金色平原> 20230111\n\nif GetLocale() ~= \"zhCN\" then return end\nif not DBM_COMMON_L then DBM_COMMON_L = {} end\n\nlocal CL = DBM_COMMON_L\n\n-- 基本\nCL.NONE\t\t\t\t\t\t\t\t= \"无\"\nCL.RANDOM\t\t\t\t\t\t\t= \"随机\"\nCL.NEXT\t\t\t\t\t\t\t\t= \"下一个 %s\"\nCL.COOLDOWN\t\t\t\t\t\t\t= \"%s 冷却\"\nCL.UNKNOWN\t\t\t\t\t\t\t= \"未知\"\nCL.INCOMING\t\t\t\t\t\t\t= \"%s 即将到来\"\nCL.INTERMISSION\t\t\t\t\t\t= \"转场\"\nCL.NO_DEBUFF\t\t\t\t\t\t= \"没有 %s\"\nCL.ALLY\t\t\t\t\t\t\t\t= \"队友\"\nCL.ALLIES\t\t\t\t\t\t\t= \"人群\"\nCL.CLEAR\t\t\t\t\t\t\t= \"清空\"\nCL.SAFE\t\t\t\t\t\t\t\t= \"安全\"\nCL.NOTSAFE\t\t\t\t\t\t\t= \"不安全\"\nCL.SEASONAL\t\t\t\t\t\t\t= \"季节性\"\nCL.YOU\t\t\t\t\t\t\t\t= \"你\"\n-- 移动/方位\nCL.LEFT\t\t\t\t\t\t\t\t= \"左\"\nCL.RIGHT\t\t\t\t\t\t\t= \"右\"\nCL.BOTH\t\t\t\t\t\t\t\t= \"两边\"\nCL.BEHIND\t\t\t\t\t\t\t= \"后面\"\nCL.BACK\t\t\t\t\t\t\t\t= \"后\"\nCL.SIDE\t\t\t\t\t\t\t\t= \"旁边\"\nCL.TOP\t\t\t\t\t\t\t\t= \"上\"\nCL.BOTTOM\t\t\t\t\t\t\t= \"下\"\nCL.MIDDLE\t\t\t\t\t\t\t= \"中\"\nCL.FRONT\t\t\t\t\t\t\t= \"前\"\nCL.EAST\t\t\t\t\t\t\t\t= \"东\"\nCL.WEST\t\t\t\t\t\t\t\t= \"西\"\nCL.NORTH\t\t\t\t\t\t\t= \"北\"\nCL.SOUTH\t\t\t\t\t\t\t= \"南\"\nCL.SHIELD\t\t\t\t\t\t\t= \"护盾\"\nCL.PILLAR\t\t\t\t\t\t\t= \"柱子\"\nCL.SHELTER\t\t\t\t\t\t\t= \"遮挡\"\nCL.EDGE\t\t\t\t\t\t\t\t= \"房间边缘\"\nCL.FAR_AWAY\t\t\t\t\t\t\t= \"远离\"\nCL.PIT\t\t\t\t\t\t\t\t= \"洞\"\n-- 机制\nCL.BOMB\t\t\t\t\t\t\t\t= \"炸弹\"\nCL.BOMBS\t\t\t\t\t\t\t= \"炸弹\"\nCL.ORB\t\t\t\t\t\t\t\t= \"球\"\nCL.ORBS\t\t\t\t\t\t\t\t= \"球\"\nCL.RING\t\t\t\t\t\t\t\t= \"环\"\nCL.RINGS\t\t\t\t\t\t\t= \"环\"\nCL.CHEST\t\t\t\t\t\t\t= \"奖励宝箱\"\nCL.ADD\t\t\t\t\t\t\t\t= \"小怪\"\nCL.ADDS\t\t\t\t\t\t\t\t= \"小怪\"\nCL.ADDCOUNT\t\t\t\t\t\t\t= \"小怪 %s\"\nCL.BIG_ADD\t\t\t\t\t\t\t= \"大怪\"\nCL.BOSS\t\t\t\t\t\t\t\t= \"Boss\"\nCL.ENEMIES\t\t\t\t\t\t\t= \"敌人\"\nCL.BREAK_LOS\t\t\t\t\t\t= \"卡视角\"\nCL.RESTORE_LOS\t\t\t\t\t\t= \"恢复视角\"\nCL.BOSSTOGETHER\t\t\t\t\t\t= \"拉近Boss\"\nCL.BOSSAPART\t\t\t\t\t\t= \"拉开Boss\"\nCL.MINDCONTROL\t\t\t\t\t\t= \"心控\"\nCL.TANKCOMBO\t\t\t\t\t\t= \"坦克连击\"\nCL.TANKCOMBOC\t\t\t\t\t\t= \"坦克连击 (%s)\"\nCL.AOEDAMAGE\t\t\t\t\t\t= \"AOE 伤害\"\nCL.GROUPSOAK\t\t\t\t\t\t= \"群体吸收\"\nCL.GROUPSOAKS\t\t\t\t\t\t= \"群体吸收\"\n"
  },
  {
    "path": "DBM-Core/commonlocal.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nif not DBM_COMMON_L then DBM_COMMON_L = {} end\n\nlocal CL = DBM_COMMON_L\n\nCL.NONE\t\t\t\t\t\t= \"Nichts\"\nCL.RANDOM\t\t\t\t\t= \"Zufällig\"\nCL.NEXT\t\t\t\t\t\t= \"Nächste %s\"\nCL.COOLDOWN\t\t\t\t\t= \"%s CD\"\nCL.UNKNOWN\t\t\t\t\t= \"unbekannt\"\nCL.LEFT\t\t\t\t\t\t= \"Links\"\nCL.RIGHT\t\t\t\t\t= \"Rechts\"\nCL.BOTH\t\t\t\t\t\t= \"Beide\"\nCL.BACK\t\t\t\t\t\t= \"Hinten\"\nCL.SIDE\t\t\t\t\t\t= \"Seite\"\nCL.TOP\t\t\t\t\t\t= \"Oben\"\nCL.BOTTOM\t\t\t\t\t= \"Unten\"\nCL.MIDDLE\t\t\t\t\t= \"Mitte\"\nCL.FRONT\t\t\t\t\t= \"Vorne\"\nCL.EAST\t\t\t\t\t\t= \"Osten\"\nCL.WEST\t\t\t\t\t\t= \"Westen\"\nCL.NORTH\t\t\t\t\t= \"Norden\"\nCL.SOUTH\t\t\t\t\t= \"Süden\"\nCL.INTERMISSION\t\t\t\t= \"Übergang\"\nCL.ORB\t\t\t\t\t\t= \"Kugel\"\nCL.CHEST\t\t\t\t\t= \"Kiste\"\nCL.NO_DEBUFF\t\t\t\t= \"Kein %s\"\nCL.ALLY\t\t\t\t\t\t= \"Verbündeten\"\nCL.ADD\t\t\t\t\t\t= \"Add\"\nCL.ADDS\t\t\t\t\t\t= \"Adds\"\nCL.EDGE\t\t\t\t\t\t= \"Rand des Raums\"\nCL.FAR_AWAY\t\t\t\t\t= \"Weit weg\"\nCL.BREAK_LOS\t\t\t\t= \"Meide Sichtlinie\"\nCL.SAFE\t\t\t\t\t\t= \"Sicher\"\nCL.SHIELD\t\t\t\t\t= \"Schutzschild\"\nCL.INCOMING\t\t\t\t\t= \"%s kommt\"\nCL.BOSSTOGETHER\t\t\t\t= \"Bosses Together\"\nCL.BOSSAPART\t\t\t\t= \"Bosses Apart\"\nCL.YOU\t\t\t\t\t\t= \"Ihr\"\n"
  },
  {
    "path": "DBM-Core/commonlocal.en.lua",
    "content": "DBM_COMMON_L = {}\n\nlocal CL = DBM_COMMON_L\n\n--General\nCL.NONE\t\t\t\t\t\t\t\t= \"None\"\nCL.RANDOM\t\t\t\t\t\t\t= \"Random\"\nCL.UNKNOWN\t\t\t\t\t\t\t= \"Unknown\"--UNKNOWN which is \"Unknown\" (does u vs U matter?)\nCL.NEXT\t\t\t\t\t\t\t\t= \"Next %s\"\nCL.COOLDOWN\t\t\t\t\t\t\t= \"%s CD\"\nCL.INCOMING\t\t\t\t\t\t\t= \"%s Incoming\"\nCL.INTERMISSION\t\t\t\t\t\t= \"Intermission\"--No blizz global for this, and will probably be used in most end tier fights with intermission phases\nCL.NO_DEBUFF\t\t\t\t\t\t= \"Not %s\"--For use in places like info frame where you put \"Not Spellname\"\nCL.ALLY\t\t\t\t\t\t\t\t= \"Ally\"--Such as \"Move to Ally\"\nCL.ALLIES\t\t\t\t\t\t\t= \"Allies\"--Such as \"Move to Allies\"\nCL.CLEAR\t\t\t\t\t\t\t= \"Clear\"\nCL.SAFE\t\t\t\t\t\t\t\t= \"Safe\"\nCL.NOTSAFE\t\t\t\t\t\t\t= \"Not Safe\"\nCL.SEASONAL\t\t\t\t\t\t\t= \"Seasonal\"--Used for option headers to label options that apply to seasonal mechanics (Such as season of mastery on classic era)\nCL.YOU\t\t\t\t\t\t\t\t= \"You\"\n--Movements/Places\nCL.LEFT\t\t\t\t\t\t\t\t= \"Left\"\nCL.RIGHT\t\t\t\t\t\t\t= \"Right\"\nCL.BOTH\t\t\t\t\t\t\t\t= \"Both\"\nCL.BEHIND\t\t\t\t\t\t\t= \"Behind\"\nCL.BACK\t\t\t\t\t\t\t\t= \"Back\"--Back as in back of the room, not back as in body part\nCL.SIDE\t\t\t\t\t\t\t\t= \"Side\"--Side as in move to the side\nCL.TOP\t\t\t\t\t\t\t\t= \"Top\"--Top as in up top, not BDSM\nCL.BOTTOM\t\t\t\t\t\t\t= \"Bottom\"--Bottom as in at the bottom, not BDSM\nCL.MIDDLE\t\t\t\t\t\t\t= \"Middle\"\nCL.FRONT\t\t\t\t\t\t\t= \"Front\"\nCL.EAST\t\t\t\t\t\t\t\t= \"East\"\nCL.WEST\t\t\t\t\t\t\t\t= \"West\"\nCL.NORTH\t\t\t\t\t\t\t= \"North\"\nCL.SOUTH\t\t\t\t\t\t\t= \"South\"\nCL.SHIELD\t\t\t\t\t\t\t= \"Shield\"\nCL.PILLAR\t\t\t\t\t\t\t= \"Pillar\"\nCL.SHELTER\t\t\t\t\t\t\t= \"Shelter\"\nCL.EDGE\t\t\t\t\t\t\t\t= \"Room Edge\"\nCL.FAR_AWAY\t\t\t\t\t\t\t= \"Far Away\"\nCL.PIT\t\t\t\t\t\t\t\t= \"Pit\"--Pit, as in hole in ground\n--Mechanics\nCL.BOMB\t\t\t\t\t\t\t\t= \"Bomb\"\nCL.BOMBS\t\t\t\t\t\t\t= \"Bombs\"\nCL.ORB\t\t\t\t\t\t\t\t= \"Orb\"\nCL.ORBS\t\t\t\t\t\t\t\t= \"Orbs\"\nCL.RING\t\t\t\t\t\t\t\t= \"Ring\"\nCL.RINGS\t\t\t\t\t\t\t= \"Rings\"\nCL.CHEST\t\t\t\t\t\t\t= \"Chest\"--As in Treasure 'Chest'. Not Chest as in body part.\nCL.ADD\t\t\t\t\t\t\t\t= \"Add\"--A fight Add as in \"boss spawned extra adds\"\nCL.ADDS\t\t\t\t\t\t\t\t= \"Adds\"\nCL.ADDCOUNT\t\t\t\t\t\t\t= \"Add %s\"--ie, Add 1, Add 2, Add 3\nCL.BIG_ADD\t\t\t\t\t\t\t= \"Big Add\"\nCL.BOSS\t\t\t\t\t\t\t\t= \"Boss\"\nCL.ENEMIES\t\t\t\t\t\t\t= \"Enemies\"\nCL.BREAK_LOS\t\t\t\t\t\t= \"Break LOS\"\nCL.RESTORE_LOS\t\t\t\t\t\t= \"Maintain LOS\"\nCL.BOSSTOGETHER\t\t\t\t\t\t= \"Bosses Together\"\nCL.BOSSAPART\t\t\t\t\t\t= \"Bosses Apart\"\nCL.MINDCONTROL\t\t\t\t\t\t= \"Mind Control\"\nCL.TANKCOMBO\t\t\t\t\t\t= \"Tank Combo\"\nCL.TANKCOMBOC\t\t\t\t\t\t= \"Tank Combo (%s)\"\nCL.AOEDAMAGE\t\t\t\t\t\t= \"AOE Damage\"\nCL.GROUPSOAK\t\t\t\t\t\t= \"Group Soak\"\nCL.GROUPSOAKS\t\t\t\t\t\t= \"Group Soaks\"\n\n--Journal Icons should not be copied to non english locals, do not include this section\nlocal EJIconPath = \"AddOns\\\\DBM-Core\\\\textures\"\n--Role Icons\nCL.TANK_ICON\t\t\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:20:20:0:0:255:66:6:21:7:27|t\" -- NO TRANSLATE\nCL.DAMAGE_ICON\t\t\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:20:20:0:0:255:66:39:55:7:27|t\" -- NO TRANSLATE\nCL.HEALER_ICON\t\t\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:20:20:0:0:255:66:70:86:7:27|t\" -- NO TRANSLATE\n\nCL.TANK_ICON_SMALL\t\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:12:12:0:0:255:66:6:21:7:27|t\" -- NO TRANSLATE\nCL.DAMAGE_ICON_SMALL\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:12:12:0:0:255:66:39:55:7:27|t\" -- NO TRANSLATE\nCL.HEALER_ICON_SMALL\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:12:12:0:0:255:66:70:86:7:27|t\" -- NO TRANSLATE\n--Importance Icons\nCL.HEROIC_ICON\t\t\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:22:22:0:0:255:66:102:118:7:27|t\" -- NO TRANSLATE\nCL.DEADLY_ICON\t\t\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:22:22:0:0:255:66:133:153:7:27|t\" -- NO TRANSLATE\nCL.IMPORTANT_ICON\t\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:20:20:0:0:255:66:168:182:7:27|t\" -- NO TRANSLATE\nCL.MYTHIC_ICON\t\t\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:22:22:0:0:255:66:133:153:40:58|t\" -- NO TRANSLATE\n\nCL.HEROIC_ICON_SMALL\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:14:14:0:0:255:66:102:118:7:27|t\" -- NO TRANSLATE\nCL.DEADLY_ICON_SMALL\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:14:14:0:0:255:66:133:153:7:27|t\" -- NO TRANSLATE\nCL.IMPORTANT_ICON_SMALL\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:12:12:0:0:255:66:168:182:7:27|t\" -- NO TRANSLATE\n--Type Icons\nCL.INTERRUPT_ICON\t\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:20:20:0:0:255:66:198:214:7:27|t\" -- NO TRANSLATE\nCL.MAGIC_ICON\t\t\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:20:20:0:0:255:66:229:247:7:27|t\" -- NO TRANSLATE\nCL.CURSE_ICON\t\t\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:20:20:0:0:255:66:6:21:40:58|t\" -- NO TRANSLATE\nCL.POISON_ICON\t\t\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:20:20:0:0:255:66:39:55:40:58|t\" -- NO TRANSLATE\nCL.DISEASE_ICON\t\t\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:20:20:0:0:255:66:70:86:40:58|t\" -- NO TRANSLATE\nCL.ENRAGE_ICON\t\t\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:20:20:0:0:255:66:102:118:40:58|t\" -- NO TRANSLATE\nCL.BLEED_ICON\t\t\t\t\t\t= \"|TInterface\\\\\" .. EJIconPath .. \"\\\\UI-EJ-Icons.blp:20:20:0:0:255:66:168:182:40:58|t\" -- NO TRANSLATE\n"
  },
  {
    "path": "DBM-Core/commonlocal.es.lua",
    "content": "if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\nif not DBM_COMMON_L then DBM_COMMON_L = {} end\n\nlocal CL = DBM_COMMON_L\n\nCL.NONE\t\t\t\t\t\t= \"Ninguno\"\nCL.RANDOM\t\t\t\t\t= \"Aleatorio\"\nCL.NEXT\t\t\t\t\t\t= \"Siguiente %s\"\nCL.COOLDOWN\t\t\t\t\t= \"%s TdR\"\nCL.UNKNOWN\t\t\t\t\t= \"Desconocido\"--UNKNOWN which is \"Unknown\" (does u vs U matter?)\nCL.LEFT\t\t\t\t\t\t= \"Izquierda\"\nCL.RIGHT\t\t\t\t\t= \"Derecha\"\nCL.BOTH\t\t\t\t\t\t= \"Ambos\"\nCL.BEHIND\t\t\t\t\t= \"Detrás\"\nCL.BACK\t\t\t\t\t\t= \"Atrás\"--BACK\nCL.SIDE\t\t\t\t\t\t= \"Lado\"\nCL.TOP\t\t\t\t\t\t= \"Arriba\"\nCL.BOTTOM\t\t\t\t\t= \"Abajo\"\nCL.MIDDLE\t\t\t\t\t= \"Medio\"\nCL.FRONT\t\t\t\t\t= \"Delante\"\nCL.EAST\t\t\t\t\t\t= \"Este\"\nCL.WEST\t\t\t\t\t\t= \"Oeste\"\nCL.NORTH\t\t\t\t\t= \"Norte\"\nCL.SOUTH\t\t\t\t\t= \"Sur\"\nCL.INTERMISSION\t\t\t\t= \"Interfase\"--No blizz global for this, and will probably be used in most end tier fights with intermission phases\nCL.ORB\t\t\t\t\t\t= \"Orbe\"\nCL.ORBS\t\t\t\t\t\t= \"Orbes\"\nCL.CHEST\t\t\t\t\t= \"Cofre\"--As in Treasure 'Chest'. Not Chest as in body part.\nCL.NO_DEBUFF\t\t\t\t= \"Sin %s\"--For use in places like info frame where you put \"Not Spellname\"\nCL.ALLY\t\t\t\t\t\t= \"un aliado\"--Such as \"Move to Ally\"\nCL.ALLIES\t\t\t\t\t= \"tus aliados\"--Such as \"Move to Allies\"\nCL.ADD\t\t\t\t\t\t= \"Esbirro\"--A fight Add as in \"boss spawned extra adds\" - must check\nCL.ADDS\t\t\t\t\t\t= \"Esbirros\"\nCL.BIG_ADD\t\t\t\t\t= \"Esbirro grande\"\nCL.BOSS\t\t\t\t\t\t= \"Jefe\"\nCL.EDGE\t\t\t\t\t\t= \"los bordes de la sala\"\nCL.FAR_AWAY\t\t\t\t\t= \"alejarte\"\nCL.BREAK_LOS\t\t\t\t= \"romper la línea de mira\"\nCL.RESTORE_LOS\t\t\t\t= \"la línea de mira\"\nCL.SAFE\t\t\t\t\t\t= \"Zona segura\"\nCL.NOTSAFE\t\t\t\t\t= \"Zona no segura\"\nCL.SHIELD\t\t\t\t\t= \"Escudo\"\nCL.PILLAR\t\t\t\t\t= \"Pilar\"\nCL.INCOMING\t\t\t\t\t= \"%s en breve\"\nCL.BOSSTOGETHER\t\t\t\t= \"Jefes juntos\"\nCL.BOSSAPART\t\t\t\t= \"Jefes separados\"\n"
  },
  {
    "path": "DBM-Core/commonlocal.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\nif not DBM_COMMON_L then DBM_COMMON_L = {} end\n\nlocal CL = DBM_COMMON_L\n\nCL.NONE\t\t\t\t\t\t\t\t= \"Aucun\"\nCL.RANDOM\t\t\t\t\t\t\t= \"Aléatoire\"\nCL.NEXT\t\t\t\t\t\t\t\t= \"Prochain %s\"\nCL.COOLDOWN\t\t\t\t\t\t\t= \"CD %s\"\nCL.UNKNOWN\t\t\t\t\t\t\t= \"Inconnu\"--UNKNOWN which is \"Unknown\" (does u vs U matter?)\nCL.LEFT\t\t\t\t\t\t\t\t= \"Gauche\"\nCL.RIGHT\t\t\t\t\t\t\t= \"Droite\"\nCL.BOTH\t\t\t\t\t\t\t\t= \"Les deux\"\nCL.BEHIND\t\t\t\t\t\t\t= \"Derrière\"\nCL.BACK\t\t\t\t\t\t\t\t= \"Arrière\"--Back as in back of the room, not back as in body part\nCL.SIDE\t\t\t\t\t\t\t\t= \"Coté\"--Side as in move to the side\nCL.TOP\t\t\t\t\t\t\t\t= \"Haut\"--Top as in up top, not BDSM\nCL.BOTTOM\t\t\t\t\t\t\t= \"Bas\"--Bottom as in at the bottom, not BDSM\nCL.MIDDLE\t\t\t\t\t\t\t= \"Milieu\"\nCL.FRONT\t\t\t\t\t\t\t= \"Avant\"\nCL.EAST\t\t\t\t\t\t\t\t= \"Est\"\nCL.WEST\t\t\t\t\t\t\t\t= \"Ouest\"\nCL.NORTH\t\t\t\t\t\t\t= \"Nord\"\nCL.SOUTH\t\t\t\t\t\t\t= \"Sud\"\nCL.INTERMISSION\t\t\t\t\t\t= \"Inter-phase\"--No blizz global for this, and will probably be used in most end tier fights with intermission phases\nCL.ORB\t\t\t\t\t\t\t\t= \"Orbe\"\nCL.ORBS\t\t\t\t\t\t\t\t= \"Orbes\"\nCL.RING\t\t\t\t\t\t\t\t= \"Anneau\"\nCL.RINGS\t\t\t\t\t\t\t= \"Anneaux\"\nCL.CHEST\t\t\t\t\t\t\t= \"Coffre\"--As in Treasure 'Chest'. Not Chest as in body part.\nCL.NO_DEBUFF\t\t\t\t\t\t= \"Pas %s\"--For use in places like info frame where you put \"Not Spellname\"\nCL.ALLY\t\t\t\t\t\t\t\t= \"Allié\"--Such as \"Move to Ally\"\nCL.ALLIES\t\t\t\t\t\t\t= \"Alliés\"--Such as \"Move to Allies\"\nCL.ADD\t\t\t\t\t\t\t\t= \"Add\"--A fight Add as in \"boss spawned extra adds\"\nCL.ADDS\t\t\t\t\t\t\t\t= \"Adds\"\nCL.BIG_ADD\t\t\t\t\t\t\t= \"Big Add\"\nCL.BOSS\t\t\t\t\t\t\t\t= \"Boss\"\nCL.EDGE\t\t\t\t\t\t\t\t= \"Bord de la pièce\"\nCL.FAR_AWAY\t\t\t\t\t\t\t= \"Très loin\"\nCL.BREAK_LOS\t\t\t\t\t\t= \"Rompre LOS\"\nCL.RESTORE_LOS\t\t\t\t\t\t= \"Maintenir LOS\"\nCL.SAFE\t\t\t\t\t\t\t\t= \"Sûr\"\nCL.NOTSAFE\t\t\t\t\t\t\t= \"Pas sûr\"\nCL.SHIELD\t\t\t\t\t\t\t= \"Bouclier\"\nCL.PILLAR\t\t\t\t\t\t\t= \"Pilier\"\nCL.SHELTER\t\t\t\t\t\t\t= \"Abris\"\nCL.INCOMING\t\t\t\t\t\t\t= \"%s arrive\"\nCL.BOSSTOGETHER\t\t\t\t\t\t= \"Bosses réunis\"\nCL.BOSSAPART\t\t\t\t\t\t= \"Bosses séparés\"\nCL.TANKCOMBO\t\t\t\t\t\t= \"Tank Combo\"\nCL.AOEDAMAGE\t\t\t\t\t\t= \"Dégâts de zone\"\nCL.SEASONAL\t\t\t\t\t\t\t= \"Seasonal\"--Used for option headers to label options that apply to seasonal mechanics (Such as season of mastery on classic era)\nCL.YOU\t\t\t\t\t\t\t\t= \"Vous\"\n"
  },
  {
    "path": "DBM-Core/commonlocal.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nif not DBM_COMMON_L then DBM_COMMON_L = {} end\n\nlocal CL = DBM_COMMON_L\n\n--General\nCL.NONE\t\t\t\t\t\t= \"없음\"\nCL.RANDOM\t\t\t\t\t= \"무작위\"\nCL.UNKNOWN\t\t\t\t\t= \"알 수 없음\"--UNKNOWN which is \"Unknown\" (does u vs U matter?)\nCL.NEXT\t\t\t\t\t\t= \"다음 %s\"\nCL.COOLDOWN\t\t\t\t\t= \"%s 쿨타임\"\nCL.INCOMING\t\t\t\t\t= \"%s 등장\"\nCL.INTERMISSION\t\t\t\t= \"사잇 단계\"\nCL.NO_DEBUFF\t\t\t\t= \"%s 없음\"--For use in places like info frame where you put \"Not Spellname\"\nCL.ALLY\t\t\t\t\t\t= \"공대원\"--Such as \"Move to Ally\"\nCL.ALLIES\t\t\t\t\t= \"공대원\"--Such as \"Move to Allies\"\nCL.CLEAR\t\t\t\t\t= \"지움\"\nCL.SAFE\t\t\t\t\t\t= \"안전함\"\nCL.NOTSAFE\t\t\t\t\t= \"위험함\"\nCL.SEASONAL\t\t\t\t\t= \"시즌제\"--Used for option headers to label options that apply to seasonal mechanics (Such as season of mastery on classic era)\n--Movements/Places\nCL.LEFT\t\t\t\t\t\t= \"왼쪽\"\nCL.RIGHT\t\t\t\t\t= \"오른쪽\"\nCL.BOTH\t\t\t\t\t\t= \"양쪽\"\nCL.BEHIND\t\t\t\t\t= \"뒤쪽\"\nCL.BACK\t\t\t\t\t\t= \"뒤쪽\"--Back as in back of the room, not back as in body part\nCL.SIDE\t\t\t\t\t\t= \"옆쪽\"--Side as in move to the side\nCL.TOP\t\t\t\t\t\t= \"위쪽\"--Top as in up top, not BDSM\nCL.BOTTOM\t\t\t\t\t= \"아래쪽\"--Bottom as in at the bottom, not BDSM\nCL.MIDDLE\t\t\t\t\t= \"가운데\"\nCL.FRONT\t\t\t\t\t= \"앞쪽\"\nCL.EAST\t\t\t\t\t\t= \"동쪽\"\nCL.WEST\t\t\t\t\t\t= \"서쪽\"\nCL.NORTH\t\t\t\t\t= \"북쪽\"\nCL.SOUTH\t\t\t\t\t= \"남쪽\"\nCL.SHIELD\t\t\t\t\t= \"보호막\"\nCL.PILLAR\t\t\t\t\t= \"기둥\"\nCL.SHELTER\t\t\t\t\t= \"안전한 곳\"\nCL.EDGE\t\t\t\t\t\t= \"구석\"\nCL.FAR_AWAY\t\t\t\t\t= \"먼 곳\"\nCL.PIT\t\t\t\t\t\t= \"구멍\"--Pit, as in hole in ground\n--Mechanics\nCL.BOMB\t\t\t\t\t\t= \"폭탄\"\nCL.BOMBS\t\t\t\t\t= \"폭탄\"\nCL.ORB\t\t\t\t\t\t= \"구슬\"\nCL.ORBS\t\t\t\t\t\t= \"구슬\"\nCL.RING\t\t\t\t\t\t= \"고리\"\nCL.RINGS\t\t\t\t\t= \"고리\"\nCL.CHEST\t\t\t\t\t= \"상자\"--As in Treasure 'Chest'. Not Chest as in body part.\nCL.ADD\t\t\t\t\t\t= \"쫄\"--A fight Add as in \"boss spawned extra adds\"\nCL.ADDS\t\t\t\t\t\t= \"쫄\"\nCL.ADDCOUNT\t\t\t\t\t= \"쫄 %s\"--ie, Add 1, Add 2, Add 3\nCL.BIG_ADD\t\t\t\t\t= \"큰 쫄\"\nCL.BOSS\t\t\t\t\t\t= \"보스\"\nCL.ENEMIES\t\t\t\t\t= \"적\"\nCL.BREAK_LOS\t\t\t\t= \"시야 안나오는 곳\"\nCL.RESTORE_LOS\t\t\t\t= \"시야 확보되는 곳\"\nCL.BOSSTOGETHER\t\t\t\t= \"보스 붙이세요\"\nCL.BOSSAPART\t\t\t\t= \"보스 떨어트리세요\"\nCL.MINDCONTROL\t\t\t\t= \"정신 지배\"\nCL.TANKCOMBO\t\t\t\t= \"탱커 연속 공격\"\nCL.TANKCOMBOC\t\t\t\t= \"탱커 연속 공격 (%s)\"\nCL.AOEDAMAGE\t\t\t\t= \"광역 데미지\"\nCL.GROUPSOAK\t\t\t\t= \"같이 맞기\"\nCL.GROUPSOAKS\t\t\t\t= \"같이 맞기\"\n"
  },
  {
    "path": "DBM-Core/commonlocal.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\nif not DBM_COMMON_L then DBM_COMMON_L = {} end\n\nlocal CL = DBM_COMMON_L\n\nCL.NONE\t\t\t\t\t\t= \"Нет\"\nCL.RANDOM\t\t \t\t\t= \"Случайно\"\nCL.NEXT\t\t\t\t\t\t= \"След. %s\"\nCL.COOLDOWN\t\t\t\t\t= \"Восст. %s\"\nCL.UNKNOWN\t\t\t\t\t= \"неизвестно\"\nCL.LEFT\t\t\t\t\t\t= \"Налево\"\nCL.RIGHT\t\t\t\t\t= \"Направо\"\nCL.BOTH\t\t\t\t\t\t= \"Оба\"\nCL.BEHIND\t\t\t\t\t= \"Сзади\"\nCL.BACK\t\t\t\t\t\t= \"Назад\"\nCL.SIDE\t\t\t\t\t\t= \"Сторона\"\nCL.TOP\t\t\t\t\t\t= \"Верх\"\nCL.BOTTOM\t\t\t\t\t= \"Низ\"\nCL.MIDDLE\t\t\t\t\t= \"Середина\"\nCL.FRONT\t\t\t\t\t= \"Вперёд\"\nCL.EAST\t\t\t\t\t\t= \"Восток\"\nCL.WEST\t\t\t\t\t\t= \"Запад\"\nCL.NORTH\t\t\t\t\t= \"Север\"\nCL.SOUTH\t\t\t\t\t= \"Юг\"\nCL.INTERMISSION\t\t\t\t= \"Переходная фаза\"--No blizz global for this, and will probably be used in most end tier fights with intermission stages\nCL.ORB\t\t\t\t\t\t= \"Сфера\"\nCL.ORBS\t\t\t\t\t\t= \"Сферы\"\nCL.RING\t\t\t\t\t\t= \"Кольцо\"\nCL.RINGS\t\t\t\t\t= \"Кольца\"\nCL.CHEST\t\t\t\t\t= \"сундука\"--As in Treasure 'Chest'. Not Chest as in body part.\nCL.NO_DEBUFF\t\t\t\t= \"Нет %s\"--For use in places like info frame where you put \"Not Spellname\"\nCL.ALLY\t\t\t\t\t\t= \"Союзник\"--Such as \"Move to Ally\"\nCL.ALLIES\t\t\t\t\t= \"Союзники\"--Such as \"Move to Allies\"\nCL.ADD\t\t\t\t\t\t= \"Адд\"--A fight Add as in \"boss spawned extra adds\"\nCL.ADDS\t\t\t\t\t\t= \"Адды\"\nCL.ADDCOUNT\t\t\t\t\t= \"Адд %s\"\nCL.BIG_ADD\t\t\t\t\t= \"Большой адд\"\nCL.BOSS\t\t\t\t\t\t= \"Босс\"\nCL.EDGE\t\t\t\t\t\t= \"Край комнаты\"\nCL.FAR_AWAY\t\t\t\t\t= \"Далеко\"\nCL.ENEMIES\t\t\t\t\t= \"Противники\"\nCL.BREAK_LOS\t\t\t\t= \"Преграда\"--По идее, так будет правильнее по смыслу и склонению. Но в идеале должно быть так: \"Бегите за стену\". Смысл, по идее, один и тот же.\nCL.RESTORE_LOS\t\t\t\t= \"Maintain LOS\"\nCL.CLEAR\t\t\t\t\t= \"Очищен\"\nCL.SAFE\t\t\t\t\t\t= \"Безопасно\"\nCL.NOTSAFE\t\t\t\t\t= \"Не безопасно\"\nCL.SHIELD\t\t\t\t\t= \"Щит\"\nCL.PILLAR\t\t\t\t\t= \"Столп\"\nCL.SHELTER\t\t\t\t\t= \"Укрытие\"\nCL.INCOMING\t\t\t\t\t= \"Прибытие %s\"\nCL.BOSSTOGETHER\t\t\t\t= \"Боссы вместе\"\nCL.BOSSAPART\t\t\t\t= \"Боссы отдельно\"\nCL.TANKCOMBO\t\t\t\t= \"Танковое комбо\"\nCL.TANKCOMBOC\t\t\t\t= \"Танковое комбо (%s)\"\nCL.AOEDAMAGE\t\t\t\t= \"AoE урон\"\nCL.SEASONAL\t\t\t\t\t= \"Сезонный\"\nCL.GROUPSOAK\t\t\t\t= \"Групповое поглощение\"\nCL.GROUPSOAKS\t\t\t\t= \"Групповые поглощения\"\nCL.PIT\t\t\t\t\t\t= \"Лунка\"\nCL.BOMB\t\t\t\t\t\t= \"Бомба\"\nCL.BOMBS\t\t\t\t\t= \"Бомбы\"\nCL.MINDCONTROL\t\t\t\t= \"Контроль над разумом\"\n"
  },
  {
    "path": "DBM-Core/commonlocal.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nif not DBM_COMMON_L then DBM_COMMON_L = {} end\n\nlocal CL = DBM_COMMON_L\n\nCL.NONE\t\t\t\t\t\t= \"無\"\nCL.RANDOM\t\t\t\t\t= \"隨機\"\nCL.UNKNOWN\t\t\t\t\t= \"未知\"--UNKNOWN which is \"Unknown\" (does u vs U matter?)\nCL.NEXT\t\t\t\t\t\t= \"下一次%s\"\nCL.COOLDOWN\t\t\t\t\t= \"%s冷卻\"\nCL.INCOMING\t\t\t\t\t= \"%s 來了\"\nCL.INTERMISSION\t\t\t\t= \"中場時間\"--No blizz global for this, and will probably be used in most end tier fights with intermission phases\nCL.NO_DEBUFF\t\t\t\t= \"沒有%s\"--For use in places like info frame where you put \"Not Spellname\"\nCL.ALLY\t\t\t\t\t\t= \"隊友\"--Such as \"Move to Ally\"\nCL.ALLIES\t\t\t\t\t= \"隊友\"--Such as \"Move to Allies\"\nCL.SAFE\t\t\t\t\t\t= \"安全\"\nCL.NOTSAFE\t\t\t\t\t= \"不安全\"\nCL.SEASONAL\t\t\t\t\t= \"季節性\"--Used for option headers to label options that apply to seasonal mechanics (Such as season of mastery on classic era)\nCL.YOU\t\t\t\t\t\t= \"你\"\n--Movements/Places\nCL.LEFT\t\t\t\t\t\t= \"左\"\nCL.RIGHT\t\t\t\t\t= \"右\"\nCL.BOTH\t\t\t\t\t\t= \"兩邊\"\nCL.BEHIND\t\t\t\t\t= \"背後\"\nCL.BACK\t\t\t\t\t\t= \"後\"--Back as in back of the room, not back as in body part\nCL.SIDE\t\t\t\t\t\t= \"側邊\"--Side as in move to the side\nCL.TOP\t\t\t\t\t\t= \"上\"--Top as in up top, not BDSM\nCL.BOTTOM\t\t\t\t\t= \"下\"--Bottom as in at the bottom, not BDSM\nCL.MIDDLE\t\t\t\t\t= \"中\"\nCL.FRONT\t\t\t\t\t= \"前\"\nCL.EAST\t\t\t\t\t\t= \"東\"\nCL.WEST\t\t\t\t\t\t= \"西\"\nCL.NORTH\t\t\t\t\t= \"北\"\nCL.SOUTH\t\t\t\t\t= \"南\"\nCL.SHIELD\t\t\t\t\t= \"護盾\"\nCL.PILLAR\t\t\t\t\t= \"柱子\"\nCL.SHELTER\t\t\t\t\t= \"掩蔽\"\nCL.EDGE\t\t\t\t\t\t= \"房間邊緣\"\nCL.FAR_AWAY\t\t\t\t\t= \"遠離\"\nCL.PIT\t\t\t\t\t\t= \"坑洞\"--Pit, as in hole in ground\n--Mechanics\nCL.BOMB\t\t\t\t\t\t= \"炸彈\"\nCL.BOMBS\t\t\t\t\t= \"炸彈\"\nCL.ORB\t\t\t\t\t\t= \"球\"\nCL.ORBS\t\t\t\t\t\t= \"球\"\nCL.RING\t\t\t\t\t\t= \"環\"\nCL.RINGS\t\t\t\t\t= \"環\"\nCL.CHEST\t\t\t\t\t= \"獎勵箱\"--As in Treasure 'Chest'. Not Chest as in body part.\nCL.ADD\t\t\t\t\t\t= \"小怪\"--A fight Add as in \"boss spawned extra adds\"\nCL.ADDS\t\t\t\t\t\t= \"小怪\"\nCL.ADDCOUNT\t\t\t\t\t= \"小怪 %s\"--ie, Add 1, Add 2, Add 3\nCL.BIG_ADD\t\t\t\t\t= \"大怪\"\nCL.BOSS\t\t\t\t\t\t= \"首領\"\nCL.ENEMIES\t\t\t\t\t= \"敵人\"\nCL.BREAK_LOS\t\t\t\t= \"卡視角\"\nCL.RESTORE_LOS\t\t\t\t= \"恢復/保持視角\"\nCL.BOSSTOGETHER\t\t\t\t= \"首領靠近\"\nCL.BOSSAPART\t\t\t\t= \"首領分開\"\nCL.MINDCONTROL\t\t\t\t= \"心控\"\nCL.TANKCOMBO\t\t\t\t= \"坦克連擊\"\nCL.TANKCOMBOC\t\t\t\t= \"坦克連擊 (%s)\"\nCL.AOEDAMAGE\t\t\t\t= \"AOE傷害\"\nCL.GROUPSOAK\t\t\t\t= \"隊伍分傷\"\nCL.GROUPSOAKS\t\t\t\t= \"隊伍分傷\"\n"
  },
  {
    "path": "DBM-Core/compat.lua",
    "content": "local _, private = ...\n\nlocal ipairs = ipairs\n\nlocal GetNumPartyMembers = GetNumPartyMembers\nlocal GetNumRaidMembers = GetNumRaidMembers\n\nlocal function tIndexOf(tbl, item)\n\tfor i, v in ipairs(tbl) do\n\t\tif item == v then\n\t\t\treturn i;\n\t\tend\n\tend\nend\nprivate.tIndexOf = tIndexOf\n\nlocal function IsInGroup()\n\treturn GetNumPartyMembers() > 0 or GetNumRaidMembers() > 0\nend\nprivate.IsInGroup = IsInGroup\n\nlocal function IsInRaid()\n\treturn GetNumRaidMembers() > 0\nend\nprivate.IsInRaid = IsInRaid\n\nlocal function GetNumSubgroupMembers()\n\treturn GetNumPartyMembers()\nend\nprivate.GetNumSubgroupMembers = GetNumSubgroupMembers\n\nlocal function GetNumGroupMembers()\n\treturn IsInRaid() and GetNumRaidMembers() or GetNumPartyMembers()\nend\nprivate.GetNumGroupMembers = GetNumGroupMembers\n"
  },
  {
    "path": "DBM-Core/license.txt",
    "content": "License\n\nTHE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE (\"CCPL\" OR \"LICENSE\"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.\n\nBY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.\n\n1. Definitions\n\n   a. \"Adaptation\" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image (\"synching\") will be considered an Adaptation for the purpose of this License.\n   b. \"Collection\" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(g) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.\n   c. \"Distribute\" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.\n   d. \"License Elements\" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, Noncommercial, ShareAlike.\n   e. \"Licensor\" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.\n   f. \"Original Author\" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.\n   g. \"Work\" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.\n   h. \"You\" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.\n   i. \"Publicly Perform\" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.\n   j. \"Reproduce\" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.\n\n2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.\n\n3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:\n\n   a. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;\n   b. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked \"The original work was translated from English to Spanish,\" or a modification could indicate \"The original work has been modified.\";\n   c. to Distribute and Publicly Perform the Work including as incorporated in Collections; and,\n   d. to Distribute and Publicly Perform Adaptations.\n\nThe above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights described in Section 4(e).\n\n4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:\n\n   a. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(d), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(d), as requested.\n   b. You may Distribute or Publicly Perform an Adaptation only under: (i) the terms of this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-NonCommercial-ShareAlike 3.0 US) (\"Applicable License\"). You must include a copy of, or the URI, for Applicable License with every copy of each Adaptation You Distribute or Publicly Perform. You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License. You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License.\n   c. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in con-nection with the exchange of copyrighted works.\n   d. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution (\"Attribution Parties\") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., \"French translation of the Work by Original Author,\" or \"Screenplay based on original Work by Original Author\"). The credit required by this Section 4(d) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.\n   e. For the avoidance of doubt:\n         i. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;\n         ii. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,\n         iii. Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c).\n   f. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.\n\n5. Representations, Warranties and Disclaimer\n\nUNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THIS EXCLUSION MAY NOT APPLY TO YOU.\n\n6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n\n7. Termination\n\n   a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.\n   b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.\n\n8. Miscellaneous\n\n   a. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.\n   b. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.\n   c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.\n   d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.\n   e. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.\n   f. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.\n"
  },
  {
    "path": "DBM-Core/localization.cn.lua",
    "content": "-- L.Core\n-- Diablohu(diablohudream@gmail.com)\n-- yleaf(yaroot@gmail.com)\n-- Mini Dragon(projecteurs@gmail.com) <流浪者酒馆-Brilla@金色平原> 20230111\n\nif GetLocale() ~= \"zhCN\" then return end\nif not DBM_CORE_L then DBM_CORE_L = {} end\n\nlocal L = DBM_CORE_L\n\nL.HOW_TO_USE_MOD\t\t\t\t\t= \"欢迎使用\" .. L.DBM .. \"。在聊天框输入 /dbm help 以获取可用命令的帮助。输入 /dbm 可打开设置窗口，并对各个Boss模块进行设置，也可以浏览首领击杀记录。\"..L.DBM..\" 会自动按你的专精做出相应配置，但是你可以进行微调。\"\nL.SILENT_REMINDER\t\t\t\t\t= \"提示：\" .. L.DBM .. \" 正处于静音模式。\"\nL.COPY_URL_DIALOG_NEWS\t\t\t\t= \"阅读最新新闻，请点击下方连接\"\n\nL.LOAD_MOD_ERROR\t\t\t\t= \"读取%s模块时发生错误：%s\"\nL.LOAD_MOD_SUCCESS\t\t\t= \"'%s' 模块已加载。在聊天框输入 /dbm 可设置自定义语音或注记等选项。\"\nL.LOAD_MOD_COMBAT\t\t\t= \"延迟读取模块 '%s' 直到你脱离战斗。\"\nL.LOAD_GUI_ERROR\t\t\t\t= \"无法读取图形界面：%s\"\nL.LOAD_GUI_COMBAT\t\t\t= L.DBM .. \"无法在战斗中初始化图形界面。请先在非战斗状态打开图形设置界面，之后的战斗中就可以自由打开和关闭该界面了。\"\nL.BAD_LOAD\t\t\t\t\t= L.DBM .. \"检测到由于你在战斗过程中载入模块，有些计时器可能会错误。请在离开战斗后马上重载界面。\"\nL.LOAD_MOD_VER_MISMATCH\t\t= \"%s 模块无法被载入。\" .. L.DBM .. \"核心未达到模块所需版本。请升级\" .. L.DBM .. \"。\"\nL.LOAD_MOD_EXP_MISMATCH\t\t= \"%s 模块无法被载入, 因为它是为新资料片/测试服所设计的. 当新资料片在正式服开放时就能正确加载了.\"\nL.LOAD_MOD_TOC_MISMATCH\t\t= \"%s 模块无法被载入，因为它是为新版本(%s)所设计的的。当新版本在正式服开放时就能正确加载了。\"\nL.LOAD_MOD_DISABLED\t\t\t= \"%s 模块已安装但被禁用。该模块不会被载入除非启用它。\"\nL.LOAD_MOD_DISABLED_PLURAL\t= \"%s 模块已安装但被禁用。这些模块不会被载入除非启用它们。\"\n\nL.COPY_URL_DIALOG\t\t\t\t\t= \"复制网址\"\n\n--Post Patch 7.1\nL.NO_RANGE\t\t\t\t\t= \"距离雷达在副本中无法使用，该功能会使用文本代替\"\nL.NO_ARROW\t\t\t\t\t= \"箭头在副本中无法使用\"\nL.NO_HUD\t\t\t\t\t\t= \"HUDMap 在副本中无法使用\"\n\nL.DYNAMIC_DIFFICULTY_CLUMP\t= \"由于玩家数量不足，\" .. L.DBM .. \" 无法开启动态距离检测。\"\nL.DYNAMIC_ADD_COUNT\t\t\t= \"由于玩家数量不足，\" .. L.DBM .. \" 无法开启小怪计数。\"\nL.DYNAMIC_MULTIPLE\t\t\t= \"由于玩家数量不足，\" .. L.DBM .. \" 禁用了多个功能。\"\n\nL.LOOT_SPEC_REMINDER\t\t\t= \"你当前的人物专精为 %s。你当前的拾取选择为 %s。\"\n\nL.BIGWIGS_ICON_CONFLICT\t\t= L.DBM .. \"检测到你同时开启了Bigwigs,请关闭自动标记以避免冲突。\"\n\nL.MOD_AVAILABLE\t\t\t\t= L.DBM .. \"已经为%s制作了相关模块。你可以在 \" .. L.UPDATEREMINDER_URL .. \"上找到新版本。\"\n\nL.COMBAT_STARTED\t\t\t\t= \"%s作战开始，祝你走运 :)\"\nL.COMBAT_STARTED_IN_PROGRESS\t= \"已进行的战斗-%s正在作战。祝你走运 :)\"\nL.GUILD_COMBAT_STARTED\t\t= \"%2$s开组的公会版%1$s作战开始\"\nL.SCENARIO_STARTED\t\t\t= \"场景战役-%s作战开始。祝你走运 :)\"\nL.SCENARIO_STARTED_IN_PROGRESS\t= \"已进行的场景战役-%s正在作战。祝你走运 :)\"\nL.BOSS_DOWN\t\t\t\t\t= \"%s战斗胜利！用时%s！\"\nL.BOSS_DOWN_I\t\t\t\t= \"%s战斗胜利！总计%d次胜利。\"\nL.BOSS_DOWN_L\t\t\t\t= \"%s战斗胜利！用时%s！上次用时%s，最快用时%s。总计%d次胜利。\"\nL.BOSS_DOWN_NR\t\t\t\t= \"%s战斗胜利！用时%s！新的纪录诞生了！原纪录为%s。总计%d次胜利。\"\nL.RAID_DOWN\t\t\t\t\t= \"%s目标达成，用时%s！\"\nL.RAID_DOWN_L\t\t\t\t= \"%s目标达成，用时%s！最快用时%s！\"\nL.RAID_DOWN_NR\t\t\t\t= \"%s目标达成，用时%s！最快用时%s！新的纪录诞生了！原纪录为%s！\"\nL.GUILD_BOSS_DOWN\t\t\t= \"%2$s开组的公会版%1$s战斗胜利！用时%3$s！\"\nL.SCENARIO_COMPLETE\t\t\t= \"场景战役-%s战斗胜利！用时%s!\"\nL.SCENARIO_COMPLETE_I\t\t= \"场景战役-%s战斗胜利！总计%d次胜利。\"\nL.SCENARIO_COMPLETE_L\t\t= \"场景战役-%s战斗胜利！用时%s！上次用时%s，最快用时%s。总计%d次胜利。\"\nL.SCENARIO_COMPLETE_NR\t\t= \"场景战役-%s战斗胜利！用时%s！新的纪录诞生了！原纪录为%s。总计%d次胜利。\"\nL.COMBAT_ENDED_AT\t\t\t= \"%s （%s）作战结束，用时%s。\"\nL.COMBAT_ENDED_AT_LONG\t\t= \"%s （%s）作战结束，用时%s。该难度下总计失败%d次。\"\nL.GUILD_COMBAT_ENDED_AT\t\t= \"%s开组的公会版%s （%s）作战结束，用时%s。\"\nL.SCENARIO_ENDED_AT\t\t\t= \"场景战役-%s作战结束，用时%s。\"\nL.SCENARIO_ENDED_AT_LONG\t\t= \"场景战役-%s作战结束，用时%s。该难度下总计失败%d次。\"\nL.COMBAT_STATE_RECOVERED\t\t= \"%s作战%s前开始，正在恢复计时条……\"\nL.TRANSCRIPTOR_LOG_START\t\t= \"Transcriptor 记录开启。\"\nL.TRANSCRIPTOR_LOG_END\t\t= \"Transcriptor 记录关闭。\"\n\nL.MOVIE_SKIPPED\t\t\t\t= \"该场景已被跳过。\"\nL.BONUS_SKIPPED\t\t\t\t= L.DBM..\"已经自动关闭奖励拾取窗口。如果需要的话，3分钟内输入 /dbmbonusroll \"\n\nL.AFK_WARNING\t\t\t\t= \"你在战斗中暂离(百分之%d生命值)。如果你真的没有暂离，动一下或者在'其他功能'中关闭本设置。\"\n\nL.COMBAT_STARTED_AI_TIMER\t= \"我的CPU是类神经网络处理器，一种学习型电脑。(本场战斗\" .. L.DBM .. \"将会使用人工智能来估计时间轴)。\" --Terminator\n\nL.PROFILE_NOT_FOUND\t\t\t= \"<\" .. L.DBM .. \"> 你当前的配置文件已损坏. 'Default' 默认配置文件会被应用.\"\nL.PROFILE_CREATED\t\t\t= \"配置文件 '%s' 已经创建.\"\nL.PROFILE_CREATE_ERROR\t\t= \"配置文件创建失败. 无效的配置文件名.\"\nL.PROFILE_CREATE_ERROR_D\t\t= \"配置文件创建失败. '%s' 已经存在.\"\nL.PROFILE_APPLIED\t\t\t= \"配置文件 '%s' 已经应用.\"\nL.PROFILE_APPLY_ERROR\t\t= \"配置文件应用失败. '%s' 并不存在.\"\nL.PROFILE_DELETED\t\t\t= \"配置文件 '%s' 已经删除. 'Default' 默认配置文件会被应用.\"\nL.PROFILE_COPIED\t\t\t\t= \"配置文件 '%s' 已经复制.\"\nL.PROFILE_COPY_ERROR\t\t\t= \"配置文件复制失败. '%s' 并不存在.\"\nL.PROFILE_COPY_ERROR_SELF\t= \"无法自己复制自己的配置文件.\"\nL.PROFILE_DELETE_ERROR\t\t= \"配置文件删除失败. '%s' 并不存在.\"\nL.PROFILE_CANNOT_DELETE\t\t= \"'Default' 默认配置文件无法被删除\"\nL.MPROFILE_COPY_SUCCESS\t\t= \"%s(%d专精)的模块设置已经被复制.\"\nL.MPROFILE_COPY_SELF_ERROR\t= \"无法自己复制自己的配置\"\nL.MPROFILE_COPY_S_ERROR\t\t= \"复制的源出错. 源配置可能被篡改.\"\nL.MPROFILE_COPYS_SUCCESS\t\t= \"%s(%d专精)的模块声音及自定义文本设置已经被复制.\"\nL.MPROFILE_COPYS_SELF_ERROR\t= \"无法自己复制自己的声音及自定义文本配置\"\nL.MPROFILE_COPYS_S_ERROR\t\t= \"复制的源出错. 源声音及自定义文本配置文件可能被篡改.\"\nL.MPROFILE_DELETE_SUCCESS\t= \"%s(%d专精)的模块设置已经被删除.\"\nL.MPROFILE_DELETE_SELF_ERROR\t= \"无法删除一个正在使用的模块配置文件.\"\nL.MPROFILE_DELETE_S_ERROR\t= \"删除的源出错. 配置文件可能被篡改.\"\n\nL.NOTE_SHARE_SUCCESS\t\t= \"%s向你分享了他的%s的自定义注记\"\nL.NOTE_SHARE_LINK\t\t\t= \"点击这里打开注记\"\nL.NOTE_SHARE_FAIL\t\t\t= \"%s想向你分享他的%s的自定义注记，但是相关的副本模块并没有被安装或被加载。如果你需要这个注记，请确保相关模块被正确加载，然后请小伙伴再向你分享一次。\"\n\nL.NOTEHEADER\t\t\t\t\t= \"在此输入你针对%s的注记。在 >< 中插入玩家名字会被按职业着色。例子:'我种>下一棵<种子'。这个牧师会被染色成白色。多字符串请用 / 隔开。\"\nL.NOTEFOOTER\t\t\t\t\t= \"点击确定接受改变，点击取消放弃改变\"\nL.NOTESHAREDHEADER\t\t\t= \"%s想向你分享他的%s的自定义注记。如果你接受这个注记，你原来的注记会被覆盖。\"\nL.NOTESHARED\t\t\t\t\t= \"你的注记已经成功地分享给小伙伴了。\"\nL.NOTESHAREERRORSOLO\t\t\t= \"寂寞了？起码要找个小伙伴分享吧。\"\nL.NOTESHAREERRORBLANK\t\t= \"无法分享空白注记。\"\nL.NOTESHAREERRORGROUPFINDER\t= \"无法在战场，随机小队，随机团里分享注记。\"\nL.NOTESHAREERRORALREADYOPEN\t= \"为防止未保存的改变，当注记编辑器打开的时候无法分享注记。\"\n\nL.ALLMOD_DEFAULT_LOADED\t\t= \"本副本里的所有Boss配置已经被初始化\"\nL.ALLMOD_STATS_RESETED\t\t= \"所有模组的状态已被重置\"\nL.MOD_DEFAULT_LOADED\t\t\t= \"将会使用默认设置来进行本场战斗\"\n\nL.WORLDBOSS_ENGAGED\t\t\t= \"世界Boss-%s可能正在作战。当前还有%s的生命值。 (由 %s 的\" .. L.DBM .. \"发送)\"\nL.WORLDBOSS_DEFEATED\t\t= \"世界Boss-%s可能战斗结束了。 (由 %s 的\" .. L.DBM .. \"发送)\"\nL.WORLDBUFF_STARTED\t\t\t= \"世界增益 %s 已开始释放，阵营- %s (由%s的\" .. L.DBM .. \"发送).\"\n\nL.TIMER_FORMAT_SECS\t\t\t= \"%.2f秒\"\nL.TIMER_FORMAT_MINS\t\t\t= \"%d分钟\"\nL.TIMER_FORMAT\t\t\t\t= \"%d分%.2f秒\"\n\nL.MIN\t\t\t\t\t\t= \"分\"\nL.MIN_FMT\t\t\t\t\t= \"%d分\"\nL.SEC\t\t\t\t\t\t= \"秒\"\nL.SEC_FMT\t\t\t\t\t= \"%s秒\"\n\nL.GENERIC_WARNING_OTHERS\t= \"和另外一个\"\nL.GENERIC_WARNING_OTHERS2\t= \"和另外%d个\"\nL.GENERIC_WARNING_BERSERK\t= \"%s%s后狂暴\"\nL.GENERIC_TIMER_BERSERK\t\t= \"狂暴\"\nL.OPTION_TIMER_BERSERK\t\t= \"计时条：$spell:26662\"\nL.GENERIC_TIMER_COMBAT\t\t= \"战斗开始\"\nL.OPTION_TIMER_COMBAT\t\t= \"显示战斗开始倒计时\"\nL.BAD\t\t\t\t\t\t= \"必杀技\"\nL.OPTION_HEALTH_FRAME\t\t= \"显示首领生命值窗口\"\n\nL.OPTION_CATEGORY_TIMERS\t\t= \"计时条\"\nL.OPTION_CATEGORY_WARNINGS\t= \"警报\"\nL.OPTION_CATEGORY_WARNINGS_YOU\t= \"个人警报\"\nL.OPTION_CATEGORY_WARNINGS_OTHER\t= \"目标警报\"\nL.OPTION_CATEGORY_WARNINGS_ROLE\t= \"角色警报\"\nL.OPTION_CATEGORY_SPECWARNINGS\t\t= \"特殊警报\"\n\nL.OPTION_CATEGORY_SOUNDS\t\t= \"声音\"\nL.OPTION_CATEGORY_DROPDOWNS\t\t= \"下拉\"\nL.OPTION_CATEGORY_YELLS\t\t\t= \"大喊\"\nL.OPTION_CATEGORY_NAMEPLATES\t\t= \"姓名版\"\nL.OPTION_CATEGORY_ICONS\t\t\t= \"图标\"\n\nL.AUTO_RESPONDED\t\t\t\t\t\t= \"已自动回复.\"\nL.STATUS_WHISPER\t\t\t\t\t\t= \"%s：%s，%d/%d存活\"\n--Bosses\nL.AUTO_RESPOND_WHISPER\t\t\t\t= \"%s正在与%s交战，（当前%s，%d/%d存活）\"\nL.WHISPER_COMBAT_END_KILL\t\t\t= \"%s已在%s的战斗中取得胜利！\"\nL.WHISPER_COMBAT_END_KILL_STATS\t\t= \"%s已在%s的战斗中取得胜利！总计%d次胜利。\"\nL.WHISPER_COMBAT_END_WIPE_AT\t\t\t= \"%s在%s（%s）的战斗中灭团了。\"\nL.WHISPER_COMBAT_END_WIPE_STATS_AT\t= \"%s在%s（%s）的战斗中灭团了。该难度下总共失败%d次。\"\n--Scenarios (no percents. words like \"fighting\" or \"wipe\" changed to better fit scenarios)\nL.AUTO_RESPOND_WHISPER_SCENARIO\t\t= \"%s正在与场景战役-%s交战，（当前%s，%d/%d存活）\"\nL.WHISPER_SCENARIO_END_KILL\t\t\t= \"%s已在场景战役-%s的战斗中取得胜利！\"\nL.WHISPER_SCENARIO_END_KILL_STATS\t= \"%s已在场景战役-%s的战斗中取得胜利！总计%d次胜利。\"\nL.WHISPER_SCENARIO_END_WIPE\t\t\t= \"%s在场景战役-%s的战斗中灭团了。\"\nL.WHISPER_SCENARIO_END_WIPE_STATS\t= \"%s在场景战役-%s的战斗中灭团了。该难度下总共失败%d次。\"\n\nL.VERSIONCHECK_HEADER\t\t= L.DBM..\" - 版本检测\"\nL.VERSIONCHECK_ENTRY\t\t\t= \"%s: %s (%s) %s\"--One Boss mod\nL.VERSIONCHECK_ENTRY_TWO\t\t= \"%s: %s (%s) & %s (%s)\"--Two Boss mods\nL.VERSIONCHECK_ENTRY_NO_DBM\t= \"%s：未安装\" .. L.DBM\nL.VERSIONCHECK_FOOTER\t\t= \"团队中有%d名成员正在使用\" .. L.DBM .. \"， %d名成员正在使用Bigwigs\"\nL.VERSIONCHECK_OUTDATED\t\t= \"下列%d名玩家的\" .. L.DBM .. \"版本已经过期:%s\"\nL.YOUR_VERSION_OUTDATED\t\t= \"你的 \" .. L.DEADLY_BOSS_MODS .. \" 已经过期。\" .. L.UPDATEREMINDER_URL\nL.VOICE_PACK_OUTDATED\t\t= \"你当前使用的\" .. L.DBM .. \"语音包已经过期。有些特殊警告的屏蔽（当心，毁灭）已被禁用。请下载最新语音包，或联系语音包作者更新。\"\nL.VOICE_MISSING\t\t\t\t= L.DBM .. \"找不到你当前选择的语音包。语音包选项已经被设置成'None'。请确保你的语音包被正确安装和启用。\"\nL.VOICE_DISABLED\t\t\t\t= \"你安装了语音包但是没有启动它。请在选项中的语音报警菜单中开启语音包。如果不需要语音报警请卸载语音包。\"\nL.VOICE_COUNT_MISSING\t\t= \"在 %d 语音包中找不到倒计时语音。倒计时已恢复为默认值\"\n\nL.UPDATEREMINDER_HEADER\t\t\t= \"您的 \" .. L.DEADLY_BOSS_MODS .. \" 版本已过期。\\n版本 %s (%s) 可在此处下载：\" .. L.UPDATEREMINDER_URL\nL.UPDATEREMINDER_FOOTER\t\t\t= \"按下 \" .. (IsMacClient() and \"Cmd-C\" or \"Ctrl-C\") .. \"复制下载地址到剪切板。\"\nL.UPDATEREMINDER_FOOTER_GENERIC\t= \"按下 \" .. (IsMacClient() and \"Cmd-C\" or \"Ctrl-C\") .. \"复制链接到剪切板。\"\nL.UPDATEREMINDER_DISABLE\t\t\t= \"警告：你的 \" .. L.DEADLY_BOSS_MODS .. \" 已经过期太久，它已被强制禁用，直到你更新。这是为了确保它不会导致你或其他团队成员出错。\"\nL.UPDATEREMINDER_HOTFIX\t\t\t= \"你的 \" .. L.DEADLY_BOSS_MODS .. \" 版本会在这首领战斗中有问题。最新版的\" .. L.DBM .. \"已经修复了这个问题。\"\nL.UPDATEREMINDER_HOTFIX_ALPHA\t= \"你的 \" .. L.DEADLY_BOSS_MODS .. \" 版本会在这首领战斗中有问题。最新版的\" .. L.DBM .. \"（或Alpha版本）已经修复了这个问题。\"\nL.UPDATEREMINDER_MAJORPATCH\t\t= \"你的 \" .. L.DEADLY_BOSS_MODS .. \" 已经过期，它已被禁用，直到你更新。这是为了确保它不会导致你或其他团队成员出错。这次更新是一个非常重要的补丁，请确保你得到的是最新版。\"\nL.VEM\t\t\t\t\t\t\t= \"你好像在使用VEM。\" .. L.DEADLY_BOSS_MODS .. \"在这种情况下无法被载入。\"\nL.OUTDATEDPROFILES\t\t\t\t\t= \"警告: DBM-Profiles已经无法和本版本\" .. L.DBM .. \"兼容。\" .. L.DBM .. \"核心已经自带配置文件管理系统，请移除DBM-Profiles避免冲突。\"\nL.OUTDATEDSPELLTIMERS\t\t\t\t= \"警告: DBM-SpellTimers 干扰到 \" .. L.DBM .. \" 运行，必须禁用它， \" .. L.DBM .. \" 才能正常运行。\"\nL.OUTDATEDRLT\t\t\t\t\t\t= \"警告: DBM-RaidLeadTools 干扰到 \" .. L.DBM .. \"运行. DBM-RaidLeadTools 不再受支持，必须将其删除 \" .. L.DBM .. \" 才能正常运行。\"\nL.VICTORYSOUND\t\t\t\t\t\t= \"警告: DBM-VictorySound 与该版本的 \" .. L.DBM .. \"不兼容，为避免冲突，必须先将其删除。 \" .. L.DBM .. \" 才可以正常运行。\"\nL.DPMCORE\t\t\t\t\t\t= \"警告: DBM-PVP已经已经很久没人维护了,并无法兼容。请移除DBM-PVP避免冲突。\"\nL.DBMLDB\t\t\t\t\t\t\t= \"警告: DBM-LDB 已经集成入\" .. L.DBM .. \"核心。建议在插件目录删掉'DBM-LDB'。\"\nL.UPDATE_REQUIRES_RELAUNCH\t\t= \"警告: 如果你不完全重启游戏，\" .. L.DBM .. \"可能会工作不正常。此次更新包含了新的文件，或者toc文件的改变，这是重载界面无法加载的。不重启游戏可能导致作战模块功能错误。\"\nL.OUT_OF_DATE_NAG\t\t\t\t= \"你的\" .. L.DBM .. \"版本已经过期，新版本针对特定的首领战斗增加新的功能和错误的修复。建议您进行更新来改善您的游戏体验。\"\n\nL.MOVABLE_BAR\t\t\t\t= \"拖动我！\"\n\nL.PIZZA_SYNC_INFO\t\t\t\t= \"|Hplayer:%1$s|h[%1$s]|h向你发送了一个\" .. L.DBM .. \" 计时条: '%2$s'\\n|HDBM:cancel:%2$s:nil|h|cff3588ff[取消此倒计时]|r|h |Hgarrmission:DBM:ignore:%2$s:%1$s|h|cff3588ff[忽略来自%1$s的计时条]|r|h\"\nL.PIZZA_CONFIRM_IGNORE\t\t\t= \"是否要在该次游戏连接中屏蔽来自%s的计时条？\"\nL.PIZZA_ERROR_USAGE\t\t\t\t= \"命令：/dbm [broadcast] timer <时间（秒）> <文本>\"\n\nL.MINIMAP_TOOLTIP_FOOTER\t\t= \"Shift+拖动 / 右键拖动：拖动\\nAlt+Shift+拖动：自由拖动\"\n\nL.RANGECHECK_HEADER\t\t\t= \"距离监视（%d码）\"\nL.RANGECHECK_HEADERT\t\t\t= \"距离监视 (%d码-%d人)\"\nL.RANGECHECK_RHEADER\t\t\t= \"反向距离监视 (%d码)\"\nL.RANGECHECK_RHEADERT\t\t= \"反向距离监视 (%d码-%d人)\"\nL.RANGECHECK_SETRANGE\t\t= \"设置距离\"\nL.RANGECHECK_SETTHRESHOLD\t= \"设置玩家数量阈值\"\nL.RANGECHECK_SOUNDS\t\t\t= \"音效\"\nL.RANGECHECK_SOUND_OPTION_1\t= \"声音提示：当有玩家接近时\"\nL.RANGECHECK_SOUND_OPTION_2\t= \"声音提示：多名玩家接近时\"\nL.RANGECHECK_SOUND_0\t\t\t= \"无\"\nL.RANGECHECK_SOUND_1\t\t\t= \"默认声音\"\nL.RANGECHECK_SOUND_2\t\t\t= \"蜂鸣\"\nL.RANGECHECK_SETRANGE_TO\t\t= \"%d码\"\nL.RANGECHECK_OPTION_FRAMES\t= \"框体\"\nL.RANGECHECK_OPTION_RADAR\t= \"显示距离雷达框体\"\nL.RANGECHECK_OPTION_TEXT\t\t= \"显示文本框体\"\nL.RANGECHECK_OPTION_BOTH\t\t= \"同时显示距离雷达框体和文本框体\"\nL.RANGERADAR_HEADER\t\t\t= \"距离%d码 %d人\"\nL.RANGERADAR_BOSS_HEADER\t\t= \"Boss 范围 %d人\"\nL.RANGERADAR_RHEADER\t\t\t= \"反向距离%码 %d人\"\nL.RANGERADAR_IN_RANGE_TEXT\t= \"%d人在监视距离内（%0.1f码）\"\nL.RANGECHECK_IN_RANGE_TEXT\t= \"%d人在监视距离内\"\nL.RANGERADAR_IN_RANGE_TEXTONE= \"%s (%0.1f码)\"--One target\n\nL.INFOFRAME_SHOW_SELF\t\t= \"总是显示你的能量\"\t\t-- Always show your own power value even if you are below the threshold\nL.INFOFRAME_SETLINES\t\t\t= \"设置最大行数\"\nL.INFOFRAME_SETCOLS\t\t\t\t= \"设置最大列数\"\nL.INFOFRAME_LINESDEFAULT\t\t= \"由模组设置\"\nL.INFOFRAME_LINES_TO\t\t\t= \"%d行\"\nL.INFOFRAME_COLS_TO\t\t\t\t= \"%d列\"\nL.INFOFRAME_POWER\t\t\t= \"能量\"\nL.INFOFRAME_AGGRO\t\t\t= \"仇恨\"\nL.INFOFRAME_MAIN\t\t\t\t= \"主能量:\"--Main power\nL.INFOFRAME_ALT\t\t\t\t= \"次能量:\"--Alternate Power\n\nL.LFG_INVITE\t\t\t\t\t\t= \"随机副本确认\"\n\nL.SLASHCMD_HELP\t\t\t\t= {\n\t\"可用命令:\",\n\t\"-----------------\",\n\t\"/dbm unlock: 显示一个可移动的计时条，可通过对它来移动所有\" .. L.DBM .. \"计时条的位置(也可使用: move)。\",\n\t\"/range <码> 或者 /distance <码>: 显示距离雷达窗体。使用 /rrange 或者 /rdistance 翻转颜色。\",\n\t\"/hudar <码>: 显示基于HUD的距离显示器提示器。\",\n\t\"/dbm timer: 启动一个\" .. L.DBM .. \"计时器，输入'/dbm timer'查询更多信息。\",\n\t\"/dbm arrow: 显示\" .. L.DBM .. \"箭头，输入'/dbm arrow'查询更多信息。\",\n\t\"/dbm hud: 显示DBM hud，输入'/dbm hud'查询更多信息。\",\n\t\"/dbm help2: 显示用于团队的命令\"\n}\nL.SLASHCMD_HELP2\t\t\t\t= {\n\t\"可用命令:\",\n\t\"-----------------\",\n\t\"/dbm pull <秒>: 向所有团队成员发送一个长度为<秒>的开怪计时条(需要队长或助理权限)。\",\n\t\"/dbm break <分钟>: 向所有团队成员发送一个长度为<分钟>的狂暴计时条(需要队长或助理权限)。\",\n\t\"/dbm version: 进行团队范围的\" .. L.DBM .. \"版本检测(也可使用: ver)\",\n\t\"/dbm version2: 进行团队范围的\" .. L.DBM .. \"版本检测并密语那些过期版本用户(也可使用: ver2)\",\n\t\"/dbm lag: 检测全团网络延时\",\n\t\"/dbm durability: 检测全团装备耐久度\"\n}\nL.TIMER_USAGE\t= {\n\tL.DBM..\"计时器可用命令:\",\n\t\"-----------------\",\n\t\"/dbm timer <秒> <文本>: 启动一个<文本>为名称，长度为<秒>的计时器。\",\n\t\"/dbm ltimer <秒> <文本>: 启动一个<文本>为名称，长度为<秒>的循环计时器。\",\n\t\"('Broadcast' 在 'timer' 前会向所有团队成员发送这个计时器(需要队长或助理权限)。\",\n\t\"/dbm timer endloop: 停止所有的 ltimer（循环计时器）.\"\n}\n\nL.ERROR_NO_PERMISSION\t\t\t\t= \"权限不足。需要队长或助理权限。\"\nL.TIME_TOO_SHORT\t\t\t\t= \"战斗倒计时需要大于三秒。\"\n\nL.BREAK_USAGE\t\t\t\t= \"休息时间不能超过60分钟。请确保你输入的是分钟而不是秒。\"\nL.BREAK_START\t\t\t\t= \"开始休息 - %s分钟！（由 %s 发送）\"\nL.BREAK_MIN\t\t\t\t\t= \"%s分钟后休息结束！\"\nL.BREAK_SEC\t\t\t\t\t= \"%s秒后休息结束！\"\nL.TIMER_BREAK\t\t\t\t= \"休息时间！\"\nL.ANNOUNCE_BREAK_OVER\t\t= \"休息已结束\"\n\nL.TIMER_PULL\t\t\t\t= \"开怪倒计时\"\nL.ANNOUNCE_PULL_MODE\t\t= \"开怪倒计时模式：%s\"\nL.ANNOUNCE_PULL\t\t\t\t= \"%d秒后开怪 （由 %s 发送）\"\nL.ANNOUNCE_PULL_NOW\t\t\t= \"开怪！\"\nL.ANNOUNCE_PULL_TARGET\t\t= \"%2$d秒后开搞%1$s!（由 %3$s 发送）\"\nL.ANNOUNCE_PULL_NOW_TARGET\t= \"开搞 %s！\"\nL.GEAR_WARNING\t\t\t\t= \"警告：请检查你的装备。你当前的装备装等比背包装等低了 %d 点\"\nL.GEAR_WARNING_WEAPON\t\t= \"警告：请检查你的武器并确保已被正确装备\"\nL.GEAR_FISHING_POLE\t\t\t= \"钓鱼竿\"\n\nL.ACHIEVEMENT_TIMER_SPEED_KILL = \"成就：限时击杀\"\n\n-- Auto-generated Warning Localizations\nL.AUTO_ANNOUNCE_TEXTS.you\t\t\t\t= \"你中了%s\"\nL.AUTO_ANNOUNCE_TEXTS.target\t\t\t= \"%s: >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetdistance\t= \"%s：>%%s< (%%d码)\"\nL.AUTO_ANNOUNCE_TEXTS.targetsource\t\t= \">%%s< 施放 %s 于 >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetcount\t\t= \"%s (%%s)：>%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetcountdistance\t= \"%s (%%s)：>%%s< (%%d码)\"\nL.AUTO_ANNOUNCE_TEXTS.spell\t\t\t\t= \"%s\"\nL.AUTO_ANNOUNCE_TEXTS.ends\t\t\t\t= \"%s 结束\"\nL.AUTO_ANNOUNCE_TEXTS.endtarget\t\t\t= \"%s 结束: >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.fades\t\t\t\t= \"%s 消失\"\nL.AUTO_ANNOUNCE_TEXTS.addsleft\t\t\t= \"%s剩余：%%d\"\nL.AUTO_ANNOUNCE_TEXTS.cast\t\t\t\t= \"正在施放 %s：%.1f秒\"\nL.AUTO_ANNOUNCE_TEXTS.soon\t\t\t\t= \"即将 %s\"\nL.AUTO_ANNOUNCE_TEXTS.sooncount\t\t\t= \"即将 %s (%%s)\"\nL.AUTO_ANNOUNCE_TEXTS.countdown\t\t\t= \"%%ds后 %s\"\nL.AUTO_ANNOUNCE_TEXTS.prewarn\t\t\t= \"%2$s后 %1$s\"\nL.AUTO_ANNOUNCE_TEXTS.bait\t\t\t\t= \"%s 即将到来 - 快引诱\"\nL.AUTO_ANNOUNCE_TEXTS.stage\t\t\t\t= \"第%s阶段\"\nL.AUTO_ANNOUNCE_TEXTS.prestage\t\t\t= \"第%s阶段 即将到来\"\nL.AUTO_ANNOUNCE_TEXTS.count\t\t\t\t= \"%s (%%s)\"\nL.AUTO_ANNOUNCE_TEXTS.stack\t\t\t\t= \">%%s< 中了 %s (%%d)\"\nL.AUTO_ANNOUNCE_TEXTS.moveto\t\t\t\t= \"%s - 移动到 >%%s<\"\n\nL.AUTO_ANNOUNCE_OPTIONS.you\t\t\t\t= \"警报：中了%s时\"\nL.AUTO_ANNOUNCE_OPTIONS.target\t\t\t= \"警报：$spell:%s的目标\"\nL.AUTO_ANNOUNCE_OPTIONS.targetdistance\t= \"警报：$spell:%s的目标（有距离）\"\nL.AUTO_ANNOUNCE_OPTIONS.targetNF\t\t\t= \"警报：$spell:%s的目标(忽略全局目标过滤器)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetsource\t\t= \"警报：$spell:%s的目标(带来源)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetcount\t\t= \"警报：$spell:%s的目标(带计数)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetcountdistance\t= \"警报：$spell:%s的目标（带有计数和距离）\"\nL.AUTO_ANNOUNCE_OPTIONS.spell\t\t\t= \"警报：当$spell:%s施法时\"\nL.AUTO_ANNOUNCE_OPTIONS.ends\t\t\t\t= \"警报：$spell:%s结束\"\nL.AUTO_ANNOUNCE_OPTIONS.endtarget\t\t= \"警报：$spell:%s结束（带目标）\"\nL.AUTO_ANNOUNCE_OPTIONS.fades\t\t\t= \"警报：$spell:%s消失\"\nL.AUTO_ANNOUNCE_OPTIONS.addsleft\t\t\t= \"警报：$spell:%s剩余数量\"\nL.AUTO_ANNOUNCE_OPTIONS.cast\t\t\t\t= \"警报：$spell:%s在施放\"\nL.AUTO_ANNOUNCE_OPTIONS.soon\t\t\t\t= \"预警：$spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.sooncount\t\t= \"预警：$spell:%s(带计数)\"\nL.AUTO_ANNOUNCE_OPTIONS.countdown\t\t= \"预警：$spell:%s(带计数)\"\nL.AUTO_ANNOUNCE_OPTIONS.prewarn\t\t\t= \"预警：$spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.bait\t\t\t\t= \"预警: $spell:%s需要引诱\"\nL.AUTO_ANNOUNCE_OPTIONS.stage\t\t\t= \"警报：第%s阶段\"\nL.AUTO_ANNOUNCE_OPTIONS.stagechange\t\t= \"警报：阶段转换\"\nL.AUTO_ANNOUNCE_OPTIONS.prestage\t\t\t= \"预警：第%s阶段\"\nL.AUTO_ANNOUNCE_OPTIONS.count\t\t\t= \"警报：$spell:%s(带计数)\"\nL.AUTO_ANNOUNCE_OPTIONS.stack\t\t\t= \"警报：$spell:%s叠加层数\"\nL.AUTO_ANNOUNCE_OPTIONS.moveto\t\t\t= \"警告：$spell:%s需要移动到某人或某个地方\"\n\nL.AUTO_SPEC_WARN_TEXTS.spell\t\t\t\t= \"%s!\"\nL.AUTO_SPEC_WARN_TEXTS.ends\t\t\t\t= \"%s 结束\"\nL.AUTO_SPEC_WARN_TEXTS.fades\t\t\t\t= \"%s 消失\"\nL.AUTO_SPEC_WARN_TEXTS.soon\t\t\t\t= \"%s 即将到来\"\nL.AUTO_SPEC_WARN_TEXTS.sooncount\t\t\t= \"%s (%%s) 即将到来\"\nL.AUTO_SPEC_WARN_TEXTS.prewarn\t\t\t= \"%s 于 %s\"\nL.AUTO_SPEC_WARN_TEXTS.bait\t\t\t\t= \"%s 即将到来 - 快引诱\"\nL.AUTO_SPEC_WARN_TEXTS.dispel\t\t\t= \">%%s<中了%s - 快驱散\"\nL.AUTO_SPEC_WARN_TEXTS.interrupt\t\t\t= \"%s - 快打断\"\nL.AUTO_SPEC_WARN_TEXTS.interruptcount\t= \"%s - 快打断 (%%d)\"\nL.AUTO_SPEC_WARN_TEXTS.you\t\t\t\t= \"你中了%s\"\nL.AUTO_SPEC_WARN_TEXTS.youcount\t\t\t= \"你中了%s (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.youpos\t\t\t= \"你中了%s (位置:%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.youposcount\t\t= \"你中了%s (%%s) (位置: %%s)\"\nL.AUTO_SPEC_WARN_TEXTS.soakpos\t\t\t= \"%s - 快去%%s吸收\"\nL.AUTO_SPEC_WARN_TEXTS.target\t\t\t= \">%%s<中了%s\"\nL.AUTO_SPEC_WARN_TEXTS.targetcount\t\t= \">%%2$s<中了%s (%%1$s)\"\nL.AUTO_SPEC_WARN_TEXTS.defensive\t\t\t= \"%s - 快开自保技能\"\nL.AUTO_SPEC_WARN_TEXTS.taunt\t\t\t\t= \">%%s<中了%s - 快嘲讽\"\nL.AUTO_SPEC_WARN_TEXTS.close\t\t\t\t= \"你附近的>%%s<中了%s\"\nL.AUTO_SPEC_WARN_TEXTS.move\t\t\t\t= \"%s - 快躲开\"\nL.AUTO_SPEC_WARN_TEXTS.keepmove\t\t\t= \"%s - 保持移动\"\nL.AUTO_SPEC_WARN_TEXTS.stopmove\t\t\t= \"%s - 停止移动\"\nL.AUTO_SPEC_WARN_TEXTS.dodge\t\t\t\t= \"%s - 躲开攻击\"\nL.AUTO_SPEC_WARN_TEXTS.dodgecount\t\t= \"%s (%%s) - 躲开攻击\"\nL.AUTO_SPEC_WARN_TEXTS.dodgeloc\t\t\t= \"%s - 躲开%%s\"\nL.AUTO_SPEC_WARN_TEXTS.moveaway\t\t\t= \"%s - 离开人群\"\nL.AUTO_SPEC_WARN_TEXTS.moveawaycount\t\t= \"%s (%%s) - 离开人群\"\nL.AUTO_SPEC_WARN_TEXTS.moveto\t\t\t= \"%s - 靠近 >%%s<\"\nL.AUTO_SPEC_WARN_TEXTS.soak\t\t\t\t= \"%s - 快吸收\"\nL.AUTO_SPEC_WARN_TEXTS.jump\t\t\t\t= \"%s - 快跳\"\nL.AUTO_SPEC_WARN_TEXTS.run\t\t\t\t= \"%s - 快跑\"\nL.AUTO_SPEC_WARN_TEXTS.cast\t\t\t\t= \"%s - 停止施法\"\nL.AUTO_SPEC_WARN_TEXTS.lookaway\t\t\t= \"%s - 快转身\"\nL.AUTO_SPEC_WARN_TEXTS.reflect\t\t\t= \">%%s<中了%s - 快停手\"\nL.AUTO_SPEC_WARN_TEXTS.count\t\t\t\t= \"%s! (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.stack\t\t\t\t= \"你叠加了%%d层%s\"\nL.AUTO_SPEC_WARN_TEXTS.switch\t\t\t= \"%s - 转换目标\"\nL.AUTO_SPEC_WARN_TEXTS.switchcount\t\t= \"%s - 转换目标 (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.gtfo\t\t\t\t= \"注意%%s - 快躲开\"\nL.AUTO_SPEC_WARN_TEXTS.adds\t\t\t\t= \"小怪出现 - 转换目标\"\nL.AUTO_SPEC_WARN_TEXTS.addscount\t\t= \"小怪出现 - 转换目标 (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.addscustom\t\t= \"小怪出现 - %%s\"\nL.AUTO_SPEC_WARN_TEXTS.targetchange\t\t= \"更换目标 - 请选择 %%s\"\n\n-- Auto-generated Special Warning Localizations\nL.AUTO_SPEC_WARN_OPTIONS.spell\t\t\t= \"特殊警报：$spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.ends\t\t\t= \"特殊警报：$spell:%s结束\"\nL.AUTO_SPEC_WARN_OPTIONS.fades\t\t\t= \"特殊警报：$spell:%s消失\"\nL.AUTO_SPEC_WARN_OPTIONS.soon\t\t\t= \"特殊警报：$spell:%s即将到来\"\nL.AUTO_SPEC_WARN_OPTIONS.sooncount\t\t= \"特殊警报：$spell:%s即将到来(带计数)\"\nL.AUTO_SPEC_WARN_OPTIONS.prewarn\t\t= \"特殊警报：%s秒前预警$spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.bait\t\t\t= \"特殊警报: $spell:%s需要引诱\"\nL.AUTO_SPEC_WARN_OPTIONS.dispel\t\t\t= \"特殊警报：需要驱散或偷取$spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.interrupt\t\t= \"特殊警报：需要打断$spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.interruptcount\t= \"特殊警报：需要打断$spell:%s(带计数)\"\nL.AUTO_SPEC_WARN_OPTIONS.you\t\t\t\t= \"特殊警报：当你受到$spell:%s影响时\"\nL.AUTO_SPEC_WARN_OPTIONS.youcount\t\t= \"特殊警报：当你受到$spell:%s影响时(带计数)\"\nL.AUTO_SPEC_WARN_OPTIONS.youpos\t\t\t= \"特殊警报：当你受到$spell:%s影响时(带位置)\"\nL.AUTO_SPEC_WARN_OPTIONS.youposcount\t= \"特殊警报：当你受到$spell:%s影响时(带位置和计数)\"\nL.AUTO_SPEC_WARN_OPTIONS.soakpos\t\t\t= \"特殊警报：当你需要为受到$spell:%s的玩家分担伤害时(带位置)\"\nL.AUTO_SPEC_WARN_OPTIONS.target\t\t\t= \"特殊警报：当他人受到$spell:%s影响时\"\nL.AUTO_SPEC_WARN_OPTIONS.targetcount\t\t= \"特殊警报：当他人受到$spell:%s影响时(带计数)\"\nL.AUTO_SPEC_WARN_OPTIONS.defensive\t\t= \"特殊警报：当你受到$spell:%s影响并需要开启自保技能时\"\nL.AUTO_SPEC_WARN_OPTIONS.taunt\t\t\t= \"特殊警报：当另外一个T中了$spell:%s并需要你嘲讽时\"\nL.AUTO_SPEC_WARN_OPTIONS.close\t\t\t= \"特殊警报：当你附近有人受到$spell:%s影响时\"\nL.AUTO_SPEC_WARN_OPTIONS.move\t\t\t= \"特殊警报：当你受到$spell:%s影响而需要移开时\"\nL.AUTO_SPEC_WARN_OPTIONS.keepmove\t\t= \"特殊警报：当你受到$spell:%s影响而需要继续移动时\"\nL.AUTO_SPEC_WARN_OPTIONS.stopmove\t\t= \"特殊警报：当你结束受到$spell:%s影响可以停止移动时\"\nL.AUTO_SPEC_WARN_OPTIONS.dodge\t\t\t= \"特殊警报：当你受到$spell:%s影响并需要躲开攻击\"\nL.AUTO_SPEC_WARN_OPTIONS.dodgecount\t\t= \"特殊警报：当你受到$spell:%s影响并需要躲开攻击(带计数)\"\nL.AUTO_SPEC_WARN_OPTIONS.dodgeloc\t\t= \"特殊警报：当你受到$spell:%s影响并需要朝某个方向躲开攻击\"\nL.AUTO_SPEC_WARN_OPTIONS.moveaway\t\t= \"特殊警报：当你受到$spell:%s影响并需要跑开人群时\"\nL.AUTO_SPEC_WARN_OPTIONS.moveawaycount\t= \"特殊警报：当你受到$spell:%s影响并需要跑开人群时(带计数)\"\nL.AUTO_SPEC_WARN_OPTIONS.moveto\t\t\t= \"特殊警报：当他人中了$spell:%s并需要你去靠近时\"\nL.AUTO_SPEC_WARN_OPTIONS.soak\t\t\t= \"特殊警报：当你需要吸收$spell:%s时\"\nL.AUTO_SPEC_WARN_OPTIONS.jump\t\t\t= \"特殊警报：当你受到$spell:%s影响并需要跳起来时\"\nL.AUTO_SPEC_WARN_OPTIONS.run\t\t\t\t= \"特殊警报：当你受到$spell:%s影响并需要跑开时\"\nL.AUTO_SPEC_WARN_OPTIONS.cast\t\t\t= \"特殊警报：当你需要打断$spell:%s时\"\nL.AUTO_SPEC_WARN_OPTIONS.lookaway\t\t= \"特殊警报：当你受到$spell:%s影响需要快转身时\"\nL.AUTO_SPEC_WARN_OPTIONS.reflect\t\t\t= \"特殊警报：当目标使用$spell:%s需要停止攻击时\"\nL.AUTO_SPEC_WARN_OPTIONS.count\t\t\t= \"特殊警报：$spell:%s(带计数)\"\nL.AUTO_SPEC_WARN_OPTIONS.stack\t\t\t= \"特殊警报：当叠加了>=%d层$spell:%s时\"\nL.AUTO_SPEC_WARN_OPTIONS.stackcount\t\t= \"特殊警报：当叠加了>=%d层$spell:%s时(带计数)\"\nL.AUTO_SPEC_WARN_OPTIONS.switch\t\t\t= \"特殊警报：针对$spell:%s需要转换目标\"\nL.AUTO_SPEC_WARN_OPTIONS.switchcount\t\t= \"特殊警报：针对$spell:%s需要转换目标(带计数)\"\nL.AUTO_SPEC_WARN_OPTIONS.gtfo\t\t\t= \"特殊警报：需要躲开地上的有害技能\"\nL.AUTO_SPEC_WARN_OPTIONS.adds\t\t\t= \"特殊警报：需要攻击小怪\"\nL.AUTO_SPEC_WARN_OPTIONS.addscount\t\t= \"特殊警报：需要攻击小怪(带计数)\"\nL.AUTO_SPEC_WARN_OPTIONS.addscustom\t\t= \"特殊警报：小怪(自定义)\"\nL.AUTO_SPEC_WARN_OPTIONS.targetchange\t= \"特殊警报：需要立刻切换目标时\"\n\n-- Auto-generated Timer Localizations\nL.AUTO_TIMER_TEXTS.target\t\t\t\t= \"%s: >%%s<\"\nL.AUTO_TIMER_TEXTS.targetcount\t\t\t= \"%s: >%%s< (%%s)\"\nL.AUTO_TIMER_TEXTS.cast\t\t\t\t\t= \"%s\"\nL.AUTO_TIMER_TEXTS.castcount\t\t\t\t= \"%s (%%s)\"\nL.AUTO_TIMER_TEXTS.castsource\t\t\t= \"%s: %%s\"\nL.AUTO_TIMER_TEXTS.active\t\t\t\t= \"%s结束\"--Buff/Debuff/event on boss\nL.AUTO_TIMER_TEXTS.fades\t\t\t\t\t= \"%s消失\"--Buff/Debuff on players\nL.AUTO_TIMER_TEXTS.ai\t\t\t\t\t= \"%s人工智能计时冷却\"\nL.AUTO_TIMER_TEXTS.cd\t\t\t\t\t= \"%s冷却\"\nL.AUTO_TIMER_TEXTS.cdcount\t\t\t\t= \"%s冷却（%%s）\"\nL.AUTO_TIMER_TEXTS.cdsource\t\t\t\t= \"%s冷却: >%%s<\"\nL.AUTO_TIMER_TEXTS.cdspecial\t\t\t\t= \"特殊技能冷却\"\nL.AUTO_TIMER_TEXTS.next\t\t\t\t\t= \"下一次%s\"\nL.AUTO_TIMER_TEXTS.nextcount\t\t\t\t= \"下一次%s（%%s）\"\nL.AUTO_TIMER_TEXTS.nextsource\t\t\t= \"下一次%s: >%%s<\"\nL.AUTO_TIMER_TEXTS.nextspecial\t\t\t= \"下一次特殊技能\"\nL.AUTO_TIMER_TEXTS.achievement\t\t\t= \"%s\"\nL.AUTO_TIMER_TEXTS.stage\t\t\t\t\t= \"下一阶段\"\nL.AUTO_TIMER_TEXTS.adds\t\t\t\t\t= \"下一波小怪\"\nL.AUTO_TIMER_TEXTS.addscustom\t\t\t= \"小怪 (%%s)\"\nL.AUTO_TIMER_TEXTS.roleplay\t\t\t\t= \"剧情\"\n\nL.AUTO_TIMER_OPTIONS.target\t\t\t\t= \"计时条：$spell:%s减益效果持续时间 (%ss)\"\nL.AUTO_TIMER_OPTIONS.targetcount\t\t= \"计时条：$spell:%s减益效果持续时间(带计数) (%ss)\"\nL.AUTO_TIMER_OPTIONS.cast\t\t\t\t= \"计时条：$spell:%s施法时间 (%ss)\"\nL.AUTO_TIMER_OPTIONS.castcount\t\t\t= \"计时条：$spell:%s施法时间(带计数) (%ss)\"\nL.AUTO_TIMER_OPTIONS.castsource\t\t\t= \"计时条：$spell:%s施法时间(带来源) (%ss)\"\nL.AUTO_TIMER_OPTIONS.active\t\t\t\t= \"计时条：$spell:%s效果持续时间 (%ss)\"\nL.AUTO_TIMER_OPTIONS.fades\t\t\t\t= \"计时条：$spell:%s何时从玩家身上消失 (%ss)\"\nL.AUTO_TIMER_OPTIONS.ai\t\t\t\t\t= \"计时条：$spell:%s人工智能冷却时间 (%ss)\"\nL.AUTO_TIMER_OPTIONS.cd\t\t\t\t\t= \"计时条：$spell:%s冷却时间 (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdcount\t\t\t\t= \"计时条：$spell:%s冷却时间 (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdsource\t\t\t= \"计时条：$spell:%s冷却时间以及来源 (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdspecial\t\t\t= \"计时条：特殊技能冷却 (%ss)\"\nL.AUTO_TIMER_OPTIONS.next\t\t\t\t= \"计时条：下一次$spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextcount\t\t\t= \"计时条：下一次$spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextsource\t\t\t= \"计时条：下一次$spell:%s以及来源 (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextspecial\t\t\t= \"计时条：下一次特殊技能 (%ss)\"\nL.AUTO_TIMER_OPTIONS.achievement\t\t\t= \"计时条：成就-%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.stage\t\t\t\t= \"计时条：下一阶段 (%ss)\"\nL.AUTO_TIMER_OPTIONS.adds\t\t\t\t= \"计时条：下一波小怪 (%ss)\"\nL.AUTO_TIMER_OPTIONS.addscustom\t\t\t= \"计时条：下一波小怪 (%ss)\"\nL.AUTO_TIMER_OPTIONS.roleplay\t\t\t= \"计时条：剧情 (%ss)\"\n\nL.AUTO_ICONS_OPTION_TARGETS\t\t\t\t= \"为$spell:%s的目标添加团队标记\"\nL.AUTO_ICONS_OPTION_TARGETS_TANK_A\t\t= \"为$spell:%s的目标添加团队标记，以坦克高于近战再高于远程排序，并以字母顺序优先\"\nL.AUTO_ICONS_OPTION_TARGETS_TANK_R\t\t= \"为$spell:%s的目标添加团队标记，以坦克高于近战再高于远程排序，并以团队阵容优先\"\nL.AUTO_ICONS_OPTION_TARGETS_MELEE_A\t\t= \"为$spell:%s的目标添加团队标记，以近战和字母顺序优先\"\nL.AUTO_ICONS_OPTION_TARGETS_MELEE_R\t\t= \"为$spell:%s的目标添加团队标记，以近战和团队阵容优先\"\nL.AUTO_ICONS_OPTION_TARGETS_RANGED_A\t= \"为$spell:%s的目标添加团队标记，以远程和字母顺序优先\"\nL.AUTO_ICONS_OPTION_TARGETS_RANGED_R\t= \"为$spell:%s的目标添加团队标记，以远程和团队阵容优先\"\nL.AUTO_ICONS_OPTION_TARGETS_ALPHA\t\t= \"为$spell:%s的目标添加团队标记，以字母顺序优先\"\nL.AUTO_ICONS_OPTION_TARGETS_ROSTER\t\t= \"为$spell:%s的目标添加团队标记，以团队阵容优先\"\nL.AUTO_ICONS_OPTION_NPCS\t\t\t= \"为$spell:%s添加团队标记\"\nL.AUTO_ICONS_OPTION_CONFLICT\t\t\t= \" （可能与其他选项冲突）\"\nL.AUTO_ARROW_OPTION_TEXT\t\t\t\t= \"为$spell:%s的目标添加箭头\"\nL.AUTO_ARROW_OPTION_TEXT2\t\t\t= \"为$spell:%s的目标添加远离箭头\"\nL.AUTO_ARROW_OPTION_TEXT3\t\t\t= \"为$spell:%s的目标添加前往指定位置的箭头\"\n--\nL.AUTO_YELL_OPTION_TEXT.shortyell\t= \"当你受到$spell:%s影响时大喊\"\nL.AUTO_YELL_OPTION_TEXT.yell\t\t\t= \"当你受到$spell:%s影响时大喊（带名字）\"\nL.AUTO_YELL_OPTION_TEXT.count\t\t= \"当你受到$spell:%s影响时大喊（带倒数）\"\nL.AUTO_YELL_OPTION_TEXT.fade\t\t\t= \"当你身上的$spell:%s即将消失时大喊（带倒数和技能名称）\"\nL.AUTO_YELL_OPTION_TEXT.shortfade\t= \"当你身上的$spell:%s即将消失时大喊（带倒数）\"\nL.AUTO_YELL_OPTION_TEXT.iconfade\t\t= \"当你身上的$spell:%s即将消失时大喊（带倒数和标记）\"\nL.AUTO_YELL_OPTION_TEXT.position\t\t= \"当你受到$spell:%s影响时大喊（带位置和名字）\"\nL.AUTO_YELL_OPTION_TEXT.shortposition\t= \"当你受到$spell:%s影响时大喊（带位置）\"\nL.AUTO_YELL_OPTION_TEXT.combo\t\t= \"当你受到$spell:%s影响时大喊（带一个自定义文本）\"\n--\nL.AUTO_YELL_ANNOUNCE_TEXT.shortyell\t= \"%s\"\nL.AUTO_YELL_ANNOUNCE_TEXT.yell\t\t= UnitName(\"player\") .. \" 中了%s\"\nL.AUTO_YELL_ANNOUNCE_TEXT.count\t\t= UnitName(\"player\") .. \" 中了%s (%%d)\"\nL.AUTO_YELL_ANNOUNCE_TEXT.fade\t\t= \"%s 剩%%d秒\"\nL.AUTO_YELL_ANNOUNCE_TEXT.shortfade\t= \"%%d秒\"\nL.AUTO_YELL_ANNOUNCE_TEXT.iconfade\t= \"{rt%%2$d}%%1$d秒\"\nL.AUTO_YELL_ANNOUNCE_TEXT.position\t= UnitName(\"player\").. \" ({rt%%3$d})中了%1$s (%%1$s - {rt%%2$d})\"\nL.AUTO_YELL_ANNOUNCE_TEXT.shortposition\t= \"{rt%%1$d}%s, %%2$d\" --Icon, Spellname, number\nL.AUTO_YELL_ANNOUNCE_TEXT.combo\t\t= \"%s, %%s\"\n\n--\nL.AUTO_YELL_CUSTOM_FADE\t\t\t\t= \"%s 消失\"\nL.AUTO_HUD_OPTION_TEXT\t\t\t\t= \"为$spell:%s显示HudMap(退休了)\"\nL.AUTO_HUD_OPTION_TEXT_MULTI\t\t\t= \"为多个机制显示HudMap(退休了)\"\nL.AUTO_NAMEPLATE_OPTION_TEXT\t\t\t= \"为$spell:%s显示姓名面板光环，包括兼容插件和\"..L.DBM\nL.AUTO_NAMEPLATE_OPTION_TEXT_FORCED\t\t= \"为$spell:%s显示姓名面板光环，只包括\"..L.DBM\nL.AUTO_RANGE_OPTION_TEXT\t\t\t\t= \"距离监视(%s码)：$spell:%s\"--string used for range so we can use things like \"5/2\" as a value for that field\nL.AUTO_RANGE_OPTION_TEXT_SHORT\t\t= \"距离监视(%s码)\"--For when a range frame is just used for more than one thing\nL.AUTO_RRANGE_OPTION_TEXT\t\t\t= \"反转距离监视(%s码)：$spell:%s\"--Reverse range frame (green when players in range, red when not)\nL.AUTO_RRANGE_OPTION_TEXT_SHORT\t\t= \"反转距离监视(%s码)\"\nL.AUTO_INFO_FRAME_OPTION_TEXT\t\t= \"信息框：$spell:%s\"\nL.AUTO_INFO_FRAME_OPTION_TEXT2\t\t= \"信息框：战斗总览\"\nL.AUTO_READY_CHECK_OPTION_TEXT\t\t= \"当首领开打时播放准备检查的音效（即使没有选定目标）\"\nL.AUTO_SPEEDCLEAR_OPTION_TEXT\t\t= \"为%s显示快速消除计数器\"\n\n--Sounds\nL.AUTO_SOUND_OPTION_TEXT\t\t\t= \"在$spell:%d上播放声音\"\nL.AUTO_SOUND_OPTION_TEXT5\t\t\t= \"$spell:%d 的 5 秒音频倒计时\"\nL.AUTO_SOUND_OPTION_TEXT3\t\t\t= \"$spell:%d 的 3 秒音频倒计时\"\nL.AUTO_SOUND_OPTION_TEXT_YOU\t\t= \"如果 $spell:%d 出现在你身上，播放声音\"\nL.AUTO_SOUND_OPTION_TEXT_SOON\t\t= \"在 $spell:%d 上播放声音\"\nL.AUTO_SOUND_OPTION_TEXT_CLOSE\t\t= \"在您附近的 $spell:%d 上播放声音\"\n\n-- New special warnings\nL.MOVE_WARNING_BAR\t\t\t\t= \"可拖动的团队警报\"\nL.MOVE_WARNING_MESSAGE\t\t\t= \"感谢您使用\" .. L.DEADLY_BOSS_MODS\nL.MOVE_SPECIAL_WARNING_BAR\t\t= \"可拖动的特别警报\"\nL.MOVE_SPECIAL_WARNING_TEXT\t\t= \"特别警报\"\n\nL.HUD_INVALID_TYPE\t\t\t\t= \"无效的HUD类型\"\nL.HUD_INVALID_TARGET\t\t\t\t= \"没有给定HUD目标\"\nL.HUD_INVALID_SELF\t\t\t\t= \"不能把自己设定成HUD目标\"\nL.HUD_INVALID_ICON\t\t\t\t= \"当使用团队标记作为HUD目标定义时，不能定义一个没有团队标记的目标\"\nL.HUD_SUCCESS\t\t\t\t\t= \"HUD成功地使用了你的参数启动了。HUD会在%s关闭, 或者输入 '/dbm hud hide'来关闭\"\nL.HUD_USAGE\t= {\n\tL.DBM..\"-HudMap 可用命令：\",\n\t\"-----------------\",\n\t\"/dbm hud <类型> <目标> <持续时间> 新建一个指向玩家的HUD指示器\",\n\t\"变量-类型: arrow, dot, red, blue, green, yellow, icon (请输入英语。需要相应的带团队标记的目标。)\",\n\t\"变量-目标: target, focus, <玩家名字> (如果是玩家名字是拉丁字母请区分大小写)\",\n\t\"变量-持续时间: 秒数. 如果这个参数留空, 默认为20分钟\",\n\t\"/dbm hud hide: 清空并关闭HUD\"\n}\n\nL.ARROW_MOVABLE\t\t\t\t= \"可移动箭头\"\nL.ARROW_WAY_USAGE\t\t\t\t= \"/dway <x> <y>: 新建一个箭头到指定位置 (使用区域地图坐标系)\"\nL.ARROW_WAY_SUCCESS\t\t\t= \"输入 '/dbm arrow hide' 隐藏箭头, 或到达位置\"\nL.ARROW_ERROR_USAGE\t= {\n\tL.DBM..\"-Arrow 可用命令：\",\n\t\"-----------------\",\n\t\"/dbm arrow <x> <y> 新建一个箭头到指定位置(使用世界坐标系)\",\n\t\"/dbm arrow map <x> <y> 新建一个箭头到指定位置 (使用区域地图坐标系)\",\n\t\"/dbm arrow <玩家名字> 新建一个箭头并指向你队伍或团队中特定的玩家。请区分大小写。\",\n\t\"/dbm arrow hide 隐藏箭头\",\n\t\"/dbm arrow move 移动或锁定箭头\"\n}\n\nL.SPEED_KILL_TIMER_TEXT\t= \"击杀记录\"\nL.SPEED_CLEAR_TIMER_TEXT\t= \"最速清除\"\nL.COMBAT_RES_TIMER_TEXT\t= \"下一次可用战复\"\nL.TIMER_RESPAWN\t\t= \"%s 刷新\"\n\nL.LAG_CHECKING\t\t\t\t= \"延时检测请稍后... \"\nL.LAG_HEADER\t\t\t\t\t= L.DEADLY_BOSS_MODS .. \" - 延时检测\"\nL.LAG_ENTRY\t\t\t\t\t= \"%s：世界延时[%d毫秒] / 本地延时[%d毫秒]\"\nL.LAG_FOOTER\t\t\t\t\t= \"未反馈此次检测的团员:%s\"\n\nL.DUR_CHECKING\t\t\t\t= \"全团装备耐久度检测请稍后... \"\nL.DUR_HEADER\t\t\t\t\t= L.DEADLY_BOSS_MODS .. \"- 装备耐久度检测结果\"\nL.DUR_ENTRY\t\t\t\t\t= \"%s: %d 耐久度 / %s件装备损坏\"\nL.DUR_FOOTER\t\t\t\t\t= \"未反馈此次检测的团员:%s\"\n\nL.OVERRIDE_ACTIVATED\t\t\t= \"本次战斗的配置已经被队长的配置覆盖\"\n\n--LDB\nL.LDB_TOOLTIP_HELP1\t= \"左键 打开\" .. L.DBM\nL.LDB_TOOLTIP_HELP2\t= \"Alt+右键 启用安静模式\"\nL.SILENTMODE_IS\t\t= \"静音模式为：\"\n\nL.WORLD_BUFFS.hordeOny\t\t = \"部落的人民，奥格瑞玛的居民，来吧，聚集在一起，欢庆部落英雄的诞生\"\nL.WORLD_BUFFS.allianceOny\t = \"暴风城的城民和盟友们，今天，有人创造了历史\"\nL.WORLD_BUFFS.hordeNef\t\t = \"奈法利安被杀掉了！奥格瑞玛的居民\"\nL.WORLD_BUFFS.allianceNef\t = \"联盟的人民们，黑石领主已经被干掉了！\"\nL.WORLD_BUFFS.zgHeart\t\t = \"我们就要摆脱夺灵者的威胁了，只差最后一步……\"\nL.WORLD_BUFFS.zgHeartBooty\t = \"夺灵者已经被打败了！我们不再有危险了！\"\nL.WORLD_BUFFS.zgHeartYojamba = \"开始仪式，我的仆从们。我们必须把哈卡完全打回扭曲虚空中！\"\nL.WORLD_BUFFS.rendHead\t\t = \"那个假的酋长，雷德·黑手，已经倒下了！\"\n\n--Retail Globals\nL.RAID_INFO_WORLD_BOSS\t\t= \"世界首领\"\nL.SCENARIO_STAGE\t\t\t= \"阶段%d\"\nL.SPECIALIZATION\t\t\t= \"专精\" -- ID: 22433\n-- EJ\nL.HARD_MODE\t\t\t\t\t= \"困难模式\" -- 17220\nL.BOSS_YOU_DEFEATED\t\t\t= \"你击败了\" -- 25559 is \"你被击败了\" but means \"You are defeated\". Corrected by Emi.\nL.BOSS_KILL_SUBTITLE\t\t= \"已被击败\" -- 25560\n"
  },
  {
    "path": "DBM-Core/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nif not DBM_CORE_L then DBM_CORE_L = {} end\n\nlocal L = DBM_CORE_L\n\nL.HOW_TO_USE_MOD\t\t\t\t\t= \"Willkommen bei \"..L.DBM..\". Tippe /dbm help für eine Liste unterstützter Kommandos. Für den Zugriff auf Einstellungen tippe /dbm in den Chat um die Konfiguration zu beginnen. Lade gewünschte Zonen manuell um jegliche Boss-spezifische Einstellungen nach deinen Wünschen zu konfigurieren. \"..L.DBM..\" setzt Standardeinstellungen für deine Spezialisierung, die du aber noch genauer anpassen kannst.\"\nL.SILENT_REMINDER\t\t\t\t\t= \"Erinnerung: \"..L.DBM..\" befindet sich noch im Lautlos-Modus.\"\n\nL.LOAD_MOD_ERROR\t\t\t\t= \"Fehler beim Laden der Boss Mods für %s: %s\"\nL.LOAD_MOD_SUCCESS\t\t\t= \"Boss Mods für '%s' geladen. Für weitere Einstellungen wie benutzerdefinierte Sounds und individuelle Warnnotizen /dbm eingeben.\"\nL.LOAD_MOD_COMBAT\t\t\t= \"Laden von '%s' verzögert bis du den Kampf verlässt.\"\nL.LOAD_GUI_ERROR\t\t\t\t= \"Konnte die grafische Benutzeroberfläche nicht laden: %s.\"\nL.LOAD_GUI_COMBAT\t\t\t= \"Die grafische Benutzeroberfläche kann nicht im Kampf geladen werden. Zur Vornahme von Einstellungen bitte diese zunächst außerhalb des Kampfes laden. Danach steht sie auch im Kampf zur Verfügung.\"\nL.BAD_LOAD\t\t\t\t\t= \"Dein Boss Mod für diese Instanz konnte nicht vollständig korrekt im Kampf geladen werden. Bitte führe baldmöglichst nach Kampfende /reload aus.\"\nL.LOAD_MOD_VER_MISMATCH\t\t= \"%s kann nicht geladen werden, da dein DBM-Core die Voraussetzungen nicht erfüllt. Es wird eine aktualisierte Version benötigt.\"\nL.LOAD_MOD_EXP_MISMATCH\t\t= \"%s kann nicht geladen werden, da es für eine WoW Erweiterung entwickelt wurde, die derzeit nicht verfügbar ist. Mit Verfügbarkeit der neuen Erweiterung wird dieses Mod automatisch funktionieren.\"\nL.LOAD_MOD_DISABLED\t\t\t= \"%s ist installiert, aber derzeit nicht aktiviert. Dieses Mod wird nicht geladen, falls du es nicht aktivierst.\"\nL.LOAD_MOD_DISABLED_PLURAL\t= \"%s sind installiert, aber derzeit nicht aktiviert. Diese Mods werden nicht geladen, falls du sie nicht aktivierst.\"\n\nL.COPY_URL_DIALOG\t\t\t\t\t= \"Kopiere URL\"\n\n--Post Patch 7.1\nL.NO_RANGE\t\t\t\t\t= \"Das Abstandsradar kann in Instanzen nicht genutzt werden. Es wird stattdessen die alte textbasierte Abstandsanzeige verwendet.\"\nL.NO_ARROW\t\t\t\t\t= \"Der Pfeil kann in Instanzen nicht genutzt werden.\"\nL.NO_HUD\t\t\t\t\t\t= \"Die HudMap kann in Instanzen nicht genutzt werden.\"\n\nL.DYNAMIC_DIFFICULTY_CLUMP\t= L.DBM..\" hat das dynamische Abstandsfenster für diesen Kampf deaktiviert, da nicht genügend Informationen vorliegen, auf wieviel versammelte Spieler bei deiner Gruppengröße geprüft werden muss.\"\nL.DYNAMIC_ADD_COUNT\t\t\t= L.DBM..\" hat Warnungen bezüglich der Anzahl der Gegner für diesen Kampf deaktiviert, da nicht genügend Informationen vorliegen, wieviel Gegner bei deiner Gruppengröße erscheinen.\"\nL.DYNAMIC_MULTIPLE\t\t\t= L.DBM..\" hat mehrere Funktionalitäten für diesen Kampf deaktiviert, da für deine Gruppengröße nicht genügend Informationen über bestimmte Kampfmechaniken vorliegen.\"\n\nL.LOOT_SPEC_REMINDER\t\t\t= \"Deine aktuelle Spezialisierung ist %s. Deine aktuelle Beutespezialisierung ist %s.\"\n\nL.BIGWIGS_ICON_CONFLICT\t\t= L.DBM..\" hat festgestellt, dass du das Setzen von Schlachtzugzeichen in \\\"BigWigs\\\" und in \\\"\"..L.DBM..\"\\\" aktiviert hast. Bitte deaktiviere das Setzen von Zeichen in einem der beiden Addons um Konflikte zu vermeiden.\"\n\nL.MOD_AVAILABLE\t\t\t\t= \"Das Mod \\\"%s\\\" ist für diese Zone/Boss verfügbar. Du kannst es von Curse/WoWI oder deadlybossmods.com herunterladen.\"\n\nL.COMBAT_STARTED\t\t\t\t= \"Kampf gegen %s hat begonnen. Viel Glück! :)\";\nL.COMBAT_STARTED_IN_PROGRESS\t= \"Du wurdest in den laufenden Kampf gegen %s verwickelt. Viel Glück! :)\"\n--L.GUILD_COMBAT_STARTED\t\t= \"Kampf gegen %s wurde von deiner Gilde begonnen.\"--Uncomment when updated, args have changed\nL.SCENARIO_STARTED\t\t\t= \"%s gestartet. Viel Glück! :)\"\nL.SCENARIO_STARTED_IN_PROGRESS\t=\t\"Du bist dem laufenden Szenario %s beigetreten. Viel Glück! :)\"\nL.BOSS_DOWN\t\t\t\t\t= \"%s besiegt nach %s!\"\nL.BOSS_DOWN_I\t\t\t\t= \"%s besiegt! Das war dein %d. Sieg.\"\nL.BOSS_DOWN_L\t\t\t\t= \"%s besiegt nach %s! Dein letzter Sieg hat %s gedauert und der schnellste %s. Das war dein %d. Sieg.\"\nL.BOSS_DOWN_NR\t\t\t\t= \"%s besiegt nach %s! Das ist ein neuer Rekord! (Der alte Rekord war %s.) Das war dein %d. Sieg.\"\n--L.GUILD_BOSS_DOWN\t\t\t= \"%s wurde durch deine Gilde besiegt nach %s!\"--Uncomment when updated, args have changed\nL.SCENARIO_COMPLETE\t\t\t= \"%s abgeschlossen nach %s!\"\nL.SCENARIO_COMPLETE_I\t\t= \"%s abgeschlossen! Das war dein %d. Abschluss.\"\nL.SCENARIO_COMPLETE_L\t\t= \"%s abgeschlossen nach %s! Dein letzter Abschluss hat %s gedauert und der schnellste %s. Das war dein %d. Abschluss.\"\nL.SCENARIO_COMPLETE_NR\t\t= \"%s abgeschlossen nach %s! Das ist ein neuer Rekord! (Der alte Rekord war %s.) Das war dein %d. Abschluss.\"\nL.COMBAT_ENDED_AT\t\t\t= \"Kampf gegen %s (%s) hat nach %s aufgehört.\"\nL.COMBAT_ENDED_AT_LONG\t\t= \"Kampf gegen %s (%s) hat nach %s aufgehört. Das war deine %d. Niederlage auf diesem Schwierigkeitsgrad.\"\n--L.GUILD_COMBAT_ENDED_AT\t\t= \"Deine Gilde war %s (%s) unterlegen nach %s.\"--Uncomment when updated, args have changed\nL.SCENARIO_ENDED_AT\t\t\t= \"%s abgebrochen nach %s.\"\nL.SCENARIO_ENDED_AT_LONG\t\t= \"%s abgebrochen nach %s. Das war dein %d. Abbruch auf diesem Schwierigkeitsgrad.\"\nL.COMBAT_STATE_RECOVERED\t\t= \"Kampf gegen %s hat vor %s begonnen, Neukalibrierung der Timer erfolgt...\"\nL.TRANSCRIPTOR_LOG_START\t\t= \"\\\"Transcriptor\\\"-Aufzeichnung gestartet.\"\nL.TRANSCRIPTOR_LOG_END\t\t= \"\\\"Transcriptor\\\"-Aufzeichnung beendet.\"\n\nL.MOVIE_SKIPPED\t\t\t\t= L.DBM..\" hat versucht eine Videosequenz automatisch zu überspringen.\"\nL.BONUS_SKIPPED\t\t\t\t= L.DBM..\" hat das Beutefenster für den Bonuswurf automatisch geschlossen. Tippe /dbmbonusroll binnen drei Minuten, um es bei Bedarf anzuzeigen.\"\nL.BONUS_EXPIRED\t\t\t\t= \"Du hast versucht mittels /dbmbonusroll ein Beutefenster für den Bonuswurf zu öffnen. Es ist derzeit aber leider kein Bonuswurf aktiv.\"\n\nL.AFK_WARNING\t\t\t\t= \"Du bist \\\"AFK\\\" und im Kampf (%d Prozent Gesundheit verbleibend), Alarmsound ausgelöst.  Entferne deine \\\"AFK\\\"-Markierung oder deaktiviere diese Alarmierung unter \\\"Sonstige Funktionen\\\", falls du nicht \\\"AFK\\\" bist.\"\n\nL.COMBAT_STARTED_AI_TIMER\t= \"Meine CPU ist ein neuronaler Prozessor, ein lernender Computer. (Dieser Kampf wird die neuen KI-Funktionen zur Erzeugung von Timernäherungen verwenden.)\"\n\nL.PROFILE_NOT_FOUND\t\t\t= \"<\"..L.DBM..\"> Dein derzeitiges Profil ist korrupt. \"..L.DBM..\" wird das Profil 'Default' laden.\"\nL.PROFILE_CREATED\t\t\t= \"Profil '%s' erzeugt.\"\nL.PROFILE_CREATE_ERROR\t\t= \"Erzeugen des Profils fehlgeschlagen. Ungültiger Profilname.\"\nL.PROFILE_CREATE_ERROR_D\t\t= \"Erzeugen des Profils fehlgeschlagen. Profil '%s' existiert bereits.\"\nL.PROFILE_APPLIED\t\t\t= \"Profil '%s' angewendet.\"\nL.PROFILE_APPLY_ERROR\t\t= \"Anwenden des Profils fehlgeschlagen. Profil '%s' existiert nicht.\"\nL.PROFILE_COPIED\t\t\t\t= \"Profil '%s' kopiert.\"\nL.PROFILE_COPY_ERROR\t\t\t= \"Kopieren des Profils fehlgeschlagen. Profil '%s' existiert nicht.\"\nL.PROFILE_COPY_ERROR_SELF\t= \"Das Profil kann nicht auf sich selbst kopiert werden.\"\nL.PROFILE_DELETED\t\t\t= \"Profil '%s' gelöscht. Profil 'Default' wird angewendet.\"\nL.PROFILE_DELETE_ERROR\t\t= \"Löschen des Profils fehlgeschlagen. Profil '%s' existiert nicht.\"\nL.PROFILE_CANNOT_DELETE\t\t= \"Das Profil 'Default' kann nicht gelöscht werden.\"\nL.MPROFILE_COPY_SUCCESS\t\t= \"Mod-Einstellungen von %s (Spez. %d) wurden kopiert.\"\nL.MPROFILE_COPY_SELF_ERROR\t= \"Die Charaktereinstellungen können nicht auf sich selbst kopiert werden.\"\nL.MPROFILE_COPY_S_ERROR\t\t= \"Quelle korrupt. Die Einstellungen wurden nicht oder unvollständig kopiert. Kopieren fehlgeschlagen.\"\nL.MPROFILE_COPYS_SUCCESS\t\t= \"Mod-Soundeinstellungen oder Notizen von %s (Spez. %d) wurden kopiert.\"\nL.MPROFILE_COPYS_SELF_ERROR\t= \"Die Charaktersoundeinstellungen oder Notizen können nicht auf sich selbst kopiert werden.\"\nL.MPROFILE_COPYS_S_ERROR\t\t= \"Quelle korrupt. Die Soundeinstellungen oder Notizen wurden nicht oder unvollständig kopiert. Kopieren fehlgeschlagen.\"\nL.MPROFILE_DELETE_SUCCESS\t= \"Mod-Einstellungen von %s (Spez. %d) wurden gelöscht.\"\nL.MPROFILE_DELETE_SELF_ERROR\t= \"Die derzeit genutzten Mod-Einstellungen können nicht gelöscht werden.\"\nL.MPROFILE_DELETE_S_ERROR\t= \"Quelle korrupt. Die Einstellungen wurden nicht oder unvollständig gelöscht. Löschen fehlgeschlagen.\"\n\nL.NOTE_SHARE_SUCCESS\t\t\t= \"%s hat die Notiz für %s geteilt.\"\nL.NOTE_SHARE_LINK\t\t\t= \"Hier klicken um die Notiz zu öffnen\"\nL.NOTE_SHARE_FAIL\t\t\t= \"%s hat versucht eine Notiz mit dir für %s zu teilen. Ein Mod für diese Fähigkeit ist jedoch nicht installiert oder nicht geladen. Falls du diese Notiz benötigst, solltest du sicherstellen, dass du das entsprechende Mod geladen hast und erneut um Teilung der Notiz bitten.\"\n\nL.NOTEHEADER\t\t\t\t\t= \"Gib deine Notiz für %s hier ein. Umschließe Spielernamen mit >< für Klassenfarben. Trenne Notizen mit '/' bei Alarmen mit mehreren Notizen.\"\nL.NOTEFOOTER\t\t\t\t\t= \"'OK' um die Änderungen zu akzeptieren, sonst 'Abbrechen'\"\nL.NOTESHAREDHEADER\t\t\t= \"%s hat die Notiz unten für %s geteilt. Falls du sie akzeptierst, wird deine derzeitige Notiz überschrieben.\"\nL.NOTESHARED\t\t\t\t\t= \"Deine Notiz wurde an die Gruppe gesendet.\"\nL.NOTESHAREERRORSOLO\t\t\t= \"Einsam? Du solltest keine Notizen mit dir selbst teilen.\"\nL.NOTESHAREERRORBLANK\t\t= \"Leere Notizen können nicht geteilt werden.\"\nL.NOTESHAREERRORGROUPFINDER\t= \"In automatischen Gruppen der Gruppensuche können keine Notizen geteilt werden.\"\nL.NOTESHAREERRORALREADYOPEN\t= \"Die geteilte Notiz kann nicht geöffnet werden während der Notizeditor bereits geöffnet ist, damit die gerade von dir bearbeitete Notiz nicht verloren geht.\"\n\nL.ALLMOD_DEFAULT_LOADED\t\t= \"Standardeinstellungen für alle Mods dieser Instanz geladen.\"\nL.ALLMOD_STATS_RESETED\t\t= \"Alle Mod-Statistiken wurden zurückgesetzt.\"\nL.MOD_DEFAULT_LOADED\t\t\t= \"Standardeinstellungen für diesen Kampf geladen.\"\n\nL.WORLDBOSS_ENGAGED\t\t\t= \"Kampf gegen %s wurde möglicherweise auf deinem Realm bei %s Prozent Leben begonnen. (gesendet von %s)\"\nL.WORLDBOSS_DEFEATED\t\t\t= \"%s wurde möglichweise auf deinem Realm besiegt. (gesendet von %s)\"\n\nL.TIMER_FORMAT_SECS\t\t\t= \"%.2f |4Sekunde:Sekunden;\"\nL.TIMER_FORMAT_MINS\t\t\t= \"%d |4Minute:Minuten;\"\nL.TIMER_FORMAT\t\t\t\t= \"%d |4Minute:Minuten; und %.2f |4Sekunde:Sekunden;\"\n\nL.MIN\t\t\t\t\t\t= \"Min\"\nL.MIN_FMT\t\t\t\t\t= \"%d Min\"\nL.SEC\t\t\t\t\t\t= \"Sek\"\nL.SEC_FMT\t\t\t\t\t= \"%s Sek\"\n\nL.GENERIC_WARNING_OTHERS\t= \"und einem anderen\"\nL.GENERIC_WARNING_OTHERS2\t= \"und %d anderen\"\nL.GENERIC_WARNING_BERSERK\t= \"Berserker in %s %s\"\nL.GENERIC_TIMER_BERSERK\t\t= \"Berserker\"\nL.OPTION_TIMER_BERSERK\t\t= \"Zeige Zeit bis $spell:26662\"\nL.GENERIC_TIMER_COMBAT\t\t= \"Kampfbeginn\"\nL.OPTION_TIMER_COMBAT\t\t= \"Zeige Zeit bis Kampfbeginn\"\nL.BAD\t\t\t\t\t\t= \"Schlechtes\"\nL.OPTION_HEALTH_FRAME\t\t= \"BossHealth-Frame anzeigen\"\n\nL.OPTION_CATEGORY_TIMERS\t\t\t= \"Timer\"\nL.OPTION_CATEGORY_WARNINGS\t\t= \"Allgemeine Ansagen\"\nL.OPTION_CATEGORY_WARNINGS_YOU\t= \"Persönliche Ansagen\"\nL.OPTION_CATEGORY_WARNINGS_OTHER\t= \"Zielansagen\"\nL.OPTION_CATEGORY_WARNINGS_ROLE\t= \"Rollenansagen\"\nL.OPTION_CATEGORY_SOUNDS\t\t\t= \"Sounds\"\nL.OPTION_CATEGORY_DROPDOWNS\t\t= \"Dropdown-Listen\"\n\nL.AUTO_RESPONDED\t\t\t\t\t\t= \"Automatisch geantwortet.\"\nL.STATUS_WHISPER\t\t\t\t\t\t= \"%s: %s, %d/%d Spieler am Leben\"\n--Bosses\nL.AUTO_RESPOND_WHISPER\t\t\t\t= \"%s ist damit beschäftigt gegen %s zu kämpfen! (%s, %d/%d Spieler am Leben)\"\nL.WHISPER_COMBAT_END_KILL\t\t\t= \"%s hat %s besiegt!\"\nL.WHISPER_COMBAT_END_KILL_STATS\t\t= \"%s hat %s besiegt! Das war der %d. Sieg.\"\nL.WHISPER_COMBAT_END_WIPE_AT\t\t\t= \"%s war %s bei %s unterlegen.\"\nL.WHISPER_COMBAT_END_WIPE_STATS_AT\t= \"%s war %s bei %s unterlegen. Das war die %d. Niederlage auf diesem Schwierigkeitsgrad.\"\n--Scenarios (no percents. words like \"fighting\" or \"wipe\" changed to better fit scenarios)\nL.AUTO_RESPOND_WHISPER_SCENARIO\t\t= \"%s ist beschäftigt in %s (%d/%d Spieler am Leben)\"\nL.WHISPER_SCENARIO_END_KILL\t\t\t= \"%s hat %s abgeschlossen!\"\nL.WHISPER_SCENARIO_END_KILL_STATS\t= \"%s hat %s abgeschlossen! Das war der %d. Abschluss.\"\nL.WHISPER_SCENARIO_END_WIPE\t\t\t= \"%s hat %s abgebrochen.\"\nL.WHISPER_SCENARIO_END_WIPE_STATS\t= \"%s hat %s abgebrochen. Das war der %d. Abbruch auf diesem Schwierigkeitsgrad.\"\n\nL.VERSIONCHECK_HEADER\t\t= \"Boss Mod - Versionen\"\nL.VERSIONCHECK_ENTRY\t\t\t= \"%s: %s (%s) %s\"--One Boss mod\nL.VERSIONCHECK_ENTRY_TWO\t\t= \"%s: %s (%s) und %s (%s)\"--Two Boss mods\nL.VERSIONCHECK_ENTRY_NO_DBM\t= \"%s: Kein Boss Mod installiert.\"\nL.VERSIONCHECK_FOOTER\t\t= \"%d Spieler mit \"..L.DBM..\" und %d Spieler mit BigWigs gefunden.\"\nL.VERSIONCHECK_OUTDATED\t\t= \"Folgende %d Spieler haben veraltete \"..L.DBM..\" Versionen: %s\"\nL.YOUR_VERSION_OUTDATED\t\t= \"Deine Version von \"..L.DEADLY_BOSS_MODS..\" ist veraltet! Bitte besuche \" .. L.UPDATEREMINDER_URL ..\" um die neueste Version herunterzuladen.\"\nL.VOICE_PACK_OUTDATED\t\t= \"Deinem ausgewählten \"..L.DBM..\" Sprachpack fehlen einige Sounds, die von von \"..L.DBM..\" unterstützt werden. Für einige Warnungssounds werden weiterhin die Standardsounds abgespielt. Bitte lade dir eine neuere Version des Spachpacks herunter oder kontaktiere den Autor des Sprachpacks für ein Update, welches die fehlenden Sounds enthält.\"\nL.VOICE_MISSING\t\t\t\t= \"Du hast einen \"..L.DBM..\" Sprachpack ausgewählt, der nicht gefunden werden konnte. Deine Auswahl wurde auf 'Kein Sprachpack' zurückgesetzt. Bitte stelle sicher, dass der Sprachpack korrekt installiert und in der Addon-Liste aktiviert wurde, falls dies ein Fehler ist.\"\nL.VOICE_DISABLED\t\t\t\t= \"Du hast derzeit mindestens einen \"..L.DBM..\" Sprachpack installiert, aber keinen aktiviert. Falls du einen Sprachpack nutzen möchtest, dann wähle ihn unter \\\"Gesprochene Warnungen\\\" aus. Ansonsten kannst du die ungenutzten Sprachpacks deinstallieren, um diese Meldung zu unterdrücken.\"\nL.VOICE_COUNT_MISSING\t\t= \"Für die Countdown-Stimme %d ist ein Sprach-/Zählpack ausgewählt, der nicht gefunden werden konnte. Die Stimme wurde auf die Standardeinstellung zurückgesetzt: %s.\"\n--L.BIG_WIGS\n\nL.UPDATEREMINDER_HEADER\t\t\t= \"Deine Version von \"..L.DEADLY_BOSS_MODS..\" ist veraltet.\\n Version %s (%s) steht hier zum download bereit: \" .. L.UPDATEREMINDER_URL\nL.UPDATEREMINDER_FOOTER\t\t\t= \"Drücke \" .. (IsMacClient() and \"Cmd-C\" or \"Strg+C\")  ..  \" um den Downloadlink in die Zwischenablage zu kopieren.\"\nL.UPDATEREMINDER_FOOTER_GENERIC\t= \"Drücke \" .. (IsMacClient() and \"Cmd-C\" or \"Strg+C\")  ..  \" um den Link in die Zwischenablage zu kopieren.\"\nL.UPDATEREMINDER_DISABLE\t\t\t= \"WARNUNG: Da dein \"..L.DEADLY_BOSS_MODS..\" zu veraltet ist, hat es sich zwangsweise deaktiviert und kann erst nach einer Aktualisierung wieder genutzt werden. Derart alter und inkompatibler Code kann zu einem schlechten Spielerlebnis bei dir oder deinen Schlachtzugsmitgliedern führen.\"\nL.UPDATEREMINDER_HOTFIX\t\t\t= \"Deine Version von \"..L.DBM..\" hat bekannte Probleme während dieses Bosskampfes, die durch ein Update auf die neueste DBM-Version behoben werden können.\"\nL.UPDATEREMINDER_HOTFIX_ALPHA\t= \"Deine Version von \"..L.DBM..\" hat bekannte Probleme während dieses Bosskampfes, die in einer künftigen DBM-Version behoben sind (oder in der neuesten Alphaversion).\"\nL.UPDATEREMINDER_MAJORPATCH\t\t= \"WARNUNG: Da dein \"..L.DEADLY_BOSS_MODS..\" veraltet und deshalb leider für diesen Major Patch des Spiels nicht mehr geeignet ist, hat es sich bis zu einer Aktualisierung deaktiviert. Alter und inkompatibler Code kann zu einem schlechten Spielerlebnis bei dir oder deinen Schlachtzugsmitgliedern führen. Bitte lade dir baldmöglichst eine neue Version von deadlybossmods.com oder Curse herunter.\"\nL.VEM\t\t\t\t\t\t\t= \"WARNUNG: Du benutzt \"..L.DEADLY_BOSS_MODS..\" zusammen mit Voice Encounter Mods. \"..L.DBM..\" läuft nicht in dieser Konfiguration und wird deshalb nicht geladen.\"\nL.OUTDATEDPROFILES\t\t\t\t\t= \"WARNUNG: DBM-Profiles ist mit dieser Version von DBM nicht kompatibel. Es muss entfernt werden bevor \"..L.DBM..\" genutzt werden kann um Konflikte zu vermeiden.\"\nL.DPMCORE\t\t\t\t\t\t= \"WARNUNG: Deadly Pvp Mods (DPM) wird nicht mehr gepflegt und ist mit dieser Version von \"..L.DBM..\" nicht kompatibel. Es muss entfernt werden bevor \"..L.DBM..\" genutzt werden kann um Konflikte zu vermeiden.\"\nL.DBMLDB\t\t\t\t\t\t\t= \"WARNUNG: DBM-LDB ist nun DBM-Core integriert. Obwohl es keine schädlichen Auswirkungen hat, wird empfohlen 'DBM-LDB' aus dem Addon-Ordner zu entfernen.\"\nL.UPDATE_REQUIRES_RELAUNCH\t\t= \"WARNUNG: Dieses Update von \"..L.DBM..\" arbeitet erst nach einem vollständigem Neustart des Spielclients korrekt. Das Update enthält neue Dateien oder Änderungen an .toc-Dateien, die nicht mit \\\"/reload\\\" geladen werden können. Die Funktionsfähigkeit von DBM kann beeinträchtigt sein und es können Fehler auftreten, bis du den Spielclient neu startest.\"\nL.OUT_OF_DATE_NAG\t\t\t\t= \"Deine Version von \"..L.DEADLY_BOSS_MODS..\" ist veraltet. Du solltest eine Aktualisierung für diesen Kampf durchführen, da du sonst wichtige Warnungen oder Timer verpassen könntest oder automatische \\\"Schreie\\\" fehlen, die der Rest deines Schlachtzuges von dir erwartet.\"\n\nL.MOVABLE_BAR\t\t\t\t= \"Zieh mich!\"\n\nL.PIZZA_SYNC_INFO\t\t\t\t\t= \"|Hplayer:%1$s|h[%1$s]|h hat dir einen DBM-Timer geschickt: '%2$s'\\n|HDBM:cancel:%2$s:nil|h|cff3588ff[Diesen Timer abbrechen]|r|h  |HDBM:ignore:%2$s:%1$s|h|cff3588ff[Timer von %1$s ignorieren]|r|h\"\n--L.PIZZA_SYNC_INFO\t\t\t\t\t= \"|Hplayer:%1$s|h[%1$s]|h hat dir einen DBM-Timer geschickt\"\nL.PIZZA_CONFIRM_IGNORE\t\t\t= \"Willst du wirklich DBM-Timer von %s für diese Sitzung ignorieren?\"\nL.PIZZA_ERROR_USAGE\t\t\t\t= \"Benutzung: /dbm [broadcast] timer <Sekunden> <Text>. <Sekunden> muss größer als 1 sein.\"\n\n--L.MINIMAP_TOOLTIP_HEADER\nL.MINIMAP_TOOLTIP_FOOTER\t\t= \"Shift gedrückt halten und Ziehen zum Bewegen\"\n\nL.RANGECHECK_HEADER\t\t\t= \"Abstandscheck (%d yd)\"\nL.RANGECHECK_SETRANGE\t\t= \"Abstand einstellen\"\nL.RANGECHECK_SETTHRESHOLD\t= \"Spielerschwellwert\"\nL.RANGECHECK_SOUNDS\t\t\t= \"Sounds\"\nL.RANGECHECK_SOUND_OPTION_1\t= \"Sound, falls ein Spieler in Reichweite ist\"\nL.RANGECHECK_SOUND_OPTION_2\t= \"Sound, falls mehr als ein Spieler in Reichweite ist\"\nL.RANGECHECK_SOUND_0\t\t\t= \"Kein Sound\"\nL.RANGECHECK_SOUND_1\t\t\t= \"Standard-Sound\"\nL.RANGECHECK_SOUND_2\t\t\t= \"Nerviges Piepsen\"\nL.RANGECHECK_SETRANGE_TO\t\t= \"%dm\"\nL.RANGECHECK_OPTION_FRAMES\t= \"Fenster\"\nL.RANGECHECK_OPTION_RADAR\t= \"Zeige Radarfenster\"\nL.RANGECHECK_OPTION_TEXT\t\t= \"Zeige Textfenster\"\nL.RANGECHECK_OPTION_BOTH\t\t= \"Zeige beide Fenster\"\nL.RANGERADAR_HEADER\t\t\t\t= \"Abstand:%d Spieler:%d\"\nL.RANGERADAR_BOSS_HEADER\t\t= \"Boss-Reichweite (%d yd)\"\nL.RANGERADAR_IN_RANGE_TEXT\t= \"%d in Reichweite (%0.1f yd)\"\nL.RANGERADAR_IN_RANGE_TEXTONE= \"%s (%0.1f yd)\"\n\nL.INFOFRAME_SHOW_SELF\t\t= \"Eigene Stärke immer anzeigen\" -- Always show your own power value even if you are below the threshold\nL.INFOFRAME_SETLINES\t\t\t= \"Setze maximale Zeilenanzahl\"\nL.INFOFRAME_LINESDEFAULT\t\t= \"gesetzt vom Mod\"\nL.INFOFRAME_LINES_TO\t\t\t= \"%d Zeilen\"\nL.INFOFRAME_POWER\t\t\t= \"Energie\"\nL.INFOFRAME_MAIN\t\t\t\t= \"Primär:\"--Main power\nL.INFOFRAME_ALT\t\t\t\t= \"Alt:\"--Alternate Power\n\nL.LFG_INVITE\t\t\t\t\t\t= \"Einladung der Gruppensuche\"\n\nL.SLASHCMD_HELP\t\t\t\t= {\n\t\"Verfügbare Slash-Kommandos:\",\n\t\"-----------------\",\n\t\"/dbm unlock: Zeigt einen bewegbaren Timer an (alias: move).\",\n\t\"/range <number> oder /distance <number>: Zeige Abstandsfenster. /rrange oder /rdistance um die Farben zu invertieren.\",\n\t\"/hudar <number>: Zeige HudMap-basierenden Abstandssucher.\",\n\t\"/dbm timer: Startet einen benutzerdefinierten DBM-Timer, siehe '/dbm timer' für Details.\",\n\t\"/dbm arrow: Zeigt den DBM-Pfeil, siehe '/dbm arrow help' für Details.\",\n\t\"/dbm hud: Zeige die DBM-HudMap, siehe '/dbm hud' für Details.\",\n\t\"/dbm help2: Zeige Slash-Kommandos für das Management von Schlachtzügen.\"\n}\nL.SLASHCMD_HELP2\t\t\t\t= {\n\t\"Verfügbare Slash-Kommandos:\",\n\t\"-----------------\",\n\t\"/dbm pull <sec>: Schickt einen Pull-Timer für <sec> Sekunden an alle Schlachzugsmitglieder (nur als Leiter/Assistent).\",\n\t\"/dbm break <min>: Schickt einen Pause-Timer für <min> Minuten an alle Schlachzugsmitglieder (nur als Leiter/Assistent).\",\n\t\"/dbm version: Führt eine Boss Mod Versionsprüfung durch (Alias: ver).\",\n\t\"/dbm version2: Führt eine Boss Mod Versionsprüfung durch und flüstert Nutzer mit veralteten Versionen an (Alias: ver2).\",\n\t\"/dbm lag: Prüft die Latenz im gesamten Schlachtzug.\",\n\t\"/dbm durability: Prüft die Haltbarkeit im gesamten Schlachtzug.\"\n}\nL.TIMER_USAGE\t= {\n\t\"DBM-Timer Kommandos:\",\n\t\"-----------------\",\n\t\"/dbm timer <sec> <text>: Startet einen <sec> Sekunden langen Timer mit deinem <text>.\",\n\t\"/dbm ltimer <sec> <text>: Startet einen Timer, der automatisch wiederholt wird, bis er abgebrochen wird.\",\n\t\"/dbm broadcast timer/ltimer/cltimer <sec> <text>: schickt den Timer an den Schlachtzug (nur als Leiter/Assistent).\",\n\t\"/dbm timer endloop: Stoppt alle ltimer-.\",\n}\n\nL.ERROR_NO_PERMISSION\t\t= \"Du hast nicht die benötigte Berechtigung für diesen Befehl!\"\n\nL.BREAK_USAGE\t\t\t\t= \"Ein Pause-Timer kann nicht länger als 60 Minuten sein. Beachte bitte, dass für Pausen-Timer die Zeit in Minuten (und nicht in Sekunden) anzugeben ist.\"\nL.BREAK_START\t\t\t\t= \"Pause startet jetzt -- du hast %s! (gesendet von: %s)\"\nL.BREAK_MIN\t\t\t\t\t= \"Pause endet in %s Minute(n)!\"\nL.BREAK_SEC\t\t\t\t\t= \"Pause endet in %s Sekunden!\"\nL.TIMER_BREAK\t\t\t\t= \"Pause!\"\nL.ANNOUNCE_BREAK_OVER\t\t= \"Pause ist vorbei (seit %s Uhr)\"\n\nL.TIMER_PULL\t\t\t\t= \"Pull in\"\nL.ANNOUNCE_PULL_MODE\t\t= \"Pull-Modus: %s\"\nL.ANNOUNCE_PULL\t\t\t\t= \"Pull in %d Sekunden. (gesendet von: %s)\"\nL.ANNOUNCE_PULL_NOW\t\t\t= \"Pull jetzt!\"\nL.ANNOUNCE_PULL_TARGET\t\t= \"Pulle %s in %d Sekunden. (gesendet von: %s)\"\nL.ANNOUNCE_PULL_NOW_TARGET\t= \"Pulle %s jetzt!\"\nL.GEAR_WARNING\t\t\t\t= \"Warnung: Prüfe deine Ausrüstung. Deine angelegte Gegenstandsstufe ist um %d niedriger als die in deinen Taschen.\"\nL.GEAR_WARNING_WEAPON\t\t= \"Warnung: Prüfe ob du deine Waffe korrekt angelegt hast.\"\nL.GEAR_FISHING_POLE\t\t\t= \"Angelrute\"\n\nL.ACHIEVEMENT_TIMER_SPEED_KILL = \"Zeit für Erfolg\"\n\n-- Auto-generated Warning Localizations\nL.AUTO_ANNOUNCE_TEXTS.you\t\t= \"%s auf DIR\"\nL.AUTO_ANNOUNCE_TEXTS.target\t\t= \"%s auf >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetdistance\t= \"%s auf >%%s< (%%d yd)\"\nL.AUTO_ANNOUNCE_TEXTS.targetcount\t= \"%s (%%s) auf >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetcountdistance = \"%s (%%s) auf >%%s< (%%d yd)\"\nL.AUTO_ANNOUNCE_TEXTS.spell\t\t= \"%s\"\nL.AUTO_ANNOUNCE_TEXTS.ends\t\t= \"%s ist beendet\"\nL.AUTO_ANNOUNCE_TEXTS.endtarget\t= \"%s ist beendet: >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.fades\t\t= \"%s ist beendet\"\nL.AUTO_ANNOUNCE_TEXTS.addsleft\t= \"%s verbleibend: %%d\"\nL.AUTO_ANNOUNCE_TEXTS.cast\t\t= \"Wirkt %s: %.1f Sek\"\nL.AUTO_ANNOUNCE_TEXTS.soon\t\t= \"%s bald\"\nL.AUTO_ANNOUNCE_TEXTS.sooncount\t= \"%s (%%s) bald\"\nL.AUTO_ANNOUNCE_TEXTS.prewarn\t\t= \"%s in %s\"\nL.AUTO_ANNOUNCE_TEXTS.stage\t\t= \"Phase %s\"\nL.AUTO_ANNOUNCE_TEXTS.prestage\t= \"Phase %s bald\"\nL.AUTO_ANNOUNCE_TEXTS.count\t\t= \"%s (%%s)\"\nL.AUTO_ANNOUNCE_TEXTS.stack\t\t= \"%s auf >%%s< (%%d)\"\n\nlocal prewarnOption = \"Zeige Vorwarnung für $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.you\t\t\t= \"Verkünde, wenn du von $spell:%s betroffen bist\"\nL.AUTO_ANNOUNCE_OPTIONS.target\t\t= \"Verkünde Ziele von $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.targetdistance\t= \"Verkünde Ziele von $spell:%s (mit Distanz)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetcount\t= \"Verkünde Ziele von $spell:%s (mit Zählung)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetcountdistance\t= \"Verkünde Ziele von $spell:%s (mit Zählung und Distanz)\"\nL.AUTO_ANNOUNCE_OPTIONS.spell\t\t= \"Zeige Warnung für $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.ends\t\t= \"Zeige Warnung, wenn $spell:%s beendet ist\"\nL.AUTO_ANNOUNCE_OPTIONS.endtarget\t= \"Zeige Warnung, wenn $spell:%s beendet ist\"\nL.AUTO_ANNOUNCE_OPTIONS.fades\t\t= \"Zeige Warnung, wenn $spell:%s beendet ist\"\nL.AUTO_ANNOUNCE_OPTIONS.addsleft\t= \"Verkünde die Anzahl der verbleibenden $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.cast\t\t= \"Zeige Warnung, wenn $spell:%s gewirkt wird\"\nL.AUTO_ANNOUNCE_OPTIONS.soon\t\t= prewarnOption\nL.AUTO_ANNOUNCE_OPTIONS.sooncount\t= prewarnOption\nL.AUTO_ANNOUNCE_OPTIONS.prewarn\t\t= prewarnOption\nL.AUTO_ANNOUNCE_OPTIONS.stage\t\t= \"Verkünde Phase %s\"\nL.AUTO_ANNOUNCE_OPTIONS.stagechange\t= \"Verkünde Phasenwechsel\"\nL.AUTO_ANNOUNCE_OPTIONS.prestage\t= \"Zeige Vorwarnung für Phase %s\"\nL.AUTO_ANNOUNCE_OPTIONS.count\t\t= \"Zeige Warnung für $spell:%s (mit Zählung)\"\nL.AUTO_ANNOUNCE_OPTIONS.stack\t\t= \"Verkünde $spell:%s Stapel\"\n\nL.AUTO_SPEC_WARN_TEXTS.spell\t\t\t\t= \"%s!\"\nL.AUTO_SPEC_WARN_TEXTS.ends\t\t\t\t= \"%s beendet\"\nL.AUTO_SPEC_WARN_TEXTS.fades\t\t\t\t= \"%s beendet\"\nL.AUTO_SPEC_WARN_TEXTS.soon\t\t\t\t= \"%s bald\"\nL.AUTO_SPEC_WARN_TEXTS.sooncount\t\t\t= \"%s (%%s) bald\"\nL.AUTO_SPEC_WARN_TEXTS.prewarn\t\t\t= \"%s in %s\"\nL.AUTO_SPEC_WARN_TEXTS.dispel\t\t\t= \"%s auf >%%s< - jetzt reinigen\"\nL.AUTO_SPEC_WARN_TEXTS.interrupt\t\t\t= \"%s - unterbrich >%%s<!\"\nL.AUTO_SPEC_WARN_TEXTS.interruptcount\t= \"%s - unterbrich >%%s<! (%%d)\"\nL.AUTO_SPEC_WARN_TEXTS.you\t\t\t\t= \"%s auf dir\"\nL.AUTO_SPEC_WARN_TEXTS.youcount\t\t\t= \"%s (%%s) auf dir\"\nL.AUTO_SPEC_WARN_TEXTS.youpos\t\t\t= \"%s (Position: %%s) auf dir\"\nL.AUTO_SPEC_WARN_TEXTS.soakpos\t\t\t= \"%s (Soak Position: %%s)\"\nL.AUTO_SPEC_WARN_TEXTS.target\t\t\t= \"%s auf >%%s<\"\nL.AUTO_SPEC_WARN_TEXTS.targetcount\t\t= \"%s (%%s) auf >%%s< \"\nL.AUTO_SPEC_WARN_TEXTS.defensive\t\t\t= \"%s - Defensivfähigkeiten\"\nL.AUTO_SPEC_WARN_TEXTS.taunt\t\t\t\t= \"%s auf >%%s< - jetzt spotten\"\nL.AUTO_SPEC_WARN_TEXTS.close\t\t\t\t= \"%s auf >%%s< in deiner Nähe\"\nL.AUTO_SPEC_WARN_TEXTS.move\t\t\t\t= \"%s - geh weg\"\nL.AUTO_SPEC_WARN_TEXTS.keepmove\t\t\t= \"%s - lauf weiter\"\nL.AUTO_SPEC_WARN_TEXTS.stopmove\t\t\t= \"%s - bleib stehen\"\nL.AUTO_SPEC_WARN_TEXTS.dodge\t\t\t\t= \"%s - Angriff ausweichen\"\nL.AUTO_SPEC_WARN_TEXTS.dodgeloc\t\t\t= \"%s von %%s - ausweichen\"\nL.AUTO_SPEC_WARN_TEXTS.moveaway\t\t\t= \"%s - geh weg von anderen\"\nL.AUTO_SPEC_WARN_TEXTS.moveawaycount\t\t= \"%s (%%s) - geh weg von anderen\"\nL.AUTO_SPEC_WARN_TEXTS.moveto\t\t\t= \"%s - geh zu >%%s<\"\nL.AUTO_SPEC_WARN_TEXTS.jump\t\t\t\t= \"%s - spring\"\nL.AUTO_SPEC_WARN_TEXTS.run\t\t\t\t= \"%s - lauf weg\"\nL.AUTO_SPEC_WARN_TEXTS.cast\t\t\t\t= \"%s - stoppe Zauber\"\nL.AUTO_SPEC_WARN_TEXTS.lookaway\t\t\t= \"%s - schau weg\"\nL.AUTO_SPEC_WARN_TEXTS.reflect\t\t\t= \"%s auf >%%s< - stoppe Angriffe\"\nL.AUTO_SPEC_WARN_TEXTS.count\t\t\t\t= \"%s! (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.stack\t\t\t\t= \"%%d Stapel von %s auf dir\"\nL.AUTO_SPEC_WARN_TEXTS.switch\t\t\t= \"%s - Ziel wechseln\"\nL.AUTO_SPEC_WARN_TEXTS.switchcount\t\t= \"%s - Ziel wechseln (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.gtfo\t\t\t\t= \"%%s unter dir - lauf raus\"\nL.AUTO_SPEC_WARN_TEXTS.adds\t\t\t\t= \"Adds kommen - Ziel wechseln\"\nL.AUTO_SPEC_WARN_TEXTS.addscustom\t\t= \"Adds kommen - %%s\"\n\n-- Auto-generated Special Warning Localizations\nL.AUTO_SPEC_WARN_OPTIONS.spell\t\t\t= \"Spezialwarnung für $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.ends\t\t\t= \"Spezialwarnung, wenn $spell:%s beendet ist\"\nL.AUTO_SPEC_WARN_OPTIONS.fades\t\t\t= \"Spezialwarnung, wenn $spell:%s beendet ist\"\nL.AUTO_SPEC_WARN_OPTIONS.soon\t\t\t= \"Spezialvorwarnung für $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.sooncount\t\t= \"Spezialvorwarnung (mit Zählung) für $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.prewarn\t\t= \"Spezialvorwarnung %s Sekunden vor $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.dispel\t\t\t= \"Spezialwarnung zum Reinigen/Rauben von $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.interrupt\t\t= \"Spezialwarnung zum Unterbrechen von $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.interruptcount\t= \"Spezialwarnung (mit Zählung) zum Unterbrechen von $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.you\t\t\t= \"Spezialwarnung, wenn du von $spell:%s betroffen bist\"\nL.AUTO_SPEC_WARN_OPTIONS.youcount\t\t= \"Spezialwarnung (mit Zählung), wenn du von $spell:%s betroffen bist\"\nL.AUTO_SPEC_WARN_OPTIONS.youpos\t\t\t= \"Spezialwarnung (mit Position), wenn du von $spell:%s betroffen bist\"\nL.AUTO_SPEC_WARN_OPTIONS.soakpos\t\t\t= \"Spezialwarnung (mit Position) zur Schadensteilung mit von $spell:%s Betroffenen\"\nL.AUTO_SPEC_WARN_OPTIONS.target\t\t\t= \"Spezialwarnung, wenn jemand von $spell:%s betroffen ist\"\nL.AUTO_SPEC_WARN_OPTIONS.targetcount\t= \"Spezialwarnung (mit Zählung), wenn jemand von $spell:%s betroffen ist\"\nL.AUTO_SPEC_WARN_OPTIONS.defensive\t\t= \"Spezialwarnung zur Nutzung von Defensivfähigkeiten bei $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.taunt\t\t\t= \"Spezialwarnung zum Spotten, wenn der andere Tank von $spell:%s betroffen ist\"\nL.AUTO_SPEC_WARN_OPTIONS.close\t\t\t= \"Spezialwarnung, wenn jemand in deiner Nähe von $spell:%s betroffen ist\"\nL.AUTO_SPEC_WARN_OPTIONS.move\t\t\t= \"Spezialwarnung zum Herausgehen aus $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.keepmove\t\t= \"Spezialwarnung zum Weiterlaufen bei $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.stopmove\t\t= \"Spezialwarnung zum Stehen bleiben bei $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.dodge\t\t\t= \"Spezialwarnung zum Ausweichen bei $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.dodgeloc\t\t= \"Spezialwarnung (mit Ort) zum Ausweichen bei $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.moveaway\t\t= \"Spezialwarnung zum Weggehen von anderen bei $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.moveawaycount\t= \"Spezialwarnung (mit Zählung) zum Weggehen von anderen bei $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.moveto\t\t\t= \"Spezialwarnung zum Hingehen zu jemand oder zu einem Ort bei $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.jump\t\t\t= \"Spezialwarnung zum Springen bei $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.run\t\t\t= \"Spezialwarnung zum Weglaufen vor $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.cast\t\t\t= \"Spezialwarnung zum Zauberstopp bei $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.lookaway\t\t= \"Spezialwarnung zum Wegschauen bei $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.reflect\t\t= \"Spezialwarnung zum Angriffsstopp auf $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.count\t\t\t= \"Spezialwarnung für $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.stack\t\t\t= \"Spezialwarnung bei >=%d Stapel von $spell:%s auf dir\"\nL.AUTO_SPEC_WARN_OPTIONS.switch\t\t\t= \"Spezialwarnung für Zielwechsel auf $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.switchcount\t\t= \"Spezialwarnung (mit Zählung) für Zielwechsel auf $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.gtfo\t\t\t= \"Spezialwarnung zum Rauslaufen aus schlechten Dingen auf dem Boden\"\nL.AUTO_SPEC_WARN_OPTIONS.adds\t\t\t= \"Spezialwarnung für Zielwechsel auf ankommende Adds\"\nL.AUTO_SPEC_WARN_OPTIONS.addscustom\t\t= \"Spezialwarnung für ankommende Adds\"\n\n-- Auto-generated Timer Localizations\nL.AUTO_TIMER_TEXTS.target\t\t= \"%s: %%s\"\nL.AUTO_TIMER_TEXTS.cast\t\t= \"%s\"\nL.AUTO_TIMER_TEXTS.castsource\t= \"%s: %%s\"\nL.AUTO_TIMER_TEXTS.active\t\t= \"%s endet\"--Buff/Debuff/event on boss\nL.AUTO_TIMER_TEXTS.fades\t\t= \"%s schwindet\"--Buff/Debuff on players\nL.AUTO_TIMER_TEXTS.ai\t\t\t= \"%s KI\"\nL.AUTO_TIMER_TEXTS.cd\t\t\t= \"%s CD\"\nL.AUTO_TIMER_TEXTS.cdcount\t\t= \"%s (%%s) CD\"\nL.AUTO_TIMER_TEXTS.cdsource\t= \"%s CD: >%%s<\"\nL.AUTO_TIMER_TEXTS.cdspecial\t= \"Spezial CD\"\nL.AUTO_TIMER_TEXTS.next\t\t= \"Nächster %s\"\nL.AUTO_TIMER_TEXTS.nextcount\t= \"Nächster %s (%%s)\"\nL.AUTO_TIMER_TEXTS.nextsource\t= \"Nächster %s: %%s\"\nL.AUTO_TIMER_TEXTS.nextspecial\t= \"Nächste Spezial\"\nL.AUTO_TIMER_TEXTS.achievement\t= \"%s\"\nL.AUTO_TIMER_TEXTS.stage\t\t= \"Nächste Phase\"\nL.AUTO_TIMER_TEXTS.adds\t\t= \"Nächste Adds\"\nL.AUTO_TIMER_TEXTS.addscustom\t= \"Nächste Adds (%%s)\"\n--L.AUTO_TIMER_TEXTS.roleplay\n\nL.AUTO_TIMER_OPTIONS.target\t\t= \"Dauer des Debuffs $spell:%s anzeigen (%ss)\"\nL.AUTO_TIMER_OPTIONS.cast\t\t= \"Wirkzeit von $spell:%s anzeigen (%ss)\"\nL.AUTO_TIMER_OPTIONS.castsource\t= \"Wirkzeit von $spell:%s anzeigen (mit Quelle) (%ss)\"\nL.AUTO_TIMER_OPTIONS.active\t\t= \"Dauer von $spell:%s anzeigen (%ss)\"\nL.AUTO_TIMER_OPTIONS.fades\t\t= \"Zeit bis $spell:%s von Spielern schwindet anzeigen (%ss)\"\nL.AUTO_TIMER_OPTIONS.ai\t\t\t= \"KI-Timer für die Abklingzeit von $spell:%s anzeigen (%ss)\"\nL.AUTO_TIMER_OPTIONS.cd\t\t\t= \"Abklingzeit von $spell:%s anzeigen (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdcount\t\t= \"Abklingzeit von $spell:%s anzeigen (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdsource\t= \"Abklingzeit von $spell:%s anzeigen (mit Quelle) (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdspecial\t= \"Abklingzeit für Spezialfähigkeit anzeigen (%ss)\"\nL.AUTO_TIMER_OPTIONS.next\t\t= \"Zeit bis nächstes $spell:%s anzeigen (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextcount\t= \"Zeit bis nächstes $spell:%s anzeigen (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextsource\t= \"Zeit bis nächstes $spell:%s anzeigen (mit Quelle) (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextspecial\t= \"Zeige Zeit bis nächste Spezialfähigkeit (%ss)\"\nL.AUTO_TIMER_OPTIONS.achievement\t= \"Zeit für %s anzeigen (%ss)\"\nL.AUTO_TIMER_OPTIONS.stage\t\t= \"Zeige Zeit bis nächste Phase (%ss)\"\nL.AUTO_TIMER_OPTIONS.adds\t\t= \"Zeige Zeit bis Adds erscheinen (%ss)\"\nL.AUTO_TIMER_OPTIONS.addscustom\t= \"Zeige Zeit bis Adds erscheinen (%ss)\"\nL.AUTO_TIMER_OPTIONS.roleplay\t= \"Dauer des Rollenspiels anzeigen (%ss)\"\n\n\nL.AUTO_ICONS_OPTION_TARGETS\t\t\t= \"Setze Zeichen auf Ziele von $spell:%s\"\nL.AUTO_ICONS_OPTION_NPCS\t\t= \"Setze Zeichen auf $spell:%s\"\nL.AUTO_ICONS_OPTION_CONFLICT\t= \"(kann zu Konflikten mit anderen Optionen führen)\"\nL.AUTO_ARROW_OPTION_TEXT\t\t\t= \"Zeige DBM-Pfeil zum Hingehen zum von $spell:%s betroffenen Ziel\"\nL.AUTO_ARROW_OPTION_TEXT2\t\t= \"Zeige DBM-Pfeil zum Weggehen vom von $spell:%s betroffenen Ziel\"\nL.AUTO_ARROW_OPTION_TEXT3\t\t= \"Zeige DBM-Pfeil zum Hingehen zum richtigen Ort für $spell:%s\"\n\nL.AUTO_YELL_OPTION_TEXT.shortyell\t= \"Schreie, wenn du von $spell:%s betroffen bist\"\nL.AUTO_YELL_OPTION_TEXT.yell\t\t\t= \"Schreie (mit Spielernamen), wenn du von $spell:%s betroffen bist\"\nL.AUTO_YELL_OPTION_TEXT.count\t\t= \"Schreie (mit Zählung), wenn du von $spell:%s betroffen bist\"\nL.AUTO_YELL_OPTION_TEXT.fade\t\t\t= \"Schreie (mit Countdown und Zaubernamen), wenn $spell:%s endet\"\nL.AUTO_YELL_OPTION_TEXT.shortfade\t= \"Schreie (mit Countdown), wenn $spell:%s endet\"\nL.AUTO_YELL_OPTION_TEXT.iconfade\t\t= \"Schreie (mit Countdown und Zeichen), wenn $spell:%s endet\"\nL.AUTO_YELL_OPTION_TEXT.position\t\t= \"Schreie (mit Position und Spielername), wenn du von $spell:%s betroffen bist\"\nL.AUTO_YELL_OPTION_TEXT.shortposition\t= \"Schreie (mit Position), wenn du von $spell:%s betroffen bist\"\nL.AUTO_YELL_OPTION_TEXT.combo\t\t= \"Schreie (mit angepasstem Text), wenn du gleichzeitig von $spell:%s und einem weiteren Zauber betroffen bist\"\n\nL.AUTO_YELL_ANNOUNCE_TEXT.shortyell\t= \"%s\"\nL.AUTO_YELL_ANNOUNCE_TEXT.yell\t\t= \"%s auf \" .. UnitName(\"player\")\nL.AUTO_YELL_ANNOUNCE_TEXT.count\t\t= \"%s auf \" .. UnitName(\"player\") .. \" (%%d)\"\nL.AUTO_YELL_ANNOUNCE_TEXT.fade\t\t= \"%s endet in %%d\"\nL.AUTO_YELL_ANNOUNCE_TEXT.shortfade\t= \"%%d\"\nL.AUTO_YELL_ANNOUNCE_TEXT.iconfade\t= \"{rt%%2$d}%%1$d\"\nL.AUTO_YELL_ANNOUNCE_TEXT.position\t= \"%s %%s auf {rt%%d}\"..UnitName(\"player\")..\"{rt%%d}\"\nL.AUTO_YELL_ANNOUNCE_TEXT.combo\t\t= \"%s und %%s\"\n\n--L.AUTO_YELL_CUSTOM_POSITION\nL.AUTO_YELL_CUSTOM_FADE\t\t\t= \"%s beendet\"\nL.AUTO_HUD_OPTION_TEXT\t\t\t= \"Zeige HudMap für $spell:%s (außer Betrieb)\"\nL.AUTO_HUD_OPTION_TEXT_MULTI\t\t= \"Zeige HudMap für diverse Mechaniken (außer Betrieb)\"\nL.AUTO_NAMEPLATE_OPTION_TEXT\t\t= \"Zeige Namensplakettenaura für $spell:%s\"\nL.AUTO_RANGE_OPTION_TEXT\t\t\t= \"Zeige Abstandsfenster (%sm) für $spell:%s\"\nL.AUTO_RANGE_OPTION_TEXT_SHORT\t= \"Zeige Abstandsfenster (%sm)\"\nL.AUTO_RRANGE_OPTION_TEXT\t\t= \"Zeige inverses Abstandsfenster (%sm) für $spell:%s\"\nL.AUTO_RRANGE_OPTION_TEXT_SHORT\t= \"Zeige inverses Abstandsfenster (%sm)\"\nL.AUTO_INFO_FRAME_OPTION_TEXT\t= \"Zeige Infofenster für $spell:%s\"\nL.AUTO_INFO_FRAME_OPTION_TEXT2\t= \"Zeige Infofenster für Kampfübersicht\"\nL.AUTO_READY_CHECK_OPTION_TEXT\t= \"Spiele \\\"Bereitschaftscheck\\\"-Sound, wenn der Boss angegriffen wird (auch wenn er nicht als Ziel gesetzt ist)\"\n\n--Sounds\nL.AUTO_SOUND_OPTION_TEXT\t\t\t= \"Ton bei $spell:%d abspielen\"\nL.AUTO_SOUND_OPTION_TEXT5\t\t\t= \"5-Sekunden-Audio-Countdown bis $spell:%d\"\nL.AUTO_SOUND_OPTION_TEXT3\t\t\t= \"3-Sekunden-Audio-Countdown bis $spell:%d\"\nL.AUTO_SOUND_OPTION_TEXT_YOU\t\t= \"Ton auf $spell:%d auf dir abspielen\"\nL.AUTO_SOUND_OPTION_TEXT_SOON\t\t= \"Sound abspielen bei $spell:%d\"\nL.AUTO_SOUND_OPTION_TEXT_CLOSE\t\t= \"Sound auf $spell:%d in deiner Nähe abspielen\"\n\n-- New special warnings\nL.MOVE_WARNING_BAR\t\t\t= \"bewegbare Schlachtzugwarnung\"\nL.MOVE_WARNING_MESSAGE\t\t= \"Danke, dass du \"..L.DEADLY_BOSS_MODS..\" verwendest\"\nL.MOVE_SPECIAL_WARNING_BAR\t= \"bewegbare Spezialwarnung\"\nL.MOVE_SPECIAL_WARNING_TEXT\t= \"Spezialwarnung\"\n\nL.HUD_INVALID_TYPE\t\t\t= \"Der angegebene Typ für die HudMap ist ungültig.\"\nL.HUD_INVALID_TARGET\t\t\t= \"Es wurde kein gültiges Ziel für die HudMap angegeben.\"\nL.HUD_INVALID_SELF\t\t\t= \"Die HudMap kann nicht auf dich selbst zeigen.\"\nL.HUD_INVALID_ICON\t\t\t= \"Der Typ 'icon' für die HudMap kann nicht auf Ziele ohne gesetztem Schlachtzugzeichen angewendet werden.\"\nL.HUD_SUCCESS\t\t\t\t= \"Die HudMap wurde erfolgreich mit deinen Parametern gestartet. Sie läuft nach %s aus oder zuvor durch Aufruf von '/dbm hud hide'.\"\nL.HUD_USAGE\t= {\n\t\"Benutzung der \"..L.DBM..\"-HudMap:\",\n\t\"-----------------\",\n\t\"/dbm hud <Typ> <Ziel> <Dauer>: Erzeugt eine HudMap, die für die gewünschte Dauer auf einen Spieler zeigt\",\n\t\"gültige Typen: arrow, dot, red, blue, green, yellow, icon (benötigt ein Ziel mit gesetztem Schlachtzugzeichen)\",\n\t\"gültige Ziele: target, focus, <Spielername>\",\n\t\"gültige Dauer: beliebige Zahl (in Sekunden). 20 Minuten, falls Dauer nicht angegeben.\",\n\t\"/dbm hud hide: Deaktiviert und versteckt die HudMap\"\n}\n\nL.ARROW_MOVABLE\t\t\t\t\t= \"Pfeil (bewegbar)\"\nL.ARROW_WAY_USAGE\t\t\t\t\t= \"/dway <x> <y>: Erzeugt einen Pfeil, der auf einen bestimmten Ort zeigt (benutzt lokale Kartenkoordinaten der Zone)\"\nL.ARROW_WAY_SUCCESS\t\t\t\t= \"Um den Pfeil zu verstecken '/dbm arrow hide' eingeben oder das Pfeilziel erreichen\"\nL.ARROW_ERROR_USAGE\t= {\n\t\"Benutzung des \"..L.DBM..\"-Pfeils:\",\n\t\"-----------------\",\n\t\"/dbm arrow <x> <y>: Erzeugt einen Pfeil, der auf einen bestimmten Ort zeigt (benutzt Weltkoordinaten)\",\n\t\"/dbm arrow map <x> <y>: Erzeugt einen Pfeil, der auf einen bestimmten Ort zeigt (benutzt Kartenkoordinaten der Zone)\",\n\t\"/dbm arrow <player>: Erzeugt einen Pfeil, der auf einen bestimmten Spieler in deiner Gruppe oder deinem Schlachtzug zeigt (unterscheidet Groß-/Kleinschreibung)\",\n\t\"/dbm arrow hide: Versteckt den Pfeil\",\n\t\"/dbm arrow move: Macht den Pfeil beweglich\"\n}\n\nL.SPEED_KILL_TIMER_TEXT\t= \"Rekordzeit\"\nL.SPEED_CLEAR_TIMER_TEXT\t= \"Abschlussbestzeit\"\nL.COMBAT_RES_TIMER_TEXT\t= \"Kampfbelebung +\"\nL.TIMER_RESPAWN\t\t= \"%s Wiedererscheinen\"\n\nL.LAG_CHECKING\t\t\t\t= \"Prüfe Schlachtzuglatenz...\"\nL.LAG_HEADER\t\t\t\t\t= L.DEADLY_BOSS_MODS..\" - Latenzergebnisse\"\nL.LAG_ENTRY\t\t\t\t\t= \"%s: %dms (Welt) / %dms (Standort)\"\nL.LAG_FOOTER\t\t\t\t\t= \"Keine Antwort: %s\"\n\nL.DUR_CHECKING\t\t\t\t= \"Prüfe Schlachtzughaltbarkeit...\"\nL.DUR_HEADER\t\t\t\t\t= L.DEADLY_BOSS_MODS..\" - Haltbarkeitergebnisse\"\nL.DUR_ENTRY\t\t\t\t\t= \"%s: Haltbarkeit [%d Prozent] / Ausrüstung defekt [%s]\"\nL.LAG_FOOTER\t\t\t\t\t= \"Keine Antwort: %s\"\n\n--LDB\nL.LDB_TOOLTIP_HELP1\t= \"Links-Klick, um \"..L.DBM..\" zu öffnen.\"\nL.LDB_TOOLTIP_HELP2\t= \"Rechts-Klick, um das Konfigurationsmenü zu öffnen.\"\nL.SILENTMODE_IS\t\t= \"stummer Modus ist\"\n\nL.WORLD_BUFFS.allianceOny\t= \"Bürger und Verbündete Stormwinds, am heutigen Tage ist Geschichte geschrieben worden.\"\nL.WORLD_BUFFS.allianceNef\t= \"Angehörige der Allianz, der Herrscher des Blackrocks wurde besiegt!\"\nL.WORLD_BUFFS.zgHeart\t\t= \"Nun ist nur noch ein letzter Schritt nötig, um uns von der Bedrohung des Seelenschinders zu befreien\"\nL.WORLD_BUFFS.zgHeartBooty\t= \"Der Blutgott, der Seelenschinder, wurde besiegt! Wir werden nicht länger unterdrückt!\"\nL.WORLD_BUFFS.zgHeartYojamba= \"Beginnt mit dem Ritual, meine Diener. Wir müssen das Herz von Hakkar wieder in das Nichts verbannen!\"\nL.WORLD_BUFFS.rendHead\t\t= \"Rend Blackhand, der falsche Kriegshäuptling, ist gefallen!\"\nL.WORLD_BUFFS.hordeOny\t\t= \"Mitglieder der Horde, Bewohner von Ogrimmar, kommt und sammelt euch um den Held der Horde zu feiern\"\nL.WORLD_BUFFS.hordeNef\t\t= \"NEFARIAN WURDE GETÖTET! Einwohner von Orgrimmar\"\n\nL.COPY_URL_DIALOG_NEWS=\"Die aktuellsten Meldungen findest du immer unter dem unten stehenden Link\"\nL.LOAD_MOD_TOC_MISMATCH=\"%s konnte nicht geladen werden das es für einen WoW Patch (%s) designt wurde der aktuell nicht verfügbar ist. Wenn das Update verfügbar ist funktioniert dieser Mod automatisch.\"\nL.RAID_DOWN=\"%s gecleared nach %s\"\nL.RAID_DOWN_L=\"%s gecleared nach %s! Dein schnellster Clear hat %s gedauert.\"\nL.RAID_DOWN_NR=\"%s gecleared nach %s! Dies ist ein neue Record! (der Alte Rekord war %s).\"\nL.WORLDBUFF_STARTED=\"%s wurde auf deinem Realm für die Fraktion %s gestartet (Gesendet von %s).\"\nL.OPTION_CATEGORY_SPECWARNINGS=\"Spezialansagen\"\nL.OPTION_CATEGORY_YELLS=\"Schreie\"\nL.OPTION_CATEGORY_NAMEPLATES=\"Namensplaketten\"\nL.OPTION_CATEGORY_ICONS=\"Icons\"\nL.OUTDATEDSPELLTIMERS=\"WARNUNG: DBM-SpellTimers funktioniert nicht mehr und muss deaktiviert werden damit \" .. L.DBM .. \" richtig funktioniert.\"\nL.VICTORYSOUND=\"WARNUNG: DBM-VictorySound ist nicht kompatible mit dieser version von \" .. L.DBM .. \" und muss, um Konflikte zu vermeiden, deaktiviert werden damit \" .. L.DBM .. \" genutzt werden kann.\"\nL.OUTDATEDRLT=\"WARNUNG: DBM-RaidLeadTools funktioniert nicht mehr und muss entfernt werden damit \" .. L.DBM .. \"  richtig funktioniert.\"\nL.DBMLOOTREMINDER=\"WARNUNG: 3rd party mod DBM-LootReminder ist installiert. Dieses Addon ist nicht mehr Kompatibel mit dem Retail WoW Client und führt dazu das \" .. L.DBM .. \" nicht mehr funktioniert und keine Pull-Timer mehr senden kann. Komplette Entfernung des Addons wird empfohlen.\"\nL.RANGECHECK_HEADERT=\"Abstandscheck (%dy-%dP)\"\nL.RANGECHECK_IN_RANGE_TEXT=\"%d in Reichweite\"\nL.RANGECHECK_RHEADER=\"Radar-Abstandscheck (%dy)\"\nL.RANGECHECK_RHEADERT=\"Radar-Abstandscheck (%dy-%dP)\"\nL.RANGERADAR_RHEADER=\"Radarabstand:%d Spieler:%d\"\nL.INFOFRAME_SETCOLS=\"Setze maximale Spaltenanzahl\"\nL.INFOFRAME_AGGRO=\"Aggro\"\nL.TIME_TOO_SHORT=\"Pull-Timer muss länger als 3 Sekunden sein\"\nL.AUTO_ANNOUNCE_TEXTS.targetsource=\">%%s< wirkt %s auf >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.countdown=\"%s in %%ds\"\nL.AUTO_ANNOUNCE_TEXTS.bait=\"%s bald - bait jetzt\"\nL.AUTO_ANNOUNCE_TEXTS.moveto=\"%s - gehe zu >%%s<\"\nL.AUTO_ANNOUNCE_OPTIONS.targetNF=\"Verkünde Ziele von $spell:%s (ignoriert globalen Ziel Filtert)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetsource=\"Verkünde Ziele von $spell:%s (mit Quelle)\"\nL.AUTO_ANNOUNCE_OPTIONS.countdown=\"Zeige Vorwarnungs-Countdown für $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.bait=\"Zeige Vorwarnungs (zum Baiten) für $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.moveto=\"Zeige Warnung für Bewegungen zu Spieler oder Ort für $spell:%s\"\nL.AUTO_SPEC_WARN_TEXTS.bait=\"%s bald - bait jetzt\"\nL.AUTO_SPEC_WARN_TEXTS.youposcount=\"%s (%%s) (Position: %%s) auf dir!\"\nL.AUTO_SPEC_WARN_TEXTS.dodgecount=\"%s (%%s) - Angriff ausweichen\"\nL.AUTO_SPEC_WARN_TEXTS.soak=\"%s - soaken\"\nL.AUTO_SPEC_WARN_TEXTS.soakcount=\"%s - soake %%s\"\nL.AUTO_SPEC_WARN_TEXTS.targetchange=\"Zielwechsel - wechsel zu  %%s\"\nL.AUTO_SPEC_WARN_OPTIONS.bait=\"Spezialvorwarnung (zum Baiten) für $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.youposcount=\"Spezialwarnung (mit Position und Zählung), wenn du von $spell:%s betroffen bist\"\nL.AUTO_SPEC_WARN_OPTIONS.dodgecount=\"Spezialwarnung (mit Zählung) zum Ausweichen bei $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.soak=\"Spezialwarnung zum Soaken für $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.soakcount=\"Spezialwarnung (mit Zählung) zum Soaken für $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.targetchange=\"Spezialwarnung für wechsel des Prioritätsziels\"\nL.AUTO_TIMER_TEXTS.targetcount=\"%s (%%2$s): %%1$s\"\nL.AUTO_TIMER_TEXTS.castcount=\"%s (%%s)\"\nL.AUTO_TIMER_TEXTS.roleplay=\"Rollenspiel\"\nL.AUTO_TIMER_OPTIONS.targetcount=\"Dauer des Debuffs (mit Zählung) für $spell:%s anzeigen (%ss)\"\nL.AUTO_TIMER_OPTIONS.castcount=\"Wirkzeit (mit Zählung) von $spell:%s anzeigen (%ss)\"\nL.AUTO_ICONS_OPTION_TARGETS_MELEE_A=\"Setze Zeichen auf Ziele von $spell:%s beginnend mit melee und nach Alphabetischer Reihenfolge\"\nL.AUTO_ICONS_OPTION_TARGETS_MELEE_R=\"Setze Zeichen auf Ziele von $spell:%s beginnend mit melee und nach Raidroster Reihenfolge\"\nL.AUTO_ICONS_OPTION_TARGETS_RANGED_A=\"Setze Zeichen auf Ziele von $spell:%s beginnend mit ranged und nach Alphabetischer Reihenfolge\"\nL.AUTO_ICONS_OPTION_TARGETS_RANGED_R=\"Setze Zeichen auf Ziele von $spell:%s beginnend mit ranged und nach Raidroster Reihenfolge\"\nL.AUTO_ICONS_OPTION_TARGETS_ALPHA=\"Setze Zeichen auf Ziele von $spell:%s nach Alphabetischer Reihenfolge\"\nL.AUTO_ICONS_OPTION_TARGETS_ROSTER=\"Setze Zeichen auf Ziele von $spell:%s  nach Raidroster Reihenfolge\"\nL.AUTO_YELL_OPTION_TEXT.shortposition=\"Schreie (mit Position), wenn du von $spell:%s betroffen bist\"\nL.AUTO_YELL_OPTION_TEXT.repeatplayer=\"Schreie wiederholt (mit Spielername) wenn du von $spell:%s betroffen bist\"\nL.AUTO_YELL_OPTION_TEXT.repeaticon=\"Schreie wiederholt (mit Icon) wenn du von $spell:%s betroffen bist\"\nL.AUTO_INFO_FRAME_OPTION_TEXT3=\"Zeige Infofenster für $spell:%s (falls der Schwellwert von %%s übertroffen ist)\"\nL.AUTO_SPEEDCLEAR_OPTION_TEXT=\"Zeige Timer für den schnellsten Clear von %s\"\n\n--Retail Globals\nL.RAID_INFO_WORLD_BOSS\t\t= \"Weltboss\"\nL.SCENARIO_STAGE\t\t\t= \"Phase %d\"\nL.SPECIALIZATION\t\t\t= \"Spezialisierung\" -- ID: 22433\n-- EJ\nL.HARD_MODE\t\t\t\t\t= \"Schwerer Modus\" -- 17220\nL.BOSS_YOU_DEFEATED\t\t\t= \"Ihr habt besiegt:\" -- 25559\nL.BOSS_KILL_SUBTITLE\t\t= \"wurde besiegt\" -- 25560\n"
  },
  {
    "path": "DBM-Core/localization.en.lua",
    "content": "DBM_CORE_L = {}\n\nlocal L = DBM_CORE_L\n\nL.DEADLY_BOSS_MODS\t\t\t\t\t\t= \"Deadly Boss Mods\" -- NO TRANSLATE\nL.DBM\t\t\t\t\t\t\t\t\t= \"DBM\" -- NO TRANSLATE\n\n-- April Fools\n-- local _, month, monthDay = CalendarGetDate() -- Returns 0,0 on first client login\nlocal dateTable = date(\"*t\") -- use OS date instead\nif dateTable.day and dateTable.month and dateTable.day == 1 and dateTable.month == 4 then\n\tL.DEADLY_BOSS_MODS\t\t\t\t\t= \"Harmless Boss Mods\"\n\tL.DBM\t\t\t\t\t\t\t\t= \"HBM\"\nend\n\nL.HOW_TO_USE_MOD\t\t\t\t\t\t= \"Welcome to \" .. L.DBM .. \". Type /dbm help for a list of supported commands. To access options type /dbm in your chat to begin configuration. Load specific zones manually to configure any boss specific settings to your liking as well. \" .. L.DBM .. \" will setup defaults for your spec, but you may want to fine tune these.\"\nL.SILENT_REMINDER\t\t\t\t\t\t= \"Reminder: \" .. L.DBM .. \" is still in silent mode.\"\n--L.NEWS_UPDATE\t\t\t\t\t\t\t= \"|h|c11ff1111News|r|h: This update is basically a re-release of 9.1.9 to clear a false malware detection on the hash of the previous file release. Read more about it |Hgarrmission:DBM:news|h|cff3588ff[here]|r|h\"\n\nL.COPY_URL_DIALOG_NEWS\t\t\t\t\t= \"To read latest news, visit link below\"\n\nL.UPDATEREMINDER_URL\t\t\t\t\t= \"https://github.com/Zidras/DBM-Warmane/\"\n\nL.LOAD_MOD_ERROR\t\t\t\t\t\t= \"Error while loading boss mods for %s: %s\"\nL.LOAD_MOD_SUCCESS\t\t\t\t\t\t= \"Loaded '%s' mods. For more options such as custom alert sounds and personalized warning notes, type /dbm.\"\n-- L.LOAD_MOD_COMBAT\t\t\t\t\t\t= \"Loading of '%s' delayed until you leave combat\"\nL.LOAD_GUI_ERROR\t\t\t\t\t\t= \"Could not load GUI: %s\"\n-- L.LOAD_GUI_COMBAT\t\t\t\t\t\t= \"GUI cannot be initially loaded in combat. GUI will be loaded out of combat. After GUI loaded, you can open GUI in combat.\"\nL.BAD_LOAD\t\t\t\t\t\t\t\t= L.DBM .. \" has detected your mod for this instance failed to fully load correctly because of combat. As soon as you are out of combat, please do /console reloadui as soon as possible.\"\nL.LOAD_MOD_VER_MISMATCH\t\t\t\t\t= \"%s could not be loaded because your DBM-Core does not meet requirements. An updated version is required\"\nL.LOAD_MOD_EXP_MISMATCH\t\t\t\t\t= \"%s could not be loaded because it is designed for a WoW expansion that's not currently available. When expansion becomes available, this mod will automatically work.\"\nL.LOAD_MOD_TOC_MISMATCH\t\t\t\t\t= \"%s could not be loaded because it is designed for a WoW patch (%s) that's not currently available. When patch becomes available, this mod will automatically work.\"\nL.LOAD_MOD_DISABLED\t\t\t\t\t\t= \"%s is installed but currently disabled. This mod will not be loaded unless you enable it.\"\nL.LOAD_MOD_DISABLED_PLURAL\t\t\t\t= \"%s are installed but currently disabled. These mods will not be loaded unless you enable them.\"\n\nL.COPY_URL_DIALOG\t\t\t\t\t\t= \"Copy URL\"\n\nL.NO_RANGE\t\t\t\t\t\t\t\t= \"Range Radar can not be used in instances with no map support (download a map patch or deal with it). Legacy text range frame used instead\"\nL.NO_ARROW\t\t\t\t\t\t\t\t= \"Arrow can not be used in instances with no map support (download a map patch or deal with it)\"\nL.NO_HUD\t\t\t\t\t\t\t\t= \"HUDMap can not be used in instances with no map support (download a map patch or deal with it)\"\n\n-- L.DYNAMIC_DIFFICULTY_CLUMP\t\t\t\t= L.DBM .. \" has disabled dynamic range frame on this fight do to insufficient information about number of players needed to affect clump check for a group of your size.\"\n-- L.DYNAMIC_ADD_COUNT\t\t\t\t\t\t= L.DBM .. \" has disabled add count warnings on this fight do to insufficient information about number of adds that spawn for a group of your size.\"\n-- L.DYNAMIC_MULTIPLE\t\t\t\t\t\t= L.DBM .. \" has disabled multiple features on this fight do to insufficient information about certain mechanics for a group of your size.\"\n\n-- L.LOOT_SPEC_REMINDER\t\t\t\t\t= \"Your current spec is %s. Your current loot choice is %s.\"\n\nL.BIGWIGS_ICON_CONFLICT\t\t\t\t\t= L.DBM .. \" has detected that you have raid icons turned on in both BigWigs and \" .. L.DBM .. \". Please disable icons in one of them to avoid conflicts\"\n\nL.MOD_AVAILABLE\t\t\t\t\t\t\t= \"%s is available for this zone. You can find download on \" .. L.UPDATEREMINDER_URL\n\nL.COMBAT_STARTED\t\t\t\t\t\t= \"%s engaged. Good luck and have fun! :)\"\nL.COMBAT_STARTED_IN_PROGRESS\t\t\t= \"Engaged an in progress fight against %s. Good luck and have fun! :)\"\nL.GUILD_COMBAT_STARTED\t\t\t\t\t= \"%s has been engaged by %s's guild group\"\n-- L.SCENARIO_STARTED\t\t\t\t\t\t= \"%s started. Good luck and have fun! :)\"\n-- L.SCENARIO_STARTED_IN_PROGRESS\t\t\t= \"Joined %s a scenario that's in progress. Good luck and have fun! :)\"\nL.BOSS_DOWN\t\t\t\t\t\t\t\t= \"%s down after %s!\"\nL.BOSS_DOWN_I\t\t\t\t\t\t\t= \"%s down! You have %d total victories.\"\nL.BOSS_DOWN_L\t\t\t\t\t\t\t= \"%s down after %s! Your last kill took %s and your fastest kill took %s. You have %d total victories.\"\nL.BOSS_DOWN_NR\t\t\t\t\t\t\t= \"%s down after %s! This is a new record! (Old record was %s). You have %d total victories.\"\nL.RAID_DOWN\t\t\t\t\t\t\t\t= \"%s cleared after %s!\"\nL.RAID_DOWN_L\t\t\t\t\t\t\t= \"%s cleared after %s! Your fastest clear took %s.\"\nL.RAID_DOWN_NR\t\t\t\t\t\t\t= \"%s cleared after %s! This is a new record! (Old record was %s).\"\nL.GUILD_BOSS_DOWN\t\t\t\t\t\t= \"%s has been defeated by %s's guild group after %s!\"\n-- L.SCENARIO_COMPLETE\t\t\t\t\t\t= \"%s completed after %s!\"\n-- L.SCENARIO_COMPLETE_I\t\t\t\t\t= \"%s completed! You have %d total clears.\"\n-- L.SCENARIO_COMPLETE_L\t\t\t\t\t= \"%s completed after %s! Your last clear took %s and your fastest clear took %s. You have %d total clears.\"\n-- L.SCENARIO_COMPLETE_NR\t\t\t\t\t= \"%s completed after %s! This is a new record! (Old record was %s). You have %d total clears.\"\nL.COMBAT_ENDED_AT\t\t\t\t\t\t= \"Combat against %s (%s) ended after %s.\"\nL.COMBAT_ENDED_AT_LONG\t\t\t\t\t= \"Combat against %s (%s) ended after %s. You have %d total wipe(s) on this difficulty.\"\nL.GUILD_COMBAT_ENDED_AT\t\t\t\t\t= \"%s's Guild group has wiped on %s (%s) after %s.\"\n-- L.SCENARIO_ENDED_AT\t\t\t\t\t\t= \"%s ended after %s.\"\n-- L.SCENARIO_ENDED_AT_LONG\t\t\t\t= \"%s ended after %s. You have %d total incompletes on this difficulty.\"\nL.COMBAT_STATE_RECOVERED\t\t\t\t= \"%s was engaged %s ago, recovering timers... \"\nL.TRANSCRIPTOR_LOG_START\t\t\t\t= \"Transcriptor logging started.\"\nL.TRANSCRIPTOR_LOG_END\t\t\t\t\t= \"Transcriptor logging ended.\"\n\nL.MOVIE_SKIPPED\t\t\t\t\t\t\t= L.DBM .. \" has attempted to skip a cut scene automatically.\"\n-- L.BONUS_SKIPPED\t\t\t\t\t\t\t= L.DBM .. \" has automatically closed bonus loot frame. If you need to get this frame back, type /dbmbonusroll within 3 minutes\"\n\nL.AFK_WARNING\t\t\t\t\t\t\t= \"You are AFK and in combat (%d percent health remaining), firing sound alert. If you are not AFK, clear your AFK flag or disable this option in 'extra features'.\"\n\nL.COMBAT_STARTED_AI_TIMER\t\t\t\t= \"My CPU is a neural net processor; a learning computer. (This fight will use the new timer AI feature to generate timer approximations)\"\n\nL.PROFILE_NOT_FOUND\t\t\t\t\t\t= \"<\" .. L.DBM .. \"> Your current profile is corrupted. \" .. L.DBM .. \" will load 'Default' profile.\"\nL.PROFILE_CREATED\t\t\t\t\t\t= \"'%s' profile created.\"\nL.PROFILE_CREATE_ERROR\t\t\t\t\t= \"Create profile failed. Invalid profile name.\"\nL.PROFILE_CREATE_ERROR_D\t\t\t\t= \"Create profile failed. '%s' profile already exists.\"\nL.PROFILE_APPLIED\t\t\t\t\t\t= \"'%s' profile applied.\"\nL.PROFILE_APPLY_ERROR\t\t\t\t\t= \"Apply profile failed. '%s' profile does not exist.\"\nL.PROFILE_COPIED\t\t\t\t\t\t= \"'%s' profile copied.\"\nL.PROFILE_COPY_ERROR\t\t\t\t\t= \"Copy profile failed. '%s' profile does not exist.\"\nL.PROFILE_COPY_ERROR_SELF\t\t\t\t= \"Cannot copy profile to itself.\"\nL.PROFILE_DELETED\t\t\t\t\t\t= \"'%s' profile deleted. 'Default' profile will be applied.\"\nL.PROFILE_DELETE_ERROR\t\t\t\t\t= \"Delete profile failed. '%s' profile does not exist.\"\nL.PROFILE_CANNOT_DELETE\t\t\t\t\t= \"Cannot delete 'Default' profile.\"\nL.MPROFILE_COPY_SUCCESS\t\t\t\t\t= \"%s's (%d spec) mod settings have been copied.\"\nL.MPROFILE_COPY_SELF_ERROR\t\t\t\t= \"Cannot copy character settings to itself\"\nL.MPROFILE_COPY_S_ERROR\t\t\t\t\t= \"Source is corrupted. Settings not copied or partly copied. Copy failed.\"\nL.MPROFILE_COPYS_SUCCESS\t\t\t\t= \"%s's (%d spec) mod sound or note settings have been copied.\"\nL.MPROFILE_COPYS_SELF_ERROR\t\t\t\t= \"Cannot copy character sound or note settings to itself\"\nL.MPROFILE_COPYS_S_ERROR\t\t\t\t= \"Source is corrupted. Sound or note settings not copied or partly copied. Copy failed.\"\nL.MPROFILE_DELETE_SUCCESS\t\t\t\t= \"%s's (%d spec) mod settings deleted.\"\nL.MPROFILE_DELETE_SELF_ERROR\t\t\t= \"Cannot delete mod settings currently in use.\"\nL.MPROFILE_DELETE_S_ERROR\t\t\t\t= \"Source is corrupted. Settings not deleted or partly deleted. Delete failed.\"\n\nL.NOTE_SHARE_SUCCESS\t\t\t\t\t= \"%s has shared their note for %s\"\n-- L.NOTE_SHARE_LINK\t\t\t\t\t\t= \"Click Here to Open Note\"\nL.NOTE_SHARE_FAIL\t\t\t\t\t\t= \"%s attempted to share note text with you for %s. However, mod associated with this ability is not installed or is not loaded. If you need this note, make sure you load the mod they are sharing notes for and ask them to share again\"\n\nL.NOTEHEADER\t\t\t\t\t\t\t= \"Enter your note text here for %s. Enclosing a players name with >< class colors it. For alerts with multiple counts, separate notes with '/'\"\nL.NOTEFOOTER\t\t\t\t\t\t\t= \"Press 'Okay' to accept changes or 'Cancel' to decline changes\"\nL.NOTESHAREDHEADER\t\t\t\t\t\t= \"%s has shared below note text for %s. If you accept it, it will overwrite your existing note\"\nL.NOTESHARED\t\t\t\t\t\t\t= \"Your note has been sent to the group\"\nL.NOTESHAREERRORSOLO\t\t\t\t\t= \"Lonely? Shouldn't be passing notes to yourself\"\nL.NOTESHAREERRORBLANK\t\t\t\t\t= \"Cannot share blank notes\"\nL.NOTESHAREERRORGROUPFINDER\t\t\t\t= \"Notes cannot be shared in BGs, LFR, or LFG\"\nL.NOTESHAREERRORALREADYOPEN\t\t\t\t= \"Cannot open a shared note link while note editor is already open, to prevent you from losing the note you are currently editing\"\n\nL.ALLMOD_DEFAULT_LOADED\t\t\t\t\t= \"Default options for all mods in this instance have been loaded.\"\nL.ALLMOD_STATS_RESETED\t\t\t\t\t= \"All mod stats have been reset.\"\nL.MOD_DEFAULT_LOADED\t\t\t\t\t= \"Default options for this fight have been loaded.\"\n\nL.WORLDBOSS_ENGAGED\t\t\t\t\t\t= \"%s was possibly engaged on your realm at %s percent health. (Sent by %s)\"\nL.WORLDBOSS_DEFEATED\t\t\t\t\t= \"%s was possibly defeated on your realm (Sent by %s).\"\nL.WORLDBUFF_STARTED\t\t\t\t\t\t= \"%s buff has started on your realm for %s faction (Sent by %s).\"\n\nL.TIMER_FORMAT_SECS\t\t\t\t\t\t= \"%.2f |4second:seconds;\"\nL.TIMER_FORMAT_MINS\t\t\t\t\t\t= \"%d |4minute:minutes;\"\nL.TIMER_FORMAT\t\t\t\t\t\t\t= \"%d |4minute:minutes; and %.2f |4second:seconds;\"\n\nL.MIN\t\t\t\t\t\t\t\t\t= \"min\"\nL.MIN_FMT\t\t\t\t\t\t\t\t= \"%d min\"\nL.SEC\t\t\t\t\t\t\t\t\t= \"sec\"\nL.SEC_FMT\t\t\t\t\t\t\t\t= \"%s sec\"\n\nL.GENERIC_WARNING_OTHERS\t\t\t\t= \"and one other\"\nL.GENERIC_WARNING_OTHERS2\t\t\t\t= \"and %d others\"\nL.GENERIC_WARNING_BERSERK\t\t\t\t= \"Berserk in %s %s\"\nL.GENERIC_TIMER_BERSERK\t\t\t\t\t= \"Berserk\"\nL.OPTION_TIMER_BERSERK\t\t\t\t\t= \"Show timer for $spell:26662\"\nL.GENERIC_TIMER_COMBAT\t\t\t\t\t= \"Combat starts\"\nL.OPTION_TIMER_COMBAT\t\t\t\t\t= \"Show timer for combat start\"\nL.BAD\t\t\t\t\t\t\t\t\t= \"Bad\"\nL.OPTION_HEALTH_FRAME\t\t\t\t\t= \"Show boss health frame\"\n\nL.OPTION_CATEGORY_TIMERS\t\t\t\t= \"Bars\"\n--Sub cats for \"announce\" object\nL.OPTION_CATEGORY_WARNINGS\t\t\t\t= \"General Announces\"\nL.OPTION_CATEGORY_WARNINGS_YOU\t\t\t= \"Personal Announces\"\nL.OPTION_CATEGORY_WARNINGS_OTHER\t\t= \"Target Announces\"\nL.OPTION_CATEGORY_WARNINGS_ROLE\t\t\t= \"Role Announces\"\nL.OPTION_CATEGORY_SPECWARNINGS\t\t\t= \"Special Announces\"\n\nL.OPTION_CATEGORY_SOUNDS\t\t\t\t= \"Sounds\"\n--Misc object broken down into sub cats\nL.OPTION_CATEGORY_DROPDOWNS\t\t\t\t= \"Dropdowns\"--Still put in MISC sub grooup, just used for line separators since multiple of these on a fight (or even having on of these at all) is rare.\nL.OPTION_CATEGORY_YELLS\t\t\t\t\t= \"Yells\"\nL.OPTION_CATEGORY_NAMEPLATES\t\t\t= \"Nameplates\"\nL.OPTION_CATEGORY_ICONS\t\t\t\t\t= \"Icons\"\n\nL.AUTO_RESPONDED\t\t\t\t\t\t= \"Auto-responded.\"\nL.STATUS_WHISPER\t\t\t\t\t\t= \"%s: %s, %d/%d people alive\"\n--Bosses\nL.AUTO_RESPOND_WHISPER\t\t\t\t\t= \"%s is busy fighting against %s (%s, %d/%d people alive)\"\nL.WHISPER_COMBAT_END_KILL\t\t\t\t= \"%s has defeated %s!\"\nL.WHISPER_COMBAT_END_KILL_STATS\t\t\t= \"%s has defeated %s! They have %d total victories.\"\nL.WHISPER_COMBAT_END_WIPE_AT\t\t\t= \"%s has wiped on %s at %s\"\nL.WHISPER_COMBAT_END_WIPE_STATS_AT\t\t= \"%s has wiped on %s at %s. They have %d total wipes on this difficulty.\"\n--Scenarios (no percents. words like \"fighting\" or \"wipe\" changed to better fit scenarios)\n-- L.AUTO_RESPOND_WHISPER_SCENARIO\t\t\t= \"%s is busy in %s (%d/%d people alive)\"\n-- L.WHISPER_SCENARIO_END_KILL\t\t\t\t= \"%s has completed %s!\"\n-- L.WHISPER_SCENARIO_END_KILL_STATS\t\t= \"%s has completed %s! They have %d total victories.\"\n-- L.WHISPER_SCENARIO_END_WIPE\t\t\t\t= \"%s did not complete %s\"\n-- L.WHISPER_SCENARIO_END_WIPE_STATS\t\t= \"%s did not complete %s. They have %d total incompletes on this difficulty.\"\n\nL.VERSIONCHECK_HEADER\t\t\t\t\t= \"Boss Mod - Versions\"\nL.VERSIONCHECK_ENTRY\t\t\t\t\t= \"%s: %s (%s) %s\"--One Boss mod\nL.VERSIONCHECK_ENTRY_TWO\t\t\t\t= \"%s: %s (%s) & %s (%s)\"--Two Boss mods\nL.VERSIONCHECK_ENTRY_NO_DBM\t\t\t\t= \"%s: No boss mod installed\"\nL.VERSIONCHECK_FOOTER\t\t\t\t\t= \"Found %d player(s) with \" .. L.DBM .. \" & %d player(s) with Bigwigs\"\nL.VERSIONCHECK_OUTDATED\t\t\t\t\t= \"Following %d player(s) have outdated boss mod version: %s\"\nL.YOUR_VERSION_OUTDATED\t\t\t\t\t= \"Your version of \" .. L.DEADLY_BOSS_MODS .. \" is out-of-date. Please visit \" .. L.UPDATEREMINDER_URL .. \" to get the latest version.\"\nL.VOICE_PACK_OUTDATED\t\t\t\t\t= \"Your selected \" .. L.DBM .. \" voice pack is missing some sounds supported by \" .. L.DBM .. \". Some warning sounds will still play default sounds. Please download a newer version of voice pack or contact pack author for an update that contains missing audio\"\nL.VOICE_MISSING\t\t\t\t\t\t\t= \"You have a \" .. L.DBM .. \" voice pack selected that could not be found. If this is an error, make sure your voice pack is properly installed and enabled in addons.\"\nL.VOICE_DISABLED\t\t\t\t\t\t= \"You currently have at least one \" .. L.DBM .. \" voice pack installed but none enabled. If you intend to use a voice pack, make sure it's chosen in 'Spoken Alerts', else uninstall unused voice packs to hide this message\"\nL.VOICE_COUNT_MISSING\t\t\t\t\t= \"Countdown voice %d is set to a voice/count pack that could not be found. It has been reset to default setting: %s.\"\nL.BIG_WIGS\t\t\t\t\t\t\t\t= \"BigWigs\"\n\nL.UPDATEREMINDER_HEADER\t\t\t\t\t= \"Your version of \" .. L.DEADLY_BOSS_MODS.. \" is out-of-date.\\n Version %s (%s) is available for download here: \" .. L.UPDATEREMINDER_URL\nL.UPDATEREMINDER_FOOTER\t\t\t\t\t= \"Press \" .. (IsMacClient() and \"Cmd-C\" or \"Ctrl-C\")  ..  \" to copy the download link to your clipboard.\"\nL.UPDATEREMINDER_FOOTER_GENERIC\t\t\t= \"Press \" .. (IsMacClient() and \"Cmd-C\" or \"Ctrl-C\")  ..  \" to copy the link to your clipboard.\"\nL.UPDATEREMINDER_DISABLE\t\t\t\t= \"WARNING: Due to your \" .. L.DEADLY_BOSS_MODS.. \" being out of date and incompatible with newer versions of DBM, it has been force disabled and cannot be used until updated. This is to ensure incompatible mods do not cause poor play experience for yourself or fellow group members.\"\nL.UPDATEREMINDER_DISABLETEST\t\t\t= \"WARNING: Due to your \" .. L.DEADLY_BOSS_MODS.. \" being out of date and this being a test/beta realm, it has been force disabled and cannot be used until updated. This is to ensure out of date mods aren't being used to generate test feedback\"\nL.UPDATEREMINDER_HOTFIX\t\t\t\t\t= L.DBM .. \" version you are on has known issues during this boss encounter that are corrected if you update to latest release\"\nL.UPDATEREMINDER_HOTFIX_ALPHA\t\t\t= L.DBM .. \" version you are on has known issues during this boss encounter that are corrected in an upcoming release (or latest alpha version)\"\nL.UPDATEREMINDER_MAJORPATCH\t\t\t\t= \"WARNING: Due to your \" .. L.DEADLY_BOSS_MODS.. \" being out of date, \" .. L.DBM .. \" has been disabled until updated, since this is a major game patch. This is to ensure old and incompatible code doesn't cause poor play experience for yourself or fellow group members. Make sure you download a newer version from Curse, Wago, WoWI, or from GitHub Releases page as soon as possible.\"\n-- L.VEM\t\t\t\t\t\t\t\t\t= \"WARNING: You are running both \" .. L.DEADLY_BOSS_MODS.. \" and Voice Encounter Mods. DBM will not run in this configuration and therefore will not be loaded.\"\n-- L.OUTDATEDPROFILES\t\t\t\t\t\t= \"WARNING: DBM-Profiles not compatible with this version of \" .. L.DBM .. \". It must be removed before DBM can proceed, to avoid conflict.\"\n-- L.OUTDATEDSPELLTIMERS\t\t\t\t\t= \"WARNING: DBM-SpellTimers breaks \" .. L.DBM .. \" and must be disabled for \" .. L.DBM .. \" to function properly.\"\n-- L.OUTDATEDRLT\t\t\t\t\t\t\t= \"WARNING: DBM-RaidLeadTools breaks \" .. L.DBM .. \". DBM-RaidLeadTools is no longer supported and must be removed for \" .. L.DBM .. \" to function properly.\"\n-- L.VICTORYSOUND\t\t\t\t\t\t\t= \"WARNING: DBM-VictorySound is not compatible with this version of \" .. L.DBM .. \". It must be removed before \" .. L.DBM .. \" can proceed, to avoid conflict.\"\n-- L.DPMCORE\t\t\t\t\t\t\t\t= \"WARNING: Deadly PvP mods is discontinued and not compatible with this version of \" .. L.DBM .. \". It must be removed before \" .. L.DBM .. \" can proceed, to avoid conflict.\"\n-- L.DBMLDB\t\t\t\t\t\t\t\t= \"WARNING: DBM-LDB is now built into DBM-Core. While it won't do any harm, it's recommended to remove 'DBM-LDB' from your addons folder\"\n-- L.DBMLOOTREMINDER\t\t\t\t\t\t= \"WARNING: 3rd party mod DBM-LootReminder is installed. This addon is no longer compatible with Retail WoW client and will cause \" .. L.DBM .. \" to break and not be able to send pull timers. Uninstall of this addon recommended\"\nL.UPDATE_REQUIRES_RELAUNCH\t\t\t\t= \"WARNING: This \" .. L.DBM .. \" update will not work correctly if you don't fully restart your game client. This update contains new files or .toc file changes that cannot be loaded via ReloadUI. You may encounter broken functionality or errors if you continue without a client restart.\"\nL.OUT_OF_DATE_NAG\t\t\t\t\t\t= \"Your version of \" .. L.DBM.. \" is out-of-date and this specific fight mod has newer features or bug fixes. It is recommended you update for this fight to improve your experience.\"\n\nL.MOVABLE_BAR\t\t\t\t\t\t\t= \"Drag me!\"\n\nL.PIZZA_SYNC_INFO\t\t\t\t\t\t= \"|Hplayer:%1$s|h[%1$s]|h sent you a \" .. L.DBM .. \" timer: '%2$s'\\n|HDBM:cancel:%2$s:nil|h|cff3588ff[Cancel this timer]|r|h  |HDBM:ignore:%2$s:%1$s|h|cff3588ff[Ignore timers from %1$s]|r|h\"\nL.PIZZA_CONFIRM_IGNORE\t\t\t\t\t= \"Do you really want to ignore \" .. L.DBM .. \" timers from %s for this session?\"\nL.PIZZA_ERROR_USAGE\t\t\t\t\t\t= \"Usage: /dbm [broadcast] timer <time> <text>\"\n\nL.MINIMAP_TOOLTIP_HEADER\t\t\t\t= L.DEADLY_BOSS_MODS --Technically redundant\nL.MINIMAP_TOOLTIP_FOOTER\t\t\t\t= \"Drag to move\"\n\nL.RANGECHECK_HEADER\t\t\t\t\t\t= \"Range Check (%d yd)\"\nL.RANGECHECK_HEADERT\t\t\t\t\t= \"Range Check (%dy-%dP)\"\nL.RANGECHECK_RHEADER\t\t\t\t\t= \"R-Range Check (%dy)\"\nL.RANGECHECK_RHEADERT\t\t\t\t\t= \"R-Range Check (%dy-%dP)\"\nL.RANGECHECK_SETRANGE\t\t\t\t\t= \"Set range\"\nL.RANGECHECK_SETTHRESHOLD\t\t\t\t= \"Set player threshold\"\nL.RANGECHECK_SOUNDS\t\t\t\t\t\t= \"Sounds\"\nL.RANGECHECK_SOUND_OPTION_1\t\t\t\t= \"Sound when one player is in range\"\nL.RANGECHECK_SOUND_OPTION_2\t\t\t\t= \"Sound when more than one player is in range\"\nL.RANGECHECK_SOUND_0\t\t\t\t\t= \"No sound\"\nL.RANGECHECK_SOUND_1\t\t\t\t\t= \"Default sound\"\nL.RANGECHECK_SOUND_2\t\t\t\t\t= \"Annoying beep\"\nL.RANGECHECK_SETRANGE_TO\t\t\t\t= \"%d yd\"\nL.RANGECHECK_LOCK\t\t\t\t\t\t= \"Lock frame\"\nL.RANGECHECK_OPTION_FRAMES\t\t\t\t= \"Frames\"\nL.RANGECHECK_OPTION_RADAR\t\t\t\t= \"Show radar frame\"\nL.RANGECHECK_OPTION_TEXT\t\t\t\t= \"Show text frame\"\nL.RANGECHECK_OPTION_BOTH\t\t\t\t= \"Show both frames\"\nL.RANGECHECK_OPTION_SPEED\t\t\t\t= \"Update Rate (Reload Req.)\"\nL.RANGECHECK_OPTION_SLOW\t\t\t\t= \"Slow (lowest CPU)\"\nL.RANGECHECK_OPTION_AVERAGE\t\t\t\t= \"Medium\"\nL.RANGECHECK_OPTION_FAST\t\t\t\t= \"Fast (Most real-time)\"\nL.RANGERADAR_HEADER\t\t\t\t\t\t= \"Range:%d Players:%d\"\nL.RANGERADAR_RHEADER\t\t\t\t\t= \"R-Rng:%d Players:%d\"\nL.RANGERADAR_BOSS_HEADER\t\t\t\t= \"Boss Range (%d yd)\"\nL.RANGERADAR_IN_RANGE_TEXT\t\t\t\t= \"%d in range (%0.1f yd)\"--Multi\nL.RANGECHECK_IN_RANGE_TEXT\t\t\t\t= \"%d in range\"--Text based doesn't need (%dyd), especially since it's not very accurate to the specific yard anyways\nL.RANGERADAR_IN_RANGE_TEXTONE\t\t\t= \"%s (%0.1f yd)\"--One target\n\nL.LOCK_FRAME\t\t\t\t\t\t\t= \"Frame Locked\"\nL.INFOFRAME_SHOW_SELF\t\t\t\t\t= \"Always show your power\"\t\t-- Always show your own power value even if you are below the threshold\nL.INFOFRAME_SETLINES\t\t\t\t\t= \"Set max lines\"\nL.INFOFRAME_SETCOLS\t\t\t\t\t\t= \"Set max columns\"\nL.INFOFRAME_LINESDEFAULT\t\t\t\t= \"Set by mod\"\nL.INFOFRAME_LINES_TO\t\t\t\t\t= \"%d lines\"\nL.INFOFRAME_COLS_TO\t\t\t\t\t\t= \"%d columns\"\nL.INFOFRAME_POWER\t\t\t\t\t\t= \"Power\"\nL.INFOFRAME_AGGRO\t\t\t\t\t\t= \"Aggro\"\nL.INFOFRAME_MAIN\t\t\t\t\t\t= \"Main:\"--Main power\nL.INFOFRAME_ALT\t\t\t\t\t\t\t= \"Alt:\"--Alternate Power\n\nL.LFG_INVITE\t\t\t\t\t\t\t= \"LFG Invite\"\n\nL.SLASHCMD_HELP\t\t\t\t\t\t\t= {\n\t\"Available slash commands:\",\n\t\"-----------------\",\n\t\"/dbm unlock: Shows a movable status bar timer (alias: move).\",\n\t\"/range <number> or /distance <number>: Shows range frame. /rrange or /rdistance to reverse colors.\",\n\t\"/dbm timer: Starts a custom \" .. L.DBM .. \" timer, see '/dbm timer' for details.\",\n\t\"/dbm arrow: Shows the \" .. L.DBM .. \" arrow, see '/dbm arrow help' for details.\",\n\t\"/dbm help2: Shows raid management slash commands\"\n}\nL.SLASHCMD_HELP2\t\t\t\t\t\t= {\n\t\"Available slash commands:\",\n\t\"-----------------\",\n\t\"/dbm pull <sec>: Sends a pull timer for <sec> seconds to the raid (requires promoted. alias: pull).\",\n\t\"/dbm break <min>: Sends a break timer for <min> minutes to the raid (requires promoted. alias: break).\",\n\t\"/dbm version: Performs a boss mod version check (alias: ver).\",\n\t\"/dbm version2: Performs a boss mod version check that also whispers out of date users (alias: ver2).\",\n\t\"/dbm lockout: Asks raid members for their current raid instance lockouts (aliases: lockouts, ids) (requires promoted).\",\n\t\"/dbm lag: Performs a raid-wide latency check.\",\n\t\"/dbm durability: Performs a raid-wide durability check.\"\n}\nL.TIMER_USAGE\t\t\t\t\t\t\t= {\n\tL.DBM .. \" timer commands:\",\n\t\"-----------------\",\n\t\"/dbm timer <sec> <text>: Starts a <sec> second timer with your <text>.\",\n\t\"/dbm ltimer <sec> <text>: Starts a timer that also automatically loops until canceled.\",\n\t\"/dbm broadcast timer <x> <text>: Broadcasts a <x> second DBM Timer with the name <text> to the raid (requires leader/promoted status).\",\n\t\"('Broadcast' in front of the 'timer' or 'ltimer' also shares it with raid if leader/promoted)\",\n\t\"/dbm timer endloop: Stops any looping ltimer.\",\n\t\"/dbm break <min>: Starts a break timer for <min> minutes. Gives all raid members with DBM a break timer (requires leader/promoted status).\"\n}\n\nL.ERROR_NO_PERMISSION\t\t\t\t\t= \"You don't have the required permission to do this.\"\nL.TIME_TOO_SHORT\t\t\t\t\t\t= \"Pull timer must be longer than 3 seconds.\"\n\nL.BOSSHEALTH_HIDE_FRAME\t\t\t\t\t= \"Close health frame\"\n\nL.BREAK_USAGE\t\t\t\t\t\t\t= \"Break timer cannot be longer than 60 minutes. Make sure you're inputting time in minutes and not seconds.\"\nL.BREAK_START\t\t\t\t\t\t\t= \"Break starting now -- you have %s! (Sent by %s)\"\nL.BREAK_MIN\t\t\t\t\t\t\t\t= \"Break ends in %s minute(s)!\"\nL.BREAK_SEC\t\t\t\t\t\t\t\t= \"Break ends in %s seconds!\"\nL.TIMER_BREAK\t\t\t\t\t\t\t= \"Break time!\"\nL.ANNOUNCE_BREAK_OVER\t\t\t\t\t= \"Break has ended at %s\"\n\nL.TIMER_PULL\t\t\t\t\t\t\t= \"Pull in\"\nL.ANNOUNCE_PULL_MODE\t\t\t\t\t= \"Pull mode: %s\"\nL.ANNOUNCE_PULL\t\t\t\t\t\t\t= \"Pull in %d sec. (Sent by %s)\"\nL.ANNOUNCE_PULL_NOW\t\t\t\t\t\t= \"Pull now!\"\nL.ANNOUNCE_PULL_TARGET\t\t\t\t\t= \"Pulling %s in %d sec. (Sent by %s)\"\nL.ANNOUNCE_PULL_NOW_TARGET\t\t\t\t= \"Pulling %s now!\"\nL.GEAR_WARNING\t\t\t\t\t\t\t= \"Warning: Check gear. Your equipped ilvl is %d lower than bag ilvl\"\nL.GEAR_WARNING_WEAPON\t\t\t\t\t= \"Warning: Check if your weapon is correctly equipped.\"\nL.GEAR_FISHING_POLE\t\t\t\t\t\t= \"Fishing Pole\"\n\nL.ACHIEVEMENT_TIMER_SPEED_KILL\t\t\t= \"Speed Kill\"\n\n-- Auto-generated Warning Localizations\nL.AUTO_ANNOUNCE_TEXTS = {\n\tyou\t\t\t\t\t\t\t\t\t= \"%s on YOU\",\n\ttarget\t\t\t\t\t\t\t\t= \"%s on >%%s<\",\n\ttargetdistance\t\t\t\t\t\t= \"%s on >%%s< (%%d yd)\",\n\ttargetsource\t\t\t\t\t\t= \">%%s< cast %s on >%%s<\",\n\ttargetcount\t\t\t\t\t\t\t= \"%s (%%s) on >%%s<\",\n\ttargetcountdistance\t\t\t\t\t= \"%s (%%s) on >%%s< (%%d yd)\",\n\tspell\t\t\t\t\t\t\t\t= \"%s\",\n\tincoming\t\t\t\t\t\t\t= \"%s incoming debuff\",\n\tincomingcount\t\t\t\t\t\t= \"%s incoming debuff (%%s)\",\n\tends\t\t\t\t\t\t\t\t= \"%s ended\",\n\tendtarget\t\t\t\t\t\t\t= \"%s ended: >%%s<\",\n\tfades\t\t\t\t\t\t\t\t= \"%s faded\",\n\taddsleft\t\t\t\t\t\t\t= \"%s remaining: %%d\",\n\tcast\t\t\t\t\t\t\t\t= \"Casting %s: %.1f sec\",\n\tsoon\t\t\t\t\t\t\t\t= \"%s soon\",\n\tsooncount\t\t\t\t\t\t\t= \"%s (%%s) soon\",\n\tcountdown\t\t\t\t\t\t\t= \"%s in %%ds\",\n\tprewarn\t\t\t\t\t\t\t\t= \"%s in %s\",\n\tbait\t\t\t\t\t\t\t\t= \"%s soon - bait now\",\n\tstage\t\t\t\t\t\t\t\t= \"Stage %s\",\n\tprestage\t\t\t\t\t\t\t= \"Stage %s soon\",\n\tcount\t\t\t\t\t\t\t\t= \"%s (%%s)\",\n\tstack\t\t\t\t\t\t\t\t= \"%s on >%%s< (%%d)\",\n\tmoveto\t\t\t\t\t\t\t\t= \"%s - move to >%%s<\"\n}\n\nlocal prewarnOption\t\t\t\t\t\t= \"Show pre-warning for $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS = {\n\tyou\t\t\t\t\t\t\t\t\t= \"Announce when $spell:%s on you\",\n\ttarget\t\t\t\t\t\t\t\t= \"Announce $spell:%s targets\",\n\ttargetdistance\t\t\t\t\t\t= \"Announce $spell:%s targets (with distance)\",\n\ttargetNF\t\t\t\t\t\t\t= \"Announce $spell:%s targets (ignores global target filter)\",\n\ttargetsource\t\t\t\t\t\t= \"Announce $spell:%s targets (with source)\",\n\ttargetcount\t\t\t\t\t\t\t= \"Announce $spell:%s targets (with count)\",\n\ttargetcountdistance\t\t\t\t\t= \"Announce $spell:%s targets (with count and distance)\",\n\tspell\t\t\t\t\t\t\t\t= \"Announce when $spell:%s has been cast\",\n\tincoming\t\t\t\t\t\t\t= \"Announce when $spell:%s has incoming debuffs\",\n\tincomingcount\t\t\t\t\t\t= \"Announce (with count) when $spell:%s has incoming debuffs\",\n\tends\t\t\t\t\t\t\t\t= \"Announce when $spell:%s has ended\",\n\tendtarget\t\t\t\t\t\t\t= \"Announce when $spell:%s has ended (with target)\",\n\tfades\t\t\t\t\t\t\t\t= \"Announce when $spell:%s has faded\",\n\taddsleft\t\t\t\t\t\t\t= \"Announce how many $spell:%s remain\",\n\tcast\t\t\t\t\t\t\t\t= \"Announce when $spell:%s begins casting\",\n\tsoon\t\t\t\t\t\t\t\t= prewarnOption,\n\tsooncount\t\t\t\t\t\t\t= \"Show pre-warning (with count) for $spell:%s\", -- deviation from retail, since count should be described in the UI\n\tcountdown\t\t\t\t\t\t\t= \"Show pre-warning countdown spam for $spell:%s\",\n\tprewarn\t\t\t\t\t\t\t\t= prewarnOption,\n\tbait\t\t\t\t\t\t\t\t= \"Show pre-warning (to bait) for $spell:%s\",\n\tstage\t\t\t\t\t\t\t\t= \"Announce Stage %s\",\n\tstagechange\t\t\t\t\t\t\t= \"Announce stage changes\",\n\tprestage\t\t\t\t\t\t\t= \"Show a prewarning for Stage %s\",\n\tcount\t\t\t\t\t\t\t\t= \"Announce when $spell:%s has been cast (with count)\",\n\tstack\t\t\t\t\t\t\t\t= \"Announce $spell:%s stacks\",\n\tmoveto\t\t\t\t\t\t\t\t= \"Announce when to move to someone or some place for $spell:%s\"\n}\n\nL.AUTO_SPEC_WARN_TEXTS = {\n\tspell\t\t\t\t\t\t\t\t= \"%s!\",\n\tends\t\t\t\t\t\t\t\t= \"%s ended\",\n\tfades\t\t\t\t\t\t\t\t= \"%s faded\",\n\tsoon\t\t\t\t\t\t\t\t= \"%s soon\",\n\tsooncount\t\t\t\t\t\t\t= \"%s (%%s) soon\",\n\tbait\t\t\t\t\t\t\t\t= \"%s soon - bait now\",\n\tprewarn\t\t\t\t\t\t\t\t= \"%s in %s\",\n\tdispel\t\t\t\t\t\t\t\t= \"%s on >%%s< - dispel now\",\n\tinterrupt\t\t\t\t\t\t\t= \"%s - interrupt >%%s<!\",\n\tinterruptcount\t\t\t\t\t\t= \"%s - interrupt >%%s<! (%%d)\",\n\tyou\t\t\t\t\t\t\t\t\t= \"%s on you\",\n\tyoucount\t\t\t\t\t\t\t= \"%s (%%s) on you\",\n\tyoupos\t\t\t\t\t\t\t\t= \"%s (Position: %%s) on you\",\n\tyouposcount\t\t\t\t\t\t\t= \"%s (%%s) (Position: %%s) on you\",\n\tsoakpos\t\t\t\t\t\t\t\t= \"%s (Soak Position: %%s)\",\n\ttarget\t\t\t\t\t\t\t\t= \"%s on >%%s<\",\n\ttargetcount\t\t\t\t\t\t\t= \"%s (%%s) on >%%s< \",\n\tdefensive\t\t\t\t\t\t\t= \"%s - defensive\",\n\ttaunt\t\t\t\t\t\t\t\t= \"%s on >%%s< - taunt now\",\n\tclose\t\t\t\t\t\t\t\t= \"%s on >%%s< near you\",\n\tmove\t\t\t\t\t\t\t\t= \"%s - move away\",\n\tkeepmove\t\t\t\t\t\t\t= \"%s - keep moving\",\n\tstopmove\t\t\t\t\t\t\t= \"%s - stop moving\",\n\tdodge\t\t\t\t\t\t\t\t= \"%s - dodge attack\",\n\tdodgecount\t\t\t\t\t\t\t= \"%s (%%s) - dodge attack\",\n\tdodgeloc\t\t\t\t\t\t\t= \"%s - dodge from %%s\",\n\tmoveaway\t\t\t\t\t\t\t= \"%s - move away from others\",\n\tmoveawaycount\t\t\t\t\t\t= \"%s (%%s) - move away from others\",\n\tmoveto\t\t\t\t\t\t\t\t= \"%s - move to >%%s<\",\n\tsoak\t\t\t\t\t\t\t\t= \"%s - soak it\",\n\tsoakcount\t\t\t\t\t\t\t= \"%s - soak %%s\",\n\tjump\t\t\t\t\t\t\t\t= \"%s - jump\",\n\trun\t\t\t\t\t\t\t\t\t= \"%s - run away\",\n\truncount\t\t\t\t\t\t\t= \"%s - run away (%%s)\",\n\tcast\t\t\t\t\t\t\t\t= \"%s - stop casting\",\n\tlookaway\t\t\t\t\t\t\t= \"%s on %%s - look away\",\n\treflect\t\t\t\t\t\t\t\t= \"%s on >%%s< - stop attacking\",\n\tcount\t\t\t\t\t\t\t\t= \"%s! (%%s)\",\n\tstack\t\t\t\t\t\t\t\t= \"%%d stacks of %s on you\",\n\tswitch\t\t\t\t\t\t\t\t= \"%s - switch targets\",\n\tswitchcount\t\t\t\t\t\t\t= \"%s - switch targets (%%s)\",\n\tgtfo\t\t\t\t\t\t\t\t= \"%%s damage - move away\",\n\tadds\t\t\t\t\t\t\t\t= \"Incoming Adds - switch targets\",--Basically a generic of switch\n\taddscount\t\t\t\t\t\t\t= \"Incoming Adds - switch targets (%%s)\",--Basically a generic of switch\n\taddscustom\t\t\t\t\t\t\t= \"Incoming Adds - %%s\",--Same as above, but more info, pretty much made for like 3 boss mods, such as akama\n\ttargetchange\t\t\t\t\t\t= \"Target Change - switch to %%s\"\n}\n\n-- Auto-generated Special Warning Localizations\nL.AUTO_SPEC_WARN_OPTIONS = {\n\tspell\t\t\t\t\t\t\t\t= \"Show special announce for $spell:%s\",\n\tends\t\t\t\t\t\t\t\t= \"Show special announce when $spell:%s has ended\",\n\tfades\t\t\t\t\t\t\t\t= \"Show special announce when $spell:%s has faded\",\n\tsoon\t\t\t\t\t\t\t\t= \"Show pre-special announce for $spell:%s\",\n\tsooncount\t\t\t\t\t\t\t= \"Show pre-special announce (with count) for $spell:%s\",\n\tbait\t\t\t\t\t\t\t\t= \"Show pre-special announce (to bait) for $spell:%s\",\n\tprewarn\t\t\t\t\t\t\t\t= \"Show pre-special announce %s seconds before $spell:%s\",\n\tdispel\t\t\t\t\t\t\t\t= \"Show special announce to dispel/spellsteal $spell:%s\",\n\tinterrupt\t\t\t\t\t\t\t= \"Show special announce to interrupt $spell:%s\",\n\tinterruptcount\t\t\t\t\t\t= \"Show special announce (with count) to interrupt $spell:%s\",\n\tyou\t\t\t\t\t\t\t\t\t= \"Show special announce when you are affected by $spell:%s\",\n\tyoucount\t\t\t\t\t\t\t= \"Show special announce (with count) when you are affected by $spell:%s\",\n\tyoupos\t\t\t\t\t\t\t\t= \"Show special announce (with position) when you are affected by $spell:%s\",\n\tyouposcount\t\t\t\t\t\t\t= \"Show special announce (with position and count) when you are affected by $spell:%s\",\n\tsoakpos\t\t\t\t\t\t\t\t= \"Show special announce (with position) to help soak others affected by $spell:%s\",\n\ttarget\t\t\t\t\t\t\t\t= \"Show special announce when someone is affected by $spell:%s\",\n\ttargetcount\t\t\t\t\t\t\t= \"Show special announce (with count) when someone is affected by $spell:%s\",\n\tdefensive\t\t\t\t\t\t\t= \"Show special announce to use defensive abilites for $spell:%s\",\n\ttaunt\t\t\t\t\t\t\t\t= \"Show special announce to taunt when other tank affected by $spell:%s\",\n\tclose\t\t\t\t\t\t\t\t= \"Show special announce when someone close to you is affected by $spell:%s\",\n\tmove\t\t\t\t\t\t\t\t= \"Show special announce to move out from $spell:%s\",\n\tkeepmove\t\t\t\t\t\t\t= \"Show special announce to keep moving for $spell:%s\",\n\tstopmove\t\t\t\t\t\t\t= \"Show special announce to stop moving for $spell:%s\",\n\tdodge\t\t\t\t\t\t\t\t= \"Show special announce to dodge $spell:%s\",\n\tdodgecount\t\t\t\t\t\t\t= \"Show special announce (with count) to dodge $spell:%s\",\n\tdodgeloc\t\t\t\t\t\t\t= \"Show special announce (with location) to dodge $spell:%s\",\n\tmoveaway\t\t\t\t\t\t\t= \"Show special announce to move away from others for $spell:%s\",\n\tmoveawaycount\t\t\t\t\t\t= \"Show special announce (with count) to move away from others for $spell:%s\",\n\tmoveto\t\t\t\t\t\t\t\t= \"Show special announce to move to someone or some place for $spell:%s\",\n\tsoak\t\t\t\t\t\t\t\t= \"Show special announce to soak for $spell:%s\",\n\tsoakcount\t\t\t\t\t\t\t= \"Show special announce (with count) to soak for $spell:%s\",\n\tjump\t\t\t\t\t\t\t\t= \"Show special announce to move to jump for $spell:%s\",\n\trun\t\t\t\t\t\t\t\t\t= \"Show special announce to run away from $spell:%s\",\n\truncount\t\t\t\t\t\t\t= \"Show special announce (with count) to run away from $spell:%s\",\n\tcast\t\t\t\t\t\t\t\t= \"Show special announce to stop casting for $spell:%s\",--Spell Interrupt\n\tlookaway\t\t\t\t\t\t\t= \"Show special announce to look away for $spell:%s\",\n\treflect\t\t\t\t\t\t\t\t= \"Show special announce to stop attacking $spell:%s\",--Spell Reflect\n\tcount\t\t\t\t\t\t\t\t= \"Show special announce (with count) for $spell:%s\",\n\tstack\t\t\t\t\t\t\t\t= \"Show special announce when you are affected by >=%d stacks of $spell:%s\",\n\tswitch\t\t\t\t\t\t\t\t= \"Show special announce to switch targets for $spell:%s\",\n\tswitchcount\t\t\t\t\t\t\t= \"Show special announce (with count) to switch targets for $spell:%s\",\n\tgtfo\t\t\t\t\t\t\t\t= \"Show special announce to move out of bad stuff on ground\",\n\tadds\t\t\t\t\t\t\t\t= \"Show special announce to switch targets for incoming adds\",\n\taddscount\t\t\t\t\t\t\t= \"Show special announce (with count) to switch targets for incoming adds\",\n\taddscustom\t\t\t\t\t\t\t= \"Show special announce for incoming adds\",\n\ttargetchange\t\t\t\t\t\t= \"Show special announce for priority target changes\"\n}\n\n-- Auto-generated Timer Localizations\nL.AUTO_TIMER_TEXTS = {\n\ttarget\t\t\t\t\t\t\t\t= \"%s: %%s\",\n\ttargetcount\t\t\t\t\t\t\t= \"%s (%%2$s): %%1$s\",\n\tcast\t\t\t\t\t\t\t\t= \"%s\",\n\tcastshort\t\t\t\t\t\t\t= \"%s \",--if short timers enabled, cast and next are same timer text, this is a conflict. the space resolves it\n\tcastcount\t\t\t\t\t\t\t= \"%s (%%s)\",\n\tcastcountshort\t\t\t\t\t\t= \"%s (%%s) \",--Resolve short timer conflict with next timers\n\tcastsource\t\t\t\t\t\t\t= \"%s: %%s\",\n\tcastsourceshort\t\t\t\t\t\t= \"%s: %%s \",--Resolve short timer conflict with next timers\n\tactive\t\t\t\t\t\t\t\t= \"%s ends\",--Buff/Debuff/event on boss\n\tfades\t\t\t\t\t\t\t\t= \"%s fades\",--Buff/Debuff on players\n\tai\t\t\t\t\t\t\t\t\t= \"%s AI\",\n\n\tcd\t\t\t\t\t\t\t\t\t= \"%s CD\",\n\tcdshort\t\t\t\t\t\t\t\t= \"~%s\",\n\tcdcount\t\t\t\t\t\t\t\t= \"%s (%%s) CD\",\n\tcdcountshort\t\t\t\t\t\t= \"~%s (%%s)\",\n\tcdsource\t\t\t\t\t\t\t= \"%s CD: >%%s<\",\n\tcdsourceshort\t\t\t\t\t\t= \"~%s: >%%s<\",\n\tcdspecial\t\t\t\t\t\t\t= \"Special CD\",\n\tcdspecialshort\t\t\t\t\t\t= \"~Special\",\n\n\tnext\t\t\t\t\t\t\t\t= \"Next %s\",\n\tnextshort\t\t\t\t\t\t\t= \"%s\",\n\tnextcount\t\t\t\t\t\t\t= \"Next %s (%%s)\",\n\tnextcountshort\t\t\t\t\t\t= \"%s (%%s)\",\n\tnextsource\t\t\t\t\t\t\t= \"Next %s: %%s\",\n\tnextsourceshort\t\t\t\t\t\t= \"%s: %%s\",\n\tnextspecial\t\t\t\t\t\t\t= \"Next Special\",\n\tnextspecialshort\t\t\t\t\t= \"Special\",\n\n\tvar\t\t\t\t\t\t\t\t\t= \"%s\",\n\tvarcount\t\t\t\t\t\t\t= \"%s (%%s)\",\n\tvarsource\t\t\t\t\t\t\t= \"%s: >%%s<\",--Now same as next, as the ~ was moved to timer number -- OPTIONAL\n\tvarspecial\t\t\t\t\t\t\t= \"Special\",--Now same as next, as the ~ was moved to timer number\n\tvarcombo\t\t\t\t\t\t\t= \"%%1$s + %%2$s\",--Now same as next, as the ~ was moved to timer number -- OPTIONAL\n\n\tachievement\t\t\t\t\t\t\t= \"%s\",\n\tstage\t\t\t\t\t\t\t\t= \"Next Stage\",\n\tstageshort\t\t\t\t\t\t\t= \"Stage\",\n\tadds\t\t\t\t\t\t\t\t= \"Incoming Adds\",\n\taddsshort\t\t\t\t\t\t\t= \"Adds\",\n\taddscustom\t\t\t\t\t\t\t= \"Incoming Adds (%%s)\",\n\taddscustomshort\t\t\t\t\t\t= \"Adds (%%s)\",\n\troleplay\t\t\t\t\t\t\t= \"Role play\"\n}\n--This basically clones np only bar option and display text from regular counterparts\n--TODO, cleanup lots of duplication here and above\nL.AUTO_TIMER_TEXTS.cdnp\t\t\t\t\t= L.AUTO_TIMER_TEXTS.cd\nL.AUTO_TIMER_TEXTS.nextnp\t\t\t\t= L.AUTO_TIMER_TEXTS.next\nL.AUTO_TIMER_TEXTS.cdcountnp\t\t\t= L.AUTO_TIMER_TEXTS.cdcount\nL.AUTO_TIMER_TEXTS.nextcountnp\t\t\t= L.AUTO_TIMER_TEXTS.nextcount\n\n\nL.AUTO_TIMER_OPTIONS = {\n\ttarget\t\t\t\t\t\t\t\t= \"Show timer for $spell:%s debuff (%ss)\",\n\ttargetcount\t\t\t\t\t\t\t= \"Show timer (with count) for $spell:%s debuff (%ss)\",\n\tcast\t\t\t\t\t\t\t\t= \"Show timer for $spell:%s cast (%ss)\",\n\tcastcount\t\t\t\t\t\t\t= \"Show timer (with count) for $spell:%s cast (%ss)\",\n\tcastsource\t\t\t\t\t\t\t= \"Show timer (with source) for $spell:%s cast (%ss)\",\n\tactive\t\t\t\t\t\t\t\t= \"Show timer for $spell:%s duration (%ss)\",\n\tfades\t\t\t\t\t\t\t\t= \"Show timer for when $spell:%s fades from players (%ss)\",\n\tai\t\t\t\t\t\t\t\t\t= \"Show AI timer for $spell:%s cooldown (%ss)\",\n\n\tcd\t\t\t\t\t\t\t\t\t= \"Show timer for $spell:%s cooldown (%ss)\",\n\tcdcount\t\t\t\t\t\t\t\t= \"Show timer for $spell:%s cooldown (%ss)\",\n\tcdnp\t\t\t\t\t\t\t\t= \"Show nameplate only timer for $spell:%s cooldown (%ss)\",\n\tcdnpcount\t\t\t\t\t\t\t= \"Show nameplate only timer (with count) for $spell:%s cooldown (%ss)\",\n\tcdsource\t\t\t\t\t\t\t= \"Show timer (with source) for $spell:%s cooldown (%ss)\",--Maybe better wording?\n\tcdspecial\t\t\t\t\t\t\t= \"Show timer for special ability cooldown (%ss)\",\n\n\tnext\t\t\t\t\t\t\t\t= \"Show timer for next $spell:%s (%ss)\",\n\tnextcount\t\t\t\t\t\t\t= \"Show timer for next $spell:%s (%ss)\",\n\tnextnp\t\t\t\t\t\t\t\t= \"Show nameplate only timer for next $spell:%s (%ss)\",\n\tnextnpcount\t\t\t\t\t\t\t= \"Show nameplate only timer (with count) for next $spell:%s (%ss)\",\n\tnextsource\t\t\t\t\t\t\t= \"Show timer (with source) for next $spell:%s (%ss)\",--Maybe better wording?\n\tnextspecial\t\t\t\t\t\t\t= \"Show timer for next special ability (%ss)\",\n\n\tvar\t\t\t\t\t\t\t\t\t= \"Show timer (with variance) for $spell:%s cooldown window (%ss)\",\n\tvarcount\t\t\t\t\t\t\t= \"Show timer (with count and variance) for $spell:%s cooldown window (%ss)\",\n\tvarnp\t\t\t\t\t\t\t\t= \"Show nameplate only timer (with variance) for $spell:%s cooldown window (%ss)\",\n\tvarpnp\t\t\t\t\t\t\t\t= \"Show priority nameplate only timer (with variance) for $spell:%s cooldown window (%ss)\",\n\tvarsource\t\t\t\t\t\t\t= \"Show timer (with source and variance) for $spell:%s cooldown window (%ss)\",\n\tvarspecial\t\t\t\t\t\t\t= \"Show timer (with variance) for special ability cooldown window (%ss)\",\n\tvarcombo\t\t\t\t\t\t\t= \"Show timer (with variance) for ability combo cooldown window (%ss)\",\n\n\tachievement\t\t\t\t\t\t\t= \"Show timer for %s (%ss)\",\n\tstage\t\t\t\t\t\t\t\t= \"Show timer for next stage (%ss)\",\n\tadds\t\t\t\t\t\t\t\t= \"Show timer for incoming adds (%ss)\",\n\taddscustom\t\t\t\t\t\t\t= \"Show timer for incoming adds (%ss)\",\n\troleplay\t\t\t\t\t\t\t= \"Show timer for roleplay duration (%ss)\"--This does need localizing though.\n}\n\nL.AUTO_ICONS_OPTION_TARGETS\t\t\t\t= \"Set icons on $spell:%s targets\"--Usually used for player targets with no specific sorting\nL.AUTO_ICONS_OPTION_TARGETS_TANK_A\t\t= \"Set icons on $spell:%s targets with tank over melee over ranged priority and alphabetical fallback\"\nL.AUTO_ICONS_OPTION_TARGETS_TANK_R\t\t= \"Set icons on $spell:%s targets with tank over melee over ranged priority and raid roster fallback\"\nL.AUTO_ICONS_OPTION_TARGETS_MELEE_A\t\t= \"Set icons on $spell:%s targets with melee and alphabetical priority\"\nL.AUTO_ICONS_OPTION_TARGETS_MELEE_R\t\t= \"Set icons on $spell:%s targets with melee and raid roster priority\"\nL.AUTO_ICONS_OPTION_TARGETS_RANGED_A\t= \"Set icons on $spell:%s targets with ranged and alphabetical priority\"\nL.AUTO_ICONS_OPTION_TARGETS_RANGED_R\t= \"Set icons on $spell:%s targets with ranged and raid roster priority\"\nL.AUTO_ICONS_OPTION_TARGETS_ALPHA\t\t= \"Set icons on $spell:%s targets with alphabetical priority\"\nL.AUTO_ICONS_OPTION_TARGETS_ROSTER\t\t= \"Set icons on $spell:%s targets with raid roster priority\"\nL.AUTO_ICONS_OPTION_NPCS\t\t\t\t= \"Set icons on $spell:%s\"--usually used for npcs/mobs\nL.AUTO_ICONS_OPTION_CONFLICT\t\t\t= \" (May conflict with other options)\"\nL.AUTO_ARROW_OPTION_TEXT\t\t\t\t= \"Show \" .. L.DBM .. \" Arrow to move toward target affected by $spell:%s\"\nL.AUTO_ARROW_OPTION_TEXT2\t\t\t\t= \"Show \" .. L.DBM .. \" Arrow to move away from target affected by $spell:%s\"\nL.AUTO_ARROW_OPTION_TEXT3\t\t\t\t= \"Show \" .. L.DBM .. \" Arrow to move toward specific location for $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT = {\n\tshortyell\t\t\t\t\t\t\t= \"Yell when you are affected by $spell:%s\",\n\tyell\t\t\t\t\t\t\t\t= \"Yell (with player name) when you are affected by $spell:%s\",\n\tyellme\t\t\t\t\t\t\t\t= \"Yell when you are affected by $spell:%s\",\n\tcount\t\t\t\t\t\t\t\t= \"Yell (with count) when you are affected by $spell:%s\",\n\tfade\t\t\t\t\t\t\t\t= \"Yell (with countdown and spell name) when $spell:%s is fading\",\n\tshortfade\t\t\t\t\t\t\t= \"Yell (with countdown) when $spell:%s is fading\",\n\ticonfade\t\t\t\t\t\t\t= \"Yell (with countdown and icon) when $spell:%s is fading\",\n\tposition\t\t\t\t\t\t\t= \"Yell (with position and player name) when you are affected by $spell:%s\",\n\tshortposition\t\t\t\t\t\t= \"Yell (with position) when you are affected by $spell:%s\",\n\tcombo\t\t\t\t\t\t\t\t= \"Yell (with custom text) when you are affected by $spell:%s and other spells at same time\",\n\trepeatplayer\t\t\t\t\t\t= \"Yell repeatedly (with player name) when you are affected by $spell:%s\",\n\trepeaticon\t\t\t\t\t\t\t= \"Yell repeatedly (with icon) when you are affected by $spell:%s\"\n}\nL.AUTO_YELL_ANNOUNCE_TEXT = {\n\tshortyell\t\t\t\t\t\t\t= \"%s\",\n\tyell\t\t\t\t\t\t\t\t= \"%s on \" .. UnitName(\"player\"),\n\tyellme\t\t\t\t\t\t\t\t= \"%s on me!\",\n\tcount\t\t\t\t\t\t\t\t= \"%s on \" .. UnitName(\"player\") .. \" (%%d)\",\n\tfade\t\t\t\t\t\t\t\t= \"%s fading in %%d\",\n\tshortfade\t\t\t\t\t\t\t= \"%%d\",\n\ticonfade\t\t\t\t\t\t\t= \"{rt%%2$d}%%1$d\",\n\tposition\t\t\t\t\t\t\t= \"%s %%s on {rt%%d}\" ..UnitName(\"player\").. \"{rt%%d}\",\n\tshortposition\t\t\t\t\t\t= \"{rt%%1$d}%s %%2$d\",--Icon, Spellname, number\n\tcombo\t\t\t\t\t\t\t\t= \"%s and %%s\",--Spell name (from option, plus spellname given in arg)\n\trepeatplayer\t\t\t\t\t\t= UnitName(\"player\"),--Doesn't need translation, it's just player name spam\n\trepeaticon\t\t\t\t\t\t\t= \"{rt%%1$d}\"--Doesn't need translation. It's just icon spam\n}\nL.AUTO_YELL_CUSTOM_POSITION\t\t\t\t= \"{rt%d}%s\"--Doesn't need translating. Has no strings (Used in niche situations such as icon repeat yells)\nL.AUTO_YELL_CUSTOM_POSITION2\t\t\t= \"{rt%d}%s{rt%d}\"--Doesn't need translating. Has no strings (Deprecated, will be removed soon)\nL.AUTO_YELL_CUSTOM_FADE\t\t\t\t\t= \"%s faded\"\nL.AUTO_HUD_OPTION_TEXT\t\t\t\t\t= \"Show HudMap for $spell:%s (Retired)\"\nL.AUTO_HUD_OPTION_TEXT_MULTI\t\t\t= \"Show HudMap for various mechanics (Retired)\"\nL.AUTO_NAMEPLATE_OPTION_TEXT\t\t\t= \"Show Nameplate Auras for $spell:%s using compatible nameplate addon or \"..L.DBM\nL.AUTO_NAMEPLATE_OPTION_TEXT_FORCED\t\t= \"Show Nameplate Auras for $spell:%s using only \"..L.DBM\nL.AUTO_RANGE_OPTION_TEXT\t\t\t\t= \"Show range frame (%s) for $spell:%s\"--string used for range so we can use things like \"5/2\" as a value for that field\nL.AUTO_RANGE_OPTION_TEXT_SHORT\t\t\t= \"Show range frame (%s)\"--For when a range frame is just used for more than one thing\nL.AUTO_RRANGE_OPTION_TEXT\t\t\t\t= \"Show reverse range frame (%s) for $spell:%s\"--Reverse range frame (green when players in range, red when not)\nL.AUTO_RRANGE_OPTION_TEXT_SHORT\t\t\t= \"Show reverse range frame (%s)\"\nL.AUTO_INFO_FRAME_OPTION_TEXT\t\t\t= \"Show info frame for $spell:%s\"\nL.AUTO_INFO_FRAME_OPTION_TEXT2\t\t\t= \"Show info frame for encounter overview\"\nL.AUTO_INFO_FRAME_OPTION_TEXT3\t\t\t= \"Show info frame for $spell:%s (when threshold of %%s is met)\"\nL.AUTO_READY_CHECK_OPTION_TEXT\t\t\t= \"Play ready check sound when boss is pulled (even if it's not targeted)\"\nL.AUTO_SPEEDCLEAR_OPTION_TEXT\t\t\t= \"Show timer for fastest clear of %s\"\nL.AUTO_PRIVATEAURA_OPTION_TEXT\t\t\t= \"Play DBM sound alerts for $spell:%s private auras on this fight. Sound Priority: Voice pack if available, Air Horn fallback\"\n\n--Sounds\nL.AUTO_SOUND_OPTION_TEXT\t\t\t\t= \"Play sound on $spell:%d\"\nL.AUTO_SOUND_OPTION_TEXT5\t\t\t\t= \"5-second audio countdown to $spell:%d\"\nL.AUTO_SOUND_OPTION_TEXT3\t\t\t\t= \"3-second audio countdown to $spell:%d\"\nL.AUTO_SOUND_OPTION_TEXT_YOU\t\t\t= \"Play sound on $spell:%d on you\"\nL.AUTO_SOUND_OPTION_TEXT_SOON\t\t\t= \"Play sound on $spell:%d soon\"\nL.AUTO_SOUND_OPTION_TEXT_CLOSE\t\t\t= \"Play sound on $spell:%d near you\"\n\n-- New special warnings\nL.MOVE_WARNING_BAR\t\t\t\t\t\t= \"Announce movable\"\nL.MOVE_WARNING_MESSAGE\t\t\t\t\t= \"Thanks for using \" .. L.DEADLY_BOSS_MODS\nL.MOVE_SPECIAL_WARNING_BAR\t\t\t\t= \"Special warning movable\"\nL.MOVE_SPECIAL_WARNING_TEXT\t\t\t\t= \"Special Warning\"\n\nL.ARROW_MOVABLE\t\t\t\t\t\t\t= \"Arrow movable\"\nL.ARROW_WAY_USAGE\t\t\t\t\t\t= \"/dway <x> <y>: Creates an arrow that points to a specific location (using local zone map coordinates)\"\nL.ARROW_WAY_SUCCESS\t\t\t\t\t\t= \"To hide arrow, do '/dbm arrow hide' or reach arrow\"\nL.ARROW_ERROR_USAGE\t\t\t\t\t\t= {\n\tL.DBM .. \"-Arrow usage:\",\n\t\"-----------------\",\n\t\"/dbm arrow <x> <y>: Creates an arrow that points to a specific location (using world coordinates)\",\n\t\"/dbm arrow map <x> <y>: Creates an arrow that points to a specific location (using zone map coordinates)\",\n\t\"/dbm arrow <player>: Creates and arrow that points to a specific player in your party or raid (case sensitive!)\",\n\t\"/dbm arrow hide: Hides the arrow\",\n\t\"/dbm arrow move: Makes the arrow movable\"\n}\n\nL.SPEED_KILL_TIMER_TEXT\t\t\t\t\t= \"Record Victory\"\nL.SPEED_CLEAR_TIMER_TEXT\t\t\t\t= \"Best Clear\"\n--L.COMBAT_RES_TIMER_TEXT\t\t\t\t\t= \"Next CR Charge\"\nL.TIMER_RESPAWN\t\t\t\t\t\t\t= \"%s Respawn\"\n\nL.REQ_INSTANCE_ID_PERMISSION\t\t\t= \"%s requested to see your current instance IDs and progress.\\nDo you want to send this information to %s? He or she will be able to request this information during your current session (i. e. until you relog).\"\nL.ERROR_NO_RAID\t\t\t\t\t\t\t= \"You need to be in a raid group to use this feature.\"\nL.INSTANCE_INFO_REQUESTED\t\t\t\t= \"Sent request for raid lockout information to the raid group.\\nPlease note that the users will be asked for permission before sending the data to you, so it might take a minute until we get all responses.\"\nL.INSTANCE_INFO_STATUS_UPDATE\t\t\t= \"Got responses from %d players of %d DBM users: %d sent data, %d denied the request. Waiting %d more seconds for responses...\"\nL.INSTANCE_INFO_ALL_RESPONSES\t\t\t= \"Received responses from all raid members\"\nL.INSTANCE_INFO_DETAIL_DEBUG\t\t\t= \"Sender: %s ResultType: %s InstanceName: %s InstanceID: %s Difficulty: %d Size: %d Progress: %s\"\nL.INSTANCE_INFO_DETAIL_HEADER\t\t\t= \"%s, difficulty %s:\"\nL.INSTANCE_INFO_DETAIL_INSTANCE\t\t\t= \"    ID %s, progress %d: %s\"\nL.INSTANCE_INFO_DETAIL_INSTANCE2\t\t= \"    Progress %d: %s\"\nL.INSTANCE_INFO_NOLOCKOUT\t\t\t\t= \"There is no raid lockout information in your raid group.\"\nL.INSTANCE_INFO_STATS_DENIED\t\t\t= \"Denied the request: %s\"\nL.INSTANCE_INFO_STATS_AWAY\t\t\t\t= \"Away: %s\"\nL.INSTANCE_INFO_STATS_NO_RESPONSE\t\t= \"No recent \"..L.DBM..\" version installed: %s\"\nL.INSTANCE_INFO_RESULTS\t\t\t\t\t= \"Instance ID scan results. Note that instances might show up more than once if there are players with localized WoW clients in your raid.\"\n--L.INSTANCE_INFO_SHOW_RESULTS\t\t\t= \"Players yet to respond: %s\\n|HDBM:showRaidIdResults|h|cff3588ff[Show results now]|r|h\"\nL.INSTANCE_INFO_SHOW_RESULTS\t\t\t= \"Players yet to respond: %s\"\n\nL.LAG_CHECKING\t\t\t\t\t\t\t= \"Checking raid Latency... \"\nL.LAG_HEADER\t\t\t\t\t\t\t= L.DEADLY_BOSS_MODS.. \" - Latency Results\"\nL.LAG_ENTRY\t\t\t\t\t\t\t\t= \"%s: World delay [%d ms] / Home delay [%d ms]\"\nL.LAG_FOOTER\t\t\t\t\t\t\t= \"No Response: %s\"\n\nL.DUR_CHECKING\t\t\t\t\t\t\t= \"Checking raid Durability... \"\nL.DUR_HEADER\t\t\t\t\t\t\t= L.DEADLY_BOSS_MODS.. \" - Durability Results\"\nL.DUR_ENTRY\t\t\t\t\t\t\t\t= \"%s: Durability [%d percent] / Gear broken [%s]\"\nL.LAG_FOOTER\t\t\t\t\t\t\t= \"No Response: %s\"\n\nL.OVERRIDE_ACTIVATED\t\t\t\t\t= \"Configuration overrides have been activated for this encounter by RL\"\n\n--LDB\nL.LDB_TOOLTIP_HELP1\t\t\t\t\t\t= \"Click to open \" .. L.DBM\nL.LDB_TOOLTIP_HELP2\t\t\t\t\t\t= \"Alt+right click to toggle Silent Mode\"\nL.SILENTMODE_IS\t\t\t\t\t\t\t= \"SilentMode is \"\n\nL.WORLD_BUFFS = {\n\thordeOny\t\t\t\t\t\t\t= \"People of the Horde, citizens of Orgrimmar, come, gather round and celebrate a hero of the Horde\",\n\tallianceOny\t\t\t\t\t\t\t= \"Citizens and allies of Stormwind, on this day, history has been made.\",\n\thordeNef\t\t\t\t\t\t\t= \"NEFARIAN IS SLAIN! People of Orgrimmar\",\n\tallianceNef\t\t\t\t\t\t\t= \"Citizens of the Alliance, the Lord of Blackrock is slain!\",\n\tzgHeart\t\t\t\t\t\t\t\t= \"Now, only one step remains to rid us of the Soulflayer's threat\",\n\tzgHeartBooty\t\t\t\t\t\t= \"The Blood God, the Soulflayer, has been defeated!  We are imperiled no longer!\",\n\tzgHeartYojamba\t\t\t\t\t\t= \"Begin the ritual, my servants.  We must banish the heart of Hakkar back into the void!\",\n\trendHead\t\t\t\t\t\t\t= \"The false Warchief, Rend Blackhand, has fallen!\"\n}\n\n--Retail Globals\nL.RAID_INFO_WORLD_BOSS\t\t\t\t\t= \"World Boss\"\nL.SCENARIO_STAGE\t\t\t\t\t\t= \"Stage %d\"\nL.SPECIALIZATION\t\t\t\t\t\t= \"Specialization\" -- ID: 22433\n-- EJ\nL.HARD_MODE\t\t\t\t\t\t\t\t= \"Hard Mode\" -- 17220\nL.BOSS_YOU_DEFEATED\t\t\t\t\t\t= \"You Defeated\" -- 25559\nL.BOSS_KILL_SUBTITLE\t\t\t\t\t= \"has been defeated\" -- 25560\n"
  },
  {
    "path": "DBM-Core/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\nif not DBM_CORE_L then DBM_CORE_L = {} end\n\nlocal L = DBM_CORE_L\n\nL.HOW_TO_USE_MOD\t\t\t\t\t= \"Bienvenido a \"..L.DBM..\". Escribe '/dbm help' para ver la lista de comandos. Para acceder a la configuración no tienes más que escribir '/dbm'.\"\nL.SILENT_REMINDER\t\t\t\t\t= \"Recordatorio: \"..L.DBM..\" sigue en modo silencioso.\"\n\nL.LOAD_MOD_ERROR\t\t\t\t= \"Error al cargar el módulo de %s: %s\"\nL.LOAD_MOD_SUCCESS\t\t\t= \"Módulo de '%s' cargado. Para más opciones, como alertas de sonido o notas de aviso personalizadas, escribe '/dbm'.\"\nL.LOAD_MOD_COMBAT\t\t\t= \"Carga del módulo de '%s' aplazada hasta salir de combate.\"\nL.LOAD_GUI_ERROR\t\t\t\t= \"No se ha podido cargar la interfaz: %s\"\nL.LOAD_GUI_COMBAT\t\t\t= \"La interfaz no se puede cargar en combate. Se cargará la interfaz al salir de combate. Una vez cargada, podrás iniciar la interfaz en combate.\"\nL.BAD_LOAD\t\t\t\t\t= \"\"..L.DBM..\" ha detectado que no se ha podido cargar el módulo de esta estancia porque estás en combate. Por favor, escribe '/console reloadui' nada más salir de combate.\"\nL.LOAD_MOD_VER_MISMATCH\t\t= \"No se ha podido cargar el módulo de %s porque tu módulo de DBM-Core no cumple los requisitos necesarios. Se necesita una versión más reciente.\"\nL.LOAD_MOD_EXP_MISMATCH\t\t= \"No se ha podido cargar el módulo de %s porque está diseñado para una expansión que aún no se encuentra disponible. Este módulo se habilitará automáticamente cuando salga la nueva expansión.\"\nL.LOAD_MOD_TOC_MISMATCH\t\t= \"No se ha podido cargar el módulo de %s porque está diseñado para un parche de WoW que aún no se encuentra disponible. Este módulo se habilitará automáticamente cuando salga dicho parche.\"\nL.LOAD_MOD_DISABLED\t\t\t= \"%s está instalado pero se encuentra desactivado. Este módulo no se cargará hasta que lo actives.\"\nL.LOAD_MOD_DISABLED_PLURAL\t= \"%s están instalados pero se encuentran desactivados. Estos módulos no se cargarán hasta que los actives.\"\n\nL.COPY_URL_DIALOG\t\t\t\t\t= \"Copiar vínculo\"\n\n--Post Patch 7.1\nL.NO_RANGE\t\t\t\t\t= \"No se puede usar el radar de distancia en estancias. Se procederá a usar el marco de distancia por texto.\"\nL.NO_ARROW\t\t\t\t\t= \"No se puede usar la flecha en estancias.\"\nL.NO_HUD\t\t\t\t\t\t= \"No se puede usar el indicador en pantalla en estancias.\"\n\nL.DYNAMIC_DIFFICULTY_CLUMP\t= \"\"..L.DBM..\" ha desactivado el marco de distancia dinámico para este combate debido a la falta de información sobre las diferencias según el número de jugadores.\"\nL.DYNAMIC_ADD_COUNT\t\t\t= \"\"..L.DBM..\" ha desactivado los avisos de esbirros para este combate debido a la falta de información sobre las diferencias según el número de jugadores.\"\nL.DYNAMIC_MULTIPLE\t\t\t= \"\"..L.DBM..\" ha desactivado varias funciones para este combate debido a la falta de información sobre las diferencias según el número de jugadores.\"\n\nL.LOOT_SPEC_REMINDER\t\t\t= \"Tu especialización es %s. Tu especialización de botín es %s.\"\n\nL.BIGWIGS_ICON_CONFLICT\t\t= \"\"..L.DBM..\" ha detectado que tienes habilitados los iconos de banda en BigWigs y \"..L.DBM..\". Por favor, desactívalos en uno de los dos addons para evitar conflictos con la configuración de tu líder de banda.\"\n\nL.MOD_AVAILABLE\t\t\t\t= \"El módulo de %s está disponible para este contenido. Puedes descargarlo a través de Curse, WoWInterface o deadlybossmods.com.\"\n\nL.COMBAT_STARTED\t\t\t\t= \"Encuentro de %s iniciado. ¡Buena suerte!\"\nL.COMBAT_STARTED_IN_PROGRESS\t= \"Te has unido al encuentro de %s mientras estaba en curso. ¡Buena suerte!\"\nL.GUILD_COMBAT_STARTED\t\t= \"Grupo de %s de tu hermandad ha iniciado el encuentro de %s.\"\nL.SCENARIO_STARTED\t\t\t= \"Iniciando la gesta %s. ¡Buena suerte!\"\nL.SCENARIO_STARTED_IN_PROGRESS\t= \"Te has unido a la gesta %s mientras estaba en curso. ¡Buena suerte!\"\nL.BOSS_DOWN\t\t\t\t\t= \"¡%s ha sido derrotado en %s!\"\nL.BOSS_DOWN_I\t\t\t\t= \"¡%s ha sido derrotado! Tienes %d victorias en total.\"\nL.BOSS_DOWN_L\t\t\t\t= \"¡%s ha sido derrotado en %s! Tu última victoria fue en %s, y tu récord actual es %s. Tienes %d victorias en total.\"\nL.BOSS_DOWN_NR\t\t\t\t= \"¡%s ha sido derrotado en %s! ¡Es un nuevo récord! (El anterior era %s). Tienes %d victorias en total.\"\nL.RAID_DOWN\t\t\t\t\t= \"¡%s ha sido completado en %s!\"\nL.RAID_DOWN_L\t\t\t\t= \"¡%s ha sido completado en %s! Tu récord actual es %s.\"\nL.RAID_DOWN_NR\t\t\t\t= \"¡%s ha sido completado en %s! ¡Es un nuevo récord! (El anterior era %s).\"\nL.GUILD_BOSS_DOWN\t\t\t= \"¡%s ha sido derrotado por grupo de %s de tu hermandad en %s!\"\nL.SCENARIO_COMPLETE\t\t\t= \"¡%s ha sido completada en %s!\"\nL.SCENARIO_COMPLETE_I\t\t= \"¡%s ha sido completada! La has completado %d veces en total.\"\nL.SCENARIO_COMPLETE_L\t\t= \"¡%s ha sido completada en %s! La última vez tardaste %s y tu récord es %s. La has completado %d veces en total.\"\nL.SCENARIO_COMPLETE_NR\t\t= \"¡%s ha sido completada en %s! ¡Es un nuevo récord! (El anterior era %s). La has completado %d veces en total.\"\nL.COMBAT_ENDED_AT\t\t\t= \"El encuentro de %s (%s) ha terminado en %s.\"\nL.COMBAT_ENDED_AT_LONG\t\t= \"El encuentro de %s (%s) ha terminado en %s. Tienes %d derrotas en total en esta dificultad.\"\nL.GUILD_COMBAT_ENDED_AT\t\t= \"Grupo de %s de tu hermandad ha sido derrotado en el encuentro de %s (%s) en %s.\"\nL.SCENARIO_ENDED_AT\t\t\t= \"%s ha terminado en %s.\"\nL.SCENARIO_ENDED_AT_LONG\t\t= \"%s ha terminado en %s. Lo has intentado %d veces sin éxito en esta dificultad.\"\nL.COMBAT_STATE_RECOVERED\t\t= \"El encuentro de %s comenzó hace %s. Recalibrando temporizadores...\"\nL.TRANSCRIPTOR_LOG_START\t\t= \"Registro de Transcriptor iniciado.\"\nL.TRANSCRIPTOR_LOG_END\t\t= \"Registro de Transcriptor finalizado.\"\n\nL.MOVIE_SKIPPED\t\t\t\t= \"Cinemática saltada automáticamente.\"\nL.BONUS_SKIPPED\t\t\t\t= \"\"..L.DBM..\" ha cerrado automáticamente la ventana de bonus de botín. Si quieres abrirla, escribe /dbmbonusroll antes de que pasen 3 minutos.\"\nL.BONUS_EXPIRED\t\t\t\t= \"Has intentado usar /dbmbonusroll para abrir la ventana de bonus de botín, pero no tienes ninguna tirada pendiente.\"\n\nL.AFK_WARNING\t\t\t\t= \"Estás ausente y en combate (%d por cierto de salud restante); se procederá a reproducir un sonido de alerta. Sino estás ausente, quítate el estado o desactiva esta opción en 'Funciones adicionales'.\"\n\nL.COMBAT_STARTED_AI_TIMER\t= \"Mi unidad central es un procesador de red neuronal: una máquina capaz de aprender. (Este encuentro usará la nueva IA de temporizadores para generar temporizadores aproximados.)\"\n\nL.PROFILE_NOT_FOUND\t\t\t= \"<\"..L.DBM..\"> Tu perfil actual está corrupto. \"..L.DBM..\" cargará el perfil 'Default'.\"\nL.PROFILE_CREATED\t\t\t= \"Se ha creado el perfil '%s'.\"\nL.PROFILE_CREATE_ERROR\t\t= \"No se ha podido crear el perfil. El nombre del perfil no es válido.\"\nL.PROFILE_CREATE_ERROR_D\t\t= \"No se ha podido crear el perfil. Ya existe un perfil llamado '%s'.\"\nL.PROFILE_APPLIED\t\t\t= \"Se ha cambiado el perfil actual a '%s'.\"\nL.PROFILE_APPLY_ERROR\t\t= \"No se ha podido cambiar de perfil. El perfil '%s' no existe.\"\nL.PROFILE_COPIED\t\t\t\t= \"Se ha copiado el perfil '%s'.\"\nL.PROFILE_COPY_ERROR\t\t\t= \"No se ha podido copiar el perfil. El perfil '%s' no existe.\"\nL.PROFILE_COPY_ERROR_SELF\t= \"No se puede copiar un perfil a sí mismo.\"\nL.PROFILE_DELETED\t\t\t= \"Se ha borrado el perfil '%s'. \"..L.DBM..\" cambiará ahora al perfil 'Default'.\"\nL.PROFILE_DELETE_ERROR\t\t= \"No se ha podido borrar el perfil. El perfil '%s' no existe.\"\nL.PROFILE_CANNOT_DELETE\t\t= \"No se puede borrar el perfil 'Default'.\"\nL.MPROFILE_COPY_SUCCESS\t\t= \"Se ha copiado la configuración de módulo de %s (especialización %d).\"\nL.MPROFILE_COPY_SELF_ERROR\t= \"No se puede copiar una configuración de personaje a sí misma.\"\nL.MPROFILE_COPY_S_ERROR\t\t= \"La configuración de origen está corrupta. Es posible que la configuración se haya copiado a medias o haya fallado por completo.\"\nL.MPROFILE_COPYS_SUCCESS\t\t= \"Se ha copiado la configuración de notas o sonido de módulo de %s (especialización %d).\"\nL.MPROFILE_COPYS_SELF_ERROR\t= \"No se puede copiar una configuración de notas o sonido a sí misma.\"\nL.MPROFILE_COPYS_S_ERROR\t\t= \"La configuración de origen está corrupta. Es posible que la configuración de notas o sonido se haya copiado a medias o haya fallado por completo.\"\nL.MPROFILE_DELETE_SUCCESS\t= \"Se ha borrado la configuración de módulo de %s (especialización %d).\"\nL.MPROFILE_DELETE_SELF_ERROR\t= \"No se puede borrar una configuración que está actualmente en uso.\"\nL.MPROFILE_DELETE_S_ERROR\t= \"La configuración de origen está corrupta. Es posible que la configuración se haya borrado a medias o haya fallado por completo.\"\n\nL.NOTE_SHARE_SUCCESS\t\t\t= \"%s está compartiendo su nota para %s.\"\nL.NOTE_SHARE_LINK\t\t\t= \"Haz clic aquí para abrir la nota\"\nL.NOTE_SHARE_FAIL\t\t\t= \"%s está intentando compartir su nota para %s. Sin embargo, el módulo asociado con esta facultad no está instalado o cargado. Si necesitas esta nota, asegúrate de que tienes el módulo asociado cargado y pídele que vuelva a compartirla.\"\n\nL.NOTEHEADER\t\t\t\t\t= \"Introduce tu nota para %s. Los nombres de jugador entre '>' y '<' se mostrarán con el color de su clase. Para alertas con varias notas, sepáralas con '/'.\"\nL.NOTEFOOTER\t\t\t\t\t= \"Haz clic en 'Aceptar' para guardar la nota o en 'Cancelar' para rechazarla.\"\nL.NOTESHAREDHEADER\t\t\t= \"%s está compartiendo esta nota para %s. Si la aceptas, sobrescribirá tu nota actual.\"\nL.NOTESHARED\t\t\t\t\t= \"Se ha enviado tu nota al grupo.\"\nL.NOTESHAREERRORSOLO\t\t\t= \"¿Te sientes solo? Compartir notas contigo mismo no tiene sentido alguno.\"\nL.NOTESHAREERRORBLANK\t\t= \"No se puede compartir notas en blanco.\"\nL.NOTESHAREERRORGROUPFINDER\t= \"No se puede compartir notas en campos de batalla, buscador de bandas y buscador de grupo.\"\nL.NOTESHAREERRORALREADYOPEN\t= \"No se puede abrir notas compartidas con el editor de notas ya abierto.\"\n\nL.ALLMOD_DEFAULT_LOADED\t\t= \"Se han cargado las opciones por defecto de todos los módulos de esta estancia.\"\nL.ALLMOD_STATS_RESETED\t\t= \"Se han restaurado todas las estadísticas de este módulo.\"\nL.MOD_DEFAULT_LOADED\t\t\t= \"Se han cargado las opciones por defecto de este encuentro.\"\n\nL.WORLDBOSS_ENGAGED\t\t\t= \"Es posible que el encuentro de %s se haya iniciado en tu reino a %s de su salud máxima. (Enviado por %s.)\"\nL.WORLDBOSS_DEFEATED\t\t\t= \"Es posible que %s haya sido derrotado en tu reino. (Enviado por %s.)\"\nL.WORLDBUFF_STARTED\t\t\t= \"%s ha empezado en tu reino para la facción %s (Enviado por %s).\"\n\nL.TIMER_FORMAT_SECS\t\t\t= \"%.2f |4segundo:segundos;\"\nL.TIMER_FORMAT_MINS\t\t\t= \"%d |4minuto:minutos;\"\nL.TIMER_FORMAT\t\t\t\t= \"%d |4minuto:minutos; y %.2f |4segundo:segundos;\"\n\nL.MIN\t\t\t\t\t\t= \"min\"\nL.MIN_FMT\t\t\t\t\t= \"%d min\"\nL.SEC\t\t\t\t\t\t= \"s\"\nL.SEC_FMT\t\t\t\t\t= \"%s s\"\n\nL.GENERIC_WARNING_OTHERS\t= \"y otro\"\nL.GENERIC_WARNING_OTHERS2\t= \"y otros %d\"\nL.GENERIC_WARNING_BERSERK\t= \"Rabia en %s %s\"\nL.GENERIC_TIMER_BERSERK\t\t= \"Rabia\"\nL.OPTION_TIMER_BERSERK\t\t= \"Mostrar tiempo restante para $spell:26662\"\nL.GENERIC_TIMER_COMBAT\t\t= \"Comienza el encuentro\"\nL.OPTION_TIMER_COMBAT\t\t= \"Mostrar temporizador para el inicio del encuentro\"\nL.BAD\t\t\t\t\t\t= \"Daño\"\nL.OPTION_HEALTH_FRAME\t\t= \"Mostrar barra de vida del boss\"\n\nL.OPTION_CATEGORY_TIMERS\t\t\t= \"Barras\"\n--Sub cats for \"announce\" object\nL.OPTION_CATEGORY_WARNINGS\t\t= \"Anuncios generales\"\nL.OPTION_CATEGORY_WARNINGS_YOU\t= \"Anuncios personales\"\nL.OPTION_CATEGORY_WARNINGS_OTHER\t= \"Anuncios de objetivos\"\nL.OPTION_CATEGORY_WARNINGS_ROLE\t= \"Anuncios de rol\"\n\nL.OPTION_CATEGORY_SOUNDS\t\t\t= \"Sonidos\"\n--Misc object broken down into sub cats\nL.OPTION_CATEGORY_DROPDOWNS\t\t= \"Menús desplegables\"\nL.OPTION_CATEGORY_YELLS\t\t\t= \"Gritos\"\nL.OPTION_CATEGORY_NAMEPLATES\t\t= \"Placas de nombres\"\nL.OPTION_CATEGORY_ICONS\t\t\t= \"Iconos\"\n\nL.AUTO_RESPONDED\t\t\t\t= \"Respondido automáticamente.\"\nL.STATUS_WHISPER\t\t\t\t= \"%s: %s, %d/%d jugadores vivos.\"\n--Bosses\nL.AUTO_RESPOND_WHISPER\t\t\t\t= \"%s está ocupado con el encuentro de %s (%s, %d/%d jugadores vivos).\"\nL.WHISPER_COMBAT_END_KILL\t\t\t= \"¡%s ha derrotado a %s!\"\nL.WHISPER_COMBAT_END_KILL_STATS\t\t= \"¡%s ha derrotado a %s! Tiene %d victorias en total.\"\nL.WHISPER_COMBAT_END_WIPE_AT\t\t\t= \"%s ha sido derrotado en el encuentro de %s (%s).\"\nL.WHISPER_COMBAT_END_WIPE_STATS_AT\t= \"%s ha sido derrotado en el encuentro de %s (%s). Tiene %d derrotas en total en esta dificultad.\"\n--Scenarios (no percents. words like \"fighting\" or \"wipe\" changed to better fit scenarios)\nL.AUTO_RESPOND_WHISPER_SCENARIO\t\t= \"%s está ocupado con la gesta %s (%d/%d jugadores vivos).\"\nL.WHISPER_SCENARIO_END_KILL\t\t\t= \"¡%s ha completado %s!\"\nL.WHISPER_SCENARIO_END_KILL_STATS\t= \"¡%s ha completado %s! Tiene %d victorias en total.\"\nL.WHISPER_SCENARIO_END_WIPE\t\t\t= \"%s no ha completado %s.\"\nL.WHISPER_SCENARIO_END_WIPE_STATS\t= \"%s no ha completado %s. Lo ha intentado sin éxito %d veces en total en esta dificultad.\"\n\nL.VERSIONCHECK_HEADER\t\t= \"\"..L.DEADLY_BOSS_MODS..\" - Versiones\"\nL.VERSIONCHECK_ENTRY\t\t\t= \"%s: %s (%s) %s\"--One Boss mod\nL.VERSIONCHECK_ENTRY_TWO\t\t= \"%s: %s (%s) y %s (%s)\"--Two Boss mods\nL.VERSIONCHECK_ENTRY_NO_DBM\t= \"%s: Sin instalar\"\nL.VERSIONCHECK_FOOTER\t\t= \"Se ha encontrado %d jugador(es) con \"..L.DBM..\" y %d jugador(es) con BigWigs.\"\nL.VERSIONCHECK_OUTDATED\t\t= \"Los siguientes %d jugadores tienen una versión desfasada de \"..L.DBM..\": %s\"\nL.YOUR_VERSION_OUTDATED\t\t= \"Tu versión de \"..L.DEADLY_BOSS_MODS..\" está desfasada. Por favor, visita \".. L.UPDATEREMINDER_URL ..\" para descargar la última versión.\"\nL.VOICE_PACK_OUTDATED\t\t= \"A este paquete de voces le faltan sonidos compatibles con esta versión de \"..L.DBM..\". No se sustituirán los sonidos de avisos especiales que no tengan sustituto. Por favor, descarga una versión más reciente del paquete de voces o contacta con el autor para informarle de los archivos de sonido que faltan.\"\nL.VOICE_MISSING\t\t\t\t= \"Tenías seleccionado un paquete de voces que no se ha podido encontrar. Se ha restaurado tu selección a 'Ninguno'. Si crees que se trata de un error, asegúrate de que el paquete de voces se haya instalado correctamente y esté habilitado en la lista de Addons.\"\nL.VOICE_DISABLED\t\t\t\t= \"Tienes al menos un paquete de voces de \"..L.DBM..\" instalado, pero ninguno está activado. Si quieres usar un paquete de voces, asegúrate de que lo has asignado en 'Alertas de voz'. Desinstala los paquetes de voces que tengas sin usar para ocultar este mensaje.\"\nL.VOICE_COUNT_MISSING\t\t= \"La voz de cuenta atrás %d está asignada a un paquete de voces que no se ha podido encontrar. Se ha restaurado a la configuración por defecto.\"\nL.BIG_WIGS\t\t\t\t\t\t= \"BigWigs\"\n\nL.UPDATEREMINDER_HEADER\t\t\t= \"Tu versión de \"..L.DEADLY_BOSS_MODS..\" está desfasada.\\nPuedes descargar la versión %s (%s) aquí: \" .. L.UPDATEREMINDER_URL\nL.UPDATEREMINDER_FOOTER\t\t\t= \"Pulsa \" .. (IsMacClient() and \"Cmd-C\" or \"Ctrl-C\") .. \" para copiar el enlace de descarga en tu portapapeles.\"\nL.UPDATEREMINDER_FOOTER_GENERIC\t= \"Pulsa \" .. (IsMacClient() and \"Cmd-C\" or \"Ctrl-C\") .. \" para copiar el enlace en tu portapapeles.\"\nL.UPDATEREMINDER_DISABLE\t\t\t= \"AVISO: Se ha desactivado \"..L.DEADLY_BOSS_MODS..\" porque tu versión está demasiado desfasada. Con tal de prevenir conflictos con las versiones de otros jugadores, no se podrá volver a activar \"..L.DBM..\" hasta que lo actualices.\"\nL.UPDATEREMINDER_HOTFIX\t\t\t= \"Tu versión de \"..L.DBM..\" actual tiene errores conocidos en este encuentro. Por favor, actualiza a la última versión.\"\nL.UPDATEREMINDER_HOTFIX_ALPHA\t= \"Tu versión de \"..L.DBM..\" actual tiene errores conocidos en este encuentro. Estos errores serán corregidos en la próxima versión (o ya están corregidos en la última versión alfa).\"\nL.UPDATEREMINDER_MAJORPATCH\t\t= \"AVISO: Se ha desactivado \"..L.DEADLY_BOSS_MODS..\" porque tu versión está demasiado desfasada. Como se trata de un parche de contenido importante, y con tal de prevenir conflictos con las versiones de otros jugadores, no se podrá volver a activar \"..L.DBM..\" hasta que lo actualices.\"\nL.VEM\t\t\t\t\t\t\t= \"AVISO: Estás ejecutando \"..L.DEADLY_BOSS_MODS..\" y Voice Encounter Mods a la vez. \"..L.DBM..\" no funciona correctamente con esta configuración, y por tanto no se ejecutará.\"\nL.OUTDATEDPROFILES\t\t\t\t\t= \"AVISO: DBM-Profiles no es compatible con esta versión de \"..L.DBM..\". Con tal de evitar conflictos, \"..L.DBM..\" no se ejecutará hasta que desactives o desinstales DBM-Profiles.\"\nL.OUTDATEDSPELLTIMERS\t\t\t\t= \"AVISO: DBM-SpellTimers provoca que \"..L.DBM..\" deje de funcionar. Desactívalo para que \"..L.DBM..\" funcione correctamente.\"\nL.OUTDATEDRLT\t\t\t\t\t\t= \"AVISO: DBM-RaidLeadTools provoca que \"..L.DBM..\" deje de funcionar. DBM-RaidLeadTools ya no es compatible con \"..L.DBM..\" y debe desactivarse para que este funcione correctamente.\"\nL.VICTORYSOUND\t\t\t\t\t= \"AVISO: DBM-VictorySound no es compatible con esta versión de \"..L.DBM..\". Con tal de evitar conflictos, \"..L.DBM..\" no se ejecutará hasta que desactives o desinstales DBM-VictorySound.\"\nL.DPMCORE\t\t\t\t\t\t= \"AVISO: Deadly PvP Mods ya no está en desarrollo y no es compatible con esta versión de \"..L.DBM..\". Con tal de evitar conflictos, \"..L.DBM..\" no se ejecutará hasta que borres Deadly PvP Mods.\"\nL.DBMLDB\t\t\t\t\t\t\t= \"AVISO: DBM-LDB está ahora incluido en DBM-Core. Es recomendable que borres la carpeta 'DBM-LDB' de tu carpeta de addons.\"\nL.DBMLOOTREMINDER\t\t\t\t= \"AVISO: tienes instalado el módulo de terceros DBM-LootReminder. Este addon ya no es compatible con el cliente de WoW y causa conflictos con los temporizadores de \"..L.DBM..\". Es recomendable que lo desinstales.\"\nL.UPDATE_REQUIRES_RELAUNCH\t\t= \"AVISO: Esta actualización de \"..L.DBM..\" no funcionará correctamente hasta que reinicies el juego. Esta versión contiene nuevos archivos o cambios a los archivos .toc que no pueden recargarse mediante /reload. Es muy probable que \"..L.DBM..\" no funcione correctamente hasta que reinicies el juego.\"\nL.OUT_OF_DATE_NAG\t\t\t\t= \"Tu versión de \"..L.DEADLY_BOSS_MODS..\" está desfasada para este encuentro. Se recomienda que actualices \"..L.DBM..\" para no perderte ningún aviso, temporizador o indicador crucial para tu grupo de banda.\"\n\nL.MOVABLE_BAR\t\t\t\t= \"¡Muéveme!\"\n\nL.PIZZA_SYNC_INFO\t\t\t\t\t= \"|Hplayer:%1$s|h[%1$s]|h ha compartido un temporizador de DBM: '%2$s'\\n|HDBM:cancel:%2$s:nil|h|cff3588ff[Cancelar este temporizador]|r|h  |HDBM:ignore:%2$s:%1$s|h|cff3588ff[Ignorar temporizadores de %1$s]|r|h\"\n--L.PIZZA_SYNC_INFO\t\t\t\t\t= \"|Hplayer:%1$s|h[%1$s]|h ha compartido un temporizador de DBM: '%2$s'\\n|HDBM:cancel:%2$s:nil|h|cff3588ff[Cancelar este temporizador]|r|h  |HDBM:ignore:%2$s:%1$s|h|cff3588ff[Ignorar temporizadores de %1$s]|r|h\"\nL.PIZZA_CONFIRM_IGNORE\t\t\t= \"¿Seguro que quieres ignorar los temporizadores de %s para esta sesión?\"\nL.PIZZA_ERROR_USAGE\t\t\t\t= \"Uso: /dbm [broadcast] timer <seg> <texto>. <seg> debe ser mayor que 1.\"\n\nL.MINIMAP_TOOLTIP_HEADER\t\t= L.DEADLY_BOSS_MODS\nL.MINIMAP_TOOLTIP_FOOTER\t\t= \"MAYÚS-Clic izquierdo o Clic derecho para mover este botón.\\nAlt-MAYÚS-Clic izquierdo para moverlo libremente.\"\n\nL.RANGECHECK_HEADER\t\t\t= \"Comprobación de distancia (%d m)\"\nL.RANGECHECK_HEADERT\t\t\t= \"Comprobación de distancia (%dm-%dP)\"\nL.RANGECHECK_RHEADER\t\t\t= \"Comprobación inversa de distancia (%dm)\"\nL.RANGECHECK_RHEADERT\t\t= \"Comprobación inversa de distancia (%dm-%dP)\"\nL.RANGECHECK_SETRANGE\t\t= \"Ajustar distancia\"\nL.RANGECHECK_SETTHRESHOLD\t= \"Ajustar límite de jugadores\"\nL.RANGECHECK_SOUNDS\t\t\t= \"Sonidos\"\nL.RANGECHECK_SOUND_OPTION_1\t= \"Sonido si un jugador está a distancia\"\nL.RANGECHECK_SOUND_OPTION_2\t= \"Sonido si más de un jugador está a distancia\"\nL.RANGECHECK_SOUND_0\t\t\t= \"Sin sonido\"\nL.RANGECHECK_SOUND_1\t\t\t= \"Sonido por defecto\"\nL.RANGECHECK_SOUND_2\t\t\t= \"Pitido\"\nL.RANGECHECK_SETRANGE_TO\t\t= \"%d m\"\nL.RANGECHECK_OPTION_FRAMES\t= \"Marcos\"\nL.RANGECHECK_OPTION_RADAR\t= \"Mostrar marco de radar\"\nL.RANGECHECK_OPTION_TEXT\t\t= \"Mostrar marco de texto\"\nL.RANGECHECK_OPTION_BOTH\t\t= \"Mostrar ambos\"\nL.RANGERADAR_HEADER\t\t\t= \"Distancia: %d / Jugadores: %d\"\nL.RANGERADAR_BOSS_HEADER\t\t= \"Distancia de jefe (%d m)\"\nL.RANGERADAR_RHEADER\t\t\t= \"Distancia inversa: %d / Jugadores: %d\"\nL.RANGERADAR_IN_RANGE_TEXT\t= \"%d a distancia (%0.1fm)\"--Multi\nL.RANGECHECK_IN_RANGE_TEXT\t= \"%d a distancia\"--Text based doesn't need (%dyd), especially since it's not very accurate to the specific yard anyways\nL.RANGERADAR_IN_RANGE_TEXTONE= \"%s (%0.1fm)\"--One target\n\nL.INFOFRAME_SHOW_SELF\t\t= \"Mostrar siempre tu información\"\t\t-- Always show your own power value even if you are below the threshold\nL.INFOFRAME_SETLINES\t\t\t= \"Líneas máximas\"\nL.INFOFRAME_SETCOLS\t\t\t\t= \"Columnas máximas\"\nL.INFOFRAME_LINESDEFAULT\t\t= \"Por defecto\"\nL.INFOFRAME_LINES_TO\t\t\t= \"%d líneas\"\nL.INFOFRAME_COLS_TO\t\t\t\t= \"%d columnas\"\nL.INFOFRAME_POWER\t\t\t= \"Recurso\"\nL.INFOFRAME_AGGRO\t\t\t= \"Amenaza\"\nL.INFOFRAME_MAIN\t\t\t\t= \"Principal:\"--Main power\nL.INFOFRAME_ALT\t\t\t\t= \"Secundario:\"--Alternate Power\n\nL.LFG_INVITE\t\t\t\t\t\t= \"Invitación del buscador\"\n\nL.SLASHCMD_HELP\t\t\t\t= {\n\t\"Comandos disponibles:\",\n\t\"-----------------\",\n\t\"/dbm unlock: Muestra un temporizador de ejemplo desplazable (alias: move).\",\n\t\"/range <número> o /distance <número>: Muestra el marco de distancia. /rrange y /rdistance invierten el color.\",\n\t\"/hudar <número>: Muestra el indicador de distancia en pantalla.\",\n\t\"/dbm timer: Inicia un temporizador personalizado de DBM. Consulta '/dbm timer' para más detalles.\",\n\t\"/dbm arrow: Muestra la flecha de DBM. Consulta '/dbm arrow help' para más detalles.\",\n\t\"/dbm hud: Muestra el indicador en pantalla de DBM. Escribe '/dbm hud' para más detalles.\",\n\t\"/dbm help2: Lista los comandos de banda de DBM.\"\n}\nL.SLASHCMD_HELP2\t\t\t\t= {\n\t\"Comandos disponibles:\",\n\t\"-----------------\",\n\t\"/dbm pull <seg>: Inicia un temporizador de inicio de encuentro para toda la banda (requiere líder o ayudante) (alias: pull).\",\n\t\"/dbm break <min>: Inicia un temporizador de descanso para toda la banda (requiere líder o ayudante) (alias: break).\",\n\t\"/dbm version: Realiza una comprobación de versión de DBM a toda la banda (alias: ver).\",\n\t\"/dbm version2: Realiza una comprobación de versión de DBM que también susurra a los jugadores con versiones desfasadas (alias: ver2).\",\n\t\"/dbm lag: Realiza una comprobación de latencia a toda la banda.\",\n\t\"/dbm durability: Realiza una comprobación de durabilidad a toda la banda.\"\n}\nL.TIMER_USAGE\t= {\n\t\"\"..L.DBM..\" timer commands:\",\n\t\"-----------------\",\n\t\"/dbm timer <seg> <texto>: Inicia un temporizador con texto.\",\n\t\"/dbm ltimer <seg> <texto>: Inicia un temporizador que se repite hasta que se cancela.\",\n\t\"(Si escribes 'broadcast' delante de un temporizador, lo compartirás con tu grupo de banda si eres líder o ayudante)\",\n\t\"/dbm timer endloop: Cancela todos los ltimer que se estén repitiendo.\"\n}\n\nL.ERROR_NO_PERMISSION\t\t\t\t= \"No tienes permiso para hacer eso.\"\n\nL.BREAK_USAGE\t\t\t\t= \"El temporizador de descanso no puede durar más de 60 minutos. Asegúrate de que has escrito el tiempo en minutos y no en segundos.\"\nL.BREAK_START\t\t\t\t= \"El descanso comienza ahora. ¡Tienes %s! (Enviado por %s)\"\nL.BREAK_MIN\t\t\t\t\t= \"¡El descanso termina en %s minuto(s)!\"\nL.BREAK_SEC\t\t\t\t\t= \"¡El descanso termina en %s segundo(s)!\"\nL.TIMER_BREAK\t\t\t\t= \"¡Toca descanso!\"\nL.ANNOUNCE_BREAK_OVER\t\t= \"El descanso ha terminado.\"\n\nL.TIMER_PULL\t\t\t\t= \"Iniciando en\"\nL.ANNOUNCE_PULL_MODE\t\t= \"Dificultad: %s\"\nL.ANNOUNCE_PULL\t\t\t\t= \"Iniciando en %d s (iniciado por %s)\"\nL.ANNOUNCE_PULL_NOW\t\t\t= \"¡Iniciad ahora!\"\nL.ANNOUNCE_PULL_TARGET\t\t= \"Llamando a %s en %d s (iniciado por %s)\"\nL.ANNOUNCE_PULL_NOW_TARGET\t= \"¡Llamando a %s!\"\nL.GEAR_WARNING\t\t\t\t= \"Aviso: Comprobación de equipo. Tu nivel de objeto equipado es %d menor que tu nivel de objeto de inventario.\"\nL.GEAR_WARNING_WEAPON\t\t= \"Aviso: Comprueba que tu arma esté equipada.\"\nL.GEAR_FISHING_POLE\t\t\t= \"Caña de pescar\"\n\nL.ACHIEVEMENT_TIMER_SPEED_KILL = \"Logro\"\n\n-- Auto-generated Warning Localizations\nL.AUTO_ANNOUNCE_TEXTS.you\t\t= \"%s en ti\"\nL.AUTO_ANNOUNCE_TEXTS.target\t\t= \"%s en >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetdistance\t= \"%s en >%%s< (%%d yd)\"\nL.AUTO_ANNOUNCE_TEXTS.targetsource\t= \"%s de >%%s< en >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetcount\t= \"%s (%%s) en >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetcountdistance\t= \"%s (%%s) en >%%s< (%%d yd)\"\nL.AUTO_ANNOUNCE_TEXTS.spell\t\t= \"%s\"\nL.AUTO_ANNOUNCE_TEXTS.ends\t\t= \"%s ha terminado\"\nL.AUTO_ANNOUNCE_TEXTS.endtarget\t= \"%s ha terminado en >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.fades\t\t= \"%s ha terminado\"\nL.AUTO_ANNOUNCE_TEXTS.addsleft\t= \"%s restantes: %%d\"\nL.AUTO_ANNOUNCE_TEXTS.cast\t\t= \"Lanzando %s en %.1f s\"\nL.AUTO_ANNOUNCE_TEXTS.soon\t\t= \"%s en breve\"\nL.AUTO_ANNOUNCE_TEXTS.sooncount\t= \"%s (%%s) en breve\"\nL.AUTO_ANNOUNCE_TEXTS.countdown\t\t= \"%s en %%ds\"\nL.AUTO_ANNOUNCE_TEXTS.prewarn\t= \"%s en %s\"\nL.AUTO_ANNOUNCE_TEXTS.bait\t\t= \"%s en breve - ¡posiciónalo!\"\nL.AUTO_ANNOUNCE_TEXTS.stage\t\t= \"Fase %s\"\nL.AUTO_ANNOUNCE_TEXTS.prestage\t= \"Fase %s en breve\"\nL.AUTO_ANNOUNCE_TEXTS.count\t\t= \"%s (%%s)\"\nL.AUTO_ANNOUNCE_TEXTS.stack\t\t= \"%s en >%%s< (%%d)\"\nL.AUTO_ANNOUNCE_TEXTS.moveto\t\t= \"%s - ¡ve a >%%s<!\"\n\nlocal prewarnOption = \"Mostrar aviso previo para $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.you\t\t\t= \"Anunciar que te afecta $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.target\t\t= \"Anunciar objetivos de $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.targetdistance\t= \"Anunciar objetivos de $spell:%s (con distancia)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetsource\t= \"Anunciar objetivos de $spell:%s (y quién lo lanza)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetcount\t= \"Anunciar objetivos de $spell:%s (con contador)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetcountdistance\t= \"Anunciar objetivos de $spell:%s (con contador y distancia)\"\nL.AUTO_ANNOUNCE_OPTIONS.spell\t\t= \"Mostrar aviso para $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.ends\t\t\t= \"Mostrar aviso cuando termine $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.endtarget\t= \"Mostrar aviso cuando termine $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.fades\t\t= \"Mostrar aviso cuando expire $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.addsleft\t\t= \"Anunciar el número de $spell:%s restantes\"\nL.AUTO_ANNOUNCE_OPTIONS.cast\t\t\t= \"Mostrar aviso cuando se esté lanzando $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.soon\t\t\t= prewarnOption\nL.AUTO_ANNOUNCE_OPTIONS.sooncount\t= prewarnOption\nL.AUTO_ANNOUNCE_OPTIONS.countdown\t\t= \"Mostrar cuenta atrás para $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.prewarn\t\t= prewarnOption\nL.AUTO_ANNOUNCE_OPTIONS.bait\t\t\t= \"Mostrar aviso previso para posicionar $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.stage\t\t= \"Anunciar cambio a Fase %s\"\nL.AUTO_ANNOUNCE_OPTIONS.stagechange\t= \"Anunciar cambios de fase\"\nL.AUTO_ANNOUNCE_OPTIONS.prestage\t\t= \"Mostrar aviso previo para Fase %s\"\nL.AUTO_ANNOUNCE_OPTIONS.count\t\t= \"Mostrar aviso (con contador) para $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.stack\t\t= \"Anunciar acumulaciones de $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.moveto\t\t= \"Mostrar aviso para juntarse con alguien o ir a algún sitio para $spell:%s\"\n\nL.AUTO_SPEC_WARN_TEXTS.spell\t\t\t= \"¡%s!\"\nL.AUTO_SPEC_WARN_TEXTS.ends\t\t\t= \"%s ha terminado\"\nL.AUTO_SPEC_WARN_TEXTS.fades\t\t\t= \"%s ha terminado\"\nL.AUTO_SPEC_WARN_TEXTS.soon\t\t\t= \"%s en breve\"\nL.AUTO_SPEC_WARN_TEXTS.sooncount\t\t= \"%s (%%s) en breve\"\nL.AUTO_SPEC_WARN_TEXTS.bait\t\t\t= \"%s en breve - ¡posiciónalo!\"\nL.AUTO_SPEC_WARN_TEXTS.prewarn\t\t= \"%s en %s\"\nL.AUTO_SPEC_WARN_TEXTS.dispel\t\t= \"%s en >%%s< - ¡disipa ahora!\"\nL.AUTO_SPEC_WARN_TEXTS.interrupt\t\t= \"%s - ¡interrumpe a >%%s<!\"\nL.AUTO_SPEC_WARN_TEXTS.interruptcount= \"%s - ¡interrumpe a >%%s<! (%%d)\"\nL.AUTO_SPEC_WARN_TEXTS.you\t\t\t= \"%s en ti\"\nL.AUTO_SPEC_WARN_TEXTS.youcount\t\t= \"%s (%%s) en ti\"\nL.AUTO_SPEC_WARN_TEXTS.youpos\t\t= \"%s (posición: %%s) en ti\"\nL.AUTO_SPEC_WARN_TEXTS.soakpos\t\t= \"%s (posición: %%s)\"\nL.AUTO_SPEC_WARN_TEXTS.target\t\t= \"%s en >%%s<\"\nL.AUTO_SPEC_WARN_TEXTS.targetcount\t= \"%s (%%s) en >%%s< \"\nL.AUTO_SPEC_WARN_TEXTS.defensive\t\t= \"%s - ¡facultad defensiva ahora!\"\nL.AUTO_SPEC_WARN_TEXTS.taunt\t\t\t= \"%s en >%%s< - ¡provoca ahora!\"\nL.AUTO_SPEC_WARN_TEXTS.close\t\t\t= \"%s en >%%s< cerca de ti\"\nL.AUTO_SPEC_WARN_TEXTS.move\t\t\t= \"%s - ¡sal de ahí!\"\nL.AUTO_SPEC_WARN_TEXTS.keepmove\t\t= \"%s - ¡no dejes de moverte!\"\nL.AUTO_SPEC_WARN_TEXTS.stopmove\t\t= \"%s - ¡deja de moverte!\"\nL.AUTO_SPEC_WARN_TEXTS.dodge\t\t\t= \"%s - ¡esquiva!\"\nL.AUTO_SPEC_WARN_TEXTS.dodgecount\t= \"%s (%%s) - ¡esquiva!\"\nL.AUTO_SPEC_WARN_TEXTS.dodgeloc\t\t= \"%s - ¡esquiva por %%s!\"\nL.AUTO_SPEC_WARN_TEXTS.moveaway\t\t= \"%s - ¡aléjate de los demás!\"\nL.AUTO_SPEC_WARN_TEXTS.moveawaycount\t= \"%s (%%s) - ¡aléjate de los demás\"\nL.AUTO_SPEC_WARN_TEXTS.soak\t\t\t= \"%s - ¡intercepta!\"\nL.AUTO_SPEC_WARN_TEXTS.moveto\t\t= \"%s - ¡ve a >%%s<!\"\nL.AUTO_SPEC_WARN_TEXTS.jump\t\t\t= \"%s - ¡salta!\"\nL.AUTO_SPEC_WARN_TEXTS.run\t\t\t= \"%s - ¡huye!\"\nL.AUTO_SPEC_WARN_TEXTS.cast\t\t\t= \"%s - ¡deja de canalizar!\"\nL.AUTO_SPEC_WARN_TEXTS.lookaway\t\t= \"%s en %%s - ¡date la vuelta!\"\nL.AUTO_SPEC_WARN_TEXTS.reflect\t\t= \"%s en >%%s< - ¡no ataques!\"\nL.AUTO_SPEC_WARN_TEXTS.count\t\t\t= \"¡%s! (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.stack\t\t\t= \"%%d acumulaciones de %s en ti\"\nL.AUTO_SPEC_WARN_TEXTS.switch\t\t= \"%s - ¡cambia de objetivo!\"\nL.AUTO_SPEC_WARN_TEXTS.switchcount\t= \"%s - ¡cambia de objetivo! (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.gtfo\t\t\t= \"%%s a tus pies - ¡apártate!\"\nL.AUTO_SPEC_WARN_TEXTS.adds\t\t\t= \"Esbirros en breve - ¡cambia de objetivo!\"\nL.AUTO_SPEC_WARN_TEXTS.addscustom\t= \"Esbirros en breve - %%s\"\nL.AUTO_SPEC_WARN_TEXTS.targetchange\t= \"¡cambia de objetivo a %%s!\"\n\n-- Auto-generated Special Warning Localizations\nL.AUTO_SPEC_WARN_OPTIONS.spell\t\t\t= \"Mostrar aviso especial para $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.ends\t\t\t= \"Mostrar aviso especial cuando termine $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.fades\t\t\t= \"Mostrar aviso especial cuando expire $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.soon\t\t\t= \"Mostrar aviso previo especial para $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.sooncount\t\t= \"Mostrar aviso previo especial (con contador) para $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.bait\t\t\t= \"Mostrar aviso previo especial para posicionar $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.prewarn\t\t= \"Mostrar aviso previo especial %s s antes de $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.dispel\t\t\t= \"Mostrar aviso especial para disipar $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.interrupt\t\t= \"Mostrar aviso especial para interrumpir $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.interruptcount\t= \"Mostrar aviso especial (con contador) para interrumpir $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.you\t\t\t= \"Mostrar aviso especial cuando te afecte $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.youcount\t\t= \"Mostrar aviso especial (con contador) cuando te afecte $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.youpos\t\t\t= \"Mostrar aviso especial (con posición) cuando te afecte $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.soakpos\t\t\t= \"Mostrar aviso especial (con posición) para acompañar a los jugadores afectados por $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.target\t\t\t= \"Mostrar aviso especial cuando $spell:%s afecte a un jugador\"\nL.AUTO_SPEC_WARN_OPTIONS.targetcount\t= \"Mostrar aviso especial (con contador) cuando $spell:%s afecte a un jugador\"\nL.AUTO_SPEC_WARN_OPTIONS.defensive\t\t= \"Mostrar aviso especial para usar mitigaciones para $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.taunt\t\t\t= \"Mostrar aviso especial para provocar cuando $spell:%s afecte al otro tanque\"\nL.AUTO_SPEC_WARN_OPTIONS.close\t\t\t= \"Mostrar aviso especial cuando $spell:%s afecte a un jugador cercano\"\nL.AUTO_SPEC_WARN_OPTIONS.move\t\t\t= \"Mostrar aviso especial para salir de $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.keepmove\t\t= \"Mostrar aviso especial para no dejar de moverte durante $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.stopmove\t\t= \"Mostrar aviso especial para dejar de moverte durante $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.dodge\t\t\t= \"Mostrar aviso especial para esquivar $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.dodgecount\t\t= \"Mostrar aviso especial (con contador) para esquivar $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.dodgeloc\t\t= \"Mostrar aviso especial (con ubicación) para esquivar $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.moveaway\t\t= \"Mostrar aviso especial para alejarse de los demás jugadores durante $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.moveawaycount\t= \"Mostrar aviso especial (con contador) para alejarse de los demás jugadores durante $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.moveto\t\t\t= \"Mostrar aviso especial para juntarse con alguien o ir a algún sitio para $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.soak\t\t\t= \"Mostrar aviso especial para interceptar $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.jump\t\t\t= \"Mostrar aviso especial para saltar para $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.run\t\t\t= \"Mostrar aviso especial para huir de $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.cast\t\t\t= \"Mostrar aviso especial para dejar de canalizar durante $spell:%s\"--Spell Interrupt\nL.AUTO_SPEC_WARN_OPTIONS.lookaway\t\t= \"Mostrar aviso especial para darte la vuelta para $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.reflect\t\t= \"Mostrar aviso especial para dejar de atacar durante $spell:%s\"--Spell Reflect\nL.AUTO_SPEC_WARN_OPTIONS.count\t\t\t= \"Mostrar aviso especial (con contador) para $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.stack\t\t\t= \"Mostrar aviso especial cuando tengas %d ó más acumulaciones de $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.switch\t\t\t= \"Mostrar aviso especial para cambiar de objetivo a $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.switchcount\t\t= \"Mostrar aviso especial (con contador) para cambiar de objetivo a $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.gtfo\t\t\t= \"Mostrar aviso especial para apartarte de áreas de daño en el suelo\"\nL.AUTO_SPEC_WARN_OPTIONS.adds\t\t\t= \"Mostrar aviso especial para cambiar de objetivo cuando falte poco para que aparezcan esbirros\"\nL.AUTO_SPEC_WARN_OPTIONS.addscustom\t\t= \"Mostrar aviso especial cuando falte poco para que aparezcan esbirros\"\nL.AUTO_SPEC_WARN_OPTIONS.targetchange\t= \"Mostrar aviso especial para cambiar a objetivos prioritarios\"\n\n-- Auto-generated Timer Localizations\nL.AUTO_TIMER_TEXTS.target\t\t= \"%s: %%s\"\nL.AUTO_TIMER_TEXTS.cast\t\t\t= \"%s\"\nL.AUTO_TIMER_TEXTS.castshort\t= \"%s \"--if short timers enabled, cast and next are same timer text, this is a conflict. the space resolves it\nL.AUTO_TIMER_TEXTS.castcount\t= \"%s (%%s)\"\nL.AUTO_TIMER_TEXTS.castcountshort\t\t= \"%s (%%s) \"--Resolve short timer conflict with next timers\nL.AUTO_TIMER_TEXTS.castsource\t= \"%s: %%s\"\nL.AUTO_TIMER_TEXTS.castsourceshort\t\t= \"%s: %%s \"--Resolve short timer conflict with next timers\nL.AUTO_TIMER_TEXTS.active\t\t= \"%s termina\"--Buff/Debuff/event on boss\nL.AUTO_TIMER_TEXTS.fades\t\t= \"%s expira\"--Buff/Debuff on players\nL.AUTO_TIMER_TEXTS.ai\t\t\t= \"IA de %s\"\n\nL.AUTO_TIMER_TEXTS.cd\t\t\t= \"%s TdR\"\nL.AUTO_TIMER_TEXTS.cdshort\t\t= \"~%s\"\nL.AUTO_TIMER_TEXTS.cdcount\t\t= \"%s (%%s) TdR\"\nL.AUTO_TIMER_TEXTS.cdcountshort\t\t= \"~%s (%%s)\"\nL.AUTO_TIMER_TEXTS.cdsource\t\t= \"%s TdR: >%%s<\"\nL.AUTO_TIMER_TEXTS.cdsourceshort\t= \"~%s: >%%s<\"\nL.AUTO_TIMER_TEXTS.cdspecial\t= \"Facultad especial TdR\"\nL.AUTO_TIMER_TEXTS.cdspecialshort\t\t= \"~Facultad especial\"\n\nL.AUTO_TIMER_TEXTS.next\t\t\t= \"Siguiente %s\"\nL.AUTO_TIMER_TEXTS.nextshort\t= \"%s\"\nL.AUTO_TIMER_TEXTS.nextcount\t= \"Siguiente %s (%%s)\"\nL.AUTO_TIMER_TEXTS.nextcountshort\t\t= \"%s (%%s)\"\nL.AUTO_TIMER_TEXTS.nextsource\t= \"Siguiente %s: %%s\"\nL.AUTO_TIMER_TEXTS.nextsourceshort\t\t= \"%s: %%s\"\nL.AUTO_TIMER_TEXTS.nextspecial\t= \"Siguiente facultad especial\"\nL.AUTO_TIMER_TEXTS.nextspecialshort\t\t= \"Facultad especial\"\n\nL.AUTO_TIMER_TEXTS.varcount\t\t= \"%s (%%s)\"\nL.AUTO_TIMER_TEXTS.varsource\t= \"%s: >%%s<\"--Now same as next, as the ~ was moved to timer number -- OPTIONAL\nL.AUTO_TIMER_TEXTS.varspecial\t= \"Facultad especial\"--Now same as next, as the ~ was moved to timer number\nL.AUTO_TIMER_TEXTS.varcombo\t\t= \"%%1$s + %%2$s\"--Now same as next, as the ~ was moved to timer number -- OPTIONAL\n\nL.AUTO_TIMER_TEXTS.achievement\t= \"Logro: %s\"\nL.AUTO_TIMER_TEXTS.stage\t\t= \"Siguiente fase\"\nL.AUTO_TIMER_TEXTS.stageshort\t= \"Fase\"\nL.AUTO_TIMER_TEXTS.adds\t\t\t= \"Esbirros\"\nL.AUTO_TIMER_TEXTS.addsshort\t= \"Esbirros\"\nL.AUTO_TIMER_TEXTS.addscustom\t= \"Esbirros (%%s)\"\nL.AUTO_TIMER_TEXTS.addscustomshort\t\t= \"Esbirros (%%s)\"\nL.AUTO_TIMER_TEXTS.roleplay\t\t= \"Diálogo\"\n\nL.AUTO_TIMER_OPTIONS.target\t\t= \"Mostrar temporizador para la duración del perjuicio de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.cast\t\t= \"Mostrar temporizador para el lanzamiento de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.castcount\t= \"Mostrar temporizador (con contador) para el lanzamiento de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.castsource\t= \"Mostrar temporizador (y quién lo lanza) para el lanzamiento de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.active\t\t= \"Mostrar temporizador para la duración de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.fades\t\t= \"Mostrar temporizador para el tiempo restante del perjuicio de $spell:%s en los jugadores (%ss)\"\nL.AUTO_TIMER_OPTIONS.ai\t\t\t= \"Mostrar temporizador inteligente para el tiempo de reutilización de $spell:%s (%ss)\"\n\nL.AUTO_TIMER_OPTIONS.cd\t\t\t= \"Mostrar temporizador para el tiempo de reutilización de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdcount\t= \"Mostrar temporizador (con contador) para el tiempo de reutilización de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdsource\t= \"Mostrar temporizador (y quién lo lanza) para el tiempo de reutilización de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdspecial\t= \"Mostrar temporizador para el tiempo de reutilización de 'Facultad especial'. (%ss)\"\n\nL.AUTO_TIMER_OPTIONS.next\t\t= \"Mostrar temporizador para el siguiente $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextcount\t= \"Mostrar temporizador (con contador) para el siguiente $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextsource\t= \"Mostrar temporizador (y quién lo lanza) para el siguiente $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextspecial\t= \"Mostrar temporizador para la siguiente 'Facultad especial'. (%ss)\"\n\nL.AUTO_TIMER_OPTIONS.var\t\t\t\t= \"Mostrar temporizador (con variación) para el tiempo de reutilización de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.varcount\t\t\t= \"Mostrar temporizador (con contador y variación) para el tiempo de reutilización de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.varnp\t\t\t\t= \"Mostrar solo el temporizador en la placa de nombre (con variación) para el tiempo de reutilización de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.varpnp\t\t\t\t= \"Mostrar solo el temporizador prioritario en la placa de nombre (con variación) para el tiempo de reutilización de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.varsource\t\t\t= \"Mostrar temporizador (con variación y quién lo lanza) para el tiempo de reutilización de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.varspecial\t\t\t= \"Mostrar temporizador (con variación) para el tiempo de reutilización de facultad especial (%ss)\"\nL.AUTO_TIMER_OPTIONS.varcombo\t\t\t= \"Mostrar temporizador (con variación) para el tiempo de reutilización de combo de facultades (%ss)\"\n\nL.AUTO_TIMER_OPTIONS.achievement\t= \"Mostrar temporizador para el logro %s (%ss)\"\nL.AUTO_TIMER_OPTIONS.stage\t\t= \"Mostrar temporizador para la siguiente fase (%ss)\"\nL.AUTO_TIMER_OPTIONS.adds\t\t= \"Mostrar temporizador para la siguiente aparición de esbirros (%ss)\"\nL.AUTO_TIMER_OPTIONS.addscustom\t= \"Mostrar temporizador para la siguiente aparición de esbirros (%ss)\"\nL.AUTO_TIMER_OPTIONS.roleplay\t= \"Mostrar temporizador para la duración del diálogo (%ss)\"\n\nL.AUTO_ICONS_OPTION_TARGETS\t\t\t= \"Poner iconos en los objetivos de $spell:%s\"\nL.AUTO_ICONS_OPTION_NPCS\t\t= \"Poner iconos en $spell:%s\"\nL.AUTO_ICONS_OPTION_CONFLICT\t\t= \" (Puede entrar en conflicto con otras opciones)\"\nL.AUTO_ARROW_OPTION_TEXT\t\t\t= \"Mostrar flecha indicadora para juntarse con los objetivos afectados por $spell:%s\"\nL.AUTO_ARROW_OPTION_TEXT2\t\t= \"Mostrar flecha indicadora para alejarse de los objetivos afectados por $spell:%s\"\nL.AUTO_ARROW_OPTION_TEXT3\t\t= \"Mostrar flecha indicadora para ir a una ubicación específica para $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.shortyell\t\t= \"Gritar cuando te afecte $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.yell\t\t= \"Gritar (con tu nombre) cuando te afecte $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.count\t= \"Gritar (con contador) cuando te afecte $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.fade\t\t= \"Gritar (con duración restante y tu nombre) cuando $spell:%s esté a punto de expirar\"\nL.AUTO_YELL_OPTION_TEXT.shortfade\t\t= \"Gritar (con duración restante) cuando $spell:%s esté a punto de expirar\"\nL.AUTO_YELL_OPTION_TEXT.iconfade\t\t= \"Gritar (con duración restante e icono) cuando $spell:%s esté a punto de expirar\"\nL.AUTO_YELL_OPTION_TEXT.position\t= \"Gritar (con posición) cuando te afecte $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.combo\t\t\t= \"Gritar (con texto personalizado) cuando te afecten $spell:%s y otro(s) hechizo(s) a la vez\"\nL.AUTO_YELL_OPTION_TEXT.repeatplayer\t= \"Gritar repetidamente (con tu nombre) cuando te afecte $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.repeaticon\t\t= \"Gritar repetidamente (con icono) cuando te afecte $spell:%s\"\nL.AUTO_YELL_ANNOUNCE_TEXT.shortyell\t\t= \"%s\"\nL.AUTO_YELL_ANNOUNCE_TEXT.yell\t\t= \"¡%s en \" .. UnitName(\"player\") .. \"!\"\nL.AUTO_YELL_ANNOUNCE_TEXT.count\t\t= \"¡%s en \" .. UnitName(\"player\") .. \"! (%%d)\"\nL.AUTO_YELL_ANNOUNCE_TEXT.fade\t\t= \"%s expirando en %%d\"\nL.AUTO_YELL_ANNOUNCE_TEXT.shortfade\t\t= \"%%d\"\nL.AUTO_YELL_ANNOUNCE_TEXT.iconfade\t\t= \"{rt%%2$d}%%1$d\"\nL.AUTO_YELL_ANNOUNCE_TEXT.position\t= \"%s %%s en {rt%%d}\"..UnitName(\"player\")..\"{rt%%d}\"\nL.AUTO_YELL_ANNOUNCE_TEXT.combo\t\t\t= \"%s y %%s\"--Spell name (from option, plus spellname given in arg)\nL.AUTO_YELL_CUSTOM_FADE\t\t\t= \"%s ha expirado\"\nL.AUTO_HUD_OPTION_TEXT\t\t\t= \"Mostrar indicador en pantalla para $spell:%s\"\nL.AUTO_HUD_OPTION_TEXT_MULTI\t\t= \"Mostrar indicadores en pantalla para varias mecánicas\"\nL.AUTO_NAMEPLATE_OPTION_TEXT\t\t= \"Mostrar auras en placas de nombres para $spell:%s\"\nL.AUTO_RANGE_OPTION_TEXT\t\t\t= \"Mostrar marco de distancia (%s m) para $spell:%s\"--string used for range so we can use things like \"5/2\" as a value for that field\nL.AUTO_RANGE_OPTION_TEXT_SHORT\t= \"Mostrar marco de distancia (%s m)\"--For when a range frame is just used for more than one thing\nL.AUTO_RRANGE_OPTION_TEXT\t\t= \"Mostrar marco de distancia inverso (%s m) para $spell:%s\"--Reverse range frame (green when players in range, red when not)\nL.AUTO_RRANGE_OPTION_TEXT_SHORT\t= \"Mostrar marco de distancia inverso (%s m)\"\nL.AUTO_INFO_FRAME_OPTION_TEXT\t= \"Mostrar marco de información para $spell:%s\"\nL.AUTO_INFO_FRAME_OPTION_TEXT2\t= \"Mostrar marco de información con una vista general del encuentro\"\nL.AUTO_READY_CHECK_OPTION_TEXT\t= \"Reproducir sonido de comprobación de banda cuando se inicie el encuentro (aunque no lo tengas como objetivo)\"\nL.AUTO_SPEEDCLEAR_OPTION_TEXT\t= \"Mostrar temporizador para el récord actual de completar %s\"\n\n--Sounds\nL.AUTO_SOUND_OPTION_TEXT\t\t\t= \"Reproducir sonido en $spell:%d\"\nL.AUTO_SOUND_OPTION_TEXT5\t\t\t= \"Cuenta atrás de audio de 5 segundos para $spell:%d\"\nL.AUTO_SOUND_OPTION_TEXT3\t\t\t= \"Cuenta atrás de audio de 3 segundos para $spell:%d\"\nL.AUTO_SOUND_OPTION_TEXT_YOU\t\t= \"Reproducir sonido en $spell:%d en ti\"\nL.AUTO_SOUND_OPTION_TEXT_SOON\t\t= \"Reproducir sonido en $spell:%d en breve\"\nL.AUTO_SOUND_OPTION_TEXT_CLOSE\t\t= \"Reproducir sonido en $spell:%d cerca de ti\"\n\n-- New special warnings\nL.MOVE_WARNING_BAR\t\t\t= \"Anuncio desplazable\"\nL.MOVE_WARNING_MESSAGE\t\t= \"Gracias por usar Deadly Boss Mods\"\nL.MOVE_SPECIAL_WARNING_BAR\t= \"Aviso especial desplazable\"\nL.MOVE_SPECIAL_WARNING_TEXT\t= \"Aviso especial\"\n\nL.HUD_INVALID_TYPE\t\t\t= \"No se ha proporcionado un tipo de indicador en pantalla válido.\"\nL.HUD_INVALID_TARGET\t\t\t= \"No se ha proporcionado un objetivo válido.\"\nL.HUD_INVALID_SELF\t\t\t= \"No puedes usarte a ti mismo como objetivo.\"\nL.HUD_INVALID_ICON\t\t\t= \"No se puede usar el tipo icono en un objetivo sin icono.\"\nL.HUD_SUCCESS\t\t\t\t= \"Indicador en pantalla realizado con éxito. Expirará en %s o al escribir '/dbm hud hide'.\"\nL.HUD_USAGE\t= {\n\t\"Uso de \"..L.DBM..\"-HudMap:\",\n\t\"-----------------\",\n\t\"/dbm hud <tipo> <objetivo> <seg>: Crea un indicador en pantalla que apunta al jugador objetivo durante el tiempo designado.\",\n\t\"Tipos válidos: arrow, dot, red, blue, green, yellow, icon (requiere un objetivo con icono de banda)\",\n\t\"Objetivos válidos: target, focus, <jugador>\",\n\t\"Duraciones válidas: cualquier número (en segundos). Si se deja en blanco, durará 20 minutos.\",\n\t\"/dbm hud hide: cancela y oculta el indicador en pantalla.\"\n}\n\nL.ARROW_MOVABLE\t\t\t\t\t= \"Flecha desplazable\"\nL.ARROW_WAY_USAGE\t\t\t\t\t= \"/dway <x> <y>: Crea una flecha que apunta a una ubicación designada mediante coordenadas locales.\"\nL.ARROW_WAY_SUCCESS\t\t\t\t= \"Para ocultar la flecha, escribe '/dbm arrow hide' o alcanza la ubicación designada.\"\nL.ARROW_ERROR_USAGE\t= {\n\t\"Uso de \"..L.DBM..\"-Arrow:\",\n\t\"-----------------\",\n\t\"/dbm arrow <x> <y>: Crea una flecha que apunta a una ubicación específica (merdiante coordenadas de mundo).\",\n\t\"/dbm arrow map <x> <y>: Crea una flecha que apunta a una ubicación específica (mediante coordenadas de zona).\",\n\t\"/dbm arrow <jugador>: Crea una flecha que apunta al jugador específico de tu grupo o banda.\",\n\t\"/dbm arrow hide: Oculta la flecha.\",\n\t\"/dbm arrow move: Permite mover la flecha.\"\n}\n\nL.SPEED_KILL_TIMER_TEXT\t= \"Superar récord\"\nL.SPEED_CLEAR_TIMER_TEXT\t= \"Récord actual\"\nL.COMBAT_RES_TIMER_TEXT\t= \"Siguiente resurrección\"\nL.TIMER_RESPAWN\t\t= \"%s reaparece\"\n\nL.LAG_CHECKING\t\t\t\t= \"Comprobando latencia de la banda...\"\nL.LAG_HEADER\t\t\t\t\t= \"Deadly Boss Mods - Resultados de latencia\"\nL.LAG_ENTRY\t\t\t\t\t= \"%s: Latencia de mundo [%d ms] / Latencia de hogar [%d ms]\"\nL.LAG_FOOTER\t\t\t\t\t= \"Sin respuesta: %s\"\n\nL.DUR_CHECKING\t\t\t\t= \"Comprobando durabilidad de la banda...\"\nL.DUR_HEADER\t\t\t\t\t= \"Deadly Boss Mods - Resultados de durabilidad\"\nL.DUR_ENTRY\t\t\t\t\t= \"%s: Durabilidad [%d%%] / Piezas rotas [%s]\"\nL.LAG_FOOTER\t\t\t\t\t= \"Sin respuesta: %s\"\n\n--LDB\nL.LDB_TOOLTIP_HELP1\t= \"Clic izquierdo para abrir \"..L.DBM..\"\"\nL.LDB_TOOLTIP_HELP2\t= \"Clic derecho para el menú de configuración\"\nL.SILENTMODE_IS\t\t= \"El modo silencioso es \"\n\nL.WORLD_BUFFS.hordeOny\t\t\t= \"Miembros de la Horda, ciudadanos de Orgrimmar, vengan y reúnanse para homenajear un hecho heroico\"\nL.WORLD_BUFFS.allianceOny\t\t= \"Ciudadanos y aliados de Ventormenta, en el día de hoy, hemos hecho historia.\"\nL.WORLD_BUFFS.hordeNef\t\t\t= \"¡NEFARIAN HA SIDO ASESINADO! Ciudadanos de Orgrimmar\"\nL.WORLD_BUFFS.allianceNef\t\t= \"¡Ciudadanos de la Alianza, el Señor de Roca Negra está muerto!\"\nL.WORLD_BUFFS.zgHeart\t\t\t= \"Ahora, solo un paso más para poder librarnos de la amenaza del Cazador de Almas\"\nL.WORLD_BUFFS.zgHeartBooty\t\t= \"¡El Dios de la Sangre, el Cazador de Almas, ha sido derrotado! ¡Ya no corremos peligro!\"\nL.WORLD_BUFFS.zgHeartYojamba\t= \"Comiencen el ritual, sirvientes. ¡Debemos desterrar el corazón de Hakkar al vacío!\"\nL.WORLD_BUFFS.rendHead\t\t\t= \"¡El falso Jefe de Guerra Rend Puño Negro ha caído!\"\n\n--Retail Globals\nL.RAID_INFO_WORLD_BOSS\t\t= \"Jefe de mundo\"\nL.SCENARIO_STAGE\t\t\t= \"Fase %d\"\nL.SPECIALIZATION\t\t\t= \"Especialización\" -- ID: 22433\n-- EJ\nL.HARD_MODE\t\t\t\t\t= \"Modo difícil\" -- 17220\nL.BOSS_YOU_DEFEATED\t\t\t= \"Has derrotado a\" -- 25559\nL.BOSS_KILL_SUBTITLE\t\t= \"ha caído\" -- 25560\n"
  },
  {
    "path": "DBM-Core/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\nif not DBM_CORE_L then DBM_CORE_L = {} end\n\nlocal L = DBM_CORE_L\n\n-- Canular du 1er Avril\nlocal dateTable = date(\"*t\")\nif dateTable.day and dateTable.month and dateTable.day == 1 and dateTable.month == 4 then\n\tL.DEADLY_BOSS_MODS\t\t\t\t\t= \"Harmless Minion Mods\"\n\tL.DBM\t\t\t\t\t\t\t\t= \"HMM\"\nend\n\nL.HOW_TO_USE_MOD\t\t\t\t\t\t= \"Bienvenue sur \" .. L.DBM .. \". Tapez /dbm help pour une liste des commandes supportées. Pour accéder aux options, tapez /dbm dans la fenêtre de discussion pour commencer la configuration. Chargez des zones spécifiques manuellement pour configurer tous les paramètres spécifiques aux boss selon vos envies. \" .. L.DBM .. \" essaiera de le faire pour vous en analysant votre spécialisation au premier lancement, mais nous savons que de toute façon certaines personnes souhaiteront activer d'autres options.\"\nL.SILENT_REMINDER\t\t\t\t\t\t= \"Rappel : \" .. L.DBM .. \" est toujours en mode silencieux.\"\n--L.NEWS_UPDATE\t\t\t\t\t\t\t= \"|h|c11ff1111News|r|h: This update is basically a re-release of 9.1.9 to clear a false malware detection on the hash of the previous file release. Read more about it |Hgarrmission:DBM:news|h|cff3588ff[here]|r|h\"\n\nL.COPY_URL_DIALOG_NEWS\t\t\t\t\t= \"Pour lire les dernières nouvelles, visitez le lien ci-dessous\"\n\nL.LOAD_MOD_ERROR\t\t\t\t\t\t= \"Erreur lors du chargement des modules de %s: %s\"\nL.LOAD_MOD_SUCCESS\t\t\t\t\t\t= \"Modules '%s' chargés. Pour plus d'options, comme des sons d'alertes personnalisés et des notes d'avertissement personnalisées, tapez /dbm.\"\n--L.LOAD_MOD_COMBAT\t\t\t\t\t\t= \"Chargement de '%s' reporté jusqu'à la fin du combat\"\nL.LOAD_GUI_ERROR\t\t\t\t\t\t= \"Impossible de charger l'interface: %s\"\n--L.LOAD_GUI_COMBAT\t\t\t\t\t\t= \"L'interface ne peut pas se charger initialement en combat. Elle sera chargée après le combat. Une fois l'interface chargée, vous pourrez l'ouvrir en combat.\"\nL.BAD_LOAD\t\t\t\t\t\t\t\t= L.DBM .. \" a détecté une erreur de chargement du module de l'instance car vous êtes en combat. Dès que vous sortez de combat veuillez entrer /console reloadui le plus vite possible.\"\nL.LOAD_MOD_VER_MISMATCH\t\t\t\t\t= \"%s n'a pas pu être chargé car votre DBM-Core ne remplit pas les conditions. Il vous faut une version plus récente.\"\nL.LOAD_MOD_EXP_MISMATCH\t\t\t\t\t= \"%s n'a pas pu être chargé car il est conçu pour une extension de WoW qui n'est pas actuellement disponible. Lorsque l'extension sera disponible, ce module fonctionnera automatiquement.\"\nL.LOAD_MOD_TOC_MISMATCH\t\t\t\t\t= \"%s n'a pas pu être chargé car il est conçu pour une version de WoW (%s) qui n'est pas actuellement disponible. Lorsque le patch sera disponible, ce module fonctionnera automatiquement.\"\nL.LOAD_MOD_DISABLED\t\t\t\t\t\t= \"%s est installé mais actuellement désactivé. Ce module ne sera pas chargé à moins que vous ne l'activiez.\"\nL.LOAD_MOD_DISABLED_PLURAL\t\t\t\t= \"%s sont installés mais actuellement désactivés. Ces modules ne seront pas chargés à moins que vous ne les activiez.\"\n\nL.COPY_URL_DIALOG\t\t\t\t\t\t= \"Copier l'URL\"\n\nL.NO_RANGE\t\t\t\t\t\t\t\t= \"Le radar de portée ne peut pas être utilisé dans les instances sans support de carte (téléchargez un patch de carte ou faites avec). Le cadre de portée texte hérité est utilisé à la place.\"\nL.NO_ARROW\t\t\t\t\t\t\t\t= \"La flèche ne peut pas être utilisée dans les instances sans support de carte (téléchargez un patch de carte ou faites avec).\"\nL.NO_HUD\t\t\t\t\t\t\t\t= \"La HUDMap ne peut pas être utilisée dans les instances sans support de carte (téléchargez un patch de carte ou faites avec).\"\n\n--L.DYNAMIC_DIFFICULTY_CLUMP\t\t\t\t= L.DBM .. \" a désactivé la vérification du nombre de joueurs à portée sur ce combat pour cause de manque d'information sur le nombre de joueurs requis regroupés pour votre taille de raid.\"\n--L.DYNAMIC_ADD_COUNT\t\t\t\t\t\t= L.DBM .. \" a désactivé les alertes de décompte d'adds en vie sur ce combat pour cause de manque d'information du nombre d'adds apparaissant pour votre taille de raid.\"\n--L.DYNAMIC_MULTIPLE\t\t\t\t\t\t= L.DBM .. \" a désactivé plusieurs fonctionnalités sur ce combat pour cause de manque d'informations sur certains mécanismes pour votre taille de raid.\"\n\n--L.LOOT_SPEC_REMINDER\t\t\t\t\t= \"Votre spécialisation actuelle est %s. Votre choix de butin actuel est %s.\"\n\nL.BIGWIGS_ICON_CONFLICT\t\t\t\t\t= L.DBM .. \" a détecté que vous avez activé les icônes de raid dans BigWigs et \" .. L.DBM .. \". Veuillez désactiver les icônes dans l'un des deux pour éviter les conflits.\"\n\nL.MOD_AVAILABLE\t\t\t\t\t\t\t= \"%s est disponible pour cette zone. Vous pouvez le télécharger sur \" .. L.UPDATEREMINDER_URL\n\nL.COMBAT_STARTED\t\t\t\t\t\t= \"%s engagé. Bonne chance et amusez-vous bien ! :)\"\nL.COMBAT_STARTED_IN_PROGRESS\t\t\t= \"Vous êtes engagé dans un combat en cours contre %s. Bonne chance et amusez-vous bien ! :)\"\nL.GUILD_COMBAT_STARTED\t\t\t\t\t= \"%s a été engagé par le groupe de guilde de %s.\"\n--L.SCENARIO_STARTED\t\t\t\t\t\t= \"%s a commencé. Bonne chance et amusez-vous bien ! :)\"\n--L.SCENARIO_STARTED_IN_PROGRESS\t\t\t= \"Vous avez rejoint %s, un scénario déjà en cours. Bonne chance et amusez-vous bien ! :)\"\nL.BOSS_DOWN\t\t\t\t\t\t\t\t= \"%s vaincu après %s !\"\nL.BOSS_DOWN_I\t\t\t\t\t\t\t= \"%s vaincu ! Vous avez %d victoires au total.\"\nL.BOSS_DOWN_L\t\t\t\t\t\t\t= \"%s vaincu après %s ! Votre dernier temps était de %s et votre record de %s. Vous avez %d victoires au total.\"\nL.BOSS_DOWN_NR\t\t\t\t\t\t\t= \"%s vaincu après %s ! C'est un nouveau record ! (L'ancien record était de %s). Vous avez %d victoires au total.\"\nL.RAID_DOWN\t\t\t\t\t\t\t\t= \"%s terminé après %s !\"\nL.RAID_DOWN_L\t\t\t\t\t\t\t= \"%s terminé après %s ! Votre temps le plus rapide était de %s.\"\nL.RAID_DOWN_NR\t\t\t\t\t\t\t= \"%s terminé après %s ! C'est un nouveau record ! (L'ancien record était de %s).\"\nL.GUILD_BOSS_DOWN\t\t\t\t\t\t= \"%s a été vaincu par le groupe de guilde de %s après %s !\"\n--L.SCENARIO_COMPLETE\t\t\t\t\t\t= \"%s terminé après %s !\"\n--L.SCENARIO_COMPLETE_I\t\t\t\t\t= \"%s terminé ! Vous avez %d réussites au total.\"\n--L.SCENARIO_COMPLETE_L\t\t\t\t\t= \"%s terminé après %s ! Votre dernière réussite a pris %s et la plus rapide %s. Vous avez %d réussites au total.\"\n--L.SCENARIO_COMPLETE_NR\t\t\t\t\t= \"%s terminé après %s ! C'est un nouveau record ! (L'ancien record était de %s). Vous avez %d réussites au total.\"\nL.COMBAT_ENDED_AT\t\t\t\t\t\t= \"Combat face à %s (%s) terminé après %s.\"\nL.COMBAT_ENDED_AT_LONG\t\t\t\t\t= \"Combat face à %s (%s) terminé après %s. Vous cumulez un total de %d wipe(s) dans cette difficulté.\"\nL.GUILD_COMBAT_ENDED_AT\t\t\t\t\t= \"Le groupe de guilde de %s a wipe sur %s (%s) après %s.\"\n--L.SCENARIO_ENDED_AT\t\t\t\t\t\t= \"%s terminé après %s.\"\n--L.SCENARIO_ENDED_AT_LONG\t\t\t\t= \"%s terminé après %s. Vous avez %d échecs au total dans cette difficulté.\"\nL.COMBAT_STATE_RECOVERED\t\t\t\t= \"%s a été engagé il y a %s, récupération des délais...\"\nL.TRANSCRIPTOR_LOG_START\t\t\t\t= \"Début du log de Transcriptor.\"\nL.TRANSCRIPTOR_LOG_END\t\t\t\t\t= \"Fin du log de Transcriptor.\"\n\nL.MOVIE_SKIPPED\t\t\t\t\t\t\t= L.DBM .. \" a tenté de passer une cinématique automatiquement.\"\n--L.BONUS_SKIPPED \t\t\t\t\t\t= L.DBM .. \" a automatiquement fermé la fenêtre de butin bonus. Si vous avez besoin de la récupérer, tapez /dbmbonusroll dans les 3 minutes.\"\n\nL.AFK_WARNING\t\t\t\t\t\t\t= \"Vous êtes AFK et en combat (santé restante %d%%), alerte sonore déclenchée. Si vous n'êtes pas AFK, enlevez votre statut AFK ou désactivez cette option dans 'Fonctionnalités supplémentaires'.\"\n\nL.COMBAT_STARTED_AI_TIMER\t\t\t\t= \"Mon CPU est un processeur à réseau neuronal ; un ordinateur qui apprend. (Ce combat utilisera la nouvelle fonctionnalité d'IA pour générer des timers approximatifs)\"\n\nL.PROFILE_NOT_FOUND\t\t\t\t\t\t= \"<\" .. L.DBM .. \"> Votre profil actuel est corrompu. \" .. L.DBM .. \" va charger le profil 'Default'.\"\nL.PROFILE_CREATED\t\t\t\t\t\t= \"Profil '%s' créé.\"\nL.PROFILE_CREATE_ERROR\t\t\t\t\t= \"Échec de la création du profil. Nom de profil invalide.\"\nL.PROFILE_CREATE_ERROR_D\t\t\t\t= \"Échec de la création du profil. Le profil '%s' existe déjà.\"\nL.PROFILE_APPLIED\t\t\t\t\t\t= \"Profil '%s' appliqué.\"\nL.PROFILE_APPLY_ERROR\t\t\t\t\t= \"Échec de l'application du profil. Le profil '%s' n'existe pas.\"\nL.PROFILE_COPIED\t\t\t\t\t\t= \"Profil '%s' copié.\"\nL.PROFILE_COPY_ERROR\t\t\t\t\t= \"Échec de la copie du profil. Le profil '%s' n'existe pas.\"\nL.PROFILE_COPY_ERROR_SELF\t\t\t\t= \"Impossible de copier un profil sur lui-même.\"\nL.PROFILE_DELETED\t\t\t\t\t\t= \"Profil '%s' supprimé. Le profil 'Default' sera appliqué.\"\nL.PROFILE_DELETE_ERROR\t\t\t\t\t= \"Échec de la suppression du profil. Le profil '%s' n'existe pas.\"\nL.PROFILE_CANNOT_DELETE\t\t\t\t\t= \"Impossible de supprimer le profil 'Default'.\"\nL.MPROFILE_COPY_SUCCESS\t\t\t\t\t= \"Les paramètres de module de %s (spé %d) ont été copiés.\"\nL.MPROFILE_COPY_SELF_ERROR\t\t\t\t= \"Impossible de copier les paramètres du personnage sur lui-même.\"\nL.MPROFILE_COPY_S_ERROR\t\t\t\t\t= \"La source est corrompue. Les paramètres n'ont pas été copiés ou seulement partiellement. La copie a échoué.\"\nL.MPROFILE_COPYS_SUCCESS\t\t\t\t= \"Les paramètres de son ou de note du module de %s (spé %d) ont été copiés.\"\nL.MPROFILE_COPYS_SELF_ERROR\t\t\t\t= \"Impossible de copier les paramètres de son ou de note du personnage sur eux-mêmes.\"\nL.MPROFILE_COPYS_S_ERROR\t\t\t\t= \"La source est corrompue. Les paramètres de son ou de note n'ont pas été copiés ou seulement partiellement. La copie a échoué.\"\nL.MPROFILE_DELETE_SUCCESS\t\t\t\t= \"Les paramètres de module de %s (spé %d) ont été supprimés.\"\nL.MPROFILE_DELETE_SELF_ERROR\t\t\t= \"Impossible de supprimer les paramètres de module actuellement utilisés.\"\nL.MPROFILE_DELETE_S_ERROR\t\t\t\t= \"La source est corrompue. Les paramètres n'ont pas été supprimés ou seulement partiellement. La suppression a échoué.\"\n\nL.NOTE_SHARE_SUCCESS\t\t\t\t\t= \"%s a partagé sa note pour %s.\"\n-- L.NOTE_SHARE_LINK\t\t\t\t\t\t= \"Cliquez ici pour ouvrir la note\"\nL.NOTE_SHARE_FAIL\t\t\t\t\t\t= \"%s a tenté de partager une note avec vous pour %s. Cependant, le module associé à cette capacité n'est pas installé ou chargé. Si vous avez besoin de cette note, assurez-vous de charger le module pour lequel ils partagent des notes et demandez-leur de la partager à nouveau.\"\n\nL.NOTEHEADER\t\t\t\t\t\t\t= \"Entrez votre texte de note ici pour %s. Entourer le nom d'un joueur avec >< affichera la couleur de sa classe. Pour les alertes avec des décomptes multiples, séparez les notes par '/'.\"\nL.NOTEFOOTER\t\t\t\t\t\t\t= \"Appuyez sur 'OK' pour accepter les changements ou 'Annuler' pour les refuser.\"\nL.NOTESHAREDHEADER\t\t\t\t\t\t= \"%s a partagé la note ci-dessous pour %s. Si vous l'acceptez, elle écrasera votre note existante.\"\nL.NOTESHARED\t\t\t\t\t\t\t= \"Votre note a été envoyée au groupe.\"\nL.NOTESHAREERRORSOLO\t\t\t\t\t= \"Vous vous sentez seul(e) ? Vous ne devriez pas vous envoyer des notes à vous-même.\"\nL.NOTESHAREERRORBLANK\t\t\t\t\t= \"Impossible de partager des notes vides.\"\nL.NOTESHAREERRORGROUPFINDER\t\t\t\t= \"Les notes ne peuvent pas être partagées en BG, LFR ou LFG.\"\nL.NOTESHAREERRORALREADYOPEN\t\t\t\t= \"Impossible d'ouvrir un lien de note partagée lorsque l'éditeur de note est déjà ouvert, pour vous empêcher de perdre la note que vous êtes en train de modifier.\"\n\nL.ALLMOD_DEFAULT_LOADED\t\t\t\t\t= \"Les options par défaut pour tous les modules de cette instance ont été chargées.\"\nL.ALLMOD_STATS_RESETED\t\t\t\t\t= \"Toutes les statistiques des modules ont été réinitialisées.\"\nL.MOD_DEFAULT_LOADED\t\t\t\t\t= \"Les options par défaut pour ce combat ont été chargées.\"\n\nL.WORLDBOSS_ENGAGED\t\t\t\t\t\t= \"%s a probablement été engagé sur votre royaume à %s%% de vie. (Envoyé par %s)\"\nL.WORLDBOSS_DEFEATED\t\t\t\t\t= \"%s a probablement été vaincu sur votre royaume (Envoyé par %s).\"\nL.WORLDBUFF_STARTED\t\t\t\t\t\t= \"Le buff %s a commencé sur votre royaume pour la faction %s (Envoyé par %s).\"\n\nL.TIMER_FORMAT_SECS\t\t\t\t\t\t= \"%.2f |4seconde:secondes;\"\nL.TIMER_FORMAT_MINS\t\t\t\t\t\t= \"%d |4minute:minutes;\"\nL.TIMER_FORMAT\t\t\t\t\t\t\t= \"%d |4minute:minutes; et %.2f |4seconde:secondes;\"\n\nL.MIN\t\t\t\t\t\t\t\t\t= \"min\"\nL.MIN_FMT\t\t\t\t\t\t\t\t= \"%d min\"\nL.SEC\t\t\t\t\t\t\t\t\t= \"sec\"\nL.SEC_FMT\t\t\t\t\t\t\t\t= \"%s sec\"\n\nL.GENERIC_WARNING_OTHERS\t\t\t\t= \"et un autre\"\nL.GENERIC_WARNING_OTHERS2\t\t\t\t= \"et %d autres\"\nL.GENERIC_WARNING_BERSERK\t\t\t\t= \"Enrage dans %s %s\"\nL.GENERIC_TIMER_BERSERK\t\t\t\t\t= \"Enrage\"\nL.OPTION_TIMER_BERSERK\t\t\t\t\t= \"Afficher le chrono pour $spell:26662\"\nL.GENERIC_TIMER_COMBAT\t\t\t\t\t= \"Début du combat\"\nL.OPTION_TIMER_COMBAT\t\t\t\t\t= \"Afficher le chrono pour le début du combat\"\nL.BAD\t\t\t\t\t\t\t\t\t= \"Mauvais\"\nL.OPTION_HEALTH_FRAME\t\t\t\t\t= \"Afficher la fenêtre de vie du Boss\"\n\nL.OPTION_CATEGORY_TIMERS\t\t\t\t= \"Barres\"\nL.OPTION_CATEGORY_WARNINGS\t\t\t\t= \"Annonces générales\"\nL.OPTION_CATEGORY_WARNINGS_YOU\t\t\t= \"Annonces personnelles\"\nL.OPTION_CATEGORY_WARNINGS_OTHER\t\t= \"Annonces de cible\"\nL.OPTION_CATEGORY_WARNINGS_ROLE\t\t\t= \"Annonces de rôle\"\nL.OPTION_CATEGORY_SPECWARNINGS\t\t\t= \"Annonces spéciales\"\n\nL.OPTION_CATEGORY_SOUNDS\t\t\t\t= \"Sons\"\nL.OPTION_CATEGORY_DROPDOWNS\t\t\t\t= \"Menus déroulants\"\nL.OPTION_CATEGORY_YELLS\t\t\t\t\t= \"Cris\"\nL.OPTION_CATEGORY_NAMEPLATES\t\t\t= \"Barres de nom\"\nL.OPTION_CATEGORY_ICONS\t\t\t\t\t= \"Icônes\"\n\nL.AUTO_RESPONDED\t\t\t\t\t\t= \"Répondu automatiquement.\"\nL.STATUS_WHISPER\t\t\t\t\t\t= \"%s: %s, %d/%d personnes en vie\"\nL.AUTO_RESPOND_WHISPER\t\t\t\t\t= \"%s est occupé à combattre %s (%s, %d/%d personnes en vie)\"\nL.WHISPER_COMBAT_END_KILL\t\t\t\t= \"%s a vaincu %s !\"\nL.WHISPER_COMBAT_END_KILL_STATS\t\t\t= \"%s a vaincu %s ! Ils ont un total de %d victoires.\"\nL.WHISPER_COMBAT_END_WIPE_AT\t\t\t= \"%s a wipe sur %s à %s.\"\nL.WHISPER_COMBAT_END_WIPE_STATS_AT\t\t= \"%s a wipe sur %s à %s. Ils ont un total de %d wipes dans cette difficulté.\"\n--L.AUTO_RESPOND_WHISPER_SCENARIO\t\t\t= \"%s est occupé dans %s (%d/%d personnes en vie).\"\n--L.WHISPER_SCENARIO_END_KILL\t\t\t\t= \"%s a terminé %s !\"\n--L.WHISPER_SCENARIO_END_KILL_STATS\t\t= \"%s a terminé %s ! Ils ont un total de %d victoires.\"\n--L.WHISPER_SCENARIO_END_WIPE\t\t\t\t= \"%s n'a pas terminé %s.\"\n--L.WHISPER_SCENARIO_END_WIPE_STATS\t\t= \"%s n'a pas terminé %s. Ils ont un total de %d échecs dans cette difficulté.\"\n\nL.VERSIONCHECK_HEADER\t\t\t\t\t= \"Boss Mod - Versions\"\nL.VERSIONCHECK_ENTRY\t\t\t\t\t= \"%s: %s (%s) %s\"\nL.VERSIONCHECK_ENTRY_TWO\t\t\t\t= \"%s: %s (%s) & %s (%s)\"\nL.VERSIONCHECK_ENTRY_NO_DBM\t\t\t\t= \"%s: Aucun boss mod installé\"\nL.VERSIONCHECK_FOOTER\t\t\t\t\t= \"%d joueur(s) trouvé(s) avec \" .. L.DBM .. \" & %d joueur(s) avec Bigwigs.\"\nL.VERSIONCHECK_OUTDATED\t\t\t\t\t= \"%d joueur(s) suivant(s) ont une version de boss mod obsolète : %s\"\nL.YOUR_VERSION_OUTDATED\t\t\t\t\t= \"Votre version de \" .. L.DEADLY_BOSS_MODS .. \" est obsolète. Veuillez visiter \" .. L.UPDATEREMINDER_URL .. \" pour obtenir la dernière version.\"\nL.VOICE_PACK_OUTDATED\t\t\t\t\t= \"Le pack de voix \" .. L.DBM .. \" que vous avez sélectionné manque de certains sons supportés par \" .. L.DBM .. \". Certains sons d'avertissement utiliseront les sons par défaut. Veuillez télécharger une version plus récente du pack de voix ou contacter son auteur pour une mise à jour qui contienne les sons manquants.\"\nL.VOICE_MISSING\t\t\t\t\t\t\t= \"Vous avez sélectionné un pack de voix \" .. L.DBM .. \" qui n'a pas pu être trouvé. Si c'est une erreur, assurez-vous que votre pack de voix est correctement installé et activé dans les addons.\"\nL.VOICE_DISABLED\t\t\t\t\t\t= \"Vous avez actuellement au moins un pack de voix \" .. L.DBM .. \" installé mais aucun n'est activé. Si vous avez l'intention d'utiliser un pack de voix, assurez-vous qu'il est choisi dans 'Alertes vocales', sinon désinstallez les packs de voix non utilisés pour masquer ce message.\"\nL.VOICE_COUNT_MISSING\t\t\t\t\t= \"La voix de décompte %d est réglée sur un pack de voix/décompte qui n'a pas pu être trouvé. Elle a été réinitialisée au paramètre par défaut : %s.\"\n\nL.UPDATEREMINDER_HEADER\t\t\t\t\t= \"Votre version de \"..L.DEADLY_BOSS_MODS..\" est obsolète.\\n La version %s (%s) est disponible au téléchargement ici : \" .. L.UPDATEREMINDER_URL\nL.UPDATEREMINDER_FOOTER\t\t\t\t\t= \"Appuyez sur \" .. (IsMacClient() and \"Cmd-C\" or \"Ctrl-C\")  ..  \" pour copier le lien de téléchargement dans votre presse-papiers.\"\nL.UPDATEREMINDER_FOOTER_GENERIC\t\t\t= \"Appuyez sur \" .. (IsMacClient() and \"Cmd-C\" or \"Ctrl-C\")  ..  \" pour copier le lien dans votre presse-papiers.\"\nL.UPDATEREMINDER_DISABLE\t\t\t\t= \"AVERTISSEMENT : Votre version de \" .. L.DEADLY_BOSS_MODS.. \" étant obsolète et incompatible avec les versions plus récentes de DBM, elle a été désactivée de force et ne pourra pas être utilisée avant d'être mise à jour. Ceci afin de garantir que des modules incompatibles ne causent pas une mauvaise expérience de jeu pour vous ou les membres de votre groupe.\"\nL.UPDATEREMINDER_DISABLETEST\t\t\t= \"AVERTISSEMENT : Votre version de \" .. L.DEADLY_BOSS_MODS.. \" étant obsolète et s'agissant d'un royaume de test/bêta, elle a été désactivée de force et ne pourra pas être utilisée avant d'être mise à jour. Ceci afin de garantir que des modules obsolètes ne sont pas utilisés pour générer des retours de test.\"\nL.UPDATEREMINDER_HOTFIX\t\t\t\t\t= \"La version de \".. L.DBM..\" que vous utilisez a des problèmes connus lors de ce combat de boss qui sont corrigés si vous mettez à jour vers la dernière version.\"\nL.UPDATEREMINDER_HOTFIX_ALPHA\t\t\t= \"La version de \".. L.DBM..\" que vous utilisez a des problèmes connus lors de ce combat de boss qui sont corrigés dans une prochaine version (ou la dernière version alpha).\"\nL.UPDATEREMINDER_MAJORPATCH\t\t\t\t= \"AVERTISSEMENT : Votre version de \"..L.DEADLY_BOSS_MODS..\" étant obsolète, \"..L.DBM..\" a été désactivé jusqu'à sa mise à jour, car il s'agit d'un patch de jeu majeur. Ceci afin de garantir que du code ancien et incompatible ne cause pas une mauvaise expérience de jeu pour vous ou les membres de votre groupe. Assurez-vous de télécharger une version plus récente depuis Curse, Wago, WoWI ou la page des versions de GitHub dès que possible.\"\nL.UPDATE_REQUIRES_RELAUNCH\t\t\t\t= \"ATTENTION : Cette mise à jour de \"..L.DBM..\" ne fonctionnera pas correctement si vous ne redémarrez pas complètement votre client de jeu. Cette mise à jour contient de nouveaux fichiers ou des changements de fichier .toc qui ne peuvent pas être chargés via un /reload. Vous pourriez rencontrer des fonctionnalités défaillantes ou des erreurs si vous continuez sans redémarrer le client.\"\nL.OUT_OF_DATE_NAG\t\t\t\t\t\t= \"Votre version de \"..L.DBM..\" est obsolète et ce module de combat spécifique a des fonctionnalités plus récentes ou des corrections de bugs. Il est recommandé de mettre à jour pour ce combat afin d'améliorer votre expérience.\"\n\nL.MOVABLE_BAR\t\t\t\t\t\t\t= \"Déplacez-moi !\"\n\nL.PIZZA_SYNC_INFO\t\t\t\t\t\t= \"|Hplayer:%1$s|h[%1$s]|h vous a envoyé un timer \"..L.DBM..\": '%2$s'\\n|HDBM:cancel:%2$s:nil|h|cff3588ff[Annuler ce timer]|r|h  |HDBM:ignore:%2$s:%1$s|h|cff3588ff[Ignorer les timers de %1$s]|r|h\"\nL.PIZZA_CONFIRM_IGNORE\t\t\t\t\t= \"Voulez-vous vraiment ignorer les timers \"..L.DBM..\" de %s pour cette session ?\"\nL.PIZZA_ERROR_USAGE\t\t\t\t\t\t= \"Utilisation : /dbm [broadcast] timer <temps> <texte>\"\n\nL.MINIMAP_TOOLTIP_HEADER\t\t\t\t= L.DEADLY_BOSS_MODS\nL.MINIMAP_TOOLTIP_FOOTER\t\t\t\t= \"Glisser pour déplacer\"\n\nL.RANGECHECK_HEADER\t\t\t\t\t\t= \"Vérification de portée (%d m)\"\nL.RANGECHECK_HEADERT\t\t\t\t\t= \"Vérification de portée (%dm-%dP)\"\nL.RANGECHECK_RHEADER\t\t\t\t\t= \"Vérification de portée inversée (%dm)\"\nL.RANGECHECK_RHEADERT\t\t\t\t\t= \"Vérification de portée inversée (%dm-%dP)\"\nL.RANGECHECK_SETRANGE\t\t\t\t\t= \"Définir la portée\"\nL.RANGECHECK_SETTHRESHOLD\t\t\t\t= \"Définir le seuil de joueurs\"\nL.RANGECHECK_SOUNDS\t\t\t\t\t\t= \"Sons\"\nL.RANGECHECK_SOUND_OPTION_1\t\t\t\t= \"Son quand un joueur est à portée\"\nL.RANGECHECK_SOUND_OPTION_2\t\t\t\t= \"Son quand plus d'un joueur est à portée\"\nL.RANGECHECK_SOUND_0\t\t\t\t\t= \"Aucun son\"\nL.RANGECHECK_SOUND_1\t\t\t\t\t= \"Son par défaut\"\nL.RANGECHECK_SOUND_2\t\t\t\t\t= \"Bip agaçant\"\nL.RANGECHECK_SETRANGE_TO\t\t\t\t= \"%d m\"\nL.RANGECHECK_LOCK\t\t\t\t\t\t= \"Verrouiller le cadre\"\nL.RANGECHECK_OPTION_FRAMES\t\t\t\t= \"Cadres\"\nL.RANGECHECK_OPTION_RADAR\t\t\t\t= \"Afficher le cadre du radar\"\nL.RANGECHECK_OPTION_TEXT\t\t\t\t= \"Afficher le cadre textuel\"\nL.RANGECHECK_OPTION_BOTH\t\t\t\t= \"Afficher les deux cadres\"\nL.RANGECHECK_OPTION_SPEED\t\t\t\t= \"Taux de mise à jour (Rechargement requis)\"\nL.RANGECHECK_OPTION_SLOW\t\t\t\t= \"Lent (CPU le plus lent)\"\nL.RANGECHECK_OPTION_AVERAGE\t\t\t\t= \"Moyen\"\nL.RANGECHECK_OPTION_FAST\t\t\t\t= \"Rapide (le plus en temps réel)\"\nL.RANGERADAR_HEADER\t\t\t\t\t\t= \"Portée: %d m\"\nL.RANGERADAR_RHEADER\t\t\t\t\t= \"P-Inv:%d Joueurs:%d\"\nL.RANGERADAR_BOSS_HEADER\t\t\t\t= \"Portée boss (%d m)\"\nL.RANGERADAR_IN_RANGE_TEXT\t\t\t\t= \"%d à portée (%0.1f m)\"\nL.RANGECHECK_IN_RANGE_TEXT\t\t\t\t= \"%d à portée\"\nL.RANGERADAR_IN_RANGE_TEXTONE\t\t\t= \"%s (%0.1f m)\"\n\nL.LOCK_FRAME\t\t\t\t\t\t\t= \"Cadre verrouillé\"\nL.INFOFRAME_SHOW_SELF\t\t\t\t\t= \"Toujours afficher votre puissance\"\nL.INFOFRAME_SETLINES\t\t\t\t\t= \"Définir le nombre max de lignes\"\nL.INFOFRAME_SETCOLS\t\t\t\t\t\t= \"Définir le nombre max de colonnes\"\nL.INFOFRAME_LINESDEFAULT\t\t\t\t= \"Défini par le module\"\nL.INFOFRAME_LINES_TO\t\t\t\t\t= \"%d lignes\"\nL.INFOFRAME_COLS_TO\t\t\t\t\t\t= \"%d colonnes\"\nL.INFOFRAME_POWER\t\t\t\t\t\t= \"Puissance\"\nL.INFOFRAME_AGGRO\t\t\t\t\t\t= \"Aggro\"\nL.INFOFRAME_MAIN\t\t\t\t\t\t= \"Principale :\"\nL.INFOFRAME_ALT\t\t\t\t\t\t\t= \"Alt :\"\n\nL.LFG_INVITE\t\t\t\t\t\t\t= \"Invitation LFG\"\n\nL.SLASHCMD_HELP\t\t\t\t\t\t\t= {\n\t\"Commandes slash disponibles :\",\n\t\"-----------------\",\n\t\"/dbm unlock: Affiche une barre de statut de timer déplaçable (alias : move).\",\n\t\"/range <nombre> ou /distance <nombre>: Affiche le cadre de portée. /rrange ou /rdistance pour inverser les couleurs.\",\n\t\"/dbm timer: Lance un timer \" .. L.DBM .. \" personnalisé, voir '/dbm timer' pour les détails.\",\n\t\"/dbm arrow: Affiche la flèche \" .. L.DBM .. \", voir '/dbm arrow help' pour les détails.\",\n\t\"/dbm help2: Affiche les commandes slash de gestion de raid.\"\n}\nL.SLASHCMD_HELP2\t\t\t\t\t\t= {\n\t\"Commandes slash disponibles :\",\n\t\"-----------------\",\n\t\"/dbm pull <sec>: Envoie un timer de pull de <sec> secondes au raid (requiert d'être promu, alias : pull).\",\n\t\"/dbm break <min>: Envoie un timer de pause de <min> minutes au raid (requiert d'être promu, alias : break).\",\n\t\"/dbm version: Effectue une vérification de version des boss mods (alias : ver).\",\n\t\"/dbm version2: Effectue une vérification de version des boss mods qui chuchote également aux utilisateurs obsolètes (alias : ver2).\",\n\t\"/dbm lockout: Demande aux membres du raid leurs verrouillages d'instance actuels (alias : lockouts, ids) (requiert d'être promu).\",\n\t\"/dbm lag: Effectue une vérification de latence à l'échelle du raid.\",\n\t\"/dbm durability: Effectue une vérification de durabilité à l'échelle du raid.\"\n}\nL.TIMER_USAGE\t\t\t\t\t\t\t= {\n\t\"Commandes de timer \" .. L.DBM .. \" :\",\n\t\"-----------------\",\n\t\"/dbm timer <sec> <texte>: Lance un timer de <sec> secondes avec votre <texte>.\",\n\t\"/dbm ltimer <sec> <texte>: Lance un timer qui tourne automatiquement en boucle jusqu'à son annulation.\",\n\t\"/dbm broadcast timer <x> <texte>: Diffuse un timer DBM de <x> secondes avec le nom <texte> au raid (requiert le statut de chef/promu).\",\n\t\"('broadcast' devant 'timer' ou 'ltimer' le partage également avec le raid si vous êtes chef/promu)\",\n\t\"/dbm timer endloop: Arrête tout ltimer en boucle.\",\n\t\"/dbm break <min>: Lance un timer de pause de <min> minutes. Donne à tous les membres du raid avec DBM un timer de pause (requiert le statut de chef/promu).\"\n}\n\nL.ERROR_NO_PERMISSION\t\t\t\t\t= \"Vous n'avez pas la permission requise pour faire cela.\"\nL.TIME_TOO_SHORT\t\t\t\t\t\t= \"Le timer de pull doit être supérieur à 3 secondes.\"\n\nL.BOSSHEALTH_HIDE_FRAME\t\t\t\t\t= \"Fermer le cadre de vie\"\n\nL.BREAK_USAGE\t\t\t\t\t\t\t= \"Le timer de pause ne peut pas dépasser 60 minutes. Assurez-vous d'entrer le temps en minutes et non en secondes.\"\nL.BREAK_START\t\t\t\t\t\t\t= \"La pause commence maintenant -- vous avez %s ! (Envoyé par %s)\"\nL.BREAK_MIN\t\t\t\t\t\t\t\t= \"La pause se termine dans %s minute(s) !\"\nL.BREAK_SEC\t\t\t\t\t\t\t\t= \"La pause se termine dans %s secondes !\"\nL.TIMER_BREAK\t\t\t\t\t\t\t= \"C'est la pause !\"\nL.ANNOUNCE_BREAK_OVER\t\t\t\t\t= \"La pause est terminée à %s\"\n\nL.TIMER_PULL\t\t\t\t\t\t\t= \"Pull dans\"\nL.ANNOUNCE_PULL_MODE\t\t\t\t\t= \"Mode de pull : %s\"\nL.ANNOUNCE_PULL\t\t\t\t\t\t\t= \"Pull dans %d sec. (Envoyé par %s)\"\nL.ANNOUNCE_PULL_NOW\t\t\t\t\t\t= \"Pull maintenant !\"\nL.ANNOUNCE_PULL_TARGET\t\t\t\t\t= \"Pull de %s dans %d sec. (Envoyé par %s)\"\nL.ANNOUNCE_PULL_NOW_TARGET\t\t\t\t= \"Pull de %s maintenant !\"\nL.GEAR_WARNING\t\t\t\t\t\t\t= \"Attention : Vérifiez votre équipement. Votre ilvl équipé est %d plus bas que l'ilvl de votre sac.\"\nL.GEAR_WARNING_WEAPON\t\t\t\t\t= \"Attention : Vérifiez si votre arme est correctement équipée.\"\nL.GEAR_FISHING_POLE\t\t\t\t\t\t= \"Canne à pêche\"\n\nL.ACHIEVEMENT_TIMER_SPEED_KILL\t\t\t= \"Kill rapide\"\n\nL.AUTO_ANNOUNCE_TEXTS.you\t\t\t\t= \"%s sur VOUS\"\nL.AUTO_ANNOUNCE_TEXTS.target\t\t\t= \"%s sur >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetdistance\t= \"%s sur >%%s< (%%d m)\"\nL.AUTO_ANNOUNCE_TEXTS.targetsource\t\t= \">%%s< lance %s sur >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetcount\t\t= \"%s (%%s) sur >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetcountdistance\t\t= \"%s (%%s) sur >%%s< (%%d m)\"\nL.AUTO_ANNOUNCE_TEXTS.spell\t\t\t\t= \"%s\"\nL.AUTO_ANNOUNCE_TEXTS.incoming\t\t\t= \"Affaiblissement %s imminent\"\nL.AUTO_ANNOUNCE_TEXTS.incomingcount\t\t= \"Affaiblissement %s imminent (%%s)\"\nL.AUTO_ANNOUNCE_TEXTS.ends\t\t\t\t= \"%s terminé\"\nL.AUTO_ANNOUNCE_TEXTS.endtarget\t\t\t= \"%s terminé : >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.fades\t\t\t\t= \"%s dissipé\"\nL.AUTO_ANNOUNCE_TEXTS.addsleft\t\t\t= \"%s restant : %%d\"\nL.AUTO_ANNOUNCE_TEXTS.cast\t\t\t\t= \"Incantation de %s : %.1f sec\"\nL.AUTO_ANNOUNCE_TEXTS.soon\t\t\t\t= \"%s imminent\"\nL.AUTO_ANNOUNCE_TEXTS.sooncount\t\t\t= \"%s (%%s) imminent\"\nL.AUTO_ANNOUNCE_TEXTS.countdown\t\t\t= \"%s dans %%d s\"\nL.AUTO_ANNOUNCE_TEXTS.prewarn\t\t\t= \"%s dans %s\"\nL.AUTO_ANNOUNCE_TEXTS.bait\t\t\t\t= \"%s imminent - appâtez maintenant\"\nL.AUTO_ANNOUNCE_TEXTS.stage\t\t\t\t= \"Phase %s\"\nL.AUTO_ANNOUNCE_TEXTS.prestage\t\t\t= \"Phase %s imminente\"\nL.AUTO_ANNOUNCE_TEXTS.count\t\t\t\t= \"%s (%%s)\"\nL.AUTO_ANNOUNCE_TEXTS.stack\t\t\t\t= \"%s sur >%%s< (%%d)\"\nL.AUTO_ANNOUNCE_TEXTS.moveto\t\t\t= \"%s - allez sur >%%s<\"\n\nlocal prewarnOption\t\t\t\t\t\t= \"Afficher une pré-alerte pour $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.you\t\t\t\t= \"Annoncer quand $spell:%s est sur vous\"\nL.AUTO_ANNOUNCE_OPTIONS.target\t\t\t= \"Annoncer les cibles de $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.targetdistance\t= \"Annoncer les cibles de $spell:%s (avec la distance)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetNF\t\t= \"Annoncer les cibles de $spell:%s (ignore le filtre de cible global)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetsource\t= \"Annoncer les cibles de $spell:%s (avec la source)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetcount\t\t= \"Annoncer les cibles de $spell:%s (avec décompte)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetcountdistance\t= \"Annoncer les cibles de $spell:%s (avec décompte et distance)\"\nL.AUTO_ANNOUNCE_OPTIONS.spell\t\t\t= \"Annoncer quand $spell:%s a été lancé\"\nL.AUTO_ANNOUNCE_OPTIONS.incoming\t\t= \"Annoncer quand des affaiblissements de $spell:%s sont imminents\"\nL.AUTO_ANNOUNCE_OPTIONS.incomingcount\t= \"Annoncer (avec décompte) quand des affaiblissements de $spell:%s sont imminents\"\nL.AUTO_ANNOUNCE_OPTIONS.ends\t\t\t= \"Annoncer quand $spell:%s est terminé\"\nL.AUTO_ANNOUNCE_OPTIONS.endtarget\t\t= \"Annoncer quand $spell:%s est terminé (avec la cible)\"\nL.AUTO_ANNOUNCE_OPTIONS.fades\t\t\t= \"Annoncer quand $spell:%s est dissipé\"\nL.AUTO_ANNOUNCE_OPTIONS.addsleft\t\t= \"Annoncer combien de $spell:%s restent\"\nL.AUTO_ANNOUNCE_OPTIONS.cast\t\t\t= \"Annoncer quand $spell:%s commence à être incanté\"\nL.AUTO_ANNOUNCE_OPTIONS.soon\t\t\t= prewarnOption\nL.AUTO_ANNOUNCE_OPTIONS.sooncount\t\t= \"Afficher une pré-alerte (avec décompte) pour $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.countdown\t\t= \"Afficher un spam de décompte pré-alerte pour $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.prewarn\t\t\t= prewarnOption\nL.AUTO_ANNOUNCE_OPTIONS.bait\t\t\t= \"Afficher une pré-alerte (pour appâter) pour $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.stage\t\t\t= \"Annoncer la Phase %s\"\nL.AUTO_ANNOUNCE_OPTIONS.stagechange\t\t= \"Annoncer les changements de phase\"\nL.AUTO_ANNOUNCE_OPTIONS.prestage\t\t= \"Afficher une pré-alerte pour la Phase %s\"\nL.AUTO_ANNOUNCE_OPTIONS.count\t\t\t= \"Annoncer quand $spell:%s a été lancé (avec décompte)\"\nL.AUTO_ANNOUNCE_OPTIONS.stack\t\t\t= \"Annoncer les cumuls de $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.moveto\t\t\t= \"Annoncer quand se déplacer vers quelqu'un ou un endroit pour $spell:%s\"\n\nL.AUTO_SPEC_WARN_TEXTS.spell\t\t\t= \"%s !\"\nL.AUTO_SPEC_WARN_TEXTS.ends\t\t\t\t= \"%s terminé\"\nL.AUTO_SPEC_WARN_TEXTS.fades\t\t\t= \"%s dissipé\"\nL.AUTO_SPEC_WARN_TEXTS.soon\t\t\t\t= \"%s imminent\"\nL.AUTO_SPEC_WARN_TEXTS.sooncount\t\t= \"%s (%%s) imminent\"\nL.AUTO_SPEC_WARN_TEXTS.bait\t\t\t\t= \"%s imminent - appâtez maintenant\"\nL.AUTO_SPEC_WARN_TEXTS.prewarn\t\t\t= \"%s dans %s\"\nL.AUTO_SPEC_WARN_TEXTS.dispel\t\t\t= \"%s sur >%%s< - dissipez maintenant\"\nL.AUTO_SPEC_WARN_TEXTS.interrupt\t\t= \"%s - interrompez >%%s< !\"\nL.AUTO_SPEC_WARN_TEXTS.interruptcount\t= \"%s - interrompez >%%s< ! (%%d)\"\nL.AUTO_SPEC_WARN_TEXTS.you\t\t\t\t= \"%s sur vous\"\nL.AUTO_SPEC_WARN_TEXTS.youcount\t\t\t= \"%s (%%s) sur vous\"\nL.AUTO_SPEC_WARN_TEXTS.youpos\t\t\t= \"%s (Position : %%s) sur vous\"\nL.AUTO_SPEC_WARN_TEXTS.youposcount\t\t= \"%s (%%s) (Position : %%s) sur vous\"\nL.AUTO_SPEC_WARN_TEXTS.soakpos\t\t\t= \"%s (Position d'absorption : %%s)\"\nL.AUTO_SPEC_WARN_TEXTS.target\t\t\t= \"%s sur >%%s<\"\nL.AUTO_SPEC_WARN_TEXTS.targetcount\t\t= \"%s (%%s) sur >%%s< \"\nL.AUTO_SPEC_WARN_TEXTS.defensive\t\t= \"%s - défensif\"\nL.AUTO_SPEC_WARN_TEXTS.taunt\t\t\t= \"%s sur >%%s< - provoquez maintenant\"\nL.AUTO_SPEC_WARN_TEXTS.close\t\t\t= \"%s sur >%%s< près de vous\"\nL.AUTO_SPEC_WARN_TEXTS.move\t\t\t\t= \"%s - éloignez-vous\"\nL.AUTO_SPEC_WARN_TEXTS.keepmove\t\t\t= \"%s - continuez à bouger\"\nL.AUTO_SPEC_WARN_TEXTS.stopmove\t\t\t= \"%s - arrêtez de bouger\"\nL.AUTO_SPEC_WARN_TEXTS.dodge\t\t\t= \"%s - esquivez l'attaque\"\nL.AUTO_SPEC_WARN_TEXTS.dodgecount\t\t= \"%s (%%s) - esquivez l'attaque\"\nL.AUTO_SPEC_WARN_TEXTS.dodgeloc\t\t\t= \"%s - esquivez depuis %%s\"\nL.AUTO_SPEC_WARN_TEXTS.moveaway\t\t\t= \"%s - éloignez-vous des autres\"\nL.AUTO_SPEC_WARN_TEXTS.moveawaycount\t= \"%s (%%s) - éloignez-vous des autres\"\nL.AUTO_SPEC_WARN_TEXTS.moveto\t\t\t= \"%s - allez sur >%%s<\"\nL.AUTO_SPEC_WARN_TEXTS.soak\t\t\t\t= \"%s - absorbez-le\"\nL.AUTO_SPEC_WARN_TEXTS.soakcount\t\t= \"%s - absorbez %%s\"\nL.AUTO_SPEC_WARN_TEXTS.jump\t\t\t\t= \"%s - sautez\"\nL.AUTO_SPEC_WARN_TEXTS.run\t\t\t\t= \"%s - fuyez\"\nL.AUTO_SPEC_WARN_TEXTS.runcount\t\t\t= \"%s - fuyez (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.cast\t\t\t\t= \"%s - arrêtez d'incanter\"\nL.AUTO_SPEC_WARN_TEXTS.lookaway\t\t\t= \"%s sur %%s - détournez le regard\"\nL.AUTO_SPEC_WARN_TEXTS.reflect\t\t\t= \"%s sur >%%s< - arrêtez d'attaquer\"\nL.AUTO_SPEC_WARN_TEXTS.count\t\t\t= \"%s ! (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.stack\t\t\t= \"%%d charges de %s sur vous\"\nL.AUTO_SPEC_WARN_TEXTS.switch\t\t\t= \"%s - changez de cible\"\nL.AUTO_SPEC_WARN_TEXTS.switchcount\t\t= \"%s - changez de cible (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.gtfo\t\t\t\t= \"Dégâts de %%s - éloignez-vous\"\nL.AUTO_SPEC_WARN_TEXTS.adds\t\t\t\t= \"Adds imminents - changez de cible\"\nL.AUTO_SPEC_WARN_TEXTS.addscount\t\t= \"Adds imminents - changez de cible (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.addscustom\t\t= \"Adds imminents - %%s\"\nL.AUTO_SPEC_WARN_TEXTS.targetchange\t\t= \"Changement de cible - passez à %%s\"\n\nL.AUTO_SPEC_WARN_OPTIONS.spell\t\t\t= \"Afficher une annonce spéciale pour $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.ends\t\t\t= \"Afficher une annonce spéciale quand $spell:%s est terminé\"\nL.AUTO_SPEC_WARN_OPTIONS.fades\t\t\t= \"Afficher une annonce spéciale quand $spell:%s est dissipé\"\nL.AUTO_SPEC_WARN_OPTIONS.soon\t\t\t= \"Afficher une pré-annonce spéciale pour $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.sooncount\t\t= \"Afficher une pré-annonce spéciale (avec décompte) pour $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.bait\t\t\t= \"Afficher une pré-annonce spéciale (pour appâter) pour $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.prewarn\t\t= \"Afficher une pré-annonce spéciale %s secondes avant $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.dispel\t\t\t= \"Afficher une annonce spéciale pour dissiper/voler $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.interrupt\t\t= \"Afficher une annonce spéciale pour interrompre $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.interruptcount\t= \"Afficher une annonce spéciale (avec décompte) pour interrompre $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.you\t\t\t= \"Afficher une annonce spéciale lorsque vous êtes affecté par $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.youcount\t\t= \"Afficher une annonce spéciale (avec décompte) lorsque vous êtes affecté par $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.youpos\t\t\t= \"Afficher une annonce spéciale (avec position) lorsque vous êtes affecté par $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.youposcount\t= \"Afficher une annonce spéciale (avec position et décompte) lorsque vous êtes affecté par $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.soakpos\t\t= \"Afficher une annonce spéciale (avec position) pour aider à absorber les autres affectés par $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.target\t\t\t= \"Afficher une annonce spéciale quand quelqu'un est affecté par $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.targetcount\t= \"Afficher une annonce spéciale (avec décompte) quand quelqu'un est affecté par $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.defensive\t\t= \"Afficher une annonce spéciale pour utiliser des capacités défensives pour $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.taunt\t\t\t= \"Afficher une annonce spéciale pour provoquer quand l'autre tank est affecté par $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.close\t\t\t= \"Afficher une annonce spéciale quand quelqu'un près de vous est affecté par $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.move\t\t\t= \"Afficher une annonce spéciale pour sortir de $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.keepmove\t\t= \"Afficher une annonce spéciale pour continuer à bouger pour $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.stopmove\t\t= \"Afficher une annonce spéciale pour arrêter de bouger pour $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.dodge\t\t\t= \"Afficher une annonce spéciale pour esquiver $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.dodgecount\t\t= \"Afficher une annonce spéciale (avec décompte) pour esquiver $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.dodgeloc\t\t= \"Afficher une annonce spéciale (avec emplacement) pour esquiver $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.moveaway\t\t= \"Afficher une annonce spéciale pour s'éloigner des autres pour $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.moveawaycount\t= \"Afficher une annonce spéciale (avec décompte) pour s'éloigner des autres pour $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.moveto\t\t\t= \"Afficher une annonce spéciale pour se déplacer vers quelqu'un ou un endroit pour $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.soak\t\t\t= \"Afficher une annonce spéciale pour absorber $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.soakcount\t\t= \"Afficher une annonce spéciale (avec décompte) pour absorber $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.jump\t\t\t= \"Afficher une annonce spéciale pour sauter pour $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.run\t\t\t= \"Afficher une annonce spéciale pour fuir $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.runcount\t\t= \"Afficher une annonce spéciale (avec décompte) pour fuir $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.cast\t\t\t= \"Afficher une annonce spéciale pour arrêter d'incanter pour $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.lookaway\t\t= \"Afficher une annonce spéciale pour détourner le regard pour $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.reflect\t\t= \"Afficher une annonce spéciale pour arrêter d'attaquer $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.count\t\t\t= \"Afficher une annonce spéciale (avec décompte) pour $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.stack\t\t\t= \"Afficher une annonce spéciale lorsque vous avez >=%d charges de $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.switch\t\t\t= \"Afficher une annonce spéciale pour changer de cible pour $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.switchcount\t= \"Afficher une annonce spéciale (avec décompte) pour changer de cible pour $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.gtfo\t\t\t= \"Afficher une annonce spéciale pour sortir des zones de dégâts au sol\"\nL.AUTO_SPEC_WARN_OPTIONS.adds\t\t\t= \"Afficher une annonce spéciale pour changer de cible pour les adds imminents\"\nL.AUTO_SPEC_WARN_OPTIONS.addscount\t\t= \"Afficher une annonce spéciale (avec décompte) pour changer de cible pour les adds imminents\"\nL.AUTO_SPEC_WARN_OPTIONS.addscustom\t\t= \"Afficher une annonce spéciale pour les adds imminents\"\nL.AUTO_SPEC_WARN_OPTIONS.targetchange\t= \"Afficher une annonce spéciale pour les changements de cible prioritaires\"\n\nL.AUTO_TIMER_TEXTS.target\t\t\t\t= \"%s : %%s\"\nL.AUTO_TIMER_TEXTS.targetcount\t\t\t= \"%s (%%2$s) : %%1$s\"\nL.AUTO_TIMER_TEXTS.cast\t\t\t\t\t= \"%s\"\nL.AUTO_TIMER_TEXTS.castshort\t\t\t= \"%s \"\nL.AUTO_TIMER_TEXTS.castcount\t\t\t= \"%s (%%s)\"\nL.AUTO_TIMER_TEXTS.castcountshort\t\t= \"%s (%%s) \"\nL.AUTO_TIMER_TEXTS.castsource\t\t\t= \"%s : %%s\"\nL.AUTO_TIMER_TEXTS.castsourceshort\t\t= \"%s : %%s \"\nL.AUTO_TIMER_TEXTS.active\t\t\t\t= \"%s se termine\"\nL.AUTO_TIMER_TEXTS.fades\t\t\t\t= \"%s se dissipe\"\nL.AUTO_TIMER_TEXTS.ai\t\t\t\t\t= \"IA de %s\"\n\nL.AUTO_TIMER_TEXTS.cd\t\t\t\t\t= \"Rech. %s\"\nL.AUTO_TIMER_TEXTS.cdshort\t\t\t\t= \"~%s\"\nL.AUTO_TIMER_TEXTS.cdcount\t\t\t\t= \"Rech. %s (%%s)\"\nL.AUTO_TIMER_TEXTS.cdcountshort\t\t\t= \"~%s (%%s)\"\nL.AUTO_TIMER_TEXTS.cdsource\t\t\t\t= \"Rech. %s : >%%s<\"\nL.AUTO_TIMER_TEXTS.cdsourceshort\t\t= \"~%s : >%%s<\"\nL.AUTO_TIMER_TEXTS.cdspecial\t\t\t= \"Rech. Spécial\"\nL.AUTO_TIMER_TEXTS.cdspecialshort\t\t= \"~Spécial\"\n\nL.AUTO_TIMER_TEXTS.next\t\t\t\t\t= \"Proch. %s\"\nL.AUTO_TIMER_TEXTS.nextshort\t\t\t= \"%s\"\nL.AUTO_TIMER_TEXTS.nextcount\t\t\t= \"Proch. %s (%%s)\"\nL.AUTO_TIMER_TEXTS.nextcountshort\t\t= \"%s (%%s)\"\nL.AUTO_TIMER_TEXTS.nextsource\t\t\t= \"Proch. %s : %%s\"\nL.AUTO_TIMER_TEXTS.nextsourceshort\t\t= \"%s : %%s\"\nL.AUTO_TIMER_TEXTS.nextspecial\t\t\t= \"Proch. Spécial\"\nL.AUTO_TIMER_TEXTS.nextspecialshort\t\t= \"Spécial\"\n\nL.AUTO_TIMER_TEXTS.var\t\t\t\t\t= \"%s\"\nL.AUTO_TIMER_TEXTS.varcount\t\t\t\t= \"%s (%%s)\"\nL.AUTO_TIMER_TEXTS.varsource\t\t\t= \"%s : >%%s<\"\nL.AUTO_TIMER_TEXTS.varspecial\t\t\t= \"Spécial\"\nL.AUTO_TIMER_TEXTS.varcombo\t\t\t\t= \"%%1$s + %%2$s\"\n\nL.AUTO_TIMER_TEXTS.achievement\t\t\t= \"%s\"\nL.AUTO_TIMER_TEXTS.stage\t\t\t\t= \"Phase Suivante\"\nL.AUTO_TIMER_TEXTS.stageshort\t\t\t= \"Phase\"\nL.AUTO_TIMER_TEXTS.adds\t\t\t\t\t= \"Adds imminents\"\nL.AUTO_TIMER_TEXTS.addsshort\t\t\t= \"Adds\"\nL.AUTO_TIMER_TEXTS.addscustom\t\t\t= \"Adds imminents (%%s)\"\nL.AUTO_TIMER_TEXTS.addscustomshort\t\t= \"Adds (%%s)\"\nL.AUTO_TIMER_TEXTS.roleplay\t\t\t\t= \"Jeu de rôle\"\n\nL.AUTO_TIMER_TEXTS.cdnp\t\t\t\t\t= L.AUTO_TIMER_TEXTS.cd\nL.AUTO_TIMER_TEXTS.nextnp\t\t\t\t= L.AUTO_TIMER_TEXTS.next\nL.AUTO_TIMER_TEXTS.cdcountnp\t\t\t= L.AUTO_TIMER_TEXTS.cdcount\nL.AUTO_TIMER_TEXTS.nextcountnp\t\t\t= L.AUTO_TIMER_TEXTS.nextcount\n\n\nL.AUTO_TIMER_OPTIONS.target\t\t\t\t= \"Afficher le timer pour l'affaiblissement $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.targetcount\t\t= \"Afficher le timer (avec décompte) pour l'affaiblissement $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.cast\t\t\t\t= \"Afficher le timer pour l'incantation de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.castcount\t\t\t= \"Afficher le timer (avec décompte) pour l'incantation de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.castsource\t\t\t= \"Afficher le timer (avec source) pour l'incantation de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.active\t\t\t\t= \"Afficher le timer pour la durée de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.fades\t\t\t\t= \"Afficher le timer pour la dissipation de $spell:%s sur les joueurs (%ss)\"\nL.AUTO_TIMER_OPTIONS.ai\t\t\t\t\t= \"Afficher le timer IA pour le temps de recharge de $spell:%s (%ss)\"\n\nL.AUTO_TIMER_OPTIONS.cd\t\t\t\t\t= \"Afficher le timer pour le temps de recharge de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdcount\t\t\t= \"Afficher le timer pour le temps de recharge de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdnp\t\t\t\t= \"Afficher le timer uniquement sur la barre de nom pour le temps de recharge de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdnpcount\t\t\t= \"Afficher le timer uniquement sur la barre de nom (avec décompte) pour le temps de recharge de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdsource\t\t\t= \"Afficher le timer (avec source) pour le temps de recharge de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdspecial\t\t\t= \"Afficher le timer pour le temps de recharge de la capacité spéciale (%ss)\"\n\nL.AUTO_TIMER_OPTIONS.next\t\t\t\t= \"Afficher le timer pour le prochain $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextcount\t\t\t= \"Afficher le timer pour le prochain $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextnp\t\t\t\t= \"Afficher le timer uniquement sur la barre de nom pour le prochain $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextnpcount\t\t= \"Afficher le timer uniquement sur la barre de nom (avec décompte) pour le prochain $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextsource\t\t\t= \"Afficher le timer (avec source) pour le prochain $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextspecial\t\t= \"Afficher le timer pour la prochaine capacité spéciale (%ss)\"\n\nL.AUTO_TIMER_OPTIONS.var\t\t\t\t= \"Afficher le timer (avec variation) pour la fenêtre de recharge de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.varcount\t\t\t= \"Afficher le timer (avec décompte et variation) pour la fenêtre de recharge de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.varnp\t\t\t\t= \"Afficher le timer uniquement sur la barre de nom (avec variation) pour la fenêtre de recharge de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.varpnp\t\t\t\t= \"Afficher le timer prioritaire uniquement sur la barre de nom (avec variation) pour la fenêtre de recharge de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.varsource\t\t\t= \"Afficher le timer (avec source et variation) pour la fenêtre de recharge de $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.varspecial\t\t\t= \"Afficher le timer (avec variation) pour la fenêtre de recharge de la capacité spéciale (%ss)\"\nL.AUTO_TIMER_OPTIONS.varcombo\t\t\t= \"Afficher le timer (avec variation) pour la fenêtre de recharge du combo de capacités (%ss)\"\n\nL.AUTO_TIMER_OPTIONS.achievement\t\t= \"Afficher le timer pour %s (%ss)\"\nL.AUTO_TIMER_OPTIONS.stage\t\t\t\t= \"Afficher le timer pour la phase suivante (%ss)\"\nL.AUTO_TIMER_OPTIONS.adds\t\t\t\t= \"Afficher le timer pour les adds imminents (%ss)\"\nL.AUTO_TIMER_OPTIONS.addscustom\t\t\t= \"Afficher le timer pour les adds imminents (%ss)\"\nL.AUTO_TIMER_OPTIONS.roleplay\t\t\t= \"Afficher le timer pour la durée du jeu de rôle (%ss)\"\n\nL.AUTO_ICONS_OPTION_TARGETS\t\t\t\t= \"Placer des icônes sur les cibles de $spell:%s\"\nL.AUTO_ICONS_OPTION_TARGETS_TANK_A\t\t= \"Placer des icônes sur les cibles de $spell:%s avec priorité tank > mêlée > distant et repli alphabétique\"\nL.AUTO_ICONS_OPTION_TARGETS_TANK_R\t\t= \"Placer des icônes sur les cibles de $spell:%s avec priorité tank > mêlée > distant et repli sur la liste de raid\"\nL.AUTO_ICONS_OPTION_TARGETS_MELEE_A\t\t= \"Placer des icônes sur les cibles de $spell:%s avec priorité mêlée et alphabétique\"\nL.AUTO_ICONS_OPTION_TARGETS_MELEE_R\t\t= \"Placer des icônes sur les cibles de $spell:%s avec priorité mêlée et liste de raid\"\nL.AUTO_ICONS_OPTION_TARGETS_RANGED_A\t= \"Placer des icônes sur les cibles de $spell:%s avec priorité distant et alphabétique\"\nL.AUTO_ICONS_OPTION_TARGETS_RANGED_R\t= \"Placer des icônes sur les cibles de $spell:%s avec priorité distant et liste de raid\"\nL.AUTO_ICONS_OPTION_TARGETS_ALPHA\t\t= \"Placer des icônes sur les cibles de $spell:%s avec priorité alphabétique\"\nL.AUTO_ICONS_OPTION_TARGETS_ROSTER\t\t= \"Placer des icônes sur les cibles de $spell:%s avec priorité sur la liste de raid\"\nL.AUTO_ICONS_OPTION_NPCS\t\t\t\t= \"Placer des icônes sur $spell:%s\"\nL.AUTO_ICONS_OPTION_CONFLICT\t\t\t= \" (Peut entrer en conflit avec d'autres options)\"\nL.AUTO_ARROW_OPTION_TEXT\t\t\t\t= \"Afficher la flèche \" .. L.DBM .. \" pour se diriger vers la cible affectée par $spell:%s\"\nL.AUTO_ARROW_OPTION_TEXT2\t\t\t\t= \"Afficher la flèche \" .. L.DBM .. \" pour s'éloigner de la cible affectée par $spell:%s\"\nL.AUTO_ARROW_OPTION_TEXT3\t\t\t\t= \"Afficher la flèche \" .. L.DBM .. \" pour se diriger vers un emplacement spécifique pour $spell:%s\"\n\nL.AUTO_YELL_OPTION_TEXT.shortyell\t\t= \"Crier quand vous êtes affecté par $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.yell\t\t\t= \"Crier (avec le nom du joueur) quand vous êtes affecté par $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.yellme\t\t\t= \"Crier quand vous êtes affecté par $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.count\t\t\t= \"Crier (avec décompte) quand vous êtes affecté par $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.fade\t\t\t= \"Crier (avec décompte et nom du sort) quand $spell:%s se dissipe\"\nL.AUTO_YELL_OPTION_TEXT.shortfade\t\t= \"Crier (avec décompte) quand $spell:%s se dissipe\"\nL.AUTO_YELL_OPTION_TEXT.iconfade\t\t= \"Crier (avec décompte et icône) quand $spell:%s se dissipe\"\nL.AUTO_YELL_OPTION_TEXT.position\t\t= \"Crier (avec position et nom du joueur) quand vous êtes affecté par $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.shortposition\t= \"Crier (avec position) quand vous êtes affecté par $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.combo\t\t\t= \"Crier (avec texte personnalisé) quand vous êtes affecté par $spell:%s et d'autres sorts en même temps\"\nL.AUTO_YELL_OPTION_TEXT.repeatplayer\t= \"Crier de manière répétée (avec nom du joueur) quand vous êtes affecté par $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.repeaticon\t\t= \"Crier de manière répétée (avec icône) quand vous êtes affecté par $spell:%s\"\n\nL.AUTO_YELL_ANNOUNCE_TEXT.shortyell\t\t= \"%s\"\nL.AUTO_YELL_ANNOUNCE_TEXT.yell\t\t\t= \"%s sur \" .. UnitName(\"player\") .. \"!\"\nL.AUTO_YELL_ANNOUNCE_TEXT.yellme\t\t= \"%s sur moi !\"\nL.AUTO_YELL_ANNOUNCE_TEXT.count\t\t\t= \"%s sur \" .. UnitName(\"player\") .. \"! (%%d)\"\nL.AUTO_YELL_ANNOUNCE_TEXT.fade\t\t\t= \"%s se dissipe dans %%d\"\nL.AUTO_YELL_ANNOUNCE_TEXT.shortfade\t\t= \"%%d\"\nL.AUTO_YELL_ANNOUNCE_TEXT.iconfade\t\t= \"{rt%%2$d}%%1$d\"\n--L.AUTO_YELL_ANNOUNCE_TEXT.position\t= \"%s %%s sur {rt%%d}\" ..UnitName(\"player\").. \"{rt%%d}\"\nL.AUTO_YELL_ANNOUNCE_TEXT.shortposition\t= \"{rt%%1$d}%s %%2$d\"--Icon, Spellname, number\nL.AUTO_YELL_ANNOUNCE_TEXT.combo\t\t\t= \"%s et %%s\"--Spell name (from option, plus spellname given in arg)\n--L.AUTO_YELL_ANNOUNCE_TEXT.repeatplayer= UnitName(\"player\"),\nL.AUTO_YELL_ANNOUNCE_TEXT.repeaticon\t= \"{rt%%1$d}\"\n\nL.AUTO_YELL_CUSTOM_POSITION\t\t\t\t= \"{rt%d}%s\"\nL.AUTO_YELL_CUSTOM_POSITION2\t\t\t= \"{rt%d}%s{rt%d}\"\nL.AUTO_YELL_CUSTOM_FADE\t\t\t\t\t= \"%s dissipé\"\nL.AUTO_HUD_OPTION_TEXT\t\t\t\t\t= \"Afficher la HudMap pour $spell:%s (Retiré)\"\nL.AUTO_HUD_OPTION_TEXT_MULTI\t\t\t= \"Afficher la HudMap pour diverses mécaniques (Retiré)\"\nL.AUTO_NAMEPLATE_OPTION_TEXT\t\t\t= \"Afficher les auras de barre de nom pour $spell:%s en utilisant un addon de barre de nom compatible ou \"..L.DBM\nL.AUTO_NAMEPLATE_OPTION_TEXT_FORCED\t\t= \"Afficher les auras de barre de nom pour $spell:%s en utilisant uniquement \"..L.DBM\nL.AUTO_RANGE_OPTION_TEXT\t\t\t\t= \"Afficher le cadre de portée (%s) pour $spell:%s\"\nL.AUTO_RANGE_OPTION_TEXT_SHORT\t\t\t= \"Afficher le cadre de portée (%s)\"\nL.AUTO_RRANGE_OPTION_TEXT\t\t\t\t= \"Afficher le cadre de portée inversé (%s) pour $spell:%s\"\nL.AUTO_RRANGE_OPTION_TEXT_SHORT\t\t\t= \"Afficher le cadre de portée inversé (%s)\"\nL.AUTO_INFO_FRAME_OPTION_TEXT\t\t\t= \"Afficher le cadre d'info pour $spell:%s\"\nL.AUTO_INFO_FRAME_OPTION_TEXT2\t\t\t= \"Afficher le cadre d'info pour l'aperçu du combat\"\nL.AUTO_INFO_FRAME_OPTION_TEXT3\t\t\t= \"Afficher le cadre d'info pour $spell:%s (quand le seuil de %%s est atteint)\"\nL.AUTO_READY_CHECK_OPTION_TEXT\t\t\t= \"Jouer le son du ready check lorsque le boss est engagé (même s'il n'est pas ciblé)\"\nL.AUTO_SPEEDCLEAR_OPTION_TEXT\t\t\t= \"Afficher le timer pour le clean le plus rapide de %s\"\nL.AUTO_PRIVATEAURA_OPTION_TEXT\t\t\t= \"Jouer les alertes sonores DBM pour les auras privées de $spell:%s sur ce combat. Priorité sonore : pack de voix si disponible, sinon sirène.\"\n\nL.AUTO_SOUND_OPTION_TEXT\t\t\t\t= \"Jouer un son pour $spell:%d\"\nL.AUTO_SOUND_OPTION_TEXT5\t\t\t\t= \"Décompte audio de 5 secondes pour $spell:%d\"\nL.AUTO_SOUND_OPTION_TEXT3\t\t\t\t= \"Décompte audio de 3 secondes pour $spell:%d\"\nL.AUTO_SOUND_OPTION_TEXT_YOU\t\t\t= \"Jouer un son pour $spell:%d sur vous\"\nL.AUTO_SOUND_OPTION_TEXT_SOON\t\t\t= \"Jouer un son pour $spell:%d imminent\"\nL.AUTO_SOUND_OPTION_TEXT_CLOSE\t\t\t= \"Jouer un son pour $spell:%d près de vous\"\n\nL.MOVE_WARNING_BAR\t\t\t\t\t\t= \"Annonce déplaçable\"\nL.MOVE_WARNING_MESSAGE\t\t\t\t\t= \"Merci d'utiliser \"..L.DEADLY_BOSS_MODS..\"\"\nL.MOVE_SPECIAL_WARNING_BAR\t\t\t\t= \"Avertissement spécial déplaçable\"\nL.MOVE_SPECIAL_WARNING_TEXT\t\t\t\t= \"Avertissement Spécial\"\n\nL.ARROW_MOVABLE\t\t\t\t\t\t\t= \"Flèche déplaçable\"\nL.ARROW_WAY_USAGE\t\t\t\t\t\t= \"/dway <x> <y>: Crée une flèche qui pointe vers un emplacement spécifique (en utilisant les coordonnées de la carte de la zone locale)\"\nL.ARROW_WAY_SUCCESS\t\t\t\t\t\t= \"Pour masquer la flèche, faites '/dbm arrow hide' ou atteignez la flèche.\"\nL.ARROW_ERROR_USAGE\t\t\t\t\t\t= {\n\t\"Utilisation de \"..L.DBM..\"-Arrow:\",\n\t\"-----------------\",\n\t\"/dbm arrow <x> <y>: Crée une flèche qui pointe vers un emplacement spécifique (en utilisant les coordonnées mondiales)\",\n\t\"/dbm arrow map <x> <y>: Crée une flèche qui pointe vers un emplacement spécifique (en utilisant les coordonnées de la carte de la zone)\",\n\t\"/dbm arrow <joueur>: Crée une flèche qui pointe vers un joueur spécifique de votre groupe ou raid (sensible à la casse !)\",\n\t\"/dbm arrow hide: Masque la flèche\",\n\t\"/dbm arrow move: Rend la flèche déplaçable\"\n}\n\nL.SPEED_KILL_TIMER_TEXT\t\t\t\t\t= \"Record à battre\"\nL.SPEED_CLEAR_TIMER_TEXT\t\t\t\t= \"Meilleur clean\"\nL.TIMER_RESPAWN\t\t\t\t\t\t\t= \"Réapparition de %s\"\n\nL.REQ_INSTANCE_ID_PERMISSION\t\t\t= \"%s a demandé à voir vos IDs d'instance et votre progression actuels.\\nVoulez-vous envoyer ces informations à %s ? Il ou elle pourra demander ces informations pendant votre session actuelle (c'est-à-dire jusqu'à ce que vous vous reconnectiez).\"\nL.ERROR_NO_RAID\t\t\t\t\t\t\t= \"Vous devez être dans un groupe de raid pour utiliser cette fonctionnalité.\"\nL.INSTANCE_INFO_REQUESTED\t\t\t\t= \"Demande d'informations sur le verrouillage du raid envoyée au groupe de raid.\\nVeuillez noter que les utilisateurs devront donner leur permission avant de vous envoyer les données, cela peut donc prendre une minute avant que nous recevions toutes les réponses.\"\nL.INSTANCE_INFO_STATUS_UPDATE\t\t\t= \"Réponses reçues de %d joueurs sur %d utilisateurs de DBM : %d ont envoyé les données, %d ont refusé la demande. En attente de réponses pendant encore %d secondes...\"\nL.INSTANCE_INFO_ALL_RESPONSES\t\t\t= \"Réponses reçues de tous les membres du raid.\"\nL.INSTANCE_INFO_DETAIL_DEBUG\t\t\t= \"Expéditeur : %s Type de résultat : %s Nom de l'instance : %s ID de l'instance : %s Difficulté : %d Taille : %d Progression : %s\"\nL.INSTANCE_INFO_DETAIL_HEADER\t\t\t= \"%s, difficulté %s :\"\nL.INSTANCE_INFO_DETAIL_INSTANCE\t\t\t= \"    ID %s, progression %d : %s\"\nL.INSTANCE_INFO_DETAIL_INSTANCE2\t\t= \"    Progression %d : %s\"\nL.INSTANCE_INFO_NOLOCKOUT\t\t\t\t= \"Il n'y a aucune information de verrouillage de raid dans votre groupe de raid.\"\nL.INSTANCE_INFO_STATS_DENIED\t\t\t= \"Demande refusée : %s\"\nL.INSTANCE_INFO_STATS_AWAY\t\t\t\t= \"Absent : %s\"\nL.INSTANCE_INFO_STATS_NO_RESPONSE\t\t= \"Aucune version récente de \"..L.DBM..\" installée : %s\"\nL.INSTANCE_INFO_RESULTS\t\t\t\t\t= \"Résultats de l'analyse des IDs d'instance. Notez que les instances peuvent apparaître plusieurs fois s'il y a des joueurs avec des clients WoW localisés dans votre raid.\"\nL.INSTANCE_INFO_SHOW_RESULTS\t\t\t= \"Joueurs n'ayant pas encore répondu : %s\"\n\nL.LAG_CHECKING\t\t\t\t\t\t\t= \"Vérification de la latence du raid...\"\nL.LAG_HEADER\t\t\t\t\t\t\t= L.DEADLY_BOSS_MODS.. \" - Résultats de latence\"\nL.LAG_ENTRY\t\t\t\t\t\t\t\t= \"%s: Délai monde [%d ms] / Délai domicile [%d ms]\"\nL.LAG_FOOTER\t\t\t\t\t\t\t= \"Pas de réponse : %s\"\n\nL.DUR_CHECKING\t\t\t\t\t\t\t= \"Vérification de la durabilité du raid...\"\nL.DUR_HEADER\t\t\t\t\t\t\t= L.DEADLY_BOSS_MODS.. \" - Résultats de durabilité\"\nL.DUR_ENTRY\t\t\t\t\t\t\t\t= \"%s: Durabilité [%d pourcent] / Équipement cassé [%s]\"\nL.LAG_FOOTER\t\t\t\t\t\t\t= \"Pas de réponse : %s\"\n\nL.OVERRIDE_ACTIVATED\t\t\t\t\t= \"Les substitutions de configuration ont été activées pour ce combat par le RL.\"\n\nL.LDB_TOOLTIP_HELP1\t\t\t\t\t\t= \"Clic pour ouvrir \" .. L.DBM\nL.LDB_TOOLTIP_HELP2\t\t\t\t\t\t= \"Alt+clic droit pour basculer en mode Silencieux\"\nL.SILENTMODE_IS\t\t\t\t\t\t\t= \"Le mode Silencieux est \"\n\nL.WORLD_BUFFS.hordeOny\t\t\t\t\t= \"Peuple de la Horde, citoyens d’Orgrimmar, venez, rassemblez-vous et célébrez un héros de la Horde\"\nL.WORLD_BUFFS.allianceOny\t\t\t\t= \"Citoyens et alliés de Stormwind, ce jour est historique.\"\nL.WORLD_BUFFS.hordeNef\t\t\t\t\t= \"NEFARIAN A ÉTÉ TUÉ ! Peuple d'Orgrimmar\"\nL.WORLD_BUFFS.allianceNef\t\t\t\t= \"Citoyens de l'Alliance, le seigneur du clan Blackrock a été tué !\"\nL.WORLD_BUFFS.zgHeart\t\t\t\t\t= \"Il ne reste plus qu'une étape avant que prenne fin la menace de l'Écorcheur d'âmes\"\nL.WORLD_BUFFS.zgHeartBooty\t\t\t\t= \"Le Dieu sanglant, l'Écorcheur d'âmes, a été vaincu ! Nous ne sommes plus menacés !\"\nL.WORLD_BUFFS.zgHeartYojamba\t\t\t= \"Commencez le rituel, mes serviteurs. Nous devons renvoyer le cœur d'Hakkar dans le vide !\"\nL.WORLD_BUFFS.rendHead\t\t\t\t\t= \"Le faux chef Rend Blackhand est tombé !\"\n\nL.RAID_INFO_WORLD_BOSS\t\t\t\t\t= \"Boss hors instance\"\nL.SCENARIO_STAGE\t\t\t\t\t\t= \"Phase %d\"\nL.SPECIALIZATION\t\t\t\t\t\t= \"Spécialisation\"\nL.HARD_MODE\t\t\t\t\t\t\t\t= \"Mode difficile\"\nL.BOSS_YOU_DEFEATED\t\t\t\t\t\t= \"Vous avez vaincu\"\nL.BOSS_KILL_SUBTITLE\t\t\t\t\t= \"a été vaincu(e)\""
  },
  {
    "path": "DBM-Core/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nif not DBM_CORE_L then DBM_CORE_L = {} end\n\nlocal L = DBM_CORE_L\n\nL.HOW_TO_USE_MOD\t\t\t\t\t= L.DBM .. \"을 사용해 주셔서 감사합니다. 대화창에서 /dbm help를 입력하면 사용 가능한 명령어 목록을 볼 수 있습니다. 설정을 하시려면 /dbm을 입력하세요. 보스 알림 설정을 기호에 맞게 변경하려면 원하는 던전을 직접 선택해서 로딩을 클릭하세요. \" .. L.DBM .. \"이 당신의 현재 전문화에 맞는 기본값을 설정하지만 일부 옵션은 자신에게 맞게 조정해야 할 수도 있습니다.\"\nL.SILENT_REMINDER\t\t\t\t\t= \"알림: \" .. L.DBM .. \"이 아직 조용함 모드입니다.\"\nL.COPY_URL_DIALOG_NEWS\t\t\t\t= \"최신 소식을 보려면 아래 링크를 방문하세요\"\n\nL.LOAD_MOD_ERROR\t\t\t\t= \"%s 보스 모드 로딩중 오류 발생: %s\"\nL.LOAD_MOD_SUCCESS\t\t\t= \"'%s' 모드가 로딩됐습니다. 사용자 지정 경고 효과음을 설정하거나 개인적으로 메모를 적어놓고 싶다면 /dbm을 입력하세요.\"\nL.LOAD_MOD_COMBAT\t\t\t= \"전투가 종료될 때까지 %s|1을;를; 로딩하지 않습니다.\"\nL.LOAD_GUI_ERROR\t\t\t\t= \"GUI를 로딩할 수 없음: %s\"\nL.LOAD_GUI_COMBAT\t\t\t= \"전투중에는 GUI의 최초 로딩을 할 수 없습니다. 전투가 종료되면 GUI가 로딩됩니다. GUI가 로딩된 다음부턴 전투중에도 GUI를 열 수 있습니다.\"\nL.BAD_LOAD\t\t\t\t\t= L.DBM .. \"이 전투로 인해 현재 인스턴스의 모드를 완전히 로딩하지 못했습니다. 전투가 종료된 후 가능한 빨리 /console reloadui 명령어를 입력해주세요.\"\nL.LOAD_MOD_VER_MISMATCH\t\t= \"DBM-Core가 로딩 조건과 맞지 않아 %s|1을;를; 로딩하지 못했습니다. 최신 버전을 설치하세요\"\nL.LOAD_MOD_EXP_MISMATCH\t\t= \"아직 출시되지 않은 WoW 확장팩용으로 설계되었으므로 %s|1을;를; 로딩하지 못했습니다. 확장팩이 출시되면 해당 모드는 자동으로 작동합니다.\"\nL.LOAD_MOD_TOC_MISMATCH\t\t= \"아직 나오지 않은 WoW 패치 (%2$s) 용으로 설계되었으므로 %1$s|1을;를; 로딩하지 못했습니다. 패치가 나오면 해당 모드는 자동으로 작동합니다.\"\nL.LOAD_MOD_DISABLED\t\t\t= \"%s|1이;가; 설치는 돼있지만 켜져있질 않습니다. 직접 켜기 전까진 모드가 로딩되지 않습니다.\"\nL.LOAD_MOD_DISABLED_PLURAL\t= \"%s|1이;가; 설치는 돼있지만 켜져있질 않습니다. 직접 켜기 전까진 모드들이 로딩되지 않습니다.\"\n\nL.COPY_URL_DIALOG\t\t\t\t\t= \"URL 복사\"\n\n--Post Patch 7.1\nL.NO_RANGE\t\t\t\t\t= \"거리 레이더를 인스턴스 던전에서 사용할 수 없습니다. 예전의 텍스트 방식 거리창으로 대체됩니다.\"\nL.NO_ARROW\t\t\t\t\t= \"화살표 기능을 인스턴스 던전에서 사용할 수 없습니다\"\nL.NO_HUD\t\t\t\t\t\t= \"HUD 기능을 인스턴스 던전에서 사용할 수 없습니다\"\n\nL.DYNAMIC_DIFFICULTY_CLUMP\t= \"현재 공격대 규모에 맞는 필요한 플레이어 숫자 관련 정보가 부족하여\" .. L.DBM .. \"이 이 전투에서 동적 거리창을 비활성화 했습니다.\"\nL.DYNAMIC_ADD_COUNT\t\t\t= \"현재 공격대 규모에 맞는 쫄 등장 정보가 부족하여\" .. L.DBM .. \"이 이 전투에서 쫄 마릿수 정보를 비활성화 했습니다.\"\nL.DYNAMIC_MULTIPLE\t\t\t= \"현재 공격대 규모에 맞는 보스 기술 작동 원리 정보가 부족하여\" .. L.DBM .. \"이 이 전투에서 다수의 기능을 비활성화 했습니다.\"\n\nL.LOOT_SPEC_REMINDER\t\t\t= \"현재 전문화는 %s입니다. 현재 지정한 전리품 획득 전문화는 %s입니다.\"\n\nL.BIGWIGS_ICON_CONFLICT\t\t= L.DBM .. \"이 BigWigs와\" .. L.DBM .. \" 모두 공격대 징표 기능을 사용하고 있음을 감지했습니다. 충돌을 방지하기 위해 공대장이 두 애드온중 하나의 징표 설정을 비활성화해야 합니다.\"\n\nL.MOD_AVAILABLE\t\t\t\t= \"이 지역에서 %s|1을;를; 사용할 수 있습니다. Curse 또는 WoWI에서 다운로드 받으실 수 있습니다.\"\n\nL.COMBAT_STARTED\t\t\t\t= \"%s 전투 시작. 행운을 빕니다! :)\";\nL.COMBAT_STARTED_IN_PROGRESS\t= \"%s 전투 진행 도중 참가했습니다. 행운을 빕니다! :)\"\nL.GUILD_COMBAT_STARTED\t\t= \"%2$s의 길드 파티가 %1$s 전투를 시작했습니다.\"\nL.SCENARIO_STARTED\t\t\t= \"%s 시작. 행운을 빕니다! :)\";\nL.SCENARIO_STARTED_IN_PROGRESS\t= \"%s 시나리오 진행 도중 참가하였습니다. 행운을 빕니다! :)\"\nL.BOSS_DOWN\t\t\t\t\t= \"%s|1이;가; %s만에 쓰러졌습니다!\"\nL.BOSS_DOWN_I\t\t\t\t= \"%s|1이;가; 쓰러졌습니다! 총 %d회 승리했습니다.\"\nL.BOSS_DOWN_L\t\t\t\t= \"%s|1이;가; %s만에 쓰러졌습니다! 지난번 처치 기록은 %s, 가장 빠른 기록은 %s 입니다. 총 %d회 승리했습니다.\"\nL.BOSS_DOWN_NR\t\t\t\t= \"%s|1이;가; %s만에 쓰러졌습니다! 신기록입니다! (이전 기록은 %s) 총 %d회 승리했습니다.\"\nL.RAID_DOWN\t\t\t\t\t= \"%s|1을;를; %s만에 모두 끝냈습니다!\"\nL.RAID_DOWN_L\t\t\t\t= \"%s|1을;를; %s만에 모두 끝냈습니다! 가장 빠른 완료 기록은 %s 입니다.\"\nL.RAID_DOWN_NR\t\t\t\t= \"%s|1을;를; %s만에 모두 끝냈습니다! 신기록입니다! (이전 기록은 %s)\"\nL.GUILD_BOSS_DOWN\t\t\t= \"%2$s의 길드 파티가 %1$s|1을;를; %3$s만에 물리쳤습니다!\"\nL.SCENARIO_COMPLETE\t\t\t= \"%s|1을;를; %s만에 완료했습니다!\"\nL.SCENARIO_COMPLETE_I\t\t= \"%s|1을;를; 완료했습니다! 총 %d회 완료했습니다.\"\nL.SCENARIO_COMPLETE_L\t\t= \"%s|1을;를; %s만에 완료했습니다! 지난번 완료 기록은 %s, 가장 빠른 기록은 %s 입니다. 총 %d회 완료했습니다.\"\nL.SCENARIO_COMPLETE_NR\t\t= \"%s|1을;를; %s만에 완료했습니다! 신기록입니다! (이전 기록은 %s) 총 %d회 완료했습니다.\"\nL.COMBAT_ENDED_AT\t\t\t= \"%s (%s) 전투에서 %s만에 전멸했습니다.\"\nL.COMBAT_ENDED_AT_LONG\t\t= \"%s (%s) 전투에서 %s만에 전멸했습니다. 현재 난이도에서 총 %d회 전멸했습니다.\"\nL.GUILD_COMBAT_ENDED_AT\t\t= \"%s의 길드 파티가 %s (%s)에서 %s만에 전멸했습니다.\"\nL.SCENARIO_ENDED_AT\t\t\t= \"%s|1이;가; %s만에 끝났습니다.\"\nL.SCENARIO_ENDED_AT_LONG\t\t= \"%s|1이;가; %s만에 끝났습니다. 현재 난이도에서 총 %d회 실패했습니다.\"\nL.COMBAT_STATE_RECOVERED\t\t= \"%s 전투가 %s전에 시작됐습니다. 타이머 복구중...\"\nL.TRANSCRIPTOR_LOG_START\t\t= \"Transcriptor 기록이 시작됐습니다.\"\nL.TRANSCRIPTOR_LOG_END\t\t= \"Transcriptor 기록이 종료됐습니다.\"\n\nL.MOVIE_SKIPPED\t\t\t\t= L.DBM .. \"이 동영상 자동 생략 기능을 작동시켰습니다.\"\nL.BONUS_SKIPPED\t\t\t\t= L.DBM .. \"이 자동으로 추가 전리품 주사위 굴림 창을 닫았습니다. 창을 열고 싶으면 3분 안에 /dbmbonusroll 명령어를 입력하세요\"\nL.BONUS_EXPIRED\t\t\t\t= \"/dbmbonusroll 명령어를 사용해 추가 전리품 주사위 굴림 창을 열려고 했으나 현재 굴릴 수 있는 추가 전리품 주사위가 없습니다.\"\n\nL.AFK_WARNING\t\t\t\t= \"자리 비움 상태에서 전투에 돌입하여 (남은 생명력 %d퍼센트) 경고음을 재생중입니다. 자리를 비우고 있는게 아니라면 자리 비움 상태를 해제하거나 '기타 기능' 항목에서 해당 설정을 비활성화 해주세요.\"\n\nL.COMBAT_STARTED_AI_TIMER\t= \"내 CPU는 신경망 프로세서. 기계학습형 컴퓨터 (이 전투에선 새로운 타이머 인공지능 기능을 사용해서 예상 타이머 바를 생성합니다)\"\n\nL.PROFILE_NOT_FOUND\t\t\t= \"<\" .. L.DBM .. \"> 현재 설정된 프로필이 손상되었습니다. \" .. L.DBM .. \"이 'Default' 프로필을 로딩할 것입니다.\"\nL.PROFILE_CREATED\t\t\t= \"'%s' 프로필을 생성했습니다.\"\nL.PROFILE_CREATE_ERROR\t\t= \"프로필 생성 실패. 프로필 이름이 올바르지 않습니다.\"\nL.PROFILE_CREATE_ERROR_D\t\t= \"프로필 생성 실패. '%s' 프로필이 이미 존재합니다.\"\nL.PROFILE_APPLIED\t\t\t= \"'%s' 프로필을 적용했습니다.\"\nL.PROFILE_APPLY_ERROR\t\t= \"프로필 적용 실패. %s 프로필이 존재하지 않습니다.\"\nL.PROFILE_COPIED\t\t\t\t= \"'%s' 프로필을 복사했습니다.\"\nL.PROFILE_COPY_ERROR\t\t\t= \"프로필 복사 실패. %s 프로필이 존재하지 않습니다.\"\nL.PROFILE_COPY_ERROR_SELF\t= \"동일한 프로필로는 복사할 수 없습니다.\"\nL.PROFILE_DELETED\t\t\t= \"'%s' 프로필을 삭제했습니다. 'Default' 프로필이 적용됩니다.\"\nL.PROFILE_DELETE_ERROR\t\t= \"프로필 삭제 실패. '%s' 프로필이 존재하지 않습니다.\"\nL.PROFILE_CANNOT_DELETE\t\t= \"'Default' 프로필은 삭제할 수 없습니다.\"\nL.MPROFILE_COPY_SUCCESS\t\t= \"%s의 (%d 전문화) 모드 설정이 복사됐습니다.\"\nL.MPROFILE_COPY_SELF_ERROR\t= \"캐릭터 설정은 자기 자신에게 복사할 수 없습니다.\"\nL.MPROFILE_COPY_S_ERROR\t\t= \"원본이 손상되었습니다. 설정이 복사되지 않거나 일부만 복사됐습니다. 복사에 실패했습니다.\"\nL.MPROFILE_COPYS_SUCCESS\t\t= \"%s의 (%d 전문화) 모드의 효과음 또는 메모가 복사됐습니다.\"\nL.MPROFILE_COPYS_SELF_ERROR\t= \"캐릭터의 사용자 지정 효과음 또는 메모는 자기 자신에게 복사할 수 없습니다.\"\nL.MPROFILE_COPYS_S_ERROR\t\t= \"원본이 손상되었습니다. 효과음과 메모가 복사되지 않거나 일부만 복사됐습니다. 복사에 실패했습니다.\"\nL.MPROFILE_DELETE_SUCCESS\t= \"%s의 (%d 전문화) 모드를 삭제했습니다.\"\nL.MPROFILE_DELETE_SELF_ERROR\t= \"사용중에는 모드를 삭제할 수 없습니다.\"\nL.MPROFILE_DELETE_S_ERROR\t= \"원본이 손상되었습니다. 설정이 삭제되지 않거나 일부만 삭제됩니다. 삭제에 실패했습니다.\"\n\nL.NOTE_SHARE_SUCCESS\t\t\t= \"%s|1이;가; %s에 대한 메모를 공유했습니다.\"\nL.NOTE_SHARE_LINK\t\t\t= \"메모를 확인하려면 여기를 클릭하세요\"\nL.NOTE_SHARE_FAIL\t\t\t= \"%s|1이;가; %s에 대한 메모 공유를 시도했습니다. 하지만 해당 보스 스킬에 관련된 모드를 설치하지 않았거나 로딩하지 않은 상태입니다. 이 메모가 필요하다면 해당 모드를 로딩했는지 확인 후 공유를 다시 요청하세요.\"\n\nL.NOTEHEADER\t\t\t\t\t= \"%s에 대한 메모를 여기에 입력하세요. 캐릭터명을 >< 로 감싸면 직업 색상으로 표시됩니다. 여러번 경고가 필요한 경우 '/'로 메모를 구분해서 작성하세요.\"\nL.NOTEFOOTER\t\t\t\t\t= \"설정을 변경하려면 '확인', 변경을 취소하려면 '취소' 버튼을 누르세요.\"\nL.NOTESHAREDHEADER\t\t\t= \"%s|1이;가; %s에 대해 아래의 메모를 공유했습니다. 수락할 경우 이미 존재하는 메모를 덮어쓰게 됩니다.\"\nL.NOTESHARED\t\t\t\t\t= \"메모를 공격대 또는 파티에 전송했습니다.\"\nL.NOTESHAREERRORSOLO\t\t\t= \"외로우세요? 자기 자신에게는 메모를 보낼 수 없습니다.\"\nL.NOTESHAREERRORBLANK\t\t= \"빈 메모는 공유할 수 없습니다.\"\nL.NOTESHAREERRORGROUPFINDER\t= \"전장, 공격대 찾기, 파티 찾기에서는 메모를 공유할 수 없습니다.\"\nL.NOTESHAREERRORALREADYOPEN\t= \"메모 편집기가 이미 열려 있는 동안에는 편집중인 메모 손실을 방지하기 위해 공유된 메모 링크를 열 수 없습니다.\"\n\nL.ALLMOD_DEFAULT_LOADED\t\t= \"이 인스턴스에 속한 모든 모드의 기본 설정이 로딩됐습니다.\"\nL.ALLMOD_STATS_RESETED\t\t= \"모든 모드 통계가 초기화 되었습니다.\"\nL.MOD_DEFAULT_LOADED\t\t\t= \"이 전투의 기본 설정이 로딩됐습니다.\"\n--L.SOUNDKIT_MIGRATION\t\t\t= \"한개 이상의 알림/특수 알림 효과음이 호환되지 않는 미디어 형식이거나 파일 경로가 잘못되는 등의 문제로 인해 기본값으로 초기화 되었습니다. \" .. L.DBM .. \"은 현재 애드온 폴더 내에 있는 효과음 파일이나 미디어 재생에 쓰이는 SoundKit ID만 지원하고 있습니다.\"\n\nL.WORLDBOSS_ENGAGED\t\t\t= \"당신이 속한 서버에서 %s 전투가 %s 퍼센트의 체력으로 시작된 것 같습니다. (%s|1이;가; 전송)\"\nL.WORLDBOSS_DEFEATED\t\t\t= \"당신이 속한 서버에서 %s|1이;가; 잡힌 것 같습니다. (%s|1이;가; 전송)\"\nL.WORLDBUFF_STARTED\t\t\t= \"%s 버프가 당신이 속한 서버의 %s 진영에서 시작됐습니다. (%s|1이;가; 받음)\"\n\nL.TIMER_FORMAT_SECS\t\t\t= \"%.2f초\"\nL.TIMER_FORMAT_MINS\t\t\t= \"%d분\"\nL.TIMER_FORMAT\t\t\t\t= \"%d분 %.2f초\"\n\nL.MIN\t\t\t\t\t\t= \"분\"\nL.MIN_FMT\t\t\t\t\t= \"%d분\"\nL.SEC\t\t\t\t\t\t= \"초\"\nL.SEC_FMT\t\t\t\t\t= \"%s초\"\n\nL.GENERIC_WARNING_OTHERS\t= \"외 1명\"\nL.GENERIC_WARNING_OTHERS2\t= \"외 %d명\"\nL.GENERIC_WARNING_BERSERK\t= \"%s%s 후 광폭화\"\nL.GENERIC_TIMER_BERSERK\t\t= \"광폭화\"\nL.OPTION_TIMER_BERSERK\t\t= \"$spell:26662 타이머 바 보기\"\nL.GENERIC_TIMER_COMBAT\t\t= \"전투 시작\"\nL.OPTION_TIMER_COMBAT\t\t= \"전투 시작 타이머 바 보기\"\nL.BAD\t\t\t\t\t\t= \"바닥\"\nL.OPTION_HEALTH_FRAME\t\t= \"보스 HP 프레임 보기\"\n\nL.OPTION_CATEGORY_TIMERS\t\t= \"바\"\nL.OPTION_CATEGORY_WARNINGS\t= \"일반 알림\"\nL.OPTION_CATEGORY_WARNINGS_YOU\t= \"개인 알림\"\nL.OPTION_CATEGORY_WARNINGS_OTHER\t= \"대상 관련 알림\"\nL.OPTION_CATEGORY_WARNINGS_ROLE\t= \"역할 관련 알림\"\nL.OPTION_CATEGORY_SPECWARNINGS\t\t= \"특수 알림\"\n\nL.OPTION_CATEGORY_SOUNDS\t\t= \"음성\"\n--Sub cats for \"announce\" object\nL.OPTION_CATEGORY_DROPDOWNS\t\t= \"드롭다운 옵션\"\nL.OPTION_CATEGORY_YELLS\t\t\t= \"말풍선\"\nL.OPTION_CATEGORY_NAMEPLATES\t\t= \"이름표\"\nL.OPTION_CATEGORY_ICONS\t\t\t= \"공격대 징표\"\n\nL.AUTO_RESPONDED\t\t\t\t\t\t= \"귓속말에 자동응답 메시지를 보냈습니다.\"\nL.STATUS_WHISPER\t\t\t\t\t\t= \"%s: %s, %d/%d 생존\"\n--Bosses\nL.AUTO_RESPOND_WHISPER\t\t\t\t= \"%s님은 %s 전투 때문에 바쁩니다. (%s, %d/%d 생존)\"\nL.WHISPER_COMBAT_END_KILL\t\t\t= \"%s님이 %s 전투에서 승리했습니다!\"\nL.WHISPER_COMBAT_END_KILL_STATS\t\t= \"%s님이 %s 전투에서 승리했습니다! 총 %d회 승리했습니다.\"\nL.WHISPER_COMBAT_END_WIPE_AT\t\t\t= \"%s님이 %s %s에서 전멸했습니다.\"\nL.WHISPER_COMBAT_END_WIPE_STATS_AT\t= \"%s님이 %s %s에서 전멸했습니다. 이 난이도에서 총 %d회 전멸했습니다.\"\n--Scenarios (no percents. words like \"fighting\" or \"wipe\" changed to better fit scenarios)\nL.AUTO_RESPOND_WHISPER_SCENARIO\t\t= \"%s님이 %s 시나리오를 진행중입니다. (%d/%d 생존)\"\nL.WHISPER_SCENARIO_END_KILL\t\t\t= \"%s님이 %s 시나리오를 완료했습니다!\"\nL.WHISPER_SCENARIO_END_KILL_STATS\t= \"%s님이 %s 시나리오를 완료했습니다! 이 난이도를 %d회 완료했습니다!\"\nL.WHISPER_SCENARIO_END_WIPE\t\t\t= \"%s님이 %s 시나리오를 완료하지 못했습니다.\"\nL.WHISPER_SCENARIO_END_WIPE_STATS\t= \"%s님이 %s 시나리오를 완료하지 못했습니다. 이 난이도를 총 %d회 실패했습니다.\"\n\nL.VERSIONCHECK_HEADER\t\t= \"보스 모드 - 버전\"\nL.VERSIONCHECK_ENTRY_NO_DBM\t= \"%s: 설치된 보스 모드 없음\"\nL.VERSIONCHECK_FOOTER\t\t= L.DBM .. \"을 설치한 플레이어 %d명과 Bigwigs를 설치한 플레이어 %d명을 발견했습니다.\"\nL.VERSIONCHECK_OUTDATED\t\t= \"다음 %d명의 플레이어가 구버전 보스 모드를 사용중: %s\"\nL.YOUR_VERSION_OUTDATED\t\t= \"사용중인 \" .. L.DEADLY_BOSS_MODS .. \" 버전이 사용 기한을 지났습니다. \" .. L.UPDATEREMINDER_URL\nL.VOICE_PACK_OUTDATED\t\t= \"선택한 \" .. L.DBM .. \" 음성팩에 일부 음성이 들어있지 않습니다. 몇가지 경고 음성이 기본 효과음으로 재생됩니다. 최신 음성팩을 다운로드 받거나 제작자에게 연락하여 누락된 음성 파일을 추가해서 업데이트 할 것을 요청하시기 바랍니다\"\nL.VOICE_MISSING\t\t\t\t= \"선택한 \" .. L.DBM .. \" 음성팩을 찾을 수 없습니다. 오류일 경우 음성팩이 제대로 설치되어 있고 애드온 목록에서 활성화되어 있는지 확인해 보시기 바랍니다.\"\nL.VOICE_DISABLED\t\t\t\t= \"현재 \" .. L.DBM .. \" 음성팩이 한 개 이상 설치되어 있지만 사용하고 있는게 없습니다. 음성팩을 사용하려면 '음성 경고' 항목에서 음성팩이 지정되어 있는지 확인하세요. 음성팩을 사용할 의사가 없으면 음성팩을 삭제하시면 이 메시지는 더이상 출력되지 않습니다\"\nL.VOICE_COUNT_MISSING\t\t= \"초읽기 음성중 %d초로 설정된 음성/초읽기 팩을 찾을 수 없습니다. 기본 설정으로 초기화 되었습니다: %s\"\n\nL.UPDATEREMINDER_HEADER\t\t\t= \"사용중인 \" .. L.DEADLY_BOSS_MODS .. \" 버전의 사용 기한이 지났습니다.\\n 버전 %s (%s) 는 여기에서 다운로드할 수 있습니다: \" .. L.UPDATEREMINDER_URL\nL.UPDATEREMINDER_FOOTER\t\t\t= (IsMacClient() and \"Cmd-C\" or \"Ctrl-C\").. \"를 누르면 주소를 복사할 수 있습니다.\"\nL.UPDATEREMINDER_FOOTER_GENERIC\t= (IsMacClient() and \"Cmd-C\" or \"Ctrl-C\").. \"를 누르면 주소를 복사할 수 있습니다.\"\nL.UPDATEREMINDER_DISABLE\t\t\t= \"경고: \" .. L.DEADLY_BOSS_MODS .. \"의 버전이 오래되어 새로운 \"..L.DBM..\" 버전과 호환되지 않아 강제로 비활성화되며 업데이트 전까진 사용할 수 없습니다. 이는 구버전 모드가 당신과 파티/공대원의 플레이에 악영향을 미치지 않게 하기 위함입니다.\"\nL.UPDATEREMINDER_DISABLETEST\t\t\t= \"경고: \" .. L.DEADLY_BOSS_MODS.. \"의 버전이 오래되었고 테스트/베타 서버이기 때문에 강제로 비활성화되며 업데이트 전까진 사용할 수 없습니다. 이는 구버전 모드가 테스트 피드백에 사용되지 않게 하기 위함입니다.\"\nL.UPDATEREMINDER_HOTFIX\t\t\t= \"지금 사용하는 \" .. L.DBM .. \" 버전은 이 보스 전투에서 알려진 오류를 가지고 있습니다. 이 오류는 최신 버전으로 업데이트하면 수정됩니다.\"\nL.UPDATEREMINDER_HOTFIX_ALPHA\t= \"지금 사용하는 \" .. L.DBM .. \" 버전은 이 보스 전투에서 알려진 오류를 가지고 있습니다. 이 오류는 향후 출시될 버전 (또는 최신 ALPHA 버전)에서 수정되어있을 것입니다.\"\nL.UPDATEREMINDER_MAJORPATCH\t\t= \"경고: 대규모 패치로 인해 \" .. L.DEADLY_BOSS_MODS .. \" 버전이 사용 기한이 지나 업데이트하기 전까진 \" .. L.DBM .. \"이 비활성화됩니다. 이는 오래되고 호환되지 않는 코드로 인해 당신과 공대원이 조악한 플레이 경험을 겪지 않게 하기 위함입니다. 지금 바로 Curse, Wago, WoWI, GitHub 릴리즈 페이지 등에서 최신 버전을 다운로드 하시기 바랍니다.\"\nL.VEM\t\t\t\t\t\t\t= \"경고: \" .. L.DEADLY_BOSS_MODS .. \"와 Voice Encounter Mods를 함께 사용중입니다. 현재 설정으로는 DBM이 작동하지 않으며 로딩도 되지 않을 것입니다.\"\nL.OUTDATEDPROFILES\t\t\t\t= \"경고: DBM-Profiles가 이 버전의 \" .. L.DBM .. \"과 호환되지 않습니다. \" .. L.DBM .. \"이 읽기 전에 삭제해야 충돌을 방지할 수 있습니다.\"\nL.OUTDATEDSPELLTIMERS\t\t\t\t= \"경고: DBM-SpellTimers로 인해 \" .. L.DBM .. \"이 작동하지 않습니다. 반드시 비활성화 해야 \" .. L.DBM .. \"이 정상 작동합니다.\"\nL.OUTDATEDRLT\t\t\t\t\t\t= \"경고: DBM-RaidLeadTools가 \" .. L.DBM .. \"의 작동을 중단시켰습니다. DBM-RaidLeadTools는 더이상 지원되지 않기 때문에 반드시 삭제해야 \" .. L.DBM .. \"이 정상 작동합니다.\"\nL.VICTORYSOUND\t\t\t\t\t\t= \"경고: DBM-VictorySound가 이 버전의 \" .. L.DBM .. \"과 호환되지 않습니다. 반드시 삭제해야 \" .. L.DBM .. \"이 정상 작동합니다.\"\nL.DPMCORE\t\t\t\t\t\t= \"경고: Deadly PvP 모드는 더이상 개발되지 않으며 이 버전의 \" .. L.DBM .. \"과 호환되지 않습니다. 반드시 삭제해야 \" .. L.DBM .. \"이 정상 작동합니다.\"\nL.DBMLDB\t\t\t\t\t\t\t= \"경고: DBM-LDB는 이제 DBM-Core에 편입되었습니다. 같이 사용해도 문제가 생기는건 아니지만 가급적 애드온 폴더에서 'DBM-LDB' 폴더를 삭제하는걸 권장합니다\"\nL.DBMLOOTREMINDER\t\t\t\t= \"경고: 써드파티 모드인 DBM-LootReminder가 설치되었습니다. 이 애드온은 최신 WoW 클라이언트에 더이상 호환되지 않으며 \" .. L.DBM .. \"이 오작동하여 풀링 타이머를 전송하지 못하게 될 수 있습니다. 애드온 삭제를 권장합니다\"\nL.UPDATE_REQUIRES_RELAUNCH\t\t= \"경고: 지금 업데이트한 \" .. L.DBM .. \"은 게임 클라이언트를 완전히 재시작하기 전까진 정상 작동하지 않습니다. 이 업데이트엔 새 파일이 포함되어 있거나 UI 재시작으로는 로딩할 수 없는 .toc 파일의 변경 사항이 있습니다. 클라이언트 재시작 없이 사용할 경우 오류가 발생하거나 작동하지 않을 수 있습니다.\"\nL.OUT_OF_DATE_NAG\t\t\t\t= \"현재 사용중인 \" .. L.DBM .. \" 버전이 오래되었습니다. 이 전투에 대응하는 모듈은 새로운 기능을 탑재했거나 버그가 수정된 상태입니다. 향상된 레이드 경험을 누리고 싶다면 업데이트를 권장합니다.\"\n\nL.MOVABLE_BAR\t\t\t\t= \"드래그 하세요!\"\n\n--L.PIZZA_SYNC_INFO\t\t\t\t\t= \"|Hplayer:%1$s|h[%1$s]|h님이 당신에게 \" .. L.DBM .. \" 타이머를 전송했습니다\"\nL.PIZZA_SYNC_INFO\t\t\t\t\t= \"|Hplayer:%1$s|h[%1$s]|h님이 당신에게 \" .. L.DBM .. \" 타이머를 전송했습니다: '%2$s'\\n|HDBM:cancel:%2$s:nil|h|cff3588ff[타이머 취소]|r|h  |HDBM:ignore:%2$s:%1$s|h|cff3588ff[%1$s의 타이머 무시]|r|h\"\nL.PIZZA_CONFIRM_IGNORE\t\t\t= \"정말 %s의 \" .. L.DBM .. \" 타이머를 차단하시겠습니까? 이 공격대에 있는 동안에만 적용됩니다.\"\nL.PIZZA_ERROR_USAGE\t\t\t\t= \"사용법: /dbm [broadcast] timer <시간> <텍스트>. <시간>은 3초 이상이어야 합니다.\"\n\nL.MINIMAP_TOOLTIP_FOOTER\t\t= \"쉬프트 누르고 드래그로 이동\"\n\nL.RANGECHECK_HEADER\t\t\t= \"탐지 거리 (%dm)\"\nL.RANGECHECK_HEADERT\t\t\t= \"탐지 거리 (%dm-%d명)\"\nL.RANGECHECK_RHEADER\t\t\t= \"반전-탐지 거리 (%dm)\"\nL.RANGECHECK_RHEADERT\t\t= \"반전-탐지 거리 (%dm-%d명)\"\nL.RANGECHECK_SETRANGE\t\t= \"거리 설정\"\nL.RANGECHECK_SETTHRESHOLD\t= \"탐지할 최소 플레이어 수 설정\"\nL.RANGECHECK_SOUNDS\t\t\t= \"효과음\"\nL.RANGECHECK_SOUND_OPTION_1\t= \"거리 내에 플레이어가 1명 있을 경우 재생\"\nL.RANGECHECK_SOUND_OPTION_2\t= \"거리 내에 플레이어가 2명 이상 있을 경우 재생\"\nL.RANGECHECK_SOUND_0\t\t\t= \"효과음 없음\"\nL.RANGECHECK_SOUND_1\t\t\t= \"기본 효과음\"\nL.RANGECHECK_SOUND_2\t\t\t= \"짜증나는 효과음\"\nL.RANGECHECK_SETRANGE_TO\t\t= \"%dm\"\nL.RANGECHECK_OPTION_FRAMES\t= \"창 종류\"\nL.RANGECHECK_OPTION_RADAR\t= \"레이더 창 표시\"\nL.RANGECHECK_OPTION_TEXT\t\t= \"텍스트 창 표시\"\nL.RANGECHECK_OPTION_BOTH\t\t= \"모두 표시\"\nL.RANGERADAR_HEADER\t\t\t= \"거리:%d, 플레이어:%d\"\nL.RANGERADAR_BOSS_HEADER\t\t= \"보스 범위 (%dm)\"\nL.RANGERADAR_RHEADER\t\t\t= \"반전-거리:%d 플레이어:%d\"\nL.RANGERADAR_IN_RANGE_TEXT\t= \"거리 내 %d명 (%0.1fm)\"\nL.RANGECHECK_IN_RANGE_TEXT\t= \"거리 내 %d명\"--Text based doesn't need (%dyd), especially since it's not very accurate to the specific yard anyways\nL.RANGERADAR_IN_RANGE_TEXTONE\t= \"%s (%0.1fm)\"--One target\n\nL.INFOFRAME_SHOW_SELF\t\t= \"내 자원 항상 보기\"\t\t-- Always show your own power value even if you are below the threshold\nL.INFOFRAME_SETLINES\t\t\t= \"최대 줄 갯수 지정\"\n\tL.INFOFRAME_SETCOLS\t\t= \"최대 열 갯수 지정\"\nL.INFOFRAME_LINESDEFAULT\t\t= \"모드 기본값\"\nL.INFOFRAME_LINES_TO\t\t\t= \"줄 %d개\"\nL.INFOFRAME_COLS_TO\t\t\t= \"열 %d개\"\nL.INFOFRAME_POWER\t\t\t= \"기력\"\nL.INFOFRAME_AGGRO\t\t\t= \"어그로\"\nL.INFOFRAME_MAIN\t\t\t= \"주 자원:\"--Main power\nL.INFOFRAME_ALT\t\t\t\t= \"보조 자원:\"--Alternate Power\n\nL.LFG_INVITE\t\t\t\t\t\t= \"파티찾기 입장\"\n\nL.SLASHCMD_HELP\t\t\t\t= {\n\t\"사용 가능 슬래시 명령어:\",\n\t\"----------------\",\n\t\"/dbm unlock: 움직일 수 있는 상태 바 타이머를 표시합니다. (단축 명령어: move)\",\n\t\"/range <숫자> 또는 /distance <숫자>: 거리 창을 표시합니다. /rrange 또는 /rdistance는 색상을 반대로 표시합니다.\",\n\t\"/hudar <number>: HUD 기반 거리 탐지기를 표시합니다.\",\n\t\"/dbm timer: 사용자 지정 \" .. L.DBM .. \" 타이머를 시작합니다. 자세한 내용은 '/dbm timer'를 참고하세요.\",\n\t\"/dbm arrow: \" .. L.DBM .. \" 화살표를 표시합니다. 자세한 내용은 '/dbm arrow help'를 참고하세요.\",\n\t\"/dbm hud: \" .. L.DBM .. \" HUD를 표시합니다. 자세한 내용은 '/dbm hud'를 참고하세요.\",\n\t\"/dbm help2: 공격대 관리와 관련된 슬래시 명령어를 표시합니다.\"\n}\nL.SLASHCMD_HELP2\t\t\t\t= {\n\t\"사용 가능 슬래시 명령어:\",\n\t\"----------------\",\n\t\"/dbm pull <초>: 공격대에 <초> 만큼 풀링 타이머를 전송합니다. (승급 권한이 필요합니다. 단축 명령어: pull)\",\n\t\"/dbm break <분>: 공격대에 <분> 만큼 지속되는 휴식 타이머를 전송합니다. (승급 권한이 필요합니다. 단축 명령어: break)\",\n\t\"/dbm version: 공대원의 보스 모드 버전 검사를 실시합니다. (단축 명령어: ver)\",\n\t\"/dbm version2: 공대원 보스 모드 버전 검사 및 구버전 사용자에게 귓속말을 보냅니다. (단축 명령어: ver2)\",\n\t\"/dbm lag: 공격대 지연시간 검사 작업을 실행합니다.\",\n\t\"/dbm durability: 공대원의 내구도 검사를 실시합니다.\"\n}\nL.TIMER_USAGE\t= {\n\tL.DBM .. \" 타이머 명령어:\",\n\t\"--------------\",\n\t\"/dbm timer <초> <텍스트>: <초> 만큼 지속되는 <텍스트> 타이머가 시작됩니다.\",\n\t\"/dbm ltimer <초> <텍스트>: 취소하기 전까진 자동 반복되는 타이머가 시작됩니다.\",\n\t\"(공대장이나 승급자일 경우 'timer'와 'ltimer' 앞에 'Broadcast'를 입력하면 공격대에 공유)\",\n\t\"/dbm timer endloop: 반복 작동중인 모든 ltimer를 멈춥니다.\"\n}\n\nL.ERROR_NO_PERMISSION\t\t\t\t= \"이 명령어를 실행하기 위한 권한을 가지고 있지 않습니다.\"\nL.TIME_TOO_SHORT\t\t\t\t\t= \"풀링 타이머는 3초 이상으로 설정해야 합니다.\"\n\nL.BREAK_USAGE\t\t\t\t= \"쉬는 시간은 60분을 초과할 수 없습니다. 쉬는 시간은 초단위가 아니라 분단위로 입력해야 합니다.\"\nL.BREAK_START\t\t\t\t= \"쉬는 시간 시작 -- %s 받았습니다! (%s|1이;가; 전송)\"\nL.BREAK_MIN\t\t\t\t\t= \"%s분 후 쉬는 시간이 끝납니다!\"\nL.BREAK_SEC\t\t\t\t\t= \"%s초 후 쉬는 시간이 끝납니다!\"\nL.TIMER_BREAK\t\t\t\t= \"쉬는 시간!\"\nL.ANNOUNCE_BREAK_OVER\t\t= \"쉬는 시간이 %s에 끝났습니다\"\n\nL.TIMER_PULL\t\t\t\t= \"풀링\"\nL.ANNOUNCE_PULL_MODE\t\t= \"풀 모드: %s\"\nL.ANNOUNCE_PULL\t\t\t\t= \"%d초 후 풀링합니다. (%s|1이;가; 전송)\"\nL.ANNOUNCE_PULL_NOW\t\t\t= \"풀링 시작!\"\nL.ANNOUNCE_PULL_TARGET\t\t= \"%s|1을;를; %d초 후 풀링합니다. (%s|1이;가; 전송)\"\nL.ANNOUNCE_PULL_NOW_TARGET\t= \"%s 풀링 시작!\"\nL.GEAR_WARNING\t\t\t\t= \"경고: 장비를 확인하세요. 착용 아이템 레벨이 보유 아이템 레벨보다 %d 낮습니다.\"\nL.GEAR_WARNING_WEAPON\t\t= \"경고: 주 장비가 제대로 장착되어 있는지 확인하세요.\"\nL.GEAR_FISHING_POLE\t\t\t= \"낚싯대\"\n\nL.ACHIEVEMENT_TIMER_SPEED_KILL = \"업적\"--BATTLE_PET_SOURCE_6\n\n-- Auto-generated Warning Localizations\nL.AUTO_ANNOUNCE_TEXTS.you\t\t\t= \"당신에게 %s\"\nL.AUTO_ANNOUNCE_TEXTS.target\t\t\t= \"%s: >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetdistance\t= \"%s: >%%s< (%%d yd)\"\nL.AUTO_ANNOUNCE_TEXTS.targetsource\t= \">%%s<의 %s 시전: >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetcount\t= \"%s (%%s): >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetcountdistance\t= \"%s (%%s): >%%s< (%%d yd)\"\nL.AUTO_ANNOUNCE_TEXTS.incoming\t\t= \"%s 디버프 걸림\"\nL.AUTO_ANNOUNCE_TEXTS.incomingcount\t= \"%s 디버프 걸림 (%%s)\"\nL.AUTO_ANNOUNCE_TEXTS.ends\t\t\t= \"%s 종료\"\nL.AUTO_ANNOUNCE_TEXTS.endtarget\t\t= \"%s 종료: >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.fades\t\t\t= \"%s 사라짐\"\nL.AUTO_ANNOUNCE_TEXTS.addsleft\t\t= \"%s 남은 수: %%d\"\nL.AUTO_ANNOUNCE_TEXTS.cast\t\t\t= \"%s 시전: %.1f초\"\nL.AUTO_ANNOUNCE_TEXTS.soon\t\t\t= \"곧 %s\"\nL.AUTO_ANNOUNCE_TEXTS.sooncount\t\t= \"곧 %s (%%s)\"\nL.AUTO_ANNOUNCE_TEXTS.countdown\t\t= \"%s %%d초 전\"\nL.AUTO_ANNOUNCE_TEXTS.prewarn\t\t= \"%2$s 후 %1$s\"\nL.AUTO_ANNOUNCE_TEXTS.bait\t\t= \"곧 %s - 위치 유도\"\nL.AUTO_ANNOUNCE_TEXTS.stage\t\t\t= \"%s단계\"\nL.AUTO_ANNOUNCE_TEXTS.prestage\t\t= \"곧 %s단계\"\nL.AUTO_ANNOUNCE_TEXTS.stack\t\t\t= \"%s: >%%s< (%%d)\"\nL.AUTO_ANNOUNCE_TEXTS.moveto\t\t= \"%s - >%%s< 위치로 이동\"\n\nlocal prewarnOption = \"$spell:%s 사전 경고 보기\"\nL.AUTO_ANNOUNCE_OPTIONS.you\t\t\t= \"당신이 $spell:%s 대상이 된 경우 알림 보기\"\nL.AUTO_ANNOUNCE_OPTIONS.target\t\t= \"$spell:%s 대상 알림\"\nL.AUTO_ANNOUNCE_OPTIONS.targetdistance\t= \"$spell:%s 대상 알림 (거리 포함)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetNF\t\t= \"$spell:%s 대상 알림 (전역 대상 필터 무시)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetsource\t= \"$spell:%s 대상 알림 (시전자 포함)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetcount\t= \"$spell:%s 대상 알림 (횟수 포함)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetcountdistance\t= \"$spell:%s 대상 알림 (수와 거리 포함)\"\nL.AUTO_ANNOUNCE_OPTIONS.spell\t\t= \"$spell:%s 시전 완료 알림 보기\"\nL.AUTO_ANNOUNCE_OPTIONS.incoming\t= \"$spell:%s 주문이 디버프를 걸 때 알림\"\nL.AUTO_ANNOUNCE_OPTIONS.incomingcount\t= \"$spell:%s 주문이 디버프를 걸 때 알림 (횟수 포함)\"\nL.AUTO_ANNOUNCE_OPTIONS.ends\t\t\t= \"$spell:%s 지속 시간 종료시 알림 보기\"\nL.AUTO_ANNOUNCE_OPTIONS.endtarget\t= \"$spell:%s 지속 시간 종료시 알림 보기 (대상 포함)\"\nL.AUTO_ANNOUNCE_OPTIONS.fades\t\t= \"$spell:%s|1이;가; 사라졌을 때 알림 보기\"\nL.AUTO_ANNOUNCE_OPTIONS.addsleft\t\t= \"$spell:%s의 남은 수 알림 보기\"\nL.AUTO_ANNOUNCE_OPTIONS.cast\t\t\t= \"$spell:%s 시전 시작 알림 보기\"\nL.AUTO_ANNOUNCE_OPTIONS.soon\t\t= prewarnOption\nL.AUTO_ANNOUNCE_OPTIONS.sooncount\t= prewarnOption\nL.AUTO_ANNOUNCE_OPTIONS.countdown\t= \"$spell:%s의 초읽기 사전 경고 보기\"\nL.AUTO_ANNOUNCE_OPTIONS.prewarn\t\t= prewarnOption\nL.AUTO_ANNOUNCE_OPTIONS.bait\t\t= \"$spell:%s 사전 경고 보기 (위치 유도)\"\nL.AUTO_ANNOUNCE_OPTIONS.stage\t\t= \"%s단계 알림\"\nL.AUTO_ANNOUNCE_OPTIONS.stagechange\t= \"단계 전환 알림\"\nL.AUTO_ANNOUNCE_OPTIONS.prestage\t\t= \"%s단계로 넘어가기 전 경고 보기\"\nL.AUTO_ANNOUNCE_OPTIONS.count\t\t= \"$spell:%s 시전 완료 알림 보기 (횟수 포함)\"\nL.AUTO_ANNOUNCE_OPTIONS.stack\t\t= \"$spell:%s 중첩 알림\"\nL.AUTO_ANNOUNCE_OPTIONS.moveto\t\t= \"$spell:%s에 특정인 또는 특정 위치로 이동 알림 보기\"\n\nL.AUTO_SPEC_WARN_TEXTS.ends\t\t= \"%s 종료!\"\nL.AUTO_SPEC_WARN_TEXTS.fades\t\t= \"%s 사라짐!\"\nL.AUTO_SPEC_WARN_TEXTS.soon\t\t= \"곧 %s\"\nL.AUTO_SPEC_WARN_TEXTS.sooncount\t\t= \"곧 %s (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.bait\t\t= \"곧 %s - 위치 유도\"\nL.AUTO_SPEC_WARN_TEXTS.prewarn\t\t= \"%2$s 후 %1$s\"\nL.AUTO_SPEC_WARN_TEXTS.dispel\t\t= \"%s: >%%s< - 해제\"\nL.AUTO_SPEC_WARN_TEXTS.interrupt\t\t= \"%s - >%%s< 차단!\"\nL.AUTO_SPEC_WARN_TEXTS.interruptcount = \"%s - >%%s< 차단! (%%d번)\"\nL.AUTO_SPEC_WARN_TEXTS.you\t\t= \"%s: 당신\"\nL.AUTO_SPEC_WARN_TEXTS.youcount\t\t= \"%s (%%s): 당신\"\nL.AUTO_SPEC_WARN_TEXTS.youpos\t\t= \"%s (위치: %%s): 당신\"\nL.AUTO_SPEC_WARN_TEXTS.youposcount\t= \"%s (%%s) (위치: %%s) 당신\"\nL.AUTO_SPEC_WARN_TEXTS.soakpos\t\t= \"%s (뭉칠 위치: %%s)\"\nL.AUTO_SPEC_WARN_TEXTS.target\t\t= \"%s: >%%s<\"\nL.AUTO_SPEC_WARN_TEXTS.targetcount\t= \"%s (%%s): >%%s< \"\nL.AUTO_SPEC_WARN_TEXTS.defensive\t\t= \"%s - 생존기 켜세요\"\nL.AUTO_SPEC_WARN_TEXTS.taunt\t\t= \"%s: >%%s< - 지금 도발\"\nL.AUTO_SPEC_WARN_TEXTS.close\t\t= \"근처의 >%%2$s<에게 %1$s\"\nL.AUTO_SPEC_WARN_TEXTS.move\t\t= \"%s - 피하세요\"\nL.AUTO_SPEC_WARN_TEXTS.keepmove\t\t= \"%s - 계속 이동\"\nL.AUTO_SPEC_WARN_TEXTS.stopmove\t\t= \"%s - 이동 금지\"\nL.AUTO_SPEC_WARN_TEXTS.dodge\t\t= \"%s - 피하세요\"\nL.AUTO_SPEC_WARN_TEXTS.dodgecount\t= \"%s (%%s) - 피하세요\"\nL.AUTO_SPEC_WARN_TEXTS.dodgeloc\t\t= \"%s - %%s 자리 피하세요\"\nL.AUTO_SPEC_WARN_TEXTS.moveaway\t\t= \"%s - 거리 이격\"\nL.AUTO_SPEC_WARN_TEXTS.moveawaycount\t= \"%s (%%s) - 밖으로 나오세요\"\nL.AUTO_SPEC_WARN_TEXTS.moveto\t\t= \"%s - >%%s<|1으로;로; 이동\"\nL.AUTO_SPEC_WARN_TEXTS.soak\t\t= \"%s - 맞으세요\"\nL.AUTO_SPEC_WARN_TEXTS.soakcount\t= \"%s - 맞으세요 %%s\"\nL.AUTO_SPEC_WARN_TEXTS.jump\t\t= \"%s - 점프\"\nL.AUTO_SPEC_WARN_TEXTS.run\t\t= \"%s - 도망치세요\"\nL.AUTO_SPEC_WARN_TEXTS.runcount\t\t= \"%s - 도망치세요 (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.cast\t\t= \"%s - 주문 시전 중지\"\nL.AUTO_SPEC_WARN_TEXTS.lookaway\t\t= \"%%2$s에게 %1$s - 고개 돌리세요\"\nL.AUTO_SPEC_WARN_TEXTS.reflect\t\t= \"%s: >%%s< - 공격 중지\"\nL.AUTO_SPEC_WARN_TEXTS.stack\t\t= \"당신에게 %s (%%d중첩)\"\nL.AUTO_SPEC_WARN_TEXTS.switch\t\t= \"%s - 대상 바꾸세요\"\nL.AUTO_SPEC_WARN_TEXTS.switchcount\t= \"%s - 대상 바꾸세요 (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.gtfo\t\t= \"%%s 깔림 - 피하세요\"\nL.AUTO_SPEC_WARN_TEXTS.adds\t\t= \"쫄 등장 - 대상 바꾸세요\"\nL.AUTO_SPEC_WARN_TEXTS.addscount\t= \"쫄 등장 - 대상 바꾸세요 (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.addscustom\t= \"쫄 등장 - %%s\"\nL.AUTO_SPEC_WARN_TEXTS.targetchange\t= \"대상 변경 - %%s 치세요\"\n\n-- Auto-generated Special Warning Localizations\nL.AUTO_SPEC_WARN_OPTIONS.spell\t\t\t= \"$spell:%s 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.ends\t\t\t= \"$spell:%s 지속 시간 종료시 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.fades\t\t\t= \"$spell:%s|1이;가; 사라졌을 때 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.soon\t\t\t= \"$spell:%s 이전에 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.sooncount\t\t= \"$spell:%s 이전에 특수 알림 보기 (횟수 포함)\"\nL.AUTO_SPEC_WARN_OPTIONS.bait\t\t\t= \"$spell:%s 이전에 특수 알림 보기 (위치 유도)\"\nL.AUTO_SPEC_WARN_OPTIONS.prewarn\t\t\t= \"$spell:%2$s %1$s초 전에 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.dispel\t\t\t= \"$spell:%s 해제/마법 훔치기 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.interrupt\t\t= \"$spell:%s 차단 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.interruptcount\t\t= \"$spell:%s 차단 특수 알림 보기 (횟수 포함)\"\nL.AUTO_SPEC_WARN_OPTIONS.you\t\t\t= \"당신이 $spell:%s 대상이면 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.youcount\t\t= \"당신이 $spell:%s 대상이면 특수 알림 보기 (횟수 포함)\"\nL.AUTO_SPEC_WARN_OPTIONS.youpos\t\t\t= \"당신이 $spell:%s 대상이면 특수 알림 보기 (위치 포함)\"\nL.AUTO_SPEC_WARN_OPTIONS.youposcount\t\t= \"당신이 $spell:%s 대상이면 특수 알림 보기 (위치와 횟수 포함)\"\nL.AUTO_SPEC_WARN_OPTIONS.soakpos\t\t\t= \"$spell:%s 대상에게 뭉쳐야 할 때 특수 알림 보기 (위치 포함)\"\nL.AUTO_SPEC_WARN_OPTIONS.target\t\t\t= \"$spell:%s 대상 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.targetcount\t\t= \"$spell:%s 대상 특수 알림 보기 (횟수 포함)\"\nL.AUTO_SPEC_WARN_OPTIONS.defensive\t\t= \"$spell:%s에 생존기 사용 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.taunt\t\t\t= \"다른 탱커가 $spell:%s 대상이면 도발 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.close\t\t\t= \"당신 근처에 $spell:%s 대상이 있으면 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.move\t\t\t= \"$spell:%s 피하기 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.keepmove\t\t= \"$spell:%s에 계속 이동 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.stopmove\t\t= \"$spell:%s에 이동 금지 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.dodge\t\t\t= \"$spell:%s 피하기 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.dodgecount\t\t= \"$spell:%s 피하기 특수 알림 보기 (횟수 포함)\"\nL.AUTO_SPEC_WARN_OPTIONS.dodgeloc\t\t= \"$spell:%s 피하기 특수 알림 보기 (피해야하는 장소 포함)\"\nL.AUTO_SPEC_WARN_OPTIONS.moveaway\t\t= \"$spell:%s에 거리 이격 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.moveawaycount\t\t= \"$spell:%s에 밖으로 나오기 특수 알림 보기 (횟수 포함)\"\nL.AUTO_SPEC_WARN_OPTIONS.moveto\t\t\t= \"$spell:%s에 특정인 또는 특정 위치로 이동 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.soak\t\t\t= \"$spell:%s 맞기 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.soakcount\t\t= \"$spell:%s 맞기 특수 알림 보기 (횟수 포함)\"\nL.AUTO_SPEC_WARN_OPTIONS.jump\t\t\t= \"$spell:%s에 점프 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.run\t\t\t= \"$spell:%s|1으로;로;부터 도망 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.runcount\t\t= \"$spell:%s|1으로;로;부터 도망 특수 알림 보기 (횟수 포함)\"\nL.AUTO_SPEC_WARN_OPTIONS.cast\t\t\t= \"$spell:%s에 주문 시전 중지 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.lookaway\t\t= \"$spell:%s에 고개 돌리기 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.reflect\t\t= \"$spell:%s에 공격 중지 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.count\t\t\t= \"$spell:%s 특수 알림 보기 (횟수 포함)\"\nL.AUTO_SPEC_WARN_OPTIONS.stack\t\t\t= \"당신이 $spell:%2$s %1$d중첩 이상이 된 경우 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.switch\t\t\t= \"$spell:%s에 대상 변경 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.switchcount\t\t= \"$spell:%s에 대상 변경 특수 알림 보기 (횟수 포함)\"\nL.AUTO_SPEC_WARN_OPTIONS.gtfo\t\t\t= \"바닥 피하기 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.adds\t\t\t= \"쫄 등장시 대상 변경 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.addscount\t\t= \"쫄 등장시 대상 변경 특수 알림 보기 (횟수 포함)\"\nL.AUTO_SPEC_WARN_OPTIONS.addscustom\t\t= \"쫄 등장시 특수 알림 보기\"\nL.AUTO_SPEC_WARN_OPTIONS.targetchange\t\t= \"점사 우선순위 변경시 특수 알림 보기\"\n\n-- Auto-generated Timer Localizations\nL.AUTO_TIMER_TEXTS.active\t\t= \"%s 종료\"--Buff/Debuff/event on boss\nL.AUTO_TIMER_TEXTS.fades\t\t\t= \"%s 사라짐\"--Buff/Debuff on players\nL.AUTO_TIMER_TEXTS.ai\t\t\t\t= \"%s AI 예상\"\nL.AUTO_TIMER_TEXTS.cd\t\t\t\t= \"%s 쿨타임\"\nL.AUTO_TIMER_TEXTS.cdcount\t\t= \"%s (%%s) 쿨타임\"\nL.AUTO_TIMER_TEXTS.cdsource\t\t= \"%s 쿨타임: >%%s<\"\nL.AUTO_TIMER_TEXTS.cdspecial\t\t= \"특수 능력 쿨타임\"\nL.AUTO_TIMER_TEXTS.cdspecialshort\t= \"~특수 능력\"\nL.AUTO_TIMER_TEXTS.next\t\t\t= \"다음 %s\"\nL.AUTO_TIMER_TEXTS.nextcount\t\t= \"다음 %s (%%s)\"\nL.AUTO_TIMER_TEXTS.nextsource\t\t= \"다음 %s: %%s\"\nL.AUTO_TIMER_TEXTS.nextspecial\t\t= \"다음 특수 능력\"\nL.AUTO_TIMER_TEXTS.nextspecialshort\t= \"특수 능력\"\n\nL.AUTO_TIMER_TEXTS.varspecial\t\t\t= \"특수 스킬\"--Now same as next, as the ~ was moved to timer number\n\nL.AUTO_TIMER_TEXTS.stage\t\t\t= \"다음 단계\"\nL.AUTO_TIMER_TEXTS.stageshort\t\t= \"단계\"\nL.AUTO_TIMER_TEXTS.adds\t\t\t= \"쫄 등장\"\nL.AUTO_TIMER_TEXTS.addsshort\t\t= \"쫄\"\nL.AUTO_TIMER_TEXTS.addscustom\t\t= \"쫄 등장 (%%s)\"\nL.AUTO_TIMER_TEXTS.addscustomshort\t= \"쫄 (%%s)\"\nL.AUTO_TIMER_TEXTS.roleplay\t\t= \"NPC 대사\"\n\nL.AUTO_TIMER_OPTIONS.target\t\t= \"$spell:%s 디버프 타이머 바 보기 (%ss)\"\nL.AUTO_TIMER_OPTIONS.targetcount\t= \"$spell:%s 디버프 타이머 바 보기 (횟수 포함) (%ss)\"\nL.AUTO_TIMER_OPTIONS.cast\t\t= \"$spell:%s 시전 타이머 바 보기 (%ss)\"\nL.AUTO_TIMER_OPTIONS.castcount\t\t= \"$spell:%s 시전 타이머 바 보기 (횟수 포함) (%ss)\"\nL.AUTO_TIMER_OPTIONS.castsource\t\t= \"$spell:%s 시전 타이머 바 보기 (시전자 이름 포함) (%ss)\"\nL.AUTO_TIMER_OPTIONS.active\t\t= \"$spell:%s 지속 시간 타이머 바 보기 (%ss)\"\nL.AUTO_TIMER_OPTIONS.fades\t\t= \"$spell:%s 남은 시간 타이머 바 보기 (%ss)\"\nL.AUTO_TIMER_OPTIONS.ai\t\t\t\t= \"$spell:%s 쿨타임의 인공지능 예상 타이머 바 보기 (%ss)\"\nL.AUTO_TIMER_OPTIONS.cd\t\t\t\t= \"$spell:%s 쿨타임 타이머 바 보기 (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdcount\t\t= \"$spell:%s 쿨타임 타이머 바 보기 (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdnp\t\t\t\t= \"$spell:%s 쿨타임 타이머를 이름표에만 표시 (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdnpcount\t\t\t= \"$spell:%s 쿨타임 타이머를 이름표에만 표시 (횟수 포함) (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdsource\t\t= \"$spell:%s 쿨타임 타이머 바 보기 (시전자 이름 포함) (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdspecial\t\t= \"특수 능력 쿨타임 타이머 바 보기 (%ss)\"\nL.AUTO_TIMER_OPTIONS.next\t\t= \"다음 $spell:%s 타이머 바 보기 (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextcount\t\t= \"다음 $spell:%s 타이머 바 보기 (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextnp\t\t\t\t= \"다음 $spell:%s 타이머를 이름표에만 표시 (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextnpcount\t\t= \"다음 $spell:%s 타이머를 이름표에만 표시 (횟수 포함) (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextsource\t\t= \"다음 $spell:%s 타이머 바 보기 (시전자 이름 포함) (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextspecial\t\t= \"다음 특수 능력 타이머 바 보기 (%ss)\"\n\nL.AUTO_TIMER_OPTIONS.var\t\t\t\t= \"$spell:%s 쿨타임 타이머 바 보기 (시간 차이 포함) (%ss)\"\nL.AUTO_TIMER_OPTIONS.varcount\t\t\t= \"$spell:%s 쿨타임 타이머 바 보기 (횟수 및 시간 차이 포함) (%ss)\"\nL.AUTO_TIMER_OPTIONS.varnp\t\t\t= \"$spell:%s 쿨타임을 이름표 전용 타이머로 보기 (시간 차이 포함) (%ss)\"\nL.AUTO_TIMER_OPTIONS.varpnp\t\t\t= \"$spell:%s 쿨타임을 이름표 전용 타이머로 가장 우선해서 보기 (시간 차이 포함) (%ss)\"\nL.AUTO_TIMER_OPTIONS.varsource\t\t\t= \"$spell:%s 쿨타임 타이머 바 보기 (시전자 및 시간 차이 포함) (%ss)\"\nL.AUTO_TIMER_OPTIONS.varspecial\t\t\t= \"특수 스킬 쿨타임 타이머 바 보기 (시간 차이 포함) (%ss)\"\nL.AUTO_TIMER_OPTIONS.varcombo\t\t\t= \"연계 스킬 쿨타임 타이머 바 보기 (시간 차이 포함) (%ss)\"\n\nL.AUTO_TIMER_OPTIONS.achievement\t\t= \"%s 업적의 타이머 바 보기 (%ss)\"\nL.AUTO_TIMER_OPTIONS.stage\t\t= \"다음 단계 타이머 바 보기 (%ss)\"\nL.AUTO_TIMER_OPTIONS.adds\t\t= \"쫄 등장 타이머 바 보기 (%ss)\"\nL.AUTO_TIMER_OPTIONS.addscustom\t\t= \"쫄 등장 타이머 바 보기 (%ss)\"\nL.AUTO_TIMER_OPTIONS.roleplay\t\t= \"NPC 대사 지속 시간 타이머 바 보기\"\n\nL.AUTO_ICONS_OPTION_TARGETS\t\t\t\t= \"$spell:%s 대상에 공격대 징표 설정\"--Usually used for player targets with no specific sorting\nL.AUTO_ICONS_OPTION_TARGETS_TANK_A\t\t= \"$spell:%s 대상에 공격대 징표 설정 (탱커 근접 원거리 순서 및 이름 순서 우선)\"\nL.AUTO_ICONS_OPTION_TARGETS_TANK_R\t\t= \"$spell:%s 대상에 공격대 징표 설정 (탱커 근접 원거리 순서 및 공격대 배치 순서 우선)\"\nL.AUTO_ICONS_OPTION_TARGETS_MELEE_A\t\t= \"$spell:%s 대상에 공격대 징표 설정 (근접 캐릭터와 이름 순서 우선)\"\nL.AUTO_ICONS_OPTION_TARGETS_MELEE_R\t\t= \"$spell:%s 대상에 공격대 징표 설정 (근접 캐릭터와 공격대 배치 순서 우선)\"\nL.AUTO_ICONS_OPTION_TARGETS_RANGED_A\t= \"$spell:%s 대상에 공격대 징표 설정 (원거리 캐릭터와 이름 순서 우선)\"\nL.AUTO_ICONS_OPTION_TARGETS_RANGED_R\t= \"$spell:%s 대상에 공격대 징표 설정 (원거리 캐릭터와 공격대 배치 순서 우선)\"\nL.AUTO_ICONS_OPTION_TARGETS_ALPHA\t\t= \"$spell:%s 대상에 공격대 징표 설정 (이름순)\"\nL.AUTO_ICONS_OPTION_TARGETS_ROSTER\t\t= \"$spell:%s 대상에 공격대 징표 설정 (공격대 배치 순서 우선)\"\nL.AUTO_ICONS_OPTION_NPCS\t\t\t\t= \"$spell:%s에 공격대 징표 설정\"--usually used for npcs/mobs\nL.AUTO_ICONS_OPTION_CONFLICT\t\t= \" (다른 옵션과 충돌을 일으킬 수 있음)\"\nL.AUTO_ARROW_OPTION_TEXT\t\t\t= \"$spell:%s 대상을 향하는 \" .. L.DBM .. \" 화살표 보기\"\nL.AUTO_ARROW_OPTION_TEXT2\t\t= \"$spell:%s 대상과 반대 방향의 \" .. L.DBM .. \" 화살표 보기\"\nL.AUTO_ARROW_OPTION_TEXT3\t\t= \"$spell:%s 특정 지점을 가리키는 \" .. L.DBM .. \" 화살표 보기\"\nL.AUTO_YELL_OPTION_TEXT.shortyell\t= \"$spell:%s 대상일 때 말풍선으로 알리기\"\nL.AUTO_YELL_OPTION_TEXT.yell\t\t= \"$spell:%s 대상일 때 말풍선으로 알리기 (플레이어 이름 포함)\"\nL.AUTO_YELL_OPTION_TEXT.count\t\t= \"$spell:%s 대상일 때 말풍선으로 알리기 (횟수 포함)\"\nL.AUTO_YELL_OPTION_TEXT.fade\t\t= \"$spell:%s 지속 시간이 끝나갈 때 말풍선으로 알리기 (주문 이름 및 초읽기 포함)\"\nL.AUTO_YELL_OPTION_TEXT.shortfade\t= \"$spell:%s 지속 시간이 끝나갈 때 말풍선으로 알리기 (초읽기 포함)\"\nL.AUTO_YELL_OPTION_TEXT.iconfade\t\t= \"$spell:%s 지속 시간이 끝나갈 때 말풍선으로 알리기 (초읽기 및 공격대 징표 포함)\"\nL.AUTO_YELL_OPTION_TEXT.position\t\t= \"$spell:%s 대상일 때 말풍선으로 알리기 (위치와 이름 포함)\"\nL.AUTO_YELL_OPTION_TEXT.shortposition\t= \"$spell:%s 대상일 때 말풍선으로 알리기 (위치 포함)\"\nL.AUTO_YELL_OPTION_TEXT.combo\t\t= \"$spell:%s|1과;와; 다른 디버프가 같이 걸렸을 때 말풍선으로 알리기 (사용자 지정 문자 포함)\"\nL.AUTO_YELL_OPTION_TEXT.repeatplayer\t= \"$spell:%s에 걸렸을 때 말풍선 알림 반복 (플레이어 이름 포함)\"\nL.AUTO_YELL_OPTION_TEXT.repeaticon\t= \"$spell:%s에 걸렸을 때 말풍선 알림 반복 (공격대 징표 포함)\"\nL.AUTO_YELL_ANNOUNCE_TEXT.yell\t\t= UnitName(\"player\") .. \"에게 %s\"\nL.AUTO_YELL_ANNOUNCE_TEXT.count\t\t= UnitName(\"player\") .. \"에게 %s (%%d)\"\nL.AUTO_YELL_ANNOUNCE_TEXT.fade\t\t= \"%s %%d초 후 사라짐\"\nL.AUTO_YELL_ANNOUNCE_TEXT.position\t= \"{rt%%3$d}\" .. UnitName(\"player\") .. \"{rt%%3$d}에게 %1$s %%2$s\"\nL.AUTO_YELL_ANNOUNCE_TEXT.combo\t\t= \"%s랑 %%s 걸림\"\nL.AUTO_YELL_CUSTOM_FADE\t\t\t\t= \"%s 사라짐\"\nL.AUTO_HUD_OPTION_TEXT\t\t\t\t= \"$spell:%s에 HUD 표시 (중단됨)\"\nL.AUTO_HUD_OPTION_TEXT_MULTI\t\t= \"여러 보스 기술에 HUD 표시 (중단됨)\"\nL.AUTO_NAMEPLATE_OPTION_TEXT\t\t= \"호환되는 이름표 애드온이나 \"..L.DBM..\"을 사용하여 $spell:%s 오라를 이름표에 표시\"\nL.AUTO_NAMEPLATE_OPTION_TEXT_FORCED\t= \"\"..L.DBM..\"만을 사용하여 $spell:%s 오라를 이름표에 표시\"\nL.AUTO_RANGE_OPTION_TEXT\t\t= \"$spell:%2$s 범위에 대한 거리 창 보기 (%1$sm)\"\nL.AUTO_RANGE_OPTION_TEXT_SHORT\t\t= \"거리 창 보기 (%sm)\"\nL.AUTO_RRANGE_OPTION_TEXT\t\t= \"$spell:%2$s 범위에 대한 반전 거리 창 보기 (%1$sm)\"\nL.AUTO_RRANGE_OPTION_TEXT_SHORT\t\t= \"반전 거리 창 보기 (%sm)\"\nL.AUTO_INFO_FRAME_OPTION_TEXT\t\t= \"$spell:%s|1을;를; 정보 창에 표시\"\nL.AUTO_INFO_FRAME_OPTION_TEXT2\t\t= \"전투 전반에 관한 사항을 정보 창에 표시\"\nL.AUTO_INFO_FRAME_OPTION_TEXT3\t\t= \"$spell:%s|1을;를; 정보 창에 표시 (%%s의 제한 수치 이상인 경우)\"\nL.AUTO_READY_CHECK_OPTION_TEXT\t\t= \"보스가 풀링되면 전투 준비 효과음 듣기 (보스를 대상으로 잡지 않아도 재생)\"\nL.AUTO_SPEEDCLEAR_OPTION_TEXT\t\t= \"%s의 완료 신기록 타이머 표시\"\nL.AUTO_PRIVATEAURA_OPTION_TEXT\t\t= \"이 전투에서 설정한 $spell:%s 개인 오라에 DBM 효과음 경고를 재생합니다. 효과음 우선 순위: 음성팩을 설치했다면 음성팩을 우선 사용하며 없으면 Air Horn 효과음으로 대체됩니다\"\n\n--Sounds\nL.AUTO_SOUND_OPTION_TEXT\t\t\t= \"$spell:%d에서 소리를 재생합니다\"\nL.AUTO_SOUND_OPTION_TEXT5\t\t\t= \"$spell:%d까지 5초 오디오 카운트다운\"\nL.AUTO_SOUND_OPTION_TEXT3\t\t\t= \"$spell:%d까지 3초 오디오 카운트다운\"\nL.AUTO_SOUND_OPTION_TEXT_YOU\t\t= \"$spell:%d에서 소리 재생\"\nL.AUTO_SOUND_OPTION_TEXT_SOON\t\t= \"곧 $spell:%d에서 소리 재생\"\nL.AUTO_SOUND_OPTION_TEXT_CLOSE\t\t= \"주변 $spell:%d에서 소리 재생\"\n\n-- New special warnings\nL.MOVE_WARNING_BAR\t\t\t\t= \"알림 이동\"\nL.MOVE_WARNING_MESSAGE\t\t\t= L.DEADLY_BOSS_MODS .. \"를 이용해 주셔셔 감사합니다.\"\nL.MOVE_SPECIAL_WARNING_BAR\t\t= \"특수 알림 이동\"\nL.MOVE_SPECIAL_WARNING_TEXT\t\t= \"특수 알림\"\n\nL.HUD_INVALID_TYPE\t\t\t= \"올바르지 않은 HUD 형식이 정의되었습니다\"\nL.HUD_INVALID_TARGET\t\t\t= \"HUD에 올바른 대상이 주어지지 않았습니다\"\nL.HUD_INVALID_SELF\t\t\t= \"자신을 HUD 대상으로 설정할 수 없습니다\"\nL.HUD_INVALID_ICON\t\t\t= \"공격대 징표가 없는 대상엔 징표 기반 HUD 기능을 사용할 수 없습니다\"\nL.HUD_SUCCESS\t\t\t\t= \"HUD가 입력한 정보를 표시하기 시작합니다. %s 후 자동으로 사라지며 '/dbm hud hide'를 입력하면 즉시 숨길 수 있습니다.\"\nL.HUD_USAGE\t= {\n\tL.DBM .. \" HUD 사용법:\",\n\t\"--------------------\",\n\t\"/dbm hud <형식> <대상> <지속 시간>: 지정한 시간 동안 대상을 가리키는 HUD를 생성\",\n\t\"유효한 형식: arrow, red, blue, green, yellow, icon (대상에게 공격대 징표가 설정되어 있어야 함)\",\n\t\"유효한 대상: target, focus, <대상이름>\",\n\t\"유효한 시간: 아무 숫자(초단위). 지정하지 않으면 20분간 적용됩니다.\",\n\t\"/dbm hud hide: 사용자가 생성한 HUD를 비활성화\"\n}\n\nL.ARROW_MOVABLE\t\t\t\t\t\t= \"화살표 이동\"\nL.ARROW_WAY_USAGE\t\t\t\t\t= \"/dway <x> <y>: 특정 지점을 가리키는 화살표를 생성합니다 (로컬 지역 지도 좌표 사용)\"\nL.ARROW_WAY_SUCCESS\t\t\t\t= \"화살표를 숨기려면 '/dbm arrow hide' 또는 화살표 지점까지 도달하세요\"\nL.ARROW_ERROR_USAGE\t= {\n\tL.DBM .. \" 화살표 사용법:\",\n\t\"------------------\",\n\t\"/dbm arrow <x> <y>: 지정된 위치를 가리키는 화살표 생성 (세계지도 좌표 사용)\",\n\t\"/dbm arrow map <x> <y>: 지정된 위치를 가리키는 화살표 생성 (지역지도 좌표 사용)\",\n\t\"/dbm arrow <플레이어>: 파티 또는 공격대에서 지정한 <플레이어>를 가리키는 화살표 생성 (대소문자 구분!)\",\n\t\"/dbm arrow hide: 화살표 숨김\",\n\t\"/dbm arrow move: 화살표 이동 가능\"\n}\n\nL.SPEED_KILL_TIMER_TEXT\t= \"최고 승리 기록\"\nL.SPEED_CLEAR_TIMER_TEXT\t= \"최고 완료 기록\"\nL.COMBAT_RES_TIMER_TEXT\t= \"다음 전투 부활 충전\"\nL.TIMER_RESPAWN\t\t= \"%s 재생성\"\n\nL.LAG_CHECKING\t\t\t\t= \"공격대의 지연시간 확인중...\"\nL.LAG_HEADER\t\t\t\t\t= L.DEADLY_BOSS_MODS .. \" - 지연시간 확인 결과\"\nL.LAG_ENTRY\t\t\t\t\t= \"%s: 서버 지연시간 [%d ms] / 개인 지연시간 [%d ms]\"\nL.LAG_FOOTER\t\t\t\t\t= \"응답없음: %s\"\n\nL.DUR_CHECKING\t\t\t\t= \"공격대 내구도 검사중...\"\nL.DUR_HEADER\t\t\t\t\t= L.DEADLY_BOSS_MODS .. \" - 내구도 검사 결과\"\nL.DUR_ENTRY\t\t\t\t\t= \"%s: 내구도 [%d 퍼센트] / 깨진 장비 [%s]\"\nL.LAG_FOOTER\t\t\t\t\t= \"응답 없음: %s\"\n\nL.OVERRIDE_ACTIVATED\t\t\t\t\t= \"이 전투에서 공대장에 의해 설정 강제 적용이 활성화되었습니다\"\n\n--LDB\nL.LDB_TOOLTIP_HELP1\t\t\t= \"왼쪽 클릭으로 \" .. L.DBM .. \" 열기\"\nL.SILENTMODE_IS\t\t\t\t\t= \"조용함 모드 \"\n\nL.WORLD_BUFFS.hordeOny\t\t= \"호드의 백성들이여, 오그리마의 주민들이여, 모두 와서 호드의 영웅을 찬양하라.\"\nL.WORLD_BUFFS.allianceOny\t= \"스톰윈드의 주민들과 모든 얼라이언스여! 오늘, 역사가 이루어졌노라.\"\nL.WORLD_BUFFS.hordeNef\t\t= \"네파리안이 쓰러졌다! 오그리마의 백성들이여\"\nL.WORLD_BUFFS.allianceNef\t= \"얼라이언스의 시민들이여, 검은바위부족의 군주가 쓰러졌다!\"\nL.WORLD_BUFFS.zgHeart\t\t= \"이제 한 가지 일만 더 하면 영혼의 약탈자의 위협을 완전히 제거할 수 있겠군...\"\nL.WORLD_BUFFS.zgHeartBooty\t= \"공포의 혈신, 영혼의 약탈자 학카르가 패했군! 이제 더 이상 두려워할 필요 없어!\"\nL.WORLD_BUFFS.zgHeartYojamba\t= \"나의 종복들이여, 의식을 시작하라! 학카르의 심장을 다시 공허의 차원으로 쫓아내야 한다!\"\nL.WORLD_BUFFS.rendHead\t\t= \"가짜 대족장 렌드 블랙핸드가 쓰러졌도다!\"\n\n--Retail Globals\nL.RAID_INFO_WORLD_BOSS\t\t= \"야외 우두머리\"\nL.SCENARIO_STAGE\t\t\t= \"%d단계\"\nL.SPECIALIZATION\t\t\t= \"전문화\" -- ID: 22433\n-- EJ\nL.HARD_MODE\t\t\t\t\t= \"어려움 모드\" -- 17220\nL.BOSS_YOU_DEFEATED\t\t\t= \"우두머리 처치\" -- 25559\nL.BOSS_KILL_SUBTITLE\t\t= \"위르그림\" -- 25560\n"
  },
  {
    "path": "DBM-Core/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\nif not DBM_CORE_L then DBM_CORE_L = {} end\n\nlocal L = DBM_CORE_L\n\nL.HOW_TO_USE_MOD\t\t\t\t\t= \"Добро пожаловать в \" .. L.DBM .. \". Наберите /dbm help, чтобы получить список поддерживаемых команд. Для доступа к настройкам наберите /dbm в чате. Загрузите конкретные зоны вручную, чтобы настроить определённых боссов на свой вкус. \" .. L.DBM .. \" установит настройки по умолчанию для Вашей специализации, но Вы, возможно, захотите настроить их более тонко.\"\nL.SILENT_REMINDER\t\t\t\t\t= \"Напоминание: \" .. L.DBM .. \" всё ещё в тихом режиме.\"\n-- L.NEWS_UPDATE\t\t\t\t\t\t= \"|h|c11ff1111Новости|r|h: Это обновление представляет собой повторный выпуск версии 9.1.9 для устранения ложного обнаружения вредоносного ПО в хэше предыдущего выпуска файла. Подробнее об этом |Hgarrmission:DBM:news|h|cff3588ff[здесь]|r|h\"\n\nL.COPY_URL_DIALOG_NEWS\t\t\t\t= \"Чтобы прочитать последние новости, перейдите по ссылке ниже\"\n\nL.LOAD_MOD_ERROR\t\t\t\t\t= \"Ошибка при загрузке босс модуля для %s: %s\"\nL.LOAD_MOD_SUCCESS\t\t\t\t\t= \"Загружен модуль для '%s'. Для дополнительных настроек введите /dbm или /dbm help в чате.\"\nL.LOAD_MOD_COMBAT\t\t\t\t\t= \"Загрузка '%s' отложена до выхода из боя\"\nL.LOAD_GUI_ERROR\t\t\t\t\t= \"Не удалось загрузить GUI: %s\"\nL.LOAD_GUI_COMBAT\t\t\t\t\t= \"GUI не может быть изначально загружено в бою. GUI будет загружено после боя. После загрузки GUI Вы сможете загружать его в бою.\"\nL.BAD_LOAD\t\t\t\t\t\t\t= L.DBM .. \" не удалось полностью загрузить модуль для этого подземелья, т.к. Вы находитесь в режиме боя. Как только Вы выйдете из боя, пожалуйста, сделайте /console reloadui как можно скорее.\"\nL.LOAD_MOD_VER_MISMATCH\t\t\t\t= \"%s не может быть загружен, потому что Ваш DBM-Core не соответствует требованиям. Требуется обновлённая версия.\"\nL.LOAD_MOD_EXP_MISMATCH\t\t\t\t= \"%s не может быть загружен, потому что он создан для дополнения WoW, которое в данный момент недоступно. Когда дополнение станет доступно, модуль заработает автоматически.\"\nL.LOAD_MOD_TOC_MISMATCH\t\t\t\t= \"%s не может быть загружен, потому что он создан для патча WoW (%s), который в данный момент недоступен. Когда патч станет доступен, модуль заработает автоматически.\"\nL.LOAD_MOD_DISABLED\t\t\t\t\t= \"%s установлен, но в данный момент отключён. Этот модуль не будет загружен, пока Вы его не включите.\"\nL.LOAD_MOD_DISABLED_PLURAL\t\t\t= \"%s установлены, но в данный момент отключены. Эти модули не будут загружены, пока Вы их не включите.\"\n\nL.COPY_URL_DIALOG\t\t\t\t\t= \"Копировать ссылку\"\n\nL.NO_RANGE\t\t\t\t\t\t\t= \"Радар не может быть использован в подземельях. Будет использоваться текстовое окно проверки дистанции\"\nL.NO_ARROW\t\t\t\t\t\t\t= \"Стрелка не можеть быть использована в старых подземельях где нет карты (скачайте патч или никак)\"\nL.NO_HUD\t\t\t\t\t\t\t= \"HUDMap не может быть использована в подземельях\"\n\nL.DYNAMIC_DIFFICULTY_CLUMP\t\t\t= L.DBM .. \" отключил динамическое окно проверки дистанции на этом боссе, т.к. нет точной информации о необходимом количестве игроков в одном скоплении для рейда вашего размера.\"\nL.DYNAMIC_ADD_COUNT\t\t\t\t\t= L.DBM .. \" отключил предупреждения о появлении помощников на этом боссе, т.к. нет точной информации о количестве помощников, которые появляются в рейде вашего размера.\"\nL.DYNAMIC_MULTIPLE\t\t\t\t\t= L.DBM .. \" отключил несколько таймеров и предупреждений на этом боссе, т.к. нет точной информации о том, как работают механики энкаунтера для рейда вашего размера.\"\n\nL.LOOT_SPEC_REMINDER\t\t\t\t= \"Ваша текущая специализация %s. Вы выбрали добычу для специализации %s.\"\n\nL.BIGWIGS_ICON_CONFLICT\t\t\t\t= L.DBM .. \" обнаружил, что у Вас включена установка меток в BigWigs и \" .. L.DBM .. \" одновременно. Пожалуйста, отключите метки в одном из них, чтобы избежать конфликтов\"\n\nL.MOD_AVAILABLE\t\t\t\t\t\t= \"Для этого контента доступен дополнительный модуль %s. Вы можете скачать его с\" .. L.UPDATEREMINDER_URL\n\nL.COMBAT_STARTED\t\t\t\t\t= \"%s вступает в бой. Удачи! :)\"\nL.COMBAT_STARTED_IN_PROGRESS\t\t= \"%s вступает в бой (в процессе). Удачи! :)\"\nL.GUILD_COMBAT_STARTED\t\t\t\t= \"%s вступает в бой с группой гильдии %s\"\n-- L.SCENARIO_STARTED\t\t\t\t\t= \"%s начат. Удачи! :)\"\n-- L.SCENARIO_STARTED_IN_PROGRESS\t\t= \"Вы зашли в сценарий %s (в процессе). Удачи! :)\"\nL.BOSS_DOWN\t\t\t\t\t\t\t= \"%s погибает спустя %s!\"\nL.BOSS_DOWN_I\t\t\t\t\t\t= \"%s погибает! Общее количество побед у Вас %d.\"\nL.BOSS_DOWN_L\t\t\t\t\t\t= \"%s погибает спустя %s! Ваш последний бой длился %s, а лучший бой длился %s. Общее количество побед у Вас %d.\"\nL.BOSS_DOWN_NR\t\t\t\t\t\t= \"%s погибает спустя %s! Это новый рекорд! (Предыдущий рекорд был %s). Общее количество побед у Вас %d.\"\nL.RAID_DOWN\t\t\t\t\t\t\t= \"%s зачищен за %s!\"\nL.RAID_DOWN_L\t\t\t\t\t\t= \"%s зачищен за %s! Текущий рекорд %s.\"\nL.RAID_DOWN_NR\t\t\t\t\t\t= \"%s зачищен за %s! Это новый рекорд! (Предыдущий рекорд был %s).\"\nL.GUILD_BOSS_DOWN\t\t\t\t\t= \"%s потерпел поражение от группы гильдии %s спустя %s!\"\n-- L.SCENARIO_COMPLETE\t\t\t\t\t= \"%s завершён спустя %s!\"\n-- L.SCENARIO_COMPLETE_I\t\t\t\t= \"%s завершён! Общее количество прохождений у Вас %d.\"\n-- L.SCENARIO_COMPLETE_L\t\t\t\t= \"%s завершён спустя %s! Ваше последнее прохождение заняло %s, а лучшее прохождение заняло %s. Общее количество прохождений у Вас %d.\"\n-- L.SCENARIO_COMPLETE_NR\t\t\t\t= \"%s завершён спустя %s! Это новый рекорд! (Предыдущий рекорд был %s). Общее количество прохождений у Вас %d.\"\nL.COMBAT_ENDED_AT\t\t\t\t\t= \"Бой с %s (%s) закончился спустя %s.\"\nL.COMBAT_ENDED_AT_LONG\t\t\t\t= \"Бой с %s (%s) закончился спустя %s. На этом уровне сложности Вы вайпнулись уже %d раз.\"\nL.GUILD_COMBAT_ENDED_AT\t\t\t\t= \"Группа гильдии %s вайпнулась на %s (%s) спустя %s.\"\n-- L.SCENARIO_ENDED_AT\t\t\t\t\t= \"%s закончился спустя %s.\"\n-- L.SCENARIO_ENDED_AT_LONG\t\t\t= \"%s закончился спустя %s. На этом уровне сложности Вы не завершили сценарий уже %d раз.\"\nL.COMBAT_STATE_RECOVERED\t\t\t= \"%s был атакован %s назад, восстанавливаю таймеры...\"\nL.TRANSCRIPTOR_LOG_START\t\t\t= \"Логирование с помощью Transcriptor начато.\"\nL.TRANSCRIPTOR_LOG_END\t\t\t\t= \"Логирование с помощью Transcriptor окончено.\"\n\nL.MOVIE_SKIPPED\t\t\t\t\t\t= \"Ролик был автоматически пропущен.\"\nL.BONUS_SKIPPED\t\t\t\t\t\t= L.DBM .. \" автоматически закрыл окно бонусного броска. Если Вам нужно вернуть это окно, введите /dbmbonusroll в течение 3 минут\"\n\nL.AFK_WARNING\t\t\t\t\t\t= \"Вы АФК и в бою (осталось %d процентов здоровья), запуск звукового сигнала. Если Вы не АФК, отключите АФК режим или эту опцию в 'Дополнительные возможности'.\"\n\nL.COMBAT_STARTED_AI_TIMER\t\t\t= \"Мой ЦП - это процессор нейронной сети, обучающий компьютер. (Этот бой будет использовать новую функцию таймера AI для генерации приближений таймера)\"\n\nL.PROFILE_NOT_FOUND\t\t\t\t\t= \"<\" .. L.DBM .. \"> Ваш текущий профиль повреждён. \" .. L.DBM .. \" загрузит профиль 'По умолчанию'.\"\nL.PROFILE_CREATED\t\t\t\t\t= \"Профиль '%s' создан.\"\nL.PROFILE_CREATE_ERROR\t\t\t\t= \"Не удалось создать профиль. Некорректное имя профиля.\"\nL.PROFILE_CREATE_ERROR_D\t\t\t= \"Не удалось создать профиль. Профиль '%s' уже существует.\"\nL.PROFILE_APPLIED\t\t\t\t\t= \"Профиль '%s' применён.\"\nL.PROFILE_APPLY_ERROR\t\t\t\t= \"Не удалось применить профиль. Профиль '%s' не существует.\"\nL.PROFILE_COPIED\t\t\t\t\t= \"Профиль '%s' скопирован.\"\nL.PROFILE_COPY_ERROR\t\t\t\t= \"Не удалось скопировать профиль. Профиль '%s' не существует.\"\nL.PROFILE_COPY_ERROR_SELF\t\t\t= \"Невозможно скопировать профиль сам в себя.\"\nL.PROFILE_DELETED\t\t\t\t\t= \"Профиль '%s' удалён. Профиль 'По умолчанию' будет применён.\"\nL.PROFILE_DELETE_ERROR\t\t\t\t= \"Не удалось удалить профиль. Профиль '%s' не существует.\"\nL.PROFILE_CANNOT_DELETE\t\t\t\t= \"Невозможно удалить профиль 'По умолчанию'.\"\nL.MPROFILE_COPY_SUCCESS\t\t\t\t= \"Настройки модуля от %s (специализация %d) были скопированы.\"\nL.MPROFILE_COPY_SELF_ERROR\t\t\t= \"Невозможно скопировать настройки персонажа сами в себя.\"\nL.MPROFILE_COPY_S_ERROR\t\t\t\t= \"Источник повреждён. Настройки не скопированы или скопированы частично. Скопировать не удалось.\"\nL.MPROFILE_COPYS_SUCCESS\t\t\t= \"Звуковые настройки модуля от %s (специализация %d) были скопированы.\"\nL.MPROFILE_COPYS_SELF_ERROR\t\t\t= \"Невозможно скопировать звуковые настройки персонажа сами в себя.\"\nL.MPROFILE_COPYS_S_ERROR\t\t\t= \"Источник повреждён. Звуковые настройки не скопированы или скопированы частично. Скопировать не удалось.\"\nL.MPROFILE_DELETE_SUCCESS\t\t\t= \"Настройки модуля от %s (специализация %d) были удалены.\"\nL.MPROFILE_DELETE_SELF_ERROR\t\t= \"Невозможно удалить настройки модуля, используемого в данный момент.\"\nL.MPROFILE_DELETE_S_ERROR\t\t\t= \"Источник повреждён. Настройки не удалены или удалены частично. Удалить не удалось.\"\n\nL.NOTE_SHARE_SUCCESS\t\t\t\t= \"%s поделился своей заметкой для %s\"\nL.NOTE_SHARE_LINK\t\t\t\t\t= \"Нажмите здесь, чтобы открыть заметку\"\nL.NOTE_SHARE_FAIL\t\t\t\t\t= \"%s попытался поделиться с Вами заметкой для %s. Однако модуль, связанный с этой способностью, не установлен или не загружен. Если Вам нужна эта заметка, убедитесь, что модуль, для которого они делятся заметкой, загружен и попросите поделиться снова\"\n\nL.NOTEHEADER\t\t\t\t\t\t= \"Вставьте текст вашей заметки для %s здесь. Поместив имя игрока между >< , окрасит его в цвет класса. Для предупреждений с несколькими заметками разделите их с помощью '/'\"\nL.NOTEFOOTER\t\t\t\t\t\t= \"Когда заметка обновлена, просто нажмите 'ОК', чтобы сохранить\"\nL.NOTESHAREDHEADER\t\t\t\t\t= \"%s поделился заметкой для %s. Если Вы примете её, она переопределит Вашу текущую заметку\"\nL.NOTESHARED\t\t\t\t\t\t= \"Ваша заметка была отправлена группе\"\nL.NOTESHAREERRORSOLO\t\t\t\t= \"Одиноко? Вы не должны передавать заметки самому себе\"\nL.NOTESHAREERRORBLANK\t\t\t\t= \"Нельзя поделиться пустой заметкой\"\nL.NOTESHAREERRORGROUPFINDER\t\t\t= \"Нельзя поделиться заметкой на БГ, в поиске рейда или подземелья\"\nL.NOTESHAREERRORALREADYOPEN\t\t\t= \"Нельзя открыть ссылку заметки, пока открыт редактор заметок, чтобы предотвратить потерю заметки, которую Вы в данный момент редактируете\"\n\nL.ALLMOD_DEFAULT_LOADED\t\t\t\t= \"Настройки 'по умолчанию' для всех модулей в этом подземелье были загружены.\"\nL.ALLMOD_STATS_RESETED\t\t\t\t= \"Вся статистика модуля была сброшена.\"\nL.MOD_DEFAULT_LOADED\t\t\t\t= \"Настройки 'по умолчанию' для этого боя были загружены.\"\n\nL.WORLDBOSS_ENGAGED\t\t\t\t\t= \"В Вашем игровом мире возможно начался бой с %s (%s процентов здоровья, отправил %s).\"\nL.WORLDBOSS_DEFEATED\t\t\t\t= \"%s возможно был побеждён в Вашем игровом мире (отправил %s).\"\nL.WORLDBUFF_STARTED\t\t\t\t\t= \"В Вашем игровом мире начался мировой бафф %s для фракции %s (отправил %s).\"\n\nL.TIMER_FORMAT_SECS\t\t\t\t\t= \"%.2f сек\"\nL.TIMER_FORMAT_MINS\t\t\t\t\t= \"%d мин\"\nL.TIMER_FORMAT\t\t\t\t\t\t= \"%d мин %.2f сек\"\n\nL.MIN\t\t\t\t\t\t\t\t= \"мин\"\nL.MIN_FMT\t\t\t\t\t\t\t= \"%d мин\"\nL.SEC\t\t\t\t\t\t\t\t= \"сек\"\nL.SEC_FMT\t\t\t\t\t\t\t= \"%s сек\"\n\nL.GENERIC_WARNING_OTHERS\t\t\t= \"и ещё один\"\nL.GENERIC_WARNING_OTHERS2\t\t\t= \"и %d других\"\nL.GENERIC_WARNING_BERSERK\t\t\t= \"Берсерк через %s %s\"\nL.GENERIC_TIMER_BERSERK\t\t\t\t= \"Берсерк\"\nL.OPTION_TIMER_BERSERK\t\t\t\t= \"Отсчёт времени до $spell:26662\"\nL.GENERIC_TIMER_COMBAT\t\t\t\t= \"Бой начинается\"\nL.OPTION_TIMER_COMBAT\t\t\t\t= \"Отсчёт времени до начала боя\"\nL.BAD\t\t\t\t\t\t\t\t= \"Плохой\"\nL.OPTION_HEALTH_FRAME\t\t\t\t= \"Отображать здоровье босса\"\n\nL.OPTION_CATEGORY_TIMERS\t\t\t= \"Индикаторы\"\n--Sub cats for \"announce\" object\nL.OPTION_CATEGORY_WARNINGS\t\t\t= \"Общие предупреждения\"\nL.OPTION_CATEGORY_WARNINGS_YOU\t\t= \"Персональные предупреждения\"\nL.OPTION_CATEGORY_WARNINGS_OTHER\t= \"Предупреждения для цели\"\nL.OPTION_CATEGORY_WARNINGS_ROLE\t\t= \"Предупреждения для роли\"\nL.OPTION_CATEGORY_SPECWARNINGS\t\t= \"Специальные предупреждения\"\n\nL.OPTION_CATEGORY_SOUNDS\t\t\t= \"Звуки\"\n--Misc object broken down into sub cats\nL.OPTION_CATEGORY_DROPDOWNS\t\t\t= \"Выпадающие списки\"\nL.OPTION_CATEGORY_YELLS\t\t\t\t= \"Крики\"\nL.OPTION_CATEGORY_NAMEPLATES\t\t= \"Индикаторы\"\nL.OPTION_CATEGORY_ICONS\t\t\t\t= \"Метки\"\n\nL.AUTO_RESPONDED\t\t\t\t\t= \"Автоответ.\"\nL.STATUS_WHISPER\t\t\t\t\t= \"%s: %s, %d/%d человек живые\"\n--Bosses\nL.AUTO_RESPOND_WHISPER\t\t\t\t= \"%s сейчас занят, в бою против %s (%s, %d/%d человек живые)\"\nL.WHISPER_COMBAT_END_KILL\t\t\t= \"%s одержал победу над %s!\"\nL.WHISPER_COMBAT_END_KILL_STATS\t\t= \"%s одержал победу над %s! Общее количество побед у них - %d.\"\nL.WHISPER_COMBAT_END_WIPE_AT\t\t= \"%s потерпел поражение от %s на %s\"\nL.WHISPER_COMBAT_END_WIPE_STATS_AT\t= \"%s потерпел поражение от %s на %s. Общее количество вайпов у них - %d.\"\n--Scenarios (no percents. words like \"fighting\" or \"wipe\" changed to better fit scenarios)\n-- L.AUTO_RESPOND_WHISPER_SCENARIO\t\t= \"%s сейчас занят в %s (%d/%d человек живые)\"\n-- L.WHISPER_SCENARIO_END_KILL\t\t\t= \"%s завершил %s!\"\n-- L.WHISPER_SCENARIO_END_KILL_STATS\t= \"%s завершил %s! Общее количество побед у них - %d.\"\n-- L.WHISPER_SCENARIO_END_WIPE\t\t\t= \"%s не завершил %s\"\n-- L.WHISPER_SCENARIO_END_WIPE_STATS\t= \"%s не завершил %s. Общее количество незавершённых у них - %d.\"\n\nL.VERSIONCHECK_HEADER\t\t\t\t= \"Boss Mod - Версии\"\nL.VERSIONCHECK_ENTRY\t\t\t\t= \"%s: %s (%s) %s\"\nL.VERSIONCHECK_ENTRY_TWO\t\t\t= \"%s: %s (%s) & %s (%s)\"--Two Boss mods\nL.VERSIONCHECK_ENTRY_NO_DBM\t\t\t= \"%s: Boss Mod не установлен\"\nL.VERSIONCHECK_FOOTER\t\t\t\t= \"Найдено %d |4игрок:игрока:игроков; с \" .. L.DBM .. \" и %d |4игрок:игрока:игроков; с BigWigs\"\nL.VERSIONCHECK_OUTDATED\t\t\t\t= \"Следующие %d игрок(и) имеют устаревшую версию: %s\"\nL.YOUR_VERSION_OUTDATED\t\t\t\t= \"Ваша версия \" .. L.DEADLY_BOSS_MODS .. \" устарела! Пожалуйста, посетите \" .. L.UPDATEREMINDER_URL .. \" для загрузки последней версии.\"\nL.VOICE_PACK_OUTDATED\t\t\t\t= \"В Вашем голосовом пакете \" .. L.DBM .. \" отсутствуют звуки, поддерживаемые этой версией \" .. L.DBM .. \". Фильтр звуков спецпредупреждений был отключён. Пожалуйста, скачайте обновлённую версию голосового пакета или свяжитесь с автором для обновления, которое содержит отсутствующие звуковые файлы.\"\nL.VOICE_MISSING\t\t\t\t\t\t= \"Выбранный Вами голосовой пакет \" .. L.DBM .. \" не найден. Если это ошибка, убедитесь, что Ваш голосовой пакет правильно установлен и включен в модификациях.\"\nL.VOICE_DISABLED\t\t\t\t\t= \"У Вас установлен по крайней мере один голосовой пакет \" .. L.DBM .. \", но ни один не включён. Если Вы собираетесь использовать голосовой пакет, убедитесь, что он выбран в 'Spoken Alerts', иначе удалите неиспользуемые голосовые пакеты, чтобы скрыть это сообщение.\"\nL.VOICE_COUNT_MISSING\t\t\t\t= \"Голос отсчёта %d использует голосовой пакет, который не был найден. Он был сброшен на настройки по умолчанию: %s.\"\nL.BIG_WIGS\t\t\t\t\t\t\t= \"BigWigs\"\n\nL.UPDATEREMINDER_HEADER\t\t\t\t= \"Ваша версия \" .. L.DEADLY_BOSS_MODS .. \" устарела.\\n Версия %s (%s) доступна для загрузки здесь:\" .. L.UPDATEREMINDER_URL\nL.UPDATEREMINDER_FOOTER\t\t\t\t= \"Нажмите \" .. (IsMacClient() and \"Cmd-C\" or \"Ctrl-C\")  ..  \", чтобы скопировать ссылку загрузки в буфер обмена.\"\nL.UPDATEREMINDER_FOOTER_GENERIC\t\t= \"Нажмите \" .. (IsMacClient() and \"Cmd-C\" or \"Ctrl-C\")  ..  \", чтобы скопировать ссылку в буфер обмена.\"\nL.UPDATEREMINDER_DISABLE\t\t\t= \"ПРЕДУПРЕЖДЕНИЕ: В связи с тем, что Ваш \" .. L.DEADLY_BOSS_MODS.. \" устарел и несовместим с более новыми версиями \"..L.DBM..\", он был принудительно отключен и не может использоваться до тех пор, пока не будет обновлен. Это делается для того, чтобы несовместимые моды не мешали игре ни Вам, ни другим участникам группы.\"\nL.UPDATEREMINDER_DISABLETEST\t\t= \"ПРЕДУПРЕЖДЕНИЕ: В связи с тем, что Ваш \" .. L.DEADLY_BOSS_MODS.. \" устарел, а это тестовый/бета игровой мир, он был принудительно отключен и не может использоваться до тех пор, пока не будет обновлен. Это делается для того, чтобы устаревшие моды не использовались для создания отзывов о тестировании.\"\nL.UPDATEREMINDER_HOTFIX\t\t\t\t= \"Ваша версия \" .. L.DBM .. \" будет иметь некорректные таймеры или предупреждения во время этого энкаунтера. Это исправлено в новой версии.\"\nL.UPDATEREMINDER_HOTFIX_ALPHA\t\t= \"Ваша версия \" .. L.DBM .. \" будет иметь некорректные таймеры или предупреждения во время этого энкаунтера. Это исправлено в следующей версии (или альфа-версии).\"\nL.UPDATEREMINDER_MAJORPATCH\t\t\t= \"ПРЕДУПРЕЖДЕНИЕ: Из-за того, что Ваш \" .. L.DEADLY_BOSS_MODS .. \" устарел, он был отключён до обновления, т.к. это большой игровой патч. Это необходимо для того, чтобы старый и несовместимый код не приводил к ухудшению игрового опыта для Вас и членов Вашей группы. Убедитесь, что Вы скачали новую версию с Curse, Wago, WoWI или со страницы релизов GitHub.\"\nL.VEM\t\t\t\t\t\t\t\t= \"ПРЕДУПРЕЖДЕНИЕ: Вы используете \" .. L.DEADLY_BOSS_MODS .. \" и Voice Encounter Mods одновременно. \"..L.DBM..\" не был загружен, т.к. эти два аддона не могут работать вместе.\"\nL.OUTDATEDPROFILES\t\t\t\t\t= \"ПРЕДУПРЕЖДЕНИЕ: DBM-Profiles несовместим с этой версией \" .. L.DBM .. \". Он должен быть удалён, прежде чем \"..L.DBM..\" сможет продолжить, чтобы избежать конфликтов.\"\nL.OUTDATEDSPELLTIMERS\t\t\t\t= \"ПРЕДУПРЕЖДЕНИЕ: DBM-SpellTimers несовместим с \" .. L.DBM .. \" и должен быть выключен для корректной работы \" .. L.DBM .. \".\"\nL.OUTDATEDRLT\t\t\t\t\t\t= \"ПРЕДУПРЕЖДЕНИЕ: DBM-RaidLeadTools несовместим с \" .. L.DBM .. \". DBM-RaidLeadTools больше не поддерживается и должен быть удалён для корректной работы \" .. L.DBM .. \".\"\nL.VICTORYSOUND\t\t\t\t\t\t= \"ПРЕДУПРЕЖДЕНИЕ: DBM-VictorySound несовместим с этой версией \" .. L.DBM .. \". Он должен быть удалён, чтобы \" .. L.DBM .. \" мог продолжить работу без конфликтов.\"\nL.DPMCORE\t\t\t\t\t\t\t= \"ПРЕДУПРЕЖДЕНИЕ: Deadly PvP mods несовместимы с этой версией \" .. L.DBM .. \". Чтобы продолжить, удалите их, чтобы избежать конфликтов.\"\nL.DBMLDB\t\t\t\t\t\t\t= \"ПРЕДУПРЕЖДЕНИЕ: DBM-LDB теперь встроен в DBM-Core. Рекомендуется удалить 'DBM-LDB' из папки с Вашими аддонами.\"\nL.DBMLOOTREMINDER\t\t\t\t\t= \"ПРЕДУПРЕЖДЕНИЕ: Обнаружен установленный DBM-LootReminder. Этот аддон больше не совместим с клиентом WoW Retail и приводит к поломке пулл таймеров \" .. L.DBM .. \". Рекомендуется удалить этот аддон.\"\nL.UPDATE_REQUIRES_RELAUNCH\t\t\t= \"ПРЕДУПРЕЖДЕНИЕ: Это обновление \" .. L.DBM .. \" не будет работать корректно, если Вы не перезапустите игровой клиент. Это обновление содержит новые файлы или изменения в .toc файле, которые не могут быть загружены через ReloadUI. Вы можете столкнуться со сломанной функциональностью или ошибками, если продолжите без перезапуска клиента.\"\nL.OUT_OF_DATE_NAG\t\t\t\t\t= \"Ваша версия \" .. L.DBM .. \" устарела и этот энкаунтер имеет новые фичи и багфиксы в новой версии. Рекомендуется обновиться, чтобы не было отсутствующих важных предупреждений, или таймеров, или крика от Вас, на который рассчитывает остальная группа.\"\n\nL.MOVABLE_BAR\t\t\t\t\t\t= \"Перетащите!\"\n\nL.PIZZA_SYNC_INFO\t\t\t\t\t= \"|Hplayer:%1$s|h[%1$s]|h транслирует Вам таймер \" .. L.DBM .. \": '%2$s'\\n|HDBM:cancel:%2$s:nil|h|cff3588ff[Отменить этот таймер]|r|h  |HDBM:ignore:%2$s:%1$s|h|cff3588ff[Игнорировать таймеры от %1$s]|r|h\"\nL.PIZZA_CONFIRM_IGNORE\t\t\t\t= \"Игнорировать таймеры \" .. L.DBM .. \" от %s на время текущего сеанса?\"\nL.PIZZA_ERROR_USAGE\t\t\t\t\t= \"Использование: /dbm [broadcast] timer <time> <text>. <time> должно быть больше 3.\"\n\n--L.MINIMAP_TOOLTIP_HEADER (Same as English locales)\nL.MINIMAP_TOOLTIP_FOOTER\t\t\t= \"[Shift+ЛКМ] - переместить значок \" .. L.DBM\n\nL.RANGECHECK_HEADER\t\t\t\t\t= \"Проверка дистанции (%d м)\"\nL.RANGECHECK_HEADERT\t\t\t\t= \"Проверка дистанции (%dм-%dP)\"\nL.RANGECHECK_RHEADER\t\t\t\t= \"R-Проверка дистанции (%dм)\"\nL.RANGECHECK_RHEADERT\t\t\t\t= \"R-Проверка дистанции (%dм-%dP)\"\nL.RANGECHECK_SETRANGE\t\t\t\t= \"Настройка дистанции\"\nL.RANGECHECK_SETTHRESHOLD\t\t\t= \"Настройка порога игроков\"\nL.RANGECHECK_SOUNDS\t\t\t\t\t= \"Звуковой сигнал\"\nL.RANGECHECK_SOUND_OPTION_1\t\t\t= \"Один из игроков подошёл к Вам слишком близко\"\nL.RANGECHECK_SOUND_OPTION_2\t\t\t= \"Несколько человек находятся около Вас\"\nL.RANGECHECK_SOUND_0\t\t\t\t= \"Без звука\"\nL.RANGECHECK_SOUND_1\t\t\t\t= \"По умолчанию\"\nL.RANGECHECK_SOUND_2\t\t\t\t= \"Раздражающий звуковой сигнал\"\nL.RANGECHECK_SETRANGE_TO\t\t\t= \"%d м\"\nL.RANGECHECK_LOCK\t\t\t\t\t= \"Закрепить полосу\"\nL.RANGECHECK_OPTION_FRAMES\t\t\t= \"Фреймы\"\nL.RANGECHECK_OPTION_RADAR\t\t\t= \"Показывать радар\"\nL.RANGECHECK_OPTION_TEXT\t\t\t= \"Показывать текстовый фрейм\"\nL.RANGECHECK_OPTION_BOTH\t\t\t= \"Показывать оба фрейма\"\nL.RANGERADAR_HEADER\t\t\t\t\t= \"Радар:%d Игроков:%d\"\nL.RANGERADAR_RHEADER\t\t\t\t= \"R-Радар:%d Игроков:%d\"\nL.RANGERADAR_BOSS_HEADER\t\t\t= \"Диапазон боссов (%d м)\"\nL.RANGECHECK_OPTION_SPEED\t\t\t= \"Скорость обновления (/reload)\"\nL.RANGECHECK_OPTION_SLOW\t\t\t= \"Медленная 0.5 сек (наименее CPU интенсивное)\"\nL.RANGECHECK_OPTION_AVERAGE\t\t\t= \"Средняя 0.25 сек \"\nL.RANGECHECK_OPTION_FAST\t\t\t= \"Быстрая 0.05 сек (почти real-time)\"\nL.RANGERADAR_IN_RANGE_TEXT\t\t\t= \"%d в радиусе (%0.1fм)\"\nL.RANGECHECK_IN_RANGE_TEXT\t\t\t= \"%d в радиусе\"--Text based doesn't need (%dyd), especially since it's not very accurate to the specific yard anyways\nL.RANGERADAR_IN_RANGE_TEXTONE\t\t= \"%s (%0.1fм)\"--One target\n\nL.LOCK_FRAME\t\t\t\t\t\t= \"Закрепить окно\"\nL.INFOFRAME_SHOW_SELF\t\t\t\t= \"Всегда показывать Вашу энергию\"\t\t-- Always show your own power value even if you are below the threshold\nL.INFOFRAME_SETLINES\t\t\t\t= \"Максимальное число строк\"\nL.INFOFRAME_SETCOLS\t\t\t\t\t= \"Максимальное число столбцов\"\nL.INFOFRAME_LINESDEFAULT\t\t\t= \"По умолчанию\"\nL.INFOFRAME_LINES_TO\t\t\t\t= \"%d строк\"\nL.INFOFRAME_COLS_TO\t\t\t\t\t= \"%d столбцов\"\nL.INFOFRAME_POWER\t\t\t\t\t= \"Power\"\nL.INFOFRAME_AGGRO\t\t\t\t\t= \"Угроза\"\nL.INFOFRAME_MAIN\t\t\t\t\t= \"Main:\"--Main power\nL.INFOFRAME_ALT\t\t\t\t\t\t= \"Alt:\"--Alternate Power\n\nL.LFG_INVITE\t\t\t\t\t\t= \"Приглашение в подземелье\"\n\nL.SLASHCMD_HELP = {\n\t\"Доступные команды:\",\n\t\"-----------------\",\n\t\"/dbm unlock: Отображает перемещаемый индикатор таймера (псевдоним: move).\",\n\t\"/range <число> or /distance <число>: Показать окно проверки дистанции. /rrange или /rdistance для обратных цветов.\",\n\t\"/dbm timer: Запускает пользовательский отсчёт времени, для доп. информации введите '/dbm timer'.\",\n\t\"/dbm arrow: Показывает стрелку \" .. L.DBM .. \", для доп. информации введите '/dbm arrow help'.\",\n\t\"/dbm help2: Показывает команды управления рейдом\"\n}\nL.SLASHCMD_HELP2 = {\n\t\"Доступные команды:\",\n\t\"-----------------\",\n\t\"/dbm pull <сек>: Транслирует отсчёт времени до атаки всем членам рейда (требуются права лидера или помощника).\",\n\t\"/dbm break <мин>: Транслирует отсчёт времени отдыха всем членам рейда (требуются права лидера или помощника).\",\n\t\"/dbm version: Выполняет проверку используемой рейдом версии босс мода (псевдоним: ver).\",\n\t\"/dbm version2: Выполняет проверку используемой рейдом версии босс мода и отправляет сообщение шёпотом членам рейда с устаревшей версией (псевдоним: ver2).\",\n\t\"/dbm lockout: Получить список текущих сохранений подземелий у членов рейда (псведонимы: lockouts, ids) (требуются права лидера или помощника).\",\n\t\"/dbm lag: Выполняет проверку задержки у всего рейда.\",\n\t\"/dbm durability: Выполняет проверку прочности у всего рейда.\"\n}\nL.TIMER_USAGE = {\n\tL.DBM .. \" команды таймера:\",\n\t\"-----------------\",\n\t\"/dbm timer <сек> <текст>: Запускает таймер с указанным текстом.\",\n\t\"/dbm ltimer <сек> <текст>: Запускает таймер, который автоматически повторяется до отмены.\",\n\t\"/dbm broadcast timer <x> <text>: транслирует <x> сек. Pizza Timer с именем <text> в рейд (требуются права лидера или помощника)\",\n\t\"Добавьте 'broadcast' перед типом таймера, чтобы поделиться им с рейдом (требуются права лидера или помощника).\",\n\t\"/dbm timer endloop: Останавливает любой повторяющийся ltimer.\"\n}\n\nL.ERROR_NO_PERMISSION\t\t\t\t= \"У Вас недостаточно прав для выполнения этой операции.\"\nL.TIME_TOO_SHORT\t\t\t\t\t= \"Таймер атаки должен быть больше 3 секунд.\"\n\nL.BOSSHEALTH_HIDE_FRAME\t\t\t\t= \"Скрыть\"\n\nL.BREAK_USAGE\t\t\t\t\t\t= \"Перерыв не может быть дольше 60 минут. Убедитесь, что Вы вводите время в минутах, а не секундах.\"\nL.BREAK_START\t\t\t\t\t\t= \"Перерыв начинается -- у Вас есть %s! (отправил %s)\"\nL.BREAK_MIN\t\t\t\t\t\t\t= \"Перерыв заканчивается через %s мин.!\"\nL.BREAK_SEC\t\t\t\t\t\t\t= \"Перерыв заканчивается через %s сек.!\"\nL.TIMER_BREAK\t\t\t\t\t\t= \"Перерыв!\"\nL.ANNOUNCE_BREAK_OVER\t\t\t\t= \"Перерыв закончился в %s\"\n\nL.TIMER_PULL\t\t\t\t\t\t= \"Атака\"\nL.ANNOUNCE_PULL_MODE\t\t\t\t= \"Атака режим: %s\"\nL.ANNOUNCE_PULL\t\t\t\t\t\t= \"Атака через %d сек. (отправил %s)\"\nL.ANNOUNCE_PULL_NOW\t\t\t\t\t= \"Атака!\"\nL.ANNOUNCE_PULL_TARGET\t\t\t\t= \"Атакуем %s через %d сек. (отправил %s)\"\nL.ANNOUNCE_PULL_NOW_TARGET\t\t\t= \"Атакуем %s!\"\nL.GEAR_WARNING\t\t\t\t\t\t= \"Внимание: Проверка экипировки. Уровень надетых предметов на %d ниже, чем максимальный\"\nL.GEAR_WARNING_WEAPON\t\t\t\t= \"Внимание: Проверьте, надето ли у Вас корректное оружие.\"\nL.GEAR_FISHING_POLE\t\t\t\t\t= \"Удочка\"\n\nL.ACHIEVEMENT_TIMER_SPEED_KILL\t\t= \"Быстрое убийство\"\n\n-- Auto-generated Warning Localizations\nL.AUTO_ANNOUNCE_TEXTS.you\t\t\t= \"%s на тебе\"\nL.AUTO_ANNOUNCE_TEXTS.target\t\t= \"%s на |3-5(>%%s<)\"\nL.AUTO_ANNOUNCE_TEXTS.targetdistance\t= \"%s на |3-5(>%%s<) (%%d м)\"\nL.AUTO_ANNOUNCE_TEXTS.targetsource\t= \">%%s< применяется %s на >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetcount\t= \"%s (%%s) на |3-5(>%%s<)\"\nL.AUTO_ANNOUNCE_TEXTS.targetcountdistance\t= \"%s (%%s) на |3-5(>%%s<) (%%d м)\"\nL.AUTO_ANNOUNCE_TEXTS.spell\t\t\t= \"%s\"\nL.AUTO_ANNOUNCE_TEXTS.incoming\t\t= \"%s входящий дебафф\"\nL.AUTO_ANNOUNCE_TEXTS.incomingcount\t= \"%s входящий дебафф (%%s)\"\nL.AUTO_ANNOUNCE_TEXTS.ends\t\t\t= \"%s заканчивается\"\nL.AUTO_ANNOUNCE_TEXTS.endtarget\t\t= \"%s заканчивается: >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.fades\t\t\t= \"%s спадает\"\nL.AUTO_ANNOUNCE_TEXTS.addsleft\t\t= \"Осталось %s: %%d\"\nL.AUTO_ANNOUNCE_TEXTS.cast\t\t\t= \"Применение заклинания %s: %.1f сек\"\nL.AUTO_ANNOUNCE_TEXTS.soon\t\t\t= \"Скоро %s\"\nL.AUTO_ANNOUNCE_TEXTS.sooncount\t\t= \"Скоро %s (%%s)\"\nL.AUTO_ANNOUNCE_TEXTS.countdown\t\t= \"%s через %%ds\"\nL.AUTO_ANNOUNCE_TEXTS.prewarn\t\t= \"%s через %s\"\nL.AUTO_ANNOUNCE_TEXTS.bait\t\t\t= \"Скоро %s - байти\"\nL.AUTO_ANNOUNCE_TEXTS.stage\t\t\t= \"Фаза %s\"\nL.AUTO_ANNOUNCE_TEXTS.prestage\t\t= \"Скоро фаза %s\"\nL.AUTO_ANNOUNCE_TEXTS.count\t\t\t= \"%s (%%s)\"\nL.AUTO_ANNOUNCE_TEXTS.stack\t\t\t= \"%s на |3-5(>%%s<) (%%d)\"\nL.AUTO_ANNOUNCE_TEXTS.moveto\t\t= \"%s - бегите к >%%s<\"\n\nlocal prewarnOption\t\t\t\t\t\t= \"Предупреждать заранее о $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.you\t\t\t\t= \"Объявлять когда $spell:%s на тебе\"\nL.AUTO_ANNOUNCE_OPTIONS.target\t\t\t= \"Объявлять цели заклинания $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.targetdistance\t= \"Объявлять цели заклинания $spell:%s (с расстоянием)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetNF\t\t= \"Объявлять цели заклинания $spell:%s (игнорирует глобальные фильтры целей)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetsource\t= \"Объявлять цели заклинания $spell:%s (с источником)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetcount\t\t= \"Объявлять цели заклинания $spell:%s (со счётчиком)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetcountdistance\t= \"Объявлять цели заклинания $spell:%s (со счётчиком и расстоянием)\"\nL.AUTO_ANNOUNCE_OPTIONS.spell\t\t\t= \"Предупреждение для $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.incoming\t\t= \"Объявлять, когда $spell:%s получает отрицательные эффекты\"\nL.AUTO_ANNOUNCE_OPTIONS.incomingcount\t= \"Объявлять (со счётчиком), когда $spell:%s получает отрицательные эффекты\"\nL.AUTO_ANNOUNCE_OPTIONS.ends\t\t\t= \"Предупреждать об окончании $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.endtarget\t\t= \"Предупреждать об окончании $spell:%s (цель)\"\nL.AUTO_ANNOUNCE_OPTIONS.fades\t\t\t= \"Предупреждать о спадении $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.addsleft\t\t\t= \"Объявлять сколько осталось $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.cast\t\t\t= \"Предупреждать о применении заклинания $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.soon\t\t\t= prewarnOption\nL.AUTO_ANNOUNCE_OPTIONS.sooncount\t\t= prewarnOption\nL.AUTO_ANNOUNCE_OPTIONS.countdow\t\t= \"Спамить заранее отсчёт до заклинания $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.prewarn\t\t\t= prewarnOption\nL.AUTO_ANNOUNCE_OPTIONS.bait\t\t\t= \"Предупреждать заранее (чтобы байтить) для $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.stage\t\t\t= \"Объявлять фазу %s\"\nL.AUTO_ANNOUNCE_OPTIONS.stagechange\t\t= \"Объявлять смены фаз\"\nL.AUTO_ANNOUNCE_OPTIONS.prestage\t\t= \"Предупреждать заранее о фазе %s\"\nL.AUTO_ANNOUNCE_OPTIONS.count\t\t\t= \"Предупреждение для $spell:%s (со счётчиком)\"\nL.AUTO_ANNOUNCE_OPTIONS.stack\t\t\t= \"Объявлять количество стаков $spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.moveto\t\t\t= \"Объявлять, когда нужно переместиться к кому-то или куда-то для $spell:%s\"\n\nL.AUTO_SPEC_WARN_TEXTS.spell\t\t\t= \"%s!\"\nL.AUTO_SPEC_WARN_TEXTS.ends\t\t\t\t= \"%s заканчивается\"\nL.AUTO_SPEC_WARN_TEXTS.fades\t\t\t= \"%s спадает\"\nL.AUTO_SPEC_WARN_TEXTS.soon\t\t\t\t= \"Скоро %s\"\nL.AUTO_SPEC_WARN_TEXTS.sooncount\t\t= \"Скоро %s (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.bait\t\t\t\t= \"Скоро %s - байти\"\nL.AUTO_SPEC_WARN_TEXTS.prewarn\t\t\t= \"%s через %s\"\nL.AUTO_SPEC_WARN_TEXTS.dispel\t\t\t= \"%s на |3-5(>%%s<) - рассейте заклинание\"\nL.AUTO_SPEC_WARN_TEXTS.interrupt\t\t= \"%s - прервите >%%s<!\"\nL.AUTO_SPEC_WARN_TEXTS.interruptcount\t= \"%s - прервите >%%s<! (%%d)\"\nL.AUTO_SPEC_WARN_TEXTS.you\t\t\t\t= \"%s на Вас\"\nL.AUTO_SPEC_WARN_TEXTS.youcount\t\t\t= \"%s (%%s) на Вас\"\nL.AUTO_SPEC_WARN_TEXTS.youpos\t\t\t= \"%s (Позиция: %%s) на Вас\"\nL.AUTO_SPEC_WARN_TEXTS.youposcount\t\t= \"%s (%%s) (Позиция: %%s) на Вас\"\nL.AUTO_SPEC_WARN_TEXTS.soakpos\t\t\t= \"%s (Позиция погл.: %%s)\"\nL.AUTO_SPEC_WARN_TEXTS.target\t\t\t= \"%s на |3-5(>%%s<)\"\nL.AUTO_SPEC_WARN_TEXTS.targetcount\t\t= \"%s (%%s) на >%%s< \"\nL.AUTO_SPEC_WARN_TEXTS.defensive\t\t= \"%s - защититесь\"\nL.AUTO_SPEC_WARN_TEXTS.taunt\t\t\t= \"%s на >%%s< - затаунти\"\nL.AUTO_SPEC_WARN_TEXTS.close\t\t\t= \"%s на |3-5(>%%s<) около Вас\"\nL.AUTO_SPEC_WARN_TEXTS.move\t\t\t\t= \"%s - отбегите\"\nL.AUTO_SPEC_WARN_TEXTS.keepmove\t\t\t= \"%s - продолжайте двигаться\"\nL.AUTO_SPEC_WARN_TEXTS.stopmove\t\t\t= \"%s - остановитесь\"\nL.AUTO_SPEC_WARN_TEXTS.dodge\t\t\t= \"%s - избегайте\"\nL.AUTO_SPEC_WARN_TEXTS.dodgecount\t\t= \"%s (%%s) - избегайте\"\nL.AUTO_SPEC_WARN_TEXTS.dodgeloc\t\t\t= \"%s - избегайте от %%s\"\nL.AUTO_SPEC_WARN_TEXTS.moveaway\t\t\t= \"%s - отбегите от остальных\"\nL.AUTO_SPEC_WARN_TEXTS.moveawaycount\t= \"%s (%%s) - отбегите от остальных\"\nL.AUTO_SPEC_WARN_TEXTS.moveto\t\t\t= \"%s - бегите к >%%s<\"\nL.AUTO_SPEC_WARN_TEXTS.soak\t\t\t\t= \"%s - перекройте\"\nL.AUTO_SPEC_WARN_TEXTS.soakcount\t\t= \"%s - перекройте %%s\"\nL.AUTO_SPEC_WARN_TEXTS.jump\t\t\t\t= \"%s - подпрыгните\"\nL.AUTO_SPEC_WARN_TEXTS.run\t\t\t\t= \"%s - убегайте\"\nL.AUTO_SPEC_WARN_TEXTS.runcount \t\t= \"%s - убегайте (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.cast\t\t\t\t= \"%s - прекратите чтение заклинаний\"\nL.AUTO_SPEC_WARN_TEXTS.lookaway\t\t\t= \"%s на %%s - отвернитесь\"\nL.AUTO_SPEC_WARN_TEXTS.reflect\t\t\t= \"%s на |3-5(>%%s<) - прекратите атаку\"\nL.AUTO_SPEC_WARN_TEXTS.count\t\t\t= \"%s! (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.stack\t\t\t= \"На Вас %%d стаков от %s\"\nL.AUTO_SPEC_WARN_TEXTS.switch\t\t\t= \"%s - переключитесь\"\nL.AUTO_SPEC_WARN_TEXTS.switchcount\t\t= \"%s - переключитесь (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.gtfo\t\t\t\t= \"Под вами %%s - выбегите\"\nL.AUTO_SPEC_WARN_TEXTS.adds\t\t\t\t= \"Прибыли адды - смените цель\"\nL.AUTO_SPEC_WARN_TEXTS.addscount\t\t= \"Прибыли адды - смените цель (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.addscustom\t\t= \"Прибыли адды - %%s\"\nL.AUTO_SPEC_WARN_TEXTS.targetchange\t\t= \"Смена цели - переключитесь на %%s\"\n\n-- Auto-generated Special Warning Localizations\nL.AUTO_SPEC_WARN_OPTIONS.spell\t\t\t= \"Спецпредупреждение для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.ends\t\t\t= \"Спецпредупреждение об окончании $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.fades\t\t\t= \"Спецпредупреждение о спадении $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.soon\t\t\t= \"Спецпредупреждение, что скоро $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.sooncount\t\t= \"Спецпредупреждение (со счётчиком) для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.bait\t\t\t= \"Спецпредупреждение (для байта) для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.prewarn\t\t= \"Спецпредупреждение за %s сек. до $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.dispel\t\t= \"Спецпредупреждение для рассеивания/похищения заклинания $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.interrupt\t\t= \"Спецпредупреждение для прерывания заклинания $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.interruptcount\t= \"Спецпредупреждение (со счётчиком) для прерывания заклинания $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.you\t\t\t= \"Спецпредупреждение, когда на Вас $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.youcount\t\t= \"Спецпредупреждение (со счётчиком), когда на Вас $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.youpos\t\t\t= \"Спецпредупреждение (с позицией), когда на Вас $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.youposcount\t= \"Спецпредупреждение (с позицией и счётчиком), когда на Вас $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.soakpos\t\t= \"Спецпредупреждение (с позицией) для помощи с поглощением $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.target\t\t\t= \"Спецпредупреждение, когда на ком-то $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.targetcount\t= \"Спецпредупреждение (со счётчиком), когда на ком-то $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.defensive\t\t= \"Спецпредупреждение для использования защитных способностей от $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.taunt\t\t\t= \"Спецпредупреждение \\\"затаунти\\\", когда на другом танке $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.close\t\t\t= \"Спецпредупреждение, когда на ком-то рядом с вами $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.move\t\t\t= \"Спецпредупреждение \\\"отбегите\\\" для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.keepmove\t\t= \"Спецпредупреждение \\\"продолжайте двигаться\\\" для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.stopmove\t\t= \"Спецпредупреждение \\\"остановитесь\\\" для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.dodge\t\t\t= \"Спецпредупреждение \\\"избегайте\\\" для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.dodgecount\t\t= \"Спецпредупреждение \\\"избегайте\\\" (со счётчиком) для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.dodgeloc\t\t= \"Спецпредупреждение \\\"избегайте\\\" (с местом) для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.moveaway\t\t= \"Спецпредупреждение \\\"отбегите от остальных\\\" для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.moveawaycount\t= \"Спецпредупреждение \\\"отбегите от остальных\\\" (со счётчиком) для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.moveto\t\t\t= \"Спецпредупреждение \\\"бегите к кому-то\\\", на ком $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.soak\t\t\t= \"Спецпредупреждение \\\"перекройте\\\" для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.soakcount\t\t= \"Спецпредупреждение \\\"перекройте\\\" (со счётчиком) для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.jump\t\t\t= \"Спецпредупреждение \\\"подпрыгните\\\" для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.run\t\t\t= \"Спецпредупреждение \\\"убегайте\\\" для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.runcount\t\t= \"Спецпредупреждение (со счётчиком) \\\"убегайте\\\" для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.cast\t\t\t= \"Спецпредупреждение \\\"прекратите чтение заклинаний\\\" для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.lookaway\t\t= \"Спецпредупреждение \\\"отвернитесь\\\" для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.reflect\t\t= \"Спецпредупреждение \\\"прекратите атаку\\\" для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.count\t\t\t= \"Спецпредупреждение (со счётчиком) для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.stack\t\t\t= \"Спецпредупреждение, когда на Вас >=%d стаков $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.switch\t\t\t= \"Спецпредупреждение о смене цели для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.switchcount\t= \"Спецпредупреждение (со счётчиком) о смене цели для $spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.gtfo \t\t\t= \"Спецпредупреждение о выбегании из войды на земле\"\nL.AUTO_SPEC_WARN_OPTIONS.adds\t\t\t= \"Спецпредупреждение о смене цели для прибывающих аддов\"\nL.AUTO_SPEC_WARN_OPTIONS.addscount\t\t= \"Спецпредупреждение (со счётчиком) о смене цели для прибывающих аддов\"\nL.AUTO_SPEC_WARN_OPTIONS.addscustom\t\t= \"Спецпредупреждение для прибывающих аддов\"\nL.AUTO_SPEC_WARN_OPTIONS.targetchange\t= \"Спецпредупреждение для смены приоритетной цели\"\n\n-- Auto-generated Timer Localizations\nL.AUTO_TIMER_TEXTS.target\t\t\t= \"%s: >%%s<\"\nL.AUTO_TIMER_TEXTS.targetcount\t\t= \"%s (%%2$s): %%1$s\"\nL.AUTO_TIMER_TEXTS.cast\t\t\t= \"%s\"\nL.AUTO_TIMER_TEXTS.castshort\t\t= \"%s \"--if short timers enabled, cast and next are same timer text, this is a conflict. the space resolves it\nL.AUTO_TIMER_TEXTS.castcount\t\t= \"%s (%%s)\"\nL.AUTO_TIMER_TEXTS.castcountshort\t= \"%s (%%s) \"--Resolve short timer conflict with next timers\nL.AUTO_TIMER_TEXTS.castsource\t\t= \"%s: %%s\"\nL.AUTO_TIMER_TEXTS.castsourceshort\t= \"%s: %%s \"--Resolve short timer conflict with next timers\nL.AUTO_TIMER_TEXTS.active\t\t\t= \"%s заканчивается\" --Buff/Debuff/event on boss\nL.AUTO_TIMER_TEXTS.fades\t\t\t= \"%s спадает\" --Buff/Debuff on players\nL.AUTO_TIMER_TEXTS.ai\t\t\t\t= \"%s ИИ\"\nL.AUTO_TIMER_TEXTS.cd\t\t\t\t= \"Восст. %s\"\nL.AUTO_TIMER_TEXTS.cdshort\t\t\t= \"~%s\"\nL.AUTO_TIMER_TEXTS.cdcount\t\t\t= \"Восст. %s (%%s)\"\nL.AUTO_TIMER_TEXTS.cdcountshort\t\t= \"~%s (%%s)\"\nL.AUTO_TIMER_TEXTS.cdsource\t\t\t= \"Восст. %s: >%%s<\"\nL.AUTO_TIMER_TEXTS.cdsourceshort\t= \"~%s: >%%s<\"\nL.AUTO_TIMER_TEXTS.cdspecial\t\t= \"Восст. спецспособности\"\nL.AUTO_TIMER_TEXTS.cdspecialshort\t= \"~Восст. спецспособности\"\n\nL.AUTO_TIMER_TEXTS.var\t\t\t\t= \"%s\"\nL.AUTO_TIMER_TEXTS.varcount\t\t\t= \"%s (%%s)\"\nL.AUTO_TIMER_TEXTS.varsource\t\t= \"%s: >%%s<\"\nL.AUTO_TIMER_TEXTS.varspecial\t\t= \"Спецспособность\"\nL.AUTO_TIMER_TEXTS.varcombo\t\t\t= \"%%1$s + %%2$s\"\n\nL.AUTO_TIMER_TEXTS.next\t\t\t= \"След. %s\"\nL.AUTO_TIMER_TEXTS.nextshort\t\t= \"%s\"\nL.AUTO_TIMER_TEXTS.nextcount\t\t= \"След. %s (%%s)\"\nL.AUTO_TIMER_TEXTS.nextcountshort\t= \"%s (%%s)\"\nL.AUTO_TIMER_TEXTS.nextsource\t\t= \"След. %s: >%%s<\"\nL.AUTO_TIMER_TEXTS.nextsourceshort\t= \"%s: %%s\"\nL.AUTO_TIMER_TEXTS.nextspecial\t\t= \"След. спецспособности\"\nL.AUTO_TIMER_TEXTS.nextspecialshort\t= \"Спецспособность\"\nL.AUTO_TIMER_TEXTS.achievement\t\t= \"%s\"\nL.AUTO_TIMER_TEXTS.stage\t\t\t= \"След. фаза\"\nL.AUTO_TIMER_TEXTS.stageshort\t\t= \"Фаза\"\nL.AUTO_TIMER_TEXTS.adds\t\t\t\t= \"Прибытие аддов\"\nL.AUTO_TIMER_TEXTS.addsshort\t\t= \"Адды\"\nL.AUTO_TIMER_TEXTS.addscustom\t\t= \"Прибытие аддов (%%s)\"\nL.AUTO_TIMER_TEXTS.addscustomshort\t= \"Адды (%%s)\"\nL.AUTO_TIMER_TEXTS.roleplay\t\t\t= \"Ролевая игра\"\n\nL.AUTO_TIMER_OPTIONS.target\t\t= \"Отсчёт времени действия дебаффа $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.targetcount\t= \"Отсчёт времени действия дебаффа (со счётчиком) $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.cast\t\t\t= \"Отсчёт времени применения заклинания $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.castcount\t\t= \"Отсчёт времени применения заклинания (со счётчиком) для $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.castsource\t\t= \"Отсчёт времени применения заклинания (с источником) для $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.active\t\t= \"Отсчёт времени действия $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.fades\t\t\t= \"Отсчёт времени до спадения $spell:%s с игроков (%ss)\"\nL.AUTO_TIMER_OPTIONS.ai\t\t\t\t= \"Отсчёт времени до восстановления $spell:%s (ИИ) (%ss)\"\nL.AUTO_TIMER_OPTIONS.cd\t\t\t= \"Отсчёт времени до восстановления $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdcount\t\t= \"Отсчёт времени до восстановления $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdsource\t\t= \"Отсчёт времени до восстановления $spell:%s (с источником) (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdspecial\t\t= \"Отсчёт времени до восстановления спец-способности (%ss)\"\nL.AUTO_TIMER_OPTIONS.next\t\t\t= \"Отсчёт времени до следующего $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextcount\t\t= \"Отсчёт времени до следующего $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextsource\t\t= \"Отсчёт времени до следующего $spell:%s (с источником) (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextspecial\t= \"Отсчёт времени до следующей спец-способности (%ss)\"\n\nL.AUTO_TIMER_OPTIONS.var \t\t\t= \"Отсчёт времени (с разбросом) до восстановления $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.varcount \t\t= \"Отсчёт времени (с количеством и разбросом) до восстановления $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.varnp \t\t\t= \"Показывать только таймер на индикаторах здоровья (с разбросом) до восстановления $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.varpnp \t\t= \"Показывать только таймер приоритета на индикаторах здоровья (с разбросом) до восстановления $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.varsource \t\t= \"Отсчёт времени (с источником и разбросом) до восстановления $spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.varspecial \t= \"Отсчёт времени (с разницей) до восстановления спецспособности (%ss)\"\nL.AUTO_TIMER_OPTIONS.varcombo \t\t= \"Отсчёт времени (с разбросом) до восстановления комбо способностей (%ss)\"\n\nL.AUTO_TIMER_OPTIONS.achievement\t= \"Отсчёт времени для %s (%ss)\"\nL.AUTO_TIMER_OPTIONS.stage\t\t\t= \"Отсчёт времени до следующей фазы (%ss)\"\nL.AUTO_TIMER_OPTIONS.adds\t\t\t= \"Отсчёт времени до прибытия аддов (%ss)\"\nL.AUTO_TIMER_OPTIONS.addscustom\t\t= \"Отсчёт времени до прибытия аддов (%ss)\"\nL.AUTO_TIMER_OPTIONS.roleplay\t\t= \"Отсчёт времени для ролевой игры (%ss)\"\n\nL.AUTO_ICONS_OPTION_TARGETS\t\t\t= \"Устанавливать метки на цели $spell:%s\"\nL.AUTO_ICONS_OPTION_TARGETS_TANK_A\t\t= \"Устанавливать метки на цели $spell:%s с приоритетом танка над ближним боем, над дальним и по алфавиту\"\nL.AUTO_ICONS_OPTION_TARGETS_TANK_R\t\t= \"Устанавливать метки на цели $spell:%s с приоритетом танка над ближним боем, над дальним и рейдового состава\"\nL.AUTO_ICONS_OPTION_TARGETS_MELEE_A\t\t= \"Устанавливать метки на цели $spell:%s с приоритетом ближнего боя и в алфавитном порядке\"\nL.AUTO_ICONS_OPTION_TARGETS_MELEE_R\t\t= \"Устанавливать метки на цели $spell:%s с приоритетом ближнего боя и рейдового состава\"\nL.AUTO_ICONS_OPTION_TARGETS_RANGED_A\t= \"Устанавливать метки на цели $spell:%s с приоритетом дальнего боя и в алфавитном порядке\"\nL.AUTO_ICONS_OPTION_TARGETS_RANGED_R\t= \"Устанавливать метки на цели $spell:%s с приоритетом дальнего боя и рейдового состава\"\nL.AUTO_ICONS_OPTION_TARGETS_ALPHA\t\t= \"Устанавливать метки на цели $spell:%s в алфавитном порядке\"\nL.AUTO_ICONS_OPTION_NPCS\t\t\t= \"Устанавливать метки на $spell:%s\"\nL.AUTO_ICONS_OPTION_CONFLICT\t\t= \" (Может конфликтовать с другими параметрами)\"\nL.AUTO_ARROW_OPTION_TEXT\t\t\t= \"Показывать стрелку \" .. L.DBM .. \" к цели, на которой $spell:%s\"\nL.AUTO_ARROW_OPTION_TEXT2\t\t\t= \"Показывать стрелку \" .. L.DBM .. \" от цели, на которой $spell:%s\"\nL.AUTO_ARROW_OPTION_TEXT3\t\t\t= \"Показывать стрелку \" .. L.DBM .. \" к определённому месту для $spell:%s\"\n\nL.AUTO_YELL_OPTION_TEXT.shortyell\t= \"Кричать, когда на Вас $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.yell\t\t= \"Кричать (с именем игрока), когда на Вас $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.yellme\t\t= \"Кричать, когда на Вас $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.count\t\t= \"Кричать (со счетчиком), когда на Вас $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.fade\t\t= \"Кричать (с обратным отсчетом), когда $spell:%s спадает\"\nL.AUTO_YELL_OPTION_TEXT.shortfade\t= \"Кричать (с обратным отсчетом), когда $spell:%s спадает\"\nL.AUTO_YELL_OPTION_TEXT.iconfade\t= \"Кричать (с обратным отсчетом и меткой), когда $spell:%s спадает\"\nL.AUTO_YELL_OPTION_TEXT.position\t= \"Кричать (с позицией и именем игрока), когда на Вас $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.shortposition\t= \"Кричать (с позицией), когда на Вас $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.combo\t\t= \"Кричать (с пользовательским текстом), когда на Вас $spell:%s и в тоже время другие заклинания\"\nL.AUTO_YELL_OPTION_TEXT.repeatplayer\t= \"Кричать повторно (с именем игрока), когда на Вас $spell:%s\"\nL.AUTO_YELL_OPTION_TEXT.repeaticon\t= \"Кричать повторно (с меткой), когда на Вас $spell:%s\"\n\nL.AUTO_YELL_ANNOUNCE_TEXT.shortyell\t= \"%s\"\nL.AUTO_YELL_ANNOUNCE_TEXT.yell\t\t= \"%s на \" .. UnitName(\"player\") .. \"!\"\nL.AUTO_YELL_ANNOUNCE_TEXT.yellme\t= \"%s на мне!\"\nL.AUTO_YELL_ANNOUNCE_TEXT.count\t\t= \"%s на \" .. UnitName(\"player\") .. \"! (%%d)\"\nL.AUTO_YELL_ANNOUNCE_TEXT.fade\t\t= \"%s спадает через %%d\"\nL.AUTO_YELL_ANNOUNCE_TEXT.shortfade\t= \"%%d\"\nL.AUTO_YELL_ANNOUNCE_TEXT.iconfade\t= \"{rt%%2$d}%%1$d\"\nL.AUTO_YELL_ANNOUNCE_TEXT.position\t= \"%s %%s на {rt%%d}\"..UnitName(\"player\")..\"{rt%%d}\"\nL.AUTO_YELL_ANNOUNCE_TEXT.shortposition\t\t= \"{rt%%1$d}%s %%2$d\"\nL.AUTO_YELL_ANNOUNCE_TEXT.combo\t\t= \"%s и %%s\"--Spell name (from option, plus spellname given in arg)\nL.AUTO_YELL_ANNOUNCE_TEXT.repeaticon\t= \"{rt%%1$d}\"\n\nL.AUTO_YELL_CUSTOM_FADE\t\t\t\t= \"%s спал\"\nL.AUTO_HUD_OPTION_TEXT\t\t\t\t= \"Показывать HudMap для $spell:%s\"\nL.AUTO_HUD_OPTION_TEXT_MULTI\t\t= \"Показывать HudMap для различных механик\"\nL.AUTO_NAMEPLATE_OPTION_TEXT\t\t= \"Показывать ауры индикаторов для $spell:%s, используя совместимый аддон индикаторов или \"..L.DBM..\"\"\nL.AUTO_NAMEPLATE_OPTION_TEXT_FORCED\t= \"Показывать ауры индикаторов для $spell:%s, используя только \"..L.DBM..\"\"\nL.AUTO_RANGE_OPTION_TEXT\t\t\t= \"Показывать окно проверки дистанции (%s м) для $spell:%s\"--string used for range so we can use things like \"5/2\" as a value for that field\nL.AUTO_RANGE_OPTION_TEXT_SHORT\t\t= \"Показывать окно проверки дистанции (%s м)\"--For when a range frame is just used for more than one thing\nL.AUTO_RRANGE_OPTION_TEXT\t\t\t= \"Показывать обратное окно проверки дистанции (%s) для $spell:%s\"--Reverse range frame (green when players in range, red when not)\nL.AUTO_RRANGE_OPTION_TEXT_SHORT\t\t= \"Показывать обратное окно проверки дистанции (%s)\"\nL.AUTO_INFO_FRAME_OPTION_TEXT\t\t= \"Показывать информационное окно для $spell:%s\"\nL.AUTO_INFO_FRAME_OPTION_TEXT2\t\t= \"Показывать информационное окно для обзора боя\"\nL.AUTO_INFO_FRAME_OPTION_TEXT3\t\t= \"Показать информационный фрейм для $spell:%s (при достижении порогового значения %%s)\"\nL.AUTO_READY_CHECK_OPTION_TEXT\t\t= \"Проигрывать звук проверки готовности, когда пулят босса (даже если он не является целью)\"\nL.AUTO_SPEEDCLEAR_OPTION_TEXT\t\t= \"Показать таймер для быстрой зачистки %s\"\nL.AUTO_PRIVATEAURA_OPTION_TEXT\t\t= \"Воспроизводить звуковые оповещения DBM для приватных аур $spell:%s в этом бою. Приоритет звука: голосовой пакет, если он доступен, резервный - Воздушный горн (Air Horn)\"\n\n--Sounds\nL.AUTO_SOUND_OPTION_TEXT\t\t\t= \"Звуковой сигнал при $spell:%d\"\nL.AUTO_SOUND_OPTION_TEXT5\t\t\t= \"5-секундный звуковой отсчет до $spell:%d\"\nL.AUTO_SOUND_OPTION_TEXT3\t\t\t= \"3-секундный звуковой отсчет до $spell:%d\"\nL.AUTO_SOUND_OPTION_TEXT_YOU\t\t= \"Звуковой сигнал при $spell:%d на Вас\"\nL.AUTO_SOUND_OPTION_TEXT_SOON\t\t= \"Звуковой сигнал при $spell:%d скоро\"\nL.AUTO_SOUND_OPTION_TEXT_CLOSE\t\t= \"Звуковой сигнал при $spell:%d около Вас\"\n\n-- New special warnings\nL.MOVE_WARNING_BAR\t\t\t\t\t= \"Индикатор предупреждения\"\nL.MOVE_WARNING_MESSAGE\t\t\t\t= \"Спасибо за использование \" .. L.DEADLY_BOSS_MODS\nL.MOVE_SPECIAL_WARNING_BAR\t\t\t= \"Индикатор спецпредупреждения\"\nL.MOVE_SPECIAL_WARNING_TEXT\t\t\t= \"Специальное предупреждение\"\n\nL.ARROW_MOVABLE\t\t\t\t\t\t= \"Индикатор стрелки\"\nL.ARROW_WAY_USAGE\t\t\t\t\t= \"/dway <x> <y>: Создаёт стрелку, которая указывает в определенное место (используя координаты текущей зоны)\"\nL.ARROW_WAY_SUCCESS\t\t\t\t\t= \"Чтобы скрыть стрелку, введите '/dbm arrow hide' или достигните указанного места\"\nL.ARROW_ERROR_USAGE\t= {\n\t\"Использование \" .. L.DBM .. \"-Arrow:\",\n\t\"-----------------\",\n\t\"/dbm arrow <x> <y>: создаёт стрелку, указывающую в определенную точку (используя координаты мира)\",\n\t\"/dbm arrow map <x> <y>: создаёт стрелку, указывающую в определенную точку (используя координаты зоны)\",\n\t\"/dbm arrow <player>: создаёт стрелку, указывающую на определенного игрока в Вашей группе или рейде (регистрозависимо!)\",\n\t\"/dbm arrow hide: скрывает стрелку\",\n\t\"/dbm arrow move: разрешает перемещение стрелки\"\n}\n\nL.SPEED_KILL_TIMER_TEXT\t\t\t\t= \"Рекордная победа\"\nL.SPEED_CLEAR_TIMER_TEXT\t\t\t= \"Лучшее прохождение\"\nL.COMBAT_RES_TIMER_TEXT\t\t\t\t= \"След. заряд БР\"\nL.TIMER_RESPAWN\t\t\t\t\t\t= \"Появление %s\"\n\nL.REQ_INSTANCE_ID_PERMISSION\t\t= \"%s запрашивает разрешение на просмотр ваших текущих сохранений подземелий.\\nВы хотите предоставить %s такое право? Этот игрок получит возможность запрашивать эту информацию без уведомления в течение вашей текущей игровой сессии.\"\nL.ERROR_NO_RAID\t\t\t\t\t= \"Вы должны состоять в рейдовой группе для использования этой функции.\"\nL.INSTANCE_INFO_REQUESTED\t\t\t= \"Отослан запрос на просмотр текущих сохранений подземелий у членов рейда.\\nОбратите внимание, что игроки будут уведомлены об этом и могут отклонить ваш запрос.\"\nL.INSTANCE_INFO_STATUS_UPDATE\t\t= \"На запрос ответили %d игроков из %d пользователей DBM: %d послали данные, %d отклонили запрос. Ожидание ответа продлено на %d секунд...\"\nL.INSTANCE_INFO_ALL_RESPONSES\t\t= \"Получен ответ ото всех членов рейда\"\nL.INSTANCE_INFO_DETAIL_DEBUG\t\t= \"Игрок: %s ТипРезультата: %s Инстанс: %s ID: %s Сложность: %d Размер: %d Прогресс: %s\"\nL.INSTANCE_INFO_DETAIL_HEADER\t\t= \"%s, сложность %s:\"\nL.INSTANCE_INFO_DETAIL_INSTANCE\t= \"    ID %s, прогресс %d: %s\"\nL.INSTANCE_INFO_DETAIL_INSTANCE2\t= \"    прогресс %d: %s\"\nL.INSTANCE_INFO_NOLOCKOUT\t\t\t= \"Ваша рейдовая группа не имеет сохранений подземелий.\"\nL.INSTANCE_INFO_STATS_DENIED\t\t= \"Отклонили запрос: %s\"\nL.INSTANCE_INFO_STATS_AWAY\t\t= \"Отошли от компьютера: %s\"\nL.INSTANCE_INFO_STATS_NO_RESPONSE\t= \"Установлена устаревшая версия DBM: %s\"\nL.INSTANCE_INFO_RESULTS\t\t\t= \"Результаты сканирования сохранений. Обратите внимание, что инстансы могут появляться более одного раза, если в вашем рейде есть игроки с локализованными клиентами WoW.\"\n--L.INSTANCE_INFO_SHOW_RESULTS\t\t= \"Игроки, которые еще не ответили: %s\\n|HDBM:showRaidIdResults|h|cff3588ff[Показать текущие результаты]|r|h\"\nL.INSTANCE_INFO_SHOW_RESULTS\t\t= \"Игроки, которые еще не ответили: %s\"\n\nL.LAG_CHECKING\t\t\t\t\t\t= \"Проверка задержки у рейда...\"\nL.LAG_HEADER\t\t\t\t\t\t= L.DEADLY_BOSS_MODS.. \" - Результаты проверки задержки\"\nL.LAG_ENTRY\t\t\t\t\t\t\t= \"%s: глобальная задержка [%d ms] / локальная задержка [%d ms]\"\nL.LAG_FOOTER\t\t\t\t\t\t= \"Нет ответа: %s\"\n\nL.DUR_CHECKING\t\t\t\t\t\t= \"Проверка прочности у рейда...\"\nL.DUR_HEADER\t\t\t\t\t\t= L.DEADLY_BOSS_MODS.. \" - результаты проверки прочности\"\nL.DUR_ENTRY\t\t\t\t\t\t\t= \"%s: прочность [%d процентов] / экипировка сломана [%s]\"\nL.LAG_FOOTER\t\t\t\t\t\t= \"Нет ответа: %s\"\n\nL.OVERRIDE_ACTIVATED\t\t\t\t\t= \"Переопределения конфигурации были активированы для этого сражения с помощью рейд-лидера\"\n\n--LDB\nL.LDB_TOOLTIP_HELP1\t\t\t\t\t= \"[ЛКМ] - открыть \" .. L.DBM\nL.LDB_TOOLTIP_HELP2\t\t\t\t\t= \"[Alt+ПКМ] - переключить в беззвучный режим\"\nL.SILENTMODE_IS\t\t\t\t\t\t= \"Тихий режим \"\n\nL.WORLD_BUFFS.hordeOny\t\t\t= \"Народы Орды, жители Оргриммара! Приходите, собирайтесь и поздравляйте героя Орды\"\nL.WORLD_BUFFS.allianceOny\t\t= \"Граждане и союзники Штормграда, в этот день вершилась история.\"\nL.WORLD_BUFFS.hordeNef\t\t\t= \"НЕФАРИАН УБИТ! Жители Оргриммара\"\nL.WORLD_BUFFS.allianceNef\t\t= \"Граждане Альянса! Владыка Черной горы повержен!\"\nL.WORLD_BUFFS.zgHeart\t\t\t= \"Теперь остался лишь один шаг до избавления от Свежевателя Душ\"\nL.WORLD_BUFFS.zgHeartBooty\t\t= \"Кровавый Свежеватель Душ побежден! Теперь нам ничто не угрожает!\"\nL.WORLD_BUFFS.zgHeartYojamba\t= \"Начинайте ритуал, слуги мои. Мы должны отправить сердце Хаккара обратно в Пустоту!\"\nL.WORLD_BUFFS.rendHead\t\t\t= \"Самозванец Ренд Чернорук мертв!\"\n\n--Retail Globals\nL.RAID_INFO_WORLD_BOSS\t\t\t\t= \"Босс вне подземелья\"\nL.SCENARIO_STAGE\t\t\t\t\t= \"%d-й этап\"\nL.SPECIALIZATION\t\t\t\t\t= \"Специализация\" -- ID: 22433\n-- EJ\nL.HARD_MODE\t\t\t\t\t\t\t= \"Сложный режим\" -- 17220\nL.BOSS_YOU_DEFEATED\t\t\t\t\t= \"Вы победили\" -- 25559\nL.BOSS_KILL_SUBTITLE\t\t\t\t= \"Босс побежден\" -- 25560\n"
  },
  {
    "path": "DBM-Core/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nif not DBM_CORE_L then DBM_CORE_L = {} end\n\nlocal L = DBM_CORE_L\n\nL.HOW_TO_USE_MOD\t\t\t\t= \"歡迎使用\"..L.DBM..\"。在聊天頻道輸入 /dbm 打開設定開始設定。你可以載入特定區域後為任何首領設定你喜歡的特別設置。\"..L.DBM..\"會在設定你的職業天賦的預設值，但有些選項可能需要調整。\"\nL.SILENT_REMINDER\t\t\t\t= \"提醒：\"..L.DBM..\"正處於無聲模式。\"\n--L.NEWS_UPDATE\t\t\t\t\t= \"|h|c11ff1111更新說明|r|h: 此更新基本上是重新發佈的9.1.9，以清除上一個文件發佈時的錯誤惡意軟件檢測驗證。讀取更多訊息在|Hgarrmission:DBM:news|h|cff3588ff[此處]|r|h\"\n\nL.COPY_URL_DIALOG_NEWS\t\t\t= \"要閱讀最新說明，請拜訪以下連結\"\n\nL.LOAD_MOD_ERROR\t\t\t\t= \"載入%s模組時發生錯誤：%s\"\nL.LOAD_MOD_SUCCESS\t\t\t\t= \"成功載入%s模組。更多選項例如自訂警告音效或是個人提醒註記請輸入/dbm或/dbm help。\"\nL.LOAD_MOD_COMBAT\t\t\t\t= \"延遲載入'%s'直到離開戰鬥\"\nL.LOAD_GUI_ERROR\t\t\t\t= \"無法載入圖形介面：%s\"\nL.LOAD_GUI_COMBAT\t\t\t\t= \"圖形介面不能在戰鬥中初始化。圖形介面將在脫離戰鬥後自動讀取，這樣就能夠再次在戰鬥中使用。\"\nL.BAD_LOAD\t\t\t\t\t\t= L.DBM..\"偵測到你的此副本的模組在戰鬥中讀取失敗。一旦脫離戰鬥，請立即輸入/consoel reloadui重新載入。\"\nL.LOAD_MOD_VER_MISMATCH\t\t\t= \"%s不能被讀取因為你的\"..L.DBM..\"核心未達需求，請更新版本。\"\nL.LOAD_MOD_EXP_MISMATCH\t\t\t= \"%s不能被讀取因為這是設計給WoW資料片而目前尚未開放。當資料片開放時，此模組會自動啟用。\"\nL.LOAD_MOD_TOC_MISMATCH\t\t\t= \"%s不能被讀取因為這是設計給WoW更新檔(%s)而目前尚未開放。當更新檔更新時，此模組會自動啟用。\"\nL.LOAD_MOD_DISABLED\t\t\t\t= \"%s已安裝但目前停用中。此模組不會載入除非你啟用它。\"\nL.LOAD_MOD_DISABLED_PLURAL\t\t= \"%s已安裝但目前停用中。這些模組不會載入除非你啟用它們。\"\n\nL.COPY_URL_DIALOG\t\t\t\t= \"複製網址\"\n\n--Post Patch 7.1\nL.NO_RANGE\t\t\t\t\t\t= \"距離雷達不能在副本中使用，使用傳統文字距離框架取代\"\nL.NO_ARROW\t\t\t\t\t\t= \"箭頭不能在副本中使用\"\nL.NO_HUD\t\t\t\t\t\t= \"HUDMap不能在副本中使用\"\n\nL.DYNAMIC_DIFFICULTY_CLUMP\t\t= L.DBM..\"已中禁用動態距離框架，你目前的團隊人數在這場戰鬥中的機制資訊不足。\"\nL.DYNAMIC_ADD_COUNT\t\t\t\t= L.DBM..\"已中禁用小怪計數警告，你目前的團隊人數在這場戰鬥中的機制資訊不足。\"\nL.DYNAMIC_MULTIPLE\t\t\t\t= L.DBM..\"已中禁用多項功能，你目前的團隊人數在這場戰鬥中的機制資訊不足。\"\n\nL.LOOT_SPEC_REMINDER\t\t\t= \"你目前的專精為:%s。而你目前的拾取選擇為:%s。\"\n\nL.BIGWIGS_ICON_CONFLICT\t\t\t= L.DBM..\"偵測到你同時開啟BigWigs和\"..L.DBM..\"的團隊圖示。請關閉其中之一的團隊圖示功能以免產生衝突。\"\n\nL.MOD_AVAILABLE\t\t\t\t\t= \"%s在此區域有模組可用。你可以在Curse、Wago、WoWI或從GitHub正式版頁面下載。\"\n\nL.COMBAT_STARTED\t\t\t\t= \"%s開戰。祝好運與盡興! :)\"\nL.COMBAT_STARTED_IN_PROGRESS\t= \"與%s開戰已進行的戰鬥。祝好運與盡興! :)\"\nL.GUILD_COMBAT_STARTED\t\t\t= \"%s已經與%s的公會團隊開戰！\"\nL.SCENARIO_STARTED\t\t\t\t= \"%s開始。祝好運與盡興! :)\"\nL.SCENARIO_STARTED_IN_PROGRESS\t= \"加入進行中的%s事件。祝好運與盡興! :)\"\nL.BOSS_DOWN\t\t\t\t\t\t= \"擊敗%s，用了%s!\"\nL.BOSS_DOWN_I\t\t\t\t\t= \"擊敗%s!你已勝利了%d次。\"\nL.BOSS_DOWN_L\t\t\t\t\t= \"擊敗%s!本次用了%s，上次用了%s，最快紀錄為%s。你總共戰勝了%d次。\"\nL.BOSS_DOWN_NR\t\t\t\t\t= \"擊敗%s!用了%s! 這是一個新記錄! (舊紀錄為%s) 你總共戰勝了%d次。\"\nL.RAID_DOWN\t\t\t\t\t\t= \"%s清除 用了%s！\"\nL.RAID_DOWN_L\t\t\t\t\t= \"%s清除 用時%s！你最快的清除紀錄 %s。\"\nL.RAID_DOWN_NR\t\t\t\t\t= \"%s清除 用時%s！這是一個新紀錄！(舊紀錄為 %s)。\"\nL.GUILD_BOSS_DOWN\t\t\t\t= \"已擊敗%s，在%s的公會團隊用了%s！\"\nL.SCENARIO_COMPLETE\t\t\t\t= \"%s完成!用了%s!\"\nL.SCENARIO_COMPLETE_I\t\t\t= \"%s完成! 你總共完成了%d次。\"\nL.SCENARIO_COMPLETE_L\t\t\t= \"%s完成!本次用了%s，上次用了%s，最快紀錄為%s。你總共完成了%d次。\"\nL.SCENARIO_COMPLETE_NR\t\t\t= \"%s完成!用了%s! 這是一個新記錄! (舊紀錄為%s) 你總共完成了%d次。\"\nL.COMBAT_ENDED_AT\t\t\t\t= \"%s(%s)的戰鬥經過%s結束。\"\nL.COMBAT_ENDED_AT_LONG\t\t\t= \"%s(%s)的戰鬥經過%s結束。你在這個難度總共滅團了%d次。\"\nL.GUILD_COMBAT_ENDED_AT\t\t\t= \"%s的公會團隊在%s (%s)的戰鬥滅團，經過%s.\"\nL.SCENARIO_ENDED_AT\t\t\t\t= \"%s結束!用了%s!\"\nL.SCENARIO_ENDED_AT_LONG\t\t= \"%s結束!本次用了%s，你已有共%d次未完成的嘗試在這個難度裡。\"\nL.COMBAT_STATE_RECOVERED\t\t= \"%s的戰鬥在%s前開始，恢復計時器中...\"\nL.TRANSCRIPTOR_LOG_START\t\t= \"Transcriptor開始記錄。\"\nL.TRANSCRIPTOR_LOG_END\t\t\t= \"Transcriptor結束紀錄。\"\n\nL.MOVIE_SKIPPED\t\t\t\t\t= L.DBM..\"已嘗試自動略過一個過場動畫。\"\nL.BONUS_SKIPPED\t\t\t\t\t= L.DBM..\"已經自動關閉額外戰利品擲骰框架。如果你需要恢復此框架，在三分鐘內輸入/dbmbonusroll\"\n\nL.AFK_WARNING\t\t\t\t\t= \"你正在暫離並戰鬥中(血量還剩餘%d百分比)所以發出警告。如果你並非暫離，請清除暫離的標籤或是在'額外功能'停用此選項。\"\n\nL.COMBAT_STARTED_AI_TIMER\t\t= \"我的CPU是一個神經網路處理器;一個學習中的電腦 (這場戰鬥將使用新的計時器AI功能生成近似值的計時條)\"\n\nL.PROFILE_NOT_FOUND\t\t\t\t= \"<\"..L.DBM..\">你目前的配置檔已經損毀。\"..L.DBM..\"會載入'Default'配置檔。\"\nL.PROFILE_CREATED\t\t\t\t= \"配置檔'%s'已建立。\"\nL.PROFILE_CREATE_ERROR\t\t\t= \"建立配置檔失敗，無效的配置檔名稱。\"\nL.PROFILE_CREATE_ERROR_D\t\t= \"建立配置檔失敗，配置檔'%s'已存在。\"\nL.PROFILE_APPLIED\t\t\t\t= \"配置檔'%s'已套用。\"\nL.PROFILE_APPLY_ERROR\t\t\t= \"套用配置檔失敗，配置檔'%s'不存在。\"\nL.PROFILE_COPIED\t\t\t\t= \"配置檔'%s'已複製。\"\nL.PROFILE_COPY_ERROR\t\t\t= \"複製配置檔失敗，配置檔'%s'不存在。\"\nL.PROFILE_COPY_ERROR_SELF\t\t= \"不能複製配置檔到本身來源。\"\nL.PROFILE_DELETED\t\t\t\t= \"配置檔'%s'已刪除。配置檔'Default'會被套用。\"\nL.PROFILE_DELETE_ERROR\t\t\t= \"刪除配置檔失敗，配置檔'%s'不存在。\"\nL.PROFILE_CANNOT_DELETE\t\t\t= \"不能刪除'Default'配置檔。\"\nL.MPROFILE_COPY_SUCCESS\t\t\t= \"%s's (%d專精)模組設定已被複製。\"\nL.MPROFILE_COPY_SELF_ERROR\t\t= \"不能複製角色設定到本身來源\"\nL.MPROFILE_COPY_S_ERROR\t\t\t= \"配置檔來源已經損毀，設定不能被複製或是部分複製，複製已失敗。\"\nL.MPROFILE_COPYS_SUCCESS\t\t= \"%s's (%d專精)模組音效或註記設定已被複製。\"\nL.MPROFILE_COPYS_SELF_ERROR\t\t= \"不能複製角色音效或註記設定到本身來源\"\nL.MPROFILE_COPYS_S_ERROR\t\t= \"配置檔來源已經損毀，音效或註記設定不能被複製或是部分複製，複製已失敗。\"\nL.MPROFILE_DELETE_SUCCESS\t\t= \"%s's (%d專精)模組設定已被刪除。\"\nL.MPROFILE_DELETE_SELF_ERROR\t= \"不能刪除使用中的模組設定。\"\nL.MPROFILE_DELETE_S_ERROR\t\t= \"配置檔來源已經損毀，設定不能被刪除或是部分刪除，刪除已失敗。\"\n\nL.NOTE_SHARE_SUCCESS\t\t\t= \"%s已分享他的%s的註記\"\nL.NOTE_SHARE_LINK\t\t\t\t= \"點擊這裡打開註記\"\nL.NOTE_SHARE_FAIL\t\t\t\t= \"%s嘗試與你分享%s的註記。模組相關的技能沒有安裝或是載入。請確定你載入此模組並請求他們在分享一次。\"\n\nL.NOTEHEADER\t\t\t\t\t= \"為%s輸入你的註記。在><插入腳色名稱可套用職業顏色。多個註記請使用'/'分開\"\nL.NOTEFOOTER\t\t\t\t\t= \"按下'確定'接受變更或'取消'放棄變更\"\nL.NOTESHAREDHEADER\t\t\t\t= \"%s已分享%s的註記。接受註記會覆蓋你原有的註記。\"\nL.NOTESHARED\t\t\t\t\t= \"你的註記已經送出至隊伍\"\nL.NOTESHAREERRORSOLO\t\t\t= \"寂寞嗎?不應該能分享注意給你自己\"\nL.NOTESHAREERRORBLANK\t\t\t= \"不能分享空白註記\"\nL.NOTESHAREERRORGROUPFINDER\t\t= \"註記不能被分享在戰場、隨機團隊或隨機隊伍\"\nL.NOTESHAREERRORALREADYOPEN\t\t= \"不能開啟分享註記連結當註記編輯器已經被打開，避免你失去正在編輯的註記\"\n\nL.ALLMOD_DEFAULT_LOADED\t\t\t= \"此副本所有的選項設定已套用預設值。\"\nL.ALLMOD_STATS_RESETED\t\t\t= \"所有模組狀態已經被重置。\"\nL.MOD_DEFAULT_LOADED\t\t\t= \"此戰鬥的預設選項已套用。\"\n\nL.WORLDBOSS_ENGAGED\t\t\t\t= \"在你的伺服器上的%s已在百分之%s時開戰(%s發送)。\"\nL.WORLDBOSS_DEFEATED\t\t\t= \"在你的伺服器上的%s已被擊敗(%s發送)。\"\nL.WORLDBUFF_STARTED\t\t\t\t= \"在你的伺服器上的%s增益已由%s陣營開始(%s發送)。\"\n\nL.TIMER_FORMAT_SECS\t\t\t\t= \"%.2f秒\"\nL.TIMER_FORMAT_MINS\t\t\t\t= \"%d分鐘\"\nL.TIMER_FORMAT\t\t\t\t\t= \"%d分%.2f秒\"\n\nL.MIN\t\t\t\t\t\t\t= \"分\"\nL.MIN_FMT\t\t\t\t\t\t= \"%d分\"\nL.SEC\t\t\t\t\t\t\t= \"秒\"\nL.SEC_FMT\t\t\t\t\t\t= \"%s秒\"\n\nL.GENERIC_WARNING_OTHERS\t\t= \"與一個其他\"\nL.GENERIC_WARNING_OTHERS2\t\t= \"與其他%d\"\nL.GENERIC_WARNING_BERSERK\t\t= \"%s%s後狂暴\"\nL.GENERIC_TIMER_BERSERK\t\t\t= \"狂暴\"\nL.OPTION_TIMER_BERSERK\t\t\t= \"為$spell:26662顯示計時器\"\nL.GENERIC_TIMER_COMBAT\t\t\t= \"戰鬥開始\"\nL.OPTION_TIMER_COMBAT\t\t\t= \"為戰鬥開始顯示計時器\"\nL.BAD\t\t\t\t\t\t\t= \"地板技能\"\nL.OPTION_HEALTH_FRAME\t\t\t= \"顯示首領血量框架\"\n\nL.OPTION_CATEGORY_TIMERS\t\t\t= \"計時條\"\n--Sub cats for \"announce\" object\nL.OPTION_CATEGORY_WARNINGS\t\t\t= \"一般提示\"\nL.OPTION_CATEGORY_WARNINGS_YOU\t\t= \"個人提示\"\nL.OPTION_CATEGORY_WARNINGS_OTHER\t= \"目標提示\"\nL.OPTION_CATEGORY_WARNINGS_ROLE\t\t= \"角色專精提示\"\nL.OPTION_CATEGORY_SPECWARNINGS\t\t= \"特別提示\"\n\nL.OPTION_CATEGORY_SOUNDS\t\t\t= \"音效\"\n--Misc object broken down into sub cats\nL.OPTION_CATEGORY_DROPDOWNS\t\t\t= \"下拉選項\"\nL.OPTION_CATEGORY_YELLS\t\t\t\t= \"大喊\"\nL.OPTION_CATEGORY_NAMEPLATES\t\t= \"名條\"\nL.OPTION_CATEGORY_ICONS\t\t\t\t= \"圖示\"\n\nL.AUTO_RESPONDED\t\t\t\t\t\t= \"已自動回覆密語。\"\nL.STATUS_WHISPER\t\t\t\t\t\t= \"%s：%s，%d/%d存活。\"\n--Bosses\nL.AUTO_RESPOND_WHISPER\t\t\t\t= \"%s正在與%s交戰（當前%s，%d/%d存活）\"\nL.WHISPER_COMBAT_END_KILL\t\t\t= \"%s已經擊敗%s!\"\nL.WHISPER_COMBAT_END_KILL_STATS\t\t= \"%s已經擊敗%s! 他們總共已擊殺了%d次。\"\nL.WHISPER_COMBAT_END_WIPE_AT\t\t= \"%s在%s還有%s時滅團了。\"\nL.WHISPER_COMBAT_END_WIPE_STATS_AT\t= \"%s在%s還有%s時滅團了。他們在這個難度總共滅團了%d次。\"\n--Scenarios (no percents. words like \"fighting\" or \"wipe\" changed to better fit scenarios)\nL.AUTO_RESPOND_WHISPER_SCENARIO\t\t= \"%s忙碌於%s(%d/%d存活)\"\nL.WHISPER_SCENARIO_END_KILL\t\t\t= \"%s已經完成%s!\"\nL.WHISPER_SCENARIO_END_KILL_STATS\t= \"%s已經完成%s!他們總共有%d次勝利。\"\nL.WHISPER_SCENARIO_END_WIPE\t\t\t= \"%s未完成%s。\"\nL.WHISPER_SCENARIO_END_WIPE_STATS\t= \"%s未完成%s。他們在這個難度總共未完成%d次。\"\n\nL.VERSIONCHECK_HEADER\t\t\t= \"Boss Mods - 版本檢測\"\nL.VERSIONCHECK_ENTRY\t\t\t= \"%s: %s (%s) %s\"--One Boss mod\nL.VERSIONCHECK_ENTRY_TWO\t\t= \"%s: %s (%s) & %s (%s)\"--Two Boss mods\nL.VERSIONCHECK_ENTRY_NO_DBM\t\t= \"%s：尚未安裝任何團隊首領模組\"\nL.VERSIONCHECK_FOOTER\t\t\t= \"找到有%d玩家正在使用\"..L.DBM..\"且有%d玩家正在使用Bigwigs\"\nL.VERSIONCHECK_OUTDATED\t\t\t= \"下列有%d玩家正在使用過期的首領模組:%s\"\nL.YOUR_VERSION_OUTDATED\t\t\t= \"你的 Deadly Boss Mod 已經過期。\" .. L.UPDATEREMINDER_URL\nL.VOICE_PACK_OUTDATED\t\t\t= \"你的\"..L.DBM..\"語音包可能缺少在這個版本的\"..L.DBM..\"需要的語音。部分警告音效已經被停用。請下載新版本的語音包或是聯絡語音包作者更新並加入缺少的語音。\"\nL.VOICE_MISSING\t\t\t\t\t= \"\"..L.DBM..\"找不到你所選取的語音包。請確定你的語音包已正確的安裝與啟用。\"\nL.VOICE_DISABLED\t\t\t\t= \"你的語音包已安裝但是尚未啟用。如果你想使用語音包，請確定語言包已在語音警告中被選取，或是刪除不使用的語音包去隱藏此訊息。\"\nL.VOICE_COUNT_MISSING\t\t\t= \"所選取的語音/倒數語音包%d找不到倒數語音。設定已被重置回預設值：%s。\"\nL.BIG_WIGS\t\t\t\t\t\t= \"BigWigs\"\n\nL.UPDATEREMINDER_HEADER\t\t\t\t= \"你的Deadly Boss Mod已經過期。\\n版本 %s (%s) 可在此处下载：\" .. L.UPDATEREMINDER_URL\nL.UPDATEREMINDER_FOOTER\t\t\t\t= \"按下\" .. (IsMacClient() and \"Cmd-C\" or \"Ctrl-C\")  ..  \"：複製下載網址到剪貼簿。\"\nL.UPDATEREMINDER_FOOTER_GENERIC\t\t= \"按下\" .. (IsMacClient() and \"Cmd-C\" or \"Ctrl-C\")  ..  \"：複製網址到剪貼簿。\"\nL.UPDATEREMINDER_DISABLE\t\t\t= \"警告: 你的\"..L.DBM..\"版本已大幅度的過期並且無法與新版本相容，\"..L.DBM..\"已被強制關閉並且無法使用直到更新為止。這是為了確保舊而不相容的程式碼不會對你而團隊夥伴造成低落的遊戲體驗。\"\nL.UPDATEREMINDER_DISABLETEST\t\t= \"警告: 你的\"..L.DBM..\"版本已大幅度的過期並且是在beta伺服器上測試，\"..L.DBM..\"已被強制關閉並且無法使用直到更新為止。這是為了確保未使用過期版本來生成測試反饋。\"\nL.UPDATEREMINDER_HOTFIX\t\t\t\t= \"你的\"..L.DBM..\"版本會在這首領戰鬥有不準確的計時器或警告。這問題已被修正在新版正式版(或是更新到最新的測試版。)\"\nL.UPDATEREMINDER_HOTFIX_ALPHA\t\t= \"您的\"..L.DBM..\"版本在此首領戰有些已知問題，將會在未來的正式版修正 (或是最新的測試版)\"\nL.UPDATEREMINDER_MAJORPATCH\t\t\t= \"警告: 你的\"..L.DBM..\"已經過期，\"..L.DBM..\"已被禁用直到你更新至最新版，因為遊戲大改版。為了不讓舊的程式碼拖累遊戲體驗。請至curse、Wago、WoWI或是GitHub發佈頁下載最新版本的DBM。\"\nL.VEM\t\t\t\t\t\t\t\t= \"警告: 你同時使用DBM和VEM。DBM將停用而無法執行。\"\nL.OUTDATEDPROFILES\t\t\t\t\t= \"警告: DBM-Profiles不相容此版本DBM。請移除避免衝突。\"\nL.OUTDATEDSPELLTIMERS\t\t\t\t= \"警告：DBM-SpellTimers破壞了\" .. L.DBM .. \".必須要移除\" .. L.DBM .. \"才能正常運作。\"\nL.OUTDATEDRLT\t\t\t\t\t\t= \"警告：DBM-RaidLeadTools破壞了\" .. L.DBM .. \". DBM-RaidLeadTools已經不再支援並且必須移除\" .. L.DBM .. \"才能正常運作。\"\nL.VICTORYSOUND\t\t\t\t\t\t= \"警告：DBM-VictorySound不相容此版本\"..L.DBM..\"。請移除避免衝突。\"\nL.DPMCORE\t\t\t\t\t\t\t= \"警告: Deadly PvP 模組已經停止更新而且不相容此版本的\"..L.DBM..\"。請先移除以避免衝突。\"\nL.DBMLDB\t\t\t\t\t\t\t= \"警告: DBM-LDB已內建在\"..L.DBM..\"-核心。雖然它不會造成任何傷害，但建議從addons資料夾中刪除“DBM-LDB”\"\nL.DBMLOOTREMINDER\t\t\t\t\t= \"警告：已安裝第三方模組 DBM-LootReminder。 此附加插件不再與正式版WOW客戶端相容，並且將導致\"..L.DBM..\"中斷並且無法發送請求計時器。 建議卸載此插件。\"\nL.UPDATE_REQUIRES_RELAUNCH\t\t\t= \"警告: 如果你沒有重啟你的遊戲，這次\"..L.DBM..\"更新可能無法正確運作。這次更新包含了新的檔案或是.toc檔更新而不能使用ReloadUI載入。如果沒有將遊戲完全重啟可能會導致錯誤或功能不完整。\"\nL.OUT_OF_DATE_NAG\t\t\t\t\t= \"你的\"..L.DEADLY_BOSS_MODS..\"版本已經過期，新版本針對特定的首領戰鬥增加新的功能和錯誤的修復。建議您進行更新來改善您的游戲體驗。\"\n\nL.MOVABLE_BAR\t\t\t\t\t= \"拖動我!\"\n\nL.PIZZA_SYNC_INFO\t\t\t\t= \"|Hplayer:%1$s|h[%1$s]|h 向你發送了\" .. L.DBM .. \"的倒數計時: '%2$s'\\n|HDBM:cancel:%2$s:nil|h|cff3588ff[取消此倒數計時]|r|h  |HDBM:ignore:%2$s:%1$s|h|cff3588ff[忽略來自 %1$s 的倒數計時]|r|h\"\n--L.PIZZA_SYNC_INFO\t\t\t\t= \"|Hplayer:%1$s|h[%1$s]|h向你發送了一個倒數計時\"\nL.PIZZA_CONFIRM_IGNORE\t\t\t= \"是否要在該次遊戲連結中忽略來自%s的計時？\"\nL.PIZZA_ERROR_USAGE\t\t\t\t= \"命令：/dbm [broadcast] timer <時間（秒）> <文字>。<時間>必須大於等於3\"\n\nL.MINIMAP_TOOLTIP_FOOTER\t\t= \"按下Shift並拖曳即可移動\"\n\nL.RANGECHECK_HEADER\t\t\t\t= \"距離監視(%d碼)\"\nL.RANGECHECK_HEADERT\t\t\t= \"距離監視 (%d碼-%d人)\"\nL.RANGECHECK_RHEADER\t\t\t= \"反向距離監視 (%d碼)\"\nL.RANGECHECK_RHEADERT\t\t\t= \"反向距離監視 (%d碼-%d人)\"\nL.RANGECHECK_SETRANGE\t\t\t= \"設置距離\"\nL.RANGECHECK_SETTHRESHOLD\t\t= \"設置玩家數量門檻\"\nL.RANGECHECK_SOUNDS\t\t\t\t= \"音效\"\nL.RANGECHECK_SOUND_OPTION_1\t\t= \"當一位玩家在範圍內時播放音效\"\nL.RANGECHECK_SOUND_OPTION_2\t\t= \"當多於一位玩家在範圍內時播放音效\"\nL.RANGECHECK_SOUND_0\t\t\t= \"沒有音效\"\nL.RANGECHECK_SOUND_1\t\t\t= \"預設音效\"\nL.RANGECHECK_SOUND_2\t\t\t= \"蜂鳴聲\"\nL.RANGECHECK_SETRANGE_TO\t\t= \"%d 碼\"\nL.RANGECHECK_OPTION_FRAMES\t\t= \"框架\"\nL.RANGECHECK_OPTION_RADAR\t\t= \"顯示雷達框架\"\nL.RANGECHECK_OPTION_TEXT\t\t= \"顯示文字框\"\nL.RANGECHECK_OPTION_BOTH\t\t= \"兩者都顯示\"\nL.RANGERADAR_HEADER\t\t\t\t= \"距離:%d玩家(%d)\"\nL.RANGERADAR_BOSS_HEADER\t\t= \"首領範圍%d碼\"\nL.RANGERADAR_RHEADER\t\t\t= \"反距離:%d玩家:%d\"\nL.RANGERADAR_IN_RANGE_TEXT\t\t= \"%d在範圍內(%0.1f碼)\"--Multi\nL.RANGECHECK_IN_RANGE_TEXT\t\t= \"%d在範圍內\"--Text based doesn't need (%dyd), especially since it's not very accurate to the specific yard anyways\nL.RANGERADAR_IN_RANGE_TEXTONE\t= \"%s (%0.1f碼)\"--One target\n\nL.INFOFRAME_SHOW_SELF\t\t\t= \"總是顯示你的能量\"\nL.INFOFRAME_SETLINES\t\t\t= \"設定最大行數\"\nL.INFOFRAME_SETCOLS\t\t\t\t= \"設定最大行數\"\nL.INFOFRAME_LINESDEFAULT\t\t= \"由插件設定\"\nL.INFOFRAME_LINES_TO\t\t\t= \"%d 行\"\nL.INFOFRAME_COLS_TO\t\t\t\t= \"%d 行\"\nL.INFOFRAME_POWER\t\t\t\t= \"能量\"\nL.INFOFRAME_AGGRO\t\t\t\t= \"仇恨\"\nL.INFOFRAME_MAIN\t\t\t\t= \"主要：\"--Main power\nL.INFOFRAME_ALT\t\t\t\t\t= \"次要：\"--Alternate Power\n\nL.LFG_INVITE\t\t\t\t\t= \"地城準備確認\"\n\nL.SLASHCMD_HELP\t\t\t\t= {\n\t\"可用指令：\",\n\t\"-----------------\",\n\t\"/dbm unlock：顯示一個可移動的計時器（也可使用：move）。\",\n\t\"/range <數字> or /distance <數字>: 顯示距離框架。/rrange 或 /rdistance 顯示相反色。\",\n\t\"/hudar <數字>: 顯示基於距離查詢的HUD。\",\n\t\"/dbm timer: 開始一個自訂的\"..L.DBM..\"計時器，輸入'/dbm timer'獲得更多訊息。\",\n\t\"/dbm arrow: 顯示\"..L.DBM..\"箭頭，輸入'/dbm arrow help'獲得更多訊息。\",\n\t\"/dbm hud: 顯示\"..L.DBM..\" hud，輸入'/dbm hud'獲得更多訊息。\",\n\t\"/dbm help2: 顯示團隊管理指令\",\n}\nL.SLASHCMD_HELP2\t\t\t\t= {\n\t\"可用指令：\",\n\t\"-----------------\",\n\t\"/dbm pull <秒數>: 開始備戰計時器<秒數>。向所有團隊成員發送一個\"..L.DBM..\"備戰計時器（需要權限）。\",\n\t\"/dbm break <分鐘>: 開始休息計時器<分鐘>。向所有團隊成員發送一個\"..L.DBM..\"休息計時器（需要權限）。\",\n\t\"/dbm version: 進行首領插件的版本檢測（也可使用：ver）。\",\n\t\"/dbm version2: 進行首領插件的版本檢測同時也密語提醒過期的使用者（也可使用：ver2）。\",\n\t\"/dbm lag: 進行團隊範圍內的網路延遲檢測。\",\n\t\"/dbm durability: 進行團隊範圍內的裝備耐久度檢測。\"\n}\nL.TIMER_USAGE\t= {\n\t\"DBM計時器指令：\",\n\t\"-----------------\",\n\t\"/dbm timer <秒數> <文字>: 開始一個時間為<秒數>秒並以<文字>為名稱的計時器。\",\n\t\"/dbm ltimer <秒數> <文字>: 開始一個時間為<秒數>秒的計時器同時無限循環直到取消。\",\n\t\"(如果有團長或助理權限，在'timer'或'ltimer'計時器指令前加入'Broadcast'可以將此分享給團隊)\",\n\t\"/dbm timer endloop: 停止任何無限循環ltimer的計時器。\",\n}\n\nL.ERROR_NO_PERMISSION\t\t= \"無權進行此操作。\"\nL.TIME_TOO_SHORT\t\t\t= \"備戰計時器必須超過3秒。 \"\n\nL.BREAK_USAGE\t\t\t\t\t= \"休息時間不可以長過60分鐘。請確定您輸入的時間是分鐘而不是秒。\"\nL.BREAK_START\t\t\t\t\t= \"現在開始休息-你有%s分鐘! (由 %s 發送)\"\nL.BREAK_MIN\t\t\t\t\t\t= \"%s分鐘後休息時間結束!\"\nL.BREAK_SEC\t\t\t\t\t\t= \"%s秒後休息時間結束!\"\nL.TIMER_BREAK\t\t\t\t\t= \"休息時間!\"\nL.ANNOUNCE_BREAK_OVER\t\t\t= \"休息結束於%s\"\n\nL.TIMER_PULL\t\t\t\t\t= \"戰鬥準備\"\nL.ANNOUNCE_PULL_MODE\t\t\t= \"難度：%s\"\nL.ANNOUNCE_PULL\t\t\t\t\t= \"%d秒後拉怪 (%s發起)\"\nL.ANNOUNCE_PULL_NOW\t\t\t\t= \"拉怪囉!\"\nL.ANNOUNCE_PULL_TARGET\t\t\t= \"%2$d秒後開打%1$s! (%3$s 發起)\"\nL.ANNOUNCE_PULL_NOW_TARGET\t\t= \"%s現在開打!\"\nL.GEAR_WARNING\t\t\t\t\t= \"警告：檢查裝備。你的所裝備的裝備等級低於包包中的裝備%d個等級。\"\nL.GEAR_WARNING_WEAPON\t\t\t= \"警告：檢查你是否裝備正確的武器。\"\nL.GEAR_FISHING_POLE\t\t\t\t= \"釣魚竿\"\n\nL.ACHIEVEMENT_TIMER_SPEED_KILL = \"成就\"\n\nL.AUTO_ANNOUNCE_TEXTS.you\t\t\t\t\t= \"你中了%s\"\nL.AUTO_ANNOUNCE_TEXTS.target\t\t\t\t= \"%s:>%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetdistance\t\t= \"%s:>%%s< (%%d碼)\"\nL.AUTO_ANNOUNCE_TEXTS.targetsource\t\t\t= \">%%s< 施放 %s 在 >%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetcount\t\t\t= \"%s (%%s):>%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.targetcountdistance\t= \"%s (%%s):>%%s< (%%d碼)\"\nL.AUTO_ANNOUNCE_TEXTS.spell\t\t\t\t\t= \"%s\"\nL.AUTO_ANNOUNCE_TEXTS.ends\t\t\t\t\t= \"%s結束\"\nL.AUTO_ANNOUNCE_TEXTS.endtarget\t\t\t\t= \"%s結束:>%%s<\"\nL.AUTO_ANNOUNCE_TEXTS.fades\t\t\t\t\t= \"%s消退\"\nL.AUTO_ANNOUNCE_TEXTS.addsleft\t\t\t\t= \"%s還剩下:%%d\"\nL.AUTO_ANNOUNCE_TEXTS.cast\t\t\t\t\t= \"施放%s:%.1f秒\"\nL.AUTO_ANNOUNCE_TEXTS.soon\t\t\t\t\t= \"%s即將到來\"\nL.AUTO_ANNOUNCE_TEXTS.sooncount\t\t\t\t= \"%s (%%s)即將到來\"\nL.AUTO_ANNOUNCE_TEXTS.countdown\t\t\t\t= \"%s還有%%ds\"\nL.AUTO_ANNOUNCE_TEXTS.prewarn\t\t\t\t= \"%s在%s\"\nL.AUTO_ANNOUNCE_TEXTS.bait\t\t\t\t\t= \"%s即將到來 - 快引誘\"\nL.AUTO_ANNOUNCE_TEXTS.stage\t\t\t\t\t= \"第%s階段\"\nL.AUTO_ANNOUNCE_TEXTS.prestage\t\t\t\t= \"第%s階段即將到來\"\nL.AUTO_ANNOUNCE_TEXTS.count\t\t\t\t\t= \"%s (%%s)\"\nL.AUTO_ANNOUNCE_TEXTS.stack\t\t\t\t\t=\">%%s<中了%s (%%d)\"\nL.AUTO_ANNOUNCE_TEXTS.moveto\t\t\t\t= \"%s - 移動到>%%s<\"\n\nlocal prewarnOption\t\t\t\t\t\t\t= \"預先警告：$spell:%s\"\nL.AUTO_ANNOUNCE_OPTIONS.you\t\t\t\t\t= \"提示：中了$spell:%s時\"\nL.AUTO_ANNOUNCE_OPTIONS.target\t\t\t\t= \"提示：$spell:%s的目標\"\nL.AUTO_ANNOUNCE_OPTIONS.targetdistance\t\t= \"提示：$spell:%s的目標（有距離）\"\nL.AUTO_ANNOUNCE_OPTIONS.targetNF\t\t\t= \"提示：$spell:%s的目標(忽略全局目標過濾)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetsource\t\t= \"提示：$spell:%s的目標(包含來源)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetcount\t\t\t= \"提示：$spell:%s的目標(包含計數)\"\nL.AUTO_ANNOUNCE_OPTIONS.targetcountdistance\t= \"提示：$spell:%s的目標（帶有計數和距離）\"\nL.AUTO_ANNOUNCE_OPTIONS.spell\t\t\t\t= \"提示：當$spell:%s施放時\"\nL.AUTO_ANNOUNCE_OPTIONS.ends\t\t\t\t= \"提示：當$spell:%s結束\"\nL.AUTO_ANNOUNCE_OPTIONS.endtarget\t\t\t= \"提示：當$spell:%s結束(包含目標)\"\nL.AUTO_ANNOUNCE_OPTIONS.fades\t\t\t\t= \"提示：當$spell:%s消退\"\nL.AUTO_ANNOUNCE_OPTIONS.addsleft\t\t\t= \"提示：$spell:%s剩餘數量\"\nL.AUTO_ANNOUNCE_OPTIONS.cast\t\t\t\t= \"提示：當$spell:%s開始施放\"\nL.AUTO_ANNOUNCE_OPTIONS.soon\t\t\t\t= prewarnOption\nL.AUTO_ANNOUNCE_OPTIONS.sooncount\t\t\t= prewarnOption\nL.AUTO_ANNOUNCE_OPTIONS.countdown\t\t\t= \"預先警告：$spell:%s的倒數計時訊息\"\nL.AUTO_ANNOUNCE_OPTIONS.prewarn\t\t\t\t= prewarnOption\nL.AUTO_ANNOUNCE_OPTIONS.bait\t\t\t\t= \"警告：$spell:%s去引誘的預先警告\"\nL.AUTO_ANNOUNCE_OPTIONS.stage\t\t\t\t= \"提示：第%s階段\"\nL.AUTO_ANNOUNCE_OPTIONS.phasechange\t\t\t= \"提示：階段轉換\"\nL.AUTO_ANNOUNCE_OPTIONS.stagechange\t\t\t= \"預先警告：第%s階段\"\nL.AUTO_ANNOUNCE_OPTIONS.count\t\t\t\t= \"提示：當$spell:%s施放時(包含計數)\"\nL.AUTO_ANNOUNCE_OPTIONS.stack\t\t\t\t= \"提示：$spell:%s疊加層數\"\nL.AUTO_ANNOUNCE_OPTIONS.moveto\t\t\t\t= \"提示：$spell:%s需要移動到某人或某個地方\"\n\nL.AUTO_SPEC_WARN_TEXTS.spell\t\t\t\t= \"%s!\"\nL.AUTO_SPEC_WARN_TEXTS.ends\t\t\t\t\t= \"%s結束\"\nL.AUTO_SPEC_WARN_TEXTS.fades\t\t\t\t= \"%s消退\"\nL.AUTO_SPEC_WARN_TEXTS.soon\t\t\t\t\t= \"%s即將到來\"\nL.AUTO_SPEC_WARN_TEXTS.sooncount\t\t\t= \"%s (%%s)即將到來\"\nL.AUTO_SPEC_WARN_TEXTS.bait\t\t\t\t\t= \"%s即將到來 - 快引誘\"\nL.AUTO_SPEC_WARN_TEXTS.prewarn\t\t\t\t= \"%s在%s\"\nL.AUTO_SPEC_WARN_TEXTS.dispel\t\t\t\t= \">%%s<中了%s - 現在驅散\"\nL.AUTO_SPEC_WARN_TEXTS.interrupt\t\t\t= \"%s - 快中斷>%%s< !\"\nL.AUTO_SPEC_WARN_TEXTS.interruptcount\t\t= \"%s - 快中斷>%%s< !(%%d)\"\nL.AUTO_SPEC_WARN_TEXTS.you\t\t\t\t\t= \"你中了%s\"\nL.AUTO_SPEC_WARN_TEXTS.youcount\t\t\t\t= \"你中了%s (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.youpos\t\t\t\t= \"你中了%s (位置：%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.youposcount\t\t\t= \"你中了%s (%%s) (位置: %%s)\"\nL.AUTO_SPEC_WARN_TEXTS.soakpos\t\t\t\t= \"%s - 快到%%s分傷\"\nL.AUTO_SPEC_WARN_TEXTS.target\t\t\t\t= \">%%s<中了%s\"\nL.AUTO_SPEC_WARN_TEXTS.targetcount\t\t\t= \">%%2$s<中了%s (%%1$s) \"\nL.AUTO_SPEC_WARN_TEXTS.defensive\t\t\t= \"%s - 使用防禦技能\"\nL.AUTO_SPEC_WARN_TEXTS.taunt\t\t\t\t= \">%%s<中了%s - 快嘲諷\"\nL.AUTO_SPEC_WARN_TEXTS.close\t\t\t\t= \"你附近的>%%s<中了%s\"\nL.AUTO_SPEC_WARN_TEXTS.move\t\t\t\t\t= \"%s - 快移動\"\nL.AUTO_SPEC_WARN_TEXTS.keepmove\t\t\t\t= \"%s - 保持移動\"\nL.AUTO_SPEC_WARN_TEXTS.stopmove\t\t\t\t= \"%s - 停止移動\"\nL.AUTO_SPEC_WARN_TEXTS.dodge\t\t\t\t= \"%s - 閃避攻擊\"\nL.AUTO_SPEC_WARN_TEXTS.dodgecount\t\t\t= \"%s (%%s) - 閃避攻擊\"\nL.AUTO_SPEC_WARN_TEXTS.dodgeloc\t\t\t\t= \"%s - 閃避技能 %%s\"\nL.AUTO_SPEC_WARN_TEXTS.moveawaycount\t\t= \"%s (%%s) - 快離開其他人\"\nL.AUTO_SPEC_WARN_TEXTS.moveaway\t\t\t\t= \"%s - 快離開其他人\"\nL.AUTO_SPEC_WARN_TEXTS.moveto\t\t\t\t= \"%s - 快跑向>%%s<\"\nL.AUTO_SPEC_WARN_TEXTS.soak\t\t\t\t\t= \"%s - 踩圈分擔\"\nL.AUTO_SPEC_WARN_TEXTS.soakcount\t\t\t= \"%s - 踩圈分擔 %%s\"\nL.AUTO_SPEC_WARN_TEXTS.jump\t\t\t\t\t= \"%s - 快跳躍\"\nL.AUTO_SPEC_WARN_TEXTS.run\t\t\t\t\t= \"%s - 快跑開\"\nL.AUTO_SPEC_WARN_TEXTS.runcount\t\t\t\t= \"%s - 快跑開 (%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.cast\t\t\t\t\t= \"%s - 停止施法\"\nL.AUTO_SPEC_WARN_TEXTS.lookaway\t\t\t\t= \"%s 點名 %%s - 快轉頭\"\nL.AUTO_SPEC_WARN_TEXTS.reflect\t\t\t\t= \">%%s<中了%s - 停止攻擊\"\nL.AUTO_SPEC_WARN_TEXTS.count\t\t\t\t= \"%s!(%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.stack\t\t\t\t= \"你中了%%d層%s\"\nL.AUTO_SPEC_WARN_TEXTS.switch\t\t\t\t= \"%s - 快更換目標!\"\nL.AUTO_SPEC_WARN_TEXTS.switchcount\t\t\t= \"%s - 快更換目標！(%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.gtfo\t\t\t\t\t= \"%%s 傷害 - 快移動\"\nL.AUTO_SPEC_WARN_TEXTS.adds\t\t\t\t\t= \"小怪出現 - 快更換目標！\"\nL.AUTO_SPEC_WARN_TEXTS.addscount\t\t\t= \"小怪出現 - 快更換目標！(%%s)\"\nL.AUTO_SPEC_WARN_TEXTS.addscustom\t\t\t= \"小怪來了 - %%s\"\nL.AUTO_SPEC_WARN_TEXTS.targetchange\t\t\t= \"更換目標 - 轉火 %%s\"\n\nL.AUTO_SPEC_WARN_OPTIONS.spell\t\t\t\t= \"特別提示：$spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.ends\t\t\t\t= \"特別提示：$spell:%s結束\"\nL.AUTO_SPEC_WARN_OPTIONS.fades\t\t\t\t= \"特別提示：$spell:%s消退\"\nL.AUTO_SPEC_WARN_OPTIONS.soon\t\t\t\t= \"特別提示：$spell:%s即將到來\"\nL.AUTO_SPEC_WARN_OPTIONS.sooncount\t\t\t= \"特別提示：$spell:%s (包含計數)即將到來\"\nL.AUTO_SPEC_WARN_OPTIONS.bait\t\t\t\t= \"特別提示：$spell:%s(當誘餌)預先顯示\"\nL.AUTO_SPEC_WARN_OPTIONS.prewarn\t\t\t= \"特別提示：$spell:%s在%d秒前預先顯示\"\nL.AUTO_SPEC_WARN_OPTIONS.dispel\t\t\t\t= \"特別提示：需要驅散或偷取$spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.interrupt\t\t\t= \"特別提示：需要中斷$spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.interruptcount\t\t= \"特別提示：需要中斷$spell:%s (包含計數)\"\nL.AUTO_SPEC_WARN_OPTIONS.you\t\t\t\t= \"特別提示：當你中了$spell:%s時\"\nL.AUTO_SPEC_WARN_OPTIONS.youcount\t\t\t= \"特別提示：當你中了$spell:%s時 (包含計數)\"\nL.AUTO_SPEC_WARN_OPTIONS.youpos\t\t\t\t= \"特別提示：當你中了$spell:%s時 (包含站位)\"\nL.AUTO_SPEC_WARN_OPTIONS.youposcount\t\t= \"特別提示：當你中了$spell:%s時 (包含站位和計數)\"\nL.AUTO_SPEC_WARN_OPTIONS.soakpos\t\t\t= \"特別提示：當需要為$spell:%s分傷時(包含站位)\"\nL.AUTO_SPEC_WARN_OPTIONS.target\t\t\t\t= \"特別提示：當他人中了$spell:%s時\"\nL.AUTO_SPEC_WARN_OPTIONS.targetcount\t\t= \"特別提示：當他人中了$spell:%s時 (包含計數)\"\nL.AUTO_SPEC_WARN_OPTIONS.defensive\t\t\t= \"特別提示：當需要使用$spell:%s技能來減傷時\"\nL.AUTO_SPEC_WARN_OPTIONS.taunt\t\t\t\t= \"特別提示：當另外一個坦中了$spell:%s並需要你嘲諷時\"\nL.AUTO_SPEC_WARN_OPTIONS.close\t\t\t\t= \"特別提示：當你附近有人中了$spell:%s時\"\nL.AUTO_SPEC_WARN_OPTIONS.move\t\t\t\t= \"特別提示：當你中了$spell:%s時\"\nL.AUTO_SPEC_WARN_OPTIONS.keepmove\t\t\t= \"特別提示：當你中了$spell:%s需要保持移動時\"\nL.AUTO_SPEC_WARN_OPTIONS.stopmove\t\t\t= \"特別提示：當你中了$spell:%s需要停止移動時\"\nL.AUTO_SPEC_WARN_OPTIONS.dodge\t\t\t\t= \"特別提示：當你中了$spell:%s並需要躲開攻擊\"\nL.AUTO_SPEC_WARN_OPTIONS.dodgecount\t\t\t= \"特別提示：當你中了$spell:%s並需要躲開攻擊 (包含計數)\"\nL.AUTO_SPEC_WARN_OPTIONS.dodgeloc\t\t\t= \"特別提示：當你需要閃避$spell:%s技能時(包含站位)\"\nL.AUTO_SPEC_WARN_OPTIONS.moveaway\t\t\t= \"特別提示：當你中了$spell:%s並需要跑開人群時\"\nL.AUTO_SPEC_WARN_OPTIONS.moveawaycount\t\t= \"特別提示：當你中了$spell:%s並需要跑開人群時 (包含計數)\"\nL.AUTO_SPEC_WARN_OPTIONS.moveto\t\t\t\t= \"特別提示：當中了$spell:%s並需要你去靠近某人或某地點時\"\nL.AUTO_SPEC_WARN_OPTIONS.soak\t\t\t\t= \"特別提示：當需要你去踩圈分擔$spell:%s時\"\nL.AUTO_SPEC_WARN_OPTIONS.soakcount\t\t\t= \"特別提示：當需要你去踩圈分擔$spell:%s時 (包含計數)\"\nL.AUTO_SPEC_WARN_OPTIONS.jump\t\t\t\t= \"特別提示：當你中了$spell:%s需要跳起來時\"\nL.AUTO_SPEC_WARN_OPTIONS.run\t\t\t\t= \"特別提示：$spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.runcount\t\t\t= \"特別提示：當你中了$spell:%s需要跑開時 (包含計數)\"\nL.AUTO_SPEC_WARN_OPTIONS.cast\t\t\t\t= \"特別提示：$spell:%s的施放（停止施法）\"\nL.AUTO_SPEC_WARN_OPTIONS.lookaway\t\t\t= \"特別提示：當需要為$spell:%s轉頭時\"\nL.AUTO_SPEC_WARN_OPTIONS.reflect\t\t\t= \"特別提示：$spell:%s需要停止攻擊\"\nL.AUTO_SPEC_WARN_OPTIONS.count\t\t\t\t= \"特別提示：$spell:%s\"\nL.AUTO_SPEC_WARN_OPTIONS.stack\t\t\t\t= \"特別提示：當疊加了>=%d層$spell:%s時\"\nL.AUTO_SPEC_WARN_OPTIONS.switch\t\t\t\t= \"特別提示：針對$spell:%s需要轉換目標\"\nL.AUTO_SPEC_WARN_OPTIONS.switchcount\t\t= \"特別提示：針對$spell:%s需要轉換目標 (包含計數)\"\nL.AUTO_SPEC_WARN_OPTIONS.gtfo\t\t\t\t= \"特別提示：當地板出現危險的東西需要躲開時\"\nL.AUTO_SPEC_WARN_OPTIONS.adds\t\t\t\t= \"特別提示：當小怪出現需要更換目標時\"\nL.AUTO_SPEC_WARN_OPTIONS.addscount\t\t\t= \"特別提示：當小怪出現需要更換目標時 (包含計數)\"\nL.AUTO_SPEC_WARN_OPTIONS.addscustom\t\t\t= \"特別提示：即將到來的小怪\"\nL.AUTO_SPEC_WARN_OPTIONS.targetchange\t\t= \"特別提示：當需要更換主要目標時\"\n\nL.AUTO_TIMER_TEXTS.target\t\t\t\t\t= \"%s: %%s\"\nL.AUTO_TIMER_TEXTS.targetcount\t\t\t\t= \"%s (%%2$s): %%1$s\"\nL.AUTO_TIMER_TEXTS.cast\t\t\t\t\t\t= \"%s\"\nL.AUTO_TIMER_TEXTS.castshort\t\t\t\t= \"%s \"\nL.AUTO_TIMER_TEXTS.castcount\t\t\t\t= \"%s (%%s)\"\nL.AUTO_TIMER_TEXTS.castcountshort\t\t\t= \"%s (%%s) \"\nL.AUTO_TIMER_TEXTS.castsource\t\t\t\t= \"%s: %%s\"\nL.AUTO_TIMER_TEXTS.castsourceshort\t\t\t= \"%s: %%s \"\nL.AUTO_TIMER_TEXTS.active\t\t\t\t\t= \"%s結束\"\nL.AUTO_TIMER_TEXTS.fades\t\t\t\t\t= \"%s消退\"\nL.AUTO_TIMER_TEXTS.ai\t\t\t\t\t\t= \"%s AI\"\nL.AUTO_TIMER_TEXTS.cd\t\t\t\t\t\t= \"%s冷卻\"\nL.AUTO_TIMER_TEXTS.cdshort\t\t\t\t\t= \"~%s\"\nL.AUTO_TIMER_TEXTS.cdcount\t\t\t\t\t= \"%s冷卻 (%%s)\"\nL.AUTO_TIMER_TEXTS.cdcountshort\t\t\t\t= \"~%s (%%s)\"\nL.AUTO_TIMER_TEXTS.cdsource\t\t\t\t\t= \"%s冷卻:>%%s<\"\nL.AUTO_TIMER_TEXTS.cdsourceshort\t\t\t= \"~%s: >%%s<\"\nL.AUTO_TIMER_TEXTS.cdspecial\t\t\t\t= \"特別技能冷卻\"\nL.AUTO_TIMER_TEXTS.cdspecialshort\t\t\t= \"~特別技能\"\nL.AUTO_TIMER_TEXTS.next\t\t\t\t\t\t= \"下一次%s\"\nL.AUTO_TIMER_TEXTS.nextshort\t\t\t\t= \"%s\"\nL.AUTO_TIMER_TEXTS.nextcount\t\t\t\t= \"下一次%s (%%s)\"\nL.AUTO_TIMER_TEXTS.nextcountshort\t\t\t= \"%s (%%s)\"\nL.AUTO_TIMER_TEXTS.nextsource\t\t\t\t= \"下一次%s: >%%s<\"\nL.AUTO_TIMER_TEXTS.nextsourceshort\t\t\t= \"%s: %%s\"\nL.AUTO_TIMER_TEXTS.nextspecial\t\t\t\t= \"下一次特別技能\"\nL.AUTO_TIMER_TEXTS.nextspecialshort\t\t\t= \"特別技能\"\n\nL.AUTO_TIMER_TEXTS.var\t\t\t\t\t\t= \"%s\"\nL.AUTO_TIMER_TEXTS.varcount\t\t\t\t\t= \"%s (%%s)\"\nL.AUTO_TIMER_TEXTS.varsource\t\t\t\t= \"%s: >%%s<\"\nL.AUTO_TIMER_TEXTS.varspecial\t\t\t\t= \"特別技能\"\nL.AUTO_TIMER_TEXTS.varcombo\t\t\t\t\t= \"%%1$s + %%2$s\"\n\nL.AUTO_TIMER_TEXTS.achievement\t\t\t\t= \"%s\"\nL.AUTO_TIMER_TEXTS.stage\t\t\t\t\t= \"下一個階段\"\nL.AUTO_TIMER_TEXTS.stageshort\t\t\t\t= \"階段\"\nL.AUTO_TIMER_TEXTS.adds\t\t\t\t\t\t= \"小怪到來\"\nL.AUTO_TIMER_TEXTS.addsshort\t\t\t\t= \"小怪\"\nL.AUTO_TIMER_TEXTS.addscustom \t\t\t\t= \"小怪出現(%s%s)\"\nL.AUTO_TIMER_TEXTS.addscustomshort\t\t\t= \"小怪 (%%s)\"\nL.AUTO_TIMER_TEXTS.roleplay\t\t\t\t\t= \"角色扮演\"\n\nL.AUTO_TIMER_OPTIONS.target\t\t\t\t\t= \"計時條：$spell:%s減益效果持續時間 (%ss)\"\nL.AUTO_TIMER_OPTIONS.targetcount\t\t\t= \"計時條：$spell:%s減益效果持續時間(包含計數) (%ss)\"\nL.AUTO_TIMER_OPTIONS.cast\t\t\t\t\t= \"計時條：$spell:%s施法時間 (%ss)\"\nL.AUTO_TIMER_OPTIONS.castcount\t\t\t\t= \"計時條：$spell:%s施法時間(包含計數) (%ss)\"\nL.AUTO_TIMER_OPTIONS.castsource\t\t\t\t= \"計時條：$spell:%s施放(包含來源) (%ss)\"\nL.AUTO_TIMER_OPTIONS.active\t\t\t\t\t= \"計時條：$spell:%s效果持續時間 (%ss)\"\nL.AUTO_TIMER_OPTIONS.fades\t\t\t\t\t= \"計時條：$spell:%s何時從玩家身上消失 (%ss)\"\nL.AUTO_TIMER_OPTIONS.ai\t\t\t\t\t\t= \"計時條：$spell:%s冷卻的AI計時條 (%ss)\"\nL.AUTO_TIMER_OPTIONS.cd\t\t\t\t\t\t= \"計時條：$spell:%s冷卻時間 (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdcount\t\t\t\t= \"計時條：$spell:%s冷卻時間 (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdsource\t\t\t\t= \"計時條：$spell:%s冷卻時間以及來源 (%ss)\"\nL.AUTO_TIMER_OPTIONS.cdspecial\t\t\t\t= \"計時條：特殊技能冷卻 (%ss)\"\nL.AUTO_TIMER_OPTIONS.next\t\t\t\t\t= \"計時條：下一次$spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextcount\t\t\t\t= \"計時條：下一次$spell:%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextsource\t\t\t\t= \"計時條：下一次$spell:%s以及來源 (%ss)\"\nL.AUTO_TIMER_OPTIONS.nextspecial\t\t\t= \"計時條：下一次特殊技能 (%ss)\"\n\nL.AUTO_TIMER_OPTIONS.var\t\t\t\t\t= \"計時條：$spell:%s冷卻時間 (包含差額) (%ss)\"\nL.AUTO_TIMER_OPTIONS.varcount\t\t\t\t= \"計時條：$spell:%s冷卻時間 (包含計數與差額) (%ss)\"\nL.AUTO_TIMER_OPTIONS.varnp\t\t\t\t\t= \"計時條：只在名條顯示$spell:%s冷卻時間 (包含差額) (%ss)\"\nL.AUTO_TIMER_OPTIONS.varpnp\t\t\t\t\t= \"計時條：只在優先名條顯示$spell:%s冷卻時間 (包含差額) (%ss)\"\nL.AUTO_TIMER_OPTIONS.varsource\t\t\t\t= \"計時條：$spell:%s冷卻時間 (包含來源與差額) (%ss)\"\nL.AUTO_TIMER_OPTIONS.varspecial\t\t\t\t= \"計時條：特殊技能冷卻 (包含差額) (%ss)\"\nL.AUTO_TIMER_OPTIONS.varcombo\t\t\t\t= \"計時條：技能組合冷卻 (包含差額) (%ss)\"\n\nL.AUTO_TIMER_OPTIONS.achievement\t\t\t= \"計時條：成就%s (%ss)\"\nL.AUTO_TIMER_OPTIONS.stage\t\t\t\t\t= \"計時條：下一階段 (%ss)\"\nL.AUTO_TIMER_OPTIONS.adds\t\t\t\t\t= \"計時條：下一次小怪 (%ss)\"\nL.AUTO_TIMER_OPTIONS.addscustom\t\t\t\t= \"計時條：小怪出現 (%ss)\"\nL.AUTO_TIMER_OPTIONS.roleplay\t\t\t\t= \"計時條：劇情持續時間 (%ss)\"\n\nL.AUTO_ICONS_OPTION_TARGETS\t\t\t\t\t= \"為$spell:%s的目標設置標記\"\nL.AUTO_ICONS_OPTION_TARGETS_TANK_A\t\t\t= \"為$spell:%s的目標設置標記，優先等級為坦克高於近戰高於遠程，並以字母順序優先\"\nL.AUTO_ICONS_OPTION_TARGETS_TANK_R\t\t\t= \"為$spell:%s的目標設置標記，優先等級為坦克高於近戰高於遠程，並以團隊陣容優先\"\nL.AUTO_ICONS_OPTION_TARGETS_MELEE_A\t\t\t= \"為$spell:%s的目標設置標記，以近戰和字母順序優先\"\nL.AUTO_ICONS_OPTION_TARGETS_MELEE_R\t\t\t= \"為$spell:%s的目標設置標記，以近戰和團隊陣容優先\"\nL.AUTO_ICONS_OPTION_TARGETS_RANGED_A\t\t= \"為$spell:%s的目標設置標記，以遠程和字母順序優先\"\nL.AUTO_ICONS_OPTION_TARGETS_RANGED_R\t\t= \"為$spell:%s的目標設置標記，以遠程和團隊陣容優先\"\nL.AUTO_ICONS_OPTION_TARGETS_ALPHA\t\t\t= \"為$spell:%s的目標設置標記，以字母順序優先\"\nL.AUTO_ICONS_OPTION_TARGETS_ROSTER\t\t\t= \"為$spell:%s的目標設置標記，以團隊陣容優先\"\nL.AUTO_ICONS_OPTION_NPCS\t\t\t\t\t= \"為$spell:%s設置標記\"\nL.AUTO_ICONS_OPTION_CONFLICT\t\t\t\t= \" (可能與其他選項衝突)\"\nL.AUTO_ARROW_OPTION_TEXT\t\t\t\t\t= \"為跑向中了$spell:%s的目標顯示\"..L.DBM..\"箭頭\"\nL.AUTO_ARROW_OPTION_TEXT2\t\t\t\t\t= \"為離開中了$spell:%s的目標顯示\"..L.DBM..\"箭頭\"\nL.AUTO_ARROW_OPTION_TEXT3\t\t\t\t\t= \"為中了$spell:%s後移動到特定區域顯示\"..L.DBM..\"箭頭\"\nL.AUTO_YELL_OPTION_TEXT.shortyell\t\t\t= \"當你中了$spell:%s時大喊\"\nL.AUTO_YELL_OPTION_TEXT.yell\t\t\t\t= \"當你中了$spell:%s時大喊(玩家名字)\"\nL.AUTO_YELL_OPTION_TEXT.count\t\t\t\t= \"當你中了$spell:%s時大喊(次數)\"\nL.AUTO_YELL_OPTION_TEXT.fade\t\t\t\t= \"當$spell:%s正消退時大喊(倒數和技能名稱)\"\nL.AUTO_YELL_OPTION_TEXT.shortfade\t\t\t= \"當$spell:%s正消退時大喊(倒數)\"\nL.AUTO_YELL_OPTION_TEXT.iconfade\t\t\t= \"當$spell:%s正消退時大喊(倒數與圖示)\"\nL.AUTO_YELL_OPTION_TEXT.position\t\t\t= \"當你中了$spell:%s時大喊(包含位置與玩家名字)\"\nL.AUTO_YELL_OPTION_TEXT.shortposition\t\t= \"當你中了$spell:%s時大喊(包含位置)\"\nL.AUTO_YELL_OPTION_TEXT.combo\t\t\t\t= \"當你同時中了$spell:%s與其他法術時大喊(包含自訂文字)\"\nL.AUTO_YELL_OPTION_TEXT.repeatplayer\t\t= \"當你中了$spell:%s時重複大喊(玩家名字)\"\nL.AUTO_YELL_OPTION_TEXT.repeaticon\t\t\t= \"當你中了$spell:%s時重複大喊(圖示)\"\nL.AUTO_YELL_ANNOUNCE_TEXT.shortyell\t\t\t= \"%s\"\nL.AUTO_YELL_ANNOUNCE_TEXT.yell\t\t\t\t= \"\" .. UnitName(\"player\") .. \"中了%s\"\nL.AUTO_YELL_ANNOUNCE_TEXT.count\t\t\t\t= \"\" .. UnitName(\"player\") .. \"中了%s(%%d)\"\nL.AUTO_YELL_ANNOUNCE_TEXT.fade\t\t\t\t= \"%s %%d秒後消退!\"\nL.AUTO_YELL_ANNOUNCE_TEXT.shortfade\t\t\t= \"%%d\"\nL.AUTO_YELL_ANNOUNCE_TEXT.iconfade\t\t\t= \"{rt%%2$d}%%1$d\"\nL.AUTO_YELL_ANNOUNCE_TEXT.position\t\t\t= UnitName(\"player\")..\" ({rt%%3$d})中了%1$s! (%%1$s - {rt%%2$d})\"\nL.AUTO_YELL_ANNOUNCE_TEXT.shortposition\t\t= \"{rt%%1$d}%s %%2$d\"--Icon, Spellname, number\nL.AUTO_YELL_ANNOUNCE_TEXT.combo\t\t\t\t= \"%s與%%s\"--Spell name (from option, plus spellname given in arg)\nL.AUTO_YELL_ANNOUNCE_TEXT.repeatplayer\t\t= UnitName(\"player\")--Doesn't need translation, it's just player name spam\nL.AUTO_YELL_ANNOUNCE_TEXT.repeaticon\t\t= \"{rt%%1$d}\"\n\nL.AUTO_YELL_CUSTOM_FADE\t\t\t\t\t= \"%s已消退\"\nL.AUTO_HUD_OPTION_TEXT\t\t\t\t\t= \"為$spell:%s顯示HudMap(不再作用)\"\nL.AUTO_HUD_OPTION_TEXT_MULTI\t\t\t= \"為不同的機制顯示HudMap(不再作用)\"\nL.AUTO_NAMEPLATE_OPTION_TEXT\t\t\t= \"為$spell:%s顯示姓名版光環，使用在相容的名條插件或\"..L.DBM..\"\"\nL.AUTO_NAMEPLATE_OPTION_TEXT_FORCED\t\t= \"為$spell:%s顯示姓名版光環，使用在\"..L.DBM..\"\"\n\nL.AUTO_RANGE_OPTION_TEXT\t\t\t\t= \"為$spell:%2$s顯示距離框架(%1$s碼)\"\nL.AUTO_RANGE_OPTION_TEXT_SHORT\t\t\t= \"顯示距離框架(%s碼)\"\nL.AUTO_RRANGE_OPTION_TEXT\t\t\t\t= \"為$spell:%2$s顯示反色距離框架(%1$s碼)\"--Reverse range frame (green when players in range, red when not)\nL.AUTO_RRANGE_OPTION_TEXT_SHORT\t\t\t= \"顯示反色距離框架(%s碼)\"\nL.AUTO_INFO_FRAME_OPTION_TEXT\t\t\t= \"為$spell:%s顯示訊息框架\"\nL.AUTO_INFO_FRAME_OPTION_TEXT2\t\t\t= \"為戰鬥概覽顯示訊息框架\"\nL.AUTO_INFO_FRAME_OPTION_TEXT3\t\t\t= \"為$spell:%s顯示訊息框架(當達到%%s的閥值時)\"\nL.AUTO_READY_CHECK_OPTION_TEXT\t\t\t= \"當首領開打時撥放準備檢查的音效(即使沒有選定目標)\"\nL.AUTO_SPEEDCLEAR_OPTION_TEXT\t\t\t= \"顯示 %s 的最快清除計時器\"\n\n--Sounds\nL.AUTO_SOUND_OPTION_TEXT\t\t\t= \"在$spell:%d上播放聲音\"\nL.AUTO_SOUND_OPTION_TEXT5\t\t\t= \"$spell:%d 的 5 秒音頻倒計時\"\nL.AUTO_SOUND_OPTION_TEXT3\t\t\t= \"$spell:%d 的 3 秒音頻倒計時\"\nL.AUTO_SOUND_OPTION_TEXT_YOU\t\t= \"如果 $spell:%d 出現在你身上，播放聲音\"\nL.AUTO_SOUND_OPTION_TEXT_SOON\t\t= \"在 $spell:%d 上播放聲音\"\nL.AUTO_SOUND_OPTION_TEXT_CLOSE\t\t= \"在您附近的 $spell:%d 上播放聲音\"\n\n-- New special warnings\nL.MOVE_WARNING_BAR\t\t\t= \"可移動提示\"\nL.MOVE_WARNING_MESSAGE\t\t= \"感謝您使用\"..L.DEADLY_BOSS_MODS..\"\"\nL.MOVE_SPECIAL_WARNING_BAR\t= \"可拖動的特別警告\"\nL.MOVE_SPECIAL_WARNING_TEXT\t= \"特別警告\"\n\nL.HUD_INVALID_TYPE\t\t\t= \"無效的HUD類型定義\"\nL.HUD_INVALID_TARGET\t\t= \"無有效的HUD目標\"\nL.HUD_INVALID_SELF\t\t\t= \"不能將HUD目标設定成自己\"\nL.HUD_INVALID_ICON\t\t\t= \"不能設定對無團隊標記的目標\"\nL.HUD_SUCCESS\t\t\t\t= \"HUD成功使用你的參數運作。這會在%s後取消，或是使用'/dbm hud hide'指令取消。\"\nL.HUD_USAGE\t= {\n\t\"\"..L.DBM..\"-HudMap 用法:\",\n\t\"-----------------\",\n\t\"/dbm hud <類型> <目標> <持續時間>: 建立一個指向玩家的HUD\",\n\t\"有效類型: arrow, dot, red, blue, green, yellow, icon(需要團隊標記)\",\n\t\"有效目標: target, focus, <玩家名字>\",\n\t\"有效持續時間: 任何秒數。如果無輸入值則預設為20分鐘\",\n\t\"/dbm hud hide  停用玩家生成的HUD物件\"\n}\n\nL.ARROW_MOVABLE\t\t\t\t\t= \"可移動箭頭\"\nL.ARROW_WAY_USAGE\t\t\t\t= \"/dway <x> <y>: 建立一個箭頭指向一個指定地點 (使用本地區域地圖座標)\"\nL.ARROW_WAY_SUCCESS\t\t\t\t= \"要隱藏箭頭，鍵入 '/dbm arrow hide' 或到達箭頭\"\nL.ARROW_ERROR_USAGE\t= {\n\t\"\"..L.DBM..\"-Arrow 用法:\",\n\t\"-----------------\",\n\t\"/dbm arrow <x> <y>: 建立一個箭頭在特定的位置(使用世界地圖座標)\",\n\t\"/dbm arrow map <x> <y>: 建立一個箭頭在特定的位置 (使用小地圖座標)\",\n\t\"/dbm arrow <玩家>: 建立並箭頭指向你的隊伍或團隊中特定的玩家\",\n\t\"/dbm arrow hide: 隱藏箭頭\",\n\t\"/dbm arrow move: 可移動箭頭\"\n}\n\nL.SPEED_KILL_TIMER_TEXT\t\t\t= \"勝利紀錄\"\nL.SPEED_CLEAR_TIMER_TEXT\t\t= \"最佳紀錄\"\nL.COMBAT_RES_TIMER_TEXT\t\t\t= \"下一個戰復充能\"\nL.TIMER_RESPAWN\t\t\t\t\t= \"%s 重生\"\n\nL.LAG_CHECKING\t\t\t\t\t= \"檢測團隊成員的網路延遲中...\"\nL.LAG_HEADER\t\t\t\t\t= \"\"..L.DEADLY_BOSS_MODS..\" - 網路延遲結果\"\nL.LAG_ENTRY\t\t\t\t\t\t= \"%s:世界延遲[%d毫秒]/本地延遲[%d毫秒]\"\nL.LAG_FOOTER\t\t\t\t\t= \"無回應:%s\"\n\nL.DUR_CHECKING\t\t\t\t\t= \"檢測團隊裝備耐久度...\"\nL.DUR_HEADER\t\t\t\t\t= \"\"..L.DEADLY_BOSS_MODS..\" - 裝備耐久度結果\"\nL.DUR_ENTRY\t\t\t\t\t\t= \"%s:耐久度[%d百分比]/裝備損壞[%s]\"\nL.LAG_FOOTER\t\t\t\t\t= \"無回應:%s\"\n\nL.OVERRIDE_ACTIVATED\t\t\t= \"領隊已啟用此首領的配置覆蓋\"\n\n--LDB\nL.LDB_TOOLTIP_HELP1\t\t\t\t= \"點擊開啟\" .. L.DBM\nL.LDB_TOOLTIP_HELP2\t\t\t\t= \"Alt+右鍵點擊切換到無聲模式\"\nL.SILENTMODE_IS\t\t\t\t\t= \"無聲模式是 \"\n\n--Localizers, do not copy entire table, follow same guidelines as other tables, overwrite each entry with L.WORLD_BUFFS.hordeOny = \"stuff\" for example.\nL.WORLD_BUFFS.hordeOny\t\t\t\t\t\t= \"部落的人民，奧格瑪的城民，來吧，聚集到一起歡慶部落英雄的誕生。\"\nL.WORLD_BUFFS.allianceOny\t\t\t\t\t= \"暴風城的城民和盟友們，今天，有人創造了歷史。\"\nL.WORLD_BUFFS.hordeNef\t\t\t\t\t\t= \"奈法利安被!@#掉了！奧格瑪的人們\" -- this is probably not correct (need to get rid of @#)\nL.WORLD_BUFFS.allianceNef\t\t\t\t\t= \"聯盟的人民們，黑石領主已經被幹掉了！\"\nL.WORLD_BUFFS.zgHeart\t\t\t\t\t\t= \"只差最後一步，我們就可以擺脫靈魂掠奪者的威脅了……\"\nL.WORLD_BUFFS.zgHeartBooty\t\t\t\t\t= \"靈魂掠奪者血神已經被打敗了！我們不再有危險了！\"\nL.WORLD_BUFFS.zgHeartYojamba\t\t\t\t= \"開始儀式，我的僕從們。我們必須把哈卡完全打回扭曲虛空中！\"\nL.WORLD_BUFFS.rendHead\t\t\t\t\t\t= \"那個假的酋長，雷德·黑手，已經倒下了！\"\n\n--Retail Globals\nL.RAID_INFO_WORLD_BOSS\t\t\t= \"世界首領\"\nL.SCENARIO_STAGE\t\t\t\t= \"階段%d\"\nL.SPECIALIZATION\t\t\t\t= \"專精\" -- ID: 22433\n-- EJ\nL.HARD_MODE\t\t\t\t\t\t= \"困難模式\" -- 17220\nL.BOSS_YOU_DEFEATED\t\t\t\t= \"你擊敗了\" -- 25559\nL.BOSS_KILL_SUBTITLE\t\t\t= \"被擊敗了\" -- 25560\n"
  },
  {
    "path": "DBM-Core/modules/Commands.lua",
    "content": "local _, private = ...\n\nlocal L = DBM_CORE_L\n\nlocal LibStub = _G[\"LibStub\"]\nlocal LibLatency, LibDurability, AceTimer = LibStub(\"LibLatency\", true), LibStub(\"LibDurability\", true), LibStub(\"AceTimer-3.0\")\n\nlocal IsInGroup = private.IsInGroup\n\nlocal playerName = UnitName(\"player\")\n\nlocal function strFromTime(time)\n\tif type(time) ~= \"number\" then time = 0 end\n\ttime = floor(time)\n\tif time < 60 then\n\t\treturn L.TIMER_FORMAT_SECS:format(time)\n\telseif time % 60 == 0 then\n\t\treturn L.TIMER_FORMAT_MINS:format(time/60)\n\telse\n\t\treturn L.TIMER_FORMAT:format(time/60, time % 60)\n\tend\nend\n\nlocal function Pull(timer)\n\tlocal isTank = UnitGroupRolesAssigned(\"player\")\n\tlocal LFGTankException = IsPartyLFG() and isTank --Tanks in LFG need to be able to send pull timer even if someone refuses to pass lead. LFG locks roles so no one can abuse this.\n\tif (DBM:GetRaidRank() == 0 and IsInGroup() and not LFGTankException) or select(2, IsInInstance()) == \"pvp\" or DBM:IsEncounterInProgress() then\n\t\treturn DBM:AddMsg(L.ERROR_NO_PERMISSION)\n\tend\n\tif timer > 0 and timer < 3 then\n\t\treturn DBM:AddMsg(L.TIME_TOO_SHORT)\n\tend\n\tlocal targetName = (UnitExists(\"target\") and UnitIsEnemy(\"player\", \"target\")) and UnitName(\"target\") or nil--Filter non enemies in case player isn't targetting bos but another player/pet\n\tif targetName then\n\t\tprivate.sendSync(\"DBMv4-PT\", timer .. \"\\t\" .. DBM:GetCurrentArea() .. \"\\t\" .. targetName)\n\telse\n\t\tprivate.sendSync(\"DBMv4-PT\", timer .. \"\\t\" .. DBM:GetCurrentArea())\n\tend\n\t-- Old chat message (requested)\n\tif IsInGroup() then\n\t\tlocal channel = ((GetNumRaidMembers() == 0) and \"PARTY\") or \"RAID_WARNING\"\n\t\tDBM:Unschedule(SendChatMessage)\n\t\t-- Pull announcer\n\t\tlocal savedDifficulty = DBM:GetCurrentInstanceDifficulty()\n\t\tif savedDifficulty:find(\"heroic\") then\n\t\t\tSendChatMessage(\"{rt8} \"..L.ANNOUNCE_PULL_MODE:format(PLAYER_DIFFICULTY2)..\" {rt8}\", channel)\n\t\telseif savedDifficulty:find(\"normal\") then\n\t\t\tSendChatMessage(L.ANNOUNCE_PULL_MODE:format(PLAYER_DIFFICULTY1), channel)\n\t\tend\n\t\tSendChatMessage(L.ANNOUNCE_PULL:format(timer, playerName), channel)\n\t\tif timer > 7 then DBM:Schedule(timer - 7, SendChatMessage, L.ANNOUNCE_PULL:format(7, playerName), channel) end\n\t\tif timer > 5 then DBM:Schedule(timer - 5, SendChatMessage, L.ANNOUNCE_PULL:format(5, playerName), channel) end\n\t\tif timer > 3 then DBM:Schedule(timer - 3, SendChatMessage, L.ANNOUNCE_PULL:format(3, playerName), channel) end\n\t\tif timer > 2 then DBM:Schedule(timer - 2, SendChatMessage, L.ANNOUNCE_PULL:format(2, playerName), channel) end\n\t\tif timer > 1 then DBM:Schedule(timer - 1, SendChatMessage, L.ANNOUNCE_PULL:format(1, playerName), channel) end\n\t\tDBM:Schedule(timer, SendChatMessage, L.ANNOUNCE_PULL_NOW, channel)\n\tend\nend\n\nlocal stringWorkaround\nlocal function Break(timer)\n\tif IsInGroup() and (DBM:GetRaidRank() == 0 or IsPartyLFG()) or DBM:IsEncounterInProgress() or select(2, IsInInstance()) == \"pvp\" then--No break timers if not assistant or if it's dungeon/raid finder/BG\n\t\tDBM:AddMsg(L.ERROR_NO_PERMISSION)\n\t\treturn\n\tend\n\tif timer > 60 then\n\t\tDBM:AddMsg(L.BREAK_USAGE)\n\t\treturn\n\tend\n\ttimer = timer * 60 -- convert minutes to seconds\n\tprivate.sendSync(\"DBMv4-BT\", timer)\n\t-- Old chat message (requested)\n\tif IsInGroup() then\n\t\tlocal channel = ((GetNumRaidMembers() == 0) and \"PARTY\") or \"RAID_WARNING\"\n\t\tDBM:Unschedule(SendChatMessage)\n\n\t\tlocal hour, minute = GetGameTime()\n\t\tminute = minute+(timer/60)\n\t\tif minute >= 60 then\n\t\t\thour = hour + 1\n\t\t\tminute = minute - 60\n\t\tend\n\t\tminute = floor(minute)\n\t\tif minute < 10 then\n\t\t\tminute = tostring(0 .. minute)\n\t\tend\n\t\tstringWorkaround = stringWorkaround or CreateFrame(\"Button\") -- ugly workaround for SendChatMessage not error with invalid escape sequence | coming from strFromTime; applied below with b:GetText(b:SetFormattedText(strFromTime(timer),3))\n\t\tSendChatMessage(L.BREAK_START:format(stringWorkaround:GetText(stringWorkaround:SetFormattedText(strFromTime(timer),3))..\" (\"..hour..\":\"..minute..\")\", playerName), channel)\n\t\tif timer/60 > 5 then DBM:Schedule(timer - 5*60, SendChatMessage, L.BREAK_MIN:format(5), channel) end\n\t\tif timer/60 > 2 then DBM:Schedule(timer - 2*60, SendChatMessage, L.BREAK_MIN:format(2), channel) end\n\t\tif timer/60 > 1 then DBM:Schedule(timer - 1*60, SendChatMessage, L.BREAK_MIN:format(1), channel) end\n\t\tif timer > 30 then DBM:Schedule(timer - 30, SendChatMessage, L.BREAK_SEC:format(30), channel) end\n\t\tDBM:Schedule(timer, SendChatMessage, L.ANNOUNCE_BREAK_OVER:format(hour..\":\"..minute), channel)\n\tend\nend\n\nlocal ShowLag, ShowDurability\ndo\n\tlocal tconcat, tinsert, tsort = table.concat, table.insert, table.sort\n\n\tlocal function SortLag(v1, v2)\n\t\treturn (v1.worldlag or 0) < (v2.worldlag or 0)\n\tend\n\n\tfunction ShowLag()\n\t\tlocal sortLag, noLagResponse = {}, {}\n\t\tfor _, v in pairs(DBM:GetRaidRoster()) do\n\t\t\ttinsert(sortLag, v)\n\t\tend\n\t\ttsort(sortLag, SortLag)\n\t\tDBM:AddMsg(L.LAG_HEADER)\n\t\tfor _, v in ipairs(sortLag) do\n\t\t\tlocal name = v.name\n\t\t\tlocal playerColor = RAID_CLASS_COLORS[DBM:GetRaidClass(name)]\n\t\t\tif playerColor then\n\t\t\t\tname = (\"|r|cff%.2x%.2x%.2x%s|r|cff%.2x%.2x%.2x\"):format(playerColor.r * 255, playerColor.g * 255, playerColor.b * 255, name, 0.41 * 255, 0.8 * 255, 0.94 * 255)\n\t\t\tend\n\t\t\tif v.worldlag then\n\t\t\t\tDBM:AddMsg(L.LAG_ENTRY:format(name, v.worldlag, v.homelag), false)\n\t\t\telse\n\t\t\t\ttinsert(noLagResponse, v.name)\n\t\t\tend\n\t\tend\n\t\tif #noLagResponse > 0 then\n\t\t\tDBM:AddMsg(L.LAG_FOOTER:format(tconcat(noLagResponse, \", \")), false)\n\t\tend\n\tend\n\n\tif LibLatency then\n\t\tLibLatency:Register(\"DBM\", function(homelag, worldlag, sender)\n\t\t\tif not sender then\n\t\t\t\treturn\n\t\t\tend\n\t\t\tlocal player = DBM:GetRaidRoster()[sender]\n\t\t\tif player then\n\t\t\t\tplayer.homelag = homelag\n\t\t\t\tplayer.worldlag = worldlag\n\t\t\tend\n\t\tend)\n\tend\n\n\tlocal function SortDurability(v1, v2)\n\t\treturn (v1.durpercent or 0) < (v2.durpercent or 0)\n\tend\n\n\tfunction ShowDurability()\n\t\tlocal sortDur, noDurResponse = {}, {}\n\t\tfor _, v in pairs(DBM:GetRaidRoster()) do\n\t\t\ttinsert(sortDur, v)\n\t\tend\n\t\ttsort(sortDur, SortDurability)\n\t\tDBM:AddMsg(L.DUR_HEADER)\n\t\tfor _, v in ipairs(sortDur) do\n\t\t\tlocal name = v.name\n\t\t\tlocal playerColor = RAID_CLASS_COLORS[DBM:GetRaidClass(name)]\n\t\t\tif playerColor then\n\t\t\t\tname = (\"|r|cff%.2x%.2x%.2x%s|r|cff%.2x%.2x%.2x\"):format(playerColor.r * 255, playerColor.g * 255, playerColor.b * 255, name, 0.41 * 255, 0.8 * 255, 0.94 * 255)\n\t\t\tend\n\t\t\tif v.durpercent then\n\t\t\t\tDBM:AddMsg(L.DUR_ENTRY:format(name, v.durpercent, v.durbroken), false)\n\t\t\telse\n\t\t\t\ttinsert(noDurResponse, v.name)\n\t\t\tend\n\t\tend\n\t\tif #noDurResponse > 0 then\n\t\t\tDBM:AddMsg(L.LAG_FOOTER:format(tconcat(noDurResponse, \", \")), false)\n\t\tend\n\tend\n\n\tif LibDurability then\n\t\tLibDurability:Register(\"DBM\", function(percent, broken, sender)\n\t\t\tif not sender then\n\t\t\t\treturn\n\t\t\tend\n\t\t\tlocal player = DBM:GetRaidRoster()[sender]\n\t\t\tif player then\n\t\t\t\tplayer.durpercent = percent\n\t\t\t\tplayer.durbroken = broken\n\t\t\tend\n\t\tend)\n\tend\nend\n\nif not _G[\"BigWigs\"] then\n\t--Register pull and break slash commands for BW converts, if BW isn't loaded\n\t--This shouldn't raise an issue since BW SHOULD load before DBM in any case they are both present.\n\tSLASH_DEADLYBOSSMODSPULL1 = \"/pull\"\n\tSlashCmdList[\"DEADLYBOSSMODSPULL\"] = function(msg)\n\t\tPull(tonumber(msg) or 10)\n\tend\n\tSLASH_DEADLYBOSSMODSBREAK1 = \"/break\"\n\tSlashCmdList[\"DEADLYBOSSMODSBREAK\"] = function(msg)\n\t\tBreak(tonumber(msg) or 10)\n\tend\nend\n\nSLASH_DEADLYBOSSMODSRPULL1 = \"/rpull\"\nSlashCmdList[\"DEADLYBOSSMODSRPULL\"] = function()\n\tPull(30)\nend\n\n--local trackedHudMarkers = {}\nSLASH_DEADLYBOSSMODS1 = \"/dbm\"\nSlashCmdList[\"DEADLYBOSSMODS\"] = function(msg)\n\tif not private.dbmIsEnabled then\n\t\tDBM:ForceDisableSpam()\n\t\treturn\n\tend\n\tlocal cmd = msg:lower()\n\tif cmd == \"ver\" or cmd == \"version\" then\n\t\tDBM:ShowVersions(false)\n\telseif cmd == \"ver2\" or cmd == \"version2\" then\n\t\tDBM:ShowVersions(true)\n\telseif cmd == \"unlock\" or cmd == \"move\" then\n\t\tDBT:ShowMovableBar()\n\telseif cmd == \"help2\" then\n\t\tfor _, v in ipairs(L.SLASHCMD_HELP2) do\n\t\t\tDBM:AddMsg(v)\n\t\tend\n\telseif cmd == \"help\" then\n\t\tfor _, v in ipairs(L.SLASHCMD_HELP) do\n\t\t\tDBM:AddMsg(v)\n\t\tend\n\telseif cmd:sub(1, 13) == \"timer endloop\" then\n\t\tDBM:CreatePizzaTimer(time, \"\", nil, nil, nil, true)\n\telseif cmd:sub(1, 5) == \"timer\" then\n\t\tlocal time, text = msg:match(\"^%w+ ([%d:]+) (.+)$\")\n\t\tif not time and not text then\n\t\t\tfor _, v in ipairs(L.TIMER_USAGE) do\n\t\t\t\tDBM:AddMsg(v)\n\t\t\tend\n\t\t\treturn\n\t\tend\n\t\tlocal min, sec = string.split(\":\", time)\n\t\tmin = tonumber(min or \"\") or 0\n\t\tsec = tonumber(sec or \"\")\n\t\tif min and not sec then\n\t\t\tsec = min\n\t\t\tmin = 0\n\t\tend\n\t\tDBM:CreatePizzaTimer(min * 60 + sec, text)\n\telseif cmd:sub(1, 6) == \"ltimer\" then\n\t\tlocal time, text = msg:match(\"^%w+ ([%d:]+) (.+)$\")\n\t\tif not time and not text then\n\t\t\tDBM:AddMsg(L.PIZZA_ERROR_USAGE)\n\t\t\treturn\n\t\tend\n\t\tlocal min, sec = string.split(\":\", time)\n\t\tmin = tonumber(min or \"\") or 0\n\t\tsec = tonumber(sec or \"\")\n\t\tif min and not sec then\n\t\t\tsec = min\n\t\t\tmin = 0\n\t\tend\n\t\tDBM:CreatePizzaTimer(min * 60 + sec, text, nil, nil, true)\n\telseif cmd:sub(1, 15) == \"broadcast timer\" then--Standard Timer\n\t\tlocal permission = true\n\t\tif DBM:GetRaidRank() == 0 then\n\t\t\tDBM:AddMsg(L.ERROR_NO_PERMISSION)\n\t\t\tpermission = false\n\t\tend\n\t\tlocal time, text = msg:match(\"^%w+ %w+ ([%d:]+) (.+)$\")\n\t\tif not time and not text then\n\t\t\tDBM:AddMsg(L.PIZZA_ERROR_USAGE)\n\t\t\treturn\n\t\tend\n\t\tlocal min, sec = string.split(\":\", time)\n\t\tmin = tonumber(min or \"\") or 0\n\t\tsec = tonumber(sec or \"\")\n\t\tif min and not sec then\n\t\t\tsec = min\n\t\t\tmin = 0\n\t\tend\n\t\tDBM:CreatePizzaTimer(min * 60 + sec, text, permission)\n\telseif cmd:sub(1, 16) == \"broadcast ltimer\" then\n\t\tlocal permission = true\n\t\tif DBM:GetRaidRank() == 0 then\n\t\t\tDBM:AddMsg(L.ERROR_NO_PERMISSION)\n\t\t\tpermission = false\n\t\tend\n\t\tlocal time, text = msg:match(\"^%w+ %w+ ([%d:]+) (.+)$\")\n\t\tif not time and not text then\n\t\t\tDBM:AddMsg(L.PIZZA_ERROR_USAGE)\n\t\t\treturn\n\t\tend\n\t\tlocal min, sec = string.split(\":\", time)\n\t\tmin = tonumber(min or \"\") or 0\n\t\tsec = tonumber(sec or \"\")\n\t\tif min and not sec then\n\t\t\tsec = min\n\t\t\tmin = 0\n\t\tend\n\t\tDBM:CreatePizzaTimer(min * 60 + sec, text, permission, nil, true)\n\telseif cmd:sub(0,5) == \"break\" then\n\t\tBreak(tonumber(cmd:sub(6)) or 5)\n\telseif cmd:sub(1, 4) == \"pull\" then\n\t\tPull(tonumber(cmd:sub(5)) or 10)\n\telseif cmd:sub(1, 5) == \"rpull\" then\n\t\tPull(30)\n\telseif cmd:sub(1, 3) == \"lag\" then\n\t\tif not LibLatency then\n\t\t\tDBM:AddMsg(L.UPDATE_REQUIRES_RELAUNCH)\n\t\t\treturn\n\t\tend\n\t\tLibLatency:RequestLatency()\n\t\tDBM:AddMsg(L.LAG_CHECKING)\n\t\tAceTimer:ScheduleTimer(ShowLag, 5)\n\telseif cmd:sub(1, 10) == \"durability\" then\n\t\tif not LibDurability then\n\t\t\tDBM:AddMsg(L.UPDATE_REQUIRES_RELAUNCH)\n\t\t\treturn\n\t\tend\n\t\tLibDurability:RequestDurability()\n\t\tDBM:AddMsg(L.DUR_CHECKING)\n\t\tAceTimer:ScheduleTimer(ShowDurability, 5)\n--\telseif cmd:sub(1, 3) == \"hud\" then\n--\t\tif DBM:HasMapRestrictions() then\n--\t\t\tDBM:AddMsg(L.NO_HUD)\n--\t\t\treturn\n--\t\tend\n--\t\tlocal hudType, target, duration = string.split(\" \", cmd:sub(4):trim())\n--\t\tif hudType == \"\" then\n--\t\t\tfor _, v in ipairs(L.HUD_USAGE) do\n--\t\t\t\tDBM:AddMsg(v)\n--\t\t\tend\n--\t\t\treturn\n--\t\tend\n--\t\tlocal hudDuration = tonumber(duration) or 1200 -- If no duration defined. 20 minutes to cover even longest of fights\n--\t\tif type(hudType) == \"string\" and hudType:trim() ~= \"\" then\n--\t\t\tif hudType == \"hide\" then\n--\t\t\t\tfor _, name in ipairs(trackedHudMarkers) do\n--\t\t\t\t\tDBM.HudMap:FreeEncounterMarkerByTarget(12345, name)\n--\t\t\t\tend\n--\t\t\t\ttable.wipe(trackedHudMarkers)\n--\t\t\t\treturn\n--\t\t\tend\n--\t\t\tif not target then\n--\t\t\t\tDBM:AddMsg(L.HUD_INVALID_TARGET)\n--\t\t\t\treturn\n--\t\t\tend\n--\t\t\tlocal uId\n--\t\t\tif target == \"target\" and UnitExists(\"target\") then\n--\t\t\t\tuId = \"target\"\n--\t\t\telseif target == \"focus\" and UnitExists(\"focus\") then\n--\t\t\t\tuId = \"focus\"\n--\t\t\telse -- Try to use it as player name\n--\t\t\t\tuId = DBM:GetRaidUnitId(target)\n--\t\t\tend\n--\t\t\tif not uId then\n--\t\t\t\tDBM:AddMsg(L.HUD_INVALID_TARGET)\n--\t\t\t\treturn\n--\t\t\tend\n--\t\t\tif UnitIsUnit(\"player\", uId) and not DBM.Options.DebugMode then -- Don't allow hud to self, except if debug mode is enabled, then hud to self useful for testing\n--\t\t\t\tDBM:AddMsg(L.HUD_INVALID_SELF)\n--\t\t\t\treturn\n--\t\t\tend\n--\t\t\tlocal targetName = UnitName(uId)\n--\t\t\tif hudType == \"arrow\" then\n--\t\t\t\tlocal playerName = UnitName(\"player\")\n--\t\t\t\tlocal _, targetClass = UnitClass(uId)\n--\t\t\t\tlocal color2 = RAID_CLASS_COLORS[targetClass]\n--\t\t\t\tlocal m1 = DBM.HudMap:RegisterRangeMarkerOnPartyMember(12345, \"party\", playerName, 0.1, hudDuration, 0, 1, 0, 1, nil, false):Appear()\n--\t\t\t\tlocal m2 = DBM.HudMap:RegisterRangeMarkerOnPartyMember(12345, \"party\", targetName, 0.75, hudDuration, color2.r, color2.g, color2.b, 1, nil, false):Appear()\n--\t\t\t\ttinsert(trackedHudMarkers, playerName)\n--\t\t\t\ttinsert(trackedHudMarkers, targetName)\n--\t\t\t\tm2:EdgeTo(m1, nil, hudDuration, 0, 1, 0, 1)\n--\t\t\t\tDBM:AddMsg(L.HUD_SUCCESS:format(DBM:strFromTime(hudDuration)))\n--\t\t\telseif hudType == \"dot\" then\n--\t\t\t\tlocal _, targetClass = UnitClass(uId)\n--\t\t\t\tlocal color2 = RAID_CLASS_COLORS[targetClass]\n--\t\t\t\tDBM.HudMap:RegisterRangeMarkerOnPartyMember(12345, \"party\", targetName, 0.75, hudDuration, color2.r, color2.g, color2.b, 1, nil, false):Appear()\n--\t\t\t\ttinsert(trackedHudMarkers, targetName)\n--\t\t\t\tDBM:AddMsg(L.HUD_SUCCESS:format(DBM:strFromTime(hudDuration)))\n--\t\t\telseif hudType == \"green\" then\n--\t\t\t\tDBM.HudMap:RegisterRangeMarkerOnPartyMember(12345, \"highlight\", targetName, 3.5, hudDuration, 0, 1, 0, 0.5, nil, false):Pulse(0.5, 0.5)\n--\t\t\t\ttinsert(trackedHudMarkers, targetName)\n--\t\t\t\tDBM:AddMsg(L.HUD_SUCCESS:format(DBM:strFromTime(hudDuration)))\n--\t\t\telseif hudType == \"red\" then\n--\t\t\t\tDBM.HudMap:RegisterRangeMarkerOnPartyMember(12345, \"highlight\", targetName, 3.5, hudDuration, 1, 0, 0, 0.5, nil, false):Pulse(0.5, 0.5)\n--\t\t\t\ttinsert(trackedHudMarkers, targetName)\n--\t\t\t\tDBM:AddMsg(L.HUD_SUCCESS:format(DBM:strFromTime(hudDuration)))\n--\t\t\telseif hudType == \"yellow\" then\n--\t\t\t\tDBM.HudMap:RegisterRangeMarkerOnPartyMember(12345, \"highlight\", targetName, 3.5, hudDuration, 1, 1, 0, 0.5, nil, false):Pulse(0.5, 0.5)\n--\t\t\t\ttinsert(trackedHudMarkers, targetName)\n--\t\t\t\tDBM:AddMsg(L.HUD_SUCCESS:format(DBM:strFromTime(hudDuration)))\n--\t\t\telseif hudType == \"blue\" then\n--\t\t\t\tDBM.HudMap:RegisterRangeMarkerOnPartyMember(12345, \"highlight\", targetName, 3.5, hudDuration, 0, 0, 1, 0.5, nil, false):Pulse(0.5, 0.5)\n--\t\t\t\ttinsert(trackedHudMarkers, targetName)\n--\t\t\t\tDBM:AddMsg(L.HUD_SUCCESS:format(DBM:strFromTime(hudDuration)))\n--\t\t\telseif hudType == \"icon\" then\n--\t\t\t\tlocal icon = GetRaidTargetIndex(uId)\n--\t\t\t\tif not icon then\n--\t\t\t\t\tDBM:AddMsg(L.HUD_INVALID_ICON)\n--\t\t\t\t\treturn\n--\t\t\t\tend\n--\t\t\t\tDBM.HudMap:RegisterRangeMarkerOnPartyMember(12345, DBM:IconNumToString(icon):lower(), targetName, 3.5, hudDuration, 1, 1, 1, 0.5, nil, false):Pulse(0.5, 0.5)\n--\t\t\t\ttinsert(trackedHudMarkers, targetName)\n--\t\t\t\tDBM:AddMsg(L.HUD_SUCCESS:format(DBM:strFromTime(hudDuration)))\n--\t\t\telse\n--\t\t\t\tDBM:AddMsg(L.HUD_INVALID_TYPE)\n--\t\t\tend\n--\t\tend\n\telseif cmd:sub(1, 5) == \"arrow\" then\n\t\tif DBM:HasMapRestrictions() then\n\t\t\tDBM:AddMsg(L.NO_ARROW)\n\t\t\treturn\n\t\tend\n\t\tlocal x, y = string.split(\" \", cmd:sub(6):trim())\n\t\tlocal xNum, yNum = tonumber(x or \"\"), tonumber(y or \"\")\n\t\tif xNum and yNum then\n\t\t\tDBM.Arrow:ShowRunTo(xNum, yNum, 0)\n\t\t\treturn\n\t\telseif type(x) == \"string\" and x:trim() ~= \"\" then\n\t\t\tlocal subCmd = x:trim()\n\t\t\tif subCmd== \"hide\" then\n\t\t\t\tDBM.Arrow:Hide()\n\t\t\t\treturn\n\t\t\telseif subCmd == \"move\" then\n\t\t\t\tDBM.Arrow:Move()\n\t\t\t\treturn\n\t\t\telseif subCmd == \"target\" then\n\t\t\t\tDBM.Arrow:ShowRunTo(\"target\")\n\t\t\t\treturn\n\t\t\telseif subCmd == \"focus\" then\n\t\t\t\tDBM.Arrow:ShowRunTo(\"focus\")\n\t\t\t\treturn\n--\t\t\telseif subCmd == \"map\" then\n--\t\t\t\tDBM.Arrow:ShowRunTo(yNum, zNum, 0, nil, true)\n--\t\t\t\treturn\n\t\t\telseif DBM:GetRaidUnitId(DBM:Capitalize(subCmd)) then\n\t\t\t\tDBM.Arrow:ShowRunTo(DBM:Capitalize(subCmd))\n\t\t\t\treturn\n\t\t\tend\n\t\tend\n\t\tfor _, v in ipairs(L.ARROW_ERROR_USAGE) do\n\t\t\tDBM:AddMsg(v)\n\t\tend\n\telseif cmd:sub(1, 7) == \"lockout\" or cmd:sub(1, 3) == \"ids\" then\n\t\tif DBM:GetRaidRank(playerName) == 0 then\n\t\t\treturn DBM:AddMsg(L.ERROR_NO_PERMISSION)\n\t\tend\n\t\tif GetNumRaidMembers() == 0 then\n\t\t\treturn DBM:AddMsg(L.ERROR_NO_RAID)\n\t\tend\n\t\tDBM:RequestInstanceInfo()\n\telseif cmd:sub(1, 10) == \"debuglevel\" then\n\t\tlocal level = tonumber(cmd:sub(11)) or 1\n\t\tif level < 1 or level > 3 then\n\t\t\tDBM:AddMsg(\"Invalid Value. Debug Level must be between 1 and 3.\")\n\t\t\treturn\n\t\tend\n\t\tDBM.Options.DebugLevel = level\n\t\tDBM:AddMsg(\"Debug Level is \" .. level)\n\telseif cmd:sub(1, 5) == \"debug\" then\n\t\tDBM.Options.DebugMode = not DBM.Options.DebugMode\n\t\tDBM:AddMsg(\"Debug Message is \" .. (DBM.Options.DebugMode and \"ON\" or \"OFF\"))\n\t\tprivate:GetModule(\"DevTools\"):OnDebugToggle()\n\telseif cmd:sub(1, 4) == \"test\" then\n\t\tDBM:DemoMode()\n\telseif cmd:sub(1, 8) == \"whereiam\" or cmd:sub(1, 8) == \"whereami\" then\n\t\tlocal x, y = GetPlayerMapPosition(\"player\")\n\t\tlocal map, mapx, mapy = GetMapInfo()\n\t\tlocal mapID = GetCurrentMapAreaID() or \"nil\"\n\t\tif DBM:HasMapRestrictions() then\n\t\t\tDBM:AddMsg((\"Location Information\\nYou are at zone %s (%s).\\nLocal Map ID %u (%s)\"):format(map, GetRealZoneText(map), mapID, GetZoneText()))\n\t\telse\n\t\t\tDBM:AddMsg((\"Location Information\\nYou are at zone %s (%s): x=%f, y=%f.\\nLocal Map ID %u (%s): x=%f, y=%f\"):format(map, GetRealZoneText(map), x, y, mapID, GetZoneText(),mapx, mapy))\n\t\tend\n\telseif cmd:sub(1, 7) == \"request\" then\n\t\tDBM:Unschedule(DBM.RequestTimers)\n\t\tDBM:RequestTimers(1)\n\t\tDBM:RequestTimers(2)\n\t\tDBM:RequestTimers(3)\n\telseif cmd:sub(1, 6) == \"silent\" then\n\t\tDBM.Options.SilentMode = not DBM.Options.SilentMode\n\t\tDBM:AddMsg(L.SILENTMODE_IS .. (DBM.Options.SilentMode and \"ON\" or \"OFF\"))\n\telseif cmd:sub(1, 10) == \"musicstart\" then\n\t\tDBM:TransitionToDungeonBGM(true)\n\telseif cmd:sub(1, 9) == \"musicstop\" then\n\t\tDBM:TransitionToDungeonBGM(false, true)\n\telseif cmd:sub(1, 9) == \"infoframe\" then\n\t\tif DBM.InfoFrame:IsShown() then\n\t\t\tDBM.InfoFrame:Hide()\n\t\telse\n\t\t\tDBM.InfoFrame:Show(5, \"test\")\n\t\tend\n\telseif cmd:sub(1, 10) == \"aggroframe\" then\n\t\tif DBM.InfoFrame:IsShown() then\n\t\t\tDBM.InfoFrame:Hide()\n\t\telse\n\t\t\tDBM.InfoFrame:SetHeader(L.INFOFRAME_AGGRO)\n\t\t\tDBM.InfoFrame:Show(7, \"playeraggro\", 1)\n\t\tend\n\telse\n\t\tDBM:LoadGUI()\n\tend\nend\n"
  },
  {
    "path": "DBM-Core/modules/DevTools.lua",
    "content": "local _, private = ...\n\nlocal module = private:NewModule(\"DevTools\")\n\nfunction module:OnModuleLoad()\n\tself:OnDebugToggle()\nend\n\ndo\n\t--Debug Mode\n\tlocal eventsRegistered = false\n\tlocal UnitName, UnitExists = UnitName, UnitExists\n\tfunction module:UNIT_TARGET(uId)\n\t\tlocal transcriptor = _G[\"Transcriptor\"]\n\t\tif DBM.Options.DebugLevel > 2 or (transcriptor and transcriptor:IsLogging()) then\n\t\t\tlocal active = UnitExists(uId) and \"true\" or \"false\"\n\t\t\tself:Debug(\"UNIT_TARGET event fired for \"..UnitName(uId)..\". Active: \"..active)\n\t\tend\n\tend\n\n\tfunction module:UNIT_SPELLCAST_SUCCEEDED(uId, spellName)\n\t\tself:Debug(\"UNIT_SPELLCAST_SUCCEEDED fired: \"..UnitName(uId)..\"'s \"..spellName, 3)\n\tend\n\n\t--Spammy events that core doesn't otherwise need are now dynamically registered/unregistered based on whether or not user is actually debugging\n\tfunction module:OnDebugToggle()\n\t\tif DBM.Options.DebugMode and not eventsRegistered then\n\t\t\teventsRegistered = true\n\t\t\tself:RegisterShortTermEvents(\"UNIT_SPELLCAST_SUCCEEDED boss1 boss2 boss3 boss4 boss5\", \"UNIT_TARGET\")\n\t\telseif not DBM.Options.DebugMode and eventsRegistered then\n\t\t\teventsRegistered = false\n\t\t\tself:UnregisterShortTermEvents()\n\t\tend\n\tend\n\n\tfunction module:Debug(text, level)\n\t\t--But we still want to generate callbacks for level 1 and 2 events\n\t\tif DBM.Options.DebugLevel >= 3 or (level or 1) < 3 then--Cap debug level to 2 for transcriptor unless user specifically specifies 3\n\t\t\tDBM:FireEvent(\"DBM_Debug\", text, level)\n\t\tend\n\t\tif not DBM.Options or not DBM.Options.DebugMode then return end\n\t\tif (level or 1) <= DBM.Options.DebugLevel then\n\t\t\tlocal frame = _G[tostring(DBM.Options.ChatFrame)]\n\t\t\tframe = frame and frame:IsShown() and frame or DEFAULT_CHAT_FRAME\n\t\t\tframe:AddMessage(\"|cffff7d0aDBM Debug:|r \"..text, 1, 1, 1)\n\t\tend\n\tend\nend\n\n--Taint the script that disables /run /dump, etc\n--ScriptsDisallowedForBeta = function() return false end\n"
  },
  {
    "path": "DBM-Core/modules/Hyperlinks.lua",
    "content": "local L = DBM_CORE_L\n\nlocal frame, text, ignore, cancel\n\nlocal function CreateOurFrame()\n\tframe = CreateFrame(\"Frame\", \"DBMHyperLinks\", UIParent)\n\tframe.backdropInfo = {\n\t\tbgFile\t\t= \"Interface\\\\DialogFrame\\\\UI-DialogBox-Background-Dark\", -- 312922\n\t\tedgeFile\t= \"Interface\\\\DialogFrame\\\\UI-DialogBox-Border\", -- 131072\n\t\ttile\t\t= true,\n\t\ttileSize\t= 16,\n\t\tedgeSize\t= 16,\n\t\tinsets\t\t= { left = 1, right = 1, top = 1, bottom = 1 }\n\t}\n\tframe:SetBackdrop(frame.backdropInfo)\n\tframe:SetSize(500, 80)\n\tframe:SetPoint(\"TOP\", UIParent, \"TOP\", 0, -200)\n\tframe:SetFrameStrata(\"DIALOG\")\n\n\ttext = frame:CreateFontString()\n\ttext:SetFontObject(ChatFontNormal)\n\ttext:SetWidth(470)\n\ttext:SetWordWrap(true)\n\ttext:SetPoint(\"TOP\", frame, \"TOP\", 0, -15)\n\n\tlocal accept = CreateFrame(\"Button\", nil, frame)\n\taccept:SetNormalTexture(\"Interface\\\\Buttons\\\\UI-DialogBox-Button-Up\") -- 130763\n\taccept:SetPushedTexture(\"Interface\\\\Buttons\\\\UI-DialogBox-Button-Down\") -- 130761\n\taccept:SetHighlightTexture(\"Interface\\\\Buttons\\\\UI-DialogBox-Button-Highlight\", \"ADD\") -- 130762\n\taccept:SetSize(128, 35)\n\taccept:SetPoint(\"BOTTOM\", frame, \"BOTTOM\", -75, 0)\n\taccept:SetScript(\"OnClick\", function()\n\t\tDBM:AddToPizzaIgnore(ignore)\n\t\tDBT:CancelBar(cancel)\n\t\tframe:Hide()\n\tend)\n\n\tlocal atext = accept:CreateFontString()\n\tatext:SetFontObject(ChatFontNormal)\n\tatext:SetPoint(\"CENTER\", accept, \"CENTER\", 0, 5)\n\tatext:SetText(YES)\n\n\tlocal decline = CreateFrame(\"Button\", nil, frame)\n\tdecline:SetNormalTexture(\"Interface\\\\Buttons\\\\UI-DialogBox-Button-Up\") -- 130763\n\tdecline:SetPushedTexture(\"Interface\\\\Buttons\\\\UI-DialogBox-Button-Down\") -- 130761\n\tdecline:SetHighlightTexture(\"Interface\\\\Buttons\\\\UI-DialogBox-Button-Highlight\", \"ADD\") -- 130762\n\tdecline:SetSize(128, 35)\n\tdecline:SetPoint(\"BOTTOM\", frame, \"BOTTOM\", 75, 0)\n\tdecline:SetScript(\"OnClick\", function()\n\t\tframe:Hide()\n\tend)\n\n\tlocal dtext = decline:CreateFontString()\n\tdtext:SetFontObject(ChatFontNormal)\n\tdtext:SetPoint(\"CENTER\", decline, \"CENTER\", 0, 5)\n\tdtext:SetText(NO)\n\tDBM:PlaySound(850)\nend\n\nlocal function LinkHook(self, link)\n\tlocal _, linkType, arg1, arg2, arg3, arg4, arg5, arg6 = strsplit(\":\", link)\n\tif linkType ~= \"DBM\" then\n\t\treturn\n\tend\n\tif arg1 == \"cancel\" then\n\t\tDBT:CancelBar(link:match(\"DBM:cancel:(.+):nil$\"))\n\telseif arg1 == \"ignore\" then\n\t\tcancel = link:match(\"DBM:ignore:(.+):[^%s:]+$\")\n\t\tignore = link:match(\":([^:]+)$\")\n\t\tif not frame then\n\t\t\tCreateOurFrame()\n\t\tend\n\t\ttext:SetText(L.PIZZA_CONFIRM_IGNORE:format(ignore))\n\t\tframe:Show()\n\telseif arg1 == \"update\" then\n\t\tDBM:ShowUpdateReminder(arg2, arg3) -- displayVersion, revision\n\telseif arg1 == \"news\" then\n\t\tDBM:ShowUpdateReminder(nil, nil, L.COPY_URL_DIALOG_NEWS, \"https://patreon.com/posts/dbm-9-1-9-false-55047651\")\n\telseif arg1 == \"noteshare\" then\n\t\tlocal mod = DBM:GetModByName(arg2 or \"\")\n\t\tif mod then\n\t\t\tDBM:ShowNoteEditor(mod, arg3, arg4, arg5, arg6)--modvar, ability, text, sender\n\t\telse--Should not happen, since mod was verified before getting this far, but just in case\n\t\t\tDBM:Debug(\"Bad note share, mod not valid\")\n\t\tend\n\tend\nend\n\nDEFAULT_CHAT_FRAME:HookScript(\"OnHyperlinkClick\", LinkHook) -- Handles the weird case that the default chat frame is not one of the normal chat frames (3rd party chat frames or whatever causes this)\nlocal i = 1\nwhile _G[\"ChatFrame\" .. i] do\n\tif _G[\"ChatFrame\" .. i] ~= DEFAULT_CHAT_FRAME then\n\t\t_G[\"ChatFrame\" .. i]:HookScript(\"OnHyperlinkClick\", LinkHook)\n\tend\n\ti = i + 1\nend\n"
  },
  {
    "path": "DBM-Core/modules/Icons.lua",
    "content": "local _, private = ...\n\nlocal GetTime = GetTime\nlocal tinsert, tsort = table.insert, table.sort\nlocal UnitIsUnit, UnitExists, UnitIsVisible, SetRaidTarget, GetRaidTargetIndex =\n\tUnitIsUnit, UnitExists, UnitIsVisible, SetRaidTarget, GetRaidTargetIndex\n\nlocal playerName = UnitName(\"player\")\n\n--These still need to exist in private since they are heavily intertwined with DBM-Core\n--Do not move these to local/OnModuleEnd\nprivate.canSetIcons = {}\nprivate.enableIcons = true -- Set to false when a raid leader or a promoted player has a newer version of DBM\n\n--Common variables\nlocal eventsRegistered = false\nlocal scansActive = 0\n--Mob Scanning Variables\nlocal scanExpires = {}\nlocal addsIcon = {}\nlocal addsIconSet = {}\nlocal addsGUIDs = {}\nlocal iconVariables = {}\n--Player setting variables\nlocal iconUnitTable = {}\nlocal iconSet = {}\n\nlocal module = private:NewModule(\"Icons\")\n\nfunction module:OnModuleEnd()\n\ttable.wipe(addsGUIDs)\nend\n\n--Utility functions used by multiple player methods\nlocal function clearIconTable(scanId)\n\ticonUnitTable[scanId] = nil\n\ticonSet[scanId] = nil\nend\n\n--Primary icon methods\nfunction module:SetIcon(mod, target, icon, timer)\n\tif not target then return end--Fix a rare bug where target becomes nil at last second (end combat fires and clears targets)\n\tif DBM.Options.DontSetIcons or not private.enableIcons or private.raidIconsDisabled or DBM:GetRaidRank(playerName) == 0 then\n\t\treturn\n\tend\n\tmod:UnscheduleMethod(\"SetIcon\", target)\n\tif type(icon) ~= \"number\" or type(target) ~= \"string\" then--icon/target probably backwards.\n\t\tDBM:Debug(\"|cffff0000SetIcon is being used impropperly. Check icon/target order|r\")\n\t\treturn--Fail silently instead of spamming icon lua errors if we screw up\n\tend\n\tif not icon or icon > 8 or icon < 0 then\n\t\tDBM:Debug(\"|cffff0000SetIcon is being used impropperly. Icon value must be between 0 and 8 (16 if extended)|r\")\n\t\treturn\n\tend\n\tlocal uId = DBM:GetRaidUnitId(target) or UnitExists(target) and target\n\tif uId and UnitIsUnit(uId, \"player\") and DBM:GetNumRealGroupMembers() < 2 then return end--Solo raid, no reason to put icon on yourself.\n\tif uId then--target accepts uid, unitname both.\n\t\tuId = uId or target\n\t\t--save previous icon into a table.\n\t\tlocal oldIcon = self:GetIcon(uId) or 0\n\t\tif not mod.iconRestore[uId] then\n\t\t\tmod.iconRestore[uId] = oldIcon\n\t\tend\n\t\t--set icon\n\t\tif oldIcon ~= icon then--Don't set icon if it's already set to what we're setting it to\n\t\t\tSetRaidTarget(uId, mod.iconRestore[uId] and icon == 0 and mod.iconRestore[uId] or icon)\n\t\tend\n\t\t--schedule restoring old icon if timer enabled.\n\t\tif timer then\n\t\t\tmod:ScheduleMethod(timer, \"SetIcon\", target, 0)\n\t\tend\n\tend\nend\n\ndo\n\tlocal function SetIconByTable(mod, startIcon, descendingIcon, returnFunc, scanId)\n\t\tlocal icon, CustomIcons\n\t\tif startIcon and type(startIcon) == \"table\" then--Specific gapped icons\n\t\t\tCustomIcons = true\n\t\t\ticon = 1\n\t\telse\n\t\t\ticon = startIcon or 1\n\t\tend\n\t\tfor _, v in ipairs(iconUnitTable[scanId]) do\n\t\t\tif not mod.iconRestore[v] then\n\t\t\t\tmod.iconRestore[v] = module:GetIcon(v) or 0\n\t\t\tend\n\t\t\tif CustomIcons then\n\t\t\t\tSetRaidTarget(v, startIcon[icon])--do not use SetIcon function again. It already checked in SetSortedIcon function.\n\t\t\t\tif returnFunc then\n\t\t\t\t\tmod[returnFunc](mod, v, startIcon[icon])--Send icon and target to returnFunc. (Generally used by announce icon targets to raid chat feature)\n\t\t\t\tend\n\t\t\t\ticon = icon + 1\n\t\t\telse\n\t\t\t\tSetRaidTarget(v, icon)--do not use SetIcon function again. It already checked in SetSortedIcon function.\n\t\t\t\tif returnFunc then\n\t\t\t\t\tmod[returnFunc](mod, v, icon)--Send unitId and icon to returnFunc. (Generally used by announce icon targets to raid chat feature)\n\t\t\t\tend\n\t\t\t\tif descendingIcon then\n\t\t\t\t\ticon = icon - 1\n\t\t\t\telse\n\t\t\t\t\ticon = icon + 1\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tmod:Schedule(1.5, clearIconTable, scanId)--Table wipe delay so if icons go out too early do to low fps or bad latency, when they get new target on table, resort and reapplying should auto correct teh icon within .2-.4 seconds at most.\n\tend\n\n\tfunction module:SetUnsortedIcon(mod, delay, target, startIcon, maxIcon, descendingIcon, returnFunc, scanId)\n\t\tif not target then return end\n\t\tif DBM.Options.DontSetIcons or not private.enableIcons or private.raidIconsDisabled or DBM:GetRaidRank(playerName) == 0 then\n\t\t\treturn\n\t\tend\n\t\tscanId = scanId or 1--Default 1, since sorted defaults to 2, this allows both objects to be used while omitting on a single mod (but need to be numbered if 2 of same object used)\n\t\tif not startIcon then startIcon = 1 end\n\t\tlocal uId = DBM:GetRaidUnitId(target)\n\t\tif uId or UnitExists(target) then--target accepts uid, unitname both.\n\t\t\tuId = uId or target\n\t\t\tif not iconUnitTable[scanId] then iconUnitTable[scanId] = {} end\n\t\t\tif not iconSet[scanId] then iconSet[scanId] = 0 end\n\t\t\tlocal foundDuplicate = false\n\t\t\tfor i = #iconUnitTable[scanId], 1, -1 do\n\t\t\t\tif iconUnitTable[scanId][i] == uId then\n\t\t\t\t\tfoundDuplicate = true\n\t\t\t\t\tbreak\n\t\t\t\tend\n\t\t\tend\n\t\t\tif not foundDuplicate then\n\t\t\t\ticonSet[scanId] = iconSet[scanId] + 1\n\t\t\t\ttinsert(iconUnitTable[scanId], uId)\n\t\t\tend\n\t\t\tmod:Unschedule(SetIconByTable)\n\t\t\tmod:Unschedule(clearIconTable, scanId)\n\t\t\tif maxIcon and iconSet[scanId] == maxIcon then\n\t\t\t\tSetIconByTable(mod, startIcon, descendingIcon, returnFunc, scanId)\n\t\t\telseif mod:LatencyCheck() then--lag can fail the icons so we check it before allowing.\n\t\t\t\tmod:Schedule(delay or 0.5, SetIconByTable, mod, startIcon, descendingIcon, returnFunc, scanId)\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction module:GetIcon(uIdOrTarget)\n\tlocal uId = DBM:GetRaidUnitId(uIdOrTarget) or uIdOrTarget\n\treturn UnitExists(uId) and GetRaidTargetIndex(uId)\nend\n\nfunction module:RemoveIcon(mod, target)\n\treturn self:SetIcon(mod, target, 0)\nend\n\nfunction module:ClearIcons()\n\tif GetNumRaidMembers() > 0 then\n\t\tfor i = 1, GetNumRaidMembers() do\n\t\t\tif UnitExists(\"raid\" .. i) and GetRaidTargetIndex(\"raid\" .. i) then\n\t\t\t\tSetRaidTarget(\"raid\" .. i, 0)\n\t\t\tend\n\t\tend\n\telse\n\t\tfor i = 1, GetNumPartyMembers() do\n\t\t\tif UnitExists(\"party\" .. i) and GetRaidTargetIndex(\"party\" .. i) then\n\t\t\t\tSetRaidTarget(\"party\" .. i, 0)\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction module:CanSetIcon(optionName)\n\treturn private.canSetIcons[optionName] or false\nend\n\n--Special Icon Methods\ndo\n\tlocal function SetIconBySortedTable(mod, sortType, startIcon, descendingIcon, returnFunc, scanId)\n\t\tif sortType == \"tankalpha\" then\n\t\t\ttsort(iconUnitTable[scanId], DBM.SortByTankAlpha)\n\t\telseif sortType == \"tankroster\" then\n\t\t\ttsort(iconUnitTable[scanId], DBM.SortByTankRoster)\n\t\telseif sortType == \"meleealpha\" then\n\t\t\ttsort(iconUnitTable[scanId], DBM.SortByMeleeAlpha)\n\t\telseif sortType == \"meleeroster\" then\n\t\t\ttsort(iconUnitTable[scanId], DBM.SortByMeleeRoster)\n\t\telseif sortType == \"rangedalpha\" then\n\t\t\ttsort(iconUnitTable[scanId], DBM.SortByRangedAlpha)\n\t\telseif sortType == \"rangedroster\" then\n\t\t\ttsort(iconUnitTable[scanId], DBM.SortByRangedRoster)\n\t\telseif sortType == \"roster\" then\n\t\t\ttsort(iconUnitTable[scanId], DBM.SortByGroup)\n\t\telse--Just generic \"alpha\" sort\n\t\t\ttsort(iconUnitTable[scanId])\n\t\tend\n\t\tlocal icon, CustomIcons\n\t\tif startIcon and type(startIcon) == \"table\" then--Specific gapped icons\n\t\t\tCustomIcons = true\n\t\t\ticon = 1\n\t\telse\n\t\t\ticon = startIcon or 1\n\t\tend\n\t\tfor _, v in ipairs(iconUnitTable[scanId]) do\n\t\t\tif not mod.iconRestore[v] then\n\t\t\t\tmod.iconRestore[v] = module:GetIcon(v) or 0\n\t\t\tend\n\t\t\tif CustomIcons then\n\t\t\t\tSetRaidTarget(v, startIcon[icon])--do not use SetIcon function again. It already checked in SetSortedIcon function.\n\t\t\t\tif returnFunc then\n\t\t\t\t\tmod[returnFunc](mod, v, startIcon[icon])--Send icon and target to returnFunc. (Generally used by announce icon targets to raid chat feature)\n\t\t\t\tend\n\t\t\t\ticon = icon + 1\n\t\t\telse\n\t\t\t\tSetRaidTarget(v, icon)--do not use SetIcon function again. It already checked in SetSortedIcon function.\n\t\t\t\tif returnFunc then\n\t\t\t\t\tmod[returnFunc](mod, v, icon)--Send unitId and icon to returnFunc. (Generally used by announce icon targets to raid chat feature)\n\t\t\t\tend\n\t\t\t\tif descendingIcon then\n\t\t\t\t\ticon = icon - 1\n\t\t\t\telse\n\t\t\t\t\ticon = icon + 1\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tmod:Schedule(1.5, clearIconTable, scanId)--Table wipe delay so if icons go out too early do to low fps or bad latency, when they get new target on table, resort and reapplying should auto correct teh icon within .2-.4 seconds at most.\n\tend\n\n\tfunction module:SetSortedIcon(mod, sortType, delay, target, startIcon, maxIcon, descendingIcon, returnFunc, scanId)\n\t\tif type(sortType) ~= \"string\" then\n\t\t\tDBM:AddMsg(\"SetSortedIcon tried to call invalid type, please update your encounter modules for this zone. If error persists, report this issue\")\n\t\t\treturn\n\t\tend\n\t\tif not target then return end\n\t\tif DBM.Options.DontSetIcons or not private.enableIcons or private.raidIconsDisabled or DBM:GetRaidRank(playerName) == 0 then\n\t\t\treturn\n\t\tend\n\t\tscanId = scanId or 2--Default 2, since unsorted defaults to 1, this allows both objects to be used while omitting on a single mod (but need to be numbered if 2 of same object used)\n\t\tif not startIcon then startIcon = 1 end\n\t\tlocal uId = DBM:GetRaidUnitId(target)\n\t\tif uId or UnitExists(target) then--target accepts uid, unitname both.\n\t\t\tuId = uId or target\n\t\t\tif not iconUnitTable[scanId] then iconUnitTable[scanId] = {} end\n\t\t\tif not iconSet[scanId] then iconSet[scanId] = 0 end\n\t\t\tlocal foundDuplicate = false\n\t\t\tfor i = #iconUnitTable[scanId], 1, -1 do\n\t\t\t\tif iconUnitTable[scanId][i] == uId then\n\t\t\t\t\tfoundDuplicate = true\n\t\t\t\t\tbreak\n\t\t\t\tend\n\t\t\tend\n\t\t\tif not foundDuplicate then\n\t\t\t\ticonSet[scanId] = iconSet[scanId] + 1\n\t\t\t\ttinsert(iconUnitTable[scanId], uId)\n\t\t\tend\n\t\t\tmod:Unschedule(SetIconBySortedTable)\n\t\t\tmod:Unschedule(clearIconTable, scanId)\n\t\t\tif maxIcon and iconSet[scanId] == maxIcon then\n\t\t\t\tSetIconBySortedTable(mod, sortType, startIcon, descendingIcon, returnFunc, scanId)\n\t\t\telseif mod:LatencyCheck() then--lag can fail the icons so we check it before allowing.\n\t\t\t\tmod:Schedule(delay or 0.5, SetIconBySortedTable, mod, sortType, startIcon, descendingIcon, returnFunc, scanId)\n\t\t\tend\n\t\tend\n\tend\nend\n\ndo\n\tlocal function expireScan(scanId, wipeGUID)\n\t\t--clear variables\n\t\tscanExpires[scanId] = nil\n\t\taddsIcon[scanId] = nil\n\t\taddsIconSet[scanId] = nil\n\t\ticonVariables[scanId] = nil\n\t\tscansActive = scansActive - 1\n\t\t--Do not wipe adds GUID table here unless explicitely requested by mod, it's wiped by :Stop() which is called by EndCombat\n\t\tif wipeGUID then\n\t\t\taddsGUIDs[scanId] = nil\n\t\tend\n\t\tif eventsRegistered and scansActive == 0 then--No remaining icon scans\n\t\t\teventsRegistered = false\n\t\t\tmodule:UnregisterShortTermEvents()\n\t\t\tDBM:Debug(\"Target events Unregistered\", 2)\n\t\tend\n\tend\n\n\tlocal function executeMarking(scanId, unitId)\n\t\tif not iconVariables[scanId] then\n\t\t\t--Scan already expired\n\t\t\treturn\n\t\tend\n\t\tlocal guid = UnitGUID(unitId)\n\t\tlocal cid = DBM:GetCIDFromGUID(guid)\n\t\tlocal isFriend = UnitIsFriend(\"player\", unitId)\n\t\tlocal isFiltered = false\n\t\tlocal success = false\n\t\tif (not iconVariables[scanId].allowFriendly and isFriend) or (iconVariables[scanId].skipMarked and GetRaidTargetIndex(unitId)) then\n\t\t\tisFiltered = true\n\t\t\tDBM:Debug(unitId..\" was skipped because it's a filtered mob. Friend Flag: \"..(isFriend and \"true\" or \"false\"), 3)\n\t\tend\n\t\tif not isFiltered then\n\t\t\t--Table based scanning, used if applying to multiple creature Ids in a single scan\n\t\t\t--Can be used in both ascending/descending icon assignment or even specific icons per Id\n\t\t\tif guid and iconVariables[scanId].scanTable and type(iconVariables[scanId].scanTable) == \"table\" and iconVariables[scanId].scanTable[cid] and not addsGUIDs[guid] then\n\t\t\t\tDBM:Debug(\"Match found in mobUids, SHOULD be setting table icon on \"..unitId, 1)\n\t\t\t\tif type(iconVariables[scanId].scanTable[cid]) == \"number\" then--CID in table is assigned a specific icon number\n\t\t\t\t\tSetRaidTarget(unitId, iconVariables[scanId].scanTable[cid])\n\t\t\t\t\tDBM:Debug(\"DBM called SetRaidTarget on \"..unitId..\" with icon value of \"..iconVariables[scanId].scanTable[cid], 2)\n\t\t\t\t\tsuccess = true\n\t\t\t\telse--Incremental Icon method (ie the table value for the cid was true not a number)\n\t\t\t\t\tSetRaidTarget(unitId, addsIcon[scanId])\n\t\t\t\t\tDBM:Debug(\"DBM called SetRaidTarget on \"..unitId..\" with icon value of \"..addsIcon[scanId], 2)\n\t\t\t\t\tsuccess = true\n\t\t\t\t\tif iconVariables[scanId].iconSetMethod == 1 then\n\t\t\t\t\t\taddsIcon[scanId] = addsIcon[scanId] + 1\n\t\t\t\t\telse\n\t\t\t\t\t\taddsIcon[scanId] = addsIcon[scanId] - 1\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\telseif guid and (guid == scanId or cid == scanId) and not addsGUIDs[guid] then\n\t\t\t\tDBM:Debug(\"Match found in mobUids, SHOULD be setting icon on \"..unitId, 1)\n\t\t\t\tif iconVariables[scanId].iconSetMethod == 2 then--Fixed Icon\n\t\t\t\t\tSetRaidTarget(unitId, addsIcon[scanId])\n\t\t\t\t\tDBM:Debug(\"DBM called SetRaidTarget on \"..unitId..\" with icon value of \"..addsIcon[scanId], 2)\n\t\t\t\t\tsuccess = true\n\t\t\t\telse--Incremental Icon method\n\t\t\t\t\tSetRaidTarget(unitId, addsIcon[scanId])\n\t\t\t\t\tDBM:Debug(\"DBM called SetRaidTarget on \"..unitId..\" with icon value of \"..addsIcon[scanId], 2)\n\t\t\t\t\tsuccess = true\n\t\t\t\t\tif iconVariables[scanId].iconSetMethod == 1 then--Asscending\n\t\t\t\t\t\taddsIcon[scanId] = addsIcon[scanId] + 1\n\t\t\t\t\telse--Descending\n\t\t\t\t\t\taddsIcon[scanId] = addsIcon[scanId] - 1\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tif success then\n\t\t\taddsGUIDs[guid] = true\n\t\t\taddsIconSet[scanId] = addsIconSet[scanId] + 1\n\t\t\tDBM:Debug(\"SetRaidTarget succeeded. Total set \"..(addsIconSet[scanId] or \"unknown\")..\" of \"..(iconVariables[scanId].maxIcon or \"unknown\"), 2)\n\t\t\tif addsIconSet[scanId] >= iconVariables[scanId].maxIcon then--stop scan immediately to save cpu\n\t\t\t\tDBM:Unschedule(expireScan, scanId)\n\t\t\t\tDBM:Debug(\"Stopping Successful ScanForMobs for: \"..(scanId or \"nil\"), 2)\n\t\t\t\texpireScan(scanId, iconVariables[scanId].wipeGUID)\n\t\t\t\treturn\n\t\t\tend\n\t\tend\n\t\tif GetTime() > scanExpires[scanId] then--scan for limited time.\n\t\t\tDBM:Unschedule(expireScan, scanId)\n\t\t\tDBM:Debug(\"Stopping Expired ScanForMobs for: \"..(scanId or \"nil\"), 2)\n\t\t\texpireScan(scanId, iconVariables[scanId].wipeGUID)\n\t\tend\n\tend\n\n\tfunction module:UPDATE_MOUSEOVER_UNIT()\n\t\tfor scanId, _ in pairs(scanExpires) do\n\t\t\texecuteMarking(scanId, \"mouseover\")\n\t\t\t--executeMarking(scanId, \"mouseovertarget\")\n\t\tend\n\tend\n\n\tfunction module:UNIT_TARGET_UNFILTERED(unitId)\n\t\tfor scanId, _ in pairs(scanExpires) do\n\t\t\texecuteMarking(scanId, unitId..\"target\")\n\t\tend\n\tend\n\n\t--If this continues to throw errors because SetRaidTarget fails even after IEEU has fired for a unit, then this will be scrapped\n\tfunction module:INSTANCE_ENCOUNTER_ENGAGE_UNIT()\n\t\tfor i = 1, 10 do\n\t\t\tlocal unitId = \"boss\"..i\n\t\t\tif UnitExists(unitId) and UnitIsVisible(unitId) then--Hopefully enough failsafe against icons failing\n\t\t\t\tfor _, scanId in ipairs(scanExpires) do\n\t\t\t\t\texecuteMarking(scanId, unitId)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\t--Initial scan Ids. These exclude boss unit Ids because them existing doessn't mean they are valid yet. They are not valid until they are added to boss health frame\n\t--Attempting to SetRaidTarget on a non visible valid boss id actually just silently fails\n\tlocal mobUids = {\n\t\t\"raid1target\", \"raid2target\", \"raid3target\", \"raid4target\", \"raid5target\", \"raid6target\", \"raid7target\", \"raid8target\", \"raid9target\", \"raid10target\",\n\t\t\"raid11target\", \"raid12target\", \"raid13target\", \"raid14target\", \"raid15target\", \"raid16target\", \"raid17target\", \"raid18target\", \"raid19target\", \"raid20target\",\n\t\t\"raid21target\", \"raid22target\", \"raid23target\", \"raid24target\", \"raid25target\", \"raid26target\", \"raid27target\", \"raid28target\", \"raid29target\", \"raid30target\",\n\t\t\"raid31target\", \"raid32target\", \"raid33target\", \"raid34target\", \"raid35target\", \"raid36target\", \"raid37target\", \"raid38target\", \"raid39target\", \"raid40target\",\n\t\t\"party1target\", \"party2target\", \"party3target\", \"party4target\",\n\t\t\"mouseover\", \"target\", \"focus\", \"targettarget\", \"mouseovertarget\"\n\t}\n\n\tfunction module:ScanForMobs(mod, scanId, iconSetMethod, mobIcon, maxIcon, scanTable, scanningTime, optionName, allowFriendly, skipMarked, allAllowed, wipeGUID)\n\t\tif not optionName then optionName = mod.findFastestComputer[1] end\n\t\tif private.canSetIcons[optionName] or (allAllowed and not DBM.Options.DontSetIcons) then\n\t\t\t--Declare variables.\n\t\t\tDBM:Debug(\"canSetIcons or allAllowed true for \"..(optionName or \"nil\"), 2)\n\t\t\tif not scanId then--Accepts cid and guid\n\t\t\t\terror(\"DBM:ScanForMobs calld without scanId\")\n\t\t\t\treturn\n\t\t\tend\n\t\t\t--Initialize icon method variables for event handlers\n\t\t\tscansActive = scansActive + 1\n\t\t\tif not addsIcon[scanId] then addsIcon[scanId] = mobIcon or 8 end\n\t\t\tif not addsIconSet[scanId] then addsIconSet[scanId] = 0 end\n\t\t\tif not iconVariables[scanId] then iconVariables[scanId] = {} end\n\t\t\ticonVariables[scanId].iconSetMethod = iconSetMethod or 0--Set IconSetMethod -- 0: Descending / 1:Ascending / 2: Force Set / 9:Force Stop\n\t\t\ticonVariables[scanId].maxIcon = maxIcon or 8 --We only have 8 icons.\n\t\t\ticonVariables[scanId].allowFriendly = allowFriendly and true or false\n\t\t\ticonVariables[scanId].skipMarked = skipMarked and true or false\n\t\t\ticonVariables[scanId].wipeGUID = wipeGUID and true or false\n\t\t\tif not scanExpires[scanId] then\n\t\t\t\tscanExpires[scanId] = GetTime() + (scanningTime or 8)\n\t\t\t\tDBM:Schedule((scanningTime or 8)+2, expireScan, scanId, iconVariables[scanId].wipeGUID)\n\t\t\tend\n\t\t\tif scanTable and type(scanTable) == \"table\" then\n\t\t\t\ticonVariables[scanId].scanTable = scanTable\n\t\t\tend\n\t\t\tif (iconSetMethod or 0) == 9 then--Force stop scanning\n\t\t\t\tDBM:Unschedule(expireScan, scanId)\n\t\t\t\texpireScan(scanId, iconVariables[scanId].wipeGUID)\n\t\t\t\treturn\n\t\t\tend\n\t\t\t--Do initial scan now to see if unit we're scaning for already exists (ie they wouldn't fire nameplate added or IEEU for example.\n\t\t\t--Caveat, if all expected units are found before it finishes going over mobUids table, it'll still finish goingg through table\n\t\t\tfor _, unitId in ipairs(mobUids) do\n\t\t\t\texecuteMarking(scanId, unitId)\n\t\t\tend\n\t\t\t--Hopefully we found all units with initial scan and scanExpires has already been emptied in the executeMarking calls\n\t\t\t--But if not, we Register listeners to watch for the units we seek to appear\n\t\t\tif not eventsRegistered and scansActive > 0 then\n\t\t\t\teventsRegistered = true\n\t\t\t\tself:RegisterShortTermEvents(\"UPDATE_MOUSEOVER_UNIT\", \"UNIT_TARGET_UNFILTERED\", \"INSTANCE_ENCOUNTER_ENGAGE_UNIT\")\n\t\t\t\tDBM:Debug(\"Target events Registered\", 2)\n\t\t\tend\n\t\telse\n\t\t\tDBM:Debug(\"Not elected to set icons for \"..(optionName or \"nil\"), 2)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Core/modules/MinimapButton.lua",
    "content": "local _, private = ...\n\nlocal L = DBM_CORE_L\n\nlocal LibStub = _G[\"LibStub\"]\n\nif not LibStub(\"LibDataBroker-1.1\", true) or not LibStub(\"LibDBIcon-1.0\") then\n\tfunction DBM:ToggleMinimapButton() end -- NOOP\n\treturn\nend\n\nlocal dataBroker = LibStub(\"LibDataBroker-1.1\"):NewDataObject(\"DBM\", {\n\ttype\t= \"launcher\",\n\tlabel\t= \"DBM\",\n\ticon\t= \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\dbm_airhorn\" -- old icon: \"Interface\\\\Icons\\\\INV_Helmet_87\"\n})\nprivate.dataBroker = dataBroker\n\nfunction dataBroker.OnClick(self, button) -- self, button\n\tif IsShiftKeyDown() then return end\n\tif IsAltKeyDown() and button == \"RightButton\" then\n\t\tDBM.Options.SilentMode = DBM.Options.SilentMode == false and true or false\n\t\tDBM:AddMsg(L.SILENTMODE_IS .. (DBM.Options.SilentMode and \"ON\" or \"OFF\"))\n\telse\n\t\tDBM:LoadGUI()\n\tend\nend\n\nfunction dataBroker.OnTooltipShow(GameTooltip)\n\tGameTooltip:SetText(L.MINIMAP_TOOLTIP_HEADER, 1, 1, 1)\n\tGameTooltip:AddLine((\"%s (%s)\"):format(DBM.DisplayVersion, DBM:ShowRealDate(DBM.Revision)), NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1)\n\tGameTooltip:AddLine(\" \")\n\tGameTooltip:AddLine(L.MINIMAP_TOOLTIP_FOOTER, RAID_CLASS_COLORS.MAGE.r, RAID_CLASS_COLORS.MAGE.g, RAID_CLASS_COLORS.MAGE.b, 1)\n\tGameTooltip:AddLine(L.LDB_TOOLTIP_HELP1, RAID_CLASS_COLORS.MAGE.r, RAID_CLASS_COLORS.MAGE.g, RAID_CLASS_COLORS.MAGE.b)\n\tGameTooltip:AddLine(L.LDB_TOOLTIP_HELP2, RAID_CLASS_COLORS.MAGE.r, RAID_CLASS_COLORS.MAGE.g, RAID_CLASS_COLORS.MAGE.b)\nend\n\ndo\n\tlocal LibDBIcon = LibStub(\"LibDBIcon-1.0\")\n\n\tfunction DBM:ToggleMinimapButton()\n\t\tDBM_MinimapIcon.hide = not DBM_MinimapIcon.hide\n\t\tif DBM_MinimapIcon.hide then\n\t\t\tLibDBIcon:Hide(\"DBM\")\n\t\telse\n\t\t\tLibDBIcon:Show(\"DBM\")\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Core/modules/Modules.lua",
    "content": "local _, private = ...\n\nlocal tinsert, twipe = table.insert, table.wipe\n\n---------------\n-- Prototype --\n---------------\nlocal modulePrototype = {}\nlocal registeredUnitEvents = {}\n\nfunction modulePrototype:RegisterEvents(...)\n\tlocal function HandleEvent(_, event, ...)\n\t\tlocal handler = self[event]\n\t\tif handler then\n\t\t\thandler(self, ...)\n\t\tend\n\tend\n\n\tfor _, event in ipairs({...}) do\n\t\tif event:sub(0, 5) == \"UNIT_\" then\n\t\t\tlocal eventData = {strsplit(\" \", event)}\n\t\t\tif eventData[1]:sub(-11) == \"_UNFILTERED\" then\n\t\t\t\tself.frame:RegisterEvent(eventData[1]:sub(0, -12))\n\t\t\telse\n\t\t\t\tif #eventData < 2 then\n\t\t\t\t\teventData = {eventData[1], \"boss1\", \"boss2\", \"boss3\", \"boss4\", \"boss5\", \"target\"}\n\t\t\t\t\ttinsert(eventData, \"focus\")\n\t\t\t\tend\n\t\t\t\tfor i = 2, #eventData do\n\t\t\t\t\tlocal unitId = eventData[i]\n\t\t\t\t\tlocal frame = self.unitFrames[unitId]\n\t\t\t\t\tif not frame then\n\t\t\t\t\t\tframe = CreateFrame(\"Frame\")\n\t\t\t\t\t\tif unitId == \"mouseover\" then\n\t\t\t\t\t\t\tframe:SetScript(\"OnEvent\", function(_, event, _, ...)\n\t\t\t\t\t\t\t\tHandleEvent(nil, event, \"mouseover\", ...)\n\t\t\t\t\t\t\tend)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tframe:SetScript(\"OnEvent\", HandleEvent)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tself.unitFrames[unitId] = frame\n\t\t\t\t\tend\n\t\t\t\t\tregisteredUnitEvents = registeredUnitEvents or {}\n\t\t\t\t\tregisteredUnitEvents[eventData[1]] = unitId\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\tself.frame:RegisterEvent(event)\n\t\tend\n\tend\nend\n\nfunction modulePrototype:RegisterShortTermEvents(...)\n\tself:RegisterEvents(...)\n\tfor _, event in ipairs({...}) do\n\t\ttinsert(self.shortTermEvents, event)\n\tend\nend\n\nfunction modulePrototype:UnregisterShortTermEvents()\n\tfor _, event in ipairs(self.shortTermEvents) do\n\t\tif event:sub(0, 5) == \"UNIT_\" and event:sub(-11) ~= \"_UNFILTERED\" then\n\t\t\tlocal eventData = {strsplit(\" \", event)}\n\t\t\tif #eventData < 2 then\n\t\t\t\teventData = {eventData[1], \"boss1\", \"boss2\", \"boss3\", \"boss4\", \"boss5\", \"target\"}\n\t\t\t\ttinsert(eventData, \"focus\")\n\t\t\tend\n\t\t\tlocal eventName = eventData[1]\n\t\t\tfor i = 2, #eventData do\n\t\t\t\tif self.unitFrames[eventData[i]] then\n\t\t\t\t\tself.unitFrames[eventData[i]]:UnregisterEvent(eventName)\n\t\t\t\tend\n\t\t\tend\n\t\telseif event:sub(-11) == \"_UNFILTERED\" then\n\t\t\tself.frame:UnregisterEvent(event:sub(0, -12))\n\t\telse\n\t\t\tself.frame:UnregisterEvent(event)\n\t\tend\n\tend\n\ttwipe(self.shortTermEvents)\nend\n\n-------------\n-- Modules --\n-------------\nlocal modules = {}\n\nfunction private:NewModule(name)\n\tif modules[name] then\n\t\terror(\"DBM:NewModule(): Module names must be unique\", 2)\n\tend\n\tlocal frame = CreateFrame(\"Frame\", \"DBM\" .. name)\n\tlocal obj = setmetatable({\n\t\tframe = frame,\n\t\tunitFrames = {},\n\t\tshortTermEvents = {}\n\t}, {\n\t\t__index = modulePrototype\n\t})\n\tframe:SetScript(\"OnEvent\", function(_, event, ...)\n\t\tif event:sub(0, 5) == \"UNIT_\" and event ~= \"UNIT_DIED\" and event ~= \"UNIT_DESTROYED\" then\n\t\t\t-- UNIT_* events that come from mainFrame are _UNFILTERED variants and need their suffix\n\t\t\tevent = event .. \"_UNFILTERED\"\n\t\tend\n\t\tlocal handler = obj[event]\n\t\tif handler then\n\t\t\thandler(obj, ...)\n\t\tend\n\tend)\n\tmodules[name] = obj\n\treturn obj\nend\n\nfunction private:GetModule(name)\n\treturn modules[name]\nend\n\n--Needed in certain cases where we need to initialize module stuff after DBM Core loads\nfunction private:OnModuleLoad()\n\tfor _, mod in pairs(modules) do\n\t\tif mod.OnModuleLoad then\n\t\t\tmod:OnModuleLoad()\n\t\tend\n\tend\nend\n\n--As more and more of DBM core gets modulized, it'd be a large waste of memory to store each and every modules tables in private.\n--Therefor, modules tables should be localized and use this method (which is called in EndCombat in DBM Core)\n--This will wipe module tables that can't wipe themselves when their functions get terminated early\nfunction private:ClearModuleTasks()\n\tfor _, mod in pairs(modules) do\n\t\tif mod.OnModuleEnd then\n\t\t\tmod:OnModuleEnd()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Core/modules/Notes.lua",
    "content": "local _, private = ...\n\nlocal L = DBM_CORE_L\n\nlocal IsInGroup = private.IsInGroup\nlocal SendAddonMessage = SendAddonMessage\n\nlocal frame, fontstring, editBox, button3\n\nlocal function CreateOurFrame()\n\tframe = CreateFrame(\"Frame\", \"DBMNotesEditor\", UIParent)\n\tframe:SetFrameStrata(\"FULLSCREEN_DIALOG\") -- yes, this isn't a fullscreen dialog, but I want it to be in front of other DIALOG frames (like DBM GUI which might open this frame...)\n\tframe:SetWidth(430)\n\tframe:SetHeight(140)\n\tframe:SetPoint(\"TOP\", 0, -230)\n\tframe.backdropInfo = {\n\t\tbgFile\t\t= \"Interface\\\\DialogFrame\\\\UI-DialogBox-Background\", -- 131071\n\t\tedgeFile\t= \"Interface\\\\DialogFrame\\\\UI-DialogBox-Border\", -- 131072\n\t\ttile\t\t= true,\n\t\ttileSize\t= 32,\n\t\tedgeSize\t= 32,\n\t\tinsets\t\t= { left = 11, right = 12, top = 12, bottom = 11 }\n\t}\n\tframe:SetBackdrop(frame.backdropInfo)\n\tfontstring = frame:CreateFontString(nil, \"ARTWORK\", \"GameFontNormal\")\n\tfontstring:SetWidth(410)\n\tfontstring:SetHeight(0)\n\tfontstring:SetPoint(\"TOP\", 0, -16)\n\teditBox = CreateFrame(\"EditBox\", nil, frame)\n\tdo\n\t\tlocal editBoxLeft = editBox:CreateTexture(nil, \"BACKGROUND\")\n\t\teditBoxLeft:SetTexture(\"Interface\\\\ChatFrame\\\\UI-ChatInputBorder-Left\") -- 130959\n\t\teditBoxLeft:SetHeight(32)\n\t\teditBoxLeft:SetWidth(32)\n\t\teditBoxLeft:SetPoint(\"LEFT\", -14, 0)\n\t\teditBoxLeft:SetTexCoord(0, 0.125, 0, 1)\n\t\tlocal editBoxRight = editBox:CreateTexture(nil, \"BACKGROUND\")\n\t\teditBoxRight:SetTexture(\"Interface\\\\ChatFrame\\\\UI-ChatInputBorder-Right\") -- 130960\n\t\teditBoxRight:SetHeight(32)\n\t\teditBoxRight:SetWidth(32)\n\t\teditBoxRight:SetPoint(\"RIGHT\", 6, 0)\n\t\teditBoxRight:SetTexCoord(0.875, 1, 0, 1)\n\t\tlocal editBoxMiddle = editBox:CreateTexture(nil, \"BACKGROUND\")\n\t\teditBoxMiddle:SetTexture(\"Interface\\\\ChatFrame\\\\UI-ChatInputBorder-Right\") -- 130960\n\t\teditBoxMiddle:SetHeight(32)\n\t\teditBoxMiddle:SetWidth(1)\n\t\teditBoxMiddle:SetPoint(\"LEFT\", editBoxLeft, \"RIGHT\")\n\t\teditBoxMiddle:SetPoint(\"RIGHT\", editBoxRight, \"LEFT\")\n\t\teditBoxMiddle:SetTexCoord(0, 0.9375, 0, 1)\n\tend\n\teditBox:SetHeight(32)\n\teditBox:SetWidth(250)\n\teditBox:SetPoint(\"TOP\", fontstring, \"BOTTOM\", 0, -4)\n\teditBox:SetFontObject(\"GameFontHighlight\")\n\teditBox:SetTextInsets(0, 0, 0, 1)\n\teditBox:SetFocus()\n\teditBox:SetText(\"\")\n\tlocal fontstringFooter = frame:CreateFontString(nil, \"ARTWORK\", \"GameFontNormal\")\n\tfontstringFooter:SetWidth(410)\n\tfontstringFooter:SetHeight(0)\n\tfontstringFooter:SetPoint(\"TOP\", editBox, \"BOTTOM\", 0, 0)\n\tfontstringFooter:SetText(L.NOTEFOOTER)\n\tlocal button = CreateFrame(\"Button\", nil, frame)\n\tbutton:SetHeight(24)\n\tbutton:SetWidth(75)\n\tbutton:SetPoint(\"BOTTOM\", 80, 13)\n\tbutton:SetNormalFontObject(\"GameFontNormal\")\n\tbutton:SetHighlightFontObject(\"GameFontHighlight\")\n\tbutton:SetNormalTexture(button:CreateTexture(nil, nil, \"UIPanelButtonUpTexture\"))\n\tbutton:SetPushedTexture(button:CreateTexture(nil, nil, \"UIPanelButtonDownTexture\"))\n\tbutton:SetHighlightTexture(button:CreateTexture(nil, nil, \"UIPanelButtonHighlightTexture\"))\n\tbutton:SetText(OKAY)\n\tbutton:SetScript(\"OnClick\", function(self)\n\t\tframe.mod.Options[frame.modvar .. \"SWNote\"] = editBox:GetText() or \"\"\n\t\tframe.mod = nil\n\t\tframe.modvar = nil\n\t\tframe.abilityName = nil\n\t\tframe:Hide()\n\tend)\n\tlocal button2 = CreateFrame(\"Button\", nil, frame)\n\tbutton2:SetHeight(24)\n\tbutton2:SetWidth(75)\n\tbutton2:SetPoint(\"BOTTOM\", 0, 13)\n\tbutton2:SetNormalFontObject(\"GameFontNormal\")\n\tbutton2:SetHighlightFontObject(\"GameFontHighlight\")\n\tbutton2:SetNormalTexture(button2:CreateTexture(nil, nil, \"UIPanelButtonUpTexture\"))\n\tbutton2:SetPushedTexture(button2:CreateTexture(nil, nil, \"UIPanelButtonDownTexture\"))\n\tbutton2:SetHighlightTexture(button2:CreateTexture(nil, nil, \"UIPanelButtonHighlightTexture\"))\n\tbutton2:SetText(CANCEL)\n\tbutton2:SetScript(\"OnClick\", function(self)\n\t\tframe.mod = nil\n\t\tframe.modvar = nil\n\t\tframe.abilityName = nil\n\t\tframe:Hide()\n\tend)\n\tbutton3 = CreateFrame(\"Button\", nil, frame)\n\tbutton3:SetHeight(24)\n\tbutton3:SetWidth(75)\n\tbutton3:SetPoint(\"BOTTOM\", -80, 13)\n\tbutton3:SetNormalFontObject(\"GameFontNormal\")\n\tbutton3:SetHighlightFontObject(\"GameFontHighlight\")\n\tbutton3:SetNormalTexture(button3:CreateTexture(nil, nil, \"UIPanelButtonUpTexture\"))\n\tbutton3:SetPushedTexture(button3:CreateTexture(nil, nil, \"UIPanelButtonDownTexture\"))\n\tbutton3:SetHighlightTexture(button3:CreateTexture(nil, nil, \"UIPanelButtonHighlightTexture\"))\n\tbutton3:SetText(SHARE_QUEST_ABBREV)\n\tbutton3:SetScript(\"OnClick\", function(self)\n\t\tlocal syncText = editBox:GetText() or \"\"\n\t\tif syncText == \"\" then\n\t\t\tDBM:AddMsg(L.NOTESHAREERRORBLANK)\n\t\telseif IsInGroup(2) and IsInInstance() then--For BGs, LFR and LFG (we also check IsInInstance() so if you're in queue but fighting something outside like a world boss, it'll sync in \"RAID\" instead)\n\t\t\tDBM:AddMsg(L.NOTESHAREERRORGROUPFINDER)\n\t\telse\n\t\t\tlocal msg = frame.mod.id..\"\\t\"..frame.modvar..\"\\t\"..syncText..\"\\t\"..frame.abilityName\n\t\t\tif GetNumRaidMembers() > 0 then\n\t\t\t\tSendAddonMessage(private.DBMPrefix .. \"-NS\", msg, \"RAID\")\n\t\t\t\tDBM:AddMsg(L.NOTESHARED)\n\t\t\telseif GetNumPartyMembers() > 0 then\n\t\t\t\tSendAddonMessage(private.DBMPrefix .. \"-NS\", msg, \"PARTY\")\n\t\t\t\tDBM:AddMsg(L.NOTESHARED)\n\t\t\telse--Solo\n\t\t\t\tDBM:AddMsg(L.NOTESHAREERRORSOLO)\n\t\t\tend\n\t\tend\n\tend)\nend\n\nfunction DBM:ShowNoteEditor(mod, modvar, abilityName, syncText, sender)\n\tif not frame then\n\t\tCreateOurFrame()\n\telse\n\t\tif frame:IsShown() and syncText then\n\t\t\tself:AddMsg(L.NOTESHAREERRORALREADYOPEN)\n\t\t\treturn\n\t\tend\n\tend\n\tframe:Show()\n\tframe.mod = mod\n\tframe.modvar = modvar\n\tframe.abilityName = abilityName\n\tif syncText then\n\t\tbutton3:Hide()--Don't show share button in shared notes\n\t\tfontstring:SetText(L.NOTESHAREDHEADER:format(sender, abilityName))\n\t\teditBox:SetText(syncText)\n\telse\n\t\tbutton3:Show()\n\t\tfontstring:SetText(L.NOTEHEADER:format(abilityName))\n\t\tif type(mod.Options[modvar .. \"SWNote\"]) == \"string\" then\n\t\t\teditBox:SetText(mod.Options[modvar .. \"SWNote\"])\n\t\telse\n\t\t\teditBox:SetText(\"\")\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Core/modules/Scheduler.lua",
    "content": "local _, private = ...\n\nlocal twipe, tremove = table.wipe, table.remove\nlocal floor = math.floor\nlocal GetTime = GetTime\nlocal pairs, next = pairs, next\nlocal LastInstanceMapID, LastInstanceZoneName = -1, \"\"\n\nlocal schedulerFrame = CreateFrame(\"Frame\", \"DBMScheduler\")\nschedulerFrame:Hide()\n\nlocal module = private:NewModule(\"DBMScheduler\")\n\n--------------------------\n--  OnUpdate/Scheduler  --\n--------------------------\n\n-- stack that stores a few tables (up to 8) which will be recycled\nlocal popCachedTable, pushCachedTable\nlocal numChachedTables = 0\ndo\n\tlocal tableCache\n\n\t-- gets a table from the stack, it will then be recycled.\n\tfunction popCachedTable()\n\t\tlocal t = tableCache\n\t\tif t then\n\t\t\ttableCache = t.next\n\t\t\tnumChachedTables = numChachedTables - 1\n\t\tend\n\t\treturn t\n\tend\n\n\t-- tries to push a table on the stack\n\t-- only tables with <= 4 array entries are accepted as cached tables are only used for tasks with few arguments as we don't want to have big arrays wasting our precious memory space doing nothing...\n\t-- also, the maximum number of cached tables is limited to 8 as DBM rarely has more than eight scheduled tasks with less than 4 arguments at the same time\n\t-- this is just to re-use all the tables of the small tasks that are scheduled all the time (like the wipe detection)\n\t-- note that the cache does not use weak references anywhere for performance reasons, so a cached table will never be deleted by the garbage collector\n\tfunction pushCachedTable(t)\n\t\tif numChachedTables < 8 and #t <= 4 then\n\t\t\ttwipe(t)\n\t\t\tt.next = tableCache\n\t\t\ttableCache = t\n\t\t\tnumChachedTables = numChachedTables + 1\n\t\tend\n\tend\nend\n\n-- priority queue (min-heap) that stores all scheduled tasks.\n-- insert: O(log n)\n-- deleteMin: O(log n)\n-- getMin: O(1)\n-- removeAllMatching: O(n)\nlocal insert, removeAllMatching, getMin, deleteMin\ndo\n\tlocal heap = {}\n\tlocal firstFree = 1\n\n\t-- gets the next task\n\tfunction getMin()\n\t\treturn heap[1]\n\tend\n\n\t-- restores the heap invariant by moving an item up\n\tlocal function siftUp(n)\n\t\tlocal parent = floor(n / 2)\n\t\twhile n > 1 and heap[parent].time > heap[n].time do -- move the element up until the heap invariant is restored, meaning the element is at the top or the element's parent is <= the element\n\t\t\theap[n], heap[parent] = heap[parent], heap[n] -- swap the element with its parent\n\t\t\tn = parent\n\t\t\tparent = floor(n / 2)\n\t\tend\n\tend\n\n\t-- restores the heap invariant by moving an item down\n\tlocal function siftDown(n)\n\t\tlocal m -- position of the smaller child\n\t\twhile 2 * n < firstFree do -- #children >= 1\n\t\t\t-- swap the element with its smaller child\n\t\t\tif 2 * n + 1 == firstFree then -- n does not have a right child --> it only has a left child as #children >= 1\n\t\t\t\tm = 2 * n -- left child\n\t\t\telseif heap[2 * n].time < heap[2 * n + 1].time then -- #children = 2 and left child < right child\n\t\t\t\tm = 2 * n -- left child\n\t\t\telse -- #children = 2 and right child is smaller than the left one\n\t\t\t\tm = 2 * n + 1 -- right\n\t\t\tend\n\t\t\tif heap[n].time <= heap[m].time then -- n is <= its smallest child --> heap invariant restored\n\t\t\t\treturn\n\t\t\tend\n\t\t\theap[n], heap[m] = heap[m], heap[n]\n\t\t\tn = m\n\t\tend\n\tend\n\n\t-- inserts a new element into the heap\n\tfunction insert(ele)\n\t\theap[firstFree] = ele\n\t\tsiftUp(firstFree)\n\t\tfirstFree = firstFree + 1\n\tend\n\n\t-- deletes the min element\n\tfunction deleteMin()\n\t\tlocal min = heap[1]\n\t\tfirstFree = firstFree - 1\n\t\theap[1] = heap[firstFree]\n\t\theap[firstFree] = nil\n\t\tsiftDown(1)\n\t\treturn min\n\tend\n\n\t-- removes multiple scheduled tasks from the heap\n\t-- note that this function is comparatively slow by design as it has to check all tasks and allows partial matches\n\tfunction removeAllMatching(f, mod, ...)\n\t\t-- remove all elements that match the signature, this destroyes the heap and leaves a normal array\n\t\tlocal v, match\n\t\tlocal foundMatch = false\n\t\tfor i = #heap, 1, -1 do -- iterate backwards over the array to allow usage of table.remove\n\t\t\tv = heap[i]\n\t\t\tif (not f or v.func == f) and (not mod or v.mod == mod) then\n\t\t\t\tmatch = true\n\t\t\t\tfor j = 1, select(\"#\", ...) do\n\t\t\t\t\tif select(j, ...) ~= v[j] then\n\t\t\t\t\t\tmatch = false\n\t\t\t\t\t\tbreak\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tif match then\n\t\t\t\t\ttremove(heap, i)\n\t\t\t\t\tfirstFree = firstFree - 1\n\t\t\t\t\tfoundMatch = true\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\t-- rebuild the heap from the array in O(n)\n\t\tif foundMatch then\n\t\t\tfor i = floor((firstFree - 1) / 2), 1, -1 do\n\t\t\t\tsiftDown(i)\n\t\t\tend\n\t\tend\n\tend\nend\n\nlocal wrappers = {}\nlocal function range(max, cur, ...)\n\tcur = cur or 1\n\tif cur > max then\n\t\treturn ...\n\tend\n\treturn cur, range(max, cur + 1, select(2, ...))\nend\nlocal function getWrapper(n)\n\twrappers[n] = wrappers[n] or loadstring(([[\n\t\treturn function(func, tbl)\n\t\t\treturn func(]] .. (\"tbl[%s], \"):rep(n):sub(0, -3) .. [[)\n\t\tend\n\t]]):format(range(n)))()\n\treturn wrappers[n]\nend\n\nlocal nextModSyncSpamUpdate = 0\n--mainFrame:SetScript(\"OnUpdate\", function(self, elapsed)\nlocal function onUpdate(self, elapsed)\n\tlocal time = GetTime()\n\n\t-- execute scheduled tasks\n\tlocal nextTask = getMin()\n\twhile nextTask and nextTask.func and nextTask.time <= time do\n\t\tdeleteMin()\n\t\tlocal n = nextTask.n\n\t\tif n == #nextTask then\n\t\t\tnextTask.func(unpack(nextTask))\n\t\telse\n\t\t\t-- too many nil values (or a trailing nil)\n\t\t\t-- this is bad because unpack will not work properly\n\t\t\t-- TODO: is there a better solution?\n\t\t\tgetWrapper(n)(nextTask.func, nextTask)\n\t\tend\n\t\tpushCachedTable(nextTask)\n\t\tnextTask = getMin()\n\tend\n\n\t-- execute OnUpdate handlers of all modules\n\tlocal foundModFunctions = 0\n\tfor i, v in pairs(private.updateFunctions) do\n\t\tfoundModFunctions = foundModFunctions + 1\n\t\tif i.Options.Enabled and (not i.zones or i.zones[LastInstanceMapID] or i.zones[LastInstanceZoneName]) then\n\t\t\ti.elapsed = (i.elapsed or 0) + elapsed\n\t\t\tif i.elapsed >= (i.updateInterval or 0) then\n\t\t\t\tv(i, i.elapsed)\n\t\t\t\ti.elapsed = 0\n\t\t\tend\n\t\tend\n\tend\n\n\t-- clean up sync spam timers and auto respond spam blockers\n\tif time > nextModSyncSpamUpdate then\n\t\tnextModSyncSpamUpdate = time + 20\n\t\t-- TODO: optimize this; using next(t, k) all the time on nearly empty hash tables is not a good idea...doesn't really matter here as modSyncSpam only very rarely contains more than 4 entries...\n\t\t-- we now do this just every 20 seconds since the earlier assumption about modSyncSpam isn't true any longer\n\t\t-- note that not removing entries at all would be just a small memory leak and not a problem (the sync functions themselves check the timestamp)\n\t\tlocal k, v = next(private.modSyncSpam, nil)\n\t\tif v and (time - v > 8) then\n\t\t\tprivate.modSyncSpam[k] = nil\n\t\tend\n\tend\n\tif not nextTask and foundModFunctions == 0 then--Nothing left, stop scheduler\n\t\tschedulerFrame:SetScript(\"OnUpdate\", nil)\n\t\tschedulerFrame:Hide()\n\tend\nend\n\nfunction module:StartScheduler()\n\tif not schedulerFrame:IsShown() then\n\t\tschedulerFrame:Show()\n\t\tschedulerFrame:SetScript(\"OnUpdate\", onUpdate)\n\tend\nend\n\n--For updating zone cache locally\n--without needing to monitor for changes in onupdate functions or registering zone change events\nfunction module:UpdateZone()\n\tLastInstanceMapID = DBM and DBM:GetCurrentArea() or -1\n\tLastInstanceZoneName = DBM and DBM:GetCurrentAreaName() or \"\"\nend\n\nlocal function schedule(t, f, mod, ...)\n\tif type(f) ~= \"function\" then\n\t\terror(\"usage: schedule(time, func, [mod, args...])\", 2)\n\tend\n\tmodule:StartScheduler()\n\tlocal v\n\tif numChachedTables > 0 and select(\"#\", ...) <= 4 then -- a cached table is available and all arguments fit into an array with four slots\n\t\tv = popCachedTable()\n\t\tv.time = GetTime() + t\n\t\tv.func = f\n\t\tv.mod = mod\n\t\tv.n = select(\"#\", ...)\n\t\tfor i = 1, v.n do\n\t\t\tv[i] = select(i, ...)\n\t\tend\n\t\t-- clear slots if necessary\n\t\tfor i = v.n + 1, 4 do\n\t\t\tv[i] = nil\n\t\tend\n\telse -- create a new table\n\t\tv = {time = GetTime() + t, func = f, mod = mod, n = select(\"#\", ...), ...}\n\tend\n\tinsert(v)\nend\n\n--Boss mod prototype usage methods (for announces countdowns and yell scheduling\nfunction module:ScheduleCountdown(time, numAnnounces, func, mod, prototype, ...)\n\ttime = time or 5\n\tnumAnnounces = numAnnounces or 3\n\tfor i = 1, numAnnounces do\n\t\t--In event time is < numbmer of announces (ie 2 second time, with 3 announces)\n\t\tlocal validTime = time - i\n\t\tif validTime >= 1 then\n\t\t\tschedule(validTime, func, mod, prototype, i, ...)\n\t\tend\n\tend\nend\n\nlocal function unschedule(f, mod, ...)\n\tif not f and not mod then\n\t\t--Dangerous to use, should only ever happen with a force disable\n\t\tremoveAllMatching()\n\tend\n\treturn removeAllMatching(f, mod, ...)\nend\n\nfunction module:Schedule(t, f, mod, ...)\n\tif type(f) ~= \"function\" then\n\t\terror(\"usage: DBM:Schedule(time, func, [args...])\", 2)\n\tend\n\treturn schedule(t, f, mod, ...)\nend\n\nfunction module:Unschedule(f, mod, ...)\n\treturn unschedule(f, mod, ...)\nend\n"
  },
  {
    "path": "DBM-Core/modules/Sounds.lua",
    "content": "local tinsert, unpack = table.insert, unpack\n\nlocal CL = DBM_COMMON_L\n\ndo\n\tlocal counts = {\n\t\t{\ttext\t= \"Corsica\",value\t= \"Corsica\", path = \"Interface\\\\AddOns\\\\DBM-Core\\\\Sounds\\\\Corsica\\\\\", max = 10},\n\t\t{\ttext\t= \"Koltrane\",value\t= \"Kolt\", path = \"Interface\\\\AddOns\\\\DBM-Core\\\\Sounds\\\\Kolt\\\\\", max = 10},\n\t\t{\ttext\t= \"Smooth\",value\t= \"Smooth\", path = \"Interface\\\\AddOns\\\\DBM-Core\\\\Sounds\\\\Smooth\\\\\", max = 10},\n\t\t{\ttext\t= \"Smooth (Reverb)\",value\t= \"SmoothR\", path = \"Interface\\\\AddOns\\\\DBM-Core\\\\Sounds\\\\SmoothReverb\\\\\", max = 10},\n\t\t{\ttext\t= \"Pewsey\",value\t= \"Pewsey\", path = \"Interface\\\\AddOns\\\\DBM-Core\\\\Sounds\\\\Pewsey\\\\\", max = 10},\n\t\t{\ttext\t= \"Bear (Child)\",value = \"Bear\", path = \"Interface\\\\AddOns\\\\DBM-Core\\\\Sounds\\\\Bear\\\\\", max = 10},\n\t\t{\ttext\t= \"Moshne\",\tvalue\t= \"Mosh\", path = \"Interface\\\\AddOns\\\\DBM-Core\\\\Sounds\\\\Mosh\\\\\", max = 5},\n\t\t{\ttext\t= \"Anshlun (ptBR)\",value = \"Anshlun\", path = \"Interface\\\\AddOns\\\\DBM-Core\\\\Sounds\\\\Anshlun\\\\\", max = 10},\n\t\t{\ttext\t= \"Neryssa (ptBR)\",value = \"Neryssa\", path = \"Interface\\\\AddOns\\\\DBM-Core\\\\Sounds\\\\Neryssa\\\\\", max = 10},\n\t}\n\tlocal hasCached = false\n\tlocal cachedTable\n\tDBM.Counts = counts -- @Deprecated: Use new utility functions\n\n\tfunction DBM:GetCountSounds()\n\t\tif not hasCached then\n\t\t\tcachedTable = {unpack(counts)}\n\t\tend\n\t\treturn cachedTable\n\tend\n\n\tfunction DBM:AddCountSound(text, value, path, max)\n\t\ttinsert(counts, {\n\t\t\ttext\t= text,\n\t\t\tvalue\t= value or text,\n\t\t\tpath\t= path,\n\t\t\tmax\t\t= max or 10\n\t\t})\n\t\thasCached = false\n\tend\nend\n\ndo\n\tlocal victory = {\n\t\t{text = CL.NONE,value  = \"None\"},\n\t\t{text = CL.RANDOM,value  = \"Random\"},\n\t\t{text = \"Blakbyrd: FF Fanfare\",value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\Victory\\\\bbvictory.ogg\", length=4},\n\t\t{text = \"SMG: FF Fanfare\",value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\Victory\\\\SmoothMcGroove_Fanfare.ogg\", length=4},\n\t}\n\tlocal hasCached = false\n\tlocal cachedTable\n\tDBM.Victory = victory -- @Deprecated: Use new utility functions\n\n\tfunction DBM:GetVictorySounds()\n\t\tif not hasCached then\n\t\t\tcachedTable = {unpack(victory)}\n\t\tend\n\t\treturn cachedTable\n\tend\n\n\tfunction DBM:AddVictorySound(text, value, length)\n\t\ttinsert(victory, {\n\t\t\ttext\t= text,\n\t\t\tvalue\t= value,\n\t\t\tlength\t= length\n\t\t})\n\t\thasCached = false\n\tend\nend\n\ndo\n\tlocal defeat = {\n\t\t{text = CL.NONE,value  = \"None\"},\n\t\t{text = CL.RANDOM,value  = \"Random\"},\n\t\t{text = \"Alizabal: Incompetent Raiders\",value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\VO_BH_ALIZABAL_RESET_01.ogg\", length=4},\n\t\t{text = \"Bwonsamdi: Over Your Head\",value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\VO_801_Bwonsamdi_35_M.ogg\", length=4},\n\t\t{text = \"Bwonsamdi: Pour Little Thing\",value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\VO_801_Bwonsamdi_37_M.ogg\", length=4},\n\t\t{text = \"Bwonsamdi: Impressive Death\",value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\VO_801_Bwonsamdi_38_M.ogg\", length=4},\n\t\t{text = \"Bwonsamdi: All That Armor\",value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\VO_801_Bwonsamdi_50_M.ogg\", length=4},\n\t\t{text = \"Kologarn: You Fail\",value = \"Sound\\\\Creature\\\\Kologarn\\\\UR_Kologarn_Slay02.wav\", length=4},\n\t\t{text = \"Hodir: Tragic\",value = \"Sound\\\\Creature\\\\Hodir\\\\UR_Hodir_Slay01.wav\", length=4},\n\t\t{text = \"Scrollsage Nola: Cycle\",value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\VO_801_Scrollsage_Nola_34_F.ogg\", length=4},\n\t\t{text = \"Thorim: Failures\",value = \"Sound\\\\Creature\\\\Thorim\\\\UR_Thorim_P1Wipe01.wav\", length=4},\n\t\t{text = \"Valithria: Failures\",value = \"Sound\\\\Creature\\\\ValithriaDreamwalker\\\\IC_Valithria_Berserk01.wav\", length=4},\n\t\t{text = \"Yogg-Saron: Laugh\",value = \"Sound\\\\Creature\\\\YoggSaron\\\\UR_YoggSaron_Slay01.wav\", length=4},\n\t}\n\n\tlocal hasCached = false\n\tlocal cachedTable\n\tDBM.Defeat = defeat -- @Deprecated: Use new utility functions\n\n\tfunction DBM:GetDefeatSounds()\n\t\tif not hasCached then\n\t\t\tcachedTable = {unpack(defeat)}\n\t\tend\n\t\treturn cachedTable\n\tend\n\n\tfunction DBM:AddDefeatSound(text, value, length)\n\t\ttinsert(defeat, {\n\t\t\ttext\t= text,\n\t\t\tvalue\t= value,\n\t\t\tlength\t= length\n\t\t})\n\t\thasCached = false\n\tend\nend\n\ndo\n\t-- Filtered list of media assigned to dungeon/raid background music catagory\n\tlocal dungeonMusic = {\n\t\t{text = CL.NONE,value  = \"None\"},\n\t\t{text = CL.RANDOM,value  = \"Random\"},\n\t\t{text = \"Anduin Part 1 B\",value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\MUS_70_AnduinPt1_B.mp3\", length=140},-- Soundkit: 68230\n\t\t{text = \"Nightsong\",value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\MUS_NightElves_GU01.mp3\", length=160},-- Soundkit: 71181\n\t\t{text = \"Ulduar: Titan Orchestra\",value = \"Sound\\\\Music\\\\ZoneMusic\\\\UlduarRaidInt\\\\UR_TitanOrchestraIntro.mp3\", length=102},-- Soundkit: 15873\n\t}\n\n\tlocal hasCached = false\n\tlocal cachedTable\n\tDBM.DungeonMusic = dungeonMusic -- @Deprecated: Use new utility functions\n\n\tfunction DBM:GetDungeonMusic()\n\t\tif not hasCached then\n\t\t\tcachedTable = {unpack(dungeonMusic)}\n\t\tend\n\t\treturn cachedTable\n\tend\n\n\tfunction DBM:AddDungeonMusic(text, value, length)\n\t\ttinsert(dungeonMusic, {\n\t\t\ttext\t= text,\n\t\t\tvalue\t= value,\n\t\t\tlength\t= length\n\t\t})\n\t\thasCached = false\n\tend\nend\n\ndo\n\t-- Filtered list of media assigned to boss/encounter background music catagory\n\tlocal battleMusic = {\n\t\t{text = CL.NONE,value  = \"None\"},\n\t\t{text = CL.RANDOM,value  = \"Random\"},\n\t\t{text = \"Anduin Part 2 B\",value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\MUS_70_AnduinPt2_B.mp3\", length=111},-- Soundkit: 68230\n\t\t{text = \"Bronze Jam\",value = \"Sound\\\\Music\\\\ZoneMusic\\\\IcecrownRaid\\\\IR_BronzeJam.mp3\", length=116},-- Soundkit: 118800\n\t\t{text = \"Invincible\",value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\MUS_Invincible.mp3\", length=197},-- Soundkit: 49536\n\t}\n\n\tlocal hasCached = false\n\tlocal cachedTable\n\tDBM.BattleMusic = battleMusic -- @Deprecated: Use new utility functions\n\n\tfunction DBM:GetBattleMusic()\n\t\tif not hasCached then\n\t\t\tcachedTable = {unpack(battleMusic)}\n\t\tend\n\t\treturn cachedTable\n\tend\n\n\tfunction DBM:AddBattleMusic(text, value, length)\n\t\ttinsert(battleMusic, {\n\t\t\ttext\t= text,\n\t\t\tvalue\t= value,\n\t\t\tlength\t= length\n\t\t})\n\t\thasCached = false\n\tend\nend\n\ndo\n\t-- Contains all music media, period\n\tlocal music = {\n\t\t{text = CL.NONE,value  = \"None\"},\n\t\t{text = CL.RANDOM,value  = \"Random\"},\n\t\t{text = \"Anduin Part 1 B\",value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\MUS_70_AnduinPt1_B.mp3\", length=140},-- Soundkit: 68230\n\t\t{text = \"Anduin Part 2 B\",value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\MUS_70_AnduinPt2_B.mp3\", length=111},-- Soundkit: 68230\n\t\t{text = \"Bronze Jam\",value = \"Sound\\\\Music\\\\ZoneMusic\\\\IcecrownRaid\\\\IR_BronzeJam.mp3\", length=116},-- Soundkit: 118800\n\t\t{text = \"Invincible\",value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\MUS_Invincible.mp3\", length=197},-- Soundkit: 49536\n\t\t{text = \"Nightsong\",value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\MUS_NightElves_GU01.mp3\", length=160},-- Soundkit: 71181\n\t\t{text = \"Ulduar: Titan Orchestra\",value = \"Sound\\\\Music\\\\ZoneMusic\\\\UlduarRaidInt\\\\UR_TitanOrchestraIntro.mp3\", length=102},-- Soundkit: 15873\n\t}\n\tlocal hasCached = false\n\tlocal cachedTable\n\tDBM.Music = music -- @Deprecated: Use new utility functions\n\n\tfunction DBM:GetMusic()\n\t\tif not hasCached then\n\t\t\tcachedTable = {unpack(music)}\n\t\tend\n\t\treturn cachedTable\n\tend\n\n\tfunction DBM:AddMusic(text, value, length)\n\t\ttinsert(music, {\n\t\t\ttext\t= text,\n\t\t\tvalue\t= value,\n\t\t\tlength\t= length\n\t\t})\n\t\thasCached = false\n\tend\nend\n"
  },
  {
    "path": "DBM-Core/modules/SpecRole.lua",
    "content": "local _, private = ...\nDBMExtraGlobal = {}\n\n--[[local specFlags ={\n\t[\"Tank\"] = true,\n\t[\"Dps\"] = true,\n\t[\"Healer\"] = true,\n\t[\"Melee\"] = true,--ANY melee, including tanks or healers that are 100% exempt from healer/ranged mechanics\n\t[\"MeleeDps\"] = true,\n\t[\"Physical\"] = true,\n\t[\"Ranged\"] = true,--ANY ranged, healer and dps included\n\t[\"RangedDps\"] = true,--Only ranged dps\n\t[\"ManaUser\"] = true,--Affected by things like mana drains, or mana detonation, etc\n\t[\"SpellCaster\"] = true,--Has channeled casts, can be interrupted/spell locked by roars, etc, include healers. Use CasterDps if dealing with reflect\n\t[\"CasterDps\"] = true,--Ranged dps that uses spells, relevant for spell reflect type abilities that only reflect spells but not ranged physical such as hunters\n\t[\"RaidCooldown\"] = true,\n\t[\"RemovePoison\"] = true,--from ally\n\t[\"RemoveDisease\"] = true,--from ally\n\t[\"RemoveCurse\"] = true,--from ally\n\t[\"RemoveMagic\"] = true,--from ally\n\t[\"RemoveEnrage\"] = true,--Can remove enemy enrage. returned in 8.x+!\n\t[\"MagicDispeller\"] = true,--from ENEMY, not debuffs on players. use \"Healer\" or \"RemoveMagic\" for ally magic dispels. ALL healers can do that on retail, and warlock Imps\n\t[\"ImmunityDispeller\"] = true,--Priest mass dispel or Warrior Shattering Throw (shadowlands)\n\t[\"HasInterrupt\"] = true,--Has an interrupt that is 24 seconds or less CD that is BASELINE (not a talent)\n\t[\"HasImmunity\"] = true,--Has an immunity that can prevent or remove a spell effect (not just one that reduces damage like turtle or dispursion)\n\t[\"TargetedCooldown\"] = true,--Custom: Single Target external defensive cooldown\n\t[\"WeaponDependent\"] = true--Custom: Specs that depend on weapon use\n}]]\n\nlocal specRoleTable\n\nfunction DBMExtraGlobal:rebuildSpecTable()\n\tspecRoleTable = {\n\t\t[62] = {\t--Arcane Mage\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Ranged\"] = true,\n\t\t\t[\"RangedDps\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"SpellCaster\"] = true,\n\t\t\t[\"CasterDps\"] = true,\n\t\t\t[\"MagicDispeller\"] = true,\n\t\t\t[\"HasInterrupt\"] = true,\n\t\t\t[\"HasImmunity\"] = true,\n\t\t\t[\"RemoveCurse\"] = true,\n\t\t},\n\t\t[1449] = {\t--Initial Mage (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Ranged\"] = true,\n\t\t\t[\"RangedDps\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"SpellCaster\"] = true,\n\t\t\t[\"CasterDps\"] = true,\n\t\t},\n\t\t[65] = {\t--Holy Paladin\n\t\t\t[\"Healer\"] = true,\n\t\t\t[\"Melee\"] = true, -- Holy Paladins are Melee too, for Seal of Wisdom procs\n\t\t\t[\"Ranged\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"SpellCaster\"] = true,\n\t\t\t[\"RaidCooldown\"] = true,--Devotion Aura\n\t\t\t[\"RemovePoison\"] = true,\n\t\t\t[\"RemoveDisease\"] = true,\n\t\t\t[\"RemoveMagic\"] = true,\n\t\t\t[\"HasImmunity\"] = true,\n\t\t\t[\"TargetedCooldown\"] = true,--Hand of Sacrifice (and improved Lay on Hands)\n\t\t},\n\t\t[66] = {\t--Protection Paladin\n\t\t\t[\"Tank\"] = true,\n\t\t\t[\"Melee\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t\t[\"RemovePoison\"] = true,\n\t\t\t[\"RemoveDisease\"] = true,\n\t\t\t[\"HasImmunity\"] = true,\n\t\t\t[\"TargetedCooldown\"] = true,--Hand of Sacrifice (and improved Lay on Hands)\n\t\t\t[\"WeaponDependent\"] = true,\n\t\t},\n\t\t[70] = {\t--Retribution Paladin\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Melee\"] = true,\n\t\t\t[\"MeleeDps\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t\t[\"RemovePoison\"] = true,\n\t\t\t[\"RemoveDisease\"] = true,\n\t\t\t[\"HasImmunity\"] = true,\n\t\t\t[\"TargetedCooldown\"] = true,--Hand of Sacrifice (and improved Lay on Hands)\n\t\t\t[\"WeaponDependent\"] = true,\n\t\t},\n\t\t[1451] = {\t--Initial Paladin (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress\n\t\t\t[\"Healer\"] = true,\n\t\t\t[\"Tank\"] = true,\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Melee\"] = true,\n\t\t\t[\"MeleeDps\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t\t[\"SpellCaster\"] = true,\n\t\t},\n\t\t[71] = {\t--Arms Warrior\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Melee\"] = true,\n\t\t\t[\"MeleeDps\"] = true,\n\t\t\t[\"RaidCooldown\"] = true,--Rallying Cry\n\t\t\t[\"Physical\"] = true,\n\t\t\t[\"HasInterrupt\"] = true,\n\t\t\t[\"ImmunityDispeller\"] = IsSpellKnown(64382),\n\t\t\t[\"TargetedCooldown\"] = true,--Intervene\n\t\t\t[\"WeaponDependent\"] = true,\n\t\t},\n\t\t[73] = {\t--Protection Warrior\n\t\t\t[\"Tank\"] = true,\n\t\t\t[\"Melee\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t\t[\"HasInterrupt\"] = true,\n\t\t\t[\"RaidCooldown\"] = true,--Rallying Cry\n\t\t\t[\"ImmunityDispeller\"] = IsSpellKnown(64382),\n\t\t\t[\"TargetedCooldown\"] = true,--Intervene\n\t\t},\n\t\t[1446] = {\t--Initial Warrior (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress\n\t\t\t[\"Tank\"] = true,\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Melee\"] = true,\n\t\t\t[\"MeleeDps\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t},\n\t\t[102] = {\t--Balance Druid\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Ranged\"] = true,\n\t\t\t[\"RangedDps\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"SpellCaster\"] = true,\n\t\t\t[\"CasterDps\"] = true,\n\t\t\t[\"RemoveCurse\"] = true,\n\t\t\t[\"RemovePoison\"] = true,\n\t\t},\n\t\t[103] = {\t--Feral Druid\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Melee\"] = true,\n\t\t\t[\"MeleeDps\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t\t[\"RemoveCurse\"] = true,\n\t\t\t[\"RemovePoison\"] = true,\n\t\t},\n\t\t[104] = {\t--Guardian Druid\n\t\t\t[\"Tank\"] = true,\n\t\t\t[\"Melee\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t\t[\"RemoveCurse\"] = true,\n\t\t\t[\"RemovePoison\"] = true,\n\t\t},\n\t\t[105] = {\t-- Restoration Druid\n\t\t\t[\"Healer\"] = true,\n\t\t\t[\"Ranged\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"SpellCaster\"] = true,\n\t\t\t[\"RaidCooldown\"] = true,--Tranquility\n\t\t\t[\"RemoveCurse\"] = true,\n\t\t\t[\"RemovePoison\"] = true,\n\t\t\t[\"RemoveMagic\"] = true,\n\t\t},\n\t\t[1447] = {\t-- Initial Druid (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress\n\t\t\t[\"Tank\"] = true,\n\t\t\t[\"Melee\"] = true,\n\t\t\t[\"MeleeDps\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t\t[\"Healer\"] = true,\n\t\t\t[\"Ranged\"] = true,\n\t\t\t[\"RangedDps\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"SpellCaster\"] = true,\n\t\t},\n\t\t[250] = {\t--Blood DK\n\t\t\t[\"Tank\"] = true,\n\t\t\t[\"Melee\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t\t[\"HasInterrupt\"] = true,\n\t\t\t[\"WeaponDependent\"] = true,\n\t\t},\n\t\t[251] = {\t--Frost DK\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Melee\"] = true,\n\t\t\t[\"MeleeDps\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t\t[\"HasInterrupt\"] = true,\n\t\t\t[\"WeaponDependent\"] = true,\n\t\t},\n\t\t[1455] = {\t--Initial DK (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress\n\t\t\t[\"Tank\"] = true,\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Melee\"] = true,\n\t\t\t[\"MeleeDps\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t},\n\t\t[253] = {\t--Beastmaster Hunter\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Ranged\"] = true,\n\t\t\t[\"RangedDps\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t\t[\"MagicDispeller\"] = true,\n\t\t\t[\"RemoveEnrage\"] = true,\n\t\t},\n\t\t[254] = {\t--Markmanship Hunter Hunter\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Ranged\"] = true,\n\t\t\t[\"RangedDps\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t\t[\"MagicDispeller\"] = true,\n\t\t\t[\"RemoveEnrage\"] = true,\n\t\t},\n\t\t[255] = {\t--Survival Hunter (Legion+)\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Melee\"] = true,\n\t\t\t[\"MeleeDps\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t\t[\"MagicDispeller\"] = true,\n\t\t\t[\"RemoveEnrage\"] = true,\n\t\t},\n\t\t[1448] = {\t--Initial Hunter (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Ranged\"] = true,\n\t\t\t[\"RangedDps\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t},\n\t\t[256] = {\t--Discipline Priest\n\t\t\t[\"Healer\"] = true,\n\t\t\t[\"Ranged\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"SpellCaster\"] = true,\n\t\t\t[\"CasterDps\"] = true,--Iffy. Technically yes, but this can't be used to determine eligible target for dps only debuffs\n\t\t\t[\"RaidCooldown\"] = true,--Power Word: Barrier(Discipline) / Divine Hymn (Holy)\n\t\t\t[\"RemoveDisease\"] = true,\n\t\t\t[\"RemoveMagic\"] = true,\n\t\t\t[\"MagicDispeller\"] = true,\n\t\t\t[\"ImmunityDispeller\"] = true,\n\t\t\t[\"TargetedCooldown\"] = true,--Pain Suppression (Discipline) / Guardian Spirit (Holy)\n\t\t},\n\t\t[258] = {\t--Shadow Priest\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Ranged\"] = true,\n\t\t\t[\"RangedDps\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"SpellCaster\"] = true,\n\t\t\t[\"CasterDps\"] = true,\n\t\t\t[\"MagicDispeller\"] = true,\n\t\t\t[\"ImmunityDispeller\"] = true,\n\t\t\t[\"RemoveDisease\"] = true,\n\t\t},\n\t\t[1452] = {\t--Initial Priest (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Healer\"] = true,\n\t\t\t[\"Ranged\"] = true,\n\t\t\t[\"RangedDps\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"SpellCaster\"] = true,\n\t\t\t[\"CasterDps\"] = true,\n\t\t},\n\t\t[259] = {\t--Assassination Rogue\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Melee\"] = true,\n\t\t\t[\"MeleeDps\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t\t[\"HasInterrupt\"] = true,\n\t\t\t[\"HasImmunity\"] = true,\n\t\t\t[\"WeaponDependent\"] = true,\n\t\t},\n\t\t[1453] = {\t--Initial Rogue (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Melee\"] = true,\n\t\t\t[\"MeleeDps\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t},\n\t\t[262] = {\t--Elemental Shaman\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Ranged\"] = true,\n\t\t\t[\"RangedDps\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"SpellCaster\"] = true,\n\t\t\t[\"CasterDps\"] = true,\n\t\t\t[\"RemovePoison\"] = true,\n\t\t\t[\"RemoveDisease\"] = true,\n\t\t\t[\"MagicDispeller\"] = true,\n\t\t\t[\"HasInterrupt\"] = true,\n\t\t},\n\t\t[263] = {\t--Enhancement Shaman\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Melee\"] = true,\n\t\t\t[\"MeleeDps\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"SpellCaster\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t\t[\"RemovePoison\"] = true,\n\t\t\t[\"RemoveDisease\"] = true,\n\t\t\t[\"MagicDispeller\"] = true,\n\t\t\t[\"HasInterrupt\"] = true,\n\t\t\t[\"WeaponDependent\"] = true,\n\t\t},\n\t\t[264] = {\t--Restoration Shaman\n\t\t\t[\"Healer\"] = true,\n\t\t\t[\"Ranged\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"SpellCaster\"] = true,\n\t\t\t[\"RemoveCurse\"] = true,--Cleanse Spirit (talent)\n\t\t\t[\"RemovePoison\"] = true,\n\t\t\t[\"RemoveDisease\"] = true,\n\t\t\t[\"MagicDispeller\"] = true,\n\t\t\t[\"HasInterrupt\"] = true,\n\t\t},\n\t\t[1444] = {\t--Initial Shaman (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress\n\t\t\t[\"Healer\"] = true,\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Melee\"] = true,\n\t\t\t[\"MeleeDps\"] = true,\n\t\t\t[\"Ranged\"] = true,\n\t\t\t[\"RangedDps\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"SpellCaster\"] = true,\n\t\t\t[\"Physical\"] = true,\n\t\t},\n\t\t[265] = {\t--Affliction Warlock\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Ranged\"] = true,\n\t\t\t[\"RangedDps\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"SpellCaster\"] = true,\n\t--\t\t[\"RemoveMagic\"] = true,--Singe Magic (Imp)\n\t\t\t[\"CasterDps\"] = true,\n\t\t},\n\t\t--[266] = {\t--Demonology Warlock\n\t\t--\t[\"Dps\"] = true,\n\t\t--\t[\"Ranged\"] = true,\n\t\t--\t[\"RangedDps\"] = true,\n\t\t--\t[\"ManaUser\"] = true,\n\t\t--\t[\"SpellCaster\"] = true,\n\t--\t--\t[\"RemoveMagic\"] = true,--Singe Magic (Imp)\n\t\t--\t[\"CasterDps\"] = true,\n\t\t--},\n\t\t--[267] = {\t--Destruction Warlock\n\t\t--\t[\"Dps\"] = true,\n\t\t--\t[\"Ranged\"] = true,\n\t\t--\t[\"RangedDps\"] = true,\n\t\t--\t[\"ManaUser\"] = true,\n\t\t--\t[\"SpellCaster\"] = true,\n\t--\t--\t[\"RemoveMagic\"] = true,--Singe Magic (Imp)\n\t\t--\t[\"CasterDps\"] = true,\n\t\t--},\n\t\t[1454] = {\t--Initial Warlock (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress\n\t\t\t[\"Dps\"] = true,\n\t\t\t[\"Ranged\"] = true,\n\t\t\t[\"RangedDps\"] = true,\n\t\t\t[\"ManaUser\"] = true,\n\t\t\t[\"SpellCaster\"] = true,\n\t\t\t[\"CasterDps\"] = true,\n\t\t},\n\t}\n\tspecRoleTable[63] = specRoleTable[62]--Frost Mage same as arcane\n\tspecRoleTable[64] = specRoleTable[62]--Fire Mage same as arcane\n\tspecRoleTable[72] = specRoleTable[71]--Fury Warrior same as Arms\n\tspecRoleTable[252] = specRoleTable[251]--Unholy DK same as frost\n\tspecRoleTable[257] = specRoleTable[256]--Holy Priest same as disc\n\tspecRoleTable[260] = specRoleTable[259]--Combat Rogue same as Assassination\n\tspecRoleTable[261] = specRoleTable[259]--Subtlety Rogue same as Assassination\n\tspecRoleTable[266] = specRoleTable[265]--Demonology Warlock same as Affliction\n\tspecRoleTable[267] = specRoleTable[265]--Destruction Warlock same as Affliction\n\n\tprivate.specRoleTable = specRoleTable\nend\nDBMExtraGlobal:rebuildSpecTable()--Initial build\n"
  },
  {
    "path": "DBM-Core/modules/TargetScanning.lua",
    "content": "local _, private = ...\n\nlocal twipe = table.wipe\nlocal IsInGroup = private.IsInGroup\nlocal UnitExists, UnitPlayerOrPetInRaid, UnitGUID =\n\tUnitExists, UnitPlayerOrPetInRaid, UnitGUID\nlocal C_NamePlate = C_NamePlate -- https://github.com/FrostAtom/awesome_wotlk\n\nlocal module = private:NewModule(\"TargetScanning\")\n\n--Traditional loop scanning method tables\nlocal targetScanCount = {}\nlocal bossuIdCache = {}\n--UNIT_TARGET scanning method table\nlocal unitScanCount = 0\nlocal unitMonitor = {}\n\nfunction module:OnModuleEnd()\n\ttwipe(targetScanCount)\n\ttwipe(bossuIdCache)\n\tunitScanCount = 0\n\ttwipe(unitMonitor)\nend\n\ndo\n\tlocal CL = DBM_COMMON_L\n\n\tlocal bossTargetuIds = {\n\t\t\"boss1\", \"boss2\", \"boss3\", \"boss4\", \"boss5\", \"focus\", \"target\", \"mouseover\"\n\t}\n\n\tlocal fullUids = {\n\t\t\"boss1\", \"boss2\", \"boss3\", \"boss4\", \"boss5\",-- \"boss6\", \"boss7\", \"boss8\", \"boss9\", \"boss10\",\n\t\t\"mouseover\", \"target\", \"focus\", \"focustarget\", \"targettarget\", \"mouseovertarget\",\n\t\t\"party1target\", \"party2target\", \"party3target\", \"party4target\",\n\t\t\"raid1target\", \"raid2target\", \"raid3target\", \"raid4target\", \"raid5target\", \"raid6target\", \"raid7target\", \"raid8target\", \"raid9target\", \"raid10target\",\n\t\t\"raid11target\", \"raid12target\", \"raid13target\", \"raid14target\", \"raid15target\", \"raid16target\", \"raid17target\", \"raid18target\", \"raid19target\", \"raid20target\",\n\t\t\"raid21target\", \"raid22target\", \"raid23target\", \"raid24target\", \"raid25target\", \"raid26target\", \"raid27target\", \"raid28target\", \"raid29target\", \"raid30target\",\n\t\t\"raid31target\", \"raid32target\", \"raid33target\", \"raid34target\", \"raid35target\", \"raid36target\", \"raid37target\", \"raid38target\", \"raid39target\", \"raid40target\",\n\t}\n\tif C_NamePlate then -- Custom\n\t\tfullUids = {\n\t\t\t\"boss1\", \"boss2\", \"boss3\", \"boss4\", \"boss5\",-- \"boss6\", \"boss7\", \"boss8\", \"boss9\", \"boss10\",\n\t\t\t\"mouseover\", \"target\", \"focus\", \"focustarget\", \"targettarget\", \"mouseovertarget\",\n\t\t\t\"party1target\", \"party2target\", \"party3target\", \"party4target\",\n\t\t\t\"raid1target\", \"raid2target\", \"raid3target\", \"raid4target\", \"raid5target\", \"raid6target\", \"raid7target\", \"raid8target\", \"raid9target\", \"raid10target\",\n\t\t\t\"raid11target\", \"raid12target\", \"raid13target\", \"raid14target\", \"raid15target\", \"raid16target\", \"raid17target\", \"raid18target\", \"raid19target\", \"raid20target\",\n\t\t\t\"raid21target\", \"raid22target\", \"raid23target\", \"raid24target\", \"raid25target\", \"raid26target\", \"raid27target\", \"raid28target\", \"raid29target\", \"raid30target\",\n\t\t\t\"raid31target\", \"raid32target\", \"raid33target\", \"raid34target\", \"raid35target\", \"raid36target\", \"raid37target\", \"raid38target\", \"raid39target\", \"raid40target\",\n\t\t\t-- Nameplates\n\t\t\t\"nameplate1\", \"nameplate2\", \"nameplate3\", \"nameplate4\", \"nameplate5\", \"nameplate6\", \"nameplate7\", \"nameplate8\", \"nameplate9\", \"nameplate10\",\n\t\t\t\"nameplate11\", \"nameplate12\", \"nameplate13\", \"nameplate14\", \"nameplate15\", \"nameplate16\", \"nameplate17\", \"nameplate18\", \"nameplate19\", \"nameplate20\",\n\t\t\t\"nameplate21\", \"nameplate22\", \"nameplate23\", \"nameplate24\", \"nameplate25\", \"nameplate26\", \"nameplate27\", \"nameplate28\", \"nameplate29\", \"nameplate30\",\n\t\t\t\"nameplate31\", \"nameplate32\", \"nameplate33\", \"nameplate34\", \"nameplate35\", \"nameplate36\", \"nameplate37\", \"nameplate38\", \"nameplate39\", \"nameplate40\"\n\t\t}\n\tend\n\n\tlocal function getBossTarget(guid, scanOnlyBoss)\n\t\tlocal name, uid, bossuid\n\t\tlocal cacheuid = bossuIdCache[guid] or \"boss1\"\n\t\t--Try to check last used unit token cache before iterating again.\n\t\tif UnitGUID(cacheuid) == guid then\n\t\t\tbossuid = cacheuid\n\t\t\tname = DBM:GetUnitFullName(cacheuid..\"target\")\n\t\t\tuid = cacheuid..\"target\"\n\t\t\tbossuIdCache[guid] = bossuid\n\t\tend\n\t\tif name then return name, uid, bossuid end\n\t\t--Else, perform iteration again\n\t\tlocal unitID = DBM:GetUnitIdFromGUID(guid, scanOnlyBoss)\n\t\tif unitID then\n\t\t\tbossuid = unitID\n\t\t\tname = DBM:GetUnitFullName(unitID..\"target\")\n\t\t\tuid = unitID..\"target\"\n\t\t\tbossuIdCache[guid] = bossuid\n\t\tend\n\t\treturn name, uid, bossuid\n\tend\n\n\tfunction module:GetBossTarget(mod, cidOrGuid, scanOnlyBoss)\n\t\tlocal name, uid, bossuid\n\t\tDBM:Debug(\"GetBossTarget firing for :\"..tostring(mod)..\" \"..tostring(cidOrGuid)..\" \"..tostring(scanOnlyBoss), 3)\n\t\tif type(cidOrGuid) == \"number\" then--CID passed, slower and slighty more hacky scan\n\t\t\tcidOrGuid = cidOrGuid or mod.creatureId\n\t\t\tlocal cacheuid = bossuIdCache[cidOrGuid] or \"boss1\"\n\t\t\tif mod:GetUnitCreatureId(cacheuid) == cidOrGuid then\n\t\t\t\tbossuIdCache[cidOrGuid] = cacheuid\n\t\t\t\tbossuIdCache[UnitGUID(cacheuid)] = cacheuid\n\t\t\t\tname, uid, bossuid = getBossTarget(UnitGUID(cacheuid), scanOnlyBoss)\n\t\t\telse\n\t\t\t\tlocal usedTable = scanOnlyBoss and bossTargetuIds or fullUids\n\t\t\t\tfor _, uId in ipairs(usedTable) do\n\t\t\t\t\tif mod:GetUnitCreatureId(uId) == cidOrGuid then\n\t\t\t\t\t\tbossuIdCache[cidOrGuid] = uId\n\t\t\t\t\t\tbossuIdCache[UnitGUID(uId)] = uId\n\t\t\t\t\t\tname, uid, bossuid = getBossTarget(UnitGUID(uId), scanOnlyBoss)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\tname, uid, bossuid = getBossTarget(cidOrGuid, scanOnlyBoss)\n\t\tend\n\t\tif uid then\n\t\t\tlocal cid = mod:GetUnitCreatureId(uid)\n\t\t\tif cid == 24207 or cid == 80258 or cid == 87519 then--Filter useless units, like \"Army of the Dead\", that would otherwise throw off the target scan\n\t\t\t\treturn\n\t\t\tend\n\t\tend\n\t\treturn name, uid, bossuid\n\tend\n\n\tfunction module:GetBossUnitByCreatureId(mod, cid)\n\t\tfor _, uId in ipairs(bossTargetuIds) do\n\t\t\tif mod:GetUnitCreatureId(uId) == cid then\n\t\t\t\treturn uId\n\t\t\tend\n\t\tend\n\t\treturn \"target\"\n\tend\n\n\tfunction module:BossTargetScannerAbort(mod, cidOrGuid, returnFunc)\n\t\ttargetScanCount[cidOrGuid] = nil--Reset count for later use.\n\t\tmod:UnscheduleMethod(\"BossTargetScanner\", cidOrGuid, returnFunc)\n\t\tDBM:Debug(\"Boss target scan for \"..cidOrGuid..\" should be aborting.\", 2)\n\tend\n\n\tfunction module:BossTargetScanner(mod, cidOrGuid, returnFunc, scanInterval, scanTimes, scanOnlyBoss, isEnemyScan, isFinalScan, targetFilter, tankFilter, onlyPlayers)\n\t\t--Increase scan count\n\t\tcidOrGuid = cidOrGuid or mod.creatureId\n\t\tif not cidOrGuid then return end\n\t\tif not targetScanCount[cidOrGuid] then\n\t\t\ttargetScanCount[cidOrGuid] = 0\n\t\t\tDBM:Debug(\"Boss target scan started for \"..cidOrGuid, 2)\n\t\tend\n\t\ttargetScanCount[cidOrGuid] = targetScanCount[cidOrGuid] + 1\n\t\t--Set default values\n\t\tscanInterval = scanInterval or 0.05\n\t\tscanTimes = scanTimes or 16\n\t\tlocal targetname, targetuid, bossuid = self:GetBossTarget(mod, cidOrGuid, scanOnlyBoss)\n\t\tDBM:Debug(\"Boss target scan \"..targetScanCount[cidOrGuid]..\" of \"..scanTimes..\", found target \"..(targetname or \"nil\")..\" using \"..(bossuid or \"nil\"), 3)--Doesn't hurt to keep this, as level 3\n\t\t--Do scan\n\t\tif targetname and targetname ~= CL.UNKNOWN and (not targetFilter or (targetFilter and targetFilter ~= targetname)) then\n\t\t\tif not IsInGroup() then scanTimes = 1 end--Solo, no reason to keep scanning, give faster warning. But only if first scan is actually a valid target, which is why i have this check HERE\n\t\t\tif (isEnemyScan and UnitIsFriend(\"player\", targetuid) or (onlyPlayers and not UnitIsPlayer(\"player\", targetuid)) or mod:IsTanking(targetuid, bossuid, nil, true)) and not isFinalScan then--On player scan, ignore tanks. On enemy scan, ignore friendly player. On Only player, ignore npcs and pets\n\t\t\t\tif targetScanCount[cidOrGuid] < scanTimes then--Make sure no infinite loop.\n\t\t\t\t\tmod:ScheduleMethod(scanInterval, \"BossTargetScanner\", cidOrGuid, returnFunc, scanInterval, scanTimes, scanOnlyBoss, isEnemyScan, nil, targetFilter, tankFilter, onlyPlayers)--Scan multiple times to be sure it's not on something other then tank (or friend on enemy scan, or npc/pet on only person)\n\t\t\t\telse--Go final scan.\n\t\t\t\t\tself:BossTargetScanner(mod, cidOrGuid, returnFunc, scanInterval, scanTimes, scanOnlyBoss, isEnemyScan, true, targetFilter, tankFilter, onlyPlayers)\n\t\t\t\tend\n\t\t\telse--Scan success. (or failed to detect right target.) But some spells can be used on tanks, anyway warns tank if player scan. (enemy scan block it)\n\t\t\t\ttargetScanCount[cidOrGuid] = nil--Reset count for later use.\n\t\t\t\tmod:UnscheduleMethod(\"BossTargetScanner\", cidOrGuid, returnFunc)--Unschedule all checks just to be sure none are running, we are done.\n\t\t\t\tif (tankFilter and mod:IsTanking(targetuid, bossuid, nil, true)) or (isFinalScan and isEnemyScan) or onlyPlayers and not UnitIsPlayer(\"player\", targetuid) then return end--If enemyScan and playerDetected, return nothing\n\t\t\t\tlocal scanningTime = (targetScanCount[cidOrGuid] or 1) * scanInterval\n\t\t\t\tmod[returnFunc](mod, targetname, targetuid, bossuid, scanningTime)--Return results to warning function with all variables.\n\t\t\t\tDBM:Debug(\"BossTargetScanner has ended for \"..cidOrGuid, 2)\n\t\t\tend\n\t\telse--target was nil, lets schedule a rescan here too.\n\t\t\tif targetScanCount[cidOrGuid] < scanTimes then--Make sure not to infinite loop here as well.\n\t\t\t\tmod:ScheduleMethod(scanInterval, \"BossTargetScanner\", cidOrGuid, returnFunc, scanInterval, scanTimes, scanOnlyBoss, isEnemyScan, nil, targetFilter, tankFilter, onlyPlayers)\n\t\t\telse\n\t\t\t\ttargetScanCount[cidOrGuid] = nil--Reset count for later use.\n\t\t\t\tmod:UnscheduleMethod(\"BossTargetScanner\", cidOrGuid, returnFunc)--Unschedule all checks just to be sure none are running, we are done.\n\t\t\tend\n\t\tend\n\tend\nend\n\ndo\n\t--UNIT_TARGET Target scanning method\n\tlocal eventsRegistered = false\n\t--Validate target is in group (I'm not sure why i actually required this since I didn't comment code when I added requirement, so I leave it for now)\n\t--If I determine this check isn't needed and it continues to be a problem i'll kill it off.\n\t--For now, I'll have check be smart and switch between raid and party and just disable when solo\n\tlocal function validateGroupTarget(unit)\n\t\tif IsInGroup() then\n\t\t\tif UnitPlayerOrPetInRaid(unit) or UnitPlayerOrPetInParty(unit) then\n\t\t\t\treturn true\n\t\t\tend\n\t\telse--Solo\n\t\t\treturn true\n\t\tend\n\tend\n\tfunction module:UNIT_TARGET_UNFILTERED(uId)\n\t\t--Active BossUnitTargetScanner\n\t\tDBM:Debug(\"UNIT_TARGET_UNFILTERED fired for :\"..uId, 3)\n\t\tif unitMonitor[uId] and UnitExists(uId..\"target\") and validateGroupTarget(uId..\"target\") then\n\t\t\tDBM:Debug(\"unitMonitor for this unit exists, target exists in group\", 2)\n\t\t\tlocal modId, returnFunc = unitMonitor[uId].modid, unitMonitor[uId].returnFunc\n\t\t\tDBM:Debug(\"unitMonitor: \"..modId..\", \"..uId..\", \"..returnFunc, 2)\n\t\t\tif not unitMonitor[uId].allowTank then\n\t\t\t\tlocal tanking, status = UnitDetailedThreatSituation(uId, uId..\"target\")--Tanking may return 0 if npc is temporarily looking at an NPC (IE fracture) but status will still be 3 on true tank\n\t\t\t\tif tanking or (status == 3) then\n\t\t\t\t\tDBM:Debug(\"unitMonitor ending for unit without 'allowTank', ignoring target\", 2)\n\t\t\t\t\treturn\n\t\t\t\tend\n\t\t\tend\n\t\t\tlocal mod = DBM:GetModByName(modId)--The whole reason we store modId in unitMonitor,\n\t\t\tDBM:Debug(\"unitMonitor success for this unit, a valid target for returnFunc\", 2)\n\t\t\tmod[returnFunc](mod, DBM:GetUnitFullName(uId..\"target\"), uId..\"target\", uId)--Return results to warning function with all variables.\n\t\t\tunitMonitor[uId] = nil\n\t\t\tunitScanCount = unitScanCount - 1\n\t\tend\n\t\tif unitScanCount == 0 then--Out of scans\n\t\t\teventsRegistered = false\n\t\t\tself:UnregisterShortTermEvents()\n\t\t\tDBM:Debug(\"All target scans complete, unregistering events\", 2)\n\t\tend\n\tend\n\n\tfunction module:BossUnitTargetScannerAbort(mod, uId)\n\t\tif not uId then--Not called with unit, means mod requested to clear all used units\n\t\t\tDBM:Debug(\"BossUnitTargetScannerAbort called without unit, clearing all unitMonitor units\", 2)\n\t\t\ttwipe(unitMonitor)\n\t\t\tunitScanCount = 0\n\t\t\treturn\n\t\tend\n\t\t--If tank is allowed, return current target when scan ends no matter what.\n\t\tif unitMonitor[uId] and (unitMonitor[uId].allowTank or not IsInGroup()) and validateGroupTarget(uId..\"target\") then\n\t\t\tDBM:Debug(\"unitMonitor unit exists, allowTank target exists\", 2)\n\t\t\tlocal modId, returnFunc = unitMonitor[uId].modid, unitMonitor[uId].returnFunc\n\t\t\tDBM:Debug(\"unitMonitor: \"..modId..\", \"..uId..\", \"..returnFunc, 2)\n\t\t\tDBM:Debug(\"unitMonitor found a target that probably is a tank\", 2)\n\t\t\tmod[returnFunc](mod, DBM:GetUnitFullName(uId..\"target\"), uId..\"target\", uId)--Return results to warning function with all variables.\n\t\tend\n\t\tunitMonitor[uId] = nil\n\t\tunitScanCount = unitScanCount - 1\n\t\tDBM:Debug(\"Boss unit target scan should be aborting for \"..uId, 2)\n\tend\n\n\tfunction module:BossUnitTargetScanner(mod, uId, returnFunc, scanTime, allowTank)\n\t\t--UNIT_TARGET event monitor target scanner. Will instantly detect a target change of a registered Unit\n\t\t--If target change occurs before this method is called (or if boss doesn't change target because cast ends up actually being on the tank, target scan will fail completely\n\t\t--If allowTank is passed, it basically tells this scanner to return current target of unitId at time of failure/abort when scanTime is complete\n\t\tunitMonitor[uId] = {}\n\t\tunitScanCount = unitScanCount + 1\n\t\tunitMonitor[uId].modid, unitMonitor[uId].returnFunc, unitMonitor[uId].allowTank = mod.id, returnFunc, allowTank\n\t\tmod:ScheduleMethod(scanTime or 1.5, \"BossUnitTargetScannerAbort\", uId)--In case of BossUnitTargetScanner firing too late, and boss already having changed target before monitor started, it needs to abort after x seconds\n\t\tif not eventsRegistered then\n\t\t\teventsRegistered = true\n\t\t\tself:RegisterShortTermEvents(\"UNIT_TARGET_UNFILTERED\")\n\t\t\tDBM:Debug(\"Registering UNIT_TARGET event for BossUnitTargetScanner\", 2)\n\t\tend\n\tend\nend\n\ndo\n\tlocal repeatedScanEnabled = {}\n\t--infinite scanner. so use this carefully.\n\tlocal function repeatedScanner(mod, cidOrGuid, returnFunc, scanInterval, scanOnlyBoss, includeTank)\n\t\tif repeatedScanEnabled[returnFunc] then\n\t\t\tcidOrGuid = cidOrGuid or mod.creatureId\n\t\t\tscanInterval = scanInterval or 0.1\n\t\t\tlocal targetname, targetuid, bossuid = module:GetBossTarget(mod, cidOrGuid, scanOnlyBoss)\n\t\t\tif targetname and (includeTank or not mod:IsTanking(targetuid, bossuid, nil, true)) then\n\t\t\t\tmod[returnFunc](mod, targetname, targetuid, bossuid)\n\t\t\tend\n\t\t\tmod:Schedule(scanInterval, repeatedScanner, mod, cidOrGuid, returnFunc, scanInterval, scanOnlyBoss, includeTank)\n\t\tend\n\tend\n\n\tfunction module:StartRepeatedScan(mod, cidOrGuid, returnFunc, scanInterval, scanOnlyBoss, includeTank)\n\t\trepeatedScanEnabled[returnFunc] = true\n\t\trepeatedScanner(mod, cidOrGuid, returnFunc, scanInterval, scanOnlyBoss, includeTank)\n\tend\n\n\tfunction module:StopRepeatedScan(returnFunc)\n\t\trepeatedScanEnabled[returnFunc] = nil\n\tend\nend\n"
  },
  {
    "path": "DBM-Core/modules/UpdateReminder.lua",
    "content": "local L = DBM_CORE_L\n\nlocal frame, fontstring, fontstringFooter, editBox, urlText\n\nlocal function CreateOurFrame()\n\tframe = CreateFrame(\"Frame\", \"DBMUpdateReminder\", UIParent)\n\tframe:SetFrameStrata(\"FULLSCREEN_DIALOG\") -- yes, this isn't a fullscreen dialog, but I want it to be in front of other DIALOG frames (like DBM GUI which might open this frame...)\n\tframe:SetWidth(430)\n\tframe:SetHeight(140)\n\tframe:SetPoint(\"TOP\", 0, -230)\n\tframe.backdropInfo = {\n\t\tbgFile\t\t= \"Interface\\\\DialogFrame\\\\UI-DialogBox-Background\", -- 131071\n\t\tedgeFile\t= \"Interface\\\\DialogFrame\\\\UI-DialogBox-Border\", -- 131072\n\t\ttile\t\t= true,\n\t\ttileSize\t= 32,\n\t\tedgeSize\t= 32,\n\t\tinsets\t\t= { left = 11, right = 12, top = 12, bottom = 11 },\n\t}\n\tframe:SetBackdrop(frame.backdropInfo)\n\tfontstring = frame:CreateFontString(nil, \"ARTWORK\", \"GameFontNormal\")\n\tfontstring:SetWidth(410)\n\tfontstring:SetHeight(0)\n\tfontstring:SetPoint(\"TOP\", 0, -16)\n\teditBox = CreateFrame(\"EditBox\", nil, frame)\n\tdo\n\t\tlocal editBoxLeft = editBox:CreateTexture(nil, \"BACKGROUND\")\n\t\teditBoxLeft:SetTexture(\"Interface\\\\ChatFrame\\\\UI-ChatInputBorder-Left\") -- 130959\n\t\teditBoxLeft:SetHeight(32)\n\t\teditBoxLeft:SetWidth(32)\n\t\teditBoxLeft:SetPoint(\"LEFT\", -14, 0)\n\t\teditBoxLeft:SetTexCoord(0, 0.125, 0, 1)\n\t\tlocal editBoxRight = editBox:CreateTexture(nil, \"BACKGROUND\")\n\t\teditBoxRight:SetTexture(\"Interface\\\\ChatFrame\\\\UI-ChatInputBorder-Right\") -- 130960\n\t\teditBoxRight:SetHeight(32)\n\t\teditBoxRight:SetWidth(32)\n\t\teditBoxRight:SetPoint(\"RIGHT\", 6, 0)\n\t\teditBoxRight:SetTexCoord(0.875, 1, 0, 1)\n\t\tlocal editBoxMiddle = editBox:CreateTexture(nil, \"BACKGROUND\")\n\t\teditBoxMiddle:SetTexture(\"Interface\\\\ChatFrame\\\\UI-ChatInputBorder-Right\") -- 130960\n\t\teditBoxMiddle:SetHeight(32)\n\t\teditBoxMiddle:SetWidth(1)\n\t\teditBoxMiddle:SetPoint(\"LEFT\", editBoxLeft, \"RIGHT\")\n\t\teditBoxMiddle:SetPoint(\"RIGHT\", editBoxRight, \"LEFT\")\n\t\teditBoxMiddle:SetTexCoord(0, 0.9375, 0, 1)\n\tend\n\teditBox:SetHeight(32)\n\teditBox:SetWidth(250)\n\teditBox:SetPoint(\"TOP\", fontstring, \"BOTTOM\", 0, -4)\n\teditBox:SetFontObject(\"GameFontHighlight\")\n\teditBox:SetTextInsets(0, 0, 0, 1)\n\teditBox:SetFocus()\n\teditBox:SetScript(\"OnTextChanged\", function(self)\n\t\teditBox:SetText(urlText)\n\t\teditBox:HighlightText()\n\tend)\n\tfontstringFooter = frame:CreateFontString(nil, \"ARTWORK\", \"GameFontNormal\")\n\tfontstringFooter:SetWidth(410)\n\tfontstringFooter:SetHeight(0)\n\tfontstringFooter:SetPoint(\"TOP\", editBox, \"BOTTOM\", 0, 0)\n\tlocal button = CreateFrame(\"Button\", nil, frame)\n\tbutton:SetHeight(24)\n\tbutton:SetWidth(75)\n\tbutton:SetPoint(\"BOTTOM\", 0, 13)\n\tbutton:SetNormalFontObject(\"GameFontNormal\")\n\tbutton:SetHighlightFontObject(\"GameFontHighlight\")\n\tbutton:SetNormalTexture(button:CreateTexture(nil, nil, \"UIPanelButtonUpTexture\"))\n\tbutton:SetPushedTexture(button:CreateTexture(nil, nil, \"UIPanelButtonDownTexture\"))\n\tbutton:SetHighlightTexture(button:CreateTexture(nil, nil, \"UIPanelButtonHighlightTexture\"))\n\tbutton:SetText(OKAY)\n\tbutton:SetScript(\"OnClick\", function()\n\t\tframe:Hide()\n\tend)\n\nend\n\nfunction DBM:ShowUpdateReminder(newVersion, newRevision, text, url)\n\turlText = url or \"https://github.com/DeadlyBossMods/DeadlyBossMods/wiki\"\n\tif not frame then\n\t\tCreateOurFrame()\n\tend\n\teditBox:SetText(url or \"https://github.com/DeadlyBossMods/DeadlyBossMods/wiki\")\n\teditBox:HighlightText()\n\tframe:Show()\n\tif newVersion then\n\t\tfontstring:SetText(L.UPDATEREMINDER_HEADER:format(newVersion, newRevision))\n\t\tfontstringFooter:SetText(L.UPDATEREMINDER_FOOTER)\n\telseif text then\n\t\tfontstring:SetText(text)\n\t\tfontstringFooter:SetText(L.UPDATEREMINDER_FOOTER_GENERIC)\n\tend\nend\n"
  },
  {
    "path": "DBM-Core/modules/objects/Localization.lua",
    "content": "local L = DBM_CORE_L\n\nlocal returnKey = {\n\t__index = function(_, k)\n\t\treturn k\n\tend\n}\n\nlocal defaultCatLocalization = {\n\t__index = setmetatable({\n\t\ttimer\t\t\t\t= L.OPTION_CATEGORY_TIMERS,\n\t\tannounce\t\t\t= L.OPTION_CATEGORY_WARNINGS,\n\t\tannounceother\t\t= L.OPTION_CATEGORY_WARNINGS_OTHER,\n\t\tannouncepersonal\t= L.OPTION_CATEGORY_WARNINGS_YOU,\n\t\tannouncerole\t\t= L.OPTION_CATEGORY_WARNINGS_ROLE,\n\t\tspecialannounce\t\t= L.OPTION_CATEGORY_SPECWARNINGS,\n\t\tsound\t\t\t\t= L.OPTION_CATEGORY_SOUNDS,\n\t\tyell\t\t\t\t= L.OPTION_CATEGORY_YELLS,\n\t\ticon\t\t\t\t= L.OPTION_CATEGORY_ICONS,\n\t\tnameplate\t\t\t= L.OPTION_CATEGORY_NAMEPLATES,\n\t\tmisc\t\t\t\t= MISCELLANEOUS\n\t}, returnKey)\n}\n\nlocal defaultTimerLocalization = {\n\t__index = setmetatable({\n\t\ttimer_berserk = L.GENERIC_TIMER_BERSERK,\n\t\ttimer_combat = L.GENERIC_TIMER_COMBAT\n\t}, returnKey)\n}\n\nlocal defaultAnnounceLocalization = {\n\t__index = setmetatable({\n\t\twarning_berserk = L.GENERIC_WARNING_BERSERK\n\t}, returnKey)\n}\n\nlocal defaultOptionLocalization = {\n\t__index = setmetatable({\n\t\ttimer_berserk = L.OPTION_TIMER_BERSERK,\n\t\ttimer_combat = L.OPTION_TIMER_COMBAT,\n\t\tHealthFrame = L.OPTION_HEALTH_FRAME -- Old mod health frame localization\n\t}, returnKey)\n}\n\nlocal defaultMiscLocalization = {\n\t__index = {}\n}\n\nlocal modLocalizationPrototype = {}\n\nfunction modLocalizationPrototype:SetGeneralLocalization(t)\n\tfor i, v in pairs(t) do\n\t\tself.general[i] = v\n\tend\nend\n\nfunction modLocalizationPrototype:SetWarningLocalization(t)\n\tfor i, v in pairs(t) do\n\t\tself.warnings[i] = v\n\tend\nend\n\nfunction modLocalizationPrototype:SetTimerLocalization(t)\n\tfor i, v in pairs(t) do\n\t\tself.timers[i] = v\n\tend\nend\n\nfunction modLocalizationPrototype:SetOptionLocalization(t)\n\tfor i, v in pairs(t) do\n\t\tself.options[i] = v\n\tend\nend\n\nfunction modLocalizationPrototype:SetOptionCatLocalization(t)\n\tfor i, v in pairs(t) do\n\t\tself.cats[i] = v\n\tend\nend\n\nfunction modLocalizationPrototype:SetMiscLocalization(t)\n\tfor i, v in pairs(t) do\n\t\tself.miscStrings[i] = v\n\tend\nend\n\nlocal modLocalizations = {}\n\nfunction DBM:CreateModLocalization(name)\n\tname = tostring(name)\n\tlocal obj = {\n\t\tgeneral = setmetatable({}, returnKey),\n\t\twarnings = setmetatable({}, defaultAnnounceLocalization),\n\t\toptions = setmetatable({}, defaultOptionLocalization),\n\t\ttimers = setmetatable({}, defaultTimerLocalization),\n\t\tmiscStrings = setmetatable({}, defaultMiscLocalization),\n\t\tcats = setmetatable({}, defaultCatLocalization),\n\t}\n\tsetmetatable(obj, {\n\t\t__index = modLocalizationPrototype\n\t})\n\tmodLocalizations[name] = obj\n\treturn obj\nend\n\nfunction DBM:GetModLocalization(name)\n\tname = tostring(name)\n\treturn modLocalizations[name] or self:CreateModLocalization(name)\nend\n"
  },
  {
    "path": "DBM-Core/sounds/Creative Commons Sampling Plus 1.0.txt",
    "content": "THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE (\"CCPL\" OR \"LICENSE\"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.\n\nBY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.\n\n1. Definitions\n\n   a. \"Collective Work\" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License.\n\n   b. \"Derivative Work\" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License.\n   \n   c. \"Licensor\" means the individual or entity that offers the Work under the terms of this License.\n   \n   d. \"Original Author\" means the individual or entity who created the Work.\n   \n   e. \"Work\" means the copyrightable work of authorship offered under the terms of this License.\n\n   f. \"You\" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.\n\n2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws.\n\n3. License Grant & Restrictions. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below on the conditions as stated below:\n\n   a. Re-creativity permitted. You may create and reproduce Derivative Works, provided that:\n\n         i. the Derivative Work(s) constitute a good-faith partial or recombined usage employing \"sampling,\" \"collage,\" \"mash-up,\" or other comparable artistic technique, whether now known or hereafter devised, that is highly transformative of the original, as appropriate to the medium, genre, and market niche; and\n\n         ii. Your Derivative Work(s) must only make a partial use of the original Work, or if You choose to use the original Work as a whole, You must either use the Work as an insubstantial portion of Your Derivative Work(s) or transform it into something substantially different from the original Work. In the case of a musical Work and/or audio recording, the mere synchronization (\"synching\") of the Work with a moving image shall not be considered a transformation of the Work into something substantially different.\n\n   b. You may distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission, any Derivative Work(s) authorized under this License.\n   \n   c. Prohibition on advertising. All advertising and promotional uses are excluded from the above rights, except for advertisement and promotion of the Derivative Work(s) that You are creating from the Work and Yourself as the author thereof.\n\n   d. Noncommercial sharing of verbatim copies permitted.\n\n         i. You may reproduce the Work, incorporate the Work into one or more Collective Works, and reproduce the Work as incorporated in the Collective Works. You may distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including or incorporated in Collective Works.\n\n         ii. You may not exercise any of the rights granted to You in the paragraph immediately above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.\n\n   e. Attribution and Notice.\n\n         i. If You distribute, publicly display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must keep intact all copyright notices for the Work and give the Original Author credit reasonable to the medium or means You are utilizing by conveying the name (or pseudonym if applicable) of the Original Author if supplied; the title of the Work if supplied; to the extent reasonably practicable, provide the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work or a Derivative Work, unless such Uniform Resource Identifier does not refer to the copyright notice or licensing information for the Work; and in the case of a Derivative Work, provide a credit identifying the use of the Work in the Derivative Work (e.g., \"Remix of the Work by Original Author,\" or \"Inclusion of a portion of the Work by Original Author in collage\"). Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit.\n\n         ii. You may distribute, publicly display, publicly perform or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work or Derivative Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any technological measures that control access of use of the Work in a manner inconsistent with the terms of this License. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. Upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work or Collective Work any reference to such Licensor or the Original Author, as requested.\n\nThe above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved.\n\n4. Disclaimer\n\nUNLESS SPECIFIED OTHERWISE BY THE PARTIES IN A SEPARATE WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE.\n\n5. Limitation on Liability.\n\nIN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n\n6. Termination\n\n   a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works or Collective Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 4, 5, 6, and 7 will survive any termination of this License.\n\n   b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.\n\n7. Miscellaneous\n\n   a. Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.\n\n   b. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.\n\n   c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.\n\n   d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.\n\n   e. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements, or representations with respect to the Work, and with respect to the subject matter hereof, not specified above. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.\n"
  },
  {
    "path": "DBM-Core/sounds/license info.txt",
    "content": "The sound \"alarmclockbeeps.ogg\" was created by tedthetrumpet (http://www.freesound.org/usersViewSingle.php?id=177). It is a free sound licensed under a Creative Commons Sampling Plus 1.0 License (http://creativecommons.org/licenses/sampling+/1.0/). The full text of the license can be found in the file \"Creative Commons Sampling Plus 1.0.txt\".\n\nThe sound \"blip_8.ogg\" was created by Corsica_S (http://www.freesound.org/usersViewSingle.php?id=7037). It is a free sound licensed under a Creative Commons Sampling Plus 1.0 License (http://creativecommons.org/licenses/sampling+/1.0/). The full text of the license can be found in the file \"Creative Commons Sampling Plus 1.0.txt\"."
  },
  {
    "path": "DBM-Core/textures/arrows/ArrowLicense.txt",
    "content": "3D-Arrow:\n\tEveryone has full permission to do whatever they want with this model file in any non-commercial manner. Attribution to \"Guillotine\" is nice, but not necessary. For any commrcial use, contact me first at curse.guillotine@gmail.com\n\t\nMinimap Textures:\n\tTaken from TomTom with permission, thanks to Cladhaire!\n"
  },
  {
    "path": "DBM-EyeOfEternity/DBM-EyeOfEternity.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Eye of Eternity|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Das Auge der Ewigkeit|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Око Вечности|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0永恆之眼|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0永恒之眼|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0영원의 눈|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0El Ojo de la Eternidad|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMEyeOfEternity_AllSavedVars\n## SavedVariablesPerCharacter: DBMEyeOfEternity_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: WOTLK\n## X-DBM-StatTypes: normal,normal25\n## X-DBM-Mod-Name: Eye of Eternity\n## X-DBM-Mod-Name-deDE: Das Auge der Ewigkeit\n## X-DBM-Mod-Name-ruRU: Око Вечности\n## X-DBM-Mod-Name-zhTW: 永恆之眼\n## X-DBM-Mod-Name-zhCN: 永恒之眼\n## X-DBM-Mod-Name-koKR: 영원의 눈\n## X-DBM-Mod-Name-esES: El Ojo de la Eternidad\n## X-DBM-Mod-Sort: 5\n## X-DBM-Mod-MapID: 528\n## X-DBM-Mod-LoadZone: The Eye of Eternity\n## X-DBM-Mod-LoadZone-zhCN: 永恒之眼\n## X-DBM-Mod-LoadZone-ruRU: Око Вечности\n\nlocalization.en.lua\nlocalization.fr.lua\nlocalization.de.lua\nlocalization.ru.lua\nlocalization.tw.lua\nlocalization.kr.lua\nlocalization.es.lua\nlocalization.cn.lua\n\nMalygos.lua\n"
  },
  {
    "path": "DBM-EyeOfEternity/Malygos.lua",
    "content": "local mod\t= DBM:NewMod(\"Malygos\", \"DBM-EyeOfEternity\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(28859)\nmod:SetEncounterID(734)\n\n--mod:RegisterCombat(\"yell\", L.YellPull)\nmod:RegisterCombat(\"combat\")\nmod:SetWipeTime(45)\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 60936 57407\",\n\t\"SPELL_CAST_START 56505\",\n\t\"SPELL_CAST_SUCCESS 56105 57430\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1\"\n)\n-- General\nlocal enrageTimer\t\t\t\t= mod:NewBerserkTimer(615)\nlocal timerAchieve\t\t\t\t= mod:NewAchievementTimer(360, 1875)\n\n-- Stage One\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1))\nlocal warnSummonPowerSpark\t\t= mod:NewSpellAnnounce(56140, 2, 59381)\nlocal warnVortex\t\t\t\t= mod:NewSpellAnnounce(56105, 3)\nlocal warnVortexSoon\t\t\t= mod:NewSoonAnnounce(56105, 2)\n\nlocal timerSummonPowerSpark\t\t= mod:NewNextTimer(30, 56140, nil, nil, nil, 1, 59381, DBM_COMMON_L.DAMAGE_ICON) -- (10man Lordaeron 2022/09/27 || 25man Lordaeron 2022/09/27) - 30.0 || 30.0, 30.0\nlocal timerVortex\t\t\t\t= mod:NewCastTimer(11, 56105, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON)\nlocal timerVortexCD\t\t\t\t= mod:NewNextTimer(60, 56105, nil, nil, nil, 2)\n\n-- Stage Two\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2))\nlocal warnPhase2\t\t\t\t= mod:NewPhaseAnnounce(2)\nlocal warnBreathInc\t\t\t\t= mod:NewSoonAnnounce(56505, 3)\n\nlocal specWarnBreath\t\t\t= mod:NewSpecialWarningSpell(56505, nil, nil, nil, 2, 2)\n\nlocal timerBreath\t\t\t\t= mod:NewBuffActiveTimer(8, 56505, nil, nil, nil, 5) --lasts 5 seconds plus 3 sec cast.\nlocal timerBreathCD\t\t\t\t= mod:NewCDTimer(59, 56505, nil, nil, nil, 2)\nlocal timerIntermission\t\t\t= mod:NewPhaseTimer(22)\n\n-- Stage Three\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(3))\nlocal warnPhase3\t\t\t\t= mod:NewPhaseAnnounce(3)\nlocal warnSurge\t\t\t\t\t= mod:NewTargetAnnounce(60936, 3)\nlocal warnStaticField\t\t\t= mod:NewTargetNoFilterAnnounce(57430, 3)\n\nlocal specWarnSurge\t\t\t\t= mod:NewSpecialWarningDefensive(60936, nil, nil, nil, 1, 2)\nlocal specWarnP3SurgeOfPowerSoon= mod:NewSpecialWarningYou(60936, nil, nil, nil, 1, 2)\nlocal specWarnStaticField\t\t= mod:NewSpecialWarningYou(57430, nil, nil, nil, 1, 2)\nlocal specWarnStaticFieldNear\t= mod:NewSpecialWarningClose(57430, nil, nil, nil, 1, 2)\nlocal yellStaticField\t\t\t= mod:NewYellMe(57430)\n\nlocal timerStaticFieldCD\t\t= mod:NewCDTimer(10, 57430, nil, nil, nil, 3, nil, nil, true) --REVIEW! ~10s variance? Added \"keep\" arg (10man Lordaeron 2022/09/27 || 25man Lordaeron 2022/09/27) - 10.0, 16.2, 11.6, 10.2, 10.4 || 15.1, 20.1, 13.8, 19.5, 19.6, 11.4, 18.5\n--local timerAttackable\t\t\t= mod:NewTimer(24, \"Malygos Wipes Debuffs\") -- Not enough info nor locales on the code from previous contributor to know what this is intended for. Disabled for now\n\nlocal tableBuild = false\nlocal guids = {}\n\nlocal function buildGuidTable()\n\ttable.wipe(guids)\n\tfor uId in DBM:GetGroupMembers() do\n\t\tlocal name, server = UnitName(uId)\n\t\tlocal fullName = name .. (server and server ~= \"\" and (\"-\" .. server) or \"\")\n\t\tguids[UnitGUID(uId..\"pet\") or \"none\"] = fullName\n\tend\n\ttableBuild = true\nend\n\nfunction mod:StaticFieldTarget()\n\tlocal targetname, uId = self:GetBossTarget(28859)\n\tif not targetname or not uId then return end\n\tlocal targetGuid = UnitGUID(uId)\n\tif not tableBuild then\n\t\tbuildGuidTable()\n\tend\n\tlocal announcetarget = guids[targetGuid]\n\tif announcetarget == UnitName(\"player\") then\n\t\tspecWarnStaticField:Show()\n\t\tspecWarnStaticField:Play(\"runaway\")\n\t\tyellStaticField:Yell()\n\telseif announcetarget and self:CheckNearby(13, announcetarget) then\n\t\tspecWarnStaticFieldNear:Show(announcetarget)\n\t\tspecWarnStaticFieldNear:Play(\"runaway\")\n\telse\n\t\twarnStaticField:Show(announcetarget)\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\ttableBuild = false\n\tself:SetStage(1)\n\tenrageTimer:Start(-delay)\n\ttimerAchieve:Start(-delay)\n\ttimerVortexCD:Start(38.7) -- REVIEW! ~4s variance? (10man Lordaeron 2022/09/27 || 25man Lordaeron 2022/09/27) - pull:42.6/Stage 1/42.6 || pull:38.8/Stage 1/38.8 (but debug gave 1.3 delta)\n\ttimerSummonPowerSpark:Start(28.1-delay) -- REVIEW! ~3s variance? (10man Lordaeron 2022/09/27 || 25man Lordaeron 2022/09/27) - pull:31.4/Stage 1/31.4 || pull:28.1/Stage 1/28.1\n\ttable.wipe(guids)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(60936, 57407) then\n\t\tDBM:Debug(\"SURGE\" .. guids[args.destGUID], 2)\n\t\tlocal target = guids[args.destGUID or 0]\n\t\tif target then\n\t\t\twarnSurge:CombinedShow(0.5, target)\n\t\t\tif target == UnitName(\"player\") then\n\t\t\t\tspecWarnSurge:Show()\n\t\t\t\tspecWarnSurge:Play(\"defensive\")\n\t\t\tend\n\t\tend\n\tend\nend\n\n-- not really sure which one this spell is casted by. Use both i guess\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif self:GetCIDFromGUID(args.sourceGUID) == 28859 then\n\t\tDBM:Debug(\"SCStart \" .. spellId .. GetSpellLink(spellId) , 2)\n\tend\n\tif spellId == 56505 then--His deep breath\n\t\tspecWarnBreath:Show()\n\t\tspecWarnBreath:Play(\"findshield\")\n\t\ttimerBreath:Start()\n\t\ttimerBreathCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif self:GetCIDFromGUID(args.sourceGUID) == 28859 then\n\t\tDBM:Debug(\"SCSuccess \" .. spellId .. GetSpellLink(spellId) , 2)\n\tend\n\tif spellId == 56105 then\n\t\ttimerVortexCD:Start()\n\t\twarnVortexSoon:Schedule(54)\n\t\twarnVortex:Show()\n\t\ttimerVortex:Start()\n\t\t-- Commenting this block out, since Sparks are fixed on a 30s interval... no need to correct anything on the fly\n--\t\tif timerSummonPowerSpark:GetTime() < 11 and timerSummonPowerSpark:IsStarted() then\n--\t\t\ttimerSummonPowerSpark:Update(18, 30)\n--\t\tend\n\telseif spellId == 57430 then\n\t\tself:ScheduleMethod(0.1, \"StaticFieldTarget\")\n\t\t--warnStaticField:Show()\n\t\ttimerStaticFieldCD:Start()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\t--Secondary pull trigger, so we can detect combat when he's pulled while already in combat (which is about 99% of time)\n\tif (msg == L.YellPull or msg:find(L.YellPull)) and not self:IsInCombat() then\n\t\tDBM:StartCombat(self, 0)\n\telseif msg:sub(0, L.YellPhase2:len()) == L.YellPhase2 then\n\t\tself:SendSync(\"Phase2\")\n\telseif msg == L.YellBreath or msg:find(L.YellBreath) then\n\t\tself:SendSync(\"BreathSoon\")\n\telseif msg:sub(0, L.YellPhase3:len()) == L.YellPhase3 then\n\t\tself:SendSync(\"Phase3\")\n\telseif msg == L.EnoughScream then\n\t\ttimerBreathCD:Stop()\n--\t\ttimerAttackable:Start()\n\t\ttimerStaticFieldCD:Start(24+15.5)\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)\n--\tif msg == L.EmoteSpark or msg:find(L.EmoteSpark) then\n--\t\tself:SendSync(\"Spark\")\n\tif msg == L.EmoteSurge or msg:find(L.EmoteSurge) then\n\t\tself:SendSync(\"MalygosSurge\", UnitName(\"player\"))\n\tend\nend\n\n--localization free triggers that's better but can only be used where boss1 UnitId available\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n--\t\"<39.8> [UNIT_SPELLCAST_SUCCEEDED] Malygos:Possible Target<Omegal>:target:Summon Power Spark::0:56140\", -- [998]\n\tif spellName == GetSpellInfo(56140) then\n\t\twarnSummonPowerSpark:Show()\n\t\ttimerSummonPowerSpark:Start()\n\tend\nend\n\nfunction mod:OnSync(event, arg)\n\tif not self:IsInCombat() then return end\n--\tif event == \"Spark\" then\n--\t\twarnSummonPowerSpark:Show()\n--\t\ttimerSummonPowerSpark:Start()\n\tif event == \"Phase2\" then\n\t\tself:SetStage(2)\n\t\ttimerSummonPowerSpark:Cancel()\n\t\ttimerVortexCD:Cancel()\n\t\twarnVortexSoon:Cancel()\n\t\twarnPhase2:Show()\n\t\ttimerIntermission:Start()\n\t\ttimerBreathCD:Start(67.9) -- REVIEW! no variance? (10man Lordaeron 2022/09/27 || 25man Lordaeron 2022/09/27) - Stage 2/68.0 || Stage 2/68.0\n\telseif event == \"BreathSoon\" then\n\t\twarnBreathInc:Show()\n\telseif event == \"Phase3\" then\n\t\tself:SetStage(3)\n\t\twarnPhase3:Show()\n\t\tself:Schedule(6, buildGuidTable)\n\t\ttimerBreathCD:Cancel()\n\t\ttimerStaticFieldCD:Start(20.2) -- REVIEW! ~4s variance? (10man Lordaeron 2022/09/27 || 25man Lordaeron 2022/09/27) - Stage 3/24.5 || Stage 3/20.2\n\telseif event == \"MalygosSurge\" then\n\t\twarnSurge:CombinedShow(0.2, arg)\n\t\tif arg == UnitName(\"player\") then\n\t\t\tspecWarnP3SurgeOfPowerSoon:Show()\n\t\t\tspecWarnP3SurgeOfPowerSoon:Play(\"findshield\")\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-EyeOfEternity/localization.cn.lua",
    "content": "﻿-- author: callmejames @《凤凰之翼》 一区藏宝海湾\n-- commit by: yaroot <yaroot AT gmail.com>\n\n\nif GetLocale() ~= \"zhCN\" then return end\n\nlocal L\n\n---------------\n--  Malygos  --\n---------------\nL = DBM:GetModLocalization(\"Malygos\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t= \"玛里苟斯\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"我的耐心到此为止了。我要亲自消灭你们！\",\n\tEmoteSpark\t\t= \"附近的裂隙中冒出了一团能量火花！\",\n\tYellPhase2\t\t= \"我原本只是想尽快结束你们的生命\",\n--\tEmoteBreath\t\t= \"%s深深地吸了一口气。\",\n\tYellBreath\t\t= \"在我的龙息之下，一切都将荡然无存！\",\n\tYellPhase3\t\t= \"现在你们幕后的主使终于出现了\",\n--\tEnoughScream\t= \"够了！既然你们这么想夺回艾泽拉斯的魔法，我就给你们！\"\n\tEmoteSurge\t\t= \"%s在注视你！\"\n})\n"
  },
  {
    "path": "DBM-EyeOfEternity/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n---------------\n--  Malygos  --\n---------------\nL = DBM:GetModLocalization(\"Malygos\")\n\nL:SetGeneralLocalization({\n\tname = \"Malygos\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Meine Geduld ist am Ende. Ich werde mich eurer entledigen!\",\n\tEmoteSpark\t= \"Ein Energiefunke bildet sich aus einem nahegelegenen Graben!\",\n\tYellPhase2\t= \"Ich hatte gehofft, eure Leben schnell zu beenden, doch ihr zeigt euch... hartnäckiger als erwartet.\",\n\tYellBreath\t= \"Solange ich atme, werdet ihr nicht obsiegen!\",\n\tYellPhase3\t= \"Eure Wohltäter sind eingetroffen, doch sie kommen zu spät! Die hier gespeicherten Energien reichen aus, die Welt zehnmal zu zerstören. Was, denkt ihr, werden sie mit euch machen?\",\n\tEmoteSurge\t= \"Die Augen von %s sind auf Euch fixiert!\"\n})\n"
  },
  {
    "path": "DBM-EyeOfEternity/localization.en.lua",
    "content": "local L\n\n---------------\n--  Malygos  --\n---------------\nL = DBM:GetModLocalization(\"Malygos\")\n\nL:SetGeneralLocalization({\n\tname = \"Malygos\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"My patience has reached its limit. I will be rid of you!\",\n\tEmoteSpark\t= \"A Power Spark forms from a nearby rift!\",\n\tYellPhase2\t= \"I had hoped to end your lives quickly\",\n--\tEmoteBreath\t= \"%s takes a deep breath.\",\n\tYellBreath\t= \"You will not succeed while I draw breath!\",\n\tYellPhase3\t= \"Now your benefactors make their\",\n--\tEnoughScream\t= \"ENOUGH! If you intend to reclaim Azeroth's magic, then you shall have it!\"\n\tEmoteSurge\t= \"%s fixes his eyes on you!\"\n})\n"
  },
  {
    "path": "DBM-EyeOfEternity/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\nlocal L\n\n-------------\n-- Malygos --\n-------------\nL = DBM:GetModLocalization(\"Malygos\")\n\nL:SetGeneralLocalization({\n\tname = \"Malygos\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Habéis agotado mi paciencia. ¡Me desharé de vosotros!\",\n\tEmoteSpark\t= \"¡Un Chispazo toma forma a partir de una falla cercana!\",\n\tYellPhase2\t= \"Esperaba acabar con vuestras vidas rápidamente\",\n\tYellBreath\t= \"¡No lo conseguiréis mientras me quede aliento!\",\n\tYellPhase3\t= \"Ahora aparecen vuestros benefactores, ¡pero llegan demasiado tarde!\",\n\tEmoteSurge\t= \"¡%s fija su mirada en ti!\"\n})\n"
  },
  {
    "path": "DBM-EyeOfEternity/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\n\nlocal L\n\n---------------\n--  Malygos  --\n---------------\nL = DBM:GetModLocalization(\"Malygos\")\n\nL:SetGeneralLocalization({\n\tname = \"Malygos\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"Ma patience a ses limites. Je vais me débarrasser de vous !\",\n\tEmoteSpark\t\t= \"de puissance surgit\",\n\tYellPhase2\t\t= \"Je pensais mettre rapidement fin à vos existences\",\n\tYellBreath\t\t= \"Vous n'arriverez à rien tant qu'il me restera un souffle !\",\n\tYellPhase3\t\t= \"Vos bienfaiteurs font enfin leur entrée, mais ils arrivent trop tard !\",\n\tEmoteSurge\t\t= \"%s fixe le regard sur vous !\"\n})\n"
  },
  {
    "path": "DBM-EyeOfEternity/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\n\nlocal L\n\n---------------\n--  Malygos  --\n---------------\nL = DBM:GetModLocalization(\"Malygos\")\n\nL:SetGeneralLocalization({\n\tname = \"말리고스\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"더는 참을 수가 없구나. 다 없애 버리겠다!\",\n\tEmoteSpark\t\t= \"마력의 불꽃이 근처에 있는 틈에서 올라옵니다!\",\n\tYellPhase2\t\t= \"되도록 빨리 끝내 주고 싶었다만\",\n\tYellBreath\t\t= \"내가 숨 쉬는 한, 너희는 이길 수 없다!\",\n\tYellPhase3\t\t= \"네놈들의 후원자가 나타났구나\",\n\tEmoteSurge\t\t= \"%s|1이;가; 당신을 주시합니다!\"\n})\n"
  },
  {
    "path": "DBM-EyeOfEternity/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n---------------\n--  Malygos  --\n---------------\nL = DBM:GetModLocalization(\"Malygos\")\n\nL:SetGeneralLocalization({\n\tname = \"Малигос\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Мое терпение лопнуло! Пора от вас избавиться!\",\n\tEmoteSpark\t= \"Искра мощи появляется из ближайшей расселины!\",\n\tYellPhase2\t= \"Я надеялся быстро с вами покончить\",\n--\tEmoteBreath\t= \"%s делает глубокий вдох...\",\n\tYellBreath\t= \"Пока я дышу, вам не добиться своего!\",\n\tYellPhase3\t= \"Вот и ваши благодетели появились\",\n--\tEnoughScream\t= \"ХВАТИТ! Раз вы хотите магии Азерота, то вы ее получите!\"\n\tEmoteSurge\t= \"%s уставился на вас!\"\n})\n"
  },
  {
    "path": "DBM-EyeOfEternity/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n---------------\n--  Malygos  --\n---------------\nL = DBM:GetModLocalization(\"Malygos\")\n\nL:SetGeneralLocalization({\n\tname = \"瑪里苟斯\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"我的耐心到此為止了。我要親自消滅你們!\",\n\tEmoteSpark\t= \"一個力量火花從附近的裂縫中形成。\",\n\tYellPhase2\t= \"我原本只是想盡快結束你們的生命\",\n\tYellBreath\t= \"只要我的龍息尚存，你們就毫無機會!\",\n\tYellPhase3\t= \"現在你們幕後的主使終於出現\",\n\tEmoteSurge\t= \"%s將他的目光鎖在你身上!\"\n})\n"
  },
  {
    "path": "DBM-GUI/DBM-GUI.lua",
    "content": "-- *********************************************************\n-- **               Deadly Boss Mods - GUI                **\n-- **            http://www.deadlybossmods.com            **\n-- *********************************************************\n--\n-- This addon is written and copyrighted by:\n--    * Paul Emmerich (Tandanu @ EU-Aegwynn) (DBM-Core)\n--    * Martin Verges (Nitram @ EU-Azshara) (DBM-GUI)\n--    * Adam Williams (Omegal @ US-Whisperwind) (Primary boss mod author) Contact: mysticalosx@gmail.com (Twitter: @MysticalOS)\n--\n-- The localizations are written by:\n--    * enGB/enUS: Tandanu\t\t\t\thttp://www.deadlybossmods.com\n--    * deDE: Tandanu\t\t\t\t\thttp://www.deadlybossmods.com\n--    * zhCN: Diablohu\t\t\t\t\thttp://www.dreamgen.cn | diablohudream@gmail.com\n--    * ruRU: Swix\t\t\t\t\t\tstalker.kgv@gmail.com\n--    * ruRU: TOM_RUS\n--    * zhTW: Hman\t\t\t\t\t\therman_c1@hotmail.com\n--    * zhTW: Azael/kc10577\t\t\t\tpaul.poon.kw@gmail.com\n--    * koKR: nBlueWiz\t\t\t\t\teverfinale@gmail.com\n--    * esES: Snamor/1nn7erpLaY     \tromanscat@hotmail.com\n--\n-- The ex-translators:\n--    * ruRU: BootWin\t\t\t\t\tbootwin@gmail.com\n--    * ruRU: Vampik\t\t\t\t\tadmin@vampik.ru\n--\n-- Special thanks to:\n--    * Arta\n--    * Tennberg (a lot of fixes in the enGB/enUS localization)\n--\n--\n-- The code of this addon is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License. (see license.txt)\n-- All included textures and sounds are copyrighted by their respective owners, license information for these media files can be found in the modules that make use of them.\n--\n--\n--  You are free:\n--    * to Share - to copy, distribute, display, and perform the work\n--    * to Remix - to make derivative works\n--  Under the following conditions:\n--    * Attribution. You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). (A link to http://www.deadlybossmods.com is sufficient)\n--    * Noncommercial. You may not use this work for commercial purposes.\n--    * Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.\n--\n--\nlocal L = DBM_GUI_L\nlocal CL = DBM_CORE_L\n\nDBM_GUI = {\n\ttabs\t= {},\n\tpanels\t= {}\n}\n\nlocal next, type, pairs, strsplit, tonumber, tostring, ipairs, tinsert, tsort, mfloor, slower = next, type, pairs, strsplit, tonumber, tostring, ipairs, table.insert, table.sort, math.floor, string.lower\nlocal GetExpansionLevel, IsAddOnLoaded, GameFontNormal, GameFontNormalSmall, GameFontHighlight, GameFontHighlightSmall = GetExpansionLevel, IsAddOnLoaded, GameFontNormal, GameFontNormalSmall, GameFontHighlight, GameFontHighlightSmall\nlocal RAID_DIFFICULTY1, RAID_DIFFICULTY2, RAID_DIFFICULTY3, RAID_DIFFICULTY4, PLAYER_DIFFICULTY1, PLAYER_DIFFICULTY2, ALL = RAID_DIFFICULTY1, RAID_DIFFICULTY2, RAID_DIFFICULTY3, RAID_DIFFICULTY4, PLAYER_DIFFICULTY1, PLAYER_DIFFICULTY2, ALL\nlocal LibStub, DBM, DBM_GUI, DBM_OPTION_SPACER = _G[\"LibStub\"], DBM, DBM_GUI, DBM_OPTION_SPACER\nlocal playerName, realmName, playerLevel = UnitName(\"player\"), GetRealmName(), UnitLevel(\"player\")\n\nStaticPopupDialogs[\"IMPORTPROFILE_ERROR\"] = {\n\ttext = \"There are one or more errors importing this profile. Please see the chat for more information. Would you like to continue and reset found errors to default?\",\n\tbutton1 = \"Import and fix\",\n\tbutton2 = \"No\",\n\tOnAccept = function(self)\n\t\tself.importFunc()\n\tend,\n\ttimeout = 0,\n\twhileDead = true,\n\thideOnEscape = true,\n\tpreferredIndex = 3,\n}\n\ndo\n\tlocal soundsRegistered = false\n\n\tfunction DBM_GUI:MixinSharedMedia3(mediatype, mediatable)\n\t\tif not LibStub or not LibStub(\"LibSharedMedia-3.0\", true) then\n\t\t\treturn mediatable\n\t\tend\n\t\tif not soundsRegistered then\n\t\t\tlocal LSM = LibStub(\"LibSharedMedia-3.0\")\n\t\t\tsoundsRegistered = true\n\t\t\t-- register some of our own media\n\t\t\tLSM:Register(\"sound\", \"Long\",\t\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\Long.mp3\")\n\t\t\tLSM:Register(\"sound\", \"Alert\",\t\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\Alert.mp3\")\n\t\t\tLSM:Register(\"sound\", \"Info\",\t\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\Info.mp3\")\n\t\t\t-- Embedded Sound Clip media\n\t\t\tLSM:Register(\"sound\", \"AirHorn (DBM)\", [[Interface\\AddOns\\DBM-Core\\sounds\\AirHorn.ogg]])\n\t\t\tLSM:Register(\"sound\", \"Jaina: Beware\", [[Interface\\AddOns\\DBM-Core\\sounds\\SoundClips\\beware.ogg]])\n\t\t\tLSM:Register(\"sound\", \"Jaina: Beware (reverb)\", [[Interface\\AddOns\\DBM-Core\\sounds\\SoundClips\\beware_with_reverb.ogg]])\n\t\t\tLSM:Register(\"sound\", \"Thrall: That's Incredible!\", [[Interface\\AddOns\\DBM-Core\\sounds\\SoundClips\\incredible.ogg]])\n\t\t\tLSM:Register(\"sound\", \"Saurfang: Don't Die\", [[Interface\\AddOns\\DBM-Core\\sounds\\SoundClips\\dontdie.ogg]])\n\t\t\t-- Blakbyrd\n\t\t\tLSM:Register(\"sound\", \"Blakbyrd Alert 1\", [[Interface\\AddOns\\DBM-Core\\sounds\\BlakbyrdAlerts\\Alert1.ogg]])\n\t\t\tLSM:Register(\"sound\", \"Blakbyrd Alert 2\", [[Interface\\AddOns\\DBM-Core\\sounds\\BlakbyrdAlerts\\Alert2.ogg]])\n\t\t\tLSM:Register(\"sound\", \"Blakbyrd Alert 3\", [[Interface\\AddOns\\DBM-Core\\sounds\\BlakbyrdAlerts\\Alert3.ogg]])\n\t\t\t-- User Media\n\t\t\tif DBM.Options.CustomSounds >= 1 then\n\t\t\t\tLSM:Register(\"sound\", \"DBM: Custom 1\", [[Interface\\AddOns\\DBM-CustomSounds\\Custom1.ogg]])\n\t\t\tend\n\t\t\tif DBM.Options.CustomSounds >= 2 then\n\t\t\t\tLSM:Register(\"sound\", \"DBM: Custom 2\", [[Interface\\AddOns\\DBM-CustomSounds\\Custom2.ogg]])\n\t\t\tend\n\t\t\tif DBM.Options.CustomSounds >= 3 then\n\t\t\t\tLSM:Register(\"sound\", \"DBM: Custom 3\", [[Interface\\AddOns\\DBM-CustomSounds\\Custom3.ogg]])\n\t\t\tend\n\t\t\tif DBM.Options.CustomSounds >= 4 then\n\t\t\t\tLSM:Register(\"sound\", \"DBM: Custom 4\", [[Interface\\AddOns\\DBM-CustomSounds\\Custom4.ogg]])\n\t\t\tend\n\t\t\tif DBM.Options.CustomSounds >= 5 then\n\t\t\t\tLSM:Register(\"sound\", \"DBM: Custom 5\", [[Interface\\AddOns\\DBM-CustomSounds\\Custom5.ogg]])\n\t\t\tend\n\t\t\tif DBM.Options.CustomSounds >= 6 then\n\t\t\t\tLSM:Register(\"sound\", \"DBM: Custom 6\", [[Interface\\AddOns\\DBM-CustomSounds\\Custom6.ogg]])\n\t\t\tend\n\t\t\tif DBM.Options.CustomSounds >= 7 then\n\t\t\t\tLSM:Register(\"sound\", \"DBM: Custom 7\", [[Interface\\AddOns\\DBM-CustomSounds\\Custom7.ogg]])\n\t\t\tend\n\t\t\tif DBM.Options.CustomSounds >= 8 then\n\t\t\t\tLSM:Register(\"sound\", \"DBM: Custom 8\", [[Interface\\AddOns\\DBM-CustomSounds\\Custom8.ogg]])\n\t\t\tend\n\t\t\tif DBM.Options.CustomSounds >= 9 then\n\t\t\t\tLSM:Register(\"sound\", \"DBM: Custom 9\", [[Interface\\AddOns\\DBM-CustomSounds\\Custom9.ogg]])\n\t\t\t\tif DBM.Options.CustomSounds > 9 then\n\t\t\t\t\tDBM.Options.CustomSounds = 9\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\t-- Sort LibSharedMedia keys alphabetically (case-insensitive)\n\t\tlocal hashtable = LibStub(\"LibSharedMedia-3.0\", true):HashTable(mediatype)\n\t\tlocal keytable = {}\n\t\tfor k in next, hashtable do\n\t\t\ttinsert(keytable, k)\n\t\tend\n\t\ttsort(keytable, function(a, b)\n\t\t\treturn a:lower() < b:lower()\n\t\tend);\n\t\t-- DBM values (mediatable) first, LibSharedMedia values (sorted alphabetically) afterwards\n\t\tlocal result = mediatable\n\t\tfor i = 1, #result do\n\t\t\tif mediatype == \"statusbar\" then\n\t\t\t\tresult[i].texture = true\n\t\t\telseif mediatype == \"font\" then\n\t\t\t\tresult[i].font = true\n\t\t\telseif mediatype == \"sound\" then\n\t\t\t\tresult[i].sound = true\n\t\t\tend\n\t\tend\n\t\tfor i = 1, #keytable do\n\t\t\tif mediatype ~= \"sound\" or (keytable[i] ~= \"None\" and keytable[i] ~= \"NPCScan\") then\n\t\t\t\tlocal v = hashtable[keytable[i]]\n\t\t\t\t-- Filter duplicates\n\t\t\t\tlocal insertme = true\n\t\t\t\tfor _, v2 in next, result do\n\t\t\t\t\tif slower(v2.value) == slower(v) then\n\t\t\t\t\t\tinsertme = false\n\t\t\t\t\t\tbreak\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tif insertme then\n\t\t\t\t\tlocal ins = {\n\t\t\t\t\t\ttext\t= keytable[i],\n\t\t\t\t\t\tvalue\t= v\n\t\t\t\t\t}\n\t\t\t\t\tif mediatype == \"statusbar\" then\n\t\t\t\t\t\tins.texture = true\n\t\t\t\t\telseif mediatype == \"font\" then\n\t\t\t\t\t\tins.font = true\n\t\t\t\t\t-- Only insert paths from addons folder, ignore file data ID, since there is no clean way to handle supporitng both FDID and soundkit at same time\n\t\t\t\t\telseif mediatype == \"sound\" and type(v) == \"string\" and v:lower():find(\"addons\") then\n\t\t\t\t\t\tins.sound = true\n\t\t\t\t\tend\n\t\t\t\t\tif ins.texture or ins.font or ins.sound then\n\t\t\t\t\t\ttinsert(result, ins)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\treturn result\n\tend\nend\n\ndo\n\tlocal LibSerialize = LibStub and LibStub(\"LibSerialize\", true)\n\tlocal LibDeflate = LibStub and LibStub(\"LibDeflate\", true)\n\tlocal AceGUI = LibStub and LibStub(\"AceGUI-3.0\", true)\n\n\tlocal canWeWork = (LibSerialize and LibDeflate and AceGUI)\n\tlocal popupFrame\n\n\tlocal function createPopupFrame(title, subtitle, content, status, importFunc)\n\t\tpopupFrame = AceGUI:Create(\"Frame\")\n\t\tpopupFrame:SetTitle(title)\n\t\tpopupFrame:SetLayout(\"Flow\")\n\t\tpopupFrame:SetCallback(\"OnClose\", function(widget)\n\t\t\tAceGUI:Release(widget)\n\t\t\tcollectgarbage()\n\t\tend)\n\t\tpopupFrame:SetWidth(535)\n\t\tpopupFrame:SetHeight(350)\n\n\t\tlocal editbox = AceGUI:Create(\"MultiLineEditBox\")\n\t\teditbox.editBox:SetFontObject(GameFontHighlightSmall)\n\t\teditbox:SetFullWidth(true)\n\t\teditbox:SetFullHeight(true)\n\t\tpopupFrame:AddChild(editbox)\n\t\tpopupFrame.editbox = editbox\n\n\t\t-- close on escape\n\t\t_G[\"DBMImportExportFrame\"] = popupFrame.frame\n\t\tUISpecialFrames[#UISpecialFrames + 1] = \"DBMImportExportFrame\"\n\n\t\tpopupFrame.importFunc = importFunc\n\t\tpopupFrame:SetStatusText(status or \"\")\n\t\teditbox:SetLabel(subtitle)\n\n\t\tif content then\n\t\t\teditbox:DisableButton(true)\n\t\t\teditbox:SetText(content)\n\t\t\teditbox.editBox:SetFocus()\n\t\t\teditbox.editBox:HighlightText()\n\t\t\teditbox:SetCallback(\"OnLeave\", function(widget)\n\t\t\t\twidget.editBox:HighlightText()\n\t\t\t\twidget.editBox:SetFocus()\n\t\t\tend)\n\t\t\teditbox:SetCallback(\"OnEnter\", function(widget)\n\t\t\t\twidget.editBox:HighlightText()\n\t\t\t\twidget.editBox:SetFocus()\n\t\t\tend)\n\t\telse\n\t\t\teditbox:DisableButton(false)\n\t\t\teditbox.editBox:SetFocus()\n\t\t\teditbox.button:SetScript(\"OnClick\", function()\n\t\t\t\tDBM_GUI:ImportProfile(editbox:GetText())\n\t\t\t\tAceGUI:Release(popupFrame)\n\t\t\t\tcollectgarbage()\n\t\t\tend)\n\t\tend\n\tend\n\n\tfunction DBM_GUI:CreateExportProfile(export)\n\t\tif not canWeWork then\n\t\t\tDBM:AddMsg(\"Missing required libraries to export.\")\n\t\t\treturn\n\t\tend\n\t\texport = LibDeflate:EncodeForPrint(LibDeflate:CompressDeflate(LibSerialize:Serialize(export), {level = 9}))\n\t\tcreatePopupFrame(L.ButtonExportProfile, L.ProfileExportTitle, export, L.ProfileExportSubtitle)\n\tend\n\n\tfunction DBM_GUI:CreateImportProfile(importFunc)\n\t\tif not canWeWork then\n\t\t\tDBM:AddMsg(\"Missing required libraries to export.\")\n\t\t\treturn\n\t\tend\n\t\tcreatePopupFrame(L.ButtonImportProfile, L.ProfileImportTitle, nil, L.ProfileImportSubtitle, importFunc)\n\tend\n\n\tfunction DBM_GUI:ImportProfile(import)\n\t\tlocal success, deserialized = LibSerialize:Deserialize(LibDeflate:DecompressDeflate(LibDeflate:DecodeForPrint(import)))\n\t\tif not success then\n\t\t\tDBM:AddMsg(\"Failed to deserialize\")\n\t\t\treturn false\n\t\telseif popupFrame.importFunc then\n\t\t\tpopupFrame.importFunc(deserialized)\n\t\t\treturn true\n\t\tend\n\tend\nend\n\ndo\n\tlocal framecount = 0\n\n\tfunction DBM_GUI:GetNewID()\n\t\tframecount = framecount + 1\n\t\treturn framecount\n\tend\n\n\tfunction DBM_GUI:GetCurrentID()\n\t\treturn framecount\n\tend\nend\n\nfunction DBM_GUI:ShowHide(forceshow)\n\tlocal optionsFrame = _G[\"DBM_GUI_OptionsFrame\"]\n\tif forceshow == true then\n\t\tself:UpdateModList()\n\t\toptionsFrame:Show()\n\telseif forceshow == false then\n\t\toptionsFrame:Hide()\n\telse\n\t\tif optionsFrame:IsShown() then\n\t\t\toptionsFrame:Hide()\n\t\telse\n\t\t\tself:UpdateModList()\n\t\t\toptionsFrame:Show()\n\t\tend\n\tend\nend\n\nlocal catbutton, lastButton, addSpacer\nlocal function addOptions(mod, catpanel, v)\n\tif v == DBM_OPTION_SPACER then\n\t\taddSpacer = true\n\telse\n\t\tlastButton = catbutton\n\t\tif v.line then\n\t\t\tcatbutton = catpanel:CreateLine(v.text)\n\t\telseif type(mod.Options[v]) == \"boolean\" then\n\t\t\tif mod.Options[v .. \"TColor\"] then\n\t\t\t\tcatbutton = catpanel:CreateCheckButton(mod.localization.options[v], true, nil, nil, nil, mod, v, nil, true)\n\t\t\telseif mod.Options[v .. \"SWSound\"] then\n\t\t\t\tcatbutton = catpanel:CreateCheckButton(mod.localization.options[v], true, nil, nil, nil, mod, v)\n\t\t\telse\n\t\t\t\tcatbutton = catpanel:CreateCheckButton(mod.localization.options[v], true)\n\t\t\tend\n\t\t\tcatbutton:SetScript(\"OnShow\", function(self)\n\t\t\t\tself:SetChecked(mod.Options[v])\n\t\t\tend)\n\t\t\tcatbutton:SetScript(\"OnClick\", function(self)\n\t\t\t\tmod.Options[v] = not mod.Options[v]\n\t\t\t\tif mod.optionFuncs and mod.optionFuncs[v] then\n\t\t\t\t\tmod.optionFuncs[v]()\n\t\t\t\tend\n\t\t\tend)\n\t\telseif mod.buttons and mod.buttons[v] then\n\t\t\tlocal but = mod.buttons[v]\n\t\t\tcatbutton = catpanel:CreateButton(v, but.width, but.height, but.onClick, but.fontObject)\n\t\t\tif not addSpacer then\n\t\t\t\tcatbutton:SetPoint('TOPLEFT', lastButton, \"TOPLEFT\", 0, -25)\n\t\t\tend\n\t\telseif mod.editboxes and mod.editboxes[v] then\n\t\t\tlocal editBox = mod.editboxes[v]\n\t\t\tcatbutton = catpanel:CreateEditBox(mod.localization.options[v], mod.Options[v], editBox.width, editBox.height)\n\t\t\tcatbutton:SetScript(\"OnEnterPressed\", function(self)\n\t\t\t\tif mod.optionFuncs and mod.optionFuncs[v] then\n\t\t\t\t\tmod.optionFuncs[v]()\n\t\t\t\tend\n\t\t\tend)\n\t\t\tif not addSpacer then\n\t\t\t\tcatbutton:SetPoint('TOPLEFT', lastButton, \"TOPLEFT\", 0, -25)\n\t\t\tend\n\t\telseif mod.sliders and mod.sliders[v] then\n\t\t\tlocal slider = mod.sliders[v]\n\t\t\tcatbutton = catpanel:CreateSlider(mod.localization.options[v], slider.minValue, slider.maxValue, slider.valueStep)\n\t\t\tcatbutton:SetScript(\"OnShow\", function(self)\n\t\t\t\tself:SetValue(mod.Options[v])\n\t\t\tend)\n\t\t\tcatbutton:HookScript(\"OnValueChanged\", function(self)\n\t\t\t\tif mod.optionFuncs and mod.optionFuncs[v] then\n\t\t\t\t\tmod.optionFuncs[v]()\n\t\t\t\tend\n\t\t\tend)\n\t\t\tif not addSpacer then\n\t\t\t\tcatbutton:SetPoint('TOPLEFT', lastButton, \"TOPLEFT\", 0, -35)\n\t\t\tend\n\t\telseif mod.dropdowns and mod.dropdowns[v] then\n\t\t\tlocal dropdownOptions = {}\n\t\t\tfor _, val in ipairs(mod.dropdowns[v]) do\n\t\t\t\ttinsert(dropdownOptions, {\n\t\t\t\t\ttext\t= mod.localization.options[val],\n\t\t\t\t\tvalue\t= val\n\t\t\t\t})\n\t\t\tend\n\t\t\tcatbutton = catpanel:CreateDropdown(mod.localization.options[v], dropdownOptions, mod, v, function(value)\n\t\t\t\tmod.Options[v] = value\n\t\t\t\tif mod.optionFuncs and mod.optionFuncs[v] then\n\t\t\t\t\tmod.optionFuncs[v]()\n\t\t\t\tend\n\t\t\tend, nil, 32)\n\t\t\tif not addSpacer then\n\t\t\t\tcatbutton:SetPoint(\"TOPLEFT\", lastButton, \"BOTTOMLEFT\", 0, ElvUI and DBM.Options.GroupOptionsBySpell and -20 or -10) -- custom values to attempt to provide better fit for dropdowns\n\t\t\tend\n\t\tend\n\t\tif addSpacer then\n\t\t\tcatbutton:SetPoint(\"TOPLEFT\", lastButton, \"BOTTOMLEFT\", 0, -6)\n\t\t\taddSpacer = false\n\t\tend\n\tend\nend\n\nfunction DBM_GUI:CreateBossModPanel(mod)\n\tif not mod.panel then\n\t\tDBM:AddMsg(\"Couldn't create boss mod panel for \" .. mod.localization.general.name)\n\t\treturn false\n\tend\n\tlocal panel = mod.panel\n\tlocal category\n\n\tlocal iconstat = panel.frame:CreateFontString(\"DBM_GUI_Mod_Icons\" .. mod.localization.general.name, \"ARTWORK\")\n\ticonstat:SetPoint(\"TOP\", panel.frame, 0, -10)\n\ticonstat:SetFontObject(GameFontNormal)\n\ticonstat:SetText(L.IconsInUse)\n\tfor i = 1, 8 do\n\t\tlocal icon = panel.frame:CreateTexture()\n\t\ticon:SetTexture(\"Interface\\\\TargetingFrame\\\\UI-RaidTargetingIcons.blp\")\n\t\ticon:SetPoint(\"TOP\", panel.frame, 81 - (i * 18), -26)\n\t\ticon:SetSize(16, 16)\n\t\tif not mod.usedIcons or not mod.usedIcons[i] then\n\t\t\ticon:SetAlpha(0.25)\n\t\tend\n\t\tif\t\ti == 1 then\t\ticon:SetTexCoord(0,\t\t0.25,\t0,\t\t0.25)\n\t\telseif\ti == 2 then\t\ticon:SetTexCoord(0.25,\t0.5,\t0,\t\t0.25)\n\t\telseif\ti == 3 then\t\ticon:SetTexCoord(0.5,\t0.75,\t0,\t\t0.25)\n\t\telseif\ti == 4 then\t\ticon:SetTexCoord(0.75,\t1,\t\t0,\t\t0.25)\n\t\telseif\ti == 5 then\t\ticon:SetTexCoord(0,\t\t0.25,\t0.25,\t0.5)\n\t\telseif\ti == 6 then\t\ticon:SetTexCoord(0.25,\t0.5,\t0.25,\t0.5)\n\t\telseif\ti == 7 then\t\ticon:SetTexCoord(0.5,\t0.75,\t0.25,\t0.5)\n\t\telseif\ti == 8 then\t\ticon:SetTexCoord(0.75,\t1,\t\t0.25,\t0.5)\n\t\tend\n\tend\n\n\tlocal reset = panel:CreateButton(L.Mod_Reset, 155, 30, nil, GameFontNormalSmall)\n\treset.myheight = 40\n\treset:SetPoint(\"TOPRIGHT\", panel.frame, \"TOPRIGHT\", -24, -4)\n\treset:SetScript(\"OnClick\", function(self)\n\t\tDBM:LoadModDefaultOption(mod)\n\tend)\n\tlocal button = panel:CreateCheckButton(L.Mod_Enabled, true)\n\tbutton:SetChecked(mod.Options.Enabled)\n\tbutton:SetPoint(\"TOPLEFT\", panel.frame, \"TOPLEFT\", 8, -14)\n\tbutton:SetScript(\"OnClick\", function(self)\n\t\tmod:Toggle()\n\tend)\n\n\tif mod.addon and not mod.addon.oldOptions and DBM.Options.GroupOptionsBySpell then\n\t\tfor spellID, options in getmetatable(mod.groupOptions).__pairs(mod.groupOptions) do\n\t\t\tif spellID:find(\"^line\") then\n\t\t\t\tpanel:CreateLine(options)\n\t\t\telse\n\t\t\t\tlocal title, desc, _, icon\n\t\t\t\tif tonumber(spellID) then\n\t\t\t\t\tlocal _title = DBM:GetSpellInfo(spellID)\n\t\t\t\t\tif _title then\n\t\t\t\t\t\ttitle, desc, icon = _title, tonumber(spellID), select(3, GetSpellInfo(spellID))\n\t\t\t\t\telse--Not a valid spellid (Such as a ptr/beta mod loaded on live\n\t\t\t\t\t\ttitle, desc, icon = spellID, L.NoDescription, \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\"\n\t\t\t\t\tend\n\t\t\t\t-- elseif spellID:find(\"^ej\") then\n\t\t\t\t--\ttitle, desc, _, icon = DBM:EJ_GetSectionInfo(spellID:gsub(\"ej\", \"\"))\n\t\t\t\telseif spellID:find(\"^at\") then\n\t\t\t\t\tspellID = spellID:gsub(\"at\", \"\")\n\t\t\t\t\t_, title, _, _, _, _, _, desc, _, icon = GetAchievementInfo(spellID)\n\t\t\t\telse\n\t\t\t\t\ttitle = spellID\n\t\t\t\tend\n\t\t\t\tlocal catpanel = panel:CreateAbility(title, icon)\n\t\t\t\tif desc then\n\t\t\t\t\tcatpanel:CreateSpellDesc(desc)\n\t\t\t\tend\n\t\t\t\tcatbutton, lastButton, addSpacer = nil, nil, nil\n\t\t\t\tfor _, v in ipairs(options) do\n\t\t\t\t\taddOptions(mod, catpanel, v)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal scannedCategories = {}\n\tfor _, catident in pairs(mod.categorySort) do\n\t\tcategory = mod.optionCategories[catident]\n\t\tif not scannedCategories[catident] and category then\n\t\t\tscannedCategories[catident] = true\n\t\t\tlocal catpanel = panel:CreateArea(mod.localization.cats[catident])\n\t\t\tcatbutton, lastButton, addSpacer = nil, nil, nil\n\t\t\tfor _, v in ipairs(category) do\n\t\t\t\taddOptions(mod, catpanel, v)\n\t\t\tend\n\t\tend\n\tend\nend\n\nlocal function GetSpecializationGroup()\n\tlocal numTabs = GetNumTalentTabs()\n\tlocal highestPointsSpent, currentSpecGroup = 0, 1\n\tif MAX_TALENT_TABS then\n\t\tfor i=1, MAX_TALENT_TABS do\n\t\t\tif ( i <= numTabs ) then\n\t\t\t\tlocal _, _, pointsSpent = GetTalentTabInfo(i)\n\t\t\t\tif pointsSpent > highestPointsSpent then\n\t\t\t\t\thighestPointsSpent = pointsSpent\n\t\t\t\t\tcurrentSpecGroup = i\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\treturn currentSpecGroup\nend\n\ndo\n\tlocal function CreateBossModTab(addon, panel, subtab)\n\t\tif not panel then\n\t\t\terror(\"Panel is nil\", 2)\n\t\tend\n\n\t\tlocal modProfileArea\n\t\tif not subtab then\n\t\t\tlocal modProfileDropdown = {}\n\t\t\tmodProfileArea = panel:CreateArea(L.Area_ModProfile)\n\t\t\tmodProfileArea.frame:SetPoint(\"TOPLEFT\", 10, -25)\n\t\t\tlocal resetButton = modProfileArea:CreateButton(L.ModAllReset, 200, 20)\n\t\t\tresetButton:SetPoint(\"TOPLEFT\", 10, -14)\n\t\t\tresetButton:SetScript(\"OnClick\", function()\n\t\t\t\tDBM:LoadAllModDefaultOption(addon.modId)\n\t\t\tend)\n\t\t\tfor charname, charTable in pairs(_G[addon.modId:gsub(\"-\", \"\") .. \"_AllSavedVars\"] or {}) do\n\t\t\t\tfor _, optionTable in pairs(charTable) do\n\t\t\t\t\tif type(optionTable) == \"table\" then\n\t\t\t\t\t\tfor i = 0, 3 do\n\t\t\t\t\t\t\tif optionTable[i] then\n\t\t\t\t\t\t\t\ttinsert(modProfileDropdown, {\n\t\t\t\t\t\t\t\t\ttext\t= (i == 0 and charname .. \" (\" .. ALL .. \")\") or charname .. \" (\" .. CL.SPECIALIZATION .. i .. \"-\" .. (charTable[\"talent\" .. i] or \"\") .. \")\",\n\t\t\t\t\t\t\t\t\tvalue\t= charname .. \"|\" .. tostring(i)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\tbreak\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\n\t\t\tlocal resetStatButton = modProfileArea:CreateButton(L.ModAllStatReset, 200, 20)\n\t\t\tresetStatButton.myheight = 0\n\t\t\tresetStatButton:SetPoint(\"LEFT\", resetButton, \"RIGHT\", 40, 0)\n\t\t\tresetStatButton:SetScript(\"OnClick\", function()\n\t\t\t\tDBM:ClearAllStats(addon.modId)\n\t\t\tend)\n\n\t\t\tlocal refresh\n\n\t\t\tlocal copyModProfile = modProfileArea:CreateDropdown(L.SelectModProfileCopy, modProfileDropdown, nil, nil, function(value)\n\t\t\t\tlocal name, profile = strsplit(\"|\", value)\n\t\t\t\tDBM:CopyAllModOption(addon.modId, name, tonumber(profile))\n\t\t\t\tDBM:Schedule(0.05, refresh)\n\t\t\tend, 100)\n\t\t\tcopyModProfile:SetPoint(\"TOPLEFT\", -7, -54)\n\t\t\tcopyModProfile:SetScript(\"OnShow\", function()\n\t\t\t\tcopyModProfile.value = nil\n\t\t\t\tcopyModProfile.text = nil\n\t\t\t\t_G[copyModProfile:GetName() .. \"Text\"]:SetText(\"\")\n\t\t\tend)\n\n\t\t\tlocal copyModSoundProfile = modProfileArea:CreateDropdown(L.SelectModProfileCopySound, modProfileDropdown, nil, nil, function(value)\n\t\t\t\tlocal name, profile = strsplit(\"|\", value)\n\t\t\t\tDBM:CopyAllModTypeOption(addon.modId, name, tonumber(profile), \"SWSound\")\n\t\t\t\tDBM:Schedule(0.05, refresh)\n\t\t\tend, 100)\n\t\t\tcopyModSoundProfile.myheight = 0\n\t\t\tcopyModSoundProfile:SetPoint(\"LEFT\", copyModProfile, \"RIGHT\", 27, 0)\n\t\t\tcopyModSoundProfile:SetScript(\"OnShow\", function()\n\t\t\t\tcopyModSoundProfile.value = nil\n\t\t\t\tcopyModSoundProfile.text = nil\n\t\t\t\t_G[copyModSoundProfile:GetName() .. \"Text\"]:SetText(\"\")\n\t\t\tend)\n\n\t\t\tlocal copyModNoteProfile = modProfileArea:CreateDropdown(L.SelectModProfileCopyNote, modProfileDropdown, nil, nil, function(value)\n\t\t\t\tlocal name, profile = strsplit(\"|\", value)\n\t\t\t\tDBM:CopyAllModTypeOption(addon.modId, name, tonumber(profile), \"SWNote\")\n\t\t\t\tDBM:Schedule(0.05, refresh)\n\t\t\tend, 100)\n\t\t\tcopyModNoteProfile.myheight = 0\n\t\t\tcopyModNoteProfile:SetPoint(\"LEFT\", copyModSoundProfile, \"RIGHT\", 27, 0)\n\t\t\tcopyModNoteProfile:SetScript(\"OnShow\", function()\n\t\t\t\tcopyModNoteProfile.value = nil\n\t\t\t\tcopyModNoteProfile.text = nil\n\t\t\t\t_G[copyModNoteProfile:GetName() .. \"Text\"]:SetText(\"\")\n\t\t\tend)\n\n\t\t\tlocal currentModProfile = modProfileArea:CreateDropdown(L.SelectModProfileCurrent, modProfileDropdown, nil, nil, function(value)\n\t\t\t\tlocal name, profile = strsplit(\"|\", value)\n\t\t\t\tDBM:LoadModOptions(addon.modId, nil, nil, name, tonumber(profile))\n\t\t\t\tDBM:AddMsg(\"This is not intended to be used as a profile selector, but rather show you which boss mod profile is currently loaded. Any profile that is manually loaded will default back to its original after a UI reload.\")\n\t\t\t\tDBM:Schedule(0.05, refresh)\n\t\t\tend, 258)\n\t\t\tcurrentModProfile.myheight = 0\n\t\t\tcurrentModProfile:SetPoint(\"TOPLEFT\", copyModProfile, \"BOTTOMLEFT\", 0, -10)\n\t\t\tcurrentModProfile:SetScript(\"OnShow\", function()\n\t\t\t\tlocal fullname = DBM.Options.PerCharacterSettings and playerName..\"-\"..realmName or \"Global\"\n\t\t\t\tlocal profileID = playerLevel > 9 and DBM_UseDualProfile and GetSpecializationGroup() or 0\n\t\t\t\tif not currentModProfile.value or currentModProfile.value ~=  fullname..\"|\"..profileID then\n\t\t\t\t\tfor _, v in pairs(modProfileDropdown) do\n\t\t\t\t\t\tif v.value == fullname..\"|\"..profileID then\n\t\t\t\t\t\t\tcurrentModProfile:SetSelectedValue(v.text)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend)\n\n\t\t\tlocal deleteModProfile = modProfileArea:CreateDropdown(L.SelectModProfileDelete, modProfileDropdown, nil, nil, function(value)\n\t\t\t\tlocal name, profile = strsplit(\"|\", value)\n\t\t\t\tDBM:DeleteAllModOption(addon.modId, name, tonumber(profile))\n\t\t\t\tDBM:Schedule(0.05, refresh)\n\t\t\tend, 100)\n\t\t\tdeleteModProfile.myheight = 60\n\t\t\tdeleteModProfile:SetPoint(\"TOPLEFT\", copyModNoteProfile, \"BOTTOMLEFT\", 0, -10)\n\t\t\tdeleteModProfile:SetScript(\"OnShow\", function()\n\t\t\t\tdeleteModProfile.value = nil\n\t\t\t\tdeleteModProfile.text = nil\n\t\t\t\t_G[deleteModProfile:GetName() .. \"Text\"]:SetText(\"\")\n\t\t\tend)\n\n\t\t\tfunction refresh()\n\t\t\t\tcopyModProfile:GetScript(\"OnShow\")()\n\t\t\t\tcopyModSoundProfile:GetScript(\"OnShow\")()\n\t\t\t\tcopyModNoteProfile:GetScript(\"OnShow\")()\n\t\t\t\tcurrentModProfile:GetScript(\"OnShow\")()\n\t\t\t\tdeleteModProfile:GetScript(\"OnShow\")()\n\t\t\tend\n\n\t\t\t-- Start import/export\n\t\t\tlocal fullname = DBM.Options.PerCharacterSettings and playerName..\"-\"..realmName or \"Global\"\n\t\t\tlocal function actuallyImport(importTable)\n\t\t\t\tlocal profileID = playerLevel > 9 and DBM_UseDualProfile and GetSpecializationGroup() or 0\n\t\t\t\tfor _, id in ipairs(DBM.ModLists[addon.modId]) do\n\t\t\t\t\t_G[addon.modId:gsub(\"-\", \"\") .. \"_AllSavedVars\"][fullname][id][profileID] = importTable[id]\n\t\t\t\t\tDBM:GetModByName(id).Options = importTable[id]\n\t\t\t\tend\n\t\t\t\tDBM:AddMsg(\"Profile imported.\")\n\t\t\tend\n\n\t\t\tlocal importExportProfilesArea = panel:CreateArea(L.Area_ImportExportProfile)\n\t\t\tlocal test = importExportProfilesArea:CreateText(L.ImportExportInfo, nil, true)\n\t\t\ttest:SetPoint(\"TOPLEFT\", 15, -10)\n\t\t\tlocal exportProfile = importExportProfilesArea:CreateButton(L.ButtonExportProfile, 120, 20, function()\n\t\t\t\tlocal exportProfile = {}\n\t\t\t\tlocal profileID = playerLevel > 9 and DBM_UseDualProfile and GetSpecializationGroup() or 0\n\t\t\t\tfor _, id in ipairs(DBM.ModLists[addon.modId]) do\n\t\t\t\t\texportProfile[id] = _G[addon.modId:gsub(\"-\", \"\") .. \"_AllSavedVars\"][fullname][id][profileID]\n\t\t\t\tend\n\t\t\t\tDBM_GUI:CreateExportProfile(exportProfile)\n\t\t\tend)\n\t\t\texportProfile.myheight = 0\n\t\t\texportProfile:SetPoint(\"TOPLEFT\", 12, -25)\n\t\t\tlocal importProfile = importExportProfilesArea:CreateButton(L.ButtonImportProfile, 120, 20, function()\n\t\t\t\tDBM_GUI:CreateImportProfile(function(importTable)\n\t\t\t\t\tlocal errors = {}\n\t\t\t\t\tfor id, table in pairs(importTable) do\n\t\t\t\t\t\t-- Check if sound packs are missing\n\t\t\t\t\t\tfor settingName, settingValue in pairs(table) do\n\t\t\t\t\t\t\tlocal ending = settingName:sub(-6):lower()\n\t\t\t\t\t\t\tif ending == \"cvoice\" or ending == \"wsound\" then -- CVoice or SWSound (s is ignored so we only have to sub once)\n\t\t\t\t\t\t\t\tif type(settingValue) == \"string\" and settingValue:lower() ~= \"none\" and not DBM:ValidateSound(settingValue, true, true) then\n\t\t\t\t\t\t\t\t\ttinsert(errors, id .. \"-\" .. settingName)\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\t-- Create popup confirming if they wish to continue (and therefor resetting to default)\n\t\t\t\t\tif #errors > 0 then\n\t\t\t\t\t\tlocal popup = StaticPopup_Show(\"IMPORTPROFILE_ERROR\")\n\t\t\t\t\t\tif popup then\n\t\t\t\t\t\t\tpopup.importFunc = function()\n\t\t\t\t\t\t\t\tlocal modOptions = {}\n\t\t\t\t\t\t\t\tfor _, soundSetting in ipairs(errors) do\n\t\t\t\t\t\t\t\t\tlocal modID, settingName = soundSetting:match(\"([^-]+)-([^-]+)\")\n\t\t\t\t\t\t\t\t\tif not modOptions[modID] then\n\t\t\t\t\t\t\t\t\t\tmodOptions[modID] = DBM:GetModByName(modID).DefaultOptions\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\timportTable[modID][settingName] = modOptions[modID][settingName]\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tactuallyImport(importTable)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\telse\n\t\t\t\t\t\tactuallyImport(importTable)\n\t\t\t\t\tend\n\t\t\t\tend)\n\t\t\tend)\n\t\t\timportProfile.myheight = 0\n\t\t\timportProfile:SetPoint(\"LEFT\", exportProfile, \"RIGHT\", 2, 0)\n\t\tend\n\n\t\tif addon.noStatistics then\n\t\t\treturn\n\t\tend\n\n\t\tlocal ptext = panel:CreateText(L.BossModLoaded:format(subtab and addon.subTabs[subtab] or addon.name), nil, nil, nil, \"CENTER\")\n\t\tptext:SetPoint(\"TOPLEFT\", panel.frame, \"TOPLEFT\", 10, modProfileArea and -245 or -10)\n\n\t\tlocal singleLine, doubleLine, noHeaderLine = 0, 0, 0\n\t\tlocal area = panel:CreateArea()\n\t\tarea.frame.isStats = true\n\t\tarea.frame:SetPoint(\"TOPLEFT\", 10, modProfileArea and -260 or -25)\n\n\t\tlocal statOrder = {\n\t\t\t\"normal\", \"normal25\", \"heroic\", \"heroic25\", \"mythic\", \"timewalker\"\n\t\t}\n\n\t\tfor _, mod in ipairs(DBM.Mods) do\n\t\t\tif mod.modId == addon.modId and (not subtab or subtab == mod.subTab) and not mod.isTrashMod and not mod.noStatistics then\n\t\t\t\tif not mod.stats then\n\t\t\t\t\tmod.stats = {}\n\t\t\t\tend\n\n\t\t\t\t--Create Frames\n\t\t\t\tlocal statSplit, statCount = {}, 0\n\t\t\t\tfor stat in (mod.statTypes or mod.addon.statTypes):gmatch(\"%s?([^%s,]+)%s?,?\") do\n\t\t\t\t\tstatSplit[stat] = true\n\t\t\t\t\tstatCount = statCount + 1\n\t\t\t\tend\n\n\t\t\t\tif statCount == 0 then\n\t\t\t\t\tDBM:AddMsg(\"No statTypes available for \" .. mod.modId)\n\t\t\t\t\treturn -- No stats available for this? Possibly a bug\n\t\t\t\tend\n\n\t\t\t\tlocal Title\t\t\t= area:CreateText(mod.localization.general.name, nil, nil, GameFontHighlight, \"LEFT\")\n\n\t\t\t\tlocal function CreateText(text, header)\n\t\t\t\t\tlocal frame = area:CreateText(text or \"\", nil, nil, header and GameFontHighlightSmall or GameFontNormalSmall, \"LEFT\")\n\t\t\t\t\tframe:Hide()\n\t\t\t\t\treturn frame\n\t\t\t\tend\n\n\t\t\t\tlocal sections = {}\n\t\t\t\tfor i = 1, 6 do\n\t\t\t\t\tlocal section = {}\n\t\t\t\t\tsection.header\t= CreateText(nil, true)\n\t\t\t\t\tsection.text1\t= CreateText(L.Statistic_Kills)\n\t\t\t\t\tsection.text2\t= CreateText(L.Statistic_Wipes)\n\t\t\t\t\tsection.text3\t= CreateText(L.Statistic_BestKill)\n\t\t\t\t\tsection.value1\t= CreateText()\n\t\t\t\t\tsection.value2\t= CreateText()\n\t\t\t\t\tsection.value3\t= CreateText()\n\t\t\t\t\tif i == 1 then\n\t\t\t\t\t\tsection.header:SetPoint(\"TOPLEFT\", Title, \"BOTTOMLEFT\", 20, -5)\n\t\t\t\t\telseif i == 4 then\n\t\t\t\t\t\tsection.header:SetPoint(\"TOPLEFT\", sections[1].text3, \"BOTTOMLEFT\", -20, -5)\n\t\t\t\t\telse\n\t\t\t\t\t\tsection.header:SetPoint(\"LEFT\", sections[i - 1].header, \"LEFT\", 150, 0)\n\t\t\t\t\tend\n\t\t\t\t\tsection.text1:SetPoint(\"TOPLEFT\", section.header, \"BOTTOMLEFT\", 20, -5)\n\t\t\t\t\tsection.text2:SetPoint(\"TOPLEFT\", section.text1, \"BOTTOMLEFT\", 0, -5)\n\t\t\t\t\tsection.text3:SetPoint(\"TOPLEFT\", section.text2, \"BOTTOMLEFT\", 0, -5)\n\t\t\t\t\tsection.value1:SetPoint(\"TOPLEFT\", section.text1, \"TOPLEFT\", 80, 0)\n\t\t\t\t\tsection.value2:SetPoint(\"TOPLEFT\", section.text2, \"TOPLEFT\", 80, 0)\n\t\t\t\t\tsection.value3:SetPoint(\"TOPLEFT\", section.text3, \"TOPLEFT\", 80, 0)\n\t\t\t\t\tsection.header.OldSetText = section.header.SetText\n\t\t\t\t\tsection.header.SetText = function(self, text)\n\t\t\t\t\t\tself:OldSetText(text)\n\t\t\t\t\t\tself:Show()\n\t\t\t\t\t\tsection.text1:Show()\n\t\t\t\t\t\tsection.text2:Show()\n\t\t\t\t\t\tsection.text3:Show()\n\t\t\t\t\t\tsection.value1:Show()\n\t\t\t\t\t\tsection.value2:Show()\n\t\t\t\t\t\tsection.value3:Show()\n\t\t\t\t\tend\n\t\t\t\t\tsections[i] = section\n\t\t\t\tend\n\n\t\t\t\tlocal statTypes = {\n\t\t\t\t\tnormal\t\t= RAID_DIFFICULTY1,\n\t\t\t\t\tnormal25\t= RAID_DIFFICULTY2,\n\t\t\t\t\theroic\t\t= RAID_DIFFICULTY3,\n\t\t\t\t\theroic25\t= RAID_DIFFICULTY4,\n\t\t\t\t\tmythic\t\t= L.PLAYER_DIFFICULTY6,\n\t\t\t\t\ttimewalker\t= L.PLAYER_DIFFICULTY_TIMEWALKER\n\t\t\t\t}\n\t\t\t\tif mod.addon.type == \"PARTY\" or -- Fixes dungeons being labled incorrectly\n\t\t\t\t\t(mod.addon.type == \"RAID\" and statSplit[\"timewalker\"]) then -- Fixes raids with timewalker being labled incorrectly\n\t\t\t\t\tstatTypes.normal = PLAYER_DIFFICULTY1\n\t\t\t\t\tstatTypes.heroic = PLAYER_DIFFICULTY2\n\t\t\t\tend\n\n\t\t\t\tlocal lastArea = 0\n\n\t\t\t\tfor _, statType in ipairs(statOrder) do\n\t\t\t\t\tif statSplit[statType] then\n\t\t\t\t\t\tif lastArea == 2 and statCount == 4 then -- Use top1, top2, bottom1, bottom2\n\t\t\t\t\t\t\tlastArea = 3\n\t\t\t\t\t\tend\n\t\t\t\t\t\tlastArea = lastArea + 1\n\t\t\t\t\t\tlocal section = sections[lastArea]\n\t\t\t\t\t\tsection.header:SetText(statTypes[statType])\n\t\t\t\t\t\tlocal kills, pulls, bestRank, bestTime = mod.stats[statType .. \"Kills\"] or 0, mod.stats[statType .. \"Pulls\"] or 0, mod.stats[statType .. \"BestRank\"] or 0, mod.stats[statType .. \"BestTime\"]\n\t\t\t\t\t\tsection.value1:SetText(kills)\n\t\t\t\t\t\tsection.value2:SetText(pulls - kills)\n\t\t\t\t\t\tif statType == \"challenge\" and bestRank > 0 then\n\t\t\t\t\t\t\tsection.value3:SetText(bestTime and (\"%d:%02d (%d)\"):format(mfloor(bestTime / 60), bestTime % 60) or \"-\", bestRank)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tsection.value3:SetText(bestTime and (\"%d:%02d\"):format(mfloor(bestTime / 60), bestTime % 60) or \"-\")\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tTitle:SetPoint(\"TOPLEFT\", area.frame, \"TOPLEFT\", 10, -10 - (L.FontHeight * 5 * noHeaderLine) - (L.FontHeight * 6 * singleLine) - (L.FontHeight * 10 * doubleLine))\n\t\t\t\tif statCount == 1 then\n\t\t\t\t\tsections[1].header:Hide()\n\t\t\t\t\tsections[1].text1:SetPoint(\"TOPLEFT\", Title, \"BOTTOMLEFT\", 20, -5)\n\t\t\t\t\tnoHeaderLine = noHeaderLine + 1\n\t\t\t\t\tarea.frame:SetHeight(area.frame:GetHeight() + L.FontHeight * 5)\n\t\t\t\telseif statCount < 4 then\n\t\t\t\t\tsingleLine = singleLine + 1\n\t\t\t\t\tarea.frame:SetHeight(area.frame:GetHeight() + L.FontHeight * 6)\n\t\t\t\telse\n\t\t\t\t\tdoubleLine = doubleLine + 1\n\t\t\t\t\tarea.frame:SetHeight(area.frame:GetHeight() + L.FontHeight * 10)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal category = {}\n\tlocal subTabId = 0\n\tlocal expansions = {\n\t\t\"CLASSIC\", \"BC\", \"WOTLK\"\n\t}\n\n\tfunction DBM_GUI:UpdateModList()\n\t\tfor _, addon in ipairs(DBM.AddOns) do\n\t\t\tlocal cat = addon.category:upper()\n\t\t\tif not category[cat] then\n\t\t\t\t-- Create a Panel for \"Wrath of the Lich King\", \"The Burning Crusade\", \"Classic\" or \"Other\"\n\t\t\t\tcategory[cat] = DBM_GUI:CreateNewPanel(_G[\"EXPANSION_NAME\" .. (DBM:tIndexOf(expansions, cat) or 99) - 1] or L.TabCategory_OTHER, nil, cat == expansions[GetExpansionLevel() + 1])\n\t\t\tend\n\n\t\t\tif not addon.panel then\n\t\t\t\t-- Create a Panel for \"Naxxramas\" \"Eye of Eternity\" ...\n\t\t\t\taddon.panel = category[cat]:CreateNewPanel(addon.name or \"Error: No-modId\")\n\n\t\t\t\tif not IsAddOnLoaded(addon.modId) then\n\t\t\t\t\tlocal button = addon.panel:CreateButton(L.Button_LoadMod, 200, 30)\n\t\t\t\t\tbutton.modid = addon\n\t\t\t\t\tbutton.headline = addon.panel:CreateText(L.BossModLoad_now, 350, nil, nil, \"CENTER\")\n\t\t\t\t\tbutton.headline:SetHeight(50)\n\t\t\t\t\tbutton.headline:SetPoint(\"CENTER\", button, \"CENTER\", 0, 80)\n\n\t\t\t\t\tbutton:SetScript(\"OnClick\", function(self)\n\t\t\t\t\t\tif DBM:LoadMod(self.modid, true) then\n\t\t\t\t\t\t\tself:Hide()\n\t\t\t\t\t\t\tself.headline:Hide()\n\t\t\t\t\t\t\tCreateBossModTab(self.modid, self.modid.panel)\n\t\t\t\t\t\t\t_G[\"DBM_GUI_OptionsFrame\"]:DisplayFrame(self.modid.panel.frame)\n\t\t\t\t\t\tend\n\t\t\t\t\tend)\n\t\t\t\t\tbutton:SetPoint(\"CENTER\", 0, -20)\n\t\t\t\telse\n\t\t\t\t\tCreateBossModTab(addon, addon.panel)\n\t\t\t\tend\n\t\t\tend\n\n\t\t\tif addon.panel and addon.subTabs and IsAddOnLoaded(addon.modId) then\n\t\t\t\t-- Create a Panel for \"Arachnid Quarter\" \"Plague Quarter\" ...\n\t\t\t\tif not addon.subPanels then\n\t\t\t\t\taddon.subPanels = {}\n\t\t\t\tend\n\n\t\t\t\tfor k, v in pairs(addon.subTabs) do\n\t\t\t\t\tif not addon.subPanels[k] then\n\t\t\t\t\t\tsubTabId = subTabId + 1\n\t\t\t\t\t\taddon.subPanels[k] = addon.panel:CreateNewPanel(\"SubTab\" .. subTabId, nil, false, nil, v)\n\t\t\t\t\t\tCreateBossModTab(addon, addon.subPanels[k], k)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\n\t\t\tfor _, mod in ipairs(DBM.Mods) do\n\t\t\t\tif mod.modId == addon.modId then\n\t\t\t\t\tif not mod.panel and (not addon.subTabs or (addon.subPanels and addon.subPanels[mod.subTab])) then\n\t\t\t\t\t\tif addon.subTabs and addon.subPanels[mod.subTab] then\n\t\t\t\t\t\t\tmod.panel = addon.subPanels[mod.subTab]:CreateNewPanel(mod.id or \"Error: DBM.Mods\", addon.optionsTab, nil, nil, mod.localization.general.name)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tmod.panel = addon.panel:CreateNewPanel(mod.id or \"Error: DBM.Mods\", addon.optionsTab, nil, nil, mod.localization.general.name)\n\t\t\t\t\t\tend\n\t\t\t\t\t\tDBM_GUI:CreateBossModPanel(mod)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tlocal optionsFrame = _G[\"DBM_GUI_OptionsFrame\"]\n\t\tif optionsFrame:IsShown() then\n\t\t\toptionsFrame:Hide()\n\t\t\toptionsFrame:Show()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-GUI/DBM-GUI.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF Options GUI|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF GUI für Einstellungen|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF 设置界面|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF Параметры GUI|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF 使用者介面|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF 설정 GUI|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF Interfaz gráfica|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF Interfaz gráfica|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF IUG des options|r\n## Notes: GUI for Deadly Boss Mods\n## Notes-deDE: Grafische Benutzeroberfläche für Deadly Boss Mods\n## Notes-zhCN: Deadly Boss Mods的设置界面\n## Notes-ruRU: Графический интерфейс пользователя DBM\n## Notes-zhTW: Deadly Boss Mods的使用者介面\n## Notes-koKR: Deadly Boss Mods의 GUI\n## Notes-esES: Interfaz gráfica de Deadly Boss Mods\n## Notes-esMX: Interfaz gráfica de Deadly Boss Mods\n## Notes-frFR: IUG pour Deadly Boss Mods\n## Dependencies: DBM-Core\n## LoadOnDemand: 1\n## DefaultState: enabled\n## Author: MysticalOS, QartemisT\n## Version: 10.1.13_alpha\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.cn.lua\nlocalization.ru.lua\nlocalization.fr.lua\nlocalization.tw.lua\nlocalization.kr.lua\nlocalization.es.lua\n\nDBM-GUI.lua\nDBM-GUI_DropDown.lua\n\n# Modules\nmodules\\MainFramePrototype.lua\nmodules\\MainFrame.lua\nmodules\\ListFrameButtonsPrototype.lua\nmodules\\PanelPrototype.lua\n\nmodules\\options\\general\\General.lua\nmodules\\options\\general\\Core_GUI.lua\nmodules\\options\\general\\ExtraFeatures.lua\nmodules\\options\\general\\Profile.lua\n\nmodules\\options\\alerts\\Alerts.lua\nmodules\\options\\alerts\\Announcements.lua\nmodules\\options\\alerts\\SpecialAnnouncements.lua\nmodules\\options\\alerts\\ChatframeMessages.lua\nmodules\\options\\alerts\\SpokenAlerts.lua\nmodules\\options\\alerts\\EventSounds.lua\n\nmodules\\options\\timers\\Timers.lua\nmodules\\options\\timers\\Appearance.lua\nmodules\\options\\timers\\ColorbyType.lua\nmodules\\options\\timers\\Behavior.lua\n\nmodules\\options\\filters\\Filters.lua\nmodules\\options\\filters\\GlobalDisables.lua\nmodules\\options\\filters\\Reduction.lua\nmodules\\options\\filters\\Handholding.lua\nmodules\\options\\filters\\HideBlizzard.lua\nmodules\\options\\filters\\RaidLeaderDisable.lua\nmodules\\options\\filters\\Privacy.lua\n\nmodules\\options\\frames\\Frames.lua\nmodules\\options\\frames\\InfoFrame.lua\nmodules\\options\\frames\\Range.lua\n# modules\\options\\frames\\Nameplate.lua\nmodules\\options\\frames\\BossHealth.lua\n"
  },
  {
    "path": "DBM-GUI/DBM-GUI_DropDown.lua",
    "content": "-- *********************************************************\n-- **               Deadly Boss Mods - GUI                **\n-- **            http://www.deadlybossmods.com            **\n-- *********************************************************\n--\n-- This addon is written and copyrighted by:\n--    * Paul Emmerich (Tandanu @ EU-Aegwynn) (DBM-Core)\n--    * Martin Verges (Nitram @ EU-Azshara) (DBM-GUI)\n--\n-- The localizations are written by:\n--    * enGB/enUS: Tandanu\t\t\t\thttp://www.deadlybossmods.com\n--    * deDE: Tandanu\t\t\t\t\thttp://www.deadlybossmods.com\n--    * zhCN: Diablohu\t\t\t\t\thttp://wow.gamespot.com.cn\n--    * ruRU: BootWin\t\t\t\t\tbootwin@gmail.com\n--    * zhTW: Hman\t\t\t\t\t\therman_c1@hotmail.com\n--    * zhTW: Azael/kc10577\t\t\t\tkc10577@hotmail.com\n--    * koKR: BlueNyx/nBlueWiz\t\t\tbluenyx@gmail.com / everfinale@gmail.com\n--    * esES: Interplay/1nn7erpLaY      http://www.1nn7erpLaY.com\n--\n-- Special thanks to:\n--    * Arta (DBM-Party)\n--    * Omegal @ US-Whisperwind (some patches, and DBM-Party updates)\n--    * Tennberg (a lot of fixes in the enGB/enUS localization)\n--\n--\n-- The code of this addon is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License. (see license.txt)\n-- All included textures and sounds are copyrighted by their respective owners, license information for these media files can be found in the modules that make use of them.\n--\n--\n--  You are free:\n--    * to Share - to copy, distribute, display, and perform the work\n--    * to Remix - to make derivative works\n--  Under the following conditions:\n--    * Attribution. You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). (A link to http://www.deadlybossmods.com is sufficient)\n--    * Noncommercial. You may not use this work for commercial purposes.\n--    * Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.\n--\nlocal L = DBM_GUI_L\n\nlocal pairs, next, type, ipairs, setmetatable, mfloor, mmax = pairs, next, type, ipairs, setmetatable, math.floor, math.max\nlocal CreateFrame, GameFontNormalSmall = CreateFrame, GameFontNormalSmall\nlocal DBM = DBM\n\nlocal defaultFont, defaultFontSize = GameFontHighlightSmall:GetFont()\n\nlocal function replaceSpellLinks(id)\n\tlocal spellId = tonumber(id)\n\tlocal spellName = DBM:GetSpellInfo(spellId)\n\tif not spellName then\n\t\tspellName = DBM_CORE_L.UNKNOWN\n\t\tDBM:Debug(\"Spell ID does not exist: \"..spellId)\n\tend\n\treturn (\"|cff71d5ff|Hspell:%d|h%s|h|r\"):format(spellId, spellName)\nend\n\nlocal hack = OptionsList_OnLoad\nfunction OptionsList_OnLoad(self, ...)\n\tif self:GetName() ~= \"DBM_GUI_DropDown\" then\n\t\thack(self, ...)\n\tend\nend\n\nlocal tabFrame1 = CreateFrame(\"Frame\", \"DBM_GUI_DropDown\", _G[\"DBM_GUI_OptionsFrame\"], \"OptionsFrameListTemplate\")\ntabFrame1:Hide()\ntabFrame1:SetFrameStrata(\"TOOLTIP\")\ntabFrame1.offset = 0\ntabFrame1:SetBackdrop({\n\tbgFile\t\t=\"Interface\\\\ChatFrame\\\\ChatFrameBackground\",\n\tedgeFile\t=\"Interface\\\\Tooltips\\\\UI-Tooltip-Border\",\n\ttile\t\t= true,\n\ttileSize\t= 16,\n\tedgeSize\t= 16,\n\tinsets\t\t= { left = 3, right = 3, top = 5, bottom = 3 }\n})\ntabFrame1:SetBackdropColor(0.1, 0.1, 0.1, 0.6)\ntabFrame1:SetBackdropBorderColor(0.4, 0.4, 0.4)\n\nlocal tabFrame1List = _G[tabFrame1:GetName() .. \"List\"]\ntabFrame1List:SetScript(\"OnVerticalScroll\", function(self, offset)\n\tlocal scrollbar = _G[self:GetName() .. \"ScrollBar\"]\n\tlocal _, max = scrollbar:GetMinMaxValues()\n\tscrollbar:SetValue(offset)\n\tif offset ~= 0 then\n\t\t_G[self:GetName() .. \"ScrollBarScrollUpButton\"]:Enable()\n\telse\n\t\t_G[self:GetName() .. \"ScrollBarScrollUpButton\"]:Disable()\n\tend\n\tif scrollbar:GetValue() - max ~= 0 then\n\t\t_G[self:GetName() .. \"ScrollBarScrollDownButton\"]:Enable()\n\telse\n\t\t_G[self:GetName() .. \"ScrollBarScrollDownButton\"]:Disable()\n\tend\n\ttabFrame1.offset = mfloor(offset)\n\ttabFrame1:Refresh()\nend)\ntabFrame1List:SetBackdropBorderColor(0.6, 0.6, 0.6, 0.6)\ntabFrame1List:SetWidth(18) -- hardcoding width to have a flush border tex around scrollbar. Retail template does not have any texture, but imo this is best handled via addonskins\n--tabFrame1List:SetBackdrop(nil) -- match retail behaviour\n\nlocal tabFrame1ScrollBar = _G[tabFrame1List:GetName() .. \"ScrollBar\"]\ntabFrame1ScrollBar:SetMinMaxValues(0, 11)\ntabFrame1ScrollBar:SetValueStep(1)\ntabFrame1ScrollBar:SetValue(0)\n\nlocal scrollUpButton = _G[tabFrame1ScrollBar:GetName() .. \"ScrollUpButton\"]\nscrollUpButton:SetSize(12, 12)\nscrollUpButton:Disable()\nscrollUpButton:SetScript(\"OnClick\", function(self)\n\tself:GetParent():SetValue(self:GetParent():GetValue() - 1)\nend)\nlocal scrollDownButton = _G[tabFrame1ScrollBar:GetName() .. \"ScrollDownButton\"]\nscrollDownButton:SetSize(12, 12)\nscrollDownButton:Enable()\nscrollDownButton:SetScript(\"OnClick\", function(self)\n\tself:GetParent():SetValue(self:GetParent():GetValue() + 1)\nend)\n\n_G[tabFrame1ScrollBar:GetName() .. \"ThumbTexture\"]:SetSize(12, 16)\n\ntabFrame1:EnableMouseWheel(true)\ntabFrame1:SetScript(\"OnMouseWheel\", function(_, delta)\n\ttabFrame1ScrollBar:SetValue(tabFrame1ScrollBar:GetValue() - delta)\nend)\n\nlocal ClickFrame = CreateFrame(\"Button\", nil, UIParent)\nClickFrame:SetFrameStrata(\"TOOLTIP\")\nClickFrame:RegisterForClicks(\"AnyDown\")\nClickFrame:SetScript(\"OnClick\", function()\n\ttabFrame1:Hide()\nend)\nClickFrame:Hide()\ntabFrame1:SetScript(\"OnHide\", function()\n\tClickFrame:Hide()\nend)\n\ntabFrame1.buttons = {}\nfor i = 1, 10 do\n\tlocal button = CreateFrame(\"Button\", tabFrame1:GetName() .. \"Button\" .. i, tabFrame1, \"UIDropDownMenuButtonTemplate\")\n\t_G[button:GetName() .. \"Check\"]:Hide()\n-- _G[button:GetName() .. \"UnCheck\"]:Hide()\n\tbutton:SetFrameLevel(tabFrame1ScrollBar:GetFrameLevel() - 1)\n\tif i == 1 then\n\t\tbutton:SetPoint(\"TOPLEFT\", tabFrame1, \"TOPLEFT\", 11, -4) -- VERIFY\n\telse\n\t\tbutton:SetPoint(\"TOPLEFT\", tabFrame1.buttons[i - 1]:GetName(), \"BOTTOMLEFT\")\n\tend\n\tbutton:SetScript(\"OnEnter\", function(self)\n\t\t_G[self:GetName() .. \"Highlight\"]:Show()\n\tend)\n\tbutton:SetScript(\"OnLeave\", function(self)\n\t\t_G[self:GetName() .. \"Highlight\"]:Hide()\n\tend)\n\tbutton:SetScript(\"OnClick\", function(self)\n\t\tself:GetParent():Hide()\n\t\tself:GetParent().dropdown.value = self.entry.value\n\t\tself:GetParent().dropdown.text = self.entry.text\n\t\tif self.entry.sound then\n\t\t\tDBM:PlaySoundFile(self.entry.value)\n\t\tend\n\t\tif self.entry.func then\n\t\t\tself.entry.func(self.entry.value)\n\t\tend\n\t\tif self:GetParent().dropdown.callfunc then\n\t\t\tself:GetParent().dropdown.callfunc(self.entry.value)\n\t\tend\n\t\t_G[self:GetParent().dropdown:GetName() .. \"Text\"]:SetText(self.entry.text)\n\tend)\n\tfunction button:Reset()\n\t\t_G[self:GetName() .. \"NormalText\"]:SetFont(defaultFont, defaultFontSize)\n\t\tself:SetHeight(0)\n\t\tself:SetText(\"\")\n\t\tself:SetBackdrop(nil)\n\tend\n\ttabFrame1.buttons[i] = button\nend\n\nfunction tabFrame1:ShowMenu()\n\tfor i = 1, #self.buttons do\n\t\tlocal button, entry = self.buttons[i], self.dropdown.values[i + self.offset]\n\t\tbutton:Reset()\n\t\tif entry then\n\t\t\tbutton:SetHeight(16)\n\t\t\tbutton:SetText((entry.value == self.dropdown.value and \"|TInterface\\\\Buttons\\\\UI-CheckBox-Check:0|t\" or \"   \") .. entry.text)\n\t\t\tbutton.entry = entry\n\t\t\tif entry.texture then\n\t\t\t\tbutton.backdropInfo = {\n\t\t\t\t\tbgFile\t= entry.value\n\t\t\t\t}\n\t\t\t\tbutton:SetBackdrop(button.backdropInfo)\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction tabFrame1:ShowFontMenu()\n\tfor i = 1, #self.buttons do\n\t\tlocal button, entry = self.buttons[i], self.dropdown.values[i + self.offset]\n\t\tbutton:Reset()\n\t\tif entry then\n\t\t\tbutton:SetHeight(16)\n\t\t\t_G[button:GetName() .. \"NormalText\"]:SetFont(entry.font and entry.value or defaultFont, entry.fontsize or defaultFontSize, entry.flag and entry.value)\n\t\t\tbutton:SetText((entry.value == self.dropdown.value and \"|TInterface\\\\Buttons\\\\UI-CheckBox-Check:0|t\" or \"   \") .. entry.text)\n\t\t\tbutton.entry = entry\n\t\tend\n\tend\nend\n\nfunction tabFrame1:Refresh()\n\tif #self.dropdown.values == 0 then -- Quirky case where there may be no elements in the dropdown???\n\t\treturn\n\tend\n\tself:Show()\n\tif self.offset < 0 then\n\t\tself.offset = 0\n\tend\n\tlocal valuesWOButtons = (#self.dropdown.values - #self.buttons)\n\tif #self.dropdown.values > #self.buttons and self.offset > valuesWOButtons then\n\t\tself.offset = valuesWOButtons\n\tend\n\tif self.dropdown.values[1].font or (#self.dropdown.values > 1 and self.dropdown.values[2].flag) then\n\t\tself:ShowFontMenu()\n\telse\n\t\tself:ShowMenu()\n\tend\n\tself:SetHeight(#self.buttons * 16 + 8)\n\tif #self.dropdown.values > #self.buttons then\n\t\ttabFrame1List:Show()\n\t\ttabFrame1ScrollBar:SetMinMaxValues(0, valuesWOButtons)\n\telse\n\t\tif #self.dropdown.values < #self.buttons then\n\t\t\ttabFrame1List:Hide()\n\t\t\tself:SetHeight(#self.dropdown.values * 16 + 8)\n\t\tend\n\t\ttabFrame1ScrollBar:SetValue(0)\n\tend\n\tlocal bwidth = 0\n\tfor _, button in pairs(self.buttons) do\n\t\tbwidth = mmax(bwidth, button:GetTextWidth() + 16)\n\tend\n\tfor _, button in pairs(self.buttons) do\n\t\tbutton:SetWidth(bwidth)\n\tend\n\tself:SetWidth(bwidth + 16)\n\tClickFrame:Show()\nend\n\nlocal dropdownPrototype = CreateFrame(\"Frame\")\n\nfunction dropdownPrototype:SetSelectedValue(selected)\n\tif selected and self.values and type(self.values) == \"table\" then\n\t\tlocal text = _G[self:GetName() .. \"Text\"]\n\t\tfor _, v in next, self.values do\n\t\t\tif v.value ~= nil and v.value == selected or v.text == selected then\n\t\t\t\ttext:SetText(v.text)\n\t\t\t\tself.value = v.value\n\t\t\t\tself.text = v.text\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction DBM_GUI:CreateDropdown(title, values, vartype, var, callfunc, width, height, parent)\n\t-- Check Values\n\tif type(values) == \"table\" then\n\t\tfor _, entry in next, values do\n\t\t\tif entry.text then\n\t\t\t\tif entry.text:find(\"%$spell:\") then\n\t\t\t\t\tentry.text = entry.text:gsub(\"%$spell:(%d+)\", replaceSpellLinks)\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tentry.text = \"Missing entry.text\"\n\t\t\tend\n\t\t\tentry.value = entry.value or entry.text\n\t\tend\n\tend\n\n\t-- font strings do not support hyperlinks, so check if we need one...\n\tif title and title:find(\"%$spell:\") then\n\t\ttitle = title:gsub(\"%$spell:(%d+)\", replaceSpellLinks)\n\tend\n\n\t-- Create the Dropdown Frame\n\tlocal dropdown = CreateFrame(\"Frame\", \"DBM_GUI_DropDown\" .. self:GetNewID(), parent or self.frame, \"UIDropDownMenuTemplate\")\n\tdropdown.mytype = \"dropdown\"\n\tdropdown.width = width\n\tdropdown.values = values\n\tdropdown.callfunc = callfunc\n\tlocal dropdownText = _G[dropdown:GetName() .. \"Text\"]\n\tif not width then\n\t\twidth = 120 -- minimum size\n\t\tif title ~= L.FontType and title ~= L.FontStyle and title ~= L.FontShadow then --Force font menus to always be fixed 120 width\n\t\t\tfor _, v in ipairs(values) do\n\t\t\t\tdropdownText:SetText(v.text)\n\t\t\t\twidth = mmax(width, dropdownText:GetStringWidth())\n\t\t\tend\n\t\tend\n\tend\n\tdropdown:SetSize(width + 30, height or 32)\n\tdropdown:SetScript(\"OnHide\", nil)\n\tdropdownText:SetWidth(width + 30)\n\tdropdownText:SetJustifyH(\"LEFT\")\n\tdropdownText:SetPoint(\"LEFT\", dropdown:GetName() .. \"Left\", 30, 2)\n\t_G[dropdown:GetName() .. \"Middle\"]:SetWidth(width + 30)\n\tlocal dropdownButton = _G[dropdown:GetName() .. \"Button\"]\n\tdropdownButton:SetScript(\"OnMouseDown\", nil)\n\tdropdownButton:SetScript(\"OnClick\", function(self)\n\t\tDBM:PlaySound(856) -- UChatScrollButton\n\t\tif tabFrame1:IsShown() then\n\t\t\ttabFrame1:Hide()\n\t\t\ttabFrame1.dropdown = nil\n\t\telse\n\t\t\ttabFrame1:ClearAllPoints()\n\t\t\ttabFrame1:SetPoint(\"TOPRIGHT\", self, \"BOTTOMRIGHT\", 0, -3)\n\t\t\ttabFrame1.dropdown = self:GetParent()\n\t\t\ttabFrame1:Refresh()\n\t\tend\n\tend)\n\tif title ~= nil and title ~= \"\" then\n\t\tlocal titleText = dropdown:CreateFontString(dropdown:GetName() .. \"TitleText\", \"BACKGROUND\")\n\t\ttitleText:SetPoint(\"BOTTOMLEFT\", dropdown, \"TOPLEFT\", 21, 1)\n\t\ttitleText:SetFontObject(GameFontNormalSmall)\n\t\ttitleText:SetText(title)\n\tend\n\tif vartype and vartype == \"DBM\" and DBM.Options[var] ~= nil then\n\t\tdropdown:SetScript(\"OnShow\", function()\n\t\t\tdropdown:SetSelectedValue(DBM.Options[var])\n\t\tend)\n\telseif vartype and vartype == \"DBT\" then\n\t\tdropdown:SetScript(\"OnShow\", function()\n\t\t\tdropdown:SetSelectedValue(DBT.Options[var])\n\t\tend)\n\telseif vartype then\n\t\tdropdown:SetScript(\"OnShow\", function()\n\t\t\tdropdown:SetSelectedValue(vartype.Options[var])\n\t\tend)\n\telse -- For external modules like DBM-RaidLeadTools\n\t\tfor _, v in next, dropdown.values do\n\t\t\tif v.value ~= nil and v.value == var or v.text == var then\n\t\t\t\tdropdownText:SetText(v.text)\n\t\t\t\tdropdown.value = v.value\n\t\t\t\tdropdown.text = v.text\n\t\t\tend\n\t\tend\n\tend\n\treturn setmetatable(dropdown, {\n\t\t__index = dropdownPrototype\n\t})\nend\n"
  },
  {
    "path": "DBM-GUI/license.txt",
    "content": "License\n\nTHE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE (\"CCPL\" OR \"LICENSE\"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.\n\nBY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.\n\n1. Definitions\n\n   a. \"Adaptation\" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image (\"synching\") will be considered an Adaptation for the purpose of this License.\n   b. \"Collection\" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(g) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.\n   c. \"Distribute\" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.\n   d. \"License Elements\" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, Noncommercial, ShareAlike.\n   e. \"Licensor\" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.\n   f. \"Original Author\" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.\n   g. \"Work\" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.\n   h. \"You\" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.\n   i. \"Publicly Perform\" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.\n   j. \"Reproduce\" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.\n\n2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.\n\n3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:\n\n   a. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;\n   b. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked \"The original work was translated from English to Spanish,\" or a modification could indicate \"The original work has been modified.\";\n   c. to Distribute and Publicly Perform the Work including as incorporated in Collections; and,\n   d. to Distribute and Publicly Perform Adaptations.\n\nThe above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights described in Section 4(e).\n\n4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:\n\n   a. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(d), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(d), as requested.\n   b. You may Distribute or Publicly Perform an Adaptation only under: (i) the terms of this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-NonCommercial-ShareAlike 3.0 US) (\"Applicable License\"). You must include a copy of, or the URI, for Applicable License with every copy of each Adaptation You Distribute or Publicly Perform. You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License. You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License.\n   c. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in con-nection with the exchange of copyrighted works.\n   d. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution (\"Attribution Parties\") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., \"French translation of the Work by Original Author,\" or \"Screenplay based on original Work by Original Author\"). The credit required by this Section 4(d) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.\n   e. For the avoidance of doubt:\n         i. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;\n         ii. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,\n         iii. Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c).\n   f. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.\n\n5. Representations, Warranties and Disclaimer\n\nUNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THIS EXCLUSION MAY NOT APPLY TO YOU.\n\n6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n\n7. Termination\n\n   a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.\n   b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.\n\n8. Miscellaneous\n\n   a. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.\n   b. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.\n   c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.\n   d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.\n   e. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.\n   f. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.\n"
  },
  {
    "path": "DBM-GUI/localization.cn.lua",
    "content": "-- Diablohu(diablohudream@gmail.com)\n-- yleaf(yaroot@gmail.com)\n-- sunlcy@NGA\n-- Mini Dragon <流浪者酒馆-Brilla@金色平原> 20220129\n\nif GetLocale() ~= \"zhCN\" then return end\nif not DBM_GUI_L then DBM_GUI_L = {} end\n\nlocal L = DBM_GUI_L\n\n--L.MainFrame\t\t\t\t= \"Deadly Boss Mods\"\n\nL.TranslationByPrefix\t\t= \"向后移植 \"\nL.TranslationBy\t\t\t= \"Barsoom, Bunny67, Zidras\"\nL.Website\t\t\t\t\t= \"拜访我们的Discord |cFF73C2FBhttps://discord.gg/CyVWDWS|r.\"\nL.WebsiteButton\t\t\t\t= \"网页\"\n\nL.OTabBosses\t= \"模块\"\nL.OTabRaids\t\t= \"副本\"\nL.OTabDungeons\t= \"地下城\"\nL.OTabPlugins\t= \"核心插件\"\nL.OTabOptions\t= \"选项\"\nL.OTabAbout\t\t= \"关于\"\n\nL.TabCategory_OTHER\t\t\t= \"其它\"\n\nL.BossModLoaded\t\t\t\t= \"%s 状态\"\nL.BossModLoad_now\t\t\t= [[该模块尚未启动。\n当你进入相应副本时其会自动加载。\n你也可以点击开启模块按钮手动启动该模块。]]\n\nL.PosX\t\t\t\t\t\t= \"X坐标\"\nL.PosY\t\t\t\t\t\t= \"Y坐标\"\n\nL.MoveMe\t\t\t\t\t= \"移动我\"\nL.Button_OK\t\t\t\t= \"确定\"\nL.Button_Cancel\t\t\t= \"取消\"\nL.Button_LoadMod\t\t\t= \"加载模块\"\nL.Mod_Enabled\t\t\t\t= \"开启模块\"\nL.Mod_Reset\t\t\t\t\t= \"恢复默认设置\"\nL.Reset\t\t\t\t\t= \"重置\"\nL.Import\t\t\t\t\t= \"导入\"\n\nL.Enable\t\t\t\t\t= \"开启\"\nL.Disable\t\t\t\t\t= \"关闭\"\n\nL.NoSound\t\t\t\t\t= \"静音\"\n\nL.IconsInUse\t\t\t\t= \"该模块使用到的团队标记\"\n\n-- Tab: Boss Statistics\nL.BossStatistics\t\t\t= \"首领统计\"\nL.Statistic_Kills\t\t\t= \"击杀:\"\nL.Statistic_Wipes\t\t\t= \"失败:\"\nL.Statistic_Incompletes\t\t= \"未完成:\"\nL.Statistic_BestKill\t\t= \"最好成绩:\"\nL.Statistic_BestRank\t\t= \"最佳排名:\"\n\n-- Tab: General Options\nL.TabCategory_Options\t\t= \"常规设置\"\nL.Area_BasicSetup\t\t\t= \"初始 DBM 设置提示\"\nL.Area_ModulesForYou\t\t= \"哪些 DBM 模块适合您?\"\nL.Area_ProfilesSetup\t\t= \"DBM 配置文件指南\"\n-- Panel: Core & GUI\nL.Core_GUI\t\t\t\t\t= \"DBM核心设置\"\nL.General\t\t\t\t\t= \"DBM核心综合设置\"\nL.EnableMiniMapIcon\t\t\t= \"显示小地图按钮\"\nL.UseSoundChannel\t\t\t= \"设置DBM使用的声道\"\nL.UseMasterChannel\t\t\t= \"主声道\"\nL.UseDialogChannel\t\t\t= \"对话声道\"\nL.UseSFXChannel\t\t\t\t= \"音效声道\"\nL.Latency_Text\t\t\t\t= \"设定团队之间DBM最高延迟阈值：%d\"\n\nL.Button_RangeFrame\t\t\t= \"显示/隐藏距离雷达框体\"\nL.Button_InfoFrame\t\t\t= \"显示/隐藏信息框体\"\nL.Button_TestBars\t\t\t= \"测试计时条\"\nL.Button_MoveBars\t\t\t= \"移动计时条\"\nL.Button_ResetInfoRange\t\t= \"重置信息/距离雷达框体\"\n\nL.ModelOptions\t\t\t\t= \"3D模型选项\"\nL.EnableModels\t\t\t\t= \"在首领选项中启用3D模型\"\nL.ModelSoundOptions\t\t\t= \"为模型查看器设置声音选项\"\nL.ModelSoundShort\t\t\t= \"短\"\nL.ModelSoundLong\t\t\t= \"长\"\n\nL.ResizeOptions\t\t\t\t= \"调整窗口选项\"\nL.ResizeInfo\t\t\t\t= \"您可以通过拖动右下角来调整GUI窗口大小\"\nL.Button_ResetWindowSize\t= \"重置GUI窗口大小\"\nL.Editbox_WindowWidth\t\t= \"GUI窗口宽度\"\nL.Editbox_WindowHeight\t\t= \"GUI窗口高度\"\n\nL.UIGroupingOptions\t\t\t= \"界面分组选项 (更改这些需要输入 /reload 来重载界面)\"\nL.GroupOptionsBySpell\t\t= \"按照技能分组 (只支持有效的模块)\"\nL.GroupOptionsExcludeIcon\t= \"按照技能分组排除“设置标记图标”选项 (它们将像以前一样在“图标”类中显示)\"\nL.AutoExpandSpellGroups\t\t= \"按照技能分组自动扩展选项\"\n--L.ShowSpellDescWhenExpanded\t= \"分组扩展时显示技能描述\"\nL.NoDescription\t\t\t\t= \"此技能无描述说明\"\n\n-- Panel: Extra Features\nL.Panel_ExtraFeatures\t\t= \"其他功能\"\n\nL.Area_SoundAlerts\t\t\t= \"语音/闪烁警报选项\"\nL.LFDEnhance\t\t\t\t= \"当发起角色检查或随机团队/战场就绪时，在主声道播放准备音效(即使关闭了音效而且很大声！)并闪烁图标\"\nL.WorldBossNearAlert\t\t= \"当世界附近的Boss进入战斗时播放准备音效(覆盖单独BOSS设置)并闪烁图标\"\nL.RLReadyCheckSound\t\t\t= \"在主声道/对话声道播放检查准备音效并闪烁图标。\"\nL.AFKHealthWarning\t\t\t= \"当你在挂机/暂离受到伤害时播放音效并闪烁图标(你会死)\"\nL.AutoReplySound\t\t\t= \"当你收到DBM自动回复密语时播放警告声和闪烁图标\"\n--\nL.TimerGeneral\t\t\t\t= \"计时器选项\"\nL.SKT_Enabled\t\t\t\t= \"总是显示最速胜利计时条(覆盖单独BOSS设置)\"\nL.ShowRespawn\t\t\t\t= \"Boss战斗未完成时显示Boss刷新计时条\"\nL.ShowQueuePop\t\t\t\t= \"显示随机小队/团队查找器确认计时条\"\n--\n--Auto Logging: Logging toggles/types\nL.Area_AutoLogging\t\t\t= \"自动战斗日志开关\"\nL.AutologBosses\t\t\t\t= \"自动采用官方格式记录日志。\"\nL.AdvancedAutologBosses\t\t= \"自动采用 Transcriptor 记录日志\"\n--Auto Logging: Global filter Options\nL.Area_AutoLoggingFilters\t= \"自动记录选项\"\nL.RecordOnlyBosses\t\t\t= \"不记录小怪数据 (只记录团队BOSS数据，使用 /dbm pull 可提前记录并使得记录更准确，如提前偷药水或是召唤大军。)\"\nL.DoNotLogLFG\t\t\t\t= \"不记录随机5人本/团队副本\"\n--Auto Logging: Recorded Content types\nL.Area_AutoLoggingContent\t= \"自动记录内容\"\nL.LogCurrentRaids\t\t\t= \"当前等级团队副本\"\nL.LogTWRaids\t\t\t\t= \"时光团队副本或通过克罗米进入的团队副本\"--Retail Only\nL.LogTrivialRaids\t\t\t= \"低等级团队\"\nL.LogCurrentMPlus\t\t\t= \"当前等级的M+5人本\"--Retail Only\nL.LogTWDungeons\t\t\t\t= \"时光5人本或通过克罗米进入的5人本\"--Retail Only\nL.LogCurrentHeroic\t\t\t= \"当前等级的英雄5人本\"\nL.LogCurrentNormal\t\t\t= \"当前等级的普通5人本\"\nL.LogTrivialDungeons\t\t= \"低等级地下城\"\n--\nL.Area_3rdParty\t\t\t\t= \"第三方插件选项\"\nL.oRA3AnnounceConsumables\t= \"在战斗开始时通报oRA3消耗品检查\"\nL.Area_Invite\t\t\t\t= \"组队邀请选项\"\nL.AutoAcceptFriendInvite\t= \"自动接受来自好友列表里的好友的组队邀请\"\nL.AutoAcceptGuildInvite\t\t= \"自动接受同公会成员的组队邀请\"\nL.Area_Advanced\t\t\t\t= \"高级选项\"\nL.FakeBW\t\t\t\t\t= \"当Bigwig启用检测时，假装DBM就是Bigwig\"\nL.AITimer\t\t\t\t\t= \"DBM为没遇见过的战斗使用人工智能自动产生计时器(在初期的Beta或PTR的Boss测试非常有帮助)。此功能不会对多目标技能生效。\"\nL.FixCLEUOnCombatStart\t\t= \"在拉/战斗结束和区域更改时清除战斗日志缓存\"\n\n-- Panel: Profiles\nL.Panel_Profile\t\t\t\t= \"配置文件\"\nL.Area_CreateProfile\t\t= \"创建DBM核心配置\"\nL.EnterProfileName\t\t\t= \"输入配置文件名称\"\nL.CreateProfile\t\t\t\t= \"创建带有默认设置的配置文件\"\nL.Area_ApplyProfile\t\t\t= \"选择一个已有的DBM核心配置文件并应用它\"\nL.SelectProfileToApply\t\t= \"选择一个配置文件并应用\"\nL.Area_CopyProfile\t\t\t= \"复制一个配置文件\"\nL.SelectProfileToCopy\t\t= \"选择一个配置文件并复制\"\nL.Area_DeleteProfile\t\t= \"删除一个已有的DBM核心配置文件\"\nL.SelectProfileToDelete\t\t= \"选择一个配置文件并删除\"\nL.Area_DualProfile\t\t\t= \"Boss模块配置文件选项\"\nL.DualProfile\t\t\t\t= \"为Boss的每个专精开启不同的配置选项(Boss的配置在boss模块里)。默认状态下，当你切换专精时，DBM会重置选项到默认状态，选中本选项后，每个专精都有对应的配置文件，切换专精不会丢失上一个专精的配置。\"\n\nL.Area_ModProfile\t\t\t= \"复制/删除一个角色/专精选项\"\nL.ModAllReset\t\t\t\t= \"重置所有Boss模块选项\"\nL.ModAllStatReset\t\t\t= \"重置所有Boss模块状态\"\nL.SelectModProfileCopy\t\t= \"复制所有选项：\"\nL.SelectModProfileCopySound\t= \"只复制声音选项：\"\nL.SelectModProfileCopyNote\t= \"只复制自定义注记：\"\nL.SelectModProfileCurrent\t= \"当前Boss模块的概况\"\nL.SelectModProfileDelete\t= \"删除 Boss 模块设置：\"\n\nL.Area_ImportExportProfile\t= \"导入导出配置\"\nL.ImportExportInfo\t\t\t= \"导入会覆盖你当前的配置，请小心使用\"\nL.ButtonImportProfile\t\t= \"导入配置\"\nL.ButtonExportProfile\t\t= \"导出配置\"\nL.ProfileExportTitle\t\t= \"这是您当前的文本格式的个人资料。\"\nL.ProfileExportSubtitle\t= \"按 CTRL-C 将配置复制到剪贴板。\"\nL.ProfileImportTitle\t\t= \"在此处粘贴文本格式的配置文件。\"\nL.ProfileImportSubtitle\t= \"按 CTRL-V 粘贴 DBM 配置文本。\"\n\nL.ImportErrorOn\t\t\t\t= \"自定义语音缺失: %s\"\nL.ImportVoiceMissing\t\t= \"找不要语音包: %s\"\n\n-- Tab: Alerts\nL.TabCategory_Alerts\t\t= \"警报\"\nL.Area_SpecAnnounceConfig\t= \"特殊警报提示和声音指南\"\nL.Area_SpecAnnounceNotes\t= \"特殊警报自定义指南\"\nL.Area_VoicePackInfo\t\t= \"所有 DBM 语音包信息\"\n-- Panel: Raidwarning\nL.Tab_RaidWarning\t\t\t= \"团队警报\"\nL.RaidWarning_Header\t\t= \"团队警报设置\"\nL.RaidWarnColors\t\t\t= \"团队警报颜色\"\nL.RaidWarnColor_1\t\t\t= \"颜色 1\"\nL.RaidWarnColor_2\t\t\t= \"颜色 2\"\nL.RaidWarnColor_3\t\t\t= \"颜色 3\"\nL.RaidWarnColor_4\t\t\t= \"颜色 4\"\nL.InfoRaidWarning\t\t\t= [[你可以对团队警报的文本颜色及其位置进行设定。\n在这里会显示诸如“玩家X受到了Y效果的影响”之类的信息。]]\nL.ColorResetted\t\t\t= \"该颜色设置已重置。\"\nL.ShowWarningsInChat\t\t= \"在聊天窗口中显示警报\"\nL.ShowFakedRaidWarnings\t\t= \"以伪装团队警报信息的方式显示警报内容\"\nL.WarningIconLeft\t\t\t= \"左侧显示图标\"\nL.WarningIconRight\t\t\t= \"右侧显示图标\"\nL.WarningIconChat\t\t\t= \"在聊天窗口中显示图标\"\nL.WarningAlphabetical\t\t= \"按字母顺序排序\"\nL.Warn_Duration\t\t\t\t= \"警告持续时间: %0.1f 秒\"\nL.None\t\t\t\t\t\t= \"无\"\nL.Random\t\t\t\t\t= \"随机\"\nL.Outline\t\t\t\t\t= \"描边\"\nL.ThickOutline\t\t\t\t= \"加粗描边\"\nL.MonochromeOutline\t\t\t= \"单色描边\"\nL.MonochromeThickOutline\t= \"单色加粗描边\"\nL.RaidWarnSound\t\t\t\t= \"发出团队警报时播放声音\"\n\n-- Panel: Spec Warn Frame\nL.Panel_SpecWarnFrame\t\t= \"特殊团队警报\"\nL.Area_SpecWarn\t\t\t\t= \"特殊警报设置\"\nL.SpecWarn_ClassColor\t\t= \"为特殊警报启用分职业着色\"\nL.ShowSWarningsInChat\t\t= \"在聊天窗口中显示特殊警报\"\nL.SWarnNameInNote\t\t\t= \"使用自定义注记的特殊警报请选择 类型5\"\nL.SpecialWarningIcon\t\t= \"特殊警报使用技能图标\"\nL.ShortTextSpellname\t\t= \"使用较短的技能名称 (当可行时)\"\nL.SpecWarn_FlashFrameRepeat\t= \"重复 %d 次 (如果开启的话)\"\nL.SpecWarn_Flash\t\t\t= \"屏幕闪烁\"\nL.SpecWarn_Vibrate\t\t\t= \"闪烁控制器\"\nL.SpecWarn_FlashRepeat\t\t= \"重复闪烁\"\nL.SpecWarn_FlashColor\t\t= \"闪烁颜色 %d\"\nL.SpecWarn_FlashDur\t\t\t= \"闪烁持续时间: %0.1f\"\nL.SpecWarn_FlashAlpha\t\t= \"闪烁透明度: %0.1f\"\nL.SpecWarn_DemoButton\t\t= \"测试警报\"\nL.SpecWarn_ResetMe\t\t\t= \"重置\"\nL.SpecialWarnSoundOption\t= \"设置默认声音\"\nL.SpecialWarnHeader1\t\t= \"类型 1: 设置影响您或您的操作的普通优先级警报选项\"\nL.SpecialWarnHeader2\t\t= \"类型 2: 设置影响每个人的正常优先级警报选项\"\nL.SpecialWarnHeader3\t\t= \"类型 3: 设置高优先级警报的选项\"\nL.SpecialWarnHeader4\t\t= \"类型 4: 设置“高优先级”选项会避免特殊警报\"\nL.SpecialWarnHeader5\t\t= \"类型 5: 设置警报选项，并包含玩家姓名\"\n\n-- Panel: Generalwarnings\nL.Tab_GeneralMessages\t\t= \"综合信息\"\nL.CoreMessages\t\t\t\t= \"核心信息设置\"\nL.ShowPizzaMessage\t\t\t= \"在聊天窗口中显示计时条广播信息\"\nL.ShowAllVersions\t\t\t= \"当执行版本检查时,在聊天窗口中显示所有团员的Boss模组版本(如果禁用，仍旧显示过期/目前总结)\"\nL.ShowReminders\t\t\t\t= \"显示建议消息，缺少的模块和需要修补程序的信息。\"\n\nL.CombatMessages\t\t\t= \"战斗信息设置\"\nL.ShowEngageMessage\t\t= \"在聊天窗口中显示开战信息\"\nL.ShowDefeatMessage\t\t= \"在聊天窗口中显示击杀信息\"\nL.ShowGuildMessages\t\t= \"在聊天窗口中显示公会开战/击杀/灭团信息\"\nL.ShowGuildMessagesPlus\t\t= \"在聊天窗口中显示公会中的M+以上难度的开战/击杀/灭团信息(需要团队选项)\"\n\nL.Area_ChatAlerts\t\t\t= \"其他警报选项\"\nL.RoleSpecAlert\t\t\t\t= \"当进入团队时，如果拾取专精与当前角色专精不同，则显示警告。\"\nL.CheckGear\t\t\t\t\t= \"当你身上的装备装等低于背包装等40点时显示警告。(可能没有装备某物品或装备了低等级的任务道具或没有装备主武器)\"\nL.WorldBossAlert\t\t\t= \"当世界Boss进入战斗后发送警告，这个信息可能是你的朋友或者同公会成员发送的。 (由于跨服，卡位面等因素，可能不准确)\"\nL.WorldBuffAlert\t\t\t= \"在您的位面启动世界增益释放时显示警报信息和计时器。\"\n\nL.Area_BugAlerts\t\t\t= \"错误报告选项\"\nL.BadTimerAlert\t\t\t\t= \"在聊天窗口中显示DBM检测到计时器错误且至少有1秒不正确的信息\"\nL.BadIDAlert\t\t\t\t= \"在聊天窗口中显示DBM检测到使用中的无效技能或日志ID的信息\"\n\n-- Panel: Spoken Alerts Frame\nL.Panel_SpokenAlerts\t\t= \"语音警报\"\nL.Area_VoiceSelection\t\t= \"语音选择\"\nL.CountdownVoice\t\t\t= \"设置第一倒计时语音\"\nL.CountdownVoice2\t\t\t= \"设置第二倒计时语音\"\nL.CountdownVoice3\t\t\t= \"设置第三倒计时语音\"\nL.PullVoice\t\t\t\t\t= \"设置开怪倒计时语音\"\nL.VoicePackChoice\t\t\t= \"设置语音报警的语音包(快躲开！)\"\nL.MissingVoicePack\t\t\t= \"缺少语音包 (%s)\"\nL.Area_CountdownOptions\t\t= \"倒计时选项\"\n--NEW OPTIONS INCOMING USING THESE\nL.Area_VoicePackReplace\t\t= \"语音包替换选项 (当语音包启用、静音以及需要替换)\"\nL.VPReplaceNote\t\t\t\t= \"注意: 语音包永远不会更改或删除您的警报声音\\n当替换语音包时，它们只是在静音状态。\"\nL.ReplacesAnnounce\t\t\t= \"替换提示声音 (注意: 语音包除了阶段转换及小怪外很少使用)\"\nL.ReplacesSA1\t\t\t\t= \"替换特殊警报提示声音 1 (个人的 'pvp拔旗') \"\nL.ReplacesSA2\t\t\t\t= \"替换特殊警报提示声音 2 (每个人 '当心')\"\nL.ReplacesSA3\t\t\t\t= \"替换特殊警报提示声音 3 (高优先级的 '汽笛')\"\nL.ReplacesSA4\t\t\t\t= \"替换特殊警报提示声音 4 (高优先级的 '快跑')\"\nL.ReplacesGTFO\t\t\t\t= \"替换特殊警告的行为提示声音\"\nL.ReplacesCustom\t\t\t= \"替换特殊警报提示声音 自定义使用设置(每个警报) 声音 (不建议)\"\nL.Area_VoicePackAdvOptions\t= \"语音包选项（第三方语音包）\"\nL.SpecWarn_AlwaysVoice\t\t= \"总是播放所有语音警报(即使已禁用特殊警报，对团队领队是有用的，除此以外不建议使用)\"\nL.VPDontMuteSounds\t\t\t= \"当使用语音包时禁用常规警报的静音(只有当您希望在警报期间同时听到两者时才使用此选项)\"\n--TODO, maybe add URLS right to GUI panel on where to acquire 3rd party voice packs?\nL.Area_VPLearnMore\t\t\t= \"了解更多关于语音包以及如何使用这些选项的信息\"\nL.VPLearnMore\t\t\t\t= \"|cFF73C2FBhttps://github.com/DeadlyBossMods/DBM-Retail/wiki/%5BGuide%5D-DBM-&-Voicepacks#2022-update|r\"\nL.Area_BrowseOtherVP\t\t= \"获取其他语音包\"\nL.BrowseOtherVPs\t\t\t= \"|cFF73C2FBhttps://curseforge.com/wow/addons/search?search=dbm+voice|r\"\nL.Area_BrowseOtherCT\t\t= \"获取其他倒计时语音包\"\nL.BrowseOtherCTs\t\t\t= \"|cFF73C2FBhttps://curseforge.com/wow/addons/search?search=dbm+count+pack|r\"\n\n-- Panel: Event Sounds\nL.Panel_EventSounds\t\t\t= \"事件音效\"\nL.Area_SoundSelection\t\t= \"音效选择(使用鼠标滚轮滚动选择)\"\nL.EventVictorySound\t\t\t= \"设置战斗胜利音效\"\nL.EventWipeSound\t\t\t= \"设置灭团音效\"\nL.EventEngagePT\t\t\t\t= \"设置倒数开怪的音效\"\nL.EventEngageSound\t\t\t= \"设置开战音效\"\nL.EventDungeonMusic\t\t\t= \"设置在副本内播放的音乐\"\nL.EventEngageMusic\t\t\t= \"设置战斗过程中的音乐\"\nL.Area_EventSoundsExtras\t= \"事件音效选项\"\nL.EventMusicCombined\t\t= \"允许在副本内播放在音乐选项中的全部音效(需要/reload 才能加载)\"\nL.Area_EventSoundsFilters\t= \"事件音效过滤条件\"\nL.EventFilterDungMythicMusic= \"不要在M/M+难度下播放副本音乐\"\nL.EventFilterMythicMusic\t= \"不要在M/M+难度下播放战斗音乐\"\n\n-- Tab: HealthFrame\nL.Panel_HPFrame\t\t\t\t= \"首领生命值框体\"\nL.Area_HPFrame\t\t\t\t= \"首领生命值框体选项\"\nL.HP_Enabled\t\t\t\t= \"总是显示首领生命值框体 (首领模块中单独的设置将不起作用)\"\nL.HP_GrowUpwards\t\t\t= \"计量条想上增长\"\nL.HP_ShowDemo\t\t\t\t= \"显示测试框体\"\nL.BarWidth\t\t\t\t\t= \"计量条宽度: %d\"\n\n-- Tab: Timers\nL.TabCategory_Timers\t\t= \"计时条\"\nL.Area_ColorBytype\t\t\t= \"计时条分类着色指南\"\n-- Panel: Color by Type\nL.Panel_ColorByType\t\t\t= \"计时条分类着色\"\nL.AreaTitle_BarColors\t\t= \"计时条颜色\"\nL.BarTexture\t\t\t\t= \"计时条材质\"\nL.BarStyle\t\t\t\t\t= \"计时条样式\"\nL.BarDBM\t\t\t\t\t= \"DBM(有动画)\"\nL.BarSimple\t\t\t\t\t= \"简易(没动画)\"\nL.BarStartColor\t\t\t\t= \"初始颜色\"\nL.BarEndColor\t\t\t\t= \"结束颜色\"\nL.Bar_Height\t\t\t\t= \"计时条高度: %d\"\nL.Slider_BarOffSetX\t\t= \"X 偏移: %d\"\nL.Slider_BarOffSetY\t\t= \"Y 偏移: %d\"\nL.Slider_BarWidth\t\t\t= \"宽度: %d\"\nL.Slider_BarScale\t\t\t= \"缩放: %0.2f\"\nL.BarSaturation\t\t\t\t= \"小型计时条的饱和度 (当大型计时条被禁用时): %0.2f\"\n\n--Types\nL.BarStartColorAdd\t\t\t= \"初始颜色\\n(小怪)\"\nL.BarEndColorAdd\t\t\t= \"结束颜色\\n(小怪)\"\nL.BarStartColorAOE\t\t\t= \"初始颜色\\n(AOE)\"\nL.BarEndColorAOE\t\t\t= \"结束颜色\\n(AOE)\"\nL.BarStartColorDebuff\t\t= \"初始颜色\\n(点名技能)\"\nL.BarEndColorDebuff\t\t\t= \"结束颜色\\n(点名技能)\"\nL.BarStartColorInterrupt\t= \"初始颜色\\n(打断)\"\nL.BarEndColorInterrupt\t\t= \"结束颜色\\n(打断)\"\nL.BarStartColorRole\t\t\t= \"初始颜色\\n(剧情)\"\nL.BarEndColorRole\t\t\t= \"结束颜色\\n(剧情)\"\nL.BarStartColorPhase\t\t= \"初始颜色\\n(阶段转换)\"\nL.BarEndColorPhase\t\t\t= \"结束颜色\\n(阶段转换)\"\nL.BarStartColorUI\t\t\t= \"初始颜色\\n(自定义)\"\nL.BarEndColorUI\t\t\t\t= \"结束颜色\\n(自定义)\"\n--Type 7 options\nL.Bar7Header\t\t\t\t= \"自定义计时条选项\"\nL.Bar7ForceLarge\t\t\t= \"总是使用大型计时条\"\nL.Bar7CustomInline\t\t\t= \"使用自定义 '!' 图标\"\n--Dropdown Options\nL.CBTGeneric\t\t\t\t= \"通用\"\nL.CBTAdd\t\t\t\t\t= \"小怪\"\nL.CBTAOE\t\t\t\t\t= \"AOE\"\nL.CBTTargeted\t\t\t\t= \"点名\"\nL.CBTInterrupt\t\t\t\t= \"打断\"\nL.CBTRole\t\t\t\t\t= \"剧情\"\nL.CBTPhase\t\t\t\t\t= \"阶段\"\nL.CBTImportant\t\t\t\t= \"重要 (自定义)\"\nL.CVoiceOne\t\t\t\t\t= \"倒数 1\"\nL.CVoiceTwo\t\t\t\t\t= \"倒数 2\"\nL.CVoiceThree\t\t\t\t= \"倒数 3\"\n\n-- Panel: Timers\nL.Panel_Appearance\t\t\t= \"计时条设置\"\nL.Panel_Behavior\t\t\t= \"计时条特性\"\nL.AreaTitle_BarSetup\t\t= \"计时条综合设置\"\nL.AreaTitle_Behavior\t\t= \"计时条特性设置\"\nL.AreaTitle_BarSetupSmall\t= \"小型计时条设置\"\nL.AreaTitle_BarSetupHuge\t= \"大型计时条设置\"\nL.AreaTitle_BarSetupVariance\t= \"差异计时条设置\"\nL.EnableHugeBar\t\t\t= \"开启大型计时条（2号计时条）\"\nL.EnableVarianceBar \t\t= \"开启差异计时条\"\nL.VarianceTransparency\t\t= \"差异计时条透明度: %0.1f\"\nL.VarianceTimerTextBehavior\t= \"设置可变计时条行为\"\nL.ZeroatWindowEnds\t\t\t= \"文本在CD结束时归零\"\nL.ZeroatWindowStartPause\t= \"文本在CD结束时归零并暂停T\"\nL.ZeroatWindowStartRestart\t= \"文本在CD结束时归零并重复\"\nL.ZeroatWindowStartNeg\t\t= \"文本在CD结束时归零并变为负数\"--Default\nL.BarIconLeft\t\t\t\t= \"左侧图标\"\nL.BarIconRight\t\t\t\t= \"右侧图标\"\nL.ExpandUpwards\t\t\t\t= \"快消失的计时条在上\"\nL.FillUpBars\t\t\t\t= \"填充计时条\"\nL.ClickThrough\t\t\t\t= \"禁用鼠标点击事件（允许你点击计时条后面的目标）\"\nL.Bar_Decimal\t\t\t\t= \"%d 秒以内显示小数点\"\nL.Bar_Alpha\t\t\t\t\t= \"透明度: %0.1f\"\nL.Bar_EnlargeTime\t\t\t= \"在 %d 秒后计时条变大\"\nL.BarSpark\t\t\t\t\t= \"计时条闪光\"\nL.BarFlash\t\t\t\t\t= \"快走完时闪动\"\nL.BarSort\t\t\t\t\t= \"按剩余时间排序\"\nL.BarColorByType\t\t\t= \"按类着色\"\nL.NoBarFade\t\t\t\t\t= \"使用开始/结束颜色作为长/短计时条颜色，而不是颜色渐变\"\nL.BarInlineIcons\t\t\t= \"显示条内图标\"\nL.ShortTimerText\t\t\t= \"使用更短的计时条文字 (当可行时)\"\nL.StripTimerText\t\t\t= \"分离 CD/下一次 计时条\"\nL.KeepBar\t\t\t\t\t= \"保持计时条显示直到技能被释放\"\nL.KeepBar2\t\t\t\t\t= \"(当被模组支持时)\"\nL.FadeBar\t\t\t\t\t= \"隐藏超出技能范围的计时条\"\nL.BarSkin\t\t\t\t\t= \"计时条外观\"\n\n-- Tab: Global Disables & Filters\nL.TabCategory_Filters\t\t= \"禁用及过滤选项\"\nL.Area_DBMFiltersSetup\t\t= \"DBM 信息过滤指南\"\nL.Area_BlizzFiltersSetup\t= \"暴雪信息过滤指南\"\n-- Panel: DBM Features\nL.Panel_SpamFilter\t\t\t= \"DBM 全局过滤选项\"\nL.Area_SpamFilter_Anounces\t= \"警报过滤选项\"\nL.SpamBlockNoShowAnnounce\t= \"不显示警报或播放警报音效\"\nL.SpamBlockNoShowTgtAnnounce= \"不显示针对目标类型的警报或播放警报音效(上面那个优先级比这个高)\"\nL.SpamBlockNoTrivialSpecWarnSound\t= \"如果相对你等级是不重要的内容则不播放特別警报音效 (播放使用选择的标准警报音效替代)\"\n\nL.Area_SpamFilter_SpecRoleFilters\t= \"特殊警报过滤选项(控制DBM要怎么做)\"\nL.SpamSpecRoleDispel\t\t\t\t= \"过滤 '驱散/偷取' 警报\"\nL.SpamSpecRoleInterrupt\t\t\t\t= \"过滤 '打断' 警报\"\nL.SpamSpecRoleDefensive\t\t\t\t= \"过滤 '自保' 警报\"\nL.SpamSpecRoleTaunt\t\t\t\t\t= \"过滤 '嘲讽' 警报\"\nL.SpamSpecRoleSoak\t\t\t\t\t= \"过滤 '吸收' 警报\"\nL.SpamSpecRoleStack\t\t\t\t\t= \"过滤 '叠加层数/层数过高' 警报\"\nL.SpamSpecRoleSwitch\t\t\t\t= \"过滤 '转火' 警报\"\nL.SpamSpecRoleGTFO\t\t\t\t\t= \"过滤 '快躲开' 警报\"\n\nL.Area_SpamFilter_SpecFeatures\t\t= \"设置特殊警报功能选项\"\nL.SpamBlockNoSpecWarnText\t\t\t= \"不显示特殊警报提示文字\"\nL.SpamBlockNoSpecWarnFlash\t\t\t= \"特殊警报时不闪烁屏幕\"\nL.SpamBlockNoSpecWarnVibrate\t\t= \"特殊警报时不振动\"\nL.SpamBlockNoSpecWarnSound\t= \"不播放特殊团队警报的声音（如果在“语音警报”面板中启用了语音包，则仍然允许语音包）\"\nL.SpamBlockRaidWarning\t\t= \"过滤其他首领预警插件警报\"\nL.SpamBlockBossWhispers\t\t= \"战斗中过滤DBM密语警报\"\n\n\nL.Area_SpamFilter_Timers\t\t\t= \"计时器过滤选项\"\nL.SpamBlockNoShowBossTimers\t\t\t= \"不为Boss显示计时条\"\nL.SpamBlockNoShowTrashTimers\t\t= \"不为小怪显示计时条（同时关闭姓名版CD）\"\nL.SpamBlockNoShowEventTimers\t\t= \"不显示事件计时条（角色扮演，Boss刷新）\"\nL.SpamBlockNoShowUTimers\t\t\t= \"不显示用户自定义生成的计时条(Custom/Pull/Break)\"\nL.SpamBlockNoCountdowns\t\t\t\t= \"不要播放倒计时语音\"\n\nL.Area_SpamFilter_Misc\t\t= \"全局过滤设置\"\nL.SpamBlockNoSetIcon\t\t= \"不在目标上设定标记\"\nL.SpamBlockNoRangeFrame\t\t= \"不显示距离雷达框体\"\nL.SpamBlockNoInfoFrame\t\t= \"不显示信息框体\"\nL.SpamBlockNoHudMap\t\t\t= \"不显示 HudMap\"\nL.SpamBlockNoNameplate\t\t= \"不显示姓名面板高亮\"\nL.SpamBlockNoYells\t\t\t= \"不在战斗中大喊\"\nL.SpamBlockNoNoteSync\t\t= \"不接受别人分享的自定义备注\"\n\nL.Area_Restore\t\t\t\t= \"DBM战斗结束重置设置（在模块完成后，DBM 是否还原先前的设置）\"\nL.SpamBlockNoIconRestore\t= \"当战斗结束后不保存团队标记状态并重置\"\nL.SpamBlockNoRangeRestore\t= \"当Boss模块隐藏距离窗体时不重置窗体位置\"\n\nL.Area_SpamFilter\t\t\t= \"信息过滤选项\"\nL.DontShowFarWarnings\t\t= \"不为过远的事件显示计时条/警报\"\nL.StripServerName\t\t\t= \"警报和计时器中不显示服务器名\"\nL.FilterVoidFormSay\t\t\t= \"在$spell:47241時不要發送圖示/倒數計時聊天喊話(仍會發送標準聊天喊話)\"\n\nL.Area_SpecFilter\t\t\t= \"角色过滤选项\"\nL.FilterTankSpec\t\t\t= \"当非坦克专精时，过滤掉给予坦克的专用信息\"\nL.FilterInterruptsHeader\t= \"基于行为偏好的打断技能提示过滤。\"\nL.SWFNever\t\t\t\t\t= \"从不\"\nL.FilterInterrupts\t\t\t= \"如果被打断对象不是当前目标/焦点(总是)\"\nL.FilterInterrupts2\t\t\t= \"如果被打断对象不是当前目标/焦点(总是)或者打断技能正在冷却(限Boss)\"\nL.FilterInterrupts3\t\t\t= \"如果被打断对象不是当前目标/焦点(总是)或者打断技能正在冷却(Boss和小怪)\"\nL.FilterInterruptNoteName\t= \"当自定义注记内没有包含你的名字的时候，过滤掉打断提示 (带计数)\"\nL.FilterDispels\t\t\t\t= \"当驱散技能在冷却时, 过滤掉驱散提示\"\nL.FilterTrashWarnings\t\t= \"当进入普通或英雄副本时，过滤掉所有小怪警报\"\n\nL.Area_PullTimer\t\t\t= \"开怪和倒计时过滤设置\"\nL.DontShowPTNoID\t\t\t= \"不显示不同区域发送的倒计时\"\nL.DontShowPT\t\t\t\t= \"不显示开怪和倒计时条\"\nL.DontShowPTText\t\t\t= \"不显示开怪和倒计时文字\"\nL.DontShowPTCountdownText\t= \"不显示开怪倒计时动画\"\nL.DontPlayPTCountdown\t\t= \"不播放开怪倒计时语音\"\nL.PT_Threshold\t\t\t\t= \"不显示高于 %d 秒的倒计时动画\"\n\nL.Area_TimerTracker\t\t\t= \"TimerTracker 选项\"\nL.PlayTT\t\t\t\t\t= \"启用TimerTracker\"\nL.PlayTTCountdown\t\t\t= \"播放 TimerTracker 倒计时声音\"\nL.PlayTTCountdownFinished\t= \"播放 TimerTracker 倒计时完成声音\"\n\n-- Panel: Blizzard Features\nL.Panel_HideBlizzard\t\t= \"隐藏游戏自带内容\"\nL.Area_HideBlizzard\t\t\t= \"隐藏游戏自带提示选项\"\nL.HideBossEmoteFrame\t\t= \"Boss 战斗中隐藏Boss表情框体\"\nL.HideWatchFrame\t\t\t= \"在没有成就追踪的情况下，Boss战斗中隐藏任务追踪框体\"\nL.HideGarrisonUpdates\t\t= \"Boss 战斗中隐藏要塞队列完成提示\"\nL.HideGuildChallengeUpdates\t= \"Boss 战斗中隐藏公会挑战成功信息\"\nL.HideQuestTooltips\t\t\t= \"Boss 战斗中隐藏鼠标提示窗体中的任务进度\"\nL.HideTooltips\t\t\t\t= \"Boss 战斗中完全隐藏鼠标提示窗体\"\nL.DisableSFX\t\t\t\t= \"Boss 战斗中关闭音效(注意：如果你开启了这个选项，即使你在战斗开始时已关闭音效，战斗结束后音效也会被开启)\"\nL.DisableCinematics\t\t\t= \"自动跳过游戏内过场动画\"\nL.OnlyFight\t\t\t\t\t= \"只有在战斗中，每部动画播放了一次之后跳过\"\nL.ReportRecount\t\t\t\t= \"在boss遭遇结束后发送Recount报告（需要协助）\"\nL.ReportSkada\t\t\t\t= \"在boss结束后发送SkadaRevisited报告（需要协助）\"\nL.AfterFirst\t\t\t\t= \"仅第一次播放\"\nL.CombatOnly\t\t\t\t= \"在任何战斗中隐藏\"\nL.RaidCombat\t\t\t\t= \"在BOSS战斗中隐藏 \"\n\n-- Panel: Privacy\nL.Tab_Privacy\t\t\t\t= \"密语设置\"\nL.Area_WhisperMessages\t\t= \"密语信息设置\"\nL.AutoRespond\t\t\t\t= \"在战斗中自动回复私聊\"\nL.WhisperStats\t\t\t\t= \"在回复的私聊中包含击杀或灭团次数统计信息\"\nL.DisableStatusWhisper\t\t= \"屏蔽全团成员的密语(需要团长权限)。只对普通/英雄/神话团队和挑战/神话五人小队有效。\"\nL.Area_SyncMessages\t\t\t= \"信息同步设置\"\nL.DisableGuildStatus\t\t= \"禁止通报团队进度信息到公会(需要团长权限)\"\nL.EnableWBSharing\t\t\t= \"当世界增益BUFF的激活或者世界BOSS刷新/击杀；分享给在同服务器的战网好友。 （此信息将始终与您的公会分享）\"\n\n-- Tab: Frames & Integrations\nL.TabCategory_Frames\t\t= \"框体及其它\"\nL.Area_NamelateInfo\t\t\t= \"DBM 姓名板光环信息\"\n-- Panel: InfoFrame\nL.Panel_InfoFrame\t\t\t= \"信息框\"\n\n-- Panel: Range\nL.Panel_Range\t\t\t\t= \"距离框\"\n\n-- Panel: Nameplate\nL.Panel_Nameplates\t\t\t= \"姓名板\"\nL.UseNameplateHandoff\t\t= \"将姓名板上显示技能图标移交给支持的插件（KuiNameplates，Threat Plates，Plater），而不是DBM处理。 推荐使用此选项，因为能通过姓名板插件完成更高级的功能和配置。\"\nL.Area_NPStyle\t\t\t\t= \"样式(注意：仅能使用DBM配置支持的样式。)\"\nL.NPAuraSize\t\t\t\t= \"技能图标大小 (比例): %d\"\n\n-- Misc\nL.Area_General\t\t\t\t= \"一般\"\nL.Area_Position\t\t\t\t= \"位置\"\nL.Area_Style\t\t\t\t= \"样式\"\n\nL.FontSize\t\t\t\t\t= \"字体大小: %d\"\nL.FontStyle\t\t\t\t\t= \"字体样式\"\nL.FontColor\t\t\t\t\t= \"字体颜色\"\nL.FontShadow\t\t\t\t= \"字体阴影\"\nL.FontType\t\t\t\t\t= \"选择字体\"\n\nL.FontHeight\t= 18\n\n-- Retail Globals\nL.LARGE = \"大\"\nL.SMALL = \"小\"\nL.PLAYER_DIFFICULTY6 = \"史诗\" -- ID: 24525\nL.PLAYER_DIFFICULTY_TIMEWALKER = \"时空漫游\" -- ID: 25846\n"
  },
  {
    "path": "DBM-GUI/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nif not DBM_GUI_L then DBM_GUI_L = {} end\n\nlocal L = DBM_GUI_L\n\n--L.MainFrame = \"Deadly Boss Mods\"\n\nL.TranslationByPrefix\t\t= \"Retail backport von \"\nL.TranslationBy\t\t\t= \"Barsoom, Bunny67, Zidras\"\nL.Website\t\t\t\t\t= \"Besuche uns auf Discord: |cFF73C2FBhttps://discord.gg/CyVWDWS|r.\"\nL.WebsiteButton\t\t\t\t= \"Webseite\"\n\nL.OTabBosses\t= \"Bosse\"\nL.OTabOptions\t= GAMEOPTIONS_MENU\n\nL.TabCategory_Options\t\t= \"Allgemeine Einstellungen\"\nL.TabCategory_OTHER\t\t\t= \"Sonstige Boss Mods\"\n\nL.BossModLoaded\t\t\t= \"Statistiken von %s\"\nL.BossModLoad_now\t\t\t= [[Dieses Boss Mod ist nicht geladen. Es wird automatisch geladen, wenn du die Instanz betrittst. Du kannst auch auf den Button klicken um das Boss Mod manuell zu laden.]]\n\n\n\nL.PosX\t\t\t\t\t\t= \"Position X\"\nL.PosY\t\t\t\t\t\t= \"Position Y\"\n\nL.MoveMe\t\t\t\t\t= \"Positionieren\"\nL.Button_OK\t\t\t\t= \"OK\"\nL.Button_Cancel\t\t\t= \"Abbrechen\"\nL.Button_LoadMod\t\t\t= \"Lade Boss Mod\"\nL.Mod_Enabled\t\t\t\t= \"Aktiviere Boss Mod\"\nL.Mod_Reset\t\t\t\t\t= \"Lade Standardeinstellungen\"\nL.Reset\t\t\t\t\t= \"Zurücksetzen\"\n\nL.Enable\t\t\t\t\t= \"Aktiviert\"\nL.Disable\t\t\t\t\t= \"Deaktiviert\"\n\nL.NoSound\t\t\t\t\t= \"Kein Sound\"\n\nL.IconsInUse\t\t\t\t= \"Zeichennutzung des Mods\"\n\n-- Tab: Boss Statistics\nL.BossStatistics\t\t\t= \"Boss Statistiken\"\nL.Statistic_Kills\t\t\t= \"Siege:\"\nL.Statistic_Wipes\t\t\t= \"Niederlagen:\"\nL.Statistic_Incompletes\t\t= \"Abgebrochen:\"\nL.Statistic_BestKill\t\t= \"Rekordzeit:\"\nL.Statistic_BestRank\t\t= \"Höchste Stufe:\"\n\n-- Tab: General Core Options\nL.General\t\t\t\t\t= \"Allgemeine Grundeinstellungen\"\nL.EnableMiniMapIcon\t\t\t= \"Aktiviere Minimap-Symbol\"\nL.UseSoundChannel\t\t\t= \"Audiokanal um DBM-Sounddateien abzuspielen\"\nL.UseMasterChannel\t\t\t= \"Master Audiokanal\"\nL.UseDialogChannel\t\t\t= \"Dialog Audiokanal\"\nL.UseSFXChannel\t\t\t\t= \"Soundeffekte (SFX) Audiokanal\"\nL.Latency_Text\t\t\t\t= \"Maximale Synchronisierungslatenz: %d\"\n\nL.ModelOptions\t\t\t\t= \"Einstellungen für 3D-Modellanzeige\"\nL.EnableModels\t\t\t\t= \"Aktiviere 3D-Modelle in den Bosseinstellungen\"\nL.ModelSoundOptions\t\t\t= \"Soundeinstellung für Modellanzeige\"\n-- L.ModelSoundShort\t\t\t= SHORT\n-- L.ModelSoundLong\t\t\t= TOAST_DURATION_LONG\n\nL.Button_RangeFrame\t\t\t= \"Zeige Abstandsfenster\"\nL.Button_InfoFrame\t\t\t= \"Zeige Infofenster\"\nL.Button_TestBars\t\t\t= \"Starte Testbalken\"\nL.Button_ResetInfoRange\t\t= \"Info-/Abstandsfenster zurücksetzen\"\n\n-- Tab: Raidwarning\nL.Tab_RaidWarning\t\t\t= \"Schlachtzugwarnungen\"\nL.RaidWarning_Header\t\t= \"Einstellungen für Schlachtzugwarnungen\"\nL.RaidWarnColors\t\t\t= \"Farben für Schlachtzugwarnungen\"\nL.RaidWarnColor_1\t\t\t= \"Farbe 1\"\nL.RaidWarnColor_2\t\t\t= \"Farbe 2\"\nL.RaidWarnColor_3\t\t\t= \"Farbe 3\"\nL.RaidWarnColor_4\t\t\t= \"Farbe 4\"\nL.InfoRaidWarning\t\t\t= [[Hier werden Position und Farben des Fensters für Schlachtzugwarnungen festgelegt. Dieses Fenster wird für Nachrichten wie \"Spieler X ist betroffen von Y\" verwendet.]]\n\nL.ColorResetted\t\t\t= \"Diese Farbeinstellung wurde zurückgesetzt.\"\nL.ShowWarningsInChat\t\t= \"Zeige Warnungen im Chatfenster\"\nL.ShowFakedRaidWarnings\t\t= \"Zeige Warnungen als künstliche Schlachtzugwarnung\"\nL.WarningIconLeft\t\t\t= \"Zeige Symbol links an\"\nL.WarningIconRight\t\t\t= \"Zeige Symbol rechts an\"\nL.WarningIconChat\t\t\t= \"Zeige Symbole im Chatfenster\"\nL.WarningAlphabetical\t\t= \"Sortiere Namen alphabetisch\"\nL.Warn_Duration\t\t\t\t= \"Warnungsdauer: %0.1fs\"\nL.None\t\t\t\t\t\t= \"normal\"\nL.Random\t\t\t\t\t= \"Zufall\"\nL.Outline\t\t\t\t\t= \"mit Umriss\"\nL.ThickOutline\t\t\t\t= \"mit dickem Umriss\"\nL.MonochromeOutline\t\t\t= \"ohne Glättung, mit Umriss\"\nL.MonochromeThickOutline\t= \"ohne Glätt., mit dickem Umriss\"\nL.RaidWarnSound\t\t\t\t= \"Sound für Schlachtzugwarnungen\"\n\n-- Tab: Generalwarnings\nL.Tab_GeneralMessages\t\t= \"Allgemeine Meldungen\"\nL.CoreMessages\t\t\t\t= \"Systemmeldungen\"\nL.ShowPizzaMessage\t\t\t= \"Zeige Meldungen für Timerbroadcasts im Chatfenster\"\nL.ShowAllVersions\t\t\t= \"Zeige beim Durchführen einer Versionsprüfung die Boss Mod Versionen aller Gruppenmitglieder im Chatfenster (ansonsten nur eine Zusammenfassung der Aktualität)\"\nL.CombatMessages\t\t\t= \"Kampfmeldungen\"\nL.ShowEngageMessage\t\t= \"Zeige Meldungen für den Beginn von Kämpfen im Chatfenster\"\nL.ShowDefeatMessage\t\t= \"Zeige Meldungen für Siege/Niederlagen im Chatfenster\"\nL.ShowGuildMessages\t\t= \"Zeige Meldungen für Kampfbeginn/Siege/Niederlagen für Schlachtzüge deiner Gilde im Chatfenster\"\nL.ShowGuildMessagesPlus\t\t= \"Zeige auch Meldungen für Kampfbeginn/Siege/Niederlagen für Mythisch+ Gildengruppen (benötigt Schlachtzugeinstellung)\"\nL.Area_WhisperMessages\t\t= \"Flüstermeldungen\"\nL.AutoRespond\t\t\t\t= \"Aktiviere automatische Antwort während eines Bosskampfes\"\nL.WhisperStats\t\t\t\t= \"Füge Sieg-/Niederlagestatistik den Flüsterantworten hinzu\"\nL.DisableStatusWhisper\t\t= \"Deaktiviere 'status'-Flüsteranfragen für die gesamte Gruppe (nur als Gruppenleiter; nur für normale/heroische/mythische Schlachtzüge und Mythisch+ Dungeons)\"\nL.DisableGuildStatus\t\t= \"Deaktiviere das Senden von Fortschrittsmeldungen an die Gilde für die gesamte Gruppe (nur als Gruppenleiter)\"\n\n-- Tab: Barsetup\nL.TabCategory_Timers\t\t= \"Balkeneinstellungen\"\nL.BarTexture\t\t\t\t= \"Balkentextur\"\nL.BarStyle\t\t\t\t\t= \"Balkenstil\"\nL.BarDBM\t\t\t\t\t= \"DBM (mit Animationen)\"\nL.BarSimple\t\t\t\t\t= \"Einfach (ohne Animationen)\"\nL.BarStartColor\t\t\t\t= \"Startfarbe\"\nL.BarEndColor\t\t\t\t= \"Endfarbe\"\nL.Bar_Height\t\t\t\t= \"Balkenhöhe: %d\"\nL.Slider_BarOffSetX\t\t= \"Abstand X: %d\"\nL.Slider_BarOffSetY\t\t= \"Abstand Y: %d\"\nL.Slider_BarWidth\t\t\t= \"Breite: %d\"\nL.Slider_BarScale\t\t\t= \"Skalierung: %0.2f\"\n--Types\nL.BarStartColorAdd\t\t\t= \"Startfarbe\\n(Add)\"\nL.BarEndColorAdd\t\t\t= \"Endfarbe\\n(Add)\"\nL.BarStartColorAOE\t\t\t= \"Startfarbe\\n(AOE)\"\nL.BarEndColorAOE\t\t\t= \"Endfarbe\\n(AOE)\"\nL.BarStartColorDebuff\t\t= \"Startfarbe\\n(Anvisiert)\"\nL.BarEndColorDebuff\t\t\t= \"Endfarbe\\n(Anvisiert)\"\nL.BarStartColorInterrupt\t= \"Startfarbe\\n(Unterbrechung)\"\nL.BarEndColorInterrupt\t\t= \"Endfarbe\\n(Unterbrechung)\"\nL.BarStartColorRole\t\t\t= \"Startfarbe\\n(Rolle)\"\nL.BarEndColorRole\t\t\t= \"Endfarbe\\n(Rolle)\"\nL.BarStartColorPhase\t\t= \"Startfarbe\\n(Phase)\"\nL.BarEndColorPhase\t\t\t= \"Endfarbe\\n(Phase)\"\nL.BarStartColorUI\t\t\t= \"Startfarbe\\n(Nutzer)\"\nL.BarEndColorUI\t\t\t\t= \"Endfarbe\\n(Nutzer)\"\n--Type 7 options\nL.Bar7Header\t\t\t\t= \"Einstellungen für Nutzerbalken\"\nL.Bar7ForceLarge\t\t\t= \"Nutze immer großen Balken\"\nL.Bar7CustomInline\t\t\t= \"Zeichen '!' einbetten\"\n--Dropdown Options\nL.CBTGeneric\t\t\t\t= \"Generisch\"\nL.CBTAdd\t\t\t\t\t= \"Weiter Gegner (Adds)\"\nL.CBTAOE\t\t\t\t\t= \"Flächenschaden (AOE)\"\nL.CBTTargeted\t\t\t\t= \"Als Ziel ausgewählt (Targeted)\"\nL.CBTInterrupt\t\t\t\t= \"Unterbrechen\"\nL.CBTRole\t\t\t\t\t= \"Gruppenrolle\"\nL.CBTPhase\t\t\t\t\t= \"Phase\"\nL.CBTImportant\t\t\t\t= \"Wichtig (für den Nutzer)\"\nL.CVoiceOne\t\t\t\t\t= \"Zählstimmme 1\"\nL.CVoiceTwo\t\t\t\t\t= \"Zählstimmme 2\"\nL.CVoiceThree\t\t\t\t= \"Zählstimmme 3\"\n-- Tab: Timers\nL.AreaTitle_BarColors\t\t= \"Balkenfarben nach Timertyp\"\nL.AreaTitle_BarSetup\t\t= \"Einstellungen für das Aussehen der Balken\"\nL.AreaTitle_Behavior\t\t= \"Einstellungen für das Verhalten der Balken\"\nL.AreaTitle_BarSetupSmall\t= \"Einstellungen für kleine Balken\"\nL.AreaTitle_BarSetupHuge\t= \"Einstellungen für große Balken\"\nL.EnableHugeBar\t\t\t= \"Aktiviere große Balken (Balken 2)\"\nL.BarIconLeft\t\t\t\t= \"Symbol links\"\nL.BarIconRight\t\t\t\t= \"Symbol rechts\"\nL.ExpandUpwards\t\t\t\t= \"Erweitere oben\"\nL.FillUpBars\t\t\t\t= \"Balken auffüllen\"\nL.ClickThrough\t\t\t\t= \"Mausereignisse deaktiv. (durchklickbar)\"\nL.Bar_Decimal\t\t\t\t= \"Nachkomma unterhalb Restzeit: %d\"\nL.Bar_Alpha\t\t\t\t\t= \"Balkenalpha: %0.1f\"\nL.Bar_EnlargeTime\t\t\t= \"Vergrößern unterhalb Restzeit: %d\"\nL.BarSpark\t\t\t\t\t= \"Balkenfunken\"\nL.BarFlash\t\t\t\t\t= \"Aufblinkende Balken bei baldigem Ablauf\"\nL.BarSort\t\t\t\t\t= \"Sortiere nach verbleibender Zeit\"\nL.BarColorByType\t\t\t= \"Färbung nach Typ\"\nL.NoBarFade\t\t\t\t\t= \"Nutze Start und End Farbe für kleine/große Balken anstelle eines Farbverlaufs\"\nL.BarInlineIcons\t\t\t= \"Zeichen einbetten\"\nL.ShortTimerText\t\t\t= \"Nutze kurzen Timertext (falls verfügbar)\"\nL.StripTimerText\t\t\t= \"CD/Nächste aus Timern entfernen\"\nL.KeepBar\t\t\t\t\t= \"Halte Timer aktiv bis Fähigkeit ausgeführt wird\"\nL.KeepBar2\t\t\t\t\t= \"(falls von mod unterstützt)\"\nL.FadeBar\t\t\t\t\t= \"Verblasse Timer von Fähigkeiten auserhalb der Reichweite\"\n\n-- Tab: Spec Warn Frame\nL.Panel_SpecWarnFrame\t\t= \"Spezial Schlachtzug Warnungen\"\nL.Area_SpecWarn\t\t\t\t= \"Einstellungen für Spezialwarnungen\"\nL.SpecWarn_ClassColor\t\t= \"Benutze Klassenfarben für Spezialwarnungen\"\nL.ShowSWarningsInChat\t\t= \"Zeige Spezialwarnungen im Chatfenster\"\nL.SWarnNameInNote\t\t\t= \"Nutze SW 5 falls eine Notiz deinen Namen enthält\"\nL.SpecialWarningIcon\t\t= \"Zeige Symbole an Spezialwarnungen\"\nL.ShortTextSpellname\t\t= \"Nutze verkürzten Zaubername (falls verfügbar)\"\nL.SpecWarn_FlashFrameRepeat\t= \"Wiederhole %d-mal (falls aktiviert)\"\nL.SpecWarn_FlashRepeat\t\t= \"Wiederh. Blinken\"\nL.SpecWarn_Flash\t\t\t= \"Bildschirmblinken\"\nL.SpecWarn_FlashColor\t\t= \"Blinkfarbe %d\"\nL.SpecWarn_FlashDur\t\t\t= \"Blinkdauer: %0.1f\"\nL.SpecWarn_FlashAlpha\t\t= \"Blinkalpha: %0.1f\"\nL.SpecWarn_DemoButton\t\t= \"Zeige Beispiel\"\nL.SpecWarn_ResetMe\t\t\t= \"Zurücksetzen\"\nL.SpecialWarnSoundOption\t= \"Setze Standardton\"\nL.SpecialWarnHeader1\t\t= \"Typ 1: Setze Option für normal priotisierte Ansagen welche mich und meine Aktionen betreffen\"\nL.SpecialWarnHeader2\t\t= \"Typ 2: Setze Option für normal priotisierte Ansagen welche alle betreffen\"\nL.SpecialWarnHeader3\t\t= \"Typ 3: Setze Option für hoch priotisierte Ansagen\"\nL.SpecialWarnHeader4\t\t= \"Typ 4: Setze Option für hoch priotisierte 'Renn weg' Spezialansagen\"\nL.SpecialWarnHeader5\t\t= \"Typ 5: Setze Option für Ansagen mit Notizen, welche meinen Spielernamen betreffen\"\n\n-- Tab: Spoken Alerts Frame\nL.Panel_SpokenAlerts\t\t= \"Gesprochene Warnungen\"\nL.Area_VoiceSelection\t\t= \"Stimmenauswahl für akustische Zählungen und gesprochene Warnungen\"\nL.CountdownVoice\t\t\t= \"Primäre Stimme für Zählungen\"\nL.CountdownVoice2\t\t\t= \"Sekundäre Stimme für Zählungen\"\nL.CountdownVoice3\t\t\t= \"Tertiäre Stimme für Zählungen\"\nL.VoicePackChoice\t\t\t= \"Sprachpack für gesprochene Warnungen\"\nL.Area_CountdownOptions\t\t= \"Countdown-Einstellungen\"\nL.SWFNever\t\t\t\t\t= \"nicht filtern\"\nL.SpecWarn_AlwaysVoice\t\t= \"Spiele immer alle gesprochenen Warnungen (ignoriert Boss-spezifische Einstellung, manchmal nützlich für Schlachtzugsleiter andernfalls nicht empfohlen)\"\n\nL.Area_BrowseOtherVP\t\t= \"Suche andere Sprachpacks auf Curse\"\n--L.BrowseOtherVPs\nL.Area_BrowseOtherCT\t\t= \"Suche Countdownpacks auf Curse\"\n--L.BrowseOtherCTs\n\n-- Tab: Event Sounds\nL.Panel_EventSounds\t\t\t= \"Ereignisklänge\"\nL.Area_SoundSelection\t\t= \"Soundauswahl (scrollbar per Mausrad)\"\nL.EventVictorySound\t\t\t= \"Sound gespielt nach Sieg im Kampf\"\nL.EventWipeSound\t\t\t= \"Sound gespielt nach Niederlage im Kampf\"\nL.EventEngageSound\t\t\t= \"Sound gespielt bei Kampfbeginn\"\nL.EventDungeonMusic\t\t\t= \"Musik gepielt innerhalb Dungeons/SZs\"\nL.EventEngageMusic\t\t\t= \"Musik gepielt während Kämpfen\"\nL.Area_EventSoundsExtras\t= \"Einstellungen für Ereignisklänge\"\nL.EventMusicCombined\t\t= \"Alle Musikauswahlmöglichkeiten für Dungeons und Kämpfe zulassen (Änderungen dieser Einstellung werden erst nach \\\"/reload\\\" sichtbar.)\"\nL.Area_EventSoundsFilters\t= \"Filter für Ereignisklänge\"\nL.EventFilterDungMythicMusic= \"Spiele keine Dungeonmusik auf Schwierigkeitsgrad Mythisch/Mythisch+\"\nL.EventFilterMythicMusic\t= \"Spiele keine Kampfmusik auf Schwierigkeitsgrad Mythisch/Mythisch+\"\n\n-- Tab: HealthFrame\nL.Panel_HPFrame\t\t\t\t= \"Lebensanzeige\"\nL.Area_HPFrame\t\t\t\t= \"Lebensanzeige-Optionen\"\nL.HP_Enabled\t\t\t\t= \"Lebensanzeige immer anzeigen (überschreibt boss-spezifische Option)\"\nL.HP_GrowUpwards\t\t\t= \"Erweitere Lebensanzeige nach oben\"\nL.HP_ShowDemo\t\t\t\t= \"Zeige Lebensanzeige\"\nL.BarWidth\t\t\t\t\t= \"Balkenbreite: %d\"\n\n-- Tab: Global Filter\nL.Panel_SpamFilter\t\t\t= \"Deaktivierung von DBM-Funktionen\"\nL.Area_SpamFilter_Anounces\t= \"Announce Global Disable & Filter Options\"\nL.SpamBlockNoShowAnnounce\t= \"Zeige keinen Text und spiele keine Sounds für JEGLICHE allgemeine Meldungen\"\nL.SpamBlockNoShowTgtAnnounce= \"Zeige keinen Text und spiele keine Sounds für allgemeine ZIEL-Meldungen (wird durch obigen Filter überschrieben)\"\nL.SpamBlockNoSpecWarnText\t= \"Zeige keinen Spezialwarnungstext, aber erlaube dennoch Sprachpacks (wird durch obigen Filter überschrieben)\"\n\nL.Area_SpamFilter_Timers\t= \"Timer Global Disable & Filter Options\"\nL.SpamBlockNoShowTimers\t\t= \"Zeige keine Mod-Timer (Boss Mod/Herausforderungsmodus/Gruppensuche/Wiedererscheinen)\"\nL.SpamBlockNoShowUTimers\t= \"Zeige keine von anderen gesendeten Timer (benutzerdefiniert/Pull/Pause)\"\nL.SpamBlockNoCountdowns\t\t= \"Spiele keine Countdown-Sounds\"\n\nL.Area_SpamFilter_Misc\t\t= \"Misc Global Disable & Filter Options\"\nL.SpamBlockNoSetIcon\t\t= \"Setze keine Zeichen auf Ziele\"\nL.SpamBlockNoRangeFrame\t\t= \"Zeige kein Abstandsfenster/-radar an\"\nL.SpamBlockNoInfoFrame\t\t= \"Zeige kein Infofenster an\"\nL.SpamBlockNoHudMap\t\t\t= \"Zeige keine HudMap\"\nL.SpamBlockNoNameplate\t\t= \"Zeige keine Namensplakettenauras\"\nL.SpamBlockNoYells\t\t\t= \"Sende keine automatischen Schreie\"\nL.SpamBlockNoNoteSync\t\t= \"Akzeptiere keine geteilten Notizen\"\n\nL.Area_Restore\t\t\t\t= \"DBM-Wiederherstellungseinstellungen (Setzen des vorherigen Nutzerzustands nach Mod-Ende)\"\nL.SpamBlockNoIconRestore\t= \"Setze Markierungszeichen am Kampfende nicht auf den vorherigen Zustand zurück\"\nL.SpamBlockNoRangeRestore\t= \"Setze das Abstandsfenster nicht auf den vorherigen Zustand zurück, wenn es von Mods ausgeblendet wird\"\n\n-- Tab: Spam Filter\nL.Area_SpamFilter\t\t\t= \"Spam-Filter\"\nL.DontShowFarWarnings\t\t= \"Zeige keine Mitteilungen/Timer für weit entfernte Ereignisse\"\nL.StripServerName\t\t\t= \"Entferne den Realmnamen der Spieler in Warnungen und Timern\"\nL.FilterVoidFormSay\t\t\t= \"Sende keine Chat-Icons oder Countdowns während der $spell:47241 (reguläre Chat-Schreie werden weiterhin gesendet)\"\n\nL.Area_SpecFilter\t\t\t= \"Filtereinstellungen für Rollen\"\nL.FilterTankSpec\t\t\t= \"Unterdrücke Warnungen für Tanks, falls deine aktuelle Spezialisierung keine \\\"Schutz\\\"-Spezialisierung ist (Hinweis: Diese Filterung sollte normalerweise nicht deaktiviert werden, da alle individuellen \\\"Spott\\\"-Warnungen nun standardmäßig aktiviert sind.)\"\nL.FilterInterruptsHeader\t= \"Unterdrücke Warnungen für unterbrechbare Zauber basierend auf Verhaltenseinstellung\"\nL.FilterInterrupts\t\t\t= \"nicht von akt. Ziel/Fokusziel gewirkt (immer)\"\nL.FilterInterrupts2\t\t\t= \"nicht von akt. Ziel/Fokusziel gewirkt (immer) oder Unterbrechungen auf CD (nur Boss)\"\nL.FilterInterrupts3\t\t\t= \"nicht von akt. Ziel/Fokusziel gewirkt (immer) oder Unterbrech. auf CD (Boss & Trash)\"\nL.FilterInterruptNoteName\t= \"Unterdrücke Warnungen für unterbrechbare Zauber (mit Zählung), falls die Warnung nicht deinen Namen in der nutzerdefinierten Notiz enthält\"\nL.FilterDispels\t\t\t\t= \"Unterdrücke Warnungen für reinigbare Zauber, falls deine Reinigungen noch abklingen\"\nL.FilterTrashWarnings\t\t= \"Unterdrücke alle \\\"Trash\\\"-Gegner Warnungen in normalen und heroischen Dungeons\"\n\nL.Area_PullTimer\t\t\t= \"Filtereinstellungen für Pull-, Pausen-, Kampf- und benutzerdefinierte Timer\"\nL.DontShowPTNoID\t\t\t= \"Blockiere Pull-Timer, die nicht aus deiner derzeitigen Zone gesendet worden sind\"\nL.DontShowPT\t\t\t\t= \"Zeige keinen Timerbalken für Pull-/Pausen-Timer\"\nL.DontShowPTText\t\t\t= \"Zeige keine Mitteilungen für Pull-/Pausen-Timer im Chatfenster\"\nL.DontPlayPTCountdown\t\t= \"Spiele keinen akustischen Countdown für Pull-, Pausen-, Kampf- und benutzerdefinierte Timer\"\nL.DontShowPTCountdownText\t= \"Zeige keinen optischen Countdown für Pull-Timer\"\nL.PT_Threshold\t\t\t\t= \"Zeige keinen opt. Countd. für Pausen-/Kampf-/Nutzer-Timer über: %d\"\n\nL.Area_TimerTracker\t\t\t= \"TimerTracker-Optionen\"\nL.PlayTT\t\t\t\t\t= \"Aktiviere TimerTracker\"\nL.PlayTTCountdown\t\t\t= \"TimerTracker-akustischen Countdown abspielen\"\nL.PlayTTCountdownFinished\t= \"TimerTracker Countdown beendet akustischen abspielen\"\n\nL.Panel_HideBlizzard\t\t= \"Deaktivierung von Spielelementen\"\nL.Area_HideBlizzard\t\t\t= \"Einstellungen zum Deaktivieren und Verbergen von Spielelementen\"\nL.HideBossEmoteFrame\t\t= \"Verberge das Fenster \\\"RaidBossEmoteFrame\\\" während Bosskämpfen\"\nL.SpamBlockRaidWarning\t\t= \"Ansagen von anderen Boss Mods filtern\"\nL.SpamBlockBossWhispers\t\t= \"Aktiviere Filter für DBM-Flüstermitteilungen im Kampf\"\nL.HideWatchFrame\t\t\t= \"Verberge das Fenster für die Questverfolgung während Bosskämpfen, falls keine Erfolge verfolgt werden und falls nicht Schwierigkeitsgrad Mythisch+\"\nL.HideGarrisonUpdates\t\t= \"Verberge Garnisonsmeldungen während Bosskämpfen\"\nL.HideGuildChallengeUpdates\t= \"Verberge Gildenerfolgsmeldungen während Bosskämpfen\"\nL.HideQuestTooltips\t\t\t= \"Verberge Questziele in Tooltips während Bosskämpfen\"\nL.HideTooltips\t\t\t\t= \"Verberge Tooltips vollständig während Bosskämpfen\"\nL.DisableSFX\t\t\t\t= \"Deaktiviere Soundeffekte während Bosskämpfen\"\nL.DisableCinematics\t\t\t= \"Verberge Videosequenzen\"\nL.ReportRecount\t\t\t\t= \"Schicke Recountreport nach Kampfende (Assistent benötigt)\"\nL.ReportSkada\t\t\t\t= \"Schicke SkadaRevisitedreport nach Kampfende (Assistent benötigt)\"\nL.PerCharacterSettings\t\t= \"Verwende Charakterprofile anstelle eines Allgemeinprofils\"\nL.AfterFirst\t\t\t\t= \"Nach jeweils einmaligem Abspielen\"\nL.CombatOnly\t\t\t\t= \"im Kampf deaktivieren (alle)\"\nL.RaidCombat\t\t\t\t= \"im Kampf deaktivieren (nur Bosse)\"\n\nL.Panel_ExtraFeatures\t\t= \"Sonstige Funktionen\"\n--\nL.Area_ChatAlerts\t\t\t= \"Alarmmeldungen im Chatfenster\"\nL.RoleSpecAlert\t\t\t\t= \"Zeige Alarmmeldung, wenn deine Beutespezialisierung nicht deiner aktuellen Spezialisierung beim Betreten eines Schlachtzugs entspricht\"\nL.CheckGear\t\t\t\t\t= \"Zeige Alarmmeldung beim Pull, wenn deine angelegte Gegenstandsstufe viel niedriger als die in deinen Taschen (40+) oder deine Hauptwaffe nicht ausgerüstet ist\"\nL.WorldBossAlert\t\t\t= \"Zeige Alarmmeldung, wenn auf deinem Realm Gildenmitglieder oder Freunde möglicherweise beginnen gegen Weltbosse zu kämpfen (ungenau falls Sender \\\"CRZed\\\" ist)\"\n--\nL.Area_SoundAlerts\t\t\t= \"Akustische und aufblinkende Alarme\"\nL.LFDEnhance\t\t\t\t= \"Spiele \\\"Bereitschaftscheck\\\"-Sound und lasse Anwendungsymbol aufblicken für Rollenabfragen und Einladungen der Gruppensuche im Master- oder Dialog-Audiokanal (funktioniert z.B. auch wenn Soundeffekte abgeschaltet sind und ist allgemein lauter)\"\nL.WorldBossNearAlert\t\t= \"Spiele \\\"Bereitschaftscheck\\\"-Sound und lasse Anwendungsymbol aufblicken, wenn Weltbosse in deiner Nähe gepullt werden, die du brauchst\"\nL.RLReadyCheckSound\t\t\t= \"Wenn ein Bereitschaftscheck durchgeführt wird, den Sound im Master- oder Dialog-Audiokanal abspielen und Anwendungsymbol aufblicken lassen\"\nL.AFKHealthWarning\t\t\t= \"Spiele Alarmsound und lasse Anwendungsymbol aufblicken, wenn du Gesundheit verlierst, während du als nicht an der Tastatur (\\\"AFK\\\") markiert bist\"\nL.AutoReplySound\t\t\t= \"Spiele Warnton und blinke Anwendungssymbol beim Erhalt von DBM auto-Antwort\"\n--\nL.TimerGeneral\t\t\t\t= \"Allgemeine Einstellungen für Timer\"\nL.SKT_Enabled\t\t\t\t= \"Zeige Timer für Rekordzeit für aktuellen Kampf (falls verfügbar)\"\nL.ShowRespawn\t\t\t\t= \"Zeige Zeit bis zum Wiedererscheinen des Bosses nach einer Niederlage\"\nL.ShowQueuePop\t\t\t\t= \"Zeige verbleibende Zeit zur Annahme einer Warteschlangeneinladung (Gruppensuche, Schlachtfelder, etc.)\"\n--\nL.Area_AutoLogging\t\t\t= \"Automatische Aufzeichnungen\"\nL.AutologBosses\t\t\t\t= \"Automatische Aufzeichnung von Bosskämpfen im spieleigenen Kampflog (/dbm pull vor Bossen wird benötigt um die Aufzeichnung rechtzeitig für \\\"Pre-Pots\\\" und andere Ereignisse zu starten)\"\nL.AdvancedAutologBosses\t\t= \"Automatische Aufzeichnung von Bosskämpfen mit Addon \\\"Transcriptor\\\"\"\nL.RecordOnlyBosses\t\t\t= \"Nimm keinen Trash auf (Es werden nur Bosse aufgenommen. Nutze \\\"/dbm pull\\\" vor Bossen um pre pull Pots &amp; ENCOUNTER_START aufzuzeichnen)\"\nL.LogOnlyNonTrivial\t\t\t= \"Nur Schlachtzugbosskämpfe der aktuellen Erweiterung aufzeichnen\\n(ohne Schlachtzugsbrowser-/Dungeon-/Szenarienbosskämpfe/alte Spielinhalte)\"\n--\nL.Area_3rdParty\t\t\t\t= \"Einstellungen für Addons von Drittanbietern\"\nL.oRA3AnnounceConsumables\t= \"Melde oRA3 Verbrauchsgüter Check bei Kampfbeginn\"\nL.Area_Invite\t\t\t\t= \"Einstellungen für Einladungen\"\nL.AutoAcceptFriendInvite\t= \"Automatisch Gruppeneinladungen von Freunden akzeptieren\"\nL.AutoAcceptGuildInvite\t\t= \"Automatisch Gruppeneinladungen von Gildenmitgliedern akzeptieren\"\nL.Area_Advanced\t\t\t\t= \"Erweiterte Einstellungen\"\nL.FakeBW\t\t\t\t\t= \"Bei Versionsprüfungen als \\\"BigWigs\\\" ausgeben, statt als DBM (nützlich für Gilden, die die Nutzung von \\\"BigWigs\\\" erzwingen)\"\nL.AITimer\t\t\t\t\t= \"Erzeuge automatisch Timer für unbekannte Kämpfe mit der in DBM eingebauten Timer-KI (nützlich beim erstmaligen Pullen eines Test-Bosses, etwa auf Beta- oder PTR-Servern) Hinweis: Dies funktioniert nicht richtig bei mehreren Gegnern mit derselben Fähigkeit.\"\nL.FixCLEUOnCombatStart\t\t= \"Lösche Kampflog bei Pull/Kampfende und Zonenwechsel\"\n\nL.Panel_Profile\t\t\t\t= \"Profile\"\nL.Area_CreateProfile\t\t= \"Profilerzeugung für DBM Core Einstellungen\"\nL.EnterProfileName\t\t\t= \"Profilnamen eingeben\"\nL.CreateProfile\t\t\t\t= \"Erzeuge Profil mit Standardeinstellungen\"\nL.Area_ApplyProfile\t\t\t= \"Aktives Profil für DBM Core Einstellungen\"\nL.SelectProfileToApply\t\t= \"Anzuwendendes Profil auswählen\"\nL.Area_CopyProfile\t\t\t= \"Kopiere Profil für DBM Core Einstellungen\"\nL.SelectProfileToCopy\t\t= \"Zu kopierendes Profil auswählen\"\nL.Area_DeleteProfile\t\t= \"Entferne Profil für DBM Core Einstellungen\"\nL.SelectProfileToDelete\t\t= \"Zu löschendes Profil auswählen\"\nL.Area_DualProfile\t\t\t= \"Boss Mod Profileinstellungen\"\nL.DualProfile\t\t\t\t= \"Aktiviere Unterstützung für verschiedene Boss Mod Einstellungen pro Spezialisierung (Die Verwaltung der Boss Mod Profile erfolgt im geladenen Boss Mod Statistikfenster.)\"\n\nL.Area_ModProfile\t\t\t= \"Kopiere Mod-Einstellungen von Charakter/Spezialisierung oder lösche Mod-Einstellungen\"\nL.ModAllReset\t\t\t\t= \"Alle Einstellungen zurücksetzen\"\nL.ModAllStatReset\t\t\t= \"Alle Statistiken zurücksetzen\"\nL.SelectModProfileCopy\t\t= \"Kopiere alle Einstellungen von\"\nL.SelectModProfileCopySound\t= \"Kopiere nur Soundeinst. von\"\nL.SelectModProfileCopyNote\t= \"Kopiere nur Notizen von\"\nL.SelectModProfileCurrent\t= \"Aktuelles Boss Mod-Profil\"\nL.SelectModProfileDelete\t= \"Lösche Mod-Einstellungen für\"\n\nL.Area_ImportExportProfile\t= \"Import/Export von Profilen\"\nL.ImportExportInfo\t\t\t= \"Importieren überschreibt das aktuelle Profil. Nutzung auf eigene Gefahr.\"\nL.ButtonImportProfile\t\t= \"Importiere Profil\"\nL.ButtonExportProfile\t\t= \"Exportiere Profil\"\nL.ProfileExportTitle\t\t= \"Dies ist Dein aktuelles Profil im Textformat.\"\nL.ProfileExportSubtitle\t= \"Drücke STRG-C um die Konfiguration in die Zwischenablage zu kopieren.\"\nL.ProfileImportTitle\t\t= \"Fügen Sie hier ein Profil im Textformat ein.\"\nL.ProfileImportSubtitle\t= \"Drücke STRG-V um den DBM Konfigurationstext einzufügen.\"\n\n\n-- Misc\nL.FontType\t\t\t\t\t= \"Schriftart\"\nL.FontStyle\t\t\t\t\t= \"Schriftstil\"\nL.FontColor\t\t\t\t\t= \"Schriftfarbe\"\nL.FontShadow\t\t\t\t= \"Schatten\"\nL.FontSize\t\t\t\t\t= \"Schriftgröße: %d\"\n\nL.FontHeight\t= 16\n\nL.OTabRaids=\"Schlachtzug\"\nL.OTabDungeons=\"Gruppe/Solo\"\nL.OTabAbout=\"Über DBM\"\nL.TabCategory_AFFIXES=\"Affixe\"\nL.Import=\"Importieren\"\nL.Area_BasicSetup=\"Tipos für die Initiale DBM Konfiguration\"\nL.Area_ModulesForYou=\"Welche DBM Module sind die Richtigen für mich?\"\nL.Area_ProfilesSetup=\"Leitfaden zur Nutzung der DBM Profil Funktion\"\nL.Button_MoveBars=\"bewege Balken\"\nL.ResizeOptions=\"Größeneinstellungen\"\nL.ResizeInfo=\"Die GUI-Größe kann durch klicken auf die untere rechte Ecke und ziehen verändert werden\"\nL.Button_ResetWindowSize=\"Zurücksetzen der GUI-Fenster größe\"\nL.Editbox_WindowWidth=\"GUI Fenster breite\"\nL.Editbox_WindowHeight=\"GUI Fenster höhe\"\nL.UIGroupingOptions=\"UI Gruppen Optionen (eine Änderung dieser Optionen während eine Mod bereits geladen ist benötigt ein UI-Reload)\"\nL.GroupOptionsBySpell=\"Gruppiere Mod-Optionen nach Zauber (falls unterstützt)\"\nL.GroupOptionsExcludeIcon=\"Ausnahme der \\\"setze Icon auf\\\" Optionen von der Zaubergruppierung (sie bleiben weiterhin in der \\\"Icons\\\" Kategorie)\"\nL.AutoExpandSpellGroups=\"Erweitere automatisch die Optionen welche nach Zauber gruppiert sind\"\nL.NoDescription=\"Diese Fähigkeit hat keine Beschreibung\"\nL.Area_AutoLoggingFilters=\"Filter für automatischen Aufzeichnen\"\nL.DoNotLogLFG=\"Nimm keinen mit Hilfe des Gruppenfinder bestrittene Inhalte auf (LFG/LFR\"\nL.Area_AutoLoggingContent=\"Automatisch aufgezeichnete Inhalte\"\nL.LogCurrentMythicRaids=\"aktuelle Mythische Raids\"\nL.LogCurrentRaids=\"aktuelle nicht Mythische Raids (Heroisch, Normal und LFR falls der LFG/LFR Filter deaktiviert ist)\"\nL.LogTWRaids=\"Zeitwanderung oder Chromie-Zeit Raid\"\nL.LogTrivialRaids=\"Triviale (unter Character Level) Raids\"\nL.LogCurrentMPlus=\"Aktuelle M+ Dungeons\"\nL.LogCurrentMythicZero=\"Aktuelle Mythische (M0) Dungeons\"\nL.LogTWDungeons=\"Zeitwanderung oder Chromie-Zeit Dungeons\"\nL.LogCurrentHeroic=\"Aktuelle Heroische Dungeons (Falls heroische Filter via Gruppenfinder abgeschlossen werden muss der LFG Filter deaktiviert sein)\"\nL.LogCurrentNormal=\"Aktuelle Normal Dungeons (Falls heroische Filter via Gruppenfinder abgeschlossen werden muss der LFG Filter deaktiviert sein)\"\nL.LogTrivialDungeons=\"Triviale (unter Character Level) Dungeons\"\nL.ImportErrorOn=\"Benutzerdefinierte Töne für Einstellung %s fehlen\"\nL.ImportVoiceMissing=\"Fehlendes Sprachpaket: %s\"\nL.TabCategory_Alerts=\"Warnungen\"\nL.Area_SpecAnnounceConfig=\"Leitfaden für Spezial Schlachtzugwarnungen und Töne\"\nL.Area_SpecAnnounceNotes=\"Leitfaden für Notizen für Spezial Schlachtzugwarnungen\"\nL.Area_VoicePackInfo=\"Informationen über DBM Sprachpakete\"\nL.SpecWarn_Vibrate=\"Kontrollervibration\"\nL.ShowReminders=\"Zeige Erinnerungsnachrichten für fehlende und deaktivierte sub-Module, sub-Modul hotfixes sowie veraltete Sub-Module und aktivierter Lautlos-modus\"\nL.WorldBuffAlert=\"Zeige Warnung und Timer wenn World-Buff RP auf dem eigenen Realm gestartet wurde\"\nL.Area_BugAlerts=\"Einstellungen für Fehlermeldungen\"\nL.BadTimerAlert=\"Zeige Chat Nachricht wenn DBM einen Timer mit einer Abweichung von mehr als einer Sekunde entdeckt\"\nL.BadIDAlert=\"Zeige Chat Nachricht wenn DBM die Verwendung einer ungültige Zauber oder Abenteuerführer ID entdeckt\"\nL.PullVoice=\"Setze Stimme für Pull-Timer\"\nL.MissingVoicePack=\"Fehlendes Sprachpaket (%s)\"\nL.Area_VoicePackReplace=\"Optionen für Sprachpaketsounds (welche Sounds wann aktiviert, vertstummt und ersetzt werden)\"\nL.VPReplaceNote=\"Bemerkung: Sprachpakete werden niemals Warnsounds verändern oder entfernen.\\n Sound werden lediglich stummgeschaltet  wenn diese von einem Sprachpaket ersetzt werden.\"\nL.ReplacesAnnounce=\"Ersetze Sounds für Ansagen (Anmerkung: Nur wenige Sprachpakete verwenden dies für mehr als Phasenwechsel und zusätzliche Gegner)\"\nL.ReplacesSA1=\"Ersetze Töne für Spezialansagen 1 (Ansagen für mich bzw. 'pvpflag')\"\nL.ReplacesSA2=\"Ersetze Töne für Spezialansagen 2 (Ansagen für den ganzen Raid bzw. 'beware')\"\nL.ReplacesSA3=\"Ersetze Töne für Spezialansagen 3 (hohe Priorität bzw. 'airhorn')\"\nL.ReplacesSA4=\"Ersetze Töne für Spezialansagen 4 ('Renn weg' ansagen mit hoher Priorität)\"\nL.ReplacesCustom=\"Ersetze benutzerdefinierte Töne für Spezialwarnungen (nicht empfohlen)\"\nL.Area_VoicePackAdvOptions=\"Erweiterte Optionen für Sprachpakete\"\nL.VPDontMuteSounds=\"Deaktiviert das Stummschalten regulärer Warnungstönen bei Verwendung eines Sprachpakets (führt zum Abspielen von Tönen des Sprachpakets zusätzlich zu den Standardtönen)\"\nL.Area_VPLearnMore=\"Weiteres zu Sprachpaketen und deren Optionen\"\nL.EventEngagePT=\"Sound für Pull-Timer\"\nL.Area_ColorBytype=\"Leitfaden für das Färben von Balken nach Typ\"\nL.Panel_ColorByType=\"Färben nach Typ\"\nL.BarSaturation=\"Balkensättigung für kleine Timer (falls große Timer deaktiviert sind): %0.2f\"\nL.Panel_Appearance=\"Aussehen der Balken\"\nL.Panel_Behavior=\"Verhalten der Balken\"\nL.Highest=\"längster nach oben\"\nL.Lowest=\"kürzester nach oben\"\nL.BarSkin=\"Balken skin\"\nL.TabCategory_Filters=\"Globale Deaktivierungen & Filter\"\nL.Area_DBMFiltersSetup=\"Leitfaden für DBM Filter\"\nL.Area_BlizzFiltersSetup=\"Leitfaden für Blizzard Filter\"\nL.SpamBlockNoTrivialSpecWarnSound=\"Spiele keine Sounds ab und blinke nicht den Bildschirm für Spezialwarnungen in Trivialen Inhalten unterm Spielerlevel (Spielt stattdesen Nutzerdefinierte reguläre Töne ab)\"\nL.Area_SpamFilter_SpecRoleFilters=\"Filter für Spezialansagen nach Typ\"\nL.SpamSpecInformationalOnly=\"Entfernt alle Anweisungen von Text und gesprochenen Warnungen (Benötigt UI Reload). Warnungen werden weiterhin angezeigt und spielen Audio ab sind aber generisch und nicht leitend\"\nL.SpamSpecRoleDispel=\"Deaktiviert alle 'dispel' Meldungen (Weder Text noch Sound werden abgespielt)\"\nL.SpamSpecRoleInterrupt=\"Deaktiviert alle 'Unterbrechen' Meldungen (Weder Text noch Sound werden abgespielt)\"\nL.SpamSpecRoleDefensive=\"Deaktiviert alle 'defensive' Meldungen (Weder Text noch Sound werden abgespielt)\"\nL.SpamSpecRoleTaunt=\"Deaktiviert alle 'Spott' Meldungen (Weder Text noch Sound werden abgespielt)\"\nL.SpamSpecRoleSoak=\"Deaktiviert alle 'soak' Meldungen (Weder Text noch Sound werden abgespielt)\"\nL.SpamSpecRoleStack=\"Deaktiviert alle 'hohe Stacks' Meldungen (Weder Text noch Sound werden abgespielt)\"\nL.SpamSpecRoleSwitch=\"Deaktiviert alle 'Zielwechsel' &amp; 'adds' Meldungen (Weder Text noch Sound werden abgespielt)\"\nL.SpamSpecRoleGTFO=\"Deaktiviert alle 'gtfo' Meldungen (Weder Text noch Sound werden abgespielt)\"\nL.SpamBlockNoSpecWarnFlash=\"Zeige kein Bildschirmblinken für Spezialwarnungen\"\nL.Area_SpamFilter_SpecFeatures=\"Schaltet spezielle Funktionen für Spezialwarnung um\"\nL.SpamBlockNoSpecWarnVibrate=\"Deaktiviere Kontrollervibration bei Spezialwarnungen\"\nL.SpamBlockNoSpecWarnSound=\"Deaktiviert das Abspielen von Sounds für Spezialwarnung (Sprachpakete spielen weiterhin ihre Warnungen ab falls diese aktiviert sind)\"\nL.OnlyFight=\"Nur während des Kampfes nachdem jeder Film einmal angesehen wurde.\"\nL.Tab_Privacy=\"Einstellungen für die Privatssphäre\"\nL.Area_SyncMessages=\"Optionen zur Addon Synchronisation\"\nL.EnableWBSharing=\"Teile Weltboss Pulls und Siege mit deiner Gilde und battle.net Freunden auf dem selben Realm\"\nL.TabCategory_Frames=\"Fenster und Integrationen\"\nL.Area_NamelateInfo=\"DBM Aura Info für Namensplaketten\"\nL.Panel_InfoFrame=\"Infofenster\"\nL.Panel_Range=\"Reichweitenfenster\"\nL.Panel_Nameplates=\"Namensplaketten\"\nL.UseNameplateHandoff=\"Leitet Aura anfragen an unterstützte Addons für Namensplaketten weiter (KuiNameplates, ThreatPlates, Plater) statt diese selbst hanzuhaben. Dies ist die Empfohlen Einstellung, da es weitere Funktionen und Einstellungen von Seiten der Namensplaketten Addons erlaubt\"\nL.Area_NPStyle=\"Stil (Passt den Stil nur an, wenn DBM die Namensplaketten handhabt)\"\nL.NPAuraSize=\"Größe der Aura (in Pixel): %d\"\nL.Area_Position=\"Position\"\nL.Area_Style=\"Stil\"\nL.Area_General=\"Allgemein\"\n\n-- Retail Globals\nL.LARGE = \"Groß\"\nL.SMALL = \"Kleine\"\nL.PLAYER_DIFFICULTY6 = \"Mythisch\" -- ID: 24525\nL.PLAYER_DIFFICULTY_TIMEWALKER = \"Zeitwanderung\" -- ID: 25846\n"
  },
  {
    "path": "DBM-GUI/localization.en.lua",
    "content": "DBM_GUI_L = {}\n\nlocal L = DBM_GUI_L\nlocal CL = DBM_CORE_L\n\nL.MainFrame \t\t\t\t\t\t= CL.DEADLY_BOSS_MODS -- NO TRANSLATE\n\nL.DBMWarmane\t\t\t\t\t\t= CL.DBM .. \"-Warmane by Zidras\"\nL.TranslationByPrefix\t\t\t\t= \"Retail backport by \"\nL.TranslationBy\t\t\t\t\t\t= \"Barsoom, Bunny67, Zidras\"\nL.Website\t\t\t\t\t\t\t= \"Visit us on discord at |cFF73C2FBhttps://discord.gg/CyVWDWS|r\"\nL.WebsiteButton\t\t\t\t\t\t= \"Website\"\n\nL.OTabBosses\t\t\t\t\t\t= \"Boss Options\"--Deprecated and will be deleted once tabs no longer use this\nL.OTabRaids\t\t\t\t\t\t\t= \"Raid\"--Raids & PVP\nL.OTabDungeons\t\t\t\t\t\t= \"Party/Solo\"--1-5 person content (Dungeons, MoP Scenarios, World Events, Brawlers, Proving Grounds, Visions, Torghast, etc)\nL.OTabPlugins\t\t\t\t\t\t= \"Core Plugins\"\nL.OTabOptions\t\t\t\t\t\t= \"Core Options\"\nL.OTabAbout\t\t\t\t\t\t\t= \"About\"\n\nL.TabCategory_OTHER\t\t\t\t\t= \"Other Mods\"\nL.TabCategory_AFFIXES\t\t\t\t= \"Affixes\"\n\nL.BossModLoaded\t\t\t\t\t\t= \"%s statistics\"\nL.BossModLoad_now\t\t\t\t\t= [[This boss mod is not loaded.\nIt will be loaded when you enter the instance.\nYou can also click the button to load the mod manually.]]\n\nL.PosX\t\t\t\t\t\t\t\t= \"Position X\"\nL.PosY\t\t\t\t\t\t\t\t= \"Position Y\"\n\nL.MoveMe\t\t\t\t\t\t\t= \"Move me\"\nL.Button_OK\t\t\t\t\t\t\t= \"OK\"\nL.Button_Cancel\t\t\t\t\t\t= \"Cancel\"\nL.Button_LoadMod\t\t\t\t\t= \"Load AddOn\"\nL.Mod_Enabled\t\t\t\t\t\t= \"Enable boss mod\"\nL.Mod_Reset\t\t\t\t\t\t\t= \"Load default options\"\nL.Reset\t\t\t\t\t\t\t\t= \"Reset\"\nL.Import\t\t\t\t\t\t\t= \"Import\"\n\nL.Enable\t\t\t\t\t\t\t= ENABLE\nL.Disable\t\t\t\t\t\t\t= DISABLE\n\nL.NoSound\t\t\t\t\t\t\t= \"No sound\"\n\nL.IconsInUse\t\t\t\t\t\t= \"Icons used by this mod\"\n\n-- Tab: Boss Statistics\nL.BossStatistics\t\t\t\t\t= \"Boss Statistics\"\nL.Statistic_Kills\t\t\t\t\t= \"Victories:\"\nL.Statistic_Wipes\t\t\t\t\t= \"Wipes:\"\nL.Statistic_Incompletes\t\t\t\t= \"Incompletes:\"--For scenarios, TODO, figure out a clean way to replace any Statistic_Wipes with Statistic_Incompletes for scenario mods\nL.Statistic_BestKill\t\t\t\t= \"Best Victory:\"\nL.Statistic_BestRank\t\t\t\t= \"Best Rank:\"--Maybe not get used, not sure yet, localize anyways\n\n-- Tab: General Options\nL.TabCategory_Options\t\t\t\t= \"General Options\"\nL.Area_BasicSetup\t\t\t\t\t= \"Initial DBM Setup Tips\"\nL.Area_ModulesForYou\t\t\t\t= \"What DBM modules are right for you?\"\nL.Area_ProfilesSetup\t\t\t\t= \"DBM Profiles usage guide\"\n-- Panel: Core & GUI\nL.Core_GUI\t\t\t\t\t\t\t= \"Core & GUI\"\nL.General\t\t\t\t\t\t\t= \"General DBM Core Options\"\nL.EnableMiniMapIcon\t\t\t\t\t= \"Show minimap button\"\nL.UseSoundChannel\t\t\t\t\t= \"Set audio channel used by DBM to play alert sounds\"\nL.UseMasterChannel\t\t\t\t\t= \"Master audio channel.\"\nL.UseDialogChannel\t\t\t\t\t= \"Dialog audio channel.\"\nL.UseSFXChannel\t\t\t\t\t\t= \"Sound Effects (SFX) audio channel.\"\nL.Latency_Text\t\t\t\t\t\t= \"Set max latency sync threshold: %d\"\n\nL.Button_RangeFrame\t\t\t\t\t= \"Show/hide range frame\"\nL.Button_InfoFrame\t\t\t\t\t= \"Show/hide info frame\"\nL.Button_TestBars\t\t\t\t\t= \"Start test bars\"\nL.Button_MoveBars\t\t\t\t\t= \"Move bars\"\nL.Button_ResetInfoRange\t\t\t\t= \"Reset Info/Range frames\"\n\nL.ModelOptions\t\t\t\t\t\t= \"3D Model Viewer Options\"\nL.EnableModels\t\t\t\t\t\t= \"Enable 3D models in boss options\"\nL.ModelSoundOptions\t\t\t\t\t= \"Set sound option for model viewer\"\nL.ModelSoundShort\t\t\t\t\t= AUCTION_TIME_LEFT1 -- Short\nL.ModelSoundLong\t\t\t\t\t= AUCTION_TIME_LEFT3 -- Long\n\nL.ResizeOptions\t\t\t\t\t\t= \"Resize Options\"\nL.ResizeInfo\t\t\t\t\t\t= \"You can resize the GUI by clicking the bottom-right corner, and dragging.\"\nL.Button_ResetWindowSize\t\t\t= \"Reset GUI window size\"\nL.Editbox_WindowWidth\t\t\t\t= \"GUI window width\"\nL.Editbox_WindowHeight\t\t\t\t= \"GUI window height\"\n\nL.UIGroupingOptions\t\t\t\t\t= \"UI Grouping Options (changing these require UI reload for any mod that's already loaded)\"\nL.GroupOptionsBySpell\t\t\t\t= \"Group mod options by spell (for mods that support it)\"\nL.GroupOptionsExcludeIcon\t\t\t= \"Exclude 'Set Icon on' options from getting grouped by spell (they will be grouped together in 'icons' category like before)\"\nL.AutoExpandSpellGroups\t\t\t\t= \"Auto expand options that are grouped by spell\"\n--L.ShowSpellDescWhenExpanded\t= \"Continue showing spell description when groups are expanded\"--Might not be used\nL.NoDescription\t\t\t\t\t\t= \"This ability has no description\"\n\n-- Panel: Extra Features\nL.Panel_ExtraFeatures\t\t\t\t= \"Extra Features\"\n\nL.Area_SoundAlerts\t\t\t\t\t= \"Sound/Flash Alert Options\"\nL.LFDEnhance\t\t\t\t\t\t= \"Play ready check sound and flash application icon for role checks &amp; BG/LFG proposals in Master or Dialog audio channel (I.E. sounds work even if SFX are off and are generally louder)\"\nL.WorldBossNearAlert\t\t\t\t= \"Play ready check sound and flash application icon when world bosses you are near to are pulled that you need\"\nL.RLReadyCheckSound\t\t\t\t\t= \"When a ready check is performed, play sound through Master or Dialog audio channel and flash application icon.\"\nL.AFKHealthWarning\t\t\t\t\t= \"Play alert sound and flash application icon if you are losing health while AFK\"\nL.AutoReplySound\t\t\t\t\t= \"Play alert sound and flash application icon when receiving DBM auto reply whisper\"\n--\nL.TimerGeneral\t\t\t\t\t\t= \"Timer Options\"\nL.SKT_Enabled\t\t\t\t\t\t= \"Show record victory timer for current fight if available\"\nL.ShowRespawn\t\t\t\t\t\t= \"Show boss respawn timer after a wipe\"\nL.ShowQueuePop\t\t\t\t\t\t= \"Show time remaining to accept a queue pop (LFG,BG,etc)\"\n--\n--Auto Logging: Logging toggles/types\nL.Area_AutoLogging\t\t\t\t\t= \"Auto Logging Toggles\"\nL.AutologBosses\t\t\t\t\t\t= \"Automatically record selected content using blizzard combat log\"\nL.AdvancedAutologBosses\t\t\t\t= \"Automatically record selected content with Transcriptor\"\n--Auto Logging: Global filter Options\nL.Area_AutoLoggingFilters\t\t\t= \"Auto Logging Filters\"\nL.RecordOnlyBosses\t\t\t\t\t= \"Do not record trash (Only records Bosses. Use '/dbm pull' before bosses to capture pre pull pots &amp; ENCOUNTER_START)\"\nL.DoNotLogLFG\t\t\t\t\t\t= \"Do not record LFG or LFR (queued content)\"\n--Auto Logging: Recorded Content types\nL.Area_AutoLoggingContent\t\t\t= \"Auto Logging Content\"\nL.LogCurrentMythicRaids\t\t\t\t= \"Current level Mythic raids\"--Retail Only\nL.LogCurrentRaids\t\t\t\t\t= \"Current level non Mythic raids (Heroic, Normal, and LFR if LFG/LFR filter is disabled)\"\nL.LogTWRaids\t\t\t\t\t\t= \"Timewalking or Chromie Time raids\"--Retail Only\nL.LogTrivialRaids\t\t\t\t\t= \"Trivial (below character level) raids\"\nL.LogCurrentMPlus\t\t\t\t\t= \"Current level M+ dungeons\"--Retail Only\nL.LogCurrentMythicZero\t\t\t\t= \"Current level Mythic 0 dungeons\"--Retail Only\nL.LogTWDungeons\t\t\t\t\t\t= \"Timewalking or Chromie Time dungeons\"--Retail Only\nL.LogCurrentHeroic\t\t\t\t\t= \"Current level Heroic dungeons (Note: if you are doing heroic via queuing and want it logged, turn off LFG filter)\"\nL.LogCurrentNormal\t\t\t\t\t= \"Current level Normal dungeons (Note: if you are doing heroic via queuing and want it logged, turn off LFG filter)\"\nL.LogTrivialDungeons\t\t\t\t= \"Trivial (below character level) dungeons\"\n--\nL.Area_3rdParty\t\t\t\t\t\t= \"3rd Party Addon Options\"\nL.oRA3AnnounceConsumables\t\t\t= \"Announce oRA3 consumables check on combat start\"\nL.ShowBBOnCombatStart\t\t\t\t= \"Perform Big Brother buff check on combat start\"\nL.BigBrotherAnnounceToRaid\t\t\t= \"Announce Big Brother results to raid\"\nL.Area_Invite\t\t\t\t\t\t= \"Invite Options\"\nL.AutoAcceptFriendInvite\t\t\t= \"Automatically accept group invites from friends\"\nL.AutoAcceptGuildInvite\t\t\t\t= \"Automatically accept group invites from guild members\"\nL.Area_Advanced\t\t\t\t\t\t= \"Advanced Options\"\nL.FakeBW\t\t\t\t\t\t\t= \"Pretend to be BigWigs in version checks instead of DBM (Useful for guilds that force using BigWigs)\"\nL.AITimer\t\t\t\t\t\t\t= \"Automatically generate timers for never before seen fights using DBM's built in timer AI (Useful for pulling a test boss for the very first time such as beta or PTR). Recommended to always leave this turned ON\"\nL.FixCLEUOnCombatStart\t\t\t\t= \"Clear combat log cache on pull/combat end and zone change\"\n\n-- Panel: Profiles\nL.Panel_Profile\t\t\t\t\t\t= \"Profiles\"\nL.Area_CreateProfile\t\t\t\t= \"Profile Creation for DBM Core Options\"\nL.EnterProfileName\t\t\t\t\t= \"Enter profile name\"\nL.CreateProfile\t\t\t\t\t\t= \"Create new profile with default settings\"\nL.Area_ApplyProfile\t\t\t\t\t= \"Set Active Profile for DBM Core Options\"\nL.SelectProfileToApply\t\t\t\t= \"Select profile to apply\"\nL.Area_CopyProfile\t\t\t\t\t= \"Copy profile for DBM Core Options\"\nL.SelectProfileToCopy\t\t\t\t= \"Select profile to copy\"\nL.Area_DeleteProfile\t\t\t\t= \"Remove Profile for DBM Core Options\"\nL.SelectProfileToDelete\t\t\t\t= \"Select profile to delete\"\nL.Area_DualProfile\t\t\t\t\t= \"Boss mod profile options\"\nL.DualProfile\t\t\t\t\t\t= \"Enable support for different boss mod options per spec. (Managing of boss mod profiles is done from loaded boss mod stats screen)\"\n\nL.Area_ModProfile\t\t\t\t\t= \"Copy mod settings from another char/spec or delete mod settings\"\nL.ModAllReset\t\t\t\t\t\t= \"Reset all mod settings\"\nL.ModAllStatReset\t\t\t\t\t= \"Reset all mod stats\"\nL.SelectModProfileCopy\t\t\t\t= \"Copy all settings from\"\nL.SelectModProfileCopySound\t\t\t= \"Copy just sound setting from\"\nL.SelectModProfileCopyNote\t\t\t= \"Copy just note setting from\"\nL.SelectModProfileCurrent\t\t\t= \"Current boss mod profile\"\nL.SelectModProfileDelete\t\t\t= \"Delete mod settings for\"\n\nL.Area_ImportExportProfile\t\t\t= \"Import/Export profiles\"\nL.ImportExportInfo\t\t\t\t\t= \"Importing will overwrite your current profile, do at your own risk.\"\nL.ButtonImportProfile\t\t\t\t= \"Import profile\"\nL.ButtonExportProfile\t\t\t\t= \"Export profile\"\nL.ProfileExportTitle\t\t\t\t= \"This is your current profile in text format.\"\nL.ProfileExportSubtitle\t\t\t\t= \"Press CTRL-C to copy the configuration to your clipboard.\"\nL.ProfileImportTitle\t\t\t\t= \"Paste here a profile in text format.\"\nL.ProfileImportSubtitle\t\t\t\t= \"Press CTRL-V to paste a DBM configuration text.\"\n\nL.ImportErrorOn\t\t\t\t\t\t= \"Custom sounds missing for setting: %s\"\nL.ImportVoiceMissing\t\t\t\t= \"Missing voice pack: %s\"\n\n-- Tab: Alerts\nL.TabCategory_Alerts\t\t\t\t= \"Alerts\"\nL.Area_SpecAnnounceConfig\t\t\t= \"Special Announce visuals and sound guide\"\nL.Area_SpecAnnounceNotes\t\t\t= \"Special Announce Notes guide\"\nL.Area_VoicePackInfo\t\t\t\t= \"Information on DBM Voice Packs\"\n-- Panel: Raidwarning\nL.Tab_RaidWarning\t\t\t\t\t= \"Announcements\"\nL.RaidWarning_Header\t\t\t\t= \"Announce Options\"\nL.RaidWarnColors\t\t\t\t\t= \"Announce Colors\"\nL.RaidWarnColor_1\t\t\t\t\t= \"Color 1\"\nL.RaidWarnColor_2\t\t\t\t\t= \"Color 2\"\nL.RaidWarnColor_3\t\t\t\t\t= \"Color 3\"\nL.RaidWarnColor_4\t\t\t\t\t= \"Color 4\"\nL.InfoRaidWarning\t\t\t\t\t= [[You can specify the position and colors of the raid warning frame.\nThis frame is used for messages like \"Player X is affected by Y\".]]\nL.ColorResetted\t\t\t\t\t\t= \"The color settings of this field have been reset.\"\nL.ShowWarningsInChat\t\t\t\t= \"Show announcements in chat frame\"\nL.ShowFakedRaidWarnings\t\t\t\t= \"Show warnings as faked raid warning messages\"\nL.WarningIconLeft\t\t\t\t\t= \"Show icon on left side\"\nL.WarningIconRight\t\t\t\t\t= \"Show icon on right side\"\nL.WarningIconChat\t\t\t\t\t= \"Show icons in chat frame\"\nL.WarningAlphabetical\t\t\t\t= \"Sort names alphabetically\"\nL.Warn_Duration\t\t\t\t\t\t= \"Announcement duration: %0.1f sec\"\nL.None\t\t\t\t\t\t\t\t= \"None\"\nL.Random\t\t\t\t\t\t\t= \"Random\"\nL.Outline\t\t\t\t\t\t\t= \"Outline\"\nL.ThickOutline\t\t\t\t\t\t= \"Thick outline\"\nL.MonochromeOutline\t\t\t\t\t= \"Monochrome outline\"\nL.MonochromeThickOutline\t\t\t= \"Monochrome thick outline\"\nL.RaidWarnSound\t\t\t\t\t\t= \"Play sound on raid announcement\"\n\n-- Panel: Spec Warn Frame\nL.Panel_SpecWarnFrame\t\t\t\t= \"Special Announcements\"\nL.Area_SpecWarn\t\t\t\t\t\t= \"Special Announce Options\"\nL.SpecWarn_ClassColor\t\t\t\t= \"Use class coloring for special announcements\"\nL.ShowSWarningsInChat\t\t\t\t= \"Show special announcements in chat frame\"\nL.SWarnNameInNote\t\t\t\t\t= \"Use Type 5 options if a special announce note contains your name\"\nL.SpecialWarningIcon\t\t\t\t= \"Show icons on special announcements\"\nL.ShortTextSpellname\t\t\t\t= \"Use shorter spellname text (when available)\"\nL.SpecWarn_FlashFrameRepeat\t\t\t= \"Flash %d times(s)\"\nL.SpecWarn_Flash\t\t\t\t\t= \"Flash screen\"\nL.SpecWarn_Vibrate\t\t\t\t\t= \"Vibrate controller\"\nL.SpecWarn_FlashRepeat\t\t\t\t= \"Repeat Flash\"\nL.SpecWarn_FlashColor\t\t\t\t= \"Flash color %d\"\nL.SpecWarn_FlashDur\t\t\t\t\t= \"Flash duration: %0.1f\"\nL.SpecWarn_FlashAlpha\t\t\t\t= \"Flash alpha: %0.1f\"\nL.SpecWarn_DemoButton\t\t\t\t= \"Show example\"\nL.SpecWarn_ResetMe\t\t\t\t\t= \"Reset to defaults\"\nL.SpecialWarnSoundOption\t\t\t= \"Set default sound\"\nL.SpecialWarnHeader1\t\t\t\t= \"Type 1: Set options for normal priority announcements affecting you or your actions\"\nL.SpecialWarnHeader2\t\t\t\t= \"Type 2: Set options for normal priority announcements affecting everyone\"\nL.SpecialWarnHeader3\t\t\t\t= \"Type 3: Set options for HIGH priority announcements\"\nL.SpecialWarnHeader4\t\t\t\t= \"Type 4: Set options for HIGH priority run away special announcements\"\nL.SpecialWarnHeader5\t\t\t\t= \"Type 5: Set options for announcements with notes containing your player name\"\n\n-- Panel: Generalwarnings\nL.Tab_GeneralMessages\t\t\t\t= \"Chatframe Messages\"\nL.CoreMessages\t\t\t\t\t\t= \"Core Message Options\"\nL.ShowPizzaMessage\t\t\t\t\t= \"Show timer broadcast messages in chat frame\"\nL.ShowAllVersions\t\t\t\t\t= \"Show boss mod versions for all group members in chat frame when doing a version check. (If disabled, still does out of date/current summery)\"\nL.ShowReminders\t\t\t\t\t\t= \"Show reminder messages for missing sub-mods, disabled sub-mods, sub-mod hotfixes, out of date sub-mods, and silent mode still being enabled\"\n\nL.CombatMessages\t\t\t\t\t= \"Combat Message Options\"\nL.ShowEngageMessage\t\t\t\t\t= \"Show engage messages in chat frame\"\nL.ShowDefeatMessage\t\t\t\t\t= \"Show kill/wipe messages in chat frame\"\nL.ShowGuildMessages\t\t\t\t\t= \"Show engage/kill/wipe messages for guild raids in chat frame\"\nL.ShowGuildMessagesPlus\t\t\t\t= \"Also show Mythic+ engage/kill/wipe messages for guild groups (requires raid option)\"\n\nL.Area_ChatAlerts\t\t\t\t\t= \"Additional Alert Options\"\nL.RoleSpecAlert\t\t\t\t\t\t= \"Show alert message on raid join when your loot spec does not match current spec\"\nL.CheckGear\t\t\t\t\t\t\t= \"Show gear alert message during pull (when your equipped ilvl is much lower than bag ilvl (40+) or main weapon is not equipped)\"\nL.WorldBossAlert\t\t\t\t\t= \"Show alert message when world bosses might have been engaged on your realm by guildies or friends (inaccurate if sender is CRZed)\"\nL.WorldBuffAlert\t\t\t\t\t= \"Show alert message and timer when world buff RP has been started on your realm\"\n\nL.Area_BugAlerts\t\t\t\t\t= \"Bug Reporting Alert Options\"\nL.BadTimerAlert\t\t\t\t\t\t= \"Show chat message when DBM detects a bad timer with at least 1 second of incorrectness\"\nL.BadIDAlert\t\t\t\t\t\t= \"Show chat message when DBM detects an invalid spell or journal ID in use\"\n\n-- Panel: Spoken Alerts Frame\nL.Panel_SpokenAlerts\t\t\t\t= \"Spoken Alerts\"\nL.Area_VoiceSelection\t\t\t\t= \"Voice Selections\"\nL.CountdownVoice\t\t\t\t\t= \"Set primary voice for count sounds\"\nL.CountdownVoice2\t\t\t\t\t= \"Set secondary voice for count sounds\"\nL.CountdownVoice3\t\t\t\t\t= \"Set tertiary voice for count sounds\"\nL.PullVoice\t\t\t\t\t\t\t= \"Set voice for pull timers\"\nL.VoicePackChoice\t\t\t\t\t= \"Set voice pack for spoken alerts\"\nL.MissingVoicePack\t\t\t\t\t= \"Missing Voice Pack (%s)\"\nL.Area_CountdownOptions\t\t\t\t= \"Countdown Options\"\nL.Area_VoicePackReplace\t\t\t\t= \"Voice Pack Replacement Options (which sounds voice packs, when enabled, mute and replace)\"\nL.VPReplaceNote\t\t\t\t\t\t= \"Note: Voice packs never change or remove your warning sounds.\\nThey are simply muted when voice pack replaces them.\"\nL.ReplacesAnnounce\t\t\t\t\t= \"Replace Announce sounds (Note: Very few use voice packs except for phase changes and adds\"\nL.ReplacesSA1\t\t\t\t\t\t= \"Replace Special Announce 1 (personal aka 'pvpflag' that aren't GTFOs) sounds\"\nL.ReplacesSA2\t\t\t\t\t\t= \"Replace Special Announce 2 (everyone aka 'beware') sounds\"\nL.ReplacesSA3\t\t\t\t\t\t= \"Replace Special Announce 3 (high priority aka 'airhorn') sounds\"\nL.ReplacesSA4\t\t\t\t\t\t= \"Replace Special Announce 4 (high priority run away) sounds\"\nL.ReplacesGTFO\t\t\t\t\t\t= \"Replace Special Announce GTFO sounds\"\nL.ReplacesCustom\t\t\t\t\t= \"Replace Special Announce Custom user set (per warning) sounds (not recommended)\"\nL.Area_VoicePackAdvOptions\t\t\t= \"Voice Pack Advanced Options\"\nL.SpecWarn_AlwaysVoice\t\t\t\t= \"Always play all spoken alerts (Even if Special Announce disabled. Useful for some Raid Leaders in niche situations, not recommended otherwise)\"\nL.VPDontMuteSounds\t\t\t\t\t= \"Disable muting of regular alert sounds when using voice pack (use this only if you desire to hear BOTH during alerts)\"\nL.Area_VPLearnMore\t\t\t\t\t= \"Learn more about voice packs and how to use these options\"\nL.VPLearnMore\t\t\t\t\t\t= \"|cFF73C2FBhttps://github.com/DeadlyBossMods/DBM-Retail/wiki/%5BGuide%5D-DBM-&-Voicepacks#2022-update|r\"\nL.Area_BrowseOtherVP\t\t\t\t= \"Browse other voice packs on curse\"\nL.BrowseOtherVPs\t\t\t\t\t= \"|cFF73C2FBhttps://www.curseforge.com/wow/addons/search?search=dbm+voice|r\"\nL.Area_BrowseOtherCT\t\t\t\t= \"Browse countdown packs on curse\"\nL.BrowseOtherCTs\t\t\t\t\t= \"|cFF73C2FBhttps://www.curseforge.com/wow/addons/search?search=dbm+count+pack|r\"\n\n-- Panel: Event Sounds\nL.Panel_EventSounds\t\t\t\t\t= \"Event Sounds\"\nL.Area_SoundSelection\t\t\t\t= \"Sound Selections (scroll selection menus with mouse wheel)\"\nL.EventVictorySound\t\t\t\t\t= \"Set sound played for encounter victory\"\nL.EventWipeSound\t\t\t\t\t= \"Set sound played for encounter wipe\"\nL.EventEngagePT\t\t\t\t\t\t= \"Set sound played for pull timer start\"\nL.EventEngageSound\t\t\t\t\t= \"Set sound played for encounter engage\"\nL.EventDungeonMusic\t\t\t\t\t= \"Set music played inside dungeons/raids\"\nL.EventEngageMusic\t\t\t\t\t= \"Set music played during encounters\"\nL.Area_EventSoundsExtras\t\t\t= \"Event Sound Options\"\nL.EventMusicCombined\t\t\t\t= \"Allow all music choices in dungeon and encounter selections (changing this option requires UIReload to reflect changes)\"\nL.Area_EventSoundsFilters\t\t\t= \"Event Sound Filter Conditions\"\nL.EventFilterDungMythicMusic\t\t= \"Do not play dungeon music on Mythic/Mythic+ difficulty\"\nL.EventFilterMythicMusic\t\t\t= \"Do not play encounter music on Mythic/Mythic+ difficulty\"\n\n-- Tab: Timers\nL.TabCategory_Timers\t\t\t\t= \"Timers\"\nL.Area_ColorBytype\t\t\t\t\t= \"Color bars by type guide\"\n-- Panel: Color by Type\nL.Panel_ColorByType\t\t\t\t\t= \"Color by Type\"\nL.AreaTitle_BarColors\t\t\t\t= \"Bar Colors by timer type\"\nL.BarTexture\t\t\t\t\t\t= \"Bar texture\"\nL.BarStyle\t\t\t\t\t\t\t= \"Bar behavior\"\nL.BarDBM\t\t\t\t\t\t\t= \"Classic (existing small bar slides to Enlarged anchor)\"\nL.BarSimple\t\t\t\t\t\t\t= \"Simple (small bar disappears and new large bar created)\"\nL.BarStartColor\t\t\t\t\t\t= \"Start color\"\nL.BarEndColor\t\t\t\t\t\t= \"End color\"\nL.Bar_Height\t\t\t\t\t\t= \"Bar height: %d\"\nL.Slider_BarOffSetX\t\t\t\t\t= \"Offset X: %d\"\nL.Slider_BarOffSetY\t\t\t\t\t= \"Offset Y: %d\"\nL.Slider_BarWidth\t\t\t\t\t= \"Bar width: %d\"\nL.Slider_BarScale\t\t\t\t\t= \"Bar scale: %0.2f\"\nL.BarSaturation\t\t\t\t\t\t= \"Bar saturation for small timers (When huge bars are disabled): %0.2f\"\n\n--Types\nL.BarStartColorAdd\t\t\t\t\t= \"Start color\\n(Add)\"\nL.BarEndColorAdd\t\t\t\t\t= \"End color\\n(Add)\"\nL.BarStartColorAOE\t\t\t\t\t= \"Start color\\n(AOE)\"\nL.BarEndColorAOE\t\t\t\t\t= \"End color\\n(AOE)\"\nL.BarStartColorDebuff\t\t\t\t= \"Start color\\n(Targeted)\"\nL.BarEndColorDebuff\t\t\t\t\t= \"End color\\n(Targeted)\"\nL.BarStartColorInterrupt\t\t\t= \"Start color\\n(Interrupt)\"\nL.BarEndColorInterrupt\t\t\t\t= \"End color\\n(Interrupt)\"\nL.BarStartColorRole\t\t\t\t\t= \"Start color\\n(Role)\"\nL.BarEndColorRole\t\t\t\t\t= \"End color\\n(Role)\"\nL.BarStartColorPhase\t\t\t\t= \"Start color\\n(Stage)\"\nL.BarEndColorPhase\t\t\t\t\t= \"End color\\n(Stage)\"\nL.BarStartColorUI\t\t\t\t\t= \"Start color\\n(User)\"\nL.BarEndColorUI\t\t\t\t\t\t= \"End color\\n(User)\"\n--Type 7 options\nL.Bar7Header\t\t\t\t\t\t= \"User Bar Options\"\nL.Bar7ForceLarge\t\t\t\t\t= \"Always use large bar\"\nL.Bar7CustomInline\t\t\t\t\t= \"Use custom '!' inline icon\"\n--Dropdown Options\nL.CBTGeneric\t\t\t\t\t\t= \"Generic\"\nL.CBTAdd\t\t\t\t\t\t\t= \"Add\"\nL.CBTAOE\t\t\t\t\t\t\t= \"AOE\"\nL.CBTTargeted\t\t\t\t\t\t= \"Targeted\"\nL.CBTInterrupt\t\t\t\t\t\t= \"Interrupt\"\nL.CBTRole\t\t\t\t\t\t\t= \"Role\"\nL.CBTPhase\t\t\t\t\t\t\t= \"Phase\"\nL.CBTImportant\t\t\t\t\t\t= \"Important (User)\"\nL.CVoiceOne\t\t\t\t\t\t\t= \"Count Voice 1\"\nL.CVoiceTwo\t\t\t\t\t\t\t= \"Count Voice 2\"\nL.CVoiceThree\t\t\t\t\t\t= \"Count Voice 3\"\n\n-- Panel: Timers\nL.Panel_Appearance\t\t\t\t\t= \"Bar Appearance\"\nL.Panel_Behavior\t\t\t\t\t= \"Bar Behavior\"\nL.AreaTitle_BarSetup\t\t\t\t= \"Bar Appearance Options\"\nL.AreaTitle_Behavior\t\t\t\t= \"Bar Behavior Options\"\nL.AreaTitle_BarSetupSmall\t\t\t= \"Small Bar Options\"\nL.AreaTitle_BarSetupHuge\t\t\t= \"Huge Bar Options\"\nL.AreaTitle_BarSetupVariance\t\t= \"Variance Bar Options\"\nL.EnableHugeBar\t\t\t\t\t\t= \"Enable huge bar (aka Bar 2)\"\nL.EnableVarianceBar \t\t\t\t= \"Enable variance bars\"\nL.VarianceTransparency\t\t\t\t= \"Bar transparency: %0.1f\"\nL.VarianceTimerTextBehavior\t\t\t= \"Set variance timer text behavior\"\nL.ZeroatWindowEnds\t\t\t\t\t= \"Text hits zero at end of CD window\"\nL.ZeroatWindowStartPause\t\t\t= \"Text hits zero at start of CD window and pauses\"\nL.ZeroatWindowStartRestart\t\t\t= \"Text hits zero at start of CD window then restarts\"\nL.ZeroatWindowStartNeg\t\t\t\t= \"Text hits zero at start of CD window then goes negative\"--Default\nL.BarIconLeft\t\t\t\t\t\t= \"Left icon\"\nL.BarIconRight\t\t\t\t\t\t= \"Right icon\"\nL.ExpandUpwards\t\t\t\t\t\t= \"Expand upward\"\nL.FillUpBars\t\t\t\t\t\t= \"Fill up\"\nL.ClickThrough\t\t\t\t\t\t= \"Disable mouse events (click through)\"\nL.Bar_Decimal\t\t\t\t\t\t= \"Decimal shows below time: %d\"\nL.Bar_Alpha\t\t\t\t\t\t\t= \"Alpha: %0.1f\"\nL.Bar_EnlargeTime\t\t\t\t\t= \"Bar enlarges below time: %d\"\nL.BarSpark\t\t\t\t\t\t\t= \"Bar spark\"\nL.BarFlash\t\t\t\t\t\t\t= \"Flash bar about to expire\"\nL.BarSort\t\t\t\t\t\t\t= \"Sort by remaining time\"\nL.BarColorByType\t\t\t\t\t= \"Color by type\"\nL.Highest\t\t\t\t\t\t\t= \"Highest at top\"\nL.Lowest\t\t\t\t\t\t\t= \"Lowest at top\"\nL.NoBarFade\t\t\t\t\t\t\t= \"Use Start/End colors as Small/Large colors instead of gradual color change\"\nL.BarInlineIcons\t\t\t\t\t= \"Show inline icons\"\nL.DisableRightClickBar\t\t\t\t= \"Disable right click to cancel timers\"\nL.ShortTimerText\t\t\t\t\t= \"Use short timer text (when available)\"\nL.StripTimerText\t\t\t\t\t= \"Strip CD/Next out of timers\"\nL.KeepBar\t\t\t\t\t\t\t= \"Keep timer active until ability cast\"\nL.KeepBar2\t\t\t\t\t\t\t= \"(when supported by mod)\"\nL.FadeBar\t\t\t\t\t\t\t= \"Fade timers for out of range abilities\"\nL.BarSkin\t\t\t\t\t\t\t= \"Bar skin\"\n\n-- Tab: HealthFrame\nL.Panel_HPFrame\t\t\t\t\t\t= \"Health Frame\"\nL.Area_HPFrame\t\t\t\t\t\t= \"Health Frame Options\"\nL.HP_Enabled\t\t\t\t\t\t= \"Always show health frame (Overrides boss-specific option)\"\nL.HP_GrowUpwards\t\t\t\t\t= \"Expand health frame upward\"\nL.HP_ShowDemo\t\t\t\t\t\t= \"Show HP frame\"\nL.BarWidth\t\t\t\t\t\t\t= \"Bar width: %d\"\n\n-- Tab: Global Disables & Filters\nL.TabCategory_Filters\t\t\t\t= \"Global Disables & Filters\"\nL.Area_DBMFiltersSetup\t\t\t\t= \"DBM Filters guide\"\nL.Area_BlizzFiltersSetup\t\t\t= \"Blizzard Filters guide\"\n-- Panel: Toggle DBM Features\nL.Panel_SpamFilter\t\t\t\t\t= \"Toggle DBM Features\"\n\nL.Area_SpamFilter_SpecFeatures\t\t= \"Announce Features\"\nL.SpamBlockNoShowAnnounce\t\t\t= \"Do not show text or play sound for ANY general (non emphasized) announcements\"\nL.SpamBlockNoSpecWarnText\t\t\t= \"Do not show special announce text\"\nL.SpamBlockNoSpecWarnFlash\t\t\t= \"Do not show special announce screen flash\"\nL.SpamBlockNoSpecWarnVibrate\t\t= \"Do not vibrate controller on special announce\"\nL.SpamBlockNoSpecWarnSound\t\t\t= \"Do not play special announce sounds (still permits voice packs, if one is enabled in Spoken Alerts panel)\"\n\nL.Area_SpamFilter_Timers\t\t\t= \"Timer Global Disable & Filter Options\"\nL.SpamBlockNoShowBossTimers\t\t\t= \"Do not show timers for dungeon/raid bosses\"\nL.SpamBlockNoShowTrashTimers\t\t= \"Do not show timers for dungeon/raid trash (Note: this also disables nameplate CDs)\"\nL.SpamBlockNoShowEventTimers\t\t= \"Do not show timers for events or prompts (Queue pop, boss respawn, etc)\"\nL.SpamBlockNoShowUTimers\t\t\t= \"Do not show user sent timers (Custom/Pull/Break)\"\nL.SpamBlockNoCountdowns\t\t\t\t= \"Do not play countdown sounds\"\n\nL.Area_SpamFilter_Nameplates\t\t= \"Nameplate Global Disable & Filter Options\"\nL.SpamBlockNoNameplate\t\t\t\t= \"Do not show Nameplate Auras\"\nL.SpamBlockNoBossGUIDs\t\t\t\t= \"Do not show main boss (boss1) timers on Plater nameplates as Nameplate Auras\\n(you will still see trash/boss adds timers if feature is enabled in Plater)\"\nL.SpamBlockTimersWithNameplates\t\t= \"Do not show timer bars for trash mods if Plater Nameplate Aura CDs are enabled in Plater options (does not apply to boss fights, which will always show timer bars)\"\nL.NameplateFooter\t\t\t\t\t= \"Additional features available here if Plater Nameplates is enabled\"\n\nL.Area_SpamFilter_Misc\t\t\t\t= \"Misc Global Disable & Filter Options\"\nL.SpamBlockNoSetIcon\t\t\t\t= \"Do not set icons on targets\"\nL.SpamBlockNoRangeFrame\t\t\t\t= \"Do not show range frame\"\nL.SpamBlockNoInfoFrame\t\t\t\t= \"Do not show info frame\"\nL.SpamBlockNoHudMap\t\t\t\t\t= \"Do not show HudMap\"\n\nL.SpamBlockNoYells\t\t\t\t\t= \"Do not send chat yells\"\nL.SpamBlockNoNoteSync\t\t\t\t= \"Do not accept shared notes\"\nL.SpamBlockAutoGossip\t\t\t\t= \"Do not automatically handle gossip dialogs\"\n\nL.Area_Restore\t\t\t\t\t\t= \"DBM Restore Options (Whether DBM restores previous user state when mods finish)\"\nL.SpamBlockNoIconRestore\t\t\t= \"Do not save icon states and restore them on combat end\"\nL.SpamBlockNoRangeRestore\t\t\t= \"Do not restore range frame to previous state when mods call 'hide'\"\n\nL.Area_PullTimer\t\t\t\t\t= \"Pull, Break, Combat, & Custom Timer Filter Options\"\nL.DontShowPTNoID\t\t\t\t\t= \"Block DBM Pull Timers if not sent from same zone as you (will never block BigWigs timers that are sent with no zone ID)\"\nL.DontShowPT\t\t\t\t\t\t= \"Do not show Pull/Break Timer bar\"\nL.DontShowPTText\t\t\t\t\t= \"Do not show announce text for Pull/Break Timer\"\nL.DontShowPTCountdownText\t\t\t= \"Do not show Pull countdown text\"\nL.DontPlayPTCountdown\t\t\t\t= \"Do not play Pull/Break/Combat/Custom Timer countdown audio at all\"\nL.PT_Threshold\t\t\t\t\t\t= \"Do not play Pull/Break/Combat/Custom Timer countdown audio above: %d\"\n\nL.Area_TimerTracker\t\t\t\t\t= \"TimerTracker Options\"\nL.PlayTT\t\t\t\t\t\t\t= \"Enable TimerTracker\"\nL.PlayTTCountdown\t\t\t\t\t= \"Play TimerTracker countdown sound\"\nL.PlayTTCountdownFinished\t\t\t= \"Play TimerTracker countdown finished sound\"\n\nL.Area_BossBanner\t\t\t\t\t= \"Boss Banner Options\"\nL.EnableBB\t\t\t\t\t\t\t= \"Enable Boss Banner\"\nL.PlayBBLoot\t\t\t\t\t\t= \"Play Boss Banner Loot animation\"\nL.PlayBBSound\t\t\t\t\t\t= \"Play Boss Banner sound\"\nL.OverrideBBFont\t\t\t\t\t= \"Override Boss Banner Blizzard default font properties (needs to be enabled to change any font property)\"\n\n-- Panel: Reduce Information\nL.Panel_ReducedInformation\t\t\t= \"Reduce Information\"\n\nL.Area_SpamFilter_Anounces\t\t\t= \"Announce Filters/De-escalation\"\nL.SpamBlockNoShowTgtAnnounce\t\t= \"Do not show text or play sound for TARGET general announcements that do not affect yourself, expect where noted that specific warning ignores this filter (global disable in DBM Features overrides this one)\"\nL.SpamBlockNoTrivialSpecWarnSound\t= \"Do not play special announce sounds or show screen flash for content that is trivial for your level (plays user selected non emphasized announce sound instead)\"\n\nL.Area_SpamFilter\t\t\t\t\t= \"Spam Filter Options\"\nL.DontShowFarWarnings\t\t\t\t= \"Do not show announcements/timers for events that are far away\"\nL.StripServerName\t\t\t\t\t= \"Strip realm name from announcements, timers, range check, and infoframe\"\nL.FilterVoidFormSay\t\t\t\t\t= \"Do not send chat icon or countdown chat yells when in $spell:47241 (regular chat yells still sent)\"\n\nL.Area_SpecFilter\t\t\t\t\t= \"Role Filter Options\"\nL.FilterTankSpec\t\t\t\t\t= \"Filter announcements designated for Tank role when not tank spec. (Note: Disabling this is not recommended for most users as 'taunt' announcements are now all on by default.)\"\nL.FilterInterruptsHeader\t\t\t= \"Filter announcements for interruptable spells based on behavior preference.\"\nL.SWFNever\t\t\t\t\t\t\t= \"Never\"\nL.FilterInterrupts\t\t\t\t\t= \"If caster is not current target/focus (Always).\"\nL.FilterInterrupts2\t\t\t\t\t= \"If caster is not current target/focus (Always) or interrupt on CD (Boss Only)\"\nL.FilterInterrupts3\t\t\t\t\t= \"If caster is not current target/focus (Always) or interrupt on CD (Boss & Trash)\"\nL.FilterInterruptNoteName\t\t\t= \"Filter announcements for interruptable spells (with count) if announce does not contain your name in the custom note\"\nL.FilterDispels\t\t\t\t\t\t= \"Filter announcements for dispelable spells if your dispel is on cooldown\"\nL.FilterTrashWarnings\t\t\t\t= \"Filter all trash mob announcements in normal, heroic, and trivial (outleveled) dungeons\"\n\nL.Area_BInterruptFilter\t\t\t\t= \"Boss Interrupt Filter Options\"\nL.FilterTargetFocus\t\t\t\t\t= \"Filter if caster is not current target/focus\"\nL.FilterInterruptCooldown\t\t\t= \"Filter if interrupt spell is on cooldown\"\nL.FilterInterruptHealer\t\t\t\t= \"Filter if you're in a healer spec\"\nL.FilterInterruptNoteName\t\t\t= \"Filter if alert has a count but your name isn't in the custom note\"--Only used on bosses, trash mods don't assign counts\nL.Area_BInterruptFilterFooter\t\t= \"If no filters are selected, all interrupts are shown (May be spammy)\\nSome mods may ignore these filters entirely if spell is critically important\"\nL.Area_TInterruptFilter\t\t\t\t= \"Trash Interrupt Filter Options\"--Reuses above 3 strings\n\n-- Panel: DBM Handholding\nL.Panel_HandFilter\t\t\t\t\t= \"Reduce DBM Handholding\"\nL.Area_SpamFilter_SpecRoleFilters\t= \"Special Announce Type Filters (control how much handholding DBM does)\"\nL.SpamSpecInformationalOnly\t\t\t= \"Remove all instructional text/spoken alerts from special announcements (Requires UI Reload). Alerts still show and play audio but will be generic and non directive\"\nL.SpamSpecRoleDispel\t\t\t\t= \"Filter 'dispel' alerts entirely (No text or sound at all)\"\nL.SpamSpecRoleInterrupt\t\t\t\t= \"Filter 'interrupt' alerts (No text or sound at all)\"\nL.SpamSpecRoleDefensive\t\t\t\t= \"Filter 'defensive' alerts (No text or sound at all)\"\nL.SpamSpecRoleTaunt\t\t\t\t\t= \"Filter 'taunt' alerts (No text or sound at all)\"\nL.SpamSpecRoleSoak\t\t\t\t\t= \"Filter 'soak' alerts (No text or sound at all)\"\nL.SpamSpecRoleStack\t\t\t\t\t= \"Filter 'high stack' alerts (No text or sound at all)\"\nL.SpamSpecRoleSwitch\t\t\t\t= \"Filter 'target swap' &amp; 'adds' alerts (No text or sound at all)\"\nL.SpamSpecRoleGTFO\t\t\t\t\t= \"Filter 'gtfo' alerts (No text or sound at all)\"\n\n-- Panel: Blizzard Features\nL.Panel_HideBlizzard\t\t\t\t= \"Toggle Blizzard Features\"\nL.Area_HideBlizzard\t\t\t\t\t= \"Blizzard Disable & Hide Options\"\nL.HideBossEmoteFrame\t\t\t\t= \"Hide raid boss emote frame during boss fights\"\nL.SpamBlockRaidWarning\t\t\t\t= \"Filter announces from other boss mods\"\nL.SpamBlockBossWhispers\t\t\t\t= \"Filter DBM warning whispers while fighting\"\nL.HideWatchFrame\t\t\t\t\t= \"Hide watch (objectives) frame during boss fights if no achievements are being tracked and if not in a Mythic+\"\nL.HideGarrisonUpdates\t\t\t\t= \"Hide follower toasts during boss fights\"\nL.HideGuildChallengeUpdates\t\t\t= \"Hide guild challenge toasts during boss fights\"\nL.HideQuestTooltips\t\t\t\t\t= \"Hide quest objectives from tooltips during boss fights\"\nL.HideTooltips\t\t\t\t\t\t= \"Completely hide tooltips during boss fights\"\nL.DisableSFX\t\t\t\t\t\t= \"Disable sound effects channel during boss fights (Note: If you enable this option it'll turn sound effects on when fight ends even if they weren't on when entering fight)\"\nL.DisableCinematics\t\t\t\t\t= \"Hide in-game cinematics\"\nL.ReportRecount\t\t\t\t\t\t= \"Send Recount report after boss encounter end (assist required)\"\nL.ReportSkada\t\t\t\t\t\t= \"Send SkadaRevisited report after boss encounter end (assist required)\"\nL.PerCharacterSettings\t\t\t\t= \"Use per-character profiles instead of global namespace\"\nL.OnlyFight\t\t\t\t\t\t\t= \"Only during fight, after each movie has played once\"\nL.AfterFirst\t\t\t\t\t\t= \"In instance, after each movie has played once\"\nL.CombatOnly\t\t\t\t\t\t= \"Disable in combat (any)\"\nL.RaidCombat\t\t\t\t\t\t= \"Disable in combat (bosses only)\"\n\n-- Panel: Raid Leader Controls\nL.Tab_RLControls\t\t\t\t\t= \"Raid Leader Controls\"\nL.Area_FeatureOverrides\t\t\t\t= \"Feature Override Options\"\nL.OverrideIcons \t\t\t\t\t= \"Disable icon marking for all users in raid, including your own (Use override instead of disable if you want DBM to do marking under your terms)\"\nL.OverrideSay\t\t\t\t\t\t= \"Disable chat bubble/SAY messages for all users in the raid, including your own\"\nL.DisableStatusWhisperShort\t\t\t= \"Disable status/reply whispers for the entire group\"--Duplicated from privacy but makes sense to include option in both panels\nL.DisableGuildStatusShort\t\t\t= \"Disable progression messages from being synced to guild for the entire group\"--Duplicated from privacy but makes sense to include option in both panels\n--L.DisabledForDropdown\t\t\t\t= \"Choose boss mod(s) disable is sent to\"--NYI\n--L.DiabledForBoth\t\t\t\t\t= \"Disable above features for both DBM and BW\"--NYI\n--L.DiabledForDBM\t\t\t\t\t= \"Disable above features for only DBM users\"--NYI\n--L.DiabledForBW\t\t\t\t\t= \"Disable above features for only BW users\"--NYI\n\nL.Area_ConfigOverrides\t\t\t\t= \"Configuration Override Options (NYI, coming later)\"--NYI\nL.OverrideBossAnnounceOptions\t\t= \"Set all DBM users boss mod announce configuration to my configuration\"--NYI\nL.OverrideBossTimerOptions\t\t\t= \"Set all DBM users boss mod timer configuration to my configuration\"--NYI\nL.OverrideBossIconOptions\t\t\t= \"Set all DBM users boss mod icon configuration to my configuration (if icon setting is disabled in above options, this option is ignored)\"--NYI\nL.OverrideBossSayOptions\t\t\t= \"Set all DBM users boss mod chat bubble configuration to my configuration (if chat bubble setting is disabled in above options, this option is ignored)\"--NYI\nL.ConfigAreaFooter\t\t\t\t\t= \"Options in this area only temporariliy override users configuration on engage without altering their saved configuration.\"\nL.ConfigAreaFooter2\t\t\t\t\t= \"Recommended to consider all roles and do not exclude timers/alerts a tank, etc might need\"\n\nL.Area_receivingOptions\t\t\t\t= \"Receiving Options (NYI, coming later)\"--NYI\nL.NoAnnounceOverride\t\t\t\t= \"Do not accept announce overrides from raid leaders.\"--NYI\nL.NoTimerOverridee\t\t\t\t\t= \"Do not accept timer overrides from raid leaders.\"--NYI\nL.ReplaceMyConfigOnOverride\t\t\t= \"WARNING: Perminantly replace my mod configurations with Raid leaders, on override\"--NYI\nL.ReceivingFooter\t\t\t\t\t= \"Icon and chat bubble option overrides cannot be opted out since these settings affect other players around you\"--NYI\nL.ReceivingFooter2\t\t\t\t\t= \"If you enable these options, it's between you and RL if your configuration causes conflict with their intent\"--NYI\nL.ReceivingFooter3\t\t\t\t\t= \"If you enable the 'replace my mod configuration' your original settings will be lost on override\"--NYI\n\n\nL.TabFooter\t\t\t\t\t\t\t= \"All options in this panel only work if you are group leader in a non dungeon/LFR group\"\n\n-- Panel: Privacy\nL.Tab_Privacy\t\t\t\t\t\t= \"Privacy Controls\"\nL.Area_WhisperMessages\t\t\t\t= \"Whisper Message Options\"\nL.AutoRespond\t\t\t\t\t\t= \"Auto-respond to whispers while fighting\"\nL.WhisperStats\t\t\t\t\t\t= \"Include kill/wipe stats in whisper responses\"\nL.DisableStatusWhisper\t\t\t\t= \"Disable status whispers for the entire group (requires Group Leader). Applies only to normal/heroic/mythic raids and mythic+ dungeons\"\nL.Area_SyncMessages\t\t\t\t\t= \"Addon Sync Options\"\nL.DisableGuildStatus\t\t\t\t= \"Disable progression messages from being synced to guild. If group leader, this disables it for all DBM users in your group\"\nL.EnableWBSharing\t\t\t\t\t= \"Share when you pull/defeat a world boss with your guild and your battle.net friends that are on same realm.\"\n\n-- Tab: Frames & Integrations\nL.TabCategory_Frames\t\t\t\t= \"Frames & Integrations\"\nL.Area_NamelateInfo\t\t\t\t\t= \"DBM Nameplate Auras Info\"\n-- Panel: InfoFrame\nL.Panel_InfoFrame\t\t\t\t\t= \"Infoframe\"\n\n-- Panel: Range\nL.Panel_Range\t\t\t\t\t\t= \"Rangeframe\"\n\n-- Panel: Nameplate\nL.Panel_Nameplates\t\t\t\t\t= \"Nameplates\"\nL.UseNameplateHandoff\t\t\t\t= \"Hand off nameplate aura requests to supported nameplate addons (KuiNameplates, Threat Plates, Plater) instead of handling internally. This is recommended option as it allows more advanced features and configuration to be done via nameplate addon\"\nL.Area_NPStyle\t\t\t\t\t\t= \"Style (Note: Only configures style when DBM is handling nameplates.)\"\nL.NPAuraSize\t\t\t\t\t\t= \"Aura Pixel size (squared): %d\"\n\n-- Misc\nL.Area_General\t\t\t\t\t\t= \"General\"\nL.Area_Position\t\t\t\t\t\t= \"Position\"\nL.Area_Style\t\t\t\t\t\t= \"Style\"\n\nL.FontSize\t\t\t\t\t\t\t= \"Font size: %d\"\nL.FontStyle\t\t\t\t\t\t\t= \"Font flags\"\nL.FontColor\t\t\t\t\t\t\t= \"Font color\"\nL.FontShadow\t\t\t\t\t\t= \"Font Shadow\"\nL.FontType\t\t\t\t\t\t\t= \"Select font\"\n\nL.FontHeight\t= 16\n\n-- Retail Globals\nL.LARGE\t= \"Large\"\nL.SMALL\t= \"Small\"\nL.PLAYER_DIFFICULTY6 = \"Mythic\" -- ID: 24525\nL.PLAYER_DIFFICULTY_TIMEWALKER = \"Timewalking\" -- ID: 25846\n"
  },
  {
    "path": "DBM-GUI/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\nif not DBM_GUI_L then DBM_GUI_L = {} end\n\nlocal L = DBM_GUI_L\n\n--L.MainFrame = \"Deadly Boss Mods\"\n\nL.TranslationByPrefix\t\t= \"Retail backport por \"\nL.TranslationBy\t\t\t= \"Barsoom, Bunny67, Zidras\"\nL.Website\t\t\t\t\t= \"Visita nuestro canal de Discord (|cFF73C2FBhttps://discord.gg/CyVWDWS|r).\"\nL.WebsiteButton\t\t\t\t= \"Página web\"\n\nL.OTabBosses\t= \"Jefes\"\nL.OTabRaids\t\t= \"Bandas\"\nL.OTabDungeons\t= \"Mazmorras/otros\"\nL.OTabPlugins\t= \"Plugins\"\nL.OTabAbout\t\t= \"Acerca de\"\n\nL.TabCategory_OTHER\t\t\t= \"Otros módulos\"\n\nL.BossModLoaded\t\t\t= \"Estadísticas de %s\"\nL.BossModLoad_now\t\t\t= [[Este módulo no está cargado.\nSe cargará al entrar en la estancia.\nTambién puedes hacer clic en el botón para cargar el módulo manualmente.]]\n\nL.PosX\t\t\t\t\t\t= \"Posición X\"\nL.PosY\t\t\t\t\t\t= \"Posición Y\"\n\nL.MoveMe\t\t\t\t\t= \"Posición\"\nL.Button_OK\t\t\t\t= \"Aceptar\"\nL.Button_Cancel\t\t\t= \"Cancelar\"\nL.Button_LoadMod\t\t\t= \"Cargar módulo\"\nL.Mod_Enabled\t\t\t\t= \"Habilitar módulo\"\nL.Mod_Reset\t\t\t\t\t= \"Cargar opciones por defecto\"\nL.Reset\t\t\t\t\t= \"Restaurar\"\n\nL.NoSound\t\t\t\t\t= \"Sin sonido\"\n\nL.IconsInUse\t\t\t\t= \"Iconos usados por este módulo\"\n\n-- Tab: Boss Statistics\nL.BossStatistics\t\t\t= \"Estadísticas\"\nL.Statistic_Kills\t\t\t= \"Victorias:\"\nL.Statistic_Wipes\t\t\t= \"Derrotas:\"\nL.Statistic_Incompletes\t\t= \"Inacabados:\"--For scenarios, TODO, figure out a clean way to replace any Statistic_Wipes with Statistic_Incompletes for scenario mods\nL.Statistic_BestKill\t\t= \"Mejor victoria:\"\nL.Statistic_BestRank\t\t= \"Mejor nivel:\"--Maybe not get used, not sure yet, localize anyways\n\n-- Tab: General Options\nL.TabCategory_Options\t\t= \"Opciones generales\"\nL.Area_BasicSetup\t\t\t= \"Consejos básicos para configurar DBM\"\nL.Area_ModulesForYou\t\t= \"Guía de módulos\"\nL.Area_ProfilesSetup\t\t= \"Guía de uso de perfiles de DBM\"\n-- Panel: Core & GUI\nL.Core_GUI\t\t\t\t\t= \"Generales e interfaz\"\nL.General\t\t\t\t\t= \"Opciones generales de DBM\"\nL.EnableMiniMapIcon\t\t\t= \"Mostrar botón junto al minimapa\"\nL.UseSoundChannel\t\t\t= \"Canal de audio para alertas\"\nL.UseMasterChannel\t\t\t= \"Canal de audio principal\"\nL.UseDialogChannel\t\t\t= \"Canal de audio de diálogo\"\nL.UseSFXChannel\t\t\t\t= \"Canal de audio de efectos de sonido\"\nL.Latency_Text\t\t\t\t= \"Latencia máxima para sincronización: %d\"\n\nL.Button_RangeFrame\t\t\t= \"Mostrar/ocultar\\nmarco de distancia\"\nL.Button_InfoFrame\t\t\t= \"Mostrar/ocultar\\nmarco de información\"\nL.Button_TestBars\t\t\t= \"Comprobar barras\"\nL.Button_MoveBars\t\t\t= \"Posición barras\"\nL.Button_ResetInfoRange\t\t= \"Restaurar posiciones por defecto\"\n\nL.ModelOptions\t\t\t\t= \"Opciones del visualizador de modelos 3D\"\nL.EnableModels\t\t\t\t= \"Mostrar modelos 3D en opciones de jefe\"\nL.ModelSoundOptions\t\t\t= \"Sonido\"\n\nL.ResizeOptions\t\t\t\t= \"Tamaño de la ventana\"\nL.Button_ResetWindowSize\t= \"Restaurar tamaño\"\nL.Editbox_WindowWidth\t\t= \"Horizontal\"\nL.Editbox_WindowHeight\t\t= \"Vertical\"\n\n-- Panel: Extra Features\nL.Panel_ExtraFeatures\t\t= \"Funciones adicionales\"\n\nL.Area_SoundAlerts\t\t\t= \"Opciones de alertas de sonido e iluminación del icono del juego\"\nL.LFDEnhance\t\t\t\t= \"Reproducir sonido de comprobación de banda e iluminar icono del juego para avisos del buscador de mazmorra/banda/grupo y campos de batalla por el canal de audio general o de diálogo (en otras palabras, reproduce el sonido aunque el canal de efectos de sonido esté desactivado, y en general suena más alto)\"\nL.WorldBossNearAlert\t\t= \"Reproducir sonido de comprobación de banda e iluminar icono del juego cuando haya un jefe de mundo cerca\"\nL.RLReadyCheckSound\t\t\t= \"Reproducir sonido por el canal de audio general o de diálogo e iluminar el icono del juego cuando se haga una comprobación de banda\"\nL.AFKHealthWarning\t\t\t= \"Reproducir sonido de alerta e iluminar el icono del juego si tu salud se reduce mientras estás ausente\"\nL.AutoReplySound\t\t\t= \"Reproducir sonido de alerta e iluminar el icono del juego al recibir respuestas automáticas de DBM por susurro\"\n--\nL.TimerGeneral\t\t\t\t= \"Opciones de temporizadores\"\nL.SKT_Enabled\t\t\t\t= \"Mostrar temporizador para batir el récord de victoria del encuentro actual\"\nL.ShowRespawn\t\t\t\t= \"Mostrar temporizador para la reaparición de jefe tras cada derrota\"\nL.ShowQueuePop\t\t\t\t= \"Mostrar temporizador para eltiempo restante para aceptar avisos del buscador\"\n--\nL.Area_AutoLogging\t\t\t= \"Opciones del registro automático\"\nL.AutologBosses\t\t\t\t= \"Registrar encuentros automáticamente con el registro de combate de Blizzard (usa '/dbm pull' antes de iniciar un encuentro para comenzar a grabar antes, de forma que tenga en cuenta la toma de pociones y otras acciones)\"\nL.AdvancedAutologBosses\t\t= \"Registrar encuentros automáticamente con Transcriptor\"\nL.RecordOnlyBosses\t\t\t= \"Registrar solo encuentros de jefe (excluye todos los combates contra enemigos que no son jefes; usa '/dbm pull' antes de un jefe para registrar el uso previo de pociones)\"\nL.LogOnlyNonTrivial\t\t\t= \"Registrar solo el contenido importante (excluye el buscador de bandas, las mazmorras, las gestas y todo el contenido antiguo)\"\nL.LogCurrentNormal\t\t\t= \"Mazmorras normales de nivel actual (Nota: si estás haciendo algo heroico a través del buscador de bandas y quieres que se registre, desactiva el filtro LFG)\"\nL.LogTrivialDungeons\t\t= \"Mazmorras triviales (inferior al nivel del personaje)\"\n--\nL.Area_3rdParty\t\t\t\t= \"Opciones de addons de terceros\"\n--L.oRA3AnnounceConsumables\t= \"Announce oRA3 consumables check on combat start\"\nL.Area_Invite\t\t\t\t= \"Opciones de invitación\"\nL.AutoAcceptFriendInvite\t= \"Aceptar automáticamente invitaciones a grupos de amigos\"\nL.AutoAcceptGuildInvite\t\t= \"Aceptar automáticamente invitaciones a grupos de miembros de la hermandad\"\nL.Area_Advanced\t\t\t\t= \"Opciones avanzadas\"\nL.FakeBW\t\t\t\t\t= \"Camuflar DBM como si fuera BigWigs en comprobaciones de versión (útil para hermandades que obligan a usar BigWigs)\"\nL.AITimer\t\t\t\t\t= \"Generar temporizadores automáticamente para encuentros no vistos anteriormente mediante la IA de temporizadores interna de DBM (útil para probar jefes por primera vez en el RPP). No funciona correctamente en encuentros con múltiples esbirros que comparten la misma facultad.\"\nL.FixCLEUOnCombatStart\t\t= \"Limpiar el log de combate al pullear/final de combate y cambio de zona\"\n\n-- Panel: Profiles\nL.Panel_Profile\t\t\t\t= \"Perfiles\"\nL.Area_CreateProfile\t\t= \"Creación de perfiles para opciones generales de DBM\"\nL.EnterProfileName\t\t\t= \"Nombre del perfil\"\nL.CreateProfile\t\t\t\t= \"Crear con configuración por defecto\"\nL.Area_ApplyProfile\t\t\t= \"Perfil activo de opciones generales de DBM\"\nL.SelectProfileToApply\t\t= \"Perfil activo\"\nL.Area_CopyProfile\t\t\t= \"Copiar perfil de opciones generales de DBM\"\nL.SelectProfileToCopy\t\t= \"Copiar perfil\"\nL.Area_DeleteProfile\t\t= \"Borrar perfil de opciones generales de DBM\"\nL.SelectProfileToDelete\t\t= \"Borrar perfil\"\nL.Area_DualProfile\t\t\t= \"Opciones de perfil de DBM\"\nL.DualProfile\t\t\t\t= \"Permitir varias opciones de módulo de jefe por especialización (cada perfil se configura desde el menú de cada módulo)\"\n\nL.Area_ModProfile\t\t\t= \"Configuración de perfil\"\nL.ModAllReset\t\t\t\t= \"Restaurar configuración\"\nL.ModAllStatReset\t\t\t= \"Restaurar estadísticas\"\nL.SelectModProfileCopy\t\t= \"Copiar configuración de\"\nL.SelectModProfileCopySound\t= \"Copiar conf. de sonido de\"\nL.SelectModProfileCopyNote\t= \"Copiar notas de\"\nL.SelectModProfileCurrent\t= \"Perfil actual del módulo de jefe\"\nL.SelectModProfileDelete\t= \"Borrar configuración de\"\n\nL.Area_ImportExportProfile\t= \"Importación/Exportación de perfiles\"\n-- L.ImportExportInfo\t\t\t= \"Importing will overwrite your current profile, do at your own risk.\"\nL.ButtonImportProfile\t\t= \"Importar perfil\"\nL.ButtonExportProfile\t\t= \"Exportar perfil\"\nL.ProfileExportTitle\t\t= \"Este es su actual perfil en formato the texto.\"\nL.ProfileExportSubtitle\t= \"Pulse CTRL-C para copiar la configuración al Portapapeles.\"\nL.ProfileImportTitle\t\t= \"Pegue aqui un perfil en formato de texto.\"\nL.ProfileImportSubtitle\t= \"Pulse CTRL-V para pegar un texto de configuración.\"\n\n-- Tab: Alerts\nL.TabCategory_Alerts\t\t= \"Alertas\"\nL.Area_SpecAnnounceConfig\t= \"Guía para avisos especiales\"\nL.Area_SpecAnnounceNotes\t= \"Guía para notas de avisos especiales\"\nL.Area_VoicePackInfo\t\t= \"Información sobre paquetes de voz de DBM\"\n-- Panel: Raidwarning\nL.Tab_RaidWarning\t\t\t= \"Avisos\"\nL.RaidWarning_Header\t\t= \"Opciones de avisos\"\nL.RaidWarnColors\t\t\t= \"Colores de avisos\"\nL.RaidWarnColor_1\t\t\t= \"Color 1\"\nL.RaidWarnColor_2\t\t\t= \"Color 2\"\nL.RaidWarnColor_3\t\t\t= \"Color 3\"\nL.RaidWarnColor_4\t\t\t= \"Color 4\"\nL.InfoRaidWarning\t\t\t= [[Puedes especificar la posición y colores del marco de avisos de banda.\nEste marco se usa para mensajes como \"Jugador X afectado por Y\".]]\nL.ColorResetted\t\t\t= \"Se ha reiniciado la configuración de colores de este campo.\"\nL.ShowWarningsInChat\t\t= \"Mostrar avisos en el chat\"\nL.ShowFakedRaidWarnings\t\t= \"Mostrar avisos en el chat de banda\"\nL.WarningIconLeft\t\t\t= \"Mostrar iconos a la izquierda\"\nL.WarningIconRight\t\t\t= \"Mostrar iconos a la derecha\"\nL.WarningIconChat\t\t\t= \"Mostrar iconos en el chat\"\nL.WarningAlphabetical\t\t= \"Ordenar nombres alfabéticamente\"\nL.Warn_Duration\t\t\t\t= \"Duración: %0.1f s\"\nL.None\t\t\t\t\t\t= \"Ninguno\"\nL.Random\t\t\t\t\t= \"Aleatorio\"\nL.Outline\t\t\t\t\t= \"Contorno\"\nL.ThickOutline\t\t\t\t= \"Contorno grueso\"\nL.MonochromeOutline\t\t\t= \"Contorno monocromo\"\nL.MonochromeThickOutline\t= \"Contorno monocromo grueso\"\nL.RaidWarnSound\t\t\t\t= \"Sonido de avisos\"\n\n-- Panel: Spec Warn Frame\nL.Panel_SpecWarnFrame\t\t= \"Avisos especiales\"\nL.Area_SpecWarn\t\t\t\t= \"Opciones de avisos especiales\"\nL.SpecWarn_ClassColor\t\t= \"Usar colores de clase para avisos especiales\"\nL.ShowSWarningsInChat\t\t= \"Mostrar avisos especiales en el chat\"\nL.SWarnNameInNote\t\t\t= \"Usar Destello 5 si una nota personalizada contiene tu nombre\"\nL.SpecialWarningIcon\t\t= \"Mostrar iconos en avisos especiales\"\nL.ShortTextSpellname\t\t= \"Use texto abreviado cuando sea posible\"\nL.SpecWarn_FlashFrameRepeat\t= \"Repetir %d veces (si está habilitado)\"\nL.SpecWarn_Flash\t\t\t= \"Destello\"\nL.SpecWarn_FlashRepeat\t\t= \"Repetir destello\"\nL.SpecWarn_FlashColor\t\t= \"Destello %d\"\nL.SpecWarn_FlashDur\t\t\t= \"Duración: %0.1f s\"\nL.SpecWarn_FlashAlpha\t\t= \"Transparencia: %0.1f\"\nL.SpecWarn_DemoButton\t\t= \"Mostrar ejemplo\"\nL.SpecWarn_ResetMe\t\t\t= \"Restaurar valores por defecto\"\nL.SpecialWarnSoundOption\t= \"Sonido por defecto\"\nL.SpecialWarnHeader1\t\t= \"Tipo 1: Opciones para avisos de prioridad normal relevantes a ti o a tus acciones\"\nL.SpecialWarnHeader2\t\t= \"Tipo 2: Opciones para avisos de prioridad normal relevantes a todos los jugadores\"\nL.SpecialWarnHeader3\t\t= \"Tipo 3: Opciones para avisos de prioridad alta\"\nL.SpecialWarnHeader4\t\t= \"Tipo 4: Opciones para avisos especiales de huida con prioridad alta\"\nL.SpecialWarnHeader5\t\t= \"Tipo 5: Opciones para avisos con notas que contienen tu nombre\"\n\n-- Panel: Generalwarnings\nL.Tab_GeneralMessages\t\t= \"Mensajes generales\"\nL.CoreMessages\t\t\t\t= \"Opciones de mensajes del módulo general\"\nL.ShowPizzaMessage\t\t\t= \"Mostrar avisos de temporizadores en el chat\"\nL.ShowAllVersions\t\t\t= \"Mostrar versión de DBM de cada miembro del grupo en el chat al hacer comprobaciones de versión. Si se deshabilita seguirá mostrando quién lo tiene desactualizado.\"\nL.ShowReminders\t\t\t\t= \"Mostrar recordatorios de módulos que falten, que estén desactivados, que hayan recibido cambios, que estén desfasados o que estén silenciados.\"\n\nL.CombatMessages\t\t\t= \"Opciones de mensajes de combate\"\nL.ShowEngageMessage\t\t= \"Mostrar mensajes de inicio de encuentro en el chat\"\nL.ShowDefeatMessage\t\t= \"Mostrar mensajes de victoria y derrota en el chat\"\nL.ShowGuildMessages\t\t= \"Mostrar mensajes de inicio de encuentro, victoria y derrota de banda de hermandad en el chat\"\nL.ShowGuildMessagesPlus\t\t= \"Mostrar también mensajes de inicio, victoria y derrota de Mítica+ de grupos de hermandad (requiere que la opción anterior esté activada)\"\n\nL.Area_ChatAlerts\t\t\t= \"Opciones de alertas adicionales\"\nL.RoleSpecAlert\t\t\t\t= \"Mostrar mensaje de alerta al unirte a una banda cuando tu especialización de botín no coincida con tu especialización actual\"\nL.CheckGear\t\t\t\t\t= \"Mostrar mensaje de alerta al iniciar un encuentro cuando tu nivel de equipo sea como mínimo 40 niveles menor que el de tu inventario o no tengas equipada un arma principal\"\nL.WorldBossAlert\t\t\t= \"Mostrar mensaje de alerta cuando un amigo o miembro de hermandad inicie un encuentro contra un jefe de mundo (impreciso si el jugador en combate está en otro reino)\"\n\nL.Area_BugAlerts\t\t\t= \"Opciones de alertas de informes de fallos\"\nL.BadTimerAlert\t\t\t\t= \"Mostrar mensaje en el chat cuando DBM detecte un temporizador erróneo\"\nL.BadIDAlert\t\t\t\t= \"Mostrar mensaje en el chat cuando DBM detecte una ID de hechizo o guía de aventuras incorrecta\"\n\n-- Panel: Spoken Alerts Frame\nL.Panel_SpokenAlerts\t\t= \"Alertas de voz\"\nL.Area_VoiceSelection\t\t= \"Selección de voces\"\nL.CountdownVoice\t\t\t= \"Voz principal para cuentas atrás\"\nL.CountdownVoice2\t\t\t= \"Voz secundaria para cuentas atrás\"\nL.CountdownVoice3\t\t\t= \"Voz terciaria para cuentas atrás\"\nL.VoicePackChoice\t\t\t= \"Paquete de voz para alertas de voz\"\nL.Area_CountdownOptions\t\t= \"Opciones de cuenta atrás\"\nL.SWFNever\t\t\t\t\t= \"Nunca\"\nL.SpecWarn_AlwaysVoice\t\t= \"Reproducir siempre todas las alertas de voz (ignora las opciones de jefe; útil para líderes de banda)\"\nL.ReplacesSA1\t\t\t\t\t\t= \"Reemplazar los sonidos del anuncio especial 1 (personal también conocido como 'pvpflag' que no son GTFO)\"\nL.ReplacesGTFO\t\t\t\t\t\t= \"Reemplazar los sonidos GTFO del anuncio especial\"\n--TODO, maybe add URLS right to GUI panel on where to acquire 3rd party voice packs?\nL.Area_BrowseOtherVP\t\t= \"Explorar otros paquetes de voz en Curse\"\nL.BrowseOtherVPs\t\t\t= \"|cFF73C2FBhttps://www.curseforge.com/wow/addons/search?search=dbm+voice|r\"\nL.Area_BrowseOtherCT\t\t= \"Explorar otros paquetes de voz de cuenta atrás en Curse\"\nL.BrowseOtherCTs\t\t\t= \"|cFF73C2FBhttps://www.curseforge.com/wow/addons/search?search=dbm+count+pack|r\"\n\n-- Panel: Event Sounds\nL.Panel_EventSounds\t\t\t= \"Sonidos de eventos\"\nL.Area_SoundSelection\t\t= \"Selección de sonidos\"\nL.EventVictorySound\t\t\t= \"Sonido de victoria de encuentro\"\nL.EventWipeSound\t\t\t= \"Sonido de derrota de encuentro\"\nL.EventEngageSound\t\t\t= \"Sonido de inicio de encuentro\"\nL.EventDungeonMusic\t\t\t= \"Música de fondo en mazmorras y bandas\"\nL.EventEngageMusic\t\t\t= \"Música de fondo en encuentros\"\nL.Area_EventSoundsExtras\t= \"Opciones de sonidos de eventos\"\nL.EventMusicCombined\t\t= \"Mostrar toda la selección de música (escribe /reload en el chat para que esta opción surta efecto)\"\nL.Area_EventSoundsFilters\t= \"Filtros de sonidos de evento\"\nL.EventFilterDungMythicMusic= \"Desactivar música personalizada de mazmorra en dificultad Mítica/M+.\"\nL.EventFilterMythicMusic\t= \"Desactivar música personalizada de encuentros en dificultad Mítica/M+.\"\n\n-- Tab: HealthFrame\nL.Panel_HPFrame\t\t\t\t= \"Barra de vida\"\nL.Area_HPFrame\t\t\t\t= \"Opciones de la barra de vida\"\nL.HP_Enabled\t\t\t\t= \"Siempre ver la barra de vida (Sobreescribe la opción de bosses específicos)\"\nL.HP_GrowUpwards\t\t\t= \"Mover la barra de vida arriba\"\nL.HP_ShowDemo\t\t\t\t= \"Ver barra de vida\"\nL.BarWidth\t\t\t\t\t= \"Ancho de la barra: %d\"\n\n-- Tab: Timers\nL.TabCategory_Timers\t\t= \"Temporizadores\"\nL.Area_ColorBytype\t\t\t= \"Guía para colores de barras por tipo\"\n-- Panel: Color by Type\nL.Panel_ColorByType\t\t\t= \"Colores por tipo\"\nL.AreaTitle_BarColors\t\t= \"Colores de barras por tipo de temporizador\"\nL.BarTexture\t\t\t\t= \"Textura de barras\"\nL.BarStyle\t\t\t\t\t= \"Estilo de barras\"\nL.BarDBM\t\t\t\t\t= \"DBM (con animaciones)\"\nL.BarSimple\t\t\t\t\t= \"Simple (sin animaciones)\"\nL.BarStartColor\t\t\t\t= \"Color inicial\"\nL.BarEndColor\t\t\t\t= \"Color final\"\nL.Bar_Height\t\t\t\t= \"Altura de barras: %d\"\nL.Slider_BarOffSetX\t\t= \"Posición X: %d\"\nL.Slider_BarOffSetY\t\t= \"Posición Y: %d\"\nL.Slider_BarWidth\t\t\t= \"Ancho de barras: %d\"\nL.Slider_BarScale\t\t\t= \"Escala de barras: %0.2f\"\n--Types\nL.BarStartColorAdd\t\t\t= \"Color inicial\\n(esbirros)\"\nL.BarEndColorAdd\t\t\t= \"Color final\\n(esbirros)\"\nL.BarStartColorAOE\t\t\t= \"Color inicial\\n(áreas)\"\nL.BarEndColorAOE\t\t\t= \"Color final\\n(áreas)\"\nL.BarStartColorDebuff\t\t= \"Color inicial\\n(dirigido)\"\nL.BarEndColorDebuff\t\t\t= \"Color final\\n(dirigido)\"\nL.BarStartColorInterrupt\t= \"Color inicial\\n(cortar)\"\nL.BarEndColorInterrupt\t\t= \"Color final\\n(cortar)\"\nL.BarStartColorRole\t\t\t= \"Color inicial\\n(rol)\"\nL.BarEndColorRole\t\t\t= \"Color final\\n(rol)\"\nL.BarStartColorPhase\t\t= \"Color inicial\\n(fase)\"\nL.BarEndColorPhase\t\t\t= \"Color final\\n(fase)\"\nL.BarStartColorUI\t\t\t= \"Color inicial\\n(usuario)\"\nL.BarEndColorUI\t\t\t\t= \"Color final\\n(usuario)\"\n--Type 7 options\nL.Bar7Header\t\t\t\t= \"Opciones de barras de usuario\"\nL.Bar7ForceLarge\t\t\t= \"Usar siempre barras grandes\"\nL.Bar7CustomInline\t\t\t= \"Usar icono '!' personalizado\"\n--Dropdown Options\nL.CBTGeneric\t\t\t\t= \"Genérico\"\nL.CBTAdd\t\t\t\t\t= \"Esbirro\"\nL.CBTAOE\t\t\t\t\t= \"Área\"\nL.CBTTargeted\t\t\t\t= \"Objetivo\"\nL.CBTInterrupt\t\t\t\t= \"Interrumpir\"\nL.CBTRole\t\t\t\t\t= \"Rol\"\nL.CBTPhase\t\t\t\t\t= \"Fase\"\nL.CBTImportant\t\t\t\t= \"Importante (usuario)\"\nL.CVoiceOne\t\t\t\t\t= \"Cuenta atrás 1\"\nL.CVoiceTwo\t\t\t\t\t= \"Cuenta atrás 2\"\nL.CVoiceThree\t\t\t\t= \"Cuenta atrás 3\"\n\n-- Panel: Timers\nL.Panel_Appearance\t\t\t= \"Apariencia de barras\"\nL.Panel_Behavior\t\t\t= \"Comportamiento de barrs\"\nL.AreaTitle_BarSetup\t\t= \"Opciones de apariencia de barras\"\nL.AreaTitle_Behavior\t\t= \"Opciones de comportamiento de barras\"\nL.AreaTitle_BarSetupSmall\t= \"Opciones de barras pequeñas\"\nL.AreaTitle_BarSetupHuge\t= \"Opciones de barras grandes\"\nL.AreaTitle_BarSetupVariance \t= \"Opciones de barras de variación\"\nL.EnableHugeBar\t\t\t= \"Habilitar barras grandes (o 'Barra 2')\"\nL.EnableVarianceBar \t\t\t= \"Activar barras de variación\"\nL.VarianceTransparency\t\t\t= \"Transparencia de las barras: %0.1f\"\nL.ZeroatWindowEnds \t\t\t\t= \"El texto llega a cero al final de la ventana de reutilización\"\nL.ZeroatWindowStartPause \t\t= \"El texto llega a cero al inicio de la ventana de reutilización y se pausa\"\nL.ZeroatWindowStartRestart \t\t= \"El texto llega a cero al inicio de la ventana de reutilización y luego se reinicia\"\nL.ZeroatWindowStartNeg \t\t\t= \"El texto llega a cero al inicio de la ventana de reutilización y luego se vuelve negativo\" --Default\nL.BarIconLeft\t\t\t\t= \"Icono izquierdo\"\nL.BarIconRight\t\t\t\t= \"Icono derecho\"\nL.ExpandUpwards\t\t\t\t= \"Expandir arriba\"\nL.FillUpBars\t\t\t\t= \"Rellenar\"\nL.ClickThrough\t\t\t\t= \"Deshabilitar clic en barras\"\nL.Bar_Decimal\t\t\t\t= \"Mostrar decimales bajo: %d s\"\nL.Bar_Alpha\t\t\t\t\t= \"Transparencia: %0.1f\"\nL.Bar_EnlargeTime\t\t\t= \"Agrandar barras bajo tiempo: %d s\"\nL.BarSpark\t\t\t\t\t= \"Destello de barras\"\nL.BarFlash\t\t\t\t\t= \"Iluminar barras a punto de expirar\"\nL.BarSort\t\t\t\t\t= \"Ordenar por tiempo restante\"\nL.BarColorByType\t\t\t= \"Color por tipo\"\nL.NoBarFade\t\t\t\t\t= \"Usar color inicial y color final para barras pequeñas y grandes, respectivamente, en lugar de efectuar cambios de color graduales\"\nL.BarInlineIcons\t\t\t= \"Iconos en barras\"\nL.ShortTimerText\t\t\t= \"Texto de temporizador breve\"\nL.StripTimerText\t\t\t= \"Quitar 'TdR' y 'Siguiente' en los temporizadores\"\nL.KeepBar\t\t\t\t\t= \"Mantener hasta que se lance la habilidad\"\nL.KeepBar2\t\t\t\t\t= \"(siempre que el módulo lo permita)\"\nL.FadeBar\t\t\t\t\t= \"Desteñir barras de habilidades lejanas\"\n\n-- Tab: Global Disables & Filters\nL.TabCategory_Filters\t\t= \"Filtros globales\"\nL.Area_DBMFiltersSetup\t\t= \"Guía de filtros de DBM\"\nL.Area_BlizzFiltersSetup\t= \"Guía de filtros de Blizzard\"\n-- Panel: DBM Features\nL.Panel_SpamFilter\t\t\t= \"Funciones de DBM\"\nL.Area_SpamFilter_Anounces\t= \"Opciones de filtros globales de avisos\"\nL.SpamBlockNoShowAnnounce\t= \"Ocultar anuncios generales y desactivar los sonidos asociados\"\nL.SpamBlockNoShowTgtAnnounce= \"Ocultar anuncios generales de objetivos y desactivar los sonidos asociados (la opción anterior anula esta)\"\nL.SpamBlockNoSpecWarnText\t= \"Ocultar avisos especiales pero sí reproducir sonidos de paquetes de voces (la opción anterior anula esta)\"\nL.SpamBlockNoSpecWarnFlash\t= \"Desactivar destellos de avisos especiales\"\nL.SpamBlockNoSpecWarnSound\t= \"Desactivar sonidos de avisos especiales (no afecta a los paquetes de voz)\"\nL.SpamBlockRaidWarning\t\t= \"Filtrar anuncios de otros Boss Mods\"\nL.SpamBlockBossWhispers\t\t= \"Filtrar los avisos de DBM mientras estas en combate\"\n\nL.Area_SpamFilter_Timers\t= \"Opciones de filtros globales de temporizadores\"\nL.SpamBlockNoShowBossTimers\t\t\t= \"No mostrar temporizadores para jefes de mazmorras/bandas\"\nL.SpamBlockNoShowTrashTimers\t\t= \"No mostrar temporizadores para bichos (Nota: esto también desactiva los TdR con placa de nombre.)\"\nL.SpamBlockNoShowEventTimers\t\t= \"No mostrar temporizadores para eventos o avisos (cola, campo de batalla, etc.)\"\nL.SpamBlockNoShowTimers\t\t= \"Ocultar temporizadores de módulos\"\nL.SpamBlockNoShowUTimers\t= \"Ocultar temporizadores de usuario\"\nL.SpamBlockNoCountdowns\t\t= \"Desactivar sonidos de cuenta atrás\"\n\nL.Area_SpamFilter_Misc\t\t= \"Opciones de filtros globales varios\"\nL.SpamBlockNoSetIcon\t\t= \"Desactivar asignación automática de iconos\"\nL.SpamBlockNoRangeFrame\t\t= \"Ocultar marcos de distancia\"\nL.SpamBlockNoInfoFrame\t\t= \"Ocultar marcos de información\"\nL.SpamBlockNoHudMap\t\t\t= \"Ocultar indicadores\"\nL.SpamBlockNoNameplate\t\t= \"Ocultar auras de placas de nombres (las deshabilita por completo)\"\nL.SpamBlockNoYells\t\t\t= \"Desactivar envío automático de mensajes en el chat\"\nL.SpamBlockNoNoteSync\t\t= \"Rechazar automáticamente notas compartidas\"\n\nL.Area_Restore\t\t\t\t= \"Opciones de restauración\"\nL.SpamBlockNoIconRestore\t= \"Restaurar iconos al acabar el encuentro\"\nL.SpamBlockNoRangeRestore\t= \"Mantener los marcos de distancia cuando los módulos intenten esconderlos\"\n\nL.Area_SpamFilter\t\t\t= \"Opciones de filtros de avisos\"\nL.DontShowFarWarnings\t\t= \"Ocultar anuncios y temporizadores de eventos que estén demasiado lejos\"\nL.StripServerName\t\t\t= \"Omitir nombre del reino en avisos y temporizadores\"\nL.FilterVoidFormSay\t\t\t= \"Deshabilitar el envío de mensajes de posición y cuenta atrás en el chat durante $spell:47241\"\n\nL.Area_SpecFilter\t\t\t= \"Opciones de filtros de rol\"\nL.FilterTankSpec\t\t\t= \"Ocultar avisos designados para tanques cuando no sea tu rol\"\nL.FilterInterruptsHeader\t= \"Patrón para ocultar avisos de facultades interrumpibles\"\nL.FilterInterrupts\t\t\t= \"Si no es tu objetivo o foco (siempre)\"\nL.FilterInterrupts2\t\t\t= \"Si no es tu objetivo o foco (siempre) o no puedes interrumpir (solo jefes)\"\nL.FilterInterrupts3\t\t\t= \"Si no es tu objetivo o foco (siempre) o no puedes interrumpir (todos los enemigos)\"\nL.FilterInterruptNoteName\t= \"Ocultar avisos de facultades interrumpibles con orden de interrupciones si el aviso no contiene tu nombre en la nota\"\nL.FilterDispels\t\t\t\t= \"Ocular avisos de facultades disipables si tu disipación no está disponible\"\nL.FilterTrashWarnings\t\t= \"Ocultar todos los avisos de enemigos menores en mazmorras normales y heroicas\"\n\nL.Area_PullTimer\t\t\t= \"Opciones de filtros de inicio de encuentro, descanso, combate y personalizados\"\nL.DontShowPTNoID\t\t\t= \"Ocultar temporizadores de inicio de encuentro que se inicien en zonas distintas\"\nL.DontShowPT\t\t\t\t= \"Ocultar barras de temporizadores de inicio de encuentro y descanso\"\nL.DontShowPTText\t\t\t= \"Ocultar anuncios de temporizadores de inicio de encuentro y descanso\"\nL.DontShowPTCountdownText\t= \"Ocultar texto de cuenta atrás de temporizadores de inicio de encuentro, descanso, combate y personalizados\"\nL.DontPlayPTCountdown\t\t= \"Desactivar sonidos de cuenta atrás de temporizadores de inicio de encuentro, descanso, combate y personalizados\"\nL.PT_Threshold\t\t\t\t= \"Ocultar temporizadores por encima de: %d s\"\n\nL.Area_TimerTracker\t\t\t= \"Opciones de TimerTracker\"\nL.PlayTT\t\t\t\t\t= \"Habilitar TimerTracker\"\nL.PlayTTCountdown\t\t\t= \"Reproducir sonidos de TimerTracker\"\nL.PlayTTCountdownFinished\t= \"Reproducir sonidos de TimerTracker finalizado\"\n\n-- Panel: Blizzard Features\nL.Panel_HideBlizzard\t\t= \"Interfaz y funciones de Blizzard\"\nL.Area_HideBlizzard\t\t\t= \"Opciones de interfaz y funciones de Blizzard\"\nL.HideBossEmoteFrame\t\t= \"Ocultar avisos de encuentro de mazmorra y banda\"\nL.HideWatchFrame\t\t\t= \"Ocultar seguimiento de objetivos (misiones, logros, etc.) en encuentros si no se está siguiendo un logro relacionado. En modo desafío muestra el tiempo restante.\"\nL.HideGarrisonUpdates\t\t= \"Ocultar botón de ciudadela en jefes\"\nL.HideGuildChallengeUpdates\t= \"Ocultar botón de desafíos de hermandad en jefes\"\nL.HideQuestTooltips\t\t\t= \"Ocultar objetivos de misión en en descripciones emergentes durante Hide quest objectives from tooltips during boss fights\"\nL.HideTooltips\t\t\t\t= \"Ocultar por completo las descripciones emergentes en encuentros\"\nL.DisableSFX\t\t\t\t= \"Desactivar el canal de efectos de sonido en encuentros\"\nL.DisableCinematics\t\t\t= \"Saltar cinemáticas automáticamente\"\nL.ReportRecount\t\t\t\t= \"Enviar informe de Recount después de que finalice el encuentro con el jefe (requiere ser ayudante)\"\nL.ReportSkada\t\t\t\t= \"Enviar informe de SkadaRevisited después de que finalice el encuentro con el jefe (requiere ser ayudante)\"\nL.PerCharacterSettings\t\t= \"Use perfiles específicos de personajes en lugar de un perfil para toda la cuenta\"\nL.OnlyFight\t\t\t\t\t= \"Solo en combate, tras haber visto la cinemática por primera vez\"\nL.AfterFirst\t\t\t\t= \"Tras haber visto la cinemática por primera vez\"\nL.CombatOnly\t\t\t\t= \"En combate\"\nL.RaidCombat\t\t\t\t= \"En combate (solo en jefes)\"\n\n-- Panel: Privacy\nL.Tab_Privacy\t\t\t\t= \"Controles de privacidad\"\nL.Area_WhisperMessages\t\t= \"Opciones de susurros\"\nL.AutoRespond\t\t\t\t= \"Responder automáticamente a susurros en encuentro\"\nL.WhisperStats\t\t\t\t= \"Incluir estadísticas de victoria y derrota en las respuestas automáticas a susurros\"\nL.DisableStatusWhisper\t\t= \"Desactivar susurros automáticos de estado de encuentro del grupo o banda para todos los jugadores (requiere ser el líder). Solo se aplica a bandas en dificultad normal, heroica y mítica, y a mazmorras de piedra angular.\"\nL.Area_SyncMessages\t\t\t= \"Opciones de sincronización de addons\"\nL.DisableGuildStatus\t\t= \"Desactivar mensajes de hermandad de estado de encuentro del grupo o banda para todos los jugadores (requiere ser el líder).\"\nL.EnableWBSharing\t\t\t= \"Compartir tus inicios y victorias de encuentros con jefes de mundo con tu hermandad y amigos de Battle.net que estén en el mismo reino que tú\"\n\n-- Tab: Frames & Integrations\nL.TabCategory_Frames\t\t= \"Marcos e integración\"\nL.Area_NamelateInfo\t\t\t= \"Información de auras de placas de nombres de DBM\"\n-- Panel: InfoFrame\nL.Panel_InfoFrame\t\t\t= \"Marco de información\"\n\n-- Panel: Range\nL.Panel_Range\t\t\t\t= \"Marco de distancia\"\n\n-- Panel: Nameplate\nL.Panel_Nameplates\t\t\t= \"Placas de nombres\"\nL.UseNameplateHandoff\t\t= \"Permitir que otros addons (KuiNameplates, Threat Plates, Plater) controlen las auras de placas de nombres. Activa esta opción si utilizas un addon de placas de nombres para disponer de opciones de configuración más avanzadas.\"\nL.Area_NPStyle\t\t\t\t= \"Contorno (solo cuando DBM controla las placas de nombres)\"\nL.NPAuraSize\t\t\t\t= \"Tamaño del aura: %d\"\n\n-- Misc\nL.Area_General\t\t\t\t= \"General\"\nL.Area_Position\t\t\t\t= \"Posición\"\nL.Area_Style\t\t\t\t= \"Estilo\"\n\nL.FontSize\t\t\t\t\t= \"Tamaño: %d\"\nL.FontStyle\t\t\t\t\t= \"Contorno\"\nL.FontColor\t\t\t\t\t= \"Texto\"\nL.FontShadow\t\t\t\t= \"Sombra\"\nL.FontType\t\t\t\t\t= \"Fuente\"\n\nL.FontHeight\t= 16\n\n-- Retail Globals\nL.LARGE = \"Grande\"\nL.SMALL = \"Pequeño\"\nL.PLAYER_DIFFICULTY6 = \"Mítica\" -- ID: 24525\nL.PLAYER_DIFFICULTY_TIMEWALKER = \"Paseo en el tiempo\" -- ID: 25846\n"
  },
  {
    "path": "DBM-GUI/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\nif not DBM_GUI_L then DBM_GUI_L = {} end\n\nlocal L = DBM_GUI_L\nlocal CL = DBM_CORE_L\n\n--L.MainFrame \t\t\t\t\t\t= \"Deadly Boss Mods\"\n\nL.DBMWarmane\t\t\t\t\t\t= CL.DBM .. \"-Warmane par Zidras\"\nL.TranslationByPrefix\t\t\t\t= \"Retail rétroportage par \"\nL.TranslationBy\t\t\t\t\t\t= \"Barsoom, Bunny67, Zidras\"\nL.Website\t\t\t\t\t\t\t= \"Rendez-nous visite sur discord à |cFF73C2FBhttps://discord.gg/CyVWDWS|r\"\nL.WebsiteButton\t\t\t\t\t\t= \"Site web\"\n\nL.OTabBosses\t\t\t\t\t\t= \"Bosses\"--Deprecated and will be deleted once tabs no longer use this\nL.OTabRaids\t\t\t\t\t\t\t= \"Raid\"--Raids & PVP\nL.OTabDungeons\t\t\t\t\t\t= \"Groupe/Solo\"--1-5 person content (Dungeons, MoP Scenarios, World Events, Brawlers, Proving Grounds, Visions, Torghast, etc) (Dungeons, MoP Scenarios, World Events, Brawlers, Proving Grounds, Visions, Torghast, etc)\nL.OTabPlugins\t\t\t\t\t\t= \"Core Plugins\"\nL.OTabOptions\t\t\t\t\t\t= \"Options principales\"\nL.OTabAbout\t\t\t\t\t\t\t= \"À propos\"\n\nL.TabCategory_OTHER\t\t\t\t\t= \"Autres modules\"\nL.TabCategory_AFFIXES\t\t\t\t= \"Affixes\"\n\nL.BossModLoaded\t\t\t\t\t\t= \"Statistiques %s\"\nL.BossModLoad_now\t\t\t\t\t= [[Ce boss mod n'est pas chargé.\nIl le sera une fois que vous serez dans l'instance.\nVous pouvez aussi cliquer sur le bouton pour le charger manuellement.]]\n\nL.PosX\t\t\t\t\t\t\t\t= \"Position en X\"\nL.PosY\t\t\t\t\t\t\t\t= \"Position en Y\"\n\nL.MoveMe\t\t\t\t\t\t\t= \"Déplacez-moi\"\nL.Button_OK\t\t\t\t\t\t\t= \"OK\"\nL.Button_Cancel\t\t\t\t\t\t= \"Annuler\"\nL.Button_LoadMod\t\t\t\t\t= \"Charger le module\"\nL.Mod_Enabled\t\t\t\t\t\t= \"Activer ce module\"\nL.Mod_Reset\t\t\t\t\t\t\t= \"Charger les options par défaut\"\nL.Reset\t\t\t\t\t\t\t\t= \"Réinit.\"\nL.Import\t\t\t\t\t\t\t= \"Importer\"\n\nL.Enable\t\t\t\t\t\t\t= \"Activer\"\nL.Disable\t\t\t\t\t\t\t= \"Désactiver\"\n\nL.NoSound\t\t\t\t\t\t\t= \"Pas de son\"\n\nL.IconsInUse\t\t\t\t\t\t= \"Icônes utilisées par ce module\"\n\n-- Tab: Boss Statistics\nL.BossStatistics\t\t\t\t\t= \"Statistiques des boss\"\nL.Statistic_Kills\t\t\t\t\t= \"Victoires :\"\nL.Statistic_Wipes\t\t\t\t\t= \"Échecs :\"\nL.Statistic_Incompletes\t\t\t\t= \"Incomplets :\"--For scenarios, TODO, figure out a clean way to replace any Statistic_Wipes with Statistic_Incompletes for scenario mods\nL.Statistic_BestKill\t\t\t\t= \"Meilleur temps :\"\nL.Statistic_BestRank\t\t\t\t= \"Meilleur rang :\"--Maybe not get used, not sure yet, localize anyways\n\n-- Tab: General Options\nL.TabCategory_Options\t\t\t\t= \"Options générales\"\nL.Area_BasicSetup\t\t\t\t\t= \"Aide à la configuration initiale de DBM\"\nL.Area_ModulesForYou\t\t\t\t= \"Quels modules DBM sont bons pour vous ?\"\nL.Area_ProfilesSetup\t\t\t\t= \"Guide d'utilisation des profiles DBM\"\n-- Panel: Core & GUI\nL.Core_GUI\t\t\t\t\t\t\t= \"Core & Interface\"\nL.General\t\t\t\t\t\t\t= \"Options générales de DBM core\"\nL.EnableMiniMapIcon\t\t\t\t\t= \"Afficher l'icône de la minicarte\"\nL.UseSoundChannel\t\t\t\t\t= \"Configurer le canal audio utilisé par DBM pour jouer les sons d'alerte\"\nL.UseMasterChannel\t\t\t\t\t= \"Canal audio Principal\"\nL.UseDialogChannel\t\t\t\t\t= \"Canal audio Discussion\"\nL.UseSFXChannel\t\t\t\t\t\t= \"Canal audio Son (SFX)\"\nL.Latency_Text\t\t\t\t\t\t= \"Seuil de latence max. pour synchro: %d\"\n\nL.Button_RangeFrame\t\t\t\t\t= \"Afficher/cacher Cadre de portée\"\nL.Button_InfoFrame\t\t\t\t\t= \"Afficher/cacher Cadre d'infos\"\nL.Button_TestBars\t\t\t\t\t= \"Barres de test\"\nL.Button_MoveBars\t\t\t\t\t= \"Déplacer les barres\"\nL.Button_ResetInfoRange\t\t\t\t= \"Réinit. les cadres de portée et d'infos\"\n\nL.ModelOptions\t\t\t\t\t\t= \"Options du visualiseur de modèle 3D\"\nL.EnableModels\t\t\t\t\t\t= \"Activer les modèles 3D dans les options des boss\"\nL.ModelSoundOptions\t\t\t\t\t= \"Configurer le son pour le visualiseur 3D\"\nL.ModelSoundShort\t\t\t\t\t= AUCTION_TIME_LEFT1 -- Short\nL.ModelSoundLong\t\t\t\t\t= AUCTION_TIME_LEFT3 -- Long\n\nL.ResizeOptions\t\t\t\t\t\t= \"Options de redimensionnage\"\nL.ResizeInfo\t\t\t\t\t\t= \"Vous pouvez redimensionner l'interface en étirant le coin bas-droit\"\nL.Button_ResetWindowSize\t\t\t= \"Réinit. la taille de la fenêtre\"\nL.Editbox_WindowWidth\t\t\t\t= \"Largeur de la fenêtre\"\nL.Editbox_WindowHeight\t\t\t\t= \"Hauteur de la fenêtre\"\n\nL.UIGroupingOptions\t\t\t\t\t= \"Options d'interface partagées (requiert de recharger l'interface pour tout module qui serait déjà chargé)\"\nL.GroupOptionsBySpell\t\t\t\t= \"Options de modules regroupées par capacité (pour les modules compatibles)\"\nL.GroupOptionsExcludeIcon\t\t\t= \"Exclure l'option \\\"Définir l'icône sur\\\" du regroupement par capacité (elles seront regroupées dans la catégorie \\\"Icônes\\\" comme avant)\"\nL.AutoExpandSpellGroups\t\t\t\t= \"Déplier automatiquement les options liées à la même capacité\"\n--L.ShowSpellDescWhenExpanded\t= \"Continue showing spell description when groups are expanded\"--Might not be used\nL.NoDescription\t\t\t\t\t\t= \"Cette capacité n'a aucune description\"\n\n-- Panel: Extra Features\nL.Panel_ExtraFeatures\t\t\t\t= \"Fonctionnalités supplémentaires\"\n\nL.Area_SoundAlerts\t\t\t\t\t= \"Options des alertes sonores/flash\"\nL.LFDEnhance\t\t\t\t\t\t= \"Faire clignoter le bouton de l'application et jouer le son d'Appel lors des vérif. de rôle &amp; des invitations (LFG,BG,etc) dans les canaux audio Principal ou Discussion (canaux généralement plus forts, fonctionnent même si le SFX est désactivé)\"\nL.WorldBossNearAlert\t\t\t\t= \"Faire clignoter le bouton de l'application et jouer le son d'Appel quand un World Boss proche de vous est engagé\"\nL.RLReadyCheckSound\t\t\t\t\t= \"Quand le chef de raid lance un Appel, jouer le son via les canaux audio Principal ou Discussion et faire clignoter le bouton de l'application\"\nL.AFKHealthWarning\t\t\t\t\t= \"Faire clignoter le bouton de l'application et jouer un son d'alerte si vous perdez de la vie alors que vous absent\"\nL.AutoReplySound\t\t\t\t\t= \"Faire clignoter le bouton de l'application et jouer un son d'alerte quand vous recevez une réponse DBM automatique par chuchotement\"\n--\nL.TimerGeneral\t\t\t\t\t\t= \"Options des décompte\"\nL.SKT_Enabled\t\t\t\t\t\t= \"Décompte du record pour le combat actuel s'il est disponible\"\nL.ShowRespawn\t\t\t\t\t\t= \"Décompte de la réapparition du boss après un wipe\"\nL.ShowQueuePop\t\t\t\t\t\t= \"Décompte du temps restant pour accepter une invitation (LFG,BG,etc)\"\n--\n--Auto Logging: Logging toggles/types\nL.Area_AutoLogging\t\t\t\t\t= \"Options d'enregistrement auto\"\nL.AutologBosses\t\t\t\t\t\t= \"Enregistrement auto du combat contre un boss en utilisant le journal de combat de Blizzard\"\nL.AdvancedAutologBosses\t\t\t\t= \"Enregistrement auto du combat contre un boss en utilisant Transcriptor\"\n--Auto Logging: Global filter Options\nL.Area_AutoLoggingFilters\t\t\t= \"Filtres d'enregistrement automatique\"\nL.RecordOnlyBosses\t\t\t\t\t= \"N'enregistrer que les boss et exclure tous les trash. Utilisez '/dbm pull' avant les boss pour prendre en compte les potions (pre pot) &amp; ENCOUNTER_START\"\nL.DoNotLogLFG\t\t\t\t\t\t= \"Ne pas enregistrer en LFG ou LFR (contenu en file d'attente)\"\n--Auto Logging: Recorded Content types\nL.Area_AutoLoggingContent\t\t\t= \"Contenu d'enregistrement automatique\"\nL.LogCurrentMythicRaids\t\t\t\t= \"Raids mythiques de niveau actuel\"--Retail Only\nL.LogCurrentRaids\t\t\t\t\t= \"Raids non mythiques de niveau actuel (Héroïque, Normal et LFR si le filtre LFG/LFR est désactivé)\"\nL.LogTWRaids\t\t\t\t\t\t= \"Raids des Marcheurs du temps ou de Chromie\"--Retail Only\nL.LogTrivialRaids\t\t\t\t\t= \"Raids triviaux (en dessous du niveau du personnage)\"\nL.LogCurrentMPlus\t\t\t\t\t= \"Donjons M+ actuel\"--Retail Only\nL.LogCurrentMythicZero\t\t\t\t= \"Donjons Mythique 0 actuel\"--Retail Only\nL.LogTWDungeons\t\t\t\t\t\t= \"Donjons des Marcheurs du temps ou de Chromie\"--Retail Only\nL.LogCurrentHeroic\t\t\t\t\t= \"Donjons héroïques de niveau actuel (Note : si vous faites de l'héroïque via la file d'attente et que vous voulez que ce soit enregistré, désactivez le filtre LFG)\"\nL.LogCurrentNormal\t\t\t\t\t= \"Donjons normaux de niveau actuel (Remarque : si vous faites quelque chose d'héroïque via l'outil de recherche de raid et que vous souhaitez que cela soit enregistré, désactivez le filtre LFG)\"\nL.LogTrivialDungeons\t\t\t\t= \"Donjons triviaux (en dessous du niveau du personnage)\"\n--\nL.Area_3rdParty\t\t\t\t\t\t= \"Options des Addons tiers\"\nL.oRA3AnnounceConsumables\t\t\t= \"Annoncer la vérification des consommables oRA3 au début du combat\"\nL.ShowBBOnCombatStart\t\t\t\t= \"Effectuer la vérification des buffs Big Brother au début du combat\"\nL.BigBrotherAnnounceToRaid\t\t\t= \"Annoncer les résultats de Big Brother au raid\"\nL.Area_Invite\t\t\t\t\t\t= \"Options des invitations\"\nL.AutoAcceptFriendInvite\t\t\t= \"Acceptation auto des invitations venant d'un ami\"\nL.AutoAcceptGuildInvite\t\t\t\t= \"Acceptation auto des invitations venant d'un membre de la guilde\"\nL.Area_Advanced\t\t\t\t\t\t= \"Options Avancées\"\nL.FakeBW\t\t\t\t\t\t\t= \"Prétendre utiliser BigWigs lors des vérifications de versions au lieu de DBM (utile pour les guildes qui forcent l'utilisation de BigWigs)\"\nL.AITimer\t\t\t\t\t\t\t= \"Utiliser un générateur automatique de décomptes pour les nouveaux combats en utilisant l'IA intégrée de DBM (utile pour engager les boss jamais vus sur la béta). Recommandé de toujours laisser cette option activée\"\nL.FixCLEUOnCombatStart\t\t\t\t= \"Effacer le cache du journal de combat à la fin du pull/combat et du changement de zone\"\n\n-- Panel: Profiles\nL.Panel_Profile\t\t\t\t\t\t= \"Profils\"\nL.Area_CreateProfile\t\t\t\t= \"Créer un profil\"\nL.EnterProfileName\t\t\t\t\t= \"Entrer un nom pour le nouveau profil\"\nL.CreateProfile\t\t\t\t\t\t= \"Créer un nouveau profil\"\nL.Area_ApplyProfile\t\t\t\t\t= \"Définir le profil actif\"\nL.SelectProfileToApply\t\t\t\t= \"Sélection du profil à utiliser\"\nL.Area_CopyProfile\t\t\t\t\t= \"Copier un profil\"\nL.SelectProfileToCopy\t\t\t\t= \"Sélection du profil à copier\"\nL.Area_DeleteProfile\t\t\t\t= \"Supprimer un profil\"\nL.SelectProfileToDelete\t\t\t\t= \"Sélection du profil à supprimer\"\nL.Area_DualProfile\t\t\t\t\t= \"Options du profil\"\nL.DualProfile\t\t\t\t\t\t= \"Activer la gestion des options en fonction de la spécialisation (la gestion des profiles boss mod est faite à partir de la fenêtre des statistiques des boss mod chargés)\"\n\nL.Area_ModProfile\t\t\t\t\t= \"Copier les réglages depuis un autre perso/spé ou supprimer des réglages\"\nL.ModAllReset\t\t\t\t\t\t= \"Réinitialiser tous les réglages\"\nL.ModAllStatReset\t\t\t\t\t= \"Réinitialiser toutes les statistiques\"\nL.SelectModProfileCopy\t\t\t\t= \"Copier tous les réglages\"\nL.SelectModProfileCopySound\t\t\t= \"Copier les réglages sonores\"\nL.SelectModProfileCopyNote\t\t\t= \"Copier les réglages des notes\"\nL.SelectModProfileCurrent\t\t\t= \"Profil actuel de boss mod\"\nL.SelectModProfileDelete\t\t\t= \"Supprimer les réglages pour\"\n\nL.Area_ImportExportProfile\t= \"Importer/Exporter profils\"\nL.ImportExportInfo\t\t\t= \"Attention ! Importer un profil écrasera votre profil actuel\"\nL.ButtonImportProfile\t\t= \"Importer profil\"\nL.ButtonExportProfile\t\t= \"Exporter profil\"\nL.ProfileExportTitle\t\t= \"Voici votre profil actuel au format texte.\"\nL.ProfileExportSubtitle\t    = \"Ctrl-C pour copier la config. dans votre presse-papier.\"\nL.ProfileImportTitle\t\t= \"Collez ici un profil au format texte.\"\nL.ProfileImportSubtitle\t    = \"Ctrl-V pour coller un texte de config de DBM.\"\n\nL.ImportErrorOn\t\t\t\t\t\t= \"Son personnalisé manquant pour : %s\"\nL.ImportVoiceMissing\t\t\t\t= \"Pack de voix manquant : %s\"\n\n-- Tab: Alerts\nL.TabCategory_Alerts\t\t\t\t= \"Alertes\"\nL.Area_SpecAnnounceConfig\t\t\t= \"Guide des effets visuels et sonores des Alertes spéciales\"\nL.Area_SpecAnnounceNotes\t\t\t= \"Guide des Notes des Alertes spéciales\"\nL.Area_VoicePackInfo\t\t\t\t= \"Information sur les Packs de voix DBM\"\n-- Panel: Raidwarning\nL.Tab_RaidWarning\t\t\t\t\t= \"Alertes\"\nL.RaidWarning_Header\t\t\t\t= \"Options des alertes\"\nL.RaidWarnColors\t\t\t\t\t= \"Couleurs des alertes\"\nL.RaidWarnColor_1\t\t\t\t\t= \"Couleur 1\"\nL.RaidWarnColor_2\t\t\t\t\t= \"Couleur 2\"\nL.RaidWarnColor_3\t\t\t\t\t= \"Couleur 3\"\nL.RaidWarnColor_4\t\t\t\t\t= \"Couleur 4\"\nL.InfoRaidWarning\t\t\t\t\t= [[Vous pouvez préciser la position et les couleurs de la fenêtre des alertes raid.\nCette fenêtre est utilisée pour les messages de type \"Joueur X est affecté par Y\".]]\nL.ColorResetted\t\t\t\t\t\t= \"Les paramètres de couleur de ce champ ont été réinitialisés\"\nL.ShowWarningsInChat\t\t\t\t= \"Afficher les alertes dans la fenêtre de discussion\"\nL.ShowFakedRaidWarnings\t\t\t\t= \"Afficher les avertissements comme de faux messages d'alerte de raid\"\nL.WarningIconLeft\t\t\t\t\t= \"Afficher l'icône du côté gauche\"\nL.WarningIconRight\t\t\t\t\t= \"Afficher l'icône du côté droit\"\nL.WarningIconChat\t\t\t\t\t= \"Afficher les icônes dans la fenêtre de discussion\"\nL.WarningAlphabetical\t\t\t\t= \"Arranger les noms de manière alphabétique\"\nL.Warn_Duration\t\t\t\t\t\t= \"Durée de l'alerte: %0.1f sec\"\nL.None\t\t\t\t\t\t\t\t= \"Aucun\"\nL.Random\t\t\t\t\t\t\t= \"Aléatoire\"\nL.Outline\t\t\t\t\t\t\t= \"Contour fin\"\nL.ThickOutline\t\t\t\t\t\t= \"Contour épais\"\nL.MonochromeOutline\t\t\t\t\t= \"Contour monochrome\"\nL.MonochromeThickOutline\t\t\t= \"Contour monochrome épais\"\nL.RaidWarnSound\t\t\t\t\t\t= \"Jouer un son sur les alertes raid\"\n\n-- Panel: Spec Warn Frame\nL.Panel_SpecWarnFrame\t\t\t\t= \"Alertes spéciales\"\nL.Area_SpecWarn\t\t\t\t\t\t= \"Options des spéciales\"\nL.SpecWarn_ClassColor\t\t\t\t= \"Utiliser la couleur des classes pour les alertes spéciales\"\nL.ShowSWarningsInChat\t\t\t\t= \"Afficher les alertes spéciales dans la fenêtre de discussion\"\nL.SWarnNameInNote\t\t\t\t\t= \"Utiliser les options de type 5 si une note d'alerte spéciale contient votre nom\"\nL.SpecialWarningIcon\t\t\t\t= \"Afficher les icônes sur les alertes spéciales\"\nL.ShortTextSpellname\t\t\t\t= \"Abréger le texte des noms des sorts (si possible)\"\nL.SpecWarn_FlashFrameRepeat\t\t\t= \"Clignoter %d fois\"\nL.SpecWarn_Flash\t\t\t\t\t= \"Clignotement écran\"\nL.SpecWarn_Vibrate\t\t\t\t\t= \"Vibrations manette\"\nL.SpecWarn_FlashRepeat\t\t\t\t= \"Répéter Clignotement\"\nL.SpecWarn_FlashColor\t\t\t\t= \"Couleur Clignotement %d\"\nL.SpecWarn_FlashDur\t\t\t\t\t= \"Durée Clignotement : %0.1f\"\nL.SpecWarn_FlashAlpha\t\t\t\t= \"Alpha Clignotement : %0.1f\"\nL.SpecWarn_DemoButton\t\t\t\t= \"Aff. un exemple\"\nL.SpecWarn_ResetMe\t\t\t\t\t= \"Réinit. les valeurs\"\nL.SpecialWarnSoundOption\t\t\t= \"Définir son par défaut\"\nL.SpecialWarnHeader1\t\t\t\t= \"Type 1: Définir les options pour les annonces de priorité normale vous affectant ou affectant vos actions\"\nL.SpecialWarnHeader2\t\t\t\t= \"Type 2: Définir les options pour les annonces de priorité normale affectant tout le monde\"\nL.SpecialWarnHeader3\t\t\t\t= \"Type 3: Définir les options pour les annonces de HAUTE priorité\"\nL.SpecialWarnHeader4\t\t\t\t= \"Type 4: Définir les options pour les annonces spéciales de fuite de HAUTE priorité\"\nL.SpecialWarnHeader5\t\t\t\t= \"Type 5: Définir les options pour les annonces dont la note contient votre nom de joueur\"\n\n-- Panel: Generalwarnings\nL.Tab_GeneralMessages\t\t\t\t= \"Messages dans la fenêtre de discussion\"\nL.CoreMessages\t\t\t\t\t\t= \"Options des messages de DBM\"\nL.ShowPizzaMessage\t\t\t\t\t= \"Afficher les messages d'annonce de décomptes dans la fenêtre de discussion\"\nL.ShowAllVersions\t\t\t\t\t= \"Afficher les versions boss mod de tous les membres du groupe dans la fenêtre de discussion lors d'une vérification des versions. (Si désactivé, continu d'effectuer un résumé obsolète/à jour)\"\nL.ShowReminders\t\t\t\t\t\t= \"Afficher des messages de rappel pour les sous-modules manquants, désactivés, hotfixes, obsolètes, et mode silencieux étant toujours activé\"\n\nL.CombatMessages\t\t\t\t\t= \"Options des messages liés au combat\"\nL.ShowEngageMessage\t\t\t\t\t= \"Afficher les messages de pull du boss dans la fenêtre de discussion\"\nL.ShowDefeatMessage\t\t\t\t\t= \"Afficher les messages victoire/défaite dans la fenêtre de discussion\"\nL.ShowGuildMessages\t\t\t\t\t= \"Afficher les messages pull/victoire/défaite pour les groupes de la guilde dans la fenêtre de discussion\"\nL.ShowGuildMessagesPlus\t\t\t\t= \"Afficher aussi les messages pull/victoire/défaite pour les groupes Mythique+ de la guilde (requiert raid option)\"\n\nL.Area_ChatAlerts\t\t\t\t\t= \"Options des alertes supplémentaires\"\nL.RoleSpecAlert\t\t\t\t\t\t= \"Afficher une alerte lorsque vous rejoignez un raid et que votre préférence de butin ne correspond pas à votre spécialisation actuelle\"\nL.CheckGear\t\t\t\t\t\t\t= \"Afficher une alerte d'équipement pendant le pull (quand votre ilvl équipé est beaucoup plus bas que votre ilvl global (40+) ou que votre arme principale n'est pas équipée)\"\nL.WorldBossAlert\t\t\t\t\t= \"Afficher une alerte lorsqu'un world boss pourrait avoir été engagé sur votre royaume par votre guilde ou des amis (incorrect si l'info est reçue par inter-serveur)\"\nL.WorldBuffAlert\t\t\t\t\t= \"Afficher une alerte et un décompte lorsqu'un événement annonçant un world buff est détecté sur votre royaume\"\n\nL.Area_BugAlerts\t\t\t\t\t= \"Options des rapports de bugs\"\nL.BadTimerAlert\t\t\t\t\t\t= \"Afficher un message quand DBM détecte un décompte erroné avec au moins 1 seconde de différence\"\nL.BadIDAlert\t\t\t\t\t\t= \"Afficher un message quand DBM détecte une capacité ou entrée de journal erronée\"\n\n-- Panel: Spoken Alerts Frame\nL.Panel_SpokenAlerts\t\t\t\t= \"Alertes vocales\"\nL.Area_VoiceSelection\t\t\t\t= \"Sélection des voix\"\nL.CountdownVoice\t\t\t\t\t= \"Voix principale pour les décomptes\"\nL.CountdownVoice2\t\t\t\t\t= \"Voix secondaire pour les décomptes\"\nL.CountdownVoice3\t\t\t\t\t= \"Voix tertiaire pour les décomptes\"\nL.PullVoice\t\t\t\t\t\t\t= \"Définir la voix pour les minuteurs de pull\"\nL.VoicePackChoice\t\t\t\t\t= \"Pack de voix des Alertes vocales\"\nL.MissingVoicePack\t\t\t\t\t= \"Pack de voix manquant (%s)\"\nL.Area_CountdownOptions\t\t\t\t= \"Options des décomptes\"\nL.Area_VoicePackReplace\t\t\t\t= \"Options de remplacement par le Pack de voix (quels sons seront remplacés par le Pack de voix)\"\nL.VPReplaceNote\t\t\t\t\t\t= \"Note: Les Packs de voix ne modifient ou suppriment jamais vos sons d'alertes.\\nIls sont simplement mis en sourdine lorsqu'un Pack de voix les remplace.\"\nL.ReplacesAnnounce\t\t\t\t\t= \"Remplacer les sons d'alerte (Note : Très peu d'utilisation pour les packs de voix, sauf pour les changements de phases et les adds)\"\nL.ReplacesSA1\t\t\t\t\t\t= \"Remplacer les sons d'alerte spéciale 1 (personnelle, càd 'pvpflag' qui ne sont pas des GTFO)\"\nL.ReplacesSA2\t\t\t\t\t\t= \"Remplacer les sons d'alerte spéciale 2 (tout le monde, càd 'beware')\"\nL.ReplacesSA3\t\t\t\t\t\t= \"Remplacer les sons d'alerte spéciale 3 (haute priorité, càd 'airhorn')\"\nL.ReplacesSA4\t\t\t\t\t\t= \"Remplacer les sons d'alerte spéciale 4 (haute priorité, fuyez)\"\nL.ReplacesGTFO\t\t\t\t\t\t= \"Remplacer les sons des alertes spéciales GTFO\"\nL.ReplacesCustom\t\t\t\t\t= \"Remplacer les sons d'alerte spéciale des réglages utilisateur personnalisés (par événement) (non recommandé)\"\nL.Area_VoicePackAdvOptions\t\t\t= \"Options avancées Packs de voix\"\nL.SpecWarn_AlwaysVoice\t\t\t\t= \"Toujours jouer toutes les alertes vocales même si l'Alerte spéciale est désactivée (peut être utile aux chefs de raid dans certaines situations, non recommandé autrement)\"\nL.VPDontMuteSounds\t\t\t\t\t= \"Désactiver la mise en sourdine des alertes standards lors de l'utilisation d'un pack de voix (à utiliser seulement si vous souhaitez entendre les DEUX types d'alertes sonores simultanément)\"\nL.Area_VPLearnMore\t\t\t\t\t= \"Apprenez-en plus sur les packs de voix et comment utiliser ces options\"\nL.VPLearnMore\t\t\t\t\t\t= \"|cFF73C2FBhttps://github.com/DeadlyBossMods/DBM-Retail/wiki/%5BGuide%5D-DBM-&-Voicepacks#2022-update|r\"\nL.Area_BrowseOtherVP\t\t\t\t= \"Trouvez d'autres packs de voix sur Curse\"\nL.BrowseOtherVPs\t\t\t\t\t= \"|cFF73C2FBhttps://www.curseforge.com/wow/addons/search?search=dbm+voice|r\"\nL.Area_BrowseOtherCT\t\t\t\t= \"Trouvez d'autres packs de décompte sur Curse\"\nL.BrowseOtherCTs\t\t\t\t\t= \"|cFF73C2FBhttps://www.curseforge.com/wow/addons/search?search=dbm+count+pack|r\"\n\n-- Panel: Event Sounds\nL.Panel_EventSounds\t\t\t\t\t= \"Événements sonores\"\nL.Area_SoundSelection\t\t\t\t= \"Sélection du son (parcourez le menu de sélection avec la molette souris)\"\nL.EventVictorySound\t\t\t\t\t= \"Son pour les victoires\"\nL.EventWipeSound\t\t\t\t\t= \"Son pour les défaites\"\nL.EventEngagePT\t\t\t\t\t\t= \"Son pour le début du décompte avant pull\"\nL.EventEngageSound\t\t\t\t\t= \"Son pour le pull\"\nL.EventDungeonMusic\t\t\t\t\t= \"Musique jouée dans les donjons/raids\"\nL.EventEngageMusic\t\t\t\t\t= \"Musique jouée pendant les rencontres\"\nL.Area_EventSoundsExtras\t\t\t= \"Options des événements sonores\"\nL.EventMusicCombined\t\t\t\t= \"Autoriser tous les choix de musiques dans les sélections de donjons et de rencontres (changer cette option requiert de recharger l'interface)\"\nL.Area_EventSoundsFilters\t\t\t= \"Conditions des événements sonores\"\nL.EventFilterDungMythicMusic\t\t= \"Ne pas jouer de musique de donjon en difficulté Mythique/Mythique+\"\nL.EventFilterMythicMusic\t\t\t= \"Ne pas jouer de musique de rencontre en difficulté Mythique/Mythique+\"\n\n-- Tab: Timers\nL.TabCategory_Timers\t\t\t\t= \"Barres\"\nL.Area_ColorBytype\t\t\t\t\t= \"Guide de coloration par type des barres\"\n-- Panel: Color by Type\nL.Panel_ColorByType\t\t\t\t\t= \"Couleur par type\"\nL.AreaTitle_BarColors\t\t\t\t= \"Couleurs de barre par type de décompte\"\nL.BarTexture\t\t\t\t\t\t= \"Texture des barres\"\nL.BarStyle\t\t\t\t\t\t\t= \"Comportement des barres\"\nL.BarDBM\t\t\t\t\t\t\t= \"Classique (les petites barres existantes glissent vers l'ancrage élargi)\"\nL.BarSimple\t\t\t\t\t\t\t= \"Simple (la petite barre disparaît et une nouvelle grande barre est créée)\"\nL.BarStartColor\t\t\t\t\t\t= \"Couleur initiale\"\nL.BarEndColor\t\t\t\t\t\t= \"Couleur finale\"\nL.Bar_Height\t\t\t\t\t\t= \"Hauteur : %d\"\nL.Slider_BarOffSetX\t\t\t\t\t= \"Décalage X : %d\"\nL.Slider_BarOffSetY\t\t\t\t\t= \"Décalage Y : %d\"\nL.Slider_BarWidth\t\t\t\t\t= \"Largeur : %d\"\nL.Slider_BarScale\t\t\t\t\t= \"Échelle : %0.2f\"\nL.BarSaturation\t\t\t\t\t\t= \"Saturation pour les petits décomptes (si les grandes barres sont désactivées) : %0.2f\"\n\n--Types\nL.BarStartColorAdd\t\t\t\t\t= \"Initiale\\n(Add)\"\nL.BarEndColorAdd\t\t\t\t\t= \"Finale\\n(Add)\"\nL.BarStartColorAOE\t\t\t\t\t= \"Initiale\\n(AOE)\"\nL.BarEndColorAOE\t\t\t\t\t= \"Finale\\n(AOE)\"\nL.BarStartColorDebuff\t\t\t\t= \"Initiale\\n(Ciblé)\"\nL.BarEndColorDebuff\t\t\t\t\t= \"Finale\\n(Ciblé)\"\nL.BarStartColorInterrupt\t\t\t= \"Initiale\\n(Interruption)\"\nL.BarEndColorInterrupt\t\t\t\t= \"Finale\\n(Interruption)\"\nL.BarStartColorRole\t\t\t\t\t= \"Initiale\\n(Rôle)\"\nL.BarEndColorRole\t\t\t\t\t= \"Finale\\n(Rôle)\"\nL.BarStartColorPhase\t\t\t\t= \"Initiale\\n(Phase)\"\nL.BarEndColorPhase\t\t\t\t\t= \"Finale\\n(Phase)\"\nL.BarStartColorUI\t\t\t\t\t= \"Initiale\\n(Utilisateur)\"\nL.BarEndColorUI\t\t\t\t\t\t= \"Finale\\n(Utilisateur)\"\n--Type 7 options\nL.Bar7Header\t\t\t\t\t\t= \"Options de la barre utilisateur\"\nL.Bar7ForceLarge\t\t\t\t\t= \"Toujours utiliser une grande barre\"\nL.Bar7CustomInline\t\t\t\t\t= \"Utiliser l'icône intégrée personnalisée '!'\"\n--Dropdown Options\nL.CBTGeneric\t\t\t\t\t\t= \"Générique\"\nL.CBTAdd\t\t\t\t\t\t\t= \"Add\"\nL.CBTAOE\t\t\t\t\t\t\t= \"AOE\"\nL.CBTTargeted\t\t\t\t\t\t= \"Ciblé\"\nL.CBTInterrupt\t\t\t\t\t\t= \"Interruption\"\nL.CBTRole\t\t\t\t\t\t\t= \"Rôle\"\nL.CBTPhase\t\t\t\t\t\t\t= \"Phase\"\nL.CBTImportant\t\t\t\t\t\t= \"Important (Utilisateur)\"\nL.CVoiceOne\t\t\t\t\t\t\t= \"Décompte vocal 1\"\nL.CVoiceTwo\t\t\t\t\t\t\t= \"Décompte vocal 2\"\nL.CVoiceThree\t\t\t\t\t\t= \"Décompte vocal 3\"\n\n-- Panel: Timers\nL.Panel_Appearance\t\t\t\t\t= \"Apparence des barres\"\nL.Panel_Behavior\t\t\t\t\t= \"Comportement des barres\"\nL.AreaTitle_BarSetup\t\t\t\t= \"Options de l'apparence des barres\"\nL.AreaTitle_Behavior\t\t\t\t= \"Options du comportement des barres\"\nL.AreaTitle_BarSetupSmall\t\t\t= \"Options des petites barres\"\nL.AreaTitle_BarSetupHuge\t\t\t= \"Options des énormes barres\"\nL.AreaTitle_BarSetupVariance\t\t= \"Options des barres de variance\"\nL.EnableHugeBar\t\t\t\t\t\t= \"Activer les énormes barres (ou Barres 2)\"\nL.EnableVarianceBar \t\t\t\t= \"Activer les barres de variance\"\nL.VarianceTransparency\t\t\t\t= \"Transparence des barres : %0.1f\"\nL.VarianceTimerTextBehavior\t\t\t= \"Définir le comportement du texte du minuteur de variance\"\nL.ZeroatWindowEnds\t\t\t\t\t= \"Le texte atteint zéro à la fin de la fenêtre de recharge\"\nL.ZeroatWindowStartPause\t\t\t= \"Le texte atteint zéro au début de la fenêtre de recharge et se met en pause\"\nL.ZeroatWindowStartRestart\t\t\t= \"Le texte atteint zéro au début de la fenêtre de recharge puis redémarre\"\nL.ZeroatWindowStartNeg\t\t\t\t= \"Le texte atteint zéro au début de la fenêtre de recharge puis devient négatif\"--Default\nL.BarIconLeft\t\t\t\t\t\t= \"Icône à gauche\"\nL.BarIconRight\t\t\t\t\t\t= \"Icône à droite\"\nL.ExpandUpwards\t\t\t\t\t\t= \"Étendre vers le haut\"\nL.FillUpBars\t\t\t\t\t\t= \"Remplir\"\nL.ClickThrough\t\t\t\t\t\t= \"Désactiver les interactions souris (clic au travers)\"\nL.Bar_Decimal\t\t\t\t\t\t= \"Afficher la décimale en dessous de : %d\"\nL.Bar_Alpha\t\t\t\t\t\t\t= \"Alpha : %0.1f\"\nL.Bar_EnlargeTime\t\t\t\t\t= \"Barres agrandies à partir de : %d\"\nL.BarSpark\t\t\t\t\t\t\t= \"Barre clignotante\"\nL.BarFlash\t\t\t\t\t\t\t= \"Faire clignoter les barres qui vont expirer\"\nL.BarSort\t\t\t\t\t\t\t= \"Trier par temps restant\"\nL.BarColorByType\t\t\t\t\t= \"Couleur par type\"\nL.Highest\t\t\t\t\t\t\t= \"Plus long en haut\"\nL.Lowest\t\t\t\t\t\t\t= \"Plus court en haut\"\nL.NoBarFade\t\t\t\t\t\t\t= \"Utiliser les couleurs de début/fin comme couleurs pour les petites/grandes barres au lieu d'un changement de couleur progressif\"\nL.BarInlineIcons\t\t\t\t\t= \"Icônes intégrées\"\nL.DisableRightClickBar\t\t\t\t= \"Désactiver le clic droit pour annuler les barres timer\"\nL.ShortTimerText\t\t\t\t\t= \"Texte de temps abrégé (si possible)\"\nL.StripTimerText\t\t\t\t\t= \"Désactiver les timers négatifs\"\nL.KeepBar\t\t\t\t\t\t\t= \"Maintenir les barres actives jusqu'à l'utilisation de la capacité\"\nL.KeepBar2\t\t\t\t\t\t\t= \"(quand supporté par le module)\"\nL.FadeBar\t\t\t\t\t\t\t= \"Disparition des barres pour les capacités hors de portée\"\nL.BarSkin\t\t\t\t\t\t\t= \"Apparence des barres\"\n\n-- Tab: HealthFrame\nL.Panel_HPFrame\t\t\t\t\t\t= \"Cadre de vie\"\nL.Area_HPFrame\t\t\t\t\t\t= \"Options du cadre de vie\"\nL.HP_Enabled\t\t\t\t\t\t= \"Toujours montrer le cadre de vie (Remplace l'option spécifique au boss)\"\nL.HP_GrowUpwards\t\t\t\t\t= \"Étendre le cadre de vie vers le haut\"\nL.HP_ShowDemo\t\t\t\t\t\t= \"Montrer le cadre de vie\"\nL.BarWidth\t\t\t\t\t\t\t= \"Longueur de la barre: %d\"\n\n-- Tab: Global Disables & Filters\nL.TabCategory_Filters\t\t\t\t= \"Désactivations globales & Filtres\"\nL.Area_DBMFiltersSetup\t\t\t\t= \"Guide des filtres DBM\"\nL.Area_BlizzFiltersSetup\t\t\t= \"Guide des filtres Blizzard\"\n-- Panel: Toggle DBM Features\nL.Panel_SpamFilter\t\t\t\t\t= \"Fonctionnalités DBM\"\n\nL.Area_SpamFilter_SpecFeatures\t\t= \"Fonctionnalités d'annonce\"\nL.SpamBlockNoShowAnnounce\t\t\t= \"Ne pas afficher de texte ou jouer de son pour AUCUNE alerte générale (non accentuée)\"\nL.SpamBlockNoSpecWarnText\t\t\t= \"Ne pas afficher de texte pour les alertes spéciales\"\nL.SpamBlockNoSpecWarnFlash\t\t\t= \"Ne pas faire clignoter l'écran pour les alertes spéciales\"\nL.SpamBlockNoSpecWarnVibrate\t\t= \"Ne pas faire vibrer la manette pour les alertes spéciales\"\nL.SpamBlockNoSpecWarnSound\t\t\t= \"Ne pas jouer de son d'alerte spéciale (autorise les packs de voix, si l'un d'eux est sélectionné dans les options d'alertes vocales)\"\n\nL.Area_SpamFilter_Timers\t\t\t= \"Options de désactivation et de filtrage global des décomptes\"\nL.SpamBlockNoShowBossTimers\t\t\t= \"Ne pas afficher les décomptes pour les boss de donjon/raid\"\nL.SpamBlockNoShowTrashTimers\t\t= \"Ne pas afficher les décomptes pour les monstres de donjon/raid (Note : cela désactive également les CD des barres de vie)\"\nL.SpamBlockNoShowEventTimers\t\t= \"Ne pas afficher les décomptes pour les événements ou les invites (file d'attente, réapparition de boss, etc.)\"\nL.SpamBlockNoShowUTimers\t\t\t= \"Ne pas afficher les décomptes envoyés (Personnalisé/Pull/Pause)\"\nL.SpamBlockNoCountdowns\t\t\t\t= \"Ne pas jouer le son du compte à rebours\"\n\nL.Area_SpamFilter_Nameplates\t\t= \"Options de désactivation et de filtrage global des barres de vie\"\nL.SpamBlockNoNameplate\t\t\t\t= \"Ne pas afficher les auras sur les barres de vie\"\nL.SpamBlockNoBossGUIDs\t\t\t\t= \"Ne pas afficher les minuteurs du boss principal (boss1) sur les barres de vie Plater en tant qu'Auras de barre de vie\\n(vous verrez toujours les minuteurs des monstres/adds du boss si la fonction est activée dans Plater)\"\nL.SpamBlockTimersWithNameplates\t\t= \"Ne pas afficher les barres de minuteur pour les modules de monstres si les Auras de barre de vie de Plater sont activées dans les options de Plater (ne s'applique pas aux combats de boss, qui afficheront toujours les barres de minuteur)\"\nL.NameplateFooter\t\t\t\t\t= \"Des fonctionnalités supplémentaires sont disponibles ici si Plater Nameplates est activé\"\n\nL.Area_SpamFilter_Misc\t\t\t\t= \"Options diverses de désactivation et de filtrage global\"\nL.SpamBlockNoSetIcon\t\t\t\t= \"Ne pas placer d'icônes sur les cibles\"\nL.SpamBlockNoRangeFrame\t\t\t\t= \"Ne pas afficher le cadre des portées\"\nL.SpamBlockNoInfoFrame\t\t\t\t= \"Ne pas afficher le cadre d'information\"\nL.SpamBlockNoHudMap\t\t\t\t\t= \"Ne pas afficher la HudMap\"\n\nL.SpamBlockNoYells\t\t\t\t\t= \"Ne pas envoyer de cris dans le chat\"\nL.SpamBlockNoNoteSync\t\t\t\t= \"Ne pas accepter les notes partagées\"\nL.SpamBlockAutoGossip\t\t\t\t= \"Ne pas gérer automatiquement les dialogues de commérage\"\n\nL.Area_Restore\t\t\t\t\t\t= \"Options de restauration DBM (Restaure la dernière utilisation de DBM ou non lors de la fin d'un module)\"\nL.SpamBlockNoIconRestore\t\t\t= \"Ne pas sauvegarder l'état des icônes et les restaurer en fin de combat\"\nL.SpamBlockNoRangeRestore\t\t\t= \"Ne pas restaurer le radar de portée quand les addons le cachent\"\n\nL.Area_PullTimer\t\t\t\t\t= \"Options du filtre des décomptes de pull, pause, combat, & personnalisé\"\nL.DontShowPTNoID\t\t\t\t\t= \"Bloquer les décomptes de pull envoyés depuis une zone différente de la vôtre (ne bloquera jamais les décomptes BigWigs envoyés sans ID de zone)\"\nL.DontShowPT\t\t\t\t\t\t= \"Ne pas afficher la barre de pull/pause\"\nL.DontShowPTText\t\t\t\t\t= \"Ne pas afficher le texte d'alerte du décompte de pull/pause\"\nL.DontShowPTCountdownText\t\t\t= \"Ne pas afficher le texte du décompte de pull\"\nL.DontPlayPTCountdown\t\t\t\t= \"Ne jouer aucun son de décompte de pull/pause/combat/perso\"\nL.PT_Threshold\t\t\t\t\t\t= \"Pas de son du décompte de pull/pause/combat/perso au delà de : %d\"\n\nL.Area_TimerTracker\t\t\t\t\t= \"Options de TimerTracker\"\nL.PlayTT\t\t\t\t\t\t\t= \"Activer le TimerTracker\"\nL.PlayTTCountdown\t\t\t\t\t= \"Jouer le son du compte à rebours TimerTracker\"\nL.PlayTTCountdownFinished\t\t\t= \"Jouer le son du compte à rebours TimerTracker terminé\"\n\nL.Area_BossBanner\t\t\t\t\t= \"Options de la bannière de boss\"\nL.EnableBB\t\t\t\t\t\t\t= \"Activer la bannière de boss\"\nL.PlayBBLoot\t\t\t\t\t\t= \"Jouer l'animation de la bannière de loot\"\nL.PlayBBSound\t\t\t\t\t\t= \"Jouer le son de la bannière de boss\"\nL.OverrideBBFont\t\t\t\t\t= \"Changer la police de la Bannière de boss (doit être activé pour changer la police)\"\n\n-- Panel: Reduce Information\nL.Panel_ReducedInformation\t\t\t= \"Réduction d'informations\"\n\nL.Area_SpamFilter_Anounces\t\t\t= \"Filtres/Désescalade d'annonces\"\nL.SpamBlockNoShowTgtAnnounce\t\t= \"Ne pas afficher de texte ou jouer de son pour les annonces générales CIBLE qui ne vous affectent pas, sauf si l'avertissement spécifique ignore ce filtre (la désactivation globale dans les fonctionnalités DBM l'emporte sur celle-ci)\"\nL.SpamBlockNoTrivialSpecWarnSound\t= \"Ne pas jouer de son d'annonce spéciale ni faire clignoter l'écran pour le contenu bas-niveau (joue le son d'annonce par défaut sélectionné par l'utilisateur à la place)\"\n\nL.Area_SpamFilter\t\t\t\t\t= \"Options des filtres de spam\"\nL.DontShowFarWarnings\t\t\t\t= \"Ne pas afficher les annonces/décomptes pour les événements lointains\"\nL.StripServerName\t\t\t\t\t= \"Ne pas afficher le royaume sur les alertes et les décomptes\"\nL.FilterVoidFormSay\t\t\t\t\t= \"Ne pas envoyer de message d'icône ou de décompte sous $spell:47241 (les messages normaux seront toujours envoyés)\"\n\nL.Area_SpecFilter\t\t\t\t\t= \"Options de filtre par rôle\"\nL.FilterTankSpec\t\t\t\t\t= \"Filtrer les alertes réservées aux tanks si vous n'êtes pas en spé tank. (Note: Désactivation non recommandée car les alertes de taunt sont activées en permanence par défaut.)\"\nL.FilterInterruptsHeader\t\t\t= \"Filtrer les alertes de sorts interruptibles en fonction des préférences paramétrées.\"\nL.SWFNever\t\t\t\t\t\t\t= \"Jamais\"\nL.FilterInterrupts\t\t\t\t\t= \"Si le lanceur n'est pas la cible/focus actuelle (Toujours).\"\nL.FilterInterrupts2\t\t\t\t\t= \"Si le lanceur n'est pas la cible/focus actuelle (Toujours) ou interruption en recharge (Boss seulement)\"\nL.FilterInterrupts3\t\t\t\t\t= \"Si le lanceur n'est pas la cible/focus actuelle (Toujours) ou interruption en recharge (Boss &amp; Trash)\"\nL.FilterInterruptNoteName\t\t\t= \"Filtrer les alertes des sorts interruptibles (avec compte) si l'alerte ne contient pas votre nom dans la note personnalisée\"\nL.FilterDispels\t\t\t\t\t\t= \"Filtrer les alertes de dissipations si votre sort de dissipation est en recharge\"\nL.FilterTrashWarnings\t\t\t\t= \"Filtrer toutes les annonces liées aux trash dans les donjons normaux, héroïques et triviaux (dépassés)\"\n\nL.Area_BInterruptFilter\t\t\t\t= \"Options de filtre d'interruption de boss\"\nL.FilterTargetFocus\t\t\t\t\t= \"Filtrer si le lanceur n'est pas la cible/le focus actuel\"\nL.FilterInterruptCooldown\t\t\t= \"Filtrer si le sort d'interruption est en temps de recharge\"\nL.FilterInterruptHealer\t\t\t\t= \"Filtrer si vous êtes dans une spécialisation de soigneur\"\nL.FilterInterruptNoteName\t\t\t= \"Filtrer si l'alerte a un compte mais que votre nom n'est pas dans la note personnalisée\"--Only used on bosses, trash mods don't assign counts\nL.Area_BInterruptFilterFooter\t\t= \"Si aucun filtre n'est sélectionné, toutes les interruptions sont affichées (Peut être envahissant)\\nCertains modules peuvent ignorer entièrement ces filtres si le sort est d'une importance critique\"\nL.Area_TInterruptFilter\t\t\t\t= \"Options de filtre d'interruption des monstres\"--Reuses above 3 strings\n\n-- Panel: DBM Handholding\nL.Panel_HandFilter\t\t\t\t\t= \"Réduire l'assistance DBM\"\nL.Area_SpamFilter_SpecRoleFilters\t= \"Filtres de type d'annonce spéciale (contrôle le niveau d'assistance de DBM)\"\nL.SpamSpecInformationalOnly\t\t\t= \"Supprime toutes les alertes spéciales écrites/orales indiquant une direction (Recharge de l'IU nécessaire). Les alertes seront toujours présentes (son/texte) mais n'indiqueront plus de directions.\"\nL.SpamSpecRoleDispel\t\t\t\t= \"Filtrer entièrement les alertes 'dissipation' (Pas de texte ni de son)\"\nL.SpamSpecRoleInterrupt\t\t\t\t= \"Filtrer les alertes 'interruption' (Pas de texte ni de son)\"\nL.SpamSpecRoleDefensive\t\t\t\t= \"Filtrer les alertes 'défensive' (Pas de texte ni de son)\"\nL.SpamSpecRoleTaunt\t\t\t\t\t= \"Filtrer les alertes 'taunt' (Pas de texte ni de son)\"\nL.SpamSpecRoleSoak\t\t\t\t\t= \"Filtrer les alertes 'soak' (Pas de texte ni de son)\"\nL.SpamSpecRoleStack\t\t\t\t\t= \"Filtrer les alertes 'stack élevé' (Pas de texte ni de son)\"\nL.SpamSpecRoleSwitch\t\t\t\t= \"Filtrer les alertes 'changement de cible' &amp; 'adds' (Pas de texte ni de son)\"\nL.SpamSpecRoleGTFO\t\t\t\t\t= \"Filtrer les alertes 'sauvez-vous' (Pas de texte ni de son)\"\n\n-- Panel: Blizzard Features\nL.Panel_HideBlizzard\t\t\t\t= \"Fonctionnalités Blizzard\"\nL.Area_HideBlizzard\t\t\t\t\t= \"Options de désactivation et de masquage Blizzard\"\nL.HideBossEmoteFrame\t\t\t\t= \"Masquer les emotes des boss pendant les combats de boss\"\nL.SpamBlockRaidWarning\t\t\t\t= \"Filtrer les annonces venant d'autres boss mods\"\nL.SpamBlockBossWhispers\t\t\t\t= \"Filtrer les alertes DBM chuchotement pendant les combats\"\nL.HideWatchFrame\t\t\t\t\t= \"Masquer le cadre de suivi (objectifs) pendant les combats de boss si aucun haut fait n'est suivi et si ce n'est pas en Mythique+\"\nL.HideGarrisonUpdates\t\t\t\t= \"Désactiver les notifications de fief pendant les combats de boss\"\nL.HideGuildChallengeUpdates\t\t\t= \"Désactiver les notifications de défis de guilde pendant les combats de boss\"\nL.HideQuestTooltips\t\t\t\t\t= \"Désactiver les objectifs de quête dans les info-bulles pendant les combats de boss\"\nL.HideTooltips\t\t\t\t\t\t= \"Masquer complètement les info-bulles pendant les combats de boss\"\nL.DisableSFX\t\t\t\t\t\t= \"Désactiver le canal audio des effets sonores pendant les combats de boss (Note: cette option rétabliera le canal audio Sons à la fin des combats même si ce dernier était désactivé avant le combat)\"\nL.DisableCinematics\t\t\t\t\t= \"Passer les cinématiques en jeu\"\nL.ReportRecount\t\t\t\t\t\t= \"Envoyer un rapport de Recount après la fin de la rencontre avec le boss (assistant raid requis)\"\nL.ReportSkada\t\t\t\t\t\t= \"Envoyer le rapport SkadaRevisited après la fin de la rencontre avec le boss (assistant raid requis)\"\nL.PerCharacterSettings\t\t\t\t= \"Utiliser des profils pour chaque personnage\"\nL.OnlyFight\t\t\t\t\t\t\t= \"Seulement pendant le combat, après que chaque cinématique ait été jouée une fois\"\nL.AfterFirst\t\t\t\t\t\t= \"En instance, après que chaque cinématique ait été jouée une fois\"\nL.CombatOnly\t\t\t\t\t\t= \"Désactiver en combat (tous)\"\nL.DisableWoE\t\t\t\t\t    = \"Ne jamais passer\"\nL.SkipWoE\t\t\t\t\t\t\t= \"Toujours passer\"\nL.RaidCombat\t\t\t\t\t\t= \"Désactiver en combat (boss seulement)\"\n\n-- Panel: Raid Leader Controls\nL.Tab_RLControls\t\t\t\t\t= \"Contrôles chef de Raid\"\nL.Area_FeatureOverrides\t\t\t\t= \"Options de remplacement des fonctionnalités\"\nL.OverrideIcons \t\t\t\t\t= \"Désactiver le marquage des icônes pour tous les membres du raid, y compris vous-même (Utilisez la substitution au lieu de la désactivation si vous souhaitez que DBM fasse le marquage selon vos conditions)\"\nL.OverrideSay\t\t\t\t\t\t= \"Désactiver les bulles de dialogues (/s, /y) pour tous les membres du raid, y compris vous-même\"\nL.DisableStatusWhisperShort\t\t\t= \"Désactiver les chuchotements d’état/réponse pour tout le groupe\"\nL.DisableGuildStatusShort\t\t\t= \"Désactiver la synchronisation des messages de progression vers la guilde pour tout le groupe\"\n--L.DisabledForDropdown\t\t\t\t= \"Choose boss mod(s) disable is sent to\"--NYI\n--L.DiabledForBoth\t\t\t\t\t= \"Disable above features for both DBM and BW\"--NYI\n--L.DiabledForDBM\t\t\t\t\t= \"Disable above features for only DBM users\"--NYI\n--L.DiabledForBW\t\t\t\t\t= \"Disable above features for only BW users\"--NYI\n\nL.Area_ConfigOverrides\t\t\t\t= \"Options de remplacement de configuration (Pas encore implémenté, à venir)\"--NYI\nL.OverrideBossAnnounceOptions\t\t= \"Appliquer ma configuration d'annonces de boss à tous les utilisateurs de DBM\"--NYI\nL.OverrideBossTimerOptions\t\t\t= \"Appliquer ma configuration de minuteurs de boss à tous les utilisateurs de DBM\"--NYI\nL.OverrideBossIconOptions\t\t\t= \"Appliquer ma configuration d'icônes de boss à tous les utilisateurs de DBM (si le paramètre d'icône est désactivé dans les options ci-dessus, cette option est ignorée)\"--NYI\nL.OverrideBossSayOptions\t\t\t= \"Appliquer ma configuration de bulles de discussion de boss à tous les utilisateurs de DBM (si le paramètre de bulle de discussion est désactivé dans les options ci-dessus, cette option est ignorée)\"--NYI\nL.ConfigAreaFooter\t\t\t\t\t= \"Les options de cette zone ne remplacent que temporairement la configuration des utilisateurs lors de l'engagement sans modifier leur configuration enregistrée.\"\nL.ConfigAreaFooter2\t\t\t\t\t= \"Il est recommandé de prendre en compte tous les rôles et de ne pas exclure les minuteurs/alertes dont un tank, etc. pourrait avoir besoin\"\n\nL.Area_receivingOptions\t\t\t\t= \"Options de réception (Pas encore implémenté, à venir)\"--NYI\nL.NoAnnounceOverride\t\t\t\t= \"Ne pas accepter les remplacements d'annonces des chefs de raid.\"--NYI\nL.NoTimerOverridee\t\t\t\t\t= \"Ne pas accepter les remplacements de minuteurs des chefs de raid.\"--NYI\nL.ReplaceMyConfigOnOverride\t\t\t= \"AVERTISSEMENT : Remplacer de manière permanente mes configurations de module par celles du chef de raid, lors du remplacement\"--NYI\nL.ReceivingFooter\t\t\t\t\t= \"Les remplacements d'options d'icônes et de bulles de discussion ne peuvent pas être désactivés car ces paramètres affectent les autres joueurs autour de vous\"--NYI\nL.ReceivingFooter2\t\t\t\t\t= \"Si vous activez ces options, c'est entre vous et le RL si votre configuration entre en conflit avec leur intention\"--NYI\nL.ReceivingFooter3\t\t\t\t\t= \"Si vous activez 'remplacer ma configuration de module', vos paramètres d'origine seront perdus lors du remplacement\"--NYI\n\n\nL.TabFooter\t\t\t\t\t\t\t= \"Toutes les options de ce panneau ne fonctionnent que si vous êtes chef de groupe dans un groupe hors donjon/LFR\"\n\n-- Panel: Privacy\nL.Tab_Privacy\t\t\t\t\t\t= \"Contrôles de confidentialité\"\nL.Area_WhisperMessages\t\t\t\t= \"Options des chuchotements\"\nL.AutoRespond\t\t\t\t\t\t= \"Répondre automatiquement aux chuchotements pendant les combats\"\nL.WhisperStats\t\t\t\t\t\t= \"Inclure les victoires/défaites dans les réponses\"\nL.DisableStatusWhisper\t\t\t\t= \"Désactiver les chuchotements de statut pour le groupe entier (requiert Chef de groupe). S'applique seulement aux raids normaux/héroïques/mythiques et aux donjons mythiques+.\"\nL.Area_SyncMessages\t\t\t\t\t= \"Options de synchronisation des addons\"\nL.DisableGuildStatus\t\t\t\t= \"Empêcher les messages de progression de se synchroniser avec la guilde, si vous êtes chef de groupe, cela affectera tous les utilisateurs de DBM dans votre groupe\"\nL.EnableWBSharing\t\t\t\t\t= \"Partager quand vous engagez/battez un world boss avec votre guilde et vos amis battle.net qui sont sur le même royaume\"\n\n-- Tab: Frames & Integrations\nL.TabCategory_Frames\t\t\t\t= \"Cadres & Intégrations\"\nL.Area_NamelateInfo\t\t\t\t\t= \"Infos sur les auras de barres de vie DBM\"\n-- Panel: InfoFrame\nL.Panel_InfoFrame\t\t\t\t\t= \"Cadre d'infos\"\n\n-- Panel: Range\nL.Panel_Range\t\t\t\t\t\t= \"Cadre de portée\"\n\n-- Panel: Nameplate\nL.Panel_Nameplates\t\t\t\t\t= \"Barres de vie\"\nL.UseNameplateHandoff\t\t\t\t= \"Transférer les demandes d'aura de barre de vie aux addons de barres de vie pris en charge (KuiNameplates, Threat Plates, Plater) au lieu de les gérer en interne. C'est l'option recommandée car elle permet des fonctionnalités et une configuration plus avancées via l'addon de barre de vie\"\nL.Area_NPStyle\t\t\t\t\t\t= \"Style (Note : Ne configure le style que lorsque DBM gère les barres de vie.)\"\nL.NPAuraSize\t\t\t\t\t\t= \"Taille en pixels de l'aura (carré) : %d\"\n\n-- Misc\nL.Area_General\t\t\t\t\t\t= \"Général\"\nL.Area_Position\t\t\t\t\t\t= \"Position\"\nL.Area_Style\t\t\t\t\t\t= \"Style\"\n\nL.FontSize\t\t\t\t\t\t\t= \"Taille de la police: %d\"\nL.FontStyle\t\t\t\t\t\t\t= \"Contours de la police\"\nL.FontColor\t\t\t\t\t\t\t= \"Couleur texte\"\nL.FontShadow\t\t\t\t\t\t= \"Ombre\"\nL.FontType\t\t\t\t\t\t\t= \"Choisir une police\"\n\nL.FontHeight\t= 16\n\n-- Retail Globals\nL.LARGE\t= \"Grand\"\nL.SMALL\t= \"Petit\"\nL.PLAYER_DIFFICULTY6 = \"Mythique\" -- ID: 24525\nL.PLAYER_DIFFICULTY_TIMEWALKER = \"Marcheurs du temps\" -- ID: 25846"
  },
  {
    "path": "DBM-GUI/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nif not DBM_GUI_L then DBM_GUI_L = {} end\n\nlocal L = DBM_GUI_L\n\nL.TranslationByPrefix\t\t= \"백포트 \"\nL.TranslationBy\t\t\t= \"Barsoom, Bunny67, Zidras\"\nL.Website\t\t\t\t\t= \"디스코드 채널 |cFF73C2FBhttps://discord.gg/CyVWDWS|r를 방문해 보세요.\"\nL.WebsiteButton\t\t\t\t= \"웹사이트\"\n\nL.OTabBosses\t= \"보스\"--Deprecated and will be deleted once tabs no longer use this\nL.OTabRaids\t\t= \"레이드\"--Raids & PVP\nL.OTabDungeons\t= \"파티/1인\"--1-5 person content (Dungeons, MoP Scenarios, World Events, Brawlers, Proving Grounds, Visions, Torghast, etc)\nL.OTabPlugins\t= \"핵심 플러그인\"\nL.OTabAbout\t\t= \"소개\"\n\nL.TabCategory_OTHER\t\t\t= \"기타 모드\"\n\nL.BossModLoaded\t\t\t= \"%s 통계\"\nL.BossModLoad_now\t\t\t= [[보스 모드가 로딩되지 않았습니다.\n해당 인스턴스에 진입하면 로딩됩니다.\n아래 버튼을 클릭해서 모드를 직접 로딩할 수도 있습니다.]]\n\nL.PosX\t\t\t\t\t\t= \"위치 X\"\nL.PosY\t\t\t\t\t\t= \"위치 Y\"\n\nL.MoveMe\t\t\t\t\t= \"위치 이동\"\nL.Button_OK\t\t\t\t\t= \"확인\"\nL.Button_Cancel\t\t\t\t= \"취소\"\nL.Button_LoadMod\t\t\t= \"애드온 로드\"\nL.Mod_Enabled\t\t\t\t= \"보스 모드 활성화\"\nL.Mod_Reset\t\t\t\t\t= \"설정 기본값 로드\"\nL.Reset\t\t\t\t\t\t= \"초기화\"\nL.Import\t\t\t\t\t= \"가져오기\"\n\nL.Enable\t\t\t\t\t= \"활성화\"\nL.Disable\t\t\t\t\t= \"비활성화\"\n\nL.NoSound\t\t\t\t\t= \"효과음 없음\"\n\nL.IconsInUse\t\t\t\t= \"사용되는 공격대 징표:\"\n\n-- Tab: Boss Statistics\nL.BossStatistics\t\t\t= \"보스 통계\"\nL.Statistic_Kills\t\t\t= \"승리:\"\nL.Statistic_Wipes\t\t\t= \"전멸:\"\nL.Statistic_Incompletes\t\t= \"미완료:\"\nL.Statistic_BestKill\t\t= \"최고 승리 기록:\"\nL.Statistic_BestRank\t\t= \"최고 등급:\"--Maybe not get used, not sure yet, localize anyways\n\n-- Tab: General Options\nL.TabCategory_Options\t\t= \"일반 설정\"\nL.Area_BasicSetup\t\t\t= \"DBM 초기 설정 팁\"\nL.Area_ModulesForYou\t\t= \"나에게 맞는 DBM 모듈은 어떤게 있을까?\"\nL.Area_ProfilesSetup\t\t= \"DBM 프로필 사용법 가이드\"\n-- Panel: Core & GUI\nL.Core_GUI\t\t\t\t\t= \"핵심 모드와 GUI\"\nL.General\t\t\t\t\t= \"일반 설정\"\nL.EnableMiniMapIcon\t\t\t= \"미니맵 버튼 표시\"\nL.UseSoundChannel\t\t\t= \"DBM 경고 효과음 재생 채널 선택\"\nL.UseMasterChannel\t\t\t= \"주 음량\"\nL.UseDialogChannel\t\t\t= \"대화\"\nL.UseSFXChannel\t\t\t\t= \"소리 (효과음)\"\nL.Latency_Text\t\t\t\t= \"동기화 신호를 보낼 최대 지연시간 설정: %d\"\n\nL.Button_RangeFrame\t\t\t= \"거리 창 표시/숨기기\"\nL.Button_InfoFrame\t\t\t= \"정보 창 표시/숨기기\"\nL.Button_TestBars\t\t\t= \"테스트 바 시작\"\nL.Button_MoveBars\t\t\t= \"바 이동\"\nL.Button_ResetInfoRange\t\t= \"정보/거리 창 위치 초기화\"\n\nL.ModelOptions\t\t\t\t= \"3D 모델 뷰어 설정\"\nL.EnableModels\t\t\t\t= \"보스 설정에 3D 모델 사용\"\nL.ModelSoundOptions\t\t\t= \"모델 뷰어에서 사용할 효과음 설정\"\nL.ModelSoundShort\t\t\t= \"짧은 효과음\"\nL.ModelSoundLong\t\t\t= \"긴 효과음\"\n\nL.ResizeOptions\t\t\t\t= \"설정 창 크기 설정\"\nL.ResizeInfo\t\t\t\t= \"우측 하단 모서리를 클릭 후 드래그하면 설정 창 크기를 조절할 수 있습니다.\"\nL.Button_ResetWindowSize\t= \"설정 창 크기 초기화\"\nL.Editbox_WindowWidth\t\t= \"설정 창 너비\"\nL.Editbox_WindowHeight\t\t= \"설정 창 높이\"\n\nL.UIGroupingOptions\t\t\t= \"UI 그룹 설정 (이미 로딩이 된 모드는 UI 재시작을 해야 변경됩니다)\"\nL.GroupOptionsBySpell\t\t= \"모드 설정 주문별 그룹화 (지원하는 모드만)\"\nL.GroupOptionsExcludeIcon\t= \"주문별 그룹화에서 '공격대 징표 설정' 제외 (이전처럼 관련 설정은 '공격대 징표' 카테고리에 배치됩니다)\"\nL.AutoExpandSpellGroups\t\t= \"주문별로 그룹화된 설정들 자동으로 펼치기\"\n--L.ShowSpellDescWhenExpanded\t= \"그룹화된 설정이 펼쳐진 상태에서도 주문 설명 계속 표시\"--Might not be used\nL.NoDescription\t\t\t\t= \"설명이 없습니다\"\n\n-- Panel: Extra Features\nL.Panel_ExtraFeatures\t\t= \"기타 기능\"\n\nL.Area_SoundAlerts\t\t\t= \"효과음/점멸 알림 설정\"\nL.LFDEnhance\t\t\t\t= \"역할 확인 및 전장/공격대 찾기가 열릴 때 전투 준비 효과음 재생(주 오디오 또는 대화 채널) 및 작업 표시줄 아이콘 점멸 (참고: 소리 채널이 꺼져있어도 작동하며, 다른 때보다 더 크게 들립니다)\"\nL.WorldBossNearAlert\t\t= \"근처에서 필드 보스 전투가 시작된 경우 전투 준비 효과음 재생 및 작업 표시줄 아이콘 점멸\"\nL.RLReadyCheckSound\t\t\t= \"전투 준비 효과음을 주 오디오나 대화 채널을 통해 재생하고 작업 표시줄 아이콘 점멸\"\nL.AFKHealthWarning\t\t\t= \"자리 비움 상태 도중 체력이 줄면 경고음 재생 및 작업 표시줄 아이콘 점멸\"\nL.AutoReplySound\t\t\t= \"DBM 자동 응답 귓속말을 받을 때 경고음 재생 및 작업 표시줄 아이콘 점멸\"\n--\nL.TimerGeneral\t\t\t\t= \"타이머 설정\"\nL.SKT_Enabled\t\t\t\t= \"가능할 경우 현재 전투의 최고 승리 기록 타이머 표시\"\nL.ShowRespawn\t\t\t\t= \"전멸 후 보스 재생성 타이머 표시\"\nL.ShowQueuePop\t\t\t\t= \"입장 수락 남은 시간 타이머 표시 (공격대 찾기,전장 등)\"\n--\n--Auto Logging: Logging toggles/types\nL.Area_AutoLogging\t\t\t= \"자동 전투 기록 켜기/끄기\"\nL.AutologBosses\t\t\t\t= \"블리자드 전투 로그를 사용해 선택한 콘텐트를 자동으로 기록\"\nL.AdvancedAutologBosses\t\t= \"Transcriptor를 사용해 선택한 콘텐트를 자동으로 기록\"\n--Auto Logging: Global filter Options\nL.Area_AutoLoggingFilters\t= \"자동 기록 필터\"\nL.RecordOnlyBosses\t\t\t= \"일반몹 기록 안함 (보스만 기록합니다. 보스전 시작 물약과 ENCOUNTER_START 이벤트를 기록하고 싶으면 '/dbm pull' 명령어를 사용하세요)\"\nL.DoNotLogLFG\t\t\t\t= \"던전 찾기와 공격대 찾기 기록 안함 (대기열 등록 콘텐트)\"\n--Auto Logging: Recorded Content types\nL.Area_AutoLoggingContent\t= \"자동으로 기록할 콘텐트\"\nL.LogCurrentMythicRaids\t\t= \"현재 확장팩 신화 레이드\"--Retail Only\nL.LogCurrentRaids\t\t\t= \"현재 확장팩 비 신화 레이드 (영웅, 일반 그리고 던전 찾기와 공찾 기록 안함 옵션이 꺼져있을 경우엔 공찾까지)\"\nL.LogTWRaids\t\t\t\t= \"시간여행 또는 크로미의 시간 레이드\"--Retail Only\nL.LogTrivialRaids\t\t\t= \"구 레이드 (이전 확장팩)\"\nL.LogCurrentMPlus\t\t\t= \"현재 확장팩 신화+ 던전\"--Retail Only\nL.LogCurrentMythicZero\t\t= \"현재 확장팩 신화 0단 던전\"--Retail Only\nL.LogTWDungeons\t\t\t\t= \"시간여행 또는 크로미의 시간 레이드\"--Retail Only\nL.LogCurrentHeroic\t\t\t= \"현재 확장팩 영웅 던전 (알림: 던전 찾기를 통해 영던을 돌면서 로그를 기록하고 싶다면 던전 찾기 기록 안함 옵션을 끄세요)\"\nL.LogCurrentNormal\t\t\t= \"현재 확장팩 일반 던전 (알림: 던전 찾기를 통해 영던을 돌면서 로그를 기록하고 싶다면 던전 찾기 기록 안함 옵션을 끄세요)\"\nL.LogTrivialDungeons\t\t= \"구 던전 (이전 확장팩)\"\n--\nL.Area_3rdParty\t\t\t\t= \"써드파티 애드온 설정\"\nL.oRA3AnnounceConsumables\t= \"전투 시작시 oRA3 버프 검사 알림\"\nL.Area_Invite\t\t\t\t= \"초대 설정\"\nL.AutoAcceptFriendInvite\t= \"친구의 파티/공격대 초대 자동 수락\"\nL.AutoAcceptGuildInvite\t\t= \"길드원의 파티/공격대 초대 자동 수락\"\nL.Area_Advanced\t\t\t\t= \"고급 설정\"\nL.FakeBW\t\t\t\t\t= \"DBM 대신 BigWigs 사용자로 위장하기 (BigWigs 사용을 강제하는 공격대에서 유용)\"\nL.AITimer\t\t\t\t\t= \"DBM 내장 인공지능 타이머를 사용하여 처음 하는 전투의 타이머를 자동으로 생성합니다. (베타나 테스트 서버에서 보스 테스트시 유용) 이 옵션은 항상 켜놓는걸 권장합니다.\"\nL.FixCLEUOnCombatStart\t\t= \"전투 시작 할 때 전투 로그 수정\"\n\n-- Panel: Profiles\nL.Panel_Profile\t\t\t\t= \"프로필\"\nL.Area_CreateProfile\t\t= \"DBM Core 프로필 생성\"\nL.EnterProfileName\t\t\t= \"프로필 이름 입력\"\nL.CreateProfile\t\t\t\t= \"기본 설정값으로 새 프로필 생성\"\nL.Area_ApplyProfile\t\t\t= \"DBM Core 설정을 적용할 활성 프로필 설정\"\nL.SelectProfileToApply\t\t= \"적용할 프로필 선택\"\nL.Area_CopyProfile\t\t\t= \"DBM Core 설정 프로필 복사\"\nL.SelectProfileToCopy\t\t= \"복사할 프로필 선택\"\nL.Area_DeleteProfile\t\t= \"DBM Core 설정 프로필 삭제\"\nL.SelectProfileToDelete\t\t= \"삭제할 프로필 선택\"\nL.Area_DualProfile\t\t\t= \"보스 모드 프로필 설정\"\nL.DualProfile\t\t\t\t= \"전문화마다 다른 보스 모드 설정을 사용합니다. (보스 모드 프로필 관리는 로딩된 보스 모드의 통계 화면에서 이루어집니다)\"\n\nL.Area_ModProfile\t\t\t= \"다른 캐릭터/전문화의 설정 복사/삭제\"\nL.ModAllReset\t\t\t\t= \"이 모드의 모든 설정 초기화\"\nL.ModAllStatReset\t\t\t= \"이 모드의 모든 통계 초기화\"\nL.SelectModProfileCopy\t\t= \"전체 설정 복사\"\nL.SelectModProfileCopySound\t= \"음성 설정만 복사\"\nL.SelectModProfileCopyNote\t= \"메모 설정만 복사\"\nL.SelectModProfileCurrent\t= \"현재 보스 모드 프로필\"\nL.SelectModProfileDelete\t= \"모드 설정 삭제\"\n\nL.Area_ImportExportProfile\t= \"프로필 가져오기/내보내기\"\nL.ImportExportInfo\t\t\t= \"가져오기를 하면 현재 프로필 설정에 덮어씌우게 되니 주의하세요.\"\nL.ButtonImportProfile\t\t= \"프로필 가져오기\"\nL.ButtonExportProfile\t\t= \"프로필 내보내기\"\nL.ProfileExportTitle\t\t= \"이것은 문자 형식의 현재 프로필입니다.\"\nL.ProfileExportSubtitle\t= \"CTRL-C를 눌러 구성을 클립보드에 복사합니다.\"\nL.ProfileImportTitle\t\t= \"여기에 문자 형식으로 프로필 붙여넣기.\"\nL.ProfileImportSubtitle\t= \"CTRL-V를 눌러 DBM 구성 텍스트를 붙여넣습니다.\"\n\nL.ImportErrorOn\t\t\t\t= \"프로필 설정에 빠져있는 사용자 지정 효과음: %s\"\nL.ImportVoiceMissing\t\t= \"보이스팩 없음: %s\"\n\n-- Tab: Alerts\nL.TabCategory_Alerts\t\t= \"경고\"\nL.Area_SpecAnnounceConfig\t= \"특수 경고 외형과 효과음 설정 가이드\"\nL.Area_SpecAnnounceNotes\t= \"특수 경고 메모 기능 가이드\"\nL.Area_VoicePackInfo\t\t= \"DBM 음성팩 정보\"\n-- Panel: Raidwarning\nL.Tab_RaidWarning\t\t\t= \"알림\"\nL.RaidWarning_Header\t\t= \"알림 설정\"\nL.RaidWarnColors\t\t\t= \"알림 색상\"\nL.RaidWarnColor_1\t\t\t= \"색상 1\"\nL.RaidWarnColor_2\t\t\t= \"색상 2\"\nL.RaidWarnColor_3\t\t\t= \"색상 3\"\nL.RaidWarnColor_4\t\t\t= \"색상 4\"\nL.InfoRaidWarning\t\t\t= [[레이드 경고 프레임의 위치와 색상을 설정할 수 있습니다.\n본 프레임은 \"플레이어 X가 Y에 걸렸습니다\"와 같은 메시지를 표시하는데 사용됩니다.]]\nL.ColorResetted\t\t\t= \"이 영역의 색상 설정을 초기화 합니다.\"\nL.ShowWarningsInChat\t\t= \"대화창에서 알림 보기\"\nL.ShowFakedRaidWarnings\t\t= \"위험 알림을 공격대 경보 메세지처럼 보여줍니다.\"\nL.WarningIconLeft\t\t\t= \"왼쪽에 아이콘 표시\"\nL.WarningIconRight\t\t\t= \"오른쪽에 아이콘 표시\"\nL.WarningIconChat\t\t\t= \"대화창에 아이콘 표시\"\nL.WarningAlphabetical\t\t= \"이름 순으로 정렬\"\nL.Warn_Duration\t\t\t\t= \"알림 지속시간: %0.1f초\"\nL.None\t\t\t\t\t\t= \"없음\"\nL.Random\t\t\t\t\t= \"무작위\"\nL.Outline\t\t\t\t\t= \"외곽선\"\nL.ThickOutline\t\t\t\t= \"두꺼운 외곽선\"\nL.MonochromeOutline\t\t\t= \"단색 외곽선\"\nL.MonochromeThickOutline\t= \"단색 두꺼운 외곽선\"\nL.RaidWarnSound\t\t\t\t= \"레이드 알림에 효과음 재생\"\n\n-- Panel: Spec Warn Frame\nL.Panel_SpecWarnFrame\t\t= \"특수 알림\"\nL.Area_SpecWarn\t\t\t\t= \"특수 알림 설정\"\nL.SpecWarn_ClassColor\t\t= \"특수 알림에 직업 색상 사용\"\nL.ShowSWarningsInChat\t\t= \"대화창에 특수 알림 보기\"\nL.SWarnNameInNote\t\t\t= \"특수 알림 메모에 내 이름이 있으면 5번 설정 사용\"\nL.SpecialWarningIcon\t\t= \"특수 알림에 아이콘 사용\"\nL.ShortTextSpellname\t\t= \"주문 이름을 짧게 줄여서 사용 (가능할 때만)\"\nL.SpecWarn_FlashFrameRepeat\t= \"점멸 %d회 반복\"\nL.SpecWarn_Flash\t\t\t= \"화면 점멸\"\nL.SpecWarn_Vibrate\t\t\t= \"컨트롤러 진동\"\nL.SpecWarn_FlashRepeat\t\t= \"점멸 효과 반복\"\nL.SpecWarn_FlashColor\t\t= \"점멸 색상 %d\"\nL.SpecWarn_FlashDur\t\t\t= \"점멸 지속시간: %0.1f\"\nL.SpecWarn_FlashAlpha\t\t= \"점멸 투명도: %0.1f\"\nL.SpecWarn_DemoButton\t\t= \"예제 보기\"\nL.SpecWarn_MoveMe\t\t\t= \"위치 설정\"\nL.SpecWarn_ResetMe\t\t\t= \"기본값으로 초기화\"\nL.SpecialWarnSoundOption\t= \"기본 효과음 설정\"\nL.SpecialWarnHeader1\t\t= \"유형 1: 당신이 뭔가 걸렸거나 취해야 할 행동에 대한 보통 수준 알림 설정 세트\"\nL.SpecialWarnHeader2\t\t= \"유형 2: 공격대 전체에 해당되는 보통 수준 알림 설정 세트\"\nL.SpecialWarnHeader3\t\t= \"유형 3: 최우선 알림 설정 세트\"\nL.SpecialWarnHeader4\t\t= \"유형 4: 최우선 도망 특수 알림 설정 세트\"\nL.SpecialWarnHeader5\t\t= \"유형 5: 메모에 당신의 이름이 있을 때 알림 설정 세트\"\n\n-- Panel: Generalwarnings\nL.Tab_GeneralMessages\t\t= \"대화창 메시지\"\nL.CoreMessages\t\t\t\t= \"기본 메시지 설정\"\nL.ShowPizzaMessage\t\t\t= \"대화창에 전송받은 타이머 표시\"\nL.ShowAllVersions\t\t\t= \"버전 검사시 대화창에 모든 파티/공격대원의 보스 모드 버전을 표시합니다. (설정을 꺼도 구버전/신버전으로 간략하게 표시됨)\"\nL.ShowReminders\t\t\t\t= \"하위 모드 없음, 하위 모드 비활성화, 하위 모드 핫픽스, 하위 모드 구버전에 알림 메시지를 표시합니다. 조용함 모드에서도 활성화됩니다\"\n\nL.CombatMessages\t\t\t= \"전투 메시지 설정\"\nL.ShowEngageMessage\t\t= \"대화창에 전투 시작 메시지 표시\"\nL.ShowDefeatMessage\t\t= \"대화창에 처치/전멸 메시지 표시\"\nL.ShowGuildMessages\t\t= \"대화창에 길드 레이드 전투 시작/보스 처치/전멸 메시지 표시\"\nL.ShowGuildMessagesPlus\t\t= \"길드팟 신화+ 전투 시작/보스 처치/전멸 메시지도 표시 (길드 레이드 옵션 체크 필요)\"\n\nL.Area_ChatAlerts\t\t\t= \"기타 알림 설정\"\nL.RoleSpecAlert\t\t\t\t= \"공격대에 들어왔을 때 현재 전문화와 설정된 전리품 전문화가 맞지 않으면 알림 메시지 표시\"\nL.CheckGear\t\t\t\t\t= \"풀링 타이머가 나오면 착용 장비 알림 메시지 표시 (착용 아이템 레벨이 소지한 아이템 레벨보다 40 이상 낮거나 주무기가 없을 경우)\"\nL.WorldBossAlert\t\t\t= \"현재 서버에서 길드원이나 친구가 필드 보스 전투를 시작하면 알림 메시지 표시 (전송자가 연합 서버에 있다면 부정확합니다)\"\n\nL.AutoRespond\t\t\t\t= \"전투중 귓속말 자동 응답\"\nL.WhisperStats\t\t\t\t= \"귓속말 응답에 처치/전멸 통계 포함\"\nL.DisableStatusWhisper\t\t= \"전체 파티/공격대의 귓속말 응답을 끕니다. (파티/공대장 권한 필요) 일반/영웅/신화 레이드 및 신화+ 던전에만 적용됩니다\"\nL.DisableGuildStatus\t\t= \"길드에 진행 상황 알림 메시지를 전송하지 않습니다. (파티/공대장 권한 필요)\"\n\nL.Area_BugAlerts\t\t\t= \"버그 제보 알림 설정\"\nL.BadTimerAlert\t\t\t\t= \"DBM이 최소 1초 이상 맞지 않는 불량 타이머를 감지했을 때 대화창에 메시지 표시\"\nL.BadIDAlert\t\t\t\t= \"DBM에 쓰이는 주문이나 도감 ID가 잘못됐을 때 대화창에 메시지 표시\"\n\n-- Panel: Spoken Alerts Frame\nL.Panel_SpokenAlerts\t\t= \"음성 경고\"\nL.Area_VoiceSelection\t\t= \"음성 선택\"\nL.CountdownVoice\t\t\t= \"1순위 초읽기 음성 설정\"\nL.CountdownVoice2\t\t\t= \"2순위 초읽기 음성 설정\"\nL.CountdownVoice3\t\t\t= \"3순위 초읽기 음성 설정\"\nL.PullVoice\t\t\t\t\t= \"풀링 타이머 음성 설정\"\nL.VoicePackChoice\t\t\t= \"음성 경고에 쓸 음성팩 설정\"\nL.Area_CountdownOptions\t\t= \"초읽기 설정\"\nL.Area_VoicePackReplace\t\t= \"기본 효과음 음성팩 대체 설정 (음성팩이 대체하는 경고의 기본 효과음이 재생되지 않습니다)\"\nL.SWFNever\t\t\t\t\t= \"하지 않음\"\nL.VPReplaceNote\t\t\t\t= \"알림: 음성팩은 절대 경고음을 변경하거나 삭제하지 않습니다.\\n음성팩이 대체하는 효과음만 재생되지 않을 뿐입니다.\"\nL.ReplacesAnnounce\t\t\t= \"알림 효과음 대체 (알림: 페이즈 변경과 쫄 등장 이외에는 음성팩에서 사용되는 효과음이 극히 적습니다)\"\nL.ReplacesSA1\t\t\t\t= \"특수 알림 1 효과음 대체 (나에 대한 알림 'pvpflag' 효과음, 바닥 피하기는 제외)\"\nL.ReplacesSA2\t\t\t\t= \"특수 알림 2 효과음 대체 (공대 전원 알림 'beware' 효과음)\"\nL.ReplacesSA3\t\t\t\t= \"특수 알림 3 효과음 대체 (우선 순위 높은 알림 'airhorn' 효과음)\"\nL.ReplacesSA4\t\t\t\t= \"특수 알림 4 효과음 대체 (도망 알림 최우선)\"\nL.ReplacesGTFO\t\t\t\t= \"바닥 피하기 특수 알림 효과음 대체\"\nL.ReplacesCustom\t\t\t= \"특수 알림 사용자 정의 (알림별로 설정된) 효과음 대체 (권장하지 않음)\"\nL.Area_VoicePackAdvOptions\t= \"음성팩 고급 설정\"\nL.SpecWarn_AlwaysVoice\t\t= \"모든 음성 경고 재생 (특수 알림을 꺼놔도 재생됩니다. 일부 특수한 상황에 처한 공대장에게 유용하며 그 외에는 권장하지 않습니다)\"\nL.VPDontMuteSounds\t\t\t= \"음성팩 사용시 DBM 경고음을 끄지 않음 (두가지 경고음 모두 듣고싶을때만 사용)\"\nL.Area_VPLearnMore\t\t\t= \"음성팩에 대한 정보 및 관련 설정 사용법 알아보기\"\n--TODO, maybe add URLS right to GUI panel on where to acquire 3rd party voice packs?\nL.Area_BrowseOtherVP\t\t= \"Curse에 올라와있는 다른 음성팩 보기\"\nL.Area_BrowseOtherCT\t\t= \"Curse에 올라와있는 카운트다운 팩 보기\"\n\n-- Panel: Event Sounds\nL.Panel_EventSounds\t\t\t= \"이벤트 효과음\"\nL.Area_SoundSelection\t\t= \"효과음 선택 (마우스 휠로 스크롤)\"\nL.EventVictorySound\t\t\t= \"보스를 잡았을 때 재생할 효과음 설정\"\nL.EventWipeSound\t\t\t= \"전멸했을 때 재생할 효과음 설정\"\nL.EventEngagePT\t\t\t\t= \"풀링 타이머 시작시 재생할 효과음 설정\"\nL.EventEngageSound\t\t\t= \"보스 전투 시작시 재생할 효과음 설정\"\nL.EventDungeonMusic\t\t\t= \"던전/레이드에서 재생할 배경음 설정\"\nL.EventEngageMusic\t\t\t= \"보스 전투 도중 재생할 배경음 설정\"\nL.Area_EventSoundsExtras\t= \"이벤트 효과음 설정\"\nL.EventMusicCombined\t\t= \"던전과 보스 전투 배경음에 모든 음악 사용 (변경사항을 적용하려면 UI 리로드 필요)\"\nL.Area_EventSoundsFilters\t= \"이벤트 효과음 필터 적용 조건\"\nL.EventFilterDungMythicMusic= \"신화/신화+ 난이도에선 던전 배경음을 재생하지 않음\"\nL.EventFilterMythicMusic\t= \"신화/신화+ 난이도에선 보스 전투 배경음을 재생하지 않음\"\n\n-- Tab: HealthFrame\nL.Panel_HPFrame\t\t\t\t= \"보스 체력 프레임\"\nL.Area_HPFrame\t\t\t\t= \"체력 프레임 설정\"\nL.HP_Enabled\t\t\t\t= \"해당 모드에서 끈 상태라도 항상 체력 프레임 보기(강제)\"\nL.HP_GrowUpwards\t\t\t= \"보스 체력 프레임을 위로 쌓기\"\nL.HP_ShowDemo\t\t\t\t= \"체력 프레임 보기\"\nL.BarWidth\t\t\t\t\t= \"바 길이: %d\"\n\n-- Tab: Timers\nL.TabCategory_Timers\t\t= \"타이머\"\nL.Area_ColorBytype\t\t\t= \"종류별 바 색상 가이드\"\n-- Panel: Color by Type\nL.Panel_ColorByType\t\t\t= \"종류별 색상\"\nL.AreaTitle_BarColors\t\t= \"타이머 종류별 바 색상\"\nL.BarTexture\t\t\t\t= \"바 텍스쳐\"\nL.BarStyle\t\t\t\t\t= \"바 작동 방식\"\nL.BarDBM\t\t\t\t\t= \"Classic (처음 생긴 바가 확대 표시될 위치로 스르륵 이동)\"\nL.BarSimple\t\t\t\t\t= \"Simple (처음 바는 사라지고 큰 바가 새로 생성)\"\nL.BarStartColor\t\t\t\t= \"시작 색상\"\nL.BarEndColor\t\t\t\t= \"종료 색상\"\nL.Bar_Height\t\t\t\t= \"바 높이: %d\"\nL.Slider_BarOffSetX\t\t= \"바 정렬: %d\"\nL.Slider_BarOffSetY\t\t= \"바 간격: %d\"\nL.Slider_BarWidth\t\t\t= \"바 너비: %d\"\nL.Slider_BarScale\t\t\t= \"바 크기: %0.2f\"\nL.BarSaturation\t\t\t\t= \"작은 바 채도 (커다란 바 사용시 비활성): %0.2f\"\n\n--Types\nL.BarStartColorAdd\t\t\t= \"시작 색상\\n(쫄)\"\nL.BarEndColorAdd\t\t\t= \"종료 색상\\n(쫄)\"\nL.BarStartColorAOE\t\t\t= \"시작 색상\\n(광역 피해)\"\nL.BarEndColorAOE\t\t\t= \"종료 색상\\n(광역 피해)\"\nL.BarStartColorDebuff\t\t= \"시작 색상\\n(대상)\"\nL.BarEndColorDebuff\t\t\t= \"종료 색상\\n(대상)\"\nL.BarStartColorInterrupt\t= \"시작 색상\\n(차단)\"\nL.BarEndColorInterrupt\t\t= \"종료 색상\\n(차단)\"\nL.BarStartColorRole\t\t\t= \"시작 색상\\n(역할)\"\nL.BarEndColorRole\t\t\t= \"종료 색상\\n(역할)\"\nL.BarStartColorPhase\t\t= \"시작 색상\\n(단계)\"\nL.BarEndColorPhase\t\t\t= \"종료 색상\\n(단계)\"\nL.BarStartColorUI\t\t\t= \"시작 색상\\n(사용자)\"\nL.BarEndColorUI\t\t\t\t= \"종료 색상\\n(사용자)\"\n--Type 7 options\nL.Bar7Header\t\t\t\t= \"사용자 바 설정\"\nL.Bar7ForceLarge\t\t\t= \"항상 커다란 바 사용\"\nL.Bar7CustomInline\t\t\t= \"바 안쪽에 사용자 지정 '!' 아이콘 사용\"\n--Dropdown Options\nL.CBTGeneric\t\t\t\t= \"일반\"\nL.CBTAdd\t\t\t\t\t= \"쫄 등장\"\nL.CBTAOE\t\t\t\t\t= \"광역데미지\"\nL.CBTTargeted\t\t\t\t= \"당신이 대상\"\nL.CBTInterrupt\t\t\t\t= \"차단\"\nL.CBTRole\t\t\t\t\t= \"특정 역할용\"\nL.CBTPhase\t\t\t\t\t= \"페이즈 전환\"\nL.CBTImportant\t\t\t\t= \"중요 (사용자)\"\nL.CVoiceOne\t\t\t\t\t= \"초읽기 음성 1\"\nL.CVoiceTwo\t\t\t\t\t= \"초읽기 음성 2\"\nL.CVoiceThree\t\t\t\t= \"초읽기 음성 3\"\n\n-- Panel: Timers\nL.Panel_Appearance\t\t\t= \"바 외형\"\nL.Panel_Behavior\t\t\t= \"바 작동 방식\"\nL.AreaTitle_BarSetup\t\t= \"바 외형 설정\"\nL.AreaTitle_Behavior\t\t= \"바 작동 방식 설정\"\nL.AreaTitle_BarSetupSmall\t= \"작은 바 설정\"\nL.AreaTitle_BarSetupHuge\t= \"커다란 바 설정\"\nL.AreaTitle_BarSetupVariance\t\t= \"가변적 바 설정\"\nL.EnableHugeBar\t\t\t= \"커다란 바 사용 (일명 바 2)\"\nL.EnableVarianceBar \t\t\t\t= \"가변적 바 사용\"\nL.VarianceTransparency\t\t\t\t= \"바 투명도: %0.1f\"\nL.VarianceTimerTextBehavior\t\t\t= \"가변적 타이머 텍스트 작동 방식 설정\"\nL.ZeroatWindowEnds\t\t\t\t\t= \"타이머 마지막 지점을 0으로 설정\"\nL.ZeroatWindowStartPause\t\t\t= \"타이머 시작 지점을 0으로 하고 0에서 정지\"\nL.ZeroatWindowStartRestart\t\t\t= \"타이머 시작 지점을 0으로 하고 0에서 재시작\"\nL.ZeroatWindowStartNeg\t\t\t\t= \"타이머 시작 지점을 0으로 하고 0에서 음수로 진행\"--Default\nL.BarIconLeft\t\t\t\t= \"왼쪽 아이콘\"\nL.BarIconRight\t\t\t\t= \"오른쪽 아이콘\"\nL.ExpandUpwards\t\t\t\t= \"위로 쌓기\"\nL.FillUpBars\t\t\t\t= \"채워나가기\"\nL.ClickThrough\t\t\t\t= \"마우스 클릭 불가\"\nL.Bar_Decimal\t\t\t\t= \"남은시간 소수점 표시: %d초 이하\"\nL.Bar_Alpha\t\t\t\t\t= \"투명도: %0.1f\"\nL.Bar_EnlargeTime\t\t\t= \"다음 시간보다 적으면 바 확대: %d초\"\nL.BarSpark\t\t\t\t\t= \"바 끝 강조\"\nL.BarFlash\t\t\t\t\t= \"만료 전에 바 점멸\"\nL.BarSort\t\t\t\t\t= \"남은 시간 기준으로 정렬\"\nL.BarColorByType\t\t\t= \"종류별로 색상 변경\"\nL.Highest\t\t\t\t\t= \"가장 높은 순\"\nL.Lowest\t\t\t\t\t= \"가장 낮은 순\"\nL.NoBarFade\t\t\t\t\t= \"시작/종료시 색상 변화를 그라데이션 효과 대신 작은/큰 바 색을 사용\"\nL.BarInlineIcons\t\t\t= \"바 안쪽에 아이콘 사용\"\nL.ShortTimerText\t\t\t= \"짧은 타이머 텍스트 사용 (사용 가능할 때만)\"\nL.StripTimerText\t\t\t= \"타이머 텍스트에 쿨타임/다음 글자 삭제\"\nL.KeepBar\t\t\t\t\t= \"스킬 시전 전까지 타이머 작동 중단\"\nL.KeepBar2\t\t\t\t\t= \"(모드에서 지원할 경우에만)\"\nL.FadeBar\t\t\t\t\t= \"사정거리 밖의 스킬에 대한 타이머 바 숨김\"\nL.BarSkin\t\t\t\t\t= \"바 스킨\"\n\n-- Tab: Global Disables & Filters\nL.TabCategory_Filters\t\t= \"기능 끄기 및 필터\"\nL.Area_DBMFiltersSetup\t\t= \"DBM 기능 필터 가이드\"\nL.Area_BlizzFiltersSetup\t= \"블리자드 기능 필터 가이드\"\n-- Panel: DBM Features\nL.Panel_SpamFilter\t\t\t= \"DBM 기능\"\nL.Area_SpamFilter_Anounces\t= \"알림 관련 기능 끄기 및 필터 설정\"\nL.SpamBlockNoShowAnnounce\t= \"모든 알림 및 효과음 재생 안함\"\nL.SpamBlockNoShowTgtAnnounce = \"대상자 알림 중 타인에게 영향이 없는 것은 알림과 효과음 출력하지 않음 (위의 옵션 체크시 자동 적용)\"\nL.SpamBlockNoTrivialSpecWarnSound\t= \"현재 레벨에 맞는 콘텐츠 이외에는 특수 알림 효과음 재생이나 화면 점멸 효과 사용 안함 (대신 사용자가 선택한 정규 알림 효과음 재생)\"\n\nL.Area_SpamFilter_SpecRoleFilters\t= \"특수 알림 유형 필터 (DBM 알림 내역 조정)\"\nL.SpamSpecRoleDispel\t\t\t\t= \"'해제' 경고 빼기\"\nL.SpamSpecRoleInterrupt\t\t\t\t= \"'차단' 경고 빼기\"\nL.SpamSpecRoleDefensive\t\t\t\t= \"'생존기' 경고 빼기\"\nL.SpamSpecRoleTaunt\t\t\t\t\t= \"'도발' 경고 빼기\"\nL.SpamSpecRoleSoak\t\t\t\t\t= \"'바닥 밟기' 경고 빼기\"\nL.SpamSpecRoleStack\t\t\t\t\t= \"'고중첩' 경고 빼기\"\nL.SpamSpecRoleSwitch\t\t\t\t= \"'대상 변경' &amp; '쫄' 경고 빼기\"\nL.SpamSpecRoleGTFO\t\t\t\t\t= \"'바닥 피하기' 경고 빼기\"\n\nL.Area_SpamFilter_SpecFeatures\t\t= \"특정 특수 알림 기능 켜기/끄기\"\nL.SpamBlockNoSpecWarnText\t= \"특수 알림 텍스트 표시 안함\"\nL.SpamBlockNoSpecWarnFlash\t= \"특수 알림에 화면 점멸 사용 안함\"\nL.SpamBlockNoSpecWarnVibrate\t\t= \"특수 알림에 컨트롤러 진동 안함\"\nL.SpamBlockNoSpecWarnSound\t= \"특수 알림 효과음 재생 안함 (음성 경고 메뉴에서 설정했다면 음성팩은 계속 작동)\"\nL.SpamBlockRaidWarning\t\t= \"다른 보스 모드가 알리는 경보 감추기\"\nL.SpamBlockBossWhispers\t\t= \"전투 중 사용되는 DBM 경보 귓속말 감추기\"\n\nL.Area_SpamFilter_Timers\t= \"타이머\"\nL.SpamBlockNoShowBossTimers\t\t= \"던전/레이드 보스 타이머 표시 안함\"\nL.SpamBlockNoShowTrashTimers\t\t= \"던전/레이드 일반몹 타이머 표시 안함 (알림: 이름표의 쿨타임도 표시되지 않습니다)\"\nL.SpamBlockNoShowEventTimers\t\t= \"이벤트나 알림 타이머 표시 안함 (대기열, 보스 재생성 등)\"\nL.SpamBlockNoShowUTimers\t= \"사용자 전송 타이머 표시 안함 (사용자 지정/풀링/휴식)\"\nL.SpamBlockNoCountdowns\t\t= \"초읽기 음성 재생 안함\"\n\nL.Area_SpamFilter_Nameplates\t\t= \"이름표 애드온 전체적인 기능 끄기 및 필터 설정\"\nL.SpamBlockNoNameplate\t\t= \"이름표 오라 표시 안함\"\nL.SpamBlockNoBossGUIDs\t\t\t= \"메인 보스 (boss1)의 타이머를 Plater 이름표 오라로 표시 안함\\n(Plater에서 해당 기능을 활성화 했다면 일반몹/보스 쫄의 타이머는 볼 수 있습니다)\"\nL.SpamBlockTimersWithNameplates\t\t= \"Plater에서 오라 쿨타임 설정을 활성화 했을 때 일반몹에선 DBM 타이머 바 보지 않음 (보스 전투에는 적용되지 않고 항상 타이머 바가 표시됩니다)\"\nL.NameplateFooter\t\t\t\t\t= \"Plater Nameplates를 사용중이라면 이 메뉴에서 추가로 기능을 설정할 수 있습니다\"\n\nL.Area_SpamFilter_Misc\t\t= \"기타 여러 기능 끄기 및 필터 설정\"\nL.SpamBlockNoSetIcon\t\t= \"대상에 공격대 징표를 설정하지 않음\"\nL.SpamBlockNoRangeFrame\t\t= \"거리 창 표시 안함\"\nL.SpamBlockNoInfoFrame\t\t= \"정보 창 표시 안함\"\nL.SpamBlockNoHudMap\t\t\t= \"HUD 표시 안함\"\n\nL.SpamBlockNoYells\t\t\t= \"말풍선 알림 사용 안함\"\nL.SpamBlockNoNoteSync\t\t= \"메모 공유 수락 안함\"\n\nL.Area_Restore\t\t\t\t= \"DBM 복구 설정 (DBM이 보스 모드 종료시 이전 사용자 설정 상태로 돌아갈 지 여부를 설정)\"\nL.SpamBlockNoIconRestore\t= \"아이콘 설정 상태를 저장하지 않고 전투 종료시 원래대로 복구\"\nL.SpamBlockNoRangeRestore\t= \"모드가 '숨김' 명령을 내렸을 때 이전 설정 상태로 거리 창 복구 안함\"\n\nL.Area_SpamFilter\t\t\t= \"스팸 방지 필터 설정\"\nL.DontShowFarWarnings\t\t= \"멀리 떨어진 곳의 이벤트에 대한 알림 및 바 표시 안함\"\nL.StripServerName\t\t\t= \"알림, 타이머, 거리 검사, 정보 창에서 이름에 서버명 제거\"\nL.FilterVoidFormSay\t\t\t= \"공허의 형상일땐 공격대 징표나 초읽기를 말풍선으로 표시 안함 (그 외 말풍선 알림은 작동)\"\n\nL.Area_SpecFilter\t\t\t= \"역할 관련 필터 설정\"\nL.FilterTankSpec\t\t\t= \"방어 전담이 아닐땐 방어 전담용 알림 보지 않기 (참고: '도발' 알림은 현재 전부 기본값으로 켜짐 상태이기 때문에 대부분의 이용자는 설정을 끄지 않는 것을 권장합니다.)\"\nL.FilterInterruptsHeader\t= \"상황에 따라 주문 차단 알림을 표시하지 않기\"\nL.FilterInterrupts\t\t\t= \"주문 시전 몹이 현재 대상/주시 대상이 아닐 때 (항상)\"\nL.FilterInterrupts2\t\t\t= \"주문 시전 몹이 현재 대상/주시 대상이 아니거나 (항상) 차단기가 쿨타임일 때 (보스 전투만)\"\nL.FilterInterrupts3\t\t\t= \"주문 시전 몹이 현재 대상/주시 대상이 아니거나 (항상) 차단기가 쿨타임일 때 (보스 및 쫄 정리시)\"\nL.FilterInterruptNoteName\t= \"사용자 메모에 자기 이름이 포함되지 않은 경우 차단 가능 주문의 알림 보지 않기\"\nL.FilterDispels\t\t\t\t= \"해제 주문이 쿨타임일땐 해제 알림 보지 않기\"\nL.FilterTrashWarnings\t\t= \"일반 및 영웅 던전에선 일반몹 알림 보지 않기\"\n\nL.Area_PullTimer\t\t\t= \"풀링, 휴식, 전투, 사용자 지정 바 관련 필터 설정\"\nL.DontShowPTNoID\t\t\t= \"같은 지역에 없는 사용자가 보낸 DBM 풀링 타이머 차단 (지역ID가 포함되지 않은 상태로 전송된 BigWigs 타이머는 절대 차단하지 않음)\"\nL.DontShowPT\t\t\t\t= \"풀링/휴식 타이머 표시 안함\"\nL.DontShowPTText\t\t\t= \"풀링/휴식 알림 텍스트 표시 안함\"\nL.DontShowPTCountdownText\t= \"풀링 초읽기 숫자 표시 안함\"\nL.DontPlayPTCountdown\t\t= \"풀링/휴식/전투/사용자 지정 초읽기 전구간 음성 재생 안함\"\nL.PT_Threshold\t\t\t\t= \"휴식/전투/사용자 지정 타이머 초읽기 음성 재생 안함: %d초 까지\"\n\nL.Area_TimerTracker\t\t\t= \"TimerTracker 옵션\"\nL.PlayTT\t\t\t\t\t= \"TimerTracker 활성화\"\nL.PlayTTCountdown\t\t\t= \"TimerTracker 카운트다운 사운드 재생\"\nL.PlayTTCountdownFinished\t= \"TimerTracker 카운트다운 종료 사운드 재생\"\n\n-- Panel: Blizzard Features\nL.Panel_HideBlizzard\t\t= \"블리자드 기능\"\nL.Area_HideBlizzard\t\t\t= \"블리자드 기능 끄기 및 숨김 설정\"\nL.HideBossEmoteFrame\t\t= \"보스 전투중 보스 감정표현 숨기기\"\nL.HideWatchFrame\t\t\t= \"추적중인 업적이 없고 신화+ 난이도가 아니라면 보스 전투시 퀘스트 추적 프레임을 숨깁니다.\"\nL.HideGarrisonUpdates\t\t= \"보스 전투중 추종자 팝업 알림 숨기기\"\nL.HideGuildChallengeUpdates\t= \"보스 전투중 길드 도전 과제 알림 숨기기\"\nL.HideQuestTooltips\t\t\t= \"보스 전투중 툴팁에서 퀘스트 정보 숨기기\"\nL.HideTooltips\t\t\t\t= \"보스 전투중 모든 툴팁 숨기기\"\nL.DisableSFX\t\t\t\t= \"보스 전투중 소리 채널 (효과음) 끄기 (알림: 이 설정을 켜면 효과음을 켜지 않았어도 전투가 끝난 후 자동으로 켜집니다)\"\nL.DisableCinematics\t\t\t= \"게임 내 영상 끄기\"\nL.ReportRecount\t\t\t\t= \"보스 조우 종료 후 Recount 보고서 보내기(도움 필요)\"\nL.ReportSkada\t\t\t\t= \"보스 조우 종료 후 SkadaRevisited 보고서 보내기(지원 필요)\"\nL.OnlyFight\t\t\t\t\t= \"전투중일 때 한번만 재생\"\nL.AfterFirst\t\t\t\t= \"인스턴스 던전에 있을 때 한번만 재생\"\nL.CombatOnly\t\t\t\t= \"전투중 차단 (모든 전투)\"\nL.RaidCombat\t\t\t\t= \"전투중 차단 (보스만)\"\n\n-- Panel: Privacy\nL.Tab_Privacy\t\t\t\t= \"사생활 보호 수위 조정\"\nL.Area_WhisperMessages\t\t= \"귓속말 설정\"\nL.AutoRespond\t\t\t\t= \"전투중 자동 귓속말 답변\"\nL.WhisperStats\t\t\t\t= \"귓속말 답변에 처치/전멸 통계 포함\"\nL.DisableStatusWhisper\t\t= \"공격대 전반에 관한 상태 보고 귓속말을 끕니다. (공대장 권한 필요) 일반/영웅/신화 레이드와 신화+ 던전에만 적용됩니다\"\nL.Area_SyncMessages\t\t\t= \"애드온 동기화 설정\"\nL.DisableGuildStatus\t\t= \"동기화된 길드에게 레이드 진도 알림 메시지를 받지 않습니다. 공대장일 경우 이 옵션이 공격대 내 모든 DBM 사용자에게 적용됩니다\"\nL.EnableWBSharing\t\t\t= \"길드와 같이 필드 보스 전투를 시작/처치시 같은 서버에 있는 배틀넷 친구에게 공유합니다.\"\n\n-- Tab: Frames & Integrations\nL.TabCategory_Frames\t\t= \"창 및 통합 기능\"\nL.Area_NamelateInfo\t\t\t= \"DBM 이름표 오라 정보\"\n-- Panel: InfoFrame\nL.Panel_InfoFrame\t\t\t= \"정보 창\"\n\n-- Panel: Range\nL.Panel_Range\t\t\t\t= \"거리 창\"\n\n-- Panel: Nameplate\nL.Panel_Nameplates\t\t\t= \"이름표\"\nL.UseNameplateHandoff\t\t= \"이름표 오라에 대한 요청이 발생하면 DBM 내부에서 처리하지 않고 지원되는 이름표 애드온으로 넘깁니다. (KuiNameplates, Threat Plates, Plater) 이름표 애드온을 통해 보다 발전된 기능과 설정이 가능하므로 권장하는 설정입니다\"\nL.Area_NPStyle\t\t\t\t= \"외형 (알림: DBM이 이름표를 관리할 때만 설정하세요.)\"\nL.NPAuraSize\t\t\t\t= \"오라 픽셀 크기 (정사각형): %d\"\n\n-- Misc\nL.Area_General\t\t\t\t= \"일반\"\nL.Area_Position\t\t\t\t= \"위치\"\nL.Area_Style\t\t\t\t= \"외형\"\n\nL.FontSize\t\t\t\t= \"글꼴 크기: %d\"\nL.FontStyle\t\t\t\t= \"글꼴 속성\"\nL.FontColor\t\t\t= \"글꼴 색상\"\nL.FontShadow\t\t\t\t= \"그림자\"\nL.FontType\t\t\t\t= \"글꼴 선택\"\n\n-- Retail Globals\nL.LARGE = \"큼\"\nL.SMALL = \"작음\"\nL.PLAYER_DIFFICULTY6 = \"신화\" -- ID: 24525\nL.PLAYER_DIFFICULTY_TIMEWALKER = \"시간여행\" -- ID: 25846\n"
  },
  {
    "path": "DBM-GUI/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\nif not DBM_GUI_L then DBM_GUI_L = {} end\n\nlocal L = DBM_GUI_L\n\n--L.MainFrame = \"Deadly Boss Mods\"\n\n-- Missing phrases. Start ..\nL.Core_GUI\t\t\t\t\t= \"Ядро и графический интерфейс\"\nL.Button_MoveBars\t\t\t= \"Переместить фреймы / полосы\"\nL.Area_BasicSetup\t\t\t= \"Советы по начальной настройке DBM\"\nL.Area_ModulesForYou\t\t= \"Какие модули DBM подходят именно Вам?\"\nL.Area_ProfilesSetup\t\t= \"Руководство по использованию профилей DBM\"\nL.Panel_ReducedInformation\t= \"Объем информации\"\nL.Panel_HandFilter\t\t\t= \"Объем работы с DBM\"\nL.ResizeOptions\t\t\t\t= \"Параметры изменения размера\"\nL.ResizeInfo\t\t\t\t= \"Вы можете изменить размер графического интерфейса, щелкнув в правом нижнем углу и перетащить.\"\nL.Button_ResetWindowSize\t= \"Сбросить размер окна\"\nL.Editbox_WindowWidth\t\t= \"Ширина окна\"\nL.Editbox_WindowHeight\t\t= \"Высота окна\"\nL.UIGroupingOptions\t\t\t= \"Параметры группировки пользовательского интерфейса (изменение этих параметров требует перезагрузки пользовательского интерфейса для любого уже загруженного мода)\"\nL.GroupOptionsBySpell\t\t= \"Группировать опции мода по заклинаниям (для модов, которые это поддерживают)\"\nL.GroupOptionsExcludeIcon\t= \"Исключить опции 'Set Icon on' (он же 'установить значок на') из группировки по заклинаниям (они будут сгруппированы в категории 'icons', как и раньше).\"\nL.AutoExpandSpellGroups\t\t= \"Автоматическое расширение опций, сгруппированных по заклинаниям\"\nL.NoDescription\t\t\t\t= \"У этой способности нет описания\"\nL.TabCategory_Alerts\t\t= \"Оповещения\"\nL.Area_SpecAnnounceConfig\t= \"Руководство по специальным объявлениям визуальных эффектов и звука\"\nL.Area_SpecAnnounceNotes\t= \"Руководство по специальным объявлениям\"\nL.Area_VoicePackInfo\t\t= \"Информация о голосовых пакетах DBM\"\nL.Area_BugAlerts\t\t\t= \"Параметры предупреждений об ошибках\"\nL.BadTimerAlert\t\t\t\t= \"Показывать сообщение в чате, когда DBM обнаруживает неверный таймер с ошибкой не менее 1 секунды\"\nL.BadIDAlert\t\t\t\t= \"Показывать сообщение в чате, когда DBM обнаруживает, что используется недопустимый идентификатор заклинания или журнала\"\nL.ShowReminders\t\t\t\t= \"Показывать напоминания об отсутствующих сабмодах, отключенных сабмодах, исправлениях сабмодов, устаревших сабмодах и включенном беззвучном режиме.<br/>ПРИМЕЧАНИЕ: сабмод - дополнение к основному моду. Например: DBM-Legion является дополнением к DBM Core.\"\nL.SpecWarn_Vibrate\t\t\t= \"Контроллер вибрации\"\nL.Panel_Appearance\t\t\t= \"Внешний вид полос\"\nL.BarSaturation\t\t\t\t= \"Насыщенность полос для маленьких таймеров (когда огромные полосы отключены): %0.2f\"\nL.Panel_ColorByType\t\t\t= \"Цвет по типу\"\nL.Panel_Behavior\t\t\t= \"Поведение полос\"\nL.TabCategory_Filters\t\t= \"Глобальные отключения и фильтры\"\nL.Area_DBMFiltersSetup\t\t= \"Руководство по фильтрам DBM\"\nL.Area_SyncMessages\t\t\t= \"Параметры синхронизации аддонов\"\nL.EnableWBSharing\t\t\t= \"Поделитесь, когда Вы пулите или побеждаете мирового босса со своей гильдией и друзьями из Battle.net, которые находятся в одном игровом мире.\"\nL.SpamBlockNoSpecWarnFlash\t\t\t= \"Не показывать специальное объявление экранной вспышки\"\nL.SpamBlockNoSpecWarnVibrate\t\t= \"Не вибрировать контроллер на специальном объявлении\"\nL.SpamBlockNoSpecWarnSound\t\t\t= \"Не воспроизводить специальные звуки объявлений (по-прежнему разрешены голосовые пакеты, если они включены на панели голосовых предупреждений)\"\nL.SpamBlockNoTrivialSpecWarnSound\t= \"Не воспроизводить специальные звуки объявлений и не показывать вспышку экрана для контента, который является слишком простым для Вашего уровня (вместо этого воспроизводит выбранный пользователем обычный звук объявления)\"\nL.Tab_Privacy\t\t\t\t= \"Контроль конфиденциальности\"\nL.TabCategory_Frames\t\t= \"Рамки и интеграции\"\nL.Area_NamelateInfo\t\t\t= \"Информация об аурах нэймплейтов DBM\"\nL.Area_General\t\t\t\t= \"Общие\"\nL.Area_Style\t\t\t\t= \"Стиль\"\nL.Panel_InfoFrame\t\t\t= \"Инфофрейм\"\nL.Panel_Range\t\t\t\t= \"Дистанция\"\nL.Panel_Nameplates\t\t\t= \"Нэймплейты\"\nL.UseNameplateHandoff\t\t= \"Передавать запросы ауры нэймплейтов поддерживаемым аддонам (KuiNameplates, Threat Plates, Plater) вместо внутренней обработки. Это рекомендуемый вариант, так как он позволяет выполнять более продвинутые функции и настройку с помощью надстройки нэймплейтов.\"\nL.NPAuraSize\t\t\t\t= \"Размер пикселя ауры (в квадрате): %d\"\nL.MissingVoicePack\t\t\t= \"Отсутствующий голосовой пакет (%s)\"\nL.RecordOnlyBosses\t\t\t= \"Не записывать трэш. Записывать только боссов.<br/>Используйте '/dbm pull' перед боссами, чтобы до пулла выпить поты и начать схватку!\"\nL.DoNotLogLFG\t\t\t\t= \"Не записывать LFG или LFR (случайные группы)\"\nL.LogCurrentMythicRaids\t\t= \"Эпохальные рейды актуального уровня\"\nL.LogCurrentRaids\t\t\t= \"Неэпохальные рейды актуального уровня (героический, нормальный и LFR, если фильтр LGF/LFR отключен)\"\nL.LogTWRaids\t\t\t\t= \"Путешествие во времени или рейды времени Хроми\"\nL.LogTrivialRaids\t\t\t= \"Тривиальные рейды (ниже уровня персонажа)\"\nL.LogCurrentMPlus\t\t\t= \"Подземелья актуального уровня М+\"\nL.LogCurrentMythicZero\t\t= \"Актуальные подземелья эпохального уровня +0\"\nL.LogTWDungeons\t\t\t\t= \"Путешествие во времени или подземелья времени Хроми\"\nL.LogCurrentHeroic\t\t\t= \"Героические подземелья актуального уровня.<br/>Примечание: если Вы посещаете героические подземелья через очередь и хотите, чтобы это регистрировалось, отключите фильтр LFG.\"\nL.LogCurrentNormal\t\t\t= \"Обычный подземелья актуального уровня.<br/>Примечание: если Вы посещаете героические подземелья через очередь и хотите, чтобы это регистрировалось, отключите фильтр LFG.\"\nL.LogTrivialDungeons\t\t= \"Тривиальные подземелья (ниже уровня персонажа)\"\nL.EventEngagePT\t\t\t\t= \"Установить звук для запуска таймера пулла\"\nL.Area_ColorBytype\t\t\t= \"Цветные полосы по типу (руководство)\"\nL.Area_SpamFilter_SpecFeatures\t\t= \"Переключить определенные функции специальных объявлений\"\nL.Area_SpamFilter_SpecRoleFilters\t= \"Специальные фильтры типов объявлений (контролируют, сколько ручных операций делает DBM)\"\nL.SpamSpecRoleDispel\t\t\t\t= \"Фильтр 'рассеивающих' оповещений\"\nL.SpamSpecRoleInterrupt\t\t\t\t= \"Фильтр 'прерываемых' оповещений\"\nL.SpamSpecRoleDefensive\t\t\t\t= \"Фильтр 'защитных' оповещений\"\nL.SpamSpecRoleTaunt\t\t\t\t\t= \"Фильтр 'провокационных' оповещений (для танков 'таунт')\"\nL.SpamSpecRoleSoak\t\t\t\t\t= \"Фильтр 'поглощающих' оповещений\"\nL.SpamSpecRoleStack\t\t\t\t\t= \"Фильтр 'high stack' оповещений\"\nL.SpamSpecRoleSwitch\t\t\t\t= \"Фильтр оповещений о 'смене цели' &amp; 'аддов'\"\nL.SpamSpecRoleGTFO\t\t\t\t\t= \"Фильтр 'GTFO' оповещений\"\nL.Highest\t\t\t\t\t\t\t= \"Наибольший таймер наверху\"\nL.Lowest\t\t\t\t\t\t\t= \"Наименьший таймер наверху\"\n-- Missing phrases. End ..\n\nL.TranslationByPrefix\t\t= \"Retail backport by \"\nL.TranslationBy\t\t\t\t= \"Barsoom, Bunny67, Zidras\"\nL.Website\t\t\t\t\t= \"Discord для обсуждения: |cFF73C2FBhttps://discord.gg/CyVWDWS|r\"\nL.WebsiteButton\t\t\t\t= \"Форумы\"\n\nL.OTabBosses\t\t\t\t= \"Боссы\"\nL.OTabOptions\t\t\t\t= \"Настройки\"\n\nL.TabCategory_Options\t\t= \"Общие параметры\"\nL.TabCategory_OTHER\t\t\t= \"Другие боссы\"\n\nL.BossModLoaded\t\t\t\t= \"%s - статистика\"\nL.BossModLoad_now\t\t\t= [[Модуль для этих боссов не загружен.\nОн будет загружен сразу после входа в подземелье.\nТакже Вы можете нажать кнопку, чтобы загрузить модуль вручную.]]\n\nL.PosX\t\t\t\t\t\t= \"Позиция X\"\nL.PosY\t\t\t\t\t\t= \"Позиция Y\"\n\nL.MoveMe\t\t\t\t\t= \"Передвинь меня\"\nL.Button_OK\t\t\t\t\t= \"OK\"\nL.Button_Cancel\t\t\t\t= \"Отмена\"\nL.Button_LoadMod\t\t\t= \"Загрузить модуль\"\nL.Mod_Enabled\t\t\t\t= \"Включить модуль\"\nL.Mod_EnableAnnounce\t\t= \"Объявлять рейду\"\nL.Mod_Reset\t\t\t\t\t= \"Сброс настроек\"\nL.Reset\t\t\t\t\t= \"Сброс\"\n\nL.Enable\t\t\t\t\t= \"Вкл.\"\nL.Disable\t\t\t\t\t= \"Откл.\"\n\nL.NoSound\t\t\t\t\t= \"Без звука\"\n\nL.IconsInUse\t\t\t\t= \"Используемые метки\"\n\n-- Tab: Boss Statistics\nL.BossStatistics\t\t\t= \"Статистика босса\"\nL.Statistic_Kills\t\t\t= \"Убийства:\"\nL.Statistic_Wipes\t\t\t= \"Поражения:\"\nL.Statistic_Incompletes\t\t= \"Не завершено:\"\nL.Statistic_BestKill\t\t= \"Лучший бой:\"\nL.Statistic_BestRank\t\t= \"Лучший ранг:\"--Maybe not get used, not sure yet, localize anyways\n\n-- Tab: General Core Options\nL.General\t\t\t\t\t= \"Общие параметры DBM\"\nL.EnableMiniMapIcon\t\t\t= \"Отображать кнопку на миникарте\"\nL.UseSoundChannel\t\t\t= \"Выбор аудио канала для предупреждений DBM\"\nL.UseMasterChannel\t\t\t= \"Основной аудио канал\"\nL.UseDialogChannel\t\t\t= \"Аудио канал диалогов\"\nL.UseSFXChannel\t\t\t\t= \"Аудио канал эффектов\"\nL.Latency_Text\t\t\t\t= \"Макс. задержка для синхронизации: %d\"\n\nL.ModelOptions\t\t\t\t= \"Настройки 3D моделей на странице боссов\"\nL.EnableModels\t\t\t\t= \"Показывать 3D модели боссов\"\nL.ModelSoundOptions\t\t\t= \"Выбор голосового приветствия\"\nL.ModelSoundShort\t\t\t= \"Короткое\"\nL.ModelSoundLong\t\t\t= \"Длинное\"\n\nL.Button_RangeFrame\t\t\t= \"Окно проверки дистанции\"\nL.Button_InfoFrame\t\t\t= \"Окно информации\"\nL.Button_TestBars\t\t\t= \"Проверка индикаторов\"\nL.Button_ResetInfoRange\t\t= \"Сбросить информ./дист. окна\"\n\n-- Tab: Raidwarning\nL.Tab_RaidWarning\t\t\t= \"Предупреждения для рейда\"\nL.RaidWarning_Header\t\t= \"Параметры рейд-предупреждений\"\nL.RaidWarnColors\t\t\t= \"Цвета предупреждений для рейда\"\nL.RaidWarnColor_1\t\t\t= \"Цвет 1\"\nL.RaidWarnColor_2\t\t\t= \"Цвет 2\"\nL.RaidWarnColor_3\t\t\t= \"Цвет 3\"\nL.RaidWarnColor_4\t\t\t= \"Цвет 4\"\nL.InfoRaidWarning\t\t\t= [[Вы можете указать расположение и цвет предупреждений для рейда.\nИспользуется для сообщений вроде \"Игрок X под воздействием Y\"]]\nL.ColorResetted\t\t\t= \"Цветовые параметры для этого поля восстановлены.\"\nL.ShowWarningsInChat\t\t= \"Показывать предупреждения в окне чата\"\nL.ShowFakedRaidWarnings\t= \"Показывать предупреждения в качестве \\\"Объявление рейду\\\"\"\nL.WarningIconLeft\t\t\t= \"Отображать значок с левой стороны\"\nL.WarningIconRight\t\t\t= \"Отображать значок с правой стороны\"\nL.WarningIconChat\t\t\t= \"Отображать значки в окне чата\"\nL.WarningAlphabetical\t\t= \"Сортировать имена по алфавиту\"\nL.Warn_Duration\t\t\t\t= \"Длительность предупреждения: %0.1f сек\"\nL.None\t\t\t\t\t\t= \"Нет\"\nL.Random\t\t\t\t\t= \"Случайно\"\nL.Outline\t\t\t\t\t= \"Контур\"\nL.ThickOutline\t\t\t\t= \"Толстый контур\"\nL.MonochromeOutline\t\t\t= \"Монохромный контур\"\nL.MonochromeThickOutline\t= \"Монохромный толстый контур\"\nL.RaidWarnSound\t\t\t\t= \"Звук рейд-предупреждения\"\n\n-- Tab: Generalwarnings\nL.Tab_GeneralMessages\t\t= \"Общие сообщения\"\nL.CoreMessages\t\t\t\t= \"Параметры общих сообщений\"\nL.ShowPizzaMessage\t\t\t= \"Показывать сообщения транслируемых таймеров в окне чата\"\nL.ShowAllVersions\t\t\t= \"Показывать версии босс мода для всех членов группы в окне чата\"\nL.CombatMessages\t\t\t= \"Параметры сообщений в бою\"\nL.ShowEngageMessage\t\t\t= \"Показывать сообщения о вступлении в бой в окне чата\"\nL.ShowDefeatMessage\t\t\t= \"Показывать сообщения об убийстве босса в окне чата\"\nL.ShowGuildMessages\t\t\t= \"Показывать сообщения о вступлении в бой/убийстве/вайпе рейда гильдии в окне чата\"\nL.ShowGuildMessagesPlus\t\t= \"Также показывать сообщения о вступлении в бой/убийстве/вайпе для группы гильдии в M+ (требуется опция рейда)\"\nL.Area_WhisperMessages\t\t= \"Параметры приватных сообщений\"\nL.AutoRespond\t\t\t\t= \"Включить автоответ в бою\"\nL.WhisperStats\t\t\t\t= \"Добавлять статистику убийств/вайпов в автоответ\"\nL.DisableStatusWhisper\t\t= \"Отключить ответы на запрос статуса боя шепотом для всей группы (требуется лидер группы).<br/>Применяется только для обычных/гер./эпох. рейдов и испытаний/эпох. подземелий\"\nL.DisableGuildStatus\t\t= \"Отключить отправку гильдии сообщений о прогрессе для всей группы (требуется лидер группы)\"\n\n-- Tab: Barsetup\nL.TabCategory_Timers\t\t= \"Настройки индикаторов\"\nL.BarTexture\t\t\t\t= \"Текстура индикатора\"\nL.BarStyle\t\t\t\t\t= \"Стиль индикатора\"\nL.BarDBM\t\t\t\t\t= \"DBM\"\nL.BarSimple\t\t\t\t\t= \"Простой (без анимации)\"\nL.BarStartColor\t\t\t\t= \"Цвет в начале\"\nL.BarEndColor\t\t\t\t= \"Цвет в конце\"\nL.Bar_Height\t\t\t\t= \"Высота индикатора: %d\"\nL.Slider_BarOffSetX\t\t= \"Сдвиг X: %d\"\nL.Slider_BarOffSetY\t\t= \"Сдвиг Y: %d\"\nL.Slider_BarWidth\t\t\t= \"Ширина: %d\"\nL.Slider_BarScale\t\t\t= \"Масштаб: %0.2f\"\n--Types\nL.BarStartColorAdd\t\t\t= \"Начальный цвет\\n(Помощник)\"\nL.BarEndColorAdd\t\t\t= \"Конечный цвет\\n(Помощник)\"\nL.BarStartColorAOE\t\t\t= \"Начальный цвет\\n(Урон по области)\"\nL.BarEndColorAOE\t\t\t= \"Конечный цвет\\n(Урон по области)\"\nL.BarStartColorDebuff\t\t= \"Начальный цвет\\n(Цель)\"\nL.BarEndColorDebuff\t\t\t= \"Конечный цвет\\n(Цель)\"\nL.BarStartColorInterrupt\t= \"Начальный цвет\\n(Прерывание)\"\nL.BarEndColorInterrupt\t\t= \"Конечный цвет\\n(Прерывание)\"\nL.BarStartColorRole\t\t\t= \"Начальный цвет\\n(Роль)\"\nL.BarEndColorRole\t\t\t= \"Конечный цвет\\n(Роль)\"\nL.BarStartColorPhase\t\t= \"Начальный цвет\\n(Фаза)\"\nL.BarEndColorPhase\t\t\t= \"Конечный цвет\\n(Фаза)\"\nL.BarStartColorUI\t\t\t= \"Начальный цвет\\n(Польз.)\"\nL.BarEndColorUI\t\t\t\t= \"Конечный цвет\\n(Польз.)\"\n--Type 7 options\nL.Bar7Header\t\t\t\t= \"Параметры пользовательского индикатора\"\nL.Bar7ForceLarge\t\t\t= \"Всегда использовать большой индикатор\"\nL.Bar7CustomInline\t\t\t= \"Использовать пользовательскую '!' встроенную иконку\"\n--Dropdown Options\nL.CBTGeneric\t\t\t\t= \"Общий\"\nL.CBTAdd\t\t\t\t\t= \"Add\"\nL.CBTAOE\t\t\t\t\t= \"АОЕ\"\nL.CBTTargeted\t\t\t\t= \"Цель\"\nL.CBTInterrupt\t\t\t\t= \"Прерывание\"\nL.CBTRole\t\t\t\t\t= \"Роль\"\nL.CBTPhase\t\t\t\t\t= \"Фаза\"\nL.CBTImportant\t\t\t\t= \"Важно (Игрок)\"\nL.CVoiceOne\t\t\t\t\t= \"Count Voice 1\"\nL.CVoiceTwo\t\t\t\t\t= \"Count Voice 2\"\nL.CVoiceThree\t\t\t\t= \"Count Voice 3\"\n\n-- Tab: Timers\nL.AreaTitle_BarColors\t\t= \"Цвета индикатора по типу таймера\"\nL.AreaTitle_BarSetup\t\t= \"Параметры основного индикатора\"\nL.AreaTitle_Behavior\t\t= \"Параметры поведения полос\"\nL.AreaTitle_BarSetupSmall\t= \"Параметры уменьшенного индикатора\"\nL.AreaTitle_BarSetupHuge\t= \"Параметры увеличенного индикатора\"\nL.AreaTitle_BarSetupVariance\t\t= \"Параметры изменения полосы\"\nL.EnableHugeBar\t\t\t= \"Включить увеличенный индикатор (Полоса 2)\"\nL.EnableVarianceBar \t\t\t\t= \"Включить изменение полосы\"\nL.VarianceTransparency\t\t\t\t= \"Прозрачность полосы: %0.1f\"\nL.VarianceTimerTextBehavior\t\t\t= \"Установить режим текста изменения таймера\"\nL.ZeroatWindowEnds\t\t\t\t\t= \"Текст становится равным нулю в конце перезарядки\"\nL.ZeroatWindowStartPause\t\t\t= \"Текст становится равным нулю в начале перезарядки, а затем приостанавливается\"\nL.ZeroatWindowStartRestart\t\t\t= \"Текст становится равным нулю в начале перезарядки, а затем возобновляется\"\nL.ZeroatWindowStartNeg\t\t\t\t= \"Текст становится равным нулю в начале перезарядки, а затем становится отрицательным\"--По умолчанию\nL.BarIconLeft\t\t\t\t= \"Значок слева\"\nL.BarIconRight\t\t\t\t= \"Значок справа\"\nL.ExpandUpwards\t\t\t\t= \"Выровнять по верху\"\nL.FillUpBars\t\t\t\t= \"Наполняющая заливка\"\nL.ClickThrough\t\t\t\t= \"Отключить события мыши (щелчок сквозь)\"\nL.Bar_Decimal\t\t\t\t= \"Отображать десятые, когда время меньше: %d\"\nL.Bar_Alpha\t\t\t\t\t= \"Прозрачность: %0.1f\"\nL.Bar_EnlargeTime\t\t\t= \"Увеличивать, когда время меньше: %d\"\nL.BarSpark\t\t\t\t\t= \"Искрение индикатора\"\nL.BarFlash\t\t\t\t\t= \"Мигание, когда индикатор скоро исчезнет\"\nL.BarSort\t\t\t\t\t= \"Сортировать по оставшемуся времени\"\nL.BarColorByType\t\t\t= \"Цвет по типу\"\nL.NoBarFade\t\t\t\t\t= \"Используйте начальные/конечные цвета как маленькие/большие цвета вместо постепенного изменения цвета\"\nL.BarInlineIcons\t\t\t= \"Показывать встроенные иконки\"\nL.ShortTimerText\t\t\t= \"Использовать короткий текст таймера (когда доступен)\"\nL.StripTimerText\t\t\t= \"Обрезать CD / Следующий из таймеров\"\nL.KeepBar\t\t\t\t\t= \"Оставить таймер активным до применения способности\"\nL.KeepBar2\t\t\t\t\t= \"(когда поддерживается модулем)\"\nL.FadeBar\t\t\t\t\t= \"Таймеры исчезновения для способностей вне диапазона\"\n\n-- Tab: Spec Warn Frame\nL.Panel_SpecWarnFrame\t\t= \"Спецпредупреждения для рейда\"\nL.Area_SpecWarn\t\t\t\t= \"Настройка специальных предупреждений\"\nL.SpecWarn_ClassColor\t\t= \"Использовать цвета классов для спецпредупреждений\"\nL.ShowSWarningsInChat\t\t= \"Показывать спецпредупреждения в окне чата\"\nL.SWarnNameInNote\t\t\t= \"Использовать SW5 настройки, если пользовательская заметка содержит Ваше имя\"\nL.SpecialWarningIcon\t\t= \"Показывать иконки на специальных предупреждениях\"\nL.ShortTextSpellname\t\t= \"Используйте более короткий текст названия (если доступно)\"\nL.SpecWarn_FlashFrameRepeat\t= \"Повторять %d раз (если включено)\"\nL.SpecWarn_Flash\t\t\t= \"Экран вспышки\"\nL.SpecWarn_FlashRepeat\t\t= \"Повторять мигание\"\nL.SpecWarn_FlashColor\t\t= \"Цвет мигания\"\nL.SpecWarn_FlashDur\t\t\t= \"Длительности мигания: %0.1f\"\nL.SpecWarn_FlashAlpha\t\t= \"Прозрачность мигания: %0.1f\"\nL.SpecWarn_DemoButton\t\t= \"Показать пример\"\nL.SpecWarn_ResetMe\t\t\t= \"Восстановить умолчания\"\nL.SpecialWarnSoundOption\t= \"Установить звук по умолчанию\"\nL.SpecialWarnHeader1\t\t= \"Тип 1: установить параметры для обычных приоритетных объявлений, влияющих на Вас или Ваши действия\"\nL.SpecialWarnHeader2\t\t= \"Тип 2: установить параметры для объявлений с обычным приоритетом, влияющих на всех\"\nL.SpecialWarnHeader3\t\t= \"Тип 3: установить параметры для объявлений с ВЫСОКИМ приоритетом\"\nL.SpecialWarnHeader4\t\t= \"Тип 4: установить параметры для специальных объявлений 'Run away' (он же 'убегай') с высоким приоритетом\"\nL.SpecialWarnHeader5\t\t= \"Тип 5: установить параметры для объявлений с примечаниями, содержащими имя Вашего игрока\"\n\n-- Tab: Spoken Alerts Frame\nL.Panel_SpokenAlerts\t\t= \"Голосовые предупреждения\"\nL.Area_VoiceSelection\t\t= \"Выбор голоса\"\nL.CountdownVoice\t\t\t= \"Основной голос для звуков отсчета\"\nL.CountdownVoice2\t\t\t= \"Вторичный голос для звуков отсчета\"\nL.CountdownVoice3\t\t\t= \"Третичный голос для звуков отсчета\"\nL.PullVoice\t\t\t\t\t= \"Установить голос для таймеров пулла\"\nL.VoicePackChoice\t\t\t= \"Голосовой пакет для предупреждений\"\nL.Area_CountdownOptions\t\t= \"Настройки обратного отсчета\"\nL.Area_VoicePackReplace\t\t= \"Варианты замены голосового пакета (которые озвучивают голосовые пакеты, при включении отключает звук и заменяет)\"\nL.VPReplaceNote\t\t\t\t= \"Примечание: голосовые пакеты не изменяют и не удаляют звуки предупреждения. Они просто отключаются, когда голосовой пакет заменяет их.\"\nL.ReplacesAnnounce\t\t\t= \"Заменить звуки объявления (примечание: очень немногие используют голосовые пакеты, за исключением смены фаз и аддов)\"\nL.ReplacesSA1\t\t\t\t= \"Заменить звуки специального объявления 1 (персональный, он же 'pvpflag', которые не являются GTFO)\"\nL.ReplacesSA2\t\t\t\t= \"Заменить звуки специального объявления 2 (все, он же 'beware' -> 'берегись')\"\nL.ReplacesSA3\t\t\t\t= \"Заменить звуки специального объявления 3 (высокоприоритетный звук, он же 'airhorn' -> 'воздушный горн')\"\nL.ReplacesSA4\t\t\t\t= \"Заменить звуки специального объявления 4 (высокий приоритет - бежать)\"\nL.ReplacesGTFO\t\t\t\t= \"Заменить звуки специального объявления GTFO\"\nL.ReplacesCustom\t\t\t= \"Заменить специальный пользовательский набор звуков оповещения (для каждого предупреждения), (не рекомендуется)\"\nL.Area_VoicePackAdvOptions\t= \"Дополнительные параметры голосового пакета\"\nL.SWFNever\t\t\t\t\t= \"Никогда\"\nL.SpecWarn_AlwaysVoice\t\t= \"Всегда воспроизводить все голосовые предупреждения (даже если спецпредупреждения отключены).<br/>Полезно для некоторых рейд-лидеров в нишевых ситуациях, в противном случае не рекомендуется.\"\nL.VPDontMuteSounds\t\t\t= \"Отключить приглушение обычных звуков предупреждений при использовании голосового пакета (используйте это, только если Вы хотите слышать ОБА во время предупреждений)\"\n--TODO, maybe add URLS right to GUI panel on where to acquire 3rd party voice packs?\nL.Area_VPLearnMore\t\t\t= \"Узнайте больше о голосовых пакетах и о том, как использовать эти опции\"\nL.VPLearnMore\t\t\t\t= \"|cFF73C2FBhttps://github.com/DeadlyBossMods/DBM-Retail/wiki/%5BGuide%5D-DBM-&-Voicepacks#2022-update|r\"\nL.Area_BrowseOtherVP\t\t= \"Посмотреть другие голосовые пакеты на Curse\"\nL.BrowseOtherVPs\t\t\t= \"|cFF73C2FBhttps://www.curseforge.com/wow/addons/search?search=dbm+voice|r\"\nL.Area_BrowseOtherCT\t\t= \"Посмотреть пакеты обратного отсчета на Curse\"\nL.BrowseOtherCTs\t\t\t= \"|cFF73C2FBhttps://www.curseforge.com/wow/addons/search?search=dbm+count+pack|r\"\n\n-- Tab: Event Sounds\nL.Panel_EventSounds\t\t\t= \"Звуки событий\"\nL.Area_SoundSelection\t\t= \"Выбор звука (прокрутите меню выбора колесом мыши)\"\nL.EventVictorySound\t\t\t= \"Установить звук при победе в бою\"\nL.EventWipeSound\t\t\t= \"Установить звук при поражении в бою\"\nL.EventEngageSound\t\t\t= \"Установить звук при вступлении в бой\"\nL.EventDungeonMusic\t\t\t= \"Установить музыку в подземельях/рейдах\"\nL.EventEngageMusic\t\t\t= \"Установить музыку во время боя\"\nL.Area_EventSoundsExtras\t= \"Настройки звуков событий\"\nL.EventMusicCombined\t\t= \"Разрешить все варианты выбора музыки для подземелий и боя (изменение этой настройки требует перезагрузки интерфейса, чтобы увидеть изменения)\"\nL.Area_EventSoundsFilters\t= \"Условия фильтра звуков событий\"\nL.EventFilterDungMythicMusic= \"Не проигрывать музыку подземелья на эпохальной/эпохальной+ сложности\"\nL.EventFilterMythicMusic\t= \"Не проигрывать музыку боя на эпохальной/эпохальной+ сложности\"\n\n-- Tab: HealthFrame\nL.Panel_HPFrame\t\t\t\t= \"Здоровье босса\"\nL.Area_HPFrame\t\t\t\t= \"Настройка здоровья босса\"\nL.HP_Enabled\t\t\t\t= \"Всегда отображать здоровье босса\\n(имеет приоритет над аналогичныи параметром у каждого босса)\"\nL.HP_GrowUpwards\t\t\t= \"Выровнять индикатор здоровья по верху\"\nL.HP_ShowDemo\t\t\t\t= \"Индикатор здоровья\"\nL.BarWidth\t\t\t\t\t= \"Ширина индикатора: %d\"\n\n-- Tab: Global Filter\nL.Panel_SpamFilter\t\t\t= \"Глобальные отключения и фильтры\"\nL.Area_SpamFilter_Anounces\t= \"Глобальное отключение и параметры фильтрации\"\nL.SpamBlockNoShowAnnounce\t= \"Не показывать текст или проигрывать звук для ЛЮБЫХ общих объявлений\"\nL.SpamBlockNoShowTgtAnnounce= \"Не показывать текст или проигрывать звук для общих объявлений ЦЕЛИ (фильтр выше переопределяет этот)\"\nL.SpamBlockNoSpecWarnText\t= \"Не показывать текст спецпредупреждений, но разрешить голосовые пакеты (фильтр выше переопределяет этот)\"\n\nL.Area_SpamFilter_Timers\t= \"Функции таймера\"\nL.SpamBlockNoShowBossTimers\t\t\t= \"Не показывать таймеры для боссов в подземельях/рейдах\"\nL.SpamBlockNoShowTrashTimers\t\t= \"Не показывать таймеры для трэша в подземельях/рейдах (Примечание: это также отключает восстановление способностей на индикаторах)\"\nL.SpamBlockNoShowEventTimers\t\t= \"Не показывать таймеры для событий или подсказок (появление очереди, возрождение босса и т.д.)\"\nL.SpamBlockNoShowUTimers\t= \"Не показывать таймеры, отправленные пользователями (пользов./пулл/отдых)\"\nL.SpamBlockNoCountdowns\t\t= \"Не воспроизводить звуки обратного отсчета\"\n\nL.Area_SpamFilter_Misc\t\t= \"Разное глобальное отключение и параметры фильтра\"\nL.SpamBlockNoSetIcon\t\t= \"Не устанавливать метки на цели\"\nL.SpamBlockNoRangeFrame\t\t= \"Не показывать окно проверки дистанции\"\nL.SpamBlockNoInfoFrame\t\t= \"Не показывать информационное окно\"\nL.SpamBlockNoHudMap\t\t\t= \"Не показывать HudMap\"\nL.Area_SpamFilter_Nameplates= \"Глобальное отключение Nameplate и параметры фильтрации\"\nL.SpamBlockNoNameplate\t\t= \"Не показывать Nameplate Auras (отключает полностью)\"\nL.SpamBlockNoBossGUIDs\t\t= \"Не показывать таймеры главного босса (босс 1) на Plater Nameplates в качестве Nameplate Auras\\n(Вы все равно будете видеть таймеры трэша/босса, если эта функция включена в Plater)\"\nL.SpamBlockTimersWithNameplates\t= \"Не показывать полоски таймера для трэша, если в настройках Plater включено Plater Nameplate Aura CDs (не относится к боям с боссами, которые всегда будут показывать полоски таймера)\"\nL.NameplateFooter\t\t\t= \"Здесь доступны дополнительные функции, если включена функция Plater Nameplates\"\nL.SpamBlockNoYells\t\t\t= \"Не отправлять крики в чат\"\nL.SpamBlockNoNoteSync\t\t= \"Не принимать заметки\"\n\nL.Area_Restore\t\t\t\t= \"Параметры DBM для возврата настроек (восстанавливать ли предыдущее пользов. состояние по окончание работы модулей)\"\nL.SpamBlockNoIconRestore\t= \"Не сохранять состояние меток и восстанавливать их после боя\"\nL.SpamBlockNoRangeRestore\t= \"Не восстанавливать окно проверки дистанции в предыдущее состояние при скрытии модулями\"\n\n-- Tab: Spam Filter\nL.Area_SpamFilter\t\t\t= \"Параметры спам-фильтра\"\nL.DontShowFarWarnings\t\t= \"Не отображать предупреждения/таймеры для событий, которые далеко\"\nL.StripServerName\t\t\t= \"Удалять имя сервера в предупреждениях и таймерах\"\nL.FilterVoidFormSay\t\t\t= \"Не отправлять в чат позицию/отсчёт если находитесь в $spell:47241\"\n\nL.Area_SpecFilter\t\t\t= \"Параметры фильтра по роли\"\nL.FilterTankSpec\t\t\t= \"Фильтровать предупреждения для роли танка, когда не в специализации танка. (примечание: отключение этого параметра не рекомендуется для большинства пользователей, поскольку теперь все предупреждения «таунта» включены по умолчанию)\"\nL.FilterInterruptsHeader\t= \"Фильтровать предупреждения для прерываемых спеллов на основе предпочтений поведения.\"\nL.FilterInterrupts\t\t\t= \"Если кастер не является Вашей текущей целью/фокусом (всегда)\"\nL.FilterInterrupts2\t\t\t= \"Если кастер не является Вашей текущей целью/фокусом (всегда) или сбитие на кд (только босс)\"\nL.FilterInterrupts3\t\t\t= \"Если кастер не является Вашей текущей целью/фокусом (всегда) или сбитие на кд (босс и трэш)\"\nL.FilterInterruptNoteName\t= \"Фильтровать предупреждения для прерываемых спеллов (со счетчиком), если предупреждение не содержит Ваше имя в пользов. заметке\"\nL.FilterDispels\t\t\t\t= \"Фильтровать предупреждения для рассеиваемых спеллов, если Ваш диспел в кулдауне\"\nL.FilterTrashWarnings\t\t= \"Фильтровать предупреждения для трэша в обычных и героических подземельях\"\n\nL.Area_PullTimer\t\t\t= \"Параметры фильтра таймеров пулла/боя/пользов.\"\nL.DontShowPTNoID\t\t\t= \"Блокировать таймер пулла, отправленный из другой зоны\"\nL.DontShowPT\t\t\t\t= \"Не отображать индикатор таймера пулла\"\nL.DontShowPTText\t\t\t= \"Не отображать текст объявления для таймера пулла\"\nL.DontShowPTCountdownText\t= \"Не отображать текст отсчета таймера пулла\"\nL.DontPlayPTCountdown\t\t= \"Не воспроизводить звук отсчета таймера пулла/боя/пользов.\"\nL.PT_Threshold\t\t\t\t= \"Не отображать текст отсчета таймера пулла/боя/пользов. больше: %d\"\n\nL.Area_TimerTracker\t\t\t= \"Параметры TimerTracker\"\nL.PlayTTCountdown\t\t\t= \"Воспроизвести звук обратного отсчета TimerTracker\"\nL.PlayTTCountdownFinished\t= \"Воспроизвести звук окончания обратного отсчета TimerTracker\"\n\nL.Panel_HideBlizzard\t\t= \"Скрыть Blizzard\"\nL.Area_HideBlizzard\t\t\t= \"Настройки скрытия Blizzard\"\nL.HideBossEmoteFrame\t\t= \"Скрывать окно эмоций рейдового босса во время боя с боссом\"\nL.SpamBlockRaidWarning\t\t= \"Фильтрация предупреждений от других DBM\"\nL.SpamBlockBossWhispers\t\t= \"Фильтрация DBM предупреждений шепотом в бою\"\nL.HideWatchFrame\t\t\t= \"Скрывать окно отслеживания заданий во время боя с боссом\"\nL.HideGarrisonUpdates\t\t= \"Скрывать уведомления из гарнизона во время боя с боссом\"\nL.HideGuildChallengeUpdates\t= \"Скрывать уведомления о гильдейских испытаниях во время боя с боссами\"\nL.HideQuestTooltips\t\t\t= \"Скрывать цели заданий в подсказках во время боя с боссами\"\nL.HideTooltips\t\t\t\t= \"Скрывать подсказки во время боя с боссом\"\nL.DisableSFX\t\t\t\t= \"Отключить канал звуковых эффектов во время боя с боссами\"\nL.DisableCinematics\t\t\t= \"Отключить внутриигровые ролики\"\nL.ReportRecount\t\t\t\t= \"Отправлять отчёт Recount после окончания боя с боссом (треб. помощник)\"\nL.ReportSkada\t\t\t\t= \"Отправлять отчёт SkadaRevisited после окончания боя с боссом (треб. помощник)\"\nL.PerCharacterSettings\t\t= \"Использовать отдельные профили для каждого персонажа вместо глобального\"\nL.OnlyFight\t\t\t\t\t= \"Только во время боя, после того, как ролик был показан один раз\"\nL.AfterFirst\t\t\t\t= \"После одного просмотра\"\nL.Always\t\t\t\t\t= \"Всегда\"\nL.CombatOnly\t\t\t\t= \"Отключить в бою (любом)\"\nL.RaidCombat\t\t\t\t= \"Отключить в бою (только боссы)\"\n\nL.Panel_ExtraFeatures\t\t= \"Дополнительные возможности\"\n--\nL.Area_ChatAlerts\t\t\t= \"Параметры оповещений в чате\"\nL.RoleSpecAlert\t\t\t\t= \"Показывать предупреждение, когда Ваша специализация добычи не совпадает с текущей специализацией при присоединении к рейду\"\nL.CheckGear\t\t\t\t\t= \"Показывать предупреждение, когда уровень надетых предметов намного ниже, чем максимальный (40+)\"\nL.WorldBossAlert\t\t\t= \"Показывать предупреждение, когда в Вашем игровом мире ваши друзья или согильдийцы возможно вступают в бой с боссами вне подземелья (неточно, если отправитель в межсерверной зоне)\"\n--\nL.Area_SoundAlerts\t\t\t= \"Параметры звуковых оповещений\"\nL.LFDEnhance\t\t\t\t= \"Проигрывать звук проверки готовности для проверки ролей и приглашений на БГ/ЛФГ через основной аудио канал\"\nL.WorldBossNearAlert\t\t= \"Проигрывать звук проверки готовности, когда неподалеку пулят нужных Вам боссов вне подземелья (переопределяет настройку для конкретного босса)\"\nL.RLReadyCheckSound\t\t\t= \"Проигрывать звук проверки готовности при проверке готовности через основной аудио канал или канал диалогов\"\nL.AFKHealthWarning\t\t\t= \"Звуковое оповещение, если Вы теряете здоровье во время АФК\"\nL.AutoReplySound\t\t\t= \"Звуковое оповещение при получении автоответа шепотом от DBM\"\n--\nL.TimerGeneral\t\t\t\t= \"Параметры таймера\"\nL.SKT_Enabled\t\t\t\t= \"Всегда отображать таймер рекордной победы (переопределяет настройку для конкретного босса)\"\nL.ShowRespawn\t\t\t\t= \"Отсчет времени до появления босса после вайпа\"\nL.ShowQueuePop\t\t\t\t= \"Отсчет оставшегося времени до принятия очереди (поиск группы, БГ и т.д.)\"\n--\nL.Area_AutoLogging\t\t\t= \"Параметры автоматической записи\"\nL.Area_AutoLoggingFilters\t= \"Фильтры автоматический записи\"\nL.Area_AutoLoggingContent\t= \"Содержимое автоматической записи\"\nL.AutologBosses\t\t\t\t= \"Автоматически записывать бои с боссами, используя журнал боя Blizzard (требуется использовать '/dbm pull' перед боссами для совместимости с <a href=\\\"http://www.warcraftlogs.com\\\">|cff3588ffwarcraftlogs.com|r</a>)\"\nL.AdvancedAutologBosses\t\t= \"Автоматически записывать бои с боссами, используя Transcriptor\"\nL.LogOnlyNonTrivial\t\t\t= \"Записывать только специфические бои с рейдовыми боссами (обычные или более сложные актуальные рейды) и Миф+ подземелья\"\n--\nL.Area_3rdParty\t\t\t\t= \"Параметры аддонов третих лиц\"\n--L.oRA3AnnounceConsumables\t= \"Announce oRA3 consumables check on combat start\"\nL.ShowBBOnCombatStart\t\t= \"Выполнять проверку положительных эффектов Big Brother в начале боя\"\nL.BigBrotherAnnounceToRaid\t= \"Объявлять результаты проверки Big Brother в рейд\"\nL.Area_Invite\t\t\t\t= \"Параметры приглашений\"\nL.AutoAcceptFriendInvite\t= \"Автоматически принимать приглашения в группу от друзей\"\nL.AutoAcceptGuildInvite\t\t= \"Автоматически принимать приглашения в группу от согильдийцев\"\nL.Area_Advanced\t\t\t\t= \"Дополнительные настройки\"\nL.FakeBW\t\t\t\t\t= \"Притворяться BigWigs вместо DBM при приверке версий (полезно для гильдий, которые заставляют использовать BigWigs)\"\nL.AITimer\t\t\t\t\t= \"Автоматически генерируйте таймеры для невиданных ранее боев, используя встроенный таймер AI в DBM (полезно для первого вызова тестового босса, такого как бета-версия или PTR). Примечание: это не будет работать должным образом для нескольких аддов с одной и той же способностью.\"\nL.FixCLEUOnCombatStart\t\t= \"Очищать кэш журнала боя в начале/конце битвы и после смены зоны\"\n\nL.Panel_Profile\t\t\t\t= \"Профили\"\nL.Area_CreateProfile\t\t= \"Создание профиля настроек DBM Core\"\nL.EnterProfileName\t\t\t= \"Введите имя профиля\"\nL.CreateProfile\t\t\t\t= \"Создать новый профиль со стандартными настройками\"\nL.Area_ApplyProfile\t\t\t= \"Выбор активного профиля\"\nL.SelectProfileToApply\t\t= \"Выберите профиль для применения\"\nL.Area_CopyProfile\t\t\t= \"Копирование профиля настроек DBM Core\"\nL.SelectProfileToCopy\t\t= \"Выберите профиль для копирования\"\nL.Area_DeleteProfile\t\t= \"Удаление профиля настроек DBM Core\"\nL.SelectProfileToDelete\t\t= \"Выберите профиль для удаления\"\nL.Area_DualProfile\t\t\t= \"Настройки профиля для босс-модулей\"\nL.DualProfile\t\t\t\t= \"Включить поддержку разных настроек босс-модулей для специализаций.<br/>Управление профилями босс-модулей производится с экрана статистики загруженного модуля.\"\n\nL.Area_ModProfile\t\t\t= \"Копирование настроек модуля с другого персонажа/спека или удаление настроек модуля\"\nL.ModAllReset\t\t\t\t= \"Сбросить все настройки модуля\"\nL.ModAllStatReset\t\t\t= \"Сбросить всю статистику модуля\"\nL.SelectModProfileCopy\t\t= \"Скопировать все настройки из\"\nL.SelectModProfileCopySound\t= \"Скопировать настройки звука из\"\nL.SelectModProfileCopyNote\t= \"Скопировать заметки из\"\nL.SelectModProfileCurrent\t= \"Текущий профиля для босс-модулей\"\nL.SelectModProfileDelete\t= \"Удалить настройки модуля для\"\n\nL.Area_ImportExportProfile\t= \"Импорт / экспорт профилей\"\nL.ImportExportInfo\t\t\t= \"Импорт перезапишет Ваш текущий профиль. Делайте это на свой страх и риск.\"\nL.ButtonImportProfile\t\t= \"Импорт профиля\"\nL.ButtonExportProfile\t\t= \"Экспорт профиля\"\nL.ProfileExportTitle\t\t= \"Это ваш текущий профиль с текстовом формате.\"\nL.ProfileExportSubtitle\t= \"Нажмите CTRL-С на вашей клавиатуре для копирования настроек профиля.\"\nL.ProfileImportTitle\t\t= \"Вставить сюда профиль в текстовом формате.\"\nL.ProfileImportSubtitle\t= \"Нажмите CTRL-V для вставки текста настроек DBM.\"\n\n-- Misc\nL.FontType\t\t\t\t\t= \"Выбор шрифта\"\nL.FontStyle\t\t\t\t\t= \"Флаги шрифта\"\nL.FontColor\t\t\t\t\t= \"Цвет шрифта\"\nL.FontShadow\t\t\t\t= \"Тень\"\nL.FontSize\t\t\t\t\t= \"Размер шрифта: %d\"\n\nL.FontHeight\t= 16\n\n-- Retail Globals\nL.LARGE = \"Больше\"\nL.SMALL = \"Меньше\"\nL.PLAYER_DIFFICULTY6 = \"Эпохальный\" -- ID: 24525\nL.PLAYER_DIFFICULTY_TIMEWALKER = \"Путешествие во времени\" -- ID: 25846\n"
  },
  {
    "path": "DBM-GUI/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nif not DBM_GUI_L then DBM_GUI_L = {} end\n\nlocal L = DBM_GUI_L\n\n--L.MainFrame\t= \"Deadly Boss Mods\"\n\nL.TranslationByPrefix\t\t= \"向后移植 \"\nL.TranslationBy\t\t\t= \"Barsoom, Bunny67, Zidras\"\nL.Website\t\t\t\t\t= \"拜訪討論/支援論壇:|cFF73C2FBhttps://discord.gg/CyVWDWS|r.\"\nL.WebsiteButton\t\t\t\t= \"論壇\"\n\nL.OTabBosses\t\t\t\t= \"模組\"\nL.OTabRaids\t\t\t\t\t= \"團隊\"\nL.OTabDungeons\t\t\t\t= \"隊伍/單獨\"\nL.OTabPlugins\t\t\t\t= \"核心插件\"\nL.OTabOptions\t\t\t\t= \"選項\"\nL.OTabAbout\t\t\t\t\t= \"關於\"\n\nL.TabCategory_OTHER\t\t\t= \"其它模組\"\n\nL.BossModLoaded\t\t\t\t= \"%s狀態\"\nL.BossModLoad_now\t\t\t= [[該模組尚未載入。\n當你進入相應副本時其會自動載入。\n你也可以點擊該按鈕手動載入該模組。]]\n\nL.PosX\t\t\t\t\t\t= \"X座標\"\nL.PosY\t\t\t\t\t\t= \"Y座標\"\n\nL.MoveMe\t\t\t\t\t= \"移動\"\nL.Button_OK\t\t\t\t= \"確定\"\nL.Button_Cancel\t\t\t= \"取消\"\nL.Button_LoadMod\t\t\t= \"載入模組\"\nL.Mod_Enabled\t\t\t\t= \"啟用首領模組\"\nL.Mod_Reset\t\t\t\t\t= \"讀取預設值\"\nL.Reset\t\t\t\t\t= \"重置\"\nL.Import\t\t\t\t\t= \"匯入\"\n\nL.Enable\t\t\t\t\t= \"啟用\"\nL.Disable\t\t\t\t\t= \"停用\"\n\nL.NoSound\t\t\t\t\t= \"靜音\"\n\nL.IconsInUse\t\t\t\t= \"此模組已使用的標記\"\n\n-- Tab: Boss Statistics\nL.BossStatistics\t\t\t= \"首領狀態\"\nL.Statistic_Kills\t\t\t= \"勝利：\"\nL.Statistic_Wipes\t\t\t= \"失敗：\"\nL.Statistic_Incompletes\t\t= \"未完成：\"\nL.Statistic_BestKill\t\t= \"最快記錄：\"\nL.Statistic_BestRank\t\t= \"最佳排名：\"\n\n-- Tab: General Options\nL.TabCategory_Options\t\t= \"一般選項\"\nL.Area_BasicSetup\t\t\t= \"初始DBM設置提示\"\nL.Area_ModulesForYou\t\t= \"哪些DBM模組適合您？\"\nL.Area_ProfilesSetup\t\t= \"DBM配置檔使用指南\"\n-- Panel: Core & GUI\nL.Core_GUI\t\t\t\t\t= \"核心 & 圖形界面\"\nL.General\t\t\t\t\t= \"一般DBM核心選項\"\nL.EnableMiniMapIcon\t\t\t= \"顯示小地圖圖示\"\nL.UseSoundChannel\t\t\t= \"設置DBM警告的音效頻道\"\nL.UseMasterChannel\t\t\t= \"主聲道\"\nL.UseDialogChannel\t\t\t= \"對話聲道\"\nL.UseSFXChannel\t\t\t\t= \"音效聲道\"\nL.Latency_Text\t\t\t\t= \"設定最高延遲同步門檻:%d\"\n\nL.Button_RangeFrame\t\t\t= \"顯示/隱藏距離監視器\"\nL.Button_InfoFrame\t\t\t= \"顯示/隱藏訊息框架\"\nL.Button_TestBars\t\t\t= \"測試計時條\"\nL.Button_MoveBars\t\t\t= \"移動計時條\"\nL.Button_ResetInfoRange\t\t= \"重置訊息/距離監視器\"\n\nL.ModelOptions\t\t\t\t= \"3D模型預覽選項\"\nL.EnableModels\t\t\t\t= \"在首領選項中啟用3D模型預覽\"\nL.ModelSoundOptions\t\t\t= \"為模型預覽設置聲音\"\n-- L.ModelSoundShort\t\t\t= SHORT\n-- L.ModelSoundLong\t\t\t= TOAST_DURATION_LONG\n\nL.ResizeOptions\t\t\t\t= \"尺寸調整選項\"\nL.ResizeInfo\t\t\t\t= \"您可以通過點擊右下角並拖動來調整GUI的大小。\"\nL.Button_ResetWindowSize\t= \"重設GUI視窗大小\"\nL.Editbox_WindowWidth\t\t= \"GUI視窗寬度\"\nL.Editbox_WindowHeight\t\t= \"GUI視窗高度\"\n\nL.UIGroupingOptions\t\t\t= \"界面分組選項 (更改這些需要輸入 /reload 來重載界面)\"\nL.GroupOptionsBySpell\t\t= \"按照技能分組 (只支持有效的模組)\"\nL.GroupOptionsExcludeIcon\t= \"按照技能分組排除“設置標記圖示”選項 (它們將像以前一樣在“圖示”類中顯示)\"\nL.AutoExpandSpellGroups\t\t= \"按照技能分組自動擴展選項\"\n--L.ShowSpellDescWhenExpanded\t= \"分組擴展時繼續顯示技能描述\"\nL.NoDescription\t\t\t\t= \"此技能無描述說明\"\n\n-- Panel: Extra Features\nL.Panel_ExtraFeatures\t\t= \"額外功能\"\n\nL.Area_SoundAlerts\t\t\t= \"聲音/閃爍警告選項\"\nL.LFDEnhance\t\t\t\t= \"使用主要或對話聲音頻道播放準備確認音效和閃爍應用程式圖示給角色確認和戰場/隨機團隊進場(I.E. 即使音效被關閉了也會發出音效而且很大聲!)\"\nL.WorldBossNearAlert\t\t= \"當你需要的世界首領在你附近開戰播放準備確認音效和閃爍應用程式圖示\"\nL.RLReadyCheckSound\t\t\t= \"從主要或對話音效頻道播放準備確認音效和閃爍應用程式圖示\"\nL.AFKHealthWarning\t\t\t= \"播放警告聲音和閃爍應用程式圖示假如你在暫離時被攻擊\"\nL.AutoReplySound\t\t\t= \"當接收到DBM自動回覆密語時播放警告聲和閃爍應用程式圖示\"\n--\nL.TimerGeneral\t\t\t\t= \"計時器選項\"\nL.SKT_Enabled\t\t\t\t= \"顯示目前戰鬥的最佳紀錄勝利計時器\"\nL.ShowRespawn\t\t\t\t= \"顯示下一次首領重生計時器\"\nL.ShowQueuePop\t\t\t\t= \"顯示接受彈出佇列的剩餘時間(尋求組隊、戰場..等)\"\n--\n--Auto Logging: Logging toggles/types\nL.Area_AutoLogging\t\t\t= \"自動記錄切換\"\nL.AutologBosses\t\t\t\t= \"自動使用暴雪戰鬥日誌記錄所選內容\"\nL.AdvancedAutologBosses\t\t= \"自動使用Transcriptor紀錄所選內容\"\n--Auto Logging: Global filter Options\nL.Area_AutoLoggingFilters\t= \"自動記錄過濾\"\nL.RecordOnlyBosses\t\t\t= \"不記錄小怪的戰鬥 (只記錄首領。請於首領開打前使用 /dbm pull 以獲取數據)\"\n\nL.DoNotLogLFG\t\t\t\t= \"不記錄地城搜尋器或團隊搜尋器 (佇列的內容)\"\n--Auto Logging: Recorded Content types\nL.Area_AutoLoggingContent\t= \"自動記錄內容\"\nL.LogCurrentMythicRaids\t\t= \"當前等級傳奇團隊副本\"--Retail Only\nL.LogCurrentRaids\t\t\t= \"當前等級團隊\"\nL.LogTWRaids\t\t\t\t= \"時光漫遊 或 克羅米時光團隊副本\"--Retail Only\nL.LogTrivialRaids\t\t\t= \"低等團隊副本 (低於角色等級)\"\nL.LogCurrentMPlus\t\t\t= \"當前等級傳奇+地下城\"--Retail Only\nL.LogCurrentMythicZero\t\t= \"當前等級傳奇0層地下城\"--Retail Only\nL.LogTWDungeons\t\t\t\t= \"時光漫遊 或 克羅米時光地下城\"--Retail Only\nL.LogCurrentHeroic\t\t\t= \"當前等級英雄地下城 (注意：如果您通過地城搜尋器佇列英雄並想要記錄，請關閉地城搜尋器過濾)\"\nL.LogCurrentNormal\t\t\t= \"當前等級普通模式地下城 (注意：如果您通過地城搜尋器佇列英雄並想要記錄，請關閉地城搜尋器過濾)\"\nL.LogTrivialDungeons\t\t= \"低等隊伍副本 (低於角色等級)\"\n--\nL.Area_3rdParty\t\t\t\t= \"協力插件選項\"\nL.oRA3AnnounceConsumables\t= \"在戰鬥開始時通告oRA3消耗品檢查\"\nL.Area_Invite\t\t\t\t= \"邀請選項\"\nL.AutoAcceptFriendInvite\t= \"自動接受來自朋友的隊伍邀請\"\nL.AutoAcceptGuildInvite\t\t= \"自動接受來自公會成員的隊伍邀請\"\nL.Area_Advanced\t\t\t\t= \"進階選項\"\nL.FakeBW\t\t\t\t\t= \"假裝使用BigWigs版本檢查而不是用DBM版本(適合用在工會強制使用BigWigs時)\"\nL.AITimer\t\t\t\t\t= \"DBM為從未遭遇的戰鬥使用內建的AI計時器來自動生成計時條(在初期Beta或PTR首次遭遇首領時之測試非常有幫助)。注意：這可能不能正確運作在有著相同技能的多重目標上。\"\nL.FixCLEUOnCombatStart\t\t= \"在拉/戰鬥結束和區域更改時清除戰鬥日誌緩存\"\n\n-- Panel: Profiles\nL.Panel_Profile\t\t\t\t= \"配置檔\"\nL.Area_CreateProfile\t\t= \"建立核心選項配置檔\"\nL.EnterProfileName\t\t\t= \"輸入配置檔名稱\"\nL.CreateProfile\t\t\t\t= \"建立預設設定值的新配置檔\"\nL.Area_ApplyProfile\t\t\t= \"套用DBM核心選項配置檔\"\nL.SelectProfileToApply\t\t= \"選擇配置檔套用\"\nL.Area_CopyProfile\t\t\t= \"複製DBM核心選項配置檔\"\nL.SelectProfileToCopy\t\t= \"選擇配置檔複製\"\nL.Area_DeleteProfile\t\t= \"移除DBM核心選項配置檔\"\nL.SelectProfileToDelete\t\t= \"選擇配置檔刪除\"\nL.Area_DualProfile\t\t\t= \"首領模組配置檔選項\"\nL.DualProfile\t\t\t\t= \"啟用多首領模組專精設定檔。可依據你的專精去設定不同的首領選項設定。(首領配置檔管理在首領模組頁面下)\"\n\nL.Area_ModProfile\t\t\t= \"從其他角色/專精複製或刪除模組設定\"\nL.ModAllReset\t\t\t\t= \"重置所有模組設定\"\nL.ModAllStatReset\t\t\t= \"重置所有模組狀態\"\nL.SelectModProfileCopy\t\t= \"複製所有設定\"\nL.SelectModProfileCopySound\t= \"只複製音效設定\"\nL.SelectModProfileCopyNote\t= \"只複製註記設定\"\nL.SelectModProfileCurrent\t= \"當前老闆模組簡介\"\nL.SelectModProfileDelete\t= \"刪除模組設定\"\n\nL.Area_ImportExportProfile\t= \"匯入/匯出 設定檔\"\nL.ImportExportInfo\t\t\t= \"匯入會覆寫您當前的設定檔，後果請自負。\"\nL.ButtonImportProfile\t\t= \"匯入設定檔\"\nL.ButtonExportProfile\t\t= \"匯出設定檔\"\nL.ProfileExportTitle\t\t= \"這是你目前的設定文字.\"\nL.ProfileExportSubtitle\t= \"按下 CTRL-C 複製 DBM 的設定到你的剪貼簿\"\nL.ProfileImportTitle\t\t= \"將設定檔以文字格式貼在這.\"\nL.ProfileImportSubtitle\t= \"按下 CTRL-V 貼上 DBM 的設定文字\"\n\nL.ImportErrorOn\t\t\t\t= \"缺少設置中的自定義聲音: %s\"\nL.ImportVoiceMissing\t\t= \"缺少語音包: %s\"\n\n-- Tab: Alerts\nL.TabCategory_Alerts\t\t= \"警告\"\nL.Area_SpecAnnounceConfig\t= \"特別警告視覺和聲音指南\"\nL.Area_SpecAnnounceNotes\t= \"特別警告註記指南\"\nL.Area_VoicePackInfo\t\t= \"有關DBM語音包的訊息\"\n-- Panel: Raidwarning\nL.Tab_RaidWarning\t\t\t= \"警告\"\nL.RaidWarning_Header\t\t= \"警告選項\"\nL.RaidWarnColors\t\t\t= \"警告顏色\"\nL.RaidWarnColor_1\t\t\t= \"顏色1\"\nL.RaidWarnColor_2\t\t\t= \"顏色2\"\nL.RaidWarnColor_3\t\t\t= \"顏色3\"\nL.RaidWarnColor_4\t\t\t= \"顏色4\"\nL.InfoRaidWarning\t\t\t= [[你可以對團隊警告的顏色及其位置進行設定。\n在這裡會顯示例如“玩家X中了Y效果”之類的資訊。]]\nL.ColorResetted\t\t\t= \"該顏色設置已重置\"\nL.ShowWarningsInChat\t\t= \"在聊天視窗中顯示通告\"\nL.ShowFakedRaidWarnings\t\t= \"以偽裝團隊警告資訊的方式顯示警告內容\"\nL.WarningIconLeft\t\t\t= \"左側顯示圖示\"\nL.WarningIconRight\t\t\t= \"右側顯示圖示\"\nL.WarningIconChat\t\t\t= \"在聊天視窗顯示圖示\"\nL.WarningAlphabetical\t\t= \"依字母排序\"\nL.Warn_Duration\t\t\t\t= \"警告持續時間：%0.1f秒\"\nL.None\t\t\t\t\t\t= \"無\"\nL.Random\t\t\t\t\t= \"隨機\"\nL.Outline\t\t\t\t\t= \"描邊\"\nL.ThickOutline\t\t\t\t= \"厚描邊\"\nL.MonochromeOutline\t\t\t= \"單色描邊\"\nL.MonochromeThickOutline\t= \"單色加粗描邊\"\nL.RaidWarnSound\t\t\t\t= \"在團隊通告時播放音效\"\n\n-- Panel: Spec Warn Frame\nL.Panel_SpecWarnFrame\t\t= \"特別提示\"\nL.Area_SpecWarn\t\t\t\t= \"特別提示選項\"\nL.SpecWarn_ClassColor\t\t= \"為特別提示套用職業顏色\"\nL.ShowSWarningsInChat\t\t= \"在聊天視窗中顯示特別提示\"\nL.SWarnNameInNote\t\t\t= \"使用特別提示5選項如果自訂註記有包含你的名字\"\nL.SpecialWarningIcon\t\t= \"在特別提示上顯示圖示\"\nL.ShortTextSpellname\t\t= \"使用簡短法術名稱文字(如果可用)\"\nL.SpecWarn_FlashFrameRepeat\t= \"閃爍%d次\"\nL.SpecWarn_Flash\t\t\t= \"閃爍螢幕\"\nL.SpecWarn_Vibrate\t\t\t= \"震動控制器\"\nL.SpecWarn_FlashRepeat\t\t= \"反覆閃爍\"\nL.SpecWarn_FlashColor\t\t= \"閃爍顏色:%d\"\nL.SpecWarn_FlashDur\t\t\t= \"閃爍長度:%0.1f\"\nL.SpecWarn_FlashAlpha\t\t= \"閃爍透明度:%0.1f\"\nL.SpecWarn_DemoButton\t\t= \"顯示範例\"\nL.SpecWarn_ResetMe\t\t\t= \"重置為預設值\"\nL.SpecialWarnSoundOption\t= \"設置預設音效\"\nL.SpecialWarnHeader1\t\t= \"類型1: 設置影響您或您的操作的普通優先級提示選擇\"\nL.SpecialWarnHeader2\t\t= \"類型2: 設置影響每個人的一般優先級提示選擇\"\nL.SpecialWarnHeader3\t\t= \"類型3: 設置高優先級提示的選擇\"\nL.SpecialWarnHeader4\t\t= \"類型4: 設置高優先級運行特別提示的選擇\"\nL.SpecialWarnHeader5\t\t= \"類型5: 設置提示選項，並在註釋中包含您的玩家名稱\"\n\n-- Panel: Generalwarnings\nL.Tab_GeneralMessages\t\t= \"聊天訊息\"\nL.CoreMessages\t\t\t\t= \"核心訊息選項\"\nL.ShowPizzaMessage\t\t\t= \"在聊天視窗顯示計時器廣播訊息\"\nL.ShowAllVersions\t\t\t= \"當運行版本檢查時在聊天視窗顯示所有隊伍成員的首領模組版本。(如果停用，依舊顯示過期/目前總結)\"\nL.ShowReminders\t\t\t\t= \"顯示有關缺少子模組、禁用子模組、子模組修復、子模組過期以及仍啟用靜音模式的提醒訊息。\"\n\nL.CombatMessages\t\t\t= \"戰鬥訊息選項\"\nL.ShowEngageMessage\t\t= \"在聊天視窗顯示開戰訊息\"\nL.ShowDefeatMessage\t\t= \"在聊天視窗顯示戰勝/滅團訊息\"\nL.ShowGuildMessages\t\t= \"在聊天視窗顯示公會的開戰/戰勝/滅團的訊息\"\nL.ShowGuildMessagesPlus\t\t= \"同時也顯示公會史詩鑰石的開戰/戰勝/滅團的訊息(需要團隊選項)\"\n\nL.Area_ChatAlerts\t\t\t= \"額外警告選項\"\nL.RoleSpecAlert\t\t\t\t= \"當你加入團隊時拾取專精不符合你目前專精顯示警告訊息\"\nL.CheckGear\t\t\t\t\t= \"開怪時顯示裝備警告訊息 (當你裝備的裝備等級低於包包裡40等以上或主手武器沒有裝備時顯示警告訊息)\"\nL.WorldBossAlert\t\t\t= \"當你的公會成員或是朋友可能在你的伺服器上開戰世界首領時顯示警告訊息(如果發送者是被戰復的會不準確)\"\nL.WorldBuffAlert\t\t\t= \"當你的伺服器的世界增益啟動時顯示警告訊息以及計時器\"\n\nL.Area_BugAlerts\t\t\t= \"錯誤回報警報選項\"\nL.BadTimerAlert\t\t\t\t= \"當DBM檢測到計時器錯誤且至少有1秒不正確時顯示聊天訊息\"\nL.BadIDAlert\t\t\t\t= \"當DBM檢測到使用的是無效法術或紀錄ID時顯示聊天訊息\"\n\n-- Panel: Spoken Alerts Frame\nL.Panel_SpokenAlerts\t\t= \"語音警告\"\nL.Area_VoiceSelection\t\t= \"語音選擇\"\nL.CountdownVoice\t\t\t= \"設置主要倒數計時語音\"\nL.CountdownVoice2\t\t\t= \"設置次要倒數計時語音\"\nL.CountdownVoice3\t\t\t= \"設置第三倒數計時語音\"\nL.PullVoice\t\t\t\t\t= \"設置開怪計時器的語音\"\nL.VoicePackChoice\t\t\t= \"設置語音警告的語音包\"\nL.MissingVoicePack\t\t\t= \"缺少語音包 (%s)\"\nL.Area_CountdownOptions\t\t= \"倒數選項\"\nL.Area_VoicePackReplace\t\t= \"語音包替換選項 (選擇那些語音包要啟用、靜音以及替換)\"\nL.VPReplaceNote\t\t\t\t= \"注意: 語音包永遠不會更改或刪除警告聲音。\\n當替換語音包時，只是被簡單地靜音。\"\nL.ReplacesAnnounce\t\t\t= \"替換提示聲音 (注意: 語音包除了階段轉換以及小怪外很少使用)\"\nL.ReplacesSA1\t\t\t\t= \"替換特別提示 1 聲音 (個人的 'pvp拔旗' 非地板技能警告)\"\nL.ReplacesSA2\t\t\t\t= \"替換特別提示 2 聲音 (每個人 '當心')\"\nL.ReplacesSA3\t\t\t\t= \"替換特別提示 3 聲音 (高優先級的 'airhorn')\"\nL.ReplacesSA4\t\t\t\t= \"替換特別提示 4 聲音 (高優先級的 '快跑')\"\nL.ReplacesGTFO\t\t\t\t= \"替換特別提示 地板技能警告 聲音\"\nL.ReplacesCustom\t\t\t= \"替換特別提示 自定義使用者設置 (每個警告)(不建議)\"\nL.Area_VoicePackAdvOptions\t= \"語音包進階選項\"\nL.SpecWarn_AlwaysVoice\t\t= \"總是播放所有語音警告 (即使已禁用特別警告，對團隊領隊是有用的，除此之外不建議使用)\"\nL.VPDontMuteSounds\t\t\t= \"當使用語音包時禁用常規警報的靜音 (只有當您希望在警報期間同時聽到兩者時才使用)\"\nL.Area_VPLearnMore\t\t\t= \"了解更多關於語音包以及如何使用這些選項的訊息\"\nL.VPLearnMore\t\t\t\t= \"|cFF73C2FBhttps://github.com/DeadlyBossMods/DBM-Retail/wiki/%5BGuide%5D-DBM-&-Voicepacks#2022-update|r\"\nL.Area_BrowseOtherVP\t\t= \"在Curse上瀏覽其他語言包\"\nL.BrowseOtherVPs\t\t\t= \"|cFF73C2FBhttps://www.curseforge.com/wow/addons/search?search=dbm+voice|r\"\nL.Area_BrowseOtherCT\t\t= \"在Curse上瀏覽倒數包\"\nL.BrowseOtherCTs\t\t\t= \"|cFF73C2FBhttps://www.curseforge.com/wow/addons/search?search=dbm+count+pack|r\"\n\n-- Panel: Event Sounds\nL.Panel_EventSounds\t\t\t\t= \"事件音效\"\nL.Area_SoundSelection\t\t\t= \"音效選擇 (使用滑鼠滾輪捲動選單)\"\nL.EventVictorySound\t\t\t\t= \"設定戰鬥勝利時的音效\"\nL.EventWipeSound\t\t\t\t= \"設定滅團或重置時的音效\"\nL.EventEngagePT\t\t\t\t\t= \"設定開怪倒數開始的音效\"\nL.EventEngageSound\t\t\t\t= \"設定戰鬥開戰時的音效\"\nL.EventDungeonMusic\t\t\t\t= \"設定在地城/團隊中播放的音樂\"\nL.EventEngageMusic\t\t\t\t= \"設置戰鬥期間播放的音樂\"\nL.Area_EventSoundsExtras\t\t= \"事件音效選項\"\nL.EventMusicCombined\t\t\t= \"允許在地城和戰鬥選擇的所有音效選項（更改此選項需要UI重載以生效）\"\nL.Area_EventSoundsFilters\t\t= \"事件音效過濾條件\"\nL.EventFilterDungMythicMusic\t= \"不要在傳奇/傳奇+難度播放地城音樂\"\nL.EventFilterMythicMusic\t\t= \"不要在傳奇/傳奇+難度播放戰鬥音樂\"\n\n-- Tab: HealthFrame\nL.Panel_HPFrame\t\t\t\t= \"血量框架\"\nL.Area_HPFrame\t\t\t\t= \"血量框架選項\"\nL.HP_Enabled\t\t\t\t= \"總是顯示血量框架 (覆蓋首領特定的選項)\"\nL.HP_GrowUpwards\t\t\t= \"血量框架向上延伸\"\nL.HP_ShowDemo\t\t\t\t= \"顯示血量框架\"\nL.BarWidth\t\t\t\t\t= \"寬度: %d\"\n\n-- Tab: Timers\nL.TabCategory_Timers\t\t= \"計時條\"\nL.Area_ColorBytype\t\t\t= \"計時條分類著色指南\"\n-- Panel: Color by Type\nL.Panel_ColorByType\t\t\t= \"計時條類型顏色\"\nL.AreaTitle_BarColors\t\t= \"根據計時條類型上色\"\nL.BarTexture\t\t\t\t= \"計時條材質\"\nL.BarStyle\t\t\t\t\t= \"計時條動作\"\nL.BarDBM\t\t\t\t\t= \"經典 (現有的小計時條滑到大條的錨點)\"\nL.BarSimple\t\t\t\t\t= \"簡單 (小計時條消失，創建新的大計時條)\"\nL.BarStartColor\t\t\t\t= \"開始顏色\"\nL.BarEndColor\t\t\t\t= \"結束顏色\"\nL.Bar_Height\t\t\t\t= \"計時條高度:%d\"\nL.Slider_BarOffSetX\t\t= \"X偏移:%d\"\nL.Slider_BarOffSetY\t\t= \"Y偏移:%d\"\nL.Slider_BarWidth\t\t\t= \"寬度:%d\"\nL.Slider_BarScale\t\t\t= \"尺寸:%0.2f\"\nL.BarSaturation\t\t\t\t= \"小型計時條的飽和度 (當大計時條被停用時): %0.2f\"\n\n--Types\nL.BarStartColorAdd\t\t\t= \"開始顏色\\n(小怪)\"\nL.BarEndColorAdd\t\t\t= \"結束顏色\\n(小怪)\"\nL.BarStartColorAOE\t\t\t= \"開始顏色\\n(AOE)\"\nL.BarEndColorAOE\t\t\t= \"結束顏色\\n(AOE)\"\nL.BarStartColorDebuff\t\t= \"開始顏色\\n(點名技能)\"\nL.BarEndColorDebuff\t\t\t= \"結束顏色\\n(點名技能)\"\nL.BarStartColorInterrupt\t= \"開始顏色\\n(中斷)\"\nL.BarEndColorInterrupt\t\t= \"結束顏色\\n(中斷)\"\nL.BarStartColorRole\t\t\t= \"開始顏色\\n(角色)\"\nL.BarEndColorRole\t\t\t= \"結束顏色\\n(角色)\"\nL.BarStartColorPhase\t\t= \"開始顏色\\n(階段轉換)\"\nL.BarEndColorPhase\t\t\t= \"結束顏色\\n(階段轉換)\"\nL.BarStartColorUI\t\t\t= \"開始顏色\\n(自訂)\"\nL.BarEndColorUI\t\t\t\t= \"結束顏色\\n(自訂)\"\n--Type 7 options\nL.Bar7Header\t\t\t\t= \"自訂計時條選項\"\nL.Bar7ForceLarge\t\t\t= \"總是使用大計時條\"\nL.Bar7CustomInline\t\t\t= \"使用自訂的'!'內嵌圖示\"\n--Dropdown Options\nL.CBTGeneric\t\t\t\t= \"一般\"\nL.CBTAdd\t\t\t\t\t= \"小怪\"\nL.CBTAOE\t\t\t\t\t= \"AOE\"\nL.CBTTargeted\t\t\t\t= \"點名技能\"\nL.CBTInterrupt\t\t\t\t= \"中斷\"\nL.CBTRole\t\t\t\t\t= \"角色類型\"\nL.CBTPhase\t\t\t\t\t= \"階段轉換\"\nL.CBTImportant\t\t\t\t= \"重要(自訂)\"\nL.CVoiceOne\t\t\t\t\t= \"倒數語音 1\"\nL.CVoiceTwo\t\t\t\t\t= \"倒數語音 2\"\nL.CVoiceThree\t\t\t\t= \"倒數語音 3\"\n\n-- Panel: Timers\nL.Panel_Appearance\t\t\t= \"計時條外觀\"\nL.Panel_Behavior\t\t\t= \"計時條動作\"\nL.AreaTitle_BarSetup\t\t= \"計時條外觀選項\"\nL.AreaTitle_Behavior\t\t= \"計時條動作選項\"\nL.AreaTitle_BarSetupSmall\t= \"小型計時條設置\"\nL.AreaTitle_BarSetupHuge\t= \"大型計時條設置\"\nL.AreaTitle_BarSetupVariance\t= \"差異條選項\"\nL.EnableHugeBar\t\t\t= \"開啟大型計時條(2號計時條)\"\nL.EnableVarianceBar \t\t\t= \"啟用差異條\"\nL.VarianceTransparency\t\t\t= \"差異條透明度: %0.1f\"\nL.VarianceTimerTextBehavior\t\t= \"設定差異計時器文字行為\"\nL.ZeroatWindowEnds\t\t\t\t= \"文字在冷卻視窗的末端達到0\"\nL.ZeroatWindowStartPause\t\t= \"文字在冷卻視窗的開頭和暫停時達到零\"\nL.ZeroatWindowStartRestart\t\t= \"文字在冷卻視窗的開頭達到零，然後重新啟動\"\nL.ZeroatWindowStartNeg\t\t\t= \"文字在冷卻視窗的開頭達到零，然後變為負數\"--Default\nL.BarIconLeft\t\t\t\t= \"左側顯示圖示\"\nL.BarIconRight\t\t\t\t= \"右側顯示圖示\"\nL.ExpandUpwards\t\t\t\t= \"計時條向上延伸\"\nL.FillUpBars\t\t\t\t= \"填滿計時條\"\nL.ClickThrough\t\t\t\t= \"禁用鼠標事件(允許你點擊穿透計時條)\"\nL.Bar_Decimal\t\t\t\t= \"%d秒以下顯示小數點\"\nL.Bar_Alpha\t\t\t\t\t= \"透明度: %0.1f\"\nL.Bar_EnlargeTime\t\t\t= \"計時條時間低於: %d時放大\"\nL.BarSpark\t\t\t\t\t= \"計時條閃光\"\nL.BarFlash\t\t\t\t\t= \"快結束時閃爍計時條\"\nL.BarSort\t\t\t\t\t= \"依剩餘時間排序\"\nL.BarColorByType\t\t\t= \"根據類型上色\"\nL.Highest\t\t\t\t\t= \"頂部最高\"\nL.Lowest\t\t\t\t\t= \"頂部最低\"\nL.NoBarFade\t\t\t\t\t= \"使用開始/結束顏色作為小型/大型顏色，而不是逐漸改變顏色\"\nL.BarInlineIcons\t\t\t= \"顯示嵌入圖示\"\nL.ShortTimerText\t\t\t= \"使用較短的計時器文字(如果可用時)\"\nL.StripTimerText\t\t\t= \"剝離 冷卻/下次 計時器\"\nL.KeepBar\t\t\t\t\t= \"保持計時器啟用直到技能施放\"\nL.KeepBar2\t\t\t\t\t= \"(當有支援的模組時)\"\nL.FadeBar\t\t\t\t\t= \"隱藏已超出距離技能的計時器\"\nL.BarSkin\t\t\t\t\t= \"計時條外觀\"\n\n-- Tab: Global Disables & Filters\nL.TabCategory_Filters\t\t= \"全局禁用及過濾\"\nL.Area_DBMFiltersSetup\t\t= \"DBM過濾器指南\"\nL.Area_BlizzFiltersSetup\t= \"暴雪過濾器指南\"\n-- Panel: DBM Features\nL.Panel_SpamFilter\t\t\t\t\t= \"DBM功能設置\"\nL.Area_SpamFilter_Anounces\t\t\t= \"全局警告禁用及過濾選項\"\nL.SpamBlockNoShowAnnounce\t\t\t= \"不顯示任何提示文字或播放警告音效\"\nL.SpamBlockNoShowTgtAnnounce\t\t= \"不顯示目標的提示文字或播放警告音效 (上列選項會覆蓋此選項)\"\nL.SpamBlockNoTrivialSpecWarnSound\t= \"如果相對你等級是不重要的內容則不要播放特別提示音效 (播放使用者選擇的標準提示音效替代)\"\n\nL.Area_SpamFilter_SpecRoleFilters\t= \"特別提示類型過濾（控制DBM要怎麼做）\"\nL.SpamSpecRoleDispel\t\t\t\t= \"過濾 '驅散/偷取' 警報\"\nL.SpamSpecRoleInterrupt\t\t\t\t= \"過濾 '打斷' 警報\"\nL.SpamSpecRoleDefensive\t\t\t\t= \"過濾 '減傷' 警報\"\nL.SpamSpecRoleTaunt\t\t\t\t\t= \"過濾 '嘲諷' 警報\"\nL.SpamSpecRoleSoak\t\t\t\t\t= \"過濾 '吸收' 警報\"\nL.SpamSpecRoleStack\t\t\t\t\t= \"過濾 '疊加層數' 警報\"\nL.SpamSpecRoleSwitch\t\t\t\t= \"過濾 '切換目標''小怪' 警報\"\nL.SpamSpecRoleGTFO\t\t\t\t\t= \"過濾 '地面有害技能' 警報\"\n\nL.Area_SpamFilter_SpecFeatures\t\t= \"特別提示功能切換\"\nL.SpamBlockNoSpecWarnText\t\t\t= \"不顯示特別提示文字\"\nL.SpamBlockNoSpecWarnFlash\t\t\t= \"特別提示時不閃爍螢幕\"\nL.SpamBlockNoSpecWarnVibrate\t\t= \"特別提示時不震動控制器\"\nL.SpamBlockNoSpecWarnSound\t\t\t= \"不播放特別提示音效 (如果在“語音警告”面板中啟用了語音包，則仍允許語音包)\"\nL.SpamBlockRaidWarning\t\t\t\t= \"過濾其他首領模組的警告\"\nL.SpamBlockBossWhispers\t\t\t\t= \"當戰鬥時過濾 DBM 密語警告\"\n\nL.Area_SpamFilter_Timers\t\t\t= \"全局計時禁用及過濾選項\"\nL.SpamBlockNoShowBossTimers\t\t\t= \"不顯示地城/團隊首領的計時器\"\nL.SpamBlockNoShowTrashTimers\t\t= \"不顯示地城/團隊小怪的計時器(注意: 這也會停用名條的技能冷卻)\"\nL.SpamBlockNoShowEventTimers\t\t= \"不顯示事件與提示計時器(佇列提示/首領重生..等)\"\nL.SpamBlockNoShowUTimers\t= \"不顯示玩家送出的計時器(自訂/拉怪/休息)\"\nL.SpamBlockNoCountdowns\t\t= \"不播放倒數音效\"\n\nL.Area_SpamFilter_Misc\t\t= \"全局其他禁用及過濾選項\"\nL.SpamBlockNoSetIcon\t\t= \"不設置標記在目標上\"\nL.SpamBlockNoRangeFrame\t\t= \"不顯示距離框架\"\nL.SpamBlockNoInfoFrame\t\t= \"不顯示訊息框架\"\nL.SpamBlockNoHudMap\t\t\t= \"不要顯示HudMap\"\nL.SpamBlockNoNameplate\t\t= \"不要顯示名條光環 \"\nL.SpamBlockNoYells\t\t\t= \"不送出大喊至頻道\"\nL.SpamBlockNoNoteSync\t\t= \"不接受註記分享\"\n\nL.Area_Restore\t\t\t\t= \"DBM還原選項(DBM是否還原至使用者過去狀態)\"\nL.SpamBlockNoIconRestore\t= \"不在戰鬥結束後記住和還原團隊圖示狀態\"\nL.SpamBlockNoRangeRestore\t= \"不因模組預設值還原距離框架的狀態\"\n\nL.Area_SpamFilter\t\t\t= \"垃圾過濾選項\"\nL.DontShowFarWarnings\t\t= \"不發送距離過遠的事件提示/計時器\"\nL.StripServerName\t\t\t= \"隱藏警告、計時器、距離檢測以及資訊框架的玩家伺服器名稱\"\nL.FilterVoidFormSay\t\t\t= \"在$spell:47241時不要發送圖示/倒數計時聊天喊話(仍會發送標準聊天喊話)\"\n\nL.Area_SpecFilter\t\t\t= \"角色職責過濾選項\"\nL.FilterTankSpec\t\t\t= \"非坦克角色職責時過濾掉坦克專精的特定警告 (註:不建議玩家關閉此選項因大多數的坦克嘲諷警告都是預設開啟。)\"\nL.FilterInterruptsHeader\t= \"過濾可中斷技能的警告基於以下行為偏好。\"\nL.SWFNever\t\t\t\t\t= \"永不\"\nL.FilterInterrupts\t\t\t= \"如果施法者不是你的目標/專注目標(總是)。\"\nL.FilterInterrupts2\t\t\t= \"如果施法者不是你的目標/專注目標(總是)或中斷在冷卻中(只適用首領)\"\nL.FilterInterrupts3\t\t\t= \"如果施法者不是你的目標/專注目標(總是)或中斷在冷卻中(首領&小怪)\"\nL.FilterInterruptNoteName\t= \"過濾可中斷技能的警告(與次數)，如果自訂註記警告沒有包含你的名字\"\nL.FilterDispels\t\t\t\t= \"過濾可驅散技能如果你的驅散技正在冷卻中\"\nL.FilterTrashWarnings\t\t= \"在普通與英雄地城過濾所有的小怪警告\"\n\nL.Area_PullTimer\t\t\t= \"開怪、休息、戰鬥和自定義計時器過濾器選項\"\nL.DontShowPTNoID\t\t\t= \"阻擋與你不同區域ID送出的開怪倒數計時條\"\nL.DontShowPT\t\t\t\t= \"不要顯示開怪/休息倒數計時條\"\nL.DontShowPTText\t\t\t= \"不要顯示開怪/休息提示文字\"\nL.DontShowPTCountdownText\t= \"不要顯示開怪計時倒數文字\"\nL.DontPlayPTCountdown\t\t= \"完全不要播放開怪/休息/開戰/自訂計時器倒數音效\"\nL.PT_Threshold\t\t\t\t= \"不要播放高於%d秒以上的休息/開戰/自訂倒數計時器音效\"\n\nL.Area_TimerTracker\t\t\t= \"TimerTracker 選項\"\nL.PlayTT\t\t\t\t\t= \"启用 TimerTracker\"\nL.PlayTTCountdown\t\t\t= \"播放 TimerTracker 倒計時聲音\"\nL.PlayTTCountdownFinished\t= \"播放 TimerTracker 倒計時完成聲音\"\n\n-- Panel: Blizzard Features\nL.Panel_HideBlizzard\t\t= \"暴雪內建功能設置\"\nL.Area_HideBlizzard\t\t\t= \"禁用及隱藏暴雪功能選項\"\nL.HideBossEmoteFrame\t\t= \"首領戰鬥時隱藏團隊首領表情框架\"\nL.HideWatchFrame\t\t\t= \"首領戰鬥時隱藏任務目標框架。如果沒有追蹤中的成就，或是不在傳奇+。\"\nL.HideGarrisonUpdates\t\t= \"首領戰鬥時隱藏追隨者任務完成提示\"\nL.HideGuildChallengeUpdates\t= \"首領戰鬥時隱藏公會挑戰完成提示\"\nL.HideQuestTooltips\t\t\t= \"首領戰鬥時隱藏任務目標提示\"\nL.HideTooltips\t\t\t\t= \"首領戰鬥時完全地隱藏滑鼠提示\"\nL.DisableSFX\t\t\t\t= \"首領戰鬥時禁用音效頻道（注意：如果啟用此選項，則即使戰鬥進入時音效未打開，戰鬥結束時也會打開聲音效果）\"\nL.DisableCinematics\t\t\t= \"禁用遊戲中的過場動畫\"\nL.ReportRecount\t\t\t\t= \"在boss遭遇結束後發送Recount報告（需要協助）\"\nL.ReportSkada\t\t\t\t= \"在boss結束後發送SkadaRevisited報告（需要協助）\"\nL.OnlyFight\t\t\t\t\t= \"只有戰鬥中，每次動畫播放一次之後\"\nL.AfterFirst\t\t\t\t= \"在副本中，每次動畫播放一次之後\"\nL.CombatOnly\t\t\t\t= \"在任何戰鬥中停用\"\nL.RaidCombat\t\t\t\t= \"只在首領戰鬥中停用\"\n\n-- Panel: Privacy\nL.Tab_Privacy\t\t\t\t= \"隱私控制\"\nL.Area_WhisperMessages\t\t= \"密語訊息選項\"\nL.AutoRespond\t\t\t\t= \"啟用戰鬥中自動密語回覆\"\nL.WhisperStats\t\t\t\t= \"在密語回應中加入戰勝/滅團狀態\"\nL.DisableStatusWhisper\t\t= \"停用整個團隊的狀態密語(需要為團隊領隊)。只適用於普通/英雄/傳奇難度與傳奇＋地城\"\nL.Area_SyncMessages\t\t\t= \"插件同步選項\"\nL.DisableGuildStatus\t\t= \"停用進度訊息同步到公會(如果為領隊，整個隊伍都會禁用。)\"\nL.EnableWBSharing\t\t\t= \"當同個伺服器的公會與戰網好友開怪/擊敗世界首領時共享訊息。\"\n\n-- Tab: Frames & Integrations\nL.TabCategory_Frames\t\t= \"框架 & 整合\"\nL.Area_NamelateInfo\t\t\t= \"DBM名條光環資訊\"\n-- Panel: InfoFrame\nL.Panel_InfoFrame\t\t\t= \"訊息框架\"\n\n-- Panel: Range\nL.Panel_Range\t\t\t\t= \"距離框架\"\n\n-- Panel: Nameplate\nL.Panel_Nameplates\t\t\t= \"名條\"\nL.UseNameplateHandoff\t\t= \"將名條光環請求移交給支持的名條插件 (KuiNameplates, Threat Plates, Plater) 而不是內部處理。 推薦使用此選項，因為它允許通過名條插件完成更高級的功能和配置\"\nL.Area_NPStyle\t\t\t\t= \"風格 (注意：僅在DBM處理名條時配置風格。)\"\nL.NPAuraSize\t\t\t\t= \"光環像素大小 (平方): %d\"\n\n-- Misc\nL.Area_General\t\t\t\t= \"一般\"\nL.Area_Position\t\t\t\t= \"位置\"\nL.Area_Style\t\t\t\t= \"風格\"\n\nL.FontSize\t\t\t\t\t= \"字型大小:%d\"\nL.FontStyle\t\t\t\t\t= \"字型風格\"\nL.FontColor\t\t\t\t\t= \"文字顏色\"\nL.FontShadow\t\t\t\t= \"陰影\"\nL.FontType\t\t\t\t\t= \"選擇字型\"\n\nL.FontHeight\t= 18\n\n-- Retail Globals\nL.LARGE = \"大\"\nL.SMALL = \"小\"\nL.PLAYER_DIFFICULTY6 = \"傳奇模式\" -- ID: 24525\nL.PLAYER_DIFFICULTY_TIMEWALKER = \"時光漫遊\" -- ID: 25846\n"
  },
  {
    "path": "DBM-GUI/modules/ListFrameButtonsPrototype.lua",
    "content": "local setmetatable, type, ipairs, tinsert = setmetatable, type, ipairs, table.insert\nlocal DBM, DBM_GUI = DBM, DBM_GUI\n\nlocal function GetDepth(self, parentID, depth) -- Called internally\n\tdepth = depth or 1\n\tfor _, v in ipairs(self.buttons) do\n\t\tif v.frame.ID == parentID then\n\t\t\tif not v.parentID then\n\t\t\t\treturn depth + 1\n\t\t\telse\n\t\t\t\tdepth = depth + GetDepth(self, v.parentID, depth)\n\t\t\tend\n\t\tend\n\tend\n\treturn depth\nend\n\nlocal function GetVisibleSubTabs(self, parentID, tabs)\n\tfor _, v in ipairs(self.buttons) do\n\t\tif v.parentID == parentID then\n\t\t\ttinsert(tabs, v)\n\t\t\tif v.frame.showSub then\n\t\t\t\tGetVisibleSubTabs(self, v.frame.ID, tabs)\n\t\t\tend\n\t\tend\n\tend\nend\n\nlocal function SetParentHasChilds(self, parentID)\n\tif not parentID then\n\t\treturn\n\tend\n\tfor _, v in ipairs(self.buttons) do\n\t\tif v.frame.ID == parentID then\n\t\t\tv.frame.haschilds = true\n\t\tend\n\tend\nend\n\nlocal ListFrameButtonsPrototype = {}\n\nfunction ListFrameButtonsPrototype:CreateCategory(frame, parentID)\n\tif type(frame) ~= \"table\" then\n\t\tDBM:AddMsg(\"Failed to create category - frame is not a table\")\n\t\treturn false\n\tend\n\tframe.depth = parentID and GetDepth(self, parentID) or 1\n\tSetParentHasChilds(self, parentID)\n\ttinsert(self.buttons, {\n\t\tframe\t\t= frame,\n\t\tparentID\t= parentID\n\t})\n\treturn #self.buttons\nend\n\nfunction ListFrameButtonsPrototype:GetVisibleTabs()\n\tlocal tabs = {}\n\tfor _, v in ipairs(self.buttons) do\n\t\tif not v.parentID then\n\t\t\ttinsert(tabs, v)\n\t\t\tif v.frame.showSub then\n\t\t\t\tGetVisibleSubTabs(self, v.frame.ID, tabs)\n\t\t\tend\n\t\tend\n\tend\n\treturn tabs\nend\n\nfunction DBM_GUI:CreateNewFauxScrollFrameList()\n\tlocal mt = setmetatable({\n\t\tbuttons = {}\n\t}, {\n\t\t__index = ListFrameButtonsPrototype\n\t})\n\tself.tabs[#self.tabs + 1] = mt\n\treturn mt\nend\n\n-- TODO: Should this go somewhere else?\n_G[\"DBM_GUI_Bosses\"] = DBM_GUI:CreateNewFauxScrollFrameList()\n_G[\"DBM_GUI_Options\"] = DBM_GUI:CreateNewFauxScrollFrameList()\n"
  },
  {
    "path": "DBM-GUI/modules/MainFrame.lua",
    "content": "local L\t\t= DBM_GUI_L\nlocal CL\t= DBM_CORE_L\n\nlocal DBM = DBM\nlocal CreateFrame = CreateFrame\n\nlocal frame = _G[\"DBM_GUI_OptionsFrame\"]\ntable.insert(_G[\"UISpecialFrames\"], frame:GetName())\nframe:SetFrameStrata(\"DIALOG\")\nif DBM.Options.GUIPoint then\n\tframe:SetPoint(DBM.Options.GUIPoint, UIParent, DBM.Options.GUIPoint, DBM.Options.GUIX, DBM.Options.GUIY)\nelse\n\tframe:SetPoint(\"CENTER\")\nend\nif DBM.Options.GUIWidth then\n\tframe:SetSize(DBM.Options.GUIWidth, DBM.Options.GUIHeight)\nelse\n\tframe:SetSize(800, 600)\nend\nframe:EnableMouse(true)\nframe:SetMovable(true)\nframe:SetResizable(true)\nframe:SetClampedToScreen(true)\nframe:SetUserPlaced(true)\nframe:RegisterForDrag(\"LeftButton\")\nframe:SetFrameLevel(frame:GetFrameLevel() + 4)\nframe:SetMinResize(800, 400)\nframe:SetMaxResize(UIParent:GetWidth(), UIParent:GetHeight())\nframe:Hide()\nframe.backdropInfo = {\n\tbgFile\t\t= \"Interface\\\\DialogFrame\\\\UI-DialogBox-Background-Dark\", -- 131071\n\tedgeFile\t= \"Interface\\\\DialogFrame\\\\UI-DialogBox-Border\", -- 131072\n\ttile\t\t= true,\n\ttileSize\t= 32,\n\tedgeSize\t= 32,\n\tinsets\t\t= { left = 11, right = 12, top = 12, bottom = 11 }\n}\n\nframe:SetBackdrop(frame.backdropInfo)\nframe:SetBackdropColor(1, 1, 1, .85)\nframe.firstshow = true\nframe:SetScript(\"OnShow\", function(self)\n\tif self.firstshow then\n\t\tself.firstshow = false\n\t\tself:ShowTab(1)\n\tend\nend)\nframe:SetScript(\"OnHide\", function()\n\t_G[\"DBM_GUI_DropDown\"]:Hide()\nend)\nframe:SetScript(\"OnDragStart\", frame.StartMoving)\nframe:SetScript(\"OnDragStop\", function(self)\n\tself:StopMovingOrSizing()\n\tlocal point, _, _, x, y = self:GetPoint(1)\n\tDBM.Options.GUIPoint = point\n\tDBM.Options.GUIX = x\n\tDBM.Options.GUIY = y\nend)\nframe:SetScript(\"OnSizeChanged\", function(self)\n\tself:UpdateMenuFrame(_G[self:GetName()..\"BossMods\"])\n\tif DBM_GUI.currentViewing then\n\t\tself:DisplayFrame(DBM_GUI.currentViewing)\n\tend\nend)\nframe:SetScript(\"OnMouseUp\", function(self)\n\tself:StopMovingOrSizing()\nend)\nframe.tabs = {}\n\n-- Window Resizer (taken from WA)\n--Check if DBM is being skinned by ElvUI, so we can adjust placement for both templates\nlocal ElvUIAddonSkins, ElvUI_DBMSkin = IsAddOnLoaded(\"ElvUI_AddonSkins\"), false\nif ElvUIAddonSkins and ElvUI[1].private.addOnSkins.DBM then\n\tElvUI_DBMSkin = true -- no need for an else statement, since ElvUI prompts UI reload if the option changes.\nend\n\nlocal function createFrameSizer(window, position)\n\tlocal left, right, top, bottom, xOffset1, yOffset1, xOffset2, yOffset2\n\tif position == \"BOTTOMLEFT\" then\n\t\tleft, right, top, bottom = 1, 0, 0, 1\n\t\txOffset1, yOffset1 = 6, 6\n\t\txOffset2, yOffset2 = 0, 0\n\telseif position == \"BOTTOMRIGHT\" then\n\t\tleft, right, top, bottom = 0, 1, 0, 1\n\t\txOffset1, yOffset1 = 0, 6\n\t\txOffset2, yOffset2 = -6, 0\n\telseif position == \"TOPLEFT\" then\n\t\tleft, right, top, bottom = 1, 0, 1, 0\n\t\txOffset1, yOffset1 = 6, 0\n\t\txOffset2, yOffset2 = 0, -6\n\telseif position == \"TOPRIGHT\" then\n\t\tleft, right, top, bottom = 0, 1, 1, 0\n\t\txOffset1, yOffset1 = 0, 0\n\t\txOffset2, yOffset2 = -6, -6\n\tend\n\n\tlocal handle = CreateFrame(\"Button\", nil, window)\n\thandle:SetPoint(position, window)\n\tif ElvUI_DBMSkin then\n\t\thandle:SetSize(16, 16)\n\telse\n\t\thandle:SetSize(25, 25)\n\tend\n\thandle:EnableMouse()\n\n\thandle:SetScript(\"OnMouseDown\", function()\n\t\tframe:StartSizing(position)\n\tend)\n\n\thandle:SetScript(\"OnMouseUp\", function()\n\t\tframe:StopMovingOrSizing()\n\t\tDBM.Options.GUIWidth = frame:GetWidth()\n\t\tDBM.Options.GUIHeight = frame:GetHeight()\n\tend)\n\n\tlocal normal = handle:CreateTexture(nil, \"OVERLAY\")\n\tnormal:SetTexture(\"Interface\\\\ChatFrame\\\\UI-ChatIM-SizeGrabber-Up\")\n\tnormal:SetTexCoord(left, right, top, bottom)\n\tif ElvUI_DBMSkin then\n\t\tnormal:SetPoint(position, handle)\n\telse\n\t\tnormal:SetPoint(\"BOTTOMLEFT\", handle, xOffset1, yOffset1)\n\t\tnormal:SetPoint(\"TOPRIGHT\", handle, xOffset2, yOffset2)\n\tend\n\thandle:SetNormalTexture(normal)\n\n\tlocal pushed = handle:CreateTexture(nil, \"OVERLAY\")\n\tpushed:SetTexture(\"Interface\\\\ChatFrame\\\\UI-ChatIM-SizeGrabber-Down\")\n\tpushed:SetTexCoord(left, right, top, bottom)\n\tif ElvUI_DBMSkin then\n\t\tpushed:SetPoint(position, handle)\n\telse\n\t\tpushed:SetPoint(\"BOTTOMLEFT\", handle, xOffset1, yOffset1)\n\t\tpushed:SetPoint(\"TOPRIGHT\", handle, xOffset2, yOffset2)\n\tend\n\thandle:SetPushedTexture(pushed)\n\n\tlocal highlight = handle:CreateTexture(nil, \"OVERLAY\")\n\thighlight:SetTexture(\"Interface\\\\ChatFrame\\\\UI-ChatIM-SizeGrabber-Highlight\")\n\thighlight:SetTexCoord(left, right, top, bottom)\n\tif ElvUI_DBMSkin then\n\t\thighlight:SetPoint(position, handle)\n\telse\n\t\thighlight:SetPoint(\"BOTTOMLEFT\", handle, xOffset1, yOffset1)\n\t\thighlight:SetPoint(\"TOPRIGHT\", handle, xOffset2, yOffset2)\n\tend\n\thandle:SetHighlightTexture(highlight)\n\n\treturn handle\nend\ncreateFrameSizer(frame, \"BOTTOMLEFT\")\ncreateFrameSizer(frame, \"BOTTOMRIGHT\")\n\nlocal frameHeader = frame:CreateTexture(\"$parentHeader\", \"ARTWORK\")\nframeHeader:SetPoint(\"TOP\", 0, 12)\nframeHeader:SetTexture(\"Interface\\\\DialogFrame\\\\UI-DialogBox-Header\")\nframeHeader:SetSize(300, 68)\n\nlocal frameHeaderText = frame:CreateFontString(\"$parentHeaderText\", \"ARTWORK\", \"GameFontNormal\")\nframeHeaderText:SetPoint(\"TOP\", frameHeader, 0, -14)\nframeHeaderText:SetText(L.MainFrame)\n\nlocal frameRevision = frame:CreateFontString(\"$parentRevision\", \"ARTWORK\", \"GameFontDisableSmall\")\nframeRevision:SetPoint(\"BOTTOMLEFT\", frame, \"BOTTOMLEFT\", 20, 18)\nif DBM.NewerVersion then\n\tframeRevision:SetText(L.DBMWarmane.. \" \" .. DBM.DisplayVersion.. \" (\" .. DBM:ShowRealDate(DBM.Revision) .. \"). |cffff0000Version \" .. DBM.NewerVersion .. \" is available.|r\")\nelse\n\tframeRevision:SetText(L.DBMWarmane.. \" \" .. DBM.DisplayVersion.. \" (\" .. DBM:ShowRealDate(DBM.Revision) .. \")\")\nend\n\ndo\n\tlocal count = 0\n\n\tlocal frameHeaderButton = CreateFrame(\"Button\", nil, frame)\n\tframeHeaderButton:SetPoint(\"BOTTOMLEFT\", frame, \"BOTTOMLEFT\", 20, 18)\n\tframeHeaderButton:SetSize(frameRevision:GetSize())\n\tframeHeaderButton:EnableMouse(true)\n\tframeHeaderButton:SetScript(\"OnMouseUp\", function()\n\t\tcount = count + 1\n\t\tif count == 3 then\n\t\t\tcount = 0\n\t\t\tDBM:PlaySoundFile(\"Interface\\\\AddOns\\\\DBM-Core\\\\Sounds\\\\RetailSupport\\\\VO_DHNightElfMalePissed04.ogg\", true)\n\t\tend\n\t\tDBM:ShowUpdateReminder(nil, nil, CL.COPY_URL_DIALOG, DBM.DisplayVersion.. \" (\" .. DBM:ShowRealDate(DBM.Revision) .. \")\") -- Custom, for easier copy paste\n\tend)\nend\n\nlocal frameTranslation = frame:CreateFontString(\"$parentTranslation\", \"ARTWORK\", \"GameFontDisableSmall\")\nframeTranslation:SetPoint(\"LEFT\", frameRevision, \"RIGHT\", 20, 0)\nif L.TranslationBy then\n\tframeTranslation:SetText(L.TranslationByPrefix .. L.TranslationBy)\nend\n\nlocal frameOkay = CreateFrame(\"Button\", \"$parentOkay\", frame, \"UIPanelButtonTemplate\")\nframeOkay:SetSize(96, 22)\nframeOkay:SetPoint(\"BOTTOMRIGHT\", -16, 14)\nframeOkay:SetText(CLOSE)\nframeOkay:SetScript(\"OnClick\", function()\n\tframe:Hide()\n\tif DBM.Options.tempMusicSetting then\n\t\tSetCVar(\"Sound_EnableMusic\", DBM.Options.tempMusicSetting)\n\t\tDBM.Options.tempMusicSetting = nil\n\tend\n\tif DBM.Options.musicPlaying then\n\t\tStopMusic()\n\t\tDBM.Options.musicPlaying = nil\n\tend\nend)\n\nlocal frameWebsite = frame:CreateFontString(\"$parentWebsite\", \"ARTWORK\", \"GameFontNormal\")\nframeWebsite:SetPoint(\"BOTTOMLEFT\", frameRevision, \"TOPLEFT\", 0, 15)\nframeWebsite:SetPoint(\"RIGHT\", frameOkay, \"RIGHT\")\nframeWebsite:SetText(L.Website)\n\nlocal frameWebsiteButtonA = CreateFrame(\"Button\", nil, frame)\nframeWebsiteButtonA:SetAllPoints(frameWebsite)\nframeWebsiteButtonA:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, CL.COPY_URL_DIALOG, \"https://discord.gg/CyVWDWS\")\nend)\n\nlocal frameWebsiteButton = CreateFrame(\"Button\", \"$parentWebsiteButton\", frame, \"UIPanelButtonTemplate\")\nframeWebsiteButton:SetSize(96, 22)\nframeWebsiteButton:SetPoint(\"BOTTOMRIGHT\", frameOkay, \"BOTTOMLEFT\", -20, 0)\nframeWebsiteButton:SetText(L.WebsiteButton)\nframeWebsiteButton:SetScript(\"OnClick\", function()\n\tDBM:ShowUpdateReminder(nil, nil, CL.COPY_URL_DIALOG)\nend)\n\nlocal bossMods = CreateFrame(\"Frame\", \"$parentBossMods\", frame)\nbossMods.name = L.OTabBosses\nframe:CreateTab(bossMods)\n\nlocal DBMOptions = CreateFrame(\"Frame\", \"$parentDBMOptions\", frame)\nDBMOptions.name = L.OTabOptions\nframe:CreateTab(DBMOptions)\n\nlocal hack = OptionsList_OnLoad\nfunction OptionsList_OnLoad(self, ...)\n\tif self:GetName() ~= frame:GetName() .. \"List\" then\n\t\thack(self, ...)\n\tend\nend\n\nlocal frameList = CreateFrame(\"Frame\", \"$parentList\", frame, \"OptionsFrameListTemplate\")\nframeList:SetWidth(205)\nframeList:SetPoint(\"TOPLEFT\", 22, -40)\nframeList:SetPoint(\"BOTTOMLEFT\", frameWebsite, \"TOPLEFT\", 0, 5)\nframeList:SetScript(\"OnShow\", function()\n\tframe:UpdateMenuFrame()\nend)\nframeList.offset = 0\nframeList:SetBackdropBorderColor(0.6, 0.6, 0.6, 1)\nframeList.buttons = {}\nfor i = 1, math.floor(UIParent:GetHeight() / 18) do\n\tlocal button = CreateFrame(\"Button\", \"$parentButton\" .. i, frameList)\n\tbutton:SetHeight(18)\n\tbutton.text = button:CreateFontString(\"$parentText\", \"ARTWORK\", \"GameFontNormalSmall\")\n\tbutton:RegisterForClicks(\"LeftButtonUp\")\n\tbutton:SetScript(\"OnClick\", function(self)\n\t\tframe:ClearSelection()\n\t\tframe.tabs[frame.tab].selection = self.element\n\t\tself:LockHighlight()\n\t\tframe:DisplayFrame(self.element)\n\tend)\n\tif i == 1 then\n\t\tbutton:SetPoint(\"TOPLEFT\", frameList, 0, -8)\n\telse\n\t\tbutton:SetPoint(\"TOPLEFT\", frameList.buttons[i - 1], \"BOTTOMLEFT\")\n\tend\n\tlocal buttonHighlight = button:CreateTexture(\"$parentHighlight\")\n\tbuttonHighlight:SetTexture(\"Interface\\\\QuestFrame\\\\UI-QuestLogTitleHighlight\")\n\tbuttonHighlight:SetBlendMode(\"ADD\")\n\tbuttonHighlight:SetPoint(\"TOPLEFT\", 0, 1)\n\tbuttonHighlight:SetPoint(\"BOTTOMRIGHT\", 0, 1)\n\tbuttonHighlight:SetVertexColor(0.196, 0.388, 0.8)\n\tbutton:SetHighlightTexture(buttonHighlight)\n\tframeList.buttons[i] = button\n\tlocal buttonToggle = CreateFrame(\"Button\", \"$parentToggle\", button, \"UIPanelButtonTemplate2\")\n\tbutton.toggle = buttonToggle\n\tbuttonToggle:SetSize(14, 14)\n\tbuttonToggle:SetPoint(\"TOPLEFT\", button, \"TOPLEFT\", 5, -1)\n\t-- Add textures to button to prevent errors when skinning\n\tbuttonToggle:SetNormalTexture(\"Interface\\\\Buttons\\\\UI-PlusButton-UP\")\n\t--\n\tbuttonToggle:RegisterForClicks(\"LeftButtonUp\", \"RightButtonUp\")\n\tbuttonToggle:SetScript(\"OnClick\", function()\n\t\tbutton.element.showSub = not button.element.showSub\n\t\tframe:UpdateMenuFrame()\n\tend)\nend\nlocal frameListList = _G[frameList:GetName() .. \"List\"]\nframeListList.backdropInfo = {\n\tedgeFile\t= \"Interface\\\\Tooltips\\\\UI-Tooltip-Border\", -- 137057\n\ttile\t\t= true,\n\ttileSize\t= 16,\n\tedgeSize\t= 12,\n\tinsets\t\t= { left = 0, right = 0, top = 5, bottom = 5 }\n}\nframeListList:SetBackdrop(frameListList.backdropInfo)\nframeListList:SetBackdropBorderColor(0.6, 0.6, 0.6, 0.6)\nframeListList:SetScript(\"OnVerticalScroll\", function(self, offset)\n\tlocal scrollbar = _G[self:GetName() .. \"ScrollBar\"]\n\tlocal _, max = scrollbar:GetMinMaxValues()\n\tscrollbar:SetValue(offset)\n\tif offset ~= 0 then\n\t\t_G[self:GetName() .. \"ScrollBarScrollUpButton\"]:Enable()\n\telse\n\t\t_G[self:GetName() .. \"ScrollBarScrollUpButton\"]:Disable()\n\tend\n\tif scrollbar:GetValue() - max ~= 0 then\n\t\t_G[self:GetName() .. \"ScrollBarScrollDownButton\"]:Enable()\n\telse\n\t\t_G[self:GetName() .. \"ScrollBarScrollDownButton\"]:Disable()\n\tend\n\tframeList.offset = math.floor((offset / 18) + 0.5)\n\tframe:UpdateMenuFrame()\nend)\nlocal frameListScrollBar = _G[frameListList:GetName() .. \"ScrollBar\"]\nframeListScrollBar:SetMinMaxValues(0, 11)\nframeListScrollBar:SetValueStep(18)\nframeListScrollBar:SetValue(0)\nframeList:EnableMouseWheel(true)\nframeList:SetScript(\"OnMouseWheel\", function(_, delta)\n\tframeListScrollBar:SetValue(frameListScrollBar:GetValue() - (delta * 18))\nend)\nlocal scrollUpButton = _G[frameListScrollBar:GetName() .. \"ScrollUpButton\"]\nscrollUpButton:Disable()\nscrollUpButton:SetScript(\"OnClick\", function(self)\n\tself:GetParent():SetValue(self:GetParent():GetValue() - 18)\nend)\nlocal scrollDownButton = _G[frameListScrollBar:GetName() .. \"ScrollDownButton\"]\nscrollDownButton:Enable()\nscrollDownButton:SetScript(\"OnClick\", function(self)\n\tself:GetParent():SetValue(self:GetParent():GetValue() + 18)\nend)\n\nlocal frameContainer = CreateFrame(\"ScrollFrame\", \"$parentPanelContainer\", frame)\nframeContainer:SetPoint(\"TOPLEFT\", frameList, \"TOPRIGHT\", 16, 0)\nframeContainer:SetPoint(\"BOTTOMLEFT\", frameList, \"BOTTOMRIGHT\", 16, 0)\nframeContainer:SetPoint(\"RIGHT\", -22, 0)\nframeContainer.backdropInfo = {\n\tedgeFile\t= \"Interface\\\\Tooltips\\\\UI-Tooltip-Border\", -- 137057\n\tedgeSize\t= 16,\n\ttileEdge\t= true\n}\nframeContainer:SetBackdrop(frameContainer.backdropInfo)\nframeContainer:SetBackdropBorderColor(0.6, 0.6, 0.6, 1)\n\nlocal frameContainerFOV = CreateFrame(\"ScrollFrame\", \"$parentFOV\", frameContainer, \"FauxScrollFrameTemplate\")\nframeContainerFOV:Hide()\nframeContainerFOV:SetPoint(\"TOPLEFT\", frameContainer, \"TOPLEFT\", 0, -5)\nframeContainerFOV:SetPoint(\"BOTTOMRIGHT\", frameContainer, \"BOTTOMRIGHT\", 0, 5)\n\n_G[frameContainerFOV:GetName() .. \"ScrollBarScrollUpButton\"]:Disable()\n_G[frameContainerFOV:GetName() .. \"ScrollBarScrollDownButton\"]:Enable()\n\nlocal frameContainerScrollBar = _G[frameContainerFOV:GetName() .. \"ScrollBar\"]\nframeContainerScrollBar:ClearAllPoints()\nframeContainerScrollBar:SetPoint(\"TOPRIGHT\", -4, -15)\nframeContainerScrollBar:SetPoint(\"BOTTOMRIGHT\", 0, 15)\n\nlocal frameContainerScrollBarBackdrop = CreateFrame(\"Frame\", nil, frameContainerScrollBar)\nframeContainerScrollBarBackdrop:SetPoint(\"TOPLEFT\", -4, 20)\nframeContainerScrollBarBackdrop:SetPoint(\"BOTTOMRIGHT\", 4, -20)\nframeContainerScrollBarBackdrop.backdropInfo = {\n\tedgeFile\t= \"Interface\\\\Tooltips\\\\UI-Tooltip-Border\", -- 137057\n\ttile\t\t= true,\n\ttileSize\t= 16,\n\tedgeSize\t= 16,\n\tinsets\t\t= { left = 0, right = 0, top = 5, bottom = 5 }\n}\nframeContainerScrollBarBackdrop:SetBackdrop(frameContainerScrollBarBackdrop.backdropInfo)\nframeContainerScrollBarBackdrop:SetBackdropBorderColor(0.6, 0.6, 0.6, 0.6)\n"
  },
  {
    "path": "DBM-GUI/modules/MainFramePrototype.lua",
    "content": "local L = DBM_GUI_L\n\nlocal select, ipairs, type, mfloor, mmax, mmin, strfind = select, pairs, type, math.floor, math.max, math.min, string.find\nlocal CreateFrame, GameFontHighlightSmall, GameFontNormalSmall, GameFontNormal = CreateFrame, GameFontHighlightSmall, GameFontNormalSmall, GameFontNormal\nlocal DBM, DBM_GUI = DBM, DBM_GUI\n\nlocal frame = CreateFrame(\"Frame\", \"DBM_GUI_OptionsFrame\", UIParent)\n\nfunction frame:UpdateMenuFrame()\n\tlocal listFrame = _G[\"DBM_GUI_OptionsFrameList\"]\n\tif not listFrame.buttons then\n\t\treturn\n\tend\n\tlocal displayedElements = self.tab and DBM_GUI.tabs[self.tab]:GetVisibleTabs() or {}\n\tlocal bigList = mfloor((listFrame:GetHeight() - 8) / 18)\n\tif #displayedElements > bigList then\n\t\t_G[listFrame:GetName() .. \"List\"]:Show()\n\t\t_G[listFrame:GetName() .. \"ListScrollBar\"]:SetMinMaxValues(0, (#displayedElements - bigList) * 18)\n\telse\n\t\t_G[listFrame:GetName() .. \"List\"]:Hide()\n\t\t_G[listFrame:GetName() .. \"ListScrollBar\"]:SetValue(0)\n\tend\n\tfor i = 1, #listFrame.buttons do\n\t\tlocal button = listFrame.buttons[i]\n\t\tbutton:SetWidth(bigList and 185 or 209)\n\t\tbutton:UnlockHighlight()\n\t\tlocal element = displayedElements[i + (listFrame.offset or 0)]\n\t\tif not element or i > bigList then\n\t\t\tbutton:Hide()\n\t\t\tbutton:SetHeight(-1)\n\t\telse\n\t\t\tself:DisplayButton(button, element.frame)\n\t\t\tif (self.tab and self.tabs[self.tab].selection) == element.frame then\n\t\t\t\tbutton:LockHighlight()\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction frame:DisplayButton(button, element)\n\tbutton:Show()\n\tbutton:SetHeight(18)\n\tbutton.element = element\n\tbutton.text:ClearAllPoints()\n\tbutton.text:SetPoint(\"LEFT\", 12 + 8 * element.depth, 2)\n\tbutton.toggle:ClearAllPoints()\n\tbutton.toggle:SetPoint(\"LEFT\", 8 * element.depth - 2, 1)\n\tbutton:SetNormalFontObject(element.depth > 2 and GameFontHighlightSmall or element.depth == 2 and GameFontNormalSmall or GameFontNormal)\n\tbutton:SetHighlightFontObject(element.depth > 2 and GameFontHighlightSmall or element.depth == 2 and GameFontNormalSmall or GameFontNormal)\n\tif element.haschilds then\n\t\tbutton.toggle:SetNormalTexture(element.showSub and \"Interface\\\\Buttons\\\\UI-MinusButton-UP\" or \"Interface\\\\Buttons\\\\UI-PlusButton-UP\")\n\t\tbutton.toggle:SetPushedTexture(element.showSub and \"Interface\\\\Buttons\\\\UI-MinusButton-DOWN\" or \"Interface\\\\Buttons\\\\UI-PlusButton-DOWN\")\n\t\tbutton.toggle:Show()\n\telse\n\t\tbutton.toggle:Hide()\n\tend\n\tbutton.text:SetText(element.displayName)\n\tbutton.text:Show()\nend\n\nfunction frame:ClearSelection()\n\tfor _, button in ipairs(_G[\"DBM_GUI_OptionsFrameList\"].buttons) do\n\t\tbutton:UnlockHighlight()\n\tend\nend\n\nlocal function resize(frame, first)\n\tlocal frameHeight = 20\n\tfor _, child in ipairs({ frame:GetChildren() }) do\n\t\tif child.mytype == \"area\" or child.mytype == \"ability\" then\n\t\t\tif first then\n\t\t\t\tchild:SetPoint(\"TOPRIGHT\", \"DBM_GUI_OptionsFramePanelContainerFOVScrollBar\", \"TOPLEFT\", -5, 0)\n\t\t\telse\n\t\t\t\tchild:SetPoint(\"TOPRIGHT\", \"DBM_GUI_OptionsFramePanelContainerFOV\", \"TOPRIGHT\", -5, 0)\n\t\t\tend\n\t\t\tlocal width = frame:GetWidth() - 30\n\t\t\tif not child.isStats then\n\t\t\t\tlocal neededHeight, lastObject = 25, nil\n\t\t\t\tfor _, child2 in ipairs({ child:GetChildren() }) do\n\t\t\t\t\tif child.mytype == \"ability\" and child2.mytype then\n\t\t\t\t\t\tif not child.hidden then\n\t\t\t\t\t\t\tchild2:Show()\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tchild2:Hide()\n\t\t\t\t\t\tend\n\t\t\t\t\t\tif child2.mytype == \"spelldesc\" then\n\t\t\t\t\t\t\tif child.hidden then\n\t\t\t\t\t\t\t\tchild2:Show()\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tchild2:Hide()\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t_G[child:GetName() .. \"Title\"]:Show()\n\t\t\t\t\t\t\tif child.hidden then\n\t\t\t\t\t\t\t\t_G[child2:GetName() .. \"Text\"]:Show()\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t_G[child2:GetName() .. \"Text\"]:Hide()\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif child2:IsVisible() then\n\t\t\t\t\t\t\t\tneededHeight = 0\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\t\tif child2.mytype and child2:IsVisible() then\n\t\t\t\t\t\tif child2.mytype == \"textblock\" or child2.mytype == \"spelldesc\" then\n\t\t\t\t\t\t\tlocal text = _G[child2:GetName() .. \"Text\"]\n\t\t\t\t\t\t\tif child2.autowidth then\n\t\t\t\t\t\t\t\t_G[child2:GetName() .. \"Text\"]:SetWidth(width - 30)\n\t\t\t\t\t\t\t\tchild2:SetSize(width, text:GetStringHeight())\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tif not child2.myheight then\n\t\t\t\t\t\t\t\tchild2.myheight = text:GetStringHeight() + 20 -- + padding\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\telseif child2.mytype == \"checkbutton\" then\n\t\t\t\t\t\t\tlocal buttonText = child2.textObj\n\t\t\t\t\t\t\tbuttonText:SetWidth(width - child2.widthPad - 57)\n\t\t\t\t\t\t\tbuttonText:SetText(child2.text)\n\t\t\t\t\t\t\tif not child2.customPoint then\n\t\t\t\t\t\t\t\t-- local height = buttonText:GetContentHeight() -- Don't enable this, it breaks with the classic fix as it sets the height to 1 and clumps checkbuttons together\n\t\t\t\t\t\t\t\t-- Classic fix: SimpleHTML needs its height reset\n\t\t\t\t\t\t\t\tlocal oldPoint1, oldPoint2, oldPoint3, oldPoint4, oldPoint5 = buttonText:GetPoint()\n\t\t\t\t\t\t\t\tbuttonText:SetHeight(1)\n\t\t\t\t\t\t\t\tbuttonText:SetPoint(\"TOPLEFT\", UIParent)\n\t\t\t\t\t\t\t\tlocal height = buttonText:GetContentHeight()\n\t\t\t\t\t\t\t\tbuttonText:SetPoint(oldPoint1, oldPoint2, oldPoint3, oldPoint4, oldPoint5)\n\t\t\t\t\t\t\t\t-- End classic fix\n\t\t\t\t\t\t\t\tif lastObject and lastObject.myheight then\n\t\t\t\t\t\t\t\t\tchild2:SetPointOld(\"TOPLEFT\", lastObject, \"TOPLEFT\", 0, -lastObject.myheight)\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tchild2:SetPointOld(\"TOPLEFT\", 10, -12)\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tchild2.myheight = mmax(height + 12, 25)\n\t\t\t\t\t\t\t\tbuttonText:SetHeight(child2.myheight)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tlastObject = child2\n\t\t\t\t\t\telseif child2.mytype == \"line\" then\n\t\t\t\t\t\t\tchild2:SetWidth(width - 20)\n\t\t\t\t\t\t\t_G[child2:GetName() .. \"BG\"]:SetWidth(width - _G[child2:GetName() .. \"Text\"]:GetWidth() - 25)\n\t\t\t\t\t\t\tif lastObject and lastObject.myheight then\n\t\t\t\t\t\t\t\tchild2:ClearAllPoints()\n\t\t\t\t\t\t\t\tchild2:SetPoint(\"TOPLEFT\", lastObject, \"TOPLEFT\", 0, -lastObject.myheight)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tlastObject = child2\n\t\t\t\t\t\telseif child2.mytype == \"dropdown\" then\n\t\t\t\t\t\t\tif not child2.width then\n\t\t\t\t\t\t\t\tlocal ddWidth = 120\n\t\t\t\t\t\t\t\tlocal dropdownText, titleText = _G[child2:GetName() .. \"Text\"], _G[child2:GetName() .. \"TitleText\"]:GetText()\n\t\t\t\t\t\t\t\tif titleText ~= L.FontType and titleText ~= L.FontStyle and titleText ~= L.FontShadow then\n\t\t\t\t\t\t\t\t\tfor _, v in ipairs(child2.values) do\n\t\t\t\t\t\t\t\t\t\tdropdownText:SetText(v.text)\n\t\t\t\t\t\t\t\t\t\tddWidth = mmax(ddWidth, dropdownText:GetStringWidth() + 30)\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\tdropdownText:SetText(child2.text)\n\t\t\t\t\t\t\t\tUIDropDownMenu_SetWidth(child2, mmin(width - 55, ddWidth))\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\tneededHeight = neededHeight + (child2.myheight or child2:GetHeight())\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tchild:SetHeight(neededHeight)\n\t\t\tend\n\t\t\tframeHeight = frameHeight + child:GetHeight() + 20\n\t\telseif child.mytype == \"line\" then\n\t\t\tlocal width = frame:GetWidth() - 30\n\t\t\tchild:SetWidth(width - 20)\n\t\t\t_G[child:GetName() .. \"BG\"]:SetWidth(width - _G[child:GetName() .. \"Text\"]:GetWidth() - 25)\n\t\t\tframeHeight = frameHeight + 32\n\t\telseif child.myheight then\n\t\t\tframeHeight = frameHeight + child.myheight\n\t\tend\n\tend\n\treturn frameHeight\nend\n\nfunction frame:DisplayFrame(frame)\n\tif select(\"#\", frame:GetChildren()) == 0 then\n\t\treturn\n\tend\n\tlocal scrollBar = _G[\"DBM_GUI_OptionsFramePanelContainerFOVScrollBar\"]\n\tscrollBar:Show()\n\tlocal changed = DBM_GUI.currentViewing ~= frame\n\tif DBM_GUI.currentViewing and changed then\n\t\tDBM_GUI.currentViewing:Hide()\n\tend\n\tDBM_GUI.currentViewing = frame\n\t_G[\"DBM_GUI_DropDown\"]:Hide()\n\tlocal FOV = _G[\"DBM_GUI_OptionsFramePanelContainerFOV\"]\n\tFOV:SetScrollChild(frame)\n\tFOV:Show()\n\tif changed then\n\t\tframe:Show()\n\tend\n\tframe:SetSize(FOV:GetSize())\n\tlocal mymax = resize(frame, true) - _G[\"DBM_GUI_OptionsFramePanelContainer\"]:GetHeight()\n\tif mymax <= 0 then\n\t\tmymax = 0\n\tend\n\tif mymax > 0 then\n\t\tscrollBar:SetMinMaxValues(0, mymax)\n\t\tif changed then\n\t\t\tscrollBar:SetValue(0)\n\t\tend\n\telse\n\t\tscrollBar:Hide()\n\t\tscrollBar:SetValue(0)\n\t\tscrollBar:SetMinMaxValues(0, 0)\n\t\tresize(frame)\n\tend\n\tif DBM.Options.EnableModels then\n\t\tlocal bossPreview = _G[\"DBM_BossPreview\"]\n\t\tif not bossPreview then\n\t\t\tbossPreview = CreateFrame(\"PlayerModel\", \"DBM_BossPreview\", _G[\"DBM_GUI_OptionsFramePanelContainer\"])\n\t\t\tbossPreview:SetPoint(\"BOTTOMRIGHT\", \"DBM_GUI_OptionsFramePanelContainer\", \"BOTTOMRIGHT\", -5, 5)\n\t\t\tbossPreview:SetSize(300, 300)\n\t\t\tbossPreview:SetRotation(0)\n\t\t\tbossPreview:SetClampRectInsets(0, 0, 24, 0)\n\t\tend\n\t\tbossPreview.enabled = false\n\t\tbossPreview:Hide()\n\t\tfor _, mod in ipairs(DBM.Mods) do\n\t\t\tif mod.panel and mod.panel.frame and mod.panel.frame == frame then\n\t\t\t\tbossPreview.currentMod = mod\n\t\t\t\tbossPreview:Show()\n\t\t\t\tbossPreview:ClearModel()\n\n\t\t\t\tlocal model = mod.modelId or (mod.multiMobPullDetection and mod.multiMobPullDetection[1] or mod.creatureId)\n\t\t\t\tif type(model) == \"string\" then\n\t\t\t\t\tbossPreview:SetModel(model)\n\t\t\t\telseif type(model) == \"number\" then\n\t\t\t\t\tbossPreview:SetCreature(model)  -- keep this before the rest of model API\n\t\t\t\tend\n\n\t\t\t\tbossPreview:SetModelScale(mod.modelScale or 1)\n\t\t\t\tbossPreview:SetPosition(mod.modelOffsetX or 0, mod.modelOffsetY or 0, mod.modelOffsetZ or 0)\n\t\t\t\tbossPreview:SetFacing(mod.modelRotation or 0)\n\t\t\t\tbossPreview:SetSequence(mod.modelSequence or 4)\n\n\t\t\t\tlocal modelFile = bossPreview:GetModel()\n\t\t\t\tif modelFile and type(modelFile) == \"string\" and\n\t\t\t\t(strfind(modelFile, \"dragon\") or strfind(modelFile, \"wurm\") or strfind(modelFile, \"drake\") or strfind(modelFile, \"malygos\") or strfind(modelFile, \"yoggsaron\")) then\n\t\t\t\t\tbossPreview.timer = 0.1\n\t\t\t\t\tbossPreview:SetScript(\"OnUpdate\", function(self, elapsed) -- the model was not assuming the correct camera on GUI unless it was re-run, so do this instead. Not perfect fix since on resize it may still fail\n\t\t\t\t\t\tif self.timer > elapsed then\n\t\t\t\t\t\t\tself.timer = self.timer - elapsed\n\t\t\t\t\t\t\tbossPreview:SetCamera(0)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tself:SetScript(\"OnUpdate\", nil)\n\t\t\t\t\t\tend\n\t\t\t\t\tend)\n\t\t\t\telse\n\t\t\t\t\tlocal _, y, z = bossPreview:GetPosition()\n\t\t\t\t\tbossPreview:SetPosition(0.4, y, z)\n\t\t\t\tend\n\n\t\t\t\tif mod.modelSoundShort and DBM.Options.ModelSoundValue == \"Short\" then\n\t\t\t\t\tDBM:PlaySoundFile(mod.modelSoundShort)\n\t\t\t\telseif mod.modelSoundLong and DBM.Options.ModelSoundValue == \"Long\" then\n\t\t\t\t\tDBM:PlaySoundFile(mod.modelSoundLong)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction frame:DeselectTab(i)\n\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"Left\"]:Show();\n\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"Middle\"]:Show();\n\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"Right\"]:Show();\n\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"LeftDisabled\"]:Hide();\n\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"MiddleDisabled\"]:Hide();\n\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"RightDisabled\"]:Hide();\n\tself.tabs[i]:Hide()\nend\n\nfunction frame:SelectTab(i)\n\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"Left\"]:Hide();\n\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"Middle\"]:Hide();\n\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"Right\"]:Hide();\n\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"LeftDisabled\"]:Show();\n\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"MiddleDisabled\"]:Show();\n\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"RightDisabled\"]:Show();\n\tself.tabs[i]:Show()\nend\n\nfunction frame:CreateTab(tab)\n\ttab:Hide()\n\tlocal i = #self.tabs + 1\n\tself.tabs[i] = tab\n\tlocal button = CreateFrame(\"Button\", \"DBM_GUI_OptionsFrameTab\" .. i, self, \"OptionsFrameTabButtonTemplate\")\n\tlocal buttonText = _G[button:GetName() .. \"Text\"]\n\tbutton.Text = buttonText\n\tbutton.Left = _G[button:GetName() .. \"Left\"]\n\tbutton.Right = _G[button:GetName() .. \"Right\"]\n\tbuttonText:SetText(tab.name)\n\tbuttonText:SetPoint(\"LEFT\", 22, -2)\n\tbuttonText:Show()\n\tbutton:Show()\n\tif i == 1 then\n\t\tbutton:SetPoint(\"TOPLEFT\", self:GetName(), 20, -18)\n\telse\n\t\tbutton:SetPoint(\"TOPLEFT\", \"DBM_GUI_OptionsFrameTab\" .. (i - 1), \"TOPRIGHT\", -15, 0)\n\tend\n\tbutton:SetScript(\"OnClick\", function()\n\t\tself:ShowTab(i)\n\tend)\nend\n\nfunction frame:ShowTab(tab)\n\tself.tab = tab\n\tself:UpdateMenuFrame()\n\tfor i = 1, #DBM_GUI.tabs do\n\t\tif i == tab then\n\t\t\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"Left\"]:Hide()\n\t\t\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"Middle\"]:Hide()\n\t\t\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"Right\"]:Hide()\n\t\t\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"LeftDisabled\"]:Show()\n\t\t\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"MiddleDisabled\"]:Show()\n\t\t\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"RightDisabled\"]:Show()\n\t\telse\n\t\t\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"Left\"]:Show()\n\t\t\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"Middle\"]:Show()\n\t\t\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"Right\"]:Show()\n\t\t\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"LeftDisabled\"]:Hide()\n\t\t\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"MiddleDisabled\"]:Hide()\n\t\t\t_G[\"DBM_GUI_OptionsFrameTab\" .. i .. \"RightDisabled\"]:Hide()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-GUI/modules/PanelPrototype.lua",
    "content": "local L\t\t= DBM_GUI_L\nlocal CL\t= DBM_COMMON_L\n\nlocal setmetatable, select, type, tonumber, strsplit, mmax, tinsert = setmetatable, select, type, tonumber, strsplit, math.max, table.insert\nlocal CreateFrame, GetCursorPosition, ChatEdit_GetActiveWindow, IsShiftKeyDown, UIParent, GameTooltip, NORMAL_FONT_COLOR, GameFontNormal = CreateFrame, GetCursorPosition, ChatEdit_GetActiveWindow, IsShiftKeyDown, UIParent, GameTooltip, NORMAL_FONT_COLOR, GameFontNormal\nlocal IsInInstance, GetNumRaidMembers = IsInInstance, GetNumRaidMembers\nlocal DBM, DBM_GUI = DBM, DBM_GUI\nlocal ElvUI = ElvUI\n\n--TODO, not 100% sure which ones use html and which don't so some might need true added or removed for 2nd arg\nlocal function parseDescription(name, usesHTML)\n\tif not name then\n\t\treturn\n\tend\n\tlocal spellName = name\n\tif name:find(\"%$spell:ej\") then -- It is journal link :-)\n\t\tname = name:gsub(\"%$spell:ej(%d+)\", \"$journal:%1\")\n\tend\n\tif name:find(\"%$spell:\") then\n\t\tname = name:gsub(\"%$spell:(%d+)\", function(id)\n\t\t\tlocal spellId = tonumber(id)\n\t\t\tspellName = DBM:GetSpellInfo(spellId)\n\t\t\tif not spellName then\n\t\t\t\tspellName = CL.UNKNOWN\n\t\t\t\tDBM:Debug(\"Spell ID does not exist: \" .. spellId)\n\t\t\tend\n\t\t\t--The HTML parser breaks if spell name has & in it if it's not encoded to html formating\n\t\t\tif usesHTML and spellName:find(\"&\") then\n\t\t\t\tspellName = spellName:gsub(\"&\", \"&amp;\")\n\t\t\tend\n\t\t\treturn (\"|cff71d5ff|Hspell:%d|h%s|h|r\"):format(spellId, spellName)\n\t\tend)\n\tend\n\tif name:find(\"%$journal:\") then\n\t\tname = name:gsub(\"%$journal:(%d+)\", function(id)\n\t\t\tspellName = DBM:EJ_GetSectionInfo(tonumber(id))\n\t\t\tif not spellName then\n\t\t\t\tDBM:Debug(\"Journal ID does not exist: \" .. id)\n\t\t\tend\n\t\t\tlocal link = select(9, DBM:EJ_GetSectionInfo(tonumber(id))) or CL.UNKNOWN\n\t\t\treturn link:gsub(\"|h%[(.*)%]|h\", \"|h%1|h\")\n\t\tend)\n\tend\n\treturn name, spellName\nend\n\nlocal PanelPrototype = {}\nsetmetatable(PanelPrototype, {\n\t__index = DBM_GUI\n})\n\nfunction PanelPrototype:GetLastObj()\n\treturn self.lastobject\nend\n\nfunction PanelPrototype:SetLastObj(obj)\n\tself.lastobject = obj\nend\n\nfunction PanelPrototype:CreateCreatureModelFrame(width, height, creatureid, scale)\n\tlocal model = CreateFrame(\"PlayerModel\", \"DBM_GUI_Option_\" .. self:GetNewID(), self.frame)\n\tmodel.mytype = \"modelframe\"\n\tmodel:SetSize(width or 100, height or 200)\n\tmodel:SetCreature(tonumber(creatureid) or 448) -- Hogger!!! he kills all of you\n\tif scale then\n\t\tmodel:SetModelScale(scale)\n\tend\n\tself:SetLastObj(model)\n\treturn model\nend\n\nlocal spellTooltip = CreateFrame(\"GameTooltip\", \"SpellScanTooltip\")\nspellTooltip:SetOwner(WorldFrame, \"ANCHOR_NONE\");\nspellTooltip:AddFontStrings(\n\tspellTooltip:CreateFontString(\"$parentTextLeft1\", nil, \"GameTooltipText\"),\n\tspellTooltip:CreateFontString(\"$parentTextRight1\", nil, \"GameTooltipText\")\n)\n\nlocal function GetSpellDescription(spellID)\n\tspellTooltip:ClearLines()\n\tspellTooltip:SetHyperlink(\"spell:\"..spellID)\n\tfor i = 1, spellTooltip:GetNumRegions() do\n\t\tlocal region = select(i, spellTooltip:GetRegions())\n\t\tif region:GetObjectType() == \"FontString\" and select(3, region:GetTextColor()) == 0 then -- first fontstring that's yellow\n\t\t\treturn region:GetText()\n\t\tend\n\tend\nend\n\nfunction PanelPrototype:CreateSpellDesc(text)\n\tlocal test = CreateFrame(\"Frame\", \"DBM_GUI_Option_\" .. self:GetNewID(), self.frame)\n\tlocal textblock = self.frame:CreateFontString(test:GetName() .. \"Text\", \"ARTWORK\")\n\ttextblock:SetFontObject(GameFontNormal)\n\ttextblock:SetJustifyH(\"LEFT\")\n\ttextblock:SetPoint(\"TOPLEFT\", test)\n\ttest:SetPoint(\"TOPLEFT\", self.frame, \"TOPLEFT\", 15, -10)\n\ttest:SetSize(self.frame:GetWidth(), textblock:GetStringHeight())\n\ttest.mytype = \"spelldesc\"\n\ttest.autowidth = true\n\t-- Description logic\n\tif type(text) == \"number\" then\n\t\ttext = GetSpellDescription(text) or \"\"\n\t\tif text == \"\" then\n\t\t\ttext = L.NoDescription\n\t\tend\n\t\ttextblock:SetText(text)\n\telse\n\t\tif text == \"\" then\n\t\t\ttext = L.NoDescription\n\t\tend\n\t\ttextblock:SetText(text)\n\tend\n\t--\n\tself:SetLastObj(test)\n\treturn test\nend\n\nfunction PanelPrototype:CreateText(text, width, autoplaced, style, justify, myheight)\n\tlocal test = CreateFrame(\"Frame\", \"DBM_GUI_Option_\" .. self:GetNewID(), self.frame)\n\tlocal textblock = self.frame:CreateFontString(test:GetName() .. \"Text\", \"ARTWORK\")\n\ttextblock:SetFontObject(style or GameFontNormal)\n\ttextblock:SetText(parseDescription(text))\n\ttextblock:SetJustifyH(justify or \"LEFT\")\n\ttextblock:SetPoint(\"TOPLEFT\", test)\n\ttextblock:SetWidth(width or self.frame:GetWidth())\n\tif autoplaced then\n\t\ttest:SetPoint(\"TOPLEFT\", self.frame, \"TOPLEFT\", 15, -5)\n\tend\n\ttest:SetSize(width or self.frame:GetWidth(), textblock:GetStringHeight())\n\ttest.mytype = \"textblock\"\n\ttest.autowidth = not width\n\ttest.myheight = myheight\n\tself:SetLastObj(textblock)\n\treturn textblock\nend\n\nfunction PanelPrototype:CreateButton(title, width, height, onclick, font)\n\tlocal button = CreateFrame(\"Button\", \"DBM_GUI_Option_\" .. self:GetNewID(), self.frame, \"UIPanelButtonTemplate\")\n\tbutton.mytype = \"button\"\n\tbutton:SetSize(width or 100, height or 20)\n\tbutton:SetText(parseDescription(title, true))\n\tif onclick then\n\t\tbutton:SetScript(\"OnClick\", onclick)\n\tend\n\tif font then\n\t\tbutton:SetNormalFontObject(font)\n\t\tbutton:SetHighlightFontObject(font)\n\tend\n\tif _G[button:GetName() .. \"Text\"]:GetStringWidth() > button:GetWidth() then\n\t\tbutton:SetWidth(_G[button:GetName() .. \"Text\"]:GetStringWidth() + 25)\n\tend\n\t-- ElvUI skin\n\tif ElvUI then\n\t\tElvUI[1]:GetModule(\"Skins\"):HandleButton(button)\n\tend\n\t--\n\tself:SetLastObj(button)\n\treturn button\nend\n\nfunction PanelPrototype:CreateColorSelect(dimension, useAlpha, alphaWidth)\n\tlocal colorSelect = CreateFrame(\"ColorSelect\", \"DBM_GUI_Option_\" .. self:GetNewID(), self.frame)\n\tcolorSelect.mytype = \"colorselect\"\n\tcolorSelect:SetSize((dimension or 128) + (useAlpha and 38 or 0), dimension or 128)\n\tlocal colorWheel = colorSelect:CreateTexture()\n\tcolorWheel:SetSize(dimension or 128, dimension or 128)\n\tcolorWheel:SetPoint(\"TOPLEFT\", colorSelect, \"TOPLEFT\", 5, 0)\n\tcolorSelect:SetColorWheelTexture(colorWheel)\n\tlocal colorTexture = colorSelect:CreateTexture()\n\tcolorTexture:SetTexture(\"Interface\\\\Buttons\\\\UI-ColorPicker-Buttons\")\n\tcolorTexture:SetSize(10, 10)\n\tcolorTexture:SetTexCoord(0, 0.15625, 0, 0.625)\n\tcolorSelect:SetColorWheelThumbTexture(colorTexture)\n\tif useAlpha then\n\t\tlocal colorValue = colorSelect:CreateTexture()\n\t\tcolorValue:SetWidth(alphaWidth or 32)\n\t\tcolorValue:SetHeight(dimension or 128)\n\t\tcolorValue:SetPoint(\"LEFT\", colorWheel, \"RIGHT\", 10, -3)\n\t\tcolorSelect:SetColorValueTexture(colorValue)\n\t\tlocal colorTexture2 = colorSelect:CreateTexture()\n\t\tcolorTexture2:SetTexture(\"Interface\\\\Buttons\\\\UI-ColorPicker-Buttons\")\n\t\tcolorTexture2:SetSize(alphaWidth / 32 * 48, alphaWidth / 32 * 14)\n\t\tcolorTexture2:SetTexCoord(0.25, 1, 0.875, 0)\n\t\tcolorSelect:SetColorValueThumbTexture(colorTexture2)\n\tend\n\tself:SetLastObj(colorSelect)\n\treturn colorSelect\nend\n\nfunction PanelPrototype:CreateSlider(text, low, high, step, width)\n\tlocal slider = CreateFrame(\"Slider\", \"DBM_GUI_Option_\" .. self:GetNewID(), self.frame, \"OptionsSliderTemplate\")\n\tslider.mytype = \"slider\"\n\tslider.myheight = 50\n\tslider:SetMinMaxValues(low, high)\n\tslider:SetValueStep(step)\n\tslider:SetWidth(width or 180)\n\tlocal sliderText = _G[slider:GetName() .. \"Text\"]\n\tsliderText:SetText(parseDescription(text, true))\n\tslider:SetScript(\"OnValueChanged\", function(_, value)\n\t\tsliderText:SetFormattedText(text, value)\n\tend)\n\tself:SetLastObj(slider)\n\treturn slider\nend\n\nfunction PanelPrototype:CreateScrollingMessageFrame(width, height, _, fading, fontobject)\n\tlocal scroll = CreateFrame(\"ScrollingMessageFrame\", \"DBM_GUI_Option_\" .. self:GetNewID(), self.frame)\n\tscroll.mytype = \"scroll\"\n\tscroll:SetSize(width or 200, height or 150)\n\tscroll:SetJustifyH(\"LEFT\")\n\tscroll:SetFading(fading or false)\n\tscroll:SetFontObject(fontobject or \"GameFontNormal\")\n\tscroll:SetMaxLines(2000)\n\tscroll:EnableMouse(true)\n\tscroll:EnableMouseWheel(true)\n\tscroll:SetScript(\"OnMouseWheel\", function(self, delta)\n\t\tif delta == 1 then\n\t\t\tself:ScrollUp()\n\t\telseif delta == -1 then\n\t\t\tself:ScrollDown()\n\t\tend\n\tend)\n\tself:SetLastObj(scroll)\n\treturn scroll\nend\n\nfunction PanelPrototype:CreateEditBox(text, value, width, height)\n\tlocal textbox = CreateFrame(\"EditBox\", \"DBM_GUI_Option_\" .. self:GetNewID(), self.frame, \"InputBoxTemplate\")\n\ttextbox.mytype = \"textbox\"\n\ttextbox:SetSize(width or 100, height or 20)\n\ttextbox:SetAutoFocus(false)\n\ttextbox:SetScript(\"OnEscapePressed\", function(self)\n\t\tself:ClearFocus()\n\tend)\n\ttextbox:SetScript(\"OnTabPressed\", function(self)\n\t\tself:ClearFocus()\n\tend)\n\ttextbox:SetText(value)\n\tlocal textboxText = textbox:CreateFontString(\"$parentText\", \"BACKGROUND\", \"GameFontNormalSmall\")\n\ttextboxText:SetPoint(\"TOPLEFT\", textbox, \"TOPLEFT\", -4, 14)\n\ttextboxText:SetText(text)\n\tself:SetLastObj(textbox)\n\treturn textbox\nend\n\nfunction PanelPrototype:CreateLine(text)\n\tlocal line = CreateFrame(\"Frame\", \"DBM_GUI_Option_\" .. self:GetNewID(), self.frame)\n\tline:SetSize(self.frame:GetWidth() - 20, 20)\n\tif select(\"#\", self.frame:GetChildren()) == 2 then\n\t\tline:SetPoint(\"TOPLEFT\", self.frame, 10, -12)\n\telse\n\t\tline:SetPoint(\"TOPLEFT\", select(-2, self.frame:GetChildren()) or self.frame, \"BOTTOMLEFT\", 0, -12)\n\tend\n\tline.myheight = 20\n\tline.mytype = \"line\"\n\tlocal linetext = line:CreateFontString(\"$parentText\", \"ARTWORK\", \"GameFontNormal\")\n\tlinetext:SetPoint(\"TOPLEFT\", line, \"TOPLEFT\")\n\tlinetext:SetJustifyH(\"LEFT\")\n\tlinetext:SetHeight(18)\n\tlinetext:SetTextColor(0.67, 0.83, 0.48)\n\tlinetext:SetText(text and parseDescription(text) or \"\")\n\tlocal linebg = line:CreateTexture(\"$parentBG\")\n\tlinebg:SetTexture(\"Interface\\\\Tooltips\\\\UI-Tooltip-Background\")\n\tlinebg:SetSize(self.frame:GetWidth() - linetext:GetWidth() - 25, 2)\n\tlinebg:SetPoint(\"RIGHT\", line, \"RIGHT\", 0, 0)\n\tself:SetLastObj(line)\n\treturn line\nend\n\ndo\n\tlocal currActiveButton\n\tlocal updateFrame = CreateFrame(\"Frame\")\n\n\tlocal function MixinCountTable(baseTable)\n\t\tlocal result = baseTable\n\t\tfor _, count in pairs(DBM:GetCountSounds()) do\n\t\t\ttinsert(result, {\n\t\t\t\ttext\t= count.text,\n\t\t\t\tvalue\t= count.path\n\t\t\t})\n\t\tend\n\t\treturn result\n\tend\n\n\tlocal sounds = DBM_GUI:MixinSharedMedia3(\"sound\", {\n\t\t-- Inject basically dummy values for ordering special warnings to just use default SW sound assignments\n\t\t{ text = L.None, value = \"None\" },\n\t\t{ text = \"SA 1\", value = 1 },\n\t\t{ text = \"SA 2\", value = 2 },\n\t\t{ text = \"SA 3\", value = 3 },\n\t\t{ text = \"SA 4\", value = 4 },\n\t\t-- Inject DBMs custom media that's not available to LibSharedMedia because it uses SoundKit Id (which LSM doesn't support)\n\t\t--{ text = \"AirHorn (DBM)\", value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\AirHorn.ogg\" },\n\t\t{ text = \"Algalon: Beware!\", value = \"Sound\\\\Creature\\\\AlgalonTheObserver\\\\UR_Algalon_BHole01.wav\" },\n\t\t{ text = \"BB Wolf: Run Away\", value = \"Sound\\\\Creature\\\\HoodWolf\\\\HoodWolfTransformPlayer01.wav\" },\n\t\t{ text = \"Blizzard Raid Emote\", value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\Blizzard\\\\UI_RaidBossWhisperWarning.ogg\" },\n\t\t{ text = \"C'Thun: You Will Die!\", value = \"Sound\\\\Creature\\\\CThun\\\\CThunYouWillDie.wav\" },\n\t\t{ text = \"Headless Horseman: Laugh\", value = \"Sound\\\\Creature\\\\HeadlessHorseman\\\\Horseman_Laugh_01.wav\" },\n\t\t{ text = \"Illidan: Not Prepared\", value = \"Sound\\\\Creature\\\\Illidan\\\\BLACK_Illidan_04.wav\" },\n\t\t{ text = \"Illidan: Not Prepared2\", value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\Blizzard\\\\VO_703_Illidan_Stormrage_03.ogg\" },\n\t\t{ text = \"Kaz'rogal: Marked\", value = \"Sound\\\\Creature\\\\KazRogal\\\\CAV_Kaz_Mark02.wav\" },\n\t\t{ text = \"Kil'Jaeden: Destruction\", value = \"Sound\\\\Creature\\\\KilJaeden\\\\KILJAEDEN02.wav\" },\n\t\t{ text = \"Loatheb: I see you\", value = \"Sound\\\\Creature\\\\Loathstare\\\\Loa_Naxx_Aggro02.wav\" },\n\t\t{ text = \"Lady Malande: Flee\", value = \"Sound\\\\Creature\\\\LadyMalande\\\\BLCKTMPLE_LadyMal_Aggro01.wav\" },\n\t\t{ text = \"Milhouse: Light You Up\", value = \"Sound\\\\Creature\\\\MillhouseManastorm\\\\TEMPEST_Millhouse_Pyro01.wav\" },\n\t\t{ text = \"Night Elf Bell\", value = \"Sound\\\\Doodad\\\\BellTollNightElf.wav\" },\n\t\t{ text = \"PvP Flag\", value = \"Sound\\\\Spells\\\\PVPFlagTaken.wav\" },\n\t\t{ text = \"Void Reaver: Marked\", value = \"Sound\\\\Creature\\\\VoidReaver\\\\TEMPEST_VoidRvr_Aggro01.wav\" },\n\t\t{ text = \"Yogg Saron: Laugh\", value = \"Sound\\\\Creature\\\\YoggSaron\\\\UR_YoggSaron_Slay01.wav\" },\n\t})\n\n\tlocal function RGBPercToHex(r, g, b)\n\t\tr = r <= 1 and r >= 0 and r or 0\n\t\tg = g <= 1 and g >= 0 and g or 0\n\t\tb = b <= 1 and b >= 0 and b or 0\n\t\treturn string.format(\"%02x%02x%02x\", r*255, g*255, b*255)\n\tend\n\n\tlocal tcolors = {\n\t\t{ text = \"|cff\"..RGBPercToHex(DBT.Options.StartColorR or 1, DBT.Options.StartColorG or 1, DBT.Options.StartColorB or 1)..L.CBTGeneric..\"|r\", value = 0 },\n\t\t{ text = \"|cff\"..RGBPercToHex(DBT.Options.StartColorAR or 1, DBT.Options.StartColorAG or 1, DBT.Options.StartColorAB or 1)..L.CBTAdd..\"|r\", value = 1 },\n\t\t{ text = \"|cff\"..RGBPercToHex(DBT.Options.StartColorAER or 1, DBT.Options.StartColorAEG or 1, DBT.Options.StartColorAEB or 1)..L.CBTAOE..\"|r\", value = 2 },\n\t\t{ text = \"|cff\"..RGBPercToHex(DBT.Options.StartColorDR or 1, DBT.Options.StartColorDG or 1, DBT.Options.StartColorDB or 1)..L.CBTTargeted..\"|r\", value = 3 },\n\t\t{ text = \"|cff\"..RGBPercToHex(DBT.Options.StartColorIR or 1, DBT.Options.StartColorIG or 1, DBT.Options.StartColorIB or 1)..L.CBTInterrupt..\"|r\", value = 4 },\n\t\t{ text = \"|cff\"..RGBPercToHex(DBT.Options.StartColorRR or 1, DBT.Options.StartColorRG or 1, DBT.Options.StartColorRB or 1)..L.CBTRole..\"|r\", value = 5 },\n\t\t{ text = \"|cff\"..RGBPercToHex(DBT.Options.StartColorPR or 1, DBT.Options.StartColorPG or 1, DBT.Options.StartColorPB or 1)..L.CBTPhase..\"|r\", value = 6 },\n\t\t{ text = \"|cff\"..RGBPercToHex(DBT.Options.StartColorUIR or 1, DBT.Options.StartColorUIG or 1, DBT.Options.StartColorUIB or 1)..L.CBTImportant..\"|r\", value = 7 }\n\t}\n\tlocal cvoice = MixinCountTable({\n\t\t{ text = L.None, value = 0 },\n\t\t{ text = L.CVoiceOne, value = 1 },\n\t\t{ text = L.CVoiceTwo, value = 2 },\n\t\t{ text = L.CVoiceThree, value = 3 }\n\t})\n\n\tfunction PanelPrototype:CreateCheckButton(name, autoplace, textLeft, dbmvar, dbtvar, mod, modvar, globalvar, isTimer)\n\t\tif not name then\n\t\t\treturn\n\t\tend\n\t\tif type(name) == \"number\" then\n\t\t\treturn DBM:AddMsg(\"CreateCheckButton: error: expected string, received number. You probably called mod:NewTimer(optionId) with a spell id.\" .. name)\n\t\tend\n\t\tlocal button = CreateFrame(\"CheckButton\", \"DBM_GUI_Option_\" .. self:GetNewID(), self.frame, \"OptionsBaseCheckButtonTemplate\")\n\t\tbutton:SetHitRectInsets(0, 0, 0, 0)\n\t\tbutton.myheight = 25\n\t\tbutton.mytype = \"checkbutton\"\n\t\t-- ElvUI skin\n\t\tif ElvUI then\n\t\t\tElvUI[1]:GetModule(\"Skins\"):HandleCheckBox(button, true)\n\t\tend\n\t\t--\n\t\tif autoplace then\n\t\t\tlocal x = self:GetLastObj()\n\t\t\tif x.myheight then\n\t\t\t\tbutton:SetPoint(\"TOPLEFT\", x, \"TOPLEFT\", 0, -x.myheight)\n\t\t\telse\n\t\t\t\tbutton:SetPoint(\"TOPLEFT\", 10, -12)\n\t\t\tend\n\t\tend\n\t\tbutton.SetPointOld = button.SetPoint\n\t\tbutton.SetPoint = function(...)\n\t\t\tbutton.customPoint = true\n\t\t\tbutton.myheight = 0\n\t\t\tbutton.SetPointOld(...)\n\t\tend\n\t\tlocal desc, noteSpellName = parseDescription(name, true)\n\t\tlocal frame, frame2, textPad\n\t\tif modvar then -- Special warning, has modvar for sound and note\n\t\t\tif isTimer then\n\t\t\t\tframe = self:CreateDropdown(nil, tcolors, mod, modvar .. \"TColor\", function(value)\n\t\t\t\t\tmod.Options[modvar .. \"TColor\"] = value\n\t\t\t\tend, 22, 25, button)\n\t\t\t\tframe2 = self:CreateDropdown(nil, cvoice, mod, modvar .. \"CVoice\", function(value)\n\t\t\t\t\tmod.Options[modvar..\"CVoice\"] = value\n\t\t\t\t\tif type(value) == \"string\" then\n\t\t\t\t\t\tDBM:PlayCountSound(1, nil, value)\n\t\t\t\t\telseif value > 0 then\n\t\t\t\t\t\tDBM:PlayCountSound(1, value == 3 and DBM.Options.CountdownVoice3 or value == 2 and DBM.Options.CountdownVoice2 or DBM.Options.CountdownVoice)\n\t\t\t\t\tend\n\t\t\t\tend, 22, 25, button)\n\t\t\t\tframe:SetPoint(\"LEFT\", button, \"RIGHT\", -20, 2)\n\t\t\t\tframe2:SetPoint(\"LEFT\", frame, \"RIGHT\", 18, 0)\n\t\t\t\ttextPad = 37\n\t\t\telse\n\t\t\t\tframe = self:CreateDropdown(nil, sounds, mod, modvar .. \"SWSound\", function(value)\n\t\t\t\t\tmod.Options[modvar .. \"SWSound\"] = value\n\t\t\t\t\tDBM:PlaySpecialWarningSound(value, true)\n\t\t\t\tend, 22, 25, button)\n\t\t\t\tframe:ClearAllPoints()\n\t\t\t\tframe:SetPoint(\"LEFT\", button, \"RIGHT\", -20, 2)\n\t\t\t\tif mod.Options[modvar .. \"SWNote\"] then -- Mod has note, insert note hack\n\t\t\t\t\tframe2 = CreateFrame(\"Button\", \"DBM_GUI_Option_\" .. self:GetNewID(), self.frame, \"UIPanelButtonTemplate\")\n\t\t\t\t\tframe2:SetPoint(\"LEFT\", frame, \"RIGHT\", 35, 0)\n\t\t\t\t\tframe2:SetSize(25, 25)\n\t\t\t\t\tframe2:SetText(\"|TInterface/FriendsFrame/UI-FriendsFrame-Note.blp:14:0:2:-1|t\")\n\t\t\t\t\tframe2.mytype = \"button\"\n\t\t\t\t\tframe2:SetScript(\"OnClick\", function(self)\n\t\t\t\t\t\tDBM:ShowNoteEditor(mod, modvar, noteSpellName)\n\t\t\t\t\tend)\n\t\t\t\t\ttextPad = 2\n\t\t\t\tend\n\t\t\tend\n\t\t\tframe.myheight = 0\n\t\t\tframe2.myheight = 0\n\t\tend\n\t\tlocal buttonText\n\t\tif desc then -- Switch all checkbutton frame to SimpleHTML frame (auto wrap)\n\t\t\tbuttonText = CreateFrame(\"SimpleHTML\", \"$parentText\", button)\n\t\t\tbuttonText:SetFontObject(\"p\", \"GameFontNormal\")\n\t\t\tbuttonText:SetHyperlinksEnabled(true)\n\t\t\tbuttonText:SetScript(\"OnHyperlinkClick\", function(self, _, link)\n\t\t\t\tif IsShiftKeyDown() then\n\t\t\t\t\tlocal msg = link:gsub(\"|h(.*)|h\", \"|h[%1]|h\")\n\t\t\t\t\tlocal chatWindow = ChatEdit_GetActiveWindow()\n\t\t\t\t\tif chatWindow then\n\t\t\t\t\t\tchatWindow:Insert(msg)\n\t\t\t\t\telse\n\t\t\t\t\t\tSendChatMessage(msg, (select(2, IsInInstance()) == \"pvp\" and \"BATTLEGROUND\") or (GetNumRaidMembers() > 0 and \"RAID\") or \"PARTY\")\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend)\n\t\t\tbuttonText:SetScript(\"OnHyperlinkEnter\", function(self, data)\n\t\t\t\tGameTooltip:SetOwner(self, \"ANCHOR_NONE\")\n\t\t\t\tlocal linkType = strsplit(\":\", data)\n\t\t\t\tif linkType == \"http\" then\n\t\t\t\t\treturn\n\t\t\t\tend\n\t\t\t\tif linkType ~= \"journal\" then\n\t\t\t\t\tGameTooltip:SetHyperlink(data)\n\t\t\t\telse -- \"journal:contentType:contentID:difficulty\"\n\t\t\t\t\tlocal _, contentType, contentID = strsplit(\":\", data)\n\t\t\t\t\tif contentType == \"2\" then\n\t\t\t\t\t\tlocal name, description = DBM:EJ_GetSectionInfo(tonumber(contentID))\n\t\t\t\t\t\tGameTooltip:AddLine(name or CL.UNKNOWN, 255, 255, 255, 0)\n\t\t\t\t\t\tGameTooltip:AddLine(\" \")\n\t\t\t\t\t\tGameTooltip:AddLine(description or CL.UNKNOWN, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tGameTooltip:Show()\n\t\t\t\tcurrActiveButton = self:GetParent()\n\t\t\t\tupdateFrame:SetScript(\"OnUpdate\", function(self)\n\t\t\t\t\tlocal inHitBox = GetCursorPosition() - currActiveButton:GetCenter() < -100\n\t\t\t\t\tif currActiveButton.fakeHighlight and not inHitBox then\n\t\t\t\t\t\tcurrActiveButton:UnlockHighlight()\n\t\t\t\t\t\tcurrActiveButton.fakeHighlight = nil\n\t\t\t\t\telseif not currActiveButton.fakeHighlight and inHitBox then\n\t\t\t\t\t\tcurrActiveButton:LockHighlight()\n\t\t\t\t\t\tcurrActiveButton.fakeHighlight = true\n\t\t\t\t\tend\n\t\t\t\t\tlocal x, y = GetCursorPosition()\n\t\t\t\t\tlocal scale = UIParent:GetEffectiveScale()\n\t\t\t\t\tGameTooltip:ClearAllPoints()\n\t\t\t\t\tGameTooltip:SetPoint(\"BOTTOMLEFT\", nil, \"BOTTOMLEFT\", (x / scale) + 5, (y / scale) + 2)\n\t\t\t\tend)\n\t\t\t\tif GetCursorPosition() - self:GetParent():GetCenter() < -100 then\n\t\t\t\t\tself:GetParent().fakeHighlight = true\n\t\t\t\t\tself:GetParent():LockHighlight()\n\t\t\t\tend\n\t\t\tend)\n\t\t\tbuttonText:SetScript(\"OnHyperlinkLeave\", function(self)\n\t\t\t\tGameTooltip:Hide()\n\t\t\t\tupdateFrame:SetScript(\"OnUpdate\", nil)\n\t\t\t\tif self:GetParent().fakeHighlight then\n\t\t\t\t\tself:GetParent().fakeHighlight = nil\n\t\t\t\t\tself:GetParent():UnlockHighlight()\n\t\t\t\tend\n\t\t\tend)\n\t\t\tbuttonText:SetHeight(25)\n\t\t\tdesc = \"<html><body><p>\" .. desc .. \"</p></body></html>\"\n\t\telse\n\t\t\tbuttonText = button:CreateFontString(\"$parentText\", \"ARTWORK\", \"GameFontNormal\")\n\t\t\tbuttonText:SetPoint(\"LEFT\", button, \"RIGHT\", 0, 1)\n\t\tend\n\t\tbutton.textObj = buttonText\n\t\tbutton.text = desc or CL.UNKNOWN\n\t\tbutton.widthPad = frame and frame:GetWidth() + frame2:GetWidth() or 0\n\t\tbuttonText:SetWidth(self.frame:GetWidth() - button.widthPad)\n\t\tbuttonText.GetContentHeight = function()\n\t\t\treturn select(4, buttonText:GetBoundsRect()) or 25\n\t\tend\n\t\tif textLeft then\n\t\t\tbuttonText:ClearAllPoints()\n\t\t\tbuttonText:SetPoint(\"RIGHT\", frame2 or frame or button, \"LEFT\")\n\t\t\tbuttonText:SetJustifyH(\"p\", \"RIGHT\")\n\t\telse\n\t\t\tbuttonText:SetJustifyH(\"p\", \"LEFT\")\n\t\t\tbuttonText:SetPoint(\"TOPLEFT\", frame2 or frame or button, \"TOPRIGHT\", textPad or 0, -4)\n\t\tend\n\t\tbuttonText:SetText(button.text)\n\t\tbutton.myheight = mmax(buttonText:GetContentHeight() + 12, 25)\n\t\tif dbmvar and DBM.Options[dbmvar] ~= nil then\n\t\t\tbutton:SetScript(\"OnShow\", function(self)\n\t\t\t\tself:SetChecked(DBM.Options[dbmvar])\n\t\t\tend)\n\t\t\tbutton:SetScript(\"OnClick\", function()\n\t\t\t\tDBM.Options[dbmvar] = not DBM.Options[dbmvar]\n\t\t\tend)\n\t\tend\n\t\tif dbtvar then\n\t\t\tbutton:SetScript(\"OnShow\", function(self)\n\t\t\t\tself:SetChecked(DBT.Options[dbtvar])\n\t\t\tend)\n\t\t\tbutton:SetScript(\"OnClick\", function()\n\t\t\t\tDBT:SetOption(dbtvar, not DBT.Options[dbtvar])\n\t\t\tend)\n\t\tend\n\t\tif globalvar and _G[globalvar] ~= nil then\n\t\t\tbutton:SetScript(\"OnShow\", function(self)\n\t\t\t\tself:SetChecked(_G[globalvar])\n\t\t\tend)\n\t\t\tbutton:SetScript(\"OnClick\", function()\n\t\t\t\t_G[globalvar] = not _G[globalvar]\n\t\t\tend)\n\t\tend\n\t\tself:SetLastObj(button)\n\t\treturn button\n\tend\nend\n\nfunction PanelPrototype:CreateArea(name)\n\tlocal area = CreateFrame(\"Button\", \"DBM_GUI_Option_\" .. self:GetNewID(), self.frame, \"OptionsBoxTemplate\")\n\tarea.mytype = \"area\"\n\tarea:SetBackdropColor(0.15, 0.15, 0.15, 0.2)\n\tarea:SetBackdropBorderColor(0.4, 0.4, 0.4)\n\t_G[area:GetName() .. \"Title\"]:SetText(parseDescription(name))\n\tif select(\"#\", self.frame:GetChildren()) == 1 then\n\t\tarea:SetPoint(\"TOPLEFT\", self.frame, 5, -20)\n\telse\n\t\tarea:SetPoint(\"TOPLEFT\", select(-2, self.frame:GetChildren()) or self.frame, \"BOTTOMLEFT\", 0, -20)\n\tend\n\tself:SetLastObj(area)\n\t-- Used for ElvUI AddonSkins\n\tself.areas = self.areas or {}\n\ttinsert(self.areas, {frame = area, parent = self, framename = \"DBM_GUI_Option_\" .. self:GetCurrentID()})\n\t--\n\treturn setmetatable({\n\t\tframe\t= area,\n\t\tparent\t= self\n\t}, {\n\t\t__index = PanelPrototype\n\t})\nend\n\nlocal function CreateTextureMarkup(file, fileWidth, fileHeight, width, height, left, right, top, bottom, xOffset, yOffset)\n\treturn (\"|T%s:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d|t\"):format(\n\t\t  file\n\t\t, height\n\t\t, width\n\t\t, xOffset or 0\n\t\t, yOffset or 0\n\t\t, fileWidth\n\t\t, fileHeight\n\t\t, left * fileWidth\n\t\t, right * fileWidth\n\t\t, top * fileHeight\n\t\t, bottom * fileHeight\n\t)\nend\n\nfunction PanelPrototype:CreateAbility(titleText, icon)\n\tlocal area = CreateFrame(\"Frame\", \"DBM_GUI_Option_\" .. self:GetNewID(), self.frame, \"OptionsBoxTemplate\")\n\tarea.mytype = \"ability\"\n\tarea.hidden = not DBM.Options.AutoExpandSpellGroups\n\tarea:SetBackdropColor(0.15, 0.15, 0.15, 0.2)\n\tarea:SetBackdropBorderColor(0.4, 0.4, 0.4)\n\tif select(\"#\", self.frame:GetChildren()) == 1 then\n\t\tarea:SetPoint(\"TOPLEFT\", self.frame, 5, -20)\n\telse\n\t\tarea:SetPoint(\"TOPLEFT\", select(-2, self.frame:GetChildren()) or self.frame, \"BOTTOMLEFT\", 0, -20)\n\tend\n\tlocal title = _G[area:GetName() .. \"Title\"]\n\tif icon then\n\t\tlocal markup = CreateTextureMarkup(icon, 0, 0, 16, 16, 0, 0, 0, 0, 0, 0)\n\t\ttitle:SetText(markup .. titleText)\n\telse\n\t\ttitle:SetText(titleText)\n\tend\n\ttitle:ClearAllPoints()\n\ttitle:SetPoint(\"BOTTOMLEFT\", area, \"TOPLEFT\", 20, 0)\n\ttitle:SetFontObject(\"GameFontWhite\")\n\t-- Button\n\tlocal button = CreateFrame(\"Button\", area:GetName() .. \"Button\", area, \"OptionsListButtonTemplate\")\n\tbutton:ClearAllPoints()\n\tbutton:SetPoint(\"LEFT\", title, -15, 0)\n\tbutton:Show()\n\tbutton:SetSize(18, 18)\n\tbutton:SetNormalFontObject(GameFontWhite)\n\tbutton:SetHighlightFontObject(GameFontWhite)\n\t-- ElvUI skin\n\tif ElvUI then\n\t\tif not ElvUI[1]:GetModule(\"Skins\").HandleCollapseTexture then\n\t\t\tDBM:AddMsg(\"Outdated ElvUI! Skins module must be updated in order for this version of DBM to be skinned.\") -- will intentionally flood chat\n\t\telse\n\t\t\tElvUI[1]:GetModule(\"Skins\"):HandleCollapseTexture(button.toggle)\n\t\tend\n\tend\n\t--\n\tbutton.toggle:SetNormalTexture(area.hidden and \"Interface\\\\Buttons\\\\UI-PlusButton-UP\" or \"Interface\\\\Buttons\\\\UI-MinusButton-UP\")\n\tbutton.toggle:SetPushedTexture(area.hidden and \"Interface\\\\Buttons\\\\UI-PlusButton-DOWN\" or \"Interface\\\\Buttons\\\\UI-MinusButton-DOWN\")\n\tbutton.toggle:Show()\n\tbutton.highlight:Hide()\n\tbutton.toggleFunc = function()\n\t\tarea.hidden = not area.hidden\n\t\tbutton.toggle:SetNormalTexture(area.hidden and \"Interface\\\\Buttons\\\\UI-PlusButton-UP\" or \"Interface\\\\Buttons\\\\UI-MinusButton-UP\")\n\t\tbutton.toggle:SetPushedTexture(area.hidden and \"Interface\\\\Buttons\\\\UI-PlusButton-DOWN\" or \"Interface\\\\Buttons\\\\UI-MinusButton-DOWN\")\n\t\t_G[\"DBM_GUI_OptionsFrame\"]:DisplayFrame(DBM_GUI.currentViewing)\n\tend\n\tbutton:RegisterForClicks(\"\")\n\t--\n\tself:SetLastObj(area)\n\treturn setmetatable({\n\t\tframe\t= area,\n\t\tparent\t= self\n\t}, {\n\t\t__index = PanelPrototype\n\t})\nend\n\nfunction DBM_GUI:CreateNewPanel(frameName, frameType, showSub, _, displayName)\n\tlocal panel = CreateFrame(\"Frame\", \"DBM_GUI_Option_\" .. self:GetNewID(), _G[\"DBM_GUI_OptionsFramePanelContainer\"])\n\tpanel.mytype = \"panel\"\n\tpanel.ID = self:GetCurrentID()\n\tlocal container = _G[\"DBM_GUI_OptionsFramePanelContainer\"]\n\tpanel:SetSize(container:GetWidth(), container:GetHeight())\n\tpanel:SetPoint(\"TOPLEFT\", \"DBM_GUI_OptionsFramePanelContainer\", \"TOPLEFT\")\n\tpanel.displayName = displayName or frameName\n\tpanel.showSub = showSub or showSub == nil\n\tpanel:Hide()\n\tif frameType == \"option\" then\n\t\tframeType = 2\n\tend\n\tself.tabs[frameType or 1]:CreateCategory(panel, self and self.frame and self.frame.ID)\n\tPanelPrototype:SetLastObj(panel)\n\ttinsert(self.panels, {\n\t\tframe\t= panel,\n\t\tparent\t= self\n\t})\n\tpanel.panelid = #self.panels\n\treturn setmetatable(self.panels[#self.panels], {\n\t\t__index = PanelPrototype\n\t})\nend\n"
  },
  {
    "path": "DBM-GUI/modules/options/alerts/Alerts.lua",
    "content": "local L\t\t= DBM_GUI_L\n\nDBM_GUI.Cat_Alerts = DBM_GUI:CreateNewPanel(L.TabCategory_Alerts, \"option\")\n\nlocal AlertsArea1\t\t= DBM_GUI.Cat_Alerts:CreateArea(L.Area_BasicSetup)\nAlertsArea1:CreateText(\"|cFF73C2FBhttps://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BNew-User-Guide%5D-Initial-Setup-Tips|r\", nil, true, nil, \"LEFT\", 0)\nAlertsArea1.frame:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, L.Area_BasicSetup, \"https://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BNew-User-Guide%5D-Initial-Setup-Tips\")\nend)\n\nlocal AlertsArea2\t\t= DBM_GUI.Cat_Alerts:CreateArea(L.Area_SpecAnnounceConfig)\nAlertsArea2:CreateText(\"|cFF73C2FBhttps://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BGuide%5D-Special-Announce-Sound-Config|r\", nil, true, nil, \"LEFT\", 0)\nAlertsArea2.frame:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, L.Area_SpecAnnounceConfig, \"https://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BGuide%5D-Special-Announce-Sound-Config\")\nend)\n\nlocal AlertsArea3\t\t= DBM_GUI.Cat_Alerts:CreateArea(L.Area_SpecAnnounceNotes)\nAlertsArea3:CreateText(\"|cFF73C2FBhttps://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BGuide%5D-Notes|r\", nil, true, nil, \"LEFT\", 0)\nAlertsArea3.frame:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, L.Area_SpecAnnounceNotes, \"https://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BGuide%5D-Notes\")\nend)\n\nlocal AlertsArea4\t\t= DBM_GUI.Cat_Alerts:CreateArea(L.Area_VoicePackInfo)\nAlertsArea4:CreateText(\"|cFF73C2FBhttps://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BGuide%5D-DBM-&-Voicepacks|r\", nil, true, nil, \"LEFT\", 0)\nAlertsArea4.frame:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, L.Area_VoicePackInfo, \"https://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BGuide%5D-DBM-&-Voicepacks\")\nend)\n"
  },
  {
    "path": "DBM-GUI/modules/options/alerts/Announcements.lua",
    "content": "local L\t\t= DBM_GUI_L\nlocal CL\t= DBM_CORE_L\n\nlocal RaidWarningPanel = DBM_GUI.Cat_Alerts:CreateNewPanel(L.Tab_RaidWarning, \"option\")\n\nlocal raidwarnoptions = RaidWarningPanel:CreateArea(L.RaidWarning_Header)\n\nlocal check1 = raidwarnoptions:CreateCheckButton(L.ShowWarningsInChat, true, nil, \"ShowWarningsInChat\")\nraidwarnoptions:CreateCheckButton(L.ShowFakedRaidWarnings, true, nil, \"ShowFakedRaidWarnings\")\nlocal check2 = raidwarnoptions:CreateCheckButton(L.WarningIconLeft, true, nil, \"WarningIconLeft\")\nlocal check3 = raidwarnoptions:CreateCheckButton(L.WarningIconRight, true, nil, \"WarningIconRight\")\nlocal check4 = raidwarnoptions:CreateCheckButton(L.WarningIconChat, true, nil, \"WarningIconChat\")\nlocal check5 = raidwarnoptions:CreateCheckButton(L.WarningAlphabetical, true, nil, \"WarningAlphabetical\")\nlocal check6 = raidwarnoptions:CreateCheckButton(L.ShortTextSpellname, true, nil, \"WarningShortText\")\n\n-- RaidWarn Font\nlocal Fonts = DBM_GUI:MixinSharedMedia3(\"font\", {\n\t{\n\t\ttext\t= DEFAULT,\n\t\tvalue\t= \"standardFont\"\n\t},\n\t{\n\t\ttext\t= \"Arial\",\n\t\tvalue\t= \"Fonts\\\\ARIALN.TTF\"\n\t},\n\t{\n\t\ttext\t= \"Skurri\",\n\t\tvalue\t= \"Fonts\\\\SKURRI.TTF\"\n\t},\n\t{\n\t\ttext\t= \"Morpheus\",\n\t\tvalue\t= \"Fonts\\\\MORPHEUS.TTF\"\n\t}\n})\n\nlocal FontDropDown = raidwarnoptions:CreateDropdown(L.FontType, Fonts, \"DBM\", \"WarningFont\", function(value)\n\tDBM.Options.WarningFont = value\n\tDBM:UpdateWarningOptions()\n\tDBM:AddWarning(CL.MOVE_WARNING_MESSAGE)\nend)\nFontDropDown:SetPoint(\"TOPLEFT\", check6, \"BOTTOMLEFT\", 0, -10)\n\n-- RaidWarn Font Style\nlocal FontStyles = {\n\t{\n\t\ttext\t= L.None,\n\t\tvalue\t= \"None\"\n\t},\n\t{\n\t\ttext\t= L.Outline,\n\t\tvalue\t= \"OUTLINE\",\n\t\tflag\t= true\n\t},\n\t{\n\t\ttext\t= L.ThickOutline,\n\t\tvalue\t= \"THICKOUTLINE\",\n\t\tflag\t= true\n\t},\n\t{\n\t\ttext\t= L.MonochromeOutline,\n\t\tvalue\t= \"MONOCHROME,OUTLINE\",\n\t\tflag\t= true\n\t},\n\t{\n\t\ttext\t= L.MonochromeThickOutline,\n\t\tvalue\t= \"MONOCHROME,THICKOUTLINE\",\n\t\tflag\t= true\n\t}\n}\n\nlocal FontStyleDropDown = raidwarnoptions:CreateDropdown(L.FontStyle, FontStyles, \"DBM\", \"WarningFontStyle\", function(value)\n\tDBM.Options.WarningFontStyle = value\n\tDBM:UpdateWarningOptions()\n\tDBM:AddWarning(CL.MOVE_WARNING_MESSAGE)\nend)\nFontStyleDropDown:SetPoint(\"TOPLEFT\", FontDropDown, \"BOTTOMLEFT\", 0, -10)\n\n-- RaidWarn Font Shadow\nlocal FontShadow = raidwarnoptions:CreateCheckButton(L.FontShadow, nil, nil, \"WarningFontShadow\")\nFontShadow:SetScript(\"OnClick\", function()\n\tDBM.Options.WarningFontShadow = not DBM.Options.WarningFontShadow\n\tDBM:UpdateWarningOptions()\n\tDBM:AddWarning(CL.MOVE_WARNING_MESSAGE)\nend)\nFontShadow:SetPoint(\"LEFT\", FontStyleDropDown, \"RIGHT\", 35, 0)\n\n-- RaidWarn Sound\nlocal Sounds = DBM_GUI:MixinSharedMedia3(\"sound\", {\n\t{\n\t\ttext\t= L.NoSound,\n\t\tvalue\t= \"\"\n\t},\n\t{\n\t\ttext\t= \"RaidWarning\",\n\t\tvalue\t= \"Sound\\\\interface\\\\RaidWarning.wav\"\n\t},\n\t{\n\t\ttext\t= \"Classic\",\n\t\tvalue\t= \"Sound\\\\Doodad\\\\BellTollNightElf.wav\"\n\t},\n\t{\n\t\ttext\t= \"Ding\",\n\t\tvalue\t= \"Sound\\\\interface\\\\AlarmClockWarning3.wav\"\n\t}\n})\n\nlocal RaidWarnSoundDropDown = raidwarnoptions:CreateDropdown(L.RaidWarnSound, Sounds, \"DBM\", \"RaidWarningSound\", function(value)\n\tDBM.Options.RaidWarningSound = value\nend)\nRaidWarnSoundDropDown:SetPoint(\"TOPLEFT\", FontStyleDropDown, \"BOTTOMLEFT\", 0, -10)\n\n-- RaidWarn Font Size\nlocal fontSizeSlider = raidwarnoptions:CreateSlider(L.FontSize, 8, 60, 1, 200)\nfontSizeSlider:SetPoint(\"TOPLEFT\", FontDropDown, \"TOPLEFT\", 20, -130)\nfontSizeSlider:SetValue(DBM.Options.WarningFontSize)\nfontSizeSlider:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.WarningFontSize = self:GetValue()\n\tDBM:UpdateWarningOptions()\n\tDBM:AddWarning(CL.MOVE_WARNING_MESSAGE)\nend)\n\n-- RaidWarn Duration\nlocal durationSlider = raidwarnoptions:CreateSlider(L.Warn_Duration, 1, 10, 0.5, 200)\ndurationSlider:SetPoint(\"TOPLEFT\", FontDropDown, \"TOPLEFT\", 20, -170)\ndurationSlider:SetValue(DBM.Options.WarningDuration2)\ndurationSlider:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.WarningDuration2 = self:GetValue()\n\tDBM:UpdateWarningOptions()\n\tDBM:AddWarning(CL.MOVE_WARNING_MESSAGE)\nend)\n\nlocal movemebutton = raidwarnoptions:CreateButton(L.MoveMe, 100, 16)\nmovemebutton:SetPoint(\"TOPRIGHT\", raidwarnoptions.frame, \"TOPRIGHT\", -2, -4)\nmovemebutton:SetNormalFontObject(GameFontNormalSmall)\nmovemebutton:SetHighlightFontObject(GameFontNormalSmall)\nmovemebutton:SetScript(\"OnClick\", function()\n\tDBM:MoveWarning()\nend)\n\nlocal resetbutton = raidwarnoptions:CreateButton(L.SpecWarn_ResetMe, 120, 16)\nresetbutton:SetPoint(\"BOTTOMRIGHT\", raidwarnoptions.frame, \"BOTTOMRIGHT\", -2, 4)\nresetbutton:SetNormalFontObject(GameFontNormalSmall)\nresetbutton:SetHighlightFontObject(GameFontNormalSmall)\nresetbutton:SetScript(\"OnClick\", function()\n\t-- Set Options\n\tDBM.Options.ShowWarningsInChat = DBM.DefaultOptions.ShowWarningsInChat\n\tDBM.Options.WarningIconLeft = DBM.DefaultOptions.WarningIconLeft\n\tDBM.Options.WarningIconRight = DBM.DefaultOptions.WarningIconRight\n\tDBM.Options.WarningIconChat = DBM.DefaultOptions.WarningIconChat\n\tDBM.Options.WarningAlphabetical = DBM.DefaultOptions.WarningAlphabetical\n\tDBM.Options.WarningShortText = DBM.DefaultOptions.WarningShortText\n\tDBM.Options.WarningFont = DBM.DefaultOptions.WarningFont\n\tDBM.Options.FontStyles = DBM.DefaultOptions.FontStyles\n\tDBM.Options.WarningFontSize = DBM.DefaultOptions.WarningFontSize\n\tDBM.Options.WarningDuration2 = DBM.DefaultOptions.WarningDuration2\n\tDBM.Options.WarningFontShadow = DBM.DefaultOptions.WarningFontShadow\n\tDBM.Options.RaidWarningSound = DBM.DefaultOptions.RaidWarningSound\n\tDBM.Options.WarningPoint = DBM.DefaultOptions.WarningPoint\n\tDBM.Options.WarningX = DBM.DefaultOptions.WarningX\n\tDBM.Options.WarningY = DBM.DefaultOptions.WarningY\n\t-- Set UI visuals\n\tcheck1:SetChecked(DBM.Options.ShowWarningsInChat)\n\tcheck2:SetChecked(DBM.Options.WarningIconLeft)\n\tcheck3:SetChecked(DBM.Options.WarningIconRight)\n\tcheck4:SetChecked(DBM.Options.WarningIconChat)\n\tcheck5:SetChecked(DBM.Options.WarningAlphabetical)\n\tcheck6:SetChecked(DBM.Options.WarningShortText)\n\tFontDropDown:SetSelectedValue(DBM.Options.WarningFont)\n\tFontStyleDropDown:SetSelectedValue(DBM.Options.FontStyles)\n\tfontSizeSlider:SetValue(DBM.DefaultOptions.WarningFontSize)\n\tdurationSlider:SetValue(DBM.DefaultOptions.WarningDuration2)\n\tFontShadow:SetChecked(DBM.Options.WarningFontShadow)\n\tRaidWarnSoundDropDown:SetSelectedValue(DBM.Options.RaidWarningSound)\n\tDBM:UpdateWarningOptions()\nend)\n\n--Raid Warning Colors\nlocal raidwarncolors = RaidWarningPanel:CreateArea(L.RaidWarnColors)\n\nlocal color1 = raidwarncolors:CreateColorSelect(64)\nlocal color2 = raidwarncolors:CreateColorSelect(64)\nlocal color3 = raidwarncolors:CreateColorSelect(64)\nlocal color4 = raidwarncolors:CreateColorSelect(64)\nlocal color1text = raidwarncolors:CreateText(L.RaidWarnColor_1, 64, nil, nil, \"CENTER\", 0)\nlocal color2text = raidwarncolors:CreateText(L.RaidWarnColor_2, 64, nil, nil, \"CENTER\", 0)\nlocal color3text = raidwarncolors:CreateText(L.RaidWarnColor_3, 64, nil, nil, \"CENTER\", 0)\nlocal color4text = raidwarncolors:CreateText(L.RaidWarnColor_4, 64, nil, nil, \"CENTER\", 0)\nlocal color1reset = raidwarncolors:CreateButton(L.Reset, 60, 10, nil, GameFontNormalSmall)\nlocal color2reset = raidwarncolors:CreateButton(L.Reset, 60, 10, nil, GameFontNormalSmall)\nlocal color3reset = raidwarncolors:CreateButton(L.Reset, 60, 10, nil, GameFontNormalSmall)\nlocal color4reset = raidwarncolors:CreateButton(L.Reset, 60, 10, nil, GameFontNormalSmall)\n\ncolor1.myheight = 100\ncolor2.myheight = 0\ncolor3.myheight = 0\ncolor4.myheight = 0\n\ncolor1:SetPoint(\"TOPLEFT\", 30, -10)\ncolor2:SetPoint(\"TOPLEFT\", color1, \"TOPRIGHT\", 30, 0)\ncolor3:SetPoint(\"TOPLEFT\", color2, \"TOPRIGHT\", 30, 0)\ncolor4:SetPoint(\"TOPLEFT\", color3, \"TOPRIGHT\", 30, 0)\n\nlocal function UpdateColor(self)\n\tlocal r, g, b = self:GetColorRGB()\n\tself.textid:SetTextColor(r, g, b)\n\tDBM.Options.WarningColors[self.myid].r = r\n\tDBM.Options.WarningColors[self.myid].g = g\n\tDBM.Options.WarningColors[self.myid].b = b\nend\nlocal function ResetColor(id, frame)\n\treturn function()\n\t\tDBM.Options.WarningColors[id].r = DBM.DefaultOptions.WarningColors[id].r\n\t\tDBM.Options.WarningColors[id].g = DBM.DefaultOptions.WarningColors[id].g\n\t\tDBM.Options.WarningColors[id].b = DBM.DefaultOptions.WarningColors[id].b\n\t\tframe:SetColorRGB(DBM.Options.WarningColors[id].r, DBM.Options.WarningColors[id].g, DBM.Options.WarningColors[id].b)\n\tend\nend\nlocal function UpdateColorFrames(color, text, rset, id)\n\tcolor.textid = text\n\tcolor.myid = id\n\tcolor:SetScript(\"OnColorSelect\", UpdateColor)\n\tcolor:SetColorRGB(DBM.Options.WarningColors[id].r, DBM.Options.WarningColors[id].g, DBM.Options.WarningColors[id].b)\n\ttext:SetPoint(\"TOPLEFT\", color, \"BOTTOMLEFT\", 3, -10)\n\ttext.myheight = 0\n\trset:SetPoint(\"TOP\", text, \"BOTTOM\", 0, -5)\n\trset:SetScript(\"OnClick\", ResetColor(id, color))\nend\nUpdateColorFrames(color1, color1text, color1reset, 1)\nUpdateColorFrames(color2, color2text, color2reset, 2)\nUpdateColorFrames(color3, color3text, color3reset, 3)\nUpdateColorFrames(color4, color4text, color4reset, 4)\n\nlocal infotext = raidwarncolors:CreateText(L.InfoRaidWarning, nil, false, GameFontNormalSmall, \"LEFT\", 0)\ninfotext:SetPoint(\"BOTTOMLEFT\", raidwarncolors.frame, \"BOTTOMLEFT\", 10, 10)\n"
  },
  {
    "path": "DBM-GUI/modules/options/alerts/ChatframeMessages.lua",
    "content": "local L = DBM_GUI_L\nlocal generalWarningPanel = DBM_GUI.Cat_Alerts:CreateNewPanel(L.Tab_GeneralMessages, \"option\")\n\nlocal generalCoreArea = generalWarningPanel:CreateArea(L.CoreMessages)\ngeneralCoreArea:CreateCheckButton(L.ShowPizzaMessage, true, nil, \"ShowPizzaMessage\")\ngeneralCoreArea:CreateCheckButton(L.ShowAllVersions, true, nil, \"ShowAllVersions\")\ngeneralCoreArea:CreateCheckButton(L.ShowReminders, true, nil, \"ShowReminders\")\n\nlocal generalMessagesArea = generalWarningPanel:CreateArea(L.CombatMessages)\ngeneralMessagesArea:CreateCheckButton(L.ShowEngageMessage, true, nil, \"ShowEngageMessage\")\ngeneralMessagesArea:CreateCheckButton(L.ShowDefeatMessage, true, nil, \"ShowDefeatMessage\")\ngeneralMessagesArea:CreateCheckButton(L.ShowGuildMessages, true, nil, \"ShowGuildMessages\")\ngeneralMessagesArea:CreateCheckButton(L.ShowGuildMessagesPlus, true, nil, \"ShowGuildMessagesPlus\")\n\nlocal generalExtraAlerts = generalWarningPanel:CreateArea(L.Area_ChatAlerts)\ngeneralExtraAlerts:CreateCheckButton(L.RoleSpecAlert, true, nil, \"RoleSpecAlert\")\ngeneralExtraAlerts:CreateCheckButton(L.CheckGear, true, nil, \"CheckGear\")\ngeneralExtraAlerts:CreateCheckButton(L.WorldBuffAlert, true, nil, \"WorldBuffAlert\")\ngeneralExtraAlerts:CreateCheckButton(L.WorldBossAlert, true, nil, \"WorldBossAlert\")\n\nlocal generalBugsAlerts = generalWarningPanel:CreateArea(L.Area_BugAlerts)\ngeneralBugsAlerts:CreateCheckButton(L.BadTimerAlert, true, nil, \"BadTimerAlert\")\ngeneralBugsAlerts:CreateCheckButton(L.BadIDAlert, true, nil, \"BadIDAlert\")\n"
  },
  {
    "path": "DBM-GUI/modules/options/alerts/EventSounds.lua",
    "content": "local L = DBM_GUI_L\n\nlocal Sounds = DBM_GUI:MixinSharedMedia3(\"sound\", {\n\t{\n\t\ttext\t= L.NoSound,\n\t\tvalue\t= \"None\"\n\t},\n\t{\n\t\ttext\t= \"Muradin: Charge\",\n\t\tvalue\t= \"Sound\\\\Creature\\\\MuradinBronzebeard\\\\IC_Muradin_Saurfang02.wav\"\n\t}\n})\n\nlocal eventSoundsPanel\t\t\t= DBM_GUI.Cat_Alerts:CreateNewPanel(L.Panel_EventSounds, \"option\")\nlocal eventSoundsGeneralArea\t= eventSoundsPanel:CreateArea(L.Area_SoundSelection)\n\nlocal VictorySoundDropdown = eventSoundsGeneralArea:CreateDropdown(L.EventVictorySound, DBM:GetVictorySounds(), \"DBM\", \"EventSoundVictory2\", function(value)\n\tDBM.Options.EventSoundVictory2 = value\n\tif value ~= \"Random\" then\n\t\tDBM:PlaySoundFile(value)\n\tend\nend, 180)\nVictorySoundDropdown:SetPoint(\"TOPLEFT\", eventSoundsGeneralArea.frame, \"TOPLEFT\", 0, -20)\nVictorySoundDropdown.myheight = 0\n\nlocal VictorySoundDropdown2 = eventSoundsGeneralArea:CreateDropdown(L.EventWipeSound, DBM:GetDefeatSounds(), \"DBM\", \"EventSoundWipe\", function(value)\n\tDBM.Options.EventSoundWipe = value\n\tif value ~= \"Random\" then\n\t\tDBM:PlaySoundFile(value)\n\tend\nend, 180)\nVictorySoundDropdown2:SetPoint(\"LEFT\", VictorySoundDropdown, \"RIGHT\", 45, 0)\n\nlocal useCombined = DBM.Options.EventSoundMusicCombined\nlocal DungeonMusicDropDown = eventSoundsGeneralArea:CreateDropdown(L.EventDungeonMusic, useCombined and DBM:GetMusic() or DBM:GetDungeonMusic(), \"DBM\", \"EventSoundDungeonBGM\", function(value)\n\tDBM.Options.EventSoundDungeonBGM = value\n\tif value == \"Random\" or value == \"None\" then\n\t\tif DBM.Options.tempMusicSetting then\n\t\t\tSetCVar(\"Sound_EnableMusic\", DBM.Options.tempMusicSetting)\n\t\t\tDBM.Options.tempMusicSetting = nil\n\t\tend\n\t\tif DBM.Options.musicPlaying then\n\t\t\tStopMusic()\n\t\t\tDBM.Options.musicPlaying = nil\n\t\tend\n\telse\n\t\tif not DBM.Options.tempMusicSetting then\n\t\t\tDBM.Options.tempMusicSetting = tonumber(GetCVar(\"Sound_EnableMusic\"))\n\t\t\tif DBM.Options.tempMusicSetting == 0 then\n\t\t\t\tSetCVar(\"Sound_EnableMusic\", 1)\n\t\t\telse\n\t\t\t\tDBM.Options.tempMusicSetting = nil\n\t\t\tend\n\t\tend\n\t\tPlayMusic(value)\n\t\tDBM.Options.musicPlaying = true\n\tend\nend, 180)\nDungeonMusicDropDown:SetPoint(\"TOPLEFT\", VictorySoundDropdown, \"TOPLEFT\", 0, -45)\n\nlocal MusicDropDown = eventSoundsGeneralArea:CreateDropdown(L.EventEngageMusic, useCombined and DBM:GetMusic() or DBM:GetBattleMusic(), \"DBM\", \"EventSoundMusic\", function(value)\n\tDBM.Options.EventSoundMusic = value\n\tif value == \"Random\" or value == \"None\" then\n\t\tif DBM.Options.tempMusicSetting then\n\t\t\tSetCVar(\"Sound_EnableMusic\", DBM.Options.tempMusicSetting)\n\t\t\tDBM.Options.tempMusicSetting = nil\n\t\tend\n\t\tif DBM.Options.musicPlaying then\n\t\t\tStopMusic()\n\t\t\tDBM.Options.musicPlaying = nil\n\t\tend\n\telse\n\t\tif not DBM.Options.tempMusicSetting then\n\t\t\tDBM.Options.tempMusicSetting = tonumber(GetCVar(\"Sound_EnableMusic\"))\n\t\t\tif DBM.Options.tempMusicSetting == 0 then\n\t\t\t\tSetCVar(\"Sound_EnableMusic\", 1)\n\t\t\telse\n\t\t\t\tDBM.Options.tempMusicSetting = nil\n\t\t\tend\n\t\tend\n\t\tPlayMusic(value)\n\t\tDBM.Options.musicPlaying = true\n\tend\nend, 180)\nMusicDropDown:SetPoint(\"TOPLEFT\", VictorySoundDropdown2, \"TOPLEFT\", 0, -45)\nMusicDropDown.myheight = 0\n\nlocal PullTimerSoundDropdown = eventSoundsGeneralArea:CreateDropdown(L.EventEngagePT, Sounds, \"DBM\", \"EventSoundPullTimer\", function(value)\n\tDBM.Options.EventSoundPullTimer = value\n\tDBM:PlaySoundFile(DBM.Options.EventSoundPullTimer)\nend, 180)\nPullTimerSoundDropdown:SetPoint(\"TOPLEFT\", DungeonMusicDropDown, \"TOPLEFT\", 0, -45)\n\nlocal EngageSoundDropdown = eventSoundsGeneralArea:CreateDropdown(L.EventEngageSound, Sounds, \"DBM\", \"EventSoundEngage2\", function(value)\n\tDBM.Options.EventSoundEngage2 = value\n\tDBM:PlaySoundFile(DBM.Options.EventSoundEngage2)\nend, 180)\nEngageSoundDropdown:SetPoint(\"LEFT\", PullTimerSoundDropdown, \"RIGHT\", 45, 0)\n\nlocal eventSoundsExtrasArea\t= eventSoundsPanel:CreateArea(L.Area_EventSoundsExtras)\neventSoundsExtrasArea:CreateCheckButton(L.EventMusicCombined, true, nil, \"EventSoundMusicCombined\")\nlocal eventSoundsFiltersArea= eventSoundsPanel:CreateArea(L.Area_EventSoundsFilters)\neventSoundsFiltersArea:CreateCheckButton(L.EventFilterDungMythicMusic, true, nil, \"EventDungMusicMythicFilter\")\neventSoundsFiltersArea:CreateCheckButton(L.EventFilterMythicMusic, true, nil, \"EventMusicMythicFilter\")\n"
  },
  {
    "path": "DBM-GUI/modules/options/alerts/SpecialAnnouncements.lua",
    "content": "local L = DBM_GUI_L\n\nlocal specPanel = DBM_GUI.Cat_Alerts:CreateNewPanel(L.Panel_SpecWarnFrame, \"option\")\n\nlocal specArea = specPanel:CreateArea(L.Area_SpecWarn)\n\nlocal check1 = specArea:CreateCheckButton(L.ShowSWarningsInChat, true, nil, \"ShowSWarningsInChat\")\nlocal check2 = specArea:CreateCheckButton(L.SpecWarn_ClassColor, true, nil, \"SWarnClassColor\")\nlocal check3 = specArea:CreateCheckButton(L.WarningAlphabetical, true, nil, \"SWarningAlphabetical\")\nlocal check4 = specArea:CreateCheckButton(L.SWarnNameInNote, true, nil, \"SWarnNameInNote\")\nlocal check5 = specArea:CreateCheckButton(L.SpecialWarningIcon, true, nil, \"SpecialWarningIcon\")\nlocal check6 = specArea:CreateCheckButton(L.ShortTextSpellname, true, nil, \"SpecialWarningShortText\")\n\nlocal movemebutton = specArea:CreateButton(L.MoveMe, 120, 16)\nmovemebutton:SetPoint(\"TOPRIGHT\", specArea.frame, \"TOPRIGHT\", -2, -4)\nmovemebutton:SetNormalFontObject(GameFontNormalSmall)\nmovemebutton:SetHighlightFontObject(GameFontNormalSmall)\nmovemebutton:SetScript(\"OnClick\", function()\n\tDBM:MoveSpecialWarning()\nend)\n\nlocal color0 = specArea:CreateColorSelect(64)\ncolor0:SetPoint(\"TOPLEFT\", specArea.frame, \"TOPLEFT\", 20, -200)\nlocal color0text = specArea:CreateText(L.FontColor, 80)\ncolor0text:SetPoint(\"BOTTOM\", color0, \"TOP\", 5, 4)\nlocal color0reset = specArea:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\ncolor0reset:SetPoint(\"TOP\", color0, \"BOTTOM\", 5, -10)\ncolor0reset:SetScript(\"OnClick\", function()\n\tDBM.Options.SpecialWarningFontCol[1] = DBM.DefaultOptions.SpecialWarningFontCol[1]\n\tDBM.Options.SpecialWarningFontCol[2] = DBM.DefaultOptions.SpecialWarningFontCol[2]\n\tDBM.Options.SpecialWarningFontCol[3] = DBM.DefaultOptions.SpecialWarningFontCol[3]\n\tcolor0:SetColorRGB(DBM.Options.SpecialWarningFontCol[1], DBM.Options.SpecialWarningFontCol[2], DBM.Options.SpecialWarningFontCol[3])\n\tDBM:UpdateSpecialWarningOptions()\nend)\ncolor0:SetColorRGB(DBM.Options.SpecialWarningFontCol[1], DBM.Options.SpecialWarningFontCol[2], DBM.Options.SpecialWarningFontCol[3])\ncolor0:SetScript(\"OnColorSelect\", function(self)\n\tDBM.Options.SpecialWarningFontCol[1] = select(1, self:GetColorRGB())\n\tDBM.Options.SpecialWarningFontCol[2] = select(2, self:GetColorRGB())\n\tDBM.Options.SpecialWarningFontCol[3] = select(3, self:GetColorRGB())\n\tcolor0text:SetTextColor(self:GetColorRGB())\n\tDBM:UpdateSpecialWarningOptions()\nend)\ncolor0.myheight = 74\n\nlocal Fonts = DBM_GUI:MixinSharedMedia3(\"font\", {\n\t{\n\t\ttext\t= DEFAULT,\n\t\tvalue\t= \"standardFont\"\n\t},\n\t{\n\t\ttext\t= \"Arial\",\n\t\tvalue\t= \"Fonts\\\\ARIALN.TTF\"\n\t},\n\t{\n\t\ttext\t= \"Skurri\",\n\t\tvalue\t= \"Fonts\\\\SKURRI.TTF\"\n\t},\n\t{\n\t\ttext\t= \"Morpheus\",\n\t\tvalue\t= \"Fonts\\\\MORPHEUS.TTF\"\n\t}\n})\n\nlocal FontDropDown = specArea:CreateDropdown(L.FontType, Fonts, \"DBM\", \"SpecialWarningFont\", function(value)\n\tDBM.Options.SpecialWarningFont = value\n\tDBM:UpdateSpecialWarningOptions()\n\tDBM:ShowTestSpecialWarning(nil, 1, nil, true)\nend)\nFontDropDown:SetPoint(\"TOPLEFT\", specArea.frame, \"TOPLEFT\", 95, -198)\nFontDropDown.myheight = 0\n\nlocal FontStyles = {\n\t{\n\t\ttext\t= L.None,\n\t\tvalue\t= \"None\"\n\t},\n\t{\n\t\ttext\t= L.Outline,\n\t\tvalue\t= \"OUTLINE\",\n\t\tflag\t= true\n\t},\n\t{\n\t\ttext\t= L.ThickOutline,\n\t\tvalue\t= \"THICKOUTLINE\",\n\t\tflag\t= true\n\t},\n\t{\n\t\ttext\t= L.MonochromeOutline,\n\t\tvalue\t= \"MONOCHROME,OUTLINE\",\n\t\tflag\t= true\n\t},\n\t{\n\t\ttext\t= L.MonochromeThickOutline,\n\t\tvalue\t= \"MONOCHROME,THICKOUTLINE\",\n\t\tflag\t= true\n\t}\n}\n\nlocal FontStyleDropDown = specArea:CreateDropdown(L.FontStyle, FontStyles, \"DBM\", \"SpecialWarningFontStyle\", function(value)\n\tDBM.Options.SpecialWarningFontStyle = value\n\tDBM:UpdateSpecialWarningOptions()\n\tDBM:ShowTestSpecialWarning(nil, 1)\nend)\nFontStyleDropDown:SetPoint(\"LEFT\", FontDropDown, \"RIGHT\", 25, 0)\nFontStyleDropDown.myheight = 0\n\nlocal FontShadow = specArea:CreateCheckButton(L.FontShadow, nil, nil, \"SpecialWarningFontShadow\")\nFontShadow:SetScript(\"OnClick\", function()\n\tDBM.Options.SpecialWarningFontShadow = not DBM.Options.SpecialWarningFontShadow\n\tDBM:UpdateSpecialWarningOptions()\n\tDBM:ShowTestSpecialWarning(nil, 1, nil, true)\nend)\nFontShadow:SetPoint(\"LEFT\", FontStyleDropDown, \"RIGHT\", -35, 25)\n\nlocal fontSizeSlider = specArea:CreateSlider(L.FontSize, 8, 60, 1, 150)\nfontSizeSlider:SetPoint(\"TOPLEFT\", FontDropDown, \"TOPLEFT\", 20, -45)\nfontSizeSlider:SetValue(DBM.Options.SpecialWarningFontSize2)\nfontSizeSlider:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.SpecialWarningFontSize2 = self:GetValue()\n\tDBM:UpdateSpecialWarningOptions()\nend)\nfontSizeSlider.myheight = 0\n\nlocal durationSlider = specArea:CreateSlider(L.Warn_Duration, 1, 10, 0.5, 150)\ndurationSlider:SetPoint(\"LEFT\", fontSizeSlider, \"RIGHT\", 20, 0)\ndurationSlider:SetValue(DBM.Options.SpecialWarningDuration2)\ndurationSlider:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.SpecialWarningDuration2 = self:GetValue()\n\tDBM:UpdateSpecialWarningOptions()\nend)\ndurationSlider.myheight = 0\n\nlocal sounds = DBM_GUI:MixinSharedMedia3(\"sound\", {\n\t{ text = L.NoSound, value = \"\" },\n\t{ text = \"Algalon: Beware!\", value = \"Sound\\\\Creature\\\\AlgalonTheObserver\\\\UR_Algalon_BHole01.wav\" },\n\t{ text = \"BB Wolf: Run Away\", value = \"Sound\\\\Creature\\\\HoodWolf\\\\HoodWolfTransformPlayer01.wav\" },\n\t{ text = \"Blizzard Raid Emote\", value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\UI_RaidBossWhisperWarning.ogg\" },\n\t{ text = \"C'Thun: You Will Die!\", value = \"Sound\\\\Creature\\\\CThun\\\\CThunYouWillDie.wav\" },\n\t{ text = \"Headless Horseman: Laugh\", value = \"Sound\\\\Creature\\\\HeadlessHorseman\\\\Horseman_Laugh_01.wav\" },\n\t{ text = \"Illidan: Not Prepared\", value = \"Sound\\\\Creature\\\\Illidan\\\\BLACK_Illidan_04.wav\" },\n\t{ text = \"Illidan: Not Prepared2\", value = \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RetailSupport\\\\VO_703_Illidan_Stormrage_03.ogg\" },\n\t{ text = \"Kaz'rogal: Marked\", value = \"Sound\\\\Creature\\\\KazRogal\\\\CAV_Kaz_Mark02.wav\" },\n\t{ text = \"Kil'Jaeden: Destruction\", value = \"Sound\\\\Creature\\\\KilJaeden\\\\KILJAEDEN02.wav\" },\n\t{ text = \"Lady Malande: Flee\", value = \"Sound\\\\Creature\\\\LadyMalande\\\\BLCKTMPLE_LadyMal_Aggro01.wav\" },\n\t{ text = \"Loatheb: I see you\", value = \"Sound\\\\Creature\\\\Loathstare\\\\Loa_Naxx_Aggro02.wav\" },\n\t{ text = \"Milhouse: Light You Up\", value = \"Sound\\\\Creature\\\\MillhouseManastorm\\\\TEMPEST_Millhouse_Pyro01.wav\" },\n\t{ text = \"Night Elf Bell\", value = \"Sound\\\\Doodad\\\\BellTollNightElf.wav\" },\n\t{ text = \"PvP Flag\", value = \"Sound\\\\Spells\\\\PVPFlagTaken.wav\" },\n\t{ text = \"Void Reaver: Marked\", value = \"Sound\\\\Creature\\\\VoidReaver\\\\TEMPEST_VoidRvr_Aggro01.wav\" },\n\t{ text = \"Yogg Saron: Laugh\", value = \"Sound\\\\Creature\\\\YoggSaron\\\\UR_YoggSaron_Slay01.wav\" },\n})\n\nlocal specWarnOne = specPanel:CreateArea(L.SpecialWarnHeader1)\n\nlocal showbuttonOne = specWarnOne:CreateButton(L.SpecWarn_DemoButton, 120, 16)\nshowbuttonOne:SetPoint(\"BOTTOMRIGHT\", specWarnOne.frame, \"BOTTOMRIGHT\", -2, 4)\nshowbuttonOne:SetNormalFontObject(GameFontNormalSmall)\nshowbuttonOne:SetHighlightFontObject(GameFontNormalSmall)\nshowbuttonOne:SetScript(\"OnClick\", function()\n\tDBM:ShowTestSpecialWarning(nil, 1, nil, true)\nend)\n\nlocal color1 = specWarnOne:CreateColorSelect(64)\ncolor1:SetPoint(\"TOPLEFT\", specWarnOne.frame, \"TOPLEFT\", 20, -30)\nlocal color1text = specWarnOne:CreateText(L.SpecWarn_FlashColor:format(1), 85)\ncolor1text:SetPoint(\"BOTTOM\", color1, \"TOP\", 5, 4)\nlocal color1reset = specWarnOne:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\ncolor1reset:SetPoint(\"TOP\", color1, \"BOTTOM\", 5, -10)\ncolor1reset:SetScript(\"OnClick\", function()\n\tDBM.Options.SpecialWarningFlashCol1[1] = DBM.DefaultOptions.SpecialWarningFlashCol1[1]\n\tDBM.Options.SpecialWarningFlashCol1[2] = DBM.DefaultOptions.SpecialWarningFlashCol1[2]\n\tDBM.Options.SpecialWarningFlashCol1[3] = DBM.DefaultOptions.SpecialWarningFlashCol1[3]\n\tcolor1:SetColorRGB(DBM.Options.SpecialWarningFlashCol1[1], DBM.Options.SpecialWarningFlashCol1[2], DBM.Options.SpecialWarningFlashCol1[3])\n\tDBM:UpdateSpecialWarningOptions()\nend)\ncolor1:SetColorRGB(DBM.Options.SpecialWarningFlashCol1[1], DBM.Options.SpecialWarningFlashCol1[2], DBM.Options.SpecialWarningFlashCol1[3])\ncolor1:SetScript(\"OnColorSelect\", function(self)\n\tDBM.Options.SpecialWarningFlashCol1[1] = select(1, self:GetColorRGB())\n\tDBM.Options.SpecialWarningFlashCol1[2] = select(2, self:GetColorRGB())\n\tDBM.Options.SpecialWarningFlashCol1[3] = select(3, self:GetColorRGB())\n\tcolor1text:SetTextColor(self:GetColorRGB())\n\tDBM:UpdateSpecialWarningOptions()\nend)\ncolor1.myheight = 104\n\nlocal SpecialWarnSoundDropDown = specWarnOne:CreateDropdown(L.SpecialWarnSoundOption, sounds, \"DBM\", \"SpecialWarningSound\", function(value)\n\tDBM.Options.SpecialWarningSound = value\nend)\nSpecialWarnSoundDropDown:SetPoint(\"TOPLEFT\", specWarnOne.frame, \"TOPLEFT\", 95, -28)\nSpecialWarnSoundDropDown.myheight = 0\n\nlocal flashCheck1 = specWarnOne:CreateCheckButton(L.SpecWarn_Flash, nil, nil, \"SpecialWarningFlash1\")\nflashCheck1:SetPoint(\"BOTTOMLEFT\", SpecialWarnSoundDropDown, \"BOTTOMLEFT\", 220, 20)\n-- local vibrateCheck1 = specWarnOne:CreateCheckButton(L.SpecWarn_Vibrate, nil, nil, \"SpecialWarningVibrate1\")\n-- vibrateCheck1:SetPoint(\"TOPLEFT\", flashCheck1, \"TOPLEFT\", 0, -20)\n\nlocal flashdurSlider = specWarnOne:CreateSlider(L.SpecWarn_FlashDur, 0.2, 2, 0.2, 120)\nflashdurSlider:SetPoint(\"TOPLEFT\", SpecialWarnSoundDropDown, \"TOPLEFT\", 20, -45)\nflashdurSlider:SetValue(DBM.Options.SpecialWarningFlashDura1)\nflashdurSlider:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.SpecialWarningFlashDura1 = self:GetValue()\nend)\nflashdurSlider.myheight = 0\n\nlocal flashdalphaSlider = specWarnOne:CreateSlider(L.SpecWarn_FlashAlpha, 0.1, 1, 0.1, 120)\nflashdalphaSlider:SetPoint(\"BOTTOMLEFT\", flashdurSlider, \"BOTTOMLEFT\", 180, 0)\nflashdalphaSlider:SetValue(DBM.Options.SpecialWarningFlashAlph1)\nflashdalphaSlider:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.SpecialWarningFlashAlph1 = self:GetValue()\nend)\nflashdalphaSlider.myheight = 0\n\nlocal flashRepSlider = specWarnOne:CreateSlider(L.SpecWarn_FlashFrameRepeat, 1, 4, 1, 120)\nflashRepSlider:SetPoint(\"TOPLEFT\", flashdurSlider, \"TOPLEFT\", 95, -45)\nflashRepSlider:SetValue(math.floor(DBM.Options.SpecialWarningFlashCount1))\nflashRepSlider:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.SpecialWarningFlashCount1 = math.floor(self:GetValue())\nend)\nflashRepSlider.myheight = 0\n\n--Special Warning Area 2\nlocal specWarnTwo = specPanel:CreateArea(L.SpecialWarnHeader2)\n\nlocal showbuttonTwo = specWarnTwo:CreateButton(L.SpecWarn_DemoButton, 120, 16)\nshowbuttonTwo:SetPoint(\"BOTTOMRIGHT\", specWarnTwo.frame, \"BOTTOMRIGHT\", -2, 4)\nshowbuttonTwo:SetNormalFontObject(GameFontNormalSmall)\nshowbuttonTwo:SetHighlightFontObject(GameFontNormalSmall)\nshowbuttonTwo:SetScript(\"OnClick\", function()\n\tDBM:ShowTestSpecialWarning(nil, 2, nil, true)\nend)\n\nlocal color2 = specWarnTwo:CreateColorSelect(64)\ncolor2:SetPoint(\"TOPLEFT\", specWarnTwo.frame, \"TOPLEFT\", 20, -30)\nlocal color2text = specWarnTwo:CreateText(L.SpecWarn_FlashColor:format(2), 85)\ncolor2text:SetPoint(\"BOTTOM\", color2, \"TOP\", 5, 4)\nlocal color2reset = specWarnTwo:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\ncolor2reset:SetPoint(\"TOP\", color2, \"BOTTOM\", 5, -10)\ncolor2reset:SetScript(\"OnClick\", function()\n\tDBM.Options.SpecialWarningFlashCol2[1] = DBM.DefaultOptions.SpecialWarningFlashCol2[1]\n\tDBM.Options.SpecialWarningFlashCol2[2] = DBM.DefaultOptions.SpecialWarningFlashCol2[2]\n\tDBM.Options.SpecialWarningFlashCol2[3] = DBM.DefaultOptions.SpecialWarningFlashCol2[3]\n\tcolor2:SetColorRGB(DBM.Options.SpecialWarningFlashCol2[1], DBM.Options.SpecialWarningFlashCol2[2], DBM.Options.SpecialWarningFlashCol2[3])\nend)\ncolor2:SetColorRGB(DBM.Options.SpecialWarningFlashCol2[1], DBM.Options.SpecialWarningFlashCol2[2], DBM.Options.SpecialWarningFlashCol2[3])\ncolor2:SetScript(\"OnColorSelect\", function(self)\n\tDBM.Options.SpecialWarningFlashCol2[1] = select(1, self:GetColorRGB())\n\tDBM.Options.SpecialWarningFlashCol2[2] = select(2, self:GetColorRGB())\n\tDBM.Options.SpecialWarningFlashCol2[3] = select(3, self:GetColorRGB())\n\tcolor2text:SetTextColor(self:GetColorRGB())\n\tDBM:UpdateSpecialWarningOptions()\nend)\ncolor2.myheight = 104\n\nlocal SpecialWarnSoundDropDown2 = specWarnTwo:CreateDropdown(L.SpecialWarnSoundOption, sounds, \"DBM\", \"SpecialWarningSound2\", function(value)\n\tDBM.Options.SpecialWarningSound2 = value\nend)\nSpecialWarnSoundDropDown2:SetPoint(\"TOPLEFT\", specWarnTwo.frame, \"TOPLEFT\", 95, -28)\nSpecialWarnSoundDropDown2.myheight = 0\n\nlocal flashCheck2 = specWarnTwo:CreateCheckButton(L.SpecWarn_Flash, nil, nil, \"SpecialWarningFlash2\")\nflashCheck2:SetPoint(\"BOTTOMLEFT\", SpecialWarnSoundDropDown2, \"BOTTOMLEFT\", 220, 20)\n-- local vibrateCheck2 = specWarnTwo:CreateCheckButton(L.SpecWarn_Vibrate, nil, nil, \"SpecialWarningVibrate2\")\n-- vibrateCheck2:SetPoint(\"TOPLEFT\", flashCheck2, \"TOPLEFT\", 0, -20)\n\nlocal flashdurSlider2 = specWarnTwo:CreateSlider(L.SpecWarn_FlashDur, 0.2, 2, 0.2, 120)\nflashdurSlider2:SetPoint(\"TOPLEFT\", SpecialWarnSoundDropDown2, \"TOPLEFT\", 20, -45)\nflashdurSlider2:SetValue(DBM.Options.SpecialWarningFlashDura2)\nflashdurSlider2:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.SpecialWarningFlashDura2 = self:GetValue()\nend)\nflashdurSlider2.myheight = 0\n\nlocal flashdalphaSlider2 = specWarnTwo:CreateSlider(L.SpecWarn_FlashAlpha, 0.1, 1, 0.1, 120)\nflashdalphaSlider2:SetPoint(\"BOTTOMLEFT\", flashdurSlider2, \"BOTTOMLEFT\", 180, 0)\nflashdalphaSlider2:SetValue(DBM.Options.SpecialWarningFlashAlph2)\nflashdalphaSlider2:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.SpecialWarningFlashAlph2 = self:GetValue()\nend)\nflashdalphaSlider2.myheight = 0\n\nlocal flashRepSlider2 = specWarnOne:CreateSlider(L.SpecWarn_FlashFrameRepeat, 1, 4, 1, 120)\nflashRepSlider2:SetPoint(\"TOPLEFT\", flashdurSlider2, \"TOPLEFT\", 95, -45)\nflashRepSlider2:SetValue(math.floor(DBM.Options.SpecialWarningFlashCount2))\nflashRepSlider2:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.SpecialWarningFlashCount2 = math.floor(self:GetValue())\n\tDBM:UpdateSpecialWarningOptions()\nend)\nflashRepSlider2.myheight = 0\n\n--Special Warning Area 3\nlocal specWarnThree = specPanel:CreateArea(L.SpecialWarnHeader3)\n\nlocal showbuttonThree = specWarnThree:CreateButton(L.SpecWarn_DemoButton, 120, 16)\nshowbuttonThree:SetPoint(\"BOTTOMRIGHT\", specWarnThree.frame, \"BOTTOMRIGHT\", -2, 4)\nshowbuttonThree:SetNormalFontObject(GameFontNormalSmall)\nshowbuttonThree:SetHighlightFontObject(GameFontNormalSmall)\nshowbuttonThree:SetScript(\"OnClick\", function()\n\tDBM:ShowTestSpecialWarning(nil, 3, nil, true)\nend)\n\nlocal color3 = specWarnThree:CreateColorSelect(64)\ncolor3:SetPoint(\"TOPLEFT\", specWarnThree.frame, \"TOPLEFT\", 20, -30)\nlocal color3text = specWarnThree:CreateText(L.SpecWarn_FlashColor:format(3), 85)\ncolor3text:SetPoint(\"BOTTOM\", color3, \"TOP\", 5, 4)\nlocal color3reset = specWarnThree:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\ncolor3reset:SetPoint(\"TOP\", color3, \"BOTTOM\", 5, -10)\ncolor3reset:SetScript(\"OnClick\", function()\n\tDBM.Options.SpecialWarningFlashCol3[1] = DBM.DefaultOptions.SpecialWarningFlashCol3[1]\n\tDBM.Options.SpecialWarningFlashCol3[2] = DBM.DefaultOptions.SpecialWarningFlashCol3[2]\n\tDBM.Options.SpecialWarningFlashCol3[3] = DBM.DefaultOptions.SpecialWarningFlashCol3[3]\n\tcolor3:SetColorRGB(DBM.Options.SpecialWarningFlashCol3[1], DBM.Options.SpecialWarningFlashCol3[2], DBM.Options.SpecialWarningFlashCol3[3])\n\tDBM:UpdateSpecialWarningOptions()\n\tDBM:ShowTestSpecialWarning(nil, 3, nil, true)\nend)\ncolor3:SetColorRGB(DBM.Options.SpecialWarningFlashCol3[1], DBM.Options.SpecialWarningFlashCol3[2], DBM.Options.SpecialWarningFlashCol3[3])\ncolor3:SetScript(\"OnColorSelect\", function(self)\n\tDBM.Options.SpecialWarningFlashCol3[1] = select(1, self:GetColorRGB())\n\tDBM.Options.SpecialWarningFlashCol3[2] = select(2, self:GetColorRGB())\n\tDBM.Options.SpecialWarningFlashCol3[3] = select(3, self:GetColorRGB())\n\tcolor3text:SetTextColor(self:GetColorRGB())\n\tDBM:UpdateSpecialWarningOptions()\n\tDBM:ShowTestSpecialWarning(nil, 3, nil, true)\nend)\ncolor3.myheight = 104\n\nlocal SpecialWarnSoundDropDown3 = specWarnThree:CreateDropdown(L.SpecialWarnSoundOption, sounds, \"DBM\", \"SpecialWarningSound3\", function(value)\n\tDBM.Options.SpecialWarningSound3 = value\nend)\nSpecialWarnSoundDropDown3:SetPoint(\"TOPLEFT\", specWarnThree.frame, \"TOPLEFT\", 95, -28)\nSpecialWarnSoundDropDown3.myheight = 0\n\nlocal flashCheck3 = specWarnThree:CreateCheckButton(L.SpecWarn_Flash, nil, nil, \"SpecialWarningFlash3\")\nflashCheck3:SetPoint(\"BOTTOMLEFT\", SpecialWarnSoundDropDown3, \"BOTTOMLEFT\", 220, 20)\n-- local vibrateCheck3 = specWarnThree:CreateCheckButton(L.SpecWarn_Vibrate, nil, nil, \"SpecialWarningVibrate3\")\n-- vibrateCheck3:SetPoint(\"TOPLEFT\", flashCheck3, \"TOPLEFT\", 0, -20)\n\nlocal flashdurSlider3 = specWarnThree:CreateSlider(L.SpecWarn_FlashDur, 0.2, 2, 0.2, 120)\nflashdurSlider3:SetPoint(\"TOPLEFT\", SpecialWarnSoundDropDown3, \"TOPLEFT\", 20, -45)\nflashdurSlider3:SetValue(DBM.Options.SpecialWarningFlashDura3)\nflashdurSlider3:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.SpecialWarningFlashDura3 = self:GetValue()\nend)\nflashdurSlider3.myheight = 0\n\nlocal flashdalphaSlider3 = specWarnThree:CreateSlider(L.SpecWarn_FlashAlpha, 0.1, 1, 0.1, 120)\nflashdalphaSlider3:SetPoint(\"BOTTOMLEFT\", flashdurSlider3, \"BOTTOMLEFT\", 180, 0)\nflashdalphaSlider3:SetValue(DBM.Options.SpecialWarningFlashAlph3)\nflashdalphaSlider3:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.SpecialWarningFlashAlph3 = self:GetValue()\nend)\nflashdalphaSlider3.myheight = 0\n\nlocal flashRepSlider3 = specWarnOne:CreateSlider(L.SpecWarn_FlashFrameRepeat, 1, 4, 1, 120)\nflashRepSlider3:SetPoint(\"TOPLEFT\", flashdurSlider3, \"TOPLEFT\", 95, -45)\nflashRepSlider3:SetValue(math.floor(DBM.Options.SpecialWarningFlashCount3))\nflashRepSlider3:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.SpecialWarningFlashCount3 = math.floor(self:GetValue())\n\tDBM:UpdateSpecialWarningOptions()\nend)\nflashRepSlider3.myheight = 0\n\nlocal specWarnFour = specPanel:CreateArea(L.SpecialWarnHeader4)\n\nlocal showbuttonFour = specWarnFour:CreateButton(L.SpecWarn_DemoButton, 120, 16)\nshowbuttonFour:SetPoint(\"BOTTOMRIGHT\", specWarnFour.frame, \"BOTTOMRIGHT\", -2, 4)\nshowbuttonFour:SetNormalFontObject(GameFontNormalSmall)\nshowbuttonFour:SetHighlightFontObject(GameFontNormalSmall)\nshowbuttonFour:SetScript(\"OnClick\", function()\n\tDBM:ShowTestSpecialWarning(nil, 4, nil, true)\nend)\n\nlocal color4 = specWarnFour:CreateColorSelect(64)\ncolor4:SetPoint(\"TOPLEFT\", specWarnFour.frame, \"TOPLEFT\", 20, -30)\nlocal color4text = specWarnFour:CreateText(L.SpecWarn_FlashColor:format(4), 85)\ncolor4text:SetPoint(\"BOTTOM\", color4, \"TOP\", 5, 4)\nlocal color4reset = specWarnFour:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\ncolor4reset:SetPoint(\"TOP\", color4, \"BOTTOM\", 5, -10)\ncolor4reset:SetScript(\"OnClick\", function()\n\tDBM.Options.SpecialWarningFlashCol4[1] = DBM.DefaultOptions.SpecialWarningFlashCol4[1]\n\tDBM.Options.SpecialWarningFlashCol4[2] = DBM.DefaultOptions.SpecialWarningFlashCol4[2]\n\tDBM.Options.SpecialWarningFlashCol4[3] = DBM.DefaultOptions.SpecialWarningFlashCol4[3]\n\tcolor4:SetColorRGB(DBM.Options.SpecialWarningFlashCol4[1], DBM.Options.SpecialWarningFlashCol4[2], DBM.Options.SpecialWarningFlashCol4[3])\n\tDBM:UpdateSpecialWarningOptions()\n\tDBM:ShowTestSpecialWarning(nil, 4, nil, true)\nend)\ncolor4:SetColorRGB(DBM.Options.SpecialWarningFlashCol4[1], DBM.Options.SpecialWarningFlashCol4[2], DBM.Options.SpecialWarningFlashCol4[3])\ncolor4:SetScript(\"OnColorSelect\", function(self)\n\tDBM.Options.SpecialWarningFlashCol4[1] = select(1, self:GetColorRGB())\n\tDBM.Options.SpecialWarningFlashCol4[2] = select(2, self:GetColorRGB())\n\tDBM.Options.SpecialWarningFlashCol4[3] = select(3, self:GetColorRGB())\n\tcolor4text:SetTextColor(self:GetColorRGB())\n\tDBM:UpdateSpecialWarningOptions()\n\tDBM:ShowTestSpecialWarning(nil, 4, nil, true)\nend)\ncolor4.myheight = 104\n\nlocal SpecialWarnSoundDropDown4 = specWarnFour:CreateDropdown(L.SpecialWarnSoundOption, sounds, \"DBM\", \"SpecialWarningSound4\", function(value)\n\tDBM.Options.SpecialWarningSound4 = value\nend)\nSpecialWarnSoundDropDown4:SetPoint(\"TOPLEFT\", specWarnFour.frame, \"TOPLEFT\", 95, -28)\nSpecialWarnSoundDropDown4.myheight = 0\n\nlocal flashCheck4 = specWarnFour:CreateCheckButton(L.SpecWarn_Flash, nil, nil, \"SpecialWarningFlash4\")\nflashCheck4:SetPoint(\"BOTTOMLEFT\", SpecialWarnSoundDropDown4, \"BOTTOMLEFT\", 220, 20)\n-- local vibrateCheck4 = specWarnFour:CreateCheckButton(L.SpecWarn_Vibrate, nil, nil, \"SpecialWarningVibrate4\")\n-- vibrateCheck4:SetPoint(\"TOPLEFT\", flashCheck4, \"TOPLEFT\", 0, -20)\n\nlocal flashdurSlider4 = specWarnFour:CreateSlider(L.SpecWarn_FlashDur, 0.2, 2, 0.2, 120)\nflashdurSlider4:SetPoint(\"TOPLEFT\", SpecialWarnSoundDropDown4, \"TOPLEFT\", 20, -45)\nflashdurSlider4:SetValue(DBM.Options.SpecialWarningFlashDura4)\nflashdurSlider4:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.SpecialWarningFlashDura4 = self:GetValue()\nend)\nflashdurSlider4.myheight = 0\n\nlocal flashdalphaSlider4 = specWarnFour:CreateSlider(L.SpecWarn_FlashAlpha, 0.1, 1, 0.1, 120)\nflashdalphaSlider4:SetPoint(\"BOTTOMLEFT\", flashdurSlider4, \"BOTTOMLEFT\", 180, 0)\nflashdalphaSlider4:SetValue(DBM.Options.SpecialWarningFlashAlph4)\nflashdalphaSlider4:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.SpecialWarningFlashAlph4 = self:GetValue()\nend)\nflashdalphaSlider4.myheight = 0\n\nlocal flashRepSlider4 = specWarnOne:CreateSlider(L.SpecWarn_FlashFrameRepeat, 1, 4, 1, 120)\nflashRepSlider4:SetPoint(\"TOPLEFT\", flashdurSlider4, \"TOPLEFT\", 95, -45)\nflashRepSlider4:SetValue(math.floor(DBM.Options.SpecialWarningFlashCount4))\nflashRepSlider4:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.SpecialWarningFlashCount4 = math.floor(self:GetValue())\n\tDBM:UpdateSpecialWarningOptions()\nend)\nflashRepSlider4.myheight = 0\n\nlocal specWarnFive = specPanel:CreateArea(L.SpecialWarnHeader5)\n\nlocal showbuttonFive = specWarnFive:CreateButton(L.SpecWarn_DemoButton, 120, 16)\nshowbuttonFive:SetPoint(\"BOTTOMRIGHT\", specWarnFive.frame, \"BOTTOMRIGHT\", -2, 4)\nshowbuttonFive:SetNormalFontObject(GameFontNormalSmall)\nshowbuttonFive:SetHighlightFontObject(GameFontNormalSmall)\nshowbuttonFive:SetScript(\"OnClick\", function()\n\tDBM:ShowTestSpecialWarning(nil, 5, nil, true)\nend)\n\nlocal color5 = specWarnFive:CreateColorSelect(64)\ncolor5:SetPoint(\"TOPLEFT\", specWarnFive.frame, \"TOPLEFT\", 20, -30)\nlocal color5text = specWarnFive:CreateText(L.SpecWarn_FlashColor:format(5), 85)\ncolor5text:SetPoint(\"BOTTOM\", color5, \"TOP\", 5, 4)\nlocal color5reset = specWarnFive:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\ncolor5reset:SetPoint(\"TOP\", color5, \"BOTTOM\", 5, -10)\ncolor5reset:SetScript(\"OnClick\", function()\n\tDBM.Options.SpecialWarningFlashCol5[1] = DBM.DefaultOptions.SpecialWarningFlashCol5[1]\n\tDBM.Options.SpecialWarningFlashCol5[2] = DBM.DefaultOptions.SpecialWarningFlashCol5[2]\n\tDBM.Options.SpecialWarningFlashCol5[3] = DBM.DefaultOptions.SpecialWarningFlashCol5[3]\n\tcolor5:SetColorRGB(DBM.Options.SpecialWarningFlashCol5[1], DBM.Options.SpecialWarningFlashCol5[2], DBM.Options.SpecialWarningFlashCol5[3])\n\tDBM:UpdateSpecialWarningOptions()\nend)\ncolor5:SetColorRGB(DBM.Options.SpecialWarningFlashCol5[1], DBM.Options.SpecialWarningFlashCol5[2], DBM.Options.SpecialWarningFlashCol5[3])\ncolor5:SetScript(\"OnColorSelect\", function(self)\n\tDBM.Options.SpecialWarningFlashCol5[1] = select(1, self:GetColorRGB())\n\tDBM.Options.SpecialWarningFlashCol5[2] = select(2, self:GetColorRGB())\n\tDBM.Options.SpecialWarningFlashCol5[3] = select(3, self:GetColorRGB())\n\tcolor5text:SetTextColor(self:GetColorRGB())\n\tDBM:UpdateSpecialWarningOptions()\nend)\ncolor5.myheight = 104\n\nlocal SpecialWarnSoundDropDown5 = specWarnFive:CreateDropdown(L.SpecialWarnSoundOption, sounds, \"DBM\", \"SpecialWarningSound5\", function(value)\n\tDBM.Options.SpecialWarningSound5 = value\nend)\nSpecialWarnSoundDropDown5:SetPoint(\"TOPLEFT\", specWarnFive.frame, \"TOPLEFT\", 95, -28)\nSpecialWarnSoundDropDown5.myheight = 0\n\nlocal flashCheck5 = specWarnFive:CreateCheckButton(L.SpecWarn_Flash, nil, nil, \"SpecialWarningFlash5\")\nflashCheck5:SetPoint(\"BOTTOMLEFT\", SpecialWarnSoundDropDown5, \"BOTTOMLEFT\", 220, 20)\n-- local vibrateCheck5 = specWarnFive:CreateCheckButton(L.SpecWarn_Vibrate, nil, nil, \"SpecialWarningVibrate5\")\n-- vibrateCheck5:SetPoint(\"TOPLEFT\", flashCheck5, \"TOPLEFT\", 0, -20)\n\nlocal flashdurSlider5 = specWarnFive:CreateSlider(L.SpecWarn_FlashDur, 0.2, 2, 0.2, 120)\nflashdurSlider5:SetPoint(\"TOPLEFT\", SpecialWarnSoundDropDown5, \"TOPLEFT\", 20, -45)\nflashdurSlider5:SetValue(DBM.Options.SpecialWarningFlashDura5)\nflashdurSlider5:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.SpecialWarningFlashDura5 = self:GetValue()\nend)\nflashdurSlider5.myheight = 0\n\nlocal flashdalphaSlider5 = specWarnFive:CreateSlider(L.SpecWarn_FlashAlpha, 0.1, 1, 0.1, 120)\nflashdalphaSlider5:SetPoint(\"BOTTOMLEFT\", flashdurSlider5, \"BOTTOMLEFT\", 180, 0)\nflashdalphaSlider5:SetValue(DBM.Options.SpecialWarningFlashAlph5)\nflashdalphaSlider5:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.SpecialWarningFlashAlph5 = self:GetValue()\nend)\nflashdalphaSlider5.myheight = 0\n\nlocal flashRepSlider5 = specWarnOne:CreateSlider(L.SpecWarn_FlashFrameRepeat, 1, 4, 1, 120)\nflashRepSlider5:SetPoint(\"TOPLEFT\", flashdurSlider5, \"TOPLEFT\", 95, -45)\nflashRepSlider5:SetValue(math.floor(DBM.Options.SpecialWarningFlashCount5))\nflashRepSlider5:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.SpecialWarningFlashCount5 = math.floor(self:GetValue())\n\tDBM:UpdateSpecialWarningOptions()\nend)\nflashRepSlider5.myheight = 0\n\nlocal resetbutton = specArea:CreateButton(L.SpecWarn_ResetMe, 120, 16)\nresetbutton:SetPoint(\"BOTTOMRIGHT\", specArea.frame, \"BOTTOMRIGHT\", -2, 4)\nresetbutton:SetNormalFontObject(GameFontNormalSmall)\nresetbutton:SetHighlightFontObject(GameFontNormalSmall)\nresetbutton:SetScript(\"OnClick\", function()\n\t-- Set Options\n\tDBM.Options.SWarnNameInNote = DBM.DefaultOptions.SWarnNameInNote\n\tDBM.Options.SpecialWarningFont = DBM.DefaultOptions.SpecialWarningFont\n\tDBM.Options.SpecialWarningSound = DBM.DefaultOptions.SpecialWarningSound\n\tDBM.Options.SpecialWarningSound2 = DBM.DefaultOptions.SpecialWarningSound2\n\tDBM.Options.SpecialWarningSound3 = DBM.DefaultOptions.SpecialWarningSound3\n\tDBM.Options.SpecialWarningSound4 = DBM.DefaultOptions.SpecialWarningSound4\n\tDBM.Options.SpecialWarningSound5 = DBM.DefaultOptions.SpecialWarningSound5\n\tDBM.Options.SpecialWarningFlash1 = DBM.DefaultOptions.SpecialWarningFlash1\n\tDBM.Options.SpecialWarningFlash2 = DBM.DefaultOptions.SpecialWarningFlash2\n\tDBM.Options.SpecialWarningFlash3 = DBM.DefaultOptions.SpecialWarningFlash3\n\tDBM.Options.SpecialWarningFlash4 = DBM.DefaultOptions.SpecialWarningFlash4\n\tDBM.Options.SpecialWarningFlash5 = DBM.DefaultOptions.SpecialWarningFlash5\n\tDBM.Options.SpecialWarningFlashCount1 = DBM.DefaultOptions.SpecialWarningFlashCount1\n\tDBM.Options.SpecialWarningFlashCount2 = DBM.DefaultOptions.SpecialWarningFlashCount2\n\tDBM.Options.SpecialWarningFlashCount3 = DBM.DefaultOptions.SpecialWarningFlashCount3\n\tDBM.Options.SpecialWarningFlashCount4 = DBM.DefaultOptions.SpecialWarningFlashCount4\n\tDBM.Options.SpecialWarningFlashCount5 = DBM.DefaultOptions.SpecialWarningFlashCount5\n\tDBM.Options.SpecialWarningFontSize2 = DBM.DefaultOptions.SpecialWarningFontSize2\n\tDBM.Options.SpecialWarningFlashCol1[1] = DBM.DefaultOptions.SpecialWarningFlashCol1[1]\n\tDBM.Options.SpecialWarningFlashCol1[2] = DBM.DefaultOptions.SpecialWarningFlashCol1[2]\n\tDBM.Options.SpecialWarningFlashCol1[3] = DBM.DefaultOptions.SpecialWarningFlashCol1[3]\n\tDBM.Options.SpecialWarningFlashCol2[1] = DBM.DefaultOptions.SpecialWarningFlashCol2[1]\n\tDBM.Options.SpecialWarningFlashCol2[2] = DBM.DefaultOptions.SpecialWarningFlashCol2[2]\n\tDBM.Options.SpecialWarningFlashCol2[3] = DBM.DefaultOptions.SpecialWarningFlashCol2[3]\n\tDBM.Options.SpecialWarningFlashCol3[1] = DBM.DefaultOptions.SpecialWarningFlashCol3[1]\n\tDBM.Options.SpecialWarningFlashCol3[2] = DBM.DefaultOptions.SpecialWarningFlashCol3[2]\n\tDBM.Options.SpecialWarningFlashCol3[3] = DBM.DefaultOptions.SpecialWarningFlashCol3[3]\n\tDBM.Options.SpecialWarningFlashCol4[1] = DBM.DefaultOptions.SpecialWarningFlashCol4[1]\n\tDBM.Options.SpecialWarningFlashCol4[2] = DBM.DefaultOptions.SpecialWarningFlashCol4[2]\n\tDBM.Options.SpecialWarningFlashCol4[3] = DBM.DefaultOptions.SpecialWarningFlashCol4[3]\n\tDBM.Options.SpecialWarningFlashCol5[1] = DBM.DefaultOptions.SpecialWarningFlashCol5[1]\n\tDBM.Options.SpecialWarningFlashCol5[2] = DBM.DefaultOptions.SpecialWarningFlashCol5[2]\n\tDBM.Options.SpecialWarningFlashCol5[3] = DBM.DefaultOptions.SpecialWarningFlashCol5[3]\n\tDBM.Options.SpecialWarningFlashDura1 = DBM.DefaultOptions.SpecialWarningFlashDura1\n\tDBM.Options.SpecialWarningFlashDura2 = DBM.DefaultOptions.SpecialWarningFlashDura2\n\tDBM.Options.SpecialWarningFlashDura3 = DBM.DefaultOptions.SpecialWarningFlashDura3\n\tDBM.Options.SpecialWarningFlashDura4 = DBM.DefaultOptions.SpecialWarningFlashDura4\n\tDBM.Options.SpecialWarningFlashDura5 = DBM.DefaultOptions.SpecialWarningFlashDura5\n\tDBM.Options.SpecialWarningFlashAlph1 = DBM.DefaultOptions.SpecialWarningFlashAlph1\n\tDBM.Options.SpecialWarningFlashAlph2 = DBM.DefaultOptions.SpecialWarningFlashAlph2\n\tDBM.Options.SpecialWarningFlashAlph3 = DBM.DefaultOptions.SpecialWarningFlashAlph3\n\tDBM.Options.SpecialWarningFlashAlph4 = DBM.DefaultOptions.SpecialWarningFlashAlph4\n\tDBM.Options.SpecialWarningFlashAlph5 = DBM.DefaultOptions.SpecialWarningFlashAlph5\n\tDBM.Options.SpecialWarningPoint = DBM.DefaultOptions.SpecialWarningPoint\n\tDBM.Options.SpecialWarningX = DBM.DefaultOptions.SpecialWarningX\n\tDBM.Options.SpecialWarningY = DBM.DefaultOptions.SpecialWarningY\n\t-- Set UI visuals\n\tcheck1:SetChecked(DBM.Options.ShowSWarningsInChat)\n\tcheck2:SetChecked(DBM.Options.SWarnClassColor)\n\tcheck3:SetChecked(DBM.Options.SWarningAlphabetical)\n\tcheck4:SetChecked(DBM.Options.SWarnNameInNote)\n\tcheck5:SetChecked(DBM.Options.SpecialWarningIcon)\n\tcheck6:SetChecked(DBM.Options.SpecialWarningShortText)\n\tFontDropDown:SetSelectedValue(DBM.Options.SpecialWarningFont)\n\tSpecialWarnSoundDropDown:SetSelectedValue(DBM.Options.SpecialWarningSound)\n\tSpecialWarnSoundDropDown2:SetSelectedValue(DBM.Options.SpecialWarningSound2)\n\tSpecialWarnSoundDropDown3:SetSelectedValue(DBM.Options.SpecialWarningSound3)\n\tSpecialWarnSoundDropDown4:SetSelectedValue(DBM.Options.SpecialWarningSound4)\n\tSpecialWarnSoundDropDown5:SetSelectedValue(DBM.Options.SpecialWarningSound5)\n\tfontSizeSlider:SetValue(DBM.DefaultOptions.SpecialWarningFontSize2)\n\tcolor0:SetColorRGB(DBM.Options.SpecialWarningFontCol[1], DBM.Options.SpecialWarningFontCol[2], DBM.Options.SpecialWarningFontCol[3])\n\tcolor1:SetColorRGB(DBM.Options.SpecialWarningFlashCol1[1], DBM.Options.SpecialWarningFlashCol1[2], DBM.Options.SpecialWarningFlashCol1[3])\n\tcolor2:SetColorRGB(DBM.Options.SpecialWarningFlashCol2[1], DBM.Options.SpecialWarningFlashCol2[2], DBM.Options.SpecialWarningFlashCol2[3])\n\tcolor3:SetColorRGB(DBM.Options.SpecialWarningFlashCol3[1], DBM.Options.SpecialWarningFlashCol3[2], DBM.Options.SpecialWarningFlashCol3[3])\n\tcolor4:SetColorRGB(DBM.Options.SpecialWarningFlashCol4[1], DBM.Options.SpecialWarningFlashCol4[2], DBM.Options.SpecialWarningFlashCol4[3])\n\tcolor5:SetColorRGB(DBM.Options.SpecialWarningFlashCol5[1], DBM.Options.SpecialWarningFlashCol5[2], DBM.Options.SpecialWarningFlashCol5[3])\n\tflashCheck1:SetChecked(DBM.Options.SpecialWarningFlash1)\n\tflashCheck2:SetChecked(DBM.Options.SpecialWarningFlash2)\n\tflashCheck3:SetChecked(DBM.Options.SpecialWarningFlash3)\n\tflashCheck4:SetChecked(DBM.Options.SpecialWarningFlash4)\n\tflashCheck5:SetChecked(DBM.Options.SpecialWarningFlash5)\n\tflashdurSlider:SetValue(DBM.DefaultOptions.SpecialWarningFlashDura1)\n\tflashdurSlider2:SetValue(DBM.DefaultOptions.SpecialWarningFlashDura2)\n\tflashdurSlider3:SetValue(DBM.DefaultOptions.SpecialWarningFlashDura3)\n\tflashdurSlider4:SetValue(DBM.DefaultOptions.SpecialWarningFlashDura4)\n\tflashdurSlider5:SetValue(DBM.DefaultOptions.SpecialWarningFlashDura5)\n\tflashdalphaSlider:SetValue(DBM.DefaultOptions.SpecialWarningFlashAlph1)\n\tflashdalphaSlider2:SetValue(DBM.DefaultOptions.SpecialWarningFlashAlph2)\n\tflashdalphaSlider3:SetValue(DBM.DefaultOptions.SpecialWarningFlashAlph3)\n\tflashdalphaSlider4:SetValue(DBM.DefaultOptions.SpecialWarningFlashAlph4)\n\tflashdalphaSlider5:SetValue(DBM.DefaultOptions.SpecialWarningFlashAlph5)\n\tflashRepSlider:SetValue(DBM.DefaultOptions.SpecialWarningFlashCount1)\n\tflashRepSlider2:SetValue(DBM.DefaultOptions.SpecialWarningFlashCount2)\n\tflashRepSlider3:SetValue(DBM.DefaultOptions.SpecialWarningFlashCount3)\n\tflashRepSlider4:SetValue(DBM.DefaultOptions.SpecialWarningFlashCount4)\n\tflashRepSlider5:SetValue(DBM.DefaultOptions.SpecialWarningFlashCount5)\n\tDBM:UpdateSpecialWarningOptions()\nend)\n"
  },
  {
    "path": "DBM-GUI/modules/options/alerts/SpokenAlerts.lua",
    "content": "local L = DBM_GUI_L\n\nlocal spokenAlertsPanel = DBM_GUI.Cat_Alerts:CreateNewPanel(L.Panel_SpokenAlerts, \"option\")\n\nlocal spokenGeneralArea = spokenAlertsPanel:CreateArea(L.Area_VoiceSelection)\n\nlocal CountSoundDropDown = spokenGeneralArea:CreateDropdown(L.CountdownVoice, DBM:GetCountSounds(), \"DBM\", \"CountdownVoice\", function(value)\n\tDBM.Options.CountdownVoice = value\n\tDBM:PlayCountSound(1, DBM.Options.CountdownVoice)\n\tDBM:BuildVoiceCountdownCache()\nend, 180)\nCountSoundDropDown:SetPoint(\"TOPLEFT\", spokenGeneralArea.frame, \"TOPLEFT\", 0, -20)\nCountSoundDropDown.myheight = 20\n\nlocal CountSoundDropDown2 = spokenGeneralArea:CreateDropdown(L.CountdownVoice2, DBM:GetCountSounds(), \"DBM\", \"CountdownVoice2\", function(value)\n\tDBM.Options.CountdownVoice2 = value\n\tDBM:PlayCountSound(1, DBM.Options.CountdownVoice2)\n\tDBM:BuildVoiceCountdownCache()\nend, 180)\nCountSoundDropDown2:SetPoint(\"LEFT\", CountSoundDropDown, \"RIGHT\", 45, 0)\n\nlocal CountSoundDropDown3 = spokenGeneralArea:CreateDropdown(L.CountdownVoice3, DBM:GetCountSounds(), \"DBM\", \"CountdownVoice3\", function(value)\n\tDBM.Options.CountdownVoice3 = value\n\tDBM:PlayCountSound(1, DBM.Options.CountdownVoice3)\n\tDBM:BuildVoiceCountdownCache()\nend, 180)\nCountSoundDropDown3:SetPoint(\"TOPLEFT\", CountSoundDropDown, \"TOPLEFT\", 0, -45)\nCountSoundDropDown3.myheight = 20\n\nlocal CountSoundDropDown4 = spokenGeneralArea:CreateDropdown(L.PullVoice, DBM:GetCountSounds(), \"DBM\", \"PullVoice\", function(value)\n\tDBM.Options.PullVoice = value\n\tDBM:PlayCountSound(1, DBM.Options.PullVoice)\n\tDBM:BuildVoiceCountdownCache()\nend, 180)\nCountSoundDropDown4:SetPoint(\"TOPLEFT\", CountSoundDropDown2, \"TOPLEFT\", 0, -45)\n\nlocal voices = DBM.Voices\nif DBM.Options.ChosenVoicePack2 ~= \"None\" and not DBM.VoiceVersions[DBM.Options.ChosenVoicePack2] then -- Sound pack is missing, add a custom entry of \"missing\"\n\ttable.insert(voices, { text = L.MissingVoicePack:format(DBM.Options.ChosenVoicePack2), value = DBM.Options.ChosenVoicePack2 })\nend\nlocal VoiceDropDown = spokenGeneralArea:CreateDropdown(L.VoicePackChoice, voices, \"DBM\", \"ChosenVoicePack2\", function(value)\n\tDBM.Options.ChosenVoicePack2 = value\n\tDBM:CheckVoicePackVersion(value)\nend, 180)\nVoiceDropDown:SetPoint(\"TOPLEFT\", CountSoundDropDown3, \"TOPLEFT\", 0, -45)\nVoiceDropDown.myheight = 20 -- TODO: +10 padding per dropdown text\n\nlocal voiceReplaceArea\t\t= spokenAlertsPanel:CreateArea(L.Area_VoicePackReplace)\nlocal VPReplaceAnnounce\t\t= voiceReplaceArea:CreateCheckButton(L.ReplacesAnnounce, true, nil, \"VPReplacesAnnounce\")\nlocal VPReplaceSA1\t\t\t= voiceReplaceArea:CreateCheckButton(L.ReplacesSA1, true, nil, \"VPReplacesSA1\")\nlocal VPReplaceSA2\t\t\t= voiceReplaceArea:CreateCheckButton(L.ReplacesSA2, true, nil, \"VPReplacesSA2\")\nlocal VPReplaceSA3\t\t\t= voiceReplaceArea:CreateCheckButton(L.ReplacesSA3, true, nil, \"VPReplacesSA3\")\nlocal VPReplaceSA4\t\t\t= voiceReplaceArea:CreateCheckButton(L.ReplacesSA4, true, nil, \"VPReplacesSA4\")\nlocal VPReplacesGTFO\t\t= voiceReplaceArea:CreateCheckButton(L.ReplacesGTFO, true, nil, \"VPReplacesGTFO\")\nlocal VPReplaceCustom\t\t= voiceReplaceArea:CreateCheckButton(L.ReplacesCustom, true, nil, \"VPReplacesCustom\")\n\nlocal resetbutton = voiceReplaceArea:CreateButton(L.SpecWarn_ResetMe, 120, 16)\nresetbutton:SetPoint(\"BOTTOMRIGHT\", voiceReplaceArea.frame, \"BOTTOMRIGHT\", -2, 4)\nresetbutton:SetNormalFontObject(GameFontNormalSmall)\nresetbutton:SetHighlightFontObject(GameFontNormalSmall)\nresetbutton:SetScript(\"OnClick\", function()\n\t-- Set Options\n\tDBM.Options.VPReplacesAnnounce = DBM.DefaultOptions.VPReplacesAnnounce\n\tDBM.Options.VPReplacesSA1 = DBM.DefaultOptions.VPReplacesSA1\n\tDBM.Options.VPReplacesSA2 = DBM.DefaultOptions.VPReplacesSA2\n\tDBM.Options.VPReplacesSA3 = DBM.DefaultOptions.VPReplacesSA3\n\tDBM.Options.VPReplacesSA4 = DBM.DefaultOptions.VPReplacesSA4\n\tDBM.Options.VPReplacesGTFO = DBM.DefaultOptions.VPReplacesGTFO\n\tDBM.Options.VPReplacesCustom = DBM.DefaultOptions.VPReplacesCustom\n\t-- Set UI visuals\n\tVPReplaceAnnounce:SetChecked(DBM.Options.VPReplacesAnnounce)\n\tVPReplaceSA1:SetChecked(DBM.Options.VPReplacesSA1)\n\tVPReplaceSA2:SetChecked(DBM.Options.VPReplacesSA2)\n\tVPReplaceSA3:SetChecked(DBM.Options.VPReplacesSA3)\n\tVPReplaceSA4:SetChecked(DBM.Options.VPReplacesSA4)\n\tVPReplacesGTFO:SetChecked(DBM.Options.VPReplacesGTFO)\n\tVPReplaceCustom:SetChecked(DBM.Options.VPReplacesCustom)\nend)\n\n--TODO, add note (L.VPReplaceNote) either above or below the replace checkboxes and within voiceReplaceArea\n\nlocal voiceAdvancedArea\t\t= spokenAlertsPanel:CreateArea(L.Area_VoicePackAdvOptions)\nvoiceAdvancedArea:CreateCheckButton(L.SpecWarn_AlwaysVoice, true, nil, \"AlwaysPlayVoice\")\nvoiceAdvancedArea:CreateCheckButton(L.VPDontMuteSounds, true, nil, \"VPDontMuteSounds\")\n\nlocal VPUrlArea1\t\t= spokenAlertsPanel:CreateArea(L.Area_VPLearnMore)\nVPUrlArea1:CreateText(L.VPLearnMore, nil, true, nil, \"LEFT\", 0)\nVPUrlArea1.frame:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, L.Area_VPLearnMore, \"https://github.com/DeadlyBossMods/DBM-Retail/wiki/%5BGuide%5D-DBM-&-Voicepacks#2022-update\")\nend)\n\nlocal VPUrlArea2\t\t= spokenAlertsPanel:CreateArea(L.Area_BrowseOtherVP)\nVPUrlArea2:CreateText(L.BrowseOtherVPs, nil, true, nil, \"LEFT\", 0)\nVPUrlArea2.frame:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, L.Area_BrowseOtherVP, \"https://www.curseforge.com/wow/addons/search?search=dbm+voice\")\nend)\n\nlocal VPUrlArea3\t\t= spokenAlertsPanel:CreateArea(L.Area_BrowseOtherCT)\nVPUrlArea3:CreateText(L.BrowseOtherCTs, nil, true, nil, \"LEFT\", 0)\nVPUrlArea3.frame:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, L.Area_BrowseOtherCT, \"https://www.curseforge.com/wow/addons/search?search=dbm+count+pack\")\nend)\n"
  },
  {
    "path": "DBM-GUI/modules/options/filters/Filters.lua",
    "content": "local L\t\t= DBM_GUI_L\n\nDBM_GUI.Cat_Filters = DBM_GUI:CreateNewPanel(L.TabCategory_Filters, \"option\")\n\nlocal FiltersArea1\t\t= DBM_GUI.Cat_Filters:CreateArea(L.Area_BasicSetup)\nFiltersArea1:CreateText(\"|cFF73C2FBhttps://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BNew-User-Guide%5D-Initial-Setup-Tips|r\", nil, true, nil, \"LEFT\", 0)\nFiltersArea1.frame:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, L.Area_BasicSetup, \"https://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BNew-User-Guide%5D-Initial-Setup-Tips\")\nend)\n\nlocal FiltersArea2\t\t= DBM_GUI.Cat_Filters:CreateArea(L.Area_DBMFiltersSetup)\nFiltersArea2:CreateText(\"|cFF73C2FBhttps://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BGuide%5D-DBM-Global-Filter-Options|r\", nil, true, nil, \"LEFT\", 0)\nFiltersArea2.frame:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, L.Area_DBMFiltersSetup, \"https://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BGuide%5D-DBM-Global-Filter-Options\")\nend)\n\n--[[\n--Article doesn't exist yet\nlocal FiltersArea3\t\t= DBM_GUI.Cat_Filters:CreateArea(L.Area_BlizzFiltersSetup)\nFiltersArea2:CreateText(\"|cFF73C2FBhttps://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BGuide%5D-DBM-Global-Filter-Options|r\", nil, true, nil, \"LEFT\", 0)\nFiltersArea2.frame:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, L.Area_BlizzFiltersSetup, \"https://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BGuide%5D-DBM-Global-Filter-Options\")\nend)\n--]]\n"
  },
  {
    "path": "DBM-GUI/modules/options/filters/GlobalDisables.lua",
    "content": "local L = DBM_GUI_L\n\nlocal spamPanel = DBM_GUI.Cat_Filters:CreateNewPanel(L.Panel_SpamFilter, \"option\")\n\nlocal spamSpecAnnounceFeat = spamPanel:CreateArea(L.Area_SpamFilter_SpecFeatures)\nspamSpecAnnounceFeat:CreateCheckButton(L.SpamBlockNoShowAnnounce, true, nil, \"DontShowBossAnnounces\")\nspamSpecAnnounceFeat:CreateCheckButton(L.SpamBlockNoSpecWarnText, true, nil, \"DontShowSpecialWarningText\")\nspamSpecAnnounceFeat:CreateCheckButton(L.SpamBlockNoSpecWarnFlash, true, nil, \"DontShowSpecialWarningFlash\")\n-- spamSpecAnnounceFeat:CreateCheckButton(L.SpamBlockNoSpecWarnVibrate, true, nil, \"DontDoSpecialWarningVibrate\")\nspamSpecAnnounceFeat:CreateCheckButton(L.SpamBlockNoSpecWarnSound, true, nil, \"DontPlaySpecialWarningSound\")\n\nlocal spamTimers = spamPanel:CreateArea(L.Area_SpamFilter_Timers)\nspamTimers:CreateCheckButton(L.SpamBlockNoShowBossTimers, true, nil, \"DontShowBossTimers\")\nspamTimers:CreateCheckButton(L.SpamBlockNoShowTrashTimers, true, nil, \"DontShowTrashTimers\")\nspamTimers:CreateCheckButton(L.SpamBlockNoShowEventTimers, true, nil, \"DontShowEventTimers\")\nspamTimers:CreateCheckButton(L.SpamBlockNoShowUTimers, true, nil, \"DontShowUserTimers\")\nspamTimers:CreateCheckButton(L.SpamBlockNoCountdowns, true, nil, \"DontPlayCountdowns\")\n\nlocal spamNameplates = spamPanel:CreateArea(L.Area_SpamFilter_Nameplates)\nspamNameplates:CreateCheckButton(L.SpamBlockNoNameplate, true, nil, \"DontShowNameplateIcons\")\nif _G[\"Plater\"] then\n\tspamNameplates:CreateCheckButton(L.SpamBlockNoBossGUIDs, true, nil, \"DontSendBossGUIDs\")\n\tspamNameplates:CreateCheckButton(L.SpamBlockTimersWithNameplates, true, nil, \"DontShowTimersWithNameplates\")\nelse\n\tlocal infotext = spamNameplates:CreateText(L.NameplateFooter, nil, false, GameFontNormalSmall, \"LEFT\", 25)\n\tinfotext:SetPoint(\"BOTTOMLEFT\", spamNameplates.frame, \"BOTTOMLEFT\", 10, 10)\nend\n\nlocal spamMisc = spamPanel:CreateArea(L.Area_SpamFilter_Misc)\nspamMisc:CreateCheckButton(L.SpamBlockNoSetIcon, true, nil, \"DontSetIcons\")\nspamMisc:CreateCheckButton(L.SpamBlockNoRangeFrame, true, nil, \"DontShowRangeFrame\")\nspamMisc:CreateCheckButton(L.SpamBlockNoInfoFrame, true, nil, \"DontShowInfoFrame\")\nspamMisc:CreateCheckButton(L.SpamBlockNoHudMap, true, nil, \"DontShowHudMap2\")\n\nspamMisc:CreateCheckButton(L.SpamBlockNoYells, true, nil, \"DontSendYells\")\nspamMisc:CreateCheckButton(L.SpamBlockNoNoteSync, true, nil, \"BlockNoteShare\")\n\nlocal spamRestoreArea = spamPanel:CreateArea(L.Area_Restore)\nspamRestoreArea:CreateCheckButton(L.SpamBlockNoIconRestore, true, nil, \"DontRestoreIcons\")\nspamRestoreArea:CreateCheckButton(L.SpamBlockNoRangeRestore, true, nil, \"DontRestoreRange\")\n\nlocal spamPTArea = spamPanel:CreateArea(L.Area_PullTimer)\nspamPTArea:CreateCheckButton(L.DontShowPTNoID, true, nil, \"DontShowPTNoID\")\nspamPTArea:CreateCheckButton(L.DontShowPT, true, nil, \"DontShowPT2\")\nspamPTArea:CreateCheckButton(L.DontShowPTText, true, nil, \"DontShowPTText\")\nspamPTArea:CreateCheckButton(L.DontShowPTCountdownText, true, nil, \"DontShowPTCountdownText\")\nlocal SPTCDA = spamPTArea:CreateCheckButton(L.DontPlayPTCountdown, true, nil, \"DontPlayPTCountdown\")\n\nlocal PTSlider = spamPTArea:CreateSlider(L.PT_Threshold, 1, 10, 1, 300)\nPTSlider:SetPoint(\"BOTTOMLEFT\", SPTCDA, \"BOTTOMLEFT\", 80, -40)\nPTSlider:SetValue(math.floor(DBM.Options.PTCountThreshold2))\nPTSlider:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.PTCountThreshold2 = math.floor(self:GetValue())\nend)\n\nlocal spamTTArea = spamPanel:CreateArea(L.Area_TimerTracker)\nspamTTArea:CreateCheckButton(L.PlayTT, true, nil, \"PlayTT\")\nspamTTArea:CreateCheckButton(L.PlayTTCountdown, true, nil, \"PlayTTCountdown\")\nspamTTArea:CreateCheckButton(L.PlayTTCountdownFinished, true, nil, \"PlayTTCountdownFinished\")\n\nlocal spamBBArea = spamPanel:CreateArea(L.Area_BossBanner)\nspamBBArea:CreateCheckButton(L.EnableBB, true, nil, \"EnableBB\")\nspamBBArea:CreateCheckButton(L.PlayBBLoot, true, nil, \"PlayBBLoot\")\nspamBBArea:CreateCheckButton(L.PlayBBSound, true, nil, \"PlayBBSound\")\nlocal overrideBBFont = spamBBArea:CreateCheckButton(L.OverrideBBFont, true, nil, \"OverrideBBFont\")\noverrideBBFont:HookScript(\"OnClick\", function()\n\tBossBanner:UpdateStyle()\nend)\n\n-- BossBanner Font\nlocal Fonts = DBM_GUI:MixinSharedMedia3(\"font\", {\n\t{\n\t\ttext\t= DEFAULT,\n\t\tvalue\t= \"standardFont\"\n\t},\n\t{\n\t\ttext\t= \"Arial\",\n\t\tvalue\t= \"Fonts\\\\ARIALN.TTF\"\n\t},\n\t{\n\t\ttext\t= \"Skurri\",\n\t\tvalue\t= \"Fonts\\\\SKURRI.TTF\"\n\t},\n\t{\n\t\ttext\t= \"Morpheus\",\n\t\tvalue\t= \"Fonts\\\\MORPHEUS.TTF\"\n\t}\n})\n\nlocal FontDropDown = spamBBArea:CreateDropdown(L.FontType, Fonts, \"DBM\", \"BBFont\", function(value)\n\tDBM.Options.BBFont = value\n\tBossBanner:UpdateStyle()\nend)\nFontDropDown:SetPoint(\"TOPLEFT\", overrideBBFont, \"BOTTOMLEFT\", 0, -10)\n\n-- BossBanner Font Style\nlocal FontStyles = {\n\t{\n\t\ttext\t= L.None,\n\t\tvalue\t= \"None\"\n\t},\n\t{\n\t\ttext\t= L.Outline,\n\t\tvalue\t= \"OUTLINE\",\n\t\tflag\t= true\n\t},\n\t{\n\t\ttext\t= L.ThickOutline,\n\t\tvalue\t= \"THICKOUTLINE\",\n\t\tflag\t= true\n\t},\n\t{\n\t\ttext\t= L.MonochromeOutline,\n\t\tvalue\t= \"MONOCHROME,OUTLINE\",\n\t\tflag\t= true\n\t},\n\t{\n\t\ttext\t= L.MonochromeThickOutline,\n\t\tvalue\t= \"MONOCHROME,THICKOUTLINE\",\n\t\tflag\t= true\n\t}\n}\n\nlocal FontStyleDropDown = spamBBArea:CreateDropdown(L.FontStyle, FontStyles, \"DBM\", \"BBFontStyle\", function(value)\n\tDBM.Options.BBFontStyle = value\n\tBossBanner:UpdateStyle()\nend)\nFontStyleDropDown:SetPoint(\"TOPLEFT\", FontDropDown, \"BOTTOMLEFT\", 0, -10)\n\n-- BossBanner Font Shadow\nlocal FontShadow = spamBBArea:CreateCheckButton(L.FontShadow, nil, nil, \"BBFontShadow\")\nFontShadow:SetScript(\"OnClick\", function()\n\tDBM.Options.BBFontShadow = not DBM.Options.BBFontShadow\n\tBossBanner:UpdateStyle()\nend)\nFontShadow:SetPoint(\"LEFT\", FontStyleDropDown, \"RIGHT\", 35, 0)\n\n-- BossBanner Font Size (add/subtract to default size)\nlocal fontSizeSlider = spamBBArea:CreateSlider(L.FontSize, -10, 10, 1, 200)\nfontSizeSlider:SetPoint(\"TOPLEFT\", FontStyleDropDown, \"TOPLEFT\", 20, -45)\nfontSizeSlider:SetValue(DBM.Options.BBFontSize)\nfontSizeSlider:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.BBFontSize = self:GetValue()\n\tBossBanner:UpdateStyle()\nend)\n\n-- BossBanner Test Buttons\nlocal testButton = spamBBArea:CreateButton(ANIMATION, 120, 16)\ntestButton:SetPoint(\"TOPRIGHT\", spamBBArea.frame, \"TOPRIGHT\", -2, -4)\ntestButton:SetNormalFontObject(GameFontNormalSmall)\ntestButton:SetHighlightFontObject(GameFontNormalSmall)\ntestButton:SetScript(\"OnClick\", function()\n\tBossBanner:Test()\nend)\n\nlocal showButton = spamBBArea:CreateButton(SHOW_TOAST_WINDOW_TEXT, 100, 16)\nshowButton:SetPoint(\"BOTTOMRIGHT\", testButton, \"BOTTOMLEFT\", -2, 0)\nshowButton:SetNormalFontObject(GameFontNormalSmall)\nshowButton:SetHighlightFontObject(GameFontNormalSmall)\nshowButton:SetScript(\"OnClick\", function()\n\tBossBanner:Show()\nend)\n\n-- BossBanner Keybinds\nlocal keybindsString = \"|cffffffff\"..string.upper(KEY_BINDINGS)..\"|r\\n\"..KEY_BUTTON2..\": \"..HIDE\nlocal keybindsInfotext = spamBBArea:CreateText(keybindsString, nil, false, GameFontNormal, \"LEFT\", 0)\nkeybindsInfotext:SetPoint(\"BOTTOMLEFT\", spamBBArea.frame, \"BOTTOMLEFT\", 10, 10)\n"
  },
  {
    "path": "DBM-GUI/modules/options/filters/HandHolding.lua",
    "content": "local L = DBM_GUI_L\n\nlocal handPanel = DBM_GUI.Cat_Filters:CreateNewPanel(L.Panel_HandFilter, \"option\")\n\nlocal spamSpecAnnouncesFilters = handPanel:CreateArea(L.Area_SpamFilter_SpecRoleFilters)\nspamSpecAnnouncesFilters:CreateCheckButton(L.SpamSpecInformationalOnly, true, nil, \"SpamSpecInformationalOnly\")\nspamSpecAnnouncesFilters:CreateCheckButton(L.SpamSpecRoleDispel, true, nil, \"SpamSpecRoledispel\")\nspamSpecAnnouncesFilters:CreateCheckButton(L.SpamSpecRoleInterrupt, true, nil, \"SpamSpecRoleinterrupt\")\nspamSpecAnnouncesFilters:CreateCheckButton(L.SpamSpecRoleDefensive, true, nil, \"SpamSpecRoledefensive\")\nspamSpecAnnouncesFilters:CreateCheckButton(L.SpamSpecRoleTaunt, true, nil, \"SpamSpecRoletaunt\")\nspamSpecAnnouncesFilters:CreateCheckButton(L.SpamSpecRoleSoak, true, nil, \"SpamSpecRolesoak\")\nspamSpecAnnouncesFilters:CreateCheckButton(L.SpamSpecRoleStack, true, nil, \"SpamSpecRolestack\")\nspamSpecAnnouncesFilters:CreateCheckButton(L.SpamSpecRoleSwitch, true, nil, \"SpamSpecRoleswitch\")\nspamSpecAnnouncesFilters:CreateCheckButton(L.SpamSpecRoleGTFO, true, nil, \"SpamSpecRolegtfo\")\n"
  },
  {
    "path": "DBM-GUI/modules/options/filters/HideBlizzard.lua",
    "content": "local L = DBM_GUI_L\n\nlocal hideBlizzPanel = DBM_GUI.Cat_Filters:CreateNewPanel(L.Panel_HideBlizzard, \"option\")\nlocal hideBlizzArea = hideBlizzPanel:CreateArea(L.Area_HideBlizzard)\n\nhideBlizzArea:CreateCheckButton(L.HideBossEmoteFrame, true, nil, \"HideBossEmoteFrame2\")\nhideBlizzArea:CreateCheckButton(L.HideWatchFrame, true, nil, \"HideObjectivesFrame\")\n--hideBlizzArea:CreateCheckButton(L.HideQuestTooltips, true, nil, \"HideQuestTooltips\")\nhideBlizzArea:CreateCheckButton(L.HideTooltips, true, nil, \"HideTooltips\")\nlocal DisableSFX\t= hideBlizzArea:CreateCheckButton(L.DisableSFX, true, nil, \"DisableSFX\")\n\nlocal movieOptions = {\n\t{\ttext\t= L.Disable,\tvalue\t= \"Never\"},\n\t{\ttext\t= L.OnlyFight,\tvalue\t= \"OnlyFight\"},\n\t{\ttext\t= L.AfterFirst,\tvalue\t= \"AfterFirst\"},\n\t{\ttext\t= ALWAYS,\t\tvalue\t= \"Block\"},\n}\nlocal blockMovieDropDown = hideBlizzArea:CreateDropdown(L.DisableCinematics, movieOptions, \"DBM\", \"MovieFilter2\", function(value)\n\tDBM.Options.MovieFilter2 = value\nend, 350)\nblockMovieDropDown:SetPoint(\"TOPLEFT\", DisableSFX, \"BOTTOMLEFT\", -15, -25)\nblockMovieDropDown.myheight = 45\n"
  },
  {
    "path": "DBM-GUI/modules/options/filters/Privacy.lua",
    "content": "local L = DBM_GUI_L\nlocal privacyPanel = DBM_GUI.Cat_Filters:CreateNewPanel(L.Tab_Privacy, \"option\")\n\nlocal privacyWhispersArea = privacyPanel:CreateArea(L.Area_WhisperMessages)\nprivacyWhispersArea:CreateCheckButton(L.AutoRespond, true, nil, \"AutoRespond\")\nprivacyWhispersArea:CreateCheckButton(L.WhisperStats, true, nil, \"WhisperStats\")\nprivacyWhispersArea:CreateCheckButton(L.DisableStatusWhisper, true, nil, \"DisableStatusWhisper\")\n\nlocal privacySyncArea = privacyPanel:CreateArea(L.Area_SyncMessages)\nprivacySyncArea:CreateCheckButton(L.EnableWBSharing, true, nil, \"EnableWBSharing\")\nprivacySyncArea:CreateCheckButton(L.DisableGuildStatus, true, nil, \"DisableGuildStatus\")\n"
  },
  {
    "path": "DBM-GUI/modules/options/filters/RaidLeaderDisable.lua",
    "content": "local L = DBM_GUI_L\nlocal rlControlsPanel = DBM_GUI.Cat_Filters:CreateNewPanel(L.Tab_RLControls, \"option\")\n\nlocal featureOverridesArea = rlControlsPanel:CreateArea(L.Area_FeatureOverrides)\nfeatureOverridesArea:CreateCheckButton(L.OverrideIcons, true, nil, \"DisableRaidIcons\")\nfeatureOverridesArea:CreateCheckButton(L.OverrideSay, true, nil, \"DisableChatBubbles\")\nfeatureOverridesArea:CreateCheckButton(L.DisableStatusWhisperShort, true, nil, \"DisableStatusWhisper\")--TODO, whenc hanging this checkbox, make sure other checkbox in privacy also updates?\nfeatureOverridesArea:CreateCheckButton(L.DisableGuildStatusShort, true, nil, \"DisableGuildStatus\")--TODO, whenc hanging this checkbox, make sure other checkbox in privacy also updates?\nlocal infotext = featureOverridesArea:CreateText(L.ConfigAreaFooter, nil, false, GameFontNormalSmall, \"LEFT\", 25)\ninfotext:SetPoint(\"BOTTOMLEFT\", featureOverridesArea.frame, \"BOTTOMLEFT\", 10, 10)\n\nlocal configOverrideArea = rlControlsPanel:CreateArea(L.Area_ConfigOverrides)\nconfigOverrideArea:CreateCheckButton(L.OverrideBossAnnounceOptions, true, nil, \"OverrideBossAnnounce\")\nconfigOverrideArea:CreateCheckButton(L.OverrideBossTimerOptions, true, nil, \"OverrideBossTimer\")\nconfigOverrideArea:CreateCheckButton(L.OverrideBossIconOptions, true, nil, \"OverrideBossIcon\")\nconfigOverrideArea:CreateCheckButton(L.OverrideBossSayOptions, true, nil, \"OverrideBossSay\")\nlocal infotext2 = configOverrideArea:CreateText(L.ConfigAreaFooter, nil, false, GameFontNormalSmall, \"LEFT\", 20)\ninfotext2:SetPoint(\"BOTTOMLEFT\", configOverrideArea.frame, \"BOTTOMLEFT\", 10, 10)\nlocal infotext3 = configOverrideArea:CreateText(L.ConfigAreaFooter2, nil, false, GameFontNormalSmall, \"LEFT\", 25)\ninfotext3:SetPoint(\"BOTTOMLEFT\", infotext2, \"BOTTOMLEFT\", 0, 20)\n\nlocal receivingOverrideArea = rlControlsPanel:CreateArea(L.Area_receivingOptions)\nreceivingOverrideArea:CreateCheckButton(L.NoAnnounceOverride, true, nil, \"NoAnnounceOverride\")\nreceivingOverrideArea:CreateCheckButton(L.NoTimerOverridee, true, nil, \"NoTimerOverridee\")\nreceivingOverrideArea:CreateCheckButton(L.ReplaceMyConfigOnOverride, true, nil, \"ReplaceMyConfigOnOverride\")\nlocal infotext5 = receivingOverrideArea:CreateText(L.ReceivingFooter, nil, false, GameFontNormalSmall, \"LEFT\", 20)\ninfotext5:SetPoint(\"BOTTOMLEFT\", receivingOverrideArea.frame, \"BOTTOMLEFT\", 10, 10)\nlocal infotext6 = receivingOverrideArea:CreateText(L.ReceivingFooter2, nil, false, GameFontNormalSmall, \"LEFT\", 20)\ninfotext6:SetPoint(\"BOTTOMLEFT\", infotext5, \"BOTTOMLEFT\", 0, 20)\nlocal infotext7 = receivingOverrideArea:CreateText(L.ReceivingFooter3, nil, false, GameFontNormalSmall, \"LEFT\", 25)\ninfotext7:SetPoint(\"BOTTOMLEFT\", infotext6, \"BOTTOMLEFT\", 0, 20)\n\nlocal infotext4 = rlControlsPanel:CreateText(L.TabFooter, nil, false, GameFontNormalSmall, \"LEFT\", 0)\ninfotext4:SetPoint(\"BOTTOMLEFT\", rlControlsPanel.frame, \"BOTTOMLEFT\", 10, 10)\n"
  },
  {
    "path": "DBM-GUI/modules/options/filters/Reduction.lua",
    "content": "local L = DBM_GUI_L\n\nlocal reducPanel = DBM_GUI.Cat_Filters:CreateNewPanel(L.Panel_ReducedInformation, \"option\")\n\nlocal spamAnnounces = reducPanel:CreateArea(L.Area_SpamFilter_Anounces)\nspamAnnounces:CreateCheckButton(L.SpamBlockNoShowTgtAnnounce, true, nil, \"DontShowTargetAnnouncements\")\nspamAnnounces:CreateCheckButton(L.SpamBlockNoTrivialSpecWarnSound, true, nil, \"DontPlayTrivialSpecialWarningSound\")\n\nlocal spamArea = reducPanel:CreateArea(L.Area_SpamFilter)\nspamArea:CreateCheckButton(L.DontShowFarWarnings, true, nil, \"DontShowFarWarnings\")\nspamArea:CreateCheckButton(L.StripServerName, true, nil, \"StripServerName\")\nspamArea:CreateCheckButton(L.FilterVoidFormSay, true, nil, \"FilterVoidFormSay\")\n\nlocal spamSpecArea = reducPanel:CreateArea(L.Area_SpecFilter)\nspamSpecArea:CreateCheckButton(L.FilterTankSpec, true, nil, \"FilterTankSpec\")\nspamSpecArea:CreateCheckButton(L.FilterDispels, true, nil, \"FilterDispel\")\nspamSpecArea:CreateCheckButton(L.FilterTrashWarnings, true, nil, \"FilterTrashWarnings2\")\n\nlocal bInterruptSpecArea = reducPanel:CreateArea(L.Area_BInterruptFilter)\nbInterruptSpecArea:CreateCheckButton(L.FilterTargetFocus, true, nil, \"FilterBTargetFocus\")\nbInterruptSpecArea:CreateCheckButton(L.FilterInterruptCooldown, true, nil, \"FilterBInterruptCooldown\")\nbInterruptSpecArea:CreateCheckButton(L.FilterInterruptHealer, true, nil, \"FilterBInterruptHealer\")\nbInterruptSpecArea:CreateCheckButton(L.FilterInterruptNoteName, true, nil, \"FilterInterruptNoteName\")\nlocal infotext1 = bInterruptSpecArea:CreateText(L.Area_BInterruptFilterFooter, nil, false, GameFontNormalSmall, \"LEFT\", 20)\ninfotext1:SetPoint(\"BOTTOMLEFT\", bInterruptSpecArea.frame, \"BOTTOMLEFT\", 10, 10)\n\nlocal tInterruptSpecArea = reducPanel:CreateArea(L.Area_TInterruptFilter)\ntInterruptSpecArea:CreateCheckButton(L.FilterTargetFocus, true, nil, \"FilterTTargetFocus\")\ntInterruptSpecArea:CreateCheckButton(L.FilterInterruptCooldown, true, nil, \"FilterTInterruptCooldown\")\ntInterruptSpecArea:CreateCheckButton(L.FilterInterruptHealer, true, nil, \"FilterTInterruptHealer\")\nlocal infotext2 = tInterruptSpecArea:CreateText(L.Area_BInterruptFilterFooter, nil, false, GameFontNormalSmall, \"LEFT\", 20)\ninfotext2:SetPoint(\"BOTTOMLEFT\", tInterruptSpecArea.frame, \"BOTTOMLEFT\", 10, 10)\n"
  },
  {
    "path": "DBM-GUI/modules/options/frames/BossHealth.lua",
    "content": "local L = DBM_GUI_L\nlocal DBM = DBM\n\nlocal hpPanel = DBM_GUI.Cat_Frames:CreateNewPanel(L.Panel_HPFrame, \"option\")\n\nlocal hpArea = hpPanel:CreateArea(L.Area_HPFrame, nil, 150, true)\n\nhpArea:CreateCheckButton(L.HP_Enabled, true, nil, \"AlwaysShowHealthFrame\")\nlocal growbttn = hpArea:CreateCheckButton(L.HP_GrowUpwards, true)\ngrowbttn:SetScript(\"OnShow\",  function(self) self:SetChecked(DBM.Options.HealthFrameGrowUp) end)\ngrowbttn:SetScript(\"OnClick\", function(self)\n\t\tDBM.Options.HealthFrameGrowUp = not not self:GetChecked()\n\t\tDBM.BossHealth:UpdateSettings()\nend)\n\n\nlocal BarWidthSlider = hpArea:CreateSlider(L.BarWidth, 150, 275, 1)\nBarWidthSlider:SetPoint(\"TOPLEFT\", hpArea.frame, \"TOPLEFT\", 20, -105)\nBarWidthSlider:SetScript(\"OnShow\", function(self) self:SetValue(DBM.Options.HealthFrameWidth or 100) end)\nBarWidthSlider:HookScript(\"OnValueChanged\", function(self)\n\t\tDBM.Options.HealthFrameWidth = self:GetValue()\n\t\tDBM.BossHealth:UpdateSettings()\nend)\n\nlocal resetbutton = hpArea:CreateButton(L.Reset, 120, 16)\nresetbutton:SetPoint('BOTTOMRIGHT', hpArea.frame, \"BOTTOMRIGHT\", -5, 5)\nresetbutton:SetNormalFontObject(GameFontNormalSmall);\nresetbutton:SetHighlightFontObject(GameFontNormalSmall);\nresetbutton:SetScript(\"OnClick\", function()\n\t\tDBM.Options.HPFramePoint = DBM.DefaultOptions.HPFramePoint\n\t\tDBM.Options.HPFrameX = DBM.DefaultOptions.HPFrameX\n\t\tDBM.Options.HPFrameY = DBM.DefaultOptions.HPFrameY\n\t\tDBM.Options.HealthFrameGrowUp = DBM.DefaultOptions.HealthFrameGrowUp\n\t\tDBM.Options.HealthFrameWidth = DBM.DefaultOptions.HealthFrameWidth\n\t\tDBM.BossHealth:UpdateSettings()\nend)\n\nlocal function createDummyFunc(i) return function() return i end end\nlocal showbutton = hpArea:CreateButton(L.HP_ShowDemo, 120, 16)\nshowbutton:SetPoint('BOTTOM', resetbutton, \"TOP\", 0, 5)\nshowbutton:SetNormalFontObject(GameFontNormalSmall);\nshowbutton:SetHighlightFontObject(GameFontNormalSmall);\nshowbutton:SetScript(\"OnClick\", function()\n\t\tDBM.BossHealth:Show(\"Health Frame\")\n\t\tDBM.BossHealth:AddBoss(createDummyFunc(25), \"TestBoss 1\")\n\t\tDBM.BossHealth:AddBoss(createDummyFunc(50), \"TestBoss 2\")\n\t\tDBM.BossHealth:AddBoss(createDummyFunc(75), \"TestBoss 3\")\n\t\tDBM.BossHealth:AddBoss(createDummyFunc(100), \"TestBoss 4\")\nend)\n"
  },
  {
    "path": "DBM-GUI/modules/options/frames/Frames.lua",
    "content": "local L\t\t= DBM_GUI_L\n\nDBM_GUI.Cat_Frames = DBM_GUI:CreateNewPanel(L.TabCategory_Frames, \"option\")\n\nlocal FramesArea1\t\t= DBM_GUI.Cat_Frames:CreateArea(L.Area_BasicSetup)\nFramesArea1:CreateText(\"|cFF73C2FBhttps://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BNew-User-Guide%5D-Initial-Setup-Tips|r\", nil, true, nil, \"LEFT\", 0)\nFramesArea1.frame:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, L.Area_BasicSetup, \"https://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BNew-User-Guide%5D-Initial-Setup-Tips\")\nend)\n\nlocal FramesArea2\t\t= DBM_GUI.Cat_Frames:CreateArea(L.Area_NamelateInfo)\nFramesArea2:CreateText(\"|cFF73C2FBhttps://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BGuide%5D-DBM-Nameplate-Auras|r\", nil, true, nil, \"LEFT\", 0)\nFramesArea2.frame:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, L.Area_NamelateInfo, \"https://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BGuide%5D-DBM-Nameplate-Auras\")\nend)\n"
  },
  {
    "path": "DBM-GUI/modules/options/frames/InfoFrame.lua",
    "content": "local L, CL = DBM_GUI_L, DBM_CORE_L\nlocal DBM = DBM\n\nlocal GameFontNormalSmall = GameFontNormalSmall\n\nlocal panel = DBM_GUI.Cat_Frames:CreateNewPanel(L.Panel_InfoFrame, \"option\")\n\nlocal general = panel:CreateArea(L.Area_General)\n\nlocal dontShow = general:CreateCheckButton(L.SpamBlockNoInfoFrame, true, nil, \"DontShowInfoFrame\")\nlocal locked = general:CreateCheckButton(CL.LOCK_FRAME, true, nil, \"InfoFrameLocked\")\nlocal showSelf = general:CreateCheckButton(CL.INFOFRAME_SHOW_SELF, false, nil, \"InfoFrameShowSelf\")\n\nlocal lines = {\n\t{\n\t\ttext\t= CL.INFOFRAME_LINESDEFAULT,\n\t\tvalue\t= 0\n\t},\n\t{\n\t\ttext\t= CL.INFOFRAME_LINES_TO:format(3),\n\t\tvalue\t= 3\n\t},\n\t{\n\t\ttext\t= CL.INFOFRAME_LINES_TO:format(5),\n\t\tvalue\t= 5\n\t},\n\t{\n\t\ttext\t= CL.INFOFRAME_LINES_TO:format(8),\n\t\tvalue\t= 8\n\t},\n\t{\n\t\ttext\t= CL.INFOFRAME_LINES_TO:format(10),\n\t\tvalue\t= 10\n\t},\n\t{\n\t\ttext\t= CL.INFOFRAME_LINES_TO:format(15),\n\t\tvalue\t= 15\n\t},\n\t{\n\t\ttext\t= CL.INFOFRAME_LINES_TO:format(20),\n\t\tvalue\t= 20\n\t},\n\t{\n\t\ttext\t= CL.INFOFRAME_LINES_TO:format(30),\n\t\tvalue\t= 30\n\t}\n}\n\nlocal linesDropdown = general:CreateDropdown(CL.INFOFRAME_SETLINES, lines, \"DBM\", \"InfoFrameLines\", function(value)\n\tDBM.Options.InfoFrameLines = value\n\tDBM.InfoFrame:UpdateStyle()\nend)\nlinesDropdown:SetPoint(\"TOPLEFT\", showSelf, \"BOTTOMLEFT\", 0, -10)\n\nlocal columns = {\n\t{\n\t\ttext\t= CL.INFOFRAME_LINESDEFAULT,\n\t\tvalue\t= 0\n\t},\n\t{\n\t\ttext\t= CL.INFOFRAME_COLS_TO:format(1),\n\t\tvalue\t= 1\n\t},\n\t{\n\t\ttext\t= CL.INFOFRAME_COLS_TO:format(2),\n\t\tvalue\t= 2\n\t},\n\t{\n\t\ttext\t= CL.INFOFRAME_COLS_TO:format(3),\n\t\tvalue\t= 3\n\t},\n\t{\n\t\ttext\t= CL.INFOFRAME_COLS_TO:format(4),\n\t\tvalue\t= 4\n\t},\n\t{\n\t\ttext\t= CL.INFOFRAME_COLS_TO:format(5),\n\t\tvalue\t= 5\n\t},\n\t{\n\t\ttext\t= CL.INFOFRAME_COLS_TO:format(6),\n\t\tvalue\t= 6\n\t}\n}\n\nlocal columnsDropdown = general:CreateDropdown(CL.INFOFRAME_SETCOLS, columns, \"DBM\", \"InfoFrameLines\", function(value)\n\tDBM.Options.InfoFrameCols = value\n\tDBM.InfoFrame:UpdateStyle()\nend)\ncolumnsDropdown:SetPoint(\"TOPLEFT\", linesDropdown, \"BOTTOMLEFT\", 0, -10)\n\n--local position = panel:CreateArea(L.Area_Position)\n\nlocal style = panel:CreateArea(L.Area_Style)\n\nlocal Fonts = DBM_GUI:MixinSharedMedia3(\"font\", {\n\t{\n\t\ttext\t= DEFAULT,\n\t\tvalue\t= \"standardFont\"\n\t},\n\t{\n\t\ttext\t= \"Arial\",\n\t\tvalue\t= \"Fonts\\\\ARIALN.TTF\"\n\t},\n\t{\n\t\ttext\t= \"Skurri\",\n\t\tvalue\t= \"Fonts\\\\SKURRI.TTF\"\n\t},\n\t{\n\t\ttext\t= \"Morpheus\",\n\t\tvalue\t= \"Fonts\\\\MORPHEUS.TTF\"\n\t}\n})\n\nlocal FontDropDown = style:CreateDropdown(L.FontType, Fonts, \"DBM\", \"InfoFrameFont\", function(value)\n\tDBM.Options.InfoFrameFont = value\n\tDBM.InfoFrame:UpdateStyle()\nend)\nFontDropDown:SetPoint(\"TOPLEFT\", style.frame, \"TOPLEFT\", 0, -20)\n\nlocal FontStyles = {\n\t{\n\t\ttext\t= L.None,\n\t\tvalue\t= \"None\"\n\t},\n\t{\n\t\ttext\t= L.Outline,\n\t\tvalue\t= \"OUTLINE\",\n\t\tflag\t= true\n\t},\n\t{\n\t\ttext\t= L.ThickOutline,\n\t\tvalue\t= \"THICKOUTLINE\",\n\t\tflag\t= true\n\t},\n\t{\n\t\ttext\t= L.MonochromeOutline,\n\t\tvalue\t= \"MONOCHROME,OUTLINE\",\n\t\tflag\t= true\n\t},\n\t{\n\t\ttext\t= L.MonochromeThickOutline,\n\t\tvalue\t= \"MONOCHROME,THICKOUTLINE\",\n\t\tflag\t= true\n\t}\n}\n\nlocal FontStyleDropDown = style:CreateDropdown(L.FontStyle, FontStyles, \"DBM\", \"InfoFrameFontStyle\", function(value)\n\tDBM.Options.InfoFrameFontStyle = value\n\tDBM.InfoFrame:UpdateStyle()\nend)\nFontStyleDropDown:SetPoint(\"TOPLEFT\", FontDropDown, \"BOTTOMLEFT\", 0, -10)\n\nlocal fontSizeSlider = style:CreateSlider(L.FontSize, 8, 60, 1, 150)\nfontSizeSlider:SetPoint(\"TOPLEFT\", FontStyleDropDown, \"TOPLEFT\", 20, -45)\nfontSizeSlider:SetValue(DBM.Options.InfoFrameFontSize)\nfontSizeSlider:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.InfoFrameFontSize = self:GetValue()\n\tDBM.InfoFrame:UpdateStyle()\nend)\n\nlocal movemebutton = general:CreateButton(L.MoveMe, 100, 16)\nmovemebutton:SetPoint(\"TOPRIGHT\", general.frame, \"TOPRIGHT\", -2, -4)\nmovemebutton:SetNormalFontObject(GameFontNormalSmall)\nmovemebutton:SetHighlightFontObject(GameFontNormalSmall)\nmovemebutton:SetScript(\"OnClick\", function()\n\tif DBM.InfoFrame:IsShown() then\n\t\tDBM.InfoFrame:Hide()\n\telse\n\t\tDBM.InfoFrame:Show(5, \"test\")\n\tend\nend)\n\nlocal resetbutton = general:CreateButton(L.SpecWarn_ResetMe, 120, 16)\nresetbutton:SetPoint(\"BOTTOMRIGHT\", general.frame, \"BOTTOMRIGHT\", -2, 4)\nresetbutton:SetNormalFontObject(GameFontNormalSmall)\nresetbutton:SetHighlightFontObject(GameFontNormalSmall)\nresetbutton:SetScript(\"OnClick\", function()\n\t-- Set Options\n\tDBM.Options.DontShowInfoFrame = DBM.DefaultOptions.DontShowInfoFrame\n\tDBM.Options.InfoFrameLocked = true\n\tDBM.Options.InfoFrameShowSelf = DBM.DefaultOptions.InfoFrameShowSelf\n\tDBM.Options.InfoFrameFont = DBM.DefaultOptions.InfoFrameFont\n\tDBM.Options.InfoFrameFontStyle = DBM.DefaultOptions.InfoFrameFontStyle\n\tDBM.Options.InfoFrameFontSize = DBM.DefaultOptions.InfoFrameFontSize\n\t-- Set UI visuals\n\tdontShow:SetChecked(DBM.Options.DontShowInfoFrame)\n\tlocked:SetChecked(true)\n\tshowSelf:SetChecked(DBM.Options.InfoFrameShowSelf)\n\tFontDropDown:SetSelectedValue(DBM.Options.WarningFont)\n\tFontStyleDropDown:SetSelectedValue(DBM.Options.FontStyles)\n\tfontSizeSlider:SetValue(DBM.DefaultOptions.WarningFontSize)\n\tDBM.InfoFrame:UpdateStyle()\nend)\n"
  },
  {
    "path": "DBM-GUI/modules/options/frames/Nameplate.lua",
    "content": "local L = DBM_GUI_L\nlocal panel = DBM_GUI.Cat_Frames:CreateNewPanel(L.Panel_Nameplates, \"option\")\n\nlocal general = panel:CreateArea(L.Area_General)\n\ngeneral:CreateCheckButton(L.SpamBlockNoNameplate, true, nil, \"DontShowNameplateIcons\")\ngeneral:CreateCheckButton(L.UseNameplateHandoff, true, nil, \"UseNameplateHandoff\")\n\nlocal style = panel:CreateArea(L.Area_Style)\n\nlocal auraSizeSlider = style:CreateSlider(L.NPAuraSize, 20, 80, 1, 200)\nauraSizeSlider:SetPoint(\"TOPLEFT\", style.frame, \"TOPLEFT\", 20, -25)\nauraSizeSlider:SetValue(DBM.Options.NPAuraSize)\nauraSizeSlider:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.NPAuraSize = self:GetValue()\nend)\n\nlocal resetbutton = general:CreateButton(L.SpecWarn_ResetMe, 120, 16)\nresetbutton:SetPoint(\"BOTTOMRIGHT\", style.frame, \"BOTTOMRIGHT\", -2, 4)\nresetbutton:SetNormalFontObject(GameFontNormalSmall)\nresetbutton:SetHighlightFontObject(GameFontNormalSmall)\nresetbutton:SetScript(\"OnClick\", function()\n\t-- Set Options\n\tDBM.Options.NPAuraSize = DBM.DefaultOptions.NPAuraSize\n\t-- Set UI visuals\n\tauraSizeSlider:SetValue(DBM.DefaultOptions.NPAuraSize)\nend)\n"
  },
  {
    "path": "DBM-GUI/modules/options/frames/Range.lua",
    "content": "local L = DBM_GUI_L\nlocal panel = DBM_GUI.Cat_Frames:CreateNewPanel(L.Panel_Range, \"option\")\n\nlocal general = panel:CreateArea(L.Area_General)\n\ngeneral:CreateCheckButton(L.SpamBlockNoRangeFrame, true, nil, \"DontShowRangeFrame\")\n"
  },
  {
    "path": "DBM-GUI/modules/options/general/Core_GUI.lua",
    "content": "local L = DBM_GUI_L\n\nlocal coreoptions = DBM_GUI.Cat_General:CreateNewPanel(L.Core_GUI, \"option\")\n\nlocal generaloptions = coreoptions:CreateArea(L.General)\n\nlocal MiniMapIcon = generaloptions:CreateCheckButton(L.EnableMiniMapIcon, true)\nMiniMapIcon:SetScript(\"OnClick\", function(self)\n\tDBM:ToggleMinimapButton()\n\tself:SetChecked(not DBM_MinimapIcon.hide)\nend)\nMiniMapIcon:SetChecked(not DBM_MinimapIcon.hide)\n\nlocal soundChannelsList = {\n\t{\n\t\ttext\t= L.UseMasterChannel,\n\t\tvalue\t= \"Master\"\n\t},\n\t{\n\t\ttext\t= L.UseDialogChannel,\n\t\tvalue\t= \"Dialog\"\n\t},\n\t{\n\t\ttext\t= L.UseSFXChannel,\n\t\tvalue\t= \"SFX\"\n\t}\n}\nlocal SoundChannelDropdown = generaloptions:CreateDropdown(L.UseSoundChannel, soundChannelsList, \"DBM\", \"UseSoundChannel\", function(value)\n\tDBM.Options.UseSoundChannel = value\nend)\nSoundChannelDropdown:SetPoint(\"TOPLEFT\", generaloptions.frame, \"TOPLEFT\", 0, -55)\n\nlocal bmrange = generaloptions:CreateButton(L.Button_RangeFrame, 120, 30)\nbmrange:SetPoint(\"TOPLEFT\", SoundChannelDropdown, \"BOTTOMLEFT\", 15, -5)\nbmrange:SetScript(\"OnClick\", function()\n\tif DBM.RangeCheck:IsShown() then\n\t\tDBM.RangeCheck:Hide(true)\n\telse\n\t\tDBM.RangeCheck:Show(nil, nil, true)\n\tend\nend)\n\nlocal bminfo = generaloptions:CreateButton(L.Button_InfoFrame, 120, 30)\nbminfo.myheight = 0\nbminfo:SetPoint(\"LEFT\", bmrange, \"RIGHT\", 2, 0)\nbminfo:SetScript(\"OnClick\", function()\n\tif DBM.InfoFrame:IsShown() then\n\t\tDBM.InfoFrame:Hide()\n\telse\n\t\tDBM.InfoFrame:Show(5, \"test\")\n\tend\nend)\n\nlocal bmtestmode = generaloptions:CreateButton(L.Button_TestBars, 120, 30)\nbmtestmode.myheight = 0\nbmtestmode:SetPoint(\"TOP\", bmrange, \"BOTTOM\", 2, 0)\nbmtestmode:SetScript(\"OnClick\", function()\n\tDBM:DemoMode()\nend)\n\nlocal moveme = generaloptions:CreateButton(L.Button_MoveBars, 120, 30)\nmoveme:SetPoint(\"LEFT\", bmtestmode, \"RIGHT\", 2, 0)\nmoveme:SetScript(\"OnClick\", function()\n\tDBT:ShowMovableBar()\nend)\n\nlocal latencySlider = generaloptions:CreateSlider(L.Latency_Text, 50, 750, 5, 210)\nlatencySlider:SetPoint(\"BOTTOMLEFT\", bmrange, \"BOTTOMLEFT\", 10, -70)\nlatencySlider:SetValue(DBM.Options.LatencyThreshold)\nlatencySlider:HookScript(\"OnValueChanged\", function(self)\n\tDBM.Options.LatencyThreshold = self:GetValue()\nend)\n\nlocal resetbutton = generaloptions:CreateButton(L.Button_ResetInfoRange, 120, 16)\nresetbutton:SetPoint(\"BOTTOMRIGHT\", generaloptions.frame, \"BOTTOMRIGHT\", -5, 5)\nresetbutton:SetNormalFontObject(GameFontNormalSmall)\nresetbutton:SetHighlightFontObject(GameFontNormalSmall)\nresetbutton:SetScript(\"OnClick\", function()\n\tDBM.Options.InfoFrameX = DBM.DefaultOptions.InfoFrameX\n\tDBM.Options.InfoFrameY = DBM.DefaultOptions.InfoFrameY\n\tDBM.Options.InfoFramePoint = DBM.DefaultOptions.InfoFramePoint\n\tDBM.Options.RangeFrameX = DBM.DefaultOptions.RangeFrameX\n\tDBM.Options.RangeFrameY = DBM.DefaultOptions.RangeFrameY\n\tDBM.Options.RangeFramePoint = DBM.DefaultOptions.RangeFramePoint\n\tDBM.Options.RangeFrameRadarX = DBM.DefaultOptions.RangeFrameRadarX\n\tDBM.Options.RangeFrameRadarY = DBM.DefaultOptions.RangeFrameRadarY\n\tDBM.Options.RangeFrameRadarPoint = DBM.DefaultOptions.RangeFrameRadarPoint\n\tDBM:RepositionFrames()\nend)\n\nlocal modelarea = coreoptions:CreateArea(L.ModelOptions)\n\nmodelarea:CreateCheckButton(L.EnableModels, true, nil, \"EnableModels\")\n\nlocal modelSounds = {\n\t{\n\t\ttext\t= L.NoSound,\n\t\tvalue\t= \"\"\n\t},\n\t{\n\t\ttext\t= L.ModelSoundShort,\n\t\tvalue\t= \"Short\"\n\t},\n\t{\n\t\ttext\t= L.ModelSoundLong,\n\t\tvalue\t= \"Long\"\n\t}\n}\nlocal ModelSoundDropDown = modelarea:CreateDropdown(L.ModelSoundOptions, modelSounds, \"DBM\", \"ModelSoundValue\", function(value)\n\tDBM.Options.ModelSoundValue = value\nend)\nModelSoundDropDown.myheight = 40\nModelSoundDropDown:SetPoint(\"TOPLEFT\", modelarea.frame, \"TOPLEFT\", 0, -50)\n\nlocal resizeOptions = coreoptions:CreateArea(L.ResizeOptions)\n\nresizeOptions:CreateText(L.ResizeInfo, nil, true, nil, nil, 0)\n\nlocal optionsFrame = _G[\"DBM_GUI_OptionsFrame\"]\n\nlocal resetbutton2 = resizeOptions:CreateButton(L.Button_ResetWindowSize, 120, 16)\nresetbutton2:SetPoint(\"BOTTOMRIGHT\", resizeOptions.frame, \"BOTTOMRIGHT\", -5, 5)\nresetbutton2:SetNormalFontObject(GameFontNormalSmall)\nresetbutton2:SetHighlightFontObject(GameFontNormalSmall)\nresetbutton2:SetScript(\"OnClick\", function()\n\tDBM.Options.GUIWidth = DBM.DefaultOptions.GUIWidth\n\tDBM.Options.GUIHeight = DBM.DefaultOptions.GUIHeight\n\toptionsFrame:SetSize(DBM.Options.GUIWidth, DBM.Options.GUIHeight)\nend)\n\nlocal minWidth, minHeight = optionsFrame:GetMinResize()\nlocal maxWidth, maxHeight = optionsFrame:GetMaxResize()\n\nlocal resizeWidth = resizeOptions:CreateEditBox(L.Editbox_WindowWidth, math.floor(DBM.Options.GUIWidth * 10 ^ 2 + 0.5) / 10 ^ 2)\nresizeWidth:SetPoint(\"TOPLEFT\", 20, -40)\nresizeWidth:SetScript(\"OnChar\", function(self)\n\tself:SetText(self:GetText():gsub(\"[^%.%d]\", \"\"))\nend)\nresizeWidth:SetScript(\"OnEnterPressed\", function(self)\n\tlocal value = tonumber(self:GetText()) or 0\n\tif value < minWidth then\n\t\tself:SetText(minWidth)\n\t\treturn\n\tend\n\tif value > maxWidth then\n\t\tself:SetText(maxWidth)\n\tend\n\tDBM.Options.GUIWidth = value\n\toptionsFrame:SetSize(DBM.Options.GUIWidth, DBM.Options.GUIHeight)\nend)\n\nlocal resizeHeight = resizeOptions:CreateEditBox(L.Editbox_WindowHeight, math.floor(DBM.Options.GUIHeight * 10 ^ 2 + 0.5) / 10 ^ 2)\nresizeHeight.myheight = 10\nresizeHeight:SetPoint(\"LEFT\", resizeWidth, \"RIGHT\", 40, 0)\nresizeHeight:SetScript(\"OnChar\", function(self)\n\tself:SetText(self:GetText():gsub(\"[^%.%d]\", \"\"))\nend)\nresizeHeight:SetScript(\"OnEnterPressed\", function(self)\n\tlocal value = tonumber(self:GetText()) or 0\n\tif value < minHeight then\n\t\tself:SetText(minHeight)\n\t\treturn\n\tend\n\tif value > maxHeight then\n\t\tself:SetText(maxHeight)\n\tend\n\tDBM.Options.GUIHeight = value\n\toptionsFrame:SetSize(DBM.Options.GUIWidth, DBM.Options.GUIHeight)\nend)\n\noptionsFrame:HookScript(\"OnSizeChanged\", function(self)\n\tresizeWidth:SetText(math.floor(self:GetWidth() * 10 ^ 2 + 0.5) / 10 ^ 2)\n\tresizeHeight:SetText(math.floor(self:GetHeight() * 10 ^ 2 + 0.5) / 10 ^ 2)\nend)\n\nlocal UIGroupingOptions = coreoptions:CreateArea(L.UIGroupingOptions)\nUIGroupingOptions:CreateCheckButton(L.GroupOptionsBySpell, true, nil, \"GroupOptionsBySpell\")\nUIGroupingOptions:CreateCheckButton(L.GroupOptionsExcludeIcon, true, nil, \"GroupOptionsExcludeIcon\")\nUIGroupingOptions:CreateCheckButton(L.AutoExpandSpellGroups, true, nil, \"AutoExpandSpellGroups\")\n--UIGroupingOptions:CreateCheckButton(L.ShowSpellDescWhenExpanded, true, nil, \"ShowSpellDescWhenExpanded\")\n"
  },
  {
    "path": "DBM-GUI/modules/options/general/ExtraFeatures.lua",
    "content": "local L = DBM_GUI_L\n\nlocal extraFeaturesPanel\t= DBM_GUI.Cat_General:CreateNewPanel(L.Panel_ExtraFeatures, \"option\")\n\nlocal soundAlertsArea\t\t= extraFeaturesPanel:CreateArea(L.Area_SoundAlerts)\nsoundAlertsArea:CreateCheckButton(L.LFDEnhance, true, nil, \"LFDEnhance\")\nsoundAlertsArea:CreateCheckButton(L.WorldBossNearAlert, true, nil, \"WorldBossNearAlert\")\nsoundAlertsArea:CreateCheckButton(L.RLReadyCheckSound, true, nil, \"RLReadyCheckSound\")\nsoundAlertsArea:CreateCheckButton(L.AFKHealthWarning, true, nil, \"AFKHealthWarning\")\nsoundAlertsArea:CreateCheckButton(L.AutoReplySound, true, nil, \"AutoReplySound\")\n\nlocal generaltimeroptions\t= extraFeaturesPanel:CreateArea(L.TimerGeneral)\ngeneraltimeroptions:CreateCheckButton(L.SKT_Enabled, true, nil, \"AlwaysShowSpeedKillTimer2\")\ngeneraltimeroptions:CreateCheckButton(L.ShowRespawn, true, nil, \"ShowRespawn\")\ngeneraltimeroptions:CreateCheckButton(L.ShowQueuePop, true, nil, \"ShowQueuePop\")\n\nlocal bossLoggingArea\t\t= extraFeaturesPanel:CreateArea(L.Area_AutoLogging)\nbossLoggingArea:CreateCheckButton(L.AutologBosses, true, nil, \"AutologBosses\")\nif _G[\"Transcriptor\"] then\n\tbossLoggingArea:CreateCheckButton(L.AdvancedAutologBosses, true, nil, \"AdvancedAutologBosses\")\nend\n\nlocal bossLoggingFilters\t\t= extraFeaturesPanel:CreateArea(L.Area_AutoLoggingFilters)\nbossLoggingFilters:CreateCheckButton(L.RecordOnlyBosses, true, nil, \"RecordOnlyBosses\")\nbossLoggingFilters:CreateCheckButton(L.DoNotLogLFG, true, nil, \"DoNotLogLFG\")\n\nlocal bossLoggingContent\t\t= extraFeaturesPanel:CreateArea(L.Area_AutoLoggingContent)\nbossLoggingContent:CreateCheckButton(L.LogCurrentMythicRaids, true, nil, \"LogCurrentMythicRaids\")\nbossLoggingContent:CreateCheckButton(L.LogCurrentRaids, true, nil, \"LogCurrentRaids\")\nbossLoggingContent:CreateCheckButton(L.LogTWRaids, true, nil, \"LogTWRaids\")\nbossLoggingContent:CreateCheckButton(L.LogTrivialRaids, true, nil, \"LogTrivialRaids\")\nbossLoggingContent:CreateCheckButton(L.LogCurrentMPlus, true, nil, \"LogCurrentMPlus\")\nbossLoggingContent:CreateCheckButton(L.LogCurrentMythicZero, true, nil, \"LogCurrentMythicZero\")\nbossLoggingContent:CreateCheckButton(L.LogTWDungeons, true, nil, \"LogTWDungeons\")\nbossLoggingContent:CreateCheckButton(L.LogCurrentHeroic, true, nil, \"LogCurrentHeroic\")\nbossLoggingContent:CreateCheckButton(L.LogCurrentNormal, true, nil, \"LogCurrentNormal\")\nbossLoggingContent:CreateCheckButton(L.LogTrivialDungeons, true, nil, \"LogTrivialDungeons\")\n\nlocal thirdPartyArea = extraFeaturesPanel:CreateArea(L.Area_3rdParty)\n--if _G[\"oRA3Frame\"] then\n--\tthirdPartyArea:CreateCheckButton(L.oRA3AnnounceConsumables, true, nil, \"oRA3AnnounceConsumables\")\nif _G[\"BigBrother\"] and type(BigBrother.ConsumableCheck) == \"function\" then\n\tthirdPartyArea:CreateCheckButton(L.ShowBBOnCombatStart, true, nil, \"ShowBigBrotherOnCombatStart\")\n\tthirdPartyArea:CreateCheckButton(L.BigBrotherAnnounceToRaid, true, nil, \"BigBrotherAnnounceToRaid\")\nend\nthirdPartyArea:CreateCheckButton(L.ReportRecount, true, nil, \"ReportRecount\")\nthirdPartyArea:CreateCheckButton(L.ReportSkada, true, nil, \"ReportSkada\")\n\nlocal inviteArea\t\t\t= extraFeaturesPanel:CreateArea(L.Area_Invite)\ninviteArea:CreateCheckButton(L.AutoAcceptFriendInvite, true, nil, \"AutoAcceptFriendInvite\")\ninviteArea:CreateCheckButton(L.AutoAcceptGuildInvite, true, nil, \"AutoAcceptGuildInvite\")\n\nlocal advancedArea\t= extraFeaturesPanel:CreateArea(L.Area_Advanced)\nadvancedArea:CreateCheckButton(L.FakeBW, true, nil, \"FakeBWVersion\")\nadvancedArea:CreateCheckButton(L.AITimer, true, nil, \"AITimer\")\nadvancedArea:CreateCheckButton(L.FixCLEUOnCombatStart,  true, nil, \"FixCLEUOnCombatStart\")\n"
  },
  {
    "path": "DBM-GUI/modules/options/general/General.lua",
    "content": "local L\t\t= DBM_GUI_L\n\nDBM_GUI.Cat_General = DBM_GUI:CreateNewPanel(L.TabCategory_Options, \"option\")\n\n--This is still needed in first options panel to load to avoid model viewer errors\nif DBM.Options.EnableModels then\n\tlocal mobstyle = CreateFrame(\"PlayerModel\", \"DBM_BossPreview\", _G[\"DBM_GUI_OptionsFramePanelContainer\"])\n\tmobstyle:SetPoint(\"BOTTOMRIGHT\", \"DBM_GUI_OptionsFramePanelContainer\", \"BOTTOMRIGHT\", -5, 5)\n\tmobstyle:SetSize(300, 230)\n\tmobstyle:SetRotation(0)\n\tmobstyle:SetClampRectInsets(0, 0, 24, 0)\nend\n\nlocal GeneralArea1\t\t= DBM_GUI.Cat_General:CreateArea(L.Area_BasicSetup)\nGeneralArea1:CreateText(\"|cFF73C2FBhttps://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BNew-User-Guide%5D-Initial-Setup-Tips|r\", nil, true, nil, \"LEFT\", 0)\nGeneralArea1.frame:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, L.Area_BasicSetup, \"https://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BNew-User-Guide%5D-Initial-Setup-Tips\")\nend)\n\nlocal GeneralArea2\t\t= DBM_GUI.Cat_General:CreateArea(L.Area_ModulesForYou)\nGeneralArea2:CreateText(\"|cFF73C2FBhttps://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BNew-User-Guide%5D-What-Modules-are-for-you|r\", nil, true, nil, \"LEFT\", 0)\nGeneralArea2.frame:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, L.Area_ModulesForYou, \"https://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BNew-User-Guide%5D-What-Modules-are-for-you\")\nend)\n\nlocal GeneralArea3\t\t= DBM_GUI.Cat_General:CreateArea(L.Area_ProfilesSetup)\nGeneralArea3:CreateText(\"|cFF73C2FBhttps://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BGuide%5D-DBM-Profiles|r\", nil, true, nil, \"LEFT\", 0)\nGeneralArea3.frame:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, L.Area_ProfilesSetup, \"https://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BGuide%5D-DBM-Profiles\")\nend)\n"
  },
  {
    "path": "DBM-GUI/modules/options/general/Profile.lua",
    "content": "local L = DBM_GUI_L\n\nlocal DBM = DBM\nlocal type, ipairs, tinsert = type, ipairs, table.insert\nlocal LibStub = _G[\"LibStub\"]\n\nlocal Create, Refresh\nlocal profileDropdown = {}\n\nlocal profilePanel\t\t\t= DBM_GUI.Cat_General:CreateNewPanel(L.Panel_Profile, \"option\")\n\nlocal createProfileArea\t\t= profilePanel:CreateArea(L.Area_CreateProfile)\nlocal createTextbox\t\t\t= createProfileArea:CreateEditBox(L.EnterProfileName, \"\", 175)\ncreateTextbox:SetMaxLetters(17)\ncreateTextbox:SetPoint(\"TOPLEFT\", 30, -25)\ncreateTextbox:SetScript(\"OnEnterPressed\", function()\n\tCreate()\nend)\n\nlocal createButton\t\t\t= createProfileArea:CreateButton(L.CreateProfile)\ncreateButton:SetPoint(\"LEFT\", createTextbox, \"RIGHT\", 10, 0)\ncreateButton:SetScript(\"OnClick\", function()\n\tCreate()\nend)\n\nlocal applyProfileArea\t\t= profilePanel:CreateArea(L.Area_ApplyProfile)\nlocal applyProfile\t\t\t= applyProfileArea:CreateDropdown(L.SelectProfileToApply, profileDropdown, nil, nil, function(value)\n\tDBM_UsedProfile = value\n\tDBM:ApplyProfile(value)\n\tRefresh()\nend)\napplyProfile:SetPoint(\"TOPLEFT\", 0, -20)\napplyProfile:SetScript(\"OnShow\", function()\n\tapplyProfile:SetSelectedValue(DBM_UsedProfile)\nend)\n\nlocal copyProfileArea\t\t= profilePanel:CreateArea(L.Area_CopyProfile)\nlocal copyProfile\t\t\t= copyProfileArea:CreateDropdown(L.SelectProfileToCopy, profileDropdown, nil, nil, function(value)\n\tDBM:CopyProfile(value)\n\tDBM:Schedule(0.05, Refresh)\nend)\ncopyProfile:SetPoint(\"TOPLEFT\", 0, -20)\ncopyProfile:SetScript(\"OnShow\", function()\n\tcopyProfile.value = nil\n\tcopyProfile.text = nil\n\t_G[copyProfile:GetName() .. \"Text\"]:SetText(\"\")\nend)\n\nlocal deleteProfileArea\t\t= profilePanel:CreateArea(L.Area_DeleteProfile)\nlocal deleteProfile\t\t\t= deleteProfileArea:CreateDropdown(L.SelectProfileToDelete, profileDropdown, nil, nil, function(value)\n\tDBM:DeleteProfile(value)\n\tDBM:Schedule(0.05, Refresh)\nend)\ndeleteProfile:SetPoint(\"TOPLEFT\", 0, -20)\ndeleteProfile:SetScript(\"OnShow\", function()\n\tdeleteProfile.value = nil\n\tdeleteProfile.text = nil\n\t_G[deleteProfile:GetName() .. \"Text\"]:SetText(\"\")\nend)\n\nlocal dualProfileArea\t\t= profilePanel:CreateArea(L.Area_DualProfile)\nlocal dualProfile\t\t\t= dualProfileArea:CreateCheckButton(L.DualProfile, true)\ndualProfile:SetScript(\"OnClick\", function()\n\tDBM_UseDualProfile = not DBM_UseDualProfile\n\tDBM:SpecChanged(true)\nend)\ndualProfile:SetChecked(DBM_UseDualProfile)\ndualProfileArea:CreateCheckButton(L.PerCharacterSettings, true, nil, \"PerCharacterSettings\")\n\nlocal function actuallyImport(importTable)\n\tDBM.Options = importTable.DBM -- Cached options\n\tDBM_AllSavedOptions[_G[\"DBM_UsedProfile\"]] = importTable.DBM\n\tDBT_AllPersistentOptions[_G[\"DBM_UsedProfile\"]] = importTable.DBT\n\tDBM_MinimapIcon = importTable.minimap\n\tif importTable.minimap.hide then\n\t\tLibStub(\"LibDBIcon-1.0\"):Hide(\"DBM\")\n\telse\n\t\tLibStub(\"LibDBIcon-1.0\"):Show(\"DBM\")\n\tend\n\tDBT:SetOption(\"Skin\", DBT.Options.Skin) -- Forces a hard update on bars.\n\tDBM:AddMsg(\"Profile imported.\")\nend\n\nlocal importExportProfilesArea = profilePanel:CreateArea(L.Area_ImportExportProfile)\nimportExportProfilesArea:CreateText(L.ImportExportInfo, nil, true, nil, nil, 0)\nlocal exportProfile = importExportProfilesArea:CreateButton(L.ButtonExportProfile, 120, 20, function()\n\tDBM_GUI:CreateExportProfile({\n\t\tDBM\t\t= DBM.Options,\n\t\tDBT\t\t= DBT_AllPersistentOptions[_G[\"DBM_UsedProfile\"]],\n\t\tminimap\t= DBM_MinimapIcon\n\t})\nend)\nexportProfile:SetPoint(\"TOPLEFT\", 12, -20)\nlocal localeTable = {\n\tRaidWarningSound\t\t= \"RaidWarnSound\",\n\tSpecialWarningSound\t\t= \"SpecialWarnSoundOption\",\n\tSpecialWarningSound2\t= \"SpecialWarnSoundOption\",\n\tSpecialWarningSound3\t= \"SpecialWarnSoundOption\",\n\tSpecialWarningSound4\t= \"SpecialWarnSoundOption\",\n\tSpecialWarningSound5\t= \"SpecialWarnSoundOption\",\n\tEventSoundVictory2\t\t= \"EventVictorySound\",\n\tEventSoundWipe\t\t\t= \"EventWipeSound\",\n\tEventSoundEngage2\t\t= \"EventEngageSound\",\n\tEventSoundMusic\t\t\t= \"EventEngageMusic\",\n\tEventSoundDungeonBGM\t= \"EventDungeonMusic\"\n}\nlocal importProfile = importExportProfilesArea:CreateButton(L.ButtonImportProfile, 120, 20, function()\n\tDBM_GUI:CreateImportProfile(function(importTable)\n\t\tlocal errors = {}\n\t\t-- Check if voice pack missing\n\t\tlocal activeVP = importTable.DBM.ChosenVoicePack2\n\t\tif activeVP ~= \"None\" then\n\t\t\tif not DBM.VoiceVersions[activeVP] or (DBM.VoiceVersions[activeVP] and DBM.VoiceVersions[activeVP] == 0) then\n\t\t\t\tif activeVP ~= \"VEM\" then\n\t\t\t\t\tDBM:AddMsg(L.ImportVoiceMissing:format(activeVP))\n\t\t\t\t\ttinsert(errors, \"ChosenVoicePack2\")\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\t-- Check if sound packs are missing\n\t\tfor _, soundSetting in ipairs({\n\t\t\t\"RaidWarningSound\", \"SpecialWarningSound\", \"SpecialWarningSound2\", \"SpecialWarningSound3\", \"SpecialWarningSound4\", \"SpecialWarningSound5\", \"EventSoundVictory2\",\n\t\t\t\"EventSoundWipe\", \"EventSoundEngage2\", \"EventSoundMusic\", \"EventSoundDungeonBGM\", \"RangeFrameSound1\", \"RangeFrameSound2\"\n\t\t}) do\n\t\t\tlocal activeSound = importTable.DBM[soundSetting]\n\t\t\tif type(activeSound) == \"string\" and activeSound:lower() ~= \"none\" and not DBM:ValidateSound(activeSound, true, true) then\n\t\t\t\tDBM:AddMsg(L.ImportErrorOn:format(L[localeTable[soundSetting]] or soundSetting))\n\t\t\t\ttinsert(errors, soundSetting)\n\t\t\tend\n\t\tend\n\t\t-- Create popup confirming if they wish to continue (and therefor resetting to default)\n\t\tif #errors > 0 then\n\t\t\tlocal popup = StaticPopup_Show(\"IMPORTPROFILE_ERROR\")\n\t\t\tif popup then\n\t\t\t\tpopup.importFunc = function()\n\t\t\t\t\tfor _, soundSetting in ipairs(errors) do\n\t\t\t\t\t\timportTable.DBM[soundSetting] = DBM.DefaultOptions[soundSetting]\n\t\t\t\t\tend\n\t\t\t\t\tactuallyImport(importTable)\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\tactuallyImport(importTable)\n\t\tend\n\tend)\nend)\nimportProfile.myheight = 0\nimportProfile:SetPoint(\"LEFT\", exportProfile, \"RIGHT\", 2, 0)\n\nfunction Create()\n\tif createTextbox:GetText() then\n\t\tlocal text = createTextbox:GetText()\n\t\ttext = text:gsub(\" \", \"\")\n\t\tif text ~= \"\" then\n\t\t\tDBM:CreateProfile(createTextbox:GetText())\n\t\t\tcreateTextbox:SetText(\"\")\n\t\t\tcreateTextbox:ClearFocus()\n\t\t\tRefresh()\n\t\tend\n\tend\nend\n\nfunction Refresh()\n\ttable.wipe(profileDropdown)\n\tfor name, _ in pairs(DBM_AllSavedOptions) do\n\t\ttable.insert(profileDropdown, {\n\t\t\ttext\t= name,\n\t\t\tvalue\t= name\n\t\t})\n\tend\n\tapplyProfile:GetScript(\"OnShow\")()\n\tcopyProfile:GetScript(\"OnShow\")()\n\tdeleteProfile:GetScript(\"OnShow\")()\nend\nRefresh()\n"
  },
  {
    "path": "DBM-GUI/modules/options/timers/Appearance.lua",
    "content": "local L = DBM_GUI_L\nlocal DBT = DBT\n\nlocal BarSetupPanel = DBM_GUI.Cat_Timers:CreateNewPanel(L.Panel_Appearance, \"option\")\n\nlocal BarSetup = BarSetupPanel:CreateArea(L.AreaTitle_BarSetup)\nlocal movemebutton = BarSetup:CreateButton(L.MoveMe, 100, 16)\nmovemebutton:SetPoint(\"TOPRIGHT\", BarSetup.frame, \"TOPRIGHT\", -2, -4)\nmovemebutton:SetNormalFontObject(GameFontNormalSmall)\nmovemebutton:SetHighlightFontObject(GameFontNormalSmall)\nmovemebutton:SetScript(\"OnClick\", function()\n\tDBT:ShowMovableBar()\nend)\n\nlocal testmebutton = BarSetup:CreateButton(L.Button_TestBars, 100, 16)\ntestmebutton:SetPoint(\"BOTTOMRIGHT\", BarSetup.frame, \"BOTTOMRIGHT\", -2, 4)\ntestmebutton:SetNormalFontObject(GameFontNormalSmall)\ntestmebutton:SetHighlightFontObject(GameFontNormalSmall)\ntestmebutton:SetScript(\"OnClick\", function()\n\tDBM:DemoMode()\nend)\n\nlocal color1 = BarSetup:CreateColorSelect(64)\nlocal color2 = BarSetup:CreateColorSelect(64)\ncolor1:SetPoint(\"TOPLEFT\", BarSetup.frame, \"TOPLEFT\", 30, -80)\ncolor2:SetPoint(\"TOPLEFT\", color1, \"TOPRIGHT\", 20, 0)\ncolor1.myheight = 84\ncolor2.myheight = 0\n\nlocal color1reset = BarSetup:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\nlocal color2reset = BarSetup:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\ncolor1reset:SetPoint(\"TOP\", color1, \"BOTTOM\", 5, -10)\ncolor2reset:SetPoint(\"TOP\", color2, \"BOTTOM\", 5, -10)\ncolor1reset:SetScript(\"OnClick\", function()\n\tcolor1:SetColorRGB(DBT.DefaultOptions.StartColorR, DBT.DefaultOptions.StartColorG, DBT.DefaultOptions.StartColorB)\nend)\ncolor2reset:SetScript(\"OnClick\", function()\n\tcolor2:SetColorRGB(DBT.DefaultOptions.EndColorR, DBT.DefaultOptions.EndColorG, DBT.DefaultOptions.EndColorB)\nend)\n\nlocal color1text = BarSetup:CreateText(L.BarStartColor, 80)\nlocal color2text = BarSetup:CreateText(L.BarEndColor, 80)\ncolor1text:SetPoint(\"BOTTOM\", color1, \"TOP\", 0, 4)\ncolor2text:SetPoint(\"BOTTOM\", color2, \"TOP\", 0, 4)\ncolor1text.myheight = 0\ncolor2text.myheight = 0\ncolor1:SetColorRGB(DBT.Options.StartColorR, DBM.Options.StartColorG, DBM.Options.StartColorB)\ncolor1text:SetTextColor(DBT.Options.StartColorR, DBM.Options.StartColorG, DBM.Options.StartColorB)\ncolor2:SetColorRGB(DBT.Options.EndColorR, DBM.Options.EndColorG, DBM.Options.EndColorB)\ncolor2text:SetTextColor(DBT.Options.EndColorR, DBM.Options.EndColorG, DBM.Options.EndColorB)\ncolor1:SetScript(\"OnColorSelect\", function(self)\n\tDBT:SetOption(\"StartColorR\", select(1, self:GetColorRGB()))\n\tDBT:SetOption(\"StartColorG\", select(2, self:GetColorRGB()))\n\tDBT:SetOption(\"StartColorB\", select(3, self:GetColorRGB()))\n\tcolor1text:SetTextColor(self:GetColorRGB())\nend)\ncolor2:SetScript(\"OnColorSelect\", function(self)\n\tDBT:SetOption(\"EndColorR\", select(1, self:GetColorRGB()))\n\tDBT:SetOption(\"EndColorG\", select(2, self:GetColorRGB()))\n\tDBT:SetOption(\"EndColorB\", select(3, self:GetColorRGB()))\n\tcolor2text:SetTextColor(self:GetColorRGB())\nend)\n\nlocal maindummybar = DBT:CreateDummyBar(nil, nil, L.SMALL)\nmaindummybar.frame:SetParent(BarSetup.frame)\nmaindummybar.frame:SetPoint(\"TOP\", color2text, \"LEFT\", 10, 60)\nmaindummybar.frame:SetScript(\"OnUpdate\", function(_, elapsed)\n\tmaindummybar:Update(elapsed)\nend)\ndo\n\t-- little hook to prevent this bar from changing size/scale\n\tlocal old = maindummybar.ApplyStyle\n\tfunction maindummybar:ApplyStyle(...)\n\t\told(self, ...)\n\t\tself.frame:SetWidth(183)\n\t\tself.frame:SetScale(0.9)\n\t\t_G[self.frame:GetName() .. \"Bar\"]:SetWidth(183)\n\tend\nend\nmaindummybar:ApplyStyle()\n\nlocal maindummybarHuge = DBT:CreateDummyBar(nil, nil, L.LARGE)\nmaindummybarHuge.frame:SetParent(BarSetup.frame)\nmaindummybarHuge.frame:SetPoint(\"TOP\", color2text, \"LEFT\", 10, 35)\nmaindummybarHuge.frame:SetScript(\"OnUpdate\", function(_, elapsed)\n\tmaindummybarHuge:Update(elapsed)\nend)\nmaindummybarHuge.enlarged = true\nmaindummybarHuge.dummyEnlarge = true\ndo\n\t-- Little hook to prevent this bar from changing size/scale\n\tlocal old = maindummybarHuge.ApplyStyle\n\tfunction maindummybarHuge:ApplyStyle(...)\n\t\told(self, ...)\n\t\tself.frame:SetWidth(183)\n\t\tself.frame:SetScale(0.9)\n\t\t_G[self.frame:GetName() .. \"Bar\"]:SetWidth(183)\n\tend\nend\nmaindummybarHuge:ApplyStyle()\n\nlocal Styles = {\n\t{\n\t\ttext\t= L.BarDBM,\n\t\tvalue\t= \"DBM\"\n\t},\n\t{\n\t\ttext\t= L.BarSimple,\n\t\tvalue\t= \"NoAnim\"\n\t}\n}\n\nlocal StyleDropDown = BarSetup:CreateDropdown(L.BarStyle, Styles, \"DBT\", \"BarStyle\", function(value)\n\tDBT:SetOption(\"BarStyle\", value)\nend, 210)\nStyleDropDown:SetPoint(\"TOPLEFT\", BarSetup.frame, \"TOPLEFT\", 210, -25)\nStyleDropDown.myheight = 0\n\nlocal Textures = DBM_GUI:MixinSharedMedia3(\"statusbar\", {\n\t{\n\t\ttext\t= DEFAULT,\n\t\tvalue\t= \"Interface\\\\AddOns\\\\DBM-StatusBarTimers\\\\textures\\\\default.blp\"\n\t},\n\t{\n\t\ttext\t= \"Blizzard\",\n\t\tvalue\t= \"Interface\\\\PaperDollInfoFrame\\\\UI-Character-Skills-Bar\" -- 136570\n\t},\n\t{\n\t\ttext\t= \"Glaze\",\n\t\tvalue\t= \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\glaze.blp\"\n\t},\n\t{\n\t\ttext\t= \"Otravi\",\n\t\tvalue\t= \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\otravi.blp\"\n\t},\n\t{\n\t\ttext\t= \"Smooth\",\n\t\tvalue\t= \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\smooth.blp\"\n\t}\n})\n\nlocal TextureDropDown = BarSetup:CreateDropdown(L.BarTexture, Textures, \"DBT\", \"Texture\", function(value)\n\tDBT:SetOption(\"Texture\", value)\nend)\nTextureDropDown:SetPoint(\"TOPLEFT\", StyleDropDown, \"BOTTOMLEFT\", 0, -10)\nTextureDropDown.myheight = 0\n\nlocal Fonts = DBM_GUI:MixinSharedMedia3(\"font\", {\n\t{\n\t\ttext\t= DEFAULT,\n\t\tvalue\t= \"standardFont\"\n\t},\n\t{\n\t\ttext\t= \"Arial\",\n\t\tvalue\t= \"Fonts\\\\ARIALN.TTF\"\n\t},\n\t{\n\t\ttext\t= \"Skurri\",\n\t\tvalue\t= \"Fonts\\\\SKURRI.TTF\"\n\t},\n\t{\n\t\ttext\t= \"Morpheus\",\n\t\tvalue\t= \"Fonts\\\\MORPHEUS.TTF\"\n\t}\n})\n\nlocal FontDropDown = BarSetup:CreateDropdown(L.FontType, Fonts, \"DBT\", \"Font\", function(value)\n\tDBT:SetOption(\"Font\", value)\nend)\nFontDropDown:SetPoint(\"TOPLEFT\", TextureDropDown, \"BOTTOMLEFT\", 0, -10)\nFontDropDown.myheight = 0\n\nlocal FontFlags = {\n\t{\n\t\ttext\t= L.None,\n\t\tvalue\t= \"None\"\n\t},\n\t{\n\t\ttext\t= L.Outline,\n\t\tvalue\t= \"OUTLINE\",\n\t\tflag\t= true\n\t},\n\t{\n\t\ttext\t= L.ThickOutline,\n\t\tvalue\t= \"THICKOUTLINE\",\n\t\tflag\t= true\n\t},\n\t{\n\t\ttext\t= L.MonochromeOutline,\n\t\tvalue\t= \"MONOCHROME,OUTLINE\",\n\t\tflag\t= true\n\t},\n\t{\n\t\ttext\t= L.MonochromeThickOutline,\n\t\tvalue\t= \"MONOCHROME,THICKOUTLINE\",\n\t\tflag\t= true\n\t}\n}\n\nlocal FontFlagDropDown = BarSetup:CreateDropdown(L.FontStyle, FontFlags, \"DBT\", \"FontFlag\", function(value)\n\tDBT:SetOption(\"FontFlag\", value)\nend)\nFontFlagDropDown:SetPoint(\"TOPLEFT\", FontDropDown, \"BOTTOMLEFT\", 0, -10)\nFontFlagDropDown.myheight = 0\n\nlocal iconleft = BarSetup:CreateCheckButton(L.BarIconLeft, nil, nil, nil, \"IconLeft\")\niconleft:SetPoint(\"TOPLEFT\", FontFlagDropDown, \"BOTTOMLEFT\", 10, 0)\n\nlocal iconright = BarSetup:CreateCheckButton(L.BarIconRight, nil, nil, nil, \"IconRight\")\niconright:SetPoint(\"LEFT\", iconleft, \"LEFT\", 130, 0)\n\nlocal SparkBars = BarSetup:CreateCheckButton(L.BarSpark, false, nil, nil, \"Spark\")\nSparkBars:SetPoint(\"TOPLEFT\", iconleft, \"BOTTOMLEFT\")\n\nlocal FlashBars = BarSetup:CreateCheckButton(L.BarFlash, false, nil, nil, \"FlashBar\")\nFlashBars:SetPoint(\"TOPLEFT\", SparkBars, \"BOTTOMLEFT\")\n\nlocal ColorBars = BarSetup:CreateCheckButton(L.BarColorByType, false, nil, nil, \"ColorByType\")\nColorBars:SetPoint(\"TOPLEFT\", FlashBars, \"BOTTOMLEFT\")\n\nlocal InlineIcons = BarSetup:CreateCheckButton(L.BarInlineIcons, false, nil, nil, \"InlineIcons\")\nInlineIcons:SetPoint(\"LEFT\", ColorBars, \"LEFT\", 130, 0)\n\n-- Functions for bar setup\nlocal function createDBTOnValueChangedHandler(option)\n\treturn function(self)\n\t\tDBT:SetOption(option, self:GetValue())\n\t\tself:SetValue(DBT.Options[option])\n\tend\nend\n\nlocal function resetDBTValueToDefault(slider, option)\n\tDBT:SetOption(option, DBT.DefaultOptions[option])\n\tslider:SetValue(DBT.Options[option])\nend\n\nlocal FontSizeSlider = BarSetup:CreateSlider(L.FontSize, 7, 18, 1)\nFontSizeSlider:SetPoint(\"TOPLEFT\", BarSetup.frame, \"TOPLEFT\", 20, -180)\nFontSizeSlider:SetValue(DBT.Options.FontSize)\nFontSizeSlider:HookScript(\"OnValueChanged\", createDBTOnValueChangedHandler(\"FontSize\"))\n\nlocal DisableBarFade = BarSetup:CreateCheckButton(L.NoBarFade, false, nil, nil, \"NoBarFade\")\nDisableBarFade:SetPoint(\"TOPLEFT\", FontSizeSlider, \"BOTTOMLEFT\", 0, -85)\n\nlocal skins = {}\nfor id, skin in pairs(DBT:GetSkins()) do\n\ttable.insert(skins, {\n\t\ttext\t= skin.name,\n\t\tvalue\t= id\n\t})\nend\nif #skins > 1 then\n\tlocal BarSkin = BarSetup:CreateDropdown(L.BarSkin, skins, \"DBT\", \"Skin\", function(value)\n\t\tDBT:SetSkin(value)\n\tend, 210)\n\tBarSkin:SetPoint(\"TOPLEFT\", DisableBarFade, \"BOTTOMLEFT\", -20, -10)\n\tBarSkin.myheight = 45\nend\n\nlocal Sorts = {\n\t{\n\t\ttext\t= L.None,\n\t\tvalue\t= \"None\"\n\t},\n\t{\n\t\ttext\t= L.Highest,\n\t\tvalue\t= \"Sort\"\n\t},\n\t{\n\t\ttext\t= L.Lowest,\n\t\tvalue\t= \"Invert\"\n\t}\n}\n\nlocal BarSetupVariance = BarSetupPanel:CreateArea(L.AreaTitle_BarSetupVariance)\n\nlocal VarianceEnableCheckbox = BarSetupVariance:CreateCheckButton(L.EnableVarianceBar, true, nil, nil, \"VarianceEnabled\")\n\nlocal VarianceAlphaSlider = BarSetupVariance:CreateSlider(L.VarianceTransparency, 0, 1, 0.1, 150)\nVarianceAlphaSlider:SetPoint(\"TOPLEFT\", VarianceEnableCheckbox, \"BOTTOMLEFT\", 5, -15)\nVarianceAlphaSlider:SetValue(DBT.Options.VarianceAlpha)\nVarianceAlphaSlider:HookScript(\"OnValueChanged\", createDBTOnValueChangedHandler(\"VarianceAlpha\"))\n--VarianceAlphaSlider.myheight = 0\n\nlocal VarianceBehaviors = {\n\t{\n\t\ttext\t= L.ZeroatWindowEnds,\n\t\tvalue\t= \"ZeroAtMaxTimer\"\n\t},\n\t{\n\t\ttext\t= L.ZeroatWindowStartNeg,\n\t\tvalue\t= \"ZeroAtMinTimerAndNeg\",\n\t},\n}\n\nlocal VarianceBehaviourDropDown = BarSetupVariance:CreateDropdown(L.VarianceTimerTextBehavior, VarianceBehaviors, \"DBT\", \"VarianceBehavior\", function(value)\n\tDBT:SetOption(\"VarianceBehavior\", value)\nend)\nVarianceBehaviourDropDown:SetPoint(\"TOPLEFT\", VarianceAlphaSlider, \"BOTTOMLEFT\", -15, -25)\n\nlocal BarSetupSmall = BarSetupPanel:CreateArea(L.AreaTitle_BarSetupSmall)\n\nlocal smalldummybar = DBT:CreateDummyBar(nil, nil, L.SMALL)\nsmalldummybar.frame:SetParent(BarSetupSmall.frame)\nsmalldummybar.frame:SetPoint(\"BOTTOM\", BarSetupSmall.frame, \"TOP\", 0, -35)\nsmalldummybar.frame:SetScript(\"OnUpdate\", function(_, elapsed)\n\tsmalldummybar:Update(elapsed)\nend)\n\nlocal ExpandUpwards = BarSetupSmall:CreateCheckButton(L.ExpandUpwards, false, nil, nil, \"ExpandUpwards\")\nExpandUpwards:SetPoint(\"TOPLEFT\", smalldummybar.frame, \"BOTTOMLEFT\", -50, -15)\n\nlocal FillUpBars = BarSetupSmall:CreateCheckButton(L.FillUpBars, false, nil, nil, \"FillUpBars\")\nFillUpBars:SetPoint(\"TOPLEFT\", smalldummybar.frame, \"BOTTOMLEFT\", 100, -15)\n\nlocal BarWidthSlider = BarSetupSmall:CreateSlider(L.Slider_BarWidth, 100, 400, 1, 310)\nBarWidthSlider:SetPoint(\"TOPLEFT\", BarSetupSmall.frame, \"TOPLEFT\", 20, -90)\nBarWidthSlider:SetValue(DBT.Options.Width)\nBarWidthSlider:HookScript(\"OnValueChanged\", createDBTOnValueChangedHandler(\"Width\"))\n\nlocal BarHeightSlider = BarSetupSmall:CreateSlider(L.Bar_Height, 5, 35, 1, 310)\nBarHeightSlider:SetPoint(\"TOPLEFT\", BarWidthSlider, \"BOTTOMLEFT\", 0, -10)\nBarHeightSlider:SetValue(DBT.Options.Height)\nBarHeightSlider:HookScript(\"OnValueChanged\", createDBTOnValueChangedHandler(\"Height\"))\n\nlocal BarScaleSlider = BarSetupSmall:CreateSlider(L.Slider_BarScale, 0.75, 2, 0.05, 310)\nBarScaleSlider:SetPoint(\"TOPLEFT\", BarHeightSlider, \"BOTTOMLEFT\", 0, -10)\nBarScaleSlider:SetValue(DBT.Options.Scale)\nBarScaleSlider:HookScript(\"OnValueChanged\", createDBTOnValueChangedHandler(\"Scale\"))\n\nlocal saturateSlider = BarSetup:CreateSlider(L.BarSaturation, 0, 1, 0.05, 455)\nsaturateSlider:SetPoint(\"TOPLEFT\", BarScaleSlider, \"BOTTOMLEFT\", 0, -20)\nsaturateSlider:SetValue(DBT.Options.DesaturateValue)\nsaturateSlider:HookScript(\"OnValueChanged\", createDBTOnValueChangedHandler(\"DesaturateValue\"))\nsaturateSlider.myheight = 55\n\nlocal SortDropDown = BarSetupSmall:CreateDropdown(L.BarSort, Sorts, \"DBT\", \"Sort\", function(value)\n\tDBT:SetOption(\"Sort\", value)\nend)\nSortDropDown:SetPoint(\"TOPLEFT\", saturateSlider, \"BOTTOMLEFT\", -20, -25)\nSortDropDown.myheight = 70\n\nlocal BarOffsetXSlider = BarSetupSmall:CreateSlider(L.Slider_BarOffSetX, -50, 50, 1, 120)\nBarOffsetXSlider:SetPoint(\"TOPLEFT\", BarSetupSmall.frame, \"TOPLEFT\", 350, -90)\nBarOffsetXSlider:SetValue(DBT.Options.BarXOffset)\nBarOffsetXSlider:HookScript(\"OnValueChanged\", createDBTOnValueChangedHandler(\"BarXOffset\"))\nBarOffsetXSlider.myheight = 0\n\nlocal BarOffsetYSlider = BarSetupSmall:CreateSlider(L.Slider_BarOffSetY, -5, 35, 1, 120)\nBarOffsetYSlider:SetPoint(\"TOPLEFT\", BarOffsetXSlider, \"BOTTOMLEFT\", 0, -10)\nBarOffsetYSlider:SetValue(DBT.Options.BarYOffset)\nBarOffsetYSlider:HookScript(\"OnValueChanged\", createDBTOnValueChangedHandler(\"BarYOffset\"))\nBarOffsetYSlider.myheight = 0\n\nlocal AlphaSlider = BarSetupSmall:CreateSlider(L.Bar_Alpha, 0, 1, 0.1, 120)\nAlphaSlider:SetPoint(\"TOPLEFT\", BarOffsetYSlider, \"BOTTOMLEFT\", 0, -10)\nAlphaSlider:SetValue(DBT.Options.Alpha)\nAlphaSlider:HookScript(\"OnValueChanged\", createDBTOnValueChangedHandler(\"Alpha\"))\nAlphaSlider.myheight = 0\n\nlocal barResetbutton = BarSetupSmall:CreateButton(L.SpecWarn_ResetMe, 120, 16)\nbarResetbutton:SetPoint(\"BOTTOMRIGHT\", BarSetupSmall.frame, \"BOTTOMRIGHT\", -2, 4)\nbarResetbutton:SetNormalFontObject(GameFontNormalSmall)\nbarResetbutton:SetHighlightFontObject(GameFontNormalSmall)\nbarResetbutton:SetScript(\"OnClick\", function()\n\tresetDBTValueToDefault(BarWidthSlider, \"Width\")\n\tresetDBTValueToDefault(BarHeightSlider, \"Height\")\n\tresetDBTValueToDefault(BarScaleSlider, \"Scale\")\n\tresetDBTValueToDefault(BarOffsetXSlider, \"BarXOffset\")\n\tresetDBTValueToDefault(BarOffsetYSlider, \"BarYOffset\")\n\tresetDBTValueToDefault(AlphaSlider, \"Alpha\")\nend)\n\nlocal BarSetupHuge = BarSetupPanel:CreateArea(L.AreaTitle_BarSetupHuge)\n\nBarSetupHuge:CreateCheckButton(L.EnableHugeBar, true, nil, nil, \"HugeBarsEnabled\")\n\nlocal hugedummybar = DBT:CreateDummyBar(nil, nil, L.LARGE)\nhugedummybar.frame:SetParent(BarSetupHuge.frame)\nhugedummybar.frame:SetPoint(\"BOTTOM\", BarSetupHuge.frame, \"TOP\", 0, -50)\nhugedummybar.frame:SetScript(\"OnUpdate\", function(_, elapsed)\n\thugedummybar:Update(elapsed)\nend)\nhugedummybar.enlarged = true\nhugedummybar.dummyEnlarge = true\nhugedummybar:ApplyStyle()\n\nlocal ExpandUpwardsLarge = BarSetupHuge:CreateCheckButton(L.ExpandUpwards, false, nil, nil, \"ExpandUpwardsLarge\")\nExpandUpwardsLarge:SetPoint(\"TOPLEFT\", hugedummybar.frame, \"BOTTOMLEFT\", -50, -15)\n\nlocal FillUpBarsLarge = BarSetupHuge:CreateCheckButton(L.FillUpBars, false, nil, nil, \"FillUpLargeBars\")\nFillUpBarsLarge:SetPoint(\"TOPLEFT\", hugedummybar.frame, \"BOTTOMLEFT\", 100, -15)\n\nlocal HugeBarWidthSlider = BarSetupHuge:CreateSlider(L.Slider_BarWidth, 100, 400, 1, 310)\nHugeBarWidthSlider:SetPoint(\"TOPLEFT\", BarSetupHuge.frame, \"TOPLEFT\", 20, -105)\nHugeBarWidthSlider:SetValue(DBT.Options.HugeWidth)\nHugeBarWidthSlider:HookScript(\"OnValueChanged\", createDBTOnValueChangedHandler(\"HugeWidth\"))\n\nlocal HugeBarHeightSlider = BarSetupHuge:CreateSlider(L.Bar_Height, 5, 35, 1, 310)\nHugeBarHeightSlider:SetPoint(\"TOPLEFT\", HugeBarWidthSlider, \"BOTTOMLEFT\", 0, -10)\nHugeBarHeightSlider:SetValue(DBT.Options.HugeHeight)\nHugeBarHeightSlider:HookScript(\"OnValueChanged\", createDBTOnValueChangedHandler(\"HugeHeight\"))\n\nlocal HugeBarScaleSlider = BarSetupHuge:CreateSlider(L.Slider_BarScale, 0.75, 2, 0.05, 310)\nHugeBarScaleSlider:SetPoint(\"TOPLEFT\", HugeBarHeightSlider, \"BOTTOMLEFT\", 0, -10)\nHugeBarScaleSlider:SetValue(DBT.Options.HugeScale)\nHugeBarScaleSlider:HookScript(\"OnValueChanged\", createDBTOnValueChangedHandler(\"HugeScale\"))\n\nlocal SortDropDownLarge = BarSetupHuge:CreateDropdown(L.BarSort, Sorts, \"DBT\", \"HugeSort\", function(value)\n\tDBT:SetOption(\"HugeSort\", value)\nend)\nSortDropDownLarge:SetPoint(\"TOPLEFT\", HugeBarScaleSlider, \"BOTTOMLEFT\", -20, -25)\n\nlocal HugeBarOffsetXSlider = BarSetupHuge:CreateSlider(L.Slider_BarOffSetX, -50, 50, 1, 120)\nHugeBarOffsetXSlider:SetPoint(\"TOPLEFT\", BarSetupHuge.frame, \"TOPLEFT\", 350, -105)\nHugeBarOffsetXSlider:SetValue(DBT.Options.HugeBarXOffset)\nHugeBarOffsetXSlider:HookScript(\"OnValueChanged\", createDBTOnValueChangedHandler(\"HugeBarXOffset\"))\nHugeBarOffsetXSlider.myheight = 0\n\nlocal HugeBarOffsetYSlider = BarSetupHuge:CreateSlider(L.Slider_BarOffSetY, -5, 35, 1, 120)\nHugeBarOffsetYSlider:SetPoint(\"TOPLEFT\", HugeBarOffsetXSlider, \"BOTTOMLEFT\", 0, -10)\nHugeBarOffsetYSlider:SetValue(DBT.Options.HugeBarYOffset)\nHugeBarOffsetYSlider:HookScript(\"OnValueChanged\", createDBTOnValueChangedHandler(\"HugeBarYOffset\"))\nHugeBarOffsetYSlider.myheight = 0\n\nlocal HugeAlphaSlider = BarSetupHuge:CreateSlider(L.Bar_Alpha, 0.1, 1, 0.1, 120)\nHugeAlphaSlider:SetPoint(\"TOPLEFT\", HugeBarOffsetYSlider, \"BOTTOMLEFT\", 0, -10)\nHugeAlphaSlider:SetValue(DBT.Options.HugeAlpha)\nHugeAlphaSlider:HookScript(\"OnValueChanged\", createDBTOnValueChangedHandler(\"HugeAlpha\"))\nHugeAlphaSlider.myheight = 0\n\nlocal hugeBarResetbutton = BarSetupHuge:CreateButton(L.SpecWarn_ResetMe, 120, 16)\nhugeBarResetbutton:SetPoint(\"BOTTOMRIGHT\", BarSetupHuge.frame, \"BOTTOMRIGHT\", -2, 4)\nhugeBarResetbutton:SetNormalFontObject(GameFontNormalSmall)\nhugeBarResetbutton:SetHighlightFontObject(GameFontNormalSmall)\nhugeBarResetbutton:SetScript(\"OnClick\", function()\n\tresetDBTValueToDefault(HugeBarWidthSlider, \"HugeWidth\")\n\tresetDBTValueToDefault(HugeBarHeightSlider, \"HugeHeight\")\n\tresetDBTValueToDefault(HugeBarScaleSlider, \"HugeScale\")\n\tresetDBTValueToDefault(HugeBarOffsetXSlider, \"HugeBarXOffset\")\n\tresetDBTValueToDefault(HugeBarOffsetYSlider, \"HugeBarYOffset\")\n\tresetDBTValueToDefault(HugeAlphaSlider, \"HugeAlpha\")\nend)\n"
  },
  {
    "path": "DBM-GUI/modules/options/timers/Behavior.lua",
    "content": "local L = DBM_GUI_L\n\nlocal BarSetupPanel = DBM_GUI.Cat_Timers:CreateNewPanel(L.Panel_Behavior, \"option\")\n\nlocal BarBehaviors = BarSetupPanel:CreateArea(L.AreaTitle_Behavior)\nlocal movemebutton = BarBehaviors:CreateButton(L.MoveMe, 100, 16)\nmovemebutton:SetPoint(\"TOPRIGHT\", BarBehaviors.frame, \"TOPRIGHT\", -2, -4)\nmovemebutton:SetNormalFontObject(GameFontNormalSmall)\nmovemebutton:SetHighlightFontObject(GameFontNormalSmall)\nmovemebutton:SetScript(\"OnClick\", function()\n\tDBT:ShowMovableBar()\nend)\n\nlocal testmebutton = BarBehaviors:CreateButton(L.Button_TestBars, 100, 16)\ntestmebutton:SetPoint(\"BOTTOMRIGHT\", BarBehaviors.frame, \"BOTTOMRIGHT\", -2, 4)\ntestmebutton:SetNormalFontObject(GameFontNormalSmall)\ntestmebutton:SetHighlightFontObject(GameFontNormalSmall)\ntestmebutton:SetScript(\"OnClick\", function()\n\tDBM:DemoMode()\nend)\n\n-- Functions for bar setup\nlocal function createDBTOnValueChangedHandler(option)\n\treturn function(self)\n\t\tDBT:SetOption(option, self:GetValue())\n\t\tself:SetValue(DBT.Options[option])\n\tend\nend\n\nlocal DecimalSlider = BarBehaviors:CreateSlider(L.Bar_Decimal, 1, 60, 1)\nDecimalSlider:SetPoint(\"TOPLEFT\", BarBehaviors.frame, \"TOPLEFT\", 20, -25)\nDecimalSlider:SetValue(DBT.Options.TDecimal)\nDecimalSlider:HookScript(\"OnValueChanged\", createDBTOnValueChangedHandler(\"TDecimal\"))\n\nlocal EnlargeTimeSlider = BarBehaviors:CreateSlider(L.Bar_EnlargeTime, 6, 30, 1)\nEnlargeTimeSlider:SetPoint(\"TOPLEFT\", BarBehaviors.frame, \"TOPLEFT\", 230, -25)\nEnlargeTimeSlider:SetValue(DBT.Options.EnlargeBarTime)\nEnlargeTimeSlider:HookScript(\"OnValueChanged\", createDBTOnValueChangedHandler(\"EnlargeBarTime\"))\nEnlargeTimeSlider.myheight = 0\n\nlocal ClickThrough = BarBehaviors:CreateCheckButton(L.ClickThrough, true, nil, nil, \"ClickThrough\")\nClickThrough:SetPoint(\"TOPLEFT\", DecimalSlider, \"BOTTOMLEFT\", 0, -15)\nClickThrough.myheight = 25\n\nBarBehaviors:CreateCheckButton(L.DisableRightClickBar, true, nil, nil, \"DisableRightClick\")\nBarBehaviors:CreateCheckButton(L.ShortTimerText, true, nil, nil, \"ShortTimerText\")\nBarBehaviors:CreateCheckButton(L.StripTimerText, true, nil, nil, \"StripCDText\")\nBarBehaviors:CreateCheckButton(L.KeepBar, true, nil, nil, \"KeepBars\")\nBarBehaviors:CreateCheckButton(L.FadeBar, true, nil, nil, \"FadeBars\")\n"
  },
  {
    "path": "DBM-GUI/modules/options/timers/ColorbyType.lua",
    "content": "local L = DBM_GUI_L\nlocal DBT = DBT\n\nlocal BarSetupPanel = DBM_GUI.Cat_Timers:CreateNewPanel(L.Panel_ColorByType, \"option\")\n\nlocal BarColors = BarSetupPanel:CreateArea(L.AreaTitle_BarColors)\nlocal movemebutton = BarColors:CreateButton(L.MoveMe, 100, 16)\nmovemebutton:SetPoint(\"TOPRIGHT\", BarColors.frame, \"TOPRIGHT\", -2, -4)\nmovemebutton:SetNormalFontObject(GameFontNormalSmall)\nmovemebutton:SetHighlightFontObject(GameFontNormalSmall)\nmovemebutton:SetScript(\"OnClick\", function()\n\tDBT:ShowMovableBar()\nend)\n\nlocal testmebutton = BarColors:CreateButton(L.Button_TestBars, 100, 16)\ntestmebutton:SetPoint(\"BOTTOMRIGHT\", BarColors.frame, \"BOTTOMRIGHT\", -2, 4)\ntestmebutton:SetNormalFontObject(GameFontNormalSmall)\ntestmebutton:SetHighlightFontObject(GameFontNormalSmall)\ntestmebutton:SetScript(\"OnClick\", function()\n\tDBM:DemoMode()\nend)\n\n--Color Type 1 (Adds)\nlocal color1Type1 = BarColors:CreateColorSelect(64)\nlocal color2Type1 = BarColors:CreateColorSelect(64)\ncolor1Type1:SetPoint(\"TOPLEFT\", BarColors.frame, \"TOPLEFT\", 30, -65)\ncolor2Type1:SetPoint(\"TOPLEFT\", color1Type1, \"TOPRIGHT\", 20, 0)\ncolor1Type1.myheight = 0\ncolor2Type1.myheight = 0\n\nlocal color1Type1reset = BarColors:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\nlocal color2Type1reset = BarColors:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\ncolor1Type1reset:SetPoint(\"TOP\", color1Type1, \"BOTTOM\", 5, -10)\ncolor2Type1reset:SetPoint(\"TOP\", color2Type1, \"BOTTOM\", 5, -10)\ncolor1Type1reset:SetScript(\"OnClick\", function()\n\tcolor1Type1:SetColorRGB(DBT.DefaultOptions.StartColorAR, DBT.DefaultOptions.StartColorAG, DBT.DefaultOptions.StartColorAB)\nend)\ncolor2Type1reset:SetScript(\"OnClick\", function()\n\tcolor2Type1:SetColorRGB(DBT.DefaultOptions.EndColorAR, DBT.DefaultOptions.EndColorAG, DBT.DefaultOptions.EndColorAB)\nend)\n\nlocal color1Type1text = BarColors:CreateText(L.BarStartColorAdd, 80, nil, nil, \"CENTER\")\nlocal color2Type1text = BarColors:CreateText(L.BarEndColorAdd, 80, nil, nil, \"CENTER\", 10)\ncolor1Type1text:SetPoint(\"BOTTOM\", color1Type1, \"TOP\", 0, 4)\ncolor2Type1text:SetPoint(\"BOTTOM\", color2Type1, \"TOP\", 0, 4)\ncolor1Type1text.myheight = 0\ncolor2Type1text.myheight = 0\ncolor1Type1:SetColorRGB(DBT.Options.StartColorAR, DBT.Options.StartColorAG, DBT.Options.StartColorAB)\ncolor1Type1text:SetTextColor(DBT.Options.StartColorAR, DBT.Options.StartColorAG, DBT.Options.StartColorAB)\ncolor2Type1:SetColorRGB(DBT.Options.EndColorAR, DBT.Options.EndColorAG, DBT.Options.EndColorAB)\ncolor2Type1text:SetTextColor(DBT.Options.EndColorAR, DBT.Options.EndColorAG, DBT.Options.EndColorAB)\ncolor1Type1:SetScript(\"OnColorSelect\", function(self)\n\tDBT:SetOption(\"StartColorAR\", select(1, self:GetColorRGB()))\n\tDBT:SetOption(\"StartColorAG\", select(2, self:GetColorRGB()))\n\tDBT:SetOption(\"StartColorAB\", select(3, self:GetColorRGB()))\n\tcolor1Type1text:SetTextColor(self:GetColorRGB())\nend)\ncolor2Type1:SetScript(\"OnColorSelect\", function(self)\n\tDBT:SetOption(\"EndColorAR\", select(1, self:GetColorRGB()))\n\tDBT:SetOption(\"EndColorAG\", select(2, self:GetColorRGB()))\n\tDBT:SetOption(\"EndColorAB\", select(3, self:GetColorRGB()))\n\tcolor2Type1text:SetTextColor(self:GetColorRGB())\nend)\n\nlocal dummybarcolor1 = DBT:CreateDummyBar(1, nil, L.CBTAdd)\ndummybarcolor1.frame:SetParent(BarColors.frame)\ndummybarcolor1.frame:SetPoint(\"TOP\", color2Type1text, \"LEFT\", 10, 40)\ndummybarcolor1.frame:SetScript(\"OnUpdate\", function(_, elapsed)\n\tdummybarcolor1:Update(elapsed)\nend)\ndo\n\t-- little hook to prevent this bar from changing size/scale\n\tlocal old = dummybarcolor1.ApplyStyle\n\tfunction dummybarcolor1:ApplyStyle(...)\n\t\told(self, ...)\n\t\tself.frame:SetWidth(183)\n\t\tself.frame:SetScale(0.9)\n\t\t_G[self.frame:GetName() .. \"Bar\"]:SetWidth(183)\n\tend\nend\n\n--Color Type 2 (AOE)\nlocal color1Type2 = BarColors:CreateColorSelect(64)\nlocal color2Type2 = BarColors:CreateColorSelect(64)\ncolor1Type2:SetPoint(\"TOPLEFT\", BarColors.frame, \"TOPLEFT\", 250, -65)\ncolor2Type2:SetPoint(\"TOPLEFT\", color1Type2, \"TOPRIGHT\", 20, 0)\ncolor1Type2.myheight = 0\ncolor2Type2.myheight = 0\n\nlocal color1Type2reset = BarColors:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\nlocal color2Type2reset = BarColors:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\ncolor1Type2reset:SetPoint(\"TOP\", color1Type2, \"BOTTOM\", 5, -10)\ncolor2Type2reset:SetPoint(\"TOP\", color2Type2, \"BOTTOM\", 5, -10)\ncolor1Type2reset:SetScript(\"OnClick\", function()\n\tcolor1Type2:SetColorRGB(DBT.DefaultOptions.StartColorAER, DBT.DefaultOptions.StartColorAEG, DBT.DefaultOptions.StartColorAEB)\nend)\ncolor2Type2reset:SetScript(\"OnClick\", function()\n\tcolor2Type2:SetColorRGB(DBT.DefaultOptions.EndColorAER, DBT.DefaultOptions.EndColorAEG, DBT.DefaultOptions.EndColorAEB)\nend)\n\nlocal color1Type2text = BarColors:CreateText(L.BarStartColorAOE, 80, nil, nil, \"CENTER\")\nlocal color2Type2text = BarColors:CreateText(L.BarEndColorAOE, 80, nil, nil, \"CENTER\", 0)\ncolor1Type2text:SetPoint(\"BOTTOM\", color1Type2, \"TOP\", 0, 4)\ncolor2Type2text:SetPoint(\"BOTTOM\", color2Type2, \"TOP\", 0, 4)\ncolor1Type2text.myheight = 0\ncolor2Type2text.myheight = 0\ncolor1Type2:SetColorRGB(DBT.Options.StartColorAER, DBT.Options.StartColorAEG, DBT.Options.StartColorAEB)\ncolor1Type2text:SetTextColor(DBT.Options.StartColorAER, DBT.Options.StartColorAEG, DBT.Options.StartColorAEB)\ncolor2Type2:SetColorRGB(DBT.Options.EndColorAER, DBT.Options.EndColorAEG, DBT.Options.EndColorAEB)\ncolor2Type2text:SetTextColor(DBT.Options.EndColorAER, DBT.Options.EndColorAEG, DBT.Options.EndColorAEB)\ncolor1Type2:SetScript(\"OnColorSelect\", function(self)\n\tDBT:SetOption(\"StartColorAER\", select(1, self:GetColorRGB()))\n\tDBT:SetOption(\"StartColorAEG\", select(2, self:GetColorRGB()))\n\tDBT:SetOption(\"StartColorAEB\", select(3, self:GetColorRGB()))\n\tcolor1Type2text:SetTextColor(self:GetColorRGB())\nend)\ncolor2Type2:SetScript(\"OnColorSelect\", function(self)\n\tDBT:SetOption(\"EndColorAER\", select(1, self:GetColorRGB()))\n\tDBT:SetOption(\"EndColorAEG\", select(2, self:GetColorRGB()))\n\tDBT:SetOption(\"EndColorAEB\", select(3, self:GetColorRGB()))\n\tcolor2Type2text:SetTextColor(self:GetColorRGB())\nend)\n\nlocal dummybarcolor2 = DBT:CreateDummyBar(2, nil, L.CBTAOE)\ndummybarcolor2.frame:SetParent(BarColors.frame)\ndummybarcolor2.frame:SetPoint(\"TOP\", color2Type2text, \"LEFT\", 10, 40)\ndummybarcolor2.frame:SetScript(\"OnUpdate\", function(_, elapsed)\n\tdummybarcolor2:Update(elapsed)\nend)\ndo\n\t-- little hook to prevent this bar from changing size/scale\n\tlocal old = dummybarcolor2.ApplyStyle\n\tfunction dummybarcolor2:ApplyStyle(...)\n\t\told(self, ...)\n\t\tself.frame:SetWidth(183)\n\t\tself.frame:SetScale(0.9)\n\t\t_G[self.frame:GetName() .. \"Bar\"]:SetWidth(183)\n\tend\nend\n\n--Color Type 3 (Debuff)\nlocal color1Type3 = BarColors:CreateColorSelect(64)\nlocal color2Type3 = BarColors:CreateColorSelect(64)\ncolor1Type3:SetPoint(\"TOPLEFT\", BarColors.frame, \"TOPLEFT\", 30, -220)\ncolor2Type3:SetPoint(\"TOPLEFT\", color1Type3, \"TOPRIGHT\", 20, 0)\ncolor1Type3.myheight = 74\ncolor2Type3.myheight = 0\n\nlocal color1Type3reset = BarColors:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\nlocal color2Type3reset = BarColors:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\ncolor1Type3reset:SetPoint(\"TOP\", color1Type3, \"BOTTOM\", 5, -10)\ncolor2Type3reset:SetPoint(\"TOP\", color2Type3, \"BOTTOM\", 5, -10)\ncolor1Type3reset:SetScript(\"OnClick\", function()\n\tcolor1Type3:SetColorRGB(DBT.DefaultOptions.StartColorDR, DBT.DefaultOptions.StartColorDG, DBT.DefaultOptions.StartColorDB)\nend)\ncolor2Type3reset:SetScript(\"OnClick\", function()\n\tcolor2Type3:SetColorRGB(DBT.DefaultOptions.EndColorDR, DBT.DefaultOptions.EndColorDG, DBT.DefaultOptions.EndColorDB)\nend)\n\nlocal color1Type3text = BarColors:CreateText(L.BarStartColorDebuff, 80, nil, nil, \"CENTER\")\nlocal color2Type3text = BarColors:CreateText(L.BarEndColorDebuff, 80, nil, nil, \"CENTER\", 0)\ncolor1Type3text:SetPoint(\"BOTTOM\", color1Type3, \"TOP\", 0, 4)\ncolor2Type3text:SetPoint(\"BOTTOM\", color2Type3, \"TOP\", 0, 4)\ncolor1Type3text.myheight = 0\ncolor2Type3text.myheight = 0\ncolor1Type3:SetColorRGB(DBT.Options.StartColorDR, DBT.Options.StartColorDG, DBT.Options.StartColorDB)\ncolor1Type3text:SetTextColor(DBT.Options.StartColorDR, DBT.Options.StartColorDG, DBT.Options.StartColorDB)\ncolor2Type3:SetColorRGB(DBT.Options.EndColorDR, DBT.Options.EndColorDG, DBT.Options.EndColorDB)\ncolor2Type3text:SetTextColor(DBT.Options.EndColorDR, DBT.Options.EndColorDG, DBT.Options.EndColorDB)\ncolor1Type3:SetScript(\"OnColorSelect\", function(self)\n\tDBT:SetOption(\"StartColorDR\", select(1, self:GetColorRGB()))\n\tDBT:SetOption(\"StartColorDG\", select(2, self:GetColorRGB()))\n\tDBT:SetOption(\"StartColorDB\", select(3, self:GetColorRGB()))\n\tcolor1Type3text:SetTextColor(self:GetColorRGB())\nend)\ncolor2Type3:SetScript(\"OnColorSelect\", function(self)\n\tDBT:SetOption(\"EndColorDR\", select(1, self:GetColorRGB()))\n\tDBT:SetOption(\"EndColorDG\", select(2, self:GetColorRGB()))\n\tDBT:SetOption(\"EndColorDB\", select(3, self:GetColorRGB()))\n\tcolor2Type3text:SetTextColor(self:GetColorRGB())\nend)\n\nlocal dummybarcolor3 = DBT:CreateDummyBar(3, nil, L.CBTTargeted)\ndummybarcolor3.frame:SetParent(BarColors.frame)\ndummybarcolor3.frame:SetPoint(\"TOP\", color2Type3text, \"LEFT\", 10, 40)\ndummybarcolor3.frame:SetScript(\"OnUpdate\", function(_, elapsed)\n\tdummybarcolor3:Update(elapsed)\nend)\ndo\n\t-- little hook to prevent this bar from changing size/scale\n\tlocal old = dummybarcolor3.ApplyStyle\n\tfunction dummybarcolor3:ApplyStyle(...)\n\t\told(self, ...)\n\t\tself.frame:SetWidth(183)\n\t\tself.frame:SetScale(0.9)\n\t\t_G[self.frame:GetName() .. \"Bar\"]:SetWidth(183)\n\tend\nend\n\n--Color Type 4 (Interrupt)\nlocal color1Type4 = BarColors:CreateColorSelect(64)\nlocal color2Type4 = BarColors:CreateColorSelect(64)\ncolor1Type4:SetPoint(\"TOPLEFT\", BarColors.frame, \"TOPLEFT\", 250, -220)\ncolor2Type4:SetPoint(\"TOPLEFT\", color1Type4, \"TOPRIGHT\", 20, 0)\ncolor1Type4.myheight = 0\ncolor2Type4.myheight = 0\n\nlocal color1Type4reset = BarColors:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\nlocal color2Type4reset = BarColors:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\ncolor1Type4reset:SetPoint(\"TOP\", color1Type4, \"BOTTOM\", 5, -10)\ncolor2Type4reset:SetPoint(\"TOP\", color2Type4, \"BOTTOM\", 5, -10)\ncolor1Type4reset:SetScript(\"OnClick\", function()\n\tcolor1Type4:SetColorRGB(DBT.DefaultOptions.StartColorIR, DBT.DefaultOptions.StartColorIG, DBT.DefaultOptions.StartColorIB)\nend)\ncolor2Type4reset:SetScript(\"OnClick\", function()\n\tcolor2Type4:SetColorRGB(DBT.DefaultOptions.EndColorIR, DBT.DefaultOptions.EndColorIG, DBT.DefaultOptions.EndColorIB)\nend)\n\nlocal color1Type4text = BarColors:CreateText(L.BarStartColorInterrupt, 80, nil, nil, \"CENTER\")\nlocal color2Type4text = BarColors:CreateText(L.BarEndColorInterrupt, 80, nil, nil, \"CENTER\", 0)\ncolor1Type4text:SetPoint(\"BOTTOM\", color1Type4, \"TOP\", 0, 4)\ncolor2Type4text:SetPoint(\"BOTTOM\", color2Type4, \"TOP\", 0, 4)\ncolor1Type4text.myheight = 0\ncolor2Type4text.myheight = 0\ncolor1Type4:SetColorRGB(DBT.Options.StartColorIR, DBT.Options.StartColorIG, DBT.Options.StartColorIB)\ncolor1Type4text:SetTextColor(DBT.Options.StartColorIR, DBT.Options.StartColorIG, DBT.Options.StartColorIB)\ncolor2Type4:SetColorRGB(DBT.Options.EndColorIR, DBT.Options.EndColorIG, DBT.Options.EndColorIB)\ncolor2Type4text:SetTextColor(DBT.Options.EndColorIR, DBT.Options.EndColorIG, DBT.Options.EndColorIB)\ncolor1Type4:SetScript(\"OnColorSelect\", function(self)\n\tDBT:SetOption(\"StartColorIR\", select(1, self:GetColorRGB()))\n\tDBT:SetOption(\"StartColorIG\", select(2, self:GetColorRGB()))\n\tDBT:SetOption(\"StartColorIB\", select(3, self:GetColorRGB()))\n\tcolor1Type4text:SetTextColor(self:GetColorRGB())\nend)\ncolor2Type4:SetScript(\"OnColorSelect\", function(self)\n\tDBT:SetOption(\"EndColorIR\", select(1, self:GetColorRGB()))\n\tDBT:SetOption(\"EndColorIG\", select(2, self:GetColorRGB()))\n\tDBT:SetOption(\"EndColorIB\", select(3, self:GetColorRGB()))\n\tcolor2Type4text:SetTextColor(self:GetColorRGB())\nend)\n\nlocal dummybarcolor4 = DBT:CreateDummyBar(4, nil, L.CBTInterrupt)\ndummybarcolor4.frame:SetParent(BarColors.frame)\ndummybarcolor4.frame:SetPoint(\"TOP\", color2Type4text, \"LEFT\", 10, 40)\ndummybarcolor4.frame:SetScript(\"OnUpdate\", function(_, elapsed)\n\tdummybarcolor4:Update(elapsed)\nend)\ndo\n\t-- little hook to prevent this bar from changing size/scale\n\tlocal old = dummybarcolor4.ApplyStyle\n\tfunction dummybarcolor4:ApplyStyle(...)\n\t\told(self, ...)\n\t\tself.frame:SetWidth(183)\n\t\tself.frame:SetScale(0.9)\n\t\t_G[self.frame:GetName() .. \"Bar\"]:SetWidth(183)\n\tend\nend\n\n--Color Type 5 (Role)\nlocal color1Type5 = BarColors:CreateColorSelect(64)\nlocal color2Type5 = BarColors:CreateColorSelect(64)\ncolor1Type5:SetPoint(\"TOPLEFT\", BarColors.frame, \"TOPLEFT\", 30, -375)\ncolor2Type5:SetPoint(\"TOPLEFT\", color1Type5, \"TOPRIGHT\", 20, 0)\ncolor1Type5.myheight = 0\ncolor2Type5.myheight = 0\n\nlocal color1Type5reset = BarColors:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\nlocal color2Type5reset = BarColors:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\ncolor1Type5reset:SetPoint(\"TOP\", color1Type5, \"BOTTOM\", 5, -10)\ncolor2Type5reset:SetPoint(\"TOP\", color2Type5, \"BOTTOM\", 5, -10)\ncolor1Type5reset:SetScript(\"OnClick\", function()\n\tcolor1Type5:SetColorRGB(DBT.DefaultOptions.StartColorRR, DBT.DefaultOptions.StartColorRG, DBT.DefaultOptions.StartColorRB)\nend)\ncolor2Type5reset:SetScript(\"OnClick\", function()\n\tcolor2Type5:SetColorRGB(DBT.DefaultOptions.EndColorRR, DBT.DefaultOptions.EndColorRG, DBT.DefaultOptions.EndColorRB)\nend)\n\nlocal color1Type5text = BarColors:CreateText(L.BarStartColorRole, 80, nil, nil, \"CENTER\")\nlocal color2Type5text = BarColors:CreateText(L.BarEndColorRole, 80, nil, nil, \"CENTER\", 0)\ncolor1Type5text:SetPoint(\"BOTTOM\", color1Type5, \"TOP\", 0, 4)\ncolor2Type5text:SetPoint(\"BOTTOM\", color2Type5, \"TOP\", 0, 4)\ncolor1Type5text.myheight = 0\ncolor2Type5text.myheight = 0\ncolor1Type5:SetColorRGB(DBT.Options.StartColorRR, DBT.Options.StartColorRG, DBT.Options.StartColorRB)\ncolor1Type5text:SetTextColor(DBT.Options.StartColorRR, DBT.Options.StartColorRG, DBT.Options.StartColorRB)\ncolor2Type5:SetColorRGB(DBT.Options.EndColorRR, DBT.Options.EndColorRG, DBT.Options.EndColorRB)\ncolor2Type5text:SetTextColor(DBT.Options.EndColorRR, DBT.Options.EndColorRG, DBT.Options.EndColorRB)\ncolor1Type5:SetScript(\"OnColorSelect\", function(self)\n\tDBT:SetOption(\"StartColorRR\", select(1, self:GetColorRGB()))\n\tDBT:SetOption(\"StartColorRG\", select(2, self:GetColorRGB()))\n\tDBT:SetOption(\"StartColorRB\", select(3, self:GetColorRGB()))\n\tcolor1Type5text:SetTextColor(self:GetColorRGB())\nend)\ncolor2Type5:SetScript(\"OnColorSelect\", function(self)\n\tDBT:SetOption(\"EndColorRR\", select(1, self:GetColorRGB()))\n\tDBT:SetOption(\"EndColorRG\", select(2, self:GetColorRGB()))\n\tDBT:SetOption(\"EndColorRB\", select(3, self:GetColorRGB()))\n\tcolor2Type5text:SetTextColor(self:GetColorRGB())\nend)\n\nlocal dummybarcolor5 = DBT:CreateDummyBar(5, nil, L.CBTRole)\ndummybarcolor5.frame:SetParent(BarColors.frame)\ndummybarcolor5.frame:SetPoint(\"TOP\", color2Type5text, \"LEFT\", 10, 40)\ndummybarcolor5.frame:SetScript(\"OnUpdate\", function(_, elapsed)\n\tdummybarcolor5:Update(elapsed)\nend)\ndo\n\t-- little hook to prevent this bar from changing size/scale\n\tlocal old = dummybarcolor5.ApplyStyle\n\tfunction dummybarcolor5:ApplyStyle(...)\n\t\told(self, ...)\n\t\tself.frame:SetWidth(183)\n\t\tself.frame:SetScale(0.9)\n\t\t_G[self.frame:GetName() .. \"Bar\"]:SetWidth(183)\n\tend\nend\n\n--Color Type 6 (Phase)\nlocal color1Type6 = BarColors:CreateColorSelect(64)\nlocal color2Type6 = BarColors:CreateColorSelect(64)\ncolor1Type6:SetPoint(\"TOPLEFT\", BarColors.frame, \"TOPLEFT\", 250, -375)\ncolor2Type6:SetPoint(\"TOPLEFT\", color1Type6, \"TOPRIGHT\", 20, 0)\ncolor1Type6.myheight = 0\ncolor2Type6.myheight = 0\n\nlocal color1Type6reset = BarColors:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\nlocal color2Type6reset = BarColors:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\ncolor1Type6reset:SetPoint(\"TOP\", color1Type6, \"BOTTOM\", 5, -10)\ncolor2Type6reset:SetPoint(\"TOP\", color2Type6, \"BOTTOM\", 5, -10)\ncolor1Type6reset:SetScript(\"OnClick\", function()\n\tcolor1Type6:SetColorRGB(DBT.DefaultOptions.StartColorPR, DBT.DefaultOptions.StartColorPG, DBT.DefaultOptions.StartColorPB)\nend)\ncolor2Type6reset:SetScript(\"OnClick\", function()\n\tcolor2Type6:SetColorRGB(DBT.DefaultOptions.EndColorPR, DBT.DefaultOptions.EndColorPG, DBT.DefaultOptions.EndColorPB)\nend)\n\nlocal color1Type6text = BarColors:CreateText(L.BarStartColorPhase, 80, nil, nil, \"CENTER\")\nlocal color2Type6text = BarColors:CreateText(L.BarEndColorPhase, 80, nil, nil, \"CENTER\", 0)\ncolor1Type6text:SetPoint(\"BOTTOM\", color1Type6, \"TOP\", 0, 4)\ncolor2Type6text:SetPoint(\"BOTTOM\", color2Type6, \"TOP\", 0, 4)\ncolor1Type6text.myheight = 0\ncolor2Type6text.myheight = 0\ncolor1Type6:SetColorRGB(DBT.Options.StartColorPR, DBT.Options.StartColorPG, DBT.Options.StartColorPB)\ncolor1Type6text:SetTextColor(DBT.Options.StartColorPR, DBT.Options.StartColorPG, DBT.Options.StartColorPB)\ncolor2Type6:SetColorRGB(DBT.Options.EndColorPR, DBT.Options.EndColorPG, DBT.Options.EndColorPB)\ncolor2Type6text:SetTextColor(DBT.Options.EndColorPR, DBT.Options.EndColorPG, DBT.Options.EndColorPB)\ncolor1Type6:SetScript(\"OnColorSelect\", function(self)\n\tDBT:SetOption(\"StartColorPR\", select(1, self:GetColorRGB()))\n\tDBT:SetOption(\"StartColorPG\", select(2, self:GetColorRGB()))\n\tDBT:SetOption(\"StartColorPB\", select(3, self:GetColorRGB()))\n\tcolor1Type6text:SetTextColor(self:GetColorRGB())\nend)\ncolor2Type6:SetScript(\"OnColorSelect\", function(self)\n\tDBT:SetOption(\"EndColorPR\", select(1, self:GetColorRGB()))\n\tDBT:SetOption(\"EndColorPG\", select(2, self:GetColorRGB()))\n\tDBT:SetOption(\"EndColorPB\", select(3, self:GetColorRGB()))\n\tcolor2Type6text:SetTextColor(self:GetColorRGB())\nend)\n\nlocal dummybarcolor6 = DBT:CreateDummyBar(6, nil, L.CBTPhase)\ndummybarcolor6.frame:SetParent(BarColors.frame)\ndummybarcolor6.frame:SetPoint(\"TOP\", color2Type6text, \"LEFT\", 10, 40)\ndummybarcolor6.frame:SetScript(\"OnUpdate\", function(_, elapsed)\n\tdummybarcolor6:Update(elapsed)\nend)\ndo\n\t-- little hook to prevent this bar from changing size/scale\n\tlocal old = dummybarcolor6.ApplyStyle\n\tfunction dummybarcolor6:ApplyStyle(...)\n\t\told(self, ...)\n\t\tself.frame:SetWidth(183)\n\t\tself.frame:SetScale(0.9)\n\t\t_G[self.frame:GetName() .. \"Bar\"]:SetWidth(183)\n\tend\nend\n\n--Color Type 7 (Important (User))\nlocal color1Type7 = BarColors:CreateColorSelect(64)\nlocal color2Type7 = BarColors:CreateColorSelect(64)\ncolor1Type7:SetPoint(\"TOPLEFT\", BarColors.frame, \"TOPLEFT\", 30, -530)\ncolor2Type7:SetPoint(\"TOPLEFT\", color1Type7, \"TOPRIGHT\", 20, 0)\ncolor1Type7.myheight = 0\ncolor2Type7.myheight = 0\n\nlocal color1Type7reset = BarColors:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\nlocal color2Type7reset = BarColors:CreateButton(L.Reset, 64, 10, nil, GameFontNormalSmall)\ncolor1Type7reset:SetPoint(\"TOP\", color1Type7, \"BOTTOM\", 5, -10)\ncolor2Type7reset:SetPoint(\"TOP\", color2Type7, \"BOTTOM\", 5, -10)\ncolor1Type7reset:SetScript(\"OnClick\", function()\n\tcolor1Type7:SetColorRGB(DBT.DefaultOptions.StartColorUIR, DBT.DefaultOptions.StartColorUIG, DBT.DefaultOptions.StartColorUIB)\nend)\ncolor2Type7reset:SetScript(\"OnClick\", function()\n\tcolor2Type7:SetColorRGB(DBT.DefaultOptions.EndColorUIR, DBT.DefaultOptions.EndColorUIG, DBT.DefaultOptions.EndColorUIB)\nend)\n\nlocal color1Type7text = BarColors:CreateText(L.BarStartColorUI, 80, nil, nil, \"CENTER\")\nlocal color2Type7text = BarColors:CreateText(L.BarEndColorUI, 80, nil, nil, \"CENTER\", 0)\ncolor1Type7text:SetPoint(\"BOTTOM\", color1Type7, \"TOP\", 0, 4)\ncolor2Type7text:SetPoint(\"BOTTOM\", color2Type7, \"TOP\", 0, 4)\ncolor1Type7text.myheight = 0\ncolor2Type7text.myheight = 0\ncolor1Type7:SetColorRGB(DBT.Options.StartColorUIR, DBT.Options.StartColorUIG, DBT.Options.StartColorUIB)\ncolor1Type7text:SetTextColor(DBT.Options.StartColorUIR, DBT.Options.StartColorUIG, DBT.Options.StartColorUIB)\ncolor2Type7:SetColorRGB(DBT.Options.EndColorUIR, DBT.Options.EndColorUIG, DBT.Options.EndColorUIB)\ncolor2Type7text:SetTextColor(DBT.Options.EndColorUIR, DBT.Options.EndColorUIG, DBT.Options.EndColorUIB)\ncolor1Type7:SetScript(\"OnColorSelect\", function(self)\n\tDBT:SetOption(\"StartColorUIR\", select(1, self:GetColorRGB()))\n\tDBT:SetOption(\"StartColorUIG\", select(2, self:GetColorRGB()))\n\tDBT:SetOption(\"StartColorUIB\", select(3, self:GetColorRGB()))\n\tcolor1Type7text:SetTextColor(self:GetColorRGB())\nend)\ncolor2Type7:SetScript(\"OnColorSelect\", function(self)\n\tDBT:SetOption(\"EndColorUIR\", select(1, self:GetColorRGB()))\n\tDBT:SetOption(\"EndColorUIG\", select(2, self:GetColorRGB()))\n\tDBT:SetOption(\"EndColorUIB\", select(3, self:GetColorRGB()))\n\tcolor2Type7text:SetTextColor(self:GetColorRGB())\nend)\n\nlocal dummybarcolor7 = DBT:CreateDummyBar(7, nil, L.CBTImportant)\ndummybarcolor7.frame:SetParent(BarColors.frame)\ndummybarcolor7.frame:SetPoint(\"TOP\", color2Type7text, \"LEFT\", 10, 40)\ndummybarcolor7.frame:SetScript(\"OnUpdate\", function(_, elapsed)\n\tdummybarcolor7:Update(elapsed)\nend)\ndo\n\t-- little hook to prevent this bar from changing size/scale\n\tlocal old = dummybarcolor7.ApplyStyle\n\tfunction dummybarcolor7:ApplyStyle(...)\n\t\told(self, ...)\n\t\tself.frame:SetWidth(183)\n\t\tself.frame:SetScale(0.9)\n\t\t_G[self.frame:GetName() .. \"Bar\"]:SetWidth(183)\n\tend\nend\ndummybarcolor7:ApplyStyle()\n\n--Type 7 Extra Options\nlocal bar7OptionsText = BarColors:CreateText(L.Bar7Header, 405, nil, nil, \"LEFT\")\nbar7OptionsText:SetPoint(\"TOPLEFT\", color2Type7text, \"TOPLEFT\", 150, 0)\nbar7OptionsText.myheight = 0\n\nlocal forceLarge = BarColors:CreateCheckButton(L.Bar7ForceLarge, false, nil, nil, \"Bar7ForceLarge\")\nforceLarge:SetPoint(\"TOPLEFT\", bar7OptionsText, \"BOTTOMLEFT\")\nforceLarge:SetScript(\"OnClick\", function(self)\n\tDBT:SetOption(\"Bar7ForceLarge\", not DBT.Options.Bar7ForceLarge)\n\tif DBT.Options.Bar7ForceLarge then\n\t\tdummybarcolor7.enlarged = true\n\telse\n\t\tdummybarcolor7.enlarged = false\n\tend\n\tdummybarcolor7:ApplyStyle()\nend)\n\nlocal customInline = BarColors:CreateCheckButton(L.Bar7CustomInline, false, nil, nil, \"Bar7CustomInline\")\ncustomInline:SetPoint(\"TOPLEFT\", forceLarge, \"BOTTOMLEFT\")\ncustomInline:SetScript(\"OnClick\", function(self)\n\tDBT:SetOption(\"Bar7CustomInline\", not DBT.Options.Bar7CustomInline)\n\tlocal ttext = _G[dummybarcolor7.frame:GetName()..\"BarName\"]:GetText() or \"\"\n\tttext = ttext:gsub(\"|T.-|t\", \"\")\n\tdummybarcolor7:SetText(ttext)\nend)\n"
  },
  {
    "path": "DBM-GUI/modules/options/timers/Timers.lua",
    "content": "local L\t\t= DBM_GUI_L\n\nDBM_GUI.Cat_Timers = DBM_GUI:CreateNewPanel(L.TabCategory_Timers, \"option\")\n\nlocal TimersArea1\t\t= DBM_GUI.Cat_Timers:CreateArea(L.Area_BasicSetup)\nTimersArea1:CreateText(\"|cFF73C2FBhttps://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BNew-User-Guide%5D-Initial-Setup-Tips|r\", nil, true, nil, \"LEFT\", 0)\nTimersArea1.frame:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, L.Area_BasicSetup, \"https://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BNew-User-Guide%5D-Initial-Setup-Tips\")\nend)\n\nlocal TimersArea2\t\t= DBM_GUI.Cat_Timers:CreateArea(L.Area_ColorBytype)\nTimersArea2:CreateText(\"|cFF73C2FBhttps://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BGuide%5D-Color-bars-by-type|r\", nil, true, nil, \"LEFT\", 0)\nTimersArea2.frame:SetScript(\"OnMouseUp\", function()\n\tDBM:ShowUpdateReminder(nil, nil, L.Area_ColorBytype, \"https://github.com/DeadlyBossMods/DeadlyBossMods/wiki/%5BGuide%5D-Color-bars-by-type\")\nend)\n"
  },
  {
    "path": "DBM-Gruul/DBM-Gruul.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Gruul|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0格鲁尔的巢穴|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Логово Груула|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMGruul_AllSavedVars\n## SavedVariablesPerCharacter: DBMGruul_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: BC\n## X-DBM-Mod-Has-Single-Format: 1\n## X-DBM-StatTypes: normal\n## X-DBM-Mod-Name: Gruul\n## X-DBM-Mod-Name-zhCN: 格鲁尔\n## X-DBM-Mod-Name-deDE: Gruuls Unterschlupf\n## X-DBM-Mod-Name-esES: Gruul\n## X-DBM-Mod-Name-esMX: Gruul\n## X-DBM-Mod-Name-frFR: Gruul\n## X-DBM-Mod-Name-koKR: 그룰의 둥지\n## X-DBM-Mod-Name-ruRU: Груул\n## X-DBM-Mod-Name-zhTW: 格魯爾的巢穴\n## X-DBM-Mod-Name-frFR: Repaire de Gruul\n## X-DBM-Mod-MapID: 777\n## X-DBM-Mod-Sort: 307\n## X-DBM-Mod-LoadZone: Gruul's Lair\n## X-DBM-Mod-LoadZone-zhCN: 格鲁尔的巢穴\n## X-DBM-Mod-LoadZone-deDE: Gruuls Unterschlupf\n## X-DBM-Mod-LoadZone-esES: Guarida de Gruul\n## X-DBM-Mod-LoadZone-esMX: Guarida de Gruul\n## X-DBM-Mod-LoadZone-frFR: Repaire de Gruul\n## X-DBM-Mod-LoadZone-koKR: 그룰의 둥지\n## X-DBM-Mod-LoadZone-ruRU: Логово Груула\n## X-DBM-Mod-LoadZone-zhTW: 格魯爾的巢穴\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.es.lua\nlocalization.tw.lua\nlocalization.cn.lua\nlocalization.ru.lua\nlocalization.kr.lua\nlocalization.fr.lua\n\nMaulgar.lua\nGruul.lua\n"
  },
  {
    "path": "DBM-Gruul/Gruul.lua",
    "content": "local mod\t= DBM:NewMod(\"Gruul\", \"DBM-Gruul\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(19044)\nmod:SetEncounterID(650)\n\nmod:SetModelID(19044)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 33525 33654\",\n\t\"SPELL_CAST_SUCCESS 36297\",\n\t\"SPELL_AURA_APPLIED 36300 36240\",\n\t\"SPELL_AURA_APPLIED_DOSE 36300\"\n)\n\n--TODO, add an option that lets users choose between 11, 13, and 18, 18 being default\n--[[\n(ability.id = 33525 or ability.id = 33654) and type = \"begincast\"\n or ability.id = 36297 and type = \"cast\"\n or ability.id = 36300\n--]]\nlocal warnGrowth\t\t= mod:NewStackAnnounce(36300, 2)\nlocal warnGroundSlam\t= mod:NewSpellAnnounce(33525, 3)\nlocal warnShatter\t\t= mod:NewSpellAnnounce(33654, 4)\nlocal warnSilence\t\t= mod:NewSpellAnnounce(36297, 4)\n\nlocal specWarnCaveIn\t= mod:NewSpecialWarningGTFO(36240, nil, nil, nil, 1, 6)\nlocal specWarnShatter\t= mod:NewSpecialWarningMoveAway(33654, nil, nil, nil, 1, 6)\n\nlocal timerGrowthCD\t\t= mod:NewNextTimer(30, 36300, nil, nil, nil, 6)\nlocal timerGroundSlamCD\t= mod:NewCDTimer(74, 33525, nil, nil, nil, 2)--74-80 second variation,and this is just from 2 pulls.\nlocal timerShatterCD\t= mod:NewNextTimer(10, 33654, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON, nil, 1, 4)--10 seconds after ground slam\n--local timerSilenceCD\t= mod:NewCDTimer(32, 36297, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON)--Also showing a HUGE variation of 32-130 seconds.\n\nmod:AddRangeFrameOption(mod.Options.RangeDistance == \"Smaller\" and 11 or 18, 33654)\nmod:AddDropdownOption(\"RangeDistance\", {\"Smaller\", \"Safe\"}, \"Safe\", \"misc\")\n\nfunction mod:OnCombatStart(delay)\n\ttimerGrowthCD:Start(-delay)\n\ttimerGroundSlamCD:Start(40-delay)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(self.Options.RangeDistance == \"Smaller\" and 11 or 18)\n\tend\n\tDBM:AddMsg(\"Ground Slam timer is not broken. This is an ability that has a 74 second minimum cooldown window, but after coming off CD can be delayed up to 21 seconds on when it's cast. Basically it's a 74-95sec window. DBM shows timer for the start of that window, but cannot control whether or not the boss casts it at 74, 85, or 95. Use this knowledge to inform you of when the ability can NOT be cast, not when it will be.\")\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 33525 then--Ground Slam\n\t\twarnGroundSlam:Show()\n\t\ttimerShatterCD:Start()\n\t\ttimerGroundSlamCD:Start()\n\t\tspecWarnShatter:Schedule(3)\n\t\tspecWarnShatter:ScheduleVoice(3, \"scatter\")\n\telseif args.spellId == 33654 then--Shatter\n\t\twarnShatter:Show()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 36297 then--Reverberation (Silence)\n\t\twarnSilence:Show()\n--\t\ttimerSilenceCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 36300 then--Growth\n\t\tlocal amount = args.amount or 1\n\t\twarnGrowth:Show(args.spellName, amount)\n\t\ttimerGrowthCD:Start()\n--\t\tif amount == 3 then--First silence is 15 (or 30?) seconds after 3rd growth.\n--\t\t\ttimerSilenceCD:Start(30)\n--\t\tend\n\telseif args.spellId == 36240 and args:IsPlayer() and not self:IsTrivial() then--Cave In\n\t\tspecWarnCaveIn:Show(args.spellName)\n\t\tspecWarnCaveIn:Play(\"watchfeet\")\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n"
  },
  {
    "path": "DBM-Gruul/Maulgar.lua",
    "content": "local mod\t= DBM:NewMod(\"Maulgar\", \"DBM-Gruul\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(18831, 18832, 18834, 18835, 18836)\nmod:SetEncounterID(649)\n\nmod:SetModelID(18831)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 33238 33054 33147\",\n\t\"SPELL_CAST_START 33152 33144\",\n\t\"SPELL_CAST_SUCCESS 33131\"\n)\n\n--Maulgar\nlocal warningWhirlwind\t\t= mod:NewSpellAnnounce(33238, 4)\n--Olm\nlocal warningFelHunter\t\t= mod:NewSpellAnnounce(33131, 3, nil, mod:IsTank() or mod:UnitClass() == \"WARLOCK\")\n--Krosh\nlocal warningShield\t\t\t= mod:NewTargetNoFilterAnnounce(33054, 3, nil, \"MagicDispeller\")\n--Blindeye\nlocal warningPWS\t\t\t= mod:NewTargetNoFilterAnnounce(33147, 3, nil, false)\nlocal warningPoH\t\t\t= mod:NewCastAnnounce(33152, 4)\nlocal warningHeal\t\t\t= mod:NewCastAnnounce(33144, 4)\n\nlocal specWarnWhirlwind\t\t= mod:NewSpecialWarningRun(33238, \"Melee\", nil, nil, 4, 2)\nlocal specWarnPoH\t\t\t= mod:NewSpecialWarningInterrupt(33152, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnHeal\t\t\t= mod:NewSpecialWarningInterrupt(33144, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerWhirlwindCD\t\t= mod:NewCDTimer(55, 33238, nil, nil, nil, 2)\nlocal timerWhirlwind\t\t= mod:NewBuffActiveTimer(15, 33238, nil, nil, nil, 2)\nlocal timerFelhunter\t\t= mod:NewCDTimer(48.5, 33131, nil, nil, nil, 1)--Buff Active or Cd timer?\nlocal timerPoH\t\t\t\t= mod:NewCastTimer(4, 33152, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerHeal\t\t\t\t= mod:NewCastTimer(2, 33144, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerWhirlwindCD:Start(58-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 33152 then--Prayer of Healing\n\t\tif self:CheckInterruptFilter(args.sourceGUID, nil, true) then\n\t\t\tspecWarnPoH:Show(args.sourceName)\n\t\t\tspecWarnPoH:Play(\"kickcast\")\n\t\t\ttimerPoH:Start()\n\t\telse\n\t\t\twarningPoH:Show()\n\t\tend\n\telseif args.spellId == 33144 then--Heal\n\t\tif self:CheckInterruptFilter(args.sourceGUID, nil, true) then\n\t\t\tspecWarnHeal:Show(args.sourceName)\n\t\t\tspecWarnHeal:Play(\"kickcast\")\n\t\t\ttimerHeal:Start()\n\t\telse\n\t\t\twarningHeal:Show()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 33238 then\n\t\tif self.Options.SpecWarn33238run then\n\t\t\tspecWarnWhirlwind:Show()\n\t\t\tspecWarnWhirlwind:Play(\"justrun\")\n\t\telse\n\t\t\twarningWhirlwind:Show()\n\t\tend\n\t\ttimerWhirlwind:Start()\n\t\ttimerWhirlwindCD:Start()\n\telseif args.spellId == 33054 and not args:IsDestTypePlayer() then\n\t\twarningShield:Show(args.destName)\n\telseif args.spellId == 33147 and not args:IsDestTypePlayer() then\n\t\twarningPWS:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 33131 then\n\t\twarningFelHunter:Show()\n\t\ttimerFelhunter:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Gruul/localization.cn.lua",
    "content": "if GetLocale() ~= \"zhCN\" then return end\n\nlocal L\n\n--Maulgar\nL = DBM:GetModLocalization(\"Maulgar\")\n\nL:SetGeneralLocalization({\n\tname = \"莫加尔大王\"\n})\n\n--Gruul the Dragonkiller\nL = DBM:GetModLocalization(\"Gruul\")\n\nL:SetGeneralLocalization({\n\tname = \"屠龙者格鲁尔\"\n})\n\nL:SetWarningLocalization({\n\tWarnGrowth\t= \"%s (%d)\"\n})\n\nL:SetOptionLocalization({\n\tWarnGrowth\t= \"Show warning for $spell:36300\"\n})\n"
  },
  {
    "path": "DBM-Gruul/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n--Maulgar\nL = DBM:GetModLocalization(\"Maulgar\")\n\nL:SetGeneralLocalization({\n\tname = \"Hochkönig Maulgar\"\n})\n\n--Gruul the Dragonkiller\nL = DBM:GetModLocalization(\"Gruul\")\n\nL:SetGeneralLocalization({\n\tname = \"Gruul der Drachenschlächter\"\n})\n\nL:SetWarningLocalization({\n\tWarnGrowth\t= \"%s (%d)\"\n})\n\nL:SetOptionLocalization({\n\tWarnGrowth\t= \"Zeige Warnung für $spell:36300\"\n})\n"
  },
  {
    "path": "DBM-Gruul/localization.en.lua",
    "content": "local L\n\n--Maulgar\nL = DBM:GetModLocalization(\"Maulgar\")\n\nL:SetGeneralLocalization({\n\tname = \"High King Maulgar\"\n})\n\n--Gruul the Dragonkiller\nL = DBM:GetModLocalization(\"Gruul\")\n\nL:SetGeneralLocalization({\n\tname = \"Gruul the Dragonkiller\"\n})\n\nL:SetWarningLocalization({\n\tWarnGrowth\t= \"%s (%d)\"\n})\n\nL:SetOptionLocalization({\n\tWarnGrowth\t\t= \"Show warning for $spell:36300\",\n\tRangeDistance\t= \"Range frame distance for $spell:33654\",\n\tSmaller\t\t\t= \"Smaller distance (11)\",\n\tSafe\t\t\t= \"Safer distance (18)\"\n})\n"
  },
  {
    "path": "DBM-Gruul/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\nlocal L\n\n--Maulgar\nL = DBM:GetModLocalization(\"Maulgar\")\n\nL:SetGeneralLocalization({\n\tname = \"Su majestad Maulgar\"\n})\n\n--Gruul the Dragonkiller\nL = DBM:GetModLocalization(\"Gruul\")\n\nL:SetGeneralLocalization({\n\tname = \"Gruul el Asesino de Dragones\"\n})\n\nL:SetWarningLocalization({\n\tWarnGrowth\t= \"%s (%d)\"\n})\n\nL:SetOptionLocalization({\n\tWarnGrowth\t= \"Mostrar aviso para $spell:36300\"\n})\n"
  },
  {
    "path": "DBM-Gruul/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\n\nlocal L\n\n--Maulgar\nL = DBM:GetModLocalization(\"Maulgar\")\n\nL:SetGeneralLocalization({\n\tname = \"Haut Roi Maulgar\"\n})\n\n--Gruul the Dragonkiller\nL = DBM:GetModLocalization(\"Gruul\")\n\nL:SetGeneralLocalization({\n\tname = \"Gruul le Tue-dragon\"\n})\n\nL:SetOptionLocalization({\n\tWarnGrowth\t\t= \"Montre une alerte pour $spell:36300\",\n\tRangeDistance\t= \"Montre la fenêtre de portée pour $spell:33654\",\n\tSmaller\t\t\t= \"Distance plus petite (11)\",\n\tSafe\t\t\t= \"Distance de sûreté (18)\"\n})\n"
  },
  {
    "path": "DBM-Gruul/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n--Maulgar\nL = DBM:GetModLocalization(\"Maulgar\")\n\nL:SetGeneralLocalization({\n\tname = \"왕중왕 마울가르\"\n})\n\n--Gruul the Dragonkiller\nL = DBM:GetModLocalization(\"Gruul\")\n\nL:SetGeneralLocalization({\n\tname = \"용 학살자 그룰\"\n})\n\nL:SetOptionLocalization({\n\tWarnGrowth\t= \"$spell:36300 알림 보기\",\n\tRangeDistance\t= \"$spell:33654 거리 창 범위 설정\",\n\tSmaller\t\t\t= \"좁은 범위 (11m)\",\n\tSafe\t\t\t= \"안전 범위 (18m)\"\n})\n"
  },
  {
    "path": "DBM-Gruul/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n--Maulgar\nL = DBM:GetModLocalization(\"Maulgar\")\n\nL:SetGeneralLocalization({\n\tname = \"Король Молгар\"\n})\n\n--Gruul the Dragonkiller\nL = DBM:GetModLocalization(\"Gruul\")\n\nL:SetGeneralLocalization({\n\tname = \"Груул Драконобой\"\n})\n\nL:SetWarningLocalization({\n\tWarnGrowth\t= \"%s (%d)\"\n})\n\nL:SetOptionLocalization({\n\tWarnGrowth\t\t= \"Показывать предупреждение для $spell:36300\",\n\tRangeDistance\t= \"Фрейм дистанции для $spell:33654\",\n\tSmaller\t\t\t= \"Маленькая дистанция (11)\",\n\tSafe\t\t\t= \"Безопасная дистанция (18)\"\n})\n"
  },
  {
    "path": "DBM-Gruul/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\n\nlocal L\n\n--Maulgar\nL = DBM:GetModLocalization(\"Maulgar\")\n\nL:SetGeneralLocalization({\n\tname = \"大君王莫卡爾\"\n})\n\n--Gruul the Dragonkiller\nL = DBM:GetModLocalization(\"Gruul\")\n\nL:SetGeneralLocalization({\n\tname = \"弒龍者戈魯爾\"\n})\n\nL:SetWarningLocalization({\n\tWarnGrowth\t= \"%s (%d)\"\n})\n\nL:SetOptionLocalization({\n\tWarnGrowth\t= \"為$spell:36300顯示警告\"\n})\n"
  },
  {
    "path": "DBM-Hyjal/Anetheron.lua",
    "content": "local mod\t= DBM:NewMod(\"Anetheron\", \"DBM-Hyjal\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17808)\nmod:SetEncounterID(619)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 31306 31298\",\n\t\"SPELL_AURA_REFRESH 31306 31298\",\n\t\"SPELL_AURA_REMOVED 31306 31298\",\n\t\"SPELL_CAST_START 31299\",\n\t\"SPELL_CAST_SUCCESS 31306 31298\"\n)\n\nlocal warnSwarm\t\t\t= mod:NewSpellAnnounce(31306, 3)\n--local warnSleep\t\t\t= mod:NewTargetNoFilterAnnounce(31298, 2)\nlocal warnInferno\t\t= mod:NewTargetNoFilterAnnounce(31299, 4)\n\nlocal specWarnInferno\t= mod:NewSpecialWarningYou(31299, nil, nil, nil, 1, 2)\nlocal yellInferno\t\t= mod:NewYell(31299)\n\nlocal timerSwarm\t\t= mod:NewBuffFadesTimer(20, 31306, nil, nil, nil, 3)\nlocal timerSleep\t\t= mod:NewBuffFadesTimer(10, 31298, nil, nil, nil, 3)\nlocal timerSleepCD\t\t= mod:NewCDTimer(19, 31298, nil, nil, nil, 3)\nlocal timerInferno\t\t= mod:NewCDTimer(51, 31299, nil, nil, nil, 3)\n\nfunction mod:InfernoTarget(targetname)\n\tif not targetname then return end\n\tif targetname == UnitName(\"player\") then\n\t\tspecWarnInferno:Show()\n\t\tspecWarnInferno:Play(\"targetyou\")\n\t\tyellInferno:Yell()\n\telse\n\t\twarnInferno:Show(targetname)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 31306 and args:IsPlayer() then\n\t\ttimerSwarm:Start()\n\telseif args.spellId == 31298 and args:IsPlayer() then\n\t\ttimerSleep:Start()\n\tend\nend\nmod.SPELL_AURA_REFRESH = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 31306 and args:IsPlayer() then\n\t\ttimerSwarm:Cancel()\n\telseif args.spellId == 31298 and args:IsPlayer() then\n\t\ttimerSleep:Cancel()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 31299 then\n\t\ttimerInferno:Start()\n\t\tself:BossTargetScanner(17808, \"InfernoTarget\", 0.05, 10)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 31306 then\n\t\twarnSwarm:Show()\n\telseif args.spellId == 31298 then\n\t\ttimerSleepCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Hyjal/Archimonde.lua",
    "content": "local mod\t= DBM:NewMod(\"Archimonde\", \"DBM-Hyjal\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17968)\nmod:SetEncounterID(622)\nmod:SetZone()\nmod:SetUsedIcons(8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 31972\",\n\t\"SPELL_CAST_START 31970 32014\"\n)\n\nlocal warnGrip\t\t\t= mod:NewTargetNoFilterAnnounce(31972, 3, nil, \"RemoveMagic\")--Magic on retail, but I think a curse in TBC\nlocal warnBurst\t\t\t= mod:NewTargetNoFilterAnnounce(32014, 3)\nlocal warnFear\t\t\t= mod:NewSpellAnnounce(31970, 3)\n\nlocal specWarnBurst\t\t= mod:NewSpecialWarningYou(32014, nil, nil, nil, 3, 2)\nlocal yellBurst\t\t\t= mod:NewYell(32014)\n\nlocal timerFearCD\t\t= mod:NewCDTimer(41, 31970, nil, nil, nil, 2)\n--local timerGripCD\t\t= mod:NewCDTimer(6, 31972, nil, \"RemoveMagic\", nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)\n\nlocal berserkTimer\t\t= mod:NewBerserkTimer(600)\n\nmod:AddSetIconOption(\"BurstIcon\", 32014, true, false, {8})\n\nfunction mod:BurstTarget(targetname)\n\tif not targetname then return end\n\tif targetname == UnitName(\"player\") then\n\t\tspecWarnBurst:Show()\n\t\tspecWarnBurst:Play(\"targetyou\")\n\t\tyellBurst:Yell()\n\telse\n\t\twarnBurst:Show(targetname)\n\tend\n\tif self.Options.BurstIcon then\n\t\tself:SetIcon(targetname, 8, 5)\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\ttimerFearCD:Start(40-delay)\n\tberserkTimer:Start(-delay)\nend\n\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 31972 then\n\t\twarnGrip:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 31970 then\n\t\twarnFear:Show()\n\t\ttimerFearCD:Start()\n\telseif args.spellId == 32014 then\n\t\tself:BossTargetScanner(17968, \"BurstTarget\", 0.05, 10)\n\tend\nend\n"
  },
  {
    "path": "DBM-Hyjal/Azgalor.lua",
    "content": "local mod\t= DBM:NewMod(\"Azgalor\", \"DBM-Hyjal\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17842)\nmod:SetEncounterID(621)\nmod:SetUsedIcons(8)\nmod:SetHotfixNoticeRev(20250920000000)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 31340 31347\",\n\t\"SPELL_AURA_REMOVED 31347\",\n\t\"SPELL_CAST_SUCCESS 31344\"\n)\n\nlocal warnSilence\t\t= mod:NewSpellAnnounce(31344, 3)\nlocal warnDoom\t\t\t= mod:NewTargetNoFilterAnnounce(31347, 4)\n\nlocal specWarnFire\t\t= mod:NewSpecialWarningMove(31340, nil, nil, nil, 1, 2)\nlocal specWarnDoom\t\t= mod:NewSpecialWarningYou(31347, nil, nil, nil, 1, 2)\nlocal yellDoom\t\t\t= mod:NewShortFadesYell(31347)\n\nlocal timerDoom\t\t\t= mod:NewTargetTimer(20, 31347, nil, nil, nil, 3)\nlocal timerSilence\t\t= mod:NewBuffFadesTimer(5, 31344, nil, nil, nil, 2, nil, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.HEALER_ICON)\nlocal timerSilenceCD\t= mod:NewCDTimer(18, 31344, nil, nil, nil, 2, nil, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.HEALER_ICON)\n\nlocal berserkTimer\t\t= mod:NewBerserkTimer(600)\n\nmod:AddSetIconOption(\"DoomIcon\", 31347, true, false, {8})\n\nfunction mod:OnCombatStart(delay)\n\tberserkTimer:Start(-delay)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 31340 and args:IsPlayer() and self:AntiSpam() then\n\t\tspecWarnFire:Show()\n\t\tspecWarnFire:Play(\"runaway\")\n\telseif args.spellId == 31347 then\n\t\ttimerDoom:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnDoom:Show()\n\t\t\tspecWarnDoom:Play(\"targetyou\")\n\t\t\tyellDoom:Countdown(args.spellId)\n\t\telse\n\t\t\twarnDoom:Show(args.destName)\n\t\tend\n\t\tif self.Options.DoomIcon then\n\t\t\tself:SetIcon(args.destName, 8)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 31347 then\n\t\tif args:IsPlayer() then\n\t\t\tyellDoom:Cancel()\n\t\tend\n\t\tif self.Options.DoomIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 31344 then\n\t\twarnSilence:Show()\n\t\ttimerSilence:Start()\n\t\ttimerSilenceCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Hyjal/DBM-Hyjal.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Battle for Mount Hyjal|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0하이잘 정상|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Die Schlacht um den Hyjal|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0La Batalla del Monte Hyjal|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Bataille du mont Hyjal|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0海加尔山之战|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0海加爾山之戰|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Битва за гору Хиджал|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMHyjal_AllSavedVars\n## SavedVariablesPerCharacter: DBMHyjal_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: BC\n## X-DBM-StatTypes: normal25\n## X-DBM-Mod-Name: The Battle for Mount Hyjal\n## X-DBM-Mod-Name-koKR: 하이잘 정상\n## X-DBM-Mod-Name-deDE: Die Schlacht um den Hyjal\n## X-DBM-Mod-Name-esES: La Batalla del Monte Hyjal\n## X-DBM-Mod-Name-frFR: La bataille du mont Hyjal\n## X-DBM-Mod-Name-zhCN: 海加尔之战\n## X-DBM-Mod-Name-zhTW: 海加爾山之戰\n## X-DBM-Mod-Name-ruRU: Битва за гору Хиджал\n## X-DBM-Mod-MapID: 776\n## X-DBM-Mod-LoadZone: Hyjal Summit\n## X-DBM-Mod-LoadZone-deDE: Hyjalgipfel\n## X-DBM-Mod-LoadZone-esES: La Cima Hyjal\n## X-DBM-Mod-LoadZone-esMX: La Cima Hyjal\n## X-DBM-Mod-LoadZone-frFR: Sommet d'Hyjal\n## X-DBM-Mod-LoadZone-zhCN: 海加尔峰\n## X-DBM-Mod-LoadZone-zhTW: 海加爾山巔\n## X-DBM-Mod-LoadZone-koKR: 하이잘 정상\n## X-DBM-Mod-LoadZone-ruRU: Вершина Хиджала\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.cn.lua\nlocalization.tw.lua\nlocalization.ru.lua\nlocalization.es.lua\nlocalization.kr.lua\n\nRageWinterchill.lua\nAnetheron.lua\nKazrogal.lua\nAzgalor.lua\nArchimonde.lua\nWaveTimers.lua\n"
  },
  {
    "path": "DBM-Hyjal/Kazrogal.lua",
    "content": "local mod\t= DBM:NewMod(\"Kazrogal\", \"DBM-Hyjal\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17888)\nmod:SetEncounterID(620)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 31447\",\n\t\"SPELL_CAST_SUCCESS 31480\"\n)\n\nlocal warnMark\t\t= mod:NewCountAnnounce(31447, 3)\nlocal warnStomp\t\t= mod:NewSpellAnnounce(31480, 2)\n\nlocal timerMark\t\t= mod:NewBuffFadesTimer(6.2, 31447, nil, nil, nil, 2)\nlocal timerMarkCD\t= mod:NewNextCountTimer(45, 31447, nil, nil, nil, 2)\n\nmod.vb.count = 0\nmod.vb.time = 45\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.time = 45\n\tself.vb.count = 0\n\ttimerMarkCD:Start(-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 31447 then\n\t\tself.vb.count = self.vb.count + 1\n\t\tif self.vb.time > 10 then\n\t\t\tself.vb.time = self.vb.time - 5\n\t\tend\n\t\twarnMark:Show(self.vb.count)\n\t\ttimerMark:Start()\n\t\ttimerMarkCD:Start(self.vb.time, self.vb.count)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 31480 then\n\t\twarnStomp:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Hyjal/RageWinterchill.lua",
    "content": "local mod\t= DBM:NewMod(\"Rage\", \"DBM-Hyjal\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17767)\nmod:SetEncounterID(618)\nmod:SetModelID(\"creature/lich/lich.m2\")\nmod:SetUsedIcons(8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 31249 31258\",\n\t\"SPELL_AURA_REMOVED 31249\",\n\t\"SPELL_CAST_START 31258\"\n)\n\nlocal warnIceBolt\t\t= mod:NewSpellAnnounce(31249, 3)\nlocal warnDnd\t\t\t= mod:NewSpellAnnounce(31258, 3)\n\nlocal specWarnIceBolt\t= mod:NewSpecialWarningYou(31249, nil, nil, nil, 1, 2)\nlocal specWarnDnD\t\t= mod:NewSpecialWarningGTFO(31258, nil, nil, nil, 1, 8)\n\nlocal timerDnd\t\t\t= mod:NewBuffActiveTimer(16, 31258)\nlocal timerDndCD\t\t= mod:NewCDTimer(46, 31258, nil, nil, nil, 3)\n\nlocal berserkTimer\t\t= mod:NewBerserkTimer(600)\n\nmod:AddSetIconOption(\"IceBoltIcon\", 31249, false, false, {8})\n\nfunction mod:OnCombatStart(delay)\n\tberserkTimer:Start(-delay)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 31249 then\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnIceBolt:Show()\n\t\t\tspecWarnIceBolt:Play(\"stunsoon\")\n\t\telse\n\t\t\twarnIceBolt:Show(args.destName)\n\t\tend\n\t\tif self.Options.IceBoltIcon then\n\t\t\tself:SetIcon(args.destName, 8)\n\t\tend\n\telseif args.spellId == 31258 and args:IsPlayer() and self:AntiSpam() then\n\t\tspecWarnDnD:Show(args.spellName)\n\t\tspecWarnDnD:Play(\"watchfeet\")\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 31249 then\n\t\tif self.Options.IceBoltIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 31258 then\n\t\twarnDnd:Show()\n\t\ttimerDnd:Start()\n\t\ttimerDndCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Hyjal/WaveTimers.lua",
    "content": "local mod\t= DBM:NewMod(\"HyjalWaveTimers\", \"DBM-Hyjal\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\n\nmod:RegisterEvents(\n\t\"GOSSIP_SHOW\",\n\t\"QUEST_PROGRESS\",\n\t\"UPDATE_WORLD_STATES\",\n\t\"UNIT_DIED\",\n\t\"SPELL_AURA_APPLIED\"\n)\nmod.noStatistics = true\n\nlocal warnWave\t\t\t= mod:NewAnnounce(\"WarnWave\", 1)\nlocal warnCannibalize\t= mod:NewSpellAnnounce(31538, 2)\n\nlocal timerWave\t\t\t= mod:NewTimer(125, \"TimerWave\", nil, nil, nil, 1)\n\nmod:AddBoolOption(\"DetailedWave\")\nmod:RemoveOption(\"HealthFrame\")\n\nlocal lastWave = 0\nlocal boss = 0\nlocal bossNames = {\n\t[0] = L.GeneralBoss,\n\t[1] = L.RageWinterchill,\n\t[2] = L.Anetheron,\n\t[3] = L.Kazrogal,\n\t[4] = L.Azgalor\n}\n\nfunction mod:GOSSIP_SHOW()\n\tif GetRealZoneText() ~= L.HyjalZoneName then return end\n\tlocal target = UnitName(\"target\")\n\tif target == L.Thrall or target == L.Jaina then\n\t\tlocal selection = GetGossipOptions()\n\t\tif selection == L.RageGossip then\n\t\t\tboss = 1\n\t\t\tself:SendSync(\"boss\", 1)\n\t\telseif selection == L.AnetheronGossip then\n\t\t\tboss = 2\n\t\t\tself:SendSync(\"boss\", 2)\n\t\telseif selection == L.KazrogalGossip then\n\t\t\tboss = 3\n\t\t\tself:SendSync(\"boss\", 3)\n\t\telseif selection == L.AzgalorGossip then\n\t\t\tboss = 4\n\t\t\tself:SendSync(\"boss\", 4)\n\t\tend\n\tend\nend\nmod.QUEST_PROGRESS = mod.GOSSIP_SHOW\n\nfunction mod:UPDATE_WORLD_STATES()\n\tlocal _, _, text = GetWorldStateUIInfo(3)\n\tif not text then return end\n\tlocal currentWave = text:match(L.WaveCheck)\n\tif not currentWave then\n\t\tcurrentWave = 0\n\tend\n\tself:WaveFunction(currentWave)\nend\n\nfunction mod:OnSync(msg, arg)\n\tif msg == \"boss\" then\n\t\tboss = tonumber(arg)\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 17852 or cid == 17772 then\n\t\tlastWave = 0\n\t\ttimerWave:Cancel()\n\telseif cid == 17767 then\n\t\tself:SendSync(\"boss\", 2)\n\telseif cid == 17808 then\n\t\tself:SendSync(\"boss\", 3)\n\telseif cid == 17888 then\n\t\tself:SendSync(\"boss\", 4)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 31538 then\n\t\twarnCannibalize:Show()\n\tend\nend\n\nfunction mod:WaveFunction(currentWave)\n\tlocal timer = 0\n\tcurrentWave = tonumber(currentWave)\n\tlastWave = tonumber(lastWave)\n\tif currentWave > lastWave then\n\t\tif boss == 0 then--unconfirmed\n\t\t\ttimer = 125\n\t\t\twarnWave:Show(L.WarnWave_0:format(currentWave))\n\t\telseif boss == 1 or boss == 2 then\n\t\t\ttimer = 125\n\t\t\tif currentWave == 8 then\n\t\t\t\ttimer = 140\n\t\t\tend\n\t\t\tif self.Options.DetailedWave and boss == 1 then\n\t\t\t\tif currentWave == 1 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_1:format(currentWave, 10, L.Ghoul))\n\t\t\t\telseif currentWave == 2 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_2:format(currentWave, 10, L.Ghoul, 2, L.Fiend))\n\t\t\t\telseif currentWave == 3 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_2:format(currentWave, 6, L.Ghoul, 6 , L.Fiend))\n\t\t\t\telseif currentWave == 4 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_3:format(currentWave, 6, L.Ghoul, 4, L.Fiend, 2, L.Necromancer))\n\t\t\t\telseif currentWave == 5 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_3:format(currentWave, 2, L.Ghoul, 6, L.Fiend, 4, L.Necromancer))\n\t\t\t\telseif currentWave == 6 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_2:format(currentWave, 6, L.Ghoul, 6, L.Abomination))\n\t\t\t\telseif currentWave == 7 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_3:format(currentWave, 4, L.Ghoul, 4, L.Abomination, 4, L.Necromancer))\n\t\t\t\telseif currentWave == 8 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_4:format(currentWave, 6, L.Ghoul, 4, L.Fiend, 2, L.Abomination, 2, L.Necromancer))\n\t\t\t\tend\n\t\t\telseif self.Options.DetailedWave and boss == 2 then\n\t\t\t\tif currentWave == 1 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_1:format(currentWave, 10, L.Ghoul))\n\t\t\t\telseif currentWave == 2 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_2:format(currentWave, 8, L.Ghoul, 4, L.Abomination))\n\t\t\t\telseif currentWave == 3 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_3:format(currentWave, 4, L.Ghoul, 4, L.Fiend, 4, L.Necromancer))\n\t\t\t\telseif currentWave == 4 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_3:format(currentWave, 6, L.Fiend, 4, L.Necromancer, 2, L.Banshee))\n\t\t\t\telseif currentWave == 5 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_3:format(currentWave, 6, L.Ghoul, 4, L.Banshee, 2, L.Necromancer))\n\t\t\t\telseif currentWave == 6 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_3:format(currentWave, 6, L.Ghoul, 2, L.Abomination, 4, L.Necromancer))\n\t\t\t\telseif currentWave == 7 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_4:format(currentWave, 2, L.Ghoul, 4, L.Fiend, 4, L.Abomination, 4, L.Banshee))\n\t\t\t\telseif currentWave == 8 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_5:format(currentWave, 3, L.Ghoul, 3, L.Fiend, 4, L.Abomination, 2, L.Necromancer, 2, L.Banshee))\n\t\t\t\tend\n\t\t\telse\n\t\t\t\twarnWave:Show(L.WarnWave_0:format(currentWave))\n\t\t\tend\n\t\t\tself:SendSync(\"boss\", boss)\n\t\telseif boss == 3 or boss == 4 then\n\t\t\ttimer = 135\n\t\t\tif currentWave == 2 or currentWave == 4 then\n\t\t\t\ttimer = 165\n\t\t\telseif currentWave == 3 then\n\t\t\t\ttimer = 160\n\t\t\telseif currentWave == 7 then\n\t\t\t\ttimer = 195\n\t\t\telseif currentWave == 8 then\n\t\t\t\ttimer = 225\n\t\t\tend\n\t\t\tif self.Options.DetailedWave and boss == 3 then\n\t\t\t\tif currentWave == 1 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_4:format(currentWave, 4, L.Ghoul, 4, L.Abomination, 2, L.Necromancer, 2, L.Banshee))\n\t\t\t\telseif currentWave == 2 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_2:format(currentWave, 4, L.Ghoul, 10, L.Gargoyle))\n\t\t\t\telseif currentWave == 3 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_3:format(currentWave, 6, L.Ghoul, 6, L.Fiend, 2, L.Necromancer))\n\t\t\t\telseif currentWave == 4 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_3:format(currentWave, 6, L.Fiend, 2, L.Necromancer, 6, L.Gargoyle))\n\t\t\t\telseif currentWave == 5 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_3:format(currentWave, 4, L.Ghoul, 6, L.Abomination, 4, L.Necromancer))\n\t\t\t\telseif currentWave == 6 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_2:format(currentWave, 8, L.Gargoyle, 1, L.Wyrm))\n\t\t\t\telseif currentWave == 7 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_3:format(currentWave, 6, L.Ghoul, 4, L.Abomination, 1, L.Wyrm))\n\t\t\t\telseif currentWave == 8 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_5:format(currentWave, 6, L.Ghoul, 2, L.Fiend, 4, L.Abomination, 2, L.Necromancer, 2, L.Banshee))\n\t\t\t\tend\n\t\t\telseif self.Options.DetailedWave and boss == 4 then\n\t\t\t\tif currentWave == 1 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_2:format(currentWave, 6, L.Abomination, 6, L.Necromancer))\n\t\t\t\telseif currentWave == 2 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_3:format(currentWave, 5, L.Ghoul, 8, L.Gargoyle, 1, L.Wyrm))\n\t\t\t\telseif currentWave == 3 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_2:format(currentWave, 6, L.Ghoul, 8, L.Infernal))\n\t\t\t\telseif currentWave == 4 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_2:format(currentWave, 6, L.Stalker, 8, L.Infernal))\n\t\t\t\telseif currentWave == 5 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_3:format(currentWave, 4, L.Abomination, 4, L.Necromancer, 6, L.Stalker))\n\t\t\t\telseif currentWave == 6 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_2:format(currentWave, 6, L.Necromancer, 6, L.Banshee))\n\t\t\t\telseif currentWave == 7 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_4:format(currentWave, 2, L.Ghoul, 2, L.Fiend, 2, L.Stalker, 8, L.Infernal))\n\t\t\t\telseif currentWave == 8 then\n\t\t\t\t\twarnWave:Show(L.WarnWave_5:format(currentWave, 4, L.Abomination, 4, L.Fiend, 2, L.Necromancer, 2, L.Stalker, 4, L.Banshee))\n\t\t\t\tend\n\t\t\telse\n\t\t\t\twarnWave:Show(L.WarnWave_0:format(currentWave))\n\t\t\tend\n\t\t\tself:SendSync(\"boss\", boss)\n\t\tend\n\t\ttimerWave:Start(timer)\n\t\tlastWave = currentWave\n\telseif lastWave > currentWave then\n\t\tif lastWave == 8 then\n\t\t\twarnWave:Show(bossNames[boss])\n\t\tend\n\t\ttimerWave:Cancel()\n\t\tlastWave = currentWave\n\tend\nend\n"
  },
  {
    "path": "DBM-Hyjal/localization.cn.lua",
    "content": "if GetLocale() ~= \"zhCN\" then return end\n\nlocal L\n\n------------------------\n--  Rage Winterchill  --\n------------------------\nL = DBM:GetModLocalization(\"Rage\")\n\nL:SetGeneralLocalization({\n\tname = \"雷基·冬寒\"\n})\n\n-----------------\n--  Anetheron  --\n-----------------\nL = DBM:GetModLocalization(\"Anetheron\")\n\nL:SetGeneralLocalization({\n\tname = \"安纳塞隆\"\n})\n\n----------------\n--  Kazrogal  --\n----------------\nL = DBM:GetModLocalization(\"Kazrogal\")\n\nL:SetGeneralLocalization({\n\tname = \"卡兹洛加\"\n})\n\n---------------\n--  Azgalor  --\n---------------\nL = DBM:GetModLocalization(\"Azgalor\")\n\nL:SetGeneralLocalization({\n\tname = \"阿兹加洛\"\n})\n\n------------------\n--  Archimonde  --\n------------------\nL = DBM:GetModLocalization(\"Archimonde\")\n\nL:SetGeneralLocalization({\n\tname = \"阿克蒙德\"\n})\n\n----------------\n-- WaveTimers --\n----------------\nL = DBM:GetModLocalization(\"HyjalWaveTimers\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"普通怪物\"\n})\n\nL:SetWarningLocalization({\n\tWarnWave\t= \"%s\",\n\tWarnWaveSoon= \"下一波敌人即将到来\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"Next wave\"--Translate\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t\t= \"Warn when a new wave is incoming\",--Translate\n\tWarnWaveSoon\t= \"Warn when a new wave is incoming soon\",--Translate\n\tDetailedWave\t= \"Detailed warning when a new wave is incoming (which mobs)\",--Translate\n\tTimerWave\t\t= \"Show a timer for next wave\"--Translate\n})\n\nL:SetMiscLocalization({\n\tHyjalZoneName\t= \"海加尔峰\",\n\tThrall\t\t\t= \"萨尔\",\n\tJaina\t\t\t= \"吉安娜·普罗德摩尔\",\n\tRageWinterchill\t= \"雷基·冬寒\",\n\tAnetheron\t\t= \"安纳塞隆\",\n\tKazrogal\t\t= \"卡兹洛加\",\n\tAzgalor\t\t\t= \"阿兹加洛\",\n\tWaveCheck\t\t= \"当前波次：(%d+)/8\",\n\tWarnWave_0\t\t= \"第%s/8波\",\n\tWarnWave_1\t\t= \"第%s/8波 - %s%s\",\n\tWarnWave_2\t\t= \"第%s/8波 - %s%s 和 %s%s\",\n\tWarnWave_3\t\t= \"第%s/8波 - %s%s, %s%s 和 %s%s\",\n\tWarnWave_4\t\t= \"第%s/8波 - %s%s, %s%s, %s%s 和 %s%s\",\n\tWarnWave_5\t\t= \"第%s/8波 - %s%s, %s%s, %s%s, %s%s 和 %s%s\",\n\tRageGossip\t\t= \"我和我的伙伴们将与您并肩作战，普罗德摩尔女士。\",\n\tAnetheronGossip\t= \"我们已经准备好对付阿克蒙德的任何爪牙了，普罗德摩尔女士。\",\n\tKazrogalGossip\t= \"我与你并肩作战，萨尔。\",\n\tAzgalorGossip\t= \"我们无所畏惧。\",\n\tGhoul\t\t\t= \"食尸鬼\",\n\tAbomination\t\t= \"憎恶\",\n\tNecromancer\t\t= \"亡灵巫师\",\n\tBanshee\t\t\t= \"女妖\",\n\tFiend\t\t\t= \"地穴恶魔\",\n\tGargoyle\t\t= \"石像鬼\",\n\tWyrm\t\t\t= \"冰霜巨龙\",\n\tStalker\t\t\t= \"恶魔猎犬\",\n\tInfernal\t\t= \"地狱火\"\n})\n"
  },
  {
    "path": "DBM-Hyjal/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n------------------------\n--  Rage Winterchill  --\n------------------------\nL = DBM:GetModLocalization(\"Rage\")\n\nL:SetGeneralLocalization({\n\tname = \"Furor Winterfrost\"\n})\n\n-----------------\n--  Anetheron  --\n-----------------\nL = DBM:GetModLocalization(\"Anetheron\")\n\nL:SetGeneralLocalization({\n\tname = \"Anetheron\"\n})\n\n----------------\n--  Kazrogal  --\n----------------\nL = DBM:GetModLocalization(\"Kazrogal\")\n\nL:SetGeneralLocalization({\n\tname = \"Kaz'rogal\"\n})\n\n---------------\n--  Azgalor  --\n---------------\nL = DBM:GetModLocalization(\"Azgalor\")\n\nL:SetGeneralLocalization({\n\tname = \"Azgalor\"\n})\n\n------------------\n--  Archimonde  --\n------------------\nL = DBM:GetModLocalization(\"Archimonde\")\n\nL:SetGeneralLocalization({\n\tname = \"Archimonde\"\n})\n\n----------------\n-- WaveTimers --\n----------------\nL = DBM:GetModLocalization(\"HyjalWaveTimers\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Wellen (HdZ 3)\"\n})\n\nL:SetWarningLocalization({\n\tWarnWave\t= \"%s\",\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"Nächste Welle\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t\t= \"Warne, wenn eine neue Welle kommt\",\n\tDetailedWave\t= \"Detaillierte Warnung, wenn eine neue Welle kommt (welche Mobs)\",\n\tTimerWave\t\t= \"Zeige Zeit bis nächste Welle\"\n})\n\nL:SetMiscLocalization({\n\tHyjalZoneName\t= \"Hyjalgipfel\",\n\tThrall\t\t\t= \"Thrall\",\n\tJaina\t\t\t= \"Lady Jaina Prachtmeer\",\n\tGeneralBoss\t\t= \"Boss kommt\",\n\tRageWinterchill\t= \"Furor Winterfrost kommt\",\n\tAnetheron\t\t= \"Anetheron kommt\",\n\tKazrogal\t\t= \"Kaz'rogal kommt\",\n\tAzgalor\t\t\t= \"Azgalor kommt\",\n\tWaveCheck\t\t= \"Derzeitige Welle = (%d+) von 8\",\n\tWarnWave_0\t\t= \"Welle %s/8\",\n\tWarnWave_1\t\t= \"Welle %s/8 - %s %s\",\n\tWarnWave_2\t\t= \"Welle %s/8 - %s %s und %s %s\",\n\tWarnWave_3\t\t= \"Welle %s/8 - %s %s, %s %s und %s %s\",\n\tWarnWave_4\t\t= \"Welle %s/8 - %s %s, %s %s, %s %s und %s %s\",\n\tWarnWave_5\t\t= \"Welle %s/8 - %s %s, %s %s, %s %s, %s %s und %s %s\",\n\tRageGossip\t\t= \"Meine Gefährten und ich werden Euch zur Seite stehen, Lady Prachtmeer.\",\n\tAnetheronGossip\t= \"Was auch immer Archimonde gegen uns ins Feld schicken mag, wir sind bereit, Lady Prachtmeer.\",\n\tKazrogalGossip\t= \"Ich werde Euch zur Seite stehen, Thrall!\",\n\tAzgalorGossip\t= \"Wir haben nichts zu befürchten.\",\n\tGhoul\t\t\t= \"Ghule\",\n\tAbomination\t\t= \"Monstrositäten\",\n\tNecromancer\t\t= \"Nekromanten\",\n\tBanshee\t\t\t= \"Banshees\",\n\tFiend\t\t\t= \"Gruftbestien\",\n\tGargoyle\t\t= \"Gargoyles\",\n\tWyrm\t\t\t= \"Frostwyrm\",\n\tStalker\t\t\t= \"Teufelspirscher\",\n\tInfernal\t\t= \"Höllenbestien\"\n})\n"
  },
  {
    "path": "DBM-Hyjal/localization.en.lua",
    "content": "local L\n\n------------------------\n--  Rage Winterchill  --\n------------------------\nL = DBM:GetModLocalization(\"Rage\")\n\nL:SetGeneralLocalization({\n\tname = \"Rage Winterchill\"\n})\n\n-----------------\n--  Anetheron  --\n-----------------\nL = DBM:GetModLocalization(\"Anetheron\")\n\nL:SetGeneralLocalization({\n\tname = \"Anetheron\"\n})\n\n----------------\n--  Kazrogal  --\n----------------\nL = DBM:GetModLocalization(\"Kazrogal\")\n\nL:SetGeneralLocalization({\n\tname = \"Kaz'rogal\"\n})\n\n---------------\n--  Azgalor  --\n---------------\nL = DBM:GetModLocalization(\"Azgalor\")\n\nL:SetGeneralLocalization({\n\tname = \"Azgalor\"\n})\n\n------------------\n--  Archimonde  --\n------------------\nL = DBM:GetModLocalization(\"Archimonde\")\n\nL:SetGeneralLocalization({\n\tname = \"Archimonde\"\n})\n\n----------------\n-- WaveTimers --\n----------------\nL = DBM:GetModLocalization(\"HyjalWaveTimers\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Wave Features\"\n})\n\nL:SetWarningLocalization({\n\tWarnWave\t= \"%s\",\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"Next wave\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t\t= \"Warn when a new wave is incoming\",\n\tDetailedWave\t= \"Detailed warning when a new wave is incoming (which mobs)\",\n\tTimerWave\t\t= \"Show a timer for next wave\"\n})\n\nL:SetMiscLocalization({\n\tHyjalZoneName\t= \"Hyjal Summit\",\n\tThrall\t\t\t= \"Thrall\",\n\tJaina\t\t\t= \"Lady Jaina Proudmoore\",\n\tGeneralBoss\t\t= \"Boss incoming\",\n\tRageWinterchill\t= \"Rage Winterchill incoming\",\n\tAnetheron\t\t= \"Anetheron incoming\",\n\tKazrogal\t\t= \"Kazrogal incoming\",\n\tAzgalor\t\t\t= \"Azgalor incoming\",\n\tWaveCheck\t\t= \"Current Wave = (%d+) of 8\",\n\tWarnWave_0\t\t= \"Wave %s/8\",\n\tWarnWave_1\t\t= \"Wave %s/8 - %s %s\",\n\tWarnWave_2\t\t= \"Wave %s/8 - %s %s and %s %s\",\n\tWarnWave_3\t\t= \"Wave %s/8 - %s %s, %s %s and %s %s\",\n\tWarnWave_4\t\t= \"Wave %s/8 - %s %s, %s %s, %s %s and %s %s\",\n\tWarnWave_5\t\t= \"Wave %s/8 - %s %s, %s %s, %s %s, %s %s and %s %s\",\n\tRageGossip\t\t= \"My companions and I are with you, Lady Proudmoore.\",\n\tAnetheronGossip\t= \"We are ready for whatever Archimonde might send our way, Lady Proudmoore.\",\n\tKazrogalGossip\t= \"I am with you, Thrall.\",\n\tAzgalorGossip\t= \"We have nothing to fear.\",\n\tGhoul\t\t\t= \"Ghouls\",\n\tAbomination\t\t= \"Abominations\",\n\tNecromancer\t\t= \"Necromancers\",\n\tBanshee\t\t\t= \"Banshees\",\n\tFiend\t\t\t= \"Crypt Fiends\",\n\tGargoyle\t\t= \"Gargoyles\",\n\tWyrm\t\t\t= \"Frost Wyrm\",\n\tStalker\t\t\t= \"Fel Stalkers\",\n\tInfernal\t\t= \"Infernals\"\n})\n"
  },
  {
    "path": "DBM-Hyjal/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\nlocal L\n\n------------------------\n--  Rage Winterchill  --\n------------------------\nL = DBM:GetModLocalization(\"Rage\")\n\nL:SetGeneralLocalization({\n\tname = \"Ira Fríoinvierno\"\n})\n\n-----------------\n--  Anetheron  --\n-----------------\nL = DBM:GetModLocalization(\"Anetheron\")\n\nL:SetGeneralLocalization({\n\tname = \"Anetheron\"\n})\n\n----------------\n--  Kazrogal  --\n----------------\nL = DBM:GetModLocalization(\"Kazrogal\")\n\nL:SetGeneralLocalization({\n\tname = \"Kaz'rogal\"\n})\n\n---------------\n--  Azgalor  --\n---------------\nL = DBM:GetModLocalization(\"Azgalor\")\n\nL:SetGeneralLocalization({\n\tname = \"Azgalor\"\n})\n\n------------------\n--  Archimonde  --\n------------------\nL = DBM:GetModLocalization(\"Archimonde\")\n\nL:SetGeneralLocalization({\n\tname = \"Archimonde\"\n})\n\n----------------\n-- WaveTimers --\n----------------\nL = DBM:GetModLocalization(\"HyjalWaveTimers\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Oleadas\"\n})\n\nL:SetWarningLocalization({\n\tWarnWave\t= \"%s\",\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"Siguiente oleada\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t\t= \"Mostrar aviso cuando se aproxime una oleada\",\n\tDetailedWave\t= \"Mostrar aviso detallado con los tipos y número de enemigos cuando se aproxime una oleada\",\n\tTimerWave\t\t= \"Mostrar temporizador para la siguiente oleada\"\n})\n\nL:SetMiscLocalization({\n\tHyjalZoneName\t= \"La Cima Hyjal\",\n\tThrall\t\t\t= \"Thrall\",\n\tJaina\t\t\t= \"Lady Jaina Valiente\",\n\tGeneralBoss\t\t= \"Se aproxima un jefe\",\n\tRageWinterchill\t= \"Se aproxima Ira Fríoinvierno\",\n\tAnetheron\t\t= \"Se aproxima Anetheron\",\n\tKazrogal\t\t= \"Se aproxima Kazrogal\",\n\tAzgalor\t\t\t= \"Se aproxima Azgalor\",\n\tWaveCheck\t\t= \"Oleada actual = (%d+) de 8\",\n\tWarnWave_0\t\t= \"Oleada %s/8\",\n\tWarnWave_1\t\t= \"Oleada %s/8 - %s %s\",\n\tWarnWave_2\t\t= \"Oleada %s/8 - %s %s y %s %s\",\n\tWarnWave_3\t\t= \"Oleada %s/8 - %s %s, %s %s y %s %s\",\n\tWarnWave_4\t\t= \"Oleada %s/8 - %s %s, %s %s, %s %s y %s %s\",\n\tWarnWave_5\t\t= \"Oleada %s/8 - %s %s, %s %s, %s %s, %s %s y %s %s\",\n\tRageGossip\t\t= \"Mis compañeros y yo estamos contigo, Lady Valiente.\",\n\tAnetheronGossip\t= \"Estamos listos para cualquier cosa que Archimonde nos mande, Lady Valiente.\",\n\tKazrogalGossip\t= \"Estoy contigo, Thrall.\",\n\tAzgalorGossip\t= \"No tenemos nada que temer.\",\n\tGhoul\t\t\t= \"Necrófagos\",\n\tAbomination\t\t= \"Abominaciones\",\n\tNecromancer\t\t= \"Nigromantes\",\n\tBanshee\t\t\t= \"Almas en pena\",\n\tFiend\t\t\t= \"Malignos de cripta\",\n\tGargoyle\t\t= \"Gárgolas\",\n\tWyrm\t\t\t= \"Vermis de escarcha\",\n\tStalker\t\t\t= \"Acechadores viles\",\n\tInfernal\t\t= \"Infernales\"\n})\n"
  },
  {
    "path": "DBM-Hyjal/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n------------------------\n--  Rage Winterchill  --\n------------------------\nL = DBM:GetModLocalization(\"Rage\")\n\nL:SetGeneralLocalization({\n\tname = \"격노한 윈터칠\"\n})\n\n-----------------\n--  Anetheron  --\n-----------------\nL = DBM:GetModLocalization(\"Anetheron\")\n\nL:SetGeneralLocalization({\n\tname = \"아네테론\"\n})\n\n----------------\n--  Kazrogal  --\n----------------\nL = DBM:GetModLocalization(\"Kazrogal\")\n\nL:SetGeneralLocalization({\n\tname = \"카즈로갈\"\n})\n\n---------------\n--  Azgalor  --\n---------------\nL = DBM:GetModLocalization(\"Azgalor\")\n\nL:SetGeneralLocalization({\n\tname = \"아즈갈로\"\n})\n\n------------------\n--  Archimonde  --\n------------------\nL = DBM:GetModLocalization(\"Archimonde\")\n\nL:SetGeneralLocalization({\n\tname = \"아키몬드\"\n})\n\n----------------\n-- WaveTimers --\n----------------\nL = DBM:GetModLocalization(\"HyjalWaveTimers\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"일반몹 구간\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"다음 공격\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t\t= \"다음 공격시 경고 보기\",\n\tDetailedWave\t= \"다음 공격의 상세 내역 경고 보기 (몹 구성)\",\n\tTimerWave\t\t= \"다음 공격 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tHyjalZoneName\t= \"하이잘 정상\",\n\tThrall\t\t\t= \"스랄\",\n\tJaina\t\t\t= \"제이나 프라우드무어\",\n\tGeneralBoss\t\t= \"우두머리 등장\",\n\tRageWinterchill\t= \"격노한 윈터칠 등장\",\n\tAnetheron\t\t= \"아네테론 등장\",\n\tKazrogal\t\t= \"카즈로갈 등장\",\n\tAzgalor\t\t\t= \"아즈갈로 등장\",\n\tWaveCheck\t\t= \"현재 공격 = (%d+)/8\",\n\tWarnWave_0\t\t= \"공격 %s/8\",\n\tWarnWave_1\t\t= \"공격 %s/8 - %s %s\",\n\tWarnWave_2\t\t= \"공격 %s/8 - %s %s, %s %s\",\n\tWarnWave_3\t\t= \"공격 %s/8 - %s %s, %s %s, %s %s\",\n\tWarnWave_4\t\t= \"공격 %s/8 - %s %s, %s %s, %s %s, %s %s\",\n\tWarnWave_5\t\t= \"공격 %s/8 - %s %s, %s %s, %s %s, %s %s, %s %s\",\n\tRageGossip\t\t= \"제 동료와 저는 프라우드무어 님, 당신과 함께하겠습니다.\",\n\tAnetheronGossip\t= \"아키몬드가 어떤 군대를 보내던 우리는 준비가 되어 있습니다, 프라우드무어 님.\",\n\tKazrogalGossip\t= \"당신과 함께하겠습니다, 대족장님.\",\n\tAzgalorGossip\t= \"두려워할 것은 아무것도 없습니다.\",\n\tGhoul\t\t\t= \"구울\",\n\tAbomination\t\t= \"누더기골렘\",\n\tNecromancer\t\t= \"강령술사\",\n\tBanshee\t\t\t= \"밴시\",\n\tFiend\t\t\t= \"지하마귀\",\n\tGargoyle\t\t= \"가고일\",\n\tWyrm\t\t\t= \"서리고룡\",\n\tStalker\t\t\t= \"지옥사냥개\",\n\tInfernal\t\t= \"지옥불정령\"\n})\n"
  },
  {
    "path": "DBM-Hyjal/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n------------------------\n--  Rage Winterchill  --\n------------------------\nL = DBM:GetModLocalization(\"Rage\")\n\nL:SetGeneralLocalization({\n\tname = \"Лютый Хлад\"\n})\n\n-----------------\n--  Anetheron  --\n-----------------\nL = DBM:GetModLocalization(\"Anetheron\")\n\nL:SetGeneralLocalization({\n\tname = \"Анетерон\"\n})\n\n----------------\n--  Kazrogal  --\n----------------\nL = DBM:GetModLocalization(\"Kazrogal\")\n\nL:SetGeneralLocalization({\n\tname = \"Каз'рогал\"\n})\n\n---------------\n--  Azgalor  --\n---------------\nL = DBM:GetModLocalization(\"Azgalor\")\n\nL:SetGeneralLocalization({\n\tname = \"Азгалор\"\n})\n\n------------------\n--  Archimonde  --\n------------------\nL = DBM:GetModLocalization(\"Archimonde\")\n\nL:SetGeneralLocalization({\n\tname = \"Архимонд\"\n})\n\n----------------\n-- WaveTimers --\n----------------\nL = DBM:GetModLocalization(\"HyjalWaveTimers\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Треш-мобы\"\n})\n\nL:SetWarningLocalization({\n\tWarnWave\t= \"%s\",\n\tWarnWaveSoon= \"Скоро следующая волна\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"Следующая волна\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t\t= \"Warn when a new wave is incoming\",--Translate\n\tWarnWaveSoon\t= \"Warn when a new wave is incoming soon\",--Translate\n\tDetailedWave\t= \"Detailed warning when a new wave is incoming (which mobs)\",--Translate\n\tTimerWave\t\t= \"Show a timer for next wave\"--Translate\n})\n\nL:SetMiscLocalization({\n\tHyjalZoneName\t= \"Вершина Хиджала\",\n\tThrall\t\t\t= \"Тралл\",\n\tJaina\t\t\t= \"Леди Джайна Праудмур\",\n\tRageWinterchill\t= \"Лютый Хлад\",\n\tAnetheron\t\t= \"Анетерон\",\n\tKazrogal\t\t= \"Каз'рогал\",\n\tAzgalor\t\t\t= \"Азгалор\",\n\tWaveCheck\t\t= \"Текущая атака: (%d+) из 8\",\n\tWarnWave_0\t\t= \"Волна %s/8\",\n\tWarnWave_1\t\t= \"Волна %s/8 - %s %s\",\n\tWarnWave_2\t\t= \"Волна %s/8 - %s %s и %s %s\",\n\tWarnWave_3\t\t= \"Волна %s/8 - %s %s, %s %s и %s %s\",\n\tWarnWave_4\t\t= \"Волна %s/8 - %s %s, %s %s, %s %s и %s %s\",\n\tWarnWave_5\t\t= \"Волна %s/8 - %s %s, %s %s, %s %s, %s %s и %s %s\",\n\tRageGossip\t\t= \"Мои спутники и я – с вами, леди Праудмур.\",\n\tAnetheronGossip\t= \"Мы готовы встретить любого, кого пошлет Архимонд, леди Праудмур.\",\n\tKazrogalGossip\t= \"Я с тобой, Тралл.\",\n\tAzgalorGossip\t= \"Нам нечего бояться.\",\n\tGhoul\t\t\t= \"Вурдалака\",\n\tAbomination\t\t= \"Поганища\",\n\tNecromancer\t\t= \"Некроманта\",\n\tBanshee\t\t\t= \"Банши\",\n\tFiend\t\t\t= \"Некрорахнида\",\n\tGargoyle\t\t= \"Горгульи\",\n\tWyrm\t\t\t= \"Ледяной змей\",\n\tStalker\t\t\t= \"Ловчих Скверны\",\n\tInfernal\t\t= \"Инфернала\"\n})\n"
  },
  {
    "path": "DBM-Hyjal/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\n\nlocal L\n\n------------------------\n--  Rage Winterchill  --\n------------------------\nL = DBM:GetModLocalization(\"Rage\")\n\nL:SetGeneralLocalization({\n\tname = \"瑞齊·凜冬\"\n})\n\n-----------------\n--  Anetheron  --\n-----------------\nL = DBM:GetModLocalization(\"Anetheron\")\n\nL:SetGeneralLocalization({\n\tname = \"安納塞隆\"\n})\n\n----------------\n--  Kazrogal  --\n----------------\nL = DBM:GetModLocalization(\"Kazrogal\")\n\nL:SetGeneralLocalization({\n\tname = \"卡茲洛加\"\n})\n\n---------------\n--  Azgalor  --\n---------------\nL = DBM:GetModLocalization(\"Azgalor\")\n\nL:SetGeneralLocalization({\n\tname = \"亞茲加洛\"\n})\n\n------------------\n--  Archimonde  --\n------------------\nL = DBM:GetModLocalization(\"Archimonde\")\n\nL:SetGeneralLocalization({\n\tname = \"阿克蒙德\"\n})\n\n----------------\n-- WaveTimers --\n----------------\nL = DBM:GetModLocalization(\"HyjalWaveTimers\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"小怪模組\"\n})\n\nL:SetWarningLocalization({\n\tWarnWave\t= \"%s\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"下一波\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t\t= \"當新一波進攻到來時顯示警告\",\n\tDetailedWave\t= \"當新一波進攻到來時顯示詳細警告(何種怪)\",\n\tTimerWave\t\t= \"為下一波進攻顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tHyjalZoneName\t= \"海加爾山\",\n\tThrall\t\t\t= \"索爾\",\n\tJaina\t\t\t= \"珍娜·普勞德摩爾女士\",\n\tGeneralBoss\t\t= \"首領到來\",\n\tRageWinterchill\t= \"瑞齊·凜冬到來\",\n\tAnetheron\t\t= \"安納塞隆到來\",\n\tKazrogal\t\t= \"卡茲洛加到來\",\n\tAzgalor\t\t\t= \"亞茲加洛到來\",\n\tWaveCheck\t\t= \"目前波數 = (%d+)/8\",\n\tWarnWave_0\t\t= \"第%s/8波\",\n\tWarnWave_1\t\t= \"第%s/8波 - %s %s\",\n\tWarnWave_2\t\t= \"第%s/8波 - %s %s 和 %s %s\",\n\tWarnWave_3\t\t= \"第%s/8波 - %s %s, %s %s 和 %s %s\",\n\tWarnWave_4\t\t= \"第%s/8波 - %s %s, %s %s, %s %s 和 %s %s\",\n\tWarnWave_5\t\t= \"第%s/8波 - %s %s, %s %s, %s %s, %s %s 和 %s %s\",\n\tRageGossip\t\t= \"我和我的同伴都與你同在，普勞德摩爾女士。\",\n\tAnetheronGossip\t= \"不管阿克蒙德要派誰來對付我們，我們都已經準備好了，普勞德摩爾女士。\",\n\tKazrogalGossip\t= \"我與你同在，索爾。\",\n\tAzgalorGossip\t= \"我們無所畏懼。\",\n\tGhoul\t\t\t= \"食屍鬼\",\n\tAbomination\t\t= \"憎惡\",\n\tNecromancer\t\t= \"死靈法師\",\n\tBanshee\t\t\t= \"女妖\",\n\tFiend\t\t\t= \"地穴惡魔\",\n\tGargoyle\t\t= \"石像鬼\",\n\tWyrm\t\t\t= \"冰龍\",\n\tStalker\t\t\t= \"惡魔捕獵者\",\n\tInfernal\t\t= \"巨型地獄火\"\n})\n"
  },
  {
    "path": "DBM-Icecrown/DBM-Icecrown.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Icecrown Citadel|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Eiskronenzitadelle|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Citadelle de la Couronne de glace|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0얼음왕관 성채|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Цитадель Ледяной Короны|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0冰冠城塞|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0冰冠堡垒|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Ciudadela de la Corona de Hielo|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Ciudadela de la Corona de Hielo|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMIcecrown_AllSavedVars\n## SavedVariablesPerCharacter: DBMIcecrown_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: WOTLK\n## X-DBM-StatTypes: normal,normal25,heroic,heroic25\n## X-DBM-Mod-SubCategories: The Lower Spire, The Plagueworks, The Crimson Hall, Frostwing Halls, The Frozen Throne, Trash\n## X-DBM-Mod-SubCategories-deDE: Die Untere Spitze, Die Seuchenwerke, Die Blutrote Halle, Die Frostschwingenhallen, Der Frostthron, Trash\n## X-DBM-Mod-SubCategories-frFR: La Flèche Inférieure, L'Atelier de la Peste, La Salle Cramoisie, Les salles de l'Aile de Glace, Le trône de Glace, Trash\n## X-DBM-Mod-SubCategories-zhTW: 城塞大門,瘟疫工坊, 赤紅大廳,霜翼大廳, 冰封王座, Trash\n## X-DBM-Mod-SubCategories-zhCN: 尖塔下层, 瘟疫工厂, 血色大厅, 霜翼之厅, 冰封王座, Trash\n## X-DBM-Mod-SubCategories-koKR: 성채 하층부, 역병작업장, 진홍빛 전당, 서리날개 전당, 얼어붙은 왕좌, 일반구간\n## X-DBM-Mod-SubCategories-ruRU: Шпиль, Чумодельня, Багровый зал, Зал Ледокрылых, Ледяной Трон, Trash\n## X-DBM-Mod-SubCategories-esES: La Ciudadela Inferior, Los Talleres de la Peste, La Sala Carmesí, Las Cámaras de Alaescarcha, El Trono Helado, Enemigos menores\n## X-DBM-Mod-SubCategories-esMX: La Ciudadela Inferior, Los Talleres de la Peste, La Sala Carmesí, Las Cámaras de Alaescarcha, El Trono Helado, Enemigos menores\n## X-DBM-Mod-Name: Icecrown Citadel\n## X-DBM-Mod-Name-deDE: Eiskronenzitadelle\n## X-DBM-Mod-Name-frFR: Citadelle de la Couronne de glace\n## X-DBM-Mod-Name-koKR: 얼음왕관 성채\n## X-DBM-Mod-Name-ruRU: Цитадель Ледяной Короны\n## X-DBM-Mod-Name-zhCN: 冰冠堡垒\n## X-DBM-Mod-Name-zhTW: 冰冠城塞\n## X-DBM-Mod-Name-esES: Ciudadela de la Corona de Hielo\n## X-DBM-Mod-Name-esMX: Ciudadela de la Corona de Hielo\n## X-DBM-Mod-Sort: 0\n## X-DBM-Mod-MapID: 605\n## X-DBM-Mod-LoadZone: Icecrown Citadel\n## X-DBM-Mod-LoadZone-deDE: Eiskronenzitadelle\n## X-DBM-Mod-LoadZone-frFR: Citadelle de la Couronne de glace\n## X-DBM-Mod-LoadZone-koKR: 얼음왕관 성채\n## X-DBM-Mod-LoadZone-ruRU: Цитадель Ледяной Короны\n## X-DBM-Mod-LoadZone-zhTW: 冰冠城塞\n## X-DBM-Mod-LoadZone-zhCN: 冰冠堡垒\n## X-DBM-Mod-LoadZone-esES: Ciudadela de la Corona de Hielo\n## X-DBM-Mod-LoadZone-esMX: Ciudadela de la Corona de Hielo\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.kr.lua\nlocalization.ru.lua\nlocalization.tw.lua\nlocalization.cn.lua\nlocalization.fr.lua\nlocalization.es.lua\nlocalization.mx.lua\n\nTrash.lua\nTheLowerSpire\\LordMarrowgar.lua\nTheLowerSpire\\Deathwhisper.lua\nTheLowerSpire\\GunshipBattle.lua\nTheLowerSpire\\Deathbringer.lua\nThePlagueworks\\Festergut.lua\nThePlagueworks\\Rotface.lua\nThePlagueworks\\Putricide.lua\nTheCrimsonHall\\BPCouncil.lua\nTheCrimsonHall\\Lanathel.lua\nFrostwingHalls\\Valithria.lua\nFrostwingHalls\\Sindragosa.lua\nTheFrozenThrone\\LichKing.lua\nTheFrozenThrone\\LichKingFrame.lua\nTheFrozenThrone\\LichKingFrame.xml\n"
  },
  {
    "path": "DBM-Icecrown/FrostwingHalls/Sindragosa.lua",
    "content": "local mod\t= DBM:NewMod(\"Sindragosa\", \"DBM-Icecrown\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20251101201015\")\nmod:SetCreatureID(36853)\nmod:SetEncounterID(855)\nmod:SetUsedIcons(1, 2, 3, 4, 5, 6)\nmod:SetHotfixNoticeRev(20241203000000)\nmod:SetMinSyncRevision(20241203000000)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 69649 71056 71057 71058 73061 73062 73063 73064 71077\",\n\t\"SPELL_CAST_SUCCESS 70117 69762\",\n\t\"SPELL_AURA_APPLIED 70126 69762 70106 69766 70127 72528 72529 72530\",\n\t\"SPELL_AURA_APPLIED_DOSE 70106 69766 70127 72528 72529 72530\",\n\t\"SPELL_AURA_REMOVED 69762 70157 70106 69766 70127 72528 72529 72530\",\n\t\"UNIT_HEALTH boss1\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal strupper = strupper\nlocal myRealm = select(3, DBM:GetMyPlayerInfo())\n\n-- General\nlocal berserkTimer\t\t\t\t= mod:NewBerserkTimer(myRealm == \"Frostmourne\" and 420 or 600) -- Lordaeron hardcore berserk timer removed (Warmane Changelog November 15th 2023 )\n\nmod:AddBoolOption(\"RangeFrame\", true) -- keep as BoolOption since the localization offers important information regarding boss ability and player debuff behaviour (Unchained Magic is Heroic only)\nmod:AddBoolOption(\"ClearIconsOnAirphase\", true) -- don't group with any spellId, it applies to all raid icons\n\n-- Stage One\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1))\nlocal warnAirphase\t\t\t\t= mod:NewAnnounce(\"WarnAirphase\", 2, 43810)\nlocal warnGroundphaseSoon\t\t= mod:NewAnnounce(\"WarnGroundphaseSoon\", 2, 43810)\nlocal warnPhase2soon\t\t\t= mod:NewPrePhaseAnnounce(2)\nlocal warnInstability\t\t\t= mod:NewCountAnnounce(69766, 2, nil, false)\nlocal warnChilledtotheBone\t\t= mod:NewCountAnnounce(70106, 2, nil, false)\nlocal warnFrostBeacon\t\t\t= mod:NewTargetNoFilterAnnounce(70126, 4)\nlocal warnFrostBreath\t\t\t= mod:NewSpellAnnounce(69649, 2, nil, \"Tank|Healer\")\nlocal warnUnchainedMagic\t\t= mod:NewTargetAnnounce(69762, 2, nil, \"SpellCaster\", 2)\n\nlocal specWarnUnchainedMagic\t= mod:NewSpecialWarningYou(69762, nil, nil, nil, 1, 2)\nlocal specWarnFrostBeacon\t\t= mod:NewSpecialWarningMoveAway(70126, nil, nil, nil, 3, 2)\nlocal specWarnFrostBeaconSide\t= mod:NewSpecialWarningMoveTo(70126, nil, nil, nil, 3, 2)\nlocal specWarnInstability\t\t= mod:NewSpecialWarningStack(69766, nil, mod:IsHeroic() and 4 or 8, nil, nil, 1, 6)\nlocal specWarnChilledtotheBone\t= mod:NewSpecialWarningStack(70106, nil, mod:IsHeroic() and 4 or 8, nil, nil, 1, 6)\nlocal specWarnBlisteringCold\t= mod:NewSpecialWarningRun(70123, nil, nil, nil, 4, 2)\n\nlocal timerNextAirphase\t\t\t= mod:NewTimer(110, \"TimerNextAirphase\", 43810, nil, nil, 6) -- Fixed timer on Air Yell: 110s\nlocal timerNextGroundphase\t\t= mod:NewTimer(44.2, \"TimerNextGroundphase\", 43810, nil, nil, 6) -- 0.4s variance (10H Lordaeron 2022/10/02 || 25H Lordaeron 2022/10/02 || 25H Lordaeron 2022/10/06) - 44.2; 44.2 || 44.2; 44.3, 44.6; 44.2 || 45.1\nlocal timerNextFrostBreath\t\t= mod:NewNextTimer(22, 69649, nil, \"Tank|Healer\", nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerNextBlisteringCold\t= mod:NewCDTimer(66, 70123, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON, true, 2) -- Added \"keep\" arg\nlocal timerNextBeacon\t\t\t= mod:NewNextCountTimer(16, 70126, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerBeaconIncoming\t\t= mod:NewTargetTimer(\"d7\", 70126, nil, nil, nil, 3) -- One incoming timer for each target\nlocal timerBlisteringCold\t\t= mod:NewCastTimer(6, 70123, nil, nil, nil, 2)\nlocal timerUnchainedMagic\t\t= mod:NewCDTimer(32, 69762, nil, nil, nil, 3) -- (25H Lordaeron 2022/07/09 || 10N Icecrown 2022/08/22 || 10N Icecrown 2022/08/25) - 32.0, 63.2, 32.1, 77.8, 32.1, 32.5, 31.9, 34.8 || 35.7, 58.4, 32.1, 77.9, 32.1, 78.6, 32.0, 32.0, 32.1 || 32.0, 62.1, 32.0, Stage 2/68.4, 9.9/78.3, 32.0\nlocal timerInstability\t\t\t= mod:NewBuffFadesTimer(5, 69766, nil, nil, nil, 5)\nlocal timerChilledtotheBone\t\t= mod:NewBuffFadesTimer(8, 70106, nil, nil, nil, 5)\nlocal timerTailSmash\t\t\t= mod:NewCDTimer(27.1, 71077, nil, nil, nil, 2, nil, nil, true) -- ~7s variance [27-34]? Added \"keep\" arg. (25H Lordaeron 2022/07/09 || 10N Icecrown 2022/08/25 || 25H Lordaeron 2022/10/14) - 28.7; 93.3, 30.6, 83.1, 29.2, 29.6, 29.6, 33.8; 29.2, 65.7, 30.8, 79.1, 27.9, 31.1, 27.9, 27.4; 29.7; 28.9, 64.7, 27.4, 84.3, 32.4, 30.0, 29.2 || 94.0, 31.5, Stage 2/59.0, 19.1/78.0, 31.9 || Stage 1/20.0, 28.9, Stage 1.5/1.1, Stage 1/44.3, 21.5/65.7/66.8, 28.7, Stage 1.5/15.6, Stage 1/45.0, Stage 2/20.0, 2.1/22.1/67.1/82.8, 27.2, 31.6, 29.6, 31.4\n\nlocal soundUnchainedMagic\t\t= mod:NewSoundYou(69762, nil, \"SpellCaster\")\n\nmod:AddSetIconOption(\"SetIconOnFrostBeacon\", 70126, true, 7, {1, 2, 3, 4, 5, 6})\nmod:AddSetIconOption(\"SetIconOnUnchainedMagic\", 69762, true, 0, {1, 2, 3, 4, 5, 6})\nmod:AddBoolOption(\"AnnounceFrostBeaconIcons\", false, nil, nil, nil, nil, 70126)\nmod:AddBoolOption(\"AssignWarnDirectionsCount\", true, nil, nil, nil, nil, 70126)\n\n-- Stage Two\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2))\nlocal warnPhase2\t\t\t\t= mod:NewPhaseAnnounce(2, 2, nil, nil, nil, nil, nil, 2)\nlocal warnMysticBuffet\t\t\t= mod:NewCountAnnounce(70128, 2, nil, false)\n\nlocal specWarnMysticBuffet\t\t= mod:NewSpecialWarningStack(70128, false, 5, nil, nil, 1, 6)\n\nlocal timerMysticBuffet\t\t\t= mod:NewBuffFadesTimer(8, 70128, nil, nil, nil, 5)\nlocal timerNextMysticBuffet\t\t= mod:NewNextTimer(6, 70128, nil, nil, nil, 2)\nlocal timerMysticAchieve\t\t= mod:NewAchievementTimer(30, 4620, \"AchievementMystic\")\n\nmod:AddBoolOption(\"AchievementCheck\", false, \"announce\", nil, nil, nil, 4620, \"achievement\")\n\nlocal beaconTargets\t\t= {}\nlocal unchainedTargets\t= {}\nmod.vb.warned_P2 = false\nmod.vb.warnedfailed = false\nmod.vb.unchainedIcons = 1\nmod.vb.beaconP2Count = 1\nlocal playerUnchained = false\nlocal playerBeaconed = false\n\nlocal directionIndex\nlocal DirectionAssignments = {DBM_COMMON_L.LEFT, DBM_COMMON_L.MIDDLE, DBM_COMMON_L.RIGHT}\nlocal DirectionVoiceAssignments\t= {\"left\", \"center\", \"right\"}\n\nlocal beaconDebuffFilter, unchainedDebuffFilter\ndo\n\tlocal beaconDebuff, unchainedDebuff = DBM:GetSpellInfo(70126), DBM:GetSpellInfo(69762)\n\tbeaconDebuffFilter = function(uId)\n\t\treturn DBM:UnitDebuff(uId, beaconDebuff)\n\tend\n\tunchainedDebuffFilter = function(uId)\n\t\treturn DBM:UnitDebuff(uId, unchainedDebuff)\n\tend\nend\n\nlocal function warnBeaconTargets(self)\n\tif self.Options.RangeFrame then\n\t\tif not playerBeaconed then\n\t\t\tDBM.RangeCheck:Show(10, beaconDebuffFilter, nil, nil, nil, 9)\n\t\telse\n\t\t\tDBM.RangeCheck:Show(10, nil, nil, nil, nil, 9)\n\t\tend\n\tend\n\tif self.Options.AssignWarnDirectionsCount then\n\t\tif self.vb.phase == 1.5 then\n\t\t\tif self:IsDifficulty(\"normal25\") then\n\t\t\t\t-- 5 beacons\n\t\t\t\twarnFrostBeacon:Show(\"\\n<   >\"..\n\t\t\t\tstrupper(DBM_COMMON_L.LEFT)\t\t..\": <\"..\"   >\"..(beaconTargets[1] or DBM_COMMON_L.UNKNOWN)..\"<, >\"..(beaconTargets[2] or DBM_COMMON_L.UNKNOWN)..\"<   >\\n\"..\"<   >\"..\n\t\t\t\tstrupper(DBM_COMMON_L.MIDDLE)\t..\": <\"..\"   >\"..(beaconTargets[3] or DBM_COMMON_L.UNKNOWN)..\"<   >\\n\"..\"<   >\"..\n\t\t\t\tstrupper(DBM_COMMON_L.RIGHT)\t..\": <\"..\"   >\"..(beaconTargets[4] or DBM_COMMON_L.UNKNOWN)..\"<, >\"..(beaconTargets[5] or DBM_COMMON_L.UNKNOWN))\n\t\t\telseif self:IsDifficulty(\"heroic25\") then\n\t\t\t\t-- 6 beacons\n\t\t\t\twarnFrostBeacon:Show(\"\\n<   >\"..\n\t\t\t\tstrupper(DBM_COMMON_L.LEFT)\t\t..\": <\"..\"   >\"..(beaconTargets[1] or DBM_COMMON_L.UNKNOWN)..\"<, >\"..(beaconTargets[2] or DBM_COMMON_L.UNKNOWN)..\"<   >\\n\"..\"<   >\"..\n\t\t\t\tstrupper(DBM_COMMON_L.MIDDLE)\t..\": <\"..\"   >\"..(beaconTargets[3] or DBM_COMMON_L.UNKNOWN)..\"<, >\"..(beaconTargets[4] or DBM_COMMON_L.UNKNOWN)..\"<   >\\n\"..\"<   >\"..\n\t\t\t\tstrupper(DBM_COMMON_L.RIGHT)\t..\": <\"..\"   >\"..(beaconTargets[5] or DBM_COMMON_L.UNKNOWN)..\"<, >\"..(beaconTargets[6] or DBM_COMMON_L.UNKNOWN))\n\t\t\telseif self:IsDifficulty(\"normal10\", \"heroic10\") then\n\t\t\t\t-- 2 beacons\n\t\t\t\twarnFrostBeacon:Show(\"\\n<   >\"..\n\t\t\t\tstrupper(DBM_COMMON_L.LEFT)\t\t..\": <\"..\"   >\"..(beaconTargets[1] or DBM_COMMON_L.UNKNOWN)..\"<   >\\n\"..\"<   >\"..\n\t\t\t\tstrupper(DBM_COMMON_L.RIGHT)\t..\": <\"..\"   >\"..(beaconTargets[2] or DBM_COMMON_L.UNKNOWN))\n\t\t\tend\n\t\telseif self.vb.phase == 2 then\n\t\t\twarnFrostBeacon:Show(beaconTargets[1]..\"< = >\"..self.vb.beaconP2Count - 1)\n\t\tend\n\telse\n\t\twarnFrostBeacon:Show(table.concat(beaconTargets, \"<, >\"))\n\tend\n\ttable.wipe(beaconTargets)\n\tplayerBeaconed = false\nend\n\nlocal function warnUnchainedTargets(self)\n\tif self.Options.RangeFrame and self:IsHeroic() then\n\t\tif not playerUnchained then\n\t\t\tDBM.RangeCheck:Show(21, unchainedDebuffFilter) -- 21.5 yd with new radar calculations. 21 here since radar code adds 0.5 to activeRange\n\t\telse\n\t\t\tDBM.RangeCheck:Show(21) -- 21.5 yd with new radar calculations. 21 here since radar code adds 0.5 to activeRange\n\t\tend\n\tend\n\twarnUnchainedMagic:Show(table.concat(unchainedTargets, \"<, >\"))\n\ttable.wipe(unchainedTargets)\n\tself.vb.unchainedIcons = 1\n\tplayerUnchained = false\nend\n\nlocal function directionBeaconTargets(self, index)\n\tif index then\n\t\tif self:IsDifficulty(\"normal25\") then\n\t\t\tif (index == 1 or index == 2) then directionIndex = 1\t\t--LEFT\n\t\t\telseif (index == 3) then directionIndex = 2\t\t\t\t\t--CENTER\n\t\t\telse directionIndex = 3 end\t\t\t\t\t\t\t\t\t--RIGHT\n\t\telseif self:IsDifficulty(\"heroic25\") then\n\t\t\tif (index == 1 or index == 2) then directionIndex = 1\t\t--LEFT\n\t\t\telseif (index == 3 or index == 4) then directionIndex = 2\t--CENTER\n\t\t\telse directionIndex = 3 end\t\t\t\t\t\t\t\t\t--RIGHT\n\t\telseif self:IsDifficulty(\"normal10\", \"heroic10\") then\n\t\t\tif index == 1 then directionIndex = 1\t\t\t\t\t\t--LEFT\n\t\t\telse directionIndex = 3 end\t\t\t\t\t\t\t\t\t--RIGHT\n\t\tend\n\t\tspecWarnFrostBeaconSide:Show(DirectionAssignments[directionIndex])\n\t\tspecWarnFrostBeaconSide:Play(DirectionVoiceAssignments[directionIndex] or \"scatter\")\n\tend\nend\n\nlocal function ResetRange(self)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:DisableBossMode()\n\tend\nend\n\n-- Warmane workaround, since there is no dedicated event for Sindragosa Landing Phase, and UNIT_TARGET boss1 only fires if Sindragosa is targeted or focused (sync'ed below)\nlocal function landingPhaseWorkaround(self, timeOffset)\n\tDBM:Debug(\"UNIT_TARGET boss1 didn't fire. Landing Phase scheduled\")\n\tself:SetStage(1)\n\ttimerUnchainedMagic:Start(10-timeOffset)\n\ttimerTailSmash:Start(19-timeOffset)\n\ttimerNextBlisteringCold:Start(34-timeOffset)\n\tself:UnregisterShortTermEvents()\nend\n\nlocal function cycleMysticBuffet(self)\n\ttimerNextMysticBuffet:Restart()\n\tself:Schedule(6, cycleMysticBuffet, self)\nend\n\nfunction mod:AnnounceBeaconIcons(uId, icon)\n\tif self.Options.AnnounceFrostBeaconIcons and DBM:IsInGroup() and DBM:GetRaidRank() > 1 then\n\t\tSendChatMessage(L.BeaconIconSet:format(icon, DBM:GetUnitFullName(uId)), DBM:IsInRaid() and \"RAID\" or \"PARTY\")\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tberserkTimer:Start(-delay)\n\ttimerNextAirphase:Start(50-delay)\n\ttimerNextBlisteringCold:Start(31.6-delay) -- ~10s variance [31.6-40] (10H Lordaeron 2022/10/02 || 25H Lordaeron 2022/10/02) - 37.5; 34.9 || 31.6; 36.4; 34.9; 34.9\n\ttimerTailSmash:Start(20-delay) -- (25H Lordaeron 2022/07/09 || 10N Icecrown 2022/08/22 || 10N Icecrown 2022/08/25 || 10H Lordaeron 2022/10/02 || 25H Lordaeron 2022/10/02) - 20.0 || 20.0 || 20.0 || 20.0; 20.0 || 20.0; 19.9; 20.0; 20.0\n\ttimerUnchainedMagic:Start(10-delay) -- (25H Lordaeron 2022/07/09 || 10N Icecrown 2022/08/22 || 10N Icecrown 2022/08/25) - 10.1 || 10.1 || 10.0\n\tself.vb.warned_P2 = false\n\tself.vb.warnedfailed = false\n\ttable.wipe(beaconTargets)\n\ttable.wipe(unchainedTargets)\n\tself.vb.unchainedIcons = 1\n\tself.vb.beaconP2Count = 1\n\tplayerUnchained = false\n\tplayerBeaconed = false\nend\n\nfunction mod:OnCombatEnd()\n\tself:UnregisterShortTermEvents()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(69649, 71056, 71057, 71058) or args:IsSpellID(73061, 73062, 73063, 73064) then--Frost Breath\n\t\twarnFrostBreath:Show()\n\t\ttimerNextFrostBreath:Start()\n\telseif args.spellId == 71077 then\n\t\ttimerTailSmash:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 70117 then--Icy Grip Cast, not blistering cold, but adds an extra 1sec to the warning\n\t\tspecWarnBlisteringCold:Show()\n\t\tspecWarnBlisteringCold:Play(\"runout\")\n\t\ttimerBlisteringCold:Start()\n\t\ttimerNextBlisteringCold:Start()\n\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:SetBossRange(25, self:GetBossUnitByCreatureId(36853))\n\t\t\tself:Schedule(5.5, ResetRange, self)\n\t\tend\n\telseif spellId == 69762 then\t-- Unchained Magic\n\t\ttimerUnchainedMagic:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 70126 then\n\t\ttimerBeaconIncoming:Start(args.destName)\n\t\tbeaconTargets[#beaconTargets + 1] = args.destName\n\t\tif args:IsPlayer() then\n\t\t\tplayerBeaconed = true\n\t\t\t-- Beacon Direction snippet\n\t\t\tif self.vb.phase == 1.5 and self.Options.SpecWarn70126moveto then\n\t\t\t\tfor i = 1, #beaconTargets do\n\t\t\t\t\tlocal targetName = beaconTargets[i]\n\t\t\t\t\tif targetName == DBM:GetMyPlayerInfo() then\n\t\t\t\t\t\tdirectionBeaconTargets(self, i)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tspecWarnFrostBeacon:Show()\n\t\t\t\tspecWarnFrostBeacon:Play(\"scatter\")\n\t\t\tend\n\t\tend\n\t\tif self.vb.phase == 2 then--Phase 2 there is only one icon/beacon, don't use sorting method if we don't have to.\n\t\t\tself.vb.beaconP2Count = self.vb.beaconP2Count + 1\n\t\t\ttimerNextBeacon:Start(16, self.vb.beaconP2Count)\n\t\t\tif self.Options.SetIconOnFrostBeacon then\n\t\t\t\tself:SetIcon(args.destName, 8)\n\t\t\t\tif self.Options.AnnounceFrostBeaconIcons and DBM:IsInGroup() and DBM:GetRaidRank() > 1 then\n\t\t\t\t\tSendChatMessage(L.BeaconIconSet:format(8, args.destName), DBM:IsInRaid() and \"RAID\" or \"PARTY\")\n\t\t\t\tend\n\t\t\tend\n\t\t\twarnBeaconTargets(self)\n\t\telse--Phase 1 air phase, multiple beacons\n\t\t\tlocal maxBeacon = self:IsDifficulty(\"heroic25\") and 6 or self:IsDifficulty(\"normal25\") and 5 or 2--Heroic 10 and normal 2 are both 2\n\t\t\tif self.Options.SetIconOnFrostBeacon then\n\t\t\t\tself:SetUnsortedIcon(0.3, args.destName, 1, maxBeacon, false, \"AnnounceBeaconIcons\") -- Unsorted, to match CLEU order, which is the one used for announce object. Roster sorting makes icons not reproducible\n\t\t\tend\n\t\t\tself:Unschedule(warnBeaconTargets)\n\t\t\tif #beaconTargets >= maxBeacon then\n\t\t\t\twarnBeaconTargets(self)\n\t\t\telse\n\t\t\t\tself:Schedule(0.3, warnBeaconTargets, self)\n\t\t\tend\n\t\tend\n\telseif spellId == 69762 then\n\t\tunchainedTargets[#unchainedTargets + 1] = args.destName\n\t\tif args:IsPlayer() then\n\t\t\tplayerUnchained = true\n\t\t\tspecWarnUnchainedMagic:Show()\n\t\t\tspecWarnUnchainedMagic:Play(\"targetyou\")\n\t\t\tsoundUnchainedMagic:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\unchained.mp3\")\n\t\tend\n\t\tif self.Options.SetIconOnUnchainedMagic then\n\t\t\tself:SetIcon(args.destName, self.vb.unchainedIcons)\n\t\tend\n\t\tself.vb.unchainedIcons = self.vb.unchainedIcons + 1\n\t\tself:Unschedule(warnUnchainedTargets)\n\t\tif #unchainedTargets >= 6 then\n\t\t\twarnUnchainedTargets(self)\n\t\telse\n\t\t\tself:Schedule(0.3, warnUnchainedTargets, self)\n\t\tend\n\telseif spellId == 70106 then\t--Chilled to the bone (melee)\n\t\tif args:IsPlayer() then\n\t\t\ttimerChilledtotheBone:Start()\n\t\t\tif (self:IsHeroic() and (args.amount or 1) >= 4) or (args.amount or 1) >= 8 then\n\t\t\t\tspecWarnChilledtotheBone:Show(args.amount)\n\t\t\t\tspecWarnChilledtotheBone:Play(\"stackhigh\")\n\t\t\telse\n\t\t\t\twarnChilledtotheBone:Show(args.amount or 1)\n\t\t\tend\n\t\tend\n\telseif spellId == 69766 then\t--Instability (casters)\n\t\tif args:IsPlayer() then\n\t\t\ttimerInstability:Start()\n\t\t\tif (self:IsHeroic() and (args.amount or 1) >= 4) or (args.amount or 1) >= 8 then\n\t\t\t\tspecWarnInstability:Show(args.amount)\n\t\t\t\tspecWarnInstability:Play(\"stackhigh\")\n\t\t\telse\n\t\t\t\twarnInstability:Show(args.amount or 1)\n\t\t\tend\n\t\tend\n\telseif args:IsSpellID(70127, 72528, 72529, 72530) then\t--Mystic Buffet (phase 2 - everyone)\n\t\tif args:IsPlayer() then\n\t\t\ttimerMysticBuffet:Start()\n--\t\t\ttimerNextMysticBuffet:Start()\n\t\t\tif (args.amount or 1) >= 5 then\n\t\t\t\tspecWarnMysticBuffet:Show(args.amount)\n\t\t\t\tspecWarnMysticBuffet:Play(\"stackhigh\")\n\t\t\telse\n\t\t\t\twarnMysticBuffet:Show(args.amount or 1)\n\t\t\tend\n\t\t\tif self.Options.AchievementCheck and not self.vb.warnedfailed and (args.amount or 1) < 2 then\n\t\t\t\ttimerMysticAchieve:Start()\n\t\t\tend\n\t\tend\n\t\tif args:IsDestTypePlayer() then\n\t\t\tif self.Options.AchievementCheck and DBM:GetRaidRank() > 0 and not self.vb.warnedfailed and self:AntiSpam(3) then\n\t\t\t\tif (args.amount or 1) == 5 then\n\t\t\t\t\tSendChatMessage(L.AchievementWarning:format(args.destName), \"RAID\")\n\t\t\t\telseif (args.amount or 1) > 5 then\n\t\t\t\t\tself.vb.warnedfailed = true\n\t\t\t\t\tSendChatMessage(L.AchievementFailed:format(args.destName, (args.amount or 1)), \"RAID_WARNING\")\n\t\t\t\tend\n\t\t\tend\n\t\t\tif self:AntiSpam(5, 2) then -- real time correction if any raid member receives the debuff in a 5 second window\n\t\t\t\tself:Unschedule(cycleMysticBuffet)\n\t\t\t\tcycleMysticBuffet(self)\n\t\t\tend\n\t\tend\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 69762 then\n\t\tif self.Options.SetIconOnUnchainedMagic then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\telseif spellId == 70157 then\n\t\tif self.Options.SetIconOnFrostBeacon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\telseif spellId == 70106 then\t--Chilled to the bone (melee)\n\t\tif args:IsPlayer() then\n\t\t\ttimerChilledtotheBone:Cancel()\n\t\tend\n\telseif spellId == 69766 then\t--Instability (casters)\n\t\tif args:IsPlayer() then\n\t\t\ttimerInstability:Cancel()\n\t\tend\n\telseif args:IsSpellID(70127, 72528, 72529, 72530) then\n\t\tif args:IsPlayer() then\n\t\t\ttimerMysticAchieve:Cancel()\n\t\t\ttimerMysticBuffet:Cancel()\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif not self.vb.warned_P2 and self:GetUnitCreatureId(uId) == 36853 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.38 then\n\t\tself.vb.warned_P2 = true\n\t\twarnPhase2soon:Show()\n\tend\nend\n\nfunction mod:UNIT_TARGET(uId)\n\t-- Attempt to catch when she lands by checking for Sindragosa's target being a raid member\n\tif UnitExists(uId..\"target\") then\n\t\tself:SendSync(\"SindragosaLanded\") -- Sync landing with raid since UNIT_TARGET:boss1 event requires Sindragosa to be target/focus, which not all members do\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif (msg == L.YellAirphase or msg:find(L.YellAirphase)) or (msg == L.YellAirphaseDem or msg:find(L.YellAirphaseDem)) then\n\t\tif self.Options.ClearIconsOnAirphase then\n\t\t\tself:ClearIcons()\n\t\tend\n\t\tself:SetStage(1.5)\n\t\twarnAirphase:Show()\n\t\ttimerNextFrostBreath:Cancel()\n\t\ttimerUnchainedMagic:Cancel()\n\t\ttimerNextBlisteringCold:Cancel()\n\t\ttimerTailSmash:Cancel()\n\t\ttimerNextAirphase:Start()\n\t\ttimerNextGroundphase:Start()\n\t\twarnGroundphaseSoon:Schedule(37.5)\n\t\tself:Schedule(45.2, landingPhaseWorkaround, self, 1) -- giving a 0.2s cushion from 45s (max I have on logs is 45.1s). 1s comes from 45.2-44.2s from ground timer\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"UNIT_TARGET boss1\"\n\t\t)\n\telseif (msg == L.YellPhase2 or msg:find(L.YellPhase2)) or (msg == L.YellPhase2Dem or msg:find(L.YellPhase2Dem)) then\n\t\tself:SetStage(2)\n\t\twarnPhase2:Show()\n\t\twarnPhase2:Play(\"ptwo\")\n\t\ttimerNextBeacon:Start(7, 1) -- no need to use self.vb.beaconP2Count here since it will always be one on this timer\n\t\ttimerNextAirphase:Cancel()\n\t\ttimerNextGroundphase:Cancel()\n\t\twarnGroundphaseSoon:Cancel()\n\t\ttimerNextBlisteringCold:Restart(35) -- Fixed timer: 35s (25H Lordaeron 2024/11/28) - 35.03\n\t\ttimerNextMysticBuffet:Start()\n\t\tself:Schedule(6, cycleMysticBuffet, self)\n\t\tself:Unschedule(landingPhaseWorkaround)\n\t\tself:UnregisterShortTermEvents() -- REVIEW! not sure it's needed, but doesn't hurt. Would need validation on event order when boss is intermissioned with health right above phase 2 threshold, to check which of the events come first (TARGET or YELL)\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif not self:IsInCombat() then return end\n\tif msg == \"SindragosaLanded\" and self:GetStage(1.5) then\n\t\tself:Unschedule(landingPhaseWorkaround)\n\t\tself:SetStage(1)\n\t\ttimerUnchainedMagic:Start(10) -- (10H Lordaeron 2022/10/02 || 25H Lordaeron 2022/10/02) - 10.0; 10.0 || 10.0; 10.0, 10.0; 10.0\n\t\ttimerTailSmash:Start(19) -- ~5s variance [19-23.8]? (10N Icecrown 2022/08/25 || 10H Lordaeron 2022/10/02 || 25H Lordaeron 2022/10/02) - 19.0 || 21.4; 21.9 || 21.4; 23.8, 22.6; 22.2\n\t\ttimerNextBlisteringCold:Start(34) -- 6s variance [34-40]? (10H Lordaeron 2022/10/02 || 25H Lordaeron 2022/10/02) - 34.0; 34.0 || 34.0; 34.0; 34.0\n\t\tself:UnregisterShortTermEvents()\n\tend\nend\n"
  },
  {
    "path": "DBM-Icecrown/FrostwingHalls/Valithria.lua",
    "content": "local mod\t= DBM:NewMod(\"Valithria\", \"DBM-Icecrown\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(36789)\nmod:SetEncounterID(854)\nmod:SetUsedIcons(8)\nmod.onlyHighest = true--Instructs DBM health tracking to literally only store highest value seen during fight, even if it drops below that\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 70754 71748 72023 72024 71189\",\n\t\"SPELL_CAST_SUCCESS 71179 71741 70588\",\n\t\"SPELL_AURA_APPLIED 70633 71283 72025 72026 70751 71738 72022 72023 69325 71730 70873 71941\",\n\t\"SPELL_AURA_APPLIED_DOSE 70751 71738 72022 72023 70873 71941\",\n\t\"SPELL_AURA_REMOVED 70633 71283 72025 72026 69325 71730 70873 71941\",\n\t\"SPELL_DAMAGE 71086 71743 71086 72030\",\n\t\"SPELL_MISSED 71086 71743 71086 72030\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1\"\n)\n\nlocal warnCorrosion\t\t\t= mod:NewStackAnnounce(70751, 2, nil, false)\nlocal warnGutSpray\t\t\t= mod:NewTargetAnnounce(70633, 3, nil, \"Tank|Healer\")\nlocal warnManaVoid\t\t\t= mod:NewSpellAnnounce(71179, 2, nil, \"ManaUser\")\nlocal warnSupression\t\t= mod:NewSpellAnnounce(70588, 3)\nlocal warnPortalSoon\t\t= mod:NewSoonAnnounce(72483, 2, nil)\nlocal warnPortal\t\t\t= mod:NewCountAnnounce(72483, 3, nil)\nlocal warnPortalOpen\t\t= mod:NewAnnounce(\"WarnPortalOpen\", 4, 72483, nil, nil, nil, 72483)\n\nlocal specWarnGutSpray\t\t= mod:NewSpecialWarningDefensive(70633, nil, nil, nil, 1, 2)\nlocal specWarnLayWaste\t\t= mod:NewSpecialWarningSpell(69325, nil, nil, nil, 2, 2)\nlocal specWarnGTFO\t\t\t= mod:NewSpecialWarningGTFO(71179, nil, nil, nil, 1, 8)\nlocal specWarnSuppressers\t= mod:NewSpecialWarningSpell(70935)\n\nlocal timerLayWaste\t\t\t= mod:NewBuffActiveTimer(12, 69325, nil, nil, nil, 2)\nlocal timerNextPortal\t\t= mod:NewCDCountTimer(45, 72483, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON) -- ~3s variance. (25H Lordearon 2022/10/06 || 25H Lordearon 2022/10/09) - pull:45.0, 45.6, 47.9, 46.6 || pull:45.4, 45.4, 45.1, 46.5\nlocal timerPortalsOpen\t\t= mod:NewTimer(15, \"TimerPortalsOpen\", 72483, nil, nil, 6, nil, nil, nil, nil, nil, nil, nil, 72483)\nlocal timerPortalsClose\t\t= mod:NewTimer(10, \"TimerPortalsClose\", 72483, nil, nil, 6, nil, nil, nil, nil, nil, nil, nil, 72483)\nlocal timerHealerBuff\t\t= mod:NewBuffFadesTimer(40, 70873, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON)\nlocal timerGutSpray\t\t\t= mod:NewBuffFadesTimer(12, 70633, nil, \"Tank|Healer\", nil, 5)\nlocal timerCorrosion\t\t= mod:NewBuffFadesTimer(6, 70751, nil, false, nil, 3)\nlocal timerBlazingSkeleton\t= mod:NewNextTimer(50, 70933, \"TimerBlazingSkeleton\", nil, nil, 1, 17204)\nlocal timerAbom\t\t\t\t= mod:NewNextCountTimer(50, 70922, \"TimerAbom\", nil, nil, 1)\nlocal timerSuppressers\t\t= mod:NewNextCountTimer(60, 70935, nil, nil, nil, 1)\n\nlocal soundSpecWarnSuppressers\t= mod:NewSound(70935)\n\nlocal berserkTimer\t\t\t= mod:NewBerserkTimer(420)\n\nmod:AddSetIconOption(\"SetIconOnBlazingSkeleton\", 70933, true, 5, {8})\n\nmod.vb.BlazingSkeletonTimer = 60\nmod.vb.AbomSpawn = 0\nmod.vb.AbomTimer = 60\nmod.vb.SuppressersWave = 0\nmod.vb.portalCount = 0\nlocal portalNameN = GetSpellInfo(71305)\nlocal portalNameH = GetSpellInfo(71987)\n\nlocal function Suppressers(self)\n\tself.vb.SuppressersWave = self.vb.SuppressersWave + 1\n\tif self.vb.SuppressersWave == 2 then\n\t\ttimerSuppressers:Stop()\n\t\ttimerSuppressers:Start(58, self.vb.SuppressersWave)\n\t\tspecWarnSuppressers:Cancel()\n\t\tspecWarnSuppressers:Schedule(58)\n\t\tsoundSpecWarnSuppressers:Schedule(58, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\suppressersSpawned.mp3\")\n\t\tself:Unschedule(Suppressers)\n\t\tself:Schedule(58, Suppressers, self)\n\telseif self.vb.SuppressersWave == 3 then\n\t\ttimerSuppressers:Stop()\n\t\ttimerSuppressers:Start(56, self.vb.SuppressersWave)\n\t\tspecWarnSuppressers:Cancel()\n\t\tspecWarnSuppressers:Schedule(56)\n\t\tsoundSpecWarnSuppressers:Schedule(56, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\suppressersSpawned.mp3\")\n\t\tself:Unschedule(Suppressers)\n\t\tself:Schedule(56, Suppressers, self)\n\telseif self.vb.SuppressersWave == 4 then\n\t\ttimerSuppressers:Stop()\n\t\ttimerSuppressers:Start(50, self.vb.SuppressersWave)\n\t\tspecWarnSuppressers:Cancel()\n\t\tspecWarnSuppressers:Schedule(50)\n\t\tsoundSpecWarnSuppressers:Schedule(50, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\suppressersSpawned.mp3\")\n\t\tself:Unschedule(Suppressers)\n\t\tself:Schedule(50, Suppressers, self)\n\telseif self.vb.SuppressersWave > 4 then -- using dummy values since I have no Warmane VODs past 4 waves.\n\t\ttimerSuppressers:Stop()\n\t\ttimerSuppressers:Start(50, self.vb.SuppressersWave)\n\t\tspecWarnSuppressers:Cancel()\n\t\tspecWarnSuppressers:Schedule(50)\n\t\tsoundSpecWarnSuppressers:Schedule(50, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\suppressersSpawned.mp3\")\n\t\tself:Unschedule(Suppressers)\n\t\tself:Schedule(50, Suppressers, self)\n\tend\nend\n\nlocal function StartBlazingSkeletonTimer(self)\n\ttimerBlazingSkeleton:Start(self.vb.BlazingSkeletonTimer)\n\tself:Schedule(self.vb.BlazingSkeletonTimer, StartBlazingSkeletonTimer, self)\n\tif self.vb.BlazingSkeletonTimer >= 10 then--Keep it from dropping below 5\n\t\tself.vb.BlazingSkeletonTimer = self.vb.BlazingSkeletonTimer - 5\n\tend\nend\n\nlocal function StartAbomTimer(self)\n\tself.vb.AbomSpawn = self.vb.AbomSpawn + 1\n\tif self.vb.AbomSpawn == 1 then\n\t\ttimerAbom:Start(self.vb.AbomTimer, self.vb.AbomSpawn + 1)--Timer is 60 seconds after first early abom, it's set to 60 on combat start.\n\t\tself:Schedule(self.vb.AbomTimer, StartAbomTimer, self)\n\t\tself.vb.AbomTimer = self.vb.AbomTimer - 5--Right after second abom timer starts, change it from 60 to 55.\n\telseif self.vb.AbomSpawn == 2 or self.vb.AbomSpawn == 3 then\n\t\ttimerAbom:Start(self.vb.AbomTimer, self.vb.AbomSpawn + 1)--Start first and second 55 second timer (third and fourth abom spawn)\n\t\tself:Schedule(self.vb.AbomTimer, StartAbomTimer, self)\n\telseif self.vb.AbomSpawn >= 4 then--after 4th abom, the timer starts subtracting again.\n\t\ttimerAbom:Start(self.vb.AbomTimer, self.vb.AbomSpawn + 1)--Start third 55 second timer before subtracting from it again.\n\t\tself:Schedule(self.vb.AbomTimer, StartAbomTimer, self)\n\t\tif self.vb.AbomTimer >= 10 then--Keep it from dropping below 5\n\t\t\tself.vb.AbomTimer = self.vb.AbomTimer - 5--Rest of timers after 3rd 55 second timer will be 5 less than previous until they come every 5 seconds.\n\t\tend\n\tend\nend\n\nlocal function Portals(self)\n\tself.vb.portalCount = self.vb.portalCount + 1\n\twarnPortal:Show(self.vb.portalCount)\n\twarnPortalOpen:Cancel()\n\ttimerPortalsOpen:Cancel()\n\twarnPortalSoon:Cancel()\n\twarnPortalOpen:Schedule(15)\n\ttimerPortalsOpen:Start()\n\ttimerPortalsClose:Schedule(15)\n\twarnPortalSoon:Schedule(40)\n\ttimerNextPortal:Start(nil, self.vb.portalCount+1)\n--\tself:Unschedule(Portals)\n--\tself:Schedule(45.4, Portals, self)--This will never be perfect, since it's never same. 45-48sec variations\nend\n\n-- archmage (all times relative to combat start): 45, 75\n-- zombie: 65,\nfunction mod:OnCombatStart(delay)\n\tif self:IsHeroic() then\n\t\tberserkTimer:Start(-delay)\n\tend\n\tself.vb.portalCount = 0\n\ttimerNextPortal:Start(nil, 1) -- Hardcode 1 on combatStart, there's no need to calculate self.vb.portalCount+1\n\twarnPortalSoon:Schedule(40)\n--\tself:Schedule(45.4, Portals, self)--This will never be perfect, since it's never same. 45-48sec variations\n\tself.vb.BlazingSkeletonTimer = 60\n\tself.vb.AbomTimer = 60\n\tself.vb.AbomSpawn = 0\n\ttimerBlazingSkeleton:Start(53-delay)\n\tself:Schedule(53-delay, StartBlazingSkeletonTimer, self)\n\ttimerAbom:Start(22-delay, 1) -- Hardcode 1 on combatStart, there's no need to calculate self.vb.AbomSpawn+1\n\tself:Schedule(22-delay, StartAbomTimer, self)\n\tself.vb.SuppressersWave = 1\n\ttimerSuppressers:Start(28-delay, self.vb.SuppressersWave)\n\tspecWarnSuppressers:Schedule(28)\n\tsoundSpecWarnSuppressers:Schedule(28, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\suppressersSpawned.mp3\")\n\tself:Schedule(28, Suppressers, self)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif args:IsSpellID(70754, 71748, 72023, 72024) then--Fireball (its the first spell Blazing SKeleton's cast upon spawning)\n\t\tif self.Options.SetIconOnBlazingSkeleton then\n\t\t\tself:ScanForMobs(args.sourceGUID, 2, 8, 1, nil, 12, \"SetIconOnBlazingSkeleton\")\n\t\tend\n\telseif spellId == 71189 then\n\t\tDBM:EndCombat(self)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif args:IsSpellID(71179, 71741) then--Mana Void\n\t\twarnManaVoid:Show()\n\telseif spellId == 70588 and self:AntiSpam(5, 1) then--Supression\n\t\twarnSupression:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(70633, 71283, 72025, 72026) and args:IsDestTypePlayer() then--Gut Spray\n\t\ttimerGutSpray:Start(args.destName)\n\t\twarnGutSpray:CombinedShow(0.3, args.destName)\n\t\tif args:IsPlayer() and self:IsTank() then\n\t\t\tspecWarnGutSpray:Show()\n\t\t\tspecWarnGutSpray:Play(\"defensive\")\n\t\tend\n\telseif args:IsSpellID(70751, 71738, 72022, 72023) and args:IsDestTypePlayer() then--Corrosion\n\t\twarnCorrosion:Show(args.destName, args.amount or 1)\n\t\ttimerCorrosion:Start(args.destName)\n\telseif args:IsSpellID(69325, 71730) then--Lay Waste\n\t\tspecWarnLayWaste:Show()\n\t\tspecWarnLayWaste:Play(\"aesoon\")\n\t\ttimerLayWaste:Start()\n\telseif args:IsSpellID(70873, 71941) and args:IsPlayer() then\t--Emerald Vigor/Twisted Nightmares (portal healers)\n\t\ttimerHealerBuff:Stop()\n\t\ttimerHealerBuff:Start()\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(70633, 71283, 72025, 72026) then--Gut Spray\n\t\ttimerGutSpray:Cancel(args.destName)\n\telseif args:IsSpellID(69325, 71730) then--Lay Waste\n\t\ttimerLayWaste:Cancel()\n\telseif args:IsSpellID(70873, 71941) and args:IsPlayer() then\t--Emerald Vigor/Twisted Nightmares (portal healers)\n\t\ttimerHealerBuff:Stop()\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, spellId, spellName)\n\tif (spellId == 71086 or spellId == 71743 or spellId == 71086 or spellId == 72030) and destGUID == UnitGUID(\"player\") and self:AntiSpam(2, 2) then\t\t-- Mana Void\n\t\tspecWarnGTFO:Show(spellName)\n\t\tspecWarnGTFO:Play(\"watchfeet\")\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif (spellName == portalNameN or spellName == portalNameH) and self:AntiSpam(2, 3) then -- Summon Dream Portal / Summon Nightmare Portal\n\t\tPortals(self)\n\tend\nend\n\n-- I have multiple logs where Yell event is missing due to a bad flag in the SQL, most likely. Best to use boss1 unit events that have proven to be reliable for Warmane, which is also much more efficient\n--[[function mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif (msg == L.YellPortals or msg:find(L.YellPortals)) and self:LatencyCheck() then\n\t\tself:SendSync(\"NightmarePortal\")\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif msg == \"NightmarePortal\" and self:IsInCombat() then\n\t\tself:Unschedule(Portals)\n\t\tPortals(self)\n\tend\nend]]\n"
  },
  {
    "path": "DBM-Icecrown/TheCrimsonHall/BPCouncil.lua",
    "content": "local mod\t= DBM:NewMod(\"BPCouncil\", \"DBM-Icecrown\", 3)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20251101191900\")\nmod:SetCreatureID(37970, 37972, 37973)\nmod:SetEncounterID(852)\nmod:SetUsedIcons(1, 5, 6, 7, 8)\nmod:SetBossHPInfoToHighest()\nmod:SetMinSyncRevision(20220908000000)\n\nmod:SetBossHealthInfo(\n\t37972, L.Keleseth,\n\t37970, L.Valanar,\n\t37973, L.Taldaram\n)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 72037 72039 73037 73038 73039 71718 72040\",\n\t\"SPELL_AURA_APPLIED 70952 70981 70982 72999 71807 72796 72797 72798 71822\",\n\t\"SPELL_AURA_APPLIED_DOSE 72999\",\n\t\"SPELL_AURA_REMOVED 71822\",\n\t\"SPELL_SUMMON 71943\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1 boss2 boss3\"\n)\n\nlocal myRealm = select(3, DBM:GetMyPlayerInfo())\n\n-- General\nlocal warnTargetSwitch\t\t\t= mod:NewAnnounce(\"WarnTargetSwitch\", 3, 70952)\nlocal warnTargetSwitchSoon\t\t= mod:NewAnnounce(\"WarnTargetSwitchSoon\", 2, 70952)\n\nlocal timerCombatStart\t\t\t= mod:NewCombatTimer(29) -- Roleplay for first pull\nlocal timerTargetSwitch\t\t\t= mod:NewTimer(46.5, \"TimerTargetSwitch\", 70952) -- REVIEW! ~0.2s variance [46.42-46.60], with 46.0/46.2 outliers. Since these outliers are very rare, I prefer keeping this timer as the most probable cd seen in the logs\nlocal berserkTimer\t\t\t\t= mod:NewBerserkTimer((myRealm == \"Lordaeron\" or myRealm == \"Frostmourne\") and 360 or 600)\n\nmod:AddSetIconOption(\"ActivePrinceIcon\", nil, false, 5, {8})\n\n-- Shadow Prison\nlocal specWarnShadowPrison\t\t= mod:NewSpecialWarningStack(72999, nil, 6, nil, nil, 1, 6, 3)\n\nlocal timerShadowPrison\t\t\t= mod:NewBuffFadesTimer(10, 72999, nil, nil, nil, 5) -- Hard mode debuff\n\nmod:AddBoolOption(\"ShadowPrisonMetronome\", false, \"misc\", nil, nil, nil, 72999)\n\n-- Kinetic Bomb\nlocal warnKineticBomb\t\t\t= mod:NewSpellAnnounce(72053, 3, nil, false)\n\nlocal specWarnKineticBomb\t\t= mod:NewSpecialWarningCount(72053, \"Ranged\", nil, nil, 1)\n\nlocal timerKineticBombCD\t\t= mod:NewCDCountTimer(18, 72053, nil, \"Ranged\", nil, 1, nil, nil, true) -- ~6s variance [18.0-23.9] Added \"keep\" arg. (10N Icecrown 2022/08/25 || 25H Lordaeron 2022/12/07 || 25H Lordaeron [2023-08-23]@[21:05:58]) - 19.2, 23.6, 22.2, 18.5, 19.2 || 18.5, 18.3, 22.1, 19.2, 20.8, 20.4, 19.7, 21.6, 20.9, 19.5, 20.5 || pull:19.8, 23.9, 21.9, 19.6, 21.4, 23.9, 18.5, 22.0, 18.5, 21.9, 21.6\n\nlocal soundKineticBomb\t\t\t= mod:NewSound(72053, nil, \"Ranged\")\n\nmod:AddSetIconOption(\"SetIconOnKineticBomb\", 72053, true, true, {5, 6, 7})\n\n-- Prince Valanar\nmod:AddTimerLine(L.Valanar)\nlocal warnShockVortex\t\t\t= mod:NewTargetAnnounce(72037, 3)\t\t\t\t-- 1,5sec cast\n\nlocal specWarnVortex\t\t\t= mod:NewSpecialWarningYou(72037, nil, nil, nil, 1, 2)\nlocal yellVortex\t\t\t\t= mod:NewYellMe(72037)\nlocal specWarnVortexNear\t\t= mod:NewSpecialWarningClose(72037, nil, nil, nil, 1, 2)\nlocal specWarnEmpoweredShockV\t= mod:NewSpecialWarningMoveAway(72039, nil, nil, nil, 1, 2)\n\nlocal timerShockVortex\t\t\t= mod:NewCDTimer(18.2, 72037, nil, nil, nil, 3, nil, nil, true) -- ~5s variance [18.2 - 22.7]. Added \"keep\" arg. (2 Warmane 2021 logs || 25H Lordaeron 2022/07/09 || 10N Icecrown 2022/08/25 || 25H Lordaeron 2022/09/07 || 25H Lordaeron 2022/10/21) - 19-22s || 20.3, 22.6, 21.3, 19.6, ..., 19.4, 19.7 || 18.5, 18.6 || pull:76.0 (Empowered 30.1), 18.4, 19.4, 22.0, 19.7, 22.7 || pull:76.3 (Empowered 16.3 + 30.0), 19.9, 18.2, 22.2\nlocal timerEmpoweredShockVortex\t= mod:NewCDTimer(30, 72039, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON, true) -- Added \"keep\" arg. (25H Lordaeron 2022/09/07) - pull:15.9, 30.0, 152.4 (20.1 non-empowered)\n\nlocal soundSpecWarnVortexNear\t= mod:NewSoundClose(72037)\nlocal soundEmpoweredShockV\t\t= mod:NewSound(72039)\n\nmod:AddRangeFrameOption(12, 72039)\nmod:AddArrowOption(\"VortexArrow\", 72037, true)\n\n-- Prince Taldaram\nmod:AddTimerLine(L.Taldaram)\nlocal warnConjureFlames\t\t\t= mod:NewCastAnnounce(71718, 2)\nlocal warnEmpoweredFlamesCast\t= mod:NewCastAnnounce(72040, 3)\nlocal warnEmpoweredFlames\t\t= mod:NewTargetNoFilterAnnounce(72040, 4)\nlocal warnGliteringSparks\t\t= mod:NewTargetAnnounce(71807, 2, nil, false)\n\nlocal specWarnEmpoweredFlames\t= mod:NewSpecialWarningRun(72040, nil, nil, nil, 4, 2)\nlocal yellEmpoweredFlames\t\t= mod:NewYellMe(72040)\n\nlocal timerConjureFlamesCD\t\t= mod:NewCDTimer(15.3, 71718, nil, nil, nil, 3, nil, nil, true) -- normal + empowered. REVIEW! ~13s variance [15.3-29.4]. Added \"keep\" arg (25H Lordaeron 2022/09/07 || 25H Lordaeron 2022/10/09 || 25H Lordaeron 2022/10/21) -- 20.0, 29.4, 24.3, 18.0, 23.5, 21.3, 27.6, 20.5, 22.3 || 20.0, 29.9, 22.0, 17.7, 24.6, 29.1, 29.9 || pull:76.3, 19.9, 18.2, 22.2 (Empowered: pull:93.8, 18.7, 15.3)\nlocal timerGlitteringSparksCD\t= mod:NewVarTimer(\"v15.41-50\", 71807, nil, nil, nil, 2, nil, nil, true) -- This is pretty nasty on heroic. Very high variance! Added \"keep\" arg. UNIT_SPELLCAST_SUCCEEDED: (10N Icecrown 2022/08/25 || 25H Lordaeron 2022/09/07 || 25H Lordaeron [2025-10-30]@[21:43:38]) - 36, 17.5 || pull:12.5, 43.5, 20.8, 44.3, 38.6, 16.9, 33.3 || \"Glittering Sparks-npc:37973-1602 = pull:13.39, 15.46, Taldaram Empowered/17.63, 16.02/33.65, Keleseth Empowered/30.49, 6.01/36.50, Taldaram Empowered/40.54, 7.01/47.55\"\n\nlocal soundEmpoweredFlames\t\t= mod:NewSoundYou(72040)\n\nmod:AddSetIconOption(\"EmpoweredFlameIcon\", 72040, true, 0, {1})\nmod:AddArrowOption(\"EmpoweredFlameArrow\", 72040, true)\n\n-- Prince Keleseth\nmod:AddTimerLine(L.Keleseth)\nlocal warnDarkNucleus\t\t\t= mod:NewSpellAnnounce(71943, 1, nil, false)\t-- instant cast\n\nlocal timerDarkNucleusCD\t\t= mod:NewCDTimer(10, 71943, nil, false, nil, 5, nil, nil, true)\t-- ~6s variance [10.5-16.3]. Added \"keep\" arg (25H Lordaeron 2022/09/07) - 12.1, 12.2, 14.2, 16.3, 12.2, 10.5, 13.8, 12.1, 14.1, 12.2, 12.1, 14.3, 14.1, 14.3, 13.9, 12.1\n\nmod.vb.kineticIcon = 7\nmod.vb.kineticCount = 0\nlocal personalNucleusCount = 0\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.kineticIcon = 7\n\tself.vb.kineticCount = 0\n\tpersonalNucleusCount = 0\n\tberserkTimer:Start(-delay)\n\twarnTargetSwitchSoon:Schedule(42-delay)\n\twarnTargetSwitchSoon:ScheduleVoice(42-delay, \"swapsoon\")\n\ttimerTargetSwitch:Start(-delay)\n\ttimerEmpoweredShockVortex:Start(15-delay) -- REVIEW! 5s variance [15-20] (25H Lordaeron 2022/09/07 || 10N Frostmourne 2023-01-22) - 15.9 || 15.6\n\ttimerKineticBombCD:Start(19.8-delay, 1) -- (25H Lordaeron 2022/07/09 || 25H Lordaeron 2022/07/30 || 10N Icecrown 2022/08/22 || 10N Icecrown 2022/08/25 || 25H Lordaeron 2022/09/07 || 25H Lordaeron 2022/12/07 || 10N Frostmourne 2023-01-22 || 25H Lordaeron [2023-08-23]@[21:05:58]) - 24 || 24 || 27 || 24.9 || 23.1 || 22.1 || 21.6 || 19.8\n\ttimerDarkNucleusCD:Start(12-delay) -- REVIEW! Lowest possible timer? (25H Lordaeron 2022/07/09 || 25H Lordaeron 2022/07/30 || 10N Icecrown 2022/08/22 || 10N Icecrown 2022/08/25 || 25H Lordaeron 2022/09/07 || 10N Frostmourne 2023-01-22) - 15 || 12 || 14 || 12 || 12.3 || 13.5\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(12)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\n\tif self.Options.VortexArrow then\n\t\tDBM.Arrow:Hide()\n\tend\nend\n\nfunction mod:ShockVortexTarget(targetname, uId)\n\tif not targetname then return end\n\tif targetname == UnitName(\"player\") then\n\t\tspecWarnVortex:Show()\n\t\tspecWarnVortex:Play(\"watchstep\")\n\t\tyellVortex:Yell()\n\telse\n\t\tif uId then\n\t\t\tlocal inRange = CheckInteractDistance(uId, 2)\n\t\t\tif inRange then\n\t\t\t\tspecWarnVortexNear:Show(targetname)\n\t\t\t\tspecWarnVortexNear:Play(\"watchstep\")\n\t\t\t\tsoundSpecWarnVortexNear:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\vortexNear.mp3\")\n\t\t\t\tif self.Options.VortexArrow then\n\t\t\t\t\tlocal x, y = GetPlayerMapPosition(uId)\n\t\t\t\t\tif x == 0 and y == 0 then\n\t\t\t\t\t\tSetMapToCurrentZone()\n\t\t\t\t\t\tx, y = GetPlayerMapPosition(uId)\n\t\t\t\t\tend\n\t\t\t\t\tDBM.Arrow:ShowRunAway(x, y, 10, 5)\n\t\t\t\tend\n\t\t\telse\n\t\t\t\twarnShockVortex:Show(targetname)\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction mod:HideRange()\n\tDBM.RangeCheck:Hide()\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 72037 then\t\t-- Shock Vortex\n\t\ttimerShockVortex:Start()\n\t\tself:BossTargetScanner(37970, \"ShockVortexTarget\", 0.05, 6)\n\telseif args:IsSpellID(72039, 73037, 73038, 73039) then\t-- Empowered Shock Vortex(73037, 73038, 73039 drycoded from wowhead)\n\t\tspecWarnEmpoweredShockV:Show()\n\t\tif not self.Options.Sound72039 then\n\t\t\tspecWarnEmpoweredShockV:Play(\"scatter\")\n\t\tend\n\t\ttimerEmpoweredShockVortex:Start()\n\t\tsoundEmpoweredShockV:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\EmpoweredVortex.mp3\")\n\telseif spellId == 71718 then\t-- Conjure Flames\n\t\twarnConjureFlames:Show()\n\t\ttimerConjureFlamesCD:Start()\n\telseif spellId == 72040 then\t-- Conjure Empowered Flames\n\t\twarnEmpoweredFlamesCast:Show()\n\t\ttimerConjureFlamesCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 70952 then\n\t\tif self:IsInCombat() then\n\t\t\twarnTargetSwitch:Show(L.Valanar)\n\t\t\twarnTargetSwitchSoon:Schedule(42)\n\t\t\twarnTargetSwitchSoon:ScheduleVoice(42, \"swapsoon\")\n\t\t\ttimerTargetSwitch:Start()\n\t\t\tif not timerEmpoweredShockVortex:IsStarted() then -- avoid overwriting first vortex\n\t\t\t\tif timerShockVortex:IsStarted() then\n\t\t\t\t\ttimerEmpoweredShockVortex:Start(timerShockVortex:GetRemaining())\n\t\t\t\telse\n\t\t\t\t\ttimerEmpoweredShockVortex:Start(20) -- random\n\t\t\t\tend\n\t\t\tend\n\t\t\ttimerShockVortex:Cancel()\n\t\t\tif self.Options.RangeFrame then\n\t\t\t\tDBM.RangeCheck:Show(12)\n\t\t\tend\n\t\tend\n\t\tif self.Options.ActivePrinceIcon then\n\t\t\tself:ScanForMobs(args.destGUID, 2, 8, 1, nil, 12, \"ActivePrinceIcon\")\n\t\tend\n\telseif spellId == 70981 then\n\t\twarnTargetSwitch:Show(L.Keleseth)\n\t\twarnTargetSwitchSoon:Schedule(42)\n\t\twarnTargetSwitchSoon:ScheduleVoice(42, \"swapsoon\")\n\t\ttimerTargetSwitch:Start()\n\t\tif not timerShockVortex:IsStarted() then\n\t\t\tif timerEmpoweredShockVortex:IsStarted() then\n\t\t\t\ttimerShockVortex:Start(timerEmpoweredShockVortex:GetRemaining())\n\t\t\t\ttimerEmpoweredShockVortex:Cancel()\n\t\t\telse\n\t\t\t\ttimerShockVortex:Start()\n\t\t\tend\n\t\tend\n\t\tif self.Options.RangeFrame then\n\t\t\tself:ScheduleMethod(4.5, \"HideRange\")--delay hiding range frame for a few seconds after change incase valanaar got a last second vortex cast off\n\t\tend\n\t\tif self.Options.ActivePrinceIcon then\n\t\t\tself:ScanForMobs(args.destGUID, 2, 8, 1, nil, 12, \"ActivePrinceIcon\")\n\t\tend\n\telseif spellId == 70982 and self:IsInCombat() then\n\t\twarnTargetSwitch:Show(L.Taldaram)\n\t\twarnTargetSwitchSoon:Schedule(42)\n\t\twarnTargetSwitchSoon:ScheduleVoice(42, \"swapsoon\")\n\t\ttimerTargetSwitch:Start()\n\t\tif not timerShockVortex:IsStarted() then\n\t\t\tif timerEmpoweredShockVortex:IsStarted() then\n\t\t\t\ttimerShockVortex:Start(timerEmpoweredShockVortex:GetRemaining())\n\t\t\t\ttimerEmpoweredShockVortex:Cancel()\n\t\t\telse\n\t\t\t\ttimerShockVortex:Start()\n\t\t\tend\n\t\tend\n\t\tif self.Options.RangeFrame then\n\t\t\tself:ScheduleMethod(4.5, \"HideRange\")--delay hiding range frame for a few seconds after change incase valanaar got a last second vortex cast off\n\t\tend\n\t\tif self.Options.ActivePrinceIcon then\n\t\t\tself:ScanForMobs(args.destGUID, 2, 8, 1, nil, 12, \"ActivePrinceIcon\")\n\t\tend\n\telseif spellId == 72999 then\t--Shadow Prison (hard mode)\n\t\tif args:IsPlayer() then\n\t\t\ttimerShadowPrison:Start()\n\t\t\tif personalNucleusCount < 3 and (args.amount or 1) >= 10 then\t--Placeholder right now, might use a different value. Ignore if player has more than 3 Dark Nucleus\n\t\t\t\tspecWarnShadowPrison:Show(args.amount)\n\t\t\t\tspecWarnShadowPrison:Play(\"stackhigh\")\n\t\t\tend\n\t\t\tif self.Options.ShadowPrisonMetronome then\n\t\t\t\tself:RegisterOnUpdateHandler(function(frame, elapsed)\n\t\t\t\t\tframe.time = (frame.time or 0) + elapsed\n\t\t\t\t\tif frame.time >= 1 then\n\t\t\t\t\t\tif not UnitAffectingCombat(\"player\") then\n\t\t\t\t\t\t\tself:UnregisterOnUpdateHandler()\n\t\t\t\t\t\tend\n\t\t\t\t\t\tDBM:PlaySoundFile(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\tick.mp3\")\n\t\t\t\t\t\tframe.time = frame.time - 1\n\t\t\t\t\tend\n\t\t\t\tend)\n\t\t\tend\n\t\tend\n\telseif args:IsSpellID(71807, 72796, 72797, 72798) and args:IsDestTypePlayer() then\t-- Glittering Sparks(Dot/slow, dangerous on heroic during valanaar)\n\t\twarnGliteringSparks:CombinedShow(1, args.destName)\n\telseif spellId == 71822 and args:IsPlayer() then -- Shadow Resonance (from Dark Nucleus)\n\t\tpersonalNucleusCount = personalNucleusCount + 1 -- 35% reduction for each nucleus\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 71822 and args:IsPlayer() then -- Shadow Resonance (from Dark Nucleus)\n\t\tpersonalNucleusCount = personalNucleusCount - 1\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 71943 then\n\t\twarnDarkNucleus:Show()\n\t\ttimerDarkNucleusCD:Start()\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg, _, _, _, target)\n\tif msg:match(L.EmpoweredFlames) and target then\n\t\ttarget = DBM:GetUnitFullName(target)\n\t\tif target == UnitName(\"player\") then\n\t\t\tspecWarnEmpoweredFlames:Show()\n\t\t\tif not self.Options.Sound72040 then\n\t\t\t\tspecWarnEmpoweredFlames:Play(\"justrun\")\n\t\t\tend\n\t\t\tsoundEmpoweredFlames:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\EmpoweredOrbOnYou.mp3\")\n\t\t\tyellEmpoweredFlames:Yell()\n\t\telse\n\t\t\twarnEmpoweredFlames:Show(target)\n\t\tend\n\t\tif self.Options.EmpoweredFlameIcon then\n\t\t\tself:SetIcon(target, 1, 10)\n\t\tend\n\t\tif self.Options.EmpoweredFlameArrow then\n\t\t\tDBM.Arrow:ShowRunTo(target, 0, 0, 10) -- 0 distance (so it doesn't hide with proximity) and 10s hideTime\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(72080) then -- Kinetic Bomb\n\t\tself.vb.kineticCount = self.vb.kineticCount + 1\n\t\twarnKineticBomb:Show()\n\t\tspecWarnKineticBomb:Show(self.vb.kineticCount)\n\t\tsoundKineticBomb:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\KineticSpawn.mp3\")\n\t\ttimerKineticBombCD:Start(nil, self.vb.kineticCount+1)\n\t\tif self.Options.SetIconOnKineticBomb then\n\t\t\tself:ScanForMobs(38454, 2, self.vb.kineticIcon, 5, nil, 12, \"SetIconOnKineticBomb\", false, nil, true)\n\t\t\tself.vb.kineticIcon = self.vb.kineticIcon - 1\n\t\t\tif self.vb.kineticIcon < 5 then\n\t\t\t\tself.vb.kineticIcon = 7\n\t\t\tend\n\t\tend\n\telseif spellName == GetSpellInfo(71807) then -- Glittering Sparks\n\t\ttimerGlitteringSparksCD:Start()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.FirstPull or msg:find(L.FirstPull) then\n\t\ttimerCombatStart:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Icecrown/TheCrimsonHall/Lanathel.lua",
    "content": "local mod\t= DBM:NewMod(\"Lanathel\", \"DBM-Icecrown\", 3)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(37955)\nmod:SetEncounterID(853)\nmod:SetModelID(\"creature/bloodqueen/bloodqueen.m2\")\nmod:SetUsedIcons(1, 2, 3, 4, 7)\nmod:SetMinSyncRevision(20220630221430)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 71340 71510 70838 70877 71474 70867 70879 71473 71525 71530 71531 71532 71533 70923 71772\",\n\t\"SPELL_AURA_REMOVED 71340 71510 70838 70877 71474\",\n\t\"SPELL_CAST_SUCCESS 73070 71818 71819 71820 71821\",\n\t\"SPELL_DAMAGE 71726 71727 71728 71729 71277 72638 72639 72640 72637\",\n\t\"SPELL_MISSED 71726 71727 71728 71729 71277 72638 72639 72640 72637\",\n\t-- \"SPELL_PERIODIC_DAMAGE\",\n\t-- \"SPELL_PERIODIC_MISSED\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\"\n)\n\nlocal myRealm = select(3, DBM:GetMyPlayerInfo())\n\nlocal warnPactDarkfallen\t\t\t= mod:NewTargetAnnounce(71340, 4)\nlocal warnPactDarkfallenSoon\t\t= mod:NewSoonAnnounce(71340, 4, nil, nil, nil, nil, nil, 2)\nlocal warnBloodMirror\t\t\t\t= mod:NewTargetNoFilterAnnounce(71510, 3, nil, \"Tank|Healer\")\nlocal warnSwarmingShadows\t\t\t= mod:NewTargetAnnounce(71266, 4)\nlocal warnSwarmingShadowsSoon\t\t= mod:NewSoonAnnounce(71266, 4, nil, nil, nil, nil, nil, 2)\nlocal warnInciteTerror\t\t\t\t= mod:NewSpellAnnounce(73070, 3, nil, nil, nil, nil, nil, 2)\nlocal warnInciteTerrorSoon\t\t\t= mod:NewSoonAnnounce(73070, 3, nil, nil, nil, nil, nil, 2)\nlocal warnVampiricBite\t\t\t\t= mod:NewTargetNoFilterAnnounce(70946, 2)\nlocal warnBloodthirstSoon\t\t\t= mod:NewSoonAnnounce(70877, 2)\nlocal warnBloodthirst\t\t\t\t= mod:NewTargetNoFilterAnnounce(70877, 3, nil, false)\nlocal warnEssenceoftheBloodQueen\t= mod:NewTargetNoFilterAnnounce(70867, 3, nil, false)\n\nlocal specWarnBloodBolt\t\t\t\t= mod:NewSpecialWarningSpell(71772, nil, nil, nil, 2, 2)\nlocal specWarnPactDarkfallen\t\t= mod:NewSpecialWarningYou(71340, nil, nil, nil, 1, 2)\nlocal specWarnEssenceoftheBloodQueen= mod:NewSpecialWarningYou(70867, nil, nil, nil, 1, 2)\nlocal specWarnBloodthirst\t\t\t= mod:NewSpecialWarningYou(70877, nil, nil, nil, 3, 2)\nlocal yellBloodthirst\t\t\t\t= mod:NewYellMe(70877, L.YellFrenzy)\nlocal specWarnSwarmingShadows\t\t= mod:NewSpecialWarningYou(71266, nil, nil, nil, 4, 2)\nlocal specWarnMindConrolled\t\t\t= mod:NewSpecialWarningTarget(70923, \"-Healer\", nil, nil, 1, 2)\nlocal specWarnGTFO\t\t\t\t\t= mod:NewSpecialWarningGTFO(71266, nil, nil, nil, 1, 8)\n\nlocal timerNextInciteTerror\t\t\t= mod:NewNextTimer(100, 73070, nil, nil, nil, 6)\nlocal timerFirstBite\t\t\t\t= mod:NewNextTimer(15, 70946, nil, \"Dps\", nil, 5)\nlocal timerNextPactDarkfallen\t\t= mod:NewNextTimer(30, 71340, nil, nil, nil, 3)\nlocal timerNextSwarmingShadows\t\t= mod:NewNextTimer(30.5, 71266, nil, nil, nil, 3)\nlocal timerInciteTerror\t\t\t\t= mod:NewBuffActiveTimer(4, 73070)\nlocal timerBloodBolt\t\t\t\t= mod:NewBuffActiveTimer(6, 71772, nil, nil, nil, 2, nil, DBM_COMMON_L.HEALER_ICON)\nlocal timerBloodBoltCD\t\t\t\t= mod:NewVarTimer(\"v10-15\", 71818, nil, false, nil, 2)\nlocal timerBloodThirst\t\t\t\t= mod:NewBuffFadesTimer(10, 70877, nil, nil, nil, 5)\nlocal timerEssenceoftheBloodQueen\t= mod:NewBuffFadesTimer(60, 70867, nil, nil, nil, 5, nil, DBM_COMMON_L.DAMAGE_ICON)\n\nlocal berserkTimer\t\t\t\t\t= mod:NewBerserkTimer((myRealm == \"Lordaeron\" or myRealm == \"Frostmourne\") and 300 or 330)\n\nmod:AddRangeFrameOption(8, 71446)\nmod:AddInfoFrameOption(70867, true)\nmod:AddSetIconOption(\"BloodMirrorIcon\", 71510, false, 0, {7})--red x for blood link\nmod:AddSetIconOption(\"SwarmingShadowsIcon\", 71266, true, 0, {4})\nmod:AddSetIconOption(\"SetIconOnDarkFallen\", 71340, true, 0, {1, 2, 3})\n\nlocal essence = DBM:GetSpellInfoNew(70867)\nlocal pactTargets = {}\nmod.vb.pactIcons = 1\n\nlocal function warnPactTargets(self)\n\twarnPactDarkfallen:Show(table.concat(pactTargets, \"<, >\"))\n\ttable.wipe(pactTargets)\n\ttimerNextPactDarkfallen:Start(30)\n\twarnPactDarkfallenSoon:Schedule(25)\n\twarnPactDarkfallenSoon:ScheduleVoice(25, \"linesoon\")\n\tself.vb.pactIcons = 1\nend\n\nfunction mod:OnCombatStart(delay)\n\tberserkTimer:Start(-delay)\n\ttimerFirstBite:Start(-delay)\n\ttimerNextPactDarkfallen:Start(15-delay)\n\twarnPactDarkfallenSoon:Schedule(10-delay)\n\twarnPactDarkfallenSoon:ScheduleVoice(10-delay, \"linesoon\")\n\ttimerNextSwarmingShadows:Start(-delay)\n\twarnSwarmingShadowsSoon:Schedule(25.5-delay)\n\twarnSwarmingShadowsSoon:ScheduleVoice(25.5-delay, \"flamessoon\")\n\ttable.wipe(pactTargets)\n\tself.vb.pactIcons = 1\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(8)\n\tend\n\tif self:IsDifficulty(\"normal10\", \"heroic10\") then\n\t\ttimerNextInciteTerror:Start(124-delay)\n\t\twarnInciteTerrorSoon:Schedule(119-delay)\n\t\twarnInciteTerrorSoon:ScheduleVoice(119-delay, \"fearsoon\")\n\telse\n\t\ttimerNextInciteTerror:Start(127-delay)\n\t\twarnInciteTerrorSoon:Schedule(122-delay)\n\t\twarnInciteTerrorSoon:ScheduleVoice(122-delay, \"fearsoon\")\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\n\tif self.Options.InfoFrame then\n\t\tDBM.InfoFrame:Hide()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 71340 then\t\t--Pact of the Darkfallen\n\t\tpactTargets[#pactTargets + 1] = args.destName\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnPactDarkfallen:Show()\n\t\t\tspecWarnPactDarkfallen:Play(\"linegather\")\n\t\tend\n\t\tif self.Options.SetIconOnDarkFallen then\n\t\t\tself:SetIcon(args.destName, self.vb.pactIcons)\n\t\tend\n\t\tself.vb.pactIcons = self.vb.pactIcons + 1\n\t\tself:Unschedule(warnPactTargets)\n\t\tif #pactTargets >= 3 then\n\t\t\twarnPactTargets(self)\n\t\telse\n\t\t\tself:Schedule(0.3, warnPactTargets, self)\n\t\tend\n\telseif args:IsSpellID(71510, 70838) then\n\t\twarnBloodMirror:Show(args.destName)\n\t\tif self.Options.BloodMirrorIcon then\n\t\t\tself:SetIcon(args.destName, 7)\n\t\tend\n\telseif args:IsSpellID(70877, 71474) then\n\t\twarnBloodthirst:Show(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnBloodthirst:Show()\n\t\t\tspecWarnBloodthirst:Play(\"frenzy\")--Eh, closest voice to blood thirst\n\t\t\tyellBloodthirst:Yell()\n\t\t\tif self:IsDifficulty(\"normal10\", \"heroic10\") then\n\t\t\t\ttimerBloodThirst:Start(15)--15 seconds on 10 man\n\t\t\telse\n\t\t\t\ttimerBloodThirst:Start()--10 seconds on 25 man\n\t\t\tend\n\t\tend\n\telseif args:IsSpellID(70867, 70879, 71473, 71525) or args:IsSpellID(71530, 71531, 71532, 71533) then\t--Essence of the Blood Queen\n\t\twarnEssenceoftheBloodQueen:Show(args.destName)\n\t\tif self.Options.InfoFrame then\n\t\t\tDBM.InfoFrame:SetHeader(essence)\n\t\t\tDBM.InfoFrame:Show(16, \"playerdebuffremaining\", essence, 3)\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnEssenceoftheBloodQueen:Show()\n\t\t\tspecWarnEssenceoftheBloodQueen:Play(\"targetyou\")\n\t\t\tif self:IsDifficulty(\"normal10\", \"heroic10\") then\n\t\t\t\ttimerEssenceoftheBloodQueen:Start(75)--75 seconds on 10 man\n\t\t\t\twarnBloodthirstSoon:Schedule(70)\n\t\t\telse\n\t\t\t\ttimerEssenceoftheBloodQueen:Start()--60 seconds on 25 man\n\t\t\t\twarnBloodthirstSoon:Schedule(55)\n\t\t\tend\n\t\tend\n\telseif spellId == 70923 then\n\t\tspecWarnMindConrolled:Show(args.destName)\n\t\tspecWarnMindConrolled:Play(\"findmc\")\n\telseif spellId == 71772 then\n\t\tspecWarnBloodBolt:Show()\n\t\tspecWarnBloodBolt:Play(\"scatter\")\n\t\ttimerBloodBolt:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 71340 then\t\t\t\t--Pact of the Darkfallen\n\t\tif self.Options.SetIconOnDarkFallen then\n\t\t\tself:SetIcon(args.destName, 0)\t\t--Clear icon once you got to where you are supposed to be\n\t\tend\n\telseif args:IsSpellID(71510, 70838) then\t--Blood Mirror\n\t\tif self.Options.BloodMirrorIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\telseif args:IsSpellID(70877, 71474) then\n\t\tif args:IsPlayer() then\n\t\t\ttimerBloodThirst:Cancel()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 73070 then\t\t\t\t--Incite Terror (fear before air phase)\n\t\twarnInciteTerror:Show()\n\t\ttimerInciteTerror:Start()\n\t\ttimerNextSwarmingShadows:Restart()--This resets the swarming shadows timer\n\t\twarnSwarmingShadowsSoon:Schedule(25.5)\n\t\twarnSwarmingShadowsSoon:ScheduleVoice(25.5, \"flamessoon\")\n\t\ttimerNextPactDarkfallen:Restart(25)--and the Pact timer also reset -5 seconds\n\t\twarnPactDarkfallenSoon:Schedule(20)\n\t\twarnPactDarkfallenSoon:ScheduleVoice(20, \"linesoon\")\n\t\tif self:IsDifficulty(\"normal10\", \"heroic10\") then\n\t\t\ttimerNextInciteTerror:Start(120)--120 seconds in between first and second on 10 man\n\t\t\twarnInciteTerrorSoon:Schedule(115)\n\t\t\twarnInciteTerrorSoon:ScheduleVoice(115, \"fearsoon\")\n\t\telse\n\t\t\ttimerNextInciteTerror:Start()--100 seconds in between first and second on 25 man\n\t\t\twarnInciteTerrorSoon:Schedule(95)\n\t\t\twarnInciteTerrorSoon:ScheduleVoice(95, \"fearsoon\")\n\t\tend\n\telseif args:IsSpellID(71818, 71819, 71820, 71821) and self:AntiSpam(5, 2) then -- Twilight Bloodbolt\n\t\ttimerBloodBoltCD:Start()\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(sourceGUID, _, _, destGUID, destName, _, spellId, spellName)\n\tif (spellId == 71726 or spellId == 71727 or spellId == 71728 or spellId == 71729) and self:GetCIDFromGUID(sourceGUID) == 37955 then\t-- Vampiric Bite (first bite only, hers)\n\t\twarnVampiricBite:Show(destName)\n\telseif (spellId == 71277 or spellId == 72638 or spellId == 72639 or spellId == 72640 or spellId == 72637) and destGUID == UnitGUID(\"player\") and self:AntiSpam() then\t\t--Swarming Shadows (spell damage, you're standing in it.)\n\t\tspecWarnGTFO:Show(spellName)\n\t\tspecWarnGTFO:Play(\"watchfeet\")\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\n-- function mod:SPELL_PERIODIC_DAMAGE(_, _, _, destGUID, _, _, spellId)\n--\tif (spellId == 71277 or spellId == 72638 or spellId == 72639 or spellId == 72640 or spellId == 72637) and destGUID == UnitGUID(\"player\") and self:AntiSpam() then\t\t--Swarn of Shadows (spell damage, you're standing in it.)\n--\t\tspecWarnSwarmingShadows:Show()\n--\t\tspecWarnSwarmingShadows:Play(\"runaway\")\n--\tend\n-- end\n-- mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg, _, _, _, target)\n\tif msg:match(L.SwarmingShadows) and target then\n\t\ttarget = DBM:GetUnitFullName(target)\n\t\ttimerNextSwarmingShadows:Start()\n\t\twarnSwarmingShadowsSoon:Schedule(25.5)\n\t\twarnSwarmingShadowsSoon:ScheduleVoice(25.5, \"flamessoon\")\n\t\tif target == UnitName(\"player\") then\n\t\t\tspecWarnSwarmingShadows:Show()\n\t\t\tspecWarnSwarmingShadows:Play(\"runout\")\n\t\t\tspecWarnSwarmingShadows:ScheduleVoice(1.5, \"keepmove\")\n\t\telse\n\t\t\twarnSwarmingShadows:Show(target)\n\t\tend\n\t\tif self.Options.SwarmingShadowsIcon then\n\t\t\tself:SetIcon(target, 4, 6)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Icecrown/TheFrozenThrone/LichKing.lua",
    "content": "local mod\t= DBM:NewMod(\"LichKing\", \"DBM-Icecrown\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal UnitGUID, UnitName, GetSpellInfo = UnitGUID, UnitName, GetSpellInfo\nlocal UnitInRange, UnitIsUnit, UnitInVehicle, IsInRaid = UnitInRange, UnitIsUnit, UnitInVehicle, DBM.IsInRaid\n\nmod:SetRevision(\"20251102144322\")\nmod:SetCreatureID(36597)\nmod:SetEncounterID(856)\nmod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7)\nmod:SetHotfixNoticeRev(20250414000000)\nmod:SetMinSyncRevision(20220921000000)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 68981 74270 74271 74272 72259 74273 74274 74275 72143 72146 72147 72148 72262 70358 70498 70541 73779 73780 73781 72762 73539 73650 72350 69242 73800 73801 73802\", -- Split into CLEU specific and UNIT_SPELLCAST_START\n--\t\"SPELL_CAST_START 72143 72146 72147 72148 73650 69242 73800 73801 73802\", -- CLEU specific\n\t\"SPELL_CAST_SUCCESS 70337 73912 73913 73914 69409 73797 73798 73799 69200 68980 74325 74326 74327 73654 74295 74296 74297\", -- Split into CLEU relevant and UNIT_SPELLCAST_SUCCEEDED. Most were kept since they rely on CLEU payload\n--\t\"SPELL_CAST_SUCCESS 70337 73912 73913 73914 69409 73797 73798 73799 69200 68980 74325 74326 74327\", -- CLEU relevant\n\t\"SPELL_DISPEL\",\n\t\"SPELL_AURA_APPLIED 28747 72754 73708 73709 73710\", -- 73650 commented out, no longer needed\n\t\"SPELL_AURA_APPLIED_DOSE 70338 73785 73786 73787\",\n--\t\"SPELL_AURA_REMOVED 73655\", -- 68980 74325 is 10N and 25N, not needed for FM\n\t\"SPELL_SUMMON 69037 70372\",\n\t\"SPELL_DAMAGE 68983 73791 73792 73793\",\n\t\"SPELL_MISSED 68983 73791 73792 73793\",\n\t\"UNIT_HEALTH target focus\",\n\t\"UNIT_AURA_UNFILTERED\",\n\t\"UNIT_DIED\",\n--\t\"UNIT_SPELLCAST_START boss1\",\n\t\"UNIT_SPELLCAST_SUCCEEDED\" -- unfiltered as of 14/04/2025, since Warmane broke boss1 units\n--\t\"UNIT_SPELLCAST_SUCCEEDED boss1\"\n)\n\n-- switching to faster less cpu wasting UNIT_TARGET scanning method is not reliable, since this event only fires for LK if is target/focus. Such approach would require syncs to minimize risk of not catching the mechanic, with the downside of the performance gain being questionable\n--Shadow Trap UNIT_TARGET looks reliable\n-- \"<29.57 21:04:20> [UNIT_SPELLCAST_START] The Lich King(player1) - Summon Shadow Trap - 0.5s [[boss1:Summon Shadow Trap::0:]]\", -- [2616]\n-- \"<29.57 21:04:20> [DBM_Debug] Boss target scan started for 36597:2:\", -- [2617]\n-- \"<29.57 21:04:20> [DBM_TimerStart] Timer73539next:Next Summon Shadow Trap:15.5:Interface\\\\Icons\\\\Spell_Shadow_GatherShadows:next:73539:3:LichKing:nil:nil:Summon Shadow Trap:nil:\", -- [2618]\n-- \"<29.58 21:04:20> [CLEU] SPELL_CAST_START:0xF130008EF5000861:The Lich King:0x0000000000000000:nil:73539:Summon Shadow Trap:nil:nil:\", -- [2619]\n-- \"<29.58 21:04:20> [UNIT_TARGET] boss1#The Lich King#Target: player2#TargetOfTarget: The Lich King\", -- [2621]\n-- \"<29.60 21:04:20> [DBM_Debug] BossTargetScanner has ended for 36597:2:\", -- [2622]\n\n--Defile UNIT_TARGET is NOT reliable (one log only fired 2 UNIT_TARGET out of 7 defiles)\n--no UNIT_TARGET for defile\n-- \"<247.54 21:12:30> [UNIT_SPELLCAST_START] The Lich King(player1) - Defile - 2s [[boss1:Defile::0:]]\", -- [20743]\n-- \"<247.54 21:12:30> [DBM_Debug] Boss target scan started for 36597:2:\", -- [20744]\n-- \"<247.54 21:12:30> [DBM_TimerStart] Timer72762next:Next Defile:32.5:Interface\\\\Icons\\\\Ability_Rogue_EnvelopingShadows:next:72762:3:LichKing:nil:nil:Defile:nil:\", -- [20745]\n-- \"<247.54 21:12:30> [CLEU] SPELL_CAST_START:0xF130008EF5000861:The Lich King:0x0000000000000000:nil:72762:Defile:nil:nil:\", -- [20746]\n-- \"<247.57 21:12:30> [DBM_Announce] Defile on >player3<:Interface\\\\Icons\\\\Ability_Rogue_EnvelopingShadows:target:72762:LichKing:false:\", -- [20747]\n-- \"<247.57 21:12:30> [DBM_Debug] BossTargetScanner has ended for 36597:2:\", -- [20748]\n\n--with UNIT_TARGET for defile\n-- \"<529.67 21:17:12> [UNIT_SPELLCAST_START] The Lich King(player1) - Defile - 2s [[boss1:Defile::0:]]\", -- [42820]\n-- \"<529.67 21:17:12> [DBM_Debug] Boss target scan started for 36597:2:\", -- [42821]\n-- \"<529.67 21:17:12> [DBM_TimerStart] Timer72762next:Next Defile:32.5:Interface\\\\Icons\\\\Ability_Rogue_EnvelopingShadows:next:72762:3:LichKing:nil:nil:Defile:nil:\", -- [42822]\n-- \"<529.67 21:17:12> [CLEU] SPELL_CAST_START:0xF130008EF5000861:The Lich King:0x0000000000000000:nil:72762:Defile:nil:nil:\", -- [42823]\n-- \"<529.67 21:17:12> [UNIT_TARGET] boss1#The Lich King#Target: player4#TargetOfTarget: The Lich King\", -- [42825]\n-- \"<529.70 21:17:12> [DBM_Announce] Defile on >player4<:Interface\\\\Icons\\\\Ability_Rogue_EnvelopingShadows:target:72762:LichKing:false:\", -- [42826]\n-- \"<529.70 21:17:12> [DBM_Debug] BossTargetScanner has ended for 36597:2:\", -- [42827]\n\nlocal myRealm = select(3, DBM:GetMyPlayerInfo())\n\n-- General\nlocal timerCombatStart\t\t= mod:NewCombatTimer(55)\nlocal berserkTimer\t\t\t= mod:NewBerserkTimer(myRealm == \"Lordaeron\" and mod:IsNormal() and 720 or 900)\n\nmod:AddBoolOption(\"RemoveImmunes\")\nmod:AddMiscLine(L.FrameGUIDesc)\nmod:AddBoolOption(\"ShowFrame\", true)\nmod:AddBoolOption(\"FrameLocked\", false)\nmod:AddBoolOption(\"FrameClassColor\", true, nil, function()\n\tmod:UpdateColors()\nend)\nmod:AddBoolOption(\"FrameUpwards\", false, nil, function()\n\tmod:ChangeFrameOrientation()\nend)\nmod:AddButton(L.FrameGUIMoveMe, function() mod:CreateFrame() end, nil, 130, 20)\n\n-- Stage One\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1))\nlocal warnShamblingSoon\t\t\t\t= mod:NewSoonAnnounce(70372, 2) --Phase 1 Add\nlocal warnShamblingHorror\t\t\t= mod:NewSpellAnnounce(70372, 3) --Phase 1 Add\nlocal warnDrudgeGhouls\t\t\t\t= mod:NewSpellAnnounce(70358, 2) --Phase 1 Add\nlocal warnShamblingEnrage\t\t\t= mod:NewTargetNoFilterAnnounce(72143, 3, nil, \"Tank|Healer|RemoveEnrage\") --Phase 1 Add Ability\nlocal warnNecroticPlague\t\t\t= mod:NewTargetNoFilterAnnounce(70337, 3) --Phase 1+ Ability\nlocal warnNecroticPlagueJump\t\t= mod:NewAnnounce(\"WarnNecroticPlagueJump\", 4, 70337, nil, nil, nil, 70337) --Phase 1+ Ability\nlocal warnInfest\t\t\t\t\t= mod:NewCountAnnounce(70541, 3, nil, \"Healer|RaidCooldown\") --Phase 1 & 2 Ability\nlocal warnTrapCast\t\t\t\t\t= mod:NewTargetDistanceAnnounce(73539, 4, nil, nil, nil, nil, nil, nil, true) --Phase 1 Heroic Ability\n\nlocal specWarnNecroticPlague\t\t= mod:NewSpecialWarningMoveAway(70337, nil, nil, nil, 1, 2) --Phase 1+ Ability\nlocal specWarnInfest\t\t\t\t= mod:NewSpecialWarningCount(70541, nil, nil, nil, 1) --Phase 1+ Ability\nlocal specWarnTrap\t\t\t\t\t= mod:NewSpecialWarningYou(73539, nil, nil, nil, 3, 2, 3) --Heroic Ability\nlocal yellTrap\t\t\t\t\t\t= mod:NewYellMe(73539)\nlocal specWarnTrapNear\t\t\t\t= mod:NewSpecialWarningClose(73539, nil, nil, nil, 3, 2, 3) --Heroic Ability\nlocal specWarnEnrage\t\t\t\t= mod:NewSpecialWarningSpell(72143, \"Tank\")\nlocal specWarnEnrageLow\t\t\t\t= mod:NewSpecialWarningSpell(28747, false)\n\nlocal timerInfestCD\t\t\t\t\t= mod:NewCDCountTimer(21.2, 70541, nil, \"Healer|RaidCooldown\", nil, 5, nil, DBM_COMMON_L.HEALER_ICON, true) -- 4s variance [21-25] Added \"keep\" arg. (10N Icecrown 2022/08/25 || 25H Lordaeron 2022/09/03) - 23.1, 22.9, 22.8, Stage 2/84.3, 12.4/96.8, 23.6, 22.2, 21.7, 22.1, 22.7, 22.0, 23.5, 22.0 || 23.0, 21.2, 24.5, 22.8, 22.1, Stage 2/72.4, 12.5/84.9, 22.1, 21.2, 23.9, 23.3, 22.7, 23.1, 22.9, 23.5 ; 22.6, 21.2, 24.8, 22.9, 22.5, Stage 2/72.4, 12.5/84.9, 21.3, 21.6, 22.4, 21.5\nlocal timerNecroticPlagueCleanse\t= mod:NewTimer(5, \"TimerNecroticPlagueCleanse\", 70337, \"Healer\", nil, 5, DBM_COMMON_L.HEALER_ICON, nil, nil, nil, nil, nil, nil, 70337)\nlocal timerNecroticPlagueCD\t\t\t= mod:NewCDTimer(30, 70337, nil, nil, nil, 3, nil, DBM_COMMON_L.DISEASE_ICON, true) -- 3s variance [30.1-32.9] Added \"keep\" arg. (10N Icecrown 2022/08/20 || 10N Icecrown 2022/08/25 || 25H Lordaeron 2022/09/03) - 32.8, 31.6 ; 32.7 ; 31.2;  31.7, 32.7 || 30.2 || 32.3, 32.9 ; 31.3, 31.9 ; 32.9, 30.4 ; 30.7, 31.7 ; 30.1, 30.2 ; 32.6, 31.2 ; 31.1 ; 32.5, 30.3, 31.7\nlocal timerEnrageCD\t\t\t\t\t= mod:NewCDCountTimer(\"d20\", 72143, nil, \"Tank|RemoveEnrage\", nil, 5, nil, DBM_COMMON_L.ENRAGE_ICON--[[, true]]) -- String timer starting with \"d\" means \"allowDouble\". 5s variance [20.1-24.7]. Disabled \"keep\" arg since cast can be stun-skipped. (25H Lordaeron 2022/09/03) - 20.5, 24.7\nlocal timerShamblingHorror\t\t\t= mod:NewNextTimer(60, 70372, nil, nil, nil, 1)\nlocal timerDrudgeGhouls\t\t\t\t= mod:NewNextTimer(30, 70358, nil, nil, nil, 1)\nlocal timerTrapCD\t\t\t\t\t= mod:NewNextTimer(15.5, 73539, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON, nil, 1, 4) -- Fixed timer, confirmed on log review 2022/09/03\n\nlocal soundInfestSoon\t\t\t\t= mod:NewSoundSoon(70541, nil, \"Healer|RaidCooldown\")\nlocal soundNecroticOnYou\t\t\t= mod:NewSoundYou(70337)\n\nmod:AddSetIconOption(\"NecroticPlagueIcon\", 70337, true, 0, {1})\nmod:AddSetIconOption(\"TrapIcon\", 73539, true, 0, {7})\nmod:AddArrowOption(\"TrapArrow\", 73539, true)\nmod:AddBoolOption(\"AnnouncePlagueStack\", false, nil, nil, nil, nil, 70337)\n\n-- Stage Two\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2))\nlocal warnPhase2\t\t\t\t\t= mod:NewPhaseAnnounce(2, 2, nil, nil, nil, nil, nil, 2)\nlocal valkyrGrabWarning\t\t\t\t= mod:NewAnnounce(\"ValkyrWarning\", 3, 71844, nil, nil, nil, 69037)--Phase 2 Ability\nlocal warnDefileSoon\t\t\t\t= mod:NewSoonCountAnnounce(72762, 3)\t--Phase 2+ Ability\nlocal warnSoulreaper\t\t\t\t= mod:NewTargetCountAnnounce(69409, 4) --Phase 2+ Ability\nlocal warnDefileCast\t\t\t\t= mod:NewTargetCountDistanceAnnounce(72762, 4, nil, nil, nil, nil, nil, nil, true) --Phase 2+ Ability\nlocal warnSummonValkyr\t\t\t\t= mod:NewCountAnnounce(69037, 3, 71844) --Phase 2 Add\n\nlocal specWarnYouAreValkd\t\t\t= mod:NewSpecialWarning(\"SpecWarnYouAreValkd\", nil, nil, nil, 1, 2, nil, 71844, 69037) --Phase 2+ Ability\nlocal specWarnDefileCast\t\t\t= mod:NewSpecialWarningMoveAway(72762, nil, nil, nil, 3, 2) --Phase 2+ Ability\nlocal yellDefile\t\t\t\t\t= mod:NewYellMe(72762)\nlocal specWarnDefileNear\t\t\t= mod:NewSpecialWarningClose(72762, nil, nil, nil, 1, 2) --Phase 2+ Ability\nlocal specWarnSoulreaper\t\t\t= mod:NewSpecialWarningDefensive(69409, nil, nil, nil, 1, 2) --Phase 2+ Ability\nlocal specwarnSoulreaper\t\t\t= mod:NewSpecialWarningTarget(69409, true) --phase 2+\nlocal specWarnSoulreaperOtr\t\t\t= mod:NewSpecialWarningTaunt(69409, false, nil, nil, 1, 2) --phase 2+; disabled by default, not standard tactic\nlocal specWarnValkyrLow\t\t\t\t= mod:NewSpecialWarning(\"SpecWarnValkyrLow\", nil, nil, nil, 1, 2, nil, 71844, 69037)\n\nlocal timerSoulreaper\t\t\t\t= mod:NewTargetTimer(5.1, 69409, nil, \"Tank|Healer|TargetedCooldown\")\nlocal timerSoulreaperCD\t\t\t\t= mod:NewCDCountTimer(30.5, 69409, nil, \"Tank|Healer|TargetedCooldown\", nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerDefileCD\t\t\t\t\t= mod:NewCDCountTimer(32, 72762, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON, true, 1, 4) -- REVIEW! ~3s variance [32-34.7]. Added \"keep\" arg, but might need sync for Normal Harvest Soul since CLEU could be OOR - need Normal log from a harvested soul - (25H Lordaeron 2022/09/26_wipe1 || 25H Lordaeron 2022/09/26_wipe2 || 25H Lordaeron 2022/09/26_wipe3 || 25H Lordaeron 2022/09/26_wipe4 || 25H Lordaeron 2022/09/26_wipe5 || 25H Lordaeron 2022/09/26_wipe6 || 10N Lordaeron 2022/10/08) - 33.8, 34.2, 32.3, 34.0, 32.8 || 32.4, 34.5, 33.6, 34.4, 33.7 || 33.4, 32.1, 33.0, 32.5, 33.5, 33.3, 33.5 || 33.6, 33.4, 33.0 || Stage 2/37.5, 32.2, 32.0, 33.0, 33.5, 32.1, 32.1, 33.4, Stage 2.5/25.8, Stage 3/62.5, 64.0/126.6/152.4, 32.7, 73.6, 32.6, 74.5 || 32.6, 34.7, 32.5, 34.2, 33.7 || Stage 2/37.5, 32.1, 32.8, Stage 2.5/24.2, Stage 3/62.5, 32.9/95.5/119.6, 32.7, 32.7, 32.9\nlocal timerSummonValkyr\t\t\t\t= mod:NewCDCountTimer(45.2, 69037, nil, nil, nil, 1, 71844, DBM_COMMON_L.DAMAGE_ICON, true, 2, 3) -- 5s variance [45-50]. Added \"keep\" arg (25H Lordaeron 2022/09/21_wipe1 || 25H Lordaeron 2022/09/21_wipe2 || 25H Lordaeron 2022/09/21_kill) - 46.5, 47.1, 45.2 || 50.0, 46.8, 46.2 || 47.8, 48.1, 47.8\n\nlocal soundDefileOnYou\t\t\t\t= mod:NewSoundYou(72762)\nlocal soundSoulReaperSoon\t\t\t= mod:NewSoundSoon(69409, nil, \"Tank|Healer|TargetedCooldown\")\n\nmod:AddSetIconOption(\"DefileIcon\", 72762, true, 0, {7})\nmod:AddSetIconOption(\"ValkyrIcon\", 69037, true, 5, {2, 3, 4}) -- Despite icon convention, keep 2,3,4 for grabIcon backwards compatibility, since iconSetter may be an old DBM/BW user, and detect target marker on a loop would be too CPU heavy for just this\nmod:AddArrowOption(\"DefileArrow\", 72762, true)\nmod:AddBoolOption(\"AnnounceValkGrabs\", false, nil, nil, nil, nil, 69037)\n\n-- Stage Three\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(3))\nlocal warnPhase3\t\t\t\t\t= mod:NewPhaseAnnounce(3, 2, nil, nil, nil, nil, nil, 2)\nlocal warnSummonVileSpirit\t\t\t= mod:NewSpellAnnounce(70498, 2) --Phase 3 Add\nlocal warnHarvestSoul\t\t\t\t= mod:NewTargetNoFilterAnnounce(68980, 3) --Phase 3 Ability\nlocal warnRestoreSoul\t\t\t\t= mod:NewCastAnnounce(73650, 2) --Phase 3 Heroic\n\nlocal specWarnHarvestSoul\t\t\t= mod:NewSpecialWarningYou(68980, nil, nil, nil, 1, 2) --Phase 3+ Ability\nlocal specWarnHarvestSouls\t\t\t= mod:NewSpecialWarningSpell(73654, nil, nil, nil, 1, 2, 3) --Heroic Ability\n\nlocal timerHarvestSoul\t\t\t\t= mod:NewTargetTimer(6, 68980)\nlocal timerHarvestSoulCD\t\t\t= mod:NewNextTimer(75, 68980, nil, nil, nil, 6)\nlocal timerVileSpirit\t\t\t\t= mod:NewNextTimer(30.5, 70498, nil, nil, nil, 1)\nlocal timerRestoreSoul\t\t\t\t= mod:NewCastTimer(40, 73650, nil, nil, nil, 6)\nlocal timerRoleplay\t\t\t\t\t= mod:NewTimer(162, \"TimerRoleplay\", 72350, nil, nil, 6)\n\nmod:AddSetIconOption(\"HarvestSoulIcon\", 68980, false, 0, {5})\n\n-- Intermission\nmod:AddTimerLine(DBM_COMMON_L.INTERMISSION)\nlocal warnRemorselessWinter\t\t\t= mod:NewSpellAnnounce(68981, 3) --Phase Transition Start Ability\nlocal warnQuake\t\t\t\t\t\t= mod:NewSpellAnnounce(72262, 4) --Phase Transition End Ability\nlocal warnRagingSpirit\t\t\t\t= mod:NewTargetNoFilterAnnounce(69200, 3) --Transition Add\nlocal warnIceSpheresTarget\t\t\t= mod:NewTargetAnnounce(69103, 3, 69712, nil, 69090) -- icon: spell_frost_frozencore; shortText \"Ice Sphere\"\nlocal warnPhase2Soon\t\t\t\t= mod:NewPrePhaseAnnounce(2)\nlocal warnPhase3Soon\t\t\t\t= mod:NewPrePhaseAnnounce(3)\n\nlocal specWarnRagingSpirit\t\t\t= mod:NewSpecialWarningYou(69200, nil, nil, nil, 1, 2) --Transition Add\nlocal specWarnIceSpheresYou\t\t\t= mod:NewSpecialWarningMoveAway(69103, nil, 69090, nil, 1, 2) -- shortText \"Ice Sphere\"\nlocal specWarnGTFO\t\t\t\t\t= mod:NewSpecialWarningGTFO(68983, nil, nil, nil, 1, 8)\n\nlocal timerPhaseTransition\t\t\t= mod:NewTimer(62.5, \"PhaseTransition\", 72262, nil, nil, 6)\nlocal timerRagingSpiritCD\t\t\t= mod:NewNextCountTimer(20, 69200, nil, nil, nil, 1)\nlocal timerSoulShriekCD\t\t\t\t= mod:NewVarTimer(\"v12-15\", 69242, nil, nil, nil, 1) -- ~3s variance [12.4-15]. SPELL_CAST_START: (25H Lordaeron [2025-10-30]@[22:24:13]) - \"Soul Shriek-73802-npc:36701-3660 = pull:439.27/[Stage 1/0.00, Stage 1.5/115.59, Stage 2/62.50, Stage 2.5/190.16, Stage 3/62.50] 8.53/71.03/261.19/323.69/439.27, Left Frostmourne/54.01, 9.04/63.04, 12.15, 13.16, 14.80, Left Frostmourne/57.22, 5.04/62.26, 14.29, 12.70, 12.13\"\n\nmod:AddRangeFrameOption(8, 72133)\nmod:AddSetIconOption(\"RagingSpiritIcon\", 69200, false, 0, {6})\n\n-- P1 variables\nmod.vb.warned_preP2 = false\nmod.vb.infestCount = 0\n-- Intermission variables\nmod.vb.ragingSpiritCount = 0\n-- P2 variables\nmod.vb.warned_preP3 = false\nmod.vb.defileCount = 0\nmod.vb.soulReaperCount = 0\nmod.vb.valkyrWaveCount = 0\nmod.vb.valkIcon = 2\nlocal shamblingHorrorsGUIDs = {}\nlocal iceSpheresGUIDs = {}\nlocal ragingSpiritsGUIDs = {}\nlocal warnedValkyrGUIDs = {}\nlocal valkyrTargets = {}\nlocal plagueHop = DBM:GetSpellInfo(70338)--Hop spellID only, not cast one.\n-- local soulshriek = GetSpellInfo(69242)\nlocal plagueExpires = {}\nlocal grabIcon = 2\n--\tlocal lastValk = 0\n--\tlocal maxValks = mod:IsDifficulty(\"normal25\", \"heroic25\") and 3 or 1\nlocal warnedAchievement = false\nlocal lastPlague\n\n--[[\nlocal function numberOfValkyrTargets(tbl)\n\tif not tbl then return 0 end\n\tlocal count = 0\n\tfor _ in pairs(tbl) do\n\t\tcount = count + 1\n\tend\n\treturn count\nend\n\nlocal function scanValkyrTargets(self)\n\tif numberOfValkyrTargets(valkyrTargets) < maxValks and (time() - lastValk) < 10 then\t-- scan for like 10secs, but exit earlier if all the valks have spawned and grabbed their players\n\t\tfor uId in DBM:GetGroupMembers() do\t\t-- for every raid member check ..\n\t\t\tDBM:Debug(\"Valkyr check for \"..  UnitName(uId) ..\": UnitInVehicle is returning \" .. (UnitInVehicle(uId) or \"nil\") .. \" and UnitInRange is returning \" .. (UnitInRange(uId) or \"nil\") .. \" with distance: \" .. DBM.RangeCheck:GetDistance(uId) ..\"yd. Checking if it is already cached: \" .. (valkyrTargets[uId] and \"true\" or \"nil.\"), 3)\n\t\t\tif UnitInVehicle(uId) and not valkyrTargets[uId] then\t  -- if person #i is in a vehicle and not already announced\n\t\t\t\tvalkyrGrabWarning:Show(UnitName(uId))\n\t\t\t\tvalkyrTargets[uId] = true\n\t\t\t\tlocal raidIndex = UnitInRaid(uId)\n\t\t\t\tlocal name, _, subgroup, _, _, fileName = GetRaidRosterInfo(raidIndex + 1)\n\t\t\t\tif name == UnitName(uId) then\n\t\t\t\t\tlocal grp = subgroup\n\t\t\t\t\tlocal class = fileName\n\t\t\t\t\tmod:AddEntry(name, grp or 0, class, grabIcon)\n\t\t\t\tend\n\t\t\t\tif UnitIsUnit(uId, \"player\") then\n\t\t\t\t\tspecWarnYouAreValkd:Show()\n\t\t\t\t\tspecWarnYouAreValkd:Play(\"targetyou\")\n\t\t\t\tend\n\t\t\t\tif DBM:IsInGroup() and self.Options.AnnounceValkGrabs and DBM:GetRaidRank() > 1 then\n\t\t\t\t\tlocal channel = (IsInRaid() and \"RAID\") or \"PARTY\"\n\t\t\t\t\tif self.Options.ValkyrIcon then\n\t\t\t\t\t\tSendChatMessage(L.ValkGrabbedIcon:format(grabIcon, UnitName(uId)), channel)\n\t\t\t\t\telse\n\t\t\t\t\t\tSendChatMessage(L.ValkGrabbed:format(UnitName(uId)), channel)\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tgrabIcon = grabIcon + 1--Makes assumption discovery order of vehicle grabs will match combat log order, since there is a delay\n\t\t\tend\n\t\tend\n\t\tself:Schedule(0.5, scanValkyrTargets, self)  -- check for more targets in a few\n\telse\n\t\ttable.wipe(valkyrTargets)\t   -- no more valkyrs this round, so lets clear the table\n\t\tgrabIcon = 2\n\t\tself.vb.valkIcon = 2\n\tend\nend\n--]]\n\nlocal function RemoveImmunes(self)\n\tif self.Options.RemoveImmunes then -- cancelaura bop bubble iceblock Dintervention\n\t\tCancelUnitBuff(\"player\", (GetSpellInfo(10278)))\n\t\tCancelUnitBuff(\"player\", (GetSpellInfo(642)))\n\t\tCancelUnitBuff(\"player\", (GetSpellInfo(45438)))\n\t\tCancelUnitBuff(\"player\", (GetSpellInfo(19752)))\n\tend\nend\n\nlocal function NextPhase(self, delay)\n\tself.vb.infestCount = 0\n\tself.vb.defileCount = 0\n\tself.vb.valkyrWaveCount = 0\n\tself.vb.soulReaperCount = 0\n\tif self.vb.phase == 1 then\n\t\tberserkTimer:Start(-delay)\n\t\twarnShamblingSoon:Schedule(15-delay)\n\t\ttimerShamblingHorror:Start(20-delay)\n\t\ttimerDrudgeGhouls:Start(10-delay)\n\t\tif self:IsHeroic() then\n\t\t\ttimerTrapCD:Start(-delay)\n\t\tend\n\t\ttimerNecroticPlagueCD:Start(-delay) -- no difference between N and H. (10N Icecrown 2022/08/20 || 10N Icecrown 2022/08/25 || 25H Lordaeron 2022/09/03) - 31.1; 32.6 || 31.6 || 30.7; 32.1; 31.0; 32.7; 30.4; 31.7; 31.5; 32.8; 30.8\n\t\ttimerInfestCD:Start(5.0-delay, self.vb.infestCount+1) -- Fixed timer, confirmed on log review 2022/09/03\n\telseif self.vb.phase == 2 then\n\t\twarnPhase2:Show()\n\t\twarnPhase2:Play(\"ptwo\")\n\t\tif self.Options.ShowFrame then\n\t\t\tself:CreateFrame()\n\t\tend\n\t\ttimerSummonValkyr:Start(17, self.vb.valkyrWaveCount+1) -- (25H Lordaeron 2022/09/21_wipe1 || 25H Lordaeron 2022/09/21_wipe2 || 25H Lordaeron 2022/09/21_kill || 25H Lordaeron 2022/09/26_wipe3 || 25H Lordaeron 2022/09/26_wipe6) - 17.5 || 17.5 || 17.4 || 17.3 || 17.0\n\t\ttimerSoulreaperCD:Start(40, self.vb.soulReaperCount+1)\n\t\tsoundSoulReaperSoon:Schedule(40-2.5, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\soulreaperSoon.mp3\")\n\t\ttimerDefileCD:Start(37.5, self.vb.defileCount+1)\n\t\ttimerInfestCD:Start(12.2, self.vb.infestCount+1) -- 0.3s variance [12.2-12.5] (10N Icecrown 2022/08/25 || 25H Lordaeron 2022/09/03) - 12.4 || 12.5; 12.5; 12.5; 12.2; 12.5; 12.5; 12.5\n\t\tsoundInfestSoon:Schedule(12.2-2, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\infestSoon.mp3\")\n\t\twarnDefileSoon:Schedule(33, self.vb.defileCount+1)\n\t\twarnDefileSoon:ScheduleVoice(33, \"scatter\") -- Voice Pack - Scatter.ogg: \"Spread!\"\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"UNIT_ENTERING_VEHICLE\",\n\t\t\t\"UNIT_EXITING_VEHICLE\"\n\t\t)\n\telseif self.vb.phase == 3 then\n\t\twarnPhase3:Show()\n\t\twarnPhase3:Play(\"pthree\")\n\t\ttimerVileSpirit:Start(17)\n\t\ttimerSoulreaperCD:Start(37.5, self.vb.soulReaperCount+1)\n\t\tsoundSoulReaperSoon:Schedule(37.5-2.5, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\soulreaperSoon.mp3\")\n\t\ttimerDefileCD:Start(nil, self.vb.defileCount+1)\n\t\twarnDefileSoon:Schedule(32-5, self.vb.defileCount+1)\n\t\twarnDefileSoon:ScheduleVoice(32-5, \"scatter\")\n\t\ttimerHarvestSoulCD:Start(13.6) -- REVIEW! variance? (25H Lordaeron 2022/10/21 || 25H Lordaeron 2022/11/16) - 13.6 || 14.0\n--\t\tif self:IsHeroic() then\n--\t\t\tself:RegisterShortTermEvents(\n--\t\t\t\t\"ZONE_CHANGED\"\n--\t\t\t)\n--\t\tend\n\tend\nend\n\nlocal function leftFrostmourne(self)\n\tDBM:Debug(\"Left Frostmourne\")\n\tDBM:AddSpecialEventToTranscriptorLog(\"Left Frostmourne\")\n\ttimerHarvestSoulCD:Start(58.72) -- Subtract [58.72]s from Exit FM to next CAST_SUCCESS diff. Timestamps: Harvest cast success > Enter Frostmourne (SAA 73655) > Exit FM (SAR 73655) > Harvest cast. (25H Lordaeron [2023-08-23]@[22:14:48]) - \"Harvest Souls-74297-npc:36597-3706 = pull:452.4/Stage 3/14.0, 107.3, 107.2\" => '107.3 calculation as follows': 452.42 > 458.44 [6.02] > 500.97 [42.53/48.55] > 559.69 [58.72/101.25/107.27]\n\ttimerDefileCD:Start(1.5, self.vb.defileCount+1) -- As soon as the group leaves FM\n\twarnDefileSoon:Show(self.vb.defileCount+1)\n\twarnDefileSoon:Play(\"scatter\") -- Voice Pack - Scatter.ogg: \"Spread!\"\n\ttimerSoulreaperCD:Start(3.5, self.vb.soulReaperCount+1) -- After Defile cast (+2s)\n\tsoundSoulReaperSoon:Schedule(3.5-2.5, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\soulreaperSoon.mp3\")\n\ttimerVileSpirit:Start(7.81) -- (25H Lordaeron [2023-09-13]@[22:13:36]) - \"Vile Spirits-70498-npc:36597-4244 = pull:518.95/Left Frostmourne/7.81, 40.11, Left Frostmourne/59.17, 7.81/66.98, 39.97, Left Frostmourne/59.45\"\nend\n\nlocal function RestoreWipeTime(self)\n\tself:SetWipeTime(5) --Restore it after frostmourn room.\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:DestroyFrame()\n\tself:SetStage(1)\n\tself.vb.valkIcon = 2\n\tself.vb.warned_preP2 = false\n\tself.vb.warned_preP3 = false\n\tself.vb.ragingSpiritCount = 0\n\tNextPhase(self, delay)\n\ttable.wipe(shamblingHorrorsGUIDs)\n\ttable.wipe(iceSpheresGUIDs)\n\ttable.wipe(ragingSpiritsGUIDs)\n\ttable.wipe(warnedValkyrGUIDs)\n\ttable.wipe(plagueExpires)\nend\n\nfunction mod:OnCombatEnd()\n\tself:UnregisterShortTermEvents()\n\tself:DestroyFrame()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:DefileTarget(targetname, uId)\n\tif not targetname and not uId then return end\n\tif self.Options.DefileIcon then\n\t\tself:SetIcon(targetname, 7, 4)\n\tend\n\tif targetname == UnitName(\"player\") then\n\t\tspecWarnDefileCast:Show()\n\t\tspecWarnDefileCast:Play(\"runout\")\n\t\tsoundDefileOnYou:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\defileOnYou.mp3\")\n\t\tyellDefile:Yell()\n\telseif self:CheckNearby(11, targetname) then\n\t\tspecWarnDefileNear:Show(targetname)\n\tend\n\twarnDefileCast:Show(self.vb.defileCount, targetname, DBM.RangeCheck:GetDistance(uId)) -- Always show announcement, regardless of distance\n\tif self.Options.DefileArrow then\n\t\tlocal x, y = GetPlayerMapPosition(uId)\n\t\t\tif x == 0 and y == 0 then\n\t\t\t\tSetMapToCurrentZone()\n\t\t\t\tx, y = GetPlayerMapPosition(uId)\n\t\t\tend\n\t\tDBM.Arrow:ShowRunAway(x, y, 10, 5)\n\tend\nend\n\nfunction mod:TrapTarget(targetname, uId)\n\tif not targetname and not uId then return end\n\tif self.Options.TrapIcon then\n\t\tself:SetIcon(targetname, 7, 4)\n\tend\n\tif targetname == UnitName(\"player\") then\n\t\tspecWarnTrap:Show()\n\t\tspecWarnTrap:Play(\"watchstep\")\n\t\tyellTrap:Yell()\n\telseif self:CheckNearby(15, targetname) then\n\t\tspecWarnTrapNear:Show(targetname)\n\t\tspecWarnTrapNear:Play(\"watchstep\")\n\tend\n\twarnTrapCast:Show(targetname, DBM.RangeCheck:GetDistance(uId)) -- Always show announcement, regardless of distance\n\tif self.Options.TrapArrow then\n\t\tlocal x, y = GetPlayerMapPosition(uId)\n\t\t\tif x == 0 and y == 0 then\n\t\t\t\tSetMapToCurrentZone()\n\t\t\t\tx, y = GetPlayerMapPosition(uId)\n\t\t\tend\n\t\tDBM.Arrow:ShowRunAway(x, y, 10, 5)\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif args:IsSpellID(68981, 74270, 74271, 74272) or args:IsSpellID(72259, 74273, 74274, 74275) then -- Remorseless Winter (phase transition start)\n\t\tself:SetStage(self.vb.phase + 0.5) -- Intermission. Use + 0.5 workaround to differentiate between intermissions.\n\t\tself.vb.ragingSpiritCount = 1\n\t\twarnRemorselessWinter:Show()\n\t\ttimerPhaseTransition:Start()\n\t\tif self.vb.phase == 1.5 then\n\t\t\ttimerRagingSpiritCD:Start(6, self.vb.ragingSpiritCount) -- Fixed timer, confirmed after log review 2022/09/26: 6.0 for first intermission\n\t\telse\n\t\t\ttimerRagingSpiritCD:Start(5, self.vb.ragingSpiritCount) -- Fixed timer, confirmed after log review 2022/09/26: 5.0 for second intermission\n\t\tend\n\t\twarnShamblingSoon:Cancel()\n\t\ttimerShamblingHorror:Cancel()\n\t\ttimerDrudgeGhouls:Cancel()\n\t\ttimerSummonValkyr:Cancel()\n\t\ttimerInfestCD:Cancel()\n\t\tsoundInfestSoon:Cancel()\n\t\ttimerNecroticPlagueCD:Cancel()\n\t\ttimerTrapCD:Cancel()\n\t\ttimerDefileCD:Cancel()\n\t\twarnDefileSoon:Cancel()\n\t\twarnDefileSoon:CancelVoice()\n\t\ttimerSoulreaperCD:Cancel()\n\t\tsoundSoulReaperSoon:Cancel()\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"UPDATE_MOUSEOVER_UNIT\",\n\t\t\t\"UNIT_TARGET_UNFILTERED\"\n\t\t)\n\t\tself:DestroyFrame()\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Show(8)\n\t\tend\n\telseif args:IsSpellID(72143, 72146, 72147, 72148) then -- Shambling Horror enrage effect.\n\t\tlocal shamblingCount = DBM:tIndexOf(shamblingHorrorsGUIDs, args.sourceGUID)\n\t\twarnShamblingEnrage:Show(args.sourceName)\n\t\tspecWarnEnrage:Show()\n\t\ttimerEnrageCD:Stop(shamblingCount, args.sourceGUID) -- Stop/Unschedule required for multi arg timers, instead of Restart/Cancel - Core bug with mismatched args\n\t\ttimerEnrageCD:Unschedule(nil, shamblingCount, args.sourceGUID)\n\t\ttimerEnrageCD:Start(nil, shamblingCount, args.sourceGUID)\n\t\ttimerEnrageCD:Schedule(25, nil, shamblingCount, args.sourceGUID) -- has to be the highest possible timer\n\telseif spellId == 72262 then -- Quake (phase transition end)\n\t\tself.vb.ragingSpiritCount = 0\n\t\twarnQuake:Show()\n\t\ttimerRagingSpiritCD:Cancel()\n\t\tself:SetStage(self.vb.phase + 0.5) -- Return back to whole number\n\t\tself:UnregisterShortTermEvents()\n\t\tNextPhase(self) -- keep this after UnregisterShortTermEvents for P2 vehicle events\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Hide()\n\t\tend\n\telseif spellId == 70358 then -- Drudge Ghouls\n\t\twarnDrudgeGhouls:Show()\n\t\ttimerDrudgeGhouls:Start()\n\telseif spellId == 70498 then -- Vile Spirits\n\t\twarnSummonVileSpirit:Show()\n\t\ttimerVileSpirit:Start()\n\telseif args:IsSpellID(70541, 73779, 73780, 73781) then -- Infest\n\t\tself.vb.infestCount = self.vb.infestCount + 1\n\t\twarnInfest:Show(self.vb.infestCount)\n\t\tspecWarnInfest:Show(self.vb.infestCount)\n\t\ttimerInfestCD:Start(nil, self.vb.infestCount+1)\n\t\tsoundInfestSoon:Cancel()\n\t\tsoundInfestSoon:Schedule(22.5-2, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\infestSoon.mp3\")\n\telseif spellId == 72762 then -- Defile\n\t\tself.vb.defileCount = self.vb.defileCount + 1\n\t\tself:BossTargetScanner(36597, \"DefileTarget\", 0.02, 15)\n\t\twarnDefileSoon:Cancel()\n\t\twarnDefileSoon:CancelVoice()\n\t\twarnDefileSoon:Schedule(27, self.vb.defileCount+1)\n\t\twarnDefileSoon:ScheduleVoice(27, \"scatter\")\n\t\ttimerDefileCD:Start(nil, self.vb.defileCount+1)\n\telseif spellId == 73539 then -- Shadow Trap (Heroic)\n\t\tself:BossTargetScanner(36597, \"TrapTarget\", 0.02, 10)\n\t\ttimerTrapCD:Start()\n\telseif spellId == 73650 then -- Restore Soul (Heroic)\n\t\twarnRestoreSoul:Show()\n\t\ttimerRestoreSoul:Start()\n\t\tself:Schedule(40, leftFrostmourne, self) -- Always 40s\n\t\tif self.Options.RemoveImmunes then\n\t\t\tself:Schedule(39.99, RemoveImmunes, self)\n\t\tend\n\telseif spellId == 72350 then -- Fury of Frostmourne\n\t\tself:SetWipeTime(190) --Change min wipe time mid battle to force dbm to keep module loaded for this long out of combat roleplay, hopefully without breaking mod.\n\t\tself:Stop()\n\t\tself:ClearIcons()\n\t\ttimerRoleplay:Start()\n\telseif args:IsSpellID(69242, 73800, 73801, 73802) then -- Soul Shriek Raging spirits\n\t\ttimerSoulShriekCD:Start(args.sourceGUID)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif args:IsSpellID(70337, 73912, 73913, 73914) then -- Necrotic Plague (SPELL_AURA_APPLIED is not fired for this spell)\n\t\tlastPlague = args.destName\n\t\twarnNecroticPlague:Show(lastPlague)\n\t\ttimerNecroticPlagueCD:Start()\n\t\ttimerNecroticPlagueCleanse:Start()\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnNecroticPlague:Show()\n\t\t\tsoundNecroticOnYou:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\necroticOnYou.mp3\")\n\t\tend\n\t\tif self.Options.NecroticPlagueIcon then\n\t\t\tself:SetIcon(lastPlague, 4, 5)\n\t\tend\n\telseif args:IsSpellID(69409, 73797, 73798, 73799) then -- Soul reaper (MT debuff)\n\t\tself.vb.soulReaperCount = self.vb.soulReaperCount + 1\n\t\ttimerSoulreaperCD:Cancel()\n\t\twarnSoulreaper:Show(self.vb.soulReaperCount, args.destName)\n\t\tspecwarnSoulreaper:Show(args.destName)\n\t\ttimerSoulreaper:Start(args.destName)\n\t\ttimerSoulreaperCD:Start(nil, self.vb.soulReaperCount+1)\n\t\tsoundSoulReaperSoon:Schedule(30.5-2.5, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\soulreaperSoon.mp3\")\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnSoulreaper:Show()\n\t\t\tspecWarnSoulreaper:Play(\"defensive\")\n\t\telse\n\t\t\tspecWarnSoulreaperOtr:Show(args.destName)\n\t\t\tspecWarnSoulreaperOtr:Play(\"tauntboss\")\n\t\tend\n\telseif spellId == 69200 then -- Raging Spirit\n\t\tself.vb.ragingSpiritCount = self.vb.ragingSpiritCount + 1\n\t\ttinsert(ragingSpiritsGUIDs, \"unknownSpiritGUID\")\n\t\ttimerSoulShriekCD:Start(\"v18-20\", \"unknownSpiritGUID\") -- spirit GUID is unknown, and it would be expensive to both retrieve it later and to manipulate the timer, so we just use a dummy GUID to cancel later\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnRagingSpirit:Show()\n\t\t\tspecWarnRagingSpirit:Play(\"targetyou\")\n\t\telse\n\t\t\twarnRagingSpirit:Show(args.destName)\n\t\tend\n\t\tif self.vb.phase == 1.5 then\n\t\t\ttimerRagingSpiritCD:Start(nil, self.vb.ragingSpiritCount) -- Fixed timer, confirmed after log review 2022/09/03: 20.0 for first intermission\n\t\telse\n\t\t\ttimerRagingSpiritCD:Start(15.0, self.vb.ragingSpiritCount) -- Fixed timer, confirmed after log review 2022/09/03: 15.0 for second intermission\n\t\tend\n\t\tif self.Options.RagingSpiritIcon then\n\t\t\tself:SetIcon(args.destName, 6, 5)\n\t\tend\n\telseif args:IsSpellID(68980, 74325, 74326, 74327) then -- Harvest Soul\n\t\ttimerHarvestSoul:Start(args.destName)\n\t\ttimerHarvestSoulCD:Start()\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnHarvestSoul:Show()\n\t\t\tspecWarnHarvestSoul:Play(\"targetyou\")\n\t\telse\n\t\t\twarnHarvestSoul:Show(args.destName)\n\t\tend\n\t\tif self.Options.HarvestSoulIcon then\n\t\t\tself:SetIcon(args.destName, 5, 5)\n\t\tend\n\telseif args:IsSpellID(73654, 74295, 74296, 74297) then -- Harvest Souls (Heroic)\n\t\tspecWarnHarvestSouls:Show()\n\t\t--specWarnHarvestSouls:Play(\"phasechange\")\n--\t\ttimerHarvestSoulCD:Start(106.1) -- Custom edit to make Harvest Souls timers work again. REVIEW! 1s variance? (25H Lordaeron 2022/09/03 || 25H Lordaeron 2022/11/16) - 106.4, 107.5, 106.5 || 106.1, 106.3, 106.6\n\t\ttimerVileSpirit:Cancel()\n\t\ttimerSoulreaperCD:Cancel()\n\t\tsoundSoulReaperSoon:Cancel()\n\t\ttimerDefileCD:Cancel()\n\t\twarnDefileSoon:Cancel()\n\t\twarnDefileSoon:CancelVoice()\n\t\tself:SetWipeTime(50)--We set a 45 sec min wipe time to keep mod from ending combat if you die while rest of raid is in frostmourn\n\t\tself:Schedule(50, RestoreWipeTime, self)\n--\t\tself:Schedule(48.55, leftFrostmourne, self) -- Subtract [48.55]s from Exit FM to last CAST_SUCCESS diff. Timestamps: Harvest cast success > Enter Frostmourne (SAA 73655) > Exit FM (SAR 73655) > Exit FM (ZONE_CHANGED) > Harvest cast. (25H Lordaeron [2023-08-23]@[22:14:48]) - \"Harvest Souls-74297-npc:36597-3706 = pull:452.4/Stage 3/14.0, 107.3, 107.2\" => '107.3 calculation as follows': 452.42 > 458.44 [6.02] > 500.97 [42.53/48.55] > 501.39 [0.42/42.95/48.97] > 559.69 [58.30/58.72/101.25/107.27]\n\tend\nend\n\nfunction mod:SPELL_DISPEL(args)\n\tlocal extraSpellId = args.extraSpellId\n\tif type(extraSpellId) == \"number\" and (extraSpellId == 70337 or extraSpellId == 73912 or extraSpellId == 73913 or extraSpellId == 73914 or extraSpellId == 70338 or extraSpellId == 73785 or extraSpellId == 73786 or extraSpellId == 73787) then\n\t\tif self.Options.NecroticPlagueIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n--\tif args:IsSpellID(72143, 72146, 72147, 72148) then -- Shambling Horror enrage effect. Disabled on AURA_APPLIED since it is earlier (and therefore better) on CAST_START. Also prevents double announce\n--\t\ttimerEnrageCD:Cancel(args.sourceGUID)\n--\t\twarnShamblingEnrage:Show(args.destName)\n--\t\ttimerEnrageCD:Start(args.sourceGUID)\n\tif spellId == 28747 then -- Shambling Horror enrage effect on low hp\n\t\tspecWarnEnrageLow:Show()\n\telseif args:IsSpellID(72754, 73708, 73709, 73710) and args:IsPlayer() and self:AntiSpam(2, 1) then\t\t-- Defile Damage\n\t\tspecWarnGTFO:Show(args.spellName)\n\t\tspecWarnGTFO:Play(\"watchfeet\")\n\t\tsoundDefileOnYou:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\defileOnYou.mp3\")\n--[[ -- no longer needed since we use SPELL_CAST_START scheduling for leftFrostmourne. Unsure as to when this\n\telseif spellId == 73650 and self:AntiSpam(3, 2) then\t\t-- Restore Soul (Heroic)\n\t\t-- DBM:AddMsg(\"Restore Soul SPELL_AURA_APPLIED unhidden from combat log. Notify Zidras on Discord or GitHub\") -- no longer valid, at least from 18/04/2025 on Warmane.\n\t\ttimerHarvestSoulCD:Start(60) -- this is slighly innacurate\n\t\ttimerVileSpirit:Start(10)--May be wrong too but we'll see, didn't have enough log for this one.\n]]\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED_DOSE(args)\n\tif args:IsSpellID(70338, 73785, 73786, 73787) then\t--Necrotic Plague (hop IDs only since they DO fire for >=2 stacks, since function never announces 1 stacks anyways don't need to monitor LK casts/Boss Whispers here)\n\t\tif self.Options.AnnouncePlagueStack and DBM:GetRaidRank() > 0 then\n\t\t\tif args.amount % 10 == 0 or (args.amount >= 10 and args.amount % 5 == 0) then\t\t-- Warn at 10th stack and every 5th stack if more than 10\n\t\t\t\tSendChatMessage(L.PlagueStackWarning:format(args.destName, (args.amount or 1)), \"RAID\")\n\t\t\telseif (args.amount or 1) >= 30 and not warnedAchievement then\t\t\t\t\t\t-- Announce achievement completed if 30 stacks is reached\n\t\t\t\tSendChatMessage(L.AchievementCompleted:format(args.destName, (args.amount or 1)), \"RAID_WARNING\")\n\t\t\t\twarnedAchievement = true\n\t\t\tend\n\t\tend\n\tend\nend\n\n--[[ This would probably fail on early UNIT_DIED, so schedule it instead\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 73655 and args:IsPlayer() then -- Harvest Soul (25H)\n\t\ttimerHarvestSoulCD:Start(57.5) -- Subtract [48.56]s to CAST_SUCCESS diff. Timestamps: Harvest cast > Enter Frostmourne > Exit FM > Harvest cast. (25H Lordaeron [2023-08-23]@[22:14:48]) - \"Harvest Souls-74297-npc:36597-3706 = pull:452.4/Stage 3/14.0, 107.3, 107.2\" => '107.3 calculation as follows': 452.42 > 458.87 [6.45] > 500.98 > 501.39 [0.41/42.52/48.97] > 559.69 [58.30/58.71/100.82/107.27]\n\tend\nend\n]]\n\nfunction mod:SPELL_SUMMON(args)\n\tlocal spellId = args.spellId\n\tif spellId == 69037 then -- Summon Val'kyr\n\t\tif self.Options.ShowFrame then\n\t\t\tself:CreateFrame()\n\t\tend\n\t\tif self.Options.ValkyrIcon then\n\t\t\tself:ScanForMobs(args.destGUID, 2, self.vb.valkIcon, 1, nil, 12, \"ValkyrIcon\")\n\t\tend\n\t\tself.vb.valkIcon = self.vb.valkIcon + 1\n--[[\t\tself.vb.valkyrWaveCount = self.vb.valkyrWaveCount + 1\n\t\tif time() - lastValk > 15 then -- show the warning and timer just once for all three summon events\n\t\t\twarnSummonValkyr:Show(self.vb.valkyrWaveCount)\n\t\t\ttimerSummonValkyr:Start(nil, self.vb.valkyrWaveCount+1)\n\t\t\tlastValk = time()\n\t\t\tscanValkyrTargets(self)\n\t\t\t--if self.Options.ValkyrIcon then\n\t\t\t--\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\t\t\t--\tif self:IsDifficulty(\"normal25\", \"heroic25\") then\n\t\t\t--\t\tself:ScanForMobs(args.destGUID, 1, 2, 3, nil, 20, \"ValkyrIcon\")--mod, scanId, iconSetMethod, mobIcon, maxIcon,\n\t\t\t--\telse\n\t\t\t--\t\tself:ScanForMobs(args.destGUID, 1, 2, 1, nil, 20, \"ValkyrIcon\")\n\t\t\t--\tend\n\t\t\t--end\n\t\tend--]]\n\telseif spellId == 70372 then -- Shambling Horror\n\t\ttinsert(shamblingHorrorsGUIDs, args.destGUID) -- Spawn order. Idea was to somehow distinguish shamblings, so let's do this on the assumption that it's visually easy to differentiate them due to HP diff.\n\t\tlocal shamblingCount = DBM:tIndexOf(shamblingHorrorsGUIDs, args.destGUID)\n\t\twarnShamblingSoon:Cancel()\n\t\twarnShamblingHorror:Show()\n\t\twarnShamblingSoon:Schedule(55)\n\t\ttimerShamblingHorror:Start()\n\t\ttimerEnrageCD:Start(12.3, shamblingCount, args.destGUID) -- -20s from Shambling Enrage summon. 34.4 || 34.3; 32.3; 33.4\n\t\ttimerEnrageCD:Schedule(12.3+2, nil, shamblingCount, args.destGUID) -- apparently on Warmane if you stun on pre-cast, it skips the Enrage. Couldn't repro on test server nor validate it, but doesn't really hurt because SCS has Restart method\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, spellId, spellName)\n\tif (spellId == 68983 or spellId == 73791 or spellId == 73792 or spellId == 73793) and destGUID == UnitGUID(\"player\") and self:AntiSpam(2, 3) then\t\t-- Remorseless Winter\n\t\tspecWarnGTFO:Show(spellName)\n\t\tspecWarnGTFO:Play(\"watchfeet\")\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\nfunction mod:UNIT_HEALTH(uId)\n\tif self:IsHeroic() and self:GetUnitCreatureId(uId) == 36609 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.55 and not warnedValkyrGUIDs[UnitGUID(uId)] then\n\t\twarnedValkyrGUIDs[UnitGUID(uId)] = true\n\t\tspecWarnValkyrLow:Show()\n\t\tspecWarnValkyrLow:Play(\"stopattack\")\n\tend\n\tif self.vb.phase == 1 and not self.vb.warned_preP2 and self:GetUnitCreatureId(uId) == 36597 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.73 then\n\t\tself.vb.warned_preP2 = true\n\t\twarnPhase2Soon:Show()\n\telseif self.vb.phase == 2 and not self.vb.warned_preP3 and self:GetUnitCreatureId(uId) == 36597 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.43 then\n\t\tself.vb.warned_preP3 = true\n\t\twarnPhase3Soon:Show()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.LKPull or msg:find(L.LKPull) then\n\t\tself:SendSync(\"CombatStart\")\n\t\tif self.Options.ShowFrame then\n\t\t\tself:CreateFrame()\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 37698 then--Shambling Horror\n\t\tlocal shamblingCount = DBM:tIndexOf(shamblingHorrorsGUIDs, args.sourceGUID)\n\t\ttimerEnrageCD:Stop(shamblingCount, args.sourceGUID)\n\t\ttimerEnrageCD:Unschedule(nil, shamblingCount, args.sourceGUID)\n\telseif cid == 36701 then -- Raging Spirit\n\t\ttimerSoulShriekCD:Cancel(args.sourceGUID)\n\tend\nend\n\nfunction mod:UNIT_AURA_UNFILTERED(uId)\n\tlocal name = DBM:GetUnitFullName(uId)\n\tif (not name) or (name == lastPlague) then return end\n\tlocal _, _, _, _, _, _, expires, _, _, _, spellId = DBM:UnitDebuff(uId, plagueHop)\n\tif not spellId or not expires then return end\n\tif (spellId == 73787 or spellId == 70338 or spellId == 73785 or spellId == 73786) and expires > 0 and not plagueExpires[expires] then\n\t\tplagueExpires[expires] = true\n\t\twarnNecroticPlagueJump:Show(name)\n\t\ttimerNecroticPlagueCleanse:Restart() -- prevent timer debug, since dispel can (and should) happen before the 5s expires\n\t\tif name == UnitName(\"player\") and not mod:IsTank() then\n\t\t\tspecWarnNecroticPlague:Show()\n\t\t\tsoundNecroticOnYou:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\necroticOnYou.mp3\")\n\t\tend\n\t\tif self.Options.NecroticPlagueIcon then\n\t\t\tself:SetIcon(uId, 4, 5)\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_ENTERING_VEHICLE(uId)\n\tlocal unitName = UnitName(uId)\n\tDBM:Debug(\"UNIT_ENTERING_VEHICLE Val'kyr check for \"..  unitName .. \" (\" .. uId .. \"): UnitInVehicle is returning \" .. (UnitInVehicle(uId) or \"nil\") .. \" and UnitInRange is returning \" .. (UnitInRange(uId) or \"nil\") .. \" with distance: \" .. DBM.RangeCheck:GetDistance(uId) ..\"yd. Checking if it is already cached: \" .. (valkyrTargets[unitName] and \"true\" or \"nil.\"), 3)\n--\t\tDBM:Debug(unitName .. \" (\" .. uId .. \") has entered a vehicle. Confirming API: \" .. (UnitInVehicle(uId) or \"nil\"))\n\tif UnitInVehicle(uId) and not valkyrTargets[unitName] then\t  -- if person is in a vehicle and not already announced (API is probably unneeded, need more logs to confirm. Cache check is required to prevent this event from multifiring for the same raid member with more than one uId)\n\t\tvalkyrGrabWarning:Show(DBM:GetUnitRoleIcon(uId), unitName, DBM:IconNumToTexture(grabIcon)) -- roleIcon, name, raid target icon\n\t\tvalkyrTargets[unitName] = true\n\t\tlocal raidIndex = UnitInRaid(uId)\n\t\tlocal name, _, subgroup, _, _, fileName = GetRaidRosterInfo(raidIndex + 1)\n\t\tif name == unitName then\n\t\t\tlocal grp = subgroup\n\t\t\tlocal class = fileName\n\t\t\tself:AddEntry(name, grp or 0, class, grabIcon)\n\t\tend\n\t\tif UnitIsUnit(uId, \"player\") then\n\t\t\tspecWarnYouAreValkd:Show()\n\t\t\tspecWarnYouAreValkd:Play(\"targetyou\")\n\t\tend\n\t\tif DBM:IsInGroup() and self.Options.AnnounceValkGrabs and DBM:GetRaidRank() > 1 then\n\t\t\tlocal channel = (IsInRaid() and \"RAID\") or \"PARTY\"\n\t\t\tif self.Options.ValkyrIcon then\n\t\t\t\tSendChatMessage(L.ValkGrabbedIcon:format(grabIcon, unitName), channel)\n\t\t\telse\n\t\t\t\tSendChatMessage(L.ValkGrabbed:format(unitName), channel)\n\t\t\tend\n\t\tend\n\t\tgrabIcon = grabIcon + 1--Makes assumption discovery order of vehicle grabs will match combat log order, since there is a delay\n\tend\nend\n\nfunction mod:UNIT_EXITING_VEHICLE(uId)\n\tlocal unitName = UnitName(uId)\n\tDBM:Debug(unitName .. \" (\" .. uId .. \") has exited a vehicle. Confirming API: \" .. (UnitInVehicle(uId) or \"nil\"))\n\tif valkyrTargets[unitName] then -- on Val'kyr passenger drop, it sometimes fires twice in one second succession, so check cache (AntiSpam was a bit too much for this)\n\t\tvalkyrTargets[unitName] = nil\n\t\tself:RemoveEntry(unitName)\n\tend\nend\n--[[\nfunction mod:UNIT_SPELLCAST_START(_, spellName)\n\tif spellName == GetSpellInfo(68981) then -- Remorseless Winter (phase transition start)\n\t\tself:SetStage(self.vb.phase + 0.5) -- Intermission. Use + 0.5 workaround to differentiate between intermissions.\n\t\tself.vb.ragingSpiritCount = 1\n\t\twarnRemorselessWinter:Show()\n\t\ttimerPhaseTransition:Start()\n\t\tif self.vb.phase == 1.5 then\n\t\t\ttimerRagingSpiritCD:Start(6, self.vb.ragingSpiritCount) -- Fixed timer, confirmed after log review 2022/09/26: 6.0 for first intermission\n\t\telse\n\t\t\ttimerRagingSpiritCD:Start(5, self.vb.ragingSpiritCount) -- Fixed timer, confirmed after log review 2022/09/26: 5.0 for second intermission\n\t\tend\n\t\twarnShamblingSoon:Cancel()\n\t\ttimerShamblingHorror:Cancel()\n\t\ttimerDrudgeGhouls:Cancel()\n\t\ttimerSummonValkyr:Cancel()\n\t\ttimerInfestCD:Cancel()\n\t\tsoundInfestSoon:Cancel()\n\t\ttimerNecroticPlagueCD:Cancel()\n\t\ttimerTrapCD:Cancel()\n\t\ttimerDefileCD:Cancel()\n\t\twarnDefileSoon:Cancel()\n\t\twarnDefileSoon:CancelVoice()\n\t\ttimerSoulreaperCD:Cancel()\n\t\tsoundSoulReaperSoon:Cancel()\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"UPDATE_MOUSEOVER_UNIT\",\n\t\t\t\"UNIT_TARGET_UNFILTERED\"\n\t\t)\n\t\tself:DestroyFrame()\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Show(8)\n\t\tend\n\telseif spellName == GetSpellInfo(72262) then -- Quake (phase transition end)\n\t\tself.vb.ragingSpiritCount = 0\n\t\twarnQuake:Show()\n\t\ttimerRagingSpiritCD:Cancel()\n\t\tself:SetStage(self.vb.phase + 0.5) -- Return back to whole number\n\t\tself:UnregisterShortTermEvents()\n\t\tNextPhase(self) -- keep this after UnregisterShortTermEvents for P2 vehicle events\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Hide()\n\t\tend\n\telseif spellName == GetSpellInfo(70358) then -- Drudge Ghouls\n\t\twarnDrudgeGhouls:Show()\n\t\ttimerDrudgeGhouls:Start()\n\telseif spellName == GetSpellInfo(70498) then -- Vile Spirits\n\t\twarnSummonVileSpirit:Show()\n\t\ttimerVileSpirit:Start()\n\telseif spellName == GetSpellInfo(70541) then -- Infest\n\t\tself.vb.infestCount = self.vb.infestCount + 1\n\t\twarnInfest:Show(self.vb.infestCount)\n\t\tspecWarnInfest:Show(self.vb.infestCount)\n\t\ttimerInfestCD:Start(nil, self.vb.infestCount+1)\n\t\tsoundInfestSoon:Cancel()\n\t\tsoundInfestSoon:Schedule(22.5-2, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\infestSoon.mp3\")\n\telseif spellName == GetSpellInfo(72762) then -- Defile\n\t\tself.vb.defileCount = self.vb.defileCount + 1\n\t\tself:BossTargetScanner(36597, \"DefileTarget\", 0.02, 15)\n\t\twarnDefileSoon:Cancel()\n\t\twarnDefileSoon:CancelVoice()\n\t\twarnDefileSoon:Schedule(27, self.vb.defileCount+1)\n\t\twarnDefileSoon:ScheduleVoice(27, \"scatter\")\n\t\ttimerDefileCD:Start(nil, self.vb.defileCount+1)\n\telseif spellName == GetSpellInfo(73539) then -- Shadow Trap (Heroic)\n\t\tself:BossTargetScanner(36597, \"TrapTarget\", 0.02, 10)\n\t\ttimerTrapCD:Start()\n\telseif spellName == GetSpellInfo(72350) then -- Fury of Frostmourne\n\t\tself:SetWipeTime(190) --Change min wipe time mid battle to force dbm to keep module loaded for this long out of combat roleplay, hopefully without breaking mod.\n\t\tself:Stop()\n\t\tself:ClearIcons()\n\t\ttimerRoleplay:Start()\n\tend\nend\n]]\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n--\tif spellName == soulshriek and mod:LatencyCheck() then\n--\t\tself:SendSync(\"SoulShriek\", UnitGUID(uId))\n\tif (spellName == GetSpellInfo(74361) or spellName == GetSpellInfo(69037)) and self:AntiSpam(5, 4) then -- Summon Val'kyr Periodic (10H, 25N, 25H) | Summon Val'kyr (10N)\n\t\ttable.wipe(valkyrTargets)\t-- reset valkyr cache for next round\n\t\tgrabIcon = 2\n\t\tself.vb.valkIcon = 2\n\t\tself.vb.valkyrWaveCount = self.vb.valkyrWaveCount + 1\n\t\twarnSummonValkyr:Show(self.vb.valkyrWaveCount)\n\t\ttimerSummonValkyr:Start(nil, self.vb.valkyrWaveCount+1)\n\t--[[\n\telseif spellName == GetSpellInfo(73654) then -- Harvest Souls (Heroic)\n\t\tspecWarnHarvestSouls:Show()\n\t\t--specWarnHarvestSouls:Play(\"phasechange\")\n--\t\ttimerHarvestSoulCD:Start(106.1) -- Custom edit to make Harvest Souls timers work again. REVIEW! 1s variance? (25H Lordaeron 2022/09/03 || 25H Lordaeron 2022/11/16) - 106.4, 107.5, 106.5 || 106.1, 106.3, 106.6\n\t\ttimerVileSpirit:Cancel()\n\t\ttimerSoulreaperCD:Cancel()\n\t\tsoundSoulReaperSoon:Cancel()\n\t\ttimerDefileCD:Cancel()\n\t\twarnDefileSoon:Cancel()\n\t\twarnDefileSoon:CancelVoice()\n\t\tself:SetWipeTime(50)--We set a 45 sec min wipe time to keep mod from ending combat if you die while rest of raid is in frostmourn\n\t\tself:Schedule(50, RestoreWipeTime, self)\n--\t\tself:Schedule(48.55, leftFrostmourne, self) -- Subtract [48.55]s from Exit FM to last CAST_SUCCESS diff. Timestamps: Harvest cast success > Enter Frostmourne (SAA 73655) > Exit FM (SAR 73655) > Exit FM (ZONE_CHANGED) > Harvest cast. (25H Lordaeron [2023-08-23]@[22:14:48]) - \"Harvest Souls-74297-npc:36597-3706 = pull:452.4/Stage 3/14.0, 107.3, 107.2\" => '107.3 calculation as follows': 452.42 > 458.44 [6.02] > 500.97 [42.53/48.55] > 501.39 [0.42/42.95/48.97] > 559.69 [58.30/58.72/101.25/107.27]\n\t]]\n\tend\nend\n\nfunction mod:UPDATE_MOUSEOVER_UNIT()\n\tif DBM:GetUnitCreatureId(\"mouseover\") == 36633 then -- Ice Sphere\n\t\tlocal sphereGUID = UnitGUID(\"mouseover\")\n\t\tlocal sphereTarget = UnitName(\"mouseovertarget\")\n\t\tif sphereGUID and sphereTarget and not iceSpheresGUIDs[sphereGUID] then\n\t\t\tlocal sphereString = (\"%s\\t%s\"):format(sphereTarget, sphereGUID)\n\t\t\tself:SendSync(\"SphereTarget\", sphereString)\n\t\tend\n\telseif DBM:GetUnitCreatureId(\"mouseover\") == 36701 then -- Raging Spirit\n\t\tlocal spiritGUID = UnitGUID(\"mouseover\")\n\t\tif spiritGUID and not tContains(ragingSpiritsGUIDs, spiritGUID) then\n\t\t\tlocal spiritIndex = DBM:tIndexOf(ragingSpiritsGUIDs, \"unknownSpiritGUID\")\n\t\t\tif spiritIndex then\n\t\t\t\tragingSpiritsGUIDs[spiritIndex] = spiritGUID -- replace the dummy GUID with the real one\n\t\t\t\tlocal totalTime = \"v18-20\" -- timerSoulShriekCD:Time(\"unknownSpiritGUID\") -- 02/11/2025: Core method does not return variance, only total time. Since total time in this mod is fixed, we can just hardcode it.\n\t\t\t\tlocal elapsedTime = timerSoulShriekCD:GetTime(\"unknownSpiritGUID\")\n\t\t\t\ttimerSoulShriekCD:Cancel(\"unknownSpiritGUID\") -- cancel the dummy timer\n\t\t\t\ttimerSoulShriekCD:Update(elapsedTime, totalTime, spiritGUID) -- restart the timer with the real GUID\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_TARGET_UNFILTERED(uId)\n\tif DBM:GetUnitCreatureId(uId..\"target\") == 36633 then -- Ice Sphere\n\t\tlocal sphereGUID = UnitGUID(uId..\"target\")\n\t\tlocal sphereTarget = UnitName(uId..\"targettarget\")\n\t\tif sphereGUID and sphereTarget and not iceSpheresGUIDs[sphereGUID] then\n\t\t\ticeSpheresGUIDs[sphereGUID] = sphereTarget\n\t\t\twarnIceSpheresTarget:Show(sphereTarget)\n\t\t\tif sphereTarget == UnitName(\"player\") then\n\t\t\t\tspecWarnIceSpheresYou:Show()\n\t\t\t\tspecWarnIceSpheresYou:Play(\"iceorbmove\")\n\t\t\tend\n\t\tend\n\telseif DBM:GetUnitCreatureId(uId..\"target\") == 36701 then -- Raging Spirit\n\t\tlocal spiritGUID = UnitGUID(uId..\"target\")\n\t\tif spiritGUID and not tContains(ragingSpiritsGUIDs, spiritGUID) then\n\t\t\tlocal spiritIndex = DBM:tIndexOf(ragingSpiritsGUIDs, \"unknownSpiritGUID\")\n\t\t\tif spiritIndex then\n\t\t\t\tragingSpiritsGUIDs[spiritIndex] = spiritGUID -- replace the dummy GUID with the real one\n\t\t\t\tlocal totalTime = \"v18-20\" -- timerSoulShriekCD:Time(\"unknownSpiritGUID\") -- 02/11/2025: Core method does not return variance, only total time. Since total time in this mod is fixed, we can just hardcode it.\n\t\t\t\tlocal elapsedTime = timerSoulShriekCD:GetTime(\"unknownSpiritGUID\")\n\t\t\t\ttimerSoulShriekCD:Cancel(\"unknownSpiritGUID\") -- cancel the dummy timer\n\t\t\t\ttimerSoulShriekCD:Update(elapsedTime, totalTime, spiritGUID) -- restart the timer with the real GUID\n\t\t\tend\n\t\tend\n\tend\nend\n\n--[[\n-- \"<673.50 22:26:02> [DBM_Debug] Indoor/SubZone changed on zoneID: 605 and subZone: Frostmourne:nil:\"\n-- \"<673.51 22:26:02> [ZONE_CHANGED_INDOORS] The Frozen Throne:Icecrown Citadel:Frostmourne:\"\n\n-- \"<715.75 22:26:44> [DBM_Debug] Indoor/SubZone changed on zoneID: 605 and subZone: The Frozen Throne:nil:\"\n-- \"<715.76 22:26:44> [ZONE_CHANGED] Icecrown Citadel:Icecrown Citadel:The Frozen Throne:\"\n\n-- This would probably fail on early UNIT_DIED, and is personal event, so schedule it instead\nfunction mod:ZONE_CHANGED() -- [ZONE_CHANGED] Icecrown Citadel:Icecrown Citadel:The Frozen Throne:\n\ttimerHarvestSoulCD:Start(58.3)\nend\n]]\n\nfunction mod:OnSync(msg, target)\n\tif msg == \"CombatStart\" then\n\t\ttimerCombatStart:Start()\n--\telseif msg == \"SoulShriek\" then\n--\t\ttimerSoulShriekCD:Start(target)\n\telseif msg == \"SphereTarget\" then\n\t\tlocal sphereTarget, sphereGUID = strsplit(\"\\t\", target)\n\t\tif sphereTarget and sphereGUID and not iceSpheresGUIDs[sphereGUID] then\n\t\t\ticeSpheresGUIDs[sphereGUID] = sphereTarget\n\t\t\twarnIceSpheresTarget:Show(sphereTarget)\n\t\t\tif sphereTarget == UnitName(\"player\") then\n\t\t\t\tspecWarnIceSpheresYou:Show()\n\t\t\t\tspecWarnIceSpheresYou:Play(\"iceorbmove\")\n\t\t\tend\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Icecrown/TheFrozenThrone/LichKingFrame.lua",
    "content": "local LichKing\t= DBM:GetModByName(\"LichKing\")\nlocal L\t\t= LichKing:GetLocalizedStrings()\nlocal floor = math.floor\n\nfunction LichKing:InitializeMenu()\n--\tself is DBMLichKingMenu, not LichKing\n\tlocal info = UIDropDownMenu_CreateInfo()\n\tinfo.text = L.name\n\tinfo.notClickable = 1\n\tinfo.isTitle = 1\n\tinfo.notCheckable = 1\n\tUIDropDownMenu_AddButton(info, 1)\n\n\tlocal info1 = UIDropDownMenu_CreateInfo()\n\tinfo1.text = L.FrameLock\n\tinfo1.value = LichKing.Options.FrameLocked\n\tinfo1.func = function() LichKing.Options.FrameLocked = not LichKing.Options.FrameLocked end\n\tinfo1.checked = LichKing.Options.FrameLocked\n\tinfo1.keepShownOnClick = 1\n\tUIDropDownMenu_AddButton(info1, 1)\n\n\tlocal info2 = UIDropDownMenu_CreateInfo()\n\tinfo2.text = L.FrameClassColor\n\tinfo2.value = LichKing.Options.FrameClassColor\n\tinfo2.func = function() LichKing.Options.FrameClassColor = not LichKing.Options.FrameClassColor LichKing:UpdateColors() end\n\tinfo2.checked = LichKing.Options.FrameClassColor\n\tinfo2.keepShownOnClick = 1\n\tUIDropDownMenu_AddButton(info2, 1)\n\n\tlocal info3 = UIDropDownMenu_CreateInfo()\n\tinfo3.text = L.FrameOrientation\n\tinfo3.value = LichKing.Options.FrameUpwards\n\tinfo3.func = function() LichKing.Options.FrameUpwards = not LichKing.Options.FrameUpwards LichKing:ChangeFrameOrientation() end\n\tinfo3.checked = LichKing.Options.FrameUpwards\n\tinfo3.keepShownOnClick = 1\n\tUIDropDownMenu_AddButton(info3, 1)\n\n\tlocal info4 = UIDropDownMenu_CreateInfo()\n\tinfo4.text = L.FrameHide\n\tinfo4.func = function() DBMLichKingFrameDrag:Hide() end\n\tinfo4.notCheckable = 1\n\tUIDropDownMenu_AddButton(info4, 1)\n\n\tlocal info5 = UIDropDownMenu_CreateInfo()\n\tinfo5.text = L.FrameClose\n\tinfo5.func = function() end\n\tinfo5.notCheckable = 1\n\tUIDropDownMenu_AddButton(info5, 1)\nend\n\nlocal firstEntry = nil\nlocal lastEntry = nil\nlocal frames = {}\n\nlocal fCounter = 1\nlocal function createBarFrame(name, grp, rt)\n\tlocal frame\n\tif frames[#frames] then\n\t\tframe = frames[#frames]\n\t\tframes[#frames] = nil\n\t\tframe:Show()\n\telse\n\t\tframe = CreateFrame(\"Frame\", \"DBMLichKingFrame\"..fCounter, DBMLichKingFrameDrag, \"DBMLichKingFrameTemplate\")\n\t\tfCounter = fCounter + 1\n\tend\n\t_G[frame:GetName()..\"BarName\"]:SetText(string.format(\"|TInterface\\\\TargetingFrame\\\\UI-RaidTargetingIcon_%d:22:22|t%s (%d)\", rt, name, grp))\n\treturn frame\nend\n\nlocal barMethods = {}\nlocal function createBar(name, grp, rt)\n\tlocal newEntry = setmetatable({\n\t\tprev = lastEntry,\n\t\tnext = nil,\n\t\tdata = {\n\t\t\tframe = createBarFrame(name, grp, rt),\n\t\t\tname = name,\n\t\t\ttimer = 35\n\t\t}\n\t},\n\t{\n\t\t__index = barMethods\n\t})\n\tif lastEntry then\n\t\tlastEntry.next = newEntry\n\tend\n\tlastEntry = newEntry\n\tfirstEntry = firstEntry or newEntry\n\n\tnewEntry.data.frame.entry = newEntry\n\tnewEntry:Update(0)\n\n\treturn newEntry\nend\n\nfunction barMethods:Update(elapsed)\n\tlocal bar = _G[self.data.frame:GetName()..\"Bar\"]\n\tlocal cooldown = _G[self.data.frame:GetName()..\"BarCooldown\"]\n\tlocal spark = _G[self.data.frame:GetName()..\"BarSpark\"]\n\tself.data.timer = self.data.timer - elapsed\n\tif self.data.timer <= 0 then\n\t\tLichKing:RemoveEntry(self.data.name)\n\telse\n\t\tcooldown:SetText(floor(self.data.timer))\n\t\tbar:SetValue(self.data.timer)\n\t\tspark:ClearAllPoints()\n\t\tspark:SetPoint(\"CENTER\", bar, \"LEFT\", ((bar:GetValue() / 35) * bar:GetWidth()), 0)\n\t\tspark:Show()\n\tend\nend\n\nfunction barMethods:GetNext()\n\treturn self.next\nend\n\nfunction barMethods:GetPrev()\n\treturn self.prev\nend\n\nfunction barMethods:SetPosition()\n\tself.data.frame:ClearAllPoints()\n\tif self == firstEntry then\n\t\tif LichKing.Options.FrameUpwards then\n\t\t\tself.data.frame:SetPoint(\"BOTTOM\", DBMLichKingFrameDrag, \"TOP\", 0, -10)\n\t\telse\n\t\t\tself.data.frame:SetPoint(\"TOP\", DBMLichKingFrameDrag, \"BOTTOM\", 0, 0)\n\t\tend\n\telse\n\t\tif LichKing.Options.FrameUpwards then\n\t\t\tself.data.frame:SetPoint(\"BOTTOM\", self:GetPrev().data.frame, \"TOP\", 0, -3)\n\t\telse\n\t\t\tself.data.frame:SetPoint(\"TOP\", self:GetPrev().data.frame, \"BOTTOM\", 0, 3)\n\t\tend\n\tend\nend\n\nfunction barMethods:GetFrame()\n\treturn self.data.frame\nend\n\nfunction barMethods:GetBar()\n\treturn _G[self.data.frame:GetName()..\"Bar\"]\nend\n\nfunction barMethods:GetSpark()\n\treturn _G[self.data.frame:GetName()..\"BarSpark\"]\nend\n\nfunction LichKing:CreateFrame()\n\tDBMLichKingFrameDragTitle:SetText(L.FrameTitle)\n\tif firstEntry then\n\t\tlocal entry = firstEntry\n\t\twhile entry do\n\t\t\ttable.insert(frames, entry.data.frame)\n\t\t\tentry.data.frame:Hide()\n\t\t\tentry.data = nil\n\t\t\tentry = entry:GetNext()\n\t\tend\n\t\tfirstEntry = nil\n\t\tlastEntry = nil\n\tend\n\tDBMLichKingFrameDrag:Show()\n\tDBMLichKingFrameDrag:SetPoint(self.Options.PermanentFramePoint or \"CENTER\", nil, self.Options.PermanentFramePoint or \"CENTER\", self.Options.PermanentFrameX or 150, self.Options.PermanentFrameY or -50)\nend\n\nfunction LichKing:SaveFramePosition()\n\tlocal point, _, _, x, y = DBMLichKingFrameDrag:GetPoint()\n\tself.Options.PermanentFramePoint = point\n\tself.Options.PermanentFrameX = x\n\tself.Options.PermanentFrameY = y\nend\n\nfunction LichKing:DestroyFrame()\n\tDBMLichKingFrameDrag:Hide()\nend\n\nfunction LichKing:ChangeFrameOrientation()\n\tif firstEntry then\n\t\tlocal entry = firstEntry\n\t\twhile entry do\n\t\t\tentry:SetPosition()\n\t\t\tentry = entry:GetNext()\n\t\tend\n\tend\nend\n\nfunction LichKing:UpdateColors()\n\tif firstEntry then\n\t\tlocal entry = firstEntry\n\t\twhile entry do\n\t\t\tif self.Options.FrameClassColor then\n\t\t\t\tlocal _, _, name = entry.data.name:find(\"(.+) %(%d%)\")\n\t\t\t\tlocal class\n\t\t\t\tfor uId in DBM:GetGroupMembers() do\n\t\t\t\t\tlocal name2 = UnitName(uId)\n\t\t\t\t\tlocal _, fileName = UnitClass(uId)\n\t\t\t\t\tif name2 == name then\n\t\t\t\t\t\tclass = fileName\n\t\t\t\t\t\tbreak\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tlocal r, g, b = 1, 0.7, 0\n\t\t\t\tif self.Options.FrameClassColor then\n\t\t\t\t\tif RAID_CLASS_COLORS[class or \"\"] then\n\t\t\t\t\t\tr = RAID_CLASS_COLORS[class].r\n\t\t\t\t\t\tg = RAID_CLASS_COLORS[class].g\n\t\t\t\t\t\tb = RAID_CLASS_COLORS[class].b\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tentry:GetBar():SetStatusBarColor(r, g, b)\n\t\t\t\tentry:GetSpark():SetVertexColor(r, g, b)\n\t\t\telse\n\t\t\t\tentry:GetBar():SetStatusBarColor(1, 0.7, 0)\n\t\t\t\tentry:GetSpark():SetVertexColor(1, 0.7, 0)\n\t\t\tend\n\t\t\tentry = entry:GetNext()\n\t\tend\n\tend\nend\n\nfunction LichKing:AddEntry(name, grp, class, rt)\n\tlocal entry = createBar(name, grp, rt)\n\tlocal r, g, b = 1, 0.7, 0\n\tif self.Options.FrameClassColor then\n\t\tif RAID_CLASS_COLORS[class or \"\"] then\n\t\t\tr = RAID_CLASS_COLORS[class].r\n\t\t\tg = RAID_CLASS_COLORS[class].g\n\t\t\tb = RAID_CLASS_COLORS[class].b\n\t\tend\n\tend\n\tentry:GetBar():SetStatusBarColor(r, g, b)\n\tentry:GetSpark():SetVertexColor(r, g, b)\n\tentry:SetPosition()\nend\n\nfunction LichKing:RemoveEntry(name)\n\tif firstEntry then\n\t\tlocal entry = firstEntry\n\t\twhile entry do\n\t\t\tif entry.data.name == name then\n\t\t\t\ttable.insert(frames, entry.data.frame)\n\t\t\t\tentry.data.frame:Hide()\n\t\t\t\tentry.data = nil\n\t\t\t\tif entry == firstEntry then\n\t\t\t\t\tlocal nextEntry = entry:GetNext()\n\t\t\t\t\tif nextEntry then\n\t\t\t\t\t\tnextEntry.prev = nil\n\t\t\t\t\t\tfirstEntry = nextEntry\n\t\t\t\t\telse\n\t\t\t\t\t\tfirstEntry = nil\n\t\t\t\t\t\tlastEntry = nil\n\t\t\t\t\tend\n\t\t\t\telseif entry == lastEntry then\n\t\t\t\t\tlocal prevEntry = entry:GetPrev()\n\t\t\t\t\tif prevEntry then\n\t\t\t\t\t\tprevEntry.next = nil\n\t\t\t\t\t\tlastEntry = prevEntry\n\t\t\t\t\telse\n\t\t\t\t\t\tfirstEntry = nil\n\t\t\t\t\t\tlastEntry = nil\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tentry:GetPrev().next = entry:GetNext()\n\t\t\t\t\tentry:GetNext().prev = entry:GetPrev()\n\t\t\t\tend\n\t\t\t\tif entry:GetNext() then\n\t\t\t\t\tentry:GetNext():SetPosition()\n\t\t\t\tend\n\t\t\t\tbreak\n\t\t\tend\n\t\t\tentry = entry:GetNext()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Icecrown/TheFrozenThrone/LichKingFrame.xml",
    "content": "<Ui xmlns=\"http://www.blizzard.com/wow/ui/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.blizzard.com/wow/ui/\n..\\FrameXML\\UI.xsd\">\n\t<Frame name=\"DBMLichKingFrameDrag\" parent=\"UIParent\" frameStrata=\"MEDIUM\" hidden=\"true\" topLevel=\"true\" enableMouse=\"true\" movable=\"true\">\n\t\t<Size>\n\t\t\t<AbsDimension x=\"100\" y=\"20\"/>\n\t\t</Size>\n\t\t<Anchors>\n\t\t\t<Anchor point=\"CENTER\" relativePoint=\"CENTER\">\n\t\t\t\t<Offset>\n\t\t\t\t\t<AbsDimension x=\"150\" y=\"-50\"/>\n\t\t\t\t</Offset>\n\t\t\t</Anchor>\n\t\t</Anchors>\n\t\t<Layers>\n\t\t\t<Layer level=\"BACKGROUND\">\n\t\t\t\t<FontString name=\"$parentTitle\" inherits=\"GameFontNormalSmall\" text=\" \">\n\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t<Anchor point=\"BOTTOM\" relativePoint=\"BOTTOM\"/>\n\t\t\t\t\t</Anchors>\n\t\t\t\t</FontString>\n\t\t\t</Layer>\n\t\t</Layers>\n\t\t<Scripts>\n\t\t\t<OnMouseDown>\n\t\t\t\tif button == \"LeftButton\" and not DBM:GetModByName(\"LichKing\").Options.FrameLocked then\n\t\t\t\t\tself:StartMoving()\n\t\t\t\tend\n\t\t\t</OnMouseDown>\n\t\t\t<OnMouseUp>\n\t\t\t\tself:StopMovingOrSizing()\n\t\t\t\tDBM:GetModByName(\"LichKing\"):SaveFramePosition()\n\t\t\t\tif button == \"RightButton\" then\n\t\t\t\t\tUIDropDownMenu_Initialize(DBMLichKingMenu, DBM:GetModByName(\"LichKing\").InitializeMenu, \"MENU\")\n\t\t\t\t\tToggleDropDownMenu(1, nil, DBMLichKingMenu, \"DBMLichKingMenu\", 30, 50)\n\t\t\t\tend\n\t\t\t</OnMouseUp>\n\t\t\t<OnShow>\n\t\t\t\tDBM:GetModByName(\"LichKing\"):CreateFrame()\n\t\t\t</OnShow>\n\t\t</Scripts>\n\t</Frame>\n\t<Frame name=\"DBMLichKingMenu\" parent=\"DBMLichKingFrameDrag\" inherits=\"UIDropDownMenuTemplate\" id=\"1\" hidden=\"true\">\n\t\t<Size>\n\t\t\t<AbsDimension x=\"10\" y=\"10\"/>\n\t\t</Size>\n\t\t<Anchors>\n\t\t\t<Anchor point=\"BOTTOM\" relativeto=\"DBMLichKingFrameDrag\">\n\t\t\t\t<Offset>\n\t\t\t\t\t<AbsDimension x=\"0\" y=\"-50\"/>\n\t\t\t\t</Offset>\n\t\t\t</Anchor>\n\t\t</Anchors>\n\t</Frame>\n\n\t<Frame name=\"DBMLichKingFrameTemplate\" enableMouse=\"true\" virtual=\"true\" frameStrata=\"MEDIUM\" topLevel=\"true\">\n\t\t<Size>\n\t\t\t<AbsDimension x=\"130\" y=\"20\"/>\n\t\t</Size>\n\t\t<Frames>\n\t\t\t<StatusBar name=\"$parentBar\">\n\t\t\t\t<Size>\n\t\t\t\t\t<AbsDimension x=\"120\" y=\"12\"/>\n\t\t\t\t</Size>\n\t\t\t\t<Anchors>\n\t\t\t\t\t<Anchor point=\"CENTER\" relativePoint=\"CENTER\">\n\t\t\t\t\t\t<Offset>\n\t\t\t\t\t\t\t<AbsDimension x=\"0\" y=\"0\"/>\n\t\t\t\t\t\t</Offset>\n\t\t\t\t\t</Anchor>\n\t\t\t\t</Anchors>\n\t\t\t\t<Layers>\n\t\t\t\t\t<Layer level=\"BACKGROUND\">\n\t\t\t\t\t\t<Texture name=\"$parentBackground\">\n\t\t\t\t\t\t\t<Color r=\"0\" g=\"0\" b=\"0\" a=\"0.3\"/>\n\t\t\t\t\t\t</Texture>\n\t\t\t\t\t</Layer>\n\t\t\t\t\t<Layer level=\"OVERLAY\">\n\t\t\t\t\t\t<FontString name=\"$parentName\" inherits=\"GameFontHighlightSmall\" text=\"\">\n\t\t\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t\t\t<Anchor point=\"LEFT\" relativePoint=\"LEFT\">\n\t\t\t\t\t\t\t\t\t<Offset>\n\t\t\t\t\t\t\t\t\t\t<AbsDimension x=\"1\" y=\"1\"/>\n\t\t\t\t\t\t\t\t\t</Offset>\n\t\t\t\t\t\t\t\t</Anchor>\n\t\t\t\t\t\t\t</Anchors>\n\t\t\t\t\t\t</FontString>\n\t\t\t\t\t\t<FontString name=\"$parentCooldown\" inherits=\"GameFontHighlightSmall\" text=\"\">\n\t\t\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t\t\t<Anchor point=\"RIGHT\" relativePoint=\"RIGHT\">\n\t\t\t\t\t\t\t\t\t<Offset>\n\t\t\t\t\t\t\t\t\t\t<AbsDimension x=\"-1\" y=\"1\"/>\n\t\t\t\t\t\t\t\t\t</Offset>\n\t\t\t\t\t\t\t\t</Anchor>\n\t\t\t\t\t\t\t</Anchors>\n\t\t\t\t\t\t</FontString>\n\t\t\t\t\t\t<Texture name=\"$parentSpark\" file=\"Interface\\CastingBar\\UI-CastingBar-Spark\" alphaMode=\"ADD\">\n\t\t\t\t\t\t\t<Size>\n\t\t\t\t\t\t\t\t<AbsDimension x=\"32\" y=\"32\"/>\n\t\t\t\t\t\t\t</Size>\n\t\t\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t\t\t<Anchor point=\"CENTER\">\n\t\t\t\t\t\t\t\t\t<Offset>\n\t\t\t\t\t\t\t\t\t\t<AbsDimension x=\"0\" y=\"1\"/>\n\t\t\t\t\t\t\t\t\t</Offset>\n\t\t\t\t\t\t\t\t</Anchor>\n\t\t\t\t\t\t\t</Anchors>\n\t\t\t\t\t\t</Texture>\n\t\t\t\t\t</Layer>\n\t\t\t\t</Layers>\n\t\t\t\t<Frames>\n\t\t\t\t\t<Button name=\"$parentBorder\">\n\t\t\t\t\t\t<Size>\n\t\t\t\t\t\t\t<AbsDimension x=\"128\" y=\"32\"/>\n\t\t\t\t\t\t</Size>\n\t\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t\t<Anchor point=\"LEFT\">\n\t\t\t\t\t\t\t\t<Offset>\n\t\t\t\t\t\t\t\t\t<AbsDimension x=\"-5\" y=\"0\"/>\n\t\t\t\t\t\t\t\t</Offset>\n\t\t\t\t\t\t\t</Anchor>\n\t\t\t\t\t\t</Anchors>\n\t\t\t\t\t\t<NormalTexture name=\"$parentTextureNormal\" file=\"Interface\\PaperDollInfoFrame\\UI-Character-Skills-BarBorder\"/>\n\t\t\t\t\t\t<Scripts>\n\t\t\t\t\t\t\t<OnMouseDown>\n\t\t\t\t\t\t\t\tif button == \"LeftButton\" and not DBM:GetModByName(\"LichKing\").Options.FrameLocked then\n\t\t\t\t\t\t\t\t\tself.moving = true\n\t\t\t\t\t\t\t\t\tDBMLichKingFrameDrag:StartMoving()\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t</OnMouseDown>\n\t\t\t\t\t\t\t<OnMouseUp>\n\t\t\t\t\t\t\t\tself.moving = false\n\t\t\t\t\t\t\t\tDBMLichKingFrameDrag:StopMovingOrSizing()\n\t\t\t\t\t\t\t\tDBM:GetModByName(\"LichKing\"):SaveFramePosition()\n\t\t\t\t\t\t\t\tif button == \"RightButton\" then\n\t\t\t\t\t\t\t\t\tUIDropDownMenu_Initialize(DBMLichKingMenu, DBM:GetModByName(\"LichKing\").InitializeMenu, \"MENU\")\n\t\t\t\t\t\t\t\t\tToggleDropDownMenu(1, nil, DBMLichKingMenu, \"DBMLichKingMenu\", 30, 50)\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t</OnMouseUp>\n\t\t\t\t\t\t\t<OnHide>\n\t\t\t\t\t\t\t\tif self.moving then\n\t\t\t\t\t\t\t\t\tDBM:GetModByName(\"LichKing\"):SaveFramePosition()\n\t\t\t\t\t\t\t\t\tDBMLichKingFrameDrag:StopMovingOrSizing()\n\t\t\t\t\t\t\t\t\tself.moving = false\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t</OnHide>\n\t\t\t\t\t\t</Scripts>\n\t\t\t\t\t</Button>\n\t\t\t\t</Frames>\n\t\t\t\t<BarTexture name=\"$parentTextureBar\" file=\"Interface\\PaperDollInfoFrame\\UI-Character-Skills-Bar\"/>\n\t\t\t\t<BarColor r=\"1.0\" g=\"0.7\" b=\"0.0\"/>\n\t\t\t\t<Scripts>\n\t\t\t\t\t<OnLoad>\n\t\t\t\t\t\tself:SetMinMaxValues(0, 35)\n\t\t\t\t\t</OnLoad>\n\t\t\t\t\t<OnUpdate>\n\t\t\t\t\t\tself:GetParent().entry:Update(elapsed)\n\t\t\t\t\t</OnUpdate>\n\t\t\t\t</Scripts>\n\t\t\t</StatusBar>\n\t\t</Frames>\n\t\t<Scripts>\n\t\t\t<OnMouseDown>\n\t\t\t\tif button == \"LeftButton\" and not DBM:GetModByName(\"LichKing\").Options.FrameLocked then\n\t\t\t\t\tself.moving = true\n\t\t\t\t\tDBMLichKingFrameDrag:StartMoving()\n\t\t\t\tend\n\t\t\t</OnMouseDown>\n\t\t\t<OnMouseUp>\n\t\t\t\tself.moving = false\n\t\t\t\tDBMLichKingFrameDrag:StopMovingOrSizing()\n\t\t\t\tif button == \"RightButton\" then\n\t\t\t\t\tUIDropDownMenu_Initialize(DBMLichKingMenu, DBM:GetModByName(\"LichKing\").InitializeMenu, \"MENU\")\n\t\t\t\t\tToggleDropDownMenu(1, nil, DBMLichKingMenu, \"DBMLichKingMenu\", 30, 50)\n\t\t\t\tend\n\t\t\t</OnMouseUp>\n\t\t\t<OnHide>\n\t\t\t\tif self.moving then\n\t\t\t\t\tDBMLichKingFrameDrag:StopMovingOrSizing()\n\t\t\t\t\tself.moving = false\n\t\t\t\tend\n\t\t\t</OnHide>\n\t\t</Scripts>\n\t</Frame>\n</Ui>\n"
  },
  {
    "path": "DBM-Icecrown/TheLowerSpire/Deathbringer.lua",
    "content": "local mod\t= DBM:NewMod(\"Deathbringer\", \"DBM-Icecrown\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20251010110810\")\nmod:SetCreatureID(37813)\nmod:SetEncounterID(848)\nmod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7, 8)\nmod:SetMinSyncRevision(20220905000000)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 73058 72378\", -- 72293\",\n\t\"SPELL_CAST_SUCCESS 72410 72769 72385 72441 72442 72443\",\n\t\"SPELL_AURA_APPLIED 72293 72385 72441 72442 72443 72737\", -- 19753\",\n\t\"SPELL_AURA_REMOVED 72385 72441 72442 72443\",\n\t\"SPELL_SUMMON 72172 72173 72356 72357 72358\",\n\t\"UNIT_DIED\",\n\t\"UNIT_HEALTH boss1\"\n)\n\n--local canShadowmeld = select(2, UnitRace(\"player\")) == \"NightElf\"\n--local canVanish = select(2, UnitClass(\"player\")) == \"ROGUE\"\nlocal myRealm = select(3, DBM:GetMyPlayerInfo())\n\n-- General\nlocal timerCombatStart\t\t= mod:NewCombatTimer(47.10)\nlocal enrageTimer\t\t\t= mod:NewBerserkTimer((myRealm == \"Lordaeron\" or myRealm == \"Frostmourne\") and 420 or 480)\n\nmod:RemoveOption(\"HealthFrame\")\nmod:AddBoolOption(\"RunePowerFrame\", false, \"misc\")\n--mod:AddBoolOption(\"RemoveDI\")\n\n-- Deathbringer Saurfang\nmod:AddTimerLine(BOSS)\nlocal warnFrenzySoon\t\t= mod:NewSoonAnnounce(72737, 2, nil, \"Tank|Healer\")\nlocal warnFrenzy\t\t\t= mod:NewSpellAnnounce(72737, 2, nil, \"Tank|Healer\")\nlocal warnBloodNova\t\t\t= mod:NewSpellAnnounce(72378, 2)\nlocal warnMark\t\t\t\t= mod:NewTargetCountAnnounce(72293, 4, 72293, nil, 28836, nil, nil, nil, true)\nlocal warnBoilingBlood\t\t= mod:NewTargetNoFilterAnnounce(72385, 2, nil, \"Healer\")\nlocal warnRuneofBlood\t\t= mod:NewTargetNoFilterAnnounce(72410, 3, nil, \"Tank|Healer\")\n\nlocal specwarnMark\t\t\t= mod:NewSpecialWarningYou(72444, nil, 28836, nil, 1, 2)\nlocal specwarnRuneofBlood\t= mod:NewSpecialWarningTaunt(72410, nil, nil, nil, 1, 2)\nlocal specwarnRuneofBloodYou= mod:NewSpecialWarningYou(72410, \"Tank\")\n\nlocal timerRuneofBlood\t\t= mod:NewNextTimer(20, 72410, nil, \"Tank|Healer\", nil, 5, nil, DBM_COMMON_L.TANK_ICON) -- REVIEW! HC -> wipe -> N different script? First two timers stopped being fixed? (25N Lordaeron 2023/02/10) - pull:20.8, 19.3, 20.0, 20.0, 20.0, 20.1, 20.0, 20.0, 20.0, 20.0\nlocal timerBoilingBlood\t\t= mod:NewCDTimer(15, 72385, nil, \"Healer\", nil, 5, nil, DBM_COMMON_L.HEALER_ICON, true) -- REVIEW! ~5s variance [15-20.42]; there was one 11.7! Same as above?? Added \"keep\" arg (10N Icecrown 2022/08/25 || 25H Lordaeron 2022/09/04 || 25N Lordaeron 2023/02/10 || 25H Lordaeron [2023-08-23]@[20:27:43]) - 19.2, 15.5, 15.7, 17.7, 18.1, 15.7, 16.9, 19.5, 15.3, 19.5, 18.5, 15.2, 19.9 || 15.1, 19.4, 19.0, 15.4, 15.0, 16.8, 19.1, 15.9, 17.1 || 11.7, 16.4, 16.5, 17.4, 19.6, 19.0, 16.5, 16.9, 15.5, 16.4, 17.5 || pull:15.5, 18.5, 17.3, 19.4, 19.7, 20.4, 17.0, 17.0, 15.0\nlocal timerBloodNova\t\t= mod:NewCDTimer(20, 72378, nil, nil, nil, 2, nil, nil, true) -- 5s variance [20-25]. Added \"keep\" arg (10N Icecrown 2022/08/25 || 25H Lordaeron 2022/09/04) - 21.7, 21.7, 20.9, 22.6, 20.2, 24.8, 24.6, 20.7, 22.2, 22.4 || 24.9, 21.8, 21.0, 22.8, 23.2, 24.3, 22.2\n\n--local soundSpecWarnMark\t\t= mod:NewSound(72293, nil, canShadowmeld or canVanish)\n\nmod:AddRangeFrameOption(12, 72378, \"Ranged\")\nmod:AddInfoFrameOption(72370, false)--Off by default, since you can literally just watch the bosses power bar\nmod:AddSetIconOption(\"BoilingBloodIcons\", 72385, false, 0, {1, 2, 3})\n\n-- Blood Beasts\nmod:AddTimerLine(DBM_COMMON_L.ADDS)\nlocal warnAddsSoon\t\t\t= mod:NewPreWarnAnnounce(72173, 10, 3)\nlocal warnAdds\t\t\t\t= mod:NewSpellAnnounce(72173, 4)\n\nlocal specWarnScentofBlood\t= mod:NewSpecialWarningSpell(72769, nil, nil, nil, nil, nil, 3) -- Heroic Ablility\nlocal specWarnBeastOnYou\t= mod:NewSpecialWarning(\"SpecWarnBloodBeastSwing\", false, nil, nil, nil, 1, 2, nil, 72173, 72173)\n\nlocal timerCallBloodBeast\t= mod:NewNextTimer(40, 72173, nil, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON, nil, 3)\nlocal timerNextScentofBlood\t= mod:NewNextTimer(10, 72769, nil, nil, nil, 2) -- 10 seconds after Beasts spawn, if any of them is alive\n\nmod:AddSetIconOption(\"BeastIcons\", 72173, true, 5, {8, 7, 6, 5, 4})\n\nmod.vb.warned_preFrenzy = false\nmod.vb.boilingBloodIcon = 1\nmod.vb.beastIcon = 8\nmod.vb.Mark = 0\nmod.vb.bloodBeastAlive = 0\nlocal spellName = DBM:GetSpellInfo(72370)\n\ndo\t-- add the additional Rune Power Bar\n\tlocal UnitGUID = UnitGUID\n\tlocal last = 0\n\tlocal function getRunePowerPercent()\n\t\tlocal guid = UnitGUID(\"focus\")\n\t\tif mod:GetCIDFromGUID(guid) == 37813 then\n\t\t\tlast = math.floor(UnitPower(\"focus\")/UnitPowerMax(\"focus\") * 100)\n\t\t\treturn last\n\t\tend\n\t\tfor i = 0, GetNumRaidMembers(), 1 do\n\t\t\tlocal unitId = ((i == 0) and \"target\") or (\"raid\"..i..\"target\")\n\t\t\tguid = UnitGUID(unitId)\n\t\t\tif mod:GetCIDFromGUID(guid) == 37813 then\n\t\t\t\tlast = math.floor(UnitPower(unitId)/UnitPowerMax(unitId) * 100)\n\t\t\t\treturn last\n\t\t\tend\n\t\tend\n\t\treturn last\n\tend\n\tfunction mod:CreateBossRPFrame()\n\t\tDBM.BossHealth:AddBoss(getRunePowerPercent, L.RunePower)\n\tend\nend\n\n--[[function mod:FallenMarkTarget(targetname)\n\tif not targetname then return end\n\tif targetname == UnitName(\"player\") then\n\t\tif canShadowmeld then\n\t\t\tsoundSpecWarnMark:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\PlayerAbilities\\\\Shadowmeld.ogg\")\n\t\telseif canVanish then\n\t\t\tsoundSpecWarnMark:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\PlayerAbilities\\\\Vanish.ogg\")\n\t\tend\n\tend\nend]]\n\nfunction mod:OnCombatStart(delay)\n\tif self.Options.RunePowerFrame then\n\t\tDBM.BossHealth:Show(L.name)\n\t\tDBM.BossHealth:AddBoss(37813, L.name)\n\t\tself:ScheduleMethod(0.5, \"CreateBossRPFrame\")\n\tend\n\tif self:IsNormal() then\n\t\tenrageTimer:Start(-delay)\n\telse\n\t\tenrageTimer:Start(360-delay)\n\tend\n\ttimerCallBloodBeast:Start(-delay)\n\twarnAddsSoon:Schedule(30-delay)\n\ttimerBloodNova:Start(17-delay) -- (10N Icecrown 2022/08/25 || 10H Lordaeron 2022/09/02 || 25H Lordaeron 2022/09/04 || 25H Lordaeron 2023/02/10 18:54:04 || 25H Lordaeron 2023/02/10 19:02:29 || 25N Lordaeron 2023/02/10 19:10:14) - 17.1 || 17.0 || 17.0 || 17.0 || 17.0 || 20.3\n\ttimerRuneofBlood:Start(-delay) -- (25H Lordaeron 2023/02/10 18:54:04 || 25H Lordaeron 2023/02/10 19:02:29 || 25N Lordaeron 2023/02/10 19:10:14) - 20.0 || 20.0 || 20.8\n\ttimerBoilingBlood:Start(15.5-delay) -- (10N Icecrown 2022/08/25 || 10H Lordaeron 2022/09/02 || 25H Lordaeron 2022/09/04 || 25H Lordaeron 2023/02/10 18:54:04 || 25H Lordaeron 2023/02/10 19:02:29 || 25N Lordaeron 2023/02/10 19:10:14) - 15.5 || 15.5|| 15.5 || 15.6 || 15.5 || 19.4\n\tself.vb.warned_preFrenzy = false\n\tself.vb.boilingBloodIcon = 1\n\tself.vb.beastIcon = 8\n\tself.vb.Mark = 0\n\tself.vb.bloodBeastAlive = 0\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(12)\n\tend\n\tif self.Options.InfoFrame then\n\t\tDBM.InfoFrame:SetHeader(spellName)\n\t\tDBM.InfoFrame:Show(1, \"enemypower\", 2)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\n\tif self.Options.InfoFrame then\n\t\tDBM.InfoFrame:Hide()\n\tend\n\tDBM.BossHealth:Clear()\n\tself:UnregisterShortTermEvents()\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(73058, 72378) then\t-- Blood Nova (only 2 cast IDs, 4 spell damage IDs, and one dummy)\n\t\twarnBloodNova:Show()\n\t\ttimerBloodNova:Start()\n--\telseif args.spellId == 72293 then\n--\t\tself:BossTargetScanner(37813, \"FallenMarkTarget\", 0.01, 10)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 72410 then\n\t\twarnRuneofBlood:Show(args.destName)\n\t\tif not args:IsPlayer() then\n\t\t\tspecwarnRuneofBlood:Show(args.destName)\n\t\t\tspecwarnRuneofBlood:Play(\"tauntboss\")\n\t\telse\n\t\t\tspecwarnRuneofBloodYou:Show()\n\t\tend\n\t\ttimerRuneofBlood:Start()\n\telseif spellId == 72769 then\n\t\tspecWarnScentofBlood:Show()\n\telseif args:IsSpellID(72385, 72441, 72442, 72443) then -- Boiling Blood\n\t\tself.vb.boilingBloodIcon = 1\n\t\ttimerBoilingBlood:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 72293 then\t\t-- Mark of the Fallen Champion\n\t\tself.vb.Mark = self.vb.Mark + 1\n\t\twarnMark:Show(self.vb.Mark, args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecwarnMark:Show()\n\t\t\tspecwarnMark:Play(\"defensive\")\n\t\tend\n\telseif args:IsSpellID(72385, 72441, 72442, 72443) then\t-- Boiling Blood\n\t\tif self.Options.BoilingBloodIcons then\n\t\t\tself:SetIcon(args.destName, self.vb.boilingBloodIcon)\n\t\tend\n\t\tself.vb.boilingBloodIcon = self.vb.boilingBloodIcon + 1\n\t\twarnBoilingBlood:CombinedShow(0.5, args.destName)\n\telseif spellId == 72737 then\t\t\t\t\t\t-- Frenzy\n\t\twarnFrenzy:Show()\n--\telseif spellId == 19753 and self:IsInCombat() and self.Options.RemoveDI then\t-- Remove Divine Intervention\n--\t\tCancelUnitBuff(\"player\", GetSpellInfo(19753))\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(72385, 72441, 72442, 72443) and self.Options.BoilingBloodIcons then\n\t\tself:SetIcon(args.destName, 0)\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args:IsSpellID(72172, 72173) or args:IsSpellID(72356, 72357, 72358) then -- Summon Blood Beasts\n\t\tif self:AntiSpam(5) then\n\t\t\tself.vb.beastIcon = 8\n\t\t\tself.vb.bloodBeastAlive = self.vb.bloodBeastAlive + (self:IsDifficulty(\"normal25\", \"heroic25\") and 5 or 2)\n\t\t\twarnAdds:Show()\n\t\t\twarnAddsSoon:Schedule(30)\n\t\t\ttimerCallBloodBeast:Start()\n\t\t\tif self:IsHeroic() then\n\t\t\t\ttimerNextScentofBlood:Start()\n\t\t\tend\n\t\t\tself:RegisterShortTermEvents(\n\t\t\t\t\"SWING_DAMAGE\"\n\t\t\t)\n\t\tend\n\t\tif self.Options.BeastIcons then\n\t\t\tself:ScanForMobs(args.destGUID, 2, self.vb.beastIcon, 1, nil, 10, \"BeastIcons\")\n\t\tend\n\t\tself.vb.beastIcon = self.vb.beastIcon - 1\n\tend\nend\n\nfunction mod:SWING_DAMAGE(sourceGUID, _, _, destGUID)\n\tif destGUID == UnitGUID(\"player\") and self:GetCIDFromGUID(sourceGUID) == 38508 then -- Blood Beast\n\t\tspecWarnBeastOnYou:Show()\n\t\tspecWarnBeastOnYou:Play(\"targetyou\")\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 38508 then -- Blood Beast\n\t\tself.vb.bloodBeastAlive = self.vb.bloodBeastAlive - 1\n\t\tif self.vb.bloodBeastAlive == 0 then\n\t\t\ttimerNextScentofBlood:Cancel()\n\t\t\tself:UnregisterShortTermEvents()\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif not self.vb.warned_preFrenzy and self:GetUnitCreatureId(uId) == 37813 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.33 then\n\t\tself.vb.warned_preFrenzy = true\n\t\twarnFrenzySoon:Show()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg:find(L.PullAlliance, 1, true) then\n\t\ttimerCombatStart:Start()\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Show(12)\n\t\tend\n\telseif msg:find(L.PullHorde, 1, true) then\n\t\ttimerCombatStart:Start(98.72)\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Show(12)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Icecrown/TheLowerSpire/Deathwhisper.lua",
    "content": "local mod\t= DBM:NewMod(\"Deathwhisper\", \"DBM-Icecrown\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal CancelUnitBuff, GetSpellInfo = CancelUnitBuff, GetSpellInfo\nlocal UnitGUID = UnitGUID\n\nmod:SetRevision(\"20251101165950\")\nmod:SetCreatureID(36855)\nmod:SetEncounterID(846)\nmod:SetUsedIcons(1, 2, 3, 7, 8)\nmod:SetMinSyncRevision(20220905000000)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 71420 72007 72501 72502 70900 70901 72499 72500 72497 72496\",\n\t\"SPELL_CAST_SUCCESS 71289 71204 72905 72906 72907 72908\",\n\t\"SPELL_AURA_APPLIED 71289 71001 72108 72109 72110 71237 70674 71204\",\n\t\"SPELL_AURA_APPLIED_DOSE 71204\",\n\t\"SPELL_AURA_REMOVED 70842 71289\",\n\t\"SPELL_INTERRUPT\",\n--\t\"SPELL_SUMMON 71426\",\n\t\"SWING_DAMAGE\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1\"\n)\n\nlocal canShadowmeld = select(2, UnitRace(\"player\")) == \"NightElf\"\nlocal canVanish = select(2, UnitClass(\"player\")) == \"ROGUE\"\nlocal myRealm = select(3, DBM:GetMyPlayerInfo())\n\n-- General\nlocal specWarnWeapons\t\t\t\t= mod:NewSpecialWarning(\"WeaponsStatus\", false)\n\nlocal berserkTimer\t\t\t\t\t= mod:NewBerserkTimer((myRealm == \"Lordaeron\" or myRealm == \"Frostmourne\") and 420 or 600)\n\nmod:RemoveOption(\"HealthFrame\")\nmod:AddBoolOption(\"ShieldHealthFrame\", false, \"misc\")\n\n-- Adds\nmod:AddTimerLine(DBM_COMMON_L.ADDS)\nlocal warnAddsSoon\t\t\t\t\t= mod:NewAnnounce(\"WarnAddsSoon\", 2, 61131)\nlocal warnReanimating\t\t\t\t= mod:NewAnnounce(\"WarnReanimating\", 3, 34018)\nlocal warnDarkTransformation\t\t= mod:NewSpellAnnounce(70900, 4)\nlocal warnDarkEmpowerment\t\t\t= mod:NewSpellAnnounce(70901, 4)\n\nlocal specWarnVampricMight\t\t\t= mod:NewSpecialWarningDispel(70674, \"MagicDispeller\", nil, nil, 1, 2)\nlocal specWarnDarkMartyrdom\t\t\t= mod:NewSpecialWarningRun(71236, \"Melee\", nil, nil, 4, 2)\n\nlocal timerAdds\t\t\t\t\t\t= mod:NewTimer(60, \"TimerAdds\", 61131, nil, nil, 1, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.DAMAGE_ICON)\n\n-- Boss\nmod:AddTimerLine(L.name)\n-- Stage One\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1))\nlocal warnDominateMind\t\t\t\t= mod:NewTargetNoFilterAnnounce(71289, 3)\n\nlocal specWarnDeathDecay\t\t\t= mod:NewSpecialWarningGTFO(71001, nil, nil, nil, 1, 8)\n\nlocal timerDominateMind\t\t\t\t= mod:NewBuffActiveTimer(12, 71289, nil, nil, nil, 5)\nlocal timerDominateMindCD\t\t\t= mod:NewCDTimer(40, 71289, nil, nil, nil, 3, nil, nil, true) -- ~7s variance [40-46.7]. Added \"keep\" arg (10H Lordaeron 2022/09/02 || 25H Lordaeron 2022/09/04 || 25H Lordaeron [2023-07-05]@[19:41:47]) - 42.9, 43.5, Stage 2/17.3, 27.1/44.4, 43.6, 43.9, 43.7, 42.2 || 42.1, 40.1, Stage 2/31.9, 10.0/41.9 || 46.7, Stage 2/21.3, 20.6/42.0\n\nlocal soundSpecWarnDominateMind\t\t= mod:NewSound(71289, nil, canShadowmeld or canVanish)\n\nmod:AddInfoFrameOption(70842, false)\nmod:AddSetIconOption(\"SetIconOnDeformedFanatic\", 70900, true, 5, {8})\nmod:AddSetIconOption(\"SetIconOnEmpoweredAdherent\", 70901, true, 5, {7})\nmod:AddSetIconOption(\"SetIconOnDominateMind\", 71289, true, 0, {1, 2, 3})\nmod:AddDropdownOption(\"RemoveBuffsOnMC\", {\"Never\", \"Gift\", \"CCFree\", \"ShortOffensiveProcs\", \"MostOffensiveBuffs\"}, \"Never\", \"misc\", nil, 71289)\n\n-- Stage Two\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2))\nlocal warnSummonSpirit\t\t\t\t= mod:NewSpellAnnounce(71426, 2)\nlocal warnPhase2\t\t\t\t\t= mod:NewPhaseAnnounce(2, 1, nil, nil, nil, nil, nil, 2)\nlocal warnTouchInsignificance\t\t= mod:NewStackAnnounce(71204, 2, nil, \"Tank|Healer\")\n\nlocal specWarnCurseTorpor\t\t\t= mod:NewSpecialWarningYou(71237, nil, nil, nil, 1, 2)\nlocal specWarnTouchInsignificance\t= mod:NewSpecialWarningStack(71204, nil, 3, nil, nil, 1, 6)\nlocal specWarnFrostbolt\t\t\t\t= mod:NewSpecialWarningInterrupt(72007, \"HasInterrupt\", nil, 2, 1, 2)\nlocal specWarnVengefulShade\t\t\t= mod:NewSpecialWarning(\"SpecWarnVengefulShade\", true, nil, nil, nil, 1, 2, nil, 71426, 71426)\nlocal specWarnVengefulShadeOnYou\t= mod:NewSpecialWarningRun(71426, nil, nil, nil, 4, 2)\n--local yellVengefulShadeOnMe\t\t\t= mod:NewYellMe(71426)\n\nlocal timerSummonSpiritCD\t\t\t= mod:NewCDTimer(11, 71426, nil, true, nil, 3, nil, nil, true) -- SUMMON cleu event is fired much later than UNIT_SPELLCAST_SUCCEEDED (11.0-13.8), and with higher variance too. Initially using CLEU, but switched to UNIT event. ~5s variance for CLEU [9.4-14.1]. Added \"keep\" arg (10H Lordaeron 2022/10/02) - 9.9, 12.1, 11.7, 14.1, 10.1, 11.1, 11.7, 11.7, 13.1, 12.1, 9.4 ||| Stage 2/11.4, 11.3, 11.6, 11.3, 11.1, 11.1, 11.2, 11.5, 12.0, 11.3, 11.5, 11.7, 11.1, 11.7, 11.9, 11.4, 11.2, 11.7, 11.8, 11.1, 13.8\nlocal timerFrostboltCast\t\t\t= mod:NewCastTimer(2, 72007, nil, \"HasInterrupt\")\nlocal timerFrostboltVolleyCD\t\t= mod:NewVarTimer(\"v13-16\", 72905, nil, nil, nil, 2) -- 3s variance [13.24-15.35]. SPELL_CAST_SUCCESS: (Lordaeron: 25H wipe [2025-10-30]@[19:52:57]) - \"Frostbolt Volley-72908-npc:36855-224 = pull:138.82/[Stage 1/0.00, Stage 2/119.03] 19.79/138.82, 13.78, 14.73, 14.32, 14.54, 14.82, 13.32, 14.26, 13.38, 14.95, 13.24, 13.91, 15.35\"\nlocal timerTouchInsignificance\t\t= mod:NewTargetTimer(30, 71204, nil, \"Tank|Healer\", nil, 5)\nlocal timerTouchInsignificanceCD\t= mod:NewCDTimer(9, 71204, nil, \"Tank|Healer\", nil, 5, nil, nil, true) -- ~6s variance [9.0-14.7]. Added \"keep\" arg (25H Lordaeron [2022-09-04]@[19:35:18] || 25H Lordaeron [2022-09-14]@[19:18:07] || 25H Lordaeron [2022-11-16]@[21:20:38]) - \"Touch of Insignificance-71204-npc:36855-224 = pull:143.2/Stage 2/8.2, 11.3, 9.6, 14.7, 9.8, 9.9, 10.9, 11.8, 10.7, 10.2, 9.8, 11.3, 11.9, 10.9, 12.7, 11.6, 12.1, 11.5, 11.5, 10.4, 10.7, 10.4\" || pull:132.1/Stage 2/6.0, 12.7, 12.2, 9.9, 13.0, 10.9, 9.1, 10.8, 12.1, 10.0, 11.6, 11.2, 10.0, 10.3, 9.2, 11.0, 12.3, 9.3, 12.6, 11.8, 12.9\" || pull:136.6/Stage 2/6.5, 12.5, 9.4, 11.0, 13.7, 10.4, 13.5, 11.2, 10.7, 9.5, 9.0, 12.1, 12.2\n\nlocal soundWarnSpirit\t\t\t\t= mod:NewSound(71426)\n\nlocal dominateMindTargets = {}\nmod.vb.dominateMindIcon = 1\nlocal shieldName = DBM:GetSpellInfo(70842)\nlocal summonSpiritName = DBM:GetSpellInfo(71426)\nlocal playerHadTarget = false\n\nlocal playerClass = select(2, UnitClass(\"player\"))\nlocal isHunter = playerClass == \"HUNTER\"\n\nlocal RaidWarningFrame = RaidWarningFrame\nlocal GetFramesRegisteredForEvent, RaidNotice_AddMessage = GetFramesRegisteredForEvent, RaidNotice_AddMessage\nlocal function selfWarnMissingSet()\n\tif mod.Options.EqUneqWeapons and mod:IsHeroic() and not mod:IsEquipmentSetAvailable(\"pve\") then\n\t\tfor i = 1, select(\"#\", GetFramesRegisteredForEvent(\"CHAT_MSG_RAID_WARNING\")) do\n\t\t\tlocal frame = select(i, GetFramesRegisteredForEvent(\"CHAT_MSG_RAID_WARNING\"))\n\t\t\tif frame.AddMessage then\n\t\t\t\tframe.AddMessage(frame, L.setMissing)\n\t\t\tend\n\t\tend\n\t\tRaidNotice_AddMessage(RaidWarningFrame, L.setMissing, ChatTypeInfo[\"RAID_WARNING\"])\n\tend\nend\n\nmod:AddMiscLine(L.EqUneqLineDescription)\nmod:AddBoolOption(\"EqUneqWeapons\", mod:IsDps(), nil, selfWarnMissingSet)\nmod:AddBoolOption(\"EqUneqTimer\", false)\nmod:AddDropdownOption(\"EqUneqFilter\", {\"OnlyDPS\", \"DPSTank\", \"NoFilter\"}, \"OnlyDPS\", \"misc\")\n\nlocal function selfSchedWarnMissingSet(self)\n\tif self.Options.EqUneqWeapons and self:IsHeroic() and not self:IsEquipmentSetAvailable(\"pve\") then\n\t\tfor i = 1, select(\"#\", GetFramesRegisteredForEvent(\"CHAT_MSG_RAID_WARNING\")) do\n\t\t\tlocal frame = select(i, GetFramesRegisteredForEvent(\"CHAT_MSG_RAID_WARNING\"))\n\t\t\tif frame.AddMessage then\n\t\t\t\tself:Schedule(10, frame.AddMessage, frame, L.setMissing)\n\t\t\tend\n\t\tend\n\t\tself:Schedule(10, RaidNotice_AddMessage, RaidWarningFrame, L.setMissing, ChatTypeInfo[\"RAID_WARNING\"])\n\tend\nend\nmod:Schedule(0.5, selfSchedWarnMissingSet, mod) -- mod options default values were being read before SV ones, so delay this\n\nlocal function checkWeaponRemovalSetting(self)\n\tif not self.Options.EqUneqWeapons then return false end\n\n\tlocal removalOption = self.Options.EqUneqFilter\n\tif removalOption == \"OnlyDPS\" and self:IsDps() then return true\n\telseif removalOption == \"DPSTank\" and not self:IsHealer() then return true\n\telseif removalOption == \"NoFilter\" then return true\n\tend\n\treturn false\nend\n\nlocal function UnW(self)\n\tif self:IsEquipmentSetAvailable(\"pve\") then\n\t\tPickupInventoryItem(16)\n\t\tPutItemInBackpack()\n\t\tPickupInventoryItem(17)\n\t\tPutItemInBackpack()\n\t\tDBM:Debug(\"MH and OH unequipped\", 2)\n\t\tif isHunter then\n\t\t\tPickupInventoryItem(18)\n\t\t\tPutItemInBackpack()\n\t\t\tDBM:Debug(\"Ranged unequipped\", 2)\n\t\tend\n\tend\nend\n\nlocal function EqW(self)\n\tif self:IsEquipmentSetAvailable(\"pve\") then\n\t\tDBM:Debug(\"trying to equip pve\")\n\t\tUseEquipmentSet(\"pve\")\n\t\tif not self:IsTank() then\n\t\t\tCancelUnitBuff(\"player\", (GetSpellInfo(25780))) -- Righteous Fury\n\t\tend\n\tend\nend\n\nlocal aurastoRemove = { -- ordered by aggressiveness {degree, classFilter}\n\t-- 1 (Gift)\n\t[48469] = {1, nil}, -- Mark of the Wild\n\t[48470] = {1, nil}, -- Gift of the Wild\n\t[69381] = {1, nil}, -- Drums of the Wild\n\t-- 2 (CCFree)\n\t[48169] = {2, nil}, -- Shadow Protection\n\t[48170] = {2, nil}, -- Prayer of Shadow Protection\n\t-- 3 (ShortOffensiveProcs)\n\t[13877] = {3, \"ROGUE\"}, -- Blade Flurry (Combat Rogue)\n\t[70721] = {3, \"DRUID\"}, -- Omen of Doom (Balance Druid)\n\t[48393] = {3, \"DRUID\"}, -- Owlkin Frenzy (Balance Druid)\n\t[53201] = {3, \"DRUID\"}, -- Starfall (Balance Druid)\n\t[50213] = {3, \"DRUID\"}, -- Tiger's Fury (Feral Druid)\n\t[31572] = {3, \"MAGE\"}, -- Arcane Potency (Arcane Mage)\n\t[54490] = {3, \"MAGE\"}, -- Missile Barrage (Arcane Mage)\n\t[48108] = {3, \"MAGE\"}, -- Hot Streak (Fire Mage)\n\t[71165] = {3, \"WARLOCK\"}, -- Molten Core (Warlock)\n\t[63167] = {3, \"WARLOCK\"}, -- Decimation (Warlock)\n\t[70840] = {3, \"WARLOCK\"}, -- Devious Minds (Warlock)\n\t[17941] = {3, \"WARLOCK\"}, -- Shadow Trance (Warlock)\n\t[47197] = {3, \"WARLOCK\"}, -- Eradication (Affliction Warlock)\n\t[34939] = {3, \"WARLOCK\"}, -- Backlash (Destruction Warlock)\n\t[47260] = {3, \"WARLOCK\"}, -- Backdraft (Destruction Warlock)\n\t[16246] = {3, \"SHAMAN\"}, -- Clearcasting (Elemental Shaman)\n\t[64701] = {3, \"SHAMAN\"}, -- Elemental Mastery (Elemental Shaman)\n\t[26297] = {3, nil}, -- Berserking (Troll racial)\n\t[54758] = {3, nil}, -- Hyperspeed Acceleration (Hands engi enchant)\n\t[59626] = {3, nil}, -- Black Magic (Weapon enchant)\n\t[72416] = {3, nil}, -- Frostforged Sage (ICC Rep ring)\n\t[64713] = {3, nil}, -- Flame of the Heavens (Flare of the Heavens)\n\t[67669] = {3, nil}, -- Elusive Power (Trinket Abyssal Rune)\n\t[60064] = {3, nil}, -- Now is the Time! (Trinket Sundial of the Exiled/Mithril Pocketwatch)\n\t-- 4 (MostOffensiveBuffs)\n\t[48168] = {4, \"PRIEST\"}, -- Inner Fire (Priest)\n\t[15258] = {4, \"PRIEST\"}, -- Shadow Weaving (Shadow Priest)\n\t[48420] = {4, \"DRUID\"}, -- Master Shapeshifter (Druid)\n\t[24932] = {4, \"DRUID\"}, -- Leader of the Pack (Feral Druid)\n\t[67355] = {4, \"DRUID\"}, -- Agile (Feral Druid idol)\n\t[52610] = {4, \"DRUID\"}, -- Savage Roar (Feral Druid)\n\t[24907] = {4, \"DRUID\"}, -- Moonkin Aura (Balance Druid)\n\t[71199] = {4, \"DRUID\"}, -- Furious (Shaman EoF: Bizuri's Totem of Shattered Ice)\n\t[67360] = {4, \"DRUID\"}, -- Blessing of the Moon Goddess (Druid EoT: Idol of Lunar Fury)\n\t[48943] = {4, \"PALADIN\"}, -- Shadow Resistance Aura (Paladin)\n\t[43046] = {4, \"MAGE\"}, -- Molten Armor (Mage)\n\t[47893] = {4, \"WARLOCK\"}, -- Fel Armor (Warlock)\n\t[63321] = {4, \"WARLOCK\"}, -- Life Tap (Warlock)\n\t[55637] = {4, nil}, -- Lightweave (Back tailoring enchant)\n\t[71572] = {4, nil}, -- Cultivated Power (Muradin Spyglass)\n\t[60235] = {4, nil}, -- Greatness (Darkmoon Card: Greatness)\n\t[71644] = {4, nil}, -- Surge of Power (Dislodged Foreign Object)\n\t[75473] = {4, nil}, -- Twilight Flames (Charred Twilight Scale)\n\t[71636] = {4, nil}, -- Siphoned Power (Phylactery of the Nameless Lich)\n}\nlocal optionToDegree = {\n\t[\"Gift\"] = 1, -- Cyclones resists\n\t[\"CCFree\"] = 2, -- CC Shadow resists, life Fear from Psychic Scream\n\t[\"ShortOffensiveProcs\"] = 3, -- Short-term procs that would expire during Mind Control anyway\n\t[\"MostOffensiveBuffs\"] = 4, -- Most offensive buffs that are easily renewable but would expire after Mind Control ends\n}\n\nlocal function RemoveBuffs(option) -- Spell is removed based on name so no longer need SpellID for each rank\n\tif not option then return end\n\tlocal degreeOption = optionToDegree[option]\n\tfor aura, infoTable in pairs(aurastoRemove) do\n\t\tlocal degree, classFilter = unpack(infoTable)\n\t\tif degree <= degreeOption then\n\t\t\tif not classFilter or classFilter == playerClass then\n\t\t\t\tCancelUnitBuff(\"player\", (GetSpellInfo(aura)))\n\t\t\tend\n\t\tend\n\tend\n\tDBM:Debug(\"Buffs removed, using option \\\"\" .. option .. \"\\\" and degree: \" .. tostring(degreeOption), 2)\nend\n\nlocal function showDominateMindWarning(self)\n\twarnDominateMind:Show(table.concat(dominateMindTargets, \"<, >\"))\n\ttimerDominateMind:Start()\n\tif checkWeaponRemovalSetting(self) then\n\t\tif not tContains(dominateMindTargets, UnitName(\"player\")) then\n\t\t\tDBM:Debug(\"Equipping scheduled\")\n\t\t\tself:Schedule(0.1, EqW, self)\n\t\t\tself:Schedule(1.7, EqW, self)\n\t\t\tself:Schedule(3.3, EqW, self)\n\t\t\tself:Schedule(5.5, EqW, self)\n\t\t\tself:Schedule(7.5, EqW, self)\n\t\t\tself:Schedule(9.9, EqW, self)\n\t\tend\n\t\tif self.Options.EqUneqTimer then\n\t\t\tself:Schedule(39, UnW, self)\n\t\tend\n\tend\n\ttable.wipe(dominateMindTargets)\n\tself.vb.dominateMindIcon = 1\nend\n\nlocal function addsTimer(self)\n\ttimerAdds:Cancel()\n\twarnAddsSoon:Cancel()\n\tif self:IsHeroic() then\n\t\twarnAddsSoon:Schedule(40)\t-- 5 secs prewarning\n\t\tself:Schedule(45, addsTimer, self)\n\t\ttimerAdds:Start(45)\n\telse\n\t\twarnAddsSoon:Schedule(55)\t-- 5 secs prewarning\n\t\tself:Schedule(60, addsTimer, self)\n\t\ttimerAdds:Start()\n\tend\nend\n\ndo\t-- add the additional Shield Bar\n\tlocal last = 100\n\tlocal function getShieldPercent()\n\n\t\tlocal unitId = \"boss1\"\n\t\tlocal guid = UnitGUID(unitId)\n\t\tif mod:GetCIDFromGUID(guid) == 36855 then\n\t\t\tlast = math.floor(UnitMana(unitId)/UnitManaMax(unitId) * 100)\n\t\t\treturn last\n\t\tend\n\n\t\tunitId = \"boss1\"\n\t\tguid = UnitGUID(unitId)\n\t\tif mod:GetCIDFromGUID(guid) == 36855 then\n\t\t\tlast = math.floor(UnitMana(unitId)/UnitManaMax(unitId) * 100)\n\t\t\treturn last\n\t\tend\n\n\t\tfor i = 0, GetNumRaidMembers(), 1 do\n\t\t\tunitId = ((i == 0) and \"target\") or (\"raid\"..i..\"target\")\n\t\t\tguid = UnitGUID(unitId)\n\t\t\tif mod:GetCIDFromGUID(guid) == 36855 then\n\t\t\t\tlast = math.floor(UnitMana(unitId)/UnitManaMax(unitId) * 100)\n\t\t\t\treturn last\n\t\t\tend\n\t\tend\n\n\t\treturn last\n\tend\n\tfunction mod:CreateShildHPFrame()\n\t\tDBM.BossHealth:AddBoss(getShieldPercent, L.ShieldPercent)\n\tend\nend\n\nlocal function unregisterShortTermEvents(self) -- only used for the scheduling below\n\tself:UnregisterShortTermEvents()\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tif self.Options.ShieldHealthFrame then\n\t\tDBM.BossHealth:Show(L.name)\n\t\tDBM.BossHealth:AddBoss(36855, L.name)\n\t\tself:ScheduleMethod(0.5, \"CreateShildHPFrame\")\n\tend\n\tberserkTimer:Start(-delay)\n\ttimerAdds:Start(5.5-delay)\n\twarnAddsSoon:Schedule(2.5-delay)\t\t\t-- 3sec pre-warning on start\n\tself:Schedule(5.5-delay, addsTimer, self)\n\tif not self:IsDifficulty(\"normal10\") then\n\t\ttimerDominateMindCD:Start(27-delay)\t-- REVIEW! 2s variance? (10H Lordaeron 2022/09/02 || 25H Lordaeron 2022/09/04 || 25H Lordaeron [2023-07-05]@[19:41:47]) - 28.7 || 27.0 || 27.0\n\t\tspecWarnWeapons:Show(checkWeaponRemovalSetting(self) and ENABLE or ADDON_DISABLED, (self.Options.EqUneqWeapons and self.Options.EqUneqTimer and (SLASH_STOPWATCH2):sub(2)) or (self.Options.EqUneqWeapons and COMBAT_LOG) or NONE, self.Options.EqUneqFilter)\n\t\tif checkWeaponRemovalSetting(self) and self.Options.EqUneqTimer then\n\t\t\tself:Schedule(26.5-delay, UnW, self)\n\t\tend\n\tend\n\ttable.wipe(dominateMindTargets)\n\tself.vb.dominateMindIcon = 6\n\tplayerHadTarget = false\n\tif self.Options.InfoFrame then\n\t\tDBM.InfoFrame:SetHeader(shieldName)\n\t\tDBM.InfoFrame:Show(1, \"enemypower\", 2)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tDBM.BossHealth:Clear()\n\tself:Unschedule(UnW)\n\tself:Unschedule(EqW)\n\tif self.Options.InfoFrame then\n\t\tDBM.InfoFrame:Hide()\n\tend\n\tself:UnregisterShortTermEvents()\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif args:IsSpellID(71420, 72007, 72501, 72502) and self:CheckInterruptFilter(args.sourceGUID) then\n\t\tspecWarnFrostbolt:Show(args.sourceName)\n\t\tspecWarnFrostbolt:Play(\"kickcast\")\n\t\ttimerFrostboltCast:Start()\n\telseif spellId == 70900 then\n\t\twarnDarkTransformation:Show()\n\t\tif self.Options.SetIconOnDeformedFanatic then\n\t\t\tself:ScanForMobs(args.sourceGUID, 2, 8, 1, nil, 12, \"SetIconOnDeformedFanatic\")\n\t\tend\n\telseif spellId == 70901 then\n\t\twarnDarkEmpowerment:Show()\n\t\tif self.Options.SetIconOnEmpoweredAdherent then\n\t\t\tself:ScanForMobs(args.sourceGUID, 2, 7, 1, nil, 12, \"SetIconOnEmpoweredAdherent\")\n\t\tend\n\telseif args:IsSpellID(72499, 72500, 72497, 72496) then\n\t\tspecWarnDarkMartyrdom:Show()\n\t\tspecWarnDarkMartyrdom:Play(\"justrun\")\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 71289 then -- Fires 1x/3x on 10/25m\n\t\tif self:AntiSpam(5, 2) then -- Do AntiSpam instead of Restart to catch early MCs\n\t\t\ttimerDominateMindCD:Start()\n\t\tend\n\t\tDBM:Debug(\"MC on \"..args.destName, 2)\n\t\tif args.destName == UnitName(\"player\") then\n\t\t\tif self.Options.RemoveBuffsOnMC ~= \"Never\" then\n\t\t\t\tRemoveBuffs(self.Options.RemoveBuffsOnMC)\n\t\t\tend\n\t\t\tif canShadowmeld then\n\t\t\t\tsoundSpecWarnDominateMind:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\PlayerAbilities\\\\Shadowmeld.ogg\")\n\t\t\telseif canVanish then\n\t\t\t\tsoundSpecWarnDominateMind:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\PlayerAbilities\\\\Vanish.ogg\")\n\t\t\tend\n\t\t\tif checkWeaponRemovalSetting(self) then\n\t\t\t\tUnW(self)\n\t\t\t\tUnW(self)\n\t\t\t\tself:Schedule(0.01, UnW, self)\n\t\t\t\tDBM:Debug(\"Unequipping\", 2)\n\t\t\tend\n\t\tend\n\telseif args:IsSpellID(72905, 72906, 72907, 72908) then -- Frostbolt Volley\n\t\ttimerFrostboltVolleyCD:Start()\n\telseif spellId == 71204 then -- Touch of Insignificance\n\t\ttimerTouchInsignificanceCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 71289 then\n\t\tdominateMindTargets[#dominateMindTargets + 1] = args.destName\n\t\tif self.Options.SetIconOnDominateMind then\n\t\t\tself:SetIcon(args.destName, self.vb.dominateMindIcon, 12)\n\t\tend\n\t\tself.vb.dominateMindIcon = self.vb.dominateMindIcon + 1\n\t\tself:Unschedule(showDominateMindWarning)\n\t\tif self:IsDifficulty(\"heroic10\", \"normal25\") or (self:IsDifficulty(\"heroic25\") and #dominateMindTargets >= 3) then\n\t\t\tshowDominateMindWarning(self)\n\t\telse\n\t\t\tself:Schedule(0.9, showDominateMindWarning, self)\n\t\tend\n\telseif args:IsSpellID(71001, 72108, 72109, 72110) then\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnDeathDecay:Show()\n\t\t\tspecWarnDeathDecay:Play(\"watchfeet\")\n\t\tend\n\telseif spellId == 71237 and args:IsPlayer() then\n\t\tspecWarnCurseTorpor:Show()\n\t\tspecWarnCurseTorpor:Play(\"targetyou\")\n\telseif spellId == 70674 and not args:IsDestTypePlayer() and UnitGUID(\"target\") == args.destGUID then\n\t\tspecWarnVampricMight:Show(args.destName)\n\t\tspecWarnVampricMight:Play(\"helpdispel\")\n\telseif spellId == 71204 then\n\t\ttimerTouchInsignificance:Start(args.destName)\n\t\tlocal amount = args.amount or 1\n\t\tif args:IsPlayer() and amount >= 3 then\n\t\t\tspecWarnTouchInsignificance:Show(amount)\n\t\t\tspecWarnTouchInsignificance:Play(\"stackhigh\")\n\t\telse\n\t\t\twarnTouchInsignificance:Show(args.destName, amount)\n\t\tend\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 70842 then\n\t\tself:SetStage(2)\n\t\twarnPhase2:Show()\n\t\twarnPhase2:Play(\"ptwo\")\n\t\ttimerDominateMindCD:Restart(30)\n\t\tself:Unschedule(UnW)\n\t\ttimerSummonSpiritCD:Start() -- (25H Lordaeron 2022/10/21) - Stage 2/11.0\n\t\ttimerTouchInsignificanceCD:Start(6) -- 3.4s variance [6.0-9.4] (25H Lordaeron [2022-09-23]@[20:40:18] || 25H Lordaeron [2022-10-05]@[20:21:27]) - Stage 2/6.0 || Stage 2/9.4\n\t\ttimerAdds:Cancel()\n\t\ttimerFrostboltVolleyCD:Start(\"v19-20\")\n\t\twarnAddsSoon:Cancel()\n\t\tself:Unschedule(addsTimer)\n\t\tif self:IsHeroic() then\t-- Edited from retail\n\t\t\ttimerAdds:Start(45)\n\t\t\twarnAddsSoon:Schedule(40) -- 5 secs prewarning\n\t\t\tself:Schedule(45, addsTimer, self)\n\t\tend\n\t\tif self.Options.InfoFrame then\n\t\t\tDBM.InfoFrame:Hide()\n\t\tend\n\telseif spellId == 71289 then\n\t\tif (args.destName == UnitName(\"player\") or args:IsPlayer()) and checkWeaponRemovalSetting(self) then\n\t\t\tDBM:Debug(\"Equipping scheduled\", 2)\n\t\t\tself:Schedule(0.1, EqW, self)\n\t\t\tself:Schedule(1.7, EqW, self)\n\t\t\tself:Schedule(3.3, EqW, self)\n\t\t\tself:Schedule(5.0, EqW, self)\n\t\t\tself:Schedule(8.0, EqW, self)\n\t\t\tself:Schedule(9.9, EqW, self)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_INTERRUPT(args)\n\tlocal extraSpellId = args.extraSpellId\n\tif type(extraSpellId) == \"number\" and (extraSpellId == 71420 or extraSpellId == 72007 or extraSpellId == 72501 or extraSpellId == 72502) then\n\t\ttimerFrostboltCast:Cancel()\n\tend\nend\n\n--[[very inconsistent timer due to spirit travel distance until spawn. Moved to UNIT_SPELLCAST_SUCCEEDED\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 71426 and self:AntiSpam(5, 1) then -- Summon Vengeful Shade\n\t\twarnSummonSpirit:Show()\n\t\ttimerSummonSpiritCD:Start()\n\t\tsoundWarnSpirit:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\spirits.mp3\")\n\tend\nend]]\n\nfunction mod:SWING_DAMAGE(sourceGUID, _, _, destGUID)\n\tif destGUID == UnitGUID(\"player\") and self:GetCIDFromGUID(sourceGUID) == 38222 then\n\t\tspecWarnVengefulShade:Show()\n\t\tspecWarnVengefulShade:Play(\"targetyou\")\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.YellReanimatedFanatic or msg:find(L.YellReanimatedFanatic) then\n\t\twarnReanimating:Show()\n\tend\nend\n\n-- \"<235.53 ...> [UNIT_SPELLCAST_SUCCEEDED] Lady Deathwhisper(54.8%-0.0%){Target:...} -Summon Spirit- [[boss1:Summon Spirit::0:]]\", -- [20525]\n-- \"<235.53 ...> [DBM_Announce] Summon Spirit:Interface\\\\Icons\\\\Spell_Holy_SenseUndead:spell:71426:Deathwhisper:false:\", -- [20526]\n-- \"<235.53 ...> [DBM_Debug] PlaySoundFile playing with media Sound\\\\Doodad\\\\BellTollNightElf.wav:3:\", -- [20527]\n-- \"<235.53 ...> [DBM_Debug] Timer Summon Spirit CD(Timer71426cd) (Stage 2) refreshed after zero. Remaining time is : -0.92:2:\", -- [20528]\n-- \"<235.53 ...> [DBM_TimerStart] Timer71426cd:Summon Spirit CD:11:Interface\\\\Icons\\\\Spell_Holy_SenseUndead:cd:71426:3:Deathwhisper:true:nil:Summon Spirit:nil:\", -- [20529]\n-- \"<235.53 ...> [UNIT_SPELLCAST_SUCCEEDED] Lady Deathwhisper(54.8%-0.0%){Target:...} -Summon Spirit- [[boss1:Summon Spirit::0:]]\", -- [20530]\n-- \"<235.53 ...> [PLAYER_TARGET_CHANGED] -1 Hostile (elite Undead) - Lady Deathwhisper # 0xF130008FF7000026\", -- [20531]\n-- \"<235.53 ...> [UNIT_SPELLCAST_SUCCEEDED] Lady Deathwhisper(54.8%-0.0%){Target:...} -Summon Spirit- [[boss1:Summon Spirit::0:]]\", -- [20532]\nfunction mod:PLAYER_TARGET_CHANGED()\n\tif not playerHadTarget and self:GetCIDFromGUID(UnitGUID(\"target\")) == 36855 then\n\t\tspecWarnVengefulShadeOnYou:Show()\n\t\tspecWarnVengefulShadeOnYou:Play(\"runaway\")\n--\t\tyellVengefulShadeOnMe:Yell() -- disabled since live run proved to be ineffective to catch target without false positives\n\t\tDBM:AddMsg(\"Experimental feature with spirit targeting. If you received a Special Announcement saying Summon Spirit - run away, but were NOT the real player targeted by the spirits, please share VOD/Transcriptor log with Zidras on Github or Discord.\")\n\tend\n\tself:Unschedule(unregisterShortTermEvents)\n\tself:UnregisterShortTermEvents() -- outside the if check, since I only care about the first event, whether or not it targeted boss\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == summonSpiritName and self:AntiSpam(5, 1) then -- Summon Spirit\n\t\tplayerHadTarget = UnitGUID(\"target\") and true\n\t\twarnSummonSpirit:Show()\n\t\ttimerSummonSpiritCD:Start()\n\t\tsoundWarnSpirit:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\spirits.mp3\")\n\t\tif not playerHadTarget then\n\t\t\tself:RegisterShortTermEvents(\n\t\t\t\t\"PLAYER_TARGET_CHANGED\"\n\t\t\t)\n\t\t\tself:Schedule(0.1, unregisterShortTermEvents, self)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Icecrown/TheLowerSpire/GunshipBattle.lua",
    "content": "local mod\t= DBM:NewMod(\"GunshipBattle\", \"DBM-Icecrown\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nlocal addsIcon\nlocal bossID\nmod:SetEncounterID(847)--No ES fires this combat\nmod:RegisterCombat(\"combat\")\nif UnitFactionGroup(\"player\") == \"Alliance\" then\n\t--mod:RegisterCombat(\"yell\", L.CombatAlliance)\n\tmod:RegisterKill(\"yell\", L.KillAlliance)\n\tmod:SetCreatureID(36939, 37215)\t-- High Overlord Saurfang, Orgrim's Hammer\n\taddsIcon = 23334\n\tbossID = 36939\nelse\n\t--mod:RegisterCombat(\"yell\", L.CombatHorde)\n\tmod:RegisterKill(\"yell\", L.KillHorde)\n\tmod:SetCreatureID(36948, 37540)\t-- Muradin Bronzebeard, The Skybreaker\n\taddsIcon = 23336\n\tbossID = 36948\nend\nmod:SetHotfixNoticeRev(20220921000000)\nmod:SetMinSyncRevision(20220921000000) -- prevent old DBM from syncing combatStart on yell Pull\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 71195 71193 71188 69652 69651 72306 69638 69705\",\n\t\"SPELL_AURA_APPLIED_DOSE 72306 69638\",\n\t\"SPELL_AURA_REMOVED 69705\",\n\t\"SPELL_CAST_START 69705\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1 boss2\"\n)\n\nlocal warnBelowZero\t\t\t= mod:NewSpellAnnounce(69705, 4)\nlocal warnExperienced\t\t= mod:NewTargetNoFilterAnnounce(71188, 1, nil, false)\t\t-- might be spammy\nlocal warnVeteran\t\t\t= mod:NewTargetNoFilterAnnounce(71193, 2, nil, false)\t\t-- might be spammy\nlocal warnElite\t\t\t\t= mod:NewTargetNoFilterAnnounce(71195, 3, nil, false)\t\t-- might be spammy\nlocal warnBattleFury\t\t= mod:NewStackAnnounce(69638, 2, nil, \"Tank|Healer\", 2)\nlocal warnBladestorm\t\t= mod:NewSpellAnnounce(69652, 3, nil, \"Melee\")\nlocal warnWoundingStrike\t= mod:NewTargetNoFilterAnnounce(69651, 2)\nlocal warnAddsSoon\t\t\t= mod:NewAnnounce(\"WarnAddsSoon\", 2, addsIcon)\n\nlocal timerCombatStart\t\t= mod:NewCombatTimer(47.5)\nlocal timerBelowZeroCD\t\t= mod:NewNextTimer(35, 69705, nil, nil, nil, 5, nil, DBM_COMMON_L.DAMAGE_ICON, nil, 1)\nlocal timerBattleFuryActive\t= mod:NewBuffActiveTimer(17, 69638, nil, \"Tank|Healer\", nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerAdds\t\t\t\t= mod:NewTimer(60, \"TimerAdds\", addsIcon, nil, nil, 1)\n\nlocal soundFreeze\t\t\t= mod:NewSound(69705)\n\nmod:RemoveOption(\"HealthFrame\")\n\nmod.vb.firstMage = false\n\nlocal function Adds(self) -- no longer on a timed loop, since YELL event is available\n--\ttimerAdds:Stop()\n\ttimerAdds:Start()\n\twarnAddsSoon:Cancel()\n\twarnAddsSoon:Schedule(55)\n--\tself:Unschedule(Adds)\n--\tself:Schedule(60, Adds, self)\nend\n\nfunction mod:OnCombatStart(delay)\n\tDBM.BossHealth:Clear()\n\ttimerAdds:Start(12-delay)\n\twarnAddsSoon:Schedule(7-delay)\n--\tself:Schedule(12-delay, Adds, self)\n\tself.vb.firstMage = false\n\tif UnitFactionGroup(\"player\") == \"Alliance\" then\n\t\ttimerBelowZeroCD:Start(39-delay) --Approximate, since it depends on cannon damage. Corrected on yell later\n\telse\n\t\ttimerBelowZeroCD:Start(37-delay) --Approximate, since it depends on cannon damage. Corrected on yell later\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 71195 then\n\t\twarnElite:Show(args.destName)\n\telseif spellId == 71193 then\n\t\twarnVeteran:Show(args.destName)\n\telseif spellId == 71188 then\n\t\twarnExperienced:Show(args.destName)\n\telseif spellId == 69652 then\n\t\twarnBladestorm:Show()\n\telseif spellId == 69651 then\n\t\twarnWoundingStrike:Show(args.destName)\n\telseif args:IsSpellID(72306, 69638) and self:GetCIDFromGUID(args.destGUID) == bossID then\n\t\ttimerBattleFuryActive:Start()\t\t-- only a timer for 1st stack\n\telseif spellId == 69705 and self:AntiSpam(1, 1) then\n\t\tsoundFreeze:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\Alert.mp3\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED_DOSE(args)\n\tif args:IsSpellID(72306, 69638) and self:GetCIDFromGUID(args.destGUID) == bossID then\n\t\tif args.amount % 5 == 0 then\t\t-- warn every 5 stacks\n\t\t\twarnBattleFury:Show(args.destName, args.amount or 1)\n\t\tend\n\t\ttimerBattleFuryActive:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 69705 and self:AntiSpam(2, 2) then -- Fires for all Gunship Cannons\n\t\ttimerBelowZeroCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 69705 then\n\t\twarnBelowZero:Show()\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(72340) then\n\t\tDBM:EndCombat(self)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg:find(L.PullAlliance) then\n\t\ttimerCombatStart:Start()\n\telseif msg:find(L.PullHorde) then\n\t\ttimerCombatStart:Start(45)\n\telseif (msg:find(L.AddsAlliance) or msg:find(L.AddsHorde)) and self:IsInCombat() then\n--\t\tself:Unschedule(Adds)\n\t\tAdds(self)\n\telseif (msg:find(L.MageAlliance) or msg == L.MageAlliance) and self:IsInCombat() then\n\t\tif not self.vb.firstMage then\n\t\t\ttimerBelowZeroCD:Update(34, 39)\n\t\t\tself.vb.firstMage = true\n\t\telse\n\t\t\ttimerBelowZeroCD:Update(30, 35)--Update the below zero timer to correct it with yells since it tends to be off depending on how bad your cannon operators are.\n\t\tend\n\telseif (msg:find(L.MageHorde) or msg == L.MageHorde) and self:IsInCombat() then\n\t\tif not self.vb.firstMage then\n\t\t\ttimerBelowZeroCD:Update(34.5, 37)\n\t\t\tself.vb.firstMage = true\n\t\telse\n\t\t\ttimerBelowZeroCD:Update(32.5, 35)--Update the below zero timer to correct it with yells since it tends to be off depending on how bad your cannon operators are.\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Icecrown/TheLowerSpire/LordMarrowgar.lua",
    "content": "local mod\t= DBM:NewMod(\"LordMarrowgar\", \"DBM-Icecrown\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20260103220859\")\nmod:SetCreatureID(36612)\nmod:SetEncounterID(845)\nmod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7, 8)\nmod:SetHotfixNoticeRev(20221117000000)\nmod:SetMinSyncRevision(20221117000000)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 69076\",\n\t\"SPELL_AURA_REMOVED 69065 69076\",\n\t\"SPELL_CAST_START 69057 70826 72088 72089 73144 73145 69076\",\n\t\"SPELL_SUMMON 69062 72669 72670\"\n)\n\nlocal myRealm = select(3, DBM:GetMyPlayerInfo())\n\nlocal preWarnWhirlwind\t\t= mod:NewSoonAnnounce(69076, 3)\nlocal warnBoneSpike\t\t\t= mod:NewCastAnnounce(69057, 2)\nlocal warnImpale\t\t\t= mod:NewTargetNoFilterAnnounce(72669, 3)\n\nlocal specWarnColdflame\t\t= mod:NewSpecialWarningGTFO(69146, nil, nil, nil, 1, 8)\nlocal specWarnWhirlwind\t\t= mod:NewSpecialWarningRun(69076, nil, nil, nil, 4, 2)\n\nlocal timerBoneSpike\t\t= mod:NewVarTimer(\"v15-20\", 69057, nil, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON, true) -- Has two sets of spellIDs, one before bone storm and one during bone storm (both sets are separated below). Will use UNIT_SPELLCAST_START for calculations since it uses spellName and thus already groups them in the log. 5s variance [15-20]. Added \"keep\" arg (10N Icecrown 2022/08/25 || 25H Lordaeron 2022/09/14 || 25H Lordaeron 2022/11/17 || 25H Icecrown [2026-01-03]@[16:17:37]) - pull:15.0, 19.0, 15.2, 49.5 || pull:15.0, 17.3, 16.5, 18.7, 16.0, 19.6, 18.9, 18.7, 16.4, 19.3, 16.0 || pull:15.0, 19.7, 19.2, 19.6, 15.6, 18.9, 18.5, 16.4, 17.9, 18.4 || \"Bone Spike Graveyard-npc:36612-61 = pull:14.99, 15.68, Bone Storm applied/17.40, 0.08/17.48, 16.36, Bone Storm removed/13.64, 4.63/18.27\"\nlocal timerWhirlwindCD\t\t= mod:NewCDTimer(90, 69076, nil, nil, nil, 2, nil, DBM_COMMON_L.MYTHIC_ICON) -- As of 16/11/2022, Warmane fixed this timer. (25H Lordaeron 2022/11/16 || 25H Lordaeron 2022/11/17 || 25N Lordaeron 2023-02-10 || 25N Lordaeron [2023-02-14]@[20:08:16]) - Bone Storm-69076-npc:36612 = pull:45.0, 90.1 || pull:45.0, 90.0 || pull:45.0, 90.0 || pull:45.0, 90.1\nlocal timerWhirlwind\t\t= mod:NewBuffActiveTimer(20, 69076, nil, nil, nil, 6)\nlocal timerBoned\t\t\t= mod:NewAchievementTimer(8, 4610)\nlocal timerBoneSpikeUp\t\t= mod:NewCastTimer(69057)\nlocal timerWhirlwindStart\t= mod:NewCastTimer(69076)\n\nlocal soundBoneSpike\t\t= mod:NewSound(69057)\nlocal soundBoneStorm\t\t= mod:NewSound(69076)\n\nlocal berserkTimer\t\t\t= mod:NewBerserkTimer((myRealm == \"Lordaeron\" or myRealm == \"Frostmourne\") and 360 or 600)\n\nmod:AddSetIconOption(\"SetIconOnImpale\", 72669, true, 0, {8, 7, 6, 5, 4, 3, 2, 1})\n\nmod.vb.impaleIcon = 8\n\nfunction mod:OnCombatStart(delay)\n\tpreWarnWhirlwind:Schedule(40-delay)\n\ttimerWhirlwindCD:Start(45-delay) -- After 16/11/2022, Warmane fixed this timer. (10N Icecrown 2022/08/25 || 25H Lordaeron 2022/09/08 || 25H Lordaeron 2022/09/14 || 25H Lordaeron 2022/09/23 || 25H Lordaeron 2022/11/16 || 25H Lordaeron 2022/11/17 || 25N Lordaeron 2023-02-10 || 25H Lordaeron [2023-02-14]@[19:45:48] || 25H Lordaeron [2023-02-14]@[19:53:17] || 25N Lordaeron [2023-02-14]@[20:08:16] || 25N Icecrown 2023-02-19) - pull:52.2 || pull:48.3 || pull:45.2 || pull:46.9 || 45.0 || 45.0 || 45.1 || 45.0 || 45.0\n\ttimerBoneSpike:Start(15-delay) -- Fixed timer - 15.0\n\tberserkTimer:Start(-delay)\n\tself:RegisterShortTermEvents(\n\t\t\"SPELL_PERIODIC_DAMAGE 69146 70823 70824 70825\",\n\t\t\"SPELL_PERIODIC_MISSED 69146 70823 70824 70825\"\n\t)\nend\n\nfunction mod:OnCombatEnd()\n\tself:UnregisterShortTermEvents()\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 69076 then\t\t\t\t\t\t-- Bone Storm (Whirlwind)\n\t\tspecWarnWhirlwind:Show()\n\t\tspecWarnWhirlwind:Play(\"justrun\")\n\t\tif self:IsHeroic() then\n\t\t\ttimerWhirlwind:Show(30)\t\t\t-- As of 16/11/2022, Warmane fixed this timer - 30s\n\t\telse\n\t\t\ttimerWhirlwind:Show()\t\t\t-- REVIEW! After 16/11/2022, needs to be rechecked if it's fixed on 20s. || 30 on Norm (10N Icecrown 2022/08/25) - pull:52.2\n\t\t\ttimerBoneSpike:Cancel()\t\t\t\t\t\t-- He doesn't do Bone Spike Graveyard during Bone Storm on normal\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 69065 then\t\t\t\t\t\t-- Impaled\n\t\tif self.Options.SetIconOnImpale then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\telseif spellId == 69076 then\n\t\ttimerWhirlwind:Cancel()\n\t\tif self:IsNormal() then\n\t\t\ttimerBoneSpike:Start(15)\t\t\t\t-- He will do Bone Spike Graveyard 15 seconds after whirlwind ends on normal. Confirmed on 2025/11/01 - 10n Lordaeron log - \"Bone Spike Graveyard-npc:36612-61 = pull:14.99, 18.68, Bone Storm applied/14.33, Bone Storm removed/20.04, 15.08/35.12/49.45, 18.55, 18.05, Bone Storm applied/18.33, Bone Storm removed/20.07, 14.98/35.04/53.37, 17.61, 19.41\"\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(69057, 70826, 72088, 72089) or args:IsSpellID(73144, 73145) then\t-- Bone Spike Graveyard (no bone storm) | (during bone storm HC). REVIEW!\n\t\twarnBoneSpike:Show()\n\t\ttimerBoneSpike:Start()\n\t\ttimerBoneSpikeUp:Start()\n\t\tsoundBoneSpike:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\Bone_Spike_cast.mp3\")\n\telseif args.spellId == 69076 then\n\t\tpreWarnWhirlwind:Schedule(85)\n\t\ttimerWhirlwindCD:Start() -- As of 16/11/2022, Warmane fixed this timer (Transcriptor snippets above) || On Jul 3, 2021 I changed this to only trigger on Bone Storm finish, although looking at TC script this might be slightly innacurate since it reschedules on EVENT_WARN_BONE_STORM... Keep a close eye on this with more log data and also VOD review (25H Lordaeron 2022/09/14) - [-36s cf] 33.4, 32.7 || [no cf] 69.1, 69.0\n\t\ttimerWhirlwindStart:Start()\n\t\tsoundBoneStorm:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\Bone_Storm_cast.mp3\")\n\tend\nend\n\nfunction mod:SPELL_PERIODIC_DAMAGE(_, _, _, destGUID, _, _, spellId, spellName)\n\tif (spellId == 69146 or spellId == 70823 or spellId == 70824 or spellId == 70825) and destGUID == UnitGUID(\"player\") and self:AntiSpam() then\t\t-- Coldflame, MOVE!\n\t\tspecWarnColdflame:Show(spellName)\n\t\tspecWarnColdflame:Play(\"watchfeet\")\n\tend\nend\nmod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE\n\nfunction mod:SPELL_SUMMON(args)\n\tif args:IsSpellID(69062, 72669, 72670) then\t\t\t-- Impale\n\t\twarnImpale:CombinedShow(0.3, args.sourceName)\n\t\ttimerBoned:Restart()\n\t\tif self.Options.SetIconOnImpale then\n\t\t\tself:SetIcon(args.sourceName, self.vb.impaleIcon)\n\t\tend\n\t\tif self.vb.impaleIcon < 1 then\n\t\t\tself.vb.impaleIcon = 8\n\t\tend\n\t\tself.vb.impaleIcon = self.vb.impaleIcon - 1\n\tend\nend\n"
  },
  {
    "path": "DBM-Icecrown/ThePlagueworks/Festergut.lua",
    "content": "local mod\t= DBM:NewMod(\"Festergut\", \"DBM-Icecrown\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal sformat = string.format\n\nmod:SetRevision(\"20260308121616\")\nmod:SetCreatureID(36626)\nmod:SetEncounterID(849)\nmod:RegisterCombat(\"combat\")\nmod:SetUsedIcons(1, 2, 3)\nmod:SetHotfixNoticeRev(20230627000000)\nmod:SetMinSyncRevision(20230627000000)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 69195 71219 73031 73032\",\n\t\"SPELL_CAST_SUCCESS 69278 71221 69240 71218 73019 73020\",\n\t\"SPELL_AURA_APPLIED 69279 69166 71912 72219 72551 72552 72553 69240 71218 73019 73020 69291 72101 72102 72103\",\n\t\"SPELL_AURA_APPLIED_DOSE 69166 71912 72219 72551 72552 72553 69291 72101 72102 72103\",\n\t\"SPELL_AURA_REMOVED 69279\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1\"\n)\n\nlocal warnInhaledBlight\t\t= mod:NewStackAnnounce(69166, 3)\nlocal warnGastricBloat\t\t= mod:NewStackAnnounce(72219, 2, nil, \"Tank|Healer\")\nlocal warnGasSpore\t\t\t= mod:NewTargetNoFilterAnnounce(69279, 4)\nlocal warnVileGas\t\t\t= mod:NewTargetAnnounce(69240, 3)\n\nlocal specWarnPungentBlight\t= mod:NewSpecialWarningSpell(69195, nil, nil, nil, 2, 2)\nlocal specWarnGasSpore\t\t= mod:NewSpecialWarningYou(69279, nil, nil, nil, 1, 2)\nlocal yellGasSpore\t\t\t= mod:NewYellMe(69279)\nlocal specWarnVileGas\t\t= mod:NewSpecialWarningYou(69240, nil, nil, nil, 1, 2)\nlocal yellVileGas\t\t\t= mod:NewYellMe(69240)\nlocal specWarnGastricBloat\t= mod:NewSpecialWarningStack(72219, nil, 9, nil, nil, 1, 6)\nlocal specWarnInhaled3\t\t= mod:NewSpecialWarningStack(69166, \"Tank\", 3, nil, nil, 1, 2)\nlocal specWarnGoo\t\t\t= mod:NewSpecialWarningDodge(72297, true, nil, nil, 1, 2) -- Retail has default true for melee but it's more sensible to show for everyone.\n\nlocal timerGasSpore\t\t\t= mod:NewBuffFadesTimer(12, 69279, nil, nil, nil, 3)\nlocal timerVileGas\t\t\t= mod:NewBuffFadesTimer(6, 69240, nil, \"Ranged\", nil, 3)\nlocal timerVileGasCD\t\t= mod:NewVarTimer(\"v28-35\", 69240, nil, \"Ranged\", nil, 3, nil, nil, true)\t-- REVIEW! ~7s variance [28-35]. Schedules from Gas Spore cast, which is also variant. (25H Lordaeron [2025-11-06]@[20:40:13]) - \"Vile Gas-73020-npc:36626-986 = pull:51.54, 0.00, 0.00, 50.81, 0.00, 0.00, 43.65, 0.00, 0.00, 38.34, 0.00, 0.00\",\nlocal timerGasSporeCD\t\t= mod:NewVarTimer(\"v40.6-50.3\", 69279, nil, nil, nil, 3, nil, nil, true)\t-- REVIEW! ~10s variance [40.6 - 50.3]. Added \"keep\" arg. (25H Lordaeron [2022-09-14]@[20:34:44] || 25H Lordaeron [2022-09-23]@[21:13:34] || 25N Lordaeron [2023-02-10]@[19:23:53] || 25N Lordaeron [2023-02-14]@[20:56:07] || 10H Icecrown [2023-04-05]@[22:46:14] || 25H Lordaeron [2023-04-07]@[19:35:55] || 25H Lordaeron [2025-11-06]@[20:40:13]) - \"Gas Spore-71221-npc:36626-1002 = pull:24.1, 42.9, 41.9, 45.9, 44.7 || \"Gas Spore-71221-npc:36626-1507 = pull:24.9, 43.6, 41.5, 42.0, 41.9\" || \"Gas Spore-71221-npc:36626-1086 = pull:21.5, 43.9, 41.9, 43.0, 41.2, 43.5 || \"Gas Spore-71221-npc:36626-1575 = pull:21.1, 44.1, 40.6, 48.7, 43.2, 44.1 || \"Gas Spore-69278-npc:36626-852 = pull:20.1, 46.1, 41.2\" || \"Gas Spore-71221-npc:36626-1098 = pull:20.3, 43.1, 43.3, 43.6, 43.3, 43.1, 50.3\" || \"Gas Spore-71221-npc:36626-986 = pull:20.17, 47.30, 44.02, 44.27, 43.73\"\nlocal timerPungentBlight\t= mod:NewCDTimer(33.5, 69195, nil, nil, nil, 2)\t\t-- Edited. ~34 seconds after 3rd stack of inhaled. REVIEW! (25H Lordaeron 2022/09/25) - pull:131.4 [33.5]\nlocal timerInhaledBlight\t= mod:NewVarTimer(\"v33.5-35.01\", 69166, nil, nil, nil, 6, nil, nil, true)\t-- Timer is based on Aura. ~9s variance on pull, 1.5s variance [33.5-35.0]. Added \"keep\" arg (25H Lordaeron 2022/09/04 || 25H Lordaeron 2022/09/25) - 34.2, 34.7, *, 34.2 || 34.3, 33.8, 67.5 [33.5-pungent, 34.0], 34.2\nlocal timerGastricBloat\t\t= mod:NewTargetTimer(100, 72219, nil, \"Tank|Healer\", nil, 5, nil, DBM_COMMON_L.TANK_ICON)\t-- 100 Seconds until expired\nlocal timerGastricBloatCD\t= mod:NewVarTimer(\"v12.99-16.2\", 72219, nil, \"Tank|Healer\", nil, 5, nil, DBM_COMMON_L.TANK_ICON) -- REVIEW! ~3s variance [12.99-16.2]. (25H Lordaeron [2023-04-07]@[19:29:03] || 25H Icecrown [2023-05-28]@[16:21:49] || 25H Lordaeron [2025-05-08]@[20:46:53]) - \"Gastric Bloat-72553-npc:36626-1098 = pull:13.8, 13.1, 13.5, 13.1, 13.2, 14.0, 13.8, 13.4, 13.2, 13.9, 13.4, 13.8 || \"Gastric Bloat-72553-npc:36626-752 = pull:13.6, 16.2, 13.4, 13.1, 13.4, 13.3, 14.3, 13.4, 13.1, 14.1, 13.1, 14.8, 13.1 || \"Gastric Bloat-72553-npc:36626-1258 = pull:14.81, 13.65, 13.57, 13.24, 13.88, 13.80, 13.78, 12.99, 13.61, 13.79, 13.31, 13.57, 13.46, 13.61, 13.97\"\nlocal timerGooCD\t\t\t= mod:NewCDTimer(10, 72297, nil, nil, nil, 3)\n\nlocal berserkTimer\t\t\t= mod:NewBerserkTimer(300)\n\nmod:AddRangeFrameOption(10, 69240, \"Ranged\")\nmod:AddSetIconOption(\"SetIconOnGasSpore\", 69279, true, 7, {1, 2, 3})\nmod:AddBoolOption(\"AnnounceSporeIcons\", false, nil, nil, nil, nil, 69279)\nmod:AddBoolOption(\"AchievementCheck\", false, \"announce\", nil, nil, nil, 4615, \"achievement\")\n\nlocal gasSporeTargets = {}\nlocal vileGasTargets = {}\nmod.vb.gasSporeCast = 0\nmod.vb.warnedfailed = false\n\nfunction mod:AnnounceSporeIcons(uId, icon)\n\tif self.Options.AnnounceSporeIcons and DBM:IsInGroup() and DBM:GetRaidRank() > 1 then\n\t\tSendChatMessage(L.SporeSet:format(icon, DBM:GetUnitFullName(uId)), DBM:IsInRaid() and \"RAID\" or \"PARTY\")\n\tend\nend\n\nlocal function warnGasSporeTargets()\n\twarnGasSpore:Show(table.concat(gasSporeTargets, \"<, >\"))\n\ttimerGasSpore:Start()\n\ttable.wipe(gasSporeTargets)\nend\n\nlocal function warnVileGasTargets()\n\twarnVileGas:Show(table.concat(vileGasTargets, \"<, >\"))\n\ttable.wipe(vileGasTargets)\n\ttimerVileGas:Start()\nend\n\nfunction mod:OnCombatStart(delay)\n\tberserkTimer:Start(-delay)\n\ttimerInhaledBlight:Start(sformat(\"v%s-%s\", 28.55-delay, 34-delay)) -- ~5s variance [28.55-34.0]. (25H Lordaeron 2022/09/04 || 25H Lordaeron 2022/09/25 || 25H Lordaeron [2022-11-16]@[22:30:46] || 10H Lordearon [2023-04-05]@[22:46:14] || 25H Lordaeron [2023-06-27]@[20:34:49] || 25H Lordaeron [2023-08-23]@[20:39:56]) - pull:32.0 || pull:32.9 || pull:28.9 || pull:30.6 || pull:34.0 || pull:30.7\n\ttimerGasSporeCD:Start(sformat(\"v%s-%s\", 20-delay, 25-delay)) -- ~5s variance [20.1 - 24.9]. (25H Lordaeron [2022-09-14]@[20:34:44] || 25H Lordaeron [2022-09-23]@[21:13:34] || 25N Lordaeron [2023-02-10]@[19:23:53] || 25N Lordaeron [2023-02-14]@[20:56:07] || 10H Icecrown [2023-04-05]@[22:46:14] || 25H Lordaeron [2023-04-07]@[19:35:55) - pull:24.1 || pull:24.9 || pull:21.5 || pull:21.1|| pull:20.1|| pull:20.3\n\ttimerGastricBloatCD:Start(sformat(\"v%s-%s\", 12.6-delay, 15-delay)) -- ~2.5s variance [12.60-15.0]\n\ttable.wipe(gasSporeTargets)\n\ttable.wipe(vileGasTargets)\n\tself.vb.gasSporeCast = 0\n\tself.vb.warnedfailed = false\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(10) -- 9.6y is the shortest distance that it doesn't spread (TC test 12/03/2023); set to 10 for safety\n\tend\n\tif self:IsHeroic() then\n\t\ttimerGooCD:Start(13-delay)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(69195, 71219, 73031, 73032) then\t-- Pungent Blight\n\t\tspecWarnPungentBlight:Show()\n\t\tspecWarnPungentBlight:Play(\"aesoon\")\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(69278, 71221) then\t-- Gas Spore (10 man, 25 man)\n\t\tself.vb.gasSporeCast = self.vb.gasSporeCast + 1\n\t\tif self.vb.gasSporeCast == 6 then\n\t\t\ttimerGasSporeCD:Start(50) -- From all the 2023 logs I have, there was only one 50s instance, and it was on the 6->7th cast\n\t\t--\tself.vb.gasSporeCast = 0\n\t\telse\n\t\t\ttimerGasSporeCD:Start()\n\t\tend\n\t\ttimerVileGasCD:Restart()\n\telseif args:IsSpellID(69240, 71218, 73019, 73020) and self:AntiSpam(1, 2) then\t-- Vile Gas\n\t\ttimerVileGasCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 69279 then\t-- Gas Spore\n\t\tgasSporeTargets[#gasSporeTargets + 1] = args.destName\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnGasSpore:Show()\n\t\t\tspecWarnGasSpore:Play(\"targetyou\")\n\t\t\tyellGasSpore:Yell()\n\t\tend\n\t\tif self.Options.SetIconOnGasSpore then\n\t\t\tlocal maxIcon = self:IsDifficulty(\"normal25\", \"heroic25\") and 3 or 2\n\t\t\tself:SetSortedIcon(\"roster\", 0.3, args.destName, 1, maxIcon, false, \"AnnounceSporeIcons\")\n\t\tend\n\t\tself:Unschedule(warnGasSporeTargets)\n\t\tif #gasSporeTargets >= 3 then\n\t\t\twarnGasSporeTargets()\n\t\telse\n\t\t\tself:Schedule(0.3, warnGasSporeTargets)\n\t\tend\n\telseif args:IsSpellID(69166, 71912) then\t-- Inhaled Blight\n\t\tlocal amount = args.amount or 1\n\t\twarnInhaledBlight:Show(args.destName, amount)\n\t\tif amount >= 3 then\n\t\t\tspecWarnInhaled3:Show(amount)\n\t\t\tspecWarnInhaled3:Play(\"defensive\")\n\t\t\ttimerPungentBlight:Start()\n\t\t\ttimerInhaledBlight:Cancel() -- added due to the \"keep\" arg\n\t\telse\t--Prevent timer from starting after 3rd stack since he won't cast it a 4th time, he does Pungent instead.\n\t\t\ttimerInhaledBlight:Start()\n\t\tend\n\telseif args:IsSpellID(72219, 72551, 72552, 72553) then\t-- Gastric Bloat\n\t\tlocal amount = args.amount or 1\n\t\twarnGastricBloat:Show(args.destName, amount)\n\t\ttimerGastricBloat:Start(args.destName)\n\t\ttimerGastricBloatCD:Start()\n\t\tif args:IsPlayer() and amount >= 9 then\n\t\t\tspecWarnGastricBloat:Show(amount)\n\t\t\tspecWarnGastricBloat:Play(\"stackhigh\")\n\t\tend\n\telseif args:IsSpellID(69240, 71218, 73019, 73020) and args:IsDestTypePlayer() then\t-- Vile Gas\n\t\tvileGasTargets[#vileGasTargets + 1] = args.destName\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnVileGas:Show()\n\t\t\tspecWarnVileGas:Play(\"scatter\")\n\t\t\tyellVileGas:Yell()\n\t\tend\n\t\tself:Unschedule(warnVileGasTargets)\n\t\tself:Schedule(0.8, warnVileGasTargets)\n\telseif args:IsSpellID(69291, 72101, 72102, 72103) and args:IsDestTypePlayer() then\t--Inoculated\n\t\tlocal amount = args.amount or 1\n\t\tif self.Options.AchievementCheck and DBM:GetRaidRank() > 0 and not self.vb.warnedfailed and self:AntiSpam(3, 1) then\n\t\t\tif amount == 3 then\n\t\t\t\tself.vb.warnedfailed = true\n\t\t\t\tSendChatMessage(L.AchievementFailed:format(args.destName, amount), \"RAID_WARNING\")\n\t\t\tend\n\t\tend\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 69279 then\t-- Gas Spore\n\t\tif self.Options.SetIconOnGasSpore then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(72299) then -- Malleable Goo Summon Trigger (10 player normal) (the other 3 spell ids are not needed here since all spells have the same name)\n\t\tDBM:AddMsg(\"Malleable Goo Summon Trigger UNIT_SPELLCAST_SUCCEEDED unhidden from combat log. Notify Zidras on Discord or GitHub\")\n\t\tspecWarnGoo:Show()\n\t\tspecWarnGoo:Play(\"watchstep\")\n\t\tif self:IsDifficulty(\"heroic25\") then\n\t\t\ttimerGooCD:Start()\n\t\telse\n\t\t\ttimerGooCD:Start(15)--30 seconds in between goos on 10 man heroic\n\t\tend\n\telseif spellName == GetSpellInfo(73032) then -- Pungent Blight\n\t\ttimerInhaledBlight:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Icecrown/ThePlagueworks/Putricide.lua",
    "content": "local mod\t= DBM:NewMod(\"Putricide\", \"DBM-Icecrown\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal select = select\n\nmod:SetRevision(\"20251101211532\")\nmod:SetCreatureID(36678)\nmod:SetEncounterID(851)\nmod:SetUsedIcons(1, 2, 3, 4)\nmod:SetHotfixNoticeRev(20240611000000)\nmod:SetMinSyncRevision(20220908000000)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 70351 71966 71967 71968 71617 72842 72843 72851 72852 71621 72850 70672 72455 72832 72833 73121 73122 73120 71893\",\n\t\"SPELL_CAST_SUCCESS 70341 71255 72855 72856 70911 72615 72295 74280 74281\",\n\t\"SPELL_AURA_APPLIED 70447 72836 72837 72838 70672 72455 72832 72833 72451 72463 72671 72672 70542 70539 72457 72875 72876 70352 74118 70353 74119 72855 72856 70911\",\n\t\"SPELL_AURA_APPLIED_DOSE 72451 72463 72671 72672 70542\",\n\t\"SPELL_AURA_REFRESH 70539 72457 72875 72876 70542\",\n\t\"SPELL_AURA_REMOVED 70447 72836 72837 72838 70672 72455 72832 72833 72855 72856 70911 71615 70539 72457 72875 72876 70542\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"UNIT_HEALTH boss1\"\n--\t\"UNIT_SPELLCAST_SUCCEEDED boss1\"\n)\n\nlocal myRealm = select(3, DBM:GetMyPlayerInfo())\n\n-- General\nlocal berserkTimer\t\t\t\t\t= mod:NewBerserkTimer((myRealm == \"Lordaeron\" or myRealm == \"Frostmourne\") and (mod:IsDifficulty(\"normal10\") and 437.5 or mod:IsDifficulty(\"normal25\") and 450 or 480) or 600)\n\n-- buffs from \"Drink Me\"\nlocal timerMutatedSlash\t\t\t\t= mod:NewTargetTimer(20, 70542, nil, false, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerRegurgitatedOoze\t\t\t= mod:NewTargetTimer(20, 70539, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\n\n-- Stage One\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1)..\": 100% – 80%\")\nlocal warnSlimePuddle\t\t\t\t= mod:NewSpellAnnounce(70341, 2)\nlocal warnUnstableExperimentSoon\t= mod:NewSoonAnnounce(70351, 3)\nlocal warnUnstableExperiment\t\t= mod:NewSpellAnnounce(70351, 4)\nlocal warnVolatileOozeAdhesive\t\t= mod:NewTargetNoFilterAnnounce(70447, 3)\nlocal warnGaseousBloat\t\t\t\t= mod:NewTargetNoFilterAnnounce(70672, 3)\nlocal warnUnboundPlague\t\t\t\t= mod:NewTargetNoFilterAnnounce(70911, 3, nil, false, nil, nil, nil, true)\t\t-- Heroic Ability, sound muted\n\nlocal specWarnVolatileOozeAdhesive\t= mod:NewSpecialWarningYou(70447, nil, nil, nil, 1, 2)\nlocal specWarnVolatileOozeAdhesiveT\t= mod:NewSpecialWarningMoveTo(70447, nil, nil, nil, 1, 2)\nlocal specWarnGaseousBloat\t\t\t= mod:NewSpecialWarningRun(70672, nil, nil, nil, 4, 2)\nlocal specWarnGaseousBloatCast\t\t= mod:NewSpecialWarningMove(72833, nil, nil, nil, 1, 2)\t\t-- Gaseous Bloat (cast)\nlocal specWarnUnboundPlague\t\t\t= mod:NewSpecialWarningYou(70911, nil, nil, nil, 1, 2, 3)\t-- Heroic Ability\nlocal yellUnboundPlague\t\t\t\t= mod:NewYellMe(70911, false)\t-- Heroic Ability, disabled by default to reduce chat bubble spam\n\nlocal timerGaseousBloat\t\t\t\t= mod:NewTargetTimer(20, 70672, nil, nil, nil, 3)\t\t\t-- Duration of debuff\nlocal timerGaseousBloatCast\t\t\t= mod:NewCastTimer(3, 70672, nil, nil, nil, 3)\t\t\t\t-- Cast duration\nlocal timerSlimePuddleCD\t\t\t= mod:NewCDTimer(35, 70341, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\t\t\t\t-- Approx\nlocal timerUnstableExperimentCD\t\t= mod:NewCDTimer(35, 70351, nil, nil, nil, 1, nil, DBM_COMMON_L.DEADLY_ICON, true) -- 5s variance [35-40]. Added \"keep\" arg (10N Icecrown 2022/08/20 || 10N Icecrown 2022/08/25 || 10H Lordaeron 2022/09/02 || 25H Lordaeron 2022/09/04) - 39.1, 38.0 || 39.1, 38.0 || Stage 1/30.7, 36.2 ; Stage 1/33.9, 67.6, Stage 2/2.1, 36.5/38.6, 36.7; Stage 1/30.5, 35.7, Stage 2/41.6 || Stage 1/30.5, 68.3, Stage 2/4.9, 32.8/37.7, 37.7\nlocal timerUnboundPlagueCD\t\t\t= mod:NewNextTimer(90, 70911, nil, nil, nil, 3, nil, DBM_COMMON_L.HEROIC_ICON)\nlocal timerUnboundPlague\t\t\t= mod:NewBuffActiveTimer(12, 70911, nil, nil, nil, 3)\t\t-- Heroic Ability: we can't keep the debuff 60 seconds, so we have to switch at 12-15 seconds. Otherwise the debuff does to much damage!\n\nlocal soundSlimePuddle\t\t\t\t= mod:NewSound(70341)\n\nmod:AddSetIconOption(\"OozeAdhesiveIcon\", 70447, true, 0, {4})--green icon for green ooze\nmod:AddSetIconOption(\"GaseousBloatIcon\", 70672, true, 0, {2})--Orange Icon for orange/red ooze\nmod:AddSetIconOption(\"UnboundPlagueIcon\", 70911, true, 0, {3})\n\n-- Stage Two\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2)..\": 80% – 35%\")\nlocal warnPhase2\t\t\t\t\t= mod:NewPhaseAnnounce(2, 2, nil, nil, nil, nil, nil, 2)\nlocal warnChokingGasBombSoon\t\t= mod:NewPreWarnAnnounce(71255, 5, 3, nil, \"Melee\")\nlocal warnChokingGasBomb\t\t\t= mod:NewSpellAnnounce(71255, 3, nil, \"Melee\")\t\t-- Phase 2 ability\n\n--local specWarnMalleableGoo\t\t\t= mod:NewSpecialWarningYou(72295, nil, nil, nil, 1, 2)\n--local yellMalleableGoo\t\t\t\t= mod:NewYellMe(72295)\n--local specWarnMalleableGooNear\t\t= mod:NewSpecialWarningClose(72295, nil, nil, nil, 1, 2)\nlocal specWarnChokingGasBomb\t\t= mod:NewSpecialWarningMove(71255, \"Melee\", nil, nil, 1, 2)\nlocal specWarnMalleableGooCast\t\t= mod:NewSpecialWarningSpell(72295, \"Ranged\", nil, nil, 2, 2)\n\nlocal timerChokingGasBombCD\t\t\t= mod:NewCDTimer(35.2, 71255, nil, nil, nil, 3, nil, nil, true) -- ~5s variance [35.2-39.8]. Added \"keep\" arg (25H Lordaeron 2022/09/07 || 25H Lordaeron 2022/09/23 wipe1 || 25H Lordaeron 2022/09/23 kill) - pull:126.3/Stage 2/22.8, 35.3, 35.5, 35.9; pull:126.4/Stage 2/22.1, 36.6, 35.9, 37.3, 38.7, Stage 2.5/7.8, Stage 3/31.9, 30.0/61.9/69.7, 38.2 || pull:121.2/Stage 2/21.9, 37.2, 38.7, 37.7, 38.7, Stage 2.5/2.3, Stage 3/33.0, 33.2/66.1/68.4, 39.4\" || Stage 2/21.3, 38.0, 35.2, 35.8, 39.8, Stage 2.5/11.6, Stage 3/33.2, 23.9/57.1/68.8, 35.5\nlocal timerChokingGasBombExplosion\t= mod:NewCastTimer(12, 71279, nil, nil, nil, 2)\nlocal timerMalleableGooCD\t\t\t= mod:NewNextTimer(20, 72295, nil, nil, nil, 3) -- (25H Lordaeron 2022/09/07) - pull:113.6/Stage 2/10.1, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0; pull:114.4/Stage 2/10.1, 20.0, 20.1, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, Stage 2.5/8.1, Stage 3/31.9, 10.0/41.9/50.0, 20.0, 20.0, 20.0, 20.0\"\n\nlocal soundSpecWarnMalleableGoo\t\t= mod:NewSound(72295, nil, \"Ranged\")\nlocal soundMalleableGooSoon\t\t\t= mod:NewSoundSoon(72295, nil, \"Ranged\")\nlocal soundSpecWarnChokingGasBomb\t= mod:NewSound(71255, nil, \"Melee\")\nlocal soundChokingGasSoon\t\t\t= mod:NewSoundSoon(71255, nil, \"Melee\")\n\n--mod:AddSetIconOption(\"MalleableGooIcon\", 72295, true, 0, {1})\n--mod:AddArrowOption(\"GooArrow\", 72295)\n\n-- Stage Three\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(3)..\": 35% – 0%\")\nlocal warnPhase3\t\t\t\t\t= mod:NewPhaseAnnounce(3, 2, nil, nil, nil, nil, nil, 2)\nlocal warnMutatedPlague\t\t\t\t= mod:NewStackAnnounce(72451, 3, nil, \"Tank|Healer|RemoveEnrage\") -- Phase 3 ability\n\nlocal timerMutatedPlagueCD\t\t\t= mod:NewCDTimer(10, 72451, nil, \"Tank|Healer|RemoveEnrage\", nil, 5, nil, DBM_COMMON_L.TANK_ICON)\t\t\t\t-- 10 to 11\n\n-- Intermission\nmod:AddTimerLine(DBM_COMMON_L.INTERMISSION)\nlocal warnPhase2Soon\t\t\t\t= mod:NewPrePhaseAnnounce(2)\nlocal warnPhase3Soon\t\t\t\t= mod:NewPrePhaseAnnounce(3)\nlocal warnTearGas\t\t\t\t\t= mod:NewSpellAnnounce(71617, 2)\t\t-- Phase transition normal\nlocal warnVolatileExperiment\t\t= mod:NewSpellAnnounce(72843, 4)\t\t-- Phase transition heroic\nlocal warnReengage\t\t\t\t\t= mod:NewAnnounce(\"WarnReengage\", 6, 1180)\n\nlocal specWarnOozeVariable\t\t\t= mod:NewSpecialWarningYou(70352, nil, nil, nil, nil, nil, 3)\t-- Heroic Ability\nlocal specWarnGasVariable\t\t\t= mod:NewSpecialWarningYou(70353, nil, nil, nil, nil, nil, 3)\t-- Heroic Ability\n\nlocal timerNextPhase\t\t\t\t= mod:NewPhaseTimer(30)\nlocal timerReengage\t\t\t\t\t= mod:NewTimer(20, \"TimerReengage\", 1180, nil, nil, 6)\n--local timerTearGas\t\t\t\t\t= mod:NewBuffFadesTimer(16, 71617, nil, nil, nil, 6)\n--local timerPotions\t\t\t\t\t= mod:NewBuffActiveTimer(30, 71621, nil, nil, nil, 6)\n\nmod:GroupSpells(71255, 71279) -- Choking Gas Bomb, Choking Gas Explosion\n\nlocal redOozeGUIDsCasts = {}\nlocal firstIntermisisonUnboundElapsed = 0\nmod.vb.warned_preP2 = false\nmod.vb.warned_preP3 = false\nmod.vb.unboundCount = 0\n\nlocal function NextPhase(self)\n\tself:SetStage(self.vb.phase + 0.5)\n\tif self.vb.phase == 2 then\n\t\twarnPhase2:Show()\n\t\twarnPhase2:Play(\"ptwo\")\n\t\ttimerUnstableExperimentCD:Start(30) -- 19/04/2024: (Heroic) Unstable Experiement scheduled 30 seconds after Create Concoction finishes. https://www.warmane.com/bugtracker/report/121798#comment-114099\n\t\twarnUnstableExperimentSoon:Schedule(25)\n\t\t-- EVENT_PHASE_TRANSITION - scheduled for Create Concoction cast + 100 ms (will fire [CHAT_MSG_MONSTER_YELL] Hrm, I don't feel a thing. Wha?! Where'd those come from?)\n\t\ttimerMalleableGooCD:Start(15) -- Fixed timer after phase 2: 15s\n\t\tsoundMalleableGooSoon:Schedule(15-3, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\malleable_soon.mp3\")\n\t\ttimerChokingGasBombCD:Start(25) -- timer after phasing: 5s variance [25-30s]\n\t\tsoundChokingGasSoon:Schedule(25-3, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\choking_soon.mp3\")\n\t\twarnChokingGasBombSoon:Schedule(25-5)\n\t--\tself:UnregisterShortTermEvents() -- UnregisterShortTermEvents moved here to ensure UNIT_TARGET is unregistered (previously was running on sync, which is not always used)\n\telseif self.vb.phase == 3 then\n\t\twarnPhase3:Show()\n\t\twarnPhase3:Play(\"pthree\")\n\t\t-- EVENT_PHASE_TRANSITION - scheduled for Guzzle Potions cast + 100 ms (will fire [CHAT_MSG_MONSTER_YELL] Tastes like... Cherry! OH! Excuse me!)\n\t--\tself:UnregisterShortTermEvents() -- UnregisterShortTermEvents moved here to ensure UNIT_TARGET is unregistered (previously was running on sync, which is not always used)\n\tend\nend\n\n-- This does not work on Warmane - boss never swaps targets to throw malleable (last checked on 14/07/2021)\n--[[function mod:MalleableGooTarget(targetname, uId)\n\tif not targetname then return end\n\t\tif self.Options.MalleableGooIcon then\n\t\t\tself:SetIcon(targetname, 1, 10)\n\t\tend\n\tif targetname == UnitName(\"player\") then\n\t\tspecWarnMalleableGoo:Show()\n\t\tspecWarnMalleableGoo:Play(\"targetyou\")\n\t\tyellMalleableGoo:Yell()\n\t\tsoundSpecWarnMalleableGoo:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\malleable.mp3\")\n\telse\n\t\tif self:CheckNearby(11, targetname) then\n\t\t\tspecWarnMalleableGooNear:Show(targetname)\n\t\t\tspecWarnMalleableGooNear:Play(\"watchstep\")\n\t\t\tsoundSpecWarnMalleableGoo:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\malleable.mp3\")\n\t\telse\n\t\t\tspecWarnMalleableGooCast:Show()\n\t\t\tspecWarnMalleableGooCast:Play(\"watchstep\")\n\t\t\tsoundSpecWarnMalleableGoo:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\malleable.mp3\")\n\t\tend\n\t\tif self.Options.GooArrow then\n\t\t\tlocal x, y = GetPlayerMapPosition(uId)\n\t\t\tif x == 0 and y == 0 then\n\t\t\t\tSetMapToCurrentZone()\n\t\t\t\tx, y = GetPlayerMapPosition(uId)\n\t\t\tend\n\t\t\tDBM.Arrow:ShowRunAway(x, y, 10, 5)\n\t\tend\n\tend\nend]]\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tberserkTimer:Start(-delay)\n\ttimerSlimePuddleCD:Start(10-delay)\n\ttimerUnstableExperimentCD:Start(30-delay) -- REVIEW! need P1 N log data to determine whether H/N has difference. heroic 5s variance (10N Icecrown 2022/08/25 || 10H Lordaeron 2022/09/02 || 25H Lordaeron 2022/09/04) - 61 || 33.0; 30.7; 30.5; 33.9 || 30.5\n\twarnUnstableExperimentSoon:Schedule(25-delay)\n\ttable.wipe(redOozeGUIDsCasts)\n\tfirstIntermisisonUnboundElapsed = 0\n\tself.vb.warned_preP2 = false\n\tself.vb.warned_preP3 = false\n\tself.vb.unboundCount = 0\n\tif self:IsHeroic() then\n\t\ttimerUnboundPlagueCD:Start(20-delay)\n\tend\nend\n\n--[[function mod:OnCombatEnd()\n\tself:UnregisterShortTermEvents()\nend]]\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif args:IsSpellID(70351, 71966, 71967, 71968) then\t-- Unstable Experiment\n\t\twarnUnstableExperimentSoon:Cancel()\n\t\twarnUnstableExperiment:Show()\n\t\ttimerUnstableExperimentCD:Start()\n\t\twarnUnstableExperimentSoon:Schedule(30)\n\telseif spellId == 71617 then\t\t\t\t--Tear Gas (stun all on Normal phase) (Normal intermission)\n\t\tself:SetStage(self.vb.phase + 0.5) -- ACTION_CHANGE_PHASE\n\t\twarnTearGas:Show()\n\t\tlocal puddleElapsed = timerSlimePuddleCD:GetTime()\n\t\ttimerSlimePuddleCD:Update(puddleElapsed, 59) -- the next Normal Slime Puddle will always be [59.03:25N/59.03:10N]s after the previous Slime Puddle cast, so calculate elapsed time and update timer\n\t\tif self.vb.phase == 2.5 then -- Usual timer delta is not reliable for Malleable Goo, it's a different logic, commented below\n\t\t\tlocal gooElapsed = timerMalleableGooCD:GetTime() -- On second Normal intermission, the next Malleable Goo will always be [44:25N/44:10N]s after the previous Malleable Goo cast, so calculate elapsed time and update timer\n\t\t\ttimerMalleableGooCD:Update(gooElapsed, 44)\n\t\t\tsoundMalleableGooSoon:Schedule(44-gooElapsed-3, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\malleable_soon.mp3\")\n\t\t\tlocal chokingElapsed = timerChokingGasBombCD:GetTime() -- On second Normal intermission, the next Choking Gas Bomb will always be [59.28-61.10:25N/60.17:10N]s after the previous Choking Gas Bomb cast, so calculate elapsed time and update timer\n\t\t\ttimerChokingGasBombCD:Update(chokingElapsed, 59)\n\t\t\tsoundChokingGasSoon:Schedule(59-chokingElapsed-3, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\choking_soon.mp3\")\n\t\t\twarnChokingGasBombSoon:Schedule(59-chokingElapsed-5)\n\t\tend\n\telseif args:IsSpellID(72842, 72843) then\t\t--Volatile Experiment (Heroic intermission)\n\t\tself:SetStage(self.vb.phase + 0.5) -- ACTION_CHANGE_PHASE\n\t\twarnVolatileExperiment:Show()\n\t\twarnUnstableExperimentSoon:Cancel()\n\t\ttimerUnstableExperimentCD:Cancel()\n\t\tlocal puddleElapsed = timerSlimePuddleCD:GetTime()\n\t\tlocal puddleMaxTimePerDifficulty = self:IsDifficulty(\"heroic25\") and 75 or self:IsDifficulty(\"heroic10\") and 85 or 59 -- the next Heroic Slime Puddle will always be [75.05:25H/84.99:10H]s after the previous Slime Puddle cast, so calculate elapsed time and update timer\n\t\ttimerSlimePuddleCD:Update(puddleElapsed, puddleMaxTimePerDifficulty)\n\t\tlocal unboundElapsed = timerUnboundPlagueCD:GetTime()\n\t\tif self.vb.phase == 1.5 then\n\t\t\tfirstIntermisisonUnboundElapsed = unboundElapsed -- cache for second intermission if necessary\n\t\t\ttimerUnboundPlagueCD:Update(unboundElapsed, 130)\n\t\telseif self.vb.phase == 2.5 then\n\t\t\tif self.vb.unboundCount == 1 then -- only 1 Unbound Plague cast during whole raid (rushed phase 2)\n\t\t\t\ttimerUnboundPlagueCD:Update(firstIntermisisonUnboundElapsed, 170) -- 170s between Unbound Plague from Phase 1 and Phase 3\n\t\t\telse\n\t\t\t\ttimerUnboundPlagueCD:Update(unboundElapsed, 130) -- REVIEW! One log had 220.04 (25H Lordaeron [2024-05-21]@[21:15:56]), it needs investigation\n\t\t\tend\n\t\t\tlocal gooElapsed = timerMalleableGooCD:GetTime() -- On second Heroic intermission, the next Malleable Goo will always be [60:25H/70:10H]s after the previous Malleable Goo cast, so calculate elapsed time and update timer\n\t\t\tlocal gooMaxTimePerDifficulty = self:IsDifficulty(\"heroic25\") and 60 or self:IsDifficulty(\"heroic10\") and 70 or 44 -- REVIEW! 25H confirmed, 10H need more data, 25N only one log, 10N only one log\n\t\t\ttimerMalleableGooCD:Update(gooElapsed, gooMaxTimePerDifficulty)\n\t\t\tsoundMalleableGooSoon:Schedule(gooMaxTimePerDifficulty-gooElapsed-3, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\malleable_soon.mp3\")\n\t\t\tlocal chokingElapsed = timerChokingGasBombCD:GetTime() -- On second Heroic intermission, the next Choking Gas Bomb will always be [75-80:25H/89.39:10H]s after the previous Choking Gas Bomb cast, so calculate elapsed time and update timer\n\t\t\tlocal chokingMaxTimePerDifficulty = self:IsDifficulty(\"heroic25\") and 75 or self:IsDifficulty(\"heroic10\") and 85 or 59 -- REVIEW! 25H confirmed, 10H only one log, 25N only two log, 10N only one log\n\t\t\ttimerChokingGasBombCD:Update(chokingElapsed, chokingMaxTimePerDifficulty)\n\t\t\tsoundChokingGasSoon:Schedule(chokingMaxTimePerDifficulty-chokingElapsed-3, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\choking_soon.mp3\")\n\t\t\twarnChokingGasBombSoon:Schedule(chokingMaxTimePerDifficulty-chokingElapsed-5)\n\t\tend\n\telseif args:IsSpellID(72851, 72852, 71621, 72850) then\t\t--Create Concoction (phase2 change)\n\t\tlocal castTime = self:IsHeroic() and 30 or 4 -- Normal and Heroic have different cast times, so hardcode the cast time in seconds. DO NOT USE GetSpellInfo API here, as it is affected by player Haste.\n\t\twarnUnstableExperimentSoon:Cancel()\n\t\ttimerUnstableExperimentCD:Cancel()\n\t\ttimerNextPhase:Start(castTime) -- Script phasing happens right after UNIT_SPELLCAST_SUCCEEDED. Boss re-engage is timed to account for the remaining time (check YELL)\n\t\tself:Schedule(castTime, NextPhase, self) -- prefer scheduling over UNIT_SPELLCAST_SUCCEEDED because on Normal difficulty Create Concoction does not fire UNIT_SPELLCAST_SUCCEEDED, only _STOP. This has the benefit of also being cross-server\n\t\tif self:IsHeroic() then\n--\t\t\tif self:IsDifficulty(\"heroic10\") then -- Apply to both 10H and 25H (reason below)\n\t\t\t\t-- self:Schedule(35.63, NextPhase, self) -- using longest timer found, since this is a schedule\n\t\t\t\tself:RegisterShortTermEvents(\n\t\t\t\t\t\"UNIT_TARGET boss1\"\n\t\t\t\t)\n--\t\t\tend\n\t\tend\n\telseif args:IsSpellID(70672, 72455, 72832, 72833) then\t--Red Slime\n\t\ttimerGaseousBloatCast:Start(args.sourceGUID) -- account for multiple red oozes\n\t\tif not redOozeGUIDsCasts[args.sourceGUID] then\n\t\t\tredOozeGUIDsCasts[args.sourceGUID] = 1\n\t\telse\n\t\t\tredOozeGUIDsCasts[args.sourceGUID] = redOozeGUIDsCasts[args.sourceGUID] + 1\n\t\tend\n\t\tif redOozeGUIDsCasts[args.sourceGUID] > 1 then -- Red Ooze retarget\n\t\t\tspecWarnGaseousBloatCast:Show()\n\t\t\tspecWarnGaseousBloatCast:Play(\"targetchange\")\n\t\tend\n\telseif args:IsSpellID(73121, 73122, 73120, 71893) then\t\t--Guzzle Potions (phase3 change)\n\t\tlocal castTime = self:IsDifficulty(\"heroic25\") and 20 or self:IsDifficulty(\"heroic10\") and 30 or 4 -- Normal, Heroic10 and Heroic25 have different cast times, so hardcode the cast time in seconds. DO NOT USE GetSpellInfo API here, as it is affected by player Haste.\n\t\ttimerUnstableExperimentCD:Cancel()\n\t\ttimerNextPhase:Start(castTime) -- Script phasing happens right after UNIT_SPELLCAST_SUCCEEDED. Boss re-engage is timed to account for the remaining time (check YELL)\n\t\tself:Schedule(castTime, NextPhase, self) -- prefer scheduling over UNIT_SPELLCAST_SUCCEEDED because on Normal difficulty Guzzle Potions does not fire UNIT_SPELLCAST_SUCCEEDED, only _STOP. This has the benefit of also being cross-server\n\t\tif self:IsHeroic() then\n\t\t\t--self:Schedule(38.69, NextPhase, self) -- REVIEW! using longest timer found, since this is a schedule\n\t\t\t--timerNextPhase:Start(38.67) -- (10H Lordaeron [2023-08-12]@[20:34:20]) - 38.67\n\t\t\tself:RegisterShortTermEvents(\n\t\t\t\t\"UNIT_TARGET boss1\"\n\t\t\t)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 70341 and self:AntiSpam(5, 1) then\n\t\twarnSlimePuddle:Show()\n\t\tsoundSlimePuddle:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\puddle_cast.mp3\")\n\t\ttimerSlimePuddleCD:Start()\n\telseif spellId == 71255 then -- Choking Gas\n\t\twarnChokingGasBomb:Show()\n\t\tspecWarnChokingGasBomb:Show()\n\t\tsoundSpecWarnChokingGasBomb:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\choking.mp3\")\n\t\tsoundChokingGasSoon:Cancel()\n\t\tsoundChokingGasSoon:Schedule(35.5-3, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\choking_soon.mp3\")\n\t\ttimerChokingGasBombCD:Start()\n\t\ttimerChokingGasBombExplosion:Start()\n\t\twarnChokingGasBombSoon:Schedule(30.5)\n\telseif args:IsSpellID(72855, 72856, 70911) then\n\t\tself.vb.unboundCount = self.vb.unboundCount + 1\n\t\ttimerUnboundPlagueCD:Start()\n\telseif args:IsSpellID(72615, 72295, 74280, 74281) then -- Malleable Goo\n\t\t--self:BossTargetScanner(36678, \"MalleableGooTarget\", 0.05, 6)\n\t\tspecWarnMalleableGooCast:Show()\n\t\t--specWarnMalleableGooCast:Play(\"watchstep\")\n\t\ttimerMalleableGooCD:Start()\n\t\tsoundSpecWarnMalleableGoo:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\malleable.mp3\")\n\t\tsoundMalleableGooSoon:Cancel()\n\t\tsoundMalleableGooSoon:Schedule(20-3, \"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\RaidAbilities\\\\malleable_soon.mp3\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif args:IsSpellID(70447, 72836, 72837, 72838) then--Green Slime\n\t\tif args:IsPlayer() then--Still worth warning 100s because it does still do knockback\n\t\t\tspecWarnVolatileOozeAdhesive:Show()\n\t\telseif not self:IsTank() then\n\t\t\tspecWarnVolatileOozeAdhesiveT:Show(args.destName)\n\t\t\tspecWarnVolatileOozeAdhesiveT:Play(\"helpsoak\")\n\t\telse\n\t\t\twarnVolatileOozeAdhesive:Show(args.destName)\n\t\tend\n\t\tif self.Options.OozeAdhesiveIcon then\n\t\t\tself:SetIcon(args.destName, 1)\n\t\tend\n\telseif args:IsSpellID(70672, 72455, 72832, 72833) then\t--Red Slime\n\t\ttimerGaseousBloat:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnGaseousBloat:Show()\n\t\t\tspecWarnGaseousBloat:Play(\"justrun\")\n\t\t\tspecWarnGaseousBloat:ScheduleVoice(1.5, \"keepmove\")\n\t\telse\n\t\t\twarnGaseousBloat:Show(args.destName)\n\t\tend\n\t\tif self.Options.GaseousBloatIcon then\n\t\t\tself:SetIcon(args.destName, 2)\n\t\tend\n\t--elseif args:IsSpellID(71615, 71618) then\t--71615 used in 10 and 25 normal, 71618?\n\t--\ttimerTearGas:Start()\n\telseif args:IsSpellID(72451, 72463, 72671, 72672) then\t-- Mutated Plague\n\t\twarnMutatedPlague:Show(args.destName, args.amount or 1)\n\t\ttimerMutatedPlagueCD:Start()\n\telseif spellId == 70542 then\n\t\ttimerMutatedSlash:Show(args.destName)\n\telseif args:IsSpellID(70539, 72457, 72875, 72876) then\n\t\ttimerRegurgitatedOoze:Show(args.destName)\n\telseif args:IsSpellID(70352, 74118) then\t--Ooze Variable\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnOozeVariable:Show()\n\t\tend\n\telseif args:IsSpellID(70353, 74119) then\t-- Gas Variable\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnGasVariable:Show()\n\t\tend\n\telseif args:IsSpellID(72855, 72856, 70911) then\t -- Unbound Plague\n\t\tif self.Options.UnboundPlagueIcon then\n\t\t\tself:SetIcon(args.destName, 3)\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnUnboundPlague:Show()\n\t\t\tspecWarnUnboundPlague:Play(\"targetyou\")\n\t\t\ttimerUnboundPlague:Start()\n\t\t\tyellUnboundPlague:Yell()\n\t\telse\n\t\t\twarnUnboundPlague:Show(args.destName)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED_DOSE(args)\n\tif args:IsSpellID(72451, 72463, 72671, 72672) then\t-- Mutated Plague\n\t\twarnMutatedPlague:Show(args.destName, args.amount or 1)\n\t\ttimerMutatedPlagueCD:Start()\n\telseif args.spellId == 70542 then\n\t\ttimerMutatedSlash:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REFRESH(args)\n\tif args:IsSpellID(70539, 72457, 72875, 72876) then\n\t\ttimerRegurgitatedOoze:Show(args.destName)\n\telseif args.spellId == 70542 then\n\t\ttimerMutatedSlash:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif args:IsSpellID(70447, 72836, 72837, 72838) then\n\t\tif self.Options.OozeAdhesiveIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\telseif args:IsSpellID(70672, 72455, 72832, 72833) then\n\t\ttimerGaseousBloat:Cancel(args.destName)\n\t\tif self.Options.GaseousBloatIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\telseif args:IsSpellID(72855, 72856, 70911) then\t\t\t\t\t\t-- Unbound Plague\n\t\ttimerUnboundPlague:Stop(args.destName)\n\t\tif self.Options.UnboundPlagueIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\telseif spellId == 71615 and (self.vb.phase == 1.5 or self.vb.phase == 2.5) then\t-- Tear Gas Removal. Requires phase check because sometimes Tear Gas is removed from Abomination much later than the rest of the raid, during phase 2, causing another phasing to 2.5 (Logs: 10N Frostmourne [2023-01-07]@[17:20:22] and [2023-01-07]@[17:42:33] || 10N Icecrown [2023-04-05]@[22:54:25])\n\t\tDBM:Debug(\"Re-engaged\")\n\t\t--\tNextPhase(self)\n\telseif args:IsSpellID(70539, 72457, 72875, 72876) then\n\t\ttimerRegurgitatedOoze:Cancel(args.destName)\n\telseif spellId == 70542 then\n\t\ttimerMutatedSlash:Cancel(args.destName)\n\telseif (args:IsSpellID(70352, 74118) or args:IsSpellID(70353, 74119)) and (self.vb.phase == 1.5 or self.vb.phase == 2.5) then\t-- Ooze Variable / Gas Variable (Heroic 25 - Phase 2 and 3). Disabled for two main reasons: raid member dying will trigger this event, and I have found multiple logs with early SAR\n\t\tDBM:Debug(\"Variable phasing time marker\")\n--\t\tNextPhase(self)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\t-- EVENT_RESUME_ATTACK\n\tif msg == L.YellTransform1 or msg:find(L.YellTransform1) then\n\t\twarnReengage:Schedule(5.5, L.name)\n\t\ttimerReengage:Start(5.5)\n\telseif msg == L.YellTransform2 or msg:find(L.YellTransform2) then\n\t\twarnReengage:Schedule(8.5, L.name)\n\t\ttimerReengage:Start(8.5)\n\tend\nend\n\n--values subject to tuning depending on dps and his health pool\nfunction mod:UNIT_HEALTH(uId)\n\tif self.vb.phase == 1 and not self.vb.warned_preP2 and self:GetUnitCreatureId(uId) == 36678 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.83 then\n\t\tself.vb.warned_preP2 = true\n\t\twarnPhase2Soon:Show()\n\t\twarnPhase2Soon:Play(\"nextphasesoon\")\n\telseif self.vb.phase == 2 and not self.vb.warned_preP3 and self:GetUnitCreatureId(uId) == 36678 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.38 then\n\t\tself.vb.warned_preP3 = true\n\t\twarnPhase3Soon:Show()\n\t\twarnPhase3Soon:Play(\"nextphasesoon\")\n\telseif self:GetUnitCreatureId(uId) == 36678 and UnitHealth(uId) / UnitHealthMax(uId) == 0.35 then\n\t\twarnUnstableExperimentSoon:Cancel()\n\t\twarnChokingGasBombSoon:Cancel()\n\t\tsoundMalleableGooSoon:Cancel()\n\t\tsoundChokingGasSoon:Cancel()\n\tend\nend\n\n-- On 10 Heroic, there is no event we can use to accurately trigger phasing. On 25 Heroic, we could use SPELL_AURA_REMOVED, but not reliable without UnitBuff checks or table management which would add unnecessary overhead (see above)\n-- UNIT_TARGET only fires if boss is targeted or focused (sync'ed below)\nfunction mod:UNIT_TARGET(uId)\n\tif self:GetUnitCreatureId(uId) ~= 36678 then return end\n\t-- Attempt to catch when boss phases by checking for Putricide's target being a raid member\n\tif UnitExists(uId..\"target\") then\n\t\tif self.vb.phase == --[[1.5]]2 then -- new script phases before boss reengage\n\t\t\tself:SendSync(\"ProfessorPhase2\") -- Sync phasing with raid since UNIT_TARGET event requires boss to be target/focus, which not all members do\n\t\telseif self.vb.phase == --[[2.5]]3 then -- new script phases before boss reengage\n\t\t\tself:SendSync(\"ProfessorPhase3\") -- Sync phasing with raid since UNIT_TARGET event requires boss to be target/focus, which not all members do\n\t\telse\n\t\t\tself:UnregisterShortTermEvents()\n\t\t\tDBM:Debug(\"UNIT_TARGET phasing did not work since phase was wrongly set: \" .. self.vb.phase)\n\t\tend\n\tend\nend\n\n--[[function mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(72851) or spellName == GetSpellInfo(73121) then -- Create Concoction (phase 2) or Guzzle Potion (phase 3). Cast Succeeded triggers new phase\n\t\tNextPhase(self)\n\tend\nend]]\n\nfunction mod:OnSync(msg)\n\tif not self:IsInCombat() then return end\n\tif msg == \"ProfessorPhase2\" and self.vb.phase == --[[1.5]]2 then\n\t\t--self:Unschedule(NextPhase)\n\t\t--NextPhase(self)\n\t\tself:UnregisterShortTermEvents()\n\t\tDBM:Debug(\"Putricide (phase 2) re-engaged via UNIT_TARGET sync\")\n\telseif msg == \"ProfessorPhase3\" and self.vb.phase == --[[2.5]]3 then\n\t\t--self:Unschedule(NextPhase)\n\t\t--NextPhase(self)\n\t\tself:UnregisterShortTermEvents()\n\t\tDBM:Debug(\"Putricide (phase 3) re-engaged via UNIT_TARGET sync\")\n\tend\nend\n"
  },
  {
    "path": "DBM-Icecrown/ThePlagueworks/Rotface.lua",
    "content": "local mod\t= DBM:NewMod(\"Rotface\", \"DBM-Icecrown\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(36627)\nmod:SetEncounterID(850)\nmod:SetUsedIcons(1, 2)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 69508 69774 69839\",\n\t\"SPELL_AURA_APPLIED 71208 69760 69558 69674 71224 73022 73023 72272 72273\",\n\t\"SPELL_AURA_APPLIED_DOSE 69558\",\n\t\"SPELL_CAST_SUCCESS 72272 72273\",\n\t\"SPELL_AURA_REMOVED 69674 71224 73022 73023\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal warnSlimeSpray\t\t\t= mod:NewSpellAnnounce(69508, 2)\nlocal warnMutatedInfection\t\t= mod:NewTargetNoFilterAnnounce(69674, 4)\nlocal warnRadiatingOoze\t\t\t= mod:NewSpellAnnounce(69760, 3)\nlocal warnOozeSpawn\t\t\t\t= mod:NewAnnounce(\"WarnOozeSpawn\", 1)\nlocal warnStickyOoze\t\t\t= mod:NewSpellAnnounce(69774, 1)\nlocal warnUnstableOoze\t\t\t= mod:NewStackAnnounce(69558, 2)\nlocal warnVileGas\t\t\t\t= mod:NewTargetAnnounce(72272, 3)\n\nlocal specWarnMutatedInfection\t= mod:NewSpecialWarningYou(69674, nil, nil, nil, 1, 2)\nlocal specWarnStickyOoze\t\t= mod:NewSpecialWarningMove(69774, nil, nil, nil, 1, 2)\nlocal specWarnOozeExplosion\t\t= mod:NewSpecialWarningDodge(69839, nil, nil, nil, 1, 2)\nlocal specWarnSlimeSpray\t\t= mod:NewSpecialWarningSpell(69508, false, nil, nil, 1, 2)--For people that need a bigger warning to move\nlocal specWarnRadiatingOoze\t\t= mod:NewSpecialWarningSpell(69760, \"-Tank\", nil, nil, 1, 2)\nlocal specWarnLittleOoze\t\t= mod:NewSpecialWarning(\"SpecWarnLittleOoze\", false, nil, nil, 1, 2)\nlocal specWarnVileGas\t\t\t= mod:NewSpecialWarningYou(72272, nil, nil, nil, 1, 2, 3) -- Heroic Ability\n\nlocal timerStickyOoze\t\t\t= mod:NewNextTimer(15, 69774, nil, \"Tank\", nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerWallSlime\t\t\t= mod:NewNextTimer(25, 69789) -- Edited.\nlocal timerSlimeSpray\t\t\t= mod:NewNextTimer(20, 69508, nil, nil, nil, 3) -- Some instances, timer is not fixed (cause unknown, but self-corrected on the next timer). (25H Lordaeron 2022/07/09 || 10N Icecrown 2022/08/25 || 25H Lordaeron [2023-08-23]@[20:45:25]) - 20.1, 20.0, 20.0, 20.1, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0 || 20.0, 20.1, 20.0, 20.0 || pull:20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.1, 20.0, 21.4, 18.6, 20.0, 20.0\nlocal timerMutatedInfection\t\t= mod:NewTargetTimer(12, 69674, nil, nil, nil, 5)\nlocal timerOozeExplosion\t\t= mod:NewCastTimer(4, 69839, nil, nil, nil, 2, nil, DBM_COMMON_L.MYTHIC_ICON, nil, 3)\nlocal timerVileGasCD\t\t\t= mod:NewCDTimer(29.1, 72272, nil, nil, nil, 3) -- REVIEW! ~5s variance [29.1-35]? (25H Lordaeron 2022/07/09 || 25H Lordaeron 2022/09/23 || 10H Lordaeron 2022/10/02) \"Vile Gas-72273-npc:36678 = pull:28.9[+2], 1.4, 0.9, 28.5[+1], 0.8, 0.7, 31.7, 2.2[+1], 35.6, 0.1[+3], 38.9, 1.0, 0.8[+1], 30.4, 2.0, 0.9, 30.2, 0.4, 0.1, 33.4, 0.3[+1], 1.5[+1], 38.2\" || \"Vile Gas-72273-npc:36678-1684 = pull:29.1, 1.5[+1], 0.2, 29.9[+2], 1.9, 30.9[+2], 1.4, 33.9[+1], 2.0, 0.7, 29.8[+1], 0.8[+1], 29.6, 1.1[+2], 0.1, 28.4, 0.6, 1.6, 28.8[+1], 0.1, 2.0\" || \"Vile Gas-72273-npc:36678-577 = pull:31.1, 0.1, 0.6, 28.4[+2], 1.3, 29.7[+2], 1.7, 0.1, 36.3[+1], 0.1, 1.2, 32.2, 1.6, 0.6[+1], 30.7, 0.8[+1], 1.5, 31.3, 1.6, 0.9[+1], 27.1, 1.2, 0.4[+2]\"\n\n\nmod:AddRangeFrameOption(10, 72272, \"Ranged\")\nmod:AddSetIconOption(\"InfectionIcon\", 69674, true, 0, {1, 2})\nmod:AddBoolOption(\"TankArrow\", true, nil, nil, nil, nil, 69674)\n\nlocal spamOoze = 0\nmod.vb.InfectionIcon = 1\n\n--[[ local function WallSlime(self)\n\tself:Unschedule(WallSlime)\n\tif self:IsInCombat() then\n\t\ttimerWallSlime:Start()\n\t\tself:Schedule(20, WallSlime, self)\n\tend\nend ]]\n\nfunction mod:OnCombatStart(delay)\n\ttimerWallSlime:Start(9-delay) -- Adjust from 25 to 9 to have a correct timer from the start\n\ttimerSlimeSpray:Start(20-delay) -- Custom add for the first Slime Spray. Log reviewed (25H Lordaeron 2022/07/09) - 20.0\n\tif self:IsHeroic() then\n\t\ttimerVileGasCD:Start(28.9-delay) -- Edited. REVIEW! variance? (25H Lordaeron 2022/07/09 || 25H Lordaeron 2022/09/23) - 28.9 || 29.1\n\tend\n--\tself:Schedule(25-delay, WallSlime, self)\n\tself.vb.InfectionIcon = 1\n\tspamOoze = 0\n\tif self.Options.RangeFrame and self:IsHeroic() then\n\t\tDBM.RangeCheck:Show(10) -- Increased from 8 to 10\n\tend\n\tself:RegisterShortTermEvents(\n\t\t\"SPELL_DAMAGE\", -- unfiltered for DBM arrow\n\t\t\"SPELL_MISSED\", -- unfiltered for DBM arrow\n\t\t\"SWING_DAMAGE\",\n\t\t\"SWING_MISSED\"\n\t)\nend\n\nfunction mod:OnCombatEnd()\n\tself:UnregisterShortTermEvents()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 69508 then\n\t\ttimerSlimeSpray:Start()\n\t\tspecWarnSlimeSpray:Show()\n\t\twarnSlimeSpray:Show()\n\telseif spellId == 69774 then\n\t\ttimerStickyOoze:Start(args.sourceGUID)\n\t\twarnStickyOoze:Show()\n\telseif spellId == 69839 then --Unstable Ooze Explosion (Big Ooze)\n\t\tif GetTime() - spamOoze < 4 then --This will prevent spam but breaks if there are 2 oozes. GUID work is required\n\t\t\tspecWarnOozeExplosion:Cancel()\n\t\t\tspecWarnOozeExplosion:CancelVoice()\n\t\tend\n\t\tif GetTime() - spamOoze < 4 or GetTime() - spamOoze > 5 then --Attempt to ignore a cast that may fire as an ooze is already exploding.\n\t\t\ttimerOozeExplosion:Start()\n\t\t\tspecWarnOozeExplosion:Schedule(4)\n\t\t\tspecWarnOozeExplosion:ScheduleVoice(4, \"watchstep\")\n\t\tend\n\t\tspamOoze = GetTime()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 71208 and args:IsPlayer() then\n\t\tspecWarnStickyOoze:Show()\n\t\tspecWarnStickyOoze:Play(\"runaway\")\n\telseif spellId == 69760 then\n\t\twarnRadiatingOoze:Show()\n\telseif spellId == 69558 then\n\t\twarnUnstableOoze:Show(args.destName, args.amount or 1)\n\telseif args:IsSpellID(69674, 71224, 73022, 73023) then\n\t\ttimerMutatedInfection:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnMutatedInfection:Show()\n\t\t\tspecWarnMutatedInfection:Play(\"movetotank\")\n\t\telse\n\t\t\twarnMutatedInfection:Show(args.destName)\n\t\tend\n\t\tif self.Options.InfectionIcon then\n\t\t\tself:SetIcon(args.destName, self.vb.InfectionIcon, 12)\n\t\tend\n\t\tif self.vb.InfectionIcon == 1 then\t-- After ~3mins there is a chance 2 ppl will have the debuff, so we are alternating between 2 icons\n\t\t\tself.vb.InfectionIcon = 2\n\t\telse\n\t\t\tself.vb.InfectionIcon = 1\n\t\tend\n\telseif args:IsSpellID(72272, 72273) and args:IsDestTypePlayer() then\t-- Vile Gas (Heroic Rotface only)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnVileGas:Show()\n\t\t\tspecWarnVileGas:Play(\"scatter\")\n\t\tend\n\t\twarnVileGas:CombinedShow(2.5, args.destName) -- Yes it does take this long to travel to all 3 targets sometimes, qq.\n\t\tif self:AntiSpam(5, 3) then\n\t\t\ttimerVileGasCD:Start()\n\t\tend\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(72272, 72273) then\n\t\tDBM:AddMsg(\"Vile Gas SPELL_CAST_SUCCESS unhidden from combat log. Notify Zidras on Discord or GitHub\")\n\t\ttimerVileGasCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(69674, 71224, 73022, 73023) then\n\t\ttimerMutatedInfection:Cancel(args.destName)\n\t\twarnOozeSpawn:Show()\n\t\tif self.Options.InfectionIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(sourceGUID, sourceName, sourceFlags, destGUID, _, _, spellId)\n\tif (spellId == 69761 or spellId == 71212 or spellId == 73026 or spellId == 73027) and destGUID == UnitGUID(\"player\") and self:AntiSpam(3, 1) then\n\t\tspecWarnRadiatingOoze:Show()\n\t\tspecWarnRadiatingOoze:Play(\"runaway\")\n\telseif (spellId ~= 53189 or spellId ~= 53190 or spellId ~= 53194 or spellId ~= 53195) and self:GetCIDFromGUID(destGUID) == 36899 and bit.band(sourceFlags, COMBATLOG_OBJECT_TYPE_PLAYER) ~= 0 and self:IsInCombat() then--Any spell damage except for starfall (ranks 3 and 4)\n\t\tif sourceGUID ~= UnitGUID(\"player\") then\n\t\t\tif self.Options.TankArrow then\n\t\t\t\tDBM.Arrow:ShowRunTo(sourceName, 0, 0)\n\t\t\tend\n\t\tend\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\nfunction mod:SWING_DAMAGE(sourceGUID, sourceName, sourceFlags, destGUID)\n\tif self:GetCIDFromGUID(sourceGUID) == 36897 and destGUID == UnitGUID(\"player\") and self:AntiSpam(3, 2) then --Little ooze hitting you\n\t\tspecWarnLittleOoze:Show()\n\t\tspecWarnLittleOoze:Play(\"keepmove\")\n\telseif self:GetCIDFromGUID(destGUID) == 36899 and bit.band(sourceFlags, COMBATLOG_OBJECT_TYPE_PLAYER) ~= 0 and self:IsInCombat() then\n\t\tif sourceGUID ~= UnitGUID(\"player\") then\n\t\t\tif self.Options.TankArrow then\n\t\t\t\tDBM.Arrow:ShowRunTo(sourceName, 0, 0)\n\t\t\tend\n\t\tend\n\tend\nend\nmod.SWING_MISSED = mod.SWING_DAMAGE\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif (msg == L.YellSlimePipes1 or msg:find(L.YellSlimePipes1)) or (msg == L.YellSlimePipes2 or msg:find(L.YellSlimePipes2)) then\n\t\t-- WallSlime(self) -- I can't explain the need for using a scheduling here\n\t\ttimerWallSlime:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Icecrown/Trash.lua",
    "content": "local mod\t= DBM:NewMod(\"ICCTrash\", \"DBM-Icecrown\", 6)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal UnitGUID = UnitGUID\n\nmod:SetRevision(\"20250106224658\")\nmod:SetModelID(37007)\nmod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7, 8)\nmod.isTrashMod = true\n\nmod:RegisterEvents(\n\t\"SPELL_CAST_START 71022 71088 71123 71942\",\n\t\"SPELL_AURA_APPLIED 69483 72865 71127 70451 70432 70645 71785 71298 70475\",\n\t\"SPELL_AURA_APPLIED_DOSE 71127\",\n\t\"SPELL_AURA_REMOVED 70451 70432 70645 71785 71298\",\n\t\"SPELL_SUMMON 71159\",\n\t\"SPELL_DAMAGE 70305\",\n\t\"SPELL_MISSED 70305\",\n\t\"UNIT_DIED\",\n\t\"UNIT_TARGET\", -- currently unfiltered due to CORE not defaulting legacy uIds. Review valkyr code below if Core is changed\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\n--Lower Spire\nlocal warnDisruptingShout\t\t= mod:NewSpellAnnounce(71022, 2)\nlocal warnDarkReckoning\t\t\t= mod:NewTargetNoFilterAnnounce(69483, 3)\nlocal warnDeathPlague\t\t\t= mod:NewTargetNoFilterAnnounce(72865, 4)\n--Plagueworks\nlocal warnZombies\t\t\t\t= mod:NewSpellAnnounce(71159, 2)\nlocal warnMortalWound\t\t\t= mod:NewStackAnnounce(71127, 2, nil, \"Tank|Healer\")\nlocal warnDecimateSoon\t\t\t= mod:NewSoonAnnounce(71123, 3)\n--Crimson Hall\nlocal warnBloodMirror\t\t\t= mod:NewTargetNoFilterAnnounce(70451, 3, nil, \"Healer|Tank\")\nlocal warnBloodSap\t\t\t\t= mod:NewTargetNoFilterAnnounce(70432, 4, nil, \"Healer|Tank\")\nlocal warnChainsofShadow\t\t= mod:NewTargetNoFilterAnnounce(70645, 3, nil, false)\n--Frostwing Hall\nlocal warnConflag\t\t\t\t= mod:NewTargetNoFilterAnnounce(71785, 4, nil, false)\nlocal warnBanish\t\t\t\t= mod:NewTargetNoFilterAnnounce(71298, 3, nil, false)\n\n--Lower Spire\nlocal specWarnDisruptingShout\t= mod:NewSpecialWarningCast(71022)\nlocal specWarnDarkReckoning\t\t= mod:NewSpecialWarningMoveAway(69483)\nlocal specWarnDeathPlague\t\t= mod:NewSpecialWarningYou(72865)\nlocal specWarnTrapL\t\t\t\t= mod:NewSpecialWarning(\"SpecWarnTrapL\")\n--Plagueworks\nlocal specWarnSeveredEssence\t= mod:NewSpecialWarningMove(71942)\nlocal specWarnDecimate\t\t\t= mod:NewSpecialWarningSpell(71123)\nlocal specWarnMortalWound\t\t= mod:NewSpecialWarningStack(71127, \"Tank|Healer\", 6)\nlocal specWarnTrapP\t\t\t\t= mod:NewSpecialWarning(\"SpecWarnTrapP\")\nlocal specWarnBlightBomb\t\t= mod:NewSpecialWarningSpell(71088)\n--Frostwing Hall\nlocal specWarnGosaEvent\t\t\t= mod:NewSpecialWarning(\"SpecWarnGosaEvent\")\nlocal specWarnBlade\t\t\t\t= mod:NewSpecialWarningMove(70305)\n\n--Lower Spire\nlocal timerDisruptingShout\t\t= mod:NewCastTimer(3, 71022, nil, nil, nil, 2)\nlocal timerDarkReckoning\t\t= mod:NewTargetTimer(8, 69483, nil, nil, nil, 5)\nlocal timerDeathPlague\t\t\t= mod:NewTargetTimer(15, 72865, nil, nil, nil, 3)\n--Plagueworks\nlocal timerSeveredEssence\t\t= mod:NewNextTimer(35.5, 71942, nil, nil, nil, 1--[[, nil, nil, true]]) -- REVIEW! 5s variance [35.5-40.5]. Removed \"keep\" arg, due to several edge cases where timer kept ticking to infinity. Until variance is implemented on DBT, this will never be accurate (25H Lordaeron [2023-08-19]@[11:49:20] || 25H Lordaeron [2023-08-27]@[10:41:16]) - 36.0 || 40.49; 35.51\nlocal timerZombies\t\t\t\t= mod:NewNextTimer(20, 71159, nil, nil, nil, 1)\nlocal timerMortalWound\t\t\t= mod:NewTargetTimer(15, 71127, nil, nil, nil, 5)\nlocal timerDecimate\t\t\t\t= mod:NewNextTimer(33, 71123, nil, nil, nil, 2)\nlocal timerBlightBomb\t\t\t= mod:NewCastTimer(5, 71088, nil, nil, nil, 3)\nlocal timerProfessorEvent\t\t= mod:NewRPTimer(90, 70475, nil, nil, nil, 2)\n--Crimson Hall\nlocal timerBloodMirror\t\t\t= mod:NewTargetTimer(30, 70451, nil, \"Healer|Tank\", nil, 5)\nlocal timerBloodSap\t\t\t\t= mod:NewTargetTimer(8, 70432, nil, \"Healer|Tank\", nil, 5)\nlocal timerChainsofShadow\t\t= mod:NewTargetTimer(10, 70645, nil, false, nil, 3)\n--Frostwing Hall\nlocal timerConflag\t\t\t\t= mod:NewTargetTimer(10, 71785, nil, false, nil, 3)\nlocal timerBanish\t\t\t\t= mod:NewTargetTimer(6, 71298, nil, false, nil, 3)\nlocal timerFrostblade\t\t\t= mod:NewNextTimer(26, 70305, nil, nil, nil, 2)\n\nmod:RemoveOption(\"HealthFrame\")\n--Lower Spire\nmod:AddSetIconOption(\"SetIconOnDarkReckoning\", 69483, true, 0, {8})\nmod:AddSetIconOption(\"SetIconOnDeathPlague\", 72865, true, 7, {1, 2, 3, 4, 5, 6, 7, 8})\n--Crimson Hall\nmod:AddSetIconOption(\"BloodMirrorIcon\", 70451, false, 0, {2})\n\nlocal valkyrHeraldGUID = {}\nlocal eventProfessorStarted = false\nmod.vb.nerubarAlive = 16 -- 8 each wave\nmod.vb.frostwardenAlive = 6\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 71022 then\n\t\twarnDisruptingShout:Show()\n\t\tspecWarnDisruptingShout:Show()\n\t\ttimerDisruptingShout:Start()\n\telseif spellId == 71088 then\n\t\tspecWarnBlightBomb:Show()\n\t\ttimerBlightBomb:Start(args.sourceGUID)\n\telseif spellId == 71123 then\n\t\tspecWarnDecimate:Show()\n\t\twarnDecimateSoon:Cancel()\t-- in case the first 1 is inaccurate, you wont have an invalid soon warning\n\t\twarnDecimateSoon:Schedule(28)\n\t\ttimerDecimate:Start()\n\telseif spellId == 71942 then\n\t\tlocal sourceGUID = args.sourceGUID\n\t\tvalkyrHeraldGUID[sourceGUID] = true\n\t\tspecWarnSeveredEssence:Show()\n\t\ttimerSeveredEssence:Start(sourceGUID)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 69483 then\n\t\twarnDarkReckoning:Show(args.destName)\n\t\ttimerDarkReckoning:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnDarkReckoning:Show()\n\t\tend\n\t\tif self.Options.SetIconOnDarkReckoning then\n\t\t\tself:SetIcon(args.destName, 8, 8)\n\t\tend\n\telseif spellId == 72865 then\n\t\twarnDeathPlague:CombinedShow(0.3, args.destName)\n\t\ttimerDeathPlague:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnDeathPlague:Show()\n\t\tend\n\t\tif self.Options.SetIconOnDeathPlague then\n\t\t\tself:SetSortedIcon(\"roster\", 0.3, args.destName, 1, 8, false)\n\t\tend\n\telseif spellId == 71127 then\n\t\tlocal amount = args.amount or 1\n\t\ttimerMortalWound:Start(args.destName)\n\t\tif amount % 2 == 0 then\n\t\t\twarnMortalWound:Show(args.destName, amount)\n\t\t\tif args:IsPlayer() and amount > 5 then\n\t\t\t\tspecWarnMortalWound:Show(amount)\n\t\t\tend\n\t\tend\n\telseif spellId == 70451 and args:IsDestTypePlayer() then\n\t\twarnBloodMirror:CombinedShow(0.3, args.destName)\n\t\ttimerBloodMirror:Start(args.destName)\n\t\tif self.Options.BloodMirrorIcon then\n\t\t\tself:SetSortedIcon(\"roster\", 0.3, args.destName, 2, 2, true)\n\t\tend\n\telseif spellId == 70432 then\n\t\twarnBloodSap:Show(args.destName)\n\t\ttimerBloodSap:Start(args.destName)\n\telseif spellId == 70645 and args:IsDestTypePlayer() then\n\t\twarnChainsofShadow:Show(args.destName)\n\t\ttimerChainsofShadow:Start(args.destName)\n\telseif spellId == 71785 then\n\t\twarnConflag:Show(args.destName)\n\t\ttimerConflag:Start(args.destName)\n\telseif spellId == 71298 then\n\t\twarnBanish:Show(args.destName)\n\t\ttimerBanish:Start(args.destName)\n\telseif spellId == 70475 and not eventProfessorStarted then -- Giant Insect Swarm\n\t\teventProfessorStarted = true\n\t\ttimerProfessorEvent:Start()\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 70451 then\n\t\ttimerBloodMirror:Cancel(args.destName)\n\t\tself:SetIcon(args.destName, 0)\n\telseif spellId == 70432 then\n\t\ttimerBloodSap:Cancel(args.destName)\n\telseif spellId == 70645 then\n\t\ttimerChainsofShadow:Cancel(args.destName)\n\telseif spellId == 71785 then\n\t\ttimerConflag:Cancel(args.destName)\n\telseif spellId == 71298 then\n\t\ttimerBanish:Cancel(args.destName)\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 71159 and self:AntiSpam(5) then\n\t\twarnZombies:Show()\n\t\ttimerZombies:Start()\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, spellId)\n\tif spellId == 70305 and destGUID == UnitGUID(\"player\") and self:AntiSpam() then\n\t\tspecWarnBlade:Show()\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\nfunction mod:UNIT_DIED(args)\n\tlocal destGUID = args.destGUID\n\tlocal cid = self:GetCIDFromGUID(destGUID)\n\tif cid == 37025 then\n\t\twarnDecimateSoon:Cancel()\n\t\ttimerDecimate:Cancel()\n\telseif cid == 37217 then\n\t\ttimerZombies:Cancel()\n\t\twarnDecimateSoon:Cancel()\n\t\ttimerDecimate:Cancel()\n\telseif cid == 10404 then -- Pustulating Horror\n\t\ttimerBlightBomb:Cancel(destGUID)\n\telseif cid == 37098 then -- Val'kyr Herald\n\t\tself:SendSync(\"ValkyrDeaggro\", destGUID) -- would work with just timer cancel method, but switched to sync too since valk table is heavily dependant on syncing, and CLEU has a history of breaking\n\telseif (cid == 37501 or cid == 37502) and self.vb.nerubarAlive > 0 then -- 4 Nerub'ar Champion / 4 Nerub'ar Webweaver (first and third gauntlet wave)\n\t\tself.vb.nerubarAlive = self.vb.nerubarAlive - 1\n\t\tif self.vb.nerubarAlive == 8 then\n\t\t\tDBM:AddSpecialEventToTranscriptorLog(\"Sindra Gauntlet 2nd wave\")\n\t\t\tself.vb.frostwardenAlive = 6\n\t\t\ttimerFrostblade:Start() -- REVIEW! ~26s after last nerubar dies\n\t\telseif self.vb.nerubarAlive == 0 then\n\t\t\tDBM:AddSpecialEventToTranscriptorLog(\"Sindra Gauntlet ended\")\n\t\tend\n\telseif (cid == 37228 or cid == 37229) and self.vb.frostwardenAlive > 0 then -- 4 Frostwarden Warrior / 2 Frostwarden Sorceress\n\t\tself.vb.frostwardenAlive = self.vb.frostwardenAlive - 1\n\t\tif self.vb.frostwardenAlive == 0 then\n\t\t\tDBM:AddSpecialEventToTranscriptorLog(\"Sindra Gauntlet 3rd wave\")\n\t\tend\n\tend\nend\n\ndo\n\tlocal UnitExists = UnitExists\n\tlocal valkGUID\n\tlocal uIdTarget\n\tlocal valkHasTarget\n\tfunction mod:UNIT_TARGET(uId)\n\t\tuIdTarget = uId..\"target\"\n\t\tlocal unitTargetIsValk = self:GetUnitCreatureId(uIdTarget) == 37098\n\t\tlocal unitIsValk =  self:GetUnitCreatureId(uId) == 37098\n\t\tif not unitIsValk and not unitTargetIsValk then return end -- Stop if unit is not Valk or if raid member did not target a Valk\n\n\t\tif unitTargetIsValk then -- Raid member fired this event\n\t\t\tvalkGUID = UnitGUID(uIdTarget)\n\t\t\tvalkHasTarget = UnitExists(uIdTarget..\"target\")\n\n\t\t\tif not valkHasTarget and valkyrHeraldGUID[valkGUID] then\n\t\t\t\tvalkyrHeraldGUID[valkGUID] = nil -- Valk does not have a target -> hasn't aggroed anything or was reset\n\t\t\t\tself:SendSync(\"ValkyrDeaggro\", valkGUID)\n\t\t\t\tDBM:Debug(\"Valkyr Herald \\'\" .. valkGUID .. \"\\' was reset\")\n\t\t\tend\n\t\t\tif valkHasTarget and not valkyrHeraldGUID[valkGUID] then\n\t\t\t\tvalkyrHeraldGUID[valkGUID] = true -- Valkyr already had a raid target at the time of this check, meaning it was aggroed before, so prevent it from sending an aggro sync since timer would be innacurate.\n\t\t\t\tDBM:Debug(\"Valkyr Herald \\'\" .. valkGUID .. \"\\' already had aggro!\")\n\t\t\tend\n\t\t\treturn -- rest of code does not need to run, so return here\n\t\tend\n\n\t\tif unitIsValk then -- Valk fired this event\n\t\t\tvalkGUID = UnitGUID(uId)\n\t\t\tvalkHasTarget = UnitExists(uIdTarget)\n\t\t\tif not valkHasTarget and valkyrHeraldGUID[valkGUID] then\n\t\t\t\tvalkyrHeraldGUID[valkGUID] = nil -- Valk does not have a target -> hasn't aggroed anything or was reset\n\t\t\t\tself:SendSync(\"ValkyrDeaggro\", valkGUID)\n\t\t\t\tDBM:Debug(\"Valkyr Herald \\'\" .. valkGUID .. \"\\' was reset\")\n\t\t\tend\n\t\t\tif valkHasTarget and not valkyrHeraldGUID[valkGUID] then\n\t\t\t\tvalkyrHeraldGUID[valkGUID] = true -- duplicated from the OnSync handler, to prevent this code from running twice, as well as to workaround antispam measures\n\t\t\t\tself:SendSync(\"ValkyrAggro\", valkGUID)\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif (msg == L.WarderTrap1 or msg == L.WarderTrap2 or msg == L.WarderTrap3) and self:LatencyCheck() then\n\t\tself:SendSync(\"WarderTrap\")\n\telseif (msg == L.FleshreaperTrap1 or msg == L.FleshreaperTrap2 or msg == L.FleshreaperTrap3) and self:LatencyCheck() then\n\t\tself:SendSync(\"FleshTrap\")\n\telseif msg == L.SindragosaEvent and self:LatencyCheck() then\n\t\tself:SendSync(\"GauntletStart\")\n\tend\nend\n\nfunction mod:OnSync(msg, guid)\n\tif msg == \"WarderTrap\" then\n\t\tspecWarnTrapL:Show()\n\telseif msg == \"FleshTrap\" then\n\t\tspecWarnTrapP:Show()\n\telseif msg == \"GauntletStart\" then\n\t\tDBM:AddSpecialEventToTranscriptorLog(\"Sindra Gauntlet started\")\n\t\tspecWarnGosaEvent:Show()\n\t\tself.vb.nerubarAlive = 8\n\telseif msg == \"ValkyrAggro\" and guid then\n\t\tvalkyrHeraldGUID[guid] = true\n\t\ttimerSeveredEssence:Start(8, guid) -- REVIEW! variance [8-10]? On Warmane, based on aggro, touchdown or swing?\n\telseif msg == \"ValkyrDeaggro\" and guid then\n\t\tvalkyrHeraldGUID[guid] = nil\n\t\ttimerSeveredEssence:Cancel(guid)\n\tend\nend\n"
  },
  {
    "path": "DBM-Icecrown/localization.cn.lua",
    "content": "if GetLocale() ~= \"zhCN\" then return end\nlocal L\n----------------------\n--  Lord Marrowgar  --\n----------------------\nL = DBM:GetModLocalization(\"LordMarrowgar\")\n\nL:SetGeneralLocalization({\n\tname = \"玛洛加尔领主\"\n})\n\n-------------------------\n--  Lady Deathwhisper  --\n-------------------------\nL = DBM:GetModLocalization(\"Deathwhisper\")\n\nL:SetGeneralLocalization({\n\tname = \"亡语者女士\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds = \"新的小怪\"\n})\n\nL:SetWarningLocalization({\n\tWarnReanimating = \"小怪再活化\",\n\tWarnAddsSoon = \"新的小怪即将到来\",\n\tSpecWarnVengefulShade = \"怨毒之影目标是你 - 快躲开\", --creatureid 38222 -- Modified by Emi\n\tWeaponsStatus = \"自动卸下武器开启: %s (%s - %s)\" -- Modified by Emi\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon = \"为新的小怪出现显示预先警告\",\n\tWarnReanimating = \"当小怪再活化时显示警告\",\n\tTimerAdds = \"为新的小怪显示计时器\",\n\tSpecWarnVengefulShade = \"当怨毒之影攻击你时显示特殊警报\", -- Modified by Emi\n\tWeaponsStatus = \"如果卸下/装备武器功能启用，在战斗开始时显示特殊警报\", -- Modified by Emi\n\tShieldHealthFrame = \"显示 Boss 血条，并为 $spell:70842 显示专门血条\", -- Modified by Emi\n\tSoundWarnCountingMC = \"为心灵控制播放5秒声音倒数\", -- Modified by Emi\n--\tRemoveDruidBuff = \"Remove $spell:48469 / $spell:48470 24 seconds into the fight\",\n\tRemoveBuffsOnMC = \"当$spell:71289对你施法时，移除BUFF。每个选项都是累积的。\",\n\tGift = \"移除$spell:48469 / $spell:48470。防止$spell:33786抵制的最简单方法。\",\n\tCCFree = \"+ 删除$spell:48169 / $spell:48170。考虑到阴影法术的抵抗。\", -- Modified by Emi\n\tShortOffensiveProcs = \"+ 删除持续时间短的攻击性程序。建议在不影响突击队伤害输出的情况下保证团队的安全。\", -- Modified by Emi\n\tMostOffensiveBuffs = \"+ 移除大部分攻击性BUFF（主要针对施法者和|cFFFF7C0A野性德鲁伊|r）。在损失伤害输出和需要自我补血/移形换影的情况下，最大限度地保证了团队的安全！\", -- Modified by Emi\n\tEqUneqWeapons = \"如果$spell:71289 对你施放，自动卸下/装备武器。要使这一功能正常工作，请创建一个名为\\\"pve\\\"的完整套装（要包含你需要装备的武器）。\", -- Modified by Emi\n\tEqUneqTimer = \"不论目标是否是你，总是按照心控计时卸下/装备武器（建议在高延迟时使用）。必须在前一选项开启的情况下使用。\" -- Modified by Emi\n})\n\nL:SetMiscLocalization({\n\tYellReanimatedFanatic = \"来吧，为纯粹的形态欢喜吧！\",\n--\tFanatic1 = \"教派狂热者\",\n--\tFanatic2 = \"畸形的狂热者\",\n--\tFanatic3 = \"被复活的狂热者\",\n\tsetMissing = \"注意力！ 在您创建名为 pve 的装备集之前，DBM 自动武器卸载/装备将不起作用\",\n\tEqUneqLineDescription\t= \"自动装备/取消装备\"\n})\n\n----------------------\n--  Gunship Battle  --\n----------------------\nL = DBM:GetModLocalization(\"GunshipBattle\")\n\nL:SetGeneralLocalization({\n\tname = \"冰冠炮舰战斗\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsSoon = \"新的小怪即将到来\"\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon = \"为新的小怪出现显示预先警告\",\n\tTimerAdds = \"为新的小怪显示计时器\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds = \"新的小怪\"\n})\n\nL:SetMiscLocalization({\n\tPullAlliance = \"启动引擎！小伙子们，向命运之战前进！\",\n\tPullHorde = \"来吧！部落忠诚勇敢的儿女们！今天是部落仇敌灭亡的日子！LOK'TAR OGAR！\",\n\tAddsAlliance = \"将士们，给我进攻！\",\n\tAddsHorde = \"将士们，给我进攻！\",\n\tMageAlliance = \"我们的船体受损了，赶快叫个战斗法师来轰掉那些大炮！\",\n\tMageHorde = \"我们的船体受伤了，赶快叫个法师来干掉那些大炮！\",\n\tKillAlliance = \"我早就警告过你，恶棍！兄弟姐妹们，前进！\",\n\tKillHorde = \"联盟不行了。向巫妖王进攻！\",\n})\n\n-----------------------------\n--  Deathbringer Saurfang  --\n-----------------------------\nL = DBM:GetModLocalization(\"Deathbringer\")\n\nL:SetGeneralLocalization({\n\tname = \"死亡使者萨鲁法尔\"\n})\n\nL:SetOptionLocalization({\n\tRunePowerFrame = \"显示首领血量及$spell:72371条\",\n--\tRemoveDI = \"如果用于阻止 $spell:72293 施法，则清除 $spell:19752\"\n})\n\nL:SetMiscLocalization({\n\tRunePower = \"鲜血能量\",\n\tPullAlliance = \"你每消灭一名部落士兵，或是杀死一只联盟狗。巫妖王的军力就会增长一分。瓦格里正在把你们的阵亡者变为天灾战士。\",\n\tPullHorde = \"库卡隆，行动！勇士们，提高警惕。天灾军团已经……\"\n})\n\n-----------------\n--  Festergut  --\n-----------------\nL = DBM:GetModLocalization(\"Festergut\")\n\nL:SetGeneralLocalization({\n\tname = \"烂肠\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceSporeIcons = \"公布$spell:69279目标设置的标记到团队频道<br/>(需要团队队长)\",\n\tAchievementCheck = \"公布 '勤通风，多喝水' 成就失败到团队频道<br/>(需助理权限)\" -- Modified by Emi\n})\n\nL:SetMiscLocalization({\n\tSporeSet = \"气体孢子{rt%d}: %s\",\n\tAchievementFailed = \">> 成就失败: %s中了%d层孢子 <<\"\n})\n\n---------------\n--  Rotface  --\n---------------\nL = DBM:GetModLocalization(\"Rotface\")\n\nL:SetGeneralLocalization({\n\tname = \"腐面\"\n})\n\nL:SetWarningLocalization({\n\tWarnOozeSpawn = \"小软泥怪出现了\",\n\tSpecWarnLittleOoze = \"你被小软泥怪盯上了 - 快跑开\"\n})\n\nL:SetOptionLocalization({\n\tWarnOozeSpawn = \"为小软泥的出现显示警告\",\n\tSpecWarnLittleOoze = \"当你被小软泥怪盯上时显示特別警告\",\n\tTankArrow = \"为软泥坦克显示DBM箭头（测试功能）\" -- Modified by Emi\n})\n\nL:SetMiscLocalization({\n\tYellSlimePipes1 = \"好消息！各位！我修好了毒性软泥管道！\",\n\tYellSlimePipes2 = \"重大喜讯！各位！软泥又开始流动啦！\"\n})\n\n---------------------------\n--  Professor Putricide  --\n---------------------------\nL = DBM:GetModLocalization(\"Putricide\")\n\nL:SetGeneralLocalization({\n\tname = \"普崔塞德教授\"\n})\n\nL:SetWarningLocalization({\n\tWarnReengage = \"%s: 重新激活\" -- more accurate translation\n})\n\nL:SetTimerLocalization({\n\tTimerReengage = \"重新激活\" -- more accurate translation\n})\n\nL:SetOptionLocalization({\n\tWarnReengage = \"为Boss重新激活显示警告\",\n\tTimerReengage = \"为Boss重新激活显示计时器\"\n})\n\nL:SetMiscLocalization({\n\tYellTransform1 = \"嗯，什么感觉也没有。什么？！这是哪儿来的？\",\n\tYellTransform2 = \"味道像……樱桃！哦！见笑了！\"\n})\n\n----------------------------\n--  Blood Prince Council  --\n----------------------------\nL = DBM:GetModLocalization(\"BPCouncil\")\n\nL:SetGeneralLocalization({\n\tname = \"血王子议会\"\n})\n\nL:SetWarningLocalization({\n\tWarnTargetSwitch = \"转换目标到: %s\",\n\tWarnTargetSwitchSoon = \"转换目标即将到来\"\n})\n\nL:SetTimerLocalization({\n\tTimerTargetSwitch = \"转换目标\"\n})\n\nL:SetOptionLocalization({\n\tWarnTargetSwitch = \"为转换目标显示警告\",\n\tWarnTargetSwitchSoon = \"为转换目标显示临近警告\", -- Modified by Emi\n\tTimerTargetSwitch = \"为转换目标显示计时器\", -- more accurate translation\n\tActivePrinceIcon = \"在強化的王子身上设置标记(骷髅)\", -- Modified by Emi\n\tShadowPrisonMetronome = \"播放一个重复的1秒钟的点击声，以避免$spell:72999\"\n})\n\nL:SetMiscLocalization({\n\tKeleseth = \"凯雷塞斯王子\",\n\tTaldaram = \"塔达拉姆王子\",\n\tValanar = \"瓦拉纳王子\",\n\tFirstPull = \"愚蠢的凡人。你以为能轻易打败我们？萨莱因是巫妖王永生的战士！现在他们将合力撕碎你！\",\n\tEmpoweredFlames = \"强能烈焰飞快地冲向(%S+)！\"\n})\n\n-----------------------------\n--  Blood-Queen Lana'thel  --\n-----------------------------\nL = DBM:GetModLocalization(\"Lanathel\")\n\nL:SetGeneralLocalization({\n\tname = \"鲜血女王兰娜瑟尔\"\n})\n\nL:SetMiscLocalization({\n\tSwarmingShadows = \"蜂拥的阴影在(%S+)的四周积聚！\",\n\tYellFrenzy = \"我该去咬人啦!\"\n})\n\n-----------------------------\n--  Valithria Dreamwalker  --\n-----------------------------\nL = DBM:GetModLocalization(\"Valithria\")\n\nL:SetGeneralLocalization({\n\tname = \"踏梦者瓦莉瑟瑞娅\"\n})\n\nL:SetWarningLocalization({\n\tWarnPortalOpen = \"传送门开启\"\n})\n\nL:SetTimerLocalization({\n\tTimerPortalsOpen = \"传送门开启\",\n\tTimerPortalsClose = \"传送门关闭\", -- Modified by Emi\n\tTimerBlazingSkeleton = \"下一次炽热骷髅\",\n\tTimerAbom = \"下一次憎恶体 (%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPortalOpen = \"当梦魇之门开启时显示警告\",\n\tTimerPortalsOpen = \"为梦魇之门开启显示计时器\", -- Modified by Emi\n\tTimerPortalsClose = \"为梦魇之门关闭显示计时器\", -- Modified by Emi\n\tTimerBlazingSkeleton = \"为下一次炽热骷髅出现显示计时器\"\n})\n\nL:SetMiscLocalization({\n\tYellPull = \"入侵者闯入了内室。加紧毁掉那条绿龙！留下龙筋龙骨用来复生！\",\n\tYellPortals = \"我打开了进入梦境的传送门。英雄们，救赎就在其中……\",\n})\n\n------------------\n--  Sindragosa  --\n------------------\nL = DBM:GetModLocalization(\"Sindragosa\")\n\nL:SetGeneralLocalization({\n\tname = \"辛达苟萨\"\n})\n\nL:SetWarningLocalization({\n\tWarnAirphase = \"空中阶段\",\n\tWarnGroundphaseSoon = \"辛达苟萨 即将着陆\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextAirphase = \"下一次空中阶段\",\n\tTimerNextGroundphase = \"下一次地上阶段\",\n\tAchievementMystic = \"清除秘能连击叠加\"\n})\n\nL:SetOptionLocalization({\n\tWarnAirphase = \"提示空中阶段\",\n\tWarnGroundphaseSoon = \"为地上阶段显示预先警告\",\n\tTimerNextAirphase = \"为下一次 空中阶段显示计时器\",\n\tTimerNextGroundphase = \"为下一次 地上阶段显示计时器\",\n\tAnnounceFrostBeaconIcons = \"公布$spell:70126目标设置的标记到团队频道<br/>(需要团队队长)\",\n\tClearIconsOnAirphase = \"空中阶段前清除所有标记\",\n\tAssignWarnDirectionsCount = \"为 $spell:70126 目标分配方向并在第 2 阶段进行计数\",\n\tAchievementCheck = \"公布 '极限' 成就警告到团队频道<br/>(需助理权限)\", -- Modified by Emi\n\tRangeFrame = \"根据最后首领使用的技能跟玩家减益显示动态距离框(10/20码)\"\n})\n\nL:SetMiscLocalization({\n\tYellAirphase = \"你们的入侵结束了！无人可以生还！\",\n\tYellPhase2 = \"绝望吧，体会主人那无穷无尽的力量吧！\",\n\tYellAirphaseDem = \"Rikk zilthuras rikk zila Aman adare tiriosh \", --Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tYellPhase2Dem = \"Zar kiel xi romathIs zilthuras revos ruk toralar \", --Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tBeaconIconSet = \"冰霜道标{rt%d}: %s\",\n\tAchievementWarning = \"警告: %s中了5层秘法打击\",\n\tAchievementFailed = \">> 成就失败: %s中了%d层秘法打击 <<\"\n})\n\n---------------------\n--  The Lich King  --\n---------------------\nL = DBM:GetModLocalization(\"LichKing\")\n\nL:SetGeneralLocalization({\n\tname = \"巫妖王\"\n})\n\nL:SetWarningLocalization({\n\tValkyrWarning = \"%s >%s< %s 被抓住了!\",\n\tSpecWarnYouAreValkd = \"你被抓住了\",\n\tWarnNecroticPlagueJump = \"死疽跳到>%s<身上\", -- Modified by Emi\n\tSpecWarnValkyrLow = \"瓦基里安血量低于55%\"\n})\n\nL:SetTimerLocalization({\n\tTimerRoleplay = \"角色扮演\",\n\tPhaseTransition = \"转换阶段\",\n\tTimerNecroticPlagueCleanse = \"驱散死疽\" -- Modified by Emi\n})\n\nL:SetOptionLocalization({\n\tTimerRoleplay = \"为角色扮演事件显示计时器\",\n\tWarnNecroticPlagueJump = \"提示$spell:73912跳跃后的目标\",\n\tTimerNecroticPlagueCleanse = \"为驱散第一层死疽显示计时器\", -- Modified by Emi\n\tPhaseTransition = \"为转换阶段显示计时器\",\n\tValkyrWarning = \"提示谁给瓦格里暗影戒卫者抓住了\", -- Modified by Emi\n\tSpecWarnYouAreValkd = \"当你给瓦格里暗影戒卫者抓住时显示特別警告\", -- Modified by Emi\n\tAnnounceValkGrabs = \"提示谁被瓦格里暗影戒卫者抓住到团队频道<br/>(需开启团队广播及助理权限)\", -- Modified by Emi\n\tSpecWarnValkyrLow = \"当瓦格里血量低于55%时显示特別警告\", -- Modified by Emi\n\tAnnouncePlagueStack = \"提示$spell:73912层数到团队频道 (10层, 10层后每5层提示一次)<br/>(需开启助理权限)\",\n\tShowFrame = \"显示瓦格里者抓人框架\", -- Modified by Emi\n\tFrameClassColor = \"在瓦格里者抓人框架中显示职业颜色\", -- Modified by Emi\n\tFrameUpwards = \"瓦格里框架向上生长\", -- Modified by Emi\n\tFrameLocked = \"锁定瓦格里框架\", -- Modified by Emi\n\tRemoveImmunes = \"在离开霜之哀伤时移除无敌类Buff\" -- Modified by Emi\n})\n\nL:SetMiscLocalization({\n\tLKPull = \"怎么，自诩正义的圣光终于来了？我是不是该丢下霜之哀伤，恳求您的宽恕呢，弗丁？\",\n\tLKRoleplay = \"真的是正义在驱使你吗？我很好奇……\",\n\tValkGrabbedIcon = \"瓦格里影卫{rt%d}抓住了%s\",\n\tValkGrabbed = \"瓦格里影卫抓住了%s\",\n\tPlagueStackWarning = \"警告: %s中了%d层死疽\", -- Modified by Emi\n\tAchievementCompleted = \">> 成就成功: %s中了%d层死疽 <<\", -- Modified by Emi\n\tFrameTitle = \"瓦格里目标\", -- Modified by Emi\n\tFrameLock = \"框架锁定\", -- Modified by Emi\n\tFrameClassColor = \"显示职业颜色\", -- Modified by Emi\n\tFrameOrientation = \"向上生长\", -- Modified by Emi\n\tFrameHide = \"隐藏框架\", -- Modified by Emi\n\tFrameClose = \"关闭\", -- Modified by Emi\n\tFrameGUIDesc = \"瓦格里框架\",\n\tFrameGUIMoveMe = \"移动瓦格里框架\"\n})\n\n-------------\n--  Trash  --\n-------------\nL = DBM:GetModLocalization(\"ICCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"冰冠堡垒小怪\" -- Modified by Emi\n})\n\nL:SetWarningLocalization({\n\tSpecWarnTrapL = \"触发陷阱! - 亡缚守卫被释放了\",\n\tSpecWarnTrapP = \"触发陷阱! - 复仇的血肉收割者到来\",\n\tSpecWarnGosaEvent = \"辛达苟萨夹道攻击开始!\"\n})\n\nL:SetOptionLocalization({\n\tSpecWarnTrapL = \"当触发陷阱时显示特別警告\",\n\tSpecWarnTrapP = \"当触发陷阱时显示特別警告\",\n\tSpecWarnGosaEvent = \"为辛达苟萨夹道攻击显示特別警告\"\n})\n\nL:SetMiscLocalization({\n\tWarderTrap1 = \"那里是谁？\",\n\tWarderTrap2 = \"我醒了!\",\n\tWarderTrap3 = \"有人闯进了主人的房间！\",\n\tFleshreaperTrap1 = \"快点，我们会在背后伏击他们！\",\n\tFleshreaperTrap2 = \"你逃不出我们的手心！\",\n\tFleshreaperTrap3 = \"这里有活人？！\",\n\tSindragosaEvent = \"绝不能让他们靠近冰霜女王。快，阻止他们！\"\n})\n"
  },
  {
    "path": "DBM-Icecrown/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\n\nlocal L\n\n----------------------\n--  Lord Marrowgar  --\n----------------------\nL = DBM:GetModLocalization(\"LordMarrowgar\")\n\nL:SetGeneralLocalization({\n\tname = \"Lord Mark'gar\"\n})\n\n-------------------------\n--  Lady Deathwhisper  --\n-------------------------\nL = DBM:GetModLocalization(\"Deathwhisper\")\n\nL:SetGeneralLocalization({\n\tname = \"Lady Todeswisper\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t= \"Neue Adds\"\n})\n\nL:SetWarningLocalization({\n\tWarnReanimating\t\t\t\t= \"Add-Wiederbelebung\",\t-- Reanimating an adherent or fanatic\n\tWarnAddsSoon\t\t\t\t= \"Neue Adds bald\",\n\tSpecWarnVengefulShade\t\t= \"Rachsüchtiger Schatten greift dich an - Lauf\",--creatureid 38222\n\tWeaponsStatus\t\t\t\t= \"Automatisches Entwaffnen aktiv: %s (%s - %s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon\t\t\t\t= \"Zeige Vorwarnung für erscheinende Adds\",\n\tWarnReanimating\t\t\t\t= \"Zeige Warnung, wenn ein Add wiederbelebt wird\",\t-- Reanimated Adherent/Fanatic spawning\n\tTimerAdds\t\t\t\t\t= \"Zeige Zeit bis neue Adds erscheinen\",\n\tSpecWarnVengefulShade\t\t= \"Zeige Spezialwarnung, wenn du von Rachsüchtigen Schatten angegriffen wirst\",--creatureid 38222\n\tWeaponsStatus\t\t\t\t= \"Zeige Spezialwarnung bei Kampfbeginn, wenn automatisches Be-/Entwaffnen aktiviert ist\",\n\tShieldHealthFrame\t\t\t= \"Zeige Bossleben mit einer Leiste für $spell:70842\",\n\tSoundWarnCountingMC\t\t\t= \"5 Sekunden Cooldown abspielen für Gedankenkontrolle\",\n--\tRemoveDruidBuff\t\t\t\t= \"Entferne $spell:48469 / $spell:48470 24 Sekunden nach Kampfbeginn\",\n\tRemoveBuffsOnMC\t\t\t\t= \"Entferne Buffs, wenn $spell:71289 auf dich gewirkt wird. Jede Option ist komulativ.\",\n\tGift\t\t\t\t\t\t= \"+ Entferne $spell:48469 / $spell:48470. Notwendig, um $spell:33786 nicht zu widerstehen.\",\n\tCCFree\t\t\t\t\t\t= \"+ Entferne $spell:48169 / $spell:48170. Berücksichtige die Widerstände von Zaubern der Schattenschule.\",\n\tShortOffensiveProcs\t\t\t= \"+ Entferne offensive Procs, die eine geringe Dauer haben. Empfohlen für die Sicherheit des Schlachtzugs, ohne Auswirkungen auf den Gesamtschaden des Raids\",\n\tMostOffensiveBuffs\t\t\t= \"+ Entfernt die meisten offensiven Buffs (hauptsächlich für Zauberwirkende und Wilder-Kampf Druiden. Maximale Schlachtzugsicherheit, Maximale Schadensreduktion, benötigt selbstständiges rebuffen/gestaltenwechsel\",\n\tEqUneqWeapons\t\t\t\t= \"Be-/Entwaffnen, wenn $spell:71289 auf MICH wirkt. Funktioniert nur, wenn ein Ausrüstungsset mit dem Namen \\\"pve\\\" existiert (mit angelegten Waffen).\",\n\tEqUneqTimer\t\t\t\t\t= \"Entwaffnen IMMER nach Timer, nicht erst bei Gedankenkontrolle (bei höherer Latenz). Die obere Funktion muss aktiviert sein\"\n})\n\nL:SetMiscLocalization({\n\tYellReanimatedFanatic\t= \"Erhebt Euch und frohlocket ob Eurer reinen Form!\",\n\tShieldPercent\t\t\t= \"Manabarriere\", --Translate Spell id 70842\n--\tFanatic1\t\t\t\t= \"Fanatischer Kultist\",\n--\tFanatic2\t\t\t\t= \"Deformierter Fanatiker\",\n--\tFanatic3\t\t\t\t= \"Wiederbelebter Fanatiker\",\n\tsetMissing\t\t\t\t= \"ACHTUNG! Das automatische Be-/Entwaffnen funktioniert erst, wenn Sie ein Ausrüstungsset namens *pve* erstellt haben\",\n\tEqUneqLineDescription\t= \"Automatisches An-/Ablegen\"\n})\n\n----------------------\n--  Gunship Battle  --\n----------------------\nL = DBM:GetModLocalization(\"GunshipBattle\")\n\nL:SetGeneralLocalization({\n\tname = \"Luftschlacht um die Eiskronenzitadelle\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsSoon\t= \"Neue Adds bald\"\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon\t\t= \"Zeige Vorwarnung für erscheinende Adds\",\n\tTimerAdds\t\t\t= \"Zeige Zeit bis neue Adds erscheinen\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t\t\t= \"Neue Adds\"\n})\n\nL:SetMiscLocalization({\n\tPullAlliance\t= \"Alle Maschinen auf Volldampf! Unser Schicksal erwartet uns!\",\n\tPullHorde\t\t= \"Erhebt Euch, Söhne und Töchter der Horde! Wir ziehen gegen einen verhassten Feind in die Schlacht! LOK'TAR OGAR!\",\n\tAddsAlliance\t= \"Häscher, Unteroffiziere, Angriff!\",\n\tAddsHorde\t\t= \"Soldaten! Zum Angriff!\",\n\tMageAlliance\t= \"Der Rumpf ist beschädigt! Holt einen Kampfmagier, der die Kanonen ausschaltet!\",\n\tMageHorde\t\t= \"Die Außenhaut ist beschädigt! Holt einen Zauberer, der die Kanonen ausschaltet!\",\n\tKillAlliance\t= \"Sagt nicht, ich hätte Euch nicht gewarnt, Ihr Schurken! Vorwärts, Brüder und Schwestern!\",\n\tKillHorde\t\t= \"Die Allianz wankt. Vorwärts zum Lichkönig!\",\n})\n\n-----------------------------\n--  Deathbringer Saurfang  --\n-----------------------------\nL = DBM:GetModLocalization(\"Deathbringer\")\n\nL:SetGeneralLocalization({\n\tname = \"Todesbringer Saurfang\"\n})\n\nL:SetOptionLocalization({\n\tRunePowerFrame\t\t= \"Zeige Boss-Leben und Leiste für $spell:72371\",\n--\tRemoveDI\t\t\t= \"Entferne $spell:19752, wenn es verwendet wird, um das Wirken von $spell:72293 zu verhindern.\"\n})\n\nL:SetMiscLocalization({\n\tRunePower\t\t\t= \"Blutmacht\",\n\tPullAlliance\t\t= \"Mit jedem Krieger der Horde, den Ihr getötet habt, mit jedem dieser Allianzhunde, der fiel, wuchsen die Armeen des Lichkönigs. Selbst in diesem Moment erwecken die Val'kyr Eure Gefallenen als Diener der Geißel.\",\n\tPullHorde\t\t\t= \"Kor'kron, Aufbruch! Champions, gebt Acht. Die Geißel ist...\"\n})\n\n-----------------\n--  Festergut  --\n-----------------\nL = DBM:GetModLocalization(\"Festergut\")\n\nL:SetGeneralLocalization({\n\tname = \"Fauldarm\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceSporeIcons\t= \"Verkünde Zeichen für Ziele von $spell:69279 im Schlachtzugchat (nur als Leiter)\",\n\tAchievementCheck\t= \"Verkünde Fehlschlag des Erfolgs 'Grippeimpfungs-Engpass' an Schlachtzug (nur als Leiter/Assistent)\"\n})\n\nL:SetMiscLocalization({\n\tSporeSet\t\t\t= \"Gassporenzeichen {rt%d} auf %s gesetzt\",\n\tAchievementFailed\t= \">> ERFOLG FEHLGESCHLAGEN: %s hat %d Stapel von Geimpft <<\"\n})\n\n---------------\n--  Rotface  --\n---------------\nL = DBM:GetModLocalization(\"Rotface\")\n\nL:SetGeneralLocalization({\n\tname = \"Modermiene\"\n})\n\nL:SetWarningLocalization({\n\tWarnOozeSpawn\t\t\t\t= \"Kleiner Schlamm erscheint\",\n\tSpecWarnLittleOoze\t\t\t= \"Kleiner Schlamm greift dich an - Lauf weg!\"--creatureid 36897\n})\n\nL:SetOptionLocalization({\n\tWarnOozeSpawn\t\t\t\t= \"Zeige Warnung für Erscheinen eines Kleinen Schlamm\",\n\tSpecWarnLittleOoze\t\t\t= \"Spezialwarnung, wenn du von einem Kleinen Schlamm angegriffen wirst\",--creatureid 36897\n\tTankArrow\t\t\t\t\t= \"Zeige Pfeil zum Tank des Großen Schlamms (experimentell)\",\n})\n\nL:SetMiscLocalization({\n\tYellSlimePipes1\t\t\t\t= \"Gute Nachricht, Freunde! Die Giftschleim-Rohre sind repariert!\",\t-- Professor Putricide\n\tYellSlimePipes2\t\t\t\t= \"Gute Nachricht, Freunde! Der Schleim fließt wieder!\"\t-- Professor Putricide\n})\n\n---------------------------\n--  Professor Putricide  --\n---------------------------\nL = DBM:GetModLocalization(\"Putricide\")\n\nL:SetGeneralLocalization({\n\tname = \"Professor Seuchenmord\"\n})\n\nL:SetWarningLocalization({\n\tWarnReengage\t\t\t= \"%s: Erneuter Angriff\"\n})\n\nL:SetTimerLocalization({\n\tTimerReengage\t\t\t= \"Erneuter Angriff\"\n})\n\nL:SetOptionLocalization({\n\tWarnReengage\t\t\t= \"Zeige Warnung für erneuten Angriff\",\n\tTimerReengage\t\t\t= \"Zeige Zeit bis erneuten Angriff\"\n})\n\nL:SetMiscLocalization({\n\tYellTransform1\t\t\t= \"Hm, ich spüre gar nichts. Nanu?! Wo kommen die denn her?\",\n\tYellTransform2\t\t\t= \"Schmeckt nach... Kirsche! OH! Verzeihung!\"\n})\n\n----------------------------\n--  Blood Prince Council  --\n----------------------------\nL = DBM:GetModLocalization(\"BPCouncil\")\n\nL:SetGeneralLocalization({\n\tname = \"Rat des Blutes\"\n})\n\nL:SetWarningLocalization({\n\tWarnTargetSwitch\t\t= \"Ziel wechseln auf: %s\",\n\tWarnTargetSwitchSoon\t= \"Zielwechsel bald\"\n})\n\nL:SetTimerLocalization({\n\tTimerTargetSwitch\t\t= \"Zielwechsel\"\n})\n\nL:SetOptionLocalization({\n\tWarnTargetSwitch\t\t= \"Zeige Warnung für Zielwechsel\",-- Warn when another Prince needs to be damaged\n\tWarnTargetSwitchSoon\t= \"Zeige Vorwarnung für Zielwechsel\",-- Every ~47 secs, you have to dps a different Prince\n\tTimerTargetSwitch\t\t= \"Zeige Zeit bis Zielwechsel\",\n\tActivePrinceIcon\t\t= \"Setze Zeichen auf den machterfüllten Prinzen (Totenkopf)\",\n\tShadowPrisonMetronome\t= \"Einen sich wiederholenden 1-Sekunden-Klickton abspielen, um $spell:72999 zu vermeiden\"\n})\n\nL:SetMiscLocalization({\n\tKeleseth\t\t\t= \"Prinz Keleseth\",\n\tTaldaram\t\t\t= \"Prinz Taldaram\",\n\tValanar\t\t\t\t= \"Prinz Valanar\",\n\tFirstPull\t\t\t= \"Törichte Sterbliche. Ihr glaubt, wir wären so einfach besiegt? Die San'layn sind die unsterblichen Soldaten des Lichkönigs! Seht nun ihre vereinte Macht!\",\n\tEmpoweredFlames\t\t= \"Machtvolle Flammen rasen auf (%S+) zu!\"\n})\n\n-----------------------------\n--  Blood-Queen Lana'thel  --\n-----------------------------\nL = DBM:GetModLocalization(\"Lanathel\")\n\nL:SetGeneralLocalization({\n\tname = \"Blutkönigin Lana'thel\"\n})\n\nL:SetMiscLocalization({\n\tSwarmingShadows\t\t\t= \"Schatten sammeln sich und schwärmen um (%S+)!\",\n\tYellFrenzy\t\t\t\t= \"Ich habe Durst!\"\n})\n\n-----------------------------\n--  Valithria Dreamwalker  --\n-----------------------------\nL = DBM:GetModLocalization(\"Valithria\")\n\nL:SetGeneralLocalization({\n\tname = \"Valithria Traumwandler\"\n})\n\nL:SetWarningLocalization({\n\tWarnPortalOpen\t= \"Portale offen\"\n})\n\nL:SetTimerLocalization({\n\tTimerPortalsOpen\t\t\t= \"Portale offen\",\n\tTimerPortalsClose\t\t\t= \"Portale geschlossen\",\n\tTimerBlazingSkeleton\t\t= \"Loderndes Skelett\",\n\tTimerAbom\t\t\t\t\t= \"Nächste Monstrosität (%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPortalOpen\t\t\t\t= \"Zeige Warnung, wenn Alptraumportale geöffnet sind\",\n\tTimerPortalsOpen\t\t\t= \"Zeige Zeit bis Alptraumportale geöffnet sind\",\n\tTimerPortalsClose\t\t\t= \"Zeige Zeit bis Alptraumportale geschlossen sind\",\n\tTimerBlazingSkeleton\t\t= \"Zeige Zeit bis nächstes Loderndes Skelett erscheint\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"Eindringlinge im Inneren Sanktum! Beschleunigt die Vernichtung des grünen Drachen! Bewahrt nur Knochen und Sehnen für die Wiederbelebung auf!\",\n\tYellPortals\t\t= \"Ich habe ein Portal in den Traum geöffnet. Darin liegt Eure Erlösung, Helden...\"\n})\n\n------------------\n--  Sindragosa  --\n------------------\nL = DBM:GetModLocalization(\"Sindragosa\")\n\nL:SetGeneralLocalization({\n\tname = \"Sindragosa\"\n})\n\nL:SetWarningLocalization({\n\tWarnAirphase\t\t\t= \"Luftphase\",\n\tWarnGroundphaseSoon\t\t= \"Sindragosa landet bald\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextAirphase\t\t= \"Nächste Luftphase\",\n\tTimerNextGroundphase\t= \"Nächste Bodenphase\",\n\tAchievementMystic\t\t= \"Ablaufzeit für Mystischer Puffer\"\n})\n\nL:SetOptionLocalization({\n\tWarnAirphase\t\t\t\t= \"Verkünde Luftphase\",\n\tWarnGroundphaseSoon\t\t\t= \"Zeige Vorwarnung für Bodenphase\",\n\tTimerNextAirphase\t\t\t= \"Zeige Zeit bis nächste Luftphase\",\n\tTimerNextGroundphase\t\t= \"Zeige Zeit bis nächste Bodenphase\",\n\tAnnounceFrostBeaconIcons\t= \"Verkünde Zeichen für Ziele von $spell:70126 im SZ-Chat (nur als Leiter)\",\n\tClearIconsOnAirphase\t\t= \"Entferne alle Zeichen vor der Luftphase\",\n\tAssignWarnDirectionsCount\t= \"Weisen Sie $spell:70126 -Zielen eine Wegbeschreibung zu und zählen Sie Phase 2 an\",\n\tAchievementCheck\t\t\t= \"Verkünde Warnungen für den Erfolg 'Das Buffet ist eröffnet' an Schlachtzug (nur als Leiter/Assistent)\",\n\tRangeFrame\t\t\t\t\t= \"Zeige dynamisches Abstandsfenster (10 m/20 m) basierend auf zuletzt genutzten Bossfähigkeiten und Spieler-Debuffs\"\n})\n\nL:SetMiscLocalization({\n\tYellAirphase\t\t= \"Euer Vormarsch endet hier! Keiner wird überleben!\",\n\tYellPhase2\t\t\t= \"Fühlt die grenzenlose Macht meines Meisters, und verzweifelt!\",\n\tYellAirphaseDem\t\t= \"Rikk zilthuras rikk zila Aman adare tiriosh \",--Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tYellPhase2Dem\t\t= \"Zar kiel xi romathIs zilthuras revos ruk toralar \",--Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tBeaconIconSet\t\t= \"Frostleuchtfeuer-Zeichen {rt%d} auf %s gesetzt\",\n\tAchievementWarning\t= \"Warnung: %s hat 5 Stapel von Mystischer Puffer\",\n\tAchievementFailed\t= \">> ERFOLG FEHLGESCHLAGEN: %s hat %d Stapel von Mystischer Puffer <<\"\n})\n\n---------------------\n--  The Lich King  --\n---------------------\nL = DBM:GetModLocalization(\"LichKing\")\n\nL:SetGeneralLocalization({\n\tname = \"Der Lichkönig\"\n})\n\nL:SetWarningLocalization({\n\tValkyrWarning\t\t\t= \"%s >%s< %s wurde gegriffen!\",\n\tSpecWarnYouAreValkd\t\t= \"Du wurdest gegriffen\",\n\tWarnNecroticPlagueJump\t= \"Nekrotische Seuche auf >%s< gesprungen\",\n\tSpecWarnValkyrLow\t\t= \"Schattenwächterin unter 55%%\"\n})\n\nL:SetTimerLocalization({\n\tTimerRoleplay\t\t\t\t= \"Rollenspiel\",\n\tPhaseTransition\t\t\t\t= \"Phasenübergang\",\n\tTimerNecroticPlagueCleanse\t= \"Nekrotische Seuche reinigen\"\n})\n\nL:SetOptionLocalization({\n\tTimerRoleplay\t\t\t\t= \"Dauer des Rollenspiels (bei 10%) anzeigen\",\n\tWarnNecroticPlagueJump\t\t= \"Verkünde Sprungziele von $spell:73912\",\n\tTimerNecroticPlagueCleanse\t= \"Zeige Timer zum Reinigen von $spell:73912 vor dem ersten Tick\",\n\tPhaseTransition\t\t\t\t= \"Dauer der Phasenübergänge anzeigen\",\n\tValkyrWarning\t\t\t\t= \"Verkünde Griffziele der Schattenwächterinnen der Val'kyr\",\n\tSpecWarnYouAreValkd\t\t\t= \"Spezialwarnung, wenn du von einer Schattenwächterin der Val'kyr gegriffen wurdest\",--npc36609\n\tAnnounceValkGrabs\t\t\t= \"Verkünde Griffziele der Schattenwächterinnen der Val'kyr im SZ-Chat (benötigt aktivierte Mitteilungen und Leiter-/Assistentenstatus)\",\n\tSpecWarnValkyrLow\t\t\t= \"Spezialwarnung, wenn eine Schattenwächterin der Val'kyr unter 55% Lebenspunkte ist\",\n\tAnnouncePlagueStack\t\t\t= \"Verkünde $spell:70337 Stapel an den Schlachtzug (ab 10 Stapel, danach alle 5 Stapel) (nur als Leiter/Assistent)\",\n\tShowFrame\t\t\t\t\t= \"Zeige Val'Kyr Zielframe\",\n\tFrameClassColor\t\t\t\t= \"Benutze Klassenfarben im Val'Kyr Zielframe\",\n\tFrameUpwards\t\t\t\t= \"Erweitere Val'Kyr Zielframe nach oben\",\n\tFrameLocked\t\t\t\t\t= \"Val'Kyr Targets Zielframe sperren\",\n\tRemoveImmunes\t\t\t\t= \"Entferne Immunitätszauber vor dem verlassen Frostgrams Kammer\"\n})\n\nL:SetMiscLocalization({\n\tLKPull\t\t\t\t\t= \"Der vielgerühmte Streiter des Lichts ist endlich hier? Soll ich Frostgram niederlegen und mich Eurer Gnade ausliefern, Fordring?\",\n\tLKRoleplay\t\t\t\t= \"Ist es wirklich Rechtschaffenheit, die Euch treibt? Ich bin mir nicht sicher…\",\n\tValkGrabbedIcon\t\t\t= \"Schattenwächterin der Val'kyr {rt%d} hat %s gegriffen\",\n\tValkGrabbed\t\t\t\t= \"Schattenwächterin der Val'kyr hat %s gegriffen\",\n\tPlagueStackWarning\t\t= \"Warnung: %s hat %d Stapel von Nekrotischer Seuche\",\n\tAchievementCompleted\t= \">> ERFOLG FERTIG: %s hat %d Stapel von Nekrotischer Seuche <<\",\n\tFrameTitle\t\t\t\t= \"Valkyr Ziele\",\n\tFrameLock\t\t\t\t= \"Frame sperren\",\n\tFrameClassColor\t\t\t= \"Benutze Klassenfarben\",\n\tFrameOrientation\t\t= \"nach oben erweitern\",\n\tFrameHide\t\t\t\t= \"Frame verstecken\",\n\tFrameClose\t\t\t\t= \"Schließen\",\n\tFrameGUIDesc\t\t\t= \"Val'Kyr-Rahmen\",\n\tFrameGUIMoveMe\t\t\t= \"Val'Kyr-Rahmen verschieben\"\n})\n\n-------------\n--  Trash  --\n-------------\nL = DBM:GetModLocalization(\"ICCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"Trash der Eiskronenzitadelle\"\n})\n\nL:SetWarningLocalization({\n\tSpecWarnTrapL\t\t= \"Falle aktiviert! - Todesgeweihter Wächter freigesetzt\",\n\tSpecWarnTrapP\t\t= \"Falle aktiviert! - Rachsüchtige Fleischernter kommen\",\n\tSpecWarnGosaEvent\t= \"Sindragosa-Spießrutenlauf gestartet!\"\n})\n\nL:SetOptionLocalization({\n\tSpecWarnTrapL\t\t= \"Spezialwarnung für Fallenaktivierung (Todesgeweihter Wächter)\",\n\tSpecWarnTrapP\t\t= \"Spezialwarnung für Fallenaktivierung (Rachsüchtige Fleischernter)\",\n\tSpecWarnGosaEvent\t= \"Spezialwarnung für Sindragosa-Spießrutenlauf\"\n})\n\nL:SetMiscLocalization({\n\tWarderTrap1\t\t\t= \"Wer... ist da?\",\n\tWarderTrap2\t\t\t= \"Ich erwache...\",\n\tWarderTrap3\t\t\t= \"Das Sanktum des Meisters wurde entweiht!\",\n\tFleshreaperTrap1\t= \"Schnell, überfallen wir sie von hinten!\",\n\tFleshreaperTrap2\t= \"Ihr könnt uns nicht entkommen.\",\n\tFleshreaperTrap3\t= \"Die Lebenden? Hier?!\",\n\tSindragosaEvent\t\t= \"Ihr dürft Euch der Frostkönigin nicht nähern! Schnell, haltet sie auf!\"\n})\n"
  },
  {
    "path": "DBM-Icecrown/localization.en.lua",
    "content": "local L\n\n----------------------\n--  Lord Marrowgar  --\n----------------------\nL = DBM:GetModLocalization(\"LordMarrowgar\")\n\nL:SetGeneralLocalization({\n\tname = \"Lord Marrowgar\"\n})\n\n-------------------------\n--  Lady Deathwhisper  --\n-------------------------\nL = DBM:GetModLocalization(\"Deathwhisper\")\n\nL:SetGeneralLocalization({\n\tname = \"Lady Deathwhisper\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t= \"New Adds\"\n})\n\nL:SetWarningLocalization({\n\tWarnReanimating\t\t\t\t= \"Add reviving\",\t-- Reanimating an adherent or fanatic\n\tWarnAddsSoon\t\t\t\t= \"New adds soon\",\n\tSpecWarnVengefulShade\t\t= \"Vengeful Shade attacking you - Run Away\",--creatureid 38222\n\tWeaponsStatus\t\t\t\t= \"Auto Unequip/Equip weapons: %s (%s - %s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon\t\t\t\t= \"Show pre-warning for adds spawning\",\n\tWarnReanimating\t\t\t\t= \"Show warning when an add is being revived\",\t-- Reanimated Adherent/Fanatic spawning\n\tTimerAdds\t\t\t\t\t= \"Show timer for new adds\",\n\tSpecWarnVengefulShade\t\t= \"Show special warning when you are attacked by Vengeful Shade\",--creatureid 38222\n\tWeaponsStatus\t\t\t\t= \"Show special warning at combat start if unequip/equip function is enabled\",\n\tShieldHealthFrame\t\t\t= \"Show boss health with a health bar for $spell:70842\",\n\tSoundWarnCountingMC\t\t\t= \"Play a 5 second audio countdown for Mind Control\",\n--\tRemoveDruidBuff\t\t\t\t= \"Remove $spell:48469 / $spell:48470 24 seconds into the fight\",\n\tRemoveBuffsOnMC\t\t\t\t= \"Remove buffs when $spell:71289 is cast on you. Each option is cumulative.\",\n\tNever\t\t\t\t\t\t= NEVER, -- don't translate\n\tGift\t\t\t\t\t\t= \"Remove $spell:48469 / $spell:48470. Minimal approach to prevent $spell:33786 resists.\",\n\tCCFree\t\t\t\t\t\t= \"+ Remove $spell:48169 / $spell:48170. Account for resists of spells in the Shadow school.\",\n\tShortOffensiveProcs\t\t\t= \"+ Remove offensive procs that have a low duration. Recommended for raid safety without compromising raid damage output.\",\n\tMostOffensiveBuffs\t\t\t= \"+ Remove most offensive buffs (mainly for Casters and |cFFFF7C0AFeral Druids|r). Maximum raid safety with loss of damage output and need to self-rebuff/shapeshift!\",\n\tEqUneqWeapons\t\t\t\t= \"Unequip/equip weapons if $spell:71289 is cast on you. For equipping to work, create a COMPLETE (with the weapons of choice that will be equipped) equipment set named \\\"pve\\\".\",\n\tEqUneqTimer\t\t\t\t\t= \"Remove weapons by timer ALWAYS, not on cast (if ping is high). The option above must be enabled.\",\n\tEqUneqFilter\t\t\t\t= FILTER, -- don't translate\n\tOnlyDPS\t\t\t\t\t\t= DBM_COMMON_L.DAMAGE_ICON, -- don't translate\n\tDPSTank\t\t\t\t\t\t= DBM_COMMON_L.DAMAGE_ICON..DBM_COMMON_L.TANK_ICON, -- don't translate\n\tNoFilter\t\t\t\t\t= DBM_COMMON_L.DAMAGE_ICON..DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.HEALER_ICON -- don't translate\n})\n\nL:SetMiscLocalization({\n\tYellReanimatedFanatic\t= \"Arise, and exult in your pure form!\",\n\tShieldPercent\t\t\t= \"Mana Barrier\",--Translate Spell id 70842\n--\tFanatic1\t\t\t\t= \"Cult Fanatic\",\n--\tFanatic2\t\t\t\t= \"Deformed Fanatic\",\n--\tFanatic3\t\t\t\t= \"Reanimated Fanatic\",\n\tsetMissing\t\t\t\t= \"ATTENTION! DBM automatic weapon unequipping/equipping will not work until you create a equipment set named pve\",\n\tEqUneqLineDescription\t= \"Automatic Equip/Unequip\"\n})\n\n----------------------\n--  Gunship Battle  --\n----------------------\nL = DBM:GetModLocalization(\"GunshipBattle\")\n\nL:SetGeneralLocalization({\n\tname = \"Icecrown Gunship Battle\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsSoon\t= \"New adds soon\"\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon\t\t= \"Show pre-warning for adds spawning\",\n\tTimerAdds\t\t\t= \"Show timer for new adds\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t\t\t= \"New adds\"\n})\n\nL:SetMiscLocalization({\n\tPullAlliance\t= \"Fire up the engines! We got a meetin' with destiny, lads!\",\n\tPullHorde\t\t= \"Rise up, sons and daughters of the Horde! Today we battle a hated enemy of the Horde! LOK'TAR OGAR!\",\n\t--CombatAlliance\t= \"Cowardly dogs! Ye blindsided us!\",\n\t--CombatHorde\t\t= \"You answer to Saurfang now!\",\n\tAddsAlliance\t= \"Reavers, Sergeants, attack\",\n\tAddsHorde\t\t= \"Marines, Sergeants, attack\",\n\tMageAlliance\t= \"We're taking hull damage, get a battle-mage out here to shut down those cannons!\",\n\tMageHorde\t\t= \"We're taking hull damage, get a sorcerer out here to shut down those cannons!\",\n\tKillAlliance\t= \"Don't say I didn't warn ya, scoundrels! Onward, brothers and sisters!\",\n\tKillHorde\t\t= \"The Alliance falter. Onward to the Lich King!\"\n})\n\n-----------------------------\n--  Deathbringer Saurfang  --\n-----------------------------\nL = DBM:GetModLocalization(\"Deathbringer\")\n\nL:SetGeneralLocalization({\n\tname = \"Deathbringer Saurfang\"\n})\n\nL:SetWarningLocalization({\n\tSpecWarnBloodBeastSwing\t= \"Blood Beast attacking you - Run Away\", -- CreatureID 38508\n})\n\nL:SetOptionLocalization({\n\tRunePowerFrame\t\t\t= \"Show Boss Health + $spell:72371 bar\",\n--\tRemoveDI\t\t\t\t= \"Remove $spell:19752 if used to prevent $spell:72293 cast\"\n\tSpecWarnBloodBeastSwing\t= \"Show special warning when you are attacked by Blood Beast\", -- CreatureID 38508\n})\n\nL:SetMiscLocalization({\n\tRunePower\t\t\t= \"Blood Power\",\n\tPullAlliance\t\t= \"For every Horde soldier that you killed -- for every Alliance dog that fell, the Lich King's armies grew. Even now the val'kyr work to raise your fallen as Scourge.\",\n\tPullHorde\t\t\t= \"Kor'kron, move out! Champions, watch your backs. The Scourge have been...\"\n})\n\n-----------------\n--  Festergut  --\n-----------------\nL = DBM:GetModLocalization(\"Festergut\")\n\nL:SetGeneralLocalization({\n\tname = \"Festergut\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceSporeIcons\t= \"Announce icons for $spell:69279 targets to raid chat<br/>(requires raid leader)\",\n\tAchievementCheck\t= \"Announce 'Flu Shot Shortage' achievement failure to raid<br/>(requires promoted status)\"\n})\n\nL:SetMiscLocalization({\n\tSporeSet\t\t\t= \"Gas Spore icon {rt%d} set on %s\",\n\tAchievementFailed\t= \">> ACHIEVEMENT FAILED: %s has %d stacks of Inoculated <<\"\n})\n\n---------------\n--  Rotface  --\n---------------\nL = DBM:GetModLocalization(\"Rotface\")\n\nL:SetGeneralLocalization({\n\tname = \"Rotface\"\n})\n\nL:SetWarningLocalization({\n\tWarnOozeSpawn\t\t\t\t= \"Little Ooze spawning\",\n\tSpecWarnLittleOoze\t\t\t= \"Little Ooze attacking you - Run Away\"--creatureid 36897\n})\n\nL:SetOptionLocalization({\n\tWarnOozeSpawn\t\t\t\t= \"Show warning for Little Ooze spawning\",\n\tSpecWarnLittleOoze\t\t\t= \"Show special warning when you are attacked by Little Ooze\",--creatureid 36897\n\tTankArrow\t\t\t\t\t= \"Show DBM arrow for Big Ooze kiter (Experimental)\"\n})\n\nL:SetMiscLocalization({\n\tYellSlimePipes1\t= \"Good news, everyone! I've fixed the poison slime pipes!\",\t-- Professor Putricide\n\tYellSlimePipes2\t= \"Great news, everyone! The slime is flowing again!\"\t-- Professor Putricide\n})\n\n---------------------------\n--  Professor Putricide  --\n---------------------------\nL = DBM:GetModLocalization(\"Putricide\")\n\nL:SetGeneralLocalization({\n\tname = \"Professor Putricide\"\n})\n\nL:SetWarningLocalization({\n\tWarnReengage\t\t\t= \"%s: Re-Engage\"\n})\n\nL:SetTimerLocalization({\n\tTimerReengage\t\t\t= \"Re-Engage\"\n})\n\nL:SetOptionLocalization({\n\tWarnReengage\t\t\t= \"Show warning for Boss re-engage\",\n\tTimerReengage\t\t\t= \"Show timer for Boss re-engage\"\n})\n\nL:SetMiscLocalization({\n\tYellTransform1\t\t\t= \"Hrm, I don't feel a thing. Wha?! Where'd those come from?\",\n\tYellTransform2\t\t\t= \"Tastes like... Cherry! OH! Excuse me!\"\n})\n\n----------------------------\n--  Blood Prince Council  --\n----------------------------\nL = DBM:GetModLocalization(\"BPCouncil\")\n\nL:SetGeneralLocalization({\n\tname = \"Blood Prince Council\"\n})\n\nL:SetWarningLocalization({\n\tWarnTargetSwitch\t\t= \"Switch target to: %s\",\n\tWarnTargetSwitchSoon\t= \"Target switch soon\"\n})\n\nL:SetTimerLocalization({\n\tTimerTargetSwitch\t\t= \"Target switch\"\n})\n\nL:SetOptionLocalization({\n\tWarnTargetSwitch\t\t= \"Show warning to switch targets\",-- Warn when another Prince needs to be damaged\n\tWarnTargetSwitchSoon\t= \"Show pre-warning to switch targets\",-- Every ~47 secs, you have to dps a different Prince\n\tTimerTargetSwitch\t\t= \"Show timer for target switch cooldown\",\n\tActivePrinceIcon\t\t= \"Set icon on the empowered Prince (skull)\",\n\tShadowPrisonMetronome\t= \"Play a repeating 1 second click sound to avoid $spell:72999\"\n})\n\nL:SetMiscLocalization({\n\tKeleseth\t\t\t= \"Prince Keleseth\",\n\tTaldaram\t\t\t= \"Prince Taldaram\",\n\tValanar\t\t\t\t= \"Prince Valanar\",\n\tFirstPull\t\t\t= \"Foolish mortals. You thought us defeated so easily? The San'layn are the Lich King's immortal soldiers! Now you shall face their might combined!\",\n\tEmpoweredFlames\t\t= \"Empowered Flames speed toward (%S+)!\"\n})\n\n-----------------------------\n--  Blood-Queen Lana'thel  --\n-----------------------------\nL = DBM:GetModLocalization(\"Lanathel\")\n\nL:SetGeneralLocalization({\n\tname = \"Blood-Queen Lana'thel\"\n})\n\nL:SetMiscLocalization({\n\tSwarmingShadows\t\t\t= \"Shadows amass and swarm around (%S+)!\",\n\tYellFrenzy\t\t\t\t= \"I'm hungry!\" -- Player did not bite; not to be confused with BQL Berserk (This ends NOW!)\n})\n\n-----------------------------\n--  Valithria Dreamwalker  --\n-----------------------------\nL = DBM:GetModLocalization(\"Valithria\")\n\nL:SetGeneralLocalization({\n\tname = \"Valithria Dreamwalker\"\n})\n\nL:SetWarningLocalization({\n\tWarnPortalOpen\t= \"Portals open\"\n})\n\nL:SetTimerLocalization({\n\tTimerPortalsOpen\t\t\t= \"Portals open\",\n\tTimerPortalsClose\t\t\t= \"Portals close\",\n\tTimerBlazingSkeleton\t\t= \"Next Blazing Skeleton\",\n\tTimerAbom\t\t\t\t\t= \"Next Abomination (%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPortalOpen\t\t\t\t= \"Show warning when Nightmare Portals are opened up\",\n\tTimerPortalsOpen\t\t\t= \"Show timer until Nightmare Portals are opened up\",\n\tTimerPortalsClose\t\t\t= \"Show timer until Nightmare Portals are closed\",\n\tTimerBlazingSkeleton\t\t= \"Show timer for next Blazing Skeleton spawn\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"Intruders have breached the inner sanctum. Hasten the destruction of the green dragon! Leave only bones and sinew for the reanimation!\",\n\tYellPortals\t\t= \"I have opened a portal into the Dream. Your salvation lies within, heroes...\"\n})\n\n------------------\n--  Sindragosa  --\n------------------\nL = DBM:GetModLocalization(\"Sindragosa\")\n\nL:SetGeneralLocalization({\n\tname = \"Sindragosa\"\n})\n\nL:SetWarningLocalization({\n\tWarnAirphase\t\t\t= \"Air phase\",\n\tWarnGroundphaseSoon\t\t= \"Sindragosa landing soon\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextAirphase\t\t= \"Next air phase\",\n\tTimerNextGroundphase\t= \"Next ground phase\",\n\tAchievementMystic\t\t= \"Time to clear Mystic stacks\"\n})\n\nL:SetOptionLocalization({\n\tWarnAirphase\t\t\t\t= \"Announce air phase\",\n\tWarnGroundphaseSoon\t\t\t= \"Show pre-warning for ground phase\",\n\tTimerNextAirphase\t\t\t= \"Show timer for next air phase\",\n\tTimerNextGroundphase\t\t= \"Show timer for next ground phase\",\n\tAnnounceFrostBeaconIcons\t= \"Announce icons for $spell:70126 targets to raid chat<br/>(requires raid leader)\",\n\tClearIconsOnAirphase\t\t= \"Clear all icons before air phase\",\n\tAssignWarnDirectionsCount\t= \"Assign directions to $spell:70126 targets and count on phase 2\",\n\tAchievementCheck\t\t\t= \"Announce 'All You Can Eat' achievement warnings to raid<br/>(requires promoted status)\",\n\tRangeFrame\t\t\t\t\t= \"Show dynamic range frame (10/20) based on last used boss ability and player debuffs ($spell:69762 shows only on Heroic)\"\n})\n\nL:SetMiscLocalization({\n\tYellAirphase\t\t= \"Your incursion ends here! None shall survive!\",\n\tYellPhase2\t\t\t= \"Now, feel my master's limitless power and despair!\",\n\tYellAirphaseDem\t\t= \"Rikk zilthuras rikk zila Aman adare tiriosh \",--Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tYellPhase2Dem\t\t= \"Zar kiel xi romathIs zilthuras revos ruk toralar \",--Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tBeaconIconSet\t\t= \"Frost Beacon icon {rt%d} set on %s\",\n\tAchievementWarning\t= \"Warning: %s has 5 stacks of Mystic Buffet\",\n\tAchievementFailed\t= \">> ACHIEVEMENT FAILED: %s has %d stacks of Mystic Buffet <<\"\n})\n\n---------------------\n--  The Lich King  --\n---------------------\nL = DBM:GetModLocalization(\"LichKing\")\n\nL:SetGeneralLocalization({\n\tname = \"The Lich King\"\n})\n\nL:SetWarningLocalization({\n\tValkyrWarning\t\t\t= \"%s >%s< %s has been grabbed!\",\n\tSpecWarnYouAreValkd\t\t= \"You have been grabbed\",\n\tWarnNecroticPlagueJump\t= \"Necrotic Plague jumped to >%s<\",\n\tSpecWarnValkyrLow\t\t= \"Valkyr below 55%\"\n})\n\nL:SetTimerLocalization({\n\tTimerRoleplay\t\t\t\t= \"Roleplay\",\n\tPhaseTransition\t\t\t\t= \"Phase transition\",\n\tTimerNecroticPlagueCleanse\t= \"Cleanse Necrotic Plague\"\n})\n\nL:SetOptionLocalization({\n\tTimerRoleplay\t\t\t\t= \"Show timer for roleplay event\",\n\tWarnNecroticPlagueJump\t\t= \"Announce $spell:73912 jump targets\",\n\tTimerNecroticPlagueCleanse\t= \"Show timer to cleanse Necrotic Plague before\\nthe first tick\",\n\tPhaseTransition\t\t\t\t= \"Show time for phase transitions\",\n\tValkyrWarning\t\t\t\t= \"Announce Val'kyr Shadowguards grab targets\",\n\tSpecWarnYouAreValkd\t\t\t= \"Show special warning when you have been grabbed by a Val'kyr Shadowguard\",--npc36609\n\tAnnounceValkGrabs\t\t\t= \"Announce Val'kyr Shadowguard grab targets in raid chat\\n(requires announce to be enabled and promoted status)\",\n\tSpecWarnValkyrLow\t\t\t= \"Show special warning when Valkyr is below 55% HP\",\n\tAnnouncePlagueStack\t\t\t= \"Announce $spell:73912 stacks to raid (10 stacks, every 5 after 10)\\n(requires promoted status)\",\n\tShowFrame\t\t\t\t\t= \"Show Val'Kyr Targets frame\",\n\tFrameClassColor\t\t\t\t= \"Use Class Colors in Val'Kyr Targets frame\",\n\tFrameUpwards\t\t\t\t= \"Expand Val'Kyr target frame upwards\",\n\tFrameLocked\t\t\t\t\t= \"Lock Val'Kyr Targets frame\",\n\tRemoveImmunes\t\t\t\t= \"Remove immunity spells before exiting Frostmourne room\"\n})\n\nL:SetMiscLocalization({\n\tLKPull\t\t\t\t\t= \"So the Light's vaunted justice has finally arrived? Shall I lay down Frostmourne and throw myself at your mercy, Fordring?\",\n\tLKRoleplay\t\t\t\t= \"Is it truly righteousness that drives you? I wonder...\",\n\tValkGrabbedIcon\t\t\t= \"Valkyr Shadowguard {rt%d} grabbed %s\",\n\tValkGrabbed\t\t\t\t= \"Valkyr Shadowguard grabbed %s\",\n\tPlagueStackWarning\t\t= \"Warning: %s has %d stacks of Necrotic Plague\",\n\tAchievementCompleted\t= \">> ACHIEVEMENT COMPLETE: %s has %d stacks of Necrotic Plague <<\",\n\tFrameTitle\t\t\t\t= \"Valkyr targets\",\n\tFrameLock\t\t\t\t= \"Frame Lock\",\n\tFrameClassColor\t\t\t= \"Use Class Colors\",\n\tFrameOrientation\t\t= \"Expand upwards\",\n\tFrameHide\t\t\t\t= \"Hide Frame\",\n\tFrameClose\t\t\t\t= \"Close\",\n\tFrameGUIDesc\t\t\t= \"Val'Kyr Frame\",\n\tFrameGUIMoveMe\t\t\t= \"Move Val'Kyr Frame\"\n})\n\n-------------\n--  Trash  --\n-------------\nL = DBM:GetModLocalization(\"ICCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"Icecrown Trash\"\n})\n\nL:SetWarningLocalization({\n\tSpecWarnTrapL\t\t= \"Trap Activated! - Deathbound Ward released\", -- creatureid 37007\n\tSpecWarnTrapP\t\t= \"Trap Activated! - Vengeful Fleshreapers incoming\", --creatureid 37038\n\tSpecWarnGosaEvent\t= \"Sindragosa gauntlet started!\"\n})\n\nL:SetOptionLocalization({\n\tSpecWarnTrapL\t\t= \"Show special warning for Deathbound Ward trap activation\",\n\tSpecWarnTrapP\t\t= \"Show special warning for Vengeful Fleshreapers trap activation\",\n\tSpecWarnGosaEvent\t= \"Show special warning for Sindragosa gauntlet event\"\n})\n\nL:SetMiscLocalization({\n\tWarderTrap1\t\t\t= \"Who... goes there...?\",\n\tWarderTrap2\t\t\t= \"I... awaken!\",\n\tWarderTrap3\t\t\t= \"The master's sanctum has been disturbed!\",\n\tFleshreaperTrap1\t= \"Quickly! We'll ambush them from behind!\",\n\tFleshreaperTrap2\t= \"You... cannot escape us!\",\n\tFleshreaperTrap3\t= \"The living... here?!\",\n\tSindragosaEvent\t\t= \"You must not approach the Frost Queen. Quickly, stop them!\"\n})\n"
  },
  {
    "path": "DBM-Icecrown/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" then return end\n\nlocal L\n\n------------------\n-- Lord Tuétano --\n------------------\nL = DBM:GetModLocalization(\"LordMarrowgar\")\n\nL:SetGeneralLocalization({\n\tname = \"Lord Tuétano\"\n})\n\n------------------------\n-- Lady Susurramuerte --\n------------------------\nL = DBM:GetModLocalization(\"Deathwhisper\")\n\nL:SetGeneralLocalization({\n\tname = \"Lady Susurramuerte\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t= \"Siguientes esbirros\"\n})\n\nL:SetWarningLocalization({\n\tWarnReanimating\t\t\t\t= \"Esbirro reanimado\",\t\t\t-- Reanimating an adherent or fanatic\n\tWarnAddsSoon\t\t\t\t= \"Esbirros en breve\",\n\tSpecWarnVengefulShade\t\t= \"¡Sombra vengativa te ataca! ¡Corre!\",--creatureid 38222\n\tWeaponsStatus\t\t\t\t= \"Desequipar automático habilitado: %s (%s - %s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon\t\t\t\t= \"Mostrar aviso previo para cuando aparezcan esbirros\",\n\tWarnReanimating\t\t\t\t= \"Mostrar aviso cuando se esté reanimando a un esbirro\",\t-- Reanimated Adherent/Fanatic spawning\n\tTimerAdds\t\t\t\t\t= \"Mostrar temporizador para los siguientes esbirros\",\n\tSpecWarnVengefulShade\t\t= \"Mostrar aviso especial cuando te ataque una Sombra vengativa\",--creatureid 38222\n\tWeaponsStatus\t\t\t\t= \"Advertencia especial al inicio del combate si la función desequipar/equipar está habilitada\",\n\tShieldHealthFrame\t\t\t= \"Mostrar barra de vida del boss con una barra de vida para $spell:70842\",\n\tSoundWarnCountingMC\t\t\t= \"Play a 5 second audio countdown for Mind Control\", --Needs Translating\n--\tRemoveDruidBuff\t\t\t\t= \"Quitar $spell:48469 / $spell:48470 24 segundos después de la pelea\",\n\tRemoveBuffsOnMC\t\t\t\t= \"Elimina los buffs cuando $spell:71289 es lanzado sobre ti. Cada opción es acumulativa\",\n\tGift\t\t\t\t\t\t= \"Eliminar $spell:48469 / $spell:48470. Enfoque mínimo para evitar que $spell:33786 se resista\",\n\tCCFree\t\t\t\t\t\t= \"+ Eliminar $spell:48169 / $spell:48170. Tener en cuenta las resistencias de los hechizos de la escuela Sombra\",\n\tShortOffensiveProcs\t\t\t= \"+ Elimina los procs ofensivos de baja duración. Recomendado para la seguridad de la raid sin comprometer la producción de daño de la raid\",\n\tMostOffensiveBuffs\t\t\t= \"+ Elimina la mayoría de los buffs ofensivos (principalmente para los Casters y los |cFFFF7C0ADruidas Ferales|r). Máxima seguridad en la incursión con la pérdida de daño y la necesidad de auto-buff/cambio de forma\",\n\tEqUneqWeapons\t\t\t\t= \"Desequipar/equipar armas si se lanza $spell:71289 sobre ti. Para que el equipo funcione, cree un gestor de equipamiento llamado \\\"pve\\\".\",\n\tEqUneqTimer\t\t\t\t\t= \"Retirar las armas con el temporizador SIEMPRE, no en el lanzamiento (si el ping es alto). La opción anterior debe estar habilitada.\",\n})\n\nL:SetMiscLocalization({\n\tYellReanimatedFanatic\t= \"¡Álzate y goza de tu verdadera forma!\",\n\tShieldPercent\t\t\t= \"Barrera de maná\",\n--\tFanatic1\t\t\t\t= \"Fanático del Culto\",\n--\tFanatic2\t\t\t\t= \"Fanático deformado\",\n--\tFanatic3\t\t\t\t= \"Fanático reanimado\",\n\tsetMissing\t\t\t\t= \"¡ATENCIÓN! El desequipamiento / equipamiento automático de armas de DBM no funcionará hasta que cree un equipamiento llamado pve\",\n\tEqUneqLineDescription\t= \"Equipar/desequipar automático\"\n})\n\n--------------------------------\n-- Batalla de naves de guerra --\n--------------------------------\nL = DBM:GetModLocalization(\"GunshipBattle\")\n\nL:SetGeneralLocalization({\n\tname = \"Batalla aérea\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsSoon\t= \"Esbirros en breve\"\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon\t\t= \"Mostrar aviso previo para cuando aparezcan esbirros\",\n\tTimerAdds\t\t\t= \"Mostrar temporizador para los siguientes esbirros\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t\t\t= \"Siguientes esbirros\"\n})\n\nL:SetMiscLocalization({\n\tPullAlliance\t= \"¡Arrancad los motores! ¡Tenemos una cita con el destino, muchachos!\",\n\tPullHorde\t\t= \"¡Alzaos, hijos e hijas de la Horda! ¡Hoy nos enfrentamos a un odiado enemigo de la Horda! ¡LOK'TAR OGAR!\",\n\tAddsAlliance\t= \"¡Atracadores, sargentos, atacad!\",\n\tAddsHorde\t\t= \"¡Soldados, sargentos, atacad!\",\n\tMageAlliance\t= \"Nos están dañando el casco, ¡traed un mago de batalla aquí para acabar con esos cañones!\",\n\tMageHorde\t\t= \"Nos están dañando el casco, ¡traed un brujo aquí para acabar con esos cañones!\",\n\tKillAlliance\t= \"¡No digáis que no lo avisé, sinvergüenzas! Adelante, hermanos.\",\n\tKillHorde\t\t= \"La Alianza retrocede. ¡Hacia el Rey Exánime!\"\n})\n\n------------------------------\n-- Libramorte Colmillosauro --\n------------------------------\nL = DBM:GetModLocalization(\"Deathbringer\")\n\nL:SetGeneralLocalization({\n\tname = \"Libramorte Colmillosauro\"\n})\n\nL:SetOptionLocalization({\n\tRunePowerFrame\t\t= \"Mostrar barra de vida + barra de $spell:72371\",\n--\tRemoveDI\t\t\t= \"Quitar $spell:19752 si se utiliza para prevenir lanzamiento de $spell:72293.\"\n})\n\nL:SetMiscLocalization({\n\tRunePower\t\t\t= \"Poder de sangre\",\n\tPullAlliance\t\t= \"Por cada soldado de la Horda que matasteis... Por cada perro de la Alianza que cayó, el ejército del Rey Exánime creció. Ahora, hasta las Val'kyr alzan a los caídos para la Plaga.\",\n\tPullHorde\t\t\t= \"¡Kor'kron, vámonos! Campeones, vigilad vuestra retaguardia. La Plaga ha sido...\"\n})\n\n------------------\n-- Panzachancro --\n------------------\nL = DBM:GetModLocalization(\"Festergut\")\n\nL:SetGeneralLocalization({\n\tname = \"Panzachancro\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceSporeIcons\t= \"Anunciar iconos de los objetivos de $spell:69279 en el chat de banda (requiere líder o ayudante)\",\n\tAchievementCheck\t= \"Anunciar si se falla el logro 'Sin vacunas' en el chat de banda (requiere líder o ayudante)\"\n})\n\nL:SetMiscLocalization({\n\tSporeSet\t\t\t= \"Icono {rt%d} de Espora de gas en %s\",\n\tAchievementFailed\t= \">> LOGRO FALLADO: %s tiene %d acumulaciones de Inoculado <<\"\n})\n\n----------------\n-- Carapútrea --\n----------------\nL = DBM:GetModLocalization(\"Rotface\")\n\nL:SetGeneralLocalization({\n\tname = \"Carapútrea\"\n})\n\nL:SetWarningLocalization({\n\tWarnOozeSpawn\t\t\t\t= \"Moco pequeño\",\n\tSpecWarnLittleOoze\t\t\t= \"Te está atacando un Moco pequeño - ¡huye!\"--creatureid 36897\n})\n\nL:SetOptionLocalization({\n\tWarnOozeSpawn\t\t\t\t= \"Mostrar aviso cuando aparezca un Moco pequeño\",\n\tSpecWarnLittleOoze\t\t\t= \"Mostrar aviso especial cuando te ataque un Moco pequeño\",--creatureid 36897\n\tTankArrow\t\t\t\t\t= \"Mostrar flecha hacia el tanque del Moco grande (Experimental)\"\n})\n\nL:SetMiscLocalization({\n\tYellSlimePipes1\t= \"¡Buenas noticias, amigos! He arreglado las tuberías de babosas venenosas.\",\t-- Professor Putricide\n\tYellSlimePipes2\t= \"¡Grandes noticias, amigos! Las babosas vuelven a fluir.\"\t-- Professor Putricide\n})\n\n-------------------------\n-- Profesor Putricidio --\n-------------------------\nL = DBM:GetModLocalization(\"Putricide\")\n\nL:SetGeneralLocalization({\n\tname = \"Profesor Putricidio\"\n})\n\nL:SetWarningLocalization({\n\tWarnReengage\t\t\t= \"%s: Reatracción\"\n})\n\nL:SetTimerLocalization({\n\tTimerReengage\t\t\t= \"Reatracción\"\n})\n\n--[[L:SetOptionLocalization({\n\tWarnReengage\t\t\t= \"Show warning for Boss re-engage\", -- needs localization\n\tTimerReengage\t\t\t= \"Show timer for Boss re-engage\" -- needs localization\n})]]\n\nL:SetMiscLocalization({\n\tYellTransform1\t\t\t= \"Mmm, no siento nada. ¿¡Qué!? ¿De dónde salió eso?\",\n\tYellTransform2\t\t\t= \"¡Sabe a... fresa! ¡Ups! Perdón.\"\n})\n\n------------------------------------\n-- Consejo de Príncipes de Sangre --\n------------------------------------\nL = DBM:GetModLocalization(\"BPCouncil\")\n\nL:SetGeneralLocalization({\n\tname = \"Consejo de Príncipes de Sangre\"\n})\n\nL:SetWarningLocalization({\n\tWarnTargetSwitch\t\t= \"Cambio de objetivo: %s\",\n\tWarnTargetSwitchSoon\t= \"Cambio de objetivo en breve\"\n})\n\nL:SetTimerLocalization({\n\tTimerTargetSwitch\t\t= \"Cambio de objetivo\"\n})\n\nL:SetOptionLocalization({\n\tWarnTargetSwitch\t\t= \"Mostrar aviso cuando haya que cambiar de objetivo\",-- Warn when another Prince needs to be damaged\n\tWarnTargetSwitchSoon\t= \"Mostrar aviso previo para cuando haya que cambiar de objetivo\",-- Every ~47 secs, you have to dps a different Prince\n\tTimerTargetSwitch\t\t= \"Mostrar temporizador para el siguiente cambio de objetivo\",\n\tActivePrinceIcon\t\t= \"Poner icono (calavera) en el príncipe potenciado\",\n\tShadowPrisonMetronome\t= \"Reproducir un sonido de clic repetido de 1 segundo para evitar $spell:72999\"\n})\n\nL:SetMiscLocalization({\n\tKeleseth\t\t\t= \"Príncipe Keleseth\",\n\tTaldaram\t\t\t= \"Príncipe Taldaram\",\n\tValanar\t\t\t\t= \"Príncipe Valanar\",\n\tFirstPull\t\t\t= \"Estúpidos. ¿Pensasteis que nos derrotaríais tan fácilmente? Los San'layn son los soldados inmortales del Rey Exánime. ¡Ahora os enfrentaréis a todos juntos!\",\n\tEmpoweredFlames\t\t= \"¡Llamas potenciadas arremeten contra (%S+)!\"\n})\n\n-------------------------------\n-- Reina de Sangre Lana'thel --\n-------------------------------\nL = DBM:GetModLocalization(\"Lanathel\")\n\nL:SetGeneralLocalization({\n\tname = \"Reina de Sangre Lana'thel\"\n})\n\nL:SetMiscLocalization({\n\tSwarmingShadows\t\t\t= \"¡Las sombras se acumulan alrededor de (%S+)!\",\n\tYellFrenzy\t\t\t\t= \"¡Tengo hambre!\"\n})\n\n----------------------------\n-- Valithria Caminasueños --\n----------------------------\nL = DBM:GetModLocalization(\"Valithria\")\n\nL:SetGeneralLocalization({\n\tname = \"Valithria Caminasueños\"\n})\n\nL:SetWarningLocalization({\n\tWarnPortalOpen\t= \"Siguientes portales\"\n})\n\nL:SetTimerLocalization({\n\tTimerPortalsOpen\t\t\t= \"Portales abiertos\",\n\tTimerPortalsClose\t\t\t= \"Portales cerrados\",\n\tTimerBlazingSkeleton\t\t= \"Siguiente Esqueleto llameante\",\n\tTimerAbom\t\t\t\t\t= \"Siguiente Abominación glotona (%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPortalOpen\t\t\t\t= \"Mostrar aviso cuando se abran los portales\",\n\tTimerPortalsOpen\t\t\t= \"Mostrar temporizador para cuando se abran los portales\",\n\tTimerPortalsClose\t\t\t= \"Mostrar temporizador para cuando se cierren los portales\",\n\tTimerBlazingSkeleton\t\t= \"Mostrar temporizador para el siguiente Esqueleto llameante\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"Han entrado intrusos en el Sagrario Interior. Apresuraos en acabar con el dragón verde. ¡Dejad solo huesos y tendones para la reanimación!\",\n\tYellPortals\t\t= \"He abierto un portal al Sueño. Vuestra salvación está dentro, héroes...\"\n})\n\n----------------\n-- Sindragosa --\n----------------\nL = DBM:GetModLocalization(\"Sindragosa\")\n\nL:SetGeneralLocalization({\n\tname = \"Sindragosa\"\n})\n\nL:SetWarningLocalization({\n\tWarnAirphase\t\t\t= \"Fase aérea\",\n\tWarnGroundphaseSoon\t\t= \"Fase en tierra en breve\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextAirphase\t\t= \"Siguiente fase aérea\",\n\tTimerNextGroundphase\t= \"Siguiente fase en tierra\",\n\tAchievementMystic\t\t= \"Logro: Sacúdete\"\n})\n\nL:SetOptionLocalization({\n\tWarnAirphase\t\t\t\t= \"Anunciar cambio a fase aérea\",\n\tWarnGroundphaseSoon\t\t\t= \"Mostrar aviso previo para el cambio a fase en tierra\",\n\tTimerNextAirphase\t\t\t= \"Mostrar temporizador para la siguiente fase aérea\",\n\tTimerNextGroundphase\t\t= \"Mostrar temporizador para la siguiente fase en tierra\",\n\tAnnounceFrostBeaconIcons\t= \"Anunciar iconos de los objetivos de $spell:70126 en el chat de banda (requiere líder)\",\n\tClearIconsOnAirphase\t\t= \"Quitar todos los iconos al comenzar la fase aérea\",\n\tAssignWarnDirectionsCount\t= \"Asignar direcciones de los objetivos de $spell:70126 y contar en la fase 2\",\n\tAchievementCheck\t\t\t= \"Anunciar avisos del logro 'Sacúdete' en el chat de banda (requiere líder o ayudante)\",\n\tRangeFrame\t\t\t\t\t= \"Mostrar marco de distancia (10/20 m) dinámico en función de la última habilidad usada por el jefe y los perjuicios de los jugadores\"\n})\n\nL:SetMiscLocalization({\n\tYellAirphase\t\t= \"¡Aquí termina vuestra incursión! ¡Nadie sobrevivirá!\",\n\tYellPhase2\t\t\t= \"¡Ahora sentid el poder sin fin de mi maestro y desesperad!\",\n\tYellAirphaseDem\t\t= \"Rikk zilthuras rikk zila Aman adare tiriosh \",--Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tYellPhase2Dem\t\t= \"Zar kiel xi romathIs zilthuras revos ruk toralar \",--Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tBeaconIconSet\t\t= \"Icono {rt%d} de Señal de Escarcha en %s\",\n\tAchievementWarning\t= \"Aviso: %s tiene 5 acumulaciones de Sacudida mística\",\n\tAchievementFailed\t= \">> LOGRO FALLADO: %s tiene %d acumulaciones de Sacudida mística <<\"\n})\n\n--------------------\n-- El Rey Exánime --\n--------------------\nL = DBM:GetModLocalization(\"LichKing\")\n\nL:SetGeneralLocalization({\n\tname = \"El Rey Exánime\"\n})\n\nL:SetWarningLocalization({\n\tValkyrWarning\t\t\t= \"¡%s >%s< %s ha sido agarrado!\",\n\tSpecWarnYouAreValkd\t\t= \"¡Te han agarrado!!\",\n\tWarnNecroticPlagueJump\t= \"Plaga necrótica salta a >%s<\",\n\tSpecWarnValkyrLow\t\t= \"Val'kyr por debajo del 55%\"\n})\n\nL:SetTimerLocalization({\n\tTimerRoleplay\t\t\t\t= \"Diálogo\",\n\tPhaseTransition\t\t\t\t= \"Intermedio\",\n\tTimerNecroticPlagueCleanse\t= \"Purgar Plaga necrótica\"\n})\n\nL:SetOptionLocalization({\n\tTimerRoleplay\t\t\t\t= \"Mostrar temporizador para los diálogos\",\n\tWarnNecroticPlagueJump\t\t= \"Anunciar objetivos de los saltos de $spell:70337\",\n\tTimerNecroticPlagueCleanse\t= \"Mostrar temporizador para purgar Plaga necrótica antes del primer pulso\",\n\tPhaseTransition\t\t\t\t= \"Mostrar duración de los intermedios\",\n\tValkyrWarning\t\t\t\t= \"Anunciar jugadores agarrados por las Guardias de las Sombras Val'kyr\",\n\tSpecWarnYouAreValkd\t\t\t= \"Mostrar aviso especial cuando te agarrae una Guardia de las Sombras Val'kyr\",--npc36609\n\tAnnounceValkGrabs\t\t\t= \"Anunciar jugadores agarrados por las Guardias de las Sombras Val'kyr en el chat de banda (requiere líder o ayudante)\",\n\tSpecWarnValkyrLow\t\t\t= \"Mostrar aviso especial cuando una Guardia de las Sombras Val'kyr esté por debajo del 55% de salud\",\n\tAnnouncePlagueStack\t\t\t= \"Anunciar acumulaciones de $spell:70337 en el chat de banda (al llegar a 10 y tras cada 5; requiere líder o ayudante)\",\n\tShowFrame\t\t\t\t\t= \"Mostrar marco de objetivos de Val'Kyr\",\n\tFrameClassColor\t\t\t\t= \"Usar colores de clase en el marco de objetivos de Val'Kyr\",\n\tFrameUpwards\t\t\t\t= \"Expande el marco de Val'Kyr hacia arriba\",\n\tFrameLocked\t\t\t\t\t= \"Bloquear el marco de los objetivos de Val'Kyr\",\n\tRemoveImmunes\t\t\t\t= \"Eliminar los hechizos de inmunidad antes de salir de la habitación Frostmourne\"\n})\n\nL:SetMiscLocalization({\n\tLKPull\t\t\t\t\t= \"¿Así que por fin ha llegado la elogiada justicia de la Luz? ¿Debería deponer la Agonía de Escarcha y confiar en tu piedad, Vadín?\",\n\tLKRoleplay\t\t\t\t= \"¿Me pregunto si de verdad os mueve la... rectitud?\",\n\tValkGrabbedIcon\t\t\t= \"Una Val'kyr ha agarrado a %s {rt%d}\",\n\tValkGrabbed\t\t\t\t= \"Una Val'kyr ha agarrado a %s\",\n\tPlagueStackWarning\t\t= \"Aviso: %s tiene %d acumulaciones de Peste necrótica\",\n\tAchievementCompleted\t= \">> LOGRO COMPLETADO: %s tiene %d acumulaciones de Plaga necrótica <<\",\n\tFrameTitle\t\t\t\t= \"Valkyr targets\", --Needs Translating\n\tFrameLock\t\t\t\t= \"Frame Lock\", --Needs Translating\n\tFrameClassColor\t\t\t= \"Use Class Colors\", --Needs Translating\n\tFrameOrientation\t\t= \"Expand upwards\", --Needs Translating\n\tFrameHide\t\t\t\t= \"Hide Frame\", --Needs Translating\n\tFrameClose\t\t\t\t= \"Close\", --Needs Translating\n\tFrameGUIDesc\t\t\t= \"Marco Val'Kyr\",\n\tFrameGUIMoveMe\t\t\t= \"Mover marco Val'Kyr\"\n})\n\n----------------------\n-- Enemigos menores --\n----------------------\nL = DBM:GetModLocalization(\"ICCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"Enemigos menores\"\n})\n\nL:SetWarningLocalization({\n\tSpecWarnTrapL\t\t= \"Trampa activada - ¡se ha liberado un Depositario vinculado a la muerte!\",\n\tSpecWarnTrapP\t\t= \"Trampa activada - ¡se aproximan Siegacarnes vengativos!\",\n\tSpecWarnGosaEvent\t= \"¡Emboscada de Sindragosa iniciada!\"\n})\n\nL:SetOptionLocalization({\n\tSpecWarnTrapL\t\t= \"Mostrar aviso especial cuando se active una trampa de Depositario vinculado a la muerte\",\n\tSpecWarnTrapP\t\t= \"Mostrar aviso especial cuando se active una trampa de Siegacarnes vengativos\",\n\tSpecWarnGosaEvent\t= \"Mostrar aviso especial cuando comience el evento de la emboscada de Sindragosa\"\n})\n\nL:SetMiscLocalization({\n\tWarderTrap1\t\t\t= \"¿Quién... anda ahí?\",\n\tWarderTrap2\t\t\t= \"Estoy despierto...\",\n\tWarderTrap3\t\t\t= \"El sagrario del maestro ha sido perturbado.\",\n\tFleshreaperTrap1\t= \"Rápido, ¡atacaremos por la espalda!\",\n\tFleshreaperTrap2\t= \"¡No... puedes escapar!\",\n\tFleshreaperTrap3\t= \"¿Los vivos? ¿¡Aquí!?\",\n\tSindragosaEvent\t\t= \"No debéis acercaros a la Reina de Escarcha. ¡Detenedlos, rápido!\"\n})\n"
  },
  {
    "path": "DBM-Icecrown/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\n\nlocal L\n\n----------------------\n--  Lord Marrowgar  --\n----------------------\nL = DBM:GetModLocalization(\"LordMarrowgar\")\n\nL:SetGeneralLocalization({\n\tname = \"Seigneur Gargamoelle\"\n})\n\n-------------------------\n--  Lady Deathwhisper  --\n-------------------------\nL = DBM:GetModLocalization(\"Deathwhisper\")\n\nL:SetGeneralLocalization({\n\tname = \"Dame Murmemort\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t= \"Nouveaux Adds\"\n})\n\nL:SetWarningLocalization({\n\tWarnReanimating\t\t\t\t= \"Les adds revivent\",\n\tWarnAddsSoon\t\t\t\t= \"Nouveaux adds bientôt\",\n\tSpecWarnVengefulShade\t\t= \"Ombre vengeresse vous attaque - COUREZ\",\n\tWeaponsStatus\t\t\t\t= \"Auto-déséquipement activé: %s (%s - %s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon\t\t\t\t= \"Montre une pré-alerte avant que les adds arrivent\",\n\tWarnReanimating\t\t\t\t= \"Montre une alerte quand les adds vont revenir à la vie\",\n\tTimerAdds\t\t\t\t\t= \"Montre le timer pour les nouveaux adds\",\n\tSpecWarnVengefulShade\t\t= \"Montre une alerte spéciale quand vous êtes attaquer par une Ombre vengeresse\",\n\tWeaponsStatus\t\t\t\t= \"Alerte spéciale si la fonction de déséquipement n'est pas active au début du combat\",\n\tShieldHealthFrame\t\t\t= \"Montre la vie du boss avec une barre de vie pour la $spell:70842\",\n\tSoundWarnCountingMC\t\t\t= \"Jouer un son à 5 secondes du Contrôle mental\",\n--\tRemoveDruidBuff\t\t\t\t= \"Retire $spell:48469 / $spell:48470 24 secondes après le début du combat\",\n\tRemoveBuffsOnMC\t\t\t\t= \"Retirez les buffs lorsque $spell:71289 est lancé sur vous. Chaque option est cumulative.\",\n\tGift\t\t\t\t\t\t= \"Supprimer $spell:48469 / $spell:48470. Approche minimale pour éviter $spell:33786 résistances.\",\n\tCCFree\t\t\t\t\t\t= \"+ Supprimer $spell:48169 / $spell:48170. Tient compte des résistances des sorts de l'école de l'ombre.\",\n\tShortOffensiveProcs\t\t\t= \"+ Supprimer les procs offensifs qui ont une faible durée. Recommandé pour la sécurité du raid sans compromettre les dégâts du raid.\",\n\tMostOffensiveBuffs\t\t\t= \"+ Supprimer la plupart des buffs offensifs (principalement pour les Casters et les |cFFFF7C0AFarouche Druide|r). Sécurité maximale pour les raids avec une perte de dégâts et la nécessité de s'auto-rebuffer/shapeshift!\",\n\tEqUneqWeapons\t\t\t\t= \"Retire/équipe les armes si le $spell:71289 est lancé sur vous. Pour que cela fonctionne, créez un set appellé \\\"pve\\\".\",\n\tEqUneqTimer\t\t\t\t\t= \"Retire les armes à CHAQUE fois selon le timer (si votre ping est élevé). L'option de dessus doit être active.\"\n})\n\nL:SetMiscLocalization({\n\tYellReanimatedFanatic\t= \"Lève-toi, dans l'exultation de cette nouvelle pureté\",\n\tShieldPercent\t\t\t= \"Barrière de mana\",\n--\tFanatic1\t\t\t\t= \"Membres du culte\",\n--\tFanatic2\t\t\t\t= \"Fanatique déformé\",\n--\tFanatic3\t\t\t\t= \"Fanatique réanimé\",\n\tsetMissing\t\t\t\t= \"ATTENTION! DBM auto-déséquipement d'arme ne fonctionnera pas tant que vous n'aurez pas créer un set apellé pve\",\n\tEqUneqLineDescription\t= \"Équiper/Déséquiper automatiquement\"\n})\n\n----------------------\n--  Gunship Battle  --\n----------------------\nL = DBM:GetModLocalization(\"GunshipBattle\")\n\nL:SetGeneralLocalization({\n\tname = \"Bataille des canonnières\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsSoon\t= \"Nouveaux Add Bientôt\"\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon\t\t= \"Montre une alerte avant que les adds arrivent\",\n\tTimerAdds\t\t\t= \"Montre le timer pour les nouveaux adds\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t\t\t= \"Nouveaux Adds\"\n})\n\nL:SetMiscLocalization({\n\tPullAlliance\t= \"Faites chauffer les moteurs ! On a rencart avec le destin, les gars !\",\n\tPullHorde\t\t= \"Levez-vous, fils et filles de la Horde ! Aujourd’hui, nous affrontons le plus haï de nos ennemis ! LOK’TAR OGAR !\",\n\tAddsAlliance\t= \"Saccageurs, sergents, à l'attaque !\",\n\tAddsHorde\t\t= \"Soldats, sergents, à l'attaque !\",\n\tMageAlliance\t= \"La coque est endommagée, qu'un mage de bataille aille faire taire leurs canons !\",\n\tMageHorde\t\t= \"La coque déguste sévère, qu'un sorcier aille me faire taire ces canons !\",\n\tKillAlliance\t= \"Vous direz pas que j'vous avais pas prévenus, canailles ! Mes frères et sœurs, en avant !\",\n\tKillHorde\t\t= \"L'Alliance baisse pavillon. Sus au roi-liche !\"\n})\n\n-----------------------------\n--  Deathbringer Saurfang  --\n-----------------------------\nL = DBM:GetModLocalization(\"Deathbringer\")\n\nL:SetGeneralLocalization({\n\tname = \"Porte-Mort Saurcroc\"\n})\n\nL:SetOptionLocalization({\n\tRunePowerFrame\t\t= \"Montre la barre de vie du boss + la barre de $spell:72371\",\n--\tRemoveDI\t\t\t= \"Supprimez $spell:19752 s'il est utilisé pour empêcher le lancement du sort $spell:72293.\"\n})\n\nL:SetMiscLocalization({\n\tRunePower\t\t\t= \"Bêtes de sang\",\n\tPullAlliance\t\t= \"Bon allez, on se bouge\",\n\tPullHorde\t\t\t= \"Kor'krons, en route ! Champions, surveillez bien vos arrières. Le Fléau a été -\"\n})\n\n-----------------\n--  Festergut  --\n-----------------\nL = DBM:GetModLocalization(\"Festergut\")\n\nL:SetGeneralLocalization({\n\tname = \"Pulentraille\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceSporeIcons\t= \"Annonce les icônes pour les cibles de $spell:69279 au chat de raid<br/>(nécessite le raid lead)\",\n\tAchievementCheck\t= \"Annonce l'échec du haut-fait 'Pénurie de vaccins' au raid<br/>(nécessite un statut promu)\"\n})\n\nL:SetWarningLocalization({\n\tSporeSet\t\t\t= \"Icône de Spore gazeuse {rt%d} mise sur %s\",\n\tAchievementFailed\t= \">> HAUT-FAIT ÉCHOUÉ : %s a %d stacks d'Inoculé <<\"\n})\n\n---------------\n--  Rotface  --\n---------------\nL = DBM:GetModLocalization(\"Rotface\")\n\nL:SetGeneralLocalization({\n\tname = \"Trognepus\"\n})\n\nL:SetWarningLocalization({\n\tWarnOozeSpawn\t\t\t\t= \"Les Limons sont arrivées\",\n\tWarnUnstableOoze\t\t\t= \"%s sur >%s< (%s)\",\n\tSpecWarnLittleOoze\t\t\t= \"Les Limons vous attaque - COUREZ\"\n})\n\nL:SetOptionLocalization({\n\tWarnOozeSpawn\t\t\t\t= \"Montre une alerte pour l'arrivée des Limons\",\n\tSpecWarnLittleOoze\t\t\t= \"Montre une alerte spéciale quand vous êtes attaquer par des Limons\",\n\tTankArrow\t\t\t\t\t= \"Afficher la flèche DBM pour le kiter du Grand limon (Expérimental)\"\n})\n\nL:SetMiscLocalization({\n\tYellSlimePipes1\t\t\t\t= \"réparé le distributeur de poison\",\t-- Professor Putricide\n\tYellSlimePipes2\t\t\t\t= \"Great news, everyone! The slime is flowing again!\"\t-- Professor Putricide\n})\n\n---------------------------\n--  Professor Putricide  --\n---------------------------\nL = DBM:GetModLocalization(\"Putricide\")\n\nL:SetGeneralLocalization({\n\tname = \"Professeur Putricide\"\n})\n\nL:SetWarningLocalization({\n\tWarnReengage\t\t\t= \"%s: Ré-engagement\"\n})\n\nL:SetTimerLocalization({\n\tTimerReengage\t\t\t= \"Ré-engagement\"\n})\n\n--[[L:SetOptionLocalization({\n\tWarnReengage\t\t\t= \"Show warning for Boss re-engage\", -- needs localization\n\tTimerReengage\t\t\t= \"Show timer for Boss re-engage\" -- needs localization\n})]]\n\nL:SetMiscLocalization({\n\tYellTransform1\t\t\t= \"Mmm, je ne sens plus rien. Woah ?! Mais ça vient d'où, tout ça ?\",\n\tYellTransform2\t\t\t= \"Au bon goût de… Cerise ! Oups ! Pardon !\"\n})\n\n----------------------------\n--  Blood Prince Council  --\n----------------------------\nL = DBM:GetModLocalization(\"BPCouncil\")\n\nL:SetGeneralLocalization({\n\tname = \"Princes de Sang\"\n})\n\nL:SetWarningLocalization({\n\tWarnTargetSwitch\t\t= \"Changement de cible sur : %s\",\n\tWarnTargetSwitchSoon\t= \"Changement de cible bientôt\"\n})\n\nL:SetTimerLocalization({\n\tTimerTargetSwitch\t\t= \"Possible changement de cible\"\n})\n\nL:SetOptionLocalization({\n\tWarnTargetSwitch\t\t= \"Montre l'alerte pour le changement de cible\",\n\tWarnTargetSwitchSoon\t= \"Montre une pré-alerte pour le changement de cible\",\n\tTimerTargetSwitch\t\t= \"Montre un timer pour le changement de cible\",\n\tActivePrinceIcon\t\t= \"Place l'icône de raid principale sur le prince de sang actuellement surpuissant (nécessite d'être assistant ou mieux).\",\n\tShadowPrisonMetronome\t= \"Joue un son de clic répétitif de 1 seconde pour éviter $spell:72999\"\n})\n\nL:SetMiscLocalization({\n\tKeleseth\t\t\t= \"Prince Keleseth\",\n\tTaldaram\t\t\t= \"Prince Taldaram\",\n\tValanar\t\t\t\t= \"Prince Valanar\",\n\tFirstPull\t\t\t= \"Naïfs mortels. Vous pensiez nous avoir vaincus si facilement ? Les San'layn sont les soldats immortels du roi-liche ! Maintenant, vous allez subir leurs puissances réunies !\",\n\tEmpoweredFlames\t\t= \"L'Embrasement surpuissant (%S+)!\"\n})\n\n-----------------------------\n--  Blood-Queen Lana'thel  --\n-----------------------------\nL = DBM:GetModLocalization(\"Lanathel\")\n\nL:SetGeneralLocalization({\n\tname = \"Reine de sang Lana'thel\"\n})\n\nL:SetMiscLocalization({\n\tSwarmingShadows\t\t\t= \"Shadows amass and swarm around (%S+)!\",\n\tYellFrenzy\t\t\t\t= \"J'ai faim!\"\n})\n\n-----------------------------\n--  Valithria Dreamwalker  --\n-----------------------------\nL = DBM:GetModLocalization(\"Valithria\")\n\nL:SetGeneralLocalization({\n\tname = \"Valithria Marcherêve\"\n})\n\nL:SetWarningLocalization({\n\tWarnPortalOpen\t= \"Portails actifs !\"\n})\n\nL:SetTimerLocalization({\n\tTimerPortalsOpen\t\t\t= \"Arrivée des portails\",\n\tTimerPortalsClose\t\t\t= \"Portals close\",\n\tTimerBlazingSkeleton\t\t= \"Next Blazing Skeleton\",\n\tTimerAbom\t\t\t\t\t= \"Next Abomination (%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPortalOpen\t\t\t\t= \"Prévient via une alerte quand Valithria ouvre des portails.\",\n\tTimerPortalsOpen\t\t\t= \"Montre une timer pour voir quand Valithria ouvre des portails.\",\n\tTimerPortalsClose\t\t\t= \"Afficher le timer lorsque Portail cauchemardesque est fermé\",\n\tTimerBlazingSkeleton\t\t= \"Afficher le timer pour l'apparition du prochain Squelette flamboyant\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"Des intrus se sont introduits dans le sanctuaire. Hâtez-vous d'achever le dragon vert ! Ne gardez que les os et les tendons, pour la réanimation !\",\n\tYellPortals\t\t= \"J'ai ouvert un portail vers le Rêve. Vous y trouverez votre salut, héros…\"\n})\n\n------------------\n--  Sindragosa  --\n------------------\nL = DBM:GetModLocalization(\"Sindragosa\")\n\nL:SetGeneralLocalization({\n\tname = \"Sindragosa\"\n})\n\nL:SetWarningLocalization({\n\tWarnAirphase\t\t\t= \"Phase dans les airs\",\n\tWarnGroundphaseSoon\t\t= \"Sindragosa atterrit bientôt\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextAirphase\t\t= \"Prochaine phase dans les airs\",\n\tTimerNextGroundphase\t= \"Prochaine phase sur le sol\",\n\tAchievementMystic\t\t= \"Enlevez les stacks Mystiques\"\n})\n\nL:SetOptionLocalization({\n\tWarnAirphase\t\t\t\t= \"Annonce la phase dans les airs\",\n\tWarnGroundphaseSoon\t\t\t= \"Montre une pré-alerte pour la phase au sol\",\n\tTimerNextAirphase\t\t\t= \"Montre un timer pour la prochaine phase dans les airs\",\n\tTimerNextGroundphase\t\t= \"Montre un timer pour la prochaine phase au sol\",\n\tAnnounceFrostBeaconIcons\t= \"Annonce les icônes pour les cibles de $spell:70126 dans le chat de raid (requires announce to be enabled and leader/promoted status)\",\n\tClearIconsOnAirphase\t\t= \"Retire toutes les icones avant la phase d'envol\",\n\tAssignWarnDirectionsCount\t= \"Attribuez des directions aux cibles $spell:70126 et comptez sur la phase 2\",\n\tAchievementCheck\t\t\t= \"Annonce les alertes du haut-fait 'Tout ce que vous pouvez rafler' au raid<br/>(nécessite un statut promu)\",\n\tRangeFrame\t\t\t\t\t= \"Montre la fenêtre de portée (10 normal, 20 heroic) (Montre uniquement les icônes marquer sur les joueurs)\"\n})\n\nL:SetMiscLocalization({\n\tYellAirphase\t\t= \"Votre incursion s'arrête ici\",\n\tYellPhase2\t\t\t= \"Sentez maintenant le pouvoir infini de mon\",\n\tYellAirphaseDem\t\t= \"Rikk zilthuras rikk zila Aman adare tiriosh \",--Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tYellPhase2Dem\t\t= \"Zar kiel xi romathIs zilthuras revos ruk toralar \",--Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tBeaconIconSet\t\t= \"Icône de Guide de givre {rt%d} mis sur %s\",\n\tAchievementWarning\t= \"Alerte : %s à 5 stacks de Rafale mystique\",\n\tAchievementFailed\t= \">> HAUT-FAIT ÉCHOUÉ : %s à %d stacks de Rafale mystique <<\",\n})\n\n---------------------\n--  The Lich King  --\n---------------------\nL = DBM:GetModLocalization(\"LichKing\")\n\nL:SetGeneralLocalization({\n\tname = \"Le Roi Liche\"\n})\n\nL:SetWarningLocalization({\n\tValkyrWarning\t\t\t= \"%s >%s< %s est saisi !\",\n\tSpecWarnYouAreValkd\t\t= \"Vous avez été saisi\",\n\tWarnNecroticPlagueJump\t= \"La Peste nécrotique a sauter sur >%s<\",\n\tSpecWarnValkyrLow\t\t= \"Valkyr sous les 55%\"\n})\n\nL:SetTimerLocalization({\n\tTimerRoleplay\t\t\t\t= \"Jeux de rôle\",\n\tPhaseTransition\t\t\t\t= \"Phase de transition\",\n\tTimerNecroticPlagueCleanse\t= \"Peste nécrotique Dispell\"\n})\n\nL:SetOptionLocalization({\n\tTimerRoleplay\t\t\t\t= \"Montre le timer pour l'event de rôle\",\n\tWarnNecroticPlagueJump\t\t= \"Annonce sur qui saute la $spell:73912\",\n\tTimerNecroticPlagueCleanse\t= \"Montre le timer pour dispell la Peste nécrotique avant le premier tic\",\n\tPhaseTransition\t\t\t\t= \"Montre le timer pour la phase de transition\",\n\tValkyrWarning\t\t\t\t= \"Annonce qui a été saisi par les Gardes de l'ombre val'kyr\",\n\tSpecWarnYouAreValkd\t\t\t= \"Affiche une alerte spéciale lorsque vous avez été pris par une Garde de l'ombre val'kyr\",--npc36609\n\tAnnounceValkGrabs\t\t\t= \"Annonce les cibles prises par les Gardes de l'ombre val'kyr\\n(nécessite un statut promu)\",\n\tSpecWarnValkyrLow\t\t\t= \"Affiche une alerte spéciale lorsque la Garde de l'ombre val'kyr est sous les 55% PDV\",\n\tAnnouncePlagueStack\t\t\t= \"Annonce les $spell:73912 stacks au raid (10 stacks, toutes les 5 après 10)\\n(nécessite un statut promu)\",\n\tShowFrame\t\t\t\t\t= \"Affiche une fenêtre des cibles des Val'Kyr\",\n\tFrameClassColor\t\t\t\t= \"Utiliser les couleurs de classes dans la fenêtre des cibles de Val'Kyr\",\n\tFrameUpwards\t\t\t\t= \"Étendre la fenêtre des cibles Val'Kyr vers le haut\",\n\tFrameLocked\t\t\t\t\t= \"Verouiller la fenêtre des cibles Val'Kyr\",\n\tRemoveImmunes\t\t\t\t= \"Enlève les sorts d'immunité avant de sortir de la chambre de Deuillegivre\"\n})\n\nL:SetMiscLocalization({\n\tLKPull\t\t\t\t\t= \"Voici donc qu’arrive la fameuse justice de la Lumière ? Dois-je déposer Deuillegivre et me jeter à tes pieds en implorant pitié, Fordring ?\",\n\tLKRoleplay\t\t\t\t= \"Est-ce vraiment la justice qui vous anime ? Je me demande…\",\n\tValkGrabbedIcon\t\t\t= \"Gardes de l'ombre val'kyr {rt%d} a pris %s\",\n\tValkGrabbed\t\t\t\t= \"Gardes de l'ombre val'kyr a pris %s\",\n\tPlagueStackWarning\t\t= \"Alerte : %s a %d stacks de Peste nécrotique\",\n\tAchievementCompleted\t= \">> HAUT-FAIT ÉCHOUÉ : %s a %d stacks de Peste nécrotique <<\",\n\tFrameTitle\t\t\t\t= \"Cibles Valkyr\",\n\tFrameLock\t\t\t\t= \"Vérouiller fenêtre\",\n\tFrameClassColor\t\t\t= \"Utiliser couleurs de Classes\",\n\tFrameOrientation\t\t= \"Étendre vers le haut\",\n\tFrameHide\t\t\t\t= \"Cacher fenêtre\",\n\tFrameClose\t\t\t\t= \"Fermer\",\n\tFrameGUIDesc\t\t\t= \"Cadre Val'Kyr\",\n\tFrameGUIMoveMe\t\t\t= \"Déplacer le cadre Val'Kyr\"\n})\n\n-------------\n--  Trash  --\n-------------\nL = DBM:GetModLocalization(\"ICCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"Icecrown Trash\"\n})\n\nL:SetWarningLocalization({\n\tSpecWarnTrapL\t\t= \"Piège Activé! - Gardien lié par la mort libéré\",\n\tSpecWarnTrapP\t\t= \"Piège Activé! - arrivé de Fauche-chair vengeurs\",\n\tSpecWarnGosaEvent\t= \"Le défi de Sindragosa commencé !\"\n})\n\nL:SetOptionLocalization({\n\tSpecWarnTrapL\t\t= \"Afficher une alerte spéciale pour l'activation du piège Gardien lié par la mort\",\n\tSpecWarnTrapP\t\t= \"Afficher une alerte spéciale pour l'activation du piège Fauche-chair vengeurs\",\n\tSpecWarnGosaEvent\t= \"Afficher une alerte spéciale pour le défi de Sindragosa\"\n})\n\nL:SetMiscLocalization({\n\tWarderTrap1\t\t\t= \"Qui... va là ?\",\n\tWarderTrap2\t\t\t= \"Je... m’éveille...\",\n\tWarderTrap3\t\t\t= \"Le sanctuaire du maître a été dérangé.\",\n\tFleshreaperTrap1\t= \"Vite, on va les prendre en embuscade par derrière !\",\n\tFleshreaperTrap2\t= \"Vous ne pouvez pas nous échapper !\",\n\tFleshreaperTrap3\t= \"Les vivants ? Ici ?!\",\n\tSindragosaEvent\t\t= \"Nul n'approche la reine du Givre. Arrêtez-les, vite !\"\n})\n"
  },
  {
    "path": "DBM-Icecrown/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\n\nlocal L\n\n----------------------\n--  Lord Marrowgar  --\n----------------------\nL = DBM:GetModLocalization(\"LordMarrowgar\")\n\nL:SetGeneralLocalization({\n\tname = \"군주 매로우가르\"\n})\n\n-------------------------\n--  Lady Deathwhisper  --\n-------------------------\nL = DBM:GetModLocalization(\"Deathwhisper\")\n\nL:SetGeneralLocalization({\n\tname = \"여교주 데스위스퍼\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t= \"다음 이교도\"\n})\n\nL:SetWarningLocalization({\n\tWarnReanimating\t\t\t\t= \"이교도 부활\",\t\t\t-- Reanimating an adherent or fanatic\n\tWarnAddsSoon\t\t\t\t= \"곧 새로운 이교도 등장\",\n\tSpecWarnVengefulShade\t\t= \"복수의 망령 공격 - 피하세요!\",--creatureid 38222\n\tWeaponsStatus\t\t\t\t= \"Auto Unequipping enabled: %s (%s - %s)\" --Needs Translating\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon\t\t\t\t= \"이교도 등장 이전에 알림 보기\",\n\tWarnReanimating\t\t\t\t= \"이교도 부활 알림 보기\",\n\tTimerAdds\t\t\t\t\t= \"다음 이교도 바 보기\",\n\tSpecWarnVengefulShade\t\t= \"복수의 망령으로부터 공격을 받을 경우 특수 경고 보기\",--creatureid 38222\n\tWeaponsStatus\t\t\t\t= \"Special warning at combat start if unequip/equip function is enabled\", --Needs Translating\n\tShieldHealthFrame\t\t\t= \"$spell:70842의 방어막 바와 보스 체력바를 함께 보기\",\n\tSoundWarnCountingMC\t\t\t= \"Play a 5 second audio countdown for Mind Control\", --Needs Translating\n--\tRemoveDruidBuff\t\t\t\t= \"Remove $spell:48469 / $spell:48470 24 seconds into the fight\", --Needs Translating\n\tRemoveBuffsOnMC\t\t\t\t= \"$spell:71289를 시전하면 버프를 제거합니다. 각 옵션은 누적됩니다.\",\n\tGift\t\t\t\t\t\t= \"$spell:48469 / $spell:48470을 제거합니다. $spell:33786 저항을 방지하기 위한 최소한의 접근입니다.\",\n\tCCFree\t\t\t\t\t\t= \"+ $spell:48169 / $spell:48170을 제거합니다. 그림자 학교의 주문 저항을 설명합니다.\",\n\tShortOffensiveProcs\t\t\t= \"+ 지속 시간이 짧은 공격 절차를 제거합니다. 공격대 피해 출력을 손상시키지 않으면서 공격대 안전을 위해 권장됩니다.\",\n\tMostOffensiveBuffs\t\t\t= \"+ 대부분의 공격 버프를 제거합니다(주로 캐스터 및 |cFFFF7C0A야성 드루이드|r용). 손상 출력 손실로 최대 레이드 안전 및 자체 버프/변형이 필요합니다!\",\n\tEqUneqWeapons\t\t\t\t= \"Unequip/equip weapons if $spell:71289 is cast on you. For equipping to work, create a COMPLETE (with the weapons of choice that will be equipped) equipment set named \\\"pve\\\".\", --Needs Translating\n\tEqUneqTimer\t\t\t\t\t= \"Remove weapons by timer ALWAYS, not on cast (if ping is high). The option above must be enabled.\" --Needs Translating\n})\n\nL:SetMiscLocalization({\n\tYellReanimatedFanatic\t= \"일어나라, 순수한 모습을 기뻐하라!\",\n\tShieldPercent\t\t\t= \"마나 방벽\",\n--\tFanatic1\t\t\t\t= \"교단 광신자\",\n--\tFanatic2\t\t\t\t= \"변형된 광신자\",\n--\tFanatic3\t\t\t\t= \"되살아난 광신자\",\n\tsetMissing\t\t\t\t= \"주목! DBM 자동 무기 해제/장착은 pve라는 장비 세트를 생성할 때까지 작동하지 않습니다.\",\n\tEqUneqLineDescription\t= \"자동 장착/장비 해제\"\n})\n\n----------------------\n--  Gunship Battle  --\n----------------------\nL = DBM:GetModLocalization(\"GunshipBattle\")\n\nL:SetGeneralLocalization({\n\tname = \"얼음왕관 비행포격선 전투\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsSoon\t= \"곧 추가 병력\"\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon\t= \"추가 병력 이전에 알림 보기\",\n\tTimerAdds\t\t= \"다음 추가 병력 바 보기\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t\t= \"다음 추가 병력\"\n})\n\nL:SetMiscLocalization({\n\tPullAlliance\t= \"속도를 올려라! 제군들, 곧 운명과 마주할 것이다!\",\n\tPullHorde\t\t= \"호드의 아들딸이여, 일어나라! 오늘 우리는 증오하던 적과 전투를 벌이리라! 록타르 오가르!\",\n\tAddsAlliance\t= \"약탈자, 하사관, 공격하라!\",\n\tAddsHorde\t\t= \"해병, 하사관, 공격하라!\",\n\tMageAlliance\t= \"선체가 공격받고 있다. 전투마법사를 불러 저 대포를 막아버려라!\",\n\tMageHorde\t\t= \"선체가 공격받고 있다. 마술사를 불러 저 대포를 막아버려라!\",\n\tKillAlliance\t= \"악당 놈들, 분명히 경고했다! 형제자매여, 전진!\",\n\tKillHorde\t\t= \"얼라이언스는 기가 꺾였다. 리치 왕을 향해 전진하라!\"\n})\n\n-----------------------------\n--  Deathbringer Saurfang  --\n-----------------------------\nL = DBM:GetModLocalization(\"Deathbringer\")\n\nL:SetGeneralLocalization({\n\tname = \"죽음의 인도자 사울팽\"\n})\n\nL:SetOptionLocalization({\n\tRunePowerFrame\t\t= \"보스 체력 바와 함께 $spell:72371 바 보기\",\n--\tRemoveDI\t\t\t= \"$spell:19752를 지웁니다. $spell:72293이 캐스팅되지 않도록 합니다.\"\n})\n\nL:SetMiscLocalization({\n\tRunePower\t\t\t= \"피 마력\",\n\tPullAlliance\t\t= \"그러면 이동하자! 이동...\",\n\tPullHorde\t\t\t= \"코르크론, 출발하라! 용사들이여, 뒤를 조심하게. 스컬지는...\"\n})\n\n-----------------\n--  Festergut  --\n-----------------\nL = DBM:GetModLocalization(\"Festergut\")\n\nL:SetGeneralLocalization({\n\tname = \"구린속\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceSporeIcons\t= \"$spell:69279 대상 공격대 징표 채팅으로 알리기\\n(공대장 혹은 권한을 가진 사람만 사용 가능)\",\n\tAchievementCheck\t= \"역병 예방 접종 업적 실패시 실패 내용을 공격대 대화로 알리기(공격대장 권한 필요)\"\n})\n\nL:SetMiscLocalization({\n\tSporeSet\t\t\t= \"가스 포자 아이콘{rt%d} : %s\",\n\tAchievementFailed\t= \">> 업적 실패 - 역병 저항 : %s (%d 중첩) <<\"\n})\n\n---------------\n--  Rotface  --\n---------------\nL = DBM:GetModLocalization(\"Rotface\")\n\nL:SetGeneralLocalization({\n\tname = \"썩은얼굴\"\n})\n\nL:SetWarningLocalization({\n\tWarnOozeSpawn\t\t\t\t= \"작은 수액괴물 생성\",\n\tSpecWarnLittleOoze\t\t\t= \"작은 수액괴물의 공격! - 뛰세요!\"--creatureid 36897\n})\n\nL:SetOptionLocalization({\n\tWarnOozeSpawn\t\t\t\t= \"작은 수액괴물 생성 알림 보기\",\n\tSpecWarnLittleOoze\t\t\t= \"작은 수액괴물에게 공격을 받을 경우 특수 경고 보기\",\n\tTankArrow\t\t\t\t\t= \"큰 수액괴물 탱커 방향 DBM 화살표 보기(테스트)\"\n})\n\nL:SetMiscLocalization({\n\tYellSlimePipes1\t= \"좋은 소식이에요, 여러분! 독성 수액 배출관을 고쳤어요!\",\t-- Professor Putricide\n\tYellSlimePipes2\t= \"끝내 주는 소식이에요, 여러분! 수액이 다시 나오는군요!\"\t-- Professor Putricide\n})\n\n---------------------------\n--  Professor Putricide  --\n---------------------------\nL = DBM:GetModLocalization(\"Putricide\")\n\nL:SetGeneralLocalization({\n\tname = \"교수 퓨트리사이드\"\n})\n\nL:SetWarningLocalization({\n\tWarnReengage\t\t\t= \"%s: 재전투\"\n})\n\nL:SetTimerLocalization({\n\tTimerReengage\t\t\t= \"재전투\"\n})\n\n--[[L:SetOptionLocalization({\n\tWarnReengage\t\t\t= \"Show warning for Boss re-engage\", -- needs localization\n\tTimerReengage\t\t\t= \"Show timer for Boss re-engage\" -- needs localization\n})]]\n\nL:SetMiscLocalization({\n\tYellTransform1\t\t\t= \"흠, 아무 느낌도 없군요. 엥?! 이건 어디서 온 거지요?\",\n\tYellTransform2\t\t\t= \"이 맛은... 체리군요! 오! 이런 실례!\"\n})\n\n----------------------------\n--  Blood Prince Council  --\n----------------------------\nL = DBM:GetModLocalization(\"BPCouncil\")\n\nL:SetGeneralLocalization({\n\tname = \"피의 의회\"\n})\n\nL:SetWarningLocalization({\n\tWarnTargetSwitch\t\t= \"대상 전환 : %s\",\n\tWarnTargetSwitchSoon\t= \"곧 대상 전환\"\n})\n\nL:SetTimerLocalization({\n\tTimerTargetSwitch\t\t= \"대상 전환\"\n})\n\nL:SetOptionLocalization({\n\tWarnTargetSwitch\t\t= \"대상 전환 알림 보기\",\n\tWarnTargetSwitchSoon\t= \"대상 전환 이전에 알림 보기\",\n\tTimerTargetSwitch\t\t= \"대상 전환 바 보기\",\n\tActivePrinceIcon\t\t= \"활성화 된 공작에게 전술 목표 아이콘 설정(해골)\",\n\tShadowPrisonMetronome\t= \"$spell:72999를 피하기 위해 반복적인 1초 클릭 사운드 재생\"\n})\n\nL:SetMiscLocalization({\n\tKeleseth\t\t\t= \"공작 켈레세스\",\n\tTaldaram\t\t\t= \"공작 탈다람\",\n\tValanar\t\t\t\t= \"공작 발라나르\",\n\tFirstPull\t\t\t= \"어리석은 필멸자들 같으니. 그리 쉽게 우리를 이겼다고 생각했어? 산레인은 리치 왕이 다스리는 불멸의 병사들이야! 이제 합쳐진 그 힘을 보여주겠어!\",\n\tEmpoweredFlames\t\t= \"강력한 불꽃이 (%S+)\"\n})\n\n-----------------------\n--  Queen Lana'thel  --\n-----------------------\nL = DBM:GetModLocalization(\"Lanathel\")\n\nL:SetGeneralLocalization({\n\tname = \"피의 여왕 라나텔\"\n})\n\nL:SetOptionLocalization({\n\tRangeFrame\t\t\t\t= \"거리 창 보기 (8 m)\"\n})\n\nL:SetMiscLocalization({\n\tSwarmingShadows\t\t\t= \"어둠이 쌓이더니 (%S+)\",\n\tYellFrenzy\t\t\t\t= \"피가 모잘라~! 앙~\"\n})\n\n-----------------------------\n--  Valithria Dreamwalker  --\n-----------------------------\nL = DBM:GetModLocalization(\"Valithria\")\n\nL:SetGeneralLocalization({\n\tname = \"발리스리아 드림워커\"\n})\n\nL:SetWarningLocalization({\n\tWarnPortalOpen\t= \"차원문 열림\"\n})\n\nL:SetTimerLocalization({\n\tTimerPortalsOpen\t\t\t= \"차원문 열림\",\n\tTimerPortalsClose\t\t\t= \"차원문 닫힘\",\n\tTimerBlazingSkeleton\t\t= \"다음 타오르는 해골\",\n\tTimerAbom\t\t\t\t\t= \"다음 누더기골렘 (%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPortalOpen\t\t\t\t= \"$spell:72483 열림 알림 보기\",\n\tTimerPortalsOpen\t\t\t= \"차원문 열림 바 보기\",\n\tTimerPortalsClose\t\t\t= \"차원문 닫힘 바 보기\",\n\tTimerBlazingSkeleton\t\t= \"다음 타오르는 해골 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"침입자들이 내부 성소로 들어왔다. 서둘러 녹색용을 파멸시켜라! 되살려 낼 때 쓸 뼈와 힘줄만 남겨라!\",\n\tYellPortals\t\t= \"에메랄드의 꿈으로 가는 차원문을 열어두었다. 너희의 구원은 그 안에 있다...\"\n})\n\n------------------\n--  Sindragosa  --\n------------------\nL = DBM:GetModLocalization(\"Sindragosa\")\n\nL:SetGeneralLocalization({\n\tname = \"신드라고사\"\n})\n\nL:SetWarningLocalization({\n\tWarnAirphase\t\t\t= \"공중 단계\",\n\tWarnGroundphaseSoon\t\t= \"곧 신드라고사 착륙\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextAirphase\t\t= \"다음 공중 단계\",\n\tTimerNextGroundphase\t= \"신드라고사 착륙\",\n\tAchievementMystic\t\t= \"신비한 아픔 업적 가능\"\n})\n\nL:SetOptionLocalization({\n\tWarnAirphase\t\t\t= \"공중 단계 알림 보기\",\n\tWarnGroundphaseSoon\t\t= \"신드라고사 착륙 이전에 알림 보기\",\n\tTimerNextAirphase\t\t= \"다음 공중 단계 바 보기\",\n\tTimerNextGroundphase\t= \"신드라고사 착륙 바 보기\",\n\tAnnounceFrostBeaconIcons= \"$spell:70126 전술 목표 아이콘 설정 내역을 공격대 대화로 알리기(공격대장 권한 필요)\",\n\tClearIconsOnAirphase\t= \"공중 단계에서 모든 전술 목표 아이콘 제거\",\n\tAssignWarnDirectionsCount\t= \"$spell:70126 대상에 위치를 지정합니다. 2단계에서 $spell:70126을 세십시오\",\n\tAchievementCheck\t\t= \"신비한 아픔 업적 실패시 실패 내용을 공격대 대화로 알리기(공격대장 권한 필요)\",\n\tRangeFrame\t\t\t\t= \"강화 또는 약화 효과에 맞추어 거리 창 보기(10/20m)\"\n})\n\nL:SetMiscLocalization({\n\tYellAirphase\t\t= \"여기가 끝이다! 아무도 살아남지 못하리라!\",\n\tYellPhase2\t\t\t= \"자, 주인님의 무한한 힘을 느끼고 절망에 빠져보아라!\",--Now, feel my master's limitless power and despair!\",\n\tYellAirphaseDem\t\t= \"Rikk zilthuras rikk zila Aman adare tiriosh \",--Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tYellPhase2Dem\t\t= \"Zar kiel xi romathIs zilthuras revos ruk toralar \",--Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tBeaconIconSet\t\t= \"냉기 봉화 아이콘{rt%d} : %s\",\n\tAchievementWarning\t= \"경고 : %s님의 신비한 강타가 5 중첩입니다.\",\n\tAchievementFailed\t= \">> 업적 실패 - 신비한 아픔 : %s (%d 중첩) <<\"\n})\n\n---------------------\n--  The Lich King  --\n---------------------\nL = DBM:GetModLocalization(\"LichKing\")\n\nL:SetGeneralLocalization({\n\tname = \"리치 왕\"\n})\n\nL:SetWarningLocalization({\n\tValkyrWarning\t\t\t\t= \"발키리 납치 : %s >%s< %s\",\n\tSpecWarnYouAreValkd\t\t\t= \"발키리가 납치 중!\",\n\tWarnNecroticPlagueJump\t\t= \"괴저 역병 전이 : >%s<\",\n\tSpecWarnValkyrLow\t\t\t= \"발키리 HP 55% 이하!!\"\n})\n\nL:SetTimerLocalization({\n\tTimerRoleplay\t\t\t\t= \"이벤트 종료\",\n\tPhaseTransition\t\t\t\t= \"다음 단계\",\n\tTimerNecroticPlagueCleanse\t= \"괴저 역병 사라짐\"\n})\n\nL:SetOptionLocalization({\n\tTimerRoleplay\t\t\t\t= \"이벤트 종료 바 보기\",\n\tWarnNecroticPlagueJump\t\t= \"$spell:70337 전이 대상 알림\",\n\tTimerNecroticPlagueCleanse\t= \"$spell:70337 사라짐 바 보기\",\n\tPhaseTransition\t\t\t\t= \"다음 단계 바 보기\",\n\tValkyrWarning\t\t\t\t= \"발키리 대상 알림 보기\",\n\tSpecWarnYouAreValkd\t\t\t= \"발키리에게 붙잡혔을 때 특수 경고 보기\",\n\tAnnounceValkGrabs\t\t\t= \"발키리 대상 및 전술 목표 아이콘 설정 내용을 공격대 대화로 알리기(공격대장 권한 필요)\",\n\tSpecWarnValkyrLow\t\t\t= \"발키리의 HP가 55%이하가 된 경우 특수 경고 보기\",\n\tAnnouncePlagueStack\t\t\t= \"$spell:70337 중첩 알림 보기(10중첩 이상일때, 5 중첩마다)(공격대장 권한 필요)\",\n\tShowFrame\t\t\t\t\t= \"Show Val'Kyr Targets frame\", --Needs Translating\n\tFrameClassColor\t\t\t\t= \"Use Class Colors in Val'Kyr Targets frame\", --Needs Translating\n\tFrameUpwards\t\t\t\t= \"Expand Val'Kyr target frame upwards\", --Needs Translating\n\tFrameLocked\t\t\t\t\t= \"Lock Val'Kyr Targets frame\", --Needs Translating\n\tRemoveImmunes\t\t\t\t= \"Remove immunity spells before exiting Frostmourne room\" --Needs Translating\n})\n\nL:SetMiscLocalization({\n\tLKPull\t\t\t\t\t= \"그러니까 성스러운 빛이 자랑하던 정의가 마침내 왔다 이건가? 폴드링, 서리한을 내려놓고 자비라도 애걸하라는 건가?\",\n\tLKRoleplay\t\t\t\t= \"진정으로 정의에 이끌렸단 말이냐? 궁금하구나...\",\n\tValkGrabbedIcon\t\t\t= \"발키리 납치 : {rt%d} %s\",\n\tValkGrabbed\t\t\t\t= \"발키리 납치 : %s\",\n\tPlagueStackWarning\t\t= \"경고: 괴저역병 - %s (%d 중첩)\",\n\tAchievementCompleted\t= \">> 업적 성공 - 괴저역병 %s (%d 중첩) <<\",\n\tFrameTitle\t\t\t\t= \"Valkyr targets\", --Needs Translating\n\tFrameLock\t\t\t\t= \"Frame Lock\", --Needs Translating\n\tFrameClassColor\t\t\t= \"Use Class Colors\", --Needs Translating\n\tFrameOrientation\t\t= \"Expand upwards\", --Needs Translating\n\tFrameHide\t\t\t\t= \"Hide Frame\", --Needs Translating\n\tFrameClose\t\t\t\t= \"Close\", --Needs Translating\n\tFrameGUIDesc\t\t\t= \"발키르 프레임\",\n\tFrameGUIMoveMe\t\t\t= \"발키르 프레임 이동\"\n})\n\n-------------\n--  Trash  --\n-------------\nL = DBM:GetModLocalization(\"ICCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"얼음왕관 성채: 일반구간\"\n})\n\nL:SetWarningLocalization({\n\tSpecWarnTrapL\t\t= \"함정 활성화 - 죽음에 속박된 감시자!\",\n\tSpecWarnTrapP\t\t= \"함정 활성화 - 복수의 육신해체자!\",\n\tSpecWarnGosaEvent\t= \"신드라고사 수호병 등장!\"\n})\n\nL:SetOptionLocalization({\n\tSpecWarnTrapL\t\t= \"죽음에 속박된 감시자 함정 활성화 특수 경고 보기\",\n\tSpecWarnTrapP\t\t= \"복수의 육신해체자 함정 활성화 특수 경고 보기\",\n\tSpecWarnGosaEvent\t= \"신드라고사 수호병 특수 경고 보기\"\n})\n\nL:SetMiscLocalization({\n\tWarderTrap1\t\t\t= \"거기... 누구냐?\",\n\tWarderTrap2\t\t\t= \"내가... 깨어난다!\",\n\tWarderTrap3\t\t\t= \"주인님의 성소를 어지럽혔구나!\",\n\tFleshreaperTrap1\t= \"서둘러! 저놈들 뒤에서 습격하자!\",\n\tFleshreaperTrap2\t= \"우리에게서... 벗어날 수 없다!\",\n\tFleshreaperTrap3\t= \"살아있는 놈이... 여기에?!\",\n\tSindragosaEvent\t\t= \"서리 여왕께 다가가도록 두지 않겠다. 서둘러라! 저들을 막아라!\"\n})\n"
  },
  {
    "path": "DBM-Icecrown/localization.mx.lua",
    "content": "if GetLocale() ~= \"esMX\" then return end\n\nlocal L\n\n------------------\n-- Lord Tuétano --\n------------------\nL = DBM:GetModLocalization(\"LordMarrowgar\")\n\nL:SetGeneralLocalization({\n\tname = \"Lord Tuétano\"\n})\n\n------------------------\n-- Lady Susurramuerte --\n------------------------\nL = DBM:GetModLocalization(\"Deathwhisper\")\n\nL:SetGeneralLocalization({\n\tname = \"Lady Susurramuerte\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t= \"Siguientes esbirros\"\n})\n\nL:SetWarningLocalization({\n\tWarnReanimating\t\t\t\t= \"Esbirro reanimado\",\t\t\t-- Reanimating an adherent or fanatic\n\tWarnAddsSoon\t\t\t\t= \"Esbirros en breve\",\n\tSpecWarnVengefulShade\t\t= \"¡Sombra vengativa te ataca! ¡Corre!\",--creatureid 38222\n\tWeaponsStatus\t\t\t\t= \"Desequipar automático habilitado: %s (%s - %s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon\t\t\t\t= \"Mostrar aviso previo para cuando aparezcan esbirros\",\n\tWarnReanimating\t\t\t\t= \"Mostrar aviso cuando se esté reanimando a un esbirro\",\t-- Reanimated Adherent/Fanatic spawning\n\tTimerAdds\t\t\t\t\t= \"Mostrar temporizador para los siguientes esbirros\",\n\tSpecWarnVengefulShade\t\t= \"Mostrar aviso especial cuando te ataque una Sombra vengativa\",--creatureid 38222\n\tWeaponsStatus\t\t\t\t= \"Advertencia especial al inicio del combate si la función desequipar/equipar está habilitada\",\n\tShieldHealthFrame\t\t\t= \"Mostrar barra de vida del boss con una barra de vida para $spell:70842\",\n\tSoundWarnCountingMC\t\t\t= \"Play a 5 second audio countdown for Mind Control\", --Needs Translating\n--\tRemoveDruidBuff\t\t\t\t= \"Quitar $spell:48469 / $spell:48470 24 segundos después de la pelea\",\n\tRemoveBuffsOnMC\t\t\t\t= \"Elimina los buffs cuando $spell:71289 es lanzado sobre ti. Cada opción es acumulativa\",\n\tGift\t\t\t\t\t\t= \"Eliminar $spell:48469 / $spell:48470. Enfoque mínimo para evitar que $spell:33786 se resista\",\n\tCCFree\t\t\t\t\t\t= \"+ Eliminar $spell:48169 / $spell:48170. Tener en cuenta las resistencias de los hechizos de la escuela Sombra\",\n\tShortOffensiveProcs\t\t\t= \"+ Elimina los procs ofensivos de baja duración. Recomendado para la seguridad de la raid sin comprometer la producción de daño de la raid\",\n\tMostOffensiveBuffs\t\t\t= \"+ Elimina la mayoría de los buffs ofensivos (principalmente para los Casters y los |cFFFF7C0ADruidas Ferales|r). Máxima seguridad en la incursión con la pérdida de daño y la necesidad de auto-buff/cambio de forma\",\n\tEqUneqWeapons\t\t\t\t= \"Desequipar/equipar armas si se lanza $spell:71289 sobre ti. Para que el equipo funcione, cree un gestor de equipamiento llamado \\\"pve\\\".\",\n\tEqUneqTimer\t\t\t\t\t= \"Retirar las armas con el temporizador SIEMPRE, no en el lanzamiento (si el ping es alto). La opción anterior debe estar habilitada.\",\n})\n\nL:SetMiscLocalization({\n\tYellReanimatedFanatic\t= \"¡Álzate y goza de tu forma pura!\",\n\tShieldPercent\t\t\t= \"Barrera de maná\",\n--\tFanatic1\t\t\t\t= \"Fanático del Culto\",\n--\tFanatic2\t\t\t\t= \"Fanático deformado\",\n--\tFanatic3\t\t\t\t= \"Fanático reanimado\",\n\tsetMissing\t\t\t\t= \"¡ATENCIÓN! El desequipamiento / equipamiento automático de armas de DBM no funcionará hasta que cree un equipamiento llamado pve\",\n\tEqUneqLineDescription\t= \"Equipar/desequipar automático\"\n})\n\n--------------------------------\n-- Batalla de naves de guerra --\n--------------------------------\nL = DBM:GetModLocalization(\"GunshipBattle\")\n\nL:SetGeneralLocalization({\n\tname = \"Batalla aérea\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsSoon\t= \"Esbirros en breve\"\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon\t\t= \"Mostrar aviso previo para cuando aparezcan esbirros\",\n\tTimerAdds\t\t\t= \"Mostrar temporizador para los siguientes esbirros\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t\t\t= \"Siguientes esbirros\"\n})\n\nL:SetMiscLocalization({\n\tPullAlliance\t= \"¡Enciendan los motores! ¡Tenemos una cita con el destino, muchachos!\",\n\tPullHorde\t\t= \"¡Levántense, hijos e hijas de la Horda! ¡Hoy nos enfrentamos a un enemigo odiado por todos! ¡LOK'TAR OGAR!\",\n\tAddsAlliance\t= \"¡Atracadores, sargentos, ataquen!\",\n\tAddsHorde\t\t= \"¡Soldados, sargentos, ataquen!\",\n\tMageAlliance\t= \"¡Nos están dañando el casco, traigan a un mago de batalla para que acabe con esos cañones!\",\n\tMageHorde\t\t= \"¡Nos están dañando el casco, traigan a un brujo para que acabe con esos cañones!\",\n\tKillAlliance\t= \"¡No digan que no les avisé, sinvergüenzas! ¡Adelante, hermanos y hermanas!\",\n\tKillHorde\t\t= \"La Alianza flaquea. ¡Hacia el Rey Exánime!\"\n})\n\n------------------------------\n-- Libramorte Colmillosauro --\n------------------------------\nL = DBM:GetModLocalization(\"Deathbringer\")\n\nL:SetGeneralLocalization({\n\tname = \"Libramorte Colmillosauro\"\n})\n\nL:SetOptionLocalization({\n\tRunePowerFrame\t\t= \"Mostrar barra de vida + barra de $spell:72371\",\n--\tRemoveDI\t\t\t= \"Quitar $spell:19752 si se utiliza para prevenir lanzamiento de $spell:72293.\"\n})\n\nL:SetMiscLocalization({\n\tRunePower\t\t\t= \"Poder de sangre\",\n\tPullAlliance\t\t= \"Por cada soldado de la Horda que mataron... Por cada perro de la Alianza que cayó, el ejército del Rey Exánime creció. Ahora, hasta las Val'kyr alzan a los caídos para la Plaga.\",\n\tPullHorde\t\t\t= \"¡Kor'kron, vámonos! Campeones, vigilen su retaguardia. La Plaga ha sido…\"\n})\n\n------------------\n-- Panzachancro --\n------------------\nL = DBM:GetModLocalization(\"Festergut\")\n\nL:SetGeneralLocalization({\n\tname = \"Panzachancro\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceSporeIcons\t= \"Anunciar iconos de los objetivos de $spell:69279 en el chat de banda (requiere líder o ayudante)\",\n\tAchievementCheck\t= \"Anunciar si se falla el logro 'Sin vacunas' en el chat de banda (requiere líder o ayudante)\"\n})\n\nL:SetMiscLocalization({\n\tSporeSet\t\t\t= \"Icono {rt%d} de Espora de gas en %s\",\n\tAchievementFailed\t= \">> LOGRO FALLADO: %s tiene %d acumulaciones de Inoculado <<\"\n})\n\n----------------\n-- Carapútrea --\n----------------\nL = DBM:GetModLocalization(\"Rotface\")\n\nL:SetGeneralLocalization({\n\tname = \"Carapútrea\"\n})\n\nL:SetWarningLocalization({\n\tWarnOozeSpawn\t\t\t\t= \"Moco pequeño\",\n\tSpecWarnLittleOoze\t\t\t= \"Te está atacando un Moco pequeño - ¡huye!\"--creatureid 36897\n})\n\nL:SetOptionLocalization({\n\tWarnOozeSpawn\t\t\t\t= \"Mostrar aviso cuando aparezca un Moco pequeño\",\n\tSpecWarnLittleOoze\t\t\t= \"Mostrar aviso especial cuando te ataque un Moco pequeño\",--creatureid 36897\n\tTankArrow\t\t\t\t\t= \"Mostrar flecha hacia el tanque del Moco grande (Experimental)\"\n})\n\nL:SetMiscLocalization({\n\tYellSlimePipes1\t= \"¡Buenas noticias, amigos! He arreglado las tuberías de babosas venenosas.\",\t-- Professor Putricide\n\tYellSlimePipes2\t= \"¡Buenas noticias, amigos! ¡La baba ha vuelto a fluir!\"\t-- Professor Putricide\n})\n\n-------------------------\n-- Profesor Putricidio --\n-------------------------\nL = DBM:GetModLocalization(\"Putricide\")\n\nL:SetGeneralLocalization({\n\tname = \"Profesor Putricidio\"\n})\n\nL:SetWarningLocalization({\n\tWarnReengage\t\t\t= \"%s: Reatracción\"\n})\n\nL:SetTimerLocalization({\n\tTimerReengage\t\t\t= \"Reatracción\"\n})\n\n--[[L:SetOptionLocalization({\n\tWarnReengage\t\t\t= \"Show warning for Boss re-engage\", -- needs localization\n\tTimerReengage\t\t\t= \"Show timer for Boss re-engage\" -- needs localization\n})]]\n\nL:SetMiscLocalization({\n\tYellTransform1\t\t\t= \"Mmm, no siento nada. ¿¡Qué!? ¿De dónde salió eso?\",\n\tYellTransform2\t\t\t= \"¡Sabe a... cereza! ¡Ay! ¡Disculpen!\"\n})\n\n------------------------------------\n-- Consejo de Príncipes de Sangre --\n------------------------------------\nL = DBM:GetModLocalization(\"BPCouncil\")\n\nL:SetGeneralLocalization({\n\tname = \"Consejo de Príncipes de Sangre\"\n})\n\nL:SetWarningLocalization({\n\tWarnTargetSwitch\t\t= \"Cambio de objetivo: %s\",\n\tWarnTargetSwitchSoon\t= \"Cambio de objetivo en breve\"\n})\n\nL:SetTimerLocalization({\n\tTimerTargetSwitch\t\t= \"Cambio de objetivo\"\n})\n\nL:SetOptionLocalization({\n\tWarnTargetSwitch\t\t= \"Mostrar aviso cuando haya que cambiar de objetivo\",-- Warn when another Prince needs to be damaged\n\tWarnTargetSwitchSoon\t= \"Mostrar aviso previo para cuando haya que cambiar de objetivo\",-- Every ~47 secs, you have to dps a different Prince\n\tTimerTargetSwitch\t\t= \"Mostrar temporizador para el siguiente cambio de objetivo\",\n\tActivePrinceIcon\t\t= \"Poner icono (calavera) en el príncipe potenciado\",\n\tShadowPrisonMetronome\t= \"Reproducir un sonido de clic repetido de 1 segundo para evitar $spell:72999\"\n})\n\nL:SetMiscLocalization({\n\tKeleseth\t\t\t= \"Príncipe Keleseth\",\n\tTaldaram\t\t\t= \"Príncipe Taldaram\",\n\tValanar\t\t\t\t= \"Príncipe Valanar\",\n\tFirstPull\t\t\t= \"Mortales imbéciles. ¿Pensaron que nos derrotarían tan fácilmente? ¡Los San'layn son los soldados inmortales del Rey Exánime! ¡Ahora se enfrentarán a todo su poder combinado!\",\n\tEmpoweredFlames\t\t= \"¡Llamas potenciadas arremeten contra (%S+)!\"\n})\n\n-------------------------------\n-- Reina de Sangre Lana'thel --\n-------------------------------\nL = DBM:GetModLocalization(\"Lanathel\")\n\nL:SetGeneralLocalization({\n\tname = \"Reina de Sangre Lana'thel\"\n})\n\nL:SetMiscLocalization({\n\tSwarmingShadows\t\t\t= \"¡Las sombras se acumulan alrededor de (%S+)!\",\n\tYellFrenzy\t\t\t\t= \"¡Tengo hambre!\"\n})\n\n----------------------------\n-- Valithria Caminasueños --\n----------------------------\nL = DBM:GetModLocalization(\"Valithria\")\n\nL:SetGeneralLocalization({\n\tname = \"Valithria Caminasueños\"\n})\n\nL:SetWarningLocalization({\n\tWarnPortalOpen\t= \"Siguientes portales\"\n})\n\nL:SetTimerLocalization({\n\tTimerPortalsOpen\t\t\t= \"Portales abiertos\",\n\tTimerPortalsClose\t\t\t= \"Portales cerrados\",\n\tTimerBlazingSkeleton\t\t= \"Siguiente Esqueleto llameante\",\n\tTimerAbom\t\t\t\t\t= \"Siguiente Abominación glotona (%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPortalOpen\t\t\t\t= \"Mostrar aviso cuando se abran los portales\",\n\tTimerPortalsOpen\t\t\t= \"Mostrar temporizador para cuando se abran los portales\",\n\tTimerPortalsClose\t\t\t= \"Mostrar temporizador para cuando se cierren los portales\",\n\tTimerBlazingSkeleton\t\t= \"Mostrar temporizador para el siguiente Esqueleto llameante\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"Hay Intrusos en el Sagrario Interior. ¡Apresuren la destrucción del dragón verde! ¡Dejen sólo huesos y tendones para la reanimación!\",\n\tYellPortals\t\t= \"He abierto un portal al Sueño. Su salvación está dentro, héroes…\"\n})\n\n----------------\n-- Sindragosa --\n----------------\nL = DBM:GetModLocalization(\"Sindragosa\")\n\nL:SetGeneralLocalization({\n\tname = \"Sindragosa\"\n})\n\nL:SetWarningLocalization({\n\tWarnAirphase\t\t\t= \"Fase aérea\",\n\tWarnGroundphaseSoon\t\t= \"Fase en tierra en breve\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextAirphase\t\t= \"Siguiente fase aérea\",\n\tTimerNextGroundphase\t= \"Siguiente fase en tierra\",\n\tAchievementMystic\t\t= \"Logro: Sacúdete\"\n})\n\nL:SetOptionLocalization({\n\tWarnAirphase\t\t\t\t= \"Anunciar cambio a fase aérea\",\n\tWarnGroundphaseSoon\t\t\t= \"Mostrar aviso previo para el cambio a fase en tierra\",\n\tTimerNextAirphase\t\t\t= \"Mostrar temporizador para la siguiente fase aérea\",\n\tTimerNextGroundphase\t\t= \"Mostrar temporizador para la siguiente fase en tierra\",\n\tAnnounceFrostBeaconIcons\t= \"Anunciar iconos de los objetivos de $spell:70126 en el chat de banda (requiere líder)\",\n\tClearIconsOnAirphase\t\t= \"Quitar todos los iconos al comenzar la fase aérea\",\n\tAssignWarnDirectionsCount\t= \"Asignar direcciones de los objetivos de $spell:70126 y contar en la fase 2\",\n\tAchievementCheck\t\t\t= \"Anunciar avisos del logro 'Sacúdete' en el chat de banda (requiere líder o ayudante)\",\n\tRangeFrame\t\t\t\t\t= \"Mostrar marco de distancia (10/20 m) dinámico en función de la última habilidad usada por el jefe y los perjuicios de los jugadores\"\n})\n\nL:SetMiscLocalization({\n\tYellAirphase\t\t= \"¡Aquí termina su incursión! ¡Nadie sobrevivirá!\",\n\tYellPhase2\t\t\t= \"¡Ahora sientan el poder ilimitado de mi amo y tiemblen!\",\n\tYellAirphaseDem\t\t= \"Rikk zilthuras rikk zila Aman adare tiriosh \",--Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tYellPhase2Dem\t\t= \"Zar kiel xi romathIs zilthuras revos ruk toralar \",--Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tBeaconIconSet\t\t= \"Icono {rt%d} de Señal de Escarcha en %s\",\n\tAchievementWarning\t= \"Aviso: %s tiene 5 acumulaciones de Sacudida mística\",\n\tAchievementFailed\t= \">> LOGRO FALLADO: %s tiene %d acumulaciones de Sacudida mística <<\"\n})\n\n--------------------\n-- El Rey Exánime --\n--------------------\nL = DBM:GetModLocalization(\"LichKing\")\n\nL:SetGeneralLocalization({\n\tname = \"El Rey Exánime\"\n})\n\nL:SetWarningLocalization({\n\tValkyrWarning\t\t\t= \"¡%s >%s< %s ha sido agarrado!\",\n\tSpecWarnYouAreValkd\t\t= \"¡Te han agarrado!!\",\n\tWarnNecroticPlagueJump\t= \"Plaga necrótica salta a >%s<\",\n\tSpecWarnValkyrLow\t\t= \"Val'kyr por debajo del 55%\"\n})\n\nL:SetTimerLocalization({\n\tTimerRoleplay\t\t\t\t= \"Diálogo\",\n\tPhaseTransition\t\t\t\t= \"Intermedio\",\n\tTimerNecroticPlagueCleanse\t= \"Purgar Plaga necrótica\"\n})\n\nL:SetOptionLocalization({\n\tTimerRoleplay\t\t\t\t= \"Mostrar temporizador para los diálogos\",\n\tWarnNecroticPlagueJump\t\t= \"Anunciar objetivos de los saltos de $spell:70337\",\n\tTimerNecroticPlagueCleanse\t= \"Mostrar temporizador para purgar Plaga necrótica antes del primer pulso\",\n\tPhaseTransition\t\t\t\t= \"Mostrar duración de los intermedios\",\n\tValkyrWarning\t\t\t\t= \"Anunciar jugadores agarrados por las Guardias de las Sombras Val'kyr\",\n\tSpecWarnYouAreValkd\t\t\t= \"Mostrar aviso especial cuando te agarrae una Guardia de las Sombras Val'kyr\",--npc36609\n\tAnnounceValkGrabs\t\t\t= \"Anunciar jugadores agarrados por las Guardias de las Sombras Val'kyr en el chat de banda (requiere líder o ayudante)\",\n\tSpecWarnValkyrLow\t\t\t= \"Mostrar aviso especial cuando una Guardia de las Sombras Val'kyr esté por debajo del 55% de salud\",\n\tAnnouncePlagueStack\t\t\t= \"Anunciar acumulaciones de $spell:70337 en el chat de banda (al llegar a 10 y tras cada 5; requiere líder o ayudante)\",\n\tShowFrame\t\t\t\t\t= \"Mostrar marco de objetivos de Val'Kyr\",\n\tFrameClassColor\t\t\t\t= \"Usar colores de clase en el marco de objetivos de Val'Kyr\",\n\tFrameUpwards\t\t\t\t= \"Expande el marco de Val'Kyr hacia arriba\",\n\tFrameLocked\t\t\t\t\t= \"Bloquear el marco de los objetivos de Val'Kyr\",\n\tRemoveImmunes\t\t\t\t= \"Eliminar los hechizos de inmunidad antes de salir de la habitación Frostmourne\"\n})\n\nL:SetMiscLocalization({\n\tLKPull\t\t\t\t\t= \"¿Así que por fin ha llegado la tan anunciada justicia de la Luz? ¿Debería dejar la Agonía de Escarcha y someterme a tu piedad, Vadín?\",\n\tLKRoleplay\t\t\t\t= \"Me pregunto... ¿será verdad que los guía la rectitud?\",\n\tValkGrabbedIcon\t\t\t= \"Una Val'kyr ha agarrado a %s {rt%d}\",\n\tValkGrabbed\t\t\t\t= \"Una Val'kyr ha agarrado a %s\",\n\tPlagueStackWarning\t\t= \"Aviso: %s tiene %d acumulaciones de Peste necrótica\",\n\tAchievementCompleted\t= \">> LOGRO COMPLETADO: %s tiene %d acumulaciones de Plaga necrótica <<\",\n\tFrameTitle\t\t\t\t= \"Valkyr targets\", --Needs Translating\n\tFrameLock\t\t\t\t= \"Frame Lock\", --Needs Translating\n\tFrameClassColor\t\t\t= \"Use Class Colors\", --Needs Translating\n\tFrameOrientation\t\t= \"Expand upwards\", --Needs Translating\n\tFrameHide\t\t\t\t= \"Hide Frame\", --Needs Translating\n\tFrameClose\t\t\t\t= \"Close\", --Needs Translating\n\tFrameGUIDesc\t\t\t= \"Marco Val'Kyr\",\n\tFrameGUIMoveMe\t\t\t= \"Mover marco Val'Kyr\"\n})\n\n----------------------\n-- Enemigos menores --\n----------------------\nL = DBM:GetModLocalization(\"ICCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"Enemigos menores\"\n})\n\nL:SetWarningLocalization({\n\tSpecWarnTrapL\t\t= \"Trampa activada - ¡se ha liberado un Depositario vinculado a la muerte!\",\n\tSpecWarnTrapP\t\t= \"Trampa activada - ¡se aproximan Siegacarnes vengativos!\",\n\tSpecWarnGosaEvent\t= \"¡Emboscada de Sindragosa iniciada!\"\n})\n\nL:SetOptionLocalization({\n\tSpecWarnTrapL\t\t= \"Mostrar aviso especial cuando se active una trampa de Depositario vinculado a la muerte\",\n\tSpecWarnTrapP\t\t= \"Mostrar aviso especial cuando se active una trampa de Siegacarnes vengativos\",\n\tSpecWarnGosaEvent\t= \"Mostrar aviso especial cuando comience el evento de la emboscada de Sindragosa\"\n})\n\nL:SetMiscLocalization({\n\tWarderTrap1\t\t\t= \"¿Quién... anda ahí?\",\n\tWarderTrap2\t\t\t= \"Estoy despierto...\",\n\tWarderTrap3\t\t\t= \"El sagrario del maestro ha sido perturbado.\",\n\tFleshreaperTrap1\t= \"Rápido, ¡los emboscaremos por la espalda!\",\n\tFleshreaperTrap2\t= \"¡No podrán escapar!\",\n\tFleshreaperTrap3\t= \"¿Los vivos? ¿¡Aquí!?\",\n\tSindragosaEvent\t\t= \"No se acercarán a la Reina de Escarcha. ¡Deténganlos, rápido!\"\n})\n"
  },
  {
    "path": "DBM-Icecrown/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n----------------------\n--  Lord Marrowgar  --\n----------------------\nL = DBM:GetModLocalization(\"LordMarrowgar\")\n\nL:SetGeneralLocalization({\n\tname = \"Лорд Ребрад\"\n})\n\n-------------------------\n--  Lady Deathwhisper  --\n-------------------------\nL = DBM:GetModLocalization(\"Deathwhisper\")\n\nL:SetGeneralLocalization({\n\tname = \"Леди Смертный Шепот\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t= \"Призыв помощников\"\n})\n\nL:SetWarningLocalization({\n\tWarnReanimating\t\t\t\t= \"Помощник воскрешается\",\t-- Reanimating an adherent or fanatic\n\tWarnAddsSoon\t\t\t\t= \"Скоро призыв помощников\",\n\tSpecWarnVengefulShade\t\t= \"Мстительный дух атакует вас - бегите\", --creatureid 38222\n\tWeaponsStatus\t\t\t\t= \"Cнятие оружий включено: %s (%s - %s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon\t\t\t\t= \"Предупреждать заранее о призыве помощников\",\n\tWarnReanimating\t\t\t\t= \"Предупреждение при воскрешении помощников\",\t-- Reanimated Adherent/Fanatic spawning\n\tTimerAdds\t\t\t\t\t= \"Отсчет времени до призыва помощников\",\n\tSpecWarnVengefulShade\t\t= \"Спец-предупреждение, когда вас атакует Мстительный дух\",--creatureid 38222\n\tWeaponsStatus\t\t\t\t= \"Спец-предупреждение в начале боя если включена функция снятия/надевания оружий\",\n\tShieldHealthFrame\t\t\t= \"Показывать здоровье босса с индикатором здоровья для \\n$spell:70842\",\n\tSoundWarnCountingMC\t\t\t= \"Проигрывать звуковой отсчет 5...1 до контроля разума\",\n--\tRemoveDruidBuff\t\t\t\t= \"Снимите бафф $spell:48469 / $spell:48470 через 24 секунды после начала боя\", -- Needs review\n\tRemoveBuffsOnMC\t\t\t\t= \"Снимать баффы, когда на вас наложено заклинание $spell:71289. Каждый вариант является кумулятивным.\",\n\tGift\t\t\t\t\t\t= \"Снять $spell:48469 / $spell:48470. Минимальный подход для предотвращения сопротивления $spell:33786.\",\n\tCCFree\t\t\t\t\t\t= \"+ Убрать $spell:48169 / $spell:48170. Учет сопротивлений заклинаний школы Теней.\",\n\tShortOffensiveProcs\t\t\t= \"+ Удалите атакующие заклинания с малой продолжительностью. Рекомендуется для безопасности рейда без ущерба для урона рейда.\",\n\tMostOffensiveBuffs\t\t\t= \"+ Уберите большинство атакующих баффов (в основном для кастеров и |cFFFF7C0AСила зверя Друид|r). Максимальная безопасность рейда с потерей урона и необходимостью самовосстановления/перемещения!\",\n\tEqUneqWeapons\t\t\t\t= \"Снимать/надевать оружия если в вас кастанулся $spell:71289. Для надевания создайте компл. экип. \\\"pve\\\". Для снятия не нужен.\",\n\tEqUneqTimer\t\t\t\t\t= \"Снимать оружия по таймеру ВСЕГДА, а не в каст(если высокий пинг). Опция выше должна быть вкл.\"\n})\n\nL:SetMiscLocalization({\n\tYellReanimatedFanatic\t= \"Восстань и обрети истинную форму!\",\n\tShieldPercent\t\t\t= \"Барьер маны\",\n--\tFanatic1\t\t\t\t= \"Фанатик культа\",\n--\tFanatic2\t\t\t\t= \"Кособокий фанатик\",\n--\tFanatic3\t\t\t\t= \"Воскрешенный фанатик\",\n\tsetMissing\t\t\t\t= \"ВНИМАНИЕ! DBM: автоматическое снимание/надевание оружия не будет работать пока вы не создадите набор экипировки pve\",\n\tEqUneqLineDescription\t= \"Автоматическое оснащение/снятие оборудования\"\n})\n\n----------------------\n--  Gunship Battle  --\n----------------------\nL = DBM:GetModLocalization(\"GunshipBattle\")\n\nL:SetGeneralLocalization({\n\tname = \"Бой на кораблях\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsSoon\t= \"Скоро новые помощники\"\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon\t\t= \"Предупреждать заранее о призыве помощников\",\n\tTimerAdds\t\t\t= \"Отсчет времени до новых помощников\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t\t\t= \"Призыв помощников\"\n})\n\nL:SetMiscLocalization({\n\tPullAlliance\t= \"Запускайте двигатели! Летим навстречу судьбе.\",\n\tPullHorde\t\t= \"Воспряньте, сыны и дочери Орды! Сегодня мы будем биться со смертельным врагом! ЛОК'ТАР ОГАР!\",\n\t--CombatAlliance\t= \"Ах вы псы трусливые! Напали исподтишка!\",\n\t--CombatHorde\t\t= \"Сейчас вы ответите перед Саурфангом!\",\n\tAddsAlliance\t= \"Разрушители, сержанты, в бой!\",\n\tAddsHorde\t\t= \"Пехота, сержанты, в бой!\",\n\tMageAlliance\t= \"Корабль под обстрелом! Боевого мага сюда, пусть заткнет эти пушки!\",\n\tMageHorde\t\t= \"Корабль под обстрелом! Заклинателя сюда, пусть заткнет эти пушки!\",\n\tKillAlliance\t= \"Ну не говорите потом, что я не предупреждал. В атаку, братья и сестры!\",\n\tKillHorde\t\t= \"Альянс повержен. Вперед, к Королю-личу!\"\n})\n\n-----------------------------\n--  Deathbringer Saurfang  --\n-----------------------------\nL = DBM:GetModLocalization(\"Deathbringer\")\n\nL:SetGeneralLocalization({\n\tname = \"Саурфанг Смертоносный\"\n})\n\nL:SetOptionLocalization({\n\tRunePowerFrame\t\t= \"Показывать здоровье босса + индикатор для $spell:72371\",\n--\tRemoveDI\t\t\t= \"Удалите $spell:19752, если используется для предотвращения $spell:72293\"\n})\n\nL:SetMiscLocalization({\n\tRunePower\t\t\t= \"Сила крови\",\n\tPullAlliance\t\t= \"Все павшие воины Орды, все дохлые псы Альянса – все пополнят армию Короля-лича. Даже сейчас валь'киры воскрешают ваших покойников, чтобы те стали частью Плети!\",\n\tPullHorde\t\t\t= \"Кор'крон, выдвигайтесь! Герои, будьте начеку. Плеть только что...\"\n})\n\n-----------------\n--  Festergut  --\n-----------------\nL = DBM:GetModLocalization(\"Festergut\")\n\nL:SetGeneralLocalization({\n\tname = \"Тухлопуз\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceSporeIcons\t= \"Объявлять метки целей заклинания $spell:69279 в рейд-чат<br/>(требуются права помощника)\",\n\tAchievementCheck\t= \"Объявлять о провале достижения 'Масок нет!' в рейд-чат<br/>(требуются права помощника)\"\n})\n\nL:SetMiscLocalization({\n\tSporeSet\t\t\t= \"Метка Газообразных спор {rt%d} установлена на: %s\",\n\tAchievementFailed\t= \">> ДОСТИЖЕНИЕ ПРОВАЛЕНО: %s получил %d стаков Невосприимчивости к гнили <<\"\n})\n\n---------------\n--  Rotface  --\n---------------\nL = DBM:GetModLocalization(\"Rotface\")\n\nL:SetGeneralLocalization({\n\tname = \"Гниломорд\"\n})\n\nL:SetWarningLocalization({\n\tWarnOozeSpawn\t\t\t\t= \"Малый слизнюк\",\n\tSpecWarnLittleOoze\t\t\t= \"Малый слизнюк атакует вас - бегите\"--creatureid 36897\n})\n\nL:SetOptionLocalization({\n\tWarnOozeSpawn\t\t\t\t= \"Предупреждение при появлении Малого слизнюка\",\n\tSpecWarnLittleOoze\t\t\t= \"Спец-предупреждение, когда вас атакует Малый слизнюк\",--creatureid 36897\n\tTankArrow\t\t\t\t\t= \"Показывать стрелку для кайтера Большого слизнюка (экспериментально)\"\n})\n\nL:SetMiscLocalization({\n\tYellSlimePipes1\t= \"Отличные новости, народ! Я починил трубы для подачи ядовитой слизи!\",\t-- Professor Putricide\n\tYellSlimePipes2\t= \"Отличные новости, народ! Слизь снова потекла!\"\t-- Professor Putricide\n})\n\n---------------------------\n--  Professor Putricide  --\n---------------------------\nL = DBM:GetModLocalization(\"Putricide\")\n\nL:SetGeneralLocalization({\n\tname = \"Профессор Мерзоцид\"\n})\n\nL:SetWarningLocalization({\n\tWarnReengage\t\t\t= \"%s: Повторное столкновение\"\n})\n\nL:SetTimerLocalization({\n\tTimerReengage\t\t\t= \"Повторное столкновение\"\n})\n\n--[[L:SetOptionLocalization({\n\tWarnReengage\t\t\t= \"Show warning for Boss re-engage\", -- needs localization\n\tTimerReengage\t\t\t= \"Show timer for Boss re-engage\" -- needs localization\n})]]\n\nL:SetMiscLocalization({\n\tYellTransform1\t\t\t= \"Хм, что-то я ничего не чувствую. Что?! Это еще откуда?\",\n\tYellTransform2\t\t\t= \"На вкус, как вишенка! ОЙ! Извиниите!\"\n})\n\n----------------------------\n--  Blood Prince Council  --\n----------------------------\nL = DBM:GetModLocalization(\"BPCouncil\")\n\nL:SetGeneralLocalization({\n\tname = \"Кровавый Совет\"\n})\n\nL:SetWarningLocalization({\n\tWarnTargetSwitch\t\t= \"Смените цель на: %s\",\n\tWarnTargetSwitchSoon\t= \"Скоро смена цели\"\n})\n\nL:SetTimerLocalization({\n\tTimerTargetSwitch\t\t= \"Смена цели\"\n})\n\nL:SetOptionLocalization({\n\tWarnTargetSwitch\t\t= \"Предупреждение о смене цели\",-- Warn when another Prince needs to be damaged\n\tWarnTargetSwitchSoon\t= \"Предупреждать заранее о смене цели\",-- Every ~47 secs, you have to dps a different Prince\n\tTimerTargetSwitch\t\t= \"Отсчет времени до смены цели\",\n\tActivePrinceIcon\t\t= \"Устанавливать метку на наполненного силой Принца (череп)\",\n\tShadowPrisonMetronome\t= \"Воспроизведите повторяющийся 1-секундный звук щелчка, чтобы избежать $spell:72999\"\n})\n\nL:SetMiscLocalization({\n\tKeleseth\t\t\t= \"Принц Келесет\",\n\tTaldaram\t\t\t= \"Принц Талдарам\",\n\tValanar\t\t\t\t= \"Принц Валанар\",\n\tFirstPull\t\t\t= \"Глупые смертные. Думали, что одолели нас? Сан'лейн – непобедимые воины Короля-лича. Теперь наши силы едины!\",\n\tEmpoweredFlames\t\t= \"Жаркое пламя тянется к (%S+)!\"\n})\n\n-----------------------------\n--  Blood-Queen Lana'thel  --\n-----------------------------\nL = DBM:GetModLocalization(\"Lanathel\")\n\nL:SetGeneralLocalization({\n\tname = \"Королева Лана'тель\"\n})\n\nL:SetMiscLocalization({\n\tSwarmingShadows\t\t\t= \"Тени собираются и окружают (%S+)!\",\n\tYellFrenzy\t\t\t\t= \"Я голоден!\"\n})\n\n-----------------------------\n--  Valithria Dreamwalker  --\n-----------------------------\nL = DBM:GetModLocalization(\"Valithria\")\n\nL:SetGeneralLocalization({\n\tname = \"Валитрия Сноходица\"\n})\n\nL:SetWarningLocalization({\n\tWarnPortalOpen\t= \"Открытие порталов\"\n})\n\nL:SetTimerLocalization({\n\tTimerPortalsOpen\t\t= \"Открытие порталов\",\n\tTimerPortalsClose\t\t= \"закрытие порталов\", -- Needs review\n\tTimerBlazingSkeleton\t= \"Исторгающий пламя скелет\",\n\tTimerAbom\t\t\t\t= \"След. поганище (%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPortalOpen\t\t\t\t= \"Предупреждение об открытии порталов\",\n\tTimerPortalsOpen\t\t\t= \"Отсчет времени для открытия порталов\",\n\tTimerPortalsClose\t\t\t= \"Обратный отсчет до закрытия порталов\", -- Needs review\n\tTimerBlazingSkeleton\t\t= \"Отсчет времени до Исторгающего пламя скелета\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"Чужаки ворвались во внутренние покои. Уничтожьте зеленого дракона! Пусть останутся лишь кости и прах для воскрешения!\",\n\tYellPortals\t\t= \"Я открыла портал в Изумрудный Сон. Там вы найдете спасение, герои...\"\n})\n\n------------------\n--  Sindragosa  --\n------------------\nL = DBM:GetModLocalization(\"Sindragosa\")\n\nL:SetGeneralLocalization({\n\tname = \"Синдрагоса\"\n})\n\nL:SetWarningLocalization({\n\tWarnAirphase\t\t\t= \"Воздушная фаза\",\n\tWarnGroundphaseSoon\t\t= \"Синдрагоса скоро приземлится\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextAirphase\t\t= \"След. воздушная фаза\",\n\tTimerNextGroundphase\t= \"След. наземная фаза\",\n\tAchievementMystic\t\t= \"Время для устранения Таинственной энергии\"\n})\n\nL:SetOptionLocalization({\n\tWarnAirphase\t\t\t= \"Объявлять воздушную фазу\",\n\tWarnGroundphaseSoon\t\t= \"Предупреждать заранее о наземной фазе\",\n\tTimerNextAirphase\t\t= \"Отсчет времени до следующей воздушной фазы\",\n\tTimerNextGroundphase\t= \"Отсчет времени до следующей наземной фазы\",\n\tAnnounceFrostBeaconIcons= \"Объявлять метки целей заклинания $spell:70126 в рейд-чат<br/>(требуются права помощника)\",\n\tClearIconsOnAirphase\t= \"Снимать все метки перед воздушной фазой\",\n\tAssignWarnDirectionsCount\t= \"Назначьте направления для целей $spell:70126 и рассчитывайте на фазе 2\",\n\tAchievementCheck\t\t= \"Объявлять предупреждения для достижения 'Таинственная дама'<br/>в рейд-чат (требуются права помощника)\",\n\tRangeFrame\t\t\t\t= \"Показывать игроков с метками в окне проверки дистанции (10 норм., 20 гер.)\"\n})\n\nL:SetMiscLocalization({\n\tYellAirphase\t\t= \"Здесь ваше вторжение и окончится! Никто не уцелеет.\",\n\tYellPhase2\t\t\t= \"А теперь почувствуйте всю мощь господина и погрузитесь в отчаяние!\",\n\tYellAirphaseDem\t\t= \"Rikk zilthuras rikk zila Aman adare tiriosh \",--Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tYellPhase2Dem\t\t= \"Zar kiel xi romathIs zilthuras revos ruk toralar \",--Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tBeaconIconSet\t\t= \"Ледяная метка {rt%d} установлена на: %s\",\n\tAchievementWarning\t= \"Предупреждение: %s получил 5 стаков Таинственной энергии\",\n\tAchievementFailed\t= \">> ДОСТИЖЕНИЕ ПРОВАЛЕНО: %s получил %d стаков Таинственной энергии <<\"\n})\n\n---------------------\n--  The Lich King  --\n---------------------\nL = DBM:GetModLocalization(\"LichKing\")\n\nL:SetGeneralLocalization({\n\tname = \"Король-лич\"\n})\n\nL:SetWarningLocalization({\n\tValkyrWarning\t\t\t= \"%s |3-3(>%s<) %s схватили!\",\n\tSpecWarnYouAreValkd\t\t= \"Вас схватили\",\n\tWarnNecroticPlagueJump\t= \"Мертвящая чума перепрыгнула на |3-3(>%s<)\",\n\tSpecWarnValkyrLow\t\t= \"У Валь'киры меньше 55%\"\n})\n\nL:SetTimerLocalization({\n\tTimerRoleplay\t\t\t\t= \"Представление\",\n\tPhaseTransition\t\t\t\t= \"Переходная фаза\",\n\tTimerNecroticPlagueCleanse\t= \"Очищение Мертвящей чумы\"\n})\n\nL:SetOptionLocalization({\n\tTimerRoleplay\t\t\t\t= \"Отсчет времени для представления\",\n\tWarnNecroticPlagueJump\t\t= \"Объявлять цели прыжков $spell:73912\",\n\tTimerNecroticPlagueCleanse\t= \"Отсчет времени для очищения Мертвящей чумы до первого тика\",\n\tPhaseTransition\t\t\t\t= \"Отсчет времени для переходной фазы\",\n\tValkyrWarning\t\t\t\t= \"Объявлять, кого схватили Валь'киры\",\n\tSpecWarnYouAreValkd\t\t\t= \"Спец-предупреждение, когда вас схватила Валь'кира\",\n\tAnnounceValkGrabs\t\t\t= \"Объявлять игроков, схваченных Валь'кирами, в рейд-чат\\n(требуются права помощника)\",\n\tSpecWarnValkyrLow\t\t\t= \"Спец-предупреждение, когда у Валь'киры меньше 55% HP\",\n\tAnnouncePlagueStack\t\t\t= \"Объявлять стаки заклинания $spell:73912 в рейд-чат (10\\nстаков, далее каждые 5) (требуются права помощника)\",\n\tShowFrame\t\t\t\t\t= \"Показать окно целей Валь'Кир\",\n\tFrameClassColor\t\t\t\t= \"Использовать цвета классов в окне целей Валь'Кир\",\n\tFrameUpwards\t\t\t\t= \"Рост окна целей Валь'Кир вверх\",\n\tFrameLocked\t\t\t\t\t= \"Зафиксировать окно целей Валь'Кир\",\n\tRemoveImmunes\t\t\t\t= \"Снимать заклинания иммунитета перед выходом из комнаты Ледяной Скорби\"\n})\n\nL:SetMiscLocalization({\n\tLKPull\t\t\t\t\t= \"Неужели прибыли наконец хваленые силы Света? Мне бросить Ледяную Скорбь и сдаться на твою милость, Фордринг?\",\n\tLKRoleplay\t\t\t\t= \"Что движет вами?.. Праведность? Не знаю...\",\n\tValkGrabbedIcon\t\t\t= \"Валь'кира {rt%d} схватила %s\",\n\tValkGrabbed\t\t\t\t= \"Валь'кира схватила %s\",\n\tPlagueStackWarning\t\t= \"Предупреждение: %s получил %d стаков Мертвящей чумы\",\n\tAchievementCompleted\t= \">> ДОСТИЖЕНИЕ ВЫПОЛНЕНО: %s получил %d стаков Мертвящей чумы <<\",\n\tFrameTitle\t\t\t\t= \"Цели Валь'Кир\",\n\tFrameLock\t\t\t\t= \"Закрепить окно\",\n\tFrameClassColor\t\t\t= \"Использовать цвета классов\",\n\tFrameOrientation\t\t= \"Рост вверх\",\n\tFrameHide\t\t\t\t= \"Скрыть окно\",\n\tFrameClose\t\t\t\t= \"Закрыть\",\n\tFrameGUIDesc\t\t\t= \"Рамка Вал'Кира\",\n\tFrameGUIMoveMe\t\t\t= \"Переместить каркас Вал'Кира\"\n})\n\n-------------\n--  Trash  --\n-------------\nL = DBM:GetModLocalization(\"ICCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"Icecrown Trash\"\n})\n\nL:SetWarningLocalization({\n\tSpecWarnTrapL\t\t= \"Ловушка активирована! - Заклятый страж освобожден\",\n\tSpecWarnTrapP\t\t= \"Ловушка активирована! - приближаются Мстительные свежеватели\",\n\tSpecWarnGosaEvent\t= \"Приближаются защитники Синдрагосы!\"\n})\n\nL:SetOptionLocalization({\n\tSpecWarnTrapL\t\t= \"Спец-предупреждение для активации ловушки\",\n\tSpecWarnTrapP\t\t= \"Спец-предупреждение для активации ловушки\",\n\tSpecWarnGosaEvent\t= \"Спец-предупреждение для активации защитников Синдрагосы\"\n})\n\nL:SetMiscLocalization({\n\tWarderTrap1\t\t\t= \"Кто... идет?\",\n\tWarderTrap2\t\t\t= \"Я пробудился...\",\n\tWarderTrap3\t\t\t= \"В покои господина проникли!\",\n\tFleshreaperTrap1\t= \"Скорей, нападем на них сзади!\",\n\tFleshreaperTrap2\t= \"Вам не уйти от нас.\",\n\tFleshreaperTrap3\t= \"Живые? Здесь?!\",\n\tSindragosaEvent\t\t= \"Они не должны прорваться к Синдрагосе! Скорее, остановите их!\"\n})\n"
  },
  {
    "path": "DBM-Icecrown/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\n\nlocal L\n\n----------------------\n--  Lord Marrowgar  --\n----------------------\nL = DBM:GetModLocalization(\"LordMarrowgar\")\n\nL:SetGeneralLocalization({\n\tname = \"瑪洛嘉領主\"\n})\n\n-------------------------\n--  Lady Deathwhisper  --\n-------------------------\nL = DBM:GetModLocalization(\"Deathwhisper\")\n\nL:SetGeneralLocalization({\n\tname = \"亡語女士\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t= \"新的小怪\"\n})\n\nL:SetWarningLocalization({\n\tWarnReanimating\t\t\t\t= \"小怪再活化\",\n\tWarnAddsSoon\t\t\t\t= \"新的小怪即將到來\",\n\tSpecWarnVengefulShade\t\t= \"你被復仇的暗影盯上了 - 快跑開\",\n\tWeaponsStatus\t\t\t\t= \"自動武器卸載/裝備已啟用: %s (%s - %s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon\t\t\t\t= \"為新的小怪出現顯示預先警告\",\n\tWarnReanimating\t\t\t\t= \"當小怪再活化時顯示警告\",\n\tTimerAdds\t\t\t\t\t= \"為新的小怪顯示計時器\",\n\tSpecWarnVengefulShade\t\t= \"當你被復仇的暗影盯上時顯示特別警告\",\n\tWeaponsStatus\t\t\t\t= \"戰鬥開始時提示自動武器卸載/裝備功能已啟用\",\n\tShieldHealthFrame\t\t\t= \"為$spell:70842顯示首領血量框架\",\n--\tRemoveDruidBuff\t\t\t\t= \"戰鬥開始24秒後自動移除野性印記/野性賜福\",\n\tRemoveBuffsOnMC\t\t\t\t= \"當 $spell:71289 對你施放時移除增益。每個選項都是累積的。\",\n\tGift\t\t\t\t\t\t= \"移除 $spell:48469 / $spell:48470。防止 $spell:33786 抵抗的最小方法。\",\n\tCCFree\t\t\t\t\t\t= \"+ 移除 $spell:48169 / $spell:48170。說明影子學派的法術抗性。\",\n\tShortOffensiveProcs\t\t\t= \"+ 移除持續時間較短的攻擊性觸發。推薦用於團隊安全而不影響團隊傷害輸出。\",\n\tMostOffensiveBuffs\t\t\t= \"+ 移除大部分攻擊性增益（主要針對施法者和 |cFFFF7C0A野性戰鬥德魯伊|r）。最大的團隊安全性，損失輸出並需要自我反擊/變形！\",\n\tEqUneqWeapons\t\t\t\t= \"當支配心智對你施放時，自動卸載當前武器並再結束後重新裝備。若要讓自動裝備成功運作，請使用裝備管理員功能創建一個名為\\\"pve\\\"的全套含武器裝備集\",\n\tEqUneqTimer\t\t\t\t\t= \"永遠依據計時器移除武器，而非當首領唱法時。(假如延遲很高的話)強烈建議將此選項勾選\"\n})\n\nL:SetMiscLocalization({\n\tYellReanimatedFanatic\t= \"起來，在純粹的形態中感受狂喜!\",\n\tShieldPercent\t\t\t= \"法力屏障\",\n--\tFanatic1\t\t\t\t= \"神教狂熱者\",\n--\tFanatic2\t\t\t\t= \"畸形的狂熱者\",\n--\tFanatic3\t\t\t\t= \"再活化的狂熱者\",\n\tsetMissing\t\t\t\t= \"注意力！ 在您創建名為 pve 的裝備集之前，DBM 自動武器卸載/裝備將不起作用，pve裝備集為全套裝備及武器\",\n\tEqUneqLineDescription\t= \"自動裝備/取消裝備\"\n})\n\n----------------------\n--  Gunship Battle  --\n----------------------\nL = DBM:GetModLocalization(\"GunshipBattle\")\n\nL:SetGeneralLocalization({\n\tname = \"寒冰皇冠空中艦艇戰\"\n})\n\nL:SetWarningLocalization({\n\tWarnAddsSoon\t= \"新的小怪即將到來\"\n})\n\nL:SetOptionLocalization({\n\tWarnAddsSoon\t\t= \"為新的小怪出現顯示預先警告\",\n\tTimerAdds\t\t\t= \"為新的小怪顯示計時器\"\n})\n\nL:SetTimerLocalization({\n\tTimerAdds\t\t\t= \"新的小怪\"\n})\n\nL:SetMiscLocalization({\n\tPullAlliance\t= \"發動引擎!小夥子們，我們即將面對命運啦!\",\n\tPullHorde\t\t= \"起來吧，部落的子女!今天我們要和最可恨的敵人作戰!為了部落!\",\n\tAddsAlliance\t= \"劫奪者，士官們，攻擊!\",\n\tAddsHorde\t\t= \"海員們，士官們，攻擊!\",\n\tMageAlliance\t= \"船體受到傷害，找個戰鬥法師來，搞定那些火砲!\",\n\tMageHorde\t\t= \"船體受損，找個巫士到這裡來，搞定那些火砲!\",\n\tKillAlliance\t= \"別說我沒警告過你，無賴!兄弟姊妹們，向前衝!\",\n\tKillHorde\t\t= \"聯盟已經動搖了。向巫妖王前進!\"\n})\n\n-----------------------------\n--  Deathbringer Saurfang  --\n-----------------------------\nL = DBM:GetModLocalization(\"Deathbringer\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"死亡使者薩魯法爾\"\n})\n\nL:SetOptionLocalization({\n\tRunePowerFrame\t\t= \"顯示首領血量及$spell:72371條\",\n--\tRemoveDI\t\t\t= \"清除 $spell:19752 如果用於防止 $spell:72293\"\n})\n\nL:SetMiscLocalization({\n\tRunePower\t\t\t= \"血魄威能\",\n\tPullAlliance\t\t= \"每個你殺死的部落士兵 -- 每條死去的聯盟狗，都讓巫妖王的軍隊隨之增長。此時此刻華爾琪都還在把你們倒下的同伴復活成天譴軍。\",\n\tPullHorde\t\t\t= \"柯爾克隆，前進!勇士們，要當心，天譴軍團已經...\"\n})\n\n-----------------\n--  Festergut  --\n-----------------\nL = DBM:GetModLocalization(\"Festergut\")\n\nL:SetGeneralLocalization({\n\tname = \"膿腸\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceSporeIcons\t= \"公佈$spell:69279目標設置的標記到團隊頻道<br/>(需要團隊隊長)\",\n\tAchievementCheck\t= \"公佈 '流感疫苗短缺' 成就失敗到團隊頻道<br/>(需助理權限)\"\n})\n\nL:SetMiscLocalization({\n\tSporeSet\t\t\t= \"氣體孢子{rt%d}: %s\",\n\tAchievementFailed\t= \">> 成就失敗: %s中了%d層孢子 <<\"\n})\n\n---------------\n--  Rotface  --\n---------------\nL = DBM:GetModLocalization(\"Rotface\")\n\nL:SetGeneralLocalization({\n\tname = \"腐臉\"\n})\n\nL:SetWarningLocalization({\n\tWarnOozeSpawn\t\t\t\t= \"小軟泥怪出現了\",\n\tSpecWarnLittleOoze\t\t\t= \"你被小軟泥怪盯上了 - 快跑開\"\n})\n\nL:SetOptionLocalization({\n\tWarnOozeSpawn\t\t\t\t= \"為小軟泥的出現顯示警告\",\n\tSpecWarnLittleOoze\t\t\t= \"當你被小軟泥怪盯上時顯示特別警告\",\n\tTankArrow\t\t\t\t\t= \"為大軟泥怪副坦顯示DBM箭頭 (測試中)\"\n})\n\nL:SetMiscLocalization({\n\tYellSlimePipes1\t= \"大夥聽著，好消息!我修好了劇毒軟泥管!\",\n\tYellSlimePipes2\t= \"大夥聽著，超級好消息!軟泥又開始流動了!\"\n})\n\n---------------------------\n--  Professor Putricide  --\n---------------------------\nL = DBM:GetModLocalization(\"Putricide\")\n\nL:SetGeneralLocalization({\n\tname = \"普崔希德教授\"\n})\n\nL:SetWarningLocalization({\n\tWarnReengage\t\t\t= \"%s: 重新加入\"\n})\n\nL:SetTimerLocalization({\n\tTimerReengage\t\t\t= \"重新加入\"\n})\n\n--[[L:SetOptionLocalization({\n\tWarnReengage\t\t\t= \"Show warning for Boss re-engage\", -- needs localization\n\tTimerReengage\t\t\t= \"Show timer for Boss re-engage\" -- needs localization\n})]]\n\nL:SetMiscLocalization({\n\tYellTransform1\t\t\t= \"嗯，我看不出來有何不同。啊?!這些東西從哪來的?\",\n\tYellTransform2\t\t\t= \"嚐起來像是...櫻桃!喔!抱歉!\"\n})\n\n----------------------------\n--  Blood Prince Council  --\n----------------------------\nL = DBM:GetModLocalization(\"BPCouncil\")\n\nL:SetGeneralLocalization({\n\tname = \"血親王議會\"\n})\n\nL:SetWarningLocalization({\n\tWarnTargetSwitch\t\t= \"轉換目標到: %s\",\n\tWarnTargetSwitchSoon\t= \"轉換目標即將到來\"\n})\n\nL:SetTimerLocalization({\n\tTimerTargetSwitch\t\t= \"轉換目標\"\n})\n\nL:SetOptionLocalization({\n\tWarnTargetSwitch\t\t= \"為轉換目標顯示警告\",\n\tWarnTargetSwitchSoon\t= \"為轉換目標顯示預先警告\",\n\tTimerTargetSwitch\t\t= \"為轉換目標顯示冷卻計時器\",\n\tActivePrinceIcon\t\t= \"設置標記在強化的親王身上(頭顱)\",\n\tShadowPrisonMetronome\t= \"播放重複的 1 秒點擊聲音以避免 $spell:72999\"\n})\n\nL:SetMiscLocalization({\n\tKeleseth\t\t\t= \"凱雷希斯親王\",\n\tTaldaram\t\t\t= \"泰爾達朗親王\",\n\tValanar\t\t\t\t= \"瓦拉納爾親王\",\n\tFirstPull\t\t\t= \"愚蠢的凡人。你以為我們會如此輕易被擊敗?煞婪一族是巫妖王的永恆士兵!現在你將面對他們聯合的力量!\",\n\tEmpoweredFlames\t\t= \"煉獄烈焰加速靠近(%S+)!\"\n})\n\n-----------------------------\n--  Blood-Queen Lana'thel  --\n-----------------------------\nL = DBM:GetModLocalization(\"Lanathel\")\n\nL:SetGeneralLocalization({\n\tname = \"血腥女王菈娜薩爾\"\n})\n\nL:SetMiscLocalization({\n\tSwarmingShadows\t\t\t= \"暗影聚集並旋繞在(%S+)四周!\",\n\tYellFrenzy\t\t\t\t= \"我餓了!\"\n})\n\n-----------------------------\n--  Valithria Dreamwalker  --\n-----------------------------\nL = DBM:GetModLocalization(\"Valithria\")\n\nL:SetGeneralLocalization({\n\tname = \"瓦莉絲瑞雅·夢行者\"\n})\n\nL:SetWarningLocalization({\n\tWarnPortalOpen\t= \"傳送門開啟\"\n})\n\nL:SetTimerLocalization({\n\tTimerPortalsOpen\t\t\t= \"傳送門開啟\",\n\tTimerPortalsClose\t\t\t= \"傳送門關閉\",\n\tTimerBlazingSkeleton\t\t= \"下一次 熾熱骷髏\",\n\tTimerAbom\t\t\t\t\t= \"下一次 憎惡體 (%s)\"\n})\n\nL:SetOptionLocalization({\n\tWarnPortalOpen\t\t\t\t= \"當夢魘之門開啟時顯示警告\",\n\tTimerPortalsOpen\t\t\t= \"當夢魘之門開啟時顯示計時器\",\n\tTimerPortalsClose\t\t\t= \"顯示夢魘之門從場上關閉前的計時器\",\n\tTimerBlazingSkeleton\t\t= \"為下一次熾熱骷髏出現顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"入侵者已經突破了內部聖所。加快摧毀綠龍的速度!只要留下骨頭和肌腱來復活!\",\n\tYellPortals\t\t= \"我打開了一道傳送門通往夢境。你們的救贖就在其中，英雄們...\"\n})\n\n------------------\n--  Sindragosa  --\n------------------\nL = DBM:GetModLocalization(\"Sindragosa\")\n\nL:SetGeneralLocalization({\n\tname = \"辛德拉苟莎\"\n})\n\nL:SetWarningLocalization({\n\tWarnAirphase\t\t\t= \"空中階段\",\n\tWarnGroundphaseSoon\t\t= \"辛德拉苟莎 即將著陸\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextAirphase\t\t= \"下一次空中階段\",\n\tTimerNextGroundphase\t= \"下一次地上階段\",\n\tAchievementMystic\t\t= \"清除秘能連擊疊加\"\n})\n\nL:SetOptionLocalization({\n\tWarnAirphase\t\t\t\t= \"提示空中階段\",\n\tWarnGroundphaseSoon\t\t\t= \"為地上階段顯示預先警告\",\n\tTimerNextAirphase\t\t\t= \"為下一次 空中階段顯示計時器\",\n\tTimerNextGroundphase\t\t= \"為下一次 地上階段顯示計時器\",\n\tAnnounceFrostBeaconIcons\t= \"公佈$spell:70126目標設置的標記到團隊頻道<br/>(需要團隊隊長)\",\n\tClearIconsOnAirphase\t\t= \"空中階段前清除所有標記\",\n\tAssignWarnDirectionsCount\t= \"为 $spell:70126 目标分配方向并指望第二阶段\",\n\tAchievementCheck\t\t\t= \"公佈 '吃到飽' 成就警告到團隊頻道<br/>(需助理權限)\",\n\tRangeFrame\t\t\t\t\t= \"根據最後首領使用的技能跟玩家減益顯示動態距離框(10/20碼)\"\n})\n\nL:SetMiscLocalization({\n\tYellAirphase\t\t= \"你們的入侵將在此終止!誰也別想存活!\",\n\tYellPhase2\t\t\t= \"現在，絕望地感受我主無限的力量吧!\",\n\tYellAirphaseDem\t\t= \"Rikk zilthuras rikk zila Aman adare tiriosh \",--Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tYellPhase2Dem\t\t= \"Zar kiel xi romathIs zilthuras revos ruk toralar \",--Demonic, since curse of tonges is used by some guilds and it messes up yell detection.\n\tBeaconIconSet\t\t= \"冰霜信標{rt%d}: %s\",\n\tAchievementWarning\t= \"警告: %s中了5層秘能連擊\",\n\tAchievementFailed\t= \">> 成就失敗: %s中了%d層秘能連擊 <<\"\n})\n\n---------------------\n--  The Lich King  --\n---------------------\nL = DBM:GetModLocalization(\"LichKing\")\n\nL:SetGeneralLocalization({\n\tname = \"巫妖王\"\n})\n\nL:SetWarningLocalization({\n\tValkyrWarning\t\t\t= \"%s >%s< %s 給抓住了!\",\n\tSpecWarnYouAreValkd\t\t= \"你給抓住了\",\n\tWarnNecroticPlagueJump\t= \"亡域瘟疫跳到>%s<身上\",\n\tSpecWarnValkyrLow\t\t= \"華爾琪血量低於55%\"\n})\n\nL:SetTimerLocalization({\n\tTimerRoleplay\t\t\t\t= \"角色扮演\",\n\tPhaseTransition\t\t\t\t= \"轉換階段\",\n\tTimerNecroticPlagueCleanse\t= \"淨化亡域瘟疫\"\n})\n\nL:SetOptionLocalization({\n\tTimerRoleplay\t\t\t\t= \"為角色扮演事件顯示計時器\",\n\tWarnNecroticPlagueJump\t\t= \"提示$spell:73912跳躍後的目標\",\n\tTimerNecroticPlagueCleanse\t= \"為淨化第一次堆疊前的亡域瘟疫顯示計時器\",\n\tPhaseTransition\t\t\t\t= \"為轉換階段顯示計時器\",\n\tValkyrWarning\t\t\t\t= \"提示誰給華爾琪影衛抓住了\",\n\tSpecWarnYouAreValkd\t\t\t= \"當你給華爾琪影衛抓住時顯示特別警告\",\n\tAnnounceValkGrabs\t\t\t= \"提示誰被華爾琪影衛抓住到團隊頻道<br/>(需開啟團隊廣播及助理權限)\",\n\tSpecWarnValkyrLow\t\t\t= \"當華爾琪血量低於55%時顯示特別警告\",\n\tAnnouncePlagueStack\t\t\t= \"提示$spell:73912層數到團隊頻道 (10層, 10層後每5層提示一次)<br/>(需開啟助理權限)\",\n\tShowFrame\t\t\t\t\t= \"顯示華爾琪目標框架\",\n\tFrameClassColor\t\t\t\t= \"在華爾琪目標框架中顯示職業顏色\",\n\tFrameUpwards\t\t\t\t= \"使華爾琪目標框架向上延伸而非向下顯示\",\n\tFrameLocked\t\t\t\t\t= \"鎖定華爾琪目標框架\",\n\tRemoveImmunes\t\t\t\t= \"離開霜之哀傷前自動移除無敵技能\"\n})\n\nL:SetMiscLocalization({\n\tLKPull\t\t\t\t\t= \"聖光所謂的正義終於來了嗎?我是否該把霜之哀傷放下，祈求你的寬恕呢，弗丁?\",\n\tLKRoleplay\t\t\t\t= \"你們的原動力真的是正義感嗎?我很懷疑...\",\n\tValkGrabbedIcon\t\t\t= \"華爾琪影衛{rt%d}抓住了%s\",\n\tValkGrabbed\t\t\t\t= \"華爾琪影衛抓住了%s\",\n\tPlagueStackWarning\t\t= \"警告: %s中了%d層亡域瘟疫\",\n\tAchievementCompleted\t= \">> 成就成功: %s中了%d層亡域瘟疫 <<\",\n\tFrameTitle\t\t\t\t= \"華爾琪鎖定目標\",\n\tFrameLock\t\t\t\t= \"框架鎖定\",\n\tFrameClassColor\t\t\t= \"使用職業顏色\",\n\tFrameOrientation\t\t= \"向上延伸\",\n\tFrameHide\t\t\t\t= \"隱藏框架\",\n\tFrameClose\t\t\t\t= \"關閉\",\n\tFrameGUIDesc\t\t\t= \"華爾琪框架\",\n\tFrameGUIMoveMe\t\t\t= \"移動華爾琪框架\"\n})\n\n-------------\n--  Trash  --\n-------------\nL = DBM:GetModLocalization(\"ICCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"冰冠城塞小怪\"\n})\n\nL:SetWarningLocalization({\n\tSpecWarnTrapL\t\t= \"觸發陷阱! - 亡縛守衛被釋放了\",\n\tSpecWarnTrapP\t\t= \"觸發陷阱! - 復仇的血肉收割者到來\",\n\tSpecWarnGosaEvent\t= \"辛德拉苟莎夾道攻擊開始!\"\n})\n\nL:SetOptionLocalization({\n\tSpecWarnTrapL\t\t= \"當觸發陷阱時顯示特別警告\",\n\tSpecWarnTrapP\t\t= \"當觸發陷阱時顯示特別警告\",\n\tSpecWarnGosaEvent\t= \"為辛德拉苟莎夾道攻擊顯示特別警告\"\n})\n\nL:SetMiscLocalization({\n\tWarderTrap1\t\t\t= \"誰...在那兒...?\",\n\tWarderTrap2\t\t\t= \"我...甦醒了!\",\n\tWarderTrap3\t\t\t= \"主人的聖所受到了打擾!\",\n\tFleshreaperTrap1\t= \"快，我們要從後面奇襲他們!\",\n\tFleshreaperTrap2\t= \"你無法逃避我們!\",\n\tFleshreaperTrap3\t= \"生人...在此?\",\n\tSindragosaEvent\t\t= \"你一定不能靠近冰霜之后。快，阻止他們!\"\n})\n"
  },
  {
    "path": "DBM-Karazhan/Attumen.lua",
    "content": "local mod\t= DBM:NewMod(\"Attumen\", \"DBM-Karazhan\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(16151, 16152)--15550\nmod:SetEncounterID(652)\n\nmod:SetModelID(16416)\nmod:SetBossHPInfoToHighest()\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 29711 29833\",\n\t\"SPELL_SUMMON 29714 29799\",\n\t\"UNIT_DIED\"\n)\n\nlocal warnKnockdown\t= mod:NewSpellAnnounce(29711, 4)\nlocal warningCurse\t= mod:NewSpellAnnounce(29833, 4)\nlocal warnPhase2\t= mod:NewPhaseAnnounce(2)\n\nlocal timerCurseCD\t= mod:NewCDTimer(27, 43127, nil, nil, nil, 3, nil, DBM_COMMON_L.CURSE_ICON)\n\nfunction mod:OnCombatStart()\n\tself:SetStage(1)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 29711 then\n\t\twarnKnockdown:Show()\n\telseif args.spellId == 29833 then\n\t\twarningCurse:Show()\n\t\ttimerCurseCD:Start(self.vb.phase == 2 and 30.5 or 27.8)\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 29799 then\n\t\tself:SetStage(2)\n\t\twarnPhase2:Show()\n\t\ttimerCurseCD:Start(20.2)\n\t-- elseif args.spellId == 29714 then -- when attument arrives\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 16152 then\n\t\tDBM:EndCombat(self)\n\tend\nend\n"
  },
  {
    "path": "DBM-Karazhan/BigBadWolf.lua",
    "content": "local mod\t= DBM:NewMod(\"BigBadWolf\", \"DBM-Karazhan\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17521)\nmod:SetEncounterID(655) -- Opera Hall\nmod:SetModelID(17053)\nmod:SetUsedIcons(8)\nmod:RegisterCombat(\"yell\", L.DBM_BBW_YELL_1)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 30753 30752\",\n\t\"SPELL_AURA_REMOVED 30753\"\n)\n\nlocal warningFear\t\t= mod:NewSpellAnnounce(30752, 3)\nlocal warningRRH\t\t= mod:NewTargetNoFilterAnnounce(30753, 4)\n\nlocal specWarnRRH\t\t= mod:NewSpecialWarningRun(30753, nil, nil, nil, 4, 2)\n\nlocal timerRRH\t\t\t= mod:NewTargetTimer(20, 30753, nil, nil, nil, 3)\nlocal timerRRHCD\t\t= mod:NewNextTimer(30, 30753, nil, nil, nil, 3)\nlocal timerFearCD\t\t= mod:NewNextTimer(24, 30752, nil, nil, nil, 2)\n\nmod:AddSetIconOption(\"RRHIcon\", 30753, true, false, {8})\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 30753 then\n\t\ttimerRRH:Start(args.destName)\n\t\tif self:IsInCombat() then--Because sometimes debuff goes out half sec after combat end\n\t\t\ttimerRRHCD:Start()\n\t\t\tif args:IsPlayer() then\n\t\t\t\tspecWarnRRH:Show()\n\t\t\t\tspecWarnRRH:Play(\"justrun\")\n\t\t\t\tspecWarnRRH:ScheduleVoice(1, \"keepmove\")\n\t\t\telse\n\t\t\t\twarningRRH:Show(args.destName)\n\t\t\tend\n\t\t\tif self.Options.RRHIcon then\n\t\t\t\tself:SetIcon(args.destName, 8, 20)\n\t\t\tend\n\t\tend\n\telseif args.spellId == 30752 and self:AntiSpam() then\n\t\twarningFear:Show()\n\t\ttimerFearCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 30753 and self.Options.RRHIcon then\n\t\tself:SetIcon(args.destName, 0)\n\tend\nend\n"
  },
  {
    "path": "DBM-Karazhan/Chess.lua",
    "content": "local mod\t= DBM:NewMod(\"Chess\", \"DBM-Karazhan\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal playerFactoin = UnitFactionGroup(\"player\")\nmod:SetRevision(\"20250929220131\")\nif playerFactoin == \"Alliance\" then\n\tmod:SetCreatureID(21752)--Warchief Blackhand\nelse\n\tmod:SetCreatureID(21684)--King Llane\nend\nmod:SetEncounterID(660)\nmod:SetModelID(18720)\n\nmod:RegisterCombat(\"combat\")--Actually not how we register combat, bogus because SetWipeTime needs it\nmod:SetWipeTime(600)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 37471 37472\",\n\t\"SPELL_AURA_APPLIED 30529\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\"\n)\n\n--Verify cheat timer\nlocal timerHeroism\t\t\t= mod:NewBuffActiveTimer(10, 37471)\nlocal timerBloodlust\t\t= mod:NewBuffActiveTimer(10, 37472)\nlocal timerRecentlyInGame\t= mod:NewBuffFadesTimer(10, 30529, nil, nil, nil, 5)\nlocal timerNextCheat\t\t= mod:NewTimer(108, \"timerCheat\", 39342, nil, nil, 3)\n\nfunction mod:OnCombatStart(delay)\n\ttimerNextCheat:Start(108-delay)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 30529 and args:IsPlayer() then\n\t\ttimerRecentlyInGame:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 37471 then\n\t\ttimerHeroism:Start()\n\telseif args.spellId == 37472 then\n\t\ttimerBloodlust:Start()\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)\n\tif msg == L.EchoCheats then\n\t\ttimerNextCheat:Start()--All other cheats should be every 108 like clockwork. Only the second is random. Ie, 111, 120, 108 repeating, OR 111, 108 repeating.\n\tend\nend\n"
  },
  {
    "path": "DBM-Karazhan/Curator.lua",
    "content": "local mod\t= DBM:NewMod(\"Curator\", \"DBM-Karazhan\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15691)\nmod:SetEncounterID(656)\n\nmod:SetModelID(16958)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 30254 30403\",\n\t\"SPELL_CAST_SUCCESS 30235\"\n)\n\n--TODO, fix evocate timer in classic TBC, it was fucked with on retail and kinda broken but should work fine in TBC\n--EDIT, it seems there is a max evo timer of 115, but if you kill sparks early he spawns new ones early and if you keep doing this you caan shorten timer considerably\n--As such, this mod would need to recheck boss energy every time adds spawn and live update timer off UNIT_POWER maybe?\n--ability.id = 30254 and type = \"cast\"\nlocal warnAdd\t\t\t= mod:NewAnnounce(\"warnAdd\", 3, 568)\nlocal warnEvo\t\t\t= mod:NewSpellAnnounce(30254, 2)\nlocal warnArcaneInfusion= mod:NewSpellAnnounce(30403, 4)\n\nlocal timerEvo\t\t\t= mod:NewBuffActiveTimer(20, 30254, nil, nil, nil, 6)\n--local timerNextEvo\t\t= mod:NewNextTimer(115, 30254, nil, nil, nil, 6)\n\nlocal berserkTimer\t\t= mod:NewBerserkTimer(720)\n\nmod:AddRangeFrameOption(\"10\", nil, true)\n\nlocal addGUIDS = {}\n\nfunction mod:OnCombatStart(delay)\n\ttable.wipe(addGUIDS)\n\tberserkTimer:Start(-delay)\n--\ttimerNextEvo:Start(-delay)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(10)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 30254 then\n\t\twarnEvo:Show()\n\t\ttimerEvo:Start()\n--\t\ttimerNextEvo:Start()\n\telseif args.spellId == 30403 then\n\t\twarnArcaneInfusion:Show()\n--\t\ttimerNextEvo:Stop()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 30235 and not addGUIDS[args.sourceGUID] then\n\t\taddGUIDS[args.sourceGUID] = true\n\t\tif self:AntiSpam(3, 1) then\n\t\t\twarnAdd:Show()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Karazhan/DBM-Karazhan.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Karazhan|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0카라잔|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0卡拉赞|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0卡拉贊|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Каражан|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMKarazhan_AllSavedVars\n## SavedVariablesPerCharacter: DBMKarazhan_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: BC\n## X-DBM-StatTypes: normal, timewalker\n## X-DBM-Mod-MapID: 800\n## X-DBM-Mod-Sort: 1007\n## X-DBM-Mod-Name: Karazhan\n## X-DBM-Mod-Name-zhCN: 卡拉赞\n## X-DBM-Mod-Name-ruRU: Каражан\n## X-DBM-Mod-LoadZone: Karazhan\n## X-DBM-Mod-LoadZone-zhTW: 卡拉贊\n## X-DBM-Mod-LoadZone-zhCN: 卡拉赞\n## X-DBM-Mod-LoadZone-deDE: Karazhan\n## X-DBM-Mod-LoadZone-esES: Karazhan\n## X-DBM-Mod-LoadZone-esMX: Karazhan\n## X-DBM-Mod-LoadZone-frFR: Karazhan\n## X-DBM-Mod-LoadZone-koKR: 카라잔\n## X-DBM-Mod-LoadZone-ruRU: Каражан\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.fr.lua\nlocalization.kr.lua\nlocalization.es.lua\nlocalization.tw.lua\nlocalization.cn.lua\nlocalization.ru.lua\n\nAttumen.lua\nMoroes.lua\nMaidenOfVirtue.lua\nBigBadWolf.lua\nRomuloAndJulianne.lua\nWizardOfOz.lua\nCurator.lua\nTerestianIllhoof.lua\nShadeOfAran.lua\nNetherspite.lua\nChess.lua\nPrinceMalchezaar.lua\nNightbane.lua\nNamedBeasts.lua\n"
  },
  {
    "path": "DBM-Karazhan/MaidenOfVirtue.lua",
    "content": "local mod\t= DBM:NewMod(\"Maiden\", \"DBM-Karazhan\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(16457)\nmod:SetEncounterID(654)\n\nmod:SetModelID(16198)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 29511\",\n\t\"SPELL_AURA_APPLIED 29522\",\n\t\"SPELL_AURA_REMOVED 29522\"\n)\n\n--TODO, rependance timer is consistent but there is an unknown trigger that happens once per kill where the timer resets?\n--Maybe reaching a health threshold resets the CD?\n--ability.id = 29511 and type = \"begincast\"\nlocal warningRepentance\t\t= mod:NewSpellAnnounce(29511, 4)\nlocal warningHolyFire\t\t= mod:NewTargetNoFilterAnnounce(29522, 2)\n\n--local specWarnHolyFire\t\t= mod:NewSpecialWarningMoveAway(29522, nil, nil, nil, 1, 2)\n\nlocal timerRepentance\t\t= mod:NewBuffActiveTimer(12.6, 29511, nil, nil, nil, 2)\nlocal timerRepentanceCD\t\t= mod:NewNextTimer(33, 29511, nil, nil, nil, 6) -- (PTR [2025-01-15]@[20:56:43] || Onyxia 10N [2025-01-30]@[22:02:22]) - \"Repentance-29511-npc:16457-468 = pull:33.01, 32.98, 33.00, 33.02, 33.02, 33.01\" || \"Repentance-29511-npc:16457-468 = pull:33.02\"\nlocal timerHolyFire\t\t\t= mod:NewTargetTimer(12, 29522, nil, nil, nil, 5, nil, DBM_COMMON_L.MAGIC_ICON)\n\nmod:AddRangeFrameOption(10, 29522)\n\nfunction mod:OnCombatStart(delay)\n\ttimerRepentanceCD:Start(-delay)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(10)\n\tend\n\t--DBM:AddMsg(\"Repentance timer is not broken. This is an ability that has a 29 second minimum cooldown window, but after coming off CD can be delayed up to 20 seconds on when it's cast. Basically it's a 29-49sec window. DBM shows timer for the start of that window, but cannot control whether or not the boss casts it at 29, 39, or 49. Use this knowledge to inform you of when the ability can NOT be cast, not when it will be.\")\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 29511 then\n\t\twarningRepentance:Show()\n\t\ttimerRepentance:Start()\n\t\ttimerRepentanceCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 29522 then\n\t\twarningHolyFire:Show(args.destName)\n\t\ttimerHolyFire:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 29522 then\n\t\ttimerHolyFire:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Karazhan/Moroes.lua",
    "content": "local mod\t= DBM:NewMod(\"Moroes\", \"DBM-Karazhan\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15687)--Moroes\nmod:SetEncounterID(653)\n\nmod:SetModelID(16540)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 29405 35096 29562\",\n\t\"SPELL_AURA_APPLIED 29448 29425 34694 29572 37023 37066\",\n\t\"SPELL_AURA_REMOVED 34694 29425\"\n)\n\nlocal warningVanish\t\t\t= mod:NewSpellAnnounce(29448, 4)\nlocal warningGarrote\t\t= mod:NewTargetNoFilterAnnounce(37066, 2, nil, \"Healer\")\nlocal warningGouge\t\t\t= mod:NewTargetAnnounce(29425, 4)\nlocal warningBlind\t\t\t= mod:NewTargetAnnounce(34694, 3)\nlocal warningMortalStrike\t= mod:NewTargetNoFilterAnnounce(29572, 1, nil, \"Tank|Healer\")\nlocal warningFrenzy\t\t\t= mod:NewSpellAnnounce(37023, 4)\nlocal warningManaBurn\t\t= mod:NewCastAnnounce(29405, 3, nil, nil, false)\nlocal warningGreaterHeal\t= mod:NewCastAnnounce(35096, 3, nil, nil, \"HasInterrupt\")\nlocal warningHolyLight\t\t= mod:NewCastAnnounce(29562, 3, nil, nil, \"HasInterrupt\")\n\nlocal specWarnGreaterHeal\t= mod:NewSpecialWarningInterrupt(35096, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnHolyLight\t\t= mod:NewSpecialWarningInterrupt(29562, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerVanishCD\t\t\t= mod:NewCDTimer(35.1, 29448, nil, nil, nil, 6)--35.1-51.8\nlocal timerGougeCD\t\t\t= mod:NewCDTimer(22.6, 29448, nil, \"Tank\", nil, 6)--22.6-43.6\nlocal timerGouge\t\t\t= mod:NewTargetTimer(6, 29425, nil, false, nil, 3)\nlocal timerBlind\t\t\t= mod:NewTargetTimer(10, 34694, nil, false, nil, 3)\nlocal timerMortalStrike\t\t= mod:NewTargetTimer(5, 29572, nil, \"Tank|Healer\", nil, 5)\n\nfunction mod:OnCombatStart(delay)\n\ttimerVanishCD:Start(-delay)\n\ttimerGougeCD:Start(-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 29405 then\n\t\twarningManaBurn:Show()\n\telseif args.spellId == 35096 then\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then--Only show warning/timer for your own target.\n\t\t\tspecWarnGreaterHeal:Show(args.sourceName)\n\t\t\tspecWarnGreaterHeal:Play(\"kickcast\")\n\t\telse\n\t\t\twarningGreaterHeal:Show()\n\t\tend\n\telseif args.spellId == 29562 then\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then--Only show warning/timer for your own target.\n\t\t\tspecWarnHolyLight:Show(args.sourceName)\n\t\t\tspecWarnHolyLight:Play(\"kickcast\")\n\t\telse\n\t\t\twarningHolyLight:Show()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 29448 then\n\t\twarningVanish:Show()\n\t\ttimerVanishCD:Start()\n\telseif args.spellId == 29425 then\n\t\twarningGouge:Show(args.destName)\n\t\ttimerGouge:Show(args.destName)\n\t\ttimerGougeCD:Start()\n\telseif args.spellId == 34694 then\n\t\twarningBlind:Show(args.destName)\n\t\ttimerBlind:Show(args.destName)\n\telseif args.spellId == 29572 then\n\t\twarningMortalStrike:Show(args.destName)\n\t\ttimerMortalStrike:Show(args.destName)\n\telseif args.spellId == 37023 then--Frenzy, he's no longer going to vanish.\n\t\twarningFrenzy:Show()\n\t\ttimerVanishCD:Cancel()\n\telseif args.spellId == 37066 then\n\t\twarningGarrote:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 34694 then\n\t\ttimerBlind:Stop(args.destName)\n\telseif args.spellId == 29425 then\n\t\ttimerGouge:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Karazhan/NamedBeasts.lua",
    "content": "local mod1\t= DBM:NewMod(\"Shadikith\", \"DBM-Karazhan\")\nmod1:SetCreatureID(16180)\nmod1:RegisterCombat(\"combat\")\n\nlocal mod2\t= DBM:NewMod(\"Hyakiss\", \"DBM-Karazhan\")\nmod2:SetCreatureID(16179)\nmod2:RegisterCombat(\"combat\")\n\nlocal mod3\t= DBM:NewMod(\"Rokad\", \"DBM-Karazhan\")\nmod3:SetCreatureID(16181)\nmod3:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Karazhan/Netherspite.lua",
    "content": "local mod\t= DBM:NewMod(\"Netherspite\", \"DBM-Karazhan\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15689)\nmod:SetEncounterID(659)\n\nmod:SetModelID(15363)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 38523\",\n\t\"SPELL_CAST_SUCCESS 37014 37063\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\"\n)\n\nlocal warningPortal\t\t\t= mod:NewAnnounce(\"warningPortal\", 1, \"Interface\\\\Icons\\\\Spell_Arcane_PortalIronforge\")\nlocal warningBanish\t\t\t= mod:NewAnnounce(\"warningBanish\", 1, \"Interface\\\\Icons\\\\Spell_Shadow_Cripple\")\nlocal warningBreathCast\t\t= mod:NewCastAnnounce(38523, 2)\nlocal warningVoid\t\t\t= mod:NewSpellAnnounce(37063, 4)\n\nlocal specWarnVoid\t\t\t= mod:NewSpecialWarningGTFO(30533, nil, nil, nil, 1, 6)\n\nlocal timerPortalPhase\t\t= mod:NewTimer(61.5, \"timerPortalPhase\", \"Interface\\\\Icons\\\\Spell_Arcane_PortalIronforge\", nil, nil, 6)\nlocal timerBanishPhase\t\t= mod:NewTimer(30, \"timerBanishPhase\", \"Interface\\\\Icons\\\\Spell_Shadow_Cripple\", nil, nil, 6)\nlocal timerBreathCast\t\t= mod:NewCastTimer(2.5, 38523, nil, nil, nil, 3)\n\nlocal berserkTimer\t\t\t= mod:NewBerserkTimer(540)\n\nfunction mod:OnCombatStart(delay)\n\tberserkTimer:Start(-delay)\n\ttimerPortalPhase:Start(63.5-delay)\n\tif not self:IsTrivial() then\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"SPELL_PERIODIC_DAMAGE 30533\",\n\t\t\t\"SPELL_PERIODIC_MISSED 30533\"\n\t\t)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tself:UnregisterShortTermEvents()\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 38523 then\n\t\twarningBreathCast:Show()\n\t\ttimerBreathCast:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(37014, 37063) then\n\t\twarningVoid:Show()\n\tend\nend\n\nfunction mod:SPELL_PERIODIC_DAMAGE(_, _, _, destGUID, _, _, spellId, spellName)\n\tif spellId == 30533 and destGUID == UnitGUID(\"player\") and self:AntiSpam() then\n\t\tspecWarnVoid:Show(spellName)\n\t\tspecWarnVoid:Play(\"watchfeet\")\n\tend\nend\nmod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)\n\tif msg == L.DBM_NS_EMOTE_PHASE_2 then\n\t\ttimerPortalPhase:Cancel()\n\t\twarningBanish:Show()\n\t\ttimerBanishPhase:Start()\n\telseif msg == L.DBM_NS_EMOTE_PHASE_1 then\n\t\ttimerBanishPhase:Cancel()\n\t\twarningPortal:Show()\n\t\ttimerPortalPhase:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Karazhan/Nightbane.lua",
    "content": "local mod\t= DBM:NewMod(\"NightbaneRaid\", \"DBM-Karazhan\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17225)\nmod:SetEncounterID(662)\n\nmod:SetModelID(18062)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_EMOTE\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 36922\",\n\t\"SPELL_CAST_SUCCESS 37098 30128\",\n\t\"SPELL_AURA_APPLIED 30129 30130\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal warningFear\t\t\t= mod:NewSpellAnnounce(36922, 4)\nlocal warningAsh\t\t\t= mod:NewTargetAnnounce(30130, 2, nil, false)\nlocal WarnAir\t\t\t\t= mod:NewAnnounce(\"DBM_NB_AIR_WARN\", 2, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\")\nlocal warningBone\t\t\t= mod:NewSpellAnnounce(37098, 3)\n\nlocal specWarnCharred\t\t= mod:NewSpecialWarningGTFO(30129, nil, nil, nil, 1, 6)\nlocal specWarnSmoke\t\t\t= mod:NewSpecialWarningTarget(30128, \"Healer\", nil, nil, 1, 2)\n\nlocal timerNightbane\t\t= mod:NewCombatTimer(36)\nlocal timerFearCD\t\t\t= mod:NewCDTimer(31.5, 36922, nil, nil, nil, 2)\nlocal timerAirPhase\t\t\t= mod:NewTimer(57, \"timerAirPhase\", \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\", nil, nil, 6)\nlocal timerBone\t\t\t\t= mod:NewBuffActiveTimer(11, 37098, nil, nil, nil, 1)\n\nmod:AddSetIconOption(\"SetIconOnCharred\", 30128, true, false, {1})\n\nmod.vb.lastBlastTarget = \"none\"\n\nfunction mod:OnCombatStart()\n\tself.vb.lastBlastTarget = \"none\"\nend\n\nfunction mod:CHAT_MSG_MONSTER_EMOTE(msg)\n\tif msg == L.DBM_NB_EMOTE_PULL then\n\t\ttimerNightbane:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 36922 then\n\t\twarningFear:Show()\n\t\ttimerFearCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 37098 then\n\t\twarningBone:Show()\n\t\ttimerBone:Start()\n\telseif args.spellId == 30128 and self.vb.lastBlastTarget ~= args.destName then\n\t\tself.vb.lastBlastTarget = args.destName\n\t\tspecWarnSmoke:Show(args.destName)\n\t\tspecWarnSmoke:Play(\"targetchange\")\n\t\tif self.Options.SetIconOnCharred then\n\t\t\tself:SetIcon(args.destName, 1)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 30129 and args:IsPlayer() and not self:IsTrivial() and self:AntiSpam() then\n\t\tspecWarnCharred:Show(args.spellName)\n\t\tspecWarnCharred:Play(\"watchfeet\")\n\telseif args.spellId == 30130 then\n\t\twarningAsh:Show(args.destName)\n\tend\nend\n\ndo\n\tlocal function clearSetIcon(self)\n\t\tif self.Options.SetIconOnCharred and self.vb.lastBlastTarget ~= \"none\" then\n\t\t\tself:SetIcon(self.vb.lastBlastTarget , 0)\n\t\tend\n\tend\n\n\tfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\t\tself.vb.lastBlastTarget = \"none\"\n\t\tif msg == L.DBM_NB_YELL_AIR then\n\t\t\tWarnAir:Show()\n\t\t\ttimerAirPhase:Stop()\n\t\t\ttimerAirPhase:Start()\n\t\t\tself:Unschedule(clearSetIcon)\n\t\t\tself:Schedule(57, clearSetIcon, self)\n\t\telseif msg == L.DBM_NB_YELL_GROUND or msg == L.DBM_NB_YELL_GROUND2 then--needed. because if you deal more 25% damage in air phase, air phase repeated and shorten. So need to update exact ground phase.\n\t\t\ttimerAirPhase:Update(43, 57)\n\t\t\tself:Unschedule(clearSetIcon)\n\t\t\tself:Schedule(14, clearSetIcon, self)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Karazhan/PrinceMalchezaar.lua",
    "content": "local mod\t= DBM:NewMod(\"Prince\", \"DBM-Karazhan\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15690)\nmod:SetEncounterID(661)\n\nmod:SetModelID(19274)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 30852\",\n\t\"SPELL_CAST_SUCCESS 30843\",\n\t\"SPELL_AURA_APPLIED 30854 30898 39095 30843 30859\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"UNIT_SPELLCAST_SUCCEEDED\"\n)\n\n--TODO, improve phase change timer updates, I don't really feel like it right now\n--TODO, also switch to pre changed timers, these are probably wrong for classic TBC, they were changed on retail\nlocal warningNovaCast\t\t\t= mod:NewCastAnnounce(30852, 3)\nlocal warningInfernal\t\t\t= mod:NewSpellAnnounce(37277, 2)\nlocal warningHellfire\t\t\t= mod:NewSpellAnnounce(30859, 3)\nlocal warningEnfeeble\t\t\t= mod:NewTargetNoFilterAnnounce(30843, 4)\nlocal warnPhase2\t\t\t\t= mod:NewPhaseAnnounce(2)\nlocal warnPhase3\t\t\t\t= mod:NewPhaseAnnounce(3)\nlocal warningAmpMagic\t\t\t= mod:NewTargetNoFilterAnnounce(39095, 3)\nlocal warningSWP\t\t\t\t= mod:NewTargetNoFilterAnnounce(30898, 2, nil, \"RemoveMagic\")\n\nlocal specWarnEnfeeble\t\t\t= mod:NewSpecialWarningYou(30843, nil, nil, nil, 3, 2)\nlocal specWarnNova\t\t\t\t= mod:NewSpecialWarningRun(30852, \"Melee\", nil, nil, 4, 2)\n\nlocal timerNovaCD\t\t\t\t= mod:NewCDTimer(18.1, 30852, nil, nil, nil, 2)--18.1-30\nlocal timerNextInfernal\t\t\t= mod:NewCDTimer(45, 37277, nil, nil, nil, 1)--Spawning\nlocal timerHellfire\t\t\t\t= mod:NewCDTimer(14.5, 30859, nil, nil, nil, 3)--Landing/activating Hellfire\nlocal timerEnfeebleCD\t\t\t= mod:NewNextTimer(30, 30843, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerEnfeeble\t\t\t\t= mod:NewBuffFadesTimer(9, 30843)\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\ttimerNextInfernal:Start(14.5-delay)--14-21?\n\ttimerEnfeebleCD:Start(30-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 30852 then\n\t\tif self.Options.SpecWarn30852run and DBM:UnitDebuff(\"player\", 30843) then\n\t\t\tspecWarnNova:Show()--Trivial damage, but because of enfeeble, don't want to do a blind level check here\n\t\t\tspecWarnNova:Play(\"justrun\")\n\t\telse\n\t\t\twarningNovaCast:Show()\n\t\tend\n\t\ttimerNovaCD:Start(self.vb.phase == 3 and 18.1 or 30)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 30843 then\n\t\ttimerEnfeebleCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(30854, 30898) then\n\t\twarningSWP:Show(args.destName)\n\telseif args.spellId == 39095 then\n\t\twarningAmpMagic:Show(args.destName)\n\telseif args.spellId == 30843 then\n\t\twarningEnfeeble:CombinedShow(0.3, args.destName)\n\t\tif args:IsPlayer() then\n\t\t\ttimerEnfeeble:Start()\n\t\t\tspecWarnEnfeeble:Show()\n\t\t\tspecWarnEnfeeble:Play(\"targetyou\")\n\t\tend\n\telseif args.spellId == 30859 and not args:IsDestTypePlayer() then--Hellfire applied to Infernals\n\t\twarningHellfire:Show()\n\t\t-- (during TBC there was like a 5 second delay between landing and gaining hellfire, but at some point they changed it to gain instantly\n\t\t--If this changes on classic TBC, this will probably need adjustment\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.DBM_PRINCE_YELL_INF1 or msg == L.DBM_PRINCE_YELL_INF2 then\n\t\twarningInfernal:Show()\n\t\ttimerHellfire:Start(14.5)--14-16\n\t\ttimerNextInfernal:Start(self.vb.phase == 3 and 19.3 or 44.7)--44-48\n\telseif msg == L.DBM_PRINCE_YELL_P3 then\n\t\tself:SendSync(\"Phase3\")\n\telseif msg == L.DBM_PRINCE_YELL_P2 then\n\t\tself:SetStage(2)\n\t\twarnPhase2:Show()\n\t\t--Doesn't seem to affect any timers.\n\tend\nend\n\n--\"<275.31 12:32:09> [UNIT_SPELLCAST_SUCCEEDED] Prince Malchezaar(Deafstroket) -Summon Axes- [[target:Cast-3-4615-532-1222-30891-0000F6542B:30891]]\", -- [3138]\n--\"<275.56 12:32:10> [CHAT_MSG_MONSTER_YELL] How can you hope to stand against such overwhelming power?#Prince Malchezaar#####0#0##0#1766#nil#0#false#false#false#false\", -- [3146]\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(30891) and self:AntiSpam(3, 1) then--Summon Axes\n\t\tself:SendSync(\"Phase3\")\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif not self:IsInCombat() then return end\n\tif msg == \"Phase3\" then\n\t\tself:SetStage(3)\n\t\twarnPhase3:Show()\n\t\ttimerNovaCD:Stop()\n\t\ttimerNextInfernal:Stop()\n\t\ttimerEnfeebleCD:Stop()\n\t\ttimerNovaCD:Start(19.2)\n\t\t--\"<326.45 01:12:48> [DBM_Announce] Stage 3#136116#stage#3#Prince#false\", -- [759]\n\t\t--\"<366.46 01:13:28> [CHAT_MSG_MONSTER_YELL] You face not Malchezaar alone, but the legions I command!#Prince Malchezaar#####0#0##0#163#nil#0#false#false#false#false\", -- [883]\n\t\ttimerNextInfernal:Start(40)\n\tend\nend\n"
  },
  {
    "path": "DBM-Karazhan/RomuloAndJulianne.lua",
    "content": "local mod\t= DBM:NewMod(\"RomuloAndJulianne\", \"DBM-Karazhan\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17534, 17533, 99999)--99999 bogus creature id to keep mod from pre mature combat end.\nmod:SetEncounterID(655) -- Opera Hall\n--\nmod:SetModelID(17068)\nmod:RegisterCombat(\"yell\", L.RJ_Pull)\nmod:SetWipeTime(25)--guesswork\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 30878\",\n\t\"SPELL_AURA_APPLIED 30822 30830 30841 30887\",\n\t\"SPELL_AURA_APPLIED_DOSE 30830\",\n\t\"SPELL_AURA_REMOVED 30841 30887\",\n\t\"UNIT_DIED\"\n)\n\nlocal warnPhase2\t\t= mod:NewPhaseAnnounce(2)\nlocal warnPhase3\t\t= mod:NewPhaseAnnounce(3)\nlocal warningHeal\t\t= mod:NewCastAnnounce(30878, 3)\nlocal warningDaring\t\t= mod:NewTargetNoFilterAnnounce(30841, 3, nil, \"Tank|MagicDispeller\", 2)\nlocal warningDevotion\t= mod:NewTargetNoFilterAnnounce(30887, 3, nil, \"Tank|MagicDispeller\", 2)\nlocal warningPoison\t\t= mod:NewStackAnnounce(30830, 2, nil, \"Tank|Healer\")\n\nlocal timerHeal\t\t\t= mod:NewCastTimer(2.5, 30878)\nlocal timerDaring\t\t= mod:NewTargetTimer(8, 30841, nil, \"Tank|MagicDispeller\", 2, 5, nil, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.MAGIC_ICON)\nlocal timerDevotion\t\t= mod:NewTargetTimer(10, 30887, nil, \"Tank|MagicDispeller\", 2, 5, nil, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.MAGIC_ICON)\nlocal timerCombatStart\t= mod:NewCombatTimer(55)\n\nmod.vb.JulianneDied = 0\nmod.vb.RomuloDied = 0\n\nfunction mod:OnCombatStart()\n\tself.vb.JulianneDied = 0\n\tself.vb.RomuloDied = 0\n\tself:SetStage(1)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 30878 then\n\t\twarningHeal:Show()\n\t\ttimerHeal:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(30822, 30830) then\n\t\twarningPoison:Show(args.destName, args.amount or 1)\n\telseif args.spellId == 30841 then\n\t\twarningDaring:Show(args.destName)\n\t\ttimerDaring:Start(args.destName)\n\telseif args.spellId == 30887 then\n\t\twarningDevotion:Show(args.destName)\n\t\ttimerDevotion:Start(args.destName)\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 30841 then\n\t\ttimerDaring:Cancel(args.destName)\n\telseif args.spellId == 30887 then\n\t\ttimerDevotion:Cancel(args.destName)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.DBM_RJ_PHASE2_YELL or msg:find(L.DBM_RJ_PHASE2_YELL) then\n\t\twarnPhase3:Show()\n\t\tself:SetStage(3)\n\telseif msg == L.Event or msg:find(L.Event) then\n\t\ttimerCombatStart:Start()\n\tend\nend\n\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 17534 and self:IsInCombat() then\n\t\tif self.vb.phase == 3 then--kill only in phase 3.\n\t\t\tself.vb.JulianneDied = GetTime()\n\t\t\tif (GetTime() - self.vb.RomuloDied) < 10 then\n\t\t\t\tDBM:EndCombat(self)\n\t\t\tend\n\t\telse\n\t\t\twarnPhase2:Show()\n\t\t\tself:SetStage(2)\n\t\tend\n\telseif cid == 17533 and self:IsInCombat() then\n\t\tif self.vb.phase == 3 then--kill only in phase 3.\n\t\t\tself.vb.RomuloDied = GetTime()\n\t\t\tif (GetTime() - self.vb.JulianneDied) < 10 then\n\t\t\t\tDBM:EndCombat(self)\n\t\t\tend\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Karazhan/ShadeOfAran.lua",
    "content": "local mod\t= DBM:NewMod(\"Aran\", \"DBM-Karazhan\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(16524)\nmod:SetEncounterID(658)\n\nmod:SetModelID(16621)\nmod:RegisterCombat(\"combat\")\nmod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7, 8)\n\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 30004 29973 29969\",\n\t\"SPELL_AURA_APPLIED 29991 29946\",\n\t\"SPELL_AURA_REMOVED 29991 29946\",\n\t\"SPELL_SUMMON 29962 37051 37052 37053\"\n)\n\nlocal warningFlameCast\t\t= mod:NewCastAnnounce(30004, 4)\nlocal warningFlameTargets\t= mod:NewTargetNoFilterAnnounce(29946, 4)\nlocal warningBlizzard\t\t= mod:NewSpellAnnounce(29969, 3)\nlocal warningElementals\t\t= mod:NewSpellAnnounce(37053, 3)\nlocal warningChains\t\t\t= mod:NewTargetNoFilterAnnounce(29991, 2)\n\nlocal specWarnFlameWreath\t= mod:NewSpecialWarning(\"DBM_ARAN_DO_NOT_MOVE\", nil, nil, nil, 3, 2)\nlocal specWarnArcane\t\t= mod:NewSpecialWarningRun(29973, nil, nil, nil, 4, 7)\nlocal specWarnBlizzard\t\t= mod:NewSpecialWarningGTFO(29951, nil, nil, nil, 1, 6)\n\nlocal timerSpecial\t\t\t= mod:NewTimer(28.9, \"timerSpecial\", 23452, nil, nil, 2)\nlocal timerFlameCast\t\t= mod:NewCastTimer(5, 30004, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerArcaneExplosion\t= mod:NewCastTimer(10, 29973, nil, nil, nil, 2)\nlocal timerFlame\t\t\t= mod:NewBuffActiveTimer(20.2, 29946, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerBlizzad\t\t\t= mod:NewBuffActiveTimer(30, 29951, nil, nil, nil, 3)\nlocal timerElementals\t\t= mod:NewBuffActiveTimer(90, 37053, nil, nil, nil, 6)\nlocal timerChains\t\t\t= mod:NewTargetTimer(10, 29991, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)\n\nlocal berserkTimer\t\t\t= mod:NewBerserkTimer(900)\n\nmod:AddSetIconOption(\"WreathIcons\", 29946, true, false, {5, 6, 7, 8})\nmod:AddSetIconOption(\"ElementalIcons\", 37053, true, true, {1, 2, 3, 4})\n\nlocal WreathTargets = {}\nmod.vb.flameWreathIcon = 8\nmod.vb.mobIcon = 1\n\nlocal function warnFlameWreathTargets(self)\n\twarningFlameTargets:Show(table.concat(WreathTargets, \"<, >\"))\n\ttimerFlame:Start()\n\ttable.wipe(WreathTargets)\n\tself.vb.flameWreathIcon = 8\nend\n\nfunction mod:OnCombatStart(delay)\n\tberserkTimer:Start(-delay)\n\tself.vb.flameWreathIcon = 8\n\ttable.wipe(WreathTargets)\n\tself.vb.mobIcon = 1\n\tif not self:IsTrivial() then\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"SPELL_PERIODIC_DAMAGE 29951\",\n\t\t\t\"SPELL_PERIODIC_MISSED 29951\"\n\t\t)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tself:UnregisterShortTermEvents()\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 30004 then\n\t\twarningFlameCast:Show()\n\t\ttimerFlameCast:Start()\n\t\ttimerSpecial:Start()\n\telseif args.spellId == 29973 then\n\t\ttimerArcaneExplosion:Start()\n\t\tspecWarnArcane:Show()\n\t\tspecWarnArcane:Play(\"runtoedge\")\n\t\ttimerSpecial:Start()\n\telseif args.spellId == 29969 then\n\t\twarningBlizzard:Show()\n\t\ttimerBlizzad:Start()\n\t\ttimerSpecial:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 29991 then\n\t\twarningChains:Show(args.destName)\n\t\ttimerChains:Start(args.destName)\n\telseif args.spellId == 29946 then\n\t\tWreathTargets[#WreathTargets + 1] = args.destName\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnFlameWreath:Show()\n\t\t\tspecWarnFlameWreath:Play(\"stopmove\")\n\t\tend\n\t\tif self.Options.WreathIcons then\n\t\t\tself:SetIcon(args.destName, self.vb.flameWreathIcon, 20)\n\t\tend\n\t\tself.vb.flameWreathIcon = self.vb.flameWreathIcon - 1\n\t\tself:Unschedule(warnFlameWreathTargets)\n\t\tself:Schedule(0.3, warnFlameWreathTargets, self)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 29991 then\n\t\ttimerChains:Cancel(args.destName)\n\telseif args.spellId == 29946 and self.Options.WreathIcon then\n\t\tself:SetIcon(args.destName, 0)\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args:IsSpellID(29962, 37051, 37052, 37053) then -- Summon Water elementals\n\t\tif self:AntiSpam(5, 1) then\n\t\t\twarningElementals:Show()\n\t\t\ttimerElementals:Show()\n\t\tend\n\t\tif self.Options.ElementalIcons then\n\t\t\tself:ScanForMobs(args.destGUID, 2, self.vb.mobIcon, 1, nil, 10, \"ElementalIcons\")--creatureID, iconSetMethod, mobIcon, maxIcon, scanInterval, scanningTime, optionName, isFriendly, secondCreatureID, skipMarked\n\t\tend\n\t\tself.vb.mobIcon = self.vb.mobIcon + 1\n\t\tif self.vb.mobIcon == 5 then self.vb.mobIcon = 1 end\n\tend\nend\n\nfunction mod:SPELL_PERIODIC_DAMAGE(_, _, _, destGUID, _, _, spellId, spellName)\n\tif spellId == 29951 and destGUID == UnitGUID(\"player\") and self:AntiSpam(2.5, 2) then\n\t\tspecWarnBlizzard:Show(spellName)\n\t\tspecWarnBlizzard:Play(\"watchfeet\")\n\tend\nend\nmod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE\n"
  },
  {
    "path": "DBM-Karazhan/TerestianIllhoof.lua",
    "content": "local mod\t= DBM:NewMod(\"TerestianIllhoof\", \"DBM-Karazhan\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15688)\nmod:SetEncounterID(657)\n\nmod:SetModelID(11343)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 30115 30065\",\n\t\"SPELL_AURA_REMOVED 30115\",\n\t\"SPELL_CAST_SUCCESS 30066\"\n)\n\nlocal warningWeakened\t= mod:NewTargetNoFilterAnnounce(30065, 2)\nlocal warningImp\t\t= mod:NewSpellAnnounce(30066, 3)\nlocal warningSacrifice\t= mod:NewTargetNoFilterAnnounce(30115, 4)\n\nlocal specWarnSacrifice\t= mod:NewSpecialWarningYou(30115, nil, nil, nil, 1, 2)\nlocal yellSacrifice\t\t= mod:NewYell(30115)\n\nlocal timerWeakened\t\t= mod:NewBuffActiveTimer(31, 30065, nil, nil, nil, 6)\nlocal timerSacrifice\t= mod:NewTargetTimer(30, 30115, nil, nil, nil, 3)\nlocal timerSacrificeCD\t= mod:NewCDTimer(40.4, 30115, nil, nil, nil, 1)--40.4-47\n\nlocal berserkTimer\t\t= mod:NewBerserkTimer(600)\n\nfunction mod:OnCombatStart(delay)\n\t--timerSacrificeCD:Start(30-delay)--30-50?\n\tberserkTimer:Start(-delay)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 30115 then\n\t\ttimerSacrifice:Start(args.destName)\n\t\ttimerSacrificeCD:Start()\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnSacrifice:Show()\n\t\t\tspecWarnSacrifice:Play(\"targetyou\")\n\t\t\tyellSacrifice:Yell()\n\t\telse\n\t\t\twarningSacrifice:Show(args.destName)\n\t\tend\n\telseif args.spellId == 30065 then\n\t\twarningWeakened:Show(args.destName)\n\t\ttimerWeakened:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 30115 then\n\t\ttimerSacrifice:Stop(args.destName)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 30066 then\n\t\twarningImp:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Karazhan/WizardOfOz.lua",
    "content": "local mod\t= DBM:NewMod(\"Oz\", \"DBM-Karazhan\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(18168)\nmod:SetEncounterID(655) -- Opera Hall\n--\nmod:SetModelID(17550)\nmod:RegisterCombat(\"yell\", L.DBM_OZ_YELL_DOROTHEE)\nmod:SetMinCombatTime(25)\nmod:SetWipeTime(30)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED\",\n\t\"SPELL_CAST_START\",\n\t\"SPELL_CAST_SUCCESS\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal WarnRoar\t\t= mod:NewAnnounce(\"DBM_OZ_WARN_ROAR\", 2, nil, nil, false)--Hidden Object, conrolled by AnnounceBosses bool option\nlocal WarnStrawman\t= mod:NewAnnounce(\"DBM_OZ_WARN_STRAWMAN\", 2, nil, nil, false)--Hidden Object, conrolled by AnnounceBosses bool option\nlocal WarnTinhead\t= mod:NewAnnounce(\"DBM_OZ_WARN_TINHEAD\", 2, nil, nil, false)--Hidden Object, conrolled by AnnounceBosses bool option\nlocal WarnTido\t\t= mod:NewAnnounce(\"DBM_OZ_WARN_TITO\", 2, nil, nil, false)--Hidden Object, conrolled by AnnounceBosses bool option\nlocal WarnCrone\t\t= mod:NewAnnounce(\"DBM_OZ_WARN_CRONE\", 2, nil, nil, false)--Hidden Object, conrolled by AnnounceBosses bool option\nlocal warnFear\t\t= mod:NewSpellAnnounce(31013, 4)\nlocal warnBrainBash\t= mod:NewTargetNoFilterAnnounce(31046, 2)\nlocal warnChain\t\t= mod:NewSpellAnnounce(32337, 3)\n\nlocal timerFearCD\t= mod:NewCDTimer(19, 31013, nil, nil, nil, 2)\nlocal timerRoar\t\t= mod:NewTimer(12, \"DBM_OZ_WARN_ROAR\", 5209, nil, false, 1)\nlocal timerStrawman\t= mod:NewTimer(21, \"DBM_OZ_WARN_STRAWMAN\", \"Interface\\\\Icons\\\\Inv_helmet_34\", nil, false, 1)\nlocal timerTinhead\t= mod:NewTimer(29, \"DBM_OZ_WARN_TINHEAD\", \"Interface\\\\Icons\\\\Inv_helmet_02\", nil, false, 1)\n--local timerTito\t\t= mod:NewTimer(47.5, \"DBM_OZ_WARN_TITO\", 459, nil, false, 1)\n\nmod:AddRangeFrameOption(10, 32337, true)\nmod:AddBoolOption(\"AnnounceBosses\", true, \"announce\")\nmod:AddBoolOption(\"ShowBossTimers\", true, \"timer\")\n\nfunction mod:OnCombatStart(delay)\n\tif self.Options.ShowBossTimers then\n\t\ttimerRoar:Start(-delay)\n\t\ttimerStrawman:Start(-delay)\n\t\ttimerTinhead:Start(-delay)\n--\t\ttimerTito:Start(-delay)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 31046 then\n\t\twarnBrainBash:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 31014 then\n\t\tif self.Options.AnnounceBosses then\n\t\t\tWarnTido:Schedule(1)\n\t\tend\n\telseif args.spellId == 32337 then\n\t\twarnChain:Show()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 31013 then\n\t\twarnFear:Show()\n\t\ttimerFearCD:Start()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.DBM_OZ_YELL_ROAR then\n\t\tif self.Options.AnnounceBosses then\n\t\t\tWarnRoar:Show()\n\t\tend\n\telseif msg == L.DBM_OZ_YELL_STRAWMAN then\n\t\tif self.Options.AnnounceBosses then\n\t\t\tWarnStrawman:Show()\n\t\tend\n\telseif msg == L.DBM_OZ_YELL_TINHEAD then\n\t\tif self.Options.AnnounceBosses then\n\t\t\tWarnTinhead:Show()\n\t\tend\n\telseif msg == L.DBM_OZ_YELL_CRONE then\n\t\tif self.Options.AnnounceBosses then\n\t\t\tWarnCrone:Show()\n\t\tend\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Show(10)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Karazhan/localization.cn.lua",
    "content": "if GetLocale() ~= \"zhCN\" then return end\n\nlocal L\n\n--Attumen\nL = DBM:GetModLocalization(\"Attumen\")\n\nL:SetGeneralLocalization({\n\tname = \"猎手阿图门\"\n})\n\n\n\n--Moroes\nL = DBM:GetModLocalization(\"Moroes\")\n\nL:SetGeneralLocalization({\n\tname = \"莫罗斯\"\n})\n\nL:SetWarningLocalization({\n\tDBM_MOROES_VANISH_FADED\t= \"消失 - 效果消失\"\n})\n\nL:SetOptionLocalization({\n\tDBM_MOROES_VANISH_FADED\t= \"显示消失警报\"\n})\n\n-- Maiden of Virtue\nL = DBM:GetModLocalization(\"Maiden\")\n\nL:SetGeneralLocalization({\n\tname = \"贞节圣女\"\n})\n\n-- Romulo and Julianne\nL = DBM:GetModLocalization(\"RomuloAndJulianne\")\n\nL:SetGeneralLocalization({\n\tname = \"罗密欧与朱丽叶\"\n})\n\nL:SetMiscLocalization({\n\tDBM_RJ_PHASE2_YELL\t= \"来吧，可爱的黑颜的夜，把我的罗密欧给我！\",\n\tRomulo\t\t\t\t= \"罗密欧\",\n\tJulianne\t\t\t= \"朱丽叶\"\n})\n\n-- Big Bad Wolf\nL = DBM:GetModLocalization(\"BigBadWolf\")\n\nL:SetGeneralLocalization({\n\tname = \"大灰狼\"\n})\n\nL:SetMiscLocalization({\n\tDBM_BBW_YELL_1\t\t\t= \"可以一口把你吃掉呀！\"\n})\n\n-- Curator\nL = DBM:GetModLocalization(\"Curator\")\n\nL:SetGeneralLocalization({\n\tname = \"馆长\"\n})\n\n-- Terestian Illhoof\nL = DBM:GetModLocalization(\"TerestianIllhoof\")\n\nL:SetGeneralLocalization({\n\tname = \"特雷斯坦·邪蹄\"\n})\n\nL:SetMiscLocalization({\n\tKilrek\t\t\t\t\t= \"基尔里克\",\n\tDChains\t\t\t\t\t= \"恶魔之链\"\n})\n\n-- Shade of Aran\nL = DBM:GetModLocalization(\"Aran\")\n\nL:SetGeneralLocalization({\n\tname = \"埃兰之影\"\n})\n\nL:SetWarningLocalization({\n\tDBM_ARAN_DO_NOT_MOVE\t= \"不要移动！\"\n})\n\nL:SetOptionLocalization({\n\tDBM_ARAN_DO_NOT_MOVE\t= \"显示特殊警告  $spell:30004\"\n})\n\n--Netherspite\nL = DBM:GetModLocalization(\"Netherspite\")\n\nL:SetGeneralLocalization({\n\tname = \"虚空幽龙\"\n})\n\nL:SetWarningLocalization({\n\tDBM_NS_WARN_PORTAL_SOON\t= \"5秒后进入虚空门阶段\",\n\tDBM_NS_WARN_BANISH_SOON\t= \"5秒后进入放逐阶段\",\n\twarningPortal\t\t\t= \"虚空门阶段\",\n\twarningBanish\t\t\t= \"放逐阶段\"\n})\n\nL:SetTimerLocalization({\n\ttimerPortalPhase\t= \"虚空门阶段\",\n\ttimerBanishPhase\t= \"放逐阶段\"\n})\n\nL:SetOptionLocalization({\n\tDBM_NS_WARN_PORTAL_SOON\t= \"显示进入虚空门阶段的警报\",\n\tDBM_NS_WARN_BANISH_SOON\t= \"显示进入放逐阶段的警报\",\n\twarningPortal\t\t\t= \"显示虚空门阶段的警报\",\n\twarningBanish\t\t\t= \"显示放逐阶段的警报\",\n\ttimerPortalPhase\t\t= \"显示虚空门阶段的持续时间\",\n\ttimerBanishPhase\t\t= \"显示放逐阶段的持续时间\"\n})\n\nL:SetMiscLocalization({\n\tDBM_NS_EMOTE_PHASE_2\t= \"%s的怒火甚至可以充满整个虚空！\",\n\tDBM_NS_EMOTE_PHASE_1\t= \"%s在撤退中大声呼喊着，打开了回到虚空的传送门。\"\n})\n\n--Prince Malchezaar\nL = DBM:GetModLocalization(\"Prince\")\n\nL:SetGeneralLocalization({\n\tname = \"玛克扎尔王子\"\n})\n\nL:SetMiscLocalization({\n\tDBM_PRINCE_YELL_P2\t\t= \"愚蠢的家伙！时间就是吞噬你躯体的烈焰！\",\n\tDBM_PRINCE_YELL_P3\t\t= \"你如何抵挡这无坚不摧的力量？\",\n\tDBM_PRINCE_YELL_INF1\t= \"所有的世界都向我敞开大门！\",\n\tDBM_PRINCE_YELL_INF2\t= \"你面对的不仅仅是玛克扎尔，还有我所号令的军团！\"\n})\n\n-- Nightbane\nL = DBM:GetModLocalization(\"NightbaneRaid\")\n\nL:SetGeneralLocalization({\n\tname = \"夜之魇\"\n})\n\nL:SetWarningLocalization({\n\tDBM_NB_DOWN_WARN\t\t= \"15秒后夜之魇着陆\",\n\tDBM_NB_DOWN_WARN2\t\t= \"5秒后夜之魇着陆\",\n\tDBM_NB_AIR_WARN\t\t\t= \"空中阶段\"\n})\n\nL:SetTimerLocalization({\n\ttimerNightbane\t\t\t= \"夜之魇\",\n\ttimerAirPhase\t\t\t= \"空中阶段\"\n})\n\nL:SetOptionLocalization({\n\tDBM_NB_AIR_WARN\t\t\t= \"显示空中阶段的警报\",\n\tPrewarnGroundPhase\t\t= \"显示落地阶段的警报\",\n\ttimerNightbane\t\t\t= \"显示召唤夜之魇的时间\",\n\ttimerAirPhase\t\t\t= \"显示空中阶段的持续时间\"\n})\n\nL:SetMiscLocalization({\n\tDBM_NB_EMOTE_PULL\t= \"一个远古的生物在远处被唤醒了……\",\n\tDBM_NB_YELL_AIR\t\t= \"可怜的渣滓。我要腾空而起，让你尝尝毁灭的滋味！\",\n\tDBM_NB_YELL_GROUND\t= \"够了！我要落下来把你们打得粉碎！\",\n\tDBM_NB_YELL_GROUND2\t= \"没用的虫子！让你们见识一下我的力量吧！\"\n})\n\n-- Wizard of Oz\nL = DBM:GetModLocalization(\"Oz\")\n\nL:SetGeneralLocalization({\n\tname = \"绿野仙踪\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceBosses\t\t\t= \"显示出现首领警报\",\n\tShowBossTimers\t\t\t= \"显示首领出现时间\"\n})\n\nL:SetMiscLocalization({\n\tDBM_OZ_WARN_TITO\t\t= \"托托\",\n\tDBM_OZ_WARN_ROAR\t\t= \"胆小的狮子\",\n\tDBM_OZ_WARN_STRAWMAN\t= \"稻草人\",\n\tDBM_OZ_WARN_TINHEAD\t\t= \"铁皮人\",\n\tDBM_OZ_WARN_CRONE\t\t= \"巫婆\",\n\tDBM_OZ_YELL_DOROTHEE\t= \"啊，托托，我们必须找到回家的路！那位老巫师是我们唯一的希望了！稻草人、狮子，还有铁皮人，你们能不能——呀，有人来了！\",\n\tDBM_OZ_YELL_ROAR\t\t= \"我不怕你们！你们想打架？那就来呀！来呀！我不用前爪都可以打败你们！\",\n\tDBM_OZ_YELL_STRAWMAN\t= \"我该把你怎么办？我完全不知道。\",\n\tDBM_OZ_YELL_TINHEAD\t\t= \"我真的需要一颗心。啊，用你的行吗？\",\n\tDBM_OZ_YELL_CRONE\t\t= \"我为你们感到可悲，小家伙们！\"\n})\n\n-- Named Beasts\nL = DBM:GetModLocalization(\"Shadikith\")\n\nL:SetGeneralLocalization({\n\tname = \"滑翔者沙德基斯\"\n})\n\nL = DBM:GetModLocalization(\"Hyakiss\")\n\nL:SetGeneralLocalization({\n\tname = \"潜伏者希亚其斯\"\n})\n\nL = DBM:GetModLocalization(\"Rokad\")\n\nL:SetGeneralLocalization({\n\tname = \"蹂躏者洛卡德\"\n})\n"
  },
  {
    "path": "DBM-Karazhan/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n--Attumen\nL = DBM:GetModLocalization(\"Attumen\")\n\nL:SetGeneralLocalization({\n\tname = \"Attumen der Jäger\"\n})\n\n\n\n--Moroes\nL = DBM:GetModLocalization(\"Moroes\")\n\nL:SetGeneralLocalization({\n\tname = \"Moroes\"\n})\n\nL:SetWarningLocalization({\n\tDBM_MOROES_VANISH_FADED\t= \"Moroes ist wieder da\"\n})\n\nL:SetOptionLocalization({\n\tDBM_MOROES_VANISH_FADED\t= \"Zeige Warnung für Ende von Verschwinden\"\n})\n\n-- Maiden of Virtue\nL = DBM:GetModLocalization(\"Maiden\")\n\nL:SetGeneralLocalization({\n\tname = \"Tugendhafte Maid\"\n})\n\n-- Romulo and Julianne\nL = DBM:GetModLocalization(\"RomuloAndJulianne\")\n\nL:SetGeneralLocalization({\n\tname = \"Romulo und Julianne\"\n})\n\nL:SetMiscLocalization({\n\tEvent\t\t\t\t= \"Heute Abend werden wir Zeuge einer verbotenen Liebe!\",\n\tRJ_Pull\t\t\t\t= \"Welch' Teufel bist du, dass du so mich folterst?\",\n\tDBM_RJ_PHASE2_YELL\t= \"Komm, milde, liebevolle Nacht! Komm, gibt mir meinen Romulo zurück!\",\n\tRomulo\t\t\t\t= \"Romulo\",\n\tJulianne\t\t\t= \"Julianne\"\n})\n\n-- Big Bad Wolf\nL = DBM:GetModLocalization(\"BigBadWolf\")\n\nL:SetGeneralLocalization({\n\tname = \"Der große böse Wolf\"\n})\n\nL:SetMiscLocalization({\n\tDBM_BBW_YELL_1\t\t\t= \"Damit ich dich besser fressen kann!\"\n})\n\n-- Wizard of Oz\nL = DBM:GetModLocalization(\"Oz\")\n\nL:SetGeneralLocalization({\n\tname = \"Zauberer von Oz\"\n})\n\nL:SetWarningLocalization({\n\tDBM_OZ_WARN_TITO\t\t= \"Tito\",\n\tDBM_OZ_WARN_ROAR\t\t= \"Brüller\",\n\tDBM_OZ_WARN_STRAWMAN\t= \"Strohmann\",\n\tDBM_OZ_WARN_TINHEAD\t\t= \"Blechkopf\",\n\tDBM_OZ_WARN_CRONE\t\t= \"Die böse Hexe\"\n})\n\nL:SetTimerLocalization({\n\tDBM_OZ_WARN_TITO\t\t= \"Tito\",\n\tDBM_OZ_WARN_ROAR\t\t= \"Brüller\",\n\tDBM_OZ_WARN_STRAWMAN\t= \"Strohmann\",\n\tDBM_OZ_WARN_TINHEAD\t\t= \"Blechkopf\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceBosses\t\t\t= \"Zeige Warnungen für Erscheinen der Bosse\",\n\tShowBossTimers\t\t\t= \"Zeige Zeit bis die Bosse erscheinen\"\n})\n\nL:SetMiscLocalization({\n\tDBM_OZ_YELL_DOROTHEE\t= \"Oh Tito, wir müssen einfach einen Weg nach Hause finden! Der alte Zauberer ist unsere einzige Hoffnung! Strohmann, Brüller, Blechkopf, wollt ihr - wartet... Donnerwetter, schaut! Wir haben Besucher!\",\n\tDBM_OZ_YELL_ROAR\t\t= \"Ich habe keine Angst vor Euch! Wollt Ihr kämpfen? Hä, wollt Ihr? Kommt schon! Ich schaffe Euch mit beiden Pfoten hinter dem Rücken!\",\n\tDBM_OZ_YELL_STRAWMAN\t= \" Was soll ich nur mit Euch machen? Mit fällt einfach nichts ein.\",\n\tDBM_OZ_YELL_TINHEAD\t\t= \"Ich könnte wirklich ein Herz brauchen. Kann ich Eures haben?\",\n\tDBM_OZ_YELL_CRONE\t\t= \"Wehe Euch allen, meine Hübschen!\"\n})\n\n-- Curator\nL = DBM:GetModLocalization(\"Curator\")\n\nL:SetGeneralLocalization({\n\tname = \"Der Kurator\"\n})\n\nL:SetWarningLocalization({\n\twarnAdd\t\t= \"Astralflimmern erschienen\"\n})\n\nL:SetOptionLocalization({\n\twarnAdd\t\t= \"Zeige Warnung, wenn Astralflimmern erscheinen\"\n})\n\n-- Terestian Illhoof\nL = DBM:GetModLocalization(\"TerestianIllhoof\")\n\nL:SetGeneralLocalization({\n\tname = \"Terestian Siechhuf\"\n})\n\nL:SetMiscLocalization({\n\tKilrek\t\t\t\t\t= \"Kil'rek\",\n\tDChains\t\t\t\t\t= \"Dämonenketten\"\n})\n\n-- Shade of Aran\nL = DBM:GetModLocalization(\"Aran\")\n\nL:SetGeneralLocalization({\n\tname = \"Arans Schemen\"\n})\n\nL:SetWarningLocalization({\n\tDBM_ARAN_DO_NOT_MOVE\t= \"Flammenkranz - Nicht bewegen!\"\n})\n\nL:SetTimerLocalization({\n\ttimerSpecial\t\t\t= \"Spezialfähigkeiten CD\"\n})\n\nL:SetOptionLocalization({\n\ttimerSpecial\t\t\t= \"Abklingzeit der Spezialfähigkeiten anzeigen\",\n\tDBM_ARAN_DO_NOT_MOVE\t= \"Spezialwarnung für $spell:30004\"\n})\n\n--Netherspite\nL = DBM:GetModLocalization(\"Netherspite\")\n\nL:SetGeneralLocalization({\n\tname = \"Nethergroll\"\n})\n\nL:SetWarningLocalization({\n\twarningPortal\t\t\t= \"Portalphase\",\n\twarningBanish\t\t\t= \"Verbannungsphase\"\n})\n\nL:SetTimerLocalization({\n\ttimerPortalPhase\t= \"Portalphase\",\n\ttimerBanishPhase\t= \"Verbannungsphase\"\n})\n\nL:SetOptionLocalization({\n\twarningPortal\t\t\t= \"Zeige Warnung für Portalphase\",\n\twarningBanish\t\t\t= \"Zeige Warnung für Verbannungsphase\",\n\ttimerPortalPhase\t\t= \"Dauer der Portalphase anzeigen\",\n\ttimerBanishPhase\t\t= \"Dauer der Verbannungsphase anzeigen\"\n})\n\nL:SetMiscLocalization({\n\tDBM_NS_EMOTE_PHASE_2\t= \"Netherenergien versetzen %s in rasende Wut!\",\n\tDBM_NS_EMOTE_PHASE_1\t= \"%s schreit auf und öffnet Tore zum Nether.\"\n})\n\n--Chess\nL = DBM:GetModLocalization(\"Chess\")\n\nL:SetGeneralLocalization({\n\tname = \"Schachspiel\"\n})\n\nL:SetTimerLocalization({\n\ttimerCheat\t= \"Schummeln CD\"\n})\n\nL:SetOptionLocalization({\n\ttimerCheat\t= \"Abklingzeit von Schummeln anzeigen\"\n})\n\nL:SetMiscLocalization({\n\tEchoCheats\t= \"Medivhs Echo schummelt!\"\n})\n\n--Prince Malchezaar\nL = DBM:GetModLocalization(\"Prince\")\n\nL:SetGeneralLocalization({\n\tname = \"Prinz Malchezaar\"\n})\n\nL:SetMiscLocalization({\n\tDBM_PRINCE_YELL_P2\t\t= \"Dummköpfe! Zeit ist das Feuer, in dem Ihr brennen werdet!\",\n\tDBM_PRINCE_YELL_P3\t\t= \"Wie könnt Ihr hoffen, einer so überwältigenden Macht gewachsen zu sein?\",\n\tDBM_PRINCE_YELL_INF1\t= \"Alle Realitäten, alle Dimensionen stehen mir offen!\",\n\tDBM_PRINCE_YELL_INF2\t= \"Ihr steht nicht nur vor Malchezaar allein, sondern vor den Legionen, die ich befehlige!\"\n})\n\n-- Nightbane\nL = DBM:GetModLocalization(\"NightbaneRaid\")\n\nL:SetGeneralLocalization({\n\tname = \"Schrecken der Nacht (Schlachtzug)\"\n})\n\nL:SetWarningLocalization({\n\tDBM_NB_AIR_WARN\t\t\t= \"Luftphase\"\n})\n\nL:SetTimerLocalization({\n\ttimerAirPhase\t\t\t= \"Luftphase\"\n})\n\nL:SetOptionLocalization({\n\tDBM_NB_AIR_WARN\t\t\t= \"Zeige Warnung für Luftphase\",\n\ttimerAirPhase\t\t\t= \"Dauer der Luftphase anzeigen\"\n})\n\nL:SetMiscLocalization({\n\tDBM_NB_EMOTE_PULL\t\t= \"Etwas Uraltes erwacht in der Ferne...\",\n\tDBM_NB_YELL_AIR\t\t\t= \"Abscheuliches Gewürm! Ich werde euch aus der Luft vernichten!\",\n\tDBM_NB_YELL_GROUND\t\t= \"Genug! Ich werde landen und mich höchst persönlich um Euch kümmern!\",\n\tDBM_NB_YELL_GROUND2\t\t= \"Insekten! Lasst mich Euch meine Kraft aus nächster Nähe demonstrieren!\"\n})\n\n-- Named Beasts\nL = DBM:GetModLocalization(\"Shadikith\")\n\nL:SetGeneralLocalization({\n\tname = \"Shadikith der Gleiter\"\n})\n\nL = DBM:GetModLocalization(\"Hyakiss\")\n\nL:SetGeneralLocalization({\n\tname = \"Hyakiss der Lauerer\"\n})\n\nL = DBM:GetModLocalization(\"Rokad\")\n\nL:SetGeneralLocalization({\n\tname = \"Rokad der Verheerer\"\n})\n"
  },
  {
    "path": "DBM-Karazhan/localization.en.lua",
    "content": "local L\n\n--Attumen\nL = DBM:GetModLocalization(\"Attumen\")\n\nL:SetGeneralLocalization({\n\tname = \"Attumen the Huntsman\"\n})\n\n\n\n--Moroes\nL = DBM:GetModLocalization(\"Moroes\")\n\nL:SetGeneralLocalization({\n\tname = \"Moroes\"\n})\n\nL:SetWarningLocalization({\n\tDBM_MOROES_VANISH_FADED\t= \"Vanish faded\"\n})\n\nL:SetOptionLocalization({\n\tDBM_MOROES_VANISH_FADED\t= \"Show vanish fade warning\"\n})\n\n-- Maiden of Virtue\nL = DBM:GetModLocalization(\"Maiden\")\n\nL:SetGeneralLocalization({\n\tname = \"Maiden of Virtue\"\n})\n\n-- Romulo and Julianne\nL = DBM:GetModLocalization(\"RomuloAndJulianne\")\n\nL:SetGeneralLocalization({\n\tname = \"Romulo and Julianne\"\n})\n\nL:SetMiscLocalization({\n\tEvent\t\t\t\t= \"Tonight... we explore a tale of forbidden love!\",\n\tRJ_Pull\t\t\t\t= \"What devil art thou, that dost torment me thus?\",\n\tDBM_RJ_PHASE2_YELL\t= \"Come, gentle night; and give me back my Romulo!\",\n\tRomulo\t\t\t\t= \"Romulo\",\n\tJulianne\t\t\t= \"Julianne\"\n})\n\n-- Big Bad Wolf\nL = DBM:GetModLocalization(\"BigBadWolf\")\n\nL:SetGeneralLocalization({\n\tname = \"The Big Bad Wolf\"\n})\n\n\n\nL:SetMiscLocalization({\n\tDBM_BBW_YELL_1\t\t\t= \"The better to own you with!\"\n})\n\n-- Wizard of Oz\nL = DBM:GetModLocalization(\"Oz\")\n\nL:SetGeneralLocalization({\n\tname = \"Wizard of Oz\"\n})\n\nL:SetWarningLocalization({\n\tDBM_OZ_WARN_TITO\t\t= \"Tito\",\n\tDBM_OZ_WARN_ROAR\t\t= \"Roar\",\n\tDBM_OZ_WARN_STRAWMAN\t= \"Strawman\",\n\tDBM_OZ_WARN_TINHEAD\t\t= \"Tinhead\",\n\tDBM_OZ_WARN_CRONE\t\t= \"The Crone\"\n})\n\nL:SetTimerLocalization({\n\tDBM_OZ_WARN_TITO\t\t= \"Tito\",\n\tDBM_OZ_WARN_ROAR\t\t= \"Roar\",\n\tDBM_OZ_WARN_STRAWMAN\t= \"Strawman\",\n\tDBM_OZ_WARN_TINHEAD\t\t= \"Tinhead\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceBosses\t\t\t= \"Show warnings for boss spawns\",\n\tShowBossTimers\t\t\t= \"Show timers for boss spawns\"\n})\n\nL:SetMiscLocalization({\n\tDBM_OZ_YELL_DOROTHEE\t= \"Oh Tito, we simply must find a way home! The old wizard could be our only hope! Strawman, Roar, Tinhead, will you - wait... oh golly, look we have visitors!\",\n\tDBM_OZ_YELL_ROAR\t\t= \"I'm not afraid a' you! Do you wanna' fight? Huh, do ya'? C'mon! I'll fight ya' with both paws behind my back!\",\n\tDBM_OZ_YELL_STRAWMAN\t= \"Now what should I do with you? I simply can't make up my mind.\",\n\tDBM_OZ_YELL_TINHEAD\t\t= \"I could really use a heart. Say, can I have yours?\",\n\tDBM_OZ_YELL_CRONE\t\t= \"Woe to each and every one of you, my pretties!\"\n})\n\n-- Curator\nL = DBM:GetModLocalization(\"Curator\")\n\nL:SetGeneralLocalization({\n\tname = \"The Curator\"\n})\n\nL:SetWarningLocalization({\n\twarnAdd\t\t= \"Add spawned\"\n})\n\nL:SetOptionLocalization({\n\twarnAdd\t\t= \"Show warning when add spawned\"\n})\n\n-- Terestian Illhoof\nL = DBM:GetModLocalization(\"TerestianIllhoof\")\n\nL:SetGeneralLocalization({\n\tname = \"Terestian Illhoof\"\n})\n\nL:SetMiscLocalization({\n\tKilrek\t\t\t\t\t= \"Kil'rek\",\n\tDChains\t\t\t\t\t= \"Demon Chains\"\n})\n\n-- Shade of Aran\nL = DBM:GetModLocalization(\"Aran\")\n\nL:SetGeneralLocalization({\n\tname = \"Shade of Aran\"\n})\n\nL:SetWarningLocalization({\n\tDBM_ARAN_DO_NOT_MOVE\t= \"Flame Wreath - Do not move!\"\n})\n\nL:SetTimerLocalization({\n\ttimerSpecial\t\t\t= \"Special ability CD\"\n})\n\nL:SetOptionLocalization({\n\ttimerSpecial\t\t\t= \"Show timer for special ability cooldown\",\n\tDBM_ARAN_DO_NOT_MOVE\t= \"Show special warning for $spell:30004\"\n})\n\n--Netherspite\nL = DBM:GetModLocalization(\"Netherspite\")\n\nL:SetGeneralLocalization({\n\tname = \"Netherspite\"\n})\n\nL:SetWarningLocalization({\n\twarningPortal\t\t\t= \"Portal Phase\",\n\twarningBanish\t\t\t= \"Banish Phase\"\n})\n\nL:SetTimerLocalization({\n\ttimerPortalPhase\t= \"Portal Phase Ends\",\n\ttimerBanishPhase\t= \"Banish Phase Ends\"\n})\n\nL:SetOptionLocalization({\n\twarningPortal\t\t\t= \"Show warning for Portal phase\",\n\twarningBanish\t\t\t= \"Show warning for Banish phase\",\n\ttimerPortalPhase\t\t= \"Show timer for Portal Phase duration\",\n\ttimerBanishPhase\t\t= \"Show timer for Banish Phase duration\"\n})\n\nL:SetMiscLocalization({\n\tDBM_NS_EMOTE_PHASE_2\t= \"%s goes into a nether-fed rage!\",\n\tDBM_NS_EMOTE_PHASE_1\t= \"%s cries out in withdrawal, opening gates to the nether.\"\n})\n\n--Chess\nL = DBM:GetModLocalization(\"Chess\")\n\nL:SetGeneralLocalization({\n\tname = \"Chess Event\"\n})\n\nL:SetTimerLocalization({\n\ttimerCheat\t= \"Cheat CD\"\n})\n\nL:SetOptionLocalization({\n\ttimerCheat\t= \"Show timer for cheat cooldown\"\n})\n\nL:SetMiscLocalization({\n\tEchoCheats\t= \"Echo of Medivh cheats!\"\n})\n\n--Prince Malchezaar\nL = DBM:GetModLocalization(\"Prince\")\n\nL:SetGeneralLocalization({\n\tname = \"Prince Malchezaar\"\n})\n\nL:SetMiscLocalization({\n\tDBM_PRINCE_YELL_P2\t\t= \"Simple fools! Time is the fire in which you'll burn!\",\n\tDBM_PRINCE_YELL_P3\t\t= \"How can you hope to stand against such overwhelming power?\",\n\tDBM_PRINCE_YELL_INF1\t= \"All realities, all dimensions are open to me!\",\n\tDBM_PRINCE_YELL_INF2\t= \"You face not Malchezaar alone, but the legions I command!\"\n})\n\n-- Nightbane\nL = DBM:GetModLocalization(\"NightbaneRaid\")\n\nL:SetGeneralLocalization({\n\tname = \"Nightbane (Raid)\"\n})\n\nL:SetWarningLocalization({\n\tDBM_NB_AIR_WARN\t\t\t= \"Air Phase\"\n})\n\nL:SetTimerLocalization({\n\ttimerAirPhase\t\t\t= \"Air Phase\"\n})\n\nL:SetOptionLocalization({\n\tDBM_NB_AIR_WARN\t\t\t= \"Show warning for Air Phase\",\n\ttimerAirPhase\t\t\t= \"Show timer for Air Phase duration\"\n})\n\nL:SetMiscLocalization({\n\tDBM_NB_EMOTE_PULL\t\t= \"An ancient being awakens in the distance...\",\n\tDBM_NB_YELL_AIR\t\t\t= \"Miserable vermin. I shall exterminate you from the air!\",\n\tDBM_NB_YELL_GROUND\t\t= \"Enough! I shall land and crush you myself!\",\n\tDBM_NB_YELL_GROUND2\t\t= \"Insects! Let me show you my strength up close!\"\n})\n\n-- Named Beasts\nL = DBM:GetModLocalization(\"Shadikith\")\n\nL:SetGeneralLocalization({\n\tname = \"Shadikith the Glider\"\n})\n\nL = DBM:GetModLocalization(\"Hyakiss\")\n\nL:SetGeneralLocalization({\n\tname = \"Hyakiss the Lurker\"\n})\n\nL = DBM:GetModLocalization(\"Rokad\")\n\nL:SetGeneralLocalization({\n\tname = \"Rokad the Ravager\"\n})\n"
  },
  {
    "path": "DBM-Karazhan/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\nlocal L\n\n--Attumen\nL = DBM:GetModLocalization(\"Attumen\")\n\nL:SetGeneralLocalization({\n\tname = \"Attumen el Montero\"\n})\n\n\n\n--Moroes\nL = DBM:GetModLocalization(\"Moroes\")\n\nL:SetGeneralLocalization({\n\tname = \"Moroes\"\n})\n\nL:SetWarningLocalization({\n\tDBM_MOROES_VANISH_FADED\t= \"Esfumarse ha terminado\"\n})\n\nL:SetOptionLocalization({\n\tDBM_MOROES_VANISH_FADED\t= \"Mostrar aviso cuando termine Esfumarse\"\n})\n\n-- Maiden of Virtue\nL = DBM:GetModLocalization(\"Maiden\")\n\nL:SetGeneralLocalization({\n\tname = \"Doncella de Virtud\"\n})\n\n-- Romulo and Julianne\nL = DBM:GetModLocalization(\"RomuloAndJulianne\")\n\nL:SetGeneralLocalization({\n\tname = \"Romulo y Julianne\"\n})\n\nL:SetMiscLocalization({\n\tEvent\t\t\t\t= \"¡Esta noche... vamos a explorar un relato de amor prohibido!\",\n\tRJ_Pull\t\t\t\t= \"¿Qué demonio sois que me atormentáis de questa manera?\",\n\tDBM_RJ_PHASE2_YELL\t= \"Adelante, gentil noche, ¡devuélveme a mi Romulo!\",\n\tRomulo\t\t\t\t= \"Romulo\",\n\tJulianne\t\t\t= \"Julianne\"\n})\n\n-- Big Bad Wolf\nL = DBM:GetModLocalization(\"BigBadWolf\")\n\nL:SetGeneralLocalization({\n\tname = \"El Lobo Feroz\"\n})\n\n\n\nL:SetMiscLocalization({\n\tDBM_BBW_YELL_1\t\t\t= \"¡Para poseerte mejor!\"\n})\n\n-- Wizard of Oz\nL = DBM:GetModLocalization(\"Oz\")\n\nL:SetGeneralLocalization({\n\tname = \"Mago de Oz\"\n})\n\nL:SetWarningLocalization({\n\tDBM_OZ_WARN_TITO\t\t= \"Tito\",\n\tDBM_OZ_WARN_ROAR\t\t= \"Rugido\",\n\tDBM_OZ_WARN_STRAWMAN\t= \"Espantapájaros\",\n\tDBM_OZ_WARN_TINHEAD\t\t= \"Cabezalata\",\n\tDBM_OZ_WARN_CRONE\t\t= \"La Vieja Bruja\"\n})\n\nL:SetTimerLocalization({\n\tDBM_OZ_WARN_TITO\t\t= \"Tito\",\n\tDBM_OZ_WARN_ROAR\t\t= \"Rugido\",\n\tDBM_OZ_WARN_STRAWMAN\t= \"Espantapájaros\",\n\tDBM_OZ_WARN_TINHEAD\t\t= \"Cabezalata\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceBosses\t\t\t= \"Show warnings for boss spawns\",\n\tShowBossTimers\t\t\t= \"Show timers for boss spawns\"\n})\n\nL:SetMiscLocalization({\n\tDBM_OZ_YELL_DOROTHEE\t= \"¡Oh, Tito, solo tenemos que buscar la manera de volver a casa! ¡El viejo zahorí puede ser nuestra única esperanza! Espantapájaros, Rugido, Cabezalata, podeis- esperad... ¡Oh, caray, mirad tenemos visita!\",--sic\n\tDBM_OZ_YELL_ROAR\t\t= \"¡No os tengo miedo! ¿Queréis pelea? ¿Eh? ¡Vamos, con las garras a la espalda os reto!\",\n\tDBM_OZ_YELL_STRAWMAN\t= \"¿Ahora que tengo que hacer contigo? No me puedo decidir.\",--sic\n\tDBM_OZ_YELL_TINHEAD\t\t= \"¿Me vendría bien un corazón Digamos, ¿el tuyo?\",--sic\n\tDBM_OZ_YELL_CRONE\t\t= \"¡Pronto acabará todo!\"--There seems to be two lines, but I only ever see this one in Spanish; the one in the English localization file is the other possible pull line.\n})\n\n-- Curator\nL = DBM:GetModLocalization(\"Curator\")\n\nL:SetGeneralLocalization({\n\tname = \"Curator\"\n})\n\nL:SetWarningLocalization({\n\twarnAdd\t\t= \"Centellas astrales\"\n})\n\nL:SetOptionLocalization({\n\twarnAdd\t\t= \"Mostrar aviso cuando aparezcan las Centellas astrales\"\n})\n\n-- Terestian Illhoof\nL = DBM:GetModLocalization(\"TerestianIllhoof\")\n\nL:SetGeneralLocalization({\n\tname = \"Terestian Pezuña Enferma\"\n})\n\nL:SetMiscLocalization({\n\tKilrek\t\t\t\t\t= \"Kil'rek\",\n\tDChains\t\t\t\t\t= \"Cadenas demoníacas\"\n})\n\n-- Shade of Aran\nL = DBM:GetModLocalization(\"Aran\")\n\nL:SetGeneralLocalization({\n\tname = \"Sombra de Aran\"\n})\n\nL:SetWarningLocalization({\n\tDBM_ARAN_DO_NOT_MOVE\t= \"Corona de llamas - ¡no te muevas!\"\n})\n\nL:SetTimerLocalization({\n\ttimerSpecial\t\t\t= \"Facultad especial TdR\"\n})\n\nL:SetOptionLocalization({\n\ttimerSpecial\t\t\t= \"Mostrar temporizador para el tiempo de reutilización de las facultades especiales\",\n\tDBM_ARAN_DO_NOT_MOVE\t= \"Mostrar aviso especial para $spell:30004\"\n})\n\n--Netherspite\nL = DBM:GetModLocalization(\"Netherspite\")\n\nL:SetGeneralLocalization({\n\tname = \"Rencor Abisal\"\n})\n\nL:SetWarningLocalization({\n\twarningPortal\t\t\t= \"Fase de portales\",\n\twarningBanish\t\t\t= \"Fase de destierro\"\n})\n\nL:SetTimerLocalization({\n\ttimerPortalPhase\t= \"Fase de portales\",\n\ttimerBanishPhase\t= \"Fase de destierro\"\n})\n\nL:SetOptionLocalization({\n\twarningPortal\t\t\t= \"Anunciar cambio a fase de portales\",\n\twarningBanish\t\t\t= \"Anunciar cambio a fase de destierro\",\n\ttimerPortalPhase\t\t= \"Mostrar temporizador para la duración de la fase de portales\",\n\ttimerBanishPhase\t\t= \"Mostrar temporizador para la duración de la fase de destierro\"\n})\n\nL:SetMiscLocalization({\n\tDBM_NS_EMOTE_PHASE_2\t= \"¡%s monta en cólera alimentada por el vacío!\",\n\tDBM_NS_EMOTE_PHASE_1\t= \"%s cries out in withdrawal, opening gates to the nether.\"\n})\n\n--Chess\nL = DBM:GetModLocalization(\"Chess\")\n\nL:SetGeneralLocalization({\n\tname = \"Chess Event\"\n})\n\nL:SetTimerLocalization({\n\ttimerCheat\t= \"Medivh hace trampas (TdR)\"\n})\n\nL:SetOptionLocalization({\n\ttimerCheat\t= \"Mostrar temporizador para cuando el Eco de Medivh haga trampas\"\n})\n\nL:SetMiscLocalization({\n\tEchoCheats\t= \"¡Eco de Medivh hace trampas!\"\n})\n\n--Prince Malchezaar\nL = DBM:GetModLocalization(\"Prince\")\n\nL:SetGeneralLocalization({\n\tname = \"Príncipe Malchezaar\"\n})\n\nL:SetMiscLocalization({\n\tDBM_PRINCE_YELL_P2\t\t= \"¡Estúpidos! El tiempo es el fuego en el que arderéis!\",--sic\n\tDBM_PRINCE_YELL_P3\t\t= \"¿Cómo podéis esperar rebelaros ante un poder tan aplastante?\",\n\tDBM_PRINCE_YELL_INF1\t= \"¡Todas las realidades, todas las dimensiones están abiertas a mí!\",\n\tDBM_PRINCE_YELL_INF2\t= \"¡No solo os enfrentáis a Malechezaar, sino a todas las legiones bajo mi mando!\"\n})\n\n-- Nightbane\nL = DBM:GetModLocalization(\"NightbaneRaid\")\n\nL:SetGeneralLocalization({\n\tname = \"Nocturno\"\n})\n\nL:SetWarningLocalization({\n\tDBM_NB_AIR_WARN\t\t\t= \"Fase aérea\"\n})\n\nL:SetTimerLocalization({\n\ttimerAirPhase\t\t\t= \"Fase aérea\"\n})\n\nL:SetOptionLocalization({\n\tDBM_NB_AIR_WARN\t\t\t= \"Anunciar cambio a fase aérea\",\n\ttimerAirPhase\t\t\t= \"Mostrar temporizador para la duración de la fase aérea\"\n})\n\nL:SetMiscLocalization({\n\tDBM_NB_EMOTE_PULL\t\t= \"Un ser antiguo se despierta en la distancia...\",\n\tDBM_NB_YELL_AIR\t\t\t= \"Miserable alimaña. ¡Te exterminaré desde el aire!\",\n\tDBM_NB_YELL_GROUND\t\t= \"¡Ya basta! Voy a aterrizar y a aplastarte yo mismo.\",\n\tDBM_NB_YELL_GROUND2\t\t= \"¡Insectos! ¡Os enseñaré mi fuerza de cerca!\"\n})\n\n-- Named Beasts\nL = DBM:GetModLocalization(\"Shadikith\")\n\nL:SetGeneralLocalization({\n\tname = \"Shadikith el Planeador\"\n})\n\nL = DBM:GetModLocalization(\"Hyakiss\")\n\nL:SetGeneralLocalization({\n\tname = \"Hyakiss el Acechador\"\n})\n\nL = DBM:GetModLocalization(\"Rokad\")\n\nL:SetGeneralLocalization({\n\tname = \"Rokad el Devastador\"\n})\n"
  },
  {
    "path": "DBM-Karazhan/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\n\nlocal L\n\n--Attumen\nL = DBM:GetModLocalization(\"Attumen\")\n\nL:SetGeneralLocalization({\n\tname = \"Attumen le Veneur\"\n})\n\n\n\n--Moroes\nL = DBM:GetModLocalization(\"Moroes\")\n\nL:SetGeneralLocalization({\n\tname = \"Moroes\"\n})\n\nL:SetWarningLocalization({\n\tDBM_MOROES_VANISH_FADED\t= \"Retour de Moroes\"\n})\n\nL:SetOptionLocalization({\n\tDBM_MOROES_VANISH_FADED\t= \"Show vanish fade warning\"\n})\n\n-- Maiden of Virtue\nL = DBM:GetModLocalization(\"Maiden\")\n\nL:SetGeneralLocalization({\n\tname = \"Damoiselle de vertu\"\n})\n\n-- Romulo and Julianne\nL = DBM:GetModLocalization(\"RomuloAndJulianne\")\n\nL:SetGeneralLocalization({\n\tname = \"Romulo et Julianne\"\n})\n\nL:SetMiscLocalization({\n\tDBM_RJ_PHASE2_YELL\t= \"Viens, gentille nuit ; rends-moi mon Romulo !\",\n\tRomulo\t\t\t\t= \"Romulo\",\n\tJulianne\t\t\t= \"Julianne\"\n})\n\n-- Big Bad Wolf\nL = DBM:GetModLocalization(\"BigBadWolf\")\n\nL:SetGeneralLocalization({\n\tname = \"Le grand méchant Loup\"\n})\n\nL:SetMiscLocalization({\n\tDBM_BBW_YELL_1\t\t\t= \"The better to own you with!\"\n})\n\n-- Curator\nL = DBM:GetModLocalization(\"Curator\")\n\nL:SetGeneralLocalization({\n\tname = \"Le conservateur\"\n})\n\n-- Terestian Illhoof\nL = DBM:GetModLocalization(\"TerestianIllhoof\")\n\nL:SetGeneralLocalization({\n\tname = \"Terestian Malsabot\"\n})\n\nL:SetMiscLocalization({\n\tKilrek\t\t\t\t\t= \"Kil'rek\",\n\tDChains\t\t\t\t\t= \"Demon Chains\"\n})\n\n-- Shade of Aran\nL = DBM:GetModLocalization(\"Aran\")\n\nL:SetGeneralLocalization({\n\tname = \"Ombre d'Aran\"\n})\n\nL:SetWarningLocalization({\n\tDBM_ARAN_DO_NOT_MOVE\t= \"Ne bougez plus!\"\n})\n\nL:SetOptionLocalization({\n\tDBM_ARAN_DO_NOT_MOVE\t= \"Show special warning for $spell:30004\"\n})\n\n--Netherspite\nL = DBM:GetModLocalization(\"Netherspite\")\n\nL:SetGeneralLocalization({\n\tname = \"Netherspite\"\n})\n\nL:SetWarningLocalization({\n\tDBM_NS_WARN_PORTAL_SOON\t= \"Portal Phase in 5\",\n\tDBM_NS_WARN_BANISH_SOON\t= \"Banish Phase in 5\",\n\twarningPortal\t\t\t= \"Portal Phase\",\n\twarningBanish\t\t\t= \"Banish Phase\"\n})\n\nL:SetTimerLocalization({\n\ttimerPortalPhase\t= \"Portal Phase\",\n\ttimerBanishPhase\t= \"Banish Phase\"\n})\n\nL:SetOptionLocalization({\n\tDBM_NS_WARN_PORTAL_SOON\t= \"Show pre-warning for Portal phase\",\n\tDBM_NS_WARN_BANISH_SOON\t= \"Show pre-warning for Banish phase\",\n\twarningPortal\t\t\t= \"Show warning for Portal phase\",\n\twarningBanish\t\t\t= \"Show warning for Banish phase\",\n\ttimerPortalPhase\t\t= \"Show timer for Portal Phase duration\",\n\ttimerBanishPhase\t\t= \"Show timer for Banish Phase duration\"\n})\n\nL:SetMiscLocalization({\n\tDBM_NS_EMOTE_PHASE_2\t= \"%s entre dans une rage nourrie par le N\\195\\169ant\\194\\160!\",\n\tDBM_NS_EMOTE_PHASE_1\t= \"%s se retire avec un cri en ouvrant un portail vers le N\\195\\169ant.\"\n})\n\n--Prince Malchezaar\nL = DBM:GetModLocalization(\"Prince\")\n\nL:SetGeneralLocalization({\n\tname = \"Prince Malchezaar\"\n})\n\nL:SetMiscLocalization({\n\tDBM_PRINCE_YELL_P2\t\t= \"Imb\\195\\169ciles heureux ! Le temps est le brasier dans lequel vous br\\195\\187lerez !\",\n\tDBM_PRINCE_YELL_P3\t\t= \"Comment pouvez-vous esp\\195\\169rer r\\195\\169sister devant un tel pouvoir ?\",\n\tDBM_PRINCE_YELL_INF1\t= \"Toutes les r\\195\\169alit\\195\\169s, toutes les dimensions me sont ouvertes !\",\n\tDBM_PRINCE_YELL_INF2\t= \"Vous n'affrontez pas seulement Malchezzar, mais les l\\195\\169gions que je commande !\"\n})\n\n-- Nightbane\nL = DBM:GetModLocalization(\"NightbaneRaid\")\n\nL:SetGeneralLocalization({\n\tname = \"Plaie-de-nuit\"\n})\n\nL:SetWarningLocalization({\n\tDBM_NB_DOWN_WARN\t\t= \"Ground Phase in 15 sec\",\n\tDBM_NB_DOWN_WARN2\t\t= \"Ground Phase in 5 sec\",\n\tDBM_NB_AIR_WARN\t\t\t= \"Air Phase\"\n})\n\nL:SetTimerLocalization({\n\ttimerNightbane\t\t\t= \"Nightbane incoming\",\n\ttimerAirPhase\t\t\t= \"Air Phase\"\n})\n\nL:SetOptionLocalization({\n\tDBM_NB_AIR_WARN\t\t\t= \"Show warning for Air Phase\",\n\tPrewarnGroundPhase\t\t= \"Show pre-warnings for Ground Phase\",\n\ttimerNightbane\t\t\t= \"Show timer for Nightbane summon\",\n\ttimerAirPhase\t\t\t= \"Show timer for Air Phase duration\"\n})\n\nL:SetMiscLocalization({\n\tDBM_NB_EMOTE_PULL\t\t= \"Dans le lointain, un \\195\\170tre ancien s'\\195\\169veille...\",\n\tDBM_NB_YELL_AIR\t\t\t= \"Mis\\195\\169rable vermine. Je vais vous exterminer des airs !\",\n\tDBM_NB_YELL_GROUND\t\t= \"Assez ! Je vais atterir et vous !\",\n\tDBM_NB_YELL_GROUND2\t\t= \"Insectes ! Je vais vous montrer de quel bois je me chauffe !\"\n})\n\n-- Wizard of Oz\nL = DBM:GetModLocalization(\"Oz\")\n\nL:SetGeneralLocalization({\n\tname = \"Le magicien d'Oz\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceBosses\t\t\t= \"Show warnings for boss spawns\",\n\tShowBossTimers\t\t\t= \"Show timers for boss spawns\"\n})\n\nL:SetMiscLocalization({\n\tDBM_OZ_WARN_TITO\t\t= \"Tito\",\n\tDBM_OZ_WARN_ROAR\t\t= \"Graou\",\n\tDBM_OZ_WARN_STRAWMAN\t= \"Homme de paille\",\n\tDBM_OZ_WARN_TINHEAD\t\t= \"Tête de fer-blanc\",\n\tDBM_OZ_WARN_CRONE\t\t= \"La Mégère\",\n\tDBM_OZ_YELL_DOROTHEE\t= \"Oh, Tito, nous devons trouver le moyen de rentrer à la maison ! Le vieux sorcier est notre dernier espoir ! Homme de paille, Graou, Tête de fer-blanc, vous voulez bien… Attendez… Oh, regardez, nous avons des visiteurs !\",\n\tDBM_OZ_YELL_ROAR\t\t= \"J'ai peur d'personne ! Tu veux t'battre ! Hein, tu veux ? Vas-y ! Je te prends avec les deux pattes attachées dans l'dos !\",\n\tDBM_OZ_YELL_STRAWMAN\t= \"Alors que vais-je faire de vous ? Je n'arrive tout simplement pas à me décider.\",\n\tDBM_OZ_YELL_TINHEAD\t\t= \"J'aurais bien besoin d'un cœur. Dites, vous me donnez le vôtre ?\",\n\tDBM_OZ_YELL_CRONE\t\t= \"Malheur à chacun d’entre vous, mes mignons !\"\n})\n\n-- Named Beasts\nL = DBM:GetModLocalization(\"Shadikith\")\n\nL:SetGeneralLocalization({\n\tname = \"Shadikith le Glisseur\"\n})\n\nL = DBM:GetModLocalization(\"Hyakiss\")\n\nL:SetGeneralLocalization({\n\tname = \"Hyakiss la R\\195\\180deuse\"\n})\n\nL = DBM:GetModLocalization(\"Rokad\")\n\nL:SetGeneralLocalization({\n\tname = \"Rokad le Ravageur\"\n})\n"
  },
  {
    "path": "DBM-Karazhan/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n--Attumen\nL = DBM:GetModLocalization(\"Attumen\")\n\nL:SetGeneralLocalization({\n\tname = \"사냥꾼 어튜멘\"\n})\n\n\n\n--Moroes\nL = DBM:GetModLocalization(\"Moroes\")\n\nL:SetGeneralLocalization({\n\tname = \"모로스\"\n})\n\nL:SetWarningLocalization({\n\tDBM_MOROES_VANISH_FADED\t= \"소멸 끝\"\n})\n\nL:SetOptionLocalization({\n\tDBM_MOROES_VANISH_FADED\t= \"소멸 끝 경고 보기\"\n})\n\n-- Maiden of Virtue\nL = DBM:GetModLocalization(\"Maiden\")\n\nL:SetGeneralLocalization({\n\tname = \"고결의 여신\"\n})\n\n-- Romulo and Julianne\nL = DBM:GetModLocalization(\"RomuloAndJulianne\")\n\nL:SetGeneralLocalization({\n\tname = \"로밀로와 줄리엔\"\n})\n\nL:SetMiscLocalization({\n\tEvent\t\t\t\t= \"오늘 밤... 금지된 사랑의 이야기를 파헤쳐 보겠습니다!\",\n\tRJ_Pull\t\t\t\t= \"당신들은 대체 누구시기에 절 이리도 괴롭히나요?\",\n\tDBM_RJ_PHASE2_YELL\t= \"정다운 밤이시여. 어서 와서 나의 로밀로를 돌려주소서!\",\n\tRomulo\t\t\t\t= \"로밀로\",\n\tJulianne\t\t\t= \"줄리엔\"\n})\n\n-- Big Bad Wolf\nL = DBM:GetModLocalization(\"BigBadWolf\")\n\nL:SetGeneralLocalization({\n\tname = \"커다란 나쁜 늑대\"\n})\n\nL:SetMiscLocalization({\n\tDBM_BBW_YELL_1\t\t\t= \"잡아 먹기 좋으라고 그런거지!\"\n})\n\n-- Wizard of Oz\nL = DBM:GetModLocalization(\"Oz\")\n\nL:SetGeneralLocalization({\n\tname = \"오즈의 마법사\"\n})\n\nL:SetWarningLocalization({\n\tDBM_OZ_WARN_TITO\t\t= \"티토\",\n\tDBM_OZ_WARN_ROAR\t\t= \"어흥이\",\n\tDBM_OZ_WARN_STRAWMAN\t= \"허수아비\",\n\tDBM_OZ_WARN_TINHEAD\t\t= \"양철나무꾼\",\n\tDBM_OZ_WARN_CRONE\t\t= \"마녀\"\n})\n\nL:SetTimerLocalization({\n\tDBM_OZ_WARN_TITO\t\t= \"티토\",\n\tDBM_OZ_WARN_ROAR\t\t= \"어흥이\",\n\tDBM_OZ_WARN_STRAWMAN\t= \"허수아비\",\n\tDBM_OZ_WARN_TINHEAD\t\t= \"양철나무꾼\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceBosses\t\t\t= \"우두머리 등장 경고 보기\",\n\tShowBossTimers\t\t\t= \"우두머리 등장 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tDBM_OZ_YELL_DOROTHEE\t= \"티토야, 우린 집으로 갈 방법을 찾아야 해! 늙은 마법사가 우릴 도와줄 수 있을 거야! 허수아비, 사자, 양철통아... 우리? 오... 맙소사, 손님들이 온 것 같아!\",\n\tDBM_OZ_YELL_ROAR\t\t= \"하나도 안 무섭다고! 덤벼! 앞발 두 개를 몽땅 꺼내서 할퀴어주마!\",\n\tDBM_OZ_YELL_STRAWMAN\t= \"너희를 어떻게 해주면 좋을까? 아무 생각도 나지 않아!\",\n\tDBM_OZ_YELL_TINHEAD\t\t= \"나도 심장 갖고 싶어. 너희들 것 나한테 주면 안 될까?\",\n\tDBM_OZ_YELL_CRONE\t\t= \"곧 모두 다 끝장날 것이다!\"\n})\n\n-- Curator\nL = DBM:GetModLocalization(\"Curator\")\n\nL:SetGeneralLocalization({\n\tname = \"전시 관리인\"\n})\n\nL:SetWarningLocalization({\n\twarnAdd\t\t= \"쫄 등장\"\n})\n\nL:SetOptionLocalization({\n\twarnAdd\t\t= \"쫄 등장 경고 보기\"\n})\n\n-- Terestian Illhoof\nL = DBM:GetModLocalization(\"TerestianIllhoof\")\n\nL:SetGeneralLocalization({\n\tname = \"테레스티안 일후프\"\n})\n\nL:SetMiscLocalization({\n\tKilrek\t\t\t\t\t= \"킬렉\",\n\tDChains\t\t\t\t\t= \"악마의 사슬\"\n})\n\n-- Shade of Aran\nL = DBM:GetModLocalization(\"Aran\")\n\nL:SetGeneralLocalization({\n\tname = \"아란의 망령\"\n})\n\nL:SetWarningLocalization({\n\tDBM_ARAN_DO_NOT_MOVE\t= \"화염의 고리 - 이동 금지!\"\n})\n\nL:SetTimerLocalization({\n\ttimerSpecial\t\t\t= \"특수 기술 쿨타임\"\n})\n\nL:SetOptionLocalization({\n\ttimerSpecial\t\t\t= \"특수 기술 쿨타임 타이머 바 보기\",\n\tDBM_ARAN_DO_NOT_MOVE\t= \"$spell:30004 특수 경고 보기\"\n})\n\n--Netherspite\nL = DBM:GetModLocalization(\"Netherspite\")\n\nL:SetGeneralLocalization({\n\tname = \"황천의 원령\"\n})\n\nL:SetWarningLocalization({\n\twarningPortal\t\t\t= \"차원문 단계\",\n\twarningBanish\t\t\t= \"추방 단계\"\n})\n\nL:SetTimerLocalization({\n\ttimerPortalPhase\t= \"차원문 단계 종료\",\n\ttimerBanishPhase\t= \"추방 단계 종료\"\n})\n\nL:SetOptionLocalization({\n\twarningPortal\t\t\t= \"차원문 단계 알림 보기\",\n\twarningBanish\t\t\t= \"추방 단계 알림 보기\",\n\ttimerPortalPhase\t\t= \"차원문 단계 지속시간 타이머 바 보기\",\n\ttimerBanishPhase\t\t= \"추방 단계 지속시간 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tDBM_NS_EMOTE_PHASE_2\t= \"%s|1이;가; 황천의 기운을 받고 분노에 휩싸입니다!\",\n\tDBM_NS_EMOTE_PHASE_1\t= \"%s|1이;가; 물러나며 고함을 지르더니 황천의 문을 엽니다.\"\n})\n\n--Chess\nL = DBM:GetModLocalization(\"Chess\")\n\nL:SetGeneralLocalization({\n\tname = \"체스 이벤트\"\n})\n\nL:SetTimerLocalization({\n\ttimerCheat\t= \"속임수 쿨타임\"\n})\n\nL:SetOptionLocalization({\n\ttimerCheat\t= \"속임수 쿨타임 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tEchoCheats\t= \"메디브의 메아리!\"\n})\n\n--Prince Malchezaar\nL = DBM:GetModLocalization(\"Prince\")\n\nL:SetGeneralLocalization({\n\tname = \"공작 말체자르\"\n})\n\nL:SetMiscLocalization({\n\tDBM_PRINCE_YELL_P2\t\t= \"바보 같으니! 시간은 너의 몸을 태우는 불길이 되리라!\",\n\tDBM_PRINCE_YELL_P3\t\t= \"어찌 감히 이렇게 압도적인 힘에 맞서기를 꿈꾸느냐?\",\n\tDBM_PRINCE_YELL_INF1\t= \"모든 차원과 실체가 나를 향해 열려 있노라!\",\n\tDBM_PRINCE_YELL_INF2\t= \"이 말체자르님은 혼자가 아니시다. 너희는 나의 군대와 맞서야 한다!\"\n})\n\n-- Nightbane\nL = DBM:GetModLocalization(\"NightbaneRaid\")\n\nL:SetGeneralLocalization({\n\tname = \"파멸의 어둠\"\n})\n\nL:SetWarningLocalization({\n\tDBM_NB_AIR_WARN\t\t\t= \"공중 단계\"\n})\n\nL:SetTimerLocalization({\n\ttimerAirPhase\t\t\t= \"공중 단계\"\n})\n\nL:SetOptionLocalization({\n\tDBM_NB_AIR_WARN\t\t\t= \"공중 단계 경고 보기\",\n\ttimerAirPhase\t\t\t= \"공중 단계 지속시간 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tDBM_NB_EMOTE_PULL\t\t= \"멀리에서 고대의 존재가 깨어납니다...\",\n\tDBM_NB_YELL_AIR\t\t\t= \"이 더러운 기생충들, 내가 하늘에서 너희의 씨를 말리리라!\",\n\tDBM_NB_YELL_GROUND\t\t= \"그만! 내 친히 내려가서 너희를 짓이겨주마!\",\n\tDBM_NB_YELL_GROUND2\t\t= \"하루살이 같은 놈들! 나의 힘을 똑똑히 보여주겠다!\"\n})\n\n-- Named Beasts\nL = DBM:GetModLocalization(\"Shadikith\")\n\nL:SetGeneralLocalization({\n\tname = \"활강의 샤디키스\"\n})\n\nL = DBM:GetModLocalization(\"Hyakiss\")\n\nL:SetGeneralLocalization({\n\tname = \"잠복꾼 히아키스\"\n})\n\nL = DBM:GetModLocalization(\"Rokad\")\n\nL:SetGeneralLocalization({\n\tname = \"파괴자 로카드\"\n})\n"
  },
  {
    "path": "DBM-Karazhan/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n--Attumen\nL = DBM:GetModLocalization(\"Attumen\")\n\nL:SetGeneralLocalization({\n\tname = \"Ловчий Аттумен\"\n})\n\n\n\n--Moroes\nL = DBM:GetModLocalization(\"Moroes\")\n\nL:SetGeneralLocalization({\n\tname = \"Мороуз\"\n})\n\nL:SetWarningLocalization({\n\tDBM_MOROES_VANISH_FADED\t= \"Исчезновение рассеивается\"\n})\n\nL:SetOptionLocalization({\n\tDBM_MOROES_VANISH_FADED\t= \"Показывать предупреждение рассеивания исчезновения\"\n})\n\n-- Maiden of Virtue\nL = DBM:GetModLocalization(\"Maiden\")\n\nL:SetGeneralLocalization({\n\tname = \"Благочестивая дева\"\n})\n\n-- Romulo and Julianne\nL = DBM:GetModLocalization(\"RomuloAndJulianne\")\n\nL:SetGeneralLocalization({\n\tname = \"Ромуло и Джулианна\"\n})\n\nL:SetMiscLocalization({\n\tEvent\t\t\t\t= \"Сегодня... мы увидим историю любви!\",\n\tRJ_Pull\t\t\t\t= \"Что ты за дьявол, что меня так мучишь?\",\n\tDBM_RJ_PHASE2_YELL\t= \"Приди же, ласковая ночь, верни мне моего Ромуло!\",\n\tRomulo\t\t\t\t= \"Ромуло\",\n\tJulianne\t\t\t= \"Джулианна\"\n})\n\n-- Big Bad Wolf\nL = DBM:GetModLocalization(\"BigBadWolf\")\n\nL:SetGeneralLocalization({\n\tname = \"Злой и страшный серый волк\"\n})\n\n\n\nL:SetMiscLocalization({\n\tDBM_BBW_YELL_1\t\t\t= \"Кем бы мне тут закусить?\"\n})\n\n-- Wizard of Oz\nL = DBM:GetModLocalization(\"Oz\")\n\nL:SetGeneralLocalization({\n\tname = \"Страна Оз\"\n})\n\nL:SetWarningLocalization({\n\tDBM_OZ_WARN_TITO\t\t= \"Тито\",\n\tDBM_OZ_WARN_ROAR\t\t= \"Хохотун\",\n\tDBM_OZ_WARN_STRAWMAN\t= \"Балбес\",\n\tDBM_OZ_WARN_TINHEAD\t\t= \"Медноголовый\",\n\tDBM_OZ_WARN_CRONE\t\t= \"Ведьма\"\n})\n\nL:SetTimerLocalization({\n\tDBM_OZ_WARN_TITO\t\t= \"Тито\",\n\tDBM_OZ_WARN_ROAR\t\t= \"Хохотун\",\n\tDBM_OZ_WARN_STRAWMAN\t= \"Балбес\",\n\tDBM_OZ_WARN_TINHEAD\t\t= \"Медноголовый\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceBosses\t\t\t= \"Показывать предупреждения появления босса\",\n\tShowBossTimers\t\t\t= \"Показывать таймер появления босса\"\n})\n\nL:SetMiscLocalization({\n\tDBM_OZ_YELL_DOROTHEE\t= \"Тито, мы просто обязаны найти дорогу домой! Старый волшебник – наша единственная надежда. Пугало, Рычун, Нержавей, вы... ой, к нам кто-то пришел!\",\n\tDBM_OZ_YELL_ROAR\t\t= \"Я вас не боюсь! Совсем! Хотите сражаться? Хотите, да? Ну же! Я буду драться, даже если мне свяжут лапы за спиной!\",\n\tDBM_OZ_YELL_STRAWMAN\t= \"И что же мне с вами делать? Никак не соображу.\",\n\tDBM_OZ_YELL_TINHEAD\t\t= \"Мне очень нужно сердце. Может, забрать твое?\",\n\tDBM_OZ_YELL_CRONE\t\t= \"Горе вам, всем и каждому, мои крошки!\"\n})\n\n-- Curator\nL = DBM:GetModLocalization(\"Curator\")\n\nL:SetGeneralLocalization({\n\tname = \"Смотритель\"\n})\n\nL:SetWarningLocalization({\n\twarnAdd\t\t= \"Адд появился\"\n})\n\nL:SetOptionLocalization({\n\twarnAdd\t\t= \"Показывать предупреждение когда адд появился\"\n})\n\n-- Terestian Illhoof\nL = DBM:GetModLocalization(\"TerestianIllhoof\")\n\nL:SetGeneralLocalization({\n\tname = \"Терестиан Больное Копыто\"\n})\n\nL:SetMiscLocalization({\n\tKilrek\t\t\t\t\t= \"Кил'рек\",\n\tDChains\t\t\t\t\t= \"Демонические цепи\"\n})\n\n-- Shade of Aran\nL = DBM:GetModLocalization(\"Aran\")\n\nL:SetGeneralLocalization({\n\tname = \"Тень Арана\"\n})\n\nL:SetWarningLocalization({\n\tDBM_ARAN_DO_NOT_MOVE\t= \"Венец пламени - Не двигайтесь!\"\n})\n\nL:SetTimerLocalization({\n\ttimerSpecial\t\t\t= \"Особая способность КД\"\n})\n\nL:SetOptionLocalization({\n\ttimerSpecial\t\t\t= \"Показывать таймер перезарядки особой способности\",\n\tDBM_ARAN_DO_NOT_MOVE\t= \"Показывать особое предупреждение для $spell:30004\"\n})\n\n--Netherspite\nL = DBM:GetModLocalization(\"Netherspite\")\n\nL:SetGeneralLocalization({\n\tname = \"Гнев Пустоты\"\n})\n\nL:SetWarningLocalization({\n\twarningPortal\t\t\t= \"Фаза Порталов\",\n\twarningBanish\t\t\t= \"Фаза Изгнания\"\n})\n\nL:SetTimerLocalization({\n\ttimerPortalPhase\t= \"Фаза Порталов заканчивается\",\n\ttimerBanishPhase\t= \"Фаза Изгнания заканчивается\"\n})\n\nL:SetOptionLocalization({\n\twarningPortal\t\t\t= \"Показывать предупреждение для Фазы Порталов\",\n\twarningBanish\t\t\t= \"Показывать предупреждение для Фазы Изгнания\",\n\ttimerPortalPhase\t\t= \"Показывать таймер длительности Фазы Порталов\",\n\ttimerBanishPhase\t\t= \"Показывать таймер длительности Фазы Изгнания\"\n})\n\nL:SetMiscLocalization({\n\tDBM_NS_EMOTE_PHASE_2\t= \"%s впадает в предельную ярость!\",\n\tDBM_NS_EMOTE_PHASE_1\t= \"%s издает крик, отступая, открывая путь Пустоте.\"\n})\n\n--Chess\nL = DBM:GetModLocalization(\"Chess\")\n\nL:SetGeneralLocalization({\n\tname = \"Шахматы\"\n})\n\nL:SetTimerLocalization({\n\ttimerCheat\t= \"Жульничество КД\"\n})\n\nL:SetOptionLocalization({\n\ttimerCheat\t= \"Показывать таймер перезарядки Жульничества\"\n})\n\nL:SetMiscLocalization({\n\tEchoCheats\t= \"Эхо Медива жульничает!\"\n})\n\n--Prince Malchezaar\nL = DBM:GetModLocalization(\"Prince\")\n\nL:SetGeneralLocalization({\n\tname = \"Принц Малчезар\"\n})\n\nL:SetMiscLocalization({\n\tDBM_PRINCE_YELL_P2\t\t= \"Глупцы! Время – это огонь, сжигающий вас!\",\n\tDBM_PRINCE_YELL_P3\t\t= \"Как вы осмелились бросить вызов столь колоссальной мощи?\",\n\tDBM_PRINCE_YELL_INF1\t= \"Мне открыты все реальности, все измерения!\",\n\tDBM_PRINCE_YELL_INF2\t= \"Вы противостоите не только Малчезару, но и всем подвластным мне легионам!\"\n})\n\n-- Nightbane\nL = DBM:GetModLocalization(\"NightbaneRaid\")\n\nL:SetGeneralLocalization({\n\tname = \"Ночная Погибель (Рейд)\"\n})\n\nL:SetWarningLocalization({\n\tDBM_NB_AIR_WARN\t\t\t= \"Воздушная Фаза\"\n})\n\nL:SetTimerLocalization({\n\ttimerAirPhase\t\t\t= \"Воздушная Фаза\"\n})\n\nL:SetOptionLocalization({\n\tDBM_NB_AIR_WARN\t\t\t= \"Показывать предупреждение Воздушной Фазы\",\n\ttimerAirPhase\t\t\t= \"Показывать таймер длительности Воздушной Фазы\"\n})\n\nL:SetMiscLocalization({\n\tDBM_NB_EMOTE_PULL\t\t= \"Древнее существо пробуждается вдалеке...\",\n\tDBM_NB_YELL_AIR\t\t\t= \"Жалкие букашки! Я изжарю вас с воздуха!\",\n\tDBM_NB_YELL_GROUND\t\t= \"Довольно! Я сойду на землю и сам раздавлю тебя!\",\n\tDBM_NB_YELL_GROUND2\t\t= \"Ничтожества! Я вам покажу мою силу поближе!\"\n})\n\n-- Named Beasts\nL = DBM:GetModLocalization(\"Shadikith\")\n\nL:SetGeneralLocalization({\n\tname = \"Шадикит Скользящий\"\n})\n\nL = DBM:GetModLocalization(\"Hyakiss\")\n\nL:SetGeneralLocalization({\n\tname = \"Хиакисс Скрытень\"\n})\n\nL = DBM:GetModLocalization(\"Rokad\")\n\nL:SetGeneralLocalization({\n\tname = \"Рокад Опустошитель\"\n})\n"
  },
  {
    "path": "DBM-Karazhan/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n--Attumen\nL = DBM:GetModLocalization(\"Attumen\")\n\nL:SetGeneralLocalization({\n\tname = \"獵人阿圖曼\"\n})\n\n\n\n--Moroes\nL = DBM:GetModLocalization(\"Moroes\")\n\nL:SetGeneralLocalization({\n\tname = \"摩洛\"\n})\n\nL:SetWarningLocalization({\n\tDBM_MOROES_VANISH_FADED\t= \"消失退去\"\n})\n\nL:SetOptionLocalization({\n\tDBM_MOROES_VANISH_FADED\t= \"為消失退去顯示警告\"\n})\n\n-- Maiden of Virtue\nL = DBM:GetModLocalization(\"Maiden\")\n\nL:SetGeneralLocalization({\n\tname = \"貞潔聖女\"\n})\n\n-- Romulo and Julianne\nL = DBM:GetModLocalization(\"RomuloAndJulianne\")\n\nL:SetGeneralLocalization({\n\tname = \"羅慕歐與茱麗葉\"\n})\n\nL:SetMiscLocalization({\n\tEvent\t\t\t\t= \"今晚...我們要探索一個禁忌之愛的故事。\",\n\tRJ_Pull\t\t\t\t= \"你是什麼樣的惡魔，讓我這樣的痛苦?\",\n\tDBM_RJ_PHASE2_YELL\t= \"來吧，溫和的夜晚;把我的羅慕歐還給我!\",\n\tRomulo\t\t\t\t= \"羅慕歐\",\n\tJulianne\t\t\t= \"茱麗葉\"\n})\n\n-- Big Bad Wolf\nL = DBM:GetModLocalization(\"BigBadWolf\")\n\nL:SetGeneralLocalization({\n\tname = \"大野狼\"\n})\n\nL:SetMiscLocalization({\n\tDBM_BBW_YELL_1\t= \"我想把你吃掉!\"\n})\n\n-- Wizard of Oz\nL = DBM:GetModLocalization(\"Oz\")\n\nL:SetGeneralLocalization({\n\tname = \"綠野仙蹤\"\n})\n\nL:SetWarningLocalization({\n\tDBM_OZ_WARN_TITO\t\t= \"多多\",\n\tDBM_OZ_WARN_ROAR\t\t= \"獅子\",\n\tDBM_OZ_WARN_STRAWMAN\t= \"稻草人\",\n\tDBM_OZ_WARN_TINHEAD\t\t= \"機器人\",\n\tDBM_OZ_WARN_CRONE\t\t= \"老巫婆\"\n})\n\nL:SetTimerLocalization({\n\tDBM_OZ_WARN_TITO\t\t= \"多多\",\n\tDBM_OZ_WARN_ROAR\t\t= \"獅子\",\n\tDBM_OZ_WARN_STRAWMAN\t= \"稻草人\",\n\tDBM_OZ_WARN_TINHEAD\t\t= \"機器人\"\n})\n\nL:SetOptionLocalization({\n\tAnnounceBosses\t\t\t= \"為新的首領出現顯示警告\",\n\tShowBossTimers\t\t\t= \"為新的首領出現顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tDBM_OZ_YELL_DOROTHEE\t= \"喔多多，我們一定要找到回家的路!那個老巫師是我們唯一的希望!稻草人、獅子、機器人，你會 - 等等哦...天呀，快看，我們有訪客!\",\n\tDBM_OZ_YELL_ROAR\t\t= \"我不是害怕你!你想要戰鬥嗎?啊，你是嗎?來! 我將把兩支爪子放在背後跟你戰鬥!\",\n\tDBM_OZ_YELL_STRAWMAN\t= \"現在我該與你做什麼?我完全不能決定。\",\n\tDBM_OZ_YELL_TINHEAD\t\t= \"我真的能使用心。嘿，我能有你的心嗎?\",\n\tDBM_OZ_YELL_CRONE\t\t= \"為你們每一個人感到不幸，我的小美人們!\"\n})\n\n-- Curator\nL = DBM:GetModLocalization(\"Curator\")\n\nL:SetGeneralLocalization({\n\tname = \"館長\"\n})\n\nL:SetWarningLocalization({\n\twarnAdd\t\t= \"小怪重生\"\n})\n\nL:SetOptionLocalization({\n\twarnAdd\t\t= \"為小怪重生顯示警告\"\n})\n\n-- Terestian Illhoof\nL = DBM:GetModLocalization(\"TerestianIllhoof\")\n\nL:SetGeneralLocalization({\n\tname = \"泰瑞斯提安·疫蹄\"\n})\n\nL:SetMiscLocalization({\n\tKilrek\t= \"基瑞克\",\n\tDChains\t= \"惡魔鍊\"\n})\n\n-- Shade of Aran\nL = DBM:GetModLocalization(\"Aran\")\n\nL:SetGeneralLocalization({\n\tname = \"埃蘭之影\"\n})\n\nL:SetWarningLocalization({\n\tDBM_ARAN_DO_NOT_MOVE\t= \"烈焰火圈，不要動！\"\n})\n\nL:SetTimerLocalization({\n\ttimerSpecial\t\t\t= \"特別技能冷卻\"\n})\n\nL:SetOptionLocalization({\n\ttimerSpecial\t\t\t= \"為特別技能冷卻顯示計時器\",\n\tDBM_ARAN_DO_NOT_MOVE\t= \"為$spell:30004顯示特別警告\"\n})\n\n--Netherspite\nL = DBM:GetModLocalization(\"Netherspite\")\n\nL:SetGeneralLocalization({\n\tname = \"尼德斯\"\n})\n\nL:SetWarningLocalization({\n\twarningPortal\t\t\t= \"光線門階段\",\n\twarningBanish\t\t\t= \"放逐階段\"\n})\n\nL:SetTimerLocalization({\n\ttimerPortalPhase\t= \"光線門階段\",\n\ttimerBanishPhase\t= \"放逐階段\"\n})\n\nL:SetOptionLocalization({\n\twarningPortal\t\t\t= \"為光線門階段顯示警告\",\n\twarningBanish\t\t\t= \"為放逐階段顯示警告\",\n\ttimerPortalPhase\t\t= \"為光線門階段持續時間顯示計時器\",\n\ttimerBanishPhase\t\t= \"為放逐門階段持續時間顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tDBM_NS_EMOTE_PHASE_2\t= \"%s陷入一陣狂怒!\",\n\tDBM_NS_EMOTE_PHASE_1\t= \"%s大聲呼喊撤退，打開通往虛空的門。\"\n})\n\n--Chess\nL = DBM:GetModLocalization(\"Chess\")\n\nL:SetGeneralLocalization({\n\tname = \"西洋棋事件\"\n})\n\nL:SetTimerLocalization({\n\ttimerCheat\t= \"作弊冷卻\"\n})\n\nL:SetOptionLocalization({\n\ttimerCheat\t= \"為作弊冷卻使用計時器\"\n})\n\nL:SetMiscLocalization({\n\tEchoCheats\t= \"麥迪文的回音作弊!\"\n})\n\n--Prince Malchezaar\nL = DBM:GetModLocalization(\"Prince\")\n\nL:SetGeneralLocalization({\n\tname = \"莫克札王子\"\n})\n\nL:SetMiscLocalization({\n\tDBM_PRINCE_YELL_P2\t\t= \"頭腦簡單的笨蛋!你在燃燒的是時間的火焰!\",\n\tDBM_PRINCE_YELL_P3\t\t= \"你怎能期望抵抗這樣勢不可擋的力量?\",\n\tDBM_PRINCE_YELL_INF1\t= \"所有的實體，所有的空間對我來說都是開放的!\",\n\tDBM_PRINCE_YELL_INF2\t= \"你挑戰的不只是莫克札，而是我所率領的整個軍隊!\"\n})\n\n-- Nightbane\nL = DBM:GetModLocalization(\"NightbaneRaid\")\n\nL:SetGeneralLocalization({\n\tname = \"夜禍\"\n})\n\nL:SetWarningLocalization({\n\tDBM_NB_AIR_WARN\t\t\t= \"空中階段\"\n})\n\nL:SetTimerLocalization({\n\ttimerAirPhase\t\t\t= \"空中階段\"\n})\n\nL:SetOptionLocalization({\n\tDBM_NB_AIR_WARN\t\t\t= \"為空中階段顯示警告\",\n\ttimerAirPhase\t\t\t= \"為空中階段持續時間顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tDBM_NB_EMOTE_PULL\t\t= \"一個古老的生物在遠處甦醒過來...\",\n\tDBM_NB_YELL_AIR\t\t= \"悲慘的害蟲。我將讓你消失在空氣中!\",\n\tDBM_NB_YELL_GROUND\t\t= \"夠了!我要親自挑戰你!\",\n\tDBM_NB_YELL_GROUND2\t= \"昆蟲!給你們近距離嚐嚐我的厲害!\"\n})\n\n-- Named Beasts\nL = DBM:GetModLocalization(\"Shadikith\")\n\nL:SetGeneralLocalization({\n\tname = \"滑翔者‧薛迪依斯\"\n})\n\nL = DBM:GetModLocalization(\"Hyakiss\")\n\nL:SetGeneralLocalization({\n\tname = \"潛伏者‧亞奇斯\"\n})\n\nL = DBM:GetModLocalization(\"Rokad\")\n\nL:SetGeneralLocalization({\n\tname = \"劫掠者‧拉卡\"\n})\n"
  },
  {
    "path": "DBM-MC/DBM-MC.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Molten Core|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Núcleo de Magma|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Núcleo de Magma|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Cœur du Magma|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Огненные Недра|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Geschmolzener Kern|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0화산 심장부|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0熔火之心|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0熔火之心|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMMC_AllSavedVars\n## SavedVariablesPerCharacter: DBMMC_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: Classic\n## X-DBM-StatTypes: normal\n## X-DBM-Mod-MapID: 697\n## X-DBM-Mod-Sort: 1107\n## X-DBM-Mod-Name: Molten Core\n## X-DBM-Mod-Name-zhCN: 熔火之心\n## X-DBM-Mod-Name-ruRU: Огненные Недра\n## X-DBM-Mod-Name-frFR: Cœur du Magma\n## X-DBM-Mod-LoadZone: Molten Core\n## X-DBM-Mod-LoadZone-esES: Núcleo de Magma\n## X-DBM-Mod-LoadZone-ruRU: Огненные Недра\n## X-DBM-Mod-LoadZone-frFR: Cœur du Magma\n## X-DBM-Mod-LoadZone-esMX: Núcleo de Magma\n## X-DBM-Mod-LoadZone-zhTW: 熔火之心\n## X-DBM-Mod-LoadZone-zhCN: 熔火之心\n## X-DBM-Mod-LoadZone-koKR: 화산 심장부\n## X-DBM-Mod-LoadZone-deDE: Geschmolzener Kern\n\nlocalization.en.lua\nlocalization.es.lua\nlocalization.mx.lua\nlocalization.ru.lua\nlocalization.de.lua\nlocalization.fr.lua\nlocalization.kr.lua\nlocalization.tw.lua\nlocalization.cn.lua\n\nMCTrash.lua\nLucifron.lua\nMagmadar.lua\nGehennas.lua\nGarr.lua\nGeddon.lua\nShazzrah.lua\nSulfuron.lua\nGolemagg.lua\nMajordomo.lua\nRagnaros.lua\n"
  },
  {
    "path": "DBM-MC/Garr.lua",
    "content": "local mod\t= DBM:NewMod(\"Garr-Classic\", \"DBM-MC\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(12057)--, 12099\nmod:SetEncounterID(666)\n\nmod:SetModelID(12110)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 15732\",\n\t\"SPELL_CAST_SUCCESS 19492\"\n)\n\n--[[\nability.id = 19492 and type = \"cast\"\n--]]\nlocal warnAntiMagicPulse\t= mod:NewSpellAnnounce(19492, 2)\nlocal warnImmolate\t\t\t= mod:NewTargetNoFilterAnnounce(15732, 2, nil, false, 3)--Still feels spammy, they can opt into this if they want it\n\nlocal timerAntiMagicPulseCD\t= mod:NewCDTimer(15.7, 19492, nil, nil, nil, 2)--15.7-20 variation\n\nfunction mod:OnCombatStart(delay)\n\ttimerAntiMagicPulseCD:Start(10-delay)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 15732 and args:IsDestTypePlayer() then\n\t\twarnImmolate:CombinedShow(1, args.destName)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 19492 then\n\t\twarnAntiMagicPulse:Show()\n\t\ttimerAntiMagicPulseCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-MC/Geddon.lua",
    "content": "local mod\t= DBM:NewMod(\"Geddon\", \"DBM-MC\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(12056)\nmod:SetEncounterID(668)\n\nmod:SetModelID(12129)\nmod:SetUsedIcons(8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 20475 19659\",\n\t\"SPELL_AURA_REMOVED 20475\",\n\t\"SPELL_CAST_SUCCESS 19695 19659 20478 20475\"\n)\n\n--[[\n(ability.id = 19695 or ability.id = 19659 or ability.id = 20478) and type = \"cast\"\n--]]\nlocal warnInferno\t\t= mod:NewSpellAnnounce(19695, 3)\nlocal warnBomb\t\t\t= mod:NewTargetNoFilterAnnounce(20475, 4)\nlocal warnArmageddon\t= mod:NewSpellAnnounce(20478, 3)\n\nlocal specWarnBomb\t\t= mod:NewSpecialWarningYou(20475, nil, nil, nil, 3, 2)\nlocal yellBomb\t\t\t= mod:NewYell(20475)\nlocal yellBombFades\t\t= mod:NewShortFadesYell(20475)\nlocal specWarnInferno\t= mod:NewSpecialWarningRun(19695, \"Melee\", nil, nil, 4, 2)\nlocal specWarnIgnite\t= mod:NewSpecialWarningDispel(19659, \"RemoveMagic\", nil, nil, 1, 2)\n\nlocal timerInfernoCD\t= mod:NewCDTimer(21, 19695, nil, nil, nil, 2)--21-27.9\nlocal timerInferno\t\t= mod:NewBuffActiveTimer(8, 19695, nil, nil, nil, 2)\nlocal timerIgniteManaCD\t= mod:NewCDTimer(27, 19659, nil, nil, nil, 2)--27-33\nlocal timerBombCD\t\t= mod:NewCDTimer(13.3, 20475, nil, nil, nil, 3)--13.3-18.3\nlocal timerBomb\t\t\t= mod:NewTargetTimer(8, 20475, nil, nil, nil, 3)\nlocal timerArmageddon\t= mod:NewCastTimer(8, 20478, nil, nil, nil, 2)\n\nmod:AddSetIconOption(\"SetIconOnBombTarget\", 20475, false, false, {8})\n\nfunction mod:OnCombatStart(delay)\n\t--timerIgniteManaCD:Start(7-delay)--7-19, too much variation for first\n\ttimerBombCD:Start(11-delay)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 20475 then\n\t\ttimerBomb:Start(args.destName)\n\t\tif self.Options.SetIconOnBombTarget then\n\t\t\tself:SetIcon(args.destName, 8)\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnBomb:Show()\n\t\t\tspecWarnBomb:Play(\"runout\")\n\t\t\tif not self:IsTrivial() then\n\t\t\t\tyellBomb:Yell()\n\t\t\t\tyellBombFades:Countdown(20475)\n\t\t\tend\n\t\telse\n\t\t\twarnBomb:Show(args.destName)\n\t\tend\n\telseif args.spellId == 19659 and self:CheckDispelFilter(\"magic\") then\n\t\tspecWarnIgnite:CombinedShow(0.3, args.destName)\n\t\tspecWarnIgnite:ScheduleVoice(0.3, \"helpdispel\")\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 20475 then\n\t\ttimerBomb:Stop(args.destName)\n\t\tif self.Options.SetIconOnBombTarget then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tyellBombFades:Cancel()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 19695 then\n\t\tif not self:IsTrivial() then\n\t\t\tspecWarnInferno:Show()\n\t\t\tspecWarnInferno:Play(\"aesoon\")\n\t\telse\n\t\t\twarnInferno:Show()\n\t\tend\n\t\ttimerInferno:Start()\n\t\ttimerInfernoCD:Start()\n\telseif args.spellId == 19659 and args:IsSrcTypeHostile() then\n\t\t--warnIgnite:Show()\n\t\ttimerIgniteManaCD:Start()\n\telseif args.spellId == 20478 then\n\t\twarnArmageddon:Show()\n\t\ttimerArmageddon:Start()\n\telseif args.spellId == 20475 then\n\t\ttimerBombCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-MC/Gehennas.lua",
    "content": "local mod\t= DBM:NewMod(\"Gehennas\", \"DBM-MC\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(12259)--, 11661\nmod:SetEncounterID(665)\n\nmod:SetModelID(13030)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 19716 19717\",\n\t\"SPELL_AURA_APPLIED 20277\"\n)\n\n--[[\n(ability.id = 19716 or ability.id = 19717) and type = \"cast\"\n--]]\nlocal warnRainFire\t= mod:NewSpellAnnounce(19717, 2, nil, false)\nlocal warnCurse\t\t= mod:NewSpellAnnounce(19716, 3)\nlocal warnFist\t\t= mod:NewTargetAnnounce(20277, 2, nil, false, 2)\n\nlocal specWarnGTFO\t= mod:NewSpecialWarningGTFO(19717, nil, nil, nil, 1, 8)\n\nlocal timerRoF\t\t= mod:NewCDTimer(6, 19717, nil, false, nil, 3)\nlocal timerCurse\t= mod:NewCDTimer(26.7, 19716, nil, nil, nil, 3, nil, DBM_COMMON_L.HEALER_ICON..DBM_COMMON_L.CURSE_ICON)--26.7-30\n--local timerFist\t\t= mod:NewBuffActiveTimer(4, 20277, nil, false, 2, 3)\n\nfunction mod:OnCombatStart(delay)\n\ttimerCurse:Start(6-delay)\n\tif not self:IsTrivial() then\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"SPELL_PERIODIC_DAMAGE 19717\",\n\t\t\t\"SPELL_PERIODIC_MISSED 19717\"\n\t\t)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tself:UnregisterShortTermEvents()\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 19716 and args:IsSrcTypeHostile() then\n\t\twarnCurse:Show()\n\t\ttimerCurse:Start()\n\telseif args.spellId == 19717 and args:IsSrcTypeHostile() then\n\t\twarnRainFire:Show()\n\t\ttimerRoF:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 20277 and args:IsDestTypePlayer() then\n\t\twarnFist:CombinedShow(0.3, args.destName)\n\tend\nend\n\nfunction mod:SPELL_PERIODIC_DAMAGE(_, _, _, destGUID, _, _, spellId, spellName)\n\tif spellId == 19717 and destGUID == UnitGUID(\"player\") and self:AntiSpam() then\n\t\tspecWarnGTFO:Show(spellName)\n\t\tspecWarnGTFO:Play(\"watchfeet\")\n\tend\nend\nmod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE\n"
  },
  {
    "path": "DBM-MC/Golemagg.lua",
    "content": "local mod\t= DBM:NewMod(\"Golemagg\", \"DBM-MC\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11988)--, 11672\nmod:SetEncounterID(670)\n\nmod:SetModelID(11986)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 20553\"\n)\n\n--TODO, quake not in combat log on classic?\nlocal warnQuake\t\t= mod:NewSpellAnnounce(20553)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 20553 then\n\t\twarnQuake:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-MC/Lucifron.lua",
    "content": "local mod\t= DBM:NewMod(\"Lucifron\", \"DBM-MC\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(12118)--, 12119\nmod:SetEncounterID(663)\n\nmod:SetModelID(13031)\nmod:SetUsedIcons(1, 2)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 20604\",\n\t\"SPELL_CAST_SUCCESS 19702 19703\",\n--\t\"SPELL_AURA_APPLIED 20604\",\n\t\"SPELL_AURA_REMOVED 20604\"\n)\n\n--[[\n(ability.id = 19702 or ability.id = 19703 or ability.id = 20604) and type = \"cast\"\n--]]\nlocal warnDoom\t\t= mod:NewSpellAnnounce(19702, 2)\nlocal warnCurse\t\t= mod:NewSpellAnnounce(19703, 3)\nlocal warnMC\t\t= mod:NewTargetNoFilterAnnounce(20604, 4)\n\nlocal specWarnMC\t= mod:NewSpecialWarningYou(20604, nil, nil, nil, 1, 2)\nlocal yellMC\t\t= mod:NewYell(20604)\n\nlocal timerCurseCD\t= mod:NewCDTimer(20.5, 19703, nil, nil, nil, 3, nil, DBM_COMMON_L.CURSE_ICON)--20-25N)\nlocal timerDoomCD\t= mod:NewCDTimer(20, 19702, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)--20-25\n--local timerDoom\t\t= mod:NewCastTimer(10, 19702, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)\n\nmod:AddSetIconOption(\"SetIconOnMC\", 20604, true, false, {1, 2})\n\nmod.vb.lastIcon = 1\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.lastIcon = 1\n\ttimerDoomCD:Start(7-delay)--7-8\n\ttimerCurseCD:Start(12-delay)--12-15\nend\n\nfunction mod:MCTarget(targetname)\n\tif not targetname then return end\n\tif self.Options.SetIconOnMC then\n\t\tself:SetIcon(targetname, self.vb.lastIcon)\n\tend\n\twarnMC:CombinedShow(1, targetname)\n\tif targetname == UnitName(\"player\") then\n\t\tspecWarnMC:Show()\n\t\tspecWarnMC:Play(\"targetyou\")\n\t\tyellMC:Yell()\n\tend\n\t--Alternate icon between 1 and 2\n\tif self.vb.lastIcon == 1 then\n\t\tself.vb.lastIcon = 2\n\telse\n\t\tself.vb.lastIcon = 1\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 20604 and args:IsSrcTypeHostile() then\n\t\tself:BossTargetScanner(args.sourceGUID, \"MCTarget\", 0.2, 8)\n\tend\nend\n\n--[[function mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 20604 then\n\t\twarnMC:CombinedShow(1, args.destName)\n\tend\nend--]]\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 20604 and args:IsDestTypePlayer() then\n\t\tif self.Options.SetIconOnMC then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 19702 then\n\t\twarnDoom:Show()\n\t\t--timerDoom:Start()\n\t\ttimerDoomCD:Start()\n\telseif args.spellId == 19703 then\n\t\twarnCurse:Show()\n\t\ttimerCurseCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-MC/MCTrash.lua",
    "content": "local mod\t= DBM:NewMod(\"MCTrash\", \"DBM-MC\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\n--mod:SetModelID(47785)\n\n\nmod.isTrashMod = true\n\nmod:AddSpeedClearOption(\"MC\", true)\n\n--Speed Clear variables\nmod.vb.firstEngageTime = nil\n\n--Register all damage events on mod load\nmod:RegisterShortTermEvents(\n\t\"SPELL_DAMAGE\",\n\t\"SPELL_MISSED\",\n\t\"SWING_DAMAGE\",\n\t\"SWING_MISSED\",\n\t\"SPELL_PERIODIC_DAMAGE\",\n\t\"SPELL_PERIODIC_MISSED\"\n)\n\n--Request speed clear variables, in case it was already started before mod loaded\nmod:SendSync(\"IsMCStarted\")\n\ndo\n\tlocal startCreatureIds = {\n\t\t[11658] = true--Molten Giant\n\t}\n\tlocal function checkFirstPull(self, GUID)\n\t\tlocal cid = self:GetCIDFromGUID(GUID)\n\t\tif startCreatureIds[cid] then\n\t\t\tif not self.vb.firstEngageTime then\n\t\t\t\tself.vb.firstEngageTime = time()\n\t\t\t\tif self.Options.FastestClear2 and self.Options.SpeedClearTimer then\n\t\t\t\t\t--Custom bar creation that's bound to core, not mod, so timer doesn't stop when mod stops it's own timers\n\t\t\t\t\tDBT:CreateBar(self.Options.FastestClear2, DBM_CORE_L.SPEED_CLEAR_TIMER_TEXT, \"Interface\\\\Icons\\\\Spell_Nature_TimeStop\")\n\t\t\t\tend\n\t\t\t\tself:SendSync(\"MCStarted\", self.vb.firstEngageTime)--Also sync engage time\n\t\t\tend\n\t\t\t--Unregister high CPU combat log events\n\t\t\tself:UnregisterShortTermEvents()\n\t\tend\n\tend\n\n\tfunction mod:SPELL_DAMAGE(_, _, _, destGUID)\n\t\tcheckFirstPull(self, destGUID or 0)\n\tend\n\tmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\n\tfunction mod:SPELL_PERIODIC_DAMAGE(_, _, _, destGUID)\n\t\tcheckFirstPull(self, destGUID or 0)\n\tend\n\tmod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE\n\n\tfunction mod:SWING_DAMAGE(_, _, _, destGUID)\n\t\tcheckFirstPull(self, destGUID or 0)\n\tend\n\tmod.SWING_MISSED = mod.SWING_DAMAGE\n\n\tfunction mod:OnSync(msg, startTime)\n\t\t--Sync recieved with start time and ours is currently not started\n\t\tif msg == \"MCStarted\" and startTime and not self.vb.firstEngageTime then\n\t\t\tself.vb.firstEngageTime = tonumber(startTime)\n\t\t\tif self.Options.FastestClear2 and self.Options.SpeedClearTimer then\n\t\t\t\t--Custom bar creation that's bound to core, not mod, so timer doesn't stop when mod stops it's own timers\n\t\t\t\tlocal adjustment = time() - self.vb.firstEngageTime\n\t\t\t\tDBT:CreateBar(self.Options.FastestClear2 - adjustment, DBM_CORE_L.SPEED_CLEAR_TIMER_TEXT)\n\t\t\tend\n\t\t\t--Unregister high CPU combat log events\n\t\t\tself:UnregisterShortTermEvents()\n\t\telseif msg == \"IsMCStarted\" and self.vb.firstEngageTime then\n\t\t\t--Sadly this has to be done with two syncs, one for variables for bosses that have been killed and one to instruct starting of timer\n\t\t\tself:SendSync(\"MCStarted\", self.vb.firstEngageTime)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-MC/Magmadar.lua",
    "content": "local mod\t= DBM:NewMod(\"Magmadar\", \"DBM-MC\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11982)\nmod:SetEncounterID(664)\n\nmod:SetModelID(10193)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 19451 19428\",\n\t\"SPELL_AURA_REMOVED 19451\",\n\t\"SPELL_CAST_SUCCESS 19408\"\n)\n\n--[[\n(ability.id = 19408 or ability.id = 19451) and type = \"cast\"\n or ability.id = 19428 and type = \"applydebuff\"\n--]]\nlocal warnPanic\t\t\t= mod:NewSpellAnnounce(19408, 2)\nlocal warnEnrage\t\t= mod:NewTargetNoFilterAnnounce(19451, 3, nil , \"Healer|Tank|RemoveEnrage\", 2)\nlocal warnConflagration\t= mod:NewTargetNoFilterAnnounce(19428, 2, nil , false)\n\nlocal specWarnEnrage\t= mod:NewSpecialWarningDispel(19451, \"RemoveEnrage\", nil, nil, 1, 6)\n\nlocal timerPanicCD\t\t= mod:NewCDTimer(30, 19408, nil, nil, nil, 2)--30-40\nlocal timerEnrage\t\t= mod:NewBuffActiveTimer(8, 19451, nil, nil, nil, 5, nil, DBM_COMMON_L.ENRAGE_ICON)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 19451 and args:IsDestTypeHostile() then\n\t\tif self.Options.SpecWarn19451dispel then\n\t\t\tspecWarnEnrage:Show(args.destName)\n\t\t\tspecWarnEnrage:Play(\"enrage\")\n\t\telse\n\t\t\twarnEnrage:Show(args.destName)\n\t\tend\n\t\ttimerEnrage:Start()\n\telseif args.spellId == 19428 and args:IsDestTypePlayer() then\n\t\twarnConflagration:CombinedShow(0.5, args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 19451 and args:IsDestTypeHostile() then\n\t\ttimerEnrage:Stop()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 19408 then\n\t\twarnPanic:Show()\n\t\ttimerPanicCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-MC/Majordomo.lua",
    "content": "local mod\t= DBM:NewMod(\"Majordomo\", \"DBM-MC\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(12018, 11663, 11664)\nmod:SetEncounterID(671)\n\nmod:SetModelID(12029)\n\nmod:RegisterCombat(\"combat\")\n--mod:RegisterKill(\"yell\", L.Kill)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 20619 21075 20534\"\n)\n\n--[[\n(ability.id = 20619 or ability.id = 21075 or ability.id = 20534) and type = \"cast\"\n--]]\nlocal warnTeleport\t\t\t= mod:NewTargetNoFilterAnnounce(20534)\nlocal warnDamageShield\t\t= mod:NewSpellAnnounce(21075, 2)\n\nlocal specWarnMagicReflect\t= mod:NewSpecialWarningReflect(20619, \"CasterDps\", nil, 2, 1, 2)\nlocal specWarnDamageShield\t= mod:NewSpecialWarningReflect(21075, false, nil, 2, 1, 2)\n\nlocal timerMagicReflect\t\t= mod:NewBuffActiveTimer(10, 20619, nil, nil, nil, 5, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerDamageShield\t\t= mod:NewBuffActiveTimer(10, 21075, nil, nil, nil, 5, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerTeleportCD\t\t= mod:NewCDTimer(25, 20534, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)--25-30\nlocal timerShieldCD\t\t\t= mod:NewTimer(30.3, \"timerShieldCD\", nil, nil, nil, 6, nil, DBM_COMMON_L.DAMAGE_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerTeleportCD:Start(19.4-delay)\n\ttimerShieldCD:Start(27.8-delay)--27-30\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 20619 then\n\t\tspecWarnMagicReflect:Show(BOSS)--Always a threat to casters\n\t\tspecWarnMagicReflect:Play(\"stopattack\")\n\t\ttimerMagicReflect:Start()\n\t\ttimerShieldCD:Start()\n\telseif args.spellId == 21075 then\n\t\tif self.Options.SpecWarn21075reflect and not self:IsTrivial() then--Not a threat to high level melee\n\t\t\tspecWarnDamageShield:Show(BOSS)\n\t\t\tspecWarnDamageShield:Play(\"stopattack\")\n\t\telse\n\t\t\twarnDamageShield:Show()\n\t\tend\n\t\ttimerDamageShield:Start()\n\t\ttimerShieldCD:Start()\n\telseif args.spellId == 20534 then\n\t\twarnTeleport:Show(args.destName)\n\t\ttimerTeleportCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-MC/Ragnaros.lua",
    "content": "local mod\t= DBM:NewMod(\"Ragnaros-Classic\", \"DBM-MC\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11502)\nmod:SetEncounterID(672)\nmod:SetModelID(11121)\nmod:SetHotfixNoticeRev(20231219000000)--2023, 12, 19\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(\n\t\"SPELL_CAST_START 19774 20568\",\n\t\"SPELL_CAST_SUCCESS 20566 19773\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\nmod:RegisterEventsInCombat( -- 2023/12/19: Cannot have already registered events, or it will fire in duplicate\n--\t\"SPELL_CAST_START 20568\",\n--\t\"SPELL_CAST_SUCCESS 20566\",\n\t\"UNIT_DIED\"\n)\n\n--[[\nability.id = 20566 and type = \"cast\" or target.id = 12143 and type = \"death\"\n--]]\nlocal warnWrathRag\t\t\t= mod:NewSpellAnnounce(20566, 3)\nlocal warnSubmerge\t\t\t= mod:NewSpellAnnounce(21107, 2, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendBurrow.blp\")\nlocal warnEmerge\t\t\t= mod:NewSpellAnnounce(20568, 2, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\")\nlocal warnSonsOfFlameLeft\t= mod:NewAddsLeftAnnounce(19629, 2, 19774) -- spellId 21108 (Summon of Sons of Flame) returns nil, so use a similar spellId: 19629 (Summon Flames)\n\nlocal timerWrathRag\t\t\t= mod:NewCDTimer(25, 20566, nil, nil, nil, 2, nil, DBM_COMMON_L.IMPORTANT_ICON, true, mod:IsMelee() and 1, 4) -- ~10s variance [20.09-29.66] |||| EDIT 19/12/2023 - https://www.warmane.com/bugtracker/report/120178: 5s variance [25-30]. Added \"keep\" arg. (40N Lordaeron [2023-09-13]@[19:05:07] || 25N Onyxia [2023-11-25]@[17:36:30] |||| 25N Onyxia [2023-12-19]@[21:24:51] || 25N Onyxia [2023-12-19]@[21:43:01] || 25N Onyxia [2023-12-19]@[22:05:18]) - \"Wrath of Ragnaros-20566-npc:11502-303 = pull:29.98, 28.56, 25.76, 22.10, 22.73, 23.72, 69.84, 27.74, 22.44, 29.00, 25.42, 21.28, 67.54, 24.18, 28.92\" || pull:29.94, 22.16, 29.66, 28.36, 20.09, 24.10, Submerged/25.63, Emerged/89.99, 30.08/120.06/145.69 |||| pull:30.00, 28.58, 28.30, 25.31 || pull:29.99, 27.22, 29.88, 29.00, 29.52, 25.80, Submerged/9.53, Emerged/90.02, 30.03/120.05/129.58, 25.73, 29.77, Submerged/5.42, Emerged/90.05 || pull:29.99, 25.43, 26.70, 25.08, 27.40, 27.25, Submerged/18.87, Emerged/90.07\nlocal timerSubmerge\t\t\t= mod:NewNextTimer(180, 21107, nil, nil, nil, 6, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendBurrow.blp\", nil, nil, 1, 5)\nlocal timerEmerge\t\t\t= mod:NewNextTimer(90, 20568, nil, nil, nil, 6, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\", nil, nil, 1, 5)\nlocal timerCombatStart\t\t= mod:NewCombatTimer(75.15)\n\nmod:AddRangeFrameOption(\"18\", nil, \"-Melee\")\n\nmod.vb.addLeft = 0\n--mod.vb.ragnarosEmerged = true\n--local addsGuidCheck = {}\nlocal firstBossMod = DBM:GetModByName(\"MCTrash\")\n\n--[[\nlocal function emerged(self)\n\tDBM:AddSpecialEventToTranscriptorLog(\"Emerged\")\n\tself.vb.ragnarosEmerged = true\n\ttimerEmerge:Stop()\n\twarnEmerge:Show()\n\ttimerWrathRag:Start(26.7)--need to find out what it is first.\n\ttimerSubmerge:Start(90) -- 180s from last Submerge, so account for the 90s from emerge timer. Submerge Yells diff (40N Lordaeron [2023-09-13]@[19:05:07]) - 2209.92 > 2389.91 [179,99]\nend\n]]\n\nfunction mod:OnCombatStart(delay)\n--\ttable.wipe(addsGuidCheck)\n\tself.vb.addLeft = 0\n--\tself.vb.ragnarosEmerged = true\n\ttimerWrathRag:Start(30-delay)\n\ttimerSubmerge:Start(-delay) -- (40N Lordaeron [2023-09-13]@[19:05:07]) - 180\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(18)\n\tend\nend\n\nfunction mod:OnCombatEnd(wipe)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\n\tif not wipe then\n\t\tDBT:CancelBar(DBM_CORE_L.SPEED_CLEAR_TIMER_TEXT)\n\t\tif firstBossMod.vb.firstEngageTime then\n\t\t\tlocal thisTime = time() - firstBossMod.vb.firstEngageTime\n\t\t\tif thisTime and thisTime > 0 then\n\t\t\t\tif not firstBossMod.Options.FastestClear2 then\n\t\t\t\t\t--First clear, just show current clear time\n\t\t\t\t\tDBM:AddMsg(DBM_CORE_L.RAID_DOWN:format(\"MC\", DBM:strFromTime(thisTime)))\n\t\t\t\t\tfirstBossMod.Options.FastestClear2 = thisTime\n\t\t\t\telseif (firstBossMod.Options.FastestClear2 > thisTime) then\n\t\t\t\t\t--Update record time if this clear shorter than current saved record time and show users new time, compared to old time\n\t\t\t\t\tDBM:AddMsg(DBM_CORE_L.RAID_DOWN_NR:format(\"MC\", DBM:strFromTime(thisTime), DBM:strFromTime(firstBossMod.Options.FastestClear2)))\n\t\t\t\t\tfirstBossMod.Options.FastestClear2 = thisTime\n\t\t\t\telse\n\t\t\t\t\t--Just show this clear time, and current record time (that you did NOT beat)\n\t\t\t\t\tDBM:AddMsg(DBM_CORE_L.RAID_DOWN_L:format(\"MC\", DBM:strFromTime(thisTime), DBM:strFromTime(firstBossMod.Options.FastestClear2)))\n\t\t\t\tend\n\t\t\tend\n\t\t\tfirstBossMod.vb.firstEngageTime = nil\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 19774 and self:AntiSpam(5, 4) then\n\t\t--This is still going to use a sync event because someone might start this RP from REALLY REALLY far away\n\t\tself:SendSync(\"SummonRag\")\n\telseif spellId == 20568 and self:IsInCombat() then -- Ragnaros Emerge ; needs boss engage check since Emerge will fire during his RP pre-IEEU script, and this was a regression after RegisterEventsInCombat was switched to RegisterEvents.\n\t\tDBM:AddSpecialEventToTranscriptorLog(\"Emerged\")\n--\t\tself.vb.ragnarosEmerged = true\n\t\ttimerEmerge:Stop()\n\t\twarnEmerge:Show()\n\t\ttimerWrathRag:Start(30) -- (40N Lordaeron [2023-09-13]@[19:05:07] || ) - 2222.61 > 2252.60 [29.99] || \"Wrath of Ragnaros-20566-npc:11502-130 = pull:29.94, 22.16, 29.66, 28.36, 20.09, 24.10, Submerged/25.63, Emerged/89.99, Emerged/0.00, 30.08/30.08/120.06/145.69\"\n\t\ttimerSubmerge:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 20566 then\n\t\twarnWrathRag:Show()\n\t\ttimerWrathRag:Start()\n\telseif spellId == 19773 then\n\t\t--This is still going to use a sync event because someone might start this RP from REALLY REALLY far away\n\t\tself:SendSync(\"DomoDeath\")\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal guid = args.destGUID\n\tif self:GetCIDFromGUID(guid) == 12143 then--Son of Flame\n\t\t--self:SendSync(\"AddDied\", guid)--Send sync it died do to combat log range and size of room\n\t\t--We're in range of event, no reason to wait for sync, especially in a raid that might not have many DBM users\n--\t\tif not addsGuidCheck[guid] then\n--\t\t\taddsGuidCheck[guid] = true\n\t\t\tself.vb.addLeft = self.vb.addLeft - 1\n--\t\t\tif not self.vb.ragnarosEmerged and self.vb.addLeft == 0 then--After all 8 die he emerges immediately\n--\t\t\t\tself:Unschedule(emerged)\n--\t\t\t\temerged(self) -- not needed since SPELL_CAST_START:20568 exists, and will fire regardless of 90s script or early 8 Son of Flames clearance\n--\t\t\tend\n--\t\tend\n\t\twarnSonsOfFlameLeft:Show(self.vb.addLeft)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.Submerge or msg == L.Submerge2 then\n\t\tself:SendSync(\"Submerge\")\n\telseif (msg == L.Pull or msg:find(L.Pull)) and self:AntiSpam(5, 4) then\n\t\tself:SendSync(\"SummonRag\")\n\tend\nend\n\nfunction mod:OnSync(msg--[[, guid]])\n\tif msg == \"SummonRag\" and self:AntiSpam(5, 2) then\n\t\ttimerCombatStart:Start()\n\telseif msg == \"Submerge\" and self:IsInCombat() then\n\t\tDBM:AddSpecialEventToTranscriptorLog(\"Submerged\")\n--\t\tself.vb.ragnarosEmerged = false\n--\t\tself:Unschedule(emerged)\n\t\ttimerWrathRag:Stop()\n\t\ttimerSubmerge:Stop()\n\t\twarnSubmerge:Show()\n\t\ttimerEmerge:Start()\n--\t\tself:Schedule(90, emerged, self)\n\t\tself.vb.addLeft = self.vb.addLeft + 8\n\t--[[elseif msg == \"AddDied\" and self:IsInCombat() and guid and not addsGuidCheck[guid] then\n\t\t--A unit died we didn't detect ourselves, so we correct our adds counter from sync\n\t\taddsGuidCheck[guid] = true\n\t\tself.vb.addLeft = self.vb.addLeft - 1\n\t\tif not self.vb.ragnarosEmerged and self.vb.addLeft == 0 then--After all 8 die he emerges immediately\n\t\t\tself:Unschedule(emerged)\n\t\t\temerged(self)\n\t\tend--]]\n\telseif msg == \"DomoDeath\" and self:AntiSpam(5, 3) then\n\t\t--The timer between yell/summon start and ragnaros being attackable is variable, but time between domo death and him being attackable is not.\n\t\t--As such, we start lowest timer of that variation on the RP start, but adjust timer if it's less than 10 seconds at time domo dies\n\t\tlocal remaining = timerCombatStart:GetRemaining()\n\t\tif remaining then\n\t\t\tif remaining < 10 then\n\t\t\t\ttimerCombatStart:AddTime(10 - remaining)\n\t\t\telseif remaining > 10 then\n\t\t\t\ttimerCombatStart:RemoveTime(remaining - 10)\n\t\t\tend\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-MC/Shazzrah.lua",
    "content": "local mod\t= DBM:NewMod(\"Shazzrah\", \"DBM-MC\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(12264)\nmod:SetEncounterID(667)\n\nmod:SetModelID(13032)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 19714\",\n\t\"SPELL_AURA_REMOVED 19714\",\n\t\"SPELL_CAST_SUCCESS 19713 19715 23138\"\n)\n\n--[[\n(ability.id = 19713 or ability.id = 19715 or ability.id = 23138 or ability.id = 19714) and type = \"cast\"\n--]]\nlocal warnCurse\t\t\t\t= mod:NewSpellAnnounce(19713, 4)\nlocal warnDeadenMagic\t\t= mod:NewTargetNoFilterAnnounce(19714, 2, nil, false, 2)\nlocal warnCntrSpell\t\t\t= mod:NewSpellAnnounce(19715, 3, nil, \"SpellCaster\", 2)\n\nlocal specWarnDeadenMagic\t= mod:NewSpecialWarningDispel(19714, false, nil, 2, 1, 2)\nlocal specWarnGate\t\t\t= mod:NewSpecialWarningTaunt(23138, \"Tank\", nil, nil, 1, 2)--aggro wipe, needs fresh taunt\n\nlocal timerCurseCD\t\t\t= mod:NewCDTimer(22, 19713, nil, nil, nil, 3, nil, DBM_COMMON_L.CURSE_ICON)--22-25.5 (20-25?)\nlocal timerDeadenMagic\t\t= mod:NewBuffActiveTimer(30, 19714, nil, false, 3, 5, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerGateCD\t\t\t= mod:NewCDTimer(41.3, 23138, nil, \"Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)--41-50\nlocal timerCounterSpellCD\t= mod:NewCDTimer(15, 19715, nil, \"SpellCaster\", nil, 3)--15-19\n\nfunction mod:OnCombatStart(delay)\n\ttimerCurseCD:Start(6-delay)--6-10\n\ttimerCounterSpellCD:Start(9.6-delay)\n\ttimerGateCD:Start(30-delay)--30-31\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 19714 and not args:IsDestTypePlayer() then\n\t\tif self.Options.SpecWarn19714dispel then\n\t\t\tspecWarnDeadenMagic:Show(args.destName)\n\t\t\tspecWarnDeadenMagic:Play(\"dispelboss\")\n\t\telse\n\t\t\twarnDeadenMagic:Show(args.destName)\n\t\tend\n\t\ttimerDeadenMagic:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 19714 then\n\t\ttimerDeadenMagic:Stop()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 19713 then\n\t\twarnCurse:Show()\n\t\ttimerCurseCD:Start()\n\telseif args.spellId == 19715 then\n\t\twarnCntrSpell:Show()\n\t\ttimerCounterSpellCD:Start()\n\telseif args.spellId == 23138 then\n\t\tspecWarnGate:Show(args.sourceName)\n\t\tspecWarnGate:Play(\"tauntboss\")\n\t\ttimerGateCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-MC/Sulfuron.lua",
    "content": "local mod\t= DBM:NewMod(\"Sulfuron\", \"DBM-MC\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(12098)--, 11662\nmod:SetEncounterID(669)\n\nmod:SetModelID(13030)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 19779 19780 19776 20294\",\n\t\"SPELL_CAST_START 19775\"\n)\n\n--TODO, nameplate aura if classic API supports it enough\nlocal warnInspire\t\t= mod:NewTargetNoFilterAnnounce(19779, 2, nil, \"Tank|Healer\", 2)\nlocal warnHandRagnaros\t= mod:NewTargetAnnounce(19780, 2, nil, false, 2)\nlocal warnShadowPain\t= mod:NewTargetAnnounce(19776, 2, nil, false, 2)\nlocal warnImmolate\t\t= mod:NewTargetAnnounce(20294, 2, nil, false, 2)\n\nlocal specWarnHeal\t\t= mod:NewSpecialWarningInterrupt(19775, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerInspire\t\t= mod:NewTargetTimer(10, 19779, nil, \"Tank|Healer\", 2, 5, nil, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.HEALER_ICON)\nlocal timerHeal\t\t\t= mod:NewCastTimer(2, 19775, nil, nil, 2, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 19779 then\n\t\twarnInspire:Show(args.destName)\n\t\ttimerInspire:Start(args.destName)\n\telseif args.spellId == 19780 and args:IsDestTypePlayer() then\n\t\twarnHandRagnaros:CombinedShow(0.3, args.destName)\n\telseif args.spellId == 19776 and args:IsDestTypePlayer() then\n\t\twarnShadowPain:CombinedShow(0.3, args.destName)\n\telseif args.spellId == 20294 and args:IsDestTypePlayer() then\n\t\twarnImmolate:CombinedShow(0.3, args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 19779 then\n\t\ttimerInspire:Stop(args.destName)\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 19775 and args:IsSrcTypeHostile() and self:CheckInterruptFilter(args.sourceGUID, false, true) then--Only show warning/timer for your own target.\n\t\ttimerHeal:Start()\n\t\tspecWarnHeal:Show(args.sourceName)\n\t\tspecWarnHeal:Play(\"kickcast\")\n\tend\nend\n"
  },
  {
    "path": "DBM-MC/localization.cn.lua",
    "content": "if GetLocale() ~= \"zhCN\" then return end\nlocal L\n\n----------------\n--  Lucifron  --\n----------------\nL = DBM:GetModLocalization(\"Lucifron\")\n\nL:SetGeneralLocalization({\n\tname = \"鲁西弗隆\"\n})\n\n----------------\n--  Magmadar  --\n----------------\nL = DBM:GetModLocalization(\"Magmadar\")\n\nL:SetGeneralLocalization({\n\tname = \"玛格曼达\"\n})\n\n----------------\n--  Gehennas  --\n----------------\nL = DBM:GetModLocalization(\"Gehennas\")\n\nL:SetGeneralLocalization({\n\tname = \"基赫纳斯\"\n})\n\n------------\n--  Garr  --\n------------\nL = DBM:GetModLocalization(\"Garr-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"加尔\"\n})\n\n--------------\n--  Geddon  --\n--------------\nL = DBM:GetModLocalization(\"Geddon\")\n\nL:SetGeneralLocalization({\n\tname = \"迦顿男爵\"\n})\n\n----------------\n--  Shazzrah  --\n----------------\nL = DBM:GetModLocalization(\"Shazzrah\")\n\nL:SetGeneralLocalization({\n\tname = \"沙斯拉尔\"\n})\n\n----------------\n--  Sulfuron  --\n----------------\nL = DBM:GetModLocalization(\"Sulfuron\")\n\nL:SetGeneralLocalization({\n\tname = \"萨弗隆先驱者\"\n})\n\n----------------\n--  Golemagg  --\n----------------\nL = DBM:GetModLocalization(\"Golemagg\")\n\nL:SetGeneralLocalization({\n\tname = \"焚化者古雷曼格\"\n})\n\n-----------------\n--  Majordomo  --\n-----------------\nL = DBM:GetModLocalization(\"Majordomo\")\n\nL:SetGeneralLocalization({\n\tname = \"管理者埃克索图斯\"\n})\n\nL:SetTimerLocalization({\n\ttimerShieldCD\t\t= \"下一个护盾\"\n})\n\nL:SetOptionLocalization({\n\ttimerShieldCD\t\t= \"为下一个护盾显示计时器\"\n})\n\n----------------\n--  Ragnaros  --\n----------------\nL = DBM:GetModLocalization(\"Ragnaros-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"拉格纳罗斯\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"隐没\",\n\tWarnEmerge\t\t\t= \"现身\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"隐没\",\n\tTimerEmerge\t\t\t= \"现身\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"为隐没显示警告\",\n\tTimerSubmerge\t\t= \"为隐没显示计时器\",\n\tWarnEmerge\t\t\t= \"为现身显示警告\",\n\tTimerEmerge\t\t\t= \"为现身显示计时器\"\n})\n\nL:SetMiscLocalization({\n\tSubmerge\t= \"出现吧，我的奴仆！保卫你们的主人！\",\n\tSubmerge2\t= \"你们不是烈焰之王的敌人！出现吧，火焰的奴仆！你们的主人在召唤你们！\",\n\tPull\t\t= \"你这个莽撞的家伙！你简直是自寻死路！看吧，你惊动了主人！\"\n})\n\n-----------------\n--  MC: Trash  --\n-----------------\nL = DBM:GetModLocalization(\"MCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"MC: 全程计时\"\n})\n"
  },
  {
    "path": "DBM-MC/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n----------------\n--  Lucifron  --\n----------------\nL = DBM:GetModLocalization(\"Lucifron\")\n\nL:SetGeneralLocalization({\n\tname = \"Lucifron\"\n})\n\n----------------\n--  Magmadar  --\n----------------\nL = DBM:GetModLocalization(\"Magmadar\")\n\nL:SetGeneralLocalization({\n\tname = \"Magmadar\"\n})\n\n----------------\n--  Gehennas  --\n----------------\nL = DBM:GetModLocalization(\"Gehennas\")\n\nL:SetGeneralLocalization({\n\tname = \"Gehennas\"\n})\n\n------------\n--  Garr  --\n------------\nL = DBM:GetModLocalization(\"Garr-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Garr\"\n})\n\n--------------\n--  Geddon  --\n--------------\nL = DBM:GetModLocalization(\"Geddon\")\n\nL:SetGeneralLocalization({\n\tname = \"Baron Geddon\"\n})\n\n----------------\n--  Shazzrah  --\n----------------\nL = DBM:GetModLocalization(\"Shazzrah\")\n\nL:SetGeneralLocalization({\n\tname = \"Shazzrah\"\n})\n\n----------------\n--  Sulfuron  --\n----------------\nL = DBM:GetModLocalization(\"Sulfuron\")\n\nL:SetGeneralLocalization({\n\tname = \"Sulfuronherold\"\n})\n\n----------------\n--  Golemagg  --\n----------------\nL = DBM:GetModLocalization(\"Golemagg\")\n\nL:SetGeneralLocalization({\n\tname = \"Golemagg der Verbrenner\"\n})\n\n-----------------\n--  Majordomo  --\n-----------------\nL = DBM:GetModLocalization(\"Majordomo\")\n\nL:SetGeneralLocalization({\n\tname = \"Majordomus Executus\"\n})\n\nL:SetTimerLocalization({\n\ttimerShieldCD\t\t= \"Nächstes Schild\"\n})\n\nL:SetOptionLocalization({\n\ttimerShieldCD\t\t= \"Zeige Zeit für den nächsten Schadenschild/Magiereflexion\"\n})\n\n----------------\n--  Ragnaros  --\n----------------\nL = DBM:GetModLocalization(\"Ragnaros-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Ragnaros\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"Abtauchen\",\n\tWarnEmerge\t\t\t= \"Auftauchen\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"Abtauchen\",\n\tTimerEmerge\t\t\t= \"Auftauchen\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"Zeige Warnung für Abtauchen\",\n\tTimerSubmerge\t\t= \"Zeige Zeit bis Abtauchen\",\n\tWarnEmerge\t\t\t= \"Zeige Warnung für Auftauchen\",\n\tTimerEmerge\t\t\t= \"Zeige Zeit bis Auftauchen\"\n})\n\nL:SetMiscLocalization({\n\tSubmerge\t= \"KOMMT HERBEI, MEINE DIENER! VERTEIDIGT EUREN HERRN!\",\n\tSubmerge2\t= \"NIEMAND BESIEGT DIE LEBENDE FLAMME! KOMMT, IHR DIENER DES FEUERS! VORWÄRTS, IHR KREATUREN DES HASSES! EUER MEISTER RUFT EUCH!\",\n\tPull\t\t= \"Unverschämte Welpen! Ihr seid sehenden Auges dem Tod in die Arme gelaufen! Seht her, der Meister regt sich!\"\n})\n\n-----------------\n--  MC: Trash  --\n-----------------\nL = DBM:GetModLocalization(\"MCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"GK: Trash\"\n})\n"
  },
  {
    "path": "DBM-MC/localization.en.lua",
    "content": "local L\n\n----------------\n--  Lucifron  --\n----------------\nL = DBM:GetModLocalization(\"Lucifron\")\n\nL:SetGeneralLocalization({\n\tname = \"Lucifron\"\n})\n\n----------------\n--  Magmadar  --\n----------------\nL = DBM:GetModLocalization(\"Magmadar\")\n\nL:SetGeneralLocalization({\n\tname = \"Magmadar\"\n})\n\n----------------\n--  Gehennas  --\n----------------\nL = DBM:GetModLocalization(\"Gehennas\")\n\nL:SetGeneralLocalization({\n\tname = \"Gehennas\"\n})\n\n------------\n--  Garr  --\n------------\nL = DBM:GetModLocalization(\"Garr-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Garr\"\n})\n\n--------------\n--  Geddon  --\n--------------\nL = DBM:GetModLocalization(\"Geddon\")\n\nL:SetGeneralLocalization({\n\tname = \"Baron Geddon\"\n})\n\n----------------\n--  Shazzrah  --\n----------------\nL = DBM:GetModLocalization(\"Shazzrah\")\n\nL:SetGeneralLocalization({\n\tname = \"Shazzrah\"\n})\n\n----------------\n--  Sulfuron  --\n----------------\nL = DBM:GetModLocalization(\"Sulfuron\")\n\nL:SetGeneralLocalization({\n\tname = \"Sulfuron Harbinger\"\n})\n\n----------------\n--  Golemagg  --\n----------------\nL = DBM:GetModLocalization(\"Golemagg\")\n\nL:SetGeneralLocalization({\n\tname = \"Golemagg the Incinerator\"\n})\n\n-----------------\n--  Majordomo  --\n-----------------\nL = DBM:GetModLocalization(\"Majordomo\")\n\nL:SetGeneralLocalization({\n\tname = \"Majordomo Executus\"\n})\n\nL:SetTimerLocalization({\n\ttimerShieldCD\t\t= \"Next Shield\"\n})\n\nL:SetOptionLocalization({\n\ttimerShieldCD\t\t= \"Show timer for next Damage/Reflect Shield\"\n})\n\n----------------\n--  Ragnaros  --\n----------------\nL = DBM:GetModLocalization(\"Ragnaros-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Ragnaros\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"Submerge\",\n\tWarnEmerge\t\t\t= \"Emerge\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"Submerge\",\n\tTimerEmerge\t\t\t= \"Emerge\",\n\ttimerCombatStart\t= \"~\" .. DBM_CORE_L.GENERIC_TIMER_COMBAT\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"Show warning for submerge\",\n\tTimerSubmerge\t\t= \"Show timer for submerge\",\n\tWarnEmerge\t\t\t= \"Show warning for emerge\",\n\tTimerEmerge\t\t\t= \"Show timer for emerge\",\n\ttimerCombatStart\t= DBM_CORE_L.OPTION_TIMER_COMBAT\n})\n\nL:SetMiscLocalization({\n\tSubmerge\t= \"COME FORTH, MY SERVANTS! DEFEND YOUR MASTER!\",\n\tSubmerge2\t= \"YOU CANNOT DEFEAT THE LIVING FLAME! COME YOU MINIONS OF FIRE! COME FORTH, YOU CREATURES OF HATE! YOUR MASTER CALLS!\",\n\tPull\t\t= \"Impudent whelps! You've rushed headlong to your own deaths! See now, the master stirs!\\n\"\n})\n\n-----------------\n--  MC: Trash  --\n-----------------\nL = DBM:GetModLocalization(\"MCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"MC: Trash\"\n})\n"
  },
  {
    "path": "DBM-MC/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" then return end\nlocal L\n\n----------------\n--  Lucifron  --\n----------------\nL = DBM:GetModLocalization(\"Lucifron\")\n\nL:SetGeneralLocalization({\n\tname = \"Lucifron\"\n})\n\n----------------\n--  Magmadar  --\n----------------\nL = DBM:GetModLocalization(\"Magmadar\")\n\nL:SetGeneralLocalization({\n\tname = \"Magmadar\"\n})\n\n----------------\n--  Gehennas  --\n----------------\nL = DBM:GetModLocalization(\"Gehennas\")\n\nL:SetGeneralLocalization({\n\tname = \"Gehennas\"\n})\n\n------------\n--  Garr  --\n------------\nL = DBM:GetModLocalization(\"Garr-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Garr\"\n})\n\n--------------\n--  Geddon  --\n--------------\nL = DBM:GetModLocalization(\"Geddon\")\n\nL:SetGeneralLocalization({\n\tname = \"Barón Geddon\"\n})\n\n----------------\n--  Shazzrah  --\n----------------\nL = DBM:GetModLocalization(\"Shazzrah\")\n\nL:SetGeneralLocalization({\n\tname = \"Shazzrah\"\n})\n\n----------------\n--  Sulfuron  --\n----------------\nL = DBM:GetModLocalization(\"Sulfuron\")\n\nL:SetGeneralLocalization({\n\tname = \"Sulfuron Presagista\"\n})\n\n----------------\n--  Golemagg  --\n----------------\nL = DBM:GetModLocalization(\"Golemagg\")\n\nL:SetGeneralLocalization({\n\tname = \"Golemagg el Incinerador\"\n})\n\n-----------------\n--  Majordomo  --\n-----------------\nL = DBM:GetModLocalization(\"Majordomo\")\n\nL:SetGeneralLocalization({\n\tname = \"Mayordomo Executus\"\n})\n\nL:SetTimerLocalization({\n\ttimerShieldCD\t\t= \"Próximo Escudo\"\n})\n\nL:SetOptionLocalization({\n\ttimerShieldCD\t\t= \"Mostrar temporizador para el próximo Escudo de daño/reflejo\"\n})\n\n----------------\n--  Ragnaros  --\n----------------\nL = DBM:GetModLocalization(\"Ragnaros-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Ragnaros\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"Ragnaros se sumerge\",\n\tWarnEmerge\t\t\t= \"Ragnaros ha regresado\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"Sumersión\",\n\tTimerEmerge\t\t\t= \"Emersión\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"Mostrar aviso cuando Ragnaros se sumerja\",\n\tTimerSubmerge\t\t= \"Mostrar temporizador para cuando Ragnaros se sumerja\",\n\tWarnEmerge\t\t\t= \"Mostrar aviso cuando Ragnaros regrese a la superficie\",\n\tTimerEmerge\t\t\t= \"Mostrar temporizador para cuando Ragnaros regrese a la superficie\"\n})\n\nL:SetMiscLocalization({\n\tSubmerge\t= \"¡AVANZAD, MIS SIRVIENTES! ¡DEFENDED A VUESTRO MAESTRO!\",\n\tSubmerge2\t= \"¡NO PODÉIS VENCER A LA LLAMA VIVIENTE! ¡VENID, ESCLAVOS DEL FUEGO! ¡AVANZAD, CRIATURAS DEL ODIO! ¡VUESTRO MAESTRO OS LLAMA!\",\n\tPull\t\t= \"¡Crías imprudentes! ¡Os habéis precipitado hasta vuestra propia muerte! ¡Ahora mirad, el maestro se agita!\"\n})\n\n-----------------\n--  MC: Trash  --\n-----------------\nL = DBM:GetModLocalization(\"MCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"NM: Bichos\"\n})\n"
  },
  {
    "path": "DBM-MC/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\nlocal L\n\n----------------\n--  Lucifron  --\n----------------\nL = DBM:GetModLocalization(\"Lucifron\")\n\nL:SetGeneralLocalization({\n\tname = \"Lucifron\"\n})\n\n----------------\n--  Magmadar  --\n----------------\nL = DBM:GetModLocalization(\"Magmadar\")\n\nL:SetGeneralLocalization({\n\tname = \"Magmadar\"\n})\n\n----------------\n--  Gehennas  --\n----------------\nL = DBM:GetModLocalization(\"Gehennas\")\n\nL:SetGeneralLocalization({\n\tname = \"Gehennas\"\n})\n\n------------\n--  Garr  --\n------------\nL = DBM:GetModLocalization(\"Garr-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Garr\"\n})\n\n--------------\n--  Geddon  --\n--------------\nL = DBM:GetModLocalization(\"Geddon\")\n\nL:SetGeneralLocalization({\n\tname = \"Baron Geddon\"\n})\n\n----------------\n--  Shazzrah  --\n----------------\nL = DBM:GetModLocalization(\"Shazzrah\")\n\nL:SetGeneralLocalization({\n\tname = \"Shazzrah\"\n})\n\n----------------\n--  Sulfuron  --\n----------------\nL = DBM:GetModLocalization(\"Sulfuron\")\n\nL:SetGeneralLocalization({\n\tname = \"Messager de Sulfuron\"\n})\n\n----------------\n--  Golemagg  --\n----------------\nL = DBM:GetModLocalization(\"Golemagg\")\n\nL:SetGeneralLocalization({\n\tname = \"Golemagg l'Incinérateur\"\n})\n\n-----------------\n--  Majordomo  --\n-----------------\nL = DBM:GetModLocalization(\"Majordomo\")\n\nL:SetGeneralLocalization({\n\tname = \"Chambellan Executus\"\n})\n\nL:SetTimerLocalization({\n\ttimerShieldCD\t\t= \"Bouclier suivant\"\n})\n\nL:SetOptionLocalization({\n\ttimerShieldCD\t\t= \"Afficher le timer pour le prochain bouclier de dégâts / Renvoi de la magie\"\n})\n\n----------------\n--  Ragnaros  --\n----------------\nL = DBM:GetModLocalization(\"Ragnaros-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Ragnaros\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"Submergé\",\n\tWarnEmerge\t\t\t= \"Émergé\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"Submergé\",\n\tTimerEmerge\t\t\t= \"Émergé\",\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"Afficher un avertissement pour submergé\",\n\tTimerSubmerge\t\t= \"Afficher le timer pour submergé\",\n\tWarnEmerge\t\t\t= \"Afficher un avertissement pour émergé\",\n\tTimerEmerge\t\t\t= \"Afficher le timer pour émergé\",\n})\n\nL:SetMiscLocalization({\n\tSubmerge\t= \"VENEZ, MES SERVITEURS ! DÉFENDEZ VOTRE MAÎTRE !\",\n\tSubmerge2\t= \"VOUS NE POUVEZ VAINCRE LA FLAMME VIVANTE ! VENEZ, SERVITEURS DU FEU ! VENEZ, CRÉATURES DE LA HAINE ! VOTRE MAÎTRE VOUS APPELLE !\",\n\tPull\t\t= \"Impudents imbéciles ! Vous vous êtes précipités vers votre propre mort ! Voyez, à présent, le Maître remue !\"\n})\n\n-----------------\n--  MC: Trash  --\n-----------------\nL = DBM:GetModLocalization(\"MCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"CM: Ennemis communs\"\n})\n"
  },
  {
    "path": "DBM-MC/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n----------------\n--  Lucifron  --\n----------------\nL = DBM:GetModLocalization(\"Lucifron\")\n\nL:SetGeneralLocalization({\n\tname = \"루시프론\"\n})\n\n----------------\n--  Magmadar  --\n----------------\nL = DBM:GetModLocalization(\"Magmadar\")\n\nL:SetGeneralLocalization({\n\tname = \"마그마다르\"\n})\n\n----------------\n--  Gehennas  --\n----------------\nL = DBM:GetModLocalization(\"Gehennas\")\n\nL:SetGeneralLocalization({\n\tname = \"게헨나스\"\n})\n\n------------\n--  Garr  --\n------------\nL = DBM:GetModLocalization(\"Garr-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"가르\"\n})\n\n--------------\n--  Geddon  --\n--------------\nL = DBM:GetModLocalization(\"Geddon\")\n\nL:SetGeneralLocalization({\n\tname = \"남작 게돈\"\n})\n\n----------------\n--  Shazzrah  --\n----------------\nL = DBM:GetModLocalization(\"Shazzrah\")\n\nL:SetGeneralLocalization({\n\tname = \"샤즈라\"\n})\n\n----------------\n--  Sulfuron  --\n----------------\nL = DBM:GetModLocalization(\"Sulfuron\")\n\nL:SetGeneralLocalization({\n\tname = \"설퍼론 사자\"\n})\n\n----------------\n--  Golemagg  --\n----------------\nL = DBM:GetModLocalization(\"Golemagg\")\n\nL:SetGeneralLocalization({\n\tname = \"초열의 골레마그\"\n})\n\n-----------------\n--  Majordomo  --\n-----------------\nL = DBM:GetModLocalization(\"Majordomo\")\n\nL:SetGeneralLocalization({\n\tname = \"청지기 이그젝큐투스\"\n})\n\nL:SetTimerLocalization({\n\ttimerShieldCD\t\t= \"다음 보호막\"\n})\n\nL:SetOptionLocalization({\n\ttimerShieldCD\t\t= \"다음 피해/반사 보호막 타이머 바 보기\"\n})\n\n----------------\n--  Ragnaros  --\n----------------\nL = DBM:GetModLocalization(\"Ragnaros-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"라그나로스\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"잠수\",\n\tWarnEmerge\t\t\t= \"등장\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"잠수\",\n\tTimerEmerge\t\t\t= \"등장\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"잠수 경고 보기\",\n\tTimerSubmerge\t\t= \"잠수 타이머 바 보기\",\n\tWarnEmerge\t\t\t= \"등장 경고 보기\",\n\tTimerEmerge\t\t\t= \"등장 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tSubmerge\t= \"나의 종들아! 어서 나와 주인을 돕거라!\",\n\tSubmerge2\t= \"누구도 살아있는 불꽃을 꺾을 수는 없다! 나타나라! 불의 신하들이여! 나오너라! 증오의 피조물들이여! 네 주인이 부르노라!\",\n\tPull\t\t= \"건방진 젖먹이! 죽고 싶어 안달이구나! 자, 보아라. 주인님께서 일어나신다!\"\n})\n\n-----------------\n--  MC: Trash  --\n-----------------\nL = DBM:GetModLocalization(\"MCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"화심: 일반몹\"\n})\n"
  },
  {
    "path": "DBM-MC/localization.mx.lua",
    "content": "if GetLocale() ~= \"esMX\" then return end\nlocal L\n\n----------------\n--  Lucifron  --\n----------------\nL = DBM:GetModLocalization(\"Lucifron\")\n\nL:SetGeneralLocalization({\n\tname = \"Lucifron\"\n})\n\n----------------\n--  Magmadar  --\n----------------\nL = DBM:GetModLocalization(\"Magmadar\")\n\nL:SetGeneralLocalization({\n\tname = \"Magmadar\"\n})\n\n----------------\n--  Gehennas  --\n----------------\nL = DBM:GetModLocalization(\"Gehennas\")\n\nL:SetGeneralLocalization({\n\tname = \"Gehennas\"\n})\n\n------------\n--  Garr  --\n------------\nL = DBM:GetModLocalization(\"Garr-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Garr\"\n})\n\n--------------\n--  Geddon  --\n--------------\nL = DBM:GetModLocalization(\"Geddon\")\n\nL:SetGeneralLocalization({\n\tname = \"Barón Geddon\"\n})\n\n----------------\n--  Shazzrah  --\n----------------\nL = DBM:GetModLocalization(\"Shazzrah\")\n\nL:SetGeneralLocalization({\n\tname = \"Shazzrah\"\n})\n\n----------------\n--  Sulfuron  --\n----------------\nL = DBM:GetModLocalization(\"Sulfuron\")\n\nL:SetGeneralLocalization({\n\tname = \"Sulfuron Presagista\"\n})\n\n----------------\n--  Golemagg  --\n----------------\nL = DBM:GetModLocalization(\"Golemagg\")\n\nL:SetGeneralLocalization({\n\tname = \"Golemagg el Incinerador\"\n})\n\n-----------------\n--  Majordomo  --\n-----------------\nL = DBM:GetModLocalization(\"Majordomo\")\n\nL:SetGeneralLocalization({\n\tname = \"Mayordomo Executus\"\n})\n\nL:SetTimerLocalization({\n\ttimerShieldCD\t\t= \"Próximo Escudo\"\n})\n\nL:SetOptionLocalization({\n\ttimerShieldCD\t\t= \"Mostrar temporizador para el próximo Escudo de daño/reflejo\"\n})\n\n----------------\n--  Ragnaros  --\n----------------\nL = DBM:GetModLocalization(\"Ragnaros-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Ragnaros\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"Ragnaros se sumerge\",\n\tWarnEmerge\t\t\t= \"Ragnaros ha regresado\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"Sumersión\",\n\tTimerEmerge\t\t\t= \"Emersión\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"Mostrar aviso cuando Ragnaros se sumerja\",\n\tTimerSubmerge\t\t= \"Mostrar temporizador para cuando Ragnaros se sumerja\",\n\tWarnEmerge\t\t\t= \"Mostrar aviso cuando Ragnaros regrese a la superficie\",\n\tTimerEmerge\t\t\t= \"Mostrar temporizador para cuando Ragnaros regrese a la superficie\"\n})\n\nL:SetMiscLocalization({\n\tSubmerge\t= \"¡AVANCEN, MIS SIRVIENTES! ¡DEFIENDAN A SU MAESTRO!\",\n\tSubmerge2\t= \"¡NO PUEDEN VENCER A LA LLAMA VIVIENTE! ¡VENGAN, ESCLAVOS DEL FUEGO! ¡AVANCEN, CRIATURAS DEL ODIO! ¡SU MAESTRO LOS LLAMA!\",\n\tPull\t\t= \"¡Crías imprudentes! ¡Se han precipitado hasta su propia muerte! ¡Ahora miren, el maestro se agita!\" -- on Warmane has |n at the end. Left as is since string find will still work.\n})\n\n-----------------\n--  MC: Trash  --\n-----------------\nL = DBM:GetModLocalization(\"MCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"NM: Bichos\"\n})\n"
  },
  {
    "path": "DBM-MC/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n----------------\n--  Lucifron  --\n----------------\nL = DBM:GetModLocalization(\"Lucifron\")\n\nL:SetGeneralLocalization({\n\tname = \"Люцифрон\"\n})\n\n----------------\n--  Magmadar  --\n----------------\nL = DBM:GetModLocalization(\"Magmadar\")\n\nL:SetGeneralLocalization({\n\tname = \"Магмадар\"\n})\n\n----------------\n--  Gehennas  --\n----------------\nL = DBM:GetModLocalization(\"Gehennas\")\n\nL:SetGeneralLocalization({\n\tname = \"Гееннас\"\n})\n\n------------\n--  Garr  --\n------------\nL = DBM:GetModLocalization(\"Garr-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Гарр (Classic)\"\n})\n\n--------------\n--  Geddon  --\n--------------\nL = DBM:GetModLocalization(\"Geddon\")\n\nL:SetGeneralLocalization({\n\tname = \"Барон Геддон\"\n})\n\n----------------\n--  Shazzrah  --\n----------------\nL = DBM:GetModLocalization(\"Shazzrah\")\n\nL:SetGeneralLocalization({\n\tname = \"Шаззрах\"\n})\n\n----------------\n--  Sulfuron  --\n----------------\nL = DBM:GetModLocalization(\"Sulfuron\")\n\nL:SetGeneralLocalization({\n\tname = \"Предвестник Сульфурон\"\n})\n\n----------------\n--  Golemagg  --\n----------------\nL = DBM:GetModLocalization(\"Golemagg\")\n\nL:SetGeneralLocalization({\n\tname = \"Големагг Испепелитель\"\n})\n\n-----------------\n--  Majordomo  --\n-----------------\nL = DBM:GetModLocalization(\"Majordomo\")\n\nL:SetGeneralLocalization({\n\tname = \"Мажордом Экзекутус\"\n})\n\nL:SetTimerLocalization({\n\ttimerShieldCD\t\t= \"Следующий Щит\"\n})\n\nL:SetOptionLocalization({\n\ttimerShieldCD\t\t= \"Показывать таймер для следующего Щита (Damage/Reflect)\"\n})\n\n----------------\n--  Ragnaros  --\n----------------\nL = DBM:GetModLocalization(\"Ragnaros-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"Рагнарос (Classic)\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"Погружение\",\n\tWarnSubmergeSoon\t= \"Скоро погружение\",\n\tWarnEmerge\t\t\t= \"Появление\",\n\tWarnEmergeSoon\t\t= \"Скоро появление\"\n})\n\nL:SetTimerLocalization({\n\tTimerCombatStart\t= \"Начало боя\",\n\tTimerSubmerge\t\t= \"Погружение\",\n\tTimerEmerge\t\t\t= \"Появление\"\n})\n\nL:SetOptionLocalization({\n\tTimerCombatStart\t= \"Показывать время до начала боя\",\n\tWarnSubmerge\t\t= \"Показывать предупреждение о погружении\",\n\tWarnSubmergeSoon\t= \"Показывать предварительное предупреждение о погружении\",\n\tTimerSubmerge\t\t= \"Показывать время до погружения\",\n\tWarnEmerge\t\t\t= \"Показывать предупреждение о появлении\",\n\tWarnEmergeSoon\t\t= \"Показывать предварительное предупреждение о появлении\",\n\tTimerEmerge\t\t\t= \"Показывать время до появления\"\n})\n\nL:SetMiscLocalization({\n\tSubmerge\t= \"ПРИДИТЕ, МОИ СЛУГИ! ЗАЩИТИТЕ СВОЕГО ХОЗЯИНА!\",\n\tSubmerge2\t= \"ТЫ НЕ МОЖЕШЬ ПОБЕДИТЬ ЖИВОЙ ЖАР! ПРИДИТЕ, СЛУГИ ОГНЯ! ПРИДИТЕ, ТВОРЕНИЯ НЕНАВИСТИ! ВАШ ГОСПОДИН ПРИЗЫВАЕТ ВАС!\",\n\tPull\t\t= \"Нахальные щенки! Вы сами обрекли себя на смерть! Узрите же Повелителя в гневе!\"\n})\n\n-----------------\n--  MC: Trash  --\n-----------------\nL = DBM:GetModLocalization(\"MCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"ОН: Треш\"\n})\n"
  },
  {
    "path": "DBM-MC/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n----------------\n--  Lucifron  --\n----------------\nL = DBM:GetModLocalization(\"Lucifron\")\n\nL:SetGeneralLocalization({\n\tname = \"魯西弗隆\"\n})\n\n----------------\n--  Magmadar  --\n----------------\nL = DBM:GetModLocalization(\"Magmadar\")\n\nL:SetGeneralLocalization({\n\tname = \"瑪格曼達\"\n})\n\n----------------\n--  Gehennas  --\n----------------\nL = DBM:GetModLocalization(\"Gehennas\")\n\nL:SetGeneralLocalization({\n\tname = \"基赫納斯\"\n})\n\n------------\n--  Garr  --\n------------\nL = DBM:GetModLocalization(\"Garr-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"加爾\"\n})\n\n--------------\n--  Geddon  --\n--------------\nL = DBM:GetModLocalization(\"Geddon\")\n\nL:SetGeneralLocalization({\n\tname = \"迦頓男爵\"\n})\n\n----------------\n--  Shazzrah  --\n----------------\nL = DBM:GetModLocalization(\"Shazzrah\")\n\nL:SetGeneralLocalization({\n\tname = \"沙斯拉爾\"\n})\n\n----------------\n--  Sulfuron  --\n----------------\nL = DBM:GetModLocalization(\"Sulfuron\")\n\nL:SetGeneralLocalization({\n\tname = \"薩弗隆先驅者\"\n})\n\n----------------\n--  Golemagg  --\n----------------\nL = DBM:GetModLocalization(\"Golemagg\")\n\nL:SetGeneralLocalization({\n\tname = \"焚化者古雷曼格\"\n})\n\n-----------------\n--  Majordomo  --\n-----------------\nL = DBM:GetModLocalization(\"Majordomo\")\n\nL:SetGeneralLocalization({\n\tname = \"管理者埃克索圖斯\"\n})\n\nL:SetTimerLocalization({\n\ttimerShieldCD\t\t= \"下一個護盾\"\n})\n\nL:SetOptionLocalization({\n\ttimerShieldCD\t\t= \"為下一個護盾顯示計時器\"\n})\n\n----------------\n--  Ragnaros  --\n----------------\nL = DBM:GetModLocalization(\"Ragnaros-Classic\")\n\nL:SetGeneralLocalization({\n\tname = \"拉格納羅斯\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"隱沒\",\n\tWarnEmerge\t\t\t= \"現身\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"隱沒\",\n\tTimerEmerge\t\t\t= \"現身\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"為隱沒顯示警告\",\n\tTimerSubmerge\t\t= \"為隱沒顯示計時器\",\n\tWarnEmerge\t\t\t= \"為現身顯示警告\",\n\tTimerEmerge\t\t\t= \"為現身顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tSubmerge\t= \"出現吧，我的奴僕! 保衛你們的主人!\",\n\tSubmerge2\t= \"你們不是烈焰之王的敵人!出現吧，火焰的奴僕!你們的主人在召喚你們!\",\n\tPull\t\t= \"你這個莽撞的傢伙!你簡直是自尋死路!看吧，你驚動了主人!\"\n})\n\n-----------------\n--  MC: Trash  --\n-----------------\nL = DBM:GetModLocalization(\"MCTrash\")\n\nL:SetGeneralLocalization({\n\tname = \"MC: 全程計時\"\n})\n"
  },
  {
    "path": "DBM-Magtheridon/DBM-Magtheridon.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Magtheridon|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0玛瑟里顿|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Магтеридон|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMMagtheridon_AllSavedVars\n## SavedVariablesPerCharacter: DBMMagtheridon_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: BC\n## X-DBM-Mod-Has-Single-Format: 1\n## X-DBM-StatTypes: normal\n## X-DBM-Mod-Name: Magtheridon\n## X-DBM-Mod-Name-zhCN: 玛瑟里顿\n## X-DBM-Mod-Name-ruRU: Магтеридон\n## X-DBM-Mod-Name-frFR: Repaire de Magtheridon\n## X-DBM-Mod-MapID: 780\n## X-DBM-Mod-Sort: 307\n## X-DBM-Mod-LoadZone: Magtheridon's Lair\n## X-DBM-Mod-LoadZone-zhCN: 玛瑟里顿的巢穴\n## X-DBM-Mod-LoadZone-deDE: Magtheridons Kammer\n## X-DBM-Mod-LoadZone-esES: Guarida de Magtheridon\n## X-DBM-Mod-LoadZone-esMX: Guarida de Magtheridon\n## X-DBM-Mod-LoadZone-frFR: Le repaire de Magtheridon\n## X-DBM-Mod-LoadZone-koKR: 마그테리돈의 둥지\n## X-DBM-Mod-LoadZone-ruRU: Логово Магтеридона\n## X-DBM-Mod-LoadZone-zhTW: 瑪瑟里頓的巢穴\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.es.lua\nlocalization.tw.lua\nlocalization.cn.lua\nlocalization.ru.lua\nlocalization.kr.lua\nlocalization.fr.lua\n\nMagtheridon.lua"
  },
  {
    "path": "DBM-Magtheridon/Magtheridon.lua",
    "content": "local mod\t= DBM:NewMod(\"Magtheridon\", \"DBM-Magtheridon\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17257)\nmod:SetEncounterID(651)\n\nmod:SetModelID(18527)\nmod:RegisterCombat(\"emote\", L.DBM_MAG_EMOTE_PULL)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 30528 30616\",\n\t\"SPELL_CAST_SUCCESS 30511\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1\"\n)\n\n--Get custom voice pack sound for cubes\nlocal warnHeal\t\t\t\t= mod:NewSpellAnnounce(30528, 3)\nlocal warnInfernal\t\t\t= mod:NewSpellAnnounce(30511, 2)\nlocal warnPhase2\t\t\t= mod:NewPhaseAnnounce(2)\nlocal warnConflagration\t\t= mod:NewSpellAnnounce(30757, 2)\nlocal warnQuake\t\t\t\t= mod:NewSpellAnnounce(30657, 2, \"Interface\\\\Icons\\\\Spell_Nature_Earthquake\")\nlocal warnPhase3\t\t\t= mod:NewPhaseAnnounce(3)\n\nlocal specWarnBlastNova\t\t= mod:NewSpecialWarningInterrupt(30616, nil, nil, nil, 3, 2)\nlocal specWarnHeal\t\t\t= mod:NewSpecialWarningInterrupt(30528, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerHeal\t\t\t\t= mod:NewCastTimer(2, 30528, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerPhase2\t\t\t= mod:NewTimer(120, \"timerP2\", \"Interface\\\\Icons\\\\INV_Weapon_Halberd16\", nil, nil, 6)\nlocal timerConflagration\t= mod:NewCDTimer(30, 30757, nil, nil, nil, 2, nil, nil, true)\nlocal timerQuake\t\t\t= mod:NewCDTimer(50, 30657, nil, nil, nil, 2, \"Interface\\\\Icons\\\\Spell_Nature_Earthquake\", nil, true)\nlocal timerBlastNovaCD\t\t= mod:NewCDCountTimer(60, 30616, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerDebris\t\t\t= mod:NewNextTimer(15, 36449, nil, nil, nil, 2, nil, DBM_COMMON_L.HEALER_ICON..DBM_COMMON_L.TANK_ICON)--Only happens once per fight, after the phase 3 yell.\n\nmod.vb.blastNovaCounter = 0\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tself.vb.blastNovaCounter = 0\n\ttimerPhase2:Start(-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 30528 then\n\t\tif self:CheckInterruptFilter(args.sourceGUID) then\n\t\t\tspecWarnHeal:Show(args.sourceName)\n\t\t\tspecWarnHeal:Play(\"kickcast\")\n\t\t\ttimerHeal:Start()\n\t\telse\n\t\t\twarnHeal:Show()\n\t\tend\n\telseif args.spellId == 30616 then\n\t\tself.vb.blastNovaCounter = self.vb.blastNovaCounter + 1\n\t\tspecWarnBlastNova:Show(L.name)\n\t\tspecWarnBlastNova:Play(\"kickcast\")\n\t\ttimerBlastNovaCD:Start(nil, self.vb.blastNovaCounter + 1)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 30511 and self:AntiSpam(3, 1) then\n\t\twarnInfernal:Show()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif (msg == L.DBM_MAG_YELL_PHASE2 or msg:find(L.DBM_MAG_YELL_PHASE2) or msg == L.DBM_MAG_ALTERNATIVE_YELL_PHASE2 or msg:find(L.DBM_MAG_ALTERNATIVE_YELL_PHASE2)) and self:GetStage(2, 1) then-- Alternative yell not in line with Blizzard: https://www.warmane.com/bugtracker/report/124104\n\t\tself:SetStage(2)\n\t\twarnPhase2:Show()\n\t\ttimerBlastNovaCD:Start(nil, self.vb.blastNovaCounter + 1)\n\t\ttimerPhase2:Cancel()\n\t\ttimerConflagration:Start(10) -- First Conflagration cd at least 10-25 (15 sec randomness)\n\t\ttimerQuake:Start(40) -- First Quake in 40 seconds\n\telseif msg == L.DBM_MAG_YELL_PHASE3 or msg:find(L.DBM_MAG_YELL_PHASE3) then\n\t\tself:SetStage(3)\n\t\twarnPhase3:Show()\n\t\t--If time less than 20, extend existing timer to 20, else do nothing\n\t\t--[[if timerBlastNovaCD:GetRemaining(self.vb.blastNovaCounter + 1) < 20 then\n\t\t\tlocal elapsed, total = timerBlastNovaCD:GetTime(self.vb.blastNovaCounter + 1)\n\t\t\tlocal extend = 20 - (total-elapsed)\n\t\t\tDBM:Debug(\"timerBlastNovaCD extended by: \"..extend, 2)\n\t\t\ttimerBlastNovaCD:Stop()\n\t\t\ttimerBlastNovaCD:Update(elapsed, total+extend, self.vb.blastNovaCounter + 1)\n\t\tend]]\n\t\t-- +18 to the timers\n\t\ttimerConflagration:AddTime(18)\n\t\ttimerQuake:AddTime(18)\n\t\ttimerBlastNovaCD:AddTime(18, self.vb.blastNovaCounter + 1)\n\t\ttimerDebris:Start()\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(30657) then\n\t\ttimerQuake:Start()\n\t\twarnQuake:Show()\n\t-- \"<99.72 20:36:19> [UNIT_SPELLCAST_SUCCEEDED] Magtheridon(31.4%-0.0%){Target:Player} -Blaze- [[boss1:Blaze::0:]]\", -- [1219]\n\t-- \"<100.03 20:36:19> [CLEU] SPELL_AURA_APPLIED#0x0F000000000A3F3A#Player#0x0F000000000A3F3A#Player#30757#Conflagration#DEBUFF#nil#\", -- [1220]\n\telseif spellName == GetSpellInfo(40637) then\n\t\ttimerConflagration:Start()\n\t\twarnConflagration:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Magtheridon/localization.cn.lua",
    "content": "if GetLocale() ~= \"zhCN\" then return end\n\nlocal L\n\n-- Magtheridon\nL = DBM:GetModLocalization(\"Magtheridon\")\n\nL:SetGeneralLocalization({\n\tname = \"玛瑟里顿\"\n})\n\nL:SetTimerLocalization({\n\ttimerP2\t= \"2 阶段\"\n})\n\nL:SetOptionLocalization({\n\ttimerP2\t= \"显示2阶段计时器\"\n})\n\nL:SetMiscLocalization({\n\tDBM_MAG_EMOTE_PULL\t\t= \"%s的禁锢开始变弱！\",\n\tDBM_MAG_YELL_PHASE2\t\t= \"我……自由了！\",\n\tDBM_MAG_YELL_PHASE3\t\t= \"我是不会轻易倒下的！让这座牢狱的墙壁颤抖并崩塌吧！\"\n})\n"
  },
  {
    "path": "DBM-Magtheridon/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n-- Magtheridon\nL = DBM:GetModLocalization(\"Magtheridon\")\n\nL:SetGeneralLocalization({\n\tname = \"Magtheridon\"\n})\n\nL:SetTimerLocalization({\n\ttimerP2\t= \"Phase 2\"\n})\n\nL:SetOptionLocalization({\n\ttimerP2\t= \"Zeige Zeit bis Phase 2 beginnt\"\n})\n\nL:SetMiscLocalization({\n\tDBM_MAG_EMOTE_PULL\t\t= \"Die Fesseln von %s werden schwächer!\",\n\tDBM_MAG_YELL_PHASE2\t\t= \"Ich... bin... frei!\",\n\tDBM_MAG_YELL_PHASE3\t\t= \"Ich lasse mich nicht so leicht bezwingen! Lasst die Mauern dieses Kerkers erzittern... und einstürzen!\"\n})\n"
  },
  {
    "path": "DBM-Magtheridon/localization.en.lua",
    "content": "local L\n\n-- Magtheridon\nL = DBM:GetModLocalization(\"Magtheridon\")\n\nL:SetGeneralLocalization({\n\tname = \"Magtheridon\"\n})\n\nL:SetTimerLocalization({\n\ttimerP2\t= \"Phase 2\"\n})\n\nL:SetOptionLocalization({\n\ttimerP2\t= \"Show timer for start of phase 2\"\n})\n\nL:SetMiscLocalization({\n\tDBM_MAG_EMOTE_PULL\t\t= \"%s's bonds begin to weaken!\",\n\tDBM_MAG_YELL_PHASE2\t\t= \"I... am... unleashed!\",\n\tDBM_MAG_ALTERNATIVE_YELL_PHASE2 = \"Thank you for releasing me. Now... die!\", -- https://www.warmane.com/bugtracker/report/124104\n\tDBM_MAG_YELL_PHASE3\t\t= \"I will not be taken so easily! Let the walls of this prison tremble... and fall!\"\n})\n"
  },
  {
    "path": "DBM-Magtheridon/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\nlocal L\n\n-- Magtheridon\nL = DBM:GetModLocalization(\"Magtheridon\")\n\nL:SetGeneralLocalization({\n\tname = \"Magtheridon\"\n})\n\nL:SetTimerLocalization({\n\ttimerP2\t= \"Fase 2\"\n})\n\nL:SetOptionLocalization({\n\ttimerP2\t= \"Mostrar temporizador para el cambio a Fase 2\"\n})\n\nL:SetMiscLocalization({\n\tDBM_MAG_EMOTE_PULL\t\t= \"¡Las cuerdas de %s empiezan a aflojarse!\",\n\tDBM_MAG_YELL_PHASE2\t\t= \"¡He... sido... liberado!\",\n\tDBM_MAG_YELL_PHASE3\t\t= \"¡No me dejaré encerrar tan fácilmente! ¡Que tiemblen las paredes de esta prisión... y se derrumben!\"\n})\n"
  },
  {
    "path": "DBM-Magtheridon/localization.fr.lua",
    "content": "local L\n\n-- Magtheridon\nL = DBM:GetModLocalization(\"Magtheridon\")\n\nL:SetGeneralLocalization({\n\tname = \"Magtheridon\"\n})\n\nL:SetOptionLocalization({\n\ttimerP2\t= \"Montre le timer pour le début de la phase 2\"\n})\n\nL:SetMiscLocalization({\n\tDBM_MAG_EMOTE_PULL\t\t= \"Les liens de %s commencent à se relâcher !\",\n\tDBM_MAG_YELL_PHASE2\t\t= \"Me... voilà... déchaîné !\",\n\tDBM_MAG_ALTERNATIVE_YELL_PHASE2 = \"Thank you for releasing me. Now... die!\", -- doesn't seem to exist in way of elendil , can't find it in any database too.\n\tDBM_MAG_YELL_PHASE3\t\t= \"Je ne me laisserai pas prendre si facilement ! Que les murs de cette prison tremblent... Et s'effondrent !\"\n})\n"
  },
  {
    "path": "DBM-Magtheridon/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n-- Magtheridon\nL = DBM:GetModLocalization(\"Magtheridon\")\n\nL:SetGeneralLocalization({\n\tname = \"마그테리돈\"\n})\n\nL:SetTimerLocalization({\n\ttimerP2\t= \"2단계\"\n})\n\nL:SetOptionLocalization({\n\ttimerP2\t= \"2단계 시작 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tDBM_MAG_EMOTE_PULL\t\t= \"%s의 속박이 약해지기 시작합니다!\",\n\tDBM_MAG_YELL_PHASE2\t\t= \"내가... 풀려났도다!\",\n\tDBM_MAG_YELL_PHASE3\t\t= \"그렇게 쉽게 당할 내가 아니다! 이 감옥의 벽이 흔들리고... 무너지리라!\"\n})\n"
  },
  {
    "path": "DBM-Magtheridon/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n-- Magtheridon\nL = DBM:GetModLocalization(\"Magtheridon\")\n\nL:SetGeneralLocalization({\n\tname = \"Магтеридон\"\n})\n\nL:SetTimerLocalization({\n\ttimerP2\t= \"Фаза 2\"\n})\n\nL:SetOptionLocalization({\n\ttimerP2\t= \"Показывать таймер начала Фазы 2\"\n})\n\nL:SetMiscLocalization({\n\tDBM_MAG_EMOTE_PULL\t\t= \"Сдерживающая сила %sа начинает ослабевать!\",\n\tDBM_MAG_YELL_PHASE2\t\t= \"Я... свободен!\",\n\tDBM_MAG_YELL_PHASE3\t\t= \"Пусть стены темницы содрогнутся... и падут!\"\n})\n"
  },
  {
    "path": "DBM-Magtheridon/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\n\nlocal L\n\n-- Magtheridon\nL = DBM:GetModLocalization(\"Magtheridon\")\n\nL:SetGeneralLocalization({\n\tname = \"瑪瑟里頓\"\n})\n\nL:SetTimerLocalization({\n\ttimerP2\t= \"第2階段\"\n})\n\nL:SetOptionLocalization({\n\ttimerP2\t= \"為第2階段開始顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tDBM_MAG_EMOTE_PULL\t\t= \"%s的束縛開始變弱!\",\n\tDBM_MAG_YELL_PHASE2\t\t= \"我...被...釋放了!\",\n\tDBM_MAG_YELL_PHASE3\t\t= \"我不會這麼輕易就被擊敗!讓這座監獄的牆壁震顫...然後崩塌!\"\n})\n"
  },
  {
    "path": "DBM-Naxx/ArachnidQuarter/Anub'Rekhan.lua",
    "content": "local mod\t= DBM:NewMod(\"Anub'Rekhan\", \"DBM-Naxx\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15956)\nmod:SetEncounterID(1107)\n\nmod:RegisterCombat(\"combat_yell\", L.Pull1, L.Pull2)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 28785 54021\",\n\t\"SPELL_CAST_SUCCESS 28783 56090\",\n\t\"SPELL_AURA_REMOVED 28785 54021\"\n)\n\nlocal warningLocustSoon\t\t= mod:NewSoonAnnounce(28785, 2)\nlocal warningLocustFaded\t= mod:NewFadesAnnounce(28785, 1)\nlocal warnImpale\t\t\t= mod:NewTargetNoFilterAnnounce(28783, 3, nil, false)\n\nlocal specialWarningLocust\t= mod:NewSpecialWarningSpell(28785, nil, nil, nil, 2, 2)\nlocal yellImpale\t\t\t= mod:NewYell(28783, nil, false)\n\nlocal timerLocustIn\t\t\t= mod:NewCDTimer(80, 28785, nil, nil, nil, 6)\nlocal timerLocustFade\t\t= mod:NewBuffActiveTimer(23, 28785, nil, nil, nil, 6)\nlocal timerImpale\t\t\t= mod:NewCDTimer(13, 56090, nil, nil, nil, 3) -- REVIEW! ~7s variance [13.0-19.8]? (25m Lordaeron 2022/10/16) -- 13.7, 13.6, 19.8, 13.0\n\nmod:AddBoolOption(\"ArachnophobiaTimer\", true, \"timer\", nil, nil, nil, \"at1859\")--Sad caveat that 10 and 25 man have own achievements and we have to show only 1 in GUI\n\nfunction mod:OnCombatStart(delay)\n\tif self:IsDifficulty(\"normal25\") then\n\t\ttimerLocustIn:Start(100 - delay)\n\t\twarningLocustSoon:Schedule(90 - delay)\n\telse\n\t\ttimerLocustIn:Start(91 - delay)\n\t\twarningLocustSoon:Schedule(76 - delay)\n\tend\n\ttimerImpale:Start(12.7-delay) -- REVIEW! variance? (25m Lordaeron 2022/10/16) - pull:12.7\nend\n\nfunction mod:OnCombatEnd(wipe)\n\tif not wipe and self.Options.ArachnophobiaTimer then\n\t\tDBT:CreateBar(1200, L.ArachnophobiaTimer, \"Interface\\\\Icons\\\\INV_Misc_MonsterSpiderCarapace_01\")\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(28785, 54021) then  -- Locust Swarm\n\t\tspecialWarningLocust:Show()\n\t\tspecialWarningLocust:Play(\"aesoon\")\n\t\ttimerLocustIn:Stop()\n\t\tif self:IsDifficulty(\"normal25\") then\n\t\t\ttimerLocustFade:Start(23)\n\t\telse\n\t\t\ttimerLocustFade:Start(19)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(28783, 56090) then  -- Impale. REVIEW! 28783 needed?\n\t\ttimerImpale:Start()\n\t\twarnImpale:Show(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tyellImpale:Yell()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(28785, 54021)\n\tand args.auraType == \"BUFF\" then\n\t\twarningLocustFaded:Show()\n\t\ttimerLocustIn:Start()\n\t\twarningLocustSoon:Schedule(62)\n\tend\nend\n"
  },
  {
    "path": "DBM-Naxx/ArachnidQuarter/Faerlina.lua",
    "content": "local mod\t= DBM:NewMod(\"Faerlina\", \"DBM-Naxx\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15953)\nmod:SetEncounterID(1110)\n\nmod:RegisterCombat(\"combat_yell\", L.Pull)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 28798 54100 28732 54097 28794 54099\",\n\t\"SPELL_CAST_SUCCESS 28796 54098\",\n\t\"UNIT_DIED\"\n)\n\nlocal warnEmbraceActive\t\t= mod:NewSpellAnnounce(28732, 1)\nlocal warnEmbraceExpire\t\t= mod:NewAnnounce(\"WarningEmbraceExpire\", 2, 28732, nil, nil, nil, 28732)\nlocal warnEmbraceExpired\t= mod:NewFadesAnnounce(28732, 3)\nlocal warnEnrageSoon\t\t= mod:NewSoonAnnounce(28131, 3)\nlocal warnEnrageNow\t\t\t= mod:NewSpellAnnounce(28131, 4)\n\nlocal specWarnEnrage\t\t= mod:NewSpecialWarningDefensive(28131, nil, nil, nil, 3, 2)\nlocal specWarnGTFO\t\t\t= mod:NewSpecialWarningGTFO(28794, nil, nil, nil, 1, 8)\n\nlocal timerEmbrace\t\t\t= mod:NewBuffActiveTimer(30, 28732, nil, nil, nil, 6)\nlocal timerEnrage\t\t\t= mod:NewCDTimer(60, 28131, nil, nil, nil, 6)\nlocal timerPoisonVolleyCD\t= mod:NewCDTimer(8.2, 54098, nil, nil, nil, 5) -- REVIEW! ~1s variance? (25man Lordaeron 2022/10/16) - 9.1, 9.3, 9.1, 8.5, 8.4, 8.5, 8.2, 8.8\n\nmod.vb.enraged = false\n\nfunction mod:OnCombatStart(delay)\n\ttimerEnrage:Start(-delay)\n\twarnEnrageSoon:Schedule(55 - delay)\n\ttimerPoisonVolleyCD:Start(12.6-delay) -- REVIEW! variance? (25man Lordaeron 2022/10/16) - 12.6\n\tself.vb.enraged = false\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(28798, 54100) then\t\t\t-- Frenzy\n\t\tself.vb.enraged = true\n\t\tif self:IsTanking(\"player\", \"boss1\", nil, true) then\n\t\t\tspecWarnEnrage:Show()\n\t\t\tspecWarnEnrage:Play(\"defensive\")\n\t\telse\n\t\t\twarnEnrageNow:Show()\n\t\tend\n\telseif args:IsSpellID(28732, 54097)\tand args:GetDestCreatureID() == 15953 and self:AntiSpam(5, 2) then\t-- Widow's Embrace\n\t\twarnEmbraceExpire:Cancel()\n\t\twarnEmbraceExpired:Cancel()\n\t\twarnEnrageSoon:Cancel()\n\t\ttimerEnrage:Stop()\n\t\tif self.vb.enraged then\n\t\t\ttimerEnrage:Start()\n\t\t\twarnEnrageSoon:Schedule(45)\n\t\tend\n\t\ttimerEmbrace:Start()\n\t\twarnEmbraceActive:Show()\n\t\twarnEmbraceExpire:Schedule(25)\n\t\twarnEmbraceExpired:Schedule(30)\n\t\tself.vb.enraged = false\n\telseif args:IsSpellID(28794, 54099) and args:IsPlayer() then\n\t\tspecWarnGTFO:Show(args.spellName)\n\t\tspecWarnGTFO:Play(\"watchfeet\")\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(28796, 54098) then -- Poison Bolt Volley\n\t\ttimerPoisonVolleyCD:Start(10)\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 15953 then\n\t\twarnEnrageSoon:Cancel()\n\t\twarnEmbraceExpire:Cancel()\n\t\twarnEmbraceExpired:Cancel()\n\tend\nend\n"
  },
  {
    "path": "DBM-Naxx/ArachnidQuarter/Maexxna.lua",
    "content": "local mod\t= DBM:NewMod(\"Maexxna\", \"DBM-Naxx\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15952)\nmod:SetEncounterID(1116)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 28622\",\n\t\"SPELL_CAST_SUCCESS 29484 54125\"\n)\n\n--TODO, verify nax40 web wrap timer\nlocal warnWebWrap\t\t= mod:NewTargetNoFilterAnnounce(28622, 2)\nlocal warnWebSpraySoon\t= mod:NewSoonAnnounce(29484, 1)\nlocal warnWebSprayNow\t= mod:NewSpellAnnounce(29484, 3)\nlocal warnSpidersSoon\t= mod:NewAnnounce(\"WarningSpidersSoon\", 2, 17332)\nlocal warnSpidersNow\t= mod:NewAnnounce(\"WarningSpidersNow\", 4, 17332)\n\nlocal specWarnWebWrap\t= mod:NewSpecialWarningSwitch(28622, \"RangedDps\", nil, nil, 1, 2)\nlocal yellWebWrap\t\t= mod:NewYellMe(28622)\n\nlocal timerWebSpray\t\t= mod:NewNextTimer(40, 29484, nil, nil, nil, 2)\nlocal timerWebWrap\t\t= mod:NewNextTimer(39.6, 28622, nil, \"RangedDps|Healer\", nil, 3)-- 39.593-40.885\nlocal timerSpider\t\t= mod:NewTimer(30, \"TimerSpider\", 17332, nil, nil, 1)\n\nlocal function Spiderlings(self)\n\twarnSpidersSoon:Schedule(35)\n\twarnSpidersNow:Schedule(40)\n\ttimerSpider:Start(40)\n\tself:Unschedule(Spiderlings)\n\tself:Schedule(40, Spiderlings, self)\nend\n\nfunction mod:OnCombatStart(delay)\n\twarnWebSpraySoon:Schedule(35 - delay)\n\ttimerWebSpray:Start(40 - delay)\n\ttimerWebWrap:Start(20.1 - delay)--20.095-21.096\n\twarnSpidersSoon:Schedule(25 - delay)\n\twarnSpidersNow:Schedule(30 - delay)\n\ttimerSpider:Start(30 - delay)\n\tself:Schedule(30 - delay, Spiderlings, self)\nend\n\nfunction mod:OnCombatEnd(wipe)\n\tif not wipe then\n\t\tif DBT:GetBar(L.ArachnophobiaTimer) then\n\t\t\tDBT:CancelBar(L.ArachnophobiaTimer)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 28622 then -- Web Wrap\n\t\twarnWebWrap:CombinedShow(0.5, args.destName)\n\t\tif args.destName == UnitName(\"player\") then\n\t\t\tyellWebWrap:Yell()\n\t\telseif not DBM:UnitDebuff(\"player\", args.spellName) and self:AntiSpam(3, 1) then\n\t\t\tspecWarnWebWrap:Show()\n\t\t\tspecWarnWebWrap:Play(\"targetchange\")\n\t\t\ttimerWebWrap:Start()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(29484, 54125) then -- Web Spray\n\t\twarnWebSprayNow:Show()\n\t\twarnWebSpraySoon:Schedule(35)\n\t\ttimerWebSpray:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Naxx/ConstructQuarter/Gluth.lua",
    "content": "local mod\t= DBM:NewMod(\"Gluth\", \"DBM-Naxx\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15932)\nmod:SetEncounterID(1108)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 28371\",\n\t\"SPELL_AURA_REMOVED 28371\",\n\t\"SPELL_DAMAGE 28375 54426\"\n)\n\n--TODO, is it really necessary to use SPELL_DAMAGE here?\n--TODO, verify decimate timer is actually accurate for wrath (it certainly wasn't for naxx 40)\nlocal warnEnrage\t\t= mod:NewTargetNoFilterAnnounce(19451, 3, nil , \"Healer|Tank|RemoveEnrage\", 2)\nlocal warnDecimateSoon\t= mod:NewSoonAnnounce(28374, 2)\nlocal warnDecimateNow\t= mod:NewSpellAnnounce(28374, 3)\n\nlocal specWarnEnrage\t= mod:NewSpecialWarningDispel(19451, \"RemoveEnrage\", nil, nil, 1, 6)\n\nlocal timerEnrage\t\t= mod:NewBuffActiveTimer(8, 19451, nil, nil, nil, 5, nil, DBM_COMMON_L.ENRAGE_ICON)\nlocal timerDecimate\t\t= mod:NewCDTimer(104, 28374, nil, nil, nil, 2)\nlocal enrageTimer\t\t= mod:NewBerserkTimer(420)\n\nfunction mod:OnCombatStart(delay)\n\tenrageTimer:Start(420 - delay)\n\ttimerDecimate:Start(110 - delay) -- 25m Log review from 2022-05-05 - 1 minutes 50 seconds\n\twarnDecimateSoon:Schedule(100 - delay)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 28371 then\n\t\tif self.Options.SpecWarn19451dispel then\n\t\t\tspecWarnEnrage:Show(args.destName)\n\t\t\tspecWarnEnrage:Play(\"enrage\")\n\t\telse\n\t\t\twarnEnrage:Show(args.destName)\n\t\tend\n\t\ttimerEnrage:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 28371 then\n\t\ttimerEnrage:Stop()\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, _, _, _, spellId)\n\tif (spellId == 28375 or spellId == 54426) and self:AntiSpam(20) then\n\t\twarnDecimateNow:Show()\n\t\ttimerDecimate:Start()\n\t\twarnDecimateSoon:Schedule(96)\n\tend\nend\n"
  },
  {
    "path": "DBM-Naxx/ConstructQuarter/Grobbulus.lua",
    "content": "local mod\t= DBM:NewMod(\"Grobbulus\", \"DBM-Naxx\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15931)\nmod:SetEncounterID(1111)\nmod:SetUsedIcons(1, 2, 3, 4)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 28169\",\n\t\"SPELL_AURA_REMOVED 28169\",\n\t\"SPELL_CAST_SUCCESS 28240 28157 54364\"\n)\n\nlocal warnInjection\t\t\t= mod:NewTargetNoFilterAnnounce(28169, 2)\nlocal warnCloud\t\t\t\t= mod:NewSpellAnnounce(28240, 2)\nlocal warnSlimeSprayNow\t\t= mod:NewSpellAnnounce(54364, 2)\nlocal warnSlimeSpraySoon\t= mod:NewSoonAnnounce(54364, 1)\n\nlocal specWarnInjection\t\t= mod:NewSpecialWarningYou(28169, nil, nil, nil, 1, 2)\nlocal yellInjection\t\t\t= mod:NewYellMe(28169, nil, false)\n\nlocal timerInjection\t\t= mod:NewTargetTimer(10, 28169, nil, nil, nil, 3)\nlocal timerCloud\t\t\t= mod:NewNextTimer(15, 28240, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerSlimeSprayCD\t\t= mod:NewCDTimer(32, 54364, nil, nil, nil, 2) -- Transcriptor snippet below\nlocal enrageTimer\t\t\t= mod:NewBerserkTimer(720)\n\nmod:AddSetIconOption(\"SetIconOnInjectionTarget\", 28169, false, false, {1, 2, 3, 4})\n\nmod.vb.slimeSprays = 1\nlocal mutateIcons = {}\n\nlocal function addIcon(self)\n\tfor i,j in ipairs(mutateIcons) do\n\t\tlocal icon = 0 + i\n\t\tself:SetIcon(j, icon)\n\tend\nend\n\nlocal function removeIcon(self, target)\n\tfor i,j in ipairs(mutateIcons) do\n\t\tif j == target then\n\t\t\ttable.remove(mutateIcons, i)\n\t\t\tself:SetIcon(target, 0)\n\t\tend\n\tend\n\taddIcon(self)\nend\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.slimeSprays = 1\n\ttable.wipe(mutateIcons)\n\tenrageTimer:Start(-delay)\n\twarnSlimeSpraySoon:Schedule(27)\n\ttimerSlimeSprayCD:Start(31) -- REVIEW! variance? (25man Lordaeron 2022/10/16) - 31.0\nend\n\nfunction mod:OnCombatEnd()\n\tfor _, j in ipairs(mutateIcons) do\n\t\tself:SetIcon(j, 0)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 28169 then\n\t\twarnInjection:Show(args.destName)\n\t\ttimerInjection:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnInjection:Show()\n\t\t\tspecWarnInjection:Play(\"runout\")\n\t\t\tyellInjection:Yell()\n\t\tend\n\t\tif self.Options.SetIconOnInjectionTarget then\n\t\t\ttable.insert(mutateIcons, args.destName)\n\t\t\taddIcon(self)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 28169 then\n\t\ttimerInjection:Cancel(args.destName)--Cancel timer if someone is dumb and dispels it.\n\t\tif self.Options.SetIconOnInjectionTarget then\n\t\t\tremoveIcon(self, args.destName)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 28240 then\n\t\twarnCloud:Show()\n\t\ttimerCloud:Start()\n\telseif args:IsSpellID(28157, 54364) then\n\t\twarnSlimeSprayNow:Show()\n\t\tself.vb.slimeSprays = self.vb.slimeSprays + 1\n\t\t -- REVIEW! variance? (25man Lordaeron 2022/10/16) - pull:31.0, 27.7, 61.1, 25.5\n\t\tif self.vb.slimeSprays % 2 == 0 then -- every 2/4/6... spray short cd\n\t\t\twarnSlimeSpraySoon:Schedule(20.5)\n\t\t\ttimerSlimeSprayCD:Start(25.5)\n\t\telse -- every 3/5/7... spray long cd\n\t\t\twarnSlimeSpraySoon:Schedule(54)\n\t\t\ttimerSlimeSprayCD:Start(59)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Naxx/ConstructQuarter/Patchwerk.lua",
    "content": "local mod\t= DBM:NewMod(\"Patchwerk\", \"DBM-Naxx\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(16028)\nmod:SetEncounterID(1118)\n\nmod:RegisterCombat(\"combat_yell\", L.yell1, L.yell2)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_DAMAGE 28308 59192\",\n\t\"SPELL_MISSED 28308 59192\"\n)\n\nlocal enrageTimer\t= mod:NewBerserkTimer(360)\nlocal timerAchieve\t= mod:NewAchievementTimer(180, 1857)\n\nmod:AddBoolOption(\"WarningHateful\", false, \"announce\", nil, nil, nil, 28308)\n\nlocal function announceStrike(target, damage)\n\tSendChatMessage(L.HatefulStrike:format(target, damage), \"RAID\")\nend\n\nfunction mod:OnCombatStart(delay)\n\tenrageTimer:Start(-delay)\n\ttimerAchieve:Start(-delay)\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, _, destName, _, spellId, _, _, amount)\n\tif (spellId == 28308 or spellId == 59192) and self.Options.WarningHateful and DBM:GetRaidRank() >= 1 then\n\t\tannounceStrike(destName, amount or 0)\n\tend\nend\n\nfunction mod:SPELL_MISSED(_, _, _, _, destName, _, spellId, _, _, missType)\n\tif (spellId == 28308 or spellId == 59192) and self.Options.WarningHateful and DBM:GetRaidRank() >= 1 then\n\t\tannounceStrike(destName, getglobal(\"ACTION_SPELL_MISSED_\"..(missType)) or \"\")\n\tend\nend\n"
  },
  {
    "path": "DBM-Naxx/ConstructQuarter/Textures/lgpl.txt",
    "content": "\t\t   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\n  This version of the GNU Lesser General Public License incorporates\nthe terms and conditions of version 3 of the GNU General Public\nLicense, supplemented by the additional permissions listed below.\n\n  0. Additional Definitions.\n\n  As used herein, \"this License\" refers to version 3 of the GNU Lesser\nGeneral Public License, and the \"GNU GPL\" refers to version 3 of the GNU\nGeneral Public License.\n\n  \"The Library\" refers to a covered work governed by this License,\nother than an Application or a Combined Work as defined below.\n\n  An \"Application\" is any work that makes use of an interface provided\nby the Library, but which is not otherwise based on the Library.\nDefining a subclass of a class defined by the Library is deemed a mode\nof using an interface provided by the Library.\n\n  A \"Combined Work\" is a work produced by combining or linking an\nApplication with the Library.  The particular version of the Library\nwith which the Combined Work was made is also called the \"Linked\nVersion\".\n\n  The \"Minimal Corresponding Source\" for a Combined Work means the\nCorresponding Source for the Combined Work, excluding any source code\nfor portions of the Combined Work that, considered in isolation, are\nbased on the Application, and not on the Linked Version.\n\n  The \"Corresponding Application Code\" for a Combined Work means the\nobject code and/or source code for the Application, including any data\nand utility programs needed for reproducing the Combined Work from the\nApplication, but excluding the System Libraries of the Combined Work.\n\n  1. Exception to Section 3 of the GNU GPL.\n\n  You may convey a covered work under sections 3 and 4 of this License\nwithout being bound by section 3 of the GNU GPL.\n\n  2. Conveying Modified Versions.\n\n  If you modify a copy of the Library, and, in your modifications, a\nfacility refers to a function or data to be supplied by an Application\nthat uses the facility (other than as an argument passed when the\nfacility is invoked), then you may convey a copy of the modified\nversion:\n\n   a) under this License, provided that you make a good faith effort to\n   ensure that, in the event an Application does not supply the\n   function or data, the facility still operates, and performs\n   whatever part of its purpose remains meaningful, or\n\n   b) under the GNU GPL, with none of the additional permissions of\n   this License applicable to that copy.\n\n  3. Object Code Incorporating Material from Library Header Files.\n\n  The object code form of an Application may incorporate material from\na header file that is part of the Library.  You may convey such object\ncode under terms of your choice, provided that, if the incorporated\nmaterial is not limited to numerical parameters, data structure\nlayouts and accessors, or small macros, inline functions and templates\n(ten or fewer lines in length), you do both of the following:\n\n   a) Give prominent notice with each copy of the object code that the\n   Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the object code with a copy of the GNU GPL and this license\n   document.\n\n  4. Combined Works.\n\n  You may convey a Combined Work under terms of your choice that,\ntaken together, effectively do not restrict modification of the\nportions of the Library contained in the Combined Work and reverse\nengineering for debugging such modifications, if you also do each of\nthe following:\n\n   a) Give prominent notice with each copy of the Combined Work that\n   the Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the Combined Work with a copy of the GNU GPL and this license\n   document.\n\n   c) For a Combined Work that displays copyright notices during\n   execution, include the copyright notice for the Library among\n   these notices, as well as a reference directing the user to the\n   copies of the GNU GPL and this license document.\n\n   d) Do one of the following:\n\n       0) Convey the Minimal Corresponding Source under the terms of this\n       License, and the Corresponding Application Code in a form\n       suitable for, and under terms that permit, the user to\n       recombine or relink the Application with a modified version of\n       the Linked Version to produce a modified Combined Work, in the\n       manner specified by section 6 of the GNU GPL for conveying\n       Corresponding Source.\n\n       1) Use a suitable shared library mechanism for linking with the\n       Library.  A suitable mechanism is one that (a) uses at run time\n       a copy of the Library already present on the user's computer\n       system, and (b) will operate properly with a modified version\n       of the Library that is interface-compatible with the Linked\n       Version.\n\n   e) Provide Installation Information, but only if you would otherwise\n   be required to provide such information under section 6 of the\n   GNU GPL, and only to the extent that such information is\n   necessary to install and execute a modified version of the\n   Combined Work produced by recombining or relinking the\n   Application with a modified version of the Linked Version. (If\n   you use option 4d0, the Installation Information must accompany\n   the Minimal Corresponding Source and Corresponding Application\n   Code. If you use option 4d1, you must provide the Installation\n   Information in the manner specified by section 6 of the GNU GPL\n   for conveying Corresponding Source.)\n\n  5. Combined Libraries.\n\n  You may place library facilities that are a work based on the\nLibrary side by side in a single library together with other library\nfacilities that are not Applications and are not covered by this\nLicense, and convey such a combined library under terms of your\nchoice, if you do both of the following:\n\n   a) Accompany the combined library with a copy of the same work based\n   on the Library, uncombined with any other library facilities,\n   conveyed under the terms of this License.\n\n   b) Give prominent notice with the combined library that part of it\n   is a work based on the Library, and explaining where to find the\n   accompanying uncombined form of the same work.\n\n  6. Revised Versions of the GNU Lesser General Public License.\n\n  The Free Software Foundation may publish revised and/or new versions\nof the GNU Lesser General Public License from time to time. Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.\n\n  Each version is given a distinguishing version number. If the\nLibrary as you received it specifies that a certain numbered version\nof the GNU Lesser General Public License \"or any later version\"\napplies to it, you have the option of following the terms and\nconditions either of that published version or of any later version\npublished by the Free Software Foundation. If the Library as you\nreceived it does not specify a version number of the GNU Lesser\nGeneral Public License, you may choose any version of the GNU Lesser\nGeneral Public License ever published by the Free Software Foundation.\n\n  If the Library as you received it specifies that a proxy can decide\nwhether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is\npermanent authorization for you to choose that version for the\nLibrary.\n"
  },
  {
    "path": "DBM-Naxx/ConstructQuarter/Thaddius.lua",
    "content": "-- this file uses the texture Textures/arrow.tga. This image was created by Everaldo Coelho and is licensed under the GNU Lesser General Public License. See Textures/lgpl.txt.\nlocal mod\t= DBM:NewMod(\"Thaddius\", \"DBM-Naxx\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15928)\nmod:SetEncounterID(1120)\n\nmod:RegisterCombat(\"combat_yell\", L.Yell)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 28089\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\"UNIT_AURA player\"\n)\n\nlocal warnShiftSoon\t\t\t= mod:NewPreWarnAnnounce(28089, 5, 3)\nlocal warnShiftCasting\t\t= mod:NewCastAnnounce(28089, 4)\n--local warnThrow\t\t\t\t= mod:NewSpellAnnounce(28338, 2)\nlocal warnThrowSoon\t\t\t= mod:NewSoonAnnounce(28338, 1)\n\nlocal warnChargeChanged\t\t= mod:NewSpecialWarning(\"WarningChargeChanged\", nil, nil, nil, 3, 2, nil, nil, 28089)\nlocal warnChargeNotChanged\t= mod:NewSpecialWarning(\"WarningChargeNotChanged\", false, nil, nil, 1, 12, nil, nil, 28089)\nlocal yellShift\t\t\t\t= mod:NewShortPosYell(28089, DBM_CORE_L.AUTO_YELL_CUSTOM_POSITION)\n\nlocal enrageTimer\t\t\t= mod:NewBerserkTimer(365)\nlocal timerNextShift\t\t= mod:NewNextTimer(30, 28089, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerShiftCast\t\t= mod:NewCastTimer(3, 28089, nil, nil, nil, 2)\nlocal timerThrow\t\t\t= mod:NewNextTimer(20.6, 28338, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nif not DBM.Options.GroupOptionsBySpell then\n\tmod:AddMiscLine(DBM_CORE_L.OPTION_CATEGORY_DROPDOWNS)\nend\nmod:AddDropdownOption(\"ArrowsEnabled\", {\"Never\", \"TwoCamp\", \"ArrowsRightLeft\", \"ArrowsInverse\"}, \"Never\", \"misc\", nil, 28089) --not grouping to prevent padding issue (aggravated with ElvUI) and ungrouped dropdown line workaround\n\nmod:SetBossHealthInfo(\n\t15930, L.Boss1,\n\t15929, L.Boss2\n)\n\nlocal currentCharge\nlocal down = 0\n\nlocal function TankThrow(self)\n\tif not self:IsInCombat() or self.vb.phase == 2 then\n\t\tDBM.BossHealth:Hide()\n\t\treturn\n\tend\n\ttimerThrow:Start()\n\twarnThrowSoon:Schedule(17.6)\n\tself:Schedule(20.6, TankThrow, self)\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tcurrentCharge = nil\n\tdown = 0\n\tself:Schedule(20.6 - delay, TankThrow, self)\n\ttimerThrow:Start(-delay)\n\twarnThrowSoon:Schedule(17.6 - delay)\nend\n\ndo\n\tlocal lastShift\n\tfunction mod:SPELL_CAST_START(args)\n\t\tif args.spellId == 28089 then\n\t\t\tself:SetStage(2)\n\t\t\ttimerNextShift:Start()\n\t\t\ttimerShiftCast:Start()\n\t\t\twarnShiftCasting:Show()\n\t\t\twarnShiftSoon:Schedule(25)\n\t\t\tlastShift = GetTime()\n\t\tend\n\tend\n\n\tfunction mod:UNIT_AURA()\n\t\tif self.vb.phase ~= 2 or not lastShift or (GetTime() - lastShift) < 3 then return end\n\t\tlocal charge\n\t\tlocal i = 1\n\t\twhile UnitDebuff(\"player\", i) do\n\t\t\tlocal _, _, icon, count = UnitDebuff(\"player\", i)\n\t\t\tif icon == \"Interface\\\\Icons\\\\Spell_ChargeNegative\" then\n\t\t\t\tif count > 1 then return end --Incorrect aura, it's stacking damage one\n\t\t\t\tcharge = L.Charge1\n\t\t\t\tyellShift:Yell(7, \"- -\")\n\t\t\telseif icon == \"Interface\\\\Icons\\\\Spell_ChargePositive\" then\n\t\t\t\tif count > 1 then return end --Incorrect aura, it's stacking damage one\n\t\t\t\tcharge = L.Charge2\n\t\t\t\tyellShift:Yell(6, \"+ +\")\n\t\t\tend\n\t\t\ti = i + 1\n\t\tend\n\t\tif charge then\n\t\t\tlastShift = nil\n\t\t\tif charge == currentCharge then\n\t\t\t\twarnChargeNotChanged:Show()\n\t\t\t\twarnChargeNotChanged:Play(\"dontmove\")\n\t\t\t\tif self.Options.ArrowsEnabled == \"ArrowsInverse\" then\n\t\t\t\t\tself:ShowLeftArrow()\n\t\t\t\telseif self.Options.ArrowsEnabled == \"ArrowsRightLeft\" then\n\t\t\t\t\tself:ShowRightArrow()\n\t\t\t\tend\n\t\t\telse\n\t\t\t\twarnChargeChanged:Show(charge)\n\t\t\t\twarnChargeChanged:Play(\"stilldanger\")\n\t\t\t\tif self.Options.ArrowsEnabled == \"ArrowsInverse\" then\n\t\t\t\t\tself:ShowRightArrow()\n\t\t\t\telseif self.Options.ArrowsEnabled == \"ArrowsRightLeft\" then\n\t\t\t\t\tself:ShowLeftArrow()\n\t\t\t\telseif self.Options.ArrowsEnabled == \"TwoCamp\" then\n\t\t\t\t\tself:ShowUpArrow()\n\t\t\t\tend\n\t\t\tend\n\t\t\tcurrentCharge = charge\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)\n\tif msg:match(L.Emote) or msg:match(L.Emote2) or msg:find(L.Emote) or msg:find(L.Emote2) or msg == L.Emote or msg == L.Emote2 then\n\t\tdown = down + 1\n\t\tif down >= 2 then\n\t\t\tself:Unschedule(TankThrow)\n\t\t\ttimerThrow:Cancel()\n\t\t\twarnThrowSoon:Cancel()\n\t\t\tDBM.BossHealth:Hide()\n\t\t\tenrageTimer:Start()\n\t\tend\n\tend\nend\n\nlocal function arrowOnUpdate(self, elapsed)\n\tself.elapsed = (self.elapsed or 0) + elapsed\n\tif self.elapsed >= 3.5 and self.elapsed < 4.5 then\n\t\tself:SetAlpha(4.5 - self.elapsed)\n\telseif self.elapsed >= 4.5 then\n\t\tself:Hide()\n\tend\nend\n\nlocal function arrowOnShow(self)\n\tself.elapsed = 0\n\tself:SetAlpha(1)\nend\n\nlocal arrowLeft = CreateFrame(\"Frame\", nil, UIParent)\narrowLeft:Hide()\nlocal arrowLeftTexture = arrowLeft:CreateTexture(nil, \"BACKGROUND\")\narrowLeftTexture:SetTexture(\"Interface\\\\AddOns\\\\DBM-Naxx\\\\ConstructQuarter\\\\Textures\\\\arrow\")\narrowLeftTexture:SetPoint(\"CENTER\", arrowLeft, \"CENTER\")\narrowLeft:SetHeight(1)\narrowLeft:SetWidth(1)\narrowLeft:SetPoint(\"CENTER\", UIParent, \"CENTER\", -150, -30)\narrowLeft:SetScript(\"OnShow\", arrowOnShow)\narrowLeft:SetScript(\"OnUpdate\", arrowOnUpdate)\n\nlocal arrowRight = CreateFrame(\"Frame\", nil, UIParent)\narrowRight:Hide()\nlocal arrowRightTexture = arrowRight:CreateTexture(nil, \"BACKGROUND\")\narrowRightTexture:SetTexture(\"Interface\\\\AddOns\\\\DBM-Naxx\\\\ConstructQuarter\\\\Textures\\\\arrow\")\narrowRightTexture:SetPoint(\"CENTER\", arrowRight, \"CENTER\")\narrowRightTexture:SetTexCoord(1, 0, 0, 1)\narrowRight:SetHeight(1)\narrowRight:SetWidth(1)\narrowRight:SetPoint(\"CENTER\", UIParent, \"CENTER\", 150, -30)\narrowRight:SetScript(\"OnShow\", arrowOnShow)\narrowRight:SetScript(\"OnUpdate\", arrowOnUpdate)\n\nlocal arrowUp = CreateFrame(\"Frame\", nil, UIParent)\narrowUp:Hide()\nlocal arrowUpTexture = arrowUp:CreateTexture(nil, \"BACKGROUND\")\narrowUpTexture:SetTexture(\"Interface\\\\AddOns\\\\DBM-Naxx\\\\ConstructQuarter\\\\Textures\\\\arrow\")\narrowUpTexture:SetRotation(math.pi * 3 / 2)\narrowUpTexture:SetPoint(\"CENTER\", arrowUp, \"CENTER\")\narrowUp:SetHeight(1)\narrowUp:SetWidth(1)\narrowUp:SetPoint(\"CENTER\", UIParent, \"CENTER\", 0, 40)\narrowUp:SetScript(\"OnShow\", arrowOnShow)\narrowUp:SetScript(\"OnUpdate\", arrowOnUpdate)\n\nfunction mod:ShowRightArrow()\n\tarrowRight:Show()\nend\n\nfunction mod:ShowLeftArrow()\n\tarrowLeft:Show()\nend\n\nfunction mod:ShowUpArrow()\n\tarrowUp:Show()\nend\n"
  },
  {
    "path": "DBM-Naxx/DBM-Naxx.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Naxxramas|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Naxxramas|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Наксрамас|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0納克薩瑪斯|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0纳克萨玛斯|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0낙스라마스|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Naxxramas|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Naxxramas|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMNaxx_AllSavedVars\n## SavedVariablesPerCharacter: DBMNaxx_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: WOTLK\n## X-DBM-StatTypes: normal,normal25\n## X-DBM-Mod-SubCategories: Arachnid Quarter,Construct Quarter,Plague Quarter,Military Quarter,Frostwyrm Lair\n## X-DBM-Mod-SubCategories-deDE: Das Arachnidenviertel,Das Konstruktviertel,Das Seuchenviertel,Das Militärviertel,Frostwyrmhort\n## X-DBM-Mod-SubCategories-ruRU: Паучий квартал,Квартал Мерзости,Чумной квартал,Военный квартал,Логово ледяного змея\n## X-DBM-Mod-SubCategories-zhTW: 蜘蛛區,傀儡區,瘟疫區,軍事區,冰霜巨龍巢穴\n## X-DBM-Mod-SubCategories-zhCN: 蜘蛛区,构造区,瘟疫区,军事区,冰霜巨龙的巢穴\n## X-DBM-Mod-SubCategories-koKR: 거미 지구,피조물 지구,역병 지구,군사 지구,서리고룡 둥지\n## X-DBM-Mod-SubCategories-frFR: Quartier des Arachnides,Quartier des Assemblages,Quartier de la Peste,Quartier Militaire,Aile de glace\n## X-DBM-Mod-SubCategories-esES: El Arrabal Arácnido,El Arrabal de los Ensamblajes,El Arrabal de la Peste,El Arrabal Militar,Guarida Helada\n## X-DBM-Mod-SubCategories-esMX: El Arrabal Arácnido,El Arrabal de los Ensamblajes,El Arrabal de la Peste,El Arrabal Militar,Guarida Helada\n## X-DBM-Mod-Name: Naxxramas\n## X-DBM-Mod-Name-deDE: Naxxramas\n## X-DBM-Mod-Name-ruRU: Наксрамас\n## X-DBM-Mod-Name-zhTW: 納克薩瑪斯\n## X-DBM-Mod-Name-zhCN: 纳克萨玛斯\n## X-DBM-Mod-Name-koKR: 낙스라마스\n## X-DBM-Mod-Name-esES: Naxxramas\n## X-DBM-Mod-Name-esMX: Naxxramas\n## X-DBM-Mod-Sort: 6\n## X-DBM-Mod-MapID: 536\n## X-DBM-Mod-BlockRealm: Onyxia_old, Vanilla Naxxamas PTR\n## X-DBM-Mod-LoadZone: Naxxramas\n## X-DBM-Mod-LoadZone-zhCN: 纳克萨玛斯\n## X-DBM-Mod-LoadZone-ruRU: Наксрамас\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.fr.lua\nlocalization.ru.lua\nlocalization.tw.lua\nlocalization.kr.lua\nlocalization.es.lua\nlocalization.mx.lua\nlocalization.cn.lua\n\nArachnidQuarter\\Anub'Rekhan.lua\nArachnidQuarter\\Faerlina.lua\nArachnidQuarter\\Maexxna.lua\n\nConstructQuarter\\Patchwerk.lua\nConstructQuarter\\Grobbulus.lua\nConstructQuarter\\Gluth.lua\nConstructQuarter\\Thaddius.lua\n\nPlagueQuarter\\Noth.lua\nPlagueQuarter\\Heigan.lua\nPlagueQuarter\\Loatheb.lua\n\nMilitaryQuarter\\Razuvious.lua\nMilitaryQuarter\\Gothik.lua\nMilitaryQuarter\\Horsemen.lua\n\nFrostwyrmLair\\Sapphiron.lua\nFrostwyrmLair\\Kel'Thuzad.lua\n"
  },
  {
    "path": "DBM-Naxx/FrostwyrmLair/Kel'Thuzad.lua",
    "content": "local mod\t= DBM:NewMod(\"Kel'Thuzad\", \"DBM-Naxx\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal select, tContains = select, tContains\nlocal PickupInventoryItem, PutItemInBackpack, UseEquipmentSet, CancelUnitBuff = PickupInventoryItem, PutItemInBackpack, UseEquipmentSet, CancelUnitBuff\nlocal UnitClass = UnitClass\n\nmod:SetRevision(\"20260205235940\")\nmod:SetCreatureID(15990)\nmod:SetEncounterID(1114)\nmod:SetModelID(\"creature/lich/lich.m2\")\nmod:SetMinCombatTime(60)\nmod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7, 8)\n\nmod:RegisterCombat(\"combat_yell\", L.Yell)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 27808 27819 28410\",\n\t\"SPELL_AURA_REMOVED 28410\",\n\t\"SPELL_CAST_SUCCESS 27810 27819 27808 28410\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"UNIT_HEALTH boss1\"\n)\n\nlocal specWarnWeapons\t\t= mod:NewSpecialWarning(\"WeaponsStatus\", false)\n\nlocal warnAddsSoon\t\t\t= mod:NewAnnounce(\"warnAddsSoon\", 1, \"Interface\\\\Icons\\\\INV_Misc_MonsterSpiderCarapace_01\")\nlocal warnPhase2\t\t\t= mod:NewPhaseAnnounce(2, 3)\nlocal warnBlastTargets\t\t= mod:NewTargetAnnounce(27808, 2)\nlocal warnFissure\t\t\t= mod:NewTargetNoFilterAnnounce(27810, 4)\nlocal warnMana\t\t\t\t= mod:NewTargetAnnounce(27819, 2)\nlocal warnChainsTargets\t\t= mod:NewTargetNoFilterAnnounce(28410, 4)\nlocal warnMindControlSoon\t= mod:NewSoonAnnounce(28410, 4)\nlocal warnPhase3\t\t\t= mod:NewPhaseAnnounce(3, 3)\n\nlocal specwarnP2Soon\t\t= mod:NewSpecialWarning(\"specwarnP2Soon\")\nlocal specWarnManaBomb\t\t= mod:NewSpecialWarningMoveAway(27819, nil, nil, nil, 1, 2)\nlocal specWarnManaBombNear\t= mod:NewSpecialWarningClose(27819, nil, nil, nil, 1, 2)\nlocal yellManaBomb\t\t\t= mod:NewShortYell(27819)\nlocal specWarnBlast\t\t\t= mod:NewSpecialWarningTarget(27808, \"Healer\", nil, nil, 1, 2)\nlocal specWarnFissureYou\t= mod:NewSpecialWarningYou(27810, nil, nil, nil, 3, 2)\nlocal specWarnFissureClose\t= mod:NewSpecialWarningClose(27810, nil, nil, nil, 2, 8)\nlocal yellFissure\t\t\t= mod:NewYellMe(27810)\nlocal specWarnAddsGuardians\t= mod:NewSpecialWarningAdds(29897, \"-Healer\", nil, nil, 1, 2) -- \"Guardians of Icecrown. There's no spellID for this, so used something close: Guardians of Icecrown Passive\"\n\nlocal blastTimer\t\t\t= mod:NewBuffActiveTimer(4, 27808, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON)\nlocal timerManaBomb\t\t\t= mod:NewVarTimer(\"v25-54.87\", 27819, nil, nil, nil, 3, nil, nil, true) -- REVIEW! ~30s variance! [25.20-54.87]. Added \"keep\" arg. SPELL_CAST_SUCCESS: (Lordaeron: 25m [2025-10-03]@[20:37:12] || Onyxia: 25m [2026-02-04]@[22:18:26]) - \"Detonate Mana-27819-npc:15990-3 = pull:293.74/[Stage 1/0.00, Stage 2/227.95] 65.79/293.74, Stage 3/24.38, 6.88/31.26, 30.34, 25.20\" || \"Detonate Mana-27819-npc:15990-3 = pull:261.18/[Stage 1/0.00, Stage 2/227.99] 33.20/261.18, 54.87, Stage 3/5.24, 24.93/30.17, 27.27\"\nlocal timerFrostBlast\t\t= mod:NewVarTimer(\"v34.75-42.67\", 27808, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON, true) -- REVIEW! ~8s variance [34.75-42.67]. Added \"keep\" arg. SPELL_CAST_SUCCESS: (Lordaeron: 25m [2025-10-03]@[20:37:12] || Onyxia: 25m [2026-02-04]@[22:18:26]) - \"Frost Blast-27808-npc:15990-3 = pull:308.71/[Stage 1/0.00, Stage 2/227.95] 80.76/308.71, Stage 3/9.41, 33.25/42.67, 35.25\" || \"Frost Blast-27808-npc:15990-3 = pull:268.87/[Stage 1/0.00, Stage 2/227.99] 40.89/268.87, 34.75, Stage 3/17.67, 17.85/35.52, 41.90\",\nlocal timerFissure\t\t\t= mod:NewTargetTimer(5, 27810, nil, nil, 2, 3)\nlocal timerFissureCD \t\t= mod:NewVarTimer(\"v16.78-34.57\", 27810, nil, nil, nil, 3, nil, nil, true) -- REVIEW! ~17s variance [16.78-34.57]. Added \"keep\" arg. SPELL_CAST_SUCCESS: (Lordaeron: 25m [2025-10-03]@[20:37:12] || Onyxia: 25m [2026-02-04]@[22:18:26]) - \"Shadow Fissure-27810-npc:15990-3 = pull:250.56/[Stage 1/0.00, Stage 2/227.95] 22.60/250.56, 16.78, 29.41, Stage 3/21.38, 0.02/21.39, 27.82, 17.65\" || \"Shadow Fissure-27810-npc:15990-3 = pull:250.88/[Stage 1/0.00, Stage 2/227.99] 22.90/250.88, 34.56, 34.57, Stage 3/1.28, 25.01/26.29, 29.42\"\nlocal timerMC\t\t\t\t= mod:NewBuffActiveTimer(20, 28410, nil, nil, nil, 3)\nlocal timerMCCD\t\t\t\t= mod:NewCDTimer(90, 28410, nil, nil, nil, 3) -- Almost no variance. SPELL_CAST_SUCCESS: (Lordaeron: 25m [2025-10-03]@[20:37:12]) - \"Chains of Kel'Thuzad-28410-npc:15990-3 = pull:258.01/[Stage 1/0.00, Stage 2/227.95] 30.06/258.01, 0.00, 0.00, Stage 3/60.11, 29.93/90.04, 0.00\"\nlocal timerPhase2\t\t\t= mod:NewTimer(228, \"TimerPhase2\", nil, nil, nil, 6) -- P2 script starts on Yell or Emote, and IEEU fires 0.55s after. (25m Lordaeron 2022/10/16) - 228.0\n\nmod:AddRangeFrameOption(12, 27819)\nmod:AddSetIconOption(\"SetIconOnMC\", 28410, true, false, {1, 2, 3})\nmod:AddSetIconOption(\"SetIconOnManaBomb\", 27819, false, false, {8})\nmod:AddSetIconOption(\"SetIconOnFrostTomb\", 27808, true, false, {1, 2, 3, 4, 5, 6, 7, 8})\nmod:AddDropdownOption(\"RemoveBuffsOnMC\", {\"Never\", \"Gift\", \"CCFree\", \"ShortOffensiveProcs\", \"MostOffensiveBuffs\"}, \"Never\", \"misc\", nil, 28410)\n\nmod.vb.warnedAdds = false\nmod.vb.MCIcon = 1\nlocal frostBlastTargets = {}\nlocal chainsTargets = {}\n\nlocal playerClass = select(2, UnitClass(\"player\"))\nlocal isHunter = playerClass == \"HUNTER\"\n\nlocal RaidWarningFrame = RaidWarningFrame\nlocal GetFramesRegisteredForEvent, RaidNotice_AddMessage = GetFramesRegisteredForEvent, RaidNotice_AddMessage\nlocal function selfWarnMissingSet()\n\tif (mod.Options.EqUneqWeaponsKT or mod.Options.EqUneqWeaponsKT2) and not mod:IsEquipmentSetAvailable(\"pve\") then\n\t\tfor i = 1, select(\"#\", GetFramesRegisteredForEvent(\"CHAT_MSG_RAID_WARNING\")) do\n\t\t\tlocal frame = select(i, GetFramesRegisteredForEvent(\"CHAT_MSG_RAID_WARNING\"))\n\t\t\tif frame.AddMessage then\n\t\t\t\tframe.AddMessage(frame, L.setMissing)\n\t\t\tend\n\t\tend\n\t\tRaidNotice_AddMessage(RaidWarningFrame, L.setMissing, ChatTypeInfo[\"RAID_WARNING\"])\n\tend\nend\n\nmod:AddMiscLine(L.EqUneqLineDescription)\nmod:AddBoolOption(\"EqUneqWeaponsKT\", false) -- automation by timer\nmod:AddBoolOption(\"EqUneqWeaponsKT2\", mod:IsDps(), nil, selfWarnMissingSet) -- automation by event\nmod:AddDropdownOption(\"EqUneqFilter\", {\"OnlyDPS\", \"DPSTank\", \"NoFilter\"}, \"OnlyDPS\", \"misc\")\n\nlocal function selfSchedWarnMissingSet(self)\n\tif (self.Options.EqUneqWeaponsKT or self.Options.EqUneqWeaponsKT2) and not self:IsEquipmentSetAvailable(\"pve\") then\n\t\tfor i = 1, select(\"#\", GetFramesRegisteredForEvent(\"CHAT_MSG_RAID_WARNING\")) do\n\t\t\tlocal frame = select(i, GetFramesRegisteredForEvent(\"CHAT_MSG_RAID_WARNING\"))\n\t\t\tif frame.AddMessage then\n\t\t\t\tself:Schedule(10, frame.AddMessage, frame, L.setMissing)\n\t\t\tend\n\t\tend\n\t\tself:Schedule(10, RaidNotice_AddMessage, RaidWarningFrame, L.setMissing, ChatTypeInfo[\"RAID_WARNING\"])\n\tend\nend\nmod:Schedule(0.5, selfSchedWarnMissingSet, mod) -- mod options default values were being read before SV ones, so delay this\n\nlocal function checkWeaponRemovalSetting(self)\n\tif (not self.Options.EqUneqWeaponsKT and not self.Options.EqUneqWeaponsKT2) then return false end\n\n\tlocal removalOption = self.Options.EqUneqFilter\n\tif removalOption == \"OnlyDPS\" and self:IsDps() then return true\n\telseif removalOption == \"DPSTank\" and not self:IsHealer() then return true\n\telseif removalOption == \"NoFilter\" then return true\n\tend\n\treturn false\nend\n\nlocal function UnWKT(self)\n\tif self:IsEquipmentSetAvailable(\"pve\") then\n\t\tPickupInventoryItem(16)\n\t\tPutItemInBackpack()\n\t\tPickupInventoryItem(17)\n\t\tPutItemInBackpack()\n\t\tDBM:Debug(\"MH and OH unequipped\", 2)\n\t\tif isHunter then\n\t\t\tPickupInventoryItem(18)\n\t\t\tPutItemInBackpack()\n\t\t\tDBM:Debug(\"Ranged unequipped\", 2)\n\t\tend\n\tend\nend\n\nlocal function EqWKT(self)\n\tif self:IsEquipmentSetAvailable(\"pve\") then\n\t\tDBM:Debug(\"trying to equip pve\")\n\t\tUseEquipmentSet(\"pve\")\n\t\tif not self:IsTank() then\n\t\t\tCancelUnitBuff(\"player\", (GetSpellInfo(25780))) -- Righteous Fury\n\t\tend\n\tend\nend\n\nlocal aurastoRemove = { -- ordered by aggressiveness {degree, classFilter}\n\t-- 1 (Gift)\n\t[48469] = {1, nil}, -- Mark of the Wild\n\t[48470] = {1, nil}, -- Gift of the Wild\n\t[69381] = {1, nil}, -- Drums of the Wild\n\t-- 2 (CCFree)\n\t[48169] = {2, nil}, -- Shadow Protection\n\t[48170] = {2, nil}, -- Prayer of Shadow Protection\n\t-- 3 (ShortOffensiveProcs)\n\t[13877] = {3, \"ROGUE\"}, -- Blade Flurry (Combat Rogue)\n\t[70721] = {3, \"DRUID\"}, -- Omen of Doom (Balance Druid)\n\t[48393] = {3, \"DRUID\"}, -- Owlkin Frenzy (Balance Druid)\n\t[53201] = {3, \"DRUID\"}, -- Starfall (Balance Druid)\n\t[50213] = {3, \"DRUID\"}, -- Tiger's Fury (Feral Druid)\n\t[31572] = {3, \"MAGE\"}, -- Arcane Potency (Arcane Mage)\n\t[54490] = {3, \"MAGE\"}, -- Missile Barrage (Arcane Mage)\n\t[48108] = {3, \"MAGE\"}, -- Hot Streak (Fire Mage)\n\t[71165] = {3, \"WARLOCK\"}, -- Molten Core (Warlock)\n\t[63167] = {3, \"WARLOCK\"}, -- Decimation (Warlock)\n\t[70840] = {3, \"WARLOCK\"}, -- Devious Minds (Warlock)\n\t[17941] = {3, \"WARLOCK\"}, -- Shadow Trance (Warlock)\n\t[47197] = {3, \"WARLOCK\"}, -- Eradication (Affliction Warlock)\n\t[34939] = {3, \"WARLOCK\"}, -- Backlash (Destruction Warlock)\n\t[47260] = {3, \"WARLOCK\"}, -- Backdraft (Destruction Warlock)\n\t[16246] = {3, \"SHAMAN\"}, -- Clearcasting (Elemental Shaman)\n\t[64701] = {3, \"SHAMAN\"}, -- Elemental Mastery (Elemental Shaman)\n\t[26297] = {3, nil}, -- Berserking (Troll racial)\n\t[54758] = {3, nil}, -- Hyperspeed Acceleration (Hands engi enchant)\n\t[59626] = {3, nil}, -- Black Magic (Weapon enchant)\n\t[72416] = {3, nil}, -- Frostforged Sage (ICC Rep ring)\n\t[64713] = {3, nil}, -- Flame of the Heavens (Flare of the Heavens)\n\t[67669] = {3, nil}, -- Elusive Power (Trinket Abyssal Rune)\n\t[60064] = {3, nil}, -- Now is the Time! (Trinket Sundial of the Exiled/Mithril Pocketwatch)\n\t-- 4 (MostOffensiveBuffs)\n\t[48168] = {4, \"PRIEST\"}, -- Inner Fire (Priest)\n\t[15258] = {4, \"PRIEST\"}, -- Shadow Weaving (Shadow Priest)\n\t[48420] = {4, \"DRUID\"}, -- Master Shapeshifter (Druid)\n\t[24932] = {4, \"DRUID\"}, -- Leader of the Pack (Feral Druid)\n\t[67355] = {4, \"DRUID\"}, -- Agile (Feral Druid idol)\n\t[52610] = {4, \"DRUID\"}, -- Savage Roar (Feral Druid)\n\t[24907] = {4, \"DRUID\"}, -- Moonkin Aura (Balance Druid)\n\t[71199] = {4, \"DRUID\"}, -- Furious (Shaman EoF: Bizuri's Totem of Shattered Ice)\n\t[67360] = {4, \"DRUID\"}, -- Blessing of the Moon Goddess (Druid EoT: Idol of Lunar Fury)\n\t[48943] = {4, \"PALADIN\"}, -- Shadow Resistance Aura (Paladin)\n\t[43046] = {4, \"MAGE\"}, -- Molten Armor (Mage)\n\t[47893] = {4, \"WARLOCK\"}, -- Fel Armor (Warlock)\n\t[63321] = {4, \"WARLOCK\"}, -- Life Tap (Warlock)\n\t[55637] = {4, nil}, -- Lightweave (Back tailoring enchant)\n\t[71572] = {4, nil}, -- Cultivated Power (Muradin Spyglass)\n\t[60235] = {4, nil}, -- Greatness (Darkmoon Card: Greatness)\n\t[71644] = {4, nil}, -- Surge of Power (Dislodged Foreign Object)\n\t[75473] = {4, nil}, -- Twilight Flames (Charred Twilight Scale)\n\t[71636] = {4, nil}, -- Siphoned Power (Phylactery of the Nameless Lich)\n}\nlocal optionToDegree = {\n\t[\"Gift\"] = 1, -- Cyclones resists\n\t[\"CCFree\"] = 2, -- CC Shadow resists, life Fear from Psychic Scream\n\t[\"ShortOffensiveProcs\"] = 3, -- Short-term procs that would expire during Mind Control anyway\n\t[\"MostOffensiveBuffs\"] = 4, -- Most offensive buffs that are easily renewable but would expire after Mind Control ends\n}\n\nlocal function RemoveBuffs(option) -- Spell is removed based on name so no longer need SpellID for each rank\n\tif not option then return end\n\tlocal degreeOption = optionToDegree[option]\n\tfor aura, infoTable in pairs(aurastoRemove) do\n\t\tlocal degree, classFilter = unpack(infoTable)\n\t\tif degree <= degreeOption then\n\t\t\tif not classFilter or classFilter == playerClass then\n\t\t\t\tCancelUnitBuff(\"player\", (GetSpellInfo(aura)))\n\t\t\tend\n\t\tend\n\tend\n\tDBM:Debug(\"Buffs removed, using option \\\"\" .. option .. \"\\\" and degree: \" .. tostring(degreeOption), 2)\nend\n\nlocal function AnnounceChainsTargets(self)\n\twarnChainsTargets:Show(table.concat(chainsTargets, \"< >\"))\n\tif self.Options.EqUneqWeaponsKT and checkWeaponRemovalSetting(self) then\n\t\tif not tContains(chainsTargets, UnitName(\"player\")) then\n\t\t\tDBM:Debug(\"Equipping scheduled\", 2)\n\t\t\tself:Schedule(1.0, EqWKT, self)\n\t\t\tself:Schedule(2.0, EqWKT, self)\n\t\t\tself:Schedule(3.6, EqWKT, self)\n\t\t\tself:Schedule(5.0, EqWKT, self)\n\t\t\tself:Schedule(6.0, EqWKT, self)\n\t\t\tself:Schedule(8.0, EqWKT, self)\n\t\t\tself:Schedule(10.0, EqWKT, self)\n\t\t\tself:Schedule(12.0, EqWKT, self)\n\t\tend\n\tend\n\ttable.wipe(chainsTargets)\n\tself.vb.MCIcon = 1\nend\n\nlocal function AnnounceBlastTargets(self)\n\tif self.Options.SpecWarn27808target then\n\t\tspecWarnBlast:Show(table.concat(frostBlastTargets, \"< >\"))\n\t\tspecWarnBlast:Play(\"healall\")\n\telse\n\t\twarnBlastTargets:Show(table.concat(frostBlastTargets, \"< >\"))\n\tend\n\tblastTimer:Start(3.5)\n\tif self.Options.SetIconOnFrostTomb then\n\t\tfor i = #frostBlastTargets, 1, -1 do\n\t\t\tself:SetIcon(frostBlastTargets[i], 8 - i, 4.5)\n\t\t\tfrostBlastTargets[i] = nil\n\t\tend\n\tend\nend\n\nlocal function StartPhase2(self)\n\tif self.vb.phase == 1 then\n\t\tself:SetStage(2)\n\t\twarnPhase2:Show()\n\t\twarnPhase2:Play(\"ptwo\")\n\t\ttimerManaBomb:Start(\"v33.2-35.02\") -- REVIEW!\n\t\ttimerFrostBlast:Start(\"v40.89-44.52\") -- REVIEW!\n\t\ttimerFissureCD:Start(\"v22.6-22.9\") -- REVIEW!\n\t\tif self:IsDifficulty(\"normal25\") then\n\t\t\ttimerMCCD:Start(30)\n\t\t\twarnMindControlSoon:Schedule(25)\n\t\t\tspecWarnWeapons:Show(checkWeaponRemovalSetting(self) and ENABLE or ADDON_DISABLED, (self.Options.EqUneqWeaponsKT2 and self.Options.EqUneqWeaponsKT and (SLASH_STOPWATCH2):sub(2)) or (self.Options.EqUneqWeaponsKT2 and COMBAT_LOG) or NONE, self.Options.EqUneqFilter)\n\t\t\tif self.Options.EqUneqWeaponsKT and checkWeaponRemovalSetting(self) then\n\t\t\t\tself:Schedule(29.95, UnWKT, self)\n\t\t\t\tself:Schedule(30, UnWKT, self)\n\t\t\tend\n\t\tend\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Show(12)\n\t\tend\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\ttable.wipe(chainsTargets)\n\ttable.wipe(frostBlastTargets)\n\tself.vb.warnedAdds = false\n\tself.vb.MCIcon = 1\n\tspecwarnP2Soon:Schedule(218-delay)\n\ttimerPhase2:Start()\n--\tself:Schedule(226, StartPhase2, self)\n\tself:RegisterShortTermEvents(\n\t\t\"INSTANCE_ENCOUNTER_ENGAGE_UNIT\"\n\t)\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 27810 then\n\t\ttimerFissure:Start(args.destName)\n\t\ttimerFissureCD:Start()\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnFissureYou:Show()\n\t\t\tspecWarnFissureYou:Play(\"targetyou\")\n\t\t\tyellFissure:Yell()\n\t\telseif self:CheckNearby(8, args.destName) then\n\t\t\tspecWarnFissureClose:Show(args.destName)\n\t\t\tspecWarnFissureClose:Play(\"watchfeet\")\n\t\telse\n\t\t\twarnFissure:Show(args.destName)\n\t\t\twarnFissure:Play(\"watchstep\")\n\t\tend\n\telseif spellId == 28410 then\n\t\tDBM:Debug(\"MC on \"..args.destName, 2)\n\t\tif args.destName == UnitName(\"player\") then\n\t\t\tif self.Options.RemoveBuffsOnMC ~= \"Never\" then\n\t\t\t\tRemoveBuffs(self.Options.RemoveBuffsOnMC)\n\t\t\tend\n\t\t\tif self.Options.EqUneqWeaponsKT2 and checkWeaponRemovalSetting(self) then\n\t\t\t\tUnWKT(self)\n\t\t\t\tself:Schedule(0.01, UnWKT, self)\n\t\t\t\tDBM:Debug(\"Unequipping\", 2)\n\t\t\tend\n\t\tend\n\t\tif self:AntiSpam(2, 2) then\n\t\t\ttimerMCCD:Start()\n\t\t\twarnMindControlSoon:Schedule(85)\n\t\t\tif self.Options.EqUneqWeaponsKT and checkWeaponRemovalSetting(self) then\n\t\t\t\tself:Schedule(89.95, UnWKT, self)\n\t\t\t\tself:Schedule(90, UnWKT, self)\n\t\t\tend\n\t\tend\n\telseif spellId == 27819 then\n\t\ttimerManaBomb:Start()\n\telseif spellId == 27808 then\n\t\ttimerFrostBlast:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 27808 then -- Frost Blast\n\t\ttable.insert(frostBlastTargets, args.destName)\n\t\tself:Unschedule(AnnounceBlastTargets)\n\t\tself:Schedule(0.5, AnnounceBlastTargets, self)\n\telseif spellId == 27819 then -- Detonate Mana\n\t\tif self.Options.SetIconOnManaBomb then\n\t\t\tself:SetIcon(args.destName, 8, 5.5)\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnManaBomb:Show()\n\t\t\tspecWarnManaBomb:Play(\"bombrun\")\n\t\t\tyellManaBomb:Yell()\n\t\telseif self:CheckNearby(12, args.destName) then\n\t\t\tspecWarnManaBombNear:Show(args.destName)\n\t\t\tspecWarnManaBombNear:Play(\"scatter\")\n\t\telse\n\t\t\twarnMana:Show(args.destName)\n\t\tend\n\telseif spellId == 28410 then -- Chains of Kel'Thuzad\n\t\tchainsTargets[#chainsTargets + 1] = args.destName\n\t\tif self:AntiSpam() then\n\t\t\ttimerMC:Start()\n\t\tend\n\t\tif self.Options.SetIconOnMC then\n\t\t\tself:SetIcon(args.destName, self.vb.MCIcon)\n\t\tend\n\t\tself.vb.MCIcon = self.vb.MCIcon + 1\n\t\tself:Unschedule(AnnounceChainsTargets)\n\t\tif #chainsTargets >= 3 then\n\t\t\tAnnounceChainsTargets(self)\n\t\telse\n\t\t\tself:Schedule(1.0, AnnounceChainsTargets, self)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 28410 then\n\t\tif self.Options.SetIconOnMC then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\t\tif (args.destName == UnitName(\"player\") or args:IsPlayer()) and checkWeaponRemovalSetting(self) then\n\t\t\tDBM:Debug(\"Equipping scheduled\", 2)\n\t\t\tself:Schedule(0.1, EqWKT, self)\n\t\t\tself:Schedule(1.7, EqWKT, self)\n\t\t\tself:Schedule(3.7, EqWKT, self)\n\t\t\tself:Schedule(7.0, EqWKT, self)\n\t\t\tself:Schedule(9.0, EqWKT, self)\n\t\t\tself:Schedule(11.0, EqWKT, self)\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.Yell1Phase2 or msg:find(L.Yell1Phase2) or msg == L.Yell2Phase2 or msg:find(L.Yell2Phase2) or msg == L.Yell3Phase2 or msg:find(L.Yell3Phase2) then\n\t\tStartPhase2(self)\n\t\tself:UnregisterShortTermEvents() -- Unregister IEEU\n\telseif msg == L.YellPhase3 or msg:find(L.YellPhase3) then\n\t\tself:SetStage(3)\n\t\twarnPhase3:Show()\n\telseif msg == L.YellGuardians or msg:find(L.YellGuardians) then\n\t\tspecWarnAddsGuardians:Show()\n\tend\nend\n\nfunction mod:INSTANCE_ENCOUNTER_ENGAGE_UNIT() -- Keeping this just in case one of the YellPhase2 Localizations is wrong\n\tif UnitExists(\"boss1\") and self:GetUnitCreatureId(\"boss1\") == 15990 then\n\t\tStartPhase2(self)\n\t\tself:UnregisterShortTermEvents()\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif not self.vb.warnedAdds and self:GetUnitCreatureId(uId) == 15990 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.48 then\n\t\tself.vb.warnedAdds = true\n\t\twarnAddsSoon:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Naxx/FrostwyrmLair/Sapphiron.lua",
    "content": "local mod\t= DBM:NewMod(\"Sapphiron\", \"DBM-Naxx\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20260207154352\")\nmod:SetCreatureID(15989)\nmod:SetEncounterID(1119)\nmod:SetHotfixNoticeRev(20250916000000)\nmod:SetMinSyncRevision(20220904000000)\n\nmod:RegisterCombat(\"combat\")\nmod:SetModelScale(0.1)\n\nmod:RegisterEventsInCombat(\n--\t\"SPELL_CAST_START 28524\",\n\t\"SPELL_CAST_SUCCESS 28542 55665 28560 55696\",\n\t\"SPELL_AURA_APPLIED 28522 28547 55699\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\"UNIT_HEALTH boss1\"\n)\n\n--TODO, verify SPELL_CAST_START on retail to switch to it over emote, same as classicc era was done\n\n-- General\nlocal specWarnLowHP\t\t= mod:NewSpecialWarning(\"SpecWarnSapphLow\")\n\nlocal berserkTimer\t\t= mod:NewBerserkTimer(900)\n\n-- Stage One (Ground Phase)\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1))\nlocal warnDrainLifeNow\t= mod:NewSpellAnnounce(28542, 2)\nlocal warnDrainLifeSoon\t= mod:NewSoonAnnounce(28542, 1)\nlocal warnAirPhaseSoon\t= mod:NewAnnounce(\"WarningAirPhaseSoon\", 3, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\")\nlocal warnLanded\t\t= mod:NewAnnounce(\"WarningLanded\", 4, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendBurrow.blp\")\nlocal warnBlizzard\t\t= mod:NewSpellAnnounce(28560, 4)\n\nlocal specWarnBlizzard\t= mod:NewSpecialWarningGTFO(28547, nil, nil, nil, 1, 8)\n\nlocal timerDrainLife\t= mod:NewCDTimer(24, 28542, nil, nil, nil, 3, nil, DBM_COMMON_L.CURSE_ICON) -- 12s on phasing, then 24s. (Lordaeron: 25man 2022/09/02 || 25m [2025-10-03]@[20:34:05]) - 24.0 || \"Life Drain-55665-npc:15989-1261 = pull:11.92/[Stage 1/0.00] 11.92, 23.98, Stage 2/12.66, Stage 1/23.72, 12.05/35.76/48.42\"\nlocal timerAirPhase\t\t= mod:NewTimer(60, \"TimerAir\", \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\", nil, nil, 6) -- REVIEW! (Lordaeron: 25m [2025-10-03]@[20:34:05]) - \"?-Sapphiron lifts off into the air!-npc:Sapphiron = pull:48.57/[Stage 1/0.00, Stage 2/48.56] 0.01/48.57, Stage 1/23.71\"\nlocal timerBlizzard\t\t= mod:NewNextTimer(7, 28560, nil, nil, nil, 3)\nlocal timerTailSweep\t= mod:NewVarTimer(\"v8.74-9.38\", 55696, nil, nil, nil, 2) -- ~0.5s variance. (Lordaeron: 25m [2025-10-03]@[20:34:05] || Onyxia [2026-02-04]@[22:12:15]) - \"Tail Sweep-npc:15989-1261 = pull:8.96/[Stage 1/0.00] 8.96, 9.08, 8.97, 9.03, 9.00, Stage 2/3.53, Stage 1/23.72, 9.05/32.77/36.29, 9.01, 8.99\" || \"Tail Sweep-npc:15989-4059 = pull:9.38/[Stage 1/0.00] 9.38, 8.74, 9.00, 9.07, 9.28, Stage 2/3.02, Stage 1/34.09, 9.09/43.19/46.21, 9.04, 9.03, 9.07, 9.01\"\n\n-- Stage Two (Air Phase)\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2))\nlocal warnAirPhaseNow\t= mod:NewAnnounce(\"WarningAirPhaseNow\", 4, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\")\nlocal warnIceBlock\t\t= mod:NewTargetAnnounce(28522, 2)\n\nlocal specWarnDeepBreath= mod:NewSpecialWarningSpell(28524, nil, nil, nil, 1, 2)\nlocal yellIceBlock\t\t= mod:NewYell(28522)\n\nlocal timerLanding\t\t= mod:NewTimer(24.2, \"TimerLanding\", \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendBurrow.blp\", nil, nil, 6)\nlocal timerIceBlast\t\t= mod:NewCastTimer(8, 28524, nil, nil, nil, 2, DBM_COMMON_L.DEADLY_ICON)\n\nmod:AddRangeFrameOption(\"12\")\n\n--local UnitAffectingCombat = UnitAffectingCombat\n--local noTargetTime = 0\nlocal warned_lowhp = false\nmod.vb.isFlying = false\n\n--[[local function resetIsFlying(self)\n\tself.vb.isFlying = false\nend]]\n\nlocal function Landing(self)\n\tself:SetStage(1)\n\twarnLanded:Show()\n\twarnDrainLifeSoon:Schedule(7)\n\ttimerDrainLife:Start(12)\n\twarnAirPhaseSoon:Schedule(50)\n\ttimerAirPhase:Start()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\t\tself:Schedule(59, DBM.RangeCheck.Show, DBM.RangeCheck, 12)\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n--\tnoTargetTime = 0\n\twarned_lowhp = false\n\tself:SetStage(1)\n\tself.vb.isFlying = false\n\twarnDrainLifeSoon:Schedule(6.5-delay)\n\ttimerDrainLife:Start(11.92-delay) -- (Lordaeron: 25man 2022/09/02 || 25m [2025-10-03]@[20:34:05]) - 12.0 || 11.92\n\ttimerBlizzard:Start(6.1-delay) -- REVIEW! ~3s variance? (25man Lordaeron 2022/09/02 || 25man Lordaeron 2022/10/16) - 8.8 || 6.1\n\ttimerTailSweep:Start(-delay)\n\twarnAirPhaseSoon:Schedule(38.4-delay)\n\ttimerAirPhase:Start(48.4-delay) -- REVIEW! ~0.1s variance? (25man Lordaeron 2022/09/02 || 25man Lordaeron 2022/10/16) - 48.4 || 48.57\n\tberserkTimer:Start(-delay)\n\tif self.Options.RangeFrame then\n\t\tself:Schedule(46-delay, DBM.RangeCheck.Show, DBM.RangeCheck, 12)\n\tend\n--[[self:RegisterOnUpdateHandler(function(self, elapsed)\n\t\tif not self:IsInCombat() then return end\n\t\tlocal foundBoss, target\n\t\tfor uId in DBM:GetGroupMembers() do\n\t\t\tlocal unitID = uId..\"target\"\n\t\t\tif self:GetUnitCreatureId(unitID) == 15989 and UnitAffectingCombat(unitID) then\n\t\t\t\ttarget = DBM:GetUnitFullName(unitID..\"target\")\n\t\t\t\tfoundBoss = true\n\t\t\t\tbreak\n\t\t\tend\n\t\tend\n\t\tif foundBoss and not target then\n\t\t\tnoTargetTime = noTargetTime + elapsed\n\t\telseif foundBoss then\n\t\t\tnoTargetTime = 0\n\t\tend\n\t\tif noTargetTime > 0.5 and not self.vb.isFlying then\n\t\t\tnoTargetTime = 0\n\t\t\tself:SetStage(2)\n\t\t\tself.vb.isFlying = true\n\t\t\tself:Schedule(60, resetIsFlying, self)\n\t\t\ttimerDrainLife:Cancel()\n\t\t\ttimerAirPhase:Cancel()\n\t\t\twarnAirPhaseNow:Show()\n\t\t\ttimerLanding:Start()\n\t\tend\n\tend, 0.2)]]\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 28522 then\n\t\twarnIceBlock:CombinedShow(0.5, args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tyellIceBlock:Yell()\n\t\tend\n\telseif args:IsSpellID(28547, 55699) and args:IsPlayer() and self:AntiSpam(1) then\n\t\tspecWarnBlizzard:Show(args.spellName)\n\t\tspecWarnBlizzard:Play(\"watchfeet\")\n\tend\nend\n\n--[[\nfunction mod:SPELL_CAST_START(args)\n\t--if args:IsSpellID(28524, 29318) then--NEEDS verification before deployed\n\t\ttimerIceBlast:Start()\n\t\ttimerLanding:Update(16.3, 28.5)--Probably not even needed, if base timer is more accurate\n\t\tself:Schedule(12.2, Landing, self)\n\t\twarnDeepBreath:Show()\n\t\twarnDeepBreath:Play(\"findshelter\")\n\tend\nend\n--]]\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif args:IsSpellID(28542, 55665) then -- Life Drain\n\t\twarnDrainLifeNow:Show()\n\t\twarnDrainLifeSoon:Schedule(18.5)\n\t\ttimerDrainLife:Start()\n\telseif spellId == 28560 then\n\t\tDBM:AddMsg(\"Sapphiron Blizzard SPELL_CAST_SUCCESS implemented on Warmane server script. Notify Zidras on Discord or GitHub\")\n\t\twarnBlizzard:Show()\n\t\ttimerBlizzard:Start()\n\telseif spellId == 55696 then\n\t\ttimerTailSweep:Start()\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)\n\tif msg == L.EmoteBreath or msg:find(L.EmoteBreath) then\n--\t\tself:SendSync(\"DeepBreath\") -- this does not need syncing and spam comms\n\t\ttimerIceBlast:Start()\n\t\ttimerLanding:Update(13.5, 24.2) -- 8s until breath + 3.5s until emote + ~2s until UNIT_TARGET\n\t\tspecWarnDeepBreath:Show()\n\t\tspecWarnDeepBreath:Play(\"findshelter\")\n\telseif msg == L.AirPhase or msg:find(L.AirPhase) then\n\t\tself:SetStage(2)\n\t\tself.vb.isFlying = true\n\t\ttimerDrainLife:Cancel()\n\t\ttimerAirPhase:Cancel()\n\t\twarnAirPhaseNow:Show()\n\t\ttimerLanding:Start()\n\telseif msg == L.LandingPhase or msg:find(L.LandingPhase) then\n\t\tself.vb.isFlying = false\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"UNIT_TARGET boss1\"\n\t\t)\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif not warned_lowhp and self:GetUnitCreatureId(uId) == 15989 and UnitHealth(uId) / UnitHealthMax(uId) < 0.1 then\n\t\twarned_lowhp = true\n\t\tspecWarnLowHP:Show()\n\t\ttimerAirPhase:Cancel()\n\tend\nend\n\nfunction mod:UNIT_TARGET(uId)\n\t-- Apparently there's a delay after emote where boss is actually engaged (TC has 3.5s). From S3 Naxx videos this is somewhat still accurate, so check when boss retargets raid member, which is when land phase script restarts\n\tif UnitExists(uId..\"target\") then\n\t\tLanding(self)\n\t\tself:UnregisterShortTermEvents()\n\tend\nend\n\n--[[function mod:OnSync(event)\n\tif event == \"DeepBreath\" then\n\t\ttimerIceBlast:Start()\n\t\ttimerLanding:Update(14)\n\t\tself:Schedule(14.5, Landing, self)\n\t\tspecWarnDeepBreath:Show()\n\t\tspecWarnDeepBreath:Play(\"findshelter\")\n\tend\nend]]\n"
  },
  {
    "path": "DBM-Naxx/MilitaryQuarter/Gothik.lua",
    "content": "local mod\t= DBM:NewMod(\"Gothik\", \"DBM-Naxx\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20251016221912\")\nmod:SetCreatureID(16060)\nmod:SetEncounterID(1109)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\"UNIT_DIED\"\n)\n\n--TODO, sync infoframe from classic era version?\n--(source.type = \"NPC\" and source.firstSeen = timestamp) or (target.type = \"NPC\" and target.firstSeen = timestamp)\nlocal warnWaveNow\t\t= mod:NewAnnounce(\"WarningWaveSpawned\", 3, nil, false)\nlocal warnWaveSoon\t\t= mod:NewAnnounce(\"WarningWaveSoon\", 2)\nlocal warnRiderDown\t\t= mod:NewAnnounce(\"WarningRiderDown\", 4)\nlocal warnKnightDown\t= mod:NewAnnounce(\"WarningKnightDown\", 2)\nlocal warnGateOpen\t\t= mod:NewSpellAnnounce(3366, 2)\nlocal warnPhase2\t\t= mod:NewPhaseAnnounce(2, 3)\n\nlocal timerPhase2\t\t= mod:NewTimer(277, \"TimerPhase2\", 27082, nil, nil, 6)\nlocal timerWave\t\t\t= mod:NewTimer(20, \"TimerWave\", 5502, nil, nil, 1)\nlocal timerGate\t\t\t= mod:NewTimer(155, \"Gate Opens\", 9484) -- 235s if raid on 1 side (Lordaeron: 25m [2025-10-03]@[20:52:00]) - \"?-The central gate opens!-npc:Gothik the Harvester = pull:234.95/[Stage 1/0.00] 234.95, Stage 2/42.07\"\n\nmod.vb.wave = 0\nlocal wavesNormal = {\n\t{2, L.Trainee, timer = 20},\n\t{2, L.Trainee, timer = 20},\n\t{2, L.Trainee, timer = 10},\n\t{1, L.Knight, timer = 10},\n\t{2, L.Trainee, timer = 15},\n\t{1, L.Knight, timer = 5},\n\t{2, L.Trainee, timer = 20},\n\t{1, L.Knight, 2, L.Trainee, timer = 10},\n\t{1, L.Rider, timer = 10},\n\t{2, L.Trainee, timer = 5},\n\t{1, L.Knight, timer = 15},\n\t{2, L.Trainee, 1, L.Rider, timer = 10},\n\t{2, L.Knight, timer = 10},\n\t{2, L.Trainee, timer = 10},\n\t{1, L.Rider, timer = 5},\n\t{1, L.Knight, timer = 5},\n\t{2, L.Trainee, timer = 20},\n\t{1, L.Rider, 1, L.Knight, 2, L.Trainee, timer = 15},\n\t{2, L.Trainee},\n}\n\nlocal wavesHeroic = {\n\t{3, L.Trainee, timer = 20},\n\t{3, L.Trainee, timer = 20},\n\t{3, L.Trainee, timer = 10},\n\t{2, L.Knight, timer = 10},\n\t{3, L.Trainee, timer = 15},\n\t{2, L.Knight, timer = 5},\n\t{3, L.Trainee, timer = 20},\n\t{3, L.Trainee, 2, L.Knight, timer = 10},\n\t{3, L.Trainee, timer = 10},\n\t{1, L.Rider, timer = 5},\n\t{3, L.Trainee, timer = 15},\n\t{1, L.Rider, timer = 10},\n\t{2, L.Knight, timer = 10},\n\t{1, L.Rider, timer = 10},\n\t{1, L.Rider, 3, L.Trainee, timer = 5},\n\t{1, L.Knight, 3, L.Trainee, timer = 5},\n\t{1, L.Rider, 3, L.Trainee, timer = 20},\n\t{1, L.Rider, 2, L.Knight, 3, L.Trainee},\n}\n\nlocal waves = wavesNormal\n\nlocal function StartPhase2(self)\n\tself:SetStage(2)\n\twarnPhase2:Show()\nend\n\nlocal function getWaveString(wave)\n\tlocal waveInfo = waves[wave]\n\tif #waveInfo == 2 then\n\t\treturn L.WarningWave1:format(unpack(waveInfo))\n\telseif #waveInfo == 4 then\n\t\treturn L.WarningWave2:format(unpack(waveInfo))\n\telseif #waveInfo == 6 then\n\t\treturn L.WarningWave3:format(unpack(waveInfo))\n\tend\nend\n\nlocal function NextWave(self)\n\tself.vb.wave = self.vb.wave + 1\n\twarnWaveNow:Show(self.vb.wave, getWaveString(self.vb.wave))\n\tlocal timer = waves[self.vb.wave].timer\n\tif timer then\n\t\ttimerWave:Start(timer, self.vb.wave + 1)\n\t\twarnWaveSoon:Schedule(timer - 3, self.vb.wave + 1, getWaveString(self.vb.wave + 1))\n\t\tself:Schedule(timer, NextWave, self)\n\tend\nend\n\nfunction mod:OnCombatStart()\n\tself:SetStage(1)\n\tif self:IsDifficulty(\"normal25\") then\n\t\twaves = wavesHeroic\n\telse\n\t\twaves = wavesNormal\n\tend\n\tself.vb.wave = 0\n\ttimerGate:Start()\n\ttimerPhase2:Start()\n\ttimerWave:Start(25, self.vb.wave + 1)\n\twarnWaveSoon:Schedule(22, self.vb.wave + 1, getWaveString(self.vb.wave + 1))\n\tself:Schedule(25, NextWave, self)\n--\tself:Schedule(277, StartPhase2, self)\nend\n\nfunction mod:OnTimerRecovery()\n\tif self:IsDifficulty(\"normal25\") then\n\t\twaves = wavesHeroic\n\telse\n\t\twaves = wavesNormal\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.GothikPhase2Yell or msg:find(L.GothikPhase2Yell) then\n\t\tStartPhase2(self)\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)\n\tif msg == L.GothikDoorEmote or msg:find(L.GothikDoorEmote) then\n\t\tDBM:AddSpecialEventToTranscriptorLog(\"Gothik Door Opened\")\n\t\twarnGateOpen:Show()\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tif bit.band(args.destGUID:sub(0, 5), 0x00F) == 3 then\n\t\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\t\tif cid == 16126 then -- Unrelenting Rider\n\t\t\twarnRiderDown:Show()\n\t\telseif cid == 16125 then -- Unrelenting Deathknight\n\t\t\twarnKnightDown:Show()\n\t\tend\n\tend\nend\n\n--[[function mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif (spellName == GetSpellInfo(28025) or spellName == GetSpellInfo(28026)) and self:GetStage(1) then -- Boss casts this teleportation spell, together with Yell: I have waited long enough. Now you face the harvester of souls.\n\t\tself:SetStage(2)\n\tend\nend]]\n"
  },
  {
    "path": "DBM-Naxx/MilitaryQuarter/Horsemen.lua",
    "content": "local mod\t= DBM:NewMod(\"Horsemen\", \"DBM-Naxx\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(16063, 16064, 16065, 30549)\nmod:SetEncounterID(1121)\n\nmod:RegisterCombat(\"combat\", 16063, 16064, 16065, 30549)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 28884 57467\",\n\t\"SPELL_CAST_SUCCESS 28832 28833 28834 28835 28883 53638 57466 32455\",\n\t\"SPELL_AURA_APPLIED 29061\",\n\t\"SPELL_AURA_REMOVED 29061\",\n\t\"SPELL_AURA_APPLIED_DOSE 28832 28833 28834 28835\",\n\t\"UNIT_DIED\"\n)\n\n--TODO, first marks\n--TODO, verify stuff migrated from naxx 40\nlocal warnMarkSoon\t\t\t\t= mod:NewAnnounce(\"WarningMarkSoon\", 1, 28835, false, nil, nil, 28835)\nlocal warnMeteor\t\t\t\t= mod:NewSpellAnnounce(57467, 4)\nlocal warnVoidZone\t\t\t\t= mod:NewTargetNoFilterAnnounce(28863, 3)--Only warns for nearby targets, to reduce spam\nlocal warnHolyWrath\t\t\t\t= mod:NewTargetNoFilterAnnounce(28883, 3, nil, false)\nlocal warnBoneBarrier\t\t\t= mod:NewTargetNoFilterAnnounce(29061, 2)\n\nlocal specWarnMarkOnPlayer\t\t= mod:NewSpecialWarning(\"SpecialWarningMarkOnPlayer\", nil, nil, nil, 1, 6, nil, nil, 28835)\nlocal specWarnVoidZone\t\t\t= mod:NewSpecialWarningYou(28863, nil, nil, nil, 1, 2)\nlocal yellVoidZone\t\t\t\t= mod:NewYell(28863)\n\nlocal timerLadyMark\t\t\t\t= mod:NewNextTimer(16, 28833, nil, nil, nil, 3)\nlocal timerZeliekMark\t\t\t= mod:NewNextTimer(16, 28835, nil, nil, nil, 3)\nlocal timerBaronMark\t\t\t= mod:NewNextTimer(15, 28834, nil, nil, nil, 3)\nlocal timerThaneMark\t\t\t= mod:NewNextTimer(15, 28832, nil, nil, nil, 3)\nlocal timerMeteorCD\t\t\t\t= mod:NewCDTimer(11.1, 57467, nil, nil, nil, 3, nil, nil, true) -- REVIEW! ~10s variance? Added \"keep\" arg (25man Lordaeron 2022/10/16 wipe || 25man Lordaeron 2022/10/16 kill) - 17.8, 17.7, 17.8, 17.7, 15.5 || 17.7, 15.5, 17.8, 17.9, 11.1, 17.7, 13.4, 20.0, 13.3, 20.0\n--local timerVoidZoneCD\t\t\t= mod:NewCDTimer(12.9, 28863, nil, nil, nil, 3)-- 12.9-16\nlocal timerHolyWrathCD\t\t\t= mod:NewCDTimer(13, 28883, nil, nil, nil, 3)\nlocal timerBoneBarrier\t\t\t= mod:NewTargetTimer(20, 29061, nil, nil, nil, 5)\n\nmod:AddRangeFrameOption(\"12\")\n\nmod:SetBossHealthInfo(\n\t16064, L.Korthazz,\t-- Thane\n\t30549, L.Rivendare,\t-- Baron\n\t16065, L.Blaumeux,\t-- Lady\n\t16063, L.Zeliek\t\t-- Zeliek\n)\n\nmod.vb.markCount = 0\n\n-- REVIEW-Have two logs where this is NOT verified! Still 15s timer on next meteor when he skips one (usually on tank swaps)\n--[[local function MeteorCast(self)\n\tself:Unschedule(MeteorCast)\n\ttimerMeteorCD:Restart()\n\tself:Schedule(15, MeteorCast, self)\nend]]\n\nfunction mod:OnCombatStart()\n\tself.vb.markCount = 0\n\ttimerLadyMark:Start()\n\ttimerZeliekMark:Start()\n\ttimerBaronMark:Start()\n\ttimerThaneMark:Start()\n\twarnMarkSoon:Schedule(12)\n\ttimerMeteorCD:Start()\n\ttimerHolyWrathCD:Start(10.1) -- REVIEW! ~2s variance? (25man Lordaeron 2022/10/16 wipe || 25man Lordaeron 2022/10/16 kill) - 12.3 || 10.1\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(12)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(28884, 57467) then\n\t\twarnMeteor:Show()\n\t\ttimerMeteorCD:Start()\n--\t\tMeteorCast(self)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif args:IsSpellID(28832, 28833, 28834, 28835) and self:AntiSpam(5, spellId) then\n\t\tself.vb.markCount = self.vb.markCount + 1\n\t\tif spellId == 28833 then -- Lady Mark\n\t\t\ttimerLadyMark:Start(15)\n\t\telseif spellId == 28835 then -- Zeliek Mark\n\t\t\ttimerZeliekMark:Start(15)\n\t\telseif spellId == 28834 then -- Baron Mark\n\t\t\ttimerBaronMark:Start()\n\t\telseif spellId == 28832 then -- Thane Mark\n\t\t\ttimerThaneMark:Start()\n\t\tend\n\t\twarnMarkSoon:Schedule(12)\n\telseif args.spellId == 28863 then\n--\t\ttimerVoidZoneCD:Start()\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnVoidZone:Show()\n\t\t\tspecWarnVoidZone:Play(\"targetyou\")\n\t\t\tyellVoidZone:Yell()\n\t\telseif self:CheckNearby(12, args.destName) then\n\t\t\twarnVoidZone:Show(args.destName)\n\t\tend\n\telseif args:IsSpellID(28883, 53638, 57466, 32455) then\n\t\twarnHolyWrath:Show(args.destName)\n\t\ttimerHolyWrathCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 29061 then\n\t\twarnBoneBarrier:Show(args.destName)\n\t\ttimerBoneBarrier:Start(20, args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 29061 then\n\t\ttimerBoneBarrier:Stop(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED_DOSE(args)\n\tif args:IsSpellID(28832, 28833, 28834, 28835) and args:IsPlayer() then\n\t\tlocal amount = args.amount or 1\n\t\tif amount >= 4 then\n\t\t\tspecWarnMarkOnPlayer:Show(args.spellName, amount)\n\t\t\tspecWarnMarkOnPlayer:Play(\"stackhigh\")\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 16064 then\n\t\ttimerThaneMark:Cancel()\n\t\ttimerMeteorCD:Cancel()\n--\t\tself:Unschedule(MeteorCast)\n\telseif cid == 30549 then\n\t\ttimerBaronMark:Cancel()\n\telseif cid == 16065 then\n\t\ttimerLadyMark:Cancel()\n\telseif cid == 16063 then\n\t\ttimerZeliekMark:Cancel()\n\tend\nend\n"
  },
  {
    "path": "DBM-Naxx/MilitaryQuarter/Razuvious.lua",
    "content": "local mod\t= DBM:NewMod(\"Razuvious\", \"DBM-Naxx\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20251018121532\")\nmod:SetCreatureID(16061)\nmod:SetEncounterID(1113)\n\nmod:RegisterCombat(\"combat_yell\", L.Yell1, L.Yell2, L.Yell3, L.Yell4)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 55543 29107 29060 29061\",\n\t\"SPELL_AURA_APPLIED 605\",\n\t\"UNIT_DIED\"\n)\n\nlocal warnShoutNow\t\t= mod:NewSpellAnnounce(29107, 1, \"Interface\\\\Icons\\\\Ability_Warrior_Rampage\")\nlocal warnShoutSoon\t\t= mod:NewSoonAnnounce(29107, 3, \"Interface\\\\Icons\\\\Ability_Warrior_Rampage\")\nlocal warnShieldWall\t= mod:NewAnnounce(\"WarningShieldWallSoon\", 3, 29061, nil, nil, nil, 29061)\n\nlocal timerShout\t\t= mod:NewVarTimer(\"v14.92-15.07\", 29107, nil, nil, nil, 2, \"Interface\\\\Icons\\\\Ability_Warrior_Rampage\") -- SPELL_CAST_SUCCESS: (Lordaeron: 25m [2025-10-03]@[20:47:27]) - \"Disrupting Shout-29107-npc:16061-586 = pull:14.92, 15.07, 15.07, 15.06, 14.99\"\nlocal timerTaunt\t\t= mod:NewCDTimer(20, 29060, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON) -- UNIT_SPELLCAST_SUCCEEDED: (Lordaeron: 25m [2025-10-03]@[20:47:27]) - \"Taunt-npc:16803-590 = pull:13.62, 23.36, 20.47, 20.51\"\nlocal timerShieldWall\t= mod:NewBuffActiveTimer(20, 29061, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON) -- This is 20s of buff active duration, but the ability CD is 30s. UNIT_SPELLCAST_SUCCEEDED: (Lordaeron: 25m [2025-10-03]@[20:47:27]) - \"Bone Barrier-npc:16803-590 = pull:17.66, 31.99, 31.40\"\nlocal timerMindControl\t= mod:NewBuffActiveTimer(60, 605, nil, nil, nil, 6)\n\nfunction mod:OnCombatStart(delay)\n\ttimerShout:Start(-delay)\n\twarnShoutSoon:Schedule(11-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif args:IsSpellID(55543, 29107) then  -- Disrupting Shout\n\t\ttimerShout:Start()\n\t\twarnShoutNow:Show()\n\t\twarnShoutSoon:Schedule(11)\n\telseif spellId == 29060 then -- Taunt\n\t\ttimerTaunt:Start(nil, args.sourceGUID)\n\telseif spellId == 29061 then -- ShieldWall\n\t\ttimerShieldWall:Start(nil, args.sourceGUID)\n\t\twarnShieldWall:Schedule(25)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 605 and args:IsSrcTypePlayer() then -- Mind Control\n\t\ttimerMindControl:Start(nil, args.sourceName)\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal guid = args.destGUID\n\tlocal cid = self:GetCIDFromGUID(guid)\n\tif cid == 16803 then--Deathknight Understudy\n\t\ttimerTaunt:Stop(args.destGUID)\n\t\ttimerShieldWall:Stop(args.destGUID)\n\tend\nend\n"
  },
  {
    "path": "DBM-Naxx/PlagueQuarter/Heigan.lua",
    "content": "local mod\t= DBM:NewMod(\"Heigan\", \"DBM-Naxx\", 3)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15936)\nmod:SetEncounterID(1112)\n\nmod:RegisterCombat(\"combat_yell\", L.Pull)\n\nlocal warnTeleportSoon\t\t\t= mod:NewAnnounce(\"WarningTeleportSoon\", 2, 46573)\nlocal warnTeleportNow\t\t\t= mod:NewAnnounce(\"WarningTeleportNow\", 3, 46573)\nlocal warnPlagueCloudEnd\t\t= mod:NewEndAnnounce(30122, 1)\n\nlocal timerTeleport\t\t\t\t= mod:NewTimer(90, \"TimerTeleport\", 46573, nil, nil, 6)\nlocal timerPlagueCloud\t\t\t= mod:NewBuffActiveTimer(45, 30122, nil, nil, nil, 6)\n\nfunction mod:DancePhase()\n\ttimerPlagueCloud:Start()\n\twarnTeleportSoon:Schedule(35, 10)\n\twarnPlagueCloudEnd:Schedule(45)\n\tself:ScheduleMethod(45, \"BackInRoom\", 88)\n\tself:SetStage(2)\nend\n\nfunction mod:BackInRoom(time)\n\ttimerTeleport:Show(time)\n\twarnTeleportSoon:Schedule(time - 15, 15)\n\twarnTeleportNow:Schedule(time)\n\tself:ScheduleMethod(time, \"DancePhase\")\n\tself:SetStage(1)\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tself:BackInRoom(90 - delay)\nend\n"
  },
  {
    "path": "DBM-Naxx/PlagueQuarter/Loatheb.lua",
    "content": "local mod\t= DBM:NewMod(\"Loatheb\", \"DBM-Naxx\", 3)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(16011)\nmod:SetEncounterID(1115)\n\nmod:RegisterCombat(\"combat\")--Maybe change to a yell later so pull detection works if you chain pull him from tash gauntlet\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 29234 29204 55052 30281 55593\",\n\t\"SPELL_AURA_APPLIED 29185 29194 29196 29198\",-- 29184 29195 29197 29199\n\t\"SPELL_AURA_REMOVED 29185 29194 29196 29198\",-- 29184 29195 29197 29199\n\t\"SPELL_DAMAGE\",\n\t\"SWING_DAMAGE\",\n\t\"UNIT_DIED\"\n)\n\n--TODO, verify infoframe and spellIds ported from Classic as accurate, they didn't have to be accurate in classic since it just matched name, but here it does\n--Also, 55593 is used instead of classic ID since classic ID has no tooltip\nlocal warnSporeNow\t= mod:NewCountAnnounce(32329, 2)\nlocal warnSporeSoon\t= mod:NewSoonAnnounce(32329, 1)\nlocal warnDoomNow\t= mod:NewSpellAnnounce(29204, 3)\nlocal warnRemoveCurse\t\t= mod:NewSpellAnnounce(30281, 3)\nlocal warnHealSoon\t= mod:NewAnnounce(\"WarningHealSoon\", 4, 48071, nil, nil, nil, 55593)\nlocal warnHealNow\t= mod:NewAnnounce(\"WarningHealNow\", 1, 48071, false, nil, nil, 55593)\n\nlocal timerSpore\t= mod:NewNextTimer(36, 32329, nil, nil, nil, 5, 42524, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerDoom\t\t= mod:NewNextTimer(180, 29204, nil, nil, nil, 2)\n--local timerRemoveCurseCD\t= mod:NewNextTimer(30.8, 30281, nil, nil, nil, 5)\nlocal timerAura\t\t= mod:NewBuffActiveTimer(17, 55593, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON)\n\nmod:AddInfoFrameOption(55593, \"Tank|Healer\")\nmod:AddBoolOption(\"SporeDamageAlert\", false)\nif not DBM.Options.GroupOptionsBySpell then\n\tmod:AddMiscLine(DBM_CORE_L.OPTION_CATEGORY_DROPDOWNS)\nend\nmod:AddDropdownOption(\"CorruptedSorting\", {\"Alphabetical\", \"Duration\"}, \"Alphabetical\", \"misc\", nil, 55593)\n\nmod.vb.doomCounter\t= 0\nmod.vb.sporeTimer\t= 36\nmod.vb.sporeCounter = 0\nlocal hadCorrupted\t= {}\n\nlocal updateInfoFrame\ndo\n\tlocal ipairs, pairs, tostring = ipairs, pairs, tostring\n\tlocal mfloor, mmax, tinsert, tsort, twipe = math.floor, math.max, table.insert, table.sort, table.wipe\n\tlocal lines, sortedLines, corruptKeys = {}, {}, {}\n\tlocal function addLine(key, value)\n\t\t-- sort by insertion order\n\t\tlines[key] = value\n\t\tsortedLines[#sortedLines + 1] = key\n\tend\n\tupdateInfoFrame = function()\n\t\ttwipe(lines)\n\t\ttwipe(sortedLines)\n\t\ttwipe(corruptKeys)\n\n\t\tlocal refreshTime = GetTime()\n\n\t\tfor name, _ in pairs(hadCorrupted) do\n\t\t\ttinsert(corruptKeys, name)\n\t\tend\n\t\tif mod.Options.CorruptedSorting == \"Duration\" then\n\t\t\ttsort(corruptKeys, function (a, b) return (hadCorrupted[a] or refreshTime) > (hadCorrupted[b] or refreshTime) end)\n\t\telse\n\t\t\ttsort(corruptKeys)\n\t\tend\n\n\t\tfor _, name in ipairs(corruptKeys) do\n\t\t\taddLine(name, tostring(mfloor(mmax(hadCorrupted[name] - refreshTime, 0))))\n\t\tend\n\n\t\treturn lines, sortedLines\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.doomCounter = 0\n\tself.vb.sporeCounter = 0\n--\ttimerRemoveCurseCD:Start(3 - delay)\n\tif self:IsDifficulty(\"normal25\") then\n\t\tself.vb.sporeTimer = 15\n\t\ttimerDoom:Start(90 - delay, 1)\n\telse\n\t\tself.vb.sporeTimer = 36\n\t\ttimerDoom:Start(120 - delay, 1)\n\tend\n\ttimerSpore:Start(self.vb.sporeTimer - delay, 1)\n\twarnSporeSoon:Schedule(self.vb.sporeTimer - 5 - delay)\n\n\tlocal startTime = GetTime()\n\ttable.wipe(hadCorrupted)\n\tfor unit in DBM:GetGroupMembers() do\n\t\tlocal _, cls = UnitClass(unit)\n\t\tif not UnitIsDeadOrGhost(unit) and (cls == \"DRUID\" or cls == \"PALADIN\" or cls == \"PRIEST\" or cls == \"SHAMAN\") then\n\t\t\thadCorrupted[UnitName(unit)] = startTime\n\t\tend\n\tend\n\tif self.Options.InfoFrame and not DBM.InfoFrame:IsShown() then\n\t\tDBM.InfoFrame:SetHeader(DBM:GetSpellInfo(55593))\n\t\tDBM.InfoFrame:Show(25, \"function\", updateInfoFrame, false, false)\n\t\tDBM.InfoFrame:SetColumns(2)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif DBM.InfoFrame:IsShown() then\n\t\tDBM.InfoFrame:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 29234 then\n\t\tself.vb.sporeCounter = self.vb.sporeCounter + 1\n\t\ttimerSpore:Start(self.vb.sporeTimer, self.vb.sporeCounter + 1)\n\t\twarnSporeNow:Show(self.vb.sporeCounter)\n\t\twarnSporeSoon:Schedule(self.vb.sporeTimer - 5)\n\telseif args:IsSpellID(29204, 55052) then  -- Inevitable Doom\n\t\tself.vb.doomCounter = self.vb.doomCounter + 1\n\t\tlocal timer = 30\n\t\tif self.vb.doomCounter >= 7 then\n\t\t\tif self.vb.doomCounter % 2 == 0 then timer = 17\n\t\t\telse timer = 12 end\n\t\tend\n\t\twarnDoomNow:Show(self.vb.doomCounter)\n\t\ttimerDoom:Start(timer, self.vb.doomCounter + 1)\n\telseif spellId == 30281 then\n\t\twarnRemoveCurse:Show()\n--\t\ttimerRemoveCurseCD:Start()\n\telseif spellId == 55593 then\n\t\ttimerAura:Start()\n\t\twarnHealSoon:Schedule(14)\n\t\twarnHealNow:Schedule(17)\n\tend\nend\n\n--Spore loser function. Credits to Forte guild and their old discontinued dbm plugins. Sad to see that guild disband, best of luck to them!\nfunction mod:SPELL_DAMAGE(_, sourceName, _, _, destName, _, spellId, _, _, amount)\n\tif self.Options.SporeDamageAlert and destName == \"Spore\" and spellId ~= 62124 and self:IsInCombat() then\n\t\tSendChatMessage(sourceName..\", You are damaging a Spore!!! (\"..amount..\" damage)\", \"RAID_WARNING\")\n\t\tSendChatMessage(sourceName..\", You are damaging a Spore!!! (\"..amount..\" damage)\", \"WHISPER\", nil, sourceName)\n\tend\nend\n\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(29194, 29196, 29185, 29198) and DBM:UnitDebuff(args.destName, 29184, 29195, 29197, 29199) then\n\t\thadCorrupted[args.destName] = GetTime() + 60\n\t\tif args:IsPlayer() then\n\t\t\twarnHealSoon:Schedule(55)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(29194, 29196, 29185, 29198) and not DBM:UnitDebuff(args.destName, 29184, 29195, 29197, 29199) then\n\t\tif args:IsPlayer() then\n\t\t\twarnHealNow:Show()\n\t\tend\n\tend\nend\n\nfunction mod:SWING_DAMAGE(_, sourceName, _, _, destName, _, _, _, _, amount)\n\tif self.Options.SporeDamageAlert and destName == \"Spore\" and self:IsInCombat() then\n\t\tSendChatMessage(sourceName..\", You are damaging a Spore!!! (\"..amount..\" damage)\", \"RAID_WARNING\")\n\t\tSendChatMessage(sourceName..\", You are damaging a Spore!!! (\"..amount..\" damage)\", \"WHISPER\", nil, sourceName)\n\tend\nend\n\n--because in all likelyhood, pull detection failed (cause 90s like to charge in there trash and all and pull it\n--We unschedule the pre warnings on death as a failsafe\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 16011 then\n\t\twarnSporeSoon:Cancel()\n\t\twarnHealSoon:Cancel()\n\t\twarnHealNow:Cancel()\n\telseif hadCorrupted[args.destName] then\n\t\thadCorrupted[args.destName] = nil\n\tend\nend\n"
  },
  {
    "path": "DBM-Naxx/PlagueQuarter/Noth.lua",
    "content": "local mod\t= DBM:NewMod(\"Noth\", \"DBM-Naxx\", 3)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal GetSpellInfo = GetSpellInfo\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15954)\nmod:SetEncounterID(1117)\n\nmod:RegisterCombat(\"combat_yell\", L.Pull)\n\nmod:RegisterEvents(\n\t\"SPELL_CAST_SUCCESS 29213 54835 29212 29208 29209 29210 29211\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1\"\n)\n\nlocal warnTeleportNow\t= mod:NewAnnounce(\"WarningTeleportNow\", 3, 46573, nil, nil, nil, 29216)\nlocal warnTeleportSoon\t= mod:NewAnnounce(\"WarningTeleportSoon\", 1, 46573, nil, nil, nil, 29216)\nlocal warnCurse\t\t\t= mod:NewSpellAnnounce(29213, 2)\nlocal warnBlinkSoon\t\t= mod:NewSoonAnnounce(29208, 1)\nlocal warnBlink\t\t\t= mod:NewSpellAnnounce(29208, 3)\n\nlocal specWarnAdds\t\t= mod:NewSpecialWarningAdds(29247, \"-Healer\", nil, nil, 1, 2)\n\nlocal timerTeleport\t\t= mod:NewTimer(90, \"TimerTeleport\", 46573, nil, nil, 6, nil, nil, nil, nil, nil, nil, nil, 29216)\nlocal timerTeleportBack\t= mod:NewTimer(70, \"TimerTeleportBack\", 46573, nil, nil, 6, nil, nil, nil, nil, nil, nil, nil, 29231)\nlocal timerCurseCD\t\t= mod:NewCDTimer(56.7, 29213, nil, nil, nil, 5, nil, DBM_COMMON_L.CURSE_ICON) -- REVIEW! variance? (25man Frostmourne 2022/05/25 || 25man Lordaeron 2022/10/16) -  56.7, 99.1! || 57.4\nlocal timerAddsCD\t\t= mod:NewAddsTimer(30, 29247, nil, \"-Healer\")\nlocal timerBlink\t\t= mod:NewNextTimer(30, 29208) -- (25N Lordaeron 2022/10/16) - 30.1, 30.0\n\n--local timerBerserk\t\t= mod:NewBerserkTimer(665.07) -- spellId = 27680\n\nmod:GroupSpells(29216, 29231) -- Teleport, Teleport Return\n\nmod.vb.teleCount = 0\nmod.vb.addsCount = 0\nmod.vb.curseCount = 0\nmod.vb.blinkCount = 0\nlocal teleportBalconyName = GetSpellInfo(29216) -- Teleport\nlocal teleportBackName = GetSpellInfo(29231) -- Teleport Return\n\n--[[function mod:Balcony()\n\tself.vb.teleCount = self.vb.teleCount + 1\n\tself.vb.addsCount = 0\n\ttimerCurseCD:Stop()\n\ttimerAddsCD:Stop()\n\ttimerBlink:Stop()\n\tlocal timer\n\tif self.vb.teleCount == 1 then\n\t\ttimer = 70\n\t\ttimerAddsCD:Start(5)--Always 5\n\telseif self.vb.teleCount == 2 then\n\t\ttimer = 97\n\t\ttimerAddsCD:Start(5)--Always 5\n\telseif self.vb.teleCount == 3 then\n\t\ttimer = 126\n\t\ttimerAddsCD:Start(5)--Always 5\n\telse\n\t\ttimer = 55\n\tend\n\ttimerTeleportBack:Start(timer)\n\twarnTeleportSoon:Schedule(timer - 10)\n\twarnTeleportNow:Schedule(timer)\n--\tself:ScheduleMethod(timer, \"BackInRoom\")\nend\n\nfunction mod:BackInRoom(delay)\n\tdelay = delay or 0\n\tself:SetStage(0)\n\tlocal timer\n\tif self.vb.phase == 1 then timer = 90 - delay\n\telseif self.vb.phase == 2 then timer = 110 - delay\n\telseif self.vb.phase == 3 then timer = 180 - delay\n\telse return end\n\ttimerTeleport:Show(timer)\n\twarnTeleportSoon:Schedule(timer - 10)\n\twarnTeleportNow:Schedule(timer)\n\tself:ScheduleMethod(timer, \"Balcony\")\nend]]\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.phase = 0\n\tself.vb.teleCount = 0\n\tself.vb.addsCount = 0\n\tself.vb.curseCount = 0\n\tself.vb.blinkCount = 0\n\ttimerAddsCD:Start(-delay)\n\ttimerCurseCD:Start(15-delay) -- REVIEW! variance? (25man Lordaeron 2022/10/16) - 15.0\n\ttimerBlink:Start(23.8-delay) -- REVIEW! variance? (25man Lordaeron 2022/10/16) - 23.8\n\twarnBlinkSoon:Schedule(18.8-delay)\n\ttimerTeleport:Start(90-delay)\n\twarnTeleportSoon:Schedule(80-delay)\n--\tself:ScheduleMethod(90.8-delay, \"Balcony\")\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(29213, 54835) then\t-- Curse of the Plaguebringer\n\t\tself.vb.curseCount = self.vb.curseCount + 1\n\t\twarnCurse:Show()\n\t\tif self.vb.teleCount == 2 and self.vb.curseCount == 2 or self.vb.teleCount == 3 and self.vb.curseCount == 1 then\n\t\t\ttimerCurseCD:Start(67)--Niche cases it's 67 and not 53-55\n\t\telseif self.vb.curseCount < 2 then\n\t\t\ttimerCurseCD:Start()\n\t\tend\n--\telseif args.spellId == 29212 then--Cripple that's always cast when he teleports away\n\n\telseif args:IsSpellID(29208, 29209, 29210, 29211) and args:GetDestCreatureID() == 15954 then -- Blink\n\t\tself.vb.blinkCount = self.vb.blinkCount + 1\n\t\twarnBlink:Show()\n\t\tif self.vb.blinkCount < 3 then\n\t\t\ttimerBlink:Start()\n\t\t\twarnBlinkSoon:Schedule(25)\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)\n\tif msg == L.Adds or msg:find(L.Adds) then\n\t\tself:SendSync(\"Adds\")--Syncing to help unlocalized clients\n\telseif msg == L.AddsTwo or msg:find(L.AddsTwo) then\n\t\tself:SendSync(\"AddsTwo\")--Syncing to help unlocalized clients\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName ==  teleportBalconyName then -- Teleport\n\t\tself.vb.teleCount = self.vb.teleCount + 1\n\t\tDBM:AddSpecialEventToTranscriptorLog(format(\"Teleport %d\", self.vb.teleCount))\n\t\tself.vb.addsCount = 0\n\t\ttimerCurseCD:Stop()\n\t\ttimerAddsCD:Stop()\n\t\ttimerBlink:Stop()\n\t\twarnBlinkSoon:Cancel()\n\t\tlocal timer\n\t\tif self.vb.teleCount == 1 then\n\t\t\ttimer = 70\n\t\t\ttimerAddsCD:Start(5)--Always 5\n\t\telseif self.vb.teleCount == 2 then\n\t\t\ttimer = 97\n\t\t\ttimerAddsCD:Start(5)--Always 5\n\t\telseif self.vb.teleCount == 3 then\n\t\t\ttimer = 126\n\t\t\ttimerAddsCD:Start(5)--Always 5\n\t\telse\n\t\t\ttimer = 55\n\t\tend\n\t\ttimerTeleportBack:Start(timer)\n\t\twarnTeleportSoon:Schedule(timer - 10)\n\t\twarnTeleportNow:Show()\n\telseif spellName ==  teleportBackName then -- Teleport Return\n\t\tDBM:AddSpecialEventToTranscriptorLog(\"Teleport Return\")\n\t\tself.vb.addsCount = 0\n\t\tself.vb.curseCount = 0\n\t\ttimerAddsCD:Stop()\n\t\tlocal timer\n\t\tif self.vb.teleCount == 1 then\n\t\t\ttimer = 109\n\t\t\ttimerAddsCD:Start(10)\n\t\telseif self.vb.teleCount == 2 then\n\t\t\ttimer = 173\n\t\t\ttimerAddsCD:Start(17)\n\t\telseif self.vb.teleCount == 3 then\n\t\t\ttimer = 93\n\t\telse\n\t\t\ttimer = 35\n\t\tend\n\t\ttimerTeleport:Start(timer)\n\t\twarnTeleportSoon:Schedule(timer - 10)\n\t\twarnTeleportNow:Show()\n\t\tif self.vb.teleCount == 4 then--11-12 except after 4th return it's 17\n\t\t\ttimerCurseCD:Start(17)--verify consistency though\n\t\telse\n\t\t\ttimerCurseCD:Start(11)\n\t\tend\n--\t\tself:ScheduleMethod(timer, \"Balcony\")\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif not self:IsInCombat() then return end\n\tif msg == \"Adds\" then--Boss Grounded\n\t\tself.vb.addsCount = self.vb.addsCount + 1\n\t\tspecWarnAdds:Show()\n\t\tspecWarnAdds:Play(\"killmob\")\n\t\tif self.vb.teleCount < 4 then\n\t\t\tif self.vb.teleCount == 0 and self.vb.addsCount < 3 then--3 waves 30 seconds apart\n\t\t\t\ttimerAddsCD:Start(30)\n\t\t\telseif self.vb.teleCount == 1 then--3 waves 34 then 47 seconds apart\n\t\t\t\tif self.vb.addsCount == 1 then\n\t\t\t\t\ttimerAddsCD:Start(33.9)\n\t\t\t\telseif self.vb.addsCount == 1 then\n\t\t\t\t\ttimerAddsCD:Start(47.3)\n\t\t\t\tend\n\t\t\telseif self.vb.teleCount == 2 then--30, 32, 32, 30\n\t\t\t\tif self.vb.addsCount == 1 or self.vb.addsCount == 4 then\n\t\t\t\t\ttimerAddsCD:Start(30)\n\t\t\t\telseif self.vb.addsCount == 2 or self.vb.addsCount == 3 then\n\t\t\t\t\ttimerAddsCD:Start(32)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\telseif msg == \"AddsTwo\" then--Boss away\n\t\tself.vb.addsCount = self.vb.addsCount + 1\n\t\tspecWarnAdds:Show()\n\t\tspecWarnAdds:Play(\"killmob\")\n\t\t--He won't do anymore adds when teleported way on 4th and later teleport\n\t\t--He'll never do more than 2 waves\n\t\tif self.vb.teleCount < 4 and self.vb.addsCount == 1 then\n\t\t\tif self.vb.teleCount == 3 then\n\t\t\t\ttimerAddsCD:Start(60)--2 big waves, 60 seconds apart\n\t\t\telseif self.vb.teleCount == 2 then--2 medium waves 46 seconds apart\n\t\t\t\ttimerAddsCD:Start(46)\n\t\t\telse--2 smaller waves 30 seconds apart\n\t\t\t\ttimerAddsCD:Start(30)\n\t\t\tend\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Naxx/localization.cn.lua",
    "content": "﻿-- author: callmejames @《凤凰之翼》 一区藏宝海湾\n-- commit by: yaroot <yaroot AT gmail.com>\n-- Mini Dragon(projecteurs AT gmail.com) Brilla@金色平原\n-- Last update: 2019/08/22\n\nif GetLocale() ~= \"zhCN\" then return end\n\nlocal L\n\n-------------------\n--  Anub'Rekhan  --\n-------------------\nL = DBM:GetModLocalization(\"Anub'Rekhan\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"阿努布雷坎\"\n})\n\nL:SetOptionLocalization({\n\tArachnophobiaTimer\t\t= \"为蜘蛛克星(成就)显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t\t= \"蜘蛛克星\",\n\tPull1\t\t\t\t\t= \"对，跑吧！那样伤口出血就更多了！\",\n\tPull2\t\t\t\t\t= \"一些小点心……\",\n--\tPull3\t\t\t\t\t= \"你们逃不掉的。\"\n})\n\n----------------------------\n--  Grand Widow Faerlina  --\n----------------------------\nL = DBM:GetModLocalization(\"Faerlina\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"黑女巫法琳娜\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t\t= \"黑女巫的拥抱5秒后结束\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t\t= \"为黑女巫的拥抱结束显示提前警报\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t\t= \"跪下求饶吧，诺夫！\"--Not actually pull trigger, but often said on pull\n})\n\n---------------\n--  Maexxna  --\n---------------\nL = DBM:GetModLocalization(\"Maexxna\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t\t= \"迈克斯纳\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t\t= \"迈克斯纳之子 5秒后出现\",\n\tWarningSpidersNow\t\t= \"迈克斯纳之子出现了\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t\t\t\t= \"下一次 迈克斯纳之子\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t\t= \"为迈克斯纳之子显示提前警报\",\n\tWarningSpidersNow\t\t= \"为迈克斯纳之子显示警报\",\n\tTimerSpider\t\t\t\t= \"为下一次迈克斯纳之子显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t\t= \"蜘蛛克星\"\n})\n\n------------------------------\n--  Noth the Plaguebringer  --\n------------------------------\nL = DBM:GetModLocalization(\"Noth\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t\t= \"药剂师诺斯\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t\t= \"传送\",\n\tWarningTeleportSoon\t\t= \"10秒后 传送\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t\t= \"传送\",\n\tTimerTeleportBack\t\t= \"传送回来\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t\t= \"为传送显示警报\",\n\tWarningTeleportSoon\t\t= \"为传送显示预警\",\n\tTimerTeleport\t\t\t= \"为传送显示计时条\",\n\tTimerTeleportBack\t\t= \"为传送回来显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"死吧，入侵者！\",\n\tAdds\t\t\t\t= \"召唤出骷髅战士！\",\n\tAddsTwo\t\t\t\t= \"召唤出更多的骷髅！\"\n})\n\n--------------------------\n--  Heigan the Unclean  --\n--------------------------\nL = DBM:GetModLocalization(\"Heigan\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"肮脏的希尔盖\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t\t= \"传送\",\n\tWarningTeleportSoon\t\t= \"%d秒后 传送\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t\t= \"传送\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t\t= \"为传送显示警报\",\n\tWarningTeleportSoon\t\t= \"为传送显示提前警报\",\n\tTimerTeleport\t\t\t= \"为传送显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"你是我的了。\"\n})\n\n---------------\n--  Loatheb  --\n---------------\nL = DBM:GetModLocalization(\"Loatheb\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"洛欧塞布\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t\t\t= \"3秒后可以治疗\",\n\tWarningHealNow\t\t\t= \"现在治疗\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t\t= \"为3秒后可以治疗显示提前警报\",\n\tWarningHealNow\t\t\t= \"为现在治疗显示警报\",\n\tSporeDamageAlert\t\t= \"在团队中提示谁杀死了孢子并发送悄悄话给该玩家\\n(需要团长或助理权限)\",\n\tCorruptedSorting\t\t= \"Set infoframe sorting behaviour for $spell:55593\", -- translation missing\n\tAlphabetical\t\t\t= \"Sort in alphabetical order\", -- translation missing\n\tDuration\t\t\t\t= \"Sort by duration\" -- translation missing\n})\n\n-----------------\n--  Patchwerk  --\n-----------------\nL = DBM:GetModLocalization(\"Patchwerk\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"帕奇维克\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful\t\t= \"公布仇恨打击的目标到团队频道\\n(需要团长或助理权限)\"\n})\n\nL:SetMiscLocalization({\n\tyell1\t\t\t\t= \"帕奇维克要跟你玩！\",\n\tyell2\t\t\t\t= \"帕奇维克是克尔苏加德的战神！\",\n\tHatefulStrike\t\t= \"仇恨打击 --> %s [%s]\"\n})\n\n-----------------\n--  Grobbulus  --\n-----------------\nL = DBM:GetModLocalization(\"Grobbulus\")\n\nL:SetGeneralLocalization({\n\tname = \"格罗布鲁斯\"\n})\n\n-------------\n--  Gluth  --\n-------------\nL = DBM:GetModLocalization(\"Gluth\")\n\nL:SetGeneralLocalization({\n\tname = \"格拉斯\"\n})\n\n----------------\n--  Thaddius  --\n----------------\nL = DBM:GetModLocalization(\"Thaddius\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"塔迪乌斯\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t\t= \"极性变为%s\",\n\tWarningChargeNotChanged\t\t= \"极性没有改变\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t\t= \"当你的极性改变时显示特别警报\",\n\tWarningChargeNotChanged\t\t= \"当你的极性没有改变时显示特别警报\",\n\tArrowsEnabled\t\t\t= \"显示箭头 (正常 \\\"两边\\\" 站位打法)\",\n\tArrowsRightLeft\t\t\t= \"显示左/右箭头 给 \\\"四角\\\" 站位打法 (如果极性改变显示左箭头, 没变显示右箭头)\",\n\tArrowsInverse\t\t\t= \"显示反转的 \\\"四角\\\" 站位打法 (如果极性改变显示右箭头, 没变显示左箭头)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t\t\t\t= \"斯塔拉格要碾碎你！\",\n\tEmote\t\t\t\t= \"%s超载了！\",\n\tEmote2\t\t\t\t= \"电磁圈超载了！\",\n\tBoss1\t\t\t\t= \"费尔根\",\n\tBoss2\t\t\t\t= \"斯塔拉格\",\n\tCharge1\t\t\t\t= \"负极\",\n\tCharge2\t\t\t\t= \"正极\"\n})\n\n----------------------------\n--  Instructor Razuvious  --\n----------------------------\nL = DBM:GetModLocalization(\"Razuvious\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"教官拉苏维奥斯\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t\t= \"5秒后 盾墙结束\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t\t= \"为盾墙结束显示提前警报\"\n})\n\nL:SetMiscLocalization({\n\tYell1\t\t\t\t= \"仁慈无用！\",\n\tYell2\t\t\t\t= \"练习时间到此为止！都拿出真本事来！\",\n\tYell3\t\t\t\t= \"按我教导的去做！\",\n\tYell4\t\t\t\t= \"绊腿……有什么问题吗？\"\n})\n\n----------------------------\n--  Gothik the Harvester  --\n----------------------------\nL = DBM:GetModLocalization(\"Gothik\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"收割者戈提克\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t\t= \"3秒后 第%d波: %s\",\n\tWarningWaveSpawned\t\t= \"第%d波: %s 出现了\",\n\tWarningRiderDown\t\t= \"骑兵已死亡\",\n\tWarningKnightDown\t\t= \"死亡骑士已死亡\",\n\tWarningPhase2\t\t\t= \"第二阶段\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t\t\t= \"第 %d 波\",\n\tTimerPhase2\t\t\t= \"第2阶段\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"为下一波小怪显示计时条\",\n\tTimerPhase2\t\t\t= \"为第二阶段显示计时条\",\n\tWarningWaveSoon\t\t\t= \"为小怪出现显示提前警报\",\n\tWarningWaveSpawned\t\t= \"为小怪出现显示警报\",\n\tWarningRiderDown\t\t= \"当冷酷的骑兵死亡时显示警报\",\n\tWarningKnightDown\t\t= \"当冷酷的死亡骑士死亡时显示警报\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t\t= \"你们这些蠢货已经主动步入了陷阱。\",\n\tWarningWave1\t\t= \"%d %s\",\n\tWarningWave2\t\t= \"%d %s 和 %d %s\",\n\tWarningWave3\t\t= \"%d %s, %d %s 和 %d %s\",\n\tTrainee\t\t\t\t= \"学徒\",\n\tKnight\t\t\t\t= \"死亡骑士\",\n\tRider\t\t\t\t= \"骑兵\",\n\tGothikDoorEmote\t\t= \"中央大门打开了！\",\n\tGothikPhase2Yell\t= \"我已经等待很久了。现在你们将面对灵魂的收割者。\"\n})\n\n---------------------\n--  Four Horsemen  --\n---------------------\nL = DBM:GetModLocalization(\"Horsemen\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"四骑士\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t= \"为印记显示提前警报\",\n\tSpecialWarningMarkOnPlayer\t= \"当你印记叠加多于四层时显示特别警报\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t= \"3秒后 印记 %d\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t\t\t= \"库尔塔兹领主\",\n\tRivendare\t\t\t= \"瑞文戴尔男爵\",\n\tBlaumeux\t\t\t= \"女公爵布劳缪克丝\",\n\tZeliek\t\t\t\t= \"瑟里耶克爵士\"\n})\n\n-----------------\n--  Sapphiron  --\n-----------------\nL = DBM:GetModLocalization(\"Sapphiron\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"萨菲隆\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t\t= \"10秒后 空中阶段\",\n\tWarningAirPhaseNow\t\t= \"空中阶段\",\n\tWarningLanded\t\t\t= \"萨菲隆降落了\",\n\tWarningDeepBreath\t\t= \"冰霜吐息\",\n\tSpecWarnSapphLow\t\t= \"萨菲隆不能飞！\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t\t\t= \"空中阶段\",\n\tTimerLanding\t\t\t= \"降落\",\n\tTimerIceBlast\t\t\t= \"冰霜吐息\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t\t= \"为空中阶段显示提前警报\",\n\tWarningAirPhaseNow\t\t= \"提示空中阶段\",\n\tWarningLanded\t\t\t= \"提示地上阶段\",\n\tTimerAir\t\t\t\t= \"为空中阶段显示计时条\",\n\tTimerLanding\t\t\t= \"为降落显示计时条\",\n\tTimerIceBlast\t\t\t= \"为冰霜吐息显示计时条\",\n\tWarningDeepBreath\t\t= \"为冰霜吐息显示特别警报\",\n\tSpecWarnSapphLow\t\t= \"10%执行阶段特别警告（取消空中阶段）\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t= \"%s深深地吸了一口气。\",\n\tAirPhase\t\t\t= \"萨菲隆缓缓升空！\",\n\tLandingPhase\t\t= \"萨菲隆再次发动了攻击！\"\n})\n\n------------------\n--  Kel'Thuzad  --\n------------------\nL = DBM:GetModLocalization(\"Kel'Thuzad\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"克尔苏加德\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t\t= \"10秒后克尔苏加德开始攻击\",\n\twarnAddsSoon\t\t= \"寒冰皇冠卫士即将出现\",\n\tWeaponsStatus\t\t= \"自动卸下武器开启: %s (%s - %s)\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t\t\t= \"第二阶段\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"为第二阶段显示计时条\",\n\tspecwarnP2Soon\t\t= \"为克尔苏加德攻击前10秒显示特别警报\",\n\twarnAddsSoon\t\t= \"为寒冰皇冠卫士显示提前警报\",\n\tWeaponsStatus\t\t= \"如果卸下/装备武器功能启用，在战斗开始时显示特殊警报\",\n\tEqUneqWeaponsKT\t\t= \"在 $spell:28410 之前和之后自动取消装备和装备武器。 需要名为“pve”的装备套装\",\n\tEqUneqWeaponsKT2\t= \"对你施放 $spell:28410 时自动解除和装备武器。 需要名为“pve”的装备套装\",\n\tRemoveBuffsOnMC\t\t= \"当$spell:28410对你施法时，移除BUFF。每个选项都是累积的。\",\n\tGift\t\t\t\t= \"移除$spell:48469 / $spell:48470。防止$spell:33786抵制的最简单方法。\",\n\tCCFree\t\t\t\t= \"+ 删除$spell:48169 / $spell:48170。考虑到阴影学派中法术的抵抗。\",\n\tShortOffensiveProcs\t= \"+ 删除持续时间短的攻击性程序。建议在不影响突击队伤害输出的情况下保证突击队的安全。\",\n\tMostOffensiveBuffs\t= \"+ 移除大部分攻击性BUFF（主要针对施法者和|cFFFF7C0A野性德鲁伊|r）。在损失伤害输出和需要自我补血/移形换影的情况下，最大限度地保证了突击队的安全！\"\n})\n\nL:SetMiscLocalization({\n\tYell\t\t\t\t= \"仆从们，侍卫们，隶属于黑暗与寒冷的战士们！听从克尔苏加德的召唤！\",\n\tYell1Phase2\t\t\t= \"祈祷我的慈悲吧！\", -- 12995\n\tYell2Phase2\t\t\t= \"呼出你的最后一口气！\", -- 12996\n\tYell3Phase2\t\t\t= \"你的末日临近了！\", -- 12997\n\tYellPhase3\t\t\t= \"主人，我需要帮助！\", -- 12998\n\tYellGuardians\t\t= \"很好，冰荒废土的战士们，起来吧！我命令你们为主人而战斗，杀戮，直到死亡！一个活口都不要留！\", -- 12994\n\tsetMissing\t\t\t= \"注意力！ 在您创建名为 pve 的装备集之前，DBM 自动武器卸载/装备将不起作用\",\n\tEqUneqLineDescription\t= \"自动装备/取消装备\"\n})\n"
  },
  {
    "path": "DBM-Naxx/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n-------------------\n--  Anub'Rekhan  --\n-------------------\nL = DBM:GetModLocalization(\"Anub'Rekhan\")\n\nL:SetGeneralLocalization({\n\tname = \"Anub'Rekhan\"\n})\n\nL:SetOptionLocalization({\n\tArachnophobiaTimer\t= \"Zeige Timer für Erfolg 'Arachnophobie'\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Arachnophobie\",\n\tPull1\t\t\t\t= \"Rennt! Das bringt das Blut in Wallung!\",\n\tPull2\t\t\t\t= \"Nur einmal kosten...\" --needs to be verified (wowhead-captured translation)\n})\n\n----------------------------\n--  Grand Widow Faerlina  --\n----------------------------\nL = DBM:GetModLocalization(\"Faerlina\")\n\nL:SetGeneralLocalization({\n\tname = \"Großwitwe Faerlina\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t= \"Umarmung endet in 5 Sek\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t= \"Zeige Vorwarnung für das Ende von $spell:28732\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t\t= \"Kniet nieder, Wurm!\" --needs to be verified (wowhead-captured translation)\n})\n\n---------------\n--  Maexxna  --\n---------------\nL = DBM:GetModLocalization(\"Maexxna\")\n\nL:SetGeneralLocalization({\n\tname = \"Maexxna\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t= \"Maexxnaspinnlinge in 5 Sek\",\n\tWarningSpidersNow\t= \"Maexxnaspinnlinge erschienen\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t= \"Nächste Maexxnaspinnlinge\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t= \"Zeige Vorwarnung für Maexxnaspinnlinge\",\n\tWarningSpidersNow\t= \"Zeige Warnung für Maexxnaspinnlinge\",\n\tTimerSpider\t\t\t= \"Zeige Zeit bis nächste Maexxnaspinnlinge erscheinen\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Arachnophobie\"\n})\n\n------------------------------\n--  Noth the Plaguebringer  --\n------------------------------\nL = DBM:GetModLocalization(\"Noth\")\n\nL:SetGeneralLocalization({\n\tname = \"Noth der Seuchenfürst\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Teleportiert\",\n\tWarningTeleportSoon\t= \"Teleport in 10 Sek\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t= \"Teleport\",\n\tTimerTeleportBack\t= \"Teleport zurück\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Zeige Warnung für Teleport\",\n\tWarningTeleportSoon\t= \"Zeige Vorwarnung für Teleport\",\n\tTimerTeleport\t\t= \"Zeige Zeit bis sich Noth auf den Balkon teleportiert\",\n\tTimerTeleportBack\t= \"Zeige Zeit bis sich Noth zurück teleportiert\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Sterbt, Eindringling!\",\n\tAdds\t\t\t\t= \"beschwört Skelettkrieger!\",\n\tAddsTwo\t\t\t\t= \"%s belebt mehr Skelette!\"\n})\n\n--------------------------\n--  Heigan the Unclean  --\n--------------------------\nL = DBM:GetModLocalization(\"Heigan\")\n\nL:SetGeneralLocalization({\n\tname = \"Heigan der Unreine\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Teleportiert\",\n\tWarningTeleportSoon\t= \"Teleport in %d Sek\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t= \"Teleport\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Zeige Warnung für Teleport\",\n\tWarningTeleportSoon\t= \"Zeige Vorwarnung für Teleport\",\n\tTimerTeleport\t\t= \"Zeige Zeit bis Teleport\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Ihr gehört mir...\"\n})\n\n---------------\n--  Loatheb  --\n---------------\nL = DBM:GetModLocalization(\"Loatheb\")\n\nL:SetGeneralLocalization({\n\tname = \"Loatheb\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t= \"Heilung in 3 Sek möglich\",\n\tWarningHealNow\t= \"Jetzt heilen\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t= \"Zeige Vorwarnung für 3-Sekunden-Heilfenster\",\n\tWarningHealNow\t\t= \"Zeige Warnung für 3-Sekunden-Heilfenster\",\n\tSporeDamageAlert\t= \"Sende Flüsternachricht und verkünde Spieler in Raid die Sporen beschädigen\\n(benötigt aktivierte Ankündigungen und (L)- oder (A)-Status)\",\n\tCorruptedSorting\t= \"Set infoframe sorting behaviour for $spell:55593\", -- translation missing\n\tAlphabetical\t\t= \"Sort in alphabetical order\", -- translation missing\n\tDuration\t\t\t= \"Sort by duration\" -- translation missing\n})\n\n-----------------\n--  Patchwerk  --\n-----------------\nL = DBM:GetModLocalization(\"Patchwerk\")\n\nL:SetGeneralLocalization({\n\tname = \"Flickwerk\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful\t= \"Verkünde Hasserfüllte Stöße im Raidchat\\n(benötigt aktivierte Ankündigungen und (L)- oder (A)-Status)\"\n})\n\nL:SetMiscLocalization({\n\tyell1\t\t\t= \"Flickwerk spielen möchte!\",\n\tyell2\t\t\t= \"Kel’Thuzad macht Flickwerk zu seinem Abgesandten des Kriegs!\",\n\tHatefulStrike\t= \"Hasserfüllter Stoß --> %s [%s]\"\n})\n\n-----------------\n--  Grobbulus  --\n-----------------\nL = DBM:GetModLocalization(\"Grobbulus\")\n\nL:SetGeneralLocalization({\n\tname = \"Grobbulus\"\n})\n\n-------------\n--  Gluth  --\n-------------\nL = DBM:GetModLocalization(\"Gluth\")\n\nL:SetGeneralLocalization({\n\tname = \"Gluth\"\n})\n\n----------------\n--  Thaddius  --\n----------------\nL = DBM:GetModLocalization(\"Thaddius\")\n\nL:SetGeneralLocalization({\n\tname = \"Thaddius\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t= \"Polarität geändert zu %s\",\n\tWarningChargeNotChanged\t= \"Polarität hat sich nicht geändert\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t= \"Spezialwarnung, wenn deine Polarität gewechselt hat\",\n\tWarningChargeNotChanged\t= \"Spezialwarnung, wenn deine Polarität nicht gewechselt hat\",\n\tArrowsEnabled\t\t\t= \"Zeige Pfeile (normale \\\"2-Camps\\\"-Strategie)\",\n\tArrowsRightLeft\t\t\t= \"Zeige Links-/Rechtspfeil für die \\\"4-Camps\\\"-Strategie<br/>(Linkspfeil bei Polaritätsänderung, Rechtspfeil bei keiner Änderung)\",\n\tArrowsInverse\t\t\t= \"Umgedrehte \\\"4-Camps\\\"-Strategie<br/>(Rechtspfeil bei Polaritätsänderung, Linkspfeil bei keiner Änderung)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t= \"Stalagg zerquetschen!\",\n\tEmote\t= \"%s überlädt!\",\n\tEmote2\t= \"Teslaspule überlädt!\",\n\tBoss1\t= \"Feugen\",\n\tBoss2\t= \"Stalagg\",\n\tCharge1 = \"negativ\",\n\tCharge2 = \"positiv\"\n})\n\n----------------------------\n--  Instructor Razuvious  --\n----------------------------\nL = DBM:GetModLocalization(\"Razuvious\")\n\nL:SetGeneralLocalization({\n\tname = \"Instrukteur Razuvious\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t= \"Knochenbarriere endet in 5 Sekunden\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t= \"Zeige Vorwarnung, wenn $spell:29061 endet\"\n})\n\nL:SetMiscLocalization({\n\tYell1 = \"Lasst keine Gnade walten!\",\n\tYell2 = \"Die Zeit des Übens ist vorbei! Zeigt mir, was ihr gelernt habt!\",\n\tYell3 = \"Befolgt meine Befehle!\",\n\tYell4 = \"Streckt sie nieder... oder habt ihr ein Problem damit?\"\n})\n\n----------------------------\n--  Gothik the Harvester  --\n----------------------------\nL = DBM:GetModLocalization(\"Gothik\")\n\nL:SetGeneralLocalization({\n\tname = \"Gothik der Ernter\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t= \"Welle %d: %s in 3 Sek\",\n\tWarningWaveSpawned\t= \"Welle %d: %s erschienen\",\n\tWarningRiderDown\t= \"Reiter tot\",\n\tWarningKnightDown\t= \"Ritter tot\",\n\tWarningPhase2\t\t= \"Phase 2\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"Welle %d\",\n\tTimerPhase2\t= \"Phase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"Zeige Zeit bis nächste Welle\",\n\tTimerPhase2\t\t\t= \"Zeige Zeit bis Phase 2\",\n\tWarningWaveSoon\t\t= \"Warne, wenn bald eine neue Welle kommt\",\n\tWarningWaveSpawned\t= \"Warne, wenn eine neue Welle kommt\",\n\tWarningRiderDown\t= \"Zeige Warnung, wenn ein Unerbittlicher Reiter stirbt\",\n\tWarningKnightDown\t= \"Zeige Warnung, wenn ein Unerbittlicher Todesritter stirbt\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t= \"Ihr Narren habt euren eigenen Untergang heraufbeschworen.\",\n\tWarningWave1\t= \"%d %s\",\n\tWarningWave2\t= \"%d %s und %d %s\",\n\tWarningWave3\t= \"%d %s, %d %s und %d %s\",\n\tTrainee\t\t\t= \"Lehrlinge\",\n\tKnight\t\t\t= \"Ritter\",\n\tRider\t\t\t= \"Reiter\",\n\tGothikDoorEmote\t= \"Das Haupttor öffnet sich.\",\n\tGothikPhase2Yell= \"Ich habe lange genug gewartet. Stellt euch dem Seelenjäger.\"\n})\n\n---------------------\n--  Four Horsemen  --\n---------------------\nL = DBM:GetModLocalization(\"Horsemen\")\n\nL:SetGeneralLocalization({\n\tname = \"Die vier Reiter\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Mal %d in 3 Sekunden\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Zeige Vorwarnung für Mal\",\n\tSpecialWarningMarkOnPlayer\t= \"Spezialwarnung, wenn sich ein Mal mehr als 4-mal auf dir stapelt\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t= \"Than Korth'azz\",\n\tRivendare\t= \"Baron Totenschwur\",\n\tBlaumeux\t= \"Lady Blaumeux\",\n\tZeliek\t\t= \"Sir Zeliek\"\n})\n\n-----------------\n--  Sapphiron  --\n-----------------\nL = DBM:GetModLocalization(\"Sapphiron\")\n\nL:SetGeneralLocalization({\n\tname = \"Saphiron\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t= \"Luftphase in 10 Sek\",\n\tWarningAirPhaseNow\t= \"Luftphase\",\n\tWarningLanded\t\t= \"Bodenphase\",\n\tWarningDeepBreath\t= \"Frostatem\",\n\tSpecWarnSapphLow\t= \"Saphiron kann nicht fliegen!\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t= \"Nächste Luftphase\",\n\tTimerLanding\t= \"Nächste Bodenphase\",\n\tTimerIceBlast\t= \"Frostatem\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t= \"Zeige Vorwarnung, wenn Saphiron bald abhebt\",\n\tWarningAirPhaseNow\t= \"Zeige Warnung, wenn Saphiron abhebt\",\n\tWarningLanded\t\t= \"Zeige Warnung, wenn Saphiron landet\",\n\tTimerAir\t\t\t= \"Zeige Zeit bis nächste Luftphase\",\n\tTimerLanding\t\t= \"Zeige Zeit bis nächste Bodenphase\",\n\tTimerIceBlast\t\t= \"Zeige Zeit bis $spell:28524\",\n\tWarningDeepBreath\t= \"Spezialwarnung für $spell:28524\",\n\tSpecWarnSapphLow\t= \"Sonderwarnung für 10 % Ausführungsphase (Luftphase abbrechen)\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t= \"%s holt tief Luft.\",\n\tAirPhase\t\t\t= \"Saphiron erhebt sich in die Lüfte!\",\n\tLandingPhase\t\t= \"Saphiron nimmt seine Angriffe wieder auf!\"\n})\n\n------------------\n--  Kel'Thuzad  --\n------------------\nL = DBM:GetModLocalization(\"Kel'Thuzad\")\n\nL:SetGeneralLocalization({\n\tname = \"Kel'Thuzad\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t= \"Kel'Thuzad greift in 10 Sekunden an\",\n\twarnAddsSoon\t= \"Wächter von Eiskrone bald\",\n\tWeaponsStatus\t= \"Automatisches Entwaffnen aktiv: %s (%s - %s)\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t= \"Phase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"Zeige Zeit bis Phase 2\",\n\tspecwarnP2Soon\t\t= \"Spezialwarnung 10 Sekunden bevor Kel'Thuzad angreift\",\n\twarnAddsSoon\t\t= \"Zeige Vorwarnung für Wächter von Eiskrone\",\n\tWeaponsStatus\t\t= \"Zeige Spezialwarnung bei Kampfbeginn, wenn automatisches Be-/Entwaffnen aktiviert ist\",\n\tEqUneqWeaponsKT\t\t= \"Waffen vor und nach $spell:28410 automatisch aus- und ausrüsten. Benötigt Ausrüstungsset namens \\\"pve\\\"\",\n\tEqUneqWeaponsKT2\t= \"Waffen automatisch ablegen und ausrüsten, wenn $spell:28410 auf DICH gewirkt wird. Benötigt Ausrüstungsset namens \\\"pve\\\"\",\n\tRemoveBuffsOnMC\t\t= \"Entferne Buffs, wenn $spell:28410 auf dich gewirkt wird. Jede Option ist kumulativ.\",\n\tGift\t\t\t\t= \"Entferne $spell:48469 / $spell:48470. Minimaler Ansatz, um $spell:33786 Resistenzen zu verhindern.\",\n\tCCFree\t\t\t\t= \"+ Entferne $spell:48169 / $spell:48170. Berücksichtige die Resistenzen von Zaubern der Schattenschule.\",\n\tShortOffensiveProcs\t= \"+ Entferne offensive Procs, die eine geringe Dauer haben. Empfohlen für die Sicherheit des Schlachtzugs, ohne den Schadensoutput des Schlachtzugs zu beeinträchtigen.\",\n\tMostOffensiveBuffs\t= \"+ Entfernt die meisten offensiven Buffs (hauptsächlich für Zauberwirker und |cFFFF7C0AWildheit-Druide|r). Maximale Schlachtzugsicherheit bei gleichzeitigem Verlust des Schadensoutputs und der Notwendigkeit, sich selbst zu rebuffen/shapeshiften!\"\n})\n\nL:SetMiscLocalization({\n\tYell = \"Lakaien, Diener, Soldaten der eisigen Finsternis! Folgt dem Ruf von Kel'Thuzad!\",\n\tYell1Phase2 = \"Betet um Gnade!\", -- 12995\n\tYell2Phase2 = \"Schreiend werdet ihr diese Welt verlassen!\", -- 12996\n\tYell3Phase2 = \"Euer Ende ist gekommen!\", -- 12997\n\tYellPhase3 = \"Meister, ich benötige Beistand.\", -- 12998\n\tYellGuardians = \"Wohlan, Krieger der Eisigen Weiten, erhebt euch! Ich befehle euch für euren Meister zu kämpfen, zu töten und zu sterben! Keiner darf überleben!\", -- 12994\n\tsetMissing\t= \"AUFMERKSAMKEIT! Das automatische Ausrüsten/Ausrüsten von DBM-Waffen funktioniert erst, wenn Sie ein Ausrüstungsset namens pve . erstellen\",\n\tEqUneqLineDescription\t= \"Automatisches An-/Ablegen\"\n})\n"
  },
  {
    "path": "DBM-Naxx/localization.en.lua",
    "content": "local L\n\n-------------------\n--  Anub'Rekhan  --\n-------------------\nL = DBM:GetModLocalization(\"Anub'Rekhan\")\n\nL:SetGeneralLocalization({\n\tname = \"Anub'Rekhan\"\n})\n\nL:SetOptionLocalization({\n\tArachnophobiaTimer\t= \"Show timer for Arachnophobia (achievement)\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Arachnophobia\",\n\tPull1\t\t\t\t= \"Yes, run! It makes the blood pump faster!\",\n\tPull2\t\t\t\t= \"Just a little taste...\"\n})\n\n----------------------------\n--  Grand Widow Faerlina  --\n----------------------------\nL = DBM:GetModLocalization(\"Faerlina\")\n\nL:SetGeneralLocalization({\n\tname = \"Grand Widow Faerlina\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t= \"Widow's Embrace ends in 5 seconds\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t= \"Show pre-warning for $spell:28732 fade\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t\t= \"Kneel before me, worm!\"--Not actually pull trigger, but often said on pull\n})\n\n---------------\n--  Maexxna  --\n---------------\nL = DBM:GetModLocalization(\"Maexxna\")\n\nL:SetGeneralLocalization({\n\tname = \"Maexxna\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t= \"Maexxna Spiderlings in 5 seconds\",\n\tWarningSpidersNow\t= \"Maexxna Spiderlings spawned\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t= \"Next Maexxna Spiderlings\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t= \"Show pre-warning for Maexxna Spiderlings\",\n\tWarningSpidersNow\t= \"Show warning for Maexxna Spiderlings\",\n\tTimerSpider\t\t\t= \"Show timer for next Maexxna Spiderlings\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Arachnophobia\"\n})\n\n------------------------------\n--  Noth the Plaguebringer  --\n------------------------------\nL = DBM:GetModLocalization(\"Noth\")\n\nL:SetGeneralLocalization({\n\tname = \"Noth the Plaguebringer\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Teleported\",\n\tWarningTeleportSoon\t= \"Teleport in 10 seconds\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t= \"Teleport\",\n\tTimerTeleportBack\t= \"Teleport back\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Show warning for Teleport\",\n\tWarningTeleportSoon\t= \"Show pre-warning for Teleport\",\n\tTimerTeleport\t\t= \"Show timer for Teleport\",\n\tTimerTeleportBack\t= \"Show timer for Teleport back\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Die, trespasser!\",\n\tAdds\t\t\t\t= \"summons forth Skeletal Warriors!\",\n\tAddsTwo\t\t\t\t= \"raises more skeletons!\"\n})\n\n--------------------------\n--  Heigan the Unclean  --\n--------------------------\nL = DBM:GetModLocalization(\"Heigan\")\n\nL:SetGeneralLocalization({\n\tname = \"Heigan the Unclean\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Teleported\",\n\tWarningTeleportSoon\t= \"Teleport in %d seconds\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t= \"Teleport\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Show warning for Teleport\",\n\tWarningTeleportSoon\t= \"Show pre-warning for Teleport\",\n\tTimerTeleport\t\t= \"Show timer for Teleport\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"You are mine now.\"\n})\n\n---------------\n--  Loatheb  --\n---------------\nL = DBM:GetModLocalization(\"Loatheb\")\n\nL:SetGeneralLocalization({\n\tname = \"Loatheb\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t= \"Healing possible in 3 seconds\",\n\tWarningHealNow\t= \"Heal now\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t= \"Show pre-warning for 3-second healing window\",\n\tWarningHealNow\t\t= \"Show warning for 3-second healing window\",\n\tSporeDamageAlert\t= \"Send whisper to and announce to raid players who damage spores\\n(requires announce to be enabled and leader/promoted status)\",\n\tCorruptedSorting\t= \"Set infoframe sorting behaviour for $spell:55593\",\n\tAlphabetical\t\t= \"Sort in alphabetical order\",\n\tDuration\t\t\t= \"Sort by duration\"\n})\n\n-----------------\n--  Patchwerk  --\n-----------------\nL = DBM:GetModLocalization(\"Patchwerk\")\n\nL:SetGeneralLocalization({\n\tname = \"Patchwerk\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful\t= \"Post Hateful Strike targets to raid chat\\n(requires announce to be enabled and leader/promoted status)\"\n})\n\nL:SetMiscLocalization({\n\tyell1\t\t\t= \"Patchwerk want to play!\",\n\tyell2\t\t\t= \"Kel'thuzad make Patchwerk his avatar of war!\",\n\tHatefulStrike\t= \"Hateful Strike --> %s [%s]\"\n})\n\n-----------------\n--  Grobbulus  --\n-----------------\nL = DBM:GetModLocalization(\"Grobbulus\")\n\nL:SetGeneralLocalization({\n\tname = \"Grobbulus\"\n})\n\n-------------\n--  Gluth  --\n-------------\nL = DBM:GetModLocalization(\"Gluth\")\n\nL:SetGeneralLocalization({\n\tname = \"Gluth\"\n})\n\n----------------\n--  Thaddius  --\n----------------\nL = DBM:GetModLocalization(\"Thaddius\")\n\nL:SetGeneralLocalization({\n\tname = \"Thaddius\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t= \"Polarity changed to %s\",\n\tWarningChargeNotChanged\t= \"Polarity did not change\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t= \"Show special warning when your polarity changed\",\n\tWarningChargeNotChanged\t= \"Show special warning when your polarity did not change\",\n\tArrowsEnabled\t\t\t= \"Show arrows during $spell:28089\",\n\tTwoCamp\t\t\t\t\t= \"Show arrows (normal \\\"2 camp\\\" run through strategy)\",\n\tArrowsRightLeft\t\t\t= \"Show left/right arrows for the \\\"4 camp\\\" strategy (show left arrow if polarity changed, right if not)\",\n\tArrowsInverse\t\t\t= \"Inverse \\\"4 camp\\\" strategy (show right arrow if polarity changed, left if not)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t= \"Stalagg crush you!\",\n\tEmote\t= \"%s overloads!\",\n\tEmote2\t= \"Tesla Coil overloads!\",\n\tBoss1\t= \"Feugen\",\n\tBoss2\t= \"Stalagg\",\n\tCharge1 = \"negative\",\n\tCharge2 = \"positive\"\n})\n\n----------------------------\n--  Instructor Razuvious  --\n----------------------------\nL = DBM:GetModLocalization(\"Razuvious\")\n\nL:SetGeneralLocalization({\n\tname = \"Instructor Razuvious\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t= \"Shield Wall ends in 5 seconds\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t= \"Show pre-warning for Shield Wall ending\"\n})\n\nL:SetMiscLocalization({\n\tYell1 = \"Show them no mercy!\",\n\tYell2 = \"The time for practice is over! Show me what you have learned!\",\n\tYell3 = \"Do as I taught you!\",\n\tYell4 = \"Sweep the leg... Do you have a problem with that?\"\n})\n\n----------------------------\n--  Gothik the Harvester  --\n----------------------------\nL = DBM:GetModLocalization(\"Gothik\")\n\nL:SetGeneralLocalization({\n\tname = \"Gothik the Harvester\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t= \"Wave %d: %s in 3 sec\",\n\tWarningWaveSpawned\t= \"Wave %d: %s spawned\",\n\tWarningRiderDown\t= \"Rider down\",\n\tWarningKnightDown\t= \"Knight down\",\n\tWarningPhase2\t\t= \"Phase 2\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"Wave %d\",\n\tTimerPhase2\t= \"Phase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"Show timer for next wave\",\n\tTimerPhase2\t\t\t= \"Show timer for Phase 2\",\n\tWarningWaveSoon\t\t= \"Show pre-warning for wave\",\n\tWarningWaveSpawned\t= \"Show warning for wave spawned\",\n\tWarningRiderDown\t= \"Show warning when an Unrelenting Rider dies\",\n\tWarningKnightDown\t= \"Show warning when an Unrelenting Death Knight dies\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t= \"Foolishly you have sought your own demise.\",\n\tWarningWave1\t= \"%d %s\",\n\tWarningWave2\t= \"%d %s and %d %s\",\n\tWarningWave3\t= \"%d %s, %d %s and %d %s\",\n\tTrainee\t\t\t= \"Trainees\",\n\tKnight\t\t\t= \"Knights\",\n\tRider\t\t\t= \"Riders\",\n\tGothikDoorEmote\t= \"The central gate opens!\", -- 32307\n\tGothikPhase2Yell= \"I have waited long enough. Now you face the harvester of souls.\" -- 13028\n})\n\n---------------------\n--  Four Horsemen  --\n---------------------\nL = DBM:GetModLocalization(\"Horsemen\")\n\nL:SetGeneralLocalization({\n\tname = \"Four Horsemen\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Mark %d in 3 seconds\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Show pre-warning for Mark\",\n\tSpecialWarningMarkOnPlayer\t= \"Show special warning when you are affected by more than 4 marks\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t= \"Thane Korth'azz\",\n\tRivendare\t= \"Baron Rivendare\",\n\tBlaumeux\t= \"Lady Blaumeux\",\n\tZeliek\t\t= \"Sir Zeliek\"\n})\n\n-----------------\n--  Sapphiron  --\n-----------------\nL = DBM:GetModLocalization(\"Sapphiron\")\n\nL:SetGeneralLocalization({\n\tname = \"Sapphiron\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t= \"Air phase in 10 seconds\",\n\tWarningAirPhaseNow\t= \"Air phase\",\n\tWarningLanded\t\t= \"Sapphiron landed\",\n\tSpecWarnSapphLow\t= \"Sapphiron can't fly!\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t= \"Air phase\",\n\tTimerLanding\t= \"Landing\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t= \"Show pre-warning for air phase\",\n\tWarningAirPhaseNow\t= \"Announce air phase\",\n\tWarningLanded\t\t= \"Announce ground phase\",\n\tTimerAir\t\t\t= \"Show timer for air phase\",\n\tTimerLanding\t\t= \"Show timer for landing\",\n\tSpecWarnSapphLow\t= \"Special warning for 10% execute phase (cancel air phase)\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t= \"%s takes a deep breath.\",\n\tAirPhase\t\t\t= \"Sapphiron lifts off into the air!\",\n\tLandingPhase\t\t= \"Sapphiron resumes his attacks!\"\n})\n\n------------------\n--  Kel'Thuzad  --\n------------------\nL = DBM:GetModLocalization(\"Kel'Thuzad\")\n\nL:SetGeneralLocalization({\n\tname = \"Kel'Thuzad\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t= \"Kel'Thuzad engages in 10 Seconds\",\n\twarnAddsSoon\t= \"Guardians of Icecrown incoming soon\",\n\tWeaponsStatus\t= \"Auto Unequip/Equip weapons: %s (%s - %s)\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t= \"Phase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"Show timer for Phase 2\",\n\tspecwarnP2Soon\t\t= \"Show special warning 10 seconds before Kel'Thuzad engages\",\n\twarnAddsSoon\t\t= \"Show pre-warning for Guardians of Icecrown\",\n\tWeaponsStatus\t\t= \"Show special warning at combat start if unequip/equip function is enabled\",\n\tEqUneqWeaponsKT\t\t= \"Automatically unequip and equip weapons on a timer, before and after $spell:28410. Requires a COMPLETE (with the weapons of choice that will be equipped) equipment set named \\\"pve\\\"\",\n\tEqUneqWeaponsKT2\t= \"Automatically unequip and equip weapons when $spell:28410 is cast on YOU. Requires a COMPLETE (with the weapons of choice that will be equipped) equipment set named \\\"pve\\\"\",\n\tRemoveBuffsOnMC\t\t= \"Remove buffs when $spell:28410 is cast on you. Each option is cumulative.\",\n\tNever\t\t\t\t= NEVER, -- don't translate,\n\tGift\t\t\t\t= \"Remove $spell:48469 / $spell:48470. Minimal approach to prevent $spell:33786 resists.\",\n\tCCFree\t\t\t\t= \"+ Remove $spell:48169 / $spell:48170. Account for resists of spells in the Shadow school.\",\n\tShortOffensiveProcs\t= \"+ Remove offensive procs that have a low duration. Recommended for raid safety without compromising raid damage output.\",\n\tMostOffensiveBuffs\t= \"+ Remove most offensive buffs (mainly for Casters and |cFFFF7C0AFeral Druids|r). Maximum raid safety with loss of damage output and need to self-rebuff/shapeshift!\",\n\tEqUneqFilter\t\t= FILTER, -- don't translate\n\tOnlyDPS\t\t\t\t= DBM_COMMON_L.DAMAGE_ICON, -- don't translate\n\tDPSTank\t\t\t\t= DBM_COMMON_L.DAMAGE_ICON..DBM_COMMON_L.TANK_ICON, -- don't translate\n\tNoFilter\t\t\t= DBM_COMMON_L.DAMAGE_ICON..DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.HEALER_ICON -- don't translate\n})\n\nL:SetMiscLocalization({\n\tYell\t\t= \"Minions, servants, soldiers of the cold dark! Obey the call of Kel'Thuzad!\",\n--\tYellMC1\t\t= \"Your soul is bound to me, now!\",\n--\tYellMC2\t\t= \"There will be no escape!\",\n\tYell1Phase2\t= \"Pray for mercy!\", -- 12995\n\tYell2Phase2\t= \"Scream your dying breath!\", -- 12996\n\tYell3Phase2\t= \"The end is upon you!\", -- 12997\n\tYellPhase3\t= \"Master, I require aid!\", -- 12998\n\tYellGuardians\t= \"Very well. Warriors of the frozen wastes, rise up! I command you to fight, kill and die for your master! Let none survive!\", -- 12994\n\tsetMissing\t= \"ATTENTION! DBM automatic weapon unequipping/equipping will not work until you create a equipment set named pve\",\n\tEqUneqLineDescription\t= \"Automatic Equip/Unequip\"\n})\n"
  },
  {
    "path": "DBM-Naxx/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" then return end\nlocal L\n\n-----------------\n-- Anub'Rekhan --\n-----------------\nL = DBM:GetModLocalization(\"Anub'Rekhan\")\n\nL:SetGeneralLocalization({\n\tname = \"Anub'Rekhan\"\n})\n\nL:SetOptionLocalization({\n\tArachnophobiaTimer\t= \"Mostrar temporizador para el logro 'Aracnofobia'\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Logro: Aracnofobia\",\n\tPull1\t\t\t\t= \"¡Eso, corred! ¡Así la sangre circula más rápido!\",\n\tPull2\t\t\t\t= \"Solo un bocado...\"\n})\n\n-------------------------\n-- Gran Viuda Faerlina --\n-------------------------\nL = DBM:GetModLocalization(\"Faerlina\")\n\nL:SetGeneralLocalization({\n\tname = \"Gran Viuda Faerlina\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t= \"Abrazo de la viuda expirando en 5 s\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t= \"Mostrar aviso previo para cuando expire Abrazo de la viuda\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t\t= \"¡Arrodíllate ante mí, sabandija!\"--Not actually pull trigger, but often said on pull\n})\n\n-------------\n-- Maexxna --\n-------------\nL = DBM:GetModLocalization(\"Maexxna\")\n\nL:SetGeneralLocalization({\n\tname = \"Maexxna\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t= \"Arañitas de Maexxna en 5 s\",\n\tWarningSpidersNow\t= \"Arañitas de Maexxna\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t= \"Siguientes arañitas\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t= \"Mostrar aviso previo para cuando aparezcan Arañitas de Maexxna\",\n\tWarningSpidersNow\t= \"Mostrar aviso cuando aparezcan Arañitas de Maexxna\",\n\tTimerSpider\t\t\t= \"Mostrar temporizador para las siguientes Arañitas de Maexxna\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Logro: Aracnofobia\"\n})\n\n-----------------------\n-- Noth el Pesteador --\n-----------------------\nL = DBM:GetModLocalization(\"Noth\")\n\nL:SetGeneralLocalization({\n\tname = \"Noth el Pesteador\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Teletransporte\",\n\tWarningTeleportSoon\t= \"Teletransporte en 10 s\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t= \"Teletransporte: Balcón\",\n\tTimerTeleportBack\t= \"Teletransporte: Suelo\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Mostrar aviso para Teletransporte\",\n\tWarningTeleportSoon\t= \"Mostrar aviso previo para Teletransporte\",\n\tTimerTeleport\t\t= \"Mostrar temporizador para el siguiente Teletransporte: Balcón\",\n\tTimerTeleportBack\t= \"Mostrar temporizador para Teletransporte: Suelo\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"¡Muere, intruso!\",\n\tAdds\t\t\t\t= \"invoca a guerreros esqueletos!\",\n\tAddsTwo\t\t\t\t= \"alza más esqueletos!\"\n})\n\n----------------------\n-- Heigan el Impuro --\n----------------------\nL = DBM:GetModLocalization(\"Heigan\")\n\nL:SetGeneralLocalization({\n\tname = \"Heigan el Impuro\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Teletransporte\",\n\tWarningTeleportSoon\t= \"Teletransporte en %d s\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t= \"Teletransporte\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Mostrar aviso para Teletransporte\",\n\tWarningTeleportSoon\t= \"Mostrar aviso previo para Teletransporte\",\n\tTimerTeleport\t\t= \"Mostrar aviso para Teletransporte\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Ahora me perteneces.\"\n})\n\n-------------\n-- Loatheb --\n-------------\nL = DBM:GetModLocalization(\"Loatheb\")\n\nL:SetGeneralLocalization({\n\tname = \"Loatheb\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t= \"Sanación posible en 3 s\",\n\tWarningHealNow\t= \"¡Sanad ahora!\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t= \"Mostrar aviso previo para la franja de sanación\",\n\tWarningHealNow\t\t= \"Mostrar aviso para la franja de sanación\",\n\tSporeDamageAlert\t= \"Enviar susurros y avisar a la banda de los jugadores que estén dañando esporas\\n(necesita 'anunciar' activado y lider/ayudante)\",\n\tCorruptedSorting\t= \"Set infoframe sorting behaviour for $spell:55593\", -- translation missing\n\tAlphabetical\t\t= \"Sort in alphabetical order\", -- translation missing\n\tDuration\t\t\t= \"Sort by duration\" -- translation missing\n})\n\n---------------\n-- Remendejo --\n---------------\nL = DBM:GetModLocalization(\"Patchwerk\")\n\nL:SetGeneralLocalization({\n\tname = \"Remendejo\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful = \"Avisar por chat de banda los Golpes de Odio (necesitas ser ayudante o lider para eso)\"\n})\n\nL:SetMiscLocalization({\n\tyell1 = \"¡Remendejo quiere jugar!\",\n\tyell2 = \"¡Remendejo es la encarnación de guerra de Kel'Thuzad!\",\n\tHatefulStrike = \"Golpe de Odio --> %s [%s]\"\n})\n\n---------------\n-- Grobbulus --\n---------------\nL = DBM:GetModLocalization(\"Grobbulus\")\n\nL:SetGeneralLocalization({\n\tname = \"Grobbulus\"\n})\n\n-----------\n-- Gluth --\n-----------\nL = DBM:GetModLocalization(\"Gluth\")\n\nL:SetGeneralLocalization({\n\tname = \"Gluth\"\n})\n\n--------------\n-- Thaddius --\n--------------\nL = DBM:GetModLocalization(\"Thaddius\")\n\nL:SetGeneralLocalization({\n\tname = \"Thaddius\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t= \"Polaridad cambiada a %s\",\n\tWarningChargeNotChanged\t= \"Tu polaridad no ha cambiado\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t= \"Mostrar aviso especial cuando tu polaridad cambie\",\n\tWarningChargeNotChanged\t= \"Mostrar aviso especial cuando tu polaridad no cambie\",\n\tArrowsEnabled\t\t\t= \"Mostrar flechas (estrategia típica de dos grupos)\",\n\tArrowsRightLeft\t\t\t= \"Mostrar flechas de izquierda y derecha (estrategia de cuatro grupos; muestra la flecha izquierda si cambia la polaridad, y la derecha si no cambia)\",\n\tArrowsInverse\t\t\t= \"Mostrar flechas de izquierda y derecha inversas (estrategia de cuatro grupos; muestra la flecha derecha si cambia la polaridad, y la izquierda si no cambia)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t= \"¡Stalagg aplasta!\",\n\tEmote\t= \"¡%s se sobrecarga!\",\n\tEmote2\t= \"¡Espiral Tesla se sobrecarga!\",\n\tBoss1\t= \"Feugen\",\n\tBoss2\t= \"Stalagg\",\n\tCharge1 = \"negativo\",\n\tCharge2 = \"positivo\"\n})\n\n--------------------------\n-- Instructor Razuvious --\n--------------------------\nL = DBM:GetModLocalization(\"Razuvious\")\n\nL:SetGeneralLocalization({\n\tname = \"Instructor Razuvious\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t= \"Barrera de huesos termina en 5 s\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t= \"Mostrar aviso previo para cuando termine $spell:29061\"\n})\n\nL:SetMiscLocalization({\n\tYell1 = \"¡No tengáis piedad!\",\n\tYell2 = \"¡El tiempo de practicar ha pasado! ¡Quiero ver lo que habéis aprendido!\",\n\tYell3 = \"¡Poned en práctica lo que os he enseñado!\",\n\tYell4 = \"Un barrido con pierna... ¿Tienes algún problema?\"\n})\n\n--------------------------\n-- Gothik el Cosechador --\n--------------------------\nL = DBM:GetModLocalization(\"Gothik\")\n\nL:SetGeneralLocalization({\n\tname = \"Gothik el Cosechador\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t= \"Oleada %d: %s en 3 s\",\n\tWarningWaveSpawned\t= \"Oleada %d: %s\",\n\tWarningRiderDown\t= \"Jinete muerto\",\n\tWarningKnightDown\t= \"Caballero muerto\",\n\tWarningPhase2\t\t= \"Fase 2\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"Oleada %d\",\n\tTimerPhase2\t= \"Fase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"Mostrar temporizador para la siguiente oleada de esbirros\",\n\tTimerPhase2\t\t\t= \"Mostrar temporizador para el cambio a Fase 2\",\n\tWarningWaveSoon\t\t= \"Mostrar aviso previo para la siguiente oleada de esbirros\",\n\tWarningWaveSpawned\t= \"Mostrar aviso cuando comience una oleada de esbirros\",\n\tWarningRiderDown\t= \"Mostrar aviso cuando muera un Jinete inflexible\",\n\tWarningKnightDown\t= \"Mostrar aviso cuando muera un Caballero de la Muerte inflexible\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t= \"Tú mismo has buscado tu final.\",\n\tWarningWave1\t= \"%d %s\",\n\tWarningWave2\t= \"%d %s y %d %s\",\n\tWarningWave3\t= \"%d %s, %d %s y %d %s\",\n\tTrainee\t\t\t= \"practicantes\",\n\tKnight\t\t\t= \"caballeros\",\n\tRider\t\t\t= \"jinetes\",\n\tGothikDoorEmote\t= \"¡La puerta central se abre!\",\n\tGothikPhase2Yell= \"Ya he esperado suficiente. Ahora os enfrentaréis al Recolector de almas.\"\n})\n\n------------------------\n-- Los Cuatro Jinetes --\n------------------------\nL = DBM:GetModLocalization(\"Horsemen\")\n\nL:SetGeneralLocalization({\n\tname = \"Los Cuatro Jinetes\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Marca %d en 3 s\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Mostrar aviso previo para las marcas\",\n\tSpecialWarningMarkOnPlayer\t= \"Mostrar aviso especial cuando estés afectado por más de cuatro marcas\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t= \"Señor feudal Korth'azz\",\n\tRivendare\t= \"Barón Osahendido\",\n\tBlaumeux\t= \"Lady Blaumeux\",\n\tZeliek\t\t= \"Sir Zeliek\"\n})\n\n---------------\n-- Sapphiron --\n---------------\nL = DBM:GetModLocalization(\"Sapphiron\")\n\nL:SetGeneralLocalization({\n\tname = \"Sapphiron\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t= \"Fase aérea en 10 s\",\n\tWarningAirPhaseNow\t= \"Fase aérea\",\n\tWarningLanded\t\t= \"Fase en tierra\",\n\tWarningDeepBreath\t= \"Aliento de Escarcha\",\n\tSpecWarnSapphLow\t= \"¡Sapphiron no puede volar!\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t= \"Fase aérea\",\n\tTimerLanding\t= \"Fase en tierra\",\n\tTimerIceBlast\t= \"Aliento de Escarcha\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t= \"Mostrar aviso previo para el cambio a fase aérea\",\n\tWarningAirPhaseNow\t= \"Anunciar cambio a fase aérea\",\n\tWarningLanded\t\t= \"Anunciar cambio a fase en tierra\",\n\tTimerAir\t\t\t= \"Mostrar temporizador para el cambio a fase aérea\",\n\tTimerLanding\t\t= \"Mostrar temporizador para el cambio a fase en tierra\",\n\tTimerIceBlast\t\t= \"Mostrar temporizador para $spell:28524\",\n\tWarningDeepBreath\t= \"Mostrar aviso especial para $spell:28524\",\n\tSpecWarnSapphLow\t= \"Advertencia especial para fase de ejecución del 10% (cancelación de fase de aire)\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t= \"%s respira hondo.\",\n\tAirPhase\t\t\t= \"¡Sapphiron se eleva en el aire!\",\n\tLandingPhase\t\t= \"¡Sapphiron reanuda su ataque!\"\n})\n\n----------------\n-- Kel'Thuzad --\n----------------\nL = DBM:GetModLocalization(\"Kel'Thuzad\")\n\nL:SetGeneralLocalization({\n\tname = \"Kel'Thuzad\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t= \"Fase 2 en 10 s\",\n\twarnAddsSoon\t= \"Guardianes de Corona de Hielo en breve\",\n\tWeaponsStatus\t= \"Desequipar automático habilitado: %s (%s - %s)\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t= \"Fase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"Mostrar temporizador para el cambio a Fase 2\",\n\tspecwarnP2Soon\t\t= \"Mostrar aviso especial 10 s antes del cambio a Fase 2\",\n\twarnAddsSoon\t\t= \"Mostrar aviso previo para cuando aparezcan los Guardianes de Corona de Hielo\",\n\tWeaponsStatus\t\t= \"Advertencia especial al inicio del combate si la función desequipar/equipar está habilitada\",\n\tEqUneqWeaponsKT\t\t= \"Desequipar y equipar armas automáticamente con temporizador, antes y después del $spell:28410. Requiere equipamiento llamado \\\"pve\\\"\",\n\tEqUneqWeaponsKT2\t= \"Desequipar y equipar armas automáticamente cuando se lanza $spell:28410 sobre USTED. Requiere equipamiento llamado \\\"pve\\\"\",\n\tRemoveBuffsOnMC\t\t= \"Elimina los buffs cuando $spell:28410 es lanzado sobre ti. Cada opción es acumulativa\",\n\tGift\t\t\t\t= \"Eliminar $spell:48469 / $spell:48470. Enfoque mínimo para evitar que $spell:33786 se resista\",\n\tCCFree\t\t\t\t= \"+ Eliminar $spell:48169 / $spell:48170. Tener en cuenta las resistencias de los hechizos de la escuela Sombra\",\n\tShortOffensiveProcs\t= \"+ Elimina los procs ofensivos de baja duración. Recomendado para la seguridad de la raid sin comprometer la producción de daño de la raid\",\n\tMostOffensiveBuffs\t= \"+ Elimina la mayoría de los buffs ofensivos (principalmente para los Casters y los |cFFFF7C0ADruidas Ferales|r). Máxima seguridad en la incursión con la pérdida de daño y la necesidad de auto-buff/cambio de forma\"\n})\n\nL:SetMiscLocalization({\n\tYell\t\t= \"¡Esbirros, sirvientes, soldados de la fría oscuridad! ¡Obedeced la llamada de Kel'Thuzad!\",\n\tYell1Phase2\t= \"¡Pedid misericordia!\", -- 12995\n\tYell2Phase2\t= \"¡Gritad antes de vuestro último suspiro!\", -- 12996\n\tYell3Phase2\t= \"¡Vuestra hora ha llegado!\", -- 12997\n\tYellPhase3\t= \"¡Maestro, necesito ayuda!\", -- 12998\n\tYellGuardians\t= \"Muy bien. ¡Guerreros del desierto helado! ¡Levantaos, os ordeno luchar, matar y morir por vuestro maestro! ¡Que no sobreviva ninguno!\", -- 12994\n\tsetMissing\t= \"¡ATENCIÓN! El desequipamiento / equipamiento automático de armas de DBM no funcionará hasta que cree un equipamiento llamado pve\",\n\tEqUneqLineDescription\t= \"Equipar/desequipar automático\"\n})\n"
  },
  {
    "path": "DBM-Naxx/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\n\nlocal L\n\n-------------------\n--  Anub'Rekhan  --\n-------------------\nL = DBM:GetModLocalization(\"Anub'Rekhan\")\n\nL:SetGeneralLocalization({\n\tname = \"Anub'Rekhan\"\n})\n\nL:SetOptionLocalization({\n\tArachnophobiaTimer\t= \"Activer le timer pour l'arachnophobie (HAUT-FAIT)\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Arachnophobie\",\n\tPull1\t\t\t\t= \"Oui, courez ! Faites circuler le sang !\",\n\tPull2\t\t\t\t= \"Rien qu'une petite bouchée…\"\n})\n\n----------------------------\n--  Grand Widow Faerlina  --\n----------------------------\nL = DBM:GetModLocalization(\"Faerlina\")\n\nL:SetGeneralLocalization({\n\tname = \"Grande Veuve Faerlina\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t= \"Fin du baisé de la veuve dans 5 sec\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t= \"Activer l'avertissement de fin du baisé de la veuve\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t\t= \"À genoux, vermisseau !\"--Not actually pull trigger, but often said on pull\n})\n\n---------------\n--  Maexxna  --\n---------------\nL = DBM:GetModLocalization(\"Maexxna\")\n\nL:SetGeneralLocalization({\n\tname = \"Maexxna\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t= \"Araignées dans 5 sec\",\n\tWarningSpidersNow\t= \"Arrivée des araignées!\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t\t\t= \"Araignées\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t= \"Activer le pré-avertissement pour les araignées\",\n\tWarningSpidersNow\t= \"Activer l'avertissement pour les araignées\",\n\tTimerSpider\t\t\t= \"Montre le timer pour l'arrivée des araignées\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Arachnophobie\"\n})\n\n------------------------------\n--  Noth the Plaguebringer  --\n------------------------------\nL = DBM:GetModLocalization(\"Noth\")\n\nL:SetGeneralLocalization({\n\tname = \"Noth le Porte-peste\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t\t= \"Téléportation!\",\n\tWarningTeleportSoon\t\t= \"Téléportation dans in 10 sec\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t\t= \"Téléportation\",\n\tTimerTeleportBack\t\t= \"Retour de TP\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t\t= \"Activer l'avertissement pour la téléporation\",\n\tWarningTeleportSoon\t\t= \"Activer le pré-avertissement pour la téléporation\",\n\tTimerTeleport\t\t\t= \"Activer le timer pour la téléporation\",\n\tTimerTeleportBack\t\t= \"Activer le timer pour le retour de North\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Mourez, intrus !\",\n\tAdds\t\t\t\t= \"invoque des guerriers squelettes !\",\n\tAddsTwo\t\t\t\t= \"lève encore d'autres squelettes !\"\n})\n\n--------------------------\n--  Heigan the Unclean  --\n--------------------------\nL = DBM:GetModLocalization(\"Heigan\")\n\nL:SetGeneralLocalization({\n\tname = \"Heigan l'Impur\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t\t= \"Téléportation!\",\n\tWarningTeleportSoon\t\t= \"Téléporation dans %d sec\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t\t= \"Téléporation\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t\t= \"Activer l'avertissement de Téléporation\",\n\tWarningTeleportSoon\t\t= \"Activer le pré-avertissement de Téléporation\",\n\tTimerTeleport\t\t\t= \"Activer le timer pour la Téléporation\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t\t= \"Vous êtes à moi, maintenant.\"\n})\n\n---------------\n--  Loatheb  --\n---------------\nL = DBM:GetModLocalization(\"Loatheb\")\n\nL:SetGeneralLocalization({\n\tname = \"Horreb\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t\t= \"Soins possibles dans 3 sec\",\n\tWarningHealNow\t\t= \"SOIGNEZ MAINTENANT!\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t= \"Activer l'avertissement \\\"Soins dans 3 sec\\\" \",\n\tWarningHealNow\t\t= \"Activer l'avertissement \\\"SOIGNEZ MAINTENANT\\\" \",\n\tSporeDamageAlert\t= \"Envoyer un murmure et annoncer aux joueurs de raid qui endommagent les spores\\n(nécessite que l'annonce soit activée et le statut de leader/promu)\",\n\tCorruptedSorting\t= \"Set infoframe sorting behaviour for $spell:55593\", -- translation missing\n\tAlphabetical\t\t= \"Sort in alphabetical order\", -- translation missing\n\tDuration\t\t\t= \"Sort by duration\" -- translation missing\n})\n\n-----------------\n--  Patchwerk  --\n-----------------\nL = DBM:GetModLocalization(\"Patchwerk\")\n\nL:SetGeneralLocalization({\n\tname = \"Le recousu\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful\t= \"Annoncer les Frappes Haineuses au raid\\n(vous devez être promote ou le raid leader pour le faire)\"\n})\n\nL:SetMiscLocalization({\n\tyell1\t\t\t= \"R'cousu veut jouer !\",\n\tyell2\t\t\t= \"R'cousu avatar de guerre pour Kel'Thuzad !\",\n\tHatefulStrike\t= \"Frappe Haineuse --> %s [%s]\"\n})\n\n-----------------\n--  Grobbulus  --\n-----------------\nL = DBM:GetModLocalization(\"Grobbulus\")\n\nL:SetGeneralLocalization({\n\tname = \"Grobbulus\"\n})\n\n-------------\n--  Gluth  --\n-------------\nL = DBM:GetModLocalization(\"Gluth\")\n\nL:SetGeneralLocalization({\n\tname = \"Gluth\"\n})\n\n----------------\n--  Thaddius  --\n----------------\nL = DBM:GetModLocalization(\"Thaddius\")\n\nL:SetGeneralLocalization({\n\tname = \"Thaddius\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t= \"Polarité changée : %s\",\n\tWarningChargeNotChanged\t= \"Même polarité\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t= \"Activer l'avertissement spécial quand votre polarité a changé\",\n\tWarningChargeNotChanged\t= \"Activer l'avertissement spécial quand votre polarité n'a pas changé\",\n\tTimerShiftCast\t\t\t= \"Afficher le timer pour le cast du changement de polarité\",\n\tArrowsEnabled\t\t\t= \"Afficher les flèches (stratégie normale : \\\"2 camps\\\")\",\n\tArrowsRightLeft\t\t\t= \"Afficher les flèches droite/gauche pour la stratégie \\\"4 camps\\\" (flèche gauche si la polarité a changé et droite sinon)\",\n\tArrowsInverse\t\t\t= \"Inverser la statégie \\\"4 camps\\\" (afficher la flèche droite si la polarité a changé et la gauche sinon)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t\t\t\t\t= \"Stalagg écraser toi !\",\n\tEmote\t\t\t\t\t= \"%s entre en surcharge !\",\n\tEmote2\t\t\t\t\t= \"Bobine de Tesla entre en surcharge !\",\n\tBoss1\t\t\t\t\t= \"Feugen\",\n\tBoss2\t\t\t\t\t= \"Stalagg\",\n\tCharge1\t\t\t\t\t= \"négative\",\n\tCharge2\t\t\t\t\t= \"positive\"\n})\n\n-----------------\n--  Razuvious  --\n-----------------\nL = DBM:GetModLocalization(\"Razuvious\")\n\nL:SetGeneralLocalization({\n\tname = \"Razuvious\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t= \"Mur de Bouclier expire dans 5 sec\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t= \"Activer l'avertissement du Mur de Bouclier\"\n})\n\nL:SetMiscLocalization({\n\tYell1\t\t\t\t\t= \"Pas de quartier !\",\n\tYell2\t\t\t\t\t= \"Les cours sont terminés ! Montrez-moi ce que vous avez appris !\",\n\tYell3\t\t\t\t\t= \"Faites ce que vous ai appris !\",\n\tYell4\t\t\t\t\t= \"Frappe-le à la jambe\"\n})\n\n--------------\n--  Gothik  --\n--------------\nL = DBM:GetModLocalization(\"Gothik\")\n\nL:SetGeneralLocalization({\n\tname = \"Gothik\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t= \"Vague %d: %s dans 3 sec\",\n\tWarningWaveSpawned\t= \"Vague %d: %s arrivée\",\n\tWarningRiderDown\t= \"Cavalier down\",\n\tWarningKnightDown\t= \"Chevalier down\",\n\tWarningPhase2\t\t= \"Phase 2\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t\t\t= \"Vague #%d\",\n\tTimerPhase2\t\t\t= \"Phase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"Afficher le timer des vagues\",\n\tTimerPhase2\t\t\t= \"Afficher le timer pour la Phase 2\",\n\tWarningWaveSoon\t\t= \"Activer le pré-avertissement pour les Vagues\",\n\tWarningWaveSpawned\t= \"Avertir quand une vague est arrivée\",\n\tWarningRiderDown\t= \"Avertir quand un Cavalier meurt\",\n\tWarningKnightDown\t= \"Avertir quand un Chevalier meurt\",\n\tWarningPhase2\t\t= \"Activer l'avertissement pour la Phase 2\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t\t= \"Dans votre folie, vous avez provoqué votre propre mort.\",\n\tWarningWave1\t\t= \"%d %s\",\n\tWarningWave2\t\t= \"%d %s et %d %s\",\n\tWarningWave3\t\t= \"%d %s, %d %s et %d %s\",\n\tTrainee\t\t\t\t= \"Recrues\",\n\tKnight\t\t\t\t= \"Chevaliers\",\n\tRider\t\t\t\t= \"Cavaliers\",\n\tGothikDoorEmote\t\t= \"La porte centrale s'ouvre !\",\n\tGothikPhase2Yell\t= \"J'ai attendu assez longtemps. Maintenant, vous affrontez le moissonneur d'âmes.\"\n})\n\n----------------\n--  Horsemen  --\n----------------\nL = DBM:GetModLocalization(\"Horsemen\")\n\nL:SetGeneralLocalization({\n\tname = \"Les quatre Cavaliers\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Marque %d dans 3 sec\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Activer le pré-avertissement des Marques\",\n\tSpecialWarningMarkOnPlayer\t= \"Avertissement spécial quand vous avez plus de 4 marques sur vous\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t\t\t\t\t= \"Thane Korth'azz\",\n\tRivendare\t\t\t\t\t= \"Baron Vaillefendre\",\n\tBlaumeux\t\t\t\t\t= \"Dame Blaumeux\",\n\tZeliek\t\t\t\t\t\t= \"Sire Zeliek\"\n})\n\n-----------------\n--  Sapphiron  --\n-----------------\nL = DBM:GetModLocalization(\"Sapphiron\")\n\nL:SetGeneralLocalization({\n\tname = \"Sapphiron\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t= \"Envol dans 10 sec\",\n\tWarningAirPhaseNow\t= \"Dans les airs\",\n\tWarningLanded\t\t= \"Atterrissage de Sapphiron\",\n\tWarningDeepBreath\t= \"Souffle de givre !\",\n\tSpecWarnSapphLow\t= \"Sapphiron ne peut pas voler !\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t\t= \"Envol\",\n\tTimerLanding\t\t= \"Atterrissage dans\",\n\tTimerIceBlast\t\t= \"Souffle de givre\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t= \"Activer le pré-avertissement de la phase en vol\",\n\tWarningAirPhaseNow\t= \"Activer l'avertissement de la phase en vol\",\n\tWarningLanded\t\t= \"Activer l'avertissement pour la phase au sol\",\n\tTimerAir\t\t\t= \"Afficher le timer de la phase en vol\",\n\tTimerLanding\t\t= \"Afficher le timer de l'atterrissage\",\n\tTimerIceBlast\t\t= \"Afficher le timer du Souffle de givre\",\n\tWarningDeepBreath\t= \"Activer l'avertissement spécial pour le Souffle de givre\",\n\tSpecWarnSapphLow\t= \"Avertissement spécial pour la phase d'exécution à 10 % (annulation de la phase d'air)\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t= \"prend une grande inspiration\",\n\tAirPhase\t\t\t= \"Saphiron s'envole !\",\n\tLandingPhase\t\t= \"Saphiron reprend ses attaques !\"\n})\n\n------------------\n--  Kel'thuzad  --\n------------------\nL = DBM:GetModLocalization(\"Kel'Thuzad\")\n\nL:SetGeneralLocalization({\n\tname = \"Kel'Thuzad\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t\t= \"Kel'Thuzad sera actif dans 10 secondes\",\n\tWeaponsStatus\t\t= \"Auto-déséquipement activé: %s (%s - %s)\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t\t\t\t= \"Phase 2\",\n\tBlastTimer\t\t\t\t= \"Heal Maintenant !\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"Afficher le timer pour la Phase 2\",\n\tspecwarnP2Soon\t\t= \"Montre un timer pour prévenir 10 secondes avant l'arrivée de Kel'Thuzad\",\n\tWeaponsStatus\t\t= \"Alerte spéciale si la fonction de déséquipement n'est pas active au début du combat\",\n\tEqUneqWeaponsKT\t\t= \"Déséquipez et équipez automatiquement les armes avant et après $spell:28410. Nécessite un ensemble d'équipement nommé \\\"pve\\\"\",\n\tEqUneqWeaponsKT2\t= \"Déséquiper et équiper automatiquement les armes lorsque $spell:28410 est lancé sur VOUS. Nécessite un ensemble d'équipement nommé \\\"pve\\\"\",\n\tRemoveBuffsOnMC\t\t= \"Retirez les buffs lorsque $spell:28410 est lancé sur vous. Chaque option est cumulative.\",\n\tGift\t\t\t\t= \"Supprimer $spell:48469 / $spell:48470. Approche minimale pour éviter $spell:33786 résistances.\",\n\tCCFree\t\t\t\t= \"+ Supprimer $spell:48169 / $spell:48170. Tient compte des résistances des sorts de l'école de l'ombre.\",\n\tShortOffensiveProcs\t= \"+ Supprimer les procs offensifs qui ont une faible durée. Recommandé pour la sécurité du raid sans compromettre les dégâts du raid.\",\n\tMostOffensiveBuffs\t= \"+ Supprimer la plupart des buffs offensifs (principalement pour les Casters et les |cFFFF7C0AFarouche Druide|r). Sécurité maximale pour les raids avec une perte de dégâts et la nécessité de s'auto-rebuffer/shapeshift!\"\n})\n\nL:SetMiscLocalization({\n\tYell\t\t= \"Serviteurs, valets et soldats des ténèbres glaciales ! Répondez à l'appel de Kel'Thuzad !\",\n\tYell1Phase2\t= \"Faites vos prières !\", -- 12995\n\tYell2Phase2\t= \"Hurlez et expirez !\", -- 12996\n\tYell3Phase2\t= \"Votre fin est proche !\", -- 12997\n\tYellPhase3\t= \"Maître, j'ai besoin d'aide !\", -- 12998\n\tYellGuardians\t= \"Très bien. Guerriers des terres gelées, relevez-vous ! Je vous ordonne de combattre, de tuer et de mourir pour votre maître ! N'épargnez personne !\", -- 12994\n\tsetMissing\t= \"ATTENTION! DBM auto-déséquipement d'arme ne fonctionnera pas tant que vous n'aurez pas créer un set apellé pve\",\n\tEqUneqLineDescription\t= \"Équiper/Déséquiper automatiquement\"\n})\n"
  },
  {
    "path": "DBM-Naxx/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\n\nlocal L\n\n-------------------\n--  거미 지구    --\n-------------------\n-------------------\n--  아눕레칸     --\n-------------------\nL = DBM:GetModLocalization(\"Anub'Rekhan\")\n\nL:SetGeneralLocalization({\n\tname = \"아눕레칸\"\n})\n\nL:SetOptionLocalization({\n\tArachnophobiaTimer\t= \"거미의 공포 업적 가능 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"거미의 공포 업적 가능\",\n\tPull1\t\t\t\t= \"그래, 도망쳐! 더 신선한 피가 솟구칠 테니!\",\n\tPull2\t\t\t\t= \"어디 맛 좀 볼까...\"\n})\n\n---------------------\n--  귀부인 펠리나  --\n---------------------\nL = DBM:GetModLocalization(\"Faerlina\")\n\nL:SetGeneralLocalization({\n\tname = \"귀부인 펠리나\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t= \"귀부인의 은총 종료 5초 전\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t= \"귀부인의 은총 종료 이전에 알림 보기\"\n})\n\n---------------\n--  맥스나   --\n---------------\nL = DBM:GetModLocalization(\"Maexxna\")\n\nL:SetGeneralLocalization({\n\tname = \"맥스나\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t= \"5초 후 거미의 입맞춤\",\n\tWarningSpidersNow\t= \"거미의 입맞춤\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t\t= \"다음 거미의 입맞춤\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t= \"거미의 입맞춤 이전에 알림 보기\",\n\tWarningSpidersNow\t= \"거미의 입맞춤 알림 보기\",\n\tTimerSpider\t\t\t= \"다음 거미의 입맞춤 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"거미의 공포\"\n})\n\n---------------\n-- 역병 지구 --\n---------------\n---------------------\n--  역병술사 노스  --\n---------------------\nL = DBM:GetModLocalization(\"Noth\")\n\nL:SetGeneralLocalization({\n\tname = \"역병술사 노스\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"순간이동\",\n\tWarningTeleportSoon\t= \"10초 후 순간이동\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t= \"다음 순간이동\",\n\tTimerTeleportBack\t= \"방으로 복귀\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t\t= \"순간이동 알림 보기\",\n\tWarningTeleportSoon\t\t= \"순간이동 이전에 알림 보기\",\n\tTimerTeleport\t\t\t= \"다음 순간이동 바 보기\",\n\tTimerTeleportBack\t\t= \"방으로 복귀 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"죽어라, 침입자들아!\",\n\tAdds\t\t\t\t= \"해골 전사를 소환합니다!\",\n\tAddsTwo\t\t\t\t= \"해골을 계속 일으킵니다!\"\n})\n\n--------------------------\n--  부정의 헤이건  --\n--------------------------\nL = DBM:GetModLocalization(\"Heigan\")\n\nL:SetGeneralLocalization({\n\tname = \"부정의 헤이건\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"순간이동\",\n\tWarningTeleportSoon\t= \"%d초 후 순간이동\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t= \"다음 순간이동\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t\t= \"순간이동 알림 보기\",\n\tWarningTeleportSoon\t\t= \"순간이동 이전에 알림 보기\",\n\tTimerTeleport\t\t\t= \"다음 순간이동 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"이제 넌 내 것이다.\"\n})\n\n----------------\n--  로데브  --\n----------------\nL = DBM:GetModLocalization(\"Loatheb\")\n\nL:SetGeneralLocalization({\n\tname = \"로데브\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t\t= \"3초 후 치유 가능\",\n\tWarningHealNow\t\t= \"치유 가능\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t= \"치유 가능 이전에 알림 보기\",\n\tWarningHealNow\t\t= \"치유 가능 알림 보기\",\n\tSporeDamageAlert\t= \"포자에게 데미지를 주는 공격대원에게 귓속말 보내기 및 알리기\\n(공대장 및 경보 권한이 있을 경우)\",\n\tCorruptedSorting\t= \"Set infoframe sorting behaviour for $spell:55593\", -- translation missing\n\tAlphabetical\t\t= \"Sort in alphabetical order\", -- translation missing\n\tDuration\t\t\t= \"Sort by duration\" -- translation missing\n})\n\n-----------------\n-- 피조물 지구 --\n-----------------\n-----------------\n--  패치워크  --\n-----------------\nL = DBM:GetModLocalization(\"Patchwerk\")\n\nL:SetGeneralLocalization({\n\tname = \"패치워크\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful = \"증오의 일격 대상자를 공격대 채팅창에 알리기\\n(만약 당신이 공대장의 권한이 있거나, 승급을 받은 유저라면 이 기능을 사용할 수 있습니다.)\"\n})\n\nL:SetMiscLocalization({\n\tyell1 = \"패치워크랑 놀아줘!\",\n\tyell2 = \"켈투자드님이 패치워크 싸움꾼으로 만들었다.\",\n\tHatefulStrike = \"증오의 일격 --> %s [%s]\"\n})\n\n-----------------\n--  그라불루스  --\n-----------------\nL = DBM:GetModLocalization(\"Grobbulus\")\n\nL:SetGeneralLocalization({\n\tname = \"그라불루스\"\n})\n\n-------------\n--  글루스  --\n-------------\nL = DBM:GetModLocalization(\"Gluth\")\n\nL:SetGeneralLocalization({\n\tname = \"글루스\"\n})\n\n----------------\n--  타디우스  --\n----------------\nL = DBM:GetModLocalization(\"Thaddius\")\n\nL:SetGeneralLocalization({\n\tname = \"타디우스\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t= \"전하 변경 : %s\",\n\tWarningChargeNotChanged\t= \"전하 유지됨\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t= \"전하가 바뀐 경우 알림 보기\",\n\tWarningChargeNotChanged\t= \"전하가 바뀌지 않을 경우 알림 보기\",\n\tArrowsEnabled\t\t\t= \"극성변환 후 화살표 보기(일반 \\\"2 지역\\\" 공략용)\",\n\tArrowsRightLeft\t\t\t= \"극성변환 후 오른쪽/왼쪽 화살표 보기(\\\"4 지역\\\" 공략용)\",\n\tArrowsInverse\t\t\t= \"극성변환 후 오른쪽/왼쪽 화살표를 반대로 보기(\\\"4 지역\\\" 공략용)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t= \"스탈라그, 박살낸다!\",\n\tEmote\t= \"%s|1이;가; 과부하 상태가 됩니다.\",\n\tEmote2\t= \"테슬라 코일!!\",\n\tBoss1\t= \"퓨진\",\n\tBoss2\t= \"스탈라그\",\n\tCharge1\t= \"마이너스 전하\",\n\tCharge2\t= \"플러스 전하\",\n\tArrows\t= \"화살표\"\n})\n\n-----------------\n-- 군사 지구   --\n-----------------\n---------------------------\n--  훈련교관 라주비어스  --\n---------------------------\nL = DBM:GetModLocalization(\"Razuvious\")\n\nL:SetGeneralLocalization({\n\tname = \"훈련교관 라주비어스\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t= \"뼈 보호막 종료 5초 전\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t= \"뼈 보호막 종료 알림 보기\"\n})\n\nL:SetMiscLocalization({\n\tYell1 = \"절대 봐주지 마라!\",\n\tYell2 = \"훈련은 끝났다! 배운 걸 보여줘라!\",\n\tYell3 = \"훈련받은 대로 해!\",\n\tYell4 = \"다리를 후려 차라! 무슨 문제 있나?\"\n})\n\n------------------------\n--  영혼 착취자 고딕  --\n------------------------\nL = DBM:GetModLocalization(\"Gothik\")\n\nL:SetGeneralLocalization({\n\tname = \"영혼 착취자 고딕\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t= \"지원군 %d: %s 3초전\",\n\tWarningWaveSpawned\t= \"지원군 %d: %s\",\n\tWarningRiderDown\t= \"무자비한 죽음의 기병 처치\",\n\tWarningKnightDown\t= \"무자비한 죽음의 기사 처치\",\n\tWarningPhase2\t\t= \"2 단계\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"지원군 #%d\",\n\tTimerPhase2\t= \"2 단계\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"다음 지원군 바 보기\",\n\tTimerPhase2\t\t\t= \"2 단계 바 보기\",\n\tWarningWaveSoon\t\t= \"지원군 이전에 알림 보기\",\n\tWarningWaveSpawned\t= \"지원군 알림 보기\",\n\tWarningRiderDown\t= \"죽음의 기병 처치 알림 보기\",\n\tWarningKnightDown\t= \"죽음의 기사 처치 알림 보기\",\n\tWarningPhase2\t\t= \"2 단계 알림 보기\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t= \"어리석은 것들, 스스로 죽음을 자초하다니!\",\n\tWarningWave1\t= \"%d %s\",\n\tWarningWave2\t= \"%d %s, %d %s\",\n\tWarningWave3\t= \"%d %s, %d %s, %d %s\",\n\tTrainee\t\t\t= \"|4수련생:수련생;\",\n\tKnight\t\t\t= \"|4죽음의 기사:죽음의 기사;\",\n\tRider\t\t\t= \"|4죽음의 기병:죽음의 기병;\",\n\tGothikDoorEmote\t= \"중앙 관문이 열립니다!\",\n\tGothikPhase2Yell= \"오랫동안 기다렸다. 이제 영혼 착취자를 만날 차례다.\"\n})\n\n--------------------\n--  4인의 기사단  --\n--------------------\nL = DBM:GetModLocalization(\"Horsemen\")\n\nL:SetGeneralLocalization({\n\tname = \"4인의 기사단\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t\t= \"3초 후 징표 #%d\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t\t= \"징표 이전에 알림 보기\",\n\tSpecialWarningMarkOnPlayer\t= \"징표가 4 중첩 이상시 특수 경고 보기\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t= \"영주 코스아즈\",\n\tRivendare\t= \"남작 리븐데어\",\n\tBlaumeux\t= \"여군주 블라미우스\",\n\tZeliek\t\t= \"젤리에크 경\"\n})\n\n-------------------\n-- 서리고룡 둥지 --\n-------------------\n--------------\n--  사피론  --\n--------------\nL = DBM:GetModLocalization(\"Sapphiron\")\n\nL:SetGeneralLocalization({\n\tname = \"사피론\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t\t= \"비행 단계 10초 전\",\n\tWarningAirPhaseNow\t\t= \"비행 단계\",\n\tWarningLanded\t\t\t= \"착지\",\n\tWarningDeepBreath\t\t= \"냉기 숨결!\",\n\tSpecWarnSapphLow\t\t= \"사피론은 날지 못한다!\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t\t\t= \"비행 단계 종료\",\n\tTimerLanding\t\t\t= \"착지 중\",\n\tTimerIceBlast\t\t\t= \"냉기 숨결\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t\t= \"비행 단계 이전에 알림 보기\",\n\tWarningAirPhaseNow\t\t= \"비행 단계 알림 보기\",\n\tWarningLanded\t\t\t= \"지상 단계 알림 보기\",\n\tTimerAir\t\t\t\t= \"비행 단계 유지시간 바 보기\",\n\tTimerLanding\t\t\t= \"착지 중 바 보기\",\n\tTimerIceBlast\t\t\t= \"냉기 숨결 시전 바 보기\",\n\tWarningDeepBreath\t\t= \"냉기 숨결 특수 경고 보기\",\n\tSpecWarnSapphLow\t\t= \"10% 실행 단계에 대한 특별 경고(공기 단계 취소)\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t\t= \"숨을 깊게 들이마십니다.\",\n\tAirPhase\t\t\t\t= \"사피론이 공중으로 떠오릅니다!\",\n\tLandingPhase\t\t\t= \"사피론이 다시 공격합니다!\"\n})\n\n------------------\n--  켈투자드  --\n------------------\nL = DBM:GetModLocalization(\"Kel'Thuzad\")\n\nL:SetGeneralLocalization({\n\tname = \"켈투자드\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t\t= \"10초 후 2 단계\",\n\twarnAddsSoon\t\t= \"곧 얼음왕관의 수호자\",\n\tWeaponsStatus\t\t= \"Auto Unequipping enabled: %s (%s - %s)\" --Needs Translating\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t\t\t= \"2 단계\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"2 단계 바 보기\",\n\tspecwarnP2Soon\t\t= \"2 단계 10초 전에 특수 경고 보기\",\n\twarnAddsSoon\t\t= \"얼음왕관의 수호자 이전에 알림 보기\",\n\tWeaponsStatus\t\t= \"Special warning at combat start if unequip/equip function is enabled\", --Needs Translating\n\tEqUneqWeaponsKT\t\t= \"$spell:28410 전후에 자동으로 무기를 장착 해제하고 장착합니다. \\\"pve\\\"라는 장비 세트가 필요합니다.\",\n\tEqUneqWeaponsKT2\t= \"$spell:28410이 당신에게 시전되면 자동으로 무기를 장착 해제하고 장착합니다. \\\"pve\\\"라는 장비 세트가 필요합니다.\",\n\tRemoveBuffsOnMC\t\t= \"$spell:28410를 시전하면 버프를 제거합니다. 각 옵션은 누적됩니다.\",\n\tGift\t\t\t\t= \"$spell:48469 / $spell:48470을 제거합니다. $spell:33786 저항을 방지하기 위한 최소한의 접근입니다.\",\n\tCCFree\t\t\t\t= \"+ $spell:48169 / $spell:48170을 제거합니다. 그림자 학교의 주문 저항을 설명합니다.\",\n\tShortOffensiveProcs\t= \"+ 지속 시간이 짧은 공격 절차를 제거합니다. 공격대 피해 출력을 손상시키지 않으면서 공격대 안전을 위해 권장됩니다.\",\n\tMostOffensiveBuffs\t= \"+ 대부분의 공격 버프를 제거합니다(주로 캐스터 및 |cFFFF7C0A야성 드루이드|r용). 손상 출력 손실로 최대 레이드 안전 및 자체 버프/변형이 필요합니다!\"\n})\n\nL:SetMiscLocalization({\n\tYell\t\t= \"어둠의 문지기와 하수인, 그리고 병사들이여! 나 켈투자드가 부르니 명을 받들라!\",\n\tYell1Phase2\t= \"자비를 구하라!\", -- 12995\n\tYell2Phase2\t= \"마지막 숨이나 쉬어라!\", -- 12996\n\tYell3Phase2\t= \"최후를 맞이하라!\", -- 12997\n\tYellPhase3\t= \"주인님, 도와주소서!\", -- 12998\n\tYellGuardians\t= \"좋다. 얼어붙은 땅의 전사들이여, 일어나라! 너희에게 싸울 것을 명하노라. 날 위해 죽고, 날 위해 죽여라! 한 놈도 살려두지 마라!\", -- 12994\n\tsetMissing\t= \"주목! DBM 자동 무기 해제/장착은 pve라는 장비 세트를 생성할 때까지 작동하지 않습니다.\",\n\tEqUneqLineDescription\t= \"자동 장착/장비 해제\"\n})\n"
  },
  {
    "path": "DBM-Naxx/localization.mx.lua",
    "content": "if GetLocale() ~= \"esMX\" then return end\nlocal L\n\n-----------------\n-- Anub'Rekhan --\n-----------------\nL = DBM:GetModLocalization(\"Anub'Rekhan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Anub'Rekhan\"\n})\n\nL:SetWarningLocalization({\n\tSpecialLocust\t\t= \"Enjambre de langostas\",\n\tWarningLocustFaded\t= \"Enjambre de langostas ha terminado\"\n})\n\nL:SetOptionLocalization({\n\tSpecialLocust\t\t= \"Mostrar aviso especial para $spell:28785\",\n\tWarningLocustFaded\t= \"Mostrar aviso cuando termine $spell:28785\",\n\tArachnophobiaTimer\t= \"Mostrar temporizador para el logro 'Aracnofobia'\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Logro: Aracnofobia\",\n\tPull1\t\t\t\t= \"¡Eso, corred! ¡Así la sangre circula más rápido!\",\n\tPull2\t\t\t\t= \"Solo un bocado...\"\n})\n\n-------------------------\n-- Gran Viuda Faerlina --\n-------------------------\nL = DBM:GetModLocalization(\"Faerlina-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Gran Viuda Faerlina\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t= \"Abrazo de la viuda expirando en 5 s\",\n\tWarningEmbraceExpired\t= \"Abrazo de la viuda ha expirado\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t= \"Mostrar aviso previo para cuando expire Abrazo de la viuda\",\n\tWarningEmbraceExpired\t= \"Mostrar aviso cuando expire Abrazo de la viuda\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t\t= \"¡Arrodíllate ante mí, sabandija!\"--Not actually pull trigger, but often said on pull\n})\n\n-------------\n-- Maexxna --\n-------------\nL = DBM:GetModLocalization(\"Maexxna-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Maexxna\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t= \"Arañitas de Maexxna en 5 s\",\n\tWarningSpidersNow\t= \"Arañitas de Maexxna\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t= \"Siguientes arañitas\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t= \"Mostrar aviso previo para cuando aparezcan Arañitas de Maexxna\",\n\tWarningSpidersNow\t= \"Mostrar aviso cuando aparezcan Arañitas de Maexxna\",\n\tTimerSpider\t\t\t= \"Mostrar temporizador para las siguientes Arañitas de Maexxna\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Logro: Aracnofobia\"\n})\n\n-----------------------\n-- Noth el Pesteador --\n-----------------------\nL = DBM:GetModLocalization(\"Noth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Noth el Pesteador\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Teletransporte\",\n\tWarningTeleportSoon\t= \"Teletransporte en 10 s\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t= \"Teletransporte: Balcón\",\n\tTimerTeleportBack\t= \"Teletransporte: Suelo\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Mostrar aviso para Teletransporte\",\n\tWarningTeleportSoon\t= \"Mostrar aviso previo para Teletransporte\",\n\tTimerTeleport\t\t= \"Mostrar temporizador para el siguiente Teletransporte: Balcón\",\n\tTimerTeleportBack\t= \"Mostrar temporizador para Teletransporte: Suelo\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"¡Muere, intruso!\",\n\tAddsYell\t\t\t= \"¡Levantaos, soldados míos! ¡Levantaos y luchad una vez más!\",\n\tAdds\t\t\t\t= \"invoca a guerreros esqueletos!\",\n\tAddsTwo\t\t\t\t= \"alza más esqueletos!\"\n})\n\n----------------------\n-- Heigan el Impuro --\n----------------------\nL = DBM:GetModLocalization(\"Heigan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Heigan el Impuro\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Teletransporte\",\n\tWarningTeleportSoon\t= \"Teletransporte en %d s\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t= \"Teletransporte\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Mostrar aviso para Teletransporte\",\n\tWarningTeleportSoon\t= \"Mostrar aviso previo para Teletransporte\",\n\tTimerTeleport\t\t= \"Mostrar aviso para Teletransporte\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Ahora me perteneces.\"\n})\n\n-------------\n-- Loatheb --\n-------------\nL = DBM:GetModLocalization(\"Loatheb-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Loatheb\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t= \"Sanación posible en 3 s\",\n\tWarningHealNow\t= \"¡Sanad ahora!\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t= \"Mostrar aviso previo para la franja de sanación\",\n\tWarningHealNow\t\t= \"Mostrar aviso para la franja de sanación\",\n\tSporeDamageAlert\t= \"Enviar susurros y avisar a la banda de los jugadores que estén dañando esporas\\n(necesita 'anunciar' activado y lider/ayudante)\",\n\tCorruptedSorting\t= \"Set infoframe sorting behaviour for $spell:55593\", -- translation missing\n\tAlphabetical\t\t= \"Sort in alphabetical order\", -- translation missing\n\tDuration\t\t\t= \"Sort by duration\" -- translation missing\n})\n\n---------------\n-- Remendejo --\n---------------\nL = DBM:GetModLocalization(\"Patchwerk-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Remendejo\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful = \"Avisar por chat de banda los Golpes de Odio (necesitas ser ayudante o lider para eso)\"\n})\n\nL:SetMiscLocalization({\n\tyell1 = \"¡Remendejo quiere jugar!\",\n\tyell2 = \"¡Remendejo es la encarnación de guerra de Kel'Thuzad!\",\n\tHatefulStrike = \"Golpe de Odio --> %s [%s]\"\n})\n\n---------------\n-- Grobbulus --\n---------------\nL = DBM:GetModLocalization(\"Grobbulus-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Grobbulus\"\n})\n\n-----------\n-- Gluth --\n-----------\nL = DBM:GetModLocalization(\"Gluth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Gluth\"\n})\n\n--------------\n-- Thaddius --\n--------------\nL = DBM:GetModLocalization(\"Thaddius-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Thaddius\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t= \"Polaridad cambiada a %s\",\n\tWarningChargeNotChanged\t= \"Tu polaridad no ha cambiado\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t= \"Mostrar aviso especial cuando tu polaridad cambie\",\n\tWarningChargeNotChanged\t= \"Mostrar aviso especial cuando tu polaridad no cambie\",\n\tArrowsEnabled\t\t\t= \"Mostrar flechas (estrategia típica de dos grupos)\",\n\tArrowsRightLeft\t\t\t= \"Mostrar flechas de izquierda y derecha (estrategia de cuatro grupos; muestra la flecha izquierda si cambia la polaridad, y la derecha si no cambia)\",\n\tArrowsInverse\t\t\t= \"Mostrar flechas de izquierda y derecha inversas (estrategia de cuatro grupos; muestra la flecha derecha si cambia la polaridad, y la izquierda si no cambia)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t= \"¡Stalagg aplasta!\",\n\tEmote\t= \"¡%s se sobrecarga!\",\n\tEmote2\t= \"¡Espiral Tesla se sobrecarga!\",\n\tBoss1\t= \"Feugen\",\n\tBoss2\t= \"Stalagg\",\n\tCharge1 = \"negativo\",\n\tCharge2 = \"positivo\"\n})\n\n--------------------------\n-- Instructor Razuvious --\n--------------------------\nL = DBM:GetModLocalization(\"Razuvious-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Instructor Razuvious\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t= \"Barrera de huesos termina en 5 s\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t= \"Mostrar aviso previo para cuando termine $spell:29061\"\n})\n\nL:SetMiscLocalization({\n\tYell1 = \"¡No tengan piedad!\",\n\tYell2 = \"¡Se ha acabado el tiempo de práctica! ¡Quiero ver lo que han aprendido!\",\n\tYell3 = \"¡Hagan lo que les enseñé!\",\n\tYell4 = \"Un barrido con pierna... ¿Tienes algún problema?\"\n})\n\n--------------------------\n-- Gothik el Cosechador --\n--------------------------\nL = DBM:GetModLocalization(\"Gothik-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Gothik el Cosechador\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t= \"Oleada %d: %s en 3 s\",\n\tWarningWaveSpawned\t= \"Oleada %d: %s\",\n\tWarningRiderDown\t= \"Jinete muerto\",\n\tWarningKnightDown\t= \"Caballero muerto\",\n\tWarningPhase2\t\t= \"Fase 2\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"Oleada %d\",\n\tTimerPhase2\t= \"Fase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"Mostrar temporizador para la siguiente oleada de esbirros\",\n\tTimerPhase2\t\t\t= \"Mostrar temporizador para el cambio a Fase 2\",\n\tWarningWaveSoon\t\t= \"Mostrar aviso previo para la siguiente oleada de esbirros\",\n\tWarningWaveSpawned\t= \"Mostrar aviso cuando comience una oleada de esbirros\",\n\tWarningRiderDown\t= \"Mostrar aviso cuando muera un Jinete inflexible\",\n\tWarningKnightDown\t= \"Mostrar aviso cuando muera un Caballero de la Muerte inflexible\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t= \"Tú mismo has buscado tu final.\",\n\tWarningWave1\t= \"%d %s\",\n\tWarningWave2\t= \"%d %s y %d %s\",\n\tWarningWave3\t= \"%d %s, %d %s y %d %s\",\n\tTrainee\t\t\t= \"practicantes\",\n\tKnight\t\t\t= \"caballeros\",\n\tRider\t\t\t= \"jinetes\",\n\tGothikDoorEmote\t= \"¡La puerta central se abre!\",\n\tGothikPhase2Yell= \"Ya he esperado suficiente. Ahora se enfrentaran al Recolector de almas.\"\n})\n\n------------------------\n-- Los Cuatro Jinetes --\n------------------------\nL = DBM:GetModLocalization(\"Horsemen-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Los Cuatro Jinetes\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Marca %d en 3 s\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Mostrar aviso previo para las marcas\",\n\tSpecialWarningMarkOnPlayer\t= \"Mostrar aviso especial cuando estés afectado por más de cuatro marcas\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t= \"Señor feudal Korth'azz\",\n\tRivendare\t= \"Barón Osahendido\",\n\tBlaumeux\t= \"Lady Blaumeux\",\n\tZeliek\t\t= \"Sir Zeliek\"\n})\n\n---------------\n-- Sapphiron --\n---------------\nL = DBM:GetModLocalization(\"Sapphiron-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Sapphiron\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t= \"Fase aérea en 10 s\",\n\tWarningAirPhaseNow\t= \"Fase aérea\",\n\tWarningLanded\t\t= \"Fase en tierra\",\n\tWarningDeepBreath\t= \"Aliento de Escarcha\",\n\tSpecWarnSapphLow\t= \"¡Sapphiron no puede volar!\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t= \"Fase aérea\",\n\tTimerLanding\t= \"Fase en tierra\",\n\tTimerIceBlast\t= \"Aliento de Escarcha\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t= \"Mostrar aviso previo para el cambio a fase aérea\",\n\tWarningAirPhaseNow\t= \"Anunciar cambio a fase aérea\",\n\tWarningLanded\t\t= \"Anunciar cambio a fase en tierra\",\n\tTimerAir\t\t\t= \"Mostrar temporizador para el cambio a fase aérea\",\n\tTimerLanding\t\t= \"Mostrar temporizador para el cambio a fase en tierra\",\n\tTimerIceBlast\t\t= \"Mostrar temporizador para $spell:28524\",\n\tWarningDeepBreath\t= \"Mostrar aviso especial para $spell:28524\",\n\tWarningIceblock\t\t= \"Gritar cuando te afecte $spell:28522\",\n\tSpecWarnSapphLow\t= \"Advertencia especial para fase de ejecución del 10% (cancelación de fase de aire)\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t= \"%s respira hondo.\",\n\tWarningYellIceblock\t= \"¡Soy un bloque de hielo!\"\n})\n\n----------------\n-- Kel'Thuzad --\n----------------\n\nL = DBM:GetModLocalization(\"Kel'Thuzad-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Kel'Thuzad\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t= \"Fase 2 en 10 s\",\n\twarnAddsSoon\t= \"Guardianes de Corona de Hielo en breve\",\n\tWeaponsStatus\t= \"Desequipar automático habilitado: %s (%s - %s)\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t= \"Fase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"Mostrar temporizador para el cambio a Fase 2\",\n\tspecwarnP2Soon\t\t= \"Mostrar aviso especial 10 s antes del cambio a Fase 2\",\n\twarnAddsSoon\t\t= \"Mostrar aviso previo para cuando aparezcan los Guardianes de Corona de Hielo\",\n\tWeaponsStatus\t\t= \"Advertencia especial al inicio del combate si la función desequipar/equipar está habilitada\",\n\tEqUneqWeaponsKT\t\t= \"Desequipar y equipar armas automáticamente con temporizador, antes y después del $spell:28410. Requiere equipamiento llamado \\\"pve\\\"\",\n\tEqUneqWeaponsKT2\t= \"Desequipar y equipar armas automáticamente cuando se lanza $spell:28410 sobre USTED. Requiere equipamiento llamado \\\"pve\\\"\",\n\tRemoveBuffsOnMC\t\t= \"Elimina los buffs cuando $spell:28410 es lanzado sobre ti. Cada opción es acumulativa\",\n\tGift\t\t\t\t= \"Eliminar $spell:48469 / $spell:48470. Enfoque mínimo para evitar que $spell:33786 se resista\",\n\tCCFree\t\t\t\t= \"+ Eliminar $spell:48169 / $spell:48170. Tener en cuenta las resistencias de los hechizos de la escuela Sombra\",\n\tShortOffensiveProcs\t= \"+ Elimina los procs ofensivos de baja duración. Recomendado para la seguridad de la raid sin comprometer la producción de daño de la raid\",\n\tMostOffensiveBuffs\t= \"+ Elimina la mayoría de los buffs ofensivos (principalmente para los Casters y los |cFFFF7C0ADruidas Ferales|r). Máxima seguridad en la incursión con la pérdida de daño y la necesidad de auto-buff/cambio de forma\"\n})\n\nL:SetMiscLocalization({\n\tYell\t\t= \"¡Esbirros, sirvientes, soldados de la fría oscuridad! ¡Obedeced la llamada de Kel'Thuzad!\",\n\tYell1Phase2\t= \"¡Ruega por piedad!\", -- 12995\n\tYell2Phase2\t= \"¡Exhala el último aliento!\", -- 12996\n\tYell3Phase2\t= \"¡El final se cierne sobre ti!\", -- 12997\n\tYellPhase3\t= \"¡Amo, requiero ayuda!\", -- 12998\n\tYellGuardians\t= \"Muy bien. Guerreros de los páramos helados, ¡levántense! ¡Les ordeno luchar, matar y morir por su amo! ¡Que nadie sobreviva!\", -- 12994\n\tsetMissing\t= \"¡ATENCIÓN! El desequipamiento / equipamiento automático de armas de DBM no funcionará hasta que cree un equipamiento llamado pve\",\n\tEqUneqLineDescription\t= \"Equipar/desequipar automático\"\n})\n"
  },
  {
    "path": "DBM-Naxx/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n-------------------\n--  Anub'Rekhan  --\n-------------------\nL = DBM:GetModLocalization(\"Anub'Rekhan\")\n\nL:SetGeneralLocalization({\n\tname = \"Ануб'Рекан\"\n})\n\nL:SetOptionLocalization({\n\tArachnophobiaTimer\t= \"Отсчет времени для Арахнофобия (достижение)\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Арахнофобия\",\n\tPull1\t\t\t\t= \"Бегите, бегите! Я люблю горячую кровь!\",\n\tPull2\t\t\t\t= \"Посмотрим, какие вы на вкус!\"\n})\n\n----------------------------\n--  Grand Widow Faerlina  --\n----------------------------\nL = DBM:GetModLocalization(\"Faerlina\")\n\nL:SetGeneralLocalization({\n\tname = \"Великая вдова Фарлина\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t= \"Объятие Вдовы через 5 секунд\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t= \"Предупреждение, когда Объятие Вдовы исчезает\"\n})\n\n---------------\n--  Maexxna  --\n---------------\nL = DBM:GetModLocalization(\"Maexxna\")\n\nL:SetGeneralLocalization({\n\tname = \"Мексна\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t= \"Паученыши Мексны через 5 секунд\",\n\tWarningSpidersNow\t= \"В паутине появляются паучата\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t= \"Паученыши Мексны\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t= \"Предупреждать перед следующим призывом Паученышей Мексны\",\n\tWarningSpidersNow\t= \"Предупреждение для призыва Паученышей Мексны\",\n\tTimerSpider\t\t\t= \"Отсчет времени до Паученышей Мексны\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Арахнофобия\"\n})\n\n------------------------------\n--  Noth the Plaguebringer  --\n------------------------------\nL = DBM:GetModLocalization(\"Noth\")\n\nL:SetGeneralLocalization({\n\tname = \"Нот Чумной\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Телепортация\",\n\tWarningTeleportSoon\t= \"Телепортация через 10 секунд\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t= \"Телепортация\",\n\tTimerTeleportBack\t= \"Телепортация обратно\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Предупреждение о телепортации\",\n\tWarningTeleportSoon\t= \"Предупреждать перед следующей телепортацией\",\n\tTimerTeleport\t\t= \"Отсчет времени до телепортации\",\n\tTimerTeleportBack\t= \"Отсчет времени до обратной телепортации\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Смерть чужакам!\",\n\tAdds\t\t\t\t= \"призывает скелетов-воинов!\",\n\tAddsTwo\t\t\t\t= \"поднимает новых скелетов!\"\n})\n\n--------------------------\n--  Heigan the Unclean  --\n--------------------------\nL = DBM:GetModLocalization(\"Heigan\")\n\nL:SetGeneralLocalization({\n\tname = \"Хейган Нечестивый\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Телепортация\",\n\tWarningTeleportSoon\t= \"Телепортация через %d сек.\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t= \"Телепортация\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Предупреждение о телепортации\",\n\tWarningTeleportSoon\t= \"Предупреждать перед следующей телепортацией\",\n\tTimerTeleport\t\t= \"Отсчет времени до телепортации\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Теперь вы принадлежите мне!\"\n})\n\n---------------\n--  Loatheb  --\n---------------\nL = DBM:GetModLocalization(\"Loatheb\")\n\nL:SetGeneralLocalization({\n\tname = \"Лотхиб\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t= \"Можно исцелять через 3 секунды\",\n\tWarningHealNow\t= \"Исцеляйте сейчас\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t= \"Предупреждать заранее перед 3-х секундным окном исцеления\",\n\tWarningHealNow\t\t= \"Предупреждение для 3-х секундного окна исцеления\",\n\tSporeDamageAlert\t= \"Сообщать шепотом и объявлять в рейд игроков, наносящих урон спорам\\n(требуются права лидера или помощника)\",\n\tCorruptedSorting\t= \"Set infoframe sorting behaviour for $spell:55593\", -- translation missing\n\tAlphabetical\t\t= \"Sort in alphabetical order\", -- translation missing\n\tDuration\t\t\t= \"Sort by duration\" -- translation missing\n})\n\n-----------------\n--  Patchwerk  --\n-----------------\nL = DBM:GetModLocalization(\"Patchwerk\")\n\nL:SetGeneralLocalization({\n\tname = \"Лоскутик\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful\t= \"Объявлять цели под Ударом ненависти\\n(требуются права лидера или помощника)\"\n})\n\nL:SetMiscLocalization({\n\tyell1\t\t\t= \"Лоскутик хочет поиграть!\",\n\tyell2\t\t\t= \"Кел'Тузад объявил Лоскутика воплощением войны!\",\n\tHatefulStrike\t= \"Удар ненависти --> %s [%s]\"\n})\n\n-----------------\n--  Grobbulus  --\n-----------------\nL = DBM:GetModLocalization(\"Grobbulus\")\n\nL:SetGeneralLocalization({\n\tname = \"Гроббулус\"\n})\n\n-------------\n--  Gluth  --\n-------------\nL = DBM:GetModLocalization(\"Gluth\")\n\nL:SetGeneralLocalization({\n\tname = \"Глут\"\n})\n\n----------------\n--  Thaddius  --\n----------------\nL = DBM:GetModLocalization(\"Thaddius\")\n\nL:SetGeneralLocalization({\n\tname = \"Таддиус\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t= \"Полярность изменена на %s\",\n\tWarningChargeNotChanged\t= \"Полярность не изменена\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t= \"Предупреждение, когда ваша полярность изменена\",\n\tWarningChargeNotChanged\t= \"Предупреждение, когда ваша полярность не изменена\",\n\tArrowsEnabled\t\t\t= \"Отображать стрелки (обычная \\\"2-сторонняя\\\" стратегия)\",\n\tArrowsRightLeft\t\t\t= \"Стрелки влево/вправо для \\\"4-сторонней\\\" стратегии\",\n\tArrowsInverse\t\t\t= \"Обратная \\\"4-сторонняя\\\" стратегия (вправо, если полярность изменена, влево, если нет)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t= \"Сталагг сокрушить вас!\",\n\tEmote\t= \"%s перезагружается!\",\n\tEmote2\t= \"Катушка Теслы перезагружается!\",\n\tBoss1\t= \"Фойген\",\n\tBoss2\t= \"Сталагг\",\n\tCharge1 = \"отрицательную\",\n\tCharge2 = \"положительную\"\n})\n\n----------------------------\n--  Instructor Razuvious  --\n----------------------------\nL = DBM:GetModLocalization(\"Razuvious\")\n\nL:SetGeneralLocalization({\n\tname = \"Инструктор Разувий\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t= \"Стена костей закончится через 5 секунд\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t= \"Предупреждать о скором исчезновении Стены костей\"\n})\n\nL:SetMiscLocalization({\n\tYell1 = \"Покажите мне, на что способны!\",\n\tYell2 = \"Обучение окончено! Покажите мне, что вы усвоили!\",\n\tYell3 = \"Вспомните, чему я вас учил!\",\n\tYell4 = \"Выше ногу! Или у тебя с этим проблемы?\"\n})\n\n----------------------------\n--  Gothik the Harvester  --\n----------------------------\nL = DBM:GetModLocalization(\"Gothik\")\n\nL:SetGeneralLocalization({\n\tname = \"Готик Жнец\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t= \"Волна %d: %s через 3 секунды\",\n\tWarningWaveSpawned\t= \"Волна %d: %s призван\",\n\tWarningRiderDown\t= \"Всадник мертв\",\n\tWarningKnightDown\t= \"Рыцарь мертв\",\n\tWarningPhase2\t\t= \"Фаза 2\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"Волна %d\",\n\tTimerPhase2\t= \"Фаза 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"Отсчет времени до волны\",\n\tTimerPhase2\t\t\t= \"Отсчет времени до фазы 2\",\n\tWarningWaveSoon\t\t= \"Предупреждать перед следующей волной\",\n\tWarningWaveSpawned\t= \"Предупреждение для волны призыва\",\n\tWarningRiderDown\t= \"Предупреждение, когда всадник мертв\",\n\tWarningKnightDown\t= \"Предупреждение, когда рыцарь мертв\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t= \"Глупо было искать свою смерть.\",\n\tWarningWave1\t= \"%d %s\",\n\tWarningWave2\t= \"%d %s и %d %s\",\n\tWarningWave3\t= \"%d %s, %d %s и %d %s\",\n\tTrainee\t\t\t= \"Ученика\",\n\tKnight\t\t\t= \"Рыцаря\",\n\tRider\t\t\t= \"Всадника\",\n\tGothikDoorEmote\t= \"Центральные ворота открываются!\",\n\tGothikPhase2Yell= \"Я ждал слишком долго. Сейчас вы предстанете пред ликом Жнеца душ.\"\n})\n\n---------------------\n--  Four Horsemen  --\n---------------------\nL = DBM:GetModLocalization(\"Horsemen\")\n\nL:SetGeneralLocalization({\n\tname = \"Четыре Всадника\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Знак %d через 3 секунды\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Предупреждать перед следующими знаками\",\n\tSpecialWarningMarkOnPlayer\t= \"Спец-предупреждение, когда >4 знаков на вас\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t= \"Тан Кортазз\",\n\tRivendare\t= \"Барон Ривендер\",\n\tBlaumeux\t= \"Леди Бломе\",\n\tZeliek\t\t= \"Сэр Зелиек\"\n})\n\n-----------------\n--  Sapphiron  --\n-----------------\nL = DBM:GetModLocalization(\"Sapphiron\")\n\nL:SetGeneralLocalization({\n\tname = \"Сапфирон\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t= \"Воздушная фаза через 10 секунд\",\n\tWarningAirPhaseNow\t= \"Воздушная фаза\",\n\tWarningLanded\t\t= \"Сапфирон приземляется\",\n\tWarningDeepBreath\t= \"Ледяное дыхание\",\n\tSpecWarnSapphLow\t= \"У Сапфирона нет сил взлететь\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t= \"Воздушная фаза\",\n\tTimerLanding\t= \"Приземление\",\n\tTimerIceBlast\t= \"Ледяное дыхание\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t= \"Предупреждать о приближении Воздушной фазы\",\n\tWarningAirPhaseNow\t= \"Объявлять Воздушную фазу\",\n\tWarningLanded\t\t= \"Объявлять Наземную фазу\",\n\tTimerAir\t\t\t= \"Отсчет времени до Воздушной фазы\",\n\tTimerLanding\t\t= \"Отсчет времени до приземления\",\n\tTimerIceBlast\t\t= \"Отсчет времени до Ледяного дыхания\",\n\tWarningDeepBreath\t= \"Специальное объявление Ледяного Дыхания\",\n\tSpecWarnSapphLow\t= \"Спец-предупреждения для 10% босса(отмена воздушной фазы)\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t= \"%s глубоко вдыхает.\",\n\tAirPhase\t\t\t= \"Сапфирон взмывает в воздух!\",\n\tLandingPhase\t\t= \"Сапфирон возобновляет свою атаку!\"\n})\n\n------------------\n--  Kel'Thuzad  --\n------------------\nL = DBM:GetModLocalization(\"Kel'Thuzad\")\n\nL:SetGeneralLocalization({\n\tname = \"Кел'Тузад\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t= \"Кел'Тузад вступает в бой через 10 секунд\",\n\twarnAddsSoon\t= \"Скоро прибытие Стражей Ледяной Короны\",\n\tWeaponsStatus\t= \"Cнятие оружий включено: %s (%s - %s)\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t= \"Фаза 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"Отсчет времени до фазы 2\",\n\tspecwarnP2Soon\t\t= \"Спец-предупреждение за 10 секунд до вступления Кел'Тузада в бой\",\n\twarnAddsSoon\t\t= \"Предупреждать заранее о Стражах Ледяной Короны\",\n\tWeaponsStatus\t\t= \"Спец-предупреждение в начале боя если включена функция снятия/надевания оружий\",\n\tEqUneqWeaponsKT\t\t= \"Снимать/надевать оружия перед/после контроля по таймеру. Для надевания создайте компл. экип. \\\"pve\\\". Для снятия не нужен.\",\n\tEqUneqWeaponsKT2\t= \"Снимать/надевать оружия когда контроль кастуется в вас. \\\"pve\\\". Для снятия не нужен.\",\n\tRemoveBuffsOnMC\t\t= \"Снимать баффы, когда на вас наложено заклинание $spell:28410. Каждый вариант является кумулятивным.\",\n\tGift\t\t\t\t= \"Снять $spell:48469 / $spell:48470. Минимальный подход для предотвращения сопротивления $spell:33786.\",\n\tCCFree\t\t\t\t= \"+ Убрать $spell:48169 / $spell:48170. Учет сопротивлений заклинаний школы Теней.\",\n\tShortOffensiveProcs\t= \"+ Удалите атакующие заклинания с малой продолжительностью. Рекомендуется для безопасности рейда без ущерба для урона рейда.\",\n\tMostOffensiveBuffs\t= \"+ Уберите большинство атакующих баффов (в основном для кастеров и |cFFFF7C0AСила зверя Друид|r). Максимальная безопасность рейда с потерей урона и необходимостью самовосстановления/перемещения!\"\n})\n\nL:SetMiscLocalization({\n\tYell\t\t= \"Соратники, слуги, солдаты холодной тьмы! Повинуйтесь зову Кел'Тузада!\",\n--\tYellMC1\t\t= \"Теперь твоя душа связана с моей!\",\n--\tYellMC2\t\t= \"Тебе не уйти!\",\n\tYell1Phase2\t= \"Молите о пощаде!\", -- 12995\n\tYell2Phase2\t= \"Кричите! Кричите изо всех сил!\", -- 12996\n\tYell3Phase2\t= \"Вы уже мертвы!\", -- 12997\n\tYellPhase3\t= \"Господин, мне нужна помощь!\", -- 12998\n\tYellGuardians\t= \"Хорошо. Воины ледяных пустошей, восстаньте! Повелеваю вам сражаться, убивать и умирать во имя своего повелителя! Не щадить никого!\", -- 12994\n\tsetMissing\t= \"ВНИМАНИЕ! DBM: автоматическое снимание/надевание оружия не будет работать пока вы не создадите набор экипировки pve\",\n\tEqUneqLineDescription\t= \"Автоматическое оснащение/снятие оборудования\"\n})\n"
  },
  {
    "path": "DBM-Naxx/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n-------------------\n--  Anub'Rekhan  --\n-------------------\nL = DBM:GetModLocalization(\"Anub'Rekhan\")\n\nL:SetGeneralLocalization({\n\tname = \"阿努比瑞克漢\"\n})\n\nL:SetOptionLocalization({\n\tArachnophobiaTimer\t= \"為蜘蛛恐懼症(成就)顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"蜘蛛恐懼症\",\n\tPull1\t\t\t\t= \"對，跑吧!那樣傷口出血就更多了!\",\n\tPull2\t\t\t\t= \"一些小點心...\"\n})\n\n----------------------------\n--  Grand Widow Faerlina  --\n----------------------------\nL = DBM:GetModLocalization(\"Faerlina\")\n\nL:SetGeneralLocalization({\n\tname = \"大寡婦費琳娜\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t= \"寡婦之擁5秒後結束\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t= \"為寡婦之擁結束顯示預先警告\"\n})\n\n---------------\n--  Maexxna  --\n---------------\nL = DBM:GetModLocalization(\"Maexxna\")\n\nL:SetGeneralLocalization({\n\tname = \"梅克絲娜\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t= \"梅克絲娜之子5秒後出現\",\n\tWarningSpidersNow\t= \"梅克絲娜之子出現了\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t= \"下一次梅克絲娜之子\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t= \"為梅克絲娜之子顯示預先警告\",\n\tWarningSpidersNow\t= \"為梅克絲娜之子顯示警告\",\n\tTimerSpider\t\t\t= \"為下一次梅克絲娜之子顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"蜘蛛恐懼症\"\n})\n\n------------------------------\n--  Noth the Plaguebringer  --\n------------------------------\nL = DBM:GetModLocalization(\"Noth\")\n\nL:SetGeneralLocalization({\n\tname = \"『瘟疫使者』諾斯\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"傳送\",\n\tWarningTeleportSoon\t= \"10秒後傳送\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t= \"傳送\",\n\tTimerTeleportBack\t= \"傳送回來\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"為傳送顯示警告\",\n\tWarningTeleportSoon\t= \"為傳送顯示預先警告\",\n\tTimerTeleport\t\t= \"為傳送顯示計時器\",\n\tTimerTeleportBack\t= \"為傳送回來顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"死吧，入侵者!\",\n\tAdds\t\t\t\t= \"召喚了骷髏戰士!\",\n\tAddsTwo\t\t\t\t= \"喚醒了更多骷髏!\"\n})\n\n--------------------------\n--  Heigan the Unclean  --\n--------------------------\nL = DBM:GetModLocalization(\"Heigan\")\n\nL:SetGeneralLocalization({\n\tname = \"『不潔者』海根\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"傳送\",\n\tWarningTeleportSoon\t= \"%d秒後 傳送\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t= \"傳送\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"為傳送顯示警告\",\n\tWarningTeleportSoon\t= \"為傳送顯示預先警告\",\n\tTimerTeleport\t\t= \"為傳送顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"你現在是我的了。\"\n})\n\n---------------\n--  Loatheb  --\n---------------\nL = DBM:GetModLocalization(\"Loatheb\")\n\nL:SetGeneralLocalization({\n\tname = \"憎恨者\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t= \"3秒後可以治療\",\n\tWarningHealNow\t= \"現在治療\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t= \"為3秒後可以治療顯示預先警告\",\n\tWarningHealNow\t\t= \"為現在治療顯示警告\",\n\tSporeDamageAlert\t= \"在團隊中提示誰殺死了孢子並發送密語給兇手\\n(需要團隊隊長或助理權限)\",\n\tCorruptedSorting\t= \"Set infoframe sorting behaviour for $spell:55593\", -- translation missing\n\tAlphabetical\t\t= \"Sort in alphabetical order\", -- translation missing\n\tDuration\t\t\t= \"Sort by duration\" -- translation missing\n})\n\n-----------------\n--  Patchwerk  --\n-----------------\nL = DBM:GetModLocalization(\"Patchwerk\")\n\nL:SetGeneralLocalization({\n\tname = \"縫補者\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful = \"公佈憎恨打擊的目標到團隊頻道\\n(需要團隊隊長或助理權限)\"\n})\n\nL:SetMiscLocalization({\n\tyell1 = \"縫補者要跟你玩!\",\n\tyell2 = \"科爾蘇加德讓縫補者成為戰爭的化身!\",\n\tHatefulStrike = \"憎恨打擊 --> %s [%s]\"\n})\n\n-----------------\n--  Grobbulus  --\n-----------------\nL = DBM:GetModLocalization(\"Grobbulus\")\n\nL:SetGeneralLocalization({\n\tname = \"葛羅巴斯\"\n})\n\n-------------\n--  Gluth  --\n-------------\nL = DBM:GetModLocalization(\"Gluth\")\n\nL:SetGeneralLocalization({\n\tname = \"古魯斯\"\n})\n\n----------------\n--  Thaddius  --\n----------------\nL = DBM:GetModLocalization(\"Thaddius\")\n\nL:SetGeneralLocalization({\n\tname = \"泰迪斯\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t= \"極性變為%s\",\n\tWarningChargeNotChanged\t= \"極性沒有改變\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t= \"當你的極性改變時顯示特別警告\",\n\tWarningChargeNotChanged\t= \"當你的極性沒有改變時顯示特別警告\",\n\tArrowsEnabled\t\t\t= \"顯示箭頭 (正常 \\\"二邊\\\" 站位打法)\",\n\tArrowsRightLeft\t\t\t= \"顯示左/右箭頭 給 \\\"四角\\\" 站位打法 (如果極性改變顯示左箭頭, 沒變顯示左箭頭)\",\n\tArrowsInverse\t\t\t= \"顯示倒轉的 \\\"四角\\\" 站位打法 (如果極性改變顯示左箭頭, 沒變顯示右箭頭)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t= \"斯塔拉格要碾碎你!\",\n\tEmote\t= \"%s超過負荷!\",\n\tEmote2\t= \"泰斯拉線圈超過負荷!\",\n\tBoss1\t= \"伏晨\",\n\tBoss2\t= \"斯塔拉格\",\n\tCharge1 = \"負極\",\n\tCharge2 = \"正極\"\n})\n\n----------------------------\n--  Instructor Razuvious  --\n----------------------------\nL = DBM:GetModLocalization(\"Razuvious\")\n\nL:SetGeneralLocalization({\n\tname = \"講師拉祖維斯\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t= \"5秒後盾牆結束\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t= \"為盾牆結束顯示預先警告\"\n})\n\nL:SetMiscLocalization({\n\tYell1 = \"絕不留情!\",\n\tYell2 = \"練習時間到此為止!都拿出真本事來!\",\n\tYell3 = \"照我教你的做!\",\n\tYell4 = \"絆腿……有什麼問題嗎?\"\n})\n\n----------------------------\n--  Gothik the Harvester  --\n----------------------------\nL = DBM:GetModLocalization(\"Gothik\")\n\nL:SetGeneralLocalization({\n\tname = \"『收割者』高希\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t= \"3秒後第%d波: %s\",\n\tWarningWaveSpawned\t= \"第%d波: %s出現了\",\n\tWarningRiderDown\t= \"騎兵已死亡\",\n\tWarningKnightDown\t= \"死亡騎士已死亡\",\n\tWarningPhase2\t\t= \"第二階段\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"第%d波\",\n\tTimerPhase2\t= \"第2階段\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"為下一波顯示計時器\",\n\tTimerPhase2\t\t\t= \"為第二階段顯示計時器\",\n\tWarningWaveSoon\t\t= \"為波數顯示預先警告\",\n\tWarningWaveSpawned\t= \"為波數出現顯示警告\",\n\tWarningRiderDown\t= \"當無情的騎兵死亡時顯示警告\",\n\tWarningKnightDown\t= \"當無情的死亡騎士死亡時顯示警告\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t= \"你們這些蠢貨已經主動步入了陷阱。\",\n\tWarningWave1\t= \"%d %s\",\n\tWarningWave2\t= \"%d %s 和 %d %s\",\n\tWarningWave3\t= \"%d %s, %d %s 和 %d %s\",\n\tTrainee\t\t\t= \"受訓員\",\n\tKnight\t\t\t= \"死亡騎士\",\n\tRider\t\t\t= \"騎兵\",\n\tGothikDoorEmote\t= \"中央大門打開了!\",\n\tGothikPhase2Yell= \"我已經等待很久了。現在你們將面對靈魂的收割者。\"\n})\n\n---------------------\n--  Four Horsemen  --\n---------------------\nL = DBM:GetModLocalization(\"Horsemen\")\n\nL:SetGeneralLocalization({\n\tname = \"四騎士\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t= \"3秒後印記 %d\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t\t= \"為印記顯示預先警告\",\n\tSpecialWarningMarkOnPlayer\t= \"當你印記堆疊多於四層時顯示特別警告\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t= \"寇斯艾茲族長\",\n\tRivendare\t= \"瑞文戴爾男爵\",\n\tBlaumeux\t= \"布洛莫斯女士\",\n\tZeliek\t\t= \"札里克爵士\"\n})\n\n-----------------\n--  Sapphiron  --\n-----------------\nL = DBM:GetModLocalization(\"Sapphiron\")\n\nL:SetGeneralLocalization({\n\tname = \"薩菲隆\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t= \"10秒後 空中階段\",\n\tWarningAirPhaseNow\t= \"空中階段\",\n\tWarningLanded\t\t= \"薩菲隆降落了\",\n\tWarningDeepBreath\t= \"冰息術\",\n\tSpecWarnSapphLow\t= \"薩菲隆不能飛！\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t= \"空中階段\",\n\tTimerLanding\t= \"降落\",\n\tTimerIceBlast\t= \"冰息術\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t= \"為空中階段顯示預先警告\",\n\tWarningAirPhaseNow\t= \"提示空中階段\",\n\tWarningLanded\t\t= \"提示地上階段\",\n\tTimerAir\t\t\t= \"為空中階段顯示計時器\",\n\tTimerLanding\t\t= \"為降落顯示計時器\",\n\tTimerIceBlast\t\t= \"為冰息術顯示計時器\",\n\tWarningDeepBreath\t= \"為冰息術顯示特別警告\",\n\tSpecWarnSapphLow\t= \"10%執行階段特別警告（取消空中階段）\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t= \"%s深深地吸了一口氣。\",\n\tAirPhase\t\t\t= \"薩菲隆離地升空了!\",\n\tLandingPhase\t\t= \"薩菲隆重新開始攻擊!\"\n})\n\n------------------\n--  Kel'Thuzad  --\n------------------\nL = DBM:GetModLocalization(\"Kel'Thuzad\")\n\nL:SetGeneralLocalization({\n\tname = \"科爾蘇加德\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t= \"10秒後科爾蘇加德開始攻擊\",\n\twarnAddsSoon\t= \"寒冰皇冠守護者即將出現\",\n\tWeaponsStatus\t= \"自動武器卸載/裝備已啟用: %s (%s - %s)\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t= \"第二階段\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"為第二階段顯示計時器\",\n\tspecwarnP2Soon\t\t= \"為科爾蘇加德攻擊前10秒顯示特別警告\",\n\twarnAddsSoon\t\t= \"為寒冰皇冠守護者顯示預先警告\",\n\tWeaponsStatus\t\t= \"戰鬥開始時提示自動武器卸載/裝備功能已啟用\",\n\tEqUneqWeaponsKT\t\t= \"在 $spell:28410 之前和之後自動取消裝備和裝備武器。 需要名為“pve”的裝備套裝\",\n\tEqUneqWeaponsKT2\t= \"對你施放 $spell:28410 時自動解除和裝備武器。 需要名為“pve”的裝備套裝\",\n\tRemoveBuffsOnMC\t\t= \"當 $spell:28410 對你施放時移除增益。每個選項都是累積的。\",\n\tGift\t\t\t\t= \"移除 $spell:48469 / $spell:48470。防止 $spell:33786 抵抗的最小方法。\",\n\tCCFree\t\t\t\t= \"+ 移除 $spell:48169 / $spell:48170。說明影子學派的法術抗性。\",\n\tShortOffensiveProcs\t= \"+ 移除持續時間較短的攻擊性觸發。推薦用於團隊安全而不影響團隊傷害輸出。\",\n\tMostOffensiveBuffs\t= \"+ 移除大部分攻擊性增益（主要針對施法者和 |cFFFF7C0A野性戰鬥德魯伊|r）。最大的團隊安全性，損失輸出並需要自我反擊/變形！\"\n})\n\nL:SetMiscLocalization({\n\tYell = \"僕從們，侍衛們，隸屬於黑暗與寒冷的戰士們!聽從科爾蘇加德的召喚!\",\n\tYell1Phase2\t= \"祈禱我的慈悲吧!\", -- 12995\n\tYell2Phase2\t= \"呼出你的最後一口氣!\", -- 12996\n\tYell3Phase2\t= \"你的末日臨近了!\", -- 12997\n\tYellPhase3\t= \"主人，我需要幫助!\", -- 12998\n\tYellGuardians\t= \"非常好，凍原的戰士們，起來吧!我命令你們作戰，為你們的主人殺戮或獻身吧!不要留下活口!\", -- 12994\n\tsetMissing\t= \"注意力！ 在您創建名為 pve 的裝備集之前，DBM 自動武器卸載/裝備將不起作用\",\n\tEqUneqLineDescription\t= \"自動裝備/取消裝備\"\n})\n"
  },
  {
    "path": "DBM-Onyxia/DBM-Onyxia.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Onyxia|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Repaire d'Onyxia|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Ониксия|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Guarida de Onyxia|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Guarida de Onyxia|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0奧妮克希亞|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0奥妮克希亚|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0오닉시아|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Onyxias Hort|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMOnyxia_AllSavedVars\n## SavedVariablesPerCharacter: DBMOnyxia_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: WOTLK\n## X-DBM-StatTypes: normal,normal25\n## X-DBM-Mod-Sort: 3\n## X-DBM-Mod-MapID: 719\n## X-DBM-Mod-BlockRealm: Onyxia_old\n## X-DBM-Mod-Name: Onyxia's Lair\n## X-DBM-Mod-Name-frFR: Repaire d'Onyxia\n## X-DBM-Mod-Name-ruRU: Логово Ониксии\n## X-DBM-Mod-Name-esES: Guarida de Onyxia\n## X-DBM-Mod-Name-esMX: Guarida de Onyxia\n## X-DBM-Mod-Name-zhTW: 奧妮克希亞\n## X-DBM-Mod-Name-zhCN: 奥妮克希亚的巢穴\n## X-DBM-Mod-Name-koKR: 오닉시아\n## X-DBM-Mod-Name-deDE: Onyxias Hort\n## X-DBM-Mod-LoadZone: Onyxia's Lair\n## X-DBM-Mod-LoadZone-frFR: Repaire d'Onyxia\n## X-DBM-Mod-LoadZone-ruRU: Логово Ониксии\n## X-DBM-Mod-LoadZone-esES: Guarida de Onyxia\n## X-DBM-Mod-LoadZone-esMX: Guarida de Onyxia\n## X-DBM-Mod-LoadZone-zhTW: 奧妮克希亞的巢穴\n## X-DBM-Mod-LoadZone-zhCN: 奥妮克希亚的巢穴\n## X-DBM-Mod-LoadZone-koKR: 오닉시아의 둥지\n## X-DBM-Mod-LoadZone-deDE: Onyxias Hort\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.fr.lua\nlocalization.ru.lua\nlocalization.tw.lua\nlocalization.kr.lua\nlocalization.tw.lua\nlocalization.es.lua\nlocalization.cn.lua\nlocalization.ru.lua\n\nOnyxia.lua\n"
  },
  {
    "path": "DBM-Onyxia/Onyxia.lua",
    "content": "local mod\t= DBM:NewMod(\"Onyxia\", \"DBM-Onyxia\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10184)\nmod:SetEncounterID(1084)\n\nmod:RegisterCombat(\"combat\")\n\n--[[mod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)]]\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 68958 17086 18351 18564 18576 18584 18596 18609 18617 18435 68970 18431 18500 18392 68926\",\n\t\"SPELL_CAST_SUCCESS 68959 68963\",\n\t\"SPELL_DAMAGE 68867 69286\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"UNIT_DIED\",\n\t\"UNIT_HEALTH boss1\"\n)\n\n-- General\nlocal timerAchieve\t\t\t= mod:NewAchievementTimer(300, 4405)\n\nmod:AddBoolOption(\"SoundWTF3\", false, \"sound\")\n\n-- Stage One (100% – 65%)\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1)..\": 100% – 65%\")\nlocal warnPhase2Soon\t\t= mod:NewPrePhaseAnnounce(2)\nlocal warnWingBuffet\t\t= mod:NewSpellAnnounce(18500, 2, nil, \"Tank\")\n\nlocal timerNextFlameBreath\t= mod:NewCDTimer(13.3, 18435, nil, \"Tank\", 2, 5, nil, nil, true) -- Breath she does on ground in frontal cone. REVIEW! ~7s variance [13.3-20]. Added \"keep\" arg (25N Lordaeron 2022/10/13) - 13.3, 18.8, 16.3, 13.6\n\n-- Stage Two (65% – 40%)\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2)..\": 65% – 40%\")\nlocal warnPhase2\t\t\t= mod:NewPhaseAnnounce(2)\nlocal warnPhase3Soon\t\t= mod:NewPrePhaseAnnounce(3)\nlocal warnFireball\t\t\t= mod:NewTargetNoFilterAnnounce(18392, 2, nil, false)\nlocal warnWhelpsSoon\t\t= mod:NewSoonAnnounce(17646, 1, 69004)\n--local preWarnDeepBreath\t = mod:NewSoonAnnounce(17086, 2)--Experimental, if it is off please let me know.\n\nlocal yellFireball\t\t\t= mod:NewYell(18392)\nlocal specWarnBreath\t\t= mod:NewSpecialWarningSpell(18584, nil, nil, nil, 2, 2)\nlocal specWarnAdds\t\t\t= mod:NewSpecialWarningAdds(68959, \"-Healer\", nil, nil, 1, 2)\nlocal specWarnBlastNova\t\t= mod:NewSpecialWarningRun(68958, \"Melee\", nil, nil, 4, 2) -- from Onyxian Lair Guard\n\nlocal timerBreathCast\t\t= mod:NewCastTimer(8, 18584, nil, nil, nil, 3)\nlocal timerNextDeepBreath\t= mod:NewCDTimer(35, 18584, nil, nil, nil, 3)--Range from 35-60seconds in between based on where she moves to.\nlocal timerWhelps\t\t\t= mod:NewNextTimer(105, 17646, nil, nil, nil, 1, 69004)\nlocal timerAchieveWhelps\t= mod:NewAchievementTimer(10, 4406)\nlocal timerBigAddCD\t\t\t= mod:NewNextTimer(44.9, 68959, nil, \"-Healer\", nil, 1, 10697) -- Ignite Weapon for Onyxian Lair Guard\n\n-- Stage Three (40% – 0%)\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(3)..\": 40% – 0%\")\nlocal warnPhase3\t\t\t= mod:NewPhaseAnnounce(3)\n\nlocal specWarnBellowingRoar\t= mod:NewSpecialWarningSpell(18431, nil, nil, nil, 2, 2)\n\nmod.vb.warned_preP2 = false\nmod.vb.warned_preP3 = false\nmod.vb.whelpsCount = 0\n\nlocal function Whelps(self)\n\tif self:IsInCombat() then\n\t\tself.vb.whelpsCount = self.vb.whelpsCount + 1\n\t\ttimerWhelps:Start()\n\t\twarnWhelpsSoon:Schedule(95)\n\t\tself:Schedule(105, Whelps, self)\n\tend\nend\n\nfunction mod:FireballTarget(targetname)\n\tif not targetname then return end\n\twarnFireball:Show(targetname)\n\tif targetname == UnitName(\"player\") then\n\t\tyellFireball:Yell()\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tself.vb.whelpsCount = 0\n\tself.vb.warned_preP2 = false\n\tself.vb.warned_preP3 = false\n\ttimerNextFlameBreath:Start(12.1-delay) -- REVIEW! variance? (25N Lordaeron 2022/10/13) - 12.1\n\ttimerAchieve:Start(-delay)\n\tif self.Options.SoundWTF3 then\n\t\tDBM:PlaySoundFile(\"Interface\\\\AddOns\\\\DBM-Onyxia\\\\sounds\\\\dps-very-very-slowly.ogg\")\n\t\tself:Schedule(20, DBM.PlaySoundFile, DBM, \"Interface\\\\AddOns\\\\DBM-Onyxia\\\\sounds\\\\hit-it-like-you-mean-it.ogg\")\n\t\tself:Schedule(30, DBM.PlaySoundFile, DBM, \"Interface\\\\AddOns\\\\DBM-Onyxia\\\\sounds\\\\now-hit-it-very-hard-and-fast.ogg\")\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 68958 then -- Blast Nova (from Onyxian Lair Guard)\n\t\tspecWarnBlastNova:Show()\n\telseif args:IsSpellID(17086, 18351, 18564, 18576) or args:IsSpellID(18584, 18596, 18609, 18617) then\t-- 1 ID for each direction\n\t\tspecWarnBreath:Show()\n\t\ttimerBreathCast:Start()\n\t\ttimerNextDeepBreath:Start()\n--\t\tpreWarnDeepBreath:Schedule(35)\t\t\t  -- Pre-Warn Deep Breath\n\telseif args:IsSpellID(18435, 68970) then\t\t-- Flame Breath (Ground phases)\n\t\ttimerNextFlameBreath:Start()\n\telseif spellId == 18431 then\n\t\tspecWarnBellowingRoar:Show()\n\t\tspecWarnBellowingRoar:Play(\"fearsoon\")\n\telseif args:IsSpellID(18500, 69293) then -- Wing Buffet\n\t\twarnWingBuffet:Show()\n\telseif args:IsSpellID(18392, 68926) then -- Fireball\n\t\tself:BossTargetScanner(args.sourceGUID, \"FireballTarget\", 0.15, 12)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(68959, 68963) then--Ignite Weapon (Onyxian Lair Guard spawn)\n\t\tspecWarnAdds:Show()\n\t\tspecWarnAdds:Play(\"bigmob\")\n\t\ttimerBigAddCD:Start()\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, spellId)\n\tif (spellId == 68867 or spellId == 69286) and destGUID == UnitGUID(\"player\") and self.Options.SoundWTF3 then\t\t-- Tail Sweep\n\t\tDBM:PlaySoundFile(\"Interface\\\\AddOns\\\\DBM-Onyxia\\\\sounds\\\\watch-the-tail.ogg\")\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n--\tif msg == L.YellPull and not self:IsInCombat() then\n--\t\tDBM:StartCombat(self, 0)\n\tif msg == L.YellP2 or msg:find(L.YellP2) then\n\t\tself:SendSync(\"Phase2\")\n\telseif msg == L.YellP3 or msg:find(L.YellP3) then\n\t\tself:SendSync(\"Phase3\")\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tif self:IsInCombat() and args:IsPlayer() and self.Options.SoundWTF3 then\n\t\tDBM:PlaySoundFile(\"Interface\\\\AddOns\\\\DBM-Onyxia\\\\sounds\\\\thats-a-fucking-fifty-dkp-minus.ogg\")\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif self.vb.phase == 1 and not self.vb.warned_preP2 and self:GetUnitCreatureId(uId) == 10184 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.70 then\n\t\tself.vb.warned_preP2 = true\n\t\twarnPhase2Soon:Show()\n\telseif self.vb.phase == 2 and not self.vb.warned_preP3 and self:GetUnitCreatureId(uId) == 10184 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.45 then\n\t\tself.vb.warned_preP3 = true\n\t\twarnPhase3Soon:Show()\n\t\tif self.Options.SoundWTF3 then\n\t\t\tself:Unschedule(DBM.PlaySoundFile, DBM)\n\t\tend\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif not self:IsInCombat() then return end\n\tif msg == \"Phase2\" then\n\t\tself:SetStage(2)\n\t\tself.vb.whelpsCount = 0\n\t\twarnPhase2:Show()\n\t\ttimerBigAddCD:Start(20) -- (25N Lordaeron 2022/10/13) - Stage 2/20.0\n--\t\tpreWarnDeepBreath:Schedule(72)\t-- Pre-Warn Deep Breath\n\t\ttimerNextDeepBreath:Start(75.5) -- Breath-17086. REVIEW! variance? (25N Lordaeron 2022/10/13) - 75.5\n\t\ttimerAchieveWhelps:Start()\n\t\ttimerNextFlameBreath:Cancel()\n\t\tself:Schedule(5, Whelps, self)\n\t\tif self.Options.SoundWTF3 then\n\t\t\tself:Unschedule(DBM.PlaySoundFile, DBM)\n\t\t\tDBM:PlaySoundFile(\"Interface\\\\AddOns\\\\DBM-Onyxia\\\\sounds\\\\i-dont-see-enough-dots.ogg\")\n\t\t\tself:Schedule(10, DBM.PlaySoundFile, DBM, \"Interface\\\\AddOns\\\\DBM-Onyxia\\\\sounds\\\\throw-more-dots.ogg\")\n\t\t\tself:Schedule(17, DBM.PlaySoundFile, DBM, \"Interface\\\\AddOns\\\\DBM-Onyxia\\\\sounds\\\\whelps-left-side-even-side-handle-it.ogg\") -- 18\n\t\tend\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Show(8)\n\t\tend\n\telseif msg == \"Phase3\" then\n\t\tself:SetStage(3)\n\t\twarnPhase3:Show()\n\t\tself:Unschedule(Whelps)\n\t\ttimerWhelps:Stop()\n\t\ttimerNextDeepBreath:Stop()\n\t\ttimerBigAddCD:Stop()\n\t\twarnWhelpsSoon:Cancel()\n--\t\tpreWarnDeepBreath:Cancel()\n\t\tif self.Options.SoundWTF3 then\n\t\t\tself:Unschedule(DBM.PlaySoundFile, DBM)\n\t\t\tself:Schedule(15, DBM.PlaySoundFile, DBM, \"Interface\\\\AddOns\\\\DBM-Onyxia\\\\sounds\\\\dps-very-very-slowly.ogg\")\n\t\t\tself:Schedule(35, DBM.PlaySoundFile, DBM, \"Interface\\\\AddOns\\\\DBM-Onyxia\\\\sounds\\\\hit-it-like-you-mean-it.ogg\")\n\t\t\tself:Schedule(45, DBM.PlaySoundFile, DBM, \"Interface\\\\AddOns\\\\DBM-Onyxia\\\\sounds\\\\now-hit-it-very-hard-and-fast.ogg\")\n\t\tend\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Hide()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Onyxia/localization.cn.lua",
    "content": "﻿-- author: callmejames @《凤凰之翼》 一区藏宝海湾\n-- commit by: yaroot <yaroot AT gmail.com>\n-- Mini Dragon(projecteurs AT gmail.com) Brilla@金色平原\n-- Last update: 2019/08/22\n\nif GetLocale() ~= \"zhCN\" then return end\n\nlocal L\n\n--------------\n--  Onyxia  --\n--------------\nL = DBM:GetModLocalization(\"Onyxia\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t= \"奥妮克希亚\"\n})\n\n--[[L:SetWarningLocalization({\n\tWarnWhelpsSoon\t\t= \"奥妮克希亚雏龙 即将出现\"\n})\n\nL:SetTimerLocalization({\n\tTimerWhelps\t\t\t= \"奥妮克希亚雏龙\"\n})]]\n\nL:SetOptionLocalization({\n--\tTimerWhelps\t\t\t= \"为奥妮克希亚雏龙显示计时条\",\n--\tWarnWhelpsSoon\t\t= \"为奥妮克希亚雏龙显示提前警报\",\n\tSoundWTF3\t\t\t= \"为经典传奇式奥妮克希亚副本播放一些有趣的音效\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t\t= \"真是走运。通常我必须离开窝才能找到食物。\",\n\tYellP2\t\t\t= \"这毫无意义的行动让我很厌烦。我会从上空把你们都烧成灰！\",\n\tYellP3\t\t\t= \"看起来需要再给你一次教训，凡人！\"\n})\n"
  },
  {
    "path": "DBM-Onyxia/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n--------------\n--  Onyxia  --\n--------------\nL = DBM:GetModLocalization(\"Onyxia\")\n\nL:SetGeneralLocalization({\n\tname = \"Onyxia\"\n})\n\n--[[L:SetWarningLocalization({\n\tWarnWhelpsSoon\t\t= \"Welpen erscheinen bald\"\n})\n\nL:SetTimerLocalization({\n\tTimerWhelps\t= \"Welpen erscheinen\"\n})]]\n\nL:SetOptionLocalization({\n--\tTimerWhelps\t\t\t\t= \"Zeige Zeit bis Welpen erscheinen\",\n--\tWarnWhelpsSoon\t\t\t= \"Zeige Vorwarnung für Erscheinen der Welpen\",\n\tSoundWTF3\t\t\t\t= \"Spiele witzige Sounds eines legendären Classic-Onyxia-Schlachtzuges\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull = \"Was für ein Zufall. Normalerweise muss ich meinen Unterschlupf verlassen, um etwas zu essen.\",\n\tYellP2 = \"Diese sinnlose Anstrengung langweilt mich. Ich werde Euch alle von oben verbrennen!\",\n\tYellP3 = \"Mir scheint, dass Ihr noch eine Lektion braucht, sterbliche Wesen!\"\n})\n"
  },
  {
    "path": "DBM-Onyxia/localization.en.lua",
    "content": "local L\n\n--------------\n--  Onyxia  --\n--------------\nL = DBM:GetModLocalization(\"Onyxia\")\n\nL:SetGeneralLocalization({\n\tname = \"Onyxia\"\n})\n\n--[[L:SetWarningLocalization({\n\tWarnWhelpsSoon\t\t= \"Onyxian Whelps soon\"\n})\n\nL:SetTimerLocalization({\n\tTimerWhelps\t= \"Onyxian Whelps\"\n})]]\n\nL:SetOptionLocalization({\n--\tTimerWhelps\t\t\t\t= \"Show timer for Onyxian Whelps\",\n--\tWarnWhelpsSoon\t\t\t= \"Show pre-warning for Onyxian Whelps\",\n\tSoundWTF3\t\t\t\t= \"Play some funny sounds from a legendary classic Onyxia raid\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull = \"How fortuitous. Usually, I must leave my lair in order to feed.\",\n\tYellP2 = \"This meaningless exertion bores me. I'll incinerate you all from above!\",\n\tYellP3 = \"It seems you'll need another lesson, mortals!\"\n})\n"
  },
  {
    "path": "DBM-Onyxia/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\nlocal L\n\n--------------\n--  Onyxia  --\n--------------\nL = DBM:GetModLocalization(\"Onyxia\")\n\nL:SetGeneralLocalization({\n\tname = \"Onyxia\"\n})\n\n--[[L:SetWarningLocalization({\n\tWarnWhelpsSoon\t\t= \"Crías de Onyxia en breve\"\n})\n\nL:SetTimerLocalization({\n\tTimerWhelps\t= \"Crías de Onyxia\"\n})]]\n\nL:SetOptionLocalization({\n--\tTimerWhelps\t\t\t\t= \"Mostrar temporizador para las siguientes Crías de Onyxia\",\n--\tWarnWhelpsSoon\t\t\t= \"Mostrar aviso previo para las siguientes Crías de Onyxia\",\n\tSoundWTF3\t\t\t\t= \"Reproducir sonidos graciosos de cierta banda legendaria\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull = \"Qué casualidad. Generalmente, debo salir de mi guarida para poder comer.\",\n\tYellP2 = \"Este ejercicio sin sentido me aburre. ¡Os inceneraré a todos desde arriba!\",\n\tYellP3 = \"¡Parece ser que vais a necesitar otra lección, mortales!\"\n})\n"
  },
  {
    "path": "DBM-Onyxia/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\n\nlocal L\n\n--------------\n--  Onyxia  --\n--------------\nL = DBM:GetModLocalization(\"Onyxia\")\n\nL:SetGeneralLocalization({\n\tname = \"Onyxia\"\n})\n\n--[[L:SetWarningLocalization({\n\tWarnWhelpsSoon\t\t= \"Les Jeunes dragonnets onyxien arrivent bientôt\"\n})\n\nL:SetTimerLocalization({\n\tTimerWhelps = \"Arrivée des Jeunes dragonnets onyxien\"\n})]]\n\nL:SetOptionLocalization({\n--\tTimerWhelps\t\t\t\t= \"Montre le timer pour l'arrivée des Jeunes dragonnets onyxien\",\n--\tWarnWhelpsSoon\t\t\t= \"Montre une pré-alerte avant l'arrivée des Jeunes dragonnets onyxien\",\n\tSoundWTF3\t\t\t\t= \"Joue des sons amusants du légendaire raid classic d'Onyxia\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull = \"Quelle chance ! D'habitude, je dois quitter mon repaire pour me nourrir.\",\n\tYellP2 = \"exercice dénué de sens\",\n\tYellP3 = \"semble que vous ayez besoin\"\n})\n"
  },
  {
    "path": "DBM-Onyxia/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\n\nlocal L\n\n--------------\n--  Onyxia  --\n--------------\nL = DBM:GetModLocalization(\"Onyxia\")\n\nL:SetGeneralLocalization({\n\tname = \"오닉시아\"\n})\n\n--[[L:SetWarningLocalization({\n\tWarnWhelpsSoon\t\t= \"곧 새끼용 등장\"\n})\n\nL:SetTimerLocalization({\n\tTimerWhelps\t\t= \"새끼용\"\n})]]\n\nL:SetOptionLocalization({\n--\tTimerWhelps\t\t\t\t= \"새끼용 등장 바 보기\",\n--\tWarnWhelpsSoon\t\t\t= \"새끼용 등장 이전에 알림 보기\",\n\tSoundWTF3\t\t\t\t= \"독특한 레이드를 즐기기 위한 웃긴 소리 재생(가급적 비활성화 추천)\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t= \"How fortuitous. Usually, I must leave my lair in order to feed.\",\n\tYellP2\t\t= \"쓸데없이 힘을 쓰는 것도 지루하군. 네 녀석들 머리 위에서 모조리 불살라 주마!\",\n\tYellP3\t\t= \"혼이 더 나야 정신을 차리겠구나!\"\n})\n"
  },
  {
    "path": "DBM-Onyxia/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n--------------\n--  Onyxia  --\n--------------\nL = DBM:GetModLocalization(\"Onyxia\")\n\nL:SetGeneralLocalization({\n\tname = \"Ониксия\"\n})\n\n--[[L:SetWarningLocalization({\n\tWarnWhelpsSoon\t\t= \"Скоро дракончики Ониксии\"\n})\n\nL:SetTimerLocalization({\n\tTimerWhelps\t= \"Вызов дракончиков Ониксии\"\n})]]\n\nL:SetOptionLocalization({\n--\tTimerWhelps\t\t\t\t= \"Отсчет времени до дракончиков Ониксии\",\n--\tWarnWhelpsSoon\t\t\t= \"Предупреждать заранее о дракончиках Ониксии\",\n\tSoundWTF3\t\t\t\t= \"Воспроизводить забавное озвучивание легендарного классического рейда на Ониксию (англ.)\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull = \"Вот это сюрприз. Обычно, чтобы найти обед, мне приходится покидать логово.\",\n\tYellP2 = \"Эта бессмысленная возня вгоняет меня в тоску. Я сожгу вас всех!\",\n\tYellP3 = \"Похоже, вам требуется преподать еще один урок, смертные!\"\n})\n"
  },
  {
    "path": "DBM-Onyxia/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n--------------\n--  Onyxia  --\n--------------\nL = DBM:GetModLocalization(\"Onyxia\")\n\nL:SetGeneralLocalization({\n\tname = \"奧妮克希亞\"\n})\n\n--[[L:SetWarningLocalization({\n\tWarnWhelpsSoon\t\t= \"奧妮克希亞幼龍即將出現\"\n})\n\nL:SetTimerLocalization({\n\tTimerWhelps\t\t= \"奧妮克希亞幼龍\"\n})]]\n\nL:SetOptionLocalization({\n--\tTimerWhelps\t\t= \"為奧妮克希亞幼龍顯示計時器\",\n--\tWarnWhelpsSoon\t= \"為奧妮克希亞幼龍顯示預先警告\",\n\tSoundWTF3\t\t= \"為經典傳奇式奧妮克希亞副本播放一些有趣的音效\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull = \"真是幸運。通常我為了覓食就必須離開窩。\",\n\tYellP2\t= \"這毫無意義的行動讓我很厭煩。我會從上空把你們都燒成灰!\",\n\tYellP3\t= \"看起來需要再給你一次教訓，凡人!\"\n})\n"
  },
  {
    "path": "DBM-Outland/DBM-Outland.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Outland|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0아웃랜드|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Outreterre|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Scherbenwelt|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0外域|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Terrallende|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0外域|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Terrallende|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Запределье|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMOutland_AllSavedVars\n## SavedVariablesPerCharacter: DBMOutland_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: BC\n## X-DBM-Mod-World-Boss: 1\n## X-DBM-StatTypes: normal\n## X-DBM-Mod-Name: Outland\n## X-DBM-Mod-Name-deDE: Scherbenwelt\n## X-DBM-Mod-Name-esES: Terrallende\n## X-DBM-Mod-Name-esMX: Terrallende\n## X-DBM-Mod-Name-frFR: Outreterre\n## X-DBM-Mod-Name-ruRU: Запределье\n## X-DBM-Mod-Name-koKR: 아웃랜드\n## X-DBM-Mod-Name-zhTW: 外域\n## X-DBM-Mod-Name-zhCN: 外域\n## X-DBM-Mod-Sort: 1006\n## X-DBM-Mod-MapID: 474,466,482,162\n## X-DBM-Mod-LoadCID: 17711,18728,18166,20130\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.es.lua\nlocalization.tw.lua\nlocalization.cn.lua\nlocalization.ru.lua\nlocalization.kr.lua\n\nKazzak.lua\nDoomwalker.lua\nQuest.lua\n"
  },
  {
    "path": "DBM-Outland/Doomwalker.lua",
    "content": "local mod\t= DBM:NewMod(\"Doomwalker\", \"DBM-Outland\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(17711)\nmod:SetModelID(21435)\nmod:EnableWBEngageSync()--Enable syncing engage in outdoors\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 32637\",\n\t\"SPELL_AURA_APPLIED 32686\"\n)\n\nlocal warnCharge\t\t\t= mod:NewSpellAnnounce(32637, 3)\nlocal warnQuake\t\t\t\t= mod:NewSpellAnnounce(32686, 3)\n\nlocal timerChargeCD\t\t\t= mod:NewCDTimer(42, 32637, nil, nil, nil, 3)\nlocal timerQuakeCD\t\t\t= mod:NewCDTimer(52, 32686, nil, nil, nil, 2)\nlocal timerQuake\t\t\t= mod:NewBuffActiveTimer(8, 32686, nil, nil, nil, 2)\n\nmod:AddRangeFrameOption(\"10\")\n\nfunction mod:OnCombatStart()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(10)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 32637 and self:AntiSpam(10, 1) then\n\t\twarnCharge:Show()\n\t\ttimerChargeCD:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32686 and self:AntiSpam(30, 2) then\n\t\twarnQuake:Show()\n\t\ttimerQuake:Start()\n\t\ttimerQuakeCD:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Outland/Kazzak.lua",
    "content": "local mod\t= DBM:NewMod(\"Kazzak\", \"DBM-Outland\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(18728)\nmod:SetModelID(17887)\nmod:SetUsedIcons(8)\nmod:EnableWBEngageSync()--Enable syncing engage in outdoors\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 32960 32964 21063\",\n\t\"SPELL_AURA_REMOVED 32960\"\n)\n\nlocal warningFrenzy\t\t= mod:NewSpellAnnounce(32964, 3)\nlocal warningMark\t\t= mod:NewTargetNoFilterAnnounce(32960, 4)\nlocal warningTwisted\t= mod:NewTargetAnnounce(21063, 4)\n\nlocal specWarnMark\t\t= mod:NewSpecialWarningYou(32960, nil, nil, nil, 1, 2)\nlocal specWarnTwisted\t= mod:NewSpecialWarningDispel(21063, \"Healer\", nil, nil, 1, 2)\n\nlocal timerFrenzy\t\t= mod:NewBuffActiveTimer(10, 32964)\nlocal timerFrenzyCD\t\t= mod:NewCDTimer(60, 32964, nil, nil, nil, 3)\n--local timerTwistedCD\t= mod:NewCDTimer(30, 21063, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON..DBM_COMMON_L.MAGIC_ICON)--Unknown, but would be nice to have\nlocal timerMark\t\t\t= mod:NewTargetTimer(10, 32960, nil, nil, nil, 3)\n\nmod:AddSetIconOption(\"SetIconOnMark\", 32960, true, false, {8})\n\nfunction mod:OnCombatStart(delay)\n\ttimerFrenzyCD:Start(-delay)\nend\n\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32960 then\n\t\ttimerMark:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnMark:Show()\n\t\t\tspecWarnMark:Play(\"targetyou\")\n\t\telse\n\t\t\twarningMark:Show(args.destName)\n\t\tend\n\t\tif self.Options.SetIconOnMark then\n\t\t\tself:SetIcon(args.destName, 8)\n\t\tend\n\telseif args.spellId == 32964 then\n\t\twarningFrenzy:Show()\n\t\ttimerFrenzy:Show()\n\t\ttimerFrenzyCD:Start()\n\telseif args.spellId == 21063 then\n\t\tif self.Options.SpecWarn21063dispel then\n\t\t\tspecWarnTwisted:Show(args.destName)\n\t\t\tspecWarnTwisted:Play(\"dispelnow\")\n\t\telse\n\t\t\twarningTwisted:Show(args.destName)\n\t\tend\n--\t\ttimerTwistedCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 32960 then\n\t\ttimerMark:Cancel(args.destName)\n\t\tif self.Options.SetIconOnMark then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Outland/Quest.lua",
    "content": "local mod\t= DBM:NewMod(\"Quest\", \"DBM-Outland\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:AddBoolOption(\"Timers\", true)\nmod:SetModelID(18921)\n\n--------------\n--  Locals  --\n--------------\nlocal frame\nlocal questTimers = {\n\t[10277] = 427,-- The Caverns of Time -- 425 425 419.9 427.7 426.5\n\t[10211] = 533,-- City of Light (shattrath) -- 528 528 532 533\n}\nlocal bars = {}\n\n--------------------\n--  Create Frame  --\n--------------------\nframe = CreateFrame(\"Frame\")\nframe:RegisterEvent(\"QUEST_ACCEPTED\")\n\nframe:SetScript(\"OnEvent\", function(self, e, id)\n\tif not mod.Options.Timers then\n\t\tframe:UnregisterAllEvents()\n\t\tframe = nil\n\t\treturn\n\tend\n\tif e == \"QUEST_ACCEPTED\" then\n\t\tlocal title, _, _, _, _, _, _, qid = GetQuestLogTitle(id)\n\t\tif questTimers[qid] then\n\t\t\tif bars[qid] then\n\t\t\t\tbars[qid]:Cancel()\n\t\t\tend\n\t\t\tbars[qid] = DBT:CreateBar(questTimers[qid], tostring(title) or tostring(id), \"Interface\\\\Icons\\\\Spell_Nature_TimeStop\")\n\t\t\tframe:RegisterEvent(\"QUEST_LOG_UPDATE\")\n\t\tend\n\telseif e == \"QUEST_LOG_UPDATE\" then\n\t\t-- check for the user abandoning the quest\n\t\tlocal quests = {}\n\t\tfor i = 1, 25 do\n\t\t\tlocal _, _, _, _, _, complete, _, qid = GetQuestLogTitle(i)\n\t\t\t-- check for completion as the shat escort can complete early if someone elses npc finishes next to you\n\t\t\tif qid and not complete then\n\t\t\t\tquests[qid] = true\n\t\t\tend\n\t\tend\n\t\tlocal nbars = 0\n\t\tfor qid, bar in pairs(bars) do\n\t\t\tif bar and not quests[qid] then\n\t\t\t\tbar:Cancel()\n\t\t\t\tbars[qid] = nil\n\t\t\telseif bar ~= nil then\n\t\t\t\tnbars = nbars + 1\n\t\t\tend\n\t\tend\n\t\tif nbars == 0 then\n\t\t\tframe:UnregisterEvent(\"QUEST_LOG_UPDATE\")\n\t\tend\n\tend\nend)\n"
  },
  {
    "path": "DBM-Outland/localization.cn.lua",
    "content": "if GetLocale() ~= \"zhCN\" then return end\n\nlocal L\n\n-- Doom Lord Kazzak\nL = DBM:GetModLocalization(\"Kazzak\")\n\nL:SetGeneralLocalization({\n\tname = \"末日领主卡扎克\"\n})\n\nL:SetMiscLocalization({\n\tDBM_KAZZAK_EMOTE_ENRAGE\t\t= \"%s becomes enraged!\"--Probalby won't be used, at least not long. Once spellid replaces it\n})\n\n-- Doomwalker\nL = DBM:GetModLocalization(\"Doomwalker\")\n\nL:SetGeneralLocalization({\n\tname = \"末日行者\"\n})\n\nL:SetMiscLocalization({\n\tDBM_DOOMW_EMOTE_ENRAGE\t= \"%s becomes enraged!\"--Probalby won't be used, at least not long. Once spellid replaces it\n})\n"
  },
  {
    "path": "DBM-Outland/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n-- Doom Lord Kazzak\nL = DBM:GetModLocalization(\"Kazzak\")\n\nL:SetGeneralLocalization({\n\tname = \"Verdammnislord Kazzak\"\n})\n\nL:SetMiscLocalization({\n\tDBM_KAZZAK_EMOTE_ENRAGE\t\t= \"%s wird wütend!\" --guessed translation / currently unused (r335)\n})\n\n-- Doomwalker\nL = DBM:GetModLocalization(\"Doomwalker\")\n\nL:SetGeneralLocalization({\n\tname = \"Verdammniswandler\"\n})\n\nL:SetMiscLocalization({\n\tDBM_DOOMW_EMOTE_ENRAGE\t= \"%s wird wütend!\" --guessed translation / currently unused (r335)\n})\n"
  },
  {
    "path": "DBM-Outland/localization.en.lua",
    "content": "local L\n\n-- Doom Lord Kazzak\nL = DBM:GetModLocalization(\"Kazzak\")\n\nL:SetGeneralLocalization({\n\tname = \"Doom Lord Kazzak\"\n})\n\nL:SetMiscLocalization({\n\tDBM_KAZZAK_EMOTE_ENRAGE\t\t= \"%s becomes enraged!\"--Probalby won't be used, at least not long. Once spellid replaces it\n})\n\n-- Doomwalker\nL = DBM:GetModLocalization(\"Doomwalker\")\n\nL:SetGeneralLocalization({\n\tname = \"Doomwalker\"\n})\n\nL:SetMiscLocalization({\n\tDBM_DOOMW_EMOTE_ENRAGE\t= \"%s becomes enraged!\"--Probalby won't be used, at least not long. Once spellid replaces it\n})\n\n-- Quest\nL = DBM:GetModLocalization(\"Quest\")\n\nL:SetGeneralLocalization({\n\tname = \"Quest\",\n})\n\nL:SetOptionLocalization({\n\tTimers = \"Show timers for some escort quests\"\n})\n"
  },
  {
    "path": "DBM-Outland/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\nlocal L\n\n-- Doom Lord Kazzak\nL = DBM:GetModLocalization(\"Kazzak\")\n\nL:SetGeneralLocalization({\n\tname = \"Señor de fatalidad Kazzak\"\n})\n\nL:SetMiscLocalization({\n\tDBM_KAZZAK_EMOTE_ENRAGE\t\t= \"¡%s se enfurece!\"--Probalby won't be used, at least not long. Once spellid replaces it\n})\n\n-- Doomwalker\nL = DBM:GetModLocalization(\"Doomwalker\")\n\nL:SetGeneralLocalization({\n\tname = \"Caminante del Destino\"\n})\n\nL:SetMiscLocalization({\n\tDBM_DOOMW_EMOTE_ENRAGE\t= \"¡%s se enfurece!\"--Probalby won't be used, at least not long. Once spellid replaces it\n})\n"
  },
  {
    "path": "DBM-Outland/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n-- Doom Lord Kazzak\nL = DBM:GetModLocalization(\"Kazzak\")\n\nL:SetGeneralLocalization({\n\tname = \"파멸의 군주 카자크\"\n})\n\nL:SetMiscLocalization({\n\tDBM_KAZZAK_EMOTE_ENRAGE\t\t= \"%s|1이;가; 분노에 휩싸입니다!\"--Probalby won't be used, at least not long. Once spellid replaces it\n})\n\n-- Doomwalker\nL = DBM:GetModLocalization(\"Doomwalker\")\n\nL:SetGeneralLocalization({\n\tname = \"파멸의 절단기\"\n})\n\nL:SetMiscLocalization({\n\tDBM_DOOMW_EMOTE_ENRAGE\t= \"%s|1이;가; 분노에 휩싸입니다!\"----Probalby won't be used, at least not long. Once spellid replaces it\n})\n\n-- Quest\nL = DBM:GetModLocalization(\"Quest\")\n\nL:SetGeneralLocalization({\n\tname = \"퀘스트\",\n})\n\nL:SetOptionLocalization({\n\tTimers = \"몇가지 호위 퀘스트의 타이머 바 보기\"\n})\n"
  },
  {
    "path": "DBM-Outland/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n-- Doom Lord Kazzak\nL = DBM:GetModLocalization(\"Kazzak\")\n\nL:SetGeneralLocalization({\n\tname = \"Владыка судеб Каззак\"\n})\n\nL:SetMiscLocalization({\n\tDBM_KAZZAK_EMOTE_ENRAGE\t\t= \"%s впадает в бешенство!\"--Probalby won't be used, at least not long. Once spellid replaces it\n})\n\n-- Doomwalker\nL = DBM:GetModLocalization(\"Doomwalker\")\n\nL:SetGeneralLocalization({\n\tname = \"Судьболом\"\n})\n\nL:SetMiscLocalization({\n\tDBM_DOOMW_EMOTE_ENRAGE\t= \"%s впадает в бешенство!\"--Probalby won't be used, at least not long. Once spellid replaces it\n})\n\n-- Quest\nL = DBM:GetModLocalization(\"Quest\")\n\nL:SetGeneralLocalization({\n\tname = \"Квест\",\n})\n\nL:SetOptionLocalization({\n\tTimers = \"Показывать таймеры для некоторых квестов сопровождений\"\n})\n"
  },
  {
    "path": "DBM-Outland/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\n\nlocal L\n\n-- Doom Lord Kazzak\nL = DBM:GetModLocalization(\"Kazzak\")\n\nL:SetGeneralLocalization({\n\tname = \"毀滅領主卡札克\"\n})\n\nL:SetMiscLocalization({\n\tDBM_KAZZAK_EMOTE_ENRAGE\t\t= \"%s becomes enraged!\"\n})\n\n-- Doomwalker\nL = DBM:GetModLocalization(\"Doomwalker\")\n\nL:SetGeneralLocalization({\n\tname = \"厄運行者\"\n})\n\nL:SetMiscLocalization({\n\tDBM_DOOMW_EMOTE_ENRAGE\t= \"%s becomes enraged!\"\n})\n"
  },
  {
    "path": "DBM-Party-BC/Auct_Crypts/Maladaar.lua",
    "content": "local mod\t= DBM:NewMod(524, \"DBM-Party-BC\", 7, 247)\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(18373)\nmod:SetEncounterID(1889)\n\nmod:SetModelID(17715)\nmod:SetModelScale(0.85)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 32424\",\n\t\"SPELL_AURA_APPLIED 32346\"\n)\n\nlocal warningSoul\t\t= mod:NewTargetAnnounce(32346, 2)\nlocal warningAvatar\t\t= mod:NewSpellAnnounce(32424, 3)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 32424 then\n\t\twarningAvatar:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Auct_Crypts/Shirrak.lua",
    "content": "local mod\t= DBM:NewMod(523, \"DBM-Party-BC\", 7, 247)\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(18371)\nmod:SetCreatureID(1890)\n\nmod:SetModelID(18916)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\"\n)\n\nlocal warnFocusFire\t\t= mod:NewTargetAnnounce(32300, 3)\n\nlocal specWarnFocusFire\t= mod:NewSpecialWarningDodge(32300, nil, nil, nil, 1, 2)\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(_, _, _, _, target)\n\tlocal targetname = DBM:GetUnitFullName(target) or target\n\tif targetname == UnitName(\"player\") then\n\t\tspecWarnFocusFire:Show()\n\t\tspecWarnFocusFire:Play(\"watchstep\")\n\telse\n\t\twarnFocusFire:Show(target)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Auct_SethekkHalls/Anzu.lua",
    "content": "local mod = DBM:NewMod(542, \"DBM-Party-BC\", 9, 252)\nlocal L = mod:GetLocalizedStrings()\n\nmod.statTypes = \"heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(23035)\nmod:SetEncounterID(1904)\n\nmod:SetModelID(21492)\nmod:SetModelScale(0.5)\nmod:SetModelOffset(0, 1, 3)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 40184\",\n\t\"SPELL_AURA_APPLIED 40321 40184 40303\",\n\t\"SPELL_AURA_REMOVED 40303\",\n\t\"UNIT_HEALTH\" ,\n\t\"CHAT_MSG_MONSTER_EMOTE\"\n)\n\nlocal warnBirds\t\t\t = mod:NewAnnounce(\"warnBrood\", 2, 32038)\nlocal warnStoned\t\t\t= mod:NewAnnounce(\"warnStoned\", 1, 32810, false)\nlocal warnCyclone\t\t   = mod:NewTargetAnnounce(40321, 2)\nlocal warnSpellBomb\t\t = mod:NewTargetAnnounce(40303, 2)\n\nlocal specWarnScreech\t\t= mod:NewSpecialWarningSpell(40184, nil, nil, nil, 2, 2)\n\nlocal timerScreech\t\t  = mod:NewCastTimer(5, 40184, nil, nil, nil, 2)\nlocal timerScreechDebuff\t= mod:NewBuffActiveTimer(6, 40184, nil, nil, nil, 3)\nlocal timerCyclone\t\t  = mod:NewTargetTimer(6, 40321, nil, nil, nil, 3)\nlocal timerSpellBomb\t\t= mod:NewTargetTimer(8, 40303, nil, nil, nil, 3)\nlocal timerScreechCD\t\t= mod:NewCDTimer(30, 40184, nil, nil, nil, 2)--Best guess on screech CD. Might need tweaking.\n\nmod.vb.warnedbirds1 = false\nmod.vb.warnedbirds2 = false\n\nfunction mod:OnCombatStart()\n\ttimerScreechCD:Start()\n\tself.vb.warnedbirds1 = false\n\tself.vb.warnedbirds2 = false\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 40184 then\n\t\tspecWarnScreech:Show()\n\t\tspecWarnScreech:Play(\"aesoon\")\n\t\ttimerScreech:Start()\n\t\ttimerScreechCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 40321 then\n\t\twarnCyclone:Show(args.destName)\n\t\ttimerCyclone:Start(args.destName)\n\telseif args.spellId == 40184 then\n\t\ttimerScreechDebuff:Show()\n\telseif args.spellId == 40303 then\n\t\twarnSpellBomb:Show(args.destName)\n\t\ttimerSpellBomb:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 40303 then\n\t\ttimerSpellBomb:Stop(args.destName)\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif not self.vb.warnedbirds1 and self:GetUnitCreatureId(uId) == 23035 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.70 then\n\t\tself.vb.warnedbirds1 = true\n\t\twarnBirds:Show()\n\telseif not self.vb.warnedbirds2 and self:GetUnitCreatureId(uId) == 23035 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.37 then\n\t\tself.vb.warnedbirds2 = true\n\t\twarnBirds:Show()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_EMOTE(msg, npc)\n\tif msg == L.BirdStone or msg:find(L.BirdStone) then\t\t-- Spirits returning to stone.\n\t\twarnStoned:Show(npc)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Auct_SethekkHalls/Ikiss.lua",
    "content": "local mod = DBM:NewMod(543, \"DBM-Party-BC\", 9, 252)\nlocal L = mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(18473)\nmod:SetCreatureID(1902)\n\nmod:SetModelSound(10557, 10557)\nmod:SetModelID(18636)\nmod:SetModelScale(0.85)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 38197 40425\",\n\t\"SPELL_AURA_APPLIED 38245 43309\"\n)\n\nlocal warnSheep\t\t\t\t\t= mod:NewTargetAnnounce(38245, 3)\n\nlocal specWarnArcaneExplosion\t= mod:NewSpecialWarningSpell(38197, nil, nil, 2, 3, 2)\n\nlocal timerArcaneExplosion\t\t= mod:NewCastTimer(5, 38197, nil, nil, nil, 2)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(38197, 40425) then\n\t\tspecWarnArcaneExplosion:Show()\n\t\tspecWarnArcaneExplosion:Play(\"findshelter\")\n\t\ttimerArcaneExplosion:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(38245, 43309) then\n\t\twarnSheep:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Auct_SethekkHalls/Syth.lua",
    "content": "local mod = DBM:NewMod(541, \"DBM-Party-BC\", 9, 252)\nlocal L = mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(18472)\nmod:SetEncounterID(1903)\n\nmod:SetModelID(20599)\nmod:SetModelScale(0.9)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_SUMMON 33537 33538 33539 33540\"\n)\n\nlocal warnSummon   = mod:NewAnnounce(\"warnSummon\", 3)\n\nfunction mod:SPELL_SUMMON(args)\n\tif args:IsSpellID(33537, 33538, 33539, 33540) and self:AntiSpam() then\n\t\twarnSummon:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Auct_ShadowLabyrinth/Hellmaw.lua",
    "content": "local mod = DBM:NewMod(544, \"DBM-Party-BC\", 10, 253)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\n\nmod:SetCreatureID(18731)\nmod:SetEncounterID(1908)\n\nmod:SetModelID(18821)\nmod:SetModelScale(0.7)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 33547\"\n)\n\nlocal warnFear\t\t= mod:NewSpellAnnounce(33547, 3)\n\nlocal timerFear\t\t= mod:NewNextTimer(25, 33547, nil, nil, nil, 2)\n\nlocal enrageTimer\t= mod:NewBerserkTimer(180)\n\nfunction mod:OnCombatStart(delay)\n\tif self:IsDifficulty(\"heroic5\", \"timewalker\") then\n\t\tenrageTimer:Start(-delay)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 33547 then\n\t\twarnFear:Show()\n\t\ttimerFear:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Auct_ShadowLabyrinth/Inciter.lua",
    "content": "local mod = DBM:NewMod(545, \"DBM-Party-BC\", 10, 253)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(18667)\nmod:SetEncounterID(1909)\n\nmod:SetModelID(18058)\nmod:SetModelScale(0.95)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 33676\"\n)\n\nlocal warnChaos\t\t\t= mod:NewSpellAnnounce(33676, 4)\n\nlocal timerChaos\t\t= mod:NewBuffActiveTimer(15, 33676, nil, nil, nil, 3)\nlocal timerNextChaos\t= mod:NewNextTimer(40.5, 33676, nil, nil, nil, 6)\n\nfunction mod:OnCombatStart(delay)\n\ttimerNextChaos:Start(15-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 33676 then\n\t\twarnChaos:Show()\n\t\ttimerChaos:Start()\n\t\ttimerNextChaos:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Auct_ShadowLabyrinth/Murmur.lua",
    "content": "local mod = DBM:NewMod(547, \"DBM-Party-BC\", 10, 253)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(18708)\nmod:SetEncounterID(1910)\n\nmod:SetModelID(18839)\nmod:SetModelScale(0.05)\nmod:SetModelOffset(10, -2, 0)\nmod:SetUsedIcons(8)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 33711 38794\",\n\t\"SPELL_AURA_REMOVED 33711 38794\",\n\t\"SPELL_CAST_START 33923 38796\"\n)\n\nlocal warnTouch\t\t\t= mod:NewTargetAnnounce(33711, 3)\n\nlocal specWarnBoom\t\t= mod:NewSpecialWarningRun(33923, nil, nil, nil, 4, 2)\nlocal specWarnTouch\t\t= mod:NewSpecialWarningMoveAway(33711, nil, nil, nil, 1, 2)\n\nlocal timerBoomCast\t\t= mod:NewCastTimer(5, 33923, nil, nil, nil, 2)\nlocal timerTouch\t\t= mod:NewTargetTimer(14, 33711, nil, nil, nil, 3)\n\nmod:AddSetIconOption(\"SetIconOnTouchTarget\", 33711, true, false, {8})\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 33923 or args.spellId == 38796 then\n\t\tspecWarnBoom:Show()\n\t\tspecWarnBoom:Play(\"justrun\")\n\t\ttimerBoomCast:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 33711 or args.spellId == 38794 then\n\t\ttimerTouch:Start(args.destName)\n\t\tif self.Options.SetIconOnTouchTarget then\n\t\t\tself:SetIcon(args.destName, 8, 14)\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnTouch:Show()\n\t\t\tspecWarnTouch:Play(\"runout\")\n\t\telse\n\t\t\twarnTouch:Show(args.destName)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 33711 or args.spellId == 38794 then\n\t\ttimerTouch:Stop(args.destName)\n\t\tif self.Options.SetIconOnTouchTarget then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Auct_ShadowLabyrinth/Vorpil.lua",
    "content": "local mod = DBM:NewMod(546, \"DBM-Party-BC\", 10, 253)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(18732)\nmod:SetEncounterID(1911)\n\nmod:SetModelID(18535)\nmod:SetModelScale(0.7)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 33563\"\n)\n\nlocal warnTeleport\t\t= mod:NewSpellAnnounce(33563)\n\nlocal timerTeleport\t\t= mod:NewNextTimer(37, 33563, nil, nil, nil, 6)\n\nfunction mod:OnCombatStart(delay)\n\ttimerTeleport:Start(40-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 33563 then\n\t\twarnTeleport:Show()\n\t\ttimerTeleport:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Auct_Tombs/AuctTombsTrash.lua",
    "content": "local mod\t= DBM:NewMod(\"AuctTombsTrash\", \"DBM-Party-BC\", 8, 250)\n\nmod:SetRevision(\"20220518110528\")\n\nmod.isTrashMod = true\n\nmod:RegisterEvents(\n\t\"SPELL_AURA_APPLIED 34925\",\n\t\"SPELL_CAST_START 34945 15785 34931\"\n)\n\nlocal warningCurseOfImpotence\t= mod:NewTargetNoFilterAnnounce(34925, 2)\n\nlocal specWarnHeal\t\t\t\t= mod:NewSpecialWarningInterrupt(34945, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnManaBurn\t\t\t= mod:NewSpecialWarningInterrupt(15785, \"HasInterrupt\", nil, nil, 1, 2)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 34925 then\n\t\twarningCurseOfImpotence:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 34945 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnHeal:Show(args.sourceName)\n\t\tspecWarnHeal:Play(\"kickcast\")\n\telseif args:IsSpellID(15785, 34931) and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnManaBurn:Show(args.sourceName)\n\t\tspecWarnManaBurn:Play(\"kickcast\")\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Auct_Tombs/Pandemonius.lua",
    "content": "local mod\t= DBM:NewMod(534, \"DBM-Party-BC\", 8, 250)\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(18341)\nmod:SetEncounterID(1900)\n\nmod:SetModelID(19338)\nmod:SetModelScale(0.6)\nmod:SetModelOffset(0, 0, 0.8)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 32358 38759\"\n)\n\nlocal specWarnShell\t\t\t= mod:NewSpecialWarningReflect(32358, nil, nil, 2, 1, 2)\n\nlocal timerShell\t\t\t= mod:NewBuffActiveTimer(7, 32358, nil, nil, nil, 5)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(32358, 38759) then\n\t\tspecWarnShell:Show(args.sourceName)\n\t\tspecWarnShell:Play(\"stopattack\")\n\t\ttimerShell:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Auct_Tombs/Shaffar.lua",
    "content": "local mod\t= DBM:NewMod(537, \"DBM-Party-BC\", 8, 250)\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(18344)\nmod:SetEncounterID(1899)\n\nmod:SetModelID(19780)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"UNIT_SPELLCAST_SUCCEEDED\"\n)\n\nlocal specWarnAdds\t= mod:NewSpecialWarningAdds(32371, \"-Healer\", nil, nil, 1, 2)\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(32371) then\n\t\tself:SendSync(\"Adds\")\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif msg == \"Adds\" and self:AntiSpam(5, 1) then\n\t\tspecWarnAdds:Show()\n\t\tspecWarnAdds:Play(\"killmob\")\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Auct_Tombs/Tavarok.lua",
    "content": "local mod\t= DBM:NewMod(535, \"DBM-Party-BC\", 8, 250)\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(18343)\nmod:SetEncounterID(1901)\n\nmod:SetModelID(19332)\nmod:SetModelScale(0.5)\n--mod:DisableEEKillDetection() -- EE instantly fires\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 33919\",\n\t\"SPELL_AURA_APPLIED 32361\",\n\t\"SPELL_AURA_REMOVED 32361\"\n)\n\nlocal WarnPrison\t\t= mod:NewTargetNoFilterAnnounce(32361, 3)\n\nlocal specWarnQuake\t\t= mod:NewSpecialWarningSpell(33919, nil, nil, nil, 2, 2)\n\nlocal timerPrisonCD\t\t= mod:NewCDTimer(17.8, 32361, nil, nil, nil, 2)\nlocal timerPrison\t\t= mod:NewTargetTimer(5, 32361, nil, nil, nil, 3)\n\nfunction mod:OnCombatStart()\n\ttimerPrisonCD:Start()\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 33919 then\n\t\tspecWarnQuake:Show()\n\t\tspecWarnQuake:Play(\"stunsoon\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32361 then\n\t\tWarnPrison:Show(args.destName)\n\t\ttimerPrison:Start(args.destName)\n\t\ttimerPrisonCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 32361 then\n\t\ttimerPrison:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Auct_Tombs/Yor.lua",
    "content": "local mod\t= DBM:NewMod(536, \"DBM-Party-BC\", 8, 250)\n\nmod.statTypes = \"heroic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(22930)\nmod:SetEncounterID(250)\n\nmod:SetModelID(14173)\nmod:SetModelScale(0.8)\nmod:SetModelOffset(0, 1, 2)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS\"\n)\n\nlocal warnStomp\t= mod:NewSpellAnnounce(36405, 2)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 36405 then\n\t\twarnStomp:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/CoT_BlackMorass/Aeonus.lua",
    "content": "local mod\t= DBM:NewMod(554, \"DBM-Party-BC\", 12, 255)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17881)\nmod:SetEncounterID(1919)\n\nmod:SetModelID(20510)\nmod:SetModelScale(0.2)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 37605\",\n\t\"SPELL_CAST_SUCCESS 31422\"\n)\n\nlocal warnFrenzy\t\t= mod:NewSpellAnnounce(37605, 3)\nlocal warnTimeStop\t\t= mod:NewSpellAnnounce(31422, 3)\n\nlocal timerTimeStop\t\t= mod:NewBuffActiveTimer(4, 31422, nil, nil, nil, 3)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 37605 then\n\t\twarnFrenzy:Show()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 31422 then\n\t\twarnTimeStop:Show()\n\t\ttimerTimeStop:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/CoT_BlackMorass/Deja.lua",
    "content": "local mod\t= DBM:NewMod(552, \"DBM-Party-BC\", 12, 255)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17879)\nmod:SetEncounterID(1920)\n\nmod:SetModelID(20513)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 38539 31472\",\n\t\"SPELL_AURA_APPLIED 31467\"\n)\n\nlocal warnArcaneDischarge\t\t= mod:NewSpellAnnounce(38539, 2)\n\nlocal specwarnTimeLapse\t\t\t= mod:NewSpecialWarningDispel(31467, \"Healer\", nil, nil, 1, 2)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(38539, 31472) then\n\t\twarnArcaneDischarge:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 31467 then\n\t\tspecwarnTimeLapse:Show(args.destName)\n\t\tspecwarnTimeLapse:Play(\"dispelnow\")\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/CoT_BlackMorass/PortalTimers.lua",
    "content": "local mod\t= DBM:NewMod(\"PT\", \"DBM-Party-BC\", 12)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\n\nmod:RegisterEvents(\n\t\"UPDATE_WORLD_STATES\",\n\t\"UNIT_DIED\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\nmod.noStatistics = true\n\n-- Portals\nlocal warnWavePortalSoon\t= mod:NewAnnounce(\"WarnWavePortalSoon\", 2, 33404)\nlocal warnWavePortal\t\t= mod:NewAnnounce(\"WarnWavePortal\", 3, 33404)\nlocal warnBossPortal\t\t= mod:NewAnnounce(\"WarnBossPortal\", 4, 33341)\n\nlocal timerNextPortal\t\t= mod:NewTimer(120, \"TimerNextPortal\", 33404, nil, nil, 6)\n\nmod:AddBoolOption(\"ShowAllPortalTimers\", false, \"timer\")\n\nlocal lastPortal = 0\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 17879 or cid == 17880 then\n\t\ttimerNextPortal:Start(122, lastPortal + 1)\n\t\twarnWavePortalSoon:Schedule(112)\n\tend\nend\n\nfunction mod:UPDATE_WORLD_STATES()\n\tlocal text = select(3, GetWorldStateUIInfo(2))\n\tif not text then return end\n\tlocal currentPortal = text:match(\"(%d+).+18\")\n\tif not currentPortal then\n\t\tcurrentPortal = 0\n\tend\n\tcurrentPortal = tonumber(currentPortal)\n\tif currentPortal > lastPortal then\n\t\twarnWavePortalSoon:Cancel()\n\t\ttimerNextPortal:Cancel()\n\t\tif currentPortal == 6 or currentPortal == 12 or currentPortal == 18 then\n\t\t\twarnBossPortal:Show()\n\t\telse\n\t\t\twarnWavePortal:Show(currentPortal)\n\t\t\tif self.Options.ShowAllPortalTimers then\n\t\t\t\ttimerNextPortal:Start(122, currentPortal + 1)\n\t\t\t\twarnWavePortalSoon:Schedule(112)\n\t\t\tend\n\t\tend\n\t\tlastPortal = currentPortal\n\telseif currentPortal < lastPortal then\n\t\tlastPortal = 0\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.Shielddown or msg:find(L.Shielddown) then\n\t\tself:SendSync(\"Wipe\")\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif msg == \"Wipe\" then\n\t\twarnWavePortalSoon:Cancel()\n\t\ttimerNextPortal:Cancel()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/CoT_BlackMorass/Temporus.lua",
    "content": "local mod\t= DBM:NewMod(553, \"DBM-Party-BC\", 12, 255)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17880)\nmod:SetEncounterID(1921)\n\nmod:SetModelID(19066)\nmod:SetModelOffset(0, 50, 0)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 31458 38592\",\n\t\"SPELL_AURA_REMOVED 31458\"\n)\n\nlocal specWarnSpellReflect\t= mod:NewSpecialWarningReflect(38592, nil, nil, 2, 1, 2)\nlocal specWarnHasten\t\t= mod:NewSpecialWarningDispel(31458, \"MagicDispeller\", nil, nil, 1, 2)\n\nlocal timerSpellReflect\t\t= mod:NewBuffActiveTimer(6, 38592, nil, nil, 2, 5, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerHasten\t\t\t= mod:NewTargetTimer(10, 31458, nil, \"MagicDispeller|Healer|Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 31458 and not args:IsDestTypePlayer() then\n\t\tspecWarnHasten:Show(args.destName)\n\t\tspecWarnHasten:Play(\"dispelboss\")\n\t\ttimerHasten:Start(args.destName)\n\telseif args.spellId == 38592 then\n\t\tspecWarnSpellReflect:Show(args.destName)\n\t\tspecWarnSpellReflect:Play(\"stopattack\")\n\t\ttimerSpellReflect:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 31458 then\n\t\ttimerHasten:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/CoT_OldHillsbrad/Drake.lua",
    "content": "local mod\t= DBM:NewMod(538, \"DBM-Party-BC\", 11, 251)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17848)\nmod:SetEncounterID(1905)\n\nmod:SetModelID(17386)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 31909\",\n\t\"SPELL_AURA_APPLIED 33792\",\n\t\"SPELL_AURA_REMOVED 33792\"\n)\n\nlocal warnShot\t\t\t\t= mod:NewTargetNoFilterAnnounce(33792)\nlocal warningMortalStrike\t= mod:NewTargetNoFilterAnnounce(31911, 1, nil, \"Tank|Healer\")\n\nlocal specWarnWhirlwind\t\t= mod:NewSpecialWarningRun(31909, nil, nil, nil, 4, 2)\n\nlocal timerShot\t\t\t\t= mod:NewTargetTimer(6, 33792, nil, nil, nil, 3)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 31909 or args.spellId == 21910 then\n\t\tspecWarnWhirlwind:Show()\n\t\tspecWarnWhirlwind:Play(\"justrun\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 33792 then\n\t\twarnShot:Show(args.destName)\n\t\ttimerShot:Start(args.destName)\n\telseif args.spellId == 31911 then\n\t\twarningMortalStrike:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 33792 then\n\t\ttimerShot:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/CoT_OldHillsbrad/EpochHunter.lua",
    "content": "local mod\t= DBM:NewMod(540, \"DBM-Party-BC\", 11, 251)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(18096)\nmod:SetEncounterID(1906)\n\nmod:SetModelID(19135)\nmod:SetModelScale(0.15)\nmod:SetModelOffset(0, 0, 8)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 33834\"\n)\n\nlocal warnSandBreath\t\t= mod:NewSpellAnnounce(31914, 2)\n\nlocal timerManaDisruption\t= mod:NewBuffActiveTimer(15, 33834, nil, nil, nil, 1)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 33834 then\n\t\ttimerManaDisruption:Show()\n\telseif args.spellId == 31914 then\n\t\twarnSandBreath:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/CoT_OldHillsbrad/Skarloc.lua",
    "content": "local mod\t= DBM:NewMod(539, \"DBM-Party-BC\", 11, 251)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17862)\nmod:SetEncounterID(1907)\n\nmod:SetModelID(17387)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 29427\",\n\t\"SPELL_AURA_APPLIED 13005\",\n\t\"SPELL_AURA_REMOVED 13005\",\n\t\"SPELL_PERIODIC_DAMAGE 38385\",\n\t\"SPELL_PERIODIC_MISSED 38385\"\n)\n\nlocal warnHammer\t\t\t\t= mod:NewTargetNoFilterAnnounce(13005, 2)\n\nlocal specWarnHeal\t\t\t\t= mod:NewSpecialWarningInterrupt(29427, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnConsecration\t\t= mod:NewSpecialWarningMove(38385, nil, nil, nil, 1, 2)\n\nlocal timerHammer\t\t\t\t= mod:NewTargetTimer(6, 13005, nil, nil, nil, 3)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 29427 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnHeal:Show(args.sourceName)\n\t\tspecWarnHeal:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 13005 then\n\t\twarnHammer:Show(args.destName)\n\t\ttimerHammer:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 13005 then\n\t\ttimerHammer:Stop(args.destName)\n\tend\nend\n\nfunction mod:SPELL_PERIODIC_DAMAGE(_, _, _, destGUID, _, _, spellId)\n\tif spellId == 38385 and destGUID == UnitGUID(\"player\") and self:AntiSpam() then\n\t\tspecWarnConsecration:Show()\n\t\tspecWarnConsecration:Play(\"runaway\")\n\tend\nend\nmod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE\n"
  },
  {
    "path": "DBM-Party-BC/Coil_Slavepens/Mennu.lua",
    "content": "local mod\t= DBM:NewMod(570, \"DBM-Party-BC\", 4, 260)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17941)\nmod:SetEncounterID(1939)\n\nmod:SetModelID(17728)\nmod:SetModelOffset(-0.4, 0, -0.3)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_SUMMON 31991 31985 34980\"\n)\n\n--TODO, add a switch warning for the totem you actually want to kill (healing one probably)\nlocal WarnStoneskinTotem\t\t= mod:NewSpellAnnounce(31985, 2)\nlocal WarnHealingWard\t\t\t= mod:NewSpellAnnounce(34980, 3)\n\nlocal specWarnCorruptedNova\t\t= mod:NewSpecialWarningMove(31991, false, nil, nil, 1, 2)\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 31991 then\n\t\tspecWarnCorruptedNova:Show()\n\t\tspecWarnCorruptedNova:Play(\"runaway\")\n\telseif args.spellId == 31985 then\n\t\tWarnStoneskinTotem:Show()\n\telseif args.spellId == 34980 then\n\t\tWarnHealingWard:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Coil_Slavepens/Quagmirran.lua",
    "content": "local mod\t= DBM:NewMod(572, \"DBM-Party-BC\", 4, 260)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17942)\nmod:SetEncounterID(1940)\n\nmod:SetModelID(18224)\nmod:SetModelOffset(-2, 0.4, -1)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n)\n"
  },
  {
    "path": "DBM-Party-BC/Coil_Slavepens/Rokmar.lua",
    "content": "local mod\t= DBM:NewMod(571, \"DBM-Party-BC\", 4, 260)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17991)\nmod:SetEncounterID(1941)\n\nmod:SetModelID(17729)\nmod:SetModelOffset(-3, 0, -0.8)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 31956 38801 34970\"\n)\n\nlocal WarnFrenzy\t= mod:NewSpellAnnounce(34970)\n\nlocal specWarnWound\t= mod:NewSpecialWarningTarget(38801, \"Healer\", nil, nil, 1, 7)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(31956, 38801) then\n\t\tspecWarnWound:Show(args.destName)\n\t\tspecWarnWound:Play(\"healfull\")\n\telseif args.spellId == 34970 then\n\t\tWarnFrenzy:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Coil_Steamvault/Kalithresh.lua",
    "content": "local mod\t= DBM:NewMod(575, \"DBM-Party-BC\", 6, 261)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17798)\nmod:SetEncounterID(1944)\n\nmod:SetModelID(20235)\nmod:SetModelScale(0.95)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 31543\",\n\t\"SPELL_AURA_APPLIED 31534\"\n)\n\nlocal WarnChannel\t\t= mod:NewSpellAnnounce(31543, 2)\n\nlocal specWarnReflect\t= mod:NewSpecialWarningReflect(31534, \"-Melee\", nil, nil, 1, 2)--CasterDps after new core\n\nlocal timerReflect\t\t= mod:NewBuffActiveTimer(8, 31534, nil, nil, nil, 5)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 31543 then\n\t\tWarnChannel:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 31534 then\n\t\ttimerReflect:Start(args.destName)\n\t\tspecWarnReflect:Show(args.destName)\n\t\tspecWarnReflect:Play(\"stopattack\")\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Coil_Steamvault/Steamrigger.lua",
    "content": "local mod\t= DBM:NewMod(574, \"DBM-Party-BC\", 6, 261)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17796)\nmod:SetEncounterID(1943)\n\nmod:SetModelID(18638)\nmod:SetModelOffset(-10, 0, 1)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 35107\",\n\t\"SPELL_AURA_REMOVED 35107\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal WarnNet\t\t\t= mod:NewTargetAnnounce(35107, 2)\n\nlocal specWarnSummon\t= mod:NewSpecialWarning(\"warnSummon\", \"-Healer\", nil, nil, 1, 2)\n\nlocal timerNet\t\t\t= mod:NewTargetTimer(6, 35107, nil, nil, nil, 3)\n\nlocal enrageTimer\t\t= mod:NewBerserkTimer(300)\n\nfunction mod:OnCombatStart(delay)\n\tif self:IsHeroic() then\n\t\tenrageTimer:Start(-delay)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 35107 then\n\t\tWarnNet:Show(args.destName)\n\t\ttimerNet:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 35107 then\n\t\ttimerNet:Stop(args.destName)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.Mechs then\t\t-- Adds\n\t\tspecWarnSummon:Show()\n\t\tspecWarnSummon:Play(\"killmob\")\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Coil_Steamvault/Thespia.lua",
    "content": "local mod\t= DBM:NewMod(573, \"DBM-Party-BC\", 6, 261)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17797)\nmod:SetEncounterID(1942)\n\nmod:SetModelScale(0.95)\nmod:SetModelID(11268)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 25033\",\n\t\"SPELL_AURA_APPLIED 31718 31481\",\n\t\"SPELL_AURA_REMOVED 31718 31481\"\n)\n\nlocal warningCloud\t\t= mod:NewSpellAnnounce(25033, 2)\nlocal warningWinds\t\t= mod:NewTargetNoFilterAnnounce(31718, 2)\nlocal warningBurst\t\t= mod:NewTargetNoFilterAnnounce(31481, 3)\n\nlocal timerWinds\t\t= mod:NewTargetTimer(6, 31718, nil, nil, nil, 3)\nlocal timerBurst\t\t= mod:NewTargetTimer(10, 31481, nil, nil, nil, 3)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 25033 then\n\t\twarningCloud:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 31718 then\n\t\twarningWinds:Show(args.destName)\n\t\ttimerWinds:Start(args.destName)\n\telseif args.spellId == 31481 then\n\t\twarningBurst:Show(args.destName)\n\t\ttimerBurst:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 31718 then\n\t\ttimerWinds:Stop(args.destName)\n\telseif args.spellId == 31481 then\n\t\ttimerBurst:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Coil_Underbog/Ghazan.lua",
    "content": "local mod\t= DBM:NewMod(577, \"DBM-Party-BC\", 5, 262)\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(18105)\nmod:SetEncounterID(1945)\n\nmod:SetModelID(17528)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 15716\"\n)\n\nlocal warnEnrage\t= mod:NewSpellAnnounce(15716, 4)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 15716 then\n\t\twarnEnrage:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Coil_Underbog/Hungarfen.lua",
    "content": "local mod\t= DBM:NewMod(576, \"DBM-Party-BC\", 5, 262)\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17770)\nmod:SetEncounterID(1946)\n\nmod:SetModelID(17228)\nmod:SetModelOffset(-2, 0.4, -1)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 31673\"\n)\n\nlocal warnFoulSpores  = mod:NewSpellAnnounce(31673, 2)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 31673 then\n\t\twarnFoulSpores:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Coil_Underbog/Muselek.lua",
    "content": "local mod\t= DBM:NewMod(578, \"DBM-Party-BC\", 5, 262)\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17826)\nmod:SetEncounterID(1947)\n\nmod:SetModelID(18570)\nmod:SetModelOffset(-0.4, 0, 0.3)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 31429 34971\"\n)\n\nlocal warnRoar\t\t= mod:NewSpellAnnounce(31429, 2)\nlocal warnFrenzy\t= mod:NewSpellAnnounce(34971, 4)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 31429 then\n\t\twarnRoar:Show()\n\telseif args.spellId == 34971 then\n\t\twarnFrenzy:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Coil_Underbog/Stalker.lua",
    "content": "local mod\t= DBM:NewMod(579, \"DBM-Party-BC\", 5, 262)\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17882)\nmod:SetEncounterID(1948)\n\nmod:SetModelID(18194)\nmod:SetModelOffset(-0.4, 1.5, -0.3)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 31704 31715\"\n)\n\nlocal warnStaticCharge\t\t= mod:NewTargetAnnounce(31715, 3)\n\nlocal warnLevitate\t\t\t= mod:NewTargetNoFilterAnnounce(31704, 2, nil, \"RemoveMagic|Healer\")\nlocal specWarnStaticCharge\t= mod:NewSpecialWarningMoveAway(31715, nil, nil, nil, 1, 2)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 31704 then\n\t\twarnLevitate:Show(args.destName)\n\telseif args.spellId == 31715 then\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnStaticCharge:Show()\n\t\t\tspecWarnStaticCharge:Play(\"runout\")\n\t\telse\n\t\t\twarnStaticCharge:Show(args.destName)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/DBM-Party-BC.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Dungeons (BC)|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Gruppe-BC|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Групповые подземелья-BC|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Mazmorras (TBC)|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0던전 (불성)|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0隊伍首領-燃燒的遠征|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0队伍首领-燃烧的远征|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Donjons (BC)|r\n## Author: Arta/MysticalOS\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMPartyBC_AllSavedVars\n## SavedVariablesPerCharacter: DBMPartyBC_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: PARTY\n## X-DBM-Mod-Category: BC\n## X-DBM-StatTypes: normal,heroic\n## X-DBM-Mod-SubCategories: Hellfire Ramparts,The Blood Furnace,The Shattered Halls,The Slave Pens,The Underbog,The Steamvault,Auchenai Crypts,Mana-Tombs,Sethekk Halls,Shadow Labyrinth,Old Hillsbrad Foothills,The Black Morass,The Mechanar,The Botanica,The Arcatraz,Magisters' Terrace\n## X-DBM-Mod-SubCategories-deDE: Höllenfeuerbollwerk,Der Blutkessel,Die zerschmetterten Hallen,Die Sklavenunterkünfte,Der Tiefensumpf,Die Dampfkammer,Auchenaikrypta,Managruft,Sethekkhallen,Schattenlabyrinth,Die Flucht von Durnholde,Öffnung des Dunklen Portals,Die Mechanar,Die Botanika,Die Arkatraz,Terrasse der Magister\n## X-DBM-Mod-SubCategories-ruRU: Бастионы Адского Пламени,Кузня Крови,Разрушенные залы,Узилище,Нижетопь,Паровое подземелье,Аукенайские гробницы,Гробницы Маны,Сетеккские залы,Темный лабиринт,Старые предгорья Хилсбрада,Черные топи,Механар,Ботаника,Аркатрац,Терраса Магистров\n## X-DBM-Mod-SubCategories-esES: Murallas del Fuego Infernal,El Horno de Sangre,Las Salas Arrasadas,Recinto de los Esclavos,La Sotiénaga,La Cámara de Vapor,Criptas Auchenai,Tumbas de Maná,Salas Sethekk,Laberinto de las Sombras,Antiguas Laderas de Trabalomas,La Ciénaga Negra,El Mechanar,El Invernáculo,El Arcatraz,Bancal del Magister\n## X-DBM-Mod-SubCategories-koKR: 지옥불 성루,피의 용광로,으스러진 손의 전당,강제 노역소,지하수렁,증기 저장고,아키나이 납골당,마나 무덤,세데크 전당,어둠의 미궁,옛 힐스브래드 구릉지,검은늪,메카나르,신록의 정원,알카트라즈,마법학자의 정원\n## X-DBM-Mod-SubCategories-zhTW: 地獄火壁壘,血熔爐,破碎大廳,奴隸監獄,深幽泥沼,蒸汽洞窟,奧奇奈地穴,法力墓地,塞司克大廳,暗影迷宮,逃離敦霍爾德,開啟黑暗之門,麥克納爾,波塔尼卡,亞克崔茲,博學者殿堂\n## X-DBM-Mod-SubCategories-zhCN: 地狱火堡垒,鲜血熔炉,破碎大厅,奴隶围栏,幽暗沼泽,蒸汽地窖,奥金尼地穴,法力陵墓,赛泰克大厅,暗影迷宮,逃离敦霍尔德,开启黑暗之门,能源舰,生态船,禁魔监狱,博学者殿堂\n## X-DBM-Mod-SubCategories-frFR: Remparts des Flammes infernales,La Fournaise du sang,Les Salles brisées,Les enclos aux esclaves,Le Bourbier,Le Caveau de la vapeur,Les Cryptes Auchenaï,Tombe-mana,Les Salles des Sethekk,Labyrinthe des ombres,Contreforts de Hautebrande d’antan,Le Noir Marécage,Le Méchanar,La Botanica,L’Arcatraz,La Terrasse des Magistères\n## X-DBM-Mod-Name: Dungeons (BC)\n## X-DBM-Mod-Name-frFR: Donjons (BC)\n## X-DBM-Mod-Name-deDE: Gruppe (BC)\n## X-DBM-Mod-Name-ruRU: Групповые подземелья-BC\n## X-DBM-Mod-Name-esES: Mazmorras (TBC)\n## X-DBM-Mod-Name-koKR: 던전 (불성)\n## X-DBM-Mod-Name-zhTW: 隊伍首領 (燃燒的遠征)\n## X-DBM-Mod-Name-zhCN: 队伍首领 (燃烧的远征)\n## X-DBM-Mod-Sort: 1015\n## X-DBM-Mod-MapID: 723,798,733,726,727,728,711,724,729,732,725,730,731,735,799,734\n## X-DBM-Mod-LoadZone: Auchenai Crypts, Hellfire Ramparts, Mana-Tombs, The Blood Furnace, The Underbog, The Steamvault, The Shattered Halls, Sethekk Halls, The Slave Pens, The Arcatraz, Shadow Labyrinth, The Botanica, The Mechanar, Old Hillsbrad Foothills, Magisters' Terrace, The Black Morass\n## X-DBM-Mod-LoadZone-zhCN: 地狱火堡垒,鲜血熔炉,破碎大厅,奴隶围栏,幽暗沼泽,蒸汽地窖,奥金尼地穴,法力陵墓,赛泰克大厅,暗影迷宮,逃离敦霍尔德,开启黑暗之门,能源舰,生态船,禁魔监狱,博学者殿堂\n## X-DBM-Mod-LoadZone-ruRU: Аукенайские гробницы, Бастионы Адского Пламени, Гробницы Маны, Кузня Крови, Нижетопь, Паровое подземелье, Разрушенные залы, Сетеккские залы, Узилище, Аркатрац, Темный лабиринт, Ботаника, Механар, Старые предгорья Хилсбрада, Терраса Магистров, Черные топи\n## X-DBM-Mod-LoadZone-esES: Criptas Auchenai, Murallas del Fuego Infernal, Tumbas de Maná, El Horno de Sangre, La Sotiénaga, La Cámara de Vapor, Las Salas Arrasadas, Salas Sethekk, Recinto de los Esclavos, El Arcatraz, Laberinto de las Sombras, El Invernáculo, El Mechanar, Antiguas Laderas de Trabalomas, Bancal del Magister, La Ciénaga Negra\n## X-DBM-Mod-LoadZone-esMX: Criptas Auchenai, Murallas del Fuego Infernal, Tumbas de Maná, El Horno de Sangre, La Sotiénaga, La Cámara de Vapor, Las Salas Arrasadas, Salas Sethekk, Recinto de los Esclavos, El Arcatraz, Laberinto de las Sombras, El Invernáculo, El Mechanar, Antiguas Laderas de Trabalomas, Bancal del Magister, La Ciénaga Negra\n## X-DBM-Mod-LoadZone-zhTW: 奧奇奈地穴, 地獄火壁壘, 法力墓地, 血熔爐, 深幽泥沼, 蒸汽洞窟, 破碎大廳, 塞司克大廳, 奴隸監獄, 亞克崔茲, 暗影迷宮, 波塔尼卡, 麥克納爾, 逃離敦霍爾德, 博學者殿堂, 開啟黑暗之門\n## X-DBM-Mod-LoadZone-deDE: Auchenaikrypta, Höllenfeuerbollwerk, Managruft, Der Blutkessel, Der Tiefensumpf, Die Dampfkammer, Die zerschmetterten Hallen, Sethekkhallen, Die Sklavenunterkünfte, Die Arkatraz, Schattenlabyrinth, Die Botanika, Die Mechanar, Vorgebirge des Alten Hügellands, Terrasse der Magister, Der schwarze Morast\n## X-DBM-Mod-LoadZone-koKR: 아키나이 납골당, 지옥불 성루, 마나 무덤, 피의 용광로, 지하수렁, 증기 저장고, 으스러진 손의 전당, 세데크 전당, 강제 노역소, 알카트라즈, 어둠의 미궁, 신록의 정원, 메카나르, 옛 힐스브래드 구릉지, 마법학자의 정원, 검은늪\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.kr.lua\nlocalization.ru.lua\nlocalization.es.lua\nlocalization.tw.lua\nlocalization.fr.lua\n\nHellfire_Ramp\\Gargolmar.lua\nHellfire_Ramp\\Omor.lua\nHellfire_Ramp\\Vazruden.lua\n\nHellfire_BloodFurnace\\Maker.lua\nHellfire_BloodFurnace\\Broggok.lua\nHellfire_BloodFurnace\\Keli'dan.lua\n\nHellfire_ShatteredHalls\\Nethekurse.lua\nHellfire_ShatteredHalls\\Porung.lua\nHellfire_ShatteredHalls\\O'mrogg.lua\nHellfire_ShatteredHalls\\Kargath.lua\n\nCoil_Slavepens\\Mennu.lua\nCoil_Slavepens\\Rokmar.lua\nCoil_Slavepens\\Quagmirran.lua\n\nCoil_Underbog\\Hungarfen.lua\nCoil_Underbog\\Ghazan.lua\nCoil_Underbog\\Muselek.lua\nCoil_Underbog\\Stalker.lua\n\nCoil_Steamvault\\Thespia.lua\nCoil_Steamvault\\Steamrigger.lua\nCoil_Steamvault\\Kalithresh.lua\n\nAuct_Crypts\\Shirrak.lua\nAuct_Crypts\\Maladaar.lua\n\nAuct_Tombs\\AuctTombsTrash.lua\nAuct_Tombs\\Pandemonius.lua\nAuct_Tombs\\Tavarok.lua\nAuct_Tombs\\Shaffar.lua\nAuct_Tombs\\Yor.lua\n\nAuct_SethekkHalls\\Syth.lua\nAuct_SethekkHalls\\Anzu.lua\nAuct_SethekkHalls\\Ikiss.lua\n\nAuct_ShadowLabyrinth\\Hellmaw.lua\nAuct_ShadowLabyrinth\\Inciter.lua\nAuct_ShadowLabyrinth\\Vorpil.lua\nAuct_ShadowLabyrinth\\Murmur.lua\n\nCoT_OldHillsbrad\\Drake.lua\nCoT_OldHillsbrad\\Skarloc.lua\nCoT_OldHillsbrad\\EpochHunter.lua\n\nCoT_BlackMorass\\Deja.lua\nCoT_BlackMorass\\Temporus.lua\nCoT_BlackMorass\\Aeonus.lua\nCoT_BlackMorass\\PortalTimers.lua\n\nTK_Mechanar\\Gyrokill.lua\nTK_Mechanar\\Ironhand.lua\nTK_Mechanar\\Capacitus.lua\nTK_Mechanar\\Sepethrea.lua\nTK_Mechanar\\Pathaleon.lua\n\nTK_Botanica\\Sarannis.lua\nTK_Botanica\\Freywinn.lua\nTK_Botanica\\Thorngrin.lua\nTK_Botanica\\Laj.lua\nTK_Botanica\\WarpSplinter.lua\n\nTK_Arcatraz\\Zereketh.lua\nTK_Arcatraz\\Dalliah.lua\nTK_Arcatraz\\Soccothrates.lua\nTK_Arcatraz\\Skyriss.lua\n\nMagistersTerrace\\Selin.lua\nMagistersTerrace\\Vexallus.lua\nMagistersTerrace\\Delrissa.lua\nMagistersTerrace\\Kael'thas.lua\n"
  },
  {
    "path": "DBM-Party-BC/Hellfire_BloodFurnace/Broggok.lua",
    "content": "local mod\t= DBM:NewMod(556, \"DBM-Party-BC\", 2, 256)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17380)\nmod:SetEncounterID(1924)\n\nmod:SetModelID(19372)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n)\n"
  },
  {
    "path": "DBM-Party-BC/Hellfire_BloodFurnace/Keli'dan.lua",
    "content": "local mod\t= DBM:NewMod(557, \"DBM-Party-BC\", 2, 256)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17377)--17377 is boss, 17653 are channelers that just pull with him.\nmod:SetEncounterID(1923)\n\nmod:SetModelID(17153)\nmod:SetModelOffset(0, 0, -0.1)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n)\n"
  },
  {
    "path": "DBM-Party-BC/Hellfire_BloodFurnace/Maker.lua",
    "content": "local mod\t= DBM:NewMod(555, \"DBM-Party-BC\", 2, 256)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17381)\nmod:SetEncounterID(1922)\n\nmod:SetModelID(18369)\nmod:SetModelOffset(-4, 0, -0.4)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 30923\",\n\t\"SPELL_AURA_REMOVED 30923\"\n)\n\nlocal warnMindControl\t= mod:NewTargetAnnounce(30923, 4)\n\nlocal timerMindControl\t= mod:NewTargetTimer(10, 30923, nil, nil, nil, 3)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 30923 then\n\t\twarnMindControl:Show(args.destName)\n\t\ttimerMindControl:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 30923 then\n\t\ttimerMindControl:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Hellfire_Ramp/Gargolmar.lua",
    "content": "local mod\t= DBM:NewMod(527, \"DBM-Party-BC\", 1, 248)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17306)\nmod:SetEncounterID(1893)\n\nmod:SetModelID(18236)\nmod:SetModelOffset(-0.2, 0, -0.3)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n)\n"
  },
  {
    "path": "DBM-Party-BC/Hellfire_Ramp/Omor.lua",
    "content": "local mod\t= DBM:NewMod(528, \"DBM-Party-BC\", 1, 248)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17308)\nmod:SetEncounterID(1891)\n\nmod:SetModelID(18237)\nmod:SetModelOffset(-2, 0.8, -1)\nmod:SetUsedIcons(8)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 37566\",\n\t\"SPELL_AURA_REMOVED 37566\"\n)\n\nlocal warnBane\t\t= mod:NewTargetNoFilterAnnounce(37566)\n\nlocal specwarnBane\t= mod:NewSpecialWarningMoveAway(37566, nil, nil, nil, 1, 2)\nlocal yellBane\t\t= mod:NewYell(37566)\n\nlocal timerBane\t\t= mod:NewTargetTimer(15, 37566, nil, nil, nil, 3)\n\nmod:AddSetIconOption(\"SetIconOnBaneTarget\", 37566, true, false, {8})\nmod:AddRangeFrameOption(37566, 15)\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 37566 then\n\t\ttimerBane:Start(args.destName)\n\t\tif self.Options.SetIconOnBaneTarget then\n\t\t\tself:SetIcon(args.destName, 8, 15)\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tspecwarnBane:Show()\n\t\t\tspecwarnBane:Play(\"runout\")\n\t\t\tyellBane:Yell()\n\t\t\tif self.Options.RangeFrame then\n\t\t\t\tDBM.RangeCheck:Show(15)\n\t\t\tend\n\t\telse\n\t\t\twarnBane:Show(args.destName)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 37566 then\n\t\ttimerBane:Stop(args.destName)\n\t\tif self.Options.SetIconOnBaneTarget then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\t\tif args:IsPlayer() and self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Hide()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Hellfire_Ramp/Vazruden.lua",
    "content": "local mod\t= DBM:NewMod(529, \"DBM-Party-BC\", 1, 248)\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17537, 17307)\nmod:SetEncounterID(1892)\n\nmod:SetModelID(18407)\nmod:SetModelOffset(-0.2, 0, -0.3)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 30689\",\n\t\"SPELL_AURA_REMOVED 30689\"\n)\n\nlocal warnMark\t\t= mod:NewTargetNoFilterAnnounce(30689)\n\nlocal specwarnMark\t= mod:NewSpecialWarningYou(30689, nil, nil, nil, 1, 2)\nlocal yellMark\t\t= mod:NewYell(30689)\n\nlocal timerMark\t\t= mod:NewTargetTimer(6, 30689, nil, nil, nil, 3)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 30689 then\n\t\ttimerMark:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecwarnMark:Show()\n\t\t\tspecwarnMark:Play(\"targetyou\")\n\t\t\tyellMark:Yell()\n\t\telse\n\t\t\twarnMark:Show(args.destName)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 30689 then\n\t\ttimerMark:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Hellfire_ShatteredHalls/Kargath.lua",
    "content": "local mod\t= DBM:NewMod(569, \"DBM-Party-BC\", 3, 259)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(16808)\nmod:SetEncounterID(1938)\n\nmod:SetModelID(19799)\nmod:SetModelOffset(-0.4, 0.1, -0.4)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 30739 35429\"\n)\n\n--134170 Some Random Orc Icon. Could not find red fel orc icon. Only green orcs or brown orcs. Brown closer to red than green is.\nlocal warnHeathenGuard\t\t\t= mod:NewAnnounce(\"warnHeathen\", 2, \"Interface\\\\Icons\\\\Inv_Misc_Head_Orc_01\")\nlocal warnReaverGuard\t\t\t= mod:NewAnnounce(\"warnReaver\", 2, \"Interface\\\\Icons\\\\Inv_Misc_Head_Orc_01\")\nlocal warnSharpShooterGuard\t\t= mod:NewAnnounce(\"warnSharpShooter\", 2, \"Interface\\\\Icons\\\\Inv_Misc_Head_Orc_01\")\n\nlocal specWarnBladeDance\t\t= mod:NewSpecialWarningSpell(30739, nil, nil, nil, 2, 2)\nlocal specWarnSweepingStrikes\t= mod:NewSpecialWarningSpell(35429, nil, nil, nil, 1, 2)\n\nlocal timerHeathenCD\t\t\t= mod:NewTimer(21, \"timerHeathen\", \"Interface\\\\Icons\\\\Inv_Misc_Head_Orc_01\", nil, nil, 1)\nlocal timerReaverCD\t\t\t\t= mod:NewTimer(21, \"timerReaver\", \"Interface\\\\Icons\\\\Inv_Misc_Head_Orc_01\", nil, nil, 1)\nlocal timerSharpShooterCD\t\t= mod:NewTimer(21, \"timerSharpShooter\", \"Interface\\\\Icons\\\\Inv_Misc_Head_Orc_01\", nil, nil, 1)\nlocal timerBladeDanceCD\t\t\t= mod:NewCDTimer(31, 30739, nil, nil, nil, 2, nil, nil, true)\nlocal timerSweepingStrikesCD\t= mod:NewVarTimer(\"v22-24.5\", 35429, nil, nil, nil, 5, nil, nil, true)\n\nmod.vb.addSet = 0\nmod.vb.addType = 0\n\nlocal function Adds(self)\n\tself.vb.addSet = self.vb.addSet + 1\n\tself.vb.addType = self.vb.addType + 1\n\tif self.vb.addType == 1 then -- Heathen\n\t\twarnHeathenGuard:Show(self.vb.addSet..\"-\"..self.vb.addType)\n\t\ttimerReaverCD:Start()\n\telseif self.vb.addType == 2 then -- Reaver\n\t\twarnReaverGuard:Show(self.vb.addSet..\"-\"..self.vb.addType)\n\t\ttimerSharpShooterCD:Start()\n\telseif self.vb.addType == 3 then -- SharpShooter\n\t\twarnSharpShooterGuard:Show(self.vb.addSet..\"-\"..self.vb.addType)\n\t\ttimerHeathenCD:Start()\n\t\tself.vb.addType = 0\n\tend\n\tself:Schedule(21, Adds, self)\nend\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.addSet = 0\n\tself.vb.addType = 0\n\ttimerHeathenCD:Start(27.5-delay)\n\tself:Schedule(27.5, Adds, self) -- When reaches stairs, not when enters/spawns way down hallway.\n\ttimerBladeDanceCD:Start(29-delay)\n\ttimerSweepingStrikesCD:Start(11-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 30739 and self:AntiSpam(3, 1) then -- Blade Dance\n\t\tspecWarnBladeDance:Show()\n\t\ttimerBladeDanceCD:Start()\n\t\tspecWarnBladeDance:Play(\"aesoon\")\n\telseif args.spellId == 35429 then -- Sweeping Strikes\n\t\tspecWarnSweepingStrikes:Show()\n\t\ttimerSweepingStrikesCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Hellfire_ShatteredHalls/Nethekurse.lua",
    "content": "local mod\t= DBM:NewMod(566, \"DBM-Party-BC\", 3, 259)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(16807)\nmod:SetEncounterID(1936)\n\nmod:SetModelID(16628)\nmod:SetModelOffset(-1, 0.4, -0.4)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 30496\"\n)\n\n--TODO, maybe add a GTFO for 35951 (Void zone damage)\n--TODO, check target scanning when in a group. Solo testing cannot verify this\n--If target scanning works on fissure, special warning and yell\nlocal warnShadowFissure\t\t= mod:NewSpellAnnounce(30496, 3)\n\nlocal timerShadowFissureCD\t= mod:NewNextTimer(8.5, 30496, nil, nil, nil, 3)--8.5-8.8\n\nfunction mod:OnCombatStart(delay)\n\ttimerShadowFissureCD:Start(8.3-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 30496 then\n\t\twarnShadowFissure:Show()\n\t\ttimerShadowFissureCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/Hellfire_ShatteredHalls/O'mrogg.lua",
    "content": "local mod\t= DBM:NewMod(568, \"DBM-Party-BC\", 3, 259)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(16809)\nmod:SetEncounterID(1937)\n\nmod:SetModelID(18031)\nmod:SetModelOffset(0, 0, -0.1)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n)\n"
  },
  {
    "path": "DBM-Party-BC/Hellfire_ShatteredHalls/Porung.lua",
    "content": "local mod\t= DBM:NewMod(728, \"DBM-Party-BC\", 3, 259)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(20923)\nmod:SetEncounterID(1935)\n\nmod:SetModelID(17725)\nmod:SetModelOffset(0, 0, -0.1)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n)\n"
  },
  {
    "path": "DBM-Party-BC/MagistersTerrace/Delrissa.lua",
    "content": "local mod = DBM:NewMod(532, \"DBM-Party-BC\", 16, 249)\nlocal L = mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(24560)--24560 is main boss.\nmod:SetEncounterID(1895)\n\nmod:SetModelID(22596)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 17843 44256 46181\",\n\t\"SPELL_CAST_SUCCESS 27621 44178 46195\",\n\t\"SPELL_AURA_APPLIED 13323 44141 44175 44291 46193 44174 46192\"\n)\n\n--TODO, maybe more anti spam or tweaks and some timers?\n--TODO, GTFO for blizzard?\nlocal warnWindFury\t\t= mod:NewSpellAnnounce(27621, 2, nil, false)\nlocal warnBlizzard\t\t= mod:NewSpellAnnounce(46195, 2)\nlocal warnRenew\t\t\t= mod:NewTargetAnnounce(46192, 3, nil, false, 2)\nlocal warnSoC\t\t\t= mod:NewTargetAnnounce(44141, 2, nil, false, 2)\nlocal warnPolymorph\t\t= mod:NewTargetAnnounce(13323, 4)\n\nlocal specWarnFlashHeal\t= mod:NewSpecialWarningInterrupt(17843, \"HasInterrupt\", nil, 3, 1, 2)\nlocal specWarnLHW\t\t= mod:NewSpecialWarningInterrupt(46181, \"HasInterrupt\", nil, 3, 1, 2)\nlocal specWarnPWS\t\t= mod:NewSpecialWarningDispel(44175, \"MagicDispeller\", nil, 2, 1, 2)\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 17843 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\t\t-- Delrissa's Flash Heal\n\t\tspecWarnFlashHeal:Show(args.sourceName)\n\t\tspecWarnFlashHeal:Play(\"kickcast\")\n\telseif args:IsSpellID(44256, 46181) and self:CheckInterruptFilter(args.sourceGUID, false, true) then\t\t\t\t\t-- Apoko's LHW\n\t\tspecWarnLHW:Show(args.sourceName)\n\t\tspecWarnLHW:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 27621 and self:IsInCombat() then\t-- Apoko's Windfury Totem\n\t\twarnWindFury:Show()\n\telseif args:IsSpellID(44178, 46195) then\t-- Yazzai's Blizzard\n\t\twarnBlizzard:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 13323 then\t-- Yazzai's Polymorph\n\t\twarnPolymorph:Show(args.destName)\n\telseif spellId == 44141 then\t-- Ellrys SoC\n\t\twarnSoC:Show(args.destName)\n\telseif args:IsSpellID(44175, 44291, 46193) and not args:IsDestTypePlayer() then\t-- Delrissa's PWShield\n\t\tspecWarnPWS:Show(args.destName)\n\t\tspecWarnPWS:Play(\"dispelboss\")\n\telseif args:IsSpellID(44174, 46192) and not args:IsDestTypePlayer() then\t-- Delrissa's Renew\n\t\twarnRenew:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/MagistersTerrace/Kael'thas.lua",
    "content": "local mod = DBM:NewMod(533, \"DBM-Party-BC\", 16, 249)\nlocal L = mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(24664)\nmod:SetEncounterID(1894)\n\nmod:SetModelID(22906)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 36819\",\n\t\"SPELL_CAST_SUCCESS 44194 36819\",\n\t\"SPELL_AURA_APPLIED 46165\",\n\t\"SPELL_AURA_REMOVED 46165\",\n\t\"UNIT_SPELLCAST_SUCCEEDED\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal WarnShockBarrior\t\t= mod:NewSpellAnnounce(46165, 3)\nlocal WarnGravityLapse\t\t= mod:NewSpellAnnounce(44224, 2)\n\nlocal specwarnPyroblast\t\t= mod:NewSpecialWarningInterrupt(36819, \"HasInterrupt\", nil, 2, 1, 2)\nlocal specwarnPhoenix\t\t= mod:NewSpecialWarningSwitch(44194, \"-Healer\", nil, nil, 1, 2)\n\nlocal timerPyroblast\t\t= mod:NewCastTimer(4, 36819, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerShockBarrior\t\t= mod:NewNextTimer(60, 46165, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerPhoenix\t\t\t= mod:NewCDTimer(45, 44194, nil, nil, nil, 1)--45-70?\nlocal timerGravityLapse\t\t= mod:NewBuffActiveTimer(35, 44194, nil, nil, nil, 6)\nlocal timerGravityLapseCD\t= mod:NewNextTimer(13.5, 44194, nil, nil, nil, 6)\n\nmod.vb.interruptable = false\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.interruptable = false\n\tself:SetStage(1)\n\tif self:IsHeroic() then\n\t\ttimerShockBarrior:Start(-delay)\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 36819 then\n\t\tself.vb.interruptable = true\n\t\ttimerPyroblast:Start()\n\telseif spellId == 44224 then\n\t\tWarnGravityLapse:Show()\n\t\ttimerGravityLapse:Start()\n\t\ttimerGravityLapseCD:Schedule(35)--Show after current lapse has ended\n\t\tif self.vb.phase < 2 then\n\t\t\tself:SetStage(2)\n\t\t\ttimerShockBarrior:Stop()\n\t\t\ttimerPhoenix:Stop()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 44194 then\n\t\tspecwarnPhoenix:Show()\n\t\tspecwarnPhoenix:Play(\"killmob\")\n\t\ttimerPhoenix:Start()\n\telseif args.spellId == 36819 then\n\t\tself.vb.interruptable = false\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 46165 then\n\t\tWarnShockBarrior:Show(args.destName)\n\t\ttimerShockBarrior:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 46165 and self.vb.interruptable then\n\t\tspecwarnPyroblast:Show(args.destName)\n\t\tspecwarnPyroblast:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(47109) and self.vb.phase < 2 then--Power Feedback\n\t\tself:SetStage(2)\n\t\ttimerShockBarrior:Stop()\n\t\ttimerPhoenix:Stop()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.KaelP2 and self.vb.phase < 2 then\n\t\tself:SetStage(2)\n\t\ttimerShockBarrior:Stop()\n\t\ttimerPhoenix:Stop()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/MagistersTerrace/Selin.lua",
    "content": "local mod = DBM:NewMod(530, \"DBM-Party-BC\", 16, 249)\nlocal L = mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(24723)\nmod:SetEncounterID(1897)\n\nmod:SetModelID(22731)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 44320\"\n)\n\nlocal specWarnChannel\t\t= mod:NewSpecialWarning(\"warningFelCrystal\", \"-Healer\", nil, nil, 1, 2)\n\nlocal timerChannelCD\t\t= mod:NewTimer(47, \"timerFelCrystal\", 44320, nil, nil, 1)\n\nfunction mod:OnCombatStart(delay)\n\ttimerChannelCD:Start(15-delay)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 44320 then--Mana Rage, triggers right before CHAT_MSG_RAID_BOSS_EMOTE\n\t\tspecWarnChannel:Show()\n\t\tspecWarnChannel:Play(\"targetchange\")\n\t\ttimerChannelCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/MagistersTerrace/Vexallus.lua",
    "content": "local mod = DBM:NewMod(531, \"DBM-Party-BC\", 16, 249)\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(24744)\nmod:SetEncounterID(1898)\n\nmod:RegisterCombat(\"combat\")\nmod:SetModelID(22731)\nmod:RegisterEventsInCombat(\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\"\n)\n\nlocal specWarnEnergy\t= mod:NewSpecialWarning(\"warnEnergy\", \"-Healer\", nil, 3, 1, 2)\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE()\n\tif self:AntiSpam(5, 1) then\n\t\tspecWarnEnergy:Show()\n\t\tspecWarnEnergy:Play(\"killmob\")\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/TK_Arcatraz/Dalliah.lua",
    "content": "local mod = DBM:NewMod(549, \"DBM-Party-BC\", 15, 254)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(20885)\nmod:SetEncounterID(1913)\n\nmod:SetModelID(19888)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 39013 36144 36175 36142\",\n\t\"SPELL_AURA_APPLIED 39009 36173\",\n\t\"SPELL_AURA_REMOVED 39009 36173\"\n)\n\n--LOG THIS, needs whirlwind CD timer\nlocal warnGift\t\t\t= mod:NewTargetNoFilterAnnounce(39009, 3, nil, \"Healer\", 2)\n\nlocal specwarnWhirlwind\t= mod:NewSpecialWarningRun(36175, \"Melee\", nil, nil, 4, 6)\nlocal specwarnHeal\t\t= mod:NewSpecialWarningInterrupt(39013, \"HasInterrupt\", nil, 2, 1, 2)\n\nlocal timerGift\t\t\t= mod:NewTargetTimer(10, 39009, nil, \"Healer\", 4, 5, nil, DBM_COMMON_L.HEALER_ICON)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(39013, 36144) and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecwarnHeal:Show(args.sourceName)\n\t\tspecwarnHeal:Play(\"kickcast\")\n\telseif args:IsSpellID(36175, 36142) then\n\t\tspecwarnWhirlwind:Show()\n\t\tspecwarnWhirlwind:Play(\"whirlwind\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(39009, 36173) then\n\t\twarnGift:Show(args.destName)\n\t\ttimerGift:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(39009, 36173) then\n\t\ttimerGift:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/TK_Arcatraz/Skyriss.lua",
    "content": "local mod = DBM:NewMod(551, \"DBM-Party-BC\", 15, 254)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(20912)\nmod:SetEncounterID(1914)\n\nmod:SetModelID(19943)\nmod:SetModelScale(0.4)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"SPELL_AURA_APPLIED 39019 37162 36924 36929 39017 39021\",\n\t\"SPELL_AURA_REMOVED 39019 37162 36924 36929 39017 39021\",\n\t\"UNIT_HEALTH\"\n)\n\nlocal warnSplitSoon\t\t= mod:NewAnnounce(\"warnSplitSoon\", 2)\nlocal warnSplit\t\t\t= mod:NewAnnounce(\"warnSplit\", 3)\nlocal warnMindControl\t= mod:NewTargetNoFilterAnnounce(39019, 4)\nlocal warnMindRend\t\t= mod:NewTargetNoFilterAnnounce(39017, 2)\n\nlocal timerMindControl\t= mod:NewTargetTimer(6, 39019, nil, nil, nil, 3)\nlocal timerMindRend\t\t= mod:NewTargetTimer(6, 39017, nil, false, 2, 3)\n\nmod.vb.warnedSplit1\t\t= false\nmod.vb.warnedSplit2\t\t= false\n\nfunction mod:OnCombatStart()\n\tself.vb.warnedSplit1 = false\n\tself.vb.warnedSplit2 = false\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(39019, 37162) then\n\t\twarnMindControl:Show(args.destName)\n\t\ttimerMindControl:Start(args.destName)\n\telseif args:IsSpellID(36924, 36929, 39017, 39021) then\n\t\twarnMindRend:Show(args.destName)\n\t\ttimerMindRend:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(39019, 37162) then\n\t\ttimerMindControl:Stop(args.destName)\n\telseif args:IsSpellID(36924, 36929, 39017, 39021) then\n\t\ttimerMindRend:Stop(args.destName)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.Split then\n\t\twarnSplit:Show()\n\tend\nend\n\ndo\n\tlocal UnitHealth, UnitHealthMax = UnitHealth, UnitHealthMax\n\n\tfunction mod:UNIT_HEALTH(uId)\n\t\tif not self.vb.warnedSplit1 and self:GetUnitCreatureId(uId) == 20912 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.70 then\n\t\t\tself.vb.warnedSplit1 = true\n\t\t\twarnSplitSoon:Show()\n\t\telseif not self.vb.warnedSplit2 and self:IsHeroic() and self:GetUnitCreatureId(uId) == 20912 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.37 then\n\t\t\tself.vb.warnedSplit2 = true\n\t\t\twarnSplitSoon:Show()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/TK_Arcatraz/Soccothrates.lua",
    "content": "local mod = DBM:NewMod(550, \"DBM-Party-BC\", 15, 254)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(20886)\nmod:SetEncounterID(1915)\n\nmod:SetModelID(19977)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 36512\",\n\t\"SPELL_AURA_APPLIED 35759 39006\"\n)\n\nlocal warnKnockaway\t\t\t= mod:NewSpellAnnounce(36512, 2, nil, nil, nil, nil, nil, 2)\n\nlocal specwarnFelFireShock\t= mod:NewSpecialWarningDispel(35759, \"Healer\", nil, nil, 1, 2)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 36512 then\n\t\twarnKnockaway:Show()\n\t\twarnKnockaway:Play(\"carefly\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(35759, 39006) and self:CheckDispelFilter(\"magic\") then\n\t\tspecwarnFelFireShock:Show(args.destName)\n\t\tspecwarnFelFireShock:Play(\"dispelnow\")\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/TK_Arcatraz/Zereketh.lua",
    "content": "local mod = DBM:NewMod(548, \"DBM-Party-BC\", 15, 254)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(20870)\nmod:SetEncounterID(1916)\n\nmod:SetModelID(19882)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 36127 39005\",\n\t\"SPELL_CAST_SUCCESS 36119 30533\",\n\t\"SPELL_AURA_APPLIED 39367 32863\",\n\t\"SPELL_AURA_REMOVED 39367 32863\"\n)\n\nlocal warnVoid\t\t= mod:NewSpellAnnounce(36119, 3)\n\nlocal specwarnNova\t= mod:NewSpecialWarningSpell(39005, nil, nil, nil, 2, 2)\nlocal specwarnSoC\t= mod:NewSpecialWarningDispel(39367, \"Healer\", nil, nil, 1, 2)\nlocal specWarnGTFO\t= mod:NewSpecialWarningGTFO(36121, nil, nil, nil, 1, 8)\n\nlocal timerSoC\t\t= mod:NewTargetTimer(18, 39367, nil, \"Healer\", 2, 3, nil, DBM_COMMON_L.MAGIC_ICON)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(36127, 39005) then\n\t\tspecwarnNova:Show()\n\t\tspecwarnNova:Play(\"aesoon\")\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(36119, 30533) then\n\t\twarnVoid:Show()\n\tend\nend\n\ndo\n\tlocal player = UnitGUID(\"player\")\n\n\tfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, spellId, spellName)\n\t\tif (spellId == 36121 or spellId == 39004) and destGUID == player and self:AntiSpam(4, 1) then--Flame Crash\n\t\t\tspecWarnGTFO:Show(spellName)\n\t\t\tspecWarnGTFO:Play(\"watchfeet\")\n\t\tend\n\tend\n\tmod.SPELL_MISSED = mod.SPELL_DAMAGE\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(39367, 32863) then\n\t\tif self:CheckDispelFilter(\"magic\") then\n\t\t\tspecwarnSoC:Show(args.destName)\n\t\t\tspecwarnSoC:Play(\"dispelnow\")\n\t\tend\n\t\ttimerSoC:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(39367, 32863) then\n\t\ttimerSoC:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/TK_Botanica/Freywinn.lua",
    "content": "local mod = DBM:NewMod(559, \"DBM-Party-BC\", 14, 257)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17975)\nmod:SetEncounterID(1926)\n\nmod:SetModelID(19045)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 34557\",\n\t\"SPELL_AURA_APPLIED 34752\"\n)\n\nlocal specWarnFreezingTouch\t= mod:NewSpecialWarningDispel(34752, \"MagicDispeller\", nil, nil, 1, 2)\nlocal specWarnAdds\t\t\t= mod:NewSpecialWarningAdds(34557, \"-Healer\", nil, nil, 1, 2)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 34557 then --Summon Frayer Protector\n\t\tspecWarnAdds:Show()\n\t\tspecWarnAdds:Play(\"killmob\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 34752 then\n\t\tspecWarnFreezingTouch:Show(args.destName)\n\t\tspecWarnFreezingTouch:Play(\"dispelboss\")\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/TK_Botanica/Laj.lua",
    "content": "local mod = DBM:NewMod(561, \"DBM-Party-BC\", 14, 257)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17980)\nmod:SetEncounterID(1927)\n\nmod:SetModelID(13109)\nmod:SetModelScale(0.8)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 34697\",\n\t\"SPELL_AURA_REMOVED 34697\"\n)\n\nlocal warnAllergic\t\t= mod:NewTargetNoFilterAnnounce(34697, 2)\n\nlocal timerAllergic\t\t= mod:NewTargetTimer(18, 34697, nil, nil, nil, 3)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 34697 then\n\t\twarnAllergic:Show(args.destName)\n\t\ttimerAllergic:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 34697 then\n\t\ttimerAllergic:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/TK_Botanica/Sarannis.lua",
    "content": "local mod = DBM:NewMod(558, \"DBM-Party-BC\", 14, 257)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17976)\nmod:SetEncounterID(1925)\n\nmod:SetModelID(18929)\nmod:RegisterCombat(\"combat\")\n\nlocal warnReinforcementsNow\t\t= mod:NewSpellAnnounce(34803, 1)\nlocal warnReinforcementsSoon\t= mod:NewSoonAnnounce(34803, 3)\n\nlocal timerReinforcements\t\t= mod:NewCDTimer(60, 34803, nil, nil, nil, 2)\n\nfunction mod:OnCombatStart(delay)\n\tif self:IsNormal() then\n\t\tself:RegisterShortTermEvents(\"UNIT_HEALTH\")\n\telse\n\t\tself:RegisterShortTermEvents(\"UNIT_SPELLCAST_SUCCEEDED\")\n\t\ttimerReinforcements:Start(60 - delay)\n\t\twarnReinforcementsSoon:Schedule(55 - delay)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tself:UnregisterShortTermEvents()\nend\n\ndo\n\tlocal UnitHealth, UnitHealthMax = UnitHealth, UnitHealthMax\n\n\tfunction mod:UNIT_HEALTH(uId)\n\t\tif self:GetUnitCreatureId(uId) == 17976 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.60 then\n\t\t\twarnReinforcementsSoon:Show()\n\t\t\tself:UnregisterShortTermEvents()\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(34803) and self:AntiSpam(3, 1) then\n\t\ttimerReinforcements:Start(60 )\n\t\twarnReinforcementsSoon:Schedule(55)\n\t\twarnReinforcementsNow:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/TK_Botanica/Thorngrin.lua",
    "content": "local mod = DBM:NewMod(560, \"DBM-Party-BC\", 14, 257)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17978)\nmod:SetEncounterID(1928)\n\nmod:SetModelID(14416)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 34661 34670\",\n\t\"SPELL_AURA_REMOVED 34661 34670\"\n)\n\nlocal warnSacrifice\t\t= mod:NewTargetNoFilterAnnounce(34661, 2)\nlocal warnEnrage\t\t= mod:NewSpellAnnounce(34670, 2, nil, \"Healer|Tank\")\n\nlocal specWarnGTFO\t= mod:NewSpecialWarningGTFO(34660, nil, nil, nil, 1, 8)\n\nlocal timerSacrifice\t= mod:NewTargetTimer(8, 34661, nil, nil, nil, 3)\nlocal timerFrenzy\t\t= mod:NewBuffActiveTimer(10, 34670, nil, \"Healer|Tank\")\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 34661 then\n\t\twarnSacrifice:Show(args.destName)\n\t\ttimerSacrifice:Start(args.destName)\n\telseif args.spellId == 34670 then\n\t\twarnEnrage:Show(args.destName)\n\t\ttimerFrenzy:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 34661 then\n\t\ttimerSacrifice:Stop(args.destName)\n\telseif args.spellId == 34670 then\n\t\ttimerFrenzy:Stop(args.destName)\n\tend\nend\n\ndo\n\tlocal player = UnitGUID(\"player\")\n\n\tfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, spellId, spellName)\n\t\tif spellId == 34660 and destGUID == player and self:AntiSpam(4, 1) then--Hellfire\n\t\t\tspecWarnGTFO:Show(spellName)\n\t\t\tspecWarnGTFO:Play(\"watchfeet\")\n\t\tend\n\tend\n\tmod.SPELL_MISSED = mod.SPELL_DAMAGE\nend\n"
  },
  {
    "path": "DBM-Party-BC/TK_Botanica/WarpSplinter.lua",
    "content": "local mod = DBM:NewMod(562, \"DBM-Party-BC\", 14, 257)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(17977)\nmod:SetEncounterID(1929)\n\nmod:SetModelID(19438)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 34716\",\n\t\"SPELL_SUMMON 34727\"\n)\n\nlocal warnTreants\t= mod:NewSpellAnnounce(34727, 3)\nlocal warnStomp\t\t= mod:NewSpellAnnounce(34716, 4)\n\nlocal timerTreants\t= mod:NewNextTimer(45, 34727, nil, nil, nil, 1)\nlocal timerStomp\t= mod:NewBuffActiveTimer(5, 34716, nil, nil, nil, 3)\n\nfunction mod:OnCombatStart(delay)\n\ttimerTreants:Start(15-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 34716 then\n\t\twarnStomp:Show()\n\t\ttimerStomp:Start()\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 34727 then\n\t\twarnTreants:Show()\n\t\ttimerTreants:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/TK_Mechanar/Capacitus.lua",
    "content": "local mod = DBM:NewMod(563, \"DBM-Party-BC\", 13, 258)\nlocal L = mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(19219)\nmod:SetEncounterID(1932)\n\nmod:SetModelID(19162)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 35158 35159\",\n\t\"SPELL_CAST_START 39096\"\n)\n\nlocal warnPolarity\t\t\t= mod:NewCastAnnounce(39096, 4)\nlocal warnMagicShield\t\t= mod:NewSpellAnnounce(35158, 3)\nlocal warnDamageShield\t\t= mod:NewSpellAnnounce(35159, 3)\n\nlocal timerMagicShield\t\t= mod:NewBuffActiveTimer(10, 35158, nil, nil, nil, 5)\nlocal timerDamageShield\t\t= mod:NewBuffActiveTimer(10, 35159, nil, nil, nil, 5)\n\nlocal enrageTimer\t\t\t= mod:NewBerserkTimer(180)\n\nfunction mod:OnCombatStart(delay)\n\tif self:IsHeroic() then\n\t\tenrageTimer:Start(-delay)\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 39096 then\t\t--Robo Thaddius AMG!\n\t\twarnPolarity:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 35158 then\t\t--Magic Shield\n\t\twarnMagicShield:Show(args.destName)\n\t\ttimerMagicShield:Start()\n\telseif args.spellId == 35159 then\t--Damage Shield\n\t\twarnDamageShield:Show(args.destName)\n\t\ttimerDamageShield:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/TK_Mechanar/Gyrokill.lua",
    "content": "local mod\t= DBM:NewMod(\"Gyrokill\", \"DBM-Party-BC\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(19218)\nmod:SetEncounterID(1933)\n\n--mod:SetModelID(??)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 39193 35322\",\n\t\"SPELL_AURA_REMOVED 39193 35322\"\n)\n\nlocal warnShadowpower\t\t= mod:NewTargetNoFilterAnnounce(35322, 3)\n\nlocal specWarnShadowpower\t= mod:NewSpecialWarningDispel(35322, \"MagicDispeller\", nil, nil, 1, 2)\n\nlocal timerShadowpower\t\t= mod:NewBuffActiveTimer(15, 35322, nil, \"Tank|MagicDispeller\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(39193, 35322) and not args:IsDestTypePlayer() then\t--Shadow Power\n\t\ttimerShadowpower:Start(args.destName)\n\t\tif self.Options.SpecWarn35322dispel then\n\t\t\tspecWarnShadowpower:Show(args.destName)\n\t\t\tspecWarnShadowpower:Play(\"dispelboss\")\n\t\telse\n\t\t\twarnShadowpower:Show(args.destName)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(39193, 35322) and not args:IsDestTypePlayer() then\t--Shadow Power\n\t\ttimerShadowpower:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/TK_Mechanar/Ironhand.lua",
    "content": "local mod\t= DBM:NewMod(\"Ironhand\", \"DBM-Party-BC\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(19710)\nmod:SetEncounterID(1934)\n\nmod:SetModelID(21191)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 39193 35322\",\n\t\"SPELL_AURA_REMOVED 39193 35322\",\n\t\"SPELL_CAST_SUCCESS 39194 35327\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\"\n)\n\nlocal warnShadowpower\t\t= mod:NewTargetNoFilterAnnounce(35322, 3)\nlocal WarnJackHammer\t\t= mod:NewSpellAnnounce(39194, 4)\n\nlocal specWarnJackHammer\t= mod:NewSpecialWarningRun(39194, \"Melee\", nil, nil, 4, 2)\nlocal specWarnShadowpower\t= mod:NewSpecialWarningDispel(35322, \"MagicDispeller\", nil, nil, 1, 2)\n\nlocal timerShadowpower\t\t= mod:NewBuffActiveTimer(15, 35322, nil, \"Tank|MagicDispeller\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerJackhammer\t\t= mod:NewBuffActiveTimer(8, 39194, nil, nil, nil, 2)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(39193, 35322) and not args:IsDestTypePlayer() then\t--Shadow Power\n\t\ttimerShadowpower:Start(args.destName)\n\t\tif self.Options.SpecWarn35322dispel then\n\t\t\tspecWarnShadowpower:Show(args.destName)\n\t\t\tspecWarnShadowpower:Play(\"dispelboss\")\n\t\telse\n\t\t\twarnShadowpower:Show(args.destName)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(39193, 35322) and not args:IsDestTypePlayer() then\t--Shadow Power\n\t\ttimerShadowpower:Stop(args.destName)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(39194, 35327) then\t--Jackhammer\n\t\ttimerJackhammer:Start()\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)\n\tif msg == L.JackHammer then\n\t\tif self.Options.SpecWarn39194run then\n\t\t\tspecWarnJackHammer:Show()\n\t\t\tspecWarnJackHammer:Play(\"justrun\")\n\t\telse\n\t\t\tWarnJackHammer:Show()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/TK_Mechanar/Pathaleon.lua",
    "content": "local mod = DBM:NewMod(565, \"DBM-Party-BC\", 13, 258)\nlocal L = mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(19220)\nmod:SetEncounterID(1931)\n\nmod:SetModelID(20033)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 35280\",\n\t\"SPELL_AURA_REMOVED 35280\"\n)\n\nlocal warnMC\t= mod:NewTargetNoFilterAnnounce(35280, 3)\n\nlocal timerMC\t= mod:NewTargetTimer(10, 35280, nil, nil, nil, 3)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 35280 then\n\t\twarnMC:Show(args.destName)\n\t\ttimerMC:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 35280 then\n\t\ttimerMC:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-BC/TK_Mechanar/Sepethrea.lua",
    "content": "local mod = DBM:NewMod(564, \"DBM-Party-BC\", 13, 258)\nlocal L = mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(19221)\nmod:SetEncounterID(1930)\n\nmod:SetModelID(19166)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n)\n"
  },
  {
    "path": "DBM-Party-BC/localization.cn.lua",
    "content": "if GetLocale() ~= \"zhCN\" then return end\nlocal L\n\n-------------------------\n--  Hellfire Ramparts  --\n-----------------------------\n--  Watchkeeper Gargolmar  --\n-----------------------------\n-- L = DBM:GetModLocalization(527)\n\n--------------------------\n--  Omor the Unscarred  --\n--------------------------\n-- L = DBM:GetModLocalization(528)\n\n------------------------\n--  Nazan & Vazruden  --\n------------------------\n-- L = DBM:GetModLocalization(529)\n\n-------------------------\n--  The Blood Furnace  --\n-------------------------\n--  The Maker  --\n-----------------\n-- L = DBM:GetModLocalization(555)\n\n---------------\n--  Broggok  --\n---------------\n-- L = DBM:GetModLocalization(556)\n\n----------------------------\n--  Keli'dan the Breaker  --\n----------------------------\n-- L = DBM:GetModLocalization(557)\n\n---------------------------\n--  The Shattered Halls  --\n--------------------------------\n--  Grand Warlock Nethekurse  --\n--------------------------------\n-- L = DBM:GetModLocalization(566)\n\n--------------------------\n--  Blood Guard Porung  --\n--------------------------\n-- L = DBM:GetModLocalization(728)\n\n--------------------------\n--  Warbringer O'mrogg  --\n--------------------------\n-- L = DBM:GetModLocalization(568)\n\n----------------------------------\n--  Warchief Kargath Bladefist  --\n----------------------------------\n-- L = DBM:GetModLocalization(569)\n\n------------------\n--  Slave Pens  --\n--------------------------\n--  Mennu the Betrayer  --\n--------------------------\n-- L = DBM:GetModLocalization(570)\n\n---------------------------\n--  Rokmar the Crackler  --\n---------------------------\n-- L = DBM:GetModLocalization(571)\n\n------------------\n--  Quagmirran  --\n------------------\n-- L = DBM:GetModLocalization(572)\n\n--------------------\n--  The Underbog  --\n--------------------\n--  Hungarfen  --\n-----------------\n-- L = DBM:GetModLocalization(576)\n\n---------------\n--  Ghaz'an  --\n---------------\n-- L = DBM:GetModLocalization(577)\n\n--------------------------\n--  Swamplord Musel'ek  --\n--------------------------\n-- L = DBM:GetModLocalization(578)\n\n-------------------------\n--  The Black Stalker  --\n-------------------------\n-- L = DBM:GetModLocalization(579)\n\n----------------------\n--  The Steamvault  --\n---------------------------\n--  Hydromancer Thespia  --\n---------------------------\n-- L = DBM:GetModLocalization(573)\n\n-----------------------------\n--  Mekgineer Steamrigger  --\n-----------------------------\nL = DBM:GetModLocalization(574)\n\nL:SetMiscLocalization({\n\tMechs\t= \"好好的修理它们，孩子们!\"\n})\n\n--------------------------\n--  Warlord Kalithresh  --\n--------------------------\n-- L = DBM:GetModLocalization(575)\n\n-----------------------\n--  Auchenai Crypts  --\n--------------------------------\n--  Shirrak the Dead Watcher  --\n--------------------------------\n-- L = DBM:GetModLocalization(523)\n\n-----------------------\n--  Exarch Maladaar  --\n-----------------------\n-- L = DBM:GetModLocalization(524)\n\n------------------\n--  Mana-Tombs  --\n-------------------\n--  Pandemonius  --\n-------------------\n-- L = DBM:GetModLocalization(534)\n\n---------------\n--  Tavarok  --\n---------------\n-- L = DBM:GetModLocalization(535)\n\n----------------------------\n--  Nexus-Prince Shaffar  --\n----------------------------\n-- L = DBM:GetModLocalization(537)\n\n-----------\n--  Yor  --\n-----------\n-- L = DBM:GetModLocalization(536)\n\n---------------------\n--  Sethekk Halls  --\n-----------------------\n--  Darkweaver Syth  --\n-----------------------\n-- L = DBM:GetModLocalization(541)\n\n------------\n--  Anzu  --\n------------\nL = DBM:GetModLocalization(542)\n\nL:SetWarningLocalization({\n\twarnStoned\t= \"%s returned to stone\"\n})\n\nL:SetOptionLocalization({\n\twarnStoned\t= \"Show warning for spirits returning to stone\"\n})\n\nL:SetMiscLocalization({\n\tBirdStone\t= \"%s returns to stone.\"\n})\n\n------------------------\n--  Talon King Ikiss  --\n------------------------\n-- L = DBM:GetModLocalization(543)\n\n------------------------\n--  Shadow Labyrinth  --\n--------------------------\n--  Ambassador Hellmaw  --\n--------------------------\n-- L = DBM:GetModLocalization(544)\n\n------------------------------\n--  Blackheart the Inciter  --\n------------------------------\n-- L = DBM:GetModLocalization(545)\n\n--------------------------\n--  Grandmaster Vorpil  --\n--------------------------\n-- L = DBM:GetModLocalization(546)\n\n--------------\n--  Murmur  --\n--------------\n-- L = DBM:GetModLocalization(547)\n\n-------------------------------\n--  Old Hillsbrad Foothills  --\n-------------------------------\n--  Lieutenant Drake  --\n------------------------\n-- L = DBM:GetModLocalization(538)\n\n-----------------------\n--  Captain Skarloc  --\n-----------------------\n-- L = DBM:GetModLocalization(539)\n\n--------------------\n--  Epoch Hunter  --\n--------------------\n-- L = DBM:GetModLocalization(540)\n\n------------------------\n--  The Black Morass  --\n------------------------\n--  Chrono Lord Deja  --\n------------------------\n-- L = DBM:GetModLocalization(552)\n\n----------------\n--  Temporus  --\n----------------\n-- L = DBM:GetModLocalization(553)\n\n--------------\n--  Aeonus  --\n--------------\nL = DBM:GetModLocalization(554)\n\nL:SetMiscLocalization({\n\tAeonusFrenzy\t= \"%s被激怒了!\"\n})\n\n---------------------\n--  Portal Timers  --\n---------------------\nL = DBM:GetModLocalization(\"PT\")\n\nL:SetGeneralLocalization({\n\tname = \"时间裂隙(時光洞穴)\"\n})\n\nL:SetWarningLocalization({\n\tWarnWavePortalSoon\t= \"新的时间裂隙即将到来\",\n\tWarnWavePortal\t\t= \"第%d个时间裂隙\",\n\tWarnBossPortal\t\t= \"首领到来\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextPortal\t\t= \"第%d个时间裂隙\"\n})\n\nL:SetOptionLocalization({\n\tWarnWavePortalSoon\t= \"为新的时间裂隙显示预先警告\",\n\tWarnWavePortal\t\t= \"为新的时间裂隙显示警告\",\n\tWarnBossPortal\t\t= \"为首领到来显示警告\",\n\tTimerNextPortal\t\t= \"为下一次时间裂隙显示计时器(击败首领后)\",\n\tShowAllPortalTimers\t= \"为所有时间裂隙显示计时器(不准确)\"\n})\n\nL:SetMiscLocalization({\n\tPortalCheck\t\t\t= \"时间裂隙开启:(%d+)/18\",\n\tShielddown\t\t\t= \"这个该死的躯体既虛弱又平凡!\"\n})\n\n--------------------\n--  The Mechanar  --\n-----------------------------\n--  Gatewatcher Gyro-Kill  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gyrokill\")--Not in EJ\n\nL:SetGeneralLocalization({\n\tname = \"看守者盖罗基尔\"\n})\n\n-----------------------------\n--  Gatewatcher Iron-Hand  --\n-----------------------------\nL = DBM:GetModLocalization(\"Ironhand\")--Not in EJ\n\nL:SetGeneralLocalization({\n\tname = \"看守者铁手\"\n})\n\nL:SetMiscLocalization({\n\tJackHammer\t= \"%s威吓地举起他的锤子...\"\n})\n\n------------------------------\n--  Mechano-Lord Capacitus  --\n------------------------------\n-- L = DBM:GetModLocalization(563)\n\n------------------------------\n--  Nethermancer Sepethrea  --\n------------------------------\n-- L = DBM:GetModLocalization(564)\n\n--------------------------------\n--  Pathaleon the Calculator  --\n--------------------------------\n-- L = DBM:GetModLocalization(565)\n\n--------------------\n--  The Botanica  --\n--------------------------\n--  Commander Sarannis  --\n--------------------------\n-- L = DBM:GetModLocalization(558)\n\n------------------------------\n--  High Botanist Freywinn  --\n------------------------------\n-- L = DBM:GetModLocalization(559)\n\n-----------------------------\n--  Thorngrin the Tender  --\n-----------------------------\n-- L = DBM:GetModLocalization(560)\n\n-----------\n--  Laj  --\n-----------\n-- L = DBM:GetModLocalization(561)\n\n---------------------\n--  Warp Splinter  --\n---------------------\n-- L = DBM:GetModLocalization(562)\n\n--------------------\n--  The Arcatraz  --\n----------------------------\n--  Zereketh the Unbound  --\n----------------------------\n-- L = DBM:GetModLocalization(548)\n\n-----------------------------\n--  Dalliah the Doomsayer  --\n-----------------------------\n-- L = DBM:GetModLocalization(549)\n\n---------------------------------\n--  Wrath-Scryer Soccothrates  --\n---------------------------------\n-- L = DBM:GetModLocalization(550)\n\n-------------------------\n--  Harbinger Skyriss  --\n-------------------------\nL = DBM:GetModLocalization(551)\n\nL:SetMiscLocalization({\n\tSplit\t= \"我们跨越宇宙之间，被我们摧毁的世界像星星一样数不尽!\"\n})\n\n--------------------------\n--  Magisters' Terrace  --\n--------------------------\n--  Selin Fireheart  --\n-----------------------\n-- L = DBM:GetModLocalization(530)\n\n----------------\n--  Vexallus  --\n----------------\n-- L = DBM:GetModLocalization(531)\n\n--------------------------\n--  Priestess Delrissa  --\n--------------------------\nL = DBM:GetModLocalization(532)\n\nL:SetMiscLocalization({\n--\tDelrissaPull\t= \"Annihilate them.\",\n\tDelrissaEnd\t\t= \"跟我计划的...不一样。\"\n})\n\n------------------------------------\n--  Kael'thas Sunstrider (Party)  --\n------------------------------------\nL = DBM:GetModLocalization(533)\n\nL:SetMiscLocalization({\n\tKaelP2\t= \"我要让你们的世界彻底颠覆。\"\n})\n"
  },
  {
    "path": "DBM-Party-BC/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n-------------------------\n--  Hellfire Ramparts  --\n-----------------------------\n--  Watchkeeper Gargolmar  --\n-----------------------------\n-- L = DBM:GetModLocalization(527)\n\n--------------------------\n--  Omor the Unscarred  --\n--------------------------\n-- L = DBM:GetModLocalization(528)\n\n------------------------\n--  Nazan & Vazruden  --\n------------------------\n-- L = DBM:GetModLocalization(529)\n\n-------------------------\n--  The Blood Furnace  --\n-------------------------\n--  The Maker  --\n-----------------\n-- L = DBM:GetModLocalization(555)\n\n---------------\n--  Broggok  --\n---------------\n-- L = DBM:GetModLocalization(556)\n\n----------------------------\n--  Keli'dan the Breaker  --\n----------------------------\n-- L = DBM:GetModLocalization(557)\n\n---------------------------\n--  The Shattered Halls  --\n--------------------------------\n--  Grand Warlock Nethekurse  --\n--------------------------------\n-- L = DBM:GetModLocalization(566)\n\n--------------------------\n--  Blood Guard Porung  --\n--------------------------\n-- L = DBM:GetModLocalization(728)\n\n--------------------------\n--  Warbringer O'mrogg  --\n--------------------------\n-- L = DBM:GetModLocalization(568)\n\n----------------------------------\n--  Warchief Kargath Bladefist  --\n----------------------------------\n-- L = DBM:GetModLocalization(569)\n\n------------------\n--  Slave Pens  --\n--------------------------\n--  Mennu the Betrayer  --\n--------------------------\n-- L = DBM:GetModLocalization(570)\n\n---------------------------\n--  Rokmar the Crackler  --\n---------------------------\n-- L = DBM:GetModLocalization(571)\n\n------------------\n--  Quagmirran  --\n------------------\n-- L = DBM:GetModLocalization(572)\n\n--------------------\n--  The Underbog  --\n--------------------\n--  Hungarfen  --\n-----------------\n-- L = DBM:GetModLocalization(576)\n\n---------------\n--  Ghaz'an  --\n---------------\n-- L = DBM:GetModLocalization(577)\n\n--------------------------\n--  Swamplord Musel'ek  --\n--------------------------\n-- L = DBM:GetModLocalization(578)\n\n-------------------------\n--  The Black Stalker  --\n-------------------------\n-- L = DBM:GetModLocalization(579)\n\n----------------------\n--  The Steamvault  --\n---------------------------\n--  Hydromancer Thespia  --\n---------------------------\n-- L = DBM:GetModLocalization(573)\n\n-----------------------------\n--  Mekgineer Steamrigger  --\n-----------------------------\nL = DBM:GetModLocalization(574)\n\nL:SetMiscLocalization({\n\tMechs\t= \"Legt sie tiefer, Jungs!\"\n})\n\n--------------------------\n--  Warlord Kalithresh  --\n--------------------------\n-- L = DBM:GetModLocalization(575)\n\n-----------------------\n--  Auchenai Crypts  --\n--------------------------------\n--  Shirrak the Dead Watcher  --\n--------------------------------\n-- L = DBM:GetModLocalization(523)\n\n-----------------------\n--  Exarch Maladaar  --\n-----------------------\n-- L = DBM:GetModLocalization(524)\n\n------------------\n--  Mana-Tombs  --\n-------------------\n--  Pandemonius  --\n-------------------\n-- L = DBM:GetModLocalization(534)\n\n---------------\n--  Tavarok  --\n---------------\n-- L = DBM:GetModLocalization(535)\n\n----------------------------\n--  Nexus-Prince Shaffar  --\n----------------------------\n-- L = DBM:GetModLocalization(537)\n\n-----------\n--  Yor  --\n-----------\n-- L = DBM:GetModLocalization(536)\n\n---------------------\n--  Sethekk Halls  --\n-----------------------\n--  Darkweaver Syth  --\n-----------------------\n-- L = DBM:GetModLocalization(541)\n\n------------\n--  Anzu  --\n------------\nL = DBM:GetModLocalization(542)\n\nL:SetWarningLocalization({\n\twarnStoned\t= \"%s wird wieder zu Stein\"\n})\n\nL:SetOptionLocalization({\n\twarnStoned\t= \"Zeige Warnung für Geister die wieder zu Stein werden\"\n})\n\nL:SetMiscLocalization({\n\tBirdStone\t= \"%s wird wieder zu Stein.\"\n})\n\n------------------------\n--  Talon King Ikiss  --\n------------------------\n-- L = DBM:GetModLocalization(543)\n\n------------------------\n--  Shadow Labyrinth  --\n--------------------------\n--  Ambassador Hellmaw  --\n--------------------------\n-- L = DBM:GetModLocalization(544)\n\n------------------------------\n--  Blackheart the Inciter  --\n------------------------------\n-- L = DBM:GetModLocalization(545)\n\n--------------------------\n--  Grandmaster Vorpil  --\n--------------------------\n-- L = DBM:GetModLocalization(546)\n\n--------------\n--  Murmur  --\n--------------\n-- L = DBM:GetModLocalization(547)\n\n-------------------------------\n--  Old Hillsbrad Foothills  --\n-------------------------------\n--  Lieutenant Drake  --\n------------------------\n-- L = DBM:GetModLocalization(538)\n\n-----------------------\n--  Captain Skarloc  --\n-----------------------\n-- L = DBM:GetModLocalization(539)\n\n--------------------\n--  Epoch Hunter  --\n--------------------\n-- L = DBM:GetModLocalization(540)\n\n------------------------\n--  The Black Morass  --\n------------------------\n--  Chrono Lord Deja  --\n------------------------\n-- L = DBM:GetModLocalization(552)\n\n----------------\n--  Temporus  --\n----------------\n-- L = DBM:GetModLocalization(553)\n\n--------------\n--  Aeonus  --\n--------------\nL = DBM:GetModLocalization(554)\n\nL:SetMiscLocalization({\n\tAeonusFrenzy\t= \"%s gerät in Raserei!\"\n})\n\n---------------------\n--  Portal Timers  --\n---------------------\nL = DBM:GetModLocalization(\"PT\")\n\nL:SetGeneralLocalization({\n\tname = \"Portaltimer (HdZ 2)\"\n})\n\nL:SetWarningLocalization({\n\tWarnWavePortalSoon\t= \"Neues Portal bald\",\n\tWarnWavePortal\t\t= \"Portal %d\",\n\tWarnBossPortal\t\t= \"Boss kommt\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextPortal\t\t= \"Portal %d\"\n})\n\nL:SetOptionLocalization({\n\tWarnWavePortalSoon\t= \"Zeige Vorwarnung für neues Portal\",\n\tWarnWavePortal\t\t= \"Zeige Warnung für neues Portal\",\n\tWarnBossPortal\t\t= \"Zeige Warnung für neuen Boss\",\n\tTimerNextPortal\t\t= \"Zeige Timer für nächstes Portal (nach einem Boss)\",\n\tShowAllPortalTimers\t= \"Zeige Timer für alle Portale (ungenau)\"\n})\n\nL:SetMiscLocalization({\n\tPortalCheck\t\t\t= \"Geöffnete Zeitrisse: (%d+)/18\",\n\tShielddown\t\t\t= \"Nein! Verdammt sei diese schwache, sterbliche Hülle!\"\n})\n\n--------------------\n--  The Mechanar  --\n-----------------------------\n--  Gatewatcher Gyro-Kill  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gyrokill\")\n\nL:SetGeneralLocalization({\n\tname = \"Torwächter Gyrotod\"\n})\n\n-----------------------------\n--  Gatewatcher Iron-Hand  --\n-----------------------------\nL = DBM:GetModLocalization(\"Ironhand\")\n\nL:SetGeneralLocalization({\n\tname = \"Torwächter Eisenhand\"\n})\n\nL:SetMiscLocalization({\n\tJackHammer\t= \"%s erhebt seinen Hammer bedrohlich...\"\n})\n\n------------------------------\n--  Mechano-Lord Capacitus  --\n------------------------------\n-- L = DBM:GetModLocalization(563)\n\n------------------------------\n--  Nethermancer Sepethrea  --\n------------------------------\n-- L = DBM:GetModLocalization(564)\n\n--------------------------------\n--  Pathaleon the Calculator  --\n--------------------------------\n-- L = DBM:GetModLocalization(565)\n\n--------------------\n--  The Botanica  --\n--------------------------\n--  Commander Sarannis  --\n--------------------------\n-- L = DBM:GetModLocalization(558)\n\n------------------------------\n--  High Botanist Freywinn  --\n------------------------------\n-- L = DBM:GetModLocalization(559)\n\n-----------------------------\n--  Thorngrin the Tender  --\n-----------------------------\n-- L = DBM:GetModLocalization(560)\n\n-----------\n--  Laj  --\n-----------\n-- L = DBM:GetModLocalization(561)\n\n---------------------\n--  Warp Splinter  --\n---------------------\n-- L = DBM:GetModLocalization(562)\n\n--------------------\n--  The Arcatraz  --\n----------------------------\n--  Zereketh the Unbound  --\n----------------------------\n-- L = DBM:GetModLocalization(548)\n\n-----------------------------\n--  Dalliah the Doomsayer  --\n-----------------------------\n-- L = DBM:GetModLocalization(549)\n\n---------------------------------\n--  Wrath-Scryer Soccothrates  --\n---------------------------------\n-- L = DBM:GetModLocalization(550)\n\n-------------------------\n--  Harbinger Skyriss  --\n-------------------------\nL = DBM:GetModLocalization(551)\n\nL:SetMiscLocalization({\n\tSplit\t= \"Das Universum ist unser Zuhause, wir sind zahllos wie die Sterne!\"\n})\n\n--------------------------\n--  Magisters' Terrace  --\n--------------------------\n--  Selin Fireheart  --\n-----------------------\n-- L = DBM:GetModLocalization(530)\n\n----------------\n--  Vexallus  --\n----------------\n-- L = DBM:GetModLocalization(531)\n\n--------------------------\n--  Priestess Delrissa  --\n--------------------------\nL = DBM:GetModLocalization(532)\n\nL:SetMiscLocalization({\n--\tDelrissaPull\t= \"Vernichtet sie.\",\n\tDelrissaEnd\t\t= \"Das war so nicht... geplant.\"\n})\n\n------------------------------------\n--  Kael'thas Sunstrider (Party)  --\n------------------------------------\nL = DBM:GetModLocalization(533)\n\nL:SetMiscLocalization({\n\tKaelP2\t= \"Ich werde Eure Welt... auf den Kopf stellen.\"\n})\n"
  },
  {
    "path": "DBM-Party-BC/localization.en.lua",
    "content": "local L\n\n-------------------------\n--  Hellfire Ramparts  --\n-----------------------------\n--  Watchkeeper Gargolmar  --\n-----------------------------\nL = DBM:GetModLocalization(527)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Watchkeeper Gargolmar\"\n})\n\n--------------------------\n--  Omor the Unscarred  --\n--------------------------\nL = DBM:GetModLocalization(528)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Omor the Unscarred\"\n})\n\n------------------------\n--  Nazan & Vazruden  --\n------------------------\nL = DBM:GetModLocalization(529)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Nazan & Vazruden\"\n})\n\n-------------------------\n--  The Blood Furnace  --\n-------------------------\n--  The Maker  --\n-----------------\nL = DBM:GetModLocalization(555)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"The Maker\"\n})\n\n---------------\n--  Broggok  --\n---------------\nL = DBM:GetModLocalization(556)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Broggok\"\n})\n\n----------------------------\n--  Keli'dan the Breaker  --\n----------------------------\nL = DBM:GetModLocalization(557)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Keli'dan the Breaker\"\n})\n\n---------------------------\n--  The Shattered Halls  --\n--------------------------------\n--  Grand Warlock Nethekurse  --\n--------------------------------\nL = DBM:GetModLocalization(566)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grand Warlock Nethekurse\"\n})\n\n--------------------------\n--  Blood Guard Porung  --\n--------------------------\nL = DBM:GetModLocalization(728)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Blood Guard Porung\"\n})\n\n--------------------------\n--  Warbringer O'mrogg  --\n--------------------------\nL = DBM:GetModLocalization(568)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Warbringer O'mrogg\"\n})\n\n----------------------------------\n--  Warchief Kargath Bladefist  --\n----------------------------------\nL = DBM:GetModLocalization(569)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Warchief Kargath Bladefist\"\n})\n\nL:SetWarningLocalization({\n\twarnHeathen\t\t\t= \"Heathen Guard\",\n\twarnReaver\t\t\t= \"Reaver Guard\",\n\twarnSharpShooter\t= \"Sharpshooter Guard\",\n})\n\nL:SetTimerLocalization({\n\ttimerHeathen\t\t= \"Heathen Guard: %s\",\n\ttimerReaver\t\t\t= \"Reaver Guard: %s\",\n\ttimerSharpShooter\t= \"Sharpshooter Guard: %s\"\n})\n\nL:SetOptionLocalization({\n\twarnHeathen\t\t\t= \"Show warning for Heathen Guard\",\n\ttimerHeathen\t\t= \"Show timer for Heathen Guard\",\n\twarnReaver\t\t\t= \"Show warning for Reaver Guard\",\n\ttimerReaver\t\t\t= \"Show timer for Reaver Guard\",\n\twarnSharpShooter\t= \"Show warning for Sharpshooter Guard\",\n\ttimerSharpShooter\t= \"Show timer for Sharpshooter Guard\"\n})\n\n------------------\n--  Slave Pens  --\n--------------------------\n--  Mennu the Betrayer  --\n--------------------------\nL = DBM:GetModLocalization(570)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mennu the Betrayer\"\n})\n\n---------------------------\n--  Rokmar the Crackler  --\n---------------------------\nL = DBM:GetModLocalization(571)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rokmar the Crackler\"\n})\n\n------------------\n--  Quagmirran  --\n------------------\nL = DBM:GetModLocalization(572)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Quagmirran\"\n})\n\n--------------------\n--  The Underbog  --\n--------------------\n--  Hungarfen  --\n-----------------\nL = DBM:GetModLocalization(576)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hungarfen\"\n})\n\n---------------\n--  Ghaz'an  --\n---------------\nL = DBM:GetModLocalization(577)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ghaz'an\"\n})\n\n--------------------------\n--  Swamplord Musel'ek  --\n--------------------------\nL = DBM:GetModLocalization(578)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Swamplord Musel'ek\"\n})\n\n-------------------------\n--  The Black Stalker  --\n-------------------------\nL = DBM:GetModLocalization(579)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"The Black Stalker\"\n})\n\n----------------------\n--  The Steamvault  --\n---------------------------\n--  Hydromancer Thespia  --\n---------------------------\nL = DBM:GetModLocalization(573)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hydromancer Thespia\"\n})\n\n-----------------------------\n--  Mekgineer Steamrigger  --\n-----------------------------\nL = DBM:GetModLocalization(574)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mekgineer Steamrigger\"\n})\n\nL:SetWarningLocalization({\n\twarnSummon\t= \"Steamrigger Mechanics - Switch Targets\"\n})\n\nL:SetOptionLocalization({\n\twarnSummon\t= \"Show warning for Steamrigger Mechanics\"\n})\n\nL:SetMiscLocalization({\n\tMechs\t= \"Tune 'em up good boys!\"\n})\n\n--------------------------\n--  Warlord Kalithresh  --\n--------------------------\nL = DBM:GetModLocalization(575)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Warlord Kalithresh\"\n})\n\n-----------------------\n--  Auchenai Crypts  --\n--------------------------------\n--  Shirrak the Dead Watcher  --\n--------------------------------\nL = DBM:GetModLocalization(523)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Shirrak the Dead Watcher\"\n})\n\n-----------------------\n--  Exarch Maladaar  --\n-----------------------\nL = DBM:GetModLocalization(524)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Exarch Maladaar\"\n})\n\n------------------\n--  Mana-Tombs  --\n------------------\n--    Trash     --\n------------------\nL = DBM:GetModLocalization(\"AuctTombsTrash\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Trash\"\n})\n\n-------------------\n--  Pandemonius  --\n-------------------\nL = DBM:GetModLocalization(534)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Pandemonius\"\n})\n\n---------------\n--  Tavarok  --\n---------------\nL = DBM:GetModLocalization(535)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tavarok\"\n})\n\n----------------------------\n--  Nexus-Prince Shaffar  --\n----------------------------\nL = DBM:GetModLocalization(537)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Nexus-Prince Shaffar\"\n})\n\n-----------\n--  Yor  --\n-----------\nL = DBM:GetModLocalization(536)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Yor\"\n})\n\n---------------------\n--  Sethekk Halls  --\n-----------------------\n--  Darkweaver Syth  --\n-----------------------\nL = DBM:GetModLocalization(541)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Darkweaver Syth\"\n})\n\nL:SetWarningLocalization({\n\twarnSummon\t= \"Summon Elementals\"\n})\n\nL:SetOptionLocalization({\n\twarnSummon\t= \"Show warning for summoned elementals\"\n})\n\n------------\n--  Anzu  --\n------------\nL = DBM:GetModLocalization(542)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Anzu\"\n})\n\nL:SetWarningLocalization({\n\twarnBrood\t= \"Brood of Anzu\",\n\twarnStoned\t= \"%s returned to stone\"\n})\n\nL:SetOptionLocalization({\n\twarnBrood\t= \"Show warning for Brood of Anzu\",\n\twarnStoned\t= \"Show warning for spirits returning to stone\"\n})\n\nL:SetMiscLocalization({\n\tBirdStone\t= \"%s returns to stone.\"\n})\n\n------------------------\n--  Talon King Ikiss  --\n------------------------\nL = DBM:GetModLocalization(543)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Talon King Ikiss\"\n})\n\n------------------------\n--  Shadow Labyrinth  --\n--------------------------\n--  Ambassador Hellmaw  --\n--------------------------\nL = DBM:GetModLocalization(544)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ambassador Hellmaw\"\n})\n\n------------------------------\n--  Blackheart the Inciter  --\n------------------------------\nL = DBM:GetModLocalization(545)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Blackheart the Inciter\"\n})\n\n--------------------------\n--  Grandmaster Vorpil  --\n--------------------------\nL = DBM:GetModLocalization(546)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grandmaster Vorpil\"\n})\n\n--------------\n--  Murmur  --\n--------------\nL = DBM:GetModLocalization(547)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Murmur\"\n})\n\n-------------------------------\n--  Old Hillsbrad Foothills  --\n-------------------------------\n--  Lieutenant Drake  --\n------------------------\nL = DBM:GetModLocalization(538)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lieutenant Drake\"\n})\n\n-----------------------\n--  Captain Skarloc  --\n-----------------------\nL = DBM:GetModLocalization(539)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Captain Skarloc\"\n})\n\n--------------------\n--  Epoch Hunter  --\n--------------------\nL = DBM:GetModLocalization(540)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Epoch Hunter\"\n})\n\n------------------------\n--  The Black Morass  --\n------------------------\n--  Chrono Lord Deja  --\n------------------------\nL = DBM:GetModLocalization(552)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Chrono Lord Deja\"\n})\n\n----------------\n--  Temporus  --\n----------------\nL = DBM:GetModLocalization(553)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Temporus\"\n})\n\n--------------\n--  Aeonus  --\n--------------\nL = DBM:GetModLocalization(554)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Aeonus\"\n})\n\n---------------------\n--  Portal Timers  --\n---------------------\nL = DBM:GetModLocalization(\"PT\")\n\nL:SetGeneralLocalization({\n\tname = \"Portal Timers (CoT)\"\n})\n\nL:SetWarningLocalization({\n\tWarnWavePortalSoon\t= \"New portal soon\",\n\tWarnWavePortal\t\t= \"Portal %d\",\n\tWarnBossPortal\t\t= \"Boss incoming\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextPortal\t\t= \"Portal %d\"\n})\n\nL:SetOptionLocalization({\n\tWarnWavePortalSoon\t= \"Show pre-warning for new portal\",\n\tWarnWavePortal\t\t= \"Show warning for new portal\",\n\tWarnBossPortal\t\t= \"Show warning for boss incoming\",\n\tTimerNextPortal\t\t= \"Show timer for next portal (after Boss)\",\n\tShowAllPortalTimers\t= \"Show timers for all portals (inaccurate)\"\n})\n\nL:SetMiscLocalization({\n\tShielddown\t\t\t= \"No! Damn this feeble, mortal coil!\"\n})\n\n--------------------\n--  The Mechanar  --\n-----------------------------\n--  Gatewatcher Gyro-Kill  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gyrokill\")--Not in EJ\n\nL:SetGeneralLocalization({\n\tname = \"Gatewatcher Gyro-Kill\"\n})\n\n-----------------------------\n--  Gatewatcher Iron-Hand  --\n-----------------------------\nL = DBM:GetModLocalization(\"Ironhand\")--Not in EJ\n\nL:SetGeneralLocalization({\n\tname = \"Gatewatcher Iron-Hand\"\n})\n\nL:SetMiscLocalization({\n\tJackHammer\t= \"%s raises his hammer menacingly...\"\n})\n\n------------------------------\n--  Mechano-Lord Capacitus  --\n------------------------------\nL = DBM:GetModLocalization(563)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mechano-Lord Capacitus\"\n})\n\n------------------------------\n--  Nethermancer Sepethrea  --\n------------------------------\nL = DBM:GetModLocalization(564)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Nethermancer Sepethrea\"\n})\n\n--------------------------------\n--  Pathaleon the Calculator  --\n--------------------------------\nL = DBM:GetModLocalization(565)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Pathaleon the Calculator\"\n})\n\n--------------------\n--  The Botanica  --\n--------------------------\n--  Commander Sarannis  --\n--------------------------\nL = DBM:GetModLocalization(558)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Commander Sarannis\"\n})\n\n------------------------------\n--  High Botanist Freywinn  --\n------------------------------\nL = DBM:GetModLocalization(559)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"High Botanist Freywinn\"\n})\n\n-----------------------------\n--  Thorngrin the Tender  --\n-----------------------------\nL = DBM:GetModLocalization(560)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Thorngrin the Tender\"\n})\n\n-----------\n--  Laj  --\n-----------\nL = DBM:GetModLocalization(561)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Laj\"\n})\n\n---------------------\n--  Warp Splinter  --\n---------------------\nL = DBM:GetModLocalization(562)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Warp Splinter\"\n})\n\n--------------------\n--  The Arcatraz  --\n----------------------------\n--  Zereketh the Unbound  --\n----------------------------\nL = DBM:GetModLocalization(548)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Zereketh the Unbound\"\n})\n\n-----------------------------\n--  Dalliah the Doomsayer  --\n-----------------------------\nL = DBM:GetModLocalization(549)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Dalliah the Doomsayer\"\n})\n\n---------------------------------\n--  Wrath-Scryer Soccothrates  --\n---------------------------------\nL = DBM:GetModLocalization(550)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Wrath-Scryer Soccothrates\"\n})\n\n-------------------------\n--  Harbinger Skyriss  --\n-------------------------\nL = DBM:GetModLocalization(551)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Harbinger Skyriss\"\n})\n\nL:SetWarningLocalization({\n\twarnSplitSoon\t= \"Harbinger's Illusion Soon\",\n\twarnSplit\t\t= \"Harbinger's Illusion\"\n})\n\nL:SetOptionLocalization({\n\twarnSplitSoon\t= \"Show warning for Harbinger's Illusion soon\",\n\twarnSplit\t\t= \"Show warning for Harbinger's Illusion\"\n})\n\nL:SetMiscLocalization({\n\tSplit\t= \"We span the universe, as countless as the stars!\"\n})\n\n--------------------------\n--  Magisters' Terrace  --\n--------------------------\n--  Selin Fireheart  --\n-----------------------\nL = DBM:GetModLocalization(530)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Selin Fireheart\"\n})\n\nL:SetWarningLocalization({\n\twarningFelCrystal\t= \"Fel Crystal - Switch Targets\"\n})\n\nL:SetTimerLocalization({\n\ttimerFelCrystal\t\t= \"~Fel Crystal\"\n})\n\nL:SetOptionLocalization({\n\twarningFelCrystal\t= \"Show special warning to switch targets for Fel Crystal\",\n\ttimerFelCrystal\t\t= \"Show timer for Fel Crystal\"\n})\n\n----------------\n--  Vexallus  --\n----------------\nL = DBM:GetModLocalization(531)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Vexallus\"\n})\n\nL:SetWarningLocalization({\n\twarnEnergy\t= \"Pure Energy - Switch Targets\"\n})\n\nL:SetOptionLocalization({\n\twarnEnergy\t= \"Show warning for Pure Energy\"\n})\n\n--------------------------\n--  Priestess Delrissa  --\n--------------------------\nL = DBM:GetModLocalization(532)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Priestess Delrissa\"\n})\n\nL:SetMiscLocalization({\n\tDelrissaEnd\t\t= \"Not what I had... planned.\"\n})\n\n------------------------------------\n--  Kael'thas Sunstrider (Party)  --\n------------------------------------\nL = DBM:GetModLocalization(533)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kael'thas Sunstrider (Party)\"\n})\n\nL:SetMiscLocalization({\n\tKaelP2\t= \"I'll turn your world... upside... down.\"\n})\n"
  },
  {
    "path": "DBM-Party-BC/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\nlocal L\n\n---------------------------------\n-- Murallas del Fuego Infernal --\n---------------------------------\n------------------------------\n-- Guardián vigía Gargolmar --\n------------------------------\n-- L = DBM:GetModLocalization(527)\n\n-----------------------\n-- Omor el Sinmarcas --\n-----------------------\n-- L = DBM:GetModLocalization(528)\n\n-------------------------\n-- Vazruden el Heraldo --\n-------------------------\n-- L = DBM:GetModLocalization(529)\n\n------------------------\n-- El Horno de Sangre --\n------------------------\n----------------\n-- El Hacedor --\n----------------\n-- L = DBM:GetModLocalization(555)\n\n-------------\n-- Broggok --\n-------------\n-- L = DBM:GetModLocalization(556)\n\n----------------------------\n-- Keli'dan el Ultrajador --\n----------------------------\n-- L = DBM:GetModLocalization(557)\n\n-------------------------\n-- Las Salas Arrasadas --\n-------------------------\n----------------------------\n-- Brujo supremo Malbisal --\n----------------------------\n-- L = DBM:GetModLocalization(566)\n\n------------------------------\n-- Guardia de sangre Porung --\n------------------------------\n-- L = DBM:GetModLocalization(728)\n\n-----------------------\n-- Belisario O'mrogg --\n-----------------------\n-- L = DBM:GetModLocalization(568)\n\n-------------------------\n-- Kargath Garrafilada --\n-------------------------\n-- L = DBM:GetModLocalization(569)\n\n-----------------------------\n-- Recinto de los Esclavos --\n-----------------------------\n----------------------\n-- Mennu el Traidor --\n----------------------\n-- L = DBM:GetModLocalization(570)\n\n------------------------\n-- Rokmar el Crujidor --\n------------------------\n-- L = DBM:GetModLocalization(571)\n\n----------------\n-- Quagmirran --\n----------------\n-- L = DBM:GetModLocalization(572)\n\n------------------\n-- La Sotiénaga --\n------------------\n----------------\n-- Panthambre --\n----------------\n-- L = DBM:GetModLocalization(576)\n\n-------------\n-- Ghaz'an --\n-------------\n-- L = DBM:GetModLocalization(577)\n\n--------------\n-- Musel'ek --\n--------------\n-- L = DBM:GetModLocalization(578)\n\n-------------------------\n-- La Acechadora Negra --\n-------------------------\n-- L = DBM:GetModLocalization(579)\n\n------------------------\n-- La Cámara de Vapor --\n------------------------\n--------------------------\n-- Hidromántica Thespia --\n--------------------------\n-- L = DBM:GetModLocalization(573)\n\n--------------------------\n-- Mekigeniero Vaporino --\n--------------------------\nL = DBM:GetModLocalization(574)\n\nL:SetMiscLocalization({\n\tMechs\t= \"¡Dadles bien, chicos!\"\n})\n\n----------------\n-- Kalithresh --\n----------------\n-- L = DBM:GetModLocalization(575)\n\n----------------------\n-- Criptas Auchenai --\n----------------------\n-------------\n-- Shirrak --\n-------------\n-- L = DBM:GetModLocalization(523)\n\n---------------------\n-- Exarca Maladaar --\n---------------------\n-- L = DBM:GetModLocalization(524)\n\n--------------------\n-- Tumbas de Maná --\n--------------------\n-----------------\n-- Pandemonius --\n-----------------\n-- L = DBM:GetModLocalization(534)\n\n-------------\n-- Tavarok --\n-------------\n-- L = DBM:GetModLocalization(535)\n\n---------------------------\n-- Príncipe-nexo Shaffar --\n---------------------------\n-- L = DBM:GetModLocalization(537)\n\n---------\n-- Yor --\n---------\n-- L = DBM:GetModLocalization(536)\n\n-------------------\n-- Salas Sethekk --\n-------------------\n---------------------\n-- Tejeoscuro Syth --\n---------------------\n-- L = DBM:GetModLocalization(541)\n\n----------\n-- Anzu --\n----------\nL = DBM:GetModLocalization(542)\n\nL:SetWarningLocalization({\n\twarnStoned\t= \"%s ha vuelto a la piedra\"\n})\n\nL:SetOptionLocalization({\n\twarnStoned\t= \"Mostrar aviso cuando los espíritus vuelvan a la piedra\"\n})\n\nL:SetMiscLocalization({\n\tBirdStone\t= \"%s ha vuelto a la piedra.\"\n})\n\n---------------------\n-- Rey Garra Ikiss --\n---------------------\n-- L = DBM:GetModLocalization(543)\n\n------------------------------\n-- Laberinto de las Sombras --\n------------------------------\n---------------------------\n-- Embajador Faucinferno --\n---------------------------\n-- L = DBM:GetModLocalization(544)\n\n---------------------------\n-- Negrozón el Incitador --\n---------------------------\n-- L = DBM:GetModLocalization(545)\n\n--------------------------\n-- Maestro mayor Vorpil --\n--------------------------\n-- L = DBM:GetModLocalization(546)\n\n------------\n-- Murmur --\n------------\n-- L = DBM:GetModLocalization(547)\n\n------------------------------------\n-- Antiguas Laderas de Trabalomas --\n------------------------------------\n--------------------\n-- Teniente Drake --\n--------------------\n-- L = DBM:GetModLocalization(538)\n\n---------------------\n-- Capitán Skarloc --\n---------------------\n-- L = DBM:GetModLocalization(539)\n\n----------------------\n-- Cazador de Época --\n----------------------\n-- L = DBM:GetModLocalization(540)\n\n----------------------\n-- La Ciénaga Negra --\n----------------------\n--------------------\n-- Cronolord Deja --\n--------------------\n-- L = DBM:GetModLocalization(552)\n\n--------------\n-- Temporus --\n--------------\n-- L = DBM:GetModLocalization(553)\n\n------------\n-- Aeonus --\n------------\nL = DBM:GetModLocalization(554)\n\nL:SetMiscLocalization({\n\tAeonusFrenzy\t= \"¡%s entra en Frenesí!\"\n})\n\n--------------------------------\n-- Temporizadores de portales --\n--------------------------------\nL = DBM:GetModLocalization(\"PT\")\n\nL:SetGeneralLocalization({\n\tname = \"Temporizadores de portales\"\n})\n\nL:SetWarningLocalization({\n\tWarnWavePortalSoon\t= \"Siguiente portal en breve\",\n\tWarnWavePortal\t\t= \"Portal %d\",\n\tWarnBossPortal\t\t= \"Jefe en breve\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextPortal\t\t= \"Portal %d\"\n})\n\nL:SetOptionLocalization({\n\tWarnWavePortalSoon\t= \"Mostrar aviso previo para el siguiente portal\",\n\tWarnWavePortal\t\t= \"Mostrar aviso cuando aparezca un portal\",\n\tWarnBossPortal\t\t= \"Mostrar aviso previo para el siguiente jefe\",\n\tTimerNextPortal\t\t= \"Mostrar temporizador para el siguiente portal (después de jefe)\",\n\tShowAllPortalTimers\t= \"Mostrar temporizadores para todos los portales (impreciso)\"\n})\n\nL:SetMiscLocalization({\n\tPortalCheck\t\t\t= \"Grietas en el Tiempo abiertas: (%d+)/18\",\n\tShielddown\t\t\t= \"¡No...malditos sean estos débiles mortales...!\"\n})\n\n-----------------\n-- El Mechanar --\n-----------------\n-----------------------------------\n-- Vigía de las puertas Giromata --\n-----------------------------------\nL = DBM:GetModLocalization(\"Gyrokill\")--Not in EJ\n\nL:SetGeneralLocalization({\n\tname = \"Vigía de las puertas Giromata\"\n})\n\n------------------------------------\n-- Vigía de las puertas Manoyerro --\n------------------------------------\nL = DBM:GetModLocalization(\"Ironhand\")--Not in EJ\n\nL:SetGeneralLocalization({\n\tname = \"Vigía de las puertas Manoyerro\"\n})\n\nL:SetMiscLocalization({\n\tJackHammer\t= \"%s alza su martillo amenazadoramente...\"\n})\n\n---------------------------\n-- Mecano-lord Capacitus --\n---------------------------\n-- L = DBM:GetModLocalization(563)\n\n-------------------------\n-- Abisálica Sepethrea --\n-------------------------\n-- L = DBM:GetModLocalization(564)\n\n-----------------------------\n-- Pathaleon el Calculador --\n-----------------------------\n-- L = DBM:GetModLocalization(565)\n\n--------------------\n-- El Invernáculo --\n--------------------\n-------------------------\n-- Comandante Sarannis --\n-------------------------\n-- L = DBM:GetModLocalization(558)\n\n----------------------------\n-- Gran botánico Freywinn --\n----------------------------\n-- L = DBM:GetModLocalization(559)\n\n---------------------------\n-- Thorngrin el Cuidador --\n---------------------------\n-- L = DBM:GetModLocalization(560)\n\n---------\n-- Laj --\n---------\n-- L = DBM:GetModLocalization(561)\n\n-----------------------------\n-- Disidente de distorsión --\n-----------------------------\n-- L = DBM:GetModLocalization(562)\n\n-----------------\n-- El Arcatraz --\n-----------------\n--------------------------\n-- Zereketh el Desatado --\n--------------------------\n-- L = DBM:GetModLocalization(548)\n\n---------------------------------\n-- Dalliah la Oradora del Sino --\n---------------------------------\n-- L = DBM:GetModLocalization(549)\n\n------------------\n-- Soccothrates --\n------------------\n-- L = DBM:GetModLocalization(550)\n\n------------------------\n-- Presagista Cieloriss --\n------------------------\nL = DBM:GetModLocalization(551)\n\nL:SetMiscLocalization({\n\tSplit\t= \"¡Abarcamos el universo, somos tantos como las estrellas!\"\n})\n\n-------------------------\n-- Bancal del Magister --\n-------------------------\n----------------------------\n-- Selin Corazón de Fuego --\n----------------------------\n-- L = DBM:GetModLocalization(530)\n\n--------------\n-- Vexallus --\n--------------\n-- L = DBM:GetModLocalization(531)\n\n--------------------------\n-- Sacerdotisa Delrissa --\n--------------------------\nL = DBM:GetModLocalization(532)\n\nL:SetMiscLocalization({\n\tDelrissaPull\t= \"Aniquiladlos.\",\n\tDelrissaEnd\t\t= \"Esto no lo había planeado.\"\n})\n\n---------------\n-- Kael'thas --\n---------------\nL = DBM:GetModLocalization(533)\n\nL:SetMiscLocalization({\n\tKaelP2\t= \"Pondré vuestro mundo... cabeza... abajo.\"\n})\n"
  },
  {
    "path": "DBM-Party-BC/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\n\nlocal L\n\n-------------------------\n--  Hellfire Ramparts  --\n-----------------------------\n--  Watchkeeper Gargolmar  --\n-----------------------------\nL = DBM:GetModLocalization(527)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gardien des guetteurs Gargolmar\"\n})\n\n--------------------------\n--  Omor the Unscarred  --\n--------------------------\nL = DBM:GetModLocalization(528)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Omor l'Intouché\"\n})\n\n------------------------\n--  Nazan & Vazruden  --\n------------------------\nL = DBM:GetModLocalization(529)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Nazan et Vazruden\"\n})\n\n-------------------------\n--  The Blood Furnace  --\n-------------------------\n--  The Maker  --\n-----------------\nL = DBM:GetModLocalization(555)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Le Faiseur\"\n})\n\n---------------\n--  Broggok  --\n---------------\nL = DBM:GetModLocalization(556)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Broggok\"\n})\n\n----------------------------\n--  Keli'dan the Breaker  --\n----------------------------\nL = DBM:GetModLocalization(557)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Keli'dan le Briseur\"\n})\n\n---------------------------\n--  The Shattered Halls  --\n--------------------------------\n--  Grand Warlock Nethekurse  --\n--------------------------------\nL = DBM:GetModLocalization(566)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grand démoniste Néanathème\"\n})\n\n--------------------------\n--  Blood Guard Porung  --\n--------------------------\nL = DBM:GetModLocalization(728)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Garde de sang Porung\"\n})\n\n--------------------------\n--  Warbringer O'mrogg  --\n--------------------------\nL = DBM:GetModLocalization(568)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Porteguerre O'mrogg\"\n})\n\n----------------------------------\n--  Warchief Kargath Bladefist  --\n----------------------------------\nL = DBM:GetModLocalization(569)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Chef de guerre Kargath Lamepoing\"\n})\n\nL:SetWarningLocalization({\n\twarnHeathen\t\t\t= \"Garde païen\",\n\twarnReaver\t\t\t= \"Garde saccageur\",\n\twarnSharpShooter\t= \"Garde tireur de précision\",\n})\n\nL:SetTimerLocalization({\n\ttimerHeathen\t\t= \"Garde païen: %s\",\n\ttimerReaver\t\t\t= \"Garde saccageur: %s\",\n\ttimerSharpShooter\t= \"Garde tireur de précision: %s\"\n})\n\nL:SetOptionLocalization({\n\twarnHeathen\t\t\t= \"Afficher une alerte pour le Garde païen\",\n\ttimerHeathen\t\t= \"Afficher un timer pour le Garde païen\",\n\twarnReaver\t\t\t= \"Afficher une alerte pour le Garde saccageur\",\n\ttimerReaver\t\t\t= \"Afficher un timer pour le Garde saccageur\",\n\twarnSharpShooter\t= \"Afficher une alerte pour le Garde tireur de précision\",\n\ttimerSharpShooter\t= \"Afficher un timer pour le Garde tireur de précision\"\n})\n\n------------------\n--  Slave Pens  --\n--------------------------\n--  Mennu the Betrayer  --\n--------------------------\nL = DBM:GetModLocalization(570)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mennu le Traître\"\n})\n\n---------------------------\n--  Rokmar the Crackler  --\n---------------------------\nL = DBM:GetModLocalization(571)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rokmar le Crépitant\"\n})\n\n------------------\n--  Quagmirran  --\n------------------\nL = DBM:GetModLocalization(572)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bourbierreux\"\n})\n\n--------------------\n--  The Underbog  --\n--------------------\n--  Hungarfen  --\n-----------------\nL = DBM:GetModLocalization(576)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hungarfen\"\n})\n\n---------------\n--  Ghaz'an  --\n---------------\nL = DBM:GetModLocalization(577)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ghaz'an\"\n})\n\n--------------------------\n--  Swamplord Musel'ek  --\n--------------------------\nL = DBM:GetModLocalization(578)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Seigneur des marais Musel'ek\"\n})\n\n-------------------------\n--  The Black Stalker  --\n-------------------------\nL = DBM:GetModLocalization(579)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"La Traqueuse noire\"\n})\n\n----------------------\n--  The Steamvault  --\n---------------------------\n--  Hydromancer Thespia  --\n---------------------------\nL = DBM:GetModLocalization(573)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hydromancienne Thespia\"\n})\n\n-----------------------------\n--  Mekgineer Steamrigger  --\n-----------------------------\nL = DBM:GetModLocalization(574)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mekgénieur Montevapeur\"\n})\n\nL:SetWarningLocalization({\n\twarnSummon\t= \"Mécaniciens Montevapeur - Changez de cible\"\n})\n\nL:SetOptionLocalization({\n\twarnSummon\t= \"Afficher une alerte pour les mécaniciens Montevapeur\"\n})\n\nL:SetMiscLocalization({\n\tMechs\t= \"Faites-leur une vidange, les gars !\"\n})\n\n--------------------------\n--  Warlord Kalithresh  --\n--------------------------\nL = DBM:GetModLocalization(575)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Seigneur de guerre Kalithresh\"\n})\n\n-----------------------\n--  Auchenai Crypts  --\n--------------------------------\n--  Shirrak the Dead Watcher  --\n--------------------------------\nL = DBM:GetModLocalization(523)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Shirrak le Veillemort\"\n})\n\n-----------------------\n--  Exarch Maladaar  --\n-----------------------\nL = DBM:GetModLocalization(524)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Exarque Maladaar\"\n})\n\n------------------\n--  Mana-Tombs  --\n------------------\n--    Trash     --\n------------------\nL = DBM:GetModLocalization(\"AuctTombsTrash\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Trash\"\n})\n\n-------------------\n--  Pandemonius  --\n-------------------\nL = DBM:GetModLocalization(534)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Pandemonius\"\n})\n\n---------------\n--  Tavarok  --\n---------------\nL = DBM:GetModLocalization(535)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tavarok\"\n})\n\n----------------------------\n--  Nexus-Prince Shaffar  --\n----------------------------\nL = DBM:GetModLocalization(537)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Prince-nexus Shaffar\"\n})\n\n-----------\n--  Yor  --\n-----------\nL = DBM:GetModLocalization(536)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Yor\"\n})\n\n---------------------\n--  Sethekk Halls  --\n-----------------------\n--  Darkweaver Syth  --\n-----------------------\nL = DBM:GetModLocalization(541)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tisseur d'ombre Syth\"\n})\n\nL:SetWarningLocalization({\n\twarnSummon\t= \"Invocation d'élémentaires\"\n})\n\nL:SetOptionLocalization({\n\twarnSummon\t= \"Afficher une alerte pour les élémentaires invoqués\"\n})\n\n------------\n--  Anzu  --\n------------\nL = DBM:GetModLocalization(542)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Anzu\"\n})\n\nL:SetWarningLocalization({\n\twarnBrood\t= \"Progéniture d'Anzu\",\n\twarnStoned\t= \"%s returned to stone\"\n})\n\nL:SetOptionLocalization({\n\twarnBrood\t= \"Afficher une alerte pour la progéniture d'Anzu\",\n\twarnStoned\t= \"Afficher une alerte pour les esprits redevenus pierre\"\n})\n\nL:SetMiscLocalization({\n\tBirdStone\t= \"%s returns to stone.\"\n})\n\n------------------------\n--  Talon King Ikiss  --\n------------------------\nL = DBM:GetModLocalization(543)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Roi-serre Ikiss\"\n})\n\n------------------------\n--  Shadow Labyrinth  --\n--------------------------\n--  Ambassador Hellmaw  --\n--------------------------\nL = DBM:GetModLocalization(544)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ambassadeur Gueule-d'Enfer\"\n})\n\n------------------------------\n--  Blackheart the Inciter  --\n------------------------------\nL = DBM:GetModLocalization(545)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cœur-Noir le Séditieux\"\n})\n\n--------------------------\n--  Grandmaster Vorpil  --\n--------------------------\nL = DBM:GetModLocalization(546)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grand maître Vorpil\"\n})\n\n--------------\n--  Murmur  --\n--------------\nL = DBM:GetModLocalization(547)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Marmon\"\n})\n\n-------------------------------\n--  Old Hillsbrad Foothills  --\n-------------------------------\n--  Lieutenant Drake  --\n------------------------\nL = DBM:GetModLocalization(538)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lieutenant Drake\"\n})\n\n-----------------------\n--  Captain Skarloc  --\n-----------------------\nL = DBM:GetModLocalization(539)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Capitaine Skarloc\"\n})\n\n--------------------\n--  Epoch Hunter  --\n--------------------\nL = DBM:GetModLocalization(540)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Chasseur d'époques\"\n})\n\n------------------------\n--  The Black Morass  --\n------------------------\n--  Chrono Lord Deja  --\n------------------------\nL = DBM:GetModLocalization(552)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Chronoseigneur Déjà\"\n})\n\n----------------\n--  Temporus  --\n----------------\nL = DBM:GetModLocalization(553)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Temporus\"\n})\n\n--------------\n--  Aeonus  --\n--------------\nL = DBM:GetModLocalization(554)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Aeonus\"\n})\n\n---------------------\n--  Portal Timers  --\n---------------------\nL = DBM:GetModLocalization(\"PT\")\n\nL:SetGeneralLocalization({\n\tname = \"Timers des failles (CoT)\"\n})\n\nL:SetWarningLocalization({\n\tWarnWavePortalSoon\t= \"Nouvelle faille bientôt\",\n\tWarnWavePortal\t\t= \"Faille temporelle %d\",\n\tWarnBossPortal\t\t= \"Boss incoming\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextPortal\t\t= \"Faille temporelle %d\"\n})\n\nL:SetOptionLocalization({\n\tWarnWavePortalSoon\t= \"Montre une pré-alerte pour la nouvelle faille\",\n\tWarnWavePortal\t\t= \"Montre une alerte pour la faille\",\n\tWarnBossPortal\t\t= \"Montre une alerte pour le boss a venir\",\n\tTimerNextPortal\t\t= \"Montre un timer pour les failles à venir (après Boss)\",\n\tShowAllPortalTimers\t= \"Montre un timer pour toute les failles (inexacte)\"\n})\n\nL:SetMiscLocalization({\n\tShielddown\t\t\t= \"Non ! Maudite soit cette enveloppe mortelle !\"\n})\n\n--------------------\n--  The Mechanar  --\n-----------------------------\n--  Gatewatcher Gyro-Kill  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gyrokill\")--Not in EJ\n\nL:SetGeneralLocalization({\n\tname = \"Gardien de porte Gyro-Meurtre\"\n})\n\n-----------------------------\n--  Gatewatcher Iron-Hand  --\n-----------------------------\nL = DBM:GetModLocalization(\"Ironhand\")--Not in EJ\n\nL:SetGeneralLocalization({\n\tname = \"Gardien de porte Main-en-fer\"\n})\n\nL:SetMiscLocalization({\n\tJackHammer\t= \"%s lève son marteau d'un air menaçant...\"\n})\n\n------------------------------\n--  Mechano-Lord Capacitus  --\n------------------------------\nL = DBM:GetModLocalization(563)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mécano-seigneur Capacitus\"\n})\n\n------------------------------\n--  Nethermancer Sepethrea  --\n------------------------------\nL = DBM:GetModLocalization(564)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Néantomancienne Sepethrea\"\n})\n\n--------------------------------\n--  Pathaleon the Calculator  --\n--------------------------------\nL = DBM:GetModLocalization(565)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Pathaleon le Calculateur\"\n})\n\n--------------------\n--  The Botanica  --\n--------------------------\n--  Commander Sarannis  --\n--------------------------\nL = DBM:GetModLocalization(558)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Commandant Sarannis\"\n})\n\n------------------------------\n--  High Botanist Freywinn  --\n------------------------------\nL = DBM:GetModLocalization(559)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grand botaniste Freywinn\"\n})\n\n-----------------------------\n--  Thorngrin the Tender  --\n-----------------------------\nL = DBM:GetModLocalization(560)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rirépine le Tendre\"\n})\n\n-----------\n--  Laj  --\n-----------\nL = DBM:GetModLocalization(561)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Laj\"\n})\n\n---------------------\n--  Warp Splinter  --\n---------------------\nL = DBM:GetModLocalization(562)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Brise-dimension\"\n})\n\n--------------------\n--  The Arcatraz  --\n----------------------------\n--  Zereketh the Unbound  --\n----------------------------\nL = DBM:GetModLocalization(548)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Zereketh le Délié\"\n})\n\n-----------------------------\n--  Dalliah the Doomsayer  --\n-----------------------------\nL = DBM:GetModLocalization(549)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Dalliah l'Auspice-Funeste\"\n})\n\n---------------------------------\n--  Wrath-Scryer Soccothrates  --\n---------------------------------\nL = DBM:GetModLocalization(550)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Scrute-courroux Soccothrates\"\n})\n\n-------------------------\n--  Harbinger Skyriss  --\n-------------------------\nL = DBM:GetModLocalization(551)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Messager Cieuriss\"\n})\n\nL:SetWarningLocalization({\n\twarnSplitSoon\t= \"Illusion du messager bientôt\",\n\twarnSplit\t\t= \"Illusion du messager\"\n})\n\nL:SetOptionLocalization({\n\twarnSplitSoon\t= \"Montre une pré-alerte pour Illusion du messager\",\n\twarnSplit\t\t= \"Montre une alerte pour Illusion du messager\"\n})\n\nL:SetMiscLocalization({\n\tSplit\t= \"Nous nous étendons sur l'univers, aussi innombrables que les étoiles !\"\n})\n\n--------------------------\n--  Magisters' Terrace  --\n--------------------------\n--  Selin Fireheart  --\n-----------------------\nL = DBM:GetModLocalization(530)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Selin Coeur-de-feu\"\n})\n\nL:SetWarningLocalization({\n\twarningFelCrystal\t= \"Gangrecristal - changez de cible\"\n})\n\nL:SetTimerLocalization({\n\ttimerFelCrystal\t\t= \"~Gangrecristal\"\n})\n\nL:SetOptionLocalization({\n\twarningFelCrystal\t= \"Montre une alerte spéciale pour changer de cible sur le Gangrecristal\",\n\ttimerFelCrystal\t\t= \"Montre un timer pour le Gangrecristal\"\n})\n\n----------------\n--  Vexallus  --\n----------------\nL = DBM:GetModLocalization(531)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Vexallus\"\n})\n\nL:SetWarningLocalization({\n\twarnEnergy\t= \"Energie pure - changez de cible\"\n})\n\nL:SetOptionLocalization({\n\twarnEnergy\t= \"Montre une alerte pour Energie pure\"\n})\n\n--------------------------\n--  Priestess Delrissa  --\n--------------------------\nL = DBM:GetModLocalization(532)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Prêtresse Delrissa\"\n})\n\nL:SetMiscLocalization({\n\tDelrissaEnd\t\t= \"Ça n'était pas… prévu.\"\n})\n\n------------------------------------\n--  Kael'thas Sunstrider (Party)  --\n------------------------------------\nL = DBM:GetModLocalization(533)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kael'thas Haut-Soleil (Donjon)\"\n})\n\nL:SetMiscLocalization({\n\tKaelP2\t= \"Vous allez me trouver… renversant.\"\n})\n"
  },
  {
    "path": "DBM-Party-BC/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n-------------------------\n--  Hellfire Ramparts  --\n-----------------------------\n--  Watchkeeper Gargolmar  --\n-----------------------------\nL = DBM:GetModLocalization(527)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"감시자 가르골마르\"\n})\n\n--------------------------\n--  Omor the Unscarred  --\n--------------------------\nL = DBM:GetModLocalization(528)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"무적의 오모르\"\n})\n\n------------------------\n--  Nazan & Vazruden  --\n------------------------\nL = DBM:GetModLocalization(529)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"나잔과 바즈루덴\"\n})\n\n-------------------------\n--  The Blood Furnace  --\n-------------------------\n--  The Maker  --\n-----------------\nL = DBM:GetModLocalization(555)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"재앙의 창조자\"\n})\n\n---------------\n--  Broggok  --\n---------------\nL = DBM:GetModLocalization(556)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"브로고크\"\n})\n\n----------------------------\n--  Keli'dan the Breaker  --\n----------------------------\nL = DBM:GetModLocalization(557)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"파괴자 켈리단\"\n})\n\n---------------------------\n--  The Shattered Halls  --\n--------------------------------\n--  Grand Warlock Nethekurse  --\n--------------------------------\nL = DBM:GetModLocalization(566)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"대흑마법사 네더쿠르스\"\n})\n\n--------------------------\n--  Blood Guard Porung  --\n--------------------------\nL = DBM:GetModLocalization(728)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"혈투사 포룽\"\n})\n\n--------------------------\n--  Warbringer O'mrogg  --\n--------------------------\nL = DBM:GetModLocalization(568)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"전쟁인도자 오므로그\"\n})\n\n----------------------------------\n--  Warchief Kargath Bladefist  --\n----------------------------------\nL = DBM:GetModLocalization(569)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"대족장 카르가스 블레이드피스트\"\n})\n\nL:SetWarningLocalization({\n\twarnHeathen\t\t\t= \"이교도 경비병\",\n\twarnReaver\t\t\t= \"학살자 경비병\",\n\twarnSharpShooter\t= \"명사수 경비병\"\n})\n\nL:SetTimerLocalization({\n\ttimerHeathen\t\t= \"이교도 경비병: %s\",\n\ttimerReaver\t\t\t= \"학살자 경비병: %s\",\n\ttimerSharpShooter\t= \"명사수 경비병: %s\"\n})\n\nL:SetOptionLocalization({\n\twarnHeathen\t\t\t= \"이교도 경비병 경고 보기\",\n\ttimerHeathen\t\t= \"이교도 경비병 타이머 바 보기\",\n\twarnReaver\t\t\t= \"학살자 경비병 경고 보기\",\n\ttimerReaver\t\t\t= \"학살자 경비병 타이머 바 보기\",\n\twarnSharpShooter\t= \"명사수 경비병 경고 보기\",\n\ttimerSharpShooter\t= \"명사수 경비병 타이머 바 보기\"\n})\n\n------------------\n--  Slave Pens  --\n--------------------------\n--  Mennu the Betrayer  --\n--------------------------\nL = DBM:GetModLocalization(570)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"배반자 멘누\"\n})\n\n---------------------------\n--  Rokmar the Crackler  --\n---------------------------\nL = DBM:GetModLocalization(571)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"딱딱이 로크마르\"\n})\n\n------------------\n--  Quagmirran  --\n------------------\nL = DBM:GetModLocalization(572)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"쿠아그미란\"\n})\n\n--------------------\n--  The Underbog  --\n--------------------\n--  Hungarfen  --\n-----------------\nL = DBM:GetModLocalization(576)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"헝가르펜\"\n})\n\n---------------\n--  Ghaz'an  --\n---------------\nL = DBM:GetModLocalization(577)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"가즈안\"\n})\n\n--------------------------\n--  Swamplord Musel'ek  --\n--------------------------\nL = DBM:GetModLocalization(578)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"늪군주 뮤즐레크\"\n})\n\n-------------------------\n--  The Black Stalker  --\n-------------------------\nL = DBM:GetModLocalization(579)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"검은 추적자\"\n})\n\n----------------------\n--  The Steamvault  --\n---------------------------\n--  Hydromancer Thespia  --\n---------------------------\nL = DBM:GetModLocalization(573)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"풍수사 세스피아\"\n})\n\n-----------------------------\n--  Mekgineer Steamrigger  --\n-----------------------------\nL = DBM:GetModLocalization(574)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"기계박사 스팀리거\"\n})\n\nL:SetWarningLocalization({\n\twarnSummon\t= \"스팀리거 정비사 - 대상 변경\"\n})\n\nL:SetOptionLocalization({\n\twarnSummon\t= \"스팀리거 정비사 경고 보기\"\n})\n\nL:SetMiscLocalization({\n\tMechs\t= \"얘들아, 쟤네들을 부드럽게 만져줘라!\"\n})\n\n--------------------------\n--  Warlord Kalithresh  --\n--------------------------\nL = DBM:GetModLocalization(575)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"장군 칼리스레쉬\"\n})\n\n-----------------------\n--  Auchenai Crypts  --\n--------------------------------\n--  Shirrak the Dead Watcher  --\n--------------------------------\nL = DBM:GetModLocalization(523)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"죽음의 감시인 쉴라크\"\n})\n\n-----------------------\n--  Exarch Maladaar  --\n-----------------------\nL = DBM:GetModLocalization(524)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"총독 말라다르\"\n})\n\n------------------\n--  Mana-Tombs  --\n------------------\n--    Trash     --\n------------------\nL = DBM:GetModLocalization(\"AuctTombsTrash\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"일반몹\"\n})\n\n-------------------\n--  Pandemonius  --\n-------------------\nL = DBM:GetModLocalization(534)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"팬더모니우스\"\n})\n\n---------------\n--  Tavarok  --\n---------------\nL = DBM:GetModLocalization(535)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"타바로크\"\n})\n\n----------------------------\n--  Nexus-Prince Shaffar  --\n----------------------------\nL = DBM:GetModLocalization(537)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"연합왕자 샤파르\"\n})\n\n-----------\n--  Yor  --\n-----------\nL = DBM:GetModLocalization(536)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"요르\"\n})\n\n---------------------\n--  Sethekk Halls  --\n-----------------------\n--  Darkweaver Syth  --\n-----------------------\nL = DBM:GetModLocalization(541)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"흑마술사 시스\"\n})\n\nL:SetWarningLocalization({\n\twarnSummon\t= \"정령 소환\"\n})\n\nL:SetOptionLocalization({\n\twarnSummon\t= \"소환된 정령 경고 보기\"\n})\n\n------------\n--  Anzu  --\n------------\nL = DBM:GetModLocalization(542)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"안주\"\n})\n\nL:SetWarningLocalization({\n\twarnBrood\t= \"안주의 혈족\",\n\twarnStoned\t= \"%s|1;이;가; 돌로 돌아갔음\"\n})\n\nL:SetOptionLocalization({\n\twarnBrood\t= \"안주의 혈족 경고 보기\",\n\twarnStoned\t= \"영혼이 돌로 되돌아가면 경고 보기\"\n})\n\nL:SetMiscLocalization({\n\tBirdStone\t= \"%s|1;이;가; 돌로 돌아감\"--확인필요\n})\n\n------------------------\n--  Talon King Ikiss  --\n------------------------\nL = DBM:GetModLocalization(543)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"갈퀴대왕 이키스\"\n})\n\n------------------------\n--  Shadow Labyrinth  --\n--------------------------\n--  Ambassador Hellmaw  --\n--------------------------\nL = DBM:GetModLocalization(544)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"사자 지옥아귀\"\n})\n\n------------------------------\n--  Blackheart the Inciter  --\n------------------------------\nL = DBM:GetModLocalization(545)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"선동자 검은심장\"\n})\n\n--------------------------\n--  Grandmaster Vorpil  --\n--------------------------\nL = DBM:GetModLocalization(546)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"단장 보르필\"\n})\n\n--------------\n--  Murmur  --\n--------------\nL = DBM:GetModLocalization(547)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"울림\"\n})\n\n-------------------------------\n--  Old Hillsbrad Foothills  --\n-------------------------------\n--  Lieutenant Drake  --\n------------------------\nL = DBM:GetModLocalization(538)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"부관 드레이크\"\n})\n\n-----------------------\n--  Captain Skarloc  --\n-----------------------\nL = DBM:GetModLocalization(539)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"경비대장 스칼록\"\n})\n\n--------------------\n--  Epoch Hunter  --\n--------------------\nL = DBM:GetModLocalization(540)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"시대의 사냥꾼\"\n})\n\n------------------------\n--  The Black Morass  --\n------------------------\n--  Chrono Lord Deja  --\n------------------------\nL = DBM:GetModLocalization(552)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"시간의 군주 데자\"\n})\n\n----------------\n--  Temporus  --\n----------------\nL = DBM:GetModLocalization(553)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"템퍼루스\"\n})\n\n--------------\n--  Aeonus  --\n--------------\nL = DBM:GetModLocalization(554)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"아에누스\"\n})\n\nL:SetWarningLocalization({\n\twarnEnrage\t= \"격노\"\n})\n\nL:SetOptionLocalization({\n\twarnEnrage\t= \"격노 경고 보기\"\n})\n\nL:SetMiscLocalization({\n\tAeonusFrenzy\t= \"%s|1이;가; 분노합니다!\"\n})\n\n---------------------\n--  Portal Timers  --\n---------------------\nL = DBM:GetModLocalization(\"PT\")\n\nL:SetGeneralLocalization({\n\tname = \"차원문 타이머 (시동)\"\n})\n\nL:SetWarningLocalization({\n\tWarnWavePortalSoon\t= \"곧 새 차원문\",\n\tWarnWavePortal\t\t= \"%d번 차원문\",\n\tWarnBossPortal\t\t= \"우두머리 등장\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextPortal\t\t= \"%d번 차원문\"\n})\n\nL:SetOptionLocalization({\n\tWarnWavePortalSoon\t= \"새 차원문 사전 경고 보기\",\n\tWarnWavePortal\t\t= \"새 차원문 경고 보기\",\n\tWarnBossPortal\t\t= \"우두머리 등장 경고 보기\",\n\tTimerNextPortal\t\t= \"다음 차원문 타이머 바 보기 (우두머리 잡은 후)\",\n\tShowAllPortalTimers\t= \"모든 차원문 타이머 바 보기 (부정확함)\"\n})\n\nL:SetMiscLocalization({\n\tShielddown\t\t\t= \"안 돼! 이런 나약한 무리에게 당하다니!\"\n})\n\n--------------------\n--  The Mechanar  --\n-----------------------------\n--  Gatewatcher Gyro-Kill  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gyrokill\")--Not in EJ\n\nL:SetGeneralLocalization({\n\tname = \"문지기 회전톱날\"\n})\n\n-----------------------------\n--  Gatewatcher Iron-Hand  --\n-----------------------------\nL = DBM:GetModLocalization(\"Ironhand\")--Not in EJ\n\nL:SetGeneralLocalization({\n\tname = \"문지기 무쇠주먹\"\n})\n\nL:SetMiscLocalization({\n\tJackHammer\t\t\t= \"%s|1이;가; 자신의 망치를 위협적으로 치켜듭니다...\"\n})\n\n------------------------------\n--  Mechano-Lord Capacitus  --\n------------------------------\nL = DBM:GetModLocalization(563)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"기계군주 캐퍼시투스\"\n})\n\n------------------------------\n--  Nethermancer Sepethrea  --\n------------------------------\nL = DBM:GetModLocalization(564)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"황천술사 세페스레아\"\n})\n\n--------------------------------\n--  Pathaleon the Calculator  --\n--------------------------------\nL = DBM:GetModLocalization(565)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"철두철미한 파탈리온\"\n})\n\n--------------------\n--  The Botanica  --\n--------------------------\n--  Commander Sarannis  --\n--------------------------\nL = DBM:GetModLocalization(558)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"지휘관 새래니스\"\n})\n\n------------------------------\n--  High Botanist Freywinn  --\n------------------------------\nL = DBM:GetModLocalization(559)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"고위 식물학자 프레이윈\"\n})\n\nL:SetWarningLocalization({\n\twarnTranq\t= \"껍질덩굴손 파수꾼 - 대상 변경\"\n})\n\nL:SetOptionLocalization({\n\twarnTranq\t= \"껍질덩굴손 파수꾼 경고 보기\"\n})\n\n-----------------------------\n--  Thorngrin the Tender  --\n-----------------------------\nL = DBM:GetModLocalization(560)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"감시인 쏜그린\"\n})\n\n-----------\n--  Laj  --\n-----------\nL = DBM:GetModLocalization(561)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"라즈\"\n})\n\n---------------------\n--  Warp Splinter  --\n---------------------\nL = DBM:GetModLocalization(562)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"차원의 분리자\"\n})\n\n--------------------\n--  The Arcatraz  --\n----------------------------\n--  Zereketh the Unbound  --\n----------------------------\nL = DBM:GetModLocalization(548)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"속박 풀린 제레케스\"\n})\n\n-----------------------------\n--  Dalliah the Doomsayer  --\n-----------------------------\nL = DBM:GetModLocalization(549)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"파멸의 예언자 달리아\"\n})\n\n---------------------------------\n--  Wrath-Scryer Soccothrates  --\n---------------------------------\nL = DBM:GetModLocalization(550)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"격노의 점술사 소코드라테스\"\n})\n\n-------------------------\n--  Harbinger Skyriss  --\n-------------------------\nL = DBM:GetModLocalization(551)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"선구자 스키리스\"\n})\n\nL:SetWarningLocalization({\n\twarnSplitSoon\t= \"곧 선구자의 환영\",\n\twarnSplit\t= \"선구자의 환영\"\n})\n\nL:SetOptionLocalization({\n\twarnSplitSoon\t= \"곧 선구자의 환영 경고 보기\",\n\twarnSplit\t= \"선구자의 환영 경고 보기\"\n})\n\nL:SetMiscLocalization({\n\tSplit\t\t\t= \"밤하늘의 무한한 별처럼 온 우주를 덮으리라!\"\n})\n\n--------------------------\n--  Magisters' Terrace  --\n--------------------------\n--  Selin Fireheart  --\n-----------------------\nL = DBM:GetModLocalization(530)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"셀린 파이어하트\"\n})\n\nL:SetWarningLocalization({\n\twarningFelCrystal\t= \"지옥 수정 - 대상 변경\"\n})\n\nL:SetTimerLocalization({\n\ttimerFelCrystal\t\t= \"~지옥 수정\"\n})\n\nL:SetOptionLocalization({\n\twarningFelCrystal\t= \"지옥 수정 대상 변경 특수 경고 보기\",\n\ttimerFelCrystal\t\t= \"지옥 수정 타이머 바 보기\"\n})\n\n----------------\n--  Vexallus  --\n----------------\nL = DBM:GetModLocalization(531)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"벡살루스\"\n})\n\nL:SetWarningLocalization({\n\twarnEnergy\t= \"순수한 에너지 - 대상 변경\"\n})\n\nL:SetOptionLocalization({\n\twarnEnergy\t= \"순수한 에너지 경고 보기\"\n})\n\n--------------------------\n--  Priestess Delrissa  --\n--------------------------\nL = DBM:GetModLocalization(532)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"여사제 델리사\"\n})\n\nL:SetMiscLocalization({\n\tDelrissaEnd\t\t= \"뭔가... 잘못됐어...\"\n})\n\n------------------------------------\n--  Kael'thas Sunstrider (Party)  --\n------------------------------------\nL = DBM:GetModLocalization(533)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"캘타스 선스트라이더 (던전)\"\n})\n\nL:SetMiscLocalization({\n\tKaelP2\t\t\t\t= \"세상을... 거꾸로... 뒤집어주마.\"\n})\n"
  },
  {
    "path": "DBM-Party-BC/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n-------------------------\n--  Hellfire Ramparts  --\n-----------------------------\n--  Watchkeeper Gargolmar  --\n-----------------------------\nL = DBM:GetModLocalization(527)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Начальник стражи Гарголмар\"\n})\n\n--------------------------\n--  Omor the Unscarred  --\n--------------------------\nL = DBM:GetModLocalization(528)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Омор Неодолимый\"\n})\n\n------------------------\n--  Nazan & Vazruden  --\n------------------------\nL = DBM:GetModLocalization(529)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Назан & Вазруден\"\n})\n\n-------------------------\n--  The Blood Furnace  --\n-------------------------\n--  The Maker  --\n-----------------\nL = DBM:GetModLocalization(555)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Мастер\"\n})\n\n---------------\n--  Broggok  --\n---------------\nL = DBM:GetModLocalization(556)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Броггок\"\n})\n\n----------------------------\n--  Keli'dan the Breaker  --\n----------------------------\nL = DBM:GetModLocalization(557)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Кели'дан Разрушитель\"\n})\n\n---------------------------\n--  The Shattered Halls  --\n--------------------------------\n--  Grand Warlock Nethekurse  --\n--------------------------------\nL = DBM:GetModLocalization(566)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Главный чернокнижник Пустоклят\"\n})\n\n--------------------------\n--  Blood Guard Porung  --\n--------------------------\nL = DBM:GetModLocalization(728)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Кровавый страж Порунг\"\n})\n\n--------------------------\n--  Warbringer O'mrogg  --\n--------------------------\nL = DBM:GetModLocalization(568)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"О'мрогг Завоеватель\"\n})\n\n----------------------------------\n--  Warchief Kargath Bladefist  --\n----------------------------------\nL = DBM:GetModLocalization(569)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Вождь Каргат Острорук\"\n})\n\nL:SetWarningLocalization({\n\twarnHeathen\t\t\t= \"Страж-язычник\",\n\twarnReaver\t\t\t= \"Стражник-разоритель\",\n\twarnSharpShooter\t= \"Меткий стрелок-страж\",\n})\n\nL:SetTimerLocalization({\n\ttimerHeathen\t\t= \"Страж-язычник: %s\",\n\ttimerReaver\t\t\t= \"Стражник-разоритель: %s\",\n\ttimerSharpShooter\t= \"Меткий стрелок-страж: %s\"\n})\n\nL:SetOptionLocalization({\n\twarnHeathen\t\t\t= \"Показывать предупреждение для Страж-язычник\",\n\ttimerHeathen\t\t= \"Показывать таймер для Страж-язычник\",\n\twarnReaver\t\t\t= \"Показывать предупреждение для Стражник-разоритель\",\n\ttimerReaver\t\t\t= \"Показывать таймер для Стражник-разоритель\",\n\twarnSharpShooter\t= \"Показывать предупреждение для Меткий стрелок-страж\",\n\ttimerSharpShooter\t= \"Показывать таймер для Меткий стрелок-страж\"\n})\n\n------------------\n--  Slave Pens  --\n--------------------------\n--  Mennu the Betrayer  --\n--------------------------\nL = DBM:GetModLocalization(570)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Менну Предатель\"\n})\n\n---------------------------\n--  Rokmar the Crackler  --\n---------------------------\nL = DBM:GetModLocalization(571)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Рокмар Трескун\"\n})\n\n------------------\n--  Quagmirran  --\n------------------\nL = DBM:GetModLocalization(572)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Зыбун\"\n})\n\n--------------------\n--  The Underbog  --\n--------------------\n--  Hungarfen  --\n-----------------\nL = DBM:GetModLocalization(576)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Топеглад\"\n})\n\n---------------\n--  Ghaz'an  --\n---------------\nL = DBM:GetModLocalization(577)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Газ'ан\"\n})\n\n--------------------------\n--  Swamplord Musel'ek  --\n--------------------------\nL = DBM:GetModLocalization(578)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Владыка болот Мусел'ек\"\n})\n\n-------------------------\n--  The Black Stalker  --\n-------------------------\nL = DBM:GetModLocalization(579)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Черная Охотница\"\n})\n\n----------------------\n--  The Steamvault  --\n---------------------------\n--  Hydromancer Thespia  --\n---------------------------\nL = DBM:GetModLocalization(573)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Гидромантка Теспия\"\n})\n\n-----------------------------\n--  Mekgineer Steamrigger  --\n-----------------------------\nL = DBM:GetModLocalization(574)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Анжинер Паропуск\"\n})\n\nL:SetWarningLocalization({\n\twarnSummon\t= \"Механик паровой оснастки - Смени Цель\"\n})\n\nL:SetOptionLocalization({\n\twarnSummon\t= \"Показывать предупреждение для Механик паровой оснастки\"\n})\n\nL:SetMiscLocalization({\n\tMechs\t= \"Эй, ребята, тут надо кое-что настроить!\"\n})\n\n--------------------------\n--  Warlord Kalithresh  --\n--------------------------\nL = DBM:GetModLocalization(575)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Полководец Калитреш\"\n})\n\n-----------------------\n--  Auchenai Crypts  --\n--------------------------------\n--  Shirrak the Dead Watcher  --\n--------------------------------\nL = DBM:GetModLocalization(523)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ширрак Страж Мертвых\"\n})\n\n-----------------------\n--  Exarch Maladaar  --\n-----------------------\nL = DBM:GetModLocalization(524)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Экзарх Маладаар\"\n})\n\n------------------\n--  Mana-Tombs  --\n------------------\n--    Trash     --\n------------------\nL = DBM:GetModLocalization(\"AuctTombsTrash\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Трэш\"\n})\n\n-------------------\n--  Pandemonius  --\n-------------------\nL = DBM:GetModLocalization(534)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Пандемоний\"\n})\n\n---------------\n--  Tavarok  --\n---------------\nL = DBM:GetModLocalization(535)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Таварок\"\n})\n\n----------------------------\n--  Nexus-Prince Shaffar  --\n----------------------------\nL = DBM:GetModLocalization(537)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Принц Шаффар\"\n})\n\n-----------\n--  Yor  --\n-----------\nL = DBM:GetModLocalization(536)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Йор\"\n})\n\n---------------------\n--  Sethekk Halls  --\n-----------------------\n--  Darkweaver Syth  --\n-----------------------\nL = DBM:GetModLocalization(541)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Темнопряд Сит\"\n})\n\nL:SetWarningLocalization({\n\twarnSummon\t= \"Призыв Элементалей\"\n})\n\nL:SetOptionLocalization({\n\twarnSummon\t= \"Показывать предупреждение для призванных элементалей\"\n})\n\n------------\n--  Anzu  --\n------------\nL = DBM:GetModLocalization(542)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Анзу\"\n})\n\nL:SetWarningLocalization({\n\twarnBrood\t= \"Потомок Анзу\",\n\twarnStoned\t= \"%s returned to stone\"\n})\n\nL:SetOptionLocalization({\n\twarnBrood\t= \"Показывать предупреждение для Потомок Анзу\",\n\twarnStoned\t= \"Показывать предупреждение для spirits returning to stone\"\n})\n\nL:SetMiscLocalization({\n\tBirdStone\t= \"%s returns to stone.\"\n})\n\n------------------------\n--  Talon King Ikiss  --\n------------------------\nL = DBM:GetModLocalization(543)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Король воронов Айкисс\"\n})\n\n------------------------\n--  Shadow Labyrinth  --\n--------------------------\n--  Ambassador Hellmaw  --\n--------------------------\nL = DBM:GetModLocalization(544)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Посол Гиблочрев\"\n})\n\n------------------------------\n--  Blackheart the Inciter  --\n------------------------------\nL = DBM:GetModLocalization(545)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Черносерд Подстрекатель\"\n})\n\n--------------------------\n--  Grandmaster Vorpil  --\n--------------------------\nL = DBM:GetModLocalization(546)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Великий мастер Ворпил\"\n})\n\n--------------\n--  Murmur  --\n--------------\nL = DBM:GetModLocalization(547)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Бормотун\"\n})\n\n-------------------------------\n--  Old Hillsbrad Foothills  --\n-------------------------------\n--  Lieutenant Drake  --\n------------------------\nL = DBM:GetModLocalization(538)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Лейтенант Дрейк\"\n})\n\n-----------------------\n--  Captain Skarloc  --\n-----------------------\nL = DBM:GetModLocalization(539)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Капитан Скарлок\"\n})\n\n--------------------\n--  Epoch Hunter  --\n--------------------\nL = DBM:GetModLocalization(540)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Охотник Вечности\"\n})\n\n------------------------\n--  The Black Morass  --\n------------------------\n--  Chrono Lord Deja  --\n------------------------\nL = DBM:GetModLocalization(552)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Повелитель времени Дежа\"\n})\n\n----------------\n--  Temporus  --\n----------------\nL = DBM:GetModLocalization(553)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Темпорус\"\n})\n\n--------------\n--  Aeonus  --\n--------------\nL = DBM:GetModLocalization(554)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Эонус\"\n})\n\n---------------------\n--  Portal Timers  --\n---------------------\nL = DBM:GetModLocalization(\"PT\")\n\nL:SetGeneralLocalization({\n\tname = \"Таймеры Порталов (ПВ)\"\n})\n\nL:SetWarningLocalization({\n\tWarnWavePortalSoon\t= \"Скоро новый портал\",\n\tWarnWavePortal\t\t= \"Портал %d\",\n\tWarnBossPortal\t\t= \"Появился босс\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextPortal\t\t= \"Портал %d\"\n})\n\nL:SetOptionLocalization({\n\tWarnWavePortalSoon\t= \"Показывать предварительное предупреждение для нового портала\",\n\tWarnWavePortal\t\t= \"Показывать предупреждение для нового портала\",\n\tWarnBossPortal\t\t= \"Показывать предупреждение для появления босса\",\n\tTimerNextPortal\t\t= \"Показывать таймер для следующего портала (после Босса)\",\n\tShowAllPortalTimers\t= \"Показывать таймеры для всех порталов (неточно)\"\n})\n\nL:SetMiscLocalization({\n\tShielddown\t\t\t= \"Нет! Будь проклята эта жалкая смертная оболочка!\"\n})\n\n--------------------\n--  The Mechanar  --\n-----------------------------\n--  Gatewatcher Gyro-Kill  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gyrokill\")--Not in EJ\n\nL:SetGeneralLocalization({\n\tname = \"Страж ворот Точеный Нож\"\n})\n\n-----------------------------\n--  Gatewatcher Iron-Hand  --\n-----------------------------\nL = DBM:GetModLocalization(\"Ironhand\")--Not in EJ\n\nL:SetGeneralLocalization({\n\tname = \"Страж ворот Стальная Клешня\"\n})\n\nL:SetMiscLocalization({\n\tJackHammer\t= \"%s угрожающе поднимает свой молот...\"\n})\n\n------------------------------\n--  Mechano-Lord Capacitus  --\n------------------------------\nL = DBM:GetModLocalization(563)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Механолорд Конденсарон\"\n})\n\n------------------------------\n--  Nethermancer Sepethrea  --\n------------------------------\nL = DBM:GetModLocalization(564)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Пустомант Сепетрея\"\n})\n\n--------------------------------\n--  Pathaleon the Calculator  --\n--------------------------------\nL = DBM:GetModLocalization(565)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Паталеон Вычислитель\"\n})\n\n--------------------\n--  The Botanica  --\n--------------------------\n--  Commander Sarannis  --\n--------------------------\nL = DBM:GetModLocalization(558)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Командир Сараннис\"\n})\n\n------------------------------\n--  High Botanist Freywinn  --\n------------------------------\nL = DBM:GetModLocalization(559)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Верховный ботаник Фрейвин\"\n})\n\n-----------------------------\n--  Thorngrin the Tender  --\n-----------------------------\nL = DBM:GetModLocalization(560)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Скалезуб Скорбный\"\n})\n\n-----------\n--  Laj  --\n-----------\nL = DBM:GetModLocalization(561)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ладж\"\n})\n\n---------------------\n--  Warp Splinter  --\n---------------------\nL = DBM:GetModLocalization(562)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Узлодревень\"\n})\n\n--------------------\n--  The Arcatraz  --\n----------------------------\n--  Zereketh the Unbound  --\n----------------------------\nL = DBM:GetModLocalization(548)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Зерекет Бездонный\"\n})\n\n-----------------------------\n--  Dalliah the Doomsayer  --\n-----------------------------\nL = DBM:GetModLocalization(549)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Даллия Глашатай Судьбы\"\n})\n\n---------------------------------\n--  Wrath-Scryer Soccothrates  --\n---------------------------------\nL = DBM:GetModLocalization(550)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Провидец Гнева Соккорат\"\n})\n\n-------------------------\n--  Harbinger Skyriss  --\n-------------------------\nL = DBM:GetModLocalization(551)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Предвестник Скайрисс\"\n})\n\nL:SetWarningLocalization({\n\twarnSplitSoon\t= \"Иллюзия Предвестника Скоро\",\n\twarnSplit\t\t= \"Иллюзия Предвестника\"\n})\n\nL:SetOptionLocalization({\n\twarnSplitSoon\t= \"Показывать предупреждение для Иллюзия Предвестника скоро\",\n\twarnSplit\t\t= \"Показывать предупреждение для Иллюзия Предвестника\"\n})\n\nL:SetMiscLocalization({\n\tSplit\t= \"Мы бесчисленны, как звезды! Мы заполоним вселенную!\"\n})\n\n--------------------------\n--  Magisters' Terrace  --\n--------------------------\n--  Selin Fireheart  --\n-----------------------\nL = DBM:GetModLocalization(530)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Селин Огненное Сердце\"\n})\n\nL:SetWarningLocalization({\n\twarningFelCrystal\t= \"Кристалл Скверны - Смени Цель\"\n})\n\nL:SetTimerLocalization({\n\ttimerFelCrystal\t\t= \"~Кристалл Скверны\"\n})\n\nL:SetOptionLocalization({\n\twarningFelCrystal\t= \"Показывать особое предупреждение смены целей для Кристалл Скверны\",\n\ttimerFelCrystal\t\t= \"Показывать таймер для Кристалл Скверны\"\n})\n\n----------------\n--  Vexallus  --\n----------------\nL = DBM:GetModLocalization(531)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Вексалиус\"\n})\n\nL:SetWarningLocalization({\n\twarnEnergy\t= \"Чистая энергия - Смени Цель\"\n})\n\nL:SetOptionLocalization({\n\twarnEnergy\t= \"Показывать предупреждение для Чистая энергия\"\n})\n\n--------------------------\n--  Priestess Delrissa  --\n--------------------------\nL = DBM:GetModLocalization(532)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Жрица Делрисса\"\n})\n\nL:SetMiscLocalization({\n\tDelrissaEnd\t\t= \"На это... я... не рассчитывала...\"\n})\n\n------------------------------------\n--  Kael'thas Sunstrider (Party)  --\n------------------------------------\nL = DBM:GetModLocalization(533)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Кель'тас Солнечный Скиталец (Группа)\"\n})\n\nL:SetMiscLocalization({\n\tKaelP2\t= \"Я переверну ваш мир... вверх... дном.\"\n})\n"
  },
  {
    "path": "DBM-Party-BC/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n-------------------------\n--  Hellfire Ramparts  --\n-----------------------------\n--  Watchkeeper Gargolmar  --\n-----------------------------\n-- L = DBM:GetModLocalization(527)\n\n--------------------------\n--  Omor the Unscarred  --\n--------------------------\n-- L = DBM:GetModLocalization(528)\n\n------------------------\n--  Nazan & Vazruden  --\n------------------------\n-- L = DBM:GetModLocalization(529)\n\n-------------------------\n--  The Blood Furnace  --\n-------------------------\n--  The Maker  --\n-----------------\n-- L = DBM:GetModLocalization(555)\n\n---------------\n--  Broggok  --\n---------------\n-- L = DBM:GetModLocalization(556)\n\n----------------------------\n--  Keli'dan the Breaker  --\n----------------------------\n-- L = DBM:GetModLocalization(557)\n\n---------------------------\n--  The Shattered Halls  --\n--------------------------------\n--  Grand Warlock Nethekurse  --\n--------------------------------\n-- L = DBM:GetModLocalization(566)\n\n--------------------------\n--  Blood Guard Porung  --\n--------------------------\n-- L = DBM:GetModLocalization(728)\n\n--------------------------\n--  Warbringer O'mrogg  --\n--------------------------\n-- L = DBM:GetModLocalization(568)\n\n----------------------------------\n--  Warchief Kargath Bladefist  --\n----------------------------------\n-- L = DBM:GetModLocalization(569)\n\n------------------\n--  Slave Pens  --\n--------------------------\n--  Mennu the Betrayer  --\n--------------------------\n-- L = DBM:GetModLocalization(570)\n\n---------------------------\n--  Rokmar the Crackler  --\n---------------------------\n-- L = DBM:GetModLocalization(571)\n\n------------------\n--  Quagmirran  --\n------------------\n-- L = DBM:GetModLocalization(572)\n\n--------------------\n--  The Underbog  --\n--------------------\n--  Hungarfen  --\n-----------------\n-- L = DBM:GetModLocalization(576)\n\n---------------\n--  Ghaz'an  --\n---------------\n-- L = DBM:GetModLocalization(577)\n\n--------------------------\n--  Swamplord Musel'ek  --\n--------------------------\n-- L = DBM:GetModLocalization(578)\n\n-------------------------\n--  The Black Stalker  --\n-------------------------\n-- L = DBM:GetModLocalization(579)\n\n----------------------\n--  The Steamvault  --\n---------------------------\n--  Hydromancer Thespia  --\n---------------------------\n-- L = DBM:GetModLocalization(573)\n\n-----------------------------\n--  Mekgineer Steamrigger  --\n-----------------------------\nL = DBM:GetModLocalization(574)\n\nL:SetMiscLocalization({\n\tMechs\t= \"好好的修理它們，孩子們!\"\n})\n\n--------------------------\n--  Warlord Kalithresh  --\n--------------------------\n-- L = DBM:GetModLocalization(575)\n\n-----------------------\n--  Auchenai Crypts  --\n--------------------------------\n--  Shirrak the Dead Watcher  --\n--------------------------------\n-- L = DBM:GetModLocalization(523)\n\n-----------------------\n--  Exarch Maladaar  --\n-----------------------\n-- L = DBM:GetModLocalization(524)\n\n------------------\n--  Mana-Tombs  --\n-------------------\n--  Pandemonius  --\n-------------------\n-- L = DBM:GetModLocalization(534)\n\n---------------\n--  Tavarok  --\n---------------\n-- L = DBM:GetModLocalization(535)\n\n----------------------------\n--  Nexus-Prince Shaffar  --\n----------------------------\n-- L = DBM:GetModLocalization(537)\n\n-----------\n--  Yor  --\n-----------\n-- L = DBM:GetModLocalization(536)\n\n---------------------\n--  Sethekk Halls  --\n-----------------------\n--  Darkweaver Syth  --\n-----------------------\n-- L = DBM:GetModLocalization(541)\n\n------------\n--  Anzu  --\n------------\nL = DBM:GetModLocalization(542)\n\nL:SetWarningLocalization({\n\twarnStoned\t= \"%s returned to stone\"\n})\n\nL:SetOptionLocalization({\n\twarnStoned\t= \"Show warning for spirits returning to stone\"\n})\n\nL:SetMiscLocalization({\n\tBirdStone\t= \"%s returns to stone.\"\n})\n\n------------------------\n--  Talon King Ikiss  --\n------------------------\n-- L = DBM:GetModLocalization(543)\n\n------------------------\n--  Shadow Labyrinth  --\n--------------------------\n--  Ambassador Hellmaw  --\n--------------------------\n-- L = DBM:GetModLocalization(544)\n\n------------------------------\n--  Blackheart the Inciter  --\n------------------------------\n-- L = DBM:GetModLocalization(545)\n\n--------------------------\n--  Grandmaster Vorpil  --\n--------------------------\n-- L = DBM:GetModLocalization(546)\n\n--------------\n--  Murmur  --\n--------------\n-- L = DBM:GetModLocalization(547)\n\n-------------------------------\n--  Old Hillsbrad Foothills  --\n-------------------------------\n--  Lieutenant Drake  --\n------------------------\n-- L = DBM:GetModLocalization(538)\n\n-----------------------\n--  Captain Skarloc  --\n-----------------------\n-- L = DBM:GetModLocalization(539)\n\n--------------------\n--  Epoch Hunter  --\n--------------------\n-- L = DBM:GetModLocalization(540)\n\n------------------------\n--  The Black Morass  --\n------------------------\n--  Chrono Lord Deja  --\n------------------------\n-- L = DBM:GetModLocalization(552)\n\n----------------\n--  Temporus  --\n----------------\n-- L = DBM:GetModLocalization(553)\n\n--------------\n--  Aeonus  --\n--------------\nL = DBM:GetModLocalization(554)\n\nL:SetMiscLocalization({\n\tAeonusFrenzy\t= \"%s被激怒了!\"\n})\n\n---------------------\n--  Portal Timers  --\n---------------------\nL = DBM:GetModLocalization(\"PT\")\n\nL:SetGeneralLocalization({\n\tname = \"時間間隙(時光洞穴)\"\n})\n\nL:SetWarningLocalization({\n\tWarnWavePortalSoon\t= \"新的時間裂隙即將到來\",\n\tWarnWavePortal\t\t= \"第%d個時間裂隙\",\n\tWarnBossPortal\t\t= \"首領到來\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextPortal\t\t= \"第%d個時間裂隙\"\n})\n\nL:SetOptionLocalization({\n\tWarnWavePortalSoon\t= \"為新的時間裂隙顯示預先警告\",\n\tWarnWavePortal\t\t= \"為新的時間裂隙顯示警告\",\n\tWarnBossPortal\t\t= \"為首領到來顯示警告\",\n\tTimerNextPortal\t\t= \"為下一次時間裂隙顯示計時器(擊敗首領後)\",\n\tShowAllPortalTimers\t= \"為所有時間裂隙顯示計時器(不準確)\"\n})\n\nL:SetMiscLocalization({\n\tPortalCheck\t\t\t= \"時間裂隙開啟:(%d+)/18\",\n\tShielddown\t\t\t= \"這個該死的軀體既虛弱又平凡!\"\n})\n\n--------------------\n--  The Mechanar  --\n-----------------------------\n--  Gatewatcher Gyro-Kill  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gyrokill\")--Not in EJ\n\nL:SetGeneralLocalization({\n\tname = \"看守者蓋洛奇歐\"\n})\n\n-----------------------------\n--  Gatewatcher Iron-Hand  --\n-----------------------------\nL = DBM:GetModLocalization(\"Ironhand\")--Not in EJ\n\nL:SetGeneralLocalization({\n\tname = \"看守者鐵手\"\n})\n\nL:SetMiscLocalization({\n\tJackHammer\t= \"%s威嚇地舉起他的錘子...\"\n})\n\n------------------------------\n--  Mechano-Lord Capacitus  --\n------------------------------\n-- L = DBM:GetModLocalization(563)\n\n------------------------------\n--  Nethermancer Sepethrea  --\n------------------------------\n-- L = DBM:GetModLocalization(564)\n\n--------------------------------\n--  Pathaleon the Calculator  --\n--------------------------------\n-- L = DBM:GetModLocalization(565)\n\n--------------------\n--  The Botanica  --\n--------------------------\n--  Commander Sarannis  --\n--------------------------\n-- L = DBM:GetModLocalization(558)\n\n------------------------------\n--  High Botanist Freywinn  --\n------------------------------\n-- L = DBM:GetModLocalization(559)\n\n-----------------------------\n--  Thorngrin the Tender  --\n-----------------------------\n-- L = DBM:GetModLocalization(560)\n\n-----------\n--  Laj  --\n-----------\n-- L = DBM:GetModLocalization(561)\n\n---------------------\n--  Warp Splinter  --\n---------------------\n-- L = DBM:GetModLocalization(562)\n\n--------------------\n--  The Arcatraz  --\n----------------------------\n--  Zereketh the Unbound  --\n----------------------------\n-- L = DBM:GetModLocalization(548)\n\n-----------------------------\n--  Dalliah the Doomsayer  --\n-----------------------------\n-- L = DBM:GetModLocalization(549)\n\n---------------------------------\n--  Wrath-Scryer Soccothrates  --\n---------------------------------\n-- L = DBM:GetModLocalization(550)\n\n-------------------------\n--  Harbinger Skyriss  --\n-------------------------\nL = DBM:GetModLocalization(551)\n\nL:SetMiscLocalization({\n\tSplit\t= \"我們跨越宇宙之間，被我們摧毀的世界像星星一樣數不盡!\"\n})\n\n--------------------------\n--  Magisters' Terrace  --\n--------------------------\n--  Selin Fireheart  --\n-----------------------\n-- L = DBM:GetModLocalization(530)\n\n----------------\n--  Vexallus  --\n----------------\n-- L = DBM:GetModLocalization(531)\n\n--------------------------\n--  Priestess Delrissa  --\n--------------------------\nL = DBM:GetModLocalization(532)\n\nL:SetMiscLocalization({\n--\tDelrissaPull\t= \"Annihilate them.\",\n\tDelrissaEnd\t\t= \"跟我計畫的...不一樣。\"\n})\n\n------------------------------------\n--  Kael'thas Sunstrider (Party)  --\n------------------------------------\nL = DBM:GetModLocalization(533)\n\nL:SetMiscLocalization({\n\tKaelP2\t= \"我要讓你們的世界徹底顛覆。\"\n})\n"
  },
  {
    "path": "DBM-Party-Classic/BlackfathomDeeps/Akumai.lua",
    "content": "local mod\t= DBM:NewMod(\"Akumai\", \"DBM-Party-Classic\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4829)\nmod:SetEncounterID(226)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 3815\",\n\t\"SPELL_CAST_SUCCESS 3490\"\n)\n\nlocal warningPoisonCloud\t\t= mod:NewSpellAnnounce(3815, 4)\nlocal warningFrenziedRage\t\t= mod:NewSpellAnnounce(3490, 4)\n\nlocal timerPoisonCloudCD\t\t= mod:NewAITimer(180, 3815, nil, nil, nil, 3)\nlocal timerFrenziedRageCD\t\t= mod:NewAITimer(180, 3490, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerPoisonCloudCD:Start(1-delay)\n\ttimerFrenziedRageCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 3815 then\n\t\twarningPoisonCloud:Show()\n\t\ttimerPoisonCloudCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 3490 then\n\t\twarningFrenziedRage:Show()\n\t\ttimerFrenziedRageCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/BlackfathomDeeps/Gelihast.lua",
    "content": "local mod\t= DBM:NewMod(\"Gelihast\", \"DBM-Party-Classic\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(6243)\nmod:SetEncounterID(221)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 6533\",\n\t\"SPELL_AURA_APPLIED 6533\"\n)\n\nlocal warningNet\t\t\t= mod:NewTargetNoFilterAnnounce(6533, 2)\n\nlocal timerNetCD\t\t\t= mod:NewAITimer(180, 6533, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerNetCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 6533 then\n\t\ttimerNetCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 6533 then\n\t\twarningNet:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/BlackfathomDeeps/GhamooRa.lua",
    "content": "local mod\t= DBM:NewMod(\"GhamooRa\", \"DBM-Party-Classic\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4887)\nmod:SetEncounterID(219)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 5568\"\n)\n\nlocal warningTrample\t\t\t= mod:NewSpellAnnounce(5568, 2)\n\nlocal timerTrampleCD\t\t\t= mod:NewAITimer(180, 5568, nil, nil, nil, 3)\n\nfunction mod:OnCombatStart(delay)\n\ttimerTrampleCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 5568 then\n\t\twarningTrample:Show()\n\t\ttimerTrampleCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/BlackfathomDeeps/LadySerevess.lua",
    "content": "local mod\t= DBM:NewMod(\"LadySerevess\", \"DBM-Party-Classic\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4831)\nmod:SetEncounterID(220)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 246\",\n\t\"SPELL_AURA_APPLIED 246\"\n)\n\nlocal warningSlow\t\t\t= mod:NewTargetNoFilterAnnounce(246, 2)\n\nlocal timerSlowCD\t\t\t= mod:NewAITimer(180, 246, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerSlowCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 246 and args:IsSrcTypeHostile() then\n\t\ttimerSlowCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 246 and args:IsDestTypePlayer() then\n\t\twarningSlow:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/BlackfathomDeeps/OldSerrakis.lua",
    "content": "local mod\t= DBM:NewMod(\"OldSerrakis\", \"DBM-Party-Classic\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4830)\nmod:SetEncounterID(224)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/BlackfathomDeeps/TwilightLordKelris.lua",
    "content": "local mod\t= DBM:NewMod(\"TwilightLordKelris\", \"DBM-Party-Classic\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4832)\nmod:SetEncounterID(225)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 8399\",\n\t\"SPELL_AURA_APPLIED 8399\"\n)\n\n--TODO, maybe interrupt warning for mind blast\nlocal warningSleep\t\t\t= mod:NewTargetNoFilterAnnounce(8399, 2)\n\nlocal timerSleepCD\t\t\t= mod:NewAITimer(180, 8399, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerSleepCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 8399 and args:IsSrcTypeHostile() then\n\t\ttimerSleepCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 8399 and args:IsDestTypePlayer() then\n\t\twarningSleep:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/AmbassadorFlamelash.lua",
    "content": "local mod\t= DBM:NewMod(384, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9156)\nmod:SetEncounterID(242)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/BaelGar.lua",
    "content": "local mod\t= DBM:NewMod(377, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9016)\nmod:SetEncounterID(235)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/EmperorDagranThaurissan.lua",
    "content": "local mod\t= DBM:NewMod(387, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9019)--Moira 8929\nmod:SetEncounterID(245)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/FineousDarkvire.lua",
    "content": "local mod\t= DBM:NewMod(376, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9056)\nmod:SetEncounterID(234)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/GeneralAngerforge.lua",
    "content": "local mod\t= DBM:NewMod(378, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9033)\nmod:SetEncounterID(236)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/Gerstahn.lua",
    "content": "local mod\t= DBM:NewMod(369, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9018)\nmod:SetEncounterID(227)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/GolemLordArgelmach.lua",
    "content": "local mod\t= DBM:NewMod(379, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(8983)\nmod:SetEncounterID(237)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/HoundmasterGrebmar.lua",
    "content": "local mod\t= DBM:NewMod(371, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9319)\nmod:SetEncounterID(229)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/HurleyBlackbreath.lua",
    "content": "local mod\t= DBM:NewMod(380, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9537)\nmod:SetEncounterID(238)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/LordIncendius.lua",
    "content": "local mod\t= DBM:NewMod(374, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9017)\nmod:SetEncounterID(232)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/LordRoccor.lua",
    "content": "local mod\t= DBM:NewMod(370, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9025)\nmod:SetEncounterID(228)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/Magmus.lua",
    "content": "local mod\t= DBM:NewMod(386, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9938)\nmod:SetEncounterID(244)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/Phalanx.lua",
    "content": "local mod\t= DBM:NewMod(381, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9502)\nmod:SetEncounterID(239)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/PluggerSpazzring.lua",
    "content": "local mod\t= DBM:NewMod(383, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9499)\nmod:SetEncounterID(241)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/PyromancerLoregrain.lua",
    "content": "local mod\t= DBM:NewMod(373, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9024)\nmod:SetEncounterID(231)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/RingofLaw.lua",
    "content": "local mod\t= DBM:NewMod(372, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9028, 9031, 9029, 9030, 9032, 9027)--Register combat with any of the 6\nmod:SetEncounterID(230)\n\nmod:SetBossHPInfoToHighest()\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"UNIT_DIED\"\n)\n\nfunction mod:OnCombatStart()\n\tself.vb.bossLeft = 1--Force set number of bosses we expect to kill to 1 on engage for wipe/boss statistics\n\tself.numBoss = 1--^^\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\t--Grizzle, Anub'shiah, Eviscerator, Ok'thor the Breaker, Hedrum the Creeper, Gorosh the Dervish\n\tif cid == 9028 or cid == 9031 or cid == 9029 or cid == 9030 or cid == 9032 or cid == 9027 then\n\t\t--self.vb.bossLeft = self.vb.bossLeft - 1\n\t\t--if self.vb.bossLeft == 0 then\n\t\t\tDBM:EndCombat(self)\n\t\t--end\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/TheSeven.lua",
    "content": "local mod\t= DBM:NewMod(385, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9035, 9039, 9040, 9037, 9034, 9038, 9036)--9035 Anger'rel, 9039/doomrel, 9040/doperel, 9037/gloomrel, 9034/haterel, 9038/seethrel, 9036/vilerel\nmod:SetEncounterID(243)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/BlackrockDepths/WardenStilgiss.lua",
    "content": "local mod\t= DBM:NewMod(375, \"DBM-Party-Classic\", 2, 228)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9041)\nmod:SetEncounterID(233)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/DBM-Party-Classic.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Dungeons (Classic)|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Gruppe-Classic|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Mazmorras (Clásico)|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Calabozos (Clásico)|r\n## Title-ptBR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Masmorras (Clássico)|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Donjons (Classique)|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Подземелье (классический)|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0던전 (클래식)|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0隊伍首領-傳統|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0队伍首领(经典旧世)|r\n\n## Author: MysticalOS\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMPartyClassic_AllSavedVars\n## SavedVariablesPerCharacter: DBMPartyClassic_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: PARTY\n## X-DBM-Mod-Category: Classic\n## X-DBM-StatTypes: normal\n\n## X-DBM-Mod-SubCategoriesID: Blackfathom Deeps,Blackrock Depths,Lower Blackrock Spire,Upper Blackrock Spire,The Deadmines,Dire Maul,Gnomeregan,Maraudon,Ragefire Chasm,Razorfen Downs,Razorfen Kraul,Scarlet Monastery,Scholomance,Shadowfang Keep,Stormwind Stockade,Stratholme,Sunken Temple,Uldaman,Wailing Caverns,Zul'Farrak\n## X-DBM-Mod-SubCategoriesID-deDE: Tiefschwarze Grotte,Schwarzfelstiefen,Untere Schwarzfelsspitze,Obere Schwarzfelsspitze,Die Todesminen,Düsterbruch,Gnomeregan,Maraudon,Der Flammenschlund,Hügel der Klingenhauer,Kral der Klingenhauer,Das Scharlachrote Kloster,Scholomance,Burg Schattenfang,Verlies von Sturmwind,Stratholme,Versunkener Tempel,Uldaman,Die Höhlen des Wehklagens,\tZul'Farrak\n## X-DBM-Mod-SubCategoriesID-esES: Cavernas de Brazanegra,Profundidades de Roca Negra,Cumbre de Roca Negra Inferior,Cumbre de Roca Negra Superior,Las Minas de la Muerte,La Masacre,Gnomeregan,Maraudon,Sima Ígnea,Zahúrda Rajacieno,Horado Rajacieno,Monasterio Escarlata,Scholomance,Castillo de Colmillo Oscuro,Mazmorras de Ventormenta,Stratholme,Templo Sumergido,Uldaman,Cuevas de los Lamentos,Zul'Farrak\n## X-DBM-Mod-SubCategoriesID-esMX: Cavernas de Brazanegra,Profundidades de Roca Negra,Cumbre de Roca Negra inferior,Cumbre de Roca Negra superior,Las Minas de la Muerte,La Masacre,Gnomeregan,Maraudon,Sima Ígnea,Zahúrda Rajacieno,Horado Rajacieno,Monasterio Escarlata,Scholomance,Castillo de Colmillo Oscuro,Mazmorras de Ventormenta,Stratholme,Templo Sumergido,Uldaman,Cuevas de los Lamentos,Zul'Farrak\n## X-DBM-Mod-SubCategoriesID-frFR: Profondeurs de Brassenoire,Profondeurs de Rochenoire,Bas du pic Rochenoire,Sommet du pic Rochenoire,Les Mortemines,Hache-Tripes,Gnomeregan,Maraudon,Gouffre de Ragefeu,Souilles de Tranchebauge,Kraal de Tranchebauge,Monastère Écarlate,Scholomance,Donjon d’Ombrecroc,Prison de Hurlevent,Stratholme,Temple englouti,Uldaman,Cavernes des Lamentations,Zul’Farrak\n## X-DBM-Mod-SubCategoriesID-ruRU: Непроглядная Пучина,Глубины Черной горы,Нижняя часть пика Черной горы,Верхняя часть пика Черной горы,Мертвые копи,Забытый город,Гномреган,Мародон,Огненная Пропасть,Курганы Иглошкурых,Лабиринты Иглошкурых,Монастырь Алого ордена,Некроситет,Крепость Темного Клыка,Тюрьма Штормграда,Стратхольм,Затонувший храм,Ульдаман,Пещеры Стенаний,Зул'Фаррак\n## X-DBM-Mod-SubCategoriesID-koKR: 검은심연 나락,검은바위 나락,검은바위 첨탑 하층,검은바위 첨탑 상층,죽음의 폐광,혈투의 전장,놈리건,마라우돈,성난불길 협곡,가시덩굴 구릉,가시덩굴 우리,붉은십자군 수도원,스칼로맨스,그림자송곳니 성채,스톰윈드 지하감옥,스트라솔름,가라앉은 사원,울다만,통곡의 동굴,줄파락\n## X-DBM-Mod-SubCategoriesID-zhTW: 黑澗深淵,黑石深淵,黑石塔下層,黑石塔上層,死亡礦坑,厄運之槌,諾姆瑞根,瑪拉頓,怒焰裂谷,剃刀高地,剃刀沼澤,血色修道院,通靈學院,影牙城堡,暴風城監獄,斯坦索姆,沉沒的神廟,奧達曼,哀嚎洞穴,祖爾法拉克\n## X-DBM-Mod-SubCategoriesID-zhCN: 黑暗深渊,黑石深渊,黑石塔下层,黑石塔上层,死亡矿井,厄运之槌,诺莫瑞根,玛拉顿,怒焰裂谷,剃刀高地,剃刀沼泽,血色修道院,通灵学院,影牙城堡,暴风城监狱,斯坦索姆,沉没的神庙,奥达曼,哀嚎洞穴,祖尔法拉克\n\n## X-DBM-Mod-Name: Dungeons (Classic)\n## X-DBM-Mod-Name-deDE: Gruppe (Classic)\n## X-DBM-Mod-Name-esES: Mazmorras (Clásico)\n## X-DBM-Mod-Name-esMX: Calabozos (Clásico)\n## X-DBM-Mod-Name-ptBR: Masmorras (Clássico)\n## X-DBM-Mod-Name-frFR: Donjons (Classique)\n## X-DBM-Mod-Name-ruRU: Подземелье (классический)\n## X-DBM-Mod-Name-koKR: 던전 (클래식)\n## X-DBM-Mod-Name-zhTW: 隊伍首領 (傳統)\n## X-DBM-Mod-Name-zhCN: 队伍首领(经典旧世)\n## X-DBM-Mod-Sort: 1115\n## X-DBM-Mod-MapID: 689,705,722,757,700,692,751,681,761,762,763,764,765,691,766,688,693,750,687\n## X-DBM-Mod-LoadZone: Blackfathom Deeps,Blackrock Depths,Lower Blackrock Spire,Upper Blackrock Spire,The Deadmines,Dire Maul,Gnomeregan,Maraudon,Ragefire Chasm,Razorfen Downs,Razorfen Kraul,Scarlet Monastery,Scholomance,Shadowfang Keep,Stormwind Stockade,Stratholme,Sunken Temple,Uldaman,Wailing Caverns,Zul'Farrak\n## X-DBM-Mod-LoadZone-deDE: Tiefschwarze Grotte,Schwarzfelstiefen,Untere Schwarzfelsspitze,Obere Schwarzfelsspitze,Die Todesminen,Düsterbruch,Gnomeregan,Maraudon,Der Flammenschlund,Hügel der Klingenhauer,Kral der Klingenhauer,Das Scharlachrote Kloster,Scholomance,Burg Schattenfang,Verlies von Sturmwind,Stratholme,Versunkener Tempel,Uldaman,Die Höhlen des Wehklagens,\tZul'Farrak\n## X-DBM-Mod-LoadZone-esES: Cavernas de Brazanegra,Profundidades de Roca Negra,Cumbre de Roca Negra Inferior,Cumbre de Roca Negra Superior,Las Minas de la Muerte,La Masacre,Gnomeregan,Maraudon,Sima Ígnea,Zahúrda Rajacieno,Horado Rajacieno,Monasterio Escarlata,Scholomance,Castillo de Colmillo Oscuro,Mazmorras de Ventormenta,Stratholme,Templo Sumergido,Uldaman,Cuevas de los Lamentos,Zul'Farrak\n## X-DBM-Mod-LoadZone-esMX: Cavernas de Brazanegra,Profundidades de Roca Negra,Cumbre de Roca Negra inferior,Cumbre de Roca Negra superior,Las Minas de la Muerte,La Masacre,Gnomeregan,Maraudon,Sima Ígnea,Zahúrda Rajacieno,Horado Rajacieno,Monasterio Escarlata,Scholomance,Castillo de Colmillo Oscuro,Mazmorras de Ventormenta,Stratholme,Templo Sumergido,Uldaman,Cuevas de los Lamentos,Zul'Farrak\n## X-DBM-Mod-LoadZone-frFR: Profondeurs de Brassenoire,Profondeurs de Rochenoire,Bas du pic Rochenoire,Sommet du pic Rochenoire,Les Mortemines,Hache-Tripes,Gnomeregan,Maraudon,Gouffre de Ragefeu,Souilles de Tranchebauge,Kraal de Tranchebauge,Monastère Écarlate,Scholomance,Donjon d’Ombrecroc,Prison de Hurlevent,Stratholme,Temple englouti,Uldaman,Cavernes des Lamentations,Zul’Farrak\n## X-DBM-Mod-LoadZone-ruRU: Непроглядная Пучина,Глубины Черной горы,Нижняя часть пика Черной горы,Верхняя часть пика Черной горы,Мертвые копи,Забытый город,Гномреган,Мародон,Огненная Пропасть,Курганы Иглошкурых,Лабиринты Иглошкурых,Монастырь Алого ордена,Некроситет,Крепость Темного Клыка,Тюрьма Штормграда,Стратхольм,Затонувший храм,Ульдаман,Пещеры Стенаний,Зул'Фаррак\n## X-DBM-Mod-LoadZone-koKR: 검은심연 나락,검은바위 나락,검은바위 첨탑 하층,검은바위 첨탑 상층,죽음의 폐광,혈투의 전장,놈리건,마라우돈,성난불길 협곡,가시덩굴 구릉,가시덩굴 우리,붉은십자군 수도원,스칼로맨스,그림자송곳니 성채,스톰윈드 지하감옥,스트라솔름,가라앉은 사원,울다만,통곡의 동굴,줄파락\n## X-DBM-Mod-LoadZone-zhTW: 黑澗深淵,黑石深淵,黑石塔下層,黑石塔上層,死亡礦坑,厄運之槌,諾姆瑞根,瑪拉頓,怒焰裂谷,剃刀高地,剃刀沼澤,血色修道院,通靈學院,影牙城堡,暴風城監獄,斯坦索姆,沉沒的神廟,奧達曼,哀嚎洞穴,祖爾法拉克\n## X-DBM-Mod-LoadZone-zhCN: 黑暗深渊,黑石深渊,黑石塔下层,黑石塔上层,死亡矿井,厄运之槌,诺莫瑞根,玛拉顿,怒焰裂谷,剃刀高地,剃刀沼泽,血色修道院,通灵学院,影牙城堡,暴风城监狱,斯坦索姆,沉没的神庙,奥达曼,哀嚎洞穴,祖尔法拉克\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.es.lua\nlocalization.mx.lua\nlocalization.fr.lua\nlocalization.ru.lua\nlocalization.kr.lua\nlocalization.tw.lua\nlocalization.cn.lua\n\nBlackfathomDeeps\\GhamooRa.lua\nBlackfathomDeeps\\LadySerevess.lua\nBlackfathomDeeps\\Gelihast.lua\nBlackfathomDeeps\\TwilightLordKelris.lua\nBlackfathomDeeps\\OldSerrakis.lua\nBlackfathomDeeps\\Akumai.lua\n\nBlackrockDepths\\Gerstahn.lua\nBlackrockDepths\\LordRoccor.lua\nBlackrockDepths\\HoundmasterGrebmar.lua\nBlackrockDepths\\RingofLaw.lua\nBlackrockDepths\\PyromancerLoregrain.lua\nBlackrockDepths\\LordIncendius.lua\nBlackrockDepths\\WardenStilgiss.lua\nBlackrockDepths\\FineousDarkvire.lua\nBlackrockDepths\\BaelGar.lua\nBlackrockDepths\\GeneralAngerforge.lua\nBlackrockDepths\\GolemLordArgelmach.lua\nBlackrockDepths\\HurleyBlackbreath.lua\nBlackrockDepths\\Phalanx.lua\nBlackrockDepths\\PluggerSpazzring.lua\nBlackrockDepths\\AmbassadorFlamelash.lua\nBlackrockDepths\\TheSeven.lua\nBlackrockDepths\\Magmus.lua\nBlackrockDepths\\EmperorDagranThaurissan.lua\n\nLowerBlackrockSpire\\HighlordOmokk.lua\nLowerBlackrockSpire\\ShadowHunterVoshgajin.lua\nLowerBlackrockSpire\\WarMasterVoone.lua\nLowerBlackrockSpire\\MotherSmolderweb.lua\nLowerBlackrockSpire\\UrokDoomhowl.lua\nLowerBlackrockSpire\\QuartermasterZigris.lua\nLowerBlackrockSpire\\Halycon.lua\nLowerBlackrockSpire\\Gizrul.lua\nLowerBlackrockSpire\\OverlordWyrmthalak.lua\n\nUpperBlackrockSpire\\PyroguardEmberseer.lua\nUpperBlackrockSpire\\SolakarFlamewreath.lua\nUpperBlackrockSpire\\GoralukAnvilcrack.lua\nUpperBlackrockSpire\\JedRunewatcher.lua\nUpperBlackrockSpire\\WarchiefRendBlackhand.lua\nUpperBlackrockSpire\\TheBeast.lua\nUpperBlackrockSpire\\GeneralDrakkisath.lua\n\nDeadmines\\RhahkZor.lua\nDeadmines\\MinerJohnson.lua\nDeadmines\\SneedsShredder.lua\nDeadmines\\Gilnid.lua\nDeadmines\\MrSmite.lua\nDeadmines\\CaptainGreenskin.lua\nDeadmines\\EdwinVanCleef.lua\nDeadmines\\Cookie.lua\n\nDireMaul\\ZevrimThornhoof.lua\nDireMaul\\Hydrospawn.lua\nDireMaul\\Lethtendris.lua\nDireMaul\\Alzzin.lua\nDireMaul\\TendrisWarpwood.lua\nDireMaul\\IllyannaRavenoak.lua\nDireMaul\\MagisterKelendris.lua\nDireMaul\\Immolthar.lua\nDireMaul\\PrinceTortheldrin.lua\nDireMaul\\GuardMoldar.lua\nDireMaul\\StomperKreeg.lua\nDireMaul\\GuardFengus.lua\nDireMaul\\GuardSlipkik.lua\nDireMaul\\CaptainKromcrush.lua\nDireMaul\\ChoRush.lua\nDireMaul\\KingGordok.lua\n\nGnomeregan\\Grubbis.lua\nGnomeregan\\ViscousFallout.lua\nGnomeregan\\Electrocutioner6000.lua\nGnomeregan\\CrowdPummeler.lua\nGnomeregan\\MekgineerThermaplugg.lua\n\nMaraudon\\Noxxion.lua\nMaraudon\\Razorlash.lua\nMaraudon\\TinkererGizlock.lua\nMaraudon\\LordVyletongue.lua\nMaraudon\\CelebrastheCursed.lua\nMaraudon\\Landslide.lua\nMaraudon\\Rotgrip.lua\nMaraudon\\PrincessTheradras.lua\n\nRagefireChasm\\Oggleflint.lua\nRagefireChasm\\Taragaman.lua\nRagefireChasm\\Jergosh.lua\nRagefireChasm\\Bazzalan.lua\n\nRazorfenDowns\\Tutenkash.lua\nRazorfenDowns\\MordreshFireEye.lua\nRazorfenDowns\\Glutton.lua\nRazorfenDowns\\Ragglesnout.lua\nRazorfenDowns\\AmnennartheColdbringer.lua\nRazorfenDowns\\PlaguemawtheRotting.lua\n\nRazorfenKraul\\Roogug.lua\nRazorfenKraul\\AggemThorncurse.lua\nRazorfenKraul\\DeathSpeakerJargba.lua\nRazorfenKraul\\OverlordRamtusk.lua\nRazorfenKraul\\AgathelostheRaging.lua\nRazorfenKraul\\BlindHunter.lua\nRazorfenKraul\\EarthcallerHalmgar.lua\nRazorfenKraul\\CharlgaRazorflank.lua\n\nScarletMonastery\\InterrogatorVishas.lua\nScarletMonastery\\BloodmageThalnos.lua\nScarletMonastery\\HoundmasterLoksey.lua\nScarletMonastery\\ArcanistDoan.lua\nScarletMonastery\\Herod.lua\nScarletMonastery\\Mograine_and_Whitemane.lua\nScarletMonastery\\HighInquisitorFairbanks.lua\n\nScholomance\\KirtonostheHerald.lua\nScholomance\\JandiceBarov.lua\nScholomance\\Rattlegore.lua\nScholomance\\MardukBlackpool.lua\nScholomance\\Vectus.lua\nScholomance\\RasFrostwhisper.lua\nScholomance\\InstructorMalicia.lua\nScholomance\\DoctorTheolenKrastinov.lua\nScholomance\\LorekeeperPolkelt.lua\nScholomance\\TheRavenian.lua\nScholomance\\LordAlexeiBarov.lua\nScholomance\\LadyIlluciaBarov.lua\nScholomance\\DarkmasterGandling.lua\n\nShadowfangkeep\\Rethilgore.lua\nShadowfangkeep\\RazorclawtheButcher.lua\nShadowfangkeep\\BaronSilverlaine.lua\nShadowfangkeep\\CommanderSpringvale.lua\nShadowfangkeep\\OdotheBlindwatcher.lua\nShadowfangkeep\\DeathswornCaptain.lua\nShadowfangkeep\\FenrustheDevourer.lua\nShadowfangkeep\\WolfMasterNandos.lua\nShadowfangkeep\\ArchmageArugal.lua\n\nStormwindStockaid\\Targorr.lua\nStormwindStockaid\\KamDeepfury.lua\nStormwindStockaid\\Hamhock.lua\nStormwindStockaid\\BazilThredd.lua\nStormwindStockaid\\DextrenWard.lua\nStormwindStockaid\\BruegalIronknuckle.lua\n\nStratholme\\HearthsingerForresten.lua\nStratholme\\TimmytheCruel.lua\nStratholme\\CommanderMalor.lua\nStratholme\\WilleyHopebreaker.lua\nStratholme\\InstructorGalford.lua\nStratholme\\Balnazzar.lua\nStratholme\\TheUnforgiven.lua\nStratholme\\BaronessAnastari.lua\nStratholme\\Narubenkan.lua\nStratholme\\MalekithePallid.lua\nStratholme\\MagistrateBarthilas.lua\nStratholme\\RamsteintheGorger.lua\nStratholme\\LordAuriusRivendare.lua\n\nSunkenTemple\\AvatarofHakkar.lua\nSunkenTemple\\JammalantheProphet.lua\nSunkenTemple\\Dreamscythe.lua\nSunkenTemple\\Weaver.lua\nSunkenTemple\\Morphaz.lua\nSunkenTemple\\Hazzas.lua\nSunkenTemple\\ShadeofEranikus.lua\n\nUldaman\\Revelosh.lua\nUldaman\\TheLostDwarves.lua\nUldaman\\Ironaya.lua\nUldaman\\ObsidianSentinel.lua\nUldaman\\AncientStoneKeeper.lua\nUldaman\\GalgannFirehammer.lua\nUldaman\\Grimlok.lua\nUldaman\\Archaedas.lua\n\nWailingCaverns\\LadyAnacondra.lua\nWailingCaverns\\LordPythas.lua\nWailingCaverns\\LordCobrahn.lua\nWailingCaverns\\Kresh.lua\nWailingCaverns\\Skum.lua\nWailingCaverns\\LordSerpentis.lua\nWailingCaverns\\VerantheEverliving.lua\nWailingCaverns\\MutanustheDevourer.lua\nWailingCaverns\\DeviateFaerieDragon.lua\n\nZulFarrak\\Gahzrilla.lua\nZulFarrak\\Antusul.lua\nZulFarrak\\ThekatheMartyr.lua\nZulFarrak\\WitchDoctorZumrah.lua\nZulFarrak\\HydromancerVelrath.lua\nZulFarrak\\Nekrum_Sezzziz.lua\nZulFarrak\\ChiefUkorzSandscalp.lua\n"
  },
  {
    "path": "DBM-Party-Classic/Deadmines/CaptainGreenskin.lua",
    "content": "local mod\t= DBM:NewMod(\"CaptainGreenskin\", \"DBM-Party-Classic\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(647)\nmod:SetEncounterID(166)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 5208\",\n\t\"SPELL_AURA_APPLIED 5208\"\n)\n\n--TODO, consider a cleave timer if not cast too often\nlocal warningPoisonedHarpoon\t\t= mod:NewTargetNoFilterAnnounce(5208, 2, nil, \"RemovePoison\")\n\nlocal timerPoisonedHarpoonCD\t\t= mod:NewAITimer(30, 5208, nil, \"RemovePoison\", nil, 5, nil, DBM_COMMON_L.POISON_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerPoisonedHarpoonCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 5208 then\n\t\ttimerPoisonedHarpoonCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 5208 then\n\t\twarningPoisonedHarpoon:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Deadmines/Cookie.lua",
    "content": "local mod\t= DBM:NewMod(\"Cookie\", \"DBM-Party-Classic\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(645)\nmod:SetEncounterID(165)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 5174\"\n)\n\nlocal specWarnHeal\t\t\t= mod:NewSpecialWarningInterrupt(5174, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerHealCD\t\t\t= mod:NewAITimer(180, 5174, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerHealCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 5174 then\n\t\ttimerHealCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnHeal:Show(args.sourceName)\n\t\t\tspecWarnHeal:Play(\"kickcast\")\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Deadmines/EdwinVanCleef.lua",
    "content": "local mod\t= DBM:NewMod(\"EdwinVanCleef\", \"DBM-Party-Classic\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(639)\nmod:SetEncounterID(167)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 5200\",\n\t\"SPELL_AURA_APPLIED 3391\"\n)\n\nlocal warningThrash\t\t\t\t\t= mod:NewSpellAnnounce(3391, 3)\nlocal warningAllies\t\t\t\t\t= mod:NewSpellAnnounce(5200, 3)\n\nlocal timerTrashD\t\t\t\t\t= mod:NewAITimer(180, 3391, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerTrashD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 5200 and self:AntiSpam(3, 1) then\n\t\twarningAllies:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 3391 and args:IsDestTypeHostile() then\n\t\twarningThrash:Show()\n\t\ttimerTrashD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Deadmines/Gilnid.lua",
    "content": "local mod\t= DBM:NewMod(\"Gilnid\", \"DBM-Party-Classic\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(1763)\nmod:SetEncounterID(163)\nmod:SetModelID(622) -- temporary model, to prevent HD client crash on model preview\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 5213\",\n\t\"SPELL_AURA_APPLIED 5213\"\n)\n\nlocal warningMoltenMetal\t= mod:NewTargetNoFilterAnnounce(5213, 2)\n\nlocal timerMoltenMetalCD\t= mod:NewAITimer(180, 5213, nil, nil, nil, 3)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMoltenMetalCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 5213 then\n\t\ttimerMoltenMetalCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 5213 then\n\t\twarningMoltenMetal:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Deadmines/MinerJohnson.lua",
    "content": "local mod\t= DBM:NewMod(\"MinerJohnson\", \"DBM-Party-Classic\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(3586)\n-- mod:SetEncounterID(1144) -- Doesn't have Encounter ID\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 12097\",\n\t\"SPELL_AURA_APPLIED 12097\"\n)\n\nlocal warningPierceArmor\t\t\t= mod:NewTargetNoFilterAnnounce(12097, 2)\n\nlocal timerPierceArmorCD\t\t\t= mod:NewAITimer(180, 12097, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerPierceArmorCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 12097 then\n\t\ttimerPierceArmorCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 12097 then\n\t\twarningPierceArmor:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Deadmines/MrSmite.lua",
    "content": "local mod\t= DBM:NewMod(\"MrSmite\", \"DBM-Party-Classic\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(646)\nmod:SetEncounterID(164)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 6432\",\n\t\"SPELL_AURA_APPLIED 6435 6264\"\n)\n\nlocal warningSmiteSlam\t\t= mod:NewTargetNoFilterAnnounce(6435, 2)\nlocal warningNimbleReflexes\t= mod:NewTargetNoFilterAnnounce(6264, 2)\n\nlocal timerSmiteStomp\t\t= mod:NewBuffFadesTimer(10, 6432, nil, nil, nil, 2)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 6432 then\n\t\ttimerSmiteStomp:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 6435 then\n\t\twarningSmiteSlam:Show(args.destName)\n\telseif args.spellId == 6264 then\n\t\twarningNimbleReflexes:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Deadmines/RhahkZor.lua",
    "content": "local mod\t= DBM:NewMod(\"RhahkZor\", \"DBM-Party-Classic\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(644)\nmod:SetEncounterID(161)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 6304\",\n\t\"SPELL_AURA_APPLIED 6304\"\n)\n\nlocal warningSlam\t\t\t= mod:NewTargetNoFilterAnnounce(6304, 2)\n\nlocal timerSlamCD\t\t\t= mod:NewAITimer(180, 6304, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerSlamCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 6304 then\n\t\ttimerSlamCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 6304 then\n\t\twarningSlam:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Deadmines/SneedsShredder.lua",
    "content": "local mod\t= DBM:NewMod(\"SneedsShredder\", \"DBM-Party-Classic\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(642, 643)--Shredder, Sneed\nmod:SetEncounterID(162)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 7399 6713 5141\",\n\t\"SPELL_AURA_APPLIED 7399 6713\"\n)\n\nlocal warningFear\t\t\t= mod:NewTargetNoFilterAnnounce(7399, 2)\nlocal warningDisarm\t\t\t= mod:NewTargetNoFilterAnnounce(6713, 2)\nlocal warningEjectSneed\t\t= mod:NewSpellAnnounce(5141, 2)\n\nlocal timerFearCD\t\t\t= mod:NewAITimer(180, 7399, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerDisarmCD\t\t\t= mod:NewAITimer(180, 6713, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerFearCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 7399 and args:IsSrcTypeHostile() then\n\t\ttimerFearCD:Start()\n\telseif args.spellId == 6713 and args:IsSrcTypeHostile() then\n\t\ttimerDisarmCD:Start()\n\telseif args.spellId == 5141 then\n\t\twarningEjectSneed:Show()\n\t\ttimerFearCD:Stop()\n\t\ttimerDisarmCD:Start(1)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 7399 and args:IsDestTypePlayer() then\n\t\twarningFear:Show(args.destName)\n\telseif args.spellId == 6713 and args:IsDestTypePlayer() then\n\t\twarningDisarm:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/DireMaul/Alzzin.lua",
    "content": "local mod\t= DBM:NewMod(405, \"DBM-Party-Classic\", 6, 230)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11492)\nmod:SetEncounterID(346)\n\nmod:RegisterCombat(\"combat\")\n--mod:DisableFriendlyDetection()\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/DireMaul/CaptainKromcrush.lua",
    "content": "local mod\t= DBM:NewMod(415, \"DBM-Party-Classic\", 6, 230)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(14325)\nmod:SetEncounterID(366)\n\nmod:RegisterCombat(\"combat\")\n--mod:DisableFriendlyDetection()\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/DireMaul/ChoRush.lua",
    "content": "local mod\t= DBM:NewMod(416, \"DBM-Party-Classic\", 6, 230)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(14324)\nmod:SetEncounterID(367)\n\nmod:RegisterCombat(\"combat\")\nmod:RegisterKill(\"yell\", L.Defeat)\n--mod:DisableFriendlyDetection()\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/DireMaul/GuardFengus.lua",
    "content": "local mod\t= DBM:NewMod(413, \"DBM-Party-Classic\", 6, 230)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(14321)\nmod:SetEncounterID(364)\n\nmod:RegisterCombat(\"combat\")\n--mod:DisableFriendlyDetection()\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/DireMaul/GuardMoldar.lua",
    "content": "local mod\t= DBM:NewMod(411, \"DBM-Party-Classic\", 6, 230)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(14326)\nmod:SetEncounterID(362)\n\nmod:RegisterCombat(\"combat\")\n--mod:DisableFriendlyDetection()\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/DireMaul/GuardSlipkik.lua",
    "content": "local mod\t= DBM:NewMod(414, \"DBM-Party-Classic\", 6, 230)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(14323)\nmod:SetEncounterID(365)\n\nmod:RegisterCombat(\"combat\")\n--mod:DisableFriendlyDetection()\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/DireMaul/Hydrospawn.lua",
    "content": "local mod\t= DBM:NewMod(403, \"DBM-Party-Classic\", 6, 230)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(13280)\nmod:SetEncounterID(344)\n\nmod:RegisterCombat(\"combat\")\n--mod:DisableFriendlyDetection()\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/DireMaul/IllyannaRavenoak.lua",
    "content": "local mod\t= DBM:NewMod(407, \"DBM-Party-Classic\", 6, 230)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11488)\nmod:SetEncounterID(347)\n\nmod:RegisterCombat(\"combat\")\n--mod:DisableFriendlyDetection()\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/DireMaul/Immolthar.lua",
    "content": "local mod\t= DBM:NewMod(409, \"DBM-Party-Classic\", 6, 230)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11496)\nmod:SetEncounterID(349)\n\nmod:RegisterCombat(\"combat\")\n--mod:DisableFriendlyDetection()\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/DireMaul/KingGordok.lua",
    "content": "local mod\t= DBM:NewMod(417, \"DBM-Party-Classic\", 6, 230)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11501)\nmod:SetEncounterID(368)\n\nmod:RegisterCombat(\"combat\")\n--mod:DisableFriendlyDetection()\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/DireMaul/Lethtendris.lua",
    "content": "local mod\t= DBM:NewMod(404, \"DBM-Party-Classic\", 6, 230)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(14327)\nmod:SetEncounterID(345)\n\nmod:RegisterCombat(\"combat\")\n--mod:DisableFriendlyDetection()\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/DireMaul/MagisterKelendris.lua",
    "content": "local mod\t= DBM:NewMod(408, \"DBM-Party-Classic\", 6, 230)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11487)\nmod:SetEncounterID(348)\n\nmod:RegisterCombat(\"combat\")\n--mod:DisableFriendlyDetection()\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/DireMaul/PrinceTortheldrin.lua",
    "content": "local mod\t= DBM:NewMod(410, \"DBM-Party-Classic\", 6, 230)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11486)\nmod:SetEncounterID(361)\n\nmod:RegisterCombat(\"combat\")\n--mod:DisableFriendlyDetection()\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/DireMaul/StomperKreeg.lua",
    "content": "local mod\t= DBM:NewMod(412, \"DBM-Party-Classic\", 6, 230)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(14322)\nmod:SetEncounterID(363)\n\nmod:RegisterCombat(\"combat\")\n--mod:DisableFriendlyDetection()\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/DireMaul/TendrisWarpwood.lua",
    "content": "local mod\t= DBM:NewMod(406, \"DBM-Party-Classic\", 6, 230)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11489)\nmod:SetEncounterID(350)\n\nmod:RegisterCombat(\"combat\")\n--mod:DisableFriendlyDetection()\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/DireMaul/ZevrimThornhoof.lua",
    "content": "local mod\t= DBM:NewMod(402, \"DBM-Party-Classic\", 6, 230)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11490)\nmod:SetEncounterID(343)\n\nmod:RegisterCombat(\"combat\")\n--mod:DisableFriendlyDetection()\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 22651\"\n)\n\nlocal warnSacrifice\t\t\t\t= mod:NewTargetNoFilterAnnounce(22651, 4)\n\nlocal yellSacrifice\t\t\t\t= mod:NewYell(22651)\n\nfunction mod:SacTarget(targetname)\n\tif not targetname then return end\n\twarnSacrifice:Show(targetname)\n\tif targetname == UnitName(\"player\") then\n\t\tyellSacrifice:Yell()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 22651 and args:IsSrcTypeHostile() then\n\t\tself:BossTargetScanner(args.sourceGUID, \"SacTarget\", 0.1, 8)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Gnomeregan/CrowdPummeler.lua",
    "content": "local mod\t= DBM:NewMod(418, \"DBM-Party-Classic\", 7, 231)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(6229)\nmod:SetEncounterID(381)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 10887 8374\"\n)\n\nlocal specWarnCrowdPummel\t\t\t= mod:NewSpecialWarningSpell(10887, \"Melee\", nil, nil, 2, 2)\n\nlocal timerCrowdPummelCD\t\t\t= mod:NewAITimer(180, 10887, nil, nil, nil, 2)\n\nlocal timerArcingSmashD\t\t\t\t= mod:NewAITimer(180, 8374, nil, \"Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerCrowdPummelCD:Start(1-delay)\n\ttimerArcingSmashD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 10887 then\n\t\tspecWarnCrowdPummel:Show()\n\t\tspecWarnCrowdPummel:Play(\"carefly\")\n\t\ttimerCrowdPummelCD:Start()\n\telseif args.spellId == 8374 then\n\t\ttimerArcingSmashD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Gnomeregan/Electrocutioner6000.lua",
    "content": "local mod\t= DBM:NewMod(421, \"DBM-Party-Classic\", 7, 231)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(6235)\nmod:SetEncounterID(380)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 11082 11085\",\n\t\"SPELL_CAST_SUCCESS 11084\"\n)\n\nlocal warningShock\t\t\t\t= mod:NewSpellAnnounce(11084, 2, nil, \"Tank|Healer\")\n\nlocal specWarnMegavolt\t\t\t= mod:NewSpecialWarningInterrupt(11082, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnChainBolt\t\t\t= mod:NewSpecialWarningInterrupt(11085, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMegavoltCD\t\t\t= mod:NewAITimer(180, 11082, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerChainBoltCD\t\t\t= mod:NewAITimer(180, 11085, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerShockCD\t\t\t\t= mod:NewAITimer(180, 11084, nil, \"Tank|Healer\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMegavoltCD:Start(1-delay)\n\ttimerChainBoltCD:Start(1-delay)\n\ttimerShockCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 11082 then\n\t\ttimerMegavoltCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnMegavolt:Show(args.sourceName)\n\t\t\tspecWarnMegavolt:Play(\"kickcast\")\n\t\tend\n\telseif args.spellId == 11085 then\n\t\ttimerChainBoltCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnChainBolt:Show(args.sourceName)\n\t\t\tspecWarnChainBolt:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 11084 then\n\t\twarningShock:Show()\n\t\ttimerShockCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Gnomeregan/Grubbis.lua",
    "content": "local mod\t= DBM:NewMod(419, \"DBM-Party-Classic\", 7, 231)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(7361)\nmod:SetEncounterID(379)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Gnomeregan/MekgineerThermaplugg.lua",
    "content": "local mod\t= DBM:NewMod(422, \"DBM-Party-Classic\", 7, 231)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(7800)\nmod:SetEncounterID(382)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 10101 11130\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal warningKnockAway\t\t\t= mod:NewSpellAnnounce(10101, 2)\nlocal warningActivateBomb\t\t= mod:NewSpellAnnounce(11511, 2)\n\nlocal timerKnockAwayCD\t\t\t= mod:NewAITimer(180, 10101, nil, nil, nil, 2)\nlocal timerActivateBomb\t\t\t= mod:NewNextTimer(30, 11511, nil, nil, nil, 2)\n\nfunction mod:OnCombatStart(delay)\n\ttimerKnockAwayCD:Start(1-delay)\n\ttimerActivateBomb:Start(-delay)\nend\n\nfunction mod:SPELL_CAST_SUCESS(args)\n\tif args:IsSpellID(10101, 11130) then\n\t\twarningKnockAway:Show()\n\t\ttimerKnockAwayCD:Start()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.YellBomb and self:AntiSpam(3, 1) then\n\t\twarningActivateBomb:Show()\n\t\ttimerActivateBomb:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Gnomeregan/ViscousFallout.lua",
    "content": "local mod\t= DBM:NewMod(420, \"DBM-Party-Classic\", 7, 231)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(7079)\nmod:SetEncounterID(378)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 21687\"\n)\n\nlocal warningToxicVolley\t\t\t= mod:NewSpellAnnounce(21687, 2, nil, \"Healer|RemovePoison\")\n\nlocal timerToxicVolleyCD\t\t\t= mod:NewAITimer(180, 21687, nil, nil, nil, 3, nil, DBM_COMMON_L.POISON_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerToxicVolleyCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 21687 then\n\t\twarningToxicVolley:Show()\n\t\ttimerToxicVolleyCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/LowerBlackrockSpire/Gizrul.lua",
    "content": "local mod\t= DBM:NewMod(395, \"DBM-Party-Classic\", 3, 229)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10268)\nmod:SetEncounterID(273)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/LowerBlackrockSpire/Halycon.lua",
    "content": "local mod\t= DBM:NewMod(394, \"DBM-Party-Classic\", 3, 229)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10220)\nmod:SetEncounterID(274)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/LowerBlackrockSpire/HighlordOmokk.lua",
    "content": "local mod\t= DBM:NewMod(388, \"DBM-Party-Classic\", 3, 229)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9196)\nmod:SetEncounterID(267)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/LowerBlackrockSpire/MotherSmolderweb.lua",
    "content": "local mod\t= DBM:NewMod(391, \"DBM-Party-Classic\", 3, 229)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10596)\nmod:SetEncounterID(270)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/LowerBlackrockSpire/OverlordWyrmthalak.lua",
    "content": "local mod\t= DBM:NewMod(396, \"DBM-Party-Classic\", 3, 229)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9568)\nmod:SetEncounterID(275)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/LowerBlackrockSpire/QuartermasterZigris.lua",
    "content": "local mod\t= DBM:NewMod(393, \"DBM-Party-Classic\", 3, 229)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9736)\nmod:SetEncounterID(272)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/LowerBlackrockSpire/ShadowHunterVoshgajin.lua",
    "content": "local mod\t= DBM:NewMod(389, \"DBM-Party-Classic\", 3, 229)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9236)\nmod:SetEncounterID(268)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/LowerBlackrockSpire/UrokDoomhowl.lua",
    "content": "local mod\t= DBM:NewMod(392, \"DBM-Party-Classic\", 3, 229)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10584)\nmod:SetEncounterID(271)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/LowerBlackrockSpire/WarMasterVoone.lua",
    "content": "local mod\t= DBM:NewMod(390, \"DBM-Party-Classic\", 3, 229)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9237)\nmod:SetEncounterID(269)\n\nmod:RegisterCombat(\"combat\")\n\n--[[\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\n--local warningSoul\t= mod:NewTargetAnnounce(32346, 2)\n\nlocal specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMaddeningCallCD\t\t\t= mod:NewAITimer(180, 86620, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerMaddeningCallCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\ttimerMaddeningCallCD:Start()\n\tif args.spellId == 86620 and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnMaddeningCall:Show(args.sourceName)\n\t\tspecWarnMaddeningCall:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 32346 then\n\t\twarningSoul:Show(args.destName)\n\tend\nend--]]\n"
  },
  {
    "path": "DBM-Party-Classic/Maraudon/CelebrastheCursed.lua",
    "content": "local mod\t= DBM:NewMod(428, \"DBM-Party-Classic\", 8, 232)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(12225)\nmod:SetEncounterID(425)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 21807\",\n\t\"SPELL_CAST_SUCCESS 21968\",\n\t\"SPELL_AURA_APPLIED 12747\"\n)\n\n--TODO, Add https://www.wowhead.com/spell=21793/twisted-tranquility using right event?\nlocal warningEntanglingRoots\t\t= mod:NewTargetNoFilterAnnounce(12747, 2)\nlocal warningCorruptForces\t\t\t= mod:NewSpellAnnounce(21968, 2, nil, false)\n\nlocal specWarnWrath\t\t\t\t\t= mod:NewSpecialWarningInterrupt(21807, \"HasInterrupt\", nil, nil, 1, 2)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 21807 and args:IsSrcTypeHostile() then\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnWrath:Show(args.sourceName)\n\t\t\tspecWarnWrath:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 21968 then\n\t\twarningCorruptForces:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 12747 and args:IsDestTypePlayer() then\n\t\twarningEntanglingRoots:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Maraudon/Landslide.lua",
    "content": "local mod\t= DBM:NewMod(429, \"DBM-Party-Classic\", 8, 232)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(12203)\nmod:SetEncounterID(426)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 21808\",\n\t\"SPELL_CAST_SUCCESS 11130 5568\"\n)\n\n--TODO, verify timers further, in classic timers are never very static\nlocal warningLandSlide\t\t\t\t= mod:NewSpellAnnounce(21808, 2)\nlocal warningKnockAway\t\t\t\t= mod:NewSpellAnnounce(11130, 2)\nlocal warningTrample\t\t\t\t= mod:NewSpellAnnounce(5568, 2)\n\n-- local specWarnWrath\t\t\t\t\t= mod:NewSpecialWarningInterrupt(21807, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerLandslideCD\t\t\t\t= mod:NewAITimer(180, 21808, nil, nil, nil, 1)\nlocal timerKnockAwayCD\t\t\t\t= mod:NewCDTimer(15.9, 11130, nil, nil, nil, 2)\nlocal timerTrampleCD\t\t\t\t= mod:NewCDTimer(13.4, 5568, nil, nil, nil, 2)\n\nfunction mod:OnCombatStart(delay)\n\ttimerTrampleCD:Start(6-delay)--6\n\ttimerKnockAwayCD:Start(9-delay)--9\n\ttimerLandslideCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 21808 then\n\t\twarningLandSlide:Show()\n\t\ttimerLandslideCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 11130 then\n\t\twarningKnockAway:Show()\n\t\ttimerKnockAwayCD:Start()\n\telseif args.spellId == 5568 and args:IsSrcTypeHostile() then\n\t\twarningTrample:Show()\n\t\ttimerTrampleCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Maraudon/LordVyletongue.lua",
    "content": "local mod\t= DBM:NewMod(427, \"DBM-Party-Classic\", 8, 232)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(12236)\nmod:SetEncounterID(242)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 7964\"\n)\n\n--TODO, smokebomb health based or this timer accurate?\nlocal warningSmokeBomb\t\t\t\t= mod:NewSpellAnnounce(7964, 2)\n\nlocal timerSmokeBombCD\t\t\t\t= mod:NewCDTimer(14.6, 7964, nil, nil, nil, 3)\n\nfunction mod:OnCombatStart(--[[delay]])\n--\ttimerSmokeBombCD:Start(1-delay)--Used near instant on pull\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 7964 and args:IsSrcTypeHostile() then\n\t\twarningSmokeBomb:Show()\n\t\ttimerSmokeBombCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Maraudon/Noxxion.lua",
    "content": "local mod\t= DBM:NewMod(423, \"DBM-Party-Classic\", 8, 232)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(13282)\nmod:SetEncounterID(422)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 10966 21707\"\n)\n\n--TODO, spawns affect uppercut timer?\nlocal warningSpawns\t\t\t\t\t= mod:NewSpellAnnounce(21707, 2)\nlocal warningUppercut\t\t\t\t= mod:NewSpellAnnounce(10966, 2)\n\nlocal timerSpawnsCD\t\t\t\t\t= mod:NewAITimer(180, 21707, nil, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerUppercutCD\t\t\t\t= mod:NewAITimer(180, 10966, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerSpawnsCD:Start(1-delay)--6\n\ttimerUppercutCD:Start(1-delay)--18\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 10966 then\n\t\twarningUppercut:Show()\n\t\ttimerUppercutCD:Start()\n\telseif args.spellId == 21707 then\n\t\twarningSpawns:Show()\n\t\ttimerSpawnsCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Maraudon/PrincessTheradras.lua",
    "content": "local mod\t= DBM:NewMod(431, \"DBM-Party-Classic\", 8, 232)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(12201)\nmod:SetEncounterID(429)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 21832\",\n\t\"SPELL_CAST_SUCCESS 21869 21909\"\n--\t\"SPELL_AURA_APPLIED 12747\"\n)\n\n--TODO, fear spread diff ID from initial target? if so, announce initial target\n--TODO, target scan Boulder?\n--TODO, more data that maybe gaze and dust field ona shared special timer?\n--local warningRepulsiveGaze\t\t= mod:NewTargetNoFilterAnnounce(21869, 2)\nlocal warningRepulsiveGaze\t\t\t= mod:NewSpellAnnounce(21869, 2)\nlocal warningBoulder\t\t\t\t= mod:NewSpellAnnounce(21832, 2)\nlocal warningDustField\t\t\t\t= mod:NewSpellAnnounce(21909, 2)\n\nlocal specWarnDustField\t\t\t\t= mod:NewSpecialWarningRun(21909, \"Melee\", nil, nil, 4, 2)\n\nlocal timerRespulsiveGazeCD\t\t\t= mod:NewCDTimer(26.8, 21869, nil, nil, nil, 3)--26.8-51\nlocal timerDustFieldCD\t\t\t\t= mod:NewCDTimer(21.9, 21909, nil, nil, nil, 2)--21.9-44\n\nfunction mod:OnCombatStart(delay)\n\ttimerRespulsiveGazeCD:Start(7-delay)\n\ttimerDustFieldCD:Start(8-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 21832 and args:GetSrcCreatureID() == 12201 then\n\t\twarningBoulder:Show()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 21869 then\n\t\twarningRepulsiveGaze:Show()\n\t\ttimerRespulsiveGazeCD:Start()\n\telseif args.spellId == 21909 then\n\t\tif self.Options.SpecWarn21909run and not self:IsTrivial(60) then\n\t\t\tspecWarnDustField:Show()\n\t\t\tspecWarnDustField:Play(\"justrun\")\n\t\telse\n\t\t\twarningDustField:Show()\n\t\tend\n\t\ttimerDustFieldCD:Start()\n\tend\nend\n\n--[[\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 21869 then\n\t\twarningRepulsiveGaze:Show(args.destName)\n\tend\nend\n--]]\n"
  },
  {
    "path": "DBM-Party-Classic/Maraudon/Razorlash.lua",
    "content": "local mod\t= DBM:NewMod(424, \"DBM-Party-Classic\", 8, 232)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(12258)\nmod:SetEncounterID(423)\n\nmod:RegisterCombat(\"combat\")\n\n--Nothing to see here, puncture seems to be randomly cast, and not that important\n"
  },
  {
    "path": "DBM-Party-Classic/Maraudon/Rotgrip.lua",
    "content": "local mod\t= DBM:NewMod(430, \"DBM-Party-Classic\", 8, 232)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(13596)\nmod:SetEncounterID(428)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 16495\"\n)\n\n--Puncture too random, and not important enough, so removed. Fatal bite was never seen?\nlocal warningFatalBite\t\t\t\t= mod:NewSpellAnnounce(16495, 3)\n\nlocal timerFatalBiteCD\t\t\t\t= mod:NewAITimer(180, 16495, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerFatalBiteCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 16495 then\n\t\twarningFatalBite:Show()\n\t\ttimerFatalBiteCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Maraudon/TinkererGizlock.lua",
    "content": "local mod\t= DBM:NewMod(425, \"DBM-Party-Classic\", 8, 232)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(13601)\nmod:SetEncounterID(427)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 21833\"\n)\n\n--TODO, support his other spells? technicaly they won't be cast if you stack on him\n--TODO, more timer review on goblin Dragon Gun\nlocal warningGoblinDragonGun\t\t= mod:NewSpellAnnounce(21833, 2)\n\nlocal timerGoblinDragonGunCD\t\t= mod:NewCDTimer(20.7, 21833, nil, nil, nil, 3)\n\nfunction mod:OnCombatStart(delay)\n\ttimerGoblinDragonGunCD:Start(12.8-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 21833 then\n\t\twarningGoblinDragonGun:Show()\n\t\ttimerGoblinDragonGunCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/RagefireChasm/Bazzalan.lua",
    "content": "local mod\t= DBM:NewMod(\"Bazzalan\", \"DBM-Party-Classic\", 9)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11519)\nmod:SetEncounterID(433)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 744\",\n\t\"SPELL_AURA_APPLIED 744\"\n)\n\nlocal warningDeadlyPoison\t\t\t= mod:NewTargetNoFilterAnnounce(744, 2, nil, \"RemovePoison\")\n\nlocal timerDeadlyPoisonCD\t\t\t= mod:NewAITimer(180, 744, nil, \"RemovePoison\", nil, 5, nil, DBM_COMMON_L.POISON_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerDeadlyPoisonCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 744 and args:IsSrcTypeHostile() then\n\t\ttimerDeadlyPoisonCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 744 and args:IsDestTypePlayer() and self:CheckDispelFilter(\"poison\") then\n\t\twarningDeadlyPoison:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/RagefireChasm/Jergosh.lua",
    "content": "local mod\t= DBM:NewMod(\"Jergosh\", \"DBM-Party-Classic\", 9)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11518)\nmod:SetEncounterID(432)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 6304 20800\",\n\t\"SPELL_AURA_APPLIED 6304 20800\"\n)\n\nlocal warningCurseofWeakness\t\t\t= mod:NewTargetNoFilterAnnounce(18267, 2)\nlocal warningImmolate\t\t\t\t\t= mod:NewTargetNoFilterAnnounce(20800, 2, nil, \"Healer|RemoveMagic\")\n\nlocal timerCurseofWeaknessCD\t\t\t= mod:NewAITimer(180, 18267, nil, nil, nil, 3, nil, DBM_COMMON_L.CURSE_ICON)\nlocal timerImmolateCD\t\t\t\t\t= mod:NewAITimer(180, 20800, nil, \"Healer|RemoveMagic\", nil, 5, nil, DBM_COMMON_L.MAGIC_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerCurseofWeaknessCD:Start(1-delay)\n\ttimerImmolateCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 18267 and args:IsSrcTypeHostile() then\n\t\ttimerCurseofWeaknessCD:Start()\n\telseif args.spellId == 20800 and args:IsSrcTypeHostile() then\n\t\ttimerImmolateCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 18267 and args:IsDestTypePlayer() then\n\t\twarningCurseofWeakness:Show(args.destName)\n\telseif args.spellId == 20800 and args:IsDestTypePlayer() then\n\t\twarningImmolate:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/RagefireChasm/Oggleflint.lua",
    "content": "local mod\t= DBM:NewMod(\"Oggleflint\", \"DBM-Party-Classic\", 9)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11517)\nmod:SetEncounterID(430)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/RagefireChasm/Taragaman.lua",
    "content": "local mod\t= DBM:NewMod(\"Taragaman\", \"DBM-Party-Classic\", 9)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11520)\nmod:SetEncounterID(431)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 18072 11970\"\n)\n\nlocal warningUppercut\t\t\t= mod:NewSpellAnnounce(18072, 3, nil, \"Tank\", 2)\nlocal warningFireNova\t\t\t= mod:NewSpellAnnounce(11970, 3)\n\nlocal timerUppercutCD\t\t\t= mod:NewAITimer(180, 18072, nil, \"Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerFireNovaCD\t\t\t= mod:NewAITimer(180, 11970, nil, nil, nil, 2, nil, DBM_COMMON_L.HEALER_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerUppercutCD:Start(1-delay)\n\ttimerFireNovaCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 18072 then\n\t\twarningUppercut:Show()\n\t\ttimerUppercutCD:Start()\n\telseif args.spellId == 11970 then\n\t\twarningFireNova:Show()\n\t\ttimerFireNovaCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/RazorfenDowns/AmnennartheColdbringer.lua",
    "content": "local mod\t= DBM:NewMod(\"AmnennartheColdbringer\", \"DBM-Party-Classic\", 10)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(7358)\nmod:SetEncounterID(437)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 12675\",\n\t\"SPELL_CAST_SUCCESS 13009 12642\"\n)\n\n--TODO, check/fix frostbolt spellId\nlocal warningAmnennarsWrath\t\t\t= mod:NewSpellAnnounce(13009, 2)\n\nlocal specWarnFrostbolt\t\t\t\t= mod:NewSpecialWarningInterrupt(12675, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnFrostSpectres\t\t\t= mod:NewSpecialWarningSwitch(13322, \"-Healer\", nil, nil, 1, 2)\n\nlocal timerAmnennarsWrathCD\t\t\t= mod:NewAITimer(180, 13009, nil, nil, nil, 2)\nlocal timerFrostboltCD\t\t\t\t= mod:NewAITimer(180, 12675, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON..DBM_COMMON_L.MAGIC_ICON)\nlocal timerSummonFrostSpectresCD\t= mod:NewAITimer(180, 13322, nil, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerAmnennarsWrathCD:Start(1-delay)\n\ttimerFrostboltCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 12675 and args:IsSrcTypeHostile()  then\n\t\ttimerFrostboltCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnFrostbolt:Show(args.sourceName)\n\t\t\tspecWarnFrostbolt:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 13009 then\n\t\twarningAmnennarsWrath:Show()\n\t\ttimerAmnennarsWrathCD:Start()\n\telseif args.spellId == 12642 then\n\t\tspecWarnFrostSpectres:Show()\n\t\tspecWarnFrostSpectres:Play(\"killmob\")\n\t\ttimerSummonFrostSpectresCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/RazorfenDowns/Glutton.lua",
    "content": "local mod\t= DBM:NewMod(\"Glutton\", \"DBM-Party-Classic\", 10)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(8567)\nmod:SetEncounterID(436)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 12795\"\n)\n\n--TODO, add Disease Cloud when data is known\nlocal warningEnrage\t\t\t\t\t= mod:NewSpellAnnounce(12795, 2)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 12795 and args:IsSrcTypeHostile() then\n\t\twarningEnrage:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/RazorfenDowns/MordreshFireEye.lua",
    "content": "local mod\t= DBM:NewMod(\"MordreshFireEye\", \"DBM-Party-Classic\", 10)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(7357)\nmod:SetEncounterID(435)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 12466\",\n\t\"SPELL_CAST_SUCCESS 12470\"\n)\n\nlocal warningFireNova\t\t\t= mod:NewSpellAnnounce(12470, 2)\n\nlocal specWarnFireball\t\t\t= mod:NewSpecialWarningInterrupt(12466, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerFireballCD\t\t\t= mod:NewAITimer(180, 12466, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerFireNovaCD\t\t\t= mod:NewAITimer(180, 12470, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerFireballCD:Start(1-delay)\n\ttimerFireNovaCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 12466 and args:IsSrcTypeHostile() then\n\t\ttimerFireballCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnFireball:Show(args.sourceName)\n\t\t\tspecWarnFireball:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 12470 then\n\t\twarningFireNova:Show()\n\t\ttimerFireNovaCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/RazorfenDowns/PlaguemawtheRotting.lua",
    "content": "local mod\t= DBM:NewMod(\"PlaguemawtheRotting\", \"DBM-Party-Classic\", 10)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(7356)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 12946\",\n\t\"SPELL_AURA_APPLIED 12946 11442\"\n)\n\nlocal warningWitheredTouch\t\t\t= mod:NewTargetNoFilterAnnounce(11442, 2, nil, \"RemoveDisease\")\n\nlocal specWarnPutridStench\t\t\t= mod:NewSpecialWarningDispel(12946, \"RemoveDisease\", nil, nil, 1, 2)\n\nlocal timerPutridStenchCD\t\t\t= mod:NewAITimer(180, 12946, nil, nil, nil, 5, nil, DBM_COMMON_L.DISEASE_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerPutridStenchCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 12946 then\n\t\ttimerPutridStenchCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 12946 and self:CheckDispelFilter(\"disease\") then\n\t\tspecWarnPutridStench:Show(args.destName)\n\t\tspecWarnPutridStench:Play(\"helpdispel\")\n\telseif args.spellId == 11442 and self:CheckDispelFilter(\"disease\") then\n\t\twarningWitheredTouch:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/RazorfenDowns/Ragglesnout.lua",
    "content": "local mod\t= DBM:NewMod(\"Ragglesnout\", \"DBM-Party-Classic\", 10)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(7354)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 12039 7645\",\n\t\"SPELL_AURA_APPLIED 7645\"\n)\n\nlocal warningDominateMind\t\t\t= mod:NewTargetNoFilterAnnounce(7645, 2)\n\nlocal specWarnHeal\t\t\t\t\t= mod:NewSpecialWarningInterrupt(12039, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerHealCD\t\t\t\t\t= mod:NewAITimer(180, 12039, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerDominateMindCD\t\t\t= mod:NewAITimer(180, 7645, nil, nil, nil, 3)\n\nfunction mod:OnCombatStart(delay)\n\ttimerHealCD:Start(1-delay)\n\ttimerDominateMindCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 12039 and args:IsSrcTypeHostile() then\n\t\ttimerHealCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnHeal:Show(args.sourceName)\n\t\t\tspecWarnHeal:Play(\"kickcast\")\n\t\tend\n\telseif args.spellId == 7645 then\n\t\ttimerDominateMindCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 7645 then\n\t\twarningDominateMind:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/RazorfenDowns/Tutenkash.lua",
    "content": "local mod\t= DBM:NewMod(\"Tutenkash\", \"DBM-Party-Classic\", 10)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(7355)\nmod:SetEncounterID(434)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 12255 12252\",\n\t\"SPELL_AURA_APPLIED 12255\"\n)\n\nlocal warningCurseofTut\t\t\t\t= mod:NewTargetNoFilterAnnounce(12255, 2, nil, \"RemoveCurse\")\nlocal warningWebSpray\t\t\t\t= mod:NewSpellAnnounce(12252, 2)\n\nlocal timerCurseofTutCD\t\t\t\t= mod:NewAITimer(180, 12255, nil, nil, nil, 3, nil, DBM_COMMON_L.CURSE_ICON)\nlocal timerWebSprayCD\t\t\t\t= mod:NewAITimer(180, 12252, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerCurseofTutCD:Start(1-delay)\n\ttimerWebSprayCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 12255 then\n\t\ttimerCurseofTutCD:Start()\n\telseif args.spellId == 12252 then\n\t\twarningWebSpray:Show()\n\t\ttimerWebSprayCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 12255 and self:CheckDispelFilter(\"curse\") then\n\t\twarningCurseofTut:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/RazorfenKraul/AgathelostheRaging.lua",
    "content": "local mod\t= DBM:NewMod(\"AgathelostheRaging\", \"DBM-Party-Classic\", 11)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4422)\nmod:SetEncounterID(883)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 8269\"\n)\n\n--https://classic.wowhead.com/spell=8555/left-for-dead nani? is wowhead tripping? no mention of this in comments or guides\nlocal warningEnrage\t\t\t\t= mod:NewTargetNoFilterAnnounce(8269, 2)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 8269 and args:IsDestTypeHostile() then\n\t\twarningEnrage:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/RazorfenKraul/AggemThorncurse.lua",
    "content": "local mod\t= DBM:NewMod(\"AggemThorncurse\", \"DBM-Party-Classic\", 11)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4424)\nmod:SetEncounterID(439)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 14900\",\n\t\"SPELL_CAST_SUCCESS 8286\"\n)\n\nlocal warningSummonBoar\t\t= mod:NewSpellAnnounce(8286, 2)\n\nlocal specWarnHeal\t\t\t= mod:NewSpecialWarningInterrupt(14900, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerSummonBoarCD\t\t= mod:NewAITimer(180, 8286, nil, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerHealCD\t\t\t= mod:NewAITimer(180, 14900, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(--[[delay]])\n\t--timerSummonBoarCD:Start(7-delay)\n\t--timerHealCD:Start(9.5-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 14900 and args:IsSrcTypeHostile() then\n\t\ttimerHealCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnHeal:Show(args.sourceName)\n\t\t\tspecWarnHeal:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 8286 then\n\t\twarningSummonBoar:Show()\n\t\ttimerSummonBoarCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/RazorfenKraul/BlindHunter.lua",
    "content": "local mod\t= DBM:NewMod(\"BlindHunter\", \"DBM-Party-Classic\", 11)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4425)\n\nmod:RegisterCombat(\"combat\")\n\n--Just a stats module, nothing more, boss doesn't really do anything, this just tracks your kills\n"
  },
  {
    "path": "DBM-Party-Classic/RazorfenKraul/CharlgaRazorflank.lua",
    "content": "local mod\t= DBM:NewMod(\"CharlgaRazorflank\", \"DBM-Party-Classic\", 11)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4421)\nmod:SetEncounterID(443)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 8292\",\n\t\"SPELL_CAST_SUCCESS 8358\",\n\t\"SPELL_AURA_APPLIED 8361\"\n)\n\nlocal warningPurity\t\t\t\t= mod:NewTargetNoFilterAnnounce(8361, 2)\nlocal warningManaSpike\t\t\t= mod:NewSpellAnnounce(8358, 2)\n\nlocal specWarnChainBolt\t\t\t= mod:NewSpecialWarningInterrupt(8292, \"HasInterrupt\", nil, nil, 1, 2)--Spammy if CheckInterruptFilter is disabled or isn't working\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 8292 and args:IsSrcTypeHostile() then\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnChainBolt:Show(args.sourceName)\n\t\t\tspecWarnChainBolt:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 8358 then\n\t\twarningManaSpike:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 8361 then\n\t\twarningPurity:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/RazorfenKraul/DeathSpeakerJargba.lua",
    "content": "local mod\t= DBM:NewMod(\"DeathSpeakerJargba\", \"DBM-Party-Classic\", 11)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4428)\nmod:SetEncounterID(440)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 14515\",\n\t\"SPELL_CAST_SUCCESS 14515\",\n\t\"SPELL_AURA_APPLIED 14515\"\n)\n\nlocal warningMCCast\t\t\t= mod:NewCastAnnounce(14515, 3)\nlocal warningMC\t\t\t\t= mod:NewTargetNoFilterAnnounce(14515, 4, nil, false, 2)--Don't want to announce the MC cast AND the target, 2 second apart warnings for same thing is not agreeable in classic (by default)\n\nlocal timerMCCD\t\t\t\t= mod:NewAITimer(180, 14515, nil, nil, nil, 3)--Uses success, because start can be interrupted by CC, evem though normal interrupts don't work, but boss recasts immediately on CC break\n\nfunction mod:OnCombatStart(--[[delay]])\n\t--timerMCCD:Start(6-delay)--Cast Start\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 14515 then\n\t\twarningMCCast:Show()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 14515 then\n\t\ttimerMCCD:Start()--From Success to start when final, but while AI, success to success :\\\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 14515 then\n\t\twarningMC:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/RazorfenKraul/EarthcallerHalmgar.lua",
    "content": "local mod\t= DBM:NewMod(\"EarthcallerHalmgar\", \"DBM-Party-Classic\", 11)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4842)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 8270\"\n)\n\n--Guide mentions a totem, but no data for it in wowhead\n--Rumbler spawned on engage\nlocal warningSummonEarthRumbler\t\t= mod:NewSpellAnnounce(8270, 2)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 8270 then\n\t\twarningSummonEarthRumbler:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/RazorfenKraul/OverlordRamtusk.lua",
    "content": "local mod\t= DBM:NewMod(\"OverlordRamtusk\", \"DBM-Party-Classic\", 11)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4420)\nmod:SetEncounterID(441)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 8259\"\n)\n\nlocal warningWhirlingBarrage\t\t= mod:NewCastAnnounce(8259, 2)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 8259 and self:AntiSpam(3, 1) then\n\t\twarningWhirlingBarrage:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/RazorfenKraul/Roogug.lua",
    "content": "local mod\t= DBM:NewMod(\"Roogug\", \"DBM-Party-Classic\", 11)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(6168)\nmod:SetEncounterID(438)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 8270\"\n)\n\n--Rumbler spawned on engage\nlocal warningSummonEarthRumbler\t\t= mod:NewSpellAnnounce(8270, 2)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 8270 then\n\t\twarningSummonEarthRumbler:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/ScarletMonastery/ArcanistDoan.lua",
    "content": "local mod\t= DBM:NewMod(\"ArcanistDoan\", \"DBM-Party-Classic\", 12)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(6487)\nmod:SetEncounterID(447)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 9435 8988\",\n\t\"SPELL_CAST_SUCCESS 9433\",\n\t\"SPELL_AURA_APPLIED 13323\"\n)\n\nlocal warningPolymorph\t\t\t\t= mod:NewTargetNoFilterAnnounce(13323, 2)\nlocal warningSilence\t\t\t\t= mod:NewCastAnnounce(8988, 2)\nlocal warningArcaneExplosion\t\t= mod:NewSpellAnnounce(9433, 2, nil, false, 2)--Can be spammy if cast multiple times in succession\n\nlocal specWarnDetonation\t\t\t= mod:NewSpecialWarningRun(9435, nil, nil, nil, 4, 2)\n\n--local timerDetonationCD\t\t\t= mod:NewCDTimer(180, 9435, nil, nil, nil, 2)\nlocal timerSilenceCD\t\t\t\t= mod:NewCDTimer(15.5, 8988, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)--15-19\n\nfunction mod:OnCombatStart(delay)\n\t--timerDetonationCD:Start(17.5-delay)--17.5-24\n\ttimerSilenceCD:Start(9.9-delay)--9.9-16\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 9435 then\n\t\tspecWarnDetonation:Show()\n\t\tspecWarnDetonation:Play(\"justrun\")\n\t\t--timerDetonationCD:Start()\n\telseif args.spellId == 8988 and args:IsSrcTypeHostile() then\n\t\twarningSilence:Show()\n\t\ttimerSilenceCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 9433 and args:IsSrcTypeHostile()  then\n\t\twarningArcaneExplosion:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 13323 and args:IsDestTypePlayer() then\n\t\twarningPolymorph:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/ScarletMonastery/BloodmageThalnos.lua",
    "content": "local mod\t= DBM:NewMod(\"BloodmageThalnos\", \"DBM-Party-Classic\", 12)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4543)\nmod:SetEncounterID(445)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 8814\",\n\t\"SPELL_CAST_SUCCESS 12470\"\n)\n\n--TODO, still can't use CD timer yet because only have initial timers from a single log, Fire nova timer too variable (8.5, 21 wtf?) to be useful\nlocal warningFlameSpike\t\t\t\t= mod:NewSpellAnnounce(8814, 2)\nlocal warningFireNova\t\t\t\t= mod:NewSpellAnnounce(12470, 2)\n\nlocal timerFlameSpikeCD\t\t\t\t= mod:NewAITimer(180, 8814, nil, nil, nil, 3)\n\nfunction mod:OnCombatStart(--[[delay]])\n\t--timerFlameSpikeCD:Start(15.8-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 8814 then\n\t\twarningFlameSpike:Show()\n\t\ttimerFlameSpikeCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 12470 then\n\t\twarningFireNova:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/ScarletMonastery/Herod.lua",
    "content": "local mod\t= DBM:NewMod(\"Herod\", \"DBM-Party-Classic\", 12)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(3975)\nmod:SetEncounterID(448)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 8989 8269\"\n)\n\nlocal warningEnrage\t\t\t\t\t= mod:NewTargetNoFilterAnnounce(8269, 2)\n\nlocal specWarnWhirlwind\t\t\t\t= mod:NewSpecialWarningRun(8989, nil, nil, nil, 4, 2)\n\nlocal timerWhirlwindCD\t\t\t\t= mod:NewCDTimer(18, 8989, nil, nil, nil, 4, nil, DBM_COMMON_L.DEADLY_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerWhirlwindCD:Start(10.5-delay)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 8269 and args:IsDestTypeHostile() then\n\t\tspecWarnWhirlwind:Show()\n\t\tspecWarnWhirlwind:Play(\"justrun\")\n\t\ttimerWhirlwindCD:Start()\n\telseif args.spellId == 8269 and args:IsDestTypeHostile() then\n\t\twarningEnrage:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/ScarletMonastery/HighInquisitorFairbanks.lua",
    "content": "local mod\t= DBM:NewMod(\"Fairbanks\", \"DBM-Party-Classic\", 12)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4542)\nmod:SetEncounterID(449)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 8282\"\n)\n\nlocal warningCurseofBlood\t\t\t= mod:NewTargetNoFilterAnnounce(8282, 2, nil, \"RemoveCurse\")\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 8282 then\n\t\twarningCurseofBlood:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/ScarletMonastery/HoundmasterLoksey.lua",
    "content": "local mod\t= DBM:NewMod(\"HoundmasterLoksey\", \"DBM-Party-Classic\", 12)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(3974)\nmod:SetEncounterID(446)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 6742\"\n)\n\nlocal warningBloodLust\t\t= mod:NewTargetNoFilterAnnounce(6742, 2)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 6742 and args:IsDestTypeHostile() then\n\t\twarningBloodLust:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/ScarletMonastery/InterrogatorVishas.lua",
    "content": "local mod\t= DBM:NewMod(\"InterrogatorVishas\", \"DBM-Party-Classic\", 12)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(3983)\nmod:SetEncounterID(444)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 9034\",\n\t\"SPELL_AURA_APPLIED 9034\"\n)\n\nlocal warningImmolate\t\t\t\t= mod:NewTargetNoFilterAnnounce(9034, 2)\n\nlocal timerImmolateCD\t\t\t\t= mod:NewAITimer(180, 9034, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerImmolateCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 9034 and args:IsSrcTypeHostile() then\n\t\ttimerImmolateCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 9034 and args:IsDestTypePlayer() then\n\t\twarningImmolate:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/ScarletMonastery/Mograine_and_Whitemane.lua",
    "content": "local mod\t= DBM:NewMod(\"Mograine_and_Whitemane\", \"DBM-Party-Classic\", 12)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(3977, 3976, 99999)--Whitemane, Mograine\nmod:SetEncounterID(450)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 12039\",\n\t\"SPELL_CAST_SUCCESS 9256\",\n\t\"UNIT_DIED\"\n)\n\nlocal warnDeepSleep\t\t\t\t= mod:NewSpellAnnounce(9256, 2)\n\nlocal specWarnHeal\t\t\t\t= mod:NewSpecialWarningInterrupt(12039, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerDeepSleep\t\t\t= mod:NewBuffFadesTimer(10, 9256, nil, nil, nil, 6)\n\nfunction mod:OnCombatStart()\n\tself:SetStage(1)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 12039 and args:IsSrcTypeHostile() and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\tspecWarnHeal:Show(args.sourceName)\n\t\tspecWarnHeal:Play(\"kickcast\")\n\tend\nend\n\n--3/28 16:22:43.810  SPELL_CAST_SUCCESS,0xF1300F8900000065,\"High Inquisitor Whitemane\",0xa48,0x0,0x0000000000000000,nil,0x80000000,0x80000000,9256,\"Deep Sleep\",0x20\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 9256 then--Phase 3\n\t\tself:SetStage(3)\n\t\twarnDeepSleep:Show()\n\t\ttimerDeepSleep:Start()\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tif self:GetCIDFromGUID(args.destGUID) == 3976 then\n\t\tif self.vb.phase == 3 then--Fight is over on 2nd death\n\t\t\tDBM:EndCombat(self)\n\t\telse--it's first death, he's down and whiteman is taking over\n\t\t\tself:SetStage(2)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Scholomance/DarkmasterGandling.lua",
    "content": "local mod\t= DBM:NewMod(\"DarkmasterGandling\", \"DBM-Party-Classic\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(1853)\nmod:SetEncounterID(--[[ mod:IsClassic() and 2801 or  ]]463)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 17950\"\n)\n\nlocal warningShadowPortal\t\t= mod:NewSpellAnnounce(17950, 2) -- Target seems unreliable\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 17950 then\n\t\twarningShadowPortal:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Scholomance/DoctorTheolenKrastinov.lua",
    "content": "local mod\t= DBM:NewMod(\"DoctorTheolenKrastinov\", \"DBM-Party-Classic\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11261)\nmod:SetEncounterID(--[[ mod:IsClassic() and 2802 or  ]]458)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Scholomance/InstructorMalicia.lua",
    "content": "local mod\t= DBM:NewMod(\"InstructorMalicia\", \"DBM-Party-Classic\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10505)\nmod:SetEncounterID(--[[ mod:IsClassic() and 2803 or  ]]457)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Scholomance/JandiceBarov.lua",
    "content": "local mod\t= DBM:NewMod(\"JandiceBarov\", \"DBM-Party-Classic\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10503)\nmod:SetEncounterID(--[[ mod:IsClassic() and 2804 or  ]]452)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Scholomance/KirtonostheHerald.lua",
    "content": "local mod\t= DBM:NewMod(\"KirtonostheHerald\", \"DBM-Party-Classic\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10506)\nmod:SetEncounterID(--[[ mod:IsClassic() and 2805 or  ]]451)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Scholomance/LadyIlluciaBarov.lua",
    "content": "local mod\t= DBM:NewMod(\"LadyIlluciaBarov\", \"DBM-Party-Classic\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10502)\nmod:SetEncounterID(--[[ mod:IsClassic() and 2806 or  ]]462)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Scholomance/LordAlexeiBarov.lua",
    "content": "local mod\t= DBM:NewMod(\"LordAlexeiBarov\", \"DBM-Party-Classic\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10504)\nmod:SetEncounterID(--[[ mod:IsClassic() and 2807 or  ]]461)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 17820\"\n)\n\nlocal warningVeilofShadow\t\t\t= mod:NewTargetNoFilterAnnounce(17820, 2, nil, \"RemoveCurse\")\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 17820 then\n\t\twarningVeilofShadow:CombinedShow(0.5, args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Scholomance/LorekeeperPolkelt.lua",
    "content": "local mod\t= DBM:NewMod(\"LorekeeperPolkelt\", \"DBM-Party-Classic\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10901)\nmod:SetEncounterID(--[[ mod:IsClassic() and 2808 or  ]]459)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Scholomance/MardukBlackpool.lua",
    "content": "local mod\t= DBM:NewMod(\"MardukBlackpool\", \"DBM-Party-Classic\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10433)\nmod:SetEncounterID(--[[ mod:IsClassic() and 2809 or  ]]454)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Scholomance/RasFrostwhisper.lua",
    "content": "local mod\t= DBM:NewMod(\"RasFrostwhisper\", \"DBM-Party-Classic\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10508)\nmod:SetEncounterID(--[[ mod:IsClassic() and 2810 or  ]]456)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Scholomance/Rattlegore.lua",
    "content": "local mod\t= DBM:NewMod(\"Rattlegore\", \"DBM-Party-Classic\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11622)\nmod:SetEncounterID(--[[ mod:IsClassic() and 2811 or  ]]453)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Scholomance/TheRavenian.lua",
    "content": "local mod\t= DBM:NewMod(\"TheRavenian\", \"DBM-Party-Classic\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10507)\nmod:SetEncounterID(--[[ mod:IsClassic() and 2812 or ]]460)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Scholomance/Vectus.lua",
    "content": "local mod\t= DBM:NewMod(\"Vectus\", \"DBM-Party-Classic\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10432)\nmod:SetEncounterID(--[[ mod:IsClassic() and 2813 or  ]]455)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Shadowfangkeep/ArchmageArugal.lua",
    "content": "local mod\t= DBM:NewMod(\"ArchmageArugal\", \"DBM-Party-Classic\", 14)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4275)\nmod:SetEncounterID(471)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 7621 7587\",\n\t\"SPELL_AURA_APPLIED 7621\"\n)\n\nlocal warningArugalsCurse\t\t\t= mod:NewTargetNoFilterAnnounce(7621, 2)\nlocal warningShadowPort\t\t\t\t= mod:NewSpellAnnounce(7587, 2)\n\nlocal timerArugalsCurseCD\t\t\t= mod:NewAITimer(180, 7621, nil, nil, nil, 3, nil, DBM_COMMON_L.CURSE_ICON)\nlocal timerShadowPortCD\t\t\t\t= mod:NewAITimer(180, 7587, nil, nil, nil, 6)\n\nfunction mod:OnCombatStart(delay)\n\ttimerArugalsCurseCD:Start(1-delay)\n\ttimerShadowPortCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 7621 then\n\t\ttimerArugalsCurseCD:Start()\n\telseif args.spellId == 7587 then\n\t\twarningShadowPort:Show()\n\t\ttimerShadowPortCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 7621 then\n\t\twarningArugalsCurse:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Shadowfangkeep/BaronSilverlaine.lua",
    "content": "local mod\t= DBM:NewMod(\"BaronSilverlaine\", \"DBM-Party-Classic\", 14)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(3887)\nmod:SetEncounterID(466)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 7068\",\n\t\"SPELL_AURA_APPLIED 7068\"\n)\n\nlocal warningVeilofShadow\t\t\t= mod:NewTargetNoFilterAnnounce(7068, 2)\n\nlocal timerVeilofShadowCD\t\t\t= mod:NewAITimer(180, 7068, nil, nil, nil, 3, nil, DBM_COMMON_L.CURSE_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerVeilofShadowCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 7068 then\n\t\ttimerVeilofShadowCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 7068 then\n\t\twarningVeilofShadow:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Shadowfangkeep/CommanderSpringvale.lua",
    "content": "local mod\t= DBM:NewMod(\"CommanderSpringvale\", \"DBM-Party-Classic\", 14)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4278)\nmod:SetEncounterID(467)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Shadowfangkeep/DeathswornCaptain.lua",
    "content": "local mod\t= DBM:NewMod(\"DeathswornCaptain\", \"DBM-Party-Classic\", 14)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(3872)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Shadowfangkeep/FenrustheDevourer.lua",
    "content": "local mod\t= DBM:NewMod(\"FenrustheDevourer\", \"DBM-Party-Classic\", 14)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4274)\nmod:SetEncounterID(469)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 7125\",\n\t\"SPELL_AURA_APPLIED 7125\"\n)\n\nlocal warningToxicSaliva\t\t\t\t= mod:NewTargetNoFilterAnnounce(7125, 2, nil, \"RemovePoison\")\n\nlocal timerToxicSalivaCD\t\t\t\t= mod:NewAITimer(180, 7125, nil, nil, nil, 3, nil, DBM_COMMON_L.POISON_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerToxicSalivaCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 7125 then\n\t\ttimerToxicSalivaCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 7125 and self:CheckDispelFilter(\"poison\") then\n\t\twarningToxicSaliva:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Shadowfangkeep/OdotheBlindwatcher.lua",
    "content": "local mod\t= DBM:NewMod(\"OdotheBlindwatcher\", \"DBM-Party-Classic\", 14)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4279)\nmod:SetEncounterID(468)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Shadowfangkeep/RazorclawtheButcher.lua",
    "content": "local mod\t= DBM:NewMod(\"RazorclawtheButcher\", \"DBM-Party-Classic\", 14)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(3886)\nmod:SetEncounterID(465)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Shadowfangkeep/Rethilgore.lua",
    "content": "local mod\t= DBM:NewMod(\"Rethilgore\", \"DBM-Party-Classic\", 14)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(3914)\nmod:SetEncounterID(464)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Shadowfangkeep/WolfMasterNandos.lua",
    "content": "local mod\t= DBM:NewMod(\"WolfMasterNandos\", \"DBM-Party-Classic\", 14)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(3927)\nmod:SetEncounterID(470)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 7487 7489 7488\"\n)\n\nlocal warningBleakWorg\t\t= mod:NewSpellAnnounce(7487, 2)\nlocal warningLupineHorror\t= mod:NewSpellAnnounce(7489, 2)\nlocal warningSlaveringWorg\t= mod:NewSpellAnnounce(7488, 2)\n\nlocal timerBleakWorgCD\t\t= mod:NewAITimer(180, 7487, nil, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerLupineHorrorCD\t= mod:NewAITimer(180, 7489, nil, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerSlaveringWorgCD\t= mod:NewAITimer(180, 7488, nil, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerBleakWorgCD:Start(1-delay)\n\ttimerLupineHorrorCD:Start(1-delay)\n\ttimerSlaveringWorgCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 7487 then\n\t\twarningBleakWorg:Show()\n\t\ttimerBleakWorgCD:Start()\n\telseif args.spellId == 7489 then\n\t\twarningLupineHorror:Show()\n\t\ttimerLupineHorrorCD:Start()\n\telseif args.spellId == 7488 then\n\t\twarningSlaveringWorg:Show()\n\t\ttimerSlaveringWorgCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/StormwindStockaid/BazilThredd.lua",
    "content": "local mod\t= DBM:NewMod(\"BazilThredd\", \"DBM-Party-Classic\", 15)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(1716)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 7964\"\n)\n\nlocal warningSmokeBomb\t\t\t= mod:NewSpellAnnounce(7964, 2)\n\nlocal timerSmokeBombCD\t\t\t= mod:NewCDTimer(15.8, 7964, nil, nil, nil, 3)\n\nfunction mod:OnCombatStart(delay)\n\ttimerSmokeBombCD:Start(8-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 7964 and args:IsSrcTypeHostile() then\n\t\twarningSmokeBomb:Show()\n\t\ttimerSmokeBombCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/StormwindStockaid/BruegalIronknuckle.lua",
    "content": "local mod\t= DBM:NewMod(\"BruegalIronknuckle\", \"DBM-Party-Classic\", 15)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(1720)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/StormwindStockaid/DextrenWard.lua",
    "content": "local mod\t= DBM:NewMod(\"DextrenWard\", \"DBM-Party-Classic\", 15)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(1663)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/StormwindStockaid/Hamhock.lua",
    "content": "local mod\t= DBM:NewMod(\"Hamhock\", \"DBM-Party-Classic\", 15)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(1717)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 6742\"\n)\n\n--TODO, add timer for chain lightning if it's not spam cast\nlocal warningBloodlust\t\t\t\t= mod:NewTargetNoFilterAnnounce(6742, 2)\n\nmod:AddRangeFrameOption(\"10\")\n\nfunction mod:OnCombatStart()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(10)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 6742 and args:IsDestTypeHostile() then\n\t\twarningBloodlust:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/StormwindStockaid/KamDeepfury.lua",
    "content": "local mod\t= DBM:NewMod(\"KamDeepfury\", \"DBM-Party-Classic\", 15)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(1666)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/StormwindStockaid/Targorr.lua",
    "content": "local mod\t= DBM:NewMod(\"Targorr\", \"DBM-Party-Classic\", 15)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(1696)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Stratholme/Balnazzar.lua",
    "content": "local mod\t= DBM:NewMod(449, \"DBM-Party-Classic\", 16, 236)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10812, 10813)--10812 Grand Crusader Dathrohan (stage 1 classic, on live the boss starts out as Balnazzar)\nmod:SetEncounterID(478)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 17405 13704\",\n\t\"SPELL_AURA_APPLIED 17405\",\n\t\"UNIT_DIED\"\n)\n\n--TODO, P2 trigger, and cleanup boss count code\nlocal warningDomination\t\t\t\t\t= mod:NewTargetNoFilterAnnounce(17405, 4)\n--local warningSleep\t\t\t\t\t\t= mod:NewTargetNoFilterAnnounce(66290, 3)\nlocal warningPsychicScream\t\t\t\t= mod:NewSpellAnnounce(13704, 3)\n\n--local specWarnMaddeningCall\t\t\t= mod:NewSpecialWarningInterrupt(86620, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerDominationCD\t\t\t\t\t= mod:NewAITimer(180, 17405, nil, nil, nil, 3)\n--local timerSleepCD\t\t\t\t\t\t= mod:NewAITimer(180, 66290, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerPsychicScreamCD\t\t\t\t= mod:NewAITimer(180, 13704, nil, nil, nil, 2, nil, DBM_COMMON_L.MAGIC_ICON)\n\nfunction mod:OnCombatStart(--[[delay]])\n\t--timerDominationCD:Start(1-delay)\n\t--timerSleepCD:Start(1-delay)\n\t--timerPsychicScreamCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 17405 and args:IsSrcTypeHostile() then\n\t\ttimerDominationCD:Start()\n\telseif args.spellId == 13704 and args:IsSrcTypeHostile() then\n\t\twarningPsychicScream:Show()\n\t\ttimerPsychicScreamCD:Start()\n\t--elseif args.spellId == 66290 then\n\t\t--timerSleepCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 17405 and args:IsDestTypePlayer() then\n\t\twarningDomination:Show(args.destName)\n\t--elseif args.spellId == 66290 then\n\t\t--warningSleep:Show(args.destName)\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tif self:GetCIDFromGUID(args.destGUID) == 10813 then\n\t\tDBM:EndCombat(self)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Stratholme/BaronessAnastari.lua",
    "content": "local mod\t= DBM:NewMod(451, \"DBM-Party-Classic\", 16, 236)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10436)\nmod:SetEncounterID(479)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n--\t\"SPELL_CAST_SUCCESS 17244\",\n\t\"SPELL_AURA_APPLIED 17244 16867 18327\"\n)\n\nlocal warningBansheeCurse\t\t= mod:NewTargetNoFilterAnnounce(16867, 2, nil, \"RemoveCurse\")\nlocal warningSilence\t\t\t= mod:NewTargetNoFilterAnnounce(18327, 2, nil, \"RemoveMagic\")\n\nlocal specWarnPossess\t\t\t= mod:NewSpecialWarningTargetChange(17244, nil, nil, nil, 1, 2)\n\n--local timerPossessCD\t\t\t= mod:NewAITimer(180, 17244, nil, nil, nil, 3, nil, DBM_COMMON_L.DAMAGE_ICON)\n\n--function mod:OnCombatStart(delay)\n--\ttimerPossessCD:Start(1-delay)\n--end\n\n--[[\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 17244 then\n--\t\ttimerPossessCD:Start()\n\tend\nend\n--]]\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 17244 then\n\t\tspecWarnPossess:Show(args.destName)\n\t\tspecWarnPossess:Play(\"targetchange\")\n\telseif args.spellId == 16867 then\n\t\twarningBansheeCurse:CombinedShow(0.5, args.destName)\n\telseif args.spellId == 18327 and args:IsDestTypePlayer() then\n\t\twarningSilence:CombinedShow(0.5, args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Stratholme/CommanderMalor.lua",
    "content": "local mod\t= DBM:NewMod(749, \"DBM-Party-Classic\", 16, 236)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11032)\nmod:SetEncounterID(476)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 15245\",\n\t\"SPELL_CAST_SUCCESS 12734\"\n)\n\nlocal warningGroundSmash\t\t\t\t= mod:NewSpellAnnounce(12734, 2)\n\nlocal specWarnShadowBoltVolley\t\t\t= mod:NewSpecialWarningInterrupt(15245, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerShadowBoltVolleyCD\t\t\t= mod:NewAITimer(180, 15245, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerGroundSmashCD\t\t\t\t= mod:NewAITimer(180, 12734, nil, nil, nil, 2)\n\nfunction mod:OnCombatStart(delay)\n\ttimerShadowBoltVolleyCD:Start(1-delay)\n\ttimerGroundSmashCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 15245 then\n\t\ttimerShadowBoltVolleyCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnShadowBoltVolley:Show(args.sourceName)\n\t\t\tspecWarnShadowBoltVolley:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 12734 and args:IsSrcTypeHostile() then\n\t\twarningGroundSmash:Show()\n\t\ttimerGroundSmashCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Stratholme/HearthsingerForresten.lua",
    "content": "local mod\t= DBM:NewMod(443, \"DBM-Party-Classic\", 16, 236)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10558)\nmod:SetEncounterID(473)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 16798\",\n\t\"SPELL_AURA_APPLIED 16798\"\n)\n\nlocal warningEnchantingLullaby\t\t= mod:NewTargetNoFilterAnnounce(16798, 2)\n\nlocal specWarnEnchantingLullaby\t\t= mod:NewSpecialWarningInterrupt(16798, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerEnchantingLullabyCD\t\t= mod:NewAITimer(180, 16798, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON..DBM_COMMON_L.MAGIC_ICON)\n\n\nfunction mod:OnCombatStart(delay)\n\ttimerEnchantingLullabyCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 16798 then\n\t\ttimerEnchantingLullabyCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnEnchantingLullaby:Show(args.sourceName)\n\t\t\tspecWarnEnchantingLullaby:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 16798 then\n\t\twarningEnchantingLullaby:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Stratholme/InstructorGalford.lua",
    "content": "local mod\t= DBM:NewMod(448, \"DBM-Party-Classic\", 16, 236)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10811)\nmod:SetEncounterID(477)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 17293\",\n\t\"SPELL_CAST_SUCCESS 17366\",\n\t\"SPELL_AURA_APPLIED 17293\"\n)\n\nlocal warningBurningWinds\t\t\t= mod:NewTargetNoFilterAnnounce(17293, 2)\nlocal warningFireNova\t\t\t\t= mod:NewSpellAnnounce(17366, 2)\n\nlocal timerBurningWindsCD\t\t\t= mod:NewAITimer(180, 17293, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerFireNovaCD\t\t\t\t= mod:NewAITimer(180, 17366, nil, nil, nil, 2)\n\nfunction mod:OnCombatStart(delay)\n\ttimerBurningWindsCD:Start(1-delay)\n\ttimerFireNovaCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 17366 and args:IsSrcTypeHostile() then\n\t\twarningFireNova:Show()\n\t\ttimerFireNovaCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 17293 then\n\t\ttimerBurningWindsCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 17293 then\n\t\twarningBurningWinds:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Stratholme/LordAuriusRivendare.lua",
    "content": "local mod\t= DBM:NewMod(456, \"DBM-Party-Classic\", 16, 236)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10440)--10440 Baron Rivendare, 45412 Lord Aurius Rivendare, 11197/mindless-skeleton\nmod:SetEncounterID(484)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_SUMMON 17480\"\n)\n\n--TODO, verify Raise Dead for adds or replace it with 17473 and SPELL_CAST event or some emote/yell\nlocal warningRaiseDead\t\t\t\t\t= mod:NewSpellAnnounce(17473, 2)\n\nlocal timerRaiseDeadCD\t\t\t\t\t= mod:NewAITimer(180, 17473, nil, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerDeathPactCD\t\t\t\t\t= mod:NewNextTimer(12, 17471, nil, nil, nil, 5, nil, DBM_COMMON_L.DAMAGE_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerRaiseDeadCD:Start(1-delay)\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 17480 and self:AntiSpam(5, 1) then\n\t\twarningRaiseDead:Show()\n\t\ttimerDeathPactCD:Start()\n\t\ttimerRaiseDeadCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Stratholme/MagistrateBarthilas.lua",
    "content": "local mod\t= DBM:NewMod(454, \"DBM-Party-Classic\", 16, 236)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10435)\nmod:SetEncounterID(482)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 10887 14099\"\n)\n\nlocal warningCrowdPummel\t\t= mod:NewSpellAnnounce(10887, 2)\nlocal warningMightyBlow\t\t\t= mod:NewSpellAnnounce(14099, 2)\n\nlocal timerCrowdPummelCD\t\t= mod:NewAITimer(180, 10887, nil, nil, nil, 2)\nlocal timerMightyBlowCD\t\t\t= mod:NewAITimer(180, 14099, nil, \"Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerCrowdPummelCD:Start(1-delay)\n\ttimerMightyBlowCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 10887 then\n\t\twarningCrowdPummel:Show()\n\t\ttimerCrowdPummelCD:Start()\n\telseif args.spellId == 14099 then\n\t\twarningMightyBlow:Show()\n\t\ttimerMightyBlowCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Stratholme/MalekithePallid.lua",
    "content": "local mod\t= DBM:NewMod(453, \"DBM-Party-Classic\", 16, 236)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10438)\nmod:SetEncounterID(481)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 16869\",\n\t\"SPELL_AURA_APPLIED 16869\"\n)\n\nlocal warningIceTomb\t\t\t\t= mod:NewTargetNoFilterAnnounce(16869, 3)\n\nlocal timerIceTombCD\t\t\t\t= mod:NewAITimer(180, 16869, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerIceTombCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 16869 then\n\t\ttimerIceTombCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 16869 then\n\t\twarningIceTomb:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Stratholme/Narubenkan.lua",
    "content": "local mod\t= DBM:NewMod(452, \"DBM-Party-Classic\", 16, 236)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10437)\nmod:SetEncounterID(480)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 17235\",\n\t\"SPELL_CAST_SUCCESS 6016\",\n\t\"SPELL_AURA_APPLIED 6016\"\n)\n\n--TODO, add https://www.wowhead.com/spell=4962/encasing-webs if annoying enough\nlocal warningRaiseUndeadScarab\t\t= mod:NewSpellAnnounce(17235, 2)\nlocal warningPierceArmor\t\t\t= mod:NewTargetNoFilterAnnounce(6016, 2, nil, \"Tank|Healer\", 2)\n\nlocal timerRaiseUndeadScarabCD\t\t= mod:NewAITimer(180, 17235, nil, nil, nil, 1)\nlocal timerPierceArmorCD\t\t\t= mod:NewAITimer(180, 6016, nil, \"Tank|Healer\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerRaiseUndeadScarabCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 17235 then\n\t\twarningRaiseUndeadScarab:Show()\n\t\ttimerRaiseUndeadScarabCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 6016 then\n\t\ttimerPierceArmorCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 6016 then\n\t\twarningPierceArmor:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Stratholme/RamsteintheGorger.lua",
    "content": "local mod\t= DBM:NewMod(455, \"DBM-Party-Classic\", 16, 236)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10439)\nmod:SetEncounterID(483)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 17307 5568\"\n)\n\nlocal warningKnockout\t\t\t= mod:NewSpellAnnounce(17307, 2)\nlocal warningTrample\t\t\t= mod:NewSpellAnnounce(5568, 2)\n\nlocal timerKnockoutCD\t\t\t= mod:NewAITimer(180, 17307, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerTrampleCD\t\t\t= mod:NewAITimer(180, 5568, nil, nil, nil, 2)\n\nmod:AddBoolOption(\"TimerGuards\", true, \"timer\", nil, 1)\n\nfunction mod:OnCombatStart(delay)\n\ttimerKnockoutCD:Start(1-delay)\n\ttimerTrampleCD:Start(1-delay)\nend\n\nfunction mod:OnCombatEnd(wipe, isSecondRun)\n\tif not wipe and not isSecondRun and self.Options.TimerGuards then\n\t\t-- Custom bar that's bound to core so timer doesn't stop when mod stops its own timers\n\t\tDBT:CreateBar(91, self.localization.timers.TimerGuards, \"Interface\\\\Icons\\\\Spell_Fire_Fire\", nil, nil, nil, nil, self.Options.TimerGuardsTColor, nil, nil, nil, self.Options.TimerGuardsCVoice)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 17307 and args:IsSrcTypeHostile() then\n\t\twarningKnockout:Show()\n\t\ttimerKnockoutCD:Start()\n\telseif args.spellId == 5568 and args:IsSrcTypeHostile() then\n\t\twarningTrample:Show()\n\t\ttimerTrampleCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Stratholme/TheUnforgiven.lua",
    "content": "local mod\t= DBM:NewMod(450, \"DBM-Party-Classic\", 16, 236)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10516)\nmod:SetEncounterID(472)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/Stratholme/TimmytheCruel.lua",
    "content": "local mod\t= DBM:NewMod(445, \"DBM-Party-Classic\", 16, 236)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10808)\nmod:SetEncounterID(474)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 8599\"\n)\n\nlocal warningEnrage\t\t= mod:NewTargetNoFilterAnnounce(8599, 2)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 8599 and args:IsDestTypeHostile() then\n\t\twarningEnrage:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Stratholme/WilleyHopebreaker.lua",
    "content": "local mod\t= DBM:NewMod(446, \"DBM-Party-Classic\", 16, 236)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10997)\nmod:SetEncounterID(475)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 17279\"\n)\n\n--TODO, see if adds are actually every 5 seconds, if so, leave announce off by default\nlocal warningSummonRisenRifleman\t\t= mod:NewSpellAnnounce(17279, 2, nil, false)\n\nlocal timerSummonRisenRiflemanCD\t\t= mod:NewAITimer(180, 17279, nil, nil, nil, 1)\n\nfunction mod:OnCombatStart(delay)\n\ttimerSummonRisenRiflemanCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 17279 then\n\t\twarningSummonRisenRifleman:Show()\n\t\ttimerSummonRisenRiflemanCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/SunkenTemple/AvatarofHakkar.lua",
    "content": "local mod\t= DBM:NewMod(457, \"DBM-Party-Classic\", 17, 237)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(8443)\nmod:SetEncounterID(492)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 12889 12888\",\n\t\"SPELL_AURA_APPLIED 12889 12888\"\n)\n\nlocal warningCurseofTongues\t\t\t= mod:NewTargetNoFilterAnnounce(12889, 2, nil, \"RemoveCurse\")\nlocal warningCauseInsanity\t\t\t= mod:NewTargetNoFilterAnnounce(12888, 4)\n\nlocal timerCurseofTonguesCD\t\t\t= mod:NewAITimer(180, 12889, nil, nil, nil, 3, nil, DBM_COMMON_L.CURSE_ICON)\nlocal timerCauseInsanityCD\t\t\t= mod:NewAITimer(180, 12888, nil, nil, nil, 3)\n\nfunction mod:OnCombatStart(delay)\n\ttimerCurseofTonguesCD:Start(1-delay)\n\ttimerCauseInsanityCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 12889 then\n\t\ttimerCurseofTonguesCD:Start()\n\telseif args.spellId == 12888 then\n\t\ttimerCauseInsanityCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 12889 then\n\t\twarningCurseofTongues:Show(args.destName)\n\telseif args.spellId == 12888 then\n\t\twarningCauseInsanity:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/SunkenTemple/Dreamscythe.lua",
    "content": "local mod\t= DBM:NewMod(\"Dreamscythe\", \"DBM-Party-Classic\", 17)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(5721)\nmod:SetEncounterID(486)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 12882 12884\"\n)\n\n--TODO, Change timers to sourcename timers when not AI\nlocal warnWingFlap\t\t\t\t\t\t= mod:NewSpellAnnounce(12882, 2)\nlocal warnAcidBreath\t\t\t\t\t= mod:NewSpellAnnounce(12884, 2)\n\nlocal timerWingFlapCD\t\t\t\t\t= mod:NewAITimer(180, 12882, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerAcidBreathCD\t\t\t\t\t= mod:NewAITimer(180, 12884, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerWingFlapCD:Start(1-delay)\n\ttimerAcidBreathCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 12882 and args:IsSrcTypeHostile() then\n\t\twarnWingFlap:Show()\n\t\ttimerWingFlapCD:Start()\n\telseif args.spellId == 12884 then\n\t\twarnAcidBreath:Show()\n\t\ttimerAcidBreathCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/SunkenTemple/Hazzas.lua",
    "content": "local mod\t= DBM:NewMod(\"Hazzas\", \"DBM-Party-Classic\", 17)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(5722)\nmod:SetEncounterID(491)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 12882 12884\"\n)\n\n--TODO, Change timers to sourcename timers when not AI\nlocal warnWingFlap\t\t\t\t\t\t= mod:NewSpellAnnounce(12882, 2)\nlocal warnAcidBreath\t\t\t\t\t= mod:NewSpellAnnounce(12884, 2)\n\nlocal timerWingFlapCD\t\t\t\t\t= mod:NewAITimer(180, 12882, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerAcidBreathCD\t\t\t\t\t= mod:NewAITimer(180, 12884, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerWingFlapCD:Start(1-delay)\n\ttimerAcidBreathCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 12882 and args:IsSrcTypeHostile() then\n\t\twarnWingFlap:Show()\n\t\ttimerWingFlapCD:Start()\n\telseif args.spellId == 12884 then\n\t\twarnAcidBreath:Show()\n\t\ttimerAcidBreathCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/SunkenTemple/JammalantheProphet.lua",
    "content": "local mod\t= DBM:NewMod(458, \"DBM-Party-Classic\", 17, 237)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(5710)--5711 Ogom the Wretched\nmod:SetEncounterID(488)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 12492 12468 8376 12471\",\n\t\"SPELL_CAST_SUCCESS 12479\",\n\t\"SPELL_AURA_APPLIED 12479 11639 12493\",\n\t\"SPELL_AURA_REMOVED 12479\",\n\t\"UNIT_DIED\"\n)\n\nlocal warningHealingWave\t\t\t\t= mod:NewCastAnnounce(12492, 2)\nlocal warningEarthgrabTotem\t\t\t\t= mod:NewSpellAnnounce(8376, 2)\nlocal warningFlamestrike\t\t\t\t= mod:NewCastAnnounce(12468, 2)\nlocal warningHexofJammalan\t\t\t\t= mod:NewTargetNoFilterAnnounce(12479, 2)\n--Ogom\nlocal warningCurseofWeakness\t\t\t= mod:NewTargetNoFilterAnnounce(12493, 2, nil, \"RemoveCurse\")\nlocal warningShadowWordPain\t\t\t\t= mod:NewTargetNoFilterAnnounce(11639, 2, nil, \"RemoveMagic\")\n\nlocal specWarnHexofJammalan\t\t\t\t= mod:NewSpecialWarningYou(12479, nil, nil, nil, 1, 2)\nlocal yellHexofJammalan\t\t\t\t\t= mod:NewYell(12479)\n--local yellHexofJammalanFades\t\t\t= mod:NewShortFadesYell(12479)--Requires BC plus, to distinquish 12479 vs 12480\n--Ogom\nlocal specWarnShadowBolt\t\t\t\t= mod:NewSpecialWarningInterrupt(12471, \"HasInterrupt\", nil, nil, 1, 2)\n\n--local timerHealingWaveCD\t\t\t\t= mod:NewAITimer(180, 12492, nil, nil, nil, 3)\nlocal timerEarthgrabTotemCD\t\t\t\t= mod:NewAITimer(180, 8376, nil, nil, nil, 1)\nlocal timerHexofJammalanCD\t\t\t\t= mod:NewAITimer(180, 12479, nil, nil, nil, 3)\n--Ogom\nlocal timerShadowBoltCD\t\t\t\t\t= mod:NewAITimer(180, 12479, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n--\ttimerHealingWaveCD:Start(1-delay)\n\ttimerEarthgrabTotemCD:Start(1-delay)\n\ttimerHexofJammalanCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 12492 and args:IsSrcTypeHostile() then\n\t\twarningHealingWave:Show()\n\t\t--timerHealingWaveCD:Start()\n\telseif args.spellId == 12468 and args:IsSrcTypeHostile() then\n\t\twarningFlamestrike:Show()\n\telseif args.spellId == 8376 and args:IsSrcTypeHostile() then\n\t\twarningEarthgrabTotem:Show()\n\t\ttimerEarthgrabTotemCD:Start()\n\telseif args.spellId == 12471 and args:IsSrcTypeHostile() then\n\t\ttimerShadowBoltCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnShadowBolt:Show(args.sourceName)\n\t\t\tspecWarnShadowBolt:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 12479 then\n\t\ttimerHexofJammalanCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 12479 then--12480 is curse debuff ID after initial 10 seconds\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnHexofJammalan:Show()\n\t\t\tspecWarnHexofJammalan:Play(\"targetyou\")\n\t\t\tyellHexofJammalan:Yell()\n\t\t\t--yellHexofJammalanFades:Countdown(12479)--Valid in retail, in classic we can't tell what version of debuff is so disabled\n\t\telse\n\t\t\twarningHexofJammalan:Show(args.destName)\n\t\tend\n\telseif args.spellId == 11639 and args:IsDestTypePlayer() then\n\t\twarningShadowWordPain:Show(args.destName)\n\telseif args.spellId == 12493 and args:IsDestTypePlayer() then\n\t\twarningCurseofWeakness:Show(args.destName)\n\tend\nend\n--[[\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 12479 then\n\t\tif args:IsPlayer() then\n\t\t\tyellHexofJammalanFades:Cancel()--Valid in retail, in classic we can't tell what version of debuff is so disabled\n\t\tend\n\tend\nend\n--]]\n\nfunction mod:UNIT_DIED(args)\n\tif self:GetCIDFromGUID(args.destGUID) == 5711 then--Ogom the Wretched\n\t\ttimerShadowBoltCD:Stop()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/SunkenTemple/Morphaz.lua",
    "content": "local mod\t= DBM:NewMod(\"Morphaz\", \"DBM-Party-Classic\", 17)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(5719)\nmod:SetEncounterID(490)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 12882 12884\"\n)\n\n--TODO, Change timers to sourcename timers when not AI\nlocal warnWingFlap\t\t\t\t\t\t= mod:NewSpellAnnounce(12882, 2)\nlocal warnAcidBreath\t\t\t\t\t= mod:NewSpellAnnounce(12884, 2)\n\nlocal timerWingFlapCD\t\t\t\t\t= mod:NewAITimer(180, 12882, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerAcidBreathCD\t\t\t\t\t= mod:NewAITimer(180, 12884, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerWingFlapCD:Start(1-delay)\n\ttimerAcidBreathCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 12882 and args:IsSrcTypeHostile() then\n\t\twarnWingFlap:Show()\n\t\ttimerWingFlapCD:Start()\n\telseif args.spellId == 12884 then\n\t\twarnAcidBreath:Show()\n\t\ttimerAcidBreathCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/SunkenTemple/ShadeofEranikus.lua",
    "content": "local mod\t= DBM:NewMod(463, \"DBM-Party-Classic\", 17, 237)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(5709)\nmod:SetEncounterID(493)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 12890 12533 24375\",\n\t\"SPELL_AURA_APPLIED 12890\"\n)\n\nlocal warningDeepSlumber\t\t\t= mod:NewTargetNoFilterAnnounce(12890, 2)\nlocal warningAcidBreath\t\t\t\t= mod:NewSpellAnnounce(12533, 2)\nlocal warningWarStomp\t\t\t\t= mod:NewSpellAnnounce(24375, 2)\n\nlocal timerDeepSlumberCD\t\t\t= mod:NewAITimer(180, 12890, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerAcidBreathCD\t\t\t\t= mod:NewAITimer(180, 12533, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerWarStompCD\t\t\t\t= mod:NewAITimer(180, 24375, nil, nil, nil, 2)\n\nfunction mod:OnCombatStart(delay)\n\ttimerDeepSlumberCD:Start(1-delay)\n\ttimerAcidBreathCD:Start(1-delay)\n\ttimerWarStompCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 12890 then\n\t\ttimerDeepSlumberCD:Start()\n\telseif args.spellId == 12533 then\n\t\twarningAcidBreath:Show()\n\t\ttimerAcidBreathCD:Start()\n\telseif args.spellId == 24375 and args:IsSrcTypeHostile() then\n\t\twarningWarStomp:Show()\n\t\ttimerWarStompCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 12890 then\n\t\twarningDeepSlumber:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/SunkenTemple/Weaver.lua",
    "content": "local mod\t= DBM:NewMod(\"Weaver\", \"DBM-Party-Classic\", 17)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(5720)\nmod:SetEncounterID(487)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 12882 12884\"\n)\n\n--TODO, Change timers to sourcename timers when not AI\nlocal warnWingFlap\t\t\t\t\t\t= mod:NewSpellAnnounce(12882, 2)\nlocal warnAcidBreath\t\t\t\t\t= mod:NewSpellAnnounce(12884, 2)\n\nlocal timerWingFlapCD\t\t\t\t\t= mod:NewAITimer(180, 12882, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerAcidBreathCD\t\t\t\t\t= mod:NewAITimer(180, 12884, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerWingFlapCD:Start(1-delay)\n\ttimerAcidBreathCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 12882 and args:IsSrcTypeHostile() then\n\t\twarnWingFlap:Show()\n\t\ttimerWingFlapCD:Start()\n\telseif args.spellId == 12884 then\n\t\twarnAcidBreath:Show()\n\t\ttimerAcidBreathCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Uldaman/AncientStoneKeeper.lua",
    "content": "local mod\t= DBM:NewMod(470, \"DBM-Party-Classic\", 18, 239)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(7206)\nmod:SetEncounterID(551)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 10132 10094\"\n)\n\nlocal warningSandStorms\t\t\t\t= mod:NewSpellAnnounce(10132, 2)\n\nlocal timerSandStormsCD\t\t\t\t= mod:NewAITimer(180, 10132, nil, nil, nil, 3)\n\nfunction mod:OnCombatStart(delay)\n\ttimerSandStormsCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(10132, 10094) then\n\t\twarningSandStorms:Show()\n\t\ttimerSandStormsCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Uldaman/Archaedas.lua",
    "content": "local mod\t= DBM:NewMod(473, \"DBM-Party-Classic\", 18, 239)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(2748)\nmod:SetEncounterID(554)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 10252 10258\",\n\t\"SPELL_CAST_SUCCESS 6524\"\n)\n\nlocal warningAwakenEarthenGuardians\t\t= mod:NewSpellAnnounce(10252, 2)\nlocal warningAwakenVaultWarder\t\t\t= mod:NewSpellAnnounce(10258, 2)\nlocal warningGroundTremor\t\t\t\t= mod:NewSpellAnnounce(6524, 3)\n\nlocal timerAwakenEarthenGuardiansCD\t\t= mod:NewAITimer(180, 10252, nil, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerGroundTremorCD\t\t\t\t= mod:NewAITimer(180, 6524, nil, nil, nil, 2)\n\nfunction mod:OnCombatStart(delay)\n\ttimerAwakenEarthenGuardiansCD:Start(1-delay)\n\ttimerGroundTremorCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 10252 then\n\t\twarningAwakenEarthenGuardians:Show()\n\t\ttimerAwakenEarthenGuardiansCD:Start()\n\telseif args.spellId == 10258 then\n\t\twarningAwakenVaultWarder:Show()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 6524 then\n\t\twarningGroundTremor:Show()\n\t\ttimerGroundTremorCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Uldaman/GalgannFirehammer.lua",
    "content": "local mod\t= DBM:NewMod(471, \"DBM-Party-Classic\", 18, 239)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(7291)\nmod:SetEncounterID(552)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 6725 3356 11969\"\n)\n\nlocal warningFireNova\t\t\t\t= mod:NewSpellAnnounce(11969, 2)\n\nlocal specWarnFlameSpike\t\t\t= mod:NewSpecialWarningInterrupt(6725, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnFlameLash\t\t\t\t= mod:NewSpecialWarningInterrupt(3356, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerFireNovaCD\t\t\t\t= mod:NewAITimer(180, 11969, nil, nil, nil, 2)\n\nfunction mod:OnCombatStart(delay)\n\ttimerFireNovaCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 6725 then\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnFlameSpike:Show(args.sourceName)\n\t\t\tspecWarnFlameSpike:Play(\"kickcast\")\n\t\tend\n\telseif args.spellId == 3356 then\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnFlameLash:Show(args.sourceName)\n\t\t\tspecWarnFlameLash:Play(\"kickcast\")\n\t\tend\n\telseif args.spellId == 11969 then\n\t\twarningFireNova:Show()\n\t\ttimerFireNovaCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Uldaman/Grimlok.lua",
    "content": "local mod\t= DBM:NewMod(472, \"DBM-Party-Classic\", 18, 239)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(4854)\nmod:SetEncounterID(553)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 8292 12167\",\n\t\"SPELL_CAST_SUCCESS 6742\",\n\t\"SPELL_AURA_APPLIED 6742 9906\"\n)\n\nlocal warningBloodlust\t\t\t\t= mod:NewTargetNoFilterAnnounce(6742, 3)\nlocal warningReflection\t\t\t\t= mod:NewTargetNoFilterAnnounce(9906, 4)\nlocal warningCrystallineSlumber\t\t= mod:NewTargetNoFilterAnnounce(3636, 4, nil, \"RemoveMagic\")\n\nlocal specWarnChainBolt\t\t\t\t= mod:NewSpecialWarningInterrupt(8292, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnLightningBolt\t\t\t= mod:NewSpecialWarningInterrupt(12167, false, nil, nil, 1, 2)\n\nlocal timerChainBoltCD\t\t\t\t= mod:NewAITimer(180, 8292, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerLightningBoltCD\t\t\t= mod:NewAITimer(180, 12167, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerBloodlustCD\t\t\t\t= mod:NewAITimer(180, 6742, nil, nil, nil, 5, nil, DBM_COMMON_L.MAGIC_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerChainBoltCD:Start(1-delay)\n\ttimerLightningBoltCD:Start(1-delay)\n\ttimerBloodlustCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 8292 and args:IsSrcTypeHostile() then\n\t\ttimerChainBoltCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnChainBolt:Show(args.sourceName)\n\t\t\tspecWarnChainBolt:Play(\"kickcast\")\n\t\tend\n\telseif args.spellId == 12167 and args:IsSrcTypeHostile() then\n\t\ttimerLightningBoltCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnLightningBolt:Show(args.sourceName)\n\t\t\tspecWarnLightningBolt:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 6742 and args:IsSrcTypeHostile() then\n\t\ttimerBloodlustCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 6742 and args:IsDestTypeHostile() then\n\t\twarningBloodlust:Show(args.destName)\n\telseif args.spellId == 9906 then\n\t\twarningReflection:Show(args.destName)\n\telseif args.spellId == 3636 then\n\t\twarningCrystallineSlumber:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Uldaman/Ironaya.lua",
    "content": "local mod\t= DBM:NewMod(469, \"DBM-Party-Classic\", 18, 239)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(7228)\nmod:SetEncounterID(549)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 8374 11876\"\n)\n\nlocal warningArcingSmash\t\t\t= mod:NewSpellAnnounce(8374, 2)\nlocal warningWarStomp\t\t\t\t= mod:NewSpellAnnounce(11876, 2)\n\nlocal timerArcingSmashCD\t\t\t= mod:NewAITimer(180, 8374, nil, \"Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerWarStompCD\t\t\t\t= mod:NewAITimer(180, 11876, nil, nil, nil, 2)\n\nfunction mod:OnCombatStart(delay)\n\ttimerArcingSmashCD:Start(1-delay)\n\ttimerWarStompCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 8374 then\n\t\twarningArcingSmash:Show()\n\t\ttimerArcingSmashCD:Start()\n\telseif args.spellId == 11876 then\n\t\twarningWarStomp:Show()\n\t\ttimerWarStompCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Uldaman/ObsidianSentinel.lua",
    "content": "local mod\t= DBM:NewMod(748, \"DBM-Party-Classic\", 18, 239)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(7023)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 10072\",\n\t\"SPELL_AURA_APPLIED 9941\"\n)\n\nlocal warningReflection\t\t\t\t= mod:NewTargetNoFilterAnnounce(9941, 2)\nlocal warningSplinteredObsidian\t\t= mod:NewSpellAnnounce(10072, 2)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 10072 and self:AntiSpam(3, 1) then\n\t\twarningSplinteredObsidian:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 9941 and self:AntiSpam(3, args.destName) then\n\t\twarningReflection:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Uldaman/Revelosh.lua",
    "content": "local mod\t= DBM:NewMod(467, \"DBM-Party-Classic\", 18, 239)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(6910)\nmod:SetEncounterID(547)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 16006 15801\"\n)\n\nlocal specWarnChainLightning\t\t\t= mod:NewSpecialWarningInterrupt(16006, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnLightningBolt\t\t\t\t= mod:NewSpecialWarningInterrupt(15801, false, nil, nil, 1, 2)\n\nlocal timerChainLightningCD\t\t\t\t= mod:NewAITimer(180, 16006, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerLightningBoltCD\t\t\t\t= mod:NewAITimer(180, 15801, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerChainLightningCD:Start(1-delay)\n\ttimerLightningBoltCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 16006 and args:IsSrcTypeHostile() then\n\t\ttimerChainLightningCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnChainLightning:Show(args.sourceName)\n\t\t\tspecWarnChainLightning:Play(\"kickcast\")\n\t\tend\n\telseif args.spellId == 15801 and args:IsSrcTypeHostile() then\n\t\ttimerLightningBoltCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnLightningBolt:Show(args.sourceName)\n\t\t\tspecWarnLightningBolt:Play(\"kickcast\")\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/Uldaman/TheLostDwarves.lua",
    "content": "if UnitFactionGroup(\"player\") == \"Alliance\" then return end\nlocal mod\t= DBM:NewMod(468, \"DBM-Party-Classic\", 18, 239)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(6906, 6907, 6908)\nmod:SetEncounterID(548)\n\nmod:SetBossHPInfoToHighest()\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/UpperBlackrockSpire/GeneralDrakkisath.lua",
    "content": "local mod\t= DBM:NewMod(\"GeneralDrakkisath\", \"DBM-Party-Classic\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10363)\nmod:SetEncounterID(280)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 16805\",\n\t\"SPELL_AURA_REMOVED 16805\"\n)\n\nlocal warnConflagration\t\t= mod:NewTargetNoFilterAnnounce(16805, 2)\n\nlocal timerConflagration\t= mod:NewTargetTimer(10, 16805, nil, nil, nil, 3)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 16805 then\n\t\twarnConflagration:Show(args.destName)\n\t\ttimerConflagration:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 16805 then\n\t\ttimerConflagration:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/UpperBlackrockSpire/GoralukAnvilcrack.lua",
    "content": "local mod\t= DBM:NewMod(\"GoralukAnvilcrack\", \"DBM-Party-Classic\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(10899)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/UpperBlackrockSpire/JedRunewatcher.lua",
    "content": "local mod\t= DBM:NewMod(\"JedRunewatcher\", \"DBM-Party-Classic\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(10509)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/UpperBlackrockSpire/PyroguardEmberseer.lua",
    "content": "local mod\t= DBM:NewMod(\"PyroguardEmberseer\", \"DBM-Party-Classic\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(9816)\nmod:SetEncounterID(276)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_EMOTE\"\n)\n\nlocal timerCombatStart\t= mod:NewCombatTimer(64)\n\nfunction mod:CHAT_MSG_MONSTER_EMOTE(msg)\n\tif msg == L.Pull or msg:find(L.Pull) and not timerCombatStart:IsStarted() then\n\t\ttimerCombatStart:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/UpperBlackrockSpire/SolakarFlamewreath.lua",
    "content": "local mod\t= DBM:NewMod(\"SolakarFlamewreath\", \"DBM-Party-Classic\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10264)\nmod:SetEncounterID(277)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/UpperBlackrockSpire/TheBeast.lua",
    "content": "local mod\t= DBM:NewMod(\"TheBeast\", \"DBM-Party-Classic\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10430)\nmod:SetEncounterID(279)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/UpperBlackrockSpire/WarchiefRendBlackhand.lua",
    "content": "local mod\t= DBM:NewMod(\"WarchiefRendBlackhand\", \"DBM-Party-Classic\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(10339, 10429) -- Gyth, Rend\nmod:SetMainBossID(10429)\nmod:SetEncounterID(278)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/WailingCaverns/DeviateFaerieDragon.lua",
    "content": "local mod\t= DBM:NewMod(\"DeviateFaerie\", \"DBM-Party-Classic\", 19)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(5912)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 8040\",\n\t\"SPELL_AURA_APPLIED 8040\"\n)\n\nlocal warningDruidSlumber\t\t\t= mod:NewTargetNoFilterAnnounce(8040, 2)\n\nlocal specWarnDruidsSlumber\t\t\t= mod:NewSpecialWarningInterrupt(8040, \"HasInterrupt\", nil, nil, 1, 2)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 8040 and args:IsSrcTypeHostile() then\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnDruidsSlumber:Show(args.sourceName)\n\t\t\tspecWarnDruidsSlumber:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 8040 and args:IsDestTypePlayer() then\n\t\twarningDruidSlumber:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/WailingCaverns/Kresh.lua",
    "content": "local mod\t= DBM:NewMod(477, \"DBM-Party-Classic\", 19, 240)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(3653)\nmod:SetEncounterID(587)\n\nmod:RegisterCombat(\"combat\")\n"
  },
  {
    "path": "DBM-Party-Classic/WailingCaverns/LadyAnacondra.lua",
    "content": "local mod\t= DBM:NewMod(474, \"DBM-Party-Classic\", 19, 240)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(3671)\nmod:SetEncounterID(585)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 8040 23381\",\n\t\"SPELL_AURA_APPLIED 8040\"\n)\n\n--TODO, no indication she actually has a heal, only lightning bolt and throns\nlocal warningDruidSlumber\t\t\t= mod:NewTargetNoFilterAnnounce(8040, 2)\nlocal warningHealingTouch\t\t\t= mod:NewCastAnnounce(23381, 2)\n\nlocal specWarnDruidsSlumber\t\t\t= mod:NewSpecialWarningInterrupt(8040, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerDruidsSlumberCD\t\t\t= mod:NewAITimer(180, 8040, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON..DBM_COMMON_L.MAGIC_ICON)\nlocal timerHealingTouchCD\t\t\t= mod:NewAITimer(180, 23381, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerDruidsSlumberCD:Start(1-delay)\n\ttimerHealingTouchCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 8040 and args:IsSrcTypeHostile() then\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnDruidsSlumber:Show(args.sourceName)\n\t\t\tspecWarnDruidsSlumber:Play(\"kickcast\")\n\t\tend\n\telseif args.spellId == 23381 and args:IsSrcTypeHostile() then\n\t\twarningHealingTouch:Show()\n\t\ttimerHealingTouchCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 8040 and args:IsDestTypePlayer() then\n\t\twarningDruidSlumber:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/WailingCaverns/LordCobrahn.lua",
    "content": "local mod\t= DBM:NewMod(475, \"DBM-Party-Classic\", 19, 240)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(3669)\nmod:SetEncounterID(586)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 8040 23381\",\n\t\"SPELL_CAST_SUCCESS 7965\",\n\t\"SPELL_AURA_APPLIED 8040 17330\"\n)\n\nlocal warningDruidSlumber\t\t\t= mod:NewTargetNoFilterAnnounce(8040, 2)\nlocal warningHealingTouch\t\t\t= mod:NewCastAnnounce(23381, 2)\nlocal warningPoison\t\t\t\t\t= mod:NewTargetNoFilterAnnounce(17330, 2, nil, \"RemovePoison\")\n\nlocal specWarnDruidsSlumber\t\t\t= mod:NewSpecialWarningInterrupt(8040, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerDruidsSlumberCD\t\t\t= mod:NewAITimer(180, 8040, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON..DBM_COMMON_L.MAGIC_ICON)\nlocal timerHealingTouchCD\t\t\t= mod:NewAITimer(180, 23381, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerPoisonCD\t\t\t\t\t= mod:NewAITimer(180, 23381, nil, \"RemovePoison\", nil, 5, nil, DBM_COMMON_L.POISON_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerDruidsSlumberCD:Start(1-delay)\n\ttimerHealingTouchCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 8040 and args:IsSrcTypeHostile() then\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnDruidsSlumber:Show(args.sourceName)\n\t\t\tspecWarnDruidsSlumber:Play(\"kickcast\")\n\t\tend\n\telseif args.spellId == 23381 and args:IsSrcTypeHostile() then\n\t\twarningHealingTouch:Show()\n\t\ttimerHealingTouchCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 7965 then\n\t\ttimerDruidsSlumberCD:Stop()\n\t\ttimerHealingTouchCD:Stop()\n\t\ttimerPoisonCD:Start(1)\n\telseif args.spellId == 17330 and args:IsSrcTypeHostile() then\n\t\ttimerPoisonCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 8040 and args:IsDestTypePlayer() then\n\t\twarningDruidSlumber:Show(args.destName)\n\telseif args.spellId == 17330 and args:IsDestTypePlayer() and self:CheckDispelFilter(\"poison\") then\n\t\twarningPoison:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/WailingCaverns/LordPythas.lua",
    "content": "local mod\t= DBM:NewMod(476, \"DBM-Party-Classic\", 19, 240)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(3670)\nmod:SetEncounterID(588)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 8040 23381\",\n\t\"SPELL_AURA_APPLIED 8040\"\n)\n\nlocal warningDruidSlumber\t\t\t= mod:NewTargetNoFilterAnnounce(8040, 2)\nlocal warningHealingTouch\t\t\t= mod:NewCastAnnounce(23381, 2)\n\nlocal specWarnDruidsSlumber\t\t\t= mod:NewSpecialWarningInterrupt(8040, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerDruidsSlumberCD\t\t\t= mod:NewAITimer(180, 8040, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON..DBM_COMMON_L.MAGIC_ICON)\nlocal timerHealingTouchCD\t\t\t= mod:NewAITimer(180, 23381, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerDruidsSlumberCD:Start(1-delay)\n\ttimerHealingTouchCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 8040 and args:IsSrcTypeHostile() then\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnDruidsSlumber:Show(args.sourceName)\n\t\t\tspecWarnDruidsSlumber:Play(\"kickcast\")\n\t\tend\n\telseif args.spellId == 23381 and args:IsSrcTypeHostile() then\n\t\twarningHealingTouch:Show()\n\t\ttimerHealingTouchCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 8040 and args:IsDestTypePlayer() then\n\t\twarningDruidSlumber:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/WailingCaverns/LordSerpentis.lua",
    "content": "local mod\t= DBM:NewMod(479, \"DBM-Party-Classic\", 19, 240)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(3673)\nmod:SetEncounterID(590)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 8040 23381\",\n\t\"SPELL_AURA_APPLIED 8040\"\n)\n\nlocal warningDruidSlumber\t\t\t= mod:NewTargetNoFilterAnnounce(8040, 2)\nlocal warningHealingTouch\t\t\t= mod:NewCastAnnounce(23381, 2)\n\nlocal specWarnDruidsSlumber\t\t\t= mod:NewSpecialWarningInterrupt(8040, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerDruidsSlumberCD\t\t\t= mod:NewAITimer(180, 8040, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON..DBM_COMMON_L.MAGIC_ICON)\nlocal timerHealingTouchCD\t\t\t= mod:NewAITimer(180, 23381, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerDruidsSlumberCD:Start(1-delay)\n\ttimerHealingTouchCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 8040 and args:IsSrcTypeHostile() then\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnDruidsSlumber:Show(args.sourceName)\n\t\t\tspecWarnDruidsSlumber:Play(\"kickcast\")\n\t\tend\n\telseif args.spellId == 23381 and args:IsSrcTypeHostile() then\n\t\twarningHealingTouch:Show()\n\t\ttimerHealingTouchCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 8040 and args:IsDestTypePlayer() then\n\t\twarningDruidSlumber:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/WailingCaverns/MutanustheDevourer.lua",
    "content": "local mod\t= DBM:NewMod(481, \"DBM-Party-Classic\", 19, 240)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(3654)\nmod:SetEncounterID(592)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 7967\",\n\t\"SPELL_CAST_SUCCESS 7399 8150\",\n\t\"SPELL_AURA_APPLIED 7399\"\n)\n\n-- local warningNaralexsNightmare\t\t= mod:NewTargetNoFilterAnnounce(7967, 2)\nlocal warningTerrify\t\t\t\t= mod:NewTargetNoFilterAnnounce(7399, 2)\n\nlocal specWarnNaralexsNightmare\t\t= mod:NewSpecialWarningInterrupt(7967, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerNaralexsNightmareCD\t\t= mod:NewAITimer(180, 7967, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON..DBM_COMMON_L.MAGIC_ICON)\nlocal timerTerrifyCD\t\t\t\t= mod:NewAITimer(180, 7399, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerThundercrackCD\t\t\t= mod:NewAITimer(180, 8150, nil, nil, nil, 2, nil, DBM_COMMON_L.HEALER_ICON..DBM_COMMON_L.MAGIC_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerNaralexsNightmareCD:Start(1-delay)\n\ttimerTerrifyCD:Start(1-delay)\n\ttimerThundercrackCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 7967 then\n\t\ttimerNaralexsNightmareCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnNaralexsNightmare:Show(args.sourceName)\n\t\t\tspecWarnNaralexsNightmare:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 7399 then\n\t\ttimerTerrifyCD:Start()\n\telseif args.spellId == 8150 then\n\t\ttimerThundercrackCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 7399 then\n\t\twarningTerrify:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/WailingCaverns/Skum.lua",
    "content": "local mod\t= DBM:NewMod(478, \"DBM-Party-Classic\", 19, 240)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(3674)\nmod:SetEncounterID(589)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 6254\"\n)\n\n--TODO, fix range to one classic actually supports\nlocal timerChainedBoltCD\t\t\t= mod:NewAITimer(180, 6254, nil, nil, nil, 3)\n\nmod:AddRangeFrameOption(10, 6254)\n\nfunction mod:OnCombatStart(delay)\n\ttimerChainedBoltCD:Start(1-delay)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(10)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 6254 and args:IsSrcTypeHostile() then\n\t\ttimerChainedBoltCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/WailingCaverns/VerantheEverliving.lua",
    "content": "local mod\t= DBM:NewMod(480, \"DBM-Party-Classic\", 19, 240)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(5775)\nmod:SetEncounterID(591)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 8142\"\n)\n\nlocal warnVines\t\t\t= mod:NewSpellAnnounce(8142, 2)\n\nlocal timerVinesCD\t\t= mod:NewAITimer(180, 8142, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerVinesCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 8142 and args:IsDestTypePlayer() then\n\t\twarnVines:Show(args.sourceName)\n\t\ttimerVinesCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/ZulFarrak/Antusul.lua",
    "content": "local mod\t= DBM:NewMod(484, \"DBM-Party-Classic\", 20, 241)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(8127)\nmod:SetEncounterID(595)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 11895 15982 4971 8376\",\n\t\"SPELL_CAST_SUCCESS 11894\"\n)\n\n--TODO, Totems on shared timer?\n--TODO, tone down special warnings if they are too much. They might be more than people are used to/want in classic\nlocal warningEarthgrabTotem\t\t\t= mod:NewSpellAnnounce(8376, 2)\nlocal warningHealingWard\t\t\t= mod:NewSpellAnnounce(4971, 4)\n\nlocal specWarnHealingWaveSelf\t\t\t= mod:NewSpecialWarningInterrupt(11895, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnHealingWaveAlly\t\t\t= mod:NewSpecialWarningInterrupt(15982, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnMinions\t\t\t\t\t= mod:NewSpecialWarningSwitch(11894, \"Dps\", nil, nil, 1, 2)\n\nlocal timerHealingWaveSelfCD\t\t\t= mod:NewAITimer(180, 11895, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerHealingWaveAllyCD\t\t\t= mod:NewAITimer(180, 15982, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerMinionsCD\t\t\t\t\t= mod:NewAITimer(180, 11894, nil, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerHealingWaveSelfCD:Start(1-delay)\n\ttimerHealingWaveAllyCD:Start(1-delay)\n\ttimerMinionsCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 11895 then\n\t\ttimerHealingWaveSelfCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnHealingWaveSelf:Show(args.sourceName)\n\t\t\tspecWarnHealingWaveSelf:Play(\"kickcast\")\n\t\tend\n\telseif args.spellId == 15982 and args:IsSrcTypeHostile() then\n\t\ttimerHealingWaveAllyCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnHealingWaveAlly:Show(args.sourceName)\n\t\t\tspecWarnHealingWaveAlly:Play(\"kickcast\")\n\t\tend\n\telseif args.spellId == 8376 and args:IsSrcTypeHostile() then\n\t\twarningEarthgrabTotem:Show()\n\telseif args.spellId == 4971 and args:IsSrcTypeHostile() then\n\t\twarningHealingWard:Show()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 11894 then\n\t\tspecWarnMinions:Show()\n\t\tspecWarnMinions:Play(\"killmob\")\n\t\ttimerMinionsCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/ZulFarrak/ChiefUkorzSandscalp.lua",
    "content": "local mod\t= DBM:NewMod(489, \"DBM-Party-Classic\", 20, 241)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(7267)--7797/ruuzlu\nmod:SetEncounterID(600)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 8269\"\n)\n\n--TODO, Add cleave timer?\nlocal warningEnrage\t\t\t= mod:NewTargetNoFilterAnnounce(8269, 2)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 8269 and args:IsDestTypePlayer() then\n\t\twarningEnrage:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/ZulFarrak/Gahzrilla.lua",
    "content": "local mod\t= DBM:NewMod(483, \"DBM-Party-Classic\", 20, 241)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(7273)\nmod:SetEncounterID(594)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 11836\",\n\t\"SPELL_CAST_SUCCESS 11902\",\n\t\"SPELL_AURA_APPLIED 11836\"\n)\n\n--TODO, no indication she actually has a heal, only lightning bolt and throns\nlocal warningFreezeSolid\t\t\t= mod:NewTargetNoFilterAnnounce(11836, 2)\nlocal warningSlam\t\t\t\t\t= mod:NewSpellAnnounce(11902, 2)\n\nlocal timerFreezeSolidCD\t\t\t= mod:NewAITimer(180, 11836, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerSlamCD\t\t\t\t\t= mod:NewAITimer(180, 11902, nil, nil, nil, 2)\n\nfunction mod:OnCombatStart(delay)\n\ttimerFreezeSolidCD:Start(1-delay)\n\ttimerSlamCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 11836 and args:IsSrcTypeHostile() then\n\t\ttimerFreezeSolidCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 11836 and args:IsDestTypePlayer() then\n\t\twarningFreezeSolid:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 11902 and args:IsSrcTypeHostile() then\n\t\twarningSlam:Show()\n\t\ttimerSlamCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/ZulFarrak/HydromancerVelrath.lua",
    "content": "local mod\t= DBM:NewMod(\"HydromancerVelrath\", \"DBM-Party-Classic\", 20)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(7795)\nmod:SetEncounterID(593)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 12491\"\n)\n\nlocal specWarnHealingWave\t\t\t= mod:NewSpecialWarningInterrupt(12491, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerHealingWaveCD\t\t\t= mod:NewAITimer(180, 12491, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerHealingWaveCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 12491 and args:IsSrcTypeHostile() then\n\t\ttimerHealingWaveCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnHealingWave:Show(args.sourceName)\n\t\t\tspecWarnHealingWave:Play(\"kickcast\")\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/ZulFarrak/Nekrum_Sezzziz.lua",
    "content": "local mod\t= DBM:NewMod(487, \"DBM-Party-Classic\", 20, 241)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(7796, 7275)--nekrum-gutchewer, shadowpriest-sezzziz\nmod:SetEncounterID(599)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 8362 12039\",\n\t\"SPELL_CAST_SUCCESS 13704\",\n\t\"SPELL_AURA_APPLIED 8600\",\n\t\"UNIT_DIED\"\n)\n\nlocal warningFeveredPlague\t\t\t= mod:NewTargetNoFilterAnnounce(8600, 2, nil, \"RemoveDisease\")\n\nlocal specWarnRenew\t\t\t\t\t= mod:NewSpecialWarningInterrupt(8362, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnHeal\t\t\t\t\t= mod:NewSpecialWarningInterrupt(12039, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerRenewCD\t\t\t\t\t= mod:NewAITimer(180, 8362, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON..DBM_COMMON_L.MAGIC_ICON)\nlocal timerHealCD\t\t\t\t\t= mod:NewAITimer(180, 12039, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerPsychicScreamCD\t\t\t= mod:NewAITimer(180, 13704, nil, nil, nil, 2)\n\nfunction mod:OnCombatStart(delay)\n\ttimerRenewCD:Start(1-delay)\n\ttimerHealCD:Start(1-delay)\n\ttimerPsychicScreamCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 8362 and args:IsSrcTypeHostile() then\n\t\ttimerRenewCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnRenew:Show(args.sourceName)\n\t\t\tspecWarnRenew:Play(\"kickcast\")\n\t\tend\n\telseif args.spellId == 12039 and args:IsSrcTypeHostile() then\n\t\ttimerHealCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnHeal:Show(args.sourceName)\n\t\t\tspecWarnHeal:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 13704 and args:IsSrcTypeHostile() then\n\t\ttimerPsychicScreamCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 8600 and args:IsDestTypePlayer() and self:CheckDispelFilter(\"disease\") then\n\t\twarningFeveredPlague:Show(args.destName)\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tif self:GetCIDFromGUID(args.destGUID) == 7275 then--sezzziz\n\t\ttimerRenewCD:Stop()\n\t\ttimerHealCD:Stop()\n\t\ttimerPsychicScreamCD:Stop()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/ZulFarrak/ThekatheMartyr.lua",
    "content": "local mod\t= DBM:NewMod(485, \"DBM-Party-Classic\", 20, 241)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(7272)\nmod:SetEncounterID(596)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 11089\",\n\t\"SPELL_AURA_APPLIED 8600\"\n)\n\nlocal warningFeveredPlague\t\t\t= mod:NewTargetNoFilterAnnounce(8600, 2, nil, \"RemoveDisease\")\nlocal warningThekaTransoform\t\t= mod:NewSpellAnnounce(11089, 2)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 11089 then\n\t\twarningThekaTransoform:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 8600 and args:IsDestTypePlayer() and self:CheckDispelFilter(\"disease\") then\n\t\twarningFeveredPlague:Show(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/ZulFarrak/WitchDoctorZumrah.lua",
    "content": "local mod\t= DBM:NewMod(486, \"DBM-Party-Classic\", 20, 241)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(7271)\nmod:SetEncounterID(597)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 12491 15245\",\n\t\"SPELL_CAST_SUCCESS 11086\"\n)\n\nlocal warningWardZumrah\t\t\t\t= mod:NewSpellAnnounce(11086, 2)\n\nlocal specWarnHealingWave\t\t\t= mod:NewSpecialWarningInterrupt(12491, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnShadowBoltVolley\t\t= mod:NewSpecialWarningInterrupt(15245, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerWardZumrahCD\t\t\t\t= mod:NewAITimer(180, 11086, nil, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerHealingWaveCD\t\t\t= mod:NewAITimer(180, 12491, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerShadowBoltVolleyCD\t\t= mod:NewAITimer(180, 15245, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:OnCombatStart(delay)\n\ttimerWardZumrahCD:Start(1-delay)\n\ttimerHealingWaveCD:Start(1-delay)\n\ttimerShadowBoltVolleyCD:Start(1-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 12491 and args:IsSrcTypeHostile() then\n\t\ttimerHealingWaveCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnHealingWave:Show(args.sourceName)\n\t\t\tspecWarnHealingWave:Play(\"kickcast\")\n\t\tend\n\telseif args.spellId == 15245 and args:IsSrcTypeHostile() then\n\t\ttimerShadowBoltVolleyCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnShadowBoltVolley:Show(args.sourceName)\n\t\t\tspecWarnShadowBoltVolley:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 11086 then\n\t\twarningWardZumrah:Show()\n\t\ttimerWardZumrahCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-Classic/localization.cn.lua",
    "content": "-- Last update: 2020/07/28 （重新整理）\nif GetLocale() ~= \"zhCN\" then return end\nlocal L\n\n-------------------------\n--  Blackfathom Deeps (1)  --\n-----------------------------\n--  Ghamoo-Ra  --\n-----------------------------\nL = DBM:GetModLocalization(\"GhamooRa\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"加摩拉\"\n})\n\n-----------------------------\n--  Lady Sarevess  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadySerevess\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"萨利维丝\"\n})\n\n-----------------------------\n--  Gelihast  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gelihast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"格里哈斯特\"\n})\n\n-----------------------------\n--  Old Serra'kis  --\n-----------------------------\nL = DBM:GetModLocalization(\"OldSerrakis\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"瑟拉吉斯\"\n})\n\n-----------------------------\n--  Twilight Lord Kelris  --\n-----------------------------\nL = DBM:GetModLocalization(\"TwilightLordKelris\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"暮光领主克尔里斯\"\n})\n\n-----------------------------\n--  Aku'mai  --\n-----------------------------\nL = DBM:GetModLocalization(\"Akumai\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"阿库麦尔\"\n})\n\n-------------------------\n--  Blackrock Depths-228J/230M (2)  --\n-----------------------------\n--  High Interrogator Gerstahn  --\n-----------------------------\nL = DBM:GetModLocalization(369)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"审讯官格斯塔恩\"\n})\n\n-----------------------------\n--  Lord Roccor  --\n-----------------------------\nL = DBM:GetModLocalization(370)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"洛考尔\"\n})\n\n-----------------------------\n--  Houndmaster Grebmar  --\n-----------------------------\nL = DBM:GetModLocalization(371)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"驯犬者格雷布玛尔\"\n})\n\n-----------------------------\n--  Ring of Law (High Justice Grimstone)  --\n-----------------------------\nL = DBM:GetModLocalization(372)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"裁决者格里斯通\"\n})\n\n-----------------------------\n--  Pyromancer Loregrain  --\n-----------------------------\nL = DBM:GetModLocalization(373)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"控火师罗格雷恩\"\n})\n\n-----------------------------\n--  Lord Incendius  --\n-----------------------------\nL = DBM:GetModLocalization(374)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"伊森迪奥斯\"\n})\n\n-----------------------------\n--  Warden Stilgiss  --\n-----------------------------\nL = DBM:GetModLocalization(375)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"典狱官斯迪尔基斯\"\n})\n\n-----------------------------\n--  Fineous Darkvire  --\n-----------------------------\nL = DBM:GetModLocalization(376)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"弗诺斯·达克维尔\"\n})\n\n-----------------------------\n--  Bael'Gar  --\n-----------------------------\nL = DBM:GetModLocalization(377)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"贝尔加\"\n})\n\n-----------------------------\n--  General Angerforge  --\n-----------------------------\nL = DBM:GetModLocalization(378)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"怒炉将军\"\n})\n\n-----------------------------\n--  Golem Lord Argelmach  --\n-----------------------------\nL = DBM:GetModLocalization(379)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"傀儡统帅阿格曼奇\"\n})\n\n-----------------------------\n--  Hurley Blackbreath  --\n-----------------------------\nL = DBM:GetModLocalization(380)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"霍尔雷·黑须\"\n})\n\n-----------------------------\n--  Phalanx  --\n-----------------------------\nL = DBM:GetModLocalization(381)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"法拉克斯\"\n})\n\n-----------------------------\n--  Plugger Spazzring  --\n-----------------------------\nL = DBM:GetModLocalization(383)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"普拉格\"\n})\n\n-----------------------------\n--  Ambassador Flamelash  --\n-----------------------------\nL = DBM:GetModLocalization(384)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"弗莱拉斯大使\"\n})\n\n-----------------------------\n--  The Seven  --\n-----------------------------\nL = DBM:GetModLocalization(385)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"七贤\"\n})\n\n-----------------------------\n--  Magmus  --\n-----------------------------\nL = DBM:GetModLocalization(386)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"玛格姆斯\"\n})\n\n-----------------------------\n--  Emperor Dagran Thaurissan  --\n-----------------------------\nL = DBM:GetModLocalization(387)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"达格兰·索瑞森大帝\"\n})\n\n-------------------------\n--  Lower Blackrock Spire-229J/229M (6L/3C)  --\n-----------------------------\n--  Highlord Omokk  --\n-----------------------------\nL = DBM:GetModLocalization(388)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"欧莫克大王\"\n})\n\n-----------------------------\n--  Shadow Hunter Vosh'gajin  --\n-----------------------------\nL = DBM:GetModLocalization(389)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"暗影猎手沃许加斯\"\n})\n\n-----------------------------\n--  War Master Voone  --\n-----------------------------\nL = DBM:GetModLocalization(390)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"指挥官沃恩\"\n})\n\n-----------------------------\n--  Mother Smolderweb  --\n-----------------------------\nL = DBM:GetModLocalization(391)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"烟网蛛后\"\n})\n\n-----------------------------\n--  Urok Doomhowl  --\n-----------------------------\nL = DBM:GetModLocalization(392)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"乌洛克\"\n})\n\n-----------------------------\n--  Quartermaster Zigris  --\n-----------------------------\nL = DBM:GetModLocalization(393)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"军需官兹格雷斯\"\n})\n\n-----------------------------\n--  Halycon  --\n-----------------------------\nL = DBM:GetModLocalization(394)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"哈雷肯\"\n})\n\n-----------------------------\n--  Gizrul  --\n-----------------------------\nL = DBM:GetModLocalization(395)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"奴役者基兹卢尔\"\n})\n\n-----------------------------\n--  Overlord Wyrmthalak  --\n-----------------------------\nL = DBM:GetModLocalization(396)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"维姆萨拉克\"\n})\n\n-------------------------\n--  Upper Blackrock Spire-229J/229M (4C)  --\n-----------------------------\n--  Pyroguard Emberseer  --\n-----------------------------\nL = DBM:GetModLocalization(\"PyroguardEmberseer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"烈焰卫士艾博希尔\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"%s 开始恢复实力!\"\n})\n\n-----------------------------\n--  Solakar Flamewreath  --\n-----------------------------\nL = DBM:GetModLocalization(\"SolakarFlamewreath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"索拉卡·火冠\"\n})\n\n-----------------------------\n--  Goraluk Anvilcrack  --\n-----------------------------\nL = DBM:GetModLocalization(\"GoralukAnvilcrack\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"古拉鲁克\"\n})\n\n-----------------------------\n--  Jed Runewatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"JedRunewatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"杰德\"\n})\n\n-----------------------------\n--  Warchief Rend Blackhand  --\n-----------------------------\nL = DBM:GetModLocalization(\"WarchiefRendBlackhand\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"大酋长雷德·黑手\"\n})\n\n-----------------------------\n--  The Beast  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheBeast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"比斯巨兽\"\n})\n\n-----------------------------\n--  General Drakkisath  --\n-----------------------------\nL = DBM:GetModLocalization(\"GeneralDrakkisath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"达基萨斯将军\"\n})\n\n-------------------------\n--  Deadmines (3L/5C)  --\n-----------------------------\n--  Rhahk'Zor  --\n-----------------------------\nL = DBM:GetModLocalization(\"RhahkZor\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"拉克佐\"\n})\n\n-----------------------------\n--  Miner Johnson  --\n-----------------------------\nL = DBM:GetModLocalization(\"MinerJohnson\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"矿工约翰森\"\n})\n\n-----------------------------\n--  Sneed's Shredder  --\n-----------------------------\nL = DBM:GetModLocalization(\"SneedsShredder\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"斯尼德的伐木机\"\n})\n\n-----------------------------\n--  Gilnid  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gilnid\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"基尔尼格\"\n})\n\n-----------------------------\n--  Mr. Smite  --\n-----------------------------\nL = DBM:GetModLocalization(\"MrSmite\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"重拳先生\"\n})\n\n-----------------------------\n--  Captain Greenskin  --\n-----------------------------\nL = DBM:GetModLocalization(\"CaptainGreenskin\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"绿皮队长\"\n})\n\n-----------------------------\n--  Edwin Van Cleef  --\n-----------------------------\nL = DBM:GetModLocalization(\"EdwinVanCleef\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"艾德温·范克里夫\"\n})\n\n-----------------------------\n--  Cookie  --\n-----------------------------\nL = DBM:GetModLocalization(\"Cookie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"曲奇\"\n})\n\n-------------------------\n--  Dire Maul-230J/429M (4L/6C)  --\n-----------------------------\n--  Zevrim Thornhoof  --\n-----------------------------\nL = DBM:GetModLocalization(402)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"瑟雷姆·刺蹄\"\n})\n\n-----------------------------\n--  Hydrospawn  --\n-----------------------------\nL = DBM:GetModLocalization(403)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"海多斯博恩\"\n})\n\n-----------------------------\n--  Lethtendris  --\n-----------------------------\nL = DBM:GetModLocalization(404)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"蕾瑟塔蒂丝\"\n})\n\n-----------------------------\n--  Alzzin the Wildshaper  --\n-----------------------------\nL = DBM:GetModLocalization(405)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"奥兹恩\"\n})\n\n-----------------------------\n--  Tendris Warpwood  --\n-----------------------------\nL = DBM:GetModLocalization(406)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"特迪斯·扭木\"\n})\n\n-----------------------------\n--  Illyanna Ravenoak  --\n-----------------------------\nL = DBM:GetModLocalization(407)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"伊琳娜·暗木\"\n})\n\n-----------------------------\n--  Magister Kalendris  --\n-----------------------------\nL = DBM:GetModLocalization(408)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"卡雷迪斯镇长\"\n})\n\n-----------------------------\n--  Immol'thar  --\n-----------------------------\nL = DBM:GetModLocalization(409)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"伊莫塔尔\"\n})\n\n-----------------------------\n--  Prince Tortheldrin  --\n-----------------------------\nL = DBM:GetModLocalization(410)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"托塞德林王子\"\n})\n\n-----------------------------\n--  Guard Mol'dar  --\n-----------------------------\nL = DBM:GetModLocalization(411)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"卫兵摩尔达\"\n})\n\n-----------------------------\n--  Stomper Kreeg  --\n-----------------------------\nL = DBM:GetModLocalization(412)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"践踏者克雷格\"\n})\n\n-----------------------------\n--  Guard Fengus  --\n-----------------------------\nL = DBM:GetModLocalization(413)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"卫兵芬古斯\"\n})\n\n-----------------------------\n--  Guard Slip'kik  --\n-----------------------------\nL = DBM:GetModLocalization(414)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"卫兵斯里基克\"\n})\n\n-----------------------------\n--  Captain Kromcrush  --\n-----------------------------\nL = DBM:GetModLocalization(415)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"克罗卡斯\"\n})\n\n-----------------------------\n--  Cho'Rush the Observer  --\n-----------------------------\nL = DBM:GetModLocalization(416)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"观察者克鲁什\"\n})\n\n-----------------------------\n--  King Gordok  --\n-----------------------------\nL = DBM:GetModLocalization(417)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"戈多克大王\"\n})\n\n-------------------------\n--  Gnomeregan-231J/90M (5L/7C)  --\n-----------------------------\n--  Grubbis  --\n-----------------------------\nL = DBM:GetModLocalization(419)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"格鲁比斯\"\n})\n\n-----------------------------\n--  Viscous Fallout  --\n-----------------------------\nL = DBM:GetModLocalization(420)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"粘性辐射尘\"\n})\n\n-----------------------------\n--  Electrocutioner 6000  --\n-----------------------------\nL = DBM:GetModLocalization(421)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"电刑器6000型\"\n})\n\n-----------------------------\n--  Crowd Pummeler 9-60  --\n-----------------------------\nL = DBM:GetModLocalization(418)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"群体打击者9-60\"\n})\n\n-----------------------------\n--  Mekgineer Thermaplugg  --\n-----------------------------\nL = DBM:GetModLocalization(422)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"麦克尼尔·瑟玛普拉格\"\n})\n\nL:SetMiscLocalization({\n\tYellBomb\t= \"爆炸！更多爆炸！我需要更多爆炸！\"\n})\n\n-------------------------\n--  Maraudon-232J/349M (6L/8C)  --\n-----------------------------\n--  Noxxion  --\n-----------------------------\nL = DBM:GetModLocalization(423)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"诺克赛恩\"\n})\n\n-----------------------------\n--  Razorlash  --\n-----------------------------\nL = DBM:GetModLocalization(424)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"锐刺鞭笞者\"\n})\n\n-----------------------------\n--  Tinkerer Gizlock  --\n-----------------------------\nL = DBM:GetModLocalization(425)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"工匠吉兹洛克\"\n})\n\n-----------------------------\n--  Lord Vyletongue  --\n-----------------------------\nL = DBM:GetModLocalization(427)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"维利塔恩\"\n})\n\n-----------------------------\n--  Celebras the Cursed  --\n-----------------------------\nL = DBM:GetModLocalization(428)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"被诅咒的塞雷布拉斯\"\n})\n\n-----------------------------\n--  Landslide  --\n-----------------------------\nL = DBM:GetModLocalization(429)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"兰斯利德\"\n})\n\n-----------------------------\n--  Rotgrip  --\n-----------------------------\nL = DBM:GetModLocalization(430)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"洛特格里普\"\n})\n\n-----------------------------\n--  Princess Theradras  --\n-----------------------------\nL = DBM:GetModLocalization(431)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"瑟莱德丝公主\"\n})\n\n-------------------------\n--  Ragefire Chasm (7L/9C)  --\n-----------------------------\n--  Oggleflint  --\n-----------------------------\nL = DBM:GetModLocalization(\"Oggleflint\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"奥格弗林特\"\n})\n\n-----------------------------\n--  Taragaman the Hungerer  --\n-----------------------------\nL = DBM:GetModLocalization(\"Taragaman\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"饥饿者塔拉加曼\"\n})\n\n-----------------------------\n--  Jergosh the Invoker  --\n-----------------------------\nL = DBM:GetModLocalization(\"Jergosh\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"祈求者耶戈什\"\n})\n\n-----------------------------\n--  Bazzalan  --\n-----------------------------\nL = DBM:GetModLocalization(\"Bazzalan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"巴札兰\"\n})\n\n-------------------------\n--  Razorfen Downs -233J/129M (8L/10C)  --\n-----------------------------\n--  Tuten'kash  --\n-----------------------------\nL = DBM:GetModLocalization(\"Tutenkash\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"图特卡什\"\n})\n\n-----------------------------\n--  Mordresh Fire Eye  --\n-----------------------------\nL = DBM:GetModLocalization(\"MordreshFireEye\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"火眼莫德雷斯\"\n})\n\n-----------------------------\n--  Glutton  --\n-----------------------------\nL = DBM:GetModLocalization(\"Glutton\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"暴食者\"\n})\n\n-----------------------------\n--  Ragglesnout  --\n-----------------------------\nL = DBM:GetModLocalization(\"Ragglesnout\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"拉戈斯诺特\"\n})\n\n-----------------------------\n--  Amnenar the Coldbringer  --\n-----------------------------\nL = DBM:GetModLocalization(\"AmnennartheColdbringer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"寒冰之王亚门纳尔\"\n})\n\n-----------------------------\n--  Plaguemaw the Rotting  --\n-----------------------------\nL = DBM:GetModLocalization(\"PlaguemawtheRotting\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"腐烂的普雷莫尔\"\n})\n\n-------------------------\n--  Razorfen Kraul -234J/47M (9L/11C)  --\n-----------------------------\n--  Roogug  --\n-----------------------------\nL = DBM:GetModLocalization(\"Roogug\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"鲁古格\"\n})\n\n-----------------------------\n--  Aggem Thorncurse  --\n-----------------------------\nL = DBM:GetModLocalization(\"AggemThorncurse\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"阿格姆\"\n})\n\n-----------------------------\n--  Death Speaker Jargba  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathSpeakerJargba\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"亡语者贾格巴\"\n})\n\n-----------------------------\n--  Overload Ramtusk  --\n-----------------------------\nL = DBM:GetModLocalization(\"OverlordRamtusk\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"主宰拉姆塔斯\"\n})\n\n-----------------------------\n--  Agathelos the Raging  --\n-----------------------------\nL = DBM:GetModLocalization(\"AgathelostheRaging\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"暴怒的阿迦赛罗斯\"\n})\n\n-----------------------------\n--  Blind Hunter  --\n-----------------------------\nL = DBM:GetModLocalization(\"BlindHunter\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"盲眼猎手\"\n})\n\n-----------------------------\n--  Earthcaller Halmgar  --\n-----------------------------\nL = DBM:GetModLocalization(\"EarthcallerHalmgar\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"唤地者哈穆加\"\n})\n\n-----------------------------\n--  Charlga Razorflank  --\n-----------------------------\nL = DBM:GetModLocalization(\"CharlgaRazorflank\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"卡尔加·刺肋\"\n})\n\n-------------------------\n--  Scarlet Monastery 189M (12C)  --\n-----------------------------\n--  Interrogator Vishas  --\n-----------------------------\nL = DBM:GetModLocalization(\"InterrogatorVishas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"审讯员韦沙斯\"\n})\n\n-----------------------------\n--  Bloodmage Thalnos  --\n-----------------------------\nL = DBM:GetModLocalization(\"BloodmageThalnos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"血法师萨尔诺斯\"\n})\n\n-----------------------------\n--  Houndmaster Loksey  --\n-----------------------------\nL = DBM:GetModLocalization(\"HoundmasterLoksey\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"驯犬者洛克希\"\n})\n\n-----------------------------\n--  Arcanist Doan  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArcanistDoan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"秘法师杜安\"\n})\n\n-----------------------------\n--  Herod  --\n-----------------------------\nL = DBM:GetModLocalization(\"Herod\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"赫洛德\"\n})\n\n-----------------------------\n--  Mograine & Whitemane  --\n-----------------------------\nL = DBM:GetModLocalization(\"Mograine_and_Whitemane\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"莫格莱尼 & 怀特迈恩\"\n})\n\n-----------------------------\n--  High Inquisitor Fairbanks  --\n-----------------------------\nL = DBM:GetModLocalization(\"Fairbanks\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"大检察官法尔班克斯\"\n})\n\n-------------------------\n--  Scholomance 289M (13C)  --\n-----------------------------\n--  Kirtonos the Herald  --\n-----------------------------\nL = DBM:GetModLocalization(\"KirtonostheHerald\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"传令官基尔图诺斯\"\n})\n\n-----------------------------\n--  Jandice Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"JandiceBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"詹迪斯·巴罗夫\"\n})\n\n-----------------------------\n--  Rattlegore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rattlegore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"血骨傀儡\"\n})\n\n-----------------------------\n--  Marduk Blackpool  --\n-----------------------------\nL = DBM:GetModLocalization(\"MardukBlackpool\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"马杜克·布莱克波尔\"\n})\n\n-----------------------------\n--  Vectus  --\n-----------------------------\nL = DBM:GetModLocalization(\"Vectus\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"维克图斯\"\n})\n\n-----------------------------\n--  Ras Frostwhisper  --\n-----------------------------\nL = DBM:GetModLocalization(\"RasFrostwhisper\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"莱斯·霜语\"\n})\n\n-----------------------------\n--  Instructor Malicia  --\n-----------------------------\nL = DBM:GetModLocalization(\"InstructorMalicia\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"讲师玛丽希亚\"\n})\n\n-----------------------------\n--  Doctor Theolen Krastinov  --\n-----------------------------\nL = DBM:GetModLocalization(\"DoctorTheolenKrastinov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"瑟尔林·卡斯迪诺夫教授\"\n})\n\n-----------------------------\n--  Lorekeeper Polkelt  --\n-----------------------------\nL = DBM:GetModLocalization(\"LorekeeperPolkelt\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"博学者普克尔特\"\n})\n\n-----------------------------\n--  The Ravenian  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheRavenian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"拉文尼亚\"\n})\n\n-----------------------------\n--  Lord Alexei Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LordAlexeiBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"阿雷克斯·巴罗夫\"\n})\n\n-----------------------------\n--  Lady Illucia Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadyIlluciaBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"伊露希亚·巴罗夫\"\n})\n\n-----------------------------\n--  Darkmaster Gandling  --\n-----------------------------\nL = DBM:GetModLocalization(\"DarkmasterGandling\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"黑暗院长加丁\"\n})\n\n-------------------------\n--  Shadowfang Keep 33M (14C)  --\n-----------------------------\n--  Rethilgore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rethilgore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"雷希戈尔\"\n})\n\n-----------------------------\n--  Razorclaw the Butcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"RazorclawtheButcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"屠夫拉佐克劳\"\n})\n\n-----------------------------\n--  Baron Silverlaine  --\n-----------------------------\nL = DBM:GetModLocalization(\"BaronSilverlaine\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"席瓦莱恩男爵\"\n})\n\n-----------------------------\n--  Commander Springvale  --\n-----------------------------\nL = DBM:GetModLocalization(\"CommanderSpringvale\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"指挥官斯普林瓦尔\"\n})\n\n-----------------------------\n--  Odo the Blindwatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"OdotheBlindwatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"盲眼守卫奥杜\"\n})\n\n-----------------------------\n--  Deathsworn Captain  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathswornCaptain\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"死亡之誓队长\"\n})\n\n-----------------------------\n--  Fenrus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(\"FenrustheDevourer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"吞噬者芬鲁斯\"\n})\n\n-----------------------------\n--  Wolf Master Nandos  --\n-----------------------------\nL = DBM:GetModLocalization(\"WolfMasterNandos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"狼王南杜斯\"\n})\n\n-----------------------------\n--  Archmage Arugal  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArchmageArugal\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"大法师阿鲁高\"\n})\n\n-------------------------\n--  Stormwind Stockaid 34M (10L/15C)  --\n-----------------------------\n--  Targorr the Dread  --\n-----------------------------\nL = DBM:GetModLocalization(\"Targorr\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"可怕的塔格尔\"\n})\n\n-----------------------------\n--  Kam Deepfury  --\n-----------------------------\nL = DBM:GetModLocalization(\"KamDeepfury\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"卡姆·深怒\"\n})\n\n-----------------------------\n--  Hamhock  --\n-----------------------------\nL = DBM:GetModLocalization(\"Hamhock\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"哈姆霍克\"\n})\n\n-----------------------------\n--  Bazil Thredd  --\n-----------------------------\nL = DBM:GetModLocalization(\"BazilThredd\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"巴基尔·斯瑞德\"\n})\n\n-----------------------------\n--  Dextren Ward  --\n-----------------------------\nL = DBM:GetModLocalization(\"DextrenWard\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"迪克斯特·瓦德\"\n})\n\n-----------------------------\n--  Bruegal Ironknuckle  --\n-----------------------------\nL = DBM:GetModLocalization(\"BruegalIronknuckle\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"布鲁戈·艾尔克纳寇\"\n})\n\n-------------------------\n--  Stratholme 236J/329M (10L/16C)  --\n-----------------------------\n--  Hearthsinger Forresten  --\n-----------------------------\nL = DBM:GetModLocalization(443)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"弗雷斯特恩\"\n})\n\n-----------------------------\n--  Timmy the Cruel  --\n-----------------------------\nL = DBM:GetModLocalization(445)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"悲惨的提米\"\n})\n\n-----------------------------\n--  Malor the Zealous  --\n-----------------------------\nL = DBM:GetModLocalization(749)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"狂热的玛洛尔\"\n})\n\n-----------------------------\n--  Cannon Master Willey  --\n-----------------------------\nL = DBM:GetModLocalization(446)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"炮手威利\"\n})\n\n-----------------------------\n--  Archivist Galford  --\n-----------------------------\nL = DBM:GetModLocalization(448)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"档案管理员加尔福特\"\n})\n\n-----------------------------\n--  Balnazzar  --\n-----------------------------\nL = DBM:GetModLocalization(449)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"巴纳扎尔\"\n})\n\n-----------------------------\n--  The Unforgiven  --\n-----------------------------\nL = DBM:GetModLocalization(450)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"不可宽恕者\"\n})\n\n-----------------------------\n--  Baroness Anastari  --\n-----------------------------\nL = DBM:GetModLocalization(451)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"安娜丝塔丽男爵夫人\"\n})\n\n-----------------------------\n--  Narub'enkan  --\n-----------------------------\nL = DBM:GetModLocalization(452)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"奈鲁布恩坎\"\n})\n\n-----------------------------\n--  Maleki the Pallid  --\n-----------------------------\nL = DBM:GetModLocalization(453)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"苍白的玛勒基\"\n})\n\n-----------------------------\n--  Magistrate Barthilas  --\n-----------------------------\nL = DBM:GetModLocalization(454)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"巴瑟拉斯镇长\"\n})\n\n-----------------------------\n--  Ramstein the Gorger  --\n-----------------------------\nL = DBM:GetModLocalization(455)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"吞咽者拉姆斯登\"\n})\n\nL:SetTimerLocalization({\n\tTimerGuards\t= \"哨兵出现\"\n})\n\nL:SetOptionLocalization({\n\tTimerGuards\t= \"击败首领后，为精英护卫的出现显示计时器。\"\n})\n\n-----------------------------\n--  Baron Rivendare  --\n-----------------------------\nL = DBM:GetModLocalization(456)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"瑞文戴尔男爵\"\n})\n\n-------------------------\n--  Sunken Temple 237J/109M (11L/17C)  --\n-----------------------------\n--  Avatar of Hakkar  --\n-----------------------------\nL = DBM:GetModLocalization(457)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"哈卡的化身\"\n})\n\n-----------------------------\n--  Jammal'an the Prophet  --\n-----------------------------\nL = DBM:GetModLocalization(458)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"预言者迦玛兰\"\n})\n\n----------------------------------------------\n--\tWardens of the Dream\t\t\t\t\t--\n--\t(Dreamscythe, Weaver, Morphaz, Hazzas)\t--\n----------------------------------------------\nL = DBM:GetModLocalization(\"Dreamscythe\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"德姆塞卡尔\"\n})\n\nL = DBM:GetModLocalization(\"Weaver\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"德拉维沃尔\"\n})\n\nL = DBM:GetModLocalization(\"Morphaz\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"摩弗拉斯\"\n})\n\nL = DBM:GetModLocalization(\"Hazzas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"哈扎斯\"\n})\n\n-----------------------------\n--  Shade of Eranikus  --\n-----------------------------\nL = DBM:GetModLocalization(463)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"伊兰尼库斯的阴影\"\n})\n\n-------------------------\n--  Uldaman 229J/70M (12L/18C)  --\n-----------------------------\n--  Revelosh  --\n-----------------------------\nL = DBM:GetModLocalization(467)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"鲁维罗什\"\n})\n\n-----------------------------\n--  The Lost Dwarves  --\n-----------------------------\nL = DBM:GetModLocalization(468)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"失踪的矮人\"\n})\n\n-----------------------------\n--  Ironaya  --\n-----------------------------\nL = DBM:GetModLocalization(469)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"艾隆纳亚\"\n})\n\n-----------------------------\n--  Obsidian Sentinel  --\n-----------------------------\nL = DBM:GetModLocalization(748)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"黑曜石哨兵\"\n})\n\n-----------------------------\n--  Ancient Stone Keeper  --\n-----------------------------\nL = DBM:GetModLocalization(470)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"古代的石头看守者\"\n})\n\n-----------------------------\n--  Galgann Firehammer  --\n-----------------------------\nL = DBM:GetModLocalization(471)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"加加恩·火锤\"\n})\n\n-----------------------------\n--  Grimlok  --\n-----------------------------\nL = DBM:GetModLocalization(472)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"格瑞姆洛克\"\n})\n\n-----------------------------\n--  Archaedas  --\n-----------------------------\nL = DBM:GetModLocalization(473)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"阿扎达斯\"\n})\n\n-------------------------\n--  Wailing Caverns 240J/43M (13L/19C)  --\n-----------------------------\n--  Lady Anacondra  --\n-----------------------------\nL = DBM:GetModLocalization(474)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"安娜科德拉\"\n})\n\n-----------------------------\n--  Lord Pythas  --\n-----------------------------\nL = DBM:GetModLocalization(476)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"皮萨斯\"\n})\n\n-----------------------------\n--  Lord Cobrahn  --\n-----------------------------\nL = DBM:GetModLocalization(475)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"考布莱恩\"\n})\n\n-----------------------------\n--  Kresh  --\n-----------------------------\nL = DBM:GetModLocalization(477)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"克雷什\"\n})\n\n-----------------------------\n--  Skum  --\n-----------------------------\nL = DBM:GetModLocalization(478)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"斯卡姆\"\n})\n\n-----------------------------\n--  Lord Serpentis  --\n-----------------------------\nL = DBM:GetModLocalization(479)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"瑟芬迪斯\"\n})\n\n-----------------------------\n--  Verdan the Everliving  --\n-----------------------------\nL = DBM:GetModLocalization(480)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"永生者沃尔丹\"\n})\n\n-----------------------------\n--  Mutanus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(481)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"吞噬者穆坦努斯\"\n})\n\n-----------------------------\n--  Deviate Faerie Dragon  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeviateFaerie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"变异精灵龙\"\n})\n\n-------------------------\n--  Zul'Farrak 241J/209M (14L/20C)  --\n-----------------------------\n--  Ghaz'rilla  --\n-----------------------------\nL = DBM:GetModLocalization(483)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"加兹瑞拉\"\n})\n\n-----------------------------\n--  Antu'sul  --\n-----------------------------\nL = DBM:GetModLocalization(484)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"安图苏尔\"\n})\n\n-----------------------------\n--  Theka the Martyr  --\n-----------------------------\nL = DBM:GetModLocalization(485)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"殉教者塞卡\"\n})\n\n-----------------------------\n--  Witch Doctor Zum'rah  --\n-----------------------------\nL = DBM:GetModLocalization(486)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"巫医祖穆拉恩\"\n})\n\n-----------------------------\n--  Hydromancer Velrath (not in Dungeon Journal)  --\n-----------------------------\nL = DBM:GetModLocalization(\"HydromancerVelrath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"水占师维蕾萨\"\n})\n\n-----------------------------\n--  Nekrum & Sezz'ziz  --\n-----------------------------\nL = DBM:GetModLocalization(487)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"耐克鲁姆 & 暗影祭司塞瑟斯\"\n})\n\n-----------------------------\n--  Chief Ukorz Sandscalp  --\n-----------------------------\nL = DBM:GetModLocalization(489)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"乌克兹·沙顶\"\n})\n"
  },
  {
    "path": "DBM-Party-Classic/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n--------------------------------\n-- Blackfathom Deeps (1) --\n--------------------------------\n--  Ghamoo-Ra  --\n-----------------------------\nL = DBM:GetModLocalization(\"GhamooRa\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ghamoo-Ra\"\n})\n\n-----------------------------\n--  Lady Sarevess  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadySerevess\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lady Sarevess\"\n})\n\n-----------------------------\n--  Gelihast  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gelihast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gelihast\"\n})\n\n-----------------------------\n--  Old Serra'kis  --\n-----------------------------\nL = DBM:GetModLocalization(\"OldSerrakis\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Old Serra'kis\"\n})\n\n-----------------------------\n--  Twilight Lord Kelris  --\n-----------------------------\nL = DBM:GetModLocalization(\"TwilightLordKelris\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Twilight-Lord Kelris\"\n})\n\n-----------------------------\n--  Aku'mai  --\n-----------------------------\nL = DBM:GetModLocalization(\"Akumai\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Aku'mai\"\n})\n\n-------------------------------------------------\n-- Blackrock Depths - 228J/230M (2) --\n-------------------------------------------------\n-- High Interrogator Gerstahn --\n---------------------------------\nL = DBM:GetModLocalization(369)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Verhörmeisterin Gerstahn\"\n})\n\n-----------------\n-- Lord Roccor --\n-----------------\nL = DBM:GetModLocalization(370)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Roccor\"\n})\n\n------------------------------\n-- Hound Master Grebmar --\n------------------------------\nL = DBM:GetModLocalization(371)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hundemeister Grebmar\"\n})\n\n---------------------------------------------------------\n-- Ring of Law --\n---------------------------------------------------------\nL = DBM:GetModLocalization(372)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ring des Gesetzes\"\n})\n\n---------------------------------\n-- Pyromancer Loregrain --\n---------------------------------\nL = DBM:GetModLocalization(373)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Pyromant Weiskorn\"\n})\n\n--------------------\n-- Lord Incendius --\n--------------------\nL = DBM:GetModLocalization(374)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Incendius\"\n})\n\n--------------------------\n-- Warder Stilgiss --\n--------------------------\nL = DBM:GetModLocalization(375)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Wärter Stilgiss\"\n})\n\n----------------------\n-- Fineous Darkvire --\n----------------------\nL = DBM:GetModLocalization(376)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Fineous Darkvire\"\n})\n\n--------------\n-- Bael'Gar --\n--------------\nL = DBM:GetModLocalization(377)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bael'Gar\"\n})\n\n--------------------------\n-- General Angerforge --\n--------------------------\nL = DBM:GetModLocalization(378)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"General Zornesschmied\"\n})\n\n---------------------------\n-- Golem Lord Argelmach --\n---------------------------\nL = DBM:GetModLocalization(379)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Golemlord Argelmach\"\n})\n\n----------------------\n-- Hurley Blackbreath --\n----------------------\nL = DBM:GetModLocalization(380)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hurley Pestatem\"\n})\n\n-------------\n-- Phalanx --\n-------------\nL = DBM:GetModLocalization(381)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Phalanx\"\n})\n\n-----------------------\n-- Plugger Spazzring --\n-----------------------\nL = DBM:GetModLocalization(383)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Plugger Spazzring\"\n})\n\n-------------------------\n-- Ambassador Flamelash --\n-------------------------\nL = DBM:GetModLocalization(384)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Botschafter Flammenschlag\"\n})\n\n---------------\n-- The Seven --\n---------------\nL = DBM:GetModLocalization(385)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Der Sieben\"\n})\n\n------------\n-- Magmus --\n------------\nL = DBM:GetModLocalization(386)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Magmus\"\n})\n\n---------------------------------\n-- Emperor Dagran Thaurissan --\n---------------------------------\nL = DBM:GetModLocalization(387)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Imperator Dagran Thaurissan\"\n})\n\n-------------------------\n--  Lower Blackrock Spire-229J/229M (6L/3C)  --\n--  Highlord Omokk  --\n-----------------------------\nL = DBM:GetModLocalization(388)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hochlord Omokk\"\n})\n\n-----------------------------\n--  Shadow Hunter Vosh'gajin  --\n-----------------------------\nL = DBM:GetModLocalization(389)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Schattenjägerin Vosh'gajin\"\n})\n\n-----------------------------\n--  War Master Voone  --\n-----------------------------\nL = DBM:GetModLocalization(390)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kriegsmeister Voone\"\n})\n\n-----------------------------\n--  Mother Smolderweb  --\n-----------------------------\nL = DBM:GetModLocalization(391)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mutter Glimmernetz\"\n})\n\n-----------------------------\n--  Urok Doomhowl  --\n-----------------------------\nL = DBM:GetModLocalization(392)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Urok Schreckensbote\"\n})\n\n-----------------------------\n--  Quartermaster Zigris  --\n-----------------------------\nL = DBM:GetModLocalization(393)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rüstmeister Zigris\"\n})\n\n-----------------------------\n--  Halycon  --\n-----------------------------\nL = DBM:GetModLocalization(394)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Halycon\"\n})\n\n-----------------------------\n--  Gizrul  --\n-----------------------------\nL = DBM:GetModLocalization(395)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gizrul der Geifernde\"\n})\n\n-----------------------------\n--  Overlord Wyrmthalak  --\n-----------------------------\nL = DBM:GetModLocalization(396)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Oberanführer Wyrmthalak\"\n})\n\n-------------------------\n--  Upper Blackrock Spire-229J/229M (4C)  --\n-----------------------------\n--  Pyroguard Emberseer  --\n-----------------------------\nL = DBM:GetModLocalization(\"PyroguardEmberseer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Feuerwache Glutseher\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"%s kommt allmählich wieder zu Kräften!\"\n})\n\n-----------------------------\n--  Solakar Flamewreath  --\n-----------------------------\nL = DBM:GetModLocalization(\"SolakarFlamewreath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Solakar Feuerkrone\"\n})\n\n-----------------------------\n--  Goraluk Anvilcrack  --\n-----------------------------\nL = DBM:GetModLocalization(\"GoralukAnvilcrack\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Goraluk Hammerbruch\"\n})\n\n-----------------------------\n--  Jed Runewatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"JedRunewatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jed Runenblick\"\n})\n\n-----------------------------\n--  Warchief Rend Blackhand  --\n-----------------------------\nL = DBM:GetModLocalization(\"WarchiefRendBlackhand\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kriegshäuptling Rend Blackhand\"\n})\n\n-----------------------------\n--  The Beast  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheBeast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Die Bestie\"\n})\n\n-----------------------------\n--  General Drakkisath  --\n-----------------------------\nL = DBM:GetModLocalization(\"GeneralDrakkisath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"General Drakkisath\"\n})\n\n-------------------------\n--  Deadmines (3L/5C)  --\n-----------------------------\n--  Rhahk'Zor  --\n-----------------------------\nL = DBM:GetModLocalization(\"RhahkZor\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rhahk'Zor\"\n})\n\n-----------------------------\n--  Miner Johnson  --\n-----------------------------\nL = DBM:GetModLocalization(\"MinerJohnson\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Minenarbeiter Johnson\"\n})\n\n-----------------------------\n--  Sneed's Shredder  --\n-----------------------------\nL = DBM:GetModLocalization(\"SneedsShredder\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Sneeds Schredder\"\n})\n\n-----------------------------\n--  Gilnid  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gilnid\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gilnid\"\n})\n\n-----------------------------\n--  Mr. Smite  --\n-----------------------------\nL = DBM:GetModLocalization(\"MrSmite\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mr. Smite\"\n})\n\n-----------------------------\n--  Captain Greenskin  --\n-----------------------------\nL = DBM:GetModLocalization(\"CaptainGreenskin\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Captain Greenskin\"\n})\n\n-----------------------------\n--  Edwin Van Cleef  --\n-----------------------------\nL = DBM:GetModLocalization(\"EdwinVanCleef\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Edwin VanCleef\"\n})\n\n-----------------------------\n--  Cookie  --\n-----------------------------\nL = DBM:GetModLocalization(\"Cookie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cookie\"\n})\n\n--------------------------------\n-- Dire Maul - 230J/429M (3) --\n--------------------------------\n-- Zevrim Thornhoof --\n--------------------------\nL = DBM:GetModLocalization(402)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Zevrim Dornhuf\"\n})\n\n------------------\n-- Hydrospawn --\n------------------\nL = DBM:GetModLocalization(403)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hydrobrut\"\n})\n\n-----------------\n-- Lethtendris --\n-----------------\nL = DBM:GetModLocalization(404)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lethtendris\"\n})\n\n--------------------------\n-- Alzzin the Wildshaper --\n--------------------------\nL = DBM:GetModLocalization(405)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Alzzin der Wildformer\"\n})\n\n--------------------\n-- Tendris Warpwood --\n--------------------\nL = DBM:GetModLocalization(406)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tendris Wucherborke\"\n})\n\n--------------------------\n-- Illyanna Ravenoak --\n--------------------------\nL = DBM:GetModLocalization(407)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Illyanna Rabeneiche\"\n})\n\n------------------------\n-- Magister Kalendris --\n------------------------\nL = DBM:GetModLocalization(408)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Magister Kalendris\"\n})\n\n----------------\n-- Immol'thar --\n----------------\nL = DBM:GetModLocalization(409)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Immol'thar\"\n})\n\n--------------------------\n-- Prince Tortheldrin --\n--------------------------\nL = DBM:GetModLocalization(410)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Prinz Tortheldrin\"\n})\n\n---------------------\n-- Guard Mol'dar --\n---------------------\nL = DBM:GetModLocalization(411)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Wache Mol'dar\"\n})\n\n----------------------\n-- Stomper Kreeg --\n----------------------\nL = DBM:GetModLocalization(412)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Stampfer Kreeg\"\n})\n\n--------------------\n-- Guard Fengus --\n--------------------\nL = DBM:GetModLocalization(413)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Wache Fengus\"\n})\n\n----------------------\n-- Guard Slip'kik --\n----------------------\nL = DBM:GetModLocalization(414)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Wache Slip'kik\"\n})\n\n-----------------------\n-- Captain Kromcrush --\n-----------------------\nL = DBM:GetModLocalization(415)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Captain Kromcrush\"\n})\n\n----------------------------\n-- Cho'Rush the Observer --\n----------------------------\nL = DBM:GetModLocalization(416)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cho'Rush der Beobachter\"\n})\n\nL:SetMiscLocalization({\n\tDefeat\t= \"Der König ist tot- OH NEIN! Ruft Mizzle den Gewieften! Er weiß, was jetzt zu tun ist!\"\n})\n\n----------------\n-- King Gordok --\n----------------\nL = DBM:GetModLocalization(417)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"König Gordok\"\n})\n\n-------------------------\n--  Gnomeregan-231J/90M (5L/7C)  --\n-----------------------------\n--  Grubbis  --\n-----------------------------\nL = DBM:GetModLocalization(419)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grubbis\"\n})\n\n-----------------------------\n--  Viscous Fallout  --\n-----------------------------\nL = DBM:GetModLocalization(420)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Verflüssigte Ablagerung\"\n})\n\n-----------------------------\n--  Electrocutioner 6000  --\n-----------------------------\nL = DBM:GetModLocalization(421)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Elektrokutionator 6000\"\n})\n\n-----------------------------\n--  Crowd Pummeler 9-60  --\n-----------------------------\nL = DBM:GetModLocalization(418)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Meute-Verprügler 9-60\"\n})\n\n-----------------------------\n--  Mekgineer Thermaplugg  --\n-----------------------------\nL = DBM:GetModLocalization(422)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Robogenieur Thermaplugg\"\n})\n\nL:SetMiscLocalization({\n\tYellBomb\t= \"Explosionen! MEHR Explosionen! Ich brauche mehr Explosionen!\"\n})\n\n-------------------------\n--  Maraudon-232J/349M (6L/8C)  --\n-----------------------------\n--  Noxxion  --\n-----------------------------\nL = DBM:GetModLocalization(423)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Noxxion\"\n})\n\n-----------------------------\n--  Razorlash  --\n-----------------------------\nL = DBM:GetModLocalization(424)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Schlingwurzler\"\n})\n\n-----------------------------\n--  Tinkerer Gizlock  --\n-----------------------------\nL = DBM:GetModLocalization(425)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tüftler Gizlock\"\n})\n\n-----------------------------\n--  Lord Vyletongue  --\n-----------------------------\nL = DBM:GetModLocalization(427)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Schlangenzunge\"\n})\n\n-----------------------------\n--  Celebras the Cursed  --\n-----------------------------\nL = DBM:GetModLocalization(428)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Celebras der Verfluchte\"\n})\n\n-----------------------------\n--  Landslide  --\n-----------------------------\nL = DBM:GetModLocalization(429)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Erdrutsch\"\n})\n\n-----------------------------\n--  Rotgrip  --\n-----------------------------\nL = DBM:GetModLocalization(430)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Faulschnapper\"\n})\n\n-----------------------------\n--  Princess Theradras  --\n-----------------------------\nL = DBM:GetModLocalization(431)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Prinzessin Theradras\"\n})\n\n-------------------------\n--  Ragefire Chasm (7L/9C)  --\n-----------------------------\n--  Oggleflint  --\n-----------------------------\nL = DBM:GetModLocalization(\"Oggleflint\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Flintauge\"\n})\n\n-----------------------------\n--  Taragaman the Hungerer  --\n-----------------------------\nL = DBM:GetModLocalization(\"Taragaman\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Taragaman der Hungerleider\"\n})\n\n-----------------------------\n--  Jergosh the Invoker  --\n-----------------------------\nL = DBM:GetModLocalization(\"Jergosh\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jergosh der Herbeirufer\"\n})\n\n-----------------------------\n--  Bazzalan  --\n-----------------------------\nL = DBM:GetModLocalization(\"Bazzalan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bazzalan\"\n})\n\n-------------------------\n--  Razorfen Downs -233J/129M (8L/10C)  --\n-----------------------------\n--  Tuten'kash  --\n-----------------------------\nL = DBM:GetModLocalization(\"Tutenkash\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tuten'kash\"\n})\n\n-----------------------------\n--  Mordresh Fire Eye  --\n-----------------------------\nL = DBM:GetModLocalization(\"MordreshFireEye\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mordresh Feuerauge\"\n})\n\n-----------------------------\n--  Glutton  --\n-----------------------------\nL = DBM:GetModLocalization(\"Glutton\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Nimmersatt\"\n})\n\n-----------------------------\n--  Ragglesnout  --\n-----------------------------\nL = DBM:GetModLocalization(\"Ragglesnout\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Struppmähne\"\n})\n\n-----------------------------\n--  Amnenar the Coldbringer  --\n-----------------------------\nL = DBM:GetModLocalization(\"AmnennartheColdbringer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Amnennar der Kältebringer\"\n})\n\n-----------------------------\n--  Plaguemaw the Rotting  --\n-----------------------------\nL = DBM:GetModLocalization(\"PlaguemawtheRotting\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Plaguemaw der Faulende\"\n})\n\n-------------------------\n--  Razorfen Kraul -234J/47M (9L/11C)  --\n-----------------------------\n--  Roogug  --\n-----------------------------\nL = DBM:GetModLocalization(\"Roogug\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Roogug\"\n})\n\n-----------------------------\n--  Aggem Thorncurse  --\n-----------------------------\nL = DBM:GetModLocalization(\"AggemThorncurse\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Aggem Dornfluch\"\n})\n\n-----------------------------\n--  Death Speaker Jargba  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathSpeakerJargba\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Todessprecher Jargba\"\n})\n\n-----------------------------\n--  Overload Ramtusk  --\n-----------------------------\nL = DBM:GetModLocalization(\"OverlordRamtusk\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Oberanführer Rammhauer\"\n})\n\n-----------------------------\n--  Agathelos the Raging  --\n-----------------------------\nL = DBM:GetModLocalization(\"AgathelostheRaging\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Agathelos der Tobende\"\n})\n\n-----------------------------\n--  Blind Hunter  --\n-----------------------------\nL = DBM:GetModLocalization(\"BlindHunter\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Blinder Jäger\"\n})\n\n-----------------------------\n--  Earthcaller Halmgar  --\n-----------------------------\nL = DBM:GetModLocalization(\"EarthcallerHalmgar\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Erdenrufer Halmgar\"\n})\n\n-----------------------------\n--  Charlga Razorflank  --\n-----------------------------\nL = DBM:GetModLocalization(\"CharlgaRazorflank\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Charlga Klingenflanke\"\n})\n\n-------------------------\n--  Scarlet Monastery 189M (12C)  --\n-----------------------------\n--  Interrogator Vishas  --\n-----------------------------\nL = DBM:GetModLocalization(\"InterrogatorVishas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Befrager Vishas\"\n})\n\n-----------------------------\n--  Bloodmage Thalnos  --\n-----------------------------\nL = DBM:GetModLocalization(\"BloodmageThalnos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Blutmagier Thalnos\"\n})\n\n-----------------------------\n--  Houndmaster Loksey  --\n-----------------------------\nL = DBM:GetModLocalization(\"HoundmasterLoksey\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hundemeister Loksey\"\n})\n\n-----------------------------\n--  Arcanist Doan  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArcanistDoan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Arkanist Doan\"\n})\n\n-----------------------------\n--  Herod  --\n-----------------------------\nL = DBM:GetModLocalization(\"Herod\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Herod\"\n})\n\n-----------------------------\n--  Mograine & Whitemane  --\n-----------------------------\nL = DBM:GetModLocalization(\"Mograine_and_Whitemane\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mograine und Whitemane\"\n})\n\n-----------------------------\n--  High Inquisitor Fairbanks  --\n-----------------------------\nL = DBM:GetModLocalization(\"Fairbanks\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hochinquisitor Fairbanks\"\n})\n\n-------------------------\n--  Scholomance 289M (13C)  --\n-----------------------------\n--  Kirtonos the Herald  --\n-----------------------------\nL = DBM:GetModLocalization(\"KirtonostheHerald\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kirtonos der Herold\"\n})\n\n-----------------------------\n--  Jandice Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"JandiceBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jandice Barov\"\n})\n\n-----------------------------\n--  Rattlegore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rattlegore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Blutrippe\"\n})\n\n-----------------------------\n--  Marduk Blackpool  --\n-----------------------------\nL = DBM:GetModLocalization(\"MardukBlackpool\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Marduk Blackpool\"\n})\n\n-----------------------------\n--  Vectus  --\n-----------------------------\nL = DBM:GetModLocalization(\"Vectus\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Vectus\"\n})\n\n-----------------------------\n--  Ras Frostwhisper  --\n-----------------------------\nL = DBM:GetModLocalization(\"RasFrostwhisper\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ras Frostraunen\"\n})\n\n-----------------------------\n--  Instructor Malicia  --\n-----------------------------\nL = DBM:GetModLocalization(\"InstructorMalicia\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Instrukteurin Malicia\"\n})\n\n-----------------------------\n--  Doctor Theolen Krastinov  --\n-----------------------------\nL = DBM:GetModLocalization(\"DoctorTheolenKrastinov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Doctor Theolen Krastinov\"\n})\n\n-----------------------------\n--  Lorekeeper Polkelt  --\n-----------------------------\nL = DBM:GetModLocalization(\"LorekeeperPolkelt\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hüter des Wissens Polkelt\"\n})\n\n-----------------------------\n--  The Ravenian  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheRavenian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Der Ravenier\"\n})\n\n-----------------------------\n--  Lord Alexei Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LordAlexeiBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Alexei Barov\"\n})\n\n-----------------------------\n--  Lady Illucia Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadyIlluciaBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lady Illucia Barov\"\n})\n\n-----------------------------\n--  Darkmaster Gandling  --\n-----------------------------\nL = DBM:GetModLocalization(\"DarkmasterGandling\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Dunkelmeister Gandling\"\n})\n\n-------------------------\n--  Shadowfang Keep 33M (14C)  --\n-----------------------------\n--  Rethilgore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rethilgore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rethilgore\"\n})\n\n-----------------------------\n--  Razorclaw the Butcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"RazorclawtheButcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Klingenklaue der Metzger\"\n})\n\n-----------------------------\n--  Baron Silverlaine  --\n-----------------------------\nL = DBM:GetModLocalization(\"BaronSilverlaine\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Baron Silberlein\"\n})\n\n-----------------------------\n--  Commander Springvale  --\n-----------------------------\nL = DBM:GetModLocalization(\"CommanderSpringvale\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kommandant Springvale\"\n})\n\n-----------------------------\n--  Odo the Blindwatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"OdotheBlindwatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Odo der Blindseher\"\n})\n\n-----------------------------\n--  Deathsworn Captain  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathswornCaptain\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Todeshöriger Captain\"\n})\n\n-----------------------------\n--  Fenrus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(\"FenrustheDevourer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Fenrus der Verschlinger\"\n})\n\n-----------------------------\n--  Wolf Master Nandos  --\n-----------------------------\nL = DBM:GetModLocalization(\"WolfMasterNandos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Wolfmeister Nandos\"\n})\n\n-----------------------------\n--  Archmage Arugal  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArchmageArugal\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Erzmagier Arugal\"\n})\n\n-------------------------\n--  Stormwind Stockaid 34M (10L/15C)  --\n-----------------------------\n--  Targorr the Dread  --\n-----------------------------\nL = DBM:GetModLocalization(\"Targorr\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Targorr der Schreckliche\"\n})\n\n-----------------------------\n--  Kam Deepfury  --\n-----------------------------\nL = DBM:GetModLocalization(\"KamDeepfury\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kam Deepfury\"\n})\n\n-----------------------------\n--  Hamhock  --\n-----------------------------\nL = DBM:GetModLocalization(\"Hamhock\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hamhock\"\n})\n\n-----------------------------\n--  Bazil Thredd  --\n-----------------------------\nL = DBM:GetModLocalization(\"BazilThredd\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bazil Thredd\"\n})\n\n-----------------------------\n--  Dextren Ward  --\n-----------------------------\nL = DBM:GetModLocalization(\"DextrenWard\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Dextren Ward\"\n})\n\n-----------------------------\n--  Bruegal Ironknuckle  --\n-----------------------------\nL = DBM:GetModLocalization(\"BruegalIronknuckle\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bruegal Eisenfaust\"\n})\n\n-------------------------\n--  Stratholme 236J/329M (10L/16C)  --\n-----------------------------\n--  Hearthsinger Forresten  --\n-----------------------------\nL = DBM:GetModLocalization(443)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Herdsinger Forresten\"\n})\n\n-----------------------------\n--  Timmy the Cruel  --\n-----------------------------\nL = DBM:GetModLocalization(445)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Timmy der Grausame\"\n})\n\n-----------------------------\n--  Malor the Zealous  --\n-----------------------------\nL = DBM:GetModLocalization(749)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Malor der Eifrige\"\n})\n\n-----------------------------\n--  Cannon Master Willey  --\n-----------------------------\nL = DBM:GetModLocalization(446)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kanonenmeister Willey\"\n})\n\n-----------------------------\n--  Archivist Galford  --\n-----------------------------\nL = DBM:GetModLocalization(448)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Archivar Galford\"\n})\n\n-----------------------------\n--  Balnazzar  --\n-----------------------------\nL = DBM:GetModLocalization(449)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Balnazzar\"\n})\n\n-----------------------------\n--  The Unforgiven  --\n-----------------------------\nL = DBM:GetModLocalization(450)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Der Unverziehene\"\n})\n\n-----------------------------\n--  Baroness Anastari  --\n-----------------------------\nL = DBM:GetModLocalization(451)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Baroness Anastari\"\n})\n\n-----------------------------\n--  Nerub'enkan  --\n-----------------------------\nL = DBM:GetModLocalization(452)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Nerub'enkan\"\n})\n\n-----------------------------\n--  Maleki the Pallid  --\n-----------------------------\nL = DBM:GetModLocalization(453)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maleki der Leichenblasse\"\n})\n\n-----------------------------\n--  Magistrate Barthilas  --\n-----------------------------\nL = DBM:GetModLocalization(454)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Magistrat Barthilas\"\n})\n\n-----------------------------\n--  Ramstein the Gorger  --\n-----------------------------\nL = DBM:GetModLocalization(455)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ramstein der Verschlinger\"\n})\n\nL:SetTimerLocalization({\n\tTimerGuards\t= \"Wachposten Spawn\"\n})\n\nL:SetOptionLocalization({\n\tTimerGuards\t= \"Wenn der Boss besiegt wurde, zeige timer bis zur Ankunft von Wachposten der schwarzen Wache\"\n})\n\n-----------------------------\n--  Baron Rivendare  --\n-----------------------------\nL = DBM:GetModLocalization(456)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Baron Totenschwur\"\n})\n\n-------------------------\n--  Sunken Temple 237J/109M (11L/17C)  --\n-----------------------------\n--  Avatar of Hakkar  --\n-----------------------------\nL = DBM:GetModLocalization(457)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Avatar von Hakkar\"\n})\n\n-----------------------------\n--  Jammal'an the Prophet  --\n-----------------------------\nL = DBM:GetModLocalization(458)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jammal'an der Prophet\"\n})\n\n----------------------------------------------\n--\tWardens of the Dream\t\t\t\t\t--\n--\t(Dreamscythe, Weaver, Morphaz, Hazzas)\t--\n----------------------------------------------\nL = DBM:GetModLocalization(\"Dreamscythe\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Traumsense\"\n})\n\nL = DBM:GetModLocalization(\"Weaver\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Wirker\"\n})\n\nL = DBM:GetModLocalization(\"Morphaz\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Morphaz\"\n})\n\nL = DBM:GetModLocalization(\"Hazzas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hazzas\"\n})\n\n-----------------------------\n--  Shade of Eranikus  --\n-----------------------------\nL = DBM:GetModLocalization(463)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Eranikus' Schemen\"\n})\n\n-------------------------\n--  Uldaman 229J/70M (12L/18C)  --\n-----------------------------\n--  Revelosh  --\n-----------------------------\nL = DBM:GetModLocalization(467)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Revelosh\"\n})\n\n-----------------------------\n--  The Lost Dwarves  --\n-----------------------------\nL = DBM:GetModLocalization(468)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Die verschollenen Zwerge\"\n})\n\n-----------------------------\n--  Ironaya  --\n-----------------------------\nL = DBM:GetModLocalization(469)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ironaya\"\n})\n\n-----------------------------\n--  Obsidian Sentinel  --\n-----------------------------\nL = DBM:GetModLocalization(748)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Obsidianschildwache\"\n})\n\n-----------------------------\n--  Ancient Stone Keeper  --\n-----------------------------\nL = DBM:GetModLocalization(470)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Uralter Steinbewahrer\"\n})\n\n-----------------------------\n--  Galgann Firehammer  --\n-----------------------------\nL = DBM:GetModLocalization(471)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Galgann Feuerhammer\"\n})\n\n-----------------------------\n--  Grimlok  --\n-----------------------------\nL = DBM:GetModLocalization(472)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grimlok\"\n})\n\n-----------------------------\n--  Archaedas  --\n-----------------------------\nL = DBM:GetModLocalization(473)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Archaedas\"\n})\n\n-------------------------\n--  Wailing Caverns 240J/43M (13L/19C)  --\n-----------------------------\n--  Lady Anacondra  --\n-----------------------------\nL = DBM:GetModLocalization(474)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lady Anacondra\"\n})\n\n-----------------------------\n--  Lord Pythas  --\n-----------------------------\nL = DBM:GetModLocalization(476)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Pythas\"\n})\n\n-----------------------------\n--  Lord Cobrahn  --\n-----------------------------\nL = DBM:GetModLocalization(475)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Kobrahn\"\n})\n\n-----------------------------\n--  Kresh  --\n-----------------------------\nL = DBM:GetModLocalization(477)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kresh\"\n})\n\n-----------------------------\n--  Skum  --\n-----------------------------\nL = DBM:GetModLocalization(478)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Skum\"\n})\n\n-----------------------------\n--  Lord Serpentis  --\n-----------------------------\nL = DBM:GetModLocalization(479)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Serpentis\"\n})\n\n-----------------------------\n--  Veran the Everliving  --\n-----------------------------\nL = DBM:GetModLocalization(480)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Verdan der Ewiglebende\"\n})\n\n-----------------------------\n--  Mutanus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(481)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mutanus der Verschlinger\"\n})\n\n-----------------------------\n--  Deviate Faerie Dragon  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeviateFaerie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Deviatfeendrache\"\n})\n\n-------------------------\n--  Zul'Farrak 241J/209M (14L/20C)  --\n-----------------------------\n--  Ghaz'rilla  --\n-----------------------------\nL = DBM:GetModLocalization(483)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gahz'rilla\"\n})\n\n-----------------------------\n--  Antu'sul  --\n-----------------------------\nL = DBM:GetModLocalization(484)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Antu'sul\"\n})\n\n-----------------------------\n--  Theka the Martyr  --\n-----------------------------\nL = DBM:GetModLocalization(485)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Theka der Märtyrer\"\n})\n\n-----------------------------\n--  Witch Doctor Zum'rah  --\n-----------------------------\nL = DBM:GetModLocalization(486)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hexendoktor Zum'rah\"\n})\n\n-----------------------------\n--  Hydromancer Velrath (not in Dungeon Journal)  --\n-----------------------------\nL = DBM:GetModLocalization(\"HydromancerVelrath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Wasserbeschwörerin Velratha\"\n})\n\n-----------------------------\n--  Nekrum & Sezz'ziz  --\n-----------------------------\nL = DBM:GetModLocalization(487)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Nekrum und Sezz'ziz\"\n})\n\n-----------------------------\n--  Chief Ukorz Sandscalp  --\n-----------------------------\nL = DBM:GetModLocalization(489)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Häuptling Ukorz Sandwüter\"\n})\n"
  },
  {
    "path": "DBM-Party-Classic/localization.en.lua",
    "content": "local L\n\n-------------------------\n--  Blackfathom Deeps (1)  --\n-----------------------------\n--  Ghamoo-Ra  --\n-----------------------------\nL = DBM:GetModLocalization(\"GhamooRa\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ghamoo-Ra\"\n})\n\n-----------------------------\n--  Lady Sarevess  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadySerevess\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lady Sarevess\"\n})\n\n-----------------------------\n--  Gelihast  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gelihast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gelihast\"\n})\n\n-----------------------------\n--  Old Serra'kis  --\n-----------------------------\nL = DBM:GetModLocalization(\"OldSerrakis\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Old Serra'kis\"\n})\n\n-----------------------------\n--  Twilight Lord Kelris  --\n-----------------------------\nL = DBM:GetModLocalization(\"TwilightLordKelris\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Twilight Lord Kelris\"\n})\n\n-----------------------------\n--  Aku'mai  --\n-----------------------------\nL = DBM:GetModLocalization(\"Akumai\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Aku'mai\"\n})\n\n-------------------------\n--  Blackrock Depths-228J/230M (2)  --\n-----------------------------\n--  High Interrogator Gerstahn  --\n-----------------------------\nL = DBM:GetModLocalization(369)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"High Interrogator Gerstahn\"\n})\n\n-----------------------------\n--  Lord Roccor  --\n-----------------------------\nL = DBM:GetModLocalization(370)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Roccor\"\n})\n\n-----------------------------\n--  Houndmaster Grebmar  --\n-----------------------------\nL = DBM:GetModLocalization(371)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Houndmaster Grebmar\"\n})\n\n-----------------------------\n--  Ring of Law (High Justice Grimstone)  --\n-----------------------------\nL = DBM:GetModLocalization(372)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ring of Law\"\n})\n\n-----------------------------\n--  Pyromancer Loregrain  --\n-----------------------------\nL = DBM:GetModLocalization(373)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Pyromancer Loregrain\"\n})\n\n-----------------------------\n--  Lord Incendius  --\n-----------------------------\nL = DBM:GetModLocalization(374)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Incendius\"\n})\n\n-----------------------------\n--  Warden Stilgiss  --\n-----------------------------\nL = DBM:GetModLocalization(375)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Warden Stilgiss\"\n})\n\n-----------------------------\n--  Fineous Darkvire  --\n-----------------------------\nL = DBM:GetModLocalization(376)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Fineous Darkvire\"\n})\n\n-----------------------------\n--  Bael'Gar  --\n-----------------------------\nL = DBM:GetModLocalization(377)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bael'Gar\"\n})\n\n-----------------------------\n--  General Angerforge  --\n-----------------------------\nL = DBM:GetModLocalization(378)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"General Angerforge\"\n})\n\n-----------------------------\n--  Golem Lord Argelmach  --\n-----------------------------\nL = DBM:GetModLocalization(379)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Golem Lord Argelmach\"\n})\n\n-----------------------------\n--  Hurley Blackbreath  --\n-----------------------------\nL = DBM:GetModLocalization(380)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hurley Blackbreath\"\n})\n\n-----------------------------\n--  Phalanx  --\n-----------------------------\nL = DBM:GetModLocalization(381)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Phalanx\"\n})\n\n-----------------------------\n--  Plugger Spazzring  --\n-----------------------------\nL = DBM:GetModLocalization(383)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Plugger Spazzring\"\n})\n\n-----------------------------\n--  Ambassador Flamelash  --\n-----------------------------\nL = DBM:GetModLocalization(384)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ambassador Flamelash\"\n})\n\n-----------------------------\n--  The Seven  --\n-----------------------------\nL = DBM:GetModLocalization(385)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"The Seven\"\n})\n\n-----------------------------\n--  Magmus  --\n-----------------------------\nL = DBM:GetModLocalization(386)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Magmus\"\n})\n\n-----------------------------\n--  Emperor Dagran Thaurissan  --\n-----------------------------\nL = DBM:GetModLocalization(387)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Emperor Dagran Thaurissan\"\n})\n\n-------------------------\n--  Lower Blackrock Spire-229J/229M (6L/3C)  --\n-----------------------------\n--  Highlord Omokk  --\n-----------------------------\nL = DBM:GetModLocalization(388)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Highlord Omokk\"\n})\n\n-----------------------------\n--  Shadow Hunter Vosh'gajin  --\n-----------------------------\nL = DBM:GetModLocalization(389)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Shadow Hunter Vosh'gajin\"\n})\n\n-----------------------------\n--  War Master Voone  --\n-----------------------------\nL = DBM:GetModLocalization(390)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"War Master Voone\"\n})\n\n-----------------------------\n--  Mother Smolderweb  --\n-----------------------------\nL = DBM:GetModLocalization(391)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mother Smolderweb\"\n})\n\n-----------------------------\n--  Urok Doomhowl  --\n-----------------------------\nL = DBM:GetModLocalization(392)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Urok Doomhowl\"\n})\n\n-----------------------------\n--  Quartermaster Zigris  --\n-----------------------------\nL = DBM:GetModLocalization(393)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Quartermaster Zigris\"\n})\n\n-----------------------------\n--  Halycon  --\n-----------------------------\nL = DBM:GetModLocalization(394)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Halycon\"\n})\n\n-----------------------------\n--  Gizrul  --\n-----------------------------\nL = DBM:GetModLocalization(395)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gizrul\"\n})\n\n-----------------------------\n--  Overlord Wyrmthalak  --\n-----------------------------\nL = DBM:GetModLocalization(396)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Overlord Wyrmthalak\"\n})\n\n-------------------------\n--  Upper Blackrock Spire-229J/229M (4C)  --\n-----------------------------\n--  Pyroguard Emberseer  --\n-----------------------------\nL = DBM:GetModLocalization(\"PyroguardEmberseer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Pyroguard Emberseer\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"%s begins to regain its strength!\"\n})\n\n-----------------------------\n--  Solakar Flamewreath  --\n-----------------------------\nL = DBM:GetModLocalization(\"SolakarFlamewreath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Solakar Flamewreath\"\n})\n\n-----------------------------\n--  Goraluk Anvilcrack  --\n-----------------------------\nL = DBM:GetModLocalization(\"GoralukAnvilcrack\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Goraluk Anvilcrack\"\n})\n\n-----------------------------\n--  Jed Runewatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"JedRunewatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jed Runewatcher\"\n})\n\n-----------------------------\n--  Warchief Rend Blackhand  --\n-----------------------------\nL = DBM:GetModLocalization(\"WarchiefRendBlackhand\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Warchief Rend Blackhand\"\n})\n\n-----------------------------\n--  The Beast  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheBeast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"The Beast\"\n})\n\n-----------------------------\n--  General Drakkisath  --\n-----------------------------\nL = DBM:GetModLocalization(\"GeneralDrakkisath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"General Drakkisath\"\n})\n\n-------------------------\n--  Deadmines (3L/5C)  --\n-----------------------------\n--  Rhahk'Zor  --\n-----------------------------\nL = DBM:GetModLocalization(\"RhahkZor\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rhahk'Zor\"\n})\n\n-----------------------------\n--  Miner Johnson  --\n-----------------------------\nL = DBM:GetModLocalization(\"MinerJohnson\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Miner Johnson\"\n})\n\n-----------------------------\n--  Sneed's Shredder  --\n-----------------------------\nL = DBM:GetModLocalization(\"SneedsShredder\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Sneed's Shredder\"\n})\n\n-----------------------------\n--  Gilnid  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gilnid\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gilnid\"\n})\n\n-----------------------------\n--  Mr. Smite  --\n-----------------------------\nL = DBM:GetModLocalization(\"MrSmite\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mr. Smite\"\n})\n\n-----------------------------\n--  Captain Greenskin  --\n-----------------------------\nL = DBM:GetModLocalization(\"CaptainGreenskin\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Captain Greenskin\"\n})\n\n-----------------------------\n--  Edwin Van Cleef  --\n-----------------------------\nL = DBM:GetModLocalization(\"EdwinVanCleef\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Edwin Van Cleef\"\n})\n\n-----------------------------\n--  Cookie  --\n-----------------------------\nL = DBM:GetModLocalization(\"Cookie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cookie\"\n})\n\n-------------------------\n--  Dire Maul-230J/429M (4L/6C)  --\n-----------------------------\n--  Zevrim Thornhoof  --\n-----------------------------\nL = DBM:GetModLocalization(402)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Zevrim Thornhoof\"\n})\n\n-----------------------------\n--  Hydrospawn  --\n-----------------------------\nL = DBM:GetModLocalization(403)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hydrospawn\"\n})\n\n-----------------------------\n--  Lethtendris  --\n-----------------------------\nL = DBM:GetModLocalization(404)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lethtendris\"\n})\n\n-----------------------------\n--  Alzzin the Wildshaper  --\n-----------------------------\nL = DBM:GetModLocalization(405)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Alzzin the Wildshaper\"\n})\n\n-----------------------------\n--  Tendris Warpwood  --\n-----------------------------\nL = DBM:GetModLocalization(406)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tendris Warpwood\"\n})\n\n-----------------------------\n--  Illyanna Ravenoak  --\n-----------------------------\nL = DBM:GetModLocalization(407)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Illyanna Ravenoak\"\n})\n\n-----------------------------\n--  Magister Kalendris  --\n-----------------------------\nL = DBM:GetModLocalization(408)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Magister Kalendris\"\n})\n\n-----------------------------\n--  Immol'thar  --\n-----------------------------\nL = DBM:GetModLocalization(409)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Immol'thar\"\n})\n\n-----------------------------\n--  Prince Tortheldrin  --\n-----------------------------\nL = DBM:GetModLocalization(410)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Prince Tortheldrin\"\n})\n\n-----------------------------\n--  Guard Mol'dar  --\n-----------------------------\nL = DBM:GetModLocalization(411)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Guard Mol'dar\"\n})\n\n-----------------------------\n--  Stomper Kreeg  --\n-----------------------------\nL = DBM:GetModLocalization(412)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Stomper Kreeg\"\n})\n\n-----------------------------\n--  Guard Fengus  --\n-----------------------------\nL = DBM:GetModLocalization(413)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Guard Fengus\"\n})\n\n-----------------------------\n--  Guard Slip'kik  --\n-----------------------------\nL = DBM:GetModLocalization(414)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Guard Slip'kik\"\n})\n\n-----------------------------\n--  Captain Kromcrush  --\n-----------------------------\nL = DBM:GetModLocalization(415)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Captain Kromcrush\"\n})\n\n-----------------------------\n--  Cho'Rush the Observer  --\n-----------------------------\nL = DBM:GetModLocalization(416)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cho'Rush the Observer\"\n})\n\nL:SetMiscLocalization({\n\tDefeat\t= \"The king is dead - OH NOES!  Summon Mizzle da Crafty!  He knows what to do next!\"\n})\n\n-----------------------------\n--  King Gordok  --\n-----------------------------\nL = DBM:GetModLocalization(417)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"King Gordok\"\n})\n\n-------------------------\n--  Gnomeregan-231J/90M (5L/7C)  --\n-----------------------------\n--  Grubbis  --\n-----------------------------\nL = DBM:GetModLocalization(419)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grubbis\"\n})\n\n-----------------------------\n--  Viscous Fallout  --\n-----------------------------\nL = DBM:GetModLocalization(420)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Viscous Fallout\"\n})\n\n-----------------------------\n--  Electrocutioner 6000  --\n-----------------------------\nL = DBM:GetModLocalization(421)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Electrocutioner 6000\"\n})\n\n-----------------------------\n--  Crowd Pummeler 9-60  --\n-----------------------------\nL = DBM:GetModLocalization(418)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Crowd Pummeler 9-60\"\n})\n\n-----------------------------\n--  Mekgineer Thermaplugg  --\n-----------------------------\nL = DBM:GetModLocalization(422)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mekgineer Thermaplugg\"\n})\n\nL:SetMiscLocalization({\n\tYellBomb\t= \"Explosions! MORE explosions! I got to have more explosions!\"\n})\n\n-------------------------\n--  Maraudon-232J/349M (6L/8C)  --\n-----------------------------\n--  Noxxion  --\n-----------------------------\nL = DBM:GetModLocalization(423)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Noxxion\"\n})\n\n-----------------------------\n--  Razorlash  --\n-----------------------------\nL = DBM:GetModLocalization(424)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Razorlash\"\n})\n\n-----------------------------\n--  Tinkerer Gizlock  --\n-----------------------------\nL = DBM:GetModLocalization(425)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tinkerer Gizlock\"\n})\n\n-----------------------------\n--  Lord Vyletongue  --\n-----------------------------\nL = DBM:GetModLocalization(427)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Vyletongue\"\n})\n\n-----------------------------\n--  Celebras the Cursed  --\n-----------------------------\nL = DBM:GetModLocalization(428)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Celebras the Cursed\"\n})\n\n-----------------------------\n--  Landslide  --\n-----------------------------\nL = DBM:GetModLocalization(429)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Landslide\"\n})\n\n-----------------------------\n--  Rotgrip  --\n-----------------------------\nL = DBM:GetModLocalization(430)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rotgrip\"\n})\n\n-----------------------------\n--  Princess Theradras  --\n-----------------------------\nL = DBM:GetModLocalization(431)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Princess Theradras\"\n})\n\n-------------------------\n--  Ragefire Chasm (7L/9C)  --\n-----------------------------\n--  Oggleflint  --\n-----------------------------\nL = DBM:GetModLocalization(\"Oggleflint\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Oggleflint\"\n})\n\n-----------------------------\n--  Taragaman the Hungerer  --\n-----------------------------\nL = DBM:GetModLocalization(\"Taragaman\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Taragaman the Hungerer\"\n})\n\n-----------------------------\n--  Jergosh the Invoker  --\n-----------------------------\nL = DBM:GetModLocalization(\"Jergosh\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jergosh the Invoker\"\n})\n\n-----------------------------\n--  Bazzalan  --\n-----------------------------\nL = DBM:GetModLocalization(\"Bazzalan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bazzalan\"\n})\n\n-------------------------\n--  Razorfen Downs -233J/129M (8L/10C)  --\n-----------------------------\n--  Tuten'kash  --\n-----------------------------\nL = DBM:GetModLocalization(\"Tutenkash\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tuten'kash\"\n})\n\n-----------------------------\n--  Mordresh Fire Eye  --\n-----------------------------\nL = DBM:GetModLocalization(\"MordreshFireEye\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mordress Fire Eye\"\n})\n\n-----------------------------\n--  Glutton  --\n-----------------------------\nL = DBM:GetModLocalization(\"Glutton\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Glutton\"\n})\n\n-----------------------------\n--  Ragglesnout  --\n-----------------------------\nL = DBM:GetModLocalization(\"Ragglesnout\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ragglesnout\"\n})\n\n-----------------------------\n--  Amnenar the Coldbringer  --\n-----------------------------\nL = DBM:GetModLocalization(\"AmnennartheColdbringer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Amnenar the Coldbringer\"\n})\n\n-----------------------------\n--  Plaguemaw the Rotting  --\n-----------------------------\nL = DBM:GetModLocalization(\"PlaguemawtheRotting\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Plaguemaw the Rotting\"\n})\n\n-------------------------\n--  Razorfen Kraul -234J/47M (9L/11C)  --\n-----------------------------\n--  Roogug  --\n-----------------------------\nL = DBM:GetModLocalization(\"Roogug\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Roogug\"\n})\n\n-----------------------------\n--  Aggem Thorncurse  --\n-----------------------------\nL = DBM:GetModLocalization(\"AggemThorncurse\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Aggem Thorncurse\"\n})\n\n-----------------------------\n--  Death Speaker Jargba  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathSpeakerJargba\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Death Speaker Jargba\"\n})\n\n-----------------------------\n--  Overload Ramtusk  --\n-----------------------------\nL = DBM:GetModLocalization(\"OverlordRamtusk\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Overload Ramtusk\"\n})\n\n-----------------------------\n--  Agathelos the Raging  --\n-----------------------------\nL = DBM:GetModLocalization(\"AgathelostheRaging\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Agathelos the Raging\"\n})\n\n-----------------------------\n--  Blind Hunter  --\n-----------------------------\nL = DBM:GetModLocalization(\"BlindHunter\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Blind Hunter\"\n})\n\n-----------------------------\n--  Earthcaller Halmgar  --\n-----------------------------\nL = DBM:GetModLocalization(\"EarthcallerHalmgar\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Earthcaller Halmgar\"\n})\n\n-----------------------------\n--  Charlga Razorflank  --\n-----------------------------\nL = DBM:GetModLocalization(\"CharlgaRazorflank\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Charlga Razorflank\"\n})\n\n-------------------------\n--  Scarlet Monastery 189M (12C)  --\n-----------------------------\n--  Interrogator Vishas  --\n-----------------------------\nL = DBM:GetModLocalization(\"InterrogatorVishas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Interrogator Vishas\"\n})\n\n-----------------------------\n--  Bloodmage Thalnos  --\n-----------------------------\nL = DBM:GetModLocalization(\"BloodmageThalnos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bloodmage Thalnos\"\n})\n\n-----------------------------\n--  Houndmaster Loksey  --\n-----------------------------\nL = DBM:GetModLocalization(\"HoundmasterLoksey\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Houndmaster Loksey\"\n})\n\n-----------------------------\n--  Arcanist Doan  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArcanistDoan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Arcanist Doan\"\n})\n\n-----------------------------\n--  Herod  --\n-----------------------------\nL = DBM:GetModLocalization(\"Herod\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Herod\"\n})\n\n-----------------------------\n--  Mograine & Whitemane  --\n-----------------------------\nL = DBM:GetModLocalization(\"Mograine_and_Whitemane\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mograine & Whitemane\"\n})\n\n-----------------------------\n--  High Inquisitor Fairbanks  --\n-----------------------------\nL = DBM:GetModLocalization(\"Fairbanks\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"High Inquisitor Fairbanks\"\n})\n\n-------------------------\n--  Scholomance 289M (13C)  --\n-----------------------------\n--  Kirtonos the Herald  --\n-----------------------------\nL = DBM:GetModLocalization(\"KirtonostheHerald\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kirtonos the Herald\"\n})\n\n-----------------------------\n--  Jandice Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"JandiceBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jandice Barov\"\n})\n\n-----------------------------\n--  Rattlegore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rattlegore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rattlegore\"\n})\n\n-----------------------------\n--  Marduk Blackpool  --\n-----------------------------\nL = DBM:GetModLocalization(\"MardukBlackpool\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Marduk Blackpool\"\n})\n\n-----------------------------\n--  Vectus  --\n-----------------------------\nL = DBM:GetModLocalization(\"Vectus\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Vectus\"\n})\n\n-----------------------------\n--  Ras Frostwhisper  --\n-----------------------------\nL = DBM:GetModLocalization(\"RasFrostwhisper\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ras Frostwhisper\"\n})\n\n-----------------------------\n--  Instructor Malicia  --\n-----------------------------\nL = DBM:GetModLocalization(\"InstructorMalicia\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Instructor Malicia\"\n})\n\n-----------------------------\n--  Doctor Theolen Krastinov  --\n-----------------------------\nL = DBM:GetModLocalization(\"DoctorTheolenKrastinov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Doctor Theolen Krastinov\"\n})\n\n-----------------------------\n--  Lorekeeper Polkelt  --\n-----------------------------\nL = DBM:GetModLocalization(\"LorekeeperPolkelt\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lorekeeper Polkelt\"\n})\n\n-----------------------------\n--  The Ravenian  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheRavenian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"The Ravenian\"\n})\n\n-----------------------------\n--  Lord Alexei Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LordAlexeiBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Alexei Barov\"\n})\n\n-----------------------------\n--  Lady Illucia Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadyIlluciaBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lady Illucia Barov\"\n})\n\n-----------------------------\n--  Darkmaster Gandling  --\n-----------------------------\nL = DBM:GetModLocalization(\"DarkmasterGandling\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Darkmaster Gandling\"\n})\n\n-------------------------\n--  Shadowfang Keep 33M (14C)  --\n-----------------------------\n--  Rethilgore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rethilgore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rethilgore\"\n})\n\n-----------------------------\n--  Razorclaw the Butcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"RazorclawtheButcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Razorclaw the Butcher\"\n})\n\n-----------------------------\n--  Baron Silverlaine  --\n-----------------------------\nL = DBM:GetModLocalization(\"BaronSilverlaine\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Baron Silverlaine\"\n})\n\n-----------------------------\n--  Commander Springvale  --\n-----------------------------\nL = DBM:GetModLocalization(\"CommanderSpringvale\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Commander Springvale\"\n})\n\n-----------------------------\n--  Odo the Blindwatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"OdotheBlindwatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Odo the Blindwatcher\"\n})\n\n-----------------------------\n--  Deathsworn Captain  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathswornCaptain\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Deathsworn Captain\"\n})\n\n-----------------------------\n--  Fenrus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(\"FenrustheDevourer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Fenrus the Devourer\"\n})\n\n-----------------------------\n--  Wolf Master Nandos  --\n-----------------------------\nL = DBM:GetModLocalization(\"WolfMasterNandos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Wolf Master Nandos\"\n})\n\n-----------------------------\n--  Archmage Arugal  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArchmageArugal\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Archmage Arugal\"\n})\n\n-------------------------\n--  Stormwind Stockaid 34M (10L/15C)  --\n-----------------------------\n--  Targorr the Dread  --\n-----------------------------\nL = DBM:GetModLocalization(\"Targorr\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Targorr the Dread\"\n})\n\n-----------------------------\n--  Kam Deepfury  --\n-----------------------------\nL = DBM:GetModLocalization(\"KamDeepfury\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kam Deepfury\"\n})\n\n-----------------------------\n--  Hamhock  --\n-----------------------------\nL = DBM:GetModLocalization(\"Hamhock\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hamhock\"\n})\n\n-----------------------------\n--  Bazil Thredd  --\n-----------------------------\nL = DBM:GetModLocalization(\"BazilThredd\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bazil Thredd\"\n})\n\n-----------------------------\n--  Dextren Ward  --\n-----------------------------\nL = DBM:GetModLocalization(\"DextrenWard\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Dextren Ward\"\n})\n\n-----------------------------\n--  Bruegal Ironknuckle  --\n-----------------------------\nL = DBM:GetModLocalization(\"BruegalIronknuckle\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bruegal Ironknuckle\"\n})\n\n-------------------------\n--  Stratholme 236J/329M (10L/16C)  --\n-----------------------------\n--  Hearthsinger Forresten  --\n-----------------------------\nL = DBM:GetModLocalization(443)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hearthsinger Forresten\"\n})\n\n-----------------------------\n--  Timmy the Cruel  --\n-----------------------------\nL = DBM:GetModLocalization(445)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Timmy the Cruel\"\n})\n\n-----------------------------\n--  Malor the Zealous  --\n-----------------------------\nL = DBM:GetModLocalization(749)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Malor the Zealous\"\n})\n\n-----------------------------\n--  Cannon Master Willey  --\n-----------------------------\nL = DBM:GetModLocalization(446)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cannon Master Willey\"\n})\n\n-----------------------------\n--  Archivist Galford  --\n-----------------------------\nL = DBM:GetModLocalization(448)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Archivist Galford\"\n})\n\n-----------------------------\n--  Balnazzar  --\n-----------------------------\nL = DBM:GetModLocalization(449)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Balnazzar\"\n})\n\n-----------------------------\n--  The Unforgiven  --\n-----------------------------\nL = DBM:GetModLocalization(450)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"The Unforgiven\"\n})\n\n-----------------------------\n--  Baroness Anastari  --\n-----------------------------\nL = DBM:GetModLocalization(451)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Baroness Anastari\"\n})\n\n-----------------------------\n--  Narub'enkan  --\n-----------------------------\nL = DBM:GetModLocalization(452)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Narub'enkan\"\n})\n\n-----------------------------\n--  Maleki the Pallid  --\n-----------------------------\nL = DBM:GetModLocalization(453)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maleki the Pallid\"\n})\n\n-----------------------------\n--  Magistrate Barthilas  --\n-----------------------------\nL = DBM:GetModLocalization(454)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Magistrate Barthilas\"\n})\n\n-----------------------------\n--  Ramstein the Gorger  --\n-----------------------------\nL = DBM:GetModLocalization(455)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ramstein the Gorger\"\n})\n\nL:SetTimerLocalization({\n\tTimerGuards\t= \"Sentries Spawn\"\n})\n\nL:SetOptionLocalization({\n\tTimerGuards\t= \"Upon defeat of boss, show timer for the arrival of Black Guard Sentries\"\n})\n\n-----------------------------\n--  Baron Rivendare  --\n-----------------------------\nL = DBM:GetModLocalization(456)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Baron Rivendare\"\n})\n\n-------------------------\n--  Sunken Temple 237J/109M (11L/17C)  --\n-----------------------------\n--  Avatar of Hakkar  --\n-----------------------------\nL = DBM:GetModLocalization(457)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Avatar of Hakkar\"\n})\n\n-----------------------------\n--  Jammal'an the Prophet  --\n-----------------------------\nL = DBM:GetModLocalization(458)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jammal'an the Prophet\"\n})\n\n----------------------------------------------\n--\tWardens of the Dream\t\t\t\t\t--\n--\t(Dreamscythe, Weaver, Morphaz, Hazzas)\t--\n----------------------------------------------\nL = DBM:GetModLocalization(\"Dreamscythe\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Dreamscythe\"\n})\n\nL = DBM:GetModLocalization(\"Weaver\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Weaver\"\n})\n\nL = DBM:GetModLocalization(\"Morphaz\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Morphaz\"\n})\n\nL = DBM:GetModLocalization(\"Hazzas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hazzas\"\n})\n\n-----------------------------\n--  Shade of Eranikus  --\n-----------------------------\nL = DBM:GetModLocalization(463)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Shade of Eranikus\"\n})\n\n-------------------------\n--  Uldaman 229J/70M (12L/18C)  --\n-----------------------------\n--  Revelosh  --\n-----------------------------\nL = DBM:GetModLocalization(467)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Revelosh\"\n})\n\n-----------------------------\n--  The Lost Dwarves  --\n-----------------------------\nL = DBM:GetModLocalization(468)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"The Lost Dwarves\"\n})\n\n-----------------------------\n--  Ironaya  --\n-----------------------------\nL = DBM:GetModLocalization(469)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ironaya\"\n})\n\n-----------------------------\n--  Obsidian Sentinel  --\n-----------------------------\nL = DBM:GetModLocalization(748)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Obsidian Sentinel\"\n})\n\n-----------------------------\n--  Ancient Stone Keeper  --\n-----------------------------\nL = DBM:GetModLocalization(470)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ancient Stone Keeper\"\n})\n\n-----------------------------\n--  Galgann Firehammer  --\n-----------------------------\nL = DBM:GetModLocalization(471)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Galgann Firehammer\"\n})\n\n-----------------------------\n--  Grimlok  --\n-----------------------------\nL = DBM:GetModLocalization(472)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grimlok\"\n})\n\n-----------------------------\n--  Archaedas  --\n-----------------------------\nL = DBM:GetModLocalization(473)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Archaedas\"\n})\n\n-------------------------\n--  Wailing Caverns 240J/43M (13L/19C)  --\n-----------------------------\n--  Lady Anacondra  --\n-----------------------------\nL = DBM:GetModLocalization(474)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lady Anacondra\"\n})\n\n-----------------------------\n--  Lord Pythas  --\n-----------------------------\nL = DBM:GetModLocalization(476)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Pythas\"\n})\n\n-----------------------------\n--  Lord Cobrahn  --\n-----------------------------\nL = DBM:GetModLocalization(475)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Cobrahn\"\n})\n\n-----------------------------\n--  Kresh  --\n-----------------------------\nL = DBM:GetModLocalization(477)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kresh\"\n})\n\n-----------------------------\n--  Skum  --\n-----------------------------\nL = DBM:GetModLocalization(478)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Skum\"\n})\n\n-----------------------------\n--  Lord Serpentis  --\n-----------------------------\nL = DBM:GetModLocalization(479)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Serpentis\"\n})\n\n-----------------------------\n--  Verdan the Everliving  --\n-----------------------------\nL = DBM:GetModLocalization(480)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Verdan the Everliving\"\n})\n\n-----------------------------\n--  Mutanus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(481)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mutanus the Devourer\"\n})\n\n-----------------------------\n--  Deviate Faerie Dragon  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeviateFaerie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Deviate Faerie Dragon\"\n})\n\n-------------------------\n--  Zul'Farrak 241J/209M (14L/20C)  --\n-----------------------------\n--  Ghaz'rilla  --\n-----------------------------\nL = DBM:GetModLocalization(483)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gahz'rilla\"\n})\n\n-----------------------------\n--  Antu'sul  --\n-----------------------------\nL = DBM:GetModLocalization(484)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Antu'sul\"\n})\n\n-----------------------------\n--  Theka the Martyr  --\n-----------------------------\nL = DBM:GetModLocalization(485)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Theka the Martyr\"\n})\n\n-----------------------------\n--  Witch Doctor Zum'rah  --\n-----------------------------\nL = DBM:GetModLocalization(486)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Witch Doctor Zum'rah\"\n})\n\n-----------------------------\n--  Hydromancer Velrath (not in Dungeon Journal)  --\n-----------------------------\nL = DBM:GetModLocalization(\"HydromancerVelrath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hydromancer Velrath\"\n})\n\n-----------------------------\n--  Nekrum & Sezz'ziz  --\n-----------------------------\nL = DBM:GetModLocalization(487)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Nekrum & Sezz'ziz\"\n})\n\n-----------------------------\n--  Chief Ukorz Sandscalp  --\n-----------------------------\nL = DBM:GetModLocalization(489)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Chief Ukorz Sandscalp\"\n})\n"
  },
  {
    "path": "DBM-Party-Classic/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" then return end\nlocal L\n\n--------------------------------\n-- Blackfathom Deeps (1) --\n--------------------------------\n--  Ghamoo-Ra  --\n-----------------------------\nL = DBM:GetModLocalization(\"GhamooRa\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ghamoo-Ra\"\n})\n\n-----------------------------\n--  Lady Sarevess  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadySerevess\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lady Sarevess\"\n})\n\n-----------------------------\n--  Gelihast  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gelihast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gelihast\"\n})\n\n-----------------------------\n--  Old Serra'kis  --\n-----------------------------\nL = DBM:GetModLocalization(\"OldSerrakis\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Viejo Serra'kis\"\n})\n\n-----------------------------\n--  Twilight Lord Kelris  --\n-----------------------------\nL = DBM:GetModLocalization(\"TwilightLordKelris\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Señor Crepuscular Kelris\"\n})\n\n-----------------------------\n--  Aku'mai  --\n-----------------------------\nL = DBM:GetModLocalization(\"Akumai\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Aku'mai\"\n})\n\n-------------------------------------------------\n-- Blackrock Downs - 228J/230M (2) --\n-------------------------------------------------\n-- High Interrogator Gerstahn --\n---------------------------------\nL = DBM:GetModLocalization(369)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Alto Interrogador Gerstahn\"\n})\n\n-----------------\n-- Lord Roccor --\n-----------------\nL = DBM:GetModLocalization(370)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Roccor\"\n})\n\n------------------------------\n-- Hound Master Grebmar --\n------------------------------\nL = DBM:GetModLocalization(371)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Domador de jaurías Grebmar\"\n})\n\n---------------------------------------------------------\n-- Ring of Law --\n---------------------------------------------------------\nL = DBM:GetModLocalization(372)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Círculo de la Ley\"\n})\n\n---------------------------------\n-- Pyromancer Loregrain --\n---------------------------------\nL = DBM:GetModLocalization(373)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Piromántico Cultugrano\"\n})\n\n--------------------\n-- Lord Incendius --\n--------------------\nL = DBM:GetModLocalization(374)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Incendius\"\n})\n\n--------------------------\n-- Warder Stilgiss --\n--------------------------\nL = DBM:GetModLocalization(375)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Guarda Stilgiss\"\n})\n\n----------------------\n-- Fineous Darkvire --\n----------------------\nL = DBM:GetModLocalization(376)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Finoso Virunegro\"\n})\n\n--------------\n-- Bael'Gar --\n--------------\nL = DBM:GetModLocalization(377)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bael'Gar\"\n})\n\n--------------------------\n-- General Angerforge --\n--------------------------\nL = DBM:GetModLocalization(378)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"General Forjira\"\n})\n\n---------------------------\n-- Golem Lord Argelmach --\n---------------------------\nL = DBM:GetModLocalization(379)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Señor Gólem Argelmach\"\n})\n\n----------------------\n-- Hurley Blackbreath --\n----------------------\nL = DBM:GetModLocalization(380)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hurley Negrálito\"\n})\n\n-------------\n-- Phalanx --\n-------------\nL = DBM:GetModLocalization(381)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Falange\"\n})\n\n-----------------------\n-- Plugger Spazzring --\n-----------------------\nL = DBM:GetModLocalization(383)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Plugger Aropatoso\"\n})\n\n-------------------------\n-- Ambassador Flamelash --\n-------------------------\nL = DBM:GetModLocalization(384)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Embajador Latifuego\"\n})\n\n---------------\n-- The Seven --\n---------------\nL = DBM:GetModLocalization(385)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Los Siete\"\n})\n\n------------\n-- Magmus --\n------------\nL = DBM:GetModLocalization(386)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Magmus\"\n})\n\n---------------------------------\n-- Emperor Dagran Thaurissan --\n---------------------------------\nL = DBM:GetModLocalization(387)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Emperador Dagran Thaurissan\"\n})\n\n-------------------------\n--  Lower Blackrock Spire-229J/229M (6L/3C)  --\n--  Highlord Omokk  --\n-----------------------------\nL = DBM:GetModLocalization(388)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Alto Señor Omokk\"\n})\n\n-----------------------------\n--  Shadow Hunter Vosh'gajin  --\n-----------------------------\nL = DBM:GetModLocalization(389)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cazador de las Sombras Vosh'gajin\"\n})\n\n-----------------------------\n--  War Master Voone  --\n-----------------------------\nL = DBM:GetModLocalization(390)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maestro de guerra Voone\"\n})\n\n-----------------------------\n--  Mother Smolderweb  --\n-----------------------------\nL = DBM:GetModLocalization(391)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Madre Telabrasada\"\n})\n\n-----------------------------\n--  Urok Doomhowl  --\n-----------------------------\nL = DBM:GetModLocalization(392)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Urok Aullapocalipsis\"\n})\n\n-----------------------------\n--  Quartermaster Zigris  --\n-----------------------------\nL = DBM:GetModLocalization(393)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Intendente Zigris\"\n})\n\n-----------------------------\n--  Halycon  --\n-----------------------------\nL = DBM:GetModLocalization(394)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Halycon\"\n})\n\n-----------------------------\n--  Gizrul  --\n-----------------------------\nL = DBM:GetModLocalization(395)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gizrul el esclavista\"\n})\n\n-----------------------------\n--  Overlord Wyrmthalak  --\n-----------------------------\nL = DBM:GetModLocalization(396)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Señor Supremo Vermiothalak\"\n})\n\n-------------------------\n--  Upper Blackrock Spire-229J/229M (4C)  --\n-----------------------------\n--  Pyroguard Emberseer  --\n-----------------------------\nL = DBM:GetModLocalization(\"PyroguardEmberseer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Piroguardián brasadivino\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"¡%s comienza a recuperar la fuerza!\"\n})\n\n-----------------------------\n--  Solakar Flamewreath  --\n-----------------------------\nL = DBM:GetModLocalization(\"SolakarFlamewreath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Solakar Corona de Fuego\"\n})\n\n-----------------------------\n--  Goraluk Anvilcrack  --\n-----------------------------\nL = DBM:GetModLocalization(\"GoralukAnvilcrack\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Goraluk Yunquegrieta\"\n})\n\n-----------------------------\n--  Jed Runewatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"JedRunewatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jed Observarrunas\"\n})\n\n-----------------------------\n--  Warchief Rend Blackhand  --\n-----------------------------\nL = DBM:GetModLocalization(\"WarchiefRendBlackhand\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jefe de Guerra Desgarro Puño Negro\"\n})\n\n-----------------------------\n--  The Beast  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheBeast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"La Bestia\"\n})\n\n-----------------------------\n--  General Drakkisath  --\n-----------------------------\nL = DBM:GetModLocalization(\"GeneralDrakkisath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"General Drakkisath\"\n})\n\n-------------------------\n--  Deadmines (3L/5C)  --\n-----------------------------\n--  Rhahk'Zor  --\n-----------------------------\nL = DBM:GetModLocalization(\"RhahkZor\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rhahk'Zor\"\n})\n\n-----------------------------\n--  Miner Johnson  --\n-----------------------------\nL = DBM:GetModLocalization(\"MinerJohnson\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Minero Johnson\"\n})\n\n-----------------------------\n--  Sneed's Shredder  --\n-----------------------------\nL = DBM:GetModLocalization(\"SneedsShredder\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Trituradora de Sneed\"\n})\n\n-----------------------------\n--  Gilnid  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gilnid\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gilnid\"\n})\n\n-----------------------------\n--  Mr. Smite  --\n-----------------------------\nL = DBM:GetModLocalization(\"MrSmite\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Sr. Golpin\"\n})\n\n-----------------------------\n--  Captain Greenskin  --\n-----------------------------\nL = DBM:GetModLocalization(\"CaptainGreenskin\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Capitán Verdepel\"\n})\n\n-----------------------------\n--  Edwin Van Cleef  --\n-----------------------------\nL = DBM:GetModLocalization(\"EdwinVanCleef\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Edwin VanCleef\"\n})\n\n-----------------------------\n--  Cookie  --\n-----------------------------\nL = DBM:GetModLocalization(\"Cookie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"El Chef\"\n})\n\n--------------------------------\n-- Dire Maul - 230J/429M (3) --\n--------------------------------\n-- Zevrim Pezuñahendida --\n--------------------------\nL = DBM:GetModLocalization(402)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Zevrim Pezuñahendida\"\n})\n\n------------------\n-- Hydrospawn --\n------------------\nL = DBM:GetModLocalization(403)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hidromilecio\"\n})\n\n-----------------\n-- Lethtendris --\n-----------------\nL = DBM:GetModLocalization(404)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lethtendris\"\n})\n\n--------------------------\n-- Alzzin the Wildshaper --\n--------------------------\nL = DBM:GetModLocalization(405)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Alzzin el Formaferal\"\n})\n\n--------------------\n-- Tendris Warpwood --\n--------------------\nL = DBM:GetModLocalization(406)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tendris Madeguerra\"\n})\n\n--------------------------\n-- Illyanna Ravenoak --\n--------------------------\nL = DBM:GetModLocalization(407)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Illyanna Roblecuervo\"\n})\n\n------------------------\n-- Magister Kalendris --\n------------------------\nL = DBM:GetModLocalization(408)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Magistral Kalendris\"\n})\n\n----------------\n-- Immol'thar --\n----------------\nL = DBM:GetModLocalization(409)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Immol'thar\"\n})\n\n--------------------------\n-- Príncipe Tortheldrin --\n--------------------------\nL = DBM:GetModLocalization(410)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Príncipe Tortheldrin\"\n})\n\n---------------------\n-- Guardia Mol'dar --\n---------------------\nL = DBM:GetModLocalization(411)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Guardia Mol'dar\"\n})\n\n----------------------\n-- Vapuleador Kreeg --\n----------------------\nL = DBM:GetModLocalization(412)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Vapuleador Kreeg\"\n})\n\n--------------------\n-- Guardia Fengus --\n--------------------\nL = DBM:GetModLocalization(413)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Guardia Fengus\"\n})\n\n----------------------\n-- Guardia Slip'kik --\n----------------------\nL = DBM:GetModLocalization(414)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Guardia Slip'kik\"\n})\n\n-----------------------\n-- Capitán Kromcrush --\n-----------------------\nL = DBM:GetModLocalization(415)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Capitán Kromcrush\"\n})\n\n----------------------------\n-- Cho'Rush el Observador --\n----------------------------\nL = DBM:GetModLocalization(416)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cho'Rush el Observador\"\n})\n\n----------------\n-- Rey Gordok --\n----------------\nL = DBM:GetModLocalization(417)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rey Gordok\"\n})\n\n-------------------------\n--  Gnomeregan-231J/90M (5L/7C)  --\n-----------------------------\n--  Grubbis  --\n-----------------------------\nL = DBM:GetModLocalization(419)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grubbis\"\n})\n\n-----------------------------\n--  Viscous Fallout  --\n-----------------------------\nL = DBM:GetModLocalization(420)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Radiactivo viscoso\"\n})\n\n-----------------------------\n--  Electrocutioner 6000  --\n-----------------------------\nL = DBM:GetModLocalization(421)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Electrocutor 6000\"\n})\n\n-----------------------------\n--  Crowd Pummeler 9-60  --\n-----------------------------\nL = DBM:GetModLocalization(418)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gopleamasa 9-60\"\n})\n\n-----------------------------\n--  Mekgineer Thermaplugg  --\n-----------------------------\nL = DBM:GetModLocalization(422)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mekigeniero Termochufe\"\n})\n\nL:SetMiscLocalization({\n\tYellBomb\t= \"¡Explosiones! ¡MÁS explosiones! ¡Tengo que provocar más explosiones!\"\n})\n\n-------------------------\n--  Maraudon-232J/349M (6L/8C)  --\n-----------------------------\n--  Noxxion  --\n-----------------------------\nL = DBM:GetModLocalization(423)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Noxxion\"\n})\n\n-----------------------------\n--  Razorlash  --\n-----------------------------\nL = DBM:GetModLocalization(424)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lativaja\"\n})\n\n-----------------------------\n--  Tinkerer Gizlock  --\n-----------------------------\nL = DBM:GetModLocalization(425)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Manitas Gizlock\"\n})\n\n-----------------------------\n--  Lord Vyletongue  --\n-----------------------------\nL = DBM:GetModLocalization(427)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Lenguavil\"\n})\n\n-----------------------------\n--  Celebras the Cursed  --\n-----------------------------\nL = DBM:GetModLocalization(428)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Celebras el Maldito\"\n})\n\n-----------------------------\n--  Landslide  --\n-----------------------------\nL = DBM:GetModLocalization(429)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Derrumblo\"\n})\n\n-----------------------------\n--  Rotgrip  --\n-----------------------------\nL = DBM:GetModLocalization(430)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Escamapodrida\"\n})\n\n-----------------------------\n--  Princess Theradras  --\n-----------------------------\nL = DBM:GetModLocalization(431)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Princesa Theradras\"\n})\n\n-------------------------\n--  Ragefire Chasm (7L/9C)  --\n-----------------------------\n--  Oggleflint  --\n-----------------------------\nL = DBM:GetModLocalization(\"Oggleflint\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ogglesílex\"\n})\n\n-----------------------------\n--  Taragaman the Hungerer  --\n-----------------------------\nL = DBM:GetModLocalization(\"Taragaman\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Taragaman el Hambriento\"\n})\n\n-----------------------------\n--  Jergosh the Invoker  --\n-----------------------------\nL = DBM:GetModLocalization(\"Jergosh\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jergosh el Conjurador\"\n})\n\n-----------------------------\n--  Bazzalan  --\n-----------------------------\nL = DBM:GetModLocalization(\"Bazzalan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bazzalan\"\n})\n\n-------------------------\n--  Razorfen Downs -233J/129M (8L/10C)  --\n-----------------------------\n--  Tuten'kash  --\n-----------------------------\nL = DBM:GetModLocalization(\"Tutenkash\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tuten'kash\"\n})\n\n-----------------------------\n--  Mordresh Fire Eye  --\n-----------------------------\nL = DBM:GetModLocalization(\"MordreshFireEye\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mordresh Ojo de Fuego\"\n})\n\n-----------------------------\n--  Glutton  --\n-----------------------------\nL = DBM:GetModLocalization(\"Glutton\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Glotón\"\n})\n\n-----------------------------\n--  Ragglesnout  --\n-----------------------------\nL = DBM:GetModLocalization(\"Ragglesnout\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Morrandrajos\"\n})\n\n-----------------------------\n--  Amnenar the Coldbringer  --\n-----------------------------\nL = DBM:GetModLocalization(\"AmnennartheColdbringer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Amnennar el Gélido\"\n})\n\n-----------------------------\n--  Plaguemaw the Rotting  --\n-----------------------------\nL = DBM:GetModLocalization(\"PlaguemawtheRotting\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Fauzpeste el Putrefacto\"\n})\n\n-------------------------\n--  Razorfen Kraul -234J/47M (9L/11C)  --\n-----------------------------\n--  Roogug  --\n-----------------------------\nL = DBM:GetModLocalization(\"Roogug\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Roogug\"\n})\n\n-----------------------------\n--  Aggem Thorncurse  --\n-----------------------------\nL = DBM:GetModLocalization(\"AggemThorncurse\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Aggem Malaespina\"\n})\n\n-----------------------------\n--  Death Speaker Jargba  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathSpeakerJargba\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Médium Jargba\"\n})\n\n-----------------------------\n--  Overload Ramtusk  --\n-----------------------------\nL = DBM:GetModLocalization(\"OverlordRamtusk\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Señor Supremo Colmicarnero\"\n})\n\n-----------------------------\n--  Agathelos the Raging  --\n-----------------------------\nL = DBM:GetModLocalization(\"AgathelostheRaging\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Agathelos el Furioso\"\n})\n\n-----------------------------\n--  Blind Hunter  --\n-----------------------------\nL = DBM:GetModLocalization(\"BlindHunter\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cazador ciego\"\n})\n\n-----------------------------\n--  Earthcaller Halmgar  --\n-----------------------------\nL = DBM:GetModLocalization(\"EarthcallerHalmgar\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Clamor de Tierra Halmgar\"\n})\n\n-----------------------------\n--  Charlga Razorflank  --\n-----------------------------\nL = DBM:GetModLocalization(\"CharlgaRazorflank\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Charlga Filonavaja\"\n})\n\n-------------------------\n--  Scarlet Monastery 189M (12C)  --\n-----------------------------\n--  Interrogator Vishas  --\n-----------------------------\nL = DBM:GetModLocalization(\"InterrogatorVishas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Interrogador Vishas\"\n})\n\n-----------------------------\n--  Bloodmage Thalnos  --\n-----------------------------\nL = DBM:GetModLocalization(\"BloodmageThalnos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mago sangriento Thalnos\"\n})\n\n-----------------------------\n--  Houndmaster Loksey  --\n-----------------------------\nL = DBM:GetModLocalization(\"HoundmasterLoksey\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Domador de jaurías Loksey\"\n})\n\n-----------------------------\n--  Arcanist Doan  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArcanistDoan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Arcanista Doan\"\n})\n\n-----------------------------\n--  Herod  --\n-----------------------------\nL = DBM:GetModLocalization(\"Herod\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Herod\"\n})\n\n-----------------------------\n--  Mograine & Whitemane  --\n-----------------------------\nL = DBM:GetModLocalization(\"Mograine_and_Whitemane\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mograine y Melenablanca\"\n})\n\n-----------------------------\n--  High Inquisitor Fairbanks  --\n-----------------------------\nL = DBM:GetModLocalization(\"Fairbanks\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Alto Inquisidor Ribalimpia\"\n})\n\n-------------------------\n--  Scholomance 289M (13C)  --\n-----------------------------\n--  Kirtonos the Herald  --\n-----------------------------\nL = DBM:GetModLocalization(\"KirtonostheHerald\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kirtonos el Heraldo\"\n})\n\n-----------------------------\n--  Jandice Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"JandiceBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jandice Barov\"\n})\n\n-----------------------------\n--  Rattlegore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rattlegore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Traquesangre\"\n})\n\n-----------------------------\n--  Marduk Blackpool  --\n-----------------------------\nL = DBM:GetModLocalization(\"MardukBlackpool\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Marduz Pozonegro\"\n})\n\n-----------------------------\n--  Vectus  --\n-----------------------------\nL = DBM:GetModLocalization(\"Vectus\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Vectus\"\n})\n\n-----------------------------\n--  Ras Frostwhisper  --\n-----------------------------\nL = DBM:GetModLocalization(\"RasFrostwhisper\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ras Levescarcha\"\n})\n\n-----------------------------\n--  Instructor Malicia  --\n-----------------------------\nL = DBM:GetModLocalization(\"InstructorMalicia\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Instructor Malicia\"\n})\n\n-----------------------------\n--  Doctor Theolen Krastinov  --\n-----------------------------\nL = DBM:GetModLocalization(\"DoctorTheolenKrastinov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Doctor Theolen Krastinov\"\n})\n\n-----------------------------\n--  Lorekeeper Polkelt  --\n-----------------------------\nL = DBM:GetModLocalization(\"LorekeeperPolkelt\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tradicionalista Polkelt\"\n})\n\n-----------------------------\n--  The Ravenian  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheRavenian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"El Devorador\"\n})\n\n-----------------------------\n--  Lord Alexei Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LordAlexeiBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Alexei Barov\"\n})\n\n-----------------------------\n--  Lady Illucia Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadyIlluciaBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lady Illucia Barov\"\n})\n\n-----------------------------\n--  Darkmaster Gandling  --\n-----------------------------\nL = DBM:GetModLocalization(\"DarkmasterGandling\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maestro oscuro Gandling\"\n})\n\n-------------------------\n--  Shadowfang Keep 33M (14C)  --\n-----------------------------\n--  Rethilgore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rethilgore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rethilgore\"\n})\n\n-----------------------------\n--  Razorclaw the Butcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"RazorclawtheButcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Zarpador el Carnicero\"\n})\n\n-----------------------------\n--  Baron Silverlaine  --\n-----------------------------\nL = DBM:GetModLocalization(\"BaronSilverlaine\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Barón Filargenta\"\n})\n\n-----------------------------\n--  Commander Springvale  --\n-----------------------------\nL = DBM:GetModLocalization(\"CommanderSpringvale\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Comandante Vallefont\"\n})\n\n-----------------------------\n--  Odo the Blindwatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"OdotheBlindwatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Odo el Cegato\"\n})\n\n-----------------------------\n--  Deathsworn Captain  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathswornCaptain\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Capitán Juramorte\"\n})\n\n-----------------------------\n--  Fenrus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(\"FenrustheDevourer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Fenrus el Devorador\"\n})\n\n-----------------------------\n--  Wolf Master Nandos  --\n-----------------------------\nL = DBM:GetModLocalization(\"WolfMasterNandos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maestro de lobos Nandos\"\n})\n\n-----------------------------\n--  Archmage Arugal  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArchmageArugal\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Archimago Arugal\"\n})\n\n-------------------------\n--  Stormwind Stockaid 34M (10L/15C)  --\n-----------------------------\n--  Targorr the Dread  --\n-----------------------------\nL = DBM:GetModLocalization(\"Targorr\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Targor el Pavoroso\"\n})\n\n-----------------------------\n--  Kam Deepfury  --\n-----------------------------\nL = DBM:GetModLocalization(\"KamDeepfury\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kam Furiahonda\"\n})\n\n-----------------------------\n--  Hamhock  --\n-----------------------------\nL = DBM:GetModLocalization(\"Hamhock\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hamhock\"\n})\n\n-----------------------------\n--  Bazil Thredd  --\n-----------------------------\nL = DBM:GetModLocalization(\"BazilThredd\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bazil Thredd\"\n})\n\n-----------------------------\n--  Dextren Ward  --\n-----------------------------\nL = DBM:GetModLocalization(\"DextrenWard\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Dextren Tutor\"\n})\n\n-----------------------------\n--  Bruegal Ironknuckle  --\n-----------------------------\nL = DBM:GetModLocalization(\"BruegalIronknuckle\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bruegal Nudoferro\"\n})\n\n-------------------------\n--  Stratholme 236J/329M (10L/16C)  --\n-----------------------------\n--  Hearthsinger Forresten  --\n-----------------------------\nL = DBM:GetModLocalization(443)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Escupezones Foreste\"\n})\n\n-----------------------------\n--  Timmy the Cruel  --\n-----------------------------\nL = DBM:GetModLocalization(445)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Timmy el Cruel\"\n})\n\n-----------------------------\n--  Malor the Zealous  --\n-----------------------------\nL = DBM:GetModLocalization(749)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Malor el Entusiasta\"\n})\n\n-----------------------------\n--  Cannon Master Willey  --\n-----------------------------\nL = DBM:GetModLocalization(446)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cañonero Jefe Willey\"\n})\n\n-----------------------------\n--  Archivist Galford  --\n-----------------------------\nL = DBM:GetModLocalization(448)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Archivista Galford\"\n})\n\n-----------------------------\n--  Balnazzar  --\n-----------------------------\nL = DBM:GetModLocalization(449)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Balnazzar\"\n})\n\n-----------------------------\n--  The Unforgiven  --\n-----------------------------\nL = DBM:GetModLocalization(450)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"El Imperdonable\"\n})\n\n-----------------------------\n--  Baroness Anastari  --\n-----------------------------\nL = DBM:GetModLocalization(451)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Baronesa Anastari\"\n})\n\n-----------------------------\n--  Nerub'enkan  --\n-----------------------------\nL = DBM:GetModLocalization(452)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Nerub'enkan\"\n})\n\n-----------------------------\n--  Maleki the Pallid  --\n-----------------------------\nL = DBM:GetModLocalization(453)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maleki el Pálido\"\n})\n\n-----------------------------\n--  Magistrate Barthilas  --\n-----------------------------\nL = DBM:GetModLocalization(454)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Magistrado Barthilas\"\n})\n\n-----------------------------\n--  Ramstein the Gorger  --\n-----------------------------\nL = DBM:GetModLocalization(455)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ramstein el Empachador\"\n})\n\nL:SetTimerLocalization({\n\tTimerGuards\t= \"Aparecen los guardias\"\n})\n\nL:SetOptionLocalization({\n\tTimerGuards\t= \"Después de derrotar al jefe, muestra el temporizador para la llegada de los Argos Guardia Negra\"\n})\n\n-----------------------------\n--  Baron Rivendare  --\n-----------------------------\nL = DBM:GetModLocalization(456)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Barón Osahendido\"\n})\n\n-------------------------\n--  Sunken Temple 237J/109M (11L/17C)  --\n-----------------------------\n--  Avatar of Hakkar  --\n-----------------------------\nL = DBM:GetModLocalization(457)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Avatar de Hakkar\"\n})\n\n-----------------------------\n--  Jammal'an the Prophet  --\n-----------------------------\nL = DBM:GetModLocalization(458)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jammal'an el Profeta\"\n})\n\n----------------------------------------------\n--\tWardens of the Dream\t\t\t\t\t--\n--\t(Dreamscythe, Weaver, Morphaz, Hazzas)\t--\n----------------------------------------------\nL = DBM:GetModLocalization(\"Dreamscythe\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Guadañasueños\"\n})\n\nL = DBM:GetModLocalization(\"Weaver\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Sastrón\"\n})\n\nL = DBM:GetModLocalization(\"Morphaz\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Morphaz\"\n})\n\nL = DBM:GetModLocalization(\"Hazzas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hazzas\"\n})\n\n-----------------------------\n--  Shade of Eranikus  --\n-----------------------------\nL = DBM:GetModLocalization(463)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Sombra de Eranikus\"\n})\n\n-------------------------\n--  Uldaman 229J/70M (12L/18C)  --\n-----------------------------\n--  Revelosh  --\n-----------------------------\nL = DBM:GetModLocalization(467)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Revelosh\"\n})\n\n-----------------------------\n--  The Lost Dwarves  --\n-----------------------------\nL = DBM:GetModLocalization(468)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Los enanos desaparecidos\"\n})\n\n-----------------------------\n--  Ironaya  --\n-----------------------------\nL = DBM:GetModLocalization(469)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hierraya\"\n})\n\n-----------------------------\n--  Obsidian Sentinel  --\n-----------------------------\nL = DBM:GetModLocalization(748)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Centinela Obsidiano\"\n})\n\n-----------------------------\n--  Ancient Stone Keeper  --\n-----------------------------\nL = DBM:GetModLocalization(470)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Vigilante pétreo anciano\"\n})\n\n-----------------------------\n--  Galgann Firehammer  --\n-----------------------------\nL = DBM:GetModLocalization(471)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Galgann Flamartillo\"\n})\n\n-----------------------------\n--  Grimlok  --\n-----------------------------\nL = DBM:GetModLocalization(472)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grimlok\"\n})\n\n-----------------------------\n--  Archaedas  --\n-----------------------------\nL = DBM:GetModLocalization(473)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Archaedas\"\n})\n\n-------------------------\n--  Wailing Caverns 240J/43M (13L/19C)  --\n-----------------------------\n--  Lady Anacondra  --\n-----------------------------\nL = DBM:GetModLocalization(474)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lady Anacondra\"\n})\n\n-----------------------------\n--  Lord Pythas  --\n-----------------------------\nL = DBM:GetModLocalization(476)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Pythas\"\n})\n\n-----------------------------\n--  Lord Cobrahn  --\n-----------------------------\nL = DBM:GetModLocalization(475)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Cobrahn\"\n})\n\n-----------------------------\n--  Kresh  --\n-----------------------------\nL = DBM:GetModLocalization(477)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kresh\"\n})\n\n-----------------------------\n--  Skum  --\n-----------------------------\nL = DBM:GetModLocalization(478)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Skum\"\n})\n\n-----------------------------\n--  Lord Serpentis  --\n-----------------------------\nL = DBM:GetModLocalization(479)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Serpentis\"\n})\n\n-----------------------------\n--  Verdan the Everliving  --\n-----------------------------\nL = DBM:GetModLocalization(480)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Verdan el Eterno\"\n})\n\n-----------------------------\n--  Mutanus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(481)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mutanus el Devorador\"\n})\n\n-----------------------------\n--  Deviate Faerie Dragon  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeviateFaerie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Dragón feérico descarriado\"\n})\n\n-------------------------\n--  Zul'Farrak 241J/209M (14L/20C)  --\n-----------------------------\n--  Ghaz'rilla  --\n-----------------------------\nL = DBM:GetModLocalization(483)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gahz'rilla\"\n})\n\n-----------------------------\n--  Antu'sul  --\n-----------------------------\nL = DBM:GetModLocalization(484)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Antu'sul\"\n})\n\n-----------------------------\n--  Theka the Martyr  --\n-----------------------------\nL = DBM:GetModLocalization(485)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Theka la Mártir\"\n})\n\n-----------------------------\n--  Witch Doctor Zum'rah  --\n-----------------------------\nL = DBM:GetModLocalization(486)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Médico brujo Zum'rah\"\n})\n\n-----------------------------\n--  Hydromancer Velrath (not in Dungeon Journal)  --\n-----------------------------\nL = DBM:GetModLocalization(\"HydromancerVelrath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hidromántica Velratha\"\n})\n\n-----------------------------\n--  Nekrum & Sezz'ziz  --\n-----------------------------\nL = DBM:GetModLocalization(487)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Nekrum y Sezz'ziz\"\n})\n\n-----------------------------\n--  Chief Ukorz Sandscalp  --\n-----------------------------\nL = DBM:GetModLocalization(489)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jefe Ukorz Cabellarena\"\n})\n"
  },
  {
    "path": "DBM-Party-Classic/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\nlocal L\n\n--------------------------------\n-- Blackfathom Deeps (1) --\n--------------------------------\n--  Ghamoo-Ra  --\n-----------------------------\nL = DBM:GetModLocalization(\"GhamooRa\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ghamoo-Ra\"\n})\n\n-----------------------------\n--  Lady Sarevess  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadySerevess\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Dame Sarevess\"\n})\n\n-----------------------------\n--  Gelihast  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gelihast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gelihast\"\n})\n\n-----------------------------\n--  Old Serra'kis  --\n-----------------------------\nL = DBM:GetModLocalization(\"OldSerrakis\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Vieux Serra'kis\"\n})\n\n-----------------------------\n--  Twilight Lord Kelris  --\n-----------------------------\nL = DBM:GetModLocalization(\"TwilightLordKelris\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Seigneur du crépuscule Kelris\"\n})\n\n-----------------------------\n--  Aku'mai  --\n-----------------------------\nL = DBM:GetModLocalization(\"Akumai\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Aku'mai\"\n})\n\n-------------------------------------------------\n-- Blackrock Depths - 228J/230M (2) --\n-------------------------------------------------\n-- High Interrogator Gerstahn --\n---------------------------------\nL = DBM:GetModLocalization(369)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grand Interrogateur Gerstahn\"\n})\n\n-----------------\n-- Lord Roccor --\n-----------------\nL = DBM:GetModLocalization(370)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Seigneur Roccor\"\n})\n\n------------------------------\n-- Hound Master Grebmar --\n------------------------------\nL = DBM:GetModLocalization(371)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maître-chien Grebmar\"\n})\n\n---------------------------------------------------------\n-- Ring of Law --\n---------------------------------------------------------\nL = DBM:GetModLocalization(372)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cercle de la loi\"\n})\n\n---------------------------------\n-- Pyromancer Loregrain --\n---------------------------------\nL = DBM:GetModLocalization(373)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Pyromancien Loregrain\"\n})\n\n--------------------\n-- Lord Incendius --\n--------------------\nL = DBM:GetModLocalization(374)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Seigneur Incendius\"\n})\n\n--------------------------\n-- Warden Stilgiss --\n--------------------------\nL = DBM:GetModLocalization(375)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gardien Stilgiss\"\n})\n\n----------------------\n-- Fineous Darkvire --\n----------------------\nL = DBM:GetModLocalization(376)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Fineous Sombrevire\"\n})\n\n--------------\n-- Bael'Gar --\n--------------\nL = DBM:GetModLocalization(377)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bael'Gar\"\n})\n\n--------------------------\n-- General Angerforge --\n--------------------------\nL = DBM:GetModLocalization(378)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Général Forgehargne\"\n})\n\n---------------------------\n-- Golem Lord Argelmach --\n---------------------------\nL = DBM:GetModLocalization(379)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Seigneur golem Argelmach\"\n})\n\n----------------------\n-- Hurley Blackbreath --\n----------------------\nL = DBM:GetModLocalization(380)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hurley Blackbreath\"\n})\n\n-------------\n-- Phalanx --\n-------------\nL = DBM:GetModLocalization(381)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Phalange\"\n})\n\n-----------------------\n-- Plugger Spazzring --\n-----------------------\nL = DBM:GetModLocalization(383)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lanfiche Brouillecircuit\"\n})\n\n-------------------------\n-- Ambassador Flamelash --\n-------------------------\nL = DBM:GetModLocalization(384)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ambassadeur Cinglefouet\"\n})\n\n---------------\n-- The Seven --\n---------------\nL = DBM:GetModLocalization(385)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Les Sept\"\n})\n\n------------\n-- Magmus --\n------------\nL = DBM:GetModLocalization(386)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Magmus\"\n})\n\n---------------------------------\n-- Emperor Dagran Thaurissan --\n---------------------------------\nL = DBM:GetModLocalization(387)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Empereur Dagran Thaurissan\"\n})\n\n-------------------------\n--  Lower Blackrock Spire-229J/229M (6L/3C)  --\n--  Highlord Omokk  --\n-----------------------------\nL = DBM:GetModLocalization(388)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Généralissime Omokk\"\n})\n\n-----------------------------\n--  Shadow Hunter Vosh'gajin  --\n-----------------------------\nL = DBM:GetModLocalization(389)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Chasseresse des ombres Vosh'gajin\"\n})\n\n-----------------------------\n--  War Master Voone  --\n-----------------------------\nL = DBM:GetModLocalization(390)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maître de guerre Voone\"\n})\n\n-----------------------------\n--  Mother Smolderweb  --\n-----------------------------\nL = DBM:GetModLocalization(391)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Matriarche Couveuse\"\n})\n\n-----------------------------\n--  Urok Doomhowl  --\n-----------------------------\nL = DBM:GetModLocalization(392)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Urok Hurleruine\"\n})\n\n-----------------------------\n--  Quartermaster Zigris  --\n-----------------------------\nL = DBM:GetModLocalization(393)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Intendant Zigris\"\n})\n\n-----------------------------\n--  Halycon  --\n-----------------------------\nL = DBM:GetModLocalization(394)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Halycon\"\n})\n\n-----------------------------\n--  Gizrul  --\n-----------------------------\nL = DBM:GetModLocalization(395)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gizrul l'esclavagiste\"\n})\n\n-----------------------------\n--  Overlord Wyrmthalak  --\n-----------------------------\nL = DBM:GetModLocalization(396)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Seigneur Wyrmthalak\"\n})\n\n-------------------------\n--  Upper Blackrock Spire-229J/229M (4C)  --\n-----------------------------\n--  Pyroguard Emberseer  --\n-----------------------------\nL = DBM:GetModLocalization(\"PyroguardEmberseer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Pyrogarde Prophète ardent\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"%s commence à retrouver ses forces !\"\n})\n\n-----------------------------\n--  Solakar Flamewreath  --\n-----------------------------\nL = DBM:GetModLocalization(\"SolakarFlamewreath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Solakar Voluteflamme\"\n})\n\n-----------------------------\n--  Goraluk Anvilcrack  --\n-----------------------------\nL = DBM:GetModLocalization(\"GoralukAnvilcrack\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Goraluk Anvilcrack\"\n})\n\n-----------------------------\n--  Jed Runewatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"JedRunewatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jed Runewatcher\"\n})\n\n-----------------------------\n--  Warchief Rend Blackhand  --\n-----------------------------\nL = DBM:GetModLocalization(\"WarchiefRendBlackhand\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Chef de guerre Rend Main-noire\"\n})\n\n-----------------------------\n--  The Beast  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheBeast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"La Bête\"\n})\n\n-----------------------------\n--  General Drakkisath  --\n-----------------------------\nL = DBM:GetModLocalization(\"GeneralDrakkisath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Général Drakkisath\"\n})\n\n-------------------------\n--  Deadmines (3L/5C)  --\n-----------------------------\n--  Rhahk'Zor  --\n-----------------------------\nL = DBM:GetModLocalization(\"RhahkZor\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rhahk'Zor\"\n})\n\n-----------------------------\n--  Miner Johnson  --\n-----------------------------\nL = DBM:GetModLocalization(\"MinerJohnson\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mineur Johnson\"\n})\n\n-----------------------------\n--  Sneed's Shredder  --\n-----------------------------\nL = DBM:GetModLocalization(\"SneedsShredder\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Déchiqueteur de Sneed\"\n})\n\n-----------------------------\n--  Gilnid  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gilnid\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gilnid\"\n})\n\n-----------------------------\n--  Mr. Smite  --\n-----------------------------\nL = DBM:GetModLocalization(\"MrSmite\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"M. Smite\"\n})\n\n-----------------------------\n--  Captain Greenskin  --\n-----------------------------\nL = DBM:GetModLocalization(\"CaptainGreenskin\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Capitaine Vertepeau\"\n})\n\n-----------------------------\n--  Edwin Van Cleef  --\n-----------------------------\nL = DBM:GetModLocalization(\"EdwinVanCleef\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Edwin VanCleef\"\n})\n\n-----------------------------\n--  Cookie  --\n-----------------------------\nL = DBM:GetModLocalization(\"Cookie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Macaron\"\n})\n\n--------------------------------\n-- Dire Maul - 230J/429M (3) --\n--------------------------------\n-- Zevrim Thornhoof --\n--------------------------\nL = DBM:GetModLocalization(402)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Zevrim Sabot-de-ronce\"\n})\n\n------------------\n-- Hydrospawn --\n------------------\nL = DBM:GetModLocalization(403)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hydrogénos\"\n})\n\n-----------------\n-- Lethtendris --\n-----------------\nL = DBM:GetModLocalization(404)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lethtendris\"\n})\n\n--------------------------\n-- Alzzin the Wildshaper --\n--------------------------\nL = DBM:GetModLocalization(405)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Alzzin le Modeleur\"\n})\n\n--------------------\n-- Tendris Warpwood --\n--------------------\nL = DBM:GetModLocalization(406)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tendris Crochebois\"\n})\n\n--------------------------\n-- Illyanna Ravenoak --\n--------------------------\nL = DBM:GetModLocalization(407)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Illyanna Ravenoak\"\n})\n\n------------------------\n-- Magister Kalendris --\n------------------------\nL = DBM:GetModLocalization(408)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Magistère Kalendris\"\n})\n\n----------------\n-- Immol'thar --\n----------------\nL = DBM:GetModLocalization(409)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Immol'thar\"\n})\n\n--------------------------\n-- Prince Tortheldrin --\n--------------------------\nL = DBM:GetModLocalization(410)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Prince Tortheldrin\"\n})\n\n---------------------\n-- Guard Mol'dar --\n---------------------\nL = DBM:GetModLocalization(411)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Garde Mol'dar\"\n})\n\n----------------------\n-- Stomper Kreeg --\n----------------------\nL = DBM:GetModLocalization(412)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kreeg le Marteleur\"\n})\n\n--------------------\n-- Guard Fengus --\n--------------------\nL = DBM:GetModLocalization(413)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Garde Fengus\"\n})\n\n----------------------\n-- Guard Slip'kik --\n----------------------\nL = DBM:GetModLocalization(414)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Garde Slip'kik\"\n})\n\n-----------------------\n-- Captain Kromcrush --\n-----------------------\nL = DBM:GetModLocalization(415)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Capitaine Kromcrush\"\n})\n\n----------------------------\n-- Cho'Rush the Observer --\n----------------------------\nL = DBM:GetModLocalization(416)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cho'Rush l'Observateur\"\n})\n\nL:SetMiscLocalization({\n\tDefeat\t= \"Le roi est mort – OH NON ! Faut aller chercher Mizzle l’Ingénieux ! Y saura quoi faire !\"\n})\n\n----------------\n-- King Gordok --\n----------------\nL = DBM:GetModLocalization(417)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Roi Gordok\"\n})\n\n-------------------------\n--  Gnomeregan-231J/90M (5L/7C)  --\n-----------------------------\n--  Grubbis  --\n-----------------------------\nL = DBM:GetModLocalization(419)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grubbis\"\n})\n\n-----------------------------\n--  Viscous Fallout  --\n-----------------------------\nL = DBM:GetModLocalization(420)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Retombée visqueuse\"\n})\n\n-----------------------------\n--  Electrocutioner 6000  --\n-----------------------------\nL = DBM:GetModLocalization(421)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Electrocuteur 6000\"\n})\n\n-----------------------------\n--  Crowd Pummeler 9-60  --\n-----------------------------\nL = DBM:GetModLocalization(418)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Faucheur de foule 9-60\"\n})\n\n-----------------------------\n--  Mekgineer Thermaplugg  --\n-----------------------------\nL = DBM:GetModLocalization(422)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mekgénieur Thermojoncteur\"\n})\n\nL:SetMiscLocalization({\n\tYellBomb\t= \"Des explosions ! ENCORE des explosions ! Je veux plus d'explosions !\"\n})\n\n-------------------------\n--  Maraudon-232J/349M (6L/8C)  --\n-----------------------------\n--  Noxxion  --\n-----------------------------\nL = DBM:GetModLocalization(423)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Noxcion\"\n})\n\n-----------------------------\n--  Razorlash  --\n-----------------------------\nL = DBM:GetModLocalization(424)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tranchefouet\"\n})\n\n-----------------------------\n--  Tinkerer Gizlock  --\n-----------------------------\nL = DBM:GetModLocalization(425)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Artisan Gizlock\"\n})\n\n-----------------------------\n--  Lord Vyletongue  --\n-----------------------------\nL = DBM:GetModLocalization(427)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Seigneur Vylelangue\"\n})\n\n-----------------------------\n--  Celebras the Cursed  --\n-----------------------------\nL = DBM:GetModLocalization(428)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Celebras le Maudit\"\n})\n\n-----------------------------\n--  Landslide  --\n-----------------------------\nL = DBM:GetModLocalization(429)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Glissement de terrain\"\n})\n\n-----------------------------\n--  Rotgrip  --\n-----------------------------\nL = DBM:GetModLocalization(430)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grippe-charogne\"\n})\n\n-----------------------------\n--  Princess Theradras  --\n-----------------------------\nL = DBM:GetModLocalization(431)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Princesse Theradras\"\n})\n\n-------------------------\n--  Ragefire Chasm (7L/9C)  --\n-----------------------------\n--  Oggleflint  --\n-----------------------------\nL = DBM:GetModLocalization(\"Oggleflint\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lorgnesilex\"\n})\n\n-----------------------------\n--  Taragaman the Hungerer  --\n-----------------------------\nL = DBM:GetModLocalization(\"Taragaman\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Taragaman l'Affameur\"\n})\n\n-----------------------------\n--  Jergosh the Invoker  --\n-----------------------------\nL = DBM:GetModLocalization(\"Jergosh\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jergosh l'Invocateur\"\n})\n\n-----------------------------\n--  Bazzalan  --\n-----------------------------\nL = DBM:GetModLocalization(\"Bazzalan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bazzalan\"\n})\n\n-------------------------\n--  Razorfen Downs -233J/129M (8L/10C)  --\n-----------------------------\n--  Tuten'kash  --\n-----------------------------\nL = DBM:GetModLocalization(\"Tutenkash\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tuten'kash\"\n})\n\n-----------------------------\n--  Mordress Fire Eye  --\n-----------------------------\nL = DBM:GetModLocalization(\"MordreshFireEye\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mordresh Oeil-de-feu\"\n})\n\n-----------------------------\n--  Glutton  --\n-----------------------------\nL = DBM:GetModLocalization(\"Glutton\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Glouton\"\n})\n\n-----------------------------\n--  Ragglesnout  --\n-----------------------------\nL = DBM:GetModLocalization(\"Ragglesnout\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Groinfendu\"\n})\n\n-----------------------------\n--  Amnenar the Coldbringer  --\n-----------------------------\nL = DBM:GetModLocalization(\"AmnennartheColdbringer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Amnennar le Porte-froid\"\n})\n\n-----------------------------\n--  Plaguemaw the Rotting  --\n-----------------------------\nL = DBM:GetModLocalization(\"PlaguemawtheRotting\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Pestegueule le Pourrissant\"\n})\n\n-------------------------\n--  Razorfen Kraul -234J/47M (9L/11C)  --\n-----------------------------\n--  Roogug  --\n-----------------------------\nL = DBM:GetModLocalization(\"Roogug\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Roogug\"\n})\n\n-----------------------------\n--  Aggem Thorncurse  --\n-----------------------------\nL = DBM:GetModLocalization(\"AggemThorncurse\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Aggem Mantépine\"\n})\n\n-----------------------------\n--  Death Speaker Jargba  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathSpeakerJargba\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Nécrorateur Jargba\"\n})\n\n-----------------------------\n--  Overload Ramtusk  --\n-----------------------------\nL = DBM:GetModLocalization(\"OverlordRamtusk\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Seigneur Brusquebroche\"\n})\n\n-----------------------------\n--  Agathelos the Raging  --\n-----------------------------\nL = DBM:GetModLocalization(\"AgathelostheRaging\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Agathelos le Déchaîné\"\n})\n\n-----------------------------\n--  Blind Hunter  --\n-----------------------------\nL = DBM:GetModLocalization(\"BlindHunter\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Chasseur aveugle\"\n})\n\n-----------------------------\n--  Earthcaller Halmgar  --\n-----------------------------\nL = DBM:GetModLocalization(\"EarthcallerHalmgar\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Implorateur de la terre Halmgar\"\n})\n\n-----------------------------\n--  Charlga Razorflank  --\n-----------------------------\nL = DBM:GetModLocalization(\"CharlgaRazorflank\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Charlga Trancheflanc\"\n})\n\n-------------------------\n--  Scarlet Monastery 189M (12C)  --\n-----------------------------\n--  Interrogator Vishas  --\n-----------------------------\nL = DBM:GetModLocalization(\"InterrogatorVishas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Interrogateur Vishas\"\n})\n\n-----------------------------\n--  Bloodmage Thalnos  --\n-----------------------------\nL = DBM:GetModLocalization(\"BloodmageThalnos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mage de sang Thalnos\"\n})\n\n-----------------------------\n--  Houndmaster Loksey  --\n-----------------------------\nL = DBM:GetModLocalization(\"HoundmasterLoksey\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maître-chien Loksey\"\n})\n\n-----------------------------\n--  Arcanist Doan  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArcanistDoan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Arcaniste Doan\"\n})\n\n-----------------------------\n--  Herod  --\n-----------------------------\nL = DBM:GetModLocalization(\"Herod\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Herod\"\n})\n\n-----------------------------\n--  Mograine & Whitemane  --\n-----------------------------\nL = DBM:GetModLocalization(\"Mograine_and_Whitemane\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mograine et Melenablanca\"\n})\n\n-----------------------------\n--  High Inquisitor Fairbanks  --\n-----------------------------\nL = DBM:GetModLocalization(\"Fairbanks\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grand Inquisiteur Fairbanks\"\n})\n\n-------------------------\n--  Scholomance 289M (13C)  --\n-----------------------------\n--  Kirtonos the Herald  --\n-----------------------------\nL = DBM:GetModLocalization(\"KirtonostheHerald\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kirtonos le Héraut\"\n})\n\n-----------------------------\n--  Jandice Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"JandiceBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jandice Barov\"\n})\n\n-----------------------------\n--  Rattlegore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rattlegore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cliquettripes\"\n})\n\n-----------------------------\n--  Marduk Blackpool  --\n-----------------------------\nL = DBM:GetModLocalization(\"MardukBlackpool\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Marduk Noirétang\"\n})\n\n-----------------------------\n--  Vectus  --\n-----------------------------\nL = DBM:GetModLocalization(\"Vectus\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Vectus\"\n})\n\n-----------------------------\n--  Ras Frostwhisper  --\n-----------------------------\nL = DBM:GetModLocalization(\"RasFrostwhisper\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ras Murmegivre\"\n})\n\n-----------------------------\n--  Instructor Malicia  --\n-----------------------------\nL = DBM:GetModLocalization(\"InstructorMalicia\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Instructeur Malicia\"\n})\n\n-----------------------------\n--  Doctor Theolen Krastinov  --\n-----------------------------\nL = DBM:GetModLocalization(\"DoctorTheolenKrastinov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Docteur Theolen Krastinov\"\n})\n\n-----------------------------\n--  Lorekeeper Polkelt  --\n-----------------------------\nL = DBM:GetModLocalization(\"LorekeeperPolkelt\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gardien du savoir Polkelt\"\n})\n\n-----------------------------\n--  The Ravenian  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheRavenian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Le Voracien\"\n})\n\n-----------------------------\n--  Lord Alexei Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LordAlexeiBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Seigneur Alexei Barov\"\n})\n\n-----------------------------\n--  Lady Illucia Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadyIlluciaBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Dame Illucia Barov\"\n})\n\n-----------------------------\n--  Darkmaster Gandling  --\n-----------------------------\nL = DBM:GetModLocalization(\"DarkmasterGandling\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Sombre Maître Gandling\"\n})\n\n-------------------------\n--  Shadowfang Keep 33M (14C)  --\n-----------------------------\n--  Rethilgore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rethilgore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rethilgore\"\n})\n\n-----------------------------\n--  Razorclaw the Butcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"RazorclawtheButcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tranchegriffe le Boucher\"\n})\n\n-----------------------------\n--  Baron Silverlaine  --\n-----------------------------\nL = DBM:GetModLocalization(\"BaronSilverlaine\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Baron d'Argelaine\"\n})\n\n-----------------------------\n--  Commander Springvale  --\n-----------------------------\nL = DBM:GetModLocalization(\"CommanderSpringvale\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Commandant Springvale\"\n})\n\n-----------------------------\n--  Odo the Blindwatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"OdotheBlindwatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Odo l'Aveugle\"\n})\n\n-----------------------------\n--  Deathsworn Captain  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathswornCaptain\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Capitaine Ligemort\"\n})\n\n-----------------------------\n--  Fenrus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(\"FenrustheDevourer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Fenrus le Dévoreur\"\n})\n\n-----------------------------\n--  Wolf Master Nandos  --\n-----------------------------\nL = DBM:GetModLocalization(\"WolfMasterNandos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maître-loup Nandos\"\n})\n\n-----------------------------\n--  Archmage Arugal  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArchmageArugal\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Archimage Arugal\"\n})\n\n-------------------------\n--  Stormwind Stockaid 34M (10L/15C)  --\n-----------------------------\n--  Targorr the Dread  --\n-----------------------------\nL = DBM:GetModLocalization(\"Targorr\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Targorr le Terrifiant\"\n})\n\n-----------------------------\n--  Kam Deepfury  --\n-----------------------------\nL = DBM:GetModLocalization(\"KamDeepfury\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kam Deepfury\"\n})\n\n-----------------------------\n--  Hamhock  --\n-----------------------------\nL = DBM:GetModLocalization(\"Hamhock\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hamhock\"\n})\n\n-----------------------------\n--  Bazil Thredd  --\n-----------------------------\nL = DBM:GetModLocalization(\"BazilThredd\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bazil Thredd\"\n})\n\n-----------------------------\n--  Dextren Ward  --\n-----------------------------\nL = DBM:GetModLocalization(\"DextrenWard\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Dextren Ward\"\n})\n\n-----------------------------\n--  Bruegal Ironknuckle  --\n-----------------------------\nL = DBM:GetModLocalization(\"BruegalIronknuckle\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bruegal Ironknuckle\"\n})\n\n-------------------------\n--  Stratholme 236J/329M (10L/16C)  --\n-----------------------------\n--  Hearthsinger Forresten  --\n-----------------------------\nL = DBM:GetModLocalization(443)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hearthsinger Forresten\"\n})\n\n-----------------------------\n--  Timmy the Cruel  --\n-----------------------------\nL = DBM:GetModLocalization(445)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Timmy le Cruel\"\n})\n\n-----------------------------\n--  Malor the Zealous  --\n-----------------------------\nL = DBM:GetModLocalization(749)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Malor le Zélé\"\n})\n\n-----------------------------\n--  Cannon Master Willey  --\n-----------------------------\nL = DBM:GetModLocalization(446)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maître canonnier Willey\"\n})\n\n-----------------------------\n--  Archivist Galford  --\n-----------------------------\nL = DBM:GetModLocalization(448)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Archiviste Galford\"\n})\n\n-----------------------------\n--  Balnazzar  --\n-----------------------------\nL = DBM:GetModLocalization(449)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Balnazzar\"\n})\n\n-----------------------------\n--  The Unforgiven  --\n-----------------------------\nL = DBM:GetModLocalization(450)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Le Condamné\"\n})\n\n-----------------------------\n--  Baroness Anastari  --\n-----------------------------\nL = DBM:GetModLocalization(451)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Baronne Anastari\"\n})\n\n-----------------------------\n--  Nerub'enkan  --\n-----------------------------\nL = DBM:GetModLocalization(452)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Nerub'enkan\"\n})\n\n-----------------------------\n--  Maleki the Pallid  --\n-----------------------------\nL = DBM:GetModLocalization(453)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maleki le Blafard\"\n})\n\n-----------------------------\n--  Magistrate Barthilas  --\n-----------------------------\nL = DBM:GetModLocalization(454)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Magistrat Barthilas\"\n})\n\n-----------------------------\n--  Ramstein the Gorger  --\n-----------------------------\nL = DBM:GetModLocalization(455)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ramstein Grandgosier\"\n})\n\nL:SetTimerLocalization({\n\tTimerGuards\t= \"Sentinelles apparaissent\"\n})\n\nL:SetOptionLocalization({\n\tTimerGuards\t= \"Après la défaite du boss, affichez le timer pour l'arrivée des Sentinelles de la Garde noire\"\n})\n\n-----------------------------\n--  Baron Rivendare  --\n-----------------------------\nL = DBM:GetModLocalization(456)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Baron Rivendare\"\n})\n\n-------------------------\n--  Sunken Temple 237J/109M (11L/17C)  --\n-----------------------------\n--  Avatar of Hakkar  --\n-----------------------------\nL = DBM:GetModLocalization(457)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Avatar d'Hakkar\"\n})\n\n-----------------------------\n--  Jammal'an the Prophet  --\n-----------------------------\nL = DBM:GetModLocalization(458)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jammal'an le prophète\"\n})\n\n----------------------------------------------\n--\tWardens of the Dream\t\t\t\t\t--\n--\t(Dreamscythe, Weaver, Morphaz, Hazzas)\t--\n----------------------------------------------\nL = DBM:GetModLocalization(\"Dreamscythe\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Fauche-rêve\"\n})\n\nL = DBM:GetModLocalization(\"Weaver\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tisserand\"\n})\n\nL = DBM:GetModLocalization(\"Morphaz\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Morphaz\"\n})\n\nL = DBM:GetModLocalization(\"Hazzas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hazzas\"\n})\n\n-----------------------------\n--  Shade of Eranikus  --\n-----------------------------\nL = DBM:GetModLocalization(463)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ombre d'Eranikus\"\n})\n\n-------------------------\n--  Uldaman 229J/70M (12L/18C)  --\n-----------------------------\n--  Revelosh  --\n-----------------------------\nL = DBM:GetModLocalization(467)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Revelosh\"\n})\n\n-----------------------------\n--  The Lost Dwarves  --\n-----------------------------\nL = DBM:GetModLocalization(468)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Les nains perdus\"\n})\n\n-----------------------------\n--  Ironaya  --\n-----------------------------\nL = DBM:GetModLocalization(469)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ironaya\"\n})\n\n-----------------------------\n--  Obsidian Sentinel  --\n-----------------------------\nL = DBM:GetModLocalization(748)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Sentinelle d'obsidienne\"\n})\n\n-----------------------------\n--  Ancient Stone Keeper  --\n-----------------------------\nL = DBM:GetModLocalization(470)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ancien Gardien des pierres\"\n})\n\n-----------------------------\n--  Galgann Firehammer  --\n-----------------------------\nL = DBM:GetModLocalization(471)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Galgann Martel-de-feu\"\n})\n\n-----------------------------\n--  Grimlok  --\n-----------------------------\nL = DBM:GetModLocalization(472)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grimlok\"\n})\n\n-----------------------------\n--  Archaedas  --\n-----------------------------\nL = DBM:GetModLocalization(473)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Archaedas\"\n})\n\n-------------------------\n--  Wailing Caverns 240J/43M (13L/19C)  --\n-----------------------------\n--  Lady Anacondra  --\n-----------------------------\nL = DBM:GetModLocalization(474)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Dame Anacondra\"\n})\n\n-----------------------------\n--  Lord Pythas  --\n-----------------------------\nL = DBM:GetModLocalization(476)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Seigneur Pythas\"\n})\n\n-----------------------------\n--  Lord Cobrahn  --\n-----------------------------\nL = DBM:GetModLocalization(475)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Seigneur Cobrahn\"\n})\n\n-----------------------------\n--  Kresh  --\n-----------------------------\nL = DBM:GetModLocalization(477)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kresh\"\n})\n\n-----------------------------\n--  Skum  --\n-----------------------------\nL = DBM:GetModLocalization(478)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Skum\"\n})\n\n-----------------------------\n--  Lord Serpentis  --\n-----------------------------\nL = DBM:GetModLocalization(479)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Seigneur Serpentis\"\n})\n\n-----------------------------\n--  Verdan the Everliving  --\n-----------------------------\nL = DBM:GetModLocalization(480)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Verdan l'Immortel\"\n})\n\n-----------------------------\n--  Mutanus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(481)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mutanus le Dévoreur\"\n})\n\n-----------------------------\n--  Deviate Faerie Dragon  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeviateFaerie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Dragon féérique déviant\"\n})\n\n-------------------------\n--  Zul'Farrak 241J/209M (14L/20C)  --\n-----------------------------\n--  Ghaz'rilla  --\n-----------------------------\nL = DBM:GetModLocalization(483)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gahz'rilla\"\n})\n\n-----------------------------\n--  Antu'sul  --\n-----------------------------\nL = DBM:GetModLocalization(484)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Antu'sul\"\n})\n\n-----------------------------\n--  Theka the Martyr  --\n-----------------------------\nL = DBM:GetModLocalization(485)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Theka le Martyr\"\n})\n\n-----------------------------\n--  Witch Doctor Zum'rah  --\n-----------------------------\nL = DBM:GetModLocalization(486)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Sorcier-docteur Zum'rah\"\n})\n\n-----------------------------\n--  Hydromancer Velrath (not in Dungeon Journal)  --\n-----------------------------\nL = DBM:GetModLocalization(\"HydromancerVelrath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hydromancienne Velratha\"\n})\n\n-----------------------------\n--  Nekrum & Sezz'ziz  --\n-----------------------------\nL = DBM:GetModLocalization(487)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Nekrum et Sezz'ziz\"\n})\n\n-----------------------------\n--  Chief Ukorz Sandscalp  --\n-----------------------------\nL = DBM:GetModLocalization(489)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Chef Ukorz Scalpessable\"\n})\n"
  },
  {
    "path": "DBM-Party-Classic/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n-------------------------\n--  Blackfathom Deeps (1)  --\n-----------------------------\n--  Ghamoo-Ra  --\n-----------------------------\nL = DBM:GetModLocalization(\"GhamooRa\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"가무라\"\n})\n\n-----------------------------\n--  Lady Sarevess  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadySerevess\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"여왕 사레베스\"\n})\n\n-----------------------------\n--  Gelihast  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gelihast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"겔리하스트\"\n})\n\n-----------------------------\n--  Old Serra'kis  --\n-----------------------------\nL = DBM:GetModLocalization(\"OldSerrakis\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"늙은 세라키스\"\n})\n\n-----------------------------\n--  Twilight Lord Kelris  --\n-----------------------------\nL = DBM:GetModLocalization(\"TwilightLordKelris\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"황혼의 군주 켈리스\"\n})\n\n-----------------------------\n--  Aku'mai  --\n-----------------------------\nL = DBM:GetModLocalization(\"Akumai\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"아쿠마이\"\n})\n\n-------------------------\n--  Blackrock Depths-228J/230M (2)  --\n-----------------------------\n--  High Interrogator Gerstahn  --\n-----------------------------\nL = DBM:GetModLocalization(369)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"대심문관 게르스탄\"\n})\n\n-----------------------------\n--  Lord Roccor  --\n-----------------------------\nL = DBM:GetModLocalization(370)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"불의 군주 록코르\"\n})\n\n-----------------------------\n--  Houndmaster Grebmar  --\n-----------------------------\nL = DBM:GetModLocalization(371)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"사냥개조련사 그렙마르\"\n})\n\n-----------------------------\n--  Ring of Law (High Justice Grimstone)  --\n-----------------------------\nL = DBM:GetModLocalization(372)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"법의 심판장\"\n})\n\n-----------------------------\n--  Pyromancer Loregrain  --\n-----------------------------\nL = DBM:GetModLocalization(373)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"화염술사 로어그레인\"\n})\n\n-----------------------------\n--  Lord Incendius  --\n-----------------------------\nL = DBM:GetModLocalization(374)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"불의 군주 인센디우스\"\n})\n\n-----------------------------\n--  Warden Stilgiss  --\n-----------------------------\nL = DBM:GetModLocalization(375)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"문지기 스틸기스\"\n})\n\n-----------------------------\n--  Fineous Darkvire  --\n-----------------------------\nL = DBM:GetModLocalization(376)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"파이너스 다크바이어\"\n})\n\n-----------------------------\n--  Bael'Gar  --\n-----------------------------\nL = DBM:GetModLocalization(377)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"밸가르\"\n})\n\n-----------------------------\n--  General Angerforge  --\n-----------------------------\nL = DBM:GetModLocalization(378)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"사령관 앵거포지\"\n})\n\n-----------------------------\n--  Golem Lord Argelmach  --\n-----------------------------\nL = DBM:GetModLocalization(379)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"골렘 군주 아젤마크\"\n})\n\n-----------------------------\n--  Hurley Blackbreath  --\n-----------------------------\nL = DBM:GetModLocalization(380)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"헐레이 블랙브레스\"\n})\n\n-----------------------------\n--  Phalanx  --\n-----------------------------\nL = DBM:GetModLocalization(381)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"팔랑크스\"\n})\n\n-----------------------------\n--  Plugger Spazzring  --\n-----------------------------\nL = DBM:GetModLocalization(383)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"플러거 스패즈링\"\n})\n\n-----------------------------\n--  Ambassador Flamelash  --\n-----------------------------\nL = DBM:GetModLocalization(384)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"사자 화염채찍\"\n})\n\n-----------------------------\n--  The Seven  --\n-----------------------------\nL = DBM:GetModLocalization(385)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"일곱 현자\"\n})\n\n-----------------------------\n--  Magmus  --\n-----------------------------\nL = DBM:GetModLocalization(386)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"마그무스\"\n})\n\n-----------------------------\n--  Emperor Dagran Thaurissan  --\n-----------------------------\nL = DBM:GetModLocalization(387)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"제왕 다그란 타우릿산\"\n})\n\n-------------------------\n--  Lower Blackrock Spire-229J/229M (6)  --\n-----------------------------\n--  Highlord Omokk  --\n-----------------------------\nL = DBM:GetModLocalization(388)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"대영주 오모크\"\n})\n\n-----------------------------\n--  Shadow Hunter Vosh'gajin  --\n-----------------------------\nL = DBM:GetModLocalization(389)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"어둠사냥꾼 보쉬가진\"\n})\n\n-----------------------------\n--  War Master Voone  --\n-----------------------------\nL = DBM:GetModLocalization(390)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"대장군 부네\"\n})\n\n-----------------------------\n--  Mother Smolderweb  --\n-----------------------------\nL = DBM:GetModLocalization(391)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"여왕 불그물거미\"\n})\n\n-----------------------------\n--  Urok Doomhowl  --\n-----------------------------\nL = DBM:GetModLocalization(392)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"우로크 둠하울\"\n})\n\n-----------------------------\n--  Quartermaster Zigris  --\n-----------------------------\nL = DBM:GetModLocalization(393)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"병참장교 지그리스\"\n})\n\n-----------------------------\n--  Halycon  --\n-----------------------------\nL = DBM:GetModLocalization(394)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"할리콘\"\n})\n\n-----------------------------\n--  Gizrul  --\n-----------------------------\nL = DBM:GetModLocalization(395)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"기즈룰\"\n})\n\n-----------------------------\n--  Overlord Wyrmthalak  --\n-----------------------------\nL = DBM:GetModLocalization(396)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"대군주 웜타라크\"\n})\n\n-------------------------\n--  Upper Blackrock Spire-229J/229M (4C)  --\n-----------------------------\n--  Pyroguard Emberseer  --\n-----------------------------\nL = DBM:GetModLocalization(\"PyroguardEmberseer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"불의수호자 엠버시어\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"%s|1이;가; 힘을 되찾기 시작합니다!\"\n})\n\n-----------------------------\n--  Solakar Flamewreath  --\n-----------------------------\nL = DBM:GetModLocalization(\"SolakarFlamewreath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"화염고리 솔라카르\"\n})\n\n-----------------------------\n--  Goraluk Anvilcrack  --\n-----------------------------\nL = DBM:GetModLocalization(\"GoralukAnvilcrack\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"고랄루크 앤빌크랙\"\n})\n\n-----------------------------\n--  Jed Runewatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"JedRunewatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"제드 룬와처\"\n})\n\n-----------------------------\n--  Warchief Rend Blackhand  --\n-----------------------------\nL = DBM:GetModLocalization(\"WarchiefRendBlackhand\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"대족장 렌드 블랙핸드\"\n})\n\n-----------------------------\n--  The Beast  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheBeast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"괴수\"\n})\n\n-----------------------------\n--  General Drakkisath  --\n-----------------------------\nL = DBM:GetModLocalization(\"GeneralDrakkisath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"사령관 드라키사스\"\n})\n\n-------------------------\n--  Deadmines (3L/5C)  --\n-----------------------------\n--  Rhahk'Zor  --\n-----------------------------\nL = DBM:GetModLocalization(\"RhahkZor\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"라크조르\"\n})\n\n-----------------------------\n--  Miner Johnson  --\n-----------------------------\nL = DBM:GetModLocalization(\"MinerJohnson\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"광부 존슨\"\n})\n\n-----------------------------\n--  Sneed's Shredder  --\n-----------------------------\nL = DBM:GetModLocalization(\"SneedsShredder\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"스니드의 벌목기\"\n})\n\n-----------------------------\n--  Gilnid  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gilnid\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"길니드\"\n})\n\n-----------------------------\n--  Mr. Smite  --\n-----------------------------\nL = DBM:GetModLocalization(\"MrSmite\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"미스터 스마이트\"\n})\n\n-----------------------------\n--  Captain Greenskin  --\n-----------------------------\nL = DBM:GetModLocalization(\"CaptainGreenskin\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"선장 그린스킨\"\n})\n\n-----------------------------\n--  Edwin Van Cleef  --\n-----------------------------\nL = DBM:GetModLocalization(\"EdwinVanCleef\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"에드윈 밴클리프\"\n})\n\n-----------------------------\n--  Cookie  --\n-----------------------------\nL = DBM:GetModLocalization(\"Cookie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"쿠키\"\n})\n\n-------------------------\n--  Dire Maul-230J/429M (4L/6C)  --\n-----------------------------\n--  Zevrim Thornhoof  --\n-----------------------------\nL = DBM:GetModLocalization(402)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"제브림 쏜후프\"\n})\n\n-----------------------------\n--  Hydrospawn  --\n-----------------------------\nL = DBM:GetModLocalization(403)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"히드로스폰\"\n})\n\n-----------------------------\n--  Lethtendris  --\n-----------------------------\nL = DBM:GetModLocalization(404)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"레스텐드리스\"\n})\n\n-----------------------------\n--  Alzzin the Wildshaper  --\n-----------------------------\nL = DBM:GetModLocalization(405)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"칼날바람 알진\"\n})\n\n-----------------------------\n--  Tendris Warpwood  --\n-----------------------------\nL = DBM:GetModLocalization(406)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"굽이나무 텐드리스\"\n})\n\n-----------------------------\n--  Illyanna Ravenoak  --\n-----------------------------\nL = DBM:GetModLocalization(407)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"일리아나 레이븐오크\"\n})\n\n-----------------------------\n--  Magister Kalendris  --\n-----------------------------\nL = DBM:GetModLocalization(408)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"마법학자 칼렌드리스\"\n})\n\n-----------------------------\n--  Immol'thar  --\n-----------------------------\nL = DBM:GetModLocalization(409)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"이몰타르\"\n})\n\n-----------------------------\n--  Prince Tortheldrin  --\n-----------------------------\nL = DBM:GetModLocalization(410)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"왕자 토르텔드린\"\n})\n\n-----------------------------\n--  Guard Mol'dar  --\n-----------------------------\nL = DBM:GetModLocalization(411)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"경비병 몰다르\"\n})\n\n-----------------------------\n--  Stomper Kreeg  --\n-----------------------------\nL = DBM:GetModLocalization(412)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"천둥발 크리그\"\n})\n\n-----------------------------\n--  Guard Fengus  --\n-----------------------------\nL = DBM:GetModLocalization(413)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"경비병 펜구스\"\n})\n\n-----------------------------\n--  Guard Slip'kik  --\n-----------------------------\nL = DBM:GetModLocalization(414)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"경비병 슬립킥\"\n})\n\n-----------------------------\n--  Captain Kromcrush  --\n-----------------------------\nL = DBM:GetModLocalization(415)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"대장 크롬크러쉬\"\n})\n\n-----------------------------\n--  Cho'Rush the Observer  --\n-----------------------------\nL = DBM:GetModLocalization(416)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"정찰병 초루쉬\"\n})\n\nL:SetMiscLocalization({\n\tDefeat\t= \"왕이 죽었다. 오, 이제 어쩌지! 약삭빠른 미즐을 불러와! 그가 다음에 어떻게 해야 하는지 알고 있다!\"\n})\n\n-----------------------------\n--  King Gordok  --\n-----------------------------\nL = DBM:GetModLocalization(417)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"왕 고르독\"\n})\n\n-------------------------\n--  Gnomeregan-231J/90M (5L/7C)  --\n-----------------------------\n--  Grubbis  --\n-----------------------------\nL = DBM:GetModLocalization(419)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"그루비스\"\n})\n\n-----------------------------\n--  Viscous Fallout  --\n-----------------------------\nL = DBM:GetModLocalization(420)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"방사성 폐기물\"\n})\n\n-----------------------------\n--  Electrocutioner 6000  --\n-----------------------------\nL = DBM:GetModLocalization(421)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"기계화 문지기 6000\"\n})\n\n-----------------------------\n--  Crowd Pummeler 9-60  --\n-----------------------------\nL = DBM:GetModLocalization(418)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"고철 압축기 9-60\"\n})\n\n-----------------------------\n--  Mekgineer Thermaplugg  --\n-----------------------------\nL = DBM:GetModLocalization(422)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"멕기니어 텔마플러그\"\n})\n\nL:SetMiscLocalization({\n\tYellBomb\t= \"폭탄! 폭탄이 필요해! 폭탄 더 가져와!\"\n})\n\n-------------------------\n--  Maraudon-232J/349M (6L/8C)  --\n-----------------------------\n--  Noxxion  --\n-----------------------------\nL = DBM:GetModLocalization(423)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"녹시온\"\n})\n\n-----------------------------\n--  Razorlash  --\n-----------------------------\nL = DBM:GetModLocalization(424)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"칼날채찍\"\n})\n\n-----------------------------\n--  Tinkerer Gizlock  --\n-----------------------------\nL = DBM:GetModLocalization(425)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"땜장이 기즐록\"\n})\n\n-----------------------------\n--  Lord Vyletongue  --\n-----------------------------\nL = DBM:GetModLocalization(427)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"군주 바일텅\"\n})\n\n-----------------------------\n--  Celebras the Cursed  --\n-----------------------------\nL = DBM:GetModLocalization(428)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"저주받은 셀레브라스\"\n})\n\n-----------------------------\n--  Landslide  --\n-----------------------------\nL = DBM:GetModLocalization(429)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"산사태\"\n})\n\n-----------------------------\n--  Rotgrip  --\n-----------------------------\nL = DBM:GetModLocalization(430)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"썩은아귀\"\n})\n\n-----------------------------\n--  Princess Theradras  --\n-----------------------------\nL = DBM:GetModLocalization(431)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"공주 테라드라스\"\n})\n\n-------------------------\n--  Ragefire Chasm (7L/9C)  --\n-----------------------------\n--  Adarogg  --\n-----------------------------\nL = DBM:GetModLocalization(\"Oggleflint\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"오글플린트\"\n})\n\n-----------------------------\n--  Taragaman the Hungerer  --\n-----------------------------\nL = DBM:GetModLocalization(\"Taragaman\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"욕망의 타라가만\"\n})\n\n-----------------------------\n--  Jergosh the Invoker  --\n-----------------------------\nL = DBM:GetModLocalization(\"Jergosh\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"기원사 제로쉬\"\n})\n\n-----------------------------\n--  Bazzalan  --\n-----------------------------\nL = DBM:GetModLocalization(\"Bazzalan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"바잘란\"\n})\n\n-------------------------\n--  Razorfen Downs -233J/129M (8L/10C)  --\n-----------------------------\n--  Tuten'kash  --\n-----------------------------\nL = DBM:GetModLocalization(\"Tutenkash\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"투텐카쉬\"\n})\n\n-----------------------------\n--  Mordresh Fire Eye  --\n-----------------------------\nL = DBM:GetModLocalization(\"MordreshFireEye\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"불꽃눈 모드레쉬\"\n})\n\n-----------------------------\n--  Glutton  --\n-----------------------------\nL = DBM:GetModLocalization(\"Glutton\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"게걸먹보\"\n})\n\n-----------------------------\n--  Ragglesnout  --\n-----------------------------\nL = DBM:GetModLocalization(\"Ragglesnout\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"너덜주둥이\"\n})\n\n-----------------------------\n--  Amnenar the Coldbringer  --\n-----------------------------\nL = DBM:GetModLocalization(\"AmnennartheColdbringer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"혹한의 암네나르\"\n})\n\n-----------------------------\n--  Plaguemaw the Rotting  --\n-----------------------------\nL = DBM:GetModLocalization(\"PlaguemawtheRotting\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"썩어가는 역병아귀\"\n})\n\n-------------------------\n--  Razorfen Kraul -234J/47M (9L/11C)  --\n-----------------------------\n--  Roogug  --\n-----------------------------\nL = DBM:GetModLocalization(\"Roogug\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"루구그\"\n})\n\n-----------------------------\n--  Aggem Thorncurse  --\n-----------------------------\nL = DBM:GetModLocalization(\"AggemThorncurse\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"저주의가시 아겜\"\n})\n\n-----------------------------\n--  Death Speaker Jargba  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathSpeakerJargba\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"죽음의예언자 잘그바\"\n})\n\n-----------------------------\n--  Overload Ramtusk  --\n-----------------------------\nL = DBM:GetModLocalization(\"OverlordRamtusk\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"대군주 램터스크\"\n})\n\n-----------------------------\n--  Agathelos the Raging  --\n-----------------------------\nL = DBM:GetModLocalization(\"AgathelostheRaging\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"흉포한 아가테로스\"\n})\n\n-----------------------------\n--  Blind Hunter  --\n-----------------------------\nL = DBM:GetModLocalization(\"BlindHunter\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"눈먼사냥꾼\"\n})\n\n-----------------------------\n--  Earthcaller Halmgar  --\n-----------------------------\nL = DBM:GetModLocalization(\"EarthcallerHalmgar\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"대지의주술사 함가르\"\n})\n\n-----------------------------\n--  Charlga Razorflank  --\n-----------------------------\nL = DBM:GetModLocalization(\"CharlgaRazorflank\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"서슬깃 차를가\"\n})\n\n-------------------------\n--  Scarlet Monastery 189M (12C)  --\n-----------------------------\n--  Interrogator Vishas  --\n-----------------------------\nL = DBM:GetModLocalization(\"InterrogatorVishas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"심문관 비샤스\"\n})\n\n-----------------------------\n--  Bloodmage Thalnos  --\n-----------------------------\nL = DBM:GetModLocalization(\"BloodmageThalnos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"혈법사 탈노스\"\n})\n\n-----------------------------\n--  Houndmaster Loksey  --\n-----------------------------\nL = DBM:GetModLocalization(\"HoundmasterLoksey\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"사냥개조련사 록시\"\n})\n\n-----------------------------\n--  Arcanist Doan  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArcanistDoan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"신비술사 도안\"\n})\n\n-----------------------------\n--  Herod  --\n-----------------------------\nL = DBM:GetModLocalization(\"Herod\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"헤로드\"\n})\n\n-----------------------------\n--  Mograine & Whitemane  --\n-----------------------------\nL = DBM:GetModLocalization(\"Mograine_and_Whitemane\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"모그레인과 화이트메인\"\n})\n\n-----------------------------\n--  High Inquisitor Fairbanks  --\n-----------------------------\nL = DBM:GetModLocalization(\"Fairbanks\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"종교재판관 페어뱅크스\"\n})\n\n-------------------------\n--  Scholomance 289M (13C)  --\n-----------------------------\n--  Kirtonos the Herald  --\n-----------------------------\nL = DBM:GetModLocalization(\"KirtonostheHerald\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"사자 키르토노스\"\n})\n\n-----------------------------\n--  Jandice Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"JandiceBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"잔다이스 바로브\"\n})\n\n-----------------------------\n--  Rattlegore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rattlegore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"들창어금니\"\n})\n\n-----------------------------\n--  Marduk Blackpool  --\n-----------------------------\nL = DBM:GetModLocalization(\"MardukBlackpool\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"마르두크 블랙풀\"\n})\n\n-----------------------------\n--  Vectus  --\n-----------------------------\nL = DBM:GetModLocalization(\"Vectus\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"벡투스\"\n})\n\n-----------------------------\n--  Ras Frostwhisper  --\n-----------------------------\nL = DBM:GetModLocalization(\"RasFrostwhisper\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"라스 프로스트위스퍼\"\n})\n\n-----------------------------\n--  Instructor Malicia  --\n-----------------------------\nL = DBM:GetModLocalization(\"InstructorMalicia\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"조교 말리시아\"\n})\n\n-----------------------------\n--  Doctor Theolen Krastinov  --\n-----------------------------\nL = DBM:GetModLocalization(\"DoctorTheolenKrastinov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"학자 테올렌 크라스티노브\"\n})\n\n-----------------------------\n--  Lorekeeper Polkelt  --\n-----------------------------\nL = DBM:GetModLocalization(\"LorekeeperPolkelt\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"현자 폴켈트\"\n})\n\n-----------------------------\n--  The Ravenian  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheRavenian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"라베니안\"\n})\n\n-----------------------------\n--  Lord Alexei Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LordAlexeiBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"군주 알렉세이 바로브\"\n})\n\n-----------------------------\n--  Lady Illucia Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadyIlluciaBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"여군주 일루시아 바로브\"\n})\n\n-----------------------------\n--  Darkmaster Gandling  --\n-----------------------------\nL = DBM:GetModLocalization(\"DarkmasterGandling\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"암흑스승 간들링\"\n})\n\n-------------------------\n--  Shadowfang Keep 33M (14C)  --\n-----------------------------\n--  Rethilgore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rethilgore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"레실고어\"\n})\n\n-----------------------------\n--  Razorclaw the Butcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"RazorclawtheButcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"도살자 칼날발톱\"\n})\n\n-----------------------------\n--  Baron Silverlaine  --\n-----------------------------\nL = DBM:GetModLocalization(\"BaronSilverlaine\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"남작 실버레인\"\n})\n\n-----------------------------\n--  Commander Springvale  --\n-----------------------------\nL = DBM:GetModLocalization(\"CommanderSpringvale\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"사령관 스프링베일\"\n})\n\n-----------------------------\n--  Odo the Blindwatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"OdotheBlindwatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"눈먼감시자 오도\"\n})\n\n-----------------------------\n--  Deathsworn Captain  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathswornCaptain\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"죽음의 경비대장\"\n})\n\n-----------------------------\n--  Fenrus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(\"FenrustheDevourer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"파멸의 펜루스\"\n})\n\n-----------------------------\n--  Wolf Master Nandos  --\n-----------------------------\nL = DBM:GetModLocalization(\"WolfMasterNandos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"늑대왕 난도스\"\n})\n\n-----------------------------\n--  Archmage Arugal  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArchmageArugal\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"대마법사 아루갈\"\n})\n\n-------------------------\n--  Stormwind Stockade 34M (10L/15C)  --\n-----------------------------\n--  Targorr the Dread  --\n-----------------------------\nL = DBM:GetModLocalization(\"Targorr\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"흉악범 타고르\"\n})\n\n-----------------------------\n--  Kam Deepfury  --\n-----------------------------\nL = DBM:GetModLocalization(\"KamDeepfury\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"캄 딥퓨리\"\n})\n\n-----------------------------\n--  Hamhock  --\n-----------------------------\nL = DBM:GetModLocalization(\"Hamhock\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"햄혹\"\n})\n\n-----------------------------\n--  Bazil Thredd  --\n-----------------------------\nL = DBM:GetModLocalization(\"BazilThredd\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"바질 스레드\"\n})\n\n-----------------------------\n--  Dextren Ward  --\n-----------------------------\nL = DBM:GetModLocalization(\"DextrenWard\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"덱스트렌 워드\"\n})\n\n-----------------------------\n--  Bruegal Ironknuckle  --\n-----------------------------\nL = DBM:GetModLocalization(\"BruegalIronknuckle\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"브루갈 아이언너클\"\n})\n\n-------------------------\n--  Stratholme 236J/329M (10L/16C)  --\n-----------------------------\n--  Hearthsinger Forresten  --\n-----------------------------\nL = DBM:GetModLocalization(443)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"하스싱어 포레스턴\"\n})\n\n-----------------------------\n--  Timmy the Cruel  --\n-----------------------------\nL = DBM:GetModLocalization(445)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"잔혹한 티미\"\n})\n\n-----------------------------\n--  Malor the Zealous  --\n-----------------------------\nL = DBM:GetModLocalization(749)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"광신자 말로\"\n})\n\n-----------------------------\n--  Cannon Master Willey  --\n-----------------------------\nL = DBM:GetModLocalization(446)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"포병대장 윌리\"\n})\n\n-----------------------------\n--  Archivist Galford  --\n-----------------------------\nL = DBM:GetModLocalization(448)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"기록관 갈포드\"\n})\n\n-----------------------------\n--  Balnazzar  --\n-----------------------------\nL = DBM:GetModLocalization(449)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"발나자르\"\n})\n\n-----------------------------\n--  The Unforgiven  --\n-----------------------------\nL = DBM:GetModLocalization(450)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"용서받지 못한 자\"\n})\n\n-----------------------------\n--  Baroness Anastari  --\n-----------------------------\nL = DBM:GetModLocalization(451)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"남작부인 아나스타리\"\n})\n\n-----------------------------\n--  Nerub'enkan  --\n-----------------------------\nL = DBM:GetModLocalization(452)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"네룹엔칸\"\n})\n\n-----------------------------\n--  Maleki the Pallid  --\n-----------------------------\nL = DBM:GetModLocalization(453)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"냉혈한 말레키\"\n})\n\n-----------------------------\n--  Magistrate Barthilas  --\n-----------------------------\nL = DBM:GetModLocalization(454)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"집정관 바실라스\"\n})\n\n-----------------------------\n--  Ramstein the Gorger  --\n-----------------------------\nL = DBM:GetModLocalization(455)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"먹보 람스타인\"\n})\n\nL:SetTimerLocalization({\n\tTimerGuards\t= \"보초병 등장\"\n})\n\nL:SetOptionLocalization({\n\tTimerGuards\t= \"보스를 쓰러트리면 검은호위대 보초병 등장 타이머 바 표시\"\n})\n\n-----------------------------\n--  Baron Rivendare  --\n-----------------------------\nL = DBM:GetModLocalization(456)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"남작 리븐데어\"\n})\n\n-------------------------\n--  Sunken Temple 237J/109M (11L/17C)  --\n-----------------------------\n--  Avatar of Hakkar  --\n-----------------------------\nL = DBM:GetModLocalization(457)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"학카르의 화신\"\n})\n\n-----------------------------\n--  Jammal'an the Prophet  --\n-----------------------------\nL = DBM:GetModLocalization(458)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"예언자 잠말란\"\n})\n\n----------------------------------------------\n--\tWardens of the Dream\t\t\t\t\t--\n--\t(Dreamscythe, Weaver, Morphaz, Hazzas)\t--\n----------------------------------------------\nL = DBM:GetModLocalization(\"Dreamscythe\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"드림사이드\"\n})\n\nL = DBM:GetModLocalization(\"Weaver\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"위버\"\n})\n\nL = DBM:GetModLocalization(\"Morphaz\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"몰파즈\"\n})\n\nL = DBM:GetModLocalization(\"Hazzas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"하자스\"\n})\n\n-----------------------------\n--  Shade of Eranikus  --\n-----------------------------\nL = DBM:GetModLocalization(463)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"에라니쿠스의 사령\"\n})\n\n-------------------------\n--  Uldaman 229J/70M (12L/18C)  --\n-----------------------------\n--  Revelosh  --\n-----------------------------\nL = DBM:GetModLocalization(467)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"레벨로쉬\"\n})\n\n-----------------------------\n--  The Lost Dwarves  --\n-----------------------------\nL = DBM:GetModLocalization(468)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"길 잃은 드워프\"\n})\n\n-----------------------------\n--  Ironaya  --\n-----------------------------\nL = DBM:GetModLocalization(469)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"아이로나야\"\n})\n\n-----------------------------\n--  Obsidian Sentinel  --\n-----------------------------\nL = DBM:GetModLocalization(748)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"흑요석 파수꾼\"\n})\n\n-----------------------------\n--  Ancient Stone Keeper  --\n-----------------------------\nL = DBM:GetModLocalization(470)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"고대 바위 문지기\"\n})\n\n-----------------------------\n--  Galgann Firehammer  --\n-----------------------------\nL = DBM:GetModLocalization(471)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"갈간 파이어해머\"\n})\n\n-----------------------------\n--  Grimlok  --\n-----------------------------\nL = DBM:GetModLocalization(472)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"그림로크\"\n})\n\n-----------------------------\n--  Archaedas  --\n-----------------------------\nL = DBM:GetModLocalization(473)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"아카에다스\"\n})\n\n-------------------------\n--  Wailing Caverns 240J/43M (13L/19C)  --\n-----------------------------\n--  Lady Anacondra  --\n-----------------------------\nL = DBM:GetModLocalization(474)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"여군주 아나콘드라\"\n})\n\n-----------------------------\n--  Lord Pythas  --\n-----------------------------\nL = DBM:GetModLocalization(476)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"군주 피타스\"\n})\n\n-----------------------------\n--  Lord Cobrahn  --\n-----------------------------\nL = DBM:GetModLocalization(475)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"군주 코브란\"\n})\n\n-----------------------------\n--  Kresh  --\n-----------------------------\nL = DBM:GetModLocalization(477)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"크레쉬\"\n})\n\n-----------------------------\n--  Skum  --\n-----------------------------\nL = DBM:GetModLocalization(478)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"스컴\"\n})\n\n-----------------------------\n--  Lord Serpentis  --\n-----------------------------\nL = DBM:GetModLocalization(479)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"군주 서펜티스\"\n})\n\n-----------------------------\n--  Verdan the Everliving  --\n-----------------------------\nL = DBM:GetModLocalization(480)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"영생의 베르단\"\n})\n\n-----------------------------\n--  Mutanus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(481)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"걸신들린 무타누스\"\n})\n\n-----------------------------\n--  Deviate Faerie Dragon  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeviateFaerie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"돌연변이 요정용\"\n})\n\n-------------------------\n--  Zul'Farrak 241J/209M (14L/20C)  --\n-----------------------------\n--  Ghaz'rilla  --\n-----------------------------\nL = DBM:GetModLocalization(483)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"가즈릴라\"\n})\n\n-----------------------------\n--  Antu'sul  --\n-----------------------------\nL = DBM:GetModLocalization(484)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"안투술\"\n})\n\n-----------------------------\n--  Theka the Martyr  --\n-----------------------------\nL = DBM:GetModLocalization(485)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"순교자 테카\"\n})\n\n-----------------------------\n--  Witch Doctor Zum'rah  --\n-----------------------------\nL = DBM:GetModLocalization(486)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"의술사 줌라\"\n})\n\n-----------------------------\n--  Hydromancer Velrath (not in Dungeon Journal)  --\n-----------------------------\nL = DBM:GetModLocalization(\"HydromancerVelrath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"유체술사 벨라타\"\n})\n\n-----------------------------\n--  Nekrum & Sezz'ziz  --\n-----------------------------\nL = DBM:GetModLocalization(487)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"네크룸과 세즈지즈\"\n})\n\n-----------------------------\n--  Chief Ukorz Sandscalp  --\n-----------------------------\nL = DBM:GetModLocalization(489)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"족장 우르코즈 샌드스칼프\"\n})\n"
  },
  {
    "path": "DBM-Party-Classic/localization.mx.lua",
    "content": "if GetLocale() ~= \"esMX\" then return end\nlocal L\n\n--------------------------------\n-- Blackfathom Deeps (1) --\n--------------------------------\n--  Ghamoo-Ra  --\n-----------------------------\nL = DBM:GetModLocalization(\"GhamooRa\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ghamoo-Ra\"\n})\n\n-----------------------------\n--  Lady Sarevess  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadySerevess\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lady Sarevess\"\n})\n\n-----------------------------\n--  Gelihast  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gelihast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gelihast\"\n})\n\n-----------------------------\n--  Old Serra'kis  --\n-----------------------------\nL = DBM:GetModLocalization(\"OldSerrakis\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Viejo Serra'kis\"\n})\n\n-----------------------------\n--  Twilight Lord Kelris  --\n-----------------------------\nL = DBM:GetModLocalization(\"TwilightLordKelris\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Señor Crepuscular Kelris\"\n})\n\n-----------------------------\n--  Aku'mai  --\n-----------------------------\nL = DBM:GetModLocalization(\"Akumai\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Aku'mai\"\n})\n\n-------------------------------------------------\n-- Blackrock Depths - 228J/230M (2) --\n-------------------------------------------------\n-- High Interrogator Gerstahn --\n---------------------------------\nL = DBM:GetModLocalization(369)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Alta interrogadora Gerstahn\"\n})\n\n-----------------\n-- Lord Roccor --\n-----------------\nL = DBM:GetModLocalization(370)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Roccor\"\n})\n\n------------------------------\n-- Hound Master Grebmar --\n------------------------------\nL = DBM:GetModLocalization(371)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maestro de canes Grebmar\"\n})\n\n---------------------------------------------------------\n-- Ring of Law --\n---------------------------------------------------------\nL = DBM:GetModLocalization(372)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Círculo de la Ley\"\n})\n\n---------------------------------\n-- Pyromancer Loregrain --\n---------------------------------\nL = DBM:GetModLocalization(373)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Piromántico Fruto del Saber\"\n})\n\n--------------------\n-- Lord Incendius --\n--------------------\nL = DBM:GetModLocalization(374)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Incendius\"\n})\n\n--------------------------\n-- Warden Stilgiss --\n--------------------------\nL = DBM:GetModLocalization(375)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Depositario Stilgiss\"\n})\n\n----------------------\n-- Fineous Darkvire --\n----------------------\nL = DBM:GetModLocalization(376)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Finoso Virunegro\"\n})\n\n--------------\n-- Bael'Gar --\n--------------\nL = DBM:GetModLocalization(377)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bael'Gar\"\n})\n\n--------------------------\n-- General Angerforge --\n--------------------------\nL = DBM:GetModLocalization(378)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"General Forjainquina\"\n})\n\n---------------------------\n-- Golem Lord Argelmach --\n---------------------------\nL = DBM:GetModLocalization(379)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Señor Gólem Argelmach\"\n})\n\n----------------------\n-- Hurley Blackbreath --\n----------------------\nL = DBM:GetModLocalization(380)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hurley Negrálito\"\n})\n\n-------------\n-- Phalanx --\n-------------\nL = DBM:GetModLocalization(381)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Falange\"\n})\n\n-----------------------\n-- Plugger Spazzring --\n-----------------------\nL = DBM:GetModLocalization(383)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Plugger Aropatoso\"\n})\n\n-------------------------\n-- Ambassador Flamelash --\n-------------------------\nL = DBM:GetModLocalization(384)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Embajador Latifuego\"\n})\n\n---------------\n-- The Seven --\n---------------\nL = DBM:GetModLocalization(385)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Los Siete\"\n})\n\n------------\n-- Magmus --\n------------\nL = DBM:GetModLocalization(386)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Magmus\"\n})\n\n---------------------------------\n-- Emperor Dagran Thaurissan --\n---------------------------------\nL = DBM:GetModLocalization(387)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Emperador Dagran Thaurissan\"\n})\n\n-------------------------\n--  Lower Blackrock Spire-229J/229M (6L/3C)  --\n--  Highlord Omokk  --\n-----------------------------\nL = DBM:GetModLocalization(388)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Alto señor Omokk\"\n})\n\n-----------------------------\n--  Shadow Hunter Vosh'gajin  --\n-----------------------------\nL = DBM:GetModLocalization(389)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cazadora de las Sombras Vosh'gajin\"\n})\n\n-----------------------------\n--  War Master Voone  --\n-----------------------------\nL = DBM:GetModLocalization(390)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maestro de guerra Voone\"\n})\n\n-----------------------------\n--  Mother Smolderweb  --\n-----------------------------\nL = DBM:GetModLocalization(391)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Madre Telabrasada\"\n})\n\n-----------------------------\n--  Urok Doomhowl  --\n-----------------------------\nL = DBM:GetModLocalization(392)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Urok Aullasino\"\n})\n\n-----------------------------\n--  Quartermaster Zigris  --\n-----------------------------\nL = DBM:GetModLocalization(393)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Intendente Zigris\"\n})\n\n-----------------------------\n--  Halycon  --\n-----------------------------\nL = DBM:GetModLocalization(394)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Halycon\"\n})\n\n-----------------------------\n--  Gizrul  --\n-----------------------------\nL = DBM:GetModLocalization(395)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gizrul el Esclavista\"\n})\n\n-----------------------------\n--  Overlord Wyrmthalak  --\n-----------------------------\nL = DBM:GetModLocalization(396)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Señor supremo Vermiothalak\"\n})\n\n-------------------------\n--  Upper Blackrock Spire-229J/229M (4C)  --\n-----------------------------\n--  Pyroguard Emberseer  --\n-----------------------------\nL = DBM:GetModLocalization(\"PyroguardEmberseer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Piroguardia Brasadivino\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"¡%s comienza a recuperar la fuerza!\"\n})\n\n-----------------------------\n--  Solakar Flamewreath  --\n-----------------------------\nL = DBM:GetModLocalization(\"SolakarFlamewreath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Solakar Corona de Fuego\"\n})\n\n-----------------------------\n--  Goraluk Anvilcrack  --\n-----------------------------\nL = DBM:GetModLocalization(\"GoralukAnvilcrack\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Goraluk Yunquegrieta\"\n})\n\n-----------------------------\n--  Jed Runewatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"JedRunewatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jed Vigía de las Runas\"\n})\n\n-----------------------------\n--  Warchief Rend Blackhand  --\n-----------------------------\nL = DBM:GetModLocalization(\"WarchiefRendBlackhand\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jefe de Guerra Rend Puño Negro\"\n})\n\n-----------------------------\n--  The Beast  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheBeast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"La Bestia\"\n})\n\n-----------------------------\n--  General Drakkisath  --\n-----------------------------\nL = DBM:GetModLocalization(\"GeneralDrakkisath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"General Drakkisath\"\n})\n\n-------------------------\n--  Deadmines (3L/5C)  --\n-----------------------------\n--  Rhahk'Zor  --\n-----------------------------\nL = DBM:GetModLocalization(\"RhahkZor\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rhahk'Zor\"\n})\n\n-----------------------------\n--  Miner Johnson  --\n-----------------------------\nL = DBM:GetModLocalization(\"MinerJohnson\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Minero Johnson\"\n})\n\n-----------------------------\n--  Sneed's Shredder  --\n-----------------------------\nL = DBM:GetModLocalization(\"SneedsShredder\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Trituradora de Sneed\"\n})\n\n-----------------------------\n--  Gilnid  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gilnid\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gilnid\"\n})\n\n-----------------------------\n--  Mr. Smite  --\n-----------------------------\nL = DBM:GetModLocalization(\"MrSmite\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Don Mamporro\"\n})\n\n-----------------------------\n--  Captain Greenskin  --\n-----------------------------\nL = DBM:GetModLocalization(\"CaptainGreenskin\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Capitán Verdetez\"\n})\n\n-----------------------------\n--  Edwin Van Cleef  --\n-----------------------------\nL = DBM:GetModLocalization(\"EdwinVanCleef\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Edwin VanCleef\"\n})\n\n-----------------------------\n--  Cookie  --\n-----------------------------\nL = DBM:GetModLocalization(\"Cookie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cocinitas\"\n})\n\n--------------------------------\n-- Dire Maul - 230J/429M (3) --\n--------------------------------\n-- Zevrim Thornhoof --\n--------------------------\nL = DBM:GetModLocalization(402)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Zevrim Pezuñahendida\"\n})\n\n------------------\n-- Hydrospawn --\n------------------\nL = DBM:GetModLocalization(403)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hidromilecio\"\n})\n\n-----------------\n-- Lethtendris --\n-----------------\nL = DBM:GetModLocalization(404)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lethtendris\"\n})\n\n--------------------------\n-- Alzzin the Wildshaper --\n--------------------------\nL = DBM:GetModLocalization(405)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Alzzin el Formaferal\"\n})\n\n--------------------\n-- Tendris Warpwood --\n--------------------\nL = DBM:GetModLocalization(406)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tendris Alabeo\"\n})\n\n--------------------------\n-- Illyanna Ravenoak --\n--------------------------\nL = DBM:GetModLocalization(407)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Illyanna Roblecuervo\"\n})\n\n------------------------\n-- Magister Kalendris --\n------------------------\nL = DBM:GetModLocalization(408)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Magister Kalendris\"\n})\n\n----------------\n-- Immol'thar --\n----------------\nL = DBM:GetModLocalization(409)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Immol'thar\"\n})\n\n--------------------------\n-- Prince Tortheldrin --\n--------------------------\nL = DBM:GetModLocalization(410)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Príncipe Tortheldrin\"\n})\n\n---------------------\n-- Guard Mol'dar --\n---------------------\nL = DBM:GetModLocalization(411)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Guardia Mol'dar\"\n})\n\n----------------------\n-- Stomper Kreeg --\n----------------------\nL = DBM:GetModLocalization(412)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Vapuleador Kreeg\"\n})\n\n--------------------\n-- Guard Fengus --\n--------------------\nL = DBM:GetModLocalization(413)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Guardia Fengus\"\n})\n\n----------------------\n-- Guard Slip'kik --\n----------------------\nL = DBM:GetModLocalization(414)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Guardia Slip'kik\"\n})\n\n-----------------------\n-- Captain Kromcrush --\n-----------------------\nL = DBM:GetModLocalization(415)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Capitán Kromcrush\"\n})\n\n----------------------------\n-- Cho'Rush the Observer --\n----------------------------\nL = DBM:GetModLocalization(416)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cho'Rush el Observador\"\n})\n\n----------------\n-- King Gordok --\n----------------\nL = DBM:GetModLocalization(417)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rey Gordok\"\n})\n\n-------------------------\n--  Gnomeregan-231J/90M (5L/7C)  --\n-----------------------------\n--  Grubbis  --\n-----------------------------\nL = DBM:GetModLocalization(419)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grubbis\"\n})\n\n-----------------------------\n--  Viscous Fallout  --\n-----------------------------\nL = DBM:GetModLocalization(420)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Radiactivo viscoso\"\n})\n\n-----------------------------\n--  Electrocutioner 6000  --\n-----------------------------\nL = DBM:GetModLocalization(421)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Electrocutor 6000\"\n})\n\n-----------------------------\n--  Crowd Pummeler 9-60  --\n-----------------------------\nL = DBM:GetModLocalization(418)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Golpeamasa 9-60\"\n})\n\n-----------------------------\n--  Mekgineer Thermaplugg  --\n-----------------------------\nL = DBM:GetModLocalization(422)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mekigeniero Termochufe\"\n})\n\nL:SetMiscLocalization({\n\tYellBomb\t= \"¡Explosiones! ¡MÁS explosiones! ¡Tengo que provocar más explosiones!\"\n})\n\n-------------------------\n--  Maraudon-232J/349M (6L/8C)  --\n-----------------------------\n--  Noxxion  --\n-----------------------------\nL = DBM:GetModLocalization(423)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Noxxion\"\n})\n\n-----------------------------\n--  Razorlash  --\n-----------------------------\nL = DBM:GetModLocalization(424)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Latisable\"\n})\n\n-----------------------------\n--  Tinkerer Gizlock  --\n-----------------------------\nL = DBM:GetModLocalization(425)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Manitas Gizlock\"\n})\n\n-----------------------------\n--  Lord Vyletongue  --\n-----------------------------\nL = DBM:GetModLocalization(427)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Lenguavil\"\n})\n\n-----------------------------\n--  Celebras the Cursed  --\n-----------------------------\nL = DBM:GetModLocalization(428)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Celebras el Maldito\"\n})\n\n-----------------------------\n--  Landslide  --\n-----------------------------\nL = DBM:GetModLocalization(429)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Derrumblo\"\n})\n\n-----------------------------\n--  Rotgrip  --\n-----------------------------\nL = DBM:GetModLocalization(430)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Escamapodrida\"\n})\n\n-----------------------------\n--  Princess Theradras  --\n-----------------------------\nL = DBM:GetModLocalization(431)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Princesa Theradras\"\n})\n\n-------------------------\n--  Ragefire Chasm (7L/9C)  --\n-----------------------------\n--  Oggleflint  --\n-----------------------------\nL = DBM:GetModLocalization(\"Oggleflint\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ogglesílex\"\n})\n\n-----------------------------\n--  Taragaman the Hungerer  --\n-----------------------------\nL = DBM:GetModLocalization(\"Taragaman\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Taragaman el Hambriento\"\n})\n\n-----------------------------\n--  Jergosh the Invoker  --\n-----------------------------\nL = DBM:GetModLocalization(\"Jergosh\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jergosh el Convocador\"\n})\n\n-----------------------------\n--  Bazzalan  --\n-----------------------------\nL = DBM:GetModLocalization(\"Bazzalan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bazzalan\"\n})\n\n-------------------------\n--  Razorfen Downs -233J/129M (8L/10C)  --\n-----------------------------\n--  Tuten'kash  --\n-----------------------------\nL = DBM:GetModLocalization(\"Tutenkash\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tuten'kash\"\n})\n\n-----------------------------\n--  Mordresh Fire Eye  --\n-----------------------------\nL = DBM:GetModLocalization(\"MordreshFireEye\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mordresh Ojo de Fuego\"\n})\n\n-----------------------------\n--  Glutton  --\n-----------------------------\nL = DBM:GetModLocalization(\"Glutton\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Glotón\"\n})\n\n-----------------------------\n--  Ragglesnout  --\n-----------------------------\nL = DBM:GetModLocalization(\"Ragglesnout\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Morrandrajos\"\n})\n\n-----------------------------\n--  Amnenar the Coldbringer  --\n-----------------------------\nL = DBM:GetModLocalization(\"AmnennartheColdbringer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Amnennar el Gélido\"\n})\n\n-----------------------------\n--  Plaguemaw the Rotting  --\n-----------------------------\nL = DBM:GetModLocalization(\"PlaguemawtheRotting\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Faucepeste el Podrido\"\n})\n\n-------------------------\n--  Razorfen Kraul -234J/47M (9L/11C)  --\n-----------------------------\n--  Roogug  --\n-----------------------------\nL = DBM:GetModLocalization(\"Roogug\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Roogug\"\n})\n\n-----------------------------\n--  Aggem Thorncurse  --\n-----------------------------\nL = DBM:GetModLocalization(\"AggemThorncurse\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Aggem Malaespina\"\n})\n\n-----------------------------\n--  Death Speaker Jargba  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathSpeakerJargba\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Portavoz de la muerte Jargba\"\n})\n\n-----------------------------\n--  Overload Ramtusk  --\n-----------------------------\nL = DBM:GetModLocalization(\"OverlordRamtusk\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Señor supremo Colmicarnero\"\n})\n\n-----------------------------\n--  Agathelos the Raging  --\n-----------------------------\nL = DBM:GetModLocalization(\"AgathelostheRaging\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Agathelos el Furioso\"\n})\n\n-----------------------------\n--  Blind Hunter  --\n-----------------------------\nL = DBM:GetModLocalization(\"BlindHunter\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cazador ciego\"\n})\n\n-----------------------------\n--  Earthcaller Halmgar  --\n-----------------------------\nL = DBM:GetModLocalization(\"EarthcallerHalmgar\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Clamatierras Halmgar\"\n})\n\n-----------------------------\n--  Charlga Razorflank  --\n-----------------------------\nL = DBM:GetModLocalization(\"CharlgaRazorflank\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Charlga Filonavaja\"\n})\n\n-------------------------\n--  Scarlet Monastery 189M (12C)  --\n-----------------------------\n--  Interrogator Vishas  --\n-----------------------------\nL = DBM:GetModLocalization(\"InterrogatorVishas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Interrogador Vishas\"\n})\n\n-----------------------------\n--  Bloodmage Thalnos  --\n-----------------------------\nL = DBM:GetModLocalization(\"BloodmageThalnos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mago sangriento Thalnos\"\n})\n\n-----------------------------\n--  Houndmaster Loksey  --\n-----------------------------\nL = DBM:GetModLocalization(\"HoundmasterLoksey\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maestro de canes Loksey\"\n})\n\n-----------------------------\n--  Arcanist Doan  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArcanistDoan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Arcanista Doan\"\n})\n\n-----------------------------\n--  Herod  --\n-----------------------------\nL = DBM:GetModLocalization(\"Herod\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Herod\"\n})\n\n-----------------------------\n--  Mograine & Whitemane  --\n-----------------------------\nL = DBM:GetModLocalization(\"Mograine_and_Whitemane\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mograine y Melenablanca\"\n})\n\n-----------------------------\n--  High Inquisitor Fairbanks  --\n-----------------------------\nL = DBM:GetModLocalization(\"Fairbanks\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Alto inquisidor Ribalimpia\"\n})\n\n-------------------------\n--  Scholomance 289M (13C)  --\n-----------------------------\n--  Kirtonos the Herald  --\n-----------------------------\nL = DBM:GetModLocalization(\"KirtonostheHerald\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kirtonos el Heraldo\"\n})\n\n-----------------------------\n--  Jandice Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"JandiceBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jandice Barov\"\n})\n\n-----------------------------\n--  Rattlegore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rattlegore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Traquesangre\"\n})\n\n-----------------------------\n--  Marduk Blackpool  --\n-----------------------------\nL = DBM:GetModLocalization(\"MardukBlackpool\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Marduk Pozonegro\"\n})\n\n-----------------------------\n--  Vectus  --\n-----------------------------\nL = DBM:GetModLocalization(\"Vectus\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Vectus\"\n})\n\n-----------------------------\n--  Ras Frostwhisper  --\n-----------------------------\nL = DBM:GetModLocalization(\"RasFrostwhisper\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ras Murmuhielo\"\n})\n\n-----------------------------\n--  Instructor Malicia  --\n-----------------------------\nL = DBM:GetModLocalization(\"InstructorMalicia\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Instructora Malicia\"\n})\n\n-----------------------------\n--  Doctor Theolen Krastinov  --\n-----------------------------\nL = DBM:GetModLocalization(\"DoctorTheolenKrastinov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Doctor Theolen Krastinov\"\n})\n\n-----------------------------\n--  Lorekeeper Polkelt  --\n-----------------------------\nL = DBM:GetModLocalization(\"LorekeeperPolkelt\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Tradicionalista Polkelt\"\n})\n\n-----------------------------\n--  The Ravenian  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheRavenian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"El Devorador\"\n})\n\n-----------------------------\n--  Lord Alexei Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LordAlexeiBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Alexei Barov\"\n})\n\n-----------------------------\n--  Lady Illucia Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadyIlluciaBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lady Illucia Barov\"\n})\n\n-----------------------------\n--  Darkmaster Gandling  --\n-----------------------------\nL = DBM:GetModLocalization(\"DarkmasterGandling\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maestro oscuro Gandling\"\n})\n\n-------------------------\n--  Shadowfang Keep 33M (14C)  --\n-----------------------------\n--  Rethilgore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rethilgore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Rethilgore\"\n})\n\n-----------------------------\n--  Razorclaw the Butcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"RazorclawtheButcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Zarpador el Carnicero\"\n})\n\n-----------------------------\n--  Baron Silverlaine  --\n-----------------------------\nL = DBM:GetModLocalization(\"BaronSilverlaine\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Barón Filargenta\"\n})\n\n-----------------------------\n--  Commander Springvale  --\n-----------------------------\nL = DBM:GetModLocalization(\"CommanderSpringvale\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Comandante Vallefont\"\n})\n\n-----------------------------\n--  Odo the Blindwatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"OdotheBlindwatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Odo el Vigía Ciego\"\n})\n\n-----------------------------\n--  Deathsworn Captain  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathswornCaptain\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Capitán Juramorte\"\n})\n\n-----------------------------\n--  Fenrus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(\"FenrustheDevourer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Fenrus el Devorador\"\n})\n\n-----------------------------\n--  Wolf Master Nandos  --\n-----------------------------\nL = DBM:GetModLocalization(\"WolfMasterNandos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maestro de lobos Nandos\"\n})\n\n-----------------------------\n--  Archmage Arugal  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArchmageArugal\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Archimago Arugal\"\n})\n\n-------------------------\n--  Stormwind Stockade 34M (10L/15C)  --\n-----------------------------\n--  Targorr the Dread  --\n-----------------------------\nL = DBM:GetModLocalization(\"Targorr\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Targorr el Pavoroso\"\n})\n\n-----------------------------\n--  Kam Deepfury  --\n-----------------------------\nL = DBM:GetModLocalization(\"KamDeepfury\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kam Furiahonda\"\n})\n\n-----------------------------\n--  Hamhock  --\n-----------------------------\nL = DBM:GetModLocalization(\"Hamhock\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hamhock\"\n})\n\n-----------------------------\n--  Bazil Thredd  --\n-----------------------------\nL = DBM:GetModLocalization(\"BazilThredd\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bazil Thredd\"\n})\n\n-----------------------------\n--  Dextren Ward  --\n-----------------------------\nL = DBM:GetModLocalization(\"DextrenWard\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Dextren Ward\"\n})\n\n-----------------------------\n--  Bruegal Ironknuckle  --\n-----------------------------\nL = DBM:GetModLocalization(\"BruegalIronknuckle\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Bruegal Nudoferro\"\n})\n\n-------------------------\n--  Stratholme 236J/329M (10L/16C)  --\n-----------------------------\n--  Hearthsinger Forresten  --\n-----------------------------\nL = DBM:GetModLocalization(443)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Cantachimeneas Forresten\"\n})\n\n-----------------------------\n--  Timmy the Cruel  --\n-----------------------------\nL = DBM:GetModLocalization(445)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Timmy el Cruel\"\n})\n\n-----------------------------\n--  Malor the Zealous  --\n-----------------------------\nL = DBM:GetModLocalization(749)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Malor el Fanático\"\n})\n\n-----------------------------\n--  Cannon Master Willey  --\n-----------------------------\nL = DBM:GetModLocalization(446)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maestro cañonero Willey\"\n})\n\n-----------------------------\n--  Archivist Galford  --\n-----------------------------\nL = DBM:GetModLocalization(448)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Archivista Galford\"\n})\n\n-----------------------------\n--  Balnazzar  --\n-----------------------------\nL = DBM:GetModLocalization(449)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Balnazzar\"\n})\n\n-----------------------------\n--  The Unforgiven  --\n-----------------------------\nL = DBM:GetModLocalization(450)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"El Imperdonable\"\n})\n\n-----------------------------\n--  Baroness Anastari  --\n-----------------------------\nL = DBM:GetModLocalization(451)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Baronesa Anastari\"\n})\n\n-----------------------------\n--  Nerub'enkan  --\n-----------------------------\nL = DBM:GetModLocalization(452)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Nerub'enkan\"\n})\n\n-----------------------------\n--  Maleki the Pallid  --\n-----------------------------\nL = DBM:GetModLocalization(453)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Maleki el Pálido\"\n})\n\n-----------------------------\n--  Magistrate Barthilas  --\n-----------------------------\nL = DBM:GetModLocalization(454)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Magistrado Barthilas\"\n})\n\n-----------------------------\n--  Ramstein the Gorger  --\n-----------------------------\nL = DBM:GetModLocalization(455)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ramstein el Empachador\"\n})\n\nL:SetTimerLocalization({\n\tTimerGuards\t= \"Aparecen los guardias\"\n})\n\nL:SetOptionLocalization({\n\tTimerGuards\t= \"Después de derrotar al jefe, muestra el temporizador para la llegada de los Avizores Guardia Negra\"\n})\n\n-----------------------------\n--  Baron Rivendare  --\n-----------------------------\nL = DBM:GetModLocalization(456)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Barón Osahendido\"\n})\n\n-------------------------\n--  Sunken Temple 237J/109M (11L/17C)  --\n-----------------------------\n--  Avatar of Hakkar  --\n-----------------------------\nL = DBM:GetModLocalization(457)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Avatar de Hakkar\"\n})\n\n-----------------------------\n--  Jammal'an the Prophet  --\n-----------------------------\nL = DBM:GetModLocalization(458)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jammal'an el Profeta\"\n})\n\n----------------------------------------------\n--\tWardens of the Dream\t\t\t\t\t--\n--\t(Dreamscythe, Weaver, Morphaz, Hazzas)\t--\n----------------------------------------------\nL = DBM:GetModLocalization(\"Dreamscythe\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Segasueños\"\n})\n\nL = DBM:GetModLocalization(\"Weaver\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Sastrón\"\n})\n\nL = DBM:GetModLocalization(\"Morphaz\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Morphaz\"\n})\n\nL = DBM:GetModLocalization(\"Hazzas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hazzas\"\n})\n\n-----------------------------\n--  Shade of Eranikus  --\n-----------------------------\nL = DBM:GetModLocalization(463)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Sombra de Eranikus\"\n})\n\n-------------------------\n--  Uldaman 229J/70M (12L/18C)  --\n-----------------------------\n--  Revelosh  --\n-----------------------------\nL = DBM:GetModLocalization(467)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Revelosh\"\n})\n\n-----------------------------\n--  The Lost Dwarves  --\n-----------------------------\nL = DBM:GetModLocalization(468)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Los enanos desaparecidos\"\n})\n\n-----------------------------\n--  Ironaya  --\n-----------------------------\nL = DBM:GetModLocalization(469)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hierraya\"\n})\n\n-----------------------------\n--  Obsidian Sentinel  --\n-----------------------------\nL = DBM:GetModLocalization(748)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Centinela obsidiana\"\n})\n\n-----------------------------\n--  Ancient Stone Keeper  --\n-----------------------------\nL = DBM:GetModLocalization(470)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Vigilante de piedra anciano\"\n})\n\n-----------------------------\n--  Galgann Firehammer  --\n-----------------------------\nL = DBM:GetModLocalization(471)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Galgann Flamartillo\"\n})\n\n-----------------------------\n--  Grimlok  --\n-----------------------------\nL = DBM:GetModLocalization(472)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Grimlok\"\n})\n\n-----------------------------\n--  Archaedas  --\n-----------------------------\nL = DBM:GetModLocalization(473)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Archaedas\"\n})\n\n-------------------------\n--  Wailing Caverns 240J/43M (13L/19C)  --\n-----------------------------\n--  Lady Anacondra  --\n-----------------------------\nL = DBM:GetModLocalization(474)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lady Anacondra\"\n})\n\n-----------------------------\n--  Lord Pythas  --\n-----------------------------\nL = DBM:GetModLocalization(476)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Pythas\"\n})\n\n-----------------------------\n--  Lord Cobrahn  --\n-----------------------------\nL = DBM:GetModLocalization(475)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Cobrahn\"\n})\n\n-----------------------------\n--  Kresh  --\n-----------------------------\nL = DBM:GetModLocalization(477)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Kresh\"\n})\n\n-----------------------------\n--  Skum  --\n-----------------------------\nL = DBM:GetModLocalization(478)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Skum\"\n})\n\n-----------------------------\n--  Lord Serpentis  --\n-----------------------------\nL = DBM:GetModLocalization(479)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Lord Serpentis\"\n})\n\n-----------------------------\n--  Veran the Everliving  --\n-----------------------------\nL = DBM:GetModLocalization(480)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Verdan el Eterno\"\n})\n\n-----------------------------\n--  Mutanus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(481)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Mutanus el Devorador\"\n})\n\n-----------------------------\n--  Deviate Faerie Dragon  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeviateFaerie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Dragón feérico descarriado\"\n})\n\n-------------------------\n--  Zul'Farrak 241J/209M (14L/20C)  --\n-----------------------------\n--  Ghaz'rilla  --\n-----------------------------\nL = DBM:GetModLocalization(483)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Gahz'rilla\"\n})\n\n-----------------------------\n--  Antu'sul  --\n-----------------------------\nL = DBM:GetModLocalization(484)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Antu'sul\"\n})\n\n-----------------------------\n--  Theka the Martyr  --\n-----------------------------\nL = DBM:GetModLocalization(485)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Theka el Mártir\"\n})\n\n-----------------------------\n--  Witch Doctor Zum'rah  --\n-----------------------------\nL = DBM:GetModLocalization(486)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Médico brujo Zum'rah\"\n})\n\n-----------------------------\n--  Hydromancer Velrath (not in Dungeon Journal)  --\n-----------------------------\nL = DBM:GetModLocalization(\"HydromancerVelrath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Hidromántica Velratha\"\n})\n\n-----------------------------\n--  Nekrum & Sezz'ziz  --\n-----------------------------\nL = DBM:GetModLocalization(487)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Nekrum y Sezz'ziz\"\n})\n\n-----------------------------\n--  Chief Ukorz Sandscalp  --\n-----------------------------\nL = DBM:GetModLocalization(489)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Jefe Ukorz Cabellarena\"\n})\n"
  },
  {
    "path": "DBM-Party-Classic/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\nlocal L\n\n--------------------------------\n-- Blackfathom Deeps (1) --\n--------------------------------\n--  Ghamoo-Ra  --\n-----------------------------\nL = DBM:GetModLocalization(\"GhamooRa\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Гхаму-ра\"\n})\n\n-----------------------------\n--  Lady Sarevess  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadySerevess\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Леди Саревесс\"\n})\n\n-----------------------------\n--  Gelihast  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gelihast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Гелихаст\"\n})\n\n-----------------------------\n--  Old Serra'kis  --\n-----------------------------\nL = DBM:GetModLocalization(\"OldSerrakis\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Старина Серракис\"\n})\n\n-----------------------------\n--  Twilight Lord Kelris  --\n-----------------------------\nL = DBM:GetModLocalization(\"TwilightLordKelris\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Повелитель сумрака Келрис\"\n})\n\n-----------------------------\n--  Aku'mai  --\n-----------------------------\nL = DBM:GetModLocalization(\"Akumai\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Аку'май\"\n})\n\n-------------------------------------------------\n-- Blackrock Depths - 228J/230M (2) --\n-------------------------------------------------\n-- Alta interrogadora Gerstahn --\n---------------------------------\nL = DBM:GetModLocalization(369)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Верховный дознаватель Герштан\"\n})\n\n-----------------\n-- Lord Roccor --\n-----------------\nL = DBM:GetModLocalization(370)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Лорд Роккор\"\n})\n\n------------------------------\n-- Maestro de canes Grebmar --\n------------------------------\nL = DBM:GetModLocalization(371)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Псарь Гребмар\"\n})\n\n---------------------------------------------------------\n-- Ring of Law --\n---------------------------------------------------------\nL = DBM:GetModLocalization(372)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Зал Правосудия\"\n})\n\n---------------------------------\n-- Pyromancer Loregrain --\n---------------------------------\nL = DBM:GetModLocalization(373)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Пироман Зерно Мудрости\"\n})\n\n--------------------\n-- Lord Incendius --\n--------------------\nL = DBM:GetModLocalization(374)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Лорд Опалитель\"\n})\n\n--------------------------\n-- Warder Stilgiss --\n--------------------------\nL = DBM:GetModLocalization(375)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Тюремщик Стилгисс\"\n})\n\n----------------------\n-- Fineous Darkvire --\n----------------------\nL = DBM:GetModLocalization(376)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Точень Темнострой\"\n})\n\n--------------\n-- Bael'Gar --\n--------------\nL = DBM:GetModLocalization(377)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Бейл'Гор\"\n})\n\n--------------------------\n-- General Angerforge --\n--------------------------\nL = DBM:GetModLocalization(378)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Генерал Кузня Гнева\"\n})\n\n---------------------------\n-- Golem Lord Argelmach --\n---------------------------\nL = DBM:GetModLocalization(379)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Повелитель големов Аргелмах\"\n})\n\n----------------------\n-- Hurley Blackbreath --\n----------------------\nL = DBM:GetModLocalization(380)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Харли Пьянодых\"\n})\n\n-------------\n-- Phalanx --\n-------------\nL = DBM:GetModLocalization(381)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Фаланкс\"\n})\n\n-----------------------\n-- Plugger Spazzring --\n-----------------------\nL = DBM:GetModLocalization(383)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Штоппор Наливалс\"\n})\n\n-------------------------\n-- Ambassador Flamelash --\n-------------------------\nL = DBM:GetModLocalization(384)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Посол Огнехлыст\"\n})\n\n---------------\n-- Los siete --\n---------------\nL = DBM:GetModLocalization(385)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Гробница Семерых\"\n})\n\n------------\n-- Magmus --\n------------\nL = DBM:GetModLocalization(386)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Магмус\"\n})\n\n---------------------------------\n-- Emperador Dagran Thaurissan --\n---------------------------------\nL = DBM:GetModLocalization(387)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Император Дагран Тауриссан\"\n})\n\n-------------------------\n--  Lower Blackrock Spire-229J/229M (6L/3C)  --\n--  Highlord Omokk  --\n-----------------------------\nL = DBM:GetModLocalization(388)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Вождь Омокк\"\n})\n\n-----------------------------\n--  Shadow Hunter Vosh'gajin  --\n-----------------------------\nL = DBM:GetModLocalization(389)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Темная охотница Вос'гаджин\"\n})\n\n-----------------------------\n--  War Master Voone  --\n-----------------------------\nL = DBM:GetModLocalization(390)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Воевода Вун\"\n})\n\n-----------------------------\n--  Mother Smolderweb  --\n-----------------------------\nL = DBM:GetModLocalization(391)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Мать Дымная Паутина\"\n})\n\n-----------------------------\n--  Urok Doomhowl  --\n-----------------------------\nL = DBM:GetModLocalization(392)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Аррок Смертный Вопль\"\n})\n\n-----------------------------\n--  Quartermaster Zigris  --\n-----------------------------\nL = DBM:GetModLocalization(393)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Интендант Зигрис\"\n})\n\n-----------------------------\n--  Halycon  --\n-----------------------------\nL = DBM:GetModLocalization(394)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Халикон\"\n})\n\n-----------------------------\n--  Gizrul  --\n-----------------------------\nL = DBM:GetModLocalization(395)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Гизрул Поработитель\"\n})\n\n-----------------------------\n--  Overlord Wyrmthalak  --\n-----------------------------\nL = DBM:GetModLocalization(396)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Властитель Змейталак\"\n})\n\n-------------------------\n--  Upper Blackrock Spire-229J/229M (4C)  --\n-----------------------------\n--  Pyroguard Emberseer  --\n-----------------------------\nL = DBM:GetModLocalization(\"PyroguardEmberseer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Пиростраж Углевзор\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"%s начинает восстанавливать прежнюю силу!\"\n})\n\n-----------------------------\n--  Solakar Flamewreath  --\n-----------------------------\nL = DBM:GetModLocalization(\"SolakarFlamewreath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Солакар Пламя Гнева\"\n})\n\n-----------------------------\n--  Goraluk Anvilcrack  --\n-----------------------------\nL = DBM:GetModLocalization(\"GoralukAnvilcrack\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Горалук Треснувшая Наковальня\"\n})\n\n-----------------------------\n--  Jed Runewatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"JedRunewatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Джед Руновед\"\n})\n\n-----------------------------\n--  Warchief Rend Blackhand  --\n-----------------------------\nL = DBM:GetModLocalization(\"WarchiefRendBlackhand\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Вождь Ренд Чернорук\"\n})\n\n-----------------------------\n--  The Beast  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheBeast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Зверь\"\n})\n\n-----------------------------\n--  General Drakkisath  --\n-----------------------------\nL = DBM:GetModLocalization(\"GeneralDrakkisath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Генерал Драккисат\"\n})\n\n-------------------------\n--  Deadmines (3L/5C)  --\n-----------------------------\n--  Rhahk'Zor  --\n-----------------------------\nL = DBM:GetModLocalization(\"RhahkZor\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Рак'Зор\"\n})\n\n-----------------------------\n--  Miner Johnson  --\n-----------------------------\nL = DBM:GetModLocalization(\"MinerJohnson\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Шахтер Джонсон\"\n})\n\n-----------------------------\n--  Sneed's Shredder  --\n-----------------------------\nL = DBM:GetModLocalization(\"SneedsShredder\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Крошшер Снида\"\n})\n\n-----------------------------\n--  Gilnid  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gilnid\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Гилнид\"\n})\n\n-----------------------------\n--  Mr. Smite  --\n-----------------------------\nL = DBM:GetModLocalization(\"MrSmite\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Мистер Каюк\"\n})\n\n-----------------------------\n--  Captain Greenskin  --\n-----------------------------\nL = DBM:GetModLocalization(\"CaptainGreenskin\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Капитан Зеленямс\"\n})\n\n-----------------------------\n--  Edwin Van Cleef  --\n-----------------------------\nL = DBM:GetModLocalization(\"EdwinVanCleef\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Эдвин ван Клиф\"\n})\n\n-----------------------------\n--  Cookie  --\n-----------------------------\nL = DBM:GetModLocalization(\"Cookie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Пирожок\"\n})\n\n--------------------------------\n-- La Masacre - 230J/429M (3) --\n--------------------------------\n-- Zevrim Thornhoof --\n--------------------------\nL = DBM:GetModLocalization(402)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Зеврим Терновое Копыто\"\n})\n\n------------------\n-- Hydrospawn --\n------------------\nL = DBM:GetModLocalization(403)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Гидротварь\"\n})\n\n-----------------\n-- Lethtendris --\n-----------------\nL = DBM:GetModLocalization(404)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Лефтендрис\"\n})\n\n--------------------------\n-- Alzzin the Wildshaper --\n--------------------------\nL = DBM:GetModLocalization(405)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Алззин Перевертень\"\n})\n\n--------------------\n-- Tendris Warpwood --\n--------------------\nL = DBM:GetModLocalization(406)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Тендрис Криводрев\"\n})\n\n--------------------------\n-- Illyanna Ravenoak --\n--------------------------\nL = DBM:GetModLocalization(407)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Иллиана Воронья Ольха\"\n})\n\n------------------------\n-- Magister Kalendris --\n------------------------\nL = DBM:GetModLocalization(408)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Магистр Календрис\"\n})\n\n----------------\n-- Immol'thar --\n----------------\nL = DBM:GetModLocalization(409)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Бессмер'тер\"\n})\n\n--------------------------\n-- Prince Tortheldrin --\n--------------------------\nL = DBM:GetModLocalization(410)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Принц Тортелдрин\"\n})\n\n---------------------\n-- Guard Mol'dar --\n---------------------\nL = DBM:GetModLocalization(411)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Стражник Мол'дар\"\n})\n\n----------------------\n-- Stomper Kreeg --\n----------------------\nL = DBM:GetModLocalization(412)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Топотун Криг\"\n})\n\n--------------------\n-- Guard Fengus --\n--------------------\nL = DBM:GetModLocalization(413)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Стражник Фенгус\"\n})\n\n----------------------\n-- Guard Slip'kik --\n----------------------\nL = DBM:GetModLocalization(414)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Стражник Слип'кик\"\n})\n\n-----------------------\n-- Captain Kromcrush --\n-----------------------\nL = DBM:GetModLocalization(415)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Капитан Давигром\"\n})\n\n----------------------------\n-- Cho'Rush the Observer --\n----------------------------\nL = DBM:GetModLocalization(416)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Чо'Раш Наблюдатель\"\n})\n\nL:SetMiscLocalization({\n\tDefeat\t= \"Король мертв – О НЕТ! Зови Миззла Хитрюгу! Он знает, что делать!\"\n})\n\n----------------\n-- King Gordok --\n----------------\nL = DBM:GetModLocalization(417)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Король Гордок\"\n})\n\n-------------------------\n--  Gnomeregan-231J/90M (5L/7C)  --\n-----------------------------\n--  Grubbis  --\n-----------------------------\nL = DBM:GetModLocalization(419)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Грязнюк\"\n})\n\n-----------------------------\n--  Viscous Fallout  --\n-----------------------------\nL = DBM:GetModLocalization(420)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Липкая муть\"\n})\n\n-----------------------------\n--  Electrocutioner 6000  --\n-----------------------------\nL = DBM:GetModLocalization(421)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Электрошокер 6000\"\n})\n\n-----------------------------\n--  Crowd Pummeler 9-60  --\n-----------------------------\nL = DBM:GetModLocalization(418)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Толпогон 9-60\"\n})\n\n-----------------------------\n--  Mekgineer Thermaplugg  --\n-----------------------------\nL = DBM:GetModLocalization(422)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Мекжинер Термоштепсель\"\n})\n\nL:SetMiscLocalization({\n\tYellBomb\t= \"Взрывы! Больше взрывов! Еще больше взрывов!\"\n})\n\n-------------------------\n--  Maraudon-232J/349M (6L/8C)  --\n-----------------------------\n--  Noxxion  --\n-----------------------------\nL = DBM:GetModLocalization(423)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ноксион\"\n})\n\n-----------------------------\n--  Razorlash  --\n-----------------------------\nL = DBM:GetModLocalization(424)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Бритвохлест\"\n})\n\n-----------------------------\n--  Tinkerer Gizlock  --\n-----------------------------\nL = DBM:GetModLocalization(425)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ремонтник Гизлок\"\n})\n\n-----------------------------\n--  Lord Vyletongue  --\n-----------------------------\nL = DBM:GetModLocalization(427)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Лорд Злоязыкий\"\n})\n\n-----------------------------\n--  Celebras the Cursed  --\n-----------------------------\nL = DBM:GetModLocalization(428)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Келебрас Проклятый\"\n})\n\n-----------------------------\n--  Landslide  --\n-----------------------------\nL = DBM:GetModLocalization(429)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Сель\"\n})\n\n-----------------------------\n--  Rotgrip  --\n-----------------------------\nL = DBM:GetModLocalization(430)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Гнилопасть\"\n})\n\n-----------------------------\n--  Princess Theradras  --\n-----------------------------\nL = DBM:GetModLocalization(431)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Принцесса Терадрас\"\n})\n\n-------------------------\n--  Ragefire Chasm (7L/9C)  --\n-----------------------------\n--  Oggleflint  --\n-----------------------------\nL = DBM:GetModLocalization(\"Oggleflint\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Огглфлинт\"\n})\n\n-----------------------------\n--  Taragaman the Hungerer  --\n-----------------------------\nL = DBM:GetModLocalization(\"Taragaman\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Тарагаман Ненасытный\"\n})\n\n-----------------------------\n--  Jergosh the Invoker  --\n-----------------------------\nL = DBM:GetModLocalization(\"Jergosh\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Жергош Призыватель Духов\"\n})\n\n-----------------------------\n--  Bazzalan  --\n-----------------------------\nL = DBM:GetModLocalization(\"Bazzalan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Баззалан\"\n})\n\n-------------------------\n--  Razorfen Downs -233J/129M (8L/10C)  --\n-----------------------------\n--  Tuten'kash  --\n-----------------------------\nL = DBM:GetModLocalization(\"Tutenkash\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Тутен'каш\"\n})\n\n-----------------------------\n--  Mordresh Fire Eye  --\n-----------------------------\nL = DBM:GetModLocalization(\"MordreshFireEye\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Мордреш Огненный Глаз\"\n})\n\n-----------------------------\n--  Glutton  --\n-----------------------------\nL = DBM:GetModLocalization(\"Glutton\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Обжора\"\n})\n\n-----------------------------\n--  Ragglesnout  --\n-----------------------------\nL = DBM:GetModLocalization(\"Ragglesnout\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Круглорыл\"\n})\n\n-----------------------------\n--  Amnenar the Coldbringer  --\n-----------------------------\nL = DBM:GetModLocalization(\"AmnennartheColdbringer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Амненнар Хладовей\"\n})\n\n-----------------------------\n--  Plaguemaw the Rotting  --\n-----------------------------\nL = DBM:GetModLocalization(\"PlaguemawtheRotting\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Чумобрюх Гнилой\"\n})\n\n-------------------------\n--  Razorfen Kraul -234J/47M (9L/11C)  --\n-----------------------------\n--  Roogug  --\n-----------------------------\nL = DBM:GetModLocalization(\"Roogug\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ругуг\"\n})\n\n-----------------------------\n--  Aggem Thorncurse  --\n-----------------------------\nL = DBM:GetModLocalization(\"AggemThorncurse\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Аггем Терновое Проклятие\"\n})\n\n-----------------------------\n--  Death Speaker Jargba  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathSpeakerJargba\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Вестник смерти Джаргба\"\n})\n\n-----------------------------\n--  Overload Ramtusk  --\n-----------------------------\nL = DBM:GetModLocalization(\"OverlordRamtusk\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Властитель Таранный Клык\"\n})\n\n-----------------------------\n--  Agathelos the Raging  --\n-----------------------------\nL = DBM:GetModLocalization(\"AgathelostheRaging\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Агателос Свирепый\"\n})\n\n-----------------------------\n--  Blind Hunter  --\n-----------------------------\nL = DBM:GetModLocalization(\"BlindHunter\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Слепой охотник\"\n})\n\n-----------------------------\n--  Earthcaller Halmgar  --\n-----------------------------\nL = DBM:GetModLocalization(\"EarthcallerHalmgar\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Заклинательница земли Халмгар\"\n})\n\n-----------------------------\n--  Charlga Razorflank  --\n-----------------------------\nL = DBM:GetModLocalization(\"CharlgaRazorflank\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Чарлга Остробок\"\n})\n\n-------------------------\n--  Scarlet Monastery 189M (12C)  --\n-----------------------------\n--  Interrogator Vishas  --\n-----------------------------\nL = DBM:GetModLocalization(\"InterrogatorVishas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Дознаватель Вишас\"\n})\n\n-----------------------------\n--  Bloodmage Thalnos  --\n-----------------------------\nL = DBM:GetModLocalization(\"BloodmageThalnos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Волшебник Крови Талнос\"\n})\n\n-----------------------------\n--  Houndmaster Loksey  --\n-----------------------------\nL = DBM:GetModLocalization(\"HoundmasterLoksey\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Псарь Локси\"\n})\n\n-----------------------------\n--  Arcanist Doan  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArcanistDoan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Чародей Доан\"\n})\n\n-----------------------------\n--  Herod  --\n-----------------------------\nL = DBM:GetModLocalization(\"Herod\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Герод\"\n})\n\n-----------------------------\n--  Mograine & Whitemane  --\n-----------------------------\nL = DBM:GetModLocalization(\"Mograine_and_Whitemane\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Могрейн и Melenablanca\"\n})\n\n-----------------------------\n--  High Inquisitor Fairbanks  --\n-----------------------------\nL = DBM:GetModLocalization(\"Fairbanks\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Верховный инквизитор Фэйрбанкс\"\n})\n\n-------------------------\n--  Scholomance 289M (13C)  --\n-----------------------------\n--  Kirtonos the Herald  --\n-----------------------------\nL = DBM:GetModLocalization(\"KirtonostheHerald\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Киртонос Глашатай\"\n})\n\n-----------------------------\n--  Jandice Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"JandiceBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Джандис Барова\"\n})\n\n-----------------------------\n--  Rattlegore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rattlegore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Громоклин\"\n})\n\n-----------------------------\n--  Marduk Blackpool  --\n-----------------------------\nL = DBM:GetModLocalization(\"MardukBlackpool\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Мардук Блэкпул\"\n})\n\n-----------------------------\n--  Vectus  --\n-----------------------------\nL = DBM:GetModLocalization(\"Vectus\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Вектус\"\n})\n\n-----------------------------\n--  Ras Frostwhisper  --\n-----------------------------\nL = DBM:GetModLocalization(\"RasFrostwhisper\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Рас Ледяной Шепот\"\n})\n\n-----------------------------\n--  Instructor Malicia  --\n-----------------------------\nL = DBM:GetModLocalization(\"InstructorMalicia\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Инструктор Коварница\"\n})\n\n-----------------------------\n--  Doctor Theolen Krastinov  --\n-----------------------------\nL = DBM:GetModLocalization(\"DoctorTheolenKrastinov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Доктор Теолен Крастинов\"\n})\n\n-----------------------------\n--  Lorekeeper Polkelt  --\n-----------------------------\nL = DBM:GetModLocalization(\"LorekeeperPolkelt\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Сказитель Полкелт\"\n})\n\n-----------------------------\n--  The Ravenian  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheRavenian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Равениан\"\n})\n\n-----------------------------\n--  Lord Alexei Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LordAlexeiBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Лорд Алексей Баров\"\n})\n\n-----------------------------\n--  Lady Illucia Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadyIlluciaBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Леди Иллюсия Барова\"\n})\n\n-----------------------------\n--  Darkmaster Gandling  --\n-----------------------------\nL = DBM:GetModLocalization(\"DarkmasterGandling\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Темный магистр Гандлинг\"\n})\n\n-------------------------\n--  Shadowfang Keep 33M (14C)  --\n-----------------------------\n--  Rethilgore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rethilgore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ретилгор\"\n})\n\n-----------------------------\n--  Razorclaw the Butcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"RazorclawtheButcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Остроклык Мясник\"\n})\n\n-----------------------------\n--  Baron Silverlaine  --\n-----------------------------\nL = DBM:GetModLocalization(\"BaronSilverlaine\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Барон Сребролен\"\n})\n\n-----------------------------\n--  Commander Springvale  --\n-----------------------------\nL = DBM:GetModLocalization(\"CommanderSpringvale\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Командир Ручьедол\"\n})\n\n-----------------------------\n--  Odo the Blindwatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"OdotheBlindwatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Одо Слепой Страж\"\n})\n\n-----------------------------\n--  Deathsworn Captain  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathswornCaptain\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Капитан служителей Смерти\"\n})\n\n-----------------------------\n--  Fenrus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(\"FenrustheDevourer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Фенрус Пожиратель\"\n})\n\n-----------------------------\n--  Wolf Master Nandos  --\n-----------------------------\nL = DBM:GetModLocalization(\"WolfMasterNandos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Командир воргенов Нандос\"\n})\n\n-----------------------------\n--  Archmage Arugal  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArchmageArugal\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Верховный маг Аругал\"\n})\n\n-------------------------\n--  Stormwind Stockade 34M (10L/15C)  --\n-----------------------------\n--  Targorr the Dread  --\n-----------------------------\nL = DBM:GetModLocalization(\"Targorr\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Таргорр Ужасный\"\n})\n\n-----------------------------\n--  Kam Deepfury  --\n-----------------------------\nL = DBM:GetModLocalization(\"KamDeepfury\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Кам Гневливый\"\n})\n\n-----------------------------\n--  Hamhock  --\n-----------------------------\nL = DBM:GetModLocalization(\"Hamhock\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Хрупконог\"\n})\n\n-----------------------------\n--  Bazil Thredd  --\n-----------------------------\nL = DBM:GetModLocalization(\"BazilThredd\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Базиль Тредд\"\n})\n\n-----------------------------\n--  Dextren Ward  --\n-----------------------------\nL = DBM:GetModLocalization(\"DextrenWard\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Декстрен Вард\"\n})\n\n-----------------------------\n--  Bruegal Ironknuckle  --\n-----------------------------\nL = DBM:GetModLocalization(\"BruegalIronknuckle\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Бругал Железный Кулак\"\n})\n\n-------------------------\n--  Stratholme 236J/329M (10L/16C)  --\n-----------------------------\n--  Hearthsinger Forresten  --\n-----------------------------\nL = DBM:GetModLocalization(443)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Певчий Форрестен\"\n})\n\n-----------------------------\n--  Timmy the Cruel  --\n-----------------------------\nL = DBM:GetModLocalization(445)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Тимми Жестокий\"\n})\n\n-----------------------------\n--  Malor the Zealous  --\n-----------------------------\nL = DBM:GetModLocalization(749)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Малор Ревностный\"\n})\n\n-----------------------------\n--  Cannon Master Willey  --\n-----------------------------\nL = DBM:GetModLocalization(446)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Мастер-канонир Вилли\"\n})\n\n-----------------------------\n--  Archivist Galford  --\n-----------------------------\nL = DBM:GetModLocalization(448)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Архивариус Галфорд\"\n})\n\n-----------------------------\n--  Balnazzar  --\n-----------------------------\nL = DBM:GetModLocalization(449)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Балназзар\"\n})\n\n-----------------------------\n--  The Unforgiven  --\n-----------------------------\nL = DBM:GetModLocalization(450)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Непрощенный\"\n})\n\n-----------------------------\n--  Baroness Anastari  --\n-----------------------------\nL = DBM:GetModLocalization(451)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Баронесса Анастари\"\n})\n\n-----------------------------\n--  Nerub'enkan  --\n-----------------------------\nL = DBM:GetModLocalization(452)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Неруб'энкан\"\n})\n\n-----------------------------\n--  Maleki the Pallid  --\n-----------------------------\nL = DBM:GetModLocalization(453)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Малекай Бледный\"\n})\n\n-----------------------------\n--  Magistrate Barthilas  --\n-----------------------------\nL = DBM:GetModLocalization(454)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Мировой судья Бартилас\"\n})\n\n-----------------------------\n--  Ramstein the Gorger  --\n-----------------------------\nL = DBM:GetModLocalization(455)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Рамштайн Ненасытный\"\n})\n\nL:SetTimerLocalization({\n\tTimerGuards\t= \"Появление Караульных\"\n})\n\nL:SetOptionLocalization({\n\tTimerGuards\t= \"Показывать таймер до прибытия Караульных Черной Стражи после победы над боссом\"\n})\n\n-----------------------------\n--  Baron Rivendare  --\n-----------------------------\nL = DBM:GetModLocalization(456)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Барон Ривендер\"\n})\n\n-------------------------\n--  Sunken Temple 237J/109M (11L/17C)  --\n-----------------------------\n--  Avatar of Hakkar  --\n-----------------------------\nL = DBM:GetModLocalization(457)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Аватара Хаккара\"\n})\n\n-----------------------------\n--  Jammal'an the Prophet  --\n-----------------------------\nL = DBM:GetModLocalization(458)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Джаммал'ан Пророк\"\n})\n\n----------------------------------------------\n--\tWardens of the Dream\t\t\t\t\t--\n--\t(Dreamscythe, Weaver, Morphaz, Hazzas)\t--\n----------------------------------------------\nL = DBM:GetModLocalization(\"Dreamscythe\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Жнец Снов\"\n})\n\nL = DBM:GetModLocalization(\"Weaver\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ткачик\"\n})\n\nL = DBM:GetModLocalization(\"Morphaz\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Морфаз\"\n})\n\nL = DBM:GetModLocalization(\"Hazzas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Хаззас\"\n})\n\n-----------------------------\n--  Shade of Eranikus  --\n-----------------------------\nL = DBM:GetModLocalization(463)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Тень Эраникуса\"\n})\n\n-------------------------\n--  Uldaman 229J/70M (12L/18C)  --\n-----------------------------\n--  Revelosh  --\n-----------------------------\nL = DBM:GetModLocalization(467)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Ревелош\"\n})\n\n-----------------------------\n--  The Lost Dwarves  --\n-----------------------------\nL = DBM:GetModLocalization(468)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Потерянные дворфы\"\n})\n\n-----------------------------\n--  Ironaya  --\n-----------------------------\nL = DBM:GetModLocalization(469)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Иронайя\"\n})\n\n-----------------------------\n--  Obsidian Sentinel  --\n-----------------------------\nL = DBM:GetModLocalization(748)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Обсидиановый часовой\"\n})\n\n-----------------------------\n--  Ancient Stone Keeper  --\n-----------------------------\nL = DBM:GetModLocalization(470)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Древний Хранитель Камня\"\n})\n\n-----------------------------\n--  Galgann Firehammer  --\n-----------------------------\nL = DBM:GetModLocalization(471)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Галганн Огнемолот\"\n})\n\n-----------------------------\n--  Grimlok  --\n-----------------------------\nL = DBM:GetModLocalization(472)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Гримлок\"\n})\n\n-----------------------------\n--  Archaedas  --\n-----------------------------\nL = DBM:GetModLocalization(473)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Аркедас\"\n})\n\n-------------------------\n--  Wailing Caverns 240J/43M (13L/19C)  --\n-----------------------------\n--  Lady Anacondra  --\n-----------------------------\nL = DBM:GetModLocalization(474)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Повелительница Анакондра\"\n})\n\n-----------------------------\n--  Lord Pythas  --\n-----------------------------\nL = DBM:GetModLocalization(476)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Лорд Питонас\"\n})\n\n-----------------------------\n--  Lord Cobrahn  --\n-----------------------------\nL = DBM:GetModLocalization(475)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Лорд Кобран\"\n})\n\n-----------------------------\n--  Kresh  --\n-----------------------------\nL = DBM:GetModLocalization(477)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Криг\"\n})\n\n-----------------------------\n--  Skum  --\n-----------------------------\nL = DBM:GetModLocalization(478)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Шкам\"\n})\n\n-----------------------------\n--  Lord Serpentis  --\n-----------------------------\nL = DBM:GetModLocalization(479)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Лорд Серпентис\"\n})\n\n-----------------------------\n--  Verdan the Everliving  --\n-----------------------------\nL = DBM:GetModLocalization(480)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Вердан Бессмертный\"\n})\n\n-----------------------------\n--  Mutanus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(481)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Мутанус Пожиратель\"\n})\n\n-----------------------------\n--  Deviate Faerie Dragon  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeviateFaerie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Загадочный волшебный дракон\"\n})\n\n-------------------------\n--  Zul'Farrak 241J/209M (14L/20C)  --\n-----------------------------\n--  Ghaz'rilla  --\n-----------------------------\nL = DBM:GetModLocalization(483)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Газ'рилла\"\n})\n\n-----------------------------\n--  Antu'sul  --\n-----------------------------\nL = DBM:GetModLocalization(484)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Анту'сул\"\n})\n\n-----------------------------\n--  Theka the Martyr  --\n-----------------------------\nL = DBM:GetModLocalization(485)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Тека Мученик\"\n})\n\n-----------------------------\n--  Witch Doctor Zum'rah  --\n-----------------------------\nL = DBM:GetModLocalization(486)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Знахарь Зум'рах\"\n})\n\n-----------------------------\n--  Hydromancer Velratha (not in Dungeon Journal)  --\n-----------------------------\nL = DBM:GetModLocalization(\"HydromancerVelrath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Гидромант Велрата\"\n})\n\n-----------------------------\n--  Nekrum & Sezz'ziz  --\n-----------------------------\nL = DBM:GetModLocalization(487)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Некрум и Шезз'зиз\"\n})\n\n-----------------------------\n--  Chief Ukorz Sandscalp  --\n-----------------------------\nL = DBM:GetModLocalization(489)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"Вождь Укорз Песчаная Плешь\"\n})\n"
  },
  {
    "path": "DBM-Party-Classic/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n--------------------------------\n-- Blackfathom Deeps (1) --\n--------------------------------\n--  Ghamoo-Ra --\n-----------------------------\nL = DBM:GetModLocalization(\"GhamooRa\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"加摩拉\"\n})\n\n-----------------------------\n--  Lady Sarevess  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadySerevess\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"薩利維絲女士\"\n})\n\n-----------------------------\n--  Gelihast  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gelihast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"格里哈斯特\"\n})\n\n-----------------------------\n--  Old Serra'kis  --\n-----------------------------\nL = DBM:GetModLocalization(\"OldSerrakis\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"瑟拉吉斯\"\n})\n\n-----------------------------\n--  Twilight Lord Kelris  --\n-----------------------------\nL = DBM:GetModLocalization(\"TwilightLordKelris\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"暮光領主克爾里斯\"\n})\n\n-----------------------------\n--  Aku'mai  --\n-----------------------------\nL = DBM:GetModLocalization(\"Akumai\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"阿庫麥爾\"\n})\n\n-------------------------------------------------\n-- Blackrock Depths - 228J/230M (2) --\n-------------------------------------------------\n-- High Interrogator Gerstahn --\n---------------------------------\nL = DBM:GetModLocalization(369)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"高階審問者格斯塔恩\"\n})\n\n-----------------\n-- Lord Roccor --\n-----------------\nL = DBM:GetModLocalization(370)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"洛考爾領主\"\n})\n\n------------------------------\n-- Hound Master Grebmar --\n------------------------------\nL = DBM:GetModLocalization(371)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"馴犬者格雷布瑪爾\"\n})\n\n---------------------------------------------------------\n-- Ring of Law --\n---------------------------------------------------------\nL = DBM:GetModLocalization(372)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"秩序競技場\"\n})\n\n---------------------------------\n-- Pyromancer Loregrain --\n---------------------------------\nL = DBM:GetModLocalization(373)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"控火師羅格雷恩\"\n})\n\n--------------------\n-- Lord Incendius --\n--------------------\nL = DBM:GetModLocalization(374)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"伊森迪奧斯領主\"\n})\n\n--------------------------\n-- Warden Stilgiss --\n--------------------------\nL = DBM:GetModLocalization(375)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"守衛斯迪爾基斯\"\n})\n\n----------------------\n-- Fineous Darkvire --\n----------------------\nL = DBM:GetModLocalization(376)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"弗諾斯·達克維爾\"\n})\n\n--------------\n-- Bael'Gar --\n--------------\nL = DBM:GetModLocalization(377)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"貝爾加\"\n})\n\n--------------------------\n-- General Angerforge --\n--------------------------\nL = DBM:GetModLocalization(378)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"安格弗將軍\"\n})\n\n---------------------------\n-- Golem Lord Argelmach --\n---------------------------\nL = DBM:GetModLocalization(379)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"魔像領主阿格曼奇\"\n})\n\n----------------------\n-- Hurley Blackbreath --\n----------------------\nL = DBM:GetModLocalization(380)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"霍爾雷·黑鬚\"\n})\n\n-------------\n-- Phalanx --\n-------------\nL = DBM:GetModLocalization(381)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"法拉克斯\"\n})\n\n-----------------------\n-- Plugger Spazzring --\n-----------------------\nL = DBM:GetModLocalization(383)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"普拉格\"\n})\n\n-------------------------\n-- Ambassador Flamelash --\n-------------------------\nL = DBM:GetModLocalization(384)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"弗萊拉斯大使\"\n})\n\n---------------\n-- The Seven --\n---------------\nL = DBM:GetModLocalization(385)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"七賢\"\n})\n\n------------\n-- Magmus --\n------------\nL = DBM:GetModLocalization(386)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"瑪格姆斯\"\n})\n\n---------------------------------\n-- Emperor Dagran Thaurissan --\n---------------------------------\nL = DBM:GetModLocalization(387)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"達格蘭·索瑞森大帝\"\n})\n\n-------------------------\n--  Lower Blackrock Spire-229J/229M (6L/3C)  --\n--  Highlord Omokk  --\n-----------------------------\nL = DBM:GetModLocalization(388)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"歐莫克大王\"\n})\n\n-----------------------------\n--  Shadow Hunter Vosh'gajin  --\n-----------------------------\nL = DBM:GetModLocalization(389)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"暗影獵手沃許加斯\"\n})\n\n-----------------------------\n--  War Master Voone  --\n-----------------------------\nL = DBM:GetModLocalization(390)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"指揮官沃恩\"\n})\n\n-----------------------------\n--  Mother Smolderweb  --\n-----------------------------\nL = DBM:GetModLocalization(391)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"煙網蛛后\"\n})\n\n-----------------------------\n--  Urok Doomhowl  --\n-----------------------------\nL = DBM:GetModLocalization(392)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"烏洛克\"\n})\n\n-----------------------------\n--  Quartermaster Zigris  --\n-----------------------------\nL = DBM:GetModLocalization(393)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"軍需官茲格雷斯\"\n})\n\n-----------------------------\n--  Halycon  --\n-----------------------------\nL = DBM:GetModLocalization(394)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"哈雷肯\"\n})\n\n-----------------------------\n--  Gizrul  --\n-----------------------------\nL = DBM:GetModLocalization(395)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"『奴役者』基茲盧爾\"\n})\n\n-----------------------------\n--  Overlord Wyrmthalak  --\n-----------------------------\nL = DBM:GetModLocalization(396)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"維姆薩拉克主宰\"\n})\n\n-------------------------\n--  Upper Blackrock Spire-229J/229M (4C)  --\n-----------------------------\n--  Pyroguard Emberseer  --\n-----------------------------\nL = DBM:GetModLocalization(\"PyroguardEmberseer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"烈焰衛士艾博希爾\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"%s開始恢復力量！\"\n})\n\n-----------------------------\n--  Solakar Flamewreath  --\n-----------------------------\nL = DBM:GetModLocalization(\"SolakarFlamewreath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"索拉卡·火冠\"\n})\n\n-----------------------------\n--  Goraluk Anvilcrack  --\n-----------------------------\nL = DBM:GetModLocalization(\"GoralukAnvilcrack\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"古拉魯克\"\n})\n\n-----------------------------\n--  Jed Runewatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"JedRunewatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"傑德\"\n})\n\n-----------------------------\n--  Warchief Rend Blackhand  --\n-----------------------------\nL = DBM:GetModLocalization(\"WarchiefRendBlackhand\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"大酋長雷德·黑手\"\n})\n\n-----------------------------\n--  The Beast  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheBeast\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"比斯巨獸\"\n})\n\n-----------------------------\n--  General Drakkisath  --\n-----------------------------\nL = DBM:GetModLocalization(\"GeneralDrakkisath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"達基薩斯將軍\"\n})\n\n-------------------------\n--  Deadmines (3L/5C)  --\n-----------------------------\n--  Rhahk'Zor  --\n-----------------------------\nL = DBM:GetModLocalization(\"RhahkZor\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"拉克佐\"\n})\n\n-----------------------------\n--  Miner Johnson  --\n-----------------------------\nL = DBM:GetModLocalization(\"MinerJohnson\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"礦工約翰森\"\n})\n\n-----------------------------\n--  Sneed's Shredder  --\n-----------------------------\nL = DBM:GetModLocalization(\"SneedsShredder\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"斯尼德的伐木機\"\n})\n\n-----------------------------\n--  Gilnid  --\n-----------------------------\nL = DBM:GetModLocalization(\"Gilnid\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"基爾尼格\"\n})\n\n-----------------------------\n--  Mr. Smite  --\n-----------------------------\nL = DBM:GetModLocalization(\"MrSmite\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"重拳先生\"\n})\n\n-----------------------------\n--  Captain Greenskin  --\n-----------------------------\nL = DBM:GetModLocalization(\"CaptainGreenskin\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"綠皮隊長\"\n})\n\n-----------------------------\n--  Edwin Van Cleef  --\n-----------------------------\nL = DBM:GetModLocalization(\"EdwinVanCleef\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"艾德溫·范克里夫\"\n})\n\n-----------------------------\n--  Cookie  --\n-----------------------------\nL = DBM:GetModLocalization(\"Cookie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"廚師\"\n})\n\n--------------------------------\n-- Dire Maul - 230J/429M (3) --\n--------------------------------\n-- Zevrim Thornhoof --\n--------------------------\nL = DBM:GetModLocalization(402)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"瑟雷姆·刺蹄\"\n})\n\n------------------\n-- Hydrospawn --\n------------------\nL = DBM:GetModLocalization(403)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"海多斯博恩\"\n})\n\n-----------------\n-- Lethtendris --\n-----------------\nL = DBM:GetModLocalization(404)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"蕾瑟塔蒂絲\"\n})\n\n--------------------------\n-- Alzzin the Wildshaper --\n--------------------------\nL = DBM:GetModLocalization(405)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"『狂野變形者』奧茲恩\"\n})\n\n--------------------\n-- Tendris Warpwood --\n--------------------\nL = DBM:GetModLocalization(406)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"特迪斯·扭木\"\n})\n\n--------------------------\n-- Illyanna Ravenoak --\n--------------------------\nL = DBM:GetModLocalization(407)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"伊琳娜·鴉橡\"\n})\n\n------------------------\n-- Magister Kalendris --\n------------------------\nL = DBM:GetModLocalization(408)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"卡雷迪斯鎮長\"\n})\n\n----------------\n-- Immol'thar --\n----------------\nL = DBM:GetModLocalization(409)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"伊莫塔爾\"\n})\n\n--------------------------\n-- Prince Tortheldrin --\n--------------------------\nL = DBM:GetModLocalization(410)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"托塞德林王子\"\n})\n\n---------------------\n-- Guard Mol'dar --\n---------------------\nL = DBM:GetModLocalization(411)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"衛兵摩爾達\"\n})\n\n----------------------\n-- Stomper Kreeg --\n----------------------\nL = DBM:GetModLocalization(412)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"踐踏者克雷格\"\n})\n\n--------------------\n-- Guard Fengus --\n--------------------\nL = DBM:GetModLocalization(413)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"衛兵芬古斯\"\n})\n\n----------------------\n-- Guard Slip'kik --\n----------------------\nL = DBM:GetModLocalization(414)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"衛兵斯里基克\"\n})\n\n-----------------------\n-- Captain Kromcrush --\n-----------------------\nL = DBM:GetModLocalization(415)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"克羅卡斯\"\n})\n\n----------------------------\n-- Cho'Rush the Observer --\n----------------------------\nL = DBM:GetModLocalization(416)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"『觀察者』克魯什\"\n})\n\n----------------\n-- King Gordok --\n----------------\nL = DBM:GetModLocalization(417)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"戈多克大王\"\n})\n\n-------------------------\n--  Gnomeregan-231J/90M (5L/7C)  --\n-----------------------------\n--  Grubbis  --\n-----------------------------\nL = DBM:GetModLocalization(419)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"格魯比斯\"\n})\n\n-----------------------------\n--  Viscous Fallout  --\n-----------------------------\nL = DBM:GetModLocalization(420)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"粘性輻射塵\"\n})\n\n-----------------------------\n--  Electrocutioner 6000  --\n-----------------------------\nL = DBM:GetModLocalization(421)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"電刑器6000型\"\n})\n\n-----------------------------\n--  Crowd Pummeler 9-60  --\n-----------------------------\nL = DBM:GetModLocalization(418)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"群體打擊者9-60\"\n})\n\n-----------------------------\n--  Mekgineer Thermaplugg  --\n-----------------------------\nL = DBM:GetModLocalization(422)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"麥克尼爾·瑟瑪普拉格\"\n})\n\nL:SetMiscLocalization({\n\tYellBomb\t= \"炸藥!更多的炸藥!我要更多的炸藥!\"\n})\n\n-------------------------\n--  Maraudon-232J/349M (6L/8C)  --\n-----------------------------\n--  Noxxion  --\n-----------------------------\nL = DBM:GetModLocalization(423)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"諾克賽恩\"\n})\n\n-----------------------------\n--  Razorlash  --\n-----------------------------\nL = DBM:GetModLocalization(424)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"銳刺鞭笞者\"\n})\n\n-----------------------------\n--  Tinkerer Gizlock  --\n-----------------------------\nL = DBM:GetModLocalization(425)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"技工吉茲洛克\"\n})\n\n-----------------------------\n--  Lord Vyletongue  --\n-----------------------------\nL = DBM:GetModLocalization(427)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"維利塔恩領主\"\n})\n\n-----------------------------\n--  Celebras the Cursed  --\n-----------------------------\nL = DBM:GetModLocalization(428)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"被詛咒的塞雷布拉斯\"\n})\n\n-----------------------------\n--  Landslide  --\n-----------------------------\nL = DBM:GetModLocalization(429)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"蘭斯利德\"\n})\n\n-----------------------------\n--  Rotgrip  --\n-----------------------------\nL = DBM:GetModLocalization(430)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"洛特格里普\"\n})\n\n-----------------------------\n--  Princess Theradras  --\n-----------------------------\nL = DBM:GetModLocalization(431)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"瑟萊德絲公主\"\n})\n\n-------------------------\n--  Ragefire Chasm (7L/9C)  --\n-----------------------------\n--  Oggleflint  --\n-----------------------------\nL = DBM:GetModLocalization(\"Oggleflint\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"奧格弗林特\"\n})\n\n-----------------------------\n--  Taragaman the Hungerer  --\n-----------------------------\nL = DBM:GetModLocalization(\"Taragaman\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"『飢餓者』塔拉加曼\"\n})\n\n-----------------------------\n--  Jergosh the Invoker  --\n-----------------------------\nL = DBM:GetModLocalization(\"Jergosh\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"『塑能師』耶戈什\"\n})\n\n-----------------------------\n--  Bazzalan  --\n-----------------------------\nL = DBM:GetModLocalization(\"Bazzalan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"巴札蘭\"\n})\n\n-------------------------\n--  Razorfen Downs -233J/129M (8L/10C)  --\n-----------------------------\n--  Tuten'kash  --\n-----------------------------\nL = DBM:GetModLocalization(\"Tutenkash\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"圖特卡什\"\n})\n\n-----------------------------\n--  Mordresh Fire Eye  --\n-----------------------------\nL = DBM:GetModLocalization(\"MordreshFireEye\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"火眼莫德雷斯\"\n})\n\n-----------------------------\n--  Glutton  --\n-----------------------------\nL = DBM:GetModLocalization(\"Glutton\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"暴食者\"\n})\n\n-----------------------------\n--  Ragglesnout  --\n-----------------------------\nL = DBM:GetModLocalization(\"Ragglesnout\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"拉戈斯諾特\"\n})\n\n-----------------------------\n--  Amnenar the Coldbringer  --\n-----------------------------\nL = DBM:GetModLocalization(\"AmnennartheColdbringer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"『寒冰使者』亞門納爾\"\n})\n\n-----------------------------\n--  Plaguemaw the Rotting  --\n-----------------------------\nL = DBM:GetModLocalization(\"PlaguemawtheRotting\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"腐爛的普雷莫爾\"\n})\n\n-------------------------\n--  Razorfen Kraul -234J/47M (9L/11C)  --\n-----------------------------\n--  Roogug  --\n-----------------------------\nL = DBM:GetModLocalization(\"Roogug\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"魯古格\"\n})\n\n-----------------------------\n--  Aggem Thorncurse  --\n-----------------------------\nL = DBM:GetModLocalization(\"AggemThorncurse\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"阿葛金‧棘咒\"\n})\n\n-----------------------------\n--  Death Speaker Jargba  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathSpeakerJargba\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"亡語者賈格巴\"\n})\n\n-----------------------------\n--  Overload Ramtusk  --\n-----------------------------\nL = DBM:GetModLocalization(\"OverlordRamtusk\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"拉姆塔斯主宰\"\n})\n\n-----------------------------\n--  Agathelos the Raging  --\n-----------------------------\nL = DBM:GetModLocalization(\"AgathelostheRaging\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"暴怒的阿迦賽羅斯\"\n})\n\n-----------------------------\n--  Blind Hunter  --\n-----------------------------\nL = DBM:GetModLocalization(\"BlindHunter\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"盲眼獵手\"\n})\n\n-----------------------------\n--  Earthcaller Halmgar  --\n-----------------------------\nL = DBM:GetModLocalization(\"EarthcallerHalmgar\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"喚地者哈穆加\"\n})\n\n-----------------------------\n--  Charlga Razorflank  --\n-----------------------------\nL = DBM:GetModLocalization(\"CharlgaRazorflank\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"卡爾加·刺肋\"\n})\n\n-------------------------\n--  Scarlet Monastery 189M (12C)  --\n-----------------------------\n--  Interrogator Vishas  --\n-----------------------------\nL = DBM:GetModLocalization(\"InterrogatorVishas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"審訊員韋沙斯\"\n})\n\n-----------------------------\n--  Bloodmage Thalnos  --\n-----------------------------\nL = DBM:GetModLocalization(\"BloodmageThalnos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"血法師薩爾諾斯\"\n})\n\n-----------------------------\n--  Houndmaster Loksey  --\n-----------------------------\nL = DBM:GetModLocalization(\"HoundmasterLoksey\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"馴犬者洛克希\"\n})\n\n-----------------------------\n--  Arcanist Doan  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArcanistDoan\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"秘法師杜安\"\n})\n\n-----------------------------\n--  Herod  --\n-----------------------------\nL = DBM:GetModLocalization(\"Herod\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"赫洛德\"\n})\n\n-----------------------------\n--  Mograine & Whitemane  --\n-----------------------------\nL = DBM:GetModLocalization(\"Mograine_and_Whitemane\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"莫格萊尼 & 懷特邁恩\"\n})\n\n-----------------------------\n--  High Inquisitor Fairbanks  --\n-----------------------------\nL = DBM:GetModLocalization(\"Fairbanks\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"高等審判官法爾班克斯\"\n})\n\n-------------------------\n--  Scholomance 289M (13C)  --\n-----------------------------\n--  Kirtonos the Herald  --\n-----------------------------\nL = DBM:GetModLocalization(\"KirtonostheHerald\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"傳令官基爾圖諾斯\"\n})\n\n-----------------------------\n--  Jandice Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"JandiceBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"詹迪斯·巴羅夫\"\n})\n\n-----------------------------\n--  Rattlegore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rattlegore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"血骨傀儡\"\n})\n\n-----------------------------\n--  Marduk Blackpool  --\n-----------------------------\nL = DBM:GetModLocalization(\"MardukBlackpool\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"馬杜克·布萊克波爾\"\n})\n\n-----------------------------\n--  Vectus  --\n-----------------------------\nL = DBM:GetModLocalization(\"Vectus\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"維克圖斯\"\n})\n\n-----------------------------\n--  Ras Frostwhisper  --\n-----------------------------\nL = DBM:GetModLocalization(\"RasFrostwhisper\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"萊斯·霜語\"\n})\n\n-----------------------------\n--  Instructor Malicia  --\n-----------------------------\nL = DBM:GetModLocalization(\"InstructorMalicia\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"講師瑪麗希亞\"\n})\n\n-----------------------------\n--  Doctor Theolen Krastinov  --\n-----------------------------\nL = DBM:GetModLocalization(\"DoctorTheolenKrastinov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"瑟爾林·卡斯迪諾夫教授\"\n})\n\n-----------------------------\n--  Lorekeeper Polkelt  --\n-----------------------------\nL = DBM:GetModLocalization(\"LorekeeperPolkelt\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"博學者普克爾特\"\n})\n\n-----------------------------\n--  The Ravenian  --\n-----------------------------\nL = DBM:GetModLocalization(\"TheRavenian\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"拉文尼亞\"\n})\n\n-----------------------------\n--  Lord Alexei Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LordAlexeiBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"阿萊克斯·巴羅夫領主\"\n})\n\n-----------------------------\n--  Lady Illucia Barov  --\n-----------------------------\nL = DBM:GetModLocalization(\"LadyIlluciaBarov\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"伊露希亞·巴羅夫女士\"\n})\n\n-----------------------------\n--  Darkmaster Gandling  --\n-----------------------------\nL = DBM:GetModLocalization(\"DarkmasterGandling\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"黑暗院長加丁\"\n})\n\n-------------------------\n--  Shadowfang Keep 33M (14C)  --\n-----------------------------\n--  Rethilgore  --\n-----------------------------\nL = DBM:GetModLocalization(\"Rethilgore\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"雷希戈爾\"\n})\n\n-----------------------------\n--  Razorclaw the Butcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"RazorclawtheButcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"屠夫拉佐克勞\"\n})\n\n-----------------------------\n--  Baron Silverlaine  --\n-----------------------------\nL = DBM:GetModLocalization(\"BaronSilverlaine\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"席瓦萊恩男爵\"\n})\n\n-----------------------------\n--  Commander Springvale  --\n-----------------------------\nL = DBM:GetModLocalization(\"CommanderSpringvale\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"指揮官斯普林瓦爾\"\n})\n\n-----------------------------\n--  Odo the Blindwatcher  --\n-----------------------------\nL = DBM:GetModLocalization(\"OdotheBlindwatcher\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"『盲眼守衛』奧杜\"\n})\n\n-----------------------------\n--  Deathsworn Captain  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeathswornCaptain\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"死亡誓言者隊長\"\n})\n\n-----------------------------\n--  Fenrus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(\"FenrustheDevourer\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"『吞噬者』芬魯斯\"\n})\n\n-----------------------------\n--  Wolf Master Nandos  --\n-----------------------------\nL = DBM:GetModLocalization(\"WolfMasterNandos\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"狼王南杜斯\"\n})\n\n-----------------------------\n--  Archmage Arugal  --\n-----------------------------\nL = DBM:GetModLocalization(\"ArchmageArugal\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"大法師阿魯高\"\n})\n\n-------------------------\n--  Stormwind Stockade 34M (10L/15C)  --\n-----------------------------\n--  Targorr the Dread  --\n-----------------------------\nL = DBM:GetModLocalization(\"Targorr\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"可怕的塔格爾\"\n})\n\n-----------------------------\n--  Kam Deepfury  --\n-----------------------------\nL = DBM:GetModLocalization(\"KamDeepfury\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"卡姆·深怒\"\n})\n\n-----------------------------\n--  Hamhock  --\n-----------------------------\nL = DBM:GetModLocalization(\"Hamhock\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"哈姆霍克\"\n})\n\n-----------------------------\n--  Bazil Thredd  --\n-----------------------------\nL = DBM:GetModLocalization(\"BazilThredd\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"巴基爾·斯瑞德\"\n})\n\n-----------------------------\n--  Dextren Ward  --\n-----------------------------\nL = DBM:GetModLocalization(\"DextrenWard\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"迪克斯特·瓦德\"\n})\n\n-----------------------------\n--  Bruegal Ironknuckle  --\n-----------------------------\nL = DBM:GetModLocalization(\"BruegalIronknuckle\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"布魯戈·艾爾克納寇\"\n})\n\n-------------------------\n--  Stratholme 236J/329M (10L/16C)  --\n-----------------------------\n--  Hearthsinger Forresten  --\n-----------------------------\nL = DBM:GetModLocalization(443)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"弗雷斯特恩\"\n})\n\n-----------------------------\n--  Timmy the Cruel  --\n-----------------------------\nL = DBM:GetModLocalization(445)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"悲慘的提米\"\n})\n\n-----------------------------\n--  Malor the Zealous  --\n-----------------------------\nL = DBM:GetModLocalization(749)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"狂熱的瑪洛爾\"\n})\n\n-----------------------------\n--  Cannon Master Willey  --\n-----------------------------\nL = DBM:GetModLocalization(446)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"砲手威利\"\n})\n\n-----------------------------\n--  Archivist Galford  --\n-----------------------------\nL = DBM:GetModLocalization(448)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"檔案管理員加爾福特\"\n})\n\n-----------------------------\n--  Balnazzar  --\n-----------------------------\nL = DBM:GetModLocalization(449)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"巴納札爾\"\n})\n\n-----------------------------\n--  The Unforgiven  --\n-----------------------------\nL = DBM:GetModLocalization(450)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"不可寬恕者\"\n})\n\n-----------------------------\n--  Baroness Anastari  --\n-----------------------------\nL = DBM:GetModLocalization(451)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"安娜絲塔麗男爵夫人\"\n})\n\n-----------------------------\n--  Nerub'enkan  --\n-----------------------------\nL = DBM:GetModLocalization(452)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"奈幽布恩坎\"\n})\n\n-----------------------------\n--  Maleki the Pallid  --\n-----------------------------\nL = DBM:GetModLocalization(453)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"蒼白的瑪勒基\"\n})\n\n-----------------------------\n--  Magistrate Barthilas  --\n-----------------------------\nL = DBM:GetModLocalization(454)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"巴瑟拉斯鎮長\"\n})\n\n-----------------------------\n--  Ramstein the Gorger  --\n-----------------------------\nL = DBM:GetModLocalization(455)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"『暴食者』拉姆斯登\"\n})\n\nL:SetTimerLocalization({\n\tTimerGuards\t= \"哨兵出現\"\n})\n\nL:SetOptionLocalization({\n\tTimerGuards\t= \"擊敗首領後，為精英護衛的出現顯示計時器。\"\n})\n\n-----------------------------\n--  Baron Rivendare  --\n-----------------------------\nL = DBM:GetModLocalization(456)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"瑞文戴爾男爵\"\n})\n\n-------------------------\n--  Sunken Temple 237J/109M (11L/17C)  --\n-----------------------------\n--  Avatar of Hakkar  --\n-----------------------------\nL = DBM:GetModLocalization(457)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"哈卡的化身\"\n})\n\n-----------------------------\n--  Jammal'an the Prophet  --\n-----------------------------\nL = DBM:GetModLocalization(458)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"『預言者』迦瑪蘭\"\n})\n\n----------------------------------------------\n--\tWardens of the Dream\t\t\t\t\t--\n--\t(Dreamscythe, Weaver, Morphaz, Hazzas)\t--\n----------------------------------------------\nL = DBM:GetModLocalization(\"Dreamscythe\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"德姆塞卡爾\"\n})\n\nL = DBM:GetModLocalization(\"Weaver\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"德拉維沃爾\"\n})\n\nL = DBM:GetModLocalization(\"Morphaz\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"摩弗拉斯\"\n})\n\nL = DBM:GetModLocalization(\"Hazzas\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"哈札斯\"\n})\n\n-----------------------------\n--  Shade of Eranikus  --\n-----------------------------\nL = DBM:GetModLocalization(463)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"伊蘭尼庫斯的陰影\"\n})\n\n-------------------------\n--  Uldaman 229J/70M (12L/18C)  --\n-----------------------------\n--  Revelosh  --\n-----------------------------\nL = DBM:GetModLocalization(467)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"魯維羅什\"\n})\n\n-----------------------------\n--  The Lost Dwarves  --\n-----------------------------\nL = DBM:GetModLocalization(468)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"失踪的矮人\"\n})\n\n-----------------------------\n--  Ironaya  --\n-----------------------------\nL = DBM:GetModLocalization(469)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"艾隆納亞\"\n})\n\n-----------------------------\n--  Obsidian Sentinel  --\n-----------------------------\nL = DBM:GetModLocalization(748)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"黑曜石哨兵\"\n})\n\n-----------------------------\n--  Ancient Stone Keeper  --\n-----------------------------\nL = DBM:GetModLocalization(470)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"古代的石頭看守者\"\n})\n\n-----------------------------\n--  Galgann Firehammer  --\n-----------------------------\nL = DBM:GetModLocalization(471)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"加加恩·火錘\"\n})\n\n-----------------------------\n--  Grimlok  --\n-----------------------------\nL = DBM:GetModLocalization(472)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"格瑞姆洛克\"\n})\n\n-----------------------------\n--  Archaedas  --\n-----------------------------\nL = DBM:GetModLocalization(473)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"阿札達斯\"\n})\n\n-------------------------\n--  Wailing Caverns 240J/43M (13L/19C)  --\n-----------------------------\n--  Lady Anacondra  --\n-----------------------------\nL = DBM:GetModLocalization(474)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"安娜科德拉\"\n})\n\n-----------------------------\n--  Lord Pythas  --\n-----------------------------\nL = DBM:GetModLocalization(476)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"皮薩斯領主\"\n})\n\n-----------------------------\n--  Lord Cobrahn  --\n-----------------------------\nL = DBM:GetModLocalization(475)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"考布萊恩領主\"\n})\n\n-----------------------------\n--  Kresh  --\n-----------------------------\nL = DBM:GetModLocalization(477)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"克雷什\"\n})\n\n-----------------------------\n--  Skum  --\n-----------------------------\nL = DBM:GetModLocalization(478)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"斯卡姆\"\n})\n\n-----------------------------\n--  Lord Serpentis  --\n-----------------------------\nL = DBM:GetModLocalization(479)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"瑟芬迪斯領主\"\n})\n\n-----------------------------\n--  Verdan the Everliving  --\n-----------------------------\nL = DBM:GetModLocalization(480)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"永生的沃爾丹\"\n})\n\n-----------------------------\n--  Mutanus the Devourer  --\n-----------------------------\nL = DBM:GetModLocalization(481)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"『吞噬者』穆坦努斯\"\n})\n\n-----------------------------\n--  Deviate Faerie Dragon  --\n-----------------------------\nL = DBM:GetModLocalization(\"DeviateFaerie\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"變異精靈龍\"\n})\n\n-------------------------\n--  Zul'Farrak 241J/209M (14L/20C)  --\n-----------------------------\n--  Ghaz'rilla  --\n-----------------------------\nL = DBM:GetModLocalization(483)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"加茲瑞拉\"\n})\n\n-----------------------------\n--  Antu'sul  --\n-----------------------------\nL = DBM:GetModLocalization(484)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"安圖蘇爾\"\n})\n\n-----------------------------\n--  Theka the Martyr  --\n-----------------------------\nL = DBM:GetModLocalization(485)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"『殉教者』塞卡\"\n})\n\n-----------------------------\n--  Witch Doctor Zum'rah  --\n-----------------------------\nL = DBM:GetModLocalization(486)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"巫醫·祖穆拉恩\"\n})\n\n-----------------------------\n--  Hydromancer Velrath (not in Dungeon Journal)  --\n-----------------------------\nL = DBM:GetModLocalization(\"HydromancerVelrath\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"水占師維蕾薩\"\n})\n\n-----------------------------\n--  Nekrum & Sezz'ziz  --\n-----------------------------\nL = DBM:GetModLocalization(487)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"耐克魯姆 & 暗影祭司塞瑟斯\"\n})\n\n-----------------------------\n--  Chief Ukorz Sandscalp  --\n-----------------------------\nL = DBM:GetModLocalization(489)\n\nL:SetGeneralLocalization({\n\tname\t\t= \"烏克茲·沙頂\"\n})\n"
  },
  {
    "path": "DBM-Party-WotLK/AhnKahet/Amanitar.lua",
    "content": "local mod\t= DBM:NewMod(\"Amanitar\", \"DBM-Party-WotLK\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(30258)\nmod:SetEncounterID(1989)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 57055\"\n)\n\nlocal warningMini\t= mod:NewSpellAnnounce(57055, 3)\n\nlocal timerMiniCD\t= mod:NewCDTimer(30, 57055, nil, nil, nil, 2)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 57055 then\n\t\twarningMini:Show()\n\t\ttimerMiniCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/AhnKahet/JedogaShadowseeker.lua",
    "content": "local mod\t= DBM:NewMod(\"JedogaShadowseeker\", \"DBM-Party-WotLK\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(29310)\nmod:SetEncounterID(214)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 56926 60029\",\n\t\"SPELL_CAST_START 56855 60030\"\n)\n\n--TODO, GTFO for thundershock shit on ground\n--TODO, switch warning for add\nlocal warningThundershock\t= mod:NewSpellAnnounce(56926, 3)\nlocal warningCycloneStrike\t= mod:NewSpellAnnounce(56855, 3)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(56926, 60029) then\n\t\twarningThundershock:Show()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(56855, 60030) then\n\t\twarningCycloneStrike:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/AhnKahet/Nadox.lua",
    "content": "local mod\t= DBM:NewMod(\"Nadox\", \"DBM-Party-WotLK\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(29309)\nmod:SetEncounterID(212)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 56130 59467\",\n\t\"SPELL_AURA_REMOVED 56130 59467\"\n)\n\nlocal warningPlague\t= mod:NewTargetNoFilterAnnounce(56130, 2, nil, \"Healer\")\n\nlocal timerPlague\t= mod:NewTargetTimer(30, 56130, nil, \"Healer\", nil, 3)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(56130, 59467) then\n\t\twarningPlague:Show(args.destName)\n\t\ttimerPlague:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(56130, 59467) then\n\t\ttimerPlague:Cancel()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/AhnKahet/Taldaram.lua",
    "content": "local mod\t= DBM:NewMod(\"Taldaram\", \"DBM-Party-WotLK\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(29308)\nmod:SetEncounterID(213)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 55931\",\n\t\"SPELL_AURA_APPLIED 55959 59513\",\n\t\"SPELL_AURA_REMOVED 55959 59513\"\n)\n\nlocal warningEmbrace\t= mod:NewTargetNoFilterAnnounce(55959, 2)\nlocal warningFlame\t\t= mod:NewSpellAnnounce(55931, 3)\n\nlocal timerEmbrace\t\t= mod:NewTargetTimer(20, 55959, nil, nil, nil, 3, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerFlameCD\t\t= mod:NewCDTimer(15, 55931, nil, nil, nil, 3)\n\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 55931 then\n\t\twarningFlame:Show()\n\t\ttimerFlameCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(55959, 59513) then\n\t\twarningEmbrace:Show(args.destName)\n\t\ttimerEmbrace:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(55959, 59513) then\n\t\ttimerEmbrace:Cancel()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/AhnKahet/Volazj.lua",
    "content": "local mod\t= DBM:NewMod(\"Volazj\", \"DBM-Party-WotLK\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(29311)\nmod:SetEncounterID(215)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(\n\t\"SPELL_CAST_START 60848\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"UNIT_SPELLCAST_START\"\n)\n\nlocal warnShadowCrash\t\t\t= mod:NewTargetAnnounce(62660, 4)\nlocal warningInsanity\t\t\t= mod:NewCastAnnounce(57496, 3)--Not currently working, no CLEU for it\n\nlocal specWarnShadowCrash\t\t= mod:NewSpecialWarningDodge(62660, nil, nil, nil, 1, 2)\nlocal specWarnShadowCrashNear\t= mod:NewSpecialWarningClose(62660, nil, nil, nil, 1, 2)\nlocal yellShadowCrash\t\t\t= mod:NewYell(62660)\n\nlocal timerInsanity\t\t\t\t= mod:NewCastTimer(5, 57496, nil, nil, nil, 6)\nlocal timerAchieve\t\t\t\t= mod:NewAchievementTimer(120, 1862)\n\nfunction mod:OnCombatStart(delay)\n\tif not self:IsDifficulty(\"normal5\") then\n\t\ttimerAchieve:Start(-delay)\n\tend\nend\n\nfunction mod:ShadowCrashTarget(targetname)\n\tif not targetname then\n\t\tif DBM.Options.DebugMode then\n\t\t\twarnShadowCrash:Show(DBM_COMMON_L.UNKNOWN)\n\t\tend\n\t\treturn\n\tend\n\tif self:AntiSpam(2, targetname) then--In case more than 1 pulled and target same person, avoid double/tripple warn\n\t\tif targetname == UnitName(\"player\") then\n\t\t\tspecWarnShadowCrash:Show()\n\t\t\tspecWarnShadowCrash:Play(\"watchstep\")\n\t\t\tyellShadowCrash:Yell()\n\t\telseif self:CheckNearby(5, targetname) then\n\t\t\tspecWarnShadowCrashNear:Show(targetname)\n\t\t\tspecWarnShadowCrashNear:Play(\"watchstep\")\n\t\telse\n\t\t\twarnShadowCrash:Show(targetname)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 60848 then\n\t\tself:BossTargetScanner(args.sourceGUID, \"ShadowCrashTarget\", 0.1, 12, nil, nil, nil, nil, true)\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_START(_, spellName)\n\tif spellName == GetSpellInfo(57496) then -- Insanity\n\t\twarningInsanity:Show()\n\t\ttimerInsanity:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/AzjolNerub/Anubarak.lua",
    "content": "local mod\t= DBM:NewMod(\"Anubarak\", \"DBM-Party-WotLK\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(29120)\nmod:SetEncounterID(218)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 53472 59433\"\n)\n\nlocal warningPound\t\t= mod:NewSpellAnnounce(53472, 3)\n\nlocal timerAchieve\t\t= mod:NewAchievementTimer(240, 1860)\n\nfunction mod:OnCombatStart(delay)\n\tif not self:IsDifficulty(\"normal5\") then\n\t\ttimerAchieve:Start(-delay)\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(53472, 59433) then\n\t\twarningPound:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/AzjolNerub/Hadronox.lua",
    "content": "local mod\t= DBM:NewMod(\"Hadronox\", \"DBM-Party-WotLK\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(28921)\nmod:SetEncounterID(217)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 53030 59417\",\n\t\"SPELL_PERIODIC_DAMAGE 53400 59419\",\n\t\"SPELL_PERIODIC_MISSED 53400 59419\"\n)\n\nlocal warningLeech\t= mod:NewSpellAnnounce(53030, 1)\n\nlocal specWarnGTFO\t= mod:NewSpecialWarningGTFO(53400, nil, nil, nil, 1, 8)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(53030, 59417) and args:IsPlayer() then\n\t\twarningLeech:Show()\n\tend\nend\n\nfunction mod:SPELL_PERIODIC_DAMAGE(_, _, _, destGUID, _, _, spellId, spellName)\n\tif (spellId == 53400 or spellId == 59419) and destGUID == UnitGUID(\"player\") and self:AntiSpam(3, 1) then\n\t\tspecWarnGTFO:Show(spellName)\n\t\tspecWarnGTFO:Play(\"watchfeet\")\n\tend\nend\nmod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE\n"
  },
  {
    "path": "DBM-Party-WotLK/AzjolNerub/Krikthir.lua",
    "content": "local mod\t= DBM:NewMod(\"Krikthir\", \"DBM-Party-WotLK\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(28684)\nmod:SetEncounterID(216)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 52592 59368\",\n\t\"SPELL_CAST_START 52592 59368\"\n)\n\nlocal warnCurse\t= mod:NewSpellAnnounce(52592, 2)\n\nlocal specWarnCurse\t= mod:NewSpecialWarningYou(52592, nil, nil, nil, 1, 2)\n\nlocal timerCurseCD\t= mod:NewCDTimer(10, 52592, nil, nil, nil, 2)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(52592, 59368) then\n\t\twarnCurse:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(52592, 59368) then\n\t\ttimerCurseCD:Start()\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnCurse:Show()\n\t\t\tspecWarnCurse:Play(\"targetyou\")\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/DBM-Party-WotLK.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Dungeons (WotLK)|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Donjons (WotLK)|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Gruppe-WotLK|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Mazmorras (WotLK)|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0隊伍首領-巫妖王之怒|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0队伍-WotLK|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Подземелья (Король-лич)|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0던전 (리분)|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMPartyWotLK_AllSavedVars\n## SavedVariablesPerCharacter: DBMPartyWotLK_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: PARTY\n## X-DBM-Mod-Category: WOTLK\n## X-DBM-StatTypes: normal,heroic\n## X-DBM-Mod-SubCategories: Ahn'Kahet,Azjol-Nerub,CoT: Old Stratholme,Drak'Tharon Keep,Gundrak,Halls of Lightning,Halls of Stone,The Nexus,The Oculus,Utgarde Keep,Utgarde Pinnacle,Violet Hold,Trial of the Champion,The Forge of Souls,Pit of Saron,Halls of Reflection\n## X-DBM-Mod-SubCategories-frFR: Ahn'Kahet,Azjol-Nérub,GT: L'Épuration de Stratholme,Drak'Tharon,Gundrak,Salles de foudre,Salles de pierre,Le Nexus,L'Occulus,Donjon d'Utgarde,Cime d'Utgarde,Fort Pourpre,L'épreuve du champion,La Forge des âmes,La Fosse de Saron,Salles des Reflets\n## X-DBM-Mod-SubCategories-deDE: Ahn'kahet: Das Alte Königreich,Azjol-Nerub,Das Ausmerzen von Stratholme,Feste von Drak'Tharon,Gundrak,Hallen der Blitze,Hallen des Steins,Der Nexus,Das Oculus,Burg Utgarde,Turm Utgarde,Violette Festung,Prüfung des Champions,Die Seelenschmiede,Grube von Saron,Hallen der Reflexion\n## X-DBM-Mod-SubCategories-ruRU: Ан'кахет,Азжол-Неруб,Очищение Стратхольма,Крепость Драк'Тарон,Гундрак,Чертоги Молний,Чертоги Камня,Нексус,Окулус,Крепость Утгард,Вершина Утгард,Аметистовая крепость,Испытание чемпиона,Кузня Душ,Яма Сарона,Залы Отражений\n## X-DBM-Mod-SubCategories-zhTW: 安卡罕特,阿茲歐-奈幽,舊斯坦索姆,德拉克薩隆要塞,剛德拉克,雷光大廳,石之大廳,奧核之心,奧核之眼,俄特加德要塞,俄特加德之巔,紫羅蘭堡,勇士試煉,眾魂熔爐,薩倫之淵,倒影大廳\n## X-DBM-Mod-SubCategories-zhCN: 安卡赫特：古代王国,艾卓-尼鲁布,净化斯坦索姆,达克萨隆要塞,古达克,闪电大厅,岩石大厅,魔枢,魔环,乌特加德城堡,乌特加德之巅,紫罗兰监狱,冠军的试炼,灵魂洪炉,萨隆矿坑,映像大厅\n## X-DBM-Mod-SubCategories-koKR: 안카헤트: 고대 왕국,아졸네룹,시간의 동굴: 옛 스트라솔름,드락타론 성채,군드락,번개의 전당,돌의 전당,마력의 탑,마력의 눈,우트가드 성채,우트가드 첨탑,보랏빛 요새,용사의 시험장,영혼의 제련소,사론의 구덩이,투영의 전당\n## X-DBM-Mod-SubCategories-esES: Ahn'kahlet,Azjol-Nerub,La Matanza de Stratholme,Fortaleza de Drak'Tharon,Gundrak,Cámaras de Relámpagos,Camaras de Piedra,El Nexo,El Oculus,Fortaleza de Utgarde,Pinaculo de Utgarde,El Bastión Violeta,Prueba del Campeón,La Forja de Almas,Foso de Saron,Cámaras de Reflexión\n## X-DBM-Mod-SubCategories-esMX: Ahn'kahlet,Azjol-Nerub,La Matanza de Stratholme,Fortaleza de Drak'Tharon,Gundrak,Cámaras de Relámpagos,Camaras de Piedra,El Nexo,El Oculus,Fortaleza de Utgarde,Pinaculo de Utgarde,El Bastión Violeta,Prueba del Campeón,La Forja de Almas,Foso de Saron,Cámaras de Reflexión\n## X-DBM-Mod-Name: Dungeons (WotLK)\n## X-DBM-Mod-Name-frFR: Donjons (WotLK)\n## X-DBM-Mod-Name-deDE: Gruppe (WotLK)\n## X-DBM-Mod-Name-ruRU: Подземелья (Король-лич)\n## X-DBM-Mod-Name-zhTW: 隊伍首領 (巫妖王之怒)\n## X-DBM-Mod-Name-zhCN: 队伍首领-WotLK\n## X-DBM-Mod-Name-esES: Mazmorras (WotLK)\n## X-DBM-Mod-Name-koKR: 던전 (리분)\n## X-DBM-Mod-Name-esMX: Mazmorras-WotLK\n## X-DBM-Mod-Sort: 100\n## X-DBM-Mod-MapID: 523,534,522,535,531,526,527,521,529,524,525,537,603,602,604,543\n--Trial of champion will be only zone that uses localized text when areaid is working (since it shares same map with trial of crusader and we don't want to load party mods in the raid and vica versa)\n## X-DBM-Mod-LoadZone: Ahn'kahet: The Old Kingdom,Azjol-Nerub,The Culling of Stratholme,Drak'Tharon Keep,Gundrak,Halls of Lightning,Halls of Stone,The Nexus,The Oculus,Utgarde Keep,Utgarde Pinnacle,The Violet Hold,Trial of the Champion,Pit of Saron,The Forge of Souls,Halls of Reflection\n## X-DBM-Mod-LoadZone-frFR: Ahn'kahet : l'Ancien royaume,Azjol -Nérub,L'Épuration de Stratholme,Donjon de Drak'Tharon,Gundrak,Les salles de Foudre,Les salles de Pierre,Le Nexus,L'Oculus,Donjon d'Utgarde,Cime d'Utgarde,Le fort Pourpre,L'épreuve du champion,Fosse de Saron,La Forge des âmes,Salles des Reflets\n## X-DBM-Mod-LoadZone-deDE: Ahn'kahet: Das Alte Königreich,Azjol-Nerub,Das Ausmerzen von Stratholme,Feste Drak'Tharon,Gundrak,Die Hallen der Blitze,Die Hallen des Steins,Der Nexus,Das Oculus,Burg Utgarde,Turm Utgarde,Die Violette Festung,Prüfung des Champions,Die Seelenschmiede,Grube von Saron,Hallen der Reflexion\n## X-DBM-Mod-LoadZone-ruRU: Ан'кахет: Старое Королевство,Азжол-Неруб,Очищение Стратхольма,Крепость Драк'Тарон,Гундрак,Чертоги Молний,Чертоги Камня,Нексус,Окулус,Крепость Утгард,Вершина Утгард,Аметистовая крепость,Испытание чемпиона,Яма Сарона,Кузня Душ,Залы Отражений\n## X-DBM-Mod-LoadZone-zhTW: 安卡罕特:古王國,阿茲歐-奈幽,斯坦索姆的抉擇,德拉克薩隆要塞,剛德拉克,雷光大廳,石之大廳,奧核之心,奧核之眼,俄特加德要塞,俄特加德之巔,紫羅蘭堡,勇士試煉,薩倫之淵,眾魂熔爐,倒影大廳\n## X-DBM-Mod-LoadZone-zhCN: 安卡赫特：古代王国,艾卓-尼鲁布,净化斯坦索姆,达克萨隆要塞,古达克,闪电大厅,岩石大厅,魔枢,魔环,乌特加德城堡,乌特加德之巅,紫罗兰监狱,冠军的试炼,灵魂洪炉,萨隆矿坑,映像大厅\n## X-DBM-Mod-LoadZone-koKR: 안카헤트: 고대 왕국,아졸네룹,옛 스트라솔름,드락타론 성채,군드락,번개의 전당,돌의 전당,마력의 탑,마력의 눈,우트가드 성채,우트가드 첨탑,보랏빛 요새,용사의 시험장,검은바위 나락,붉은십자군 수도원,사론의 구덩이,영혼의 제련소,투영의 전당,그림자송곳니 성채\n## X-DBM-Mod-LoadZone-esES: Ahn'kahet: El Antiguo Reino,Azjol-Nerub,La Matanza de Stratholme,Fortaleza de Drak'Tharon,Gundrak,Cámaras de Relámpagos,Cámaras de Piedra,El Nexo,El Oculus,Fortaleza de Utgarde,Pináculo de Utgarde,El Bastión Violeta,Prueba del Campeón,Foso de Saron,La Forja de Almas,Cámaras de Reflexión\n## X-DBM-Mod-LoadZone-esMX: Ahn'kahet: El Antiguo Reino,Azjol-Nerub,La Matanza de Stratholme,Fortaleza de Drak'Tharon,Gundrak,Cámaras de Relámpagos,Cámaras de Piedra,El Nexo,El Oculus,Fortaleza de Utgarde,Pináculo de Utgarde,El Bastión Violeta,Prueba del Campeón,Foso de Saron,La Forja de Almas,Cámaras de Reflexión\nlocalization.en.lua\nlocalization.cn.lua\nlocalization.ru.lua\nlocalization.fr.lua\nlocalization.tw.lua\nlocalization.kr.lua\nlocalization.de.lua\nlocalization.es.lua\n\nAhnKahet\\Taldaram.lua\nAhnKahet\\Nadox.lua\nAhnKahet\\JedogaShadowseeker.lua\nAhnKahet\\Volazj.lua\nAhnKahet\\Amanitar.lua\n\nAzjolNerub\\Krikthir.lua\nAzjolNerub\\Hadronox.lua\nAzjolNerub\\Anubarak.lua\n\nOldStratholme\\Meathook.lua\nOldStratholme\\SalrammTheFleshcrafter.lua\nOldStratholme\\ChronoLordEpoch.lua\nOldStratholme\\MalGanis.lua\nOldStratholme\\OldStratholmeWaves.lua\n\nDrakTharon\\Trollgore.lua\nDrakTharon\\NovosTheSummoner.lua\nDrakTharon\\Dred.lua\nDrakTharon\\ProphetTharonja.lua\n\nGundrak\\Sladran.lua\nGundrak\\Moorabi.lua\nGundrak\\BloodstoneAnnihilator.lua\nGundrak\\Galdarah.lua\nGundrak\\Eck.lua\n\nHallsOfLightning\\Bjarngrin.lua\nHallsOfLightning\\Volkhan.lua\nHallsOfLightning\\Ionar.lua\nHallsOfLightning\\Loken.lua\n\nHallsOfReflection\\WaveTimers.lua\nHallsOfReflection\\Falric.lua\nHallsOfReflection\\Marwyn.lua\nHallsOfReflection\\LichKingEvent.lua\n\nHallsOfStone\\MaidenOfGrief.lua\nHallsOfStone\\Krystallus.lua\nHallsOfStone\\BrannBronzebeard.lua\nHallsOfStone\\SjonnirTheIronshaper.lua\n\nTheNexus\\Commander.lua\nTheNexus\\GrandMagusTelestra.lua\nTheNexus\\Anomalus.lua\nTheNexus\\OrmorokTheTreeShaper.lua\nTheNexus\\Keristrasza.lua\n\nTheOculus\\DrakosTheInterrogator.lua\nTheOculus\\MageLordUrom.lua\nTheOculus\\VarosCloudstrider.lua\nTheOculus\\LeyGuardianEregos.lua\n\nUtgardeKeep\\Keleseth.lua\nUtgardeKeep\\ConstructorAndController.lua\nUtgardeKeep\\IngvarThePlunderer.lua\n\nUtgardePinnacle\\SvalaSorrowgrave.lua\nUtgardePinnacle\\GortokPalehoof.lua\nUtgardePinnacle\\SkadiTheRuthless.lua\nUtgardePinnacle\\Ymiron.lua\n\nVioletHold\\Erekem.lua\nVioletHold\\Ichoron.lua\nVioletHold\\Lavanthor.lua\nVioletHold\\Moragg.lua\nVioletHold\\Xevoss.lua\nVioletHold\\Zuramat.lua\nVioletHold\\Cyanigosa.lua\nVioletHold\\PortalTimers.lua\n\nTrialoftheChampion\\Champions.lua\nTrialoftheChampion\\Eadric_the_Pure.lua\nTrialoftheChampion\\Confessor.lua\nTrialoftheChampion\\Black_Knight.lua\n\nForgeofSouls\\Bronjahm.lua\nForgeofSouls\\DevourerofSouls.lua\n\nPitofSaron\\Ick.lua\nPitofSaron\\ForgemasterGarfrost.lua\nPitofSaron\\ScourgelordTyrannus.lua\n"
  },
  {
    "path": "DBM-Party-WotLK/DrakTharon/Dred.lua",
    "content": "local mod\t= DBM:NewMod(\"KingDred\", \"DBM-Party-WotLK\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(27483)\nmod:SetEncounterID(373)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 22686\",\n\t\"SPELL_AURA_APPLIED 48920 48873 48878\"\n)\n\nlocal warningSlash\t= mod:NewSpellAnnounce(48873, 3)\nlocal warningBite\t= mod:NewTargetNoFilterAnnounce(48920, 2, nil, \"Healer\")\nlocal warningFear\t= mod:NewSpellAnnounce(22686, 1)\n\nlocal timerFearCD\t= mod:NewCDTimer(15, 22686, nil, nil, nil, 2)  -- cooldown ??\nlocal timerSlash\t= mod:NewTargetTimer(10, 48873)\nlocal timerSlashCD\t= mod:NewCDTimer(18, 48873, nil, \"Tank|Healer\", nil, 5)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 22686 and args.sourceGUID == 27483 then\n\t\twarningFear:Show()\n\t\ttimerFearCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 48920 then\n\t\twarningBite:Show(args.destName)\n\telseif args.spellId == 48873 then\n\t\twarningSlash:Show()\n\t\ttimerSlash:Start(15, args.destName)\n\t\ttimerSlashCD:Start()\n\telseif args.spellId == 48878 then\n\t\twarningSlash:Show()\n\t\ttimerSlash:Start(10, args.destName)\n\t\ttimerSlashCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/DrakTharon/NovosTheSummoner.lua",
    "content": "local mod\t= DBM:NewMod(\"NovosTheSummoner\", \"DBM-Party-WotLK\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(26631)\nmod:SetEncounterID(371)\n\nmod:RegisterCombat(\"yell\", L.YellPull)\nmod:RegisterKill(\"yell\", L.YellKill)\nmod:SetWipeTime(25)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 59856 59854\",\n\t\"SPELL_AURA_APPLIED 59856 59854\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal WarnCrystalHandler\t\t= mod:NewAddsLeftAnnounce(49179, 2, 59910)\nlocal warnPhase2\t\t\t\t= mod:NewPhaseAnnounce(2)\nlocal warnCurseTarget\t\t\t= mod:NewTargetAnnounce(59856)\n\nlocal specwarnCurse\t\t\t\t= mod:NewSpecialWarningDispel(59856, \"RemoveCurse\")\nlocal specwarnSnow\t\t\t\t= mod:NewSpecialWarningMove(59854)\n\nlocal timerCrystalHandler\t\t= mod:NewNextTimer(20, 49179, nil, nil, nil, 1, 59910, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerNextCurse\t\t\t= mod:NewCDTimer(20, 59856)\n\nmod.vb.CrystalHandlers = 4\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\ttimerCrystalHandler:Start(25.5-delay)\n\tself.vb.CrystalHandlers = 4\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.HandlerYell then\n\t\tself.vb.CrystalHandlers = self.vb.CrystalHandlers - 1\n\t\tWarnCrystalHandler:Show(self.vb.CrystalHandlers)\n\t\tif self.vb.CrystalHandlers > 0 then\n\t\t\ttimerCrystalHandler:Start()\n\t\tend\n\telseif msg == L.Phase2 then\n\t\tself:SetStage(2)\n\t\twarnPhase2:Show()\n\tend\nend\n\n-- need transcriptor logs to validate this. Seems unnecessary to have this event duplication\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 59856 then\n\t\twarnCurseTarget:Show(args.destName)\n\t\tspecwarnCurse:Show()\n\t\ttimerNextCurse:Start()\n\telseif args.spellId == 59854 and self:AntiSpam(1,2) then\n\t\tspecwarnSnow:Show()\n\tend\nend\nmod.SPELL_AURA_APPLIED = mod.SPELL_CAST_SUCCESS\n"
  },
  {
    "path": "DBM-Party-WotLK/DrakTharon/ProphetTharonja.lua",
    "content": "local mod\t= DBM:NewMod(\"ProphetTharonja\", \"DBM-Party-WotLK\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(26632)\nmod:SetEncounterID(375)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 49548 59969\",\n\t\"SPELL_AURA_APPLIED 49356\",\n\t\"UNIT_HEALTH\"\n)\n\nlocal warningDecayFleshSoon\t\t= mod:NewSoonAnnounce(49356, 2)\nlocal warningCloud\t\t\t\t= mod:NewSpellAnnounce(49548, 3)\nlocal warningFleshSoon\t\t\t= mod:NewSoonAnnounce(49356, 3)\nlocal warningFlesh\t\t\t\t= mod:NewSpellAnnounce(49356, 3)\n\nmod.vb.warnedDecay = false\n\nfunction mod:OnCombatStart()\n\tself.vb.warnedDecay = false\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(49548, 59969) then\n\t\twarningCloud:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 49356 and self:AntiSpam(1) then\n\t\twarningFleshSoon:Show()\n\t\twarningFlesh:Schedule(5)\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif not self.vb.warnedDecay and self:GetUnitCreatureId(uId) == 26632 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.58 then\n\t\tself.vb.warnedDecay = true\n\t\twarningDecayFleshSoon:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/DrakTharon/Trollgore.lua",
    "content": "local mod\t= DBM:NewMod(\"Trollgore\", \"DBM-Party-WotLK\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(26630)\nmod:SetEncounterID(369)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 49555\",\n\t\"SPELL_CAST_SUCCESS 59803\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\"\n)\n\nlocal warnConsume\t\t= mod:NewSpellAnnounce(59803,1)\n\nlocal timerExplosionCD\t= mod:NewCDTimer(16, 49555)\nlocal timerNextConsume\t= mod:NewNextTimer(15, 59803)\n\nfunction mod:OnCombatStart()\n\ttimerExplosionCD:Start(3)\n\ttimerNextConsume:Start()\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 49555 then\n\t\ttimerExplosionCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 59803 and self:AntiSpam(1) then\n\t\twarnConsume:Show()\n\t\ttimerNextConsume:Start()\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)\n\tif msg == L.YellExplosion or msg:find(L.YellExplosion) then\n\t\ttimerExplosionCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/ForgeofSouls/Bronjahm.lua",
    "content": "local mod\t= DBM:NewMod(\"Bronjahm\", \"DBM-Party-WotLK\", 14)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(36497)\nmod:SetEncounterID(829)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 68872\",\n\t\"SPELL_AURA_APPLIED 68839\",\n\t\"UNIT_HEALTH\"\n)\n\nlocal warnSoulstormSoon\t\t= mod:NewSoonAnnounce(68872, 2)\nlocal warnCorruptSoul\t\t= mod:NewTargetNoFilterAnnounce(68839, 4)\n\nlocal specwarnSoulstorm\t\t= mod:NewSpecialWarningSpell(68872, nil, nil, nil, 2, 2)\nlocal specwarnCorruptedSoul\t= mod:NewSpecialWarningMoveTo(68839, nil, nil, nil, 1, 7)\n\nlocal timerSoulstormCast\t= mod:NewCastTimer(4, 68872, nil, nil, nil, 2)\n\nmod.vb.warned_preStorm = false\n\nfunction mod:OnCombatStart()\n\tself.vb.warned_preStorm = false\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 68872 then\t\t\t\t\t\t\t-- Soulstorm\n\t\tspecwarnSoulstorm:Show()\n\t\tspecwarnSoulstorm:Play(\"aesoon\")\n\t\ttimerSoulstormCast:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 68839 then\t\t\t\t\t\t\t-- Corrupt Soul\n\t\tif args:IsPlayer() then\n\t\t\tspecwarnCorruptedSoul:Show(DBM_COMMON_L.EDGE)\n\t\t\tspecwarnCorruptedSoul:Play(\"runtoedge\")\n\t\telse\n\t\t\twarnCorruptSoul:Show(args.destName)\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif not self.vb.warned_preStorm and self:GetUnitCreatureId(uId) == 36497 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.40 then\n\t\tself.vb.warned_preStorm = true\n\t\twarnSoulstormSoon:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/ForgeofSouls/DevourerofSouls.lua",
    "content": "local mod\t= DBM:NewMod(\"DevourerofSouls\", \"DBM-Party-WotLK\", 14)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(36502)\nmod:SetEncounterID(831)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 68982 70322 68820 68939 68899 70324\",\n\t\"SPELL_AURA_APPLIED 69051 68939\",\n\t\"SPELL_AURA_REMOVED 69051\"\n)\n\nlocal warnUnleashedSouls\t\t= mod:NewSpellAnnounce(68939, 3)\nlocal warnWellofSouls\t\t\t= mod:NewSpellAnnounce(68820, 3)\nlocal warnMirroredSoul\t\t\t= mod:NewTargetAnnounce(69051, 4)\n\nlocal specwarnMirroredSoul\t\t= mod:NewSpecialWarningReflect(69051, nil, nil, nil, 1, 2)\nlocal specwarnWailingSouls\t\t= mod:NewSpecialWarningSpell(68899, nil, nil, nil, 2, 2)\nlocal specwarnPhantomBlast\t\t= mod:NewSpecialWarningInterrupt(68982, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerMirroredSoul\t\t\t= mod:NewTargetTimer(8, 69051, nil, nil, nil, 3)\nlocal timerUnleashedSouls\t\t= mod:NewBuffActiveTimer(5, 68939, nil, nil, nil, 2)\n\nmod:AddSetIconOption(\"SetIconOnMirroredTarget\", 69051, false, false, {8})\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(68982, 70322) and self:CheckInterruptFilter(args.sourceGUID, false, true) then\t-- Phantom Blast\n\t\tspecwarnPhantomBlast:Show(args.sourceName)\n\t\tspecwarnPhantomBlast:Play(\"kickcast\")\n\telseif args.spellId == 68820 then\t\t\t\t\t-- Well of Souls\n\t\twarnWellofSouls:Show()\n\telseif args.spellId == 68939 then\t\t\t\t\t-- Unleashed Souls\n\t\twarnUnleashedSouls:Show()\n\telseif args:IsSpellID(68899, 70324) then\t\t\t\t\t-- Wailing Souls\n\t\tspecwarnWailingSouls:Show()\n\t\tspecwarnWailingSouls:Play(\"aesoon\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 69051 and args:IsDestTypePlayer() then\t-- Mirrored Soul\n\t\twarnMirroredSoul:Show(args.destName)\n\t\ttimerMirroredSoul:Start(args.destName)\n\t\tspecwarnMirroredSoul:Show(args.sourceName)--if sourcename isn't good use L.name\n\t\tspecwarnMirroredSoul:Play(\"stopattack\")\n\t\tif self.Options.SetIconOnMirroredTarget then\n\t\t\tself:SetIcon(args.destName, 8, 8)\n\t\tend\n\telseif args.spellId == 68939 then\t\t\t\t\t\t\t-- Unleashed Souls\n\t\ttimerUnleashedSouls:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 69051 and args:IsDestTypePlayer() then\t-- Mirrored Soul\n\t\ttimerMirroredSoul:Cancel(args.destName)\n\t\tif self.Options.SetIconOnMirroredTarget then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/Gundrak/BloodstoneAnnihilator.lua",
    "content": "local mod\t= DBM:NewMod(\"BloodstoneAnnihilator\", \"DBM-Party-WotLK\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(29307)\nmod:SetEncounterID(385)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 54850 54878\",\n\t\"SPELL_PERIODIC_DAMAGE 59451\"\n)\n\nlocal warningStone\t\t\t= mod:NewSpellAnnounce(54878, 3)\nlocal warningElemental\t\t= mod:NewSpellAnnounce(54850, 3)\n\nlocal specWarnPurpleShit\t= mod:NewSpecialWarningGTFO(59451, nil, nil, nil, 1, 8)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 54850 then\n\t\twarningElemental:Show()\n\telseif args.spellId == 54878 then\n\t\twarningStone:Show()\n\tend\nend\n\nfunction mod:SPELL_PERIODIC_DAMAGE(_, _, _, destGUID, _, _, spellId, spellName)\n\tif spellId == 59451 and destGUID == UnitGUID(\"player\") and self:AntiSpam(2, 1) and not self:IsTrivial() then\n\t\tspecWarnPurpleShit:Show(spellName)\n\t\tspecWarnPurpleShit:Play(\"watchfeet\")\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/Gundrak/Eck.lua",
    "content": "local mod\t= DBM:NewMod(\"Eck\", \"DBM-Party-WotLK\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(29932)\nmod:SetEncounterID(1988)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n)\n\nlocal enrageTimer\t= mod:NewBerserkTimer(120)\n\nfunction mod:OnCombatStart(delay)\n\tenrageTimer:Start(120 - delay)\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/Gundrak/Galdarah.lua",
    "content": "local mod\t= DBM:NewMod(\"Galdarah\", \"DBM-Party-WotLK\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(29306)\nmod:SetEncounterID(390)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 59824 59829\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal warnPhase1\t\t= mod:NewAnnounce(\"TimerPhase1\", 4, \"Interface\\\\Icons\\\\Spell_Shadow_ShadesOfDarkness\")\nlocal warnPhase2\t\t= mod:NewAnnounce(\"TimerPhase2\", 4, \"Interface\\\\Icons\\\\Spell_Shadow_ShadesOfDarkness\")\n\nlocal specWarnSlash\t\t= mod:NewSpecialWarningMove(59824)\n\nlocal timerStomp\t\t= mod:NewCDTimer(20, 59829)\nlocal timerSlash\t\t= mod:NewCDTimer(21, 59824)\nlocal timerCharge\t\t= mod:NewCDTimer(21, 59827)\nlocal timerPhase1\t\t= mod:NewTimer(52, \"TimerPhase1\", 72262)\nlocal timerPhase2\t\t= mod:NewTimer(52, \"TimerPhase2\", 72262)\n\nfunction mod:OnCombatStart()\n\tself:SetStage(1)\n\ttimerSlash:Start()\n\ttimerPhase2:Start(52)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 59824 then\n\t\ttimerSlash:Start()\n\t\tspecWarnSlash:Show()\n\telseif args.spellId == 59829 then\n\t\ttimerStomp:Start()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.YellPhase2_1 or msg:find(L.YellPhase2_1) or msg == L.YellPhase2_2 or msg:find(L.YellPhase2_2) then\n\t\tif self.vb.phase == 1 then\n\t\t\tself:SetStage(2)\n\t\t\ttimerPhase2:Cancel()\n\t\t\twarnPhase2:Show()\n\t\t\ttimerPhase1:Start(52)\n\t\t\ttimerSlash:Cancel()\n\t\t\ttimerStomp:Cancel()\n\t\t\ttimerCharge:Cancel()\n\t\t\ttimerStomp:Start(25)\n\t\t\ttimerCharge:Start(21)\n\t\telseif self.vb.phase == 2 then\n\t\t\tself:SetStage(1)\n\t\t\ttimerPhase1:Cancel()\n\t\t\twarnPhase1:Show()\n\t\t\ttimerPhase2:Start(52)\n\t\t\ttimerSlash:Cancel()\n\t\t\ttimerStomp:Cancel()\n\t\t\ttimerCharge:Cancel()\n\t\t\ttimerSlash:Start()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/Gundrak/Moorabi.lua",
    "content": "local mod\t= DBM:NewMod(\"Moorabi\", \"DBM-Party-WotLK\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(29305)\nmod:SetEncounterID(387)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 55098\",\n\t\"UNIT_HEALTH\"\n)\n\n-- local warnCopies\t\t\t= mod:NewSpellAnnounce(55101, 4)\n\nlocal specWarnTransform\t\t= mod:NewSpecialWarningInterruptCount(55098, nil, nil, nil, 1, 2)\n\nlocal timerTransform\t\t= mod:NewCDTimer(10, 55098, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--experimental\n\nmod.vb.lowHealth = false\nmod.vb.kickCount = 0\n\nfunction mod:OnCombatStart()\n\tself.vb.lowHealth = false\n\tself.vb.kickCount = 0\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 55098 then\n\t\tself.vb.kickCount = self.vb.kickCount + 1\n\t\tspecWarnTransform:Show(args.sourceName, self.vb.kickCount)\n\t\tspecWarnTransform:Play(\"kickcast\")\n\t\tif self.vb.lowHealth then\n\t\t\ttimerTransform:Start(5) --cast every 5 seconds below 50% health\n\t\telse\n\t\t\ttimerTransform:Start() --cast every 10 seconds above 50% health\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif self:GetUnitCreatureId(uId) == 29305 then\n\t\tif not self.vb.lowHealth and UnitHealth(uId) / UnitHealthMax(uId) <= 0.50 then\n\t\t\tself.vb.lowHealth = true\n\t\t\tlocal remaining = timerTransform:GetRemaining()\n\t\t\ttimerTransform:Cancel()\n\t\t\tif remaining > 5 then--Update\n\t\t\t\ttimerTransform:Start(remaining-5)\n\t\t\tend\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/Gundrak/Sladran.lua",
    "content": "local mod\t= DBM:NewMod(\"Sladran\", \"DBM-Party-WotLK\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(29304)\nmod:SetEncounterID(383)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START\"\n)\n\nlocal warningNova\t= mod:NewSpellAnnounce(55081, 3)\n\nlocal timerNovaCD\t= mod:NewCDTimer(24, 55081, nil, nil, nil, 2)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(55081, 59842) then\n\t\twarningNova:Show()\n\t\ttimerNovaCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/HallsOfLightning/Bjarngrin.lua",
    "content": "local mod\t= DBM:NewMod(\"Bjarngrin\", \"DBM-Party-WotLK\", 6)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(28586)\nmod:SetEncounterID(555)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 52027 52028\"\n)\n\nlocal warningWhirlwind\t\t= mod:NewSpellAnnounce(52027, 3)\n\nlocal specWarnWhirlwind\t\t= mod:NewSpecialWarningRun(52027, \"Melee\", nil, nil, 4, 2)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(52027, 52028) then\n\t\tif self.Options.SpecWarn52024run then\n\t\t\tspecWarnWhirlwind:Show()\n\t\t\tspecWarnWhirlwind:Play(\"runout\")\n\t\telse\n\t\t\twarningWhirlwind:Show()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/HallsOfLightning/Ionar.lua",
    "content": "local mod\t= DBM:NewMod(\"Ionar\", \"DBM-Party-WotLK\", 6)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(28546)\nmod:SetEncounterID(559)\nmod:SetUsedIcons(8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 52658 59795\",\n\t\"SPELL_AURA_REMOVED 52658 59795\",\n\t\"SPELL_CAST_START 52770\",\n\t\"UNIT_HEALTH\"\n)\n\nlocal warningDisperseSoon\t= mod:NewSoonAnnounce(52770, 2)\nlocal warningDisperse\t\t= mod:NewSpellAnnounce(52770, 3)\nlocal warningOverload\t\t= mod:NewTargetAnnounce(52658, 2)\n\nlocal specWarnOverload\t\t= mod:NewSpecialWarningMoveAway(52658, nil, nil, nil, 1, 2)\n\nlocal timerOverload\t\t\t= mod:NewTargetTimer(10, 52658, nil, nil, nil, 3)\n\nmod:AddRangeFrameOption(10, 52658)\nmod:AddSetIconOption(\"SetIconOnOverloadTarget\", 52658, true, false, {8})\n\nlocal warnedDisperse = false\n\nfunction mod:OnCombatStart()\n\twarnedDisperse = false\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(52658, 59795) then\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnOverload:Show()\n\t\t\tspecWarnOverload:Play(\"runout\")\n\t\t\tif self.Options.RangeFrame then\n\t\t\t\tDBM.RangeCheck:Show(10)\n\t\t\tend\n\t\telse\n\t\t\twarningOverload:Show(args.destName)\n\t\tend\n\t\ttimerOverload:Start(args.destName)\n\t\tif self.Options.SetIconOnOverloadTarget then\n\t\t\tself:SetIcon(args.destName, 8, 10)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(52658, 59795) then\n\t\tif args:IsPlayer() and self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Hide()\n\t\tend\n\t\tif self.Options.SetIconOnOverloadTarget then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 52770 then\n\t\twarningDisperse:Show()\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif not warnedDisperse and self:GetUnitCreatureId(uId) == 28546 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.54 then\n\t\twarnedDisperse = true\n\t\twarningDisperseSoon:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/HallsOfLightning/Loken.lua",
    "content": "local mod\t= DBM:NewMod(\"Loken\", \"DBM-Party-WotLK\", 6)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(28923)\nmod:SetEncounterID(561)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 52960 59835\"\n)\n\nlocal warningNova\t= mod:NewSpellAnnounce(52960, 3)\n\nlocal specWarnNova\t= mod:NewSpecialWarningRun(52960, false, nil, nil, 4, 2)\n\nlocal timerNovaCD\t= mod:NewCDTimer(30, 52960, nil, nil, nil, 2)\nlocal timerAchieve\t= mod:NewAchievementTimer(120, 1867)\n\nfunction mod:OnCombatStart(delay)\n\tif not self:IsDifficulty(\"normal5\") then\n\t\ttimerAchieve:Start(-delay)\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(52960, 59835) then\n\t\tif self.Options.SpecWarn52960run then\n\t\t\tspecWarnNova:Show()\n\t\t\tspecWarnNova:Play(\"justrun\")\n\t\telse\n\t\t\twarningNova:Show()\n\t\tend\n\t\ttimerNovaCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/HallsOfLightning/Volkhan.lua",
    "content": "local mod\t= DBM:NewMod(\"Volkhan\", \"DBM-Party-WotLK\", 6)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(28587)\nmod:SetEncounterID(557)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 59529 52237\"\n)\n\nlocal warningStomp\t= mod:NewSpellAnnounce(52237, 3)\n\nlocal timerStompCD\t= mod:NewCDTimer(30, 52237, nil, nil, nil, 2)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(59529, 52237) then\n\t\twarningStomp:Show()\n\t\ttimerStompCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/HallsOfStone/BrannBronzebeard.lua",
    "content": "local mod\t= DBM:NewMod(\"BrannBronzebeard\", \"DBM-Party-WotLK\", 7)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(28070)\nmod:SetEncounterID(567)\nmod:SetMinSyncRevision(2861)\n\nmod:RegisterCombat(\"yell\", L.Pull)\nmod:RegisterKill(\"yell\", L.Kill)\nmod:SetMinCombatTime(50)\nmod:SetWipeTime(25)\n\nmod:RegisterEventsInCombat(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal warningPhase\t= mod:NewAnnounce(\"WarningPhase\", 2, \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\")\n\nlocal timerEvent\t= mod:NewTimer(247, \"timerEvent\", \"Interface\\\\Icons\\\\Spell_Holy_BorrowedTime\", nil, nil, 6)\n\nfunction mod:OnCombatStart(delay)\n\ttimerEvent:Start(-delay)\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif L.Phase1 == msg then\n\t\twarningPhase:Show(1)\n\telseif msg == L.Phase2 then\n\t\twarningPhase:Show(2)\n\telseif msg == L.Phase3 then\n\t\twarningPhase:Show(3)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/HallsOfStone/Krystallus.lua",
    "content": "local mod\t= DBM:NewMod(\"Krystallus\", \"DBM-Party-WotLK\", 7)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(27977)\nmod:SetEncounterID(563)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 50833\"\n)\n\nlocal warningShatter\t= mod:NewSpellAnnounce(50810, 3)\n\nlocal timerShatterCD\t= mod:NewCDTimer(25, 50810, nil, nil, nil, 2)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 50833 then\n\t\twarningShatter:Show()\t-- Shatter warning when Ground Slam is cast\n\t\ttimerShatterCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/HallsOfStone/MaidenOfGrief.lua",
    "content": "local mod\t= DBM:NewMod(\"MaidenOfGrief\", \"DBM-Party-WotLK\", 7)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(27975)\nmod:SetEncounterID(565)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 50760 59726\",\n\t\"SPELL_CAST_SUCCESS 50760 59726 50752 59772\",\n\t\"SPELL_AURA_APPLIED 50761 59727\",\n\t\"SPELL_AURA_REMOVED 50761 59727\"\n)\n\nlocal warningWoe\t\t= mod:NewTargetNoFilterAnnounce(50761, 2, nil, \"Healer\", 2)\nlocal warningStorm\t\t= mod:NewSpellAnnounce(50752, 2)\n\nlocal specWarnSorrow\t= mod:NewSpecialWarningMoveTo(50760, nil, nil, nil, 2, 2)\n\nlocal timerWoe\t\t\t= mod:NewTargetTimer(10, 50761, nil, \"Healer\", nil, 5, nil, DBM_COMMON_L.HEALER_ICON..DBM_COMMON_L.MAGIC_ICON)\nlocal timerSorrow\t\t= mod:NewBuffActiveTimer(6, 50760)\nlocal timerStormCD\t\t= mod:NewCDTimer(20, 50752, nil, nil, nil, 3)\nlocal timerSorrowCD\t\t= mod:NewCDTimer(30, 50760, nil, nil, nil, 2)\nlocal timerAchieve\t\t= mod:NewAchievementTimer(60, 1866)\n\nlocal stormName = DBM:GetSpellInfo(50752)\n\nfunction mod:OnCombatStart(delay)\n\tif not self:IsDifficulty(\"normal5\") then\n\t\ttimerAchieve:Start(-delay)\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(50760, 59726) then\n\t\tspecWarnSorrow:Show(stormName)\n\t\tspecWarnSorrow:Play(\"takedamage\")\n\t\ttimerSorrowCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(50760, 59726) then\n\t\ttimerSorrow:Start()\n\telseif args:IsSpellID(50752, 59772) then\n\t\twarningStorm:Show()\n\t\ttimerStormCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(50761, 59727) then\n\t\twarningWoe:Show(args.destName)\n\t\ttimerWoe:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(50761, 59727) then\n\t\ttimerWoe:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/HallsOfStone/SjonnirTheIronshaper.lua",
    "content": "local mod\t= DBM:NewMod(\"SjonnirTheIronshaper\", \"DBM-Party-WotLK\", 7)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(27978)\nmod:SetEncounterID(569)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 59848 50840 59861 51849 50834 59846\"\n)\n\nlocal warningCharge\t\t= mod:NewTargetAnnounce(50834, 2)\nlocal warningRing\t\t= mod:NewSpellAnnounce(50840, 3)\n\nlocal specWarnCharge\t= mod:NewSpecialWarningMoveAway(50834, nil, nil, nil, 1, 2)\nlocal yellCharge\t\t= mod:NewYell(50834)\n\nlocal timerCharge\t\t= mod:NewTargetTimer(10, 50834)\nlocal timerChargeCD\t\t= mod:NewCDTimer(25, 50834, nil, nil, nil, 3)\nlocal timerRingCD\t\t= mod:NewCDTimer(25, 50840, nil, nil, nil, 2)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(59848, 50840, 59861, 51849) then\n\t\twarningRing:Show()\n\t\ttimerRingCD:Start()\n\telseif args:IsSpellID(50834, 59846) then\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnCharge:Show()\n\t\t\tspecWarnCharge:Play(\"runout\")\n\t\t\tyellCharge:Yell()\n\t\telse\n\t\t\twarningCharge:Show(args.destName)\n\t\tend\n\t\ttimerCharge:Start(args.destName)\n\t\ttimerChargeCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/HallsofReflection/Falric.lua",
    "content": "local mod = DBM:NewMod(\"Falric\", \"DBM-Party-WotLK\", 16)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(38112)\nmod:SetEncounterID(841)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 72422 72453 72426 72452 72435\",\n\t\"SPELL_AURA_REMOVED 72422 72453 72426\"\n)\n\nlocal warnFear\t\t\t\t\t= mod:NewSpellAnnounce(72435, 3)\nlocal warnImpendingDespair\t\t= mod:NewTargetNoFilterAnnounce(72426, 3)\nlocal warnQuiveringStrike\t\t= mod:NewTargetNoFilterAnnounce(72422, 3)\n\nlocal timerFear\t\t\t\t\t= mod:NewBuffActiveTimer(4, 72452)\nlocal timerImpendingDespair\t\t= mod:NewTargetTimer(6, 72426, nil, \"Healer\", 2, 5, nil, DBM_COMMON_L.HEALER_ICON..DBM_COMMON_L.MAGIC_ICON)\nlocal timerQuiveringStrike\t\t= mod:NewTargetTimer(5, 72422, nil, \"Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(72422, 72453) then\n\t\ttimerQuiveringStrike:Start(args.destName)\n\t\twarnQuiveringStrike:Show(args.destName)\n\telseif args.spellId == 72426 then\n\t\ttimerImpendingDespair:Start(args.destName)\n\t\twarnImpendingDespair:Show(args.destName)\n\telseif args:IsSpellID(72452, 72435) and self:AntiSpam() then\n\t\twarnFear:Show()\n\t\ttimerFear:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(72422, 72453) then\n\t\ttimerQuiveringStrike:Cancel(args.destName)\n\telseif args.spellId == 72426 then\n\t\ttimerImpendingDespair:Cancel(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/HallsofReflection/LichKingEvent.lua",
    "content": "local mod = DBM:NewMod(\"LichKingEvent\", \"DBM-Party-WotLK\", 16)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetEncounterID(843)\n\nmod:RegisterCombat(\"combat\")\nmod:SetWipeTime(17) -- 16s from gossip to PRD=wave1\n\nmod:RegisterEvents(\n\t\"SPELL_AURA_REMOVED 69708 70194\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal WarnWave\t\t= mod:NewAnnounce(\"WarnWave\", 2)\n\nlocal timerEscape\t= mod:NewAchievementTimer(360, 4526, \"achievementEscape\")\n\nlocal ragingGhoul = L.Ghoul\nlocal witchDoctor = L.WitchDoctor\nlocal abomination = L.Abom\n\nlocal addWaves = {\n\t[1] = { \"6 \"..ragingGhoul, \"1 \"..witchDoctor },\n\t[2] = { \"6 \"..ragingGhoul, \"2 \"..witchDoctor, \"1 \"..abomination },\n\t[3] = { \"6 \"..ragingGhoul, \"2 \"..witchDoctor, \"2 \"..abomination },\n\t[4] = { \"12 \"..ragingGhoul, \"3 \"..witchDoctor, \"3 \"..abomination },\n}\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(69708, 70194) then\t\t\t--Lich King has broken out of his Ice Prison (alliance) / Dark Binding (horde), this starts actual event\n\t\tDBM:StartCombat(self, 0, \"SPELL_AURA_REMOVED\")\n\t\tif self:IsDifficulty(\"heroic5\") then\n\t\t\ttimerEscape:Start()\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.Wave1 or msg:find(L.Wave1) then\n\t\tWarnWave:Show(table.concat(addWaves[1], \", \"))\n\telseif msg == L.Wave2 or msg:find(L.Wave2) then\n\t\tWarnWave:Show(table.concat(addWaves[2], \", \"))\n\telseif msg == L.Wave3 or msg:find(L.Wave3) then\n\t\tWarnWave:Show(table.concat(addWaves[3], \", \"))\n\telseif msg == L.Wave4 or msg:find(L.Wave4) then\n\t\tWarnWave:Show(table.concat(addWaves[4], \", \"))\n\telseif msg == L.ArthasYellKill or msg:find(L.ArthasYellKill) then\n\t\tself:Schedule(UnitFactionGroup(\"player\") == \"Horde\" and 5.55 or 5, DBM.EndCombat, DBM, self, nil, nil, \"Scheduled yell\")\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/HallsofReflection/Marwyn.lua",
    "content": "local mod = DBM:NewMod(\"Marwyn\", \"DBM-Party-WotLK\", 16)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(38113)\nmod:SetEncounterID(839)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 72362 72436 72363\",\n\t\"SPELL_CAST_SUCCESS 72362\"\n)\n\nlocal warnWellCorruption\t\t= mod:NewSpellAnnounce(72362, 3)\nlocal warnCorruptedFlesh\t\t= mod:NewSpellAnnounce(72363, 3)\n\nlocal specWarnWellCorruption\t= mod:NewSpecialWarningMove(72362, nil, nil, nil, 1, 8)\n\nlocal timerWellCorruptionCD\t\t= mod:NewCDTimer(13, 72362, nil, nil, nil, 3)\nlocal timerCorruptedFlesh\t\t= mod:NewBuffActiveTimer(8, 72363, nil, nil, nil, 5)\nlocal timerCorruptedFleshCD\t\t= mod:NewCDTimer(20, 72363, nil, nil, nil, 2)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 72362 and args:IsPlayer() then\n\t\tspecWarnWellCorruption:Show()\n\t\tspecWarnWellCorruption:Play(\"watchfeet\")\n\telseif args:IsSpellID(72436, 72363) then\n\t\tif self:AntiSpam(5) then\n\t\t\twarnCorruptedFlesh:Show()\n\t\t\ttimerCorruptedFlesh:Start()\n\t\t\ttimerCorruptedFleshCD:Start()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 72362 then\n\t\twarnWellCorruption:Show()\n\t\ttimerWellCorruptionCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/HallsofReflection/WaveTimers.lua",
    "content": "local mod = DBM:NewMod(\"HoRWaveTimer\", \"DBM-Party-WotLK\", 16)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220729232007\")\nmod:SetCreatureID(30658)\nmod:SetZone()\n\nmod:RegisterEvents(\n\t\"UPDATE_WORLD_STATES\",\n\t\"UNIT_DIED\"\n)\n\nlocal warnNewWaveSoon\t= mod:NewAnnounce(\"WarnNewWaveSoon\", 2)\nlocal warnNewWave\t\t= mod:NewAnnounce(\"WarnNewWave\", 3)\n\nlocal timerNextWave\t\t= mod:NewTimer(150, \"TimerNextWave\")\n\nmod:AddBoolOption(\"ShowAllWaveWarnings\", true, \"announce\")\nmod:AddBoolOption(\"ShowAllWaveTimers\", false, \"timer\")\n\nmod:RemoveOption(\"HealthFrame\")\n\nlocal lastWave = 0\nlocal FalricDead = false\n\nfunction mod:UPDATE_WORLD_STATES()\n\tlocal text = select(3, GetWorldStateUIInfo(1))\n\tif not text then return end\n\tlocal _, _, wave = string.find(text, L.WaveCheck)\n\tif not wave then\n\t\twave = 0\n\tend\n\twave = tonumber(wave)\n\tlastWave = tonumber(lastWave)\n\tif wave < lastWave then\n\t\tlastWave = 0\n\tend\n\tif wave > lastWave then\n\t\twarnNewWaveSoon:Cancel()\n\t\ttimerNextWave:Cancel()\n\t\tif (wave == 5 and not FalricDead) or wave == 10 then\n\t\t\twarnNewWave:Show(\"Boss\")\n\t\telseif wave > 0 then\n\t\t\tif wave < 5 then\n\t\t\t\tFalricDead = false\n\t\t\tend\n\t\t\tif self.Options.ShowAllWaveWarnings then\n\t\t\t\twarnNewWave:Show(\"Wave\")\n\t\t\tend\n\t\t\tif self.Options.ShowAllWaveTimers then\n\t\t\t\ttimerNextWave:Start()\n\t\t\t\twarnNewWaveSoon:Schedule(140)\n\t\t\tend\n\t\tend\n\telseif wave == 0 then\n\t\twarnNewWaveSoon:Cancel()\n\t\ttimerNextWave:Cancel()\n\tend\n\tlastWave = wave\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 38112 then--falric\n\t\ttimerNextWave:Start(60)\n\t\twarnNewWaveSoon:Schedule(50)\n\t\tFalricDead = true\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/OldStratholme/ChronoLordEpoch.lua",
    "content": "local mod\t= DBM:NewMod(\"ChronoLordEpoch\", \"DBM-Party-WotLK\", 3)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(26532)\nmod:SetEncounterID(295)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 58848 52766\",\n\t\"SPELL_AURA_APPLIED 52772\",\n\t\"SPELL_AURA_REMOVED 52772\"\n)\n\nlocal warningTime\t= mod:NewSpellAnnounce(58848, 3)\nlocal warningCurse\t= mod:NewTargetNoFilterAnnounce(52772, 2, nil, \"RemoveCurse\", 2)\n\nlocal timerCurse\t= mod:NewTargetTimer(10, 52772, nil, \"RemoveCurse\", nil, 5, nil, DBM_COMMON_L.CURSE_ICON)\nlocal timerTimeCD\t= mod:NewCDTimer(25, 58848, nil, nil, nil, 2)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(58848, 52766)  then\n\t\twarningTime:Show()\n\t\ttimerTimeCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 52772 then\n\t\twarningCurse:Show(args.destName)\n\t\ttimerCurse:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 52772 then\n\t\ttimerCurse:Cancel(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/OldStratholme/MalGanis.lua",
    "content": "local mod\t= DBM:NewMod(\"MalGanis\", \"DBM-Party-WotLK\", 3)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(26533)\nmod:SetEncounterID(296)\n\nmod:RegisterCombat(\"combat\")\nmod:RegisterKill(\"yell\", L.Outro)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 52721 58849\",\n\t\"SPELL_AURA_REMOVED 52721 58849\"\n)\n\nlocal warningSleep\t= mod:NewTargetNoFilterAnnounce(52721, 2)\n\nlocal timerSleep\t= mod:NewTargetTimer(10, 52721, nil, nil, nil, 5, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerSleepCD\t= mod:NewCDTimer(20, 52721, nil, nil, nil, 3)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(52721, 58849) then\n\t\twarningSleep:Show(args.destName)\n\t\ttimerSleep:Start(args.destName)\n\t\ttimerSleepCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(52721, 58849) then\n\t\ttimerSleep:Cancel()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/OldStratholme/Meathook.lua",
    "content": "local mod\t= DBM:NewMod(\"Meathook\", \"DBM-Party-WotLK\", 3)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(26529)\nmod:SetEncounterID(293)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 52696 58823\"\n)\n\nlocal warningChains\t\t= mod:NewTargetNoFilterAnnounce(52696, 4)\n\nlocal timerChains\t\t= mod:NewTargetTimer(5, 52696, nil, nil, nil, 3)\nlocal timerChainsCD\t\t= mod:NewCDTimer(15, 52696, nil, nil, nil, 3)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(52696, 58823) then\n\t\twarningChains:Show(args.destName)\n\t\ttimerChains:Start(args.destName)\n\t\ttimerChainsCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/OldStratholme/OldStratholmeWaves.lua",
    "content": "local mod\t= DBM:NewMod(\"StratWaves\", \"DBM-Party-WotLK\", 3)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220729232625\")\n\nmod:RegisterEvents(\n\t\"UPDATE_WORLD_STATES\",\n\t\"UNIT_DIED\",\n\t\"CHAT_MSG_MONSTER_SAY\"\n)\nmod.noStatistics = true\n\nlocal warningWaveNow\t= mod:NewAnnounce(\"WarningWaveNow\", 3)\n\nlocal timerWaveIn\t\t= mod:NewTimer(20, \"TimerWaveIn\", 57687, nil, nil, 1)\nlocal timerRoleplay\t\t= mod:NewTimer(162, \"TimerRoleplay\")\n\nlocal devouring = L.Devouring\nlocal meathook = L.Meathook\nlocal salramm = L.Salramm\nlocal enraged = L.Enraged\nlocal necro = L.Necro\nlocal fiend = L.Fiend\nlocal abom = L.Abom\n\nlocal wavesNormal = {\n\t{2, devouring},\n\t{2, devouring},\n\t{2, devouring},\n\t{2, devouring},\n\t{DBM_COMMON_L.BOSS .. \": \" .. meathook},\n\t{2, devouring},\n\t{2, devouring},\n\t{2, devouring},\n\t{2, devouring},\n\t{DBM_COMMON_L.BOSS .. \": \" .. salramm},\n}\n\nlocal wavesHeroic = {\n\t{3, devouring},\n\t{1, devouring, 1, enraged, 1, necro},\n\t{1, devouring, 1, enraged, 1, necro, 1, fiend},\n\t{1, necro, 4, L.Acolyte, 1, fiend},\n\t{DBM_COMMON_L.BOSS .. \": \" .. meathook},\n\t{1, devouring, 1, necro, 1, fiend, 1, L.Stalker},\n\t{1, devouring, 2, enraged, 1, abom},\n\t{1, devouring, 1, enraged, 1, necro, 1, abom},\n\t{1, devouring, 1, necro, 1, fiend, 1, abom},\n\t{DBM_COMMON_L.BOSS .. \": \" .. salramm},\n}\n\nlocal waveInfo\nlocal lastWave = 0\n\nlocal function getWaveString(self, wave)\n\tif self:IsDifficulty(\"heroic5\") then\n\t\twaveInfo = wavesHeroic[wave]\n\telse\n\t\twaveInfo = wavesNormal[wave]\n\tend\n\tif #waveInfo == 1 then\n\t\treturn L.WaveBoss:format(unpack(waveInfo))\n\telseif #waveInfo == 2 then\n\t\treturn L.Wave1:format(unpack(waveInfo))\n\telseif #waveInfo == 4 then\n\t\treturn L.Wave2:format(unpack(waveInfo))\n\telseif #waveInfo == 6 then\n\t\treturn L.Wave3:format(unpack(waveInfo))\n\telseif #waveInfo == 8 then\n\t\treturn L.Wave4:format(unpack(waveInfo))\n\tend\nend\n\nfunction mod:UPDATE_WORLD_STATES()\n\tlocal text = select(3, GetWorldStateUIInfo(2))\n\tif not text then return end\n\tlocal _, _, wave = string.find(text, L.WaveCheck)\n\tif not wave then\n\t\twave = 0\n\tend\n\twave = tonumber(wave)\n\tlastWave = tonumber(lastWave)\n\tif wave < lastWave then\n\t\tlastWave = 0\n\tend\n\tif wave > lastWave then\n\t\twarningWaveNow:Show(wave, getWaveString(self, wave))\n\t\tlastWave = wave\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tif bit.band(args.destGUID:sub(0, 5), 0x00F) == 3 then\n\t\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\t\tif cid == 26529 then\n\t\t\ttimerWaveIn:Start()\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_SAY(msg)\n\tif msg == L.Roleplay or msg:find(L.Roleplay) then\n\t\ttimerRoleplay:Start()--Arthas preaches to uther and jaina\n\telseif msg == L.Roleplay2 or msg:find(L.Roleplay2) then\n\t\ttimerRoleplay:Start(106)--Arthas prances around blabbing with malganis\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/OldStratholme/SalrammTheFleshCrafter.lua",
    "content": "local mod\t= DBM:NewMod(\"SalrammTheFleshcrafter\", \"DBM-Party-WotLK\", 3)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(26530)\nmod:SetEncounterID(294)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 58845 52709\",\n\t\"SPELL_AURA_REMOVED 58845\",\n\t\"SPELL_SUMMON 52451\"\n)\n\nlocal warningCurse\t= mod:NewTargetNoFilterAnnounce(58845, 2, nil, \"RemoveCurse\", 2)\nlocal warningSteal\t= mod:NewTargetNoFilterAnnounce(52709, 2)\nlocal warningGhoul\t= mod:NewSpellAnnounce(52451, 3)\n\nlocal timerGhoulCD\t= mod:NewCDTimer(20, 52451, nil, nil, nil, 1)\nlocal timerCurse\t= mod:NewTargetTimer(30, 58845, nil, \"RemoveCurse\", nil, 5, nil, DBM_COMMON_L.CURSE_ICON)\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 52451 then\n\t\twarningGhoul:Show()\n\t\ttimerGhoulCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 58845 then\n\t\twarningCurse:Show(args.destName)\n\t\ttimerCurse:Start(args.destName)\n\telseif args.spellId == 52709 then\n\t\twarningSteal:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 58845 then\n\t\ttimerCurse:Cancel(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/PitofSaron/ForgemasterGarfrost.lua",
    "content": "local mod\t= DBM:NewMod(\"ForgemasterGarfrost\", \"DBM-Party-WotLK\", 15)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(36494)\nmod:SetEncounterID(833)\nmod:SetUsedIcons(8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 68788\",\n\t\"SPELL_AURA_APPLIED 70381 72930 68785 70335\",\n\t\"SPELL_AURA_APPLIED_DOSE 68786 70336\",\n\t\"CHAT_MSG_RAID_BOSS_WHISPER\"\n)\n\nlocal warnForgeWeapon\t\t\t= mod:NewSpellAnnounce(68785, 2)\nlocal warnDeepFreeze\t\t\t= mod:NewTargetAnnounce(70381, 2)\nlocal warnSaroniteRock\t\t\t= mod:NewTargetAnnounce(68789, 3)\n\nlocal specWarnSaroniteRock\t\t= mod:NewSpecialWarningYou(68789, nil, nil, nil, 1, 2)\nlocal yellRock\t\t\t\t\t= mod:NewYellMe(68789)\nlocal specWarnSaroniteRockNear\t= mod:NewSpecialWarningClose(68789, nil, nil, nil, 1, 2)\nlocal specWarnPermafrost\t\t= mod:NewSpecialWarningStack(68786, nil, 9, nil, nil, 1, 2)\n\nlocal timerSaroniteRockCD\t\t= mod:NewCDTimer(15.5, 68789, nil, nil, nil, 3)--15.5-20\nlocal timerDeepFreezeCD\t\t\t= mod:NewCDTimer(19, 70381, nil, \"Healer\", 2, 5, nil, DBM_COMMON_L.HEALER_ICON)\nlocal timerDeepFreeze\t\t\t= mod:NewTargetTimer(14, 70381, nil, false, 3, 5)\n\nmod:AddSetIconOption(\"SetIconOnSaroniteRockTarget\", 68789, true, false, {8})\nmod:AddBoolOption(\"AchievementCheck\", false, \"announce\")\n\nmod.vb.warnedfailed = false\n\nfunction mod:OnCombatStart()\n\tself.vb.warnedfailed = false\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 68788 then\t\t\t\t\t\t\t\t-- Throw Saronite\n\t\ttimerSaroniteRockCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(70381, 72930) then\t\t\t\t\t\t-- Deep Freeze\n\t\twarnDeepFreeze:Show(args.destName)\n\t\ttimerDeepFreeze:Start(args.destName)\n\t\ttimerDeepFreezeCD:Start()\n\telseif args:IsSpellID(68785, 70335) then\t\t\t\t\t-- Forge Frostborn Mace\n\t\twarnForgeWeapon:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED_DOSE(args)\n\tif args:IsSpellID(68786, 70336) then\n\t\tlocal amount = args.amount or 1\n\t\tif amount >= 9 and args:IsPlayer() and self:AntiSpam(5) then --11 stacks is what's needed for achievement, 9 to give you time to clear/dispel\n\t\t\tspecWarnPermafrost:Show(amount)\n\t\t\tspecWarnPermafrost:Play(\"stackhigh\")\n\t\tend\n\t\tif self.Options.AchievementCheck and not self.vb.warnedfailed then\n\t\t\tif amount == 9 or amount == 10 then\n\t\t\t\tSendChatMessage(L.AchievementWarning:format(args.destName, amount), \"PARTY\")\n\t\t\telseif amount > 11 then\n\t\t\t\tSendChatMessage(L.AchievementFailed:format(args.destName, amount), \"PARTY\")\n\t\t\t\tself.vb.warnedfailed = true\n\t\t\tend\n\t\tend\n\tend\nend\n\n-- commenting this out (for now?) since warnSaroniteRock fires only when the Rock spawns on the fight, and does not carry dest arg.\n-- therefore we are relying on the sync boss_whisper to provide this warning with proper args.\n--[[function mod:SPELL_CREATE(args)\n\tif args:IsSpellID(68789, 70851) then\t\t\t\t\t\t-- Saronite Rock\n\t\twarnSaroniteRock:Show()\n\tend\nend]]\n\nfunction mod:CHAT_MSG_RAID_BOSS_WHISPER(msg, _, _, _, target)\n\tif msg == L.SaroniteRockThrow or msg:match(L.SaroniteRockThrow) then\n\t\tif target then\n\t\t\tself:SendSync(\"SaroniteRock\", target)\n\t\tend\n\tend\nend\n\nfunction mod:OnSync(msg, targetName)\n\tif msg == \"SaroniteRock\" then\n\t\tif not targetName then return end\n\t\tif targetName == UnitName(\"player\") then\n\t\t\t\tspecWarnSaroniteRock:Show()\n\t\t\t\tspecWarnSaroniteRock:Play(\"watchstep\")\n\t\t\t\tyellRock:Yell()\n\t\telse\n\t\t\tlocal uId = DBM:GetRaidUnitId(targetName)\n\t\t\tif uId and not UnitIsUnit(uId, \"player\") and self:CheckNearby(10, targetName) then\n\t\t\t\tspecWarnSaroniteRockNear:Show(targetName)\n\t\t\t\tspecWarnSaroniteRockNear:Play(\"watchstep\")\n\t\t\telse\n\t\t\t\twarnSaroniteRock:Show(targetName)\n\t\t\tend\n\t\tend\n\t\tif self.Options.SetIconOnSaroniteRockTarget then\n\t\t\tself:SetIcon(targetName, 8, 5)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/PitofSaron/Ick.lua",
    "content": "local mod\t= DBM:NewMod(\"Ick\", \"DBM-Party-WotLK\", 15)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(36476)\nmod:SetEncounterID(835)\nmod:SetUsedIcons(8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 68987 68989 70434 69012\",\n\t\"SPELL_AURA_APPLIED 69029 70850\",\n\t\"SPELL_AURA_REMOVED 69029 70850\",\n\t\"SPELL_PERIODIC_DAMAGE 69024 70436\",\n\t\"SPELL_PERIODIC_MISSED 69024 70436\",\n\t\"UNIT_AURA_UNFILTERED\"\n)\n\nlocal warnPursuitCast\t\t\t= mod:NewCastAnnounce(68987, 3)\nlocal warnPursuit\t\t\t\t= mod:NewTargetNoFilterAnnounce(68987, 4)\n\nlocal specWarnToxic\t\t\t\t= mod:NewSpecialWarningMove(69024, nil, nil, nil, 1, 2)\nlocal specWarnMines\t\t\t\t= mod:NewSpecialWarningSpell(69015, nil, nil, nil, 2, 2)\nlocal specWarnPursuit\t\t\t= mod:NewSpecialWarningRun(68987, nil, nil, 2, 4, 2)\nlocal specWarnPoisonNova\t\t= mod:NewSpecialWarningRun(68989, \"Melee\", nil, 2, 4, 2)\n\nlocal timerSpecialCD\t\t\t= mod:NewCDSpecialTimer(20)--Every 20-22 seconds. In rare cases he skips a special though and goes 40 seconds. unsure of cause\nlocal timerPursuitCast\t\t\t= mod:NewCastTimer(5, 68987, nil, nil, nil, 3)\nlocal timerPursuitConfusion\t\t= mod:NewBuffActiveTimer(12, 69029, nil, nil, nil, 5)\nlocal timerPoisonNova\t\t\t= mod:NewCastTimer(5, 68989, nil, \"Melee\", 2, 2)\n\nmod:AddSetIconOption(\"SetIconOnPursuitTarget\", 68987, true, false, {8})\nmod:GroupSpells(68987, 69029)\n\nlocal pursuit = DBM:GetSpellInfo(68987)\nlocal pursuitTable = {}\n\nfunction mod:OnCombatStart(delay)\n\ttable.wipe(pursuitTable)\n\ttimerSpecialCD:Start(-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 68987 then\t\t\t\t\t\t\t-- Pursuit\n\t\twarnPursuitCast:Show()\n\t\ttimerPursuitCast:Start()\n\t\ttimerSpecialCD:Start()\n\telseif args:IsSpellID(68989, 70434) then\t\t\t\t-- Poison Nova\n\t\ttimerPoisonNova:Start()\n\t\tspecWarnPoisonNova:Show()\n\t\tspecWarnPoisonNova:Play(\"runout\")\n\t\ttimerSpecialCD:Start()\n\telseif args.spellId == 69012 then\t\t\t\t--Explosive Barrage\n\t\tspecWarnMines:Show()\n\t\tspecWarnMines:Play(\"watchstep\")\n\t\ttimerSpecialCD:Start(22) --Will be 2 seconds longer because of how long barrage lasts\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(69029, 70850) then\t\t\t\t\t\t\t-- Pursuit Confusion\n\t\ttimerPursuitConfusion:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(69029, 70850) then\t\t\t\t\t-- Pursuit Confusion\n\t\ttimerPursuitConfusion:Cancel()\n\tend\nend\n\nfunction mod:SPELL_PERIODIC_DAMAGE(_, _, _, destGUID, _, _, spellId)\n\tif (spellId == 69024 or spellId == 70436) and destGUID == UnitGUID(\"player\") and self:AntiSpam() then\n\t\tspecWarnToxic:Show()\n\t\tspecWarnToxic:Play(\"runaway\")\n\tend\nend\nmod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE\n\nfunction mod:UNIT_AURA_UNFILTERED(uId)\n\tlocal isPursuitDebuff = DBM:UnitDebuff(uId, pursuit)\n\tlocal name = DBM:GetUnitFullName(uId)\n\tif not isPursuitDebuff and pursuitTable[name] then\n\t\tpursuitTable[name] = nil\n\t\tif self.Options.SetIconOnPursuitTarget then\n\t\t\tself:SetIcon(name, 0)\n\t\tend\n\telseif isPursuitDebuff and not pursuitTable[name] then\n\t\tpursuitTable[name] = true\n\t\tif UnitIsUnit(uId, \"player\") then\n\t\t\tspecWarnPursuit:Show()\n\t\t\tspecWarnPursuit:Play(\"justrun\")\n\t\telse\n\t\t\twarnPursuit:Show(name)\n\t\tend\n\t\tif self.Options.SetIconOnPursuitTarget then\n\t\t\tself:SetIcon(name, 8)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/PitofSaron/ScourgelordTyrannus.lua",
    "content": "local mod\t= DBM:NewMod(\"ScourgelordTyrannus\", \"DBM-Party-WotLK\", 15)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(36658, 36661)\nmod:SetEncounterID(837)\nmod:SetUsedIcons(8)\nmod:SetHotfixNoticeRev(20220809000000)\nmod:SetMinSyncRevision(20220809000000)\n\n-- mod:RegisterCombat(\"yell\", L.CombatStart)\n-- mod:RegisterKill(\"yell\", L.YellCombatEnd)\nmod:RegisterCombat(\"combat\")\n-- mod:SetMinCombatTime(40)\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 69629 69167 69172\",\n\t\"SPELL_CAST_SUCCESS 69155 69627\",\n\t\"SPELL_AURA_APPLIED 69172\",\n\t\"SPELL_AURA_REMOVED 69172\",\n\t\"SPELL_PERIODIC_DAMAGE 69238 69628\",\n\t\"SPELL_PERIODIC_MISSED 69238 69628\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\"UNIT_DIED\"\n)\n\nlocal warnForcefulSmash\t\t\t= mod:NewSpellAnnounce(69155, 2, nil, \"Tank\")\nlocal warnOverlordsBrand\t\t= mod:NewTargetAnnounce(69172, 4)\nlocal warnHoarfrost\t\t\t\t= mod:NewTargetAnnounce(69246, 2)\n\nlocal specWarnHoarfrost\t\t\t= mod:NewSpecialWarningMoveAway(69246, nil, nil, nil, 1, 2)\nlocal yellHoarfrost\t\t\t\t= mod:NewYell(69246)\nlocal specWarnHoarfrostNear\t\t= mod:NewSpecialWarningClose(69246, nil, nil, nil, 1, 2)\nlocal specWarnIcyBlast\t\t\t= mod:NewSpecialWarningMove(69238, nil, nil, nil, 1, 2)\nlocal specWarnOverlordsBrand\t= mod:NewSpecialWarningReflect(69172, nil, nil, nil, 3, 2)\nlocal specWarnUnholyPower\t\t= mod:NewSpecialWarningSpell(69167, \"Tank\", nil, nil, 1, 2) --Spell for now. may change to run away if damage is too high for defensive\n\nlocal timerCombatStart\t\t\t= mod:NewCombatTimer(45) -- 2022/08/09 Icecrown log\nlocal timerOverlordsBrandCD\t\t= mod:NewCDTimer(11, 69172, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON) -- ~1s variance (2022/08/08 Lordaeron log || 2022/08/09 Icecrown log) - 11.2, 11.3, 11.7, 11.7, 11.8, 11.5, 12.0, 12.0 || 11.1, 11.7, 12.1, 11.3\nlocal timerOverlordsBrand\t\t= mod:NewTargetTimer(8, 69172, nil, nil, nil, 5)\nlocal timerUnholyPower\t\t\t= mod:NewBuffActiveTimer(10, 69167, nil, \"Tank|Healer\", 2, 5)\nlocal timerUnholyPowerCD\t\t= mod:NewCDTimer(41.3, 69167, nil, \"Tank|Healer\", nil, 5) -- REVIEW! Doesn't cast if kited? ~1s variance? (2022/08/08 Lordaeron log || 2022/08/09 Icecrown log) - 41.3, 41.9 || -\nlocal timerHoarfrostCD\t\t\t= mod:NewCDTimer(24.8, 69246, nil, nil, nil, 3) -- SPELL_CAST_START fires 1s after EMOTE, so use EMOTE instead for time diffs. REVIEW! ~2s variance? (2022/08/08 Lordaeron log || 2022/08/09 Icecrown log) - 24.8, 25.9, 25,6 || 26.0\nlocal timerForcefulSmash\t\t= mod:NewCDTimer(41.4, 69155, nil, \"Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON) -- REVIEW! Doesn't cast if kited? ~1s variance (2022/08/08 Lordaeron log || 2022/08/09 Icecrown log) - 41.4, 41.9 || -\n\nmod:AddSetIconOption(\"SetIconOnHoarfrostTarget\", 69246, true, false, {8})\nmod:AddRangeFrameOption(8, 69246)\n\nfunction mod:OnCombatStart(delay)\n\ttimerForcefulSmash:Start(14.3-delay) -- REVIEW! ~1s variance? (2022/08/08 Lordaeron log || 2022/08/09 Icecrown log) - 14.3 || 14.8\n\ttimerOverlordsBrandCD:Start(4.5-delay) -- REVIEW! ~1s variance? (2022/08/08 Lordaeron log || 2022/08/09 Icecrown log) - 5.5 || 4.5\n\ttimerHoarfrostCD:Start(26.3-delay) -- REVIEW! ~1s variance? (2022/08/08 Lordaeron log || 2022/08/09 Icecrown log) - 25.3 || 25.8\n\ttimerUnholyPowerCD:Start(15.3-delay) -- REVIEW! ~1s variance? (2022/08/08 Lordaeron log || 2022/08/09 Icecrown log) - 15.3 || 15.8\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(69629, 69167) then\t\t\t\t\t-- Unholy Power\n\t\tspecWarnUnholyPower:Show()\n\t\tspecWarnUnholyPower:Play(\"justrun\")\n\t\ttimerUnholyPower:Start()\n\t\ttimerUnholyPowerCD:Start()\n\telseif args.spellId == 69172 then\t\t\t\t\t\t-- Overlord's Brand\n\t\ttimerOverlordsBrandCD:Start() -- more accurate here than on SPELL_AURA_APPLIED due to ability travel time\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(69155, 69627) then\t\t\t\t\t-- Forceful Smash\n\t\twarnForcefulSmash:Show()\n\t\ttimerForcefulSmash:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 69172 then\t\t\t\t\t\t\t-- Overlord's Brand\n\t\ttimerOverlordsBrand:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnOverlordsBrand:Show(args.sourceName)\n\t\t\tspecWarnOverlordsBrand:Play(\"stopattack\")\n\t\telse\n\t\t\twarnOverlordsBrand:Show(args.destName)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 69172 then\t\t\t\t\t\t\t-- Overlord's Brand\n\t\ttimerOverlordsBrand:Stop(args.destName)\n\tend\nend\n\nfunction mod:SPELL_PERIODIC_DAMAGE(_, _, _, destGUID, _, _, spellId)\n\tif (spellId == 69238 or spellId == 69628) and destGUID == UnitGUID(\"player\") and self:AntiSpam() then\t\t-- Icy Blast, MOVE!\n\t\tspecWarnIcyBlast:Show()\n\t\tspecWarnIcyBlast:Play(\"runaway\")\n\tend\nend\nmod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE\n\nfunction mod:UNIT_DIED(args)\n\tif self:GetCIDFromGUID(args.destGUID) == 36658 then\n\t\tDBM:EndCombat(self)\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg, _, _, _, target)\n\tif msg == L.HoarfrostTarget or msg:find(L.HoarfrostTarget) then\n\t\ttarget = target or msg and msg:match(L.HoarfrostTarget)\n\t\tif not target then return end\n\t\ttimerHoarfrostCD:Start()\n\t\ttarget = DBM:GetUnitFullName(target)\n\t\tif target == UnitName(\"player\") then\n\t\t\tspecWarnHoarfrost:Show()\n\t\t\tspecWarnHoarfrost:Play(\"targetyou\")\n\t\t\tyellHoarfrost:Yell()\n\t\t\tif self.Options.RangeFrame then\n\t\t\t\tDBM.RangeCheck:Show(8, nil, nil, nil, nil, 5)\n\t\t\tend\n\t\telseif self:CheckNearby(8, target) then\n\t\t\tspecWarnHoarfrostNear:Show(target)\n\t\t\tspecWarnHoarfrostNear:Play(\"watchstep\")\n\t\telse\n\t\t\twarnHoarfrost:Show(target)\n\t\tend\n\t\tif self.Options.SetIconOnHoarfrostTarget then\n\t\t\tself:SetIcon(target, 8, 5)\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif (msg == L.CombatStart or msg == L.CombatStart) then\n\t\ttimerCombatStart:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/TheNexus/Anomalus.lua",
    "content": "local mod\t= DBM:NewMod(\"Anomalus\", \"DBM-Party-WotLK\", 8)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(26763)\nmod:SetEncounterID(522)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_SUMMON 47743\",\n\t\"UNIT_HEALTH\"\n)\n\nlocal warningRiftSoon\t= mod:NewSoonAnnounce(47743, 2)\nlocal warningRiftNow\t= mod:NewSpellAnnounce(47743, 3)\n\nlocal warnedRift\t\t= false\n\nfunction mod:OnCombatStart()\n\twarnedRift = false\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 47743 then\n\t\twarningRiftNow:Show()\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif UnitName(uId) == L.name then\n\t\tlocal h = UnitHealth(uId) / UnitHealthMax(uId)\n\t\tif (h > 0.80) or (h < 0.70 and h > 0.55) or (h < 0.45 and h > 0.30) then\n\t\t\twarnedRift = false\n\t\tend\n\t\tif not warnedRift then\n\t\t\tif (h < 0.80 and h > 0.77) or (h < 0.55 and h > 0.52) or (h < 0.30 and h > 0.27) then\n\t\t\t\twarningRiftSoon:Show()\n\t\t\t\twarnedRift = true\n\t\t\tend\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/TheNexus/Commander.lua",
    "content": "local mod = DBM:NewMod(\"Commander\", \"DBM-Party-WotLK\", 8)\nlocal L = mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\n\nif UnitFactionGroup(\"player\") == \"Alliance\" then\n\tmod:SetCreatureID(26798)\nelse\n\tmod:SetCreatureID(26796)\nend\nmod:SetEncounterID(519)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 19134\",\n\t\"SPELL_CAST_START 38619 38618\"\n)\n\nlocal warningFear\t\t= mod:NewSpellAnnounce(19134, 3)\nlocal warningWhirlwind\t= mod:NewSpellAnnounce(38619, 3)\n\nlocal specWarnWW\t\t= mod:NewSpecialWarningRun(38619, \"MeleeDps\", nil, nil, 4, 2)\n\nlocal timerFearCD\t\t= mod:NewCDTimer(20, 19134, nil, nil, nil, 2)--Correct?\nlocal timerWhirlwindCD\t= mod:NewCDTimer(15, 38619, nil, nil, nil, 2)--Correct?\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 19134 then\n\t\twarningFear:Show()\n\t\ttimerFearCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(38619, 38618) then\n\t\tif self.Options.SpecWarn38619run then\n\t\t\tspecWarnWW:Show()\n\t\t\tspecWarnWW:Play(\"runaway\")\n\t\telse\n\t\t\twarningWhirlwind:Show()\n\t\tend\n\t\ttimerWhirlwindCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/TheNexus/GrandMagusTelestra.lua",
    "content": "local mod\t= DBM:NewMod(\"GrandMagusTelestra\", \"DBM-Party-WotLK\", 8)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(26731)\nmod:SetEncounterID(520)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"UNIT_HEALTH\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal warningSplitSoon\t= mod:NewAnnounce(\"WarningSplitSoon\", 2)\nlocal warningSplitNow\t= mod:NewAnnounce(\"WarningSplitNow\", 3)\nlocal warningMerge\t\t= mod:NewAnnounce(\"WarningMerge\", 2)\n\nmod.vb.warnedSplit1\t\t= false\nmod.vb.warnedSplit2\t\t= false\n\nfunction mod:OnCombatStart()\n\tself.vb.warnedSplit1 = false\n\tself.vb.warnedSplit2 = false\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif not self.vb.warnedSplit1 and self:GetUnitCreatureId(uId) == 26731 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.58 then\n\t\tself.vb.warnedSplit1 = true\n\t\twarningSplitSoon:Show()\n\telseif not self.vb.warnedSplit2 and not self:IsDifficulty(\"normal5\") and self:GetUnitCreatureId(uId) == 26731 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.19 then\n\t\tself.vb.warnedSplit2 = true\n\t\twarningSplitSoon:Show()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.SplitTrigger1 or msg == L.SplitTrigger2 then\n\t\twarningSplitNow:Show()\n\telseif msg == L.MergeTrigger then\n\t\twarningMerge:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/TheNexus/Keristrasza.lua",
    "content": "local mod\t= DBM:NewMod(\"Keristrasza\", \"DBM-Party-WotLK\", 8)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(26723)\nmod:SetEncounterID(526)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 50997 8599 48179\",\n\t\"SPELL_AURA_REMOVED 50997\"\n)\n\nlocal warningChains\t\t= mod:NewTargetNoFilterAnnounce(50997, 4)\nlocal warningNova\t\t= mod:NewSpellAnnounce(48179, 3)\nlocal warningEnrage\t\t= mod:NewSpellAnnounce(8599, 3, nil, \"Tank|Healer\", 2)\n\nlocal timerChains\t\t= mod:NewTargetTimer(10, 50997, nil, \"Healer\", 2, 5, nil, DBM_COMMON_L.HEALER_ICON..DBM_COMMON_L.MAGIC_ICON)\nlocal timerChainsCD\t\t= mod:NewCDTimer(25, 50997, nil, nil, nil, 3)\nlocal timerNova\t\t\t= mod:NewBuffActiveTimer(10, 48179)\nlocal timerNovaCD\t\t= mod:NewCDTimer(25, 48179, nil, nil, nil, 2)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 50997 then\n\t\twarningChains:Show(args.destName)\n\t\ttimerChains:Start(args.destName)\n\t\ttimerChainsCD:Start()\n\telseif args.spellId == 8599 and args.souceGUID == 26723 then\n\t\twarningEnrage:Show()\n\telseif args.spellId == 48179 then\n\t\twarningNova:Show()\n\t\ttimerNova:Start()\n\t\ttimerNovaCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 50997 then\n\t\ttimerChains:Cancel()\n\tend\nend"
  },
  {
    "path": "DBM-Party-WotLK/TheNexus/OrmorokTheTreeShaper.lua",
    "content": "local mod\t= DBM:NewMod(\"OrmorokTheTreeShaper\", \"DBM-Party-WotLK\", 8)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(26794)\nmod:SetEncounterID(524)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 47958 57082 57083 48017 57086\",\n\t\"SPELL_AURA_APPLIED 47981\",\n\t\"SPELL_AURA_REMOVED 47981\",\n\t\"SPELL_SUMMON 61564\"\n)\n\nlocal warningFrenzy\t\t\t= mod:NewSpellAnnounce(48017, 3, nil, \"Tank|Healer\", 2)\nlocal warningAdd\t\t\t= mod:NewSpellAnnounce(61564, 2)\n\nlocal specWarnReflection\t= mod:NewSpecialWarningReflect(47981, \"SpellCaster\", nil, nil, 1, 2)\nlocal specWarnSpikes\t\t= mod:NewSpecialWarningDodge(47958, nil, nil, nil, 2, 2)\n\nlocal timerReflection\t\t= mod:NewBuffActiveTimer(15, 47981, nil, \"SpellCaster\", 2, 5, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerReflectionCD\t\t= mod:NewCDTimer(30, 47981, nil, \"SpellCaster\", 2, 5, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerSpikesCD\t\t\t= mod:NewCDTimer(12.1, 47958, nil, nil, nil, 3)--Health based or CD?\n\nfunction mod:OnCombatStart(delay)\n\ttimerSpikesCD:Start(10-delay)\n\ttimerReflectionCD:Start(20-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(47958, 57082, 57083) then\n\t\tspecWarnSpikes:Show()\n\t\tspecWarnSpikes:Play(\"watchstep\")\n\t\ttimerSpikesCD:Start()\n\telseif args:IsSpellID(48017, 57086) then\n\t\twarningFrenzy:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 47981 then\n\t\tspecWarnReflection:Show(args.sourceName)\n\t\tspecWarnReflection:Play(\"stopattack\")\n\t\ttimerReflection:Start()\n\t\ttimerReflectionCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 47981 then\n\t\ttimerReflection:Cancel()\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 61564 then\n\t\twarningAdd:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/TheOculus/DrakosTheInterrogator.lua",
    "content": "local mod\t= DBM:NewMod(\"DrakosTheInterrogator\", \"DBM-Party-WotLK\", 9)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(27654)\nmod:SetEncounterID(528)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"UNIT_DIED\"\n)\n\nmod:AddBoolOption(\"MakeitCountTimer\", true, \"timer\", nil, nil, nil, \"at1868\")\n\nfunction mod:UNIT_DIED(args)\n\tif not self:IsDifficulty(\"normal5\") then\n\t\tif self.Options.MakeitCountTimer and not DBT:GetBar(L.MakeitCountTimer) then\n\t\t\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\t\t\tif cid == 27654 then\t\t-- Drakos The Interrogator\n\t\t\t\tDBT:CreateBar(1200, L.MakeitCountTimer)\n\t\t\tend\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/TheOculus/LeyGuardianEregos.lua",
    "content": "local mod\t= DBM:NewMod(\"LeyGuardianEregos\", \"DBM-Party-WotLK\", 9)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(27656)\nmod:SetEncounterID(534)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 51162 51170\"\n)\n\nlocal warningShift\t\t= mod:NewSpellAnnounce(51162, 4)\nlocal warningShiftEnd\t= mod:NewEndAnnounce(51162, 1)\nlocal warningEnraged\t= mod:NewSpellAnnounce(51170, 3)\n\nlocal timerEnraged\t\t= mod:NewBuffActiveTimer(12, 51170, nil, nil, nil, 6)\nlocal timerShift\t\t= mod:NewBuffActiveTimer(18, 51162, nil, nil, nil, 6)\n\n\nfunction mod:OnCombatEnd(wipe)\n\tif not wipe then\n\t\tif DBT:GetBar(L.MakeitCountTimer) then\n\t\t\tDBT:CancelBar(L.MakeitCountTimer)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 51162 then\n\t\twarningShift:Show()\n\t\twarningShiftEnd:Schedule(18)\n\t\ttimerShift:Start()\n\telseif args.spellId == 51170 then\n\t\twarningEnraged:Show()\n\t\ttimerEnraged:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/TheOculus/MageLordUrom.lua",
    "content": "local mod\t= DBM:NewMod(\"MageLordUrom\", \"DBM-Party-WotLK\", 9)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(27655)\nmod:SetEncounterID(532)\nmod:SetMinSyncRevision(2824)\n\nmod:RegisterCombat(\"yell\", L.CombatStart)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 51121 59376\",\n\t\"SPELL_CAST_START 51110 59377\"\n)\n\nlocal warningTimeBomb\t\t= mod:NewTargetNoFilterAnnounce(51121, 4)\n\nlocal specWarnExplosion\t\t= mod:NewSpecialWarningMoveTo(51110, nil, nil, nil, 3, 2)\nlocal specWarnBombYou\t\t= mod:NewSpecialWarningYou(51121)\n\nlocal timerTimeBomb\t\t\t= mod:NewTargetTimer(6, 51121, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON)\nlocal timerExplosion\t\t= mod:NewCastTimer(8, 51110, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(51110, 59377) then\n\t\tspecWarnExplosion:Show(DBM_COMMON_L.BREAK_LOS)\n\t\tspecWarnExplosion:Play(\"findshelter\")\n\t\ttimerExplosion:Start()\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnBombYou:Show()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(51121, 59376) then\n\t\twarningTimeBomb:Show(args.destName)\n\t\ttimerTimeBomb:Start(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/TheOculus/VarosCloudstrider.lua",
    "content": "local mod\t= DBM:NewMod(\"VarosCloudstrider\", \"DBM-Party-WotLK\", 9)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(27447)\nmod:SetEncounterID(530)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 51054 59371\",\n\t\"SPELL_AURA_REMOVED 51054 59371\"\n)\n\nlocal warningAmplify\t= mod:NewTargetNoFilterAnnounce(51054, 2)\n\nlocal timerAmplify\t\t= mod:NewTargetTimer(30, 51054, nil, \"Healer\", nil, 5, nil, DBM_COMMON_L.HEALER_ICON..DBM_COMMON_L.MAGIC_ICON)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(51054, 59371) then\n\t\twarningAmplify:Show(args.destName)\n\t\ttimerAmplify:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(51054, 59371) then\n\t\ttimerAmplify:Cancel(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/TrialoftheChampion/Black_Knight.lua",
    "content": "local mod\t= DBM:NewMod(\"BlackKnight\", \"DBM-Party-WotLK\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(35451, 10000)\t\t-- work around, DBM API failes to handle a Boss to die, rebirth, die again, rebirth again and die to loot...\nmod:SetEncounterID(340)\nmod:SetUsedIcons(8)\n\nmod:RegisterCombat(\"combat\")\nmod:RegisterKill(\"yell\", L.YellCombatEnd)\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 67729 67886\",\n\t\"SPELL_AURA_APPLIED 67823 67882 67751\",\n\t\"SPELL_DAMAGE 67781 67876 67729 67886\",\n\t\"SPELL_MISSED 67781 67876 67729 67886\"\n)\n\nlocal warnMarked\t\t\t= mod:NewTargetNoFilterAnnounce(67823, 3)\n\nlocal specWarnDesecration\t= mod:NewSpecialWarningMove(67781, nil, nil, nil, 1, 8)\nlocal specWarnExplode\t\t= mod:NewSpecialWarningRun(67751, \"Melee\", nil, 2, 4, 2)\n\nlocal timerCombatStart\t\t= mod:NewCombatTimer(38.5)\nlocal timerMarked\t\t\t= mod:NewTargetTimer(10, 67823, nil, nil, nil, 3)\nlocal timerExplode\t\t\t= mod:NewCastTimer(4, 67729, nil, nil, nil, 2)\n\nmod:AddSetIconOption(\"SetIconOnMarkedTarget\", 67823, false, false, {8})\nmod:AddBoolOption(\"AchievementCheck\", false, \"announce\")\n\nlocal warnedfailed = false\n\nfunction mod:OnCombatStart()\n\twarnedfailed = false\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(67729, 67886) and self:AntiSpam(2, 2) then\t\t\t\t\t\t\t-- Explode (elite explodes self, not BK. Phase 2)\n\t\tspecWarnExplode:Show()\n\t\tspecWarnExplode:Play(\"justrun\")\n\t\ttimerExplode:Start()\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, destName, _, spellId)\n\tif (spellId == 67781 or spellId == 67876) and destGUID == UnitGUID(\"player\") and self:AntiSpam(3, 1) then\t\t-- Desecration\n\t\tspecWarnDesecration:Show()\n\t\tspecWarnDesecration:Play(\"watchfeet\")\n\telseif spellId == 67729 or spellId == 67886 then\n\t\tif self.Options.AchievementCheck and not warnedfailed then\n\t\t\tSendChatMessage(L.AchievementFailed:format(destName), \"PARTY\")\n\t\t\twarnedfailed = true\n\t\tend\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(67823, 67882) and args:IsDestTypePlayer() then\t\t\t\t\t\t\t-- Marked For Death\n\t\tif self.Options.SetIconOnMarkedTarget then\n\t\t\tself:SetIcon(args.destName, 8, 10)\n\t\tend\n\t\twarnMarked:Show(args.destName)\n\t\ttimerMarked:Show(args.destName)\n\telseif args.spellId == 67751 and self:AntiSpam(2, 2) then\t-- Ghoul Explode (BK exlodes Army of the dead. Phase 3)\n\t\tspecWarnExplode:Show()\n\t\tspecWarnExplode:Play(\"justrun\")\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.Pull or msg:find(L.Pull) then\n\t\ttimerCombatStart:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/TrialoftheChampion/Champions.lua",
    "content": "local mod\t= DBM:NewMod(\"GrandChampions\", \"DBM-Party-WotLK\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(34657, 34701, 34702, 34703, 34705, 35569, 35570, 35571, 35572, 35617)\nmod:SetEncounterID(334)\n\nmod:RegisterCombat(\"combat\")\nmod:SetWipeTime(60)--prevent wipe for no vehicle user\nmod:SetDetectCombatInVehicle(false)\n\nmod:RegisterKill(\"yell\", L.YellCombatEnd)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 68318 67528\",\n\t\"SPELL_CAST_SUCCESS 66045\",\n\t\"SPELL_AURA_APPLIED 66043 68311 67534 67594 68316\"\n)\n\nlocal warnHealingWave\t\t= mod:NewSpellAnnounce(67528, 2)\nlocal warnPolymorph\t\t\t= mod:NewTargetNoFilterAnnounce(66043, 2)\n\nlocal specWarnPoison\t\t= mod:NewSpecialWarningMove(67594, nil, nil, nil, 1, 8)\nlocal specWarnHaste\t\t\t= mod:NewSpecialWarningDispel(66045, \"MagicDispeller\", nil, nil, 1, 2)\nlocal specWarnHex\t\t\t= mod:NewSpecialWarningDispel(67534, \"RemoveCurse\", nil, nil, 1, 2)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(68318, 67528) then\t\t\t\t\t\t\t\t-- Healing Wave\n\t\twarnHealingWave:Show()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 66045 and not args:IsDestTypePlayer() then\t\t-- Haste\n\t\tspecWarnHaste:Show(args.destName)\n\t\tspecWarnHaste:Play(\"dispelboss\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(66043, 68311) then\t\t\t\t\t\t\t\t-- Polymorph on <x>\n\t\twarnPolymorph:Show(args.destName)\n\telseif args.spellId == 67534 and self:CheckDispelFilter(\"curse\") then\t\t-- Hex of Mending on <x>\n\t\tspecWarnHex:Show(args.destName)\n\t\tspecWarnHex:Play(\"helpdispel\")\n\telseif args:IsSpellID(67594, 68316) and args:IsPlayer() then\t\t-- Standing in Poison Bottle.\n\t\tspecWarnPoison:Show()\n\t\tspecWarnPoison:Play(\"watchfeet\")\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/TrialoftheChampion/Confessor.lua",
    "content": "local mod\t= DBM:NewMod(\"Confessor\", \"DBM-Party-WotLK\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(34928)\nmod:SetEncounterID(338)\n\nmod:RegisterCombat(\"combat\")\nmod:RegisterKill(\"yell\", L.YellCombatEnd)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 66515 66537 67675 66620 67679 66538 67676 66619 67678\",\n\t\"SPELL_AURA_REMOVED 66515 66538 67676 66619 67678\"\n)\n\nlocal warnReflectiveShield\t= mod:NewTargetNoFilterAnnounce(66515, 2)\nlocal warnOldWounds\t\t\t= mod:NewTargetNoFilterAnnounce(66620, 3, nil, \"Tank|Healer\")\n\nlocal specwarnRenew\t\t\t= mod:NewSpecialWarningDispel(66537, \"MagicDispeller\", nil, nil, 1, 2)\nlocal specwarnHolyFire\t\t= mod:NewSpecialWarningDispel(66538, \"RemoveMagic\", nil, nil, 1, 2)\nlocal specwarnShadows\t\t= mod:NewSpecialWarningDispel(66619, \"RemoveMagic\", nil, nil, 1, 2)\n\nlocal timerOldWounds\t\t= mod:NewTargetTimer(12, 67679)\nlocal timerHolyFire\t\t\t= mod:NewTargetTimer(8, 66538, nil, \"RemoveMagic\", 2, 5, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerShadows\t\t\t= mod:NewTargetTimer(5, 66619, nil, \"RemoveMagic\", 2, 5, nil, DBM_COMMON_L.MAGIC_ICON)\n\nmod.vb.shielded = false\n\nfunction mod:OnCombatStart()\n\tself.vb.shielded = false\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 66515 then\t\t\t\t\t\t\t\t\t\t\t\t-- Shield Gained\n\t\twarnReflectiveShield:Show(args.destName)\n\t\tself.vb.shielded = true\n\telseif args:IsSpellID(66537, 67675) and not args:IsDestTypePlayer() then\t-- Renew\n\t\tif args.destName == L.name and self.vb.shielded then\n\t\t\t-- nothing, she casted it on herself and you cant dispel\n\t\telse\n\t\t\tspecwarnRenew:Show(args.destName)\n\t\t\tspecwarnRenew:Play(\"dispelboss\")\n\t\tend\n\telseif args:IsSpellID(66620, 67679) then\t\t\t\t\t\t\t\t\t-- Old Wounds\n\t\twarnOldWounds:Show(args.destName)\n\t\ttimerOldWounds:Show(args.destName)\n\telseif args:IsSpellID(66538, 67676) and args:IsDestTypePlayer() then\t-- Holy Fire\n\t\tif self:CheckDispelFilter(\"magic\") then\n\t\t\tspecwarnHolyFire:Show(args.destName)\n\t\t\tspecwarnHolyFire:Play(\"helpdispel\")\n\t\tend\n\t\ttimerHolyFire:Show(args.destName)\n\telseif args:IsSpellID(66619, 67678) then\t\t\t\t\t\t\t\t\t-- Shadows of the Past\n\t\tif self:CheckDispelFilter(\"magic\") then\n\t\t\tspecwarnShadows:Show(args.destName)\n\t\t\tspecwarnShadows:Play(\"helpdispel\")\n\t\tend\n\t\ttimerShadows:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 66515 then\n\t\tself.vb.shielded = false\n\telseif args:IsSpellID(66538, 67676) then\t\t\t\t\t\t\t\t\t-- Holy Fire\n\t\ttimerHolyFire:Cancel(args.destName)\n\telseif args:IsSpellID(66619, 67678) then\t\t\t\t\t\t\t\t\t-- Shadows of the Past\n\t\ttimerShadows:Cancel(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/TrialoftheChampion/Eadric_the_Pure.lua",
    "content": "local mod\t= DBM:NewMod(\"EadricthePure\", \"DBM-Party-WotLK\", 13)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(35119)\nmod:SetEncounterID(338)\nmod:SetUsedIcons(8)\n\nmod:RegisterCombat(\"combat\")\nmod:RegisterKill(\"yell\", L.YellCombatEnd)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 66935 66867\",\n\t\"SPELL_AURA_APPLIED 66940 66889 66905\"\n)\n\nlocal warnHammerofRighteous\t\t= mod:NewSpellAnnounce(66867, 3)\nlocal warnVengeance\t\t\t\t= mod:NewTargetNoFilterAnnounce(66889, 3)\n\nlocal specwarnRadiance\t\t\t= mod:NewSpecialWarningLookAway(66935, nil, nil, nil, 2, 2)\nlocal specwarnHammerofJustice\t= mod:NewSpecialWarningDispel(66940, \"Healer\", nil, nil, 1, 2)\nlocal specwarnHammerofRighteous\t= mod:NewSpecialWarningYou(66905, nil, nil, nil, 1, 2)\n\nlocal timerVengeance\t\t\t= mod:NewBuffActiveTimer(6, 66889)\n\nmod:AddSetIconOption(\"SetIconOnHammerTarget\", 66940, true, true, {8})\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 66935 then\t\t\t\t\t-- Radiance Look Away!\n\t\tspecwarnRadiance:Show(args.sourceName)\n\t\tspecwarnRadiance:Play(\"turnaway\")\n\telseif args.spellId == 66867 then\t\t\t\t-- Hammer of the Righteous\n\t\twarnHammerofRighteous:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 66940 then\t\t\t\t\t\t\t\t-- Hammer of Justice on <Player>\n\t\tif self.Options.SetIconOnHammerTarget then\n\t\t\tself:SetIcon(args.destName, 8, 6)\n\t\tend\n\t\tif self:CheckDispelFilter(\"magic\") then\n\t\t\tspecwarnHammerofJustice:Show(args.destName)\n\t\t\tspecwarnHammerofJustice:Play(\"helpdispel\")\n\t\tend\n\telseif args.spellId == 66889 then\t\t\t\t\t\t\t-- Vengeance\n\t\twarnVengeance:Show(args.destName)\n\t\ttimerVengeance:Start(args.destName)\n\telseif args.spellId == 66905 and args:IsPlayer() then\n\t\tspecwarnHammerofRighteous:Show()\n\t\tspecwarnHammerofRighteous:Play(\"useitem\")\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/UtgardeKeep/ConstructorAndController.lua",
    "content": "local mod\t= DBM:NewMod(\"ConstructorAndController\", \"DBM-Party-WotLK\", 10)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(24200, 24201)\nmod:SetEncounterID(573)\n\nmod:RegisterCombat(\"combat\", 24200, 24201)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 43650\",\n\t\"SPELL_AURA_REMOVED 43650\",\n\t\"SPELL_SUMMON 52611\"\n)\n\nlocal warningEnfeeble\t= mod:NewTargetNoFilterAnnounce(43650, 2)\nlocal warningSummon\t\t= mod:NewSpellAnnounce(52611, 3)\n\nlocal timerEnfeeble\t\t= mod:NewTargetTimer(6, 43650)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 43650 then\n\t\twarningEnfeeble:Show(args.destName)\n\t\ttimerEnfeeble:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 43650 then\n\t\ttimerEnfeeble:Cancel(args.destName)\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 52611 and self:AntiSpam() then\n\t\twarningSummon:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/UtgardeKeep/IngvarThePlunderer.lua",
    "content": "local mod\t= DBM:NewMod(\"IngvarThePlunderer\", \"DBM-Party-WotLK\", 10)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(23980, 23954)\nmod:SetEncounterID(575)\nmod:SetUsedIcons(8)\n\nmod:RegisterCombat(\"combat\")\nmod:RegisterKill(\"yell\", L.YellCombatEnd)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 42723 42669 59706 59709 42708 42729 59708 59734\",\n\t\"SPELL_AURA_APPLIED 42730 59735\",\n\t\"SPELL_AURA_REMOVED 42730 59735\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"UNIT_DIED\",\n\t\"UNIT_SPELLCAST_SUCCEEDED\"\n)\n\nlocal warningWoeStrike\t= mod:NewTargetNoFilterAnnounce(42730, 2, nil, \"RemoveCurse\", 2)\n\nlocal specWarnSpelllock\t= mod:NewSpecialWarningCast(42729, \"SpellCaster\", nil, 2, 1, 2)\nlocal specWarnSmash\t\t= mod:NewSpecialWarningDodge(42723, \"Tank\", nil, nil, 1, 2)\n\nlocal timerSmash\t\t= mod:NewCastTimer(3, 42723)\nlocal timerSmashCD\t\t= mod:NewCDTimer(13, 42723, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerWoeStrike\t= mod:NewTargetTimer(10, 42723, nil, \"RemoveCurse\", nil, 5, nil, DBM_COMMON_L.CURSE_ICON)\n\nmod:AddSetIconOption(\"WoeStrikeIcon\", 42730, true, false, {8})\n\nfunction mod:OnCombatStart()\n\tself:SetStage(1)\n\ttimerSmashCD:Start(15)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(42723, 42669, 59706) then\n\t\tspecWarnSmash:Show()\n\t\tspecWarnSmash:Play(\"shockwave\")\n\t\ttimerSmash:Start()\n\t\ttimerSmashCD:Start()\n\telseif args:IsSpellID(42708, 42729, 59708, 59734) then\n\t\tspecWarnSpelllock:Show()\n\t\tspecWarnSpelllock:Play(\"stopcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(42730, 59735) then\n\t\twarningWoeStrike:Show(args.destName)\n\t\ttimerWoeStrike:Start(args.destName)\n\t\tif self.Options.WoeStrikeIcon then\n\t\t\tself:SetIcon(args.destName, 8, 10)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(42730, 59735) then\n\t\ttimerWoeStrike:Cancel()\n\t\tif self.Options.WoeStrikeIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 23954 then--Only trigger kill for unit_died if he dies in phase 2 with at least one player alive, otherwise it's an auto wipe.\n\t\tif DBM:NumRealAlivePlayers() > 0 and self.vb.phase == 2 then\n\t\t\tDBM:EndCombat(self)\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.YellIngvarPhase2 or msg:find(L.YellIngvarPhase2) then\n\t\tself:SetStage(2)\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(42863) then -- Scourge Resurrection\n\t\tself:SetStage(2)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/UtgardeKeep/Keleseth.lua",
    "content": "local mod\t= DBM:NewMod(\"Keleseth\", \"DBM-Party-WotLK\", 10)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(23953)\nmod:SetEncounterID(571)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 48400\",\n\t\"SPELL_AURA_REMOVED 48400\"\n)\n\nlocal warningTomb\t= mod:NewTargetNoFilterAnnounce(48400, 4)\n\nlocal timerTomb\t\t= mod:NewTargetTimer(10, 48400, nil, nil, nil, 3)\nlocal timerTombCD\t= mod:NewCDTimer(17, 48400, nil, nil, nil, 3)\n\nfunction mod:OnCombatStart()\n\ttimerTombCD:Start(17)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 48400 then\n\t\twarningTomb:Show(args.destName)\n\t\ttimerTomb:Start(args.destName)\n\t\ttimerTombCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 48400 then\n\t\ttimerTomb:Cancel()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/UtgardePinnacle/GortokPalehoof.lua",
    "content": "local mod\t= DBM:NewMod(\"GortokPalehoof\", \"DBM-Party-WotLK\", 11)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(26687)\nmod:SetEncounterID(579)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 48261 59268\"\n)\n\nlocal warningImpale\t\t= mod:NewTargetNoFilterAnnounce(48261, 2, nil, \"Healer\")\n\nlocal timerImpale\t\t= mod:NewTargetTimer(9, 48261, nil, \"Healer\", 2, 5, nil, DBM_COMMON_L.HEALER_ICON)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(48261, 59268) then\n\t\twarningImpale:Show(args.destName)\n\t\ttimerImpale:Start(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/UtgardePinnacle/SkadiTheRuthless.lua",
    "content": "local mod\t= DBM:NewMod(\"SkadiTheRuthless\", \"DBM-Party-WotLK\", 11)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(26693)\nmod:SetEncounterID(581)\nmod:SetMinSyncRevision(3108)\n\nmod:RegisterCombat(\"yell\", L.Phase2)\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 50255 59331\",\n\t\"SPELL_AURA_APPLIED 50258 59334 50228 59322\",\n\t\"SPELL_AURA_REMOVED 50258 59334\"\n)\n\nlocal warnPhase2\t\t\t= mod:NewPhaseAnnounce(2)\nlocal warningPoisonDebuff\t= mod:NewTargetNoFilterAnnounce(50258, 2, nil, \"Healer\")\n\nlocal specWarnWhirlwind\t\t= mod:NewSpecialWarningRun(59322, nil, nil, 2, 4, 2)\n\nlocal timerPoisonDebuff\t\t= mod:NewTargetTimer(12, 50258, nil, \"Healer\", 2, 5, nil, DBM_COMMON_L.HEALER_ICON)\nlocal timerPoisonCD\t\t\t= mod:NewCDTimer(10, 59331, nil, \"Healer\", nil, 5)\nlocal timerWhirlwindCD\t\t= mod:NewCDTimer(20, 59322, nil, nil, nil, 2)\nlocal timerAchieve\t\t\t= mod:NewAchievementTimer(180, 1873)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(50255, 59331) then\n\t\ttimerPoisonCD:Start() -- Poisoned Spear throw\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(50258, 59334) then\n\t\twarningPoisonDebuff:Show(args.destName)\n\t\ttimerPoisonDebuff:Start(args.destName)\n\telseif args:IsSpellID(50228, 59322) then\n\t\ttimerWhirlwindCD:Start()\n\t\tspecWarnWhirlwind:Show()\n\t\tspecWarnWhirlwind:Play(\"runout\")\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(50258, 59334) then\n\t\ttimerPoisonDebuff:Cancel(args.destName)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.Phase2 or msg:find(L.Phase2) then\n\t\twarnPhase2:Show()\n\telseif msg == L.CombatStart or msg:find(L.CombatStart) then\n\t\tif not self:IsDifficulty(\"normal5\") then\n\t\t\ttimerAchieve:Start()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/UtgardePinnacle/SvalaSorrowgrave.lua",
    "content": "local mod\t= DBM:NewMod(\"SvalaSorrowgrave\", \"DBM-Party-WotLK\", 11)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(29281)\nmod:SetEncounterID(577)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 48267 48276\",\n\t\"SPELL_AURA_REMOVED 48276\"\n)\n\nlocal warningSacrifice\t= mod:NewTargetNoFilterAnnounce(48267, 4)\n\nlocal timerSacrifice\t= mod:NewBuffActiveTimer(25, 48276, nil, nil, nil, 5, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerRoleplay\t\t= mod:NewTimer(67, \"timerRoleplay\", \"Interface\\\\Icons\\\\Spell_Holy_BorrowedTime\") --roleplay for boss is active\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 48267 then\n\t\twarningSacrifice:Show(args.destName)\n\telseif args.spellId == 48276 then\n\t\ttimerSacrifice:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 48276 then\n\t\ttimerSacrifice:Stop()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.SvalaRoleplayStart or msg:find(L.SvalaRoleplayStart) then\n\t\ttimerRoleplay:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/UtgardePinnacle/Ymiron.lua",
    "content": "local mod\t= DBM:NewMod(\"Ymiron\", \"DBM-Party-WotLK\", 11)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod.statTypes = \"normal,heroic,mythic\"\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(26861)\nmod:SetEncounterID(583)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 51750\",\n\t\"SPELL_AURA_APPLIED 48294 59301\",\n\t\"SPELL_AURA_REMOVED 48294 59301\"\n)\n\nlocal warningBane\t\t= mod:NewSpellAnnounce(48294, 3)\nlocal warningScreams\t= mod:NewSpellAnnounce(51750, 2)\n\nlocal timerBane\t\t\t= mod:NewBuffActiveTimer(5, 48294, nil, nil, nil, 5, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerScreams\t\t= mod:NewBuffActiveTimer(8, 51750, nil, nil, nil, 2)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 51750 then\n\t\twarningScreams:Show()\n\t\ttimerScreams:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(48294, 59301) then\n\t\twarningBane:Show()\n\t\ttimerBane:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(48294, 59301) then\n\t\ttimerBane:Stop()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/VioletHold/Cyanigosa.lua",
    "content": "local mod\t= DBM:NewMod(\"Cyanigosa\", \"DBM-Party-WotLK\", 12)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(31134)\nmod:SetEncounterID(545)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 58694 58693 59369\",\n\t\"SPELL_AURA_APPLIED 59374\",\n\t\"SPELL_AURA_REMOVED 59374\"\n)\n\nlocal warningVacuum\t\t= mod:NewSpellAnnounce(58694, 1)\nlocal warningBlizzard\t= mod:NewSpellAnnounce(58693, 3)\n\nlocal specwarnMana\t\t= mod:NewSpecialWarningDispel(59374, \"Healer\", nil, nil, 1, 2)\n\nlocal timerVacuumCD\t\t= mod:NewCDTimer(35, 58694, nil, nil, nil, 2)\nlocal timerMana\t\t\t= mod:NewTargetTimer(8, 59374, nil, \"Healer\", nil, 5, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerCombat\t\t= mod:NewCombatTimer(14)\n\nfunction mod:OnCombatStart(delay)\n\ttimerVacuumCD:Start(30 - delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 58694 then\n\t\twarningVacuum:Show()\n\t\ttimerVacuumCD:Cancel()\n\t\ttimerVacuumCD:Start()\n\telseif args:IsSpellID(58693, 59369) then\n\t\twarningBlizzard:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 59374 then\n\t\tif self:CheckDispelFilter(\"magic\") then\n\t\t\tspecwarnMana:Show(args.destName)\n\t\t\tspecwarnMana:Play(\"helpdispel\")\n\t\tend\n\t\ttimerMana:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 59374 then\n\t\ttimerMana:Cancel(args.destName)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.CyanArrived then\n\t\tself:SendSync(\"CyanArrived\")\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif msg == \"CyanArrived\" then\n\t\ttimerCombat:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/VioletHold/Erekem.lua",
    "content": "local mod\t= DBM:NewMod(\"Erekem\", \"DBM-Party-WotLK\", 12)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(29315)\nmod:SetEncounterID(2658)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 54479 59471\"\n)\n\nlocal warningES\t= mod:NewSpellAnnounce(54479, 3)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(54479, 59471)\n\tand mod:GetCIDFromGUID(args.sourceGUID) == 29315 then\n\t\twarningES:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/VioletHold/Ichoron.lua",
    "content": "local mod\t= DBM:NewMod(\"Ichoron\", \"DBM-Party-WotLK\", 12)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(29313)\nmod:SetEncounterID(2660)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n)\n"
  },
  {
    "path": "DBM-Party-WotLK/VioletHold/Lavanthor.lua",
    "content": "local mod\t= DBM:NewMod(\"Lavanthor\", \"DBM-Party-WotLK\", 12)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(29312)\nmod:SetEncounterID(2662)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n)\n"
  },
  {
    "path": "DBM-Party-WotLK/VioletHold/Moragg.lua",
    "content": "local mod\t= DBM:NewMod(\"Moragg\", \"DBM-Party-WotLK\", 12)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(29316)\nmod:SetEncounterID(2659)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 54396\"\n)\n\nlocal warningLink\t= mod:NewTargetNoFilterAnnounce(54396, 2)\n\nlocal timerLink\t\t= mod:NewTargetTimer(12, 54396, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON)\nlocal timerLinkCD\t= mod:NewCDTimer(45, 54396, nil, nil, nil, 3)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 54396 then\n\t\twarningLink:Show(args.destName)\n\t\ttimerLink:Start(args.destName)\n\t\ttimerLinkCD:Cancel()\n\t\ttimerLinkCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/VioletHold/PortalTimers.lua",
    "content": "local mod = DBM:NewMod(\"PortalTimers\", \"DBM-Party-WotLK\", 12)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\nmod:SetCreatureID(30658)\n\nmod:RegisterEvents(\n\t\"UPDATE_WORLD_STATES\",\n\t\"UNIT_DIED\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\nmod.noStatistics = true\n\nlocal warningPortalNow\t= mod:NewAnnounce(\"WarningPortalNow\", 2, 57687)\nlocal warningPortalSoon\t= mod:NewAnnounce(\"WarningPortalSoon\", 1, 57687)\nlocal warningBossNow\t= mod:NewAnnounce(\"WarningBossNow\", 4, 33341)\n\nlocal timerPortalIn\t= mod:NewTimer(122, \"TimerPortalIn\", 57687, nil, nil, 1)\n\nmod:AddBoolOption(\"ShowAllPortalTimers\", false, \"timer\")--rate they spawn seems to accelerate slowly over time. thus making timers inaccurate by end of fight\nmod:RemoveOption(\"HealthFrame\")\n\nlocal lastWave = 0\n\nfunction mod:UPDATE_WORLD_STATES()\n\tlocal text = select(3, GetWorldStateUIInfo(2))\n\tif not text then return end\n\tlocal _, _, wave = string.find(text, L.WavePortal)\n\tif not wave then\n\t\twave = 0\n\tend\n\twave = tonumber(wave)\n\tlastWave = tonumber(lastWave)\n\tif wave < lastWave then\n\t\tlastWave = 0\n\tend\n\tif wave > lastWave then\n\t\twarningPortalSoon:Cancel()\n\t\ttimerPortalIn:Cancel()\n\t\tif wave == 6 or wave == 12 or wave == 18 then\n\t\t\twarningBossNow:Show()\n\t\telse\n\t\t\twarningPortalNow:Show(wave)\n\t\t\tif self.Options.ShowAllPortalTimers then\n\t\t\t\ttimerPortalIn:Start(122, wave + 1)\n\t\t\t\twarningPortalSoon:Schedule(112)\n\t\t\tend\n\t\tend\n\t\tlastWave = wave\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tif bit.band(args.destGUID:sub(0, 5), 0x00F) == 3 then\n\t\tlocal z = mod:GetCIDFromGUID(args.destGUID)\n\t\tif z == 29266 or z == 29312 or z == 29313 or z == 29314 or z == 29315 or z == 29316 \t\t-- bosses\n\t\tor z == 32226 or z == 32230 or z == 32231 or z == 32234 or z == 32235 or z == 32237 then\t-- boss spirits (in case you wipe)\n\t\t\ttimerPortalIn:Start(35, lastWave + 1)\n\t\t\twarningPortalSoon:Schedule(30)\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.Sealbroken or msg:find(L.Sealbroken) then\n\t\tself:SendSync(\"Wipe\")\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif msg == \"Wipe\" then\n\t\twarningPortalSoon:Cancel()\n\t\ttimerPortalIn:Cancel()\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/VioletHold/Xevoss.lua",
    "content": "local mod\t= DBM:NewMod(\"Xevoss\", \"DBM-Party-WotLK\", 12)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(29266)\nmod:SetEncounterID(2661)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n)\n"
  },
  {
    "path": "DBM-Party-WotLK/VioletHold/Zuramat.lua",
    "content": "local mod\t= DBM:NewMod(\"Zuramat\", \"DBM-Party-WotLK\", 12)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(29314)\nmod:SetEncounterID(2663)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 59743 54361 54343 59745 54524\"\n)\n\nlocal warningVoidShift\t\t\t= mod:NewTargetNoFilterAnnounce(59743, 2)\nlocal warningShroudofDarkness\t= mod:NewTargetNoFilterAnnounce(59745, 3)\n\nlocal specWarnVoidShifted\t\t= mod:NewSpecialWarningYou(54343, nil, nil, nil, 1, 2)\nlocal specWarnShroud\t\t\t= mod:NewSpecialWarningDispel(59745, \"MagicDispeller\", nil, nil, 1, 2)\n\nlocal timerVoidShift\t\t\t= mod:NewTargetTimer(5, 59743, nil, nil, nil, 3)\nlocal timerVoidShifted\t\t\t= mod:NewTargetTimer(15, 54343, nil, nil, nil, 5)\n\nmod:GroupSpells(59743, 54343)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(59743, 54361) then\t\t\t-- Void Shift\t\t\t59743 (HC)  54361 (nonHC)\n\t\twarningVoidShift:Show(args.destName)\n\t\ttimerVoidShift:Start(args.destName)\n\telseif args.spellId == 54343 then\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnVoidShifted:Show()\n\t\t\tspecWarnVoidShifted:Play(\"targetyou\")\n\t\tend\n\t\ttimerVoidShifted:Start(args.destName)\n\telseif args:IsSpellID(59745, 54524) then\t\t-- Shroud of Darkness\t59745 (HC)   54524 (nonHC)\n\t\tif self.Options.SpecWarn59745dispel then\n\t\t\tspecWarnShroud:Show(args.destName)\n\t\t\tspecWarnShroud:Play(\"dispelboss\")\n\t\telse\n\t\t\twarningShroudofDarkness:Show(args.destName)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Party-WotLK/localization.cn.lua",
    "content": "﻿if GetLocale() ~= \"zhCN\" then return end\n\nlocal L\n\nlocal optionWarning\t\t= \"显示%s警报\"\t-- translate\nlocal optionPreWarning\t= \"显示%s预警\"\t-- translate\n\n----------------------------------\n--  Ahn'Kahet: The Old Kingdom  --\n----------------------------------\n--  Prince Taldaram  --\n-----------------------\nL = DBM:GetModLocalization(\"Taldaram\")\n\nL:SetGeneralLocalization({\n\tname = \"塔达拉姆王子\"\n})\n\n-------------------\n--  Elder Nadox  --\n-------------------\nL = DBM:GetModLocalization(\"Nadox\")\n\nL:SetGeneralLocalization({\n\tname = \"纳多克斯长老\"\n})\n\n---------------------------\n--  Jedoga Shadowseeker  --\n---------------------------\nL = DBM:GetModLocalization(\"JedogaShadowseeker\")\n\nL:SetGeneralLocalization({\n\tname = \"耶戈达·觅影者\"\n})\n\n---------------------\n--  Herald Volazj  --\n---------------------\nL = DBM:GetModLocalization(\"Volazj\")\n\nL:SetGeneralLocalization({\n\tname = \"传令官沃拉兹\"\n})\n\n----------------\n--  Amanitar  --\n----------------\nL = DBM:GetModLocalization(\"Amanitar\")\n\nL:SetGeneralLocalization({\n\tname = \"埃曼尼塔\"\n})\n\n-------------------\n--  Azjol-Nerub  --\n---------------------------------\n--  Krik'thir the Gatewatcher  --\n---------------------------------\nL = DBM:GetModLocalization(\"Krikthir\")\n\nL:SetGeneralLocalization({\n\tname = \"看门者克里克希尔\"\n})\n\n----------------\n--  Hadronox  --\n----------------\nL = DBM:GetModLocalization(\"Hadronox\")\n\nL:SetGeneralLocalization({\n\tname = \"哈多诺克斯\"\n})\n\n-------------------------\n--  Anub'arak (Party)  --\n-------------------------\nL = DBM:GetModLocalization(\"Anubarak\")\n\nL:SetGeneralLocalization({\n\tname = \"阿努巴拉克(5人副本)\"\n})\n\n---------------------------------------\n--  Caverns of Time: Old Stratholme  --\n---------------------------------------\n--  Meathook  --\n----------------\nL = DBM:GetModLocalization(\"Meathook\")\n\nL:SetGeneralLocalization({\n\tname = \"肉钩\"\n})\n\n--------------------------------\n--  Salramm the Fleshcrafter  --\n--------------------------------\nL = DBM:GetModLocalization(\"SalrammTheFleshcrafter\")\n\nL:SetGeneralLocalization({\n\tname = \"塑血者沙尔拉姆\"\n})\n\n-------------------------\n--  Chrono-Lord Epoch  --\n-------------------------\nL = DBM:GetModLocalization(\"ChronoLordEpoch\")\n\nL:SetGeneralLocalization({\n\tname = \"时光领主埃博克\"\n})\n\n-----------------\n--  Mal'Ganis  --\n-----------------\nL = DBM:GetModLocalization(\"MalGanis\")\n\nL:SetGeneralLocalization({\n\tname = \"玛尔加尼斯\"\n})\n\nL:SetMiscLocalization({\n\tOutro\t= \"你的旅程才刚开始，年轻的王子。集合你的部队，到诺森德再次挑战我。在那里，我们将了结彼此之间的恩怨，你将了解到你真正的命运。\"\n})\n\n-------------------\n--  Wave Timers  --\n-------------------\nL = DBM:GetModLocalization(\"StratWaves\")\n\nL:SetGeneralLocalization({\n\tname = \"斯坦索姆小怪\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveNow\t= \"第%d波: %s 出现了\"\n})\n\nL:SetTimerLocalization({\n\tTimerWaveIn\t\t= \"下一波(6)\",\n\tTimerRoleplay\t= \"角色扮演事件计时\"\n})\n\nL:SetOptionLocalization({\n\tWarningWaveNow\t= optionWarning:format(\"新一波\"),\n\tTimerWaveIn\t\t= \"为下一波显示计时条 (之后的5批小怪)\",\n\tTimerRoleplay\t= \"为角色扮演事件显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tMeathook\t= \"肉钩\",\n\tSalramm\t\t= \"塑血者沙尔拉姆\",\n\tDevouring\t= \"狼吞虎咽的食尸鬼\",\n\tEnraged\t\t= \"暴怒的食尸鬼\",\n\tNecro\t\t= \"通灵大师\",\n\tFiend\t\t= \"地穴恶魔\",\n\tStalker\t\t= \"墓穴猎手\",\n\tAbom\t\t= \"缝补构造体\",\n\tAcolyte\t\t= \"侍僧\",\n\tWave1\t\t= \"%d %s\",\n\tWave2\t\t= \"%d %s 和 %d %s\",\n\tWave3\t\t= \"%d %s，%d %s 和 %d %s\",\n\tWave4\t\t= \"%d %s，%d %s，%d %s 和 %d %s\",\n\tWaveBoss\t= \"%s\",\n\tWaveCheck\t= \"天灾波次 = (%d+)/10\",\n\tRoleplay\t= \"乌瑟尔，你总算及时赶到了。\",\n\tRoleplay2\t= \"大家都做好准备了吧。记住，斯坦索姆的城民已经受到感染，很快就会丧命。我们必须清洗斯坦索姆，确保洛丹伦的其它地区免受天灾军团的侵蚀。出发吧。\"\n})\n\n------------------------\n--  Drak'Tharon Keep  --\n------------------------\n--  Trollgore  --\n-----------------\nL = DBM:GetModLocalization(\"Trollgore\")\n\nL:SetGeneralLocalization({\n\tname = \"托尔戈\"\n})\n\nL:SetMiscLocalization({\n\tYellExplosion = \"要爆炸啦！\"\n})\n\n--------------------------\n--  Novos the Summoner  --\n--------------------------\nL = DBM:GetModLocalization(\"NovosTheSummoner\")\n\nL:SetGeneralLocalization({\n\tname = \"召唤者诺沃斯\"\n})\n\nL:SetWarningLocalization({\n\tWarnCrystalHandler\t= \"水晶处理者产生 (%d 剩余)\"\n})\n\nL:SetTimerLocalization({\n\ttimerCrystalHandler\t= \"水晶处理者产卵\"\n})\n\nL:SetOptionLocalization({\n\tWarnCrystalHandler\t= \"水晶处理者出现时显示警告\",\n\ttimerCrystalHandler\t= \"计时器显示为下一个水晶处理者重生\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"笼罩你的寒气就是厄运的先兆。\",\n\tHandlerYell\t\t= \"协助防御！快点，废物们！\",\n\tPhase2\t\t\t= \"很快你们就会发现一切都是徒劳无功。\",\n\tYellKill\t\t= \"这一切……都是毫无意义的。\"\n})\n\n-----------------\n--  King Dred  --\n-----------------\nL = DBM:GetModLocalization(\"KingDred\")\n\nL:SetGeneralLocalization({\n\tname = \"暴龙之王爵德\"\n})\n\n-----------------------------\n--  The Prophet Tharon'ja  --\n-----------------------------\nL = DBM:GetModLocalization(\"ProphetTharonja\")\n\nL:SetGeneralLocalization({\n\tname = \"先知萨隆亚\"\n})\n\n---------------\n--  Gundrak  --\n----------------\n--  Slad'ran  --\n----------------\nL = DBM:GetModLocalization(\"Sladran\")\n\nL:SetGeneralLocalization({\n\tname = \"斯拉德兰\"\n})\n\n---------------\n--  Moorabi  --\n---------------\nL = DBM:GetModLocalization(\"Moorabi\")\n\nL:SetGeneralLocalization({\n\tname = \"莫拉比\"\n})\n\n-------------------------\n--  Drakkari Colossus  --\n-------------------------\nL = DBM:GetModLocalization(\"BloodstoneAnnihilator\")\n\nL:SetGeneralLocalization({\n\tname = \"达卡莱巨像\"\n})\n\nL:SetWarningLocalization({\n\tWarningElemental\t= \"阶段2：元素\",\n\tWarningStone\t\t= \"阶段1：巨像\"\n})\n\nL:SetOptionLocalization({\n\tWarningElemental\t= \"显示阶段2：元素警告\",\n\tWarningStone\t\t= \"显示阶段1：巨像警告\"\n})\n\n-----------------\n--  Gal'darah  --\n-----------------\nL = DBM:GetModLocalization(\"Galdarah\")\n\nL:SetGeneralLocalization({\n\tname = \"迦尔达拉\"\n})\n\nL:SetWarningLocalization({\n\tTimerPhase2\t\t= \"第二阶段：阿卡里的化身\",\n\tTimerPhase1\t\t= \"第一阶段：阿卡里的高阶先知\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t\t= \"第二阶段：阿卡里的化身\",\n\tTimerPhase1\t\t= \"第一阶段：阿卡里的高阶先知\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t= \"警报：第二阶段：阿卡里的化身\",\n\tTimerPhase1\t\t= \"警报：第一阶段：阿卡里的高阶先知\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase2_1\t= \"这之后，一切都将灭亡！\",\n\tYellPhase2_2\t= \"你们想见识真正的力量？那我就让你们如愿以偿！\"\n})\n\n-------------------------\n--  Eck the Ferocious  --\n-------------------------\nL = DBM:GetModLocalization(\"Eck\")\n\nL:SetGeneralLocalization({\n\tname = \"凶残的伊克\"\n})\n\n--------------------------\n--  Halls of Lightning  --\n--------------------------\n--  General Bjarngrim  --\n-------------------------\nL = DBM:GetModLocalization(\"Bjarngrin\")\n\nL:SetGeneralLocalization({\n\tname = \"比亚格里将军\"\n})\n\n-------------\n--  Ionar  --\n-------------\nL = DBM:GetModLocalization(\"Ionar\")\n\nL:SetGeneralLocalization({\n\tname = \"艾欧纳尔\"\n})\n\n---------------\n--  Volkhan  --\n---------------\nL = DBM:GetModLocalization(\"Volkhan\")\n\nL:SetGeneralLocalization({\n\tname = \"沃尔坎\"\n})\n\n--------------\n--  Loken  --\n--------------\nL = DBM:GetModLocalization(\"Loken\")\n\nL:SetGeneralLocalization({\n\tname = \"洛肯\"\n})\n\n----------------------\n--  Halls of Stone  --\n-----------------------\n--  Maiden of Grief  --\n-----------------------\nL = DBM:GetModLocalization(\"MaidenOfGrief\")\n\nL:SetGeneralLocalization({\n\tname = \"悲伤圣女\"\n})\n\n------------------\n--  Krystallus  --\n------------------\nL = DBM:GetModLocalization(\"Krystallus\")\n\nL:SetGeneralLocalization({\n\tname = \"克莱斯塔卢斯\"\n})\n\n------------------------------\n--  Sjonnir the Ironshaper  --\n------------------------------\nL = DBM:GetModLocalization(\"SjonnirTheIronshaper\")\n\nL:SetGeneralLocalization({\n\tname = \"塑铁者斯约尼尔\"\n})\n\n--------------------------------------\n--  Brann Bronzebeard Escort Event  --\n--------------------------------------\nL = DBM:GetModLocalization(\"BrannBronzebeard\")\n\nL:SetGeneralLocalization({\n\tname = \"布莱恩护卫事件\"\n})\n\nL:SetWarningLocalization({\n\tWarningPhase\t= \"第%d阶段\"\n})\n\nL:SetTimerLocalization({\n\ttimerEvent\t= \"剩余时间\"\n})\n\nL:SetOptionLocalization({\n\tWarningPhase\t= optionWarning:format(\"阶段数\"),\n\ttimerEvent\t\t= \"为事件的持续时间显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tPull\t= \"嗯，你们帮我看着点外面。我这样的强者只要锤两下就能搞定这破烂……\",\n\tPhase1\t= \"安全系统发现不明入侵。历史文档的分析工作优先级转为低。对策程序立即启动。\",\n\tPhase2\t= \"已超出威胁指数标准。天界文档中断。提高安全级别。\",\n\tPhase3\t= \"威胁指数过高。虚空分析程序关闭。启动清理协议。\",\n\tKill\t= \"警告：安全系统自动修复装置已被关闭。立刻消除化全部存储器内容并……\"\n})\n\n-----------------\n--  The Nexus  --\n-----------------\n--  Anomalus  --\n----------------\nL = DBM:GetModLocalization(\"Anomalus\")\n\nL:SetGeneralLocalization({\n\tname = \"阿诺玛鲁斯\"\n})\n\n-------------------------------\n--  Ormorok the Tree-Shaper  --\n-------------------------------\nL = DBM:GetModLocalization(\"OrmorokTheTreeShaper\")\n\nL:SetGeneralLocalization({\n\tname = \"塑树者奥莫洛克\"\n})\n\n----------------------------\n--  Grand Magus Telestra  --\n----------------------------\nL = DBM:GetModLocalization(\"GrandMagusTelestra\")\n\nL:SetGeneralLocalization({\n\tname = \"大魔导师泰蕾丝塔\"\n})\n\nL:SetWarningLocalization({\n\tWarningSplitSoon\t= \"分裂 即将到来\",\n\tWarningSplitNow\t\t= \"分裂\",\n\tWarningMerge\t\t= \"融合\"\n})\nL:SetOptionLocalization({\n\tWarningSplitSoon\t= \"为分裂显示提前警报\",\n\tWarningSplitNow\t\t= \"为分裂显示警报\",\n\tWarningMerge\t\t= \"为融合显示警报\"\n})\n\nL:SetMiscLocalization({\n\tSplitTrigger1\t\t= \"这里有我千万个分身。\",\n\tSplitTrigger2\t\t= \"我要让你们尝尝无所适从的滋味!\",\n\tMergeTrigger\t\t= \"现在，最后一步！\"\n})\n\n-------------------\n--  Keristrasza  --\n-------------------\nL = DBM:GetModLocalization(\"Keristrasza\")\n\nL:SetGeneralLocalization({\n\tname = \"克莉斯塔萨\"\n})\n\n-----------------------------------\n--  Commander Kolurg/Stoutbeard  --\n-----------------------------------\nL = DBM:GetModLocalization(\"Commander\")\n\nlocal commander = \"未知\"\nif UnitFactionGroup(\"player\") == \"Alliance\" then\n\tcommander = \"指挥官库鲁尔格\"\nelseif UnitFactionGroup(\"player\") == \"Horde\" then\n\tcommander = \"指挥官斯托比德\"\nend\n\nL:SetGeneralLocalization({\n\tname = commander\n})\n\n------------------\n--  The Oculus  --\n-------------------------------\n--  Drakos the Interrogator  --\n-------------------------------\nL = DBM:GetModLocalization(\"DrakosTheInterrogator\")\n\nL:SetGeneralLocalization({\n\tname = \"审讯者达库斯\"\n})\n\nL:SetOptionLocalization({\n\tMakeitCountTimer\t= \"为成就：分秒必争显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tMakeitCountTimer\t= \"分秒必争\"\n})\n\n----------------------\n--  Mage-Lord Urom  --\n----------------------\nL = DBM:GetModLocalization(\"MageLordUrom\")\n\nL:SetGeneralLocalization({\n\tname = \"法师领主伊洛姆\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"可怜而无知的蠢货！\"\n})\n\n--------------------------\n--  Varos Cloudstrider  --\n--------------------------\nL = DBM:GetModLocalization(\"VarosCloudstrider\")\n\nL:SetGeneralLocalization({\n\tname = \"瓦尔洛斯·云击\"\n})\n\n---------------------------\n--  Ley-Guardian Eregos  --\n---------------------------\nL = DBM:GetModLocalization(\"LeyGuardianEregos\")\n\nL:SetGeneralLocalization({\n\tname = \"魔网守护者埃雷苟斯\"\n})\n\nL:SetMiscLocalization({\n\tMakeitCountTimer\t= \"分秒必争\"\n})\n\n--------------------\n--  Utgarde Keep  --\n-----------------------\n--  Prince Keleseth  --\n-----------------------\nL = DBM:GetModLocalization(\"Keleseth\")\n\nL:SetGeneralLocalization({\n\tname = \"凯雷塞斯王子\"\n})\n\n--------------------------------\n--  Skarvald the Constructor  --\n--  & Dalronn the Controller  --\n--------------------------------\nL = DBM:GetModLocalization(\"ConstructorAndController\")\n\nL:SetGeneralLocalization({\n\tname = \"控制者达尔隆\"\n})\n\n----------------------------\n--  Ingvar the Plunderer  --\n----------------------------\nL = DBM:GetModLocalization(\"IngvarThePlunderer\")\n\nL:SetGeneralLocalization({\n\tname = \"劫掠者因格瓦尔\"\n})\n\nL:SetMiscLocalization({\n\tYellIngvarPhase2\t= \"我又回来了！又得到一次把你们脑壳敲碎的机会！\",\n\tYellCombatEnd\t\t= \"不！不！我还可以……做得更好。\"\n})\n\n------------------------\n--  Utgarde Pinnacle  --\n--------------------------\n--  Skadi the Ruthless  --\n--------------------------\nL = DBM:GetModLocalization(\"SkadiTheRuthless\")\n\nL:SetGeneralLocalization({\n\tname = \"残忍的斯卡迪\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"什么样的狗杂种竟然胆敢入侵这里？快点，弟兄们！谁要是能把他们的头提来，就赏他吃肉！\",\n\tPhase2\t\t\t= \"你这只无能的蠢龙！你的尸体干脆给我的新飞龙拿去当点心算了！\"\n})\n\n-------------------\n--  King Ymiron  --\n-------------------\nL = DBM:GetModLocalization(\"Ymiron\")\n\nL:SetGeneralLocalization({\n\tname = \"伊米隆国王\"\n})\n\n-------------------------\n--  Svala Sorrowgrave  --\n-------------------------\nL = DBM:GetModLocalization(\"SvalaSorrowgrave\")\n\nL:SetGeneralLocalization({\n\tname = \"席瓦拉·索格蕾\"\n})\n\nL:SetTimerLocalization({\n\ttimerRoleplay\t\t= \"席瓦拉·索格蕾 开始攻击\"\n})\n\nL:SetOptionLocalization({\n\ttimerRoleplay\t\t= \"为席瓦拉·索格蕾开始攻击前的角色扮演显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tSvalaRoleplayStart\t= \"尊敬的陛下！我已经完成您的全部要求，希望您能不吝赐下伟大的祝福！\"\n})\n\n-----------------------\n--  Gortok Palehoof  --\n-----------------------\nL = DBM:GetModLocalization(\"GortokPalehoof\")\n\nL:SetGeneralLocalization({\n\tname = \"戈托克·苍蹄\"\n})\n\n-----------------------\n--  The Violet Hold  --\n-----------------------\n--  Cyanigosa  --\n-----------------\nL = DBM:GetModLocalization(\"Cyanigosa\")\n\nL:SetGeneralLocalization({\n\tname = \"塞安妮苟萨\"\n})\n\nL:SetMiscLocalization({\n\tCyanArrived\t= \"真是一群英勇的卫兵，但这座城市必须被夷平。我要亲自执行玛里苟斯大人的指令！\"\n})\n\n--------------\n--  Erekem  --\n--------------\nL = DBM:GetModLocalization(\"Erekem\")\n\nL:SetGeneralLocalization({\n\tname = \"埃雷克姆\"\n})\n\n---------------\n--  Ichoron  --\n---------------\nL = DBM:GetModLocalization(\"Ichoron\")\n\nL:SetGeneralLocalization({\n\tname = \"艾库隆\"\n})\n\n-----------------\n--  Lavanthor  --\n-----------------\nL = DBM:GetModLocalization(\"Lavanthor\")\n\nL:SetGeneralLocalization({\n\tname = \"拉文索尔\"\n})\n\n--------------\n--  Moragg  --\n--------------\nL = DBM:GetModLocalization(\"Moragg\")\n\nL:SetGeneralLocalization({\n\tname = \"摩拉格\"\n})\n\n--------------\n--  Xevozz  --\n--------------\nL = DBM:GetModLocalization(\"Xevoss\")\n\nL:SetGeneralLocalization({\n\tname = \"谢沃兹\"\n})\n\n-------------------------------\n--  Zuramat the Obliterator  --\n-------------------------------\nL = DBM:GetModLocalization(\"Zuramat\")\n\nL:SetGeneralLocalization({\n\tname = \"湮灭者祖拉玛特\"\n})\n\n---------------------\n--  Portal Timers  --\n---------------------\nL = DBM:GetModLocalization(\"PortalTimers\")\n\nL:SetGeneralLocalization({\n\tname = \"传送门计时\"\n})\n\nL:SetWarningLocalization({\n\tWarningPortalSoon\t= \"新传送门即将开启\",\n\tWarningPortalNow\t= \"传送门 #%d\",\n\tWarningBossNow\t\t= \"首领到来\"\n})\n\nL:SetTimerLocalization({\n\tTimerPortalIn\t= \"传送门 #%d\"\n})\n\nL:SetOptionLocalization({\n\tWarningPortalNow\t\t= optionWarning:format(\"新传送门\"),\n\tWarningPortalSoon\t\t= optionPreWarning:format(\"新传送门\"),\n\tWarningBossNow\t\t\t= optionWarning:format(\"首领到来\"),\n\tTimerPortalIn\t\t\t= \"为下一次 传送门显示计时条(击败首领后)\",\n\tShowAllPortalTimers\t\t= \"为所有传送门显示计时条(不准确)\"\n})\n\nL:SetMiscLocalization({\n\tSealbroken\t= \"我们冲破了监狱的大门！进入达拉然的道路被清理干净了！魔枢之战终于可以结束了！\",\n\tWavePortal\t= \"已打开传送门：(%d+)/18\"\n})\n\n-----------------------------\n--  Trial of the Champion  --\n-----------------------------\n--  The Black Knight  --\n------------------------\nL = DBM:GetModLocalization(\"BlackKnight\")\n\nL:SetGeneralLocalization({\n\tname = \"黑骑士\"\n})\n\nL:SetOptionLocalization({\n\tAchievementCheck\t\t= \"报告'这还不算惨'成就的失败信息给小队\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"干得好，今天，你证明了自己的实力。\",\n\tAchievementFailed\t= \">> 成就失败: %s 被食尸鬼爆炸击中了 <<\",\n\tYellCombatEnd\t= \"勇士们，祝贺你们！经历过一系列计划之中和意料之外的试炼，你们终于取得了胜利。\"\t-- can also be \"No! I must not fail... again ...\"\n})\n\n-----------------------\n--  Grand Champions  --\n-----------------------\nL = DBM:GetModLocalization(\"GrandChampions\")\n\nL:SetGeneralLocalization({\n\tname = \"总冠军\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"干得漂亮！你的下一个挑战将来自于十字军的骑士们。他们将以强大的实力对你进行测试。\"\n})\n\n----------------------------------\n--  Argent Confessor Paletress  --\n----------------------------------\nL = DBM:GetModLocalization(\"Confessor\")\n\nL:SetGeneralLocalization({\n\tname = \"银色神官帕尔崔丝\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"真是精彩！\"\n})\n\n-----------------------\n--  Eadric the Pure  --\n-----------------------\nL = DBM:GetModLocalization(\"EadricthePure\")\n\nL:SetGeneralLocalization({\n\tname = \"纯洁者耶德瑞克\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"我认输！我投降。你做的很好。我可以走了吧？\"\n})\n\n--------------------\n--  Pit of Saron  --\n---------------------\n--  Ick and Krick  --\n---------------------\nL = DBM:GetModLocalization(\"Ick\")\n\nL:SetGeneralLocalization({\n\tname = \"伊克和科瑞克\"\n})\n\n----------------------------\n--  Forgemaster Garfrost  --\n----------------------------\nL = DBM:GetModLocalization(\"ForgemasterGarfrost\")\n\nL:SetGeneralLocalization({\n\tname = \"熔炉之主加弗斯特\"\n})\n\nL:SetOptionLocalization({\n\tAchievementCheck\t= \"小队通报：'11大限'成就警报\"\n})\n\nL:SetMiscLocalization({\n\tSaroniteRockThrow\t= \"%s向你用力投出一大块萨隆邪铁巨石！\",\n\tAchievementWarning\t= \"小心：%s 已拥有 %d 层永冻\",\n\tAchievementFailed\t= \">> 成就失败：%s 已超过 %d 层永冻 <<\"\n})\n\n----------------------------\n--  Scourgelord Tyrannus  --\n----------------------------\nL = DBM:GetModLocalization(\"ScourgelordTyrannus\")\n\nL:SetGeneralLocalization({\n\tname = \"天灾领主泰兰努斯\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"唉，勇敢的冒险者，你们的路已经到头了。难道你们没有听到身后隧道里钢铁撞击的声音吗？那就是末日降临的乐章。\",\n\tHoarfrostTarget = \"冰霜巨龙霜牙凝视着(%S+)，准备发动一次冰霜袭击！\",\n\tYellCombatEnd\t= \"不可能……霜牙……警报……\"\n})\n\n----------------------\n--  Forge of Souls  --\n----------------------\n--  Bronjahm  --\n----------------\nL = DBM:GetModLocalization(\"Bronjahm\")\n\nL:SetGeneralLocalization({\n\tname = \"布隆亚姆\"\n})\n\n-------------------------\n--  Devourer of Souls  --\n-------------------------\nL = DBM:GetModLocalization(\"DevourerofSouls\")\n\nL:SetGeneralLocalization({\n\tname = \"噬魂者\"\n})\n\n---------------------------\n--  Halls of Reflection  --\n---------------------------\n--  Wave Timers  --\n-------------------\nL = DBM:GetModLocalization(\"HoRWaveTimer\")\n\nL:SetGeneralLocalization({\n\tname = \"波数计时\"\n})\n\nL:SetWarningLocalization({\n\tWarnNewWaveSoon\t\t= \"新一波 即将到来\",\n\tWarnNewWave\t\t\t= \"%s 到来\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextWave\t\t= \"下一波\"\n})\n\nL:SetOptionLocalization({\n\tWarnNewWave\t\t\t= \"警报：BOSS到来\",\n\tWarnNewWaveSoon\t\t= \"预警：新一波(第5波BOSS之后)\",\n\tShowAllWaveWarnings\t= \"警报：全部波次\",\n\tTimerNextWave\t\t= \"计时条：下一整轮(第5波BOSS之后)\",\n\tShowAllWaveTimers\t= \"预警+计时条：全部波次(不准确)\"\n})\n\nL:SetMiscLocalization({\n\tFalric\t\t= \"法瑞克\",\n\tWaveCheck\t= \"灵魂波次 = (%d+)/10\"\n})\n\n--------------\n--  Falric  --\n--------------\nL = DBM:GetModLocalization(\"Falric\")\n\nL:SetGeneralLocalization({\n\tname = \"法瑞克\"\n})\n\n--------------\n--  Marwyn  --\n--------------\nL = DBM:GetModLocalization(\"Marwyn\")\n\nL:SetGeneralLocalization({\n\tname = \"玛维恩\"\n})\n\n-----------------------\n--  Lich King Event  --\n-----------------------\nL = DBM:GetModLocalization(\"LichKingEvent\")\n\nL:SetGeneralLocalization({\n\tname = \"逃离阿尔萨斯\"\n})\n\nL:SetTimerLocalization({\n\tachievementEscape\t= \"逃离计时\"\n})\n\nL:SetMiscLocalization({\n\tArthasYellKill\t= \"开火！开火！\",\n\tGhoul = \"狂怒食尸鬼\",\t\t--creature id 36940. Not sure how to use these in function above to simplify locals though. :\\\n\tAbom = \"笨拙憎恶体\",\t\t--creature id 37069\n\tWitchDoctor = \"复活的巫医\",\t--creature id 36941\n\tWave1 = \"你们无路可逃！\",\n\tWave2 = \"屈服于死亡的严寒吧！\",\n\tWave3 = \"死路一条！\",\n\tWave4 = \"你能抵挡多久？\"\n})\n"
  },
  {
    "path": "DBM-Party-WotLK/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\n\n-- fehlende Übersetzungen:\n--\n-- PdC: Großchampions, Der Schwarze Ritter\n-- HdR: Lichkönig-Event (Horde)\n\nlocal L\n\nlocal optionWarning\t\t= \"Zeige Warnung für %s\"\nlocal optionPreWarning\t= \"Zeige Vorwarnung für %s\"\n\n----------------------------------\n--  Ahn'Kahet: The Old Kingdom  --\n----------------------------------\n--  Prince Taldaram  --\n-----------------------\nL = DBM:GetModLocalization(\"Taldaram\")\n\nL:SetGeneralLocalization({\n\tname = \"Prinz Taldaram\"\n})\n\n-------------------\n--  Elder Nadox  --\n-------------------\nL = DBM:GetModLocalization(\"Nadox\")\n\nL:SetGeneralLocalization({\n\tname = \"Urahne Nadox\"\n})\n\n---------------------------\n--  Jedoga Shadowseeker  --\n---------------------------\nL = DBM:GetModLocalization(\"JedogaShadowseeker\")\n\nL:SetGeneralLocalization({\n\tname = \"Jedoga Schattensucher\"\n})\n\n---------------------\n--  Herald Volazj  --\n---------------------\nL = DBM:GetModLocalization(\"Volazj\")\n\nL:SetGeneralLocalization({\n\tname = \"Herold Volazj\"\n})\n\n----------------\n--  Amanitar  --\n----------------\nL = DBM:GetModLocalization(\"Amanitar\")\n\nL:SetGeneralLocalization({\n\tname = \"Amanitar\"\n})\n\n-------------------\n--  Azjol-Nerub  --\n---------------------------------\n--  Krik'thir the Gatewatcher  --\n---------------------------------\nL = DBM:GetModLocalization(\"Krikthir\")\n\nL:SetGeneralLocalization({\n\tname = \"Krik'thir der Torwächter\"\n})\n\n----------------\n--  Hadronox  --\n----------------\nL = DBM:GetModLocalization(\"Hadronox\")\n\nL:SetGeneralLocalization({\n\tname = \"Hadronox\"\n})\n\n-------------------------\n--  Anub'arak (Party)  --\n-------------------------\nL = DBM:GetModLocalization(\"Anubarak\")\n\nL:SetGeneralLocalization({\n\tname = \"Anub'arak (Gruppe)\"\n})\n\n---------------------------------------\n--  Caverns of Time: Old Stratholme  --\n---------------------------------------\n--  Meathook  --\n----------------\nL = DBM:GetModLocalization(\"Meathook\")\n\nL:SetGeneralLocalization({\n\tname = \"Fleischhaken\"\n})\n\n--------------------------------\n--  Salramm the Fleshcrafter  --\n--------------------------------\nL = DBM:GetModLocalization(\"SalrammTheFleshcrafter\")\n\nL:SetGeneralLocalization({\n\tname = \"Salramm der Fleischformer\"\n})\n\n-------------------------\n--  Chrono-Lord Epoch  --\n-------------------------\nL = DBM:GetModLocalization(\"ChronoLordEpoch\")\n\nL:SetGeneralLocalization({\n\tname = \"Chronolord Epoch\"\n})\n\n-----------------\n--  Mal'Ganis  --\n-----------------\nL = DBM:GetModLocalization(\"MalGanis\")\n\nL:SetGeneralLocalization({\n\tname = \"Mal'Ganis\"\n})\n\nL:SetMiscLocalization({\n\tOutro\t= \"Eure Reise hat erst begonnen, junger Prinz. Sammelt Eure Streitmacht und folgt mir in das arktische Land Nordend. Dort werden wir unsere Rechnung begleichen. Dort wird sich Euer wahres Schicksal offenbaren.\"\n})\n\n-------------------\n--  Wave Timers  --\n-------------------\nL = DBM:GetModLocalization(\"StratWaves\")\n\nL:SetGeneralLocalization({\n\tname = \"Stratholme-Wellen\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveNow = \"Welle %d: %s erschienen\"\n})\n\nL:SetTimerLocalization({\n\tTimerWaveIn\t\t= \"Nächste Welle (6)\",\n\tTimerRoleplay\t= \"Eröffnungsrollenspiel\"\n})\n\nL:SetOptionLocalization({\n\tWarningWaveNow\t= \"Zeige Warnung für neue Welle\",\n\tTimerWaveIn\t\t= \"Zeige Zeit bis die nächste Wellengruppe nach dem ersten Boss kommt\",\n\tTimerRoleplay\t= \"Dauer des Eröffnungsrollenspiels anzeigen\"\n})\n\nL:SetMiscLocalization({\n\tMeathook\t= \"Fleischhaken\",\n\tSalramm\t\t= \"Salramm der Fleischformer\",\n\tDevouring\t= \"Verschlingender Ghul\",\n\tEnraged\t\t= \"Aufgebrachter Ghul\",\n\tNecro\t\t= \"Totenbeschwörer\",\n\tFiend\t\t= \"Gruftbestie\",\n\tStalker\t\t= \"Grabschleicher\",\n\tAbom\t\t= \"Flickwerkkonstrukt\",\n\tAcolyte\t\t= \"Akolyth\",\n\tWave1\t\t= \"%d %s\",\n\tWave2\t\t= \"%d %s und %d %s\",\n\tWave3\t\t= \"%d %s, %d %s und %d %s\",\n\tWave4\t\t= \"%d %s, %d %s, %d %s und %d %s\",\n\tWaveBoss\t= \"%s\",\n\tWaveCheck\t= \"Geißelwelle = (%d+)/10\",\n\tRoleplay\t= \"Wie schön, dass Ihr es geschafft habt, Uther.\",\n\tRoleplay2\t= \"Alle sind bereit. Vergesst nicht, diese Leute sind alle infiziert und werden bald sterben. Wir müssen Stratholme säubern, um den Rest Lordaerons vor der Geißel zu schützen. Los jetzt.\"\n})\n\n------------------------\n--  Drak'Tharon Keep  --\n------------------------\n--  Trollgore  --\n-----------------\nL = DBM:GetModLocalization(\"Trollgore\")\n\nL:SetGeneralLocalization({\n\tname = \"Trollgrind\"\n})\n\nL:SetMiscLocalization({\n\tYellExplosion = \"Leiche macht Bumm!\"\n})\n\n--------------------------\n--  Novos the Summoner  --\n--------------------------\nL = DBM:GetModLocalization(\"NovosTheSummoner\")\n\nL:SetGeneralLocalization({\n\tname = \"Novos der Beschwörer\"\n})\n\nL:SetWarningLocalization({\n\tWarnCrystalHandler\t= \"neuer Kristallwirker (%d übrig)\"\n})\n\nL:SetTimerLocalization({\n\ttimerCrystalHandler\t= \"neuer Kristallwirker\"\n})\n\nL:SetOptionLocalization({\n\tWarnCrystalHandler\t= \"Zeige Warnung wenn Kristallwirker erscheint\",\n\ttimerCrystalHandler\t= \"Zeige Timer für nächsten Kristallwirker\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"Was ihr spürt, ist euer Ende, das naht.\",\n\tHandlerYell\t\t= \"Verstärkt meine Verteidigung! Schnell, verdammt!\",\n\tPhase2\t\t\t= \"Sicher seht ihr, dass alles vergebens ist!\",\n\tYellKill\t\t= \"Eure Mühen... sind umsonst.\"\n})\n\n-----------------\n--  King Dred  --\n-----------------\nL = DBM:GetModLocalization(\"KingDred\")\n\nL:SetGeneralLocalization({\n\tname = \"König Dred\"\n})\n\n-----------------------------\n--  The Prophet Tharon'ja  --\n-----------------------------\nL = DBM:GetModLocalization(\"ProphetTharonja\")\n\nL:SetGeneralLocalization({\n\tname = \"Der Prophet Tharon'ja\"\n})\n\n---------------\n--  Gundrak  --\n----------------\n--  Slad'ran  --\n----------------\nL = DBM:GetModLocalization(\"Sladran\")\n\nL:SetGeneralLocalization({\n\tname = \"Slad'ran\"\n})\n\n---------------\n--  Moorabi  --\n---------------\nL = DBM:GetModLocalization(\"Moorabi\")\n\nL:SetGeneralLocalization({\n\tname = \"Moorabi\"\n})\n\n-------------------------\n--  Drakkari Colossus  --\n-------------------------\nL = DBM:GetModLocalization(\"BloodstoneAnnihilator\")\n\nL:SetGeneralLocalization({\n\tname = \"Koloss der Drakkari\"\n})\n\nL:SetWarningLocalization({\n\tWarningElemental\t= \"Phase 2: Der Elementar\",\n\tWarningStone\t\t= \"Phase 1: Der Koloss\"\n})\n\nL:SetOptionLocalization({\n\tWarningElemental\t= \"Zeige Warnung für Phase 2: Der Elementar\",\n\tWarningStone\t\t= \"Zeige Warnung für Phase 1: Der Koloss\"\n})\n\n-----------------\n--  Gal'darah  --\n-----------------\nL = DBM:GetModLocalization(\"Galdarah\")\n\nL:SetGeneralLocalization({\n\tname = \"Gal'darah\"\n})\n\nL:SetWarningLocalization({\n\tTimerPhase2\t\t= \"Phase 2: Der Avatar von Akali\",\n\tTimerPhase1\t\t= \"Phase 1: Hochprophet von Akali\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t\t= \"Phase 2: Der Avatar von Akali\",\n\tTimerPhase1\t\t= \"Phase 1: Hochprophet von Akali\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t= \"Zeige Warnung für Phase 2: Der Avatar von Akali\",\n\tTimerPhase1\t\t= \"Zeige Warnung für Phase 1: Hochprophet von Akali\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase2_1\t= \"Hiernach bleibt nichts mehr von euch übrig!\",\n\tYellPhase2_2\t= \"Ihr wollt Macht sehen? Ich zeig' euch Macht!\"\n})\n\n-------------------------\n--  Eck the Ferocious  --\n-------------------------\nL = DBM:GetModLocalization(\"Eck\")\n\nL:SetGeneralLocalization({\n\tname = \"Der wilde Eck\"\n})\n\n--------------------------\n--  Halls of Lightning  --\n--------------------------\n--  General Bjarngrim  --\n-------------------------\nL = DBM:GetModLocalization(\"Bjarngrin\")\n\nL:SetGeneralLocalization({\n\tname = \"General Bjarngrim\"\n})\n\n-------------\n--  Ionar  --\n-------------\nL = DBM:GetModLocalization(\"Ionar\")\n\nL:SetGeneralLocalization({\n\tname = \"Ionar\"\n})\n\n---------------\n--  Volkhan  --\n---------------\nL = DBM:GetModLocalization(\"Volkhan\")\n\nL:SetGeneralLocalization({\n\tname = \"Volkhan\"\n})\n\n-------------\n--  Loken  --\n-------------\nL = DBM:GetModLocalization(\"Loken\")\n\nL:SetGeneralLocalization({\n\tname = \"Loken\"\n})\n\n----------------------\n--  Halls of Stone  --\n-----------------------\n--  Maiden of Grief  --\n-----------------------\nL = DBM:GetModLocalization(\"MaidenOfGrief\")\n\nL:SetGeneralLocalization({\n\tname = \"Maid der Trauer\"\n})\n\n------------------\n--  Krystallus  --\n------------------\nL = DBM:GetModLocalization(\"Krystallus\")\n\nL:SetGeneralLocalization({\n\tname = \"Krystallus\"\n})\n\n------------------------------\n--  Sjonnir the Ironshaper  --\n------------------------------\nL = DBM:GetModLocalization(\"SjonnirTheIronshaper\")\n\nL:SetGeneralLocalization({\n\tname = \"Sjonnir der Eisenformer\"\n})\n\n--------------------------------------\n--  Brann Bronzebeard Escort Event  --\n--------------------------------------\nL = DBM:GetModLocalization(\"BrannBronzebeard\")\n\nL:SetGeneralLocalization({\n\tname = \"Brann-Eskorte\"\n})\n\nL:SetWarningLocalization({\n\tWarningPhase\t= \"Phase %d\"\n})\n\nL:SetTimerLocalization({\n\ttimerEvent\t= \"Zeit verbleibend\"\n})\n\nL:SetOptionLocalization({\n\tWarningPhase\t= \"Zeige Warnung für Phasenwechsel\",\n\ttimerEvent\t\t= \"Dauer des Ereignisses anzeigen\"\n})\n\nL:SetMiscLocalization({\n\tPull\t= \"Haltet jetzt die Augen offen! Ich werde die Sache hier im Handumdrehen...\",\n\tPhase1\t= \"Sicherheitsverletzung. Setze Analyse historischer Archive auf niedrige Priorität. Leite Gegenmaßnahmen ein.\",\n\tPhase2\t= \"Bedrohungsindexgrenze überschritten. Himmelsarchiv abgebrochen. Alarmstufe erhöht.\",\n\tPhase3\t= \"Kritischer Bedrohungsindex. Leerenanalyse umgeleitet. Initialisiere Säuberungsprotokoll.\",\n\tKill\t= \"Alarm: Sicherungssysteme deaktiviert. Beginne Speichersäuberung und...\"\n})\n\n-----------------\n--  The Nexus  --\n-----------------\n--  Anomalus  --\n----------------\nL = DBM:GetModLocalization(\"Anomalus\")\n\nL:SetGeneralLocalization({\n\tname = \"Anomalus\"\n})\n\n-------------------------------\n--  Ormorok the Tree-Shaper  --\n-------------------------------\nL = DBM:GetModLocalization(\"OrmorokTheTreeShaper\")\n\nL:SetGeneralLocalization({\n\tname = \"Ormorok der Baumformer\"\n})\n\n----------------------------\n--  Grand Magus Telestra  --\n----------------------------\nL = DBM:GetModLocalization(\"GrandMagusTelestra\")\n\nL:SetGeneralLocalization({\n\tname = \"Großmagistrix Telestra\"\n})\n\nL:SetWarningLocalization({\n\tWarningSplitSoon\t= \"Aufspaltung bald\",\n\tWarningSplitNow\t\t= \"Aufspaltung\",\n\tWarningMerge\t\t= \"Fusion\"\n})\nL:SetOptionLocalization({\n\tWarningSplitSoon\t= optionPreWarning:format(\"Aufspaltung\"),\n\tWarningSplitNow\t\t= optionWarning:format(\"Aufspaltung\"),\n\tWarningMerge\t\t= optionWarning:format(\"Fusion\"),\n})\n\nL:SetMiscLocalization({\n\tSplitTrigger1\t\t= \"Es ist genug von mir für alle da.\",\n\tSplitTrigger2\t\t= \"Ich teile mehr aus, als ihr verkraften könnt!\",\n\tMergeTrigger\t\t= \"Nun bringen wir's zu Ende!\"\n})\n\n-------------------\n--  Keristrasza  --\n-------------------\nL = DBM:GetModLocalization(\"Keristrasza\")\n\nL:SetGeneralLocalization({\n\tname = \"Keristrasza\"\n})\n\n-----------------------------------\n--  Commander Kolurg/Stoutbeard  --\n-----------------------------------\nL = DBM:GetModLocalization(\"Commander\")\n\nlocal commander = \"Eingefrorener Kommandant\"\nif UnitFactionGroup(\"player\") == \"Alliance\" then\n\tcommander = \"Kommandant Kolurg\"\nelseif UnitFactionGroup(\"player\") == \"Horde\" then\n\tcommander = \"Kommandant Starkbart\"\nend\n\nL:SetGeneralLocalization({\n\tname = commander\n})\n\n------------------\n--  The Oculus  --\n-------------------------------\n--  Drakos the Interrogator  --\n-------------------------------\nL = DBM:GetModLocalization(\"DrakosTheInterrogator\")\n\nL:SetGeneralLocalization({\n\tname = \"Drakos der Befrager\"\n})\n\n\nL:SetOptionLocalization({\n\tMakeitCountTimer\t= \"Zeige Timer für Erfolg 'Jagt ihn!'\"\n})\n\nL:SetMiscLocalization({\n\tMakeitCountTimer\t= \"Jagt ihn!\"\n})\n\n----------------------\n--  Mage-Lord Urom  --\n----------------------\nL = DBM:GetModLocalization(\"MageLordUrom\")\n\nL:SetGeneralLocalization({\n\tname = \"Magierlord Urom\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"Arme, blinde Narren!\"\n})\n\n--------------------------\n--  Varos Cloudstrider  --\n--------------------------\nL = DBM:GetModLocalization(\"VarosCloudstrider\")\n\nL:SetGeneralLocalization({\n\tname = \"Varos Wolkenwanderer\"\n})\n\n---------------------------\n--  Ley-Guardian Eregos  --\n---------------------------\nL = DBM:GetModLocalization(\"LeyGuardianEregos\")\n\nL:SetGeneralLocalization({\n\tname = \"Leywächter Eregos\"\n})\n\nL:SetMiscLocalization({\n\tMakeitCountTimer\t= \"Jagt ihn!\"\n})\n\n--------------------\n--  Utgarde Keep  --\n-----------------------\n--  Prince Keleseth  --\n-----------------------\nL = DBM:GetModLocalization(\"Keleseth\")\n\nL:SetGeneralLocalization({\n\tname = \"Prinz Keleseth\"\n})\n\n--------------------------------\n--  Skarvald the Constructor  --\n--  & Dalronn the Controller  --\n--------------------------------\nL = DBM:GetModLocalization(\"ConstructorAndController\")\n\nL:SetGeneralLocalization({\n\tname = \"Skarvald & Dalronn\"\n})\n\n----------------------------\n--  Ingvar the Plunderer  --\n----------------------------\nL = DBM:GetModLocalization(\"IngvarThePlunderer\")\n\nL:SetGeneralLocalization({\n\tname = \"Ingvar der Brandschatzer\"\n})\n\nL:SetMiscLocalization({\n\tYellIngvarPhase2\t= \"Ich kehre wieder! Ahhhh... Eine zweite Chance, Euren Schädel zu zerlegen!\",\n\tYellCombatEnd\t\t= \"Nein! Ich bin... besser, Ich bin...\"\n})\n\n------------------------\n--  Utgarde Pinnacle  --\n--------------------------\n--  Skadi the Ruthless  --\n--------------------------\nL = DBM:GetModLocalization(\"SkadiTheRuthless\")\n\nL:SetGeneralLocalization({\n\tname = \"Skadi der Skrupellose\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"Welche Hunde wagen es, hier einzudringen? Auf sie, meine Brüder! Ein Fest für den, der mir ihre Köpfe bringt!\",\n\tPhase2\t\t\t= \"Ihr räudigen Halunken! Eure Leichen werden feine Appetithappen für meinen neuen Drachen abgeben!\"\n})\n\n-------------------\n--  King Ymiron  --\n-------------------\nL = DBM:GetModLocalization(\"Ymiron\")\n\nL:SetGeneralLocalization({\n\tname = \"König Ymiron\"\n})\n\n-------------------------\n--  Svala Sorrowgrave  --\n-------------------------\nL = DBM:GetModLocalization(\"SvalaSorrowgrave\")\n\nL:SetGeneralLocalization({\n\tname = \"Svala Grabesleid\"\n})\n\nL:SetTimerLocalization({\n\ttimerRoleplay\t\t= \"Svala Grabesleid aktiv\"\n})\n\nL:SetOptionLocalization({\n\ttimerRoleplay\t\t= \"Zeige Dauer des Rollenspiels bevor Svala Grabesleid aktiv wird\"\n})\n\nL:SetMiscLocalization({\n\tSvalaRoleplayStart\t= \"Mein Meister! Ich tat, was Ihr verlangtet, und ersuche Euch um Euren Segen!\"\n})\n\n-----------------------\n--  Gortok Palehoof  --\n-----------------------\nL = DBM:GetModLocalization(\"GortokPalehoof\")\n\nL:SetGeneralLocalization({\n\tname = \"Gortok Bleichhuf\"\n})\n\n-----------------------\n--  The Violet Hold  --\n-----------------------\n--  Cyanigosa  --\n-----------------\nL = DBM:GetModLocalization(\"Cyanigosa\")\n\nL:SetGeneralLocalization({\n\tname = \"Cyanigosa\"\n})\n\nL:SetMiscLocalization({\n\tCyanArrived\t= \"Eine beherzte Verteidigung, aber diese Stadt muss dem Erdboden gleichgemacht werden. Ich werde Malygos' Befehle persönlich ausführen!\"\n})\n\n--------------\n--  Erekem  --\n--------------\nL = DBM:GetModLocalization(\"Erekem\")\n\nL:SetGeneralLocalization({\n\tname = \"Erekem\"\n})\n\n---------------\n--  Ichoron  --\n---------------\nL = DBM:GetModLocalization(\"Ichoron\")\n\nL:SetGeneralLocalization({\n\tname = \"Ichoron\"\n})\n\n-----------------\n--  Lavanthor  --\n-----------------\nL = DBM:GetModLocalization(\"Lavanthor\")\n\nL:SetGeneralLocalization({\n\tname = \"Lavanthor\"\n})\n\n--------------\n--  Moragg  --\n--------------\nL = DBM:GetModLocalization(\"Moragg\")\n\nL:SetGeneralLocalization({\n\tname = \"Moragg\"\n})\n\n--------------\n--  Xevozz  --\n--------------\nL = DBM:GetModLocalization(\"Xevoss\")\n\nL:SetGeneralLocalization({\n\tname = \"Xevozz\"\n})\n\n-------------------------------\n--  Zuramat the Obliterator  --\n-------------------------------\nL = DBM:GetModLocalization(\"Zuramat\")\n\nL:SetGeneralLocalization({\n\tname = \"Zuramat der Vernichter\"\n})\n\n---------------------\n--  Portal Timers  --\n---------------------\nL = DBM:GetModLocalization(\"PortalTimers\")\n\nL:SetGeneralLocalization({\n\tname = \"Portaltimer\"\n})\n\nL:SetWarningLocalization({\n\tWarningPortalSoon\t= \"Neues Portal bald\",\n\tWarningPortalNow\t= \"Portal %d\",\n\tWarningBossNow\t\t= \"Boss kommt\"\n})\n\nL:SetTimerLocalization({\n\tTimerPortalIn\t= \"Portal %d\",\n})\n\nL:SetOptionLocalization({\n\tWarningPortalNow\t\t= \"Zeige Warnung für neues Portal\",\n\tWarningPortalSoon\t\t= \"Zeige Vorwarnung für neues Portal\",\n\tWarningBossNow\t\t\t= \"Zeige Warnung für neuen Boss\",\n\tTimerPortalIn\t\t\t= \"Zeige Timer für nächstes Portal (nach einem Boss)\",\n\tShowAllPortalTimers\t\t= \"Zeige Timer für alle Portale (ungenau)\"\n})\n\nL:SetMiscLocalization({\n\tSealbroken\t= \"Wir haben das Gefängnistor durchbrochen! Der Weg nach Dalaran ist frei! Jetzt können wir den Nexuskrieg endlich beenden!\",\n\tWavePortal\t= \"Geöffnete Portale: (%d+)/18\"\n})\n\n-----------------------------\n--  Trial of the Champion  --\n-----------------------------\n--  The Black Knight  --\n------------------------\nL = DBM:GetModLocalization(\"BlackKnight\")\n\nL:SetGeneralLocalization({\n\tname = \"Der Schwarze Ritter\"\n})\n\nL:SetOptionLocalization({\n\tAchievementCheck\t\t= \"Verkünde Fehlschlag des Erfolgs 'Ich hab' schon Schlimmeres gesehen' an Gruppe\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Gut gemacht. Ihr habt Euch heute bewiesen-\",\n\tAchievementFailed\t= \">> ERFOLG FEHLGESCHLAGEN: %s wurde von Ghulexplosion getroffen <<\",\n\tYellCombatEnd\t\t= \"Meine Glückwünsche, Champions. In Prüfungen sowohl geplant als auch unerwartet habt Ihr triumphiert.\"\t-- can also be \"Nein! Ich darf nicht... wieder... versagen...\"\n})\n\n-----------------------\n--  Grand Champions  --\n-----------------------\nL = DBM:GetModLocalization(\"GrandChampions\")\n\nL:SetGeneralLocalization({\n\tname = \"Großchampions\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"Gut gekämpft! Eure nächste Herausforderung kommt aus den eigenen Reihen des Kreuzzugs. Ihr werdet Euch gegen ihre eindrucksvolle Tapferkeit beweisen müssen.\"\n})\n\n----------------------------------\n--  Argent Confessor Paletress  --\n----------------------------------\nL = DBM:GetModLocalization(\"Confessor\")\n\nL:SetGeneralLocalization({\n\tname = \"Argentumbeichtpatin Blondlocke\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"Exzellente Arbeit!\"\n})\n\n-----------------------\n--  Eadric the Pure  --\n-----------------------\nL = DBM:GetModLocalization(\"EadricthePure\")\n\nL:SetGeneralLocalization({\n\tname = \"Eadric der Reine\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"Ich ergebe mich! Exzellente Arbeit. Darf ich jetzt wegrennen?\"\n})\n\n--------------------\n--  Pit of Saron  --\n---------------------\n--  Ick and Krick  --\n---------------------\nL = DBM:GetModLocalization(\"Ick\")\n\nL:SetGeneralLocalization({\n\tname = \"Ick und Krick\"\n})\n\n----------------------------\n--  Forgemaster Garfrost  --\n----------------------------\nL = DBM:GetModLocalization(\"ForgemasterGarfrost\")\n\nL:SetGeneralLocalization({\n\tname = \"Schmiedemeister Garfrost\"\n})\n\nL:SetOptionLocalization({\n\tAchievementCheck\t= \"Verkünde Warnungen für den Erfolg 'Elfer raus!' an Gruppe\"\n})\n\nL:SetMiscLocalization({\n\tSaroniteRockThrow\t= \"%s schleudert Euch einen massiven Saronitstein entgegen!\",\n\tAchievementWarning\t= \"Warnung: %s hat %d Stapel von Permafrost\",\n\tAchievementFailed\t= \">> ERFOLG FEHLGESCHLAGEN: %s hat %d Stapel von Permafrost <<\"\n})\n\n----------------------------\n--  Scourgelord Tyrannus  --\n----------------------------\nL = DBM:GetModLocalization(\"ScourgelordTyrannus\")\n\nL:SetGeneralLocalization({\n\tname = \"Geißelfürst Tyrannus\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"Ach, Ihr tapferen, tapferen Helden, Euer kleiner Aufstand endet hier. Hört Ihr das Geklapper von Stahl und Knochen aus dem Tunnel hinter Euch? Das ist das Geräusch Eures Todes.\",\n\tHoarfrostTarget\t= \"Der Frostwyrm Raufang wendet sich (%S+) zu und bereitet einen eisigen Angriff vor!\",\n\tYellCombatEnd\t= \"Unmöglich... Raufang... warne...\"\n})\n\n----------------------\n--  Forge of Souls  --\n----------------------\n--  Bronjahm  --\n----------------\nL = DBM:GetModLocalization(\"Bronjahm\")\n\nL:SetGeneralLocalization({\n\tname = \"Bronjahm\"\n})\n\n-------------------------\n--  Devourer of Souls  --\n-------------------------\nL = DBM:GetModLocalization(\"DevourerofSouls\")\n\nL:SetGeneralLocalization({\n\tname = \"Verschlinger der Seelen\"\n})\n\n---------------------------\n--  Halls of Reflection  --\n---------------------------\n--  Wave Timers  --\n-------------------\nL = DBM:GetModLocalization(\"HoRWaveTimer\")\n\nL:SetGeneralLocalization({\n\tname = \"Wellentimer\"\n})\n\nL:SetWarningLocalization({\n\tWarnNewWaveSoon\t= \"Neue Welle bald\",\n\tWarnNewWave\t\t= \"%s kommt\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextWave\t= \"Nächste Welle\"\n})\n\nL:SetOptionLocalization({\n\tWarnNewWave\t\t\t= \"Zeige Warnung für neuen Boss\",\n\tWarnNewWaveSoon\t\t= \"Zeige Vorwarnung für neue Welle nach dem ersten Boss\",\n\tShowAllWaveWarnings\t= \"Zeige Warnungen für alle Wellen\",\n\tTimerNextWave\t\t= \"Zeige Zeit bis die nächste Wellengruppe nach dem ersten Boss kommt\",\n\tShowAllWaveTimers\t= \"Zeige Vorwarnung und Timer für alle Wellen (ungenau)\"\n})\n\nL:SetMiscLocalization({\n\tFalric\t\t= \"Falric\",\n\tWaveCheck\t= \"Geisterwelle = (%d+)/10\"\n})\n\n--------------\n--  Falric  --\n--------------\nL = DBM:GetModLocalization(\"Falric\")\n\nL:SetGeneralLocalization({\n\tname = \"Falric\"\n})\n\n--------------\n--  Marwyn  --\n--------------\nL = DBM:GetModLocalization(\"Marwyn\")\n\nL:SetGeneralLocalization({\n\tname = \"Marwyn\"\n})\n\n-----------------------\n--  Lich King Event  --\n-----------------------\nL = DBM:GetModLocalization(\"LichKingEvent\")\n\nL:SetGeneralLocalization({\n\tname = \"Flucht vor Arthas\"\n})\n\nL:SetTimerLocalization({\n\tachievementEscape\t= \"Zeit zur Flucht\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t= \"Zeige Warnung für Monsterwellen\"\n})\n\nL:SetMiscLocalization({\n\tArthasYellKill\t= \"FEUER! FEUER!\",\n\tGhoul\t\t\t= \"Tobender Ghul\",\t\t\t\t--creature id 36940. Not sure how to use these in function above to simplify locals though. :\\\n\tAbom\t\t\t= \"Schwerfällige Monstrosität\",\t--creature id 37069\n\tWitchDoctor\t\t= \"Auferstandener Hexendoktor\",\t--creature id 36941\n\tWave1\t\t\t= \"Es gibt kein Entkommen!\",\n\tWave2\t\t\t= \"Ergebt Euch der Grabeskälte!\",\n\tWave3\t\t\t= \"Eine weitere Sackgasse!\",\n\tWave4\t\t\t= \"Wie lange könnt Ihr Euch noch wehren?\"\n})\n"
  },
  {
    "path": "DBM-Party-WotLK/localization.en.lua",
    "content": "local L\n\n----------------------------------\n--  Ahn'Kahet: The Old Kingdom  --\n----------------------------------\n--  Prince Taldaram  --\n-----------------------\nL = DBM:GetModLocalization(\"Taldaram\")\n\nL:SetGeneralLocalization({\n\tname = \"Prince Taldaram\"\n})\n\n-------------------\n--  Elder Nadox  --\n-------------------\nL = DBM:GetModLocalization(\"Nadox\")\n\nL:SetGeneralLocalization({\n\tname = \"Elder Nadox\"\n})\n\n---------------------------\n--  Jedoga Shadowseeker  --\n---------------------------\nL = DBM:GetModLocalization(\"JedogaShadowseeker\")\n\nL:SetGeneralLocalization({\n\tname = \"Jedoga Shadowseeker\"\n})\n\n---------------------\n--  Herald Volazj  --\n---------------------\nL = DBM:GetModLocalization(\"Volazj\")\n\nL:SetGeneralLocalization({\n\tname = \"Herald Volazj\"\n})\n\n----------------\n--  Amanitar  --\n----------------\nL = DBM:GetModLocalization(\"Amanitar\")\n\nL:SetGeneralLocalization({\n\tname = \"Amanitar\"\n})\n\n-------------------\n--  Azjol-Nerub  --\n---------------------------------\n--  Krik'thir the Gatewatcher  --\n---------------------------------\nL = DBM:GetModLocalization(\"Krikthir\")\n\nL:SetGeneralLocalization({\n\tname = \"Krik'thir the Gatewatcher\"\n})\n\n----------------\n--  Hadronox  --\n----------------\nL = DBM:GetModLocalization(\"Hadronox\")\n\nL:SetGeneralLocalization({\n\tname = \"Hadronox\"\n})\n\n-------------------------\n--  Anub'arak (Party)  --\n-------------------------\nL = DBM:GetModLocalization(\"Anubarak\")\n\nL:SetGeneralLocalization({\n\tname = \"Anub'arak (Party)\"\n})\n\n---------------------------------------\n--  Caverns of Time: Old Stratholme  --\n---------------------------------------\n--  Meathook  --\n----------------\nL = DBM:GetModLocalization(\"Meathook\")\n\nL:SetGeneralLocalization({\n\tname = \"Meathook\"\n})\n\n--------------------------------\n--  Salramm the Fleshcrafter  --\n--------------------------------\nL = DBM:GetModLocalization(\"SalrammTheFleshcrafter\")\n\nL:SetGeneralLocalization({\n\tname = \"Salramm the Fleshcrafter\"\n})\n\n-------------------------\n--  Chrono-Lord Epoch  --\n-------------------------\nL = DBM:GetModLocalization(\"ChronoLordEpoch\")\n\nL:SetGeneralLocalization({\n\tname = \"Chrono-Lord Epoch\"\n})\n\n-----------------\n--  Mal'Ganis  --\n-----------------\nL = DBM:GetModLocalization(\"MalGanis\")\n\nL:SetGeneralLocalization({\n\tname = \"Mal'Ganis\"\n})\n\nL:SetMiscLocalization({\n\tOutro\t= \"Your journey has just begun, young prince. Gather your forces and meet me in the arctic land of Northrend. It is there that we shall settle the score between us. It is there that your true destiny will unfold.\"\n})\n\n-------------------\n--  Wave Timers  --\n-------------------\nL = DBM:GetModLocalization(\"StratWaves\")\n\nL:SetGeneralLocalization({\n\tname = \"Stratholme Waves\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveNow\t= \"Wave %d: %s spawned\"\n})\n\nL:SetTimerLocalization({\n\tTimerWaveIn\t\t= \"Next wave (6)\",\n\tTimerRoleplay\t= \"Arthas roleplay\"\n})\n\nL:SetOptionLocalization({\n\tWarningWaveNow\t= \"Show warning for new wave\",\n\tTimerWaveIn\t\t= \"Show timer for next set of waves (after wave 5 boss)\",\n\tTimerRoleplay\t= \"Show timer for opening roleplay event.\"\n})\n\nL:SetMiscLocalization({\n\tMeathook\t= \"Meathook\",\n\tSalramm\t\t= \"Salramm the Fleshcrafter\",\n\tDevouring\t= \"Devouring Ghoul\",\n\tEnraged\t\t= \"Enraging Ghoul\",\n\tNecro\t\t= \"Necromancer\",\n\tFiend\t\t= \"Crypt Fiend\",\n\tStalker\t\t= \"Tomb Stalker\",\n\tAbom\t\t= \"Patchwork Construct\",\n\tAcolyte\t\t= \"Acolyte\",\n\tWave1\t\t= \"%d %s\",\n\tWave2\t\t= \"%d %s and %d %s\",\n\tWave3\t\t= \"%d %s, %d %s and %d %s\",\n\tWave4\t\t= \"%d %s, %d %s, %d %s and %d %s\",\n\tWaveBoss\t= \"%s\",\n\tWaveCheck\t= \"Scourge Wave = (%d+)/10\",\n\tRoleplay\t= \"Glad you could make it, Uther.\",\n\tRoleplay2\t= \"Everyone looks ready. Remember, these people are all infected with the plague and will die soon. We must purge Stratholme to protect the remainder of Lordaeron from the Scourge. Let's go.\"\n})\n\n------------------------\n--  Drak'Tharon Keep  --\n------------------------\n--  Trollgore  --\n-----------------\nL = DBM:GetModLocalization(\"Trollgore\")\n\nL:SetGeneralLocalization({\n\tname = \"Trollgore\"\n})\n\nL:SetMiscLocalization({\n\tYellExplosion = \"Corpse go boom!\"\n})\n\n--------------------------\n--  Novos the Summoner  --\n--------------------------\nL = DBM:GetModLocalization(\"NovosTheSummoner\")\n\nL:SetGeneralLocalization({\n\tname = \"Novos the Summoner\"\n})\n\nL:SetWarningLocalization({\n\tWarnCrystalHandler\t= \"Crystal Handler spawned (%d remaining)\"\n})\n\nL:SetTimerLocalization({\n\ttimerCrystalHandler\t= \"Crystal Handler spawns\"\n})\n\nL:SetOptionLocalization({\n\tWarnCrystalHandler\t= \"Show warning when Crystal Handler spawns\",\n\ttimerCrystalHandler\t= \"Show timer for next Crystal Handler spawn\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"The chill you feel is the herald of your doom!\",\n\tHandlerYell\t\t= \"Bolster my defenses! Hurry, curse you!\",\n\tPhase2\t\t\t= \"Surely you can see the futility of it all!\",\n\tYellKill\t\t= \"Your efforts... are in vain.\"\n})\n\n-----------------\n--  King Dred  --\n-----------------\nL = DBM:GetModLocalization(\"KingDred\")\n\nL:SetGeneralLocalization({\n\tname = \"King Dred\"\n})\n\n-----------------------------\n--  The Prophet Tharon'ja  --\n-----------------------------\nL = DBM:GetModLocalization(\"ProphetTharonja\")\n\nL:SetGeneralLocalization({\n\tname = \"The Prophet Tharon'ja\"\n})\n\n---------------\n--  Gundrak  --\n----------------\n--  Slad'ran  --\n----------------\nL = DBM:GetModLocalization(\"Sladran\")\n\nL:SetGeneralLocalization({\n\tname = \"Slad'ran\"\n})\n\n---------------\n--  Moorabi  --\n---------------\nL = DBM:GetModLocalization(\"Moorabi\")\n\nL:SetGeneralLocalization({\n\tname = \"Moorabi\"\n})\n\n-------------------------\n--  Drakkari Colossus  --\n-------------------------\nL = DBM:GetModLocalization(\"BloodstoneAnnihilator\")\n\nL:SetGeneralLocalization({\n\tname = \"Drakkari Colossus\"\n})\n\nL:SetWarningLocalization({\n\tWarningElemental\t= \"Phase 2: The Elemental\",\t-- ej6421\n\tWarningStone\t\t= \"Phase 1: The Colossus\"\t-- ej6418\n})\n\nL:SetOptionLocalization({\n\tWarningElemental\t= \"Show warning for Phase 2: The Elemental\",\n\tWarningStone\t\t= \"Show warning for Phase 1: The Colossus\"\n})\n\n-----------------\n--  Gal'darah  --\n-----------------\nL = DBM:GetModLocalization(\"Galdarah\")\n\nL:SetGeneralLocalization({\n\tname = \"Gal'darah\"\n})\n\nL:SetWarningLocalization({\n\tTimerPhase2\t\t= \"Stage 2: The Avatar of Akali\",\n\tTimerPhase1\t\t= \"Stage 1: High Prophet of Akali\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t\t= \"Stage 2: The Avatar of Akali\",\n\tTimerPhase1\t\t= \"Stage 1: High Prophet of Akali\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t= \"Show warning for Stage 2: The Avatar of Akali\",\n\tTimerPhase1\t\t= \"Show warning for Stage 1: High Prophet of Akali\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase2_1\t= \"Ain't gonna be nothin' left after this!\",\n\tYellPhase2_2\t= \"You wanna see power? I'm gonna show you power!\"\n})\n\n-------------------------\n--  Eck the Ferocious  --\n-------------------------\nL = DBM:GetModLocalization(\"Eck\")\n\nL:SetGeneralLocalization({\n\tname = \"Eck the Ferocious\"\n})\n\n--------------------------\n--  Halls of Lightning  --\n--------------------------\n--  General Bjarngrim  --\n-------------------------\nL = DBM:GetModLocalization(\"Bjarngrin\")\n\nL:SetGeneralLocalization({\n\tname = \"General Bjarngrim\"\n})\n\n-------------\n--  Ionar  --\n-------------\nL = DBM:GetModLocalization(\"Ionar\")\n\nL:SetGeneralLocalization({\n\tname = \"Ionar\"\n})\n\n---------------\n--  Volkhan  --\n---------------\nL = DBM:GetModLocalization(\"Volkhan\")\n\nL:SetGeneralLocalization({\n\tname = \"Volkhan\"\n})\n\n-------------\n--  Loken  --\n-------------\nL = DBM:GetModLocalization(\"Loken\")\n\nL:SetGeneralLocalization({\n\tname = \"Loken\"\n})\n\n----------------------\n--  Halls of Stone  --\n-----------------------\n--  Maiden of Grief  --\n-----------------------\nL = DBM:GetModLocalization(\"MaidenOfGrief\")\n\nL:SetGeneralLocalization({\n\tname = \"Maiden of Grief\"\n})\n\n------------------\n--  Krystallus  --\n------------------\nL = DBM:GetModLocalization(\"Krystallus\")\n\nL:SetGeneralLocalization({\n\tname = \"Krystallus\"\n})\n\n\n------------------------------\n--  Sjonnir the Ironshaper  --\n------------------------------\nL = DBM:GetModLocalization(\"SjonnirTheIronshaper\")\n\nL:SetGeneralLocalization({\n\tname = \"Sjonnir the Ironshaper\"\n})\n\n--------------------------------------\n--  Brann Bronzebeard Escort Event  --\n--------------------------------------\nL = DBM:GetModLocalization(\"BrannBronzebeard\")\n\nL:SetGeneralLocalization({\n\tname = \"Brann Escort Event\"\n})\n\nL:SetWarningLocalization({\n\tWarningPhase\t= \"Phase %d\"\n})\n\nL:SetTimerLocalization({\n\ttimerEvent\t= \"Time remaining\"\n})\n\nL:SetOptionLocalization({\n\tWarningPhase\t= \"Show warning for phase change\",\n\ttimerEvent\t\t= \"Show timer for event duration\"\n})\n\nL:SetMiscLocalization({\n\tPull\t= \"Now keep an eye out! I'll have this licked in two shakes of a--\",\n\tPhase1\t= \"Security breach in progress. Analysis of historical archives transferred to lower-priority queue. Countermeasures engaged.\",\n\tPhase2\t= \"Threat index threshold exceeded.  Celestial archive aborted. Security level heightened.\",\n\tPhase3\t= \"Critical threat index. Void analysis diverted. Initiating sanitization protocol.\",\n\tKill\t= \"Alert: security fail-safes deactivated. Beginning memory purge and... \"\n})\n\n-----------------\n--  The Nexus  --\n-----------------\n--  Anomalus  --\n----------------\nL = DBM:GetModLocalization(\"Anomalus\")\n\nL:SetGeneralLocalization({\n\tname = \"Anomalus\"\n})\n\n-------------------------------\n--  Ormorok the Tree-Shaper  --\n-------------------------------\nL = DBM:GetModLocalization(\"OrmorokTheTreeShaper\")\n\nL:SetGeneralLocalization({\n\tname = \"Ormorok the Tree-Shaper\"\n})\n\n----------------------------\n--  Grand Magus Telestra  --\n----------------------------\nL = DBM:GetModLocalization(\"GrandMagusTelestra\")\n\nL:SetGeneralLocalization({\n\tname = \"Grand Magus Telestra\"\n})\n\nL:SetWarningLocalization({\n\tWarningSplitSoon\t= \"Split soon\",\n\tWarningSplitNow\t\t= \"Split\",\t\t-- ej7395 ; Mirror Images ; When Grand Magus Telestra reaches 50% health remaining, she splits into 3 mirror images.\n\tWarningMerge\t\t= \"Merge\"\n})\nL:SetOptionLocalization({\n\tWarningSplitSoon\t= \"Show warning for Split soon\",\n\tWarningSplitNow\t\t= \"Show warning for Split\",\n\tWarningMerge\t\t= \"Show warning for Merge\"\n})\n\nL:SetMiscLocalization({\n\tSplitTrigger1\t\t= \"There's plenty of me to go around.\",\n\tSplitTrigger2\t\t= \"I'll give you more than you can handle.\",\n\tMergeTrigger\t\t= \"Now to finish the job!\"\n})\n\n-------------------\n--  Keristrasza  --\n-------------------\nL = DBM:GetModLocalization(\"Keristrasza\")\n\nL:SetGeneralLocalization({\n\tname = \"Keristrasza\"\n})\n\n-----------------------------------\n--  Commander Kolurg/Stoutbeard  --\n-----------------------------------\nL = DBM:GetModLocalization(\"Commander\")\n\nlocal commander = \"Unknown\"\nif UnitFactionGroup(\"player\") == \"Alliance\" then\n\tcommander = \"Commander Kolurg\"\nelseif UnitFactionGroup(\"player\") == \"Horde\" then\n\tcommander = \"Commander Stoutbeard\"\nend\n\nL:SetGeneralLocalization({\n\tname = commander\n})\n\n------------------\n--  The Oculus  --\n-------------------------------\n--  Drakos the Interrogator  --\n-------------------------------\nL = DBM:GetModLocalization(\"DrakosTheInterrogator\")\n\nL:SetGeneralLocalization({\n\tname = \"Drakos the Interrogator\"\n})\n\nL:SetOptionLocalization({\n\tMakeitCountTimer\t= \"Show timer for Make It Count (achievement)\"\n})\n\nL:SetMiscLocalization({\n\tMakeitCountTimer\t= \"Make It Count\"\n})\n\n----------------------\n--  Mage-Lord Urom  --\n----------------------\nL = DBM:GetModLocalization(\"MageLordUrom\")\n\nL:SetGeneralLocalization({\n\tname = \"Mage-Lord Urom\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"Poor blind fools!\"\n})\n\n--------------------------\n--  Varos Cloudstrider  --\n--------------------------\nL = DBM:GetModLocalization(\"VarosCloudstrider\")\n\nL:SetGeneralLocalization({\n\tname = \"Varos Cloudstrider\"\n})\n\n---------------------------\n--  Ley-Guardian Eregos  --\n---------------------------\nL = DBM:GetModLocalization(\"LeyGuardianEregos\")\n\nL:SetGeneralLocalization({\n\tname = \"Ley-Guardian Eregos\"\n})\n\nL:SetMiscLocalization({\n\tMakeitCountTimer\t= \"Make It Count\"\n})\n\n--------------------\n--  Utgarde Keep  --\n-----------------------\n--  Prince Keleseth  --\n-----------------------\nL = DBM:GetModLocalization(\"Keleseth\")\n\nL:SetGeneralLocalization({\n\tname = \"Prince Keleseth\"\n})\n\n--------------------------------\n--  Skarvald the Constructor  --\n--  & Dalronn the Controller  --\n--------------------------------\nL = DBM:GetModLocalization(\"ConstructorAndController\")\n\nL:SetGeneralLocalization({\n\tname = \"Skarvald & Dalronn\"\n})\n\n----------------------------\n--  Ingvar the Plunderer  --\n----------------------------\nL = DBM:GetModLocalization(\"IngvarThePlunderer\")\n\nL:SetGeneralLocalization({\n\tname = \"Ingvar the Plunderer\"\n})\n\nL:SetMiscLocalization({\n\tYellIngvarPhase2= \"I return! A second chance to carve your skull!\",\n\tYellCombatEnd\t= \"No! I can do... better! I can...\"\n})\n\n------------------------\n--  Utgarde Pinnacle  --\n--------------------------\n--  Skadi the Ruthless  --\n--------------------------\nL = DBM:GetModLocalization(\"SkadiTheRuthless\")\n\nL:SetGeneralLocalization({\n\tname = \"Skadi the Ruthless\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"What mongrels dare intrude here? Look alive, my brothers!  A feast for the one that brings me their heads!\",\n\tPhase2\t\t\t= \"You motherless knaves! Your corpses will make fine morsels for my new drake!\"\n})\n\n-------------------\n--  King Ymiron  --\n-------------------\nL = DBM:GetModLocalization(\"Ymiron\")\n\nL:SetGeneralLocalization({\n\tname = \"King Ymiron\"\n})\n\n-------------------------\n--  Svala Sorrowgrave  --\n-------------------------\nL = DBM:GetModLocalization(\"SvalaSorrowgrave\")\n\nL:SetGeneralLocalization({\n\tname = \"Svala Sorrowgrave\"\n})\n\nL:SetTimerLocalization({\n\ttimerRoleplay\t\t= \"Svala Sorrowgrave active\"\n})\n\nL:SetOptionLocalization({\n\ttimerRoleplay\t\t= \"Show timer for roleplay before Svala Sorrowgrave becomes active\"\n})\n\nL:SetMiscLocalization({\n\tSvalaRoleplayStart\t= \"My liege! I have done as you asked, and now beseech you for your blessing!\"\n})\n\n-----------------------\n--  Gortok Palehoof  --\n-----------------------\nL = DBM:GetModLocalization(\"GortokPalehoof\")\n\nL:SetGeneralLocalization({\n\tname = \"Gortok Palehoof\"\n})\n\n-----------------------\n--  The Violet Hold  --\n-----------------------\n--  Cyanigosa  --\n-----------------\nL = DBM:GetModLocalization(\"Cyanigosa\")\n\nL:SetGeneralLocalization({\n\tname = \"Cyanigosa\"\n})\n\nL:SetMiscLocalization({\n\tCyanArrived\t= \"A valiant defense, but this city must be razed. I will fulfill Malygos's wishes myself!\"\n})\n\n--------------\n--  Erekem  --\n--------------\nL = DBM:GetModLocalization(\"Erekem\")\n\nL:SetGeneralLocalization({\n\tname = \"Erekem\"\n})\n\n---------------\n--  Ichoron  --\n---------------\nL = DBM:GetModLocalization(\"Ichoron\")\n\nL:SetGeneralLocalization({\n\tname = \"Ichoron\"\n})\n\n-----------------\n--  Lavanthor  --\n-----------------\nL = DBM:GetModLocalization(\"Lavanthor\")\n\nL:SetGeneralLocalization({\n\tname = \"Lavanthor\"\n})\n\n--------------\n--  Moragg  --\n--------------\nL = DBM:GetModLocalization(\"Moragg\")\n\nL:SetGeneralLocalization({\n\tname = \"Moragg\"\n})\n\n--------------\n--  Xevozz  --\n--------------\nL = DBM:GetModLocalization(\"Xevoss\")\n\nL:SetGeneralLocalization({\n\tname = \"Xevozz\"\n})\n\n-------------------------------\n--  Zuramat the Obliterator  --\n-------------------------------\nL = DBM:GetModLocalization(\"Zuramat\")\n\nL:SetGeneralLocalization({\n\tname = \"Zuramat the Obliterator\"\n})\n\n---------------------\n--  Portal Timers  --\n---------------------\nL = DBM:GetModLocalization(\"PortalTimers\")\n\nL:SetGeneralLocalization({\n\tname = \"Portal Timers\"\n})\n\nL:SetWarningLocalization({\n\tWarningPortalSoon\t= \"New portal soon\",\n\tWarningPortalNow\t= \"Portal #%d\",\n\tWarningBossNow\t\t= \"Boss incoming\"\n})\n\nL:SetTimerLocalization({\n\tTimerPortalIn\t= \"Portal #%d\",\n})\n\nL:SetOptionLocalization({\n\tWarningPortalNow\t\t= \"Show warning for new portal\",\n\tWarningPortalSoon\t\t= \"Show pre-warning for new portal\",\n\tWarningBossNow\t\t\t= \"Show warning for boss incoming\",\n\tTimerPortalIn\t\t\t= \"Show timer for next portal (after Boss)\",\n\tShowAllPortalTimers\t\t= \"Show timers for all portals (inaccurate)\"\n})\n\nL:SetMiscLocalization({\n\tSealbroken\t= \"We've broken through the prison gate! The way into Dalaran is clear! Now we finally put an end to the Nexus War!\",\n\tWavePortal\t= \"Portals Opened: (%d+)/18\"\n})\n\n-----------------------------\n--  Trial of the Champion  --\n-----------------------------\n--  The Black Knight  --\n------------------------\nL = DBM:GetModLocalization(\"BlackKnight\")\n\nL:SetGeneralLocalization({\n\tname = \"The Black Knight\"\n})\n\nL:SetOptionLocalization({\n\tAchievementCheck\t\t= \"Announce 'I've Had Worse' achievement failure to party\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Well done. You have proven yourself today-\",\n\tAchievementFailed\t= \">> ACHIEVEMENT FAILED: %s was hit by Ghoul Explode <<\",\n\tYellCombatEnd\t\t= \"My congratulations, champions. Through trials both planned and unexpected, you have triumphed.\"\t-- can also be \"No! I must not fail... again ...\"\n})\n\n-----------------------\n--  Grand Champions  --\n-----------------------\nL = DBM:GetModLocalization(\"GrandChampions\")\n\nL:SetGeneralLocalization({\n\tname = \"Grand Champions\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"Well fought! Your next challenge comes from the Crusade's own ranks. You will be tested against their considerable prowess.\"\n})\n\n----------------------------------\n--  Argent Confessor Paletress  --\n----------------------------------\nL = DBM:GetModLocalization(\"Confessor\")\n\nL:SetGeneralLocalization({\n\tname = \"Argent Confessor Paletress\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"Excellent work!\"\n})\n\n-----------------------\n--  Eadric the Pure  --\n-----------------------\nL = DBM:GetModLocalization(\"EadricthePure\")\n\nL:SetGeneralLocalization({\n\tname = \"Eadric the Pure\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"I yield! I submit. Excellent work. May I run away now?\"\n})\n\n--------------------\n--  Pit of Saron  --\n---------------------\n--  Ick and Krick  --\n---------------------\nL = DBM:GetModLocalization(\"Ick\")\n\nL:SetGeneralLocalization({\n\tname = \"Ick and Krick\"\n})\n\n----------------------------\n--  Forgemaster Garfrost  --\n----------------------------\nL = DBM:GetModLocalization(\"ForgemasterGarfrost\")\n\nL:SetGeneralLocalization({\n\tname = \"Forgemaster Garfrost\"\n})\n\nL:SetOptionLocalization({\n\tAchievementCheck\t\t\t= \"Announce 'Doesn't Go to Eleven' achievement warnings to party\"\n})\n\nL:SetMiscLocalization({\n\tSaroniteRockThrow\t= \"%s hurls a massive saronite boulder at you!\",\n\tAchievementWarning\t= \"Warning: %s has %d stacks of Permafrost\",\n\tAchievementFailed\t= \">> ACHIEVEMENT FAILED: %s has %d stacks of Permafrost <<\"\n})\n\n----------------------------\n--  Scourgelord Tyrannus  --\n----------------------------\nL = DBM:GetModLocalization(\"ScourgelordTyrannus\")\n\nL:SetGeneralLocalization({\n\tname = \"Scourgelord Tyrannus\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"Alas, brave, brave adventurers, your meddling has reached its end. Do you hear the clatter of bone and steel coming up the tunnel behind you? That is the sound of your impending demise.\",\n\tHoarfrostTarget\t= \"The frostwyrm Rimefang gazes at (%S+) and readies an icy attack!\",\n\tYellCombatEnd\t= \"Impossible.... Rimefang.... warn....\"\n})\n\n----------------------\n--  Forge of Souls  --\n----------------------\n--  Bronjahm  --\n----------------\nL = DBM:GetModLocalization(\"Bronjahm\")\n\nL:SetGeneralLocalization({\n\tname = \"Bronjahm\"\n})\n\n-------------------------\n--  Devourer of Souls  --\n-------------------------\nL = DBM:GetModLocalization(\"DevourerofSouls\")\n\nL:SetGeneralLocalization({\n\tname = \"Devourer of Souls\"\n})\n\n---------------------------\n--  Halls of Reflection  --\n---------------------------\n--  Wave Timers  --\n-------------------\nL = DBM:GetModLocalization(\"HoRWaveTimer\")\n\nL:SetGeneralLocalization({\n\tname = \"Wave Timers\"\n})\n\nL:SetWarningLocalization({\n\tWarnNewWaveSoon\t= \"New wave soon\",\n\tWarnNewWave\t\t= \"%s incoming\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextWave\t= \"Next wave\"\n})\n\nL:SetOptionLocalization({\n\tWarnNewWave\t\t\t= \"Show warning for boss incoming\",\n\tWarnNewWaveSoon\t\t= \"Show pre-warning for new wave (after wave 5 boss)\",\n\tShowAllWaveWarnings\t= \"Show warnings for all waves\",\n\tTimerNextWave\t\t= \"Show timer for next set of waves (after wave 5 boss)\",\n\tShowAllWaveTimers\t= \"Show pre-warning and timers for all waves (Inaccurate)\"\n})\n\nL:SetMiscLocalization({\n\tFalric\t\t= \"Falric\",\n\tWaveCheck\t= \"Spirit Wave = (%d+)/10\"\n})\n\n--------------\n--  Falric  --\n--------------\nL = DBM:GetModLocalization(\"Falric\")\n\nL:SetGeneralLocalization({\n\tname = \"Falric\"\n})\n\n--------------\n--  Marwyn  --\n--------------\nL = DBM:GetModLocalization(\"Marwyn\")\n\nL:SetGeneralLocalization({\n\tname = \"Marwyn\"\n})\n\n-----------------------\n--  Lich King Event  --\n-----------------------\nL = DBM:GetModLocalization(\"LichKingEvent\")\n\nL:SetGeneralLocalization({\n\tname = \"Escape from Arthas\"\n})\n\nL:SetWarningLocalization({\n\tWarnWave\t\t= \"%s\"\n})\n\nL:SetTimerLocalization({\n\tachievementEscape\t= \"Time to escape\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t= \"Show warning for incoming waves\"\n})\n\nL:SetMiscLocalization({\n\tArthasYellKill\t= \"FIRE! FIRE!\",\n\tGhoul\t\t\t= \"Raging Ghoul\",\t\t\t--creature id 36940. Not sure how to use these in function above to simplify locals though. :\\\n\tAbom\t\t\t= \"Lumbering Abomination\",\t--creature id 37069\n\tWitchDoctor\t\t= \"Risen Witch Doctor\",\t\t--creature id 36941\n\tWave1\t\t\t= \"There is no escape!\",\n\tWave2\t\t\t= \"Succumb to the chill of the grave.\",\n\tWave3\t\t\t= \"Another dead end.\",\n\tWave4\t\t\t= \"How long can you fight it?\"\n})\n"
  },
  {
    "path": "DBM-Party-WotLK/localization.es.lua",
    "content": "﻿if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\n\nlocal L\n\n---------------------------------\n-- Ahn'Kahet: El Antiguo Reino --\n---------------------------------\n-----------------------\n-- Príncipe Taldaram --\n-----------------------\nL = DBM:GetModLocalization(\"Taldaram\")\n\nL:SetGeneralLocalization({\n\tname = \"Príncipe Taldaram\"\n})\n\n--------------------\n-- Ancestro Nadox --\n--------------------\nL = DBM:GetModLocalization(\"Nadox\")\n\nL:SetGeneralLocalization({\n\tname = \"Ancestro Nadox\"\n})\n\n-------------------------\n-- Jedoga Buscasombras --\n-------------------------\nL = DBM:GetModLocalization(\"JedogaShadowseeker\")\n\nL:SetGeneralLocalization({\n\tname = \"Jedoga Buscasombras\"\n})\n\n--------------------\n-- Heraldo Volazj --\n--------------------\nL = DBM:GetModLocalization(\"Volazj\")\n\nL:SetGeneralLocalization({\n\tname = \"Heraldo Volazj\"\n})\n\n--------------\n-- Amanitar --\n--------------\nL = DBM:GetModLocalization(\"Amanitar\")\n\nL:SetGeneralLocalization({\n\tname = \"Amanitar\"\n})\n\n-----------------\n-- Azjol-Nerub --\n-----------------\n---------------\n-- Krik'thir --\n---------------\nL = DBM:GetModLocalization(\"Krikthir\")\n\nL:SetGeneralLocalization({\n\tname = \"Krik'thir el Vigía...\"\n})\n\n--------------\n-- Hadronox --\n--------------\nL = DBM:GetModLocalization(\"Hadronox\")\n\nL:SetGeneralLocalization({\n\tname = \"Hadronox\"\n})\n\n---------------\n-- Anub'arak --\n---------------\nL = DBM:GetModLocalization(\"Anubarak\")\n\nL:SetGeneralLocalization({\n\tname = \"Anub'arak H\"\n})\n\n------------------------------\n-- La Matanza de Stratholme --\n------------------------------\n------------\n-- Gancho --\n------------\nL = DBM:GetModLocalization(\"Meathook\")\n\nL:SetGeneralLocalization({\n\tname = \"Gancho\"\n})\n\n--------------\n--  Salramm --\n--------------\nL = DBM:GetModLocalization(\"SalrammTheFleshcrafter\")\n\nL:SetGeneralLocalization({\n\tname = \"El Modelador de carne\"\n})\n\n-----------------------\n--  Cronolord Época  --\n-----------------------\nL = DBM:GetModLocalization(\"ChronoLordEpoch\")\n\nL:SetGeneralLocalization({\n\tname = \"Cronolord Época\"\n})\n\n-----------------\n--  Mal'Ganis  --\n-----------------\nL = DBM:GetModLocalization(\"MalGanis\")\n\nL:SetGeneralLocalization({\n\tname = \"Mal'Ganis\"\n})\n\nL:SetMiscLocalization({\n\tOutro\t= \"Tu viaje acaba de comenzar, joven Príncipe. Reúne a tus tropas y ven a verme en las árticas tierras de Rasganorte. Allí ajustaremos cuentas. Allí es donde se desvelará tu verdadero destino.\"\n\t-- esMX: \"Recién comienza tu viaje, joven príncipe. Reúne a tus fuerzas y encuéntrame en las tierras árticas de Rasganorte. Allí será donde saldaremos nuestras cuentas pendientes, y donde se revelará tu verdadero destino.\"\n})\n\n-------------------------------\n-- Temporizadores de oleadas --\n-------------------------------\nL = DBM:GetModLocalization(\"StratWaves\")\n\nL:SetGeneralLocalization({\n\tname = \"Oleadas de Stratholme\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveNow\t\t= \"Oleada %d: %s\"\n})\n\nL:SetTimerLocalization({\n\tTimerWaveIn\t=\t\"Siguiente oleada (6)\",\n\tTimerRoleplay\t= \"Diálogo\"\n})\n\nL:SetOptionLocalization({\n\tWarningWaveNow\t= \"Mostrar avisos para nuevas oleadas\",\n\tTimerWaveIn\t\t= \"Mostrar temporizador para próximas oleadas (despues del jefe de la quinta oleada)\",\n\tTimerRoleplay\t= \"Mostrar temporizador para el diálogo inicial\"\n})\n\nL:SetMiscLocalization({\n\tMeathook\t= \"Gancho\",\n\tSalramm\t\t= \"Salramm el Modelador de carne\",\n\tDevouring\t= \"Necrófago devorador\",\n\tEnraged\t\t= \"Necrófago iracundo\",\n\tNecro\t\t= \"Nigromante oscuro\",\n\tFiend\t\t= \"Maligno de cripta\",\n\tStalker\t\t= \"Acechador de tumbas\",\n\tAbom\t\t= \"Ensamblaje de retazos\",\n\tAcolyte\t\t= \"Acólito\",\n\tWave1\t\t= \"%d %s\",\n\tWave2\t\t= \"%d %s and %d %s\",\n\tWave3\t\t= \"%d %s, %d %s and %d %s\",\n\tWave4\t\t= \"%d %s, %d %s, %d %s and %d %s\",\n\tWaveBoss\t= \"%s\",\n\tWaveCheck\t= \"Oleada de la Plaga = (%d+)/10\",\n\tRoleplay\t= \"Me alegra que lo consiguieras, Uther.\",\n\tRoleplay2\t= \"Parece que todo el mundo está listo. Recordad, esta gente está infectada por la peste y pronto morirá. Debemos purgar Stratholme para proteger de la Plaga lo que queda de Lordaeron. Vamos.\"\n})\n\n------------------------------\n-- Fortaleza de Drak'Tharon --\n------------------------------\n----------------\n-- Cuernotrol --\n----------------\nL = DBM:GetModLocalization(\"Trollgore\")\n\nL:SetGeneralLocalization({\n\tname = \"Cuernotrol\"\n})\n\nL:SetMiscLocalization({\n\tYellExplosion = \"¡Cueh'po háse bum!\"\n})\n\n------------------------\n-- Novos el Invocador --\n------------------------\nL = DBM:GetModLocalization(\"NovosTheSummoner\")\n\nL:SetGeneralLocalization({\n\tname = \"Novos el Invocador\"\n})\n\nL:SetWarningLocalization({\n\tWarnCrystalHandler\t= \"Sale un Manipulador de cristal (quedan %d)\"\n})\n\nL:SetTimerLocalization({\n\ttimerCrystalHandler\t= \"Sale Manipulador de cristal\"\n})\n\nL:SetOptionLocalization({\n\tWarnCrystalHandler\t= \"Mostrar aviso cuando sale Manipulador de cristal\",\n\ttimerCrystalHandler\t= \"Mostrar tiempo para próximo Manipulador de cristal\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"¡El frío que sentís es el presagio de vuestro sino!\",\n\tHandlerYell\t\t= \"¡Refuerza mis defensas! ¡Deprisa, maldito!\",\n\tPhase2\t\t\t= \"¡Seguro que ahora veis la inutilidad de todo ello!\",\n\tYellKill\t\t= \"Vos efforts sont... vains.\"\n})\n\n--------------\n-- Rey Dred --\n--------------\nL = DBM:GetModLocalization(\"KingDred\")\n\nL:SetGeneralLocalization({\n\tname = \"Rey Dred\"\n})\n\n--------------------------\n-- El profeta Tharon'ja --\n--------------------------\nL = DBM:GetModLocalization(\"ProphetTharonja\")\n\nL:SetGeneralLocalization({\n\tname = \"El profeta Tharon'ja\"\n})\n\n-------------\n-- Gundrak --\n-------------\n--------------\n-- Slad'ran --\n--------------\nL = DBM:GetModLocalization(\"Sladran\")\n\nL:SetGeneralLocalization({\n\tname = \"Slad'ran\"\n})\n\n-------------\n-- Moorabi --\n-------------\nL = DBM:GetModLocalization(\"Moorabi\")\n\nL:SetGeneralLocalization({\n\tname = \"Moorabi\"\n})\n\n---------------------\n-- Coloso Drakkari --\n---------------------\nL = DBM:GetModLocalization(\"BloodstoneAnnihilator\")\n\nL:SetGeneralLocalization({\n\tname = \"Coloso Drakkari\"\n})\n\nL:SetWarningLocalization({\n\tWarningElemental\t= \"Fase 2: El elemental\",\n\tWarningStone\t\t= \"Fase 1: El coloso\"\n})\n\nL:SetOptionLocalization({\n\tWarningElemental\t= \"Mostrar aviso para Fase 2: El elemental\",\n\tWarningStone\t\t= \"Mostrar aviso para Fase 1: El coloso\"\n})\n\n---------------\n-- Gal'darah --\n---------------\nL = DBM:GetModLocalization(\"Galdarah\")\n\nL:SetGeneralLocalization({\n\tname = \"Gal'darah\"\n})\n\nL:SetWarningLocalization({\n\tTimerPhase2\t\t= \"Fase 2: El avatar de Akali\",\n\tTimerPhase1\t\t= \"Fase 1: Gran profeta de Akali\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t\t= \"Fase 2: El avatar de Akali\",\n\tTimerPhase1\t\t= \"Fase 1: Gran profeta de Akali\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t= \"Mostrar aviso para Fase 2: El avatar de Akali\",\n\tTimerPhase1\t\t= \"Mostrar aviso para Fase 1: Gran profeta de Akali\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase2_1\t= \"¡No quedará ni rastro después de esto!\", --esMX: ¡Después de esto no quedar nada!\n\tYellPhase2_2\t= \"¿Queréis ver poder? ¡OS MOSTRARÉ PODER!\" --esMX: ¿Tú querer ver poder? ¡TE MOSTRARÉ PODER!\n})\n\n------------------\n-- Eck el Feroz --\n------------------\nL = DBM:GetModLocalization(\"Eck\")\n\nL:SetGeneralLocalization({\n\tname = \"Eck el Feroz\"\n})\n\n---------------------------\n-- Cámaras de Relámpagos --\n---------------------------\n-----------------------\n-- General Bjarngrim --\n-----------------------\nL = DBM:GetModLocalization(\"Bjarngrin\")\n\nL:SetGeneralLocalization({\n\tname = \"General Bjarngrim\"\n})\n\n-----------\n-- Ionar --\n-----------\nL = DBM:GetModLocalization(\"Ionar\")\n\nL:SetGeneralLocalization({\n\tname = \"Ionar\"\n})\n\n-------------\n-- Volkhan --\n-------------\nL = DBM:GetModLocalization(\"Volkhan\")\n\nL:SetGeneralLocalization({\n\tname = \"Volkhan\"\n})\n\n-----------\n-- Loken --\n-----------\nL = DBM:GetModLocalization(\"Loken\")\n\nL:SetGeneralLocalization({\n\tname = \"Loken\"\n})\n\n-----------------------\n-- Cámaras de Piedra --\n-----------------------\n----------------------\n-- Doncella de Pena --\n----------------------\nL = DBM:GetModLocalization(\"MaidenOfGrief\")\n\nL:SetGeneralLocalization({\n\tname = \"Doncella de Pena\"\n})\n\n----------------\n-- Krystallus --\n----------------\nL = DBM:GetModLocalization(\"Krystallus\")\n\nL:SetGeneralLocalization({\n\tname = \"Krystallus\"\n})\n\n-------------------------\n-- Sjonnir el Afilador --\n-------------------------\nL = DBM:GetModLocalization(\"SjonnirTheIronshaper\")\n\nL:SetGeneralLocalization({\n\tname = \"Sjonnir el Afilador\"\n})\n\n--------------------------------\n-- El Tribunal de los Tiempos --\n--------------------------------\nL = DBM:GetModLocalization(\"BrannBronzebeard\")\n\nL:SetGeneralLocalization({\n\tname = \"Salvar a Brann\"\n})\n\nL:SetWarningLocalization({\n\tWarningPhase\t= \"Fase %d\"\n})\n\nL:SetTimerLocalization({\n\ttimerEvent\t= \"Tiempo restante\"\n})\n\nL:SetOptionLocalization({\n\tWarningPhase\t= \"Mostrar aviso para el cambio de fase\",\n\ttimerEvent\t\t= \"Mostrar tiempo restante del evento\"\n})\n\nL:SetMiscLocalization({\n\tPull\t= \"¡Atentos! Tendré esto listo en un par de...\",\n\tPhase1\t= \"Incumplimiento del código de seguridad en progreso. Análisis de los archivos históricos relegado a la cola de menor prioridad. Contramedidas activadas.\",\n\tPhase2\t= \"Límite de índice de amenaza superado. Archivo celestial cancelado. Nivel de seguridad aumentado.\",\n\tPhase3\t= \"Índice de amenaza crítico. Análisis del vacío desviado. Iniciando protocolo de higienización.\",\n\tKill\t= \"Alerta: sistema de seguridad desactivado. Comenzando purga de memoria y...\"\n})\n\n-------------\n-- El Nexo --\n-------------\n--------------\n-- Anomalus --\n--------------\nL = DBM:GetModLocalization(\"Anomalus\")\n\nL:SetGeneralLocalization({\n\tname = \"Anomalus\"\n})\n\n------------------------\n-- Ormorok el Talador --\n------------------------\nL = DBM:GetModLocalization(\"OrmorokTheTreeShaper\")\n\nL:SetGeneralLocalization({\n\tname = \"Ormorok el Cortador de árboles\"\n})\n\n------------------------\n-- Gran maga Telestra --\n------------------------\nL = DBM:GetModLocalization(\"GrandMagusTelestra\")\n\nL:SetGeneralLocalization({\n\tname = \"Gran maga Telestra\"\n})\n\nL:SetWarningLocalization({\n\tWarningSplitSoon\t= \"Dividir pronto\",\n\tWarningSplitNow\t\t= \"Se divide\",\n\tWarningMerge\t\t= \"Se une\"\n})\nL:SetOptionLocalization({\n\tWarningSplitSoon\t= \"Mostrar aviso para Dividir pronto\",\n\tWarningSplitNow\t\t= \"Mostrar aviso para División\",\n\tWarningMerge\t\t= \"Mostrar aviso para Unión\"\n})\n\nL:SetMiscLocalization({\n\tSplitTrigger1\t\t= \"¡Tendréis más de lo que podéis soportar!\",\n\tSplitTrigger2\t\t= \"¡Tendréis más de lo que podéis soportar!\",\n\tMergeTrigger\t\t= \"Ahora, ¡a terminar el trabajo!\"\n})\n\n-----------------\n-- Keristrasza --\n-----------------\nL = DBM:GetModLocalization(\"Keristrasza\")\n\nL:SetGeneralLocalization({\n\tname = \"Keristrasza\"\n})\n\n-----------------------------------\n-- Comandante Kolurg/Barbarrecia --\n-----------------------------------\nL = DBM:GetModLocalization(\"Commander\")\n\nlocal commander = \"Comandante\"\nif UnitFactionGroup(\"player\") == \"Alliance\" then\n\tcommander = \"Comandante Kolurg\"\nelseif UnitFactionGroup(\"player\") == \"Horde\" then\n\tcommander = \"Comandante Barbarrecia\"\nend\n\nL:SetGeneralLocalization({\n\tname = commander\n})\n\n---------------\n-- El Oculus --\n---------------\n----------------------------\n-- Drakos el Interrogador --\n----------------------------\nL = DBM:GetModLocalization(\"DrakosTheInterrogator\")\n\nL:SetGeneralLocalization({\n\tname = \"Drakos el Interrogador\"\n})\n\n\nL:SetOptionLocalization({\n\tMakeitCountTimer\t= \"Mostrar temporizador para el logro 'Haz que cuente'\"\n})\n\nL:SetMiscLocalization({\n\tMakeitCountTimer\t= \"Logro: Haz que cuente\"\n})\n\n----------------------------\n-- Señor de la magia Urom --\n----------------------------\nL = DBM:GetModLocalization(\"MageLordUrom\")\n\nL:SetGeneralLocalization({\n\tname = \"Señor de la Magia Urom\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"¡Pobres necios ciegos!\"\n})\n\n----------------------\n-- Varos Zancanubes --\n----------------------\nL = DBM:GetModLocalization(\"VarosCloudstrider\")\n\nL:SetGeneralLocalization({\n\tname = \"Varos Zancanubes\"\n})\n\n-------------------------\n-- Guardián-Ley Eregos --\n-------------------------\nL = DBM:GetModLocalization(\"LeyGuardianEregos\")\n\nL:SetGeneralLocalization({\n\tname = \"Guardián-Ley Eregos\"\n})\n\nL:SetMiscLocalization({\n\tMakeitCountTimer\t= \"Haz que cuente\"\n})\n\n--------------------------\n-- Fortaleza de Utgarde --\n--------------------------\n-----------------------\n-- Príncipe Keleseth --\n-----------------------\nL = DBM:GetModLocalization(\"Keleseth\")\n\nL:SetGeneralLocalization({\n\tname = \"Príncipe Keleseth\"\n})\n\n------------------------\n-- Skarvald y Dalronn --\n------------------------\nL = DBM:GetModLocalization(\"ConstructorAndController\")\n\nL:SetGeneralLocalization({\n\tname = \"Constructor & Controlador\"\n})\n\n----------------------------\n-- Ingvar el Desvalijador --\n----------------------------\nL = DBM:GetModLocalization(\"IngvarThePlunderer\")\n\nL:SetGeneralLocalization({\n\tname = \"Ingvar el Desvalijador\"\n})\n\nL:SetMiscLocalization({\n\tYellIngvarPhase2\t= \"¡He vuelto! ¡Otra oportunidad para despedazarte el cráneo!\", -- esMX: ¡Regreso! ¡Una segunda oportunidad de perforar tu alma!\n\tYellCombatEnd\t\t= \"¡No! Puedo hacerlo... ¡mejor! Puedo...\"\n})\n\n-------------------------\n-- Pináculo de Utgarde --\n-------------------------\n-------------------------\n-- Skadi el Despiadado --\n-------------------------\nL = DBM:GetModLocalization(\"SkadiTheRuthless\")\n\nL:SetGeneralLocalization({\n\tname = \"Skadi el Despiadado\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"¿Qué chuchos son los que se atreven a irrumpir aquí? ¡Adelante, hermanos! ¡Un festín para quien me traiga sus cabezas!\",\n\tPhase2\t\t\t= \"¡Bastardos malnacidos! ¡Vuestros cadáveres serán un buen bocado para mis nuevos dracos!\"\n})\n\n----------------\n-- Rey Ymiron --\n----------------\nL = DBM:GetModLocalization(\"Ymiron\")\n\nL:SetGeneralLocalization({\n\tname = \"Rey Ymiron\"\n})\n\n---------------------\n-- Svala Tumbapena --\n---------------------\nL = DBM:GetModLocalization(\"SvalaSorrowgrave\")\n\nL:SetGeneralLocalization({\n\tname = \"Svala Tumbapena\"\n})\n\nL:SetTimerLocalization({\n\ttimerRoleplay\t\t= \"Comienza el encuentro\"\n})\n\nL:SetOptionLocalization({\n\ttimerRoleplay\t\t= \"Mostrar tiempo de diálogo antes de que Svala ataque\"\n})\n\nL:SetMiscLocalization({\n\tSvalaRoleplayStart\t= \"¡Mi señor! He hecho lo que pedisteis, ¡y ahora suplico vuestra bendición!\"\n})\n\n--------------------------\n-- Gortok Pezuña Pálida --\n--------------------------\nL = DBM:GetModLocalization(\"GortokPalehoof\")\n\nL:SetGeneralLocalization({\n\tname = \"Gortok Pezuña Pálida\"\n})\n\n------------------------\n-- El Bastión Violeta --\n------------------------\n---------------\n-- Cianigosa --\n---------------\nL = DBM:GetModLocalization(\"Cyanigosa\")\n\nL:SetGeneralLocalization({\n\tname = \"Cyanigosa\"\n})\n\nL:SetMiscLocalization({\n\tCyanArrived\t= \"Una defensa valiente, pero esta ciudad debe ser arrasada. ¡Yo misma cumpliré los deseos de Malygos!\"\n})\n\n------------\n-- Erekem --\n------------\nL = DBM:GetModLocalization(\"Erekem\")\n\nL:SetGeneralLocalization({\n\tname = \"Erekem\"\n})\n\n------------\n-- Ícoron --\n------------\nL = DBM:GetModLocalization(\"Ichoron\")\n\nL:SetGeneralLocalization({\n\tname = \"Ícoron\"\n})\n\n---------------\n-- Lavanthor --\n---------------\nL = DBM:GetModLocalization(\"Lavanthor\")\n\nL:SetGeneralLocalization({\n\tname = \"Lavanthor\"\n})\n\n------------\n-- Moragg --\n------------\nL = DBM:GetModLocalization(\"Moragg\")\n\nL:SetGeneralLocalization({\n\tname = \"Moragg\"\n})\n\n------------\n-- Xevozz --\n------------\nL = DBM:GetModLocalization(\"Xevoss\")\n\nL:SetGeneralLocalization({\n\tname = \"Xevozz\"\n})\n\n----------------------------\n-- Zuramat el Obliterador --\n----------------------------\nL = DBM:GetModLocalization(\"Zuramat\")\n\nL:SetGeneralLocalization({\n\tname = \"Zuramat el Obliterador\"\n})\n\n--------------------------------\n-- Temporizadores de portales --\n--------------------------------\nL = DBM:GetModLocalization(\"PortalTimers\")\n\nL:SetGeneralLocalization({\n\tname = \"Temporizador de portales\"\n})\n\nL:SetWarningLocalization({\n\tWarningPortalSoon\t= \"Siguiente portal en breve\",\n\tWarningPortalNow\t= \"Portal %d\",\n\tWarningBossNow\t\t= \"Jefe en breve\"\n})\n\nL:SetTimerLocalization({\n\tTimerPortalIn\t= \"Portal %d\" ,\n})\n\nL:SetOptionLocalization({\n\tWarningPortalNow\t\t= \"Mostrar aviso cuando aparezca un portal\",\n\tWarningPortalSoon\t\t= \"Mostrar aviso previo para el siguiente portales\",\n\tWarningBossNow\t\t\t= \"Mostrar aviso previo para el siguiente jefe\",\n\tTimerPortalIn\t\t\t= \"Mostrar temporizador para el siguiente portal (después de jefe)\",\n\tShowAllPortalTimers\t\t= \"Mostrar temporizadores para todos los portales (impreciso)\"\n})\n\nL:SetMiscLocalization({\n\tSealbroken\t= \"¡Hemos atravesado la puerta de la prisión! ¡El camino hacia Dalaran está despejado! ¡Por fin hemos puesto punto y final a la guerra de El Nexo!\",\n\tWavePortal\t= \"Portales abiertos: (%d+)/18\"\n})\n\n------------------------\n-- Prueba del Campeón --\n------------------------\n------------------------\n-- El Caballero Negro --\n------------------------\nL = DBM:GetModLocalization(\"BlackKnight\")\n\nL:SetGeneralLocalization({\n\tname = \"El Caballero Negro\"\n})\n\nL:SetOptionLocalization({\n\tAchievementCheck\t\t= \"Anunciar fallo del logro 'Podría ser peor' al grupo\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Bien hecho. Hoy has demostrado algo...\",\n\tAchievementFailed\t= \">> LOGRO FALLADO: %s ha sido alcanzado por Explosión de necrófago <<\",\n\tYellCombatEnd\t\t= \"¡No! No debo fallar... otra vez...\"\n})\n\n-----------------------\n-- Grandes Campeones --\n-----------------------\nL = DBM:GetModLocalization(\"GrandChampions\")\n\nL:SetGeneralLocalization({\n\tname = \"Grand Champions\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"¡Bien luchado! Vuestro próximo reto llega de entre las filas de la propia Cruzada. Se os pondrá a prueba contra su considerable destreza.\"\n})\n\n----------------------------\n-- Confesora Cabelloclaro --\n----------------------------\nL = DBM:GetModLocalization(\"Confessor\")\n\nL:SetGeneralLocalization({\n\tname = \"Confesora Argenta\"\n})\n\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"¡Un trabajo excelente!\"\n})\n\n--------------------\n-- Eadric el Puro --\n--------------------\nL = DBM:GetModLocalization(\"EadricthePure\")\n\nL:SetGeneralLocalization({\n\tname = \"Eadric el Puro\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"¡Me rindo! Lo admito. Un trabajo excelente. ¿Puedo escaparme ya?\"\n})\n\n-------------------\n-- Foso de Saron --\n-------------------\n-----------------\n-- Agh y Puagh --\n-----------------\nL = DBM:GetModLocalization(\"Ick\")\n\nL:SetGeneralLocalization({\n\tname = \"Agh y Puagh\"\n})\n\n-------------------------------\n-- Maestro de forja Gargelus --\n-------------------------------\nL = DBM:GetModLocalization(\"ForgemasterGarfrost\")\n\nL:SetGeneralLocalization({\n\tname = \"Maestro de forja Gargelus\"\n})\n\nL:SetOptionLocalization({\n\tAchievementCheck\t= \"Anunciar avisos del logro 'Solo once campanadas' en el chat de grupo\"\n})\n\nL:SetMiscLocalization({\n\tSaroniteRockThrow\t= \"¡%s te lanza un pedrusco de saronita enorme!\",\n\tAchievementWarning\t= \"Aviso: %s tiene %d acumulaciones de Escarcha permanente\",\n\tAchievementFailed\t= \">> LOGRO FALLADO: %s tiene %d acumulaciones de Escarcha permanente <<\"\n})\n\n--------------------------------\n-- Señor de la Plaga Tyrannus --\n--------------------------------\nL = DBM:GetModLocalization(\"ScourgelordTyrannus\")\n\nL:SetGeneralLocalization({\n\tname = \"Señor de la Plaga Tyrannus\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t\t= \"¡Ay! Valientes aventureros, vuestra intromisión ha llegado a su fin. ¿Oís el ruido de huesos y acero acercándose por ese túnel? Es el sonido de vuestra inminente muerte.\", --Cannot promise just yet if this is right emote, it may be the second emote after this, will need to do more testing.\n\tHoarfrostTarget\t\t= \"¡La vermis de escarcha Dientrefrío mira a (%S+) y prepara un helado ataque!\",\n\tYellCombatEnd\t\t= \"Imposible... Dientefrío... Avisa...\"\n})\n\n-----------------------\n-- La Forja de Almas --\n-----------------------\n----------------\n--  Bronjahm  --\n----------------\nL = DBM:GetModLocalization(\"Bronjahm\")\n\nL:SetGeneralLocalization({\n\tname = \"Bronjahm\"\n})\n\n-----------------\n-- Devoraalmas --\n-----------------\nL = DBM:GetModLocalization(\"DevourerofSouls\")\n\nL:SetGeneralLocalization({\n\tname = \"Devoraalmas\"\n})\n\n--------------------------\n-- Cámaras de Reflexión --\n--------------------------\n-------------------------------\n-- Temporizadores de oleadas --\n-------------------------------\nL = DBM:GetModLocalization(\"HoRWaveTimer\")\n\nL:SetGeneralLocalization({\n\tname = \"Temporizador de oleadas\"\n})\n\nL:SetWarningLocalization({\n\tWarnNewWaveSoon\t= \"Nueva oleada pronto\",\n\tWarnNewWave\t\t= \"%s\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextWave\t= \"Siguiente oleada\"\n})\n\nL:SetOptionLocalization({\n\tWarnNewWave\t\t\t= \"Mostrar aviso cuando llega una oleada\",\n\tWarnNewWaveSoon\t\t= \"Mostrar aviso previo para nueva oleada (después del primer jefe)\",\n\tShowAllWaveWarnings\t= \"Mostrar avisos previos para todas las oleadas\",\t--Is this a warning or a pre-warning?\n\tTimerNextWave\t\t= \"Mostrar temporizador para la siguiente tanda de oleadas (después del primer jefe)\",\n\tShowAllWaveTimers\t= \"Mostrar temporizadores para todas las oleadas (impreciso)\"\n})\n\nL:SetMiscLocalization({\n\tFalric\t\t= \"Falric\",\n\tWaveCheck\t= \"Oleada de espíritus = (%d+)/10\"\n})\n\n--------------\n--  Falric  --\n--------------\nL = DBM:GetModLocalization(\"Falric\")\n\nL:SetGeneralLocalization({\n\tname = \"Falric\"\n})\n\n--------------\n--  Marwyn  --\n--------------\nL = DBM:GetModLocalization(\"Marwyn\")\n\nL:SetGeneralLocalization({\n\tname = \"Marwyn\"\n})\n\n---------------------\n-- Huida de Arthas --\n---------------------\nL = DBM:GetModLocalization(\"LichKingEvent\")\n\nL:SetGeneralLocalization({\n\tname = \"Huida de Arthas\"\n})\n\nL:SetTimerLocalization({\n\tachievementEscape\t= \"Logro: No nos retiramos\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t= \"Mostrar avisos para las oleadas próximas\"\n})\n\nL:SetMiscLocalization({\n\tArthasYellKill\t= \"¡FUEGO! ¡FUEGO!\",\n\tGhoul\t\t\t= \"Necrófago enfurecido\",\t--creature id 36940. Not sure how to use these in function above to simplify locals though. :\\\n\tAbom\t\t\t= \"Abominación torpe\",\t\t--creature id 37069\n\tWitchDoctor\t\t= \"Médico brujo resucitado\",--creature id 36941\n\tWave1\t\t\t= \"¡No hay escapatoria!\",\n\tWave2\t\t\t= \"Sucumbid al frío de la tumba.\",\n\tWave3\t\t\t= \"Otro final sin salida.\",\n\tWave4\t\t\t= \"¿Cuánto vais a aguantar?\"\n})\n"
  },
  {
    "path": "DBM-Party-WotLK/localization.fr.lua",
    "content": "﻿if GetLocale() ~= \"frFR\" then return end\n\nlocal L\n\nlocal optionWarning\t\t= \"Activer l'alerte : %s\"\nlocal optionPreWarning\t= \"Activer la pré-alerte : %s\"\n\n----------------------------------\n--  Ahn'Kahet: The Old Kingdom  --\n----------------------------------\n--  Prince Taldaram  --\n-----------------------\nL = DBM:GetModLocalization(\"Taldaram\")\n\nL:SetGeneralLocalization({\n\tname = \"Prince Taldaram\"\n})\n\n-------------------\n--  Elder Nadox  --\n-------------------\nL = DBM:GetModLocalization(\"Nadox\")\n\nL:SetGeneralLocalization({\n\tname = \"Ancien Nadox\"\n})\n\n---------------------------\n--  Jedoga Shadowseeker  --\n---------------------------\nL = DBM:GetModLocalization(\"JedogaShadowseeker\")\n\nL:SetGeneralLocalization({\n\tname = \"Jedoga Cherchelombre\"\n})\n\n---------------------\n--  Herald Volazj  --\n---------------------\nL = DBM:GetModLocalization(\"Volazj\")\n\nL:SetGeneralLocalization({\n\tname = \"Héraut Volazj\"\n})\n\n----------------\n--  Amanitar  --\n----------------\nL = DBM:GetModLocalization(\"Amanitar\")\n\nL:SetGeneralLocalization({\n\tname = \"Amanitar\"\n})\n\n-------------------\n--  Azjol-Nerub  --\n---------------------------------\n--  Krik'thir the Gatewatcher  --\n---------------------------------\nL = DBM:GetModLocalization(\"Krikthir\")\n\nL:SetGeneralLocalization({\n\tname = \"Krik'thir le Gardien de porte\"\n})\n\n----------------\n--  Hadronox  --\n----------------\nL = DBM:GetModLocalization(\"Hadronox\")\n\nL:SetGeneralLocalization({\n\tname = \"Hadronox\"\n})\n\n-------------------------\n--  Anub'arak (Party)  --\n-------------------------\nL = DBM:GetModLocalization(\"Anubarak\")\n\nL:SetGeneralLocalization({\n\tname = \"Anub'arak (Groupe)\"\n})\n\n---------------------------------------\n--  Caverns of Time: Old Stratholme  --\n---------------------------------------\n--  Meathook  --\n----------------\nL = DBM:GetModLocalization(\"Meathook\")\n\nL:SetGeneralLocalization({\n\tname = \"Grancrochet\"\n})\n\n--------------------------------\n--  Salramm the Fleshcrafter  --\n--------------------------------\nL = DBM:GetModLocalization(\"SalrammTheFleshcrafter\")\n\nL:SetGeneralLocalization({\n\tname = \"Salramm le Façonneur de chair\"\n})\n\n-------------------------\n--  Chrono-Lord Epoch  --\n-------------------------\nL = DBM:GetModLocalization(\"ChronoLordEpoch\")\n\nL:SetGeneralLocalization({\n\tname = \"Chronoseigneur Epoch\"\n})\n\n-----------------\n--  Mal'Ganis  --\n-----------------\nL = DBM:GetModLocalization(\"MalGanis\")\n\nL:SetGeneralLocalization({\n\tname = \"Mal'Ganis\"\n})\n\nL:SetMiscLocalization({\n\tOutro\t= \"Votre voyage ne fait que commencer, jeune prince. Rassemblez vos troupes et retrouvez-moi dans les terres arctiques du Norfendre. C'est là-bas que nous règlerons nos comptes. C'est là-bas que votre vraie destinée vous attend.\"\n})\n\n-----------------\n-- Wave Timers --\n-----------------\nL = DBM:GetModLocalization(\"StratWaves\")\n\nL:SetGeneralLocalization({\n\tname = \"Vagues de Stratholme\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveNow\t= \"Vague %d: %s\"\n})\n\nL:SetTimerLocalization({\n\tTimerWaveIn\t\t=\t\"Prochaine vague (6)\",\n})\n\nL:SetOptionLocalization({\n\tWarningWaveNow\t= optionWarning:format(\"New Wave\"),\n\tTimerWaveIn\t\t= \"Montre le timer \\\"Prochaine vague\\\" (vague 6 seulement)\",\n\tTimerRoleplay\t= \"Afficher le timer de la durée du jeu de rôle initial\"\n})\n\nL:SetMiscLocalization({\n\tMeathook\t= \"Grancrochet\",\n\tSalramm\t\t= \"Salramm le Façonneur de chair\",\n\tDevouring\t= \"Goule dévorante\",\n\tEnraged\t\t= \"Goule enragée\",\n\tNecro\t\t= \"Nécromancien\",\n\tFiend\t\t= \"Démon des cryptes\",\n\tStalker\t\t= \"Traqueur des tombes\",\n\tAbom\t\t= \"Assemblage recousu\",\n\tAcolyte\t\t= \"Acolyte\",\n\tWave1\t\t= \"%d %s\",\n\tWave2\t\t= \"%d %s et %d %s\",\n\tWave3\t\t= \"%d %s, %d %s et %d %s\",\n\tWave4\t\t= \"%d %s, %d %s, %d %s et %d %s\",\n\tWaveBoss\t= \"%s\",\n\tWaveCheck\t= \"Vagues du Fléau = (%d+)/10\",\n\tRoleplay\t= \"Ravi que vous ayez réussi à nous rejoindre, Uther.\",\n\tRoleplay2\t= \"On dirait que tout le monde est prêt. N'oubliez pas, ces gens sont tous infectés et ils vont bientôt mourir. Nous devons purifier Stratholme pour protéger le reste de Lordaeron du Fléau. Allons-y.\"\n})\n\n----------------------\n-- Drak'Tharon Keep --\n----------------------\n-- Trollgore --\n---------------\nL = DBM:GetModLocalization(\"Trollgore\")\n\nL:SetGeneralLocalization({\n\tname = \"Trollétripe\"\n})\n\nL:SetMiscLocalization({\n\tYellExplosion = \"Cadavre fait boum !\"\n})\n\n------------------------\n-- Novos the Summoner --\n------------------------\nL = DBM:GetModLocalization(\"NovosTheSummoner\")\n\nL:SetGeneralLocalization({\n\tname = \"Novos l'Invocateur\"\n})\n\nL:SetWarningLocalization({\n\tWarnCrystalHandler\t= \"Eleveur de cristal apparaissent (%d restant)\"\n})\n\nL:SetTimerLocalization({\n\ttimerCrystalHandler\t= \"Eleveur de cristal apparaissent\"\n})\n\nL:SetOptionLocalization({\n\tWarnCrystalHandler\t= \"Alerte indiquant Eleveur de cristal apparaissent\",\n\ttimerCrystalHandler\t= \"Afficher le temps pour le prochain Eleveur de cristal apparaissent\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"Ce frisson glacé qui vous parcourt est l'annonciateur de votre perte !\",\n\tHandlerYell\t\t= \"Renforcez mes défenses ! Faites vite, bon sang !\",\n\tPhase2\t\t\t= \"Vous voyez bien que tout cela est futile !\",\n\tYellKill\t\t= \"Your efforts... are in vain.\",\n})\n\n\n-----------------\n--  King Dred  --\n-----------------\nL = DBM:GetModLocalization(\"KingDred\")\n\nL:SetGeneralLocalization({\n\tname = \"Roi Dred\"\n})\n\n-----------------------------\n--  The Prophet Tharon'ja  --\n-----------------------------\nL = DBM:GetModLocalization(\"ProphetTharonja\")\n\nL:SetGeneralLocalization({\n\tname = \"Le prophète Tharon'ja\"\n})\n\n---------------\n--  Gundrak  --\n----------------\n--  Slad'ran  --\n----------------\nL = DBM:GetModLocalization(\"Sladran\")\n\nL:SetGeneralLocalization({\n\tname = \"Slad'ran\"\n})\n\n---------------\n--  Moorabi  --\n---------------\nL = DBM:GetModLocalization(\"Moorabi\")\n\nL:SetGeneralLocalization({\n\tname = \"Moorabi\"\n})\n\n-------------------------\n--  Drakkari Colossus  --\n-------------------------\nL = DBM:GetModLocalization(\"BloodstoneAnnihilator\")\n\nL:SetGeneralLocalization({\n\tname = \"Colosse drakkari\"\n})\n\nL:SetWarningLocalization({\n\twarningElemental\t= \"Phase 2 : L’élémentaire\",\n\tWarningStone\t\t= \"Phase 1 : Le colosse\"\n})\n\nL:SetOptionLocalization({\n\tWarningElemental\t= \"Activer l'annonce de la Phase 2 : L’élémentaire\",\n\tWarningStone\t\t= \"Activer l'annonce de la Phase 1 : Le colosse\"\n})\n\n-----------------\n--  Gal'darah  --\n-----------------\nL = DBM:GetModLocalization(\"Galdarah\")\n\nL:SetGeneralLocalization({\n\tname = \"Gal'darah\"\n})\n\nL:SetWarningLocalization({\n\tTimerPhase2\t\t= \"Phase 2 : L’avatar d'Akali\",\n\tTimerPhase1\t\t= \"Phase 1 : Grand prophète d’Akali\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t\t= \"Phase 2 : L’avatar d'Akali\",\n\tTimerPhase1\t\t= \"Phase 1 : Grand prophète d’Akali\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t= \"Alerte concernant Phase 2 : L’avatar d'Akali\",\n\tTimerPhase1\t\t= \"Alerte concernant Phase 1 : Grand prophète d’Akali\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase2_1\t= \"Après ça il restera plus rien !\",\n\tYellPhase2_2\t= \"Tu veux voir la puissance ? Je vais te montrer la PUISSANCE !\"\n})\n\n-------------------------\n--  Eck the Ferocious  --\n-------------------------\nL = DBM:GetModLocalization(\"Eck\")\n\nL:SetGeneralLocalization({\n\tname = \"Eck le Féroce\"\n})\n\n--------------------------\n--  Halls of Lightning  --\n--------------------------\n--  General Bjarngrim  --\n-------------------------\nL = DBM:GetModLocalization(\"Bjarngrin\")\n\nL:SetGeneralLocalization({\n\tname = \"Général Bjarngrim\"\n})\n\n-------------\n--  Ionar  --\n-------------\nL = DBM:GetModLocalization(\"Ionar\")\n\nL:SetGeneralLocalization({\n\tname = \"Ionar\"\n})\n\n---------------\n--  Volkhan  --\n---------------\nL = DBM:GetModLocalization(\"Volkhan\")\n\nL:SetGeneralLocalization({\n\tname = \"Volkhan\"\n})\n\n------------\n-- Loken --\n------------\nL = DBM:GetModLocalization(\"Loken\")\n\nL:SetGeneralLocalization({\n\tname = \"Loken\"\n})\n\n----------------------\n--  Halls of Stone  --\n-----------------------\n--  Maiden of Grief  --\n-----------------------\nL = DBM:GetModLocalization(\"MaidenOfGrief\")\n\nL:SetGeneralLocalization({\n\tname = \"Damoiselle de peine\"\n})\n\n------------------\n--  Krystallus  --\n------------------\nL = DBM:GetModLocalization(\"Krystallus\")\n\nL:SetGeneralLocalization({\n\tname = \"Krystallus\"\n})\n\n----------------------------\n-- Sjonnir the Ironshaper --\n----------------------------\nL = DBM:GetModLocalization(\"SjonnirTheIronshaper\")\n\nL:SetGeneralLocalization({\n\tname = \"Sjonnir le Sculptefer\"\n})\n\n------------------------------------\n-- Brann Bronzebeard Escort Event --\n------------------------------------\nL = DBM:GetModLocalization(\"BrannBronzebeard\")\n\nL:SetGeneralLocalization({\n\tname = \"Tribunal des âges\"\n})\n\nL:SetWarningLocalization({\n\tWarningPhase\t= \"Phase %d\"\n})\n\nL:SetTimerLocalization({\n   timerEvent   = \"Temps restant\"\n})\n\nL:SetOptionLocalization({\n\tWarningPhase\t= optionWarning:format(\"Phase #\"),\n\ttimerEvent\t\t= \"Montrer le timer de l'event\"\n})\n\nL:SetMiscLocalization({\n\tPull\t= \"Ouvrez l'œil ! Je vais régler ça en deux coups de cuillè -\",\n\tPhase1\t= \"Faille de sécurité détectée. Analyse des archives historiques transférée en attente de basse priorité. Contre-mesures déclenchées.\",\n\tPhase2\t= \"Seuil d'indice de menace dépassé. Archivation céleste annulée. Niveau de sécurité augmenté.\",\n\tPhase3\t= \"Indice de menace critique. Analyse du Vide détournée. Lancement des protocoles d'épuration.\",\n\tKill\t= \"Alerte : systèmes de protection désactivés. Purge de la mémoire en cours…\"\n})\n\n---------------\n-- The Nexus --\n---------------\n-- Anomalus --\n--------------\nL = DBM:GetModLocalization(\"Anomalus\")\n\nL:SetGeneralLocalization({\n\tname = \"Anomalus\"\n})\n\n-------------------------------\n--  Ormorok the Tree-Shaper  --\n-------------------------------\nL = DBM:GetModLocalization(\"OrmorokTheTreeShaper\")\n\nL:SetGeneralLocalization({\n\tname = \"Ormorok le Sculpte-arbre\"\n})\n\n----------------------------\n--  Grand Magus Telestra  --\n----------------------------\nL = DBM:GetModLocalization(\"GrandMagusTelestra\")\n\nL:SetGeneralLocalization({\n\tname = \"Grand magus Telestra\"\n})\n\nL:SetWarningLocalization({\n\tWarningSplitSoon\t= \"Séparation bientôt\",\n\tWarningSplitNow\t\t= \"Séparation\",\n\tWarningMerge\t\t= \"Rassemblement\"\n})\nL:SetOptionLocalization({\n\tWarningSplitSoon\t= \"Montre une alerte lorsque la Séparation est proche\",\n\tWarningSplitNow\t\t= \"Montre une alerte lors de la Séparation\",\n\tWarningMerge\t\t= \"Montre une alerte lors du Rassemblement\"\n})\n\nL:SetMiscLocalization({\n\tSplitTrigger1\t\t= \"Il y en aura assez pour tout le monde.\",\n\tSplitTrigger2\t\t= \"Vous allez être trop bien servis !\",\n\tMergeTrigger\t\t= \"Et maintenant finissons le travail !\"\n})\n\n-----------------\n-- Keristrasza --\n-----------------\nL = DBM:GetModLocalization(\"Keristrasza\")\n\nL:SetGeneralLocalization({\n\tname = \"Keristrasza\"\n})\n\n---------------------------------\n-- Commander Kolurg/Stoutbeard --\n---------------------------------\nL = DBM:GetModLocalization(\"Commander\")\n\nlocal commander = \"Unknown\"\nif UnitFactionGroup(\"player\") == \"Alliance\" then\n\tcommander = \"Commandant Kolurg\"\nelseif UnitFactionGroup(\"player\") == \"Horde\" then\n\tcommander = \"Commandant Rudebarbe\"\nend\n\nL:SetGeneralLocalization({\n\tname = commander\n})\n\n----------------\n-- The Oculus --\n-----------------------------\n-- Drakos the Interrogator --\n-----------------------------\nL = DBM:GetModLocalization(\"DrakosTheInterrogator\")\n\nL:SetGeneralLocalization({\n\tname = \"Drakos l'Interrogateur\"\n})\n\nL:SetOptionLocalization({\n\tMakeitCountTimer\t= \"Montre le timer pour le haut-fait Comptez là-dessus\"\n})\n\nL:SetMiscLocalization({\n\tMakeitCountTimer\t= \"Comptez là-dessus\"\n})\n\n--------------------\n-- Mage-Lord Urom --\n--------------------\nL = DBM:GetModLocalization(\"MageLordUrom\")\n\nL:SetGeneralLocalization({\n\tname = \"Seigneur-mage Urom\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t= \"Pauvres crétins aveugles !\"\n})\n\n--------------------------\n--  Varos Cloudstrider  --\n--------------------------\nL = DBM:GetModLocalization(\"VarosCloudstrider\")\n\nL:SetGeneralLocalization({\n\tname = \"Varos Arpentenuée\"\n})\n\n---------------------------\n--  Ley-Guardian Eregos  --\n---------------------------\nL = DBM:GetModLocalization(\"LeyGuardianEregos\")\n\nL:SetGeneralLocalization({\n\tname = \"Gardien-tellurique Eregos\"\n})\n\nL:SetMiscLocalization({\n\tMakeitCountTimer\t= \"Comptez là-dessus\"\n})\n\n--------------------\n--  Utgarde Keep  --\n-----------------------\n--  Prince Keleseth  --\n-----------------------\nL = DBM:GetModLocalization(\"Keleseth\")\n\nL:SetGeneralLocalization({\n\tname = \"Prince Keleseth\"\n})\n\n--------------------------------\n--  Skarvald the Constructor  --\n--  & Dalronn the Controller  --\n--------------------------------\nL = DBM:GetModLocalization(\"ConstructorAndController\")\n\nL:SetGeneralLocalization({\n\tname = \"Constructeur & Contrôleur\"\n})\n\n----------------------------\n--  Ingvar the Plunderer  --\n----------------------------\nL = DBM:GetModLocalization(\"IngvarThePlunderer\")\n\nL:SetGeneralLocalization({\n\tname = \"Ingvar le Pilleur\"\n})\n\nL:SetMiscLocalization({\n\tYellIngvarPhase2\t= \"Je reviens... Ahh... Une seconde chance de vous tailler le crâne !\",\n\tYellCombatEnd\t\t= \"Non ! Je peux faire... mieux, je peux...\"\n})\n\n----------------------\n-- Utgarde Pinnacle --\n------------------------\n-- Skadi the Ruthless --\n------------------------\nL = DBM:GetModLocalization(\"SkadiTheRuthless\")\n\nL:SetGeneralLocalization({\n\tname = \"Skadi le Brutal\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"Quels chiens osent s'introduire ici ? Remuez-vous, mes frères ! Un festin pour celui qui me ramène leurs têtes !\",\n\tPhase2\t\t\t= \"Misérables canailles ! Vos cadavres feront des morceaux de choix pour mon nouveau drake !\"\n})\n\n-------------------\n--  King Ymiron  --\n-------------------\nL = DBM:GetModLocalization(\"Ymiron\")\n\nL:SetGeneralLocalization({\n\tname = \"Roi Ymiron\"\n})\n\n-------------------------\n--  Svala Sorrowgrave  --\n-------------------------\nL = DBM:GetModLocalization(\"SvalaSorrowgrave\")\n\nL:SetGeneralLocalization({\n\tname = \"Svala Tristetombe\"\n})\n\nL:SetTimerLocalization({\n\ttimerRoleplay\t\t= \"Svala Tristetombe active\"\n})\n\nL:SetOptionLocalization({\n\ttimerRoleplay\t\t= \"Afficher le timer de la durée du roleplay avant que Svala Tristetombe ne devienne actif\"\n})\n\nL:SetMiscLocalization({\n\tSvalaRoleplayStart\t= \"Votre seigneurie ! J'ai fait ainsi que vous m'aviez commandé, et j'implore à présent votre bénédiction !\"\n})\n\n---------------------\n-- Gortok Palehoof --\n---------------------\nL = DBM:GetModLocalization(\"GortokPalehoof\")\n\nL:SetGeneralLocalization({\n\tname = \"Gortok Pâle-sabot\"\n})\n\n---------------------\n-- The Violet Hold --\n---------------------\n-- Cyanigosa --\n---------------\nL = DBM:GetModLocalization(\"Cyanigosa\")\n\nL:SetGeneralLocalization({\n\tname = \"Cyanigosa\"\n})\n\nL:SetMiscLocalization({\n\tCyanArrived\t= \"A valiant defense, but this city must be razed. I will fulfill Malygos's wishes myself!\"\n})\n\n--------------\n--  Erekem  --\n--------------\nL = DBM:GetModLocalization(\"Erekem\")\n\nL:SetGeneralLocalization({\n\tname = \"Erekem\"\n})\n\n---------------\n--  Ichoron  --\n---------------\nL = DBM:GetModLocalization(\"Ichoron\")\n\nL:SetGeneralLocalization({\n\tname = \"Ichoron\"\n})\n\n-----------------\n--  Lavanthor  --\n-----------------\nL = DBM:GetModLocalization(\"Lavanthor\")\n\nL:SetGeneralLocalization({\n\tname = \"Lavanthor\"\n})\n\n--------------\n--  Moragg  --\n--------------\nL = DBM:GetModLocalization(\"Moragg\")\n\nL:SetGeneralLocalization({\n\tname = \"Moragg\"\n})\n\n--------------\n--  Xevozz  --\n--------------\nL = DBM:GetModLocalization(\"Xevoss\")\n\nL:SetGeneralLocalization({\n\tname = \"Xevozz\"\n})\n\n-------------------------------\n--  Zuramat the Obliterator  --\n-------------------------------\nL = DBM:GetModLocalization(\"Zuramat\")\n\nL:SetGeneralLocalization({\n\tname = \"Zuramat l'Oblitérateur\"\n})\n\n-------------------\n-- Portal Timers --\n-------------------\nL = DBM:GetModLocalization(\"PortalTimers\")\n\nL:SetGeneralLocalization({\n\tname = \"Timer des portails\"\n})\n\nL:SetWarningLocalization({\n\tWarningPortalSoon\t= \"Portail imminent\",\n\tWarningPortalNow\t= \"Portail #%d\",\n\tWarningBossNow\t\t= \"Arrivée d'un boss\"\n})\n\nL:SetTimerLocalization({\n\tTimerPortalIn\t= \"Portail #%d\"\n})\n\nL:SetOptionLocalization({\n\tWarningPortalNow\t\t= optionWarning:format(\"Portail\"),\n\tWarningPortalSoon\t\t= optionPreWarning:format(\"Portail imminent\"),\n\tWarningBossNow\t\t\t= optionWarning:format(\"Arrivée d'un boss\"),\n\tTimerPortalIn\t\t\t= \"Afficher le timer des portails\",\n\tShowAllPortalTimers\t\t= \"Activer les annonces pour toutes les vagues\"\n})\n\nL:SetMiscLocalization({\n\tSealbroken\t= \"Gardes, nous partons ! Ces aventuriers vont se charger de la suite ! Allez, en route !\",\n\tWavePortal\t= \"Portails Ouverts : (%d+)/18\"\n})\n\n-----------------------------\n--  Trial of the Champion  --\n-----------------------------\n--  The Black Knight  --\n------------------------\nL = DBM:GetModLocalization(\"BlackKnight\")\n\nL:SetGeneralLocalization({\n\tname = \"Le Chevalier noir\"\n})\n\nL:SetOptionLocalization({\n\tAchievementCheck\t= \"Annoncer l'échec de la réussite « I've Had Worse » pour faire la fête\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Bien joué. Aujourd'hui, vous avez fait la preuv-\",\n\tAchievementFailed\t= \">> Haut fait ÉCHEC: %s a été frappé par Explosion de goule <<\",\n\tYellCombatEnd\t\t= \"Non ! Pas encore... un échec...\"\n})\n\n-------------------\n-- Grand Champions --\n-------------------\nL = DBM:GetModLocalization(\"GrandChampions\")\n\nL:SetGeneralLocalization({\n\tname = \"Grand Champions\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"Joli combat ! Votre prochain défi vient directement des rangs de la Croisade. L'épreuve sera de vous mesurer à l'incroyable vituosité de ses cavaliers.\"\n})\n\n-------------------\n-- Argent Confessor Paletress --\n-------------------\nL = DBM:GetModLocalization(\"Confessor\")\n\nL:SetGeneralLocalization({\n\tname = \"Confesseur d'argent Paletress\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"Bon travail !\"\n})\n\n-------------------\n-- Eadric the Pure --\n-------------------\nL = DBM:GetModLocalization(\"EadricthePure\")\n\nL:SetGeneralLocalization({\n\tname = \"Eadric le Pur\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"Grâce ! Je me rends. Excellent travail. Puis-je me débiner, maintenant ?\"\n})\n\n---------------------\n-- Pit of Saron --\n-------------------\n--  Ick and Krick  --\n-------------------\nL = DBM:GetModLocalization(\"Ick\")\n\nL:SetGeneralLocalization({\n\tname = \"Ick\"\n})\n\n----------------------------\n--  Forgemaster Garfrost  --\n----------------------------\nL = DBM:GetModLocalization(\"ForgemasterGarfrost\")\n\nL:SetGeneralLocalization({\n\tname = \"Maître-forge Gargivre\"\n})\n\nL:SetOptionLocalization({\n\tAchievementCheck\t= \"Annoncer les avertissements de réussite « Ne va pas à onze » pour faire la fête\"\n})\n\nL:SetMiscLocalization({\n\tSaroniteRockThrow\t= \"%s vous lance un énorme bloc de saronite !\",\n\tAchievementWarning\t= \"Alerte: %s a %d stacks de Gel prolongé\",\n\tAchievementFailed\t= \">> Haut fait ÉCHEC: %s a %d stacks de Gel prolongé <<\"\n})\n\n----------------------------\n--  Scourgelord Tyrannus  --\n----------------------------\nL = DBM:GetModLocalization(\"ScourgelordTyrannus\")\n\nL:SetGeneralLocalization({\n\tname = \"Seigneur du Fléau Tyrannus\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"Hélas, mes très, très braves aventuriers, votre intrusion touche à sa fin. Entendez-vous le claquement de l'acier sur les os qui monte du tunnel, derrière vous ? C'est le son de votre mort imminente.\",\n\tHoarfrostTarget\t= \"^%%s fixe (%S+) du regard et prépare une attaque de glace !\",\n\tYellCombatEnd\t= \"Impossible.... Frigecroc.... avertis....\"\n})\n\n---------------------\n-- Forge of Souls --\n---------------------\n-- Bronjahm --\n-------------------\nL = DBM:GetModLocalization(\"Bronjahm\")\n\nL:SetGeneralLocalization({\n\tname = \"Bronjahm\"\n})\n\n-------------------\n-- Devourer of Souls --\n-------------------\nL = DBM:GetModLocalization(\"DevourerofSouls\")\n\nL:SetGeneralLocalization({\n\tname = \"Dévoreur d'âmes\"\n})\n\n---------------------------\n--  Halls of Reflection  --\n---------------------------\n--  Wave Timers  --\n-------------------\nL = DBM:GetModLocalization(\"HoRWaveTimer\")\n\nL:SetGeneralLocalization({\n\tname = \"Timers des vagues\"\n})\n\nL:SetWarningLocalization({\n\tWarnNewWaveSoon\t= \"Prochaine vague bientôt\",\n\tWarnNewWave\t\t= \"Arrivée de %s\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextWave\t= \"Prochaine vague\"\n})\n\nL:SetOptionLocalization({\n\tWarnNewWave\t\t\t= \"Montre une alerte pour l'arrivée d'un boss\",\n\tWarnNewWaveSoon\t\t= \"Montre une pré-alerte pour la prochaine vague\",\n\tShowAllWaveWarnings\t= \"Montre des alertes et pré-alertes pour toutes les vagues\",\t--Is this a warning or a pre-warning?\n\tTimerNextWave\t\t= \"Affiche un timer pour le prochain ensemble de vague (après le boss de la vague 5)\",\n\tShowAllWaveTimers\t= \"Affiche un timer pour toutes les vagues\"\n})\n\nL:SetMiscLocalization({\n\tFalric\t\t= \"Falric\",\n\tWaveCheck\t= \"Vague d'esprit = (%d+)/10\"\n})\n\n--------------\n--  Falric  --\n--------------\nL = DBM:GetModLocalization(\"Falric\")\n\nL:SetGeneralLocalization({\n\tname = \"Falric\"\n})\n\n--------------\n--  Marwyn  --\n--------------\nL = DBM:GetModLocalization(\"Marwyn\")\n\nL:SetGeneralLocalization({\n\tname = \"Marwyn\"\n})\n\n-----------------------\n--  Lich King Event  --\n-----------------------\nL = DBM:GetModLocalization(\"LichKingEvent\")\n\nL:SetGeneralLocalization({\n\tname = \"Échapper à Arthas\"\n})\n\nL:SetTimerLocalization({\n\tachievementEscape\t= \"Le temps d'échapper à\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t= \"Afficher un avertissement pour les vagues entrantes.\"\n})\n\nL:SetMiscLocalization({\n\tArthasYellKill\t= \"FEU ! FEU !\",\n\tGhoul\t\t\t= \"Raging Ghoul\",\t\t\t--creature id 36940. Not sure how to use these in function above to simplify locals though. :\\\n\tAbom\t\t\t= \"Lumbering Abomination\",\t--creature id 37069\n\tWitchDoctor\t\t= \"Risen Witch Doctor\",\t\t--creature id 36941\n\tWave1\t\t\t= \"Vous ne vous échapperez pas !\",\n\tWave2\t\t\t= \"Succombez au froid de la tombe !\",\n\tWave3\t\t\t= \"Encore un cul-de-sac !\",\n\tWave4\t\t\t= \"Combien de temps allez-vous tenir ?\"\n})\n"
  },
  {
    "path": "DBM-Party-WotLK/localization.kr.lua",
    "content": "﻿if GetLocale() ~= \"koKR\" then return end\n\nlocal L\n\n--------------------------------\n-- 안카헤트 - 고대 왕국       --\n--------------------------------\n-- Prince Taldaram --\n---------------------\nL = DBM:GetModLocalization(\"Taldaram\")\n\nL:SetGeneralLocalization({\n\tname = \"공작 탈다람\"\n})\n\n-----------------\n-- 장로 나독스 --\n-----------------\nL = DBM:GetModLocalization(\"Nadox\")\n\nL:SetGeneralLocalization({\n\tname = \"장로 나독스\"\n})\n\n-------------------------\n-- 어둠추적자 제도가 --\n-------------------------\nL = DBM:GetModLocalization(\"JedogaShadowseeker\")\n\nL:SetGeneralLocalization({\n\tname = \"어둠추적자 제도가\"\n})\n\n-------------------\n-- 사자 볼라즈 --\n-------------------\nL = DBM:GetModLocalization(\"Volazj\")\n\nL:SetGeneralLocalization({\n\tname = \"사자 볼라즈\"\n})\n\n--------------\n-- 아마니타르 --\n--------------\nL = DBM:GetModLocalization(\"Amanitar\")\n\nL:SetGeneralLocalization({\n\tname = \"아마니타르\"\n})\n\n-----------------\n-- 아졸네룹    --\n---------------------\n-- 문지기 크릭시르 --\n---------------------\nL = DBM:GetModLocalization(\"Krikthir\")\n\nL:SetGeneralLocalization({\n\tname = \"문지기 크릭시르\"\n})\n\n----------------\n-- 하드로녹스 --\n----------------\nL = DBM:GetModLocalization(\"Hadronox\")\n\nL:SetGeneralLocalization({\n\tname = \"하드로녹스\"\n})\n\n--------------\n-- 아눕아락 --\n--------------\nL = DBM:GetModLocalization(\"Anubarak\")\n\nL:SetGeneralLocalization({\n\tname = \"아눕아락(5인)\"\n})\n\n---------------------------------\n-- 시간의 동굴 : 옛 스트라솔름 --\n---------------------------------\n-- 살덩이갈고리 --\n------------------\nL = DBM:GetModLocalization(\"Meathook\")\n\nL:SetGeneralLocalization({\n\tname = \"살덩이갈고리\"\n})\n\n-----------------------\n-- 살덩이창조자 살람 --\n-----------------------\nL = DBM:GetModLocalization(\"SalrammTheFleshcrafter\")\n\nL:SetGeneralLocalization({\n\tname = \"살덩이창조자 살람\"\n})\n\n------------------------\n-- 시간의 군주 에포크 --\n------------------------\nL = DBM:GetModLocalization(\"ChronoLordEpoch\")\n\nL:SetGeneralLocalization({\n\tname = \"시간의 군주 에포크\"\n})\n\n--------------\n-- 말가니스 --\n--------------\nL = DBM:GetModLocalization(\"MalGanis\")\n\nL:SetGeneralLocalization({\n\tname = \"말가니스\"\n})\n\nL:SetMiscLocalization({\n\tOutro\t= \"너의 여정은 이제 막 시작이다, 젊은 왕자여. 병사들을 모아 극한의 땅, 노스렌드로 나를 찾아와라. 그곳에서 모든 일이 결판날 것이다. 네 진정한 운명도 그곳에서 시작되지.\"\n})\n\n-------------------\n--  Wave Timers  --\n-------------------\nL = DBM:GetModLocalization(\"StratWaves\")\n\nL:SetGeneralLocalization({\n\tname = \"옛 스트라솔름: 스컬지 공격\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveNow\t= \"스컬지 공격 #%d: %s\"\n})\n\nL:SetTimerLocalization({\n\tTimerWaveIn\t\t= \"다음 스컬지 공격: #6\",\n\tTimerRoleplay\t= \"아서스 이야기 종료\"\n})\n\nL:SetOptionLocalization({\n\tWarningWaveNow\t= \"다음 스컬지 공격 알림 보기\",\n\tTimerWaveIn\t\t= \"우두머리 처치 이후 다음 스컬지 공격 바 보기\",\n\tTimerRoleplay\t= \"시작 이야기 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tMeathook\t= \"살덩이갈고리\",\n\tSalramm\t\t= \"살덩이창조자 살람\",\n\tDevouring\t= \"게걸스러운 구울\",\n\tEnraged\t\t= \"격노한 구울\",\n\tNecro\t\t= \"정예 강령술사\",\n\tFiend\t\t= \"어둠의 강령술사\",\n\tStalker\t\t= \"무덤 거미\",\n\tAbom\t\t= \"위액 골렘\",\n\tAcolyte\t\t= \"수행 사제\",\n\tWave1\t\t= \"%d %s\",\n\tWave2\t\t= \"%d %s, %d %s\",\n\tWave3\t\t= \"%d %s, %d %s, %d %s\",\n\tWave4\t\t= \"%d %s, %d %s, %d %s, %d %s\",\n\tWaveBoss\t= \"%s\",\n\tWaveCheck\t= \"스컬지 공격 = (%d+)/10\",\n\tRoleplay\t= \"드디어 나타나셨군, 우서.\",\n\tRoleplay2\t= \"준비가 된 것 같군. 명심해라. 이들은 끔찍한 역병에 걸렸고, 어차피 죽을 것이다. 스컬지의 손아귀에서 로데론을 지키려면 스트라솔름을 정화해야 한다. 가자.\"\n})\n\n-------------------\n-- 드락타론 성채 --\n-------------------\n-- 송곳아귀 --\n--------------\nL = DBM:GetModLocalization(\"Trollgore\")\n\nL:SetGeneralLocalization({\n\tname = \"송곳아귀\"\n})\n\nL:SetMiscLocalization({\n\tYellExplosion = \"터져라, 뻥!\"\n})\n\n-------------------\n-- 소환사 노보스 --\n-------------------\nL = DBM:GetModLocalization(\"NovosTheSummoner\")\n\nL:SetGeneralLocalization({\n\tname = \"소환사 노보스\"\n})\n\nL:SetWarningLocalization({\n\tWarnCrystalHandler\t= \"수정 제어사 생성됨(남음 %d개)\"\n})\n\nL:SetTimerLocalization({\n\ttimerCrystalHandler\t= \"수정 제어사 생성\"\n})\n\nL:SetOptionLocalization({\n\tWarnCrystalHandler\t= \"수정 제어사 생성 시 경고 표시\",\n\ttimerCrystalHandler\t= \"다음 수정 제어사 생성에 대한 타이머 표시\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"견딜 수 없는 한기가 죽음을 몰고 오리니.\",\n\tHandlerYell\t\t= \"와서 나를 보호해라! 어서! 망할 놈들아!\",\n\tPhase2\t\t\t= \"부질없는 짓인 줄 잘 알고 있겠지!\",\n\tYellKill\t\t= \"이래 봤자... 아무 소용 없다.\"\n})\n\n---------------------\n-- 랩터왕 서슬발톱 --\n---------------------\nL = DBM:GetModLocalization(\"KingDred\")\n\nL:SetGeneralLocalization({\n\tname = \"랩터왕 서슬발톱\"\n})\n\n-------------------\n-- 예언자 타론자 --\n-------------------\nL = DBM:GetModLocalization(\"ProphetTharonja\")\n\nL:SetGeneralLocalization({\n\tname = \"예언자 타론자\"\n})\n\n------------\n-- 군드락 --\n--------------\n-- 슬라드란 --\n--------------\nL = DBM:GetModLocalization(\"Sladran\")\n\nL:SetGeneralLocalization({\n\tname = \"슬라드란\"\n})\n\n------------\n-- 무라비 --\n------------\nL = DBM:GetModLocalization(\"Moorabi\")\n\nL:SetGeneralLocalization({\n\tname = \"무라비\"\n})\n\n-----------------------\n-- 드라카리 거대골램 --\n-----------------------\nL = DBM:GetModLocalization(\"BloodstoneAnnihilator\")\n\nL:SetGeneralLocalization({\n\tname = \"드라카리 거대골램\"\n})\n\nL:SetWarningLocalization({\n\tWarningElemental\t= \"2단계: 정령\",\n\tWarningStone\t\t= \"1단계: 거대골렘\"\n})\n\nL:SetOptionLocalization({\n\tWarningElemental\t= \"2단계: 정령 경고 보기\",\n\tWarningStone\t\t= \"1단계: 거대골렘 경고 보기\"\n})\n\n---------------\n-- 갈다라 --\n---------------\nL = DBM:GetModLocalization(\"Galdarah\")\n\nL:SetGeneralLocalization({\n\tname = \"갈다라\"\n})\n\nL:SetWarningLocalization({\n\tTimerPhase2\t\t= \"2단계: 아칼리의 화신\",\n\tTimerPhase1\t\t= \"1단계: 아칼리의 고위 사제\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t\t= \"2단계: 아칼리의 화신\",\n\tTimerPhase1\t\t= \"1단계: 아칼리의 고위 사제\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t= \"2단계: 아칼리의 화신 경고 보기\",\n\tTimerPhase1\t\t= \"1단계: 아칼리의 고위 사제 경고 보기\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase2_1\t= \"지금 이 순간부터 아무것도 남지 않을 것이다!\",\n\tYellPhase2_2\t= \"힘이 뭔지 알고 싶나? 진짜 힘을 보여주지!\"\n})\n\n-----------------------\n-- 사나운 엑크 --\n-----------------------\nL = DBM:GetModLocalization(\"Eck\")\n\nL:SetGeneralLocalization({\n\tname = \"사나운 엑크\"\n})\n\n-----------------\n-- 번개의 전당 --\n---------------------\n-- 장군 비야른그림 --\n---------------------\nL = DBM:GetModLocalization(\"Bjarngrin\")\n\nL:SetGeneralLocalization({\n\tname = \"장군 비야른그림\"\n})\n\n--------------\n-- 아이오나 --\n--------------\nL = DBM:GetModLocalization(\"Ionar\")\n\nL:SetGeneralLocalization({\n\tname = \"아이오나\"\n})\n\n----------\n-- 볼칸 --\n----------\nL = DBM:GetModLocalization(\"Volkhan\")\n\nL:SetGeneralLocalization({\n\tname = \"볼칸\"\n})\n\n----------\n-- 로켄 --\n----------\nL = DBM:GetModLocalization(\"Loken\")\n\nL:SetGeneralLocalization({\n\tname = \"로켄\"\n})\n\n-----------------\n-- 돌의 전당   --\n-----------------\n-- 고뇌의 마녀 --\n-----------------\nL = DBM:GetModLocalization(\"MaidenOfGrief\")\n\nL:SetGeneralLocalization({\n\tname = \"고뇌의 마녀\"\n})\n\n----------------\n-- 크리스탈루스 --\n----------------\nL = DBM:GetModLocalization(\"Krystallus\")\n\nL:SetGeneralLocalization({\n\tname = \"크리스탈루스\"\n})\n\n-----------------------\n-- 무쇠구체자 쇼니르 --\n-----------------------\nL = DBM:GetModLocalization(\"SjonnirTheIronshaper\")\n\nL:SetGeneralLocalization({\n\tname = \"무쇠구체자 쇼니르\"\n})\n\n--------------------------------------\n--  Brann Bronzebeard Escort Event  --\n--------------------------------------\nL = DBM:GetModLocalization(\"BrannBronzebeard\")\n\nL:SetGeneralLocalization({\n\tname = \"브란 브론즈비어드를 보호하라\"\n})\n\nL:SetWarningLocalization({\n\tWarningPhase\t= \"%d 단계\"\n})\n\nL:SetTimerLocalization({\n\ttimerEvent\t= \"전투 종료\"\n})\n\nL:SetOptionLocalization({\n\tWarningPhase\t= \"단계 전환 알림 보기\",\n\ttimerEvent\t\t= \"전투 종료까지 남은시간 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"이제 잘 보시라고요! 제가 눈 깜짝할 사이에 정보를...\",\n\tPhase1\t\t= \"보안 경보를 발령합니다. 출처 불명의 역사 자료 분석은 하위 등급 대기열로 이전됩니다. 방어 작업을 시작합니다.\",\n\tPhase2\t\t= \"위협 지수가 임계점을 돌파했습니다. 천체 기록을 중단합니다. 보안 수준이 상승했습니다.\",\n\tPhase3\t\t= \"위협 지수가 높습니다. 공허 분석을 종료합니다. 안전성 검증을 시작합니다.\",\n\tKill\t\t= \"경고, 보안 잠금장치가 비활성화되었습니다. 기억 장치 소거를 시작합...\"\n})\n\n---------------\n-- 마력의 탑 --\n----------------\n-- 아노말루스 --\n----------------\nL = DBM:GetModLocalization(\"Anomalus\")\n\nL:SetGeneralLocalization({\n\tname = \"아노말루스\"\n})\n\n-----------------------\n-- 정원사 오르모로크 --\n-----------------------\nL = DBM:GetModLocalization(\"OrmorokTheTreeShaper\")\n\nL:SetGeneralLocalization({\n\tname = \"정원사 오르모로크\"\n})\n\n--------------------------\n-- 대학자 텔레스트라 --\n--------------------------\nL = DBM:GetModLocalization(\"GrandMagusTelestra\")\n\nL:SetGeneralLocalization({\n\tname = \"대학자 텔레스트라\"\n})\n\nL:SetWarningLocalization({\n\tWarningSplitSoon\t= \"곧 분리\",\n\tWarningSplitNow\t\t= \"분리\",\n\tWarningMerge\t\t= \"융합\"\n})\nL:SetOptionLocalization({\n\tWarningSplitSoon\t= \"분리 사전 경고 보기\",\n\tWarningSplitNow\t\t= \"분리 경고 보기\",\n\tWarningMerge\t\t= \"융합 경고 보기\"\n})\n\nL:SetMiscLocalization({\n\tSplitTrigger1\t\t= \"여기엔 내가 참 많지.\",\n\tSplitTrigger2\t\t= \"과연 나를 감당할 수 있겠느냐!\",\n\tMergeTrigger\t\t= \"이제 끝을 볼 때다!\"\n})\n\n-----------------\n-- 케리스트라자 --\n-----------------\nL = DBM:GetModLocalization(\"Keristrasza\")\n\nL:SetGeneralLocalization({\n\tname = \"케리스트라자\"\n})\n\n---------------------------------\n-- 사령관 콜루르그/스타우트비어드 --\n---------------------------------\nL = DBM:GetModLocalization(\"Commander\")\n\nlocal commander = \"알 수 없음\"\nif UnitFactionGroup(\"player\") == \"Alliance\" then\n\tcommander = \"사령관 콜루르그\"\nelseif UnitFactionGroup(\"player\") == \"Horde\" then\n\tcommander = \"사령관 스타우트비어드\"\nend\n\nL:SetGeneralLocalization({\n\tname = commander\n})\n\n----------------\n-- 마력의 눈 --\n---------------------\n-- 심문관 드라코스 --\n---------------------\nL = DBM:GetModLocalization(\"DrakosTheInterrogator\")\n\nL:SetGeneralLocalization({\n\tname = \"심문관 드라코스\"\n})\n\n\nL:SetOptionLocalization({\n\tMakeitCountTimer\t= \"매 순간을 소중히 업적 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tMakeitCountTimer\t= \"매 순간을 소중히 가능\"\n})\n\n--------------------\n-- 마법사 군주 우롬 --\n--------------------\nL = DBM:GetModLocalization(\"MageLordUrom\")\n\nL:SetGeneralLocalization({\n\tname = \"마법사 군주 우롬\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"어리석은 족속들!\"\n})\n\n------------------------\n-- 바로스 클라우드스트라이더 --\n------------------------\nL = DBM:GetModLocalization(\"VarosCloudstrider\")\n\nL:SetGeneralLocalization({\n\tname = \"바로스 클라우드스트라이더\"\n})\n\n-------------------------\n-- 지맥 수호자 에레고스 --\n-------------------------\nL = DBM:GetModLocalization(\"LeyGuardianEregos\")\n\nL:SetGeneralLocalization({\n\tname = \"지맥 수호자 에레고스\"\n})\n\nL:SetMiscLocalization({\n\tMakeitCountTimer\t= \"매 순간을 소중히 가능\"\n})\n\n------------------\n-- 우트가드 성채 --\n---------------------\n-- 공작 켈레세스 --\n---------------------\nL = DBM:GetModLocalization(\"Keleseth\")\n\nL:SetGeneralLocalization({\n\tname = \"공작 켈레세스\"\n})\n\n---------------------\n-- 건축가 스카발드 --\n-- & 감시자 달론   --\n---------------------\nL = DBM:GetModLocalization(\"ConstructorAndController\")\n\nL:SetGeneralLocalization({\n\tname = \"건축가 스카발드 & 감시자 달론\"\n})\n\n---------------------\n-- 약탈자 잉그바르 --\n---------------------\nL = DBM:GetModLocalization(\"IngvarThePlunderer\")\n\nL:SetGeneralLocalization({\n\tname = \"약탈자 잉그바르\"\n})\n\nL:SetMiscLocalization({\n\tYellIngvarPhase2\t= \"내가 돌아왔다! 이번엔 내 도끼를 피할 수 없을 거다!\",\n\tYellCombatEnd\t\t= \"안 돼! 난 더 잘할 수... 있는데...\"\n})\n\n-------------------\n-- 우트가드 첨탑 --\n-------------------\n-- 학살자 스카디 --\n-------------------\nL = DBM:GetModLocalization(\"SkadiTheRuthless\")\n\nL:SetGeneralLocalization({\n\tname = \"학살자 스카디\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"웬 놈들이 감히 여길? 정신 차려라, 형제들아! 녀석들을 처치하면 거하게 한 상 차려 주마!\",\n\tPhase2\t\t\t= \"피도 눈물도 없는 것들아! 불쌍한 비룡을 괴롭히다니, 가만두지 않겠다!\"\n})\n\n------------\n-- 왕 이미론 --\n------------\nL = DBM:GetModLocalization(\"Ymiron\")\n\nL:SetGeneralLocalization({\n\tname = \"왕 이미론\"\n})\n\n-----------------------\n-- 스발라 소로우그레이브 --\n-----------------------\nL = DBM:GetModLocalization(\"SvalaSorrowgrave\")\n\nL:SetGeneralLocalization({\n\tname = \"스발라 소로우그레이브\"\n})\n\nL:SetTimerLocalization({\n\ttimerRoleplay\t\t= \"스발라 소로우그레이브 활성\"\n})\n\nL:SetOptionLocalization({\n\ttimerRoleplay\t\t= \"스발라 소로우그레이브 활성 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tSvalaRoleplayStart\t= \"주인님! 당신께서 주신 일을 행했습니다. 이제, 축복을 내려 주소서!\"\n})\n\n---------------------\n-- 고르톡 패일후프 --\n---------------------\nL = DBM:GetModLocalization(\"GortokPalehoof\")\n\nL:SetGeneralLocalization({\n\tname = \"고르톡 페일후프\"\n})\n\n-----------------\n-- 보라빛 요새 --\n-----------------\n-- 시아니고사 --\n----------------\nL = DBM:GetModLocalization(\"Cyanigosa\")\n\nL:SetGeneralLocalization({\n\tname = \"시아니고사\"\n})\n\nL:SetMiscLocalization({\n\tCyanArrived\t= \"훌륭한 방어였다만, 도시를 지키게 둘 수는 없지! 직접 말리고스 님의 의지를 실현하리라!\"\n})\n\n------------\n-- 에레켐 --\n------------\nL = DBM:GetModLocalization(\"Erekem\")\n\nL:SetGeneralLocalization({\n\tname = \"에레켐\"\n})\n\n------------\n-- 이코론 --\n------------\nL = DBM:GetModLocalization(\"Ichoron\")\n\nL:SetGeneralLocalization({\n\tname = \"이코론\"\n})\n\n---------------\n-- 라반토르 --\n---------------\nL = DBM:GetModLocalization(\"Lavanthor\")\n\nL:SetGeneralLocalization({\n\tname = \"라반토르\"\n})\n\n------------\n-- 모라그 --\n------------\nL = DBM:GetModLocalization(\"Moragg\")\n\nL:SetGeneralLocalization({\n\tname = \"모라그\"\n})\n\n------------\n-- 제보즈 --\n------------\nL = DBM:GetModLocalization(\"Xevoss\")\n\nL:SetGeneralLocalization({\n\tname = \"제보즈\"\n})\n\n---------------------\n-- 파멸자 주라마트 --\n---------------------\nL = DBM:GetModLocalization(\"Zuramat\")\n\nL:SetGeneralLocalization({\n\tname = \"파멸자 주라마트\"\n})\n\n---------------------\n--  Portal Timers  --\n---------------------\nL = DBM:GetModLocalization(\"PortalTimers\")\n\nL:SetGeneralLocalization({\n\tname = \"보랏빛 요새: 차원문\"\n})\n\nL:SetWarningLocalization({\n\tWarningPortalSoon\t= \"곧 새로운 차원문\",\n\tWarningPortalNow\t= \"차원문 #%d\",\n\tWarningBossNow\t\t= \"곧 우두머리 등장\"\n})\n\nL:SetTimerLocalization({\n\tTimerPortalIn\t= \"차원문 #%d\" ,\n})\n\nL:SetOptionLocalization({\n\tWarningPortalNow\t= \"차원문 알림 보기\",\n\tWarningPortalSoon\t= \"차원문 이전에 알림 보기\",\n\tWarningBossNow\t\t= \"곧 우두머리 등장 알림 보기\",\n\tTimerPortalIn\t\t= \"우두머리 처치 이후 다음 차원문 바 보기\",\n\tShowAllPortalTimers\t= \"모든 차원문 바 보기(부정확함)\"\n})\n\nL:SetMiscLocalization({\n\tSealbroken\t= \"문을 부쉈다! 달라란으로 가는 길이 열렸다! 이제 마력 전쟁의 끝을 내자!\",\n\tWavePortal\t= \"차원문 열림: (%d+)/18\"\n})\n\n-----------------------------\n--  Trial of the Champion  --\n-----------------------------\n--  The Black Knight  --\n------------------------\nL = DBM:GetModLocalization(\"BlackKnight\")\n\nL:SetGeneralLocalization({\n\tname = \"흑기사\"\n})\n\nL:SetOptionLocalization({\n\tAchievementCheck\t= \"이건 약과야 업적 실패를 파티 대화로 알리기\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"잘했네. 오늘 자네의 가치를 잘 보여주었...\",\n\tAchievementFailed\t= \">> 업적 실패 : 구울 폭발에 피해 입음 (%s) <<\",\n\tYellCombatEnd\t\t= \"안 돼! 또 무릎 꿇을 수는... 없는데...\"\n})\n\n-----------------------\n--  Grand Champions  --\n-----------------------\nL = DBM:GetModLocalization(\"GrandChampions\")\n\nL:SetGeneralLocalization({\n\tname = \"도시 대표 용사\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"잘 싸웠네! 다음 상대는 은빛십자군의 일원이라네. 그들을 상대로 자신의 무용을 증명해 보게.\"\n})\n\n----------------------------------\n--  Argent Confessor Paletress  --\n----------------------------------\nL = DBM:GetModLocalization(\"Confessor\")\n\nL:SetGeneralLocalization({\n\tname = \"은빛 고해사제 페일트리스\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"훌륭히 해내셨군요!\"\n})\n\n-----------------------\n--  Eadric the Pure  --\n-----------------------\nL = DBM:GetModLocalization(\"EadricthePure\")\n\nL:SetGeneralLocalization({\n\tname = \"성기사 에드릭\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"항복! 제가 졌습니다. 훌륭한 솜씨군요. 이제 집에 가도 되겠습니까?\"\n})\n\n--------------------\n--  Pit of Saron  --\n---------------------\n--  Ick and Krick  --\n---------------------\nL = DBM:GetModLocalization(\"Ick\")\n\nL:SetGeneralLocalization({\n\tname = \"이크와 크리크\"\n})\n\n----------------------------\n--  Forgemaster Garfrost  --\n----------------------------\nL = DBM:GetModLocalization(\"ForgemasterGarfrost\")\n\nL:SetGeneralLocalization({\n\tname = \"제련장인 가프로스트\"\n})\n\nL:SetOptionLocalization({\n\tAchievementCheck\t= \"11번은 제발! 업적 실패시 파티 대화로 알리기\"\n})\n\nL:SetMiscLocalization({\n\tSaroniteRockThrow\t= \"거대한 사로나이트 덩어리를 당신에게 던집니다!\",\n\tAchievementWarning\t= \"경고 - 영구 결빙 중첩 높음: %s (%d 중첩)\",\n\tAchievementFailed\t= \">> 11번은 제발 업적 실패 : %s (%d 중첩) <<\"\n})\n\n----------------------------\n--  Scourgelord Tyrannus  --\n----------------------------\nL = DBM:GetModLocalization(\"ScourgelordTyrannus\")\n\nL:SetGeneralLocalization({\n\tname = \"스컬지군주 티라누스\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"아아. 용감하고 용감한 모험가들아, 참견도 이제 끝이다. 네놈들 뒤에 있는 굴에서 뼈와 칼이 부딪치는 소리가 들리는가? 네놈들에게 곧 닥칠 죽음의 소리다.\", --Cannot promise just yet if this is right emote, it may be the second emote after this, will need to do more testing.\n\tHoarfrostTarget\t= \"노려보며 얼음 공격을 준비합니다!\",\n\tYellCombatEnd\t= \"말도 안 돼... 서릿발송곳니... 경고를...\"\n})\n\n----------------------\n--  Forge of Souls  --\n----------------------\n--  Bronjahm  --\n----------------\nL = DBM:GetModLocalization(\"Bronjahm\")\n\nL:SetGeneralLocalization({\n\tname = \"브론잠\"\n})\n\n-------------------------\n--  Devourer of Souls  --\n-------------------------\nL = DBM:GetModLocalization(\"DevourerofSouls\")\n\nL:SetGeneralLocalization({\n\tname = \"영혼의 포식자\"\n})\n\n---------------------------\n--  Halls of Reflection  --\n---------------------------\n--  Wave Timers  --\n-------------------\nL = DBM:GetModLocalization(\"HoRWaveTimer\")\n\nL:SetGeneralLocalization({\n\tname = \"투영의 전당: 일반구간\"\n})\n\nL:SetWarningLocalization({\n\tWarnNewWaveSoon\t\t= \"곧 새로운 영혼 공격 시작\",\n\tWarnNewWave\t\t\t= \"%s 시작\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextWave\t\t= \"다음 영혼 공격\"\n})\n\nL:SetOptionLocalization({\n\tWarnNewWave\t\t\t\t= \"곧 우두머리 등장 알림 보기\",\n\tWarnNewWaveSoon\t\t\t= \"우두머리 처치 이후 다음 영혼 공격 알림 보기\",\n\tShowAllWaveWarnings\t\t= \"모든 영혼 공격 알림 보기\",\n\tTimerNextWave\t\t\t= \"우두머리 처치 이후 다음 영혼 공격 바 보기\",\n\tShowAllWaveTimers\t\t= \"모든 영혼 공격 이전에 알림 및 바 보기(부정확함)\"\n})\n\nL:SetMiscLocalization({\n\tFalric\t\t\t\t= \"팔릭\",\n\tWaveCheck\t\t\t= \"영혼 공격 = (%d+)/10\"\n})\n\n--------------\n--  Falric  --\n--------------\nL = DBM:GetModLocalization(\"Falric\")\n\nL:SetGeneralLocalization({\n\tname = \"팔릭\"\n})\n\n--------------\n--  Marwyn  --\n--------------\nL = DBM:GetModLocalization(\"Marwyn\")\n\nL:SetGeneralLocalization({\n\tname = \"마윈\"\n})\n\n-----------------------\n--  Lich King Event  --\n-----------------------\nL = DBM:GetModLocalization(\"LichKingEvent\")\n\nL:SetGeneralLocalization({\n\tname = \"아서스에게서 도망치기\"\n})\n\nL:SetTimerLocalization({\n\tachievementEscape\t= \"탈출 업적\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t\t= \"새로운 적 등장시 알림 보기\"\n})\n\nL:SetMiscLocalization({\n\tArthasYellKill\t= \"발사! 발사!\",\n\tGhoul\t\t\t= \"분노한 구울\",\t\t--creature id 36940. Not sure how to use these in function above to simplify locals though\n\tAbom\t\t\t= \"육중한 누더기골렘\",\t--creature id 37069\n\tWitchDoctor\t\t= \"되살아난 의술사\",\t--creature id 36941\n\tWave1\t\t\t= \"도망칠 방법은 없다!\",\n\tWave2\t\t\t= \"무덤의 한기에 굴복하라.\",\n\tWave3\t\t\t= \"또 막다른 곳이다.\",\n\tWave4\t\t\t= \"얼마나 더 싸울 수 있겠느냐?\"\n})\n"
  },
  {
    "path": "DBM-Party-WotLK/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n----------------------------------\n--  Ahn'Kahet: The Old Kingdom  --\n----------------------------------\n--  Prince Taldaram  --\n-----------------------\nL = DBM:GetModLocalization(\"Taldaram\")\n\nL:SetGeneralLocalization({\n\tname = \"Принц Талдарам\"\n})\n\n-------------------\n--  Elder Nadox  --\n-------------------\nL = DBM:GetModLocalization(\"Nadox\")\n\nL:SetGeneralLocalization({\n\tname = \"Старейшина Надокс\"\n})\n\n---------------------------\n--  Jedoga Shadowseeker  --\n---------------------------\nL = DBM:GetModLocalization(\"JedogaShadowseeker\")\n\nL:SetGeneralLocalization({\n\tname = \"Джедога Искательница Теней\"\n})\n\n---------------------\n--  Herald Volazj  --\n---------------------\nL = DBM:GetModLocalization(\"Volazj\")\n\nL:SetGeneralLocalization({\n\tname = \"Глашатай Волаж\"\n})\n\n----------------\n--  Amanitar  --\n----------------\nL = DBM:GetModLocalization(\"Amanitar\")\n\nL:SetGeneralLocalization({\n\tname = \"Аманитар\"\n})\n\n-------------------\n--  Azjol-Nerub  --\n---------------------------------\n--  Krik'thir the Gatewatcher  --\n---------------------------------\nL = DBM:GetModLocalization(\"Krikthir\")\n\nL:SetGeneralLocalization({\n\tname = \"Крик'тир Хранитель Врат\"\n})\n\n----------------\n--  Hadronox  --\n----------------\nL = DBM:GetModLocalization(\"Hadronox\")\n\nL:SetGeneralLocalization({\n\tname = \"Хадронокс\"\n})\n\n-------------------------\n--  Anub'arak (Party)  --\n-------------------------\nL = DBM:GetModLocalization(\"Anubarak\")\n\nL:SetGeneralLocalization({\n\tname = \"Ануб'арак (группа)\"\n})\n\n---------------------------------------\n--  Caverns of Time: Old Stratholme  --\n---------------------------------------\n--  Meathook  --\n----------------\nL = DBM:GetModLocalization(\"Meathook\")\n\nL:SetGeneralLocalization({\n\tname = \"Мясной Крюк\"\n})\n\n--------------------------------\n--  Salramm the Fleshcrafter  --\n--------------------------------\nL = DBM:GetModLocalization(\"SalrammTheFleshcrafter\")\n\nL:SetGeneralLocalization({\n\tname = \"Салрамм Плоторез\"\n})\n\n-------------------------\n--  Chrono-Lord Epoch  --\n-------------------------\nL = DBM:GetModLocalization(\"ChronoLordEpoch\")\n\nL:SetGeneralLocalization({\n\tname = \"Хронолорд Эпох\"\n})\n\n-----------------\n--  Mal'Ganis  --\n-----------------\nL = DBM:GetModLocalization(\"MalGanis\")\n\nL:SetGeneralLocalization({\n\tname = \"Мал'Ганис\"\n})\n\nL:SetMiscLocalization({\n\tOutro\t= \"Твое путешествие начинается, юный принц. Собирай свои войска и отправляйся в царство вечных снегов, в Нордскол. Там мы и уладим все наши дела, там ты узнаешь свою судьбу.\"\n})\n\n-------------------\n--  Wave Timers  --\n-------------------\nL = DBM:GetModLocalization(\"StratWaves\")\n\nL:SetGeneralLocalization({\n\tname = \"Волны Стратхольма\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveNow = \"Волна %d: призыв %s\"\n})\n\nL:SetTimerLocalization({\n\tTimerWaveIn\t\t= \"Следующая волна (6)\",\n\tTimerRoleplay\t= \"Вступительное представление\"\n})\n\nL:SetOptionLocalization({\n\tWarningWaveNow\t= \"Предупреждение о новой волне\",\n\tTimerWaveIn\t\t= \"Отсчет времени до cледующей волны (после босса 5-ой волны)\",\n\tTimerRoleplay\t= \"Отсчет времени для вступительного представления\"\n})\n\nL:SetMiscLocalization({\n\tMeathook\t= \"Мясной Крюк\",\n\tSalramm\t\t= \"Салрамм Плоторез\",\n\tDevouring\t= \"Всепожирающий вурдалак\",\n\tEnraged\t\t= \"Разъярившийся вурдалак\",\n\tNecro\t\t= \"Некромант\",\n\tFiend\t\t= \"Некрорахнид\",\n\tStalker\t\t= \"Кладбищенский ловец\",\n\tAbom\t\t= \"Лоскутное создание\",\n\tAcolyte\t\t= \"Послушник\",\n\tWave1\t\t= \"%d %s\",\n\tWave2\t\t= \"%d %s и %d %s\",\n\tWave3\t\t= \"%d %s, %d %s и %d %s\",\n\tWave4\t\t= \"%d %s, %d %s, %d %s и %d %s\",\n\tWaveBoss\t= \"%s\",\n\tWaveCheck\t= \"Атаки Плети: (%d+)/10\",\n\tRoleplay\t= \"Я рад, что ты пришел, Утер!\",\n\tRoleplay2\t= \"Похоже, все готовы. Помните, эти люди заражены чумой и скоро умрут. Мы должны очистить Стратхольм и защитить Лордерон от Плети. Вперед.\"\n})\n\n------------------------\n--  Drak'Tharon Keep  --\n------------------------\n--  Trollgore  --\n-----------------\nL = DBM:GetModLocalization(\"Trollgore\")\n\nL:SetGeneralLocalization({\n\tname = \"Кровотролль\"\n})\n\nL:SetMiscLocalization({\n\tYellExplosion = \"Труп бдыжь!\"\n})\n\n--------------------------\n--  Novos the Summoner  --\n--------------------------\nL = DBM:GetModLocalization(\"NovosTheSummoner\")\n\nL:SetGeneralLocalization({\n\tname = \"Новос Призыватель\"\n})\n\nL:SetWarningLocalization({\n\tWarnCrystalHandler\t= \"Хрустальный укротитель (%d осталось)\"\n})\n\nL:SetTimerLocalization({\n\ttimerCrystalHandler\t= \"Хрустальный укротитель\"\n})\n\nL:SetOptionLocalization({\n\tWarnCrystalHandler\t= \"Предупреждение при появлении Хрустального укротителя\",\n\ttimerCrystalHandler\t= \"Отсчет времени до появления следующего Хрустального укротителя\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"Вам холодно? Это дыхание скорой смерти.\",\n\tHandlerYell\t\t= \"Защищайте меня! Быстрее, будьте вы прокляты!\",\n\tPhase2\t\t\t= \"Неужели вы не понимаете всей бесполезности происходящего?\",\n\tYellKill\t\t= \"Ваши усилия… напрасны.\"\n})\n\n-----------------\n--  King Dred  --\n-----------------\nL = DBM:GetModLocalization(\"KingDred\")\n\nL:SetGeneralLocalization({\n\tname = \"Король Дред\"\n})\n\n-----------------------------\n--  The Prophet Tharon'ja  --\n-----------------------------\nL = DBM:GetModLocalization(\"ProphetTharonja\")\n\nL:SetGeneralLocalization({\n\tname = \"Пророк Тарон'джа\"\n})\n\n---------------\n--  Gundrak  --\n----------------\n--  Slad'ran  --\n----------------\nL = DBM:GetModLocalization(\"Sladran\")\n\nL:SetGeneralLocalization({\n\tname = \"Слад'ран\"\n})\n\n---------------\n--  Moorabi  --\n---------------\nL = DBM:GetModLocalization(\"Moorabi\")\n\nL:SetGeneralLocalization({\n\tname = \"Мураби\"\n})\n\n-------------------------\n--  Drakkari Colossus  --\n-------------------------\nL = DBM:GetModLocalization(\"BloodstoneAnnihilator\")\n\nL:SetGeneralLocalization({\n\tname = \"Колосс Драккари\"\n})\n\nL:SetWarningLocalization({\n\tWarningElemental\t= \"Фаза 2. Элементаль\",\n\tWarningStone\t\t= \"Фаза 1. Колосс\"\n})\n\nL:SetOptionLocalization({\n\tWarningElemental\t= \"Предупреждение для Фаза 2. Элементаль\",\n\tWarningStone\t\t= \"Предупреждение для Фаза 1. Колосс\"\n})\n\n-----------------\n--  Gal'darah  --\n-----------------\nL = DBM:GetModLocalization(\"Galdarah\")\n\nL:SetGeneralLocalization({\n\tname = \"Гал'дара\"\n})\n\nL:SetWarningLocalization({\n\tTimerPhase2\t\t= \"Фаза 2: Аватара Акали\",\n\tTimerPhase1\t\t= \"Фаза 1: Верховный пророк Акали\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t\t= \"Фаза 2: Аватара Акали\",\n\tTimerPhase1\t\t= \"Фаза 1: Верховный пророк Акали\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t= \"Предупреждение для Фаза 2: Аватара Акали\",\n\tTimerPhase1\t\t= \"Предупреждение для Фаза 1: Верховный пророк Акали\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase2_1\t= \"После этого ничего не останется!\",\n\tYellPhase2_2\t= \"Хотите увидеть cилу? Я покажу вам... силу!\"\n})\n\n-------------------------\n--  Eck the Ferocious  --\n-------------------------\nL = DBM:GetModLocalization(\"Eck\")\n\nL:SetGeneralLocalization({\n\tname = \"Эк Свирепый\"\n})\n\n--------------------------\n--  Halls of Lightning  --\n--------------------------\n--  General Bjarngrim  --\n-------------------------\nL = DBM:GetModLocalization(\"Bjarngrin\")\n\nL:SetGeneralLocalization({\n\tname = \"Генерал Бьярнгрин\"\n})\n\n-------------\n--  Ionar  --\n-------------\nL = DBM:GetModLocalization(\"Ionar\")\n\nL:SetGeneralLocalization({\n\tname = \"Ионар\"\n})\n\n---------------\n--  Volkhan  --\n---------------\nL = DBM:GetModLocalization(\"Volkhan\")\n\nL:SetGeneralLocalization({\n\tname = \"Волхан\"\n})\n\n-------------\n--  Loken  --\n-------------\nL = DBM:GetModLocalization(\"Loken\")\n\nL:SetGeneralLocalization({\n\tname = \"Локен\"\n})\n\n----------------------\n--  Halls of Stone  --\n-----------------------\n--  Maiden of Grief  --\n-----------------------\nL = DBM:GetModLocalization(\"MaidenOfGrief\")\n\nL:SetGeneralLocalization({\n\tname = \"Дева Скорби\"\n})\n\n------------------\n--  Krystallus  --\n------------------\nL = DBM:GetModLocalization(\"Krystallus\")\n\nL:SetGeneralLocalization({\n\tname = \"Кристаллус\"\n})\n\n------------------------------\n--  Sjonnir the Ironshaper  --\n------------------------------\nL = DBM:GetModLocalization(\"SjonnirTheIronshaper\")\n\nL:SetGeneralLocalization({\n\tname = \"Сьоннир Литейщик\"\n})\n\n--------------------------------------\n--  Brann Bronzebeard Escort Event  --\n--------------------------------------\nL = DBM:GetModLocalization(\"BrannBronzebeard\")\n\nL:SetGeneralLocalization({\n\tname = \"Эскорт Бранна\"\n})\n\nL:SetWarningLocalization({\n\tWarningPhase\t= \"Фаза %d\"\n})\n\nL:SetTimerLocalization({\n\ttimerEvent\t= \"Оставшееся время\"\n})\n\nL:SetOptionLocalization({\n\tWarningPhase\t= \"Предупреждение о смене фазы\",\n\ttimerEvent\t\t= \"Отсчет времени продолжительности события\"\n})\n\nL:SetMiscLocalization({\n\tPull\t= \"Теперь будьте внимательны! Не успеете и глазом моргнуть, как…\",\n\tPhase1\t= \"Обнаружено вторжение в систему. Приоритетность работ по анализу исторических архивов понижена. Ответные меры инициированы.\",\n\tPhase2\t= \"Порог допустимой угрозы превышен. Астрономический архив отключен. Уровень безопасности повышен.\",\n\tPhase3\t= \"Критическое значение уровня угрозы. Перенаправление анализа Бездны. Инициирование протокола очищения.\",\n\tKill\t= \"Внимание: меры предосторожности деактивированы. Начинаю стирание памяти и…\"\n})\n\n-----------------\n--  The Nexus  --\n-----------------\n--  Anomalus  --\n----------------\nL = DBM:GetModLocalization(\"Anomalus\")\n\nL:SetGeneralLocalization({\n\tname = \"Аномалус\"\n})\n\n-------------------------------\n--  Ormorok the Tree-Shaper  --\n-------------------------------\nL = DBM:GetModLocalization(\"OrmorokTheTreeShaper\")\n\nL:SetGeneralLocalization({\n\tname = \"Орморок Воспитатель Дерев\"\n})\n\n----------------------------\n--  Grand Magus Telestra  --\n----------------------------\nL = DBM:GetModLocalization(\"GrandMagusTelestra\")\n\nL:SetGeneralLocalization({\n\tname = \"Великая ведунья Телестра\"\n})\n\nL:SetWarningLocalization({\n\tWarningSplitSoon\t= \"Скоро Разделение\",\n\tWarningSplitNow\t\t= \"Разделение\",\n\tWarningMerge\t\t= \"Слияние\"\n})\nL:SetOptionLocalization({\n\tWarningSplitSoon\t= \"Предупреждать заранее о Разделении\",\n\tWarningSplitNow\t\t= \"Предупреждать о Разделении\",\n\tWarningMerge\t\t= \"Предупреждать о Слиянии\"\n})\n\nL:SetMiscLocalization({\n\tSplitTrigger1\t\t= \"Меня на вас хватит!\",\n\tSplitTrigger2\t\t= \"Вы получите больше, чем заслуживаете!\",\n\tMergeTrigger\t\t= \"Ну а теперь, покончим с этим!\"\n})\n\n-------------------\n--  Keristrasza  --\n-------------------\nL = DBM:GetModLocalization(\"Keristrasza\")\n\nL:SetGeneralLocalization({\n\tname = \"Керистраза\"\n})\n\n-----------------------------------\n--  Commander Kolurg/Stoutbeard  --\n-----------------------------------\nL = DBM:GetModLocalization(\"Commander\")\n\nlocal commander = \"Неизвестный\"\nif UnitFactionGroup(\"player\") == \"Alliance\" then\n\tcommander = \"Командир Колург\"\nelseif UnitFactionGroup(\"player\") == \"Horde\" then\n\tcommander = \"Командир Пивобород\"\nend\n\nL:SetGeneralLocalization({\n\tname = commander\n})\n\n------------------\n--  The Oculus  --\n-------------------------------\n--  Drakos the Interrogator  --\n-------------------------------\nL = DBM:GetModLocalization(\"DrakosTheInterrogator\")\n\nL:SetGeneralLocalization({\n\tname = \"Дракос Дознаватель\"\n})\n\n\nL:SetOptionLocalization({\n\tMakeitCountTimer\t= \"Отсчет времени для Вам всем зачтется (достижение)\"\n})\n\nL:SetMiscLocalization({\n\tMakeitCountTimer\t= \"Вам всем зачтется\"\n})\n\n----------------------\n--  Mage-Lord Urom  --\n----------------------\nL = DBM:GetModLocalization(\"MageLordUrom\")\n\nL:SetGeneralLocalization({\n\tname = \"Маг-лорд Уром\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"Несчастные слепые глупцы!\"\n})\n\n--------------------------\n--  Varos Cloudstrider  --\n--------------------------\nL = DBM:GetModLocalization(\"VarosCloudstrider\")\n\nL:SetGeneralLocalization({\n\tname = \"Варос Заоблачный Странник\"\n})\n\n---------------------------\n--  Ley-Guardian Eregos  --\n---------------------------\nL = DBM:GetModLocalization(\"LeyGuardianEregos\")\n\nL:SetGeneralLocalization({\n\tname = \"Хранитель энергии Эрегос\"\n})\n\nL:SetMiscLocalization({\n\tMakeitCountTimer\t= \"Вам всем зачтется\"\n})\n\n--------------------\n--  Utgarde Keep  --\n-----------------------\n--  Prince Keleseth  --\n-----------------------\nL = DBM:GetModLocalization(\"Keleseth\")\n\nL:SetGeneralLocalization({\n\tname = \"Принц Келесет\"\n})\n\n--------------------------------\n--  Skarvald the Constructor  --\n--  & Dalronn the Controller  --\n--------------------------------\nL = DBM:GetModLocalization(\"ConstructorAndController\")\n\nL:SetGeneralLocalization({\n\tname = \"Скарвальд и Далронн\"\n})\n\n----------------------------\n--  Ingvar the Plunderer  --\n----------------------------\nL = DBM:GetModLocalization(\"IngvarThePlunderer\")\n\nL:SetGeneralLocalization({\n\tname = \"Ингвар Расхититель\"\n})\n\nL:SetMiscLocalization({\n\tYellIngvarPhase2\t= \"Я вернулся! Еще один шанс раскроить вам головы!\",\n\tYellCombatEnd\t\t= \"Нет! Я смогу это сделать… я смогу…\"\n})\n\n------------------------\n--  Utgarde Pinnacle  --\n--------------------------\n--  Skadi the Ruthless  --\n--------------------------\nL = DBM:GetModLocalization(\"SkadiTheRuthless\")\n\nL:SetGeneralLocalization({\n\tname = \"Скади Безжалостный\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"Что за недоноски осмелились вторгнуться сюда? Поживее, братья мои! Угощение тому, кто принесет мне их головы!\",\n\tPhase2\t\t\t= \"Ничтожные лакеи! Ваши трупы послужат хорошей закуской для моего нового дракона!\"\n})\n\n-------------------\n--  King Ymiron  --\n-------------------\nL = DBM:GetModLocalization(\"Ymiron\")\n\nL:SetGeneralLocalization({\n\tname = \"Король Имирон\"\n})\n\n-------------------------\n--  Svala Sorrowgrave  --\n-------------------------\nL = DBM:GetModLocalization(\"SvalaSorrowgrave\")\n\nL:SetGeneralLocalization({\n\tname = \"Свала Вечноскорбящая\"\n})\n\nL:SetTimerLocalization({\n\ttimerRoleplay\t\t= \"Свала Вечноскорбящая активируется\"\n})\n\nL:SetOptionLocalization({\n\ttimerRoleplay\t\t= \"Отсчет времени для представления перед активацией Свалы Вечноскорбящей\"\n})\n\nL:SetMiscLocalization({\n\tSvalaRoleplayStart\t= \"Мой господин! Я сделала, как вы велели, и теперь молю вас о благословении!\"\n})\n\n-----------------------\n--  Gortok Palehoof  --\n-----------------------\nL = DBM:GetModLocalization(\"GortokPalehoof\")\n\nL:SetGeneralLocalization({\n\tname = \"Горток Бледное Копыто\"\n})\n\n-----------------------\n--  The Violet Hold  --\n-----------------------\n--  Cyanigosa  --\n-----------------\nL = DBM:GetModLocalization(\"Cyanigosa\")\n\nL:SetGeneralLocalization({\n\tname = \"Синигоса\"\n})\n\nL:SetMiscLocalization({\n\tCyanArrived\t= \"Вы доблестно обороняетесь, но этот город должен быть стерт с лица земли, и я лично исполню волю Малигоса!\"\n})\n\n--------------\n--  Erekem  --\n--------------\nL = DBM:GetModLocalization(\"Erekem\")\n\nL:SetGeneralLocalization({\n\tname = \"Эрекем\"\n})\n\n---------------\n--  Ichoron  --\n---------------\nL = DBM:GetModLocalization(\"Ichoron\")\n\nL:SetGeneralLocalization({\n\tname = \"Гнойрон\"\n})\n\n-----------------\n--  Lavanthor  --\n-----------------\nL = DBM:GetModLocalization(\"Lavanthor\")\n\nL:SetGeneralLocalization({\n\tname = \"Лавантор\"\n})\n\n--------------\n--  Moragg  --\n--------------\nL = DBM:GetModLocalization(\"Moragg\")\n\nL:SetGeneralLocalization({\n\tname = \"Морагг\"\n})\n\n--------------\n--  Xevozz  --\n--------------\nL = DBM:GetModLocalization(\"Xevoss\")\n\nL:SetGeneralLocalization({\n\tname = \"Ксевозз\"\n})\n\n-------------------------------\n--  Zuramat the Obliterator  --\n-------------------------------\nL = DBM:GetModLocalization(\"Zuramat\")\n\nL:SetGeneralLocalization({\n\tname = \"Зурамат Уничтожитель\"\n})\n\n---------------------\n--  Portal Timers  --\n---------------------\nL = DBM:GetModLocalization(\"PortalTimers\")\n\nL:SetGeneralLocalization({\n\tname = \"Таймеры порталов\"\n})\n\nL:SetWarningLocalization({\n\tWarningPortalSoon\t= \"Скоро новый портал\",\n\tWarningPortalNow\t= \"Портал #%d\",\n\tWarningBossNow\t\t= \"Прибытие Босса\"\n})\n\nL:SetTimerLocalization({\n\tTimerPortalIn\t= \"Портал #%d\" ,\n})\n\nL:SetOptionLocalization({\n\tWarningPortalNow\t\t= \"Предупреждение для нового портала\",\n\tWarningPortalSoon\t\t= \"Предварительное предупреждение для нового портала\",\n\tWarningBossNow\t\t\t= \"Предупреждение о появлении босса\",\n\tTimerPortalIn\t\t\t= \"Отсчет времени до следующего портала (после босса)\",\n\tShowAllPortalTimers\t\t= \"Отсчет времени для всех порталов (неточный)\"\n})\n\nL:SetMiscLocalization({\n\tyell1\t\t= \"Эй, стражи! Уходим! Славные герои обо всем позаботятся. За мной!\",\n\tSealbroken\t= \"Мы прорвались через тюремные ворота! Дорога в Даларан открыта! Теперь мы наконец прекратим войну Нексуса!\",\n\tWavePortal\t= \"Открыто порталов: (%d+)/18\"\n})\n\n-----------------------------\n--  Trial of the Champion  --\n-----------------------------\n--  The Black Knight  --\n------------------------\nL = DBM:GetModLocalization(\"BlackKnight\")\n\nL:SetGeneralLocalization({\n\tname = \"Черный рыцарь\"\n})\n\nL:SetOptionLocalization({\n\tAchievementCheck\t\t= \"Объявлять о провале достижения 'Бывало и хуже' в чат группы\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Великолепно. Сегодня вы в честной борьбе заслужили…\",\n\tAchievementFailed\t= \">> ДОСТИЖЕНИЕ ПРОВАЛЕНО: %s получил урон от Взрыва вурдалака <<\",\n\tYellCombatEnd\t\t= \"Нет! Я не могу... снова... проиграть.\"\n})\n\n-----------------------\n--  Grand Champions  --\n-----------------------\nL = DBM:GetModLocalization(\"GrandChampions\")\n\nL:SetGeneralLocalization({\n\tname = \"Абсолютные чемпионы\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"Вы отлично сражались! Следующим испытанием станет битва с одним из членов Авангарда. Вы проверите свои силы в схватке с достойным соперником.\"\n})\n\n----------------------------------\n--  Argent Confessor Paletress  --\n----------------------------------\nL = DBM:GetModLocalization(\"Confessor\")\n\nL:SetGeneralLocalization({\n\tname = \"Исповедница Пейлтресс\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"Превосходно!\"\n})\n\n-----------------------\n--  Eadric the Pure  --\n-----------------------\nL = DBM:GetModLocalization(\"EadricthePure\")\n\nL:SetGeneralLocalization({\n\tname = \"Эдрик Чистый\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"Я сдаюсь! Я побежден. Отличная работа. Можно теперь убегать?\"\n})\n\n--------------------\n--  Pit of Saron  --\n---------------------\n--  Ick and Krick  --\n---------------------\nL = DBM:GetModLocalization(\"Ick\")\n\nL:SetGeneralLocalization({\n\tname = \"Ик и Крик\"\n})\n\n----------------------------\n--  Forgemaster Garfrost  --\n----------------------------\nL = DBM:GetModLocalization(\"ForgemasterGarfrost\")\n\nL:SetGeneralLocalization({\n\tname = \"Начальник кузни Гархлад\"\n})\n\nL:SetOptionLocalization({\n\tAchievementCheck\t\t\t= \"Объявлять предупреждения о достижении 'Не жди до одиннадцати!' в чат группы\"\n})\n\nL:SetMiscLocalization({\n\tSaroniteRockThrow\t= \"%s швыряет в вас глыбой саронита!\",\n\tAchievementWarning\t= \"Предупреждение: %s получил %d стаков Вечной мерзлоты\",\n\tAchievementFailed\t= \">> ДОСТИЖЕНИЕ ПРОВАЛЕНО: %s получил %d стаков Вечной мерзлоты <<\"\n})\n\n----------------------------\n--  Scourgelord Tyrannus  --\n----------------------------\nL = DBM:GetModLocalization(\"ScourgelordTyrannus\")\n\nL:SetGeneralLocalization({\n\tname = \"Повелитель Плети Тираний\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t= \"Увы, бесстрашные герои, ваша навязчивость ускорила развязку. Вы слышите громыхание костей и скрежет стали за вашими спинами? Это предвестники скорой погибели.\",\n\tHoarfrostTarget\t= \"Ледяной змей Иней смотрит на (%S+), готовя морозную атаку!\",\n\tYellCombatEnd\t= \"Не может быть... Иней... Предупреди...\"\n})\n\n----------------------\n--  Forge of Souls  --\n----------------------\n--  Bronjahm  --\n----------------\nL = DBM:GetModLocalization(\"Bronjahm\")\n\nL:SetGeneralLocalization({\n\tname = \"Броньям\"\n})\n\n-------------------------\n--  Devourer of Souls  --\n-------------------------\nL = DBM:GetModLocalization(\"DevourerofSouls\")\n\nL:SetGeneralLocalization({\n\tname = \"Пожиратель Душ\"\n})\n\n---------------------------\n--  Halls of Reflection  --\n---------------------------\n--  Wave Timers  --\n-------------------\nL = DBM:GetModLocalization(\"HoRWaveTimer\")\n\nL:SetGeneralLocalization({\n\tname = \"Таймеры волн\"\n})\n\nL:SetWarningLocalization({\n\tWarnNewWaveSoon\t= \"Скоро новая волна\",\n\tWarnNewWave\t\t= \"%s вступает в бой\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextWave\t= \"Следующая волна\"\n})\n\nL:SetOptionLocalization({\n\tWarnNewWave\t\t\t= \"Предупреждение о вступлении босса в бой\",\n\tWarnNewWaveSoon\t\t= \"Предупреждать заранее о новой волне (после босса 5-ой волны)\",\n\tShowAllWaveWarnings\t= \"Предупреждения для всех волн\",\n\tTimerNextWave\t\t= \"Отсчет времени до следующей волны (после босса 5-ой волны)\",\n\tShowAllWaveTimers\t= \"Предупреждения и отсчет времени для всех волн (неточный)\"\n})\n\nL:SetMiscLocalization({\n\tFalric\t\t= \"Фалрик\",\n\tWaveCheck\t= \"Отражено атак призраков = (%d+)/10\"\n})\n\n--------------\n--  Falric  --\n--------------\nL = DBM:GetModLocalization(\"Falric\")\n\nL:SetGeneralLocalization({\n\tname = \"Фалрик\"\n})\n\n--------------\n--  Marwyn  --\n--------------\nL = DBM:GetModLocalization(\"Marwyn\")\n\nL:SetGeneralLocalization({\n\tname = \"Марвин\"\n})\n\n-----------------------\n--  Lich King Event  --\n-----------------------\nL = DBM:GetModLocalization(\"LichKingEvent\")\n\nL:SetGeneralLocalization({\n\tname = \"Побег от Артаса\"\n})\n\nL:SetTimerLocalization({\n\tachievementEscape\t= \"Время для побега\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t= \"Предупреждение для прибывающих волн\"\n})\n\nL:SetMiscLocalization({\n\tArthasYellKill\t= \"ОГОНЬ! ОГОНЬ!\",\n\tGhoul\t\t\t= \"Гневный вурдалак\",\t\t--creature id 36940. Not sure how to use these in function above to simplify locals though. :\\\n\tAbom\t\t\t= \"Неуклюжее поганище\",\t\t--creature id 37069\n\tWitchDoctor\t\t= \"Воскрешенный ведьмак\",\t--creature id 36941\n\tWave1\t\t\t= \"^Бежать некуда.$\",\n\tWave2\t\t\t= \"Покоритесь леденящей смерти!\",\n\tWave3\t\t\t= \"Вы в ловушке!\",\n\tWave4\t\t\t= \"Как долго вы сможете сопротивляться?\"\n})\n"
  },
  {
    "path": "DBM-Party-WotLK/localization.tw.lua",
    "content": "﻿if GetLocale() ~= \"zhTW\" then return end\n\nlocal L\n\n----------------------------------\n--  Ahn'Kahet: The Old Kingdom  --\n----------------------------------\n--  Prince Taldaram  --\n-----------------------\nL = DBM:GetModLocalization(\"Taldaram\")\n\nL:SetGeneralLocalization({\n\tname = \"泰爾達朗親王\"\n})\n\n-------------------\n--  Elder Nadox  --\n-------------------\nL = DBM:GetModLocalization(\"Nadox\")\n\nL:SetGeneralLocalization({\n\tname = \"老那杜斯\"\n})\n\n---------------------------\n--  Jedoga Shadowseeker  --\n---------------------------\nL = DBM:GetModLocalization(\"JedogaShadowseeker\")\n\nL:SetGeneralLocalization({\n\tname = \"潔杜佳·尋影者\"\n})\n\n---------------------\n--  Herald Volazj  --\n---------------------\nL = DBM:GetModLocalization(\"Volazj\")\n\nL:SetGeneralLocalization({\n\tname = \"信使沃菈齊\"\n})\n\n----------------\n--  Amanitar  --\n----------------\nL = DBM:GetModLocalization(\"Amanitar\")\n\nL:SetGeneralLocalization({\n\tname = \"毒蕈魔\"\n})\n\n-------------------\n--  Azjol-Nerub  --\n---------------------------------\n--  Krik'thir the Gatewatcher  --\n---------------------------------\nL = DBM:GetModLocalization(\"Krikthir\")\n\nL:SetGeneralLocalization({\n\tname = \"『守門者』齊力克西爾\"\n})\n\n----------------\n--  Hadronox  --\n----------------\nL = DBM:GetModLocalization(\"Hadronox\")\n\nL:SetGeneralLocalization({\n\tname = \"哈卓諾克斯\"\n})\n\n-------------------------\n--  Anub'arak (Party)  --\n-------------------------\nL = DBM:GetModLocalization(\"Anubarak\")\n\nL:SetGeneralLocalization({\n\tname = \"阿努巴拉克 (隊伍)\"\n})\n\n---------------------------------------\n--  Caverns of Time: Old Stratholme  --\n---------------------------------------\n--  Meathook  --\n----------------\nL = DBM:GetModLocalization(\"Meathook\")\n\nL:SetGeneralLocalization({\n\tname = \"肉鉤\"\n})\n\n--------------------------------\n--  Salramm the Fleshcrafter  --\n--------------------------------\nL = DBM:GetModLocalization(\"SalrammTheFleshcrafter\")\n\nL:SetGeneralLocalization({\n\tname = \"『血肉工匠』塞歐朗姆\"\n})\n\n-------------------------\n--  Chrono-Lord Epoch  --\n-------------------------\nL = DBM:GetModLocalization(\"ChronoLordEpoch\")\n\nL:SetGeneralLocalization({\n\tname = \"紀元時間領主\"\n})\n\n-----------------\n--  Mal'Ganis  --\n-----------------\nL = DBM:GetModLocalization(\"MalGanis\")\n\nL:SetGeneralLocalization({\n\tname = \"瑪爾加尼斯\"\n})\n\nL:SetMiscLocalization({\n\tOutro\t= \"你的旅途才剛開始，年輕的王子。召集你的軍隊，到北裂境的嚴寒之地來見我。在那裡，我們可以算算我們之間的新仇舊恨。你將在那裡理解你真正的命運。\"\n})\n\n-------------------\n--  Wave Timers  --\n-------------------\nL = DBM:GetModLocalization(\"StratWaves\")\n\nL:SetGeneralLocalization({\n\tname = \"斯坦波數\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveNow\t= \"第%d波: %s出現了\"\n})\n\nL:SetTimerLocalization({\n\tTimerWaveIn\t\t= \"下一波 (6)\",\n\tTimerRoleplay\t= \"角色扮演阿薩斯計時\"\n})\n\nL:SetOptionLocalization({\n\tWarningWaveNow\t= \"為新一進攻顯示警告\",\n\tTimerWaveIn\t\t= \"為下一波顯示計時器 (之後5隻小兵波數)\",\n\tTimerRoleplay\t= \"為角色扮演事件顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tMeathook\t= \"肉鉤\",\n\tSalramm\t\t= \"『血肉工匠』塞歐朗姆\",\n\tDevouring\t= \"吞噬食屍鬼\",\n\tEnraged\t\t= \"狂怒食屍鬼\",\n\tNecro\t\t= \"死靈大法師\",\n\tFiend\t\t= \"地穴惡魔\",\n\tStalker\t\t= \"墓穴巡者\",\n\tAbom\t\t= \"縫補傀儡\",\n\tAcolyte\t\t= \"侍僧\",\n\tWave1\t\t= \"%d %s\",\n\tWave2\t\t= \"%d %s 及 %d %s\",\n\tWave3\t\t= \"%d %s，%d %s 及 %d %s\",\n\tWave4\t\t= \"%d %s，%d %s，%d %s 及 %d %s\",\n\tWaveBoss\t= \"%s\",\n\tWaveCheck\t= \"天譴軍波數 = (%d+)/10\",\n\tRoleplay\t= \"真高興你趕到了，烏瑟。\",\n\tRoleplay2\t= \"大家看來都準備好了。記得，這些人受到恐怖瘟疫所感染，不久人世。我們得淨化斯坦索姆以保護其他百姓免受天譴軍的威脅。出發吧。\"\n})\n\n------------------------\n--  Drak'Tharon Keep  --\n------------------------\n--  Trollgore  --\n-----------------\nL = DBM:GetModLocalization(\"Trollgore\")\n\nL:SetGeneralLocalization({\n\tname = \"血角食人妖\"\n})\n\nL:SetMiscLocalization({\n\tYellExplosion = \"屍體要爆炸啦!\"\n})\n\n--------------------------\n--  Novos the Summoner  --\n--------------------------\nL = DBM:GetModLocalization(\"NovosTheSummoner\")\n\nL:SetGeneralLocalization({\n\tname = \"『召喚者』諾沃司\"\n})\n\nL:SetWarningLocalization({\n\tWarnCrystalHandler\t= \"水晶處理者 出現了 (剩餘%d)\"\n})\n\nL:SetTimerLocalization({\n\ttimerCrystalHandler\t= \"水晶處理者 出現\"\n})\n\nL:SetOptionLocalization({\n\tWarnCrystalHandler\t= \"當水晶處理者出現時顯示警告\",\n\ttimerCrystalHandler\t= \"為下一次 水晶處理者出現顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"籠罩你的寒氣就是厄運的先兆。\",\n\tHandlerYell\t\t= \"協助防禦!快點，廢物們!\",\n\tPhase2\t\t\t= \"你一定看得出來，這一切都只是徒勞無功罷了!\",\n\tYellKill\t\t= \"你的努力...全是白費。\"\n})\n\n-----------------\n--  King Dred  --\n-----------------\nL = DBM:GetModLocalization(\"KingDred\")\n\nL:SetGeneralLocalization({\n\tname = \"崔德王\"\n})\n\n-----------------------------\n--  The Prophet Tharon'ja  --\n-----------------------------\nL = DBM:GetModLocalization(\"ProphetTharonja\")\n\nL:SetGeneralLocalization({\n\tname = \"預言者薩隆杰\"\n})\n\n---------------\n--  Gundrak  --\n----------------\n--  Slad'ran  --\n----------------\nL = DBM:GetModLocalization(\"Sladran\")\n\nL:SetGeneralLocalization({\n\tname = \"史拉德銳\"\n})\n\n---------------\n--  Moorabi  --\n---------------\nL = DBM:GetModLocalization(\"Moorabi\")\n\nL:SetGeneralLocalization({\n\tname = \"慕拉比\"\n})\n\n-------------------------\n--  Drakkari Colossus  --\n-------------------------\nL = DBM:GetModLocalization(\"BloodstoneAnnihilator\")\n\nL:SetGeneralLocalization({\n\tname = \"德拉克瑞巨像\"\n})\n\nL:SetWarningLocalization({\n\tWarningElemental\t= \"階段二：元素生物\",\n\tWarningStone\t\t= \"階段一：巨像\"\n})\n\nL:SetOptionLocalization({\n\tWarningElemental\t= \"為階段二：元素生物顯示警告\",\n\tWarningStone\t\t= \"為階段一：巨像顯示警告\"\n})\n\n-----------------\n--  Gal'darah  --\n-----------------\nL = DBM:GetModLocalization(\"Galdarah\")\n\nL:SetGeneralLocalization({\n\tname = \"蓋爾達拉\"\n})\n\nL:SetWarningLocalization({\n\tTimerPhase2\t\t= \"階段二：阿卡利的化身\",\n\tTimerPhase1\t\t= \"階段一：阿卡利的高階預言者\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t\t= \"階段二：阿卡利的化身\",\n\tTimerPhase1\t\t= \"階段一：阿卡利的高階預言者\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t= \"警告：階段二：阿卡利的化身\",\n\tTimerPhase1\t\t= \"警告：階段一：阿卡利的高階預言者\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase2_1\t= \"在這之後什麼都不會剩下來!\",\n\tYellPhase2_2\t= \"你們想見識真正的力量?那我就讓你們如願以償!\"\n})\n\n-------------------------\n--  Eck the Ferocious  --\n-------------------------\nL = DBM:GetModLocalization(\"Eck\")\n\nL:SetGeneralLocalization({\n\tname = \"『兇猛』埃克\"\n})\n\n--------------------------\n--  Halls of Lightning  --\n--------------------------\n--  General Bjarngrim  --\n-------------------------\nL = DBM:GetModLocalization(\"Bjarngrin\")\n\nL:SetGeneralLocalization({\n\tname = \"畢亞格林將軍\"\n})\n\n-------------\n--  Ionar  --\n-------------\nL = DBM:GetModLocalization(\"Ionar\")\n\nL:SetGeneralLocalization({\n\tname = \"埃歐納\"\n})\n\n---------------\n--  Volkhan  --\n---------------\nL = DBM:GetModLocalization(\"Volkhan\")\n\nL:SetGeneralLocalization({\n\tname = \"渥克瀚\"\n})\n\n-------------\n--  Loken  --\n-------------\nL = DBM:GetModLocalization(\"Loken\")\n\nL:SetGeneralLocalization({\n\tname = \"洛肯\"\n})\n\n----------------------\n--  Halls of Stone  --\n-----------------------\n--  Maiden of Grief  --\n-----------------------\nL = DBM:GetModLocalization(\"MaidenOfGrief\")\n\nL:SetGeneralLocalization({\n\tname = \"悲嘆少女\"\n})\n\n------------------\n--  Krystallus  --\n------------------\nL = DBM:GetModLocalization(\"Krystallus\")\n\nL:SetGeneralLocalization({\n\tname = \"克利斯托魯斯\"\n})\n\n------------------------------\n--  Sjonnir the Ironshaper  --\n------------------------------\nL = DBM:GetModLocalization(\"SjonnirTheIronshaper\")\n\nL:SetGeneralLocalization({\n\tname = \"『塑鐵者』斯雍尼爾\"\n})\n\n--------------------------------------\n--  Brann Bronzebeard Escort Event  --\n--------------------------------------\nL = DBM:GetModLocalization(\"BrannBronzebeard\")\n\nL:SetGeneralLocalization({\n\tname = \"布萊恩護衛事件\"\n})\n\nL:SetWarningLocalization({\n\tWarningPhase\t= \"第%d階段\"\n})\n\nL:SetTimerLocalization({\n\ttimerEvent\t= \"剩餘時間\"\n})\n\nL:SetOptionLocalization({\n\tWarningPhase\t= \"為階段改變顯示警告\",\n\ttimerEvent\t\t= \"為事件的持續時間顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tPull\t= \"幫我看著外頭!我只要三兩下就可以搞定這玩意--\",\n\tPhase1\t= \"安全機制突破中，史實資料分析已調至低優先佇列，啟動反制程序。\",\n\tPhase2\t= \"已超出威脅指數標準。天界資料庫已中止。安全等級已提昇。\",\n\tPhase3\t= \"威脅指數過高。已轉移無效的分析。啟動清潔處理協定。\",\n\tKill\t= \"警告:安全性系統自動修復裝置已被關閉。開始記憶體內容消除與...\"\n})\n\n-----------------\n--  The Nexus  --\n-----------------\n--  Anomalus  --\n----------------\nL = DBM:GetModLocalization(\"Anomalus\")\n\nL:SetGeneralLocalization({\n\tname = \"艾諾瑪路斯\"\n})\n\n-------------------------------\n--  Ormorok the Tree-Shaper  --\n-------------------------------\nL = DBM:GetModLocalization(\"OrmorokTheTreeShaper\")\n\nL:SetGeneralLocalization({\n\tname = \"『樹木造形者』歐爾莫洛克\"\n})\n\n----------------------------\n--  Grand Magus Telestra  --\n----------------------------\nL = DBM:GetModLocalization(\"GrandMagusTelestra\")\n\nL:SetGeneralLocalization({\n\tname = \"大魔導師特雷斯翠\"\n})\n\nL:SetWarningLocalization({\n\tWarningSplitSoon\t= \"分裂 即將到來\",\n\tWarningSplitNow\t\t= \"分裂\",\n\tWarningMerge\t\t= \"融合\"\n})\nL:SetOptionLocalization({\n\tWarningSplitSoon\t= \"為分裂顯示預先警告\",\n\tWarningSplitNow\t\t= \"為分裂顯示警告\",\n\tWarningMerge\t\t= \"為融合顯示警告\"\n})\n\nL:SetMiscLocalization({\n\tSplitTrigger1\t\t= \"這裡有我千萬個分身。\",\n\tSplitTrigger2\t\t= \"我要讓你們嚐嚐無所適從的滋味!\",\n\tMergeTrigger\t\t= \"現在，最後一步!\"\n})\n\n-------------------\n--  Keristrasza  --\n-------------------\nL = DBM:GetModLocalization(\"Keristrasza\")\n\nL:SetGeneralLocalization({\n\tname = \"凱瑞史卓莎\"\n})\n\n-----------------------------------\n--  Commander Kolurg/Stoutbeard  --\n-----------------------------------\nL = DBM:GetModLocalization(\"Commander\")\n\nlocal commander = \"未知\"\nif UnitFactionGroup(\"player\") == \"Alliance\" then\n\tcommander = \"指揮官寇勒格\"\nelseif UnitFactionGroup(\"player\") == \"Horde\" then\n\tcommander = \"指揮官厚鬚\"\nend\n\nL:SetGeneralLocalization({\n\tname = commander\n})\n\n------------------\n--  The Oculus  --\n-------------------------------\n--  Drakos the Interrogator  --\n-------------------------------\nL = DBM:GetModLocalization(\"DrakosTheInterrogator\")\n\nL:SetGeneralLocalization({\n\tname = \"『審問者』德拉高斯\"\n})\n\n\nL:SetOptionLocalization({\n\tMakeitCountTimer\t= \"為成就:倒數吧顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tMakeitCountTimer\t= \"倒數吧\"\n})\n\n----------------------\n--  Mage-Lord Urom  --\n----------------------\nL = DBM:GetModLocalization(\"MageLordUrom\")\n\nL:SetGeneralLocalization({\n\tname = \"法師領主厄隆\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"可憐而無知的蠢貨!\"\n})\n\n--------------------------\n--  Varos Cloudstrider  --\n--------------------------\nL = DBM:GetModLocalization(\"VarosCloudstrider\")\n\nL:SetGeneralLocalization({\n\tname = \"瓦羅斯·雲行者\"\n})\n\n---------------------------\n--  Ley-Guardian Eregos  --\n---------------------------\nL = DBM:GetModLocalization(\"LeyGuardianEregos\")\n\nL:SetGeneralLocalization({\n\tname = \"地脈守護者伊瑞茍斯\"\n})\n\nL:SetMiscLocalization({\n\tMakeitCountTimer\t= \"倒數吧\"\n})\n\n--------------------\n--  Utgarde Keep  --\n-----------------------\n--  Prince Keleseth  --\n-----------------------\nL = DBM:GetModLocalization(\"Keleseth\")\n\nL:SetGeneralLocalization({\n\tname = \"凱雷希斯親王\"\n})\n\n--------------------------------\n--  Skarvald the Constructor  --\n--  & Dalronn the Controller  --\n--------------------------------\nL = DBM:GetModLocalization(\"ConstructorAndController\")\n\nL:SetGeneralLocalization({\n\tname = \"『控制者』達隆恩\"\n})\n\n----------------------------\n--  Ingvar the Plunderer  --\n----------------------------\nL = DBM:GetModLocalization(\"IngvarThePlunderer\")\n\nL:SetGeneralLocalization({\n\tname = \"『盜掠者』因格瓦\"\n})\n\nL:SetMiscLocalization({\n\tYellIngvarPhase2\t= \"我回來了!啊...再次割下你頭顱的機會到了!\",\n\tYellCombatEnd\t\t= \"不!不!我還可以…做得更好……\"\n})\n\n------------------------\n--  Utgarde Pinnacle  --\n--------------------------\n--  Skadi the Ruthless  --\n--------------------------\nL = DBM:GetModLocalization(\"SkadiTheRuthless\")\n\nL:SetGeneralLocalization({\n\tname = \"無情的斯卡迪\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"哪來的蠢狗敢入侵此地?打起精神來，我的兄弟們!誰能把他們的頭顱帶來，我會好好的犒賞一番!\",\n\tPhase2\t\t\t= \"你們這些沒教養的垃圾!你們的屍體剛好拿來當龍的點心!\"\n})\n\n-------------------\n--  King Ymiron  --\n-------------------\nL = DBM:GetModLocalization(\"Ymiron\")\n\nL:SetGeneralLocalization({\n\tname = \"依米倫國王\"\n})\n\n-------------------------\n--  Svala Sorrowgrave  --\n-------------------------\nL = DBM:GetModLocalization(\"SvalaSorrowgrave\")\n\nL:SetGeneralLocalization({\n\tname = \"絲瓦拉·悲傷亡墓\"\n})\n\nL:SetTimerLocalization({\n\ttimerRoleplay\t\t= \"絲瓦拉·悲傷亡墓活動\"\n})\n\nL:SetOptionLocalization({\n\ttimerRoleplay\t\t= \"為絲瓦拉·悲傷亡墓能夠活動前的角色扮演顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tSvalaRoleplayStart\t= \"陛下!我已完成您的要求，如今懇求您的祝福!\"\n})\n\n-----------------------\n--  Gortok Palehoof  --\n-----------------------\nL = DBM:GetModLocalization(\"GortokPalehoof\")\n\nL:SetGeneralLocalization({\n\tname = \"戈托克·白蹄\"\n})\n\n-----------------------\n--  The Violet Hold  --\n-----------------------\n--  Cyanigosa  --\n-----------------\nL = DBM:GetModLocalization(\"Cyanigosa\")\n\nL:SetGeneralLocalization({\n\tname = \"霞妮苟莎\"\n})\n\nL:SetMiscLocalization({\n\tCyanArrived\t= \"真是一群英勇的衛兵，但這座城市必須被夷平。我必須親自執行瑪里苟斯大人的指令!\"\n})\n\n--------------\n--  Erekem  --\n--------------\nL = DBM:GetModLocalization(\"Erekem\")\n\nL:SetGeneralLocalization({\n\tname = \"伊銳坎\"\n})\n\n---------------\n--  Ichoron  --\n---------------\nL = DBM:GetModLocalization(\"Ichoron\")\n\nL:SetGeneralLocalization({\n\tname = \"伊仇隆\"\n})\n\n-----------------\n--  Lavanthor  --\n-----------------\nL = DBM:GetModLocalization(\"Lavanthor\")\n\nL:SetGeneralLocalization({\n\tname = \"拉方索\"\n})\n\n--------------\n--  Moragg  --\n--------------\nL = DBM:GetModLocalization(\"Moragg\")\n\nL:SetGeneralLocalization({\n\tname = \"摩拉革\"\n})\n\n--------------\n--  Xevozz  --\n--------------\nL = DBM:GetModLocalization(\"Xevoss\")\n\nL:SetGeneralLocalization({\n\tname = \"基沃滋\"\n})\n\n-------------------------------\n--  Zuramat the Obliterator  --\n-------------------------------\nL = DBM:GetModLocalization(\"Zuramat\")\n\nL:SetGeneralLocalization({\n\tname = \"『消滅者』舒拉邁特\"\n})\n\n---------------------\n--  Portal Timers  --\n---------------------\nL = DBM:GetModLocalization(\"PortalTimers\")\n\nL:SetGeneralLocalization({\n\tname = \"傳送門計時\"\n})\n\nL:SetWarningLocalization({\n\tWarningPortalSoon\t= \"新傳送門即將到來\",\n\tWarningPortalNow\t= \"第%d個傳送門\",\n\tWarningBossNow\t\t= \"首領到來\"\n})\n\nL:SetTimerLocalization({\n\tTimerPortalIn\t= \"第%d個傳送門\"\n})\n\nL:SetOptionLocalization({\n\tWarningPortalNow\t\t= \"為新傳送門顯示警告\",\n\tWarningPortalSoon\t\t= \"為新傳送門顯示預先警告\",\n\tWarningBossNow\t\t\t= \"為首領到來顯示警告\",\n\tTimerPortalIn\t\t\t= \"為下一次傳送門顯示計時器 (擊敗首領後)\",\n\tShowAllPortalTimers\t\t= \"為所有傳送門顯示計時器 (不準確)\"\n})\n\nL:SetMiscLocalization({\n\tSealbroken\t= \"我們攻破了監獄大門!通往達拉然的通道已經暢通了!現在我們終於可以終結奧核戰爭了!\",\n\tWavePortal\t= \"傳送門開啟:(%d+)/18\"\n})\n\n-----------------------------\n--  Trial of the Champion  --\n-----------------------------\n--  The Black Knight  --\n------------------------\nL = DBM:GetModLocalization(\"BlackKnight\")\n\nL:SetGeneralLocalization({\n\tname = \"黑騎士\"\n})\n\nL:SetOptionLocalization({\n\tAchievementCheck\t\t= \"提示 '糟糕透頂' 成就失敗到隊伍頻道\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"幹得好。今天，你已證明了你自己-\",\n\tAchievementFailed\t= \">> 成就失敗: %s 被食屍鬼爆炸炸到了 <<\",\n\tYellCombatEnd\t\t= \"恭喜你，勇士們。儘管試煉隱藏著許多不安的變數，但你們仍然通過了考驗。\"\n})\n\n-----------------------\n--  Grand Champions  --\n-----------------------\nL = DBM:GetModLocalization(\"GrandChampions\")\n\nL:SetGeneralLocalization({\n\tname = \"大勇士們\"\n})\n\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"精采的戰鬥!你的下一個挑戰者是從十字軍中挑選出來的英勇鬥士。你將會親身面對他們超卓實力的考驗。\"\n})\n\n----------------------------------\n--  Argent Confessor Paletress  --\n----------------------------------\nL = DBM:GetModLocalization(\"Confessor\")\n\nL:SetGeneralLocalization({\n\tname = \"銀白告解者帕爾璀絲\"\n})\n\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"你們做得很好!\"\n})\n\n-----------------------\n--  Eadric the Pure  --\n-----------------------\nL = DBM:GetModLocalization(\"EadricthePure\")\n\nL:SetGeneralLocalization({\n\tname = \"『純淨者』埃卓克\"\n})\n\nL:SetMiscLocalization({\n\tYellCombatEnd\t= \"我認輸了!我投降。幹得好。我現在可以離場了嗎?\"\n})\n\n--------------------\n--  Pit of Saron  --\n---------------------\n--  Ick and Krick  --\n---------------------\nL = DBM:GetModLocalization(\"Ick\")\n\nL:SetGeneralLocalization({\n\tname = \"艾克及克瑞克\"\n})\n\n----------------------------\n--  Forgemaster Garfrost  --\n----------------------------\nL = DBM:GetModLocalization(\"ForgemasterGarfrost\")\n\nL:SetGeneralLocalization({\n\tname = \"鍛造大師加弗羅斯\"\n})\n\nL:SetOptionLocalization({\n\tAchievementCheck\t= \"提示 '別到十一' 的成就警告到隊伍頻道\"\n})\n\nL:SetMiscLocalization({\n\tSaroniteRockThrow\t= \"%s對你丟出一大塊薩鋼巨石!\",\n\tAchievementWarning\t= \"小心: %s已擁有%d層極寒冰霜\",\n\tAchievementFailed\t= \">> 成就失敗: %s已超過%d層極寒冰霜 <<\"\n})\n\n----------------------------\n--  Scourgelord Tyrannus  --\n----------------------------\nL = DBM:GetModLocalization(\"ScourgelordTyrannus\")\n\nL:SetGeneralLocalization({\n\tname = \"天譴領主提朗紐斯\"\n})\n\nL:SetMiscLocalization({\n\tCombatStart\t\t= \"終於，勇敢、勇敢的冒險者，你的干擾終到盡頭。你聽見了身後隧道中的金屬與骨頭敲擊聲嗎?這就是你即將面對的死亡之聲。\",\n\tHoarfrostTarget\t= \"冰霜巨龍霜牙凝視著(%S+)，準備發動寒冰攻擊!\",\n\tYellCombatEnd\t= \"不可能...霜牙...警告...\"\n})\n\n----------------------\n--  Forge of Souls  --\n----------------------\n--  Bronjahm  --\n----------------\nL = DBM:GetModLocalization(\"Bronjahm\")\n\nL:SetGeneralLocalization({\n\tname = \"布朗吉姆\"\n})\n\n-------------------------\n--  Devourer of Souls  --\n-------------------------\nL = DBM:GetModLocalization(\"DevourerofSouls\")\n\nL:SetGeneralLocalization({\n\tname = \"眾魂吞噬者\"\n})\n\n---------------------------\n--  Halls of Reflection  --\n---------------------------\n--  Wave Timers  --\n-------------------\nL = DBM:GetModLocalization(\"HoRWaveTimer\")\n\nL:SetGeneralLocalization({\n\tname = \"波數計時\"\n})\n\nL:SetWarningLocalization({\n\tWarnNewWaveSoon\t= \"新一波即將到來\",\n\tWarnNewWave\t\t= \"%s 到來\"\n})\n\nL:SetTimerLocalization({\n\tTimerNextWave\t= \"下一波\"\n})\n\nL:SetOptionLocalization({\n\tWarnNewWave\t\t\t= \"當首領到來時顯示警告\",\n\tWarnNewWaveSoon\t\t= \"為新一波顯示預先警告 (擊敗首領後)\",\n\tShowAllWaveWarnings\t= \"為所有波數顯示警告\",\n\tTimerNextWave\t\t= \"為下一波顯示計時器 (擊敗首領後)\",\n\tShowAllWaveTimers\t= \"為所有波數顯示計時器及預先警告 (不準確)\"\n})\n\nL:SetMiscLocalization({\n\tFalric\t\t= \"法勒瑞克\",\n\tWaveCheck\t= \"靈魂波數 = (%d+)/10\"\n})\n\n--------------\n--  Falric  --\n--------------\nL = DBM:GetModLocalization(\"Falric\")\n\nL:SetGeneralLocalization({\n\tname = \"法勒瑞克\"\n})\n\n--------------\n--  Marwyn  --\n--------------\nL = DBM:GetModLocalization(\"Marwyn\")\n\nL:SetGeneralLocalization({\n\tname = \"麥爾溫\"\n})\n\n-----------------------\n--  Lich King Event  --\n-----------------------\nL = DBM:GetModLocalization(\"LichKingEvent\")\n\nL:SetGeneralLocalization({\n\tname = \"逃離阿薩斯\"\n})\n\nL:SetTimerLocalization({\n\tachievementEscape\t= \"逃離計時\"\n})\n\nL:SetOptionLocalization({\n\tWarnWave\t\t= \"為下一波到來顯示警告\"\n})\n\nL:SetMiscLocalization({\n\tArthasYellKill\t= \"開火!開火!\",\n\tGhoul\t\t\t= \"狂怒食屍鬼\",\n\tAbom\t\t\t= \"笨拙憎惡體\",\n\tWitchDoctor\t\t= \"復活的巫醫\",\n\tWave1\t\t\t= \"無處可逃!\",\n\tWave2\t\t\t= \"屈服於墓地的酷寒之下吧!\",\n\tWave3\t\t\t= \"又是死路一條!\",\n\tWave4\t\t\t= \"你還能支持多久?\"\n})\n"
  },
  {
    "path": "DBM-PvP/Battlegrounds/Alterac.lua",
    "content": "local mod\t= DBM:NewMod(\"AlteracValley\", \"DBM-PvP\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal GetCurrentMapAreaID = GetCurrentMapAreaID\n\nmod:SetRevision(\"20220518110528\")\nmod:SetZone(DBM_DISABLE_ZONE_DETECTION)\n\nmod:RegisterEvents(\n\t\"ZONE_CHANGED_NEW_AREA\"\n)\n\nmod:AddBoolOption(\"AutoTurnIn\")\nmod:RemoveOption(\"HealthFrame\")\n\ndo\n\tlocal bgzone = false\n\n\tlocal function Init(self)\n\t\tlocal zoneID = GetCurrentMapAreaID()\n\t\tif not bgzone and zoneID == 402 then\n\t\t\tbgzone = true\n\t\t\tself:RegisterShortTermEvents(\n\t\t\t\t\"CHAT_MSG_MONSTER_YELL\",\n\t\t\t\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\t\t\t\"GOSSIP_SHOW\",\n\t\t\t\t\"QUEST_PROGRESS\",\n\t\t\t\t\"QUEST_COMPLETE\"\n\t\t\t)\n\t\t\tlocal generalMod = DBM:GetModByName(\"PvPGeneral\")\n\t\t\tgeneralMod:SubscribeAssault(zoneID, 0)\n\t\t\tgeneralMod:TrackHealth(11946, \"HordeBoss\")\n\t\t\tgeneralMod:TrackHealth(11948, \"AllianceBoss\")\n\t\t\tgeneralMod:TrackHealth(11947, \"Galvangar\")\n\t\t\tgeneralMod:TrackHealth(11949, \"Balinda\")\n\t\t\tgeneralMod:TrackHealth(13419, \"Ivus\")\n\t\t\tgeneralMod:TrackHealth(13256, \"Lokholar\")\n\n\t\telseif bgzone and zoneID ~= 402 then\n\t\t\tbgzone = false\n\t\t\tself:UnregisterShortTermEvents()\n\t\t\tself:Stop()\n\t\t\tDBM:GetModByName(\"PvPGeneral\"):StopTrackHealth()\n\t\tend\n\tend\n\n\tfunction mod:ZONE_CHANGED_NEW_AREA()\n\t\tInit(self)\n\tend\n\tmod.PLAYER_ENTERING_WORLD\t= mod.ZONE_CHANGED_NEW_AREA\n\tmod.OnInitialize\t\t\t= mod.ZONE_CHANGED_NEW_AREA\nend\n\ndo\n\tlocal ipairs, type = ipairs, type\n\tlocal UnitGUID, GetItemCount, GetNumGossipActiveQuests, SelectGossipActiveQuest, SelectGossipAvailableQuest, IsQuestCompletable, CompleteQuest, GetQuestReward = UnitGUID, GetItemCount, GetNumGossipActiveQuests,SelectGossipActiveQuest, SelectGossipAvailableQuest, IsQuestCompletable, CompleteQuest, GetQuestReward\n\n\tlocal quests = {\n\t\t[13442] = { -- Archdruid Renferal [A]\n\t\t\t{17423, 5}, -- Storm Crystal\n\t\t\t{17423, 1}, -- Storm Crystal\n\t\t},\n\t\t[13257] = {17422, 20}, -- Murgot Deepforge / Armor Scraps[A]\n\t\t[13438] = {17502, 1}, -- Wing Commander Slidore / Frostwolf Soldier's Medal [A]\n\t\t[13439] = {17503, 1}, -- Wing Commander Vipore / Frostwolf Lieutenant's Medal [A]\n\t\t[13437] = {17504, 1}, -- Wing Commander Ichman / Frostwolf Commander's Medal [A]\n\t\t[13577] = {17643, 1}, -- Stormpike Ram Rider Commander / Frostwolf Hide [A]\n\t\t[13236] = { -- Primalist Thurloga [H]\n\t\t\t{17306, 5}, -- Stormpike Soldier's Blood\n\t\t\t{17306, 1}, -- Stormpike Soldier's Blood\n\t\t},\n\t\t[13176] = {17422, 20}, -- Smith Regzar / Armor Scraps [H]\n\t\t[13179] = {17326, 1}, -- Wing Commander Guse / Stormpike Soldier's Flesh [H]\n\t\t[13180] = {17327, 1}, -- Wing Commander Jeztor / Stormpike Lieutenant's Flesh [H]\n\t\t[13181] = {17328, 1}, -- Wing Commander Mulverick / Stormpike Commander's Flesh [H]\n\t\t[13441] = {17642, 1}, -- Frostwolf Wolf Rider Commander / Alterac Ram Hide [H]\n\t}\n\n\tfunction mod:GOSSIP_SHOW()\n\t\tif not self.Options.AutoTurnIn then\n\t\t\treturn\n\t\tend\n\t\tlocal quest = quests[self:GetCIDFromGUID(UnitGUID(\"target\") or \"\") or 0]\n\t\tif quest and type(quest[1]) == \"table\" then\n\t\t\tfor _, v in ipairs(quest) do\n\t\t\t\tlocal num = GetItemCount(v[1])\n\t\t\t\tif num > 0 then\n\t\t\t\t\tif GetNumGossipActiveQuests() == 1 then\n\t\t\t\t\t\tSelectGossipActiveQuest(1)\n\t\t\t\t\telse\n\t\t\t\t\t\tSelectGossipAvailableQuest((v[2] == 5 and num >= 5) and 2 or 1)\n\t\t\t\t\tend\n\t\t\t\t\tbreak\n\t\t\t\tend\n\t\t\tend\n\t\telseif quest then\n\t\t\tif GetItemCount(quest[1]) > quest[2] then\n\t\t\t\tSelectGossipAvailableQuest(1)\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction mod:QUEST_PROGRESS()\n\t\tself:GOSSIP_SHOW()\n\t\tif IsQuestCompletable() then\n\t\t\tCompleteQuest()\n\t\tend\n\tend\n\n\tfunction mod:QUEST_COMPLETE()\n\t\tGetQuestReward(0)\n\tend\nend\n\ndo\n\tlocal bossTimer\t= mod:NewTimer(600, \"TimerBoss\")\n\n\tfunction mod:CHAT_MSG_MONSTER_YELL(msg, npc)\n\t\tlocal isAlly = msg == L.BossAlly or msg:match(L.BossAlly)\n\t\tif not isAlly and msg ~= L.BossHorde and not msg:match(L.BossHorde) then\n\t\t\treturn\n\t\tend\n\t\tbossTimer:Start(nil, npc)\n\t\tif isAlly then\n\t\t\tbossTimer:SetColor({r=0, g=0, b=1})\n\t\t\tbossTimer:UpdateIcon(\"Interface\\\\Icons\\\\INV_BannerPVP_02\")\n\t\telse\n\t\t\tbossTimer:SetColor({r=1, g=0, b=0})\n\t\t\tbossTimer:UpdateIcon(\"Interface\\\\Icons\\\\INV_BannerPVP_01\")\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-PvP/Battlegrounds/Arathi.lua",
    "content": "local mod\t= DBM:NewMod(\"ArathiBasin\", \"DBM-PvP\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal GetCurrentMapAreaID = GetCurrentMapAreaID\n\nmod:SetRevision(\"20220518110528\")\nmod:SetZone(DBM_DISABLE_ZONE_DETECTION)\n\nmod:RemoveOption(\"HealthFrame\")\n\nmod:RegisterEvents(\n\t\"ZONE_CHANGED_NEW_AREA\"\n)\n\ndo\n\tlocal bgzone = false\n\n\tlocal function Init()\n\t\tlocal zoneID = GetCurrentMapAreaID()\n\t\tif not bgzone and zoneID == 462 then\n\t\t\tbgzone = true\n\t\t\tDBM:GetModByName(\"PvPGeneral\"):SubscribeAssault(zoneID, 5)\n\t\telseif bgzone and zoneID ~= 462 then\n\t\t\tbgzone = false\n\t\tend\n\tend\n\n\tfunction mod:ZONE_CHANGED_NEW_AREA()\n\t\tInit()\n\tend\n\tmod.PLAYER_ENTERING_WORLD\t= mod.ZONE_CHANGED_NEW_AREA\n\tmod.OnInitialize\t\t\t= mod.ZONE_CHANGED_NEW_AREA\nend\n"
  },
  {
    "path": "DBM-PvP/Battlegrounds/EyeOfTheStorm.lua",
    "content": "local mod\t= DBM:NewMod(\"EyeoftheStorm\", \"DBM-PvP\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal GetCurrentMapAreaID = GetCurrentMapAreaID\n\nmod:SetRevision(\"20220518110528\")\nmod:SetZone(DBM_DISABLE_ZONE_DETECTION)\n\nmod:RegisterEvents(\n\t\"ZONE_CHANGED_NEW_AREA\"\n)\nmod:RemoveOption(\"HealthFrame\")\n\ndo\n\tlocal bgzone = false\n\n\tlocal function Init()\n\t\tlocal zoneID = GetCurrentMapAreaID()\n\t\tif not bgzone and zoneID == 483 then\n\t\t\tbgzone = true\n\t\t\tlocal generalMod = DBM:GetModByName(\"PvPGeneral\")\n\t\t\tgeneralMod:SubscribeAssault(zoneID, 4)\n\t\t\tgeneralMod:SubscribeFlags()\n\t\telseif bgzone and zoneID ~= 483 then\n\t\t\tbgzone = false\n\t\tend\n\tend\n\n\tfunction mod:ZONE_CHANGED_NEW_AREA()\n\t\tInit()\n\tend\n\tmod.PLAYER_ENTERING_WORLD\t= mod.ZONE_CHANGED_NEW_AREA\n\tmod.OnInitialize\t\t\t= mod.ZONE_CHANGED_NEW_AREA\nend\n"
  },
  {
    "path": "DBM-PvP/Battlegrounds/IsleOfConquest.lua",
    "content": "local mod\t= DBM:NewMod(\"IsleofConquest\", \"DBM-PvP\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal GetCurrentMapAreaID = GetCurrentMapAreaID\n\nmod:SetRevision(\"20250305220503\")\nmod:SetZone(DBM_DISABLE_ZONE_DETECTION)\n\nmod:RegisterEvents(\n\t\"ZONE_CHANGED_NEW_AREA\"\n)\n\nmod:RemoveOption(\"HealthFrame\")\n\nlocal warnSiegeEngine = mod:NewAnnounce(\"WarnSiegeEngine\", 3)\nlocal warnSiegeEngineSoon = mod:NewAnnounce(\"WarnSiegeEngineSoon\", 2)\n\nlocal timerSiegeEngine = mod:NewTimer(180, \"TimerSiegeEngine\")\n\ndo\n\tlocal bgzone = false\n\n\tlocal function Init(self)\n\t\tlocal zoneID = GetCurrentMapAreaID()\n\t\tif not bgzone and zoneID == 541 then\n\t\t\tbgzone = true\n\t\t\tself:RegisterShortTermEvents(\n\t\t\t\t\"CHAT_MSG_MONSTER_YELL\",\n\t\t\t\t\"UNIT_DIED\"\n\t\t\t)\n\t\t\tlocal generalMod = DBM:GetModByName(\"PvPGeneral\")\n\t\t\tgeneralMod:SubscribeAssault(zoneID, 5)\n\t\t\tgeneralMod:TrackHealth(34922, \"HordeBoss\")\n\t\t\tgeneralMod:TrackHealth(34924, \"AllianceBoss\")\n\t\t\tgeneralMod:TrackHealth(195494, \"HordeGateFront\", 600000)\t-- Horde Front Gate\n\t\t\tgeneralMod:TrackHealth(195495, \"HordeGateWest\", 600000)\t\t-- Horde West Gate\n\t\t\tgeneralMod:TrackHealth(195496, \"HordeGateEast\", 600000)\t\t-- Horde East Gate\n\t\t\tgeneralMod:TrackHealth(195698, \"AllianceGateEast\", 600000)\t-- Alliance East Gate\n\t\t\tgeneralMod:TrackHealth(195699, \"AllianceGateWest\", 600000)\t-- Alliance West Gate\n\t\t\tgeneralMod:TrackHealth(195700, \"AllianceGateFront\", 600000)\t-- Alliance Front Gate\n\t\telseif bgzone and zoneID ~= 541 then\n\t\t\tbgzone = false\n\t\t\tself:UnregisterShortTermEvents()\n\t\t\tself:Stop()\n\t\t\tDBM:GetModByName(\"PvPGeneral\"):StopTrackHealth()\n\t\tend\n\tend\n\n\tfunction mod:ZONE_CHANGED_NEW_AREA()\n\t\tInit(self)\n\tend\n\tmod.PLAYER_ENTERING_WORLD\t= mod.ZONE_CHANGED_NEW_AREA\n\tmod.OnInitialize\t\t\t= mod.ZONE_CHANGED_NEW_AREA\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.GoblinStartAlliance or msg == L.GoblinBrokenAlliance or msg:find(L.GoblinStartAlliance) or msg:find(L.GoblinBrokenAlliance) then\n\t\tself:SendSync(\"SEStart\", \"Alliance\")\n\telseif msg == L.GoblinStartHorde or msg == L.GoblinBrokenHorde or msg:find(L.GoblinStartHorde) or msg:find(L.GoblinBrokenHorde) then\n\t\tself:SendSync(\"SEStart\", \"Horde\")\n\telseif msg == L.GoblinHalfwayAlliance or msg:find(L.GoblinHalfwayAlliance) then\n\t\tself:SendSync(\"SEHalfway\", \"Alliance\")\n\telseif msg == L.GoblinHalfwayHorde or msg:find(L.GoblinHalfwayHorde) then\n\t\tself:SendSync(\"SEHalfway\", \"Horde\")\n\telseif msg == L.GoblinFinishedAlliance or msg:find(L.GoblinFinishedAlliance) then\n\t\tself:SendSync(\"SEFinish\", \"Alliance\")\n\telseif msg == L.GoblinFinishedHorde or msg:find(L.GoblinFinishedHorde) then\n\t\tself:SendSync(\"SEFinish\", \"Horde\")\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 34476 then\n\t\tself:SendSync(\"SEBroken\", \"Alliance\")\n\telseif cid == 35069 then\n\t\tself:SendSync(\"SEBroken\", \"Horde\")\n\tend\nend\n\nfunction mod:OnSync(msg, arg)\n\tif msg == \"SEStart\" then\n\t\ttimerSiegeEngine:Start(178)\n\t\twarnSiegeEngineSoon:Schedule(168)\n\t\tif arg == \"Alliance\" then\n\t\t\ttimerSiegeEngine:SetColor({r=0, g=0, b=1})\n\t\telseif arg == \"Horde\" then\n\t\t\ttimerSiegeEngine:SetColor({r=1, g=0, b=0})\n\t\tend\n\telseif msg == \"SEHalfway\" then\n\t\twarnSiegeEngineSoon:Cancel()\n\t\ttimerSiegeEngine:Start(89)\n\t\twarnSiegeEngineSoon:Schedule(79)\n\t\tif arg == \"Alliance\" then\n\t\t\ttimerSiegeEngine:SetColor({r=0, g=0, b=1})\n\t\telseif arg == \"Horde\" then\n\t\t\ttimerSiegeEngine:SetColor({r=1, g=0, b=0})\n\t\tend\n\telseif msg == \"SEFinish\" then\n\t\twarnSiegeEngineSoon:Cancel()\n\t\ttimerSiegeEngine:Cancel()\n\t\twarnSiegeEngine:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-PvP/Battlegrounds/StrandOfTheAncients.lua",
    "content": "local mod\t= DBM:NewMod(\"StrandoftheAncients\", \"DBM-PvP\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal GetCurrentMapAreaID = GetCurrentMapAreaID\n\nmod:SetRevision(\"20250305220503\")\nmod:SetZone(DBM_DISABLE_ZONE_DETECTION)\n\nmod:RemoveOption(\"HealthFrame\")\n\nmod:RegisterEvents(\n\t\"ZONE_CHANGED_NEW_AREA\"\n)\n\ndo\n\tlocal bgzone = false\n\n\tlocal function Init()\n\t\tlocal zoneID = GetCurrentMapAreaID()\n\t\tif not bgzone and zoneID == 513 then\n\t\t\tbgzone = true\n\t\t\tlocal generalMod = DBM:GetModByName(\"PvPGeneral\")\n\t\t\tgeneralMod:SubscribeAssault(zoneID, 0)\n\t\t\tgeneralMod:TrackHealth(190722, \"GreenEmerald\", 11000)\n\t\t\tgeneralMod:TrackHealth(190724, \"BlueSapphire\", 11000)\n\t\t\tgeneralMod:TrackHealth(190723, \"PurpleAmethyst\", 13000)\n\t\t\tgeneralMod:TrackHealth(190726, \"RedSun\", 13000)\n\t\t\tgeneralMod:TrackHealth(190727, \"YellowMoon\", 14000)\n\t\t\tgeneralMod:TrackHealth(192549, \"ChamberAncientRelics\", 10000)\n\t\telseif bgzone and zoneID ~= 513 then\n\t\t\tbgzone = false\n\t\t\tDBM:GetModByName(\"PvPGeneral\"):StopTrackHealth()\n\t\tend\n\tend\n\n\tfunction mod:ZONE_CHANGED_NEW_AREA()\n\t\tInit()\n\tend\n\tmod.PLAYER_ENTERING_WORLD\t= mod.ZONE_CHANGED_NEW_AREA\n\tmod.OnInitialize\t\t\t= mod.ZONE_CHANGED_NEW_AREA\nend\n"
  },
  {
    "path": "DBM-PvP/Battlegrounds/Warsong.lua",
    "content": "local mod\t= DBM:NewMod(\"WarsongGulch\", \"DBM-PvP\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal GetCurrentMapAreaID = GetCurrentMapAreaID\n\nmod:SetRevision(\"20220518110528\")\nmod:SetZone(DBM_DISABLE_ZONE_DETECTION)\n\nmod:RegisterEvents(\n\t\"ZONE_CHANGED_NEW_AREA\"\n)\n\nmod:RemoveOption(\"HealthFrame\")\n\ndo\n\tlocal bgzone = false\n\n\tlocal function Init()\n\t\tlocal zoneID = GetCurrentMapAreaID()\n\t\tif not bgzone and zoneID == 444 then\n\t\t\tbgzone = true\n\t\t\tDBM:GetModByName(\"PvPGeneral\"):SubscribeFlags()\n\t\telseif bgzone and zoneID ~= 444 then\n\t\t\tbgzone = false\n\t\tend\n\tend\n\n\tfunction mod:ZONE_CHANGED_NEW_AREA()\n\t\tInit()\n\tend\n\tmod.PLAYER_ENTERING_WORLD\t= mod.ZONE_CHANGED_NEW_AREA\n\tmod.OnInitialize\t\t\t= mod.ZONE_CHANGED_NEW_AREA\nend\n"
  },
  {
    "path": "DBM-PvP/DBM-PvP.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0PvP|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0PvP|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0PvP|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0PvP|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0PvP|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0PvP|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0JcJ|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0JcJ|r\n## Title-ptBR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0JxJ|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0PvP|r\n## Author: Nitram/Tandanu/Arta\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMPvP_AllSavedVars\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: OTHER\n## X-DBM-Mod-Category: OTHER\n## X-DBM-Mod-No-Statistics: 1\n## X-DBM-Mod-Name: PvP\n## X-DBM-Mod-Name-deDE: PvP\n## X-DBM-Mod-Name-frFR: PvP\n## X-DBM-Mod-Name-ruRU: PvP\n## X-DBM-Mod-Name-zhTW: PvP\n## X-DBM-Mod-Name-zhCN: PvP\n## X-DBM-Mod-Name-koKR: PvP\n## X-DBM-Mod-Name-esES: JcJ\n## X-DBM-Mod-Name-esMX: JcJ\n## X-DBM-Mod-Sort: 1500\n## X-DBM-Mod-MapID: 462,444,402,541,483,513\n## X-DBM-Mod-MinCoreRevision: 20200524142133\n## X-DBM-Mod-LoadZone: Blade's Edge Arena,Dalaran Arena,Nagrand Arena,Ruins of Lordaeron,The Ring of Valor\n## X-DBM-Mod-LoadZone-deDE:Arena des Schergrats,Arena von Dalaran,Arena von Nagrand,Ruinen von Lordaeron,Der Ring der Ehre\n## X-DBM-Mod-LoadZone-esES: Arena Filospada,Arena de Dalaran,Arena de Nagrand,Ruinas de Lordaeron,El Círculo del Valor\n## X-DBM-Mod-LoadZone-esMX: Arena Filospada,Arena de Dalaran,Arena de Nagrand,Ruinas de Lordaeron,El Círculo del Valor\n## X-DBM-Mod-LoadZone-frFR:Arène des Tranchantes,Arène de Dalaran,Arène de Nagrand,Ruines de Lordaeron,L’arène des Valeureux\n## X-DBM-Mod-LoadZone-koKR:칼날 투기장,달라란 투기장,나그란드 투기장,로데론의 폐허,용맹의 투기장\n## X-DBM-Mod-LoadZone-ruRU:Арена Острогорья,Арена Даларана,Арена Награнда,Руины Лордерона,Арена Доблести\n## X-DBM-Mod-LoadZone-zhCN:刀锋山竞技场,达拉然竞技场,纳格兰竞技场,洛丹伦废墟,勇气竞技场\n## X-DBM-Mod-LoadZone-zhTW:劍刃競技場,達拉然競技場,納葛蘭競技場,羅德隆廢墟,勇武競技場\n\nlocalization.en.lua\nlocalization.cn.lua\nlocalization.de.lua\nlocalization.es.lua\nlocalization.fr.lua\nlocalization.kr.lua\nlocalization.ru.lua\nlocalization.tw.lua\n\nPvPGeneral.lua\n\nBattlegrounds\\Alterac.lua\nBattlegrounds\\Arathi.lua\nBattlegrounds\\EyeOfTheStorm.lua\nBattlegrounds\\IsleOfConquest.lua\nBattlegrounds\\StrandOfTheAncients.lua\nBattlegrounds\\Warsong.lua\n"
  },
  {
    "path": "DBM-PvP/PvPGeneral.lua",
    "content": "local mod\t= DBM:NewMod(\"PvPGeneral\", \"DBM-PvP\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal DBM = DBM\nlocal AceTimer = LibStub(\"AceTimer-3.0\")\n\nmod:SetRevision(\"20250328212421\")\nmod:SetZone(DBM_DISABLE_ZONE_DETECTION)\n\nmod:RegisterEvents(\n\t\"ZONE_CHANGED_NEW_AREA\",\n\t\"PLAYER_ENTERING_WORLD\",\n\t\"PLAYER_DEAD\",\n\t\"CHAT_MSG_BG_SYSTEM_NEUTRAL\"\n)\n\nlocal vulnerableTimer\t= mod:NewNextTimer(600, 46392)\n\nmod:AddBoolOption(\"ColorByClass\", true)\nmod:AddBoolOption(\"HideBossEmoteFrame\", false)\nmod:AddBoolOption(\"AutoSpirit\", false)\nmod:AddBoolOption(\"ShowRelativeGameTime\", true)\nmod:AddBoolOption(\"ShowGatesHealth\", true)\nmod:RemoveOption(\"HealthFrame\")\n\ndo\n\tlocal IsInInstance, RepopMe, HasSoulstone = IsInInstance, RepopMe, HasSoulstone\n\n\tfunction mod:PLAYER_DEAD()\n\t\tlocal _, instanceType = IsInInstance()\n\t\tif instanceType == \"pvp\" and not HasSoulstone() and self.Options.AutoSpirit then\n\t\t\tRepopMe()\n\t\tend\n\tend\nend\n\n-- Utility functions\nlocal format, strsplit = string.format, strsplit\nlocal hooksecurefunc = hooksecurefunc\nlocal IsActiveBattlefieldArena, FauxScrollFrame_GetOffset, GetBattlefieldScore, GetNumBattlefieldScores, GetUnitName, UnitFactionGroup, UnitName = IsActiveBattlefieldArena, FauxScrollFrame_GetOffset, GetBattlefieldScore, GetNumBattlefieldScores, GetUnitName, UnitFactionGroup, UnitName\nlocal MAX_WORLDSTATE_SCORE_BUTTONS, CUSTOM_CLASS_COLORS, RAID_CLASS_COLORS = MAX_WORLDSTATE_SCORE_BUTTONS, CUSTOM_CLASS_COLORS, RAID_CLASS_COLORS\nlocal playerName = UnitName(\"player\")\n\nlocal function GetBattlefieldFaction(unit) -- workaround to detect faction in Cross-Faction BG\n\tif not unit then return UnitFactionGroup(\"player\") end\n\tlocal numScores = GetNumBattlefieldScores()\n\tif numScores == 0 then return UnitFactionGroup(\"player\")\n\telse\n\t\tlocal unitName = GetUnitName(unit, true)\n\t\tfor i = 1, numScores do\n\t\t\tlocal name, _, _, _, _, faction = GetBattlefieldScore(i)\n\t\t\tif name == unitName then\n\t\t\t\tif faction == 0 then\n\t\t\t\t\treturn \"Horde\"\n\t\t\t\telse\n\t\t\t\t\treturn \"Alliance\"\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend\n\nlocal myScoreName = format(\"> %s <\", playerName)\nhooksecurefunc(\"WorldStateScoreFrame_Update\", function()\n\tif not mod.Options.ColorByClass then return\tend\n\tlocal inArena = IsActiveBattlefieldArena()\n\tlocal offset = FauxScrollFrame_GetOffset(WorldStateScoreScrollFrame)\n\n\tlocal _, name, faction, classToken, realm, classTextColor, nameText\n\n\tfor i = 1, MAX_WORLDSTATE_SCORE_BUTTONS do\n\t\tname, _, _, _, _, faction, _, _, _, classToken = GetBattlefieldScore(offset + i)\n\n\t\tif name then\n\t\t\tname, realm = strsplit(\"-\", name, 2)\n\n\t\t\tif name == playerName then\n\t\t\t\tname = myScoreName\n\t\t\tend\n\n\t\t\tif realm then\n\t\t\t\tlocal color\n\n\t\t\t\tif inArena then\n\t\t\t\t\tif faction == 1 then\n\t\t\t\t\t\tcolor = \"|cffffd100\"\n\t\t\t\t\telse\n\t\t\t\t\t\tcolor = \"|cff19ff19\"\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tif faction == 1 then\n\t\t\t\t\t\tcolor = \"|cff00adf0\"\n\t\t\t\t\telse\n\t\t\t\t\t\tcolor = \"|cffff1919\"\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\t\tname = format(\"%s|cffffffff - |r%s%s|r\", name, color, realm)\n\t\t\tend\n\n\t\t\tclassTextColor = CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS[classToken] or RAID_CLASS_COLORS[classToken]\n\n\t\t\tnameText = _G[\"WorldStateScoreButton\"..i..\"NameText\"]\n\t\t\tnameText:SetText(name)\n\t\t\tnameText:SetTextColor(classTextColor.r, classTextColor.g, classTextColor.b)\n\t\tend\n\tend\nend)\n\nlocal CreateFrame, GetCurrentMapAreaID = CreateFrame, GetCurrentMapAreaID\nlocal scoreFrame1, scoreFrame2, scoreFrameToWin, scoreFrame1Text, scoreFrame2Text, scoreFrameToWinText, flagFrame1, flagButton1, flagFrame2, flagButton2, flagFrame1Text, flagFrame2Text\nlocal allyFlag, hordeFlag\n\nlocal function ShowEstimatedPoints()\n\tif AlwaysUpFrame1 and AlwaysUpFrame2 then\n\t\tif not scoreFrame1 then\n\t\t\tscoreFrame1 = CreateFrame(\"Frame\", \"DBM_ScoreFrame1\", AlwaysUpFrame1)\n\t\t\tscoreFrame1:SetHeight(10)\n\t\t\tscoreFrame1:SetWidth(37)\n\t\t\tscoreFrame1:SetPoint(\"LEFT\", \"AlwaysUpFrame1Text\", \"RIGHT\", 4, 0)\n\t\t\tscoreFrame1Text = scoreFrame1:CreateFontString(\"$parentText\", \"ARTWORK\", \"GameFontNormalSmall\")\n\t\t\tscoreFrame1Text:SetAllPoints(scoreFrame1)\n\t\t\tscoreFrame1Text:SetJustifyH(\"LEFT\")\n\t\tend\n\t\tif not scoreFrame2 then\n\t\t\tscoreFrame2 = CreateFrame(\"Frame\", \"DBM_ScoreFrame2\", AlwaysUpFrame2)\n\t\t\tscoreFrame2:SetHeight(10)\n\t\t\tscoreFrame2:SetWidth(37)\n\t\t\tscoreFrame2:SetPoint(\"LEFT\", \"AlwaysUpFrame2Text\", \"RIGHT\", 4, 0)\n\t\t\tscoreFrame2Text = scoreFrame2:CreateFontString(\"$parentText\", \"ARTWORK\", \"GameFontNormalSmall\")\n\t\t\tscoreFrame2Text:SetAllPoints(scoreFrame2)\n\t\t\tscoreFrame2Text:SetJustifyH(\"LEFT\")\n\t\tend\n\t\tscoreFrame1Text:SetText(\"\")\n\t\tscoreFrame1:Show()\n\t\tscoreFrame2Text:SetText(\"\")\n\t\tscoreFrame2:Show()\n\tend\nend\n\nlocal function ShowFlagDisplay()\n\tif (scoreFrame1Text and scoreFrame2Text) or AlwaysUpFrame2DynamicIconButton or AlwaysUpFrame3DynamicIconButton then\n\n\t\tif not flagFrame1 then\n\t\t\tif GetCurrentMapAreaID() == 444 and AlwaysUpFrame2DynamicIconButton then -- WG specific\n\t\t\t\tflagFrame1 = CreateFrame(\"Frame\", \"DBM_FlagFrame1\", AlwaysUpFrame2DynamicIconButton)\n\t\t\t\tflagFrame1:SetPoint(\"LEFT\", \"AlwaysUpFrame2DynamicIconButton\", \"RIGHT\", 4, 0)\n\t\t\t\tDBM:Debug(\"DBM_FlagFrame1 anchored to AlwaysUpFrame2DynamicIconButton\")\n\n\t\t\t\tflagButton1 = flagButton1 or CreateFrame(\"Button\", \"DBM_FlagButton1\", nil, \"SecureActionButtonTemplate\")\n\t\t\t\tflagButton1:SetPoint(\"LEFT\", \"AlwaysUpFrame2\", \"RIGHT\", 15, 0)\n\t\t\t\tDBM:Debug(\"DBM_FlagButton1 anchored to AlwaysUpFrame2\")\n\t\t\telseif scoreFrame1 then\n\t\t\t\tflagFrame1 = CreateFrame(\"Frame\", \"DBM_FlagFrame1\", scoreFrame1)\n\t\t\t\tflagFrame1:SetPoint(\"LEFT\", \"DBM_ScoreFrame1Text\", \"RIGHT\", 4, 0)\n\t\t\t\tDBM:Debug(\"DBM_FlagFrame1 anchored to scoreFrame1\")\n\n\t\t\t\tflagButton1 = flagButton1 or CreateFrame(\"Button\", \"DBM_FlagButton1\", nil, \"SecureActionButtonTemplate\")\n\t\t\t\tflagButton1:SetPoint(\"LEFT\", \"AlwaysUpFrame1\", \"RIGHT\", 50, 0)\n\t\t\t\tDBM:Debug(\"DBM_FlagButton1 anchored to AlwaysUpFrame1 after scoreFrame1\")\n\t\t\telseif AlwaysUpFrame1 then\n\t\t\t\tflagFrame1 = CreateFrame(\"Frame\", \"DBM_FlagFrame1\", AlwaysUpFrame1)\n\t\t\t\tflagFrame1:SetPoint(\"LEFT\", \"AlwaysUpFrame1Text\", \"RIGHT\", 4, 0)\n\t\t\t\tDBM:Debug(\"DBM_FlagFrame1 anchored to AlwaysUpFrame1\")\n\n\t\t\t\tflagButton1 = flagButton1 or CreateFrame(\"Button\", \"DBM_FlagButton1\", nil, \"SecureActionButtonTemplate\")\n\t\t\t\tflagButton1:SetPoint(\"LEFT\", \"AlwaysUpFrame1\", \"RIGHT\", 15, 0)\n\t\t\t\tDBM:Debug(\"DBM_FlagButton1 anchored to AlwaysUpFrame1\")\n\t\t\tend\n\t\t\tflagFrame1:SetHeight(10)\n\t\t\tflagFrame1:SetWidth(150)\n\n\t\t\tflagButton1:SetHeight(15)\n\t\t\tflagButton1:SetWidth(150)\n\t\t\tflagButton1:SetAttribute(\"type\", \"macro\")\n\n\t\t\tflagFrame1Text = flagFrame1:CreateFontString(\"$parentText\", \"ARTWORK\", \"GameFontNormalSmall\")\n\t\t\tflagFrame1Text:SetAllPoints(flagFrame1)\n\t\t\tflagFrame1Text:SetJustifyH(\"LEFT\")\n\t\tend\n\t\tif not flagFrame2 then\n\t\t\tif GetCurrentMapAreaID() == 444 and AlwaysUpFrame3DynamicIconButton then -- WG specific\n\t\t\t\tflagFrame2 = CreateFrame(\"Frame\", \"DBM_FlagFrame2\", AlwaysUpFrame3DynamicIconButton)\n\t\t\t\tflagFrame2:SetPoint(\"LEFT\", \"AlwaysUpFrame3DynamicIconButton\", \"RIGHT\", 4, 0)\n\t\t\t\tDBM:Debug(\"DBM_FlagFrame2 anchored to AlwaysUpFrame3DynamicIconButton\")\n\n\t\t\t\tflagButton2 = flagButton2 or CreateFrame(\"Button\", \"DBM_FlagButton2\", nil, \"SecureActionButtonTemplate\")\n\t\t\t\tflagButton2:SetPoint(\"LEFT\", \"AlwaysUpFrame3\", \"RIGHT\", 15, 0)\n\t\t\t\tDBM:Debug(\"DBM_FlagButton2 anchored to AlwaysUpFrame3\")\n\t\t\telseif scoreFrame2 then\n\t\t\t\tflagFrame2 = CreateFrame(\"Frame\", \"DBM_FlagFrame2\", scoreFrame2)\n\t\t\t\tflagFrame2:SetPoint(\"LEFT\", \"DBM_ScoreFrame2Text\", \"RIGHT\", 4, 0)\n\t\t\t\tDBM:Debug(\"DBM_FlagFrame2 anchored to scoreFrame2\")\n\n\t\t\t\tflagButton2 = flagButton2 or CreateFrame(\"Button\", \"DBM_FlagButton2\", nil, \"SecureActionButtonTemplate\")\n\t\t\t\tflagButton2:SetPoint(\"LEFT\", \"AlwaysUpFrame2\", \"RIGHT\", 50, 0)\n\t\t\t\tDBM:Debug(\"DBM_FlagButton2 anchored to AlwaysUpFrame2 after scoreFrame2\")\n\t\t\telseif AlwaysUpFrame2 then\n\t\t\t\tflagFrame2 = CreateFrame(\"Frame\", \"DBM_FlagFrame2\", AlwaysUpFrame2)\n\t\t\t\tflagFrame2:SetPoint(\"LEFT\", \"AlwaysUpFrame2Text\", \"RIGHT\", 4, 0)\n\t\t\t\tDBM:Debug(\"DBM_FlagFrame2 anchored to AlwaysUpFrame2\")\n\n\t\t\t\tflagButton2 = flagButton2 or CreateFrame(\"Button\", \"DBM_FlagButton2\", nil, \"SecureActionButtonTemplate\")\n\t\t\t\tflagButton2:SetPoint(\"LEFT\", \"AlwaysUpFrame2\", \"RIGHT\", 15, 0)\n\t\t\t\tDBM:Debug(\"DBM_FlagButton2 anchored to AlwaysUpFrame2\")\n\t\t\tend\n\t\t\tflagFrame2:SetHeight(10)\n\t\t\tflagFrame2:SetWidth(150)\n\n\t\t\tflagButton2:SetHeight(15)\n\t\t\tflagButton2:SetWidth(150)\n\t\t\tflagButton2:SetAttribute(\"type\", \"macro\")\n\n\t\t\tflagFrame2Text = flagFrame2:CreateFontString(\"$parentText\", \"ARTWORK\", \"GameFontNormalSmall\")\n\t\t\tflagFrame2Text:SetAllPoints(flagFrame2)\n\t\t\tflagFrame2Text:SetJustifyH(\"LEFT\")\n\t\tend\n\t\tflagFrame1Text:SetText(\"\")\n\t\tflagFrame1:Show()\n\t\tflagButton1:Show()\n\t\tflagFrame2Text:SetText(\"\")\n\t\tflagFrame2:Show()\n\t\tflagButton2:Show()\n\tend\nend\n\nlocal function HideFlagDisplay()\n\tif flagFrame1 and flagFrame2 then\n\t\tif flagFrame1Text then\n\t\t\tflagFrame1Text:SetText(\"\")\n\t\t\tflagFrame1 = nil\n\t\tend\n\t\tif flagFrame2Text then\n\t\t\tflagFrame2Text:SetText(\"\")\n\t\t\tflagFrame2 = nil\n\t\tend\n\tend\nend\n\nlocal function UpdateFlagDisplay()\n\tif flagFrame1Text and flagFrame2Text then\n\t\tif allyFlag then\n\t\t\tif GetCurrentMapAreaID() == 483 then -- EotS\n\t\t\t\tflagFrame1Text:SetText(L.Flag..\": \"..allyFlag)\n\t\t\telse\n\t\t\t\tflagFrame1Text:SetText(allyFlag)\n\t\t\tend\n\t\t\tflagButton1:SetAttribute(\"macrotext\", \"/targetexact \"..allyFlag)\n\t\telse\n\t\t\tflagFrame1Text:SetText(\"\")\n\t\t\tflagButton1:SetAttribute(\"macrotext\", \"\")\n\t\tend\n\n\t\tif hordeFlag then\n\t\t\tif GetCurrentMapAreaID() == 483 then -- EotS\n\t\t\t\tflagFrame2Text:SetText(L.Flag..\": \"..hordeFlag)\n\t\t\telse\n\t\t\t\tflagFrame2Text:SetText(hordeFlag)\n\t\t\tend\n\t\t\tflagButton2:SetAttribute(\"macrotext\", \"/targetexact \"..hordeFlag)\n\t\telse\n\t\t\tflagFrame2Text:SetText(\"\")\n\t\t\tflagButton2:SetAttribute(\"macrotext\", \"\")\n\t\tend\n\t\tif allyFlag and hordeFlag and not vulnerableTimer:IsStarted() then -- WSG specific (no need to check mapID since only this BG has 2 flags)\n\t\t\tvulnerableTimer:Start()\n\t\tend\n\tend\nend\n\nlocal function ShowBasesToWin()\n\tif not AlwaysUpFrame2 then\n\t\treturn\n\tend\n\tif not scoreFrameToWin then\n\t\tscoreFrameToWin = CreateFrame(\"Frame\", nil, AlwaysUpFrame2)\n\t\tscoreFrameToWin:SetHeight(10)\n\t\tscoreFrameToWin:SetWidth(200)\n\t\tscoreFrameToWin:SetPoint(\"TOPLEFT\", \"AlwaysUpFrame2\", \"BOTTOMLEFT\", 22, 2)\n\t\tscoreFrameToWinText = scoreFrameToWin:CreateFontString(nil, nil, \"GameFontNormalSmall\")\n\t\tscoreFrameToWinText:SetAllPoints(scoreFrameToWin)\n\t\tscoreFrameToWinText:SetJustifyH(\"LEFT\")\n\tend\n\tscoreFrameToWinText:SetText(\"\")\n\tscoreFrameToWin:Show()\nend\n\nlocal function HideEstimatedPoints()\n\tif scoreFrame1 and scoreFrame2 then\n\t\tscoreFrame1:Hide()\n\t\tscoreFrame2:Hide()\n\tend\nend\n\nlocal function HideBasesToWin()\n\tif scoreFrameToWin then\n\t\tscoreFrameToWin:Hide()\n\tend\nend\n\nmod:AddBoolOption(\"ShowEstimatedPoints\", true, nil, function()\n\tif mod.Options.ShowEstimatedPoints then\n\t\tShowEstimatedPoints()\n\telse\n\t\tHideEstimatedPoints()\n\tend\nend)\nmod:AddBoolOption(\"ShowBasesToWin\", true, nil, function()\n\tif mod.Options.ShowBasesToWin then\n\t\tShowBasesToWin()\n\telse\n\t\tHideBasesToWin()\n\tend\nend)\nmod:AddBoolOption(\"ShowFlagCarrier\", true, nil, function()\n\tif mod.Options.ShowFlagCarrier then\n\t\tShowFlagDisplay()\n\telse\n\t\tHideFlagDisplay()\n\tend\nend)\n\nlocal getGametime, updateGametime\ndo\n\tlocal time, GetTime, GetBattlefieldInstanceRunTime = time, GetTime, GetBattlefieldInstanceRunTime\n\tlocal gameTime = 0\n\n\tfunction updateGametime()\n\t\tgameTime = time()\n\tend\n\n\tfunction getGametime()\n\t\tif mod.Options.ShowRelativeGameTime then\n\t\t\tlocal sysTime = GetBattlefieldInstanceRunTime()\n\t\t\tif sysTime and sysTime > 0 then\n\t\t\t\treturn sysTime / 1000\n\t\t\tend\n\t\t\treturn time() - gameTime\n\t\tend\n\t\treturn GetTime()\n\tend\nend\n\nlocal subscribedMapID, prevAScore, prevHScore, warnAtEnd, hasWarns = 0, 0, 0, {}, false\nlocal numObjectives, objectivesStore\n\nfunction mod:SubscribeAssault(mapID, objectsCount)\n\tif self.Options.ShowEstimatedPoints then\n\t\tShowEstimatedPoints()\n\tend\n\tif self.Options.ShowBasesToWin then\n\t\tShowBasesToWin()\n\tend\n\tself:RegisterShortTermEvents(\n\t\t\"UPDATE_WORLD_STATES\",\n\t\t\"CHAT_MSG_BG_SYSTEM_ALLIANCE\",\n\t\t\"CHAT_MSG_BG_SYSTEM_HORDE\"\n\t)\n\tsubscribedMapID = mapID\n\tobjectivesStore = {}\n\tnumObjectives = objectsCount\n\tupdateGametime()\nend\n\nfunction mod:SubscribeFlags()\n\tif self.Options.ShowFlagCarrier then\n\t\tself:Schedule(0.5, ShowFlagDisplay) -- Applied 0.5s delay to give time for the game to create AlwaysUpFrame3DynamicIconButton. Added debug lines on the Flag frames creation to validate this delay is enough.\n\tend\n\tself:RegisterShortTermEvents(\n\t\t\"CHAT_MSG_BG_SYSTEM_ALLIANCE\",\n\t\t\"CHAT_MSG_BG_SYSTEM_HORDE\"\n\t)\nend\n\ndo\n\tlocal pairs = pairs\n\tlocal IsInInstance, SendAddonMessage, RequestBattlefieldScoreData = IsInInstance, SendAddonMessage, RequestBattlefieldScoreData\n\tlocal bgzone, currentBGzone, lastBGzone = false, 0, 0\n\n\tlocal function Init(self)\n\t\tlocal _, instanceType = IsInInstance()\n\t\tif instanceType == \"pvp\" or instanceType == \"arena\" then\n\t\t\tRequestBattlefieldScoreData() -- for Cross-Faction UnitFactionGroup\n\t\t\tif bgzone and currentBGzone ~= lastBGzone then\n\t\t\t\tlastBGzone = GetCurrentMapAreaID()\n\t\t\t\tif hasWarns then\n\t\t\t\t\tDBM:AddMsg(\"DBM-PvP missing data, please report to our discord.\")\n\t\t\t\t\tDBM:AddMsg(\"Battleground: \" .. (subscribedMapID or \"Unknown\"))\n\t\t\t\t\tfor k, v in pairs(warnAtEnd) do\n\t\t\t\t\t\tDBM:AddMsg(v .. \"x \" .. k)\n\t\t\t\t\tend\n\t\t\t\t\tDBM:AddMsg(\"Thank you for making DBM-PvP a better addon.\")\n\t\t\t\tend\n\t\t\t\tself:UnregisterShortTermEvents()\n\t\t\t\tself:Stop()\n\t\t\t\twarnAtEnd = {}\n\t\t\t\thasWarns = false\n\t\t\t\tHideEstimatedPoints()\n\t\t\t\tHideBasesToWin()\n\t\t\t\tHideFlagDisplay()\n\t\t\t\tsubscribedMapID = nil\n\t\t\t\tprevAScore, prevHScore = 0, 0\n\t\t\t\tif mod.Options.HideBossEmoteFrame then\n\t\t\t\t\tDBM:HideBlizzardEvents(0, true)\n\t\t\t\tend\n\t\t\t\tTT:OnEvent(\"PLAYER_ENTERING_WORLD\")\n\t\t\tend\n\t\t\tif not bgzone then\n\t\t\t\tSendAddonMessage(\"DBMv4-H\", \"\", \"BATTLEGROUND\")\n\t\t\t\tself:Schedule(3, DBM.RequestTimers, DBM)\n\t\t\t\tif self.Options.HideBossEmoteFrame then\n\t\t\t\t\tDBM:HideBlizzardEvents(1, true)\n\t\t\t\tend\n\t\t\t\tlastBGzone = GetCurrentMapAreaID()\n\t\t\tend\n\t\t\tbgzone = true\n\t\telseif bgzone then\n\t\t\tbgzone = false\n\t\t\tif hasWarns then\n\t\t\t\tDBM:AddMsg(\"DBM-PvP missing data, please report to our discord.\")\n\t\t\t\tDBM:AddMsg(\"Battleground: \" .. (subscribedMapID or \"Unknown\"))\n\t\t\t\tfor k, v in pairs(warnAtEnd) do\n\t\t\t\t\tDBM:AddMsg(v .. \"x \" .. k)\n\t\t\t\tend\n\t\t\t\tDBM:AddMsg(\"Thank you for making DBM-PvP a better addon.\")\n\t\t\tend\n\t\t\tself:UnregisterShortTermEvents()\n\t\t\tself:Stop()\n\t\t\twarnAtEnd = {}\n\t\t\thasWarns = false\n\t\t\tHideEstimatedPoints()\n\t\t\tHideBasesToWin()\n\t\t\tHideFlagDisplay()\n\t\t\tsubscribedMapID = nil\n\t\t\tprevAScore, prevHScore = 0, 0\n\t\t\tif mod.Options.HideBossEmoteFrame then\n\t\t\t\tDBM:HideBlizzardEvents(0, true)\n\t\t\tend\n\t\t\tTT:OnEvent(\"PLAYER_ENTERING_WORLD\")\n\t\tend\n\tend\n\n\tfunction mod:ZONE_CHANGED_NEW_AREA()\n\t\tcurrentBGzone = GetCurrentMapAreaID()\n\t\tInit(self)\n\tend\n\tmod.PLAYER_ENTERING_WORLD\t= mod.ZONE_CHANGED_NEW_AREA\n\tmod.OnInitialize\t\t\t= mod.ZONE_CHANGED_NEW_AREA\nend\n\nlocal trackedUnits, syncTrackedUnits, gatesHP = {}, {}, {}\ndo\n\tlocal pairs, twipe = pairs, table.wipe\n\tlocal UnitGUID, UnitHealth, UnitHealthMax, SendAddonMessage = UnitGUID, UnitHealth, UnitHealthMax, SendAddonMessage\n\tlocal healthScan, trackedUnitsCount, gatesEventsRegistered = nil, 0, false\n\n\tlocal function updateInfoFrame()\n\t\tlocal lines, sortedLines = {}, {}\n\t\tfor cid, health in pairs(syncTrackedUnits) do\n\t\t\tif trackedUnits[cid] then\n\t\t\t\tlines[trackedUnits[cid]] = health .. \"%\"\n\t\t\t\tsortedLines[#sortedLines + 1] = trackedUnits[cid]\n\t\t\tend\n\t\tend\n\t\treturn lines, sortedLines\n\tend\n\n\tlocal function healthScanFunc()\n\t\tlocal syncs, syncCount = {}, 0\n\t\tfor i = 1, 40 do\n\t\t\tif syncCount >= trackedUnitsCount then -- We've already scanned all our tracked units, exit out to save CPU\n\t\t\t\tbreak\n\t\t\tend\n\t\t\tlocal target = \"raid\" .. i .. \"target\"\n\t\t\tlocal guid = UnitGUID(target)\n\t\t\tif guid then\n\t\t\t\tlocal cid = mod:GetCIDFromGUID(guid)\n\t\t\t\tif trackedUnits[cid] and not syncs[cid] then\n\t\t\t\t\tsyncs[cid] = true\n\t\t\t\t\tsyncCount = syncCount + 1\n\t\t\t\t\tSendAddonMessage(\"DBM-PvP\", format(\"%s:%.1f:%d\", cid, UnitHealth(target) / UnitHealthMax(target) * 100, UnitHealth(target)), \"BATTLEGROUND\")\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction mod:TrackHealth(cid, name, gateHP)\n\t\tif not healthScan then\n\t\t\thealthScan = AceTimer:ScheduleRepeatingTimer(healthScanFunc, 1)\n\t\t\t-- workaround to register only once, instead of every TrackHealth call\n\t\t\tself:RegisterShortTermEvents(\"CHAT_MSG_ADDON\")\n\t\tend\n\t\tif gateHP and self.Options.ShowGatesHealth and not gatesEventsRegistered then\n\t\t\tgatesEventsRegistered = true\n\t\t\tself:RegisterShortTermEvents(\n\t\t\t\t\"SPELL_BUILDING_DAMAGE\",\n\t\t\t\t\"CHAT_MSG_RAID_BOSS_EMOTE\"\n\t\t\t)\n\t\tend\n\t\ttrackedUnits[cid] = L[name] or name\n\n\t\tif gateHP and self.Options.ShowGatesHealth then\n\t\t\tsyncTrackedUnits[cid] = 100 -- fills the infoFrame with all the gates\n\t\t\tgatesHP[cid] = {gateHP, gateHP, L[name] or name} -- {GateHealth, GateHealthMax, GatePOITexture}\n\t\tend\n\n\t\ttrackedUnitsCount = trackedUnitsCount + 1\n\t\tif not DBM.InfoFrame:IsShown() then\n\t\t\tDBM.InfoFrame:SetHeader((gateHP and self.Options.ShowGatesHealth and L.GatesHealthFrame) or L.InfoFrameHeader)\n\t\t\tDBM.InfoFrame:Show(42, \"function\", updateInfoFrame, false, false)\n\t\t\tDBM.InfoFrame:SetColumns(1)\n\t\tend\n\tend\n\n\tfunction mod:StopTrackHealth()\n\t\tif healthScan then\n\t\t\tAceTimer:CancelTimer(healthScan)\n\t\t\thealthScan = nil\n\t\tend\n\t\ttwipe(trackedUnits)\n\t\ttwipe(syncTrackedUnits)\n\t\tif gatesEventsRegistered then\n\t\t\ttwipe(gatesHP)\n\t\t\tgatesEventsRegistered = false\n\t\tend\n\t\tDBM.InfoFrame:Hide()\n\tend\n\n\tfunction mod:GatesHPReset()\n\t\tfor cid, _ in pairs(syncTrackedUnits) do\n\t\t\ttrackedUnits[cid] = gatesHP[cid][3] -- resets POI icon/name\n\t\t\tsyncTrackedUnits[cid] = 100 -- resets gate HP percentage\n\t\t\tgatesHP[cid][1] = gatesHP[cid][2] -- resets gate HP\n\t\t\tDBM:Debug(gatesHP[cid][3]..cid..\" reset with HP: \"..gatesHP[cid][1])\n\t\tend\n\tend\n\n\tfunction mod:SPELL_BUILDING_DAMAGE(sourceGUID, _, _, destGUID, destName, _, _, _, _, amount)\n\t\tif sourceGUID == nil or destName == nil or destGUID == nil or amount == nil then\n\t\t\treturn\n\t\tend\n\t\tlocal cId = DBM:GetCIDFromGUID(destGUID)\n\t\tif not gatesHP[cId] then\n\t\t\tDBM:Debug(\"SPELL_BUILDING_DAMAGE on ID: \"..cId..\" is not a tracked unit\")\n\t\t\tDBM:AddMsg(\"DBM-PvP missing gate data, please notify Zidras on Github or Discord - ID: \"..cId..\" and Name: \"..destName)\n\t\t\treturn\n\t\tend\n\t\tif gatesHP[cId][1] == nil then -- first hit\n\t\t\tif self.Options.ShowGatesHealth then\n\t\t\t\tif not DBM.InfoFrame:IsShown() then\n\t\t\t\t\tDBM.InfoFrame:Show(7, \"function\", updateInfoFrame, false, false, true)\n\t\t\t\telse\n\t\t\t\t\tDBM.InfoFrame:Update()\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\t\tif gatesHP[cId][1] > amount then\n\t\t\tgatesHP[cId][1] = gatesHP[cId][1] - amount\n\t\telse\n\t\t\tgatesHP[cId][1] = 0\n\t\tend\n\t\tif self.Options.ShowGatesHealth then\n\t\t\tDBM.InfoFrame:Update()\n\t\tend\n\t\tSendAddonMessage(\"DBM-PvP\", format(\"%s:%.1f:%d\", cId, gatesHP[cId][1] / gatesHP[cId][2] * 100, gatesHP[cId][1]), \"BATTLEGROUND\")\n\tend\n\n\tfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)\n\t\tif not DBM.InfoFrame:IsShown() then return end\n\t\t-- Gate of the Green Emerald\n\t\tif msg == L.GreenEmeraldAttacked then\n\t\t\ttrackedUnits[190722] = L.GreenEmeraldAttackedTex\n\t\telseif msg == L.GreenEmeraldDestroyed then\n\t\t\ttrackedUnits[190722] = L.GreenEmeraldDestroyedTex\n\t\t\tsyncTrackedUnits[190722] = 0\n\t\t\tgatesHP[190722][1] = 0\n\t\t-- Gate of the Blue Sapphire\n\t\telseif msg == L.BlueSapphireAttacked then\n\t\t\ttrackedUnits[190724] = L.BlueSapphireAttackedTex\n\t\telseif msg == L.BlueSapphireDestroyed then\n\t\t\ttrackedUnits[190724] = L.BlueSapphireDestroyedTex\n\t\t\tsyncTrackedUnits[190724] = 0\n\t\t\tgatesHP[190724][1] = 0\n\t\t-- Gate of the Purple Amethyst\n\t\telseif msg == L.PurpleAmethystAttacked then\n\t\t\ttrackedUnits[190723] = L.PurpleAmethystAttackedTex\n\t\telseif msg == L.PurpleAmethystDestroyed then\n\t\t\ttrackedUnits[190723] = L.PurpleAmethystDestroyedTex\n\t\t\tsyncTrackedUnits[190723] = 0\n\t\t\tgatesHP[190723][1] = 0\n\t\t-- Gate of the Red Sun\n\t\telseif msg == L.RedSunAttacked then\n\t\t\ttrackedUnits[190726] = L.RedSunAttackedTex\n\t\telseif msg == L.RedSunDestroyed then\n\t\t\ttrackedUnits[190726] = L.RedSunDestroyedTex\n\t\t\tsyncTrackedUnits[190726] = 0\n\t\t\tgatesHP[190726][1] = 0\n\t\t-- Gate of the Yellow Moon\n\t\telseif msg == L.YellowMoonAttacked then\n\t\t\ttrackedUnits[190727] = L.YellowMoonAttackedTex\n\t\telseif msg == L.YellowMoonDestroyed then\n\t\t\ttrackedUnits[190727] = L.YellowMoonDestroyedTex\n\t\t\tsyncTrackedUnits[190727] = 0\n\t\t\tgatesHP[190727][1] = 0\n\t\t-- Chamber of Ancient Relics\n\t\telseif msg == L.ChamberAncientRelicsAttacked then\n\t\t\ttrackedUnits[192549] = L.ChamberAncientRelicsAttackedTex\n\t\telseif msg == L.ChamberAncientRelicsDestroyed then\n\t\t\ttrackedUnits[192549] = L.ChamberAncientRelicsDestroyedTex\n\t\t\tsyncTrackedUnits[192549] = 0\n\t\t\tgatesHP[192549][1] = 0\n\t\tend\n\tend\n\n\tfunction mod:CHAT_MSG_ADDON(prefix, msg, channel, sender)\n\t\tif channel ~= \"BATTLEGROUND\" or (prefix ~= \"DBM-PvP\" and prefix ~= \"Capping\") then -- Lets listen to capping as well, for extra data.\n\t\t\treturn\n\t\tend\n\t\tlocal cid, hpPerc, hpRaw = strsplit(\":\", msg)\n\t\tlocal cId, hpPercN, hpRawN = tonumber(cid), tonumber(hpPerc), tonumber(hpRaw)\n\n\t\t-- Update gatesHP table, since only the person inside the vehicle sees the CLEU event\n\t\tif gatesHP[cId] and gatesHP[cId][1] > hpRawN then\n\t\t\tgatesHP[cId][1] = hpRawN\n\t\t\tDBM:Debug(\"GatesHP table synced. \"..gatesHP[cId][3]..\", cId: \"..cid..\", now has \"..gatesHP[cId][1]..\" HP\")\n\t\tend\n\n\t\tif gatesHP[cId] and syncTrackedUnits[cId] and tonumber(syncTrackedUnits[cId]) < hpPercN then\n\t\t\t--TO DO: sync gates on BG join\n\t\t\tDBM:Debug(sender..\" is not synced and is sending wrong information about cId: \"..cid..\". Received \".. hpPerc..\"% and \"..hpRaw..\" HP, while cached table already having \".. syncTrackedUnits[cId])\n\t\telse\n\t\t\tsyncTrackedUnits[cId] = hpPerc\n\t\tend\n\tend\nend\n\ndo\n\tlocal smatch = string.match\n\tlocal FACTION_ALLIANCE = FACTION_ALLIANCE\n\n\tlocal flagTimer\t\t\t= mod:NewTimer(8, \"TimerFlag\", \"Interface\\\\Icons\\\\INV_Banner_02\")\n\tlocal startTimer\t\t= mod:NewTimer(120, \"TimerStart\", GetBattlefieldFaction(\"player\") == \"Alliance\" and \"Interface\\\\Icons\\\\INV_BannerPVP_02\" or \"Interface\\\\Icons\\\\INV_BannerPVP_01\", nil, nil, nil, nil, nil, 1, 5)\n\tlocal timerShadow\t\t= mod:NewNextTimer(90, 34709)\n\n\tlocal function updateflagcarrier(self, msg)\n\t\tif not self.Options.TimerFlag then\n\t\t\treturn\n\t\tend\n\t\tif smatch(msg, L.FlagCaptured) or smatch(msg, L.FlagCapturedTC) or (L.FlagCapturedATC and smatch(msg, L.FlagCapturedATC)) or (L.FlagCapturedHTC and smatch(msg, L.FlagCapturedHTC)) or smatch(msg, L.ExprFlagCaptured) or smatch(msg, L.ExprFlagCapturedTC) then\n\t\t\tif smatch(msg, L.ExprFlagCaptured) or smatch(msg, L.ExprFlagCapturedTC) then -- Warsong Gulch\n\t\t\t\tflagTimer:Start(23)\n\t\t\telse\n\t\t\t\tflagTimer:Start()\n\t\t\tend\n\t\t\tif msg:find(FACTION_ALLIANCE) or msg:find(\"Alliance\") then -- workaround to Warmane's missing BG localizations\n\t\t\t\tflagTimer:SetColor({r=0, g=0, b=1})\n\t\t\t\tflagTimer:UpdateIcon(\"Interface\\\\Icons\\\\INV_BannerPVP_02\")\n\t\t\telse\n\t\t\t\tflagTimer:SetColor({r=1, g=0, b=0})\n\t\t\t\tflagTimer:UpdateIcon(\"Interface\\\\Icons\\\\INV_BannerPVP_01\")\n\t\t\tend\n\t\t\tvulnerableTimer:Cancel()\n\t\tend\n\tend\n\n\tfunction mod:CHAT_MSG_BG_SYSTEM_ALLIANCE(...)\n\t\tupdateflagcarrier(self, ...)\n\t\tif self.Options.ShowFlagCarrier then\n\t\t\tlocal msg, _, _, _, name = ...\n\t\t\tif smatch(msg, L.FlagTaken) or smatch(msg, L.FlagTakenTC) then -- Eye of the Storm\n\t\t\t\tlocal carrier = (name ~= \"\" and name) or smatch(msg, L.FlagTaken) or smatch(msg, L.FlagTakenTC) -- Missng arg5 on Warmane events\n\t\t\t\tif carrier then\n\t\t\t\t\tallyFlag = carrier\n\t\t\t\t\thordeFlag = nil\n\t\t\t\t\tUpdateFlagDisplay()\n\t\t\t\tend\n\t\t\telseif smatch(msg, L.ExprFlagPickUp) or smatch(msg, L.ExprFlagPickUpTC) or (L.ExprFlagPickUpHTC and smatch(msg, L.ExprFlagPickUpHTC)) then -- Warsong Gulch\n\t\t\t\tif name then\n\t\t\t\t\tallyFlag = name\n\t\t\t\t\tUpdateFlagDisplay()\n\t\t\t\tend\n\t\t\telseif smatch(msg, L.FlagDropped) or smatch(msg, L.FlagDroppedTC) then -- Eye of the Storm\n\t\t\t\tallyFlag = nil\n\t\t\t\thordeFlag = nil\n\t\t\t\tUpdateFlagDisplay()\n\t\t\telseif smatch(msg, L.ExprFlagDropped) or smatch(msg, L.ExprFlagDroppedTC) or (L.ExprFlagDroppedATC and smatch(msg, L.ExprFlagDroppedATC)) or (L.ExprFlagDroppedHTC and smatch(msg, L.ExprFlagDroppedHTC)) then -- Warsong Gulch\n\t\t\t\thordeFlag = nil\n\t\t\t\tUpdateFlagDisplay()\n\t\t\telseif smatch(msg, L.FlagCaptured) or smatch(msg, L.FlagCapturedTC) or (L.FlagCapturedATC and smatch(msg, L.FlagCapturedATC)) or smatch(msg, L.ExprFlagCaptured) or smatch(msg, L.ExprFlagCapturedTC) then\n\t\t\t\tallyFlag = nil\n\t\t\t\thordeFlag = nil\n\t\t\t\tUpdateFlagDisplay()\n\t\t\tend\n\t\tend\n\n\tend\n\n\tfunction mod:CHAT_MSG_BG_SYSTEM_HORDE(...)\n\t\tupdateflagcarrier(self, ...)\n\t\tif self.Options.ShowFlagCarrier then\n\t\t\tlocal msg, _, _, _, name = ...\n\t\t\tif smatch(msg, L.FlagTaken) or smatch(msg, L.FlagTakenTC) then -- Eye of the Storm\n\t\t\t\tlocal carrier = (name ~= \"\" and name) or smatch(msg, L.FlagTaken) or smatch(msg, L.FlagTakenTC) -- Missng arg5 on Warmane events\n\t\t\t\tif carrier then\n\t\t\t\t\tallyFlag = nil\n\t\t\t\t\thordeFlag = carrier\n\t\t\t\t\tUpdateFlagDisplay()\n\t\t\t\tend\n\t\t\telseif smatch(msg, L.ExprFlagPickUp) or smatch(msg, L.ExprFlagPickUpTC) or (L.ExprFlagPickUpATC and smatch(msg, L.ExprFlagPickUpATC)) then -- Warsong Gulch\n\t\t\t\tif name then\n\t\t\t\t\thordeFlag = name\n\t\t\t\t\tUpdateFlagDisplay()\n\t\t\t\tend\n\t\t\telseif smatch(msg, L.FlagDropped) or smatch(msg, L.FlagDroppedTC) then -- Eye of the Storm\n\t\t\t\tallyFlag = nil\n\t\t\t\thordeFlag = nil\n\t\t\t\tUpdateFlagDisplay()\n\t\t\telseif smatch(msg, L.ExprFlagDropped) or smatch(msg, L.ExprFlagDroppedTC) or (L.ExprFlagDroppedATC and smatch(msg, L.ExprFlagDroppedATC)) or (L.ExprFlagDroppedHTC and smatch(msg, L.ExprFlagDroppedHTC)) then -- Warsong Gulch\n\t\t\t\tallyFlag = nil\n\t\t\t\tUpdateFlagDisplay()\n\t\t\telseif smatch(msg, L.FlagCaptured) or smatch(msg, L.FlagCapturedTC) or (L.FlagCapturedHTC and smatch(msg, L.FlagCapturedHTC)) or smatch(msg, L.ExprFlagCaptured) or smatch(msg, L.ExprFlagCapturedTC) then\n\t\t\t\tallyFlag = nil\n\t\t\t\thordeFlag = nil\n\t\t\t\tUpdateFlagDisplay()\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction mod:CHAT_MSG_BG_SYSTEM_NEUTRAL(msg)\n\t\tTT:OnEvent(\"CHAT_MSG_BG_SYSTEM_NEUTRAL\", msg) -- TimerTracker\n\t\tif msg == L.BGStart120 or msg == L.BgStart120TC or msg == L.BgStart120Alterac or msg == L.BgStart120Arathi or msg == L.BgStart120EotS or msg == L.BgStart120IoConquest or msg == L.BgStart120SotA or msg == L.BgStart120Warsong then\n\t\t\tstartTimer:Update(0, 120)\n\t\t\tstartTimer:UpdateIcon(GetBattlefieldFaction(\"player\") == \"Alliance\" and \"Interface\\\\Icons\\\\INV_BannerPVP_02\" or \"Interface\\\\Icons\\\\INV_BannerPVP_01\")\n\t\telseif msg == L.BgStart60TC or msg == L.BgStart60OLD or  msg == L.BgStart60Alterac or msg == L.BgStart60AlteracTC or msg == L.BgStart60Arathi or msg == L.BgStart60ArathiOLD or msg == L.BgStart60EotS or msg == L.BgStart60IoConquest or msg == L.BgStart60SotA or msg == L.BgStart60SotAOLD or msg == L.BgStart60SotA2 or msg == L.BgStart60SotA2TC or msg == L.BgStart60Warsong or msg == L.BgStart60WarsongTC then\n\t\t\tstartTimer:Update(60, 120)\n\t\t\tstartTimer:UpdateIcon(GetBattlefieldFaction(\"player\") == \"Alliance\" and \"Interface\\\\Icons\\\\INV_BannerPVP_02\" or \"Interface\\\\Icons\\\\INV_BannerPVP_01\")\n\t\t\tif msg == L.BgStart60SotA2 or msg == L.BgStart60SotA2TC then\n\t\t\t\tif DBM.InfoFrame:IsShown() then\n\t\t\t\t\tself:GatesHPReset()\n\t\t\t\tend\n\t\t\tend\n\t\telseif msg == L.BgStart30TC or msg == L.BgStart30OLD or msg == L.BgStart30Alterac or msg == L.BgStart30AlteracTC or msg == L.BgStart30Arathi or msg == L.BgStart30ArathiOLD or msg == L.BgStart30EotS or msg == L.BgStart30IoConquest or msg == L.BgStart30SotA or msg == L.BgStart30SotAOLD or msg == L.BgStart30SotA2 or msg == L.BgStart30SotA2TC or msg == L.BgStart30Warsong or msg == L.BgStart30WarsongTC then\n\t\t\tstartTimer:Update(90, 120)\n\t\t\tstartTimer:UpdateIcon(GetBattlefieldFaction(\"player\") == \"Alliance\" and \"Interface\\\\Icons\\\\INV_BannerPVP_02\" or \"Interface\\\\Icons\\\\INV_BannerPVP_01\")\n\t\telseif msg == L.Vulnerable1 or msg:find(L.Vulnerable1) then\n\t\t\tvulnerableTimer:Start(300)\n\t\t\tvulnerableTimer:UpdateIcon(46393)\n\t\t-- Arenas\n\t\telseif msg == L.Start60 or msg == L.Start60TC then\n\t\t\tstartTimer:Start(60)\n\t\telseif msg == L.Start30 or msg == L.Start30TC then\n\t\t\tstartTimer:Update(30, 60)\n\t\telseif msg == L.Start15 or msg == L.Start15TC then\n\t\t\tstartTimer:Update(45, 60)\n\t\t\ttimerShadow:Schedule(15)\n\t\telseif smatch(msg, L.FlagReset) or smatch(msg, L.FlagResetTC) then\n\t\t\tvulnerableTimer:Cancel()\n\t\t\tif self.Options.ShowFlagCarrier then\n\t\t\t\tallyFlag = nil\n\t\t\t\thordeFlag = nil\n\t\t\t\tUpdateFlagDisplay()\n\t\t\tend\n\t\t-- Isle of Conquest Gates\n\t\telseif self.Options.ShowGatesHealth then\n\t\t\t-- Horde Front Gate\n\t\t\tif msg == L.HordeGateFrontDestroyed or msg == L.HordeGateFrontDestroyedTC then\n\t\t\t\ttrackedUnits[64422] = L.HordeGateFrontDestroyedTex\n\t\t\t\tsyncTrackedUnits[64422] = 0\n\t\t\t\tgatesHP[64422][1] = 0\n\t\t\t-- Horde West Gate\n\t\t\telseif msg == L.HordeGateWestDestroyed or msg == L.HordeGateWestDestroyedTC then\n\t\t\t\ttrackedUnits[64423] = L.HordeGateWestDestroyedTex\n\t\t\t\tsyncTrackedUnits[64423] = 0\n\t\t\t\tgatesHP[64423][1] = 0\n\t\t\t-- Horde East Gate\n\t\t\telseif msg == L.HordeGateEastDestroyed or msg == L.HordeGateEastDestroyedTC then\n\t\t\t\ttrackedUnits[64424] = L.HordeGateEastDestroyedTex\n\t\t\t\tsyncTrackedUnits[64424] = 0\n\t\t\t\tgatesHP[64424][1] = 0\n\t\t\t-- Alliance East Gate\n\t\t\telseif msg == L.AllianceGateEastDestroyed or msg == L.AllianceGateEastDestroyedTC then\n\t\t\t\ttrackedUnits[64626] = L.AllianceGateEastDestroyedTex\n\t\t\t\tsyncTrackedUnits[64626] = 0\n\t\t\t\tgatesHP[64626][1] = 0\n\t\t\t-- Alliance West Gate\n\t\t\telseif msg == L.AllianceGateWestDestroyed or msg == L.AllianceGateWestDestroyedTC then\n\t\t\t\ttrackedUnits[64627] = L.AllianceGateWestDestroyedTex\n\t\t\t\tsyncTrackedUnits[64627] = 0\n\t\t\t\tgatesHP[64627][1] = 0\n\t\t\t-- Alliance Front Gate\n\t\t\telseif msg == L.AllianceGateFrontDestroyed or msg == L.AllianceGateFrontDestroyedTC then\n\t\t\t\ttrackedUnits[64628] = L.AllianceGateFrontDestroyedTex\n\t\t\t\tsyncTrackedUnits[64628] = 0\n\t\t\t\tgatesHP[64628][1] = 0\n\t\t\tend\n\t\tend\n\tend\nend\n\ndo\n\tlocal pairs, select, tonumber, mfloor, mmin, smatch = pairs, select, tonumber, math.floor, math.min, string.match\n\tlocal GetMapLandmarkInfo, GetNumMapLandmarks, GetWorldStateUIInfo = GetMapLandmarkInfo, GetNumMapLandmarks, GetWorldStateUIInfo\n\tlocal FACTION_HORDE, FACTION_ALLIANCE = FACTION_HORDE, FACTION_ALLIANCE\n\n\tlocal winTimer = mod:NewTimer(30, \"TimerWin\", GetBattlefieldFaction(\"player\") == \"Alliance\" and \"Interface\\\\Icons\\\\INV_BannerPVP_02\" or \"Interface\\\\Icons\\\\INV_BannerPVP_01\")\n\tlocal resourcesPerSec = {\n\t\t[4] = { -- Eye of the Storm\n\t\t\t[0] = 1e-300,\n\t\t\t[1] = 0.5,\n\t\t\t[2] = 1,\n\t\t\t[3] = 2,\n\t\t\t[4] = 5\n\t\t},\n\t\t[5] = { -- Arathi Basin/Isle of Conquest\n\t\t\t[0] = 1e-300,\n\t\t\t[1] = 10/12,\n\t\t\t[2] = 10/9,\n\t\t\t[3] = 10/6,\n\t\t\t[4] = 10/3,\n\t\t\t[5] = 30\n\t\t}\n\t}\n\n\tfunction mod:UpdateWinTimer(maxScore, allianceScore, hordeScore, allianceBases, hordeBases)\n\t\tlocal resPerSec = resourcesPerSec[numObjectives]\n\t\t-- Start debug\n\t\tif prevAScore ~= allianceScore then\n\t\t\tif resPerSec[allianceBases] == 1000 then\n\t\t\t\tlocal key = format(\"%d,%d\", allianceScore - prevAScore, allianceBases)\n\t\t\t\tlocal warnCount = warnAtEnd[key] or 0\n\t\t\t\twarnAtEnd[key] = warnCount + 1\n\t\t\t\tif warnCount > 2 then\n\t\t\t\t\thasWarns = true\n\t\t\t\tend\n\t\t\tend\n\t\t\tif allianceScore < maxScore then\n\t\t\t\tDBM:Debug(format(\"Alliance: +%d (%d)\", allianceScore - prevAScore, allianceBases), 3)\n\t\t\tend\n\t\t\tprevAScore = allianceScore\n\t\tend\n\t\tif prevHScore ~= hordeScore then\n\t\t\tif resPerSec[hordeBases] == 1000 then\n\t\t\t\tlocal key = format(\"%d,%d\", hordeScore - prevHScore, hordeBases)\n\t\t\t\tlocal warnCount = warnAtEnd[key] or 0\n\t\t\t\twarnAtEnd[key] = warnCount + 1\n\t\t\t\tif warnCount > 2 then\n\t\t\t\t\thasWarns = true\n\t\t\t\tend\n\t\t\tend\n\t\t\tif hordeScore < maxScore then\n\t\t\t\tDBM:Debug(format(\"Horde: +%d (%d)\", hordeScore - prevHScore, hordeBases), 3)\n\t\t\tend\n\t\t\tprevHScore = hordeScore\n\t\tend\n\t\t-- End debug\n\t\tlocal gameTime = getGametime()\n\t\tlocal allyTime = mfloor(mmin(maxScore, (maxScore - allianceScore) / resPerSec[allianceBases]))\n\t\tlocal hordeTime = mfloor(mmin(maxScore, (maxScore - hordeScore) / resPerSec[hordeBases]))\n\t\tif allyTime == hordeTime or allyTime == 0 or hordeTime == 0 then\n\t\t\twinTimer:Stop()\n\t\t\tif scoreFrame1Text then\n\t\t\t\tscoreFrame1Text:SetText(\"\")\n\t\t\t\tscoreFrame2Text:SetText(\"\")\n\t\t\tend\n\t\telseif allyTime > hordeTime then\n\t\t\tif scoreFrame1Text and scoreFrame2Text then\n\t\t\t\tscoreFrame1Text:SetText(\"(\" .. mfloor(mfloor(((hordeTime * resPerSec[allianceBases]) + allianceScore) / 10) * 10) .. \")\")\n\t\t\t\tscoreFrame2Text:SetText(\"(\" .. maxScore .. \")\")\n\t\t\tend\n\t\t\twinTimer:Update(gameTime, gameTime + hordeTime)\n\t\t\twinTimer:DisableEnlarge()\n\t\t\twinTimer:UpdateName(L.WinBarText:format(FACTION_HORDE))\n\t\t\twinTimer:SetColor({r=1, g=0, b=0})\n\t\t\twinTimer:UpdateIcon(\"Interface\\\\Icons\\\\INV_BannerPVP_01\")\n\t\telseif hordeTime > allyTime then\n\t\t\tif scoreFrame1Text and scoreFrame2Text then\n\t\t\t\tscoreFrame2Text:SetText(\"(\" .. mfloor(mfloor(((allyTime * resPerSec[hordeBases]) + hordeScore) / 10) * 10) .. \")\")\n\t\t\t\tscoreFrame1Text:SetText(\"(\" .. maxScore .. \")\")\n\t\t\tend\n\t\t\twinTimer:Update(gameTime, gameTime + allyTime)\n\t\t\twinTimer:DisableEnlarge()\n\t\t\twinTimer:UpdateName(L.WinBarText:format(FACTION_ALLIANCE))\n\t\t\twinTimer:SetColor({r=0, g=0, b=1})\n\t\t\twinTimer:UpdateIcon(\"Interface\\\\Icons\\\\INV_BannerPVP_02\")\n\t\tend\n\t\tif self.Options.ShowBasesToWin then\n\t\t\tlocal friendlyLast, enemyLast, friendlyBases, enemyBases\n\t\t\tif GetBattlefieldFaction(\"player\") == \"Alliance\" then\n\t\t\t\tfriendlyLast = allianceScore\n\t\t\t\tenemyLast = hordeScore\n\t\t\t\tfriendlyBases = allianceBases\n\t\t\t\tenemyBases = hordeBases\n\t\t\telse\n\t\t\t\tfriendlyLast = hordeScore\n\t\t\t\tenemyLast = allianceScore\n\t\t\t\tfriendlyBases = hordeBases\n\t\t\t\tenemyBases = allianceBases\n\t\t\tend\n\t\t\tif (maxScore - friendlyLast) / resPerSec[friendlyBases] > (maxScore - enemyLast) / resPerSec[enemyBases] then\n\t\t\t\tlocal enemyTime, friendlyTime, baseLowest, enemyFinal, friendlyFinal\n\t\t\t\tfor i = 1, numObjectives do\n\t\t\t\t\tenemyTime = (maxScore - enemyLast) / resPerSec[numObjectives - i]\n\t\t\t\t\tfriendlyTime = (maxScore - friendlyLast) / resPerSec[i]\n\t\t\t\t\tbaseLowest = friendlyTime < enemyTime and friendlyTime or enemyTime\n\t\t\t\t\tenemyFinal = mfloor((enemyLast + mfloor(baseLowest * resPerSec[numObjectives - i] + 0.5)) / 10) * 10\n\t\t\t\t\tfriendlyFinal = mfloor((friendlyLast + mfloor(baseLowest * resPerSec[i] + 0.5)) / 10) * 10\n\t\t\t\t\tif friendlyFinal >= maxScore and enemyFinal < maxScore then\n\t\t\t\t\t\tscoreFrameToWinText:SetText(L.BasesToWin:format(i))\n\t\t\t\t\t\tbreak\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tscoreFrameToWinText:SetText(\"\")\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal overrideTimers = {\n\t\t-- Alterac Valley\n\t\t[402] = 240\n\t}\n\tlocal State = {\n\t\t[\"ALLY_CONTESTED\"]\t\t= 1,\n\t\t[\"ALLY_CONTROLLED\"]\t\t= 2,\n\t\t[\"HORDE_CONTESTED\"]\t\t= 3,\n\t\t[\"HORDE_CONTROLLED\"]\t= 4\n\t}\n\tlocal icons = {\n\t\t-- Graveyard\n\t\t[4]\t\t\t\t\t\t\t= State.ALLY_CONTESTED,\n\t\t[15]\t\t\t\t\t\t= State.ALLY_CONTROLLED,\n\t\t[14]\t\t\t\t\t\t= State.HORDE_CONTESTED,\n\t\t[13]\t\t\t\t\t\t= State.HORDE_CONTROLLED,\n\t\t-- Tower/Lighthouse\n\t\t[9]\t\t\t\t\t\t\t= State.ALLY_CONTESTED,\n\t\t[11]\t\t\t\t\t\t= State.ALLY_CONTROLLED,\n\t\t[12]\t\t\t\t\t\t= State.HORDE_CONTESTED,\n\t\t[10]\t\t\t\t\t\t= State.HORDE_CONTROLLED,\n\t\t-- Mine/Quarry\n\t\t[17]\t\t\t\t\t\t= State.ALLY_CONTESTED,\n\t\t[18]\t\t\t\t\t\t= State.ALLY_CONTROLLED,\n\t\t[19]\t\t\t\t\t\t= State.HORDE_CONTESTED,\n\t\t[20]\t\t\t\t\t\t= State.HORDE_CONTROLLED,\n\t\t-- Lumber\n\t\t[22]\t\t\t\t\t\t= State.ALLY_CONTESTED,\n\t\t[23]\t\t\t\t\t\t= State.ALLY_CONTROLLED,\n\t\t[24]\t\t\t\t\t\t= State.HORDE_CONTESTED,\n\t\t[25]\t\t\t\t\t\t= State.HORDE_CONTROLLED,\n\t\t-- Blacksmith/Waterworks\n\t\t[27]\t\t\t\t\t\t= State.ALLY_CONTESTED,\n\t\t[28]\t\t\t\t\t\t= State.ALLY_CONTROLLED,\n\t\t[29]\t\t\t\t\t\t= State.HORDE_CONTESTED,\n\t\t[30]\t\t\t\t\t\t= State.HORDE_CONTROLLED,\n\t\t-- Farm\n\t\t[32]\t\t\t\t\t\t= State.ALLY_CONTESTED,\n\t\t[33]\t\t\t\t\t\t= State.ALLY_CONTROLLED,\n\t\t[34]\t\t\t\t\t\t= State.HORDE_CONTESTED,\n\t\t[35]\t\t\t\t\t\t= State.HORDE_CONTROLLED,\n\t\t-- Stables\n\t\t[37]\t\t\t\t\t\t= State.ALLY_CONTESTED,\n\t\t[38]\t\t\t\t\t\t= State.ALLY_CONTROLLED,\n\t\t[39]\t\t\t\t\t\t= State.HORDE_CONTESTED,\n\t\t[40]\t\t\t\t\t\t= State.HORDE_CONTROLLED,\n\t\t-- Workshop\n\t\t[137]\t\t\t\t\t\t= State.ALLY_CONTESTED,\n\t\t[138]\t\t\t\t\t\t= State.ALLY_CONTROLLED,\n\t\t[139]\t\t\t\t\t\t= State.HORDE_CONTESTED,\n\t\t[140]\t\t\t\t\t\t= State.HORDE_CONTROLLED,\n\t\t-- Hangar\n\t\t[142]\t\t\t\t\t\t= State.ALLY_CONTESTED,\n\t\t[143]\t\t\t\t\t\t= State.ALLY_CONTROLLED,\n\t\t[144]\t\t\t\t\t\t= State.HORDE_CONTESTED,\n\t\t[145]\t\t\t\t\t\t= State.HORDE_CONTROLLED,\n\t\t-- Docks\n\t\t[147]\t\t\t\t\t\t= State.ALLY_CONTESTED,\n\t\t[148]\t\t\t\t\t\t= State.ALLY_CONTROLLED,\n\t\t[149]\t\t\t\t\t\t= State.HORDE_CONTESTED,\n\t\t[150]\t\t\t\t\t\t= State.HORDE_CONTROLLED,\n\t\t-- Refinery\n\t\t[152]\t\t\t\t\t\t= State.ALLY_CONTESTED,\n\t\t[153]\t\t\t\t\t\t= State.ALLY_CONTROLLED,\n\t\t[154]\t\t\t\t\t\t= State.HORDE_CONTESTED,\n\t\t[155]\t\t\t\t\t\t= State.HORDE_CONTROLLED,\n\t\t-- Market\n\t\t[208]\t\t\t\t\t\t= State.ALLY_CONTESTED,\n\t\t[205]\t\t\t\t\t\t= State.ALLY_CONTROLLED,\n\t\t[209]\t\t\t\t\t\t= State.HORDE_CONTESTED,\n\t\t[206]\t\t\t\t\t\t= State.HORDE_CONTROLLED,\n\t\t-- Ruins\n\t\t[213]\t\t\t\t\t\t= State.ALLY_CONTESTED,\n\t\t[210]\t\t\t\t\t\t= State.ALLY_CONTROLLED,\n\t\t[214]\t\t\t\t\t\t= State.HORDE_CONTESTED,\n\t\t[211]\t\t\t\t\t\t= State.HORDE_CONTROLLED,\n\t\t-- Shrine\n\t\t[218]\t\t\t\t\t\t= State.ALLY_CONTESTED,\n\t\t[215]\t\t\t\t\t\t= State.ALLY_CONTROLLED,\n\t\t[219]\t\t\t\t\t\t= State.HORDE_CONTESTED,\n\t\t[216]\t\t\t\t\t\t= State.HORDE_CONTROLLED\n\t}\n\tlocal capTimer = mod:NewTimer(60, \"TimerCap\", \"Interface\\\\AddOns\\\\DBM-PvP\\\\Textures\\\\Spell_Misc_HellifrePVPHonorHoldFavor\")\n\n\tfunction mod:UPDATE_WORLD_STATES()\n\t\tlocal allyBases, hordeBases = 0, 0\n\t\tif subscribedMapID ~= 0 then\n\t\t\tfor i = 1, GetNumMapLandmarks(), 1 do\n\t\t\t\tlocal infoName, _, infoTexture = GetMapLandmarkInfo(i)\n\t\t\t\tif infoName then\n\t\t\t\t\t-- work-around for a bug in the german localization of WoW: the graveyard seems to change its name depending on the state\n\t\t\t\t\tif infoName == \"Friedhof des Sturmlanzen\" then\n\t\t\t\t\t\tinfoName = \"Friedhof der Sturmlanzen\"\n\t\t\t\t\tend\n\t\t\t\t\tlocal isAllyCapping, isHordeCapping\n\t\t\t\t\tif infoTexture then\n\t\t\t\t\t\tisAllyCapping = icons[infoTexture] == State.ALLY_CONTESTED\n\t\t\t\t\t\tisHordeCapping = icons[infoTexture] == State.HORDE_CONTESTED\n\t\t\t\t\tend\n\t\t\t\t\tif objectivesStore[infoName] ~= infoTexture then\n\t\t\t\t\t\tcapTimer:Stop(infoName)\n\t\t\t\t\t\tobjectivesStore[infoName] = infoTexture\n\t\t\t\t\t\tif isAllyCapping or isHordeCapping then\n\t\t\t\t\t\t\tcapTimer:Start(overrideTimers[subscribedMapID] or 60, infoName)\n\t\t\t\t\t\t\tif isAllyCapping then\n\t\t\t\t\t\t\t\tcapTimer:SetColor({r=0, g=0, b=1}, infoName)\n\t\t\t\t\t\t\t\tcapTimer:UpdateIcon(\"Interface\\\\Icons\\\\INV_BannerPVP_02\", infoName)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tcapTimer:SetColor({r=1, g=0, b=0}, infoName)\n\t\t\t\t\t\t\t\tcapTimer:UpdateIcon(\"Interface\\\\Icons\\\\INV_BannerPVP_01\", infoName)\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tif subscribedMapID == 462 or subscribedMapID == 483 then -- Arathi Basin | Eye of the Storm\n\t\t\t\tfor _, v in pairs(objectivesStore) do\n\t\t\t\t\tif icons[v] == State.ALLY_CONTROLLED then\n\t\t\t\t\t\tallyBases = allyBases + 1\n\t\t\t\t\telseif icons[v] == State.HORDE_CONTROLLED then\n\t\t\t\t\t\thordeBases = hordeBases + 1\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\t\tlocal isEotS = subscribedMapID == 483\n\t\t\t\tlocal allyIndex = isEotS and 2 or 1\n\t\t\t\tlocal hordeIndex = isEotS and 3 or 2\n\n\t\t\t\t-- ex ab: \"Bases: 0 Resources: 0/1600\"\n\t\t\t\tlocal allyScoreText = select(3, GetWorldStateUIInfo(allyIndex)) or \"\"\n\t\t\t\tlocal hordeScoreText = select(3, GetWorldStateUIInfo(hordeIndex)) or \"\"\n\n\t\t\t\tlocal allyCurrent, maxResources = smatch(allyScoreText, \"(%d+)/(%d+)\")\n\t\t\t\tallyCurrent = tonumber(allyCurrent) or 0\n\t\t\t\tmaxResources = tonumber(maxResources) or 1600\n\n\t\t\t\tlocal hordeCurrent = smatch(hordeScoreText, \"(%d+)/\")\n\t\t\t\thordeCurrent = tonumber(hordeCurrent) or 0\n\n\t\t\t\tself:UpdateWinTimer(maxResources, allyCurrent, hordeCurrent, allyBases, hordeBases)\n\t\t\tend\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-PvP/localization.cn.lua",
    "content": "﻿if GetLocale() ~= \"zhCN\" then return end\n\nlocal L\n\n--------------------------\n--  General BG Options  --\n--------------------------\nL = DBM:GetModLocalization(\"PvPGeneral\")\n\nL:SetGeneralLocalization({\n\tname\t= \"常规设置\"\n})\n\nL:SetTimerLocalization({\n\tTimerFlag\t\t= \"重置\",\n\tTimerShadow\t\t= \"暗影之眼\",\n\tTimerStart\t\t= \"显示开始计时\",\n\tTimerWin\t\t= \"显示获胜计时\"\n})\n\nL:SetOptionLocalization({\n\tAutoSpirit\t\t\t= \"自动释放灵魂\",\n\tColorByClass\t\t= \"得分板上玩家按职业着色\",\n\tHideBossEmoteFrame\t= \"在战场时隐藏团队首领表情框体/公会信息等\",\n\tShowBasesToWin\t\t= \"显示获胜需要占领的资源点\",\n\tShowEstimatedPoints\t= \"显示战斗开始/结束时双方资源统计\",\n\tShowFlagCarrier\t\t= \"显示旗帜携带者\",\n\tShowGatesHealth\t\t= \"生命值框：城门破损状况（中途加入战场，该数据可能不准确）\",\n\tShowRelativeGameTime= \"计时条：战场开始到获胜的计时（如果禁用，则计时条总是看起来满了）\",\n\tTimerCap\t\t\t= \"计时条：占领资源\",\n\tTimerFlag\t\t\t= \"计时条：旗帜重置\",\n\tTimerShadow\t\t\t= \"计时条：暗影之眼\",\n\tTimerStart\t\t\t= \"显示开始计时\",\n\tTimerWin\t\t\t= \"计时条：胜利时间\"\n})\n\nL:SetMiscLocalization({\n\t--BG 2 minutes\n\tBgStart120TC\t\t= \"战斗将在2分钟后开始！\",\n\t--BG 1 minute\n\tBgStart60TC\t\t\t= \"战斗将在1分钟后开始！\",\n\tBgStart60AlteracTC\t= \"奥特兰克山谷的战斗将在1分钟之后开始。\",\n\tBgStart60SotA2TC\t= \"远古海滩的第2轮比赛将在1分钟后开始。\",\n\tBgStart60WarsongTC\t= \"战歌峡谷战斗将在1分钟内开始。\",\n\t-- BG 30 seconds\n\tBgStart30TC\t\t\t= \"战斗将在30秒后开始！\",\n\tBgStart30AlteracTC\t= \"奥特兰克山谷的战斗将在30秒之后开始。\",\n\tBgStart30SotA2TC\t= \"第2轮比赛将在30秒后开始。备战！\",\n\tBgStart30WarsongTC\t= \"战歌峡谷战斗将在30秒钟内开始。做好准备！\",\n\t--\n\tArenaInvite\t\t\t= \"竞技场邀请\",\n\tStart60TC\t\t\t= \"竞技场战斗将在一分钟后开始！\",\n\tStart30TC\t\t\t= \"竞技场战斗将在三十秒后开始！\",\n\tStart15TC\t\t\t= \"竞技场战斗将在十五秒后开始！\",\n\tBasesToWin\t\t\t= \"胜利需要占领资源点: %d\",\n\tWinBarText\t\t\t= \"%s 获胜\",\n\t-- Flag carrying system\n\tFlag\t\t\t\t= \"旗帜\",\n\tFlagResetTC\t\t\t= \"旗帜被重新放置了。\",\n\tFlagTakenTC\t\t\t= \"(.+) 夺走了旗帜！\",\n\tFlagCapturedTC\t\t= \".+夺得了旗帜！\",\n\tFlagDroppedTC\t\t= \"旗帜被扔掉了！\",\n\t--\n\tExprFlagPickUpATC\t= \"联盟的旗帜被(.+)拔起了\",\n\tExprFlagPickUpHTC\t= \"(.+)拾起了部落军旗！\",\n\tExprFlagCapturedTC\t= \"(.+)获得了.+军旗！\",\n\tExprFlagReturnTC\t= \"(.+)将.+军旗放回到旗座上了！\",\n\tExprFlagDroppedATC\t= \"联盟的旗帜被(.+)丢掉了！\", -- Alliance TrinityCore string was too different to use patterns\n\tExprFlagDroppedHTC\t= \"(.+)掉落了部落军旗！\", -- Horde\n\tVulnerable1\t\t\t= \"旗帜携带者已变的容易受到攻击！\",\n\tVulnerable2\t\t\t= \"旗帜携带者越来越容易受到攻击！\",\n\t-- Gates\n\tGatesHealthFrame\t\t\t\t= \"城门破损状况\",\n\tHordeGateFront\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t 前门\",\n\tHordeGateFrontDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t 前门\",\n\tHordeGateWest\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t 西大门\",\n\tHordeGateWestDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t 西大门\",\n\tHordeGateEast\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t 东大门\",\n\tHordeGateEastDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t 东大门\",\n\tAllianceGateFront\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t 前门\",\n\tAllianceGateFrontDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t 前门\",\n\tAllianceGateWest\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t 西大门\",\n\tAllianceGateWestDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t 西大门\",\n\tAllianceGateEast\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t 东大门\",\n\tAllianceGateEastDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t 东大门\",\n-- Strands of the Ancients Gates emotes\n\tGreenEmeraldAttacked\t\t\t= \"翡翠之门遭到攻击！\",\n\tGreenEmeraldDestroyed\t\t\t= \"翡翠之门被摧毁了！\",\n\tBlueSapphireAttacked\t\t\t= \"蓝玉之门遭到攻击！\",\n\tBlueSapphireDestroyed\t\t\t= \"蓝玉之门被摧毁了！\",\n\tPurpleAmethystAttacked\t\t\t= \"紫晶之门遭到攻击！\",\n\tPurpleAmethystDestroyed\t\t\t= \"紫晶之门被摧毁了！\",\n\tRedSunAttacked\t\t\t\t\t= \"红日之门遭到攻击！\",\n\tRedSunDestroyed\t\t\t\t\t= \"红日之门被摧毁了！\",\n\tYellowMoonAttacked\t\t\t\t= \"金月之门遭到攻击！\",\n\tYellowMoonDestroyed\t\t\t\t= \"金月之门被摧毁了！\",\n\tChamberAncientRelicsAttacked\t= \"宝库遭到了攻击！\",\n\tChamberAncientRelicsDestroyed\t= \"宝库被攻破了！泰坦圣物失去了保护！\",\n\t-- Isle of Conquest Gates CHAT_MSG_BG_SYSTEM_NEUTRAL messages\n\tHordeGateFrontDestroyedTC\t\t= \"部落要塞的前门被摧毁了！\",\n\tHordeGateWestDestroyedTC\t\t= \"部落要塞的西门被摧毁了！\",\n\tHordeGateEastDestroyedTC\t\t= \"部落要塞的东门被摧毁了！\",\n\tAllianceGateFrontDestroyedTC\t= \"联盟要塞的前门被摧毁了！\",\n\tAllianceGateWestDestroyedTC\t\t= \"联盟要塞的西门被摧毁了！\",\n\tAllianceGateEastDestroyedTC\t\t= \"联盟要塞的东门被摧毁了！\",\n})\n\n\n----------------------\n--  Alterac Valley  --\n----------------------\nL = DBM:GetModLocalization(\"AlteracValley\")\n\nL:SetGeneralLocalization({\n\tname = \"奥特兰克山谷\"\n})\n\nL:SetOptionLocalization({\n\tAutoTurnIn\t= \"自动递交任务物品\"\n})\n\n--------------------\n--  Arathi Basin  --\n--------------------\nL = DBM:GetModLocalization(\"ArathiBasin\")\n\nL:SetGeneralLocalization({\n\tname = \"阿拉希盆地\"\n})\n\n------------------------\n--  Eye of the Storm  --\n------------------------\nL = DBM:GetModLocalization(\"EyeoftheStorm\")\n\nL:SetGeneralLocalization({\n\tname = \"风暴之眼\"\n})\n\n---------------------\n--  Warsong Gulch  --\n---------------------\nL = DBM:GetModLocalization(\"WarsongGulch\")\n\nL:SetGeneralLocalization({\n\tname = \"战歌峡谷\"\n})\n\n------------------------------\n--  Strand of the Ancients  --\n------------------------------\nL = DBM:GetModLocalization(\"StrandoftheAncients\")\n\nL:SetGeneralLocalization({\n\tname = \"远古海滩\"\n})\n\n------------------------\n--  Isle of Conquest  --\n------------------------\nL = DBM:GetModLocalization(\"IsleofConquest\")\n\nL:SetWarningLocalization({\n\tWarnSiegeEngine\t\t= \"攻城机具准备好了！\",\n\tWarnSiegeEngineSoon\t= \"10秒后 攻城机具就绪\"\n})\n\nL:SetTimerLocalization({\n\tTimerSiegeEngine\t= \"攻城机具修复\"\n})\n\nL:SetOptionLocalization({\n\tTimerSiegeEngine\t= \"计时条：攻城器的建造\",\n\tWarnSiegeEngine\t\t= \"警报：攻城器准备就绪\",\n\tWarnSiegeEngineSoon\t= \"预警：攻城器准备就绪\"\n})\n\nL:SetMiscLocalization({\n\tSiegeEngine\t\t\t\t= \"攻城器\",\n\tGoblinStartAlliance\t\t= \"看到那些爆盐炸弹了吗？当我维修攻城机具的时候用它们来轰破大门！\",\n\tGoblinStartHorde\t\t= \"修理攻城机具的工作就交给我，帮我看着点就够了。如果你想要轰破大门的话，尽管把那些爆盐炸弹拿去用吧！\",\n\tGoblinHalfwayAlliance\t= \"我已经修好一半了！别让部落靠近。工程学院可没有教我们如何作战喔！\",\n\tGoblinHalfwayHorde\t\t= \"我已经修好一半了！别让联盟靠近 - 我的合约里可没有作战这一条！\",\n\tGoblinFinishedAlliance\t= \"我有史以来最得意的作品！这台攻城机具已经可以上场啰！\",\n\tGoblinFinishedHorde\t\t= \"这台攻城机具已经可以上场啦！\",\n\tGoblinBrokenAlliance\t= \"这么快就坏啦？！别担心，再坏的情况我都可以修得好。\",\n\tGoblinBrokenHorde\t\t= \"又坏掉了吗？！让我来修理吧……但别指望产品的保固会帮你支付这一切。\"\n})\n"
  },
  {
    "path": "DBM-PvP/localization.de.lua",
    "content": "﻿if GetLocale() ~= \"deDE\" then return end\n\nlocal L\n\n--------------------------\n--  General BG Options  --\n--------------------------\nL = DBM:GetModLocalization(\"PvPGeneral\")\n\nL:SetGeneralLocalization({\n\tname\t= \"Allgemeine Einstellungen\"\n})\n\nL:SetTimerLocalization({\n\tTimerFlag\t\t= \"Flaggenrespawn\",\n\tTimerShadow\t\t= \"Schattensicht\",\n\tTimerStart\t\t= \"Spiel startet in\",\n\tTimerWin\t\t= \"Sieg in\"\n})\n\nL:SetOptionLocalization({\n\tAutoSpirit\t\t\t= \"Automatisch Geist freilassen\",\n\tColorByClass\t\t= \"Einfärbung der Spielernamen nach Klasse in der Schlachtfeld-Punktetafel\",\n\tHideBossEmoteFrame\t= \"Verberge das Fenster \\\"RaidBossEmoteFrame\\\" und Garnisons-/Gildenerfolgsmeldungen während Schlachtfeldern\",\n\tShowBasesToWin\t\t= \"Zeige benötigte Anzahl an Punkten zum Sieg\",\n\tShowEstimatedPoints\t= \"Zeige geschätzte Kampf-Endpunkte\",\n\tShowFlagCarrier\t\t= \"Zeige Flaggenträger\",\n\tShowGatesHealth\t\t= \"Zeige Erhaltungsgrad beschädigter Tore (kann nach dem Beitritt<br/>zu einem bereits laufenden Schlachtfeld falsche Werte liefern!)\",\n\tShowRelativeGameTime= \"Füllen Sie den Gewinn-Timer relativ zur Startzeit des Schlachtfelds (Wenn deaktiviert, sieht die Leiste einfach immer voll aus)\",\n\tTimerCap\t\t\t= \"Zeige Eroberungstimer\",\n\tTimerFlag\t\t\t= \"Zeige Timer für Flaggen-Respawn\",\n\tTimerShadow\t\t\t= \"Zeige Timer für Schattensicht\",\n\tTimerStart\t\t\t= \"Zeige Starttimer\",\n\tTimerWin\t\t\t= \"Zeige Siegtimer\"\n})\n\nL:SetMiscLocalization({\n\t--BG 2 minutes\n\tBgStart120TC\t\t= \"Die Schlacht beginnt in 2 Minuten!\",\n\t--BG 1 minute\n\tBgStart60TC\t\t\t= \"Die Schlacht beginnt in 1 Minute!\",\n\tBgStart60AlteracTC\t= \"Der Kampf um das Alteractal beginnt in 1 Minute.\",\n\tBgStart60SotA2TC\t= \"Runde 2 der Schlacht um den Strand der Uralten beginnt in 1 Minute.\",\n\tBgStart60WarsongTC\t= \"Der Kampf um die Kriegshymnenschlucht beginnt in 1 Minute.\",\n\t-- BG 30 seconds\n\tBgStart30TC\t\t\t= \"Die Schlacht beginnt in 30 Sekunden!\",\n\tBgStart30AlteracTC\t= \"Der Kampf um das Alteractal beginnt in 30 Sekunden.\",\n\tBgStart30SotA2TC\t= \"Runde 2 beginnt in 30 Sekunden. Macht Euch bereit!\",\n\tBgStart30WarsongTC\t= \"Der Kampf um die Kriegshymnenschlucht beginnt in 30 Sekunden. Haltet Euch bereit!\",\n\t--\n\tArenaInvite\t\t\t= \"Arena-Einladung\",\n\tStart60TC\t\t\t= \"Noch eine Minute bis der Arenakampf beginnt!\",\n\tStart30TC\t\t\t= \"Noch dreißig Sekunden bis der Arenakampf beginnt!\",\n\tStart15TC\t\t\t= \"Noch fünfzehn Sekunden bis der Arenakampf beginnt!\",\n\tBasesToWin\t\t\t= \"Punkte nötig um zu gewinnen: %d\",\n\tWinBarText\t\t\t= \"%s gewinnt\",\n\t-- Flag carrying system\n\tFlag\t\t\t\t= \"Flagge\",\n\tFlagResetTC\t\t\t= \"Die Flagge wurde zurückgesetzt.\",\n\tFlagTakenTC\t\t\t= \"(.+) hat die Flagge aufgenommen.\",\n\tFlagCapturedTC\t\t= \"Die (%w+) hat die Flagge erobert!\",\n\tFlagDroppedTC\t\t= \"Die Flagge wurde fallengelassen.\",\n\t--\n\tExprFlagPickUpTC\t= \"(.+) hat die Flagge der (%w+) aufgenommen!\",\n\tExprFlagCapturedTC\t= \"(.+) hat die Flagge der (%w+) errungen!\",\n\tExprFlagReturnTC\t= \"Die Flagge der (%w+) wurde von (.+) zu ihrem Stützpunkt zurückgebracht!\",\n\tExprFlagDroppedTC\t= \"(.+) hat die Flagge der (%w+) fallenlassen!\",\n\tVulnerable1\t\t\t= \"Eure Angriffe verursachen nun schwerere Verletzungen bei Flaggenträgern!\",\n\tVulnerable2\t\t\t= \"Eure Angriffe verursachen nun sehr schwere Verletzungen bei Flaggenträgern!\",\n\t-- Gates\n\tGatesHealthFrame\t\t\t\t= \"Beschädigte Tore\",\n\tHordeGateFront\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t Vorderes Tor\",\n\tHordeGateFrontDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t Vorderes Tor\",\n\tHordeGateWest\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t Westliches Tor\",\n\tHordeGateWestDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t Westliches Tor\",\n\tHordeGateEast\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t Östliches Tor\",\n\tHordeGateEastDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t Östliches Tor\",\n\tAllianceGateFront\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t Vorderes Tor\",\n\tAllianceGateFrontDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t Vorderes Tor\",\n\tAllianceGateWest\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t Westliches Tor\",\n\tAllianceGateWestDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t Westliches Tor\",\n\tAllianceGateEast\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t Östliches Tor\",\n\tAllianceGateEastDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t Östliches Tor\",\n\t-- Strands of the Ancients Gates emotes\n\tGreenEmeraldAttacked\t\t\t= \"Das Tor des Smaragdhorizonts wird angegriffen!\",\n\tGreenEmeraldDestroyed\t\t\t= \"Das Tor des Smaragdhorizonts ist zerstört worden!\",\n\tBlueSapphireAttacked\t\t\t= \"Das Tor des Saphirhimmels wird angegriffen!\",\n\tBlueSapphireDestroyed\t\t\t= \"Das Tor des Saphirhimmels ist zerstört worden!\",\n\tPurpleAmethystAttacked\t\t\t= \"Das Tor des Amethyststerns wird angegriffen!\",\n\tPurpleAmethystDestroyed\t\t\t= \"Das Tor des Amethyststerns ist zerstört worden!\",\n\tRedSunAttacked\t\t\t\t\t= \"Das Tor der Rubinsonne wird angegriffen!\",\n\tRedSunDestroyed\t\t\t\t\t= \"Das Tor der Rubinsonne ist zerstört worden!\",\n\tYellowMoonAttacked\t\t\t\t= \"Das Tor des Goldmondes wird angegriffen!\",\n\tYellowMoonDestroyed\t\t\t\t= \"Das Tor des Goldmondes ist zerstört worden!\",\n\tChamberAncientRelicsAttacked\t= \"Die Reliktkammer wird angegriffen!\",\n\tChamberAncientRelicsDestroyed\t= \"In die Kammer wurde eingebrochen! Der Titan ist in Gefahr!\",\n\t-- Isle of Conquest Gates CHAT_MSG_BG_SYSTEM_NEUTRAL messages\n\tHordeGateFrontDestroyedTC\t\t= \"Das vordere Tor der Hordenfestung ist zerstört worden!\",\n\tHordeGateWestDestroyedTC\t\t= \"Das westliche Tor der Hordenfestung ist zerstört worden!\",\n\tHordeGateEastDestroyedTC\t\t= \"Das östliche Tor der Hordenfestung ist zerstört worden!\",\n\tAllianceGateFrontDestroyedTC\t= \"Das vordere Tor der Allianzfestung ist zerstört worden!\",\n\tAllianceGateWestDestroyedTC\t\t= \"Das westliche Tor der Allianzfestung ist zerstört worden!\",\n\tAllianceGateEastDestroyedTC\t\t= \"Das östliche Tor der Allianzfestung ist zerstört worden!\",\n})\n\n--------------\n--  Arenas  --\n--------------\nL = DBM:GetModLocalization(\"Arenas\")\n\nL:SetGeneralLocalization({\n\tname = \"Arenas\"\n})\n\nL:SetTimerLocalization({\n})\n\nL:SetOptionLocalization({\n\tTimerStart\t= \"Zeige Starttimer\",\n})\n\nL:SetMiscLocalization({\n})\n\n----------------------\n--  Alterac Valley  --\n----------------------\nL = DBM:GetModLocalization(\"AlteracValley\")\n\nL:SetGeneralLocalization({\n\tname = \"Alteractal\"\n})\n\nL:SetOptionLocalization({\n\tAutoTurnIn = \"Automatisches Abgeben der Quests im Alteractal\"\n})\n\n--------------------\n--  Arathi Basin  --\n--------------------\nL = DBM:GetModLocalization(\"ArathiBasin\")\n\nL:SetGeneralLocalization({\n\tname = \"Arathibecken\"\n})\n\nL:SetMiscLocalization({\n})\n\nL:SetTimerLocalization({\n\tTimerStart = \"Spiel startet in\",\n\tTimerCap = \"%s\",\n})\n\nL:SetOptionLocalization({\n})\n\n------------------------\n--  Eye of the Storm  --\n------------------------\nL = DBM:GetModLocalization(\"EyeoftheStorm\")\n\nL:SetGeneralLocalization({\n\tname = \"Auge des Sturms\"\n})\n\n---------------------\n--  Warsong Gulch  --\n---------------------\nL = DBM:GetModLocalization(\"WarsongGulch\")\n\nL:SetGeneralLocalization({\n\tname = \"Kriegshymnenschlucht\"\n})\n\n------------------------------\n--  Strand of the Ancients  --\n------------------------------\nL = DBM:GetModLocalization(\"StrandoftheAncients\")\n\nL:SetGeneralLocalization({\n\tname = \"Strand der Uralten\"\n})\n\n------------------------\n--  Isle of Conquest  --\n------------------------\nL = DBM:GetModLocalization(\"IsleofConquest\")\n\nL:SetGeneralLocalization({\n\tname = \"Insel der Eroberung\"\n})\n\nL:SetWarningLocalization({\n\tWarnSiegeEngine\t\t= \"Belagerungsmaschine bereit!\",\n\tWarnSiegeEngineSoon\t= \"Belagerungsmaschine in ~10 Sekunden\"\n})\n\nL:SetTimerLocalization({\n\tTimerSiegeEngine\t= \"Belagerungsmaschine\"\n})\n\nL:SetOptionLocalization({\n\tTimerSiegeEngine\t= \"Zeige Zeit bis Belagerungsmaschine bereit ist\",\n\tWarnSiegeEngine\t\t= \"Zeige Warnung, wenn Belagerungsmaschine bereit ist\",\n\tWarnSiegeEngineSoon\t= \"Zeige Warnung, wenn Belagerungsmaschine fast bereit ist\"\n})\n\nL:SetMiscLocalization({\n\tSiegeEngine\t\t\t\t= \"Belagerungsmaschine\",\n\tGoblinStartAlliance\t\t= \"Seht Ihr diese Zephyriumbomben? Benutzt sie an den Toren, während ich die Belagerungsmaschine repariere!\",\n\tGoblinStartHorde\t\t= \"Ich arbeite an der Belagerungsmaschine. Haltet mir einfach nur den Rücken frei. Benutzt diese Zephyriumbomben an den Toren, solltet Ihr sie brauchen!\",\n\tGoblinHalfwayAlliance\t= \"Ich hab's gleich! Haltet die Horde von hier fern. Kämpfen stand in der Ingenieursschule nicht auf dem Lehrplan!\",\n\tGoblinHalfwayHorde\t\t= \"Ich hab's gleich! Haltet mir die Allianz vom Leib. Kämpfen steht nicht in meinem Vertrag!\",\n\tGoblinFinishedAlliance\t= \"Meine beste Arbeit bisher! Diese Belagerungsmaschine ist bereit, ein bisschen Aktion zu sehen!\",\n\tGoblinFinishedHorde\t\t= \"Die Belagerungsmaschine ist bereit, loszurollen!\",\n\tGoblinBrokenAlliance\t= \"Es ist schon kaputt?! Ach, keine Sorge, nichts, was ich nicht reparieren kann.\",\n\tGoblinBrokenHorde\t\t= \"Schon wieder kaputt?! Ich werde es richten... Ihr solltet allerdings nicht davon ausgehen, dass das noch unter die Garantie fällt.\"\n})\n"
  },
  {
    "path": "DBM-PvP/localization.en.lua",
    "content": "local L\n\n--------------------------\n--  General BG Options  --\n--------------------------\nL = DBM:GetModLocalization(\"PvPGeneral\")\n\nL:SetGeneralLocalization({\n\tname\t= \"General Options\"\n})\n\nL:SetTimerLocalization({\n\tTimerCap\t\t= \"%s\",\n\tTimerFlag\t\t= \"Flag respawn\",\n\tTimerShadow\t\t= \"Shadow Sight\",\n\tTimerStart\t\t= \"Starting in\",\n\tTimerWin\t\t= \"Victory in\"\n})\n\nL:SetOptionLocalization({\n\tAutoSpirit\t\t\t= \"Auto-release spirit\",\n\tColorByClass\t\t= \"Set name color to class color in the score frame\",\n\tHideBossEmoteFrame\t= \"Hide the raid boss emote frame and garrison/Guild toasts during battlegrounds\",\n\tShowBasesToWin\t\t= \"Show bases required to win\",\n\tShowEstimatedPoints\t= \"Show estimated points on win/loss\",\n\tShowFlagCarrier\t\t= \"Show flag carrier\",\n\tShowGatesHealth\t\t= \"Show the health of damaged gates (health values may be wrong after joining an already ongoing battleground!)\",\n\tShowRelativeGameTime= \"Fill win timer relative to BG start time (If disabled, bar just always looks full)\",\n\tTimerCap\t\t\t= \"Show capture timer\",\n\tTimerFlag\t\t\t= \"Show flag respawn timer\",\n\tTimerShadow\t\t\t= \"Show timer for Shadow Sight\",\n\tTimerStart\t\t\t= \"Show timer till match start\",\n\tTimerWin\t\t\t= \"Show win timer\"\n})\n\nL:SetMiscLocalization({\n\t--BG 2 minutes\n\tBGStart120\t\t\t= \"The battle begins in 2 minutes!\",\n\tBgStart120Alterac\t= \"The Battle for Alterac Valley begins in 2 minutes.\",\n\tBgStart120Arathi\t= \"The battle for Arathi Basin begins in 2 minutes.\",\n\tBgStart120EotS\t\t= \"The battle for Eye of the Storm begins in 2 minutes.\",\n\tBgStart120IoConquest= \"The battle will begin in two minutes.\",\n\tBgStart120SotA\t\t= \"The battle for Strand of the Ancients begins in 2 minutes.\",\n\tBgStart120Warsong\t= \"The battle for Warsong Gulch begins in 2 minutes.\",\n\t--BG 1 minute\n\tBgStart60TC\t\t\t= \"The battle begins in 1 minute!\",\n\tBgStart60Alterac\t= \"The Battle for Alterac Valley begins in 1 minute.\",\n\tBgStart60AlteracTC\t= \"1 minute until the battle for Alterac Valley begins.\",\n\tBgStart60Arathi\t\t= \"The Battle for Arathi Basin begins in 1 minute.\",\n\tBgStart60EotS\t\t= \"The Battle for Eye of the Storm begins in 1 minute.\",\n\tBgStart60IoConquest\t= \"The battle will begin in 1 minute.\",\n\tBgStart60SotA\t\t= \"The battle for Strand of the Ancients begins in 1 minute.\",\n\tBgStart60SotA2\t\t= \"Round 2 of the Battle for the Strand of the Ancients begins in 1 minute.\",\n\tBgStart60Warsong\t= \"The battle for Warsong Gulch begins in 1 minute.\",\n\t-- BG 30 seconds\n\tBgStart30TC\t\t\t= \"The battle begins in 30 seconds!\",\n\tBgStart30Alterac\t= \"The Battle for Alterac Valley begins in 30 seconds. Prepare yourselves!\",\n\tBgStart30AlteracTC\t= \"30 seconds until the battle for Alterac Valley begins.\",\n\tBgStart30Arathi\t\t= \"The Battle for Arathi Basin begins in 30 seconds. Prepare yourselves!\",\n\tBgStart30EotS\t\t= \"The Battle for Eye of the Storm begins in 30 seconds.\",\n\tBgStart30IoConquest\t= \"The battle will begin in 30 seconds!\",\n\tBgStart30SotA\t\t= \"The battle for Strand of the Ancients begins in 30 seconds. Prepare yourselves!.\",\n\tBgStart30SotA2\t\t= \"Round 2 begins in 30 seconds. Prepare yourselves!\",\n\tBgStart30Warsong\t= \"The battle for Warsong Gulch begins in 30 seconds. Prepare yourselves!\",\n\t--\n\tArenaInvite\t\t\t= \"Arena invite\",\n\tStart60\t\t\t\t= \"One minute until the Arena battle begins!\",\n\tStart30\t\t\t\t= \"Thirty seconds until the Arena battle begins!\",\n\tStart15\t\t\t\t= \"Fifteen seconds until the Arena battle begins!\",\n\tBasesToWin\t\t\t= \"Bases to win: %d\",\n\tWinBarText\t\t\t= \"%s wins\",\n\t-- Flag carrying system\n\tFlag\t\t\t\t= \"Flag\",\n\tFlagReset\t\t\t= \"The flag has been reset.\",\n\tFlagResetTC\t\t\t= \"The flag has been reset.\",\n\tFlagTaken\t\t\t= \"(.+) has taken the flag!\",\n\tFlagTakenTC\t\t\t= \"(.+) has taken the flag!\",\n\tFlagCaptured\t\t= \"The (%w+) have captured the flag!\",\n\tFlagCapturedTC\t\t= \"The (%w+) have captured the flag!\",\n\tFlagDropped\t\t\t= \"The flag has been dropped.\",\n\tFlagDroppedTC\t\t= \"The flag has been dropped.\",\n\t--\n\tExprFlagPickUp\t\t= \"The (%w+) .lag was picked up by (.+)!\",\n\tExprFlagPickUpTC\t= \"The (%w+) .lag was picked up by (.+)!\",\n\tExprFlagCaptured\t= \"(.+) captured the (%w+) .lag!\",\n\tExprFlagCapturedTC\t= \"(.+) captured the (%w+) .lag!\",\n\tExprFlagReturn\t\t= \"The (%w+) .lag was returned to its base by (.+)!\",\n\tExprFlagReturnTC\t= \"The (%w+) .lag was returned to its base by (.+)!\",\n\tExprFlagDropped\t\t= \"The (%w+) .lag was dropped by (.+)!\",\n\tExprFlagDroppedTC\t= \"The (%w+) .lag was dropped by (.+)!\",\n\tVulnerable1\t\t\t= \"The flag carriers have become vulnerable to attack!\",\n\tVulnerable2\t\t\t= \"The flag carriers have become increasingly vulnerable to attack!\",\n\t-- Alterac/IsleOfConquest bosses\n\tInfoFrameHeader\t\t= \"Boss Health\",\n\tHordeBoss\t\t\t= \"Horde Boss\",\n\tAllianceBoss\t\t= \"Alliance Boss\",\n\tGalvangar\t\t\t= \"Galvangar\",\n\tBalinda\t\t\t\t= \"Balinda\",\n\tIvus\t\t\t\t= \"Ivus\",\n\tLokholar\t\t\t= \"Lokholar\",\n\t-- Gates\n\tGatesHealthFrame\t\t\t\t= \"Damaged gates\",\n\tGreenEmerald\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:127:142|t\",\n\tGreenEmeraldAttackedTex\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:199:215:127:142|t\",\n\tGreenEmeraldDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:127:142|t\",\n\tBlueSapphire\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t\",\n\tBlueSapphireAttackedTex\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:199:215:92:107|t\",\n\tBlueSapphireDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t\",\n\tPurpleAmethyst\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:127:142|t\",\n\tPurpleAmethystAttackedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:145:161:127:142|t\",\n\tPurpleAmethystDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:127:142|t\",\n\tRedSun\t\t\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t\",\n\tRedSunAttackedTex\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:145:161:92:107|t\",\n\tRedSunDestroyedTex\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t\",\n\tYellowMoon\t\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:73:89:127:142|t\",\n\tYellowMoonAttackedTex\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:91:107:127:142|t\",\n\tYellowMoonDestroyedTex\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:109:125:127:142|t\",\n\tChamberAncientRelics\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:73:89:92:107|t\",\n\tChamberAncientRelicsAttackedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:91:107:92:107|t\",\n\tChamberAncientRelicsDestroyedTex= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:109:125:92:107|t\",\n\t--\n\tHordeGateFront\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t Front Gate\",\n\tHordeGateFrontDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t Front Gate\",\n\tHordeGateWest\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t West Gate\",\n\tHordeGateWestDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t West Gate\",\n\tHordeGateEast\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t East Gate\",\n\tHordeGateEastDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t East Gate\",\n\tAllianceGateFront\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t Front Gate\",\n\tAllianceGateFrontDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t Front Gate\",\n\tAllianceGateWest\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t West Gate\",\n\tAllianceGateWestDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t West Gate\",\n\tAllianceGateEast\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t East Gate\",\n\tAllianceGateEastDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t East Gate\",\n\t-- Strands of the Ancients Gates emotes\n\tGreenEmeraldAttacked\t\t\t= \"The Gate of the Green Emerald is under attack!\",\n\tGreenEmeraldDestroyed\t\t\t= \"The Gate of the Green Emerald was destroyed!\",\n\tBlueSapphireAttacked\t\t\t= \"The Gate of the Blue Sapphire is under attack!\",\n\tBlueSapphireDestroyed\t\t\t= \"The Gate of the Blue Sapphire was destroyed!\",\n\tPurpleAmethystAttacked\t\t\t= \"The Gate of the Purple Amethyst is under attack!\",\n\tPurpleAmethystDestroyed\t\t\t= \"The Gate of the Purple Amethyst was destroyed!\",\n\tRedSunAttacked\t\t\t\t\t= \"The Gate of the Red Sun is under attack!\",\n\tRedSunDestroyed\t\t\t\t\t= \"The Gate of the Red Sun was destroyed!\",\n\tYellowMoonAttacked\t\t\t\t= \"The Gate of the Yellow Moon is under attack!\",\n\tYellowMoonDestroyed\t\t\t\t= \"The Gate of the Yellow Moon was destroyed!\",\n\tChamberAncientRelicsAttacked\t= \"The relic chamber is under attack!\",\n\tChamberAncientRelicsDestroyed\t= \"The chamber has been breached! The titan relic is vulnerable!\",\n\t-- Isle of Conquest Gates CHAT_MSG_BG_SYSTEM_NEUTRAL messages\n\tHordeGateFrontDestroyed\t\t\t= \"The front gate of the horde keep is destroyed!\",\n\tHordeGateFrontDestroyedTC\t\t= \"The front gate of the Horde keep has been destroyed!\",\n\tHordeGateWestDestroyed\t\t\t= \"The west gate of the horde keep is destroyed!\",\n\tHordeGateWestDestroyedTC\t\t= \"The west gate of the Horde keep has been destroyed!\",\n\tHordeGateEastDestroyed\t\t\t= \"The east gate of the horde keep is destroyed!\",\n\tHordeGateEastDestroyedTC\t\t= \"The east gate of the Horde keep has been destroyed!\",\n\tAllianceGateFrontDestroyed\t\t= \"The front gate of the alliance keep is destroyed!\",\n\tAllianceGateFrontDestroyedTC\t= \"The front gate of the Alliance keep has been destroyed!\",\n\tAllianceGateWestDestroyed\t\t= \"The west gate of the alliance keep is destroyed!\",\n\tAllianceGateWestDestroyedTC\t\t= \"The west gate of the Alliance keep has been destroyed!\",\n\tAllianceGateEastDestroyed\t\t= \"The east gate of the alliance keep is destroyed!\",\n\tAllianceGateEastDestroyedTC\t\t= \"The east gate of the Alliance keep has been destroyed!\",\n})\n\n----------------------\n--  Alterac Valley  --\n----------------------\nL = DBM:GetModLocalization(\"AlteracValley\")\n\nL:SetGeneralLocalization({\n\tname = \"Alterac Valley\"\n})\n\nL:SetTimerLocalization({\n\tTimerBoss\t= \"%s\"\n})\n\nL:SetOptionLocalization({\n\tAutoTurnIn\t= \"Automatically turn-in quests\",\n\tTimerBoss\t= \"Show boss remaining timer\"\n})\n\nL:SetMiscLocalization({\n\tBossHorde\t= \"WHO DARES SUMMON LOKHOLAR?\",\n\tBossAlly\t= \"Wicked, wicked, mortals! The forest weeps. The elements recoil at the destruction. Ivus must purge you from this world!\"\n})\n\n--------------------\n--  Arathi Basin  --\n--------------------\nL = DBM:GetModLocalization(\"ArathiBasin\")\n\nL:SetGeneralLocalization({\n\tname = \"Arathi Basin\"\n})\n\n------------------------\n--  Eye of the Storm  --\n------------------------\nL = DBM:GetModLocalization(\"EyeoftheStorm\")\n\nL:SetGeneralLocalization({\n\tname = \"Eye of the Storm\"\n})\n\n---------------------\n--  Warsong Gulch  --\n---------------------\nL = DBM:GetModLocalization(\"WarsongGulch\")\n\nL:SetGeneralLocalization({\n\tname = \"Warsong Gulch\"\n})\n\n------------------------------\n--  Strand of the Ancients  --\n------------------------------\nL = DBM:GetModLocalization(\"StrandoftheAncients\")\n\nL:SetGeneralLocalization({\n\tname = \"Strand of the Ancients\"\n})\n\n------------------------\n--  Isle of Conquest  --\n------------------------\nL = DBM:GetModLocalization(\"IsleofConquest\")\n\nL:SetGeneralLocalization({\n\tname = \"Isle of Conquest\"\n})\n\nL:SetWarningLocalization({\n\tWarnSiegeEngine\t\t= \"Siege Engine ready!\",\n\tWarnSiegeEngineSoon\t= \"Siege Engine in ~10 sec\"\n})\n\nL:SetTimerLocalization({\n\tTimerSiegeEngine\t= \"Siege Engine ready\"\n})\n\nL:SetOptionLocalization({\n\tTimerSiegeEngine\t= \"Show timer for Siege Engine construction\",\n\tWarnSiegeEngine\t\t= \"Show warning when Siege Engine is ready\",\n\tWarnSiegeEngineSoon\t= \"Show warning when Siege Engine is almost ready\"\n})\n\nL:SetMiscLocalization({\n\tSiegeEngine\t\t\t\t= \"Siege Engine\",\n\tGoblinStartAlliance\t\t= \"See those seaforium bombs? Use them on the gates while I repair the siege engine!\",\n\tGoblinStartHorde\t\t= \"I'll work on the siege engine, just watch my back. Use those seaforium bombs on the gates if you need them!\",\n\tGoblinHalfwayAlliance\t= \"I'm halfway there! Keep the Horde away from here.  They don't teach fighting in engineering school!\",\n\tGoblinHalfwayHorde\t\t= \"I'm about halfway done! Keep the Alliance away - fighting's not in my contract!\",\n\tGoblinFinishedAlliance\t= \"My finest work so far! This siege engine is ready for action!\",\n\tGoblinFinishedHorde\t\t= \"The siege engine is ready to roll!\",\n\tGoblinBrokenAlliance\t= \"It's broken already?! No worries. It's nothing I can't fix.\",\n\tGoblinBrokenHorde\t\t= \"It's broken again?! I'll fix it... just don't expect the warranty to cover this\"\n})\n"
  },
  {
    "path": "DBM-PvP/localization.es.lua",
    "content": "﻿if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\n\nlocal L\n\n--------------------------\n--  General BG Options  --\n--------------------------\nL = DBM:GetModLocalization(\"PvPGeneral\")\n\nL:SetGeneralLocalization({\n\tname\t= \"Opciones generales\"\n})\n\nL:SetTimerLocalization({\n\tTimerFlag\t\t= \"Bandera Restablecida\",\n\tTimerShadow\t\t= \"Visión de las Sombras\",\n\tTimerStart\t\t= \"La batalla comienza en\",\n\tTimerWin\t\t= \"Victoria en\"\n})\n\nL:SetOptionLocalization({\n\tAutoSpirit\t\t\t= \"Liberar espíritu automáticamente\",\n\tColorByClass\t\t= \"Mostrar nombres con el color de su clase en la tabla de estadísticas\",\n\tHideBossEmoteFrame\t= \"Ocultar marco de jefe de banda y botón de ciudadela en campos de batalla\",\n\tShowBasesToWin\t\t= \"Mostrar bases para ganar\",\n\tShowEstimatedPoints\t= \"Mostrar recursos estimados a ganar\",\n\tShowFlagCarrier\t\t= \"Mostrar el nombre del portador de la bandera\",\n\tShowGatesHealth\t\t= \"Mostrar salud de puertas dañadas (¡puede dar resultados erróneos al unirse a una batalla en curso!)\",\n\tShowRelativeGameTime= \"Llene el temporizador de victorias en relación con la hora de inicio del campo de batalla (si está deshabilitado, la barra siempre se ve llena)\",\n\tTimerCap\t\t\t= \"Mostrar tiempo que tarda en conquistar\",\n\tTimerFlag\t\t\t= \"Mostrar tiempo que tarda en restablecer la Bandera\",\n\tTimerShadow\t\t\t= \"Mostrar tiempo para que salga Visión de las Sombras.\",\n\tTimerStart\t\t\t= \"Mostrar tiempo para que comienze la Batalla\",\n\tTimerWin\t\t\t= \"Mostrar tiempo para que una faccion gane la Batalla\"\n})\n\nL:SetMiscLocalization({\n\t--BG 2 minutes\n\tBgStart120TC\t\t= \"¡La batalla comienza en dos minutos!\",\n\t--BG 1 minute\n\tBgStart60TC\t\t\t= \"¡La batalla comienza en un minuto!\",\n\tBgStart60AlteracTC\t= \"1 minuto para que dé comienzo la batalla por el Valle de Alterac.\",\n\tBgStart60SotA2TC\t= \"La ronda 2 de la batalla por la Playa de los Ancestros comenzará en 1 minuto.\",\n\tBgStart60WarsongTC\t= \"La batalla por la Garganta Grito de Guerra comenzará en 1 minuto.\",\n\t-- BG 30 seconds\n\tBgStart30TC\t\t\t= \"¡La batalla comienza en treinta segundos!\",\n\tBgStart30AlteracTC\t= \"30 segundos para que dé comienzo la batalla por el Valle de Alterac.\",\n\tBgStart30SotA2TC\t= \"La ronda 2 comenzará en 30 segundos. ¡Preparaos!\",\n\tBgStart30WarsongTC\t= \"La batalla por la Garganta Grito de Guerra comenzará en 30 segundos. ¡Preparaos!\",\n\t--\n\tArenaInvite\t\t\t= \"Invitación a la arena\",\n\tStart60TC\t\t\t= \"¡Un minuto hasta que dé comienzo la batalla en arena!\",\n\tStart30TC\t\t\t= \"¡Treinta segundos hasta que comience la batalla de arena!\",\n\tStart15TC\t\t\t= \"¡Quince segundos para que comience la batalla de arena!\",\n\tBasesToWin\t\t\t= \"Bases necesarias para ganar: %d\",\n\tWinBarText\t\t\t= \"%s ganará en\",\n\t-- Flag carrying system\n\tFlag\t\t\t\t= \"Bandera\",\n\tFlagResetTC\t\t\t= \"La bandera se ha restablecido.\",\n\tFlagTakenTC\t\t\t= \"¡(.+) ha tomado la bandera!\",\n\tFlagCapturedTC\t\t= \"¡La (%w+) ha capturado la bandera!\",\n\tFlagDroppedTC\t\t= \"¡Ha caído la bandera!\",\n\t--\n\tExprFlagPickUpTC\t= \"¡(.+) ha cogido la bandera de la (%w+)!\",\n\tExprFlagCapturedTC\t= \"¡(.+) ha capturado la bandera de la (%w+)!\",\n\tExprFlagReturnTC\t= \"¡(.+) ha devuelto la bandera de la (%w+) a su base!\",\n\tExprFlagDroppedTC\t= \"¡(.+) ha dejado caer la bandera de la (%w+)!\",\n\tVulnerable1\t\t\t= \"¡Los portadores de las banderas se han vuelto vulnerables a los ataques!\",\n\tVulnerable2\t\t\t= \"¡Los portadores de las banderas se han vuelto más vulnerables a los ataques!\",\n\t-- Gates\n\tGatesHealthFrame\t\t\t\t= \"Puertas dañadas\",\n\tHordeGateFront\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t Puerta Principal\",\n\tHordeGateFrontDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t Puerta Principal\",\n\tHordeGateWest\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t Puerta Oeste\",\n\tHordeGateWestDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t Puerta Oeste\",\n\tHordeGateEast\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t Puerta Este\",\n\tHordeGateEastDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t Puerta Este\",\n\tAllianceGateFront\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t Puerta Principal\",\n\tAllianceGateFrontDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t Puerta Principal\",\n\tAllianceGateWest\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t Puerta Oeste\",\n\tAllianceGateWestDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t Puerta Oeste\",\n\tAllianceGateEast\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t Puerta Este\",\n\tAllianceGateEastDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t Puerta Este\",\n\t-- Strands of the Ancients Gates emotes\n\tGreenEmeraldAttacked\t\t\t= \"¡Están atacando la Puerta de la Esmeralda Verde!\",\n\tGreenEmeraldDestroyed\t\t\t= \"¡La Puerta de la Esmeralda Verde ha sido destruida!\",\n\tBlueSapphireAttacked\t\t\t= \"¡Están atacando la Puerta del Zafiro Azul!\",\n\tBlueSapphireDestroyed\t\t\t= \"¡La Puerta del Zafiro Azul ha sido destruida!\",\n\tPurpleAmethystAttacked\t\t\t= \"¡Están atacando la Puerta de la Amatista Púrpura!\",\n\tPurpleAmethystDestroyed\t\t\t= \"¡La Puerta de la Amatista Púrpura ha sido destruida!\",\n\tRedSunAttacked\t\t\t\t\t= \"¡Están atacando la Puerta del Sol Rojo!\",\n\tRedSunDestroyed\t\t\t\t\t= \"¡La Puerta del Sol Rojo ha sido destruida!\",\n\tYellowMoonAttacked\t\t\t\t= \"¡Están atacando la Puerta de la Luna Amarilla!\",\n\tYellowMoonDestroyed\t\t\t\t= \"¡La Puerta de la Luna Amarilla ha sido destruida!\",\n\tChamberAncientRelicsAttacked\t= \"¡Están atacando la Cámara de las Reliquias!\",\n\tChamberAncientRelicsDestroyed\t= \"¡Han atravesado la fortaleza! ¡La reliquia de titán es vulnerable!\",\n\t-- Isle of Conquest Gates CHAT_MSG_BG_SYSTEM_NEUTRAL messages\n\tHordeGateFrontDestroyedTC\t\t= \"La puerta principal de la fortaleza de la Horda ha sido destruida.\",\n\tHordeGateWestDestroyedTC\t\t= \"La puerta oeste de la fortaleza de la Horda ha sido destruida.\",\n\tHordeGateEastDestroyedTC\t\t= \"La puerta este de la fortaleza de la Horda ha sido destruida.\",\n\tAllianceGateFrontDestroyedTC\t= \"La puerta principal de la fortaleza de la Alianza ha sido destruida.\",\n\tAllianceGateWestDestroyedTC\t\t= \"La puerta oeste de la fortaleza de la Alianza ha sido destruida.\",\n\tAllianceGateEastDestroyedTC\t\t= \"La puerta este de la fortaleza de la Alianza ha sido destruida.\",\n})\n\n----------------------\n--  Alterac Valley  --\n----------------------\nL = DBM:GetModLocalization(\"AlteracValley\")\n\nL:SetGeneralLocalization({\n\tname = \"Valle de Alterac\"\n})\n\nL:SetOptionLocalization({\n\tAutoTurnIn\t= \"Entregar misiones automáticamente\"\n})\n\n--------------------\n--  Arathi Basin  --\n--------------------\nL = DBM:GetModLocalization(\"ArathiBasin\")\n\nL:SetGeneralLocalization({\n\tname = \"Cuenca de Arathi\"\n})\n\n-----------------------\n--  Eye of the Storm --\n-----------------------\nL = DBM:GetModLocalization(\"EyeoftheStorm\")\n\nL:SetGeneralLocalization({\n\tname = \"Ojo de la Tormenta\"\n})\n\n--------------------\n--  Warsong Gulch --\n--------------------\nL = DBM:GetModLocalization(\"WarsongGulch\")\n\nL:SetGeneralLocalization({\n\tname = \"Garganta Grito de Guerra\"\n})\n\n------------------------------\n--  Strand of the Ancients  --\n------------------------------\nL = DBM:GetModLocalization(\"StrandoftheAncients\")\n\nL:SetGeneralLocalization({\n\tname = \"Playa de los Ancestros\"\n})\n\n------------------------\n--  Isle of Conquest  --\n------------------------\n\nL = DBM:GetModLocalization(\"IsleofConquest\")\n\nL:SetGeneralLocalization({\n\tname = \"Isla de la Conquista\"\n})\n\nL:SetWarningLocalization({\n\tWarnSiegeEngine\t\t= \"¡Máquina de asedio lista!\",\n\tWarnSiegeEngineSoon\t= \"Máquina de asedio en ~10 s\"\n})\n\nL:SetTimerLocalization({\n\tTimerSiegeEngine\t= \"Máquina de asedio lista\"\n})\n\nL:SetOptionLocalization({\n\tTimerSiegeEngine\t= \"Mostrar temporizador para construcción de máquinas de asedio\",\n\tWarnSiegeEngine\t\t= \"Mostrar aviso cuando una máquina de asedio esté lista\",\n\tWarnSiegeEngineSoon\t= \"Mostrar aviso cuando una máquina de asedio esté casi lista\"\n})\n\nL:SetMiscLocalization({\n\tSiegeEngine\t\t\t\t= \"Máquina de asedio\",\n\tGoblinStartAlliance\t\t= \"¿Ves esas bombas de seforio? Úsalas en las puertas mientras reparo la máquina de asedio.\",\n\tGoblinStartHorde\t\t= \"Trabajaré en la máquina de asedio, solo cúbreme las espaldas. ¡Usa esas bombas de seforio en las puertas si las necesitas!\",\n\tGoblinHalfwayAlliance\t= \"¡Estoy a medias! Mantén a la Horda alejada de aquí. ¡En la escuela de ingeniería no enseñan a luchar!\",\n\tGoblinHalfwayHorde\t\t= \"¡Ya casi estoy! Mantén a la Alianza alejada... ¡Luchar no entra en mi contrato!\",\n\tGoblinFinishedAlliance\t= \"¡Mi mejor obra! ¡Esta máquina de asedio está lista para la acción!\",\n\tGoblinFinishedHorde\t\t= \"¡La máquina de asedio está lista para la acción!\",\n\tGoblinBrokenAlliance\t= \"¿Ya está rota? No pasa nada. No es nada que no pueda arreglar.\",\n\tGoblinBrokenHorde\t\t= \"¿Está estropeada otra vez? La arreglaré... pero no esperes que la garantía cubra esto.\"\n})\n"
  },
  {
    "path": "DBM-PvP/localization.fr.lua",
    "content": "﻿if GetLocale() ~= \"frFR\" then return end\n\nlocal L\n\n----------------------------\n--  General BG functions  --\n----------------------------\nL = DBM:GetModLocalization(\"PvPGeneral\")\n\nL:SetGeneralLocalization({\n\tname\t= \"Options générale\"\n})\n\nL:SetTimerLocalization({\n\tTimerFlag\t\t= \"Respawn du drapeau\",\n\tTimerShadow\t\t= \"Cristal d'ombre\",\n\tTimerStart\t\t= \"La bataille commence dans\",\n\tTimerWin\t\t= \"Victoire en\"\n})\n\nL:SetOptionLocalization({\n\tAutoSpirit\t\t\t= \"Auto-rez à un Ange\",\n\tColorByClass\t\t= \"Met le nom en couleur en fonction de la classe dans le tableau des scores\",\n\tHideBossEmoteFrame\t= \"Masquez les cadres d'émotes de boss de raid\",\n\tShowBasesToWin\t\t= \"Montre les bases à avoir pour gagner\",\n\tShowEstimatedPoints\t= \"Montre l'estimation de point pour gagner / perdre\",\n\tShowFlagCarrier\t\t= \"Montre le porteur du drapeau\",\n\tShowGatesHealth\t\t= \"Afficher la vie des portes endommagées (les valeurs peuvent être fausses après avoir rejoint un champ de bataille déjà en cours!))\",\n\tShowRelativeGameTime= \"Remplir la minuterie de victoire par rapport à l'heure de début du champ de bataille (si désactivé, la barre semble toujours pleine)\",\n\tTimerCap\t\t\t= \"Montre le timer de capture\",\n\tTimerFlag\t\t\t= \"Montre le timer du respawn du drapeau\",\n\tTimerShadow\t\t\t= \"Montre le timer pour le cristal d'ombre\",\n\tTimerStart\t\t\t= \"Voir le timer du début\",\n\tTimerWin\t\t\t= \"Montre le timer de la victoire\"\n})\n\nL:SetMiscLocalization({\n\t--BG 2 minutes\n\tBgStart120TC\t\t= \"La bataille commence dans 2 minutes !\",\n\t--BG 1 minute\n\tBgStart60TC\t\t\t= \"La bataille commence dans 1 minute !\",\n\tBgStart60AlteracTC\t= \"La bataille pour la vallée d’Alterac commence dans 1 minute.\",\n\tBgStart60SotA2TC\t= \"Deuxième manche de la bataille du rivage des Anciens dans 1 minute.\",\n\tBgStart60WarsongTC\t= \"La bataille pour le goulet des Chanteguerres commence dans 1 minute.\",\n\t-- BG 30 seconds\n\tBgStart30TC\t\t\t= \"La bataille commence dans 30 secondes !\",\n\tBgStart30AlteracTC\t= \"La bataille pour la vallée d’Alterac commence dans 30 secondes.\",\n\tBgStart30SotA2TC\t= \"Début de la deuxième manche dans 30 secondes. Préparez-vous !\",\n\tBgStart30WarsongTC\t= \"La bataille pour le goulet des Chanteguerres commence dans 30 secondes. Préparez-vous !\",\n\t--\n\tArenaInvite\t\t\t= \"Invitation d'arène\",\n\tStart60TC\t\t\t= \"Le combat d’arène commence dans une minute !\",\n\tStart30TC\t\t\t= \"Le combat d’arène commence dans trente secondes !\",\n\tStart15TC\t\t\t= \"Le combat commence dans quinze secondes !\",\n\tBasesToWin\t\t\t= \"Bases pour gagner: %d\",\n\tWinBarText\t\t\t= \"%s Gagne\",\n\t-- Flag carrying system\n\tFlag\t\t\t\t= \"Drapeau\",\n\tFlagResetTC\t\t\t= \"Le drapeau a été réinitialisé.\",\n\tFlagTakenTC\t\t\t= \"(.+) a pris le drapeau !\",\n\tFlagCapturedATC\t\t= \"L'Alliance a pris le drapeau !\",\n\tFlagCapturedHTC\t\t= \"La Horde s'est emparée du drapeau !\",\n\tFlagDroppedTC\t\t= \"Le drapeau a été lâché !\",\n\t--\n\tExprFlagPickUpTC\t= \"Le drapeau de (%w+) a été ramassé par (.+) !\",\n\tExprFlagCapturedTC\t= \"(.+) a pris le drapeau de (%w+) !\",\n\tExprFlagReturnTC\t= \"Le drapeau de (%w+) a été ramené à sa base par (.+) !\",\n\tExprFlagDroppedTC\t= \"Le drapeau de (%w+) a été lâché par (.+) !\",\n\tVulnerable1\t\t\t= \"Le porteur du drapeau est vulnérable aux attaques!\",\n\tVulnerable2\t\t\t= \"Le porteur du drapeau devient encore plus vulnérable aux attaques!\",\n\t-- Gates\n\tGatesHealthFrame\t\t\t\t= \"Portes endommagées\",\n\tHordeGateFront\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t Porte principale\",\n\tHordeGateFrontDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t Porte principale\",\n\tHordeGateWest\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t Porte de l'Ouest\",\n\tHordeGateWestDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t Porte de l'Ouest\",\n\tHordeGateEast\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t Porte de l'Est\",\n\tHordeGateEastDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t Porte de l'Est\",\n\tAllianceGateFront\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t Porte principale\",\n\tAllianceGateFrontDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t Porte principale\",\n\tAllianceGateWest\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t Porte de l'Ouest\",\n\tAllianceGateWestDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t Porte de l'Ouest\",\n\tAllianceGateEast\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t Porte de l'Est\",\n\tAllianceGateEastDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t Porte de l'Est\",\n\t-- Strands of the Ancients Gates emotes\n\tGreenEmeraldAttacked\t\t\t= \"La porte de l'Émeraude verte est attaquée !\",\n\tGreenEmeraldDestroyed\t\t\t= \"La porte de l'Émeraude verte est détruite !\",\n\tBlueSapphireAttacked\t\t\t= \"La porte du Saphir bleu est attaquée !\",\n\tBlueSapphireDestroyed\t\t\t= \"La porte du Saphir bleu est détruite !\",\n\tPurpleAmethystAttacked\t\t\t= \"La porte de l'Améthyste violette est attaquée !\",\n\tPurpleAmethystDestroyed\t\t\t= \"La porte de l'Améthyste violette est détruite !\",\n\tRedSunAttacked\t\t\t\t\t= \"La porte du Soleil rouge est attaquée !\",\n\tRedSunDestroyed\t\t\t\t\t= \"La porte du Soleil rouge est détruite !\",\n\tYellowMoonAttacked\t\t\t\t= \"La porte de la Lune jaune est attaquée !\",\n\tYellowMoonDestroyed\t\t\t\t= \"La porte de la Lune jaune est détruite !\",\n\tChamberAncientRelicsAttacked\t= \"La salle de la relique est attaquée !\",\n\tChamberAncientRelicsDestroyed\t= \"La salle est envahie ! La relique des titans est vulnérable !\",\n\t-- Isle of Conquest Gates CHAT_MSG_BG_SYSTEM_NEUTRAL messages\n\tHordeGateFrontDestroyedTC\t\t= \"La grande porte du donjon de la Horde est détruite !\",\n\tHordeGateWestDestroyedTC\t\t= \"La porte ouest du donjon de la Horde est détruite !\",\n\tHordeGateEastDestroyedTC\t\t= \"La porte est du donjon de la Horde est détruite !\",\n\tAllianceGateFrontDestroyedTC\t= \"La grande porte du donjon de l'Alliance est détruite !\",\n\tAllianceGateWestDestroyedTC\t\t= \"La porte ouest du donjon de l'Alliance est détruite !\",\n\tAllianceGateEastDestroyedTC\t\t= \"La porte est du donjon de l'Alliance est détruite !\",\n})\n\n----------------------\n--  Alterac Valley  --\n----------------------\nL = DBM:GetModLocalization(\"AlteracValley\")\n\nL:SetGeneralLocalization({\n\tname = \"Vallée d'Alterac\"\n})\n\nL:SetOptionLocalization({\n\tAutoTurnIn\t= \"Fini automatiquement les quêtes dans la Vallée d'Alterac\"\n})\n\n--------------------\n--  Arathi Basin  --\n--------------------\nL = DBM:GetModLocalization(\"ArathiBasin\")\n\nL:SetGeneralLocalization({\n\tname = \"Bassin d'Arathi\"\n})\n\n-----------------------\n--  Eye of the Storm --\n-----------------------\nL = DBM:GetModLocalization(\"EyeoftheStorm\")\n\nL:SetGeneralLocalization({\n\tname = \"L'Œil du cyclone\"\n})\n\n--------------------\n--  Warsong Gulch --\n--------------------\nL = DBM:GetModLocalization(\"WarsongGulch\")\n\nL:SetGeneralLocalization({\n\tname = \"Goulet des Chanteguerres\"\n})\n\n---------------------\n--  Strand of the Ancients  --\n---------------------\nL = DBM:GetModLocalization(\"StrandoftheAncients\")\n\nL:SetGeneralLocalization({\n\tname = \"Rivage des Anciens\"\n})\n\n------------------------\n--  Isle of Conquest  --\n------------------------\nL = DBM:GetModLocalization(\"IsleofConquest\")\n\nL:SetGeneralLocalization({\n\tname = \"Île des Conquérants\"\n})\n\nL:SetWarningLocalization({\n\tWarnSiegeEngine\t\t= \"Engins de Siège prêt!\",\n\tWarnSiegeEngineSoon\t= \"Apparition des Engins de Siège dans ~10 sec\"\n})\n\nL:SetTimerLocalization({\n\tTimerSiegeEngine\t= \"Engins de Siège prêt\"\n})\n\nL:SetOptionLocalization({\n\tTimerSiegeEngine\t= \"Montre le timer de la construction des Engins de Siège\",\n\tWarnSiegeEngine\t\t= \"Alerter lorsque l'Engin de Siège est prêt\",\n\tWarnSiegeEngineSoon\t= \"Alerter lorsque l'Engin de Siège est presque prêt\"\n})\n\nL:SetMiscLocalization({\n\tSiegeEngine\t\t\t\t= \"Engin de Siège\",\n\tGoblinStartAlliance\t\t= \"Regarder ces Bombes d'hydroglycérine ? Utilisez-les sur les portes alors que je répare l'engin de siège!\",\n\tGoblinStartHorde\t\t= \"Je travaillerai sur l'engin de siège, regarde juste mon dos. Utilse ces Bombes d'hydroglycérine sur les portes si tu en as besoin!\",\n\tGoblinHalfwayAlliance\t= \"Je suis à mi-chemin! Gardez la Horde loin d'ici. Ils n'apprennent pas la lutte à l'ecole d'ingénieur!\",\n\tGoblinHalfwayHorde\t\t= \"J'ai déjà fait mi-chemin ! Gardez l'Alliance loin - Combattre n'est pas dans mon contrat!\",\n\tGoblinFinishedAlliance\t= \"Mon plus beau travail accompli jusqu'à présent! Cet engin de siège est prêt pour l'action!\",\n\tGoblinFinishedHorde\t\t= \"L'engin de siège est prêt à rouler!\",\n\tGoblinBrokenAlliance\t= \"C'est déjà cassé?! Pas de soucis. Ce n'est rien que je ne puisse arranger.\",\n\tGoblinBrokenHorde\t\t= \"C'est encore cassé?! j'arrangerais ça... ne vous attendez pas a ce que la garantie couvre cela\"\n})\n"
  },
  {
    "path": "DBM-PvP/localization.kr.lua",
    "content": "﻿if GetLocale() ~= \"koKR\" then return end\n\nlocal L\n\n----------------------------\n--  General BG functions  --\n----------------------------\nL = DBM:GetModLocalization(\"PvPGeneral\")\n\nL:SetGeneralLocalization({\n\tname\t= \"기본 전장 기능\"\n})\n\nL:SetTimerLocalization({\n\tTimerFlag\t\t= \"깃발 재생성\",\n\tTimerShadow\t\t= \"어둠의 시야\",\n\tTimerStart\t\t= \"게임 시작\",\n\tTimerWin\t\t= \"승리\"\n})\n\nL:SetOptionLocalization({\n\tAutoSpirit\t\t\t= \"전장에서 사망시 자동으로 무덤 이동\",\n\tColorByClass\t\t= \"전장 점수판 캐릭터명에 직업 색상 사용\",\n\tHideBossEmoteFrame\t= \"화면 가운데 나타나는 전장 메세지, 주둔지 및 길드 알림 숨김\",\n\tShowBasesToWin\t\t= \"필요 점령 갯수 보기\",\n\tShowEstimatedPoints\t= \"승/패 예상 포인트 보기\",\n\tShowFlagCarrier\t\t= \"깃발 운반자 보기\",\n\tShowGatesHealth\t\t= \"관문 체력 바 보기(진행 도중인 전장에 진입한경우 맞지 않음)\",\n\tShowRelativeGameTime= \"전장 시작 시간을 기준으로 승리 타이머 채우기(비활성화하면 막대가 항상 가득 찬 것처럼 보입니다)\",\n\tTimerCap\t\t\t= \"깃발 점령 타이머 보기\",\n\tTimerFlag\t\t\t= \"깃발 재생성 타이머 보기\",\n\tTimerShadow\t\t\t= \"어둠의 눈 타이머 보기\",\n\tTimerStart\t\t\t= \"시작 타이머 보이기\",\n\tTimerWin\t\t\t= \"점령 타이머 보기\"\n})\n\nL:SetMiscLocalization({\n\t--BG 2 minutes\n\tBgStart120TC\t\t= \"2분 후 전투가 시작됩니다!\",\n\t--BG 1 minute\n\tBgStart60TC\t\t\t= \"1분 후 전투가 시작됩니다!\",\n\tBgStart60AlteracTC\t= \"알터랙 계곡 전투 개시 1분 전...\",\n\tBgStart60SotA2TC\t= \"1분 후 고대의 해안 두 번째 전투가 시작됩니다.\",\n\tBgStart60WarsongTC\t= \"1분 후 전쟁노래 협곡 전투가 시작됩니다!\",\n\t-- BG 30 seconds\n\tBgStart30TC\t\t\t= \"30초 후 전투가 시작됩니다!\",\n\tBgStart30AlteracTC\t= \"알터랙 계곡 전투 개시 30초 전...\",\n\tBgStart30SotA2TC\t= \"30초 후 두 번째 전투가 시작됩니다. 준비하세요!\",\n\tBgStart30WarsongTC\t= \"30초 후 전쟁노래 협곡 전투가 시작됩니다. 준비하십시오!\",\n\t--\n\tArenaInvite\t\t= \"전투 참여\",\n\tStart60TC\t\t= \"투기장 전투 시작 1분 전입니다!\",\n\tStart30TC\t\t= \"투기장 전투 시작 30초 전입니다!\",\n\tStart15TC\t\t= \"투기장 전투 시작 15초 전입니다!\",\n\tBasesToWin\t\t= \"필요 점령 갯수 : %d\",\n\tWinBarText\t\t= \"%s 획득\",\n\t-- Flag carrying system\n\tFlag\t\t\t= \"깃발\",\n\tFlagResetTC\t\t= \"깃발이 다시 제자리로 돌아갔습니다.\",\n\tFlagTakenTC\t\t= \"(.+)|1이;가; 깃발을 차지했습니다!\",\n\tFlagCapturedTC\t= \".+가 깃발을 차지했습니다!\",\n\tFlagDroppedTC\t= \"깃발이 떨어졌습니다!\",\n\t--\n\tExprFlagPickUpTC\t= \"(.+)|1이;가; .+ 깃발을 손에 넣었습니다!\",\n\tExprFlagCapturedTC\t= \"(.+)|1이;가; .+ 깃발 쟁탈에 성공했습니다!\",\n\tExprFlagReturnTC\t= \"(.+)|1이;가; .+ 깃발을 되찾았습니다!\",\n\tExprFlagDroppedTC\t= \"(.+)|1이;가; .+ 깃발을 떨어뜨렸습니다!\",\n\tVulnerable1\t\t\t= \"약해져서\",\n\tVulnerable2\t\t\t= \"약해져서\",\n\t-- Gates\n\tGatesHealthFrame\t\t\t\t= \"피해 입은 관문\",\n\tHordeGateFront\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t 정문\",\n\tHordeGateFrontDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t 정문\",\n\tHordeGateWest\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t 서문\",\n\tHordeGateWestDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t 서문\",\n\tHordeGateEast\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t 동문\",\n\tHordeGateEastDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t 동문\",\n\tAllianceGateFront\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t 정문\",\n\tAllianceGateFrontDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t 정문\",\n\tAllianceGateWest\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t 서문\",\n\tAllianceGateWestDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t 서문\",\n\tAllianceGateEast\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t 동문\",\n\tAllianceGateEastDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t 동문\",\n\t-- Strands of the Ancients Gates emotes\n\tGreenEmeraldAttacked\t\t\t= \"초록 에메랄드 관문이 공격받고 있습니다!\",\n\tGreenEmeraldDestroyed\t\t\t= \"초록 에메랄드 관문이 무너졌습니다!\",\n\tBlueSapphireAttacked\t\t\t= \"푸른 사파이어 관문이 공격받고 있습니다!\",\n\tBlueSapphireDestroyed\t\t\t= \"푸른 사파이어 관문이 무너졌습니다!\",\n\tPurpleAmethystAttacked\t\t\t= \"보라 자수정 관문이 공격받고 있습니다!\",\n\tPurpleAmethystDestroyed\t\t\t= \"보라 자수정 관문이 무너졌습니다!\",\n\tRedSunAttacked\t\t\t\t\t= \"붉은 태양 관문이 공격받고 있습니다!\",\n\tRedSunDestroyed\t\t\t\t\t= \"붉은 태양 관문이 무너졌습니다!\",\n\tYellowMoonAttacked\t\t\t\t= \"노란 달 관문이 공격받고 있습니다!\",\n\tYellowMoonDestroyed\t\t\t\t= \"노란 달 관문이 무너졌습니다!\",\n\tChamberAncientRelicsAttacked\t= \"유물의 방이 공격받고 있습니다!\",\n\tChamberAncientRelicsDestroyed\t= \"유물의 방 방어선이 깨졌습니다! 티탄 유물이 위험합니다!\",\n\t-- Isle of Conquest Gates CHAT_MSG_BG_SYSTEM_NEUTRAL messages\n\tHordeGateFrontDestroyedTC\t\t= \"호드 요새 정문이 파괴되었습니다!\",\n\tHordeGateWestDestroyedTC\t\t= \"호드 요새 서문이 파괴되었습니다!\",\n\tHordeGateEastDestroyedTC\t\t= \"호드 요새 동문이 파괴되었습니다!\",\n\tAllianceGateFrontDestroyedTC\t= \"얼라이언스 요새 정문이 파괴되었습니다!\",\n\tAllianceGateWestDestroyedTC\t\t= \"얼라이언스 요새 서문이 파괴되었습니다!\",\n\tAllianceGateEastDestroyedTC\t\t= \"얼라이언스 요새 동문이 파괴되었습니다!\",\n})\n\n----------------------\n--  Alterac Valley  --\n----------------------\nL = DBM:GetModLocalization(\"AlteracValley\")\n\nL:SetGeneralLocalization({\n\tname = \"알터랙 계곡\"\n})\n\nL:SetOptionLocalization({\n\tAutoTurnIn\t= \"알터랙 계곡내 퀘스트 자동 완료\"\n})\n\n--------------------\n--  Arathi Basin  --\n--------------------\nL = DBM:GetModLocalization(\"ArathiBasin\")\n\nL:SetGeneralLocalization({\n\tname = \"아라시 분지\"\n})\n\n-----------------------\n--  Eye of the Storm --\n-----------------------\nL = DBM:GetModLocalization(\"EyeoftheStorm\")\n\nL:SetGeneralLocalization({\n\tname = \"폭풍의 눈\"\n})\n\n--------------------\n--  Warsong Gulch --\n--------------------\nL = DBM:GetModLocalization(\"WarsongGulch\")\n\nL:SetGeneralLocalization({\n\tname = \"전쟁노래 협곡\"\n})\n\n------------------------------\n--  Strand of the Ancients  --\n------------------------------\nL = DBM:GetModLocalization(\"StrandoftheAncients\")\n\nL:SetGeneralLocalization({\n\tname = \"고대의 해안\"\n})\n\n------------------------\n--  Isle of Conquest  --\n------------------------\nL = DBM:GetModLocalization(\"IsleofConquest\")\n\nL:SetGeneralLocalization({\n\tname = \"정복의 섬\"\n})\n\nL:SetWarningLocalization({\n\tWarnSiegeEngine\t\t= \"공성 전차 준비 완료\",\n\tWarnSiegeEngineSoon\t= \"공성 전차 완료 10초 전\"\n})\n\nL:SetTimerLocalization({\n\tTimerSiegeEngine\t= \"공성 전차 준비\"\n})\n\nL:SetOptionLocalization({\n\tTimerSiegeEngine\t= \"공성 전차 준비 바 보기\",\n\tWarnSiegeEngine\t\t= \"공성 전차 준비 완료 알림 보기\",\n\tWarnSiegeEngineSoon\t= \"공성 전차 준비 완료 이전에 알림 보기\"\n})\n\nL:SetMiscLocalization({\n\tSiegeEngine\t\t\t\t= \"공성 전차\",\n\tGoblinStartAlliance\t\t= \"저기 시포리움 폭탄 보이세요? 제가 공성 전차를 수리하는 동안엔 그걸 사용해서 관문을 공격하세요!\",\n\tGoblinStartHorde\t\t= \"공성 전차를 수리하는 동안 날 좀 지켜 달라고. 필요하면 저기 있는 시포리움 폭탄을 관문에 사용해!\",\n\tGoblinHalfwayAlliance\t= \"반쯤 됐어요! 호드가 절 못 때리게 해주세요. 기계공학 학교에서는 싸움은 안 가르친다고요!\",\n\tGoblinHalfwayHorde\t\t= \"반쯤 됐다고! 얼라이언스 놈들이 가까이 못 오게 해줘. 계약서에 전투 얘긴 없었다고!\",\n\tGoblinFinishedAlliance\t= \"제 최고의 작품인 듯한데요! 이제 이 공성 전차를 몰고 나가셔도 돼요!\",\n\tGoblinFinishedHorde\t\t= \"이제 이 공성 전차를 끌고 나가도 좋아!\",\n\tGoblinBrokenAlliance\t= \"벌써 부서졌어요?! 괜찮아요. 제가 못 고칠 정도는 아니에요.\",\n\tGoblinBrokenHorde\t\t= \"또 부서졌다고?! 내가 고쳐 주지... 하지만 사용자 과실이니까 공짜로 해 줄 순 없다고.\"\n})\n"
  },
  {
    "path": "DBM-PvP/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n--------------------------\n--  General BG Options  --\n--------------------------\nL = DBM:GetModLocalization(\"PvPGeneral\")\n\nL:SetGeneralLocalization({\n\tname = \"Общие параметры\"\n})\n\nL:SetTimerLocalization({\n\tTimerFlag\t\t= \"Флаг восстановлен\",\n\tTimerShadow\t\t= \"Сумеречное зрение\",\n\tTimerStart\t\t= \"Битва начнется через\",\n\tTimerWin\t\t= \"Победа в\"\n})\n\nL:SetOptionLocalization({\n\tAutoSpirit\t\t\t= \"Автоматически покидать тело\",\n\tColorByClass\t\t= \"Показывать имена цветом класса в таблице очков\",\n\tHideBossEmoteFrame\t= \"Скрыть фрейм эмоций рейдового босса\",\n\tShowBasesToWin\t\t= \"Отображать базы, которые необходимо захватить\",\n\tShowEstimatedPoints\t= \"Отображать предполагаемые очки оставшиеся до победы/поражения\",\n\tShowFlagCarrier\t\t= \"Показать флагоносца\",\n\tShowGatesHealth\t\t= \"Отображать здоровье поврежденых ворот (значение здоровья может быть некорректным после захода в уже начавшееся поле боя!)\",\n\tShowRelativeGameTime= \"Заполните таймер победы относительно времени начала поля боя (если он отключен, панель всегда выглядит заполненной)\",\n\tTimerCap\t\t\t= \"Отсчет времени до захвата\",\n\tTimerFlag\t\t\t= \"Отсчет времени до восстановления флага\",\n\tTimerShadow\t\t\t= \"Отсчет времени для Сумрачного зрения\",\n\tTimerStart\t\t\t= \"Отсчет времени до начала битвы\",\n\tTimerWin\t\t\t= \"Отсчет времени до победы\"\n})\n\nL:SetMiscLocalization({\n\t--BG 2 minutes\n\tBgStart120TC\t\t= \"Битва начнется через 2 минуты!\",\n\t--BG 1 minute\n\tBgStart60TC\t\t\t= \"Битва начнется через минуту!\",\n\tBgStart60OLD\t\t= \"Битва начнется через 60 секунд.\",\n\tBgStart60AlteracTC\t= \"До начала сражения за Альтеракскую долину остается 1 минута.\",\n\tBgStart60SotAOLD\t= \"Сражение за Берег Древних начнется через 1 минуту.\",\n\tBgStart60SotA2TC\t= \"Второй раунд сражения за Берег Древних начнется через 1 минуту.\",\n\tBgStart60WarsongTC\t= \"Битва за Ущелье Песни Войны начнется через 1 минуту.\",\n\tBgStart60ArathiOLD\t= \"Битва за Низину Арати начнется через минуту.\",\n\t-- BG 30 seconds\n\tBgStart30TC\t\t\t= \"Битва начнется через 30 секунд!\",\n\tBgStart30OLD\t\t= \"Битва начнется через 30 секунд.\",\n\tBgStart30AlteracTC\t= \"30 секунд до начала битвы в Альтеракской долине.\",\n\tBgStart30SotAOLD\t= \"Сражение за Берег Древних начнется через 30 секунд. Готовьтесь!\",\n\tBgStart30SotA2TC\t= \"Второй раунд начинается через 30 секунд. Приготовьтесь!\",\n\tBgStart30WarsongTC\t= \"Битва за Ущелье Песни Войны начнется через 30 секунд. Приготовиться!\",\n\tBgStart30ArathiOLD\t= \"Битва за Низину Арати начнется через 30 секунд.\",\n\t--\n\tArenaInvite\t\t\t= \"Приглашение на Арену\",\n\tStart60TC\t\t\t= \"Одна минута до начала боя на арене!\",\n\tStart30TC\t\t\t= \"Тридцать секунд до начала боя на арене !\",\n\tStart15TC\t\t\t= \"Пятнадцать секунд до начала боя на арене!\",\n\tBasesToWin\t\t\t= \"Захвачено баз: %d\",\n\tWinBarText\t\t\t= \"Победа %s\",\n\t-- Flag carrying system\n\tFlag\t\t\t\t= \"Флаг\",\n\tFlagResetTC\t\t\t= \"Флаг возвращен на базу.\",\n\tFlagTakenTC\t\t\t= \"(.+) захватывает флаг!\",\n\tFlagCapturedTC\t\t= \".+ захватил.* флаг!\",\n\tFlagDroppedTC\t\t= \"Флаг уронили!\",\n\t--\n\tExprFlagPickUpATC\t= \"Флаг Альянса у |3-1((.+))!\",\n\tExprFlagPickUpHTC\t= \"(.+) несет флаг Орды!\",\n\tExprFlagCapturedTC\t= \"(.+) захватывает флаг .+!\",\n\tExprFlagReturnTC\t= \"(.+) возвращает на базу флаг .+!\",\n\tExprFlagDroppedTC\t= \"(.+) роняет флаг .+!\",\n\tVulnerable1\t\t\t= \"Персонажи, несущие флаг, стали более уязвимы!\",\n\tVulnerable2\t\t\t= \"Персонажи, несущие флаг, стали еще более уязвимы!\",\n\t-- Alterac/IsleOfConquest bosses\n\tInfoFrameHeader\t\t= \"Здоровье босса\",\n\tHordeBoss\t\t\t= \"Босс Орды\",\n\tAllianceBoss\t\t= \"Босс Альянса\",\n\tGalvangar\t\t\t= \"Гальвангар\",\n\tBalinda\t\t\t\t= \"Балинда\",\n\tIvus\t\t\t\t= \"Ивус\",\n\tLokholar\t\t\t= \"Локолар\",\n\t-- Gates\n\tGatesHealthFrame\t\t\t\t= \"Поврежденные ворота\",\n\tHordeGateFront\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t Главные врата\",\n\tHordeGateFrontDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t Главные врата\",\n\tHordeGateWest\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t Западные врата\",\n\tHordeGateWestDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t Западные врата\",\n\tHordeGateEast\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t Восточные врата\",\n\tHordeGateEastDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t Восточные врата\",\n\tAllianceGateFront\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t Главные врата\",\n\tAllianceGateFrontDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t Главные врата\",\n\tAllianceGateWest\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t Западные врата\",\n\tAllianceGateWestDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t Западные врата\",\n\tAllianceGateEast\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t Восточные врата\",\n\tAllianceGateEastDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t Восточные врата\",\n\t-- Strands of the Ancients Gates emotes\n\tGreenEmeraldAttacked\t\t\t= \"Врата Зеленого Изумруда подверглись нападению!\",\n\tGreenEmeraldDestroyed\t\t\t= \"Врата Зеленого Изумруда разрушены!\",\n\tBlueSapphireAttacked\t\t\t= \"Врата Синего Сапфира подверглись нападению!\",\n\tBlueSapphireDestroyed\t\t\t= \"Врата Синего Сапфира разрушены!\",\n\tPurpleAmethystAttacked\t\t\t= \"Врата Лилового Аметиста подверглись нападению!\",\n\tPurpleAmethystDestroyed\t\t\t= \"Врата Лилового Аметиста разрушены!\",\n\tRedSunAttacked\t\t\t\t\t= \"Врата Красного Солнца подверглись нападению!\",\n\tRedSunDestroyed\t\t\t\t\t= \"Врата Красного Солнца разрушены!\",\n\tYellowMoonAttacked\t\t\t\t= \"Врата Желтой Луны подверглись нападению!\",\n\tYellowMoonDestroyed\t\t\t\t= \"Врата Желтой Луны разрушены!\",\n\tChamberAncientRelicsAttacked\t= \"Крепость атакуют!\",\n\tChamberAncientRelicsDestroyed\t= \"В стене пролом! Реликвии грозит опасность!\",\n\t-- Isle of Conquest Gates CHAT_MSG_BG_SYSTEM_NEUTRAL messages\n\tHordeGateFrontDestroyedTC\t\t= \"Главные врата крепости Орды разрушены!\",\n\tHordeGateWestDestroyedTC\t\t= \"Западные врата крепости Орды разрушены!\",\n\tHordeGateEastDestroyedTC\t\t= \"Восточные врата крепости Орды разрушены!\",\n\tAllianceGateFrontDestroyedTC\t= \"Главные врата крепости Альянса разрушены!\",\n\tAllianceGateWestDestroyedTC\t\t= \"Западные врата крепости Альянса разрушены!\",\n\tAllianceGateEastDestroyedTC\t\t= \"Восточные врата крепости Альянса разрушены!\",\n})\n\n----------------------\n--  Alterac Valley  --\n----------------------\nL = DBM:GetModLocalization(\"AlteracValley\")\n\nL:SetGeneralLocalization({\n\tname = \"Альтеракская долина\"\n})\n\nL:SetOptionLocalization({\n\tAutoTurnIn\t= \"Автоматическая сдача заданий\"\n})\n\n--------------------\n--  Arathi Basin  --\n--------------------\nL = DBM:GetModLocalization(\"ArathiBasin\")\n\nL:SetGeneralLocalization({\n\tname = \"Низина Арати\"\n})\n\n------------------------\n--  Eye of the Storm  --\n------------------------\nL = DBM:GetModLocalization(\"EyeoftheStorm\")\n\nL:SetGeneralLocalization({\n\tname = \"Око Бури\"\n})\n\n---------------------\n--  Warsong Gulch  --\n---------------------\nL = DBM:GetModLocalization(\"WarsongGulch\")\n\nL:SetGeneralLocalization({\n\tname = \"Ущелье Песни Войны\"\n})\n\n------------------------------\n--  Strand of the Ancients  --\n------------------------------\nL = DBM:GetModLocalization(\"StrandoftheAncients\")\n\nL:SetGeneralLocalization({\n\tname = \"Берег Древних\"\n})\n\n------------------------\n--  Isle of Conquest  --\n------------------------\nL = DBM:GetModLocalization(\"IsleofConquest\")\n\nL:SetGeneralLocalization({\n\tname = \"Остров Завоеваний\"\n})\n\nL:SetWarningLocalization({\n\tWarnSiegeEngine\t\t= \"Осадная машина готова!\",\n\tWarnSiegeEngineSoon\t= \"Осадная машина через ~10 сек\"\n})\n\nL:SetTimerLocalization({\n\tTimerSiegeEngine\t= \"Осадная машина готова\"\n})\n\nL:SetOptionLocalization({\n\tTimerSiegeEngine\t= \"Отсчет времени до создания Осадной машины\",\n\tWarnSiegeEngine\t\t= \"Предупреждение, когда создание Осадной машины завершено\",\n\tWarnSiegeEngineSoon\t= \"Предупреждение, когда создание Осадной машины почти завершено\"\n})\n\nL:SetMiscLocalization({\n\tSiegeEngine\t\t\t\t= \"Осадная машина\",\n\tGoblinStartAlliance\t\t= \"Видите эти взрывчатые бомбы? Используйте их на воротах, пока я ремонтирую осадную машину!\",\n\tGoblinStartHorde\t\t= \"Я буду работать над осадной машиной, я ты меня прикрывай. Вот, можешь пользоваться этими сефориевыми бомбами, если тебе надо взорвать ворота.\",\n\tGoblinHalfwayAlliance\t= \"Я на полпути! Держите Орду подальше отсюда. В инженерном училище не учат боевым действиям!\",\n\tGoblinHalfwayHorde\t\t= \"Я примерно на полпути! Держите Альянс подальше - драки не в моем контракте!\",\n\tGoblinFinishedAlliance\t= \"Моя лучшая работа на данный момент! Эта осадная машина готова к действию!\",\n\tGoblinFinishedHorde\t\t= \"Осадная машина готова к работе!\",\n\tGoblinBrokenAlliance\t= \"Он уже сломан?! Не стоит беспокоиться. Я ничего не могу исправить.\",\n\tGoblinBrokenHorde\t\t= \"Опять сломано?! Я исправлю это ... только не ожидайте, что гарантия покроет это.\"\n})\n"
  },
  {
    "path": "DBM-PvP/localization.tw.lua",
    "content": "﻿if GetLocale() ~= \"zhTW\" then return end\n\nlocal L\n\n--------------------------\n--  General BG Options  --\n--------------------------\nL = DBM:GetModLocalization(\"PvPGeneral\")\n\nL:SetGeneralLocalization({\n\tname\t= \"基本選項\"\n})\n\nL:SetTimerLocalization({\n\tTimerFlag\t\t= \"旗幟重生\",\n\tTimerShadow\t\t= \"暗影視界\",\n\tTimerStart\t\t= \"戰鬥即將開始\",\n\tTimerWin\t\t= \"勝利在\"\n})\n\nL:SetOptionLocalization({\n\tAutoSpirit\t\t\t= \"自動釋放靈魂\",\n\tColorByClass\t\t= \"在得分視窗中設置玩家名為職業顏色\",\n\tHideBossEmoteFrame\t= \"在戰場時隱藏團隊首領表情框架&要塞/公會提示\",\n\tShowBasesToWin\t\t= \"顯示勝利需要的基地數量\",\n\tShowEstimatedPoints\t= \"顯示戰鬥結束時雙方資源預計值\",\n\tShowFlagCarrier\t\t= \"顯示旗幟攜帶者\",\n\tShowGatesHealth\t\t= \"顯示受損大門的耐久值(當加入一個正在進行的戰場大門耐久值可能會不準確！)\",\n\tShowRelativeGameTime= \"相對於BG開始時間的獲勝計時器（如果禁用，則欄總是看起來滿了）\",\n\tTimerCap\t\t\t= \"顯示奪取計時器\",\n\tTimerFlag\t\t\t= \"顯示旗幟重生計時器\",\n\tTimerShadow\t\t\t= \"顯示暗影視界計時器\",\n\tTimerStart\t\t\t= \"顯示開始計時器\",\n\tTimerWin\t\t\t= \"顯示勝利計時器\",\n})\n\nL:SetMiscLocalization({\n\t--BG 2 minutes\n\tBgStart120TC\t\t= \"戰鬥在2分鐘內開始!\",\n\t--BG 1 minute\n\tBgStart60TC\t\t\t= \"戰鬥在1分鐘內開始!\",\n\tBgStart60AlteracTC\t= \"奧特蘭克山谷一分鐘後開始戰鬥。\",\n\tBgStart60SotA2TC\t= \"遠祖灘頭的第2回合戰鬥將在1分鐘後開始。\",\n\tBgStart60WarsongTC\t= \"戰歌峽谷戰鬥將在1分鐘內開始。\",\n\t-- BG 30 seconds\n\tBgStart30TC\t\t\t= \"戰鬥在30秒內開始!\",\n\tBgStart30AlteracTC\t= \"奧特蘭克山谷30秒後開始戰鬥。\",\n\tBgStart30SotA2TC\t= \"第2回合將在30秒後開始。做好準備!\",\n\tBgStart30WarsongTC\t= \"戰歌峽谷戰鬥將在30秒鐘內開始。做好準備!\",\n\t--\n\tArenaInvite\t\t\t= \"競技場邀請\",\n\tStart60TC\t\t\t= \"1分鐘後競技場戰鬥開始!\",\n\tStart30TC\t\t\t= \"30秒後競技場戰鬥開始!\",\n\tStart15TC\t\t\t= \"15秒後競技場戰鬥開始!\",\n\tBasesToWin\t\t\t= \"勝利需要基地: %d\",\n\tWinBarText\t\t\t= \"%s 勝利\",\n\t-- Flag carrying system\n\tFlag\t\t\t\t= \"旗幟\",\n\tFlagResetTC\t\t\t= \"旗幟已重置。\",\n\tFlagTakenTC\t\t\t= \"(.+)已經奪走了旗幟!\",\n\tFlagCapturedTC\t\t= \".+已奪得旗幟!\",\n\tFlagDroppedTC\t\t= \"旗幟已經掉落!\",\n\t--\n\tExprFlagPickUpATC\t= \"聯盟的旗幟被(.+)拔掉了!\",\n\tExprFlagPickUpHTC\t= \"部落的旗幟被(.+)拔起了!\",\n\tExprFlagCapturedTC\t= \"(.+)奪取了.+的旗幟!\",\n\tExprFlagReturnTC\t= \".+的旗幟被(.+)歸還到它的基地了!\",\n\tExprFlagDroppedTC\t= \".+的旗幟被(.+)丟掉了!\",\n\tVulnerable1\t\t\t= \"旗幟攜帶者變得脆弱了！\",\n\tVulnerable2\t\t\t= \"旗幟攜帶者變得更加的脆弱了！\",\n\t-- Gates\n\tGatesHealthFrame\t\t\t\t= \"受損的大門\",\n\tHordeGateFront\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t 前門\",\n\tHordeGateFrontDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t 前門\",\n\tHordeGateWest\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t 西門\",\n\tHordeGateWestDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t 西門\",\n\tHordeGateEast\t\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:127:143:92:107|t 東門\",\n\tHordeGateEastDestroyedTex\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:163:179:92:107|t 東門\",\n\tAllianceGateFront\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t 前門\",\n\tAllianceGateFrontDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t 前門\",\n\tAllianceGateWest\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t 西門\",\n\tAllianceGateWestDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t 西門\",\n\tAllianceGateEast\t\t\t\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:181:197:92:107|t 東門\",\n\tAllianceGateEastDestroyedTex\t= \"|TInterface\\\\MINIMAP\\\\POIICONS.BLP:16:16:0:0:256:256:217:233:92:107|t 東門\",\n\t-- Strands of the Ancients Gates emotes\n\tGreenEmeraldAttacked\t\t\t= \"碧翠之門遭到攻擊!\",\n\tGreenEmeraldDestroyed\t\t\t= \"碧翠之門被摧毀!\",\n\tBlueSapphireAttacked\t\t\t= \"藍晶之門遭到攻擊!\",\n\tBlueSapphireDestroyed\t\t\t= \"藍晶之門被摧毀!\",\n\tPurpleAmethystAttacked\t\t\t= \"紫晶之門遭到攻擊!\",\n\tPurpleAmethystDestroyed\t\t\t= \"紫晶之門被摧毀!\",\n\tRedSunAttacked\t\t\t\t\t= \"紅日之門遭到攻擊!\",\n\tRedSunDestroyed\t\t\t\t\t= \"紅日之門被摧毀!\",\n\tYellowMoonAttacked\t\t\t\t= \"黃月之門遭到攻擊!\",\n\tYellowMoonDestroyed\t\t\t\t= \"黃月之門被摧毀!\",\n\tChamberAncientRelicsAttacked\t= \"聖物間遭受攻擊!\",\n\tChamberAncientRelicsDestroyed\t= \"聖物間已經被攻破了!泰坦聖物十分危急!\",\n\t-- Isle of Conquest Gates CHAT_MSG_BG_SYSTEM_NEUTRAL messages\n\tHordeGateFrontDestroyedTC\t\t= \"部落要塞的正門已經被摧毀了!\",\n\tHordeGateWestDestroyedTC\t\t= \"部落要塞的西門已經被摧毀了!\",\n\tHordeGateEastDestroyedTC\t\t= \"部落要塞的東門已經被摧毀了!\",\n\tAllianceGateFrontDestroyedTC\t= \"聯盟要塞的正門已經被摧毀了!\",\n\tAllianceGateWestDestroyedTC\t\t= \"聯盟要塞的西門已經被摧毀了!\",\n\tAllianceGateEastDestroyedTC\t\t= \"聯盟要塞的東門已經被摧毀了!\",\n})\n\n----------------------\n--  Alterac Valley  --\n----------------------\nL = DBM:GetModLocalization(\"AlteracValley\")\n\nL:SetGeneralLocalization({\n\tname\t\t= \"奧特蘭克山谷\"\n})\n\nL:SetOptionLocalization({\n\tAutoTurnIn\t= \"自動繳交任務物品\"\n})\n\n--------------------\n--  Arathi Basin  --\n--------------------\nL = DBM:GetModLocalization(\"ArathiBasin\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"阿拉希盆地\"\n})\n\n------------------------\n--  Eye of the Storm  --\n------------------------\nL = DBM:GetModLocalization(\"EyeoftheStorm\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"暴風之眼\"\n})\n\n---------------------\n--  Warsong Gulch  --\n---------------------\nL = DBM:GetModLocalization(\"WarsongGulch\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"戰歌峽谷\"\n})\n\n------------------------------\n--  Strand of the Ancients  --\n------------------------------\nL = DBM:GetModLocalization(\"StrandoftheAncients\")\n\nL:SetGeneralLocalization({\n\tname = \"遠祖灘頭\"\n})\n\n------------------------\n--  Isle of Conquest  --\n------------------------\n\nL = DBM:GetModLocalization(\"IsleofConquest\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"征服之島\"\n})\n\nL:SetWarningLocalization({\n\tWarnSiegeEngine\t\t= \"攻城機具準備好了！\",\n\tWarnSiegeEngineSoon\t= \"0秒後 攻城機具\"\n})\n\nL:SetTimerLocalization({\n\tTimerSiegeEngine\t= \"攻城機具修復\"\n})\n\nL:SetOptionLocalization({\n\tTimerSiegeEngine\t= \"為攻城機具的修復顯示計時器\",\n\tWarnSiegeEngine\t\t= \"當攻城機具準備好時顯示警告\",\n\tWarnSiegeEngineSoon\t= \"當攻城機具接近準備好時顯示警告\"\n})\n\nL:SetMiscLocalization({\n\tSiegeEngine\t\t\t\t= \"攻城機具\",\n\tGoblinStartAlliance\t\t= \"看到那些爆鹽炸彈了嗎?當我維修攻城機具的時候用它們來轟破大門！\",\n\tGoblinStartHorde\t\t= \"修理攻城機具的工作就交給我，幫我看著點就夠了。如果你想要轟破大門的話，儘管把那些爆鹽炸彈拿去用吧！\",\n\tGoblinHalfwayAlliance\t= \"我已經修好一半了!別讓部落靠近。工程學院可沒有教我們如何作戰喔！\",\n\tGoblinHalfwayHorde\t\t= \"我已經修好一半了!別讓聯盟靠近 - 我的合約裡可沒有作戰這一條！\",\n\tGoblinFinishedAlliance\t= \"我有史以來最得意的作品!這台攻城機具已經可以上場囉！\",\n\tGoblinFinishedHorde\t\t= \"這台攻城機具已經可以上場啦！\",\n\tGoblinBrokenAlliance\t= \"這麼快就壞啦?!別擔心，再壞的情況我都可以修得好。\",\n\tGoblinBrokenHorde\t\t= \"又壞掉了嗎?!讓我來修理吧…但別指望產品的保固會幫你支付這一切。\"\n})\n"
  },
  {
    "path": "DBM-Serpentshrine/DBM-Serpentshrine.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Serpentshrine Cavern|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0불뱀 제단|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Höhle des Schlangenschreins|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Caverna Santuario Serpiente|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Caverne du sanctuaire du Serpent|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0毒蛇神殿|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0毒蛇神殿洞穴|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Змеиное святилище|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMSerpentshrine_AllSavedVars\n## SavedVariablesPerCharacter: DBMSerpentshrine_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: BC\n## X-DBM-StatTypes: normal25, timewalking\n## X-DBM-Mod-MapID: 781\n## X-DBM-Mod-Sort: 1005\n## X-DBM-Mod-Name: Serpentshrine Cavern\n## X-DBM-Mod-Name-koKR: 불뱀 제단\n## X-DBM-Mod-Name-deDE: Höhle des Schlangenschreins\n## X-DBM-Mod-Name-esES: Caverna Santuario Serpiente\n## X-DBM-Mod-Name-esMX: Caverna Santuario Serpiente\n## X-DBM-Mod-Name-frFR: Caverne du sanctuaire du Serpent\n## X-DBM-Mod-Name-zhCN: 毒蛇神殿\n## X-DBM-Mod-Name-zhCN: 毒蛇神殿洞穴\n## X-DBM-Mod-Name-ruRU: Змеиное святилище\n## X-DBM-Mod-LoadZone: Serpentshrine Cavern\n## X-DBM-Mod-LoadZone-koKR: 불뱀 제단\n## X-DBM-Mod-LoadZone-deDE: Höhle des Schlangenschreins\n## X-DBM-Mod-LoadZone-esES: Caverna Santuario Serpiente\n## X-DBM-Mod-LoadZone-esMX: Caverna Santuario Serpiente\n## X-DBM-Mod-LoadZone-frFR: Caverne du sanctuaire du Serpent\n## X-DBM-Mod-LoadZone-zhCN: 毒蛇神殿\n## X-DBM-Mod-LoadZone-zhTW: 毒蛇神殿洞穴\n## X-DBM-Mod-LoadZone-ruRU: Змеиное святилище\n\nlocalization.en.lua\nlocalization.cn.lua\nlocalization.de.lua\nlocalization.es.lua\nlocalization.fr.lua\nlocalization.kr.lua\nlocalization.ru.lua\nlocalization.tw.lua\n\nHydross.lua\nTheLurkerBelow.lua\nLeotheras.lua\nFathomlord.lua\nTidewalker.lua\nVashj.lua\n"
  },
  {
    "path": "DBM-Serpentshrine/Fathomlord.lua",
    "content": "local mod\t= DBM:NewMod(\"Fathomlord\", \"DBM-Serpentshrine\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(21214)\nmod:SetEncounterID(626)\n\n--mod:SetModelID(20662)\n\nmod:RegisterCombat(\"combat_yell\", L.YellPull)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 38451 38452 38455\",\n\t\"SPELL_CAST_START 38330 38445\",\n\t\"SPELL_CAST_SUCCESS 38441\",\n\t\"SPELL_SUMMON 38306 38304 38236\"\n)\n\nlocal warnCariPower\t\t\t\t= mod:NewSpellAnnounce(38451, 3)\nlocal warnTidalPower\t\t\t= mod:NewSpellAnnounce(38452, 3)\nlocal warnSharPower\t\t\t\t= mod:NewSpellAnnounce(38455, 3)\n\nlocal specWarnHeal\t\t\t\t= mod:NewSpecialWarningInterrupt(38330, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnCleansingTotem\t= mod:NewSpecialWarningSwitch(38306, \"Dps\", nil, nil, 1, 2)\nlocal specWarnEarthbindTotem\t= mod:NewSpecialWarningSwitch(38304, \"Dps\", nil, nil, 1, 2)\nlocal specWarnSpitfireTotem\t\t= mod:NewSpecialWarningSwitch(38236, \"Dps\", nil, nil, 1, 2)\n\nlocal timerCataclysmicBolt\t\t= mod:NewNextTimer(10, 38441, nil, \"Healer\", nil, 2)\nlocal timerSearNova\t\t\t\t= mod:NewVarTimer(\"v20-40\", 38445, nil, nil, nil, 2)\nlocal timerCleansingTotem\t\t= mod:NewNextTimer(30, 38306, nil, nil, nil, 5)\nlocal timerEarthbindTotem\t\t= mod:NewNextTimer(45, 38304, nil, nil, nil, 5)\nlocal timerSpitfireTotem\t\t= mod:NewNextTimer(60, 38236, nil, nil, nil, 5)\n\nlocal berserkTimer\t\t\t\t= mod:NewBerserkTimer(600)\n\nfunction mod:OnCombatStart(delay)\n\tberserkTimer:Start(-delay)\n\ttimerCataclysmicBolt:Start(-delay)\n\ttimerSearNova:Start(-delay)\n\ttimerCleansingTotem:Start(-delay)\n\ttimerEarthbindTotem:Start(-delay)\n\ttimerSpitfireTotem:Start(-delay)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 38451 then\n\t\twarnCariPower:Show()\n\telseif args.spellId == 38452 then\n\t\twarnTidalPower:Show()\n\t\ttimerCleansingTotem:Cancel()\n\t\ttimerEarthbindTotem:Cancel()\n\t\ttimerSpitfireTotem:Start(27) -- Spitfire Totem has a new timer\n\telseif args.spellId == 38455 then\n\t\twarnSharPower:Show()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 38330 then\n\t\tif self:CheckInterruptFilter(args.sourceGUID) then\n\t\t\tspecWarnHeal:Show(args.sourceName)\n\t\t\tspecWarnHeal:Play(\"kickcast\")\n\t\tend\n\telseif args.spellId == 38445 then\n\t\ttimerSearNova:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 38441 then\n\t\ttimerCataclysmicBolt:Start()\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 38306 then\n\t\tspecWarnCleansingTotem:Show()\n\t\tspecWarnCleansingTotem:Play(\"attacktotem\")\n\t\ttimerCleansingTotem:Start()\n\telseif args.spellId == 38304 then\n\t\tspecWarnEarthbindTotem:Show()\n\t\tspecWarnEarthbindTotem:Play(\"attacktotem\")\n\t\ttimerEarthbindTotem:Start()\n\telseif args.spellId == 38236 then\n\t\tspecWarnSpitfireTotem:Show()\n\t\tspecWarnSpitfireTotem:Play(\"attacktotem\")\n\t\tlocal cId = self:GetCIDFromGUID(args.sourceGUID)\n\t\tif cId == 21965 then -- Tidalvess\n\t\t\ttimerSpitfireTotem:Start()\n\t\telseif cId == 21214 then -- Karathress\n\t\t\ttimerSpitfireTotem:Start(27)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Serpentshrine/Hydross.lua",
    "content": "local mod\t= DBM:NewMod(\"Hydross\", \"DBM-Serpentshrine\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(21216)\nmod:SetEncounterID(623)\n\n--mod:SetModelID(20162)\n\nmod:RegisterCombat(\"combat_yell\", L.YellPull)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 38235 38246 37935\",\n\t\"SPELL_AURA_REMOVED 38246 37935\",\n\t\"SPELL_CAST_SUCCESS 38215 38216 38217 38219 38220 38221 38218 38231 40584 38222 38230 40583 25035 38235\"\n)\n\n--[[\n(ability.id = 38215 or ability.id = 38216 or ability.id = 38217 or ability.id = 38219 or ability.id = 38220 or ability.id = 38221\n or ability.id = 38218 or ability.id = 38231 or ability.id = 40584 or ability.id = 38222 or ability.id = 38230 or ability.id = 40583\n or ability.id = 25035) and type = \"cast\"\n--]]\nlocal warnMark\t\t= mod:NewAnnounce(\"WarnMark\", 3, 38215)\nlocal warnPhase\t\t= mod:NewAnnounce(\"WarnPhase\", 4)\nlocal warnTomb\t\t= mod:NewTargetNoFilterAnnounce(38235, 3)\nlocal warnSludge\t= mod:NewTargetNoFilterAnnounce(38246, 2)--Maybe filter it some if spammy?\n\nlocal specWarnMark\t= mod:NewSpecialWarning(\"SpecWarnMark\")\n\nlocal timerMark\t\t= mod:NewTimer(15, \"TimerMark\", 38215, nil, nil, 2)\nlocal timerSludge\t= mod:NewTargetTimer(24, 38246, nil, nil, nil, 3)\nlocal timerTomb\t\t= mod:NewVarTimer(\"v7-8\", 38235, nil, nil, nil, 3)\n\nlocal berserkTimer\t= mod:NewBerserkTimer(600)\n\nmod:AddRangeFrameOption(\"10\")\n\nlocal markOfH, markOfC = DBM:GetSpellInfo(38215), DBM:GetSpellInfo(38219)\nlocal damage = {\n\t[38215] = \"10%\", [38216] = \"25%\", [38217] = \"50%\", [38218] = \"100%\", [38231] = \"250%\", [40584] = \"500%\",\n\t[38219] = \"10%\", [38220] = \"25%\", [38221] = \"50%\", [38222] = \"100%\", [38230] = \"250%\", [40583] = \"500%\",\n}\n\nlocal damageNext = {\n\t[38215] = \"25%\", [38216] = \"50%\", [38217] = \"100%\", [38218] = \"250%\", [38231] = \"500%\", [40584] = \"500%\",\n\t[38219] = \"25%\", [38220] = \"50%\", [38221] = \"100%\", [38222] = \"250%\", [38230] = \"500%\", [40583] = \"500%\",\n}\n\nfunction mod:OnCombatStart(delay)\n\ttimerMark:Start(14.5-delay, markOfH, \"10%\")\n\ttimerTomb:Start(-delay)\n\tberserkTimer:Start(-delay)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show()\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 38235 then\n\t\twarnTomb:CombinedShow(0.3, args.destName)\n\telseif spellId == 38246 then\n\t\twarnSludge:Show(args.destName)\n\t\ttimerSludge:Start(args.destName)\n\telseif spellId == 37935 and args:GetDestCreatureID() == 21216 then -- Cleansing Field - Water form -\n\t\twarnPhase:Show(L.Frost)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 38246 then\n\t\ttimerSludge:Stop(args.destName)\n\telseif spellId == 37935 and args:GetDestCreatureID() == 21216 then -- Cleansing Field - Poison form -\n\t\twarnPhase:Show(L.Nature)\n\t\ttimerTomb:Cancel()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(38215, 38216, 38217, 38219, 38220, 38221) then\n\t\twarnMark:Show(args.spellName, damage[args.spellId] or \"10%\")\n\t\ttimerMark:Cancel()\n\t\ttimerMark:Show(args.spellName, damageNext[args.spellId] or \"10%\")\n\telseif args:IsSpellID(38218, 38231, 40584, 38222, 38230, 40583) then\n\t\twarnMark:Show(args.spellName, damage[args.spellId] or \"10%\")\n\t\tspecWarnMark:Show(args.spellName, damage[args.spellId] or \"10%\")\n\t\ttimerMark:Cancel()\n\t\ttimerMark:Show(args.spellName, damageNext[args.spellId] or \"10%\")\n\telseif args.spellId == 25035 and self:AntiSpam(2) then\n\t\tDBM:Addsg(\"Elemental Spawn-in unhidden from combat log. Notify Zidras on Discord or GitHub\")\n\t\ttimerMark:Cancel()\n\t\tif args:GetSrcCreatureID() == 22035 then\n\t\t\twarnPhase:Show(L.Frost)\n\t\t\ttimerMark:Start(15.4, markOfH, \"10%\")\n\t\telseif args:GetSrcCreatureID() == 22036 then\n\t\t\twarnPhase:Show(L.Nature)\n\t\t\ttimerMark:Start(15.4, markOfC, \"10%\")\n\t\tend\n\telseif args.spellId == 38235 then\n\t\ttimerTomb:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Serpentshrine/Leotheras.lua",
    "content": "local mod\t= DBM:NewMod(\"Leotheras\", \"DBM-Serpentshrine\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(21215)\nmod:SetEncounterID(625)\n\n--mod:SetModelID(20514)\nmod:SetUsedIcons(5, 6, 7, 8)\nmod:SetHotfixNoticeRev(20220812000000)\nmod:SetMinSyncRevision(20220812000000)\n\nmod:RegisterCombat(\"yell\", L.YellPull) -- avoid using combat for this boss because attacking it on pull causes mod to engage.\n\n--Not using RegisterEventsInCombat on purpose because it uses weird combat rules\n--[[mod:RegisterEvents(\n\t\"UNIT_DIED\"\n)]]\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 37640 37676 37749\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal warnPhase\t\t\t\t\t= mod:NewAnnounce(\"WarnPhase\", 2)\nlocal warnDemon\t\t\t\t\t= mod:NewTargetAnnounce(37676, 4)\nlocal warnMC\t\t\t\t\t= mod:NewTargetNoFilterAnnounce(37749, 4)\nlocal warnPhase2\t\t\t\t= mod:NewPhaseAnnounce(2, 2)\n\nlocal specWarnWhirl\t\t\t\t= mod:NewSpecialWarningRun(37640, nil, nil, nil, 4, 2)\nlocal specWarnDemon\t\t\t\t= mod:NewSpecialWarningYou(37676, nil, nil, nil, 1, 2)\n\nlocal timerWhirlCD\t\t\t\t= mod:NewCDTimer(27, 37640, nil, nil, nil, 2) -- 25 man FM 2022/07/27 log - 27.0, 27.1, 27.0\nlocal timerWhirl\t\t\t\t= mod:NewBuffActiveTimer(12, 37640, nil, nil, nil, 2)\nlocal timerPhase\t\t\t\t= mod:NewTimer(60, \"TimerPhase\", 39088, nil, nil, 6)\nlocal timerInsidiousWhisperCD\t= mod:NewCDTimer(26, 37676, nil, nil, nil, 6) -- REVIEW! variance? (25 man FM 2022/07/27 log) - 26\nlocal timerInsidiousWhisper\t\t= mod:NewBuffFadesTimer(30, 37676, nil, nil, nil, 6)\n\nlocal berserkTimer\t\t\t\t= mod:NewBerserkTimer(600)\n\nmod:AddSetIconOption(\"DemonIcon\", 37676, false, false, {8, 7, 6, 5})\n\nlocal warnDemonTargets = {}\nlocal warnMCTargets = {}\n--mod.vb.binderKill = 0\nmod.vb.demonIcon = 8\nmod.vb.whirlCount = 0\n\nlocal function humanWarns(self)\n\tself.vb.whirlCount = 0\n\twarnPhase:Show(L.Human)\n\ttimerWhirlCD:Start(13) -- REVIEW! variance? (25 man FM 2022/07/27 log) - 13\n\ttimerPhase:Start(nil, L.Demon)\nend\n\nlocal function showDemonTargets(self)\n\twarnDemon:Show(table.concat(warnDemonTargets, \"<, >\"))\n\ttable.wipe(warnDemonTargets)\n\tself.vb.demonIcon = 8\n\ttimerInsidiousWhisper:Start()\nend\n\nlocal function showMCTargets()\n\twarnMC:Show(table.concat(warnMCTargets, \"<, >\"))\n\ttable.wipe(warnMCTargets)\nend\n\nfunction mod:OnCombatStart()\n\tself.vb.demonIcon = 8\n\tself.vb.whirlCount = 0\n\tself:SetStage(1)\n\ttable.wipe(warnMCTargets)\n\ttable.wipe(warnDemonTargets)\n\ttimerWhirlCD:Start(15.0) -- 25 man FM 2022/07/27 log - 15.0\n\ttimerPhase:Start(60, L.Demon)\n\tberserkTimer:Start()\nend\n\nfunction mod:OnCombatEnd()\n--\tself.vb.binderKill = 0\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 37640 then\n\t\tspecWarnWhirl:Show()\n\t\tspecWarnWhirl:Play(\"justrun\")\n\t\ttimerWhirl:Start()\n\t\tif self.vb.phase ~= 2 then\n\t\t\tself.vb.whirlCount = self.vb.whirlCount + 1\n\t\t\tif self.vb.whirlCount < 3 then\n\t\t\t\ttimerWhirlCD:Start()\n\t\t\tend\n\t\telse\n\t\t\ttimerWhirlCD:Start()\n\t\tend\n\telseif args.spellId == 37676 then\n\t\twarnDemonTargets[#warnDemonTargets + 1] = args.destName\n\t\tself:Unschedule(showDemonTargets)\n\t\tif self.Options.DemonIcon then\n\t\t\tself:SetIcon(args.destName, self.vb.demonIcon)\n\t\t\tself.vb.demonIcon = self.vb.demonIcon - 1\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnDemon:Show()\n\t\t\tspecWarnDemon:Play(\"targetyou\")\n\t\tend\n\t\tif #warnDemonTargets >= 5 then\n\t\t\tshowDemonTargets(self)\n\t\telse\n\t\t\tself:Schedule(0.7, showDemonTargets, self)\n\t\tend\n\telseif args.spellId == 37749 then\n\t\twarnMCTargets[#warnMCTargets + 1] = args.destName\n\t\tself:Unschedule(showMCTargets)\n\t\tself:Schedule(0.3, showMCTargets)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.YellDemon or msg:find(L.YellDemon) then\n\t\twarnPhase:Show(L.Demon)\n\t\ttimerWhirl:Cancel()\n\t\ttimerWhirlCD:Cancel()\n\t\ttimerPhase:Cancel()\n\t\ttimerInsidiousWhisperCD:Start()\n\t\ttimerPhase:Start(nil, L.Human)\n\t\tself:Schedule(60, humanWarns, self)\n\telseif msg == L.YellPhase2 or msg:find(L.YellPhase2) then\n\t\tself:SetStage(2)\n\t\tself:Unschedule(humanWarns)\n\t\ttimerPhase:Cancel()\n\t\ttimerWhirl:Cancel()\n\t\ttimerWhirlCD:Cancel()\n\t\ttimerInsidiousWhisperCD:Cancel()\n\t\twarnPhase2:Show()\n\t\ttimerWhirlCD:Start(11.5) -- REVIEW! variance? (25 man FM 2022/07/27 log) - 11.5\n\tend\nend\n\n--TODO, with ENCOUNTER_START this may not be needed anymore, but also have to make sure ES is in right place too, it wasn't on retail which is why this method exists\n--[[function mod:UNIT_DIED(args)\n\tlocal cId = self:GetCIDFromGUID(args.destGUID)\n\tif cId == 21806 then\n\t\tself.vb.binderKill = self.vb.binderKill + 1\n\t\tif self.vb.binderKill == 3 and not self:IsInCombat() then\n\t\t\tDBM:StartCombat(self, 0)\n\t\tend\n\tend\nend]]\n"
  },
  {
    "path": "DBM-Serpentshrine/TheLurkerBelow.lua",
    "content": "local mod\t= DBM:NewMod(\"LurkerBelow\", \"DBM-Serpentshrine\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(21217)\nmod:SetEncounterID(624)\n\n--mod:SetModelID(20216)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 20568\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t--\"UNIT_DIED\",\n\t\"UNIT_SPELLCAST_SUCCEEDED\"\n)\n\nlocal warnSubmerge\t\t= mod:NewAnnounce(\"WarnSubmerge\", 2, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendBurrow.blp\")\nlocal warnEmerge\t\t= mod:NewAnnounce(\"WarnEmerge\", 1, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\")\nlocal warnWhirl\t\t\t= mod:NewSpellAnnounce(37363, 2)\n\nlocal specWarnSpout\t\t= mod:NewSpecialWarningSpell(37433, nil, nil, nil, 2, 2)\n\nlocal timerSubmerge\t\t= mod:NewTimer(120, \"TimerSubmerge\", \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendBurrow.blp\", nil, nil, 6)\nlocal timerEmerge\t\t= mod:NewTimer(60, \"TimerEmerge\", \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\", nil, nil, 6)\nlocal timerSpoutCD\t\t= mod:NewCDTimer(71, 37433, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON) -- REVIEW! variance? (25 man FM log 2022/08/11) - 118.5 (happened right after emerge)\nlocal timerSpoutCast\t= mod:NewCastTimer(3, 37433, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerSpout\t\t= mod:NewBuffActiveTimer(22, 37433, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerWhirlCD\t\t= mod:NewCDTimer(18, 37363, nil, nil, nil, 2, nil, nil, true) -- REVIEW! variance? (25 man FM log 2022/08/11) - 18.0, (after emerge) 100.5\n\nmod.vb.submerged = false\n--mod.vb.guardianKill = 0\n--mod.vb.ambusherKill = 0\n\nlocal whirlName = GetSpellInfo(37660)\n\n--[[\nlocal function emerged(self)\n\tself.vb.submerged = false\n\ttimerEmerge:Cancel()\n\twarnEmerge:Show()\n\ttimerSubmerge:Start()\nend\n]]\n\nlocal function submerged(self)\n\tself:SetStage(2)\n\tself.vb.submerged = true\n\tself.vb.guardianKill = 0\n\tself.vb.ambusherKill = 0\n\ttimerSubmerge:Cancel()\n\ttimerSpoutCD:Cancel()\n\ttimerWhirlCD:Cancel()\n\twarnSubmerge:Show()\n\ttimerEmerge:Start()\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tself.vb.submerged = false\n\ttimerWhirlCD:Start(-delay)\n\ttimerSpoutCD:Start(36-delay)\n\ttimerSubmerge:Start(90-delay)\n\tself:Schedule(90-delay, submerged, self)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 20568 then -- Ragnaros Emerge. Fires when boss emerges\n\t\tself:SetStage(1)\n\t\ttimerEmerge:Cancel()\n\t\twarnEmerge:Show()\n\t\ttimerSubmerge:Start()\n\t\tself:Schedule(120, submerged, self)\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(_, source)\n\tif (source or \"\") == L.name then\n\t\tspecWarnSpout:Show()\n\t\tspecWarnSpout:Play(\"watchwave\")\n\t\ttimerSpoutCast:Start()\n\t\ttimerSpout:Schedule(3) -- takes 3 seconds to start Spout (from EMOTE to UNIT_SPELLCAST_SUCCEEDED)\n\t\ttimerSpoutCD:Start()\n\tend\nend\n\n-- Onyxia PTR as of 13.02.2025 it fires SPELL_CAST_START with spellId 20568 on emerge each time\n--[[\nfunction mod:UNIT_DIED(args)\n\tlocal cId = self:GetCIDFromGUID(args.destGUID)\n\tif cId == 21865 then\n\t\tself.vb.ambusherKill = self.vb.ambusherKill + 1\n\t\tif self.vb.ambusherKill == 6 and self.vb.guardianKill == 3 and self.vb.submerged then\n\t\t\tself:Unschedule(emerged)\n\t\t\tself:Schedule(2, emerged, self)\n\t\tend\n\telseif cId == 21873 then\n\t\tself.vb.guardianKill = self.vb.guardianKill + 1\n\t\tif self.vb.ambusherKill == 6 and self.vb.guardianKill == 3 and self.vb.submerged then\n\t\t\tself:Unschedule(emerged)\n\t\t\tself:Schedule(2, emerged, self)\n\t\tend\n\tend\nend\n]]\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\t--[[if spellName == GetSpellInfo(28819) and self:AntiSpam(2, 1) then--Submerge Visual\n\t\tDBM:AddMsg(\"Submerge Visual unhidden from event log. Notify Zidras on Discord or GitHub\")\n\t\tself:SendSync(\"Submerge\")]]\n\tif spellName == whirlName and self:AntiSpam(2, 2) then\n\t\tself:SendSync(\"Whirl\")\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif not self:IsInCombat() then return end\n\tif msg == \"Submerge\" then\n\t\tDBM:AddMsg(\"Submerge is being synced by something. Notify Zidras on Discord or GitHub with a Transcriptor log\")\n--[[\tself.vb.submerged = true\n\t\tself.vb.guardianKill = 0\n\t\tself.vb.ambusherKill = 0\n\t\ttimerSubmerge:Cancel()\n\t\ttimerSpoutCD:Cancel()\n\t\ttimerWhirlCD:Cancel()\n\t\twarnSubmerge:Show()\n\t\ttimerEmerge:Start()\n\t\tself:Schedule(60, emerged, self)\n]]\telseif msg == \"Whirl\" then\n\t\twarnWhirl:Show()\n\t\ttimerWhirlCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Serpentshrine/Tidewalker.lua",
    "content": "local mod\t= DBM:NewMod(\"Tidewalker\", \"DBM-Serpentshrine\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetEncounterID(627)\nmod:SetCreatureID(21213)\n\n--mod:SetModelID(20739)\nmod:SetUsedIcons(5, 6, 7, 8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 37730\",\n\t\"SPELL_CAST_SUCCESS 37764\",\n\t\"SPELL_AURA_APPLIED 37850 38023 38024 38025 38049\",\n\t\"SPELL_SUMMON 37854\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\"\n)\n\nlocal warnTidal\t\t\t= mod:NewSpellAnnounce(37730, 3)\nlocal warnGrave\t\t\t= mod:NewTargetNoFilterAnnounce(38049, 4)--TODO, make run out special warning instead?\nlocal warnBubble\t\t= mod:NewSpellAnnounce(37854, 4)\n\nlocal specWarnMurlocs\t= mod:NewSpecialWarning(\"SpecWarnMurlocs\", nil, nil, nil, nil, nil, nil, 24984, 37764)\n\nlocal timerGraveCD\t\t= mod:NewCDTimer(30, 38049, nil, nil, nil, 3) -- REVIEW! variance? (25 man FM log 2022/07/27 || 25 man FM log 2022/08/11) - 30.1, 30.0, 30.0, 30.0, 30.0 || 32.0, 30.1, 30.1\nlocal timerMurlocs\t\t= mod:NewTimer(45, \"TimerMurlocs\", 39088, nil, nil, 1, nil, nil, nil, nil, nil, nil, nil, 37764)\nlocal timerBubble\t\t= mod:NewBuffActiveTimer(35, 37854, nil, nil, nil, 1)\n\nmod:AddSetIconOption(\"GraveIcon\", 38049, true, false, {8, 7, 6, 5})\n\nlocal warnGraveTargets = {}\nmod.vb.graveIcon = 8\n\nlocal function showGraveTargets(self)\n\twarnGrave:Show(table.concat(warnGraveTargets, \"<, >\"))\n\ttable.wipe(warnGraveTargets)\n\tself.vb.graveIcon = 8\nend\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.graveIcon = 8\n\ttable.wipe(warnGraveTargets)\n\ttimerGraveCD:Start(20-delay)\n\ttimerMurlocs:Start(-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 37730 then\n\t\twarnTidal:Show()\n\tend\nend\n\n--[[function mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 37764 then\n\t\tspecWarnMurlocs:Show()\n\t\ttimerMurlocs:Start()\n\tend\nend]]\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(37850, 38023, 38024, 38025, 38049) then -- Watery Grave. Warmane bugged this (as of 2022/08/11) and it's not triggering the ability at random intervals. The emote still fires every 30 seconds, so use that for timer\n\t\twarnGraveTargets[#warnGraveTargets + 1] = args.destName\n\t\tself:Unschedule(showGraveTargets)\n\t\tif self.Options.GraveIcon then\n\t\t\tself:SetIcon(args.destName, self.vb.graveIcon)\n\t\tend\n\t\tself.vb.graveIcon = self.vb.graveIcon - 1\n\t\tif #warnGraveTargets >= 4 then\n\t\t\tshowGraveTargets(self)\n\t\telse\n\t\t\tself:Schedule(0.3, showGraveTargets, self)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 37854 and self:AntiSpam(30) then\n\t\twarnBubble:Show()\n\t\ttimerBubble:Start()\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)\n\tif msg == L.Grave or msg:find(L.Grave) then\n\t\ttimerGraveCD:Show()\n\telseif msg == L.Murlocs or msg:find(L.Murlocs) then\n\t\tspecWarnMurlocs:Show()\n\t\ttimerMurlocs:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Serpentshrine/Vashj.lua",
    "content": "local mod\t= DBM:NewMod(\"Vashj\", \"DBM-Serpentshrine\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(21212)\nmod:SetEncounterID(628)\n--mod:SetModelID(20748)\nmod:SetUsedIcons(1)\nmod:SetHotfixNoticeRev(20210919000000)\nmod:SetMinSyncRevision(20210919000000)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 38280 38575\",\n\t\"SPELL_AURA_REMOVED 38280 38132 38112\",\n\t\"SPELL_CAST_START 38253\",\n\t\"SPELL_CAST_SUCCESS 38316 38509\",\n\t\"UNIT_DIED\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"CHAT_MSG_LOOT\",\n\t\"PARTY_LOOT_METHOD_CHANGED\"\n)\n\nlocal warnCharge\t\t= mod:NewTargetNoFilterAnnounce(38280, 4)\nlocal warnEntangle\t\t= mod:NewSpellAnnounce(38316, 3)\nlocal warnPhase2\t\t= mod:NewPhaseAnnounce(2)\nlocal warnElemental\t\t= mod:NewAnnounce(\"WarnElemental\", 4, 31687)\nlocal warnStrider\t\t= mod:NewAnnounce(\"WarnStrider\", 3, 475)\nlocal warnNaga\t\t\t= mod:NewAnnounce(\"WarnNaga\", 3, 2120)\nlocal warnShield\t\t= mod:NewAnnounce(\"WarnShield\", 3, 38112)\nlocal warnLoot\t\t\t= mod:NewAnnounce(\"WarnLoot\", 4, 38132)\nlocal warnPhase3\t\t= mod:NewPhaseAnnounce(3)\n\n--local specWarnCore\t\t= mod:NewSpecialWarning(\"SpecWarnCore\", nil, nil, nil, 1, 8)\nlocal specWarnCharge\t= mod:NewSpecialWarningMoveAway(38280, nil, nil, nil, 1, 2)\nlocal yellCharge\t\t= mod:NewYell(38280)\nlocal specWarnElemental\t= mod:NewSpecialWarning(\"SpecWarnElemental\")\nlocal specWarnToxic\t\t= mod:NewSpecialWarningMove(38575, nil, nil, nil, 1, 2)\n\nlocal timerEntangleCD\t= mod:NewVarTimer(\"v20-30\", 38316, nil, nil, nil, 3) -- Appears to have 10s variance still as of 15.01.2025 on Onyxia PTR -- pull:29.99/[Stage 1/0.00] 29.99, Stage 2/22.77, Stage 3/270.67, 30.01/300.67/323.44, 25.93, 20.98, 20.12, 24.52\"\nlocal timerCharge\t\t= mod:NewTargetTimer(20, 38280, nil, nil, nil, 3)\nlocal timerChargeCD\t\t= mod:NewVarTimer(\"v10-20\", 38280, nil, nil, nil, 3) -- At least 10s variance as of 15.01.2025 on Onyxia PTR -- pull:15.65/[Stage 1/0.00] 15.65, 16.30, 16.68, Stage 2/4.14, Stage 3/270.67, 11.79/282.45/286.59, 11.26, 15.86, 12.87, 12.57, 14.43, 16.71, 11.34, 11.73\"\nlocal timerShockBlastCD\t= mod:NewVarTimer(\"v10-20\", 38509, nil, nil, nil, 3) -- At least 10s variance as of 15.01.2025 on Onyxia PTR -- pull:18.32/[Stage 1/0.00] 18.32, 11.71, 12.37, Stage 2/10.37, Stage 3/270.67, 19.40/290.07/300.44, 14.63, 10.72, 13.05, 16.88, 10.91, 13.39\nlocal timerElemental\t= mod:NewTimer(15, \"TimerElementalActive\", 39088, nil, nil, 1)\nlocal timerElementalCD\t= mod:NewTimer(50, \"TimerElemental\", 39088, nil, nil, 1) -- Seems to be 50s flat as of 15.01.2025 on Onyxia PTR\nlocal timerStrider\t\t= mod:NewTimer(63, \"TimerStrider\", 475, nil, nil, 1)\nlocal timerNaga\t\t\t= mod:NewTimer(47.5, \"TimerNaga\", 2120, nil, nil, 1)\n--local timerMC\t\t\t= mod:NewCDTimer(21, 38511, nil, nil, nil, 3) -- removed in patch 2.1.\n\nmod:AddRangeFrameOption(10, 38280)\nmod:AddSetIconOption(\"ChargeIcon\", 38280, false, false, {1})\nmod:AddBoolOption(\"AutoChangeLootToFFA\", true)\n\nmod.vb.shieldLeft = 4\nmod.vb.nagaCount = 0\nmod.vb.striderCount = 0\nmod.vb.elementalCount = 0\nlocal cachedLootmethod, _, masterlooterRaidID\nlocal elementals = {}\n\nlocal function StriderSpawn(self)\n\tself.vb.striderCount = self.vb.striderCount + 1\n\twarnStrider:Schedule(57, tostring(self.vb.striderCount + 1))\n\ttimerStrider:Start(nil, tostring(self.vb.striderCount + 1))\n\tself:Schedule(63, StriderSpawn, self)\nend\n\nlocal function NagaSpawn(self)\n\tself.vb.nagaCount = self.vb.nagaCount + 1\n\twarnNaga:Schedule(42.5, tostring(self.vb.nagaCount + 1))\n\ttimerNaga:Start(nil, tostring(self.vb.nagaCount + 1))\n\tself:Schedule(47.5, NagaSpawn, self)\nend\n\nfunction mod:OnCombatStart(delay)\n\ttable.wipe(elementals)\n\tself:SetStage(1)\n\tself.vb.shieldLeft = 4\n\tself.vb.nagaCount = 0\n\tself.vb.striderCount = 0\n\tself.vb.elementalCount = 0\n\ttimerEntangleCD:Start(30-delay) -- Appears to be static 30s upon starting combat (As of 15.01.2025 on Onyxia PTR)\n\ttimerChargeCD:Start()\n\ttimerShockBlastCD:Start()\n\t-- Cache the loot method in case loot gets manually changed to ffa before Phase 2\n\tif DBM:GetRaidRank() == 2 then\n\t\tcachedLootmethod, _, masterlooterRaidID = GetLootMethod()\n\t\tif cachedLootmethod == \"freeforall\" then cachedLootmethod = nil end\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\n\tself:UnregisterShortTermEvents()\n\t-- Don't change loot if it was manually changed away from ffa\n\tif self.Options.AutoChangeLootToFFA and DBM:GetRaidRank() == 2 and GetLootMethod() == \"freeforall\" and cachedLootmethod then\n\t\tif masterlooterRaidID then\n\t\t\tSetLootMethod(cachedLootmethod, \"raid\"..masterlooterRaidID)\n\t\telse\n\t\t\tSetLootMethod(cachedLootmethod)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 38280 then\n\t\ttimerCharge:Start(args.destName)\n\t\ttimerChargeCD:Start()\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnCharge:Show()\n\t\t\tspecWarnCharge:Play(\"runout\")\n\t\t\tyellCharge:Yell()\n\t\t\tif self.Options.RangeFrame then\n\t\t\t\tDBM.RangeCheck:Show(10)\n\t\t\tend\n\t\telse\n\t\t\twarnCharge:Show(args.destName)\n\t\tend\n\t\tif self.Options.ChargeIcon then\n\t\t\tself:SetIcon(args.destName, 1, 20)\n\t\tend\n\telseif spellId == 38575 and args:IsPlayer() and self:AntiSpam() then\n\t\tspecWarnToxic:Show()\n\t\tspecWarnToxic:Play(\"runaway\")\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 38280 then\n\t\ttimerCharge:Stop(args.destName)\n\t\tif self.Options.ChargeIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tif self.Options.RangeFrame then\n\t\t\t\tDBM.RangeCheck:Hide()\n\t\t\tend\n\t\tend\n\telseif spellId == 38132 then\n\t\tif self.Options.LootIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\telseif spellId == 38112 then--and not self:IsTrivial()\n\t\tDBM:AddMsg(\"Magic Barrier unhidden from combat log. Notify Zidras on Discord or GitHub\")\n\t\tself.vb.shieldLeft = self.vb.shieldLeft - 1\n\t\twarnShield:Show(self.vb.shieldLeft)\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 38253 and not elementals[args.sourceGUID] then\n\t\telementals[args.sourceGUID] = true\n\t\tself.vb.elementalCount = self.vb.elementalCount + 1\n\t\tspecWarnElemental:Show()\n\t\ttimerElemental:Start()\n\t\twarnElemental:Schedule(45, tostring(self.vb.elementalCount + 1))\n\t\ttimerElementalCD:Start(nil, tostring(self.vb.elementalCount + 1))\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 38316 then\n\t\ttimerEntangleCD:Start()\n\t\twarnEntangle:Show()\n\telseif spellId == 38509 then\n\t\ttimerShockBlastCD:Start()\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cId = self:GetCIDFromGUID(args.destGUID)\n\tif cId == 22009 then\n\t\ttimerElemental:Cancel()\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_FAILED_QUIET_UNFILTERED(uId, spellName)\n\tif spellName == GetSpellInfo(24390) and self:AntiSpam(2, 2) then -- Opening. This is an experimental feature to try and detect when an Invis KV Shield Generator dies\n\t\tDBM:Debug(\"UNIT_SPELLCAST_FAILED_QUIET_UNFILTERED fired for player:\" .. (uId and UnitName(uId) or \"Unknown\") .. \" with the spell: \" .. spellName)\n\t\tself.vb.shieldLeft = self.vb.shieldLeft - 1\n\t\twarnShield:Show(self.vb.shieldLeft)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.DBM_VASHJ_YELL_PHASE2 or msg:find(L.DBM_VASHJ_YELL_PHASE2) then\n\t\tself:SetStage(2)\n\t\tself.vb.nagaCount = 0\n\t\tself.vb.striderCount = 0\n\t\tself.vb.elementalCount = 0\n\t\tself.vb.shieldLeft = 4\n\t\twarnPhase2:Show()\n\t\t-- Cancel P1 timers\n\t\ttimerEntangleCD:Cancel()\n\t\ttimerChargeCD:Cancel()\n\t\ttimerShockBlastCD:Cancel()\n\t\t-- Start P2 timers\n\t\twarnNaga:Schedule(42.5, tostring(self.vb.nagaCount + 1))\n\t\ttimerNaga:Start(nil, tostring(self.vb.nagaCount + 1))\n\t\tself:Schedule(47.5, NagaSpawn, self)\n\t\twarnStrider:Schedule(57, tostring(self.vb.striderCount + 1))\n\t\ttimerStrider:Start(nil, tostring(self.vb.striderCount + 1))\n\t\tself:Schedule(63, StriderSpawn, self)\n\t\twarnElemental:Schedule(45, tostring(self.vb.elementalCount + 1))\n\t\ttimerElementalCD:Start(nil, tostring(self.vb.elementalCount + 1))\n\t\tif self.Options.AutoChangeLootToFFA and DBM:GetRaidRank() == 2 and GetLootMethod() ~= \"freeforall\" then\n\t\t\tcachedLootmethod, _, masterlooterRaidID = GetLootMethod()\n\t\t\tSetLootMethod(\"freeforall\")\n\t\tend\n\t\tself:RegisterShortTermEvents(\n\t\t\t\"UNIT_SPELLCAST_FAILED_QUIET_UNFILTERED\"\n\t\t)\n\telseif msg == L.DBM_VASHJ_YELL_PHASE3 or msg:find(L.DBM_VASHJ_YELL_PHASE3) then\n\t\tself:SetStage(3)\n\t\twarnPhase3:Show()\n\t\twarnNaga:Cancel()\n\t\ttimerNaga:Cancel()\n\t\tself:Unschedule(NagaSpawn)\n\t\twarnStrider:Cancel()\n\t\ttimerStrider:Cancel()\n\t\tself:Unschedule(StriderSpawn)\n\t\twarnElemental:Cancel()\n\t\ttimerElementalCD:Cancel()\n\t\tself:UnregisterShortTermEvents()\n\t\ttimerEntangleCD:Start(30) -- Appears to be static 30s upon entering P3 (As of 15.01.2025 on Onyxia PTR)\n\t\ttimerChargeCD:Start()\n\t\ttimerShockBlastCD:Start()\n\t\t-- Don't change loot if it was manually changed\n\t\tif self.Options.AutoChangeLootToFFA and DBM:GetRaidRank() == 2 and GetLootMethod() == \"freeforall\" and cachedLootmethod then\n\t\t\tif masterlooterRaidID then\n\t\t\t\tSetLootMethod(cachedLootmethod, \"raid\"..masterlooterRaidID)\n\t\t\telse\n\t\t\t\tSetLootMethod(cachedLootmethod)\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_LOOT(msg)\n\t-- DBM:AddMsg(msg) --> Meridium receives loot: [Magnetic Core]\n\tlocal player, itemID = msg:match(L.LootMsg)\n\tif player and itemID and tonumber(itemID) == 31088 and self:IsInCombat() then\n\t\t-- attempt to correct player name when the player is the one looting\n\t\tif DBM:GetGroupId(player) == 0 then -- workaround to determine that player doesn't exist in our group\n\t\t\tif player == DBM_COMMON_L.YOU then -- LOOT_ITEM_SELF = \"You receive loot: %s.\" Not useable in all locales since there is no pronoun or not translateable \"YOU\" (ES: Recibes botín: %s.\")\n\t\t\t\tplayer = UnitName(\"player\") -- convert localized \"You\" to player name\n\t\t\telse -- logically is more prone to be innacurate, but do it anyway to account for the locales without a useable YOU and prevent UNKNOWN player name on sync handler\n\t\t\t\tplayer = UnitName(\"player\")\n\t\t\tend\n\t\tend\n\t\tself:SendSync(\"LootMsg\", player)\n\tend\nend\n\n-- Case where combat was started with the wrong loot and changed manually, and then put to ffa manually before Phase 2\n-- This will not protect against misclicks before changing manually to ffa (loot will be returned to last misclicked type)\nfunction mod:PARTY_LOOT_METHOD_CHANGED()\n\tif self.Options.AutoChangeLootToFFA and DBM:GetRaidRank() == 2 and self:GetStage(1) and GetLootMethod() ~= \"freeforall\" then\n\t\tcachedLootmethod, _, masterlooterRaidID = GetLootMethod()\n\tend\nend\n\nfunction mod:OnSync(event, playerName)\n\tif not self:IsInCombat() then return end\n\tif event == \"LootMsg\" and playerName then\n\t\tplayerName = DBM:GetUnitFullName(playerName)\n\t\tif self:AntiSpam(2, playerName) then\n--\t\t\tif playerName == UnitName(\"player\") then\n--\t\t\t\tspecWarnCore:Show()\n--\t\t\t\tspecWarnCore:Play(\"useitem\")\n--\t\t\telse\n\t\t\t\twarnLoot:Show(playerName)\n--\t\t\tend\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Serpentshrine/localization.cn.lua",
    "content": "if GetLocale() ~= \"zhCN\" then return end\nlocal L\n\n---------------------------\n--  Hydross the Unstable --\n---------------------------\nL = DBM:GetModLocalization(\"Hydross\")\n\nL:SetGeneralLocalization({\n\tname = \"不稳定的海度斯\"\n})\n\nL:SetWarningLocalization({\n\tWarnMark\t\t= \"%s : %s\",\n\tWarnPhase\t\t= \"%s 阶段\",--Translate\n\tSpecWarnMark\t= \"%s : %s\"\n})\n\nL:SetTimerLocalization({\n\tTimerMark\t= \"下一次 %s : %s\"--Translate\n})\n\nL:SetOptionLocalization({\n\tWarnMark\t\t= \"警报印记\",\n\tWarnPhase\t\t= \"警报阶段变化\",\n\tSpecWarnMark\t= \"显示：当印记到100%时警报\",--Translate\n\tTimerMark\t\t= \"显示下一次印记时间\"--Translate\n})\n\nL:SetMiscLocalization({\n\tFrost\t\t= \"冰霜阶段\",\n\tNature\t\t= \"自然阶段\",\n\tYellPull\t= \"我不能允许你们介入！\"\n})\n\n-----------------------\n--  The Lurker Below --\n-----------------------\nL = DBM:GetModLocalization(\"LurkerBelow\")\n\nL:SetGeneralLocalization({\n\tname = \"鱼斯拉\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"下潜\",\n\tWarnSubmergeSoon\t= \"下潜 10 秒\",--Translate\n\tWarnEmerge\t\t\t= \"重新出现\",\n\tWarnEmergeSoon\t\t= \"重新出现 10 秒\"--Translate\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"下潜\",\n\tTimerEmerge\t\t\t= \"重新出现\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"显示下潜警报\",--Translate\n\tWarnSubmergeSoon\t= \"显示下潜预警\",--Translate\n\tWarnEmerge\t\t\t= \"显示重新出现警报\",--Translate\n\tWarnEmergeSoon\t\t= \"显示重新出现预警\",--Translate\n\tTimerSubmerge\t\t= \"显示下潜时间\",--Translate\n\tTimerEmerge\t\t\t= \"显示重新出现时间\"--Translate\n})\n\nL:SetMiscLocalization({\n\tSpout\t= \"%s深深吸了一口气！\"\n})\n\n--------------------------\n--  Leotheras the Blind --\n--------------------------\nL = DBM:GetModLocalization(\"Leotheras\")\n\nL:SetGeneralLocalization({\n\tname = \"盲眼者莱欧瑟拉斯\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%s 阶段\",--Translate\n\tWarnPhaseSoon\t= \"%s 阶段转换 5 秒\"--Translate\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t= \"下一次 %s 阶段\"--Translate\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"显示下一阶段的警报\",--Translate\n\tWarnPhaseSoon\t= \"显示下一阶段预警\",--Translate\n\tTimerPhase\t\t= \"显示下一阶段时间\"--Translate\n})\n\nL:SetMiscLocalization({\n\tHuman\t\t= \"人形态\",--Translate\n\tDemon\t\t= \"恶魔形态\",--Translate\n\tYellDemon\t= \"滚开吧，脆弱的精灵。现在我说了算！\",\n\tYellPhase2\t= \"不……不！你在干什么？我才是主宰！你听到没有？我……啊啊啊啊！控制……不住了。\",\n\tYellPull\t= \"我的放逐终于结束了！\"\n})\n\n-----------------------------\n--  Fathom-Lord Karathress --\n-----------------------------\nL = DBM:GetModLocalization(\"Fathomlord\")\n\nL:SetGeneralLocalization({\n\tname = \"深水领主卡拉瑟雷斯\"\n})\n\nL:SetMiscLocalization({\n\tCaribdis\t= \"深水卫士卡莉蒂丝\",--Translate\n\tTidalvess\t= \"深水卫士泰达维斯 \",--Translate\n\tSharkkis\t= \"深水卫士沙克基斯\",--Translate\n\tYellPull\t= \"卫兵！提高警惕！我们有客人来了……\"\n})\n\n--------------------------\n--  Morogrim Tidewalker --\n--------------------------\nL = DBM:GetModLocalization(\"Tidewalker\")\n\nL:SetGeneralLocalization({\n\tname = \"莫洛格里·踏潮者\"\n})\n\nL:SetWarningLocalization({\n\tWarnMurlocs\t\t= \"鱼人群出现\",\n\tSpecWarnMurlocs\t= \"鱼人群出现!\"\n})\n\nL:SetTimerLocalization({\n\tTimerMurlocs\t= \"鱼人群\"\n})\n\nL:SetOptionLocalization({\n\tWarnMurlocs\t\t= \"警报鱼人群\",\n\tSpecWarnMurlocs\t= \"鱼人群出现时显示特殊警报\",--Translate\n\tTimerMurlocs\t= \"显示鱼人群出现计时\"--Translate\n})\n\nL:SetMiscLocalization({\n\tGrave\t\t\t= \"%s把他的敌人送入了水下的坟墓！\",\n\tMurlocs\t\t\t= \"猛烈的地震警告了附近的鱼人们！\"\n})\n\n-----------------\n--  Lady Vashj --\n-----------------\nL = DBM:GetModLocalization(\"Vashj\")\n\nL:SetGeneralLocalization({\n\tname = \"瓦丝琪\"\n})\n\nL:SetWarningLocalization({\n\tWarnElemental\t\t= \"被污染的元素 - 5秒后出现 (%s)\",\n\tWarnStrider\t\t\t= \"盘牙巡逻者 - 5秒后出现 (%s)\",\n\tWarnNaga\t\t\t= \"盘牙精英 - 5秒后出现 (%s)\",\n\tWarnShield\t\t\t= \"护盾 - %d/4被击碎\",\n\tWarnLoot\t\t\t= \">%s<获得了污染之核\",\n\tSpecWarnElemental\t= \"被污染的元素 - 5秒后出现!\"\n})\n\nL:SetTimerLocalization({\n\tTimerElemental\t\t= \"被污染的元素 (%d)\",--Verify\n\tTimerStrider\t\t= \"盘牙巡逻者 (%d)\",--Verify\n\tTimerNaga\t\t\t= \"盘牙精英 (%d)\"--Verify\n})\n\nL:SetOptionLocalization({\n\tWarnElemental\t\t= \"显示被污染的元素出现的预警\",--Translate\n\tWarnStrider\t\t\t= \"显示盘牙巡逻者出现的预警\",--Translate\n\tWarnNaga\t\t\t= \"显示盘牙精英出现的预警\",--Translate\n\tWarnShield\t\t\t= \"显示第2阶段护盾警报 \",--Translate\n\tWarnLoot\t\t\t= \"警报是谁拾取了污染之核\",\n\tTimerElemental\t\t= \"显示下一个被污染的元素出现的时间\",--Translate\n\tTimerStrider\t\t= \"显示下一个盘牙巡逻者出现的时间\",--Translate\n\tTimerNaga\t\t\t= \"显示盘牙精英出现的时间\",--Translate\n\tSpecWarnElemental\t= \"显示特别警报：当被污染的元素到来时\",--Translate\n\tAutoChangeLootToFFA\t= \"第3阶段自动转换拾取方式为自由拾取\"\n})\n\nL:SetMiscLocalization({\n\tDBM_VASHJ_YELL_PHASE2\t= \"机会来了！一个活口都不要留下！\",\n\tLootMsg\t\t\t\t= \"(.+)获得了物品：.*Hitem:(%d+)\"\n})\n"
  },
  {
    "path": "DBM-Serpentshrine/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n---------------------------\n--  Hydross the Unstable --\n---------------------------\nL = DBM:GetModLocalization(\"Hydross\")\n\nL:SetGeneralLocalization({\n\tname = \"Hydross der Unstete\"\n})\n\nL:SetWarningLocalization({\n\tWarnMark\t\t= \"%s : %s\",\n\tWarnPhase\t\t= \"%sphase\",\n\tSpecWarnMark\t= \"%s : %s\"\n})\n\nL:SetTimerLocalization({\n\tTimerMark\t= \"Nächstes %s : %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnMark\t\t= \"Zeige Warnung für Male\",\n\tWarnPhase\t\t= \"Zeige Warnung für nächste Phase\",\n\tSpecWarnMark\t= \"Spezialwarnung, wenn Schaden durch Male Debuff um 100% oder mehr erhöht ist\",\n\tTimerMark\t\t= \"Zeige Zeit bis nächste Male\"\n})\n\nL:SetMiscLocalization({\n\tFrost\t\t= \"Frost\",\n\tNature\t\t= \"Natur\",\n\tYellPull\t= \"Ich kann nicht zulassen, dass Ihr Euch einmischt!\"\n})\n\n-----------------------\n--  The Lurker Below --\n-----------------------\nL = DBM:GetModLocalization(\"LurkerBelow\")\n\nL:SetGeneralLocalization({\n\tname = \"Das Grauen aus der Tiefe\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"Abtauchen\",\n\tWarnEmerge\t\t\t= \"Auftauchen\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"Abtauchen CD\",\n\tTimerEmerge\t\t\t= \"Auftauchen CD\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"Zeige Warnung für Abtauchen\",\n\tWarnEmerge\t\t\t= \"Zeige Warnung für Auftauchen\",\n\tTimerSubmerge\t\t= \"Abklingzeit von Abtauchen anzeigen\",\n\tTimerEmerge\t\t\t= \"Abklingzeit von Auftauchen anzeigen\"\n})\n\n--------------------------\n--  Leotheras the Blind --\n--------------------------\nL = DBM:GetModLocalization(\"Leotheras\")\n\nL:SetGeneralLocalization({\n\tname = \"Leotheras der Blinde\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%s Phase\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t= \"Nächste %s Phase\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"Zeige Warnung für nächste Phase\",\n\tTimerPhase\t\t= \"Zeige Zeit bis nächste Phase\"\n})\n\nL:SetMiscLocalization({\n\tHuman\t\t= \"Humanoide\",\n\tDemon\t\t= \"Dämonen\",\n\tYellDemon\t= \"Hinfort, unbedeutender Elf%.%s*Ich habe jetzt die Kontrolle!\",\n\tYellPhase2\t= \"Nein... nein! Was habt Ihr getan? Ich bin der Meister! Hört Ihr? Ich! Ich... aaaaah! Ich kann ihn... nicht aufhalten...\",\n\tYellPull\t= \"Endlich hat meine Verbannung ein Ende!\"\n})\n\n-----------------------------\n--  Fathom-Lord Karathress --\n-----------------------------\nL = DBM:GetModLocalization(\"Fathomlord\")\n\nL:SetGeneralLocalization({\n\tname = \"Tiefenlord Karathress\"\n})\n\nL:SetMiscLocalization({\n\tCaribdis\t= \"Tiefenwächterin Caribdis\",\n\tTidalvess\t= \"Tiefenwächter Flutvess\",\n\tSharkkis\t= \"Tiefenwächter Haikis\",\n\tYellPull\t= \"Achtung, Wachen! Wir haben Besuch...\"\n})\n\n--------------------------\n--  Morogrim Tidewalker --\n--------------------------\nL = DBM:GetModLocalization(\"Tidewalker\")\n\nL:SetGeneralLocalization({\n\tname = \"Morogrim Gezeitenwandler\"\n})\n\nL:SetWarningLocalization({\n\tSpecWarnMurlocs\t= \"Murlocs kommen!\"\n})\n\nL:SetTimerLocalization({\n\tTimerMurlocs\t= \"Murlocs\"\n})\n\nL:SetOptionLocalization({\n\tSpecWarnMurlocs\t= \"Spezialwarnung, wenn Murlocs erscheinen\",\n\tTimerMurlocs\t= \"Zeige Zeit bis Murlocs erscheinen\"\n})\n\nL:SetMiscLocalization({\n\tGrave\t\t\t= \"%s schickt seine Feinde in ihr nasses Grab!\",\n\tMurlocs\t\t\t= \"Das heftige Erdbeben hat nahe Murlocs alarmiert!\"\n})\n\n-----------------\n--  Lady Vashj --\n-----------------\nL = DBM:GetModLocalization(\"Vashj\")\n\nL:SetGeneralLocalization({\n\tname = \"Lady Vashj\"\n})\n\nL:SetWarningLocalization({\n\tWarnElemental\t\t= \"Besudelter Elementar bald (%s)\",\n\tWarnStrider\t\t\t= \"Schreiter bald (%s)\",\n\tWarnNaga\t\t\t= \"Naga bald (%s)\",\n\tWarnShield\t\t\t= \"Schildgenerator %d/4 zerstört\",\n\tWarnLoot\t\t\t= \">%s< hat den Besudelten Kern\",\n\tSpecWarnElemental\t= \"Besudelter Elementar - Ziel wechseln!\"\n})\n\nL:SetTimerLocalization({\n\tTimerElementalActive\t= \"Elementar aktiv\",\n\tTimerElemental\t\t\t= \"Elementar CD (%d)\",\n\tTimerStrider\t\t\t= \"Nächster Schreiter (%d)\",\n\tTimerNaga\t\t\t\t= \"Nächster Naga (%d)\"\n})\n\nL:SetOptionLocalization({\n\tWarnElemental\t\t= \"Zeige Vorwarnung für nächsten Besudelter Elementar\",\n\tWarnStrider\t\t\t= \"Zeige Vorwarnung für nächsten Schreiter\",\n\tWarnNaga\t\t\t= \"Zeige Vorwarnung für nächsten Naga\",\n\tWarnShield\t\t\t= \"Zeige Warnung für zerstörte Schildgeneratoren in Phase 2\",\n\tWarnLoot\t\t\t= \"Spieler mit Besudelten Kern ansagen\",\n\tTimerElementalActive\t= \"Zeige Zeit bis Besudelter Elementar verschwindet\",\n\tTimerElemental\t\t= \"Abklingzeit von Besudelter Elementar anzeigen\",\n\tTimerStrider\t\t= \"Zeige Zeit bis nächster Schreiter\",\n\tTimerNaga\t\t\t= \"Zeige Zeit bis nächster Naga\",\n\tSpecWarnElemental\t= \"Spezialwarnung, wenn Besudelter Elementar kommt\",\n\tAutoChangeLootToFFA\t= \"Plündermodus in Phase 2 automatisch auf 'Jeder gegen jeden' einstellen\"\n})\n\nL:SetMiscLocalization({\n\tDBM_VASHJ_YELL_PHASE2\t= \"Die Zeit ist gekommen! Lasst keinen am Leben!\",\n\tDBM_VASHJ_YELL_PHASE3\t= \"Geht besser in Deckung!\",\n\tLootMsg\t\t\t\t\t= \"([^%s]+).*Hitem:(%d+)\"\n})\n"
  },
  {
    "path": "DBM-Serpentshrine/localization.en.lua",
    "content": "local L\n\n---------------------------\n--  Hydross the Unstable --\n---------------------------\nL = DBM:GetModLocalization(\"Hydross\")\n\nL:SetGeneralLocalization({\n\tname = \"Hydross the Unstable\"\n})\n\nL:SetWarningLocalization({\n\tWarnMark\t\t= \"%s : %s\",\n\tWarnPhase\t\t= \"%s Phase\",\n\tSpecWarnMark\t= \"%s : %s\"\n})\n\nL:SetTimerLocalization({\n\tTimerMark\t= \"Next %s : %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnMark\t\t= \"Show warning for Marks\",\n\tWarnPhase\t\t= \"Show warning for next phase\",\n\tSpecWarnMark\t= \"Show warning when Marks debuff damage over 100%\",\n\tTimerMark\t\t= \"Show timer for next Marks\"\n})\n\nL:SetMiscLocalization({\n\tFrost\t\t= \"Frost\",\n\tNature\t\t= \"Nature\",\n\tYellPull\t= \"I cannot allow you to interfere!\"\n})\n\n-----------------------\n--  The Lurker Below --\n-----------------------\nL = DBM:GetModLocalization(\"LurkerBelow\")\n\nL:SetGeneralLocalization({\n\tname = \"The Lurker Below\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"Submerged\",\n\tWarnEmerge\t\t\t= \"Emerged\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"Submerge CD\",\n\tTimerEmerge\t\t\t= \"Emerge CD\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"Show warning when submerge\",\n\tWarnEmerge\t\t\t= \"Show warning when emerge\",\n\tTimerSubmerge\t\t= \"Show time for submerge\",\n\tTimerEmerge\t\t\t= \"Show time for emerge\"\n})\n\n--------------------------\n--  Leotheras the Blind --\n--------------------------\nL = DBM:GetModLocalization(\"Leotheras\")\n\nL:SetGeneralLocalization({\n\tname = \"Leotheras the Blind\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%s Phase\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t= \"Next %s Phase\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"Show warning for next phase\",\n\tTimerPhase\t\t= \"Show time for next phase\"\n})\n\nL:SetMiscLocalization({\n\tHuman\t\t= \"Human\",\n\tDemon\t\t= \"Demon\",\n\tYellDemon\t= \"Be gone, trifling elf%.%s*I am in control now!\",\n\tYellPhase2\t= \"No... no! What have you done? I am the master! Do you hear me? I am... aaggh! Can't... contain him.\",\n\tYellPull\t= \"Finally, my banishment ends!\"\n})\n\n-----------------------------\n--  Fathom-Lord Karathress --\n-----------------------------\nL = DBM:GetModLocalization(\"Fathomlord\")\n\nL:SetGeneralLocalization({\n\tname = \"Fathom-Lord Karathress\"\n})\n\nL:SetMiscLocalization({\n\tCaribdis\t= \"Fathom-Guard Caribdis\",\n\tTidalvess\t= \"Fathom-Guard Tidalvess\",\n\tSharkkis\t= \"Fathom-Guard Sharkkis\",\n\tYellPull\t= \"Guards, attention! We have visitors....\"\n})\n\n--------------------------\n--  Morogrim Tidewalker --\n--------------------------\nL = DBM:GetModLocalization(\"Tidewalker\")\n\nL:SetGeneralLocalization({\n\tname = \"Morogrim Tidewalker\"\n})\n\nL:SetWarningLocalization({\n\tSpecWarnMurlocs\t= \"Murlocs Coming!\"\n})\n\nL:SetTimerLocalization({\n\tTimerMurlocs\t= \"Murlocs\"\n})\n\nL:SetOptionLocalization({\n\tSpecWarnMurlocs\t= \"Show special warning when Murlocs spawning\",\n\tTimerMurlocs\t= \"Show timer for Murlocs spawning\"\n})\n\nL:SetMiscLocalization({\n\tGrave\t\t\t= \"%s sends his enemies to their watery graves!\",\n\tMurlocs\t\t\t= \"The violent earthquake has alerted nearby Murlocs!\"\n})\n\n-----------------\n--  Lady Vashj --\n-----------------\nL = DBM:GetModLocalization(\"Vashj\")\n\nL:SetGeneralLocalization({\n\tname = \"Lady Vashj\"\n})\n\nL:SetWarningLocalization({\n\tWarnElemental\t\t= \"Tainted Elemental Soon (%s)\",\n\tWarnStrider\t\t\t= \"Strider Soon (%s)\",\n\tWarnNaga\t\t\t= \"Naga Soon (%s)\",\n\tWarnShield\t\t\t= \"Shield %d/4 down\",\n\tWarnLoot\t\t\t= \"Tainted Core on >%s<\",\n\tSpecWarnElemental\t= \"Tainted Elemental - Switch!\"\n})\n\nL:SetTimerLocalization({\n\tTimerElementalActive\t= \"Elemental Active\",\n\tTimerElemental\t\t\t= \"Elemental CD (%d)\",\n\tTimerStrider\t\t\t= \"Next Strider (%d)\",\n\tTimerNaga\t\t\t\t= \"Next Naga (%d)\"\n})\n\nL:SetOptionLocalization({\n\tWarnElemental\t\t= \"Show pre-warning for next Tainted Elemental\",\n\tWarnStrider\t\t\t= \"Show pre-warning for next Strider\",\n\tWarnNaga\t\t\t= \"Show pre-warning for next Naga\",\n\tWarnShield\t\t\t= \"Show warning for Phase 2 shield down\",\n\tWarnLoot\t\t\t= \"Show warning for Tainted Core loot\",\n\tTimerElementalActive\t= \"Show timer for how long Tainted Elemental is active\",\n\tTimerElemental\t\t= \"Show timer for Tainted Elemental cooldown\",\n\tTimerStrider\t\t= \"Show timer for next Strider\",\n\tTimerNaga\t\t\t= \"Show timer for next Naga\",\n\tSpecWarnElemental\t= \"Show special warning when Tainted Elemental coming\",\n\tAutoChangeLootToFFA\t= \"Switch loot mode to Free for All in Phase 2\"\n})\n\nL:SetMiscLocalization({\n\tDBM_VASHJ_YELL_PHASE2\t= \"The time is now! Leave none standing!\",\n\tDBM_VASHJ_YELL_PHASE3\t= \"You may want to take cover.\",\n\tLootMsg\t\t\t\t\t= \"([^%s]+).*Hitem:(%d+)\"\n})\n"
  },
  {
    "path": "DBM-Serpentshrine/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\nlocal L\n\n---------------------------\n--  Hydross the Unstable --\n---------------------------\nL = DBM:GetModLocalization(\"Hydross\")\n\nL:SetGeneralLocalization({\n\tname = \"Hydross el Inestable\"\n})\n\nL:SetWarningLocalization({\n\tWarnMark\t\t= \"%s: %s\",\n\tWarnPhase\t\t= \"Fase de %s\",\n\tSpecWarnMark\t= \"%s: %s\"\n})\n\nL:SetTimerLocalization({\n\tTimerMark\t= \"Next %s : %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnMark\t\t= \"Mostrar aviso para las marcas\",\n\tWarnPhase\t\t= \"Anunciar cambios de fase\",\n\tSpecWarnMark\t= \"Mostrar aviso cuando el daño del perjuicio de las marcas esté por encima del 100%\",\n\tTimerMark\t\t= \"Mostrar temporizador para las siguientes marcas\",\n\tRangeFrame\t\t= DBM_CORE_L.AUTO_RANGE_OPTION_TEXT_SHORT:format(10)\n})\n\nL:SetMiscLocalization({\n\tFrost\t\t= \"Escarcha\",\n\tNature\t\t= \"Naturaleza\",\n\tYellPull\t= \"¡No puedo permitir que interferáis!\" -- esES\n--\tYellPull\t= \"¡No puedo permitir que interfieran!\" -- esMX\n})\n\n-----------------------\n--  The Lurker Below --\n-----------------------\nL = DBM:GetModLocalization(\"LurkerBelow\")\n\nL:SetGeneralLocalization({\n\tname = \"El Rondador de abajo\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"Sumersión\",\n\tWarnEmerge\t\t\t= \"Emersión\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"Sumersión TdR\",\n\tTimerEmerge\t\t\t= \"Emersión TdR\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"Mostrar aviso cuando el jefe se sumerja\",\n\tWarnEmerge\t\t\t= \"Mostrar aviso cuando el jefe regrese a la superficie\",\n\tTimerSubmerge\t\t= \"Mostrar temporizador para cuando el jefe de sumerja\",\n\tTimerEmerge\t\t\t= \"Mostrar temporizador para cuando el jefe regrese a la superficie\"\n})\n\n--------------------------\n--  Leotheras the Blind --\n--------------------------\nL = DBM:GetModLocalization(\"Leotheras\")\n\nL:SetGeneralLocalization({\n\tname = \"Leotheras el Ciego\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"Fase %s\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t= \"Siguiente fase %s \"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"Anunciar cambios de fase\",\n\tTimerPhase\t\t= \"Mostrar temporizador para la siguiente fase\"\n})\n\nL:SetMiscLocalization({\n\tHuman\t\t= \"Humana\",\n\tDemon\t\t= \"Demoníaca\",\n\tYellDemon\t= \"Desaparece, elfo pusilánime. ¡Yo mando ahora!\",\n\tYellPhase2\t= \"¿Qué has hecho? ¡Yo soy el maestro!\",\n\tYellPull\t= \"¡Al fin acaba mi destierro!\"\n})\n\n-----------------------------\n--  Fathom-Lord Karathress --\n-----------------------------\nL = DBM:GetModLocalization(\"Fathomlord\")\n\nL:SetGeneralLocalization({\n\tname = \"Señor de las profundidades Karathress\"\n})\n\nL:SetMiscLocalization({\n\tCaribdis\t= \"Guardia de las profundidades Caribdis\",\n\tTidalvess\t= \"Guardia de las profundidades Tidalvess\",\n\tSharkkis\t= \"Guardia de las profundidades Sharkkis\",\n\tYellPull\t= \"¡Guardias, atención! Tenemos visita...\"\n})\n\n--------------------------\n--  Morogrim Tidewalker --\n--------------------------\nL = DBM:GetModLocalization(\"Tidewalker\")\n\nL:SetGeneralLocalization({\n\tname = \"Morogrim Levantamareas\"\n})\n\nL:SetWarningLocalization({\n\tWarnMurlocs\t\t= \"Múrlocs\",\n\tSpecWarnMurlocs\t= \"Múrlocs\"\n})\n\nL:SetTimerLocalization({\n\tTimerMurlocs\t= \"Siguientes múrlocs\"\n})\n\nL:SetOptionLocalization({\n\tWarnMurlocs\t\t= \"Mostrar aviso cuando aparezcan múrlocs\",\n\tSpecWarnMurlocs\t= \"Mostrar aviso especial cuando aparezcan múrlocs\",\n\tTimerMurlocs\t= \"Mostrar temporizador para los siguientes múrlocs\"\n})\n\nL:SetMiscLocalization({\n\tGrave\t\t\t= \"¡%s manda a sus enemigos a sus sepulturas de agua!\",\n\tMurlocs\t\t\t= \"¡El violento terremoto ha alertado a los múrlocs cercanos!\"\n})\n\n-----------------\n--  Lady Vashj --\n-----------------\nL = DBM:GetModLocalization(\"Vashj\")\n\nL:SetGeneralLocalization({\n\tname = \"Lady Vashj\"\n})\n\nL:SetWarningLocalization({\n\tWarnElemental\t\t= \"Elemental corrupto (%s) en breve\",\n\tWarnStrider\t\t\t= \"Zancudo (%s) en breve\",\n\tWarnNaga\t\t\t= \"Élite (%s) en breve\",\n\tWarnShield\t\t\t= \"Escudo: %d/4\",\n\tWarnLoot\t\t\t= \"Núcleo máculo en >%s<\",\n\tSpecWarnElemental\t= \"Elemental corrupto - ¡cambia de objetivo!\"\n})\n\nL:SetTimerLocalization({\n\tTimerElementalActive\t= \"Elemental corrupto activo\",\n\tTimerElemental\t\t\t= \"Siguiente Elemental corrupto (%d)\",\n\tTimerStrider\t\t\t= \"Siguiente Zancudo (%d)\",\n\tTimerNaga\t\t\t\t= \"Siguiente Élite (%d)\"\n})\n\nL:SetOptionLocalization({\n\tWarnElemental\t\t= \"Mostrar aviso previo para el siguiente Elemental corrupto\",\n\tWarnStrider\t\t\t= \"Mostrar aviso previo para el siguiente Zancudo Colmillo Torcido\",\n\tWarnNaga\t\t\t= \"Mostrar aviso especial para el siguiente Élite Colmillo Torcido\",\n\tWarnShield\t\t\t= \"Mostrar aviso cuando disminuya el escudo de la fase 2\",\n\tWarnLoot\t\t\t= \"Mostrar aviso cuando un jugador despoje un Núcleo máculo\",\n\tTimerElementalActive\t= \"Mostrar temporizador para la duración restante de los Elementales corruptos\",\n\tTimerElemental\t\t= \"Mostrar temporizador para el siguiente Elemental corrupto\",\n\tTimerStrider\t\t= \"Mostrar temporizador para el siguiente Zancudo Colmillo Torcido\",\n\tTimerNaga\t\t\t= \"Mostrar temporizador para el siguiente Élite Colmillo Torcido\",\n\tSpecWarnElemental\t= \"Mostrar aviso previo especial para cuando aparezca un Elemental corrupto\",\n\tAutoChangeLootToFFA\t= \"Cambiar modo de botín a libre en Fase 2\"\n})\n\nL:SetMiscLocalization({\n\tDBM_VASHJ_YELL_PHASE2\t= \"¡Ha llegado el momento! ¡Que no quede ni uno en pie!\",\n\tDBM_VASHJ_YELL_PHASE3\t= \"Os vendrá bien cubriros.\",\n\tLootMsg\t\t\t\t\t= \"([^%s]+).*Hitem:(%d+)\"\n})\n"
  },
  {
    "path": "DBM-Serpentshrine/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\nlocal L\n\n---------------------------\n--  Hydross the Unstable --\n---------------------------\nL = DBM:GetModLocalization(\"Hydross\")\n\nL:SetGeneralLocalization({\n\tname = \"Hydross l'Instable\"\n})\n\nL:SetOptionLocalization({\n\tWarnMark\t\t= \"Afficher une alerte pour les Marques\",\n\tWarnPhase\t\t= \"Afficher une alerte pour la prochaine phase\",\n\tSpecWarnMark\t= \"Afficher une alerte lorsque les dégâts du débuff Marques dépassent 100%\",\n\tTimerMark\t\t= \"Afficher un timer pour la prochaine Marque\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Je ne peux pas vous laisser nous gêner !\"\n})\n\n-----------------------\n--  The Lurker Below --\n-----------------------\nL = DBM:GetModLocalization(\"LurkerBelow\")\n\nL:SetGeneralLocalization({\n\tname = \"Le Rôdeur d'En bas\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"Immergé\",\n\tWarnEmerge\t\t\t= \"Émergé\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"CD Immersion\",\n\tTimerEmerge\t\t\t= \"CD Émergence\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"Afficher une alerte lors de l'immersion\",\n\tWarnEmerge\t\t\t= \"Afficher une alerte lors de l'émergence\",\n\tTimerSubmerge\t\t= \"Afficher un timer pour l'immersion\",\n\tTimerEmerge\t\t\t= \"Afficher un timer pour l'émergence\"\n})\n\n--------------------------\n--  Leotheras the Blind --\n--------------------------\nL = DBM:GetModLocalization(\"Leotheras\")\n\nL:SetGeneralLocalization({\n\tname = \"Leotheras l'Aveugle\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"Afficher une alerte pour la prochaine phase\",\n\tTimerPhase\t\t= \"Afficher un timer pour la prochaine phase\"\n})\n\nL:SetMiscLocalization({\n\tYellDemon\t= \"Hors d'ici, elfe insignifiant. Je prends le contrôle !\",\n\tYellPull\t= \"Enfin, mon exil s'achève !\"\n})\n\n-----------------------------\n--  Fathom-Lord Karathress --\n-----------------------------\nL = DBM:GetModLocalization(\"Fathomlord\")\n\nL:SetGeneralLocalization({\n\tname = \"Seigneur des fonds Karathress\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Gardes, en position ! Nous avons de la visite…\"\n})\n\n--------------------------\n--  Morogrim Tidewalker --\n--------------------------\nL = DBM:GetModLocalization(\"Tidewalker\")\n\nL:SetGeneralLocalization({\n\tname = \"Morogrim Marcheur-des-flots\"\n})\n\nL:SetOptionLocalization({\n\tSpecWarnMurlocs\t= \"Afficher une alerte spéciale lors de l'arrivée des murlocs\",\n\tTimerMurlocs\t= \"Afficher un timer pour l'arrivée des murlocs\"\n})\n\nL:SetMiscLocalization({\n\tGrave\t\t\t= \"%s envoie ses ennemis six pieds sous l'eau !\",\n\tMurlocs\t\t\t= \"La violence du tremblement de terre a alerté des murlocs qui passaient non loin !\"\n})\n\n-----------------\n--  Lady Vashj --\n-----------------\nL = DBM:GetModLocalization(\"Vashj\")\n\nL:SetGeneralLocalization({\n\tname = \"Dame Vashj\"\n})\n\nL:SetWarningLocalization({\n\tWarnElemental\t\t= \"Élémentaire souillé bientôt (%s)\",\n\tWarnStrider\t\t\t= \"Trotteur bientôt (%s)\",\n\tWarnNaga\t\t\t= \"Naga bientôt (%s)\",\n\tWarnShield\t\t\t= \"Bouclier %d/4 détruit\",\n\tWarnLoot\t\t\t= \"Noyau contaminé sur >%s<\",\n\tSpecWarnElemental\t= \"Élémentaire souillé - Changez de cible !\"\n})\n\nL:SetTimerLocalization({\n\tTimerElementalActive\t= \"Élémentaire actif\",\n\tTimerElemental\t\t\t= \"CD Élémentaire (%d)\",\n\tTimerStrider\t\t\t= \"Prochain trotteur (%d)\",\n\tTimerNaga\t\t\t\t= \"Prochain naga (%d)\"\n})\n\nL:SetOptionLocalization({\n\tWarnElemental\t\t= \"Afficher une pré-alerte pour le prochain Élémentaire souillé\",\n\tWarnStrider\t\t\t= \"Afficher une pré-alerte pour le prochain trotteur\",\n\tWarnNaga\t\t\t= \"Afficher une pré-alerte pour le prochain naga\",\n\tWarnShield\t\t\t= \"Afficher une alerte pour la destruction du bouclier en phase 2\",\n\tWarnLoot\t\t\t= \"Afficher une alerte pour le loot du Noyau contaminé\",\n\tTimerElementalActive\t= \"Afficher un timer pour la durée d'activité de l'Élémentaire souillé\",\n\tTimerElemental\t\t= \"Afficher un timer pour le cooldown de l'Élémentaire souillé\",\n\tTimerStrider\t\t= \"Afficher un timer pour le prochain trotteur\",\n\tTimerNaga\t\t\t= \"Afficher un timer pour le prochain naga\",\n\tSpecWarnElemental\t= \"Afficher une alerte spéciale lors de l'arrivée de l'Élémentaire souillé\",\n\tAutoChangeLootToFFA\t= \"Passer le mode de butin en Butin libre en phase 2\"\n})\n\nL:SetMiscLocalization({\n\tDBM_VASHJ_YELL_PHASE2\t= \"L'heure est venue ! N'épargnez personne !\",\n\tDBM_VASHJ_YELL_PHASE3\t= \"Il faudrait peut-être vous mettre à l'abri.\",\n\tLootMsg\t\t\t\t\t= \"([^%s]+).*Hitem:(%d+)\"\n})\n"
  },
  {
    "path": "DBM-Serpentshrine/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n---------------------------\n--  Hydross the Unstable --\n---------------------------\nL = DBM:GetModLocalization(\"Hydross\")\n\nL:SetGeneralLocalization({\n\tname = \"불안정한 히드로스\"\n})\n\nL:SetWarningLocalization({\n\tWarnMark\t\t= \"%s : %s\",\n\tWarnPhase\t\t= \"%s 단계\",\n\tSpecWarnMark\t= \"%s : %s\"\n})\n\nL:SetTimerLocalization({\n\tTimerMark\t= \"다음 %s : %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnMark\t\t= \"징표 경고 보기\",\n\tWarnPhase\t\t= \"다음 단계 경고 보기\",\n\tSpecWarnMark\t= \"징표 디버프 피해가 100%를 넘으면 경고 보기\",\n\tTimerMark\t\t= \"다음 징표 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tFrost\t\t= \"냉기\",\n\tNature\t\t= \"자연\",\n\tYellPull\t= \"방해하도록 놔두지 않겠습니다!\"\n})\n\n-----------------------\n--  The Lurker Below --\n-----------------------\nL = DBM:GetModLocalization(\"LurkerBelow\")\n\nL:SetGeneralLocalization({\n\tname = \"심연의 잠복꾼\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"잠수\",\n\tWarnEmerge\t\t\t= \"재등장\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"잠수 쿨타임\",\n\tTimerEmerge\t\t\t= \"재등장 쿨타임\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"잠수시 경고 보기\",\n\tWarnEmerge\t\t\t= \"재등장시 경고 보기\",\n\tTimerSubmerge\t\t= \"잠수 타이머 바 보기\",\n\tTimerEmerge\t\t\t= \"재등장 타이머 바 보기\"\n})\n\n--------------------------\n--  Leotheras the Blind --\n--------------------------\nL = DBM:GetModLocalization(\"Leotheras\")\n\nL:SetGeneralLocalization({\n\tname = \"눈먼 레오테라스\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%s 단계\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t= \"다음 %s 단계\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"다음 단계 경고 보기\",\n\tTimerPhase\t\t= \"다음 단계 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tHuman\t\t= \"인간\",\n\tDemon\t\t= \"악마\",\n\tYellDemon\t= \"꺼져라, 엘프 꼬맹이. 지금부터는 내가 주인이다!\",\n\tYellPhase2\t= \"안 돼... 안 돼! 무슨 짓이냐? 내가 주인이야! 내 말 듣지 못해? 나란 말이야! 내가... 으아악! 놈을 억누를 수... 없...어.\",\n\tYellPull\t= \"드디어, 내가 풀려났도다!\"\n})\n\n-----------------------------\n--  Fathom-Lord Karathress --\n-----------------------------\nL = DBM:GetModLocalization(\"Fathomlord\")\n\nL:SetGeneralLocalization({\n\tname = \"심해군주 카라드레스\"\n})\n\nL:SetMiscLocalization({\n\tCaribdis\t= \"심연의 경비병 카리브디스\",\n\tTidalvess\t= \"심연의 경비병 타이달베스\",\n\tSharkkis\t= \"심연의 경비병 샤르키스\",\n\tYellPull\t= \"경비병! 여기 침입자들이 있다...\"\n})\n\n--------------------------\n--  Morogrim Tidewalker --\n--------------------------\nL = DBM:GetModLocalization(\"Tidewalker\")\n\nL:SetGeneralLocalization({\n\tname = \"겅둥파도 모로그림\"\n})\n\nL:SetWarningLocalization({\n\tSpecWarnMurlocs\t= \"멀록 등장!\"\n})\n\nL:SetTimerLocalization({\n\tTimerMurlocs\t= \"멀록\"\n})\n\nL:SetOptionLocalization({\n\tSpecWarnMurlocs\t= \"멀록 등장 특수 경고 보기\",\n\tTimerMurlocs\t= \"멀록 등장 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tGrave\t\t\t= \"%s|1이;가; 자신의 적을 수중 무덤으로 내몹니다!\",\n\tMurlocs\t\t\t= \"근처에 있던 멀록들이 격렬한 지진을 느끼고 주위로 달려듭니다!\"\n})\n\n-----------------\n--  Lady Vashj --\n-----------------\nL = DBM:GetModLocalization(\"Vashj\")\n\nL:SetGeneralLocalization({\n\tname = \"여군주 바쉬\"\n})\n\nL:SetWarningLocalization({\n\tWarnElemental\t\t\t= \"곧 오염된 정령 (%s)\",\n\tWarnStrider\t\t\t\t= \"곧 포자손 (%s)\",\n\tWarnNaga\t\t\t\t= \"곧 나가 (%s)\",\n\tWarnShield\t\t\t\t= \"보호막 %d/4 깨짐\",\n\tWarnLoot\t\t\t\t= \"오염된 핵: >%s<\",\n\tSpecWarnElemental\t\t= \"오염된 정령 - 점사!\"\n})\n\nL:SetTimerLocalization({\n\tTimerElementalActive\t= \"정령 활성화\",\n\tTimerElemental\t\t\t= \"정령 쿨타임 (%d)\",\n\tTimerStrider\t\t\t= \"다음 포자손 (%d)\",\n\tTimerNaga\t\t\t\t= \"다음 나가 (%d)\"\n})\n\nL:SetOptionLocalization({\n\tWarnElemental\t\t\t= \"다음 오염된 정령 사전 경고 보기\",\n\tWarnStrider\t\t\t\t= \"다음 포자손 사전 경고 보기\",\n\tWarnNaga\t\t\t\t= \"다음 나가 사전 경고 보기\",\n\tWarnShield\t\t\t\t= \"2단계 보호막 해제 경고 보기\",\n\tWarnLoot\t\t\t\t= \"오염된 핵 획득자 경고 보기\",\n\tTimerElementalActive\t= \"오염된 정령 활성화 시간 타이머 바 보기\",\n\tTimerElemental\t\t\t= \"오염된 정령 쿨타임 타이머 바 보기\",\n\tTimerStrider\t\t\t= \"다음 포자손 타이머 바 보기\",\n\tTimerNaga\t\t\t\t= \"다음 나가 타이머 바 보기\",\n\tSpecWarnElemental\t\t= \"오염된 정령 등장 특수 경고 보기\",\n\tAutoChangeLootToFFA\t\t= \"2단계에서 전리품 획득 설정을 자유로 자동 변경\"\n})\n\nL:SetMiscLocalization({\n\tDBM_VASHJ_YELL_PHASE2\t= \"때가 왔다! 한 놈도 살려두지 마라!\",\n\tDBM_VASHJ_YELL_PHASE3\t= \"숨을 곳이나 마련해 둬라!\",\n})\n"
  },
  {
    "path": "DBM-Serpentshrine/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\nlocal L\n\n---------------------------\n--  Hydross the Unstable --\n---------------------------\nL = DBM:GetModLocalization(\"Hydross\")\n\nL:SetGeneralLocalization({\n\tname = \"Гидросс Нестабильный\"\n})\n\nL:SetWarningLocalization({\n\tWarnMark\t\t= \"%s : %s\",\n\tWarnPhase\t\t= \"%s Phase\",--Translate\n\tSpecWarnMark\t= \"%s : %s\"\n})\n\nL:SetTimerLocalization({\n\tTimerMark\t= \"Next %s : %s\"--Translate\n})\n\nL:SetOptionLocalization({\n\tWarnMark\t\t= \"Объявить знаки\",\n\tWarnPhase\t\t= \"Объявить фазы\",\n\tSpecWarnMark\t= \"Show warning when Marks debuff damage over 100%\",--Translate\n\tTimerMark\t\t= \"Show timer for next Marks\"--Translate\n})\n\nL:SetMiscLocalization({\n\tFrost\t\t= \"Гидросса\",\n\tNature\t\t= \"порчи\",\n\tYellPull\t= \"Я не позволю вам вмешиваться!\"\n})\n\n-----------------------\n--  The Lurker Below --\n-----------------------\nL = DBM:GetModLocalization(\"LurkerBelow\")\n\nL:SetGeneralLocalization({\n\tname = \"Скрытень из глубин\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"Погружение\",\n\tWarnSubmergeSoon\t= \"Погружение in 10 sec\",--Verify\n\tWarnEmerge\t\t\t= \"Появление\",\n\tWarnEmergeSoon\t\t= \"Появление in 10 sec\"--Verify\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"Погружение\",\n\tTimerEmerge\t\t\t= \"Появление\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"Show warning when submerge\",--Translate\n\tWarnSubmergeSoon\t= \"Show pre-warning for submerge\",--Translate\n\tWarnEmerge\t\t\t= \"Show warning when emerge\",--Translate\n\tWarnEmergeSoon\t\t= \"Show pre-warning for emerge\",--Translate\n\tTimerSubmerge\t\t= \"Show time for submerge\",--Translate\n\tTimerEmerge\t\t\t= \"Show time for emerge\"--Translate\n})\n\nL:SetMiscLocalization({\n\tSpout\t= \"Скрытень из глубин глубоко вздыхает!\"\n})\n\n--------------------------\n--  Leotheras the Blind --\n--------------------------\nL = DBM:GetModLocalization(\"Leotheras\")\n\nL:SetGeneralLocalization({\n\tname = \"Леотерас Слепец\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%s Phase\",--Translate\n\tWarnPhaseSoon\t= \"%s Phase in 5 sec\"--Translate\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t= \"Next %s Phase\"--Translate\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"Show warning for next phase\",--Translate\n\tWarnPhaseSoon\t= \"Show pre-warning for next phase\",--Translate\n\tTimerPhase\t\t= \"Show time for next phase\"--Translate\n})\n\nL:SetMiscLocalization({\n\tHuman\t\t= \"Human\",--Translate\n\tDemon\t\t= \"Demon\",--Translate\n\tYellDemon\t= \"Прочь, жалкий эльф. Настало мое время!\",\n\tYellPhase2\t= \"Нет... нет! Что вы наделали? Я – главный! Слышишь меня? Я... Ааааах! Мне его... не удержать.\",\n\tYellPull\t= \"Наконец-то мое заточение окончено!\"\n})\n\n-----------------------------\n--  Fathom-Lord Karathress --\n-----------------------------\nL = DBM:GetModLocalization(\"Fathomlord\")\n\nL:SetGeneralLocalization({\n\tname = \"Повелитель глубин Каратресс\"\n})\n\nL:SetMiscLocalization({\n\tCaribdis\t= \"Fathom-Guard Caribdis\",--Translate\n\tTidalvess\t= \"Fathom-Guard Tidalvess\",--Translate\n\tSharkkis\t= \"Fathom-Guard Sharkkis\",--Translate\n\tYellPull\t= \"Стража, к бою! У нас гости...\"\n})\n\n--------------------------\n--  Morogrim Tidewalker --\n--------------------------\nL = DBM:GetModLocalization(\"Tidewalker\")\n\nL:SetGeneralLocalization({\n\tname = \"Морогрим Волноступ\"\n})\n\nL:SetWarningLocalization({\n\tWarnMurlocs\t\t= \"Мурлоки\",\n\tSpecWarnMurlocs\t= \"Мурлоки!\"\n})\n\nL:SetTimerLocalization({\n\tTimerMurlocs\t= \"Мурлоки\"\n})\n\nL:SetOptionLocalization({\n\tWarnMurlocs\t\t= \"Объявить Мурлоки\",\n\tSpecWarnMurlocs\t= \"Show special warning when Murlocs spawning\",--Translate\n\tTimerMurlocs\t= \"Show timer for Murlocs spawning\"--Translate\n})\n\nL:SetMiscLocalization({\n\tGrave\t\t\t= \"%s отправляет своих врагов в водяные могилы!\",\n\tMurlocs\t\t\t= \"Сильный толчок землетрясения насторожил мурлоков поблизости!\"\n})\n\n-----------------\n--  Lady Vashj --\n-----------------\nL = DBM:GetModLocalization(\"Vashj\")\n\nL:SetGeneralLocalization({\n\tname = \"Леди Вайш\"\n})\n\nL:SetWarningLocalization({\n\tWarnElemental\t\t= \"Нечистый элементаль через 5 секунд (%s)\",\n\tWarnStrider\t\t\t= \"Долгоног через 5 секунд (%s)\",\n\tWarnNaga\t\t\t= \"Нага через 5 секунд (%s)\",\n\tWarnShield\t\t\t= \"Магический барьер - деактивировано %d/4\",\n\tWarnLoot\t\t\t= \">%s< получил порченую магму\",\n\tSpecWarnElemental\t= \"Нечистый элементаль через 5 секунд!\"\n})\n\nL:SetTimerLocalization({\n\tTimerElemental\t\t= \"Нечистый элементаль (%d)\",--Verify\n\tTimerStrider\t\t= \"Долгоног (%d)\",--Verify\n\tTimerNaga\t\t\t= \"Нага (%d)\"--Verify\n})\n\nL:SetOptionLocalization({\n\tWarnElemental\t\t= \"Show pre-warning for next Tainted Elemental\",--Translate\n\tWarnStrider\t\t\t= \"Show pre-warning for next Strider\",--Translate\n\tWarnNaga\t\t\t= \"Show pre-warning for next Naga\",--Translate\n\tWarnShield\t\t\t= \"Show warning for Phase 2 shield down\",--Translate\n\tWarnLoot\t\t\t= \"Объявить наличие порченой магмы\",\n\tTimerElemental\t\t= \"Show time for next Tainted Elemental\",--Translate\n\tTimerStrider\t\t= \"Show time for next Strider\",--Translate\n\tTimerNaga\t\t\t= \"Show time for next Strider\",--Translate\n\tSpecWarnElemental\t= \"Show special warning when Tainted Elemental coming\",--Translate\n\tAutoChangeLootToFFA\t\t= \"Смена режима добычи на Каждый за себя в фазе 2\"\n})\n\nL:SetMiscLocalization({\n\tDBM_VASHJ_YELL_PHASE2\t\t\t\t= \"Время пришло! Не оставляйте никого в живых!\",\n\tLootMsg\t\t\t= \"([^%s]+).*Hitem:(%d+)\"\n})\n"
  },
  {
    "path": "DBM-Serpentshrine/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n---------------------------\n--  Hydross the Unstable --\n---------------------------\nL = DBM:GetModLocalization(\"Hydross\")\n\nL:SetGeneralLocalization({\n\tname = \"不穩定者海卓司\"\n})\n\nL:SetWarningLocalization({\n\tWarnMark\t\t= \"%s:%s\",\n\tWarnPhase\t\t= \"%s階段\",\n\tSpecWarnMark\t= \"%s:%s\"\n})\n\nL:SetTimerLocalization({\n\tTimerMark\t= \"下一次%s:%s\"\n})\n\nL:SetOptionLocalization({\n\tWarnMark\t\t= \"提示印記\",\n\tWarnPhase\t\t= \"提示階段\",\n\tSpecWarnMark\t= \"為印記易傷超過100%時顯示警告\",\n\tTimerMark\t\t= \"為下一次印記顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tFrost\t\t= \"冰霜\",\n\tNature\t\t= \"自然\",\n\tYellPull\t= \"我不准你涉入這件事!\"\n})\n\n-----------------------\n--  The Lurker Below --\n-----------------------\nL = DBM:GetModLocalization(\"LurkerBelow\")\n\nL:SetGeneralLocalization({\n\tname = \"海底潛伏者\"\n})\n\nL:SetWarningLocalization({\n\tWarnSubmerge\t\t= \"潛入水中\",\n\tWarnEmerge\t\t\t= \"浮現\"\n})\n\nL:SetTimerLocalization({\n\tTimerSubmerge\t\t= \"潛水冷卻\",\n\tTimerEmerge\t\t\t= \"浮現冷卻\"\n})\n\nL:SetOptionLocalization({\n\tWarnSubmerge\t\t= \"為潛入水中顯示警告\",\n\tWarnEmerge\t\t\t= \"為浮現顯示警告\",\n\tTimerSubmerge\t\t= \"為潛入水中顯示計時器\",\n\tTimerEmerge\t\t\t= \"為浮現顯示計時器\"\n})\n\n--------------------------\n--  Leotheras the Blind --\n--------------------------\nL = DBM:GetModLocalization(\"Leotheras\")\n\nL:SetGeneralLocalization({\n\tname = \"『盲目者』李奧薩拉斯\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%s階段\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t= \"下一次%s階段\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"為下個階段顯示警告\",\n\tTimerPhase\t\t= \"為下個階段顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tHuman\t\t= \"人形\",\n\tDemon\t\t= \"惡魔\",\n\tYellDemon\t= \"消失吧，微不足道的精靈。現在開始由我掌管!\",\n\tYellPhase2\t= \"不...不!你做了什麼?我是主人!你沒聽見我在說話嗎?我....啊!無法...控制它。\",\n\tYellPull\t= \"終於結束了我的流放生涯!\"\n})\n\n-----------------------------\n--  Fathom-Lord Karathress --\n-----------------------------\nL = DBM:GetModLocalization(\"Fathomlord\")\n\nL:SetGeneralLocalization({\n\tname = \"深淵之王卡拉薩瑞斯\"\n})\n\nL:SetMiscLocalization({\n\tCaribdis\t= \"深淵守衛卡利迪斯\",\n\tTidalvess\t= \"提達費斯\",\n\tSharkkis\t= \"深淵守衛沙卡奇斯\",\n\tYellPull\t= \"守衛，注意!我們有訪客了...\"\n})\n\n--------------------------\n--  Morogrim Tidewalker --\n--------------------------\nL = DBM:GetModLocalization(\"Tidewalker\")\n\nL:SetGeneralLocalization({\n\tname = \"莫洛葛利姆·潮行者\"\n})\n\nL:SetWarningLocalization({\n\tSpecWarnMurlocs\t= \"魚人出現!\"\n})\n\nL:SetTimerLocalization({\n\tTimerMurlocs\t= \"魚人出現\"\n})\n\nL:SetOptionLocalization({\n\tSpecWarnMurlocs\t= \"為魚人出現顯示特別警告\",\n\tTimerMurlocs\t= \"為魚人出現顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tGrave\t\t\t= \"%s將敵人放進他們的水墓穴中!\",\n\tMurlocs\t\t\t= \"強烈的地震驚動了附近的魚人!\"\n})\n\n-----------------\n--  Lady Vashj --\n-----------------\nL = DBM:GetModLocalization(\"Vashj\")\n\nL:SetGeneralLocalization({\n\tname = \"瓦許女士\"\n})\n\nL:SetWarningLocalization({\n\tWarnElemental\t\t= \"污染的元素即將出現! (%s)\",\n\tWarnStrider\t\t\t= \"盤牙旅行者即將出現! (%s)\",\n\tWarnNaga\t\t\t= \"盤牙精英即將出現! (%s)\",\n\tWarnShield\t\t\t= \"魔法屏障%d/4消失!\",\n\tWarnLoot\t\t\t= \">%s<擁有受污染的核心!\",\n\tSpecWarnElemental\t= \"污染的元素 - 快換目標!\"\n})\n\nL:SetTimerLocalization({\n\tTimerElementalActive\t= \"污染的元素重生\",\n\tTimerElemental\t\t\t= \"污染的元素 (%d)\",\n\tTimerStrider\t\t\t= \"盤牙旅行者 (%d)\",\n\tTimerNaga\t\t\t\t= \"盤牙精英 (%d)\"\n})\n\nL:SetOptionLocalization({\n\tWarnElemental\t\t= \"為下一次污染的元素顯示預先警告\",\n\tWarnStrider\t\t\t= \"為下一次盤牙旅行者顯示預先警告\",\n\tWarnNaga\t\t\t= \"為下一次盤牙精英顯示預先警告\",\n\tWarnShield\t\t\t= \"為第2階段屏障消失顯示警告\",\n\tWarnLoot\t\t\t= \"提示誰拾取了受污染的核心\",\n\tTimerElementalActive\t= \"為下一次污染的元素出現顯示計時器\",\n\tTimerElemental\t\t= \"為下一次污染的元素顯示計時器\",\n\tTimerStrider\t\t= \"為下一次盤牙旅行者顯示計時器\",\n\tTimerNaga\t\t\t= \"為下一次盤牙精英顯示計時器\",\n\tSpecWarnElemental\t= \"為污染的元素出現顯示特別警告\",\n\tAutoChangeLootToFFA\t= \"第2階段自動轉換拾取方式為自由拾取\"\n})\n\nL:SetMiscLocalization({\n\tDBM_VASHJ_YELL_PHASE2\t= \"機會來了!一個活口都不要留下!\",\n\tDBM_VASHJ_YELL_PHASE3\t= \"你們最好找掩護。\",\n\tLootMsg\t\t\t\t\t= \"(.+)拾取了物品:.*Hitem:(%d+)\"\n})\n"
  },
  {
    "path": "DBM-SpellTimers/DBM-SpellTimers.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FFSpell Timers|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FFSpell Timers|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF冷却助手|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF冷卻助手|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF스펠 타이머|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FFTemporizadores de hechizos y facultades|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FFSpell Timers|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FFТаймеры заклинаний|r\n## Notes: Creates bars for Long term cooldowns or durations\n## LoadOnDemand: 0\n## RequiredDeps: DBM-Core\n## DefaultState: enabled\n## Author: Nitram and Tandanu\n## URL: http://www.deadlybossmods.com\n## SavedVariables: DBM_SpellTimers_Settings\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.cn.lua\nlocalization.ru.lua\nlocalization.tw.lua\nlocalization.kr.lua\nlocalization.es.lua\nlocalization.fr.lua\n\nSpellTimers.lua\n"
  },
  {
    "path": "DBM-SpellTimers/SpellTimers.lua",
    "content": "-- **********************************************************\n-- **             Deadly Boss Mods - SpellsUsed            **\n-- **             http://www.deadlybossmods.com            **\n-- **********************************************************\n--\n-- This addon is written and copyrighted by:\n--    * Martin Verges (Nitram @ EU-Azshara)\n--    * Paul Emmerich (Tandanu @ EU-Aegwynn)\n--\n-- The localizations are written by:\n--    * enGB/enUS: Nitram/Tandanu        http://www.deadlybossmods.com\n--    * deDE: Nitram/Tandanu             http://www.deadlybossmods.com\n--    * zhCN: yleaf(yaroot@gmail.com)\n--    * zhTW: yleaf(yaroot@gmail.com)/Juha\n--    * koKR: BlueNyx(bluenyx@gmail.com)\n--    * esES: Interplay/1nn7erpLaY       http://www.1nn7erpLaY.com\n--\n-- This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License. (see license.txt)\n--\n--  You are free:\n--    * to Share  to copy, distribute, display, and perform the work\n--    * to Remix  to make derivative works\n--  Under the following conditions:\n--    * Attribution. You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).\n--    * Noncommercial. You may not use this work for commercial purposes.\n--    * Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.\n--\n\nlocal Revision = (\"$Revision: 55 $\"):sub(12, -3)\n\nlocal default_bartext = \"%spell: %player\"\nlocal default_settings = {\n\tenabled = false,\n\tshowlocal = true,\n\tonly_from_raid = true,\n\tactive_in_pvp = true,\n\town_bargroup = false,\n\tshow_portal = true,\n\tspells = {\n\t\t{ spell = 6346, bartext = default_bartext, cooldown = 180 },\t-- Priest: Fear Ward\n\t\t{ spell = 1161, bartext = default_bartext, cooldown = 180 },\t-- Warrior: Challenging Shout (AE Taunt)\n\t\t{ spell = 871, bartext = \"%spell on %player\", cooldown = 12 },\t-- Warrior: Shieldwall Duration (for Healers to see how long cooldown runs)\n\t\t{ spell = 12975, bartext = \"%spell on %player\", cooldown = 20 },-- Warrior: Last Stand Duration (for Healers to see how long cooldown runs)\n\t\t{ spell = 48792, bartext = \"%spell on %player\", cooldown = 12 },-- Death Knight: Icebound Fortitude Duration (for Healers to see how long cooldown runs)\n\t\t{ spell = 498, bartext = \"%spell on %player\", cooldown = 12 },\t-- Paladin: Divine Protection Duration (for Healers to see how long cooldown runs)\n\t\t{ spell = 61336, bartext = \"%spell on %player\", cooldown = 20 },-- Druid: Survival Instincts Duration (for Healers to see how long cooldown runs)\n\t\t{ spell = 48477, bartext = default_bartext, cooldown = 600 },\t-- Druid: Rebirth (Rank 7)\n\t\t{ spell = 29166, bartext = default_bartext, cooldown = 180 },\t-- Druid: Innervate\n\t\t{ spell = 5209, bartext = default_bartext, cooldown = 180 },\t-- Druid: Challenging Roar (AE Taunt)\n\t\t{ spell = 33206, bartext = \"%spell on %target\", cooldown = 8 }, -- Priest: Pain Suppression Duration (for Healers to see how long cooldown runs)\n\t\t{ spell = 6940, bartext = \"%spell on %target\", cooldown = 12 }, -- Paladin: Hand of Sacrifice Duration (for Healers to see how long cooldown runs)\n\t\t{ spell = 64205, bartext = default_bartext, cooldown = 10 },\t-- Paladin: Divine Sacrifice Duration (for Healers to see how long cooldown runs)\n\t\t{ spell = 34477, bartext = default_bartext, cooldown = 30 },\t-- Hunter: Missdirect\n\t\t{ spell = 57934, bartext = default_bartext, cooldown = 30 },\t-- Rogue: Tricks of the Trade\n\t\t{ spell = 32182, bartext = default_bartext, cooldown = 300 },\t-- Shaman: Heroism (alliance)\n\t\t{ spell = 2825, bartext = default_bartext, cooldown = 300 },\t-- Shaman: Bloodlust (horde)\n\t\t{ spell = 20608, bartext = default_bartext, cooldown = 1800 },\t-- Shaman: Reincarnation\n\t\t{ spell = 22700, bartext = default_bartext, cooldown = 600 },\t-- Field Repair Bot 74A\n\t\t{ spell = 44389, bartext = default_bartext, cooldown = 600 },\t-- Field Repair Bot 110G\n\t\t{ spell = 54711, bartext = default_bartext, cooldown = 300 },\t-- Scrapbot Construction Kit\n\t\t{ spell = 67826, bartext = default_bartext, cooldown = 600 },\t-- Jeeves\n\n\t},\n\tportal_alliance = {\n\t\t{ spell = 53142, bartext = default_bartext, cooldown = 60 },\t-- Portal: Dalaran\n\t\t{ spell = 33691, bartext = default_bartext, cooldown = 60 },\t-- Portal: Shattrath (Alliance)\n\t\t{ spell = 11416, bartext = default_bartext, cooldown = 60 },\t-- Portal: Ironforge\n\t\t{ spell = 10059, bartext = default_bartext, cooldown = 60 },\t-- Portal: Stormwind\n\t\t{ spell = 49360, bartext = default_bartext, cooldown = 60 },\t-- Portal: Theramore\n\t\t{ spell = 11419, bartext = default_bartext, cooldown = 60 },\t-- Portal: Darnassus\n\t\t{ spell = 32266, bartext = default_bartext, cooldown = 60 },\t-- Portal: Exodar\n\t},\n\tportal_horde = {\n\t\t{ spell = 53142, bartext = default_bartext, cooldown = 60 },\t-- Portal: Dalaran\n\t\t{ spell = 35717, bartext = default_bartext, cooldown = 60 },\t-- Portal: Shattrath (Horde)\n\t\t{ spell = 11417, bartext = default_bartext, cooldown = 60 },\t-- Portal: Orgrimmar\n\t\t{ spell = 11418, bartext = default_bartext, cooldown = 60 },\t-- Portal: Undercity\n\t\t{ spell = 11420, bartext = default_bartext, cooldown = 60 },\t-- Portal: Thunder Bluff\n\t\t{ spell = 32667, bartext = default_bartext, cooldown = 60 },\t-- Portal: Silvermoon\n\t\t{ spell = 49361, bartext = default_bartext, cooldown = 60 },\t-- Portal: Stonard\n\t}\n}\nDBM_SpellTimers_Settings = {}\nlocal settings = default_settings\n\nlocal L = DBM_SpellsUsed_Translations\n\nlocal SpellBars\nlocal SpellBarIndex = {}\nlocal SpellIDIndex = {}\nlocal function rebuildSpellIDIndex()\n\tSpellIDIndex = {}\n\tfor k,v in pairs(settings.spells) do\n\t\tif v.spell then\n\t\t\tSpellIDIndex[v.spell] = k\n\t\tend\n\tend\nend\n\n-- functions\nlocal addDefaultOptions, clearAllSpellBars\ndo\n\tlocal function creategui()\n\t\tlocal createnewentry\n\t\tlocal CurCount = 0\n\t\tlocal panel = DBM_GUI:CreateNewPanel(L.TabCategory_SpellsUsed, \"option\")\n\t\tlocal generalarea = panel:CreateArea(L.AreaGeneral)\n\t\tlocal auraarea = panel:CreateArea(L.AreaAuras)\n\n\t\tlocal function regenerate()\n\t\t\t-- FIXME here we can reuse the frames to save some memory (if the player deletes entries)\n\t\t\tfor i=select(\"#\", auraarea.frame:GetChildren()), 1, -1 do\n\t\t\t\tlocal v = select(i, auraarea.frame:GetChildren())\n\t\t\t\tv:Hide()\n\t\t\t\tv:SetParent(UIParent)\n\t\t\t\tv:ClearAllPoints()\n\t\t\tend\n\t\t\tauraarea.frame:SetHeight(20)\n\t\t\tCurCount = 0\n\n\t\t\tif #settings.spells == 0 then\n\t\t\t\tcreatenewentry()\n\t\t\telse\n\t\t\t\tfor _, _ in pairs(settings.spells) do\n\t\t\t\t\tcreatenewentry()\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\n\n\t\tdo\n\t\t\tlocal area = generalarea\n\t\t\tlocal enabled = area:CreateCheckButton(L.Enabled, true)\n\t\t\tenabled:SetScript(\"OnShow\", function(self) self:SetChecked(settings.enabled) end)\n\t\t\tenabled:SetScript(\"OnClick\", function(self) settings.enabled = not not self:GetChecked() end)\n\n\t\t\tlocal showlocal = area:CreateCheckButton(L.ShowLocalMessage, true)\n\t\t\tshowlocal:SetScript(\"OnShow\", function(self) self:SetChecked(settings.showlocal) end)\n\t\t\tshowlocal:SetScript(\"OnClick\", function(self) settings.showlocal = not not self:GetChecked() end)\n\n\t\t\tlocal showinraid = area:CreateCheckButton(L.OnlyFromRaid, true)\n\t\t\tshowinraid:SetScript(\"OnShow\", function(self) self:SetChecked(settings.only_from_raid) end)\n\t\t\tshowinraid:SetScript(\"OnClick\", function(self) settings.only_from_raid = not not self:GetChecked() end)\n\n\t\t\tlocal showinpvp = area:CreateCheckButton(L.EnableInPVP, true)\n\t\t\tshowinpvp:SetScript(\"OnShow\", function(self) self:SetChecked(settings.active_in_pvp) end)\n\t\t\tshowinpvp:SetScript(\"OnClick\", function(self) settings.active_in_pvp = not not self:GetChecked() end)\n\n\t\t\tlocal show_portal = area:CreateCheckButton(L.EnablePortals, true)\n\t\t\tshow_portal:SetScript(\"OnShow\", function(self) self:SetChecked(settings.show_portal) end)\n\t\t\tshow_portal:SetScript(\"OnClick\", function(self) settings.show_portal = not not self:GetChecked() end)\n\n\t\t\tlocal resetbttn = area:CreateButton(L.Reset, 140, 20)\n\t\t\tresetbttn.myheight = 0\n\t\t\tresetbttn:SetPoint(\"TOPRIGHT\", area.frame, \"TOPRIGHT\", -15, -15)\n\t\t\tresetbttn:SetScript(\"OnClick\", function(self)\n\t\t\t\ttable.wipe(DBM_SpellTimers_Settings)\n\t\t\t\taddDefaultOptions(settings, default_settings)\n\t\t\t\tfor _, v in pairs(settings.spells) do\n\t\t\t\t\tif v.enabled == nil then\n\t\t\t\t\t\tv.enabled = true\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tregenerate()\n\t\t\t\t_G[\"DBM_GUI_OptionsFrame\"]:DisplayFrame(panel.frame)\n\t\t\tend)\n\n\t\t\tlocal version = area:CreateText(\"r\"..Revision, nil, nil, GameFontDisableSmall, \"RIGHT\", 0)\n\t\t\tversion:SetPoint(\"BOTTOMRIGHT\", area.frame, \"BOTTOMRIGHT\", -5, 5)\n\t\tend\n\t\tdo\n\t\t\tlocal function onchange_spell(field)\n\t\t\t\treturn function(self)\n\t\t\t\t\tsettings.spells[self.guikey] = settings.spells[self.guikey] or {}\n\t\t\t\t\tif field == \"spell\" then\n\t\t\t\t\t\tsettings.spells[self.guikey][field] = self:GetNumber()\n\t\t\t\t\t\trebuildSpellIDIndex()\n\t\t\t\t\telseif field == \"cooldown\" then\n\t\t\t\t\t\tsettings.spells[self.guikey][field] = self:GetNumber()\n\t\t\t\t\telseif field == \"enabled\" then\n\t\t\t\t\t\tsettings.spells[self.guikey].enabled = not not self:GetChecked()\n\t\t\t\t\telse\n\t\t\t\t\t\tsettings.spells[self.guikey][field] = self:GetText()\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\t\tlocal function onshow_spell(field)\n\t\t\t\treturn function(self)\n\t\t\t\t\tsettings.spells[self.guikey] = settings.spells[self.guikey] or {}\n\t\t\t\t\tif field == \"bartext\" and settings.spells[self.guikey].spell and settings.spells[self.guikey].spell > 0 then\n\t\t\t\t\t\tlocal text = settings.spells[self.guikey][field] or \"\"\n\t\t\t\t\t\tlocal spellinfo = GetSpellInfo(settings.spells[self.guikey].spell)\n\t\t\t\t\t\tif spellinfo == nil then\n\t\t\t\t\t\t\tDBM:AddMsg(\"Illegal SpellID found. Please remove the Spell \"..settings.spells[self.guikey].spell..\" from your DBM Options GUI (spelltimers)\");\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tself:SetText( string.gsub(text, \"%%spell\", spellinfo) )\n\t\t\t\t\t\tend\n\t\t\t\t\telseif field == \"enabled\" then\n\t\t\t\t\t\tself:SetChecked( settings.spells[self.guikey].enabled )\n\t\t\t\t\telse\n\t\t\t\t\t\tself:SetText( settings.spells[self.guikey][field] or \"\" )\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\n\t\t\tlocal area = auraarea\n\n\t\t\tlocal getadditionalid = CreateFrame(\"Button\", \"GetAdditionalID_Pull\", area.frame)\n\t\t\tgetadditionalid:SetNormalTexture(\"Interface\\\\Buttons\\\\UI-PlusButton-UP\");\n\t\t\tgetadditionalid:SetPushedTexture(\"Interface\\\\Buttons\\\\UI-PlusButton-DOWN\");\n\t\t\tgetadditionalid:SetWidth(15)\n\t\t\tgetadditionalid:SetHeight(15)\n\n\t\t\tfunction createnewentry()\n\t\t\t\tCurCount = CurCount + 1\n\t\t\t\tlocal spellid = auraarea:CreateEditBox(L.SpellID, \"\", 65)\n\t\t\t\tspellid.myheight = 35\n\t\t\t\tspellid.guikey = CurCount\n\t\t\t\tspellid:SetPoint(\"TOPLEFT\", auraarea.frame, \"TOPLEFT\", 40, 15 - (CurCount * 35))\n\t\t\t\tspellid:SetScript(\"OnTextChanged\", onchange_spell(\"spell\"))\n\t\t\t\tspellid:SetScript(\"OnShow\", onshow_spell(\"spell\"))\n\t\t\t\tspellid:SetNumeric(true)\n\n\t\t\t\tlocal bartext = auraarea:CreateEditBox(L.BarText, \"\", 190)\n\t\t\t\tbartext.myheight = 0\n\t\t\t\tbartext.guikey = CurCount\n\t\t\t\tbartext:SetPoint('TOPLEFT', spellid, \"TOPRIGHT\", 20, 0)\n\t\t\t\tbartext:SetScript(\"OnTextChanged\", onchange_spell(\"bartext\"))\n\t\t\t\tbartext:SetScript(\"OnShow\", onshow_spell(\"bartext\"))\n\n\t\t\t\tlocal cooldown = auraarea:CreateEditBox(L.Cooldown, \"\", 45)\n\t\t\t\tcooldown.myheight = 0\n\t\t\t\tcooldown.guikey = CurCount\n\t\t\t\tcooldown:SetPoint(\"TOPLEFT\", bartext, \"TOPRIGHT\", 20, 0)\n\t\t\t\tcooldown:SetScript(\"OnTextChanged\", onchange_spell(\"cooldown\"))\n\t\t\t\tcooldown:SetScript(\"OnShow\", onshow_spell(\"cooldown\"))\n\t\t\t\tcooldown:SetNumeric(true)\n\n\t\t\t\tlocal enableit = auraarea:CreateCheckButton(\"\")\n\t\t\t\tenableit.myheight = 0\n\t\t\t\tenableit.guikey = CurCount\n\t\t\t\tenableit:SetScript(\"OnShow\", onshow_spell(\"enabled\"))\n\t\t\t\tenableit:SetScript(\"OnClick\", onchange_spell(\"enabled\"))\n\t\t\t\tenableit:SetPoint(\"LEFT\", cooldown, \"RIGHT\", 5, 0)\n\n\t\t\t\tgetadditionalid:ClearAllPoints()\n\t\t\t\tgetadditionalid:SetPoint(\"RIGHT\", spellid, \"LEFT\", -15, 0)\n\t\t\t\tarea.frame:SetHeight( area.frame:GetHeight() + 35 )\n\t\t\t\tarea.frame:GetParent():SetHeight( area.frame:GetParent():GetHeight() + 35 )\n\n\t\t\t\tif _G[\"DBM_GUI\"].currentViewing == panel.frame and CurCount > 1 then\n\t\t\t\t\t_G[\"DBM_GUI_OptionsFrame\"]:DisplayFrame(panel.frame)\n\t\t\t\tend\n\n\t\t\t\tgetadditionalid:SetScript(\"OnClick\", function()\n\t\t\t\t\tif spellid:GetNumber() > 0 and bartext:GetText():len() > 0 and cooldown:GetNumber() > 0 then\n\t\t\t\t\t\tcreatenewentry()\n\t\t\t\t\telse\n\t\t\t\t\t\tDBM:AddMsg(L.Error_FillUp)\n\t\t\t\t\tend\n\t\t\t\tend)\n\t\t\tend\n\n\t\t\tif #settings.spells == 0 then\n\t\t\t\tcreatenewentry()\n\t\t\telse\n\t\t\t\tfor _ = 1, #settings.spells do\n\t\t\t\t\tcreatenewentry()\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\tDBM:RegisterOnGuiLoadCallback(creategui, 19)\nend\n\n\ndo\n\tfunction addDefaultOptions(t1, t2)\n\t\tfor i, v in pairs(t2) do\n\t\t\tif t1[i] == nil then\n\t\t\t\tt1[i] = v\n\t\t\telseif type(v) == \"table\" then\n\t\t\t\taddDefaultOptions(v, t2[i])\n\t\t\tend\n\t\tend\n\tend\n\n\tfunction clearAllSpellBars()\n\t\tfor k, _ in pairs(SpellBarIndex) do\n\t\t\tSpellBars:CancelBar(k)\n\t\t\tSpellBarIndex[k] = nil\n\t\tend\n\tend\n\n\tlocal myportals = {}\n\tlocal lastmsg = \"\";\n\tlocal mainframe = CreateFrame(\"frame\", \"DBM_SpellTimers\", UIParent)\n\tlocal spellEvents = {\n\t\t[\"SPELL_CAST_SUCCESS\"] = true,\n\t\t[\"SPELL_RESURRECT\"] = true,\n\t\t[\"SPELL_HEAL\"] = true,\n\t\t[\"SPELL_AURA_APPLIED\"] = true,\n\t\t[\"SPELL_AURA_REFRESH\"] = true,\n\t}\n\tmainframe:SetScript(\"OnEvent\", function(self, event, ...)\n\t\tif event == \"ADDON_LOADED\" and select(1, ...) == \"DBM-SpellTimers\" then\n\t\t\tself:RegisterEvent(\"COMBAT_LOG_EVENT_UNFILTERED\")\n\t\t\tself:RegisterEvent(\"PLAYER_ENTERING_BATTLEGROUND\")\n\n\t\t\t-- Update settings of this Addon\n\t\t\tsettings = DBM_SpellTimers_Settings\n\t\t\taddDefaultOptions(settings, default_settings)\n\n\t\t\t-- CreateBarObject\n\t\t\t--[[ hmm, damm mass options. this sucks!\n\t\t\tif settings.own_bargroup then\n\t\t\t\tSpellBars = DBT:New()\n\t\t\t\tprint_t(SpellBars.options)\n\t\t\t\taddDefaultOptions(SpellBars.options, DBT.Options)\n\t\t\telse\n\t\t\t\tSpellBars = DBT\n\t\t\tend --]]\n\t\t\tSpellBars = DBT\n\n\n\t\t\tif UnitFactionGroup(\"player\") == \"Alliance\" then\n\t\t\t\tmyportals = settings.portal_alliance\n\t\t\telse\n\t\t\t\tmyportals = settings.portal_horde\n\t\t\tend\n\n\t\t\tfor _,v in pairs(settings.spells) do\n\t\t\t\tif v.enabled == nil then\n\t\t\t\t\tv.enabled = true\n\t\t\t\tend\n\t\t\tend\n\n\t\t\trebuildSpellIDIndex()\n\n\t\telseif settings.enabled and event == \"COMBAT_LOG_EVENT_UNFILTERED\" and spellEvents[select(2, ...)] then\n\t\t\t-- first some exeptions (we don't want to see any skill around the world)\n\t\t\tif settings.only_from_raid and not DBM:IsInRaid() then return end\n\t\t\tif not settings.active_in_pvp and (select(2, IsInInstance()) == \"pvp\") then return end\n\n\t\t\tlocal fromplayer = select(4, ...)\n\t\t\tlocal toplayer = select(7, ...)\t\t-- Added by Florin Patan\n\t\t\tlocal spellid = select(9, ...)\n\n\t\t\t-- now we filter if cast is from outside raidgrp (we don't want to see mass spam in Dalaran/...)\n\t\t\tif settings.only_from_raid and not DBM:GetRaidUnitId(fromplayer) then return end\n\n\t\t\tlocal guikey = SpellIDIndex[spellid]\n\t\t\tlocal v = (guikey and settings.spells[guikey])\n\t\t\tif v and v.enabled == true then\n\t\t\t\tif v.spell ~= spellid then\n\t\t\t\t\tprint(\"DBM-SpellTimers Index mismatch error! \"..guikey..\" \"..spellid)\n\t\t\t\tend\n\n\t\t\t\tlocal spellinfo, _, icon = GetSpellInfo(spellid)\n\t\t\t\tlocal bartext = v.bartext:gsub(\"%%spell\", spellinfo):gsub(\"%%player\", fromplayer):gsub(\"%%target\", toplayer)\t-- Changed by Florin Patan\n\t\t\t\tif (spellid == 34477 or spellid == 57934) and (fromplayer == toplayer) then\n\t\t\t\t\treturn\n\t\t\t\tend\n\t\t\t\tSpellBarIndex[bartext] = SpellBars:CreateBar(v.cooldown, bartext, icon, nil, true)\n\n\t\t\t\tif settings.showlocal then\n\t\t\t\t\tlocal msg =  L.Local_CastMessage:format(bartext)\n\t\t\t\t\tif not lastmsg or lastmsg ~= msg then\n\t\t\t\t\t\tDBM:AddMsg(msg)\n\t\t\t\t\t\tlastmsg = msg\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\n\t\telseif settings.enabled and event == \"COMBAT_LOG_EVENT_UNFILTERED\" and settings.show_portal and select(2, ...) == \"SPELL_CREATE\" then\n\t\t\tif settings.only_from_raid and not DBM:IsInRaid() then return end\n\n\t\t\tlocal fromplayer = select(4, ...)\n\t\t\tlocal toplayer = select(7, ...)\t\t-- Added by Florin Patan\n\t\t\tlocal spellid = select(9, ...)\n\n\t\t\tif settings.only_from_raid and not DBM:GetRaidUnitId(fromplayer) then return end\n\n\t\t\tfor _, v in pairs(myportals) do\n\t\t\t\tif v.spell == spellid then\n\t\t\t\t\tlocal spellinfo, _, icon = GetSpellInfo(spellid)\n\t\t\t\t\tlocal bartext = v.bartext:gsub(\"%%spell\", spellinfo):gsub(\"%%player\", fromplayer):gsub(\"%%target\", toplayer)\t-- Changed by Florin Patan\n\t\t\t\t\tSpellBarIndex[bartext] = SpellBars:CreateBar(v.cooldown, bartext, icon, nil, true)\n\n\t\t\t\t\tif settings.showlocal then\n\t\t\t\t\t\tDBM:AddMsg( L.Local_CastMessage:format(bartext) )\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\telseif settings.enabled and event == \"PLAYER_ENTERING_BATTLEGROUND\" then\n\t\t  -- spell cooldowns all reset on entering an arena or bg\n\t\t  clearAllSpellBars()\n\t\tend\n\tend)\n\tmainframe:RegisterEvent(\"ADDON_LOADED\")\nend\n"
  },
  {
    "path": "DBM-SpellTimers/localization.cn.lua",
    "content": "if GetLocale() ~= \"zhCN\" then\n\treturn\nend\nlocal L = DBM_SpellsUsed_Translations\n\nL.TabCategory_SpellsUsed\t= \"冷却助手\"\nL.AreaGeneral\t\t\t\t= \"常规设置\"\nL.Enabled\t\t\t\t\t= \"开启冷却计时\"\nL.ShowLocalMessage\t\t\t= \"显示本地提示\"\nL.OnlyFromRaid\t\t\t\t= \"只显示团队成员的冷却信息\"\nL.EnableInPVP\t\t\t\t= \"战场中同样启用\"\nL.EnablePortals\t\t\t\t= \"显示时间\"\nL.Reset\t\t\t\t\t\t= \"重置设置\"\nL.Local_CastMessage\t\t= \"检测到施法: %s\"\nL.AreaAuras\t\t\t\t= \"技能设置\"\nL.SpellID\t\t\t\t\t= \"法术编号\"\nL.BarText\t\t\t\t\t= \"计时条文字(预设: %spell: %player)\"\nL.Cooldown\t\t\t\t\t= \"冷却时间\"\nL.Error_FillUp\t\t\t\t= \"请填写完整\"\n"
  },
  {
    "path": "DBM-SpellTimers/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then\n\treturn\nend\nlocal L = DBM_SpellsUsed_Translations\n\nL.TabCategory_SpellsUsed\t= \"Zauber/Fähigkeiten-Abklingzeiten\"\nL.AreaGeneral\t\t\t\t= \"Allgemeine Einstellungen für die Abklingzeitenanzeige von Zaubern und Fähigkeiten\"\nL.Enabled\t\t\t\t\t= \"Aktiviere Abklingzeitenanzeige\"\nL.ShowLocalMessage\t\t\t= \"Zeige lokale Nachricht, wenn ein Zauber gewirkt wird\"\nL.OnlyFromRaid\t\t\t\t= \"Zeige nur Abklingzeiten von Schlachtzugmitgliedern\"\nL.EnableInPVP\t\t\t\t= \"Zeige Abklingzeiten auch in Schlachtfeldern\"\nL.EnablePortals\t\t\t\t= \"Zeige Dauer von Magierportalen\"\nL.Reset\t\t\t\t\t\t= \"Zurücksetzen\"\nL.Local_CastMessage\t\t\t= \"Zauber gefunden: %s\"\nL.AreaAuras\t\t\t\t\t= \"Konfiguration der Zauber und Fähigkeiten für die Abklingzeitenanzeige\"\nL.SpellID\t\t\t\t\t= \"Zauber ID\"\nL.BarText\t\t\t\t\t= \"Balkenbeschriftung (z.B.: %spell: %player)\"\nL.Cooldown\t\t\t\t\t= \"Abklingzeit\"\nL.Error_FillUp\t\t\t\t= \"Bitte fülle erst alle Felder aus, bevor du eine neue Zeile hinzufügst.\"\n"
  },
  {
    "path": "DBM-SpellTimers/localization.en.lua",
    "content": "DBM_SpellsUsed_Translations = {}\nlocal L = DBM_SpellsUsed_Translations\n\nL.TabCategory_SpellsUsed\t= \"Spell/Skill Cooldowns\"\nL.AreaGeneral\t\t\t\t= \"General Settings for Spell and Skill Cooldowns\"\nL.Enabled\t\t\t\t\t= \"Enable cooldown timers\"\nL.ShowLocalMessage\t\t\t= \"Show local message on cast\"\nL.OnlyFromRaid\t\t\t\t= \"Show cooldowns only from group members\"\nL.EnableInPVP\t\t\t\t= \"Show cooldowns also in battlegrounds and arenas\"\nL.EnablePortals\t\t\t\t= \"Show portal durations\"\nL.Reset\t\t\t\t\t\t= \"Reset to defaults\"\nL.Local_CastMessage\t\t= \"Detected cast: %s\"\nL.AreaAuras\t\t\t\t= \"Setup spells/skills\"\nL.SpellID\t\t\t\t\t= \"Spell ID\"\nL.BarText\t\t\t\t\t= \"Bar Text (default: %spell: %player)\"\nL.Cooldown\t\t\t\t\t= \"Cooldown\"\nL.Error_FillUp\t\t\t\t= \"Please fill all fields before adding a new one\"\n"
  },
  {
    "path": "DBM-SpellTimers/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then\n\treturn\nend\nlocal L = DBM_SpellsUsed_Translations\n\nL.TabCategory_SpellsUsed\t= \"Tiempos de reutilización\"\nL.AreaGeneral\t\t\t\t= \"Opciones generales\"\nL.Enabled\t\t\t\t\t= \"Habilitar temporizadores\"\nL.ShowLocalMessage\t\t\t= \"Enviar mensaje con el lanzamiento\"\nL.OnlyFromRaid\t\t\t\t= \"Mostrar solo tiempos de reutilización de los miembros de banda\"\nL.EnableInPVP\t\t\t\t= \"Mostrar tiempos de reutilización en campos de batalla\"\nL.EnablePortals\t\t\t\t= \"Mostrar duración de portales\"\nL.Reset\t\t\t\t\t\t= \"Restaurar\"\nL.Local_CastMessage\t\t= \"Lanzamiento detectado: %s\"\nL.AreaAuras\t\t\t\t= \"Configuración de hechizos y facultades\"\nL.SpellID\t\t\t\t\t= \"ID\"\nL.BarText\t\t\t\t\t= \"Texto\"\nL.Cooldown\t\t\t\t\t= \"Tiempo de reutilización\"\nL.Error_FillUp\t\t\t\t= \"Por favor, rellena todos los campos antes de añadir otro hechizo o facultad.\"\n"
  },
  {
    "path": "DBM-SpellTimers/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then\n\treturn\nend\nlocal L = DBM_SpellsUsed_Translations\n\nL.TabCategory_SpellsUsed\t= \"Temps de recharge des sorts\"\nL.AreaGeneral\t\t\t\t= \"Options générales\"\nL.Enabled\t\t\t\t\t= \"Activer le compteur pour le temps de recharge\"\nL.ShowLocalMessage\t\t\t= \"Voir le message local d'incantation\"\nL.OnlyFromRaid\t\t\t\t= \"Afficher les temps de recharge des membres du raid\"\nL.EnableInPVP\t\t\t\t= \"Afficher les temps de recharge aussi dans les champs de bataille\"\nL.EnablePortals\t\t\t\t= \"Afficher la durées des portails\"\nL.Reset\t\t\t\t\t\t= \"Remettre \\195\\160 z\\195\\169ro\"\nL.Local_CastMessage\t\t\t= \"D\\195\\169tecte les incant: %s\"\nL.AreaAuras\t\t\t\t\t= \"Syst\\195\\168me des sorts / compétences\"\nL.SpellID\t\t\t\t\t= \"ID du sort\"\nL.BarText\t\t\t\t\t= \"Barre texte (défaut: %spell: %player)\"\nL.Cooldown\t\t\t\t\t= \"Temps de recharge\"\nL.Error_FillUp\t\t\t\t= \"Merci de remplir tous les champs avant d'ajouter un nouveau\""
  },
  {
    "path": "DBM-SpellTimers/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then\n\treturn\nend\nlocal L = DBM_SpellsUsed_Translations\n\nL.TabCategory_SpellsUsed\t= \"주문/스킬 쿨다운\"\nL.AreaGeneral\t\t\t\t= \"주문/스킬 쿨다운 기본 설정\"\nL.Enabled\t\t\t\t\t= \"쿨다운 타이머 사용\"\nL.ShowLocalMessage\t\t\t= \"시전 메세지 보기\"\nL.OnlyFromRaid\t\t\t\t= \"공격대 멤버 쿨다운만 보기\"\nL.EnableInPVP\t\t\t\t= \"전장 공격대원 쿨다운 보기\"\nL.EnablePortals\t\t\t\t= \"마법사 포탈 지속 시간 보기\"\nL.Reset\t\t\t\t\t\t= \"기본값 복원\"\nL.Local_CastMessage\t\t= \"주문 시전 감지 : %s\"\nL.AreaAuras\t\t\t\t= \"주문/스킬 등록\"\nL.SpellID\t\t\t\t\t= \"Spell ID\"\nL.BarText\t\t\t\t\t= \"바 글자 (기본 : 주문이름: %player)\"\nL.Cooldown\t\t\t\t\t= \"쿨다운\"\nL.Error_FillUp\t\t\t\t= \"새로운 목록을 추가하려면 모든 항목을 입력 하셔야 합니다.\"\n"
  },
  {
    "path": "DBM-SpellTimers/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then\n\treturn\nend\nlocal L = DBM_SpellsUsed_Translations\n\nL.TabCategory_SpellsUsed\t= \"Восстановления заклинаний/навыков\"\nL.AreaGeneral\t\t\t\t= \"Основные настройки для восст. заклинаний/навыков\"\nL.Enabled\t\t\t\t\t= \"Включить таймеры восстановлений\"\nL.ShowLocalMessage\t\t\t= \"Показать локальное сообщение при применении\"\nL.OnlyFromRaid\t\t\t\t= \"Показывать восстановление только от участников рейда\"\nL.EnableInPVP\t\t\t\t= \"Показывать восстановления на полях боя\"\nL.EnablePortals\t\t\t\t= \"Показать длительность порталов\"\nL.Reset\t\t\t\t\t\t= \"Сброс на по умолчанию\"\nL.Local_CastMessage\t\t= \"Обнаружено применение: %s\"\nL.AreaAuras\t\t\t\t= \"Настройки заклинаний/навыков\"\nL.SpellID\t\t\t\t\t= \"ID заклинания\"\nL.BarText\t\t\t\t\t= \"Текст полосы (по умолчанию: %spell: %player)\"\nL.Cooldown\t\t\t\t\t= \"Восстановление\"\nL.Error_FillUp\t\t\t\t= \"Пожалуйста, заполните все поля перед добавлением нового\"\n"
  },
  {
    "path": "DBM-SpellTimers/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then\n\treturn\nend\nlocal L = DBM_SpellsUsed_Translations\n\nL.TabCategory_SpellsUsed\t= \"冷卻助手\"\nL.AreaGeneral\t\t\t\t= \"一般設定\"\nL.Enabled\t\t\t\t\t= \"開啟冷卻計時\"\nL.ShowLocalMessage\t\t\t= \"顯示本地提示\"\nL.OnlyFromRaid\t\t\t\t= \"僅顯示團隊成員的冷卻訊息\"\nL.EnableInPVP\t\t\t\t= \"戰場中依然啟用\"\nL.EnablePortals\t\t\t\t= \"顯示時間\"\nL.Reset\t\t\t\t\t\t= \"重置設定\"\nL.Local_CastMessage\t\t= \"檢測到施法: %s\"\nL.AreaAuras\t\t\t\t= \"技能設定\"\nL.SpellID\t\t\t\t\t= \"法術編號\"\nL.BarText\t\t\t\t\t= \"計時條文字(預設: %spell: %player)\"\nL.Cooldown\t\t\t\t\t= \"冷卻時間\"\nL.Error_FillUp\t\t\t\t= \"請填寫完整\"\n"
  },
  {
    "path": "DBM-StatusBarTimers/DBM-StatusBarTimers.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF Status Bar Timers|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF Temporizadores de Estado|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF Temporizadores de Estado|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF 상태 바 타이머|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF 狀態條計時器|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF 状态条计时器|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff0055FF Таймеры|r\n## Notes: DBM - status bar timer library\n## Notes-esES: DBM - librería de temporizadores de estado\n## Notes-esMX: DBM - librería de temporizadores de estado\n## Notes-itIT: DBM - libreria barre di stato temporizzatori\n## Notes-koKR: DBM - 상태 바 타이머 라이브러리\n## Notes-zhTW: DBM 狀態條計時器函式庫\n## Notes-zhCN: DBM 状态条计时器函数库\n## Notes-ruRU: DBM - библиотека таймеров\n## SavedVariables: DBT_AllPersistentOptions\n## LoadOnDemand: 0\n## DefaultState: enabled\n## Author: MysticalOS, QartemisT\n## Version: 10.1.13_alpha\n## X-Website: https://deadlybossmods.com\n\nDBT.lua\n"
  },
  {
    "path": "DBM-StatusBarTimers/DBT.lua",
    "content": "-- ***************************************************\n-- **               Deadly Bar Timers               **\n-- **         http://www.deadlybossmods.com         **\n-- ***************************************************\n--\n-- This addon is written and copyrighted by:\n--    * Paul Emmerich (Tandanu @ EU-Aegwynn) (DBM-Core)\n--    * Martin Verges (Nitram @ EU-Azshara) (DBM-GUI)\n--\n-- The localizations are written by:\n--    * enGB/enUS: Tandanu\t\t\t\thttp://www.deadlybossmods.com\n--    * deDE: Tandanu\t\t\t\t\thttp://www.deadlybossmods.com\n--    * zhCN: Diablohu\t\t\t\t\thttp://wow.gamespot.com.cn\n--    * ruRU: BootWin\t\t\t\t\tbootwin@gmail.com\n--    * ruRU: Vampik\t\t\t\t\tadmin@vampik.ru\n--    * zhTW: Hman\t\t\t\t\t\therman_c1@hotmail.com\n--    * zhTW: Azael/kc10577\t\t\t\tpaul.poon.kw@gmail.com\n--    * koKR: BlueNyx/nBlueWiz\t\t\tbluenyx@gmail.com / everfinale@gmail.com\n--    * esES: Snamor/1nn7erpLaY     \tromanscat@hotmail.com\n--\n-- Special thanks to:\n--    * Arta\n--    * Omegal @ US-Whisperwind (continuing mod support for 3.2+)\n--    * Tennberg (a lot of fixes in the enGB/enUS localization)\n--\n--\n-- The code of this addon is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License. (see license.txt)\n-- All included textures and sounds are copyrighted by their respective owners.\n--\n--\n--  You are free:\n--    * to Share ?to copy, distribute, display, and perform the work\n--    * to Remix ?to make derivative works\n--  Under the following conditions:\n--    * Attribution. You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).\n--    * Noncommercial. You may not use this work for commercial purposes.\n--    * Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.\n\n\n---------------\n--  Globals  --\n---------------\nDBT = {\n\tbars = {},\n\tnumBars = 0\n}\nlocal DBT = DBT\n\nlocal standardFont\nif LOCALE_koKR then\n\tstandardFont = \"Fonts\\\\2002.TTF\"\nelseif LOCALE_zhCN then\n\tstandardFont = \"Fonts\\\\ARKai_T.ttf\"\nelseif LOCALE_zhTW then\n\tstandardFont = \"Fonts\\\\blei00d.TTF\"\nelseif LOCALE_ruRU then\n\tstandardFont = \"Fonts\\\\FRIZQT___CYR.TTF\"\nelse\n\tstandardFont = \"Fonts\\\\FRIZQT__.TTF\"\nend\n\nDBT.DefaultOptions = {\n\tStartColorR = 1,\n\tStartColorG = 0.7,\n\tStartColorB = 0,\n\tEndColorR = 1,\n\tEndColorG = 0,\n\tEndColorB = 0,\n\t--Type 1 (Add)\n\tStartColorAR = 0.375,\n\tStartColorAG = 0.545,\n\tStartColorAB = 1,\n\tEndColorAR = 0.15,\n\tEndColorAG = 0.385,\n\tEndColorAB = 1,\n\t--Type 2 (AOE)\n\tStartColorAER = 1,\n\tStartColorAEG = 0.466,\n\tStartColorAEB = 0.459,\n\tEndColorAER = 1,\n\tEndColorAEG = 0.043,\n\tEndColorAEB = 0.247,\n\t--Type 3 (Targeted)\n\tStartColorDR = 0.9,\n\tStartColorDG = 0.3,\n\tStartColorDB = 1,\n\tEndColorDR = 1,\n\tEndColorDG = 0,\n\tEndColorDB = 1,\n\t--Type 4 (Interrupt)\n\tStartColorIR = 0.47,\n\tStartColorIG = 0.97,\n\tStartColorIB = 1,\n\tEndColorIR = 0.047,\n\tEndColorIG = 0.88,\n\tEndColorIB = 1,\n\t--Type 5 (Role)\n\tStartColorRR = 0.5,\n\tStartColorRG = 1,\n\tStartColorRB = 0.5,\n\tEndColorRR = 0.11,\n\tEndColorRG = 1,\n\tEndColorRB = 0.3,\n\t--Type 6 (Phase)\n\tStartColorPR = 1,\n\tStartColorPG = 0.776,\n\tStartColorPB = 0.420,\n\tEndColorPR = 0.5,\n\tEndColorPG = 0.41,\n\tEndColorPB = 0.285,\n\t--Type 7 (Important/User set only)\n\tStartColorUIR = 1,\n\tStartColorUIG = 1,\n\tStartColorUIB = 0.0627450980392157,\n\tEndColorUIR = 1,\n\tEndColorUIG = 0.92156862745098,\n\tEndColorUIB = 0.0117647058823529,\n\tBar7ForceLarge = false,\n\tBar7CustomInline = true,\n\t-- Variance\n\tVarianceEnabled = true,\n\tVarianceAlpha = 0.5,\n\tVarianceBehavior = \"ZeroAtMinTimerAndNeg\",\n\t-- Small bar\n\tBarXOffset = 0,\n\tBarYOffset = 0,\n\tWidth = 183,\n\tHeight = 20,\n\tAlpha = 0.8,\n\tScale = 0.9,\n\tTimerX = -223,\n\tTimerY = -260,\n\tExpandUpwards = false,\n\tFillUpBars = true,\n\tTimerPoint = \"TOPRIGHT\",\n\tSort = \"Sort\",\n\tDesaturateValue = 1,\n\t-- Huge bar\n\tEnlargeBarTime = 11,\n\tHugeBarXOffset = 0,\n\tHugeBarYOffset = 0,\n\tHugeWidth = 200,\n\tHugeHeight = 20,\n\tHugeAlpha = 1,\n\tHugeScale = 1.03,\n\tHugeTimerX = 0,\n\tHugeTimerY = -120,\n\tExpandUpwardsLarge = false,\n\tFillUpLargeBars = true,\n\tHugeBarsEnabled = true,\n\tHugeTimerPoint = \"CENTER\",\n\tHugeSort = \"Sort\",\n\t-- Misc\n\tTextColorR = 1,\n\tTextColorG = 1,\n\tTextColorB = 1,\n\tTDecimal = 11,\n\tFontSize = 10,\n\tFlashBar = false,\n\tSpark = true,\n\tColorByType = true,\n\tNoBarFade = false,\n\tInlineIcons = true,\n\tIconLeft = true,\n\tIconRight = false,\n\tIconLocked = true,\n\tDynamicColor = true,\n\tClickThrough = false,\n\tDisableRightClick = false,\n\tStripCDText = false,\n\tKeepBars = true,\n\tFadeBars = true,\n\tTexture = \"Interface\\\\AddOns\\\\DBM-StatusBarTimers\\\\textures\\\\default.blp\",\n\tFont = \"standardFont\",\n\tFontFlag = \"None\",\n\tBarStyle = \"NoAnim\",\n\tSkin = \"\"\n}\n\nlocal barPrototype, unusedBarObjects, barIsAnimating = {}, {}, false\nlocal smallBars, largeBars = {}, {}\n\nlocal smallBarsAnchor, largeBarsAnchor = CreateFrame(\"Frame\", nil, UIParent), CreateFrame(\"Frame\", nil, UIParent)\nsmallBarsAnchor:SetSize(1, 1)\nsmallBarsAnchor:SetPoint(\"TOPRIGHT\", 223, -260)\nsmallBarsAnchor:SetClampedToScreen(true)\nsmallBarsAnchor:SetMovable(true)\nsmallBarsAnchor:Show()\nlargeBarsAnchor:SetSize(1, 1)\nlargeBarsAnchor:SetPoint(\"CENTER\", 0, -120)\nlargeBarsAnchor:SetClampedToScreen(true)\nlargeBarsAnchor:SetMovable(true)\nlargeBarsAnchor:Show()\n\nlocal ipairs, pairs, next, type, setmetatable, tinsert, tsort = ipairs, pairs, next, type, setmetatable, table.insert, table.sort\nlocal UIParent = UIParent\n\nfunction DBT:AddDefaultOptions(t1, t2)\n\tfor i, v in pairs(t2) do\n\t\tif t1[i] == nil then\n\t\t\tt1[i] = v\n\t\telseif type(v) == \"table\" and type(t1[i]) == \"table\" then\n\t\t\tself:AddDefaultOptions(t1[i], v)\n\t\tend\n\tend\nend\n\ndo\n\tlocal CreateFrame, GetTime, IsShiftKeyDown = CreateFrame, GetTime, IsShiftKeyDown\n\n\tlocal function onUpdate(self)\n\t\tif self.obj then\n\t\t\tself.obj.curTime = GetTime()\n\t\t\tself.obj.delta = self.obj.curTime - self.obj.lastUpdate\n\t\t\tif barIsAnimating and self.obj.delta >= 0.01 or self.obj.delta >= 0.02 then\n\t\t\t\tself.obj.lastUpdate = self.obj.curTime\n\t\t\t\tself.obj:Update(self.obj.delta)\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal function onMouseDown(self, btn)\n\t\tif self.obj and btn == \"LeftButton\" and DBT.movable then\n\t\t\tif self.obj.enlarged then\n\t\t\t\tlargeBarsAnchor:StartMoving()\n\t\t\telse\n\t\t\t\tsmallBarsAnchor:StartMoving()\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal function onMouseUp(self, btn)\n\t\tif self.obj then\n\t\t\tsmallBarsAnchor:StopMovingOrSizing()\n\t\t\tlargeBarsAnchor:StopMovingOrSizing()\n\t\t\tDBT:SavePosition()\n\t\t\tif btn == \"RightButton\" and not DBT.Options.DisableRightClick then\n\t\t\t\tself.obj:Cancel()\n\t\t\telseif btn == \"LeftButton\" and IsShiftKeyDown() then\n\t\t\t\tself.obj:Announce()\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal function onHide(self)\n\t\tsmallBarsAnchor:StopMovingOrSizing()\n\t\tlargeBarsAnchor:StopMovingOrSizing()\n\tend\n\n\tlocal fCounter = 1\n\n\tlocal function createBarFrame(self)\n\t\tlocal frame = CreateFrame(\"Frame\", \"DBT_Bar_\" .. fCounter, smallBarsAnchor)\n\t\tframe:SetSize(195, 20)\n\t\tframe:SetScript(\"OnUpdate\", onUpdate)\n\t\tframe:SetScript(\"OnMouseDown\", onMouseDown)\n\t\tframe:SetScript(\"OnMouseUp\", onMouseUp)\n\t\tframe:SetScript(\"OnHide\", onHide)\n\t\tlocal bar = CreateFrame(\"StatusBar\", \"$parentBar\", frame)\n\t\tbar:SetPoint(\"CENTER\", frame, \"CENTER\")\n\t\tbar:SetSize(195, 20)\n\t\tbar:SetMinMaxValues(0, 1)\n\t\tbar:SetStatusBarTexture(self.Options.Texture)\n\t\tbar:SetStatusBarColor(1, 0.7, 0)\n\t\tlocal barBackdrop = {\n\t\t\tbgFile = \"Interface\\\\Buttons\\\\WHITE8X8\",\n\t\t}\n\t\tbar:SetBackdrop(barBackdrop)\n\t\tbar:SetBackdropColor(0, 0, 0, 0.3)\n\t\tlocal spark = bar:CreateTexture(\"$parentSpark\", \"OVERLAY\")\n\t\tspark:SetPoint(\"CENTER\", bar, \"CENTER\")\n\t\tspark:SetSize(32, 64)\n\t\tspark:SetTexture(\"Interface\\\\AddOns\\\\DBM-StatusBarTimers\\\\textures\\\\Spark.blp\")\n\t\tspark:SetBlendMode(\"ADD\")\n\t\tlocal timer = bar:CreateFontString(\"$parentTimer\", \"OVERLAY\", \"GameFontHighlightSmall\")\n\t\ttimer:SetPoint(\"RIGHT\", bar, \"RIGHT\", -1, 0.5)\n\t\tlocal name = bar:CreateFontString(\"$parentName\", \"OVERLAY\", \"GameFontHighlightSmall\")\n\t\tname:SetPoint(\"LEFT\", bar, \"LEFT\", 7, 0.5)\n\t\tname:SetPoint(\"RIGHT\", timer, \"LEFT\", -7, 0)\n\t\tname:SetWordWrap(false)\n\t\tname:SetJustifyH(\"LEFT\")\n\t\tlocal icon1 = bar:CreateTexture(\"$parentIcon1\", \"OVERLAY\")\n\t\ticon1:SetPoint(\"RIGHT\", bar, \"LEFT\")\n\t\ticon1:SetSize(20, 20)\n\t\tlocal icon2 = bar:CreateTexture(\"$parentIcon2\", \"OVERLAY\")\n\t\ticon2:SetPoint(\"LEFT\", bar, \"RIGHT\")\n\t\ticon2:SetSize(20, 20)\n\t\tlocal varianceTex = bar:CreateTexture(\"$parentVariance\", \"OVERLAY\")\n\t\tvarianceTex:SetPoint(\"RIGHT\", bar, \"RIGHT\")\n\t\tvarianceTex:SetPoint(\"TOPRIGHT\", bar, \"TOPRIGHT\")\n\t\tvarianceTex:SetPoint(\"BOTTOMRIGHT\", bar, \"BOTTOMRIGHT\")\n\t\tvarianceTex:SetTexture(\"Interface\\\\TargetingFrame\\\\UI-StatusBar\")\n\t\tvarianceTex:SetWidth(20)\n\t\tvarianceTex:SetBlendMode(\"ADD\")\n\t\tvarianceTex:SetAlpha(0.5)\n\n\t\tlocal varianceTexBorder = bar:CreateTexture(\"$parentVarianceBorder\", \"OVERLAY\")\n\t\tvarianceTexBorder:SetVertexColor(0, 0, 0, 1)\n\t\tvarianceTexBorder:SetPoint(\"TOPLEFT\", varianceTex, \"TOPLEFT\", -1, 0)\n\t\tvarianceTexBorder:SetPoint(\"BOTTOMLEFT\", varianceTex, \"BOTTOMLEFT\", -1, 0)\n\t\tvarianceTexBorder:SetTexture(\"Interface\\\\Buttons\\\\WHITE8X8\")\n\t\tvarianceTexBorder:SetWidth(1)\n\t\tfCounter = fCounter + 1\n\n\t\tframe:EnableMouse(not self.Options.ClickThrough or self.movable)\n\t\treturn frame\n\tend\n\n\tlocal mt = {__index = barPrototype}\n\n\tlocal function parseTimer(timer)\n\t\tif not timer then return end\n\n\t\tif type(timer) == \"number\" then\n\t\t\tif timer <= 0 then return end\n\n\t\t\treturn timer -- Normal number timer, no variance\n\t\tend\n\n\t\t-- Check for variance format like \"v30.5-40\" or \"dv30.5-40\"\n\t\tif type(timer) == \"string\" then\n\t\t\t-- ^v matches starting character d (optional) or v\n\t\t\t-- (%d+%.?%d*) matches any number of digits with optional decimal\n\t\t\t-- %- matches literal character \"-\"\n\t\t\t-- (%d+%.?%d*)$ matches any number of digits with optional decimal, at the end of the string\n\t\t\tif not timer:match(\"^v(%d+%.?%d*)%-(%d+%.?%d*)$\") then return end\n\n\t\t\tlocal minTimer, maxTimer = timer:match(\"v(%d+%.?%d*)%-(%d+%.?%d*)\")\n\t\t\tminTimer, maxTimer = tonumber(minTimer), tonumber(maxTimer)\n\t\t\tlocal varianceDuration = maxTimer - minTimer\n\n\t\t\treturn maxTimer, minTimer, varianceDuration  -- maximum possible timer from the variance window, minimum..., variance duration\n\t\tend\n\n\t\treturn -- Invalid input\n\tend\n\tDBT.parseTimer = parseTimer\n\n\tfunction DBT:CreateBar(timer, id, icon, huge, small, color, isDummy, colorType, inlineIcon, keep, fade, countdown, countdownMax)\n\t\tlocal varianceMaxTimer, varianceMinTimer, varianceDuration\n\t\tvarianceMaxTimer, varianceMinTimer, varianceDuration = parseTimer(timer) -- either normal number or with variance\n\t\tif self.Options.VarianceEnabled then\n\t\t\ttimer = varianceMaxTimer\n\t\telse\n\t\t\ttimer = varianceMinTimer or varianceMaxTimer -- varianceMaxTimer here could be just normal number timer, so check for varianceMinTimer, which only exists if it's a variant timer\n\t\tend\n\t\tif not timer or (self.numBars >= 15 and not isDummy) then\n\t\t\treturn\n\t\tend\n\t\t-- Most efficient place to block it, nil colorType instead of checking option every update\n\t\tif not self.Options.ColorByType then\n\t\t\tcolorType = nil\n\t\tend\n\t\tlocal newBar = self:GetBar(id)\n\t\tif newBar then -- Update an existing bar\n\t\t\tnewBar.lastUpdate = GetTime()\n\t\t\tnewBar.huge = huge or nil\n\t\t\tnewBar.paused = nil\n\t\t\tnewBar.minTimer = varianceMinTimer or nil\n\t\t\tnewBar.varianceDuration = varianceDuration or 0\n\t\t\tnewBar.hasVariance = varianceMinTimer and true or false\n\t\t\tnewBar:SetTimer(timer) -- This can kill the timer and the timer methods don't like dead timers\n\t\t\tnewBar.keep = keep -- keep this after SetTimer, not before, otherwise the bar will turn dead if Debug mode enabled and switching from var to non-var, since Update(0) will Cancel the timer\n\t\t\tif newBar.dead then\n\t\t\t\treturn\n\t\t\tend\n\t\t\tnewBar:SetElapsed(0)\n\t\t\tif newBar.dead then\n\t\t\t\treturn\n\t\t\tend\n\t\t\tnewBar:ApplyStyle()\n\t\t\tnewBar:SetText(id)\n\t\t\tnewBar:SetIcon(icon)\n\t\telse -- Create a new bar\n\t\t\tnewBar = next(unusedBarObjects)\n\t\t\tif newBar then\n\t\t\t\tnewBar.lastUpdate = GetTime()\n\t\t\t\tunusedBarObjects[newBar] = nil\n\t\t\t\tnewBar.dead = nil -- Resurrected it :)\n\t\t\t\tnewBar.id = id\n\t\t\t\tnewBar.timer = timer\n\t\t\t\tnewBar.totalTime = timer\n\t\t\t\tnewBar.moving = nil\n\t\t\t\tnewBar.enlarged = nil\n\t\t\t\tnewBar.fadingIn = 0\n\t\t\t\tnewBar.small = small\n\t\t\t\tnewBar.color = color\n\t\t\t\tnewBar.colorType = colorType\n\t\t\t\tnewBar.flashing = nil\n\t\t\t\tnewBar.inlineIcon = inlineIcon\n\t\t\t\tnewBar.keep = keep\n\t\t\t\tnewBar.fade = fade\n\t\t\t\tnewBar.countdown = countdown\n\t\t\t\tnewBar.countdownMax = countdownMax\n\t\t\t\tnewBar.minTimer = varianceMinTimer or nil\n\t\t\t\tnewBar.varianceDuration = varianceDuration or 0\n\t\t\t\tnewBar.hasVariance = varianceMinTimer and true or false\n\t\t\telse -- Duplicate code ;(\n\t\t\t\tlocal newFrame = createBarFrame(self)\n\t\t\t\tnewBar = setmetatable({\n\t\t\t\t\tframe = newFrame,\n\t\t\t\t\tid = id,\n\t\t\t\t\ttimer = timer,\n\t\t\t\t\ttotalTime = timer,\n\t\t\t\t\towner = self,\n\t\t\t\t\tmoving = nil,\n\t\t\t\t\tenlarged = nil,\n\t\t\t\t\tfadingIn = 0,\n\t\t\t\t\tsmall = small,\n\t\t\t\t\tcolor = color,\n\t\t\t\t\tflashing = nil,\n\t\t\t\t\tcolorType = colorType,\n\t\t\t\t\tinlineIcon = inlineIcon,\n\t\t\t\t\tkeep = keep,\n\t\t\t\t\tfade = fade,\n\t\t\t\t\tcountdown = countdown,\n\t\t\t\t\tcountdownMax = countdownMax,\n\t\t\t\t\tminTimer = varianceMinTimer or nil,\n\t\t\t\t\tvarianceDuration = varianceDuration or 0,\n\t\t\t\t\thasVariance = varianceMinTimer and true or false,\n\t\t\t\t\tlastUpdate = GetTime()\n\t\t\t\t}, mt)\n\t\t\t\tnewFrame.obj = newBar\n\t\t\tend\n\t\t\tself.numBars = self.numBars + 1\n\t\t\tif ((colorType and colorType == 7 and self.Options.Bar7ForceLarge) or ((varianceMinTimer or timer) <= (self.Options.EnlargeBarTime or 11) or huge)) and self.Options.HugeBarsEnabled then -- Start enlarged\n\t\t\t\tnewBar.enlarged = true\n\t\t\t\tnewBar.huge = true\n\t\t\t\ttinsert(largeBars, newBar)\n\t\t\telse\n\t\t\t\tnewBar.huge = nil\n\t\t\t\ttinsert(smallBars, newBar)\n\t\t\tend\n\t\t\tnewBar:SetText(id)\n\t\t\tnewBar:SetIcon(icon)\n\t\t\tself.bars[newBar] = true\n\t\t\tself:UpdateBars(true)\n\t\t\tnewBar:ApplyStyle()\n\t\t\tnewBar:Update(0)\n\t\tend\n\t\treturn newBar\n\tend\nend\n\ndo\n\tlocal gsub = string.gsub\n\n\tlocal function fixElv(optionName)\n\t\tif DBT.Options[optionName]:lower():find(\"interface\\\\addons\\\\elvui\\\\core\\\\media\\\\\") then -- Retail ElvUI structure\n\t\t\tDBT.Options[optionName] = gsub(DBT.Options[optionName], gsub(\"Interface\\\\AddOns\\\\ElvUI\\\\Core\\\\Media\\\\\", \"(%a)\", function(v)\n\t\t\t\treturn \"[\" .. v:upper() .. v:lower() .. \"]\"\n\t\t\tend), \"Interface\\\\AddOns\\\\ElvUI\\\\Media\\\\\") -- 3.3.5a ElvUI structure\n\t\tend\n\tend\n\n\tfunction DBT:LoadOptions(id)\n\t\tif not DBT_AllPersistentOptions then\n\t\t\tDBT_AllPersistentOptions = {}\n\t\tend\n\t\tlocal DBM_UsedProfile = DBM_UsedProfile or \"Default\"\n\t\tif not DBT_AllPersistentOptions[DBM_UsedProfile] then\n\t\t\tDBT_AllPersistentOptions[DBM_UsedProfile] = {}\n\t\tend\n\t\tDBT_AllPersistentOptions[DBM_UsedProfile][id] = DBT_AllPersistentOptions[DBM_UsedProfile][id] or {}\n\t\tself:AddDefaultOptions(DBT_AllPersistentOptions[DBM_UsedProfile][id], self.DefaultOptions)\n\t\tself.Options = DBT_AllPersistentOptions[DBM_UsedProfile][id]\n\t\tself:Rearrange()\n\t\t-- Fix font if it's nil or set to any of standard font values\n\t\tif not self.Options.Font or (self.Options.Font == \"Fonts\\\\2002.TTF\" or self.Options.Font == \"Fonts\\\\ARKai_T.ttf\" or self.Options.Font == \"Fonts\\\\blei00d.TTF\" or self.Options.Font == \"Fonts\\\\FRIZQT___CYR.TTF\" or self.Options.Font == \"Fonts\\\\FRIZQT__.TTF\") then\n\t\t\tself.Options.Font = self.DefaultOptions.Font\n\t\tend\n\t\t-- Migrate texture from default skin to internal\n\t\tif self.Options.Texture == \"Interface\\\\AddOns\\\\DBM-DefaultSkin\\\\textures\\\\default.blp\" then\n\t\t\tself.Options.Texture = self.DefaultOptions.Texture\n\t\tend\n\t\t-- Migrate sort\n\t\tif self.Options.Sort == true then\n\t\t\tself.Options.Sort = \"Sort\"\n\t\tend\n\t\t-- Migrate ElvUI changes\n\t\tfixElv(\"Texture\")\n\t\tfixElv(\"Font\")\n\tend\n\n\tfunction DBT:CreateProfile(id)\n\t\tif not id or id == \"\" or id:find(\" \") then\n\t\t\tself:AddMsg(DBM_CORE_L.PROFILE_CREATE_ERROR)\n\t\t\treturn\n\t\tend\n\t\tlocal DBM_UsedProfile = DBM_UsedProfile or \"Default\"\n\t\tif not DBT_AllPersistentOptions then\n\t\t\tDBT_AllPersistentOptions = {}\n\t\tend\n\t\tif not DBT_AllPersistentOptions[DBM_UsedProfile] then\n\t\t\tDBT_AllPersistentOptions[DBM_UsedProfile] = {}\n\t\tend\n\t\tif DBT_AllPersistentOptions[DBM_UsedProfile][id] then\n\t\t\tDBM:AddMsg(DBM_CORE_L.PROFILE_CREATE_ERROR_D:format(id))\n\t\t\treturn\n\t\tend\n\t\tDBT_AllPersistentOptions[DBM_UsedProfile][id] = DBT_AllPersistentOptions[DBM_UsedProfile][id] or {}\n\t\tself:AddDefaultOptions(DBT_AllPersistentOptions[DBM_UsedProfile][id], self.DefaultOptions)\n\t\tself.Options = DBT_AllPersistentOptions[DBM_UsedProfile][id]\n\t\tself:Rearrange()\n\t\tDBM:AddMsg(DBM_CORE_L.PROFILE_CREATED:format(id))\n\tend\n\n\tfunction DBT:ApplyProfile(id, hasPrinted)\n\t\tif not DBT_AllPersistentOptions then\n\t\t\tDBT_AllPersistentOptions = {}\n\t\tend\n\t\tlocal DBM_UsedProfile = DBM_UsedProfile or \"Default\"\n\t\tif not id or not DBT_AllPersistentOptions[DBM_UsedProfile] or not DBT_AllPersistentOptions[DBM_UsedProfile][id] then\n\t\t\tDBM:AddMsg(DBM_CORE_L.PROFILE_APPLY_ERROR:format(id or DBM_CORE_L.UNKNOWN))\n\t\t\treturn\n\t\tend\n\t\tself:AddDefaultOptions(DBT_AllPersistentOptions[DBM_UsedProfile][id], self.DefaultOptions)\n\t\tself.Options = DBT_AllPersistentOptions[DBM_UsedProfile][id]\n\t\tself:Rearrange()\n\t\tif not hasPrinted then\n\t\t\tDBM:AddMsg(DBM_CORE_L.PROFILE_APPLIED:format(id))\n\t\tend\n\tend\n\n\tfunction DBT:CopyProfile(name, id, hasPrinted)\n\t\tif not DBT_AllPersistentOptions then\n\t\t\tDBT_AllPersistentOptions = {}\n\t\tend\n\t\tlocal DBM_UsedProfile = DBM_UsedProfile or \"Default\"\n\t\tif not hasPrinted then\n\t\t\tif not name or not DBT_AllPersistentOptions[name] then\n\t\t\t\tDBM:AddMsg(DBM_CORE_L.PROFILE_COPY_ERROR:format(name or DBM_CORE_L.UNKNOWN))\n\t\t\t\treturn\n\t\t\telseif name == DBM_UsedProfile then\n\t\t\t\tDBM:AddMsg(DBM_CORE_L.PROFILE_COPY_ERROR_SELF)\n\t\t\t\treturn\n\t\t\tend\n\t\tend\n\t\tif not DBT_AllPersistentOptions[DBM_UsedProfile] then\n\t\t\tDBT_AllPersistentOptions[DBM_UsedProfile] = {}\n\t\tend\n\t\tif not DBT_AllPersistentOptions[name] then\n\t\t\tDBT_AllPersistentOptions[name] = {}\n\t\tend\n\t\tDBT_AllPersistentOptions[DBM_UsedProfile][id] = DBT_AllPersistentOptions[name][id] or {}\n\t\tself:AddDefaultOptions(DBT_AllPersistentOptions[DBM_UsedProfile][id], self.DefaultOptions)\n\t\tself.Options = DBT_AllPersistentOptions[DBM_UsedProfile][id]\n\t\tself:Rearrange()\n\t\tif not hasPrinted then\n\t\t\tDBM:AddMsg(DBM_CORE_L.PROFILE_COPIED:format(name))\n\t\tend\n\tend\n\n\tfunction DBT:DeleteProfile(name, id)\n\t\tif not DBT_AllPersistentOptions then\n\t\t\tDBT_AllPersistentOptions = {}\n\t\tend\n\t\tif name == \"Default\" or not DBT_AllPersistentOptions[name] then\n\t\t\treturn\n\t\tend\n\t\tDBT_AllPersistentOptions[name] = nil\n\t\tlocal DBM_UsedProfile = DBM_UsedProfile or \"Default\"\n\t\tself.Options = DBT_AllPersistentOptions[DBM_UsedProfile][id]\n\t\tself:Rearrange()\n\tend\n\n\tfunction DBT:Rearrange()\n\t\tsmallBarsAnchor:ClearAllPoints()\n\t\tlargeBarsAnchor:ClearAllPoints()\n\t\tsmallBarsAnchor:SetPoint(self.Options.TimerPoint, UIParent, self.Options.TimerPoint, self.Options.TimerX, self.Options.TimerY)\n\t\tlargeBarsAnchor:SetPoint(self.Options.HugeTimerPoint, UIParent, self.Options.HugeTimerPoint, self.Options.HugeTimerX, self.Options.HugeTimerY)\n\t\tself:ApplyStyle()\n\tend\nend\n\ndo\n\tlocal oldInfoFrameLocked, oldRangeFrameLocked\n\n\tlocal function updateClickThrough(self, newValue)\n\t\tif not self.movable then\n\t\t\tfor bar in self:GetBarIterator() do\n\t\t\t\tif not bar.dummy then\n\t\t\t\t\tbar.frame:EnableMouse(not newValue)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\n\tlocal function moveEnd(self)\n\t\tupdateClickThrough(self, self.Options.ClickThrough)\n\t\tself.movable = false\n\t\tDBM.Options.InfoFrameLocked = oldInfoFrameLocked\n\t\tDBM.InfoFrame:Hide()\n\t\tDBM.Options.RangeFrameLocked = oldRangeFrameLocked\n\t\tDBM.RangeCheck:Hide(true)\n\tend\n\n\tfunction DBT:ShowMovableBar(small, large)\n\t\tif small or small == nil then\n\t\t\tself:CreateBar(20, \"Move1\", \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\", nil, true):SetText(DBM_CORE_L.MOVABLE_BAR)\n\t\tend\n\t\tif large or large == nil then\n\t\t\tself:CreateBar(20, \"Move2\", \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\", true):SetText(DBM_CORE_L.MOVABLE_BAR)\n\t\tend\n\t\tupdateClickThrough(self, false)\n\t\tself.movable = true\n\t\tDBM:Unschedule(moveEnd, self)\n\t\tDBM:Schedule(20, moveEnd, self)\n\t\toldInfoFrameLocked = DBM.Options.InfoFrameLocked\n\t\tDBM.Options.InfoFrameLocked = false\n\t\tDBM.InfoFrame:Show(5, \"test\")\n\t\toldRangeFrameLocked = DBM.Options.RangeFrameLocked\n\t\tDBM.Options.RangeFrameLocked = false\n\t\tDBM.RangeCheck:Show(nil, nil, true)\n\tend\n\n\tfunction DBT:SetOption(option, value, noUpdate)\n\t\tif option == \"ExpandUpwards\" or option == \"ExpandUpwardsLarge\" or option == \"BarYOffset\" or option == \"BarXOffset\" or option == \"HugeBarYOffset\" or option == \"HugeBarXOffset\" then\n\t\t\tfor bar in self:GetBarIterator() do\n\t\t\t\tif not bar.dummy then\n\t\t\t\t\tif bar.moving == \"enlarge\" then\n\t\t\t\t\t\tbar.enlarged = true\n\t\t\t\t\t\tbar.moving = nil\n\t\t\t\t\t\ttinsert(largeBars, bar)\n\t\t\t\t\telse\n\t\t\t\t\t\tbar.moving = nil\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\telseif option == \"ClickThrough\" then\n\t\t\tupdateClickThrough(self, value)\n\t\tend\n\t\tself.Options[option] = value\n\t\tif not noUpdate then\n\t\t\tself:UpdateBars(true)\n\t\t\tself:ApplyStyle()\n\t\tend\n\tend\nend\n\ndo\n\tlocal dummyBars = 0\n\tlocal function dummyCancel(self)\n\t\tself.timer = self.totalTime\n\t\tself.flashing = nil\n\t\tself:Update(0)\n\t\tself.flashing = nil\n\t\t_G[self.frame:GetName() .. \"BarSpark\"]:SetAlpha(1)\n\tend\n\n\tfunction DBT:CreateDummyBar(colorType, inlineIcon, text)\n\t\tdummyBars = dummyBars + 1\n\t\tlocal dummy = self:CreateBar(\"v20-25\", \"dummy\" .. dummyBars, \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\", nil, true, nil, true, colorType, inlineIcon)\n\t\tdummy:SetText(text or \"Dummy\", inlineIcon)\n\t\tdummy:Cancel()\n\t\tself.bars[dummy] = true\n\t\tunusedBarObjects[dummy] = nil\n\t\tdummy.frame:SetParent(UIParent)\n\t\tdummy.frame:ClearAllPoints()\n\t\tdummy.frame:SetScript(\"OnUpdate\", nil)\n\t\tdummy.Cancel = dummyCancel\n\t\tdummy:ApplyStyle()\n\t\tdummy.dummy = true\n\t\treturn dummy\n\tend\nend\n\nfunction DBT:GetBarIterator()\n\tif not self.bars then\n\t\tDBM:Debug(\"GetBarIterator failed for unknown reasons\")\n\t\treturn\n\tend\n\treturn pairs(self.bars)\nend\n\nfunction DBT:GetBar(id)\n\tfor bar in self:GetBarIterator() do\n\t\tif id == bar.id then\n\t\t\treturn bar\n\t\tend\n\tend\nend\n\nfunction DBT:CancelBar(id)\n\tfor bar in self:GetBarIterator() do\n\t\tif id == bar.id then\n\t\t\tbar:Cancel()\n\t\t\treturn true\n\t\tend\n\tend\n\treturn false\nend\n\nfunction DBT:ResetBarVariance(bar)\n\tif bar.hasVariance then\n\t\tbar.minTimer = nil\n\t\tbar.varianceDuration = 0\n\t\tbar.hasVariance = false\n\t\tbar:ApplyStyle() -- Running this here since this is skipped if bar was already enlarged. REVIEW! Will run twice otherwise\n\tend\nend\n\nfunction DBT:UpdateBar(id, elapsed, totalTime)\n\tfor bar in self:GetBarIterator() do\n\t\tif id == bar.id then\n\t\t\tif type(totalTime) == \"number\" then\n\t\t\t\tDBT:ResetBarVariance(bar)\n\t\t\telseif type(totalTime) == \"string\" then -- found string (variance)\n\t\t\t\tlocal varianceMaxTimer, varianceMinTimer, varianceDuration\n\t\t\t\tvarianceMaxTimer, varianceMinTimer, varianceDuration = DBT.parseTimer(totalTime) -- either normal number or with variance\n\t\t\t\tif self.Options.VarianceEnabled then\n\t\t\t\t\ttotalTime = varianceMaxTimer\n\t\t\t\telse\n\t\t\t\t\ttotalTime = varianceMinTimer or varianceMaxTimer -- varianceMaxTimer here could be just normal number timer, so check for varianceMinTimer, which only exists if it's a variant timer\n\t\t\t\tend\n\t\t\t\tbar.minTimer = varianceMinTimer or nil\n\t\t\t\tbar.varianceDuration = varianceDuration or 0\n\t\t\t\tbar.hasVariance = varianceMinTimer and true or false\n\t\t\t\tbar:ApplyStyle()\n\t\t\tend\n\t\t\tbar:SetTimer(totalTime or bar.totalTime)\n\t\t\tbar:SetElapsed(elapsed or self.totalTime - self.timer)\n\t\t\treturn true\n\t\tend\n\tend\n\treturn false\nend\n\nfunction DBT:SetAnnounceHook(f)\n\tself.announceHook = f\nend\n\nfunction DBT:UpdateBars(sortBars)\n\tif sortBars and self.Options.Sort ~= \"None\" then\n\t\ttsort(largeBars, function(x, y)\n\t\t\tif self.Options.HugeSort == \"Invert\" then\n\t\t\t\treturn x.timer < y.timer\n\t\t\tend\n\t\t\treturn x.timer > y.timer\n\t\tend)\n\t\ttsort(smallBars, function(x, y)\n\t\t\tif self.Options.Sort == \"Invert\" then\n\t\t\t\treturn x.timer < y.timer\n\t\t\tend\n\t\t\treturn x.timer > y.timer\n\t\tend)\n\tend\n\tfor i, bar in ipairs(largeBars) do\n\t\tbar.frame:ClearAllPoints()\n\t\tbar.frame:SetPoint(\"TOP\", largeBarsAnchor, \"TOP\", (i - 1) * self.Options.HugeBarXOffset, ((i - 1) * (self.Options.HugeHeight + self.Options.HugeBarYOffset)) * (self.Options.ExpandUpwardsLarge and 1 or -1))\n\tend\n\tfor i, bar in ipairs(smallBars) do\n\t\tbar.frame:ClearAllPoints()\n\t\tbar.frame:SetPoint(\"TOP\", smallBarsAnchor, \"TOP\", (i - 1) * self.Options.BarXOffset, ((i - 1) * (self.Options.Height + self.Options.BarYOffset)) * (self.Options.ExpandUpwards and 1 or -1))\n\tend\nend\n\nfunction DBT:ApplyStyle()\n\tfor bar in self:GetBarIterator() do\n\t\tbar:ApplyStyle()\n\tend\nend\n\nfunction DBT:SavePosition()\n\tlocal point, _, _, x, y = smallBarsAnchor:GetPoint(1)\n\tself:SetOption(\"TimerPoint\", point)\n\tself:SetOption(\"TimerX\", x)\n\tself:SetOption(\"TimerY\", y)\n\tpoint, _, _, x, y = largeBarsAnchor:GetPoint(1)\n\tself:SetOption(\"HugeTimerPoint\", point)\n\tself:SetOption(\"HugeTimerX\", x)\n\tself:SetOption(\"HugeTimerY\", y)\nend\n\nfunction DBT:ShowTestBars()\n\tself:CreateBar(10, \"Test 1\", \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\")\n\tself:CreateBar(14, \"Test 2\", \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\")\n\tself:CreateBar(20, \"Test 3\", \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\")\n\tself:CreateBar(12, \"Test 4\", \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\")\n\tself:CreateBar(21.5, \"Test 5\", \"Interface\\\\Icons\\\\Spell_Nature_WispSplode\")\nend\n\nfunction barPrototype:SetTimer(timer)\n\tself.totalTime = timer\n\tself:Update(0)\nend\n\nfunction barPrototype:ResetAnimations(makeBig)\n\tself:RemoveFromList()\n\tself.moving = nil\n\tif DBT.Options.HugeBarsEnabled and makeBig then\n\t\tself.enlarged = true\n\t\ttinsert(largeBars, self)\n\telse\n\t\tself.enlarged = nil\n\t\ttinsert(smallBars, self)\n\tend\n\tself:ApplyStyle()\nend\n\nfunction barPrototype:Pause()\n\tself.flashing = nil\n\tself.ftimer = nil\n\tself:Update(0)\n\tself.paused = true\n\tself:ResetAnimations() -- Forces paused bar into small bars so they don't clutter huge bars anchor\n\tDBT:UpdateBars(true)\nend\n\nfunction barPrototype:Resume()\n\tself.paused = nil\n\tDBT:UpdateBars(true)\nend\n\nfunction barPrototype:SetElapsed(elapsed)\n\tself.timer = self.totalTime - elapsed\n\tlocal enlargeTime = DBT.Options.EnlargeBarTime or 11\n\t-- Bar was large, or moving (animating from the small to large bar anchor) at time this was called\n\t-- Force reset animation and move it back to the small anchor since time was added to bar\n\tif (self.enlarged or self.moving == \"enlarge\") and self.timer > enlargeTime then\n\t\tself:ResetAnimations()\n\t-- Bar was small, or moving from small to large when time was removed\n\t-- Also force reset animation but this time move it from small anchor into large one\n\telseif not self.paused and (not self.enlarged or self.moving == \"enlarge\") and self.timer <= enlargeTime then\n\t\tself:ResetAnimations(true)\n\tend\n\tself:Update(0)\n\tDBT:UpdateBars(true)\nend\n\nfunction barPrototype:SetText(text, inlineIcon)\n\tif not DBT.Options.InlineIcons then\n\t\tinlineIcon = nil\n\tend\n\t-- Force change color type 7 to custom inlineIcon\n\t_G[self.frame:GetName()..\"BarName\"]:SetText(((self.colorType and self.colorType == 7 and DBT.Options.Bar7CustomInline) and DBM_COMMON_L.IMPORTANT_ICON or inlineIcon or \"\") .. text)\nend\n\nfunction barPrototype:SetIcon(icon)\n\tlocal frame_name = self.frame:GetName()\n\t_G[frame_name..\"BarIcon1\"]:SetTexture(icon)\n\t_G[frame_name..\"BarIcon2\"]:SetTexture(icon)\nend\n\nfunction barPrototype:SetColor(color)\n\t-- Fix to allow colors not require the table keys\n\tif color[1] and not color.r then\n\t\tcolor = {\n\t\t\tr = color[1],\n\t\t\tg = color[2],\n\t\t\tb = color[3]\n\t\t}\n\tend\n\tself.color = color\n\tlocal frame_name = self.frame:GetName()\n\t_G[frame_name .. \"Bar\"]:SetStatusBarColor(color.r, color.g, color.b)\n\t_G[frame_name .. \"BarSpark\"]:SetVertexColor(color.r, color.g, color.b)\nend\n\nfunction barPrototype:SetVariance()\n\tlocal frame_name = self.frame:GetName()\n\tlocal varianceTex = _G[frame_name..\"BarVariance\"]\n\tlocal varianceTexBorder = _G[frame_name..\"BarVarianceBorder\"]\n\tif DBT.Options.VarianceEnabled and self.hasVariance then\n\t\tlocal varianceWidth = self.frame:GetWidth() * (self.varianceDuration / self.totalTime)\n\t\tvarianceTex:SetWidth(varianceWidth)\n\n\t\t-- change SetPoints based on fillUpBars\n\t\tlocal bar = _G[frame_name..\"Bar\"]\n\t\tvarianceTex:ClearAllPoints()\n\t\tvarianceTexBorder:ClearAllPoints()\n\t\tlocal isEnlarged = self.enlarged and not self.paused\n\t\tlocal fillUpBars = isEnlarged and DBT.Options.FillUpLargeBars or not isEnlarged and DBT.Options.FillUpBars\n\n\t\tif fillUpBars then\n\t\t\tvarianceTex:SetPoint(\"RIGHT\", bar, \"RIGHT\")\n\t\t\tvarianceTex:SetPoint(\"TOPRIGHT\", bar, \"TOPRIGHT\")\n\t\t\tvarianceTex:SetPoint(\"BOTTOMRIGHT\", bar, \"BOTTOMRIGHT\")\n\t\t\tvarianceTexBorder:SetPoint(\"TOPLEFT\", varianceTex, \"TOPLEFT\", -1, 0)\n\t\t\tvarianceTexBorder:SetPoint(\"BOTTOMLEFT\", varianceTex, \"BOTTOMLEFT\", -1, 0)\n\t\telse\n\t\t\tvarianceTex:SetPoint(\"LEFT\", bar, \"LEFT\")\n\t\t\tvarianceTex:SetPoint(\"TOPLEFT\", bar, \"TOPLEFT\")\n\t\t\tvarianceTex:SetPoint(\"BOTTOMLEFT\", bar, \"BOTTOMLEFT\")\n\t\t\tvarianceTexBorder:SetPoint(\"TOPRIGHT\", varianceTex, \"TOPRIGHT\", 1, 0)\n\t\t\tvarianceTexBorder:SetPoint(\"BOTTOMRIGHT\", varianceTex, \"BOTTOMRIGHT\", 1, 0)\n\t\tend\n\n\t\tvarianceTex:SetAlpha(DBT.Options.VarianceAlpha)\n\n\t\tvarianceTex:Show()\n\t\tvarianceTexBorder:Show()\n\telse\n\t\tvarianceTex:Hide()\n\t\tvarianceTexBorder:Hide()\n\tend\nend\n\nlocal colorVariables = {\n\t[0] = \"\",--Generic\n\t[1] = \"A\",--Add\n\t[2] = \"AE\",--AoE\n\t[3] = \"D\",--Debuff/Targeted attack\n\t[4] = \"I\",--Interrupt\n\t[5] = \"R\",--Role\n\t[6] = \"P\",--Phase\n\t[7] = \"UI\",--Important 1\n--\t[8] = \"I2\",--Important 2 (NYI)\n}\n\nfunction DBT:GetColorForType(colorType)\n\tif not colorVariables[colorType] then\n\t\treturn nil\n\tend\n\tlocal colorVar = colorVariables[colorType]\n\treturn DBT.Options[\"StartColor\"..colorVar..\"R\"], DBT.Options[\"StartColor\"..colorVar..\"G\"], DBT.Options[\"StartColor\"..colorVar..\"B\"]\nend\n\nlocal function stringFromTimer(t)\n\tif t <= DBT.Options.TDecimal then\n\t\treturn (\"%.1f\"):format(t)\n\telseif t <= 60 then\n\t\treturn (\"%d\"):format(t)\n\telse\n\t\treturn (\"%d:%0.2d\"):format(t / 60, math.fmod(t, 60))\n\tend\nend\n\nfunction barPrototype:Update(elapsed)\n\tlocal frame = self.frame\n\tlocal frame_name = frame:GetName()\n\tlocal bar = _G[frame_name .. \"Bar\"]\n\tlocal spark = _G[frame_name .. \"BarSpark\"]\n\tlocal timer = _G[frame_name .. \"BarTimer\"]\n\tlocal paused = self.paused\n\tself.timer = self.timer - (paused and 0 or elapsed)\n\tlocal timerValue = self.timer\n\tlocal timerLowestValueFromVariance = self.hasVariance and self.varianceDuration and timerValue - self.varianceDuration or timerValue\n\tlocal totaltimeValue = self.totalTime\n\tlocal barOptions = DBT.Options\n\tlocal currentStyle = barOptions.BarStyle\n\tlocal sparkEnabled = barOptions.Spark\n\tlocal isMoving = self.moving\n\tlocal isFadingIn = self.fadingIn\n\tlocal colorCount = self.colorType\n\tlocal enlargeEnabled = DBT.Options.HugeBarsEnabled\n\tlocal enlargeHack = self.dummyEnlarge or colorCount == 7 and barOptions.Bar7ForceLarge and enlargeEnabled\n\tlocal enlargeTime = barOptions.EnlargeBarTime or 11\n\tlocal isEnlarged = self.enlarged and not paused\n\tlocal fillUpBars = isEnlarged and barOptions.FillUpLargeBars or not isEnlarged and barOptions.FillUpBars\n\tlocal ExpandUpwards = isEnlarged and barOptions.ExpandUpwardsLarge or not isEnlarged and barOptions.ExpandUpwards\n\tlocal varianceEnabled = barOptions.VarianceEnabled\n\t--\tlocal varianceBehaviorZeroMax = varianceEnabled self.hasVariance and barOptions.VarianceBehavior == \"ZeroAtMaxTimer\"\n\tlocal varianceBehaviorNeg = varianceEnabled and self.hasVariance and barOptions.VarianceBehavior == \"ZeroAtMinTimerAndNeg\"\n\tlocal timerCorrectedNegative = varianceBehaviorNeg and timerLowestValueFromVariance or timerValue\n\tif barOptions.DynamicColor and not self.color then\n\t\tlocal r, g, b\n\t\tif colorCount and colorCount >= 1 then\n\t\t\tlocal colorVar = colorVariables[colorCount]\n\t\t\tif barOptions.NoBarFade then\n\t\t\t\tr = isEnlarged and barOptions[\"EndColor\"..colorVar..\"R\"] or barOptions[\"StartColor\"..colorVar..\"R\"]\n\t\t\t\tg = isEnlarged and barOptions[\"EndColor\"..colorVar..\"G\"] or barOptions[\"StartColor\"..colorVar..\"G\"]\n\t\t\t\tb = isEnlarged and barOptions[\"EndColor\"..colorVar..\"B\"] or barOptions[\"StartColor\"..colorVar..\"B\"]\n\t\t\telse\n\t\t\t\tr = barOptions[\"StartColor\"..colorVar..\"R\"] + (barOptions[\"EndColor\"..colorVar..\"R\"] - barOptions[\"StartColor\"..colorVar..\"R\"]) * (1 - timerValue/totaltimeValue)\n\t\t\t\tg = barOptions[\"StartColor\"..colorVar..\"G\"] + (barOptions[\"EndColor\"..colorVar..\"G\"] - barOptions[\"StartColor\"..colorVar..\"G\"]) * (1 - timerValue/totaltimeValue)\n\t\t\t\tb = barOptions[\"StartColor\"..colorVar..\"B\"] + (barOptions[\"EndColor\"..colorVar..\"B\"] - barOptions[\"StartColor\"..colorVar..\"B\"]) * (1 - timerValue/totaltimeValue)\n\t\t\tend\n\t\telse\n\t\t\tif barOptions.NoBarFade then\n\t\t\t\tr = isEnlarged and barOptions.EndColorR or barOptions.StartColorR\n\t\t\t\tg = isEnlarged and barOptions.EndColorG or barOptions.StartColorG\n\t\t\t\tb = isEnlarged and barOptions.EndColorB or barOptions.StartColorB\n\t\t\telse\n\t\t\t\tr = barOptions.StartColorR + (barOptions.EndColorR - barOptions.StartColorR) * (1 - timerValue/totaltimeValue)\n\t\t\t\tg = barOptions.StartColorG + (barOptions.EndColorG - barOptions.StartColorG) * (1 - timerValue/totaltimeValue)\n\t\t\t\tb = barOptions.StartColorB + (barOptions.EndColorB - barOptions.StartColorB) * (1 - timerValue/totaltimeValue)\n\t\t\tend\n\t\tend\n\t\tif not enlargeEnabled and timerValue > enlargeTime then\n\t\t\tr, g, b = barOptions.DesaturateValue * r, barOptions.DesaturateValue * g, barOptions.DesaturateValue * b\n\t\tend\n\t\tbar:SetStatusBarColor(r, g, b)\n\t\tif sparkEnabled then\n\t\t\tspark:SetVertexColor(r, g, b)\n\t\tend\n\tend\n\tif timerValue <= 0 and not (barOptions.KeepBars and self.keep) and not (varianceBehaviorNeg and self.varianceDuration and (timerValue < -self.varianceDuration)) then\n\t\treturn self:Cancel()\n\telse\n\t\tif fillUpBars then\n\t\t\tif currentStyle == \"NoAnim\" and timerValue <= enlargeTime and not enlargeHack and not self.varianceDuration then\n\t\t\t\t-- Simple/NoAnim Bar mimics BW in creating a new bar on large bar anchor instead of just moving the small bar\n\t\t\t\tbar:SetValue(1 - timerValue/(totaltimeValue < enlargeTime and totaltimeValue or enlargeTime))\n\t\t\telse\n\t\t\t\tbar:SetValue(1 - timerValue/totaltimeValue)\n\t\t\tend\n\t\telse\n\t\t\tif currentStyle == \"NoAnim\" and timerValue <= enlargeTime and not enlargeHack and not self.varianceDuration then\n\t\t\t\t-- Simple/NoAnim Bar mimics BW in creating a new bar on large bar anchor instead of just moving the small bar\n\t\t\t\tbar:SetValue(timerValue/(totaltimeValue < enlargeTime and totaltimeValue or enlargeTime))\n\t\t\telse\n\t\t\t\tbar:SetValue(timerValue/totaltimeValue)\n\t\t\tend\n\t\tend\n\t\ttimer:SetText(stringFromTimer(timerCorrectedNegative))\n\tend\n\tif isFadingIn and isFadingIn < 0.5 and currentStyle ~= \"NoAnim\" then\n\t\tself.fadingIn = isFadingIn + elapsed\n\t\tif (isEnlarged and barOptions.HugeAlpha == 1) or barOptions.Alpha == 1 then -- Only fade in if alpha is 1, otherwise we already have a faded bar\n\t\t\tframe:SetAlpha((isFadingIn) / 0.5)\n\t\tend\n\telseif isFadingIn then\n\t\tself.fadingIn = nil\n\tend\n\tif timerValue <= 7.75 and not self.flashing and barOptions.FlashBar and not paused then\n\t\tself.flashing = true\n\t\tself.ftimer = 0\n\telseif self.flashing and timerValue > 7.75 then\n\t\tself.flashing = nil\n\t\tself.ftimer = nil\n\tend\n\tif sparkEnabled then\n\t\tspark:ClearAllPoints()\n\t\tspark:SetSize(12, barOptions[isEnlarged and 'HugeHeight' or 'Height'] * 3)\n\t\tspark:SetPoint(\"CENTER\", bar, \"LEFT\", bar:GetValue() * bar:GetWidth(), -1)\n\telse\n\t\tspark:SetAlpha(0)\n\tend\n\tif self.flashing then\n\t\tlocal r, g, b = bar:GetStatusBarColor()\n\t\tlocal ftime = self.ftimer % 1.25\n\t\tif ftime >= 0.5 then\n\t\t\tbar:SetStatusBarColor(r, g, b, 1)\n\t\t\tif sparkEnabled then\n\t\t\t\tspark:SetAlpha(1)\n\t\t\tend\n\t\telseif ftime >= 0.25 then\n\t\t\tbar:SetStatusBarColor(r, g, b, 1 - (0.5 - ftime) / 0.25)\n\t\t\tif sparkEnabled then\n\t\t\t\tspark:SetAlpha(1 - (0.5 - ftime) / 0.25)\n\t\t\tend\n\t\telse\n\t\t\tbar:SetStatusBarColor(r, g, b, 1 - (ftime / 0.25))\n\t\t\tif sparkEnabled then\n\t\t\t\tspark:SetAlpha(1 - (ftime / 0.25))\n\t\t\tend\n\t\tend\n\t\tself.ftimer = self.ftimer + elapsed\n\tend\n\tlocal melapsed = self.moveElapsed\n\tif isMoving == \"move\" and melapsed <= 0.5 then\n\t\tbarIsAnimating = true\n\t\tself.moveElapsed = melapsed + elapsed\n\t\tlocal newX = self.moveOffsetX + (barOptions[isEnlarged and \"HugeBarXOffset\" or \"BarXOffset\"] - self.moveOffsetX) * (melapsed / 0.5)\n\t\tlocal newY\n\t\tif ExpandUpwards then\n\t\t\tnewY = self.moveOffsetY + (barOptions[isEnlarged and \"HugeBarYOffset\" or \"BarYOffset\"] - self.moveOffsetY) * (melapsed / 0.5)\n\t\telse\n\t\t\tnewY = self.moveOffsetY + (-barOptions[isEnlarged and \"HugeBarYOffset\" or \"BarYOffset\"] - self.moveOffsetY) * (melapsed / 0.5)\n\t\tend\n\t\tframe:ClearAllPoints()\n\t\tframe:SetPoint(self.movePoint, self.moveAnchor, self.movePoint, newX, newY)\n\telseif isMoving == \"move\" then\n\t\tbarIsAnimating = false\n\t\tself.moving = nil\n\t\tisMoving = nil\n\telseif isMoving == \"enlarge\" and melapsed <= 1 then\n\t\tbarIsAnimating = true\n\t\tself:AnimateEnlarge(elapsed)\n\telseif isMoving == \"enlarge\" then\n\t\tbarIsAnimating = false\n\t\tself.moving = nil\n\t\tisMoving = nil\n\t\tself.enlarged = true\n\t\tisEnlarged = true\n\t\ttinsert(largeBars, self)\n\t\tself:ApplyStyle()\n\t\tDBT:UpdateBars(true)\n\telseif isMoving == \"nextEnlarge\" then\n\t\tbarIsAnimating = false\n\t\tself.moving = nil\n\t\tisMoving = nil\n\t\tself.enlarged = true\n\t\tisEnlarged = true\n\t\ttinsert(largeBars, self)\n\t\tself:ApplyStyle()\n\t\tDBT:UpdateBars(true)\n\tend\n\tif not paused and ((barOptions.VarianceEnabled and timerLowestValueFromVariance or timerValue) <= enlargeTime) and not self.small and not isEnlarged and isMoving ~= \"enlarge\" and enlargeEnabled then\n\t\tself:RemoveFromList()\n\t\tself:Enlarge()\n\tend\n\tDBT:UpdateBars()\nend\n\nfunction barPrototype:RemoveFromList()\n\tif self.moving ~= \"enlarge\" then\n\t\ttDeleteItem(self.enlarged and largeBars or smallBars, self)\n\tend\nend\n\nfunction barPrototype:Cancel()\n\tself.frame:Hide()\n\tself:RemoveFromList()\n\tDBT.bars[self] = nil\n\tunusedBarObjects[self] = self\n\tself.dead = true\n\tself.paused = nil\n\tDBT.numBars = DBT.numBars - 1\nend\n\nfunction barPrototype:ApplyStyle()\n\tlocal frame = self.frame\n\tlocal frame_name = frame:GetName()\n\tlocal bar = _G[frame_name..\"Bar\"]\n\tlocal spark = _G[frame_name..\"BarSpark\"]\n\tlocal icon1 = _G[frame_name..\"BarIcon1\"]\n\tlocal icon2 = _G[frame_name..\"BarIcon2\"]\n\tlocal name = _G[frame_name..\"BarName\"]\n\tlocal timer = _G[frame_name..\"BarTimer\"]\n\tlocal barOptions = DBT.Options\n\tlocal sparkEnabled = barOptions.Spark\n\tlocal enlarged = self.enlarged\n\tif self.color then\n\t\tlocal barRed, barGreen, barBlue = self.color.r, self.color.g, self.color.b\n\t\tbar:SetStatusBarColor(barRed, barGreen, barBlue)\n\t\tif sparkEnabled then\n\t\t\tspark:SetVertexColor(barRed, barGreen, barBlue)\n\t\tend\n\telse\n\t\tlocal barStartRed, barStartGreen, barStartBlue\n\t\tif self.colorType and self.colorType >= 1 then\n\t\t\tlocal colorCount = self.colorType\n\t\t\tif colorCount == 1 then--Add\n\t\t\t\tbarStartRed, barStartGreen, barStartBlue = barOptions.StartColorAR, barOptions.StartColorAG, barOptions.StartColorAB\n\t\t\telseif colorCount == 2 then--AOE\n\t\t\t\tbarStartRed, barStartGreen, barStartBlue = barOptions.StartColorAER, barOptions.StartColorAEG, barOptions.StartColorAEB\n\t\t\telseif colorCount == 3 then--Debuff\n\t\t\t\tbarStartRed, barStartGreen, barStartBlue = barOptions.StartColorDR, barOptions.StartColorDG, barOptions.StartColorDB\n\t\t\telseif colorCount == 4 then--Interrupt\n\t\t\t\tbarStartRed, barStartGreen, barStartBlue = barOptions.StartColorIR, barOptions.StartColorIG, barOptions.StartColorIB\n\t\t\telseif colorCount == 5 then--Role\n\t\t\t\tbarStartRed, barStartGreen, barStartBlue = barOptions.StartColorRR, barOptions.StartColorRG, barOptions.StartColorRB\n\t\t\telseif colorCount == 6 then--Phase\n\t\t\t\tbarStartRed, barStartGreen, barStartBlue = barOptions.StartColorPR, barOptions.StartColorPG, barOptions.StartColorPB\n\t\t\telseif colorCount == 7 then--Important\n\t\t\t\tbarStartRed, barStartGreen, barStartBlue = barOptions.StartColorUIR, barOptions.StartColorUIG, barOptions.StartColorUIB\n\t\t\tend\n\t\telse\n\t\t\tbarStartRed, barStartGreen, barStartBlue = barOptions.StartColorR, barOptions.StartColorG, barOptions.StartColorB\n\t\tend\n\t\tbar:SetStatusBarColor(barStartRed, barStartGreen, barStartBlue)\n\t\tif sparkEnabled then\n\t\t\tspark:SetVertexColor(barStartRed, barStartGreen, barStartBlue)\n\t\tend\n\tend\n\tlocal barTextColorRed, barTextColorGreen, barTextColorBlue = barOptions.TextColorR, barOptions.TextColorG, barOptions.TextColorB\n\tlocal barHeight, barHugeHeight, barWidth, barHugeWidth = barOptions.Height, barOptions.HugeHeight, barOptions.Width, barOptions.HugeWidth\n\tname:SetTextColor(barTextColorRed, barTextColorGreen, barTextColorBlue)\n\ttimer:SetTextColor(barTextColorRed, barTextColorGreen, barTextColorBlue)\n\tif barOptions.IconLeft then icon1:Show() else icon1:Hide() end\n\tif barOptions.IconRight then icon2:Show() else icon2:Hide() end\n\tif enlarged then\n\t\tbar:SetSize(barHugeWidth, barHugeHeight)\n\t\tframe:SetScale(barOptions.HugeScale)\n\t\tif barOptions.FadeBars and self.fade then\n\t\t\tframe:SetAlpha(barOptions.HugeAlpha / 2)\n\t\telse\n\t\t\tframe:SetAlpha(barOptions.HugeAlpha)\n\t\tend\n\telse\n\t\tbar:SetSize(barWidth, barHeight)\n\t\tframe:SetScale(barOptions.Scale)\n\t\tif barOptions.FadeBars and self.fade and barOptions.Alpha ~= 0 then\n\t\t\tframe:SetAlpha(barOptions.Alpha / 2)\n\t\telse\n\t\t\tframe:SetAlpha(barOptions.Alpha)\n\t\tend\n\tend\n\tif barOptions.IconLocked then\n\t\tlocal sizeHeight = enlarged and barHugeHeight or barHeight\n\t\tframe:SetSize(enlarged and barHugeWidth or barWidth, sizeHeight)\n\t\ticon1:SetSize(sizeHeight, sizeHeight)\n\t\ticon2:SetSize(sizeHeight, sizeHeight)\n\tend\n\tself:SetVariance()\n\tself.frame:Show()\n\tif sparkEnabled then\n\t\tspark:SetAlpha(1)\n\tend\n\tlocal r, g, b = bar:GetStatusBarColor()\n\tbar:SetStatusBarColor(r, g, b, 1)\n\tbar:SetStatusBarTexture(barOptions.Texture)\n\tlocal barFont = barOptions.Font == \"standardFont\" and standardFont or barOptions.Font\n\tlocal barFontSize, barFontFlag = barOptions.FontSize, barOptions.FontFlag\n\tname:SetFont(barFont, barFontSize, barFontFlag)\n\tname:SetPoint(\"LEFT\", bar, \"LEFT\", 3, 0)\n\ttimer:SetFont(barFont, barFontSize, barFontFlag)\n\tself:Update(0)\nend\n\ndo\n\tlocal tostring, mfloor = tostring, math.floor\n\tlocal ChatEdit_GetActiveWindow, SendChatMessage, IsInInstance, GetNumRaidMembers = ChatEdit_GetActiveWindow, SendChatMessage, IsInInstance, GetNumRaidMembers\n\n\tfunction barPrototype:Announce()\n\t\tlocal msg\n\t\tif DBT.announceHook then\n\t\t\tmsg = DBT.announceHook(self)\n\t\tend\n\t\tmsg = msg or (\"%s %d:%02d\"):format(tostring(_G[self.frame:GetName()..\"BarName\"]:GetText()):gsub(\"|T.-|t\", \"\"), mfloor(self.timer / 60), self.timer % 60)\n\t\tlocal chatWindow = ChatEdit_GetActiveWindow()\n\t\tif chatWindow then\n\t\t\tchatWindow:Insert(msg)\n\t\telse\n\t\t\tSendChatMessage(msg, (select(2, IsInInstance()) == \"pvp\" and \"BATTLEGROUND\") or (GetNumRaidMembers() > 0 and \"RAID\") or \"PARTY\")\n\t\tend\n\tend\nend\n\n-- MoveToNextPosition: Animates the bars up and down when a timer is added or deleted.\nfunction barPrototype:MoveToNextPosition()\n\tif self.moving == \"enlarge\" or not self.frame then\n\t\treturn\n\tend\n\tlocal newAnchor = self.enlarged and largeBarsAnchor or smallBarsAnchor\n\tlocal oldX = self.frame:GetRight() - self.frame:GetWidth()/2\n\tlocal oldY = self.frame:GetTop()\n\tlocal Enlarged = self.enlarged\n\tlocal ExpandUpwards = Enlarged and DBT.Options.ExpandUpwardsLarge or not Enlarged and DBT.Options.ExpandUpwards\n\tself.frame:ClearAllPoints()\n\tif ExpandUpwards then\n\t\tself.movePoint = \"BOTTOM\"\n\t\tself.frame:SetPoint(\"BOTTOM\", newAnchor, \"BOTTOM\", DBT.Options[Enlarged and \"HugeBarXOffset\" or \"BarXOffset\"], DBT.Options[Enlarged and \"HugeBarYOffset\" or \"BarYOffset\"])\n\telse\n\t\tself.movePoint = \"TOP\"\n\t\tself.frame:SetPoint(\"TOP\", newAnchor, \"TOP\", DBT.Options[Enlarged and \"HugeBarXOffset\" or \"BarXOffset\"], -DBT.Options[Enlarged and \"HugeBarYOffset\" or \"BarYOffset\"])\n\tend\n\tlocal newX = self.frame:GetRight() - self.frame:GetWidth()/2\n\tlocal newY = self.frame:GetTop()\n\tif DBT.Options.BarStyle ~= \"NoAnim\" then\n\t\tself.frame:ClearAllPoints()\n\t\tself.frame:SetPoint(self.movePoint, newAnchor, self.moveRelPoint, -(newX - oldX), -(newY - oldY))\n\t\tself.moving = \"move\"\n\tend\n\tself.moveAnchor = newAnchor\n\tself.moveOffsetX = -(newX - oldX)\n\tself.moveOffsetY = -(newY - oldY)\n\tself.moveElapsed = 0\nend\n\n-- Enlarge: Fires once when a Small Bar starts to move towards the Huge Bar anchor\nfunction barPrototype:Enlarge()\n\tlocal oldX = self.frame:GetRight() - self.frame:GetWidth()/2\n\tlocal oldY = self.frame:GetTop()\n\tlocal Enlarged = self.enlarged\n\tlocal ExpandUpwards = Enlarged and DBT.Options.ExpandUpwardsLarge or not Enlarged and DBT.Options.ExpandUpwards\n\tself.frame:ClearAllPoints()\n\tif ExpandUpwards then\n\t\tself.movePoint = \"BOTTOM\"\n\t\tself.frame:SetPoint(\"BOTTOM\", largeBarsAnchor, \"BOTTOM\", DBT.Options[Enlarged and \"HugeBarXOffset\" or \"BarXOffset\"], DBT.Options[Enlarged and \"HugeBarYOffset\" or \"BarYOffset\"])\n\telse\n\t\tself.movePoint = \"TOP\"\n\t\tself.frame:SetPoint(\"TOP\", largeBarsAnchor, \"TOP\", DBT.Options[Enlarged and \"HugeBarXOffset\" or \"BarXOffset\"], -DBT.Options[Enlarged and \"HugeBarYOffset\" or \"BarYOffset\"])\n\tend\n\tlocal newX = self.frame:GetRight() - self.frame:GetWidth()/2\n\tlocal newY = self.frame:GetTop()\n\tself.frame:ClearAllPoints()\n\tself.frame:SetPoint(\"TOP\", largeBarsAnchor, \"BOTTOM\", -(newX - oldX), -(newY - oldY))\n\tself.moving = DBT.Options.BarStyle == \"NoAnim\" and \"nextEnlarge\" or \"enlarge\"\n\tself.moveAnchor = largeBarsAnchor\n\tself.moveOffsetX = -(newX - oldX)\n\tself.moveOffsetY = -(newY - oldY)\n\tself.moveElapsed = 0\nend\n\n-- AnimateEnlarge: Moves a Small Bar to the Huge Bar anchor\nfunction barPrototype:AnimateEnlarge(elapsed)\n\tself.moveElapsed = self.moveElapsed + elapsed\n\tlocal melapsed = self.moveElapsed\n\tif melapsed < 1 then\n\t\tlocal calc = melapsed / 1\n\t\tlocal newX = self.moveOffsetX + (DBT.Options.HugeBarXOffset - self.moveOffsetX) * calc\n\t\tlocal newY = self.moveOffsetY + (DBT.Options.HugeBarYOffset - self.moveOffsetY) * calc\n\t\tlocal newWidth = DBT.Options.HugeWidth + (DBT.Options.Width - DBT.Options.HugeWidth) * calc\n\t\tlocal newHeight = DBT.Options.HugeHeight + (DBT.Options.Height - DBT.Options.HugeHeight) * calc\n\t\tlocal newScale = DBT.Options.HugeScale + (DBT.Options.Scale - DBT.Options.HugeScale) * calc\n\t\tself.frame:ClearAllPoints()\n\t\tself.frame:SetPoint(self.movePoint, self.moveAnchor, self.movePoint, newX, newY)\n\t\tself.frame:SetScale(newScale)\n\t\tself.frame:SetSize(newWidth, newHeight)\n\t\t_G[self.frame:GetName()..\"Bar\"]:SetWidth(newWidth)\n\telse\n\t\tself.moving = nil\n\t\tself.enlarged = true\n\t\ttinsert(largeBars, self)\n\t\tDBT:UpdateBars(true)\n\t\tself:ApplyStyle()\n\tend\nend\n\ndo\n\tlocal skins = {}\n\n\tlocal skin = {}\n\tskin.__index = skin\n\n\tfunction DBT:RegisterSkin(id)\n\t\tif id == \"DefaultSkin\" then\n\t\t\tDBM:AddMsg(\"DBM-DefaultSkin no longer used, please remove\")\n\t\t\tDBM:AddMsg(\"DBM-DefaultSkin no longer used, please remove\")\n\t\t\tDBM:AddMsg(\"DBM-DefaultSkin no longer used, please remove\")\n\t\t\treturn {}\n\t\tend\n\t\tif skins[id] then\n\t\t\terror(\"Skin '\" .. id .. \"' is already registered.\", 2)\n\t\tend\n\t\tlocal obj = setmetatable({\n\t\t\tname\t\t= id,\n\t\t\tDefaults\t= {},\n\t\t\tOptions\t\t= {}\n\t\t}, skin)\n\t\tskins[id] = obj\n\t\treturn obj\n\tend\n\n\tfunction DBT:SetSkin(id)\n\t\tif not skins[id] then\n\t\t\terror(\"Skin '\" .. id .. \"' doesn't exist\", 2)\n\t\tend\n\t\tlocal DBM_UsedProfile = DBM_UsedProfile or \"Default\"\n\t\tif not DBT_AllPersistentOptions then\n\t\t\tDBT_AllPersistentOptions = {}\n\t\tend\n\t\tif not DBT_AllPersistentOptions[DBM_UsedProfile] then\n\t\t\tDBT_AllPersistentOptions[DBM_UsedProfile] = {}\n\t\tend\n\t\tif not DBT_AllPersistentOptions[DBM_UsedProfile][id] then\n\t\t\tDBT_AllPersistentOptions[DBM_UsedProfile][id] = DBT_AllPersistentOptions[DBM_UsedProfile].DBM or {}\n\t\t\tfor option, value in pairs(skins[id].Defaults) do\n\t\t\t\tDBT_AllPersistentOptions[DBM_UsedProfile][id][option] = value\n\t\t\tend\n\t\tend\n\t\tself:ApplyProfile(id, true)\n\t\tfor option, value in pairs(skins[id].Options) do\n\t\t\tself:SetOption(option, value, true)\n\t\tend\n\t\tself:SetOption(\"Skin\", id) -- Forces an UpdateBars and ApplyStyle\n\tend\n\n\tfunction DBT:ResetSkin()\n\t\tlocal DBM_UsedProfile = DBM_UsedProfile or \"Default\"\n\t\tif not DBT_AllPersistentOptions then\n\t\t\tDBT_AllPersistentOptions = {}\n\t\tend\n\t\tif not DBT_AllPersistentOptions[DBM_UsedProfile] then\n\t\t\tDBT_AllPersistentOptions[DBM_UsedProfile] = {}\n\t\tend\n\t\tlocal skin = self.Options.Skin\n\t\tDBT_AllPersistentOptions[DBM_UsedProfile][skin] = self.DefaultOptions\n\t\tself.Options = self.DefaultOptions\n\t\tself:SetOption(\"Skin\", skin) -- Forces an UpdateBars and ApplyStyle\n\tend\n\n\tfunction DBT:GetSkins()\n\t\treturn skins\n\tend\nend\n"
  },
  {
    "path": "DBM-Sunwell/Brutallus.lua",
    "content": "local mod\t= DBM:NewMod(\"Brutallus\", \"DBM-Sunwell\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20251106104433\")\nmod:SetCreatureID(24882)\nmod:SetEncounterID(725)\nmod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7, 8)\n\nmod:RegisterCombat(\"yell\", L.Pull)\nmod.disableHealthCombat = true\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 45150\",\n\t\"SPELL_CAST_SUCCESS 45141 45185\",\n\t\"SPELL_AURA_APPLIED 46394 45185 45150\",\n\t\"SPELL_AURA_APPLIED_DOSE 45150\",\n\t\"SPELL_AURA_REMOVED 46394\",\n\t\"SPELL_MISSED 46394\"\n)\n\nlocal warnMeteor\t\t= mod:NewSpellAnnounce(45150, 3)\nlocal warnBurn\t\t\t= mod:NewTargetAnnounce(46394, 3, nil, false, 2)\nlocal warnStomp\t\t\t= mod:NewTargetAnnounce(45185, 3, nil, \"Tank\", 2)\n\nlocal specwarnStompYou\t= mod:NewSpecialWarningYou(45185, \"Tank\")\nlocal specwarnStomp\t\t= mod:NewSpecialWarningTaunt(45185, \"Tank\")\nlocal specWarnMeteor\t= mod:NewSpecialWarningStack(45150, nil, 4, nil, nil, 1, 6)\nlocal specWarnBurn\t\t= mod:NewSpecialWarningYou(46394, nil, nil, nil, 1, 2)\nlocal yellBurn\t\t\t= mod:NewYell(46394)\n\nlocal timerMeteorCD\t\t= mod:NewNextTimer(12, 45150, nil, nil, nil, 3) -- SPELL_CAST_START: (Onyxia: 25 wipe [2025-10-09]@[20:42:14]) - \"Meteor Slash-45150-npc:24882-17 = pull:11.01, 12.03, 12.00, 12.02, 12.02\"\nlocal timerStompCD\t\t= mod:NewCDTimer(30, 45185, nil, nil, nil, 2) -- REVIEW! variance? SPELL_CAST_SUCCESS: (Onyxia: 25 wipe [2025-10-09]@[20:42:14]) - \"Stomp-45185-npc:24882-17 = pull:30.00\"\nlocal timerBurn\t\t\t= mod:NewTargetTimer(60, 46394, nil, \"false\", 2, 3)\nlocal timerBurnCD\t\t= mod:NewNextTimer(20, 46394, nil, nil, nil, 3) -- SPELL_CAST_SUCCESS: (Onyxia: 25 wipe [2025-10-09]@[20:42:14]) - \"Burn-45141-npc:24882-17 = pull:19.99, 20.01\"\n\nlocal berserkTimer\t\t= mod:NewBerserkTimer(mod:IsTimewalking() and 300 or 360)\n\nmod:AddSetIconOption(\"BurnIcon\", 46394, true, false, {1, 2, 3, 4, 5, 6, 7, 8})\nmod:AddRangeFrameOption(4, 46394)\nmod:AddMiscLine(DBM_CORE_L.OPTION_CATEGORY_DROPDOWNS)\nmod:AddDropdownOption(\"RangeFrameActivation\", {\"AlwaysOn\", \"OnDebuff\"}, \"OnDebuff\", \"misc\")\n\nmod.vb.burnIcon = 8\nlocal debuffName = DBM:GetSpellInfo(46394)\n\nlocal DebuffFilter\ndo\n\tDebuffFilter = function(uId)\n\t\treturn DBM:UnitDebuff(uId, debuffName)\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.burnIcon = 8\n\ttimerBurnCD:Start(-delay)\n\ttimerStompCD:Start(-delay)\n\ttimerMeteorCD:Start(11-delay)\n\tberserkTimer:Start(-delay)\n\tif self.Options.RangeFrame and self.Options.RangeFrameActivation == \"AlwaysOn\" then\n\t\tDBM.RangeCheck:Show(4)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 46394 then\n\t\twarnBurn:Show(args.destName)\n\t\ttimerBurn:Start(args.destName)\n\t\tif self.Options.BurnIcon then\n\t\t\tself:SetIcon(args.destName, self.vb.burnIcon)\n\t\tend\n\t\tif self.vb.burnIcon == 1 then\n\t\t\tself.vb.burnIcon = 8\n\t\telse\n\t\t\tself.vb.burnIcon = self.vb.burnIcon - 1\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnBurn:Show()\n\t\t\tspecWarnBurn:Play(\"targetyou\")\n\t\t\tyellBurn:Yell()\n\t\tend\n\t\tif self.Options.RangeFrame and self.Options.RangeFrameActivation == \"OnDebuff\" then\n\t\t\tif DBM:UnitDebuff(\"player\", args.spellName) then--You have debuff, show everyone\n\t\t\t\tDBM.RangeCheck:Show(4, nil)\n\t\t\telse--You do not have debuff, only show players who do\n\t\t\t\tDBM.RangeCheck:Show(4, DebuffFilter)\n\t\t\tend\n\t\tend\n\telseif args.spellId == 45185 then\n\t\tif args:IsPlayer() then\n\t\t\tspecwarnStompYou:Show()\n\t\telse\n\t\t\tspecwarnStomp:Show(args.destName)\n\t\t\twarnStomp:Show(args.destName)\n\t\tend\n\telseif args.spellId == 45150 and args:IsPlayer() then\n\t\tlocal amount = args.amount or 1\n\t\tif (amount >= 4) or (amount >= 2 and self:IsTimewalking()) then\n\t\t\tspecWarnMeteor:Show(amount)\n\t\t\tspecWarnMeteor:Play(\"stackhigh\")\n\t\tend\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 46394 then\n\t\tif self.Options.BurnIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\t\ttimerBurn:Cancel(args.destName)\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 45150 then\n\t\twarnMeteor:Show()\n\t\ttimerMeteorCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 45185 then\n\t\ttimerStompCD:Start()\n\telseif args.spellId == 45141 then\n\t\ttimerBurnCD:Start()\n\tend\nend\n\nfunction mod:SPELL_MISSED(_, _, _, _, _, _, spellId)\n\tif spellId == 46394 then\n\t\twarnBurn:Show(\"MISSED\")\n\tend\nend\n"
  },
  {
    "path": "DBM-Sunwell/DBM-Sunwell.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Sunwell|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0태양샘 고원|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Der Sonnenbrunnen|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Meseta de La Fuente del Sol|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Plateau du Puits de soleil|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0太阳井|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0太陽之井|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Плато Солнечного Колодца|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMSunwell_AllSavedVars\n## SavedVariablesPerCharacter: DBMSunwell_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: BC\n## X-DBM-StatTypes: normal25, timewalker\n## X-DBM-Mod-Name: Sunwell Plateau\n## X-DBM-Mod-Name-koKR: 태양샘 고원\n## X-DBM-Mod-Name-deDE: Der Sonnenbrunnen\n## X-DBM-Mod-Name-esES: Meseta de La Fuente del Sol\n## X-DBM-Mod-Name-frFR: Plateau du Puits de soleil\n## X-DBM-Mod-Name-zhCN: 太阳之井高地\n## X-DBM-Mod-Name-zhTW: 太陽之井\n## X-DBM-Mod-Name-ruRU: Плато Солнечного Колодца\n## X-DBM-Mod-MapID: 790\n## X-DBM-Mod-LoadZone: Sunwell Plateau\n## X-DBM-Mod-LoadZone-ruRU: Плато Солнечного Колодца\n## X-DBM-Mod-LoadZone-zhCN: 太阳之井高地\n## X-DBM-Mod-LoadZone-zhTW: 太陽之井高地\n## X-DBM-Mod-LoadZone-deDE: Sonnenbrunnenplateau\n## X-DBM-Mod-LoadZone-esES: Meseta de La Fuente del Sol\n## X-DBM-Mod-LoadZone-frFR: Plateau du Puits de soleil\n\nlocalization.en.lua\nlocalization.cn.lua\nlocalization.de.lua\nlocalization.es.lua\nlocalization.kr.lua\nlocalization.ru.lua\nlocalization.tw.lua\n\nKalecgos.lua\nKalecgosFrame.lua\nKalecgosFrame.xml\nBrutallus.lua\nFelmyst.lua\nEredarTwins.lua\nM'uru.lua\nKil'jaeden.lua\n"
  },
  {
    "path": "DBM-Sunwell/EredarTwins.lua",
    "content": "local mod\t= DBM:NewMod(\"Twins\", \"DBM-Sunwell\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal sformat = string.format\n\nmod:SetRevision(\"20251101130127\")\nmod:SetCreatureID(25165, 25166)\nmod:SetEncounterID(727)\nmod:SetUsedIcons(7, 8)\nmod:SetHotfixNoticeRev(20251101000000)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 45230 45347 45348\",\n\t\"SPELL_AURA_APPLIED_DOSE 45347 45348\",\n\t\"SPELL_CAST_START 45248 45329 45342\",\n\t\"SPELL_DAMAGE 45256\",\n\t\"SPELL_MISSED 45256\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\"UNIT_DIED\"\n)\n\nmod:SetBossHealthInfo(\n\t25165, L.Sacrolash,\n\t25166, L.Alythess\n)\n\nlocal warnBlade\t\t\t\t= mod:NewSpellAnnounce(45248, 3)\nlocal warnBlow\t\t\t\t= mod:NewTargetAnnounce(45256, 3)\nlocal warnConflag\t\t\t= mod:NewTargetAnnounce(45333, 3)\nlocal warnNova\t\t\t\t= mod:NewTargetAnnounce(45329, 3)\n\nlocal specWarnConflag\t\t= mod:NewSpecialWarningYou(45333, nil, nil, nil, 1, 2)\nlocal specWarnConflagNear\t= mod:NewSpecialWarningClose(45333, nil, nil, nil, 1, 2)\nlocal yellConflag\t\t\t= mod:NewYell(45333, nil, false)\nlocal specWarnNova\t\t\t= mod:NewSpecialWarningYou(45329, nil, nil, nil, 1, 2)\nlocal specWarnNovaNear\t\t= mod:NewSpecialWarningClose(45329, nil, nil, nil, 1, 2)\nlocal yellNova\t\t\t\t= mod:NewYell(45329)\nlocal specWarnPyro\t\t\t= mod:NewSpecialWarningDispel(45230, \"MagicDispeller\", nil, 2, 1, 2)\nlocal specWarnDarkTouch\t\t= mod:NewSpecialWarningStack(45347, false, 5, nil, 2, 1, 6)\nlocal specWarnFlameTouch\t= mod:NewSpecialWarningStack(45348, false, 5, nil, nil, 1, 6)\n\nlocal timerBladeCD\t\t\t= mod:NewNextTimer(10, 45248, nil, \"Melee\", 2, 2) -- Fixed timer. SPELL_CAST_START: (Onyxia: 25 wipe [2025-10-09]@[21:23:50]) - \"Shadow Blades-45248-npc:25165-63 = pull:10.01/[Stage 1/0.00] 10.01, 10.01, 10.00, 10.02, 10.31, 10.00\"\nlocal timerBlowCD\t\t\t= mod:NewVarTimer(\"v23.5-26.5\", 45256, nil, nil, nil, 3) -- ~3s varation [23.91-26.43]. SPELL_CAST_SUCCESS: (Onyxia: 25 wipe [2025-10-09]@[21:23:50] || 25 wipe [2025-10-09]@[21:44:08]) - \"Confounding Blow-45256-npc:25165-63 = pull:26.37/[Stage 1/0.00] 26.37, 23.91\" || \"Confounding Blow-45256-npc:25165-63 = pull:25.68/[Stage 1/0.00] 25.68, 26.43\"\nlocal timerConflagCD\t\t= mod:NewVarTimer(\"v22.91-29\", 45333, nil, nil, nil, 3, nil, nil, true) -- 2025/10/(20?) - Warmane Onyxia changed script again. 5s variation [22.91-28.94]. Added \"keep\" arg. SPELL_CAST_START: (Onyxia: 25 wipe [2025-10-09]@[21:23:50] || wipe [2025-10-09]@[21:31:02] || kill [2025-10-30]@[21:33:53]) - \"Conflagration-45342-npc:25166-64 = pull:17.87/[Stage 1/0.00] 17.87, 30.88\" || \"Conflagration-45342-npc:25166-64 = pull:21.66/[Stage 1/0.00] 21.66, 26.73\" || \"Conflagration-45342-npc:25166-64 = pull:17.86/[Stage 1/0.00] 17.86, 22.91, Stage 2/12.34\"\nlocal timerNovaCD\t\t\t= mod:NewVarTimer(\"v20-24\", 45329, nil, nil, nil, 3)-- ~4s varation [20.00-23.84]. SPELL_CAST_START: (Onyxia: 25 wipe [2025-10-09]@[21:44:08] || 25 wipe [2025-10-09]@[21:23:50] || wipe [2025-10-30]@[21:18:15]) - \"Shadow Nova-45329-npc:25165-63 = pull:22.10/[Stage 1/0.00] 22.10, 21.96\" || \"Shadow Nova-45329-npc:25165-63 = pull:22.84/[Stage 1/0.00] 22.84, 23.84\" || \"Shadow Nova-45329-npc:25165-63 = pull:23.32/[Stage 1/0.00] 23.32, 20.00, Stage 2/0.58\"\nlocal timerConflag\t\t\t= mod:NewCastTimer(3.5, 45333, nil, false, 2)\nlocal timerNova\t\t\t\t= mod:NewCastTimer(3.5, 45329, nil, false, 2)\n\nlocal berserkTimer\t\t\t= mod:NewBerserkTimer(mod:IsTimewalking() and 300 or 360)\n\nmod:AddRangeFrameOption(\"12\")\nmod:AddSetIconOption(\"ConflagIcon\", 45333, false, false, {7})\nmod:AddSetIconOption(\"NovaIcon\", 45329, false, false, {8})\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tberserkTimer:Start(-delay)\n\ttimerConflagCD:Start(sformat(\"v%s-%s\", 17.86-delay, 18.15-delay)) -- 2025/10/(20?) - Warmane Onyxia changed script again. Almost no variance (17.86-18.15)\n\ttimerBladeCD:Start(-delay)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show()\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 45230 and not args:IsDestTypePlayer() then\n\t\tspecWarnPyro:Show(args.destName)\n\t\tspecWarnPyro:Play(\"dispelboss\")\n\telseif args.spellId == 45347 and args:IsPlayer() then\n\t\tif (args.amount or 1) >= 5 and (args.amount % 5 == 0) then\n\t\t\tspecWarnDarkTouch:Show(args.amount)\n\t\t\tspecWarnDarkTouch:Play(\"stackhigh\")\n\t\tend\n\telseif args.spellId == 45348 and args:IsPlayer() then\n\t\tif (args.amount or 1) >= 5 and (args.amount % 5 == 0) then\n\t\t\tspecWarnFlameTouch:Show(args.amount)\n\t\t\tspecWarnFlameTouch:Play(\"stackhigh\")\n\t\tend\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_DAMAGE(_, _, _, _, destName, _, spellId)\n\tif spellId == 45256 then\n\t\twarnBlow:Show(destName)\n\t\ttimerBlowCD:Start()\n\tend\nend\n\nfunction mod:SPELL_MISSED(_, _, _, _, _, _, spellId)\n\tif spellId == 45256 then\n\t\ttimerBlowCD:Start()\n\tend\nend\n\nfunction mod:ShadowNovaTarget(targetname)\n\tif not targetname then return end\n\tif targetname == UnitName(\"player\") then\n\t\tspecWarnNova:Show()\n\t\tspecWarnNova:Play(\"targetyou\")\n\t\tyellNova:Yell()\n\telseif self:CheckNearby(2, targetname) then\n\t\tspecWarnNovaNear:Show(targetname)\n\t\tspecWarnNovaNear:Play(\"runaway\")\n\telse\n\t\twarnNova:Show(targetname)\n\tend\n\tif self.Options.NovaIcon then\n\t\tself:SetIcon(targetname, 7, 5)\n\tend\nend\n\nfunction mod:ConflagrationTarget(targetname)\n\tif not targetname then return end\n\tif targetname == UnitName(\"player\") then\n\t\tspecWarnConflag:Show()\n\t\tspecWarnConflag:Play(\"targetyou\")\n\t\tyellConflag:Yell()\n\telseif self:CheckNearby(2, targetname) then\n\t\tspecWarnConflagNear:Show(targetname)\n\t\tspecWarnConflagNear:Play(\"runaway\")\n\telse\n\t\twarnConflag:Show(targetname)\n\tend\n\tif self.Options.ConflagIcon then\n\t\tself:SetIcon(targetname, 8, 5)\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 45248 then\n\t\twarnBlade:Show()\n\t\ttimerBladeCD:Start()\n\telseif args.spellId == 45329 then -- Shadow Nova\n\t\ttimerNova:Start(args.sourceGUID)\n\t\tif self:GetCIDFromGUID(args.sourceGUID) == 25166 then -- Grand Warlock Alythess\n\t\t\ttimerNovaCD:Start(\"v25.06-25.19\", args.sourceGUID) -- (Onyxia: [2025-10-23]@[21:38:36]) - \"Shadow Nova-45329-npc:25166-64 = pull:48.39/[Stage 1/0.00, Stage 2/47.04] 1.35/48.39, 25.18, 25.19\"\n\t\telse\n\t\t\ttimerNovaCD:Start(args.sourceGUID)\n\t\tend\n\t\tself:BossTargetScanner(25165, \"ShadowNovaTarget\", 0.05, 6)\n\telseif args.spellId == 45342 then -- Conflagration\n\t\ttimerConflag:Start()\n\t\ttimerConflagCD:Start()\n\t\tself:BossTargetScanner(self:GetCIDFromGUID(args.sourceGUID), \"ConflagrationTarget\", 0.05, 6)\n\tend\nend\n\n-- CHAT_MSG_RAID_BOSS_EMOTE bugged on Warmane: https://www.warmane.com/bugtracker/report/106891\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg, _, _, _, target)\n\tif (msg == L.Nova or msg:find(L.Nova)) and target then\n\t\tDBM:AddMsg(\"Nova emote is working again. Notify me (Zidras) on discord or open a bug report.\")\n\t\ttarget = DBM:GetUnitFullName(target)\n\t\ttimerNova:Start()\n\t\ttimerNovaCD:Start()\n\t\tif target == UnitName(\"player\") then\n\t\t\tspecWarnNova:Show()\n\t\t\tspecWarnNova:Play(\"targetyou\")\n\t\t\tyellNova:Yell()\n\t\telseif self:CheckNearby(2, target) then\n\t\t\tspecWarnNovaNear:Show(target)\n\t\t\tspecWarnNovaNear:Play(\"runaway\")\n\t\telse\n\t\t\twarnNova:Show(target)\n\t\tend\n\t\tif self.Options.NovaIcon then\n\t\t\tself:SetIcon(target, 7, 5)\n\t\tend\n\telseif (msg == L.Conflag or msg:find(L.Conflag)) and target then\n\t\tDBM:AddMsg(\"Conflagration emote is working again. Notify me (Zidras) on discord or open a bug report.\")\n\t\ttarget = DBM:GetUnitFullName(target)\n\t\ttimerConflag:Start()\n\t\ttimerConflagCD:Start()\n\t\tif target == UnitName(\"player\") then\n\t\t\tspecWarnConflag:Show()\n\t\t\tspecWarnConflag:Play(\"targetyou\")\n\t\t\tyellConflag:Yell()\n\t\telseif self:CheckNearby(2, target) then\n\t\t\tspecWarnConflagNear:Show(target)\n\t\t\tspecWarnConflagNear:Play(\"runaway\")\n\t\telse\n\t\t\twarnConflag:Show(target)\n\t\tend\n\t\tif self.Options.ConflagIcon then\n\t\t\tself:SetIcon(target, 8, 5)\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal destCID = self:GetCIDFromGUID(args.destGUID)\n\tif destCID == 25166 -- Grand Warlock Alythess\n\tor destCID == 25165 -- Lady Sacrolash\n\tthen\n\t\ttimerConflagCD:Cancel()\n\t\ttimerNova:Cancel(args.destGUID)\n\t\ttimerNovaCD:Cancel(args.destGUID)\n\t\tif self:GetStage(1) then\n\t\t\tself:SetStage(2)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Sunwell/Felmyst.lua",
    "content": "local mod\t= DBM:NewMod(\"Felmyst\", \"DBM-Sunwell\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal sformat = string.format\n\nmod:SetRevision(\"20251101093025\")\nmod:SetCreatureID(25038)\nmod:SetEncounterID(726)\nmod:SetUsedIcons(8, 7)\nmod:SetHotfixNoticeRev(202501011000000)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 45866\",\n\t\"SPELL_CAST_START 45855 45866\",\n\t\"SPELL_SUMMON 45392\",\n\t\"CHAT_MSG_RAID_BOSS_WHISPER\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1\"\n)\n\nlocal warnEncaps\t\t\t= mod:NewTargetAnnounce(45665, 4)\nlocal warnVapor\t\t\t\t= mod:NewTargetAnnounce(45402, 3)\nlocal warnPhase\t\t\t\t= mod:NewAnnounce(\"WarnPhase\", 1, 31550)\n\nlocal specWarnGas\t\t\t= mod:NewSpecialWarningSpell(45855, \"Healer\", nil, nil, 1, 2)\nlocal specWarnCorrosion\t\t= mod:NewSpecialWarningTaunt(45866, nil, nil, nil, 1, 2)\nlocal specWarnCorrosionHeal\t= mod:NewSpecialWarningSpell(45866, \"Healer\", nil, nil, 1, 2)\nlocal specWarnEncaps\t\t= mod:NewSpecialWarningYou(45665, nil, nil, nil, 1, 2)\nlocal yellEncaps\t\t\t= mod:NewYell(45665)\nlocal specWarnEncapsNear\t= mod:NewSpecialWarningClose(45665, nil, nil, nil, 1, 2)\nlocal specWarnVapor\t\t\t= mod:NewSpecialWarningYou(45402, nil, nil, nil, 1, 2)\nlocal specWarnBreath\t\t= mod:NewSpecialWarningCount(45717, nil, nil, nil, 3, 2)\n\nlocal timerGasCast\t\t\t= mod:NewCastTimer(1, 45855)\nlocal timerGasCD\t\t\t= mod:NewCDTimer(32.97, 45855, nil, nil, nil, 3, nil, nil, true) -- REVIEW! Check proper variance with Phase Transcriptor events. Added \"keep\" arg. SPELL_CAST_START: (Onyxia: [2025-10-09]@[20:58:45]) - \"Gas Nova-45855-npc:25038-1001 = pull:20.92, 32.97, 129.37\" || \"Gas Nova-45855-npc:25038-1148 = pull:23.44, Air Phase/37.57, Ground Phase/105.51, 13.44/118.96/156.52\"\nlocal timerCorrosionCD\t\t= mod:NewCDTimer(27.08, 45866, nil, \"Healer\", 2, 5, nil, DBM_COMMON_L.HEALER_ICON, true) -- REVIEW! Check proper variance with Phase Transcriptor events. Added \"keep\" arg. (Onyxia: [2025-10-09]@[20:58:45]) - \"Corrosion-45866-npc:25038-1001 = pull:15.24, 27.08, 141.97\"\nlocal timerCorrosion\t\t= mod:NewTargetTimer(10, 45866, nil, \"Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerEncaps\t\t\t= mod:NewTargetTimer(7, 45665, nil, nil, nil, 3)\nlocal timerEncapsCD\t\t\t= mod:NewCDTimer(30, 45665, nil, nil, nil, 3) -- REVIEW! 2025/10/(20?) - Warmane Onyxia changed script again. (Onyxia: [2025-10-09]@[20:58:45] || [2025-10-30]@[20:46:11]) - \"Encapsulate-npc:25038-1001 = pull:32.55\" || \"Encapsulate-npc:25038-1148 = pull:45.99, Air Phase/15.02, Ground Phase/105.51\"\nlocal timerBreath\t\t\t= mod:NewCDCountTimer(17, 45717, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerPhase\t\t\t= mod:NewTimer(61, \"TimerPhase\", 31550, nil, nil, 6) -- (Onyxia: [2025-10-09]@[20:58:45]) - \"?-I am stronger than ever before!-npc:Felmyst = pull:61.00\"\n\nlocal berserkTimer\t\t\t= mod:NewBerserkTimer(mod:IsTimewalking() and 500 or 600)\n\nmod:AddSetIconOption(\"EncapsIcon\", 45665, true, false, {7})\nmod:AddSetIconOption(\"VaporIcon\", 45402, true, true, {8})\n\nmod.vb.breathCounter = 0\nlocal encapsulateSpellName = DBM:GetSpellInfo(45661)\n\nfunction mod:Groundphase()\n\tDBM:AddSpecialEventToTranscriptorLog(\"Ground Phase\")\n\tself.vb.breathCounter = 0\n\twarnPhase:Show(L.Ground)\n\ttimerGasCD:Start(13)\n\ttimerPhase:Start(nil, L.Air)\n\ttimerEncapsCD:Start()\nend\n\nfunction mod:EncapsulateTarget(targetname)\n\tif not targetname then return end\n\ttimerEncapsCD:Cancel()\n\ttimerEncaps:Start(targetname)\n\tif self.Options.EncapsIcon then\n\t\tself:SetIcon(targetname, 7, 6)\n\tend\n\tif targetname == UnitName(\"player\") then\n\t\tspecWarnEncaps:Show()\n\t\tspecWarnEncaps:Play(\"targetyou\")\n\t\tyellEncaps:Yell()\n\telseif self:CheckNearby(21, targetname) then\n\t\tspecWarnEncapsNear:Show(targetname)\n\t\tspecWarnEncapsNear:Play(\"runaway\")\n\telse\n\t\twarnEncaps:Show(targetname)\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.breathCounter = 0\n\ttimerGasCD:Start(sformat(\"v%s-%s\", 20.92-delay, 23.44-delay))\n\ttimerCorrosionCD:Start(15.2-delay)\n\ttimerPhase:Start(-delay, L.Air)\n\tberserkTimer:Start(-delay)\n\ttimerEncapsCD:Start(46-delay)\nend\n\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 45866 then\n\t\ttimerCorrosion:Start(args.destName)\n\t\tif not args:IsPlayer() then -- validate\n\t\t\tspecWarnCorrosion:Show(args.destName)\n\t\t\tspecWarnCorrosion:Play(\"tauntboss\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 45392 then\n\t\twarnVapor:Show(args.sourceName)\n\t\tif args.sourceName == UnitName(\"player\") then\n\t\t\tspecWarnVapor:Show()\n\t\t\tspecWarnVapor:Play(\"targetyou\")\n\t\telse\n\t\t\twarnVapor:Show(args.sourceName)\n\t\tend\n\t\tif self.Options.VaporIcon then\n\t\t\tself:SetIcon(args.sourceName, 8, 10)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 45855 then\n\t\ttimerGasCast:Start()\n\t\ttimerGasCD:Start()\n\t\tspecWarnGas:Show()\n\t\tspecWarnGas:Play(\"helpdispel\")\n\tend\n\tif spellId == 45866 then\n\t\ttimerCorrosionCD:Start()\n\t\tspecWarnCorrosionHeal:Play(\"tankheal\")\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.AirPhase or msg:find(L.AirPhase) then\n\t\tDBM:AddSpecialEventToTranscriptorLog(\"Air Phase\")\n\t\tself.vb.breathCounter = 0\n\t\twarnPhase:Show(L.Air)\n\t\ttimerGasCD:Cancel()\n\t\ttimerBreath:Start(42, 1)\n\t\ttimerPhase:Start(105.5, L.Ground) -- REVIEW! One YELL > UNIT_TARGET diff had 97.40 > 202.89 (Onyxia: [2025-10-09]@[20:58:45]) - 105.49\n\t\tself:ScheduleMethod(105.5, \"Groundphase\")\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_WHISPER(msg)\n\tif msg == L.Breath or msg:find(L.Breath) then\n\t\tself.vb.breathCounter = self.vb.breathCounter + 1\n\t\tspecWarnBreath:Show(self.vb.breathCounter)\n\t\tspecWarnBreath:Play(\"breathsoon\")\n\t\tif self.vb.breathCounter < 3 then\n\t\t\ttimerBreath:Start(nil, self.vb.breathCounter+1)\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == encapsulateSpellName and self:AntiSpam(2, 1) then\n\t\tself:BossTargetScanner(25038, \"EncapsulateTarget\", 0.05, 10)\n\tend\nend\n"
  },
  {
    "path": "DBM-Sunwell/Kalecgos.lua",
    "content": "local mod\t= DBM:NewMod(\"Kal\", \"DBM-Sunwell\")\nlocal Kal\t= DBM:GetModByName(\"Kal\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20251101110340\")\nmod:SetCreatureID(24850)\nmod:SetEncounterID(724)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(\n\t\"INSTANCE_ENCOUNTER_ENGAGE_UNIT\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 44799\",\n\t\"SPELL_CAST_SUCCESS 45018\",\n\t\"SPELL_AURA_APPLIED 44978 45001 45002 45004 45006 45010 45029 46021 45018\",\n\t\"SPELL_AURA_APPLIED_DOSE 45018\",\n\t\"UNIT_DIED\"\n)\n\nlocal warnPortal\t\t= mod:NewAnnounce(\"WarnPortal\", 4, 46021)\nlocal warnBuffet\t\t= mod:NewSpellAnnounce(45018, 3, nil, false, 2)\nlocal warnBreath\t\t= mod:NewSpellAnnounce(44799, 3, nil, false)\nlocal warnCorrupt\t\t= mod:NewTargetAnnounce(45029, 3)\n\nlocal specWarnBuffet\t= mod:NewSpecialWarningStack(45018, nil, 10, nil, nil, 1, 6)\nlocal specWarnWildMagic\t= mod:NewSpecialWarning(\"SpecWarnWildMagic\")\n\nlocal timerNextPortal\t= mod:NewVarCountTimer(\"v20-30\", 46021, nil, nil, nil, 5) -- 10s variance [20.78-29.62]. Although mod uses SPELL_AURA_APPLIED on Spectral Realm, I am using UNIT_SPELLCAST_SUCCEEDED Spectral Blast for timers (since difference is minimal and captured by timers parsing): (Onyxia: [2025-10-30]@[20:26:56]) - \"Spectral Blast-npc:24850-61 = pull:14.99, 22.93, 29.62, 23.70, 27.51\"\nlocal timerBreathCD\t\t= mod:NewVarTimer(\"v10-20\", 44799, nil, false, nil, 5, nil, DBM_COMMON_L.TANK_ICON) -- 10s variance [10.12-19.86] SPELL_CAST_START: (Onyxia: [2025-10-09]@[20:35:05] || [2025-10-30]@[20:26:56]) - \"Frost Breath-44799-npc:24850-61 = pull:18.65, 12.40, 17.36, 10.12, 14.79, 15.51, 15.82, 16.33\" || \"Frost Breath-44799-npc:24850-61 = pull:16.66, 18.05, 19.86, 11.30, 18.61, 13.71, 18.76\"\nlocal timerBuffetCD\t\t= mod:NewNextTimer(8, 45018, nil, nil, nil, 2) -- SPELL_CAST_SUCCESS: (Onyxia: [2025-10-09]@[20:35:05]) - \"Arcane Buffet-45018-npc:24850-61 = pull:8.02, 8.02, 8.01, 8.01, 8.00, 8.02, 8.05, 7.99, 8.00, 8.01, 8.03, 8.01, 8.02, 8.01, 8.00, 8.01\"\nlocal timerPorted\t\t= mod:NewBuffActiveTimer(60, 46021, nil, nil, nil, 6)\nlocal timerExhausted\t= mod:NewBuffActiveTimer(60, 44867, nil, nil, nil, 6)\n\nlocal berserkTimer\nif mod:IsTimewalking() then\n\tberserkTimer\t\t= mod:NewBerserkTimer(300) -- Doesn't exist on retail\nend\n\nmod:AddRangeFrameOption(\"12\")\nmod:AddBoolOption(\"ShowRespawn\", true)\nmod:AddBoolOption(\"ShowFrame\", true)\nmod:AddBoolOption(\"FrameLocked\", false)\nmod:AddBoolOption(\"FrameClassColor\", true, nil, function()\n\tKal:UpdateColors()\nend)\nmod:AddBoolOption(\"FrameUpwards\", false, nil, function()\n\tKal:ChangeFrameOrientation()\nend)\nmod:AddButton(L.FrameGUIMoveMe, function() Kal:CreateFrame() end, nil, 130, 20)\n\nmod.vb.portCount = 1\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.portCount = 1\n\ttimerNextPortal:Start(15, self.vb.portCount) -- Fixed timer: 15s.\n\tif self:IsTimewalking() then\n\t\tberserkTimer:Start(-delay)\n\tend\n\tif self.Options.ShowFrame then\n\t\tKal:CreateFrame()\n\tend\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show()\n\tend\n\tif self.Options.HealthFrame then\n\t\tDBM.BossHealth:Clear()\n\t\tDBM.BossHealth:AddBoss(24850, L.name)\n\t\tDBM.BossHealth:AddBoss(24892, L.Demon)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tKal:DestroyFrame()\n\tDBM.RangeCheck:Hide()\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 44978 and args:IsPlayer() and self:IsHealer() then\n\t\tspecWarnWildMagic:Show(L.Heal)\n\telseif args.spellId == 45001 and args:IsPlayer() then\n\t\tspecWarnWildMagic:Show(L.Haste)\n\telseif args.spellId == 45002 and args:IsPlayer() and self:IsMelee() then\n\t\tspecWarnWildMagic:Show(L.Hit)\n\telseif args.spellId == 45004 and args:IsPlayer() and not self:IsHealer() then\n\t\tspecWarnWildMagic:Show(L.Crit)\n\telseif args.spellId == 45006 and args:IsPlayer() and not self:IsHealer() then\n\t\tspecWarnWildMagic:Show(L.Aggro)\n\telseif args.spellId == 45010 and args:IsPlayer() then\n\t\tspecWarnWildMagic:Show(L.Mana)\n\telseif args.spellId == 45029 and self:IsInCombat() then\n\t\twarnCorrupt:Show(args.destName)\n\telseif args.spellId == 46021 then\n\t\tif args:IsPlayer() then\n\t\t\ttimerPorted:Start()\n\t\t\ttimerExhausted:Schedule(60)\n\t\tend\n\t\tif self:AntiSpam(20, 2) then\n\t\t\tlocal grp, class\n\t\t\tif GetNumRaidMembers() > 0 then\n\t\t\t\tfor i = 1, GetNumRaidMembers() do\n\t\t\t\t\tlocal name, _, subgroup, _, _, fileName = GetRaidRosterInfo(i)\n\t\t\t\t\tif name == args.destName then\n\t\t\t\t\t\tgrp = subgroup\n\t\t\t\t\t\tclass = fileName\n\t\t\t\t\t\tbreak\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\telse\n\t\t\t\t-- solo raid\n\t\t\t\tgrp = 0\n\t\t\t\tclass = select(2, UnitClass(\"player\"))\n\t\t\tend\n\t\t\tKal:AddEntry((\"%s (%d)\"):format(args.destName, grp or 0), class)\n\t\t\twarnPortal:Show(self.vb.portCount, args.destName, grp or 0)\n\t\t\tself.vb.portCount = self.vb.portCount + 1\n\t\t\ttimerNextPortal:Start(nil, self.vb.portCount)\n\t\tend\n\telseif args.spellId == 45018 and args:IsPlayer() then\n\t\tlocal amount = args.amount or 1\n\t\tif amount >= 10 and amount % 2 == 0 then\n\t\t\tspecWarnBuffet:Show(amount)\n\t\t\tspecWarnBuffet:Play(\"stackhigh\")\n\t\tend\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 44799 then\n\t\twarnBreath:Show()\n\t\ttimerBreathCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 45018 and self:AntiSpam(7, 1) then\n\t\twarnBuffet:Show()\n\t\ttimerBuffetCD:Start()\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tif self:GetCIDFromGUID(args.destGUID) == 24892 then\n\t\tDBM:EndCombat(self)\n\tend\n\tif bit.band(args.destFlags, COMBATLOG_OBJECT_TYPE_PLAYER) ~= 0 then\n\t\tlocal grp\n\t\tif GetNumRaidMembers() > 0 then\n\t\t\tfor i = 1, GetNumRaidMembers() do\n\t\t\t\tlocal name, _, subgroup = GetRaidRosterInfo(i)\n\t\t\t\tif name == args.destName then\n\t\t\t\t\tgrp = subgroup\n\t\t\t\t\tbreak\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\tgrp = 0\n\t\tend\n\t\tKal:RemoveEntry((\"%s (%d)\"):format(args.destName, grp or 0))\n\tend\nend\n\nfunction mod:INSTANCE_ENCOUNTER_ENGAGE_UNIT()\n\tif self:IsInCombat() and not UnitExists(\"boss1\") and self.Options.ShowRespawn then\n\t\tDBT:CreateBar(30, DBM_CORE_L.TIMER_RESPAWN:format(L.name), \"Interface\\\\Icons\\\\Spell_Holy_BorrowedTime\")\n\tend\nend\n"
  },
  {
    "path": "DBM-Sunwell/KalecgosFrame.lua",
    "content": "local Kal\t= DBM:GetModByName(\"Kal\")\nlocal L\t\t= Kal:GetLocalizedStrings()\n\nfunction Kal:InitializeMenu()\n--\tself is DBMKalMenu, not Kal\n\tlocal info1 = UIDropDownMenu_CreateInfo()\n\tinfo1.text = L.name\n\tinfo1.notClickable = 1\n\tinfo1.isTitle = 1\n\tinfo1.notCheckable = 1\n\tUIDropDownMenu_AddButton(info1, 1)\n\n\tlocal info2 = UIDropDownMenu_CreateInfo()\n\tinfo2.text = L.FrameLock\n\tinfo2.value = Kal.Options.FrameLocked\n\tinfo2.func = function() Kal.Options.FrameLocked = not Kal.Options.FrameLocked end\n\tinfo2.checked = Kal.Options.FrameLocked\n\tinfo2.keepShownOnClick = 1\n\tUIDropDownMenu_AddButton(info2, 1)\n\n\tlocal info3 = UIDropDownMenu_CreateInfo()\n\tinfo3.text = L.FrameClassColor\n\tinfo3.value = Kal.Options.FrameClassColor\n\tinfo3.func = function() Kal.Options.FrameClassColor = not Kal.Options.FrameClassColor Kal:UpdateColors() end\n\tinfo3.checked = Kal.Options.FrameClassColor\n\tinfo3.keepShownOnClick = 1\n\tUIDropDownMenu_AddButton(info3, 1)\n\n\tlocal info4 = UIDropDownMenu_CreateInfo()\n\tinfo4.text = L.FrameOrientation\n\tinfo4.value = Kal.Options.FrameUpwards\n\tinfo4.func = function() Kal.Options.FrameUpwards = not Kal.Options.FrameUpwards Kal:ChangeFrameOrientation() end\n\tinfo4.checked = Kal.Options.FrameUpwards\n\tinfo4.keepShownOnClick = 1\n\tUIDropDownMenu_AddButton(info4, 1)\n\n\tlocal info5 = UIDropDownMenu_CreateInfo()\n\tinfo5.text = L.FrameHide\n\tinfo5.func = function() _G[\"DBMKalFrameDrag\"]:Hide() end\n\tinfo5.notCheckable = 1\n\tUIDropDownMenu_AddButton(info5, 1)\n\n\tlocal info6 = UIDropDownMenu_CreateInfo()\n\tinfo6.text = L.FrameClose\n\tinfo6.func = function() end\n\tinfo6.notCheckable = 1\n\tUIDropDownMenu_AddButton(info6, 1)\nend\n\nlocal firstEntry = nil\nlocal lastEntry = nil\nlocal frames = {}\n\nlocal fCounter = 1\nlocal function createBarFrame(name)\n\tlocal frame\n\tif frames[#frames] then\n\t\tframe = frames[#frames]\n\t\tframes[#frames] = nil\n\t\tframe:Show()\n\telse\n\t\tframe = CreateFrame(\"Frame\", \"DBMKalFrame\"..fCounter, _G[\"DBMKalFrameDrag\"], \"DBMKalFrameTemplate\")\n\t\tfCounter = fCounter + 1\n\tend\n\t_G[frame:GetName()..\"BarName\"]:SetText(name)\n\treturn frame\nend\n\nlocal barMethods = {}\nlocal function createBar(name)\n\tlocal newEntry = setmetatable({\n\t\tprev = lastEntry,\n\t\tnext = nil,\n\t\tdata = {\n\t\t\tframe = createBarFrame(name),\n\t\t\tname = name,\n\t\t\ttimer = 60\n\t\t}\n\t},\n\t{\n\t\t__index = barMethods\n\t})\n\tif lastEntry then\n\t\tlastEntry.next = newEntry\n\tend\n\tlastEntry = newEntry\n\tfirstEntry = firstEntry or newEntry\n\n\tnewEntry.data.frame.entry = newEntry\n\tnewEntry:Update(0)\n\n\treturn newEntry\nend\n\nfunction barMethods:Update(elapsed)\n\tlocal bar = _G[self.data.frame:GetName()..\"Bar\"]\n\tlocal cooldown = _G[self.data.frame:GetName()..\"BarCooldown\"]\n\tlocal spark = _G[self.data.frame:GetName()..\"BarSpark\"]\n\tself.data.timer = self.data.timer - elapsed\n\tif self.data.timer <= 0 then\n\t\tKal:RemoveEntry(self.data.name)\n\telse\n\t\tcooldown:SetText(math.floor(self.data.timer))\n\t\tbar:SetValue(self.data.timer)\n\t\tspark:ClearAllPoints()\n\t\tspark:SetPoint(\"CENTER\", bar, \"LEFT\", ((bar:GetValue() / 60) * bar:GetWidth()), 0)\n\t\tspark:Show()\n\tend\nend\n\nfunction barMethods:GetNext()\n\treturn self.next\nend\n\nfunction barMethods:GetPrev()\n\treturn self.prev\nend\n\nfunction barMethods:SetPosition()\n\tself.data.frame:ClearAllPoints()\n\tif self == firstEntry then\n\t\tif Kal.Options.FrameUpwards then\n\t\t\tself.data.frame:SetPoint(\"BOTTOM\", _G[\"DBMKalFrameDrag\"], \"TOP\", 0, -10)\n\t\telse\n\t\t\tself.data.frame:SetPoint(\"TOP\", _G[\"DBMKalFrameDrag\"], \"BOTTOM\", 0, 0)\n\t\tend\n\telse\n\t\tif Kal.Options.FrameUpwards then\n\t\t\tself.data.frame:SetPoint(\"BOTTOM\", self:GetPrev().data.frame, \"TOP\", 0, -3)\n\t\telse\n\t\t\tself.data.frame:SetPoint(\"TOP\", self:GetPrev().data.frame, \"BOTTOM\", 0, 3)\n\t\tend\n\tend\nend\n\nfunction barMethods:GetFrame()\n\treturn self.data.frame\nend\n\nfunction barMethods:GetBar()\n\treturn _G[self.data.frame:GetName()..\"Bar\"]\nend\n\nfunction barMethods:GetSpark()\n\treturn _G[self.data.frame:GetName()..\"BarSpark\"]\nend\n\nfunction Kal:CreateFrame()\n\t_G[\"DBMKalFrameDragTitle\"]:SetText(L.FrameTitle)\n\tif firstEntry then\n\t\tlocal entry = firstEntry\n\t\twhile entry do\n\t\t\ttable.insert(frames, entry.data.frame)\n\t\t\tentry.data.frame:Hide()\n\t\t\tentry.data = nil\n\t\t\tentry = entry:GetNext()\n\t\tend\n\t\tfirstEntry = nil\n\t\tlastEntry = nil\n\tend\n\t_G[\"DBMKalFrameDrag\"]:Show()\n\t_G[\"DBMKalFrameDrag\"]:SetPoint(self.Options.PermanentFramePoint or \"CENTER\", nil, self.Options.PermanentFramePoint or \"CENTER\", self.Options.PermanentFrameX or 150, self.Options.PermanentFrameY or -50)\nend\n\nfunction Kal:SaveFramePosition()\n\tlocal point, _, _, x, y = _G[\"DBMKalFrameDrag\"]:GetPoint()\n\tself.Options.PermanentFramePoint = point\n\tself.Options.PermanentFrameX = x\n\tself.Options.PermanentFrameY = y\nend\n\nfunction Kal:DestroyFrame()\n\t_G[\"DBMKalFrameDrag\"]:Hide()\nend\n\nfunction Kal:ChangeFrameOrientation()\n\tif firstEntry then\n\t\tlocal entry = firstEntry\n\t\twhile entry do\n\t\t\tentry:SetPosition()\n\t\t\tentry = entry:GetNext()\n\t\tend\n\tend\nend\n\nfunction Kal:UpdateColors()\n\tif firstEntry then\n\t\tlocal entry = firstEntry\n\t\twhile entry do\n\t\t\tif self.Options.FrameClassColor then\n\t\t\t\tlocal _, _, name = entry.data.name:find(\"(.+) %(%d%)\")\n\t\t\t\tlocal class\n\t\t\t\tfor uId in DBM:GetGroupMembers() do\n\t\t\t\t\tlocal name2 = UnitName(uId)\n\t\t\t\t\tlocal _, fileName = UnitClass(uId)\n\t\t\t\t\tif name2 == name then\n\t\t\t\t\t\tclass = fileName\n\t\t\t\t\t\tbreak\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tlocal r, g, b = 1, 0.7, 0\n\t\t\t\tif self.Options.FrameClassColor then\n\t\t\t\t\tif RAID_CLASS_COLORS[class or \"\"] then\n\t\t\t\t\t\tr = RAID_CLASS_COLORS[class].r\n\t\t\t\t\t\tg = RAID_CLASS_COLORS[class].g\n\t\t\t\t\t\tb = RAID_CLASS_COLORS[class].b\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\t\tentry:GetBar():SetStatusBarColor(r, g, b)\n\t\t\t\tentry:GetSpark():SetVertexColor(r, g, b)\n\t\t\telse\n\t\t\t\tentry:GetBar():SetStatusBarColor(1, 0.7, 0)\n\t\t\t\tentry:GetSpark():SetVertexColor(1, 0.7, 0)\n\t\t\tend\n\t\t\tentry = entry:GetNext()\n\t\tend\n\tend\nend\n\nfunction Kal:AddEntry(name, class)\n\tlocal entry = createBar(name)\n\tlocal r, g, b = 1, 0.7, 0\n\tif self.Options.FrameClassColor then\n\t\tif RAID_CLASS_COLORS[class or \"\"] then\n\t\t\tr = RAID_CLASS_COLORS[class].r\n\t\t\tg = RAID_CLASS_COLORS[class].g\n\t\t\tb = RAID_CLASS_COLORS[class].b\n\t\tend\n\tend\n\tentry:GetBar():SetStatusBarColor(r, g, b)\n\tentry:GetSpark():SetVertexColor(r, g, b)\n\tentry:SetPosition()\nend\n\nfunction Kal:RemoveEntry(name)\n\tif firstEntry then\n\t\tlocal entry = firstEntry\n\t\twhile entry do\n\t\t\tif entry.data.name == name then\n\t\t\t\ttable.insert(frames, entry.data.frame)\n\t\t\t\tentry.data.frame:Hide()\n\t\t\t\tentry.data = nil\n\t\t\t\tif entry == firstEntry then\n\t\t\t\t\tlocal nextEntry = entry:GetNext()\n\t\t\t\t\tif nextEntry then\n\t\t\t\t\t\tnextEntry.prev = nil\n\t\t\t\t\t\tfirstEntry = nextEntry\n\t\t\t\t\telse\n\t\t\t\t\t\tfirstEntry = nil\n\t\t\t\t\t\tlastEntry = nil\n\t\t\t\t\tend\n\t\t\t\telseif entry == lastEntry then\n\t\t\t\t\tlocal prevEntry = entry:GetPrev()\n\t\t\t\t\tif prevEntry then\n\t\t\t\t\t\tprevEntry.next = nil\n\t\t\t\t\t\tlastEntry = prevEntry\n\t\t\t\t\telse\n\t\t\t\t\t\tfirstEntry = nil\n\t\t\t\t\t\tlastEntry = nil\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\tentry:GetPrev().next = entry:GetNext()\n\t\t\t\t\tentry:GetNext().prev = entry:GetPrev()\n\t\t\t\tend\n\t\t\t\tif entry:GetNext() then\n\t\t\t\t\tentry:GetNext():SetPosition()\n\t\t\t\tend\n\t\t\t\tbreak\n\t\t\tend\n\t\t\tentry = entry:GetNext()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Sunwell/KalecgosFrame.xml",
    "content": "<Ui xmlns=\"http://www.blizzard.com/wow/ui/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.blizzard.com/wow/ui/\n..\\FrameXML\\UI.xsd\">\n\t<Frame name=\"DBMKalFrameDrag\" parent=\"UIParent\" frameStrata=\"MEDIUM\" hidden=\"true\" topLevel=\"true\" enableMouse=\"true\" movable=\"true\">\n\t\t<Size>\n\t\t\t<AbsDimension x=\"100\" y=\"20\"/>\n\t\t</Size>\n\t\t<Anchors>\n\t\t\t<Anchor point=\"CENTER\" relativePoint=\"CENTER\">\n\t\t\t\t<Offset>\n\t\t\t\t\t<AbsDimension x=\"150\" y=\"-50\"/>\n\t\t\t\t</Offset>\n\t\t\t</Anchor>\n\t\t</Anchors>\n\t\t<Layers>\n\t\t\t<Layer level=\"BACKGROUND\">\n\t\t\t\t<FontString name=\"$parentTitle\" inherits=\"GameFontNormalSmall\" text=\" \">\n\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t<Anchor point=\"BOTTOM\" relativePoint=\"BOTTOM\"/>\n\t\t\t\t\t</Anchors>\n\t\t\t\t</FontString>\n\t\t\t</Layer>\n\t\t</Layers>\n\t\t<Scripts>\n\t\t\t<OnMouseDown>\n\t\t\t\tif button == \"LeftButton\" and not DBM:GetModByName(\"Kal\").Options.FrameLocked then\n\t\t\t\t\tself:StartMoving()\n\t\t\t\tend\n\t\t\t</OnMouseDown>\n\t\t\t<OnMouseUp>\n\t\t\t\tself:StopMovingOrSizing()\n\t\t\t\tDBM:GetModByName(\"Kal\"):SaveFramePosition()\n\t\t\t\tif button == \"RightButton\" then\n\t\t\t\t\tUIDropDownMenu_Initialize(DBMKalMenu, DBM:GetModByName(\"Kal\").InitializeMenu)\n\t\t\t\t\tToggleDropDownMenu(1, nil, DBMKalMenu, \"DBMKalMenu\", 30, 50)\n\t\t\t\tend\n\t\t\t</OnMouseUp>\n\t\t\t<OnShow>\n\t\t\t\tDBM:GetModByName(\"Kal\"):CreateFrame()\n\t\t\t</OnShow>\n\t\t</Scripts>\n\t</Frame>\n\t<Frame name=\"DBMKalMenu\" parent=\"DBMKalFrameDrag\" inherits=\"UIDropDownMenuTemplate\" id=\"1\" hidden=\"true\">\n\t\t<Size>\n\t\t\t<AbsDimension x=\"10\" y=\"10\"/>\n\t\t</Size>\n\t\t<Anchors>\n\t\t\t<Anchor point=\"BOTTOM\" relativeto=\"DBMKalFrameDrag\">\n\t\t\t\t<Offset>\n\t\t\t\t\t<AbsDimension x=\"0\" y=\"-50\"/>\n\t\t\t\t</Offset>\n\t\t\t</Anchor>\n\t\t</Anchors>\n\t</Frame>\n\n\t<Frame name=\"DBMKalFrameTemplate\" enableMouse=\"true\" virtual=\"true\" frameStrata=\"MEDIUM\" topLevel=\"true\">\n\t\t<Size>\n\t\t\t<AbsDimension x=\"130\" y=\"20\"/>\n\t\t</Size>\n\t\t<Frames>\n\t\t\t<StatusBar name=\"$parentBar\">\n\t\t\t\t<Size>\n\t\t\t\t\t<AbsDimension x=\"120\" y=\"12\"/>\n\t\t\t\t</Size>\n\t\t\t\t<Anchors>\n\t\t\t\t\t<Anchor point=\"CENTER\" relativePoint=\"CENTER\">\n\t\t\t\t\t\t<Offset>\n\t\t\t\t\t\t\t<AbsDimension x=\"0\" y=\"0\"/>\n\t\t\t\t\t\t</Offset>\n\t\t\t\t\t</Anchor>\n\t\t\t\t</Anchors>\n\t\t\t\t<Layers>\n\t\t\t\t\t<Layer level=\"BACKGROUND\">\n\t\t\t\t\t\t<Texture name=\"$parentBackground\">\n\t\t\t\t\t\t\t<Color r=\"0\" g=\"0\" b=\"0\" a=\"0.3\"/>\n\t\t\t\t\t\t</Texture>\n\t\t\t\t\t</Layer>\n\t\t\t\t\t<Layer level=\"OVERLAY\">\n\t\t\t\t\t\t<FontString name=\"$parentName\" inherits=\"GameFontHighlightSmall\" text=\"\">\n\t\t\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t\t\t<Anchor point=\"LEFT\" relativePoint=\"LEFT\">\n\t\t\t\t\t\t\t\t\t<Offset>\n\t\t\t\t\t\t\t\t\t\t<AbsDimension x=\"1\" y=\"1\"/>\n\t\t\t\t\t\t\t\t\t</Offset>\n\t\t\t\t\t\t\t\t</Anchor>\n\t\t\t\t\t\t\t</Anchors>\n\t\t\t\t\t\t</FontString>\n\t\t\t\t\t\t<FontString name=\"$parentCooldown\" inherits=\"GameFontHighlightSmall\" text=\"\">\n\t\t\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t\t\t<Anchor point=\"RIGHT\" relativePoint=\"RIGHT\">\n\t\t\t\t\t\t\t\t\t<Offset>\n\t\t\t\t\t\t\t\t\t\t<AbsDimension x=\"-1\" y=\"1\"/>\n\t\t\t\t\t\t\t\t\t</Offset>\n\t\t\t\t\t\t\t\t</Anchor>\n\t\t\t\t\t\t\t</Anchors>\n\t\t\t\t\t\t</FontString>\n\t\t\t\t\t\t<Texture name=\"$parentSpark\" file=\"Interface\\CastingBar\\UI-CastingBar-Spark\" alphaMode=\"ADD\">\n\t\t\t\t\t\t\t<Size>\n\t\t\t\t\t\t\t\t<AbsDimension x=\"32\" y=\"32\"/>\n\t\t\t\t\t\t\t</Size>\n\t\t\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t\t\t<Anchor point=\"CENTER\">\n\t\t\t\t\t\t\t\t\t<Offset>\n\t\t\t\t\t\t\t\t\t\t<AbsDimension x=\"0\" y=\"1\"/>\n\t\t\t\t\t\t\t\t\t</Offset>\n\t\t\t\t\t\t\t\t</Anchor>\n\t\t\t\t\t\t\t</Anchors>\n\t\t\t\t\t\t</Texture>\n\t\t\t\t\t</Layer>\n\t\t\t\t</Layers>\n\t\t\t\t<Frames>\n\t\t\t\t\t<Button name=\"$parentBorder\">\n\t\t\t\t\t\t<Size>\n\t\t\t\t\t\t\t<AbsDimension x=\"128\" y=\"32\"/>\n\t\t\t\t\t\t</Size>\n\t\t\t\t\t\t<Anchors>\n\t\t\t\t\t\t\t<Anchor point=\"LEFT\">\n\t\t\t\t\t\t\t\t<Offset>\n\t\t\t\t\t\t\t\t\t<AbsDimension x=\"-5\" y=\"0\"/>\n\t\t\t\t\t\t\t\t</Offset>\n\t\t\t\t\t\t\t</Anchor>\n\t\t\t\t\t\t</Anchors>\n\t\t\t\t\t\t<NormalTexture name=\"$parentTextureNormal\" file=\"Interface\\PaperDollInfoFrame\\UI-Character-Skills-BarBorder\"/>\n\t\t\t\t\t\t<Scripts>\n\t\t\t\t\t\t\t<OnMouseDown>\n\t\t\t\t\t\t\t\tif button == \"LeftButton\" and not DBM:GetModByName(\"Kal\").Options.FrameLocked then\n\t\t\t\t\t\t\t\t\tself.moving = true\n\t\t\t\t\t\t\t\t\tDBMKalFrameDrag:StartMoving()\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t</OnMouseDown>\n\t\t\t\t\t\t\t<OnMouseUp>\n\t\t\t\t\t\t\t\tself.moving = false\n\t\t\t\t\t\t\t\tDBMKalFrameDrag:StopMovingOrSizing()\n\t\t\t\t\t\t\t\tDBM:GetModByName(\"Kal\"):SaveFramePosition()\n\t\t\t\t\t\t\t\tif button == \"RightButton\" then\n\t\t\t\t\t\t\t\t\tUIDropDownMenu_Initialize(DBMKalMenu, DBM:GetModByName(\"Kal\").InitializeMenu)\n\t\t\t\t\t\t\t\t\tToggleDropDownMenu(1, nil, DBMKalMenu, \"DBMKalMenu\", 30, 50)\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t</OnMouseUp>\n\t\t\t\t\t\t\t<OnHide>\n\t\t\t\t\t\t\t\tif self.moving then\n\t\t\t\t\t\t\t\t\tDBM:GetModByName(\"Kal\"):SaveFramePosition()\n\t\t\t\t\t\t\t\t\tDBMKalFrameDrag:StopMovingOrSizing()\n\t\t\t\t\t\t\t\t\tself.moving = false\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t</OnHide>\n\t\t\t\t\t\t</Scripts>\n\t\t\t\t\t</Button>\n\t\t\t\t</Frames>\n\t\t\t\t<BarTexture name=\"$parentTextureBar\" file=\"Interface\\PaperDollInfoFrame\\UI-Character-Skills-Bar\"/>\n\t\t\t\t<BarColor r=\"1.0\" g=\"0.7\" b=\"0.0\"/>\n\t\t\t\t<Scripts>\n\t\t\t\t\t<OnLoad>\n\t\t\t\t\t\tself:SetMinMaxValues(0, 60)\n\t\t\t\t\t</OnLoad>\n\t\t\t\t\t<OnUpdate>\n\t\t\t\t\t\tself:GetParent().entry:Update(elapsed)\n\t\t\t\t\t</OnUpdate>\n\t\t\t\t</Scripts>\n\t\t\t</StatusBar>\n\t\t</Frames>\n\t\t<Scripts>\n\t\t\t<OnMouseDown>\n\t\t\t\tif button == \"LeftButton\" and not DBM:GetModByName(\"Kal\").Options.FrameLocked then\n\t\t\t\t\tself.moving = true\n\t\t\t\t\tDBMKalFrameDrag:StartMoving()\n\t\t\t\tend\n\t\t\t</OnMouseDown>\n\t\t\t<OnMouseUp>\n\t\t\t\tself.moving = false\n\t\t\t\tDBMKalFrameDrag:StopMovingOrSizing()\n\t\t\t\tif button == \"RightButton\" then\n\t\t\t\t\tUIDropDownMenu_Initialize(DBMKalMenu, DBM:GetModByName(\"Kal\").InitializeMenu)\n\t\t\t\t\tToggleDropDownMenu(1, nil, DBMKalMenu, \"DBMKalMenu\", 30, 50)\n\t\t\t\tend\n\t\t\t</OnMouseUp>\n\t\t\t<OnHide>\n\t\t\t\tif self.moving then\n\t\t\t\t\tDBMKalFrameDrag:StopMovingOrSizing()\n\t\t\t\t\tself.moving = false\n\t\t\t\tend\n\t\t\t</OnHide>\n\t\t</Scripts>\n\t</Frame>\n</Ui>\n"
  },
  {
    "path": "DBM-Sunwell/Kil'jaeden.lua",
    "content": "local mod\t= DBM:NewMod(\"Kil\", \"DBM-Sunwell\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal sformat = string.format\n\nmod:SetRevision(\"20251101123458\")\nmod:SetCreatureID(25315)\nmod:SetEncounterID(729)\nmod:SetUsedIcons(4, 5, 6, 7, 8)\n\nmod:RegisterCombat(\"yell\", L.YellPull)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 45641\",\n\t\"SPELL_AURA_REMOVED 45641\",\n\t\"SPELL_CAST_START 46605 45737 46680 45641\",\n\t\"SPELL_CAST_SUCCESS 45680 45848 45892 46589\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal warnBloom\t\t\t= mod:NewTargetAnnounce(45641, 2)\nlocal warnDarkOrb\t\t= mod:NewAnnounce(\"WarnDarkOrb\", 4, 45109)\nlocal warnDart\t\t\t= mod:NewSpellAnnounce(45740, 3)\nlocal warnShield\t\t= mod:NewSpellAnnounce(45848, 1)\nlocal warnBlueOrb\t\t= mod:NewAnnounce(\"WarnBlueOrb\", 1, 45109)\nlocal warnSpikeTarget\t= mod:NewTargetAnnounce(46589, 3)\nlocal warnPhase2\t\t= mod:NewPhaseAnnounce(2)\nlocal warnPhase3\t\t= mod:NewPhaseAnnounce(3)\nlocal warnPhase4\t\t= mod:NewPhaseAnnounce(4)\n\nlocal specWarnSpike\t\t= mod:NewSpecialWarningMove(46589)\nlocal yellSpike\t\t\t= mod:NewYellMe(46589)\nlocal specWarnBloom\t\t= mod:NewSpecialWarningYou(45641, nil, nil, nil, 1, 2)\nlocal yellBloom\t\t\t= mod:NewYellMe(45641)\nlocal specWarnBomb\t\t= mod:NewSpecialWarningMoveTo(46605, nil, nil, nil, 3, 2)--findshield\nlocal specWarnShield\t= mod:NewSpecialWarningSpell(45848)\nlocal specWarnDarkOrb\t= mod:NewSpecialWarning(\"SpecWarnDarkOrb\", false)\nlocal specWarnBlueOrb\t= mod:NewSpecialWarning(\"SpecWarnBlueOrb\", false)\n\nlocal timerBloomCD\t\t= mod:NewVarTimer(\"v20-25\", 45641, nil, nil, nil, 2) -- SPELL_CAST_START: (Onyxia: 25m [2025-10-12]@[22:27:20] || [2025-10-30]@[22:06:43]) - \"Fire Bloom-45641-npc:25315-2148 = pull:18.13/[Stage 1/0.00] 18.13, 22.65, Stage 2/7.59, 42.43/50.02, 20.01\" || \"Fire Bloom-45641-npc:25315-2578 = pull:7.53/[Stage 1/0.00] 7.53, 22.66, Stage 2/11.11, 42.38/53.49, 20.15, 24.00, 20.02, Stage 3/7.57, 42.39/49.96, 20.58, 24.95, Stage 4/22.66, 66.18/88.84\"\nlocal timerDartCD\t\t= mod:NewCDTimer(20, 45740, nil, nil, nil, 2)--Targeted or aoe?\nlocal timerBomb\t\t\t= mod:NewCastTimer(9, 46605, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerBombCD\t\t= mod:NewCDTimer(45, 46605, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON) -- SPELL_CAST_START: (Onyxia: 25m [2025-10-30]@[22:06:43]) - \"Darkness of a Thousand Souls-46605-npc:25315-2578 = pull:115.97/[Stage 1/0.00, Stage 2/41.29] 74.68/115.97, Stage 3/39.44, 75.11/114.55, Stage 4/35.46, 53.40/88.86, 25.90\"\nlocal timerSpike\t\t= mod:NewCastTimer(28.75, 46680, nil, nil, nil, 3)\nlocal timerBlueOrb\t\t= mod:NewTimer(32.5, \"TimerBlueOrb\", 45109, nil, nil, 5) -- phase 2: 32.48 || 32.5 || 32.48 || 32.51\n\nlocal berserkTimer\t\t= mod:NewBerserkTimer(mod:IsTimewalking() and 600 or 900)\n\nmod:AddRangeFrameOption(\"12\")\nmod:AddSetIconOption(\"BloomIcon\", 45641, true, false, {4, 5, 6, 7, 8})\n\nlocal warnBloomTargets = {}\nlocal orbGUIDs = {}\nmod.vb.bloomIcon = 8\n\nlocal function showBloomTargets(self)\n\twarnBloom:Show(table.concat(warnBloomTargets, \"<, >\"))\n\ttable.wipe(warnBloomTargets)\n\tself.vb.bloomIcon = 8\nend\n\nfunction mod:OnCombatStart(delay)\n\ttable.wipe(warnBloomTargets)\n\ttable.wipe(orbGUIDs)\n\tself.vb.bloomIcon = 8\n\tself:SetStage(1)\n\ttimerBloomCD:Start(sformat(\"v%s-%s\", 7.53-delay, 18.13-delay))\n\tberserkTimer:Start(-delay)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show()\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 45641 then\n\t\twarnBloomTargets[#warnBloomTargets + 1] = args.destName\n\t\tself:Unschedule(showBloomTargets)\n\t\tif self.Options.BloomIcon then\n\t\t\tself:SetIcon(args.destName, self.vb.bloomIcon)\n\t\tend\n\t\tself.vb.bloomIcon = self.vb.bloomIcon - 1\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnBloom:Show()\n\t\t\tspecWarnBloom:Play(\"targetyou\")\n\t\t\tyellBloom:Yell()\n\t\tend\n\t\tif #warnBloomTargets >= 5 then\n\t\t\tshowBloomTargets(self)\n\t\telse\n\t\t\tself:Schedule(0.3, showBloomTargets, self)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 45641 then\n\t\tif self.Options.BloomIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 46605 then\n\t\tspecWarnBomb:Show(SHIELDSLOT)\n\t\tspecWarnBomb:Play(\"findshield\")\n\t\ttimerBomb:Start()\n\t\tif self.vb.phase == 4 then\n\t\t\ttimerBombCD:Start(25)\n\t\telse\n\t\t\ttimerBombCD:Start()\n\t\tend\n\telseif args.spellId == 45737 then\n\t\twarnDart:Show()\n\t\ttimerDartCD:Start()\n\telseif args.spellId == 46680 then\n\t\ttimerSpike:Start()\n\telseif args.spellId == 45641 then -- Fire Bloom\n\t\ttimerBloomCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 45680 and not orbGUIDs[args.sourceGUID] then\n\t\torbGUIDs[args.sourceGUID] = true\n\t\tif self:AntiSpam(5, 1) then\n\t\t\twarnDarkOrb:Show()\n\t\t\tspecWarnDarkOrb:Show()\n\t\tend\n\telseif args.spellId == 45848 then\n\t\twarnShield:Show()\n\t\tspecWarnShield:Show()\n\telseif args.spellId == 45892 then\n\t\tself:SetStage(0)\n\t\tif self.vb.phase == 2 then\n\t\t\twarnPhase2:Show()\n\t\t\ttimerBlueOrb:Start()\n\t\t\ttimerDartCD:Start(\"v47.16-54.57\") -- 47.16-54.57\n\t\t\ttimerBombCD:Start(74.68) -- REVIEW! variance? Changed script from 71.46-71.59?\n\t\telseif self.vb.phase == 3 then\n\t\t\twarnPhase3:Show()\n\t\t\ttimerBlueOrb:Cancel()\n\t\t\ttimerDartCD:Cancel()\n\t\t\ttimerBombCD:Cancel()\n\t\t\ttimerBlueOrb:Start()\n\t\t\ttimerDartCD:Start(48.7)\n\t\t\ttimerBombCD:Start(75.11) -- REVIEW! variance?\n\t\telseif self.vb.phase == 4 then\n\t\t\twarnPhase4:Show()\n\t\t\ttimerBlueOrb:Cancel()\n\t\t\ttimerDartCD:Cancel()\n\t\t\ttimerBombCD:Cancel()\n\t\t\ttimerBlueOrb:Start(45)\n\t\t\ttimerDartCD:Start(49)\n\t\t\ttimerBombCD:Start(53.4) -- REVIEW! variance?\n\t\tend\n\telseif args.spellId == 46589 and args.destName ~= nil then\n\t\tif args.destName == UnitName(\"player\") then\n\t\t\tspecWarnSpike:Show()\n\t\t\tyellSpike:Yell()\n\t\telse\n\t\t\twarnSpikeTarget:Show(args.destName)\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.OrbYell1 or msg:find(L.OrbYell1) or msg == L.OrbYell2 or msg:find(L.OrbYell2) or msg == L.OrbYell3 or msg:find(L.OrbYell3) or msg == L.OrbYell4 or msg:find(L.OrbYell4) then\n\t\twarnBlueOrb:Show()\n\t\tspecWarnBlueOrb:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-Sunwell/M'uru.lua",
    "content": "local mod\t= DBM:NewMod(\"Muru\", \"DBM-Sunwell\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20251013225401\")\nmod:SetCreatureID(25741)--25741 Muru, 25840 Entropius\nmod:SetEncounterID(728)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 45996\",\n\t\"SPELL_CAST_SUCCESS 46177\",\n\t\"SPELL_SUMMON 46268 46282\",\n\t\"UNIT_DIED\"\n)\n\nlocal warnHuman\t\t\t\t= mod:NewAnnounce(\"WarnHuman\", 4, 27778)\nlocal warnVoid\t\t\t\t= mod:NewAnnounce(\"WarnVoid\", 4, 46087)\nlocal warnDarkness\t\t\t= mod:NewSpellAnnounce(45996, 2)\nlocal warnPhase2\t\t\t= mod:NewPhaseAnnounce(2)\nlocal warnFiend\t\t\t\t= mod:NewAnnounce(\"WarnFiend\", 2, 46268)\nlocal warnBlackHole\t\t\t= mod:NewSpellAnnounce(46282, 3)\n\nlocal specWarnVoid\t\t\t= mod:NewSpecialWarning(\"specWarnVoid\")\nlocal specWarnBH\t\t\t= mod:NewSpecialWarning(\"specWarnBH\")\nlocal specWarnVW\t\t\t= mod:NewSpecialWarning(\"specWarnVW\", \"Tank\")\nlocal specWarnDarknessSoon\t= mod:NewSpecialWarning(\"specWarnDarknessSoon\", \"Melee|Tank\")\n\nlocal timerHuman\t\t\t= mod:NewTimer(60, \"TimerHuman\", 27778, nil, nil, 6)\nlocal timerVoid\t\t\t\t= mod:NewTimer(30, \"TimerVoid\", 46087, nil, nil, 6)\nlocal timerNextDarkness\t\t= mod:NewNextTimer(45, 45996, nil, nil, nil, 2)\nlocal timerDarknessDura\t\t= mod:NewBuffActiveTimer(20, 45996)\nlocal timerBlackHoleCD\t\t= mod:NewNextTimer(15, 46282) -- Fixed timer. SPELL_SUMMON: (Onyxia: 25m [2025-10-12]@[20:54:01] || [2025-10-12]@[21:01:39]) - \"Black Hole-46282-npc:25840-946 = pull:103.65/[Stage 1/0.00, Stage 2/91.58] 12.06/103.65, 15.03, 15.02\" || \"Black Hole-46282-npc:25840-1095 = pull:113.25/[Stage 1/0.00, Stage 2/101.24] 12.01/113.25, 15.04, 14.99, 15.00\"\nlocal timerPhase\t\t\t= mod:NewTimer(10, \"TimerPhase\", 46087, nil, nil, 6)\nlocal timerSingularity\t\t= mod:NewNextTimer(3.2, 46238)\n\nlocal berserkTimer\t\t\t= mod:NewBerserkTimer(mod:IsTimewalking() and 450 or 600)\n\nmod.vb.humanCount = 1\nmod.vb.voidCount = 1\n\nlocal function HumanSpawn(self)\n\twarnHuman:Show(self.vb.humanCount)\n\tself.vb.humanCount = self.vb.humanCount + 1\n\ttimerHuman:Start(nil, self.vb.humanCount)\n\tself:Schedule(60, HumanSpawn, self)\nend\n\nlocal function VoidSpawn(self)\n\twarnVoid:Show(self.vb.voidCount)\n\tself.vb.voidCount = self.vb.voidCount + 1\n\ttimerVoid:Start(nil, self.vb.voidCount)\n\tspecWarnVW:Schedule(25)\n\tself:Schedule(30, VoidSpawn, self)\nend\n\nlocal function phase2(self)\n\tself:SetStage(2)\n\twarnPhase2:Show()\n\tself:Unschedule(HumanSpawn)\n\tself:Unschedule(VoidSpawn)\n\ttimerBlackHoleCD:Start(12)\n\tif self.Options.HealthFrame then\n\t\tDBM.BossHealth:Clear()\n\t\tDBM.BossHealth:AddBoss(25840, L.Entropius)\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tself.vb.humanCount = 1\n\tself.vb.voidCount = 1\n\ttimerHuman:Start(15-delay, 1)\n\ttimerVoid:Start(36.5-delay, 1)\n\tspecWarnVW:Schedule(31.5-delay)\n\ttimerNextDarkness:Start(48-delay)\n\tspecWarnDarknessSoon:Schedule(45-delay)\n\tself:Schedule(15-delay, HumanSpawn, self)\n\tself:Schedule(36.5-delay, VoidSpawn, self)\n\tberserkTimer:Start(-delay)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 45996 and args:GetDestCreatureID() == 25741 then\n\t\twarnDarkness:Show()\n\t\tspecWarnVoid:Show()\n\t\ttimerNextDarkness:Start()\n\t\ttimerDarknessDura:Start()\n\t\tspecWarnDarknessSoon:Schedule(40)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 46177 then\n\t\ttimerNextDarkness:Cancel()\n\t\ttimerHuman:Cancel()\n\t\ttimerVoid:Cancel()\n\t\tspecWarnVW:Cancel()\n\t\ttimerPhase:Start()\n\t\tspecWarnDarknessSoon:Cancel()\n\t\tself:Schedule(10, phase2, self)\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 46268 then\n\t\twarnFiend:Show()\n\telseif args.spellId == 46282 then\n\t\twarnBlackHole:Show()\n\t\tspecWarnBH:Show()\n\t\ttimerBlackHoleCD:Start()\n\t\ttimerSingularity:Start()\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tif self:GetCIDFromGUID(args.destGUID) == 25840 then\n\t\tDBM:EndCombat(self)\n\tend\nend\n"
  },
  {
    "path": "DBM-Sunwell/localization.cn.lua",
    "content": "if GetLocale() ~= \"zhCN\" then return end\nlocal L\n\n---------------\n--  Kalecgos --\n---------------\nL = DBM:GetModLocalization(\"Kal\")\n\nL:SetGeneralLocalization({\n\tname = \"卡雷苟斯\"\n})\n\nL:SetWarningLocalization({\n\tWarnPortal\t\t\t= \"传送 #%d : >%s< (%d组)\",\n\tSpecWarnWildMagic\t= \"狂野魔法 - %s!\"\n})\n\nL:SetOptionLocalization({\n\tWarnPortal\t\t\t= \"Show warning for $spell:46021 target\",--Translate\n\tSpecWarnWildMagic\t= \"Show special warning for Wild Magic\",--Translate\n\tShowRespawn\t\t\t= \"Boss战斗未完成时显示Boss刷新计时条\",\n\tShowFrame\t\t\t= \"Show Spectral Realm frame\" ,--Translate\n\tFrameClassColor\t\t= \"Use class colors in Spectral Realm frame\",--Translate\n\tFrameUpwards\t\t= \"Expand Spectral Realm frame upwards\",--Translate\n\tFrameLocked\t\t\t= \"Set Spectral Realm frame not movable\"--Translate\n})\n\nL:SetMiscLocalization({\n\tDemon\t\t\t\t= \"腐蚀者萨索瓦尔\",\n\tHeal\t\t\t\t= \"+100%治疗效果\",\n\tHaste\t\t\t\t= \"+100%施法时间\",\n\tHit\t\t\t\t\t= \"-50%命中几率\",\n\tCrit\t\t\t\t= \"+100%爆击伤害\",\n\tAggro\t\t\t\t= \"+100%威胁值\",\n\tMana\t\t\t\t= \"-50%技能消耗\",\n\tFrameTitle\t\t\t= \"首领生命值\",\n\tFrameLock\t\t\t= \"锁定框体\",\n\tFrameClassColor\t\t= \"使用职业颜色\",\n\tFrameOrientation\t= \"灵魂世界框体向上延伸\",\n\tFrameHide\t\t\t= \"隐藏框体\",\n\tFrameClose\t\t\t= \"Close\", --Translate\n\tFrameGUIMoveMe\t\t= \"移动我\"\n})\n\n----------------\n--  Brutallus --\n----------------\nL = DBM:GetModLocalization(\"Brutallus\")\n\nL:SetGeneralLocalization({\n\tname = \"布鲁塔卢斯\"\n})\n\nL:SetOptionLocalization({\n\tRangeFrameActivation= \"範圍框架激活\",\n\tAlwaysOn\t\t\t= \"在遭遇開始時。忽略過濾器\",\n\tOnDebuff\t\t\t= \"開啟減益。應用減益過濾器\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"啊，又来了一群小绵羊！\"\n})\n\n--------------\n--  Felmyst --\n--------------\nL = DBM:GetModLocalization(\"Felmyst\")\n\nL:SetGeneralLocalization({\n\tname = \"菲米丝\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%s阶段\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"%s阶段\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"显示下一阶段的警告\",\n\tTimerPhase\t\t= \"显示下一阶段的计时器\"\n})\n\nL:SetMiscLocalization({\n\tAir\t\t\t\t= \"空中\",\n\tGround\t\t\t= \"地面\",\n\tAirPhase\t\t= \"我比以前更强大了！\",\n\tBreath\t\t\t= \"%s深深地吸了一口气。\"\n})\n\n-----------------------\n--  The Eredar Twins --\n-----------------------\nL = DBM:GetModLocalization(\"Twins\")\n\nL:SetGeneralLocalization({\n\tname = \"艾瑞达双子\"\n})\n\nL:SetMiscLocalization({\n\tNovaWhisper\t\t= \"暗影新星！\",\n\tConflagWhisper\t= \"燃烧！\",\n\tNova\t\t\t= \"萨洛拉丝向([^%s]+)施放暗影新星。\",--Verify\n\tConflag\t\t\t= \"奥蕾塞丝向([^%s]+)施放燃烧。\"--Verify\n})\n\n------------\n--  M'uru --\n------------\nL = DBM:GetModLocalization(\"Muru\")\n\nL:SetGeneralLocalization({\n\tname = \"穆鲁\"\n})\n\nL:SetWarningLocalization({\n\tWarnHuman\t\t= \"暗誓精灵 (%d)\",\n\tWarnHumanSoon\t= \"暗誓精灵 - 5秒后出现 (%d)\",\n\tWarnVoid\t\t= \"虚空戒卫 (%d)\",\n\tWarnVoidSoon\t= \"虚空戒卫 - 5秒后出现 (%d)\",\n\tWarnFiend\t\t= \"黑暗魔出现\"\n})\n\nL:SetTimerLocalization({\n\tTimerHuman\t\t= \"暗誓精灵 (%s)\",\n\tTimerVoid\t\t= \"虚空戒卫 (%s)\",\n\tTimerPhase\t\t= \"熵魔\"\n})\n\nL:SetOptionLocalization({\n\tWarnHuman\t\t= \"Show warning for Humanoids\",--Translate\n\tWarnHumanSoon\t= \"Show pre-warning for Humanoids\",--Translate\n\tWarnVoid\t\t= \"Show warning for Void Sentinels\",--Translate\n\tWarnVoidSoon\t= \"Show pre-warning for Void Sentinels\",--Translate\n\tWarnFiend\t\t= \"Show warning for Fiends in phase 2\",--Translate\n\tTimerHuman\t\t= \"Show timer for Humanoids\",--Translate\n\tTimerVoid\t\t= \"Show timer for Void Sentinels\",--Translate\n\tTimerPhase\t\t= \"Show time for Phase 2 transition\"--Translate\n})\n\nL:SetMiscLocalization({\n\tEntropius\t\t= \"熵魔\"\n})\n\n----------------\n--  Kil'jeden --\n----------------\nL = DBM:GetModLocalization(\"Kil\")\n\nL:SetGeneralLocalization({\n\tname = \"基尔加丹\"\n})\n\nL:SetWarningLocalization({\n\tWarnDarkOrb\t\t= \"Dark Orbs Spawned\",--Translate\n\tWarnBlueOrb\t\t= \"Dragon Orb activated\",--Translate\n\tSpecWarnDarkOrb\t= \"Dark Orbs Spawned!\",--Translate\n\tSpecWarnBlueOrb\t= \"Dragon Orbs Activated!\"--Translate\n})\n\nL:SetTimerLocalization({\n\tTimerBlueOrb\t= \"Dragon Orbs activate\"--Translate\n})\n\nL:SetOptionLocalization({\n\tWarnDarkOrb\t\t= \"Show warning for Dark Orbs\",--Translate\n\tWarnBlueOrb\t\t= \"Show warning for Dragon Orbs\",--Translate\n\tSpecWarnDarkOrb\t= \"Show special warning for Dark Orbs\",--Translate\n\tSpecWarnBlueOrb\t= \"Show special warning for Dragon Orbs\",--Translate\n\tTimerBlueOrb\t= \"Show timer form Dragon Orbs activate\"--Translate\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"这个消耗品已经没用了！不管它了！现在我已经做到了连萨格拉斯都没有做到的事情！我要彻底毁灭这个世界，真正成为燃烧军团的主宰者！末日已经到来啦！让这个世界就此支离破碎吧！\",\n\tOrbYell1\t\t= \"我会将我的力量导入宝珠中！准备好！\",\n\tOrbYell2\t\t= \"我又将能量灌入了另一颗宝珠！快去使用它！\",\n\tOrbYell3\t\t= \"又有一颗宝珠准备好了！快点行动！\",\n\tOrbYell4\t\t= \"这是我所能做的一切了！力量现在掌握在你们的手中！\"\n})\n"
  },
  {
    "path": "DBM-Sunwell/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n---------------\n--  Kalecgos --\n---------------\nL = DBM:GetModLocalization(\"Kal\")\n\nL:SetGeneralLocalization({\n\tname = \"Kalecgos\"\n})\n\nL:SetWarningLocalization({\n\tWarnPortal\t\t\t= \"Portal #%d : >%s< (Gruppe %d)\",\n\tSpecWarnWildMagic\t= \"Wilde Magie - %s!\"\n})\n\nL:SetOptionLocalization({\n\tWarnPortal\t\t\t= \"Zeige Warnung für Ziel von $spell:46021\",\n\tSpecWarnWildMagic\t= \"Spezialwarnung für Wilde Magie\",\n\tShowRespawn\t\t\t= \"Zeige Zeit bis zum Wiedererscheinen des Bosses nach einer Niederlage\",\n\tShowFrame\t\t\t= \"Zeige Spektralreichfenster\",\n\tFrameClassColor\t\t= \"Benutze Klassenfarben in Spektralreichfenster\",\n\tFrameUpwards\t\t= \"Erweitere Spektralreichfenster nach oben\",\n\tFrameLocked\t\t\t= \"Setze Spektralreichfenster auf gesperrt (nicht verschiebbar)\"\n})\n\nL:SetMiscLocalization({\n\tDemon\t\t\t\t= \"Sathrovarr der Verderber\",\n\tHeal\t\t\t\t= \"Heilung +100%\",\n\tHaste\t\t\t\t= \"Zauberzeit +100%\",\n\tHit\t\t\t\t\t= \"Trefferchance Nah-/Fernkampf -50%\",\n\tCrit\t\t\t\t= \"Kritischer Schaden +100%\",\n\tAggro\t\t\t\t= \"BEDROHUNG +100%\",\n\tMana\t\t\t\t= \"Zauber-/Fähigkeitskosten -50%\",\n\tFrameTitle\t\t\t= \"Spektralreich\",\n\tFrameLock\t\t\t= \"Sperre Fenster\",\n\tFrameClassColor\t\t= \"Benutze Klassenfarben\",\n\tFrameOrientation\t= \"Erweitere nach oben\",\n\tFrameHide\t\t\t= \"Verberge Fenster\",\n\tFrameClose\t\t\t= \"Schließen\",\n\tFrameGUIMoveMe\t\t= \"Positionieren\"\n})\n\n----------------\n--  Brutallus --\n----------------\nL = DBM:GetModLocalization(\"Brutallus\")\n\nL:SetGeneralLocalization({\n\tname = \"Brutallus\"\n})\n\nL:SetOptionLocalization({\n\tRangeFrameActivation= \"Range-Frame-Aktivierung\",\n\tAlwaysOn\t\t\t= \"Beim Start der Begegnung. Ignoriert den Filter\",\n\tOnDebuff\t\t\t= \"Ein Debuff. Wendet Debuff-Filter an\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"Ah, mehr Lämmer zum Schlachten!\",\n})\n\n--------------\n--  Felmyst --\n--------------\nL = DBM:GetModLocalization(\"Felmyst\")\n\nL:SetGeneralLocalization({\n\tname = \"Teufelsruch\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%sphase\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"Nächste %sphase\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"Zeige Warnung für nächste Phase\",\n\tTimerPhase\t\t= \"Zeige Zeit bis nächste Phase\"\n})\n\nL:SetMiscLocalization({\n\tAir\t\t\t\t= \"Luft\",\n\tGround\t\t\t= \"Boden\",\n\tAirPhase\t\t= \"Ich bin stärker als je zuvor!\",\n\tBreath\t\t\t= \"%s holt tief Luft.\"\n})\n\n-----------------------\n--  The Eredar Twins --\n-----------------------\nL = DBM:GetModLocalization(\"Twins\")\n\nL:SetGeneralLocalization({\n\tname = \"Eredarzwillinge\"\n})\n\nL:SetMiscLocalization({\n\tNova\t\t\t= \"Sacrolash zielt mit Schattennova auf (.+)%.\",\n\tConflag\t\t\t= \"Alythess zielt mit Großbrand auf (.+)%.\",\n\tSacrolash\t\t= \"Lady Sacrolash\",\n\tAlythess\t\t= \"Großhexenmeisterin Alythess\"\n})\n\n------------\n--  M'uru --\n------------\nL = DBM:GetModLocalization(\"Muru\")\n\nL:SetGeneralLocalization({\n\tname = \"M'uru\"\n})\n\nL:SetWarningLocalization({\n\tWarnHuman\t\t= \"Humanoide (%d)\",\n\tWarnVoid\t\t= \"Leerenschildwache (%d)\",\n\tWarnFiend\t\t= \"Finstere Scheusale erschienen\"\n})\n\nL:SetTimerLocalization({\n\tTimerHuman\t\t= \"Nächste Humanoide (%s)\",\n\tTimerVoid\t\t= \"Nächste Leerenschildwache (%s)\",\n\tTimerPhase\t\t= \"Entropius\"\n})\n\nL:SetOptionLocalization({\n\tWarnHuman\t\t= \"Zeige Warnung für Humanoide\",\n\tWarnVoid\t\t= \"Zeige Warnung für Leerenschildwache\",\n\tWarnFiend\t\t= \"Zeige Warnung für Finstere Scheusale in Phase 2\",\n\tTimerHuman\t\t= \"Zeige Zeit bis Humanoide erscheinen\",\n\tTimerVoid\t\t= \"Zeige Zeit bis Leerenschildwache erscheint\",\n\tTimerPhase\t\t= \"Dauer des Übergangs in Phase 2 anzeigen\"\n})\n\nL:SetMiscLocalization({\n\tEntropius\t\t= \"Entropius\"\n})\n\n----------------\n--  Kil'jeden --\n----------------\nL = DBM:GetModLocalization(\"Kil\")\n\nL:SetGeneralLocalization({\n\tname = \"Kil'jaeden\"\n})\n\nL:SetWarningLocalization({\n\tWarnDarkOrb\t\t= \"Schildkugeln erschienen\",\n\tWarnBlueOrb\t\t= \"Drachenkugel bereit\",\n\tSpecWarnDarkOrb\t= \"Schildkugeln erschienen!\",\n\tSpecWarnBlueOrb\t= \"Drachenkugel bereit!\"\n})\n\nL:SetTimerLocalization({\n\tTimerBlueOrb\t= \"Drachenkugelaktivierung\"\n})\n\nL:SetOptionLocalization({\n\tWarnDarkOrb\t\t= \"Zeige Warnung für Schildkugeln\",\n\tWarnBlueOrb\t\t= \"Zeige Warnung für Drachenkugeln\",\n\tSpecWarnDarkOrb\t= \"Spezialwarnung für Schildkugeln\",\n\tSpecWarnBlueOrb\t= \"Spezialwarnung für Drachenkugeln\",\n\tTimerBlueOrb\t= \"Zeige Zeit bis Drachenkugeln bereit sind\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"Die Entbehrlichen sind dahin - so sei es! Jetzt werde ich dort erfolgreich sein, wo Sargeras versagt hat! Ich werde diese jämmerliche Welt ausbluten lassen und meinen Platz als wahrer Meister der Brennenden Legion einnehmen! Das Ende ist gekommen! Lasst uns diese Welt dem Erdboden gleichmachen!\",\n\tOrbYell1\t\t= \"Ich werde die Kugeln mit meiner Macht erfüllen! Seid bereit!\",\n\tOrbYell2\t\t= \"Eine weitere Kugel ist von meiner Macht erfüllt! Benutzt sie, schnell!\",\n\tOrbYell3\t\t= \"Eine weitere Kugel ist bereit! Sputet Euch!\",\n\tOrbYell4\t\t= \"Ich habe getan, was ich konnte! Die Macht liegt in Euren Händen!\"\n})\n"
  },
  {
    "path": "DBM-Sunwell/localization.en.lua",
    "content": "local L\n\n---------------\n--  Kalecgos --\n---------------\nL = DBM:GetModLocalization(\"Kal\")\n\nL:SetGeneralLocalization({\n\tname = \"Kalecgos\"\n})\n\nL:SetWarningLocalization({\n\tWarnPortal\t\t\t= \"Portal #%d : >%s< (Group %d)\",\n\tSpecWarnWildMagic\t= \"Wild Magic - %s!\"\n})\n\nL:SetOptionLocalization({\n\tWarnPortal\t\t\t= \"Show warning for $spell:46021 target\",\n\tSpecWarnWildMagic\t= \"Show special warning for Wild Magic\",\n\tShowRespawn\t\t\t= \"Show boss respawn timer after a wipe\",\n\tShowFrame\t\t\t= \"Show Spectral Realm frame\" ,\n\tFrameClassColor\t\t= \"Use class colors in Spectral Realm frame\",\n\tFrameUpwards\t\t= \"Expand Spectral Realm frame upwards\",\n\tFrameLocked\t\t\t= \"Set Spectral Realm frame not movable\"\n})\n\nL:SetMiscLocalization({\n\tDemon\t\t\t\t= \"Sathrovarr the Corruptor\",\n\tHeal\t\t\t\t= \"Healing + 100%\",\n\tHaste\t\t\t\t= \"Spell Haste + 100%\",\n\tHit\t\t\t\t\t= \"Melee Hit - 50%\",\n\tCrit\t\t\t\t= \"Crit Damage + 100%\",\n\tAggro\t\t\t\t= \"AGGRO + 100%\",\n\tMana\t\t\t\t= \"Cost Reduce 50%\",\n\tFrameTitle\t\t\t= \"Spectral Realm\",\n\tFrameLock\t\t\t= \"Frame Lock\",\n\tFrameClassColor\t\t= \"Use Class Colors\",\n\tFrameOrientation\t= \"Expand upwards\",\n\tFrameHide\t\t\t= \"Hide Frame\",\n\tFrameClose\t\t\t= \"Close\",\n\tFrameGUIMoveMe\t\t= \"Move me\"\n})\n\n----------------\n--  Brutallus --\n----------------\nL = DBM:GetModLocalization(\"Brutallus\")\n\nL:SetGeneralLocalization({\n\tname = \"Brutallus\"\n})\n\nL:SetOptionLocalization({\n\tRangeFrameActivation= \"Range frame activation\",\n\tAlwaysOn\t\t\t= \"On encounter start. Ignores filter\",\n\tOnDebuff\t\t\t= \"On debuff. Applies debuff filter\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"Ah, more lambs to the slaughter!\"\n})\n\n--------------\n--  Felmyst --\n--------------\nL = DBM:GetModLocalization(\"Felmyst\")\n\nL:SetGeneralLocalization({\n\tname = \"Felmyst\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%s Phase\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"Next %s Phase\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"Show warning for next phase\",\n\tTimerPhase\t\t= \"Show time for next phase\"\n})\n\nL:SetMiscLocalization({\n\tAir\t\t\t\t= \"Air\",\n\tGround\t\t\t= \"Ground\",\n\tAirPhase\t\t= \"I am stronger than ever before!\",\n\tBreath\t\t\t= \"%s takes a deep breath.\"\n})\n\n-----------------------\n--  The Eredar Twins --\n-----------------------\nL = DBM:GetModLocalization(\"Twins\")\n\nL:SetGeneralLocalization({\n\tname = \"Eredar Twins\"\n})\n\nL:SetMiscLocalization({\n\tNova\t\t\t= \"directs Shadow Nova at (.+)%.\",\n\tConflag\t\t\t= \"directs Conflagration at (.+)%.\",\n\tSacrolash\t\t= \"Lady Sacrolash\",\n\tAlythess\t\t= \"Grand Warlock Alythess\"\n})\n\n------------\n--  M'uru --\n------------\nL = DBM:GetModLocalization(\"Muru\")\n\nL:SetGeneralLocalization({\n\tname = \"M'uru\"\n})\n\nL:SetWarningLocalization({\n\tWarnHuman\t\t= \"Humanoids (%d)\",\n\tWarnVoid\t\t= \"Void Sentinel (%d)\",\n\tWarnFiend\t\t= \"Dark Fiend spawned\",\n\tspecWarnVoid\t= \"Darkness - Scatter skulls!\",\n\tspecWarnBH\t\t= \"Black Hole - Scatter skulls!\",\n\tspecWarnVW\t\t= \"Void Sentinels in 5\",\n\tspecWarnDarknessSoon = \"Darkness soon\"\n})\n\nL:SetTimerLocalization({\n\tTimerHuman\t\t= \"Next Humanoids (%s)\",\n\tTimerVoid\t\t= \"Next Void (%s)\",\n\tTimerPhase\t\t= \"Entropius\"\n})\n\nL:SetOptionLocalization({\n\tWarnHuman\t\t= \"Show warning for Humanoids\",\n\tWarnVoid\t\t= \"Show warning for Void Sentinels\",\n\tWarnFiend\t\t= \"Show warning for Fiends in phase 2\",\n\tspecWarnVoid\t= \"Show special warning for Gloom (scatter)\",\n\tspecWarnBH\t\t= \"Show special warning for black hole (scatter)\",\n\tspecWarnVW\t\t= \"Show special warning for Void Sentinel\",\n\tspecWarnDarknessSoon = \"Show special warning before Darkness\",\n\tTimerHuman\t\t= \"Show timer for Humanoids\",\n\tTimerVoid\t\t= \"Show timer for Void Sentinels\",\n\tTimerPhase\t\t= \"Show timer for Phase 2 transition\"\n})\n\nL:SetMiscLocalization({\n\tEntropius\t\t= \"Entropius\"\n})\n\n----------------\n--  Kil'jeden --\n----------------\nL = DBM:GetModLocalization(\"Kil\")\n\nL:SetGeneralLocalization({\n\tname = \"Kil'jaeden\"\n})\n\nL:SetWarningLocalization({\n\tWarnDarkOrb\t\t= \"Dark Orbs Spawned\",\n\tWarnBlueOrb\t\t= \"Dragon Orb activated\",\n\tSpecWarnDarkOrb\t= \"Dark Orbs Spawned!\",\n\tSpecWarnBlueOrb\t= \"Dragon Orbs Activated!\"\n})\n\nL:SetTimerLocalization({\n\tTimerBlueOrb\t= \"Dragon Orbs activate\"\n})\n\nL:SetOptionLocalization({\n\tWarnDarkOrb\t\t= \"Show warning for Dark Orbs\",\n\tWarnBlueOrb\t\t= \"Show warning for Dragon Orbs\",\n\tSpecWarnDarkOrb\t= \"Show special warning for Dark Orbs\",\n\tSpecWarnBlueOrb\t= \"Show special warning for Dragon Orbs\",\n\tTimerBlueOrb\t= \"Show timer form Dragon Orbs activate\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"The expendable have perished. So be it! Now I shall succeed where Sargeras could not! I will bleed this wretched world and secure my place as the true master of the Burning Legion! The end has come! Let the unravelling of this world commence!\",\n\tOrbYell1\t\t= \"I will channel my powers into the orbs! Be ready!\",\n\tOrbYell2\t\t= \"I have empowered another orb! Use it quickly!\",\n\tOrbYell3\t\t= \"Another orb is ready! Make haste!\",\n\tOrbYell4\t\t= \"I have channeled all I can! The power is in your hands!\"\n})\n"
  },
  {
    "path": "DBM-Sunwell/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\nlocal L\n\n---------------\n--  Kalecgos --\n---------------\nL = DBM:GetModLocalization(\"Kal\")\n\nL:SetGeneralLocalization({\n\tname = \"Kalecgos\"\n})\n\nL:SetWarningLocalization({\n\tWarnPortal\t\t\t= \"Portal %d: >%s< (grupo %d)\",\n\tSpecWarnWildMagic\t= \"¡Magia salvaje - %s!\"\n})\n\nL:SetOptionLocalization({\n\tWarnPortal\t\t\t= \"Anunciar objetivo de $spell:46021\",\n\tSpecWarnWildMagic\t= \"Mostrar aviso especial para Magia salvaje\",\n\tShowRespawn\t\t\t= \"Mostrar temporizador para la reaparición de jefe tras cada derrota\",\n\tShowFrame\t\t\t= \"Mostrar marco del reino espectral\" ,\n\tFrameClassColor\t\t= \"Usar colores de clase en el marco del reino espectral\",\n\tFrameUpwards\t\t= \"Expandir marco del reino espectral hacia arriba\",\n\tFrameLocked\t\t\t= \"Bloquear marco del reino espectral\"\n})\n\nL:SetMiscLocalization({\n\tDemon\t\t\t\t= \"Sathrovarr el Corruptor\",\n\tHeal\t\t\t\t= \"Sanación realizada +100%\",\n\tHaste\t\t\t\t= \"Celeridad con hechizos +100%\",\n\tHit\t\t\t\t\t= \"Golpe -50%\",\n\tCrit\t\t\t\t= \"Daño crítico +100%\",\n\tAggro\t\t\t\t= \"Generación de amenaza +100%\",\n\tMana\t\t\t\t= \"Costes -50%\",\n\tFrameTitle\t\t\t= \"Reino espectral\",\n\tFrameLock\t\t\t= \"Bloquear marco\",\n\tFrameClassColor\t\t= \"Usar colores de clase\",\n\tFrameOrientation\t= \"Expandir hacia arriba\",\n\tFrameHide\t\t\t= \"Ocultar marco\",\n\tFrameClose\t\t\t= \"Cerrar\",\n\tFrameGUIMoveMe\t\t= \"Posición\"\n})\n\n----------------\n--  Brutallus --\n----------------\nL = DBM:GetModLocalization(\"Brutallus\")\n\nL:SetGeneralLocalization({\n\tname = \"Brutallus\"\n})\n\nL:SetOptionLocalization({\n\tRangeFrameActivation= \"Activación del marco de rango\",\n\tAlwaysOn\t\t\t= \"Al inicio del encuentro. Ignora el filtro\",\n\tOnDebuff\t\t\t= \"En debuff. Aplica filtro de debuff\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"¡Ah, más corderos al matadero!\"\n})\n\n--------------\n--  Felmyst --\n--------------\nL = DBM:GetModLocalization(\"Felmyst\")\n\nL:SetGeneralLocalization({\n\tname = \"Brumavil\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"Fase %s\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"Siguiente fase %s\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"Anunciar cambios de fase\",\n\tTimerPhase\t\t= \"Mostrar temporizador para los cambios de fase\"\n})\n\nL:SetMiscLocalization({\n\tAir\t\t\t\t= \"aérea\",\n\tGround\t\t\t= \"en tierra\",\n\tAirPhase\t\t= \"¡Soy más fuerte que nunca!\",\n\tBreath\t\t\t= \"%s respira hondo.\"\n})\n\n-----------------------\n--  The Eredar Twins --\n-----------------------\nL = DBM:GetModLocalization(\"Twins\")\n\nL:SetGeneralLocalization({\n\tname = \"Las gemelas eredar\"\n})\n\nL:SetMiscLocalization({\n\tNova\t\t\t= \"dirige Nova de las Sombras hacia (.+)%.\",\n\tConflag\t\t\t= \"dirige Conflagración hacia (.+)%.\",\n\tSacrolash\t\t= \"Lady Sacrolash\",\n\tAlythess\t\t= \"Bruja suprema Alythess\"\n})\n\n------------\n--  M'uru --\n------------\nL = DBM:GetModLocalization(\"Muru\")\n\nL:SetGeneralLocalization({\n\tname = \"M'uru\"\n})\n\nL:SetWarningLocalization({\n\tWarnHuman\t\t= \"Humanoides (%d)\",\n\tWarnVoid\t\t= \"Centinela del vacío (%d)\",\n\tWarnFiend\t\t= \"Maligno oscuro\"\n})\n\nL:SetTimerLocalization({\n\tTimerHuman\t\t= \"Siguientes humanoides (%s)\",\n\tTimerVoid\t\t= \"Siguiente centinela (%s)\",\n\tTimerPhase\t\t= \"Entropius\"\n})\n\nL:SetOptionLocalization({\n\tWarnHuman\t\t= \"Mostrar aviso cuando aparezcan humanoides\",\n\tWarnVoid\t\t= \"Mostrar aviso cuando aparezca un Centinela del vacío\",\n\tWarnFiend\t\t= \"Mostrar aviso cuando aparezcan Malignos oscuros en Fase 2\",\n\tTimerHuman\t\t= \"Mostrar temporizador para los siguientes humanoides\",\n\tTimerVoid\t\t= \"Mostrar temporizador para el siguiente Centinela del vacío\",\n\tTimerPhase\t\t= \"Mostrar temporizador para la transición a Fase 2\"\n})\n\nL:SetMiscLocalization({\n\tEntropius\t\t= \"Entropius\"\n})\n\n----------------\n--  Kil'jeden --\n----------------\nL = DBM:GetModLocalization(\"Kil\")\n\nL:SetGeneralLocalization({\n\tname = \"Kil'jaeden\"\n})\n\nL:SetWarningLocalization({\n\tWarnDarkOrb\t\t= \"Orbes escudo\",\n\tWarnBlueOrb\t\t= \"Orbe azul activado\",\n\tSpecWarnBlueOrb\t= \"¡Orbe azul activado!\",\n\tSpecWarnDarkOrb\t= \"¡Orbes escudo!\"\n})\n\nL:SetTimerLocalization({\n\tTimerBlueOrb\t= \"Orbe azules activo\"\n})\n\nL:SetOptionLocalization({\n\tWarnDarkOrb\t\t= \"Mostrar aviso cuando aparezcan Orbes escudo\",\n\tWarnBlueOrb\t\t= \"Mostrar aviso cuando se active un orbe azul\",\n\tSpecWarnDarkOrb\t= \"Mostrar aviso especial cuando aparezcan Orbes escudo\",\n\tSpecWarnBlueOrb\t= \"Mostrar aviso especial cuando se active un orbe azul\",\n\tTimerBlueOrb\t= \"Mostrar temporizador para la activación de los orbes azules\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"Los prescindibles han muerto. ¡Qué así sea! ¡Ahora triunfaré donde Sargeras no lo logró! ¡Desangraré este despreciable mundo y me aseguraré mi puesto como verdadero maestro de la Legión Ardiente! ¡El final ha llegado! ¡Dejad que se desvele el misterio de este mundo!\",\n\tOrbYell1\t\t= \"¡Canalizaré mi poder en los orbes! ¡Preparaos!\",\n\tOrbYell2\t\t= \"¡He otorgado mi poder a otro orbe! ¡Usadlo rápido!\",\n\tOrbYell3\t\t= \"¡Otro orbe preparado! ¡Daos prisa!\",\n\tOrbYell4\t\t= \"¡He canalizado todo lo que puedo! ¡El poder está en vuestras manos!\"\n})\n"
  },
  {
    "path": "DBM-Sunwell/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n---------------\n--  Kalecgos --\n---------------\nL = DBM:GetModLocalization(\"Kal\")\n\nL:SetGeneralLocalization({\n\tname = \"칼렉고스\"\n})\n\nL:SetWarningLocalization({\n\tWarnPortal\t\t\t= \"차원문 #%d : >%s< (%d 파티)\",\n\tSpecWarnWildMagic\t= \"마법 폭주 - %s!\"\n})\n\nL:SetOptionLocalization({\n\tWarnPortal\t\t\t= \"$spell:46021 대상 경고 보기\",\n\tSpecWarnWildMagic\t= \"마법 폭주 특수 경고 보기\",\n\tShowRespawn\t\t\t= \"전멸 후 보스 재생성 타이머 표시\",\n\tShowFrame\t\t\t= \"정신 세계 공대원 창 보기\" ,\n\tFrameClassColor\t\t= \"정신 세계 창에 직업 색상 사용\",\n\tFrameUpwards\t\t= \"정신 세계 창을 위쪽으로 확장\",\n\tFrameLocked\t\t\t= \"정신 세계 창 위치 고정\"\n})\n\nL:SetMiscLocalization({\n\tDemon\t\t\t\t= \"타락의 사스로바르\",\n\tHeal\t\t\t\t= \"치유량 + 100%\",\n\tHaste\t\t\t\t= \"가속 + 100%\",\n\tHit\t\t\t\t\t= \"근접 적중률 - 50%\",\n\tCrit\t\t\t\t= \"치명타 + 100%\",\n\tAggro\t\t\t\t= \"어그로 + 100%\",\n\tMana\t\t\t\t= \"마나 소비 - 50%\",\n\tFrameTitle\t\t\t= \"정신 세계\",\n\tFrameLock\t\t\t= \"창 위치 고정\",\n\tFrameClassColor\t\t= \"직업 색상 사용\",\n\tFrameOrientation\t= \"위로 확장\",\n\tFrameHide\t\t\t= \"창 숨김\",\n\tFrameClose\t\t\t= \"닫기\",\n\tFrameGUIMoveMe\t\t= \"위치 이동\"\n})\n\n----------------\n--  Brutallus --\n----------------\nL = DBM:GetModLocalization(\"Brutallus\")\n\nL:SetGeneralLocalization({\n\tname = \"브루탈루스\"\n})\n\nL:SetOptionLocalization({\n\tRangeFrameActivation= \"범위 프레임 활성화\",\n\tAlwaysOn\t\t\t= \"만남 시작 시. 필터 무시\",\n\tOnDebuff\t\t\t= \"디버프 시. 디버프 필터를 적용합니다.\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"하, 새끼 양이 잔뜩 몰려오는구나!\"\n})\n\n--------------\n--  Felmyst --\n--------------\nL = DBM:GetModLocalization(\"Felmyst\")\n\nL:SetGeneralLocalization({\n\tname = \"지옥안개\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%s 단계\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"다음 %s 단계\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"다음 단계 경고 보기\",\n\tTimerPhase\t\t= \"다음 단계 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tAir\t\t\t\t= \"비행\",\n\tGround\t\t\t= \"지상\",\n\tAirPhase\t\t= \"나는 어느 때보다도 강하다!\",\n\tBreath\t\t\t= \"숨을 깊게 들이마십니다.\"\n})\n\n-----------------------\n--  The Eredar Twins --\n-----------------------\nL = DBM:GetModLocalization(\"Twins\")\n\nL:SetGeneralLocalization({\n\tname = \"에레다르 쌍둥이\"\n})\n\nL:SetMiscLocalization({\n\tNova\t\t\t= \"방향을 돌려 암흑 회오리를\",\n\tConflag\t\t\t= \"방향을 돌려 거대한 불길을\",\n\tSacrolash\t\t= \"여군주 사크로래쉬\",\n\tAlythess\t\t= \"대흑마법사 알리테스\"\n})\n\n------------\n--  M'uru --\n------------\nL = DBM:GetModLocalization(\"Muru\")\n\nL:SetGeneralLocalization({\n\tname = \"므우루\"\n})\n\nL:SetWarningLocalization({\n\tWarnHuman\t\t= \"엘프 (%d)\",\n\tWarnVoid\t\t= \"공허의 파수병 (%d)\",\n\tWarnFiend\t\t= \"어둠 마귀 등장\"\n})\n\nL:SetTimerLocalization({\n\tTimerHuman\t\t= \"다음 엘프 (%s)\",\n\tTimerVoid\t\t= \"다음 보이드 (%s)\",\n\tTimerPhase\t\t= \"엔트로피우스\"\n})\n\nL:SetOptionLocalization({\n\tWarnHuman\t\t= \"엘프 경고 보기\",\n\tWarnVoid\t\t= \"공허의 파수병 경고 보기\",\n\tWarnFiend\t\t= \"2단계 마귀 경고 보기\",\n\tTimerHuman\t\t= \"엘프 타이머 바 보기\",\n\tTimerVoid\t\t= \"공허의 파수병 타이머 바 보기\",\n\tTimerPhase\t\t= \"2단계 전환 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tEntropius\t\t= \"엔트로피우스\"\n})\n\n----------------\n--  Kil'jeden --\n----------------\nL = DBM:GetModLocalization(\"Kil\")\n\nL:SetGeneralLocalization({\n\tname = \"킬제덴\"\n})\n\nL:SetWarningLocalization({\n\tWarnDarkOrb\t\t= \"보호의 구슬 등장\",\n\tWarnBlueOrb\t\t= \"푸른용의 수정구 활성화\",\n\tSpecWarnDarkOrb\t\t= \"보호의 구슬 등장!\",\n\tSpecWarnBlueOrb\t\t= \"푸른용의 수정구 활성화!\"\n})\n\nL:SetTimerLocalization({\n\tTimerBlueOrb\t= \"수정구 활성화\"\n})\n\nL:SetOptionLocalization({\n\tWarnDarkOrb\t\t= \"보호의 구슬 등장 알림 보기\",\n\tWarnBlueOrb\t\t= \"푸른용의 수정구 알림 보기\",\n\tSpecWarnDarkOrb\t= \"보호의 구슬 등장 특수 경고 보기\",\n\tSpecWarnBlueOrb\t= \"푸른용의 수정구 활성화 특수 경고 보기\",\n\tTimerBlueOrb\t= \"푸른용의 수정구 활성화 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"녀석들은 소모품일 뿐이다. 자, 봐라! 살게라스가 해내지 못한 일을 내가 해낼 것이다! 이 보잘것없는 세상을 갈가리 찢어발기고 불타는 군단의 진정한 주인으로 우뚝 서리라! 종말이 다가왔다! 어디 한번 세계를 구해 봐라!\",\n\tOrbYell1\t\t= \"수정구에 힘을 쏟겠습니다! 준비하세요!\",\n\tOrbYell2\t\t= \"다른 수정구에 힘을 불어넣었습니다! 어서요!\",\n\tOrbYell3\t\t= \"다른 수정구가 준비됐습니다! 서두르세요!\",\n\tOrbYell4\t\t= \"모든 힘을 수정구에 실었습니다! 이제 그대들의 몫입니다!\"\n})\n"
  },
  {
    "path": "DBM-Sunwell/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\nlocal L\n\n---------------\n--  Kalecgos --\n---------------\nL = DBM:GetModLocalization(\"Kal\")\n\nL:SetGeneralLocalization({\n\tname = \"Калесгос\"\n})\n\nL:SetWarningLocalization({\n\tWarnPortal\t\t\t= \"Портал #%d : >%s< (Группа %d)\",\n\tSpecWarnWildMagic\t= \"Дикая магия - %s!\"\n})\n\nL:SetOptionLocalization({\n\tWarnPortal\t\t\t= \"Показывать предупреждение для цели $spell:46021\",\n\tSpecWarnWildMagic\t= \"Показывать спец-предупреждение для Дикой Магии\",\n\tShowRespawn\t\t\t= \"Отсчет времени до появления босса после вайпа\",\n\tShowFrame\t\t\t= \"Показать фрейм Призрачного мира\",\n\tFrameClassColor\t\t= \"Использовать цвета классов в фрейме Призрачного мира\",\n\tFrameUpwards\t\t= \"Рост фрейма Призрачного мира ВВЕРХ\",\n\tFrameLocked\t\t\t= \"Зафиксировать фрейм Призрачного мира\"\n})\n\nL:SetMiscLocalization({\n\tDemon\t\t\t\t= \"Сатроварр Осквернитель\",\n\tHeal\t\t\t\t= \"+100% хила\",\n\tHaste\t\t\t\t= \"+100% касттайм\",\n\tHit\t\t\t\t\t= \"-50% меткости\",\n\tCrit\t\t\t\t= \"+100% крит урон\",\n\tAggro\t\t\t\t= \"+100% угрозы\",\n\tMana\t\t\t\t= \"-50% исп маны\",\n\tFrameTitle\t\t\t= \"Призрачный мир\",\n\tFrameLock\t\t\t= \"Закрепить рамку\",\n\tFrameClassColor\t\t= \"Использовать цвета классов\",\n\tFrameOrientation\t= \"Рост вверх\",\n\tFrameHide\t\t\t= \"Скрыть рамку\",\n\tFrameClose\t\t\t= \"Закрыть\",\n\tFrameGUIMoveMe\t\t= \"Передвинь меня\"\n})\n\n----------------\n--  Brutallus --\n----------------\nL = DBM:GetModLocalization(\"Brutallus\")\n\nL:SetGeneralLocalization({\n\tname = \"Бруталл\"\n})\n\nL:SetOptionLocalization({\n\tRangeFrameActivation= \"Активация рамки диапазона\",\n\tAlwaysOn\t\t\t= \"В начале встречи. Игнорирует фильтр\",\n\tOnDebuff\t\t\t= \"При дебаффе. Применяет фильтр дебаффа\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"Аа, новые овечки на заклание?\"\n})\n\n--------------\n--  Felmyst --\n--------------\nL = DBM:GetModLocalization(\"Felmyst\")\n\nL:SetGeneralLocalization({\n\tname = \"Пророк Скверны\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%s фаза\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"Следующая %s фаза\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"Показывать предупреждение для следующей фазы\",\n\tTimerPhase\t\t= \"Показывать таймер фаз\"\n})\n\nL:SetMiscLocalization({\n\tAir\t\t\t\t= \"воздушная\",\n\tGround\t\t\t= \"наземная\",\n\tAirPhase\t\t= \"Я сильнее, чем когда-либо прежде!\",\n\tBreath\t\t\t= \"%s глубоко вдыхает.\"\n})\n\n-----------------------\n--  The Eredar Twins --\n-----------------------\nL = DBM:GetModLocalization(\"Twins\")\n\nL:SetGeneralLocalization({\n\tname = \"Близнецы\"\n})\n\nL:SetMiscLocalization({\n\tNovaWhisper\t\t= \"Кольцо тьмы на тебе!\",\n\tConflagWhisper\t= \"Воспламенение на тебе!\",\n\tNova\t\t\t= \"заклинание Кольцо Тьмы на\",\n\tConflag\t\t\t= \"направляет \\\"Воспламенение\\\" на\",\n})\n\n------------\n--  M'uru --\n------------\nL = DBM:GetModLocalization(\"Muru\")\n\nL:SetGeneralLocalization({\n\tname = \"М'ууру\"\n})\n\nL:SetWarningLocalization({\n\tWarnHuman\t\t= \"Адды-гуманоиды (%d)\",\n\tWarnHumanSoon\t= \"Адды-гуманоиды in 5 sec (%d)\",\n\tWarnVoid\t\t= \"Часовой Бездны (%d)\",\n\tWarnVoidSoon\t= \"Часовой Бездны через 5 сек. (%d)\",\n\tWarnFiend\t\t= \"Появился череп - рассейте\",\n\tspecWarnVoid\t= \"Мрак - РАССЕЙТЕ ЧЕРЕПА!\",\n\tspecWarnBH\t\t= \"Черная дыра - РАССЕЙТЕ ЧЕРЕПА!\",\n\tspecWarnVW\t\t= \"Часовой Бездны через 5\",\n\tspecWarnDarknessSoon = \"Скоро Мрак\"\n})\n\nL:SetTimerLocalization({\n\tTimerHuman\t\t= \"Адды-гуманоиды (%s)\",\n\tTimerVoid\t\t= \"Часовой Бездны (%s)\",\n\tTimerPhase\t\t= \"Энтропий\"\n})\n\nL:SetOptionLocalization({\n\tWarnHuman\t\t= \"Показывать предупреждение для аддов-гуманоидов\",\n\tWarnHumanSoon\t= \"Предупреждать заранее(5 сек) об аддах-гуманоидах\",\n\tWarnVoid\t\t= \"Показывать предупреждение для Часовых Бездны\",\n\tWarnVoidSoon\t= \"Предупреждать заранее(5 сек) о Часовых Бездны\",\n\tWarnFiend\t\t= \"Показывать предупреждение для рассеивания черепов на 2 фазе\",\n\tspecWarnVoid\t= \"Показывать спец-предупреждение для Мрака(рассеивания)\",\n\tspecWarnBH\t\t= \"Показывать спец-предупреждение для черной дыры(рассеивания)\",\n\tspecWarnVW\t\t= \"Показывать спец-предупреждение перед Часовым Бездны\",\n\tspecWarnDarknessSoon = \"Показывать спец-предупреждение перед Мраком\",\n\tTimerHuman\t\t= \"Показывать таймер аддов-гуманоидов\",\n\tTimerVoid\t\t= \"Показывать таймер Часовых Бездны\",\n\tTimerPhase\t\t= \"Показывать таймер перехода во 2 фазу\"\n})\n\nL:SetMiscLocalization({\n\tEntropius\t\t= \"Энтропий\"\n})\n\n----------------\n--  Kil'jeden --\n----------------\nL = DBM:GetModLocalization(\"Kil\")\n\nL:SetGeneralLocalization({\n\tname = \"Кил'джеден\"\n})\n\nL:SetWarningLocalization({\n\tWarnDarkOrb\t\t= \"Появились темные сферы\",\n\tWarnBlueOrb\t\t= \"Активировалась сфера дракона\",\n\tSpecWarnDarkOrb\t= \"Темные сферы!\",\n\tSpecWarnBlueOrb\t= \"СФера Дракона активировалась!\"\n})\n\nL:SetTimerLocalization({\n\tTimerBlueOrb\t= \"Активация сферы дракона\",\n\tTimerDarkOrb\t= \"Темные сферы!\"\n})\n\nL:SetOptionLocalization({\n\tWarnDarkOrb\t\t= \"Показывать предупреждение для Темных Сфер\",\n\tWarnBlueOrb\t\t= \"Показывать предупреждение для активации Сфер Дракона\",\n\tSpecWarnDarkOrb\t= \"Спец-предупреждение для Темных Сфер\",\n\tSpecWarnBlueOrb\t= \"Спец-предупреждение для активации Сфер Дракона\",\n\tTimerBlueOrb\t= \"Показать таймер активации Сфер Дракона\",\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"Те, кем можно было пожертвовать, мертвы. Так тому и быть! Я добьюсь успеха там, где Саргерас потерпел поражение! Я заставлю этот жалкий мирок истекать кровью и навеки закреплю за собой место повелителя Пылающего Легиона! Пробил последний час этого мира!\",\n\tOrbYell1\t\t= \"Я наполню сферы своей энергией! Готовьтесь!\",\n\tOrbYell2\t\t= \"Я наполнил энергией еще одну сферу! Быстрее используйте ее!\",\n\tOrbYell3\t\t= \"Готова еще одна сфера! Торопитесь!\",\n\tOrbYell4\t\t= \"Я отдал все, что мог. Моя энергия в ваших руках!\"\n})\n"
  },
  {
    "path": "DBM-Sunwell/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n---------------\n--  Kalecgos --\n---------------\nL = DBM:GetModLocalization(\"Kal\")\n\nL:SetGeneralLocalization({\n\tname = \"卡雷苟斯\"\n})\n\nL:SetWarningLocalization({\n\tWarnPortal\t\t\t= \"第%s個傳送門:>%s<(第%d隊)\",\n\tSpecWarnWildMagic\t= \"野性魔法:%s\"\n})\n\nL:SetOptionLocalization({\n\tWarnPortal\t\t\t= \"為$spell:46021的目標顯示警告\",\n\tSpecWarnWildMagic\t= \"為野性魔法顯示特別警告\",\n\tShowRespawn\t\t\t= \"顯示下一次首領重生計時器\",\n\tShowFrame\t\t\t= \"顯示鬼靈國度框架\",\n\tFrameClassColor\t\t= \"在鬼靈國度框架使用職業顏色\",\n\tFrameUpwards\t\t= \"向上延伸鬼靈國度框架\",\n\tFrameLocked\t\t\t= \"鎖定鬼靈國度框架\"\n})\n\nL:SetMiscLocalization({\n\tDemon\t\t\t\t= \"『墮落者』塞斯諾瓦\",\n\tHeal\t\t\t\t= \"+100%治療\",\n\tHaste\t\t\t\t= \"+100%施法時間\",\n\tHit\t\t\t\t\t= \"-50%命中機率\",\n\tCrit\t\t\t\t= \"+100%爆擊傷害\",\n\tAggro\t\t\t\t= \"+100%仇恨值\",\n\tMana\t\t\t\t= \"-50%法術消耗\",\n\tFrameTitle\t\t\t= \"鬼靈國度\",\n\tFrameLock\t\t\t= \"鎖定框架\",\n\tFrameClassColor\t\t= \"使用職業顏色\",\n\tFrameOrientation\t= \"向上延伸\",\n\tFrameHide\t\t\t= \"隱藏框架\",\n\tFrameClose\t\t\t= \"關閉\",\n\tFrameGUIMoveMe\t\t= \"移動\"\n})\n\n----------------\n--  Brutallus --\n----------------\nL = DBM:GetModLocalization(\"Brutallus\")\n\nL:SetGeneralLocalization({\n\tname = \"布魯托魯斯\"\n})\n\nL:SetOptionLocalization({\n\tRangeFrameActivation= \"範圍框架激活\",\n\tAlwaysOn\t\t\t= \"在遭遇開始時。忽略過濾器\",\n\tOnDebuff\t\t\t= \"開啟減益。應用減益過濾器\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"啊，更多待宰的小羊們!\"\n})\n\n--------------\n--  Felmyst --\n--------------\nL = DBM:GetModLocalization(\"Felmyst\")\n\nL:SetGeneralLocalization({\n\tname = \"魔龍謎霧\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t= \"%s階段\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"下一次%s階段\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t= \"為下個階段顯示警告\",\n\tTimerPhase\t\t= \"為下個階段顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tAir\t\t\t\t= \"空中\",\n\tGround\t\t\t= \"地面\",\n\tAirPhase\t\t= \"我比以前更強大了!\",\n\tBreath\t\t\t= \"%s深深地吸了一口氣。\"\n})\n\n-----------------------\n--  The Eredar Twins --\n-----------------------\nL = DBM:GetModLocalization(\"Twins\")\n\nL:SetGeneralLocalization({\n\tname = \"埃雷達爾雙子\"\n})\n\nL:SetMiscLocalization({\n\tNova\t\t\t= \"莎珂蕾希對(.+)施放暗影新星。\",\n\tConflag\t\t\t= \"艾黎瑟絲對(.+)施放焚焰。\",\n\tSacrolash\t\t= \"莎珂蕾希女士\",\n\tAlythess\t\t= \"大術士艾黎瑟絲\"\n})\n\n------------\n--  M'uru --\n------------\nL = DBM:GetModLocalization(\"Muru\")\n\nL:SetGeneralLocalization({\n\tname = \"莫魯\"\n})\n\nL:SetWarningLocalization({\n\tWarnHuman\t\t= \"人型小兵 (%d)\",\n\tWarnVoid\t\t= \"虛無哨兵 (%d)\",\n\tWarnFiend\t\t= \"黑暗惡魔出現了\"\n})\n\nL:SetTimerLocalization({\n\tTimerHuman\t\t= \"人型小兵 (%s)\",\n\tTimerVoid\t\t= \"虛無哨兵 (%s)\",\n\tTimerPhase\t\t= \"安卓普斯\"\n})\n\nL:SetOptionLocalization({\n\tWarnHuman\t\t= \"為人型小兵顯示警告\",\n\tWarnVoid\t\t= \"為虛無哨兵顯示警告\",\n\tWarnFiend\t\t= \"為第二階段的黑暗惡魔顯示警告\",\n\tTimerHuman\t\t= \"為人型小兵顯示計時器\",\n\tTimerVoid\t\t= \"為虛無哨兵顯示計時器\",\n\tTimerPhase\t\t= \"為轉換第二階段顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tEntropius\t\t= \"安卓普斯\"\n})\n\n----------------\n--  Kil'jeden --\n----------------\nL = DBM:GetModLocalization(\"Kil\")\n\nL:SetGeneralLocalization({\n\tname = \"基爾加丹\"\n})\n\nL:SetWarningLocalization({\n\tWarnDarkOrb\t\t= \"盾之寶珠出現\",\n\tWarnBlueOrb\t\t= \"藍龍軍團寶珠啟用\",\n\tSpecWarnDarkOrb\t= \"盾之寶珠出現!\",\n\tSpecWarnBlueOrb\t= \"藍龍軍團寶珠啟用!\"\n})\n\nL:SetTimerLocalization({\n\tTimerBlueOrb\t= \"藍龍軍團寶珠活動\"\n})\n\nL:SetOptionLocalization({\n\tWarnDarkOrb\t\t= \"為盾之寶珠顯示警告\",\n\tWarnBlueOrb\t\t= \"為藍龍軍團寶珠顯示警告\",\n\tSpecWarnDarkOrb\t= \"為盾之寶珠顯示特別警告\",\n\tSpecWarnBlueOrb\t= \"為藍龍軍團寶珠顯示特別警告\",\n\tTimerBlueOrb\t= \"為藍龍軍團寶珠活動顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"該犧牲的都已經結束了，就任他們去吧!現在我將完成薩格拉斯都辦不到的事!我要搾乾這個悲慘的世界，並確保我成為燃燒軍團的真正主人!末日已經到來!讓這個世界開始毀滅吧!\",\n\tOrbYell1\t\t= \"我會將我的力量導入寶珠中!準備好!\",\n\tOrbYell2\t\t= \"我又將能量灌入了另一顆寶珠!快去使用它!\",\n\tOrbYell3\t\t= \"又有一顆寶珠準備好了!快點行動!\",\n\tOrbYell4\t\t= \"我已經引導出所有的力量了!力量現在掌握在你們的手裡!\"\n})\n"
  },
  {
    "path": "DBM-TheEye/Alar.lua",
    "content": "local mod\t= DBM:NewMod(\"Alar\", \"DBM-TheEye\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(19514)\nmod:SetEncounterID(730)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 34229 35383 35410\",\n\t\"SPELL_AURA_REMOVED 35410\",\n\t\"SPELL_HEAL 34342\"\n)\n\nlocal warnPhase2\t\t= mod:NewPhaseAnnounce(2, 2)\nlocal warnArmor\t\t\t= mod:NewTargetAnnounce(35410, 2)\nlocal warnMeteor\t\t= mod:NewSpellAnnounce(35181, 3)\n\nlocal specWarnQuill\t\t= mod:NewSpecialWarningDodge(34229, nil, nil, nil, 2, 2)\nlocal specWarnFire\t\t= mod:NewSpecialWarningMove(35383, nil, nil, nil, 1, 2)\nlocal specWarnArmor\t\t= mod:NewSpecialWarningTaunt(35410, nil, nil, nil, 1, 2)\n\nlocal timerQuill\t\t= mod:NewCastTimer(10, 34229, nil, nil, nil, 3)\nlocal timerMeteor\t\t= mod:NewCDTimer(52, 35181, nil, nil, nil, 2)\nlocal timerArmor\t\t= mod:NewTargetTimer(60, 35410, nil, \"Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerNextPlatform\t= mod:NewTimer(34, \"NextPlatform\", 40192, nil, nil, 6)--This has no spell trigger, the target scanning bosses target is still required if loop isn't accurate enough.\n\nlocal berserkTimer\t\t= mod:NewBerserkTimer(600)\n\nlocal buffetName = DBM:GetSpellInfo(34121)\nlocal UnitName = UnitName\nmod.vb.phase2Start = 0\nmod.vb.flying = false\n\n--Loop doesn't work do to varying travel time between platforms. We just need to do target scanning and start next platform timer when Al'ar reaches a platform and starts targeting player again\n--Still semi inaccurate. Sometimes Al'ar changes platforms 5-8 seconds early with no explanation. I have a feeling it's just tied to Al'ars behavior being buggy with one person.\n--I don't remember code being faulty when you actually had 4 people up there.\nlocal function Platform(self)--An attempt to avoid ugly target scanning, but i get feeling this won't be accurate enough.\n\ttimerNextPlatform:Start()\n\tself.vb.flying = false\nend\n\nlocal function Add(self)--An attempt to avoid ugly target scanning, but i get feeling this won't be accurate enough.\n\ttimerNextPlatform:Cancel()\n\ttimerNextPlatform:Start(7)\n\tself.vb.flying = true\n\tself:Schedule(7, Platform, self)\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:AntiSpam(30, 1)--Prevent it thinking add spawn on pull and messing up first platform timer\n\tself.vb.flying = false\n\tself:SetStage(1)\n\tself.vb.phase2Start = 0\n\ttimerNextPlatform:Start(35-delay)\n\tself:RegisterOnUpdateHandler(function(self)\n\t\tif self:IsInCombat() then\n\t\t\tlocal foundIt\n\t\t\tlocal target\n\t\t\tif UnitExists(\"boss1\") then\n\t\t\t\tfoundIt = true\n\t\t\t\ttarget = UnitName(\"boss1target\")\n\t\t\t\tif not target and UnitCastingInfo(\"boss1\") == buffetName then\n\t\t\t\t\ttarget = \"Dummy\"\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tfor uId in DBM:GetGroupMembers() do\n\t\t\t\t\tif self:GetUnitCreatureId(uId..\"target\") == 19514 then\n\t\t\t\t\t\tfoundIt = true\n\t\t\t\t\t\ttarget = UnitName(uId..\"targettarget\")\n\t\t\t\t\t\tif not target and UnitCastingInfo(uId..\"target\") == buffetName then\n\t\t\t\t\t\t\ttarget = \"Dummy\"\n\t\t\t\t\t\tend\n\t\t\t\t\t\tbreak\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\n\t\t\tif foundIt and not target and self.vb.phase == 1 and self:AntiSpam(30, 1) then--Al'ar is no longer targeting anything, which means he spawned an add and is moving platforms\n\t\t\t\tAdd(self)\n\t\t\t\t--Could also be quills though, which is why we can't really put in an actual add warning.\n\t\t\telseif not target and self.vb.phase == 2 and self:AntiSpam(30, 2) and (GetTime() - self.vb.phase2Start) > 25 then--No target in phase 2 means meteor\n\t\t\t\twarnMeteor:Show()\n\t\t\t\ttimerMeteor:Start()\n\t\t\telseif target and self.vb.flying then--Al'ar has reached a platform and is once again targeting aggro player\n\t\t\t\tPlatform(self)\n\t\t\tend\n\t\tend\n\tend, 0.25)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 34229 then\n\t\tspecWarnQuill:Show()\n\t\tspecWarnQuill:Play(\"findshelter\")\n\t\ttimerQuill:Start()\n\telseif args.spellId == 35383 and args:IsPlayer() and self:AntiSpam(3, 1) then\n\t\tspecWarnFire:Show()\n\t\tspecWarnFire:Play(\"runaway\")\n\telseif args.spellId == 35410 then\n\t\twarnArmor:Show(args.destName)\n\t\tif not args:IsPlayer() then\n\t\t\tspecWarnArmor:Show(args.destName)\n\t\t\tspecWarnArmor:Play(\"tauntboss\")\n\t\tend\n\t\ttimerArmor:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 35410 then\n\t\ttimerArmor:Cancel(args.destName)\n\tend\nend\n\n--Target scanning is more accurate for finding phase 2 well before the heal, HOWEVER, fails if soloing alar and you aren't targeting him.\nfunction mod:SPELL_HEAL(_, _, _, _, _, _, spellId)\n\tif spellId == 34342 then\n\t\tself.vb.phase2Start = GetTime()\n\t\tself:SetStage(2)\n\t\twarnPhase2:Show()\n\t\tberserkTimer:Start()\n\t\ttimerMeteor:Start(30)--This seems to vary slightly depending on where in room he shoots it.\n\t\ttimerNextPlatform:Cancel()\n\tend\nend\n\n--[[\nfunction mod:SPELL_DAMAGE(_, _, _, _, _, _, spellId)\n\tif (spellId == 35181 or spellId == 45680) and self:AntiSpam(30, 2) then\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n--]]\n"
  },
  {
    "path": "DBM-TheEye/DBM-TheEye.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0The Eye|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0El Ojo|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0폭풍우 요새|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Festung der Stürme|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0L'Œil|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0风暴要塞|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0風暴要塞|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Око|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMTheEye_AllSavedVars\n## SavedVariablesPerCharacter: DBMTheEye_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: BC\n## X-DBM-StatTypes: normal25\n## X-DBM-Mod-Name: Tempest Keep - The Eye\n## X-DBM-Mod-Name-esES: El Castillo de la Tempestad\n## X-DBM-Mod-Name-koKR: 폭풍우 요새\n## X-DBM-Mod-Name-deDE: Festung der Stürme\n## X-DBM-Mod-Name-frFR: Donjon de la tempête - L'Œil\n## X-DBM-Mod-Name-zhCN: 风暴要塞\n## X-DBM-Mod-Name-zhTW: 風暴要塞\n## X-DBM-Mod-Name-ruRU: Крепость Бурь - Око\n## X-DBM-Mod-MapID: 783\n## X-DBM-Mod-LoadZone: Tempest Keep\n## X-DBM-Mod-LoadZone-esES: El Castillo de la Tempestad\n## X-DBM-Mod-LoadZone-esMX: El Castillo de la Tempestad\n## X-DBM-Mod-LoadZone-koKR: 폭풍우 요새\n## X-DBM-Mod-LoadZone-deDE: Festung der Stürme\n## X-DBM-Mod-LoadZone-frFR: Donjon de la tempête\n## X-DBM-Mod-LoadZone-zhCN: 风暴要塞\n## X-DBM-Mod-LoadZone-zhTW: 風暴要塞\n## X-DBM-Mod-LoadZone-ruRU: Крепость Бурь\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.cn.lua\nlocalization.ru.lua\nlocalization.tw.lua\nlocalization.es.lua\nlocalization.kr.lua\n\nAlar.lua\nVoidReaver.lua\nSolarian.lua\nKaelThas.lua\n"
  },
  {
    "path": "DBM-TheEye/KaelThas.lua",
    "content": "local mod\t= DBM:NewMod(\"KaelThas\", \"DBM-TheEye\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(19622)\nmod:SetEncounterID(733)\n\n--mod:RegisterCombat(\"yell\", L.YellPull1, L.YellPull2)\nmod:RegisterCombat(\"combat\")\nmod:SetUsedIcons(1, 6, 7, 8)\n\nmod:RegisterEvents(\n\t\"SPELL_CAST_START 44863 36819 35941\",\n\t\"SPELL_AURA_APPLIED 37018 36797 37027 36815 35859\",\n\t\"SPELL_AURA_APPLIED_DOSE 35859\",\n\t\"SPELL_AURA_REMOVED 36815 36797 37027\",\n\t\"SPELL_CAST_SUCCESS 36723 36834 34341\",\n\t\"CHAT_MSG_MONSTER_EMOTE\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"UNIT_DIED\",\n\t\"UNIT_SPELLCAST_SUCCEEDED\"\n)\n\nlocal warnGaze\t\t\t= mod:NewAnnounce(\"WarnGaze\", 4, 39414)\nlocal warnFear\t\t\t= mod:NewCastAnnounce(44863, 3)\nlocal warnConflag\t\t= mod:NewTargetAnnounce(37018, 4, nil, false)\nlocal warnToy\t\t\t= mod:NewTargetAnnounce(37027, 2, nil, false)\nlocal warnPhase2\t\t= mod:NewPhaseAnnounce(2)\nlocal warnMobDead\t\t= mod:NewAnnounce(\"WarnMobDead\", 3, nil, false)\nlocal warnPhase3\t\t= mod:NewPhaseAnnounce(3)\nlocal warnPhase4\t\t= mod:NewPhaseAnnounce(4)\nlocal warnDisruption\t= mod:NewSpellAnnounce(36834, 3)\nlocal warnMC\t\t\t= mod:NewTargetNoFilterAnnounce(36797, 4)\nlocal warnPhoenix\t\t= mod:NewSpellAnnounce(36723, 2)\nlocal warnFlamestrike\t= mod:NewSpellAnnounce(36735, 4)\nlocal warnEgg\t\t\t= mod:NewAnnounce(\"WarnEgg\", 4, 36723)\nlocal warnPyro\t\t\t= mod:NewCastAnnounce(36819, 4)\nlocal warnPhase5\t\t= mod:NewPhaseAnnounce(5)\nlocal warnGravity\t\t= mod:NewSpellAnnounce(35966, 3)\n\nlocal specWarnGaze\t\t= mod:NewSpecialWarning(\"SpecWarnGaze\", nil, nil, nil, 4, 2)\nlocal specWarnToy\t\t= mod:NewSpecialWarningYou(37027, nil, nil, nil, 1, 2)\nlocal specWarnEgg\t\t= mod:NewSpecialWarning(\"SpecWarnEgg\", nil, nil, nil, 1, 2)\nlocal specWarnShield\t= mod:NewSpecialWarningSpell(36815)--No decent voice for this\nlocal specWarnPyro\t\t= mod:NewSpecialWarningInterrupt(36819, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnVapor\t\t= mod:NewSpecialWarningStack(35859, nil, 2, nil, nil, 1, 6)\n\nlocal timerPhase\t\t= mod:NewTimer(105, \"TimerPhase\", 28131, nil, nil, 6, nil, nil, 1, 4)\nlocal timerPhase1mob\t= mod:NewTimer(30, \"TimerPhase1mob\", 28131, nil, nil, 1, nil, nil, 1, 4)\nlocal timerNextGaze\t\t= mod:NewTimer(8.5, \"TimerNextGaze\", 39414, nil, nil, 3)\nlocal timerFearCD\t\t= mod:NewCDTimer(31, 39427, nil, nil, nil, 2)\nlocal timerToy\t\t\t= mod:NewTargetTimer(60, 37027, nil, false, nil, 3)\nlocal timerPhoenixCD\t= mod:NewCDTimer(45, 36723, nil, nil, nil, 1)\nlocal timerRebirth\t\t= mod:NewTimer(15, \"TimerRebirth\", 36723, nil, nil, 1)\nlocal timerShieldCD\t\t= mod:NewCDTimer(60, 36815, nil, nil, nil, 4)\nlocal timerGravityCD\t= mod:NewNextTimer(92, 35941, nil, nil, nil, 6)\nlocal timerGravity\t\t= mod:NewBuffActiveTimer(32, 35941, nil, nil, nil, 6)\nlocal timerMCCD\t\t\t= mod:NewCDTimer(60, 36797)\n\nmod:AddSetIconOption(\"MCIcon\", 36797, true, false, {8, 7, 6})\nmod:AddBoolOption(\"GazeIcon\", false)\n--mod:AddSetIconOption(\"GazeIcon\", 38280, false, false, {1})--Problem with no auto localized spellID to use\nmod:AddRangeFrameOption(10, 37018)\n\nmod.vb.mcIcon = 8\nlocal warnConflagTargets = {}\nlocal warnMCTargets = {}\n\nlocal function showConflag()\n\twarnConflag:Show(table.concat(warnConflagTargets, \"<, >\"))\n\ttable.wipe(warnConflagTargets)\nend\n\nlocal function MCFailsafe(self)\n\ttimerMCCD:Start(70)\n\tself:Schedule(70, MCFailsafe, self)\nend\n\nlocal function showMC(self)\n\twarnMC:Show(table.concat(warnMCTargets, \"<, >\"))\n\ttable.wipe(warnMCTargets)\n\tself.vb.mcIcon = 8\n\ttimerMCCD:Start()\nend\n\nlocal showShieldHealthBar, hideShieldHealthBar\ndo\n\tlocal frame = CreateFrame(\"Frame\") -- using a separate frame avoids the overhead of the DBM event handlers which are not meant to be used with frequently occuring events like all damage events...\n\tlocal shieldedMob\n\tlocal absorbRemaining = 0\n\tlocal maxAbsorb = 0\n\tlocal function getShieldHP()\n\t\treturn math.max(1, math.floor(absorbRemaining / maxAbsorb * 100))\n\tend\n\tframe:RegisterEvent(\"COMBAT_LOG_EVENT_UNFILTERED\")\n\tframe:SetScript(\"OnEvent\", function(self, _, _, subEvent, _, _, _, destGUID, _, _, ...)\n\t\tif shieldedMob == destGUID then\n\t\t\tlocal absorbed\n\t\t\tif subEvent == \"SWING_MISSED\" then\n\t\t\t\tabsorbed = select( 2, ... )\n\t\t\telseif subEvent == \"RANGE_MISSED\" or subEvent == \"SPELL_MISSED\" or subEvent == \"SPELL_PERIODIC_MISSED\" then\n\t\t\t\tabsorbed = select( 5, ... )\n\t\t\tend\n\t\t\tif absorbed then\n\t\t\t\tabsorbRemaining = absorbRemaining - absorbed\n\t\t\tend\n\t\tend\n\tend)\n\n\tfunction showShieldHealthBar(self, mob, shieldName, absorb)\n\t\tshieldedMob = mob\n\t\tabsorbRemaining = absorb\n\t\tmaxAbsorb = absorb\n\t\tDBM.BossHealth:RemoveBoss(getShieldHP)\n\t\tDBM.BossHealth:AddBoss(getShieldHP, shieldName)\n\t\tself:Schedule(15, hideShieldHealthBar)\n\tend\n\n\tfunction hideShieldHealthBar()\n\t\tDBM.BossHealth:RemoveBoss(getShieldHP)\n\tend\nend\n\nfunction mod:OnCombatStart()\n\ttable.wipe(warnConflagTargets)\n\ttable.wipe(warnMCTargets)\n\tself.vb.mcIcon = 8\n\tself:SetStage(1)\n\ttimerPhase1mob:Start(32, L.Thaladred)\n\tif self.Options.HealthFrame then\n\t\tDBM.BossHealth:Clear()\n\t\tDBM.BossHealth:Show(L.name)\n\t\tDBM.BossHealth:AddBoss(20064, L.Thaladred)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 37018 then\n\t\twarnConflagTargets[#warnConflagTargets + 1] = args.destName\n\t\tself:Unschedule(showConflag)\n\t\tself:Schedule(0.3, showConflag)\n\telseif spellId == 36797 then\n\t\twarnMCTargets[#warnMCTargets + 1] = args.destName\n\t\tself:Unschedule(showMC)\n\t\tif self.Options.MCIcon then\n\t\t\tself:SetIcon(args.destName, self.vb.mcIcon, 25)\n\t\tend\n\t\tself.vb.mcIcon = self.vb.mcIcon - 1\n\t\tif #warnMCTargets >= 3 then\n\t\t\tshowMC(self)\n\t\telse\n\t\t\tself:Schedule(0.3, showMC, self)\n\t\tend\n\telseif spellId == 37027 then\n\t\ttimerToy:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnToy:Show()\n\t\telse\n\t\t\twarnToy:Show(args.destName)\n\t\tend\n\telseif spellId == 36815 and self.vb.phase ~= 5 then\n\t\tshowShieldHealthBar(self, args.destGUID, args.spellName, 80000)\n\t\tspecWarnShield:Show()\n\t\ttimerShieldCD:Start()\n\telseif args.spellId == 35859 and args:IsPlayer() and self:IsInCombat() and (args.amount or 1) >= 2 then\n\t\tspecWarnVapor:Show(args.amount)\n\t\tspecWarnVapor:Play(\"stackhigh\")\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 36815 and self.vb.phase ~= 5 then\n\t\tspecWarnPyro:Show(args.sourceName)\n\t\tspecWarnPyro:Play(\"kickcast\")\n\t\thideShieldHealthBar()\n\telseif spellId == 36797 then\n\t\tif self.Options.MCIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\telseif spellId == 37027 then\n\t\ttimerToy:Cancel(args.destName)\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 44863 then\n\t\twarnFear:Show()\n\t\ttimerFearCD:Start()\n\telseif spellId == 36819 then\n\t\twarnPyro:Show()\n\telseif spellId == 35941 then\n\t\twarnGravity:Show()\n\t\ttimerGravity:Start()\n\t\ttimerGravityCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 36723 then\n\t\twarnPhoenix:Show()\n\t\tif self.vb.phase == 5 then\n\t\t\ttimerPhoenixCD:Start(90)\n\t\telse\n\t\t\ttimerPhoenixCD:Start()\n\t\tend\n\telseif args.spellId == 36834 then\n\t\twarnDisruption:Show()\n\telseif args.spellId == 34341 and self:IsInCombat() then\n\t\twarnEgg:Show()\n\t\tspecWarnEgg:Show()\n\t\tspecWarnEgg:Play(\"killmob\")\n\t\ttimerRebirth:Show()\n\t\tDBM.BossHealth:AddBoss(21364, L.Egg)\n\t\tself:Schedule(15, function()\n\t\t\tDBM.BossHealth:RemoveBoss(21364)\n\t\tend)\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 20064 then\n\t\ttimerNextGaze:Cancel()\n\t\tDBM.BossHealth:RemoveBoss(20064)\n\telseif cid == 20060 then\n\t\ttimerFearCD:Cancel()\n\t\tDBM.BossHealth:RemoveBoss(20060)\n\telseif cid == 20062 then\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Hide()\n\t\tend\n\t\tDBM.BossHealth:RemoveBoss(20062)\n\telseif cid == 20063 then\n\t\tDBM.BossHealth:RemoveBoss(20063)\n\telseif cid == 21268 then\n\t\twarnMobDead:Show(L.Bow)\n\t\tDBM.BossHealth:RemoveBoss(21268)\n\telseif cid == 21269 then\n\t\twarnMobDead:Show(L.Axe)\n\t\tDBM.BossHealth:RemoveBoss(21269)\n\telseif cid == 21270 then\n\t\twarnMobDead:Show(L.Mace)\n\t\tDBM.BossHealth:RemoveBoss(21270)\n\telseif cid == 21271 then\n\t\twarnMobDead:Show(L.Dagger)\n\t\tDBM.BossHealth:RemoveBoss(21271)\n\telseif cid == 21272 then\n\t\twarnMobDead:Show(L.Sword)\n\t\tDBM.BossHealth:RemoveBoss(21272)\n\telseif cid == 21273 then\n\t\twarnMobDead:Show(L.Shield)\n\t\tDBM.BossHealth:RemoveBoss(21273)\n\telseif cid == 21274 then\n\t\twarnMobDead:Show(L.Staff)\n\t\tDBM.BossHealth:RemoveBoss(21274)\n\telseif cid == 21364 then\n\t\ttimerRebirth:Cancel()\n\t\tDBM.BossHealth:RemoveBoss(21364)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_EMOTE(msg, _, _, _, target)\n\tif (msg == L.EmoteGaze or msg:find(L.EmoteGaze)) and target then\n\t\ttarget = DBM:GetUnitFullName(target)\n\t\ttimerNextGaze:Start()\n\t\tif target == UnitName(\"player\") then\n\t\t\tspecWarnGaze:Show()\n\t\t\tspecWarnGaze:Play(\"justrun\")\n\t\telse\n\t\t\twarnGaze:Show(target)\n\t\tend\n\t\tif self.Options.GazeIcon then\n\t\t\tself:SetIcon(target, 1, 15)\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.YellSang or msg:find(L.YellSang) then\n\t\ttimerPhase1mob:Start(12.5, L.Sanguinar)\n\t\tDBM.BossHealth:AddBoss(20060, L.Sanguinar)\n\telseif msg == L.YellCaper or msg:find(L.YellCaper) then\n\t\ttimerPhase1mob:Start(7, L.Capernian)\n\t\tDBM.BossHealth:AddBoss(20062, L.Capernian)\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Show(10)\n\t\tend\n\telseif msg == L.YellTelo or msg:find(L.YellTelo) then\n\t\ttimerPhase1mob:Start(8.4, L.Telonicus)\n\t\tDBM.BossHealth:AddBoss(20063, L.Telonicus)\n\telseif msg == L.YellPhase2 or msg:find(L.YellPhase2) then\n\t\tself:SetStage(2)\n\t\ttimerPhase:Start(105)--105\n\t\twarnPhase2:Show()\n\t\twarnPhase3:Schedule(105)--210\n\t\tDBM.BossHealth:AddBoss(21268, L.Bow)\n\t\tDBM.BossHealth:AddBoss(21269, L.Axe)\n\t\tDBM.BossHealth:AddBoss(21270, L.Mace)\n\t\tDBM.BossHealth:AddBoss(21271, L.Dagger)\n\t\tDBM.BossHealth:AddBoss(21272, L.Sword)\n\t\tDBM.BossHealth:AddBoss(21273, L.Shield)\n\t\tDBM.BossHealth:AddBoss(21274, L.Staff)\n\telseif msg == L.YellPhase3 or msg:find(L.YellPhase3) then\n\t\tself:SetStage(3)\n\t\twarnPhase3:Show()\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Show(10)\n\t\tend\n\t\tself:Schedule(10, function()\n\t\t\tDBM.BossHealth:AddBoss(20064, L.Thaladred)\n\t\t\tDBM.BossHealth:AddBoss(20060, L.Sanguinar)\n\t\t\tDBM.BossHealth:AddBoss(20062, L.Capernian)\n\t\t\tDBM.BossHealth:AddBoss(20063, L.Telonicus)\n\t\t\ttimerPhase:Start(73)--83 pre nerf, 183 post nerf\n\t\tend)\n\telseif msg == L.YellPhase4 or msg:find(L.YellPhase4) then\n\t\tself:SetStage(4)\n\t\tDBM.BossHealth:AddBoss(19622, L.name)\n\t\twarnPhase4:Show()\n\t\ttimerPhase:Cancel()\n\t\ttimerPhoenixCD:Start(50)\n\t\ttimerShieldCD:Start(60)\n\t\ttimerMCCD:Start(40)\n\t\tself:Schedule(40, MCFailsafe, self)\n\telseif msg == L.YellPhase5 or msg:find(L.YellPhase5) then\n\t\tself:SetStage(5)\n\t\ttimerPhoenixCD:Cancel()\n\t\ttimerShieldCD:Cancel()\n\t\ttimerPhase:Start(45)\n\t\twarnPhase5:Schedule(45)\n\t\ttimerGravityCD:Start(60)\n\t\ttimerPhoenixCD:Start(137)\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(36735) then\n\t\tself:SendSync(\"Flamestrike\")\n\tend\nend\n\nfunction mod:OnSync(event)\n\tif not self:IsInCombat() then return end\n\tif event == \"Flamestrike\" then\n\t\twarnFlamestrike:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-TheEye/Solarian.lua",
    "content": "local mod\t= DBM:NewMod(\"Solarian\", \"DBM-TheEye\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(18805)\nmod:SetEncounterID(732)\nmod:SetUsedIcons(8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 42783 33045\",\n\t\"SPELL_AURA_REMOVED 42783 33045\",\n\t\"SPELL_CAST_START 37135\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal warnWrath\t\t\t= mod:NewTargetNoFilterAnnounce(33045, 2)--42783 used later\nlocal warnSplit\t\t\t= mod:NewAnnounce(\"WarnSplit\", 4, 39414)\nlocal warnAgent\t\t\t= mod:NewAnnounce(\"WarnAgent\", 1, 39414)\nlocal warnPriest\t\t= mod:NewAnnounce(\"WarnPriest\", 1, 39414)\nlocal warnPhase2\t\t= mod:NewPhaseAnnounce(2)\n\nlocal specWarnDomination= mod:NewSpecialWarningInterrupt(37135, \"HasInterrupt\", nil, 2, 1, 2)\nlocal specWarnWrath\t\t= mod:NewSpecialWarningMoveAway(42783, nil, nil, nil, 1, 2)\nlocal yellWrath\t\t\t= mod:NewYell(42783)\n\nlocal timerWrath\t\t= mod:NewTargetTimer(8, 33045)--42783 (and 6 seconds) later\nlocal timerSplit\t\t= mod:NewTimer(90, \"TimerSplit\", 39414, nil, nil, 6)\nlocal timerAgent\t\t= mod:NewTimer(4, \"TimerAgent\", 39414, nil, nil, 1)\nlocal timerPriest\t\t= mod:NewTimer(20, \"TimerPriest\", 39414, nil, nil, 1)\n\nlocal berserkTimer\t\t= mod:NewBerserkTimer(600)\n\nmod:AddRangeFrameOption(8, 33045)--Range may be larger pre nerf. it was 8 post nerf\nmod:AddSetIconOption(\"WrathIcon\", 33045, true, false, {8})--42783 used later\nmod:AddInfoFrameOption(33044)\n\nfunction mod:OnCombatStart(delay)\n\ttimerSplit:Start(50-delay)\n\tberserkTimer:Start(-delay)\n\tif self.Options.InfoFrame then\n\t\tDBM.InfoFrame:SetHeader(DBM:GetSpellInfo(33044))\n\t\tDBM.InfoFrame:Show(10, \"playerdebuffremaining\", 33044)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\n\tif self.Options.InfoFrame then\n\t\tDBM.InfoFrame:Hide()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 42783 or spellId == 33045 then\n\t\ttimerWrath:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnWrath:Show()\n\t\t\tspecWarnWrath:Play(\"runout\")\n\t\t\tyellWrath:Yell()\n\t\t\tif self.Options.RangeFrame then\n\t\t\t\tDBM.RangeCheck:Show(8)\n\t\t\tend\n\t\telse\n\t\t\twarnWrath:Show(args.destName)\n\t\tend\n\t\tif self.Options.WrathIcon then\n\t\t\tself:SetIcon(args.destName, 8, 6)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 42783 or args.spellId == 33045 then\n\t\ttimerWrath:Cancel(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tif self.Options.RangeFrame then\n\t\t\t\tDBM.RangeCheck:Hide()\n\t\t\tend\n\t\tend\n\t\tif self.Options.WrathIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 37135 then\n\t\tspecWarnDomination:Show(args.sourceName)\n\t\tspecWarnDomination:Play(\"kickcast\")\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.YellSplit1 or msg:find(L.YellSplit1) or msg == L.YellSplit2 or msg:find(L.YellSplit2) then\n\t\twarnSplit:Show()\n\t\ttimerAgent:Start()\n\t\twarnAgent:Schedule(4)\n\t\ttimerPriest:Start()\n\t\twarnPriest:Schedule(20)\n\t\ttimerSplit:Start()\n\telseif msg == L.YellPhase2 or msg:find(L.YellPhase2) then\n\t\twarnPhase2:Show()\n\t\ttimerAgent:Cancel()\n\t\twarnAgent:Cancel()\n\t\ttimerPriest:Cancel()\n\t\twarnPriest:Cancel()\n\t\ttimerSplit:Cancel()\n\tend\nend\n"
  },
  {
    "path": "DBM-TheEye/VoidReaver.lua",
    "content": "local mod\t= DBM:NewMod(\"VoidReaver\", \"DBM-TheEye\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(19516)\nmod:SetEncounterID(731)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 34172 34162 25778\"\n)\n\nlocal warnOrb\t\t\t= mod:NewTargetNoFilterAnnounce(34172, 2)\nlocal warnKnockBack\t\t= mod:NewSpellAnnounce(25778, 4)\nlocal warnPounding\t\t= mod:NewSpellAnnounce(34162, 3)\n\nlocal specWarnOrb\t\t= mod:NewSpecialWarningDodge(34172, nil, nil, nil, 1, 2)\nlocal yellOrb\t\t\t= mod:NewYell(34172)\n\nlocal timerKnockBack\t= mod:NewCDTimer(20, 25778, nil, \"Tank\", 2, 5)\nlocal timerPounding\t\t= mod:NewCDTimer(13, 34162, nil, nil, nil, 2)\n\nlocal berserkTimer\t\t= mod:NewBerserkTimer(600)\n\nfunction mod:OnCombatStart(delay)\n\ttimerPounding:Start()\n\tberserkTimer:Start(-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 34172 then\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnOrb:Show()\n\t\t\tspecWarnOrb:Play(\"watchorb\")\n\t\t\tyellOrb:Yell()\n\t\telse\n\t\t\twarnOrb:Show(args.destName)\n\t\tend\n\telseif args.spellId == 34162 then\n\t\twarnPounding:Show()\n\t\ttimerPounding:Start()\n\telseif args.spellId == 25778 then\n\t\twarnKnockBack:Show()\n\t\ttimerKnockBack:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-TheEye/localization.cn.lua",
    "content": "if GetLocale() ~= \"zhCN\" then return end\n\nlocal L\n\n-----------\n--  Alar --\n-----------\nL = DBM:GetModLocalization(\"Alar\")\n\nL:SetGeneralLocalization({\n\tname = \"奥\"\n})\n\nL:SetTimerLocalization({\n\tNextPlatform\t= \"下一个位置\"\n})\n\nL:SetOptionLocalization({\n\tNextPlatform\t= \"显示奥更换平台的时间\"\n})\n\n------------------\n--  Void Reaver --\n------------------\nL = DBM:GetModLocalization(\"VoidReaver\")\n\nL:SetGeneralLocalization({\n\tname = \"空灵机甲\"\n})\n\n--------------------------------\n--  High Astromancer Solarian --\n--------------------------------\nL = DBM:GetModLocalization(\"Solarian\")\n\nL:SetGeneralLocalization({\n\tname = \"大星术师索兰莉安\"\n})\n\nL:SetWarningLocalization({\n\tWarnSplit\t\t= \"*** 下属即将出现 ***\",\n\tWarnSplitSoon\t= \"*** 5秒后分裂 ***\",\n\tWarnAgent\t\t= \"*** 密探出现 ***\",\n\tWarnPriest\t\t= \"*** 祭司与索兰莉安出现 ***\"\n\n})\n\nL:SetTimerLocalization({\n\tTimerSplit\t\t= \"分裂\",\n\tTimerAgent\t\t= \"密探\",\n\tTimerPriest\t\t= \"祭司与索兰莉安\"\n})\n\nL:SetOptionLocalization({\n\tWarnSplit\t\t= \"显示分裂警报\",\n\tWarnSplitSoon\t= \"显示分裂预警\",\n\tWarnAgent\t\t= \"显示密探出现的警报\",\n\tWarnPriest\t\t= \"显示密探出现的预警\",\n\tTimerSplit\t\t= \"显示分裂出现的时间\",\n\tTimerAgent\t\t= \"显示密探出现的时间\",\n\tTimerPriest\t\t= \"显示祭司与索兰莉安出现的时间\",\n\tWrathWhisper\t= \"向受到星术师之怒效果的目标发送密语\"\n})\n\nL:SetMiscLocalization({\n\tWrathWhisper\t= \"星术师之怒！\",\n\tYellSplit1\t\t= \"我要让你们自以为是的错觉荡然无存！\",\n\tYellSplit2\t\t= \"你们势单力薄！\",\n\tYellPhase2\t\t= \"我受够了！\"\n})\n\n---------------------------\n--  Kael'thas Sunstrider --\n---------------------------\nL = DBM:GetModLocalization(\"KaelThas\")\n\nL:SetGeneralLocalization({\n\tname = \"凯尔萨斯·逐日者\"\n})\n\nL:SetWarningLocalization({\n\tWarnGaze\t\t= \"*** 萨拉德雷注视着>%s< ***\",\n\tWarnMobDead\t\t= \"%s down\",--Translate\n\tWarnEgg\t\t\t= \"*** 凤凰倒下 - 卵出现 ***\",\n\tSpecWarnGaze\t= \"快跑！\",\n\tSpecWarnEgg\t\t= \"*** 凤凰倒下 - 卵出现 ***\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"下一次阶段\",\n\tTimerPhase1mob\t= \"%s\",\n\tTimerNextGaze\t= \"凝视冷却\",\n\tTimerRebirth\t= \"复生\"\n})\n\nL:SetOptionLocalization({\n\tWarnGaze\t\t= \"显示萨拉德雷凝视玩家时发出警报\",\n\tWarnMobDead\t\t= \"显示第二阶段的警报\",\n\tWarnEgg\t\t\t= \"显示凤凰卵重生的警报\",\n\tSpecWarnGaze\t= \"显示特别警报：凝视你时\",\n\tSpecWarnEgg\t\t= \"显示特殊警告：凤凰卵重生时\",\n\tTimerPhase\t\t= \"显示下一阶段的时间\",\n\tTimerPhase1mob\t= \"显示第一阶段首领的时间\",\n\tTimerNextGaze\t= \"显示萨拉德雷凝视玩家的时间\",\n\tTimerRebirth\t= \"显示剩余凤凰卵重生的时间\",\n\tGazeWhisper\t\t= \"对萨拉德雷的目标发送密语\",\n\tGazeIcon\t\t= \"对萨拉德雷的目标添加标注\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase2\t= \"你们看，我的个人收藏中有许多武器……\",\n\tYellPhase3\t= \"也许我确实低估了你们。虽然让你们同时面对我的四位顾问显得有些不公平，但是我的人民从来都没有得到过公平的待遇。我只是在以牙还牙。\",\n\tYellPhase4\t= \"唉，有些时候，有些事情，必须得亲自解决才行。Balamore shanal！\",\n\tYellPhase5\t= \"我的心血是不会被你们轻易浪费的！我精心谋划的未来是不会被你们轻易破坏的！感受我真正的力量吧！\",\n\tYellSang\t= \"你们击败了我最强大的顾问……但是没有人能战胜鲜血之锤。出来吧，萨古纳尔男爵！\",\n\tYellCaper\t= \"卡波妮娅会很快解决你们的。\",\n\tYellTelo\t= \"干得不错。看来你们有能力挑战我的首席技师，塔隆尼库斯。\",\n\tEmoteGaze\t= \"凝视着([^%s]+)！\",\n\tGazeWhisper\t= \"萨拉德雷注视着你！快跑！\",\n\tThaladred\t= \"萨拉德雷\",\n\tSanguinar\t= \"萨古纳尔\",\n\tCapernian\t= \"卡波妮娅\",\n\tTelonicus\t= \"塔隆尼库斯\",\n\tBow\t\t\t= \"弓\",\n\tAxe\t\t\t= \"斧\",\n\tMace\t\t= \"锤\",\n\tDagger\t\t= \"匕首\",\n\tSword\t\t= \"剑\",\n\tShield\t\t= \"盾牌\",\n\tStaff\t\t= \"法杖\",\n\tEgg\t\t\t= \"凤凰卵\"\n})\n"
  },
  {
    "path": "DBM-TheEye/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n-----------\n--  Alar --\n-----------\nL = DBM:GetModLocalization(\"Alar\")\n\nL:SetGeneralLocalization({\n\tname = \"Al'ar\"\n})\n\nL:SetTimerLocalization({\n\tNextPlatform\t= \"Max. Plattformdauer\"\n})\n\nL:SetOptionLocalization({\n\tNextPlatform\t= \"Zeige Zeit bis Al'ar spätestens die Plattform wechselt<br/>(wechselt möglicherweise früher, aber fast nie später)\"\n})\n\n------------------\n--  Void Reaver --\n------------------\nL = DBM:GetModLocalization(\"VoidReaver\")\n\nL:SetGeneralLocalization({\n\tname = \"Leerhäscher\"\n})\n\n--------------------------------\n--  High Astromancer Solarian --\n--------------------------------\nL = DBM:GetModLocalization(\"Solarian\")\n\nL:SetGeneralLocalization({\n\tname = \"Hochastromantin Solarian\"\n})\n\nL:SetWarningLocalization({\n\tWarnSplit\t\t= \"Verschwinden\",\n\tWarnSplitSoon\t= \"Verschwinden in 5 Sekunden\",\n\tWarnAgent\t\t= \"Agenten erscheinen\",\n\tWarnPriest\t\t= \"Priester und Solarian erscheinen\"\n\n})\n\nL:SetTimerLocalization({\n\tTimerSplit\t\t= \"Nächstes Verschwinden\",\n\tTimerAgent\t\t= \"Agenten kommen\",\n\tTimerPriest\t\t= \"Priester & Solarian kommen\"\n})\n\nL:SetOptionLocalization({\n\tWarnSplit\t\t= \"Zeige Warnung für Verschwinden\",\n\tWarnSplitSoon\t= \"Zeige Vorwarnung für Verschwinden\",\n\tWarnAgent\t\t= \"Zeige Warnung, wenn Agenten erscheinen\",\n\tWarnPriest\t\t= \"Zeige Warnung, wenn Priester und Solarian erscheinen\",\n\tTimerSplit\t\t= \"Zeige Zeit bis Verschwinden\",\n\tTimerAgent\t\t= \"Zeige Zeit bis Agenten erscheinen\",\n\tTimerPriest\t\t= \"Zeige Zeit bis Priester und Solarian erscheinen\"\n})\n\nL:SetMiscLocalization({\n\tYellSplit1\t\t= \"Ich werde Euch Euren Hochmut austreiben!\",\n\tYellSplit2\t\t= \"Ihr seid eindeutig in der Unterzahl!\",\n\tYellPhase2\t\t= \"Ich werde eins mit der Leere!\"\n})\n\n---------------------------\n--  Kael'thas Sunstrider --\n---------------------------\nL = DBM:GetModLocalization(\"KaelThas\")\n\nL:SetGeneralLocalization({\n\tname = \"Kael'thas Sonnenwanderer\"\n})\n\nL:SetWarningLocalization({\n\tWarnGaze\t\t= \"Blick auf >%s<\",\n\tWarnMobDead\t\t= \"%s tot\",\n\tWarnEgg\t\t\t= \"Phönixei erschienen\",\n\tSpecWarnGaze\t= \"Blick auf DIR - Renn weg!\",\n\tSpecWarnEgg\t\t= \"Phönixei erschienen - Wechsel Ziel!\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"Nächste Phase\",\n\tTimerPhase1mob\t= \"%s\",\n\tTimerNextGaze\t= \"Nächstes Blickziel\",\n\tTimerRebirth\t= \"Phönix schlüpft\"\n})\n\nL:SetOptionLocalization({\n\tWarnGaze\t\t= \"Zeige Warnung für Ziele von Thaladreds Blick\",\n\tWarnMobDead\t\t= \"Zeige Warnung für getötete Waffen in Phase 2\",\n\tWarnEgg\t\t\t= \"Zeige Warnung, wenn Phönixei erscheint\",\n\tSpecWarnGaze\t= \"Spezialwarnung, wenn dich Thaladred anblickt\",\n\tSpecWarnEgg\t\t= \"Spezialwarnung, wenn Phönixei erscheint\",\n\tTimerPhase\t\t= \"Zeige Zeit bis nächste Phase\",\n\tTimerPhase1mob\t= \"Zeige Zeit bis Berater in Phase 1 aktiv werden\",\n\tTimerNextGaze\t= \"Zeige Zeit bis Thaladred ein neues Ziel anblickt\",\n\tTimerRebirth\t= \"Zeige Zeit bis Phönix aus Phönixei schlüpft\",\n\tGazeIcon\t\t= \"Zeichen auf Thaladreds Ziel setzen\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase2\t= \"Wie Ihr seht, habe ich viele Waffen in meinem Arsenal...\",\n\tYellPhase3\t= \"Vielleicht habe ich Euch unterschätzt. Es wäre ungerecht, Euch gegen meine vier Berater gleichzeitig kämpfen zu lassen, aber... mein Volk wurde auch nie gerecht behandelt. Ich vergelte nur Gleiches mit Gleichem.\",\n\tYellPhase4\t= \"Ach, manchmal muss man die Dinge selbst in die Hand nehmen. Balamore shanal!\",\n\tYellPhase5\t= \"Ich bin nicht so weit gekommen, um jetzt noch aufgehalten zu werden! Die Zukunft, die ich geplant habe, wird nicht gefährdet werden. Jetzt bekommt Ihr wahre Macht zu spüren!\",\n\tYellSang\t= \"Ihr habt gegen einige meiner besten Berater bestanden... aber niemand kommt gegen die Macht des Bluthammers an. Erzittert vor Lord Sanguinar!\",\n\tYellCaper\t= \"Capernian wird dafür sorgen, dass Euer Aufenthalt hier nicht lange währt.\",\n\tYellTelo\t= \"Gut gemacht. Ihr habt Euch würdig erwiesen, gegen meinen Meisteringenieur Telonicus anzutreten.\",\n\tEmoteGaze\t= \"behält ([^%s]+) im Blickfeld!\",\n\tThaladred\t= \"Thaladred der Verfinsterer\",\n\tSanguinar\t= \"Lord Sanguinar\",\n\tCapernian\t= \"Großastromantin Capernian\",\n\tTelonicus\t= \"Meisteringenieur Telonicus\",\n\tBow\t\t\t= \"Netherbespannter Langbogen\",\n\tAxe\t\t\t= \"Macht der Verwüstung\",\n\tMace\t\t= \"Kosmische Macht\",\n\tDagger\t\t= \"Klinge der Unendlichkeit\",\n\tSword\t\t= \"Warpschnitter\",\n\tShield\t\t= \"Phasenverschobenes Bollwerk\",\n\tStaff\t\t= \"Stab der Auflösung\",\n\tEgg\t\t\t= \"Phönixei\"\n})\n"
  },
  {
    "path": "DBM-TheEye/localization.en.lua",
    "content": "local L\n\n-----------\n--  Alar --\n-----------\nL = DBM:GetModLocalization(\"Alar\")\n\nL:SetGeneralLocalization({\n\tname = \"Al'ar\"\n})\n\nL:SetTimerLocalization({\n\tNextPlatform\t= \"Max Platform length\"\n})\n\nL:SetOptionLocalization({\n\tNextPlatform\t= \"Show timer for when how long Al'ar may stay at platform (May leave sooner but almost never any later)\"\n})\n\n------------------\n--  Void Reaver --\n------------------\nL = DBM:GetModLocalization(\"VoidReaver\")\n\nL:SetGeneralLocalization({\n\tname = \"Void Reaver\"\n})\n\n--------------------------------\n--  High Astromancer Solarian --\n--------------------------------\nL = DBM:GetModLocalization(\"Solarian\")\n\nL:SetGeneralLocalization({\n\tname = \"High Astromancer Solarian\"\n})\n\nL:SetWarningLocalization({\n\tWarnSplit\t\t= \"Split\",\n\tWarnSplitSoon\t= \"Split in 5 seconds\",\n\tWarnAgent\t\t= \"Agents spawned\",\n\tWarnPriest\t\t= \"Priests and Solarian spawned\"\n\n})\n\nL:SetTimerLocalization({\n\tTimerSplit\t\t= \"Next Split\",\n\tTimerAgent\t\t= \"Agents incoming\",\n\tTimerPriest\t\t= \"Priests & Solarian incoming\"\n})\n\nL:SetOptionLocalization({\n\tWarnSplit\t\t= \"Show warning for Split\",\n\tWarnSplitSoon\t= \"Show pre-warning for Split\",\n\tWarnAgent\t\t= \"Show warning for Agents spawn\",\n\tWarnPriest\t\t= \"Show warning for Priests and Solarian spawn\",\n\tTimerSplit\t\t= \"Show timer for Split\",\n\tTimerAgent\t\t= \"Show timer for Agents spawn\",\n\tTimerPriest\t\t= \"Show timer for Priests and Solarian spawn\"\n})\n\nL:SetMiscLocalization({\n\tYellSplit1\t\t= \"I will crush your delusions of grandeur!\",\n\tYellSplit2\t\t= \"You are hopelessly outmatched!\",\n\tYellPhase2\t\t= \"I become\"\n})\n\n---------------------------\n--  Kael'thas Sunstrider --\n---------------------------\nL = DBM:GetModLocalization(\"KaelThas\")\n\nL:SetGeneralLocalization({\n\tname = \"Kael'thas Sunstrider\"\n})\n\nL:SetWarningLocalization({\n\tWarnGaze\t\t= \"Gaze on >%s<\",\n\tWarnMobDead\t\t= \"%s down\",\n\tWarnEgg\t\t\t= \"Phoenix Egg spawned\",\n\tSpecWarnGaze\t= \"Gaze on YOU - Run away!\",\n\tSpecWarnEgg\t\t= \"Phoenix Egg spawned - Change Target!\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"Next Phase\",\n\tTimerPhase1mob\t= \"%s\",\n\tTimerNextGaze\t= \"New Gaze target\",\n\tTimerRebirth\t= \"Phoenix Rebirth\"\n})\n\nL:SetOptionLocalization({\n\tWarnGaze\t\t= \"Show warning for Thaladred's Gaze target\",\n\tWarnMobDead\t\t= \"Show warning for Phase 2 mob down\",\n\tWarnEgg\t\t\t= \"Show warning when Phoenix Egg spawn\",\n\tSpecWarnGaze\t= \"Show special warning when Gaze on you\",\n\tSpecWarnEgg\t\t= \"Show special warning when Phoenix Egg spawn\",\n\tTimerPhase\t\t= \"Show time for next phase\",\n\tTimerPhase1mob\t= \"Show time for Phase 1 mob active\",\n\tTimerNextGaze\t= \"Show timer for Thaladred's Gaze target changes\",\n\tTimerRebirth\t= \"Show timer for Phoenix Egg rebirth remaining\",\n\tGazeIcon\t\t= \"Set icon on Thaladred's Gaze target\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull1\t= \"Energy. Power. My people are addicted to it... a dependence made manifest after the Sunwell was destroyed. Welcome... to the future. A pity you are too late to stop it. No one can stop me now! Selama ashal'anore!\",\n--\tYellPull2\t= \"Energy. Power. My people are addicted to it... a dependence made manifest after the Sunwell was destroyed. Welcome to the future. A pity you are too late to stop it. No one can stop me now! Selama ashal'anore!\",--Apparently a variation exists and either can be used?\n\tYellPhase2\t= \"As you see, I have many weapons in my arsenal....\",\n\tYellPhase3\t= \"Perhaps I underestimated you. It would be unfair to make you fight all four advisors at once, but... fair treatment was never shown to my people. I'm just returning the favor.\",\n\tYellPhase4\t= \"Alas, sometimes one must take matters into one's own hands. Balamore shanal!\",\n\tYellPhase5\t= \"I have not come this far to be stopped! The future I have planned will not be jeopardized! Now you will taste true power!!\",\n\tYellSang\t= \"You have persevered against some of my best advisors... but none can withstand the might of the Blood Hammer. Behold, Lord Sanguinar!\",\n\tYellCaper\t= \"Capernian will see to it that your stay here is a short one.\",\n\tYellTelo\t= \"Well done, you have proven worthy to test your skills against my master engineer, Telonicus.\",\n\tEmoteGaze\t= \"sets eyes on ([^%s]+)!\",\n\tThaladred\t= \"Thaladred the Darkener\",\n\tSanguinar\t= \"Lord Sanguinar\",\n\tCapernian\t= \"Grand Astromancer Capernian\",\n\tTelonicus\t= \"Master Engineer Telonicus\",\n\tBow\t\t\t= \"Netherstrand Longbow\",\n\tAxe\t\t\t= \"Devastation\",\n\tMace\t\t= \"Cosmic Infuser\",\n\tDagger\t\t= \"Infinity Blades\",\n\tSword\t\t= \"Warp Slicer\",\n\tShield\t\t= \"Phaseshift Bulwark\",\n\tStaff\t\t= \"Staff of Disintegration\",\n\tEgg\t\t\t= \"Phoenix Egg\"\n})\n"
  },
  {
    "path": "DBM-TheEye/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" then return end\nlocal L\n\n-----------\n--  Alar --\n-----------\nL = DBM:GetModLocalization(\"Alar\")\n\nL:SetGeneralLocalization({\n\tname = \"Al'ar\"\n})\n\nL:SetTimerLocalization({\n\tNextPlatform\t= \"Siguiente plataforma (max.)\"\n})\n\nL:SetOptionLocalization({\n\tNextPlatform\t= \"Mostrar temporizador para el tiempo máximo que Al'ar puede permanecer en una plataforma\"\n})\n\n------------------\n--  Void Reaver --\n------------------\nL = DBM:GetModLocalization(\"VoidReaver\")\n\nL:SetGeneralLocalization({\n\tname = \"Atracador del vacío\"\n})\n\n--------------------------------\n--  High Astromancer Solarian --\n--------------------------------\nL = DBM:GetModLocalization(\"Solarian\")\n\nL:SetGeneralLocalization({\n\tname = \"Gran astromante Solarian\"\n})\n\nL:SetWarningLocalization({\n\tWarnSplit\t\t= \"Separación de banda\",\n\tWarnSplitSoon\t= \"Separación de banda en 5 s\",\n\tWarnAgent\t\t= \"Agentes\",\n\tWarnPriest\t\t= \"Sacerdotes y Solarian\"\n\n})\n\nL:SetTimerLocalization({\n\tTimerSplit\t\t= \"Siguiente separación\",\n\tTimerAgent\t\t= \"Siguientes agentes\",\n\tTimerPriest\t\t= \"Sacerdotes y Solarian\"\n})\n\nL:SetOptionLocalization({\n\tWarnSplit\t\t= \"Mostrar aviso para la separación de banda\",\n\tWarnSplitSoon\t= \"Mostrar aviso previo para la separación de banda\",\n\tWarnAgent\t\t= \"Mostrar aviso cuando aparezcan Agentes Solarium\",\n\tWarnPriest\t\t= \"Mostrar aviso cuando aparezcan los Sacerdotes Solarium y la Gran astromante Solarian\",\n\tTimerSplit\t\t= \"Mostrar temporizador para la separación de banda\",\n\tTimerAgent\t\t= \"Mostrar temporizador para los siguientes Agentes Solarium\",\n\tTimerPriest\t\t= \"Mostrar temporizador para cuando vuelva a aparecer la Gran astromante Solarian con los Sacerdotes Solarium\"\n})\n\nL:SetMiscLocalization({\n\tYellSplit1\t\t= \"¡Aplastaré vuestros delirios de grandeza!\",\n\tYellSplit2\t\t= \"¡Os superamos con creces!\",\n\tYellPhase2\t\t= \"Me FUNDO... ¡con el VACÍO!\"\n})\n\n---------------------------\n--  Kael'thas Sunstrider --\n---------------------------\nL = DBM:GetModLocalization(\"KaelThas\")\n\nL:SetGeneralLocalization({\n\tname = \"Kael'thas Caminante del Sol\"\n})\n\nL:SetWarningLocalization({\n\tWarnGaze\t\t= \"Mirada en >%s<\",\n\tWarnMobDead\t\t= \"%s muerto\",\n\tWarnEgg\t\t\t= \"Huevo de fénix\",\n\tSpecWarnGaze\t= \"Mirada en ti - ¡huye!\",\n\tSpecWarnEgg\t\t= \"Huevo de Fénix - ¡cambia de objetivo!\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"Siguiente fase\",\n\tTimerPhase1mob\t= \"%s\",\n\tTimerNextGaze\t= \"Mirada: Cambio de objetivo\",\n\tTimerRebirth\t= \"Fénix: Renacimiento\"\n})\n\nL:SetOptionLocalization({\n\tWarnGaze\t\t= \"Anunciar objetivos de la Mirada de Thaladred\",\n\tWarnMobDead\t\t= \"Mostrar aviso cuando muera un esbirro en Fase 2\",\n\tWarnEgg\t\t\t= \"Mostrar aviso cuando aparezca un Huevo de fénix\",\n\tSpecWarnGaze\t= \"Mostrar aviso especial cuando te afecte Mirada\",\n\tSpecWarnEgg\t\t= \"Mostrar aviso especial cuando aparezca un Huevo de fénix\",\n\tTimerPhase\t\t= \"Mostrar temporizador para la siguiente faseShow time for next phase\",\n\tTimerPhase1mob\t= \"Mostrar temporizador para cuando se active cada jefe de Fase 1\",\n\tTimerNextGaze\t= \"Show timer for Thaladred's Gaze target changes\",\n\tTimerRebirth\t= \"Mostrar temporizador para el renacimiento de los Huevos de fénix\",\n\tGazeIcon\t\t= \"Poner icono en el objetivo de la Mirada de Thaladred\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase2\t= \"Como veis, dispongo de un amplio arsenal...\",\n\tYellPhase3\t= \"Quizás os subestimé. Sería injusto que os enfrentarais a los cuatro consejeros al mismo tiempo, pero... nunca se le ha brindado un trato justo a mi gente. Así que os devuelvo el favor.\",\n\tYellPhase4\t= \"Desafortunadamente hay veces en las que tienes que hacer las cosas con tus propias manos. ¡Balamore shanal!\",\n\tYellPhase5\t= \"¡No he llegado hasta aquí para que me detengáis! ¡El futuro que he planeado no se pondrá en peligro! ¡Vais a probar el verdadero poder!\",\n\tYellSang\t= \"Habéis sobrevivido a algunos de mis mejores consejeros... pero nadie puede resistir el poder del Martillo de Sangre. ¡He aquí Lord Sanguinar!\",\n\tYellCaper\t= \"Capernian se encargará de que vuestra visita sea breve.\",\n\tYellTelo\t= \"Bien hecho. Parecéis dignos de probar vuestras habilidades con mi maestro ingeniero Telonicus.\",\n\tEmoteGaze\t= \"mira a ([^%s]+)!\",\n\tThaladred\t= \"Thaladred el Ensombrecedor\",\n\tSanguinar\t= \"Lord Sanguinar\",\n\tCapernian\t= \"Gran astromante Capernian\",\n\tTelonicus\t= \"Maestro ingeniero Telonicus\",\n\tBow\t\t\t= \"Arco largo de fibra abisal\",\n\tAxe\t\t\t= \"Devastación\",\n\tMace\t\t= \"Inyector cósmico\",\n\tDagger\t\t= \"Hoja de infinidad\",\n\tSword\t\t= \"Cercenador de distorsión\",\n\tShield\t\t= \"Baluarte de cambio de fase\",\n\tStaff\t\t= \"Bastón de desintegración\",\n\tEgg\t\t\t= \"Huevo de fénix\"\n})\n"
  },
  {
    "path": "DBM-TheEye/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n-----------\n--  Alar --\n-----------\nL = DBM:GetModLocalization(\"Alar\")\n\nL:SetGeneralLocalization({\n\tname = \"알라르\"\n})\n\nL:SetTimerLocalization({\n\tNextPlatform\t= \"최대 단상 시간\"\n})\n\nL:SetOptionLocalization({\n\tNextPlatform\t= \"알라르가 단상에 머무를 수 있는 시간 타이머 바 보기 (더 빨리 떠날수는 있지만 더 늦게 떠나진 않음)\"\n})\n\n------------------\n--  Void Reaver --\n------------------\nL = DBM:GetModLocalization(\"VoidReaver\")\n\nL:SetGeneralLocalization({\n\tname = \"공허의 절단기\"\n})\n\n--------------------------------\n--  High Astromancer Solarian --\n--------------------------------\nL = DBM:GetModLocalization(\"Solarian\")\n\nL:SetGeneralLocalization({\n\tname = \"고위 점성술사 솔라리안\"\n})\n\nL:SetWarningLocalization({\n\tWarnSplit\t\t= \"분리\",\n\tWarnSplitSoon\t= \"5초 후 분리\",\n\tWarnAgent\t\t= \"요원 등장\",\n\tWarnPriest\t\t= \"사제와 솔라리안 등장\",\n\n})\n\nL:SetTimerLocalization({\n\tTimerSplit\t\t= \"다음 분리\",\n\tTimerAgent\t\t= \"요원 등장\",\n\tTimerPriest\t\t= \"사제와 솔라리안 등장\"\n})\n\nL:SetOptionLocalization({\n\tWarnSplit\t\t= \"분리 경고 보기\",\n\tWarnSplitSoon\t= \"분리 사전 경고 보기\",\n\tWarnAgent\t\t= \"요원 등장 경고 보기\",\n\tWarnPriest\t\t= \"사제와 솔라리안 등장 경고 보기\",\n\tTimerSplit\t\t= \"분리 타이머 바 보기\",\n\tTimerAgent\t\t= \"요원 등장 타이머 바 보기\",\n\tTimerPriest\t\t= \"사제와 솔라리안 등장 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tYellSplit1\t\t= \"그 오만한 콧대를 꺾어주마!\",\n\tYellSplit2\t\t= \"한 줌의 희망마저 짓밟아주마!\",\n\tYellPhase2\t\t= \"나는 공허의\"\n})\n\n---------------------------\n--  Kael'thas Sunstrider --\n---------------------------\nL = DBM:GetModLocalization(\"KaelThas\")\n\nL:SetGeneralLocalization({\n\tname = \"캘타스 선스트라이더\"\n})\n\nL:SetWarningLocalization({\n\tWarnGaze\t\t= \"주시: >%s<\",\n\tWarnMobDead\t\t= \"%s 처치\",\n\tWarnEgg\t\t\t= \"불사조 알 생성\",\n\tSpecWarnGaze\t= \"당신을 주시 - 도망치세요!\",\n\tSpecWarnEgg\t\t= \"불사조 알 생성 - 점사!\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"다음 단계\",\n\tTimerNextGaze\t= \"새 주시 대상\",\n\tTimerRebirth\t= \"불사조 환생\"\n})\n\nL:SetOptionLocalization({\n\tWarnGaze\t\t= \"탈라드레드의 주시 대상 경고 보기\",\n\tWarnMobDead\t\t= \"2단계 무기 처치 경고 보기\",\n\tWarnEgg\t\t\t= \"불사조 알 생성시 경고 보기\",\n\tSpecWarnGaze\t= \"주시 대상일 때 특수 경고 보기\",\n\tSpecWarnEgg\t\t= \"불사조 알 생성시 특수 경고 보기\",\n\tTimerPhase\t\t= \"다음 단계 타이머 바 보기\",\n\tTimerPhase1mob\t= \"1단계 조언가 활성화 타이머 바 보기\",\n\tTimerNextGaze\t= \"탈라드레드의 주시 대상 변경 타이머 바 보기\",\n\tTimerRebirth\t= \"불사조 알 환생 남은 시간 타이머 바 보기\",\n\tGazeIcon\t\t= \"탈라드레드의 주시 대상에 공격대 징표 설정\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase2\t= \"보다시피 내 무기고에는 굉장한 무기가 아주 많지.\",\n\tYellPhase3\t= \"네놈들을 과소평가했나 보군. 모두를 한꺼번에 상대하라는 건 불공평한 처사지만, 나의 백성도 공평한 대접을 받은 적 없기는 매한가지. 받은 대로 돌려주겠다.\",\n\tYellPhase4\t= \"때론 직접 나서야 할 때도 있는 법이지. 발라모어 샤날!\",\n\tYellPhase5\t= \"이대로 물러날 내가 아니다! 반드시 내가 설계한 미래를 실현하리라! 이제 진정한 힘을 느껴 보아라!\",\n\tYellSang\t= \"최고의 조언가를 상대로 잘도 버텨냈군. 허나 그 누구도 붉은 망치의 힘에는 대항할 수 없지. 보아라, 군주 생귀나르를!\",\n\tYellCaper\t= \"카퍼니안, 놈들이 여기 온 것을 후회하게 해 줘라.\",\n\tYellTelo\t= \"좋아, 그 정도 실력이면 수석기술자 텔로니쿠스를 상대해 볼만하겠어.\",\n\tEmoteGaze\t= \"노려봅니다!\",\n\tThaladred\t= \"암흑의 인도자 탈라드레드\",\n\tSanguinar\t= \"군주 생귀나르\",\n\tCapernian\t= \"대점성술사 카퍼니안\",\n\tTelonicus\t= \"수석기술자 텔로니쿠스\",\n\tBow\t\t\t= \"황천매듭 장궁\",\n\tAxe\t\t\t= \"참상의 도끼\",\n\tMace\t\t= \"우주 에너지 주입기(둔기)\",\n\tDagger\t\t= \"무한의 비수(단검)\",\n\tSword\t\t= \"차원 절단기(도검)\",\n\tShield\t\t= \"위상 변화의 보루 방패\",\n\tStaff\t\t= \"붕괴의 지팡이\",\n\tEgg\t\t\t= \"불사조 알\"\n})\n"
  },
  {
    "path": "DBM-TheEye/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n-----------\n--  Alar --\n-----------\nL = DBM:GetModLocalization(\"Alar\")\n\nL:SetGeneralLocalization({\n\tname = \"Ал'ар\"\n})\n\nL:SetTimerLocalization({\n\tNextPlatform\t= \"Следующая платформа\"\n})\n\nL:SetOptionLocalization({\n\tNextPlatform\t= \"Показывать таймер, когда Ал'ар меняет платформу\"\n})\n\n------------------\n--  Void Reaver --\n------------------\nL = DBM:GetModLocalization(\"VoidReaver\")\n\nL:SetGeneralLocalization({\n\tname = \"Страж Бездны\"\n})\n\n--------------------------------\n--  High Astromancer Solarian --\n--------------------------------\nL = DBM:GetModLocalization(\"Solarian\")\n\nL:SetGeneralLocalization({\n\tname = \"Верховный звездочет Солариан\"\n})\n\nL:SetWarningLocalization({\n\tWarnSplit\t\t= \"*** Приспешники на подходе ***\",\n\tWarnSplitSoon\t= \"*** Разделение через 5 секунд ***\",\n\tWarnAgent\t\t= \"*** Пособники появились ***\",\n\tWarnPriest\t\t= \"*** Жрецы и Солариан появились ***\"\n\n})\n\nL:SetTimerLocalization({\n\tTimerSplit\t\t= \"Разделение\",\n\tTimerAgent\t\t= \"Пособники\",\n\tTimerPriest\t\t= \"Жрецы и Солариан\"\n})\n\nL:SetOptionLocalization({--Translate\n\tWarnSplit\t\t= \"Show warning for Split\",\n\tWarnSplitSoon\t= \"Show pre-warning for Split\",\n\tWarnAgent\t\t= \"Show warning for Agents spawn\",\n\tWarnPriest\t\t= \"Show warning for Priests and Solarian spawn\",\n\tTimerSplit\t\t= \"Show timer for Split\",\n\tTimerAgent\t\t= \"Show timer for Agents spawn\",\n\tTimerPriest\t\t= \"Show timer for Priests and Solarian spawn\",\n\tWrathWhisper\t= \"Сообщить шепотом цели, если Гнев на нем\"\n})\n\nL:SetMiscLocalization({\n\tWrathWhisper\t= \"Гнев на вас!\",\n\tYellSplit1\t\t= \"Я навсегда избавлю вас от мании величия!\",\n\tYellSplit2\t\t= \"Вы безнадежно слабы!\t\",\n\tYellPhase2\t\t= \"Я сольюсь... с БЕЗДНОЙ!\"\n})\n\n---------------------------\n--  Kael'thas Sunstrider --\n---------------------------\nL = DBM:GetModLocalization(\"KaelThas\")\n\nL:SetGeneralLocalization({\n\tname = \"Кель'тас Солнечный Скиталец\"\n})\n\nL:SetWarningLocalization({\n\tWarnGaze\t\t= \"*** Таладред бросает взор на >%s< ***\",\n\tWarnMobDead\t\t= \"%s down\",--Translate\n\tWarnEgg\t\t\t= \"*** Феникс убит - появляется яйцо ***\",\n\tSpecWarnGaze\t= \"Бегите!\",\n\tSpecWarnEgg\t\t= \"*** Феникс убит - появляется яйцо ***\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"Следующая Фаза\",\n\tTimerPhase1mob\t= \"%s\",\n\tTimerNextGaze\t= \"Восстановление взгляда\",\n\tTimerRebirth\t= \"Возрождение\"\n})\n\nL:SetOptionLocalization({--Translate\n\tWarnGaze\t\t= \"Show warning for Thaladred's Gaze target\",\n\tWarnMobDead\t\t= \"Show warning for Phase 2 mob down\",\n\tWarnEgg\t\t\t= \"Show warning when Phoenix Egg spawn\",\n\tSpecWarnGaze\t= \"Show special warning when Gaze on you\",\n\tSpecWarnEgg\t\t= \"Show special warning when Phoenix Egg spawn\",\n\tTimerPhase\t\t= \"Show time for next phase\",\n\tTimerPhase1mob\t= \"Show time for Phase 1 mob active\",\n\tTimerNextGaze\t= \"Show timer for Thaladred's Gaze target changes\",\n\tTimerRebirth\t= \"Show timer for Phoenix Egg rebirth remaining\",\n\tRangeFrame\t\t= \"Контрольное окно придельной дистанции\",\n\tGazeWhisper\t\t= \"Сообщить шепотом цели, если Таладред на нем\",\n\tGazeIcon\t\t= \"Установить метку на цель Таладред\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull1\t= \"Энергия. Сила. Мои люди без них не могут... Эта зависимость возникла после уничтожения Солнечного Колодца. Добро пожаловать... в будущее. Мне очень жаль, но вы не сможете ничего изменить. Теперь меня никто не остановит! Селама ашаль-аноре!\",\n\tYellPhase2\t= \"Как видите, оружия у меня предостаточно...\",\n\tYellPhase3\t= \"Возможно, я недооценил вас. Было бы несправедливо заставлять вас драться с четырьмя советниками сразу, но... Мои люди тоже никогда не знали справедливости. Я лишь возвращаю долг.\",\n\tYellPhase4\t= \"Увы, иногда приходится брать все в свои руки. Баламоре шаналь!\",\n\tYellPhase5\t= \"Я не затем ступил на этот путь, чтобы остановиться на полдороги! Мои планы должны сбыться  и они сбудутся! Узрите же истинную мощь!\",\n\tYellSang\t= \"Вы справились с моими лучшими советниками... Но перед мощью Кровавого Молота не устоит никто. Узрите лорда Сангвинара!\",\n\tYellCaper\t= \"Каперниан проследит, чтобы вы не задержались здесь надолго.\",\n\tYellTelo\t= \"Неплохо, теперь вы можете потягаться с моим главным инженером Телоникусом.\",\n\tEmoteGaze\t= \"смотрит на ([^%s]+)!\",\n\tGazeWhisper\t= \"Таладред бросает взор на ВАС! Бегите!\",\n\tThaladred\t= \"Таладред Светокрад\",\n\tSanguinar\t= \"Лорд Сангвинар\",\n\tCapernian\t= \"Великий Звездочет Каперниан\",\n\tTelonicus\t= \"Старший инженер Телоникус\",\n\tBow\t\t\t= \"Длинный лук Края Пустоты\",\n\tAxe\t\t\t= \"Сокрушение\",\n\tMace\t\t= \"Вселенский вдохновитель\",\n\tDagger\t\t= \"Клинки Бесконечности\",\n\tSword\t\t= \"Астральный тесак\",\n\tShield\t\t= \"Фазовый щит\",\n\tStaff\t\t= \"Посох Распыления\",\n\tEgg\t\t\t= \"Яйцо феникса\"\n})\n"
  },
  {
    "path": "DBM-TheEye/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n-----------\n--  Alar --\n-----------\nL = DBM:GetModLocalization(\"Alar\")\n\nL:SetGeneralLocalization({\n\tname = \"歐爾\"\n})\n\nL:SetTimerLocalization({\n\tNextPlatform\t= \"最長平台停留時間\"\n})\n\nL:SetOptionLocalization({\n\tNextPlatform\t= \"為歐爾最長平台可能停留時間顯示計時器(可能會提早離開不過不會大於這個時間)\"\n})\n\n------------------\n--  Void Reaver --\n------------------\nL = DBM:GetModLocalization(\"VoidReaver\")\n\nL:SetGeneralLocalization({\n\tname = \"虛無搶奪者\"\n})\n\n--------------------------------\n--  High Astromancer Solarian --\n--------------------------------\nL = DBM:GetModLocalization(\"Solarian\")\n\nL:SetGeneralLocalization({\n\tname = \"高階星術師索拉瑞恩\"\n})\n\nL:SetWarningLocalization({\n\tWarnSplit\t\t= \"分裂!\",\n\tWarnSplitSoon\t= \"5秒後分裂\",\n\tWarnAgent\t\t= \"密探出現了\",\n\tWarnPriest\t\t= \"牧師和索拉瑞恩出現了\"\n\n})\n\nL:SetTimerLocalization({\n\tTimerSplit\t\t= \"下一次分裂\",\n\tTimerAgent\t\t= \"密探即將到來\",\n\tTimerPriest\t\t= \"牧師和索拉瑞恩即將到來\"\n})\n\nL:SetOptionLocalization({\n\tWarnSplit\t\t= \"為分裂顯示警告\",\n\tWarnSplitSoon\t= \"為分裂顯示警告顯示預先警告\",\n\tWarnAgent\t\t= \"為密探出現顯示警告\",\n\tWarnPriest\t\t= \"為牧師和索拉瑞恩出現顯示警告\",\n\tTimerSplit\t\t= \"為分裂顯示計時器\",\n\tTimerAgent\t\t= \"為密探出現顯示計時器\",\n\tTimerPriest\t\t= \"為牧師和索拉瑞恩出現顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tYellSplit1\t\t= \"我會粉碎你那偉大的夢想\",\n\tYellSplit2\t\t= \"我的實力遠勝於你!\",\n\tYellPhase2\t\t= \"夠了!現在我要呼喚宇宙中失衡的能量。\"\n})\n\n---------------------------\n--  Kael'thas Sunstrider --\n---------------------------\nL = DBM:GetModLocalization(\"KaelThas\")\n\nL:SetGeneralLocalization({\n\tname = \"凱爾薩斯·逐日者\"\n})\n\nL:SetWarningLocalization({\n\tWarnGaze\t\t= \">%s<被凝視了\",\n\tWarnMobDead\t\t= \"%s倒下\",\n\tWarnEgg\t\t\t= \"鳳凰蛋出現\",\n\tSpecWarnGaze\t= \"你被凝視了!快跑!\",\n\tSpecWarnEgg\t\t= \"鳳凰蛋出現! - 快換目標!\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase\t\t= \"下個階段\",\n\tTimerPhase1mob\t= \"%s\",\n\tTimerNextGaze\t= \"下一個凝視目標\",\n\tTimerRebirth\t= \"鳳凰重生\"\n})\n\nL:SetOptionLocalization({\n\tWarnGaze\t\t= \"為薩拉瑞德凝視的目標顯示警告\",\n\tWarnMobDead\t\t= \"為第2階段小怪倒下顯示警告\",\n\tWarnEgg\t\t\t= \"為鳳凰蛋出現顯示警告\",\n\tSpecWarnGaze\t= \"當你被凝視時顯示特別警告\",\n\tSpecWarnEgg\t\t= \"當鳳凰蛋出現時顯示特別警告\",\n\tTimerPhase\t\t= \"為下一階段顯示計時器\",\n\tTimerPhase1mob\t= \"為第1階段小怪活動顯示計時器\",\n\tTimerNextGaze\t= \"為薩拉瑞德凝視目標改變顯示計時器\",\n\tTimerRebirth\t= \"為鳳凰蛋重生顯示計時器\",\n\tGazeIcon\t\t= \"標記薩拉瑞德注視的目標\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase2\t= \"你們看，我的個人收藏中有許多武器...\",\n\tYellPhase3\t= \"也許我低估了你。要你一次對付四位諫言者也許對你來說是不太公平，但是...我的人民從未得到公平的對待。我只是以牙還牙而已。\",\n\tYellPhase4\t= \"唉，有些時候，有些事情，必須得親自解決才行。(薩拉斯語)受死吧!\",\n\tYellPhase5\t= \"我的心血是不會被你們輕易浪費的!我精心謀劃的未來是不會被你們輕易破壞的!感受我真正的力量吧!\",\n\tYellSang\t= \"你已經努力的打敗了我的幾位最忠誠的諫言者...但是沒有人可以抵抗血錘的力量。等著看桑古納爾領主的力量吧!\",\n\tYellCaper\t= \"卡普尼恩將保證你們不會在這裡停留太久。\",\n\tYellTelo\t= \"做得好，你已經證明你的實力足以挑戰我的工程大師泰隆尼卡斯。\",\n\tEmoteGaze\t= \"凝視著(.+)!\",\n\tThaladred\t= \"扭曲預言家薩拉瑞德\",\n\tSanguinar\t= \"桑古納爾領主\",\n\tCapernian\t= \"大星術師卡普尼恩\",\n\tTelonicus\t= \"工程大師泰隆尼卡斯\",\n\tBow\t\t\t= \"虛空之絃長弓\",\n\tAxe\t\t\t= \"毀滅\",\n\tMace\t\t= \"宇宙灌溉者\",\n\tDagger\t\t= \"無盡之刃\",\n\tSword\t\t= \"扭曲分割者\",\n\tShield\t\t= \"相位壁壘\",\n\tStaff\t\t= \"瓦解之杖\",\n\tEgg\t\t\t= \"鳳凰蛋\"\n})\n"
  },
  {
    "path": "DBM-Ulduar/Algalon.lua",
    "content": "local mod\t= DBM:NewMod(\"Algalon\", \"DBM-Ulduar\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(32871)\nmod:SetEncounterID(757)\nmod:RegisterCombat(\"combat\")\n--mod:RegisterKill(\"yell\", L.YellKill) -- fires 24 seconds after fight ends, not accurate enough. Workaround it by using Self Stun UNIT_SPELLCAST_SUCCEEDED, which is fired when he turns friendly and fight is won.\nmod:SetWipeTime(20)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 64584 64443\",\n\t\"SPELL_CAST_SUCCESS 65108 64122 64598 62301\",\n\t\"SPELL_AURA_APPLIED 64412\",\n\t\"SPELL_AURA_APPLIED_DOSE 64412\",\n\t\"SPELL_AURA_REMOVED 64412\",\n\t\"SPELL_DAMAGE 65108 64122\",\n\t\"SPELL_MISSED 65108 64122\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1\",\n\t\"UNIT_HEALTH boss1\"\n)\n\nlocal warnPhase2\t\t\t\t= mod:NewPhaseAnnounce(2, 2, nil, nil, nil, nil, nil, 2)\nlocal warnPhase2Soon\t\t\t= mod:NewPrePhaseAnnounce(2, 2)\nlocal announcePreBigBang\t\t= mod:NewPreWarnAnnounce(64584, 10, 3)\nlocal announceBlackHole\t\t\t= mod:NewSpellAnnounce(65108, 2)\nlocal announcePhasePunch\t\t= mod:NewStackAnnounce(64412, 4, nil, \"Tank|Healer\")\n\nlocal specwarnStarLow\t\t\t= mod:NewSpecialWarning(\"warnStarLow\", \"Tank|Healer\", nil, nil, 1, 2)\nlocal specWarnPhasePunch\t\t= mod:NewSpecialWarningStack(64412, nil, 4, nil, nil, 1, 6)\nlocal specWarnBigBang\t\t\t= mod:NewSpecialWarningSpell(64584, nil, nil, nil, 3, 2)\nlocal specWarnCosmicSmash\t\t= mod:NewSpecialWarningDodge(64596, nil, nil, nil, 2, 2)\n\nlocal timerNextBigBang\t\t\t= mod:NewNextTimer(91.0, 64584, nil, nil, nil, 2) -- REVIEW! no data for 2nd cast onwards (2022/07/05 || 25 man Lord log 2022/08/02 || 25 man FM log 2022/08/07 || 10 man FM log 2022/08/09) - 91.0 || 91.0 || 91.0; 91.1; 91.0 || 91.0; 91.0\nlocal timerBigBangCast\t\t\t= mod:NewCastTimer(8, 64584, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerNextCollapsingStar\t= mod:NewTimer(97.5, \"NextCollapsingStar\", \"Interface\\\\Icons\\\\INV_Enchant_EssenceCosmicGreater\", nil, nil, 2, DBM_COMMON_L.HEALER_ICON) -- Instead of 15s (retail), this event fired with 97s after the first emote and then 91s difference (S2 || 25 man Lord log 2022/08/02 || 25 man FM log 2022/08/07 || 10 man FM log 2022/08/09) - 91 || 97.5 || 97.5; 97.6, 91.0; 97.5; 97.5; 97.6; 97.6; 97.5; 97.5; 97.5 || 97.5, 91.0; 97.5; 97.5; 97.5; 97.5; 97.5\nlocal timerCDCosmicSmash\t\t= mod:NewCDTimer(25.5, 64596, nil, nil, nil, 3) -- Log reviewed (2022/07/05 || 25 man FM log 2022/08/07) - 25.5, 25.5, 25.5, 25.5, 25.5, 25.5, 25.6, 25.5 || 25.5, 25.5, 25.6, 25.5, 25.5, 25.5\nlocal timerCastCosmicSmash\t\t= mod:NewCastTimer(4.5, 64596)\nlocal timerPhasePunch\t\t\t= mod:NewTargetTimer(45, 64412, nil, \"Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerNextPhasePunch\t\t= mod:NewNextTimer(15.5, 64412, nil, \"Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal enrageTimer\t\t\t\t= mod:NewBerserkTimer(360)\n\nlocal warned_star = {}\nlocal stars = {}\nlocal stars_hp = {}\nlocal star_num = 1\nmod.vb.warned_preP2 = false\nmod.vb.collapsingStartCount = 0\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tstars = {}\n\twarned_star = {}\n\tstars_hp = {}\n\tstar_num = 1\n\tself.vb.warned_preP2 = false\n\tself.vb.collapsingStartCount = 0\n\ttimerNextCollapsingStar:Start(21.9-delay) -- Chose median. 0.3s variance (2022/07/05 || 10 man FM log 2022/08/01 || 25 man Lord log 2022/08/02 || 25 man FM log 2022/08/07 || 10 man FM log 2022/08/09) - 22.0 || 21.9, 22.0 || 22.0 || 22.0, 22.0, 22.0, 22.1, 21.9, 22.0, 22.0, 22.0, 22.0, 22.0 || 22.0, 22.0, 22.0, 22.0, 21.9, 21.9, 21.8, 21.9, 21.9, 22.0, 22.0\n\ttimerCDCosmicSmash:Start(35-delay) -- Log reviewed (2022/07/05 || 10 man FM log 2022/08/01 || 25 man Lord log 2022/08/02 || 25 man FM log 2022/08/07) - 35 || 35.0, 35.0 || 35.0 || 35.0, 35.0, 34.9, 35.0, 35.0, 35.0, 35.0, 35.0, 35.0, 35.0\n\tannouncePreBigBang:Schedule(90-delay)\n\ttimerNextBigBang:Start(100-delay) -- Log reviewed (2022/07/05 || 2022/07/10 || 10 man FM log 2022/08/01 || 25 man Lord log 2022/08/02 || 25 man FM log 2022/08/07 || 10 man FM log 2022/08/09) - 100 || 100 || 100.0, 99.9 || 100 || 99.9, 100.0, 100.0, 100.0, 99.9, 100.0, 100.0, 100.0, 100.0 || 99.9, 100.0, 99.9, 100.0, 100.0, 99.8, 99.9, 100.0, 100.0\n\tenrageTimer:Start(360-delay)\nend\n\nfunction mod:OnCombatEnd()\n\tDBM.BossHealth:Clear()\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(64584, 64443) then\t-- Big Bang\n\t\ttimerBigBangCast:Start()\n\t\ttimerNextBigBang:Start()\n\t\tannouncePreBigBang:Schedule(80)\n\t\tspecWarnBigBang:Show()\n\t\tif self:IsTank() then\n\t\t\tspecWarnBigBang:Play(\"defensive\")\n\t\telse\n\t\t\tspecWarnBigBang:Play(\"findshelter\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(65108, 64122) then\t-- Black Hole Explosion\n\t\tannounceBlackHole:Show()\n\telseif args:IsSpellID(64598, 62301) then\t-- Cosmic Smash\n\t\ttimerCastCosmicSmash:Start()\n\t\ttimerCDCosmicSmash:Start()\n\t\tspecWarnCosmicSmash:Show()\n\t\tspecWarnCosmicSmash:Play(\"watchstep\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 64412 then\n\t\ttimerNextPhasePunch:Start()\n\t\tlocal amount = args.amount or 1\n\t\tif args:IsPlayer() and amount >= 4 then\n\t\t\tspecWarnPhasePunch:Show(args.amount)\n\t\t\tspecWarnPhasePunch:Play(\"stackhigh\")\n\t\tend\n\t\ttimerPhasePunch:Start(args.destName)\n\t\tannouncePhasePunch:Show(args.destName, amount)\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 64412 then\n\t\ttimerPhasePunch:Cancel(args.destName)\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(sourceGUID, _, _, _, _, _, spellId)\n\tif (spellId == 65108 or spellId == 64122) and self:AntiSpam(2, spellId .. sourceGUID) then\t-- Black Hole Explosion\n\t\tif stars[sourceGUID] then\n\t\t\tlocal id = stars[sourceGUID]\n\t\t\tDBM.BossHealth:RemoveBoss(id)\n\t\telse\n\t\t\tDBM.BossHealth:RemoveLowest()\n\t\tend\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)\n\tif msg == L.Emote_CollapsingStar or msg:find(L.Emote_CollapsingStar) then\n\t\tself.vb.collapsingStartCount = self.vb.collapsingStartCount + 1\n\t\tif self.vb.collapsingStartCount > 1 then\n\t\t\ttimerNextCollapsingStar:Start(91)\n\t\telse\n\t\t\ttimerNextCollapsingStar:Start()\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.Phase2 or msg:find(L.Phase2) then\n\t\tself:SetStage(2)\n\t\tself.vb.warned_preP2 = true\n\t\ttimerNextCollapsingStar:Stop()\n\t\twarnPhase2:Show()\n\t\twarnPhase2:Play(\"ptwo\")\n\t\tDBM.BossHealth:Clear()\n\t\tDBM.BossHealth:AddBoss(32871)\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tlocal cid = self:GetUnitCreatureId(uId)\n\tlocal guid = UnitGUID(uId)\n\tif cid == 32871 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.23 and not self.vb.warned_preP2 then\n\t\tself.vb.warned_preP2 = true\n\t\twarnPhase2Soon:Show()\n\telseif cid == 32955 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.25 and not warned_star[guid] then\n\t\twarned_star[guid] = true\n\t\tspecwarnStarLow:Show()\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n--[[not fired on combat start - log review (2022/07/05). Default to IEEU instead.\n\tif spellName == GetSpellInfo(65311) then--Supermassive Fail (fires when he becomes actually active)\n\t\ttimerNextCollapsingStar:Start(16)\n\t\ttimerCDCosmicSmash:Start(26)\n\t\tannouncePreBigBang:Schedule(80)\n\t\ttimerNextBigBang:Start(90)\n\t\tenrageTimer:Start(360)\n\telse]]if spellName == GetSpellInfo(65256) then -- Self Stun (Combat End)\n\t\tDBM:EndCombat(self)\n\tend\nend\n\nmod:RegisterOnUpdateHandler(function(self)\n\tif not self:IsInCombat() then return end\n\t\tfor uId in DBM:GetGroupMembers() do\n\t\t\tlocal target = uId ..\"target\"\n\n\t\t\tif self:GetUnitCreatureId(target) == 32955 then\n\t\t\t\tlocal targetGUID = UnitGUID(target)\n\n\t\t\t\tif not stars[targetGUID] then\n\t\t\t\t\tstars[targetGUID] = L.CollapsingStar .. \" №\" .. star_num\n\t\t\t\t\tdo\n\t\t\t\t\t\tlocal last = 100\n\t\t\t\t\t\tlocal function getStarPercent()\n\t\t\t\t\t\t\tlocal trackingGUID = targetGUID\n\n\t\t\t\t\t\t\tfor uId in DBM:GetGroupMembers() do\n\t\t\t\t\t\t\t\tlocal unitId = uId .. \"target\"\n\t\t\t\t\t\t\t\tif trackingGUID == UnitGUID(unitId) and mod:GetCIDFromGUID(trackingGUID) == 32955 then\n\t\t\t\t\t\t\t\t\tlast = math.floor(UnitHealth(unitId)/UnitHealthMax(unitId) * 100)\n\t\t\t\t\t\t\t\t\tstars_hp[trackingGUID] = last\n\t\t\t\t\t\t\t\t\tif not warned_star[trackingGUID] and last < 25 then\n\t\t\t\t\t\t\t\t\t\twarned_star[trackingGUID] = true\n\t\t\t\t\t\t\t\t\t\tspecwarnStarLow:Show()\n\t\t\t\t\t\t\t\t\t\tspecwarnStarLow:Play(\"aesoon\")\n\t\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\t\t\treturn last\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\treturn stars_hp[trackingGUID]\n\t\t\t\t\t\tend\n\t\t\t\t\t\tDBM.BossHealth:AddBoss(getStarPercent, stars[targetGUID])\n\t\t\t\t\tend\n\t\t\t\t\tstar_num = star_num + 1\n\t\t\t\tend\n\t\t\tend\n\t\tend\nend, 0.1)\n"
  },
  {
    "path": "DBM-Ulduar/Auriaya.lua",
    "content": "local mod\t= DBM:NewMod(\"Auriaya\", \"DBM-Ulduar\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\n\nmod:SetCreatureID(33515)\nmod:SetEncounterID(750)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 64678 64389 64386 64688 64422\",\n\t\"SPELL_AURA_APPLIED 64396 64455\",\n\t\"SPELL_DAMAGE 64459 64675\",\n\t\"SPELL_MISSED 64459 64675\",\n\t\"UNIT_DIED\"\n)\n\nlocal warnSwarm\t\t\t= mod:NewTargetAnnounce(64396, 2)\nlocal warnFearSoon\t\t= mod:NewSoonAnnounce(64386, 1)\nlocal warnCatDied\t\t= mod:NewAnnounce(\"WarnCatDied\", 3, 64455, nil, nil, nil, 64455)\nlocal warnCatDiedOne\t= mod:NewAnnounce(\"WarnCatDiedOne\", 3, 64455, nil, nil, nil, 64455)\n\nlocal specWarnFear\t\t= mod:NewSpecialWarningSpell(64386, nil, nil, nil, 2, 2)\nlocal specWarnBlast\t\t= mod:NewSpecialWarningInterrupt(64389, \"HasInterrupt\", nil, 2, 1, 2)\nlocal specWarnVoid\t\t= mod:NewSpecialWarningMove(64675, nil, nil, nil, 1, 2)\nlocal specWarnSonic\t\t= mod:NewSpecialWarningMoveTo(64688, nil, nil, nil, 2, 2)\n\nlocal enrageTimer\t\t= mod:NewBerserkTimer(600)\nlocal timerDefender\t\t= mod:NewNextCountTimer(30, 64447, nil, nil, nil, 1) -- First timer is time for boss spellcast, afterwards is time to revive\nlocal timerFear\t\t\t= mod:NewCastTimer(64386, nil, nil, nil, 4)\nlocal timerFearCD\t\t= mod:NewCDTimer(27.7, 64386, nil, nil, nil, 4, nil, nil, true) -- REVIEW! ~9s variance [27.7-36.3]. Added \"Keep\" arg (25m Frostmourne 2022/09/07 || 25m Lordaeron 2022/10/09 || 25m Lordaeron 2022/10/30) - 33.8, 34.3, 32.6 || 34.5, 36.3, 29.1 || 30.4, 28.9, 27.8, 32.4\nlocal timerSwarmCD\t\t= mod:NewCDTimer(31.8, 64396, nil, nil, nil, 1, nil, nil, true) -- REVIEW! ~4s variance? Added \"Keep\" arg (25m Frostmourne 2022/09/07 || 25m Lordaeron 2022/10/09) - 34.5, 32.3 || 31.8\nlocal timerSonicCD\t\t= mod:NewCDTimer(27.2, 64688, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON, true) -- REVIEW! ~10s variance [27.2-37.2]. Added \"Keep\" arg (10m Frostmourne 2022/08/09 || 25m Frostmourne 2022/09/07 || 25m Lordaeron 2022/10/09 || 25m Lordaeron 2022/10/30) - 28.7, 35.4, 37.2 || 30.8, 29.5 || 32.9, 33.4 || 35.1, 27.2, 31.3\nlocal timerSonic\t\t= mod:NewCastTimer(64688, nil, nil, nil, 2)\n\nmod:GroupSpells(64447, 64455) -- Activate Feral Defender, Feral Essence\n\nmod.vb.catLives = 9\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.catLives = 9\n\tenrageTimer:Start(-delay)\n\ttimerFearCD:Start(34.9-delay) -- 18s variance! REVIEW: 25m ~35s, 10m ~50s?? (2022/07/08 10m Lord transcriptor log || 2021 S2 cleu 25m, 10m || VOD review || 10m Frostmourne 2022/08/09 || 25m Lordaeron 2022/10/09 || 25m Lordaeron 2022/10/30) - 53 || 35, 50 || 35, 36 || 34.9 || 34.9 || 35.1\n\ttimerSonicCD:Start(63-delay) -- 33s variance! (... ||| 10m Frostmourne 2022/08/09 || 25m Frostmourne 2022/09/07 || 25m Lordaeron 2022/10/09 || 25m Lordaeron 2022/10/30) 81, 61, 94... ||| 63.0 || 63.0 || 63.0 || 63.0\n\ttimerDefender:Start(59.9-delay, self.vb.catLives)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(64678, 64389) then -- Sentinel Blast\n\t\tspecWarnBlast:Show(args.sourceName)\n\t\tspecWarnBlast:Play(\"kickcast\")\n\telseif args.spellId == 64386 then -- Terrifying Screech\n\t\tspecWarnFear:Show()\n\t\tspecWarnFear:Play(\"fearsoon\")\n\t\ttimerFear:Start()\n\t\ttimerFearCD:Schedule(2)\n\t\twarnFearSoon:Schedule(34)\n\telseif args:IsSpellID(64688, 64422) then --Sonic Screech\n\t\tspecWarnSonic:Show(TANK)\n\t\tspecWarnSonic:Play(\"gathershare\")\n\t\ttimerSonic:Start()\n\t\ttimerSonicCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 64396 then -- Guardian Swarm\n\t\twarnSwarm:Show(args.destName)\n\t\ttimerSwarmCD:Start()\n\telseif spellId == 64455 then -- Feral Essence\n\t\tDBM.BossHealth:AddBoss(34035, L.Defender:format(9))\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, spellId)\n\tif (spellId == 64459 or spellId == 64675) and destGUID == UnitGUID(\"player\") and self:AntiSpam(3) then -- Feral Defender Void Zone\n\t\tspecWarnVoid:Show()\n\t\tspecWarnVoid:Play(\"runaway\")\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 34035 then\n\t\tself.vb.catLives = self.vb.catLives - 1\n\t\tif self.vb.catLives > 0 then\n\t\t\ttimerDefender:Start(nil, self.vb.catLives)\n\t\t\tif self.vb.catLives == 1 then\n\t\t\t\twarnCatDiedOne:Show()\n\t\t\telse\n\t\t\t\twarnCatDied:Show(self.vb.catLives)\n\t\t\tend\n\t\t\tif self.Options.HealthFrame then\n\t\t\t\tDBM.BossHealth:RemoveBoss(34035)\n\t\t\t\tDBM.BossHealth:AddBoss(34035, L.Defender:format(self.vb.catLives))\n\t\t\tend\n\t\telse\n\t\t\tif self.Options.HealthFrame then\n\t\t\t\tDBM.BossHealth:RemoveBoss(34035)\n\t\t\tend\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Ulduar/DBM-Ulduar.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Ulduar|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Ульдуар|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0울두아르|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0奧杜亞|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Ulduar|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMUlduar_AllSavedVars\n## SavedVariablesPerCharacter: DBMUlduar_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: WOTLK\n## X-DBM-StatTypes: normal,normal25\n## X-DBM-Mod-Name: Ulduar\n## X-DBM-Mod-Name-ruRU: Ульдуар\n## X-DBM-Mod-Name-koKR: 울두아르\n## X-DBM-Mod-Name-zhTW: 奧杜亞\n## X-DBM-Mod-Name-zhCN: 奥杜尔\n## X-DBM-Mod-Name-esES: Ulduar\n## X-DBM-Mod-Sort: 4\n## X-DBM-Mod-MapID: 530\n## X-DBM-Mod-LoadZone: Ulduar\n## X-DBM-Mod-LoadZone-frFR: Ulduar\n## X-DBM-Mod-LoadZone-ruRU: Ульдуар\n## X-DBM-Mod-LoadZone-koKR: 울두아르\n## X-DBM-Mod-LoadZone-zhTW: 奧杜亞\n## X-DBM-Mod-LoadZone-zhCN: 奥杜尔\n## X-DBM-Mod-LoadZone-esES: Ulduar\n## X-DBM-Mod-LoadZone-esMX: Ulduar\n## X-DBM-Mod-LoadZone-deDE: Ulduar\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.fr.lua\nlocalization.ru.lua\nlocalization.tw.lua\nlocalization.kr.lua\nlocalization.tw.lua\nlocalization.es.lua\nlocalization.cn.lua\n\nFlameLeviathan.lua\nIgnis.lua\nRazorscale.lua\nXT002.lua\nIronCouncil.lua\nKologarn.lua\nAuriaya.lua\nHodir.lua\nThorim.lua\nFreya.lua\nFreya_Elders.lua\nMimiron.lua\nGeneralVezax.lua\nYoggSaron.lua\nAlgalon.lua\n"
  },
  {
    "path": "DBM-Ulduar/FlameLeviathan.lua",
    "content": "local mod\t= DBM:NewMod(\"FlameLeviathan\", \"DBM-Ulduar\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\n\nmod:SetCreatureID(33113)\nmod:SetEncounterID(744)\n\nmod:RegisterCombat(\"yell\", L.YellPull)\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_SAY\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 62396 62475 62374 62297\",\n\t\"SPELL_AURA_REMOVED 62396 62374\",\n\t\"SPELL_SUMMON 62907\"\n)\n\nlocal warnHodirsFury\t\t\t= mod:NewTargetAnnounce(62297, 3)\nlocal warnPursueTarget\t\t\t= mod:NewAnnounce(\"PursueWarn\", 2, 62374, nil, nil, nil, 62374)\nlocal warnNextPursueSoon\t\t= mod:NewAnnounce(\"warnNextPursueSoon\", 3, 62374, nil, nil, nil, 62374)\n\nlocal specWarnSystemOverload\t= mod:NewSpecialWarningSpell(62475, nil, nil, nil, 1, 12)\nlocal specWarnPursue\t\t\t= mod:NewSpecialWarning(\"SpecialPursueWarnYou\", nil, nil, 2, 4, 2, nil, 62374, 62374)\n\nlocal timerSystemOverload\t\t= mod:NewBuffActiveTimer(20, 62475, nil, nil, nil, 6)\nlocal timerFlameVents\t\t\t= mod:NewCastTimer(10, 62396, nil, nil, nil, 2, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timertFlameVentsCD\t\t= mod:NewCDTimer(19.7, 62396, nil, nil, nil, 2) -- ~0.5s variance (S3 FM Log review 2022/07/17 || 25m Lordaeron 2022/10/30) - 0.1, 20.0, 20.0, 20.1, 20.0, 20.3 || 20.3, 19.7, 20.0, 20.1\nlocal timerPursued\t\t\t\t= mod:NewTargetTimer(30, 62374, nil, nil, nil, 3) -- Variance dependent on whether boss is pulled right after gate opens or not. Corrected using count. S3 FM Log review 2022/07/17 - 0.1, 11.0, 19.0, 30.0, 30.0, 30.0\n\n-- Hard Mode\nmod:AddTimerLine(DBM_COMMON_L.HEROIC_ICON..DBM_CORE_L.HARD_MODE)\nlocal specWarnWardOfLife\t\t= mod:NewSpecialWarning(\"warnWardofLife\", nil, nil, nil, 1, 2, nil, 62907, 62907)\n\nlocal timerNextWardOfLife\t\t= mod:NewNextTimer(30, 62907, nil, nil, nil, 1)\n\nmod.vb.pursueCount = 0\nlocal bossMovingSpeed = 0\nlocal gateSmash = 0\nlocal firstRushPull = false\nlocal guids = {}\nlocal function buildGuidTable(self)\n\ttable.wipe(guids)\n\tfor uId in DBM:GetGroupMembers() do\n\t\tlocal name, server = GetUnitName(uId, true)\n\t\tlocal fullName = name .. (server and server ~= \"\" and (\"-\" .. server) or \"\")\n\t\tguids[UnitGUID(uId..\"pet\") or \"none\"] = fullName\n\tend\nend\n\nlocal function CheckTowers(self, delay)\n\tif DBM:UnitBuff(\"boss1\", 64482) then -- Tower of Life\n\t\ttimerNextWardOfLife:Start(41 - delay) -- S2 VOD review\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\tfirstRushPull = false\n\tDBM:Debug(\"OnCombatStart boss1 was pulled \".. (gateSmash and (GetTime() - gateSmash) or \"nil\") .. \" seconds after Radio say\")\n\tbossMovingSpeed = GetUnitSpeed(\"boss1\") -- 2022/07/22: Failed on two logs... || attempt to identify if boss pulled right after gate opens or if it is stationary, since it will affect Pursue timer accuracy.\n\tif gateSmash ~= 0 and GetTime() - gateSmash < 6.9 then\n\t\tfirstRushPull = true\n\t\tDBM:Debug(\"OnCombatStart boss1 was rush pulled!\")\n\tend\n\tbuildGuidTable(self)\n\tself.vb.pursueCount = 0\n\ttimertFlameVentsCD:Start(20-delay) -- 25 man log review (2022/07/10 || 25m Lordaeron 2022/10/30) - 20.0 || 20.0\n\tself:Schedule(5, CheckTowers, self, delay)\n\tDBM:Debug(\"OnCombatStart boss1 had speed: \"..bossMovingSpeed)\nend\n\nfunction mod:OnTimerRecovery()\n\tbuildGuidTable(self)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 62396 then\t\t-- Flame Vents\n\t\ttimerFlameVents:Start()\n\t\ttimertFlameVentsCD:Start()\n\telseif spellId == 62475 then\t-- Systems Shutdown / Overload\n\t\ttimerSystemOverload:Start()\n\t\ttimertFlameVentsCD:Stop()\n\t\ttimertFlameVentsCD:Start(40) -- Same for 10 and 25m (S3 FM 25HM cleu log 2022/07/16)\n\t\tspecWarnSystemOverload:Show()\n\t\tspecWarnSystemOverload:Play(\"attacktank\")\n\telseif spellId == 62374 then\t-- Pursued\n\t\tlocal target = guids[args.destGUID]\n\t\tself.vb.pursueCount = self.vb.pursueCount + 1 -- Variance in 2nd and 3rd, when pulled during gate animation. Hardcoded based on logs. S3 FM Log review 2022/07/17 - 0.1, 11.0, 19.0, 30.0, 30.0, 30.0\n\t\tif firstRushPull or bossMovingSpeed ~= 0 then\n\t\t\tDBM:Debug(\"Running Pursued timer in gate pull mode. boss1 had speed: \"..bossMovingSpeed) -- 27.99370765686\n\t\t\tif self.vb.pursueCount == 1 then\n\t\t\t\twarnNextPursueSoon:Schedule(5.4)\n\t\t\t\ttimerPursued:Start(10.4, target) -- S2 Lord 2022/07/10 || S3 FM 2022/07/17 - 10.4 || 11.0\n\t\t\telseif self.vb.pursueCount == 2 then\n\t\t\t\twarnNextPursueSoon:Schedule(14.0)\n\t\t\t\ttimerPursued:Start(19.0, target) -- S2 Lord 2022/07/10 || S3 FM 2022/07/17 - 19.6 || 19.0\n\t\t\telse\n\t\t\t\twarnNextPursueSoon:Schedule(25)\n\t\t\t\ttimerPursued:Start(target)\n\t\t\tend\n\t\telse\n\t\t\tDBM:Debug(\"Running Pursued timer in stationary pull mode. boss1 had speed: \"..bossMovingSpeed) -- 0\n\t\t\twarnNextPursueSoon:Schedule(25)\n\t\t\ttimerPursued:Start(target)\n\t\tend\n\t\tif target then\n\t\t\twarnPursueTarget:Show(target)\n\t\t\tif target == UnitName(\"player\") then\n\t\t\t\tspecWarnPursue:Show()\n\t\t\t\tspecWarnPursue:Play(\"justrun\")\n\t\t\tend\n\t\tend\n\telseif spellId == 62297 then\t-- Hodir's Fury (Person is frozen)\n\t\tlocal target = guids[args.destGUID]\n\t\tif target then\n\t\t\twarnHodirsFury:Show(target)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 62396 then\n\t\ttimerFlameVents:Stop()\n\telseif spellId == 62374 then\t-- Pursued\n\t\tlocal target = guids[args.destGUID]\n\t\ttimerPursued:Stop(target)\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 62907 and self:AntiSpam(3, 1) then\t\t-- Ward of Life spawned (Creature id: 34275)\n\t\tspecWarnWardOfLife:Show()\n\t\tspecWarnWardOfLife:Show(\"bigmob\")\n\t\ttimerNextWardOfLife:Start() -- S2 VOD review\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_SAY(msg)\n\tif msg == L.RadioGateSmash then\n\t\tgateSmash = GetTime() -- 6.9170000000004 seconds until FL full stop\n\tend\nend\n"
  },
  {
    "path": "DBM-Ulduar/Freya.lua",
    "content": "local mod\t= DBM:NewMod(\"Freya\", \"DBM-Ulduar\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\n\nmod:SetCreatureID(32906)\nmod:SetEncounterID(753)\nmod:RegisterCombat(\"combat\")\nmod:RegisterKill(\"yell\", L.YellKill)\nmod:SetUsedIcons(4, 5, 6, 7, 8)\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 62437 62859\",\n\t\"SPELL_CAST_SUCCESS 62678 62873 62619 63571 62589 64587 64650 63601 62451 62865\",\n\t\"SPELL_AURA_APPLIED 62283 62438 62439 62861 62862 62930 62451 62865\",\n\t\"SPELL_AURA_REMOVED 62519 62861 62438 63571 62589\",\n\t\"UNIT_DIED\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\"\n)\n\n-- Trash: 33430 Guardian Lasher (flower)\n-- 33355 (nymph)\n-- 33354 (tree)\n\n--\n-- Elder Stonebark (ground tremor / fist of stone)\n-- Elder Brightleaf (unstable sunbeam)\n\n-- General\nlocal warnSimulKill\t\t\t\t= mod:NewAnnounce(\"WarnSimulKill\", 1)\n\nlocal timerEnrage\t\t\t\t= mod:NewBerserkTimer(600)\n\n-- Stage One\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1))\nlocal warnNatureFury\t\t\t= mod:NewTargetAnnounce(63571, 2)\n\nlocal specWarnLifebinder\t\t= mod:NewSpecialWarningSwitch(62869, \"Dps\", nil, nil, 1, 2)\nlocal specWarnNatureFury\t\t= mod:NewSpecialWarningMoveAway(63571, nil, nil, nil, 1, 2)\nlocal yellNatureFury\t\t\t= mod:NewYell(63571)\n\nlocal timerAlliesOfNature\t\t= mod:NewNextTimer(60, 62678, nil, nil, nil, 1, 62947, DBM_COMMON_L.IMPORTANT_ICON..DBM_COMMON_L.DAMAGE_ICON) -- REVIEW! From retail: No longer has CD, they spawn instant last set is dead, and not a second sooner, except first set; 60s log reviewed (25 man HM log 2022/07/17)\nlocal timerSimulKill\t\t\t= mod:NewTimer(12, \"TimerSimulKill\", nil, nil, nil, 5, DBM_COMMON_L.DAMAGE_ICON, nil, nil, nil, nil, nil, nil, 62678)\nlocal timerNatureFury\t\t\t= mod:NewTargetTimer(7.9, 63571, nil, nil, nil, 3) -- ~5s variance (25 man HM log 2022/07/17) - 13.6, 7.9, 8.8, 11.7, 11.7, 12.9, 11.4\nlocal timerLifebinderCD\t\t\t= mod:NewCDTimer(40, 62584, nil, nil, nil, 1, nil, DBM_COMMON_L.IMPORTANT_ICON) -- 10s variance (S2 VOD review || 25 man HM log 2022/07/17) - 40 || 42.7, 42.0; 46.8, 47.2\n\nmod:AddRangeFrameOption(8, 63571)\nmod:AddSetIconOption(\"SetIconOnFury\", 63571, false, false, {7, 8})\n\n-- Stage Two\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2))\nlocal warnPhase2\t\t\t\t= mod:NewPhaseAnnounce(2, 3, nil, nil, nil, nil, nil, 2)\n\nlocal specWarnNatureBombSummon\t= mod:NewSpecialWarningMove(64604) -- Nature Bomb (Summon) - Move away from area of effect when Nature Bomb is summoned\n\nlocal timerNextNatureBombSummon\t= mod:NewNextTimer(2, 64604, nil, nil, nil, 2) -- Nature Bomb (Summon), estimated from first explosion. REVIEW! Has variance (2s?)\nlocal timerNatureBombExplosion\t= mod:NewCastTimer(10, 64587, 34539, nil, nil, 2) -- On explosion, not on summon. Applied a Explosion text. REVIEW! 2s variance from first explosion from the set to the first explosion from the next set (S3 HM log 2022/07/22) - 11, 10.3, 11.9, 11.2, 10.4, 11.3, 10.5\n\n-- Hard Mode\nmod:AddTimerLine(DBM_COMMON_L.HEROIC_ICON..DBM_CORE_L.HARD_MODE)\nlocal warnUnstableBeamSoon\t\t= mod:NewSoonAnnounce(62865, 3) -- Hard mode Sun Beam Elder Brightleaf Alive\nlocal warnIronRoots\t\t\t\t= mod:NewTargetNoFilterAnnounce(62438, 2) -- Hard mode Elder Ironbranch Alive\n\nlocal yellIronRoots\t\t\t\t= mod:NewYell(62438)\nlocal specWarnGroundTremor\t\t= mod:NewSpecialWarningCast(62859, \"SpellCaster\", nil, 2, 1, 2)\t-- Hard mode Elder Stonebark Alive\nlocal specWarnUnstableBeam\t\t= mod:NewSpecialWarningMove(62865, nil, nil, nil, 1, 2)\t-- Hard mode Elder Brightleaf Alive\n\nlocal timerGroundTremorCD\t\t= mod:NewCDTimer(25.5, 62859, nil, nil, nil, 2) -- ~10s variance (25 man HM log 2022/07/17) - 27.4, 25.8, 25.5, 26.5; 26.8, 26.1, 26.2, 25.7, 27.2\nlocal timerIronRootsCD\t\t\t= mod:NewCDTimer(12.1, 62438, nil, nil, nil, 3) -- ~7s variance (could be 10s) (2022/07/05 log review || 25 man HM log 2022/07/17) - 12, 16 || 15.9, 16.5, 14.8, 18.7, 13.8, 12.8, 13.4, 19.1; 13.2, 17.9, 12.1, 15.7, 15.0, 15.9, 12.3, 15.4\nlocal timerUnstableBeamCD\t\t= mod:NewCDTimer(15.6, 62865, nil, nil, nil, 2, nil, nil, true) -- Hard mode Sun Beam. ~5s variance [15-20]. Added \"keep\" arg (2022/07/05 log review || 25 man HM log 2022/07/17 || 25H Lordaeron 2022/10/30) - 18.7, 16.6 || 15.8, 20.0, 17.3, 18.9, 16.1, 16.6, 15.6 ; 20.4, 17.4, 16.5, 18.3, 16.9, 16.1, 16.3 || 17.6\n\nmod:AddSetIconOption(\"SetIconOnRoots\", 62438, false, false, {6, 5, 4})\n\nmod:GroupSpells(64587, 64604) -- Nature Bomb, internal Nature Bomb summon ID\n\nlocal adds = {}\nmod.vb.altIcon = true\nmod.vb.iconId = 6\nmod.vb.waves = 0\nmod.vb.isHardMode = false\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.altIcon = true\n\tself.vb.iconId = 6\n\tself.vb.waves = 0\n\tself:SetStage(1)\n\ttimerEnrage:Start(-delay)\n\ttable.wipe(adds)\n\ttimerAlliesOfNature:Start(10-delay) -- 9.9\n\ttimerLifebinderCD:Start(25-delay) -- ~15s variance (could be more, insufficient data). (25 man HM log 2022/07/17) - 26.1, 39.7\nend\n\nfunction mod:OnCombatEnd(wipe)\n\tif not wipe then\n\t\tif DBT:GetBar(L.TrashRespawnTimer) then\n\t\t\tDBT:CancelBar(L.TrashRespawnTimer)\n\t\tend\n\tend\n\tif self.Options.HealthFrame then\n\t\tDBM.BossHealth:Hide()\n\tend\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(62437, 62859) then\n\t\tspecWarnGroundTremor:Show()\n\t\tspecWarnGroundTremor:Play(\"stopcast\")\n\t\ttimerGroundTremorCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif args:IsSpellID(62678, 62873) then -- REVIEW! Summon Allies of Nature, never fired on Warmane. Instead there are Summon Wave spells: 62688 (confirmed), 62685 and 62686. To be confirmed adequacy via logs\n\t\tDBM:AddMsg(\"Summon Allies of Nature unhidden from combat log. Notify Zidras on Discord or GitHub\")\n\t\tself.vb.waves = self.vb.waves + 1\n\t\tif self.vb.waves < 6 then\n\t\t\ttimerAlliesOfNature:Start()\n\t\tend\n\telseif args.spellId == 62619 and self:GetUnitCreatureId(args.sourceName) == 33228 then -- Pheromones spell, cast by newly spawned Eonar's Gift second they spawn to allow melee to dps them while protector is up.\n\t\tDBM:AddMsg(\"Pheromones unhidden from combat log. Notify Zidras on Discord or GitHub\") -- REVIEW! Pheromones never fired on Warmane. Instead there is only an emote event.\n\t\tspecWarnLifebinder:Show()\n\t\tspecWarnLifebinder:Play(\"targetchange\")\n\t\ttimerLifebinderCD:Start()\n\telseif args:IsSpellID(63571, 62589) then -- Nature's Fury\n\t\tif self.Options.SetIconOnFury then\n\t\t\tself.vb.altIcon = not self.vb.altIcon\t--Alternates between Skull and X\n\t\t\tself:SetIcon(args.destName, self.vb.altIcon and 7 or 8, 10)\n\t\tend\n\t\tif args:IsPlayer() then -- only cast on players; no need to check destFlags\n\t\t\tspecWarnNatureFury:Show()\n\t\t\tspecWarnNatureFury:Play(\"runout\")\n\t\t\tyellNatureFury:Yell()\n\t\t\tif self.Options.RangeFrame then\n\t\t\t\tDBM.RangeCheck:Show(8)\n\t\t\tend\n\t\telse\n\t\t\twarnNatureFury:Show(args.destName)\n\t\tend\n\t\ttimerNatureFury:Start(args.destName)\n\telseif args:IsSpellID(64587, 64650) then -- Nature Bomb\n\t\tif self:AntiSpam(5, 64650) and self:IsInCombat() then\n\t\t\tspecWarnNatureBombSummon:Cancel()\n\t\t\tspecWarnNatureBombSummon:Schedule(4) -- delay to max possible time to avoid warning before bombs are thrown\n\t\t\ttimerNextNatureBombSummon:Start()\n\t\t\ttimerNatureBombExplosion:Start()\n\t\tend\n\telseif spellId == 63601 then -- Strengthened Iron Roots\n\t\tDBM:AddMsg(\"Strengthened Iron Roots unhidden from combat log. Notify Zidras on Discord or GitHub\") -- REVIEW! Strengthened Iron Roots never fired on Warmane. Instead there is only an emote event.\n\t\t--if self.vb.phase == 2 then\n\t\t\ttimerIronRootsCD:Start()\n\t\t--end\n\telseif args:IsSpellID(62451, 62865) and self:AntiSpam(5, 2) then -- Unstable Energy (Sun Beam)\n\t\ttimerUnstableBeamCD:Start()\n\t\twarnUnstableBeamSoon:Schedule(12)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(62283, 62438, 62439, 62861, 62862, 62930) then --  Roots\n\t\twarnIronRoots:CombinedShow(0.5, args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tyellIronRoots:Yell()\n\t\tend\n\t\tself.vb.iconId = self.vb.iconId - 1\n\t\tif self.Options.SetIconOnRoots then\n\t\t\tself:SetIcon(args.destName, self.vb.iconId, 15)\n\t\tend\n\telseif args:IsSpellID(62451, 62865) and args:IsPlayer() then\n\t\tspecWarnUnstableBeam:Show()\n\t\tspecWarnUnstableBeam:Play(\"runaway\")\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 62519 then\n\t\twarnPhase2:Show()\n\t\twarnPhase2:Play(\"ptwo\")\n\t\tself:SetStage(2)\n\t\ttimerNextNatureBombSummon:Start(6) --  Confirmed bug (2022/08/01) that Freya uses this ability before phase 2 begins! No log to identify a trigger for it. REVIEW! variance [?] (VODs) - ~8; ~6\n\t\tspecWarnNatureBombSummon:Schedule(8) -- delayed to the maximum timer possible\n\t\ttimerNatureBombExplosion:Start(13.4) -- REVIEW! variance [?] (S3 HM log 2022/07/22) - 13.4\n\telseif args:IsSpellID(62861, 62438) then\n\t\tif self.Options.SetIconOnRoots then\n\t\t\tself:RemoveIcon(args.destName)\n\t\tend\n\t\tself.vb.iconId = self.vb.iconId + 1\n\telseif args:IsSpellID(63571, 62589) then -- Nature's Fury\n\t\tif self.Options.SetIconOnFury then\n\t\t\tself:RemoveIcon(args.destName)\n\t\tend\n\t\tif args:IsPlayer() and self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Hide()\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 33202 or cid == 32916 or cid == 32919 then\n\t\tif self.Options.HealthFrame then\n\t\t\tDBM.BossHealth:RemoveBoss(cid)\n\t\tend\n\t\tif self:AntiSpam(17, 1) then\n\t\t\ttimerSimulKill:Start()\n\t\t\twarnSimulKill:Show()\n\t\tend\n\t\tadds[cid] = nil\n\t\tlocal counter = 0\n\t\tfor _, _ in pairs(adds) do\n\t\t\tcounter = counter + 1\n\t\tend\n\t\tif counter == 0 then\n\t\t\ttimerSimulKill:Stop()\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(62438) then\n\t\ttimerIronRootsCD:Start()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.YellPullNormal then -- Yell fires before IEEU, so set HM variable here instead of OnCombatStart\n\t\tself.vb.isHardMode = false\n\telseif msg == L.YellPullHard then\n\t\tself.vb.isHardMode = true\n\t\ttimerGroundTremorCD:Start(11) -- 6s variance (could be more, insufficient data). (2022/07/05 10m Lord transcriptor log || 2021 S2 cleu + VOD review || 25 man FM log) - 16 || 11, 13, 17 || 17.5, 11.3\n\t\ttimerIronRootsCD:Start(8.5) -- ~6s variance (could be more, insufficient data). (25 man FM log) - 8.5, 14.9\n\t\ttimerUnstableBeamCD:Start(10.7) -- REVIEW! ~7s variance [10.7-17.5] (25 man FM log || 25H Lordaeron 2022/10/30_1 elder up) - 17.5, 15.5 || 10.7\n\t\twarnUnstableBeamSoon:Schedule(7.7)\n\telseif msg == L.SpawnYell then\n\t\ttimerAlliesOfNature:Start()\n\t\tif self.Options.HealthFrame then\n\t\t\tif not adds[33202] then DBM.BossHealth:AddBoss(33202, L.WaterSpirit) end -- ancient water spirit\n\t\t\tif not adds[32916] then DBM.BossHealth:AddBoss(32916, L.Snaplasher) end  -- snaplasher\n\t\t\tif not adds[32919] then DBM.BossHealth:AddBoss(32919, L.StormLasher) end -- storm lasher\n\t\tend\n\t\tadds[33202] = true\n\t\tadds[32916] = true\n\t\tadds[32919] = true\n\telseif msg == L.YellAdds1 then\n\t\ttimerAlliesOfNature:Start()\n\telseif msg == L.YellAdds2 then\n\t\ttimerAlliesOfNature:Start()\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)\n\tif strmatch(msg, L.EmoteLGift) then\n\t\tspecWarnLifebinder:Show()\n\t\tspecWarnLifebinder:Play(\"targetchange\")\n\t\ttimerLifebinderCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Ulduar/Freya_Elders.lua",
    "content": "local mod\t= DBM:NewMod(\"Freya_Elders\", \"DBM-Ulduar\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220518110528\")\n\n-- passive mod to provide information for multiple fight (trash respawn)\n-- mod:SetCreatureID(32914, 32915, 32913)\n-- mod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(\n\t\"SPELL_CAST_START 62344 62325 62932\",\n\t\"SPELL_AURA_APPLIED 62310 62928\",\n\t\"SPELL_AURA_REMOVED 62310 62928\",\n\t\"UNIT_DIED\"\n)\n\nlocal specWarnImpale\t\t\t= mod:NewSpecialWarningTaunt(62928, nil, nil, nil, 1, 2)\nlocal specWarnFistofStone\t\t= mod:NewSpecialWarningRun(62344, \"Tank\", nil, nil, 4, 2)\nlocal specWarnGroundTremor\t\t= mod:NewSpecialWarningCast(62932, \"SpellCaster\", nil, nil, 1, 2)\n\nlocal timerImpale\t\t\t\t= mod:NewTargetTimer(5, 62928, nil, \"Healer|Tank\", nil, 5)\n\nmod:AddBoolOption(\"TrashRespawnTimer\", true, \"timer\")\n\n-- Trash: 33430 Guardian Lasher (flower)\n-- 33355 (nymph)\n-- 33354 (tree)\n--\n-- Elder Stonebark (ground tremor / fist of stone)\n-- Elder Brightleaf (unstable sunbeam)\n--\n--Mob IDs:\n-- Elder Ironbranch: 32913\n-- Elder Brightleaf: 32915\n-- Elder Stonebark: 32914\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 62344 then\t\t\t\t\t-- Fists of Stone\n\t\tspecWarnFistofStone:Show()\n\t\tspecWarnFistofStone:Play(\"justrun\")\n\telseif args:IsSpellID(62325, 62932) then\t\t-- Ground Tremor\n\t\tspecWarnGroundTremor:Show()\n\t\tspecWarnGroundTremor:Play(\"stopcast\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(62310, 62928) then\t\t\t-- Impale\n\t\tif not args:IsPlayer() then\n\t\t\tspecWarnImpale:Show(args.destName)\n\t\t\tspecWarnImpale:Play(\"tauntboss\")\n\t\tend\n\t\ttimerImpale:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(62310, 62928) then\t\t\t-- Impale\n\t\ttimerImpale:Stop(args.destName)\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tif self.Options.TrashRespawnTimer and not DBT:GetBar(L.TrashRespawnTimer) then\n\t\tlocal guid = tonumber(args.destGUID:sub(9, 12), 16)\n\t\tif guid == 33430 or guid == 33355 or guid == 33354 then\t\t-- guardian lasher / nymph / tree\n\t\t\tDBT:CreateBar(7200, L.TrashRespawnTimer)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Ulduar/GeneralVezax.lua",
    "content": "local mod\t= DBM:NewMod(\"GeneralVezax\", \"DBM-Ulduar\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(33271)\nmod:SetEncounterID(755)\nmod:SetUsedIcons(7, 8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 62661 62662\",\n\t\"SPELL_CAST_SUCCESS 62660 63276 63364\",\n\t\"SPELL_AURA_APPLIED 62662\",\n\t\"SPELL_AURA_REMOVED 62662\",\n\t\"SPELL_INTERRUPT 62661\",\n\t\"UNIT_DIED\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\"\n--\t\"UNIT_SPELLCAST_START boss1\",\n--\t\"UNIT_SPELLCAST_SUCCEEDED boss1\"\n)\n\nlocal warnShadowCrash\t\t\t\t= mod:NewTargetAnnounce(62660, 4)\nlocal warnLeechLife\t\t\t\t\t= mod:NewTargetNoFilterAnnounce(63276, 3)\nlocal warnSaroniteVapor\t\t\t\t= mod:NewCountAnnounce(63322, 2)\n\nlocal specWarnShadowCrash\t\t\t= mod:NewSpecialWarningDodge(62660, nil, nil, nil, 1, 2)\nlocal specWarnShadowCrashNear\t\t= mod:NewSpecialWarningClose(62660, nil, nil, nil, 1, 2)\nlocal yellShadowCrash\t\t\t\t= mod:NewYell(62660)\nlocal specWarnSurgeDarkness\t\t\t= mod:NewSpecialWarningDefensive(62662, nil, nil, 2, 1, 2)\nlocal specWarnMarkoftheFacelessYou\t= mod:NewSpecialWarningMoveAway(63276, nil, nil, nil, 3, 2)\nlocal yellMarkoftheFaceless\t\t\t= mod:NewYell(63276)\nlocal specWarnMarkoftheFacelessNear\t= mod:NewSpecialWarningClose(63276, nil, nil, 2, 1, 2)\nlocal specWarnSearingFlames\t\t\t= mod:NewSpecialWarningInterruptCount(62661, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerEnrage\t\t\t\t\t= mod:NewBerserkTimer(600)\nlocal timerSearingFlamesCast\t\t= mod:NewCastTimer(2, 62661, nil, nil, nil, 5, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerSurgeofDarkness\t\t\t= mod:NewBuffActiveTimer(10, 62662, nil, \"Tank\", nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerNextSurgeofDarkness\t\t= mod:NewCDTimer(51.9, 62662, nil, \"Tank\", nil, 5, nil, DBM_COMMON_L.TANK_ICON) -- REVIEW! 10s variance [50-60; 50-70 from TC]? (25 man NM log 2022/07/10 || S3 HM log 2022/07/21) - 58.0, 51.9 || 55.7, 60.1\nlocal timerSaroniteVapors\t\t\t= mod:NewNextCountTimer(30, 63322, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON) -- Emote not fired if out of range (confirmed as of 2022/07/25). Has variance, but apply 30s regardless\nlocal timerShadowCrashCD\t\t\t= mod:NewCDTimer(8.1, 62660, nil, \"Ranged\", nil, 3) -- 4s variance [8-12] (25 man NM log review 2022/07/10) - 8.8, 10.5, 8.6, 10.6, 10.3, 8.1, 11.8, 9.7, 10.6, 9.8, 14.2, 9.3, 9.1, 8.7, 8.4, 11.5, 8.9\nlocal timerMarkoftheFaceless\t\t= mod:NewTargetTimer(10, 63276, nil, false, 2, 3, nil, DBM_COMMON_L.IMPORTANT_ICON)\nlocal timerMarkoftheFacelessCD\t\t= mod:NewCDTimer(35.9, 63276, nil, nil, nil, 3, nil, DBM_COMMON_L.IMPORTANT_ICON) -- 15s variance [35-45] (25 man NM log 2022/07/10 || S3 HM log 2022/07/21) - 35.9, 41.1, 36.6 || 36.3, 37.6, 37.9, 43.9, 43.8, 40.1\n\nmod:AddSetIconOption(\"SetIconOnShadowCrash\", 62660, true, false, {8})\nmod:AddSetIconOption(\"SetIconOnLifeLeach\", 63276, true, false, {7})\nmod:AddArrowOption(\"CrashArrow\", 62660, true)\n\n-- Hard Mode\nmod:AddTimerLine(DBM_COMMON_L.HEROIC_ICON..DBM_CORE_L.HARD_MODE)\nlocal specWarnAnimus\t\t\t= mod:NewSpecialWarningSwitch(63145, nil, nil, nil, 1, 2)\n\nlocal timerHardmode\t\t\t\t= mod:NewTimer(212, \"hardmodeSpawn\", nil, nil, nil, 1) -- S3 VOD review 2022/07/15\n\nmod.vb.interruptCount = 0\nmod.vb.vaporsCount = 0\n\nlocal function saroniteVaporsSpawned(self)\n\tself.vb.vaporsCount = self.vb.vaporsCount + 1\n\twarnSaroniteVapor:Show(self.vb.vaporsCount)\n\tif self.vb.vaporsCount < 6 then\n\t\ttimerSaroniteVapors:Start(nil, self.vb.vaporsCount + 1)\n\t\tself:Schedule(30, saroniteVaporsSpawned, self) -- only first 6 spawns are relevant for Hard Mode\n\tend\nend\n\n--[[function mod:ShadowCrashTarget(targetname, uId)\n\tif not targetname then return end\n\tif self.Options.SetIconOnShadowCrash then\n\t\tself:SetIcon(targetname, 8, 5)\n\tend\n\tif targetname == UnitName(\"player\") then\n\t\tspecWarnShadowCrash:Show()\n\t\tspecWarnShadowCrash:Play(\"runaway\")\n\t\tyellShadowCrash:Yell()\n\telseif self:CheckNearby(11, targetname) then\n\t\tspecWarnShadowCrashNear:Show(targetname)\n\t\tspecWarnShadowCrashNear:Play(\"runaway\")\n\telse\n\t\twarnShadowCrash:Show(targetname)\n\tend\n\tif uId and self.Options.CrashArrow then\n\t\tlocal x, y = GetPlayerMapPosition(uId)\n\t\tif x == 0 and y == 0 then\n\t\t\tSetMapToCurrentZone()\n\t\t\tx, y = GetPlayerMapPosition(uId)\n\t\tend\n\t\tDBM.Arrow:ShowRunAway(x, y, 13, 5) -- 15yd was too conservative. Try 13yd instead (from personal testing, the hitbox was around ~12.5yd)\n\tend\nend]]\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.interruptCount = 0\n\tself.vb.vaporsCount = 0\n\ttimerShadowCrashCD:Start(8.0-delay) -- REVIEW! variance [8-12s?] (25 man NM log 2022/07/10 || S3 HM log 2022/07/21) - 8.0 || 9.6\n\ttimerMarkoftheFacelessCD:Start(35.1-delay) -- REVIEW! variance 35-45s? (25 man NM log 2022/07/10 || S3 HM log 2022/07/21) - 37.3 || 35.1\n\ttimerSaroniteVapors:Start(30.0-delay, 1) -- Log reviewed (25 man NM log review 2022/07/10)\n\tself:Schedule(30-delay, saroniteVaporsSpawned, self)\n\ttimerEnrage:Start(-delay)\n\ttimerHardmode:Start(-delay)\n\ttimerNextSurgeofDarkness:Start(60.0-delay) -- REVIEW! 10s variance [50-60]? (25 man NM log 2022/07/10 || S3 HM log 2022/07/21) - 60.0 || 60.0\nend\n\n-- Confirmed as of 2022/07/25: CLEU SPELL_CAST_x is randomly failing on Warmane and not firing - https://www.warmane.com/bugtracker/report/112497. Resort to AURA/UNIT_SPELLCAST_x events for now.\n-- EDIT 20/09/2022: after several log reviews and troubleshooting, https://www.warmane.com/bugtracker/report/112497 has been fixed serverside. Reinstating CLEU events.\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 62661 then\t-- Searing Flames\n\t\tself.vb.interruptCount = self.vb.interruptCount + 1\n\t\tif self.vb.interruptCount == 4 then\n\t\t\tself.vb.interruptCount = 1\n\t\tend\n\t\tlocal kickCount = self.vb.interruptCount\n\t\tspecWarnSearingFlames:Show(args.sourceName, kickCount)\n\t\tspecWarnSearingFlames:Play(\"kick\"..kickCount..\"r\")\n\t\ttimerSearingFlamesCast:Start()\n\telseif spellId == 62662 then\n\t\tif self:IsTanking(\"player\", \"boss1\", nil, true) then--Player is current target\n\t\t\tspecWarnSurgeDarkness:Show()\n\t\t\tspecWarnSurgeDarkness:Play(\"defensive\")\n\t\tend\n\t\ttimerNextSurgeofDarkness:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 62660 then\t\t-- Shadow Crash\n--\t\tself:BossTargetScanner(33271, \"ShadowCrashTarget\", 0.05, 20) -- this method is not needed, since CLEU has destName\n\t\ttimerShadowCrashCD:Start()\n\t\tif self.Options.SetIconOnShadowCrash then\n\t\t\tself:SetIcon(args.destName, 8, 5)\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnShadowCrash:Show()\n\t\t\tspecWarnShadowCrash:Play(\"runaway\")\n\t\t\tyellShadowCrash:Yell()\n\t\telseif self:CheckNearby(11, args.destName) then\n\t\t\tspecWarnShadowCrashNear:Show(args.destName)\n\t\t\tspecWarnShadowCrashNear:Play(\"runaway\")\n\t\telse\n\t\t\twarnShadowCrash:Show(args.destName)\n\t\tend\n\t\tif self.Options.CrashArrow then\n\t\t\tlocal uId = DBM:GetRaidUnitId(args.destName)\n\t\t\tlocal x, y = GetPlayerMapPosition(uId)\n\t\t\tif x == 0 and y == 0 then\n\t\t\t\tSetMapToCurrentZone()\n\t\t\t\tx, y = GetPlayerMapPosition(uId)\n\t\t\tend\n\t\t\tDBM.Arrow:ShowRunAway(x, y, 13, 5) -- 15yd was too conservative. Try 13yd instead (from personal testing, the hitbox was around ~12.5yd)\n\t\tend\n\telseif spellId == 63276 then\t-- Mark of the Faceless\n\t\tif self.Options.SetIconOnLifeLeach then\n\t\t\tself:SetIcon(args.destName, 7, 10)\n\t\tend\n\t\ttimerMarkoftheFaceless:Start(args.destName)\n\t\ttimerMarkoftheFacelessCD:Start()\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnMarkoftheFacelessYou:Show()\n\t\t\tspecWarnMarkoftheFacelessYou:Play(\"runout\")\n\t\t\tyellMarkoftheFaceless:Yell()\n\t\telseif self:CheckNearby(11, args.destName) then\n\t\t\tspecWarnMarkoftheFacelessNear:Show(args.destName)\n\t\t\tspecWarnMarkoftheFacelessNear:Play(\"runaway\")\n\t\telse\n\t\t\twarnLeechLife:Show(args.destName)\n\t\tend\n\telseif spellId == 63364 then\n\t\tspecWarnAnimus:Show()\n\t\tspecWarnAnimus:Play(\"bigmob\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 62662 then\t-- Surge of Darkness\n\t\ttimerSurgeofDarkness:Start()\n--[[elseif spellId == 63276 then\t-- Mark of the Faceless\n\t\tif self.Options.SetIconOnLifeLeach then\n\t\t\tself:SetIcon(args.destName, 7, 10)\n\t\tend\n\t\ttimerMarkoftheFaceless:Start(args.destName)\n\t\ttimerMarkoftheFacelessCD:Start()\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnMarkoftheFacelessYou:Show()\n\t\t\tspecWarnMarkoftheFacelessYou:Play(\"runout\")\n\t\t\tyellMarkoftheFaceless:Yell()\n\t\telseif self:CheckNearby(11, args.destName) then\n\t\t\tspecWarnMarkoftheFacelessNear:Show(args.destName)\n\t\t\tspecWarnMarkoftheFacelessNear:Play(\"runaway\")\n\t\telse\n\t\t\twarnLeechLife:Show(args.destName)\n\t\tend]]\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 62662 then\n\t\ttimerSurgeofDarkness:Stop()\n\tend\nend\n\nfunction mod:SPELL_INTERRUPT(args)\n\tif args.spellId == 62661 then\n\t\ttimerSearingFlamesCast:Stop()\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 33488 then--Saronite Vapor\n\t\ttimerHardmode:Stop()\n\tend\nend\n\n-- Range restriced, not reliable enough to sync CHAT_MSG_RAID_BOSS_EMOTE, so a repeating schedule was implemented instead and emote is only used for timer correction.\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(emote)\n\tif emote == L.EmoteSaroniteVapors or emote:find(L.EmoteSaroniteVapors) then\n\t\tself:SendSync(\"SaroniteVaporsSpawned\")\n\tend\nend\n\n--[[function mod:UNIT_SPELLCAST_START(_, spellName)\n\tif spellName == GetSpellInfo(62661) then\t-- Searing Flames\n\t\tself.vb.interruptCount = self.vb.interruptCount + 1\n\t\tif self.vb.interruptCount == 4 then\n\t\t\tself.vb.interruptCount = 1\n\t\tend\n\t\tlocal kickCount = self.vb.interruptCount\n\t\tspecWarnSearingFlames:Show(L.name, kickCount)\n\t\tspecWarnSearingFlames:Play(\"kick\"..kickCount..\"r\")\n\t\ttimerSearingFlamesCast:Start()\n\telseif spellName == GetSpellInfo(62662) then\n\t\tif self:IsTanking(\"player\", \"boss1\", nil, true) then--Player is current target\n\t\t\tspecWarnSurgeDarkness:Show()\n\t\t\tspecWarnSurgeDarkness:Play(\"defensive\")\n\t\tend\n\t\ttimerNextSurgeofDarkness:Start()\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(62660) then\t\t-- Shadow Crash\n\t\tself:BossTargetScanner(33271, \"ShadowCrashTarget\", 0.05, 20)\n\t\ttimerShadowCrashCD:Start()\n\telseif spellName == GetSpellInfo(63364) then\n\t\tself:Unschedule(saroniteVaporsSpawned)\n\t\ttimerSaroniteVapors:Stop()\n\t\tspecWarnAnimus:Show()\n\t\tspecWarnAnimus:Play(\"bigmob\")\n\tend\nend]]\n\nfunction mod:OnSync(msg)\n\tif msg == \"SaroniteVaporsSpawned\" and self:AntiSpam(3, 1) then\n\t\tself:Unschedule(saroniteVaporsSpawned)\n\t\tself:Schedule(30, saroniteVaporsSpawned, self)\n\t\ttimerSaroniteVapors:Restart(30, self.vb.vaporsCount + 1)\n\tend\nend\n"
  },
  {
    "path": "DBM-Ulduar/Hodir.lua",
    "content": "local mod\t= DBM:NewMod(\"Hodir\", \"DBM-Ulduar\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(32845,32926)\nmod:SetEncounterID(751)\nmod:SetUsedIcons(7, 8)\n\nmod:RegisterCombat(\"combat_yell\", L.Pull)\nmod:RegisterKill(\"yell\", L.YellKill)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 61968\",\n\t\"SPELL_AURA_APPLIED 62478 63512 65123 65133\",\n\t\"SPELL_AURA_REMOVED 65123 65133\",\n\t\"SPELL_DAMAGE 62038 62188\"\n)\n\n--TODO, refactor biting cold to track unit aura stacks and start spaming at like 4-5\nlocal warnStormCloud\t\t= mod:NewTargetNoFilterAnnounce(65123)\n\nlocal specWarnFlashFreeze\t= mod:NewSpecialWarningSpell(61968, nil, nil, nil, 3, 2)\nlocal specWarnStormCloud\t= mod:NewSpecialWarningYou(65123, nil, nil, nil, 1, 2)\nlocal yellStormCloud\t\t= mod:NewYell(65123)\nlocal specWarnBitingCold\t= mod:NewSpecialWarningMove(62188, nil, nil, nil, 1, 2)\n\nlocal enrageTimer\t\t\t= mod:NewBerserkTimer(475)\nlocal timerFlashFreeze\t\t= mod:NewCastTimer(9, 61968, nil, nil, nil, 2, nil, DBM_COMMON_L.IMPORTANT_ICON..DBM_COMMON_L.DEADLY_ICON)\nlocal timerFrozenBlows\t\t= mod:NewBuffActiveTimer(20, 63512, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.HEALER_ICON)\nlocal timerFlashFrCD\t\t= mod:NewCDTimer(48, 61968, nil, nil, nil, 2, nil, DBM_COMMON_L.IMPORTANT_ICON..DBM_COMMON_L.DEADLY_ICON) -- REVIEW! Need logs to validate (25 man S2 VOD review) - 48, 48\nlocal timerAchieve\t\t\t= mod:NewAchievementTimer(179, 3182)\n\nmod:AddSetIconOption(\"SetIconOnStormCloud\", 65123, true, false, {8, 7})\n\nmod.vb.stormCloudIcon = 8\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.stormCloudIcon = 8\n\tenrageTimer:Start(-delay)\n\ttimerAchieve:Start()\n\ttimerFlashFrCD:Start(63-delay) -- REVIEW! Need more logs to validate variance (25 man log review (2022/07/10) || S2 VOD review) - 66.7 || 63, 65\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 61968 then\n\t\ttimerFlashFreeze:Start()\n\t\tspecWarnFlashFreeze:Show()\n\t\tspecWarnFlashFreeze:Play(\"findshelter\")\n\t\ttimerFlashFrCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(62478, 63512) then\n\t\ttimerFrozenBlows:Start()\n\telseif args:IsSpellID(65123, 65133) then\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnStormCloud:Show()\n\t\t\tspecWarnStormCloud:Play(\"gathershare\")\n\t\t\tyellStormCloud:Yell()\n\t\telse\n\t\t\twarnStormCloud:Show(args.destName)\n\t\tend\n\t\tif self.Options.SetIconOnStormCloud then\n\t\t\tself:SetIcon(args.destName, self.vb.stormCloudIcon)\n\t\tend\n\t\tif self.vb.stormCloudIcon == 8 then\t-- There is a chance 2 ppl will have the buff on 25 player, so we are alternating between 2 icons\n\t\t\tself.vb.stormCloudIcon = 7\n\t\telse\n\t\t\tself.vb.stormCloudIcon = 8\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(65123, 65133) then\n\t\tif self.Options.SetIconOnStormCloud then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, spellId)\n\tif (spellId == 62038 or spellId == 62188) and destGUID == UnitGUID(\"player\") and self:AntiSpam(4) then\n\t\tspecWarnBitingCold:Show()\n\t\tspecWarnBitingCold:Play(\"keepmove\")\n\tend\nend\n"
  },
  {
    "path": "DBM-Ulduar/Ignis.lua",
    "content": "local mod\t= DBM:NewMod(\"Ignis\", \"DBM-Ulduar\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(33118)\nmod:SetEncounterID(745)\nmod:SetUsedIcons(8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 62680 63472 62488\",\n\t\"SPELL_CAST_SUCCESS 62548 63474\",\n\t\"SPELL_AURA_APPLIED 62717 63477 62382\",\n\t\"SPELL_AURA_REMOVED 62717 63477\"\n)\n\nlocal warnSlagPot\t\t\t\t= mod:NewTargetNoFilterAnnounce(63477, 3)\nlocal warnConstruct\t\t\t\t= mod:NewCountAnnounce(62488, 2)\n\nlocal specWarnFlameJetsCast\t\t= mod:NewSpecialWarningCast(63472, \"SpellCaster\", nil, nil, 2, 2)\nlocal specWarnFlameBrittle\t\t= mod:NewSpecialWarningSwitch(62382, \"Dps\", nil, nil, 1, 2)\n\nlocal timerFlameJetsCast\t\t= mod:NewCastTimer(2.7, 63472, nil, nil, nil, 5, nil, DBM_COMMON_L.IMPORTANT_ICON)\nlocal timerFlameJetsCooldown\t= mod:NewCDTimer(45.1, 63472, nil, nil, nil, 2, nil, DBM_COMMON_L.IMPORTANT_ICON, true) -- 10/25 diff. ~3s variance. Transcriptor snippet below. Added \"keep\" arg\nlocal timerActivateConstruct\t= mod:NewCDCountTimer(30, 62488, nil, nil, nil, 1, nil, nil, true) -- 10/25 diff. ~6s variance. Transcriptor snippet below. Added \"keep\" arg\nlocal timerScorchCast\t\t\t= mod:NewCastTimer(3, 63473)\nlocal timerScorchCooldown\t\t= mod:NewCDTimer(31, 63473, nil, nil, nil, 5) -- 10/25 diff. ~1s variance. Transcriptor snippet below\nlocal timerSlagPot\t\t\t\t= mod:NewTargetTimer(10, 63477, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerAchieve\t\t\t\t= mod:NewAchievementTimer(240, 2930)\n\nlocal soundAuraMastery\t\t\t= mod:NewSound(63472, \"soundConcAuraMastery\")\n\nmod:AddSetIconOption(\"SlagPotIcon\", 63477, false, false, {8})\n\nmod.vb.ConstructCount = 0\n\nlocal function isBuffOwner(uId, spellId)\n\tif not uId and not spellId then return end\n\tlocal _, _, _, _, _, _, _, unitCaster = DBM:UnitBuff(uId, spellId)\n\tif unitCaster == uId then\n\t\treturn true\n\telse\n\t\treturn false\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.ConstructCount = 0\n\ttimerAchieve:Start()\n\ttimerActivateConstruct:Start(15-delay, 1) -- REVIEW! variance? (10m Frostmourne 2022/07/17 || 25m Lordaeron 2022/10/05 || 25m Lordaeron 2022/10/09) - 15.0 || 15.0 || 15.0\n\ttimerScorchCooldown:Start(25-delay) -- (10m Frostmourne 2022/07/17 || 25m Lordaeron 2022/10/05 || 25m Lordaeron 2022/10/09) - 25.0 || 25.0 || 25.0\n\ttimerFlameJetsCooldown:Start(30-delay) -- 25 man log review (2022/07/10)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(62680, 63472) then\t\t-- Flame Jets\n\t\ttimerFlameJetsCast:Start()\n\t\tspecWarnFlameJetsCast:Show()\n\t\tif self.Options.soundConcAuraMastery and isBuffOwner(\"player\", 19746) then -- Concentration Aura Mastery by a Paladin will negate the interrupt effect of Flame Jets\n\t\t\tsoundAuraMastery:Play(\"Interface\\\\AddOns\\\\DBM-Core\\\\sounds\\\\PlayerAbilities\\\\AuraMastery.ogg\")\n\t\telse\n\t\t\tspecWarnFlameJetsCast:Play(\"stopcast\")\n\t\tend\n\t\ttimerFlameJetsCooldown:Start(self:IsDifficulty(\"normal10\") and 41.5 or 45.1) -- 10/25 different. ~5s variance (25 man log review 2022/07/10 || 10m Frostmourne 2022/07/17 || 25m Lordaeron 2022/10/05 || 25m Lordaeron 2022/10/09) - 45.1, 47.0 || 43.5, 41.5, 45.9, 41.9 || 47.2, 45.8, 47.0 || 48.9, 46.6\n\telseif args.spellId == 62488 then\t\t-- Activate Construct\n\t\tself.vb.ConstructCount = self.vb.ConstructCount + 1\n\t\twarnConstruct:Show(self.vb.ConstructCount)\n\t\tif self.vb.ConstructCount < 20 then\n\t\t\ttimerActivateConstruct:Start(self:IsDifficulty(\"normal10\") and 43 or 33, self.vb.ConstructCount+1) -- 10/25 different. ~6s variance (25 man log review 2022/07/10 || 10m Frostmourne 2022/07/17 || 25m Lordaeron 2022/10/05 || 25m Lordaeron 2022/10/09) - 33.5, 38.5, 37.8 || 43.1, 46.0, 43.0, 46.0, 43.0 || 33.0, 39.1, 38.7, 39.0 || 33.0, 39.0, 36.0, 39.0\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(62548, 63474) then\t-- Scorch\n\t\ttimerScorchCast:Start()\n\t\ttimerScorchCooldown:Start(self:IsDifficulty(\"normal10\") and 28 or 31) -- 10/25 different. ~1s variance (25 man log review 2022/07/10 || 10m Frostmourne 2022/07/17 || 25m Lordaeron 2022/10/05 || 25m Lordaeron 2022/10/09) - 31.0, 32.0, 31.0 || 28.0, 28.1, 28.1, 28.0, 28.0, 29.0, 28.0 || 31.0, 32.1, 31.1, 31.0, 31.0 || 31.0, 32.0, 31.0, 31.1\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(62717, 63477) then\t\t-- Slag Pot\n\t\twarnSlagPot:Show(args.destName)\n\t\ttimerSlagPot:Start(args.destName)\n\t\tif self.Options.SlagPotIcon then\n\t\t\tself:SetIcon(args.destName, 8, 10)\n\t\tend\n\telseif args.spellId == 62382 and self:AntiSpam(5, 1) then\n\t\tspecWarnFlameBrittle:Show()\n\t\tspecWarnFlameBrittle:Play(\"killmob\")\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(62717, 63477) then\t\t-- Slag Pot\n\t\tif self.Options.SlagPotIcon then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-Ulduar/IronCouncil.lua",
    "content": "local mod\t= DBM:NewMod(\"IronCouncil\", \"DBM-Ulduar\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(32867, 32927, 32857)\nmod:SetEncounterID(748)\nmod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7, 8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 61920 63479 61879 61903 63493 62274 63489 62273 61973\",\n\t\"SPELL_CAST_SUCCESS 63490 62269 61869 63481\",\n\t\"SPELL_AURA_APPLIED 61903 63493 62269 63490 62277 63967 64637 61888 63486 61887 61912 63494 63483 61915\",\n\t\"SPELL_AURA_REMOVED 64637 61888 63483 61915 61912 63494\",\n\t\"UNIT_DIED\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss2\"\n)\n\nmod:SetBossHealthInfo(\n\t32867, L.Steelbreaker,\n\t32927, L.RunemasterMolgeim,\n\t32857, L.StormcallerBrundir\n)\n\n-- General\nlocal enrageTimer\t\t\t\t= mod:NewBerserkTimer(900)\n\nmod:AddRangeFrameOption(20, nil, true)\n\n-- Stormcaller Brundir\n-- High Voltage ... 63498\nmod:AddTimerLine(L.StormcallerBrundir)\nlocal warnChainlight\t\t\t= mod:NewSpellAnnounce(64215, 2, nil, false, 2)\n\nlocal specwarnLightningTendrils\t= mod:NewSpecialWarningRun(63486, nil, nil, nil, 4, 2)\nlocal specwarnOverload\t\t\t= mod:NewSpecialWarningRun(63481, nil, nil, nil, 4, 2)\nlocal specWarnLightningWhirl\t= mod:NewSpecialWarningInterrupt(63483, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerOverload\t\t\t\t= mod:NewCastTimer(6, 63481, nil, nil, nil, 2, nil, DBM_COMMON_L.IMPORTANT_ICON)\nlocal timerOverloadCD\t\t\t= mod:NewCDTimer(60, 63481, nil, nil, nil, 2, nil, DBM_COMMON_L.IMPORTANT_ICON, nil, 1)\nlocal timerLightningWhirl\t\t= mod:NewCastTimer(5, 63483, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\nlocal timerLightningWhirlCD\t\t= mod:NewCDTimer(32, 63483)\nlocal timerLightningTendrils\t= mod:NewBuffActiveTimer(35, 63486, nil, nil, nil, 6)\nmod:AddBoolOption(\"AlwaysWarnOnOverload\", false, \"announce\", nil, nil, nil, 63481)\n\n-- Runemaster Molgeim\n-- Lightning Blast ... don't know, maybe 63491\nmod:AddTimerLine(L.RunemasterMolgeim)\nlocal warnRuneofPower\t\t\t= mod:NewTargetNoFilterAnnounce(64320, 2)\nlocal warnRuneofDeathIn10Sec\t= mod:NewSoonAnnounce(63490, 3)\nlocal warnRuneofDeath\t\t\t= mod:NewSpellAnnounce(63490, 2)\nlocal warnShieldofRunes\t\t\t= mod:NewSpellAnnounce(62274, 2)\nlocal warnRuneofSummoning\t\t= mod:NewSpellAnnounce(62273, 3)\n\nlocal specwarnRuneofDeath\t\t= mod:NewSpecialWarningMove(63490, nil, nil, nil, 1, 2)\nlocal specWarnRuneofShields\t\t= mod:NewSpecialWarningDispel(62274, \"MagicDispeller\", nil, nil, 1, 2)\n\nlocal timerRuneofShields\t\t= mod:NewBuffActiveTimer(15, 62274, nil, nil, nil, 5, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerRuneofDeath\t\t\t= mod:NewCDTimer(30, 63490, nil, nil, nil, 3)\nlocal timerRuneofPowerCast\t\t= mod:NewCastTimer(1.5, 61973, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)  -- One log review (2022/07/05) - 60.0\nlocal timerRuneofPowerCD\t\t= mod:NewCDTimer(60, 61973, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)  -- One log review (2022/07/05) - 60.0\nlocal timerRuneofSummoning\t\t= mod:NewCDTimer(30, 62273, nil, nil, nil, 1)\n\n-- Steelbreaker\n-- High Voltage ... don't know what to show here - 63498\nmod:AddTimerLine(L.Steelbreaker)\nlocal warnFusionPunch\t\t\t= mod:NewSpellAnnounce(61903, 4)\nlocal warnOverwhelmingPower\t\t= mod:NewTargetAnnounce(61888, 2)\nlocal warnStaticDisruption\t\t= mod:NewTargetAnnounce(63494, 3)\n\nlocal timerOverwhelmingPower\t= mod:NewTargetTimer(25, 61888, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.DEADLY_ICON, nil, 3)\nlocal timerFusionPunchCast\t\t= mod:NewCastTimer(3, 61903, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.MAGIC_ICON)\nlocal timerFusionPunchActive\t= mod:NewTargetTimer(4, 61903, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.MAGIC_ICON)\nmod:AddSetIconOption(\"SetIconOnOverwhelmingPower\", 61888, false, false, {8})\nmod:AddSetIconOption(\"SetIconOnStaticDisruption\", 63494, false, false, {1, 2, 3, 4, 5, 6, 7})\n\n-- Hard Mode\nmod:AddTimerLine(DBM_COMMON_L.HEROIC_ICON..DBM_CORE_L.HARD_MODE)\nlocal warnSupercharge\t\t\t= mod:NewSpellAnnounce(61920, 3)\n\nmod:GroupSpells(64320, 61973) -- Rune of Power, buff and cast\n\nlocal disruptTargets = {}\nmod.vb.disruptIcon = 7\nlocal runemasterAlive = true\nlocal brundirAlive = true\nlocal steelbreakerAlive = true\n\nlocal function ResetRange(self)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:DisableBossMode()\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\tenrageTimer:Start(-delay)\n\ttimerRuneofPowerCD:Start(20-delay) -- One log review (2022/07/05)\n\ttimerOverloadCD:Start(68) -- REVIEW! Insufficent data to validate if it's correct\n\ttable.wipe(disruptTargets)\n\tself.vb.disruptIcon = 7\n\trunemasterAlive = true\n\tbrundirAlive = true\n\tsteelbreakerAlive = true\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:RuneTarget(targetname)\n\tif not targetname then return end\n\twarnRuneofPower:Show(targetname)\nend\n\nlocal function warnStaticDisruptionTargets(self)\n\twarnStaticDisruption:Show(table.concat(disruptTargets, \"<, >\"))\n\ttable.wipe(disruptTargets)\n\tself.vb.disruptIcon = 7\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 61920 then -- Supercharge - Unleashes one last burst of energy as the caster dies, increasing all allies damage by 25% and granting them an additional ability.\n\t\twarnSupercharge:Show()\n\telseif args:IsSpellID(63479, 61879) then\t-- Chain light\n\t\twarnChainlight:Show()\n\telseif args:IsSpellID(61903, 63493) then\t-- Fusion Punch\n\t\twarnFusionPunch:Show()\n\t\ttimerFusionPunchCast:Start()\n\telseif args:IsSpellID(62274, 63489) then\t-- Shield of Runes\n\t\twarnShieldofRunes:Show()\n\telseif spellId == 62273 then\t\t\t-- Rune of Summoning\n\t\twarnRuneofSummoning:Show()\n\t\ttimerRuneofSummoning:Start()\n\telseif spellId == 61973 then\t-- Rune of Power (cast success not fired on Warmane, and not correct to check target after cast either)\n\t\tself:BossTargetScanner(32927, \"RuneTarget\", 0.1, 16, true, true)--Scan only boss unitIDs, scan only hostile targets\n\t\ttimerRuneofPowerCast:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(63490, 62269) then\t\t-- Rune of Death\n\t\twarnRuneofDeath:Show()\n\t\ttimerRuneofDeath:Start()\n\t\twarnRuneofDeathIn10Sec:Schedule(20)\n\telseif args:IsSpellID(61869, 63481) then\t-- Overload\n\t\ttimerOverload:Start()\n\t\ttimerOverloadCD:Start()\n\t\tif self.Options.AlwaysWarnOnOverload or UnitGUID(\"target\") == args.sourceGUID or self:CheckTankDistance(args.sourceGUID, 15) then\n\t\t\tspecwarnOverload:Show()\n\t\t\tspecwarnOverload:Play(\"justrun\")\n\t\tend\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:SetBossRange(20, self:GetBossUnitByCreatureId(32857))\n\t\t\tself:Schedule(6.5, ResetRange, self)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(61903, 63493) then\t\t-- Fusion Punch\n\t\ttimerFusionPunchActive:Start(args.destName)\n\telseif args:IsSpellID(62269, 63490) then\t-- Rune of Death - move away from it\n\t\tif args:IsPlayer() then\n\t\t\tspecwarnRuneofDeath:Show()\n\t\t\tspecwarnRuneofDeath:Play(\"runaway\")\n\t\tend\n\telseif args:IsSpellID(62277, 63967) and not args:IsDestTypePlayer() then\t\t-- Shield of Runes\n\t\tspecWarnRuneofShields:Show(args.destName)\n\t\tspecWarnRuneofShields:Play(\"dispelboss\")\n\t\ttimerRuneofShields:Start()\n\telseif args:IsSpellID(64637, 61888) then\t-- Overwhelming Power\n\t\twarnOverwhelmingPower:Show(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tif self.Options.RangeFrame then\n\t\t\t\tDBM.RangeCheck:Show(20)\n\t\t\tend\n\t\tend\n\t\tif self:IsDifficulty(\"normal10\") then\n\t\t\ttimerOverwhelmingPower:Start(60, args.destName)\n\t\telse\n\t\t\ttimerOverwhelmingPower:Start(35, args.destName)\n\t\tend\n\t\tif self.Options.SetIconOnOverwhelmingPower then\n\t\t\tif self:IsDifficulty(\"normal10\") then\n\t\t\t\tself:SetIcon(args.destName, 8, 60) -- skull for 60 seconds (until meltdown)\n\t\t\telse\n\t\t\t\tself:SetIcon(args.destName, 8, 35) -- skull for 35 seconds (until meltdown)\n\t\t\tend\n\t\tend\n\telseif args:IsSpellID(63486, 61887) then\t-- Lightning Tendrils\n\t\ttimerLightningTendrils:Start()\n\t\tspecwarnLightningTendrils:Show()\n\t\tspecwarnLightningTendrils:Play(\"justrun\")\n\telseif args:IsSpellID(61912, 63494) then\t-- Static Disruption (Hard Mode)\n\t\tdisruptTargets[#disruptTargets + 1] = args.destName\n\t\tif self.Options.SetIconOnStaticDisruption and self.vb.disruptIcon > 0 then\n\t\t\tself:SetIcon(args.destName, self.vb.disruptIcon, 20)\n\t\tend\n\t\tself.vb.disruptIcon = self.vb.disruptIcon - 1\n\t\tself:Unschedule(warnStaticDisruptionTargets)\n\t\tself:Schedule(0.3, warnStaticDisruptionTargets, self)\n\telseif args:IsSpellID(63483, 61915) then\t-- Lightning Whirl\n\t\ttimerLightningWhirl:Start()\n\t\ttimerLightningWhirlCD:Start()\n\t\tif self:CheckInterruptFilter(args.destGUID, false, true) then\n\t\t\tspecWarnLightningWhirl:Show(args.destName)\n\t\t\tspecWarnLightningWhirl:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(64637, 61888) then\t-- Overwhelming Power\n\t\tif self.Options.SetIconOnOverwhelmingPower then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\telseif args:IsSpellID(63483, 61915) then\t-- LightningWhirl\n\t\ttimerLightningWhirl:Stop()\n\telseif args:IsSpellID(61912, 63494) then\t-- Static Disruption (Hard Mode)\n\t\tif self.Options.SetIconOnStaticDisruption then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 32867 then\t\t--Steelbreaker\n\t\tsteelbreakerAlive = false\n\t\tif runemasterAlive and brundirAlive then\n\t\t\ttimerRuneofDeath:Start()\n\t\t\twarnRuneofDeathIn10Sec:Schedule(20)\n\t\t\ttimerLightningWhirlCD:Start()\n\t\telseif runemasterAlive then\n\t\t\ttimerRuneofSummoning:Start(25)\n\t\tend\n\t\ttimerFusionPunchCast:Cancel()\n\telseif cid == 32927 then\t--Runemaster Molgeim\n\t\trunemasterAlive = false\n\t\tif brundirAlive and steelbreakerAlive then\n\t\t\ttimerLightningWhirlCD:Start()\n\t\tend\n\t\ttimerRuneofDeath:Cancel()\n\t\twarnRuneofDeathIn10Sec:Cancel()\n\t\ttimerRuneofPowerCD:Cancel()\n\t\ttimerRuneofPowerCast:Cancel()\n\telseif cid == 32857 then\t--Stormcaller Brundir\n\t\tbrundirAlive = false\n\t\tif runemasterAlive and steelbreakerAlive then\n\t\t\ttimerRuneofDeath:Start()\n\t\t\twarnRuneofDeathIn10Sec:Schedule(20)\n\t\telseif runemasterAlive then\n\t\t\ttimerRuneofSummoning:Start(25)\n\t\tend\n\t\ttimerOverload:Cancel()\n\t\ttimerOverloadCD:Cancel()\n\t\ttimerLightningWhirl:Cancel()\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(61973) then\t-- Rune of Power\n\t\ttimerRuneofPowerCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Ulduar/Kologarn.lua",
    "content": "local mod\t= DBM:NewMod(\"Kologarn\", \"DBM-Ulduar\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(32930)\nmod:SetEncounterID(749)\nmod:SetUsedIcons(5, 6, 7, 8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 64003 62166 63981\",\n\t\"SPELL_AURA_APPLIED 64290 64292 64002 63355\",\n\t\"SPELL_AURA_APPLIED_DOSE 64002 63355\",\n\t\"SPELL_AURA_REMOVED 64290 64292\",\n\t\"SPELL_DAMAGE 63783 63982 63346 63976\",\n\t\"SPELL_MISSED 63783 63982 63346 63976\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\"UNIT_DIED\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1\"\n)\n\nmod:SetBossHealthInfo(\n\t32930, L.Health_Body,\n\t32934, L.Health_Right_Arm,\n\t32933, L.Health_Left_Arm\n)\n\n-- General\nlocal enrageTimer\t\t\t\t= mod:NewBerserkTimer(600)\nlocal timerTimeForDisarmed\t\t= mod:NewTimer(10, \"achievementDisarmed\")\t-- 10 HC / 12 nonHC\n\n--NOTE: Two crunch armors are setup to appear in gui twice on purpose, because they are very different mechanically. One is meant to be ignored and one is meant to be tank swap\n-- Kologarn\nmod:AddTimerLine(L.name)\nlocal warnFocusedEyebeam\t\t= mod:NewTargetNoFilterAnnounce(63346, 4)\nlocal warnCrunchArmor\t\t\t= mod:NewStackAnnounce(64002, 2, nil, \"Tank|Healer\")\n\nlocal specWarnCrunchArmor2\t\t= mod:NewSpecialWarningStack(64002, nil, 2, nil, 2, 1, 6)\nlocal specWarnEyebeam\t\t\t= mod:NewSpecialWarningRun(63346, nil, nil, nil, 4, 2)\nlocal specWarnEyebeamNear\t\t= mod:NewSpecialWarningClose(63346, nil, nil, nil, 1, 2)\nlocal yellBeam\t\t\t\t\t= mod:NewYell(63346)\n\nlocal timerCrunch10\t\t\t\t= mod:NewTargetTimer(6, 63355)\nlocal timerNextSmash\t\t\t= mod:NewCDTimer(14.4, 64003, nil, \"Tank\", nil, 5, nil, DBM_COMMON_L.TANK_ICON) -- 3s variance (2022/07/05 log review) - 16.7, 14.4, 14.4, 16.8, 14.4, 14.4 || 13.7, 16.8, 14.4, 14.4, 14.4 || 16.0, 14.3, 16.8, 14.4 || 16.8, 14.4, 14.4, 14.4, 16.8 || 14.1, 14.4, 16.8, 14.4\nlocal timerNextEyebeam\t\t\t= mod:NewCDTimer(15.9, 63346, nil, nil, nil, 3, nil, DBM_COMMON_L.IMPORTANT_ICON, true) -- almost 20s variance! Added \"keep\" arg (2022/07/05 log review || ... ||| 25m Lordaeron 2022/10/09 || 25m Lordaeron 2022/10/30) - 28, 31, 27 || 21, 19, 17, 33 || 25 || 33, 23 || 30, 16 ||| 23.0, 15.9, 23.3, 25.2 || 21.2, 22.9, 17.5, 30.1, 22.9\n\nmod:AddSetIconOption(\"SetIconOnEyebeamTarget\", 63346, true, false, {8})\n\n-- Right Arm\nmod:AddTimerLine(L.Health_Right_Arm)\nlocal warnGrip\t\t\t\t\t= mod:NewTargetNoFilterAnnounce(64292, 2)\n\nlocal timerNextGrip\t\t\t\t= mod:NewNextTimer(25, 62166, nil, nil, nil, 3) -- (2022/07/05 log review || 25m Lordaeron 2022/10/30) - 25.0 || 25.0, 25.1, 25.0\nlocal timerRespawnRightArm\t\t= mod:NewTimer(30, \"timerRightArm\", nil, nil, nil, 1)\n\nmod:AddSetIconOption(\"SetIconOnGripTarget\", 64292, true, false, {7, 6, 5})\n\n-- Left Arm\nmod:AddTimerLine(L.Health_Left_Arm)\nlocal timerNextShockwave\t\t= mod:NewNextTimer(25, 63982, nil, nil, nil, 2) -- (2022/07/05 log review || 25m Lordaeron 2022/10/30) - 25.0 || 25.0, 25.0, 25.0, 25.1\nlocal timerRespawnLeftArm\t\t= mod:NewTimer(30, \"timerLeftArm\", nil, nil, nil, 1)\n\n-- 5/23 00:33:48.648  SPELL_AURA_APPLIED,0x0000000000000000,nil,0x80000000,0x0480000001860FAC,\"Hâzzad\",0x4000512,63355,\"Crunch Armor\",0x1,DEBUFF\n-- 6/3 21:41:56.140 UNIT_DIED,0x0000000000000000,nil,0x80000000,0xF1500080A60274A0,\"Rechter Arm\",0xa48\n\nmod:GroupSpells(64292, 62166) -- Stone Grip aura and cast\n\nmod.vb.disarmActive = false\nlocal gripTargets = {}\n\nlocal function armReset(self)\n\tself.vb.disarmActive = false\nend\n\nlocal function GripAnnounce(self)\n\twarnGrip:Show(table.concat(gripTargets, \"<, >\"))\n\ttable.wipe(gripTargets)\nend\n\nfunction mod:OnCombatStart(delay)\n\tenrageTimer:Start(-delay)\n\ttimerNextSmash:Start(5-delay) -- 2s variance (2022/07/05 log review) - [5-7]\n\ttimerNextEyebeam:Start(20.2-delay) -- (2022/07/05 log review || 25m Lordaeron 2022/10/30) - 21 || 20.2\n\ttimerNextShockwave:Start(18.2-delay) -- (2022/07/05 log review || 25m Lordaeron 2022/10/30) - 19 || 18.2\n\ttimerNextGrip:Start(24.2-delay) --  (25m Lordaeron 2022/10/30) - 24.2\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 64003 then\n\t\ttimerNextSmash:Start()\n\telseif args.IsSpellID(62166, 63981) then -- Stone Grip\n\t\ttimerNextGrip:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(64290, 64292) then\n\t\tif self.Options.SetIconOnGripTarget then\n\t\t\tself:SetIcon(args.destName, 8 - #gripTargets, 10)\n\t\tend\n\t\ttable.insert(gripTargets, args.destName)\n\t\tself:Unschedule(GripAnnounce)\n\t\tif #gripTargets >= 3 then\n\t\t\tGripAnnounce(self)\n\t\telse\n\t\t\tself:Schedule(0.3, GripAnnounce, self)\n\t\tend\n\telseif args:IsSpellID(64002, 63355) then\t-- Crunch Armor\n\t\tlocal amount = args.amount or 1\n\t\tif amount >= 2 then\n\t\t\tif args:IsPlayer() then\n\t\t\t\tspecWarnCrunchArmor2:Show(amount)\n\t\t\t\tspecWarnCrunchArmor2:Play(\"stackhigh\")\n\t\t\telse\n\t\t\t\twarnCrunchArmor:Show(args.destName, amount)\n\t\t\tend\n\t\telse\n\t\t\twarnCrunchArmor:Show(args.destName, amount)\n\t\tend\n\t\tif self:IsDifficulty(\"normal10\") then\n\t\t\ttimerCrunch10:Start(args.destName)  -- We track duration timer only in 10-man since it's only 6sec and tanks don't switch.\n\t\tend\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(64290, 64292) then\n\t\tself:SetIcon(args.destName, 0)\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tif self:GetCIDFromGUID(args.destGUID) == 32934 then\t\t-- right arm\n\t\ttimerRespawnRightArm:Start()\n\t\ttimerNextGrip:Cancel()\n\t\tif not self.vb.disarmActive then\n\t\t\tself.vb.disarmActive = true\n\t\t\tif self:IsDifficulty(\"normal10\") then\n\t\t\t\ttimerTimeForDisarmed:Start(12)\n\t\t\t\tself:Schedule(12, armReset, self)\n\t\t\telse\n\t\t\t\ttimerTimeForDisarmed:Start()\n\t\t\t\tself:Schedule(10, armReset, self)\n\t\t\tend\n\t\tend\n\telseif self:GetCIDFromGUID(args.destGUID) == 32933 then\t\t-- left arm\n\t\ttimerRespawnLeftArm:Start()\n\t\tif not self.vb.disarmActive then\n\t\t\tself.vb.disarmActive = true\n\t\t\tif self:IsDifficulty(\"normal10\") then\n\t\t\t\ttimerTimeForDisarmed:Start(12)\n\t\t\t\tself:Schedule(12, armReset, self)\n\t\t\telse\n\t\t\t\ttimerTimeForDisarmed:Start()\n\t\t\t\tself:Schedule(10, armReset, self)\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, destName, _, spellId)\n\tif (spellId == 63346 or spellId == 63976) and self:AntiSpam(2, 2) then\n\t\tif destGUID == UnitGUID(\"player\") then\n\t\t\tspecWarnEyebeam:Show()\n\t\telse\n\t\t\tlocal uId = self:GetUnitIdFromGUID(destGUID)\n\t\t\tif uId then\n\t\t\t\tlocal inRange = CheckInteractDistance(uId, 5)\n\t\t\t\tif inRange then\n\t\t\t\t\tspecWarnEyebeamNear:Show(destName)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg, _, _, _, target)\n\tif msg == L.FocusedEyebeam or msg:find(L.FocusedEyebeam) then\n\t\tself:SendSync(\"EyeBeamOn\", target)\n\tend\nend\n\nfunction mod:OnSync(msg, target)\n\tif msg == \"EyeBeamOn\" and self:AntiSpam(2, 1) then\n\t\twarnFocusedEyebeam:Show(target)\n\t\tif target == UnitName(\"player\") then\n\t\t\tspecWarnEyebeam:Show()\n\t\t\tspecWarnEyebeam:Play(\"justrun\")\n\t\t\tspecWarnEyebeam:ScheduleVoice(1, \"keepmove\")\n\t\t\tyellBeam:Yell()\n\t\tend\n\t\twarnFocusedEyebeam:Show(target)\n\t\tif self.Options.SetIconOnEyebeamTarget then\n\t\t\tself:SetIcon(target, 5, 8)\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(63983) then--Arm Sweep\n\t\ttimerNextShockwave:Start()\n\telseif spellName == GetSpellInfo(63342) then--Focused Eyebeam Summon Trigger\n\t\ttimerNextEyebeam:Start()\n\telseif spellName == GetSpellInfo(63726) then -- Pacify Self (End Combat, since there isn't a UNIT_DIED for OnMobKill to run)\n\t\tDBM:EndCombat(self)\n\tend\nend\n"
  },
  {
    "path": "DBM-Ulduar/Mimiron.lua",
    "content": "local mod\t= DBM:NewMod(\"Mimiron\", \"DBM-Ulduar\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(33432)\nmod:SetEncounterID(754)\nmod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7, 8)\nmod:SetHotfixNoticeRev(20220823000000)\n\nmod:RegisterCombat(\"combat_yell\", L.YellPull)\nmod:RegisterCombat(\"yell\", L.YellHardPull)\nmod:RegisterKill(\"yell\", L.YellKilled)\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 63631 64529 62997 64570 64623 64383\",\n\t\"SPELL_CAST_SUCCESS 63027 63414 65192\",\n\t\"SPELL_AURA_APPLIED 63666 65026 64529 62997 64616 64570\",\n\t\"SPELL_AURA_REMOVED 63666 65026\",\n\t\"SPELL_SUMMON 63811\",\n\t\"UNIT_SPELLCAST_CHANNEL_STOP boss1 boss2 boss3\",\n\t\"UNIT_SPELLCAST_START boss1\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1 boss2 boss3\",\n\t\"CHAT_MSG_LOOT\",\n\t\"PARTY_LOOT_METHOD_CHANGED\"\n)\n\n--General\nlocal timerEnrage\t\t\t\t\t= mod:NewBerserkTimer(900)\nlocal timerP1toP2\t\t\t\t\t= mod:NewTimer(40, \"TimeToPhase2\", nil, nil, nil, 6) -- From YellPhase2 to IEEU\nlocal timerP2toP3\t\t\t\t\t= mod:NewTimer(21, \"TimeToPhase3\", nil, nil, nil, 6) -- From YellPhase3 to IEEU\nlocal timerP3toP4\t\t\t\t\t= mod:NewTimer(26, \"TimeToPhase4\", nil, nil, nil, 6) -- From YellPhase4 to IEEU\n\nmod:AddRangeFrameOption(\"6\")\n\n-- Stage One\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1)..\": \"..L.MobPhase1)\nlocal warnNapalmShell\t\t\t\t= mod:NewTargetNoFilterAnnounce(63666, 2, nil, \"Healer\")\nlocal warnPlasmaBlast\t\t\t\t= mod:NewTargetNoFilterAnnounce(64529, 4, nil, \"Tank|Healer\")\n\nlocal specWarnShockBlast\t\t\t= mod:NewSpecialWarningRun(63631, \"Melee\", nil, nil, 4, 2)\nlocal specWarnPlasmaBlast\t\t\t= mod:NewSpecialWarningDefensive(64529, nil, nil, nil, 1, 2)\n\nlocal timerProximityMines\t\t\t= mod:NewCDTimer(35.0, 63027, nil, nil, nil, 3) -- 25 man NM log review (2022/07/10) + VOD review - 35.0\nlocal timerShockBlast\t\t\t\t= mod:NewCastTimer(4, 63631, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerNextShockBlast\t\t\t= mod:NewNextTimer(35, 63631, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON) -- REVIEW! variance?? (S2 log || S3 HM log 2022/07/17) - 38 || 44.1, 41.6\nlocal timerNapalmShell\t\t\t\t= mod:NewBuffActiveTimer(6, 63666, nil, \"Healer\", 2, 5, nil, DBM_COMMON_L.IMPORTANT_ICON..DBM_COMMON_L.HEALER_ICON)\nlocal timerPlasmaBlastCD\t\t\t= mod:NewCDTimer(31.2, 64529, nil, \"Tank\", 2, 5, nil, DBM_COMMON_L.TANK_ICON) -- REVIEW! ~13s variance! (S3 HM log 2022/07/17) - 44.2, 31.2 ; 39.6\n\nmod:AddSetIconOption(\"SetIconOnNapalm\", 63666, false, false, {1, 2, 3, 4, 5, 6, 7})\nmod:AddSetIconOption(\"SetIconOnPlasmaBlast\", 64529, false, false, {8})\n\n-- Stage Two\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2)..\": \"..L.MobPhase2)\nlocal specWarnP3Wx2LaserBarrage\t\t= mod:NewSpecialWarningDodge(63274, nil, nil, nil, 3, 2) -- P3Wx2 Laser Barrage\nlocal specWarnRocketStrike\t\t\t= mod:NewSpecialWarningDodge(64402, nil, nil, nil, 2, 2)\n\nlocal timerSpinUp\t\t\t\t\t= mod:NewCastTimer(4, 63414, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerP3Wx2LaserBarrageCast\t= mod:NewCastTimer(10, 63274, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerNextP3Wx2LaserBarrage\t= mod:NewNextTimer(45, 63414, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON) -- REVIEW! variance? S2 VOD reviews - 47.5, 45\nlocal timerRocketStrikeCD\t\t\t= mod:NewCDTimer(20, 64402, nil, nil, nil, 3)--20-25\n\n-- Stage Three\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(3)..\": \"..L.MobPhase3)\nlocal warnLootMagneticCore\t\t\t= mod:NewAnnounce(\"MagneticCore\", 1, 64444, nil, nil, nil, 64444)\nlocal warnBombBotSpawn\t\t\t\t= mod:NewAnnounce(\"WarnBombSpawn\", 3, 63811, nil, nil, nil, 63811)\n\nlocal timerBombBotSpawn\t\t\t\t= mod:NewCDTimer(16.6, 63811, nil, nil, nil, 1) -- REVIEW! variance? 25 man NM log review (2022/07/10 || 25H Lordaeron 2022/10/09) - 16.6 || 21.0\n\nmod:AddBoolOption(\"AutoChangeLootToFFA\", true, nil, nil, nil, nil, 64444)\n\n-- Stage Four\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(4)..\": \"..L.MobPhase4)\nlocal timerSelfRepair\t\t\t\t= mod:NewCastSourceTimer(15, 64383, nil, nil, nil, 7, nil, DBM_COMMON_L.IMPORTANT_ICON)\n\n-- Hard Mode\nmod:AddTimerLine(DBM_COMMON_L.HEROIC_ICON..DBM_CORE_L.HARD_MODE)\nlocal warnFlamesSoon\t\t\t\t= mod:NewSoonAnnounce(64566, 1)\n\nlocal timerHardmode\t\t\t\t\t= mod:NewTimer(610, \"TimerHardmode\", 64582, nil, nil, 6, nil, nil, nil, nil, nil, nil, nil, 64582)\nlocal timerNextFlames\t\t\t\t= mod:NewNextTimer(28, 64566, nil, nil, nil, 7, nil, DBM_COMMON_L.IMPORTANT_ICON, nil, 1, 5)\n\n-- Stage One\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1)..\": \"..L.MobPhase1)\nlocal timerFlameSuppressantP1Debuff\t= mod:NewBuffActiveTimer(8, 64570, nil, nil, nil, 3)\nlocal timerNextFlameSuppressantP1\t= mod:NewCDTimer(60, 64570, nil, nil, nil, 3) -- S2 VOD review\n\n-- Stage Two\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2)..\": \"..L.MobPhase2)\nlocal warnFrostBomb\t\t\t\t\t= mod:NewSpellAnnounce(64623, 3)\n\nlocal timerFrostBombExplosion\t\t= mod:NewCastTimer(15, 65333, nil, nil, nil, 3)\nlocal timerNextFrostBomb\t\t\t= mod:NewNextTimer(30.4, 64623, nil, nil, nil, 3, nil, DBM_COMMON_L.HEROIC_ICON, true) -- REVIEW! variance? Use PEWPEW to add time? Added \"keep\" arg (VOD review || S3 HM log 2022/07/17 || 25H Lordaeron 2022/10/09) - either gave 46 or 33s || 44.2, 44.4, 47.1 || Stage 2/44.3, 32.6, Stage 4/88.2, 28.8/116.9/145.5, 47.7, 30.4\nlocal timerNextFlameSuppressantP2\t= mod:NewNextTimer(10, 65192, nil, nil, nil, 3) -- 2s (26.4 outlier??) variance (S2 VOD review) - 12, 12, 11, 10 || 12.3, 12.4, 26.4, 11.3, 12.4\n\n-- Stage Three\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(3)..\": \"..L.MobPhase3)\nlocal specWarnDeafeningSiren\t\t= mod:NewSpecialWarningMove(64616, nil, nil, nil, 1, 2)\n\n-- Stage Four\n-- mod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(4)..\": \"..L.MobPhase4)\n-- nothing new to add\n\nmod:GroupSpells(63274, 63293) -- Spinning Up and P3Wx2 Laser Barrage\nmod:GroupSpells(64623, 65333) -- Frost Bomb, Frost Bomb Explosion\n\nlocal cachedLootmethod, _, masterlooterRaidID\nmod.vb.hardmode = false\nmod.vb.napalmShellIcon = 7\nlocal spinningUp = DBM:GetSpellInfo(63414)\nlocal lastSpinUp = 0\nmod.vb.is_spinningUp = false\nlocal napalmShellTargets = {}\n\nlocal function ResetRange(self)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:DisableBossMode()\n\tend\nend\n\nlocal function Flames(self)\t-- Flames -- UNIT_SPELLCAST_SUCCEEDED does not show on etrace\n\ttimerNextFlames:Start()\n\tself:Schedule(28, Flames, self)\n\twarnFlamesSoon:Schedule(18)\n\twarnFlamesSoon:Schedule(23)\nend\n\nlocal function warnNapalmShellTargets(self)\n\twarnNapalmShell:Show(table.concat(napalmShellTargets, \"<, >\"))\n\ttable.wipe(napalmShellTargets)\n\tself.vb.napalmShellIcon = 7\nend\n\nlocal function show_warning_for_spinup(self)\n\tif self.vb.is_spinningUp then\n\t\tspecWarnP3Wx2LaserBarrage:Show()\n\t\tspecWarnP3Wx2LaserBarrage:Play(\"watchstep\")\n\t\tspecWarnP3Wx2LaserBarrage:ScheduleVoice(1, \"keepmove\")\n\tend\nend\n\nlocal function NextPhase(self)\n\tself:SetStage(0)\n\tif self.vb.phase == 1 then\n\t\tif self.Options.HealthFrame then\n\t\t\tDBM.BossHealth:Clear()\n\t\t\tDBM.BossHealth:AddBoss(33432, L.MobPhase1)\n\t\tend\n\telseif self.vb.phase == 2 then\n\t\ttimerNextShockBlast:Stop()\n\t\ttimerProximityMines:Stop()\n\t\ttimerNextFlameSuppressantP1:Stop()\n\t\ttimerPlasmaBlastCD:Stop()\n\t\ttimerP1toP2:Start()\n\t\ttimerNextP3Wx2LaserBarrage:Schedule(40, 31) -- REVIEW! ~3s variance? (25 man NM log 2022/07/10 || S3 HM log 2022/07/17 || Lord 25 NM log 2022/07/31 ) - 34 || 31 || 34\n\t\tif self.Options.HealthFrame then\n\t\t\tDBM.BossHealth:Clear()\n\t\t\tDBM.BossHealth:AddBoss(33651, L.MobPhase2)\n\t\tend\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Hide()\n\t\tend\n\t\tif self.vb.hardmode then\n\t\t\ttimerNextFrostBomb:Start(44.3) -- (25H Lordaeron 2022/10/09) - 44.3\n\t\tend\n\telseif self.vb.phase == 3 then\n\t\tif self.Options.AutoChangeLootToFFA and DBM:GetRaidRank() == 2 and GetLootMethod() ~= \"freeforall\" then\n\t\t\tcachedLootmethod, _, masterlooterRaidID = GetLootMethod()\n\t\t\tSetLootMethod(\"freeforall\")\n\t\tend\n\t\ttimerP3Wx2LaserBarrageCast:Cancel()\n\t\ttimerNextP3Wx2LaserBarrage:Cancel()\n\t\ttimerNextFrostBomb:Cancel()\n\t\ttimerP2toP3:Start()\n\t\ttimerBombBotSpawn:Start(32.5) -- 25 man NM log review (2022/07/10 || 25H Lordaeron 2022/10/09) - 33 || 32.5\n\t\tif self.Options.HealthFrame then\n\t\t\tDBM.BossHealth:Clear()\n\t\t\tDBM.BossHealth:AddBoss(33670, L.MobPhase3)\n\t\tend\n\telseif self.vb.phase == 4 then\n\t\t-- Don't change loot if it was manually changed\n\t\tif self.Options.AutoChangeLootToFFA and DBM:GetRaidRank() == 2 and GetLootMethod() == \"freeforall\" and cachedLootmethod then\n\t\t\tif masterlooterRaidID then\n\t\t\t\tSetLootMethod(cachedLootmethod, \"raid\"..masterlooterRaidID)\n\t\t\telse\n\t\t\t\tSetLootMethod(cachedLootmethod)\n\t\t\tend\n\t\tend\n\t\ttimerBombBotSpawn:Cancel()\n\t\ttimerP3toP4:Start()\n\t\ttimerProximityMines:Start(41) -- 25 man NM log review (2022/07/10) - 26 (phasing) + 15 (timer)\n\t\ttimerNextP3Wx2LaserBarrage:Start(56) -- 25 man NM log review (2022/07/10) - 26 (phasing) + 30 (timer)\n\t\tif self.Options.HealthFrame then\n\t\t\tDBM.BossHealth:Show(L.name)\n\t\t\tDBM.BossHealth:AddBoss(33670, L.MobPhase3)\n\t\t\tDBM.BossHealth:AddBoss(33651, L.MobPhase2)\n\t\t\tDBM.BossHealth:AddBoss(33432, L.MobPhase1)\n\t\tend\n\t\tif self.vb.hardmode then\n\t\t\ttimerNextFrostBomb:Start(28)\n\t\tend\n\tend\nend\n\nfunction mod:OnCombatStart()\n\tself.vb.phase = 0\n\tself.vb.is_spinningUp = false\n\tself.vb.napalmShellIcon = 7\n\ttable.wipe(napalmShellTargets)\n\tNextPhase(self)\n\t-- Cache the loot method in case loot gets manually changed to ffa before Phase 3\n\tif DBM:GetRaidRank() == 2 then\n\t\tcachedLootmethod, _, masterlooterRaidID = GetLootMethod()\n\t\tif cachedLootmethod == \"freeforall\" then cachedLootmethod = nil end\n\tend\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(6)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tself:Unschedule(Flames)\n\tif self.Options.HealthFrame then\n\t\tDBM.BossHealth:Hide()\n\tend\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\n\t-- Don't change loot if it was manually changed away from ffa\n\tif self.Options.AutoChangeLootToFFA and DBM:GetRaidRank() == 2 and GetLootMethod() == \"freeforall\" and cachedLootmethod then\n\t\tif masterlooterRaidID then\n\t\t\tSetLootMethod(cachedLootmethod, \"raid\"..masterlooterRaidID)\n\t\telse\n\t\t\tSetLootMethod(cachedLootmethod)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n--[[if spellId == 63631 then -- Shock Blast. Replaced with UNIT_SPELLCAST_START since 2022/07/2022 log had one instance where this event was not fired\n\t\tspecWarnShockBlast:Show()\n\t\tspecWarnShockBlast:Play(\"runout\")\n\t\ttimerShockBlast:Start()\n\t\ttimerNextShockBlast:Start()\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:SetBossRange(15, self:GetBossUnitByCreatureId(33432))\n\t\t\tself:Schedule(4.5, ResetRange, self)\n\t\tend]]\n\tif args:IsSpellID(64529, 62997) then\t-- Plasma Blast\n\t\tif self:IsTanking(\"player\", \"boss1\", nil, true) then\n\t\t\tspecWarnPlasmaBlast:Show()\n\t\t\tspecWarnPlasmaBlast:Play(\"defensive\")\n\t\tend\n\t\ttimerPlasmaBlastCD:Start()\n\telseif spellId == 64570 then\t-- Flame Suppressant (phase 1)\n\t\ttimerNextFlameSuppressantP1:Start()\n\telseif spellId == 64623 then\t-- Frost Bomb\n\t\twarnFrostBomb:Show()\n\t\ttimerFrostBombExplosion:Start()\n\t\ttimerNextFrostBomb:Start()\n\telseif spellId == 64383 then -- Self Repair (phase 4)\n\t\t-- REVIEW! Makes sense to cancel timers when each part dies? Or timers are continuous?\n\t\ttimerSelfRepair:Start(args.sourceName)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 63027 then\t\t\t\t-- Proximity Mines\n\t\ttimerProximityMines:Start()\n\telseif spellId == 63414 then\t\t\t-- Spinning UP (before Dark Glare)\n\t\tself.vb.is_spinningUp = true\n\t\ttimerSpinUp:Start()\n\t\ttimerP3Wx2LaserBarrageCast:Schedule(4)\n\t\ttimerNextP3Wx2LaserBarrage:Schedule(14)\t\t\t-- 4 (cast spinup) + 10 sec (cast dark glare)\n\t\tself:Schedule(0.15, show_warning_for_spinup, self)\t-- wait 0.15 and then announce it, otherwise it will sometimes fail\n\t\tlastSpinUp = GetTime()\n\telseif spellId == 65192 then\t-- Flame Suppressant CD (phase 2)\n\t\ttimerNextFlameSuppressantP2:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif args:IsSpellID(63666, 65026) and args:IsDestTypePlayer() then\t-- Napalm Shell\n\t\tnapalmShellTargets[#napalmShellTargets + 1] = args.destName\n\t\ttimerNapalmShell:Start()\n\t\tif self.Options.SetIconOnNapalm and self.vb.napalmShellIcon > 0 then\n\t\t\tself:SetIcon(args.destName, self.vb.napalmShellIcon, 6)\n\t\tend\n\t\tself.vb.napalmShellIcon = self.vb.napalmShellIcon - 1\n\t\tself:Unschedule(warnNapalmShellTargets)\n\t\tself:Schedule(0.3, warnNapalmShellTargets, self)\n\telseif args:IsSpellID(64529, 62997) then\t-- Plasma Blast\n\t\twarnPlasmaBlast:Show(args.destName)\n\t\tif self.Options.SetIconOnPlasmaBlast then\n\t\t\tself:SetIcon(args.destName, 8, 6)\n\t\tend\n\telseif spellId == 64616 and args:IsPlayer() then\t-- Deafening Siren (Hard Mode)\n\t\tspecWarnDeafeningSiren:Show()\n\telseif spellId == 64570 and args:IsPlayer() then\t-- Flame Suppressant (phase 1)\n\t\ttimerFlameSuppressantP1Debuff:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(63666, 65026) then -- Napalm Shell\n\t\tif self.Options.SetIconOnNapalm then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 63811 then -- Bomb Bot, never fired on Warmane\n\t\tDBM:Debug(\"Bomb Bot unhidden from combat log. Notify Zidras on Discord or GitHub\")\n\t\ttimerBombBotSpawn:Start()\n\t\twarnBombBotSpawn:Show()\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_CHANNEL_STOP(_, spellName)\n\tif spellName == spinningUp and GetTime() - lastSpinUp < 3.9 then\n\t\tself.vb.is_spinningUp = false\n\t\tself:SendSync(\"SpinUpFail\")\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_START(_, spellName)\n\tif spellName == GetSpellInfo(63631) then -- Shock Blast. Used UNIT event instead since I have a log where CLEU missed one SCStart\n\t\tspecWarnShockBlast:Show()\n\t\tspecWarnShockBlast:Play(\"runout\")\n\t\ttimerShockBlast:Start()\n\t\ttimerNextShockBlast:Start()\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:SetBossRange(15, self:GetBossUnitByCreatureId(33432))\n\t\t\tself:Schedule(4.5, ResetRange, self)\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\t--[[if spellId == 34098 then--ClearAllDebuffs never fired due to unit not existing\n\t\tself:SetStage(0)\n\t\tif self.vb.phase == 2 then\n\t\t\ttimerNextShockBlast:Stop()\n\t\t\ttimerProximityMines:Stop()\n\t\t\ttimerNextFlameSuppressantP1:Stop()\n\t\t\ttimerPlasmaBlastCD:Stop()\n\t\t\ttimerP1toP2:Start()\n\t\t\tif self.Options.RangeFrame then\n\t\t\t\tDBM.RangeCheck:Hide()\n\t\t\tend\n\t\t\ttimerRocketStrikeCD:Start(63)\n\t\t\ttimerNextP3Wx2LaserBarrage:Start(78)\n\t\t\tif self.vb.hardmode then\n\t\t\t\ttimerNextFrostBomb:Start(94)\n\t\t\tend\n\t\telseif self.vb.phase == 3 then\n\t\t\ttimerP3Wx2LaserBarrageCast:Stop()\n\t\t\ttimerNextP3Wx2LaserBarrage:Stop()\n\t\t\ttimerNextFrostBomb:Stop()\n\t\t\ttimerRocketStrikeCD:Stop()\n\t\t\ttimerP2toP3:Start()\n\t\telseif self.vb.phase == 4 then\n\t\t\ttimerP3toP4:Start()\n\t\t\tif self.vb.hardmode then\n\t\t\t\ttimerNextFrostBomb:Start(32)\n\t\t\tend\n\t\t\ttimerRocketStrikeCD:Start(50)\n\t\t\ttimerNextP3Wx2LaserBarrage:Start(59.8)\n\t\t\ttimerNextShockBlast:Start(81)\n\t\tend--]]\n\tif spellName == GetSpellInfo(64402) or spellName == GetSpellInfo(65034) then\t--P2, P4 Rocket Strike\n\t\tspecWarnRocketStrike:Show()\n\t\tspecWarnRocketStrike:Play(\"watchstep\")\n\t\ttimerRocketStrikeCD:Start()\n\telseif spellName == GetSpellInfo(63811) then\t--Bomb Bot\n\t\twarnBombBotSpawn:Show()\n\t\ttimerBombBotSpawn:Start()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.YellPull or msg:find(L.YellPull) then -- register Normal Mode\n\t\tself.vb.hardmode = false -- set this here instead of CombatStart to prevent possible overwrites\n\t\ttimerPlasmaBlastCD:Start(22.0) -- REVIEW! variance? 25 man NM log review (2022/07/10) - 22.0\n\t\ttimerNextShockBlast:Start(31.1) -- REVIEW! variance? 25 man NM log review (2022/07/10) - 31.1\n\t\ttimerEnrage:Start()\n\telseif msg == L.YellHardPull or msg:find(L.YellHardPull) then -- register HARD Mode\n\t\tself.vb.hardmode = true\n\t\tself:SetWipeTime(10)\n\t\ttimerHardmode:Start()\n\t\ttimerPlasmaBlastCD:Start(26.6) -- REVIEW! variance? (S2 VOD || S3 HM log 2022/07/17) - 29 || 26.6, 26.6\n\t\ttimerNextFlameSuppressantP1:Start(75) -- REVIEW! ~5s variance (S2 VOD review || S3 HM log 2022/07/17) - 75 || 80.0 ; 77.3\n\t\ttimerProximityMines:Start(11) -- S2 VOD review\n\t\ttimerNextFlames:Start(6) -- S2 VOD review\n\t\tself:Schedule(6, Flames, self)\n\t\twarnFlamesSoon:Schedule(1)\n\t\ttimerNextShockBlast:Start(35.8) -- REVIEW! variance? (S3 HM log 2022/07/17 || 25H Lordaeron 2022/10/09) - 37.9, 37.7 || 35.8\n\t\ttimerEnrage:Start(600) -- REVIEW! 10 or 8 mins? By the yells, it is 10 mins, but wowhead states 8 min enrage timer...\n\telseif msg == L.YellPhase2 or msg:find(L.YellPhase2) then -- register Phase 2\n\t\tNextPhase(self)\n\telseif msg == L.YellPhase3 or msg:find(L.YellPhase3) then -- register Phase 3\n\t\tNextPhase(self)\n\telseif msg == L.YellPhase4 or msg:find(L.YellPhase4) then -- register Phase 4\n\t\tNextPhase(self)\n\tend\nend\n\nfunction mod:CHAT_MSG_LOOT(msg)\n\tlocal player, itemID = msg:match(L.LootMsg)\n\tif player and itemID and tonumber(itemID) == 46029 and self:IsInCombat() then\n\t\tplayer = DBM:GetUnitFullName(player) or UnitName(\"player\") -- prevents nil string if the player is the one looting it: \"You\" receive loot...\n\t\tself:SendSync(\"LootMsg\", player)\n\tend\nend\n\n-- Case where combat was started with the wrong loot and changed manually, and then put to ffa manually before Phase 3\n-- This will not protect against misclicks before changing manually to ffa (loot will be returned to last misclicked type)\nfunction mod:PARTY_LOOT_METHOD_CHANGED()\n\tif self.Options.AutoChangeLootToFFA and DBM:GetRaidRank() == 2 and self:GetStage(3, 1) and GetLootMethod() ~= \"freeforall\" then\n\t\tcachedLootmethod, _, masterlooterRaidID = GetLootMethod()\n\tend\nend\n\nfunction mod:OnSync(event, args)\n\tif event == \"SpinUpFail\" then\n\t\tself.vb.is_spinningUp = false\n\t\ttimerSpinUp:Cancel()\n\t\ttimerP3Wx2LaserBarrageCast:Cancel()\n\t\ttimerNextP3Wx2LaserBarrage:Cancel()\n\t\tspecWarnP3Wx2LaserBarrage:Cancel()\n\telseif event == \"LootMsg\" and args and self:AntiSpam(2, 1) then\n\t\twarnLootMagneticCore:Show(args)\n\tend\nend\n"
  },
  {
    "path": "DBM-Ulduar/Razorscale.lua",
    "content": "local mod\t= DBM:NewMod(\"Razorscale\", \"DBM-Ulduar\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20251020234840\")\nmod:SetCreatureID(33186)\nmod:SetEncounterID(746)\n\nmod:RegisterCombat(\"combat_yell\", L.YellAir)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 63317 64021 63236\",\n\t\"SPELL_AURA_APPLIED 64771\",\n\t\"SPELL_AURA_APPLIED_DOSE 64771\",\n\t\"SPELL_DAMAGE 64733 64704\",\n\t\"SPELL_MISSED 64733 64704\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1\"\n)\n\n-- General\nlocal enrageTimer\t\t\t\t\t= mod:NewBerserkTimer(600)\n\n-- Stage One\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1))\nlocal warnTurretsReadySoon\t\t\t= mod:NewAnnounce(\"warnTurretsReadySoon\", 1, 48642)\nlocal warnTurretsReady\t\t\t\t= mod:NewAnnounce(\"warnTurretsReady\", 3, 48642)\nlocal warnDevouringFlame\t\t\t= mod:NewTargetAnnounce(63236, 2, nil, false)--Very spammy, requires turning on AND disabling target filter. Power user setting\n\nlocal specWarnDevouringFlame\t\t= mod:NewSpecialWarningMove(64733, nil, nil, nil, 1, 2)\nlocal specWarnDevouringFlameYou\t\t= mod:NewSpecialWarningYou(64733, false, nil, nil, 1, 2)\nlocal specWarnDevouringFlameNear\t= mod:NewSpecialWarningClose(64733, false, nil, nil, 1, 2)\nlocal yellDevouringFlame\t\t\t= mod:NewYell(64733)\n\nlocal timerTurret1\t\t\t\t\t= mod:NewTimer(54, \"timerTurret1\", 48642, nil, nil, 5, DBM_COMMON_L.IMPORTANT_ICON) -- Fixed timer: 54s. Then +21 on every subsequent turret. (Lordaeron: 25m review2022/07/10 || 10m [2025-09-06]@[20:43:48] || 25m [2025-10-20]@[19:41:45]) - \"?-Harpoon Turret is ready for use!-npc:Razorscale Controller = pull:54.05/[Stage 1/0.00] 54.05, 21.05, 102.27, 21.08, Stage 2/34.38\" || \"?-Harpoon Turret is ready for use!-npc:Razorscale Controller = pull:54.08/[Stage 1/0.00] 54.08, 21.02, 21.07, 21.05, Stage 2/49.28\"\nlocal timerTurret2\t\t\t\t\t= mod:NewTimer(75, \"timerTurret2\", 48642, nil, nil, 5, DBM_COMMON_L.IMPORTANT_ICON)\nlocal timerTurret3\t\t\t\t\t= mod:NewTimer(96, \"timerTurret3\", 48642, nil, nil, 5, DBM_COMMON_L.IMPORTANT_ICON)\nlocal timerTurret4\t\t\t\t\t= mod:NewTimer(117, \"timerTurret4\", 48642, nil, nil, 5, DBM_COMMON_L.IMPORTANT_ICON)\n\n-- Stage Two\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2))\nlocal warnFuseArmor\t\t\t\t\t= mod:NewStackAnnounce(64771, 2, nil, \"Tank\")\n\nlocal specWarnFuseArmor\t\t\t\t= mod:NewSpecialWarningStack(64771, nil, 2, nil, nil, 1, 6)\nlocal specWarnFuseArmorOther\t\t= mod:NewSpecialWarningTaunt(64771, nil, nil, nil, 1, 2)\n\nlocal timerDeepBreathCooldown\t\t= mod:NewCDTimer(20.1, 64021, nil, nil, nil, 5) -- ~3s variance (25 man log review 2022/07/10) - 23.0, 20.1\nlocal timerDeepBreathCast\t\t\t= mod:NewCastTimer(2.5, 64021)\nlocal timerGrounded\t\t\t\t\t= mod:NewTimer(45, \"timerGrounded\", nil, nil, nil, 6)\nlocal timerFuseArmorCD\t\t\t\t= mod:NewCDTimer(10.1, 64771, nil, \"Tank\", nil, 5, nil, DBM_COMMON_L.TANK_ICON) -- 10s variance (25 man log review 2022/07/10) - 10.1, 20.1\n\nmod:GroupSpells(63236, 64733) -- Devouring Flame (cast and damage)\n\nlocal combattime = 0\nlocal isGrounded = false\n\nfunction mod:FlameTarget(targetname)\n\tif not targetname then return end\n\tif targetname == UnitName(\"player\") then\n\t\tspecWarnDevouringFlameYou:Show()\n\t\tspecWarnDevouringFlameYou:Play(\"targetyou\")\n\t\tyellDevouringFlame:Yell()\n\telseif self:CheckNearby(11, targetname) then\n\t\tspecWarnDevouringFlameNear:Show(targetname)\n\t\tspecWarnDevouringFlameNear:Play(\"runaway\")\n\telse\n\t\twarnDevouringFlame:Show(targetname)\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tisGrounded = false\n\tenrageTimer:Start(-delay)\n\tcombattime = GetTime()\n\tif self:IsDifficulty(\"normal10\") then\n\t\twarnTurretsReadySoon:Schedule(54-delay)\n\t\twarnTurretsReady:Schedule(75-delay)\n\t\ttimerTurret1:Start(-delay)\n\t\ttimerTurret2:Start(-delay)\n\telse\n\t\twarnTurretsReadySoon:Schedule(96-delay)\n\t\twarnTurretsReady:Schedule(117-delay)\n\t\ttimerTurret1:Start(-delay) -- 54sec\n\t\ttimerTurret2:Start(-delay) -- +21\n\t\ttimerTurret3:Start(-delay) -- +21\n\t\ttimerTurret4:Start(-delay) -- +21\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(63317, 64021) then\t-- Flame Breath\n\t\ttimerDeepBreathCast:Start()\n\t\ttimerDeepBreathCooldown:Start()\n\telseif args.spellId == 63236 then\n\t\tself:BossTargetScanner(args.sourceGUID, \"FlameTarget\", 0.1, 12)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 64771 then\t\t-- Fuse Armor\n\t\tlocal amount = args.amount or 1\n\t\tif amount >= 2 then\n\t\t\tif args:IsPlayer() then\n\t\t\t\tspecWarnFuseArmor:Show(args.amount)\n\t\t\t\tspecWarnFuseArmor:Play(\"stackhigh\")\n\t\t\telse\n\t\t\t\tlocal _, _, _, _, _, _, expireTime = DBM:UnitDebuff(\"player\", args.spellName)\n\t\t\t\tlocal remaining\n\t\t\t\tif expireTime then\n\t\t\t\t\tremaining = expireTime-GetTime()\n\t\t\t\tend\n\t\t\t\tif not UnitIsDeadOrGhost(\"player\") and (not remaining or remaining and remaining < 12) then\n\t\t\t\t\tspecWarnFuseArmorOther:Show(args.destName)\n\t\t\t\t\tspecWarnFuseArmorOther:Play(\"tauntboss\")\n\t\t\t\telse\n\t\t\t\t\twarnFuseArmor:Show(args.destName, amount)\n\t\t\t\tend\n\t\t\tend\n\t\telse\n\t\t\twarnFuseArmor:Show(args.destName, amount)\n\t\tend\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, spellId)\n\tif (spellId == 64733 or spellId == 64704) and destGUID == UnitGUID(\"player\") and self:AntiSpam() then\n\t\tspecWarnDevouringFlame:Show()\n\t\tspecWarnDevouringFlame:Play(\"runaway\")\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(emote)\n\tif emote == L.EmotePhase2 or emote:find(L.EmotePhase2) then\n\t\t-- phase2\n\t\tself:SetStage(2)\n\t\tisGrounded = true\n\t\ttimerTurret1:Stop()\n\t\ttimerTurret2:Stop()\n\t\ttimerTurret3:Stop()\n\t\ttimerTurret4:Stop()\n\t\ttimerGrounded:Stop()\n\t\ttimerFuseArmorCD:Start(19) -- REVIEW! variance? (25 man log review 2022/07/10) - 19\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif isGrounded and (msg == L.YellAir or msg == L.YellAir2) and GetTime() - combattime > 30 then\n\t\tDBM:AddSpecialEventToTranscriptorLog(\"Air Phase\")\n\t\tisGrounded = false -- warmane resets the timers idk why\n\t\tif self:IsDifficulty(\"normal10\") then -- not sure?\n\t\t\twarnTurretsReadySoon:Schedule(40)\n\t\t\twarnTurretsReady:Schedule(61)\n\t\t\ttimerTurret1:Start(40)\n\t\t\ttimerTurret2:Start(61) -- +21\n\t\telse\n\t\t\twarnTurretsReadySoon:Schedule(123)\n\t\t\twarnTurretsReady:Schedule(133)\n\t\t\ttimerTurret1:Start(70) -- Lordaeron 25m 20250112: \"?-Harpoon Turret is ready for use!-npc:Razorscale Controller = pull:54.09/[Stage 1/0.00] 54.09, 21.09, 21.05, 21.09, 130.14, 21.06, 21.05, 21.04, Stage 2/8.36\"\n\t\t\ttimerTurret2:Start(91)\n\t\t\ttimerTurret3:Start(112)\n\t\t\ttimerTurret4:Start(133)\n\t\tend\n\telseif msg == L.YellGround then\n\t\tDBM:AddSpecialEventToTranscriptorLog(\"Ground Phase\")\n\t\ttimerGrounded:Start()\n\t\tisGrounded = true\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(64821) then--Fuse Armor\n\t\ttimerFuseArmorCD:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-Ulduar/Thorim.lua",
    "content": "local mod\t= DBM:NewMod(\"Thorim\", \"DBM-Ulduar\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(32865)\nmod:SetEncounterID(752)\nmod:SetUsedIcons(7)\nmod:SetHotfixNoticeRev(20230927000000)\n\nmod:RegisterCombat(\"yell\", L.YellPhase1) -- [2023-09-24]@[21:34:20]: do not use combat_yell, for some reason on Warmane, PRD triggered combat start on arena adds engage\nmod:RegisterKill(\"yell\", L.YellKill)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 62042 62597 62605 64390 62131\",\n\t\"SPELL_CAST_SUCCESS 62042 62466 62279 62130 62580 62604\",\n\t\"SPELL_AURA_APPLIED 62042 62507 62130 62526 62527 62279\",\n\t\"SPELL_AURA_APPLIED_DOSE 62279\",\n\t\"SPELL_DAMAGE 62017\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\n-- General\nlocal enrageTimerStage1\t\t\t\t= mod:NewBerserkTimer(300, nil, DBM_CORE_L.GENERIC_TIMER_BERSERK..\": \"..DBM_CORE_L.SCENARIO_STAGE:format(1)) -- REVIEW! Need log to validate, only used Wowhead as reference\nlocal enrageTimerStage2\t\t\t\t= mod:NewBerserkTimer(300, nil, DBM_CORE_L.GENERIC_TIMER_BERSERK..\": \"..DBM_CORE_L.SCENARIO_STAGE:format(2)) -- REVIEW! Need log to validate, only used Wowhead as reference\nmod:AddRangeFrameOption(\"10\")\n\n-- Stage One\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1))\nlocal warnStormhammer\t\t\t\t= mod:NewTargetNoFilterAnnounce(62042, 2)\nlocal warnRuneDetonation\t\t\t= mod:NewTargetNoFilterAnnounce(62526, 4)\n\nlocal specWarnRuneDetonation\t\t= mod:NewSpecialWarningClose(62526, nil, nil, nil, 1, 2)\nlocal yellRuneDetonation\t\t\t= mod:NewYell(62526)\nlocal specWarnLightningShock\t\t= mod:NewSpecialWarningMove(62017, nil, nil, nil, 1, 2)\n\nlocal timerStormhammerCast\t\t\t= mod:NewCastTimer(2, 62042, nil, nil, nil, 3)\nlocal timerStormhammerCD\t\t\t= mod:NewCDTimer(14.2, 62042, nil, nil, nil, 3, nil, nil, true) -- ~5s variance. Added \"keep\" arg (SAA: 25 man NM log 2022/07/10 || 25 man HM log 2022/07/17 || 25m Lordaeron 2022/10/09) - 16.2, 15.5, 16.8, 19.4, 17.8, 15.5, 16.8 || 16.9, 17.7, 18.0, 14.8 || 15.1, 16.2, 17.0, 14.2, 16.1, 15.6, 15.8 ||| (SCS: 25m Lordaeron [2022-07-31]@[19:31:40] || 25m Lordaeron [2022-09-07]@[20:23:07] || 25 HM Lordaeron [2023-09-24]@[21:34:20]) - \"Stormhammer-62042-npc:32865 = pull:40.0, 15.8, 16.2, 17.5, 17.3, 15.5, 17.2, 17.2, 15.0\" || pull:48.1/Stage 1/48.1, 16.5, 16.7, 17.4, 16.6, 17.2, Stage 2/6.8 || [Engage on adds]pull:59.64/Stage 1/59.64, 17.77, 14.86, 17.67, 15.98, Stage 2/8.95\n\nmod:AddSetIconOption(\"SetIconOnRuneDetonation\", 62527, false, false, {7})\n\n-- Stage Two\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2))\nlocal warnPhase2\t\t\t\t\t= mod:NewPhaseAnnounce(2, 1, nil, nil, nil, nil, nil, 2)\nlocal warnLightningCharge\t\t\t= mod:NewSpellAnnounce(62466, 2)\n\nlocal specWarnUnbalancingStrikeSelf\t= mod:NewSpecialWarningDefensive(62130, nil, nil, nil, 1, 2)\nlocal specWarnUnbalancingStrike\t\t= mod:NewSpecialWarningTaunt(62130, nil, nil, nil, 1, 2)\n\nlocal timerLightningCharge\t\t\t= mod:NewCDTimer(15.2, 62466, nil, nil, nil, 3) -- ~2s variance. (25 man NM log 2022/07/10 || 25 man HM log 2022/07/17 || 25 man Lordaeron 20222/10/30) - ? || ? || 16.7, 15.3, 16.1, 15.9\nlocal timerUnbalancingStrike\t\t= mod:NewCDTimer(19.6, 62130, nil, \"Tank\", nil, 5, nil, DBM_COMMON_L.TANK_ICON) -- ~12s variance (25 man NM log 2022/07/10 || 25 man HM log 2022/07/17) - 24.9, 31.4, 31.8, 26.7 || 27.7, 28.5, 19.6, 26.5, 21.5, 28.6, 21.1, 28.5, 26.9\nlocal timerChainLightning\t\t\t= mod:NewNextTimer(10.2, 64390) -- ~5s variance (25 man NM log 2022/07/10 || 25 man HM log 2022/07/17) - 14.5, 13.3, 13.8, 14.7, 10.3, 14.8, 10.3, 13.3, 12.4 || 12.3, 10.2, 14.4, 14.9, 12.5, 11.0, 14.4, 12.2, 13.4, 12.3, 11.6, 12.8, 10.6, 12.2, 10.3, 14.1\n\nmod:AddBoolOption(\"AnnounceFails\", false, \"announce\", nil, nil, nil, 62466)\n\n-- Hard Mode\nmod:AddTimerLine(DBM_COMMON_L.HEROIC_ICON..DBM_CORE_L.HARD_MODE)\nlocal specWarnHardModeActivated\t\t= mod:NewSpecialWarning(\"specWarnHardmode\", nil, nil, nil, nil, nil, 3, \"Interface\\\\Icons\\\\achievement_boss_thorim\", \"at3183\") -- Lose Your Illusion (25 player)\nlocal specWarnHardModeFailed\t\t= mod:NewSpecialWarningEnd(62507, nil, nil, nil, 1, 2)\n\nlocal timerHardmode\t\t\t\t\t= mod:NewTimer(150, \"TimerHardmode\", \"Interface\\\\Icons\\\\achievement_boss_thorim\", nil, nil, 0, nil, nil, nil, nil, nil, nil, nil, \"at3183\") -- 25 man NM log review (2022/07/10), 2:30 from 62507 SPELL_AURA_APPLIED to SPELL_AURA_REMOVED\nlocal timerFrostNova\t\t\t\t= mod:NewNextTimer(10.4, 62605, nil, nil, nil, 2, nil, DBM_COMMON_L.MAGIC_ICON) -- ~10s variance (25 man HM log 2022/07/17) - 16.0, 13.1, 16.6, 11.8, 14.4, 13.6, 20.3, 10.4, 19.0, 18.3, 19.8, 13.0, 12.4\nlocal timerFrostNovaCast\t\t\t= mod:NewCastTimer(2.5, 62605, nil, nil, nil, 2, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerFBVolley\t\t\t\t\t= mod:NewCDTimer(8.0, 62604) -- ~8s variance (25 man HM log 2022/07/17) - 8.6, 15.1, 9.3, 14.3, 9.6, 8.0, 9.9, 13.4, 8.0, 9.8, 16.0, 12.3, 9.5, 16.2, 9.9, 8.1, 11.4, 8.0, 9.0\n\n--mod:GroupSpells(62042, 62470) -- Stormhammer, Deafening Thunder\nmod:GroupSpells(62526, 62527) -- Rune of Detonation\nmod:GroupSpells(\"at3183\", 62507) -- Lose Your Illusion (25 player), Touch of Dominion\n\nlocal lastcharge = {}\nmod.vb.isHardMode = false\n\nfunction mod:OnCombatStart()\n\tself:SetStage(1)\n\tself.vb.isHardMode = false\n\tenrageTimerStage1:Start()\n\ttimerStormhammerCD:Start(40) -- ~8s variance [40.0-48.1]. SCS: 25m Lordaeron [2022-07-31]@[19:31:40] || 25 Lordaeron [2022-09-07]@[20:23:07]) - pull:40.0 || pull:48.1\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(10)\n\tend\n\ttable.wipe(lastcharge)\nend\n\nlocal sortedFailsC = {}\nlocal function sortFails1C(e1, e2)\n\treturn (lastcharge[e1] or 0) > (lastcharge[e2] or 0)\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\n\tif self.Options.AnnounceFails and DBM:GetRaidRank() >= 1 then\n\t\tlocal lcharge = \"\"\n\t\tfor k, _ in pairs(lastcharge) do\n\t\t\ttable.insert(sortedFailsC, k)\n\t\tend\n\t\ttable.sort(sortedFailsC, sortFails1C)\n\t\tfor _, v in ipairs(sortedFailsC) do\n\t\t\tlcharge = lcharge..\" \"..v..\"(\"..(lastcharge[v] or \"\")..\")\"\n\t\tend\n\t\tSendChatMessage(L.Charge:format(lcharge), \"RAID\")\n\t\ttable.wipe(sortedFailsC)\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 62042 then\n\t\ttimerStormhammerCast:Start()\n\t\ttimerStormhammerCD:Start()\n\telseif args:IsSpellID(62597, 62605) then\t-- Frost Nova by Sif\n\t\ttimerFrostNovaCast:Start()\n\t\ttimerFrostNova:Start()\n\telseif args:IsSpellID(64390, 62131) then\t-- Chain Lightning by Thorim\n\t\ttimerChainLightning:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 62042 then\t\t-- Stormhammer. Never fires on Warmane, nor existed on 2010 code\n\t\tDBM:AddMsg(\"Stormhammer unhidden from combat log. Notify Zidras on Discord or GitHub\")\n\t\ttimerStormhammerCD:Schedule(2)\n\telseif args:IsSpellID(62466, 62279) then\t-- Lightning Charge\n\t\tDBM:AddMsg(\"Lightning Charge unhidden from combat log. Notify Zidras on Discord or GitHub\")\n\t\twarnLightningCharge:Show()\n\t\ttimerLightningCharge:Start()\n\telseif spellId == 62130 then\t-- Unbalancing Strike\n\t\ttimerUnbalancingStrike:Start()\n\telseif args:IsSpellID(62580, 62604) then\t-- Frostbolt Volley by Sif\n\t\ttimerFBVolley:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 62042 and self:CheckBossDistance(args.sourceGUID, true, 34471) then\t-- Stormhammer. Within range of Vial of the Sunwell (43) -- CheckBossDistance prone to fail since boss frame is only created on Stage 2 and the fallback would require raidtarget to be Thorim, which there is really no point in. Even if it fails 99% of the time, it returns true regardless so keep it\n\t\twarnStormhammer:Show(args.destName)\n\telseif spellId == 62507 then\t\t\t\t-- Touch of Dominion\n\t\ttimerHardmode:Start()\n\telseif spellId == 62130 then\t\t\t\t-- Unbalancing Strike\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnUnbalancingStrikeSelf:Show()\n\t\t\tspecWarnUnbalancingStrikeSelf:Play(\"defensive\")\n\t\telse\n\t\t\tspecWarnUnbalancingStrike:Show(args.destName)\n\t\t\tspecWarnUnbalancingStrike:Play(\"tauntboss\")\n\t\tend\n\telseif args:IsSpellID(62526, 62527) then\t-- Rune Detonation\n\t\tif args:IsPlayer() then\n\t\t\tyellRuneDetonation:Yell()\n\t\telseif self:CheckNearby(10, args.destName) then\n\t\t\tspecWarnRuneDetonation:Show(args.destName)\n\t\t\tspecWarnRuneDetonation:Play(\"runaway\")\n\t\telseif self:CheckBossDistance(args.sourceGUID, true, 1180) then\t--Within Scroll of Stamina range (33) -- CheckBossDistance prone to fail since boss frame is only created on Stage 2 and the fallback would require raidtarget to be Thorim, which there is really no point in. Even if it fails 99% of the time, it returns true regardless so keep it\n\t\t\twarnRuneDetonation:Show(args.destName)\n\t\tend\n\t\tif self.Options.SetIconOnRuneDetonation then\n\t\t\tself:SetIcon(args.destName, 7, 5)\n\t\tend\n\telseif spellId == 62279 then\t-- Lightning Charge\n\t\twarnLightningCharge:Show()\n\t\ttimerLightningCharge:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED_DOSE(args)\n\tif args.spellId == 62279 then\t-- Lightning Charge\n\t\twarnLightningCharge:Show()\n\t\ttimerLightningCharge:Start()\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, _, destName, destFlags, spellId)\n\tif spellId == 62017 then -- Lightning Shock\n\t\tif bit.band(destFlags, COMBATLOG_OBJECT_AFFILIATION_MINE) ~= 0\n\t\tand bit.band(destFlags, COMBATLOG_OBJECT_TYPE_PLAYER) ~= 0\n\t\tand self:AntiSpam(5, 1) then\n\t\t\tspecWarnLightningShock:Show()\n\t\t\tspecWarnLightningShock:Play(\"runaway\")\n\t\tend\n\telseif spellId == 62466 and self.Options.AnnounceFails and DBM:GetRaidRank() >= 1 and DBM:GetRaidUnitId(destName) ~= \"none\" and destName then\n\t\tlastcharge[destName] = (lastcharge[destName] or 0) + 1\n\t\tSendChatMessage(L.ChargeOn:format(destName), \"RAID\")\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.YellPhase2 or msg:find(L.YellPhase2) then\t\t-- Bossfight (tank and spank)\n\t\tself:SendSync(\"Phase2\")\n\t-- elseif msg == L.YellKill or msg:find(L.YellKill) then\n\t--\tenrageTimer:Stop()\n\telseif msg == L.YellHardModeFailed or msg:find(L.YellHardModeFailed) then -- Hard Mode failed\n\t\tself.vb.isHardMode = false\n\t\tspecWarnHardModeFailed:Show()\n\telseif msg == L.YellHardModeActive or msg:find(L.YellHardModeActive) then -- Hard Mode activated\n\t\tself.vb.isHardMode = true\n\t\tspecWarnHardModeActivated:Show()\n\tend\nend\n\nfunction mod:OnSync(event)\n\tif event == \"Phase2\" and self.vb.phase < 2 then\n\t\tself:SetStage(2)\n\t\twarnPhase2:Show()\n\t\twarnPhase2:Play(\"ptwo\")\n\t\tenrageTimerStage1:Stop()\n\t\ttimerHardmode:Stop() -- Phase 2 detection happens before the yell, so keep this here\n\t\ttimerStormhammerCD:Stop()\n\t\tenrageTimerStage2:Start(300)\n\t\ttimerLightningCharge:Start(35.6) -- (S3 VOD review 2022/07/15, reconfirmed with S3 FM HM log 2022/07/17 || 25m Lordaeron 2022/10/09) - 36 || 35.6\n\tend\nend\n"
  },
  {
    "path": "DBM-Ulduar/XT002.lua",
    "content": "local mod\t= DBM:NewMod(\"XT002\", \"DBM-Ulduar\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(33293)\nmod:SetEncounterID(747)\nmod:SetUsedIcons(1, 2)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 62776\",\n\t\"SPELL_AURA_APPLIED 62775 63018 65121 63024 64234 63849\",\n\t\"SPELL_AURA_REMOVED 63018 65121 63024 64234 63849\",\n\t\"SPELL_DAMAGE 64208 64206\",\n\t\"SPELL_MISSED 64208 64206\"\n)\n\n-- General\nlocal enrageTimer\t\t\t\t\t= mod:NewBerserkTimer(600)\nlocal timerAchieve\t\t\t\t\t= mod:NewAchievementTimer(205, 2937)\n\nmod:AddRangeFrameOption(12, nil, true)\n\n-- Stage One\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1))\nlocal warnLightBomb\t\t\t\t\t= mod:NewTargetNoFilterAnnounce(65121, 3)\nlocal warnGravityBomb\t\t\t\t= mod:NewTargetNoFilterAnnounce(64234, 3)\n\nlocal specWarnTympanicTantrum\t\t= mod:NewSpecialWarningSpell(62776, nil, nil, nil, 1, 2)\nlocal specWarnLightBomb\t\t\t\t= mod:NewSpecialWarningMoveAway(65121, nil, nil, nil, 1, 2)\nlocal yellLightBomb\t\t\t\t\t= mod:NewYell(65121)\nlocal specWarnGravityBomb\t\t\t= mod:NewSpecialWarningMoveAway(64234, nil, nil, nil, 1, 2)\nlocal yellGravityBomb\t\t\t\t= mod:NewYell(64234)\n\nlocal timerTympanicTantrumCast\t\t= mod:NewCastTimer(62776)\nlocal timerTympanicTantrum\t\t\t= mod:NewBuffActiveTimer(8, 62776, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON)\nlocal timerTympanicTantrumCD\t\t= mod:NewCDTimer(60, 62776, nil, nil, nil, 2, nil, DBM_COMMON_L.HEALER_ICON, nil, 3) -- S3 FM Log review 2022/07/17 - \" Tympanic Tantrum-62776-npc:33293 = pull:60.0/Stage 1/60.0, Stage 2/6.6, Stage 1/29.0, 35.9/64.9/71.5, 60.0, 60.0, 60.0, 60.1, 60.0\", -- [1]\n\nlocal timerLightBomb\t\t\t\t= mod:NewTargetTimer(9, 65121, nil, nil, nil, 3)\nlocal timerGravityBomb\t\t\t\t= mod:NewTargetTimer(9, 64234, nil, nil, nil, 3)\n\nmod:AddSetIconOption(\"SetIconOnLightBombTarget\", 65121, true, true, {1})\nmod:AddSetIconOption(\"SetIconOnGravityBombTarget\", 64234, true, true, {2})\n\n-- Stage Two\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2))\nlocal timerHeart\t\t\t\t\t= mod:NewCastTimer(30, 63849, nil, nil, nil, 6, nil, DBM_COMMON_L.DAMAGE_ICON)\n\n-- Hard Mode\nmod:AddTimerLine(DBM_COMMON_L.HEROIC_ICON..DBM_CORE_L.HARD_MODE)\nlocal specWarnConsumption\t\t\t= mod:NewSpecialWarningGTFO(64206, nil, nil, nil, 1, 8)--Hard mode void zone dropped by Gravity Bomb\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tenrageTimer:Start(-delay)\n\ttimerAchieve:Start()\n\tif self:IsDifficulty(\"normal10\") then -- REVIEW. No log yet to validate this.\n\t\ttimerTympanicTantrumCD:Start(35-delay)\n\telse\n\t\ttimerTympanicTantrumCD:Start(60-delay)\n\tend\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(12)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 62776 then\t\t\t\t\t-- Tympanic Tantrum (aoe damage + daze)\n\t\tspecWarnTympanicTantrum:Show()\n\t\tspecWarnTympanicTantrum:Play(\"aesoon\")\n\t\ttimerTympanicTantrumCast:Start()\n\t\ttimerTympanicTantrumCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 62775 and args.auraType == \"DEBUFF\" then\t-- Tympanic Tantrum\n\t\ttimerTympanicTantrum:Start()\n\telseif args:IsSpellID(63018, 65121) then\t-- Light Bomb\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnLightBomb:Show()\n\t\t\tspecWarnLightBomb:Play(\"runout\")\n\t\t\tyellLightBomb:Yell()\n\t\tend\n\t\tif self.Options.SetIconOnLightBombTarget then\n\t\t\tself:SetIcon(args.destName, 1)\n\t\tend\n\t\twarnLightBomb:Show(args.destName)\n\t\ttimerLightBomb:Start(args.destName)\n\telseif args:IsSpellID(63024, 64234) then\t\t-- Gravity Bomb\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnGravityBomb:Show()\n\t\t\tspecWarnGravityBomb:Play(\"runout\")\n\t\t\tyellGravityBomb:Yell()\n\t\tend\n\t\tif self.Options.SetIconOnGravityBombTarget then\n\t\t\tself:SetIcon(args.destName, 2)\n\t\tend\n\t\twarnGravityBomb:Show(args.destName)\n\t\ttimerGravityBomb:Start(args.destName)\n\telseif spellId == 63849 then\t-- Exposed Heart\n\t\tself:SetStage(2)\n\t\ttimerTympanicTantrumCD:Stop()\n\t\ttimerTympanicTantrum:Stop()\n\t\ttimerHeart:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(63018, 65121) then\t-- Light Bomb\n\t\tif self.Options.SetIconOnLightBombTarget then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\telseif args:IsSpellID(63024, 64234) then\t-- Gravity Bomb\n\t\tif self.Options.SetIconOnGravityBombTarget then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\telseif args.spellId == 63849 then\t-- Exposed Heart\n\t\tself:SetStage(1)\n\t\ttimerHeart:Stop()\n\t\ttimerTympanicTantrumCD:Start(35.6) -- REVIEW! Variance? (S3 FM Log review 2022/07/17 || 25m Lordearon 2022/10/10) -- 35.9 || 35.6\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, spellId)\n\tif (spellId == 64208 or spellId == 64206) and destGUID == UnitGUID(\"player\") and self:AntiSpam() then\n\t\tspecWarnConsumption:Show()\n\t\tspecWarnConsumption:Play(\"watchfeet\")\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n"
  },
  {
    "path": "DBM-Ulduar/YoggSaron.lua",
    "content": "local mod\t= DBM:NewMod(\"YoggSaron\", \"DBM-Ulduar\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(33288)\nmod:SetEncounterID(756)\nmod:RegisterCombat(\"combat_yell\", L.YellPull)\nmod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7, 8)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 64059 64189 63138 63830 63802\",\n\t\"SPELL_CAST_SUCCESS 64144 64465\", --64167 64163\",\n\t\"SPELL_SUMMON 62979\",\n\t\"SPELL_AURA_APPLIED 63802 63830 63881 64126 64125 63138 63894 64775 64163 64465\",\n\t\"SPELL_AURA_REMOVED 63802 63894 64163 63830 63138 63881 64465\",\n\t\"SPELL_AURA_REMOVED_DOSE 63050\",\n\t\"UNIT_HEALTH\"\n--\t\"UNIT_SPELLCAST_START boss1\"\n)\n\n--General\nlocal enrageTimer\t\t\t\t\t= mod:NewBerserkTimer(900)\nlocal timerAchieve\t\t\t\t\t= mod:NewAchievementTimer(420, 3012)\n\n-- I have hidden most NPC TimerLines and only kept stage and brain TimerLines to prevent GUI clutter.\n-- Stage One: The Lucid Dream\nmod:AddTimerLine(L.S1TheLucidDream)\n-- Sara\n-- mod:AddTimerLine(L.Sara)\nlocal warnFervor\t\t\t\t\t= mod:NewTargetAnnounce(63138, 4)\n\nlocal specWarnFervor\t\t\t\t= mod:NewSpecialWarningYou(63138, nil, nil, nil, 1, 2)\n\nlocal timerFervor\t\t\t\t\t= mod:NewTargetTimer(15, 63138, nil, false, 2)\n\nmod:AddSetIconOption(\"SetIconOnFervorTarget\", 63138, false, false, {7})\nmod:AddBoolOption(\"ShowSaraHealth\", false)\n\n-- Guardian of Yogg-Saron\n-- mod:AddTimerLine(L.GuardianofYoggSaron)\nlocal warnGuardianSpawned\t\t\t= mod:NewAnnounce(\"WarningGuardianSpawned\", 3, 62979, nil, nil, nil, 62979)\n\nlocal specWarnGuardianLow\t\t\t= mod:NewSpecialWarning(\"SpecWarnGuardianLow\", false, nil, nil, nil, nil, nil, 62979, 62979)\n\n-- Stage Two: Descent Into Madness\nmod:AddTimerLine(L.S2DescentIntoMadness)\nlocal warnP2\t\t\t\t\t\t= mod:NewPhaseAnnounce(2, 2, nil, nil, nil, nil, nil, 2)\nlocal warnSanity\t\t\t\t\t= mod:NewAnnounce(\"WarningSanity\", 3, 63050, nil, nil, nil, 63050)\n\nlocal specWarnSanity\t\t\t\t= mod:NewSpecialWarning(\"SpecWarnSanity\", nil, nil, nil, nil, nil, nil, 63050, 63050)--Warning, no voice pack support\n\nmod:AddInfoFrameOption(63050)\n\n-- Sara\n-- mod:AddTimerLine(L.Sara)\nlocal warnBrainLink\t\t\t\t\t= mod:NewTargetAnnounce(63802, 3)\n\nlocal specWarnBrainLink\t\t\t\t= mod:NewSpecialWarningYou(63802, nil, nil, nil, 1, 2)\nlocal specWarnMalady\t\t\t\t= mod:NewSpecialWarningYou(63830, nil, nil, nil, 1, 2)\nlocal specWarnMaladyNear\t\t\t= mod:NewSpecialWarningClose(63830, nil, nil, nil, 1, 2)\nlocal yellMalady\t\t\t\t\t= mod:NewYell(63830)\n\nlocal timerBrainLinkCD\t\t\t\t= mod:NewCDTimer(23, 63802, nil, nil, nil, 3) -- 3s variance [23-26] + portalled players incurring in a possible ~50-80s variance (25 man NM log 2022/07/10 || S3 HM log 2022/07/21) - 25.4, 26.0 || 25.5, 24.1 ; 24.7, 23.9 ; 24.7, 23.7, 24.1\nlocal timerMaladyCD\t\t\t\t\t= mod:NewCDTimer(18.7, 63830, nil, nil, nil, 3) -- 7s variance [18-25] + portalled players incurring in a possible ~50-80s variance (25 man NM log 2022/07/10 || S3 HM log 2022/07/21 || 25m Lordaeron 2022/10/09 || 25m Lordaeron 2022/10/30) - 22.3, 22.0 || 21.3, 20.6, 20.2, 52.1, 20.4, 60.8, 20.8, 60.4, 24.8 ; 19.6, 24.5, 60.8, 22.7, 56.8, 21.5, 22.4, 46.5 || 26.0, 19.4, 63.6, 24.1, 51.3, 24.2 || 18.8, 23.0, 24.9, 52.0, 23.4\n\nmod:AddSetIconOption(\"SetIconOnBrainLinkTarget\", 63802, true, false, {1, 2})\nmod:AddSetIconOption(\"SetIconOnFearTarget\", 63830, true, false, {6})\nmod:AddArrowOption(\"MaladyArrow\", 63830, true)\n\n-- Crusher Tentacle\n-- mod:AddTimerLine(L.CrusherTentacle)\nlocal warnCrusherTentacleSpawned\t= mod:NewAnnounce(\"WarningCrusherTentacleSpawned\", 2, \"Interface\\\\Icons\\\\achievement_boss_yoggsaron_01\", nil, nil, nil, 64139)\n\n-- Corruptor Tentacle\n-- mod:AddTimerLine(L.CorruptorTentacle)\n\n-- Constrictor Tentacle\n-- mod:AddTimerLine(L.ConstrictorTentacle)\nlocal warnSqueeze\t\t\t\t\t= mod:NewTargetNoFilterAnnounce(64125, 3)\n\nlocal yellSqueeze\t\t\t\t\t= mod:NewYell(64125)  -- Constrictor Tentacle\n\n-- Descent into Madness\nmod:AddTimerLine(L.DescentIntoMadness)\nlocal warnBrainPortalSoon\t\t\t= mod:NewAnnounce(\"WarnBrainPortalSoon\", 2, 57687, nil, nil, nil, 64027) -- 10 second pre-warn\n\nlocal specWarnBrainPortalSoon\t\t= mod:NewSpecialWarning(\"SpecWarnBrainPortalSoon\", false, nil, nil, nil, nil, nil, 57687, 64027) -- 3 second special pre-warn\n\nlocal timerBrainPortal\t\t\t\t= mod:NewTimer(20, \"NextPortal\", 57687, nil, nil, 5, nil, nil, nil, nil, nil, nil, nil, 64027)\n\n-- Influence Tentacle\n-- mod:AddTimerLine(L.InfluenceTentacle)\n\n-- Laughing Skull\n-- mod:AddTimerLine(L.LaughingSkull)\n\n-- Brain of Yogg-Saron\n-- mod:AddTimerLine(L.BrainofYoggSaron)\nlocal warnMadness\t\t\t\t\t= mod:NewCastAnnounce(64059, 2)\n\nlocal specWarnMadnessOutNow\t\t\t= mod:NewSpecialWarning(\"SpecWarnMadnessOutNow\", nil, nil, nil, nil, nil, nil, 64059, 64059)  -- Brain of Yogg-Saron. Warning, no voice pack support\n\nlocal timerMadness\t\t\t\t\t= mod:NewCastTimer(60, 64059, nil, nil, nil, 5, nil, DBM_COMMON_L.DEADLY_ICON, nil, 3)  -- Brain of Yogg-Saron\n\n-- Stage Three: True Face of Death\nmod:AddTimerLine(L.S3TrueFaceofDeath)\nlocal warnP3\t\t\t\t\t\t= mod:NewPhaseAnnounce(3, 2, nil, nil, nil, nil, nil, 2)\n\n-- Yogg-Saron\n-- mod:AddTimerLine(L.YoggSaron)\nlocal specWarnLunaticGaze\t\t\t= mod:NewSpecialWarningLookAway(64163, nil, nil, nil, 1, 2)\n\nlocal timerLunaticGaze\t\t\t\t= mod:NewCastTimer(4, 64163, nil, nil, nil, 2, nil, DBM_COMMON_L.IMPORTANT_ICON) -- Yogg-Saron's Gaze\nlocal timerNextLunaticGaze\t\t\t= mod:NewCDTimer(8, 64163, nil, nil, nil, 2, nil, DBM_COMMON_L.IMPORTANT_ICON) -- Yogg-Saron's Gaze, Log reviewed (25 man NM  2022/07/10) - [cast_success: apply 4s cast time correction factor] 12.0, 12.0, 12.1, 12.1, 12.0, 12.0\n\nmod:AddSetIconOption(\"SetIconOnBeacon\", 64465, true, true, {1, 2, 3, 4, 5, 6, 7, 8})\n\n-- Immortal Guardian\n-- mod:AddTimerLine(L.ImmortalGuardian)\nlocal warnEmpowerSoon\t\t\t\t= mod:NewSoonAnnounce(64486, 4)\n\nlocal timerEmpower\t\t\t\t\t= mod:NewCDTimer(46.0, 64486, nil, nil, nil, 3) -- REVIEW! variance 45-50? (S3 HM log 2022/07/21) - 46.0, 46.0, 47.4, 48.2\nlocal timerEmpowerDuration\t\t\t= mod:NewBuffActiveTimer(10, 64486, nil, nil, nil, 3)\n\nmod:GroupSpells(64486, 64465) -- Empowering Shadows, Shadow Beacon\n\n-- Hard Mode\nmod:AddTimerLine(DBM_COMMON_L.HEROIC_ICON..DBM_CORE_L.HARD_MODE)\n-- Stage Three: True Face of Death\nmod:AddTimerLine(L.S3TrueFaceofDeath)\nlocal warnDeafeningRoarSoon\t\t\t= mod:NewPreWarnAnnounce(64189, 5, 3)\n\nlocal specWarnDeafeningRoar\t\t\t= mod:NewSpecialWarningSpell(64189, nil, nil, nil, 1, 2)\n\nlocal timerCastDeafeningRoar\t\t= mod:NewCastTimer(2.3, 64189, nil, nil, nil, 2)\nlocal timerNextDeafeningRoar\t\t= mod:NewNextTimer(58, 64189, nil, nil, nil, 2) -- (S2 VOD || S3 VOD 2022/07/15 || S3 HM log 2022/07/21) - 58 || 58, 58, 58, 58, 60, 60, 60 || 60.1, 60.1, 60.1\n\nlocal targetWarningsShown = {}\nlocal brainLinkTargets = {}\nlocal SanityBuff = DBM:GetSpellInfoNew(63050)\nmod.vb.brainLinkIcon = 2\nmod.vb.beaconIcon = 8\nmod.vb.Guardians = 0\n\nfunction mod:OnCombatStart()\n\tself:SetStage(1)\n\tself.vb.brainLinkIcon = 2\n\tself.vb.beaconIcon = 8\n\tself.vb.Guardians = 0\n\tenrageTimer:Start()\n\ttimerAchieve:Start()\n\ttable.wipe(targetWarningsShown)\n\ttable.wipe(brainLinkTargets)\n\tif self.Options.InfoFrame then\n\t\tDBM.InfoFrame:SetHeader(SanityBuff)\n\t\tDBM.InfoFrame:Show(30, \"playerdebuffstacks\", SanityBuff, 2)--Sorted lowest first (highest first is default of arg not given)\n\tend\n\tif self.Options.ShowSaraHealth then\n\t\tif not self.Options.HealthFrame then\n\t\t\tDBM.BossHealth:Show(L.name)\n\t\telse\n\t\t\tDBM.BossHealth:AddBoss(33134, L.Sara)\n\t\tend\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.InfoFrame then\n\t\tDBM.InfoFrame:Hide()\n\tend\nend\n\nfunction mod:FervorTarget(targetname)\n\tif not targetname then return end\n\tif targetname == UnitName(\"player\") and self:AntiSpam(4, 1) then\n\t\tspecWarnFervor:Show()\n\t\tspecWarnFervor:Play(\"targetyou\")\n\tend\nend\n\nlocal function warnBrainLinkWarning(self)\n\twarnBrainLink:Show(table.concat(brainLinkTargets, \"<, >\"))\n\ttable.wipe(brainLinkTargets)\n\tself.vb.brainLinkIcon = 2\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 64059 then\t-- Induce Madness\n\t\ttimerMadness:Start()\n\t\twarnMadness:Show()\n\t\ttimerBrainPortal:Schedule(60) -- Log reviewed [60 schedule + 20 timer] (25 man NM log 2022/07/10 || S3 HM log 2022/07/21) - 80.0 || 80.0, 80.1 ; 80.0, 80.0, 80.0\n\t\twarnBrainPortalSoon:Schedule(70)\n\t\tspecWarnBrainPortalSoon:Schedule(77)\n\t\tspecWarnMadnessOutNow:Schedule(55) -- TO DO: implement brain room check?\n\telseif spellId == 64189 then\t\t--Deafening Roar\n\t\ttimerNextDeafeningRoar:Start()\n\t\twarnDeafeningRoarSoon:Schedule(53)\n\t\ttimerCastDeafeningRoar:Start()\n\t\tspecWarnDeafeningRoar:Show()\n\t\tspecWarnDeafeningRoar:Play(\"silencesoon\")\n\telseif spellId == 63138 then\t\t--Sara's Fervor\n\t\tself:BossTargetScanner(args.sourceGUID, \"FervorTarget\", 0.1, 12, true, nil, nil, nil, true)\n\telseif spellId == 63830 then\t-- Malady of the Mind\n\t\ttimerMaladyCD:Start()\n\telseif spellId == 63802 then\t-- Brain Link\n\t\ttimerBrainLinkCD:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 64144 and self:GetUnitCreatureId(args.sourceGUID) == 33966 then -- Never fires on Warmane\n\t\tDBM:AddMsg(\"Erupt unhidden from combat log. Notify Zidras on Discord or GitHub\")\n\t\twarnCrusherTentacleSpawned:Show()\n\telseif spellId == 64465 then -- Shadow Beacon\n\t\ttimerEmpower:Start()\n\t\ttimerEmpowerDuration:Start()\n\t\twarnEmpowerSoon:Schedule(40)\n--\telseif args:IsSpellID(64167, 64163) and self:AntiSpam(3, 3) then\t-- Lunatic Gaze, not needed since it's running below on SAA/SAR\n--\t\ttimerLunaticGaze:Start()\n--\t\ttimerBrainPortal:Start(60) -- Why?\n--\t\twarnBrainPortalSoon:Schedule(50) -- Why?\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 62979 then\n\t\tself.vb.Guardians = self.vb.Guardians + 1\n\t\twarnGuardianSpawned:Show(self.vb.Guardians)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 63802 then\t\t-- Brain Link\n\t\tself:Unschedule(warnBrainLinkWarning)\n\t\tbrainLinkTargets[#brainLinkTargets + 1] = args.destName\n\t\tif self.Options.SetIconOnBrainLinkTarget then\n\t\t\tself:SetIcon(args.destName, self.vb.brainLinkIcon)\n\t\tend\n\t\tself.vb.brainLinkIcon = self.vb.brainLinkIcon - 1\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnBrainLink:Show()\n\t\t\tspecWarnBrainLink:Play(\"linegather\")\n\t\tend\n\t\tif #brainLinkTargets == 2 then\n\t\t\twarnBrainLinkWarning(self)\n\t\telse\n\t\t\tself:Schedule(0.5, warnBrainLinkWarning, self)\n\t\tend\n--\t\tif self:AntiSpam(5, 2) then\n--\t\t\ttimerBrainLinkCD:Start()\n--\t\tend\n\telseif args:IsSpellID(63830, 63881) then   -- Malady of the Mind (Death Coil)\n\t\tif self.Options.SetIconOnFearTarget then\n\t\t\tself:SetIcon(args.destName, 6, 30)\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnMalady:Show()\n\t\t\tspecWarnMalady:Play(\"targetyou\")\n\t\t\tyellMalady:Yell()\n\t\telseif self:CheckNearby(11, args.destName) then\n\t\t\tspecWarnMaladyNear:Show(args.destName)\n\t\t\tspecWarnMaladyNear:Play(\"runaway\")\n\t\t\tif self.Options.MaladyArrow then\n\t\t\t\tlocal uId = DBM:GetRaidUnitId(args.destName)\n\t\t\t\tif uId then\n\t\t\t\t\tlocal x, y = GetPlayerMapPosition(uId)\n\t\t\t\t\tif x == 0 and y == 0 then\n\t\t\t\t\t\tSetMapToCurrentZone()\n\t\t\t\t\t\tx, y = GetPlayerMapPosition(uId)\n\t\t\t\t\tend\n\t\t\t\t\tDBM.Arrow:ShowRunAway(x, y, 12, 5)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n--\t\ttimerMaladyCD:Start() -- malady jumps would refire this and mess with the timer. Revert to cast_start\n\telseif args:IsSpellID(64126, 64125) then\t-- Squeeze\n\t\twarnSqueeze:Show(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tyellSqueeze:Yell()\n\t\tend\n\telseif spellId == 63138 then\t-- Sara's Fervor\n\t\twarnFervor:Show(args.destName)\n\t\ttimerFervor:Start(args.destName)\n\t\tif self.Options.SetIconOnFervorTarget then\n\t\t\tself:SetIcon(args.destName, 7, 15)\n\t\tend\n\t\tif args:IsPlayer() and self:AntiSpam(4, 1) then\n\t\t\tspecWarnFervor:Show()\n\t\t\tspecWarnFervor:Play(\"targetyou\")\n\t\tend\n\telseif args:IsSpellID(63894, 64775) and self.vb.phase < 2 then\t-- Shadowy Barrier of Yogg-Saron (this is happens when p2 starts, ~1s after IEEU, so correction factor is needed). Bugged on Warmane, 63894 is never applied (only removed), instead 64775 is applied to Sara\n\t\t-- \"<114.74 19:51:51> [CLEU] SPELL_AURA_APPLIED:0xF13000816E0007D4:Sara:0xF13000816E0007D4:Sara:64775:Shadowy Barrier:BUFF:nil:\", -- [5432]\n\t\tself:SetStage(2)\n\t\ttimerMaladyCD:Start(17.8)\t-- (25 man NM log 2022/07/10 || S3 HM log 2022/07/21) - 18 || 18.0 ; 17.9 ; 17.8\n\t\ttimerBrainLinkCD:Start(23)\t-- (25 man NM log 2022/07/10 || S3 HM log 2022/07/21) - 23 || 23.0 ; 23.0\n\t\ttimerBrainPortal:Start(59)\t-- (25 man NM log 2022/07/10 || S3 HM log 2022/07/21) - 59 || 59.8 ; 59.7 ; 59.5\n\t\twarnBrainPortalSoon:Schedule(49)\n\t\tspecWarnBrainPortalSoon:Schedule(56)\n\t\twarnP2:Show()\n\t\twarnP2:Play(\"ptwo\")\n\t\tif self.Options.ShowSaraHealth then\n\t\t\tDBM.BossHealth:RemoveBoss(33134)\n\t\t\tif not self.Options.HealthFrame then\n\t\t\t\tDBM.BossHealth:Hide()\n\t\t\tend\n\t\tend\n\telseif spellId == 64163 then\t-- Lunatic Gaze phase 3 (reduces sanity) ; 64167 Lunatic Gaze is related to Laughing Skulls, which is not important\n\t\tspecWarnLunaticGaze:Show(args.sourceName)\n\t\tspecWarnLunaticGaze:Play(\"turnaway\")\n\t\ttimerLunaticGaze:Start()\n\telseif spellId == 64465 then -- Shadow Beacon\n\t\tif self.Options.SetIconOnBeacon then\n\t\t\tself:ScanForMobs(args.destGUID, 2, self.vb.beaconIcon, 1, nil, 6, \"SetIconOnBeacon\", true, nil, nil, true)\n\t\tend\n\t\tself.vb.beaconIcon = self.vb.beaconIcon - 1\n\t\tif self.vb.beaconIcon == 0 then\n\t\t\tself.vb.beaconIcon = 8\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 63802 and self.Options.SetIconOnBrainLinkTarget then\t\t-- Brain Link\n\t\tself:SetIcon(args.destName, 0)\n\telseif spellId == 63138 and self.Options.SetIconOnFervorTarget then\t-- Sara's Fervor\n\t\tself:SetIcon(args.destName, 0)\n\telseif spellId == 63894 then\t\t-- Shadowy Barrier removed from Yogg-Saron (start p3)\n\t\t-- \"<298.03 19:54:54> [CLEU] SPELL_AURA_REMOVED:0xF150008208000F6B:Yogg-Saron:0xF150008208000F6B:Yogg-Saron:63894:Shadowy Barrier:BUFF:nil:\", -- [15528]\n\t\tself:SendSync(\"Phase3\")\t\t\t-- Sync this because you don't get it in your combat log if you are in brain room.\n\telseif spellId == 64163 then\t-- Lunatic Gaze phase 3 ; 64167 Lunatic Gaze is related to Laughing Skulls, which is not important\n\t\ttimerNextLunaticGaze:Start() -- 12s interval - 4s cast = 8s for next cast\n\telseif args:IsSpellID(63830, 63881) and self.Options.SetIconOnFearTarget then   -- Malady of the Mind (Death Coil)\n\t\tself:SetIcon(args.destName, 0)\n\telseif spellId == 64465 then -- Shadow Beacon\n\t\tif self.Options.SetIconOnBeacon then\n\t\t\tself:ScanForMobs(args.destGUID, 2, 0, 1, nil, 6, \"SetIconOnBeacon\", true, nil, nil, true)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED_DOSE(args)\n\tif args.spellId == 63050 and args.destGUID == UnitGUID(\"player\") then\n\t\tlocal amount = args.amount or 1\n\t\tif amount == 50 then\n\t\t\twarnSanity:Show(args.amount)\n\t\telseif amount == 35 or amount == 25 or amount == 15 then\n\t\t\tspecWarnSanity:Show(amount)\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif self.vb.phase == 1 and uId == \"target\" and self:GetUnitCreatureId(uId) == 33136 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.3 and not targetWarningsShown[UnitGUID(uId)] then\n\t\ttargetWarningsShown[UnitGUID(uId)] = true\n\t\tspecWarnGuardianLow:Show()\n\tend\nend\n\n--[[function mod:UNIT_SPELLCAST_START(_, spellName)\n\tif spellName == GetSpellInfo(64189) then\n\t\ttimerNextDeafeningRoar:Start()\n\t\twarnDeafeningRoarSoon:Schedule(53)\n\t\ttimerCastDeafeningRoar:Start()\n\t\tspecWarnDeafeningRoar:Show()\n\t\tspecWarnDeafeningRoar:Play(\"silencesoon\")\n\tend\nend]]\n\nfunction mod:OnSync(msg)\n\tif msg == \"Phase3\" then\n\t\tself:SetStage(3)\n\t\ttimerBrainPortal:Cancel()\n\t\twarnBrainPortalSoon:Cancel()\n\t\ttimerMaladyCD:Cancel()\n\t\ttimerBrainLinkCD:Cancel()\n\t\ttimerEmpower:Start(45.0) -- (S3 HM log 2022/07/21) - 45.0\n\t\twarnP3:Show()\n\t\twarnP3:Play(\"pthree\")\n\t\twarnEmpowerSoon:Schedule(40)\n\t\ttimerNextDeafeningRoar:Start(20) -- Has variance (S2 VOD || S3 VOD 2022/07/15 || S3 HM log 2022/07/21) - 21 || 22, 21.5, 20.6, 22.1, 20.0, 28, 28 || 28.1, 22.6\n\t\twarnDeafeningRoarSoon:Schedule(15)\n\t\ttimerNextLunaticGaze:Start(12) -- S3 VOD review\n\tend\nend\n"
  },
  {
    "path": "DBM-Ulduar/localization.cn.lua",
    "content": "if GetLocale() ~= \"zhCN\" then return end\nlocal L\n-----------------------\n--  Flame Leviathan  --\n-----------------------\nL = DBM:GetModLocalization(\"FlameLeviathan\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"烈焰巨兽\"\n})\n\nL:SetWarningLocalization({\n\tPursueWarn\t\t\t= \"追踪 -> >%s<\",\n\twarnNextPursueSoon\t= \"5秒后 更换目标\",\n\tSpecialPursueWarnYou= \"你被追踪 - 快跑\",\n\twarnWardofLife\t\t= \"生命结界 出现\"\n})\n\nL:SetOptionLocalization({\n\tSpecialPursueWarnYou= \"当你被追踪时显示特别警报\",\n\tPursueWarn\t\t\t= \"提示追踪的目标\",\n\twarnNextPursueSoon\t= \"为下一次追踪显示提前警报\",\n\twarnWardofLife\t\t= \"为生命结界出现显示特别警报\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t\t= \"检测到敌对实体。威胁评定协议启动。向主要目标发动攻击。30秒后重新评估。\",\n\tEmote\t\t\t\t= \"%%s开始追赶(%S+)%。\"\n})\n\n--------------------------------\n--  Ignis the Furnace Master  --\n--------------------------------\nL = DBM:GetModLocalization(\"Ignis\")\n\nL:SetGeneralLocalization({\n\tname = \"掌炉者伊格尼斯\"\n})\n\nL:SetOptionLocalization({\n\tsoundConcAuraMastery\t= \"播放$spell:31821的声音来否定$spell:63472的效果（只针对$spell:19746的主人|cFFF48CBA圣骑士|r\"\n})\n\n------------------\n--  Razorscale  --\n------------------\nL = DBM:GetModLocalization(\"Razorscale\")\n\nL:SetGeneralLocalization({\n\tname = \"锋鳞\"\n})\n\nL:SetWarningLocalization({\n\twarnTurretsReadySoon\t\t= \"20秒后 最后一座炮塔完成\",\n\twarnTurretsReady\t\t\t= \"最后一座炮塔已完成\",\n\tSpecWarnDevouringFlameCast\t= \"你中了噬体烈焰\",\n\tWarnDevouringFlameCast\t\t= \"噬体烈焰 -> >%s<\"\n})\n\nL:SetTimerLocalization({\n\ttimerTurret1\t\t\t= \"炮塔1\",\n\ttimerTurret2\t\t\t= \"炮塔2\",\n\ttimerTurret3\t\t\t= \"炮塔3\",\n\ttimerTurret4\t\t\t= \"炮塔4\",\n\ttimerGrounded\t\t\t= \"地面阶段\"\n})\n\nL:SetOptionLocalization({\n\twarnTurretsReadySoon\t= \"为炮塔显示提前警报\",\n\twarnTurretsReady\t\t= \"为炮塔显示警报\",\n\ttimerTurret1\t\t\t= \"为炮塔1显示计时条\",\n\ttimerTurret2\t\t\t= \"为炮塔2显示计时条\",\n\ttimerTurret3\t\t\t= \"为炮塔3显示计时条 (25人)\",\n\ttimerTurret4\t\t\t= \"为炮塔4显示计时条 (25人)\",\n\ttimerGrounded\t\t\t= \"为地面阶段显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tYellAir\t\t\t\t= \"给我们一点时间，做好建筑炮台的准备。\",\n\tYellAir2\t\t\t= \"火灭了！准备重建炮台！\",\n\tYellGround\t\t\t= \"快一点！她马上就要挣脱了！\",\n\tEmotePhase2\t\t\t= \"%%s被永久地禁锢在地面上！\"\n})\n\n----------------------------\n--  XT-002 Deconstructor  --\n----------------------------\nL = DBM:GetModLocalization(\"XT002\")\n\nL:SetGeneralLocalization({\n\tname = \"XT-002拆解者\"\n})\n\n--------------------\n--  Iron Council  --\n--------------------\nL = DBM:GetModLocalization(\"IronCouncil\")\n\nL:SetGeneralLocalization({\n\tname = \"钢铁议会\"\n})\n\nL:SetOptionLocalization({\n\tAlwaysWarnOnOverload\t\t= \"总是对$spell:63481显示警报(否则只有当目标是唤雷者的时候显示)\"\n})\n\nL:SetMiscLocalization({\n\tSteelbreaker\t\t\t= \"断钢者\",\n\tRunemasterMolgeim\t\t= \"符文大师莫尔基姆\",\n\tStormcallerBrundir\t\t= \"唤雷者布隆迪尔\"\n})\n\n----------------------------\n--  Algalon the Observer  --\n----------------------------\nL = DBM:GetModLocalization(\"Algalon\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"观察者奥尔加隆\"\n})\n\nL:SetWarningLocalization({\n\twarnStarLow\t\t\t= \"坍缩星血量低\"\n})\n\nL:SetTimerLocalization({\n\tNextCollapsingStar\t\t= \"下一次 坍缩星\",\n})\n\nL:SetOptionLocalization({\n\tNextCollapsingStar\t\t= \"为下一次坍缩星显示计时条\",\n\twarnStarLow\t\t\t= \"当坍缩星血量低(大约25%)时显示特别警报\"\n})\n\nL:SetMiscLocalization({\n--\tHealthInfo\t\t\t= \"为星星疗伤\",\n--\tFirstPull\t\t\t= \"通过我的双眼来观察你们的世界吧：一个广袤无垠的宇宙，即使是你们当中最睿智的人，也无法理解这一切。\",\n--\tYellPull\t\t\t= \"你们的行动不合逻辑。这场战斗所有可能产生的结果都已被计算在内。无论结果如何，万神殿都会收到观察者发出的信息。\",\n\tYellKill\t\t\t= \"我曾见证过无数个世界被造物者的烈焰吞噬，那些世界中的人们甚至来不及发出一声悲鸣就永远消逝了。整个星球从诞生到毁灭，不过是弹指一挥间。但是从始至终，我都没有为之动容……我，毫无，感觉。千亿的生命被毁灭。他们是否都像你们一样坚强？他们是否都像你们一样热爱生命？\",\n\tEmote_CollapsingStar= \"%s开始召唤坍缩之星！\",\n\tPhase2\t\t\t\t= \"看吧，这创世的神器！!\",\n\tCollapsingStar\t\t= \"坍缩之星\"\n})\n\n----------------\n--  Kologarn  --\n----------------\nL = DBM:GetModLocalization(\"Kologarn\")\n\nL:SetGeneralLocalization({\n\tname = \"科隆加恩\"\n})\n\nL:SetTimerLocalization({\n\ttimerLeftArm\t\t= \"左臂重生\",\n\ttimerRightArm\t\t= \"右臂重生\",\n\tachievementDisarmed\t= \"成就计时：断其臂膀\"\n})\n\nL:SetOptionLocalization({\n\ttimerLeftArm\t\t= \"为左臂重生显示计时条\",\n\ttimerRightArm\t\t= \"为右臂重生显示计时条\",\n\tachievementDisarmed\t= \"为成就：断其臂膀显示计时条\"\n})\n\nL:SetMiscLocalization({\n--\tYell_Trigger_arm_left = \"不疼不痒！\",\n--\tYell_Trigger_arm_right = \"只是轻伤而已！\",\n\tHealth_Body\t\t\t= \"科隆加恩身体\",\n\tHealth_Right_Arm\t= \"右臂\",\n\tHealth_Left_Arm\t\t= \"左臂\",\n\tFocusedEyebeam\t\t= \"在注视着你\"\n})\n\n---------------\n--  Auriaya  --\n---------------\nL = DBM:GetModLocalization(\"Auriaya\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"欧尔莉亚\"\n})\n\nL:SetWarningLocalization({\n\tWarnCatDied\t\t\t= \"野性防御者倒下(剩余%d只)\",\n\tWarnCatDiedOne\t\t\t= \"野性防御者倒下(剩下最后一只)\"\n})\n\n-- L:SetTimerLocalization({\n-- \ttimerDefender\t\t= \"野性防御者复活\"\n-- })\n\nL:SetOptionLocalization({\n\tWarnCatDied\t\t\t\t= \"当野性防御者死亡时显示警报\",\n\tWarnCatDiedOne\t\t\t= \"当野性防御者剩下最后一只时显示警报\"\n--\ttimerDefender\t\t\t= \"当野性防御者准备复活时显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tDefender\t\t\t= \"野性防御者(%d)\",\n\tYellPull\t\t\t= \"有些东西，最好永远都不去碰！\"\n})\n\n-------------\n--  Hodir  --\n-------------\nL = DBM:GetModLocalization(\"Hodir\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"霍迪尔\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"你要为你的罪行受到惩罚！\",\n\tYellKill\t\t\t= \"我……我终于从他的魔掌中……解脱了。\"\n})\n\n--------------\n--  Thorim  --\n--------------\nL = DBM:GetModLocalization(\"Thorim\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"托里姆\"\n})\n\nL:SetTimerLocalization({\n\tTimerHardmode\t\t= \"困难模式\"\n})\n\nL:SetOptionLocalization({\n\tspecWarnHardmode\t= \"特殊警报：困难模式\",\n\tTimerHardmode\t\t= \"为困难模式显示计时条\",\n\tAnnounceFails\t\t= \"公布中了闪电充能的玩家到团队频道<br/>(需要团长或助理权限)\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase1\t\t\t= \"入侵者！你们这些凡人竟敢坏了我的兴致，看我怎么……等等，你们……\",\n\tYellPhase2\t\t\t= \"狂妄的小崽子们，竟敢在我的地盘上挑战我？我要亲自碾碎你们！\",\n\tYellKill\t\t\t= \"住手！我认输了！\",\n\tYellHardModeActive\t= \"这不可能！托里姆陛下，我要让您的敌人在严寒中死去！\",\n\tYellHardModeFailed\t= \"这些可悲的凡人毫无威胁，根本不值得我动手。干掉他们！\",\n\tChargeOn\t\t\t= \"闪电充能 -> %s\",\n\tCharge\t\t\t\t= \"中了闪电充能(这一次): %s\"\n})\n\n-------------\n--  Freya  --\n-------------\nL = DBM:GetModLocalization(\"Freya\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"弗蕾亚\"\n})\n\nL:SetWarningLocalization({\n\tWarnSimulKill\t\t= \"第一只元素死亡 - 约12秒后复活\"\n})\n\nL:SetTimerLocalization({\n\tTimerSimulKill\t\t= \"复活\"\n})\n\nL:SetOptionLocalization({\n\tWarnSimulKill\t\t\t= \"提示第一只元素死亡\",\n\tTimerSimulKill\t\t\t= \"为三元素复活显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tSpawnYell\t\t\t= \"孩子们，帮帮我！\",\n\tWaterSpirit\t\t\t= \"古代水之精魂\",\n\tSnaplasher\t\t\t= \"迅疾鞭笞者\",\n\tStormLasher\t\t\t= \"风暴鞭笞者\",\n\tYellKill\t\t\t= \"他对我的控制已经不复存在了。我又一次恢复了理智。谢谢你们，英雄们。\",\n\tYellAdds1\t\t\t= \"艾欧娜尔，您的仆人需要帮助！\",\n\tYellAdds2\t\t\t= \"元素之潮会击垮你们！\",\n\tEmoteLGift\t\t\t= \"开始生长！\", -- |cFF00FFFF生命缚誓者的礼物|r开始生长！\n\tTrashRespawnTimer\t= \"弗蕾亚的小怪重生\",\n\tYellPullNormal\t\t= \"必须保卫温室！\",\n\tYellPullHard\t\t= \"长老们，将你们的力量赐予我！\"\n})\n\n----------------------\n--  Freya's Elders  --\n----------------------\nL = DBM:GetModLocalization(\"Freya_Elders\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"弗蕾亚的长者\"\n})\n\nL:SetOptionLocalization({\n\tTrashRespawnTimer\t= \"为弗蕾亚的小怪重生显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tTrashRespawnTimer\t= \"弗蕾亚的小怪重生\"\n})\n\n---------------\n--  Mimiron  --\n---------------\nL = DBM:GetModLocalization(\"Mimiron\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"米米尔隆\"\n})\n\nL:SetWarningLocalization({\n\tMagneticCore\t\t\t= \">%s< 拿到了磁核\",\n\tWarnBombSpawn\t\t\t= \"炸弹机器人出现了\"\n})\n\nL:SetTimerLocalization({\n\tTimerHardmode\t\t\t= \"困难模式 - 自毁程序\",\n\tTimeToPhase2\t\t\t= \"第2阶段开始\",\n\tTimeToPhase3\t\t\t= \"第3阶段开始\",\n\tTimeToPhase4\t\t\t= \"第4阶段开始\"\n})\n\nL:SetOptionLocalization({\n\tTimeToPhase2\t\t\t= \"为第2阶段开始显示计时条\",\n\tTimeToPhase3\t\t\t= \"为第3阶段开始显示计时条\",\n\tTimeToPhase4\t\t\t= \"为第4阶段开始显示计时条\",\n\tMagneticCore\t\t\t= \"提示磁核的拾取者\",\n\tAutoChangeLootToFFA\t\t= \"在第 3 阶段将战利品模式切换为对所有人免费\",\n\tWarnBombSpawn\t\t\t= \"为炸弹机器人显示警报\",\n\tTimerHardmode\t\t\t= \"为困难模式显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tMobPhase1\t\t\t= \"巨兽二型\",\n\tMobPhase2\t\t\t= \"VX-001\",\n\tMobPhase3\t\t\t= \"空中指挥单位\",\n\tMobPhase4\t\t\t= \"V-07-TR-0N\", -- don't localize\n\tYellPull\t\t\t= \"我们时间不多了，朋友们！来帮忙测试一下我所发明的最新型、最强大的机体吧。在你们改变主意之前，请允许我提醒一下，你们把XT-002搞得一团糟，应该算是欠我个人情吧。\",\n\tYellHardPull\t\t= \"自毁程序已经启动。\",\n\tYellPhase2\t\t\t= \"太棒了！测试结果非常好！外壳完整率百分之九十八点九！几乎没有划伤！继续。\",\n\tYellPhase3\t\t\t= \"非常感谢，朋友们！你们的帮助使我获得了一些极其珍贵的数据！下面，我要让你们——咦，我把它放哪去了？哦！这里。\",\n\tYellPhase4\t\t\t= \"初步测试阶段完成。真正的测试开始啦！\",\n\tYellKilled\t\t\t= \"看起来我的计算有一点小小的偏差。监狱中的恶魔侵蚀了我的思维，篡改了我的主要指令。所有系统都已恢复正常。完毕。\",\n\tLootMsg\t\t\t\t= \"(.+)获得了物品：.*Hitem:(%d+)\"\n})\n\n---------------------\n--  General Vezax  --\n---------------------\nL = DBM:GetModLocalization(\"GeneralVezax\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"维扎克斯将军\"\n})\n\nL:SetTimerLocalization({\n\thardmodeSpawn\t\t= \"萨隆邪铁畸体 出现\"\n})\n\nL:SetOptionLocalization({\n\thardmodeSpawn\t\t= \"为萨隆邪铁畸体出现显示计时条 (困难模式)\",\n\tCrashArrow\t\t\t= \"当你附近的人中了$spell:62660时显示DBM箭头\",\n})\n\nL:SetMiscLocalization({\n\tEmoteSaroniteVapors\t= \"一团萨隆邪铁蒸汽在附近聚集起来！\"\n})\n\n------------------\n--  Yogg-Saron  --\n------------------\nL = DBM:GetModLocalization(\"YoggSaron\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"尤格萨隆\"\n})\n\nL:SetWarningLocalization({\n\tWarningGuardianSpawned\t\t\t= \"尤格萨隆的卫士 %d 出现了\",\n\tWarningCrusherTentacleSpawned\t= \"重压触须 出现了\",\n\tWarningSanity\t\t\t\t\t= \"剩余理智：%d\",\n\tSpecWarnSanity\t\t\t\t\t= \"剩余理智：%d\",\n\tSpecWarnGuardianLow\t\t\t\t= \"停止攻击这只守护者\",\n\tSpecWarnMadnessOutNow\t\t\t= \"疯狂诱导即将结束 - 立刻传送出去\",\n\tWarnBrainPortalSoon\t\t\t\t= \"10秒后 脑部传送门\",\n\tSpecWarnBrainPortalSoon\t\t\t= \"脑部传送门 即将出现\"\n})\n\nL:SetTimerLocalization({\n\tNextPortal\t\t\t\t\t\t= \"下一次 脑部传送门\"\n})\n\nL:SetOptionLocalization({\n\tWarningGuardianSpawned\t\t\t= \"为尤格萨隆的卫士出现显示警报\",\n\tWarningCrusherTentacleSpawned\t= \"为重压触须出现显示警报\",\n\tWarningSanity\t\t\t\t\t= \"当理智剩下50时显示警报\",\n\tSpecWarnSanity\t\t\t\t\t= \"当理智过低(35,25,15)时显示特别警报\",\n\tSpecWarnGuardianLow\t\t\t\t= \"当尤格萨隆的卫士(第1阶段)血量过低时显示特别警报 (输出职业用)\",\n\tWarnBrainPortalSoon\t\t\t\t= \"为脑部传送门显示提前警报\",\n\tSpecWarnMadnessOutNow\t\t\t= \"为疯狂诱导结束前显示特别警报\",\n\tSpecWarnBrainPortalSoon\t\t\t= \"为下一次脑部传送门显示特别警报\",\n\tNextPortal\t\t\t\t\t\t= \"为下一次传送门显示计时条\",\n\tShowSaraHealth\t\t\t\t\t= \"显示萨拉在第1阶段的血量 (必须至少有一名团队成员设置首领为焦点目标)\",\n\tMaladyArrow\t\t\t\t\t\t= \"当你附近的人中了$spell:63881时显示DBM箭头\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t\t= \"攻击这头野兽要害的时刻即将来临！将你们的愤怒和仇恨倾泻到它的爪牙身上！\",\n\tS1TheLucidDream\t\t= \"第一阶段：清醒的梦境\",\n\tSara\t\t\t\t= \"萨拉\",\n\tGuardianofYoggSaron\t= \"尤格-萨隆的卫士\",\n\tS2DescentIntoMadness= \"第二阶段：坠入疯狂\",\n\tCrusherTentacle\t\t= \"重压触须\",\n\tCorruptorTentacle\t= \"腐蚀触须\",\n\tConstrictorTentacle\t= \"缠绕触须\",\n\tDescentIntoMadness\t= \"疯狂阶梯\",\n\tInfluenceTentacle\t= \"感应触须\",\n\tLaughingSkull\t\t= \"嘲笑之颅\",\n\tBrainofYoggSaron\t= \"尤格-萨隆的大脑\",\n\tS3TrueFaceofDeath\t= \"第三阶段：死亡的真正面貌\",\n\tYoggSaron\t\t\t= \"尤格-萨隆\",\n\tImmortalGuardian\t= \"不朽守护者\"\n})\n"
  },
  {
    "path": "DBM-Ulduar/localization.de.lua",
    "content": "﻿if GetLocale() ~= \"deDE\" then return end\n\nlocal L\n\n-----------------------\n--  Flame Leviathan  --\n-----------------------\nL = DBM:GetModLocalization(\"FlameLeviathan\")\n\nL:SetGeneralLocalization({\n\tname = \"Flammenleviathan\"\n})\n\nL:SetWarningLocalization({\n\tPursueWarn\t\t\t\t= \"Verfolgt >%s<\",\n\twarnNextPursueSoon\t\t= \"Zielwechsel in 5 Sekunden\",\n\tSpecialPursueWarnYou\t= \"Du wirst verfolgt - Lauf weg!\",\n\twarnWardofLife\t\t\t= \"Zauberschutz des Lebens erscheint\"\n})\n\nL:SetOptionLocalization({\n\tSpecialPursueWarnYou\t= \"Spezialwarnung, wenn du $spell:62374 wirst\",\n\tPursueWarn\t\t\t\t= \"Verkünde Ziele von $spell:62374\",\n\twarnNextPursueSoon\t\t= \"Zeige Vorwarnung für nächstes $spell:62374\",\n\twarnWardofLife\t\t\t= \"Spezialwarnung, wenn Zauberschutz des Lebens erscheint\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Feindeinheiten erkannt. Bedrohungsbewertung aktiv. Hauptziel erfasst. Neubewertung in T minus 30 Sekunden.\",\n\tEmote\t\t= \"%%s verfolgt (%S+)%.\"\n})\n\n--------------------------------\n--  Ignis the Furnace Master  --\n--------------------------------\nL = DBM:GetModLocalization(\"Ignis\")\n\nL:SetGeneralLocalization({\n\tname = \"Ignis, Meister des Eisenwerks\"\n})\n\nL:SetOptionLocalization({\n\tsoundConcAuraMastery\t= \"Spielt den Sound von $spell:31821, um die Effekte von $spell:63472 zu negieren (nur für den |cFFF48CBAPaladin|r, der der Besitzer von $spell:19746 ist)\"\n})\n\n------------------\n--  Razorscale  --\n------------------\nL = DBM:GetModLocalization(\"Razorscale\")\n\nL:SetGeneralLocalization({\n\tname = \"Klingenschuppe\"\n})\n\nL:SetWarningLocalization({\n\twarnTurretsReadySoon\t\t= \"Letzes Geschütz bereit in 20 Sekunden\",\n\twarnTurretsReady\t\t\t= \"Letzes Geschütz bereit\"\n})\n\nL:SetTimerLocalization({\n\ttimerTurret1\t= \"Geschütz 1\",\n\ttimerTurret2\t= \"Geschütz 2\",\n\ttimerTurret3\t= \"Geschütz 3\",\n\ttimerTurret4\t= \"Geschütz 4\",\n\ttimerGrounded\t= \"Bodenphase\"\n})\n\nL:SetOptionLocalization({\n\twarnTurretsReadySoon\t\t= \"Zeige Vorwarnung für Fertigstellung des letzten Harpunengeschützes\",\n\twarnTurretsReady\t\t\t= \"Zeige Warnung bei Fertigstellung des letzten Harpunengeschützes\",\n\ttimerTurret1\t\t\t\t= \"Zeige Zeit bis erstes Harpunengeschütz einsatzbereit ist\",\n\ttimerTurret2\t\t\t\t= \"Zeige Zeit bis zweites Harpunengeschütz einsatzbereit ist\",\n\ttimerTurret3\t\t\t\t= \"Zeige Zeit bis drittes Harpunengeschütz einsatzbereit ist (25 Spieler)\",\n\ttimerTurret4\t\t\t\t= \"Zeige Zeit bis viertes Harpunengeschütz einsatzbereit ist (25 Spieler)\",\n\ttimerGrounded\t\t\t\t= \"Dauer der Bodenphase anzeigen\"\n})\n\nL:SetMiscLocalization({\n\tYellAir\t\t\t\t= \"Gebt uns einen Moment, damit wir uns auf den Bau der Geschütze vorbereiten können.\",\n\tYellAir2\t\t\t= \"Feuer einstellen! Lasst uns diese Geschütze reparieren!\",\n\tYellGround\t\t\t= \"Beeilt Euch! Sie wird nicht lange am Boden bleiben!\",\n\tEmotePhase2\t\t\t= \"ist dauerhaft an den Boden gebunden!\"\n})\n\n----------------------------\n--  XT-002 Deconstructor  --\n----------------------------\nL = DBM:GetModLocalization(\"XT002\")\n\nL:SetGeneralLocalization({\n\tname = \"XT-002 Dekonstruktor\"\n})\n\n--------------------\n--  Iron Council  --\n--------------------\nL = DBM:GetModLocalization(\"IronCouncil\")\n\nL:SetGeneralLocalization({\n\tname = \"Versammlung des Eisens\"\n})\n\nL:SetOptionLocalization({\n\tAlwaysWarnOnOverload\t\t= \"Warne immer bei $spell:63481 (sonst nur wenn Sturmrufer Brundir im Ziel)\"\n})\n\nL:SetMiscLocalization({\n\tSteelbreaker\t\t= \"Stahlbrecher\",\n\tRunemasterMolgeim\t= \"Runenmeister Molgeim\",\n\tStormcallerBrundir\t= \"Sturmrufer Brundir\"\n})\n\n----------------------------\n--  Algalon the Observer  --\n----------------------------\nL = DBM:GetModLocalization(\"Algalon\")\n\nL:SetGeneralLocalization({\n\tname = \"Algalon der Beobachter\"\n})\n\nL:SetWarningLocalization({\n\twarnStarLow\t\t\t\t= \"Kollabierender Stern stirbt bald\"\n})\n\nL:SetTimerLocalization({\n\tNextCollapsingStar\t\t= \"Nächste Kollabierende Sterne\",\n})\n\nL:SetOptionLocalization({\n\tNextCollapsingStar\t\t= \"Zeige Zeit bis nächste Kollabierende Sterne erscheinen\",\n\twarnStarLow\t\t\t\t= \"Spezialwarnung, wenn ein Kollabierender Stern bald stirbt (bei ~25%)\"\n})\n\nL:SetMiscLocalization({\n--\tHealthInfo\t\t\t\t= \"Heilen für Sterne\",\n--\tFirstPull\t\t\t\t= \"Seht Eure Welt durch meine Augen: Ein Universum so gewaltig - grenzenlos - unbegreiflich selbst für die Klügsten unter Euch.\",\n--\tYellPull2\t\t\t\t= \"Euer Handeln ist unlogisch. Alle Möglichkeiten dieser Begegnung wurden berechnet. Das Pantheon wird die Nachricht des Beobachters erhalten, ungeachtet des Ausgangs.\",\n\tYellKill\t\t\t\t= \"Ich sah Welten umhüllt von den Flammen der Schöpfer, sah ohne einen Hauch von Trauer ihre Bewohner vergehen. Ganze Planetensysteme geboren und vernichtet, während Eure sterblichen Herzen nur einmal schlagen. Doch immer war mein Herz kalt... ohne Mitgefühl. Ich - habe - nichts - gefühlt. Millionen, Milliarden Leben verschwendet. Trugen sie alle dieselbe Beharrlichkeit in sich, wie Ihr? Liebten sie alle das Leben so sehr, wie Ihr es tut?\",\n\tEmote_CollapsingStar\t= \"%s beginnt damit, kollabierende Sterne zu beschwören!\",\n\tPhase2\t\t\t\t\t= \"Erblicket die Instrumente der Schöpfung!\",\n\tCollapsingStar\t\t\t= \"Kollabierender Stern\"\n})\n\n----------------\n--  Kologarn  --\n----------------\nL = DBM:GetModLocalization(\"Kologarn\")\n\nL:SetGeneralLocalization({\n\tname = \"Kologarn\"\n})\n\nL:SetTimerLocalization({\n\ttimerLeftArm\t\t= \"Nachwachsen linker Arm\",\n\ttimerRightArm\t\t= \"Nachwachsen rechter Arm\",\n\tachievementDisarmed\t= \"Zeit für Arm-ab-Erfolg\"\n})\n\nL:SetOptionLocalization({\n\ttimerLeftArm\t\t\t= \"Zeige Zeit bis der linke Arm nachwächst\",\n\ttimerRightArm\t\t\t= \"Zeige Zeit bis der rechte Arm nachwächst\",\n\tachievementDisarmed\t\t= \"Zeige Timer für Erfolg 'Arm dran, weil Arm ab'\"\n})\n\nL:SetMiscLocalization({\n--\tYell_Trigger_arm_left\t= \"Das ist nur ein Kratzer!\",\n--\tYell_Trigger_arm_right\t= \"Ist nur 'ne Fleischwunde!\",\n\tHealth_Body\t\t\t\t= \"Kologarn\",\n\tHealth_Right_Arm\t\t= \"Rechter Arm\",\n\tHealth_Left_Arm\t\t\t= \"Linker Arm\",\n\tFocusedEyebeam\t\t\t= \"%s fokussiert seinen Blick auf Euch!\"\n})\n\n---------------\n--  Auriaya  --\n---------------\nL = DBM:GetModLocalization(\"Auriaya\")\n\nL:SetGeneralLocalization({\n\tname = \"Auriaya\"\n})\n\nL:SetWarningLocalization({\n\tWarnCatDied\t\t= \"Wilder Verteidiger tot (%d Leben übrig)\",\n\tWarnCatDiedOne\t= \"Wilder Verteidiger tot (1 Leben übrig)\"\n})\n\n-- L:SetTimerLocalization({\n-- \ttimerDefender\t= \"Wilder Verteidiger wird aktiviert\"\n-- })\n\nL:SetOptionLocalization({\n\tWarnCatDied\t\t= \"Zeige Warnung, wenn der Wilde Verteidiger stirbt\",\n\tWarnCatDiedOne\t= \"Zeige Warnung, wenn der Wilde Verteidiger nur noch 1 Leben übrig hat\"\n--\ttimerDefender\t= \"Zeige Zeit bis zur Aktivierung des Wilden Verteidigers\"\n})\n\nL:SetMiscLocalization({\n\tDefender = \"Wilder Verteidiger (%d)\",\n\tYellPull = \"In manche Dinge mischt man sich besser nicht ein!\"\n})\n\n-------------\n--  Hodir  --\n-------------\nL = DBM:GetModLocalization(\"Hodir\")\n\nL:SetGeneralLocalization({\n\tname = \"Hodir\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Für Euer Eindringen werdet Ihr bezahlen!\",\n\tYellKill\t= \"Ich... bin von ihm befreit... endlich.\"\n})\n\n--------------\n--  Thorim  --\n--------------\nL = DBM:GetModLocalization(\"Thorim\")\n\nL:SetGeneralLocalization({\n\tname = \"Thorim\"\n})\n\nL:SetTimerLocalization({\n\tTimerHardmode\t= \"Hard Mode\"\n})\n\nL:SetOptionLocalization({\n\tspecWarnHardmode\t= \"Spezialwarnung, wenn der Schwerer Modus aktiviert ist\",\n\tTimerHardmode\t\t= \"Zeige Timer für Hard Mode\",\n\tAnnounceFails\t\t= \"Verkünde Spieler im Schlachtzugchat, die bei $spell:62466 scheitern (benötigt aktivierte Mitteilungen und Leiter-/Assistentenstatus)\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase1\t\t\t= \" Eindringlinge! Ihr Sterblichen, die Ihr es wagt, Euch in mein Vergnügen einzumischen, werdet... Wartet... Ihr...\",\n\tYellPhase2\t\t\t= \"Ihr unverschämtes Geschmeiß! Ihr wagt es, mich in meinem Refugium herauszufordern? Ich werde Euch eigenhändig zerschmettern!\",\n\tYellKill\t\t\t= \"Senkt Eure Waffen! Ich ergebe mich!\",\n\tYellHardModeActive\t= \"Unmöglich! Lord Thorim, ich werde Euren Feinden einen kalten Tod bescheren!\",\n\tYellHardModeFailed\t= \"Diese armseligen Sterblichen sind harmlos, unter meiner Würde. Entfernt sie!\",\n\tChargeOn\t\t\t= \"Blitzladung: %s\",\n\tCharge\t\t\t\t= \"Fehler bei Blitzladung (dieser Versuch): %s\"\n})\n\n-------------\n--  Freya  --\n-------------\nL = DBM:GetModLocalization(\"Freya\")\n\nL:SetGeneralLocalization({\n\tname = \"Freya\"\n})\n\nL:SetWarningLocalization({\n\tWarnSimulKill\t= \"Erster Elementar tot - Wiederbelebung in ~12 Sekunden\"\n})\n\nL:SetTimerLocalization({\n\tTimerSimulKill\t= \"Wiederbelebung\"\n})\n\nL:SetOptionLocalization({\n\tWarnSimulKill\t= \"Verkünde Tod des ersten Elementars\",\n\tTimerSimulKill\t= \"Zeige Zeit bis zur Wiederbelebung der Elementare\"\n})\n\nL:SetMiscLocalization({\n\tSpawnYell\t\t\t= \"Helft mir, Kinder!\",\n\tWaterSpirit\t\t\t= \"Uralter Wassergeist\",\n\tSnaplasher\t\t\t= \"Knallpeitscher\",\n\tStormLasher\t\t\t= \"Sturmpeitscher\",\n\tYellKill\t\t\t= \"Seine Macht über mich beginnt zu schwinden. Endlich kann ich wieder klar sehen. Ich danke Euch, Helden.\",\n\tYellAdds1\t\t\t= \"Eonar, Eure Dienerin braucht Hilfe!\",\n\tYellAdds2\t\t\t= \"Der Schwarm der Elemente soll über Euch kommen!\",\n\tEmoteLGift\t\t\t= \"fängt an zu wachsen!\", -- Ein |cFF00FFFFGeschenk der Lebensbinderin|r fängt an zu wachsen!\n\tTrashRespawnTimer\t= \"Freya-Trash-Respawn\",\n\tYellPullNormal\t\t= \"Das Konservatorium muss verteidigt werden!\",\n\tYellPullHard\t\t= \"Ihr Ältesten, gewährt mir Eure Macht!\"\n})\n\n----------------------\n--  Freya's Elders  --\n----------------------\nL = DBM:GetModLocalization(\"Freya_Elders\")\n\nL:SetGeneralLocalization({\n\tname = \"Freyas Älteste\"\n})\n\nL:SetOptionLocalization({\n\tTrashRespawnTimer\t= \"Zeige Timer für Trash-Respawn\"\n})\n\nL:SetMiscLocalization({\n\tTrashRespawnTimer\t= \"Freya-Trash-Respawn\"\n})\n\n---------------\n--  Mimiron  --\n---------------\nL = DBM:GetModLocalization(\"Mimiron\")\n\nL:SetGeneralLocalization({\n\tname = \"Mimiron\"\n})\n\nL:SetWarningLocalization({\n\tMagneticCore\t\t= \">%s< hat den Magnetischen Kern\",\n\tWarnBombSpawn\t\t= \"Bombenbot erschienen\"\n})\n\nL:SetTimerLocalization({\n\tTimerHardmode\t= \"Hard Mode - Selbstzerstörung\",\n\tTimeToPhase2\t= \"Phase 2\",\n\tTimeToPhase3\t= \"Phase 3\",\n\tTimeToPhase4\t= \"Phase 4\"\n})\n\nL:SetOptionLocalization({\n\tTimeToPhase2\t\t\t= \"Zeige Zeit bis Phase 2\",\n\tTimeToPhase3\t\t\t= \"Zeige Zeit bis Phase 3\",\n\tTimeToPhase4\t\t\t= \"Zeige Zeit bis Phase 4\",\n\tMagneticCore\t\t\t= \"Verkünde Spieler, die Magnetische Kerne plündern\",\n\tAutoChangeLootToFFA\t\t= \"Automatisch in Phase 3 Plündern auf 'Jeder gegen jeden' einstellen\",\n\tWarnBombSpawn\t\t\t= \"Zeige Warnung für Bombenbot\",\n\tTimerHardmode\t\t\t= \"Zeige Timer für Hard Mode\"\n})\n\nL:SetMiscLocalization({\n\tMobPhase1\t\t= \"Leviathan Mk II\",\n\tMobPhase2\t\t= \"VX-001\",\n\tMobPhase3\t\t= \"Luftkommandoeinheit\",\n\tMobPhase4\t\t= \"V-07-TR-0N\", -- don't localize\n\tYellPull\t\t= \"Wir haben nicht viel Zeit, Freunde! Ihr werdet mir dabei helfen, meine neueste und großartigste Kreation zu testen. Bevor Ihr nun Eure Meinung ändert, denkt daran, dass Ihr mir etwas schuldig seid, nach dem Unfug, den Ihr mit dem XT-002 angestellt habt.\",\n\tYellHardPull\t= \"Selbstzerstörungssequenz eingeleitet.\",\n\tYellPhase2\t\t= \"WUNDERBAR! Das sind Ergebnisse nach meinem Geschmack! Integrität der Hülle bei 98,9 Prozent! So gut wie keine Dellen! Und weiter geht's.\",\n\tYellPhase3\t\t= \"Danke Euch, Freunde! Eure Anstrengungen haben fantastische Daten geliefert! So, wo habe ich noch gleich... Ah, hier ist…\",\n\tYellPhase4\t\t= \"Vorversuchsphase abgeschlossen. Jetzt kommt der eigentliche Test!\",\n\tYellKilled\t\t= \"Es scheint, als wäre mir eine klitzekleine Fehlkalkulation unterlaufen. Ich habe zugelassen, dass das Scheusal im Gefängnis meine Primärdirektive überschreibt. Alle Systeme nun funktionstüchtig.\",\n\tLootMsg\t\t\t= \"([^%s]+).*Hitem:(%d+)\"\n})\n\n---------------------\n--  General Vezax  --\n---------------------\nL = DBM:GetModLocalization(\"GeneralVezax\")\n\nL:SetGeneralLocalization({\n\tname = \"General Vezax\"\n})\n\nL:SetTimerLocalization({\n\thardmodeSpawn = \"Saronitanimus erscheint\"\n})\n\nL:SetOptionLocalization({\n\thardmodeSpawn\t\t= \"Zeige Zeit bis zum Erscheinen des Saronitanimus (Hard Mode)\",\n\tCrashArrow\t\t\t= \"DBM-Pfeil anzeigen, wenn $spell:62660 in Ihrer Nähe ist\"\n})\n\nL:SetMiscLocalization({\n\tEmoteSaroniteVapors\t= \"Eine Wolke Saronitdämpfe bildet sich in der Nähe!\"\n})\n\n------------------\n--  Yogg-Saron  --\n------------------\nL = DBM:GetModLocalization(\"YoggSaron\")\n\nL:SetGeneralLocalization({\n\tname = \"Yogg-Saron\"\n})\n\nL:SetWarningLocalization({\n\tWarningGuardianSpawned\t\t\t= \"Wächter %d erschienen\",\n\tWarningCrusherTentacleSpawned\t= \"Schmettertentakel erschienen\",\n\tWarningSanity\t\t\t\t\t= \"%d Geistige Gesundheit übrig\",\n\tSpecWarnSanity\t\t\t\t\t= \"%d Geistige Gesundheit übrig\",\n\tSpecWarnGuardianLow\t\t\t\t= \"Wächter nicht mehr angreifen!\",\n\tSpecWarnMadnessOutNow\t\t\t= \"Wahnsinn hervorrufen - LAUF RAUS!\",\n\tWarnBrainPortalSoon\t\t\t\t= \"Gehirnportale in 10 Sek\",\n\tSpecWarnBrainPortalSoon\t\t\t= \"Gehirnportale bald\"\n})\n\nL:SetTimerLocalization({\n\tNextPortal\t= \"Gehirnportale\"\n})\n\nL:SetOptionLocalization({\n\tWarningGuardianSpawned\t\t\t= \"Zeige Warnung, wenn ein Wächter des Yogg-Saron erscheint\",\n\tWarningCrusherTentacleSpawned\t= \"Zeige Warnung, wenn ein Schmettertentakel erscheint\",\n\tWarningSanity\t\t\t\t\t= \"Zeige Warnung, wenn deine $spell:63050 niedrig ist\",\n\tSpecWarnSanity\t\t\t\t\t= \"Spezialwarnung, wenn deine $spell:63050 sehr niedrig ist\",\n\tSpecWarnGuardianLow\t\t\t\t= \"Zeige Spezialwarnung wenn Wächter (P1) fast tot ist (für DDs)\",\n\tWarnBrainPortalSoon\t\t\t\t= \"Zeige Vorwarnung für Gehirnportale\",\n\tSpecWarnMadnessOutNow\t\t\t= \"Spezialwarnung kurz bevor $spell:64059 zu Ende gewirkt wird\",\n\tSpecWarnBrainPortalSoon\t\t\t= \"Spezialwarnung für nächste Gehirnportale\",\n\tNextPortal\t\t\t\t\t\t= \"Zeige Zeit bis nächste Gehirnportale\",\n\tShowSaraHealth\t\t\t\t\t= \"Zeige Lebensanzeige für Sara in Phase 1 (muss anvisiert oder im Fokus eines Schlachtzugsmitglieds sein)\",\n\tMaladyArrow\t\t\t\t\t\t= \"Zeige Pfeil wenn $spell:63881 in deiner Nähe ist\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t\t= \"Bald ist die Zeit gekommen, dem Untier den Kopf abzuschlagen! Konzentriert Euren Zorn und Euren Hass auf seine Diener!\",\n\tS1TheLucidDream\t\t= \"Phase 1: Der strahlende Traum\",\n\tSara\t\t\t\t= \"Sara\",\n\tGuardianofYoggSaron\t= \"Wächter des Yogg-Saron\",\n\tS2DescentIntoMadness= \"Phase 2: Abstieg in den Wahnsinn\",\n\tCrusherTentacle\t\t= \"Schmettertentakel\",\n\tCorruptorTentacle\t= \"Verderbertentakel\",\n\tConstrictorTentacle\t= \"Würgetentakel\",\n\tDescentIntoMadness\t= \"Abstieg in den Wahnsinn\",\n\tInfluenceTentacle\t= \"Einflusstentakel\",\n\tLaughingSkull\t\t= \"Lachender Schädel\",\n\tBrainofYoggSaron\t= \"Yogg-Sarons Gehirn\",\n\tS3TrueFaceofDeath\t= \"Phase 3: Das wahre Antlitz des Todes\",\n\tYoggSaron\t\t\t= \"Yogg-Saron\",\n\tImmortalGuardian\t= \"Unvergängliche Wache\"\n})\n"
  },
  {
    "path": "DBM-Ulduar/localization.en.lua",
    "content": "local L\n\n-----------------------\n--  Flame Leviathan  --\n-----------------------\nL = DBM:GetModLocalization(\"FlameLeviathan\")\n\nL:SetGeneralLocalization({\n\tname = \"Flame Leviathan\"\n})\n\nL:SetWarningLocalization({\n\tPursueWarn\t\t\t\t= \"Pursuing >%s<\",\n\twarnNextPursueSoon\t\t= \"Target change in 5 seconds\",\n\tSpecialPursueWarnYou\t= \"You are being pursued - Run away\",\n\twarnWardofLife\t\t\t= \"Ward of Life spawned\"\n})\n\nL:SetOptionLocalization({\n\tSpecialPursueWarnYou\t= \"Show special warning when you are being $spell:62374\",\n\tPursueWarn\t\t\t\t= \"Announce $spell:62374 targets\",\n\twarnNextPursueSoon\t\t= \"Show pre-warning for next $spell:62374\",\n\twarnWardofLife\t\t\t= \"Show special warning for Ward of Life spawn\"\n})\n\nL:SetMiscLocalization({\n\tRadioGateSmash\t= \"Quickly! Evasive action! Evasive act--\",\n\tYellPull\t\t= \"Hostile entities detected. Threat assessment protocol active. Primary target engaged. Time minus 30 seconds to re-evaluation.\",\n\tEmote\t\t\t= \"%%s pursues (%S+)%.\"\n})\n\n--------------------------------\n--  Ignis the Furnace Master  --\n--------------------------------\nL = DBM:GetModLocalization(\"Ignis\")\n\nL:SetGeneralLocalization({\n\tname = \"Ignis the Furnace Master\"\n})\n\nL:SetOptionLocalization({\n\tsoundConcAuraMastery\t= \"Play $spell:31821 sound to negate the effects of $spell:63472 (only for the |cFFF48CBAPaladin|r that is the owner of $spell:19746)\"\n})\n\n------------------\n--  Razorscale  --\n------------------\nL = DBM:GetModLocalization(\"Razorscale\")\n\nL:SetGeneralLocalization({\n\tname = \"Razorscale\"\n})\n\nL:SetWarningLocalization({\n\twarnTurretsReadySoon\t\t= \"Last turret ready in 20 seconds\",\n\twarnTurretsReady\t\t\t= \"Last turret ready\"\n})\n\nL:SetTimerLocalization({\n\ttimerTurret1\t= \"Turret 1\",\n\ttimerTurret2\t= \"Turret 2\",\n\ttimerTurret3\t= \"Turret 3\",\n\ttimerTurret4\t= \"Turret 4\",\n\ttimerGrounded\t= \"On the ground\"\n})\n\nL:SetOptionLocalization({\n\twarnTurretsReadySoon\t\t= \"Show pre-warning for turrets\",\n\twarnTurretsReady\t\t\t= \"Show warning for turrets\",\n\ttimerTurret1\t\t\t\t= \"Show timer for turret 1\",\n\ttimerTurret2\t\t\t\t= \"Show timer for turret 2\",\n\ttimerTurret3\t\t\t\t= \"Show timer for turret 3 (25 player)\",\n\ttimerTurret4\t\t\t\t= \"Show timer for turret 4 (25 player)\",\n\ttimerGrounded\t\t\t\t= \"Show timer for ground phase duration\"\n})\n\nL:SetMiscLocalization({\n\tYellAir\t\t\t\t= \"Give us a moment to prepare to build the turrets.\",\n\tYellAir2\t\t\t= \"Fires out! Let's rebuild those turrets!\",\n\tYellGround\t\t\t= \"Move quickly! She won't remain grounded for long!\",\n\tEmotePhase2\t\t\t= \"%s is grounded permanently!\"\n})\n\n----------------------------\n--  XT-002 Deconstructor  --\n----------------------------\nL = DBM:GetModLocalization(\"XT002\")\n\nL:SetGeneralLocalization({\n\tname = \"XT-002 Deconstructor\"\n})\n\n--------------------\n--  Iron Council  --\n--------------------\nL = DBM:GetModLocalization(\"IronCouncil\")\n\nL:SetGeneralLocalization({\n\tname = \"The Iron Council\"\n})\n\nL:SetOptionLocalization({\n\tAlwaysWarnOnOverload\t\t= \"Always warn on $spell:63481 (otherwise, only when targeted)\"\n})\n\nL:SetMiscLocalization({\n\tSteelbreaker\t\t= \"Steelbreaker\",\n\tRunemasterMolgeim\t= \"Runemaster Molgeim\",\n\tStormcallerBrundir\t= \"Stormcaller Brundir\"\n--\tYellPull1\t\t\t\t\t= \"Whether the world's greatest gnats or the world's greatest heroes, you're still only mortal!\",\n--\tYellPull2\t\t\t\t\t= \"Nothing short of total decimation will suffice.\",\n--\tYellPull3\t\t\t\t\t= \"You will not defeat the Assembly of Iron so easily, invaders!\",\n--\tYellRuneOfDeath\t\t\t\t= \"Decipher this!\",\n--\tYellRunemasterMolgeimDied\t= \"What have you gained from my defeat? You are no less doomed, mortals!\",\n--\tYellRunemasterMolgeimDied2\t= \"The legacy of storms shall not be undone.\",\n--\tYellStormcallerBrundirDied\t= \"The power of the storm lives on...\",\n--\tYellStormcallerBrundirDied2\t= \"You rush headlong into the maw of madness!\",\n--\tYellSteelbreakerDied\t\t= \"My death only serves to hasten your demise.\",\n--\tYellSteelbreakerDied2\t\t= \"Impossible!\"\n})\n\n----------------------------\n--  Algalon the Observer  --\n----------------------------\nL = DBM:GetModLocalization(\"Algalon\")\n\nL:SetGeneralLocalization({\n\tname = \"Algalon the Observer\"\n})\n\nL:SetWarningLocalization({\n\twarnStarLow\t\t\t\t= \"Collapsing Star is low\"\n})\n\nL:SetTimerLocalization({\n\tNextCollapsingStar\t\t= \"Next Collapsing Star\"\n})\n\nL:SetOptionLocalization({\n\tNextCollapsingStar\t\t= \"Show timer for next Collapsing Star\",\n\twarnStarLow\t\t\t\t= \"Show special warning when Collapsing Star is low (at ~25%)\"\n})\n\nL:SetMiscLocalization({\n--\tHealthInfo\t\t\t\t= \"Heal for star\",\n--\tFirstPull\t\t\t\t= \"See your world through my eyes: A universe so vast as to be immeasurable - incomprehensible even to your greatest minds.\",\n--\tYellPull\t\t\t\t= \"Your actions are illogical. All possible results for this encounter have been calculated. The Pantheon will receive the Observer's message regardless of outcome.\",\n\tYellKill\t\t\t\t= \"I have seen worlds bathed in the Makers' flames, their denizens fading without as much as a whimper. Entire planetary systems born and razed in the time that it takes your mortal hearts to beat once. Yet all throughout, my own heart devoid of emotion... of empathy. I. Have. Felt. Nothing. A million-million lives wasted. Had they all held within them your tenacity? Had they all loved life as you do?\",\n\tEmote_CollapsingStar\t= \"%s begins to Summon Collapsing Stars!\",\n\tPhase2\t\t\t\t\t= \"Behold the tools of creation!\",\n\tCollapsingStar\t\t\t= \"Collapsing Star\"\n})\n\n----------------\n--  Kologarn  --\n----------------\nL = DBM:GetModLocalization(\"Kologarn\")\n\nL:SetGeneralLocalization({\n\tname = \"Kologarn\"\n})\n\nL:SetTimerLocalization({\n\ttimerLeftArm\t\t= \"Left Arm respawn\",\n\ttimerRightArm\t\t= \"Right Arm respawn\",\n\tachievementDisarmed\t= \"Timer for Disarm\"\n})\n\nL:SetOptionLocalization({\n\ttimerLeftArm\t\t\t= \"Show timer for Left Arm respawn\",\n\ttimerRightArm\t\t\t= \"Show timer for Right Arm respawn\",\n\tachievementDisarmed\t\t= \"Show timer for Disarm achievement\"\n})\n\nL:SetMiscLocalization({\n--\tYell_Trigger_arm_left\t= \"Just a scratch!\",\n--\tYell_Trigger_arm_right\t= \"Only a flesh wound!\",\n--\tYellEncounterStart\t\t= \"None shall pass!\",\n--\tYellLeftArmDies\t\t\t= \"Just a scratch!\",\n--\tYellRightArmDies\t\t= \"Only a flesh wound!\",\n\tHealth_Body\t\t\t\t= \"Kologarn Body\",\n\tHealth_Right_Arm\t\t= \"Right Arm\",\n\tHealth_Left_Arm\t\t\t= \"Left Arm\",\n\tFocusedEyebeam\t\t\t= \"Kologarn focuses his eyes on you!\"\n})\n\n---------------\n--  Auriaya  --\n---------------\nL = DBM:GetModLocalization(\"Auriaya\")\n\nL:SetGeneralLocalization({\n\tname = \"Auriaya\"\n})\n\nL:SetWarningLocalization({\n\tWarnCatDied\t\t= \"Feral Defender down (%d lives remaining)\",\n\tWarnCatDiedOne\t= \"Feral Defender down (1 life remaining)\"\n})\n\n-- L:SetTimerLocalization({\n-- \ttimerDefender\t= \"Feral Defender activates\"\n-- })\n\nL:SetOptionLocalization({\n\tWarnCatDied\t\t= \"Show warning when Feral Defender dies\",\n\tWarnCatDiedOne\t= \"Show warning when Feral Defender has 1 life remaining\"\n--\ttimerDefender\t= \"Show timer for when Feral Defender is activated\"\n})\n\nL:SetMiscLocalization({\n\tDefender = \"Feral Defender (%d)\",\n\tYellPull = \"Some things are better left alone!\"\n})\n\n-------------\n--  Hodir  --\n-------------\nL = DBM:GetModLocalization(\"Hodir\")\n\nL:SetGeneralLocalization({\n\tname = \"Hodir\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"You will suffer for this trespass!\",\n\tYellKill\t= \"I... I am released from his grasp... at last.\"\n})\n\n--------------\n--  Thorim  --\n--------------\nL = DBM:GetModLocalization(\"Thorim\")\n\nL:SetGeneralLocalization({\n\tname = \"Thorim\"\n})\n\nL:SetWarningLocalization({\n\tspecWarnHardmode = DBM_CORE_L.HARD_MODE -- don't translate\n})\n\nL:SetTimerLocalization({\n\tTimerHardmode\t\t= \"Hard mode\"\n})\n\nL:SetOptionLocalization({\n\tspecWarnHardmode\t= \"Show special announce when Hard mode has activated\",\n\tTimerHardmode\t\t= \"Show timer for hard mode\",\n\tAnnounceFails\t\t= \"Post player fails for $spell:62017 to raid chat<br/>(requires announce to be enabled and leader/promoted status)\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase1\t\t\t= \"Interlopers! You mortals who dare to interfere with my sport will pay.... Wait--you...\",\n\tYellPhase2\t\t\t= \"Impertinent whelps, you dare challenge me atop my pedestal? I will crush you myself!\",\n\tYellKill\t\t\t= \"Stay your arms! I yield!\",\n\tYellHardModeActive\t= \"Impossible!  Lord Thorim, I will bring your foes a frigid death!\",\n\tYellHardModeFailed\t= \"These pathetic mortals are harmless, beneath my station. Dispose of them!\",\n\tChargeOn\t\t\t= \"Lightning Charge: %s\",\n\tCharge\t\t\t\t= \"Lightning Charge fails (this try): %s\"\n})\n\n-------------\n--  Freya  --\n-------------\nL = DBM:GetModLocalization(\"Freya\")\n\nL:SetGeneralLocalization({\n\tname = \"Freya\"\n})\n\nL:SetWarningLocalization({\n\tWarnSimulKill\t\t= \"First add down - Resurrection in ~12 seconds\"\n})\n\nL:SetTimerLocalization({\n\tTimerSimulKill\t= \"Resurrection\"\n})\n\nL:SetOptionLocalization({\n\tWarnSimulKill\t= \"Announce first mob down\",\n\tTimerSimulKill\t= \"Show timer for mob resurrection\"\n})\n\nL:SetMiscLocalization({\n\tSpawnYell\t\t\t= \"Children, assist me!\",\n\tWaterSpirit\t\t\t= \"Ancient Water Spirit\",\n\tSnaplasher\t\t\t= \"Snaplasher\",\n\tStormLasher\t\t\t= \"Storm Lasher\",\n\tYellKill\t\t\t= \"His hold on me dissipates. I can see clearly once more. Thank you, heroes.\",\n\tYellAdds1\t\t\t= \"Eonar, your servant requires aid!\",\n\tYellAdds2\t\t\t= \"The swarm of the elements shall overtake you!\",\n\tEmoteLGift\t\t\t= \"begins to grow!\", -- A |cFF00FFFFLifebinder's Gift|r begins to grow!\n\tTrashRespawnTimer\t= \"Freya trash respawn\",\n\tYellPullNormal\t\t= \"The Conservatory must be protected!\",\n\tYellPullHard\t\t= \"Elders grant me your strength!\"\n})\n\n----------------------\n--  Freya's Elders  --\n----------------------\nL = DBM:GetModLocalization(\"Freya_Elders\")\n\nL:SetGeneralLocalization({\n\tname = \"Freya's Elders\"\n})\n\nL:SetOptionLocalization({\n\tTrashRespawnTimer\t= \"Show timer for trash respawn\"\n})\n\nL:SetMiscLocalization({\n\tTrashRespawnTimer\t= \"Freya trash respawn\"\n})\n\n---------------\n--  Mimiron  --\n---------------\nL = DBM:GetModLocalization(\"Mimiron\")\n\nL:SetGeneralLocalization({\n\tname = \"Mimiron\"\n})\n\nL:SetWarningLocalization({\n\tMagneticCore\t\t= \">%s< has Magnetic Core\",\n\tWarnBombSpawn\t\t= \"Bomb Bot spawned\"\n})\n\nL:SetTimerLocalization({\n\tTimerHardmode\t= \"Hard mode - Self-destruct\",\n\tTimeToPhase2\t= \"Phase 2\",\n\tTimeToPhase3\t= \"Phase 3\",\n\tTimeToPhase4\t= \"Phase 4\"\n})\n\nL:SetOptionLocalization({\n\tTimeToPhase2\t\t\t= \"Show timer for Phase 2\",\n\tTimeToPhase3\t\t\t= \"Show timer for Phase 3\",\n\tTimeToPhase4\t\t\t= \"Show timer for Phase 4\",\n\tMagneticCore\t\t\t= \"Announce Magnetic Core looters\",\n\tAutoChangeLootToFFA\t\t= \"Switch loot mode to Free for All in Phase 3\",\n\tWarnBombSpawn\t\t\t= \"Show warning for Bomb Bots\",\n\tTimerHardmode\t\t\t= \"Show timer for hard mode\"\n})\n\nL:SetMiscLocalization({\n\tMobPhase1\t\t= \"Leviathan Mk II\",\n\tMobPhase2\t\t= \"VX-001\",\n\tMobPhase3\t\t= \"Aerial Command Unit\",\n\tMobPhase4\t\t= \"V-07-TR-0N\", -- Retail has this \"wrong\" in the EJ section as V0-L7R-0N. Yell and audiofile corroborate this. Also there are sloppy differences across locales, which I am now harmonizing.\n\tYellPull\t\t= \"We haven't much time, friends! You're going to help me test out my latest and greatest creation. Now, before you change your minds, remember that you kind of owe it to me after the mess you made with the XT-002.\",\n\tYellHardPull\t= \"Self-destruct sequence initiated.\",\n\tYellPhase2\t\t= \"WONDERFUL! Positively marvelous results! Hull integrity at 98.9 percent! Barely a dent! Moving right along.\",\n\tYellPhase3\t\t= \"Thank you, friends! Your efforts have yielded some fantastic data! Now, where did I put-- oh, there it is.\",\n\tYellPhase4\t\t= \"Preliminary testing phase complete. Now comes the true test!\",\n\tYellKilled\t\t= \"It would appear that I've made a slight miscalculation. I allowed my mind to be corrupted by the fiend in the prison, overriding my primary directive. All systems seem to be functional now. Clear.\",\n\tLootMsg\t\t\t= \"([^%s]+).*Hitem:(%d+)\"\n})\n\n---------------------\n--  General Vezax  --\n---------------------\nL = DBM:GetModLocalization(\"GeneralVezax\")\n\nL:SetGeneralLocalization({\n\tname = \"General Vezax\"\n})\n\nL:SetTimerLocalization({\n\thardmodeSpawn = \"Saronite Animus spawn\"\n})\n\nL:SetOptionLocalization({\n\thardmodeSpawn\t\t\t\t\t= \"Show timer for Saronite Animus spawn (hard mode)\",\n\tCrashArrow\t\t\t\t\t\t= \"Show DBM arrow when $spell:62660 is near you\"\n})\n\nL:SetMiscLocalization({\n\tEmoteSaroniteVapors\t= \"A cloud of saronite vapors coalesces nearby!\"\n})\n\n------------------\n--  Yogg-Saron  --\n------------------\nL = DBM:GetModLocalization(\"YoggSaron\")\n\nL:SetGeneralLocalization({\n\tname = \"Yogg-Saron\"\n})\n\nL:SetWarningLocalization({\n\tWarningGuardianSpawned\t\t\t= \"Guardian %d spawned\",\n\tWarningCrusherTentacleSpawned\t= \"Crusher Tentacle spawned\",\n\tWarningSanity\t\t\t\t\t= \"%d Sanity remaining\",\n\tSpecWarnSanity\t\t\t\t\t= \"%d Sanity remaining\",\n\tSpecWarnGuardianLow\t\t\t\t= \"Stop attacking this Guardian\",\n\tSpecWarnMadnessOutNow\t\t\t= \"Induce Madness ending - Move out\",\n\tWarnBrainPortalSoon\t\t\t\t= \"Brain Portal in 10 seconds\",\n\tSpecWarnBrainPortalSoon\t\t\t= \"Brain Portal soon\"\n})\n\nL:SetTimerLocalization({\n\tNextPortal\t= \"Brain Portal\"\n})\n\nL:SetOptionLocalization({\n\tWarningGuardianSpawned\t\t\t= \"Show warning for Guardian spawns\",\n\tWarningCrusherTentacleSpawned\t= \"Show warning for Crusher Tentacle spawns\",\n\tWarningSanity\t\t\t\t\t= \"Show warning when $spell:63050 is low\",\n\tSpecWarnSanity\t\t\t\t\t= \"Show special warning when $spell:63050 is very low\",\n\tSpecWarnGuardianLow\t\t\t\t= \"Show special warning when Guardian (Phase 1) is low (for DPS)\",\n\tWarnBrainPortalSoon\t\t\t\t= \"Show pre-warning for Brain Portal\",\n\tSpecWarnMadnessOutNow\t\t\t= \"Show special warning shortly before $spell:64059 ends\",\n\tSpecWarnBrainPortalSoon\t\t\t= \"Show special warning for next Brain Portal\",\n\tNextPortal\t\t\t\t\t\t= \"Show timer for next Brain Portal\",\n\tShowSaraHealth\t\t\t\t\t= \"Show health frame for Sara in Phase 1 (must be targeted or focused by at least one raid member)\",\n\tMaladyArrow\t\t\t\t\t\t= \"Show DBM arrow when $spell:63881 is near you\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t\t= \"The time to strike at the head of the beast will soon be upon us! Focus your anger and hatred on his minions!\",\n\tS1TheLucidDream\t\t= \"Stage One: The Lucid Dream\",\n\tSara\t\t\t\t= \"Sara\",\n\tGuardianofYoggSaron\t= \"Guardian of Yogg-Saron\",\n\tS2DescentIntoMadness= \"Stage Two: Descent into Madness\",\n\tCrusherTentacle\t\t= \"Crusher Tentacle\",\n\tCorruptorTentacle\t= \"Corruptor Tentacle\",\n\tConstrictorTentacle\t= \"Constrictor Tentacle\",\n\tDescentIntoMadness\t= \"Descent into Madness\",\n\tInfluenceTentacle\t= \"Influence Tentacle\",\n\tLaughingSkull\t\t= \"Laughing Skull\",\n\tBrainofYoggSaron\t= \"Brain of Yogg-Saron\",\n\tS3TrueFaceofDeath\t= \"Stage Three: True Face of Death\",\n\tYoggSaron\t\t\t= \"Yogg-Saron\",\n\tImmortalGuardian\t= \"Immortal Guardian\"\n})\n"
  },
  {
    "path": "DBM-Ulduar/localization.es.lua",
    "content": "﻿if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\n\nlocal L\n\n-----------------------\n--  Flame Leviathan  --\n-----------------------\nL = DBM:GetModLocalization(\"FlameLeviathan\")\n\nL:SetGeneralLocalization({\n\tname = \"Leviatán de llamas\"\n})\n\nL:SetWarningLocalization({\n\tPursueWarn\t\t\t\t= \"Persiguiendo a >%s<\",\n\twarnNextPursueSoon\t\t= \"Cambio de objetivo en 5 s\",\n\tSpecialPursueWarnYou\t= \"El leviatán te persigue - ¡huye!\",\n\twarnWardofLife\t\t\t= \"Guarda de vida\"\n})\n\nL:SetOptionLocalization({\n\tSpecialPursueWarnYou\t= \"Mostrar aviso especial cuando te afecte $spell:62374\",\n\tPursueWarn\t\t\t\t= \"Anunciar objetivos de $spell:62374\",\n\twarnNextPursueSoon\t\t= \"Mostrar aviso previo para el siguiente $spell:62374\",\n\twarnWardofLife\t\t\t= \"Mostrar aviso especial cuando aparezcan Guardas de vida\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Entidades hostiles detectadas. Protocolo de evaluación de amenaza activado. Objetivo principal fijado. Tiempo restante para re-evaluación: 30 segundos.\",\n\tEmote\t\t= \"%%s persigue a (%S+)%.\"\n})\n\n--------------------------------\n--  Ignis the Furnace Master  --\n--------------------------------\nL = DBM:GetModLocalization(\"Ignis\")\n\nL:SetGeneralLocalization({\n\tname = \"Ignis el Maestro de la Caldera\"\n})\n\nL:SetOptionLocalization({\n\tsoundConcAuraMastery\t= \"Reproducir el sonido de $spell:31821 para anular los efectos de $spelll:63472 (sólo para el |cFFF48CBAPaladín|r que es el propietario de $spell:19746)\"\n})\n\n------------------\n--  Razorscale  --\n------------------\nL = DBM:GetModLocalization(\"Razorscale\")\n\nL:SetGeneralLocalization({\n\tname = \"Tajoescama\"\n})\n\nL:SetWarningLocalization({\n\twarnTurretsReadySoon\t\t= \"Última torreta lista en 20 s\",\n\twarnTurretsReady\t\t\t= \"Última torreta lista\"\n})\n\nL:SetTimerLocalization({\n\ttimerTurret1\t= \"Torreta 1\",\n\ttimerTurret2\t= \"Torreta 2\",\n\ttimerTurret3\t= \"Torreta 3\",\n\ttimerTurret4\t= \"Torreta 4\",\n\ttimerGrounded\t= \"En tierra\"\n})\n\nL:SetOptionLocalization({\n\twarnTurretsReadySoon\t\t= \"Mostrar aviso previo para cuando las torretas estén listas\",\n\twarnTurretsReady\t\t\t= \"Mostrar aviso cuando las torretas estén listas\",\n\ttimerTurret1\t\t\t\t= \"Mostrar temporizador para la primera torreta\",\n\ttimerTurret2\t\t\t\t= \"Mostrar temporizador para la segunda torreta\",\n\ttimerTurret3\t\t\t\t= \"Mostrar temporizador para la tercera torreta (25 jugadores)\",\n\ttimerTurret4\t\t\t\t= \"Mostrar temporizador para la cuarta torreta (25 jugadores)\",\n\ttimerGrounded\t\t\t\t= \"Mostrar temporizador para la duración de la fase en tierra\"\n})\n\nL:SetMiscLocalization({\n\tYellAir\t\t\t\t\t\t= \"Danos un momento para que nos preparemos para construir las torretas.\",\n\tYellAir2\t\t\t\t\t= \"Listos para salir, ¡impedid que esos enanos se peguen a nuestra espalda!\",\n\tYellGround\t\t\t\t\t= \"¡Moveos! ¡No seguirá mucho más en el suelo!\",\n\tEmotePhase2\t\t\t\t\t= \"¡%%s ha aterrizado permanentemente!\"\n})\n\n----------------------------\n--  XT-002 Deconstructor  --\n----------------------------\nL = DBM:GetModLocalization(\"XT002\")\n\nL:SetGeneralLocalization({\n\tname = \"Desarmador XA-002\"\n})\n\n--------------------\n--  Iron Council  --\n--------------------\nL = DBM:GetModLocalization(\"IronCouncil\")\n\nL:SetGeneralLocalization({\n\tname = \"La Asamblea de Hierro\"\n})\n\nL:SetOptionLocalization({\n\tAlwaysWarnOnOverload\t\t= \"Mostrar siempre aviso para $spell:63481 (de lo contrario, solo se muestra cuando eres el objetivo)\"\n})\n\nL:SetMiscLocalization({\n\tSteelbreaker\t\t= \"Rompeacero\",\n\tRunemasterMolgeim\t= \"Maestro de runas Molgeim\",\n\tStormcallerBrundir\t= \"Clamatormentas Brundir\"\n})\n\n----------------------------\n--  Algalon the Observer  --\n----------------------------\nL = DBM:GetModLocalization(\"Algalon\")\n\nL:SetGeneralLocalization({\n\tname = \"Algalon el Observador\"\n})\n\nL:SetWarningLocalization({\n\twarnStarLow\t\t\t\t= \"Estrella en colapso a poca salud\"\n})\n\nL:SetTimerLocalization({\n\tNextCollapsingStar\t\t= \"Siguiente Estrella en colapso\",\n})\n\nL:SetOptionLocalization({\n\tNextCollapsingStar\t\t= \"Mostrar temporizador para la siguiente Estrella en colapso\",\n\twarnStarLow\t\t\t\t= \"Mostrar aviso especial cuando una Estrella en colapso tenga la salud baja (25%)\"\n})\n\nL:SetMiscLocalization({\n--\tFirstPull\t\t\t\t= \"Mirad vuestro mundo a través de mis ojos: un universo tan vasto que es inconmensurable, incompresible incluso para vuestras grandes mentes.\", -- esES\n--\tFirstPull\t\t\t\t= \"Vean su mundo a través de mis ojos: un universo tan vasto que es inconmensurable... Incomprensible aún para sus mentes más brillantes.\", -- esMX\n--\tYellPull\t\t\t\t= \"Vuestros actos carecen de lógica. Se ha calculado cualquier posible resultado de este encuentro. El Panteón recibirá el mensaje del Observador sean cuales sean las consecuencias.\", -- esES\n--\tYellPull\t\t\t\t= \"Tus acciones son ilógicas. Todos los resultados posibles de este encuentro han sido calculados. El Panteón recibirá el mensaje del Observador más allá del resultado.\", -- esMX\n\tYellKill\t\t\t\t= \"He visto mundos hundirse en las llamas de los Creadores, como se desvanecían sus habitantes sin apenas un gemido. He visto sistemas planetarios enteros crearse y ser arrasados en lo que vuestros mortales corazones laten una sola vez. Y mi corazón permaneció desprovisto de emoción... de empatía. Yo... no... sentí... nada. Millones de vidas malgastadas ¿Acaso compartían vuestra tenacidad? ¿Amaban la vida como vosotros?\", -- esES\n--\tYellKill\t\t\t\t= \"He visto mundos enteros bañados en las llamas del Creador, a sus habitantes esfumarse dejando menos que un quejido. Sistemas planetarios nacen y son arrasados en lo que les lleva a sus corazones mortales dar un latido. Y aún después de todo, mi propio corazón carece de emoción... de compasión. Nunca. He. Sentido. Nada. Un millón de millones de vidas desperdiciadas. ¿Acaso todas ellas llevaban dentro tu tenacidad? ¿Todas amaban la vida como tú?\", -- esMX\n\tEmote_CollapsingStar\t= \"¡%s comienza a invocar estrellas en colapso!\",\n\tPhase2\t\t\t\t\t= \"¡Observad las herramientas de la creación!\", -- esES\n--\tPhase2\t\t\t\t\t= \"¡Contempla las herramientas de la creación!\", -- esMX\n\tCollapsingStar\t\t\t= \"Estrella en colapso\"\n})\n\n----------------\n--  Kologarn  --\n----------------\nL = DBM:GetModLocalization(\"Kologarn\")\n\nL:SetGeneralLocalization({\n\tname = \"Kologarn\"\n})\n\nL:SetTimerLocalization({\n\ttimerLeftArm\t\t= \"Brazo izquierdo reaparece\",\n\ttimerRightArm\t\t= \"Brazo derecho reaparece\",\n\tachievementDisarmed\t= \"Logro: Desarmado\"\n})\n\nL:SetOptionLocalization({\n\ttimerLeftArm\t\t\t= \"Mostrar temporizador para la regeneración del Brazo izquierdo\",\n\ttimerRightArm\t\t\t= \"Mostrar temporizador para la regeneración del Brazo derecho\",\n\tachievementDisarmed\t\t= \"Mostrar temporizador para el logro 'Desarmado'\"\n})\n\nL:SetMiscLocalization({\n--\tYell_Trigger_arm_left\t= \"¡No es más que un arañazo!\",\n--\tYell_Trigger_arm_right\t= \"¡Una herida superficial!\",\n\tHealth_Body\t\t\t\t= \"Kologarn\",\n\tHealth_Right_Arm\t\t= \"Brazo derecho\",\n\tHealth_Left_Arm\t\t\t= \"Brazo izquierdo\",\n\tFocusedEyebeam\t\t\t= \"sus ojos en ti\"\n})\n\n---------------\n--  Auriaya  --\n---------------\nL = DBM:GetModLocalization(\"Auriaya\")\n\nL:SetGeneralLocalization({\n\tname = \"Auriaya\"\n})\n\nL:SetWarningLocalization({\n\tWarnCatDied\t\t= \"Defensor feral muerto (%d vidas restantes)\",\n\tWarnCatDiedOne\t= \"Defensor feral muerto (1 vida restante)\"\n})\n\n-- L:SetTimerLocalization({\n-- \ttimerDefender\t= \"Defensor feral activo\"\n-- })\n\nL:SetOptionLocalization({\n\tWarnCatDied\t\t= \"Mostrar aviso cuando muera el Defensor feral\",\n\tWarnCatDiedOne\t= \"Mostrar aviso cuando el Defensor feral solo tenga una vida restante\"\n--\ttimerDefender\t= \"Mostrar temporizador para cuando aparezca o reviva el Defensor feral\"\n})\n\nL:SetMiscLocalization({\n\tDefender = \"Defensor feral (%d)\",\n\tYellPull = \"¡Es mejor dejar ciertas cosas tal como están!\"\n})\n\n-------------\n--  Hodir  --\n-------------\nL = DBM:GetModLocalization(\"Hodir\")\n\nL:SetGeneralLocalization({\n\tname = \"Hodir\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"¡Sufriréis por esta intromisión!\",\n--\tPull\t\t= \"¡Sufrirás por esta ofensa!\" -- esMX\n\tYellKill\t= \"Estoy... estoy libre de sus garras... al fin.\"\n})\n\n--------------\n--  Thorim  --\n--------------\nL = DBM:GetModLocalization(\"Thorim\")\n\nL:SetGeneralLocalization({\n\tname = \"Thorim\"\n})\n\nL:SetTimerLocalization({\n\tTimerHardmode\t= \"Modo difícil\"\n})\n\nL:SetOptionLocalization({\n\tspecWarnHardmode\t= \"Mostrar anuncio especial cuando el Modo difícil se ha activado\",\n\tTimerHardmode\t\t= \"Mostrar temporizador para el modo difícil\",\n\tAnnounceFails\t\t= \"Anunciar jugadores que reciban daño de $spell:62017 en el chat de banda (requiere líder o ayudante)\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase1\t\t\t= \"¡Intrusos! Vosotros, mortales que osáis interferir en mi diversión, pagaréis... Un momento...\",\n\tYellPhase2\t\t\t= \"Gusanos impertinentes, ¿cómo osáis desafiarme en mi pedestal? ¡Os machacaré con mis propias manos!\",\n\tYellKill\t\t\t= \"¡Guardad las armas! ¡Me rindo!\",\n\tYellHardModeActive\t= \"¡Imposible! ¡Thorim, mi señor, llevaré a tus enemigos a una muerte gélida!\", -- esES\n--\tYellHardModeActive\t= \"¡Imposible! ¡Señor Thorim, daré a sus enemigos una muerte glacial!\", -- esMX\n\tYellHardModeFailed\t= \"Esos patéticos mortales son inofensivos, no están a mi altura. ¡Deshazte de ellos!\", -- esES\n--\tYellHardModeFailed\t= \"Estos patéticos mortales son inofensivos, por debajo de mi casta. ¡Deshazte de ellos!\", -- esMX\n\tChargeOn\t\t\t= \"Carga relámpago: %s\",\n\tCharge\t\t\t\t= \"Fallos en Carga relámpago (en este intento): %s\"\n})\n\n-------------\n--  Freya  --\n-------------\nL = DBM:GetModLocalization(\"Freya\")\n\nL:SetGeneralLocalization({\n\tname = \"Freya\"\n})\n\nL:SetWarningLocalization({\n\tWarnSimulKill\t= \"Primer esbirro muerto - Resurrección en ~12 segundos\"\n})\n\nL:SetTimerLocalization({\n\tTimerSimulKill\t= \"Resurrección\"\n})\n\nL:SetOptionLocalization({\n\tWarnSimulKill\t= \"Anunciar primer esbirro muerto\",\n\tTimerSimulKill\t= \"Mostrar temporizador para la resurrección de esbirros\"\n})\n\nL:SetMiscLocalization({\n\tSpawnYell\t\t\t= \"¡Hijos, ayudadme!\",\n\tWaterSpirit\t\t\t= \"Espíritu de agua antiguo\",\n\tSnaplasher\t\t\t= \"Quiebrazotador\",\n\tStormLasher\t\t\t= \"Azotador de tormenta\",\n\tYellKill\t\t\t= \"Su control sobre mí se disipa. Vuelvo a ver con claridad. Gracias, héroes.\",\n\tYellAdds1\t\t\t= \"¡Eonar, tus sirvientes requieren tu ayuda!\", -- esES\n--\tYellAdds1\t\t\t= \"¡Eonar, tu siervo necesita ayuda!\", -- esMX\n\tYellAdds2\t\t\t= \"¡El azote de los elementos podrá con vosotros!\", -- esES\n--\tYellAdds2\t\t\t= \"¡La horda de elementos te atrapará!\", -- esMX\n\tEmoteLGift\t\t\t= \"comienza a crecer!\", -- ¡Un |cFF00FFFFDon de la Protectora|r comienza a crecer!\n\tTrashRespawnTimer\t= \"Reaparicion de Adds de Freya\",\n\tYellPullNormal\t\t= \"¡Debemos proteger el Invernadero!\", -- esES\n--\tYellPullNormal\t\t= ¡Hay que proteger el Conservatorio! -- esMX\n\tYellPullHard\t\t= \"¡Ancestros, otorgadme vuestro poder!\" -- esES\n--\tYellPullHard\t\t= \"¡Ancestros, concédanme su fuerza!\" -- esMX\n})\n\n----------------------\n--  Freya's Elders  --\n----------------------\nL = DBM:GetModLocalization(\"Freya_Elders\")\n\nL:SetGeneralLocalization({\n\tname = \"Ancestros de Freya\"\n})\n\nL:SetOptionLocalization({\n\tTrashRespawnTimer\t= \"Mostrar tiempo para reaparición de adds\"\n})\n\nL:SetMiscLocalization({\n\tTrashRespawnTimer\t= \"Reaparicion de Adds de Freya\"\n})\n\n---------------\n--  Mimiron  --\n---------------\nL = DBM:GetModLocalization(\"Mimiron\")\n\nL:SetGeneralLocalization({\n\tname = \"Mimiron\"\n})\n\nL:SetWarningLocalization({\n\tMagneticCore\t\t= \">%s< tiene Núcleo magnético\",\n\tWarnBombSpawn\t\t= \"Bombabot\"\n})\n\nL:SetTimerLocalization({\n\tTimerHardmode\t= \"Autodestrucción\",\n\tTimeToPhase2\t= \"Fase 2\",\n\tTimeToPhase3\t= \"Fase 3\",\n\tTimeToPhase4\t= \"Fase 4\"\n})\n\nL:SetOptionLocalization({\n\tTimeToPhase2\t\t\t= \"Mostrar temporizador para el cambio a Fase 2\",\n\tTimeToPhase3\t\t\t= \"Mostrar temporizador para el cambio a Fase 3\",\n\tTimeToPhase4\t\t\t= \"Mostrar temporizador para el cambio a Fase 4\",\n\tMagneticCore\t\t\t= \"Anunciar jugadores que despojen Núcleos magnéticos\",\n\tAutoChangeLootToFFA\t\t= \"Cambiar el loot a Botín Libre en la fase 3\",\n\tWarnBombSpawn\t\t\t= \"Mostrar aviso cuando aparezcan Bombabots\",\n\tTimerHardmode\t\t\t= \"Mostrar temporizador para la autodestrucción del modo difícil\"\n})\n\nL:SetMiscLocalization({\n\tMobPhase1\t\t= \"Mk II de leviatán\",\n\tMobPhase2\t\t= \"VX-001\",\n\tMobPhase3\t\t= \"Unidad de mando aérea\",\n\tMobPhase4\t\t= \"V-07-TR-0N\", -- don't localize nor change it to V-07-TR-ON for esMX (typo)\n\tYellPull\t\t= \"¡No tenemos mucho tiempo, amigos! Vais a ayudarme a probar mi última y mayor creación. Ahora, antes de que cambiéis de parecer, recordad que en cierta forma, me lo debéis después del desastre que causasteis con el XA-002.\",\n\tYellHardPull\t= \"Secuencia de autodestrucción iniciada.\", -- esES\n--\tYellHardPull\t= \"Fase de autodestrucción iniciada.\" -- esMX\n\tYellPhase2\t\t= \"¡Contemplad el cañón de asalto antipersonal VX-001! Puede que queráis poneros a cubierto.\",\n\tYellPhase3\t\t= \"¡Gracias amigos! ¡Vuestros esfuerzos me han proporcionado unos datos fantásticos! Veamos, ¿dónde puse?...ah, ahí está.\",\n\tYellPhase4\t\t= \"Fase de prueba preliminar completada. ¡Ahora comienza la verdadera prueba!\",\n\tYellKilled\t\t= \"Parece que me he equivocado en los cálculos. Permití que el demonio de la prisión corrompiera mi mente y se sobrepusiera a mi directiva principal. Ahora parece que todos los sistemas funcionan. Evidente.\", -- esES\n--\tYellKilled\t\t= \"Aparentemente cometí un error de cálculos. Permití que mi mente fuera corrompida por el enemigo en la prisión, descartando mi directiva primaria. Todos los sistemas parecen estar funcionando nuevamente. Cambio.\" -- esMX\n\tLootMsg\t\t\t= \"([^%s]+).*Hitem:(%d+)\"\n})\n\n---------------------\n--  General Vezax  --\n---------------------\nL = DBM:GetModLocalization(\"GeneralVezax\")\n\nL:SetGeneralLocalization({\n\tname = \"General Vezax\"\n})\n\nL:SetTimerLocalization({\n\thardmodeSpawn = \"Animus de saronita\"\n})\n\nL:SetOptionLocalization({\n\thardmodeSpawn\t\t= \"Mostrar temporizador para cuando aparezca el Animus de saronita (modo difícil)\",\n\tCrashArrow\t\t\t= \"Mostrar flecha cuando $spell:62660 ocurra cerca de ti\"\n})\n\nL:SetMiscLocalization({\n\tEmoteSaroniteVapors\t= \"¡Cerca se forma una nube de vapores de saronita!\"\n})\n\n------------------\n--  Yogg-Saron  --\n------------------\nL = DBM:GetModLocalization(\"YoggSaron\")\n\nL:SetGeneralLocalization({\n\tname = \"Yogg-Saron\"\n})\n\nL:SetWarningLocalization({\n\tWarningGuardianSpawned\t\t\t= \"Guardián (%d)\",\n\tWarningCrusherTentacleSpawned\t= \"Tentáculo triturador\",\n\tWarningSanity\t\t\t\t\t= \"%d de Cordura restante\",\n\tSpecWarnSanity\t\t\t\t\t= \"%d de Cordura restante\",\n\tSpecWarnGuardianLow\t\t\t\t= \"Guardián a poca salud - ¡deja de atacar!\",\n\tSpecWarnMadnessOutNow\t\t\t= \"Inducir a la locura en breve - ¡sal ya!\",\n\tWarnBrainPortalSoon\t\t\t\t= \"Portales en 10 s\",\n\tSpecWarnBrainPortalSoon\t\t\t= \"Portal en breve\"\n})\n\nL:SetTimerLocalization({\n\tNextPortal\t= \"Siguientes portales\"\n})\n\nL:SetOptionLocalization({\n\tWarningGuardianSpawned\t\t\t= \"Mostrar aviso cuando aparezca un Guardián de Yogg-Saron\",\n\tWarningCrusherTentacleSpawned\t= \"Mostrar aviso cuando aparezca un Tentáculo triturador\",\n\tWarningSanity\t\t\t\t\t= \"Mostrar aviso cuando te quede poca $spell:63050\",\n\tSpecWarnSanity\t\t\t\t\t= \"Mostrar aviso especial cuando te quede muy poca $spell:63050\",\n\tSpecWarnGuardianLow\t\t\t\t= \"Mostrar aviso especial cuando a un Guardián de Yogg-Saron le quede poca vida (solo para DPS)\",\n\tWarnBrainPortalSoon\t\t\t\t= \"Mostrar aviso previo para los siguientes portales\",\n\tSpecWarnMadnessOutNow\t\t\t= \"Mostrar aviso especial cuando $spell:64059 esté a punto de lanzarse\",\n\tSpecWarnBrainPortalSoon\t\t\t= \"Mostrar aviso especial para los siguientes portales\",\n\tNextPortal\t\t\t\t\t\t= \"Mostrar temporizador para los siguientes portales\",\n\tShowSaraHealth\t\t\t\t\t= \"Mostrar barra de vida de Sara en Fase 1\",\n\tMaladyArrow\t\t\t\t\t\t= \"Mostrar flecha cuando $spell:63881 ocurra cerca de ti\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t\t= \"¡Pronto llegará la hora de golpear la cabeza del monstruo! ¡Centrad vuestra ira y odio en sus esbirros!\",\n\tS1TheLucidDream\t\t= \"Fase 1: El sueño lúcido\",\n\tSara\t\t\t\t= \"Sara\",\n\tGuardianofYoggSaron\t= \"Guardián de Yogg-Saron\",\n\tS2DescentIntoMadness= \"Fase 2: El Descenso a la Locura\",\n\tCrusherTentacle\t\t= \"Tentáculo triturador\",\n\tCorruptorTentacle\t= \"Tentáculo corruptor\",\n\tConstrictorTentacle\t= \"Tentáculo constrictor\",\n\tDescentIntoMadness\t= \"El Descenso a la Locura\",\n\tInfluenceTentacle\t= \"Tentáculo cimbreante\",\n\tLaughingSkull\t\t= \"Calavera jocosa\",\n\tBrainofYoggSaron\t= \"Cerebro de Yogg-Saron\",\n\tS3TrueFaceofDeath\t= \"Fase 3: El auténtico rostro de la muerte\",\n\tYoggSaron\t\t\t= \"Yogg-Saron\",\n\tImmortalGuardian\t= \"Guardián inmortal\"\n})\n"
  },
  {
    "path": "DBM-Ulduar/localization.fr.lua",
    "content": "﻿if GetLocale() ~= \"frFR\" then return end\n\nlocal L\n\n-----------------------\n--  Flame Leviathan  --\n-----------------------\nL = DBM:GetModLocalization(\"FlameLeviathan\")\n\nL:SetGeneralLocalization({\n\tname = \"Léviathan des flammes\"\n})\n\nL:SetWarningLocalization({\n\tPursueWarn\t\t\t\t= \"Poursuit >%s<!\",\n\twarnNextPursueSoon\t\t= \"Changement de cible dans 5 Sec\",\n\tSpecialPursueWarnYou\t= \"Vous êtes poursuivi !\",\n\twarnWardofLife\t\t\t= \"Gardien de Vie vient d'arriver\"\n})\n\nL:SetOptionLocalization({\n\tSpecialPursueWarnYou\t= \"Afficher l'avertissement spécial quand un joueur est poursuivi\",\n\tPursueWarn\t\t\t\t= \"Afficher l'avertissement quand vous êtes poursuivi\",\n\twarnNextPursueSoon\t\t= \"Prévenir avant la prochaine poursuite\",\n\twarnWardofLife\t\t\t= \"Montre une alerte quand un Gardien de Vie arrive\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t= \"Entités hostiles détectées. Protocole d'estimation de menace actif. Acquisition de la cible primaire. Décompte avant réévaluation : 30 secondes.\",\n\tEmote\t\t\t= \"%%s poursuit (%S+)%.\"\n})\n\n--------------------------------\n--  Ignis the Furnace Master  --\n--------------------------------\nL = DBM:GetModLocalization(\"Ignis\")\n\nL:SetGeneralLocalization({\n\tname = \"Ignis le maître de la Fournaise\"\n})\n\nL:SetOptionLocalization({\n\tsoundConcAuraMastery\t= \"Jouer le son $spell:31821 pour annuler les effets de $spell:63472 (seulement pour le |cFFF48CBAPaladin|r qui est le propriétaire de $spell:19746)\"\n})\n\n------------------\n--  Razorscale  --\n------------------\nL = DBM:GetModLocalization(\"Razorscale\")\n\nL:SetGeneralLocalization({\n\tname = \"Tranchécaille\"\n})\n\nL:SetWarningLocalization({\n\twarnTurretsReadySoon\t\t= \"Quatrième tourelle à harpon prête dans 20 Sec\",\n\twarnTurretsReady\t\t\t= \"Quatrième tourelle à harpon prête\"\n})\n\nL:SetTimerLocalization({\n\ttimerTurret1\t\t\t= \"Tourelle 1\",\n\ttimerTurret2\t\t\t= \"Tourelle 2\",\n\ttimerTurret3\t\t\t= \"Tourelle 3\",\n\ttimerTurret4\t\t\t= \"Tourelle 4\",\n\ttimerGrounded\t\t\t= \"Sur le sol\"\n})\n\nL:SetOptionLocalization({\n\twarnTurretsReadySoon\t\t= \"Activer le pré-avertissement pour les tourelles\",\n\twarnTurretsReady\t\t\t= \"Activer l'avertissement pour les tourelles\",\n\ttimerTurret1\t\t\t\t= \"Montre le timer pour la tourelle 1\",\n\ttimerTurret2\t\t\t\t= \"Montre le timer pour la tourelle 2\",\n\ttimerTurret3\t\t\t\t= \"Montre le timer pour la tourelle 3 (25 joueurs)\",\n\ttimerTurret4\t\t\t\t= \"Montre le timer pour la tourelle 4 (25 joueurs)\",\n\ttimerGrounded\t\t\t\t= \"Montre le timer pour la phase au sol\"\n})\n\nL:SetMiscLocalization({\n\tYellAir\t\t\t\t= \"Laissez un instant pour préparer la construction des tourelles.\",\n\tYellAir2\t\t\t= \"Incendie éteint ! Reconstruisons les tourelles !\",\n\tYellGround\t\t\t= \"Faites vite ! Elle va pas rester au sol très longtemps !\",\n\tEmotePhase2\t\t\t= \"bloquée au sol\"\n})\n\n----------------------------\n--  XT-002 Deconstructor  --\n----------------------------\nL = DBM:GetModLocalization(\"XT002\")\n\nL:SetGeneralLocalization({\n\tname = \"Déconstructeur XT-002\"\n})\n\n--------------------\n--  Iron Council  --\n--------------------\nL = DBM:GetModLocalization(\"IronCouncil\")\n\nL:SetGeneralLocalization({\n\tname = \"Assemblée du fer\"\n})\n\nL:SetOptionLocalization({\n\tAlwaysWarnOnOverload\t\t= \"Toujours alerter pour la $spell:63481 (sinon seulement quand ciblé)\"\n})\n\nL:SetMiscLocalization({\n\tSteelbreaker\t\t= \"Brise-acier\",\n\tRunemasterMolgeim\t= \"Maître des runes Molgeim\",\n\tStormcallerBrundir\t= \"Mande-foudre Brundir\"\n--\tYellPull1\t\t\t\t\t= \"Que vous soyez les plus grandes punaises ou les plus grands héros de ce monde, vous n'êtes jamais que des mortels.\",\n--\tYellPull2\t\t\t\t\t= \"Seule votre extermination complète me conviendra.\",\n--\tYellPull3\t\t\t\t\t= \"Vous ne vaincrez pas si facilement l'assemblée du Fer, envahisseurs !\",\n--\tYellRuneOfDeath\t\t\t\t= \"Déchiffrez donc ça !\",\n--\tYellRunemasterMolgeimDied\t= \"Que vous apporte ma chute ? Votre destin n'en est pas moins scellé, mortels.\",\n--\tYellRunemasterMolgeimDied2\t= \"L’héritage des tempêtes ne sera pas anéanti...\",\n--\tYellStormcallerBrundirDied\t= \"La puissance de la tempête survivra.\",\n--\tYellStormcallerBrundirDied2\t= \"Vous courez tout droit dans la gueule de la folie !!\",\n--\tYellSteelbreakerDied\t\t= \"Ma mort ne fera que hâter votre perte.\",\n--\tYellSteelbreakerDied2\t\t= \"Impossible...\"\n})\n\n----------------------------\n--  Algalon the Observer  --\n----------------------------\nL = DBM:GetModLocalization(\"Algalon\")\n\nL:SetGeneralLocalization({\n\tname = \"Algalon l'Observateur\"\n})\n\nL:SetWarningLocalization({\n\twarnStarLow\t\t\t\t= \"Effondrement d'étoile est bas\"\n})\n\nL:SetTimerLocalization({\n\tNextCollapsingStar\t\t= \"Prochain Choc cosmique\",\n})\n\nL:SetOptionLocalization({\n\tNextCollapsingStar\t\t= \"Montre un timer pour le prochain choc cosmique\",\n\twarnStarLow\t\t\t\t= \"Affiche une alerte spéciale lorsque Effondrement d'étoile est bas (à ~25%)\"\n})\n\nL:SetMiscLocalization({\n--\tFirstPull\t\t\t\t= \"Voyez votre monde comme je le vois : un univers si vaste qu'il est incommensurable - impossible à appréhender même par vos plus grands esprits.\",\n--\tYellPull\t\t\t\t= \"Vos actions sont illogiques. Tous les résultats possibles de cette rencontre ont été calculés. Le Panthéon recevra le message de l'Observateur quelle que soit l'issue.\",\n\tYellKill\t\t\t\t= \"J'ai vu des mondes baignés dans les flammes des Faiseurs. Leurs occupants s'évaporer sans même un gémissement. Des systèmes planétaires entiers créés et détruits dans le temps qu'il faut à un cœur mortel pour battre une fois. Et devant tout cela, dans mon propre cœur, pas la moindre émotion... la moindre empathie. Je. Ne. Ressentais. Rien. Mille milliards de vies gâchées. Avaient-elles toutes possédé une telle ténacité ? Aimaient-elles la vie autant que vous ?\",\n\tEmote_CollapsingStar\t= \"%s commence à lancer un effondrement d'étoiles !\",\n\tPhase2\t\t\t\t\t= \"Découvrez les outils de la création !\",\n\tCollapsingStar\t\t\t= \"Effondrement d'étoile\"\n})\n\n----------------\n--  Kologarn  --\n----------------\nL = DBM:GetModLocalization(\"Kologarn\")\n\nL:SetGeneralLocalization({\n\tname = \"Kologarn\"\n})\n\nL:SetTimerLocalization({\n\ttimerLeftArm\t\t\t= \"Repop du bras gauche\",\n\ttimerRightArm\t\t\t= \"Repop du bras droit\",\n\tachievementDisarmed\t\t= \"Temps pour Désarmement\"\n})\n\nL:SetOptionLocalization({\n\ttimerLeftArm\t\t\t= \"Afficher un timer pour le repop du bras gauche\",\n\ttimerRightArm\t\t\t= \"Afficher un timer pour le repop du bras droit\",\n\tachievementDisarmed\t\t= \"Afficher un timer pour le Haut Fait Désarmement\"\n})\n\nL:SetMiscLocalization({\n--\tYell_Trigger_arm_left\t= \"Juste une éraflure !\",\n--\tYell_Trigger_arm_right\t= \"Une blessure superficielle !\",\n--\tYellEncounterStart\t\t= \"On ne passe pas !\",\n--\tYellLeftArmDies\t\t\t= \"Juste une éraflure !\",\n--\tYellRightArmDies\t\t= \"Une blessure superficielle !\",\n\tHealth_Body\t\t\t\t= \"Torse de Kologarn\",\n\tHealth_Right_Arm\t\t= \"Bras droit\",\n\tHealth_Left_Arm\t\t\t= \"Bras gauche\",\n\tFocusedEyebeam\t\t\t= \"%s concentre son regard sur vous !\"\n})\n\n---------------\n--  Auriaya  --\n---------------\nL = DBM:GetModLocalization(\"Auriaya\")\n\nL:SetGeneralLocalization({\n\tname = \"Auriaya\"\n})\n\nL:SetWarningLocalization({\n\tWarnCatDied\t\t\t= \"Défenseur farouche mort (%d vies restantes)\",\n\tWarnCatDiedOne\t\t= \"Défenseur farouche mort (1 vie en moins)\",\n})\n\n-- L:SetTimerLocalization({\n-- \ttimerDefender\t\t= \"Défenseur farouche activé\"\n-- })\n\nL:SetOptionLocalization({\n\tWarnCatDied\t\t\t= \"Activer l'avertissement quand un défenseur farouche meurt\",\n\tWarnCatDiedOne\t\t= \"Montre une alerte spéciale quand un Défenseur farouche meurt\"\n--\ttimerDefender\t\t= \"Montre un timer quand le Défenseur farouche est activé\"\n})\n\nL:SetMiscLocalization({\n\tDefender\t\t\t= \"Défenseur farouche (%d)\",\n\tYellPull\t\t\t= \"Certaines choses ne doivent pas être dérangées !\"\n})\n\n-------------\n--  Hodir  --\n-------------\nL = DBM:GetModLocalization(\"Hodir\")\n\nL:SetGeneralLocalization({\n\tname = \"Hodir\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"Vous allez souffrir pour cette intrusion !\",\n\tYellKill\t\t= \"Je suis... libéré de son emprise... enfin.\",\n})\n\n--------------\n--  Thorim  --\n--------------\nL = DBM:GetModLocalization(\"Thorim\")\n\nL:SetGeneralLocalization({\n\tname = \"Thorim\"\n})\n\nL:SetTimerLocalization({\n\tTimerHardmode\t= \"Mode difficile\"\n})\n\nL:SetOptionLocalization({\n\tspecWarnHardmode\t\t= \"Afficher une alerte spéciale lorsque le Mode difficile est activé\",\n\tTimerHardmode\t\t\t= \"Afficher le timer pour le mode difficile\",\n\tAnnounceFails\t\t\t= \"Affiche les joueurs qui n'ont pas évité les Charges de foudre (Nécessite l'activation des annonces et être promu ou leader)\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase1\t\t\t= \"Des intrus ! Mortels, vous qui osez me déranger en plein divertissement allez pay -  Attendez, vous -\",\n\tYellPhase2\t\t\t= \"Avortons impertinents, vous osez me défier sur mon piédestal ? Je vais vous écraser moi-même !\",\n\tYellKill\t\t\t= \"Retenez vos coups ! Je me rends !\",\n\tYellHardModeActive\t= \"Impossible ! Mon seigneur Thorim, je vais offrir à tes ennemis une mort glaciale !\",\n\tYellHardModeFailed\t= \"Ces pitoyables mortels sont inoffensifs, indignes de m'affronter. Débarrasse-toi d'eux !\",\n\tChargeOn\t\t\t= \"Charge(s) de foudre: %s\",\n\tCharge\t\t\t\t= \"Charge(s) de foudre non évitée(s) (cet essai): %s\"\n})\n\n-------------\n--  Freya  --\n-------------\nL = DBM:GetModLocalization(\"Freya\")\n\nL:SetGeneralLocalization({\n\tname = \"Freya\"\n})\n\nL:SetWarningLocalization({\n\tWarnSimulKill\t= \"Premier add mort - Résurrection dans 1 minute\"\n})\n\nL:SetTimerLocalization({\n\tTimerSimulKill\t= \"Résurrection\"\n})\n\nL:SetOptionLocalization({\n\tWarnSimulKill\t= \"Annonce la mort du premier mob\",\n\tTimerSimulKill\t= \"Montre le timer de la résurrection des mobs\"\n})\n\nL:SetMiscLocalization({\n\tSpawnYell\t\t\t= \"Mes enfants, venez m'aider !\",\n\tWaterSpirit\t\t\t= \"Esprit de l'eau ancien\",\n\tSnaplasher\t\t\t= \"Flagellant mordant\",\n\tStormLasher\t\t\t= \"Flagellant des tempêtes\",\n\tYellKill\t\t\t= \"Son emprise sur moi se dissipe. J'y vois à nouveau clair. Merci, héros.\",\n\tYellAdds1\t\t\t= \"Eonar, ta servante a besoin d'aide !\",\n\tYellAdds2\t\t\t= \"La nuée des éléments va vous submerger !\",\n\tEmoteLGift\t\t\t= \"commence à pousser !\", -- Un |cFF00FFFFdon de la Lieuse-de-vie|r commence à pousser !\n\tTrashRespawnTimer\t= \"Respawn des Trashs de Freya\",\n\tYellPullNormal\t\t= \"Le jardin doit être protégé !\",\n\tYellPullHard\t\t= \"Anciens, donnez-moi votre force !\"\n})\n\n----------------------\n--  Freya's Elders  --\n----------------------\nL = DBM:GetModLocalization(\"Freya_Elders\")\n\nL:SetGeneralLocalization({\n\tname = \"Freya's Elders\"\n})\n\nL:SetOptionLocalization({\n\tTrashRespawnTimer\t= \"Montre le timer du repop des trashs\"\n})\n\nL:SetMiscLocalization({\n\tTrashRespawnTimer\t= \"Respawn des Trashs de Freya\"\n})\n\n---------------\n--  Mimiron  --\n---------------\nL = DBM:GetModLocalization(\"Mimiron\")\n\nL:SetGeneralLocalization({\n\tname = \"Mimiron\"\n})\n\nL:SetWarningLocalization({\n\tMagneticCore\t\t= \">%s< vient de loot le Core Magnétique\",\n\tWarnBombSpawn\t\t= \"Robot Bombe vient de pop\"\n})\n\nL:SetTimerLocalization({\n\tTimerHardmode\t\t= \"Hard Mode - Autodestruction\",\n\tTimeToPhase2\t\t= \"Phase 2\",\n\tTimeToPhase3\t\t= \"Phase 3\",\n\tTimeToPhase4\t\t= \"Phase 4\"\n})\n\nL:SetOptionLocalization({\n\tTimeToPhase2\t\t\t= \"Montre le timer pour la Phase 2\",\n\tTimeToPhase3\t\t\t= \"Montre le timer pour la Phase 3\",\n\tTimeToPhase4\t\t\t= \"Montre le timer pour la Phase 4\",\n\tMagneticCore\t\t\t= \"Annonce qui a loot le Core Magnétique\",\n\tAutoChangeLootToFFA\t\t= \"Met le butin en accès libre durant la phase 3\",\n\tWarnBombSpawn\t\t\t= \"Annonce les Robots Bombes\",\n\tTimerHardmode\t\t\t= \"Montre le timer pour le Hard Mode\"\n})\n\nL:SetMiscLocalization({\n\tMobPhase1\t\t= \"Léviathan Mod. II\",\n\tMobPhase2\t\t= \"VX-001\",\n\tMobPhase3\t\t= \"Unité de commandement aérien\",\n\tMobPhase4\t\t= \"V-07-TR-0N\", -- don't localize\n\tYellPull\t\t= \"Nous n'avons pas beaucoup de temps, les amis ! Vous allez m'aider à tester ma dernière création en date, la plus grande de toutes. Avant de changer d'avis, n'oubliez pas que que vous me devez bien ça après m'avoir complètement déglingué le XT-002.\",\n\tYellHardPull\t= \"Initialisation de la séquence d'autodestruction.\",\n\tYellPhase2\t\t= \"MERVEILLEUX ! Résultats parfaitement formidables !\",\n\tYellPhase3\t\t= \"Merci, les amis !\",\n\tYellPhase4\t\t= \"Fin de la phase d'essais préliminaires\",\n\tYellKilled\t\t= \"Il semblerait que j'aie pu faire une minime erreur de calcul. J'ai permis à mon esprit de se laisser corrompre par ce démon dans la prison qui a désactivé ma directive principale. Tous les systèmes fonctionnent à nouveau. Terminé.\",\n\tLootMsg\t\t\t= \"([^%s]+).*Hitem:(%d+)\"\n})\n\n---------------------\n--  General Vezax  --\n---------------------\nL = DBM:GetModLocalization(\"GeneralVezax\")\n\nL:SetGeneralLocalization({\n\tname = \"Général Vezax\"\n})\n\nL:SetTimerLocalization({\n\thardmodeSpawn = \"Arriver d'Animus de saronite\"\n})\n\nL:SetOptionLocalization({\n\thardmodeSpawn\t\t= \"Montre le timer pour l'arrivée d'Animus de saronite (Hard Mode)\",\n\tCrashArrow\t\t\t= \"Afficher la flèche DBM lorsque $spell:62660 est proche de vous\"\n})\n\nL:SetMiscLocalization({\n\tEmoteSaroniteVapors\t= \"nuage de vapeurs saronitiques\"\n})\n\n------------------\n--  Yogg-Saron  --\n------------------\nL = DBM:GetModLocalization(\"YoggSaron\")\n\nL:SetGeneralLocalization({\n\tname = \"Yogg-Saron\"\n})\n\n\nL:SetWarningLocalization({\n\tWarningGuardianSpawned\t\t\t= \"Un gardien vient d'arriver\",\n\tWarningCrusherTentacleSpawned\t= \"Une Tentacule écraseur vient d'arriver\",\n\tWarningSanity\t\t\t\t\t= \"%d de Santé mentale restant\",\n\tSpecWarnSanity\t\t\t\t\t= \"%d de Santé mentale restant\",\n\tSpecWarnGuardianLow\t\t\t\t= \"Arrêtez d'attaquer ce gardien !\",\n\tSpecWarnMadnessOutNow\t\t\t= \"Incantation de Susciter la folie fini - SORTEZ\",\n\tWarnBrainPortalSoon\t\t\t\t= \"Portail dans 10 sec\",\n\tSpecWarnBrainPortalSoon\t\t\t= \"Portail bientôt\"\n})\n\nL:SetTimerLocalization({\n\tNextPortal\t= \"Portail du Cerveau\"\n})\n\nL:SetOptionLocalization({\n\tWarningGuardianSpawned\t\t\t= \"Annonce l'arrivée des Gardiens\",\n\tWarningCrusherTentacleSpawned\t= \"Annonce l'arrivée des Tentacules\",\n\tWarningSanity\t\t\t\t\t= \"Montre une alerte quand la $spell:63050 est basse\",\n\tSpecWarnSanity\t\t\t\t\t= \"Montre une alerte quand la $spell:63050 est très basse\",\n\tSpecWarnGuardianLow\t\t\t\t= \"Montre une alerte spéciale quand les gardiens (P1) n'a plus beaucoup de vie\",\n\tWarnBrainPortalSoon\t\t\t\t= \"Annonce les Portails\",\n\tSpecWarnMadnessOutNow\t\t\t= \"Montre une alerte spéciale avant la fin du cast de Susciter la folie\",\n\tSpecWarnBrainPortalSoon\t\t\t= \"Annonce l'arrivée d'un portail\",\n\tNextPortal\t\t\t\t\t\t= \"Montre un timer avant le prochain portail\",\n\tShowSaraHealth\t\t\t\t\t= \"Montre la vie de Sara durant la P1 (Doit être sélectionnée par au moins un membre du raid)\",\n\tMaladyArrow\t\t\t\t\t\t= \"Afficher la flèche DBM lorsque $spell:63881 est proche de vous\"\n})\n\nL:SetMiscLocalization({\n\tYellPull1\t\t\t= \"Il sera bientôt temps de frapper la tête de la bête ! Concentrez votre rage et votre haine sur ses laquais !\",\n\tS1TheLucidDream\t\t= \"Phase 1 : Le rêve lucide\",\n\tSara\t\t\t\t= \"Sara\",\n\tGuardianofYoggSaron\t= \"Gardien de Yogg-Saron\",\n\tS2DescentIntoMadness= \"Phase 2 : La Descente dans la folie\",\n\tCrusherTentacle\t\t= \"Tentacule écraseur\",\n\tCorruptorTentacle\t= \"Tentacule corrupteur\",\n\tConstrictorTentacle\t= \"Tentacule constricteur\",\n\tDescentIntoMadness\t= \"Descente dans la folie\",\n\tInfluenceTentacle\t= \"Tentacule d’influence\",\n\tLaughingSkull\t\t= \"Crâne-Ricanant\",\n\tBrainofYoggSaron\t= \"Cerveau de Yogg-Saron\",\n\tS3TrueFaceofDeath\t= \"Phase 3 : le vrai visage de la mort\",\n\tYoggSaron\t\t\t= \"Yogg-Saron\",\n\tImmortalGuardian\t= \"Gardien immortel\"\n})\n"
  },
  {
    "path": "DBM-Ulduar/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\n\nlocal L\n\n-----------------------\n--  Flame Leviathan  --\n-----------------------\nL = DBM:GetModLocalization(\"FlameLeviathan\")\n\nL:SetGeneralLocalization({\n\tname = \"거대 화염전차\"\n})\n\nL:SetWarningLocalization({\n\tPursueWarn\t\t\t\t= \"추적 : >%s<\",\n\twarnNextPursueSoon\t\t= \"추적 전환 5 초전\",\n\twarnWardofLife\t\t\t= \"생명지기 덩굴손 등장!\",\n\tSpecialPursueWarnYou\t= \"거대 화염전차가 당신을 추적합니다!\"\n})\n\nL:SetOptionLocalization({\n\tSpecialPursueWarnYou\t= \"$spell:62374 대상이 된 경우 특수 경고 보기\",\n\tPursueWarn\t\t\t\t= \"$spell:62374 대상 알림 보기\",\n\twarnNextPursueSoon\t\t= \"$spell:62374 이전에 알림 보기\",\n\twarnWardofLife\t\t\t= \"생명지기 덩굴손 등장시 특수 경고 보기\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t\t\t= \"적대적인 존재 감지. 위협 수준 평가 체제 가동. 주 목표물과 교전. 위협 수준 재평가까지 30초.\",\n\tEmote\t\t\t\t\t= \"%%s 추적중 (%S+)%.\"\n})\n\n--------------------------------\n--  Ignis the Furnace Master  --\n--------------------------------\nL = DBM:GetModLocalization(\"Ignis\")\n\nL:SetGeneralLocalization({\n\tname = \"용광로 군주 이그니스\"\n})\n\nL:SetOptionLocalization({\n\tsoundConcAuraMastery\t= \"$spell:31821 사운드를 재생하여 $spell:63472의 효과를 무효화합니다($spell:19746의 소유자인 |cFFF48CBA성기사|r만 해당)\"\n})\n\n------------------\n--  Razorscale  --\n------------------\nL = DBM:GetModLocalization(\"Razorscale\")\n\nL:SetGeneralLocalization({\n\tname = \"칼날비늘\"\n})\n\nL:SetWarningLocalization({\n\twarnTurretsReadySoon\t\t= \"마지막 포탑 20초 전\",\n\twarnTurretsReady\t\t\t= \"마지막 포탑 준비\"\n})\n\nL:SetTimerLocalization({\n\ttimerTurret1\t\t\t= \"1 번째 포탑\",\n\ttimerTurret2\t\t\t= \"2 번째 포탑\",\n\ttimerTurret3\t\t\t= \"3 번째 포탑\",\n\ttimerTurret4\t\t\t= \"4 번째 포탑\",\n\ttimerGrounded\t\t\t= \"지상 착지 종료\"\n})\n\nL:SetOptionLocalization({\n\twarnTurretsReadySoon\t\t= \"마지막 포탑 이전에 알림 보기\",\n\twarnTurretsReady\t\t\t= \"마지막 포탑 알림 보기\",\n\ttimerTurret1\t\t\t\t= \"첫번째 포탑 바 보기\",\n\ttimerTurret2\t\t\t\t= \"두번째 포탑 바 보기\",\n\ttimerTurret3\t\t\t\t= \"세번째 포탑 바 보기(25인)\",\n\ttimerTurret4\t\t\t\t= \"네번째 포탑 바 보기(25인)\",\n\ttimerGrounded\t\t\t\t= \"지상 착지 유지시간 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tYellAir\t\t\t\t= \"저희에게 잠깐 포탑을 설치할 시간을 주세요.\",\n\tYellAir2\t\t\t= \"불꽃이 꺼졌습니다! 포탑을 재설치합시다!\",\n\tYellGround\t\t\t= \"움직이세요! 오래 붙잡아둘 순 없을 겁니다!\",\n\tEmotePhase2\t\t\t= \"완전히 땅에 내려앉았습니다!\"\n})\n\n----------------------------\n--  XT-002 Deconstructor  --\n----------------------------\nL = DBM:GetModLocalization(\"XT002\")\n\nL:SetGeneralLocalization({\n\tname = \"XT-002 해체자\"\n})\n\n--------------------\n--  Iron Council  --\n--------------------\nL = DBM:GetModLocalization(\"IronCouncil\")\n\nL:SetGeneralLocalization({\n\tname = \"무쇠 평의회\"\n})\n\nL:SetOptionLocalization({\n\tAlwaysWarnOnOverload\t\t= \"$spell:63481 특수 경고를 항상 보기(해제하면 브룬디르가 대상일때만 알림)\"\n})\n\nL:SetMiscLocalization({\n\tSteelbreaker\t\t\t= \"강철파괴자\",\n\tRunemasterMolgeim\t\t= \"룬술사 몰가임\",\n\tStormcallerBrundir\t\t= \"폭풍소환사 브룬디르\"\n})\n\n----------------------------\n--  Algalon the Observer  --\n----------------------------\nL = DBM:GetModLocalization(\"Algalon\")\n\nL:SetGeneralLocalization({\n\tname = \"관찰자 알갈론\"\n})\n\nL:SetWarningLocalization({\n\twarnStarLow\t\t\t\t= \"붕괴의 별 체력 낮음\"\n})\n\nL:SetTimerLocalization({\n\tNextCollapsingStar\t\t= \"다음 붕괴의 별\",\n})\n\nL:SetOptionLocalization({\n\tNextCollapsingStar\t\t\t= \"다음 붕괴의 별 바 보기\",\n\twarnStarLow\t\t\t\t\t= \"붕괴의 별 체력이 낮을 경우 특수 경고 보기(25% 이하)\"\n})\n\nL:SetMiscLocalization({\n--\tFirstPull\t\t\t\t= \"내 눈을 통해 너희 세상을 보아라. 측정할 수 없이 광활한 우주를... 너희 지성으로는 절대 이해할 수 없다.\",\n--\tYellPull\t\t\t\t= \"너희 행동은 비논리적이다. 이 전투에서 가능한 결말은 모두 계산되었다. 결과와 상관없이 판테온은 관찰자의 전갈을 받을 것이다.\",\n\tYellKill\t\t\t\t= \"나는 창조주의 불길이 씻어내린 세상을 보았다. 모두 변변히 저항도 못하고 사그라졌지. 너희 필멸자의 심장이 단 한 번 뛸 시간에 전 행성계가 탄생하고 무너졌다. 그러나 그 모든 시간 동안, 나는 공감이란 감정을... 몰랐다. 나는, 아무것도, 느끼지, 못했다. 무수한, 무수한 생명이 꺼졌다. 그들이 모두 너희처럼 강인했더냐? 그들이 모두 너희처럼 삶을 사랑했단 말이냐?\",\n\tEmote_CollapsingStar\t= \"%s|1이;가; 붕괴하는 별을 소환하기 시작합니다!\",\n\tPhase2\t\t\t\t\t= \"창조의 도구를 바라보아라!\",\n\tCollapsingStar\t\t\t= \"붕괴하는 별\"\n})\n\n----------------\n--  Kologarn  --\n----------------\nL = DBM:GetModLocalization(\"Kologarn\")\n\nL:SetGeneralLocalization({\n\tname = \"콜로간\"\n})\n\nL:SetTimerLocalization({\n\ttimerLeftArm\t\t\t= \"왼쪽 팔 재생성\",\n\ttimerRightArm\t\t\t= \"오른쪽 팔 재생성\",\n\tachievementDisarmed\t\t= \"무장해제 업적 가능\"\n})\n\nL:SetOptionLocalization({\n\ttimerLeftArm\t\t\t= \"왼쪽 팔 재생성 바 보기\",\n\ttimerRightArm\t\t\t= \"오른쪽 팔 재생성 바 보기\",\n\tachievementDisarmed\t\t= \"무장해제 업적 바 보기\"\n})\n\nL:SetMiscLocalization({\n--\tYell_Trigger_arm_left\t= \"얕은 상처야!\",\n--\tYell_Trigger_arm_right\t= \"꽉꽉 쥐어짜 주마!\",\n\tHealth_Body\t\t\t\t= \"콜로간 몸통\",\n\tHealth_Right_Arm\t\t= \"오른쪽 팔\",\n\tHealth_Left_Arm\t\t\t= \"왼쪽 팔\",\n\tFocusedEyebeam\t\t\t= \"당신에게 안광을 집중합니다!\"\n})\n\n---------------\n--  Auriaya  --\n---------------\nL = DBM:GetModLocalization(\"Auriaya\")\n\nL:SetGeneralLocalization({\n\tname = \"아우리아야\"\n})\n\nL:SetWarningLocalization({\n\tWarnCatDied\t\t\t= \"수호 야수 죽음 (%d 번 남음)\",\n\tWarnCatDiedOne\t\t= \"수호 야수 죽음 (1 번 남음)\"\n})\n\n-- L:SetTimerLocalization({\n-- \ttimerDefender\t\t= \"수호 야수 활성\"\n-- })\n\nL:SetOptionLocalization({\n\tWarnCatDied\t\t\t= \"수호 야수의 남은부활 횟수 알림 보기\",\n\tWarnCatDiedOne\t\t= \"수호 야수 부활 횟수가 1번 남았을 때 알림 보기\"\n--\ttimerDefender\t\t= \"다음 수호 야수 활성 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tDefender\t\t\t= \"수호 야수 (%d)\",\n\tYellPull\t\t\t= \"내버려두는 편이 나았을 텐데!\"\n})\n\n-------------\n--  Hodir  --\n-------------\nL = DBM:GetModLocalization(\"Hodir\")\n\nL:SetGeneralLocalization({\n\tname = \"호디르\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"침입자는 쓴맛을 보게 될 게다!\",\n\tYellKill\t\t= \"드디어... 드디어 그의 손아귀를... 벗어나는구나.\"\n})\n\n--------------\n--  Thorim  --\n--------------\nL = DBM:GetModLocalization(\"Thorim\")\n\nL:SetGeneralLocalization({\n\tname = \"토림\"\n})\n\nL:SetTimerLocalization({\n\tTimerHardmode\t\t\t= \"영웅 난이도 진입 가능\"\n})\n\nL:SetOptionLocalization({\n\tspecWarnHardmode\t\t= \"어려움 모드 특수 알림 보기\",\n\tTimerHardmode\t\t\t= \"영웅 난이도 진입 가능 바 보기\",\n\tAnnounceFails\t\t\t= \"$spell:62017 주문에 피해를 입은 대상을 공격대 대화로 알림(승급 권한 필요)\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase1\t\t\t\t= \"침입자라니! 감히 내 취미 생활을 방해하는 놈들은 쓴맛을 단단히... 잠깐... 너는...\",\n\tYellPhase2\t\t\t\t= \"건방진 젖먹이 같으니... 감히 여기까지 기어올라와 내게 도전해? 내 손으로 쓸어버리겠다!\",\n\tYellKill\t\t\t\t= \"무기를 거둬라! 내가 졌다!\",\n\tYellHardModeActive\t\t= \"이럴 수가! 토림이시여, 제가 저들에게 싸늘한 죽음을 선사하겠나이다!\",\n\tYellHardModeFailed\t\t= \"제가 직접 손댈 것도 없는 하찮은 생명체입니다. 없애 버리세요!\",\n\tChargeOn\t\t\t\t= \"번개 충전: %s\",\n\tCharge\t\t\t\t\t= \"번개 충전 맞음 (이번 시도): %s\"\n})\n\n-------------\n--  Freya  --\n-------------\nL = DBM:GetModLocalization(\"Freya\")\n\nL:SetGeneralLocalization({\n\tname = \"프레이야\"\n})\n\nL:SetWarningLocalization({\n\tWarnSimulKill\t\t= \"첫번째 소환수 죽음 - 12초 후 부활\"\n})\n\nL:SetTimerLocalization({\n\tTimerSimulKill\t\t= \"소환수 부활\"\n})\n\nL:SetOptionLocalization({\n\tWarnSimulKill\t\t= \"첫번째 소환수 죽음 알림 보기\",\n\tTimerSimulKill\t\t= \"소환수 부활 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tSpawnYell\t\t\t= \"얘들아, 날 도와라!\",\n\tWaterSpirit\t\t\t= \"고대 물의 정령\",\n\tSnaplasher\t\t\t= \"악어덩굴손\",\n\tStormLasher\t\t= \"폭풍덩굴손\",\n\tYellKill\t\t\t= \"내게서 그의 지배력이 걷혔다. 다시 온전한 정신을 찾았도다. 영웅들이여, 고맙다.\",\n\tYellAdds1\t\t\t= \"이오나여, 당신의 종이 도움을 청합니다!\",\n\tYellAdds2\t\t\t= \"정령의 무리가 너희를 덮치리라!\",\n\tEmoteLGift\t\t\t= \"이 자라기 시작합니다!\", -- |cFF00FFFF생명의 어머니의 선물|r이 자라기 시작합니다!\n\tTrashRespawnTimer\t= \"프레이야 지역 리젠타임\",\n\tYellPullNormal\t\t= \"어떻게 해서든 정원을 수호해야 한다!\",\n\tYellPullHard\t\t= \"장로여, 내게 힘을 나눠다오!\"\n})\n\n----------------------\n--  Freya's Elders  --\n----------------------\nL = DBM:GetModLocalization(\"Freya_Elders\")\n\nL:SetGeneralLocalization({\n\tname = \"프레이야의 장로\"\n})\n\nL:SetOptionLocalization({\n\tTrashRespawnTimer\t= \"프레이야 지역 리젠 타이머 보기\"\n})\n\nL:SetMiscLocalization({\n\tTrashRespawnTimer\t= \"프레이야 지역 리젠타임\"\n})\n\n---------------\n--  Mimiron  --\n---------------\nL = DBM:GetModLocalization(\"Mimiron\")\n\nL:SetGeneralLocalization({\n\tname = \"미미론\"\n})\n\nL:SetWarningLocalization({\n\tMagneticCore\t\t\t= \"자기 증폭기 획득 : >%s<\",\n\tWarnBombSpawn\t\t\t= \"폭탄 로봇 생성!\"\n})\n\nL:SetTimerLocalization({\n\tTimerHardmode\t\t\t= \"광폭화\",\n\tTimeToPhase2\t\t\t= \"2 단계\",\n\tTimeToPhase3\t\t\t= \"3 단계\",\n\tTimeToPhase4\t\t\t= \"4 단계\"\n})\n\nL:SetOptionLocalization({\n\tTimeToPhase2\t\t\t= \"2 단계 바 보기\",\n\tTimeToPhase3\t\t\t= \"3 단계 바 보기\",\n\tTimeToPhase4\t\t\t= \"4 단계 바 보기\",\n\tMagneticCore\t\t\t= \"자기 증폭기 획득자 알림 보기\",\n\tAutoChangeLootToFFA\t\t= \"3 페이즈에서 루팅 옵션 자동 변경하기\",\n\tWarnBombSpawn\t\t\t= \"폭탄 로봇 생성 알림 보기\",\n\tTimerHardmode\t\t\t= \"영웅 난이도 광폭화 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tMobPhase1\t\t= \"거대 전차 Mk II\",\n\tMobPhase2\t\t= \"VX-001\",\n\tMobPhase3\t\t= \"공중지휘기\",\n\tMobPhase4\t\t= \"V-07-TR-0N\", -- don't localize\n\tYellPull\t\t= \"시간이 없어, 친구들! 내가 최근에 만든 기막힌 발명품을 시험하게 도와 주겠지? 자, 마음 바꿀 생각은 말라고. XT-002를 그 꼬락서니로 만들었으니, 너흰 나한테 빚진 셈이란 걸 잊지 마!\",\n\tYellHardPull\t= \"자폭 절차를 시작합니다.\",\n\tYellPhase2\t\t= \"멋지군! 참으로 경이적인 결과야! 차체 내구도 98.9 퍼센트라! 손상이라고 보기도 어렵지! 계속하자고.\",\n\tYellPhase3\t\t= \"고맙다, 친구들! 너희 덕분에 멋진 자료를 좀 얻었어! 자, 그걸 어디 뒀더라... 아, 여기 있군.\",\n\tYellPhase4\t\t= \"예비 시험은 이걸로 끝이다. 자 이제부터가 진짜라고!\",\n\tYellKilled\t\t= \"내가 계산을 좀 잘못한 것 같군. 감옥에 갇힌 마귀가 내 마음을 타락시키고 제1지시를 재정의하고 말았다. 이제 모든 시스템이 제 기능을 찾았다. 정상이다.\",\n\tLootMsg\t\t\t= \"([^%s]+).*Hitem:(%d+)\"\n})\n\n---------------------\n--  General Vezax  --\n---------------------\nL = DBM:GetModLocalization(\"GeneralVezax\")\n\nL:SetGeneralLocalization({\n\tname = \"장군 베작스\"\n})\n\nL:SetTimerLocalization({\n\thardmodeSpawn = \"사로나이트 원혼 생성 중\"\n})\n\nL:SetOptionLocalization({\n\thardmodeSpawn\t\t= \"사로나이드 원혼 생성 바 보기(영웅 난이도 진입용)\",\n\tCrashArrow\t\t\t= \"$spell:62660 대상이 가까이 있을 경우 DBM 화살표 보기\"\n})\n\nL:SetMiscLocalization({\n\tEmoteSaroniteVapors\t= \"가까운 사로나이트 증기 구름이 합쳐집니다!\"\n})\n\n------------------\n--  Yogg-Saron  --\n------------------\nL = DBM:GetModLocalization(\"YoggSaron\")\n\nL:SetGeneralLocalization({\n\tname = \"요그사론\"\n})\n\nL:SetWarningLocalization({\n\tWarningGuardianSpawned\t\t\t= \"요그사론의 수호자 소환 (%d)\",\n\tWarningCrusherTentacleSpawned\t= \"분쇄의 촉수 생성\",\n\tWarningSanity\t\t\t\t\t= \"%d 이성 남음\",\n\tSpecWarnSanity\t\t\t\t\t= \"%d 이성 남음!\",\n\tSpecWarnGuardianLow\t\t\t\t= \"수호자 체력 낮음 - 주의!\",\n\tSpecWarnMadnessOutNow\t\t\t= \"광기 유발 종료 직전 - 밖으로 나가세요!\",\n\tWarnBrainPortalSoon\t\t\t\t= \"10초 후 차원문\",\n\tSpecWarnBrainPortalSoon\t\t\t= \"곧 차원문!\"\n})\n\nL:SetTimerLocalization({\n\tNextPortal\t= \"차원문\"\n})\n\nL:SetOptionLocalization({\n\tWarningGuardianSpawned\t\t\t= \"요그사론의 수호자 소환 알림 보기\",\n\tWarningCrusherTentacleSpawned\t= \"분쇄의 촉수 생성 알림 보기\",\n\tWarningSanity\t\t\t\t\t= \"$spell:63050이 낮은 경우 알림 보기\",\n\tSpecWarnSanity\t\t\t\t\t= \"$spell:63050이 매우 낮은 경우 특수 경고 보기\",\n\tSpecWarnGuardianLow\t\t\t\t= \"수호자의 생명력이 낮을 때 특수 경고 보기(1 단계만)\",\n\tWarnBrainPortalSoon\t\t\t\t= \"차원문 이전에 알림 보기\",\n\tSpecWarnMadnessOutNow\t\t\t= \"$spell:64059이 끝나기 전 특수 경고 보기\",\n\tSpecWarnBrainPortalSoon\t\t\t= \"차원문 이전에 특수 경고 보기\",\n\tNextPortal\t\t\t\t\t\t= \"다음 차원문 바 보기\",\n\tShowSaraHealth\t\t\t\t\t= \"사라 체력 보기(공대원 중 사라 대상/주시 일 경우)\",\n\tMaladyArrow\t\t\t\t\t\t= \"$spell:63881 대상이 가까이 있을 경우 DBM 화살표 보기\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t\t= \"짐승의 대장을 칠 때가 곧 다가올 거예요! 놈의 졸개들에게 노여움과 미움을 쏟아부으세요!\",\n\tS1TheLucidDream\t\t= \"1단계: 깨어 있는 꿈\",\n\tSara\t\t\t\t= \"사라\",\n\tGuardianofYoggSaron\t= \"요그사론의 수호병\",\n\tS2DescentIntoMadness= \"2단계: 광기의 내리막길\",\n\tCrusherTentacle\t\t= \"분쇄의 촉수\",\n\tCorruptorTentacle\t= \"부패의 촉수\",\n\tConstrictorTentacle\t= \"압착의 촉수\",\n\tDescentIntoMadness\t= \"광기의 내리막길\",\n\tInfluenceTentacle\t= \"환각의 촉수\",\n\tLaughingSkull\t\t= \"웃는 해골\",\n\tBrainofYoggSaron\t= \"요그사론의 뇌\",\n\tS3TrueFaceofDeath\t= \"3단계: 죽음의 진정한 얼굴\",\n\tYoggSaron\t\t\t= \"요그사론\",\n\tImmortalGuardian\t= \"불멸의 수호병\"\n})\n"
  },
  {
    "path": "DBM-Ulduar/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n-----------------------\n--  Flame Leviathan  --\n-----------------------\nL = DBM:GetModLocalization(\"FlameLeviathan\")\n\nL:SetGeneralLocalization({\n\tname = \"Огненный Левиафан\"\n})\n\nL:SetWarningLocalization({\n\tPursueWarn\t\t\t\t= \"Преследуется >%s<\",\n\twarnNextPursueSoon\t\t= \"Смена цели через 5 секунд\",\n\tSpecialPursueWarnYou\t= \"Вас преследуют - бегите\",\n\twarnWardofLife\t\t\t= \"Призыв Защитника жизни\"\n})\n\nL:SetOptionLocalization({\n\tSpecialPursueWarnYou\t= \"Спец-предупреждение, когда на вас $spell:62374\",\n\tPursueWarn\t\t\t\t= \"Объявлять цели заклинания $spell:62374\",\n\twarnNextPursueSoon\t\t= \"Предупреждать заранее о следующем $spell:62374\",\n\twarnWardofLife\t\t\t= \"Спец-предупреждение для призыва Защитника жизни\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Обнаружены противники. Запуск протокола оценки угрозы. Главная цель выявлена. Повторный анализ через 30 секунд.\",\n\tEmote\t\t= \"%%s наводится на (%S+)%.\"\n})\n\n--------------------------------\n--  Ignis the Furnace Master  --\n--------------------------------\nL = DBM:GetModLocalization(\"Ignis\")\n\nL:SetGeneralLocalization({\n\tname = \"Повелитель Горнов Игнис\"\n})\n\nL:SetOptionLocalization({\n\tsoundConcAuraMastery\t= \"Воспроизвести звук $spell:31821, чтобы отменить эффекты $spell:63472 (только для |cFFF48CBAПаладин|r, который является владельцем $spell:19746)\"\n})\n\n------------------\n--  Razorscale  --\n------------------\nL = DBM:GetModLocalization(\"Razorscale\")\n\nL:SetGeneralLocalization({\n\tname = \"Острокрылая\"\n})\n\nL:SetWarningLocalization({\n\twarnTurretsReadySoon\t\t= \"Гарпунные пушки будут собраны через 20 секунд\",\n\twarnTurretsReady\t\t\t= \"Гарпунные пушки собраны\"\n})\n\nL:SetTimerLocalization({\n\ttimerTurret1\t= \"Гарпунная пушка 1\",\n\ttimerTurret2\t= \"Гарпунная пушка 2\",\n\ttimerTurret3\t= \"Гарпунная пушка 3\",\n\ttimerTurret4\t= \"Гарпунная пушка 4\",\n\ttimerGrounded\t= \"на земле\"\n})\n\nL:SetOptionLocalization({\n\twarnTurretsReadySoon\t\t= \"Пред-предупреждение для пушек\",\n\twarnTurretsReady\t\t\t= \"Предупреждение для пушек\",\n\ttimerTurret1\t\t\t\t= \"Отсчет времени до пушки 1\",\n\ttimerTurret2\t\t\t\t= \"Отсчет времени до пушки 2\",\n\ttimerTurret3\t\t\t\t= \"Отсчет времени до пушки 3 (25 чел.)\",\n\ttimerTurret4\t\t\t\t= \"Отсчет времени до пушки 4 (25 чел.)\",\n\ttimerGrounded\t\t\t\t= \"Отсчет времени для наземной фазы\"\n})\n\nL:SetMiscLocalization({\n\tYellAir\t\t\t\t= \"Дайте время подготовить пушки.\",\n\tYellAir2\t\t\t= \"Огонь прекратился! Надо починить пушки!\",\n\tYellGround\t\t\t= \"Быстрее! Сейчас она снова взлетит!\",\n\tEmotePhase2\t\t\t= \"%%s обессилела и больше не может летать!\"\n})\n\n----------------------------\n--  XT-002 Deconstructor  --\n----------------------------\nL = DBM:GetModLocalization(\"XT002\")\n\nL:SetGeneralLocalization({\n\tname = \"Разрушитель XT-002\"\n})\n\n--------------------\n--  Iron Council  --\n--------------------\nL = DBM:GetModLocalization(\"IronCouncil\")\n\nL:SetGeneralLocalization({\n\tname = \"Железное собрание\"\n})\n\nL:SetOptionLocalization({\n\tAlwaysWarnOnOverload\t\t= \"Всегда предупреждать при $spell:63481<br/>(иначе, только когда босс в цели)\"\n})\n\nL:SetMiscLocalization({\n\tSteelbreaker\t\t= \"Сталелом\",\n\tRunemasterMolgeim\t= \"Мастер рун Молгейм\",\n\tStormcallerBrundir\t= \"Буревестник Брундир\"\n--\tYellPull1\t\t\t= \"Кто бы вы ни были – жалкие бродяги или великие герои... Вы всего лишь смертные!\",\n--\tYellPull2\t\t\t= \"Я буду спокоен, лишь когда окончательно истреблю вас.\",\n--\tYellPull3\t\t\t= \"Чужаки! Вам не одолеть Железное Собрание!\",\n--\tYellRuneOfDeath\t\t= \"Расшифруйте вот это!\",\n--\tYellRunemasterMolgeimDied = \"И что вам дало мое поражение? Вы все так же обречены, смертные.\",\n--\tYellRunemasterMolgeimDied2 = \"Наследие бурь не умрет вместе со мной.\",\n--\tYellStormcallerBrundirDied = \"Никто не превзойдет силу шторма.\",\n--\tYellStormcallerBrundirDied2 = \"Вас ждет бездна безумия!\",\n--\tYellSteelbreakerDied = \"Мое поражение лишь приблизит вашу погибель.\",\n--\tYellSteelbreakerDied2 = \"Не может быть!\"\n})\n\n----------------------------\n--  Algalon the Observer  --\n----------------------------\nL = DBM:GetModLocalization(\"Algalon\")\n\nL:SetGeneralLocalization({\n\tname = \"Алгалон Наблюдатель\"\n})\n\nL:SetTimerLocalization({\n\tNextCollapsingStar\t\t= \"Вспыхивающая звезда\",\n})\n\nL:SetWarningLocalization({\n\twarnStarLow\t\t\t\t= \"У Вспыхивающей звезды мало здоровья\"\n})\n\nL:SetOptionLocalization({\n\tNextCollapsingStar\t\t= \"Отсчет времени до появления Вспыхивающей звезды\",\n\twarnStarLow\t\t\t\t= \"Спец-предупреждение, когда у Вспыхивающей звезды мало здоровья (на ~25%)\"\n})\n\nL:SetMiscLocalization({\n--\tFirstPull\t\t\t\t= \"Взгляните на мир моими глазами: узрите необъятную вселенную, непостижимую даже для величайших умов.\",\n--\tYellPull\t\t\t\t= \"Ваши действия нелогичны. Все возможные исходы этой схватки просчитаны. Пантеон получит сообщение от Наблюдателя в любом случае.\",\n\tYellKill\t\t\t\t= \"Я видел миры, охваченные пламенем Творцов. Их жители гибли, не успев издать ни звука. Я был свидетелем того, как галактики рождались и умирали в мгновение ока. И все время я оставался холодным... и безразличным. Я. Не чувствовал. Ничего. Триллионы загубленных судеб. Неужели все они были подобны вам? Неужели все они так же любили жизнь?\",\n\tEmote_CollapsingStar\t= \"%s призывает взрывающиеся звезды!\",\n\tPhase2\t\t\t\t\t= \"Узрите чудо созидания!\",\n\tCollapsingStar\t\t\t= \"Вспыхивающая звезда\"\n})\n\n----------------\n--  Kologarn  --\n----------------\nL = DBM:GetModLocalization(\"Kologarn\")\n\nL:SetGeneralLocalization({\n\tname = \"Кологарн\"\n})\n\nL:SetTimerLocalization({\n\ttimerLeftArm\t\t= \"Возрождение левой руки\",\n\ttimerRightArm\t\t= \"Возрождение правой руки\",\n\tachievementDisarmed\t= \"Обезоружен\"\n})\n\nL:SetOptionLocalization({\n\ttimerLeftArm\t\t\t= \"Отсчет времени до Возрождения левой руки\",\n\ttimerRightArm\t\t\t= \"Отсчет времени до Возрождения правой руки\",\n\tachievementDisarmed\t\t= \"Отсчет времени для достижения Обезоружен\"\n})\n\nL:SetMiscLocalization({\n--\tYell_Trigger_arm_left\t= \"Царапина...\",\n--\tYell_Trigger_arm_right\t= \"Всего лишь плоть!\",\n--\tYellEncounterStart\t\t= \"Вам не пройти!\",\n--\tYellLeftArmDies\t\t\t= \"Царапина...\",\n--\tYellRightArmDies\t\t= \"Всего лишь плоть!\",\n\tHealth_Body\t\t\t\t= \"Кологарн\",\n\tHealth_Right_Arm\t\t= \"Правая рука\",\n\tHealth_Left_Arm\t\t\t= \"Левая рука\",\n\tFocusedEyebeam\t\t\t= \"%s устремляет на вас свой взгляд!\"\n})\n\n---------------\n--  Auriaya  --\n---------------\nL = DBM:GetModLocalization(\"Auriaya\")\n\nL:SetGeneralLocalization({\n\tname = \"Ауриайа\"\n})\n\nL:SetWarningLocalization({\n\tWarnCatDied\t\t= \"Дикий эащитник погибает (осталось %d жизней)\",\n\tWarnCatDiedOne\t= \"Дикий эащитник погибает (осталась 1 жизнь)\"\n})\n\n-- L:SetTimerLocalization({\n-- \ttimerDefender\t= \"Возрождение Дикого защитника\"\n-- })\n\nL:SetOptionLocalization({\n\tWarnCatDied\t\t= \"Предупреждение, когда Дикий защитник погибает\",\n\tWarnCatDiedOne\t= \"Предупреждение, когда у Дикого защитника остается 1 жизнь\"\n--\ttimerDefender\t= \"Отсчет времени до возрождения Дикого защитника\"\n})\n\nL:SetMiscLocalization({\n\tDefender = \"Дикий эащитник (%d)\",\n\tYellPull = \"Вы зря сюда заявились!\"\n})\n\n-------------\n--  Hodir  --\n-------------\nL = DBM:GetModLocalization(\"Hodir\")\n\nL:SetGeneralLocalization({\n\tname = \"Ходир\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"Вы будете наказаны за это вторжение!\",\n\tYellKill\t= \"Наконец-то я... свободен от его оков…\"\n})\n\n--------------\n--  Thorim  --\n--------------\nL = DBM:GetModLocalization(\"Thorim\")\n\nL:SetGeneralLocalization({\n\tname = \"Торим\"\n})\n\nL:SetTimerLocalization({\n\tTimerHardmode\t= \"Сложный режим\"\n})\n\nL:SetOptionLocalization({\n\tspecWarnHardmode\t= \"Спецпредупреждение о включении режима Сложный режим\",\n\tTimerHardmode\t\t= \"Отсчет времени для сложного режима\",\n\tAnnounceFails\t\t= \"Объявлять игроков, попавших под $spell:62017, в рейд-чат<br/>(требуются права лидера или помощника)\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase1\t\t\t\t= \"Незваные гости! Вы заплатите за то, что посмели вмешаться... Погодите, вы...\",\n\tYellPhase2\t\t\t\t= \"Бесстыжие выскочки, вы решили бросить вызов мне лично? Я сокрушу вас всех!\",\n\tYellKill\t\t\t\t= \"Придержите мечи! Я сдаюсь.\",\n\tYellHardModeActive\t\t= \"Это невозможно! Торим, не сомневайся – твоих врагов ждет ледяная смерть!\",\n\tYellHardModeFailed\t\t= \"Эти жалкие смертные мне не ровня! Уничтожьте их!\",\n\tChargeOn\t\t\t\t= \"Разряд молнии: %s\",\n\tCharge\t\t\t\t\t= \"Попали под Разряд молнии (в этом бою): %s\"\n})\n\n-------------\n--  Freya  --\n-------------\nL = DBM:GetModLocalization(\"Freya\")\n\nL:SetGeneralLocalization({\n\tname = \"Фрейя\"\n})\n\nL:SetWarningLocalization({\n\tWarnSimulKill\t= \"Первый помощник погиб - воскрешение через ~12 сек.\"\n})\n\nL:SetTimerLocalization({\n\tTimerSimulKill\t= \"Воскрешение\"\n})\n\nL:SetOptionLocalization({\n\tWarnSimulKill\t= \"Объявлять, когда первый монстр погибает\",\n\tTimerSimulKill\t= \"Отсчет времени до воскрешения монстров\"\n})\n\nL:SetMiscLocalization({\n\tSpawnYell\t\t\t= \"Помогите мне, дети мои!\",\n\tWaterSpirit\t\t\t= \"Древний дух воды\",\n\tSnaplasher\t\t\t= \"Хватоплет\",\n\tStormLasher\t\t\t= \"Грозовой плеточник\",\n\tYellKill\t\t\t= \"Он больше не властен надо мной. Мой взор снова ясен. Благодарю вас, герои.\",\n\tYellAdds1\t\t\t= \"Эонар, твоей прислужнице нужна помощь!\",\n\tYellAdds2\t\t\t= \"Вас захлестнет сила стихий!\",\n\tEmoteLGift\t\t\t= \"начинает расти!\", -- |cFF00FFFFДар Хранительницы жизни|r начинает расти!\n\tTrashRespawnTimer\t= \"Возрождение монстров\",\n\tYellPullNormal\t\t= \"Нужно защитить Оранжерею!\",\n\tYellPullHard\t\t= \"Древни, дайте мне силы!\"\n})\n\n----------------------\n--  Freya's Elders  --\n----------------------\nL = DBM:GetModLocalization(\"Freya_Elders\")\n\nL:SetGeneralLocalization({\n\tname = \"Древни Фрейи\"\n})\n\nL:SetOptionLocalization({\n\tTrashRespawnTimer\t= \"Отсчет времени до возрождения монстров\"\n})\n\nL:SetMiscLocalization({\n\tTrashRespawnTimer\t= \"Возрождение монстров\",\n})\n\n---------------\n--  Mimiron  --\n---------------\nL = DBM:GetModLocalization(\"Mimiron\")\n\nL:SetGeneralLocalization({\n\tname = \"Мимирон\"\n})\n\nL:SetWarningLocalization({\n\tMagneticCore\t\t= \"Магнитное ядро у |3-1(>%s<)\",\n\tWarnBombSpawn\t\t= \"Бомбот\"\n})\n\nL:SetTimerLocalization({\n\tTimerHardmode\t= \"Сложный режим - Самоуничтожение\",\n\tTimeToPhase2\t= \"Фаза 2\",\n\tTimeToPhase3\t= \"Фаза 3\",\n\tTimeToPhase4\t= \"Фаза 4\"\n})\n\nL:SetOptionLocalization({\n\tTimeToPhase2\t\t\t= \"Отсчет времени для фазы 2\",\n\tTimeToPhase3\t\t\t= \"Отсчет времени для фазы 3\",\n\tTimeToPhase4\t\t\t= \"Отсчет времени для фазы 4\",\n\tMagneticCore\t\t\t= \"Объявлять подобравших Магнитное ядро\",\n\tAutoChangeLootToFFA\t\t= \"Смена режима добычи на Каждый за себя в фазе 3\",\n\tWarnBombSpawn\t\t\t= \"Предупреждение о Бомботах\",\n\tTimerHardmode\t\t\t= \"Отсчет времени для сложного режима\"\n})\n\nL:SetMiscLocalization({\n\tMobPhase1\t\t= \"Левиафан II\",\n\tMobPhase2\t\t= \"VX-001 <Противопехотная пушка>\",\n\tMobPhase3\t\t= \"Воздушное судно\",\n\tMobPhase4\t\t= \"В-0-7-ТРОН\",\n\tYellPull\t\t= \"У нас мало времени, друзья! Вы поможете испытать новейшее и величайшее из моих изобретений. И учтите: после того, что вы натворили с XT-002, отказываться просто некрасиво.\",\n\tYellHardPull\t= \"Отсчет времени до самоуничтожения начат.\",\n\tYellPhase2\t\t= \"ПРЕВОСХОДНО! Просто восхитительный результат! Целостность обшивки – 98,9 процента! Почти что ни царапинки! Продолжаем!\",\n\tYellPhase3\t\t= \"Спасибо, друзья! Благодаря вам я получил ценнейшие сведения! Так, а куда же я дел... – ах, вот куда.\",\n\tYellPhase4\t\t= \"Фаза предварительной проверки завершена. Пора начать главный тест!\",\n\tYellKilled\t\t= \"Очевидно, я совершил небольшую ошибку в расчетах. Пленный злодей затуманил мой разум и заставил меня отклониться от инструкций. Сейчас все системы в норме. Конец связи.\",\n\tLootMsg\t\t\t= \"([^%s]+).*Hitem:(%d+)\"\n})\n\n---------------------\n--  General Vezax  --\n---------------------\nL = DBM:GetModLocalization(\"GeneralVezax\")\n\nL:SetGeneralLocalization({\n\tname = \"Генерал Везакс\"\n})\n\nL:SetTimerLocalization({\n\thardmodeSpawn = \"Саронитовый враг\"\n})\n\nL:SetOptionLocalization({\n\thardmodeSpawn\t\t\t\t\t= \"Отсчет времени до появления Саронитового врага (сложный режим)\",\n\tCrashArrow\t\t\t\t\t\t= \"Показывать стрелку, когда $spell:62660 около вас\"\n})\n\nL:SetMiscLocalization({\n\tEmoteSaroniteVapors\t= \"Поблизости начинают возникать саронитовые испарения!\"\n})\n\n------------------\n--  Yogg-Saron  --\n------------------\nL = DBM:GetModLocalization(\"YoggSaron\")\n\nL:SetGeneralLocalization({\n\tname = \"Йогг-Сарон\"\n})\n\nL:SetWarningLocalization({\n\tWarningGuardianSpawned\t\t\t= \"Страж %d\",\n\tWarningCrusherTentacleSpawned\t= \"Тяжелое щупальце\",\n\tWarningSanity\t\t\t\t\t= \"Осталось %d Здравомыслия\",\n\tSpecWarnSanity\t\t\t\t\t= \"Осталось %d Здравомыслия\",\n\tSpecWarnGuardianLow\t\t\t\t= \"Прекратите атаковать этого Стража\",\n\tSpecWarnMadnessOutNow\t\t\t= \"Доведение до помешательства заканчивается - выбегайте\",\n\tWarnBrainPortalSoon\t\t\t\t= \"Провал Безумия через 10 секунды\",\n\tSpecWarnBrainPortalSoon\t\t\t= \"Скоро Провал Безумия\"\n})\n\nL:SetTimerLocalization({\n\tNextPortal\t= \"Провал Безумия\"\n})\n\nL:SetOptionLocalization({\n\tWarningGuardianSpawned\t\t\t= \"Предупреждение о появлении Стража\",\n\tWarningCrusherTentacleSpawned\t= \"Предупреждение о появлении Тяжелого щупальца\",\n\tWarningSanity\t\t\t\t\t= \"Предупреждение, когда у вас мало $spell:63050\",\n\tSpecWarnSanity\t\t\t\t\t= \"Спец-предупреждение, когда у вас очень мало $spell:63050\",\n\tSpecWarnGuardianLow\t\t\t\t= \"Спец-предупреждение, когда у Стража (в фазе 1) мало здоровья (для бойцов)\",\n\tWarnBrainPortalSoon\t\t\t\t= \"Предупреждать заранее о Провале Безумия\",\n\tSpecWarnMadnessOutNow\t\t\t= \"Спец-предупреждение незадолго до окончания $spell:64059\",\n\tSpecWarnBrainPortalSoon\t\t\t= \"Спец-предупреждение о следующем Провале Безумия\",\n\tNextPortal\t\t\t\t\t\t= \"Отсчет времени до следующего Провала Безумия\",\n\tShowSaraHealth\t\t\t\t\t= \"Показывать здоровье Сары в фазе 1 (должна быть в цели или фокусе хотя бы у одного члена рейда)\",\n\tMaladyArrow\t\t\t\t\t\t= \"Показывать стрелку, когда $spell:63881 около вас\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t\t= \"Скоро мы сразимся с главарем этих извергов! Обратите гнев и ненависть против его прислужников!\",\n\tS1TheLucidDream\t\t= \"Фаза 1: осознанный сон\",\n\tSara\t\t\t\t= \"Сара\",\n\tGuardianofYoggSaron\t= \"Страж Йогг-Сарона\",\n\tS2DescentIntoMadness= \"Фаза 2: Провал Безумия\",\n\tCrusherTentacle\t\t= \"Тяжелое щупальце\",\n\tCorruptorTentacle\t= \"Щупальце разложения\",\n\tConstrictorTentacle\t= \"Удушающее щупальце\",\n\tDescentIntoMadness\t= \"Провал Безумия\",\n\tInfluenceTentacle\t= \"Чувствительное щупальце\",\n\tLaughingSkull\t\t= \"Веселый череп\",\n\tBrainofYoggSaron\t= \"Мозг Йогг-Сарона\",\n\tS3TrueFaceofDeath\t= \"Фаза 3: истинный лик смерти\",\n\tYoggSaron\t\t\t= \"Йогг-Сарон\",\n\tImmortalGuardian\t= \"Бессмертный страж\"\n})\n"
  },
  {
    "path": "DBM-Ulduar/localization.tw.lua",
    "content": "﻿if GetLocale() ~= \"zhTW\" then return end\n\nlocal L\n\n-----------------------\n--  Flame Leviathan  --\n-----------------------\nL = DBM:GetModLocalization(\"FlameLeviathan\")\n\nL:SetGeneralLocalization({\n\tname = \"烈焰戰輪\"\n})\n\nL:SetWarningLocalization({\n\tPursueWarn\t\t\t\t= \"獵殺: >%s<\",\n\twarnNextPursueSoon\t\t= \"5秒後獵殺轉換\",\n\tSpecialPursueWarnYou\t= \"你中了獵殺 - 快跑\",\n\twarnWardofLife\t\t\t= \"生命結界出現\"\n})\n\nL:SetOptionLocalization({\n\tSpecialPursueWarnYou\t= \"當你中了獵殺時顯示特別警告\",\n\tPursueWarn\t\t\t\t= \"提示獵殺的目標\",\n\twarnNextPursueSoon\t\t= \"為下一次獵殺顯示預先警告\",\n\twarnWardofLife\t\t\t= \"為生命結界出現顯示特別警告\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"發現敵意實體。啟動威脅評估協定。首要目標接近中。30秒後將再度評估。\",\n\tEmote\t\t= \"%%s緊追(%S+)%。\"\n})\n\n--------------------------------\n--  Ignis the Furnace Master  --\n--------------------------------\nL = DBM:GetModLocalization(\"Ignis\")\n\nL:SetGeneralLocalization({\n\tname = \"『火爐之主』伊格尼司\"\n})\n\nL:SetOptionLocalization({\n\tsoundConcAuraMastery\t= \"播放 $spell:31821 聲音以抵消 $spell:63472 的效果（僅適用於 $spell:19746 的所有者 |cFFF48CBA聖騎士|r）\"\n})\n\n------------------\n--  Razorscale  --\n------------------\nL = DBM:GetModLocalization(\"Razorscale\")\n\nL:SetGeneralLocalization({\n\tname = \"銳鱗\"\n})\n\nL:SetWarningLocalization({\n\twarnTurretsReadySoon\t= \"20秒後 最後一座砲塔完成\",\n\twarnTurretsReady\t\t= \"最後一座砲塔已完成\"\n})\n\nL:SetTimerLocalization({\n\ttimerTurret1\t= \"砲塔1\",\n\ttimerTurret2\t= \"砲塔2\",\n\ttimerTurret3\t= \"砲塔3\",\n\ttimerTurret4\t= \"砲塔4\",\n\ttimerGrounded\t= \"地上階段\"\n})\n\nL:SetOptionLocalization({\n\twarnTurretsReadySoon\t= \"為砲塔顯示預先警告\",\n\twarnTurretsReady\t\t= \"為砲塔顯示警告\",\n\ttimerTurret1\t\t\t= \"為砲塔1顯示計時器\",\n\ttimerTurret2\t\t\t= \"為砲塔2顯示計時器\",\n\ttimerTurret3\t\t\t= \"為砲塔3顯示計時器 (25人)\",\n\ttimerTurret4\t\t\t= \"為砲塔4顯示計時器 (25人)\",\n\ttimerGrounded\t\t\t= \"為地上階段顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tYellAir\t\t\t\t= \"給我們一點時間來準備建造砲塔。\",\n\tYellAir2\t\t\t= \"火熄了!讓我們重建砲塔!\",\n\tYellGround\t\t\t= \"快!她可不會在地面上待太久!\",\n\tEmotePhase2\t\t\t= \"再也飛不動了!\"\n})\n\n----------------------------\n--  XT-002 Deconstructor  --\n----------------------------\nL = DBM:GetModLocalization(\"XT002\")\n\nL:SetGeneralLocalization({\n\tname = \"XT-002拆解者\"\n})\n\n--------------------\n--  Iron Council  --\n--------------------\nL = DBM:GetModLocalization(\"IronCouncil\")\n\nL:SetGeneralLocalization({\n\tname = \"鐵之集會\"\n})\n\nL:SetOptionLocalization({\n\tAlwaysWarnOnOverload\t= \"總是對$spell:63481顯示警告(否則只有當目標是風暴召喚者的時候顯示)\"\n})\n\nL:SetMiscLocalization({\n\tSteelbreaker\t\t\t= \"破鋼者\",\n\tRunemasterMolgeim\t\t= \"符文大師墨吉姆\",\n\tStormcallerBrundir\t\t= \"風暴召喚者布倫迪爾\"\n})\n\n----------------------------\n--  Algalon the Observer  --\n----------------------------\nL = DBM:GetModLocalization(\"Algalon\")\n\nL:SetGeneralLocalization({\n\tname = \"『觀察者』艾爾加隆\"\n})\n\nL:SetWarningLocalization({\n\twarnStarLow\t\t\t\t= \"崩陷之星血量低\"\n})\n\nL:SetTimerLocalization({\n\tNextCollapsingStar\t\t= \"下一次崩陷之星\",\n})\n\nL:SetOptionLocalization({\n\tNextCollapsingStar\t\t= \"為下一次崩陷之星顯示計時器\",\n\twarnStarLow\t\t\t\t= \"當崩陷之星血量低(大約25%)時顯示特別警告\"\n})\n\nL:SetMiscLocalization({\n--\tFirstPull\t\t\t\t= \"從我的雙眼觀看你的世界:一個無邊無際的宇宙--連你們之中最具智慧者都無法想像的廣闊無垠。\",\n--\tYellPull\t\t\t\t= \"你的行為毫無意義。這場衝突的結果早已計算出來了。不論結局為何，萬神殿仍將收到觀察者的訊息。\",\n\tYellKill\t\t\t\t= \"我曾經看過塵世沉浸在造物者的烈焰之中，眾生連一聲悲泣都無法呼出，就此凋零。整個星系在彈指之間歷經了毀滅與重生。然而在這段歷程之中，我的心卻無法感受到絲毫的...惻隱之念。我‧感‧受‧不‧到。成千上萬的生命就這麼消逝。他們是否擁有與你同樣堅韌的生命?他們是否與你同樣熱愛生命?\",\n\tEmote_CollapsingStar\t= \"%s開始召喚崩陷之星!\",\n\tPhase2\t\t\t\t\t= \"瞧瞧泰坦造物的能耐吧!\",\n\tCollapsingStar\t\t\t= \"崩陷之星\"\n})\n\n----------------\n--  Kologarn  --\n----------------\nL = DBM:GetModLocalization(\"Kologarn\")\n\nL:SetGeneralLocalization({\n\tname = \"柯洛剛恩\"\n})\n\nL:SetTimerLocalization({\n\ttimerLeftArm\t\t\t= \"左臂重生\",\n\ttimerRightArm\t\t\t= \"右臂重生\",\n\tachievementDisarmed\t\t= \"卸除手臂計時器\"\n})\n\nL:SetOptionLocalization({\n\ttimerLeftArm\t\t\t= \"為左臂重生顯示計時器\",\n\ttimerRightArm\t\t\t= \"為右臂重生顯示計時器\",\n\tachievementDisarmed\t\t= \"為成就:卸除手臂顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tYell_Trigger_arm_left\t= \"小小的擦傷!\",\n\tYell_Trigger_arm_right\t= \"只是皮肉之傷!\",\n\tHealth_Body\t\t\t\t= \"柯洛剛恩身體\",\n\tHealth_Right_Arm\t\t= \"右臂\",\n\tHealth_Left_Arm\t\t\t= \"左臂\",\n\tFocusedEyebeam\t\t\t= \"正在注視著你\"\n})\n\n---------------\n--  Auriaya  --\n---------------\nL = DBM:GetModLocalization(\"Auriaya\")\n\nL:SetGeneralLocalization({\n\tname = \"奧芮雅\"\n})\n\nL:SetWarningLocalization({\n\tWarnCatDied\t= \"野性防衛者倒下 (剩餘%d隻)\",\n\tWarnCatDiedOne\t= \"野性防衛者倒下 (剩下最後一隻)\"\n})\n\n-- L:SetTimerLocalization({\n-- \ttimerDefender\t= \"野性防衛者復活\"\n-- })\n\nL:SetOptionLocalization({\n\tWarnCatDied\t\t= \"當野性防衛者死亡時顯示警告\",\n\tWarnCatDiedOne\t= \"當野性防衛者剩下最後一隻時顯示警告\"\n--\ttimerDefender   = \"當野性防衛者準備復活時顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tDefender = \"野性防衛者 (%d)\",\n\tYellPull = \"有些事情不該公諸於世!\"\n})\n\n-------------\n--  Hodir  --\n-------------\nL = DBM:GetModLocalization(\"Hodir\")\n\nL:SetGeneralLocalization({\n\tname = \"霍迪爾\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t= \"你將為擅闖付出代價!\",\n\tYellKill\t= \"我...我終於從他的掌控中...解脫了。\"\n})\n\n--------------\n--  Thorim  --\n--------------\nL = DBM:GetModLocalization(\"Thorim\")\n\nL:SetGeneralLocalization({\n\tname = \"索林姆\"\n})\n\nL:SetTimerLocalization({\n\tTimerHardmode\t= \"困難模式\"\n})\n\nL:SetOptionLocalization({\n\tspecWarnHardmode\t= \"特別提示：困難模式\",\n\tTimerHardmode\t\t= \"為困難模式顯示計時器\",\n\tAnnounceFails\t\t= \"公佈中了閃電充能的玩家到團隊頻道<br/>(需要團隊隊長或助理權限)\"\n})\n\nL:SetMiscLocalization({\n\tYellPhase1\t\t\t= \"擅闖者!像你們這種膽敢干涉我好事的凡人將付出...等等--你...\",\n\tYellPhase2\t\t\t= \"無禮的小輩，你竟敢在我的王座之上挑戰我?我會親手碾碎你們!\",\n\tYellKill\t\t\t= \"住手!我認輸了!\",\n\tYellHardModeActive\t= \"不可能!索林姆王，我將讓你的仇敵們在嚴寒之中死去!\",\n\tYellHardModeFailed\t= \"這些可悲的凡人根本毫無威脅，不在我的考量之中。解決他們!\",\n\tChargeOn\t\t\t= \"閃電充能: %s\",\n\tCharge\t\t\t\t= \"中了閃電充能 (這一次): %s\"\n})\n\n-------------\n--  Freya  --\n-------------\nL = DBM:GetModLocalization(\"Freya\")\n\nL:SetGeneralLocalization({\n\tname = \"芙蕾雅\"\n})\n\nL:SetWarningLocalization({\n\tWarnSimulKill\t= \"第一隻元素死亡 - 大約12秒後復活\"\n})\n\nL:SetTimerLocalization({\n\tTimerSimulKill\t= \"復活\"\n})\n\nL:SetOptionLocalization({\n\tWarnSimulKill\t= \"提示第一隻元素死亡\",\n\tTimerSimulKill\t= \"為三元素復活顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tSpawnYell\t\t\t= \"孩子們，協助我!\",\n\tWaterSpirit\t\t\t= \"上古水之靈\",\n\tSnaplasher\t\t\t= \"猛攫鞭笞者\",\n\tStormLasher\t\t\t= \"風暴鞭笞者\",\n\tYellKill\t\t\t= \"他對我的操控已然退散。我已再次恢復神智了。感激不盡，英雄們。\",\n\tYellAdds1\t\t\t= \"伊歐娜，你的僕從需要協助!\",\n\tYellAdds2\t\t\t= \"元素們將襲捲你們!\",\n\tEmoteLGift\t\t\t= \"開始生長!\", -- 一個|cFF00FFFF生命守縛者之禮|r開始生長!\n\tTrashRespawnTimer\t= \"芙蕾雅的小怪重生\",\n\tYellPullNormal\t\t= \"必須守護大溫室!\",\n\tYellPullHard\t\t= \"長者們，賦予我你們的力量!\"\n})\n\n----------------------\n--  Freya's Elders  --\n----------------------\nL = DBM:GetModLocalization(\"Freya_Elders\")\n\nL:SetGeneralLocalization({\n\tname = \"芙蕾雅的長者們\"\n})\n\nL:SetOptionLocalization({\n\tTrashRespawnTimer\t= \"為芙蕾雅的小怪重生顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tTrashRespawnTimer\t= \"芙蕾雅的小怪重生\"\n})\n\n---------------\n--  Mimiron  --\n---------------\nL = DBM:GetModLocalization(\"Mimiron\")\n\nL:SetGeneralLocalization({\n\tname = \"彌米倫\"\n})\n\nL:SetWarningLocalization({\n\tMagneticCore\t\t= \">%s<拿到了磁能之核\",\n\tWarnBombSpawn\t\t= \"炸彈機器人出現了\"\n})\n\nL:SetTimerLocalization({\n\tTimerHardmode\t= \"困難模式 - 自毀程序\",\n\tTimeToPhase2\t= \"第2階段開始\",\n\tTimeToPhase3\t= \"第3階段開始\",\n\tTimeToPhase4\t= \"第4階段開始\"\n})\n\nL:SetOptionLocalization({\n\tTimeToPhase2\t\t\t= \"為第2階段開始顯示計時器\",\n\tTimeToPhase3\t\t\t= \"為第3階段開始顯示計時器\",\n\tTimeToPhase4\t\t\t= \"為第4階段開始顯示計時器\",\n\tMagneticCore\t\t\t= \"提示磁能之核的拾取者\",\n\tAutoChangeLootToFFA\t\t= \"第3階段自動轉換拾取方式為自由拾取\",\n\tWarnBombSpawn\t\t\t= \"為炸彈機器人顯示警告\",\n\tTimerHardmode\t\t\t= \"為困難模式顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tMobPhase1\t\t= \"戰輪MK II\",\n\tMobPhase2\t\t= \"VX-001\",\n\tMobPhase3\t\t= \"空中指揮裝置\",\n\tMobPhase4\t\t= \"V-07-TR-0N\", -- don't localize nor change it to V-07-TR-ON (typo)\n\tYellPull\t\t= \"我們沒有太多時間，朋友們!你們要幫我測試我最新也是最偉大的創作。在你們改變心意之前，別忘了就是你們把XT-002搞得一團糟，你們欠我一次。\",\n\tYellHardPull\t= \"自毀程序已展開。\",\n\tYellPhase2\t\t= \"太好了!絕妙的良好結果!外殼完整度98.9%!幾乎只有一點擦痕!繼續下去。\",\n\tYellPhase3\t\t= \"感謝你，朋友們!我們的努力讓我獲得了一些絕佳的資料!現在，我把東西放在哪兒了--噢，在這裡。\",\n\tYellPhase4\t\t= \"初步測試階段完成。現在要玩真的啦!\",\n\tYellKilled\t\t= \"看來我還是產生了些許計算錯誤。任由我的心智受到囚牢中魔鬼的腐化，棄我的首要職責於不顧。所有的系統看起來都正常運作。報告完畢。\",\n\tLootMsg\t\t\t= \"(.+)拾取了物品:.*Hitem:(%d+)\"\n})\n\n---------------------\n--  General Vezax  --\n---------------------\nL = DBM:GetModLocalization(\"GeneralVezax\")\n\nL:SetGeneralLocalization({\n\tname = \"威札斯將軍\"\n})\n\nL:SetTimerLocalization({\n\thardmodeSpawn = \"薩倫聚惡體出現\"\n})\n\nL:SetOptionLocalization({\n\thardmodeSpawn\t\t= \"為薩倫聚惡體出現顯示計時器 (困難模式)\",\n\tCrashArrow\t\t\t= \"當你附近的人中了$spell:62660時顯示DBM箭頭\"\n})\n\nL:SetMiscLocalization({\n\tEmoteSaroniteVapors\t= \"一片薩倫煙霧在附近聚合!\"\n})\n\n------------------\n--  Yogg-Saron  --\n------------------\nL = DBM:GetModLocalization(\"YoggSaron\")\n\nL:SetGeneralLocalization({\n\tname = \"尤格薩倫\"\n})\n\nL:SetWarningLocalization({\n\tWarningGuardianSpawned\t\t\t= \"第%d個尤格薩倫守護者出現了\",\n\tWarningCrusherTentacleSpawned\t= \"粉碎觸手出現了\",\n\tWarningSanity\t\t\t\t\t= \"剩下%d理智\",\n\tSpecWarnSanity\t\t\t\t\t= \"剩下%d理智\",\n\tSpecWarnGuardianLow\t\t\t\t= \"停止攻擊這隻守護者\",\n\tSpecWarnMadnessOutNow\t\t\t= \"瘋狂誘陷即將結束 - 快傳送出去\",\n\tWarnBrainPortalSoon\t\t\t\t= \"10秒後腦部傳送門\",\n\tSpecWarnBrainPortalSoon\t\t\t= \"腦部傳送門即將到來\"\n})\n\nL:SetTimerLocalization({\n\tNextPortal\t= \"下一次腦部傳送門\"\n})\n\nL:SetOptionLocalization({\n\tWarningGuardianSpawned\t\t\t= \"為尤格薩倫守護者出現顯示警告\",\n\tWarningCrusherTentacleSpawned\t= \"為粉碎觸手出現顯示警告\",\n\tWarningSanity\t\t\t\t\t= \"當理智剩下50時顯示警告\",\n\tSpecWarnSanity\t\t\t\t\t= \"當理智過低(35,25,15)時顯示特別警告\",\n\tSpecWarnGuardianLow\t\t\t\t= \"當守護者(第1階段)血量過低時顯示特別警告 (DPS用)\",\n\tWarnBrainPortalSoon\t\t\t\t= \"為腦部傳送門顯示預先警告\",\n\tSpecWarnMadnessOutNow\t\t\t= \"為瘋狂誘陷結束前顯示特別警告\",\n\tSpecWarnBrainPortalSoon\t\t\t= \"為下一次腦部傳送門顯示特別警告\",\n\tNextPortal\t\t\t\t\t\t= \"為下一次傳送門顯示計時器\",\n\tShowSaraHealth\t\t\t\t\t= \"顯示薩拉在第1階段的血量 (必須有最少一名團隊成員設置目標或專注目標)\",\n\tMaladyArrow\t\t\t\t\t\t= \"當你附近的人中了$spell:63881時顯示DBM箭頭\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t\t\t= \"我們即將有機會打擊怪物的首腦!現在將你的憤怒與仇恨貫注在他的爪牙上!\",\n\tS1TheLucidDream\t\t= \"階段一：清醒的夢境\",\n\tSara\t\t\t\t= \"薩拉\",\n\tGuardianofYoggSaron\t= \"尤格薩倫守護者\",\n\tS2DescentIntoMadness= \"階段二：驟狂斜廊\",\n\tCrusherTentacle\t\t= \"粉碎觸手\",\n\tCorruptorTentacle\t= \"腐化觸手\",\n\tConstrictorTentacle\t= \"巨蟒觸手\",\n\tDescentIntoMadness\t= \"驟狂斜廊\",\n\tInfluenceTentacle\t= \"蠱惑觸手\",\n\tLaughingSkull\t\t= \"獰笑骷髏\",\n\tBrainofYoggSaron\t= \"尤格薩倫的腦部\",\n\tS3TrueFaceofDeath\t= \"階段三：死亡的真實面貌\",\n\tYoggSaron\t\t\t= \"尤格薩倫\",\n\tImmortalGuardian\t= \"不朽守護者\"\n})\n"
  },
  {
    "path": "DBM-VPVEM/DBM-VPVEM.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Voicepack VEM|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Голосовой пакет VEM|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0음성팩 VEM|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0VEM语音包|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0VEM語音包|r\n## DefaultState: enabled\n## RequiredDeps: DBM-Core\n## Author: Iceoven\n## Version: 49d3d7e\n## X-DBM-Voice: 1\n## X-DBM-Voice-Name: VEM English Female\n## X-DBM-Voice-Name-ruRU: VEM Английский женский\n## X-DBM-Voice-Name-koKR: VEM 영어 여성\n## X-DBM-Voice-ShortName: VEM\n## X-DBM-Voice-Version: 14\n## X-DBM-Voice-HasCount: 1\n"
  },
  {
    "path": "DBM-VPVEM/license.txt",
    "content": "All voice files here are generated by Chouu@Arthas (US), All Rights Reserved.\n"
  },
  {
    "path": "DBM-VanillaNaxx/ArachnidQuarter/Anub'Rekhan.lua",
    "content": "local mod\t= DBM:NewMod(\"Anub'Rekhan-Vanilla\", \"DBM-VanillaNaxx\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20240714122130\")\nmod:SetCreatureID(15956)\n\nmod:RegisterCombat(\"combat_yell\", L.Pull1, L.Pull2)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 28785 54021\",\n\t\"SPELL_CAST_SUCCESS 28783 56090\",\n\t\"SPELL_AURA_REMOVED 28785 54021\"\n)\n\nlocal warningLocustSoon\t\t= mod:NewSoonAnnounce(28785, 2)\nlocal warningLocustFaded\t= mod:NewFadesAnnounce(28785, 1)\nlocal warnImpale\t\t\t= mod:NewTargetNoFilterAnnounce(28783, 3, nil, false)\n\nlocal specialWarningLocust\t= mod:NewSpecialWarningSpell(28785, nil, nil, nil, 2, 2)\nlocal yellImpale\t\t\t= mod:NewYell(28783, nil, false)\n\nlocal timerLocustIn\t\t\t= mod:NewCDTimer(115.17, 28785, nil, nil, nil, 6) -- (Onyxia PTR: [2024-07-13]@[13:41:28]) - \"Locust Swarm-28785-npc:15956-805 = pull:115.17\"\nlocal timerLocustFade\t\t= mod:NewBuffActiveTimer(23, 28785, nil, nil, nil, 6) -- 3s cast timer + 20s buff active timer\nlocal timerImpale\t\t\t= mod:NewCDTimer(13, 56090, nil, nil, nil, 3) -- REVIEW! ~7s variance [13.0-19.8]? (25m Lordaeron 2022/10/16) -- 13.7, 13.6, 19.8, 13.0\n\nfunction mod:OnCombatStart(delay)\n\ttimerLocustIn:Start(115.17 - delay)\n\twarningLocustSoon:Schedule(105 - delay)\n\ttimerImpale:Start(12.7-delay) -- REVIEW! variance? (25m Lordaeron 2022/10/16) - pull:12.7\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(28785, 54021) then  -- Locust Swarm\n\t\tspecialWarningLocust:Show()\n\t\tspecialWarningLocust:Play(\"aesoon\")\n\t\ttimerLocustIn:Stop()\n\t\ttimerLocustFade:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(28783, 56090) then  -- Impale. REVIEW! 28783 needed?\n\t\ttimerImpale:Start()\n\t\twarnImpale:Show(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tyellImpale:Yell()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(28785, 54021)\n\tand args.auraType == \"BUFF\" then\n\t\twarningLocustFaded:Show()\n\t\ttimerLocustIn:Start() -- REVIEW!\n\t\twarningLocustSoon:Schedule(105) -- REVIEW!\n\tend\nend\n"
  },
  {
    "path": "DBM-VanillaNaxx/ArachnidQuarter/Faerlina.lua",
    "content": "local mod\t= DBM:NewMod(\"Faerlina-Vanilla\", \"DBM-VanillaNaxx\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20240714153159\")\nmod:SetCreatureID(15953)\n\nmod:RegisterCombat(\"combat_yell\", L.Pull)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 28798 54100 28732 54097 28794 54099\",\n\t\"SPELL_CAST_SUCCESS 28796 54098\",\n\t\"UNIT_DIED\"\n)\n\nlocal warnEmbraceActive\t\t= mod:NewSpellAnnounce(28732, 1)\nlocal warnEmbraceExpire\t\t= mod:NewAnnounce(\"WarningEmbraceExpire\", 2, 28732, nil, nil, nil, 28732)\nlocal warnEmbraceExpired\t= mod:NewFadesAnnounce(28732, 3)\nlocal warnEnrageSoon\t\t= mod:NewSoonAnnounce(28131, 3)\nlocal warnEnrageNow\t\t\t= mod:NewSpellAnnounce(28131, 4)\n\nlocal specWarnEnrage\t\t= mod:NewSpecialWarningDefensive(28131, nil, nil, nil, 3, 2)\nlocal specWarnGTFO\t\t\t= mod:NewSpecialWarningGTFO(28794, nil, nil, nil, 1, 8)\n\nlocal timerEmbrace\t\t\t= mod:NewBuffActiveTimer(30, 28732, nil, nil, nil, 6)\nlocal timerEnrage\t\t\t= mod:NewCDTimer(63.26, 28131, nil, nil, nil, 6)\nlocal timerPoisonVolleyCD\t= mod:NewCDTimer(8.13, 28796, nil, nil, nil, 5) -- ~2s variance [8.13-9.96] (Onyxia: [2024-07-08]@[19:04:03] || [2024-07-13]@[13:46:21]) - \"Poison Bolt Volley-28796-npc:15953-798 = pull:13.51, 8.13, 9.58, 8.98, 8.84, 9.50, 8.88, 8.26, 9.01\" || \"Poison Bolt Volley-28796-npc:15953-798 = pull:13.80, 9.30, 9.96, 9.83, 9.44, 9.89, 9.76, 8.58, 8.41\"\n\nmod.vb.enraged = false\n\nfunction mod:OnCombatStart(delay)\n\ttimerEnrage:Start(-delay)\n\twarnEnrageSoon:Schedule(55 - delay)\n\ttimerPoisonVolleyCD:Start(13.51-delay) -- REVIEW! variance?\n\tself.vb.enraged = false\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(28798, 54100) then\t\t\t-- Frenzy\n\t\tself.vb.enraged = true\n\t\tif self:IsTanking(\"player\", \"boss1\", nil, true) then\n\t\t\tspecWarnEnrage:Show()\n\t\t\tspecWarnEnrage:Play(\"defensive\")\n\t\telse\n\t\t\twarnEnrageNow:Show()\n\t\tend\n\telseif args:IsSpellID(28732, 54097)\tand args:GetDestCreatureID() == 15953 and self:AntiSpam(5, 2) then\t-- Widow's Embrace\n\t\twarnEmbraceExpire:Cancel()\n\t\twarnEmbraceExpired:Cancel()\n\t\twarnEnrageSoon:Cancel()\n\t\ttimerEnrage:Stop()\n\t\tif self.vb.enraged then\n\t\t\ttimerEnrage:Start()\n\t\t\twarnEnrageSoon:Schedule(45)\n\t\tend\n\t\ttimerEmbrace:Start()\n\t\twarnEmbraceActive:Show()\n\t\twarnEmbraceExpire:Schedule(25)\n\t\twarnEmbraceExpired:Schedule(30)\n\t\tself.vb.enraged = false\n\telseif args:IsSpellID(28794, 54099) and args:IsPlayer() then\n\t\tspecWarnGTFO:Show(args.spellName)\n\t\tspecWarnGTFO:Play(\"watchfeet\")\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(28796, 54098) then -- Poison Bolt Volley\n\t\ttimerPoisonVolleyCD:Start()\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 15953 then\n\t\twarnEnrageSoon:Cancel()\n\t\twarnEmbraceExpire:Cancel()\n\t\twarnEmbraceExpired:Cancel()\n\tend\nend\n"
  },
  {
    "path": "DBM-VanillaNaxx/ArachnidQuarter/Maexxna.lua",
    "content": "local mod\t= DBM:NewMod(\"Maexxna-Vanilla\", \"DBM-VanillaNaxx\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20240701222429\")\nmod:SetCreatureID(15952)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 28622\",\n\t\"SPELL_CAST_SUCCESS 29484 54125\"\n)\n\n--TODO, verify nax40 web wrap timer\nlocal warnWebWrap\t\t= mod:NewTargetNoFilterAnnounce(28622, 2)\nlocal warnWebSpraySoon\t= mod:NewSoonAnnounce(29484, 1)\nlocal warnWebSprayNow\t= mod:NewSpellAnnounce(29484, 3)\nlocal warnSpidersSoon\t= mod:NewAnnounce(\"WarningSpidersSoon\", 2, 17332)\nlocal warnSpidersNow\t= mod:NewAnnounce(\"WarningSpidersNow\", 4, 17332)\n\nlocal specWarnWebWrap\t= mod:NewSpecialWarningSwitch(28622, \"RangedDps\", nil, nil, 1, 2)\nlocal yellWebWrap\t\t= mod:NewYellMe(28622)\n\nlocal timerWebSpray\t\t= mod:NewNextTimer(40, 29484, nil, nil, nil, 2)\nlocal timerWebWrap\t\t= mod:NewNextTimer(39.6, 28622, nil, \"RangedDps|Healer\", nil, 3)-- 39.593-40.885\nlocal timerSpider\t\t= mod:NewTimer(30, \"TimerSpider\", 17332, nil, nil, 1)\n\nlocal function Spiderlings(self)\n\twarnSpidersSoon:Schedule(35)\n\twarnSpidersNow:Schedule(40)\n\ttimerSpider:Start(40)\n\tself:Unschedule(Spiderlings)\n\tself:Schedule(40, Spiderlings, self)\nend\n\nfunction mod:OnCombatStart(delay)\n\twarnWebSpraySoon:Schedule(35 - delay)\n\ttimerWebSpray:Start(40 - delay)\n\ttimerWebWrap:Start(20.1 - delay)--20.095-21.096\n\twarnSpidersSoon:Schedule(25 - delay)\n\twarnSpidersNow:Schedule(30 - delay)\n\ttimerSpider:Start(30 - delay)\n\tself:Schedule(30 - delay, Spiderlings, self)\nend\n\nfunction mod:OnCombatEnd(wipe)\n\tif not wipe then\n\t\tif DBT:GetBar(L.ArachnophobiaTimer) then\n\t\t\tDBT:CancelBar(L.ArachnophobiaTimer)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 28622 then -- Web Wrap\n\t\twarnWebWrap:CombinedShow(0.5, args.destName)\n\t\tif args.destName == UnitName(\"player\") then\n\t\t\tyellWebWrap:Yell()\n\t\telseif not DBM:UnitDebuff(\"player\", args.spellName) and self:AntiSpam(3, 1) then\n\t\t\tspecWarnWebWrap:Show()\n\t\t\tspecWarnWebWrap:Play(\"targetchange\")\n\t\t\ttimerWebWrap:Start()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(29484, 54125) then -- Web Spray\n\t\twarnWebSprayNow:Show()\n\t\twarnWebSpraySoon:Schedule(35)\n\t\ttimerWebSpray:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-VanillaNaxx/ConstructQuarter/Gluth.lua",
    "content": "local mod\t= DBM:NewMod(\"Gluth-Vanilla\", \"DBM-VanillaNaxx\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20240714122458\")\nmod:SetCreatureID(15932)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 28371\",\n\t\"SPELL_AURA_REMOVED 28371\",\n\t\"SPELL_CAST_SUCCESS 29685\",\n\t\"SPELL_DAMAGE 28375 54426\"\n)\n\n--TODO, is it really necessary to use SPELL_DAMAGE here?\n--TODO, verify decimate timer is actually accurate for wrath (it certainly wasn't for naxx 40)\nlocal warnEnrage\t\t\t= mod:NewTargetNoFilterAnnounce(19451, 3, nil , \"Healer|Tank|RemoveEnrage\", 2)\nlocal warnDecimateSoon\t\t= mod:NewSoonAnnounce(28375, 2)\nlocal warnDecimateNow\t\t= mod:NewSpellAnnounce(28375, 3)\nlocal warnTerrifyingRoarSoon= mod:NewSoonAnnounce(29685, 3)\nlocal warnTerrifyingRoar\t= mod:NewSpellAnnounce(29685, 3)\n\nlocal specWarnEnrage\t\t= mod:NewSpecialWarningDispel(19451, \"RemoveEnrage\", nil, nil, 1, 6)\n\nlocal timerEnrage\t\t\t= mod:NewBuffActiveTimer(8, 19451, nil, nil, nil, 5, nil, DBM_COMMON_L.ENRAGE_ICON)\nlocal timerDecimate\t\t\t= mod:NewCDTimer(105, 28375, nil, nil, nil, 2) -- (Onyxia: [2024-07-08]@[18:54:05]) - \"Decimate-28375-npc:15932-942 = pull:104.98, 105.00, 0.00, 0.00, 0.01\"\nlocal timerTerrifyingRoarCD = mod:NewCDTimer(20, 29685, nil, nil, nil, 6) -- ~1s variance [20.01-20.96]. (Onyxia: [2024-07-08]@[18:54:05]) - \"Terrifying Roar-29685-npc:15932-942 = pull:20.54, 20.35, 20.43, 20.91, 20.81, 20.03, 20.01, 20.36, 20.02, 20.51, 20.96\"\nlocal enrageTimer\t\t\t= mod:NewBerserkTimer(420)\n\nfunction mod:OnCombatStart(delay)\n\tenrageTimer:Start(-delay)\n\ttimerDecimate:Start(-delay) -- 25m Log review from 2022-05-05 - 1 minutes 50 seconds\n\twarnDecimateSoon:Schedule(95-delay)\n\twarnTerrifyingRoarSoon:Schedule(15)\n\ttimerTerrifyingRoarCD:Start()\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 28371 then\n\t\tif self.Options.SpecWarn19451dispel then\n\t\t\tspecWarnEnrage:Show(args.destName)\n\t\t\tspecWarnEnrage:Play(\"enrage\")\n\t\telse\n\t\t\twarnEnrage:Show(args.destName)\n\t\tend\n\t\ttimerEnrage:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 28371 then\n\t\ttimerEnrage:Stop()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 29685 then\n\t\twarnTerrifyingRoar:Show()\n\t\twarnTerrifyingRoarSoon:Schedule(15)\n\t\ttimerTerrifyingRoarCD:Start()\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, _, _, _, spellId)\n\tif (spellId == 28375 or spellId == 54426) and self:AntiSpam(20) then\n\t\twarnDecimateNow:Show()\n\t\ttimerDecimate:Start()\n\t\twarnDecimateSoon:Schedule(95)\n\tend\nend\n"
  },
  {
    "path": "DBM-VanillaNaxx/ConstructQuarter/Grobbulus.lua",
    "content": "local mod\t= DBM:NewMod(\"Grobbulus-Vanilla\", \"DBM-VanillaNaxx\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20240714121055\")\nmod:SetCreatureID(15931)\nmod:SetUsedIcons(1, 2, 3, 4)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 28169\",\n\t\"SPELL_AURA_REMOVED 28169\",\n\t\"SPELL_CAST_SUCCESS 28240 28157 54364\"\n)\n\nlocal warnInjection\t\t\t= mod:NewTargetNoFilterAnnounce(28169, 2)\nlocal warnCloud\t\t\t\t= mod:NewSpellAnnounce(28240, 2)\nlocal warnSlimeSprayNow\t\t= mod:NewSpellAnnounce(54364, 2)\nlocal warnSlimeSpraySoon\t= mod:NewSoonAnnounce(54364, 1)\n\nlocal specWarnInjection\t\t= mod:NewSpecialWarningYou(28169, nil, nil, nil, 1, 2)\nlocal yellInjection\t\t\t= mod:NewYellMe(28169, nil, false)\n\nlocal timerInjection\t\t= mod:NewTargetTimer(10, 28169, nil, nil, nil, 3)\nlocal timerCloud\t\t\t= mod:NewNextTimer(15, 28240, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerSlimeSprayCD\t\t= mod:NewCDTimer(27, 54364, nil, nil, nil, 2) -- 5s variance [27.09-32.60] (Onyxia PTR: [2024-07-08]@[18:49:31] || [2024-07-13]@[13:26:41]) - \"Slime Spray-28157-npc:15931-797 = pull:32.60, 28.40, 59.54, 32.22, 64.35\" || \"Slime Spray-28157-npc:15931-797 = pull:27.09\"\nlocal enrageTimer\t\t\t= mod:NewBerserkTimer(720)\n\nmod:AddSetIconOption(\"SetIconOnInjectionTarget\", 28169, false, false, {1, 2, 3, 4})\n\nmod.vb.slimeSprays = 1\nlocal mutateIcons = {}\n\nlocal function addIcon(self)\n\tfor i,j in ipairs(mutateIcons) do\n\t\tlocal icon = 0 + i\n\t\tself:SetIcon(j, icon)\n\tend\nend\n\nlocal function removeIcon(self, target)\n\tfor i,j in ipairs(mutateIcons) do\n\t\tif j == target then\n\t\t\ttable.remove(mutateIcons, i)\n\t\t\tself:SetIcon(target, 0)\n\t\tend\n\tend\n\taddIcon(self)\nend\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.slimeSprays = 1\n\ttable.wipe(mutateIcons)\n\tenrageTimer:Start(-delay)\n\twarnSlimeSpraySoon:Schedule(23)\n\ttimerSlimeSprayCD:Start()\nend\n\nfunction mod:OnCombatEnd()\n\tfor _, j in ipairs(mutateIcons) do\n\t\tself:SetIcon(j, 0)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 28169 then\n\t\twarnInjection:Show(args.destName)\n\t\ttimerInjection:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnInjection:Show()\n\t\t\tspecWarnInjection:Play(\"runout\")\n\t\t\tyellInjection:Yell()\n\t\tend\n\t\tif self.Options.SetIconOnInjectionTarget then\n\t\t\ttable.insert(mutateIcons, args.destName)\n\t\t\taddIcon(self)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 28169 then\n\t\ttimerInjection:Cancel(args.destName)--Cancel timer if someone is dumb and dispels it.\n\t\tif self.Options.SetIconOnInjectionTarget then\n\t\t\tremoveIcon(self, args.destName)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 28240 then\n\t\twarnCloud:Show()\n\t\ttimerCloud:Start()\n\telseif args:IsSpellID(28157, 54364) then\n\t\twarnSlimeSprayNow:Show()\n\t\tself.vb.slimeSprays = self.vb.slimeSprays + 1\n\t\tif self.vb.slimeSprays % 2 == 0 then -- every 2/4/6... spray short cd\n\t\t\twarnSlimeSpraySoon:Schedule(23.4)\n\t\t\ttimerSlimeSprayCD:Start(28.4)\n\t\telse -- every 3/5/7... spray long cd\n\t\t\twarnSlimeSpraySoon:Schedule(54.5)\n\t\t\ttimerSlimeSprayCD:Start(59.5)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-VanillaNaxx/ConstructQuarter/Patchwerk.lua",
    "content": "local mod\t= DBM:NewMod(\"Patchwerk-Vanilla\", \"DBM-VanillaNaxx\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20240701222429\")\nmod:SetCreatureID(16028)\n\nmod:RegisterCombat(\"combat_yell\", L.yell1, L.yell2)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_DAMAGE 28308 59192\",\n\t\"SPELL_MISSED 28308 59192\"\n)\n\nlocal enrageTimer\t= mod:NewBerserkTimer(360)\n\nmod:AddBoolOption(\"WarningHateful\", false, \"announce\", nil, nil, nil, 28308)\n\nlocal function announceStrike(target, damage)\n\tSendChatMessage(L.HatefulStrike:format(target, damage), \"RAID\")\nend\n\nfunction mod:OnCombatStart(delay)\n\tenrageTimer:Start(-delay)\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, _, destName, _, spellId, _, _, amount)\n\tif (spellId == 28308 or spellId == 59192) and self.Options.WarningHateful and DBM:GetRaidRank() >= 1 then\n\t\tannounceStrike(destName, amount or 0)\n\tend\nend\n\nfunction mod:SPELL_MISSED(_, _, _, _, destName, _, spellId, _, _, missType)\n\tif (spellId == 28308 or spellId == 59192) and self.Options.WarningHateful and DBM:GetRaidRank() >= 1 then\n\t\tannounceStrike(destName, getglobal(\"ACTION_SPELL_MISSED_\"..(missType)) or \"\")\n\tend\nend\n"
  },
  {
    "path": "DBM-VanillaNaxx/ConstructQuarter/Textures/lgpl.txt",
    "content": "\t\t   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\n  This version of the GNU Lesser General Public License incorporates\nthe terms and conditions of version 3 of the GNU General Public\nLicense, supplemented by the additional permissions listed below.\n\n  0. Additional Definitions.\n\n  As used herein, \"this License\" refers to version 3 of the GNU Lesser\nGeneral Public License, and the \"GNU GPL\" refers to version 3 of the GNU\nGeneral Public License.\n\n  \"The Library\" refers to a covered work governed by this License,\nother than an Application or a Combined Work as defined below.\n\n  An \"Application\" is any work that makes use of an interface provided\nby the Library, but which is not otherwise based on the Library.\nDefining a subclass of a class defined by the Library is deemed a mode\nof using an interface provided by the Library.\n\n  A \"Combined Work\" is a work produced by combining or linking an\nApplication with the Library.  The particular version of the Library\nwith which the Combined Work was made is also called the \"Linked\nVersion\".\n\n  The \"Minimal Corresponding Source\" for a Combined Work means the\nCorresponding Source for the Combined Work, excluding any source code\nfor portions of the Combined Work that, considered in isolation, are\nbased on the Application, and not on the Linked Version.\n\n  The \"Corresponding Application Code\" for a Combined Work means the\nobject code and/or source code for the Application, including any data\nand utility programs needed for reproducing the Combined Work from the\nApplication, but excluding the System Libraries of the Combined Work.\n\n  1. Exception to Section 3 of the GNU GPL.\n\n  You may convey a covered work under sections 3 and 4 of this License\nwithout being bound by section 3 of the GNU GPL.\n\n  2. Conveying Modified Versions.\n\n  If you modify a copy of the Library, and, in your modifications, a\nfacility refers to a function or data to be supplied by an Application\nthat uses the facility (other than as an argument passed when the\nfacility is invoked), then you may convey a copy of the modified\nversion:\n\n   a) under this License, provided that you make a good faith effort to\n   ensure that, in the event an Application does not supply the\n   function or data, the facility still operates, and performs\n   whatever part of its purpose remains meaningful, or\n\n   b) under the GNU GPL, with none of the additional permissions of\n   this License applicable to that copy.\n\n  3. Object Code Incorporating Material from Library Header Files.\n\n  The object code form of an Application may incorporate material from\na header file that is part of the Library.  You may convey such object\ncode under terms of your choice, provided that, if the incorporated\nmaterial is not limited to numerical parameters, data structure\nlayouts and accessors, or small macros, inline functions and templates\n(ten or fewer lines in length), you do both of the following:\n\n   a) Give prominent notice with each copy of the object code that the\n   Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the object code with a copy of the GNU GPL and this license\n   document.\n\n  4. Combined Works.\n\n  You may convey a Combined Work under terms of your choice that,\ntaken together, effectively do not restrict modification of the\nportions of the Library contained in the Combined Work and reverse\nengineering for debugging such modifications, if you also do each of\nthe following:\n\n   a) Give prominent notice with each copy of the Combined Work that\n   the Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the Combined Work with a copy of the GNU GPL and this license\n   document.\n\n   c) For a Combined Work that displays copyright notices during\n   execution, include the copyright notice for the Library among\n   these notices, as well as a reference directing the user to the\n   copies of the GNU GPL and this license document.\n\n   d) Do one of the following:\n\n       0) Convey the Minimal Corresponding Source under the terms of this\n       License, and the Corresponding Application Code in a form\n       suitable for, and under terms that permit, the user to\n       recombine or relink the Application with a modified version of\n       the Linked Version to produce a modified Combined Work, in the\n       manner specified by section 6 of the GNU GPL for conveying\n       Corresponding Source.\n\n       1) Use a suitable shared library mechanism for linking with the\n       Library.  A suitable mechanism is one that (a) uses at run time\n       a copy of the Library already present on the user's computer\n       system, and (b) will operate properly with a modified version\n       of the Library that is interface-compatible with the Linked\n       Version.\n\n   e) Provide Installation Information, but only if you would otherwise\n   be required to provide such information under section 6 of the\n   GNU GPL, and only to the extent that such information is\n   necessary to install and execute a modified version of the\n   Combined Work produced by recombining or relinking the\n   Application with a modified version of the Linked Version. (If\n   you use option 4d0, the Installation Information must accompany\n   the Minimal Corresponding Source and Corresponding Application\n   Code. If you use option 4d1, you must provide the Installation\n   Information in the manner specified by section 6 of the GNU GPL\n   for conveying Corresponding Source.)\n\n  5. Combined Libraries.\n\n  You may place library facilities that are a work based on the\nLibrary side by side in a single library together with other library\nfacilities that are not Applications and are not covered by this\nLicense, and convey such a combined library under terms of your\nchoice, if you do both of the following:\n\n   a) Accompany the combined library with a copy of the same work based\n   on the Library, uncombined with any other library facilities,\n   conveyed under the terms of this License.\n\n   b) Give prominent notice with the combined library that part of it\n   is a work based on the Library, and explaining where to find the\n   accompanying uncombined form of the same work.\n\n  6. Revised Versions of the GNU Lesser General Public License.\n\n  The Free Software Foundation may publish revised and/or new versions\nof the GNU Lesser General Public License from time to time. Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.\n\n  Each version is given a distinguishing version number. If the\nLibrary as you received it specifies that a certain numbered version\nof the GNU Lesser General Public License \"or any later version\"\napplies to it, you have the option of following the terms and\nconditions either of that published version or of any later version\npublished by the Free Software Foundation. If the Library as you\nreceived it does not specify a version number of the GNU Lesser\nGeneral Public License, you may choose any version of the GNU Lesser\nGeneral Public License ever published by the Free Software Foundation.\n\n  If the Library as you received it specifies that a proxy can decide\nwhether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is\npermanent authorization for you to choose that version for the\nLibrary.\n"
  },
  {
    "path": "DBM-VanillaNaxx/ConstructQuarter/Thaddius.lua",
    "content": "-- this file uses the texture Textures/arrow.tga. This image was created by Everaldo Coelho and is licensed under the GNU Lesser General Public License. See Textures/lgpl.txt.\nlocal mod\t= DBM:NewMod(\"Thaddius-Vanilla\", \"DBM-VanillaNaxx\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20240801122112\")\nmod:SetCreatureID(15928)\n\nmod:RegisterCombat(\"combat_yell\", L.Yell)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 28089\",\n\t\"CHAT_MSG_MONSTER_EMOTE\",\n\t\"INSTANCE_ENCOUNTER_ENGAGE_UNIT\",\n\t\"UNIT_AURA player\"\n)\n\nlocal warnShiftSoon\t\t\t= mod:NewPreWarnAnnounce(28089, 5, 3)\nlocal warnShiftCasting\t\t= mod:NewCastAnnounce(28089, 4)\n--local warnThrow\t\t\t\t= mod:NewSpellAnnounce(28338, 2)\nlocal warnThrowSoon\t\t\t= mod:NewSoonAnnounce(28338, 1)\n\nlocal warnChargeChanged\t\t= mod:NewSpecialWarning(\"WarningChargeChanged\", nil, nil, nil, 3, 2, nil, nil, 28089)\nlocal warnChargeNotChanged\t= mod:NewSpecialWarning(\"WarningChargeNotChanged\", false, nil, nil, 1, 12, nil, nil, 28089)\nlocal yellShift\t\t\t\t= mod:NewShortPosYell(28089, DBM_CORE_L.AUTO_YELL_CUSTOM_POSITION)\n\nlocal enrageTimer\t\t\t= mod:NewBerserkTimer(365)\nlocal timerNextShift\t\t= mod:NewNextTimer(30, 28089, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON)\nlocal timerShiftCast\t\t= mod:NewCastTimer(3, 28089, nil, nil, nil, 2)\nlocal timerThrow\t\t\t= mod:NewNextTimer(20.6, 28338, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nif not DBM.Options.GroupOptionsBySpell then\n\tmod:AddMiscLine(DBM_CORE_L.OPTION_CATEGORY_DROPDOWNS)\nend\nmod:AddDropdownOption(\"ArrowsEnabled\", {\"Never\", \"TwoCamp\", \"ArrowsRightLeft\", \"ArrowsInverse\"}, \"Never\", \"misc\", nil, 28089) --not grouping to prevent padding issue (aggravated with ElvUI) and ungrouped dropdown line workaround\n\nmod:SetBossHealthInfo(\n\t15930, L.Boss1,\n\t15929, L.Boss2\n)\n\nlocal currentCharge\nlocal down = 0\n\nlocal function TankThrow(self)\n\tif not self:IsInCombat() or self.vb.phase == 2 then\n\t\tDBM.BossHealth:Hide()\n\t\treturn\n\tend\n\ttimerThrow:Start()\n\twarnThrowSoon:Schedule(17.6)\n\tself:Schedule(20.6, TankThrow, self)\nend\n\nlocal function StartPhase2(self)\n\tself:SetStage(2)\n\tself:Unschedule(TankThrow)\n\ttimerThrow:Cancel()\n\twarnThrowSoon:Cancel()\n\tDBM.BossHealth:Hide()\n\ttimerNextShift:Start(14.5) -- IEEU - U_S_S: [2024-07-13]@[13:33:37] - 14.5s\n\twarnShiftSoon:Schedule(9.5)\n\tenrageTimer:Start()\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tcurrentCharge = nil\n\tdown = 0\n\tself:Schedule(20.6-delay, TankThrow, self)\n\ttimerThrow:Start(-delay)\n\twarnThrowSoon:Schedule(17.6-delay)\nend\n\ndo\n\tlocal lastShift\n\tfunction mod:SPELL_CAST_START(args)\n\t\tif args.spellId == 28089 then\n\t\t\ttimerNextShift:Start()\n\t\t\ttimerShiftCast:Start()\n\t\t\twarnShiftCasting:Show()\n\t\t\twarnShiftSoon:Schedule(25)\n\t\t\tlastShift = GetTime()\n\t\tend\n\tend\n\n\tfunction mod:UNIT_AURA()\n\t\tif self.vb.phase ~= 2 or not lastShift or (GetTime() - lastShift) < 3 then return end\n\t\tlocal charge\n\t\tlocal i = 1\n\t\twhile UnitDebuff(\"player\", i) do\n\t\t\tlocal _, _, icon, count = UnitDebuff(\"player\", i)\n\t\t\tif icon == \"Interface\\\\Icons\\\\Spell_ChargeNegative\" then\n\t\t\t\tif count > 1 then return end --Incorrect aura, it's stacking damage one\n\t\t\t\tcharge = L.Charge1\n\t\t\t\tyellShift:Yell(7, \"- -\")\n\t\t\telseif icon == \"Interface\\\\Icons\\\\Spell_ChargePositive\" then\n\t\t\t\tif count > 1 then return end --Incorrect aura, it's stacking damage one\n\t\t\t\tcharge = L.Charge2\n\t\t\t\tyellShift:Yell(6, \"+ +\")\n\t\t\tend\n\t\t\ti = i + 1\n\t\tend\n\t\tif charge then\n\t\t\tlastShift = nil\n\t\t\tif charge == currentCharge then\n\t\t\t\twarnChargeNotChanged:Show()\n\t\t\t\twarnChargeNotChanged:Play(\"dontmove\")\n\t\t\t\tif self.Options.ArrowsEnabled == \"ArrowsInverse\" then\n\t\t\t\t\tself:ShowLeftArrow()\n\t\t\t\telseif self.Options.ArrowsEnabled == \"ArrowsRightLeft\" then\n\t\t\t\t\tself:ShowRightArrow()\n\t\t\t\tend\n\t\t\telse\n\t\t\t\twarnChargeChanged:Show(charge)\n\t\t\t\twarnChargeChanged:Play(\"stilldanger\")\n\t\t\t\tif self.Options.ArrowsEnabled == \"ArrowsInverse\" then\n\t\t\t\t\tself:ShowRightArrow()\n\t\t\t\telseif self.Options.ArrowsEnabled == \"ArrowsRightLeft\" then\n\t\t\t\t\tself:ShowLeftArrow()\n\t\t\t\telseif self.Options.ArrowsEnabled == \"TwoCamp\" then\n\t\t\t\t\tself:ShowUpArrow()\n\t\t\t\tend\n\t\t\tend\n\t\t\tcurrentCharge = charge\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_EMOTE(msg)\n\tif msg:match(L.Emote) or msg:match(L.Emote2) or msg:find(L.Emote) or msg:find(L.Emote2) or msg == L.Emote or msg == L.Emote2 then\n\t\tdown = down + 1\n\t\tif down >= 2 then\n\t\t\tself:Unschedule(TankThrow)\n\t\t\ttimerThrow:Cancel()\n\t\t\twarnThrowSoon:Cancel()\n\t\t\tDBM.BossHealth:Hide()\n--\t\t\tenrageTimer:Start()\n\t\tend\n\tend\nend\n\nfunction mod:INSTANCE_ENCOUNTER_ENGAGE_UNIT()\n\tif UnitExists(\"boss1\") and self:GetUnitCreatureId(\"boss1\") == 15928 then\n\t\tStartPhase2(self)\n\tend\nend\n\nlocal function arrowOnUpdate(self, elapsed)\n\tself.elapsed = (self.elapsed or 0) + elapsed\n\tif self.elapsed >= 3.5 and self.elapsed < 4.5 then\n\t\tself:SetAlpha(4.5 - self.elapsed)\n\telseif self.elapsed >= 4.5 then\n\t\tself:Hide()\n\tend\nend\n\nlocal function arrowOnShow(self)\n\tself.elapsed = 0\n\tself:SetAlpha(1)\nend\n\nlocal arrowLeft = CreateFrame(\"Frame\", nil, UIParent)\narrowLeft:Hide()\nlocal arrowLeftTexture = arrowLeft:CreateTexture(nil, \"BACKGROUND\")\narrowLeftTexture:SetTexture(\"Interface\\\\AddOns\\\\DBM-Naxx\\\\ConstructQuarter\\\\Textures\\\\arrow\")\narrowLeftTexture:SetPoint(\"CENTER\", arrowLeft, \"CENTER\")\narrowLeft:SetHeight(1)\narrowLeft:SetWidth(1)\narrowLeft:SetPoint(\"CENTER\", UIParent, \"CENTER\", -150, -30)\narrowLeft:SetScript(\"OnShow\", arrowOnShow)\narrowLeft:SetScript(\"OnUpdate\", arrowOnUpdate)\n\nlocal arrowRight = CreateFrame(\"Frame\", nil, UIParent)\narrowRight:Hide()\nlocal arrowRightTexture = arrowRight:CreateTexture(nil, \"BACKGROUND\")\narrowRightTexture:SetTexture(\"Interface\\\\AddOns\\\\DBM-Naxx\\\\ConstructQuarter\\\\Textures\\\\arrow\")\narrowRightTexture:SetPoint(\"CENTER\", arrowRight, \"CENTER\")\narrowRightTexture:SetTexCoord(1, 0, 0, 1)\narrowRight:SetHeight(1)\narrowRight:SetWidth(1)\narrowRight:SetPoint(\"CENTER\", UIParent, \"CENTER\", 150, -30)\narrowRight:SetScript(\"OnShow\", arrowOnShow)\narrowRight:SetScript(\"OnUpdate\", arrowOnUpdate)\n\nlocal arrowUp = CreateFrame(\"Frame\", nil, UIParent)\narrowUp:Hide()\nlocal arrowUpTexture = arrowUp:CreateTexture(nil, \"BACKGROUND\")\narrowUpTexture:SetTexture(\"Interface\\\\AddOns\\\\DBM-Naxx\\\\ConstructQuarter\\\\Textures\\\\arrow\")\narrowUpTexture:SetRotation(math.pi * 3 / 2)\narrowUpTexture:SetPoint(\"CENTER\", arrowUp, \"CENTER\")\narrowUp:SetHeight(1)\narrowUp:SetWidth(1)\narrowUp:SetPoint(\"CENTER\", UIParent, \"CENTER\", 0, 40)\narrowUp:SetScript(\"OnShow\", arrowOnShow)\narrowUp:SetScript(\"OnUpdate\", arrowOnUpdate)\n\nfunction mod:ShowRightArrow()\n\tarrowRight:Show()\nend\n\nfunction mod:ShowLeftArrow()\n\tarrowLeft:Show()\nend\n\nfunction mod:ShowUpArrow()\n\tarrowUp:Show()\nend\n"
  },
  {
    "path": "DBM-VanillaNaxx/DBM-VanillaNaxx.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Naxxramas (Vanilla)|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Naxxramas (Vanilla)|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Наксрамас (классический)|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0納克薩瑪斯 (Vanilla)|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0纳克萨玛斯 (Vanilla)|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0낙스라마스 (클래식)|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Naxxramas (Clásico)|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Naxxramas (Clásico)|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMVanillaNaxx_AllSavedVars\n## SavedVariablesPerCharacter: DBMVanillaNaxx_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: CLASSIC\n## X-DBM-StatTypes: normal\n## X-DBM-Mod-SubCategories: Arachnid Quarter,Construct Quarter,Plague Quarter,Military Quarter,Frostwyrm Lair\n## X-DBM-Mod-SubCategories-deDE: Das Arachnidenviertel,Das Konstruktviertel,Das Seuchenviertel,Das Militärviertel,Frostwyrmhort\n## X-DBM-Mod-SubCategories-ruRU: Паучий квартал,Квартал Мерзости,Чумной квартал,Военный квартал,Логово ледяного змея\n## X-DBM-Mod-SubCategories-zhTW: 蜘蛛區,傀儡區,瘟疫區,軍事區,冰霜巨龍巢穴\n## X-DBM-Mod-SubCategories-zhCN: 蜘蛛区,构造区,瘟疫区,军事区,冰霜巨龙的巢穴\n## X-DBM-Mod-SubCategories-koKR: 거미 지구,피조물 지구,역병 지구,군사 지구,서리고룡 둥지\n## X-DBM-Mod-SubCategories-frFR: Quartier des Arachnides,Quartier des Assemblages,Quartier de la Peste,Quartier Militaire,Aile de glace\n## X-DBM-Mod-SubCategories-esES: El Arrabal Arácnido,El Arrabal de los Ensamblajes,El Arrabal de la Peste,El Arrabal Militar,Guarida Helada\n## X-DBM-Mod-SubCategories-esMX: El Arrabal Arácnido,El Arrabal de los Ensamblajes,El Arrabal de la Peste,El Arrabal Militar,Guarida Helada\n## X-DBM-Mod-Name: Naxxramas (Vanilla)\n## X-DBM-Mod-Name-deDE: Naxxramas (Vanilla)\n## X-DBM-Mod-Name-ruRU: Наксрамас (Vanilla)\n## X-DBM-Mod-Name-zhTW: 納克薩瑪斯 (Vanilla)\n## X-DBM-Mod-Name-zhCN: 纳克萨玛斯 (Vanilla)\n## X-DBM-Mod-Name-koKR: 낙스라마스 (클래식)\n## X-DBM-Mod-Name-esES: Naxxramas (Clásico)\n## X-DBM-Mod-Name-esMX: Naxxramas (Clásico)\n## X-DBM-Mod-Sort: 6\n## X-DBM-Mod-MapID: 536\n## X-DBM-Mod-LoadRealm: Onyxia_old, Vanilla Naxxamas PTR\n## X-DBM-Mod-LoadZone: Naxxramas\n## X-DBM-Mod-LoadZone-zhCN: 纳克萨玛斯\n## X-DBM-Mod-LoadZone-ruRU: Наксрамас\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.fr.lua\nlocalization.ru.lua\nlocalization.tw.lua\nlocalization.kr.lua\nlocalization.es.lua\nlocalization.mx.lua\nlocalization.cn.lua\n\nArachnidQuarter\\Anub'Rekhan.lua\nArachnidQuarter\\Faerlina.lua\nArachnidQuarter\\Maexxna.lua\n\nConstructQuarter\\Patchwerk.lua\nConstructQuarter\\Grobbulus.lua\nConstructQuarter\\Gluth.lua\nConstructQuarter\\Thaddius.lua\n\nPlagueQuarter\\Noth.lua\nPlagueQuarter\\Heigan.lua\nPlagueQuarter\\Loatheb.lua\n\nMilitaryQuarter\\Razuvious.lua\nMilitaryQuarter\\Gothik.lua\nMilitaryQuarter\\Horsemen.lua\n\nFrostwyrmLair\\Sapphiron.lua\nFrostwyrmLair\\Kel'Thuzad.lua\n"
  },
  {
    "path": "DBM-VanillaNaxx/FrostwyrmLair/Kel'Thuzad.lua",
    "content": "local mod\t= DBM:NewMod(\"Kel'Thuzad-Vanilla\", \"DBM-VanillaNaxx\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal select, tContains = select, tContains\nlocal PickupInventoryItem, PutItemInBackpack, UseEquipmentSet, CancelUnitBuff = PickupInventoryItem, PutItemInBackpack, UseEquipmentSet, CancelUnitBuff\nlocal UnitClass = UnitClass\n\nmod:SetRevision(\"20240820230038\")\nmod:SetCreatureID(15990)\nmod:SetModelID(\"creature/lich/lich.m2\")\nmod:SetMinCombatTime(60)\nmod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7, 8)\n\nmod:RegisterCombat(\"combat_yell\", L.Yell)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 27808 27819 28410\",\n\t\"SPELL_AURA_REMOVED 28410\",\n\t\"SPELL_CAST_SUCCESS 27810 27819 27808 28410\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"UNIT_HEALTH boss1\"\n)\n\nlocal specWarnWeapons\t\t= mod:NewSpecialWarning(\"WeaponsStatus\", false)\n\nlocal warnAddsSoon\t\t\t= mod:NewAnnounce(\"warnAddsSoon\", 1, \"Interface\\\\Icons\\\\INV_Misc_MonsterSpiderCarapace_01\")\nlocal warnPhase2\t\t\t= mod:NewPhaseAnnounce(2, 3)\nlocal warnBlastTargets\t\t= mod:NewTargetAnnounce(27808, 2)\nlocal warnFissure\t\t\t= mod:NewTargetNoFilterAnnounce(27810, 4)\nlocal warnMana\t\t\t\t= mod:NewTargetAnnounce(27819, 2)\nlocal warnChainsTargets\t\t= mod:NewTargetNoFilterAnnounce(28410, 4)\nlocal warnMindControlSoon\t= mod:NewSoonAnnounce(28410, 4)\nlocal warnPhase3\t\t\t= mod:NewPhaseAnnounce(3, 3)\n\nlocal specwarnP2Soon\t\t= mod:NewSpecialWarning(\"specwarnP2Soon\")\nlocal specWarnManaBomb\t\t= mod:NewSpecialWarningMoveAway(27819, nil, nil, nil, 1, 2)\nlocal specWarnManaBombNear\t= mod:NewSpecialWarningClose(27819, nil, nil, nil, 1, 2)\nlocal yellManaBomb\t\t\t= mod:NewShortYell(27819)\nlocal specWarnBlast\t\t\t= mod:NewSpecialWarningTarget(27808, \"Healer\", nil, nil, 1, 2)\nlocal specWarnFissureYou\t= mod:NewSpecialWarningYou(27810, nil, nil, nil, 3, 2)\nlocal specWarnFissureClose\t= mod:NewSpecialWarningClose(27810, nil, nil, nil, 2, 8)\nlocal yellFissure\t\t\t= mod:NewYellMe(27810)\nlocal specWarnAddsGuardians\t= mod:NewSpecialWarningAdds(29897, \"-Healer\", nil, nil, 1, 2) -- \"Guardians of Icecrown. There's no spellID for this, so used something close: Guardians of Icecrown Passive\"\n\nlocal blastTimer\t\t\t= mod:NewBuffActiveTimer(4, 27808, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON)\nlocal timerManaBomb\t\t\t= mod:NewCDTimer(20, 27819, nil, nil, nil, 3) -- \"Detonate Mana-27819-npc:15990-3 = pull:331.16/[Stage 1/0.00, Stage 2/310.52] 20.64/331.16, 19.99, 20.00, 20.91, 20.02, 20.00, 20.15\"\nlocal timerFrostBlast\t\t= mod:NewCDTimer(30, 27808, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)--40-46 (retail 40.1)\nlocal timerFissure\t\t\t= mod:NewTargetTimer(5, 27810, nil, nil, 2, 3)\nlocal timerFissureCD \t\t= mod:NewCDTimer(10, 27810, nil, nil, nil, 3) -- ~1s variance [9.99-11.13]. (Onyxia PTR: [2024-07-13]@[15:18:40]) - \"Shadow Fissure-27810-npc:15990-3 = pull:320.05/[Stage 1/0.00, Stage 2/310.52] 9.53/320.05, 11.13, 9.99, 10.03, 9.99, 10.03, 10.01, 10.85, 10.99, 10.03, 9.99, 10.05, 10.01, 10.03\"\nlocal timerMC\t\t\t\t= mod:NewBuffActiveTimer(20, 28410, nil, nil, nil, 3)\nlocal timerMCCD\t\t\t\t= mod:NewCDTimer(60, 28410, nil, nil, nil, 3) -- (Onyxia: [2024-07-29]@[21:53:38]) - \"Chains of Kel'Thuzad-28410-npc:15990-3 = pull:276.01/[Stage 1/0.00, Stage 2/246.00] 30.01/276.01, 60.00, Stage 3/5.94, 54.08/60.02\"\nlocal timerPhase2\t\t\t= mod:NewTimer(246, \"TimerPhase2\", nil, nil, nil, 6) -- YELL-YELL. P2 script starts on Yell or Emote, and IEEU fires 0.55s after. (Onyxia PTR: [2024-07-13]@[15:18:40] ||| Onyxia: [2024-07-29]@[21:17:18] || [2024-07-29]@[20:49:47] || [2024-07-29]@[21:53:38] || [2024-07-29]@[21:03:10]) - 310 ||| 245.98 || 245.99 || 246.00 || 245.96\n\nmod:AddRangeFrameOption(12, 27819)\nmod:AddSetIconOption(\"SetIconOnMC\", 28410, true, false, {1, 2, 3})\nmod:AddSetIconOption(\"SetIconOnManaBomb\", 27819, false, false, {8})\nmod:AddSetIconOption(\"SetIconOnFrostTomb\", 27808, true, false, {1, 2, 3, 4, 5, 6, 7, 8})\nmod:AddDropdownOption(\"RemoveBuffsOnMC\", {\"Never\", \"Gift\", \"CCFree\", \"ShortOffensiveProcs\", \"MostOffensiveBuffs\"}, \"Never\", \"misc\", nil, 28410)\n\nmod.vb.warnedAdds = false\nmod.vb.MCIcon = 1\nlocal frostBlastTargets = {}\nlocal chainsTargets = {}\n\nlocal playerClass = select(2, UnitClass(\"player\"))\nlocal isHunter = playerClass == \"HUNTER\"\n\nlocal RaidWarningFrame = RaidWarningFrame\nlocal GetFramesRegisteredForEvent, RaidNotice_AddMessage = GetFramesRegisteredForEvent, RaidNotice_AddMessage\nlocal function selfWarnMissingSet()\n\tif (mod.Options.EqUneqWeaponsKT or mod.Options.EqUneqWeaponsKT2) and not mod:IsEquipmentSetAvailable(\"pve\") then\n\t\tfor i = 1, select(\"#\", GetFramesRegisteredForEvent(\"CHAT_MSG_RAID_WARNING\")) do\n\t\t\tlocal frame = select(i, GetFramesRegisteredForEvent(\"CHAT_MSG_RAID_WARNING\"))\n\t\t\tif frame.AddMessage then\n\t\t\t\tframe.AddMessage(frame, L.setMissing)\n\t\t\tend\n\t\tend\n\t\tRaidNotice_AddMessage(RaidWarningFrame, L.setMissing, ChatTypeInfo[\"RAID_WARNING\"])\n\tend\nend\n\nmod:AddMiscLine(L.EqUneqLineDescription)\nmod:AddBoolOption(\"EqUneqWeaponsKT\", false) -- automation by timer\nmod:AddBoolOption(\"EqUneqWeaponsKT2\", mod:IsDps(), nil, selfWarnMissingSet) -- automation by event\nmod:AddDropdownOption(\"EqUneqFilter\", {\"OnlyDPS\", \"DPSTank\", \"NoFilter\"}, \"OnlyDPS\", \"misc\")\n\nlocal function selfSchedWarnMissingSet(self)\n\tif (self.Options.EqUneqWeaponsKT or self.Options.EqUneqWeaponsKT2) and not self:IsEquipmentSetAvailable(\"pve\") then\n\t\tfor i = 1, select(\"#\", GetFramesRegisteredForEvent(\"CHAT_MSG_RAID_WARNING\")) do\n\t\t\tlocal frame = select(i, GetFramesRegisteredForEvent(\"CHAT_MSG_RAID_WARNING\"))\n\t\t\tif frame.AddMessage then\n\t\t\t\tself:Schedule(10, frame.AddMessage, frame, L.setMissing)\n\t\t\tend\n\t\tend\n\t\tself:Schedule(10, RaidNotice_AddMessage, RaidWarningFrame, L.setMissing, ChatTypeInfo[\"RAID_WARNING\"])\n\tend\nend\nmod:Schedule(0.5, selfSchedWarnMissingSet, mod) -- mod options default values were being read before SV ones, so delay this\n\nlocal function checkWeaponRemovalSetting(self)\n\tif (not self.Options.EqUneqWeaponsKT and not self.Options.EqUneqWeaponsKT2) then return false end\n\n\tlocal removalOption = self.Options.EqUneqFilter\n\tif removalOption == \"OnlyDPS\" and self:IsDps() then return true\n\telseif removalOption == \"DPSTank\" and not self:IsHealer() then return true\n\telseif removalOption == \"NoFilter\" then return true\n\tend\n\treturn false\nend\n\nlocal function UnWKT(self)\n\tif self:IsEquipmentSetAvailable(\"pve\") then\n\t\tPickupInventoryItem(16)\n\t\tPutItemInBackpack()\n\t\tPickupInventoryItem(17)\n\t\tPutItemInBackpack()\n\t\tDBM:Debug(\"MH and OH unequipped\", 2)\n\t\tif isHunter then\n\t\t\tPickupInventoryItem(18)\n\t\t\tPutItemInBackpack()\n\t\t\tDBM:Debug(\"Ranged unequipped\", 2)\n\t\tend\n\tend\nend\n\nlocal function EqWKT(self)\n\tif self:IsEquipmentSetAvailable(\"pve\") then\n\t\tDBM:Debug(\"trying to equip pve\")\n\t\tUseEquipmentSet(\"pve\")\n\t\tif not self:IsTank() then\n\t\t\tCancelUnitBuff(\"player\", (GetSpellInfo(25780))) -- Righteous Fury\n\t\tend\n\tend\nend\n\nlocal aurastoRemove = { -- ordered by aggressiveness {degree, classFilter}\n\t-- 1 (Gift)\n\t[48469] = {1, nil}, -- Mark of the Wild\n\t[48470] = {1, nil}, -- Gift of the Wild\n\t[69381] = {1, nil}, -- Drums of the Wild\n\t-- 2 (CCFree)\n\t[48169] = {2, nil}, -- Shadow Protection\n\t[48170] = {2, nil}, -- Prayer of Shadow Protection\n\t-- 3 (ShortOffensiveProcs)\n\t[13877] = {3, \"ROGUE\"}, -- Blade Flurry (Combat Rogue)\n\t[70721] = {3, \"DRUID\"}, -- Omen of Doom (Balance Druid)\n\t[48393] = {3, \"DRUID\"}, -- Owlkin Frenzy (Balance Druid)\n\t[53201] = {3, \"DRUID\"}, -- Starfall (Balance Druid)\n\t[50213] = {3, \"DRUID\"}, -- Tiger's Fury (Feral Druid)\n\t[31572] = {3, \"MAGE\"}, -- Arcane Potency (Arcane Mage)\n\t[54490] = {3, \"MAGE\"}, -- Missile Barrage (Arcane Mage)\n\t[48108] = {3, \"MAGE\"}, -- Hot Streak (Fire Mage)\n\t[71165] = {3, \"WARLOCK\"}, -- Molten Core (Warlock)\n\t[63167] = {3, \"WARLOCK\"}, -- Decimation (Warlock)\n\t[70840] = {3, \"WARLOCK\"}, -- Devious Minds (Warlock)\n\t[17941] = {3, \"WARLOCK\"}, -- Shadow Trance (Warlock)\n\t[47197] = {3, \"WARLOCK\"}, -- Eradication (Affliction Warlock)\n\t[34939] = {3, \"WARLOCK\"}, -- Backlash (Destruction Warlock)\n\t[47260] = {3, \"WARLOCK\"}, -- Backdraft (Destruction Warlock)\n\t[16246] = {3, \"SHAMAN\"}, -- Clearcasting (Elemental Shaman)\n\t[64701] = {3, \"SHAMAN\"}, -- Elemental Mastery (Elemental Shaman)\n\t[26297] = {3, nil}, -- Berserking (Troll racial)\n\t[54758] = {3, nil}, -- Hyperspeed Acceleration (Hands engi enchant)\n\t[59626] = {3, nil}, -- Black Magic (Weapon enchant)\n\t[72416] = {3, nil}, -- Frostforged Sage (ICC Rep ring)\n\t[64713] = {3, nil}, -- Flame of the Heavens (Flare of the Heavens)\n\t[67669] = {3, nil}, -- Elusive Power (Trinket Abyssal Rune)\n\t[60064] = {3, nil}, -- Now is the Time! (Trinket Sundial of the Exiled/Mithril Pocketwatch)\n\t-- 4 (MostOffensiveBuffs)\n\t[48168] = {4, \"PRIEST\"}, -- Inner Fire (Priest)\n\t[15258] = {4, \"PRIEST\"}, -- Shadow Weaving (Shadow Priest)\n\t[48420] = {4, \"DRUID\"}, -- Master Shapeshifter (Druid)\n\t[24932] = {4, \"DRUID\"}, -- Leader of the Pack (Feral Druid)\n\t[67355] = {4, \"DRUID\"}, -- Agile (Feral Druid idol)\n\t[52610] = {4, \"DRUID\"}, -- Savage Roar (Feral Druid)\n\t[24907] = {4, \"DRUID\"}, -- Moonkin Aura (Balance Druid)\n\t[71199] = {4, \"DRUID\"}, -- Furious (Shaman EoF: Bizuri's Totem of Shattered Ice)\n\t[67360] = {4, \"DRUID\"}, -- Blessing of the Moon Goddess (Druid EoT: Idol of Lunar Fury)\n\t[48943] = {4, \"PALADIN\"}, -- Shadow Resistance Aura (Paladin)\n\t[43046] = {4, \"MAGE\"}, -- Molten Armor (Mage)\n\t[47893] = {4, \"WARLOCK\"}, -- Fel Armor (Warlock)\n\t[63321] = {4, \"WARLOCK\"}, -- Life Tap (Warlock)\n\t[55637] = {4, nil}, -- Lightweave (Back tailoring enchant)\n\t[71572] = {4, nil}, -- Cultivated Power (Muradin Spyglass)\n\t[60235] = {4, nil}, -- Greatness (Darkmoon Card: Greatness)\n\t[71644] = {4, nil}, -- Surge of Power (Dislodged Foreign Object)\n\t[75473] = {4, nil}, -- Twilight Flames (Charred Twilight Scale)\n\t[71636] = {4, nil}, -- Siphoned Power (Phylactery of the Nameless Lich)\n}\nlocal optionToDegree = {\n\t[\"Gift\"] = 1, -- Cyclones resists\n\t[\"CCFree\"] = 2, -- CC Shadow resists, life Fear from Psychic Scream\n\t[\"ShortOffensiveProcs\"] = 3, -- Short-term procs that would expire during Mind Control anyway\n\t[\"MostOffensiveBuffs\"] = 4, -- Most offensive buffs that are easily renewable but would expire after Mind Control ends\n}\n\nlocal function RemoveBuffs(option) -- Spell is removed based on name so no longer need SpellID for each rank\n\tif not option then return end\n\tlocal degreeOption = optionToDegree[option]\n\tfor aura, infoTable in pairs(aurastoRemove) do\n\t\tlocal degree, classFilter = unpack(infoTable)\n\t\tif degree <= degreeOption then\n\t\t\tif not classFilter or classFilter == playerClass then\n\t\t\t\tCancelUnitBuff(\"player\", (GetSpellInfo(aura)))\n\t\t\tend\n\t\tend\n\tend\n\tDBM:Debug(\"Buffs removed, using option \\\"\" .. option .. \"\\\" and degree: \" .. tostring(degreeOption), 2)\nend\n\nlocal function AnnounceChainsTargets(self)\n\twarnChainsTargets:Show(table.concat(chainsTargets, \"< >\"))\n\tif self.Options.EqUneqWeaponsKT and checkWeaponRemovalSetting(self) then\n\t\tif not tContains(chainsTargets, UnitName(\"player\")) then\n\t\t\tDBM:Debug(\"Equipping scheduled\", 2)\n\t\t\tself:Schedule(1.0, EqWKT, self)\n\t\t\tself:Schedule(2.0, EqWKT, self)\n\t\t\tself:Schedule(3.6, EqWKT, self)\n\t\t\tself:Schedule(5.0, EqWKT, self)\n\t\t\tself:Schedule(6.0, EqWKT, self)\n\t\t\tself:Schedule(8.0, EqWKT, self)\n\t\t\tself:Schedule(10.0, EqWKT, self)\n\t\t\tself:Schedule(12.0, EqWKT, self)\n\t\tend\n\tend\n\ttable.wipe(chainsTargets)\n\tself.vb.MCIcon = 1\nend\n\nlocal function AnnounceBlastTargets(self)\n\tif self.Options.SpecWarn27808target then\n\t\tspecWarnBlast:Show(table.concat(frostBlastTargets, \"< >\"))\n\t\tspecWarnBlast:Play(\"healall\")\n\telse\n\t\twarnBlastTargets:Show(table.concat(frostBlastTargets, \"< >\"))\n\tend\n\tblastTimer:Start(3.5)\n\tif self.Options.SetIconOnFrostTomb then\n\t\tfor i = #frostBlastTargets, 1, -1 do\n\t\t\tself:SetIcon(frostBlastTargets[i], 8 - i, 4.5)\n\t\t\tfrostBlastTargets[i] = nil\n\t\tend\n\tend\nend\n\nlocal function StartPhase2(self)\n\tif self.vb.phase == 1 then\n\t\tself:SetStage(2)\n\t\twarnPhase2:Show()\n\t\twarnPhase2:Play(\"ptwo\")\n\t\ttimerMCCD:Start(30)\n\t\twarnMindControlSoon:Schedule(25)\n\t\tspecWarnWeapons:Show(checkWeaponRemovalSetting(self) and ENABLE or ADDON_DISABLED, (self.Options.EqUneqWeaponsKT2 and self.Options.EqUneqWeaponsKT and (SLASH_STOPWATCH2):sub(2)) or (self.Options.EqUneqWeaponsKT2 and COMBAT_LOG) or NONE, self.Options.EqUneqFilter)\n\t\tif self.Options.EqUneqWeaponsKT and checkWeaponRemovalSetting(self) then\n\t\t\tself:Schedule(29.95, UnWKT, self)\n\t\t\tself:Schedule(30, UnWKT, self)\n\t\tend\n\tend\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(12)\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\ttable.wipe(chainsTargets)\n\ttable.wipe(frostBlastTargets)\n\tself.vb.warnedAdds = false\n\tself.vb.MCIcon = 1\n\tspecwarnP2Soon:Schedule(236-delay) -- 246-10\n\ttimerPhase2:Start()\n--\tself:Schedule(226, StartPhase2, self)\n\tself:RegisterShortTermEvents(\n\t\t\"INSTANCE_ENCOUNTER_ENGAGE_UNIT\"\n\t)\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 27810 then\n\t\ttimerFissure:Start(args.destName)\n\t\ttimerFissureCD:Start()\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnFissureYou:Show()\n\t\t\tspecWarnFissureYou:Play(\"targetyou\")\n\t\t\tyellFissure:Yell()\n\t\telseif self:CheckNearby(8, args.destName) then\n\t\t\tspecWarnFissureClose:Show(args.destName)\n\t\t\tspecWarnFissureClose:Play(\"watchfeet\")\n\t\telse\n\t\t\twarnFissure:Show(args.destName)\n\t\t\twarnFissure:Play(\"watchstep\")\n\t\tend\n\telseif args.spellId == 28410 then\n\t\tDBM:Debug(\"MC on \"..args.destName, 2)\n\t\tif args.destName == UnitName(\"player\") then\n\t\t\tif self.Options.RemoveBuffsOnMC ~= \"Never\" then\n\t\t\t\tRemoveBuffs(self.Options.RemoveBuffsOnMC)\n\t\t\tend\n\t\t\tif self.Options.EqUneqWeaponsKT2 and checkWeaponRemovalSetting(self) then\n\t\t\t\tUnWKT(self)\n\t\t\t\tself:Schedule(0.01, UnWKT, self)\n\t\t\t\tDBM:Debug(\"Unequipping\", 2)\n\t\t\tend\n\t\tend\n\t\tif self:AntiSpam(2, 2) then\n\t\t\ttimerMCCD:Start()\n\t\t\tif self.Options.EqUneqWeaponsKT and checkWeaponRemovalSetting(self) then\n\t\t\t\tself:Schedule(89.95, UnWKT, self)\n\t\t\t\tself:Schedule(90, UnWKT, self)\n\t\t\tend\n\t\tend\n\telseif spellId == 27819 then\n\t\ttimerManaBomb:Start()\n\telseif spellId == 27808 then\n\t\ttimerFrostBlast:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 27808 then -- Frost Blast\n\t\ttable.insert(frostBlastTargets, args.destName)\n\t\tself:Unschedule(AnnounceBlastTargets)\n\t\tself:Schedule(0.5, AnnounceBlastTargets, self)\n\telseif spellId == 27819 then -- Detonate Mana\n\t\tif self.Options.SetIconOnManaBomb then\n\t\t\tself:SetIcon(args.destName, 8, 5.5)\n\t\tend\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnManaBomb:Show()\n\t\t\tspecWarnManaBomb:Play(\"bombrun\")\n\t\t\tyellManaBomb:Yell()\n\t\telseif self:CheckNearby(12, args.destName) then\n\t\t\tspecWarnManaBombNear:Show(args.destName)\n\t\t\tspecWarnManaBombNear:Play(\"scatter\")\n\t\telse\n\t\t\twarnMana:Show(args.destName)\n\t\tend\n\telseif spellId == 28410 then -- Chains of Kel'Thuzad\n\t\tchainsTargets[#chainsTargets + 1] = args.destName\n\t\tif self:AntiSpam() then\n\t\t\ttimerMC:Start()\n\t\t\ttimerMCCD:Start()\n\t\t\twarnMindControlSoon:Schedule(55)\n\t\tend\n\t\tif self.Options.SetIconOnMC then\n\t\t\tself:SetIcon(args.destName, self.vb.MCIcon)\n\t\tend\n\t\tself.vb.MCIcon = self.vb.MCIcon + 1\n\t\tself:Unschedule(AnnounceChainsTargets)\n\t\tif #chainsTargets >= 3 then\n\t\t\tAnnounceChainsTargets(self)\n\t\telse\n\t\t\tself:Schedule(1.0, AnnounceChainsTargets, self)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 28410 then\n\t\tif self.Options.SetIconOnMC then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\t\tif (args.destName == UnitName(\"player\") or args:IsPlayer()) and checkWeaponRemovalSetting(self) then\n\t\t\tDBM:Debug(\"Equipping scheduled\", 2)\n\t\t\tself:Schedule(0.1, EqWKT, self)\n\t\t\tself:Schedule(1.7, EqWKT, self)\n\t\t\tself:Schedule(3.7, EqWKT, self)\n\t\t\tself:Schedule(7.0, EqWKT, self)\n\t\t\tself:Schedule(9.0, EqWKT, self)\n\t\t\tself:Schedule(11.0, EqWKT, self)\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.Yell1Phase2 or msg:find(L.Yell1Phase2) or msg == L.Yell2Phase2 or msg:find(L.Yell2Phase2) or msg == L.Yell3Phase2 or msg:find(L.Yell3Phase2) then\n\t\tStartPhase2(self)\n\t\tself:UnregisterShortTermEvents() -- Unregister IEEU\n\telseif msg == L.YellPhase3 or msg:find(L.YellPhase3) then\n\t\tself:SetStage(3)\n\t\twarnPhase3:Show()\n\telseif msg == L.YellGuardians or msg:find(L.YellGuardians) then\n\t\tspecWarnAddsGuardians:Show()\n\tend\nend\n\nfunction mod:INSTANCE_ENCOUNTER_ENGAGE_UNIT() -- Keeping this just in case one of the YellPhase2 Localizations is wrong\n\tif UnitExists(\"boss1\") and self:GetUnitCreatureId(\"boss1\") == 15990 then\n\t\tStartPhase2(self)\n\t\tself:UnregisterShortTermEvents()\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif not self.vb.warnedAdds and self:GetUnitCreatureId(uId) == 15990 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.48 then\n\t\tself.vb.warnedAdds = true\n\t\twarnAddsSoon:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-VanillaNaxx/FrostwyrmLair/Sapphiron.lua",
    "content": "local mod\t= DBM:NewMod(\"Sapphiron-Vanilla\", \"DBM-VanillaNaxx\", 5)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20240814163209\")\nmod:SetCreatureID(15989)\nmod:SetMinSyncRevision(20220904000000)\n\nmod:RegisterCombat(\"combat\")\nmod:SetModelScale(0.1)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 28524\",\n\t\"SPELL_CAST_SUCCESS 28542 55665 28560 55696\",\n\t\"SPELL_AURA_APPLIED 28522 28547 55699\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\", -- 2024/07/10 it was confirmed to be left out of the script on purpose, to keep it Vanilla.\n\t\"UNIT_HEALTH boss1\",\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1\",\n\t\"UNIT_TARGET boss1\"\n)\n\n--TODO, verify SPELL_CAST_START on retail to switch to it over emote, same as classicc era was done\n\n-- General\nlocal specWarnLowHP\t\t= mod:NewSpecialWarning(\"SpecWarnSapphLow\")\n\nlocal berserkTimer\t\t= mod:NewBerserkTimer(900)\n\n-- Stage One (Ground Phase)\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1))\nlocal warnDrainLifeNow\t= mod:NewSpellAnnounce(28542, 2)\nlocal warnDrainLifeSoon\t= mod:NewSoonAnnounce(28542, 1)\nlocal warnAirPhaseSoon\t= mod:NewAnnounce(\"WarningAirPhaseSoon\", 3, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\")\nlocal warnLanded\t\t= mod:NewAnnounce(\"WarningLanded\", 4, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendBurrow.blp\")\nlocal warnBlizzard\t\t= mod:NewSpellAnnounce(28560, 4)\n\nlocal specWarnBlizzard\t= mod:NewSpecialWarningGTFO(28547, nil, nil, nil, 1, 8)\n\nlocal timerDrainLife\t= mod:NewCDTimer(24, 28542, nil, nil, nil, 3, nil, DBM_COMMON_L.CURSE_ICON) -- (Onyxia PTR: [2024-07-13]@[15:10:23] ||| Onyxia: [2024-07-29]@[20:01:58]) - \"Life Drain-28542-npc:15989-1847 = pull:12.01/[Stage 1/0.00] 12.01, 23.99, Stage 2/8.99, ||| \"Life Drain-28542-npc:15989-3730 = pull:11.99/[Stage 1/0.00] 11.99, 24.03, Stage 2/9.00, Stage 1/22.22, 12.98/35.20/44.20, 24.03, 24.00, Stage 2/6.00, Stage 1/22.87, 13.00/35.87/41.86, 24.03\"\nlocal timerAirPhase\t\t= mod:NewTimer(67, \"TimerAir\", \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\", nil, nil, 6)\nlocal timerBlizzard\t\t= mod:NewNextTimer(20, 28560, nil, nil, nil, 3) -- REVIEW!\nlocal timerTailSweep\t= mod:NewNextTimer(9, 55696, nil, nil, nil, 2) -- (Onyxia PTR: [2024-07-13]@[15:10:23]) - \"Tail Sweep-55697-npc:15989-1847 = pull:9.01/[Stage 1/0.00] 9.01, 9.01, 8.99, 9.04, Stage 2/8.94,...\n\n-- Stage Two (Air Phase)\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2))\nlocal warnAirPhaseNow\t= mod:NewAnnounce(\"WarningAirPhaseNow\", 4, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\")\nlocal warnIceBlock\t\t= mod:NewTargetAnnounce(28522, 2)\n\nlocal specWarnDeepBreath= mod:NewSpecialWarningSpell(28524, nil, nil, nil, 1, 2)\nlocal yellIceBlock\t\t= mod:NewYell(28522)\n\nlocal timerLanding\t\t= mod:NewTimer(30, \"TimerLanding\", \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendBurrow.blp\", nil, nil, 6)\nlocal timerIceBlast\t\t= mod:NewCastTimer(7, 28524, nil, nil, nil, 2, DBM_COMMON_L.DEADLY_ICON)\nlocal timerIcebolt\t\t= mod:NewNextTimer(3, 28522, nil, nil, nil, 2)\n\nmod:AddRangeFrameOption(\"12\")\n\n--local UnitAffectingCombat = UnitAffectingCombat\n--local noTargetTime = 0\nlocal warned_lowhp = false\nmod.vb.isFlying = false\nmod.vb.iceboltCount = 0\nlocal iceboltSpellName = DBM:GetSpellInfo(28522)\n\n--[[local function resetIsFlying(self)\n\tself.vb.isFlying = false\nend]]\n\n-- \"<0.00 19:29:35> [DBM_Pull] Sapphiron-Vanilla#0#nil#99.647332005526#\", -- [1]\n-- \"<0.00 19:29:35> [DBM_SetStage] Sapphiron-Vanilla#1#1#\", -- [2]\n-- \"<44.99 19:30:20> [UNIT_TARGET] -boss1:Sapphiron- [CanAttack:1#Exists:1#IsVisible:1#ID:15989#GUID:0xF130003E75000A74#Classification:worldboss#Health:2310647] - Target: ??#TargetOfTarget: ??\", -- [3]\n-- \"<75.76 19:30:51> [UNIT_TARGET] -boss1:Sapphiron- [CanAttack:1#Exists:1#IsVisible:1#ID:15989#GUID:0xF130003E75000A74#Classification:worldboss#Health:2244077] - Target: Name#TargetOfTarget: Sapphiron\", -- [4]\n-- \"<142.67 19:31:57> [UNIT_TARGET] -boss1:Sapphiron- [CanAttack:1#Exists:1#IsVisible:1#ID:15989#GUID:0xF130003E75000A74#Classification:worldboss#Health:1940109] - Target: ??#TargetOfTarget: ??\", -- [5]\n-- \"<173.89 19:32:29> [UNIT_TARGET] -boss1:Sapphiron- [CanAttack:1#Exists:1#IsVisible:1#ID:15989#GUID:0xF130003E75000A74#Classification:worldboss#Health:1672129] - Target: Name#TargetOfTarget: Sapphiron\", -- [6]\n-- \"<193.60 19:32:48> [INSTANCE_ENCOUNTER_ENGAGE_UNIT] Fake Args:#boss1#nil#nil#nil#??#1#nil#normal#0#boss2#nil#nil#nil#??#1#nil#normal#0#boss3#nil#nil#nil#??#1#nil#normal#0#boss4#nil#nil#nil#??#1#nil#normal#0#boss5#nil#nil#nil#??#1#nil#normal#0#Real Args:#\", -- [7]\n-- \"<193.61 19:32:48> [UNIT_TARGET] -target:Sapphiron- [CanAttack:1#Exists:1#IsVisible:1#ID:15989#GUID:0xF130003E75000A74#Classification:worldboss#Health:1] - Target: ??#TargetOfTarget: ??\", -- [8]\n-- \"<193.61 19:32:48> [DBM_Kill] Sapphiron-Vanilla#\", -- [9]\n\nlocal function Flying(self)\n\tself:SetStage(2)\n\tself.vb.isFlying = true\n\ttimerDrainLife:Cancel()\n\ttimerAirPhase:Cancel()\n\twarnAirPhaseNow:Show()\n\ttimerLanding:Start() -- this will be innacurate as it does not account for boss travel distance to center. Updated on Frost Breath timer\nend\n\nlocal function Landing(self)\n\tself:SetStage(1)\n\tself.vb.isFlying = false\n\tself.vb.iceboltCount = 0\n\twarnLanded:Show()\n\twarnDrainLifeSoon:Schedule(8)\n\ttimerDrainLife:Start(13)\n\twarnAirPhaseSoon:Schedule(62)\n\ttimerAirPhase:Start() -- 67s after first landing onwards\n\tself:Schedule(67, Flying, self)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\t\tself:Schedule(65, DBM.RangeCheck.Show, DBM.RangeCheck, 12)\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n--\tnoTargetTime = 0\n\twarned_lowhp = false\n\tself:SetStage(1)\n\tself.vb.isFlying = false\n\tself.vb.iceboltCount = 0\n\twarnDrainLifeSoon:Schedule(6.5-delay)\n\ttimerDrainLife:Start(12-delay)\n\ttimerBlizzard:Start(15-delay) -- REVIEW!\n\ttimerTailSweep:Start(-delay)\n\twarnAirPhaseSoon:Schedule(40-delay)\n\ttimerAirPhase:Start(45-delay) -- 45s since Combat Start\n\tself:Schedule(45, Flying, self)\n\tberserkTimer:Start(-delay)\n\tif self.Options.RangeFrame then\n\t\tself:Schedule(43-delay, DBM.RangeCheck.Show, DBM.RangeCheck, 12)\n\tend\n--[[self:RegisterOnUpdateHandler(function(self, elapsed)\n\t\tif not self:IsInCombat() then return end\n\t\tlocal foundBoss, target\n\t\tfor uId in DBM:GetGroupMembers() do\n\t\t\tlocal unitID = uId..\"target\"\n\t\t\tif self:GetUnitCreatureId(unitID) == 15989 and UnitAffectingCombat(unitID) then\n\t\t\t\ttarget = DBM:GetUnitFullName(unitID..\"target\")\n\t\t\t\tfoundBoss = true\n\t\t\t\tbreak\n\t\t\tend\n\t\tend\n\t\tif foundBoss and not target then\n\t\t\tnoTargetTime = noTargetTime + elapsed\n\t\telseif foundBoss then\n\t\t\tnoTargetTime = 0\n\t\tend\n\t\tif noTargetTime > 0.5 and not self.vb.isFlying then\n\t\t\tnoTargetTime = 0\n\t\t\tself:SetStage(2)\n\t\t\tself.vb.isFlying = true\n\t\t\tself:Schedule(60, resetIsFlying, self)\n\t\t\ttimerDrainLife:Cancel()\n\t\t\ttimerAirPhase:Cancel()\n\t\t\twarnAirPhaseNow:Show()\n\t\t\ttimerLanding:Start()\n\t\tend\n\tend, 0.2)]]\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 28522 then\n\t\twarnIceBlock:CombinedShow(0.5, args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tyellIceBlock:Yell()\n\t\tend\n\telseif args:IsSpellID(28547, 55699) and args:IsPlayer() and self:AntiSpam(1) then\n\t\tspecWarnBlizzard:Show(args.spellName)\n\t\tspecWarnBlizzard:Play(\"watchfeet\")\n\tend\nend\n\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 28524 then\n\t\ttimerIceBlast:Start()\n\t\ttimerLanding:Update(11, 30) -- 11s after Frost Breath cast start\n\t\tself:Schedule(11, Landing, self)\n\t\tspecWarnDeepBreath:Show()\n\t\tspecWarnDeepBreath:Play(\"findshelter\")\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif args:IsSpellID(28542, 55665) then -- Life Drain\n\t\twarnDrainLifeNow:Show()\n\t\twarnDrainLifeSoon:Schedule(18.5)\n\t\ttimerDrainLife:Start()\n\telseif spellId == 28560 then\n\t\tDBM:AddMsg(\"Sapphiron Blizzard SPELL_CAST_SUCCESS implemented on Warmane Onyxia server script. Notify Zidras on Discord or GitHub\")\n\t\twarnBlizzard:Show()\n\t\ttimerBlizzard:Start()\n\telseif spellId == 55696 then\n\t\ttimerTailSweep:Start()\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)\n\tif msg == L.EmoteBreath or msg:find(L.EmoteBreath) then\n\t\tDBM:AddMsg(\"Sapphiron Breath emote implemented on Warmane Onyxia server script. Notify Zidras on Discord or GitHub\")\n--\t\tself:SendSync(\"DeepBreath\") -- this does not need syncing and spam comms\n--\t\ttimerIceBlast:Start()\n--\t\ttimerLanding:Update(13.5) -- 8s until breath + 3.5s until emote + ~2s until UNIT_TARGET\n\t\tspecWarnDeepBreath:Show()\n\t\tspecWarnDeepBreath:Play(\"findshelter\")\n\telseif msg == L.AirPhase or msg:find(L.AirPhase) then\n\t\tDBM:AddMsg(\"Sapphiron Air Phase emote implemented on Warmane Onyxia server script. Notify Zidras on Discord or GitHub\")\n\t\tself:SetStage(2)\n\t\tself.vb.isFlying = true\n\t\ttimerDrainLife:Cancel()\n\t\ttimerAirPhase:Cancel()\n\t\twarnAirPhaseNow:Show()\n\t\ttimerLanding:Start()\n\telseif msg == L.LandingPhase or msg:find(L.LandingPhase) then\n\t\tDBM:AddMsg(\"Sapphiron Landing Phase emote implemented on Warmane Onyxia server script. Notify Zidras on Discord or GitHub\")\n\t\tself:SetStage(1)\n\t\tself.vb.isFlying = false\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif not warned_lowhp and self:GetUnitCreatureId(uId) == 15989 and UnitHealth(uId) / UnitHealthMax(uId) < 0.1 then\n\t\twarned_lowhp = true\n\t\tspecWarnLowHP:Show()\n\t\ttimerAirPhase:Cancel()\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == iceboltSpellName then -- Icebolt\n\t\tself.vb.iceboltCount = self.vb.iceboltCount + 1\n\t\tif self.vb.iceboltCount < 5 then -- 5 Icebolts on each Flight phase\n\t\t\ttimerIcebolt:Start()\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_TARGET(uId)\n\t-- REVIEW! Check if this is accurate to rely on\n\tif UnitExists(uId..\"target\") then\n\t\tDBM:Debug(\"UNIT_TARGET event fired, flying status: \" .. tostring(self.vb.isFlying or \"nil\"))\n\t\tif self.vb.isFlying then\n\t\t\tself:SendSync(\"SapphironLanded\") -- Sync landing with raid since UNIT_TARGET:boss1 event requires boss to be target/focus, which not all members do\n\t\tend\n\telse\n\t\tDBM:Debug(\"UNIT_TARGET found no boss target, flying status: \" .. tostring(self.vb.isFlying or \"nil\"))\n\t\tif not self.vb.isFlying then\n\t\t\tself:SendSync(\"SapphironFlying\") -- Sync airphase with raid since UNIT_TARGET:boss1 event requires boss to be target/focus, which not all members do\n\t\tend\n\tend\nend\n\nfunction mod:OnSync(msg)\n\t--[[if msg == \"DeepBreath\" then\n\t\ttimerIceBlast:Start()\n\t\ttimerLanding:Update(14)\n\t\tself:Schedule(14.5, Landing, self)\n\t\tspecWarnDeepBreath:Show()\n\t\tspecWarnDeepBreath:Play(\"findshelter\")]]\n\tif msg == \"SapphironFlying\" and self.vb.phase == 1 then\n\t\tFlying(self)\n\telseif msg == \"SapphironLanded\" and self.vb.phase == 2 then\n\t\tLanding(self)\n\tend\nend\n"
  },
  {
    "path": "DBM-VanillaNaxx/MilitaryQuarter/Gothik.lua",
    "content": "local mod\t= DBM:NewMod(\"Gothik-Vanilla\", \"DBM-VanillaNaxx\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20240715112650\")\nmod:SetCreatureID(16060)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"UNIT_DIED\"\n--\t\"UNIT_SPELLCAST_SUCCEEDED boss1\"\n)\n\n--TODO, sync infoframe from classic era version?\n--(source.type = \"NPC\" and source.firstSeen = timestamp) or (target.type = \"NPC\" and target.firstSeen = timestamp)\nlocal warnWaveNow\t\t= mod:NewAnnounce(\"WarningWaveSpawned\", 3, nil, false)\nlocal warnWaveSoon\t\t= mod:NewAnnounce(\"WarningWaveSoon\", 2)\nlocal warnRiderDown\t\t= mod:NewAnnounce(\"WarningRiderDown\", 4)\nlocal warnKnightDown\t= mod:NewAnnounce(\"WarningKnightDown\", 2)\nlocal warnPhase2\t\t= mod:NewPhaseAnnounce(2, 3)\n\nlocal timerPhase2\t\t= mod:NewTimer(275, \"TimerPhase2\", 27082, nil, nil, 6)\nlocal timerWave\t\t\t= mod:NewTimer(30, \"TimerWave\", 5502, nil, nil, 1)\nlocal timerGate\t\t\t= mod:NewTimer(235, \"Gate Opens\", 9484)\n\nmod.vb.wave = 0\nlocal waves = {\t\t\t\t\t-- #0 0:45\n\t{3, L.Trainee, timer = 20},\t-- #1 1:15\n\t{3, L.Trainee, timer = 20},\t-- #2 1:35?\n\t{3, L.Trainee, timer = 10}, -- #3 1:55\n\t{2, L.Knight, timer = 10},\t-- #4 2:05\n\t{3, L.Trainee, timer = 15},\t-- #5 2:15\n\t{2, L.Knight, timer = 5},\t-- #6 2:30\n\t{3, L.Trainee, timer = 20},\t-- #7 2:35\n\t{3, L.Trainee, 2, L.Knight, timer = 10}, -- #8 2:55\n\t{1, L.Rider, timer = 10},\t-- #9 3:05\n\t{3, L.Trainee, timer = 5},\t-- #10 3:15\n\t{2, L.Knight, timer = 15},\t-- #11 3:20\n\t{1, L.Rider, 3, L.Trainee, timer = 10},\t-- #12 3:35\n\t{2, L.Knight, timer = 10},\t-- #13 3:45\n\t{3, L.Trainee, timer = 10},\t-- #14 3:55\n\t{1, L.Rider, timer = 5},\t-- #15 4:05\n\t{2, L.Knight, timer = 5},\t-- #16 4:10\n\t{3, L.Trainee},\t\t\t\t-- #17 4:15\n}\t\t\t\t\t\t\t\t-- Gate Open 4:40\n\nlocal function StartPhase2(self)\n\tself:SetStage(2)\nend\n\nlocal function getWaveString(wave)\n\tlocal waveInfo = waves[wave]\n\tif #waveInfo == 2 then\n\t\treturn L.WarningWave1:format(unpack(waveInfo))\n\telseif #waveInfo == 4 then\n\t\treturn L.WarningWave2:format(unpack(waveInfo))\n\telseif #waveInfo == 6 then\n\t\treturn L.WarningWave3:format(unpack(waveInfo))\n\tend\nend\n\nlocal function NextWave(self)\n\tself.vb.wave = self.vb.wave + 1\n\twarnWaveNow:Show(self.vb.wave, getWaveString(self.vb.wave))\n\tlocal timer = waves[self.vb.wave].timer\n\tif timer then\n\t\ttimerWave:Start(timer, self.vb.wave + 1)\n\t\twarnWaveSoon:Schedule(timer - 3, self.vb.wave + 1, getWaveString(self.vb.wave + 1))\n\t\tself:Schedule(timer, NextWave, self)\n\tend\nend\n\nfunction mod:OnCombatStart()\n\tself:SetStage(1)\n\tself.vb.wave = 0\n\ttimerGate:Start()\n\ttimerPhase2:Start()\n\twarnPhase2:Schedule(275)\n\ttimerWave:Start(nil, self.vb.wave + 1)\n\twarnWaveSoon:Schedule(27, self.vb.wave + 1, getWaveString(self.vb.wave + 1))\n\tself:Schedule(30, NextWave, self)\n\tself:Schedule(275, StartPhase2, self)\nend\n\nfunction mod:UNIT_DIED(args)\n\tif bit.band(args.destGUID:sub(0, 5), 0x00F) == 3 then\n\t\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\t\tif cid == 16126 then -- Unrelenting Rider\n\t\t\twarnRiderDown:Show()\n\t\telseif cid == 16125 then -- Unrelenting Deathknight\n\t\t\twarnKnightDown:Show()\n\t\tend\n\tend\nend\n\n--[[function mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName == GetSpellInfo(28025) and self.vb.phase == 1 then -- Teleport Left. Boss casts this teleportation spell, together with Yell: I have waited long enough. Now you face the harvester of souls.\n\t\tself:SetStage(2)\n\tend\nend]]\n"
  },
  {
    "path": "DBM-VanillaNaxx/MilitaryQuarter/Horsemen.lua",
    "content": "local mod\t= DBM:NewMod(\"Horsemen-Vanilla\", \"DBM-VanillaNaxx\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20240705231210\")\nmod:SetCreatureID(16063, 16064, 16065, 30549)\n\nmod:RegisterCombat(\"combat\", 16063, 16064, 16065, 30549)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 28884 57467\",\n\t\"SPELL_CAST_SUCCESS 28832 28833 28834 28835 28883 53638 57466 32455\",\n\t\"SPELL_AURA_APPLIED 29061\",\n\t\"SPELL_AURA_REMOVED 29061\",\n\t\"SPELL_AURA_APPLIED_DOSE 28832 28833 28834 28835\",\n\t\"UNIT_DIED\"\n)\n\n--TODO, first marks\n--TODO, verify stuff migrated from naxx 40\nlocal warnMarkSoon\t\t\t\t= mod:NewAnnounce(\"WarningMarkSoon\", 1, 28835, false, nil, nil, 28835)\nlocal warnMeteor\t\t\t\t= mod:NewSpellAnnounce(57467, 4)\nlocal warnVoidZone\t\t\t\t= mod:NewTargetNoFilterAnnounce(28863, 3)--Only warns for nearby targets, to reduce spam\nlocal warnHolyWrath\t\t\t\t= mod:NewTargetNoFilterAnnounce(28883, 3, nil, false)\nlocal warnBoneBarrier\t\t\t= mod:NewTargetNoFilterAnnounce(29061, 2)\n\nlocal specWarnMarkOnPlayer\t\t= mod:NewSpecialWarning(\"SpecialWarningMarkOnPlayer\", nil, nil, nil, 1, 6, nil, nil, 28835)\nlocal specWarnVoidZone\t\t\t= mod:NewSpecialWarningYou(28863, nil, nil, nil, 1, 2)\nlocal yellVoidZone\t\t\t\t= mod:NewYell(28863)\n\nlocal timerLadyMark\t\t\t\t= mod:NewNextTimer(15.44, 28833, nil, nil, nil, 3) -- ([2024-07-01]@[19:58:05] || [2024-07-01]@[20:09:25]) - \"Mark of Blaumeux-28833-npc:16065-5 = pull:20.59\" || \"Mark of Blaumeux-28833-npc:16065-5 = pull:20.62, 15.47, 15.45, 15.44\"\nlocal timerZeliekMark\t\t\t= mod:NewNextTimer(15.44, 28835, nil, nil, nil, 3) -- ([2024-07-01]@[19:58:05] || [2024-07-01]@[20:09:25]) - \"Mark of Zeliek-28835-npc:16063-6 = pull:21.11\" || \"Mark of Zeliek-28835-npc:16063-6 = pull:21.09, 15.52, 15.46, 15.44\"\nlocal timerBaronMark\t\t\t= mod:NewNextTimer(12, 28834, nil, nil, nil, 3) -- ([2024-07-01]@[19:58:05] || [2024-07-01]@[20:09:25]) - \"Mark of Mograine-28834-npc:30549-8 = pull:19.99, 12.01\" || \"Mark of Mograine-28834-npc:30549-8 = pull:20.00, 12.02, 12.00, 12.03, 12.00\"\nlocal timerThaneMark\t\t\t= mod:NewNextTimer(12, 28832, nil, nil, nil, 3) -- ([2024-07-01]@[19:58:05] || [2024-07-01]@[20:09:25]) - \"Mark of Korth'azz-28832-npc:16064-7 = pull:19.99, 12.03\" || \"Mark of Korth'azz-28832-npc:16064-7 = pull:20.00, 12.04\"\nlocal timerMeteorCD\t\t\t\t= mod:NewNextTimer(15, 57467, nil, nil, nil, 3, nil, nil, true) -- Fixed timer ([2024-07-01]@[19:58:05] || [2024-07-01]@[20:09:25]) - \"Meteor-28884-npc:16064-7 = pull:14.97, 15.02\" || \"Meteor-28884-npc:16064-7 = pull:15.01, 15.00\"\nlocal timerVoidZoneCD\t\t\t= mod:NewCDTimer(15.4, 28863, nil, nil, nil, 3)-- ([2024-07-01]@[19:58:05] || [2024-07-01]@[20:09:25]) - \"Void Zone-28863-npc:16065-5 = pull:16.20\" || \"Void Zone-28863-npc:16065-5 = pull:16.31, 15.37, 15.44, 15.47\"\nlocal timerHolyWrathCD\t\t\t= mod:NewCDTimer(15.43, 28883, nil, nil, nil, 3) -- ([2024-07-01]@[19:58:05] || [2024-07-01]@[20:09:25]) - \"Holy Wrath-28883-npc:16063-6 = pull:16.70, 15.43\" || \"Holy Wrath-28883-npc:16063-6 = pull:32.16, 15.49, 15.47\"\nlocal timerBoneBarrier\t\t\t= mod:NewTargetTimer(20, 29061, nil, nil, nil, 5)\n\nmod:AddRangeFrameOption(\"12\")\n\nmod:SetBossHealthInfo(\n\t16064, L.Korthazz,\t-- Thane\n\t30549, L.Rivendare,\t-- Baron\n\t16065, L.Blaumeux,\t-- Lady\n\t16063, L.Zeliek\t\t-- Zeliek\n)\n\nmod.vb.markCount = 0\n\n-- REVIEW-Have two logs where this is NOT verified! Still 15s timer on next meteor when he skips one (usually on tank swaps)\n--[[local function MeteorCast(self)\n\tself:Unschedule(MeteorCast)\n\ttimerMeteorCD:Restart()\n\tself:Schedule(15, MeteorCast, self)\nend]]\n\nfunction mod:OnCombatStart()\n\tself.vb.markCount = 0\n\ttimerLadyMark:Start(20.59)\n\ttimerZeliekMark:Start(21.09)\n\ttimerBaronMark:Start(20)\n\ttimerThaneMark:Start(20)\n\twarnMarkSoon:Schedule(15)\n\ttimerMeteorCD:Start()\n\ttimerHolyWrathCD:Start(16.7) -- REVIEW! variance? ([2024-07-01]@[19:58:05] || [2024-07-01]@[20:09:25]) - 16.7 || 32.16\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(12)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(28884, 57467) then\n\t\twarnMeteor:Show()\n\t\ttimerMeteorCD:Start()\n--\t\tMeteorCast(self)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif args:IsSpellID(28832, 28833, 28834, 28835) and self:AntiSpam(5, spellId) then\n\t\tself.vb.markCount = self.vb.markCount + 1\n\t\tif spellId == 28833 then -- Lady Mark\n\t\t\ttimerLadyMark:Start()\n\t\telseif spellId == 28835 then -- Zeliek Mark\n\t\t\ttimerZeliekMark:Start()\n\t\telseif spellId == 28834 then -- Baron Mark\n\t\t\ttimerBaronMark:Start()\n\t\telseif spellId == 28832 then -- Thane Mark\n\t\t\ttimerThaneMark:Start()\n\t\tend\n\t\twarnMarkSoon:Schedule(8)\n\telseif spellId == 28863 then\n\t\ttimerVoidZoneCD:Start()\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnVoidZone:Show()\n\t\t\tspecWarnVoidZone:Play(\"targetyou\")\n\t\t\tyellVoidZone:Yell()\n\t\telseif self:CheckNearby(12, args.destName) then\n\t\t\twarnVoidZone:Show(args.destName)\n\t\tend\n\telseif args:IsSpellID(28883, 53638, 57466, 32455) then\n\t\twarnHolyWrath:Show(args.destName)\n\t\ttimerHolyWrathCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 29061 then\n\t\twarnBoneBarrier:Show(args.destName)\n\t\ttimerBoneBarrier:Start(20, args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 29061 then\n\t\ttimerBoneBarrier:Stop(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED_DOSE(args)\n\tif args:IsSpellID(28832, 28833, 28834, 28835) and args:IsPlayer() then\n\t\tlocal amount = args.amount or 1\n\t\tif amount >= 4 then\n\t\t\tspecWarnMarkOnPlayer:Show(args.spellName, amount)\n\t\t\tspecWarnMarkOnPlayer:Play(\"stackhigh\")\n\t\tend\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal cid = self:GetCIDFromGUID(args.destGUID)\n\tif cid == 16064 then\n\t\ttimerThaneMark:Cancel()\n\t\ttimerMeteorCD:Cancel()\n--\t\tself:Unschedule(MeteorCast)\n\telseif cid == 30549 then\n\t\ttimerBaronMark:Cancel()\n\telseif cid == 16065 then\n\t\ttimerLadyMark:Cancel()\n\telseif cid == 16063 then\n\t\ttimerZeliekMark:Cancel()\n\tend\nend\n"
  },
  {
    "path": "DBM-VanillaNaxx/MilitaryQuarter/Razuvious.lua",
    "content": "local mod\t= DBM:NewMod(\"Razuvious-Vanilla\", \"DBM-VanillaNaxx\", 4)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20240705232605\")\nmod:SetCreatureID(16061)\n\nmod:RegisterCombat(\"combat_yell\", L.Yell1, L.Yell2, L.Yell3, L.Yell4)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 55543 29107 29060 29061\",\n\t\"SPELL_AURA_APPLIED 605\",\n\t\"UNIT_DIED\"\n)\n\nlocal warnShoutNow\t\t= mod:NewSpellAnnounce(29107, 1)\nlocal warnShoutSoon\t\t= mod:NewSoonAnnounce(29107, 3)\nlocal warnShieldWall\t= mod:NewAnnounce(\"WarningShieldWallSoon\", 3, 29061, nil, nil, nil, 29061)\n\nlocal timerShout\t\t= mod:NewNextTimer(25, 29107, nil, nil, nil, 2) -- [2024-07-01]@[19:09:31] - \"Disrupting Shout-29107-npc:16061-627 = pull:24.97, 25.01, 25.02, 25.02, 25.01\"\nlocal timerTaunt\t\t= mod:NewCDTimer(20, 29060, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerShieldWall\t= mod:NewCDTimer(20, 29061, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)\nlocal timerMindControl\t= mod:NewBuffActiveTimer(60, 605, nil, nil, nil, 6)\n\nfunction mod:OnCombatStart(delay)\n\ttimerShout:Start(-delay)\n\twarnShoutSoon:Schedule(21-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif args:IsSpellID(55543, 29107) then  -- Disrupting Shout\n\t\ttimerShout:Start()\n\t\twarnShoutNow:Show()\n\t\twarnShoutSoon:Schedule(21)\n\telseif spellId == 29060 then -- Taunt\n\t\ttimerTaunt:Start(20, args.sourceGUID)\n\telseif spellId == 29061 then -- ShieldWall\n\t\ttimerShieldWall:Start(20, args.sourceGUID)\n\t\twarnShieldWall:Schedule(15)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 605 and args:IsSrcTypePlayer() then -- Mind Control\n\t\ttimerMindControl:Start(nil, args.sourceName)\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tlocal guid = args.destGUID\n\tlocal cid = self:GetCIDFromGUID(guid)\n\tif cid == 16803 then--Deathknight Understudy\n\t\ttimerTaunt:Stop(args.destGUID)\n\t\ttimerShieldWall:Stop(args.destGUID)\n\tend\nend\n"
  },
  {
    "path": "DBM-VanillaNaxx/PlagueQuarter/Heigan.lua",
    "content": "local mod\t= DBM:NewMod(\"Heigan-Vanilla\", \"DBM-VanillaNaxx\", 3)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20240701222429\")\nmod:SetCreatureID(15936)\n\nmod:RegisterCombat(\"combat_yell\", L.Pull)\n\nlocal warnTeleportSoon\t\t\t= mod:NewAnnounce(\"WarningTeleportSoon\", 2, 46573)\nlocal warnTeleportNow\t\t\t= mod:NewAnnounce(\"WarningTeleportNow\", 3, 46573)\nlocal warnPlagueCloudEnd\t\t= mod:NewEndAnnounce(30122, 1)\n\nlocal timerTeleport\t\t\t\t= mod:NewTimer(90, \"TimerTeleport\", 46573, nil, nil, 6)\nlocal timerPlagueCloud\t\t\t= mod:NewBuffActiveTimer(45, 30122, nil, nil, nil, 6)\n\nfunction mod:DancePhase()\n\ttimerPlagueCloud:Start()\n\twarnTeleportSoon:Schedule(35, 10)\n\twarnPlagueCloudEnd:Schedule(45)\n\tself:ScheduleMethod(45, \"BackInRoom\", 88)\n\tself:SetStage(2)\nend\n\nfunction mod:BackInRoom(time)\n\ttimerTeleport:Show(time)\n\twarnTeleportSoon:Schedule(time - 15, 15)\n\twarnTeleportNow:Schedule(time)\n\tself:ScheduleMethod(time, \"DancePhase\")\n\tself:SetStage(1)\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tself:BackInRoom(90 - delay)\nend\n"
  },
  {
    "path": "DBM-VanillaNaxx/PlagueQuarter/Loatheb.lua",
    "content": "local mod\t= DBM:NewMod(\"Loatheb-Vanilla\", \"DBM-VanillaNaxx\", 3)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20240731154436\")\nmod:SetCreatureID(16011)\n\nmod:RegisterCombat(\"combat\")--Maybe change to a yell later so pull detection works if you chain pull him from tash gauntlet\n\n-- There are two types of Corrupted Mind spells for each class.\n-- Let's refer to them as \"Corrupted Mind Aura\" and \"Corrupted Mind Debuff\" for clarify\n-- Corrupted Mind Aura\n--   * This is a 2 min debuff that gives you a Corrupted Mind Debuff if you cast a heal.\n--   * This is refreshed every 11 seconds if you're in combat with Loatheb.\n-- Corrupted Mind Debuff\n--   * This is a 1 min debuff that doesn't let you heal.\n--   * This is applied if you heal when you have the Corrupted Mind Aura.\n\n-- Corrupted Mind Aura spell IDs (in the order of Priest, Druid, Paladin, Shaman)\n-- 29185 29194 29196 29198\n\n-- Corrupted Mind Debuff spell IDs (in the order of Priest, Druid, Paladin, Shaman)\n-- 29184 29195 29197 29199\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 29234 29204 30281\",\n\t\"SPELL_AURA_APPLIED 29184 29195 29197 29199\",\n\t\"SPELL_AURA_REMOVED 29184 29195 29197 29199\",\n\t\"SPELL_DAMAGE\",\n\t\"SWING_DAMAGE\",\n\t\"UNIT_DIED\"\n)\n\nlocal warnSporeNow\t\t\t= mod:NewCountAnnounce(29234, 2, \"Interface\\\\Icons\\\\INV_Mushroom_09\")\nlocal warnSporeSoon\t\t\t= mod:NewSoonAnnounce(29234, 1, \"Interface\\\\Icons\\\\INV_Mushroom_09\")\nlocal warnDoomNow\t\t\t= mod:NewCountAnnounce(29204, 3)\nlocal warnRemoveCurse\t\t= mod:NewSpellAnnounce(30281, 3)\nlocal warnHealSoon\t\t\t= mod:NewAnnounce(\"WarningHealSoon\", 4, 29184, nil, nil, nil, 29184)\nlocal warnHealNow\t\t\t= mod:NewAnnounce(\"WarningHealNow\", 1, 29184, false, nil, nil, 29184)\n\nlocal timerSpore\t\t\t= mod:NewNextTimer(12, 29234, nil, nil, nil, 5, \"Interface\\\\Icons\\\\INV_Mushroom_09\", DBM_COMMON_L.DAMAGE_ICON) -- (PTR: [2024-07-08]@[18:39:24] ||| Onyxia: [2024-07-26]@[21:27:31])  -- \"Summon Spore-29234-npc:16011-130 = pull:11.96, 12.01, 12.01, 12.00, 12.03\" ||| \"Summon Spore-29234-npc:16011-130 = pull:12.01, 12.01, 12.03, 11.99, 12.01, 12.01, 12.01, 12.00, 12.04, 12.00, 12.02, 12.02, 12.01, 12.03, 12.01, 12.03\"\nlocal timerDoom\t\t\t\t= mod:NewNextTimer(30, 29204, nil, nil, nil, 2) -- (Onyxia: [2024-07-26]@[21:27:31]) - \"Inevitable Doom-29204-npc:16011-130 = pull:119.99, 30.01, 30.01\"\nlocal timerRemoveCurseCD\t= mod:NewNextTimer(30, 30281, nil, nil, nil, 5) -- (Onyxia: [2024-07-26]@[21:27:31]) - \"Remove Curse-30281-npc:16011-130 = pull:2.24, 30.01, 29.99, 30.03, 30.03, 30.01, 30.03\"\n\nmod:AddInfoFrameOption(29184, \"Tank|Healer\")\nmod:AddBoolOption(\"SporeDamageAlert\", false)\nif not DBM.Options.GroupOptionsBySpell then\n\tmod:AddMiscLine(DBM_CORE_L.OPTION_CATEGORY_DROPDOWNS)\nend\nmod:AddDropdownOption(\"CorruptedSorting\", {\"Alphabetical\", \"Duration\"}, \"Alphabetical\", \"misc\", nil, 29184)\n\nmod.vb.doomCounter\t= 0\nmod.vb.sporeTimer\t= 12\nmod.vb.sporeCounter = 0\nlocal hadCorrupted\t= {}\n\nlocal updateInfoFrame\ndo\n\tlocal ipairs, pairs, tostring = ipairs, pairs, tostring\n\tlocal mfloor, mmax, tinsert, tsort, twipe = math.floor, math.max, table.insert, table.sort, table.wipe\n\tlocal lines, sortedLines, corruptKeys = {}, {}, {}\n\tlocal function addLine(key, value)\n\t\t-- sort by insertion order\n\t\tlines[key] = value\n\t\tsortedLines[#sortedLines + 1] = key\n\tend\n\tupdateInfoFrame = function()\n\t\ttwipe(lines)\n\t\ttwipe(sortedLines)\n\t\ttwipe(corruptKeys)\n\n\t\tlocal refreshTime = GetTime()\n\n\t\tfor name, _ in pairs(hadCorrupted) do\n\t\t\ttinsert(corruptKeys, name)\n\t\tend\n\t\tif mod.Options.CorruptedSorting == \"Duration\" then\n\t\t\ttsort(corruptKeys, function (a, b) return (hadCorrupted[a] or refreshTime) > (hadCorrupted[b] or refreshTime) end)\n\t\telse\n\t\t\ttsort(corruptKeys)\n\t\tend\n\n\t\tfor _, name in ipairs(corruptKeys) do\n\t\t\taddLine(name, tostring(mfloor(mmax(hadCorrupted[name] - refreshTime, 0))))\n\t\tend\n\n\t\treturn lines, sortedLines\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.doomCounter = 0\n\tself.vb.sporeCounter = 0\n\ttimerRemoveCurseCD:Start(2.24 - delay) -- ~1s variance\n\ttimerSpore:Start(self.vb.sporeTimer-delay, 1)\n\twarnSporeSoon:Schedule(self.vb.sporeTimer-5-delay)\n\ttimerDoom:Start(120-delay, 1)\n\n\tlocal startTime = GetTime()\n\ttable.wipe(hadCorrupted)\n\tfor unit in DBM:GetGroupMembers() do\n\t\tlocal _, cls = UnitClass(unit)\n\t\tif not UnitIsDeadOrGhost(unit) and (cls == \"DRUID\" or cls == \"PALADIN\" or cls == \"PRIEST\" or cls == \"SHAMAN\") then\n\t\t\thadCorrupted[UnitName(unit)] = startTime\n\t\tend\n\tend\n\tif self.Options.InfoFrame and not DBM.InfoFrame:IsShown() then\n\t\tDBM.InfoFrame:SetHeader(DBM:GetSpellInfo(29184))\n\t\tDBM.InfoFrame:Show(25, \"function\", updateInfoFrame, false, false)\n\t\tDBM.InfoFrame:SetColumns(2)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif DBM.InfoFrame:IsShown() then\n\t\tDBM.InfoFrame:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 29234 then\n\t\tself.vb.sporeCounter = self.vb.sporeCounter + 1\n\t\ttimerSpore:Start(self.vb.sporeTimer, self.vb.sporeCounter + 1)\n\t\twarnSporeNow:Show(self.vb.sporeCounter)\n\t\twarnSporeSoon:Schedule(self.vb.sporeTimer-5)\n\telseif spellId == 29204 then  -- Inevitable Doom\n\t\tself.vb.doomCounter = self.vb.doomCounter + 1\n\t\tlocal timer = 30\n\t\tif self.vb.doomCounter >= 7 then\n\t\t\tif self.vb.doomCounter % 2 == 0 then timer = 17\n\t\t\telse timer = 12 end\n\t\tend\n\t\twarnDoomNow:Show(self.vb.doomCounter)\n\t\ttimerDoom:Start(timer, self.vb.doomCounter + 1)\n\telseif spellId == 30281 then\n\t\twarnRemoveCurse:Show()\n\t\ttimerRemoveCurseCD:Start()\n\tend\nend\n\n--Spore loser function. Credits to Forte guild and their old discontinued dbm plugins. Sad to see that guild disband, best of luck to them!\nfunction mod:SPELL_DAMAGE(_, sourceName, _, _, destName, _, spellId, _, _, amount)\n\tif self.Options.SporeDamageAlert and destName == \"Spore\" and spellId ~= 62124 and self:IsInCombat() then\n\t\tSendChatMessage(sourceName..\", You are damaging a Spore!!! (\"..amount..\" damage)\", \"RAID_WARNING\")\n\t\tSendChatMessage(sourceName..\", You are damaging a Spore!!! (\"..amount..\" damage)\", \"WHISPER\", nil, sourceName)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(29184, 29195, 29197, 29199) then -- Corrupted Mind debuff\n\t\thadCorrupted[args.destName] = GetTime() + 60\n\t\tif args:IsPlayer() then\n\t\t\twarnHealSoon:Schedule(55)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(29184, 29195, 29197, 29199) then\n\t\tif args:IsPlayer() then\n\t\t\twarnHealNow:Show()\n\t\tend\n\tend\nend\n\nfunction mod:SWING_DAMAGE(_, sourceName, _, _, destName, _, _, _, _, amount)\n\tif self.Options.SporeDamageAlert and destName == \"Spore\" and self:IsInCombat() then\n\t\tSendChatMessage(sourceName..\", You are damaging a Spore!!! (\"..amount..\" damage)\", \"RAID_WARNING\")\n\t\tSendChatMessage(sourceName..\", You are damaging a Spore!!! (\"..amount..\" damage)\", \"WHISPER\", nil, sourceName)\n\tend\nend\n\n--because in all likelyhood, pull detection failed (cause 90s like to charge in there trash and all and pull it\n--We unschedule the pre warnings on death as a failsafe\nfunction mod:UNIT_DIED(args)\n\tif self:GetCIDFromGUID(args.destGUID) == 16011 then\n\t\twarnSporeSoon:Cancel()\n\t\t--warnHealSoon:Cancel()\n\t\t--warnHealNow:Cancel()\n\telseif hadCorrupted[args.destName] then\n\t\thadCorrupted[args.destName] = nil\n\tend\nend\n"
  },
  {
    "path": "DBM-VanillaNaxx/PlagueQuarter/Noth.lua",
    "content": "local mod\t= DBM:NewMod(\"Noth-Vanilla\", \"DBM-VanillaNaxx\", 3)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nlocal GetSpellInfo = GetSpellInfo\n\nmod:SetRevision(\"20240730223300\")\nmod:SetCreatureID(15954)\n\nmod:RegisterCombat(\"combat_yell\", L.Pull)\n\nmod:RegisterEvents(\n\t\"SPELL_CAST_SUCCESS 29213 54835 29212 29208 29209 29210 29211\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\", -- 2024/07/14 it was confirmed to be left out of the script on purpose, to keep it Vanilla.\n\t\"UNIT_SPELLCAST_SUCCEEDED boss1\"\n)\n\nlocal warnTeleportNow\t= mod:NewAnnounce(\"WarningTeleportNow\", 3, 46573, nil, nil, nil, 29216)\nlocal warnTeleportSoon\t= mod:NewAnnounce(\"WarningTeleportSoon\", 1, 46573, nil, nil, nil, 29216)\nlocal warnCurse\t\t\t= mod:NewSpellAnnounce(29213, 2)\nlocal warnBlinkSoon\t\t= mod:NewSoonAnnounce(29208, 1)\nlocal warnBlink\t\t\t= mod:NewSpellAnnounce(29208, 3)\n\nlocal specWarnAdds\t\t= mod:NewSpecialWarningAdds(29247, \"-Healer\", nil, nil, 1, 2)\n\nlocal timerTeleport\t\t= mod:NewTimer(90, \"TimerTeleport\", 46573, nil, nil, 6, nil, nil, nil, nil, nil, nil, nil, 29216)\nlocal timerTeleportBack\t= mod:NewTimer(70, \"TimerTeleportBack\", 46573, nil, nil, 6, nil, nil, nil, nil, nil, nil, nil, 29231)\nlocal timerCurseCD\t\t= mod:NewCDTimer(50, 29213, nil, nil, nil, 5, nil, DBM_COMMON_L.CURSE_ICON) -- REVIEW! variance? (Onyxia PTR: [2024-07-13]@[13:54:46]) - \"Curse of the Plaguebringer-29213-npc:15954-267 = pull:9.98, 50.05, 117.46\"\nlocal timerAddsCD\t\t= mod:NewAddsTimer(30, 29247, nil, \"-Healer\") -- (missing beg) 8.19 > 38.23 > (TP: 68.20) > 70.20 > 100.19 > (TP return: 138.22) > 148.21 > 178.22 > 208.24 > 238.25 > (TP: 248.24) > 250.24 > 295.26 > (TP return:338.26) > 348.26 > 378.26 > 408.26 > 438.29 > 468.30 > 498.29 > (TP: 518.27) > 520.27 > 580.28 > (TP return: 643.28) > 653.29 > 683.29 > 713.31 > 743.31 > 773.32 > 803.31 > (TP: 823.29) > 825.31 > 885.31 > (TP return: 948.30) > 958.32 > 988.35 > 1018.34 > 1048.34 > 1078.35 > 1108.34 > (TP: 1128.33) > 1130.35 > 1190.35\nlocal timerBlink\t\t= mod:NewNextTimer(30, 29208) -- No variance (Onyxia PTR: [2024-07-13]@[13:54:46]) - \"Blink-npc:15954-267 = pull:22.57, 30.03, 30.03\"\n\nlocal timerBerserk\t\t= mod:NewBerserkTimer(665.07) -- spellId = 27680\n\nmod:GroupSpells(29216, 29231) -- Teleport, Teleport Return\n\nmod.vb.teleCount = 0\nmod.vb.addsCount = 0\nmod.vb.curseCount = 0\nmod.vb.blinkCount = 0\nlocal teleported = false\nlocal teleportBalconyName = GetSpellInfo(29216) -- Teleport\nlocal teleportBackName = GetSpellInfo(29231) -- Teleport Return\n-- Ground phase\nlocal summonPlaguedWarriorName = GetSpellInfo(29247)\n-- Balcony phase, 1st teleport (Champions only)\nlocal summonPlaguedChampionName = GetSpellInfo(29217)\n-- Balcony phase, 2nd teleport (2 Champions and 2 Guardians)\nlocal summonPlaguedGuardianName = GetSpellInfo(29226)\n-- Balcony phase, 3rd teleport (3 Guardians + 1 Guardian and Construct)\nlocal summonPlaguedGuardianAndConstructName = GetSpellInfo(29269)\n-- Balcony phase, 4st teleport onwards (3 Guardians + 1 Guardian and Construct ; 3 Guardians + 1 Champion and Construct)\nlocal summonPlaguedChampionAndConstructName = GetSpellInfo(29240)\n\n--[[function mod:Balcony()\n\tself.vb.teleCount = self.vb.teleCount + 1\n\tself.vb.addsCount = 0\n\ttimerCurseCD:Stop()\n\ttimerAddsCD:Stop()\n\ttimerBlink:Stop()\n\tlocal timer\n\tif self.vb.teleCount == 1 then\n\t\ttimer = 70\n\t\ttimerAddsCD:Start(5)--Always 5\n\telseif self.vb.teleCount == 2 then\n\t\ttimer = 97\n\t\ttimerAddsCD:Start(5)--Always 5\n\telseif self.vb.teleCount == 3 then\n\t\ttimer = 126\n\t\ttimerAddsCD:Start(5)--Always 5\n\telse\n\t\ttimer = 55\n\tend\n\ttimerTeleportBack:Start(timer)\n\twarnTeleportSoon:Schedule(timer - 10)\n\twarnTeleportNow:Schedule(timer)\n--\tself:ScheduleMethod(timer, \"BackInRoom\")\nend\n\nfunction mod:BackInRoom(delay)\n\tdelay = delay or 0\n\tself:SetStage(0)\n\tlocal timer\n\tif self.vb.phase == 1 then timer = 90 - delay\n\telseif self.vb.phase == 2 then timer = 110 - delay\n\telseif self.vb.phase == 3 then timer = 180 - delay\n\telse return end\n\ttimerTeleport:Show(timer)\n\twarnTeleportSoon:Schedule(timer - 10)\n\twarnTeleportNow:Schedule(timer)\n\tself:ScheduleMethod(timer, \"Balcony\")\nend]]\n\nfunction mod:OnCombatStart(delay)\n\tself.vb.phase = 0\n\tself.vb.teleCount = 0\n\tself.vb.addsCount = 0\n\tself.vb.curseCount = 0\n\tself.vb.blinkCount = 0\n\tteleported = false\n\ttimerAddsCD:Start(-delay)\n\ttimerCurseCD:Start(10-delay)\n\ttimerBlink:Start(22.57-delay)\n\twarnBlinkSoon:Schedule(17.57-delay)\n\ttimerTeleport:Start(-delay)\n\twarnTeleportSoon:Schedule(80-delay)\n--\tself:ScheduleMethod(90.8-delay, \"Balcony\")\n\ttimerBerserk:Start(-delay)\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(29213, 54835) then\t-- Curse of the Plaguebringer\n\t\tself.vb.curseCount = self.vb.curseCount + 1\n\t\twarnCurse:Show()\n\t\ttimerCurseCD:Start()\n--\telseif args.spellId == 29212 then--Cripple that's always cast when he teleports away\n\n\telseif args:IsSpellID(29208, 29209, 29210, 29211) and args:GetSrcCreatureID() == 15954 then -- Blink\n\t\tself.vb.blinkCount = self.vb.blinkCount + 1\n\t\twarnBlink:Show()\n\t\tif self.vb.blinkCount < 3 then\n\t\t\ttimerBlink:Start()\n\t\t\twarnBlinkSoon:Schedule(25)\n\t\tend\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)\n\tif msg == L.Adds or msg:find(L.Adds) then\n\t\tDBM:AddMsg(\"Noth adds emote implemented on Warmane Onyxia server script. Notify Zidras on Discord or GitHub\")\n--\t\tself:SendSync(\"Adds\")--Syncing to help unlocalized clients\n\telseif msg == L.AddsTwo or msg:find(L.AddsTwo) then\n\t\tDBM:AddMsg(\"Noth adds2 emote implemented on Warmane Onyxia server script. Notify Zidras on Discord or GitHub\")\n--\t\tself:SendSync(\"AddsTwo\")--Syncing to help unlocalized clients\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n\tif spellName ==  teleportBalconyName then -- Teleport\n\t\tself.vb.teleCount = self.vb.teleCount + 1\n\t\tDBM:AddSpecialEventToTranscriptorLog(format(\"Teleport %d\", self.vb.teleCount))\n\t\tself.vb.addsCount = 0\n\t\tteleported = true\n\t\ttimerCurseCD:Stop()\n--\t\ttimerAddsCD:Stop()\n\t\ttimerBlink:Stop()\n\t\twarnBlinkSoon:Cancel()\n\t\tlocal timer\n\t\tif self.vb.teleCount == 1 then\n\t\t\ttimer = 70\n--\t\t\ttimerAddsCD:Start(5)--Always 5\n\t\telseif self.vb.teleCount == 2 then\n\t\t\ttimer = 90\n--\t\t\ttimerAddsCD:Start(5)--Always 5\n\t\telse\n\t\t\ttimer = 125\n\t\tend\n\t\ttimerTeleportBack:Start(timer)\n\t\twarnTeleportSoon:Schedule(timer - 10)\n\t\twarnTeleportNow:Show()\n\telseif spellName ==  teleportBackName then -- Teleport Return\n\t\tDBM:AddSpecialEventToTranscriptorLog(\"Teleport Return\")\n\t\tself.vb.addsCount = 0\n\t\tself.vb.curseCount = 0\n\t\tteleported = false\n--\t\ttimerAddsCD:Stop()\n\t\tlocal timer\n\t\tif self.vb.teleCount == 1 then\n\t\t\ttimer = 110\n--\t\t\ttimerAddsCD:Start(10)\n\t\telse\n\t\t\ttimer = 180\n\t\tend\n\t\ttimerTeleport:Start(timer)\n\t\twarnTeleportSoon:Schedule(timer - 10)\n\t\twarnTeleportNow:Show()\n\t\tif self.vb.teleCount == 1 then -- REVIEW! More data needed. 5s variance? (Onyxia PTR) - 1: [15.25-16.75]; 2: [12.25-15.83]; 3: [13.45-17.52]; 4: [15.71]\n\t\t\ttimerCurseCD:Start(15.25)\n\t\telseif self.vb.teleCount == 2 then\n\t\t\ttimerCurseCD:Start(12.25)\n\t\telseif self.vb.teleCount == 3 then\n\t\t\ttimerCurseCD:Start(13.45)\n\t\telse\n\t\t\ttimerCurseCD:Start(15.71)\n\t\tend\n--\t\tself:ScheduleMethod(timer, \"Balcony\")\n\telseif (spellName == summonPlaguedWarriorName or spellName == summonPlaguedChampionName or spellName == summonPlaguedGuardianName or spellName == summonPlaguedGuardianAndConstructName or spellName == summonPlaguedChampionAndConstructName) and self:AntiSpam(2, 1) then\n\t\tself.vb.addsCount = self.vb.addsCount + 1\n\t\tspecWarnAdds:Show()\n\t\tspecWarnAdds:Play(\"killmob\")\n\t\tlocal teleportRemainingTimer = timerTeleport:GetRemaining()\n\t\tlocal teleportBackRemainingTimer = timerTeleportBack:GetRemaining()\n\t\tif not teleported then\n\t\t\tif teleportRemainingTimer > 30 then -- Check if teleport will happen before next Warriors summon\n\t\t\t\ttimerAddsCD:Start() -- always 30s on Warriors\n\t\t\telse\n\t\t\t\ttimerAddsCD:Start(teleportRemainingTimer+2) -- always 2s after teleport to balcony\n\t\t\tend\n\t\telse\n\t\t\t-- Check teleport counter, since timing changes with each teleport\n\t\t\tif self.vb.teleCount == 1 then\n\t\t\t\tif self.vb.addsCount == 1 then\n\t\t\t\t\ttimerAddsCD:Start(30) -- always 30s on Champions in 1st teleport\n\t\t\t\telse\n\t\t\t\t\ttimerAddsCD:Start(teleportBackRemainingTimer+10) -- always 10s after teleport back, regardless of teleport counter\n\t\t\t\tend\n\t\t\telseif self.vb.teleCount == 2 then\n\t\t\t\tif self.vb.addsCount == 1 then\n\t\t\t\t\ttimerAddsCD:Start(45) -- always 45s on Guardians in 2nd teleport\n\t\t\t\telse\n\t\t\t\t\ttimerAddsCD:Start(teleportBackRemainingTimer+10) -- always 10s after teleport back, regardless of teleport counter\n\t\t\t\tend\n\t\t\telseif self.vb.teleCount >= 3 then\n\t\t\t\tif self.vb.addsCount == 1 then\n\t\t\t\t\ttimerAddsCD:Start(60) -- always 60s on Constructs in 3rd teleport\n\t\t\t\telse\n\t\t\t\t\ttimerAddsCD:Start(teleportBackRemainingTimer+10) -- always 10s after teleport back, regardless of teleport counter\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif not self:IsInCombat() then return end\n\tif msg == \"Adds\" then--Boss Grounded\n\t\tself.vb.addsCount = self.vb.addsCount + 1\n\t\tspecWarnAdds:Show()\n\t\tspecWarnAdds:Play(\"killmob\")\n\t\tif self.vb.teleCount < 4 then\n\t\t\tif self.vb.teleCount == 0 and self.vb.addsCount < 3 then--3 waves 30 seconds apart\n\t\t\t\ttimerAddsCD:Start(30)\n\t\t\telseif self.vb.teleCount == 1 then--3 waves 34 then 47 seconds apart\n\t\t\t\tif self.vb.addsCount == 1 then\n\t\t\t\t\ttimerAddsCD:Start(33.9)\n\t\t\t\telseif self.vb.addsCount == 1 then\n\t\t\t\t\ttimerAddsCD:Start(47.3)\n\t\t\t\tend\n\t\t\telseif self.vb.teleCount == 2 then--30, 32, 32, 30\n\t\t\t\tif self.vb.addsCount == 1 or self.vb.addsCount == 4 then\n\t\t\t\t\ttimerAddsCD:Start(30)\n\t\t\t\telseif self.vb.addsCount == 2 or self.vb.addsCount == 3 then\n\t\t\t\t\ttimerAddsCD:Start(32)\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\telseif msg == \"AddsTwo\" then--Boss away\n\t\tself.vb.addsCount = self.vb.addsCount + 1\n\t\tspecWarnAdds:Show()\n\t\tspecWarnAdds:Play(\"killmob\")\n\t\t--He won't do anymore adds when teleported way on 4th and later teleport\n\t\t--He'll never do more than 2 waves\n\t\tif self.vb.teleCount < 4 and self.vb.addsCount == 1 then\n\t\t\tif self.vb.teleCount == 3 then\n\t\t\t\ttimerAddsCD:Start(60)--2 big waves, 60 seconds apart\n\t\t\telseif self.vb.teleCount == 2 then--2 medium waves 46 seconds apart\n\t\t\t\ttimerAddsCD:Start(46)\n\t\t\telse--2 smaller waves 30 seconds apart\n\t\t\t\ttimerAddsCD:Start(30)\n\t\t\tend\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-VanillaNaxx/localization.cn.lua",
    "content": "﻿-- author: callmejames @《凤凰之翼》 一区藏宝海湾\n-- commit by: yaroot <yaroot AT gmail.com>\n-- Mini Dragon(projecteurs AT gmail.com) Brilla@金色平原\n-- Last update: 2019/08/22\n\nif GetLocale() ~= \"zhCN\" then return end\n\nlocal L\n\n-------------------\n--  Anub'Rekhan  --\n-------------------\nL = DBM:GetModLocalization(\"Anub'Rekhan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"阿努布雷坎\"\n})\n\nL:SetOptionLocalization({\n\tArachnophobiaTimer\t\t= \"为蜘蛛克星(成就)显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t\t= \"蜘蛛克星\",\n\tPull1\t\t\t\t\t= \"对，跑吧！那样伤口出血就更多了！\",\n\tPull2\t\t\t\t\t= \"一些小点心……\",\n--\tPull3\t\t\t\t\t= \"你们逃不掉的。\"\n})\n\n----------------------------\n--  Grand Widow Faerlina  --\n----------------------------\nL = DBM:GetModLocalization(\"Faerlina-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"黑女巫法琳娜\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t\t= \"黑女巫的拥抱5秒后结束\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t\t= \"为黑女巫的拥抱结束显示提前警报\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t\t= \"跪下求饶吧，诺夫！\"--Not actually pull trigger, but often said on pull\n})\n\n---------------\n--  Maexxna  --\n---------------\nL = DBM:GetModLocalization(\"Maexxna-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t\t= \"迈克斯纳\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t\t= \"迈克斯纳之子 5秒后出现\",\n\tWarningSpidersNow\t\t= \"迈克斯纳之子出现了\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t\t\t\t= \"下一次 迈克斯纳之子\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t\t= \"为迈克斯纳之子显示提前警报\",\n\tWarningSpidersNow\t\t= \"为迈克斯纳之子显示警报\",\n\tTimerSpider\t\t\t\t= \"为下一次迈克斯纳之子显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t\t= \"蜘蛛克星\"\n})\n\n------------------------------\n--  Noth the Plaguebringer  --\n------------------------------\nL = DBM:GetModLocalization(\"Noth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t\t= \"药剂师诺斯\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t\t= \"传送\",\n\tWarningTeleportSoon\t\t= \"10秒后 传送\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t\t= \"传送\",\n\tTimerTeleportBack\t\t= \"传送回来\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t\t= \"为传送显示警报\",\n\tWarningTeleportSoon\t\t= \"为传送显示预警\",\n\tTimerTeleport\t\t\t= \"为传送显示计时条\",\n\tTimerTeleportBack\t\t= \"为传送回来显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"死吧，入侵者！\",\n\tAdds\t\t\t\t= \"召唤出骷髅战士！\",\n\tAddsTwo\t\t\t\t= \"召唤出更多的骷髅！\"\n})\n\n--------------------------\n--  Heigan the Unclean  --\n--------------------------\nL = DBM:GetModLocalization(\"Heigan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"肮脏的希尔盖\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t\t= \"传送\",\n\tWarningTeleportSoon\t\t= \"%d秒后 传送\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t\t= \"传送\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t\t= \"为传送显示警报\",\n\tWarningTeleportSoon\t\t= \"为传送显示提前警报\",\n\tTimerTeleport\t\t\t= \"为传送显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"你是我的了。\"\n})\n\n---------------\n--  Loatheb  --\n---------------\nL = DBM:GetModLocalization(\"Loatheb-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"洛欧塞布\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t\t\t= \"3秒后可以治疗\",\n\tWarningHealNow\t\t\t= \"现在治疗\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t\t= \"为3秒后可以治疗显示提前警报\",\n\tWarningHealNow\t\t\t= \"为现在治疗显示警报\",\n\tSporeDamageAlert\t\t= \"在团队中提示谁杀死了孢子并发送悄悄话给该玩家\\n(需要团长或助理权限)\",\n\tCorruptedSorting\t\t= \"Set infoframe sorting behaviour for $spell:55593\", -- translation missing\n\tAlphabetical\t\t\t= \"Sort in alphabetical order\", -- translation missing\n\tDuration\t\t\t\t= \"Sort by duration\" -- translation missing\n})\n\n-----------------\n--  Patchwerk  --\n-----------------\nL = DBM:GetModLocalization(\"Patchwerk-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"帕奇维克\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful\t\t= \"公布仇恨打击的目标到团队频道\\n(需要团长或助理权限)\"\n})\n\nL:SetMiscLocalization({\n\tyell1\t\t\t\t= \"帕奇维克要跟你玩！\",\n\tyell2\t\t\t\t= \"帕奇维克是克尔苏加德的战神！\",\n\tHatefulStrike\t\t= \"仇恨打击 --> %s [%s]\"\n})\n\n-----------------\n--  Grobbulus  --\n-----------------\nL = DBM:GetModLocalization(\"Grobbulus-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"格罗布鲁斯\"\n})\n\n-------------\n--  Gluth  --\n-------------\nL = DBM:GetModLocalization(\"Gluth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"格拉斯\"\n})\n\n----------------\n--  Thaddius  --\n----------------\nL = DBM:GetModLocalization(\"Thaddius-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"塔迪乌斯\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t\t= \"极性变为%s\",\n\tWarningChargeNotChanged\t\t= \"极性没有改变\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t\t= \"当你的极性改变时显示特别警报\",\n\tWarningChargeNotChanged\t\t= \"当你的极性没有改变时显示特别警报\",\n\tArrowsEnabled\t\t\t= \"显示箭头 (正常 \\\"两边\\\" 站位打法)\",\n\tArrowsRightLeft\t\t\t= \"显示左/右箭头 给 \\\"四角\\\" 站位打法 (如果极性改变显示左箭头, 没变显示右箭头)\",\n\tArrowsInverse\t\t\t= \"显示反转的 \\\"四角\\\" 站位打法 (如果极性改变显示右箭头, 没变显示左箭头)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t\t\t\t= \"斯塔拉格要碾碎你！\",\n\tEmote\t\t\t\t= \"%s超载了！\",\n\tEmote2\t\t\t\t= \"电磁圈超载了！\",\n\tBoss1\t\t\t\t= \"费尔根\",\n\tBoss2\t\t\t\t= \"斯塔拉格\",\n\tCharge1\t\t\t\t= \"负极\",\n\tCharge2\t\t\t\t= \"正极\"\n})\n\n----------------------------\n--  Instructor Razuvious  --\n----------------------------\nL = DBM:GetModLocalization(\"Razuvious-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"教官拉苏维奥斯\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t\t= \"5秒后 盾墙结束\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t\t= \"为盾墙结束显示提前警报\"\n})\n\nL:SetMiscLocalization({\n\tYell1\t\t\t\t= \"仁慈无用！\",\n\tYell2\t\t\t\t= \"练习时间到此为止！都拿出真本事来！\",\n\tYell3\t\t\t\t= \"按我教导的去做！\",\n\tYell4\t\t\t\t= \"绊腿……有什么问题吗？\"\n})\n\n----------------------------\n--  Gothik the Harvester  --\n----------------------------\nL = DBM:GetModLocalization(\"Gothik-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"收割者戈提克\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t\t= \"3秒后 第%d波: %s\",\n\tWarningWaveSpawned\t\t= \"第%d波: %s 出现了\",\n\tWarningRiderDown\t\t= \"骑兵已死亡\",\n\tWarningKnightDown\t\t= \"死亡骑士已死亡\",\n\tWarningPhase2\t\t\t= \"第二阶段\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t\t\t= \"第 %d 波\",\n\tTimerPhase2\t\t\t= \"第2阶段\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"为下一波小怪显示计时条\",\n\tTimerPhase2\t\t\t= \"为第二阶段显示计时条\",\n\tWarningWaveSoon\t\t\t= \"为小怪出现显示提前警报\",\n\tWarningWaveSpawned\t\t= \"为小怪出现显示警报\",\n\tWarningRiderDown\t\t= \"当冷酷的骑兵死亡时显示警报\",\n\tWarningKnightDown\t\t= \"当冷酷的死亡骑士死亡时显示警报\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t\t= \"你们这些蠢货已经主动步入了陷阱。\",\n\tWarningWave1\t\t= \"%d %s\",\n\tWarningWave2\t\t= \"%d %s 和 %d %s\",\n\tWarningWave3\t\t= \"%d %s, %d %s 和 %d %s\",\n\tTrainee\t\t\t\t= \"学徒\",\n\tKnight\t\t\t\t= \"死亡骑士\",\n\tRider\t\t\t\t= \"骑兵\"\n})\n\n---------------------\n--  Four Horsemen  --\n---------------------\nL = DBM:GetModLocalization(\"Horsemen-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"四骑士\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t= \"为印记显示提前警报\",\n\tSpecialWarningMarkOnPlayer\t= \"当你印记叠加多于四层时显示特别警报\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t= \"3秒后 印记 %d\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t\t\t= \"库尔塔兹领主\",\n\tRivendare\t\t\t= \"瑞文戴尔男爵\",\n\tBlaumeux\t\t\t= \"女公爵布劳缪克丝\",\n\tZeliek\t\t\t\t= \"瑟里耶克爵士\"\n})\n\n-----------------\n--  Sapphiron  --\n-----------------\nL = DBM:GetModLocalization(\"Sapphiron-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"萨菲隆\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t\t= \"10秒后 空中阶段\",\n\tWarningAirPhaseNow\t\t= \"空中阶段\",\n\tWarningLanded\t\t\t= \"萨菲隆降落了\",\n\tWarningDeepBreath\t\t= \"冰霜吐息\",\n\tSpecWarnSapphLow\t\t= \"萨菲隆不能飞！\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t\t\t= \"空中阶段\",\n\tTimerLanding\t\t\t= \"降落\",\n\tTimerIceBlast\t\t\t= \"冰霜吐息\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t\t= \"为空中阶段显示提前警报\",\n\tWarningAirPhaseNow\t\t= \"提示空中阶段\",\n\tWarningLanded\t\t\t= \"提示地上阶段\",\n\tTimerAir\t\t\t\t= \"为空中阶段显示计时条\",\n\tTimerLanding\t\t\t= \"为降落显示计时条\",\n\tTimerIceBlast\t\t\t= \"为冰霜吐息显示计时条\",\n\tWarningDeepBreath\t\t= \"为冰霜吐息显示特别警报\",\n\tSpecWarnSapphLow\t\t= \"10%执行阶段特别警告（取消空中阶段）\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t= \"%s深深地吸了一口气。\",\n\tAirPhase\t\t\t= \"萨菲隆缓缓升空！\",\n\tLandingPhase\t\t= \"萨菲隆再次发动了攻击！\"\n})\n\n------------------\n--  Kel'Thuzad  --\n------------------\nL = DBM:GetModLocalization(\"Kel'Thuzad-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"克尔苏加德\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t\t= \"10秒后克尔苏加德开始攻击\",\n\twarnAddsSoon\t\t= \"寒冰皇冠卫士即将出现\",\n\tWeaponsStatus\t\t= \"自动卸下武器开启: %s (%s - %s)\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t\t\t= \"第二阶段\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"为第二阶段显示计时条\",\n\tspecwarnP2Soon\t\t= \"为克尔苏加德攻击前10秒显示特别警报\",\n\twarnAddsSoon\t\t= \"为寒冰皇冠卫士显示提前警报\",\n\tWeaponsStatus\t\t= \"如果卸下/装备武器功能启用，在战斗开始时显示特殊警报\",\n\tEqUneqWeaponsKT\t\t= \"在 $spell:28410 之前和之后自动取消装备和装备武器。 需要名为“pve”的装备套装\",\n\tEqUneqWeaponsKT2\t= \"对你施放 $spell:28410 时自动解除和装备武器。 需要名为“pve”的装备套装\",\n\tRemoveBuffsOnMC\t\t= \"当$spell:28410对你施法时，移除BUFF。每个选项都是累积的。\",\n\tGift\t\t\t\t= \"移除$spell:48469 / $spell:48470。防止$spell:33786抵制的最简单方法。\",\n\tCCFree\t\t\t\t= \"+ 删除$spell:48169 / $spell:48170。考虑到阴影学派中法术的抵抗。\",\n\tShortOffensiveProcs\t= \"+ 删除持续时间短的攻击性程序。建议在不影响突击队伤害输出的情况下保证突击队的安全。\",\n\tMostOffensiveBuffs\t= \"+ 移除大部分攻击性BUFF（主要针对施法者和|cFFFF7C0A野性德鲁伊|r）。在损失伤害输出和需要自我补血/移形换影的情况下，最大限度地保证了突击队的安全！\"\n})\n\nL:SetMiscLocalization({\n\tYell\t\t\t\t= \"仆从们，侍卫们，隶属于黑暗与寒冷的战士们！听从克尔苏加德的召唤！\",\n\tYell1Phase2\t\t\t= \"祈祷我的慈悲吧！\", -- 12995\n\tYell2Phase2\t\t\t= \"呼出你的最后一口气！\", -- 12996\n\tYell3Phase2\t\t\t= \"你的末日临近了！\", -- 12997\n\tYellPhase3\t\t\t= \"主人，我需要帮助！\", -- 12998\n\tYellGuardians\t\t= \"很好，冰荒废土的战士们，起来吧！我命令你们为主人而战斗，杀戮，直到死亡！一个活口都不要留！\", -- 12994\n\tsetMissing\t\t\t= \"注意力！ 在您创建名为 pve 的装备集之前，DBM 自动武器卸载/装备将不起作用\",\n\tEqUneqLineDescription\t= \"自动装备/取消装备\"\n})\n"
  },
  {
    "path": "DBM-VanillaNaxx/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n-------------------\n--  Anub'Rekhan  --\n-------------------\nL = DBM:GetModLocalization(\"Anub'Rekhan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Anub'Rekhan\"\n})\n\nL:SetOptionLocalization({\n\tArachnophobiaTimer\t= \"Zeige Timer für Erfolg 'Arachnophobie'\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Arachnophobie\",\n\tPull1\t\t\t\t= \"Rennt! Das bringt das Blut in Wallung!\",\n\tPull2\t\t\t\t= \"Nur einmal kosten...\" --needs to be verified (wowhead-captured translation)\n})\n\n----------------------------\n--  Grand Widow Faerlina  --\n----------------------------\nL = DBM:GetModLocalization(\"Faerlina-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Großwitwe Faerlina\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t= \"Umarmung endet in 5 Sek\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t= \"Zeige Vorwarnung für das Ende von $spell:28732\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t\t= \"Kniet nieder, Wurm!\" --needs to be verified (wowhead-captured translation)\n})\n\n---------------\n--  Maexxna  --\n---------------\nL = DBM:GetModLocalization(\"Maexxna-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Maexxna\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t= \"Maexxnaspinnlinge in 5 Sek\",\n\tWarningSpidersNow\t= \"Maexxnaspinnlinge erschienen\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t= \"Nächste Maexxnaspinnlinge\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t= \"Zeige Vorwarnung für Maexxnaspinnlinge\",\n\tWarningSpidersNow\t= \"Zeige Warnung für Maexxnaspinnlinge\",\n\tTimerSpider\t\t\t= \"Zeige Zeit bis nächste Maexxnaspinnlinge erscheinen\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Arachnophobie\"\n})\n\n------------------------------\n--  Noth the Plaguebringer  --\n------------------------------\nL = DBM:GetModLocalization(\"Noth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Noth der Seuchenfürst\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Teleportiert\",\n\tWarningTeleportSoon\t= \"Teleport in 10 Sek\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t= \"Teleport\",\n\tTimerTeleportBack\t= \"Teleport zurück\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Zeige Warnung für Teleport\",\n\tWarningTeleportSoon\t= \"Zeige Vorwarnung für Teleport\",\n\tTimerTeleport\t\t= \"Zeige Zeit bis sich Noth auf den Balkon teleportiert\",\n\tTimerTeleportBack\t= \"Zeige Zeit bis sich Noth zurück teleportiert\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Sterbt, Eindringling!\",\n\tAdds\t\t\t\t= \"beschwört Skelettkrieger!\",\n\tAddsTwo\t\t\t\t= \"%s belebt mehr Skelette!\"\n})\n\n--------------------------\n--  Heigan the Unclean  --\n--------------------------\nL = DBM:GetModLocalization(\"Heigan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Heigan der Unreine\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Teleportiert\",\n\tWarningTeleportSoon\t= \"Teleport in %d Sek\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t= \"Teleport\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Zeige Warnung für Teleport\",\n\tWarningTeleportSoon\t= \"Zeige Vorwarnung für Teleport\",\n\tTimerTeleport\t\t= \"Zeige Zeit bis Teleport\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Ihr gehört mir...\"\n})\n\n---------------\n--  Loatheb  --\n---------------\nL = DBM:GetModLocalization(\"Loatheb-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Loatheb\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t= \"Heilung in 3 Sek möglich\",\n\tWarningHealNow\t= \"Jetzt heilen\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t= \"Zeige Vorwarnung für 3-Sekunden-Heilfenster\",\n\tWarningHealNow\t\t= \"Zeige Warnung für 3-Sekunden-Heilfenster\",\n\tSporeDamageAlert\t= \"Sende Flüsternachricht und verkünde Spieler in Raid die Sporen beschädigen\\n(benötigt aktivierte Ankündigungen und (L)- oder (A)-Status)\",\n\tCorruptedSorting\t= \"Set infoframe sorting behaviour for $spell:55593\", -- translation missing\n\tAlphabetical\t\t= \"Sort in alphabetical order\", -- translation missing\n\tDuration\t\t\t= \"Sort by duration\" -- translation missing\n})\n\n-----------------\n--  Patchwerk  --\n-----------------\nL = DBM:GetModLocalization(\"Patchwerk-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Flickwerk\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful\t= \"Verkünde Hasserfüllte Stöße im Raidchat\\n(benötigt aktivierte Ankündigungen und (L)- oder (A)-Status)\"\n})\n\nL:SetMiscLocalization({\n\tyell1\t\t\t= \"Flickwerk spielen möchte!\",\n\tyell2\t\t\t= \"Kel’Thuzad macht Flickwerk zu seinem Abgesandten des Kriegs!\",\n\tHatefulStrike\t= \"Hasserfüllter Stoß --> %s [%s]\"\n})\n\n-----------------\n--  Grobbulus  --\n-----------------\nL = DBM:GetModLocalization(\"Grobbulus-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Grobbulus\"\n})\n\n-------------\n--  Gluth  --\n-------------\nL = DBM:GetModLocalization(\"Gluth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Gluth\"\n})\n\n----------------\n--  Thaddius  --\n----------------\nL = DBM:GetModLocalization(\"Thaddius-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Thaddius\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t= \"Polarität geändert zu %s\",\n\tWarningChargeNotChanged\t= \"Polarität hat sich nicht geändert\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t= \"Spezialwarnung, wenn deine Polarität gewechselt hat\",\n\tWarningChargeNotChanged\t= \"Spezialwarnung, wenn deine Polarität nicht gewechselt hat\",\n\tArrowsEnabled\t\t\t= \"Zeige Pfeile (normale \\\"2-Camps\\\"-Strategie)\",\n\tArrowsRightLeft\t\t\t= \"Zeige Links-/Rechtspfeil für die \\\"4-Camps\\\"-Strategie<br/>(Linkspfeil bei Polaritätsänderung, Rechtspfeil bei keiner Änderung)\",\n\tArrowsInverse\t\t\t= \"Umgedrehte \\\"4-Camps\\\"-Strategie<br/>(Rechtspfeil bei Polaritätsänderung, Linkspfeil bei keiner Änderung)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t= \"Stalagg zerquetschen!\",\n\tEmote\t= \"%s überlädt!\",\n\tEmote2\t= \"Teslaspule überlädt!\",\n\tBoss1\t= \"Feugen\",\n\tBoss2\t= \"Stalagg\",\n\tCharge1 = \"negativ\",\n\tCharge2 = \"positiv\"\n})\n\n----------------------------\n--  Instructor Razuvious  --\n----------------------------\nL = DBM:GetModLocalization(\"Razuvious-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Instrukteur Razuvious\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t= \"Knochenbarriere endet in 5 Sekunden\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t= \"Zeige Vorwarnung, wenn $spell:29061 endet\"\n})\n\nL:SetMiscLocalization({\n\tYell1 = \"Lasst keine Gnade walten!\",\n\tYell2 = \"Die Zeit des Übens ist vorbei! Zeigt mir, was ihr gelernt habt!\",\n\tYell3 = \"Befolgt meine Befehle!\",\n\tYell4 = \"Streckt sie nieder... oder habt ihr ein Problem damit?\"\n})\n\n----------------------------\n--  Gothik the Harvester  --\n----------------------------\nL = DBM:GetModLocalization(\"Gothik-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Gothik der Ernter\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t= \"Welle %d: %s in 3 Sek\",\n\tWarningWaveSpawned\t= \"Welle %d: %s erschienen\",\n\tWarningRiderDown\t= \"Reiter tot\",\n\tWarningKnightDown\t= \"Ritter tot\",\n\tWarningPhase2\t\t= \"Phase 2\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"Welle %d\",\n\tTimerPhase2\t= \"Phase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"Zeige Zeit bis nächste Welle\",\n\tTimerPhase2\t\t\t= \"Zeige Zeit bis Phase 2\",\n\tWarningWaveSoon\t\t= \"Warne, wenn bald eine neue Welle kommt\",\n\tWarningWaveSpawned\t= \"Warne, wenn eine neue Welle kommt\",\n\tWarningRiderDown\t= \"Zeige Warnung, wenn ein Unerbittlicher Reiter stirbt\",\n\tWarningKnightDown\t= \"Zeige Warnung, wenn ein Unerbittlicher Todesritter stirbt\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t= \"Ihr Narren habt euren eigenen Untergang heraufbeschworen.\",\n\tWarningWave1\t= \"%d %s\",\n\tWarningWave2\t= \"%d %s und %d %s\",\n\tWarningWave3\t= \"%d %s, %d %s und %d %s\",\n\tTrainee\t\t\t= \"Lehrlinge\",\n\tKnight\t\t\t= \"Ritter\",\n\tRider\t\t\t= \"Reiter\"\n})\n\n---------------------\n--  Four Horsemen  --\n---------------------\nL = DBM:GetModLocalization(\"Horsemen-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Die vier Reiter\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Mal %d in 3 Sekunden\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Zeige Vorwarnung für Mal\",\n\tSpecialWarningMarkOnPlayer\t= \"Spezialwarnung, wenn sich ein Mal mehr als 4-mal auf dir stapelt\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t= \"Than Korth'azz\",\n\tRivendare\t= \"Baron Totenschwur\",\n\tBlaumeux\t= \"Lady Blaumeux\",\n\tZeliek\t\t= \"Sir Zeliek\"\n})\n\n-----------------\n--  Sapphiron  --\n-----------------\nL = DBM:GetModLocalization(\"Sapphiron-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Saphiron\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t= \"Luftphase in 10 Sek\",\n\tWarningAirPhaseNow\t= \"Luftphase\",\n\tWarningLanded\t\t= \"Bodenphase\",\n\tWarningDeepBreath\t= \"Frostatem\",\n\tSpecWarnSapphLow\t= \"Saphiron kann nicht fliegen!\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t= \"Nächste Luftphase\",\n\tTimerLanding\t= \"Nächste Bodenphase\",\n\tTimerIceBlast\t= \"Frostatem\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t= \"Zeige Vorwarnung, wenn Saphiron bald abhebt\",\n\tWarningAirPhaseNow\t= \"Zeige Warnung, wenn Saphiron abhebt\",\n\tWarningLanded\t\t= \"Zeige Warnung, wenn Saphiron landet\",\n\tTimerAir\t\t\t= \"Zeige Zeit bis nächste Luftphase\",\n\tTimerLanding\t\t= \"Zeige Zeit bis nächste Bodenphase\",\n\tTimerIceBlast\t\t= \"Zeige Zeit bis $spell:28524\",\n\tWarningDeepBreath\t= \"Spezialwarnung für $spell:28524\",\n\tSpecWarnSapphLow\t= \"Sonderwarnung für 10 % Ausführungsphase (Luftphase abbrechen)\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t= \"%s holt tief Luft.\",\n\tAirPhase\t\t\t= \"Saphiron erhebt sich in die Lüfte!\",\n\tLandingPhase\t\t= \"Saphiron nimmt seine Angriffe wieder auf!\"\n})\n\n------------------\n--  Kel'Thuzad  --\n------------------\nL = DBM:GetModLocalization(\"Kel'Thuzad-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Kel'Thuzad\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t= \"Kel'Thuzad greift in 10 Sekunden an\",\n\twarnAddsSoon\t= \"Wächter von Eiskrone bald\",\n\tWeaponsStatus\t= \"Automatisches Entwaffnen aktiv: %s (%s - %s)\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t= \"Phase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"Zeige Zeit bis Phase 2\",\n\tspecwarnP2Soon\t\t= \"Spezialwarnung 10 Sekunden bevor Kel'Thuzad angreift\",\n\twarnAddsSoon\t\t= \"Zeige Vorwarnung für Wächter von Eiskrone\",\n\tWeaponsStatus\t\t= \"Zeige Spezialwarnung bei Kampfbeginn, wenn automatisches Be-/Entwaffnen aktiviert ist\",\n\tEqUneqWeaponsKT\t\t= \"Waffen vor und nach $spell:28410 automatisch aus- und ausrüsten. Benötigt Ausrüstungsset namens \\\"pve\\\"\",\n\tEqUneqWeaponsKT2\t= \"Waffen automatisch ablegen und ausrüsten, wenn $spell:28410 auf DICH gewirkt wird. Benötigt Ausrüstungsset namens \\\"pve\\\"\",\n\tRemoveBuffsOnMC\t\t= \"Entferne Buffs, wenn $spell:28410 auf dich gewirkt wird. Jede Option ist kumulativ.\",\n\tGift\t\t\t\t= \"Entferne $spell:48469 / $spell:48470. Minimaler Ansatz, um $spell:33786 Resistenzen zu verhindern.\",\n\tCCFree\t\t\t\t= \"+ Entferne $spell:48169 / $spell:48170. Berücksichtige die Resistenzen von Zaubern der Schattenschule.\",\n\tShortOffensiveProcs\t= \"+ Entferne offensive Procs, die eine geringe Dauer haben. Empfohlen für die Sicherheit des Schlachtzugs, ohne den Schadensoutput des Schlachtzugs zu beeinträchtigen.\",\n\tMostOffensiveBuffs\t= \"+ Entfernt die meisten offensiven Buffs (hauptsächlich für Zauberwirker und |cFFFF7C0AWildheit-Druide|r). Maximale Schlachtzugsicherheit bei gleichzeitigem Verlust des Schadensoutputs und der Notwendigkeit, sich selbst zu rebuffen/shapeshiften!\"\n})\n\nL:SetMiscLocalization({\n\tYell = \"Lakaien, Diener, Soldaten der eisigen Finsternis! Folgt dem Ruf von Kel'Thuzad!\",\n\tYell1Phase2 = \"Betet um Gnade!\", -- 12995\n\tYell2Phase2 = \"Schreiend werdet ihr diese Welt verlassen!\", -- 12996\n\tYell3Phase2 = \"Euer Ende ist gekommen!\", -- 12997\n\tYellPhase3 = \"Meister, ich benötige Beistand.\", -- 12998\n\tYellGuardians = \"Wohlan, Krieger der Eisigen Weiten, erhebt euch! Ich befehle euch für euren Meister zu kämpfen, zu töten und zu sterben! Keiner darf überleben!\", -- 12994\n\tsetMissing\t= \"AUFMERKSAMKEIT! Das automatische Ausrüsten/Ausrüsten von DBM-Waffen funktioniert erst, wenn Sie ein Ausrüstungsset namens pve . erstellen\",\n\tEqUneqLineDescription\t= \"Automatisches An-/Ablegen\"\n})\n"
  },
  {
    "path": "DBM-VanillaNaxx/localization.en.lua",
    "content": "local L\n\n-------------------\n--  Anub'Rekhan  --\n-------------------\nL = DBM:GetModLocalization(\"Anub'Rekhan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Anub'Rekhan\"\n})\n\nL:SetOptionLocalization({\n\tArachnophobiaTimer\t= \"Show timer for Arachnophobia (achievement)\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Arachnophobia\",\n\tPull1\t\t\t\t= \"Yes, run! It makes the blood pump faster!\",\n\tPull2\t\t\t\t= \"Just a little taste...\"\n})\n\n----------------------------\n--  Grand Widow Faerlina  --\n----------------------------\nL = DBM:GetModLocalization(\"Faerlina-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Grand Widow Faerlina\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t= \"Widow's Embrace ends in 5 seconds\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t= \"Show pre-warning for $spell:28732 fade\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t\t= \"Kneel before me, worm!\"--Not actually pull trigger, but often said on pull\n})\n\n---------------\n--  Maexxna  --\n---------------\nL = DBM:GetModLocalization(\"Maexxna-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Maexxna\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t= \"Maexxna Spiderlings in 5 seconds\",\n\tWarningSpidersNow\t= \"Maexxna Spiderlings spawned\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t= \"Next Maexxna Spiderlings\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t= \"Show pre-warning for Maexxna Spiderlings\",\n\tWarningSpidersNow\t= \"Show warning for Maexxna Spiderlings\",\n\tTimerSpider\t\t\t= \"Show timer for next Maexxna Spiderlings\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Arachnophobia\"\n})\n\n------------------------------\n--  Noth the Plaguebringer  --\n------------------------------\nL = DBM:GetModLocalization(\"Noth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Noth the Plaguebringer\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Teleported\",\n\tWarningTeleportSoon\t= \"Teleport in 10 seconds\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t= \"Teleport\",\n\tTimerTeleportBack\t= \"Teleport back\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Show warning for Teleport\",\n\tWarningTeleportSoon\t= \"Show pre-warning for Teleport\",\n\tTimerTeleport\t\t= \"Show timer for Teleport\",\n\tTimerTeleportBack\t= \"Show timer for Teleport back\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Die, trespasser!\",\n\tAdds\t\t\t\t= \"summons forth Skeletal Warriors!\",\n\tAddsTwo\t\t\t\t= \"raises more skeletons!\"\n})\n\n--------------------------\n--  Heigan the Unclean  --\n--------------------------\nL = DBM:GetModLocalization(\"Heigan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Heigan the Unclean\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Teleported\",\n\tWarningTeleportSoon\t= \"Teleport in %d seconds\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t= \"Teleport\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Show warning for Teleport\",\n\tWarningTeleportSoon\t= \"Show pre-warning for Teleport\",\n\tTimerTeleport\t\t= \"Show timer for Teleport\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"You are mine now.\"\n})\n\n---------------\n--  Loatheb  --\n---------------\nL = DBM:GetModLocalization(\"Loatheb-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Loatheb\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t= \"Healing possible in 3 seconds\",\n\tWarningHealNow\t= \"Heal now\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t= \"Show pre-warning for 3-second healing window\",\n\tWarningHealNow\t\t= \"Show warning for 3-second healing window\",\n\tSporeDamageAlert\t= \"Send whisper to and announce to raid players who damage spores\\n(requires announce to be enabled and leader/promoted status)\",\n\tCorruptedSorting\t= \"Set infoframe sorting behaviour for $spell:55593\",\n\tAlphabetical\t\t= \"Sort in alphabetical order\",\n\tDuration\t\t\t= \"Sort by duration\"\n})\n\n-----------------\n--  Patchwerk  --\n-----------------\nL = DBM:GetModLocalization(\"Patchwerk-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Patchwerk\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful\t= \"Post Hateful Strike targets to raid chat\\n(requires announce to be enabled and leader/promoted status)\"\n})\n\nL:SetMiscLocalization({\n\tyell1\t\t\t= \"Patchwerk want to play!\",\n\tyell2\t\t\t= \"Kel'thuzad make Patchwerk his avatar of war!\",\n\tHatefulStrike\t= \"Hateful Strike --> %s [%s]\"\n})\n\n-----------------\n--  Grobbulus  --\n-----------------\nL = DBM:GetModLocalization(\"Grobbulus-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Grobbulus\"\n})\n\n-------------\n--  Gluth  --\n-------------\nL = DBM:GetModLocalization(\"Gluth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Gluth\"\n})\n\n----------------\n--  Thaddius  --\n----------------\nL = DBM:GetModLocalization(\"Thaddius-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Thaddius\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t= \"Polarity changed to %s\",\n\tWarningChargeNotChanged\t= \"Polarity did not change\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t= \"Show special warning when your polarity changed\",\n\tWarningChargeNotChanged\t= \"Show special warning when your polarity did not change\",\n\tArrowsEnabled\t\t\t= \"Show arrows during $spell:28089\",\n\tTwoCamp\t\t\t\t\t= \"Show arrows (normal \\\"2 camp\\\" run through strategy)\",\n\tArrowsRightLeft\t\t\t= \"Show left/right arrows for the \\\"4 camp\\\" strategy (show left arrow if polarity changed, right if not)\",\n\tArrowsInverse\t\t\t= \"Inverse \\\"4 camp\\\" strategy (show right arrow if polarity changed, left if not)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t= \"Stalagg crush you!\",\n\tEmote\t= \"%s overloads!\",\n\tEmote2\t= \"Tesla Coil overloads!\",\n\tBoss1\t= \"Feugen\",\n\tBoss2\t= \"Stalagg\",\n\tCharge1 = \"negative\",\n\tCharge2 = \"positive\"\n})\n\n----------------------------\n--  Instructor Razuvious  --\n----------------------------\nL = DBM:GetModLocalization(\"Razuvious-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Instructor Razuvious\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t= \"Shield Wall ends in 5 seconds\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t= \"Show pre-warning for Shield Wall ending\"\n})\n\nL:SetMiscLocalization({\n\tYell1 = \"Show them no mercy!\",\n\tYell2 = \"The time for practice is over! Show me what you have learned!\",\n\tYell3 = \"Do as I taught you!\",\n\tYell4 = \"Sweep the leg... Do you have a problem with that?\"\n})\n\n----------------------------\n--  Gothik the Harvester  --\n----------------------------\nL = DBM:GetModLocalization(\"Gothik-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Gothik the Harvester\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t= \"Wave %d: %s in 3 sec\",\n\tWarningWaveSpawned\t= \"Wave %d: %s spawned\",\n\tWarningRiderDown\t= \"Rider down\",\n\tWarningKnightDown\t= \"Knight down\",\n\tWarningPhase2\t\t= \"Phase 2\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"Wave %d\",\n\tTimerPhase2\t= \"Phase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"Show timer for next wave\",\n\tTimerPhase2\t\t\t= \"Show timer for Phase 2\",\n\tWarningWaveSoon\t\t= \"Show pre-warning for wave\",\n\tWarningWaveSpawned\t= \"Show warning for wave spawned\",\n\tWarningRiderDown\t= \"Show warning when an Unrelenting Rider dies\",\n\tWarningKnightDown\t= \"Show warning when an Unrelenting Death Knight dies\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t= \"Foolishly you have sought your own demise.\",\n\tWarningWave1\t= \"%d %s\",\n\tWarningWave2\t= \"%d %s and %d %s\",\n\tWarningWave3\t= \"%d %s, %d %s and %d %s\",\n\tTrainee\t\t\t= \"Trainees\",\n\tKnight\t\t\t= \"Knights\",\n\tRider\t\t\t= \"Riders\"\n})\n\n---------------------\n--  Four Horsemen  --\n---------------------\nL = DBM:GetModLocalization(\"Horsemen-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Four Horsemen\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Mark %d in 3 seconds\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Show pre-warning for Mark\",\n\tSpecialWarningMarkOnPlayer\t= \"Show special warning when you are affected by more than 4 marks\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t= \"Thane Korth'azz\",\n\tRivendare\t= \"Baron Rivendare\",\n\tBlaumeux\t= \"Lady Blaumeux\",\n\tZeliek\t\t= \"Sir Zeliek\"\n})\n\n-----------------\n--  Sapphiron  --\n-----------------\nL = DBM:GetModLocalization(\"Sapphiron-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Sapphiron\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t= \"Air phase in 10 seconds\",\n\tWarningAirPhaseNow\t= \"Air phase\",\n\tWarningLanded\t\t= \"Sapphiron landed\",\n\tSpecWarnSapphLow\t= \"Sapphiron can't fly!\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t= \"Air phase\",\n\tTimerLanding\t= \"Landing\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t= \"Show pre-warning for air phase\",\n\tWarningAirPhaseNow\t= \"Announce air phase\",\n\tWarningLanded\t\t= \"Announce ground phase\",\n\tTimerAir\t\t\t= \"Show timer for air phase\",\n\tTimerLanding\t\t= \"Show timer for landing\",\n\tSpecWarnSapphLow\t= \"Special warning for 10% execute phase (cancel air phase)\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t= \"%s takes a deep breath.\",\n\tAirPhase\t\t\t= \"Sapphiron lifts off into the air!\",\n\tLandingPhase\t\t= \"Sapphiron resumes his attacks!\"\n})\n\n------------------\n--  Kel'Thuzad  --\n------------------\nL = DBM:GetModLocalization(\"Kel'Thuzad-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Kel'Thuzad\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t= \"Kel'Thuzad engages in 10 Seconds\",\n\twarnAddsSoon\t= \"Guardians of Icecrown incoming soon\",\n\tWeaponsStatus\t= \"Auto Unequip/Equip weapons: %s (%s - %s)\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t= \"Phase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"Show timer for Phase 2\",\n\tspecwarnP2Soon\t\t= \"Show special warning 10 seconds before Kel'Thuzad engages\",\n\twarnAddsSoon\t\t= \"Show pre-warning for Guardians of Icecrown\",\n\tWeaponsStatus\t\t= \"Show special warning at combat start if unequip/equip function is enabled\",\n\tEqUneqWeaponsKT\t\t= \"Automatically unequip and equip weapons on a timer, before and after $spell:28410. Requires a COMPLETE (with the weapons of choice that will be equipped) equipment set named \\\"pve\\\"\",\n\tEqUneqWeaponsKT2\t= \"Automatically unequip and equip weapons when $spell:28410 is cast on YOU. Requires a COMPLETE (with the weapons of choice that will be equipped) equipment set named \\\"pve\\\"\",\n\tRemoveBuffsOnMC\t\t= \"Remove buffs when $spell:28410 is cast on you. Each option is cumulative.\",\n\tNever\t\t\t\t= NEVER, -- don't translate,\n\tGift\t\t\t\t= \"Remove $spell:48469 / $spell:48470. Minimal approach to prevent $spell:33786 resists.\",\n\tCCFree\t\t\t\t= \"+ Remove $spell:48169 / $spell:48170. Account for resists of spells in the Shadow school.\",\n\tShortOffensiveProcs\t= \"+ Remove offensive procs that have a low duration. Recommended for raid safety without compromising raid damage output.\",\n\tMostOffensiveBuffs\t= \"+ Remove most offensive buffs (mainly for Casters and |cFFFF7C0AFeral Druids|r). Maximum raid safety with loss of damage output and need to self-rebuff/shapeshift!\",\n\tEqUneqFilter\t\t= FILTER, -- don't translate\n\tOnlyDPS\t\t\t\t= DBM_COMMON_L.DAMAGE_ICON, -- don't translate\n\tDPSTank\t\t\t\t= DBM_COMMON_L.DAMAGE_ICON..DBM_COMMON_L.TANK_ICON, -- don't translate\n\tNoFilter\t\t\t= DBM_COMMON_L.DAMAGE_ICON..DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.HEALER_ICON -- don't translate\n})\n\nL:SetMiscLocalization({\n\tYell\t\t= \"Minions, servants, soldiers of the cold dark! Obey the call of Kel'Thuzad!\",\n--\tYellMC1\t\t= \"Your soul is bound to me, now!\",\n--\tYellMC2\t\t= \"There will be no escape!\",\n\tYell1Phase2\t= \"Pray for mercy!\", -- 12995\n\tYell2Phase2\t= \"Scream your dying breath!\", -- 12996\n\tYell3Phase2\t= \"The end is upon you!\", -- 12997\n\tYellPhase3\t= \"Master, I require aid!\", -- 12998\n\tYellGuardians\t= \"Very well. Warriors of the frozen wastes, rise up! I command you to fight, kill and die for your master! Let none survive!\", -- 12994\n\tsetMissing\t= \"ATTENTION! DBM automatic weapon unequipping/equipping will not work until you create a equipment set named pve\",\n\tEqUneqLineDescription\t= \"Automatic Equip/Unequip\"\n})\n"
  },
  {
    "path": "DBM-VanillaNaxx/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" then return end\nlocal L\n\n-----------------\n-- Anub'Rekhan --\n-----------------\nL = DBM:GetModLocalization(\"Anub'Rekhan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Anub'Rekhan\"\n})\n\nL:SetOptionLocalization({\n\tArachnophobiaTimer\t= \"Mostrar temporizador para el logro 'Aracnofobia'\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Logro: Aracnofobia\",\n\tPull1\t\t\t\t= \"¡Eso, corred! ¡Así la sangre circula más rápido!\",\n\tPull2\t\t\t\t= \"Solo un bocado...\"\n})\n\n-------------------------\n-- Gran Viuda Faerlina --\n-------------------------\nL = DBM:GetModLocalization(\"Faerlina-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Gran Viuda Faerlina\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t= \"Abrazo de la viuda expirando en 5 s\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t= \"Mostrar aviso previo para cuando expire Abrazo de la viuda\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t\t= \"¡Arrodíllate ante mí, sabandija!\"--Not actually pull trigger, but often said on pull\n})\n\n-------------\n-- Maexxna --\n-------------\nL = DBM:GetModLocalization(\"Maexxna-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Maexxna\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t= \"Arañitas de Maexxna en 5 s\",\n\tWarningSpidersNow\t= \"Arañitas de Maexxna\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t= \"Siguientes arañitas\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t= \"Mostrar aviso previo para cuando aparezcan Arañitas de Maexxna\",\n\tWarningSpidersNow\t= \"Mostrar aviso cuando aparezcan Arañitas de Maexxna\",\n\tTimerSpider\t\t\t= \"Mostrar temporizador para las siguientes Arañitas de Maexxna\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Logro: Aracnofobia\"\n})\n\n-----------------------\n-- Noth el Pesteador --\n-----------------------\nL = DBM:GetModLocalization(\"Noth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Noth el Pesteador\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Teletransporte\",\n\tWarningTeleportSoon\t= \"Teletransporte en 10 s\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t= \"Teletransporte: Balcón\",\n\tTimerTeleportBack\t= \"Teletransporte: Suelo\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Mostrar aviso para Teletransporte\",\n\tWarningTeleportSoon\t= \"Mostrar aviso previo para Teletransporte\",\n\tTimerTeleport\t\t= \"Mostrar temporizador para el siguiente Teletransporte: Balcón\",\n\tTimerTeleportBack\t= \"Mostrar temporizador para Teletransporte: Suelo\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"¡Muere, intruso!\",\n\tAdds\t\t\t\t= \"invoca a guerreros esqueletos!\",\n\tAddsTwo\t\t\t\t= \"alza más esqueletos!\"\n})\n\n----------------------\n-- Heigan el Impuro --\n----------------------\nL = DBM:GetModLocalization(\"Heigan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Heigan el Impuro\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Teletransporte\",\n\tWarningTeleportSoon\t= \"Teletransporte en %d s\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t= \"Teletransporte\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Mostrar aviso para Teletransporte\",\n\tWarningTeleportSoon\t= \"Mostrar aviso previo para Teletransporte\",\n\tTimerTeleport\t\t= \"Mostrar aviso para Teletransporte\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Ahora me perteneces.\"\n})\n\n-------------\n-- Loatheb --\n-------------\nL = DBM:GetModLocalization(\"Loatheb-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Loatheb\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t= \"Sanación posible en 3 s\",\n\tWarningHealNow\t= \"¡Sanad ahora!\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t= \"Mostrar aviso previo para la franja de sanación\",\n\tWarningHealNow\t\t= \"Mostrar aviso para la franja de sanación\",\n\tSporeDamageAlert\t= \"Enviar susurros y avisar a la banda de los jugadores que estén dañando esporas\\n(necesita 'anunciar' activado y lider/ayudante)\",\n\tCorruptedSorting\t= \"Set infoframe sorting behaviour for $spell:55593\", -- translation missing\n\tAlphabetical\t\t= \"Sort in alphabetical order\", -- translation missing\n\tDuration\t\t\t= \"Sort by duration\" -- translation missing\n})\n\n---------------\n-- Remendejo --\n---------------\nL = DBM:GetModLocalization(\"Patchwerk-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Remendejo\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful = \"Avisar por chat de banda los Golpes de Odio (necesitas ser ayudante o lider para eso)\"\n})\n\nL:SetMiscLocalization({\n\tyell1 = \"¡Remendejo quiere jugar!\",\n\tyell2 = \"¡Remendejo es la encarnación de guerra de Kel'Thuzad!\",\n\tHatefulStrike = \"Golpe de Odio --> %s [%s]\"\n})\n\n---------------\n-- Grobbulus --\n---------------\nL = DBM:GetModLocalization(\"Grobbulus-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Grobbulus\"\n})\n\n-----------\n-- Gluth --\n-----------\nL = DBM:GetModLocalization(\"Gluth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Gluth\"\n})\n\n--------------\n-- Thaddius --\n--------------\nL = DBM:GetModLocalization(\"Thaddius-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Thaddius\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t= \"Polaridad cambiada a %s\",\n\tWarningChargeNotChanged\t= \"Tu polaridad no ha cambiado\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t= \"Mostrar aviso especial cuando tu polaridad cambie\",\n\tWarningChargeNotChanged\t= \"Mostrar aviso especial cuando tu polaridad no cambie\",\n\tArrowsEnabled\t\t\t= \"Mostrar flechas (estrategia típica de dos grupos)\",\n\tArrowsRightLeft\t\t\t= \"Mostrar flechas de izquierda y derecha (estrategia de cuatro grupos; muestra la flecha izquierda si cambia la polaridad, y la derecha si no cambia)\",\n\tArrowsInverse\t\t\t= \"Mostrar flechas de izquierda y derecha inversas (estrategia de cuatro grupos; muestra la flecha derecha si cambia la polaridad, y la izquierda si no cambia)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t= \"¡Stalagg aplasta!\",\n\tEmote\t= \"¡%s se sobrecarga!\",\n\tEmote2\t= \"¡Espiral Tesla se sobrecarga!\",\n\tBoss1\t= \"Feugen\",\n\tBoss2\t= \"Stalagg\",\n\tCharge1 = \"negativo\",\n\tCharge2 = \"positivo\"\n})\n\n--------------------------\n-- Instructor Razuvious --\n--------------------------\nL = DBM:GetModLocalization(\"Razuvious-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Instructor Razuvious\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t= \"Barrera de huesos termina en 5 s\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t= \"Mostrar aviso previo para cuando termine $spell:29061\"\n})\n\nL:SetMiscLocalization({\n\tYell1 = \"¡No tengáis piedad!\",\n\tYell2 = \"¡El tiempo de practicar ha pasado! ¡Quiero ver lo que habéis aprendido!\",\n\tYell3 = \"¡Poned en práctica lo que os he enseñado!\",\n\tYell4 = \"Un barrido con pierna... ¿Tienes algún problema?\"\n})\n\n--------------------------\n-- Gothik el Cosechador --\n--------------------------\nL = DBM:GetModLocalization(\"Gothik-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Gothik el Cosechador\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t= \"Oleada %d: %s en 3 s\",\n\tWarningWaveSpawned\t= \"Oleada %d: %s\",\n\tWarningRiderDown\t= \"Jinete muerto\",\n\tWarningKnightDown\t= \"Caballero muerto\",\n\tWarningPhase2\t\t= \"Fase 2\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"Oleada %d\",\n\tTimerPhase2\t= \"Fase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"Mostrar temporizador para la siguiente oleada de esbirros\",\n\tTimerPhase2\t\t\t= \"Mostrar temporizador para el cambio a Fase 2\",\n\tWarningWaveSoon\t\t= \"Mostrar aviso previo para la siguiente oleada de esbirros\",\n\tWarningWaveSpawned\t= \"Mostrar aviso cuando comience una oleada de esbirros\",\n\tWarningRiderDown\t= \"Mostrar aviso cuando muera un Jinete inflexible\",\n\tWarningKnightDown\t= \"Mostrar aviso cuando muera un Caballero de la Muerte inflexible\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t= \"Tú mismo has buscado tu final.\",\n\tWarningWave1\t= \"%d %s\",\n\tWarningWave2\t= \"%d %s y %d %s\",\n\tWarningWave3\t= \"%d %s, %d %s y %d %s\",\n\tTrainee\t\t\t= \"practicantes\",\n\tKnight\t\t\t= \"caballeros\",\n\tRider\t\t\t= \"jinetes\"\n})\n\n------------------------\n-- Los Cuatro Jinetes --\n------------------------\nL = DBM:GetModLocalization(\"Horsemen-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Los Cuatro Jinetes\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Marca %d en 3 s\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Mostrar aviso previo para las marcas\",\n\tSpecialWarningMarkOnPlayer\t= \"Mostrar aviso especial cuando estés afectado por más de cuatro marcas\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t= \"Señor feudal Korth'azz\",\n\tRivendare\t= \"Barón Osahendido\",\n\tBlaumeux\t= \"Lady Blaumeux\",\n\tZeliek\t\t= \"Sir Zeliek\"\n})\n\n---------------\n-- Sapphiron --\n---------------\nL = DBM:GetModLocalization(\"Sapphiron-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Sapphiron\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t= \"Fase aérea en 10 s\",\n\tWarningAirPhaseNow\t= \"Fase aérea\",\n\tWarningLanded\t\t= \"Fase en tierra\",\n\tWarningDeepBreath\t= \"Aliento de Escarcha\",\n\tSpecWarnSapphLow\t= \"¡Sapphiron no puede volar!\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t= \"Fase aérea\",\n\tTimerLanding\t= \"Fase en tierra\",\n\tTimerIceBlast\t= \"Aliento de Escarcha\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t= \"Mostrar aviso previo para el cambio a fase aérea\",\n\tWarningAirPhaseNow\t= \"Anunciar cambio a fase aérea\",\n\tWarningLanded\t\t= \"Anunciar cambio a fase en tierra\",\n\tTimerAir\t\t\t= \"Mostrar temporizador para el cambio a fase aérea\",\n\tTimerLanding\t\t= \"Mostrar temporizador para el cambio a fase en tierra\",\n\tTimerIceBlast\t\t= \"Mostrar temporizador para $spell:28524\",\n\tWarningDeepBreath\t= \"Mostrar aviso especial para $spell:28524\",\n\tSpecWarnSapphLow\t= \"Advertencia especial para fase de ejecución del 10% (cancelación de fase de aire)\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t= \"%s respira hondo.\",\n\tAirPhase\t\t\t= \"¡Sapphiron se eleva en el aire!\",\n\tLandingPhase\t\t= \"¡Sapphiron reanuda su ataque!\"\n})\n\n----------------\n-- Kel'Thuzad --\n----------------\nL = DBM:GetModLocalization(\"Kel'Thuzad-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Kel'Thuzad\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t= \"Fase 2 en 10 s\",\n\twarnAddsSoon\t= \"Guardianes de Corona de Hielo en breve\",\n\tWeaponsStatus\t= \"Desequipar automático habilitado: %s (%s - %s)\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t= \"Fase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"Mostrar temporizador para el cambio a Fase 2\",\n\tspecwarnP2Soon\t\t= \"Mostrar aviso especial 10 s antes del cambio a Fase 2\",\n\twarnAddsSoon\t\t= \"Mostrar aviso previo para cuando aparezcan los Guardianes de Corona de Hielo\",\n\tWeaponsStatus\t\t= \"Advertencia especial al inicio del combate si la función desequipar/equipar está habilitada\",\n\tEqUneqWeaponsKT\t\t= \"Desequipar y equipar armas automáticamente con temporizador, antes y después del $spell:28410. Requiere equipamiento llamado \\\"pve\\\"\",\n\tEqUneqWeaponsKT2\t= \"Desequipar y equipar armas automáticamente cuando se lanza $spell:28410 sobre USTED. Requiere equipamiento llamado \\\"pve\\\"\",\n\tRemoveBuffsOnMC\t\t= \"Elimina los buffs cuando $spell:28410 es lanzado sobre ti. Cada opción es acumulativa\",\n\tGift\t\t\t\t= \"Eliminar $spell:48469 / $spell:48470. Enfoque mínimo para evitar que $spell:33786 se resista\",\n\tCCFree\t\t\t\t= \"+ Eliminar $spell:48169 / $spell:48170. Tener en cuenta las resistencias de los hechizos de la escuela Sombra\",\n\tShortOffensiveProcs\t= \"+ Elimina los procs ofensivos de baja duración. Recomendado para la seguridad de la raid sin comprometer la producción de daño de la raid\",\n\tMostOffensiveBuffs\t= \"+ Elimina la mayoría de los buffs ofensivos (principalmente para los Casters y los |cFFFF7C0ADruidas Ferales|r). Máxima seguridad en la incursión con la pérdida de daño y la necesidad de auto-buff/cambio de forma\"\n})\n\nL:SetMiscLocalization({\n\tYell\t\t= \"¡Esbirros, sirvientes, soldados de la fría oscuridad! ¡Obedeced la llamada de Kel'Thuzad!\",\n\tYell1Phase2\t= \"¡Pedid misericordia!\", -- 12995\n\tYell2Phase2\t= \"¡Gritad antes de vuestro último suspiro!\", -- 12996\n\tYell3Phase2\t= \"¡Vuestra hora ha llegado!\", -- 12997\n\tYellPhase3\t= \"¡Maestro, necesito ayuda!\", -- 12998\n\tYellGuardians\t= \"Muy bien. ¡Guerreros del desierto helado! ¡Levantaos, os ordeno luchar, matar y morir por vuestro maestro! ¡Que no sobreviva ninguno!\", -- 12994\n\tsetMissing\t= \"¡ATENCIÓN! El desequipamiento / equipamiento automático de armas de DBM no funcionará hasta que cree un equipamiento llamado pve\",\n\tEqUneqLineDescription\t= \"Equipar/desequipar automático\"\n})\n"
  },
  {
    "path": "DBM-VanillaNaxx/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\n\nlocal L\n\n-------------------\n--  Anub'Rekhan  --\n-------------------\nL = DBM:GetModLocalization(\"Anub'Rekhan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Anub'Rekhan\"\n})\n\nL:SetOptionLocalization({\n\tArachnophobiaTimer\t= \"Activer le timer pour l'arachnophobie (HAUT-FAIT)\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Arachnophobie\",\n\tPull1\t\t\t\t= \"Oui, courez ! Faites circuler le sang !\",\n\tPull2\t\t\t\t= \"Rien qu'une petite bouchée…\"\n})\n\n----------------------------\n--  Grand Widow Faerlina  --\n----------------------------\nL = DBM:GetModLocalization(\"Faerlina-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Grande Veuve Faerlina\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t= \"Fin du baisé de la veuve dans 5 sec\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t= \"Activer l'avertissement de fin du baisé de la veuve\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t\t= \"À genoux, vermisseau !\"--Not actually pull trigger, but often said on pull\n})\n\n---------------\n--  Maexxna  --\n---------------\nL = DBM:GetModLocalization(\"Maexxna-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Maexxna\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t= \"Araignées dans 5 sec\",\n\tWarningSpidersNow\t= \"Arrivée des araignées!\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t\t\t= \"Araignées\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t= \"Activer le pré-avertissement pour les araignées\",\n\tWarningSpidersNow\t= \"Activer l'avertissement pour les araignées\",\n\tTimerSpider\t\t\t= \"Montre le timer pour l'arrivée des araignées\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Arachnophobie\"\n})\n\n------------------------------\n--  Noth the Plaguebringer  --\n------------------------------\nL = DBM:GetModLocalization(\"Noth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Noth le Porte-peste\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t\t= \"Téléportation!\",\n\tWarningTeleportSoon\t\t= \"Téléportation dans in 10 sec\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t\t= \"Téléportation\",\n\tTimerTeleportBack\t\t= \"Retour de TP\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t\t= \"Activer l'avertissement pour la téléporation\",\n\tWarningTeleportSoon\t\t= \"Activer le pré-avertissement pour la téléporation\",\n\tTimerTeleport\t\t\t= \"Activer le timer pour la téléporation\",\n\tTimerTeleportBack\t\t= \"Activer le timer pour le retour de North\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Mourez, intrus !\",\n\tAdds\t\t\t\t= \"invoque des guerriers squelettes !\",\n\tAddsTwo\t\t\t\t= \"lève encore d'autres squelettes !\"\n})\n\n--------------------------\n--  Heigan the Unclean  --\n--------------------------\nL = DBM:GetModLocalization(\"Heigan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Heigan l'Impur\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t\t= \"Téléportation!\",\n\tWarningTeleportSoon\t\t= \"Téléporation dans %d sec\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t\t= \"Téléporation\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t\t= \"Activer l'avertissement de Téléporation\",\n\tWarningTeleportSoon\t\t= \"Activer le pré-avertissement de Téléporation\",\n\tTimerTeleport\t\t\t= \"Activer le timer pour la Téléporation\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t\t= \"Vous êtes à moi, maintenant.\"\n})\n\n---------------\n--  Loatheb  --\n---------------\nL = DBM:GetModLocalization(\"Loatheb-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Horreb\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t\t= \"Soins possibles dans 3 sec\",\n\tWarningHealNow\t\t= \"SOIGNEZ MAINTENANT!\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t= \"Activer l'avertissement \\\"Soins dans 3 sec\\\" \",\n\tWarningHealNow\t\t= \"Activer l'avertissement \\\"SOIGNEZ MAINTENANT\\\" \",\n\tSporeDamageAlert\t= \"Envoyer un murmure et annoncer aux joueurs de raid qui endommagent les spores\\n(nécessite que l'annonce soit activée et le statut de leader/promu)\",\n\tCorruptedSorting\t= \"Set infoframe sorting behaviour for $spell:55593\", -- translation missing\n\tAlphabetical\t\t= \"Sort in alphabetical order\", -- translation missing\n\tDuration\t\t\t= \"Sort by duration\" -- translation missing\n})\n\n-----------------\n--  Patchwerk  --\n-----------------\nL = DBM:GetModLocalization(\"Patchwerk-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Le recousu\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful\t= \"Annoncer les Frappes Haineuses au raid\\n(vous devez être promote ou le raid leader pour le faire)\"\n})\n\nL:SetMiscLocalization({\n\tyell1\t\t\t= \"R'cousu veut jouer !\",\n\tyell2\t\t\t= \"R'cousu avatar de guerre pour Kel'Thuzad !\",\n\tHatefulStrike\t= \"Frappe Haineuse --> %s [%s]\"\n})\n\n-----------------\n--  Grobbulus  --\n-----------------\nL = DBM:GetModLocalization(\"Grobbulus-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Grobbulus\"\n})\n\n-------------\n--  Gluth  --\n-------------\nL = DBM:GetModLocalization(\"Gluth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Gluth\"\n})\n\n----------------\n--  Thaddius  --\n----------------\nL = DBM:GetModLocalization(\"Thaddius-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Thaddius\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t= \"Polarité changée : %s\",\n\tWarningChargeNotChanged\t= \"Même polarité\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t= \"Activer l'avertissement spécial quand votre polarité a changé\",\n\tWarningChargeNotChanged\t= \"Activer l'avertissement spécial quand votre polarité n'a pas changé\",\n\tTimerShiftCast\t\t\t= \"Afficher le timer pour le cast du changement de polarité\",\n\tArrowsEnabled\t\t\t= \"Afficher les flèches (stratégie normale : \\\"2 camps\\\")\",\n\tArrowsRightLeft\t\t\t= \"Afficher les flèches droite/gauche pour la stratégie \\\"4 camps\\\" (flèche gauche si la polarité a changé et droite sinon)\",\n\tArrowsInverse\t\t\t= \"Inverser la statégie \\\"4 camps\\\" (afficher la flèche droite si la polarité a changé et la gauche sinon)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t\t\t\t\t= \"Stalagg écraser toi !\",\n\tEmote\t\t\t\t\t= \"%s entre en surcharge !\",\n\tEmote2\t\t\t\t\t= \"Bobine de Tesla entre en surcharge !\",\n\tBoss1\t\t\t\t\t= \"Feugen\",\n\tBoss2\t\t\t\t\t= \"Stalagg\",\n\tCharge1\t\t\t\t\t= \"négative\",\n\tCharge2\t\t\t\t\t= \"positive\"\n})\n\n-----------------\n--  Razuvious  --\n-----------------\nL = DBM:GetModLocalization(\"Razuvious-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Razuvious\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t= \"Mur de Bouclier expire dans 5 sec\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t= \"Activer l'avertissement du Mur de Bouclier\"\n})\n\nL:SetMiscLocalization({\n\tYell1\t\t\t\t\t= \"Pas de quartier !\",\n\tYell2\t\t\t\t\t= \"Les cours sont terminés ! Montrez-moi ce que vous avez appris !\",\n\tYell3\t\t\t\t\t= \"Faites ce que vous ai appris !\",\n\tYell4\t\t\t\t\t= \"Frappe-le à la jambe\"\n})\n\n--------------\n--  Gothik  --\n--------------\nL = DBM:GetModLocalization(\"Gothik-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Gothik\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t= \"Vague %d: %s dans 3 sec\",\n\tWarningWaveSpawned\t= \"Vague %d: %s arrivée\",\n\tWarningRiderDown\t= \"Cavalier down\",\n\tWarningKnightDown\t= \"Chevalier down\",\n\tWarningPhase2\t\t= \"Phase 2\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t\t\t= \"Vague #%d\",\n\tTimerPhase2\t\t\t= \"Phase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"Afficher le timer des vagues\",\n\tTimerPhase2\t\t\t= \"Afficher le timer pour la Phase 2\",\n\tWarningWaveSoon\t\t= \"Activer le pré-avertissement pour les Vagues\",\n\tWarningWaveSpawned\t= \"Avertir quand une vague est arrivée\",\n\tWarningRiderDown\t= \"Avertir quand un Cavalier meurt\",\n\tWarningKnightDown\t= \"Avertir quand un Chevalier meurt\",\n\tWarningPhase2\t\t= \"Activer l'avertissement pour la Phase 2\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t\t= \"Dans votre folie, vous avez provoqué votre propre mort.\",\n\tWarningWave1\t\t= \"%d %s\",\n\tWarningWave2\t\t= \"%d %s et %d %s\",\n\tWarningWave3\t\t= \"%d %s, %d %s et %d %s\",\n\tTrainee\t\t\t\t= \"Recrues\",\n\tKnight\t\t\t\t= \"Chevaliers\",\n\tRider\t\t\t\t= \"Cavaliers\"\n})\n\n----------------\n--  Horsemen  --\n----------------\nL = DBM:GetModLocalization(\"Horsemen-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Les quatre Cavaliers\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Marque %d dans 3 sec\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Activer le pré-avertissement des Marques\",\n\tSpecialWarningMarkOnPlayer\t= \"Avertissement spécial quand vous avez plus de 4 marques sur vous\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t\t\t\t\t= \"Thane Korth'azz\",\n\tRivendare\t\t\t\t\t= \"Baron Vaillefendre\",\n\tBlaumeux\t\t\t\t\t= \"Dame Blaumeux\",\n\tZeliek\t\t\t\t\t\t= \"Sire Zeliek\"\n})\n\n-----------------\n--  Sapphiron  --\n-----------------\nL = DBM:GetModLocalization(\"Sapphiron-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Sapphiron\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t= \"Envol dans 10 sec\",\n\tWarningAirPhaseNow\t= \"Dans les airs\",\n\tWarningLanded\t\t= \"Atterrissage de Sapphiron\",\n\tWarningDeepBreath\t= \"Souffle de givre !\",\n\tSpecWarnSapphLow\t= \"Sapphiron ne peut pas voler !\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t\t= \"Envol\",\n\tTimerLanding\t\t= \"Atterrissage dans\",\n\tTimerIceBlast\t\t= \"Souffle de givre\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t= \"Activer le pré-avertissement de la phase en vol\",\n\tWarningAirPhaseNow\t= \"Activer l'avertissement de la phase en vol\",\n\tWarningLanded\t\t= \"Activer l'avertissement pour la phase au sol\",\n\tTimerAir\t\t\t= \"Afficher le timer de la phase en vol\",\n\tTimerLanding\t\t= \"Afficher le timer de l'atterrissage\",\n\tTimerIceBlast\t\t= \"Afficher le timer du Souffle de givre\",\n\tWarningDeepBreath\t= \"Activer l'avertissement spécial pour le Souffle de givre\",\n\tSpecWarnSapphLow\t= \"Avertissement spécial pour la phase d'exécution à 10 % (annulation de la phase d'air)\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t= \"prend une grande inspiration\",\n\tAirPhase\t\t\t= \"Saphiron s'envole !\",\n\tLandingPhase\t\t= \"Saphiron reprend ses attaques !\"\n})\n\n------------------\n--  Kel'thuzad  --\n------------------\nL = DBM:GetModLocalization(\"Kel'Thuzad-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Kel'Thuzad\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t\t= \"Kel'Thuzad sera actif dans 10 secondes\",\n\tWeaponsStatus\t\t= \"Auto-déséquipement activé: %s (%s - %s)\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t\t\t\t= \"Phase 2\",\n\tBlastTimer\t\t\t\t= \"Heal Maintenant !\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"Afficher le timer pour la Phase 2\",\n\tspecwarnP2Soon\t\t= \"Montre un timer pour prévenir 10 secondes avant l'arrivée de Kel'Thuzad\",\n\tWeaponsStatus\t\t= \"Alerte spéciale si la fonction de déséquipement n'est pas active au début du combat\",\n\tEqUneqWeaponsKT\t\t= \"Déséquipez et équipez automatiquement les armes avant et après $spell:28410. Nécessite un ensemble d'équipement nommé \\\"pve\\\"\",\n\tEqUneqWeaponsKT2\t= \"Déséquiper et équiper automatiquement les armes lorsque $spell:28410 est lancé sur VOUS. Nécessite un ensemble d'équipement nommé \\\"pve\\\"\",\n\tRemoveBuffsOnMC\t\t= \"Retirez les buffs lorsque $spell:28410 est lancé sur vous. Chaque option est cumulative.\",\n\tGift\t\t\t\t= \"Supprimer $spell:48469 / $spell:48470. Approche minimale pour éviter $spell:33786 résistances.\",\n\tCCFree\t\t\t\t= \"+ Supprimer $spell:48169 / $spell:48170. Tient compte des résistances des sorts de l'école de l'ombre.\",\n\tShortOffensiveProcs\t= \"+ Supprimer les procs offensifs qui ont une faible durée. Recommandé pour la sécurité du raid sans compromettre les dégâts du raid.\",\n\tMostOffensiveBuffs\t= \"+ Supprimer la plupart des buffs offensifs (principalement pour les Casters et les |cFFFF7C0AFarouche Druide|r). Sécurité maximale pour les raids avec une perte de dégâts et la nécessité de s'auto-rebuffer/shapeshift!\"\n})\n\nL:SetMiscLocalization({\n\tYell\t\t= \"Serviteurs, valets et soldats des ténèbres glaciales ! Répondez à l'appel de Kel'Thuzad !\",\n\tYell1Phase2\t= \"Faites vos prières !\", -- 12995\n\tYell2Phase2\t= \"Hurlez et expirez !\", -- 12996\n\tYell3Phase2\t= \"Votre fin est proche !\", -- 12997\n\tYellPhase3\t= \"Maître, j'ai besoin d'aide !\", -- 12998\n\tYellGuardians\t= \"Très bien. Guerriers des terres gelées, relevez-vous ! Je vous ordonne de combattre, de tuer et de mourir pour votre maître ! N'épargnez personne !\", -- 12994\n\tsetMissing\t= \"ATTENTION! DBM auto-déséquipement d'arme ne fonctionnera pas tant que vous n'aurez pas créer un set apellé pve\",\n\tEqUneqLineDescription\t= \"Équiper/Déséquiper automatiquement\"\n})\n"
  },
  {
    "path": "DBM-VanillaNaxx/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\n\nlocal L\n\n-------------------\n--  거미 지구    --\n-------------------\n-------------------\n--  아눕레칸     --\n-------------------\nL = DBM:GetModLocalization(\"Anub'Rekhan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"아눕레칸\"\n})\n\nL:SetOptionLocalization({\n\tArachnophobiaTimer\t= \"거미의 공포 업적 가능 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"거미의 공포 업적 가능\",\n\tPull1\t\t\t\t= \"그래, 도망쳐! 더 신선한 피가 솟구칠 테니!\",\n\tPull2\t\t\t\t= \"어디 맛 좀 볼까...\"\n})\n\n---------------------\n--  귀부인 펠리나  --\n---------------------\nL = DBM:GetModLocalization(\"Faerlina-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"귀부인 펠리나\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t= \"귀부인의 은총 종료 5초 전\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t= \"귀부인의 은총 종료 이전에 알림 보기\"\n})\n\n---------------\n--  맥스나   --\n---------------\nL = DBM:GetModLocalization(\"Maexxna-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"맥스나\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t= \"5초 후 거미의 입맞춤\",\n\tWarningSpidersNow\t= \"거미의 입맞춤\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t\t= \"다음 거미의 입맞춤\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t= \"거미의 입맞춤 이전에 알림 보기\",\n\tWarningSpidersNow\t= \"거미의 입맞춤 알림 보기\",\n\tTimerSpider\t\t\t= \"다음 거미의 입맞춤 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"거미의 공포\"\n})\n\n---------------\n-- 역병 지구 --\n---------------\n---------------------\n--  역병술사 노스  --\n---------------------\nL = DBM:GetModLocalization(\"Noth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"역병술사 노스\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"순간이동\",\n\tWarningTeleportSoon\t= \"10초 후 순간이동\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t= \"다음 순간이동\",\n\tTimerTeleportBack\t= \"방으로 복귀\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t\t= \"순간이동 알림 보기\",\n\tWarningTeleportSoon\t\t= \"순간이동 이전에 알림 보기\",\n\tTimerTeleport\t\t\t= \"다음 순간이동 바 보기\",\n\tTimerTeleportBack\t\t= \"방으로 복귀 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"죽어라, 침입자들아!\",\n\tAdds\t\t\t\t= \"해골 전사를 소환합니다!\",\n\tAddsTwo\t\t\t\t= \"해골을 계속 일으킵니다!\"\n})\n\n--------------------------\n--  부정의 헤이건  --\n--------------------------\nL = DBM:GetModLocalization(\"Heigan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"부정의 헤이건\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"순간이동\",\n\tWarningTeleportSoon\t= \"%d초 후 순간이동\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t= \"다음 순간이동\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t\t= \"순간이동 알림 보기\",\n\tWarningTeleportSoon\t\t= \"순간이동 이전에 알림 보기\",\n\tTimerTeleport\t\t\t= \"다음 순간이동 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"이제 넌 내 것이다.\"\n})\n\n----------------\n--  로데브  --\n----------------\nL = DBM:GetModLocalization(\"Loatheb-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"로데브\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t\t= \"3초 후 치유 가능\",\n\tWarningHealNow\t\t= \"치유 가능\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t= \"치유 가능 이전에 알림 보기\",\n\tWarningHealNow\t\t= \"치유 가능 알림 보기\",\n\tSporeDamageAlert\t= \"포자에게 데미지를 주는 공격대원에게 귓속말 보내기 및 알리기\\n(공대장 및 경보 권한이 있을 경우)\",\n\tCorruptedSorting\t= \"Set infoframe sorting behaviour for $spell:55593\", -- translation missing\n\tAlphabetical\t\t= \"Sort in alphabetical order\", -- translation missing\n\tDuration\t\t\t= \"Sort by duration\" -- translation missing\n})\n\n-----------------\n-- 피조물 지구 --\n-----------------\n-----------------\n--  패치워크  --\n-----------------\nL = DBM:GetModLocalization(\"Patchwerk-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"패치워크\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful = \"증오의 일격 대상자를 공격대 채팅창에 알리기\\n(만약 당신이 공대장의 권한이 있거나, 승급을 받은 유저라면 이 기능을 사용할 수 있습니다.)\"\n})\n\nL:SetMiscLocalization({\n\tyell1 = \"패치워크랑 놀아줘!\",\n\tyell2 = \"켈투자드님이 패치워크 싸움꾼으로 만들었다.\",\n\tHatefulStrike = \"증오의 일격 --> %s [%s]\"\n})\n\n-----------------\n--  그라불루스  --\n-----------------\nL = DBM:GetModLocalization(\"Grobbulus-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"그라불루스\"\n})\n\n-------------\n--  글루스  --\n-------------\nL = DBM:GetModLocalization(\"Gluth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"글루스\"\n})\n\n----------------\n--  타디우스  --\n----------------\nL = DBM:GetModLocalization(\"Thaddius-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"타디우스\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t= \"전하 변경 : %s\",\n\tWarningChargeNotChanged\t= \"전하 유지됨\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t= \"전하가 바뀐 경우 알림 보기\",\n\tWarningChargeNotChanged\t= \"전하가 바뀌지 않을 경우 알림 보기\",\n\tArrowsEnabled\t\t\t= \"극성변환 후 화살표 보기(일반 \\\"2 지역\\\" 공략용)\",\n\tArrowsRightLeft\t\t\t= \"극성변환 후 오른쪽/왼쪽 화살표 보기(\\\"4 지역\\\" 공략용)\",\n\tArrowsInverse\t\t\t= \"극성변환 후 오른쪽/왼쪽 화살표를 반대로 보기(\\\"4 지역\\\" 공략용)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t= \"스탈라그, 박살낸다!\",\n\tEmote\t= \"%s|1이;가; 과부하 상태가 됩니다.\",\n\tEmote2\t= \"테슬라 코일!!\",\n\tBoss1\t= \"퓨진\",\n\tBoss2\t= \"스탈라그\",\n\tCharge1\t= \"마이너스 전하\",\n\tCharge2\t= \"플러스 전하\",\n\tArrows\t= \"화살표\"\n})\n\n-----------------\n-- 군사 지구   --\n-----------------\n---------------------------\n--  훈련교관 라주비어스  --\n---------------------------\nL = DBM:GetModLocalization(\"Razuvious-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"훈련교관 라주비어스\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t= \"뼈 보호막 종료 5초 전\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t= \"뼈 보호막 종료 알림 보기\"\n})\n\nL:SetMiscLocalization({\n\tYell1 = \"절대 봐주지 마라!\",\n\tYell2 = \"훈련은 끝났다! 배운 걸 보여줘라!\",\n\tYell3 = \"훈련받은 대로 해!\",\n\tYell4 = \"다리를 후려 차라! 무슨 문제 있나?\"\n})\n\n------------------------\n--  영혼 착취자 고딕  --\n------------------------\nL = DBM:GetModLocalization(\"Gothik-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"영혼 착취자 고딕\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t= \"지원군 %d: %s 3초전\",\n\tWarningWaveSpawned\t= \"지원군 %d: %s\",\n\tWarningRiderDown\t= \"무자비한 죽음의 기병 처치\",\n\tWarningKnightDown\t= \"무자비한 죽음의 기사 처치\",\n\tWarningPhase2\t\t= \"2 단계\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"지원군 #%d\",\n\tTimerPhase2\t= \"2 단계\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"다음 지원군 바 보기\",\n\tTimerPhase2\t\t\t= \"2 단계 바 보기\",\n\tWarningWaveSoon\t\t= \"지원군 이전에 알림 보기\",\n\tWarningWaveSpawned\t= \"지원군 알림 보기\",\n\tWarningRiderDown\t= \"죽음의 기병 처치 알림 보기\",\n\tWarningKnightDown\t= \"죽음의 기사 처치 알림 보기\",\n\tWarningPhase2\t\t= \"2 단계 알림 보기\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t= \"어리석은 것들, 스스로 죽음을 자초하다니!\",\n\tWarningWave1\t= \"%d %s\",\n\tWarningWave2\t= \"%d %s, %d %s\",\n\tWarningWave3\t= \"%d %s, %d %s, %d %s\",\n\tTrainee\t\t\t= \"|4수련생:수련생;\",\n\tKnight\t\t\t= \"|4죽음의 기사:죽음의 기사;\",\n\tRider\t\t\t= \"|4죽음의 기병:죽음의 기병;\"\n})\n\n--------------------\n--  4인의 기사단  --\n--------------------\nL = DBM:GetModLocalization(\"Horsemen-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"4인의 기사단\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t\t= \"3초 후 징표 #%d\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t\t= \"징표 이전에 알림 보기\",\n\tSpecialWarningMarkOnPlayer\t= \"징표가 4 중첩 이상시 특수 경고 보기\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t= \"영주 코스아즈\",\n\tRivendare\t= \"남작 리븐데어\",\n\tBlaumeux\t= \"여군주 블라미우스\",\n\tZeliek\t\t= \"젤리에크 경\"\n})\n\n-------------------\n-- 서리고룡 둥지 --\n-------------------\n--------------\n--  사피론  --\n--------------\nL = DBM:GetModLocalization(\"Sapphiron-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"사피론\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t\t= \"비행 단계 10초 전\",\n\tWarningAirPhaseNow\t\t= \"비행 단계\",\n\tWarningLanded\t\t\t= \"착지\",\n\tWarningDeepBreath\t\t= \"냉기 숨결!\",\n\tSpecWarnSapphLow\t\t= \"사피론은 날지 못한다!\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t\t\t= \"비행 단계 종료\",\n\tTimerLanding\t\t\t= \"착지 중\",\n\tTimerIceBlast\t\t\t= \"냉기 숨결\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t\t= \"비행 단계 이전에 알림 보기\",\n\tWarningAirPhaseNow\t\t= \"비행 단계 알림 보기\",\n\tWarningLanded\t\t\t= \"지상 단계 알림 보기\",\n\tTimerAir\t\t\t\t= \"비행 단계 유지시간 바 보기\",\n\tTimerLanding\t\t\t= \"착지 중 바 보기\",\n\tTimerIceBlast\t\t\t= \"냉기 숨결 시전 바 보기\",\n\tWarningDeepBreath\t\t= \"냉기 숨결 특수 경고 보기\",\n\tSpecWarnSapphLow\t\t= \"10% 실행 단계에 대한 특별 경고(공기 단계 취소)\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t\t= \"숨을 깊게 들이마십니다.\",\n\tAirPhase\t\t\t\t= \"사피론이 공중으로 떠오릅니다!\",\n\tLandingPhase\t\t\t= \"사피론이 다시 공격합니다!\"\n})\n\n------------------\n--  켈투자드  --\n------------------\nL = DBM:GetModLocalization(\"Kel'Thuzad-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"켈투자드\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t\t= \"10초 후 2 단계\",\n\twarnAddsSoon\t\t= \"곧 얼음왕관의 수호자\",\n\tWeaponsStatus\t\t= \"Auto Unequipping enabled: %s (%s - %s)\" --Needs Translating\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t\t\t= \"2 단계\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"2 단계 바 보기\",\n\tspecwarnP2Soon\t\t= \"2 단계 10초 전에 특수 경고 보기\",\n\twarnAddsSoon\t\t= \"얼음왕관의 수호자 이전에 알림 보기\",\n\tWeaponsStatus\t\t= \"Special warning at combat start if unequip/equip function is enabled\", --Needs Translating\n\tEqUneqWeaponsKT\t\t= \"$spell:28410 전후에 자동으로 무기를 장착 해제하고 장착합니다. \\\"pve\\\"라는 장비 세트가 필요합니다.\",\n\tEqUneqWeaponsKT2\t= \"$spell:28410이 당신에게 시전되면 자동으로 무기를 장착 해제하고 장착합니다. \\\"pve\\\"라는 장비 세트가 필요합니다.\",\n\tRemoveBuffsOnMC\t\t= \"$spell:28410를 시전하면 버프를 제거합니다. 각 옵션은 누적됩니다.\",\n\tGift\t\t\t\t= \"$spell:48469 / $spell:48470을 제거합니다. $spell:33786 저항을 방지하기 위한 최소한의 접근입니다.\",\n\tCCFree\t\t\t\t= \"+ $spell:48169 / $spell:48170을 제거합니다. 그림자 학교의 주문 저항을 설명합니다.\",\n\tShortOffensiveProcs\t= \"+ 지속 시간이 짧은 공격 절차를 제거합니다. 공격대 피해 출력을 손상시키지 않으면서 공격대 안전을 위해 권장됩니다.\",\n\tMostOffensiveBuffs\t= \"+ 대부분의 공격 버프를 제거합니다(주로 캐스터 및 |cFFFF7C0A야성 드루이드|r용). 손상 출력 손실로 최대 레이드 안전 및 자체 버프/변형이 필요합니다!\"\n})\n\nL:SetMiscLocalization({\n\tYell\t\t= \"어둠의 문지기와 하수인, 그리고 병사들이여! 나 켈투자드가 부르니 명을 받들라!\",\n\tYell1Phase2\t= \"자비를 구하라!\", -- 12995\n\tYell2Phase2\t= \"마지막 숨이나 쉬어라!\", -- 12996\n\tYell3Phase2\t= \"최후를 맞이하라!\", -- 12997\n\tYellPhase3\t= \"주인님, 도와주소서!\", -- 12998\n\tYellGuardians\t= \"좋다. 얼어붙은 땅의 전사들이여, 일어나라! 너희에게 싸울 것을 명하노라. 날 위해 죽고, 날 위해 죽여라! 한 놈도 살려두지 마라!\", -- 12994\n\tsetMissing\t= \"주목! DBM 자동 무기 해제/장착은 pve라는 장비 세트를 생성할 때까지 작동하지 않습니다.\",\n\tEqUneqLineDescription\t= \"자동 장착/장비 해제\"\n})\n"
  },
  {
    "path": "DBM-VanillaNaxx/localization.mx.lua",
    "content": "if GetLocale() ~= \"esMX\" then return end\nlocal L\n\n-----------------\n-- Anub'Rekhan --\n-----------------\nL = DBM:GetModLocalization(\"Anub'Rekhan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Anub'Rekhan\"\n})\n\nL:SetWarningLocalization({\n\tSpecialLocust\t\t= \"Enjambre de langostas\",\n\tWarningLocustFaded\t= \"Enjambre de langostas ha terminado\"\n})\n\nL:SetOptionLocalization({\n\tSpecialLocust\t\t= \"Mostrar aviso especial para $spell:28785\",\n\tWarningLocustFaded\t= \"Mostrar aviso cuando termine $spell:28785\",\n\tArachnophobiaTimer\t= \"Mostrar temporizador para el logro 'Aracnofobia'\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Logro: Aracnofobia\",\n\tPull1\t\t\t\t= \"¡Eso, corred! ¡Así la sangre circula más rápido!\",\n\tPull2\t\t\t\t= \"Solo un bocado...\"\n})\n\n-------------------------\n-- Gran Viuda Faerlina --\n-------------------------\nL = DBM:GetModLocalization(\"Faerlina-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Gran Viuda Faerlina\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t= \"Abrazo de la viuda expirando en 5 s\",\n\tWarningEmbraceExpired\t= \"Abrazo de la viuda ha expirado\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t= \"Mostrar aviso previo para cuando expire Abrazo de la viuda\",\n\tWarningEmbraceExpired\t= \"Mostrar aviso cuando expire Abrazo de la viuda\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t\t= \"¡Arrodíllate ante mí, sabandija!\"--Not actually pull trigger, but often said on pull\n})\n\n-------------\n-- Maexxna --\n-------------\nL = DBM:GetModLocalization(\"Maexxna-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Maexxna\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t= \"Arañitas de Maexxna en 5 s\",\n\tWarningSpidersNow\t= \"Arañitas de Maexxna\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t= \"Siguientes arañitas\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t= \"Mostrar aviso previo para cuando aparezcan Arañitas de Maexxna\",\n\tWarningSpidersNow\t= \"Mostrar aviso cuando aparezcan Arañitas de Maexxna\",\n\tTimerSpider\t\t\t= \"Mostrar temporizador para las siguientes Arañitas de Maexxna\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Logro: Aracnofobia\"\n})\n\n-----------------------\n-- Noth el Pesteador --\n-----------------------\nL = DBM:GetModLocalization(\"Noth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Noth el Pesteador\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Teletransporte\",\n\tWarningTeleportSoon\t= \"Teletransporte en 10 s\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t= \"Teletransporte: Balcón\",\n\tTimerTeleportBack\t= \"Teletransporte: Suelo\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Mostrar aviso para Teletransporte\",\n\tWarningTeleportSoon\t= \"Mostrar aviso previo para Teletransporte\",\n\tTimerTeleport\t\t= \"Mostrar temporizador para el siguiente Teletransporte: Balcón\",\n\tTimerTeleportBack\t= \"Mostrar temporizador para Teletransporte: Suelo\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"¡Muere, intruso!\",\n\tAddsYell\t\t\t= \"¡Levantaos, soldados míos! ¡Levantaos y luchad una vez más!\",\n\tAdds\t\t\t\t= \"invoca a guerreros esqueletos!\",\n\tAddsTwo\t\t\t\t= \"alza más esqueletos!\"\n})\n\n----------------------\n-- Heigan el Impuro --\n----------------------\nL = DBM:GetModLocalization(\"Heigan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Heigan el Impuro\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Teletransporte\",\n\tWarningTeleportSoon\t= \"Teletransporte en %d s\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t= \"Teletransporte\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Mostrar aviso para Teletransporte\",\n\tWarningTeleportSoon\t= \"Mostrar aviso previo para Teletransporte\",\n\tTimerTeleport\t\t= \"Mostrar aviso para Teletransporte\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Ahora me perteneces.\"\n})\n\n-------------\n-- Loatheb --\n-------------\nL = DBM:GetModLocalization(\"Loatheb-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Loatheb\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t= \"Sanación posible en 3 s\",\n\tWarningHealNow\t= \"¡Sanad ahora!\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t= \"Mostrar aviso previo para la franja de sanación\",\n\tWarningHealNow\t\t= \"Mostrar aviso para la franja de sanación\",\n\tSporeDamageAlert\t= \"Enviar susurros y avisar a la banda de los jugadores que estén dañando esporas\\n(necesita 'anunciar' activado y lider/ayudante)\",\n\tCorruptedSorting\t= \"Set infoframe sorting behaviour for $spell:55593\", -- translation missing\n\tAlphabetical\t\t= \"Sort in alphabetical order\", -- translation missing\n\tDuration\t\t\t= \"Sort by duration\" -- translation missing\n})\n\n---------------\n-- Remendejo --\n---------------\nL = DBM:GetModLocalization(\"Patchwerk-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Remendejo\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful = \"Avisar por chat de banda los Golpes de Odio (necesitas ser ayudante o lider para eso)\"\n})\n\nL:SetMiscLocalization({\n\tyell1 = \"¡Remendejo quiere jugar!\",\n\tyell2 = \"¡Remendejo es la encarnación de guerra de Kel'Thuzad!\",\n\tHatefulStrike = \"Golpe de Odio --> %s [%s]\"\n})\n\n---------------\n-- Grobbulus --\n---------------\nL = DBM:GetModLocalization(\"Grobbulus-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Grobbulus\"\n})\n\n-----------\n-- Gluth --\n-----------\nL = DBM:GetModLocalization(\"Gluth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Gluth\"\n})\n\n--------------\n-- Thaddius --\n--------------\nL = DBM:GetModLocalization(\"Thaddius-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Thaddius\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t= \"Polaridad cambiada a %s\",\n\tWarningChargeNotChanged\t= \"Tu polaridad no ha cambiado\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t= \"Mostrar aviso especial cuando tu polaridad cambie\",\n\tWarningChargeNotChanged\t= \"Mostrar aviso especial cuando tu polaridad no cambie\",\n\tArrowsEnabled\t\t\t= \"Mostrar flechas (estrategia típica de dos grupos)\",\n\tArrowsRightLeft\t\t\t= \"Mostrar flechas de izquierda y derecha (estrategia de cuatro grupos; muestra la flecha izquierda si cambia la polaridad, y la derecha si no cambia)\",\n\tArrowsInverse\t\t\t= \"Mostrar flechas de izquierda y derecha inversas (estrategia de cuatro grupos; muestra la flecha derecha si cambia la polaridad, y la izquierda si no cambia)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t= \"¡Stalagg aplasta!\",\n\tEmote\t= \"¡%s se sobrecarga!\",\n\tEmote2\t= \"¡Espiral Tesla se sobrecarga!\",\n\tBoss1\t= \"Feugen\",\n\tBoss2\t= \"Stalagg\",\n\tCharge1 = \"negativo\",\n\tCharge2 = \"positivo\"\n})\n\n--------------------------\n-- Instructor Razuvious --\n--------------------------\nL = DBM:GetModLocalization(\"Razuvious-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Instructor Razuvious\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t= \"Barrera de huesos termina en 5 s\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t= \"Mostrar aviso previo para cuando termine $spell:29061\"\n})\n\nL:SetMiscLocalization({\n\tYell1 = \"¡No tengan piedad!\",\n\tYell2 = \"¡Se ha acabado el tiempo de práctica! ¡Quiero ver lo que han aprendido!\",\n\tYell3 = \"¡Hagan lo que les enseñé!\",\n\tYell4 = \"Un barrido con pierna... ¿Tienes algún problema?\"\n})\n\n--------------------------\n-- Gothik el Cosechador --\n--------------------------\nL = DBM:GetModLocalization(\"Gothik-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Gothik el Cosechador\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t= \"Oleada %d: %s en 3 s\",\n\tWarningWaveSpawned\t= \"Oleada %d: %s\",\n\tWarningRiderDown\t= \"Jinete muerto\",\n\tWarningKnightDown\t= \"Caballero muerto\",\n\tWarningPhase2\t\t= \"Fase 2\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"Oleada %d\",\n\tTimerPhase2\t= \"Fase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"Mostrar temporizador para la siguiente oleada de esbirros\",\n\tTimerPhase2\t\t\t= \"Mostrar temporizador para el cambio a Fase 2\",\n\tWarningWaveSoon\t\t= \"Mostrar aviso previo para la siguiente oleada de esbirros\",\n\tWarningWaveSpawned\t= \"Mostrar aviso cuando comience una oleada de esbirros\",\n\tWarningRiderDown\t= \"Mostrar aviso cuando muera un Jinete inflexible\",\n\tWarningKnightDown\t= \"Mostrar aviso cuando muera un Caballero de la Muerte inflexible\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t= \"Tú mismo has buscado tu final.\",\n\tWarningWave1\t= \"%d %s\",\n\tWarningWave2\t= \"%d %s y %d %s\",\n\tWarningWave3\t= \"%d %s, %d %s y %d %s\",\n\tTrainee\t\t\t= \"practicantes\",\n\tKnight\t\t\t= \"caballeros\",\n\tRider\t\t\t= \"jinetes\"\n})\n\n------------------------\n-- Los Cuatro Jinetes --\n------------------------\nL = DBM:GetModLocalization(\"Horsemen-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Los Cuatro Jinetes\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Marca %d en 3 s\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Mostrar aviso previo para las marcas\",\n\tSpecialWarningMarkOnPlayer\t= \"Mostrar aviso especial cuando estés afectado por más de cuatro marcas\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t= \"Señor feudal Korth'azz\",\n\tRivendare\t= \"Barón Osahendido\",\n\tBlaumeux\t= \"Lady Blaumeux\",\n\tZeliek\t\t= \"Sir Zeliek\"\n})\n\n---------------\n-- Sapphiron --\n---------------\nL = DBM:GetModLocalization(\"Sapphiron-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Sapphiron\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t= \"Fase aérea en 10 s\",\n\tWarningAirPhaseNow\t= \"Fase aérea\",\n\tWarningLanded\t\t= \"Fase en tierra\",\n\tWarningDeepBreath\t= \"Aliento de Escarcha\",\n\tSpecWarnSapphLow\t= \"¡Sapphiron no puede volar!\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t= \"Fase aérea\",\n\tTimerLanding\t= \"Fase en tierra\",\n\tTimerIceBlast\t= \"Aliento de Escarcha\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t= \"Mostrar aviso previo para el cambio a fase aérea\",\n\tWarningAirPhaseNow\t= \"Anunciar cambio a fase aérea\",\n\tWarningLanded\t\t= \"Anunciar cambio a fase en tierra\",\n\tTimerAir\t\t\t= \"Mostrar temporizador para el cambio a fase aérea\",\n\tTimerLanding\t\t= \"Mostrar temporizador para el cambio a fase en tierra\",\n\tTimerIceBlast\t\t= \"Mostrar temporizador para $spell:28524\",\n\tWarningDeepBreath\t= \"Mostrar aviso especial para $spell:28524\",\n\tWarningIceblock\t\t= \"Gritar cuando te afecte $spell:28522\",\n\tSpecWarnSapphLow\t= \"Advertencia especial para fase de ejecución del 10% (cancelación de fase de aire)\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t= \"%s respira hondo.\",\n\tWarningYellIceblock\t= \"¡Soy un bloque de hielo!\"\n})\n\n----------------\n-- Kel'Thuzad --\n----------------\n\nL = DBM:GetModLocalization(\"Kel'Thuzad-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Kel'Thuzad\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t= \"Fase 2 en 10 s\",\n\twarnAddsSoon\t= \"Guardianes de Corona de Hielo en breve\",\n\tWeaponsStatus\t= \"Desequipar automático habilitado: %s (%s - %s)\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t= \"Fase 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"Mostrar temporizador para el cambio a Fase 2\",\n\tspecwarnP2Soon\t\t= \"Mostrar aviso especial 10 s antes del cambio a Fase 2\",\n\twarnAddsSoon\t\t= \"Mostrar aviso previo para cuando aparezcan los Guardianes de Corona de Hielo\",\n\tWeaponsStatus\t\t= \"Advertencia especial al inicio del combate si la función desequipar/equipar está habilitada\",\n\tEqUneqWeaponsKT\t\t= \"Desequipar y equipar armas automáticamente con temporizador, antes y después del $spell:28410. Requiere equipamiento llamado \\\"pve\\\"\",\n\tEqUneqWeaponsKT2\t= \"Desequipar y equipar armas automáticamente cuando se lanza $spell:28410 sobre USTED. Requiere equipamiento llamado \\\"pve\\\"\",\n\tRemoveBuffsOnMC\t\t= \"Elimina los buffs cuando $spell:28410 es lanzado sobre ti. Cada opción es acumulativa\",\n\tGift\t\t\t\t= \"Eliminar $spell:48469 / $spell:48470. Enfoque mínimo para evitar que $spell:33786 se resista\",\n\tCCFree\t\t\t\t= \"+ Eliminar $spell:48169 / $spell:48170. Tener en cuenta las resistencias de los hechizos de la escuela Sombra\",\n\tShortOffensiveProcs\t= \"+ Elimina los procs ofensivos de baja duración. Recomendado para la seguridad de la raid sin comprometer la producción de daño de la raid\",\n\tMostOffensiveBuffs\t= \"+ Elimina la mayoría de los buffs ofensivos (principalmente para los Casters y los |cFFFF7C0ADruidas Ferales|r). Máxima seguridad en la incursión con la pérdida de daño y la necesidad de auto-buff/cambio de forma\"\n})\n\nL:SetMiscLocalization({\n\tYell\t\t= \"¡Esbirros, sirvientes, soldados de la fría oscuridad! ¡Obedeced la llamada de Kel'Thuzad!\",\n\tYell1Phase2\t= \"¡Ruega por piedad!\", -- 12995\n\tYell2Phase2\t= \"¡Exhala el último aliento!\", -- 12996\n\tYell3Phase2\t= \"¡El final se cierne sobre ti!\", -- 12997\n\tYellPhase3\t= \"¡Amo, requiero ayuda!\", -- 12998\n\tYellGuardians\t= \"Muy bien. Guerreros de los páramos helados, ¡levántense! ¡Les ordeno luchar, matar y morir por su amo! ¡Que nadie sobreviva!\", -- 12994\n\tsetMissing\t= \"¡ATENCIÓN! El desequipamiento / equipamiento automático de armas de DBM no funcionará hasta que cree un equipamiento llamado pve\",\n\tEqUneqLineDescription\t= \"Equipar/desequipar automático\"\n})\n"
  },
  {
    "path": "DBM-VanillaNaxx/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n-------------------\n--  Anub'Rekhan  --\n-------------------\nL = DBM:GetModLocalization(\"Anub'Rekhan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Ануб'Рекан\"\n})\n\nL:SetOptionLocalization({\n\tArachnophobiaTimer\t= \"Отсчет времени для Арахнофобия (достижение)\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Арахнофобия\",\n\tPull1\t\t\t\t= \"Бегите, бегите! Я люблю горячую кровь!\",\n\tPull2\t\t\t\t= \"Посмотрим, какие вы на вкус!\"\n})\n\n----------------------------\n--  Grand Widow Faerlina  --\n----------------------------\nL = DBM:GetModLocalization(\"Faerlina-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Великая вдова Фарлина\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t= \"Объятие Вдовы через 5 секунд\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t= \"Предупреждение, когда Объятие Вдовы исчезает\"\n})\n\n---------------\n--  Maexxna  --\n---------------\nL = DBM:GetModLocalization(\"Maexxna-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Мексна\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t= \"Паученыши Мексны через 5 секунд\",\n\tWarningSpidersNow\t= \"В паутине появляются паучата\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t= \"Паученыши Мексны\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t= \"Предупреждать перед следующим призывом Паученышей Мексны\",\n\tWarningSpidersNow\t= \"Предупреждение для призыва Паученышей Мексны\",\n\tTimerSpider\t\t\t= \"Отсчет времени до Паученышей Мексны\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"Арахнофобия\"\n})\n\n------------------------------\n--  Noth the Plaguebringer  --\n------------------------------\nL = DBM:GetModLocalization(\"Noth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Нот Чумной\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Телепортация\",\n\tWarningTeleportSoon\t= \"Телепортация через 10 секунд\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t= \"Телепортация\",\n\tTimerTeleportBack\t= \"Телепортация обратно\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Предупреждение о телепортации\",\n\tWarningTeleportSoon\t= \"Предупреждать перед следующей телепортацией\",\n\tTimerTeleport\t\t= \"Отсчет времени до телепортации\",\n\tTimerTeleportBack\t= \"Отсчет времени до обратной телепортации\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Смерть чужакам!\",\n\tAdds\t\t\t\t= \"призывает скелетов-воинов!\",\n\tAddsTwo\t\t\t\t= \"поднимает новых скелетов!\"\n})\n\n--------------------------\n--  Heigan the Unclean  --\n--------------------------\nL = DBM:GetModLocalization(\"Heigan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Хейган Нечестивый\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"Телепортация\",\n\tWarningTeleportSoon\t= \"Телепортация через %d сек.\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t= \"Телепортация\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"Предупреждение о телепортации\",\n\tWarningTeleportSoon\t= \"Предупреждать перед следующей телепортацией\",\n\tTimerTeleport\t\t= \"Отсчет времени до телепортации\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"Теперь вы принадлежите мне!\"\n})\n\n---------------\n--  Loatheb  --\n---------------\nL = DBM:GetModLocalization(\"Loatheb-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Лотхиб\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t= \"Можно исцелять через 3 секунды\",\n\tWarningHealNow\t= \"Исцеляйте сейчас\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t= \"Предупреждать заранее перед 3-х секундным окном исцеления\",\n\tWarningHealNow\t\t= \"Предупреждение для 3-х секундного окна исцеления\",\n\tSporeDamageAlert\t= \"Сообщать шепотом и объявлять в рейд игроков, наносящих урон спорам\\n(требуются права лидера или помощника)\",\n\tCorruptedSorting\t= \"Set infoframe sorting behaviour for $spell:55593\", -- translation missing\n\tAlphabetical\t\t= \"Sort in alphabetical order\", -- translation missing\n\tDuration\t\t\t= \"Sort by duration\" -- translation missing\n})\n\n-----------------\n--  Patchwerk  --\n-----------------\nL = DBM:GetModLocalization(\"Patchwerk-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Лоскутик\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful\t= \"Объявлять цели под Ударом ненависти\\n(требуются права лидера или помощника)\"\n})\n\nL:SetMiscLocalization({\n\tyell1\t\t\t= \"Лоскутик хочет поиграть!\",\n\tyell2\t\t\t= \"Кел'Тузад объявил Лоскутика воплощением войны!\",\n\tHatefulStrike\t= \"Удар ненависти --> %s [%s]\"\n})\n\n-----------------\n--  Grobbulus  --\n-----------------\nL = DBM:GetModLocalization(\"Grobbulus-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Гроббулус\"\n})\n\n-------------\n--  Gluth  --\n-------------\nL = DBM:GetModLocalization(\"Gluth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Глут\"\n})\n\n----------------\n--  Thaddius  --\n----------------\nL = DBM:GetModLocalization(\"Thaddius-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Таддиус\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t= \"Полярность изменена на %s\",\n\tWarningChargeNotChanged\t= \"Полярность не изменена\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t= \"Предупреждение, когда ваша полярность изменена\",\n\tWarningChargeNotChanged\t= \"Предупреждение, когда ваша полярность не изменена\",\n\tArrowsEnabled\t\t\t= \"Отображать стрелки (обычная \\\"2-сторонняя\\\" стратегия)\",\n\tArrowsRightLeft\t\t\t= \"Стрелки влево/вправо для \\\"4-сторонней\\\" стратегии\",\n\tArrowsInverse\t\t\t= \"Обратная \\\"4-сторонняя\\\" стратегия (вправо, если полярность изменена, влево, если нет)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t= \"Сталагг сокрушить вас!\",\n\tEmote\t= \"%s перезагружается!\",\n\tEmote2\t= \"Катушка Теслы перезагружается!\",\n\tBoss1\t= \"Фойген\",\n\tBoss2\t= \"Сталагг\",\n\tCharge1 = \"отрицательную\",\n\tCharge2 = \"положительную\"\n})\n\n----------------------------\n--  Instructor Razuvious  --\n----------------------------\nL = DBM:GetModLocalization(\"Razuvious-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Инструктор Разувий\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t= \"Стена костей закончится через 5 секунд\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t= \"Предупреждать о скором исчезновении Стены костей\"\n})\n\nL:SetMiscLocalization({\n\tYell1 = \"Покажите мне, на что способны!\",\n\tYell2 = \"Обучение окончено! Покажите мне, что вы усвоили!\",\n\tYell3 = \"Вспомните, чему я вас учил!\",\n\tYell4 = \"Выше ногу! Или у тебя с этим проблемы?\"\n})\n\n----------------------------\n--  Gothik the Harvester  --\n----------------------------\nL = DBM:GetModLocalization(\"Gothik-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Готик Жнец\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t= \"Волна %d: %s через 3 секунды\",\n\tWarningWaveSpawned\t= \"Волна %d: %s призван\",\n\tWarningRiderDown\t= \"Всадник мертв\",\n\tWarningKnightDown\t= \"Рыцарь мертв\",\n\tWarningPhase2\t\t= \"Фаза 2\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"Волна %d\",\n\tTimerPhase2\t= \"Фаза 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"Отсчет времени до волны\",\n\tTimerPhase2\t\t\t= \"Отсчет времени до фазы 2\",\n\tWarningWaveSoon\t\t= \"Предупреждать перед следующей волной\",\n\tWarningWaveSpawned\t= \"Предупреждение для волны призыва\",\n\tWarningRiderDown\t= \"Предупреждение, когда всадник мертв\",\n\tWarningKnightDown\t= \"Предупреждение, когда рыцарь мертв\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t= \"Глупо было искать свою смерть.\",\n\tWarningWave1\t= \"%d %s\",\n\tWarningWave2\t= \"%d %s и %d %s\",\n\tWarningWave3\t= \"%d %s, %d %s и %d %s\",\n\tTrainee\t\t\t= \"Ученика\",\n\tKnight\t\t\t= \"Рыцаря\",\n\tRider\t\t\t= \"Всадника\"\n})\n\n---------------------\n--  Four Horsemen  --\n---------------------\nL = DBM:GetModLocalization(\"Horsemen-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Четыре Всадника\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Знак %d через 3 секунды\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t\t= \"Предупреждать перед следующими знаками\",\n\tSpecialWarningMarkOnPlayer\t= \"Спец-предупреждение, когда >4 знаков на вас\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t= \"Тан Кортазз\",\n\tRivendare\t= \"Барон Ривендер\",\n\tBlaumeux\t= \"Леди Бломе\",\n\tZeliek\t\t= \"Сэр Зелиек\"\n})\n\n-----------------\n--  Sapphiron  --\n-----------------\nL = DBM:GetModLocalization(\"Sapphiron-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Сапфирон\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t= \"Воздушная фаза через 10 секунд\",\n\tWarningAirPhaseNow\t= \"Воздушная фаза\",\n\tWarningLanded\t\t= \"Сапфирон приземляется\",\n\tWarningDeepBreath\t= \"Ледяное дыхание\",\n\tSpecWarnSapphLow\t= \"У Сапфирона нет сил взлететь\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t= \"Воздушная фаза\",\n\tTimerLanding\t= \"Приземление\",\n\tTimerIceBlast\t= \"Ледяное дыхание\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t= \"Предупреждать о приближении Воздушной фазы\",\n\tWarningAirPhaseNow\t= \"Объявлять Воздушную фазу\",\n\tWarningLanded\t\t= \"Объявлять Наземную фазу\",\n\tTimerAir\t\t\t= \"Отсчет времени до Воздушной фазы\",\n\tTimerLanding\t\t= \"Отсчет времени до приземления\",\n\tTimerIceBlast\t\t= \"Отсчет времени до Ледяного дыхания\",\n\tWarningDeepBreath\t= \"Специальное объявление Ледяного Дыхания\",\n\tSpecWarnSapphLow\t= \"Спец-предупреждения для 10% босса(отмена воздушной фазы)\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t= \"%s глубоко вдыхает.\",\n\tAirPhase\t\t\t= \"Сапфирон взмывает в воздух!\",\n\tLandingPhase\t\t= \"Сапфирон возобновляет свою атаку!\"\n})\n\n------------------\n--  Kel'Thuzad  --\n------------------\nL = DBM:GetModLocalization(\"Kel'Thuzad-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Кел'Тузад\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t= \"Кел'Тузад вступает в бой через 10 секунд\",\n\twarnAddsSoon\t= \"Скоро прибытие Стражей Ледяной Короны\",\n\tWeaponsStatus\t= \"Cнятие оружий включено: %s (%s - %s)\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t= \"Фаза 2\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"Отсчет времени до фазы 2\",\n\tspecwarnP2Soon\t\t= \"Спец-предупреждение за 10 секунд до вступления Кел'Тузада в бой\",\n\twarnAddsSoon\t\t= \"Предупреждать заранее о Стражах Ледяной Короны\",\n\tWeaponsStatus\t\t= \"Спец-предупреждение в начале боя если включена функция снятия/надевания оружий\",\n\tEqUneqWeaponsKT\t\t= \"Снимать/надевать оружия перед/после контроля по таймеру. Для надевания создайте компл. экип. \\\"pve\\\". Для снятия не нужен.\",\n\tEqUneqWeaponsKT2\t= \"Снимать/надевать оружия когда контроль кастуется в вас. Для надевания создайте компл. экип. \\\"pve\\\". Для снятия не нужен.\",\n\tRemoveBuffsOnMC\t\t= \"Снимать баффы, когда на вас наложено заклинание $spell:28410. Каждый вариант является кумулятивным.\",\n\tGift\t\t\t\t= \"Снять $spell:48469 / $spell:48470. Минимальный подход для предотвращения сопротивления $spell:33786.\",\n\tCCFree\t\t\t\t= \"+ Убрать $spell:48169 / $spell:48170. Учет сопротивлений заклинаний школы Теней.\",\n\tShortOffensiveProcs\t= \"+ Удалите атакующие заклинания с малой продолжительностью. Рекомендуется для безопасности рейда без ущерба для урона рейда.\",\n\tMostOffensiveBuffs\t= \"+ Уберите большинство атакующих баффов (в основном для кастеров и |cFFFF7C0AСила зверя Друид|r). Максимальная безопасность рейда с потерей урона и необходимостью самовосстановления/перемещения!\"\n})\n\nL:SetMiscLocalization({\n\tYell\t\t= \"Соратники, слуги, солдаты холодной тьмы! Повинуйтесь зову Кел'Тузада!\",\n--\tYellMC1\t\t= \"Теперь твоя душа связана с моей!\",\n--\tYellMC2\t\t= \"Тебе не уйти!\",\n\tYell1Phase2\t= \"Молите о пощаде!\", -- 12995\n\tYell2Phase2\t= \"Кричите! Кричите изо всех сил!\", -- 12996\n\tYell3Phase2\t= \"Вы уже мертвы!\", -- 12997\n\tYellPhase3\t= \"Господин, мне нужна помощь!\", -- 12998\n\tYellGuardians\t= \"Хорошо. Воины ледяных пустошей, восстаньте! Повелеваю вам сражаться, убивать и умирать во имя своего повелителя! Не щадить никого!\", -- 12994\n\tsetMissing\t= \"ВНИМАНИЕ! DBM: автоматическое снимание/надевание оружия не будет работать пока вы не создадите набор экипировки pve\",\n\tEqUneqLineDescription\t= \"Автоматическое оснащение/снятие оборудования\"\n})\n"
  },
  {
    "path": "DBM-VanillaNaxx/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n-------------------\n--  Anub'Rekhan  --\n-------------------\nL = DBM:GetModLocalization(\"Anub'Rekhan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"阿努比瑞克漢\"\n})\n\nL:SetOptionLocalization({\n\tArachnophobiaTimer\t= \"為蜘蛛恐懼症(成就)顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"蜘蛛恐懼症\",\n\tPull1\t\t\t\t= \"對，跑吧!那樣傷口出血就更多了!\",\n\tPull2\t\t\t\t= \"一些小點心...\"\n})\n\n----------------------------\n--  Grand Widow Faerlina  --\n----------------------------\nL = DBM:GetModLocalization(\"Faerlina-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"大寡婦費琳娜\"\n})\n\nL:SetWarningLocalization({\n\tWarningEmbraceExpire\t= \"寡婦之擁5秒後結束\"\n})\n\nL:SetOptionLocalization({\n\tWarningEmbraceExpire\t= \"為寡婦之擁結束顯示預先警告\"\n})\n\n---------------\n--  Maexxna  --\n---------------\nL = DBM:GetModLocalization(\"Maexxna-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"梅克絲娜\"\n})\n\nL:SetWarningLocalization({\n\tWarningSpidersSoon\t= \"梅克絲娜之子5秒後出現\",\n\tWarningSpidersNow\t= \"梅克絲娜之子出現了\"\n})\n\nL:SetTimerLocalization({\n\tTimerSpider\t= \"下一次梅克絲娜之子\"\n})\n\nL:SetOptionLocalization({\n\tWarningSpidersSoon\t= \"為梅克絲娜之子顯示預先警告\",\n\tWarningSpidersNow\t= \"為梅克絲娜之子顯示警告\",\n\tTimerSpider\t\t\t= \"為下一次梅克絲娜之子顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tArachnophobiaTimer\t= \"蜘蛛恐懼症\"\n})\n\n------------------------------\n--  Noth the Plaguebringer  --\n------------------------------\nL = DBM:GetModLocalization(\"Noth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"『瘟疫使者』諾斯\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"傳送\",\n\tWarningTeleportSoon\t= \"10秒後傳送\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t\t= \"傳送\",\n\tTimerTeleportBack\t= \"傳送回來\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"為傳送顯示警告\",\n\tWarningTeleportSoon\t= \"為傳送顯示預先警告\",\n\tTimerTeleport\t\t= \"為傳送顯示計時器\",\n\tTimerTeleportBack\t= \"為傳送回來顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"死吧，入侵者!\",\n\tAdds\t\t\t\t= \"召喚了骷髏戰士!\",\n\tAddsTwo\t\t\t\t= \"喚醒了更多骷髏!\"\n})\n\n--------------------------\n--  Heigan the Unclean  --\n--------------------------\nL = DBM:GetModLocalization(\"Heigan-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"『不潔者』海根\"\n})\n\nL:SetWarningLocalization({\n\tWarningTeleportNow\t= \"傳送\",\n\tWarningTeleportSoon\t= \"%d秒後 傳送\"\n})\n\nL:SetTimerLocalization({\n\tTimerTeleport\t= \"傳送\"\n})\n\nL:SetOptionLocalization({\n\tWarningTeleportNow\t= \"為傳送顯示警告\",\n\tWarningTeleportSoon\t= \"為傳送顯示預先警告\",\n\tTimerTeleport\t\t= \"為傳送顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"你現在是我的了。\"\n})\n\n---------------\n--  Loatheb  --\n---------------\nL = DBM:GetModLocalization(\"Loatheb-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"憎恨者\"\n})\n\nL:SetWarningLocalization({\n\tWarningHealSoon\t= \"3秒後可以治療\",\n\tWarningHealNow\t= \"現在治療\"\n})\n\nL:SetOptionLocalization({\n\tWarningHealSoon\t\t= \"為3秒後可以治療顯示預先警告\",\n\tWarningHealNow\t\t= \"為現在治療顯示警告\",\n\tSporeDamageAlert\t= \"在團隊中提示誰殺死了孢子並發送密語給兇手\\n(需要團隊隊長或助理權限)\",\n\tCorruptedSorting\t= \"Set infoframe sorting behaviour for $spell:55593\", -- translation missing\n\tAlphabetical\t\t= \"Sort in alphabetical order\", -- translation missing\n\tDuration\t\t\t= \"Sort by duration\" -- translation missing\n})\n\n-----------------\n--  Patchwerk  --\n-----------------\nL = DBM:GetModLocalization(\"Patchwerk-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"縫補者\"\n})\n\nL:SetOptionLocalization({\n\tWarningHateful = \"公佈憎恨打擊的目標到團隊頻道\\n(需要團隊隊長或助理權限)\"\n})\n\nL:SetMiscLocalization({\n\tyell1 = \"縫補者要跟你玩!\",\n\tyell2 = \"科爾蘇加德讓縫補者成為戰爭的化身!\",\n\tHatefulStrike = \"憎恨打擊 --> %s [%s]\"\n})\n\n-----------------\n--  Grobbulus  --\n-----------------\nL = DBM:GetModLocalization(\"Grobbulus-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"葛羅巴斯\"\n})\n\n-------------\n--  Gluth  --\n-------------\nL = DBM:GetModLocalization(\"Gluth-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"古魯斯\"\n})\n\n----------------\n--  Thaddius  --\n----------------\nL = DBM:GetModLocalization(\"Thaddius-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"泰迪斯\"\n})\n\nL:SetWarningLocalization({\n\tWarningChargeChanged\t= \"極性變為%s\",\n\tWarningChargeNotChanged\t= \"極性沒有改變\"\n})\n\nL:SetOptionLocalization({\n\tWarningChargeChanged\t= \"當你的極性改變時顯示特別警告\",\n\tWarningChargeNotChanged\t= \"當你的極性沒有改變時顯示特別警告\",\n\tArrowsEnabled\t\t\t= \"顯示箭頭 (正常 \\\"二邊\\\" 站位打法)\",\n\tArrowsRightLeft\t\t\t= \"顯示左/右箭頭 給 \\\"四角\\\" 站位打法 (如果極性改變顯示左箭頭, 沒變顯示左箭頭)\",\n\tArrowsInverse\t\t\t= \"顯示倒轉的 \\\"四角\\\" 站位打法 (如果極性改變顯示左箭頭, 沒變顯示右箭頭)\"\n})\n\nL:SetMiscLocalization({\n\tYell\t= \"斯塔拉格要碾碎你!\",\n\tEmote\t= \"%s超過負荷!\",\n\tEmote2\t= \"泰斯拉線圈超過負荷!\",\n\tBoss1\t= \"伏晨\",\n\tBoss2\t= \"斯塔拉格\",\n\tCharge1 = \"負極\",\n\tCharge2 = \"正極\"\n})\n\n----------------------------\n--  Instructor Razuvious  --\n----------------------------\nL = DBM:GetModLocalization(\"Razuvious-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"講師拉祖維斯\"\n})\n\nL:SetWarningLocalization({\n\tWarningShieldWallSoon\t= \"5秒後盾牆結束\"\n})\n\nL:SetOptionLocalization({\n\tWarningShieldWallSoon\t= \"為盾牆結束顯示預先警告\"\n})\n\nL:SetMiscLocalization({\n\tYell1 = \"絕不留情!\",\n\tYell2 = \"練習時間到此為止!都拿出真本事來!\",\n\tYell3 = \"照我教你的做!\",\n\tYell4 = \"絆腿……有什麼問題嗎?\"\n})\n\n----------------------------\n--  Gothik the Harvester  --\n----------------------------\nL = DBM:GetModLocalization(\"Gothik-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"『收割者』高希\"\n})\n\nL:SetWarningLocalization({\n\tWarningWaveSoon\t\t= \"3秒後第%d波: %s\",\n\tWarningWaveSpawned\t= \"第%d波: %s出現了\",\n\tWarningRiderDown\t= \"騎兵已死亡\",\n\tWarningKnightDown\t= \"死亡騎士已死亡\",\n\tWarningPhase2\t\t= \"第二階段\"\n})\n\nL:SetTimerLocalization({\n\tTimerWave\t= \"第%d波\",\n\tTimerPhase2\t= \"第2階段\"\n})\n\nL:SetOptionLocalization({\n\tTimerWave\t\t\t= \"為下一波顯示計時器\",\n\tTimerPhase2\t\t\t= \"為第二階段顯示計時器\",\n\tWarningWaveSoon\t\t= \"為波數顯示預先警告\",\n\tWarningWaveSpawned\t= \"為波數出現顯示警告\",\n\tWarningRiderDown\t= \"當無情的騎兵死亡時顯示警告\",\n\tWarningKnightDown\t= \"當無情的死亡騎士死亡時顯示警告\"\n})\n\nL:SetMiscLocalization({\n\tyell\t\t\t= \"你們這些蠢貨已經主動步入了陷阱。\",\n\tWarningWave1\t= \"%d %s\",\n\tWarningWave2\t= \"%d %s 和 %d %s\",\n\tWarningWave3\t= \"%d %s, %d %s 和 %d %s\",\n\tTrainee\t\t\t= \"受訓員\",\n\tKnight\t\t\t= \"死亡騎士\",\n\tRider\t\t\t= \"騎兵\"\n})\n\n---------------------\n--  Four Horsemen  --\n---------------------\nL = DBM:GetModLocalization(\"Horsemen-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"四騎士\"\n})\n\nL:SetWarningLocalization({\n\tWarningMarkSoon\t\t\t= \"3秒後印記 %d\",\n\tSpecialWarningMarkOnPlayer\t= \"%s: %s\"\n})\n\nL:SetOptionLocalization({\n\tWarningMarkSoon\t\t\t\t= \"為印記顯示預先警告\",\n\tSpecialWarningMarkOnPlayer\t= \"當你印記堆疊多於四層時顯示特別警告\"\n})\n\nL:SetMiscLocalization({\n\tKorthazz\t= \"寇斯艾茲族長\",\n\tRivendare\t= \"瑞文戴爾男爵\",\n\tBlaumeux\t= \"布洛莫斯女士\",\n\tZeliek\t\t= \"札里克爵士\"\n})\n\n-----------------\n--  Sapphiron  --\n-----------------\nL = DBM:GetModLocalization(\"Sapphiron-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"薩菲隆\"\n})\n\nL:SetWarningLocalization({\n\tWarningAirPhaseSoon\t= \"10秒後 空中階段\",\n\tWarningAirPhaseNow\t= \"空中階段\",\n\tWarningLanded\t\t= \"薩菲隆降落了\",\n\tWarningDeepBreath\t= \"冰息術\",\n\tSpecWarnSapphLow\t= \"薩菲隆不能飛！\"\n})\n\nL:SetTimerLocalization({\n\tTimerAir\t\t= \"空中階段\",\n\tTimerLanding\t= \"降落\",\n\tTimerIceBlast\t= \"冰息術\"\n})\n\nL:SetOptionLocalization({\n\tWarningAirPhaseSoon\t= \"為空中階段顯示預先警告\",\n\tWarningAirPhaseNow\t= \"提示空中階段\",\n\tWarningLanded\t\t= \"提示地上階段\",\n\tTimerAir\t\t\t= \"為空中階段顯示計時器\",\n\tTimerLanding\t\t= \"為降落顯示計時器\",\n\tTimerIceBlast\t\t= \"為冰息術顯示計時器\",\n\tWarningDeepBreath\t= \"為冰息術顯示特別警告\",\n\tSpecWarnSapphLow\t= \"10%執行階段特別警告（取消空中階段）\"\n})\n\nL:SetMiscLocalization({\n\tEmoteBreath\t\t\t= \"%s深深地吸了一口氣。\",\n\tAirPhase\t\t\t= \"薩菲隆離地升空了!\",\n\tLandingPhase\t\t= \"薩菲隆重新開始攻擊!\"\n})\n\n------------------\n--  Kel'Thuzad  --\n------------------\nL = DBM:GetModLocalization(\"Kel'Thuzad-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"科爾蘇加德\"\n})\n\nL:SetWarningLocalization({\n\tspecwarnP2Soon\t= \"10秒後科爾蘇加德開始攻擊\",\n\twarnAddsSoon\t= \"寒冰皇冠守護者即將出現\",\n\tWeaponsStatus\t= \"自動武器卸載/裝備已啟用: %s (%s - %s)\"\n})\n\nL:SetTimerLocalization({\n\tTimerPhase2\t= \"第二階段\"\n})\n\nL:SetOptionLocalization({\n\tTimerPhase2\t\t\t= \"為第二階段顯示計時器\",\n\tspecwarnP2Soon\t\t= \"為科爾蘇加德攻擊前10秒顯示特別警告\",\n\twarnAddsSoon\t\t= \"為寒冰皇冠守護者顯示預先警告\",\n\tWeaponsStatus\t\t= \"戰鬥開始時提示自動武器卸載/裝備功能已啟用\",\n\tEqUneqWeaponsKT\t\t= \"在 $spell:28410 之前和之後自動取消裝備和裝備武器。 需要名為“pve”的裝備套裝\",\n\tEqUneqWeaponsKT2\t= \"對你施放 $spell:28410 時自動解除和裝備武器。 需要名為“pve”的裝備套裝\",\n\tRemoveBuffsOnMC\t\t= \"當 $spell:28410 對你施放時移除增益。每個選項都是累積的。\",\n\tGift\t\t\t\t= \"移除 $spell:48469 / $spell:48470。防止 $spell:33786 抵抗的最小方法。\",\n\tCCFree\t\t\t\t= \"+ 移除 $spell:48169 / $spell:48170。說明影子學派的法術抗性。\",\n\tShortOffensiveProcs\t= \"+ 移除持續時間較短的攻擊性觸發。推薦用於團隊安全而不影響團隊傷害輸出。\",\n\tMostOffensiveBuffs\t= \"+ 移除大部分攻擊性增益（主要針對施法者和 |cFFFF7C0A野性戰鬥德魯伊|r）。最大的團隊安全性，損失輸出並需要自我反擊/變形！\"\n})\n\nL:SetMiscLocalization({\n\tYell = \"僕從們，侍衛們，隸屬於黑暗與寒冷的戰士們!聽從科爾蘇加德的召喚!\",\n\tYell1Phase2\t= \"祈禱我的慈悲吧!\", -- 12995\n\tYell2Phase2\t= \"呼出你的最後一口氣!\", -- 12996\n\tYell3Phase2\t= \"你的末日臨近了!\", -- 12997\n\tYellPhase3\t= \"主人，我需要幫助!\", -- 12998\n\tYellGuardians\t= \"非常好，凍原的戰士們，起來吧!我命令你們作戰，為你們的主人殺戮或獻身吧!不要留下活口!\", -- 12994\n\tsetMissing\t= \"注意力！ 在您創建名為 pve 的裝備集之前，DBM 自動武器卸載/裝備將不起作用\",\n\tEqUneqLineDescription\t= \"自動裝備/取消裝備\"\n})\n"
  },
  {
    "path": "DBM-VanillaOnyxia/DBM-VanillaOnyxia.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Onyxia (Vanilla)|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Repaire d'Onyxia (Classique)|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Ониксия (классический)|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Guarida de Onyxia (Vanilla)|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Guarida de Onyxia (Vanilla)|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0奧妮克希亞 (Vanilla)|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0奥妮克希亚 (Vanilla)|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0오닉시아 (클래식)|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Onyxias Hort (Vanilla)|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMVanillaOnyxia_AllSavedVars\n## SavedVariablesPerCharacter: DBMVanillaOnyxia_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: Classic\n## X-DBM-StatTypes: normal\n## X-DBM-Mod-Sort: 1108\n## X-DBM-Mod-MapID: 719\n## X-DBM-Mod-LoadRealm: Onyxia_old\n## X-DBM-Mod-Name: Onyxia's Lair (Vanilla)\n## X-DBM-Mod-Name-frFR: Repaire d'Onyxia (Classique)\n## X-DBM-Mod-Name-ruRU: Логово Ониксии (классический)\n## X-DBM-Mod-Name-esES: Guarida de Onyxia (Clásico)\n## X-DBM-Mod-Name-esMX: Guarida de Onyxia (Clásico)\n## X-DBM-Mod-Name-zhTW: 奧妮克希亞 (Vanilla)\n## X-DBM-Mod-Name-zhCN: 奥妮克希亚的巢穴 (Vanilla)\n## X-DBM-Mod-Name-koKR: 오닉시아 (클래식)\n## X-DBM-Mod-Name-deDE: Onyxias Hort (Vanilla)\n## X-DBM-Mod-LoadZone: Onyxia's Lair\n## X-DBM-Mod-LoadZone-frFR: Repaire d'Onyxia\n## X-DBM-Mod-LoadZone-ruRU: Логово Ониксии\n## X-DBM-Mod-LoadZone-esES: Guarida de Onyxia\n## X-DBM-Mod-LoadZone-esMX: Guarida de Onyxia\n## X-DBM-Mod-LoadZone-zhTW: 奧妮克希亞的巢穴\n## X-DBM-Mod-LoadZone-zhCN: 奥妮克希亚的巢穴\n## X-DBM-Mod-LoadZone-koKR: 오닉시아의 둥지\n## X-DBM-Mod-LoadZone-deDE: Onyxias Hort\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.fr.lua\nlocalization.ru.lua\nlocalization.tw.lua\nlocalization.kr.lua\nlocalization.tw.lua\nlocalization.es.lua\nlocalization.cn.lua\nlocalization.ru.lua\n\nOnyxia.lua\n"
  },
  {
    "path": "DBM-VanillaOnyxia/Onyxia.lua",
    "content": "local mod\t= DBM:NewMod(\"Onyxia-Vanilla\", \"DBM-VanillaOnyxia\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20231219231417\")\nmod:SetCreatureID(10184)\n\nmod:RegisterCombat(\"combat\")\n\n--[[mod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_YELL\"\n)]]\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 68958 17086 18351 18564 18576 18584 18596 18609 18617 18435 68970 18431 18500 18392 68926\",\n\t\"SPELL_CAST_SUCCESS 68959 68963\",\n\t\"SPELL_DAMAGE 68867 69286\",\n\t\"CHAT_MSG_MONSTER_YELL\",\n\t\"UNIT_DIED\",\n\t\"UNIT_HEALTH boss1\"\n)\n\n-- General\nmod:AddBoolOption(\"SoundWTF3\", false, \"sound\")\n\n-- Stage One (100% – 65%)\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(1)..\": 100% – 65%\")\nlocal warnPhase2Soon\t\t= mod:NewPrePhaseAnnounce(2)\nlocal warnWingBuffet\t\t= mod:NewSpellAnnounce(18500, 2, nil, \"Tank\")\n\nlocal timerNextFlameBreath\t= mod:NewCDTimer(13.3, 18435, nil, \"Tank\", 2, 5, nil, nil, true) -- Breath she does on ground in frontal cone. REVIEW! ~7s variance [13.3-20]. Added \"keep\" arg (25N Lordaeron 2022/10/13) - 13.3, 18.8, 16.3, 13.6\n\n-- Stage Two (65% – 40%)\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(2)..\": 65% – 40%\")\nlocal warnPhase2\t\t\t= mod:NewPhaseAnnounce(2)\nlocal warnPhase3Soon\t\t= mod:NewPrePhaseAnnounce(3)\nlocal warnFireball\t\t\t= mod:NewTargetNoFilterAnnounce(18392, 2, nil, false)\nlocal warnWhelpsSoon\t\t= mod:NewSoonAnnounce(17646, 1, 69004)\n--local preWarnDeepBreath\t = mod:NewSoonAnnounce(17086, 2)--Experimental, if it is off please let me know.\n\nlocal yellFireball\t\t\t= mod:NewYell(18392)\nlocal specWarnBreath\t\t= mod:NewSpecialWarningSpell(18584, nil, nil, nil, 2, 2)\nlocal specWarnAdds\t\t\t= mod:NewSpecialWarningAdds(68959, \"-Healer\", nil, nil, 1, 2)\nlocal specWarnBlastNova\t\t= mod:NewSpecialWarningRun(68958, \"Melee\", nil, nil, 4, 2) -- from Onyxian Lair Guard\n\nlocal timerBreathCast\t\t= mod:NewCastTimer(8, 18584, nil, nil, nil, 3)\nlocal timerNextDeepBreath\t= mod:NewCDTimer(35, 18584, nil, nil, nil, 3)--Range from 35-60seconds in between based on where she moves to.\nlocal timerWhelps\t\t\t= mod:NewNextTimer(105, 17646, nil, nil, nil, 1, 69004)\nlocal timerBigAddCD\t\t\t= mod:NewNextTimer(44.9, 68959, nil, \"-Healer\", nil, 1, 10697) -- Ignite Weapon for Onyxian Lair Guard\n\n-- Stage Three (40% – 0%)\nmod:AddTimerLine(DBM_CORE_L.SCENARIO_STAGE:format(3)..\": 40% – 0%\")\nlocal warnPhase3\t\t\t= mod:NewPhaseAnnounce(3)\n\nlocal specWarnBellowingRoar\t= mod:NewSpecialWarningSpell(18431, nil, nil, nil, 2, 2)\n\nmod.vb.warned_preP2 = false\nmod.vb.warned_preP3 = false\nmod.vb.whelpsCount = 0\n\nlocal function Whelps(self)\n\tif self:IsInCombat() then\n\t\tself.vb.whelpsCount = self.vb.whelpsCount + 1\n\t\ttimerWhelps:Start()\n\t\twarnWhelpsSoon:Schedule(95)\n\t\tself:Schedule(105, Whelps, self)\n\tend\nend\n\nfunction mod:FireballTarget(targetname)\n\tif not targetname then return end\n\twarnFireball:Show(targetname)\n\tif targetname == UnitName(\"player\") then\n\t\tyellFireball:Yell()\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\tself:SetStage(1)\n\tself.vb.whelpsCount = 0\n\tself.vb.warned_preP2 = false\n\tself.vb.warned_preP3 = false\n\ttimerNextFlameBreath:Start(12.1-delay) -- REVIEW! variance? (25N Lordaeron 2022/10/13) - 12.1\n\tif self.Options.SoundWTF3 then\n\t\tDBM:PlaySoundFile(\"Interface\\\\AddOns\\\\DBM-VanillaOnyxia\\\\sounds\\\\dps-very-very-slowly.ogg\")\n\t\tself:Schedule(20, DBM.PlaySoundFile, DBM, \"Interface\\\\AddOns\\\\DBM-VanillaOnyxia\\\\sounds\\\\hit-it-like-you-mean-it.ogg\")\n\t\tself:Schedule(30, DBM.PlaySoundFile, DBM, \"Interface\\\\AddOns\\\\DBM-VanillaOnyxia\\\\sounds\\\\now-hit-it-very-hard-and-fast.ogg\")\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 68958 then -- Blast Nova (from Onyxian Lair Guard)\n\t\tspecWarnBlastNova:Show()\n\telseif args:IsSpellID(17086, 18351, 18564, 18576) or args:IsSpellID(18584, 18596, 18609, 18617) then\t-- 1 ID for each direction\n\t\tspecWarnBreath:Show()\n\t\ttimerBreathCast:Start()\n\t\ttimerNextDeepBreath:Start()\n--\t\tpreWarnDeepBreath:Schedule(35)\t\t\t  -- Pre-Warn Deep Breath\n\telseif args:IsSpellID(18435, 68970) then\t\t-- Flame Breath (Ground phases)\n\t\ttimerNextFlameBreath:Start()\n\telseif spellId == 18431 then\n\t\tspecWarnBellowingRoar:Show()\n\t\tspecWarnBellowingRoar:Play(\"fearsoon\")\n\telseif args:IsSpellID(18500, 69293) then -- Wing Buffet\n\t\twarnWingBuffet:Show()\n\telseif args:IsSpellID(18392, 68926) then -- Fireball\n\t\tself:BossTargetScanner(args.sourceGUID, \"FireballTarget\", 0.15, 12)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(68959, 68963) then--Ignite Weapon (Onyxian Lair Guard spawn)\n\t\tspecWarnAdds:Show()\n\t\tspecWarnAdds:Play(\"bigmob\")\n\t\ttimerBigAddCD:Start()\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, _, _, spellId)\n\tif (spellId == 68867 or spellId == 69286) and destGUID == UnitGUID(\"player\") and self.Options.SoundWTF3 then\t\t-- Tail Sweep\n\t\tDBM:PlaySoundFile(\"Interface\\\\AddOns\\\\DBM-VanillaOnyxia\\\\sounds\\\\watch-the-tail.ogg\")\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n--\tif msg == L.YellPull and not self:IsInCombat() then\n--\t\tDBM:StartCombat(self, 0)\n\tif msg == L.YellP2 or msg:find(L.YellP2) then\n\t\tself:SendSync(\"Phase2\")\n\telseif msg == L.YellP3 or msg:find(L.YellP3) then\n\t\tself:SendSync(\"Phase3\")\n\tend\nend\n\nfunction mod:UNIT_DIED(args)\n\tif self:IsInCombat() and args:IsPlayer() and self.Options.SoundWTF3 then\n\t\tDBM:PlaySoundFile(\"Interface\\\\AddOns\\\\DBM-VanillaOnyxia\\\\sounds\\\\thats-a-fucking-fifty-dkp-minus.ogg\")\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif self.vb.phase == 1 and not self.vb.warned_preP2 and self:GetUnitCreatureId(uId) == 10184 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.70 then\n\t\tself.vb.warned_preP2 = true\n\t\twarnPhase2Soon:Show()\n\telseif self.vb.phase == 2 and not self.vb.warned_preP3 and self:GetUnitCreatureId(uId) == 10184 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.45 then\n\t\tself.vb.warned_preP3 = true\n\t\twarnPhase3Soon:Show()\n\t\tif self.Options.SoundWTF3 then\n\t\t\tself:Unschedule(DBM.PlaySoundFile, DBM)\n\t\tend\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif not self:IsInCombat() then return end\n\tif msg == \"Phase2\" then\n\t\tself:SetStage(2)\n\t\tself.vb.whelpsCount = 0\n\t\twarnPhase2:Show()\n\t\ttimerBigAddCD:Start(20) -- (25N Lordaeron 2022/10/13) - Stage 2/20.0\n--\t\tpreWarnDeepBreath:Schedule(72)\t-- Pre-Warn Deep Breath\n\t\ttimerNextDeepBreath:Start(75.5) -- Breath-17086. REVIEW! variance? (25N Lordaeron 2022/10/13) - 75.5\n\t\ttimerNextFlameBreath:Cancel()\n\t\tself:Schedule(5, Whelps, self)\n\t\tif self.Options.SoundWTF3 then\n\t\t\tself:Unschedule(DBM.PlaySoundFile, DBM)\n\t\t\tDBM:PlaySoundFile(\"Interface\\\\AddOns\\\\DBM-VanillaOnyxia\\\\sounds\\\\i-dont-see-enough-dots.ogg\")\n\t\t\tself:Schedule(10, DBM.PlaySoundFile, DBM, \"Interface\\\\AddOns\\\\DBM-VanillaOnyxia\\\\sounds\\\\throw-more-dots.ogg\")\n\t\t\tself:Schedule(17, DBM.PlaySoundFile, DBM, \"Interface\\\\AddOns\\\\DBM-VanillaOnyxia\\\\sounds\\\\whelps-left-side-even-side-handle-it.ogg\") -- 18\n\t\tend\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Show(8)\n\t\tend\n\telseif msg == \"Phase3\" then\n\t\tself:SetStage(3)\n\t\twarnPhase3:Show()\n\t\tself:Unschedule(Whelps)\n\t\ttimerWhelps:Stop()\n\t\ttimerNextDeepBreath:Stop()\n\t\ttimerBigAddCD:Stop()\n\t\twarnWhelpsSoon:Cancel()\n--\t\tpreWarnDeepBreath:Cancel()\n\t\tif self.Options.SoundWTF3 then\n\t\t\tself:Unschedule(DBM.PlaySoundFile, DBM)\n\t\t\tself:Schedule(15, DBM.PlaySoundFile, DBM, \"Interface\\\\AddOns\\\\DBM-VanillaOnyxia\\\\sounds\\\\dps-very-very-slowly.ogg\")\n\t\t\tself:Schedule(35, DBM.PlaySoundFile, DBM, \"Interface\\\\AddOns\\\\DBM-VanillaOnyxia\\\\sounds\\\\hit-it-like-you-mean-it.ogg\")\n\t\t\tself:Schedule(45, DBM.PlaySoundFile, DBM, \"Interface\\\\AddOns\\\\DBM-VanillaOnyxia\\\\sounds\\\\now-hit-it-very-hard-and-fast.ogg\")\n\t\tend\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Hide()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-VanillaOnyxia/localization.cn.lua",
    "content": "﻿-- author: callmejames @《凤凰之翼》 一区藏宝海湾\n-- commit by: yaroot <yaroot AT gmail.com>\n-- Mini Dragon(projecteurs AT gmail.com) Brilla@金色平原\n-- Last update: 2019/08/22\n\nif GetLocale() ~= \"zhCN\" then return end\n\nlocal L\n\n--------------\n--  Onyxia  --\n--------------\nL = DBM:GetModLocalization(\"Onyxia-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t= \"奥妮克希亚\"\n})\n\n--[[L:SetWarningLocalization({\n\tWarnWhelpsSoon\t\t= \"奥妮克希亚雏龙 即将出现\"\n})\n\nL:SetTimerLocalization({\n\tTimerWhelps\t\t\t= \"奥妮克希亚雏龙\"\n})]]\n\nL:SetOptionLocalization({\n--\tTimerWhelps\t\t\t= \"为奥妮克希亚雏龙显示计时条\",\n--\tWarnWhelpsSoon\t\t= \"为奥妮克希亚雏龙显示提前警报\",\n\tSoundWTF3\t\t\t= \"为经典传奇式奥妮克希亚副本播放一些有趣的音效\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t\t= \"真是走运。通常我必须离开窝才能找到食物。\",\n\tYellP2\t\t\t= \"这毫无意义的行动让我很厌烦。我会从上空把你们都烧成灰！\",\n\tYellP3\t\t\t= \"看起来需要再给你一次教训，凡人！\"\n})\n"
  },
  {
    "path": "DBM-VanillaOnyxia/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n--------------\n--  Onyxia  --\n--------------\nL = DBM:GetModLocalization(\"Onyxia-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Onyxia\"\n})\n\n--[[L:SetWarningLocalization({\n\tWarnWhelpsSoon\t\t= \"Welpen erscheinen bald\"\n})\n\nL:SetTimerLocalization({\n\tTimerWhelps\t= \"Welpen erscheinen\"\n})]]\n\nL:SetOptionLocalization({\n--\tTimerWhelps\t\t\t\t= \"Zeige Zeit bis Welpen erscheinen\",\n--\tWarnWhelpsSoon\t\t\t= \"Zeige Vorwarnung für Erscheinen der Welpen\",\n\tSoundWTF3\t\t\t\t= \"Spiele witzige Sounds eines legendären Classic-Onyxia-Schlachtzuges\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull = \"Was für ein Zufall. Normalerweise muss ich meinen Unterschlupf verlassen, um etwas zu essen.\",\n\tYellP2 = \"Diese sinnlose Anstrengung langweilt mich. Ich werde Euch alle von oben verbrennen!\",\n\tYellP3 = \"Mir scheint, dass Ihr noch eine Lektion braucht, sterbliche Wesen!\"\n})\n"
  },
  {
    "path": "DBM-VanillaOnyxia/localization.en.lua",
    "content": "local L\n\n--------------\n--  Onyxia  --\n--------------\nL = DBM:GetModLocalization(\"Onyxia-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Onyxia\"\n})\n\n--[[L:SetWarningLocalization({\n\tWarnWhelpsSoon\t\t= \"Onyxian Whelps soon\"\n})\n\nL:SetTimerLocalization({\n\tTimerWhelps\t= \"Onyxian Whelps\"\n})]]\n\nL:SetOptionLocalization({\n--\tTimerWhelps\t\t\t\t= \"Show timer for Onyxian Whelps\",\n--\tWarnWhelpsSoon\t\t\t= \"Show pre-warning for Onyxian Whelps\",\n\tSoundWTF3\t\t\t\t= \"Play some funny sounds from a legendary classic Onyxia raid\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull = \"How fortuitous. Usually, I must leave my lair in order to feed.\",\n\tYellP2 = \"This meaningless exertion bores me. I'll incinerate you all from above!\",\n\tYellP3 = \"It seems you'll need another lesson, mortals!\"\n})\n"
  },
  {
    "path": "DBM-VanillaOnyxia/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\nlocal L\n\n--------------\n--  Onyxia  --\n--------------\nL = DBM:GetModLocalization(\"Onyxia-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Onyxia\"\n})\n\n--[[L:SetWarningLocalization({\n\tWarnWhelpsSoon\t\t= \"Crías de Onyxia en breve\"\n})\n\nL:SetTimerLocalization({\n\tTimerWhelps\t= \"Crías de Onyxia\"\n})]]\n\nL:SetOptionLocalization({\n--\tTimerWhelps\t\t\t\t= \"Mostrar temporizador para las siguientes Crías de Onyxia\",\n--\tWarnWhelpsSoon\t\t\t= \"Mostrar aviso previo para las siguientes Crías de Onyxia\",\n\tSoundWTF3\t\t\t\t= \"Reproducir sonidos graciosos de cierta banda legendaria\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull = \"Qué casualidad. Generalmente, debo salir de mi guarida para poder comer.\",\n\tYellP2 = \"Este ejercicio sin sentido me aburre. ¡Os inceneraré a todos desde arriba!\",\n\tYellP3 = \"¡Parece ser que vais a necesitar otra lección, mortales!\"\n})\n"
  },
  {
    "path": "DBM-VanillaOnyxia/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\n\nlocal L\n\n--------------\n--  Onyxia  --\n--------------\nL = DBM:GetModLocalization(\"Onyxia-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Onyxia\"\n})\n\n--[[L:SetWarningLocalization({\n\tWarnWhelpsSoon\t\t= \"Les Jeunes dragonnets onyxien arrivent bientôt\"\n})\n\nL:SetTimerLocalization({\n\tTimerWhelps = \"Arrivée des Jeunes dragonnets onyxien\"\n})]]\n\nL:SetOptionLocalization({\n--\tTimerWhelps\t\t\t\t= \"Montre le timer pour l'arrivée des Jeunes dragonnets onyxien\",\n--\tWarnWhelpsSoon\t\t\t= \"Montre une pré-alerte avant l'arrivée des Jeunes dragonnets onyxien\",\n\tSoundWTF3\t\t\t\t= \"Joue des sons amusants du légendaire raid classic d'Onyxia\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull = \"Quelle chance ! D'habitude, je dois quitter mon repaire pour me nourrir.\",\n\tYellP2 = \"exercice dénué de sens\",\n\tYellP3 = \"semble que vous ayez besoin\"\n})\n"
  },
  {
    "path": "DBM-VanillaOnyxia/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\n\nlocal L\n\n--------------\n--  Onyxia  --\n--------------\nL = DBM:GetModLocalization(\"Onyxia-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"오닉시아\"\n})\n\n--[[L:SetWarningLocalization({\n\tWarnWhelpsSoon\t\t= \"곧 새끼용 등장\"\n})\n\nL:SetTimerLocalization({\n\tTimerWhelps\t\t= \"새끼용\"\n})]]\n\nL:SetOptionLocalization({\n--\tTimerWhelps\t\t\t\t= \"새끼용 등장 바 보기\",\n--\tWarnWhelpsSoon\t\t\t= \"새끼용 등장 이전에 알림 보기\",\n\tSoundWTF3\t\t\t\t= \"독특한 레이드를 즐기기 위한 웃긴 소리 재생(가급적 비활성화 추천)\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t= \"How fortuitous. Usually, I must leave my lair in order to feed.\",\n\tYellP2\t\t= \"쓸데없이 힘을 쓰는 것도 지루하군. 네 녀석들 머리 위에서 모조리 불살라 주마!\",\n\tYellP3\t\t= \"혼이 더 나야 정신을 차리겠구나!\"\n})\n"
  },
  {
    "path": "DBM-VanillaOnyxia/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n--------------\n--  Onyxia  --\n--------------\nL = DBM:GetModLocalization(\"Onyxia-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"Ониксия\"\n})\n\n--[[L:SetWarningLocalization({\n\tWarnWhelpsSoon\t\t= \"Скоро дракончики Ониксии\"\n})\n\nL:SetTimerLocalization({\n\tTimerWhelps\t= \"Вызов дракончиков Ониксии\"\n})]]\n\nL:SetOptionLocalization({\n--\tTimerWhelps\t\t\t\t= \"Отсчет времени до дракончиков Ониксии\",\n--\tWarnWhelpsSoon\t\t\t= \"Предупреждать заранее о дракончиках Ониксии\",\n\tSoundWTF3\t\t\t\t= \"Воспроизводить забавное озвучивание легендарного классического рейда на Ониксию (англ.)\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull = \"Вот это сюрприз. Обычно, чтобы найти обед, мне приходится покидать логово.\",\n\tYellP2 = \"Эта бессмысленная возня вгоняет меня в тоску. Я сожгу вас всех!\",\n\tYellP3 = \"Похоже, вам требуется преподать еще один урок, смертные!\"\n})\n"
  },
  {
    "path": "DBM-VanillaOnyxia/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n--------------\n--  Onyxia  --\n--------------\nL = DBM:GetModLocalization(\"Onyxia-Vanilla\")\n\nL:SetGeneralLocalization({\n\tname = \"奧妮克希亞\"\n})\n\n--[[L:SetWarningLocalization({\n\tWarnWhelpsSoon\t\t= \"奧妮克希亞幼龍即將出現\"\n})\n\nL:SetTimerLocalization({\n\tTimerWhelps\t\t= \"奧妮克希亞幼龍\"\n})]]\n\nL:SetOptionLocalization({\n--\tTimerWhelps\t\t= \"為奧妮克希亞幼龍顯示計時器\",\n--\tWarnWhelpsSoon\t= \"為奧妮克希亞幼龍顯示預先警告\",\n\tSoundWTF3\t\t= \"為經典傳奇式奧妮克希亞副本播放一些有趣的音效\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull = \"真是幸運。通常我為了覓食就必須離開窩。\",\n\tYellP2\t= \"這毫無意義的行動讓我很厭煩。我會從上空把你們都燒成灰!\",\n\tYellP3\t= \"看起來需要再給你一次教訓，凡人!\"\n})\n"
  },
  {
    "path": "DBM-VoA/Archavon.lua",
    "content": "local mod\t= DBM:NewMod(\"Archavon\", \"DBM-VoA\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(31125)\nmod:SetEncounterID(772)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 58663 60880\",\n\t\"SPELL_CAST_SUCCESS 58963 60895\",\n\t\"SPELL_AURA_APPLIED 58678 58941\",\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\"\n)\n\n--11/19 19:20:12.949  SPELL_AURA_APPLIED,0xF150007995000007,\"Archavon the Stone Watcher\",0xa48,0xF140544DF3000002,\"Teufelssaurier\",0x1114,58678,\"Rock Shards\",0x1,DEBUFF\n--11/19 19:20:16.527  SPELL_AURA_REMOVED,0xF150007995000007,\"Archavon the Stone Watcher\",0xa48,0xF140544DF3000002,\"Teufelssaurier\",0x1114,58678,\"Rock Shards\",0x1,DEBUFF\n\nlocal warnShards\t\t\t= mod:NewTargetNoFilterAnnounce(58678, 2)\nlocal warnGrab\t\t\t\t= mod:NewAnnounce(\"WarningGrab\", 4, 53041)\nlocal warnLeap\t\t\t\t= mod:NewSpellAnnounce(60894, 3)\nlocal warnStomp\t\t\t\t= mod:NewSpellAnnounce(60880, 3)\nlocal warnStompSoon\t\t\t= mod:NewPreWarnAnnounce(60880, 5, 2)\n\nlocal timerNextStomp\t\t= mod:NewNextTimer(45, 60880, nil, nil, nil, 2)\nlocal timerShards\t\t\t= mod:NewTargetTimer(4, 58678, nil, nil, nil, 3)\nlocal timerArchavonEnrage\t= mod:NewBerserkTimer(300, nil, \"ArchavonEnrage\")\n\nfunction mod:OnCombatStart(delay)\n\ttimerArchavonEnrage:Start()\n\ttimerNextStomp:Start(49.4-delay) -- REVIEW! variance? (10N Lordaeron 2022/09/23) - pull:49.4\n\twarnStompSoon:Schedule(40-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(58663, 60880) then\n\t\twarnStomp:Show()\n\t\ttimerNextStomp:Start()\n\t\twarnStompSoon:Schedule(40)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(58963, 60895) then\n\t\twarnLeap:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(58678, 58941) then\n\t\twarnShards:Show(args.destName)\n\t\ttimerShards:Start(args.destName)\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg, _, _, _, target)\n\tif msg and msg:match(L.TankSwitch) or msg:find(L.TankSwitch) then\n\t\twarnGrab:Show(DBM:GetUnitFullName(target))\n\tend\nend\n"
  },
  {
    "path": "DBM-VoA/DBM-VoA.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Vault of Archavon|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Archavons Kammer|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Склеп Аркавона|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0亞夏梵穹殿|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0阿尔卡冯的宝库|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0아카본 석실|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0La Cámara de Archavon|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0La Cámara de Archavon|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Caveau d'Archavon|r\n## Author: Nitram/Tandanu\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMVoA_AllSavedVars\n## SavedVariablesPerCharacter: DBMVoA_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: RAID\n## X-DBM-Mod-Category: WOTLK\n## X-DBM-StatTypes: normal,normal25\n## X-DBM-Mod-Name: Vault of Archavon\n## X-DBM-Mod-Name-deDE: Archavons Kammer\n## X-DBM-Mod-Name-ruRU: Склеп Аркавона\n## X-DBM-Mod-Name-zhTW: 亞夏梵穹殿\n## X-DBM-Mod-Name-zhCN: 阿尔卡冯的宝库\n## X-DBM-Mod-Name-koKR: 아카본 석실\n## X-DBM-Mod-Name-esES: La Cámara de Archavon\n## X-DBM-Mod-Name-esMX: La Cámara de Archavon\n## X-DBM-Mod-Name-frFR: Caveau d'Archavon\n## X-DBM-Mod-Sort: 7\n## X-DBM-Mod-MapID: 533\n## X-DBM-Mod-LoadZone: Vault of Archavon\n## X-DBM-Mod-LoadZone-zhCN: 阿尔卡冯的宝库\n## X-DBM-Mod-LoadZone-ruRU: Склеп Аркавона\n## X-DBM-Mod-LoadZone-frFR: Caveau d'Archavon\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.tw.lua\nlocalization.cn.lua\nlocalization.es.lua\nlocalization.ru.lua\nlocalization.fr.lua\nlocalization.kr.lua\n\nArchavon.lua\nEmalon.lua\nKoralon.lua\nToravon.lua\n"
  },
  {
    "path": "DBM-VoA/Emalon.lua",
    "content": "local mod\t= DBM:NewMod(\"Emalon\", \"DBM-VoA\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(33993)\nmod:SetEncounterID(774)\nmod:SetUsedIcons(8)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 64216 65279\",\n\t\"SPELL_HEAL 64218\",\n\t\"SPELL_AURA_APPLIED 64217\",\n\t\"SPELL_AURA_REMOVED 64217\"\n)\n\nlocal warnOverCharge\t\t= mod:NewSpellAnnounce(64218, 4)\n\nlocal specWarnNova\t\t\t= mod:NewSpecialWarningRun(65279, nil, nil, nil, 4, 2)\n\nlocal timerNova\t\t\t\t= mod:NewCastTimer(65279, nil, nil, nil, 2)\nlocal timerNovaCD\t\t\t= mod:NewCDTimer(40, 65279, nil, nil, nil, 2)--Varies, 45-60seconds in between nova's. FM reported possible 5s less\nlocal timerOvercharge\t\t= mod:NewNextTimer(45, 64218, nil, nil, nil, 5, nil, DBM_COMMON_L.DAMAGE_ICON)\nlocal timerMobOvercharge\t= mod:NewTimer(20, \"timerMobOvercharge\", 64217, nil, nil, 5, DBM_COMMON_L.DAMAGE_ICON, nil, nil, nil, nil, nil, nil, 64218)\n\nlocal timerEmalonEnrage\t\t= mod:NewBerserkTimer(360, nil, \"EmalonEnrage\")\n\nmod:AddRangeFrameOption(10, 64213)\nmod:AddSetIconOption(\"SetIconOnOvercharge\", 64218, true, 5, {8})\n\nlocal function ResetRange(self)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:DisableBossMode()\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\ttimerOvercharge:Start(-delay)\n\ttimerNovaCD:Start(20-delay)\n\ttimerEmalonEnrage:Start(-delay)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(10)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 64216 or args.spellId == 65279 then\n\t\ttimerNova:Start()\n\t\ttimerNovaCD:Start()\n\t\tspecWarnNova:Show()\n\t\tif self.Options.RangeFrame then\n\t\t\t-- On 10m you receive no damage outside 20 yards,\n\t\t\t-- on 25m you receive damage either way but 20 yards from hitbox should be safe\n\t\t\tDBM.RangeCheck:SetBossRange(20, self:GetBossUnitByCreatureId(33993))\n\t\t\t-- 5s cast\n\t\t\tself:Schedule(5.5, ResetRange, self)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_HEAL(_, _, _, destGUID, _, _, spellId)\n\tif spellId == 64218 then\n\t\twarnOverCharge:Show()\n\t\ttimerOvercharge:Start()\n\t\tif self.Options.SetIconOnOvercharge then\n\t\t\tself:ScanForMobs(destGUID, 2, 8, 1, nil, 10, \"SetIconOnOvercharge\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 64217 then\t-- 1 of 10 stacks (+1 each 2 seconds)\n\t\ttimerMobOvercharge:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 64217 then\n\t\ttimerMobOvercharge:Stop()\n\tend\nend\n"
  },
  {
    "path": "DBM-VoA/Koralon.lua",
    "content": "local mod\t= DBM:NewMod(\"Koralon\", \"DBM-VoA\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(35013)\nmod:SetEncounterID(776)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 67328 66665 66725 68161\",\n\t\"SPELL_AURA_APPLIED 66684 67332 66721\",\n\t\"SPELL_AURA_APPLIED_DOSE 66721\"\n)\n\nlocal warnBreath\t\t\t= mod:NewSpellAnnounce(66665, 3)\nlocal warnMeteor\t\t\t= mod:NewSpellAnnounce(66725, 3)\nlocal warnMeteorSoon\t\t= mod:NewPreWarnAnnounce(66725, 5, 2)\nlocal warnBurningFury\t\t= mod:NewStackAnnounce(66721, 2, nil, \"Tank|Healer\")\n\nlocal specWarnCinder\t\t= mod:NewSpecialWarningMove(66684, nil, nil, nil, 1, 2)\n\nlocal timerNextMeteor\t\t= mod:NewNextTimer(47, 66725, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON) -- REVIEW! variance? (10N Lordaeron 2022/09/23) - 47.0\nlocal timerNextBurningFury\t= mod:NewNextTimer(20, 66721, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.HEALER_ICON) -- (10N Lordaeron 2022/09/23) - 20.0, 22.0, 20.0, 20.0\nlocal timerBreath\t\t\t= mod:NewBuffActiveTimer(4.5, 66665, nil, nil, nil, 2)\nlocal timerBreathCD\t\t\t= mod:NewCDTimer(45, 66665, nil, nil, nil, 2) -- (10N Lordaeron 2022/09/23) - 45.0, 45.0\n\nlocal timerKoralonEnrage\t= mod:NewBerserkTimer(300, nil, \"KoralonEnrage\")\n\nfunction mod:OnCombatStart(delay)\n\ttimerKoralonEnrage:Start(-delay)\n\ttimerNextMeteor:Start(44.9-delay) -- REVIEW! variance? (10N Lordaeron 2022/09/23) - pull:44.9\n\twarnMeteorSoon:Schedule(44.9-5-delay)\n\ttimerBreathCD:Start(12.4-delay) -- REVIEW! variance? (10N Lordaeron 2022/09/23) - pull:12.4\n\ttimerNextBurningFury:Start() -- (10N Lordaeron 2022/09/23) - pull:19.9\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(67328, 66665) then\n\t\twarnBreath:Show()\n\t\ttimerBreath:Start()\n\t\ttimerBreathCD:Start()\n\telseif args:IsSpellID(66725, 68161) then\n\t\twarnMeteor:Show()\n\t\ttimerNextMeteor:Start()\n\t\twarnMeteorSoon:Schedule(42)\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsPlayer() and args:IsSpellID(66684, 67332) then\n\t\tspecWarnCinder:Show()\n\t\tspecWarnCinder:Play(\"runaway\")\n\telseif args.spellId == 66721 then\n\t\twarnBurningFury:Show(args.destName, args.amount or 1)\n\t\ttimerNextBurningFury:Start()\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n"
  },
  {
    "path": "DBM-VoA/Toravon.lua",
    "content": "local mod\t= DBM:NewMod(\"Toravon\", \"DBM-VoA\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(38433)\nmod:SetEncounterID(885)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 72096 72034 72095 72091\",\n\t\"SPELL_CAST_SUCCESS 72104 72090\",\n\t\"SPELL_AURA_APPLIED 72098 72004\",\n\t\"SPELL_AURA_APPLIED_DOSE 72098 72004\",\n\t\"SPELL_AURA_REMOVED 72098 72004\"\n)\n\nlocal warnFreezingGround\t= mod:NewSpellAnnounce(72090, 1)\nlocal warnWhiteout\t\t\t= mod:NewSpellAnnounce(72034, 2)\nlocal warnOrb\t\t\t\t= mod:NewSpellAnnounce(72091, 3)\nlocal warnFrostbite\t\t\t= mod:NewStackAnnounce(72004, 2, nil, \"Tank|Healer\")\n\nlocal timerFrostbiteCD\t\t= mod:NewCDTimer(4, 72004, nil, \"Tank\", nil, 5, nil, DBM_COMMON_L.TANK_ICON, true) -- REVIEW! ~16s variance! Added \"keep\" arg (10N Lordaeron 2022/09/23 wipe1 || 10N Lordaeron 2022/09/23 wipe2 || 10N Lordaeron 2022/09/23 kill) - 4.7, 12.6, 4.8, 7.2, 6.5, 4.8, 18.8, 4.8, 13.6, 5.6, 11.7, 12.0, 4.9, 4.7, 34.0, 8.6, 31.8, 4.8, 14.0, 4.8, 9.6, 4.0, 4.8, 4.7, 7.0, 4.7, 4.7, 4.8, 4.8, 6.6, 14.7, 4.0, 6.0, 8.0, 3.9, 4.0, 10.0 || 7.2, 14.4, 5.7, 4.8, 4.8, 4.3, 4.3, 13.4, 7.1, 9.6, 4.8, 20.3, 6.6, 7.1, 4.0 || 4.8, 4.8, 13.8, 18.4, 4.8, 20.5, 4.2, 9.6, 19.4, 4.8, 9.6\nlocal timerFrostbite\t\t= mod:NewTargetTimer(20, 72004, nil, \"Tank|Healer\", nil, 5)\nlocal timerWhiteout\t\t\t= mod:NewNextTimer(38, 72034, nil, nil, nil, 2) -- (10N Lordaeron 2022/09/23 wipe1 || 10N Lordaeron 2022/09/23 wipe2) - 38.1, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0 || 38.1, 38.0\nlocal timerNextOrb\t\t\t= mod:NewNextTimer(38, 72091, nil, nil, nil, 1) -- (10N Lordaeron 2022/09/23 wipe1 || 10N Lordaeron 2022/09/23 wipe2) - 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0, 38.0 || 38.1, 38.0, 38.1\n\n--local timerToravonEnrage\t= mod:NewTimer(300, \"ToravonEnrage\", 26662)\n\nfunction mod:OnCombatStart(delay)\n\ttimerNextOrb:Start(10.8-delay) -- (10N Lordaeron 2022/09/23 wipe1 || 10N Lordaeron 2022/09/23 wipe2 || 10N Lordaeron 2022/09/23 kill) - pull:10.8 || pull:10.8 || pull:10.8\n\ttimerWhiteout:Start(12.8-delay) -- (10N Lordaeron 2022/09/23 wipe1 || 10N Lordaeron 2022/09/23 wipe2 || 10N Lordaeron 2022/09/23 kill) - pull:12.8 || pull:12.9 || pull:12.9\n\ttimerFrostbiteCD:Start(0.4-delay) -- REVIEW! ~3s variance? (10N Lordaeron 2022/09/23 wipe1 || 10N Lordaeron 2022/09/23 wipe2 || 10N Lordaeron 2022/09/23 kill) - pull:0.4 || pull:2.8 || pull:0.7\n--\ttimerToravonEnrage:Start(-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args:IsSpellID(72096, 72034) then\n\t\twarnWhiteout:Show()\n\t\ttimerWhiteout:Start()\n\telseif args:IsSpellID(72095, 72091) then\t--Frozen Orb(add)\n\t\twarnOrb:Show()\n\t\ttimerNextOrb:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args:IsSpellID(72104, 72090) then\t\t\t-- Freezing Ground (Aoe and damage debuff)\n\t\twarnFreezingGround:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args:IsSpellID(72098, 72004) then\t\t-- Frostbite (tanks only debuff)\n\t\twarnFrostbite:Show(args.destName, args.amount or 1)\n\t\ttimerFrostbiteCD:Start()\n\t\ttimerFrostbite:Start(args.destName)\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args:IsSpellID(72098, 72004) then\t\t-- Frostbite (tanks only debuff)\n\t\ttimerFrostbite:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-VoA/localization.cn.lua",
    "content": "-- author: callmejames @《凤凰之翼》 一区藏宝海湾\n-- commit by: yaroot <yaroot AT gmail.com>\n\nif GetLocale() ~= \"zhCN\" then return end\n\nlocal L\n\n----------------------------------\n--  Archavon the Stone Watcher  --\n----------------------------------\nL = DBM:GetModLocalization(\"Archavon\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"岩石看守者阿尔卡冯\"\n})\n\nL:SetWarningLocalization({\n\tWarningGrab\t\t\t= \"阿尔卡冯抓起了 >%s<\"\n})\n\nL:SetTimerLocalization({\n\tArchavonEnrage\t\t= \"阿尔卡冯狂暴\"\n})\n\nL:SetOptionLocalization({\n\tWarningGrab\t\t\t= \"提示抓取的目标\"\n})\n\nL:SetMiscLocalization({\n\tTankSwitch\t\t\t= \"%%s向(%S+)冲来！\"\n})\n\n--------------------------------\n--  Emalon the Storm Watcher  --\n--------------------------------\nL = DBM:GetModLocalization(\"Emalon\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"风暴看守者埃玛尔隆\"\n})\n\nL:SetTimerLocalization({\n\ttimerMobOvercharge\t\t= \"超载爆炸\",\n\tEmalonEnrage\t\t\t= \"埃玛尔隆狂暴\"\n})\n\nL:SetOptionLocalization({\n\ttimerMobOvercharge\t\t= \"为能量超载的小怪显示爆炸倒计时(debuff叠加)\"\n})\n\n---------------------------------\n--  Koralon the Flame Watcher  --\n---------------------------------\nL = DBM:GetModLocalization(\"Koralon\")\n\nL:SetGeneralLocalization({\n\tname\t\t\t\t= \"火焰看守者科拉隆\"\n})\n\nL:SetTimerLocalization({\n\tKoralonEnrage\t\t= \"科拉隆狂暴\"\n})\n\n-------------------------------\n--  Toravon the Ice Watcher  --\n-------------------------------\nL = DBM:GetModLocalization(\"Toravon\")\n\nL:SetGeneralLocalization({\n\tname = \"寒冰看守者图拉旺\"\n})\n\nL:SetTimerLocalization({\n\tToravonEnrage\t= \"图拉旺狂暴\"\n})\n"
  },
  {
    "path": "DBM-VoA/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n----------------------------------\n--  Archavon the Stone Watcher  --\n----------------------------------\nL = DBM:GetModLocalization(\"Archavon\")\n\nL:SetGeneralLocalization({\n\tname = \"Archavon der Steinwächter\"\n})\n\nL:SetWarningLocalization({\n\tWarningGrab\t\t= \"Archavon durchbohrt >%s<\"\n})\n\nL:SetTimerLocalization({\n\tArchavonEnrage\t= \"Berserker (Archavon)\"\n})\n\nL:SetOptionLocalization({\n\tWarningGrab\t\t= \"Verkünde Ziele von $spell:58666\"\n})\n\nL:SetMiscLocalization({\n\tTankSwitch\t\t= \"%%s stürzt sich auf (%S+)!\"\n})\n\n--------------------------------\n--  Emalon the Storm Watcher  --\n--------------------------------\nL = DBM:GetModLocalization(\"Emalon\")\n\nL:SetGeneralLocalization({\n\tname = \"Emalon der Sturmwächter\"\n})\n\nL:SetTimerLocalization({\n\ttimerMobOvercharge\t= \"Überladener Schlag\",\n\tEmalonEnrage\t\t= \"Berserker (Emalon)\"\n})\n\nL:SetOptionLocalization({\n\ttimerMobOvercharge\t= \"Zeige Zeit bis $spell:64219 (erfolgt bei 10 Stapeln von $spell:64217)\"\n})\n\n---------------------------------\n--  Koralon the Flame Watcher  --\n---------------------------------\nL = DBM:GetModLocalization(\"Koralon\")\n\nL:SetGeneralLocalization({\n\tname = \"Koralon der Flammenwächter\"\n})\n\nL:SetTimerLocalization({\n\tKoralonEnrage\t= \"Berserker (Koralon)\"\n})\n\n-------------------------------\n--  Toravon the Ice Watcher  --\n-------------------------------\nL = DBM:GetModLocalization(\"Toravon\")\n\nL:SetGeneralLocalization({\n\tname = \"Toravon der Eiswächter\"\n})\n\nL:SetTimerLocalization({\n\tToravonEnrage\t= \"Berserker (Toravon)\"\n})\n"
  },
  {
    "path": "DBM-VoA/localization.en.lua",
    "content": "local L\n\n----------------------------------\n--  Archavon the Stone Watcher  --\n----------------------------------\nL = DBM:GetModLocalization(\"Archavon\")\n\nL:SetGeneralLocalization({\n\tname = \"Archavon the Stone Watcher\"\n})\n\nL:SetWarningLocalization({\n\tWarningGrab\t= \"Archavon grabbed >%s<\"\n})\n\nL:SetTimerLocalization({\n\tArchavonEnrage\t= \"Archavon berserk\"\n})\n\nL:SetOptionLocalization({\n\tWarningGrab\t\t= \"Announce grab targets\"\n})\n\nL:SetMiscLocalization({\n\tTankSwitch\t\t= \"%%s lunges for (%S+)!\",\n})\n\n--------------------------------\n--  Emalon the Storm Watcher  --\n--------------------------------\nL = DBM:GetModLocalization(\"Emalon\")\n\nL:SetGeneralLocalization({\n\tname = \"Emalon the Storm Watcher\"\n})\n\nL:SetTimerLocalization({\n\ttimerMobOvercharge\t= \"Overcharge explosion\",\n\tEmalonEnrage\t\t= \"Emalon berserk\"\n})\n\nL:SetOptionLocalization({\n\ttimerMobOvercharge\t= \"Show timer for Overcharged mob (stacking debuff)\"\n})\n\n---------------------------------\n--  Koralon the Flame Watcher  --\n---------------------------------\nL = DBM:GetModLocalization(\"Koralon\")\n\nL:SetGeneralLocalization({\n\tname = \"Koralon the Flame Watcher\"\n})\n\nL:SetTimerLocalization({\n\tKoralonEnrage\t= \"Koralon berserk\"\n})\n\n-------------------------------\n--  Toravon the Ice Watcher  --\n-------------------------------\nL = DBM:GetModLocalization(\"Toravon\")\n\nL:SetGeneralLocalization({\n\tname = \"Toravon the Ice Watcher\"\n})\n\nL:SetTimerLocalization({\n\tToravonEnrage\t= \"Toravon berserk\"\n})\n"
  },
  {
    "path": "DBM-VoA/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" and GetLocale() ~= \"esMX\" then return end\nlocal L\n\n---------------------------------\n-- Archavon el Vigía de Piedra --\n---------------------------------\nL = DBM:GetModLocalization(\"Archavon\")\n\nL:SetGeneralLocalization({\n\tname = \"Archavon el Vigía de Piedra\"\n})\n\nL:SetWarningLocalization({\n\tWarningGrab\t\t= \"Archavon agarra a >%s<\"\n})\n\nL:SetTimerLocalization({\n\tArchavonEnrage\t= \"Rabia (Archavon)\"\n})\n\nL:SetOptionLocalization({\n\tWarningGrab\t\t= \"Anunciar objetivo de $spell:58666\"\n})\n\nL:SetMiscLocalization({\n\tTankSwitch\t\t= \"%%s se abalanza sobre (%S+)\"\n})\n\n------------------------------------\n-- Emalon el Vigía de la Tormenta --\n------------------------------------\nL = DBM:GetModLocalization(\"Emalon\")\n\nL:SetGeneralLocalization({\n\tname = \"Emalon el Vigía de la Tormenta\"\n})\n\nL:SetTimerLocalization({\n\ttimerMobOvercharge\t= \"Explosión de Sobrecarga\",\n\tEmalonEnrage\t\t= \"Rabia (Emalon)\"\n})\n\nL:SetOptionLocalization({\n\ttimerMobOvercharge\t= \"Mostrar temporizador para la explosión del Esbirro tempestuoso afectado por Sobrecarga\"\n})\n\n------------------------------------\n-- Koralon el Vigía de las Llamas --\n------------------------------------\nL = DBM:GetModLocalization(\"Koralon\")\n\nL:SetGeneralLocalization({\n\tname = \"Koralon el Vigía de las Llamas\"\n})\n\nL:SetTimerLocalization({\n\tKoralonEnrage\t= \"Rabia (Koralon)\"\n})\n\n-------------------------------\n-- Toravon el Vigía de Hielo --\n-------------------------------\nL = DBM:GetModLocalization(\"Toravon\")\n\nL:SetGeneralLocalization({\n\tname = \"Toravon el Vigía de Hielo\"\n})\n\nL:SetTimerLocalization({\n\tToravonEnrage\t= \"Rabia (Toravon)\"\n})\n"
  },
  {
    "path": "DBM-VoA/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\n\nlocal L\n\n----------------\n--  Archavon  --\n----------------\n\nL = DBM:GetModLocalization(\"Archavon\")\n\nL:SetGeneralLocalization({\n\tname = \"Archavon\"\n})\n\nL:SetWarningLocalization({\n\tWarningGrab\t\t= \"Archavon a Empalé >%s<\"\n})\n\nL:SetTimerLocalization({\n\tArchavonEnrage\t= \"Enrage (Archavon)\"\n})\n\nL:SetOptionLocalization({\n\tWarningGrab\t\t= \"Montre l'alerte pour le tank qui a été empalé\"\n})\n\nL:SetMiscLocalization({\n\tTankSwitch\t\t= \"%%s lunges for (%S+)!\"\n})\n\n--------------\n--  Emalon  --\n--------------\n\nL = DBM:GetModLocalization(\"Emalon\")\n\nL:SetGeneralLocalization({\n\tname = \"Emalon le guetteur d’orage\"\n})\n\nL:SetTimerLocalization({\n\ttimerMobOvercharge\t= \"Explosion de Surcharge\",\n\tEmalonEnrage\t\t= \"Enrage (Emalon)\"\n})\n\nL:SetOptionLocalization({\n\ttimerMobOvercharge\t= \"Montre le timer pour le séide surchargé (debuff empilable)\"\n})\n\n---------------\n--  Koralon  --\n---------------\n\nL = DBM:GetModLocalization(\"Koralon\")\n\nL:SetGeneralLocalization({\n\tname = \"Koralon\"\n})\n\nL:SetTimerLocalization({\n\tKoralonEnrage\t= \"Enrage (Koralon)\"\n})\n\n---------------\n--  Toravon  --\n---------------\n\nL = DBM:GetModLocalization(\"Toravon\")\n\nL:SetGeneralLocalization({\n\tname = \"Toravon la Sentinelle de glace\"\n})\n\nL:SetTimerLocalization({\n\tToravonEnrage\t= \"Enrage (Toravon)\"\n})\n"
  },
  {
    "path": "DBM-VoA/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\n\nlocal L\n\n----------------\n--  아카본  --\n----------------\n\nL = DBM:GetModLocalization(\"Archavon\")\n\nL:SetGeneralLocalization({\n\tname = \"바위 감시자 아카본\"\n})\n\nL:SetWarningLocalization({\n\tWarningGrab\t\t= \"분쇄의 도약 : >%s<\"\n})\n\nL:SetTimerLocalization({\n\tArchavonEnrage\t= \"아카본 광폭화\"\n})\n\nL:SetOptionLocalization({\n\tWarningGrab\t\t= \"분쇄의 도약 대상 알림 보기\"\n})\n\nL:SetMiscLocalization({\n\tTankSwitch\t\t= \"(%S+)에게 돌진합니다!\"\n})\n\n--------------\n--  Emalon  --\n--------------\n\nL = DBM:GetModLocalization(\"Emalon\")\n\nL:SetGeneralLocalization({\n\tname = \"폭풍의 감시자 에말론\"\n})\n\nL:SetTimerLocalization({\n\ttimerMobOvercharge\t= \"과충전 폭발\",\n\tEmalonEnrage\t\t= \"에말론 광폭화\"\n})\n\nL:SetOptionLocalization({\n\ttimerMobOvercharge\t= \"과충전 폭발까지 남은시간 바 보기\"\n})\n\n---------------\n--  Koralon  --\n---------------\n\nL = DBM:GetModLocalization(\"Koralon\")\n\nL:SetGeneralLocalization({\n\tname = \"화염 감시자 코랄론\"\n})\n\nL:SetTimerLocalization({\n\tKoralonEnrage\t\t= \"코랄론 광폭화\"\n})\n\n-------------------------------\n--  Toravon the Ice Watcher  --\n-------------------------------\nL = DBM:GetModLocalization(\"Toravon\")\n\nL:SetGeneralLocalization({\n\tname = \"얼음 감시자 토라본\"\n})\n\nL:SetTimerLocalization({\n\tToravonEnrage\t= \"토라본 광폭화\"\n})\n"
  },
  {
    "path": "DBM-VoA/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n----------------------------------\n--  Archavon the Stone Watcher  --\n----------------------------------\nL = DBM:GetModLocalization(\"Archavon\")\n\nL:SetGeneralLocalization({\n\tname = \"Аркавон Страж Камня\"\n})\n\nL:SetWarningLocalization({\n\tWarningGrab\t\t= \"Аркавон хватает |3-1(>%s<)\"\n})\n\nL:SetTimerLocalization({\n\tArchavonEnrage\t= \"Берсерк Аркавона\"\n})\n\nL:SetOptionLocalization({\n\tWarningGrab\t\t= \"Объявлять о захвате цели\"\n})\n\nL:SetMiscLocalization({\n\tTankSwitch\t\t= \"%%s бросается к (%S+)!\"\n})\n\n--------------------------------\n--  Emalon the Storm Watcher  --\n--------------------------------\nL = DBM:GetModLocalization(\"Emalon\")\n\nL:SetGeneralLocalization({\n\tname = \"Эмалон Страж Бури\"\n})\n\nL:SetTimerLocalization({\n\ttimerMobOvercharge\t= \"Взрыв в результате перегрузки\",\n\tEmalonEnrage\t\t= \"Берсерк Эмалона\"\n})\n\nL:SetOptionLocalization({\n\ttimerMobOvercharge\t= \"Отсчет времени для моба с Перегрузкой (стакающего дебафф)\"\n})\n\n---------------------------------\n--  Koralon the Flame Watcher  --\n---------------------------------\nL = DBM:GetModLocalization(\"Koralon\")\n\nL:SetGeneralLocalization({\n\tname = \"Коралон Страж Огня\"\n})\n\nL:SetTimerLocalization({\n\tKoralonEnrage\t= \"Берсерк Коралона\"\n})\n\n-------------------------------\n--  Toravon the Ice Watcher  --\n-------------------------------\nL = DBM:GetModLocalization(\"Toravon\")\n\nL:SetGeneralLocalization({\n\tname = \"Торавон Страж Льда\"\n})\n\nL:SetTimerLocalization({\n\tToravonEnrage\t= \"Берсерк Торавона\"\n})\n"
  },
  {
    "path": "DBM-VoA/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\n\nlocal L\n\n----------------------------------\n--  Archavon the Stone Watcher  --\n----------------------------------\n\nL = DBM:GetModLocalization(\"Archavon\")\n\nL:SetGeneralLocalization({\n\tname = \"『石之看守者』亞夏梵\"\n})\n\nL:SetWarningLocalization({\n\tWarningGrab\t\t= \"亞夏梵擒握 >%s<\"\n})\n\nL:SetTimerLocalization({\n\tArchavonEnrage\t= \"亞夏梵狂暴\"\n})\n\nL:SetOptionLocalization({\n\tWarningGrab\t\t= \"提示擒握的目標\"\n})\n\nL:SetMiscLocalization({\n\tTankSwitch\t\t= \"%%s撲向(%S+)!\"\n})\n\n--------------------------------\n--  Emalon the Storm Watcher  --\n--------------------------------\n\nL = DBM:GetModLocalization(\"Emalon\")\n\nL:SetGeneralLocalization({\n\tname = \"『風暴看守者』艾瑪隆\"\n})\n\nL:SetTimerLocalization({\n\ttimerMobOvercharge\t= \"超載爆炸\",\n\tEmalonEnrage\t\t= \"艾瑪隆狂暴\"\n})\n\nL:SetOptionLocalization({\n\ttimerMobOvercharge\t= \"為超載的小兵顯示計時器(減益疊加)\"\n})\n\n---------------------------------\n--  Koralon the Flame Watcher  --\n---------------------------------\n\nL = DBM:GetModLocalization(\"Koralon\")\n\nL:SetGeneralLocalization({\n\tname = \"『烈焰看守者』寇拉隆\"\n})\n\nL:SetTimerLocalization({\n\tKoralonEnrage\t= \"寇拉隆狂暴\"\n})\n\n-------------------------------\n--  Toravon the Ice Watcher  --\n-------------------------------\nL = DBM:GetModLocalization(\"Toravon\")\n\nL:SetGeneralLocalization({\n\tname = \"『寒冰看守者』拓拉梵\"\n})\n\nL:SetTimerLocalization({\n\tToravonEnrage\t= \"拓拉梵狂暴\"\n})\n"
  },
  {
    "path": "DBM-WorldEvents/DBM-WorldEvents.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0World Events|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0世界事件|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Eventos del mundo|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0이벤트|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Игровые события|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0世界事件|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Weltereignisse|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Événements Mondiaux|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0世界事件|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMWorldEvents_AllSavedVars\n## SavedVariablesPerCharacter: DBMWorldEvents_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Type: OTHER\n## X-DBM-Mod-Category: WOTLK\n## X-DBM-StatTypes: normal\n## X-DBM-Mod-World-Boss: 1\n## X-DBM-Mod-SubCategories: Holidays, Warmane\n## X-DBM-Mod-Name: World Events\n## X-DBM-Mod-Name-esES: Eventos del Mundo\n## X-DBM-Mod-Name-ruRU: Игровые события\n## X-DBM-Mod-Name-zhTW: 世界事件\n## X-DBM-Mod-Name-zhCN: 世界事件\n## X-DBM-Mod-Name-koKR: 이벤트\n## X-DBM-Mod-Name-deDE: Weltereignisse\n## X-DBM-Mod-Name-frFR: Événements Mondiaux\n## X-DBM-Mod-Sort: 150\n## X-DBM-Mod-MapID: 705,763,765,729\n## X-DBM-Mod-LoadZone: Blackrock Depths,Scarlet Monastery,Shadowfang Keep,The Slave Pens,Azshara Crater\n## X-DBM-Mod-LoadZone-zhCN: 黑石深渊,血色修道院,影牙城堡,奴隶围栏\n## X-DBM-Mod-LoadZone-ruRU: Глубины Черной горы,Монастырь Алого ордена,Крепость Темного Клыка,Узилище\n\nlocalization.en.lua\nlocalization.ru.lua\nlocalization.fr.lua\nlocalization.tw.lua\nlocalization.kr.lua\nlocalization.de.lua\nlocalization.es.lua\nlocalization.mx.lua\nlocalization.cn.lua\n\nHolidays\\ApothecaryTrio.lua\nHolidays\\Ahune.lua\nHolidays\\CorenDirebrew.lua\nHolidays\\HeadlessHorseman.lua\n\nWarmaneEvents\\TowerDefense.lua\n"
  },
  {
    "path": "DBM-WorldEvents/Holidays/Ahune.lua",
    "content": "local mod\t= DBM:NewMod(\"Ahune\", \"DBM-WorldEvents\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220925182747\")\nmod:SetCreatureID(25740)--25740 Ahune, 25755, 25756 the two types of adds\n\nmod:SetReCombatTime(10)\nmod:RegisterCombat(\"combat\")\nmod:SetMinCombatTime(15)\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_SAY\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 45954\",\n\t\"SPELL_AURA_REMOVED 45954\"\n)\n\nlocal warnSubmerged\t\t\t\t= mod:NewSpellAnnounce(37751, 2, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendBurrow.blp\")\nlocal warnEmerged\t\t\t\t= mod:NewAnnounce(\"Emerged\", 2, \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\")\n\nlocal specWarnAttack\t\t\t= mod:NewSpecialWarning(\"specWarnAttack\", nil, nil, nil, 1, 2)\n\nlocal timerCombatStart\t\t\t= mod:NewCombatTimer(10)--roleplay for first pull\nlocal timerEmerge\t\t\t\t= mod:NewTimer(33.5, \"EmergeTimer\", \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendUnBurrow.blp\", nil, nil, 6)\nlocal timerSubmerge\t\t\t\t= mod:NewTimer(92, \"SubmergeTimer\", \"Interface\\\\AddOns\\\\DBM-Core\\\\textures\\\\CryptFiendBurrow.blp\", nil, nil, 6)--Variable, 92-96\n\nfunction mod:OnCombatStart(delay)\n\tif self:AntiSpam(4, 1) then\n\t\ttimerSubmerge:Start(95-delay)--first is 95, rest are 92\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 45954 and self:AntiSpam(4, 1) then -- Ahunes Shield\n\t\twarnEmerged:Show()\n\t\ttimerSubmerge:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 45954 then -- Ahunes Shield\n\t\twarnSubmerged:Show()\n\t\ttimerEmerge:Start()\n\t\tspecWarnAttack:Show()\n\t\tspecWarnAttack:Play(\"changetarget\")\n\tend\nend\n\nfunction mod:CHAT_MSG_SAY(msg)\n\tif msg == L.Pull then\n\t\ttimerCombatStart:Start()\n\t\tself:Schedule(10, DBM.StartCombat, DBM, self, 0)\n\tend\nend\n"
  },
  {
    "path": "DBM-WorldEvents/Holidays/ApothecaryTrio.lua",
    "content": "local mod\t= DBM:NewMod(\"ApothecaryTrio\", \"DBM-WorldEvents\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220925182747\")\nmod:SetCreatureID(36272, 36296, 36565)\n\nmod:SetReCombatTime(10)\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_MONSTER_SAY\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 68821\",\n\t\"SPELL_PERIODIC_DAMAGE 68927 68934\",\n\t\"SPELL_PERIODIC_MISSED 68927 68934\"\n)\n\nlocal warnChainReaction\t\t\t= mod:NewCastAnnounce(68821, 3, nil, nil, \"Melee\", 2)\n\nlocal specWarnGTFO\t\t\t\t= mod:NewSpecialWarningGTFO(68927, nil, nil, nil, 1, 8)\n\nlocal timerHummel\t\t\t\t= mod:NewTimer(10.5, \"HummelActive\", 2457, nil, false, \"TrioActiveTimer\")\nlocal timerBaxter\t\t\t\t= mod:NewTimer(18.5, \"BaxterActive\", 2457, nil, false, \"TrioActiveTimer\")\nlocal timerFrye\t\t\t\t\t= mod:NewTimer(26.5, \"FryeActive\", 2457, nil, false, \"TrioActiveTimer\")\nlocal timerChainReaction\t\t= mod:NewCastTimer(3, 68821)\n\nmod:AddBoolOption(\"TrioActiveTimer\", true, \"timer\", nil, 1)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 68821 and self:AntiSpam(3, 1) then\n\t\twarnChainReaction:Show()\n\t\ttimerChainReaction:Start()\n\tend\nend\n\nfunction mod:SPELL_PERIODIC_DAMAGE(_, _, _, destGUID, _, _, spellId, spellName)\n\tif (spellId == 68927 or spellId == 68934) and destGUID == UnitGUID(\"player\") and self:AntiSpam(3, 2) then\n\t\tspecWarnGTFO:Show(spellName)\n\t\tspecWarnGTFO:Play(\"watchfeet\")\n\tend\nend\nmod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE\n\nfunction mod:CHAT_MSG_MONSTER_SAY(msg)\n\tif msg == L.SayCombatStart or msg:find(L.SayCombatStart) then\n\t\tself:SendSync(\"TrioPulled\")\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif msg == \"TrioPulled\" then\n\t\tif self.Options.TrioActiveTimer then\n\t\t\ttimerHummel:Start()\n\t\t\ttimerBaxter:Start()\n\t\t\ttimerFrye:Start()\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-WorldEvents/Holidays/CorenDirebrew.lua",
    "content": "local mod\t= DBM:NewMod(\"CorenDirebrew\", \"DBM-WorldEvents\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20220925182747\")\nmod:SetCreatureID(23872)\nmod:SetReCombatTime(10)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 47310\",\n\t\"SPELL_AURA_APPLIED 47376 47340 47442 51413\",\n\t\"SPELL_AURA_REMOVED 47340 47442 51413\"\n)\n\nlocal warnDisarm\t\t\t= mod:NewCastAnnounce(47310, 2, nil, nil, \"Melee\")\nlocal warnBarrel\t\t\t= mod:NewTargetAnnounce(47442, 4)\n\n--local specWarnDisarm\t\t= mod:NewSpecialWarningRun(47310, mod:IsMelee())\nlocal specWarnBrew\t\t\t= mod:NewSpecialWarning(\"specWarnBrew\", nil, nil, nil, 1, 7)\nlocal specWarnBrewStun\t\t= mod:NewSpecialWarning(\"specWarnBrewStun\")\nlocal yellBarrel\t\t\t= mod:NewYell(47442, L.YellBarrel, \"Tank\")\n\n--local timerBrew\t\t\t\t= mod:NewTargetTimer(10, 47376)\nlocal timerBarrel\t\t\t= mod:NewTargetTimer(8, 47442, nil, nil, nil, 3)\nlocal timerBrewStun\t\t\t= mod:NewTargetTimer(6, 47340, nil, false, nil, 3)\nlocal timerDisarm\t\t\t= mod:NewCastTimer(4, 47310, nil, \"Melee\", 2, 2)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 47310 then\n\t\twarnDisarm:Show()\n\t\ttimerDisarm:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 47376 then\t\t\t\t\t\t\t\t\t\t\t-- Brew\n--\t\ttimerBrew:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnBrew:Show()\n\t\t\tspecWarnBrew:Play(\"useitem\")\n\t\tend\n\telseif spellId == 47340 then\t\t\t\t\t\t\t\t\t\t-- Brew Stun\n\t\ttimerBrewStun:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnBrewStun:Show()\n\t\tend\n\telseif args:IsSpellID(47442, 51413) then\t\t\t\t\t\t\t\t-- Barreled!\n\t\twarnBarrel:Show(args.destName)\n\t\ttimerBarrel:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tyellBarrel:Yell()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n--\tif args.spellId == 47376 then\t\t\t\t\t\t\t\t\t\t\t-- Brew\n--\t\ttimerBrew:Cancel(args.destName)\n\tif args.spellId == 47340 then\t\t\t\t\t\t\t\t\t\t-- Brew Stun\n\t\ttimerBrewStun:Cancel(args.destName)\n\telseif args:IsSpellID(47442, 51413) then\t\t\t\t\t\t\t\t-- Barreled!\n\t\ttimerBarrel:Cancel(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-WorldEvents/Holidays/HeadlessHorseman.lua",
    "content": "local mod\t= DBM:NewMod(\"HeadlessHorseman\", \"DBM-WorldEvents\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20241122155852\")\nmod:SetCreatureID(23682, 23775)\n\nmod:SetReCombatTime(10)\nmod:RegisterCombat(\"combat\")\n--mod:RegisterKill(\"say\", L.SayCombatEnd)\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_SAY\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 42380 42514\",\n\t\"UNIT_SPELLCAST_SUCCEEDED\",\n\t\"CHAT_MSG_MONSTER_SAY\",\n\t\"PARTY_KILL\",\n\t\"UNIT_DIED\"\n)\n\nlocal warnConflag\t\t\t\t= mod:NewTargetAnnounce(42380, 3)\nlocal warnSquashSoul\t\t\t= mod:NewTargetAnnounce(42514, 2, nil, false, 2)\nlocal warnPhase\t\t\t\t\t= mod:NewAnnounce(\"WarnPhase\", 2, \"136116\")\nlocal warnHorsemanSoldiers\t\t= mod:NewAnnounce(\"warnHorsemanSoldiers\")\nlocal warnHorsemanHead\t\t\t= mod:NewAnnounce(\"warnHorsemanHead\", 3)\n\nlocal specWarnHorsemanHead\t\t= mod:NewSpecialWarning(\"specWarnHorsemanHead\")\n\nlocal timerCombatStart\t\t\t= mod:NewCombatTimer(21.7)--roleplay for first pull\nlocal timerConflag\t\t\t\t= mod:NewTargetTimer(4, 42380)\nlocal timerSquashSoul\t\t\t= mod:NewTargetTimer(15, 42514)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 42380 then\t\t\t\t\t-- Conflagration\n\t\twarnConflag:Show(args.destName)\n\t\ttimerConflag:Start(args.destName)\n\telseif spellId == 42514 then\t\t\t\t-- Squash Soul\n\t\twarnSquashSoul:Show(args.destName)\n\t\ttimerSquashSoul:Start(args.destName)\n\tend\nend\n\nfunction mod:UNIT_SPELLCAST_SUCCEEDED(_, spellName)\n--\t\"<48.6> Headless Horseman:Possible Target<Omegal>:target:Headless Horseman Climax - Command, Head Repositions::0:42410\", -- [35]\n\tif spellName == GetSpellInfo(42410) then\n\t\tself:SendSync(\"HeadRepositions\")\n--\t\"<23.0> Headless Horseman:Possible Target<nil>:target:Headless Horseman Climax, Body Stage 1::0:42547\", -- [1]\n\telseif spellName == GetSpellInfo(42547) then\n\t\tself:SendSync(\"BodyStage1\")\n--\t\"<49.0> Headless Horseman:Possible Target<Omegal>:target:Headless Horseman Climax, Body Stage 2::0:42548\", -- [7]\n\telseif spellName == GetSpellInfo(42548) then\n\t\tself:SendSync(\"BodyStage2\")\n--\t\"<70.6> Headless Horseman:Possible Target<Omegal>:target:Headless Horseman Climax, Body Stage 3::0:42549\", -- [13]\n\telseif spellName == GetSpellInfo(42549) then\n\t\tself:SendSync(\"BodyStage3\")\n\tend\nend\n\n--Use syncing since these unit events require \"target\" or \"focus\" to detect.\n--At least someone in group should be targeting this stuff and sync it to those that aren't (like a healer)\nfunction mod:OnSync(event)\n\tif event == \"HeadRepositions\" then\n\t\twarnHorsemanHead:Show()\n\telseif event == \"BodyStage1\" then\n\t\twarnPhase:Show(1)\n\telseif event == \"BodyStage2\" then\n\t\twarnPhase:Show(2)\n\telseif event == \"BodyStage3\" then\n\t\twarnPhase:Show(3)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_SAY(msg)\n\tif msg == L.HorsemanHead then\t\t\t\t\t\t\t\t\t\t\t-- No combatlog event for head spawning, Emote works iffy(head doesn't emote First time, only 2nd and forward)\n\t\tspecWarnHorsemanHead:Show()\n\telseif msg == L.HorsemanSoldiers and self:AntiSpam(5, 1) then\t-- Warning for adds spawning. No CLEU or UNIT event for it.\n\t\twarnHorsemanSoldiers:Show()\n\tend\nend\n\nfunction mod:CHAT_MSG_SAY(msg)\n\tif msg == L.HorsemanSummon and self:AntiSpam(5) then\t\t-- Summoned\n\t\ttimerCombatStart:Start()\n\tend\nend\n\nfunction mod:UNIT_DIED(args) -- 2024/10/22: found one log where only PARTY_KILL was fired, no UNIT_DIED\n\tif not self:IsInCombat() then return end\n\tif self:GetCIDFromGUID(args.destGUID) == 23775 then\n\t\tDBM:EndCombat(self)\n\tend\nend\nmod.PARTY_KILL = mod.UNIT_DIED\n"
  },
  {
    "path": "DBM-WorldEvents/WarmaneEvents/TowerDefense.lua",
    "content": "local mod\t= DBM:NewMod(\"WarmaneTowerDefense\", \"DBM-WorldEvents\", 2)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250107102914\")\nmod:SetUsedIcons(1, 2, 3, 4, 5)\nmod:SetHotfixNoticeRev(20241231000000)\nmod.noStatistics = true -- needed to avoid Start/End chat messages, as well as other interactions not really suited for this event (wave based)\n\nmod:RegisterCombat(\"emote_regex\", L.RoundStart)\nmod:SetWipeTime(100) -- random number, just to reach waves/not assume wipe\n\nmod:RegisterEvents(\n\t\"CHAT_MSG_RAID_BOSS_EMOTE\"\n)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 21099\",\n\t\"SPELL_CAST_SUCCESS 15847 28410 34162\",\n\t\"SPELL_AURA_APPLIED 36096 66009 20475 21098 22067 28410 41142 44535\",\n\t\"SPELL_AURA_APPLIED_DOSE 41142\",\n\t\"SPELL_AURA_REMOVED 28410\",\n\t\"SPELL_DAMAGE\",\n\t\"SPELL_MISSED\",\n\t\"UNIT_SPELLCAST_START target focus\"\n)\n\n-- General\nlocal warnBossNow\t\t\t\t\t= mod:NewCountAnnounce(31315, 1) -- not really a count, but used for boss name\n\nlocal timerToResurrect\t\t\t\t= mod:NewNextTimer(30, 44535, nil, nil, nil, 6)\n-- local timerCombatStart\t\t\t\t= mod:NewCombatTimer(30)\n\nmod:RemoveOption(\"HealthFrame\")\nmod:AddBoolOption(\"TimerRound\", true, \"timer\", nil, 1, 1)\n\n-- Trash\nmod:AddTimerLine(DBM_COMMON_L.ADDS)\nlocal specWarnSpellReflectDispel\t= mod:NewSpecialWarningDispel(36096, \"MagicDispeller\", nil, nil, 1, 2)\nlocal specWarnHandOfProtectionDispel= mod:NewSpecialWarningDispel(66009, \"ImmunityDispeller\", nil, nil, 1, 2)\n\n-- Bosses\nmod:AddTimerLine(string.upper(string.format(\"|cffff7d0a%s|r\", BOSSES)))\n-- Dragons\nmod:AddTimerLine(\"Dragons\")\nlocal timerTailSweep\t\t\t\t= mod:NewVarTimer(\"v15-20\", 15847, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON, nil, 1, 2) -- 5s variance [15-20] (Lordaeron Horde [2024-12-27]@[13:17:37]) - \"Tail Sweep-15847-npc:6836-432 = pull:1152.8, 18.2, 16.3, 18.7, 16.7, 16.3, 16.3, 17.3, 19.6, 16.4\"\n\n-- Azuregos (400052)\nmod:AddTimerLine(\"Azuregos\")\nlocal warnReflection\t\t\t\t= mod:NewSpellAnnounce(22067, 2)\n\nlocal specWarnChillDispel\t\t\t= mod:NewSpecialWarningDispel(21098, \"MagicDispeller\", nil, nil, 1, 2)\n\nlocal timerFrostBreath\t\t\t\t= mod:NewVarTimer(\"v15-20\", 21099, nil, \"Tank|Healer\", nil, 5, nil, DBM_COMMON_L.TANK_ICON) -- 5s variance [15-20] (Lordaeron Horde [2024-12-27]@[13:17:37]) - \"Frost Breath-21099-npc:6836-432 = pull:1148.1, 18.7, 16.1, 18.6, 15.9, 19.5, 16.5, 15.2, 20.0, 15.8\"\nlocal timerNextChill\t\t\t\t= mod:NewNextTimer(15, 21098, nil, nil, nil, 2) -- (Lordaeron Horde [2024-12-27]@[13:17:37]) - \"Chill-21098-npc:6836-432 = pull:1160.1[+41], 14.7[+10], 0.1[+20], 15.0[+38], 14.9[+26], 15.0[+18], 15.0[+21], 14.9[+21], 15.0[+18], 14.9[+8], 0.1[+18], 14.9, 0.1[+4], 14.9\"\n\n-- Ysondre (400025)\nmod:AddTimerLine(\"Ysondre\")\nlocal warnMindControlSoon\t\t\t= mod:NewSoonAnnounce(28410, 4)\nlocal warnMindControl\t\t\t\t= mod:NewTargetNoFilterAnnounce(28410, 3)\n\nlocal timerMindControlActive\t\t= mod:NewBuffActiveTimer(20, 28410, nil, nil, nil, 5)\nlocal timerNextMindControl\t\t\t= mod:NewNextTimer(45, 28410, nil, nil, nil, 3) -- (Lordaeron Horde [2024-12-27]@[13:17:37]) - \"Chains of Kel'Thuzad-28410-npc:6809-976 = pull:385.1, 0.0, 0.0, 0.0, 0.0, 45.0, 0.0, 0.0, 0.0, 0.0, 45.0, 0.0, 0.0, 0.0, 0.0\"\n\nmod:AddSetIconOption(\"SetIconOnMindControl\", 28410, true, 0, {1, 2, 3, 4, 5})\nmod:AddBoolOption(\"EqUneqWeapons\", mod:IsDps(), nil, nil, nil, nil, 28410)\n\n-- Shade of Aran (400024)\nmod:AddTimerLine(\"Shade of Aran\")\nlocal specWarnCounterspellStopCast\t= mod:NewSpecialWarningCast(29961, \"SpellCaster\", nil, nil, 1, 2)\nlocal specWarnIceBurstRun\t\t\t= mod:NewSpecialWarningRun(69108, \"Melee\", nil, nil, 4, 2)\nlocal specWarnLivingBombMoveAway\t= mod:NewSpecialWarningMoveAway(20475, \"Melee\", nil, nil, 1, 2) -- Shared with Ragnaros too\n\nmod:AddRangeFrameOption(15, 69108)\n\n-- Ragnaros (400049)\nmod:AddTimerLine(\"Ragnaros\")\nlocal specWarnWrathOfRagnarosRun\t= mod:NewSpecialWarningRun(20566, \"Melee\", nil, nil, 4, 2)\n\n-- Illidan Stormrage (400022)\nmod:AddTimerLine(\"Illidan Stormrage\")\n\nlocal specWarnAuraofDreadDefensive\t= mod:NewSpecialWarningStack(41142, nil, 6, nil, 1, 2)\n\n-- Void Reaver (400051)\nmod:AddTimerLine(\"Void Reaver\")\nlocal warnWarStompSoon\t\t\t\t= mod:NewSoonAnnounce(41534, 2)\n\nlocal specWarnWarStompRun\t\t\t= mod:NewSpecialWarningRun(41534, \"Melee\", nil, nil, 4, 2)\nlocal specWarnArcaneOrbDodge\t\t= mod:NewSpecialWarningDodge(34190, nil, nil, nil, 1, 2) -- No event for this cast, only damage and aura applied\n\nlocal mindControlledTargets = {}\nlocal activeBoss -- don't sync, due to localization\nlocal counterspellName = DBM:GetSpellInfo(29961)\nlocal iceBurstSpellName = DBM:GetSpellInfo(69108)\nlocal wrathOfRagnarosSpellName = DBM:GetSpellInfo(20566)\nmod.vb.roundCounter = 0\nmod.vb.isBossRound = false\nmod.vb.mindControlIcon = 1\n\nlocal playerClass = select(2, UnitClass(\"player\"))\nlocal isHunter = playerClass == \"HUNTER\"\n\nlocal function resurrectionTicker(self)\n\ttimerToResurrect:Start() -- removed Restart to catch all early refreshes\n\tself:Schedule(30, resurrectionTicker, self)\nend\n\nlocal function announceMindControlTargets(self)\n\twarnMindControl:Show(table.concat(mindControlledTargets, \"<, >\"))\n\ttimerMindControlActive:Start()\n\ttable.wipe(mindControlledTargets)\n\tself.vb.mindControlIcon = 1\nend\n\nlocal function checkWeaponRemovalSetting(self)\n\tif not self.Options.EqUneqWeapons then return false end\nend\n\nlocal function UnW(self)\n\tif self:IsEquipmentSetAvailable(\"pve\") then\n\t\tPickupInventoryItem(16)\n\t\tPutItemInBackpack()\n\t\tPickupInventoryItem(17)\n\t\tPutItemInBackpack()\n\t\tDBM:Debug(\"MH and OH unequipped\", 2)\n\t\tif isHunter then\n\t\t\tPickupInventoryItem(18)\n\t\t\tPutItemInBackpack()\n\t\t\tDBM:Debug(\"Ranged unequipped\", 2)\n\t\tend\n\tend\nend\n\nlocal function EqW(self)\n\tif self:IsEquipmentSetAvailable(\"pve\") then\n\t\tDBM:Debug(\"trying to equip pve\")\n\t\tUseEquipmentSet(\"pve\")\n\tend\nend\n\nlocal function onBossCombatStart(self, npcId)\n\tif npcId == 400022 then -- Illidan Stormrage\n\t\twarnBossNow:Play(\"behindboss\")\n\t\t-- To do:\n\t\t-- Check for Curse of Tongues\n\t\t-- Check for Fire Resistance Aura\n\t\t-- Check for Shadow Resistance Aura\n--\telseif npcId == 400024 then -- Shade of Aran\n\telseif npcId == 400025 then -- Ysondre\n\t\twarnBossNow:Play(\"dragonnow\")\n\t\t-- To do:\n\t\t-- Dragon: attack on the sides\n\t\t-- Check for Curse of Tongues\n\t\t-- Check for Nature Resistance\n--\telseif npcId == 400049 then-- Ragnaros\n--\telseif npcId == 400051 then-- Void Reaver\n\telseif npcId == 400052 then-- Azuregos\n\t\twarnBossNow:Play(\"dragonnow\")\n\t\t-- To do:\n\t\t-- Dragon: attack on the sides\n\t\t-- Check for Curse of Tongues\n\tend\nend\n\n-- function mod:OnCombatStart(delay)\n-- end\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 21099 then -- Frost Breath\n\t\ttimerFrostBreath:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 15847 then -- Tail Sweep\n\t\ttimerTailSweep:Start()\n\telseif spellId == 28410 then -- Chains of Kel'Thuzad (Mind Control)\n\t\twarnMindControlSoon:Schedule(20)\n\t\ttimerNextMindControl:Start()\n\t\tif (args.destName == UnitName(\"player\") or args:IsPlayer()) and checkWeaponRemovalSetting(self) then\n\t\t\tDBM:Debug(\"Unequipping\", 2)\n\t\t\tUnW(self)\n\t\t\tUnW(self)\n\t\tend\n\t\tif #mindControlledTargets > 0 then -- reset icon and wipe table if it's not already empty, since there's no boss detection for each wave\n\t\t\ttable.wipe(mindControlledTargets)\n\t\t\tself.vb.mindControlIcon = 1\n\t\tend\n\telseif spellId == 34162 then -- Pounding (after cast success, starts channeling for 5s)\n\t\twarnWarStompSoon:Show()\n\t\tspecWarnWarStompRun:Schedule(5)\n\t\tspecWarnWarStompRun:ScheduleVoice(5, \"runout\")\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 36096 and args:IsDestTypeHostile() and self:AntiSpam(5, 1) then -- Spell Reflection\n\t\tspecWarnSpellReflectDispel:Show(args.destName)\n\t\tspecWarnSpellReflectDispel:Play(\"helpdispel\")\n\telseif spellId == 66009 and args:IsDestTypeHostile() and self:AntiSpam(5, 2) then -- Hand of Protection\n\t\tspecWarnHandOfProtectionDispel:Show(args.destName)\n\t\tspecWarnHandOfProtectionDispel:Play(\"helpdispel\")\n\telseif spellId == 20475 and args:IsPlayer() then -- Living Bomb\n\t\tspecWarnLivingBombMoveAway:Show()\n\t\tspecWarnLivingBombMoveAway:Play(\"runout\")\n\telseif spellId == 21098 and args:IsDestTypePlayer() and self:AntiSpam(5, 3) then -- Chill\n\t\ttimerNextChill:Start()\n\t\tif self:CheckDispelFilter(\"magic\") then\n\t\t\tspecWarnChillDispel:Show(args.destName)\n\t\t\tspecWarnChillDispel:Play(\"helpdispel\")\n\t\tend\n\telseif spellId == 22067 then -- Reflection\n\t\twarnReflection:Show()\n\telseif spellId == 28410 then -- Chains of Kel'Thuzad (Mind Control)\n\t\tmindControlledTargets[#mindControlledTargets + 1] = args.destName\n\t\tif self.Options.SetIconOnMindControl then\n\t\t\tself:SetIcon(args.destName, self.vb.mindControlIcon)\n\t\tend\n\t\tself.vb.mindControlIcon = self.vb.mindControlIcon + 1\n\t\tself:Unschedule(announceMindControlTargets)\n\t\tif #mindControlledTargets >= 5 then\n\t\t\tannounceMindControlTargets(self)\n\t\telse\n\t\t\tself:Schedule(1, announceMindControlTargets, self)\n\t\tend\n\telseif spellId == 41142 then -- Aura of Dread\n\t\tlocal amount = args.amount or 1\n\t\tif args:IsPlayer() and amount == 6 then -- Only warn once when you reach 6 stacks, to reduce spam (even though option says higher than 6 stacks)\n\t\t\tspecWarnAuraofDreadDefensive:Show(amount)\n\t\t\tspecWarnAuraofDreadDefensive:Play(\"defensive\") -- Defensives or Immunities (if available - Cloak of Shadows, Divine Shield, Anti-Magic Shell)\n\t\tend\n\telseif spellId == 44535 and self:AntiSpam(5, 8) then -- Spirit Heal (mass resurrection)\n\t\tself:SendSync(\"TowerDefense-SpiritHeal\")\n\tend\nend\nmod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 28410 then -- Chains of Kel'Thuzad (Mind Control)\n\t\tif self.Options.SetIconOnMindControl then\n\t\t\tself:SetIcon(args.destName, 0)\n\t\tend\n\t\tif (args.destName == UnitName(\"player\") or args:IsPlayer()) and checkWeaponRemovalSetting(self) then\n\t\t\tDBM:Debug(\"Equipping scheduled\", 2)\n\t\t\tEqW(self)\n\t\t\tself:Schedule(0.1, EqW, self)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_DAMAGE(_, _, _, destGUID, destName, _, spellId, spellName)\n\tif spellId == 34190 and self:AntiSpam(7, 4) then -- Arcane Orb (Silence on hit)\n\t\tspecWarnArcaneOrbDodge:Show(spellName)\n\t\tspecWarnArcaneOrbDodge:Play(\"silencesoon\")\n\tend\n\t-- Check for which boss is active\n\tif self.vb.isBossRound and not activeBoss then\n\t\tlocal bossCreatureId = DBM:GetCIDFromGUID(destGUID)\n\t\tif bossCreatureId == 400022 -- Illidan Stormrage\n\t\tor bossCreatureId == 400024 -- Shade of Aran\n\t\tor bossCreatureId == 400025 -- Ysondre\n\t\tor bossCreatureId == 400049 -- Ragnaros\n\t\tor bossCreatureId == 400051 -- Void Reaver\n\t\tor bossCreatureId == 400052 -- Azuregos\n\t\tthen\n\t\t\tactiveBoss = destName\n\t\t\twarnBossNow:Show(activeBoss)\n\t\t\tonBossCombatStart(self, bossCreatureId)\n\t\tend\n\tend\nend\nmod.SPELL_MISSED = mod.SPELL_DAMAGE\n\n-- sync due to lack of IEEU boss1\nfunction mod:UNIT_SPELLCAST_START(unit, spellName)\n\tif spellName == iceBurstSpellName and self:AntiSpam(1, 5) then -- Ice Burst\n\t\tself:SendSync(\"TowerDefense-IceBurst\")\n\telseif spellName == counterspellName and self:GetUnitCreatureId(unit) == 400024 and self:AntiSpam(1, 6) then -- Counterspell\n\t\tself:SendSync(\"TowerDefense-Counterspell\")\n\telseif spellName == wrathOfRagnarosSpellName and self:AntiSpam(1, 7) then -- Wrath of Ragnaros\n\t\tself:SendSync(\"TowerDefense-WrathOfRagnaros\")\n\tend\nend\n\nfunction mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)\n\tif msg:match(L.RoundStart) then\n\t\tself.vb.roundCounter = tonumber(msg:match(L.RoundStart))\n\t\tDBM:AddSpecialEventToTranscriptorLog(\"Started round\" .. tostring(self.vb.roundCounter))\n\t\tactiveBoss = nil\n\t\tif (self.vb.roundCounter % 4) == 0 then -- Boss spawns every 4 rounds\n\t\t\tself.vb.isBossRound = true\n\t\telse\n\t\t\tself.vb.isBossRound = false\n\t\tend\n\t-- elseif msg == \"30\" then\n\t-- \ttimerCombatStart:Start()\n\telseif msg:match(L.RoundComplete) then -- victory\n\t\tDBM:EndCombat(self)\n\t\tDBM:AddSpecialEventToTranscriptorLog(\"Completed round\" .. tostring(self.vb.roundCounter))\n\t\tself:Unschedule(resurrectionTicker)\n\t\tself:UnregisterShortTermEvents()\n\t\t-- Custom bar that's bound to core so timer doesn't stop when mod stops its own timers\n\t\tif self.Options.TimerRound then\n\t\t\tlocal nextRound = self.vb.roundCounter + 1\n\t\t\tlocal nextRoundIsBoss = (nextRound % 4) == 0\n\t\t\tDBT:CreateBar(45, self.localization.timers.TimerRound:format(nextRound, nextRoundIsBoss and DBM_COMMON_L.MYTHIC_ICON..DBM_COMMON_L.BOSS or DBM_COMMON_L.ADDS), \"Interface\\\\Icons\\\\Ability_Warrior_OffensiveStance\", nil, nil, nil, nil, self.Options.TimerRoundTColor, nextRoundIsBoss and DBM_COMMON_L.MYTHIC_ICON or nil, nil, nil, self.Options.TimerRoundCVoice, 5)\n\t\tend\n\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Hide()\n\t\tend\n\telseif msg:find(L.RoundFailed) then -- wipe\n\t\tDBM:EndCombat(self, true)\n\t\tDBM:AddSpecialEventToTranscriptorLog(\"Wiped on round\" .. tostring(self.vb.roundCounter))\n\t\tself:Unschedule(resurrectionTicker)\n\t\tself:UnregisterShortTermEvents()\n\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Hide()\n\t\tend\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif msg == \"TowerDefense-IceBurst\" then\n\t\tspecWarnIceBurstRun:Show()\n\t\tspecWarnIceBurstRun:Play(\"runout\")\n\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:SetBossRange(15, self:GetBossUnitByCreatureId(400024)) -- Shade of Aran\n\t\t\tself:Schedule(3, DBM.RangeCheck.DisableBossMode, DBM.RangeCheck) -- boss casted for 2.86s with Curse of Tongues, 2.20s without\n\t\t\t--DBM.RangeCheck:SetHideTime(3) -- Hide is not properly hiding boss radar, but restoring to a previous state that does not exist and defaults to range check.\n\t\tend\n\telseif msg == \"TowerDefense-Counterspell\" then\n\t\tspecWarnCounterspellStopCast:Show()\n\t\tspecWarnCounterspellStopCast:Play(\"stopcast\")\n\telseif msg == \"TowerDefense-WrathOfRagnaros\" then\n\t\tspecWarnWrathOfRagnarosRun:Show()\n\t\tspecWarnWrathOfRagnarosRun:Play(\"runout\")\n\telseif msg == \"TowerDefense-SpiritHeal\" then\n\t\tself:Unschedule(resurrectionTicker)\n\t\tresurrectionTicker(self)\n\tend\nend\n"
  },
  {
    "path": "DBM-WorldEvents/localization.cn.lua",
    "content": "if GetLocale() ~= \"zhCN\" then return end\n\nlocal L\n\n------------------------------\n--  The Crown Chemical Co.  --\n------------------------------\nL = DBM:GetModLocalization(\"ApothecaryTrio\")\n\nL:SetGeneralLocalization({\n\tname = \"药剂师三人组\"\n})\n\nL:SetTimerLocalization({\n\tHummelActive\t\t= \"汉摩尔加入战斗\",\n\tBaxterActive\t\t= \"拜克斯特加入战斗\",\n\tFryeActive\t\t= \"弗莱加入战斗\"\n})\n\nL:SetOptionLocalization({\n\tTrioActiveTimer\t\t= \"计时条：药剂师何时加入战斗\"\n})\n\nL:SetMiscLocalization({\n\tSayCombatStart\t\t= \"他们顾得上告诉你我是谁或者我在做些什么吗？\"\n})\n\n----------------------------\n--  The Frost Lord Ahune  --\n----------------------------\nL = DBM:GetModLocalization(\"Ahune\")\n\nL:SetGeneralLocalization({\n\tname = \"埃霍恩\"\n})\n\nL:SetWarningLocalization({\n--\tSubmerged\t\t= \"埃霍恩已隐没\",\n\tEmerged\t\t\t= \"埃霍恩已现身\",\n\tspecWarnAttack\t= \"埃霍恩拥有易伤 - 现在攻击!\"\n})\n\nL:SetTimerLocalization({\n\tSubmergeTimer\t= \"隐没\",\n\tEmergeTimer\t\t= \"现身\",\n\tTimerCombat\t\t= \"战斗开始\"\n})\n\nL:SetOptionLocalization({\n--\tSubmerged\t\t= \"当埃霍恩隐没时显示警报\",\n\tEmerged\t\t\t= \"警报：埃霍恩现身\",\n\tspecWarnAttack\t= \"特殊警报：埃霍恩拥有易伤\",\n\tSubmergeTimer\t= \"计时条：隐没\",\n\tEmergeTimer\t\t= \"计时条：现身\",\n\tTimerCombat\t\t= \"为战斗开始显示计时条\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"冰石已经溶化了!\"\n})\n\n----------------------\n--  Coren Direbrew  --\n----------------------\nL = DBM:GetModLocalization(\"CorenDirebrew\")\n\nL:SetGeneralLocalization({\n\tname = \"科林·烈酒\"\n})\n\nL:SetWarningLocalization({\n\tspecWarnBrew\t\t= \"在他再丢你一个前喝掉酒！\",\n\tspecWarnBrewStun\t= \"提示：你疯狂了，记得下一次喝啤酒！\"\n})\n\nL:SetOptionLocalization({\n\tspecWarnBrew\t\t= \"特殊警报：$spell:47376\",\n\tspecWarnBrewStun\t= \"特殊警报：$spell:47340\"\n})\n\nL:SetMiscLocalization({\n\tYellBarrel\t\t\t= \"我中了空桶！\"\n})\n\n-----------------------------\n--  The Headless Horseman  --\n-----------------------------\nL = DBM:GetModLocalization(\"HeadlessHorseman\")\n\nL:SetGeneralLocalization({\n\tname = \"无头骑士\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t\t\t= \"第%d阶段\",\n\twarnHorsemanSoldiers\t= \"跃动的南瓜出现了\",\n\twarnHorsemanHead\t\t= \"打脑袋！\",\n\tspecWarnHorsemanHead\t= \"旋风斩 - 转换目标!\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t\t\t= \"警报：阶段转换\",\n\twarnHorsemanSoldiers\t= \"警报：跃动的南瓜出现\",\n\twarnHorsemanHead\t\t= \"特殊警报：无头骑士的脑袋出现\",\n\tspecWarnHorsemanHead\t= \"为旋风斩显示特别警报(第二次及最后的头颅出现)\"\n})\n\nL:SetMiscLocalization({ -- 2024/10/22: On Warmane SQL, there are no translations of these broadcasts to zhCN, so defaulted to English.\n--\tHorsemanSummon\t\t\t= \"无头骑士来了……\",\n--\tHorsemanHead\t\t\t= \"过来这里，你这白痴!\", -- local SQL has different string - 白痴，到这边来！\n--\tHorsemanSoldiers\t\t= \"士兵们，起来战斗吧！为死去的骑士带来胜利的荣耀！\", -- 23861\n--\tSayCombatEnd\t\t\t= \"我也曾面对过这样的末路。还有什么新的冒险在等着呢?\" -- 23455 (local SQL has different string - 我曾经经历过这样的结局。这次会有新意吗？)\n})\n"
  },
  {
    "path": "DBM-WorldEvents/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n------------------------------\n--  The Crown Chemical Co.  --\n------------------------------\nL = DBM:GetModLocalization(\"ApothecaryTrio\")\n\nL:SetTimerLocalization({\n\tHummelActive\t\t= \"Hummel wird aktiv\",\n\tBaxterActive\t\t= \"Baxter wird aktiv\",\n\tFryeActive\t\t\t= \"Frye wird aktiv\"\n})\n\nL:SetOptionLocalization({\n\tTrioActiveTimer\t\t= \"Zeige Zeit bis Apotheker aktiv werden\"\n})\n\nL:SetMiscLocalization({\n\tSayCombatStart\t\t= \"Haben sie sich die Mühe gemacht und Euch gesagt, wer ich bin und warum ich das hier tue?\"\n})\n\n----------------------------\n--  The Frost Lord Ahune  --\n----------------------------\nL = DBM:GetModLocalization(\"Ahune\")\n\nL:SetWarningLocalization({\n\tEmerged\t\t\t= \"Aufgetaucht\",\n\tspecWarnAttack\t= \"Ahune ist verwundbar - Angriff!\"\n})\n\nL:SetTimerLocalization({\n\tSubmergeTimer\t= \"Abtauchen\",\n\tEmergeTimer\t\t= \"Auftauchen\"\n})\n\nL:SetOptionLocalization({\n\tEmerged\t\t\t= \"Zeige Warnung, wenn Ahune auftaucht\",\n\tspecWarnAttack\t= \"Spezialwarnung, wenn Ahune verwundbar wird\",\n\tSubmergeTimer\t= \"Zeige Zeit bis Abtauchen\",\n\tEmergeTimer\t\t= \"Zeige Zeit bis Auftauchen\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"Der Eisbrocken ist geschmolzen!\"\n})\n\n----------------------\n--  Coren Direbrew  --\n----------------------\nL = DBM:GetModLocalization(\"CorenDirebrew\")\n\nL:SetWarningLocalization({\n\tspecWarnBrew\t\t= \"Werde das Bier los, bevor sie dir noch eins zuwirft!\",\n\tspecWarnBrewStun\t= \"TIPP: Du hast eine Kopfnuss kassiert, trink das Bier beim nächsten Mal!\"\n})\n\nL:SetOptionLocalization({\n\tspecWarnBrew\t\t= \"Spezialwarnung für $spell:47376\",\n\tspecWarnBrewStun\t= \"Spezialwarnung für $spell:47340\"\n})\n\nL:SetMiscLocalization({\n\tYellBarrel\t\t\t= \"Stecke im Fass!\"\n})\n\n-----------------------------\n--  The Headless Horseman  --\n-----------------------------\nL = DBM:GetModLocalization(\"HeadlessHorseman\")\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t\t\t= \"Phase %d\",\n\twarnHorsemanSoldiers\t= \"Pulsierende Kürbisse erscheinen\",\n\twarnHorsemanHead\t\t= \"Kopf des Reiters aktiv\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t\t\t= \"Zeige Warnung für jeden Phasenwechsel\",\n\twarnHorsemanSoldiers\t= \"Zeige Warnung, wenn Pulsierende Kürbnisse erscheinen\",\n\twarnHorsemanHead\t\t= \"Zeige Warnung, wenn Kopf des Reiters erscheint\"\n})\n\nL:SetMiscLocalization({\n\tHorsemanSummon\t\t\t= \"Erhebe dich, Reiter,...\", -- CONFIRM! local SQL has different string - Erhebe dich, Reiter...\n\tHorsemanHead\t\t\t= \"Komm hierher, du Idiot!\",\n\tHorsemanSoldiers\t\t= \"Soldaten, erhebt Euch und kämpft immer weiter. Bringt endlich den Sieg zum gefallenen Reiter!\",\n\tSayCombatEnd\t\t\t= \"Dieses Ende ist mir schon bekannt. Welch neue Abenteuer hat das Schicksal zur Hand?\"\n})\n"
  },
  {
    "path": "DBM-WorldEvents/localization.en.lua",
    "content": "local L\n\n------------------------------\n--  The Crown Chemical Co.  --\n------------------------------\nL = DBM:GetModLocalization(\"ApothecaryTrio\")\n\nL:SetGeneralLocalization({\n\tname = \"Apothecary Trio\"\n})\n\nL:SetTimerLocalization({\n\tHummelActive\t\t= \"Hummel becomes active\",\n\tBaxterActive\t\t= \"Baxter becomes active\",\n\tFryeActive\t\t\t= \"Frye becomes active\"\n})\n\nL:SetOptionLocalization({\n\tTrioActiveTimer\t\t= \"Show timers for when Apothecary Trio becomes active\"\n})\n\nL:SetMiscLocalization({\n\tSayCombatStart\t\t= \"Did they bother to tell you who I am and why I am doing this?\"\n})\n\n----------------------------\n--  The Frost Lord Ahune  --\n----------------------------\nL = DBM:GetModLocalization(\"Ahune\")\n\nL:SetGeneralLocalization({\n\tname = \"Ahune\"\n})\n\nL:SetWarningLocalization({\n--\tSubmerged\t\t= \"Ahune has submerged\",\n\tEmerged\t\t\t= \"Ahune has emerged\",\n\tspecWarnAttack\t= \"Ahune is vulnerable - Attack now!\"\n})\n\nL:SetTimerLocalization({\n\tSubmergeTimer\t= \"Submerge\",\n\tEmergeTimer\t\t= \"Emerge\",\n\tTimerCombat\t\t= \"Combat starts\"\n})\n\nL:SetOptionLocalization({\n--\tSubmerged\t\t= \"Show warning when Ahune submerges\",\n\tEmerged\t\t\t= \"Show warning when Ahune emerges\",\n\tspecWarnAttack\t= \"Show special warning when Ahune becomes vulnerable\",\n\tSubmergeTimer\t= \"Show timer for submerge\",\n\tEmergeTimer\t\t= \"Show timer for emerge\",\n\tTimerCombat\t\t= \"Show timer for start of combat\",\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"The Ice Stone has melted!\"\n})\n\n----------------------\n--  Coren Direbrew  --\n----------------------\nL = DBM:GetModLocalization(\"CorenDirebrew\")\n\nL:SetGeneralLocalization({\n\tname = \"Coren Direbrew\"\n})\n\nL:SetWarningLocalization({\n\tspecWarnBrew\t\t= \"Get rid of the brew before she tosses you another one!\",\n\tspecWarnBrewStun\t= \"HINT: You were bonked, remember to drink the brew next time!\"\n})\n\nL:SetOptionLocalization({\n\tspecWarnBrew\t\t= \"Show special warning for $spell:47376\",\n\tspecWarnBrewStun\t= \"Show special warning for $spell:47340\"\n})\n\nL:SetMiscLocalization({\n\tYellBarrel\t= \"Barrel on me!\"\n})\n\n-----------------------------\n--  The Headless Horseman  --\n-----------------------------\nL = DBM:GetModLocalization(\"HeadlessHorseman\")\n\nL:SetGeneralLocalization({\n\tname = \"Headless Horseman\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t\t\t= \"Phase %d\",\n\twarnHorsemanSoldiers\t= \"Pulsing Pumpkins spawning\",\n\twarnHorsemanHead\t\t= \"Head of the Horseman Active\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t\t\t= \"Show a warning for each phase change\",\n\twarnHorsemanSoldiers\t= \"Show warning for Pulsing Pumpkin spawn\",\n\twarnHorsemanHead\t\t= \"Show warning for Head of the Horseman spawning\",\n\tspecWarnHorsemanHead\t= \"Show special warning for Whirlwind (2nd and later head spawn)\"\n})\n\nL:SetMiscLocalization({\n\tHorsemanSummon\t\t= \"Horseman rise...\", -- 22695\n\tHorsemanHead\t\t= \"Get over here, you idiot!\", -- 22415\n\tHorsemanSoldiers\t= \"Soldiers arise, stand and fight! Bring victory at last to this fallen knight!\", -- 23861\n\tSayCombatEnd\t\t= \"This end have I reached before.  What new adventure lies in store?\" -- 23455\n})\n\n-----------------------------\n--  Warmane Annual Events  --\n----------------------------\n--  Tower Defense (2024)  --\n----------------------------\nL = DBM:GetModLocalization(\"WarmaneTowerDefense\")\n\nL:SetGeneralLocalization({\n\tname = \"Tower Defense (2024)\"\n})\n\n-- L:SetWarningLocalization({\n-- })\n\n-- L:SetTimerLocalization({\n-- })\n\n-- L:SetOptionLocalization({\n-- })\n\nL:SetTimerLocalization({\n\tTimerRound\t\t\t= \"Round %d (%s)\",\n})\n\nL:SetOptionLocalization({\n\tTimerRound\t\t\t= \"Upon round victory, show timer to begin the next round (with round number and whether it is a Boss or Adds round)\"\n})\n\nL:SetMiscLocalization({\n\tRoundStart\t\t\t= \"Round (%d+) starts now!\",\n\tRoundComplete\t\t= \"Round (%d+) complete! Buy your upgrades at the vendor now.\",\n\tRoundFailed\t\t\t= \"Your defense has failed\", -- , you have survived (%d) round!\n\tEqUneqWeapons\t\t= \"Unequip/equip weapons if $spell:28410 is cast on you. For equipping to work, create a COMPLETE (with the weapons of choice that will be equipped) equipment set named \\\"pve\\\".\",\n})\n"
  },
  {
    "path": "DBM-WorldEvents/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" then return end\nlocal L\n\n------------------------------\n-- Químicos La Corona, S.L. --\n------------------------------\nL = DBM:GetModLocalization(\"ApothecaryTrio\")\n\nL:SetTimerLocalization({\n\tHummelActive\t\t= \"Hummel entra en combate\",\n\tBaxterActive\t\t= \"Baxter entra en combate\",\n\tFryeActive\t\t\t= \"Frye entra en combate\"\n})\n\nL:SetOptionLocalization({\n\tTrioActiveTimer\t\t= \"Mostrar temporizadores para cuando los apotecarios entren en combate\"\n})\n\nL:SetMiscLocalization({\n\tSayCombatStart\t\t= \"¿Se han molestado en decirte quién soy y por qué estoy haciendo esto?\"\n})\n\n-----------\n-- Ahune --\n-----------\nL = DBM:GetModLocalization(\"Ahune\")\n\nL:SetWarningLocalization({\n\tEmerged\t\t\t= \"Ahune vuelve a la superficie\",\n\tspecWarnAttack\t= \"Ahune es vulnerable - ¡Ataca ahora!\"\n})\n\nL:SetTimerLocalization({\n\tSubmergeTimer\t= \"Sumergir\",\n\tEmergeTimer\t\t= \"Volver a la superficie\"\n})\n\nL:SetOptionLocalization({\n\tEmerged\t\t\t= \"Mostrar aviso cuando Ahune vuelva a la superficie\",\n\tspecWarnAttack\t= \"Mostrar aviso especial cuando Ahune se vuelva vulnerable\",\n\tSubmergeTimer\t= \"Mostrar temporizador para cuando Ahune se sumerja\",\n\tEmergeTimer\t\t= \"Mostrar temporizador para cuando Ahune vuelva a la superficie\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"¡La piedra de hielo se ha derretido!\"\n})\n\n---------------------------\n-- Coren Cerveza Temible --\n---------------------------\nL = DBM:GetModLocalization(\"CorenDirebrew\")\n\nL:SetWarningLocalization({\n\tspecWarnBrew\t\t= \"¡Bebe la cerveza antes de que te lance otra!\",\n\tspecWarnBrewStun\t= \"SUGERENCIA: ¡Te han dado! ¡No te olvides de beber la cerveza!\"\n})\n\nL:SetOptionLocalization({\n\tspecWarnBrew\t\t= \"Mostrar aviso especial para $spell:47376\",\n\tspecWarnBrewStun\t= \"Mostrar aviso especial para $spell:47340\"\n})\n\nL:SetMiscLocalization({\n\tYellBarrel\t\t\t= \"¡Tengo el barril!\"\n})\n\n--------------------------\n-- El Jinete decapitado --\n--------------------------\nL = DBM:GetModLocalization(\"HeadlessHorseman\")\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t\t\t= \"Fase %d\",\n\twarnHorsemanSoldiers\t= \"Calabazas con pulso\",\n\twarnHorsemanHead\t\t= \"Cabeza de El jinete decapitado\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t\t\t= \"Mostrar aviso para cambios de fase\",\n\twarnHorsemanSoldiers\t= \"Mostrar aviso cuando aparezcan Cabalazas con pulso\",\n\twarnHorsemanHead\t\t= \"Mostrar aviso cuando aparezca la Cabeza de El jinete decapitado\"\n})\n\nL:SetMiscLocalization({\n\tHorsemanSummon\t\t\t= \"Jinete álzate...\",\n\tHorsemanHead\t\t\t= \"¡Ven aquí, idiota!\",\n\tHorsemanSoldiers\t\t= \"Soldados, alzaos y luchad, tomad vuestro acero. Dad la victoria a este deshonrado caballero.\",\n\tSayCombatEnd\t\t\t= \"Este final a mi me suena. Veamos que nueva me espera.\" -- CONFIRM!\n})\n"
  },
  {
    "path": "DBM-WorldEvents/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\nlocal L\n\n------------------------------\n--  The Crown Chemical Co.  --\n------------------------------\nL = DBM:GetModLocalization(\"ApothecaryTrio\")\n\nL:SetGeneralLocalization({\n\tname = \"Trio d'apothicaires\"\n})\n\nL:SetTimerLocalization({\n\tHummelActive\t\t= \"Hummel becomes active\",\n\tBaxterActive\t\t= \"Baxter becomes active\",\n\tFryeActive\t\t\t= \"Frye becomes active\"\n})\n\nL:SetOptionLocalization({\n\tTrioActiveTimer\t\t= \"Show timers for when Apothecary Trio becomes active\"\n})\n\nL:SetMiscLocalization({\n\tSayCombatStart\t\t= \"Did they bother to tell you who I am and why I am doing this?\"\n})\n\n-------------\n--  Ahune  --\n-------------\nL = DBM:GetModLocalization(\"Ahune\")\n\nL:SetWarningLocalization({\n\tSubmerged\t\t= \"Ahune est immergé\",\n\tEmerged\t\t\t= \"Ahune a émergé\",\n\tspecWarnAttack\t= \"Ahune est vulnérable - Attaquez maintenant !\"\n})\n\nL:SetTimerLocalization({\n\tSubmergeTimer\t= \"Immerger\",\n\tEmergeTimer\t\t= \"Emerger\",\n\tTimerCombat\t\t= \"Début du combat dans\"\n})\n\nL:SetOptionLocalization({\n\tSubmerged\t\t= \"Afficher l'alerte lorsque Ahune est immergé\",\n\tEmerged\t\t\t= \"Afficher l'alerter lorsque Ahune a émergé\",\n\tspecWarnAttack\t= \"Afficher une alerter spécial lorsque Ahune devient vulnérable\",\n\tSubmergeTimer\t= \"Afficher le timer pour l'immersion\",\n\tEmergeTimer\t\t= \"Afficher le timer pour l'émersion\",\n\tTimerCombat\t\t= \"Afficher le timer du début du combat\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"Le glaçon a fondu!\"\n})\n\n-------------------\n-- Coren Direbrew --\n-------------------\nL = DBM:GetModLocalization(\"CorenDirebrew\")\n\nL:SetGeneralLocalization({\n\tname = \"Coren Navrebière\"\n})\n\nL:SetWarningLocalization({\n\tspecWarnBrew\t\t= \"Débarrassez-vous de la bière avant qu'elle ne vous en lance une autre !\",\n\tspecWarnBrewStun\t= \"Vous avez reçu un coup sur la tête. La prochaine fois, videz votre verre !\"\n})\n\nL:SetOptionLocalization({\n\tspecWarnBrew\t\t= \"Montre une alerte spéciale pour $spell:47376\",\n\tspecWarnBrewStun\t= \"Montre une alerte spéciale pour $spell:47340\"\n})\n\nL:SetMiscLocalization({\n\tYellBarrel\t\t\t= \"Tonneau sur moi !\"\n})\n\n-------------------\n-- Headless Horseman --\n-------------------\nL = DBM:GetModLocalization(\"HeadlessHorseman\")\n\nL:SetGeneralLocalization({\n\tname = \"Cavalier sans tête\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t\t\t= \"Phase %d\",\n\twarnHorsemanSoldiers\t\t= \"Arrivée des Citrouilles vibrantes !\",\n\twarnHorsemanHead\t\t= \"Tapez la Tête du Cavalier\"\n})\n\nL:SetTimerLocalization({\n\tTimerCombatStart\t\t= \"Début du combat dans\"\n})\n\nL:SetOptionLocalization({\n\tTimerCombatStart\t\t= \"Afficher le timer du début du combat\",\n\twarnHorsemanSoldiers\t\t= \"Montre une alerte pour l'arrivée des Citrouilles vibrantes\",\n\twarnHorsemanHead\t\t= \"Montre une alerte spéciale pour l'arrivée de la Tête du Cavalier\"\n})\n\nL:SetMiscLocalization({\n\tHorsemanSummon\t\t\t= \"Le cavalier sans tête se lève...\", -- CONFIRM! local SQL has different string: Lève-toi, cavalier...\n\tHorsemanHead\t\t\t= \"Viens donc ici , sombre abruti !\",  -- Attention, espace avant la virgule. CONFIRM! local SQL has different string: Viens donc ici, sombre abruti !\n\tHorsemanSoldiers\t\t= \"Levez-vous, mes recrues ! Au combat sans surseoir ! Au chevalier déchu, donnez enfin victoire !\",\n\tSayCombatEnd\t\t\t= \"Je la connais trop bien, cette fin importune. Que faut-il au destin pour changer ma fortune ?\"\n})\n"
  },
  {
    "path": "DBM-WorldEvents/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n------------------------------\n--  The Crown Chemical Co.  --\n------------------------------\nL = DBM:GetModLocalization(\"ApothecaryTrio\")\n\nL:SetTimerLocalization({\n\tHummelActive\t= \"훔멜 활성화\",\n\tBaxterActive\t= \"벡스터 활성화\",\n\tFryeActive\t\t= \"프라이 활성화\"\n})\n\nL:SetOptionLocalization({\n\tTrioActiveTimer\t\t= \"각 보스 활성화 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tSayCombatStart\t\t= \"저들이 내가 누군지와 왜 이 일을 하는지 말해주려고 귀찮게 하든가?\"\n})\n\n----------------------------\n--  The Frost Lord Ahune  --\n----------------------------\nL = DBM:GetModLocalization(\"Ahune\")\n\nL:SetGeneralLocalization({\n\tname = \"아훈\"\n})\n\nL:SetWarningLocalization({\n\tEmerged\t\t\t= \"등장\",\n\tspecWarnAttack\t= \"아훈 약화 - 공격 시작!\"\n})\n\nL:SetTimerLocalization({\n\tSubmergeTimer\t= \"잠복\",\n\tEmergeTimer\t\t= \"등장\"\n})\n\nL:SetOptionLocalization({\n\tEmerged\t\t\t= \"등장 경고 보기\",\n\tspecWarnAttack\t= \"아훈 약화 특별 경고 보기\",\n\tSubmergeTimer\t= \"잠복 타이머 바 보기\",\n\tEmergeTimer\t\t= \"등장 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"얼음 기둥이 녹아 내렸다!\"\n})\n\n--------------------\n-- Coren Direbrew --\n--------------------\nL = DBM:GetModLocalization(\"CorenDirebrew\")\n\nL:SetGeneralLocalization({\n\tname = \"코렌 다이어브루\"\n})\n\nL:SetWarningLocalization({\n\tspecWarnBrew\t\t= \"다른 맥주가 넘어오기 전에 가방에 있는 맥주를 사용하세요!\",\n\tspecWarnBrewStun\t= \"힌트: 기절했습니다. 다음엔 맥주를 꼭 마시세요!\"\n})\n\nL:SetOptionLocalization({\n\tspecWarnBrew\t\t= \"$spell:47376 특별 경고 보기\",\n\tspecWarnBrewStun\t= \"$spell:47340 특별 경고 보기\"\n})\n\nL:SetMiscLocalization({\n\tYellBarrel\t\t\t= \"나에게 맥주통!\"\n})\n\n-----------------------------\n--  The Headless Horseman  --\n-----------------------------\nL = DBM:GetModLocalization(\"HeadlessHorseman\")\n\nL:SetGeneralLocalization({\n\tname = \"저주받은 기사\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t\t\t= \"%d단계\",\n\twarnHorsemanSoldiers\t= \"고동치는 호박 생성\",\n\twarnHorsemanHead\t\t= \"저주받은 기사의 머리 등장\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t\t\t= \"단계 전환 경고 보기\",\n\twarnHorsemanSoldiers\t= \"고동치는 호박 등장 경고 보기\",\n\twarnHorsemanHead\t\t= \"저주받은 기사 머리 등장 경고 보기\"\n})\n\nL:SetMiscLocalization({\n\tHorsemanSummon\t\t\t= \"기사여 일어나라...\", -- CONFIRM! local SQL has different string: 기사여, 일어나라...\n\tHorsemanHead\t\t\t= \"냉큼 이리 와라, 이 얼간아!\",\n\tHorsemanSoldiers\t\t= \"일어나라, 병사들이여. 나가서 싸워라! 이 쇠락한 기사에게 승리를 안겨다오!\",\n\tSayCombatEnd\t\t\t= \"죽음은 이미 겪어 보았노라. 이제 어떤 모험이 날 기다리는가?\"\n})\n"
  },
  {
    "path": "DBM-WorldEvents/localization.mx.lua",
    "content": "if GetLocale() ~= \"esMX\" then return end\nlocal L\n\n------------------------------\n-- Químicos La Corona, S.L. --\n------------------------------\nL = DBM:GetModLocalization(\"ApothecaryTrio\")\n\nL:SetTimerLocalization({\n\tHummelActive\t\t= \"Hummel entra en combate\",\n\tBaxterActive\t\t= \"Baxter entra en combate\",\n\tFryeActive\t\t\t= \"Frye entra en combate\"\n})\n\nL:SetOptionLocalization({\n\tTrioActiveTimer\t\t= \"Mostrar temporizadores para cuando los apotecarios entren en combate\"\n})\n\nL:SetMiscLocalization({\n\tSayCombatStart\t\t= \"¿Se han molestado en decirte quién soy y por qué estoy haciendo esto?\"\n})\n\n-----------\n-- Ahune --\n-----------\nL = DBM:GetModLocalization(\"Ahune\")\n\nL:SetWarningLocalization({\n\tEmerged\t\t\t= \"Ahune vuelve a la superficie\",\n\tspecWarnAttack\t= \"Ahune es vulnerable - ¡Ataca ahora!\"\n})\n\nL:SetTimerLocalization({\n\tSubmergeTimer\t= \"Sumergir\",\n\tEmergeTimer\t\t= \"Volver a la superficie\"\n})\n\nL:SetOptionLocalization({\n\tEmerged\t\t\t= \"Mostrar aviso cuando Ahune vuelva a la superficie\",\n\tspecWarnAttack\t= \"Mostrar aviso especial cuando Ahune se vuelva vulnerable\",\n\tSubmergeTimer\t= \"Mostrar temporizador para cuando Ahune se sumerja\",\n\tEmergeTimer\t\t= \"Mostrar temporizador para cuando Ahune vuelva a la superficie\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"¡La piedra de hielo se ha derretido!\"\n})\n\n---------------------------\n-- Coren Cerveza Temible --\n---------------------------\nL = DBM:GetModLocalization(\"CorenDirebrew\")\n\nL:SetWarningLocalization({\n\tspecWarnBrew\t\t= \"¡Bebe la cerveza antes de que te lance otra!\",\n\tspecWarnBrewStun\t= \"SUGERENCIA: ¡Te han dado! ¡No te olvides de beber la cerveza!\"\n})\n\nL:SetOptionLocalization({\n\tspecWarnBrew\t\t= \"Mostrar aviso especial para $spell:47376\",\n\tspecWarnBrewStun\t= \"Mostrar aviso especial para $spell:47340\"\n})\n\nL:SetMiscLocalization({\n\tYellBarrel\t\t\t= \"¡Tengo el barril!\"\n})\n\n--------------------------\n-- El Jinete decapitado --\n--------------------------\nL = DBM:GetModLocalization(\"HeadlessHorseman\")\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t\t\t= \"Fase %d\",\n\twarnHorsemanSoldiers\t= \"Calabazas con pulso\",\n\twarnHorsemanHead\t\t= \"Cabeza de El jinete decapitado\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t\t\t= \"Mostrar aviso para cambios de fase\",\n\twarnHorsemanSoldiers\t= \"Mostrar aviso cuando aparezcan Cabalazas con pulso\",\n\twarnHorsemanHead\t\t= \"Mostrar aviso cuando aparezca la Cabeza de El jinete decapitado\"\n})\n\nL:SetMiscLocalization({\n\tHorsemanSummon\t\t\t= \"Jinete álzate...\",\n\tHorsemanHead\t\t\t= \"¡Ven aquí, idiota!\",\n\tHorsemanSoldiers\t\t= \"Un soldado se yergue enfrentando el desafío. Sea la victoria para el caballero abatido.\",\n\tSayCombatEnd\t\t\t= \"Hasta este punto he llegado antes. ¿Qué nueva aventura tendré por delante?\"\n})\n"
  },
  {
    "path": "DBM-WorldEvents/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n------------------------------\n--  The Crown Chemical Co.  --\n------------------------------\nL = DBM:GetModLocalization(\"ApothecaryTrio\")\n\nL:SetGeneralLocalization({\n\tname = \"Трое аптекарей\"\n})\n\nL:SetTimerLocalization({\n\tHummelActive\t\t= \"Хаммел вступает в бой\",\n\tBaxterActive\t\t= \"Бакстер вступает в бой\",\n\tFryeActive\t\t\t= \"Фрай вступает в бой\"\n})\n\nL:SetOptionLocalization({\n\tTrioActiveTimer\t\t= \"Отсчет времени до вступления Троих аптекарей в бой\"\n})\n\nL:SetMiscLocalization({\n\tSayCombatStart\t\t= \"Тебе хоть сказали, кто я и чем занимаюсь?\"\n})\n\n----------------------------\n--  The Frost Lord Ahune  --\n----------------------------\nL = DBM:GetModLocalization(\"Ahune\")\n\nL:SetGeneralLocalization({\n\tname = \"Ахун\"\n})\n\nL:SetWarningLocalization({\n--\tSubmerged\t\t= \"Ахун исчез\",\n\tEmerged\t\t\t= \"Ахун появился\",\n\tspecWarnAttack\t= \"Ахун уязвим - атакуйте сейчас!\"\n})\n\nL:SetTimerLocalization({\n\tSubmergeTimer\t= \"Исчезновение\",\n\tEmergeTimer\t\t= \"Появление\",\n\tTimerCombat\t\t= \"Начало боя\"\n})\n\nL:SetOptionLocalization({\n--\tSubmerged\t\t= \"Предупреждение, когда Ахун исчезает\",\n\tEmerged\t\t\t= \"Предупреждение, когда Ахун появляется\",\n\tspecWarnAttack\t= \"Спец-предупреждение, когда Ахун становится уязвим\",\n\tSubmergeTimer\t= \"Отсчет времени до исчезновения\",\n\tEmergeTimer\t\t= \"Отсчет времени до появления\",\n\tTimerCombat\t\t= \"Отсчет времени до начала боя\",\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t= \"Камень Льда растаял!\"\n})\n\n----------------------\n--  Coren Direbrew  --\n----------------------\nL = DBM:GetModLocalization(\"CorenDirebrew\")\n\nL:SetGeneralLocalization({\n\tname = \"Корен Худовар\"\n})\n\nL:SetWarningLocalization({\n\tspecWarnBrew\t\t= \"Избавьтесь от варева прежде, чем она бросит вам другое!\",\n\tspecWarnBrewStun\t= \"СОВЕТ: Вы получили удар, не забудьте выпить варево в следующий раз!\"\n})\n\nL:SetOptionLocalization({\n\tspecWarnBrew\t\t= \"Спец-предупреждение для $spell:47376\",\n\tspecWarnBrewStun\t= \"Спец-предупреждение для $spell:47340\",\n})\n\nL:SetMiscLocalization({\n\tYellBarrel\t\t\t= \"Бочка на мне!\"\n})\n\n-----------------------------\n--  The Headless Horseman  --\n-----------------------------\nL = DBM:GetModLocalization(\"HeadlessHorseman\")\n\nL:SetGeneralLocalization({\n\tname = \"Всадник без головы\"\n})\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t\t\t= \"Фаза %d\",\n\twarnHorsemanSoldiers\t= \"Призыв Пульсирующих тыкв\",\n\twarnHorsemanHead\t\t= \"Появилась голова всадника!\",\n\tspecWarnHorsemanHead\t= \"Вихрь - переключитесь на голову\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t\t\t= \"Предупреждение о смене фаз\",\n\twarnHorsemanSoldiers\t= \"Предупреждать о призыве Пульсирующих тыкв\",\n\twarnHorsemanHead\t\t= \"Спец-предупрежение о появлении головы всадника\",\n\tspecWarnHorsemanHead\t= \"Спец-предупреждение для Вихря (призыв 2ой и следующей головы)\"\n})\n\nL:SetMiscLocalization({\n\tHorsemanSummon\t\t\t= \"Всадник встает…\", -- CONFIRM! local SQL has different string: Всадник встает...\n\tHorsemanHead\t\t\t= \"Не надоело еще убегать?\",\n\tHorsemanSoldiers\t\t= \"Восстаньте слуги, устремитесь в бой! Пусть павший рыцарь обретет покой!\",\n\tSayCombatEnd\t\t\t= \"Со смертью мы давно уже друзья...Что ждет теперь на пустоши меня?\"\n})\n"
  },
  {
    "path": "DBM-WorldEvents/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n------------------------------\n--  The Crown Chemical Co.  --\n------------------------------\nL = DBM:GetModLocalization(\"ApothecaryTrio\")\n\nL:SetTimerLocalization({\n\tHummelActive\t\t= \"胡默爾開始活動\",\n\tBaxterActive\t\t= \"巴克斯特開始活動\",\n\tFryeActive\t\t\t= \"弗萊伊開始活動\"\n})\n\nL:SetOptionLocalization({\n\tTrioActiveTimer\t\t= \"為藥劑師三人組開始活動顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tSayCombatStart\t\t= \"他們有告訴你我是誰還有我為什麼這麼做嗎?\"\n})\n\n----------------------------\n--  The Frost Lord Ahune  --\n----------------------------\nL = DBM:GetModLocalization(\"Ahune\")\n\nL:SetWarningLocalization({\n\tEmerged\t\t\t\t= \"艾胡恩已現身\",\n\tspecWarnAttack\t\t= \"艾胡恩變得脆弱 - 現在攻擊!\"\n})\n\nL:SetTimerLocalization({\n\tSubmergeTimer\t\t= \"隱沒\",\n\tEmergeTimer\t\t\t= \"現身\"\n})\n\nL:SetOptionLocalization({\n\tEmerged\t\t\t\t= \"當艾胡恩現身時顯示警告\",\n\tspecWarnAttack\t\t= \"當艾胡恩變得脆弱時顯示特別警告\",\n\tSubmergeTimer\t\t= \"為隱沒顯示計時器\",\n\tEmergeTimer\t\t\t= \"為現身顯示計時器\"\n})\n\nL:SetMiscLocalization({\n\tPull\t\t\t\t= \"冰石已經溶化了!\"\n})\n\n----------------------\n--  Coren Direbrew  --\n----------------------\nL = DBM:GetModLocalization(\"CorenDirebrew\")\n\nL:SetWarningLocalization({\n\tspecWarnBrew\t\t= \"在他再丟你另一個前喝掉酒!\",\n\tspecWarnBrewStun\t= \"提示:你瘋狂了,記得下一次喝啤酒!\"\n})\n\nL:SetOptionLocalization({\n\tspecWarnBrew\t\t= \"為$spell:47376顯示特別警告\",\n\tspecWarnBrewStun\t= \"為$spell:47340顯示特別警告\"\n})\n\nL:SetMiscLocalization({\n\tYellBarrel\t\t\t= \"我中了空桶(暈)\"\n})\n\n-----------------------------\n--  The Headless Horseman  --\n-----------------------------\nL = DBM:GetModLocalization(\"HeadlessHorseman\")\n\nL:SetWarningLocalization({\n\tWarnPhase\t\t\t\t= \"第%d階段\",\n\twarnHorsemanSoldiers\t= \"跳動的南瓜出現了!\",\n\twarnHorsemanHead\t\t= \"旋風斬 - 轉換目標!\"\n})\n\nL:SetOptionLocalization({\n\tWarnPhase\t\t\t\t= \"為每個階段改變顯示警告\",\n\twarnHorsemanSoldiers\t= \"為跳動的南瓜出現顯示警告\",\n\twarnHorsemanHead\t\t= \"為旋風斬顯示特別警告 (第二次及最後的頭顱出現)\"\n})\n\nL:SetMiscLocalization({\n\tHorsemanSummon\t\t\t= \"騎士甦醒...\",\n\tHorsemanHead\t\t\t= \"過來這裡，你這白痴!\",\n\tHorsemanSoldiers\t\t= \"士兵們起立，挺身奮戰!讓這個位死去的騎士得到最後的勝利!\",\n\tSayCombatStart\t\t\t= \"我也曾面對過這樣的末路。還有什麼新的冒險在等著呢?\"\n})\n"
  },
  {
    "path": "DBM-ZG/Arlokk.lua",
    "content": "local mod\t= DBM:NewMod(\"Arlokk\", \"DBM-ZG\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(14515)\nmod:SetEncounterID(791)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 24210 24212\",\n\t\"SPELL_AURA_REMOVED 24212\"\n)\n\nlocal warnMark\t\t= mod:NewTargetNoFilterAnnounce(24210, 3)\nlocal warnPain\t\t= mod:NewTargetNoFilterAnnounce(24212, 2, nil, \"RemoveMagic|Healer\")\n\nlocal specWarnMark\t= mod:NewSpecialWarningYou(24210, nil, nil, nil, 1, 2)\n\nlocal timerPain\t\t= mod:NewTargetTimer(18, 24212, nil, \"RemoveMagic|Healer\", nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 24210 then\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnMark:Show()\n\t\t\tspecWarnMark:Play(\"targetyou\")\n\t\telse\n\t\t\twarnMark:Show(args.destName)\n\t\tend\n\telseif args.spellId == 24212 and args:IsDestTypePlayer() then\n\t\twarnPain:Show(args.destName)\n\t\ttimerPain:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 24212 and args:IsDestTypePlayer() then\n\t\ttimerPain:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-ZG/Bloodlord.lua",
    "content": "local mod = DBM:NewMod(\"Bloodlord\", \"DBM-ZG\", 1)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11382, 14988)\nmod:SetEncounterID(787)\n\n\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 24314 24318 16856\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\n--TODO, actual timer for abilities. Tank swap for mortal?\nlocal warnFrenzy\t= mod:NewSpellAnnounce(24318, 3, nil, \"Tank|Healer\", 2)\nlocal warnGaze\t\t= mod:NewTargetNoFilterAnnounce(24314, 4)\nlocal warnMortal\t= mod:NewTargetNoFilterAnnounce(16856, 2, nil, \"Tank|Healer\", 2)\n\nlocal specWarnGaze\t= mod:NewSpecialWarningCast(24314, nil, nil, nil, 3, 2)\n\nlocal timerGaze\t= mod:NewTargetTimer(6, 24314, nil, nil, nil, 3)\nlocal timerMortal\t= mod:NewTargetTimer(5, 16856, nil, \"Tank|Healer\", 2, 5, nil, DBM_COMMON_L.TANK_ICON)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 24314 then\n\t\ttimerGaze:Start(args.destName)\n\t\tif self:AntiSpam(3, args.destName) then\n\t\t\tif args:IsPlayer() then\n\t\t\t\tspecWarnGaze:Show()\n\t\t\t\tspecWarnGaze:Play(\"stopcast\")\n\t\t\telse\n\t\t\t\twarnGaze:Show(args.destName)\n\t\t\tend\n\t\tend\n\telseif args.spellId == 24318 and args:IsDestTypeHostile() then\n\t\twarnFrenzy:Show(args.destName)\n\telseif args.spellId == 16856 and args:IsDestTypePlayer() then\n\t\twarnMortal:Show(args.destName)\n\t\ttimerMortal:Start(args.destName)\n\tend\nend\n\n--Yell gives target 1.5-2 seconds faster than combat log, so we attempt to parse it first\n--Combat log is used as fallback and to start the duration timer\nfunction mod:CHAT_MSG_MONSTER_YELL(msg, _, _, _, targetName)\n\tif msg:find(L.GazeYell) and targetName then\n\t\tif self:AntiSpam(3, targetName) then\n\t\t\tif targetName == UnitName(\"player\") then\n\t\t\t\tspecWarnGaze:Show()\n\t\t\t\tspecWarnGaze:Play(\"stopcast\")\n\t\t\telse\n\t\t\t\twarnGaze:Show(targetName)\n\t\t\tend\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-ZG/DBM-ZG.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Zul'Gurub|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Zul'Gurub|r\n## Title-esES:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Zul'Gurub|r\n## Title-esMX:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Zul'Gurub|r\n## Title-ptBR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Zul'Gurub|r\n## Title-frFR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Zul'Gurub|r\n## Title-deDE:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Zul'Gurub|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0祖尔格拉布|r\n## Title-zhTW:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0祖爾格拉布|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0줄구룹|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Зул'Гуруб|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMZG_AllSavedVars\n## SavedVariablesPerCharacter: DBMZG_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Category: Classic\n## X-DBM-StatTypes: normal\n## X-DBM-Mod-Sort: 1104\n## X-DBM-Mod-MapID: 698\n## X-DBM-Mod-Name: Zul'Gurub\n## X-DBM-Mod-Name-zhCN: 祖尔格拉布\n## X-DBM-Mod-Name-ruRU: Зул'Гуруб\n## X-DBM-Mod-LoadZone: Zul'Gurub\n## X-DBM-Mod-LoadZone-esES: Zul'Gurub\n## X-DBM-Mod-LoadZone-ruRU: Зул'Гуруб\n## X-DBM-Mod-LoadZone-frFR: Zul'Gurub\n## X-DBM-Mod-LoadZone-esMX: Zul'Gurub\n## X-DBM-Mod-LoadZone-zhTW: 祖爾格拉布\n## X-DBM-Mod-LoadZone-zhCN: 祖尔格拉布\n## X-DBM-Mod-LoadZone-koKR: 줄구룹\n## X-DBM-Mod-LoadZone-deDE: Zul'Gurub\n\nlocalization.en.lua\nlocalization.de.lua\nlocalization.es.lua\nlocalization.fr.lua\nlocalization.kr.lua\nlocalization.mx.lua\nlocalization.ru.lua\nlocalization.cn.lua\nlocalization.tw.lua\n\nVenoxis.lua\nJeklik.lua\nMarli.lua\nThekal.lua\nArlokk.lua\nHakkar.lua\nBloodlord.lua\nEdgeOfMadness.lua\nGahzranka.lua\nJindo.lua\n"
  },
  {
    "path": "DBM-ZG/EdgeOfMadness.lua",
    "content": "local mod\t= DBM:NewMod(\"EdgeOfMadness\", \"DBM-ZG\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15083)\nmod:SetEncounterID(788)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 24684 24699 24683\",\n\t\"SPELL_AURA_APPLIED 24664 8269\",\n\t\"SPELL_SUMMON 24728 24683\"\n)\n\n--TODO, this mod was a huge mess, wrong spellIds, duplicate events. So It needs heavy review with logs\nlocal warnIllusions\t= mod:NewSpellAnnounce(24728)\nlocal warnSleep\t\t= mod:NewSpellAnnounce(24664)\nlocal warnChainBurn\t= mod:NewSpellAnnounce(24684)\nlocal warnFrenzy\t= mod:NewSpellAnnounce(8269)\nlocal warnVanish\t= mod:NewSpellAnnounce(24699)\nlocal warnCloud\t\t= mod:NewSpellAnnounce(24683)\n\nlocal timerSleep\t= mod:NewBuffActiveTimer(6, 24664, nil, nil, nil, 3)\nlocal timerCloud\t= mod:NewBuffActiveTimer(15, 24683, nil, nil, nil, 3)\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 24684 then\n\t\twarnChainBurn:Show()\n\telseif args.spellId == 24699 and args:IsSrcTypeHostile() then\n\t\twarnVanish:Show()\n\telseif args.spellId == 24683 then\n\t\twarnCloud:Show()\n\t\ttimerCloud:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 24684 and args:IsDestTypePlayer() and  self:AntiSpam(3, 1) then\n\t\twarnSleep:Show()\n\t\ttimerSleep:Start()\n\telseif args.spellId == 24699 and args:IsDestTypeHostile() then\n\t\twarnFrenzy:Show()\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 24728 then\n\t\twarnIllusions:Show()\n\t--elseif args:IsSpellID(24683) then\n\t--\twarnCloud:Show()\n\t--\ttimerCloud:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-ZG/Gahzranka.lua",
    "content": "local mod\t= DBM:NewMod(\"Gahzranka\", \"DBM-ZG\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(15114)\nmod:SetEncounterID(790)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 16099 22421\"\n)\n\nlocal warnBreath\t= mod:NewCastAnnounce(16099)\nlocal warnGeyser\t= mod:NewCastAnnounce(22421)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 16099 then\n\t\twarnBreath:Show()\n\telseif args.spellId == 22421 then\n\t\twarnGeyser:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-ZG/Hakkar.lua",
    "content": "local mod\t= DBM:NewMod(\"Hakkar\", \"DBM-ZG\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(14834)\nmod:SetEncounterID(793)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_SUCCESS 24324 24686 24687 24688 24689 24690\",\n\t\"SPELL_AURA_APPLIED 24327 24328 24686 24687 24689 24690\",\n\t\"SPELL_AURA_REMOVED 24328 24689\"\n)\n\n--TODO, get a buff check for starting initial hard mode timers\n--TODO, an infoframe showing list of players silenced by Jeklik on hard mode instead uf using a spammy timer\n--[[\n(ability.id = 24324 or ability.id = 24686 or ability.id = 24687 or ability.id = 24688 or ability.id = 24689 or ability.id = 24690) and type = \"cast\"\n--]]\nlocal warnSiphonSoon\t\t\t= mod:NewSoonAnnounce(24324)\nlocal warnInsanity\t\t\t\t= mod:NewTargetNoFilterAnnounce(24327, 4)\nlocal warnBlood\t\t\t\t\t= mod:NewTargetAnnounce(24328, 2)--Not excempt from filter since it could be spammy\nlocal warnAspectOfMarli\t\t\t= mod:NewTargetNoFilterAnnounce(24686, 2)\nlocal warnAspectOfThekal\t\t= mod:NewSpellAnnounce(24689, 3, nil, \"Tank|RemoveEnrage|Healer\", 4)\nlocal warnAspectOfArlokk\t\t= mod:NewTargetNoFilterAnnounce(24690, 3)\n\nlocal specWarnBlood\t\t\t\t= mod:NewSpecialWarningMoveAway(24328, nil, nil, nil, 1, 2)\nlocal yellBlood\t\t\t\t\t= mod:NewYell(24328, nil, false, 2)\nlocal specWarnAspectOfThekal\t= mod:NewSpecialWarningDispel(24689, \"RemoveEnrage\", nil, nil, 1, 6)\n\nlocal timerSiphon\t\t\t\t= mod:NewNextTimer(90, 24324, nil, nil, nil, 2)\nlocal timerAspectOfMarli\t\t= mod:NewTargetTimer(6, 24686, nil, nil, nil, 5)\nlocal timerAspectOfMarliCD\t\t= mod:NewCDTimer(16, 24686, nil, nil, nil, 2)--16-20\nlocal timerAspectOfJeklik\t\t= mod:NewTargetTimer(5, 24687, nil, false, 2, 5)--Could be spammy so off by default. Users can turn it on who want to see this\nlocal timerAspectOfJeklikCD\t\t= mod:NewCDTimer(23, 24687, nil, nil, nil, 2)--23-24\nlocal timerAspectOfVenoxisCD\t= mod:NewCDTimer(16.2, 24688, nil, nil, nil, 2)--16.2-18.3\nlocal timerAspectOfThekal\t\t= mod:NewBuffActiveTimer(8, 24689, nil, \"Tank|RemoveEnrage|Healer\", 3, 5, nil, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.ENRAGE_ICON)\nlocal timerAspectOfThekalCD\t\t= mod:NewCDTimer(15.8, 24689, nil, nil, nil, 2)\nlocal timerAspectOfArlokk\t\t= mod:NewTargetTimer(2, 24690, nil, nil, nil, 2)\nlocal timerAspectOfArlokkCD\t\t= mod:NewNextTimer(30, 24690, nil, nil, nil, 2)--Needs more data to verify it's a next timer, rest aren't\nlocal timerInsanity\t\t\t\t= mod:NewTargetTimer(10, 24327, nil, nil, nil, 5)\nlocal timerInsanityCD\t\t\t= mod:NewCDTimer(20, 24327, nil, nil, nil, 3)\n\nlocal enrageTimer\t\t\t\t= mod:NewBerserkTimer(585)\n\nmod:AddRangeFrameOption(10, 24328)\n\nlocal function IsHardMode(self)\n\tif DBM:IsInRaid() then\n\t\tfor i = 1, DBM:GetNumGroupMembers() do\n\t\t\tlocal UnitID = \"raid\"..i..\"target\"\n\t\t\tlocal guid = UnitGUID(UnitID)\n\t\t\tif guid then\n\t\t\t\tlocal cid = self:GetCIDFromGUID(guid)\n\t\t\t\tif cid == 14834 then\n\t\t\t\t\tif UnitHealthMax(UnitID) >= 1079325 then\n\t\t\t\t\t\treturn true\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\telseif DBM:IsInGroup() then\n\t\tfor i = 1, DBM:GetNumSubgroupMembers() do\n\t\t\tlocal UnitID = \"party\"..i..\"target\"\n\t\t\tlocal guid = UnitGUID(UnitID)\n\t\t\tif guid then\n\t\t\t\tlocal cid = self:GetCIDFromGUID(guid)\n\t\t\t\tif cid == 14834 then\n\t\t\t\t\tif UnitHealthMax(UnitID) >= 1079325 then\n\t\t\t\t\t\treturn true\n\t\t\t\t\tend\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\telse--Solo Raid?, maybe in classic TBC or classic WRATH. Future proofing the mod\n\t\tlocal guid = UnitGUID(\"target\")\n\t\tif guid then\n\t\t\tlocal cid = self:GetCIDFromGUID(guid)\n\t\t\tif cid == 14834 then\n\t\t\t\tif UnitHealthMax(\"target\") >= 1079325 then\n\t\t\t\t\treturn true\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\n\treturn false\nend\n\nfunction mod:OnCombatStart(delay)\n\tenrageTimer:Start(-delay)\n\twarnSiphonSoon:Schedule(80-delay)\n\ttimerSiphon:Start(-delay)\n\t--Hard Mode Timers\n\t--This just checks if Hakkar has 1079325 health\n\t--Can't just start these on all normal mode pulls\n\tif IsHardMode(self) then\n\t\ttimerAspectOfMarliCD:Start(10-delay)\n\t\ttimerAspectOfThekalCD:Start(10-delay)\n\t\ttimerAspectOfVenoxisCD:Start(14-delay)\n\t\ttimerAspectOfJeklikCD:Start(21-delay)\n\t\ttimerAspectOfArlokkCD:Start(30-delay)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 24324 then\n\t\twarnSiphonSoon:Cancel()\n\t\twarnSiphonSoon:Schedule(80)\n\t\ttimerSiphon:Start()\n\telseif args.spellId == 24686 then\n\t\ttimerAspectOfMarliCD:Start()\n\telseif args.spellId == 24687 then\n\t\ttimerAspectOfJeklikCD:Start()\n\telseif args.spellId == 24688 then\n\t\ttimerAspectOfVenoxisCD:Start()\n\telseif args.spellId == 24689 then\n\t\ttimerAspectOfThekalCD:Start()\n\telseif args.spellId == 24690 then\n\t\ttimerAspectOfArlokkCD:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 24327 then\n\t\twarnInsanity:Show(args.destName)\n\t\ttimerInsanity:Start(args.destName)\n\t\ttimerInsanityCD:Start()\n\telseif args.spellId == 24328 then\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnBlood:Show()\n\t\t\tspecWarnBlood:Play(\"runout\")\n\t\t\tyellBlood:Yell()\n\t\t\tif self.Options.RangeFrame then\n\t\t\t\tDBM.RangeCheck:Show(10)\n\t\t\tend\n\t\telse\n\t\t\twarnBlood:Show(args.destName)\n\t\tend\n\telseif args.spellId == 24686 then\n\t\twarnAspectOfMarli:Show(args.destName)\n\t\ttimerAspectOfMarli:Start(args.destName)\n\telseif args.spellId == 24687 then\n\t\ttimerAspectOfJeklik:Start(args.destName)\n\telseif args.spellId == 24689 and args:IsDestTypeHostile() then\n\t\tif self.Options.SpecWarn24689dispel then\n\t\t\tspecWarnAspectOfThekal:Show()\n\t\t\tspecWarnAspectOfThekal:Play(\"enrage\")\n\t\telse\n\t\t\twarnAspectOfThekal:Show()\n\t\tend\n\t\ttimerAspectOfThekal:Start()\n\telseif args.spellId == 24690 then\n\t\twarnAspectOfArlokk:Show(args.destName)\n\t\ttimerAspectOfArlokk:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 20475 then\n\t\tif args:IsPlayer() then\n\t\t\tif self.Options.RangeFrame then\n\t\t\t\tDBM.RangeCheck:Hide()\n\t\t\tend\n\t\tend\n\telseif args:IsSpellID(24689) and args:IsDestTypeHostile() then\n\t\ttimerAspectOfThekal:Stop()\n\tend\nend\n"
  },
  {
    "path": "DBM-ZG/Jeklik.lua",
    "content": "local mod\t= DBM:NewMod(\"Jeklik\", \"DBM-ZG\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(14517)\nmod:SetEncounterID(785)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 23954\",\n\t\"SPELL_CAST_SUCCESS 23918 22884\",\n\t\"SPELL_AURA_APPLIED 23952\",\n\t\"SPELL_AURA_REMOVED 23952\"\n)\n\n--TODO, why is screech called screech when spellID is for psychic scream, is it wrong spellId/name?\n--TODO, sonic Burst should probably be a target announce\nlocal warnSonicBurst\t= mod:NewSpellAnnounce(23918, 3)\nlocal warnScreech\t\t= mod:NewSpellAnnounce(22884, 3)\nlocal warnPain\t\t\t= mod:NewTargetNoFilterAnnounce(23952, 2, nil, \"RemoveMagic|Healer\")\n\nlocal specWarnHeal\t\t= mod:NewSpecialWarningInterrupt(23954, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerSonicBurst\t= mod:NewBuffActiveTimer(10, 23918, nil, nil, nil, 5, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerScreech\t\t= mod:NewBuffActiveTimer(4, 22884, nil, nil, nil, 3)\nlocal timerPain\t\t\t= mod:NewTargetTimer(18, 23952, nil, \"RemoveMagic|Healer\", nil, 5, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerHealCD\t\t= mod:NewNextTimer(20, 23954, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 23954 and args:IsSrcTypeHostile() then\n\t\ttimerHealCD:Start()\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnHeal:Show(args.sourceName)\n\t\t\tspecWarnHeal:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 23918 then\n\t\ttimerSonicBurst:Start()\n\t\twarnSonicBurst:Show()\n\telseif args.spellId == 22884 and args:IsSrcTypeHostile() then\n\t\ttimerScreech:Start()\n\t\twarnScreech:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 23952 and args:IsDestTypePlayer() then\n\t\ttimerPain:Start(args.destName)\n\t\twarnPain:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellID == 23952 and args:IsDestTypePlayer() then\n\t\ttimerPain:Stop(args.destName)\n\tend\nend\n"
  },
  {
    "path": "DBM-ZG/Jindo.lua",
    "content": "local mod\t= DBM:NewMod(\"Jindo\", \"DBM-ZG\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(11380)\nmod:SetEncounterID(792)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 24306 17172 24261\",\n\t\"SPELL_AURA_REMOVED 17172\",\n\t\"SPELL_CAST_SUCCESS 24466\",\n\t\"SPELL_SUMMON 24309 24262\"\n)\n\nlocal warnDelusion\t\t\t= mod:NewTargetNoFilterAnnounce(24306, 2, nil, \"RemoveCurse\")\nlocal warnHex\t\t\t\t= mod:NewTargetNoFilterAnnounce(17172, 2, nil, \"RemoveMagic|Healer\")\nlocal warnBrainWash\t\t\t= mod:NewTargetNoFilterAnnounce(24261, 4)\nlocal warnBanish\t\t\t= mod:NewTargetNoFilterAnnounce(24466, 2)\n\nlocal specWarnHealingWard\t= mod:NewSpecialWarningSwitch(24309, \"Dps\", nil, nil, 1, 2)\nlocal specWarnBrainTotem\t= mod:NewSpecialWarningSwitch(24262, \"Dps\", nil, nil, 1, 2)\nlocal specWarnDelusion\t\t= mod:NewSpecialWarningYou(24306, nil, nil, nil, 1, 2)--Don't remember why this has special warning, but trusting 2011 me\n\nlocal timerHex\t\t\t\t= mod:NewTargetTimer(5, 17172, nil, \"RemoveMagic|Healer\", nil, 5, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerDelusion\t\t\t= mod:NewTargetTimer(20, 24306, nil, \"RemoveCurse\", nil, 5, nil, DBM_COMMON_L.CURSE_ICON)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 24306 then\n\t\ttimerDelusion:Start(args.destName)\n\t\tif args:IsPlayer() then\n\t\t\tspecWarnDelusion:Show()\n\t\t\tspecWarnDelusion:Play(\"targetyou\")\n\t\telse\n\t\t\twarnDelusion:Show(args.destName)\n\t\tend\n\telseif args.spellId == 17172 and args:IsDestTypePlayer() then\n\t\ttimerHex:Start(args.destName)\n\t\twarnHex:Show(args.destName)\n\telseif args.spellId == 24261 then\n\t\twarnBrainWash:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 17172 and args:IsDestTypePlayer() then\n\t\ttimerHex:Stop(args.destName)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 24466 and args:IsSrcTypeHostile() then\n\t\twarnBanish:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 24309 and args:IsDestTypeHostile() then\n\t\tspecWarnHealingWard:Show()\n\t\tspecWarnHealingWard:Play(\"attacktotem\")\n\telseif args.spellId == 24262 then\n\t\tspecWarnBrainTotem:Show()\n\t\tspecWarnBrainTotem:Play(\"attacktotem\")\n\tend\nend\n"
  },
  {
    "path": "DBM-ZG/Marli.lua",
    "content": "local mod\t= DBM:NewMod(\"Marli\", \"DBM-ZG\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(14510)\nmod:SetEncounterID(786)\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 24111 24300 24109\",\n\t\"SPELL_AURA_REMOVED 24111 24300\",\n\t\"SPELL_CAST_SUCCESS 24083\"\n)\n\n--TODO, enlarge dispel warning valid?\nlocal warnSpiders\t\t= mod:NewSpellAnnounce(24083, 2)\nlocal warnDrain\t\t\t= mod:NewTargetNoFilterAnnounce(24300, 2, nil, \"RemoveMagic|Healer\")\nlocal warnCorrosive\t\t= mod:NewTargetNoFilterAnnounce(24111, 2, nil, \"RemovePoison\")\nlocal warnEnlarge\t\t= mod:NewTargetNoFilterAnnounce(24109, 3)\n\nlocal specWarnEnlarge\t= mod:NewSpecialWarningDispel(24109, \"MagicDispeller\", nil, nil, 1, 2)\n\nlocal timerDrain\t\t= mod:NewTargetTimer(7, 24300, nil, \"RemoveMagic|Healer\", nil, 5, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerCorrosive\t= mod:NewTargetTimer(30, 24111, nil, \"RemovePoison\", nil, 5, nil, DBM_COMMON_L.POISON_ICON)\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 24111 then\n\t\twarnCorrosive:Show(args.destName)\n\t\ttimerCorrosive:Start(args.destName)\n\telseif args.spellId == 24300 and args:IsDestTypePlayer() then\n\t\twarnDrain:Show(args.destName)\n\t\ttimerDrain:Start(args.destName)\n\telseif args.spellId == 24109 then\n\t\tif self.Options.SpecWarn24109dispel then\n\t\t\tspecWarnEnlarge:Show(args.destName)\n\t\t\tspecWarnEnlarge:Play(\"dispelboss\")\n\t\telse\n\t\t\twarnEnlarge:Show(args.destName)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 24111 then\n\t\ttimerCorrosive:Stop(args.destName)\n\telseif args.spellId == 24300 and args:IsDestTypePlayer() then\n\t\ttimerDrain:Stop(args.destName)\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 24083 then\n\t\twarnSpiders:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-ZG/Thekal.lua",
    "content": "local mod = DBM:NewMod(\"Thekal\", \"DBM-ZG\", 1)\nlocal L = mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(14509, 11348, 11347)\nmod:SetEncounterID(789)\n\nmod:SetBossHPInfoToHighest()\nmod:DisableBossDeathKill() -- Instructs mod to ignore boss deaths, since Thekal dies twice\nmod:RegisterCombat(\"combat\")\nmod:RegisterKill(\"yell\", L.YellKill)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 24208\",\n\t\"SPELL_AURA_APPLIED 21060 12540\",\n\t\"SPELL_AURA_REMOVED 21060 12540\",\n\t\"SPELL_SUMMON 24813\",\n\t\"CHAT_MSG_MONSTER_EMOTE\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal warnSimulKill\t\t= mod:NewAnnounce(\"WarnSimulKill\", 1, 24173)\nlocal warnBlind\t\t\t= mod:NewTargetAnnounce(21060, 2)\nlocal warnGouge\t\t\t= mod:NewTargetAnnounce(12540, 2)\nlocal warnPhase2\t\t= mod:NewPhaseAnnounce(2)\nlocal warnAdds\t\t\t= mod:NewSpellAnnounce(24183, 3)\n\nlocal specWarnHeal\t\t= mod:NewSpecialWarningInterrupt(24208, \"HasInterrupt\", nil, nil, 1, 2)\n\nlocal timerSimulKill\t= mod:NewTimer(15, \"TimerSimulKill\", 24173)\nlocal timerBlind\t\t= mod:NewTargetTimer(10, 21060, nil, nil, nil, 3)\nlocal timerGouge\t\t= mod:NewTargetTimer(4, 12540, nil, nil, nil, 3)\n\n\nfunction mod:OnCombatStart()\n\tself:SetStage(1)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 24208 and args:IsSrcTypeHostile() then\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnHeal:Show(args.sourceName)\n\t\t\tspecWarnHeal:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 21060 and args:IsDestTypePlayer() then\n\t\twarnBlind:Show(args.destName)\n\t\ttimerBlind:Start(args.destName)\n\telseif args.spellId == 12540 and args:IsDestTypePlayer() then\n\t\twarnGouge:Show(args.destName)\n\t\ttimerGouge:Start(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 21060 and args:IsDestTypePlayer() then\n\t\ttimerBlind:Stop(args.destName)\n\telseif args.spellId == 12540 and args:IsDestTypePlayer() then\n\t\ttimerGouge:Stop(args.destName)\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 24183 then\n\t\twarnAdds:Show()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_EMOTE(msg)\n\tif msg == L.PriestDied then -- Starts timer before ressurection of adds.\n\t\tself:SendSync(\"PriestDied\")\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.YellPhase2 and self.vb.phase < 2 then -- Bossfight (tank and spank)\n\t\tself:SendSync(\"YellPhase2\")\n\tend\nend\n\nfunction mod:OnSync(msg)\n\tif not self:IsInCombat() then return end\n\tif msg == \"PriestDied\" then\n\t\tif self:AntiSpam(20, 1) then\n\t\t\twarnSimulKill:Show()\n\t\t\ttimerSimulKill:Start()\n\t\tend\n\telseif msg == \"YellPhase2\" and self.vb.phase < 2 then\n\t\tself:SetStage(2)\n\t\twarnPhase2:Show()\n\t\ttimerSimulKill:Stop()\n\tend\nend\n"
  },
  {
    "path": "DBM-ZG/Venoxis.lua",
    "content": "local mod\t= DBM:NewMod(\"Venoxis\", \"DBM-ZG\", 1)\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(14507)\nmod:SetEncounterID(784)\n\n\n\n\nmod:RegisterCombat(\"combat\")\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 23860\",\n\t\"SPELL_CAST_SUCCESS 23861\",\n\t\"SPELL_AURA_APPLIED 23895 23860 23865\",\n\t\"SPELL_AURA_REMOVED 23895 23860\",\n\t\"UNIT_HEALTH mouseover target\"\n)\n\nlocal warnSerpent\t\t= mod:NewTargetNoFilterAnnounce(23865, 2)\nlocal warnCloud\t\t\t= mod:NewSpellAnnounce(23861)\nlocal warnRenew\t\t\t= mod:NewTargetNoFilterAnnounce(23895, 3)\nlocal warnFire\t\t\t= mod:NewTargetNoFilterAnnounce(23860, 2, nil, \"RemoveMagic|Healer\")\nlocal prewarnPhase2\t\t= mod:NewPrePhaseAnnounce(2, 2)\n\nlocal specWarnHolyFire\t= mod:NewSpecialWarningInterrupt(23860, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnRenew\t\t= mod:NewSpecialWarningDispel(23895, \"MagicDispeller\", nil, nil, 1, 2)\n\nlocal timerCloud\t\t= mod:NewBuffActiveTimer(10, 23861, nil, nil, nil, 3)\nlocal timerRenew\t\t= mod:NewTargetTimer(15, 23895, nil, \"MagicDispeller\", nil, 5, nil, DBM_COMMON_L.MAGIC_ICON)\nlocal timerFire\t\t\t= mod:NewTargetTimer(8, 23860, nil, \"RemoveMagic|Healer\", nil, 5, nil, DBM_COMMON_L.MAGIC_ICON)\n\nmod:AddRangeFrameOption(\"10\")\n\nmod.vb.prewarn_Phase2 = false\n\nfunction mod:OnCombatStart()\n\tself.vb.prewarn_Phase2 = false\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show(10)\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 23861 then\n\t\twarnCloud:Show()\n\t\ttimerCloud:Start()\n\tend\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 23860 and args:IsSrcTypeHostile() then\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnHolyFire:Show(args.sourceName)\n\t\t\tspecWarnHolyFire:Play(\"kickcast\")\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 23895 and args:IsDestTypeHostile() then\n\t\tif self.Options.SpecWarn23895dispel then\n\t\t\tspecWarnRenew:Show(args.destName)\n\t\t\tspecWarnRenew:Play(\"dispelboss\")\n\t\telse\n\t\t\twarnRenew:Show(args.destName)\n\t\tend\n\t\ttimerRenew:Start(args.destName)\n\telseif args.spellId == 23860 and args:IsDestTypePlayer() then\n\t\twarnFire:Show(args.destName)\n\t\ttimerFire:Start(args.destName)\n\telseif args.spellId == 23865 then\n\t\twarnSerpent:Show(args.destName)\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 23895 and args:IsDestTypeHostile() then\n\t\ttimerRenew:Stop(args.destName)\n\telseif args.spellId == 23860 and args:IsDestTypePlayer() then\n\t\ttimerFire:Stop(args.destName)\n\tend\nend\n\nfunction mod:UNIT_HEALTH(uId)\n\tif not self.vb.prewarn_Phase2 and self:GetUnitCreatureId(uId) == 14507 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.53 then\n\t\tself.vb.prewarn_Phase2 = true\n\t\tprewarnPhase2:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-ZG/localization.cn.lua",
    "content": "-- Mini Dragon(projecteurs AT gmail.com) Brilla@金色平原\n-- Last update: 2019/08/22\n\nif GetLocale() ~= \"zhCN\" then return end\nlocal L\n\n-------------------\n--  Venoxis  --\n-------------------\nL = DBM:GetModLocalization(\"Venoxis\")\n\nL:SetGeneralLocalization({\n\tname = \"高阶祭司温诺希斯\"\n})\n\nL:SetOptionLocalization({\n\tRangeFrame\t\t= \"显示范围框\"\n})\n\n-------------------\n--  Jeklik  --\n-------------------\nL = DBM:GetModLocalization(\"Jeklik\")\n\nL:SetGeneralLocalization({\n\tname = \"高阶祭司耶克里克\"\n})\n\n-------------------\n--  Marli  --\n-------------------\nL = DBM:GetModLocalization(\"Marli\")\n\nL:SetGeneralLocalization({\n\tname = \"高阶祭司玛尔里\"\n})\n\n-------------------\n--  Thekal  --\n-------------------\nL = DBM:GetModLocalization(\"Thekal\")\n\nL:SetGeneralLocalization({\n\tname = \"高阶祭司塞卡尔\"\n})\n\nL:SetWarningLocalization({\n\tWarnSimulKill\t= \"大约15秒内复活\"\n})\n\nL:SetTimerLocalization({\n\tTimerSimulKill\t= \"复活术\"\n})\n\nL:SetOptionLocalization({\n\tWarnSimulKill\t= \"通告第一个怪物倒下,马上将复活\",\n\tTimerSimulKill\t= \"显示牧师复活计时器\"\n})\n\nL:SetMiscLocalization({\n\tPriestDied\t= \"%s死了。\",\n\tYellPhase2\t= \"西瓦尔拉，让我感受你的愤怒吧！\", --TBD\n\tYellKill\t= \"哈卡再也不能束缚我了！我终于可以安息了！\", --TBD\n\tThekal\t\t= \"高阶祭司塞卡尔\",\n\tZath\t\t= \"狂热者扎斯\",\n\tLorKhan\t\t= \"狂热者洛卡恩\"\n})\n\n-------------------\n--  Arlokk  --\n-------------------\nL = DBM:GetModLocalization(\"Arlokk\")\n\nL:SetGeneralLocalization({\n\tname = \"高阶祭司娅尔罗\"\n})\n\n-------------------\n--  Hakkar  --\n-------------------\nL = DBM:GetModLocalization(\"Hakkar\")\n\nL:SetGeneralLocalization({\n\tname = \"哈卡\"\n})\n\n-------------------\n--  Bloodlord  --\n-------------------\nL = DBM:GetModLocalization(\"Bloodlord\")\n\nL:SetGeneralLocalization({\n\tname = \"血领主曼多基尔\"\n})\n\nL:SetMiscLocalization({\n\tBloodlord\t= \"血领主曼多基尔\",\n\tOhgan\t\t= \"奥根\"\n})\n\n-------------------\n--  Edge of Madness  --\n-------------------\nL = DBM:GetModLocalization(\"EdgeOfMadness\")\n\nL:SetGeneralLocalization({\n\tname = \"疯狂之缘\"\n})\n\nL:SetMiscLocalization({\n\tHazzarah = \"哈札拉尔\",\n\tRenataki = \"雷纳塔基\",\n\tWushoolay = \"乌苏雷\",\n\tGrilek = \"格里雷克\"\n})\n\n-------------------\n--  Gahz'ranka  --\n-------------------\nL = DBM:GetModLocalization(\"Gahzranka\")\n\nL:SetGeneralLocalization({\n\tname = \"加兹兰卡\"\n})\n\n-------------------\n--  Jindo  --\n-------------------\nL = DBM:GetModLocalization(\"Jindo\")\n\nL:SetGeneralLocalization({\n\tname = \"妖术师金度\"\n})\n"
  },
  {
    "path": "DBM-ZG/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n-------------------\n--  Venoxis  --\n-------------------\nL = DBM:GetModLocalization(\"Venoxis\")\n\nL:SetGeneralLocalization({\n\tname = \"Hohepriester Venoxis\"\n})\n\n-------------------\n--  Jeklik  --\n-------------------\nL = DBM:GetModLocalization(\"Jeklik\")\n\nL:SetGeneralLocalization({\n\tname = \"Hohepriesterin Jeklik\"\n})\n\n-------------------\n--  Marli  --\n-------------------\nL = DBM:GetModLocalization(\"Marli\")\n\nL:SetGeneralLocalization({\n\tname = \"Hohepriesterin Mar'li\"\n})\n\n-------------------\n--  Thekal  --\n-------------------\nL = DBM:GetModLocalization(\"Thekal\")\n\nL:SetGeneralLocalization({\n\tname = \"Hohepriester Thekal\"\n})\n\nL:SetWarningLocalization({\n\tWarnSimulKill\t= \"Erster Diener tot: Auferstehung in ~ 15 Sekunden\"\n})\n\nL:SetTimerLocalization({\n\tTimerSimulKill\t= \"Auferstehung\"\n})\n\nL:SetOptionLocalization({\n\tWarnSimulKill\t= \"Kündigen Sie den ersten Mob an, bald die Auferstehung\",\n\tTimerSimulKill\t= \"Zeige Timer für die Priesterauferstehung\"\n})\n\nL:SetMiscLocalization({\n\tPriestDied\t= \"%s stirbt.\",\n\tYellPhase2\t= \"Shirvallah, erfülle mich mit deinem Zorn!\",\n\tYellKill\t= \"Hakkar kontrolliert mich nicht länger! Endlich Frieden!\",\n\tThekal\t\t= \"Hohepriester Thekal\",\n\tZath\t\t= \"Zelot Zath\",\n\tLorKhan\t\t= \"Zelot Lor'Khan\"\n})\n\n-------------------\n--  Arlokk  --\n-------------------\nL = DBM:GetModLocalization(\"Arlokk\")\n\nL:SetGeneralLocalization({\n\tname = \"Hohepriesterin Arlokk\"\n})\n\n-------------------\n--  Hakkar  --\n-------------------\nL = DBM:GetModLocalization(\"Hakkar\")\n\nL:SetGeneralLocalization({\n\tname = \"Hakkar\"\n})\n\n-------------------\n--  Bloodlord  --\n-------------------\nL = DBM:GetModLocalization(\"Bloodlord\")\n\nL:SetGeneralLocalization({\n\tname = \"Blutfürst Mandokir\"\n})\n\nL:SetMiscLocalization({\n\tBloodlord\t= \"Blutfürst Mandokir\",\n\tOhgan\t\t= \"Ohgan\",\n\tGazeYell\t= \"Ich behalte Euch im Auge\"\n})\n\n-------------------\n--  Edge of Madness  --\n-------------------\nL = DBM:GetModLocalization(\"EdgeOfMadness\")\n\nL:SetGeneralLocalization({\n\tname = \"Rand des Wahnsinns\"\n})\n\nL:SetMiscLocalization({\n\tHazzarah = \"Hazza'rah\",\n\tRenataki = \"Renataki\",\n\tWushoolay = \"Wushoolay\",\n\tGrilek = \"Gri'lek\"\n})\n\n-------------------\n--  Gahz'ranka  --\n-------------------\nL = DBM:GetModLocalization(\"Gahzranka\")\n\nL:SetGeneralLocalization({\n\tname = \"Gahz'ranka\"\n})\n\n-------------------\n--  Jindo  --\n-------------------\nL = DBM:GetModLocalization(\"Jindo\")\n\nL:SetGeneralLocalization({\n\tname = \"Jin'do der Verhexer\"\n})\n"
  },
  {
    "path": "DBM-ZG/localization.en.lua",
    "content": "local L\n\n-------------------\n--  Venoxis  --\n-------------------\nL = DBM:GetModLocalization(\"Venoxis\")\n\nL:SetGeneralLocalization({\n\tname = \"High Priest Venoxis\"\n})\n\n-------------------\n--  Jeklik  --\n-------------------\nL = DBM:GetModLocalization(\"Jeklik\")\n\nL:SetGeneralLocalization({\n\tname = \"High Priestess Jeklik\"\n})\n\n-------------------\n--  Marli  --\n-------------------\nL = DBM:GetModLocalization(\"Marli\")\n\nL:SetGeneralLocalization({\n\tname = \"High Priestess Mar'li\"\n})\n\n-------------------\n--  Thekal  --\n-------------------\nL = DBM:GetModLocalization(\"Thekal\")\n\nL:SetGeneralLocalization({\n\tname = \"High Priest Thekal\"\n})\n\nL:SetWarningLocalization({\n\tWarnSimulKill\t= \"First add down - Resurrection in ~15 seconds\"\n})\n\nL:SetTimerLocalization({\n\tTimerSimulKill\t= \"Resurrection\"\n})\n\nL:SetOptionLocalization({\n\tWarnSimulKill\t= \"Announce first mob down, resurrection soon\",\n\tTimerSimulKill\t= \"Show timer for priest resurrection\"\n})\n\nL:SetMiscLocalization({\n\tPriestDied\t= \"%s dies.\",\n\tYellPhase2\t= \"Shirvallah, fill me with your RAGE!\",\n\tYellKill\t= \"Hakkar binds me no more!  Peace at last!\",\n\tThekal\t\t= \"High Priest Thekal\",\n\tZath\t\t= \"Zealot Zath\",\n\tLorKhan\t\t= \"Zealot Lor'Khan\"\n})\n\n-------------------\n--  Arlokk  --\n-------------------\nL = DBM:GetModLocalization(\"Arlokk\")\n\nL:SetGeneralLocalization({\n\tname = \"High Priestess Arlokk\"\n})\n\n-------------------\n--  Hakkar  --\n-------------------\nL = DBM:GetModLocalization(\"Hakkar\")\n\nL:SetGeneralLocalization({\n\tname = \"Hakkar the Soulflayer\"\n})\n\n-------------------\n--  Bloodlord  --\n-------------------\nL = DBM:GetModLocalization(\"Bloodlord\")\n\nL:SetGeneralLocalization({\n\tname = \"Bloodlord Mandokir\"\n})\n\nL:SetMiscLocalization({\n\tBloodlord\t= \"Bloodlord Mandokir\",\n\tOhgan\t\t= \"Ohgan\",\n\tGazeYell\t= \"I'm watching you\"\n})\n\n-------------------\n--  Edge of Madness  --\n-------------------\nL = DBM:GetModLocalization(\"EdgeOfMadness\")\n\nL:SetGeneralLocalization({\n\tname = \"Edge of Madness\"\n})\n\nL:SetMiscLocalization({\n\tHazzarah = \"Hazza'rah\",\n\tRenataki = \"Renataki\",\n\tWushoolay = \"Wushoolay\",\n\tGrilek = \"Gri'lek\"\n})\n\n-------------------\n--  Gahz'ranka  --\n-------------------\nL = DBM:GetModLocalization(\"Gahzranka\")\n\nL:SetGeneralLocalization({\n\tname = \"Gahz'ranka\"\n})\n\n-------------------\n--  Jindo  --\n-------------------\nL = DBM:GetModLocalization(\"Jindo\")\n\nL:SetGeneralLocalization({\n\tname = \"Jin'do the Hexxer\"\n})\n"
  },
  {
    "path": "DBM-ZG/localization.es.lua",
    "content": "if GetLocale() ~= \"esES\" then return end\nlocal L\n\n-------------------\n--  Venoxis  --\n-------------------\nL = DBM:GetModLocalization(\"Venoxis\")\n\nL:SetGeneralLocalization({\n\tname = \"Sumo Sacerdote Venoxis\"\n})\n\n-------------------\n--  Jeklik  --\n-------------------\nL = DBM:GetModLocalization(\"Jeklik\")\n\nL:SetGeneralLocalization({\n\tname = \"Suma Sacerdotisa Jeklik\"\n})\n\n-------------------\n--  Marli  --\n-------------------\nL = DBM:GetModLocalization(\"Marli\")\n\nL:SetGeneralLocalization({\n\tname = \"Suma Sacerdotisa Mar'li\"\n})\n\n-------------------\n--  Thekal  --\n-------------------\nL = DBM:GetModLocalization(\"Thekal\")\n\nL:SetGeneralLocalization({\n\tname = \"Sumo Sacerdote Thekal\"\n})\n\nL:SetWarningLocalization({\n\tWarnSimulKill\t= \"Primer esbirro muerto - Resurrección en ~15 segundos\"\n})\n\nL:SetTimerLocalization({\n\tTimerSimulKill\t= \"Resurrección\"\n})\n\nL:SetOptionLocalization({\n\tWarnSimulKill\t= \"Anunciar primer esbirro muerto\",\n\tTimerSimulKill\t= \"Mostrar tiempo para resurrección de sacerdote\"\n})\n\nL:SetMiscLocalization({\n\tPriestDied\t= \"%s muere.\",\n\tYellPhase2\t= \"Shirvallah, ¡lléname de tu IRA!\",\n\tYellKill\t= \"¡Estoy libre de Hakkar! ¡Por fin tengo paz!\",\n\tThekal\t\t= \"Sumo Sacerdote Thekal\",\n\tZath\t\t= \"Integrista Zath\",\n\tLorKhan\t\t= \"Integrista Lor'Khan\"\n})\n\n-------------------\n--  Arlokk  --\n-------------------\nL = DBM:GetModLocalization(\"Arlokk\")\n\nL:SetGeneralLocalization({\n\tname = \"Suma Sacerdotisa Arlokk\"\n})\n\n-------------------\n--  Hakkar  --\n-------------------\nL = DBM:GetModLocalization(\"Hakkar\")\n\nL:SetGeneralLocalization({\n\tname = \"Hakkar\"\n})\n\n-------------------\n--  Bloodlord  --\n-------------------\nL = DBM:GetModLocalization(\"Bloodlord\")\n\nL:SetGeneralLocalization({\n\tname = \"Señor sangriento Mandokir\"\n})\n\nL:SetMiscLocalization({\n\tBloodlord\t= \"Señor sangriento Mandokir\",\n\tOhgan\t\t= \"Ohgan\",\n\tGazeYell\t= \"Te estoy vigilando\"\n})\n\n-------------------\n--  Edge of Madness  --\n-------------------\nL = DBM:GetModLocalization(\"EdgeOfMadness\")\n\nL:SetGeneralLocalization({\n\tname = \"Extremo de la Locura\"\n})\n\nL:SetMiscLocalization({\n\tHazzarah = \"Hazza'rah\",\n\tRenataki = \"Renataki\",\n\tWushoolay = \"Wushoolay\",\n\tGrilek = \"Gri'lek\"\n})\n\n-------------------\n--  Gahz'ranka  --\n-------------------\nL = DBM:GetModLocalization(\"Gahzranka\")\n\nL:SetGeneralLocalization({\n\tname = \"Gahz'ranka\"\n})\n\n-------------------\n--  Jindo  --\n-------------------\nL = DBM:GetModLocalization(\"Jindo\")\n\nL:SetGeneralLocalization({\n\tname = \"Jin'do el Malhechor\"\n})\n"
  },
  {
    "path": "DBM-ZG/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\nlocal L\n\n-------------------\n--  Venoxis  --\n-------------------\nL = DBM:GetModLocalization(\"Venoxis\")\n\nL:SetGeneralLocalization({\n\tname = \"Grand prêtre Venoxis\"\n})\n\n-------------------\n--  Jeklik  --\n-------------------\nL = DBM:GetModLocalization(\"Jeklik\")\n\nL:SetGeneralLocalization({\n\tname = \"Grande prêtresse Jeklik\"\n})\n\n-------------------\n--  Marli  --\n-------------------\nL = DBM:GetModLocalization(\"Marli\")\n\nL:SetGeneralLocalization({\n\tname = \"Grande prêtresse Mar'li\"\n})\n\n-------------------\n--  Thekal  --\n-------------------\nL = DBM:GetModLocalization(\"Thekal\")\n\nL:SetGeneralLocalization({\n\tname = \"Grand prêtre Thekal\"\n})\n\nL:SetWarningLocalization({\n\tWarnSimulKill\t= \"Premier serviteur mort - Résurrection en ~15 secondes\"\n})\n\nL:SetTimerLocalization({\n\tTimerSimulKill\t= \"Résurrection\"\n})\n\nL:SetOptionLocalization({\n\tWarnSimulKill\t= \"Annoncez le premier serviteur mort\",\n\tTimerSimulKill\t= \"Montre le timer pour la résurrection des prêtres\"\n})\n\nL:SetMiscLocalization({\n\tPriestDied\t= \"%s meurt.\",\n\tYellPhase2\t= \"Shirvallah, que ta RAGE m’envahisse !\",\n\tYellKill\t= \"Hakkar ne me domine plus ! Je connais enfin la paix !\",\n\tThekal\t\t= \"Grand prêtre Thekal\",\n\tZath\t\t= \"Zélote Zath\",\n\tLorKhan\t\t= \"Zélote Lor'Khan\"\n})\n\n-------------------\n--  Arlokk  --\n-------------------\nL = DBM:GetModLocalization(\"Arlokk\")\n\nL:SetGeneralLocalization({\n\tname = \"Grande prêtresse Arlokk\"\n})\n\n-------------------\n--  Hakkar  --\n-------------------\nL = DBM:GetModLocalization(\"Hakkar\")\n\nL:SetGeneralLocalization({\n\tname = \"Hakkar\"\n})\n\n-------------------\n--  Bloodlord  --\n-------------------\nL = DBM:GetModLocalization(\"Bloodlord\")\n\nL:SetGeneralLocalization({\n\tname = \"Seigneur sanglant Mandokir\"\n})\n\nL:SetMiscLocalization({\n\tBloodlord\t= \"Seigneur sanglant Mandokir\",\n\tOhgan\t\t= \"Ohgan\",\n\tGazeYell\t= \"je vous ai à l'œil\"\n})\n\n-------------------\n--  Edge of Madness  --\n-------------------\nL = DBM:GetModLocalization(\"EdgeOfMadness\")\n\nL:SetGeneralLocalization({\n\tname = \"Frontière de la folie\"\n})\n\nL:SetMiscLocalization({\n\tHazzarah = \"Hazza'rah\",\n\tRenataki = \"Renataki\",\n\tWushoolay = \"Wushoolay\",\n\tGrilek = \"Gri'lek\"\n})\n\n-------------------\n--  Gahz'ranka  --\n-------------------\nL = DBM:GetModLocalization(\"Gahzranka\")\n\nL:SetGeneralLocalization({\n\tname = \"Gahz'ranka\"\n})\n\n-------------------\n--  Jindo  --\n-------------------\nL = DBM:GetModLocalization(\"Jindo\")\n\nL:SetGeneralLocalization({\n\tname = \"Jin'do le Maléficieur\"\n})\n"
  },
  {
    "path": "DBM-ZG/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n-------------------\n--  Venoxis  --\n-------------------\nL = DBM:GetModLocalization(\"Venoxis\")\n\nL:SetGeneralLocalization({\n\tname = \"대사제 베녹시스\"\n})\n\n-------------------\n--  Jeklik  --\n-------------------\nL = DBM:GetModLocalization(\"Jeklik\")\n\nL:SetGeneralLocalization({\n\tname = \"대여사제 제클릭\"\n})\n\n-------------------\n--  Marli  --\n-------------------\nL = DBM:GetModLocalization(\"Marli\")\n\nL:SetGeneralLocalization({\n\tname = \"대여사제 말리\"\n})\n\n-------------------\n--  Thekal  --\n-------------------\nL = DBM:GetModLocalization(\"Thekal\")\n\nL:SetGeneralLocalization({\n\tname = \"대사제 데칼\"\n})\n\nL:SetWarningLocalization({\n\tWarnSimulKill\t= \"첫 쫄 잡음 - 약 15초 후 부활\"\n})\n\nL:SetTimerLocalization({\n\tTimerSimulKill\t= \"부활\"\n})\n\nL:SetOptionLocalization({\n\tWarnSimulKill\t= \"첫 쫄이 잡히면 잠시 후 부활 알림\",\n\tTimerSimulKill\t= \"사제 부활 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tPriestDied\t= \"%s 죽었습니다.\",\n\tYellPhase2\t= \"시르밸라시여, 분노를 채워 주소서!\",\n\tYellKill\t= \"학카르의 구속이 끝났다! 이젠 평안히 잠들리라!\",\n\tThekal\t\t= \"대사제 데칼\",\n\tZath\t\t= \"광신도 자스\",\n\tLorKhan\t\t= \"광신도 로르칸\"\n})\n\n-------------------\n--  Arlokk  --\n-------------------\nL = DBM:GetModLocalization(\"Arlokk\")\n\nL:SetGeneralLocalization({\n\tname = \"대여사제 알로크\"\n})\n\n-------------------\n--  Hakkar  --\n-------------------\nL = DBM:GetModLocalization(\"Hakkar\")\n\nL:SetGeneralLocalization({\n\tname = \"영혼약탈자 학카르\"\n})\n\n-------------------\n--  Bloodlord  --\n-------------------\nL = DBM:GetModLocalization(\"Bloodlord\")\n\nL:SetGeneralLocalization({\n\tname = \"혈군주 만도키르\"\n})\n\nL:SetMiscLocalization({\n\tBloodlord\t= \"혈군주 만도키르\",\n\tOhgan\t\t= \"오간\"\n})\n\n-------------------\n--  Edge of Madness  --\n-------------------\nL = DBM:GetModLocalization(\"EdgeOfMadness\")\n\nL:SetGeneralLocalization({\n\tname = \"광란의 경계\"\n})\n\nL:SetMiscLocalization({\n\tHazzarah = \"하자라\",\n\tRenataki = \"레나타키\",\n\tWushoolay = \"우슐레이\",\n\tGrilek = \"그리렉\"\n})\n\n-------------------\n--  Gahz'ranka  --\n-------------------\nL = DBM:GetModLocalization(\"Gahzranka\")\n\nL:SetGeneralLocalization({\n\tname = \"가즈란카\"\n})\n\n-------------------\n--  Jindo  --\n-------------------\nL = DBM:GetModLocalization(\"Jindo\")\n\nL:SetGeneralLocalization({\n\tname = \"주술사 진도\"\n})\n"
  },
  {
    "path": "DBM-ZG/localization.mx.lua",
    "content": "if GetLocale() ~= \"esMX\" then return end\nlocal L\n\n-------------------\n--  Venoxis  --\n-------------------\nL = DBM:GetModLocalization(\"Venoxis\")\n\nL:SetGeneralLocalization({\n\tname = \"Sumo sacerdote Venoxis\"\n})\n\n-------------------\n--  Jeklik  --\n-------------------\nL = DBM:GetModLocalization(\"Jeklik\")\n\nL:SetGeneralLocalization({\n\tname = \"Suma sacerdotisa Jeklik\"\n})\n\n-------------------\n--  Marli  --\n-------------------\nL = DBM:GetModLocalization(\"Marli\")\n\nL:SetGeneralLocalization({\n\tname = \"Suma sacerdotisa Mar'li\"\n})\n\n-------------------\n--  Thekal  --\n-------------------\nL = DBM:GetModLocalization(\"Thekal\")\n\nL:SetGeneralLocalization({\n\tname = \"Sumo sacerdote Thekal\"\n})\n\nL:SetWarningLocalization({\n\tWarnSimulKill\t= \"Primer esbirro muerto - Resurrección en ~15 segundos\"\n})\n\nL:SetTimerLocalization({\n\tTimerSimulKill\t= \"Resurrección\"\n})\n\nL:SetOptionLocalization({\n\tWarnSimulKill\t= \"Anunciar primer esbirro muerto\",\n\tTimerSimulKill\t= \"Mostrar tiempo para resurrección de sacerdote\"\n})\n\nL:SetMiscLocalization({\n\tPriestDied\t= \"%s muere.\",\n\tYellPhase2\t= \"Shirvallah, ¡lléname de IRA!\",\n\tYellKill\t= \"¡Hakkar ya no me controla! ¡Por fin algo de paz!\",\n\tThekal\t\t= \"Sumo sacerdote Thekal\",\n\tZath\t\t= \"Zelote Zath\",\n\tLorKhan\t\t= \"Zelote Lor'Khan\"\n})\n\n-------------------\n--  Arlokk  --\n-------------------\nL = DBM:GetModLocalization(\"Arlokk\")\n\nL:SetGeneralLocalization({\n\tname = \"Suma sacerdotisa Arlokk\"\n})\n\n-------------------\n--  Hakkar  --\n-------------------\nL = DBM:GetModLocalization(\"Hakkar\")\n\nL:SetGeneralLocalization({\n\tname = \"Hakkar\"\n})\n\n-------------------\n--  Bloodlord  --\n-------------------\nL = DBM:GetModLocalization(\"Bloodlord\")\n\nL:SetGeneralLocalization({\n\tname = \"Señor sangriento Mandokir\"\n})\n\nL:SetMiscLocalization({\n\tBloodlord\t= \"Señor sangriento Mandokir\",\n\tOhgan\t\t= \"Ohgan\",\n\tGazeYell\t= \"Te estoy vigilando\"\n})\n\n-------------------\n--  Edge of Madness  --\n-------------------\nL = DBM:GetModLocalization(\"EdgeOfMadness\")\n\nL:SetGeneralLocalization({\n\tname = \"Cabo de la Locura\"\n})\n\nL:SetMiscLocalization({\n\tHazzarah = \"Hazza'rah\",\n\tRenataki = \"Renataki\",\n\tWushoolay = \"Wushoolay\",\n\tGrilek = \"Gri'lek\"\n})\n\n-------------------\n--  Gahz'ranka  --\n-------------------\nL = DBM:GetModLocalization(\"Gahzranka\")\n\nL:SetGeneralLocalization({\n\tname = \"Gahz'ranka\"\n})\n\n-------------------\n--  Jindo  --\n-------------------\nL = DBM:GetModLocalization(\"Jindo\")\n\nL:SetGeneralLocalization({\n\tname = \"Jin'do el Aojador\"\n})\n"
  },
  {
    "path": "DBM-ZG/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\n\nlocal L\n\n-------------------\n--  Venoxis  --\n-------------------\nL = DBM:GetModLocalization(\"Venoxis\")\n\nL:SetGeneralLocalization({\n\tname = \"Верховный жрец Веноксис\"\n})\n\n-------------------\n--  Jeklik  --\n-------------------\nL = DBM:GetModLocalization(\"Jeklik\")\n\nL:SetGeneralLocalization({\n\tname = \"Верховная жрица Джеклик\"\n})\n\n-------------------\n--  Marli  --\n-------------------\nL = DBM:GetModLocalization(\"Marli\")\n\nL:SetGeneralLocalization({\n\tname = \"Верховная жрица Мар'ли\"\n})\n\n-------------------\n--  Thekal  --\n-------------------\nL = DBM:GetModLocalization(\"Thekal\")\n\nL:SetGeneralLocalization({\n\tname = \"Верховный жрец Текал\"\n})\n\nL:SetWarningLocalization({\n\tWarnSimulKill\t= \"Первый адд пал - воскрешение через ~15 сек.\"\n})\n\nL:SetTimerLocalization({\n\tTimerSimulKill\t= \"Воскрешение\"\n})\n\nL:SetOptionLocalization({\n\tWarnSimulKill\t= \"Объявлять о смерти первого адда\",\n\tTimerSimulKill\t= \"Показывать время до воскрешения жреца\"\n})\n\nL:SetMiscLocalization({\n\tPriestDied\t= \"%s умирает.\",\n\tYellPhase2\t= \"Ширвалла, наполни меня своим ГНЕВОМ!\",\n\tYellKill\t= \"Хаккар больше не властен надо мной! Наконец-то я обрел покой!\",\n\tThekal\t\t= \"Верховный жрец Текал\",\n\tZath\t\t= \"Ревнитель Зат\",\n\tLorKhan\t\t= \"Ревнитель Лор'Кхан\"\n})\n\n-------------------\n--  Arlokk  --\n-------------------\nL = DBM:GetModLocalization(\"Arlokk\")\n\nL:SetGeneralLocalization({\n\tname = \"Верховная жрица Арлокк\"\n})\n\n-------------------\n--  Hakkar  --\n-------------------\nL = DBM:GetModLocalization(\"Hakkar\")\n\nL:SetGeneralLocalization({\n\tname = \"Хаккар\"\n})\n\n-------------------\n--  Bloodlord  --\n-------------------\nL = DBM:GetModLocalization(\"Bloodlord\")\n\nL:SetGeneralLocalization({\n\tname = \"Мандокир Повелитель Крови\"\n})\n\nL:SetMiscLocalization({\n\tBloodlord\t= \"Мандокир Повелитель Крови\",\n\tOhgan\t\t= \"Охган\",\n\tGazeYell\t= \"Я за тобой слежу\"\n})\n\n-------------------\n--  Edge of Madness  --\n-------------------\nL = DBM:GetModLocalization(\"EdgeOfMadness\")\n\nL:SetGeneralLocalization({\n\tname = \"Грань Безумия\"\n})\n\nL:SetMiscLocalization({\n\tHazzarah = \"Хазза'рах\",\n\tRenataki = \"Ренатаки\",\n\tWushoolay = \"Вушулай\",\n\tGrilek = \"Гри'лек\"\n})\n\n-------------------\n--  Gahz'ranka  --\n-------------------\nL = DBM:GetModLocalization(\"Gahzranka\")\n\nL:SetGeneralLocalization({\n\tname = \"Газ'ранка\"\n})\n\n-------------------\n--  Jindo  --\n-------------------\nL = DBM:GetModLocalization(\"Jindo\")\n\nL:SetGeneralLocalization({\n\tname = \"Мастер проклятий Джин'до\"\n})\n"
  },
  {
    "path": "DBM-ZG/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n-------------------\n--  Venoxis  --\n-------------------\nL = DBM:GetModLocalization(\"Venoxis\")\n\nL:SetGeneralLocalization({\n\tname = \"高階祭司溫諾希斯\"\n})\n\n-------------------\n--  Jeklik  --\n-------------------\nL = DBM:GetModLocalization(\"Jeklik\")\n\nL:SetGeneralLocalization({\n\tname = \"高階祭司耶克里克\"\n})\n\n-------------------\n--  Marli  --\n-------------------\nL = DBM:GetModLocalization(\"Marli\")\n\nL:SetGeneralLocalization({\n\tname = \"高階祭司瑪俐\"\n})\n\n-------------------\n--  Thekal  --\n-------------------\nL = DBM:GetModLocalization(\"Thekal\")\n\nL:SetGeneralLocalization({\n\tname = \"高階祭司塞卡爾\"\n})\n\nL:SetWarningLocalization({\n\tWarnSimulKill\t= \"大約15秒內複活\"\n})\n\nL:SetTimerLocalization({\n\tTimerSimulKill\t= \"複活術\"\n})\n\nL:SetOptionLocalization({\n\tWarnSimulKill\t= \"通告第一個怪物倒下,馬上將複活\",\n\tTimerSimulKill\t= \"顯示牧師複活計時器\"\n})\n\nL:SetMiscLocalization({\n\tPriestDied\t= \"%s死了。\",\n\tYellPhase2\t= \"希瓦拉爾，給我憤怒的力量吧！\",\n\tYellKill\t= \"哈卡再也不能束縛我了！我終於可以安息了！\",\n\tThekal\t\t= \"高階祭司塞卡爾\",\n\tZath\t\t= \"狂熱者札斯\",\n\tLorKhan\t\t= \"狂熱者洛卡恩\"\n})\n\n-------------------\n--  Arlokk  --\n-------------------\nL = DBM:GetModLocalization(\"Arlokk\")\n\nL:SetGeneralLocalization({\n\tname = \"高階祭司阿洛克\"\n})\n\n-------------------\n--  Hakkar  --\n-------------------\nL = DBM:GetModLocalization(\"Hakkar\")\n\nL:SetGeneralLocalization({\n\tname = \"哈卡\"\n})\n\n-------------------\n--  Bloodlord  --\n-------------------\nL = DBM:GetModLocalization(\"Bloodlord\")\n\nL:SetGeneralLocalization({\n\tname = \"血領主曼多基爾\"\n})\n\nL:SetMiscLocalization({\n\tBloodlord\t= \"血領主曼多基爾\",\n\tOhgan\t\t= \"奧根\",\n\tGazeYell\t= \"我正在監視你\"\n})\n\n-------------------\n--  Edge of Madness  --\n-------------------\nL = DBM:GetModLocalization(\"EdgeOfMadness\")\n\nL:SetGeneralLocalization({\n\tname = \"瘋狂之緣\"\n})\n\nL:SetMiscLocalization({\n\tHazzarah = \"哈劄拉爾\",\n\tRenataki = \"雷納塔基\",\n\tWushoolay = \"烏蘇雷\",\n\tGrilek = \"格裏雷克\"\n})\n\n-------------------\n--  Gahz'ranka  --\n-------------------\nL = DBM:GetModLocalization(\"Gahzranka\")\n\nL:SetGeneralLocalization({\n\tname = \"加茲蘭卡\"\n})\n\n-------------------\n--  Jindo  --\n-------------------\nL = DBM:GetModLocalization(\"Jindo\")\n\nL:SetGeneralLocalization({\n\tname = \"妖術師金度\"\n})\n"
  },
  {
    "path": "DBM-ZulAman/Akil'zon.lua",
    "content": "local mod\t= DBM:NewMod(\"Akilzon\", \"DBM-ZulAman\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(23574)\nmod:SetEncounterID(1189)\n\nmod:SetZone()\nmod:SetUsedIcons(1)\n\nmod:RegisterCombat(\"combat_yell\", L.YellPull)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 43648\"\n)\n\nlocal warnStorm\t\t\t= mod:NewTargetNoFilterAnnounce(43648, 4)\nlocal warnStormSoon\t\t= mod:NewSoonAnnounce(43648, 5, 3)\n\nlocal specWarnStorm\t\t= mod:NewSpecialWarningSpell(43648, nil, nil, nil, 2, 2)\n\nlocal timerStorm\t\t= mod:NewCastTimer(8, 43648, nil, nil, nil, 2, nil, DBM_COMMON_L.HEALER_ICON)\nlocal timerStormCD\t\t= mod:NewCDTimer(48.3, 43648, nil, nil, nil, 3, nil, nil, true) -- REVIEW! ~5s variance [48.3-53.0]. Added \"keep\" arg (10m Frostmourne 2022/10/28) - 53.0, 48.3, 52.7\n\nlocal berserkTimer\t\t= mod:NewBerserkTimer(600)\n\nmod:AddRangeFrameOption(\"10\")\nmod:AddSetIconOption(\"StormIcon\", 43648, true, false, {1})\n\nfunction mod:OnCombatStart(delay)\n\twarnStormSoon:Schedule(43)\n\ttimerStormCD:Start(48) -- (10m Frostmourne 2022/10/28) - 48.0\n\tberserkTimer:Start(-delay)\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Show()\n\tend\nend\n\nfunction mod:OnCombatEnd()\n\tif self.Options.RangeFrame then\n\t\tDBM.RangeCheck:Hide()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 43648 then\n\t\twarnStorm:Show(args.destName)\n\t\tspecWarnStorm:Show()\n\t\tspecWarnStorm:Play(\"specialsoon\")\n\t\ttimerStorm:Start()\n\t\twarnStormSoon:Schedule(43)\n\t\ttimerStormCD:Start()\n\t\tif self.Options.RangeFrame then\n\t\t\tDBM.RangeCheck:Hide()\n\t\t\tself:Schedule(10, function()\n\t\t\t\tDBM.RangeCheck:Show()\n\t\t\tend)\n\t\tend\n\t\tif self.Options.StormIcon then\n\t\t\tself:SetIcon(args.destName, 1, 1)\n\t\tend\n\tend\nend\n"
  },
  {
    "path": "DBM-ZulAman/DBM-ZulAman.toc",
    "content": "## Interface: 30300\n## Title:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Zul'Aman|r\n## Title-zhCN:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0祖阿曼|r\n## Title-koKR:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0줄아만|r\n## Title-ruRU:|cffffe00a<|r|cffff7d0aDBM|r|cffffe00a>|r |cff69ccf0Зул'Аман|r\n## LoadOnDemand: 1\n## RequiredDeps: DBM-Core\n## SavedVariables: DBMZulAman_AllSavedVars\n## SavedVariablesPerCharacter: DBMZulAman_SavedStats\n## X-DBM-Mod: 1\n## X-DBM-Mod-Category: BC\n## X-DBM-StatTypes: normal, timewalker\n## X-DBM-Mod-MapID: 782\n## X-DBM-Mod-Sort: 1005\n## X-DBM-Mod-Name: Zul'Aman\n## X-DBM-Mod-Name-zhCN: 祖阿曼\n## X-DBM-Mod-Name-ruRU: Зул'Аман\n## X-DBM-Mod-LoadZone: Zul'Aman\n## X-DBM-Mod-LoadZone-zhCN: 祖阿曼\n\nlocalization.en.lua\nlocalization.cn.lua\nlocalization.de.lua\nlocalization.es.lua\nlocalization.fr.lua\nlocalization.kr.lua\nlocalization.ru.lua\nlocalization.tw.lua\n\nAkil'zon.lua\nNalorakk.lua\nJan'alai.lua\nHalazzi.lua\nMalacrass.lua\nZul'jin.lua\n"
  },
  {
    "path": "DBM-ZulAman/Halazzi.lua",
    "content": "local mod\t= DBM:NewMod(\"Halazzi\", \"DBM-ZulAman\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(23577)\nmod:SetEncounterID(1192)\n\nmod:SetZone()\n\nmod:RegisterCombat(\"combat_yell\", L.YellPull) -- on Trinity Core there is no yell\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 43303 43139 43290\",\n\t\"SPELL_AURA_REMOVED 43303\",\n\t\"SPELL_SUMMON 43302\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal warnShock\t\t\t= mod:NewTargetNoFilterAnnounce(43303, 3, \"RemoveMagic\")\nlocal warnEnrage\t\t= mod:NewSpellAnnounce(43139, 3, nil, \"Tank|Healer|RemoveEnrage\")\nlocal warnFrenzy\t\t= mod:NewSpellAnnounce(43290, 3)\nlocal warnSpirit\t\t= mod:NewAnnounce(\"WarnSpirit\", 4, 39414)\nlocal warnNormal\t\t= mod:NewAnnounce(\"WarnNormal\", 4, 39414)\n\nlocal specWarnTotem\t\t= mod:NewSpecialWarningSpell(43302, \"Dps\", nil, nil, 1, 2)\nlocal specWarnEnrage\t= mod:NewSpecialWarningDispel(43139, \"RemoveEnrage\", nil, nil, 1, 6)\n\nlocal timerShock\t\t= mod:NewTargetTimer(12, 43303, nil, \"RemoveMagic\", nil, 5, nil, DBM_COMMON_L.MAGIC_ICON)\n\nlocal berserkTimer\t\t= mod:NewBerserkTimer(600)\n\nfunction mod:OnCombatStart(delay)\n\tberserkTimer:Start(-delay)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 43303 then -- Flame Shock\n\t\twarnShock:Show(args.destName)\n\t\ttimerShock:Show(args.destName)\n\telseif spellId == 43139 then -- Enrage\n\t\tif self.Options.SpecWarn43139dispel then\n\t\t\tspecWarnEnrage:Show(args.destName)\n\t\t\tspecWarnEnrage:Play(\"enrage\")\n\t\telse\n\t\t\twarnEnrage:Show()\n\t\tend\n\telseif spellId == 43290 then -- Lynx Flurry\n\t\twarnFrenzy:Show()\n\tend\nend\n\nfunction mod:SPELL_AURA_REMOVED(args)\n\tif args.spellId == 43303 then -- Flame Shock\n\t\ttimerShock:Stop(args.destName)\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 43302 then -- Lightning Totem\n\t\tspecWarnTotem:Show()\n\t\tspecWarnTotem:Play(\"attacktotem\")\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.YellSpirit or msg:find(L.YellSpirit) then\n\t\twarnSpirit:Show()\n\telseif msg == L.YellNormal or msg:find(L.YellNormal) then\n\t\twarnNormal:Show()\n\tend\nend\n"
  },
  {
    "path": "DBM-ZulAman/Jan'alai.lua",
    "content": "local mod\t= DBM:NewMod(\"Janalai\", \"DBM-ZulAman\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(23578)\nmod:SetEncounterID(1191)\n\nmod:SetZone()\nmod:SetUsedIcons(1)\n\nmod:RegisterCombat(\"combat_yell\", L.YellPull)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 43140\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal warnFlame\t\t\t= mod:NewTargetNoFilterAnnounce(43140, 3)\nlocal warnAddsSoon\t\t= mod:NewSoonAnnounce(43962, 3)\n\nlocal specWarnAdds\t\t= mod:NewSpecialWarningSpell(43962, \"dps\", nil, nil, 1, 2)\nlocal specWarnBomb\t\t= mod:NewSpecialWarningDodge(42630, nil, nil, nil, 2, 2)\nlocal specWarnBreath\t= mod:NewSpecialWarningYou(43140, nil, nil, nil, 1, 2)\nlocal yellFlamebreath\t= mod:NewYell(43140)\n\nlocal timerBomb\t\t\t= mod:NewCastTimer(12, 42630, nil, nil, nil, 3)--Cast bar?\nlocal timerAdds\t\t\t= mod:NewNextTimer(89.9, 43962, nil, nil, nil, 1, nil, DBM_COMMON_L.DAMAGE_ICON) -- ~0.3s variance. (10m Frostmourne 2022/10/28) - 90.3, 90.0\n\nlocal berserkTimer\t\t= mod:NewBerserkTimer(600)\n\nmod:AddSetIconOption(\"FlameIcon\", 43140, true, false, {1})\n\nfunction mod:FlameTarget(targetname)\n\tif not targetname then return end\n\tif targetname == UnitName(\"player\") then\n\t\tspecWarnBreath:Show()\n\t\tspecWarnBreath:Play(\"targetyou\")\n\t\tyellFlamebreath:Yell()\n\telse\n\t\twarnFlame:Show(targetname)\n\tend\n\tif self.Options.FlameIcon then\n\t\tself:SetIcon(targetname, 1, 1)\n\tend\nend\n\nfunction mod:OnCombatStart(delay)\n\ttimerAdds:Start(10-delay) -- (10m Frostmourne 2022/10/28 +0.5s delay) - 9.8\n\tberserkTimer:Start(-delay)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tif args.spellId == 43140 then -- Flame Breath\n\t\tself:BossTargetScanner(args.sourceGUID, \"FlameTarget\", 0.1, 8)\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.YellAdds or msg:find(L.YellAdds) then\n\t\tspecWarnAdds:Show()\n\t\twarnAddsSoon:Schedule(82)\n\t\ttimerAdds:Start()\n\telseif msg == L.YellBomb or msg:find(L.YellBomb) then\n\t\tspecWarnBomb:Show()\n\t\tspecWarnBomb:Play(\"watchstep\")\n\t\ttimerBomb:Start()\n\tend\nend\n"
  },
  {
    "path": "DBM-ZulAman/Malacrass.lua",
    "content": "local mod\t= DBM:NewMod(\"Malacrass\", \"DBM-ZulAman\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(24239)\nmod:SetEncounterID(1193)\n\nmod:SetZone()\n\nmod:RegisterCombat(\"yell\", L.YellPull)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_CAST_START 43548 43451 43431\",\n\t\"SPELL_CAST_SUCCESS 43383 43429\",\n\t\"SPELL_AURA_APPLIED 43501 43421\",\n\t\"SPELL_SUMMON 43436\"\n)\n\n--TODO, GTFO for standing in shit\nlocal warnSiphon\t= mod:NewTargetNoFilterAnnounce(43501, 3)\nlocal warnBoltSoon\t= mod:NewPreWarnAnnounce(43383, 5, 3)\nlocal warnHeal1\t\t= mod:NewCastAnnounce(43548, 3)\nlocal warnHeal2\t\t= mod:NewCastAnnounce(43451, 3)\nlocal warnHeal3\t\t= mod:NewCastAnnounce(43431, 3)\nlocal warnHeal4\t\t= mod:NewTargetNoFilterAnnounce(43421, 3)\nlocal warnPatch\t\t= mod:NewSpellAnnounce(43429, 3)\n\nlocal specWarnBolt\t= mod:NewSpecialWarningSpell(43383, nil, nil, nil, 2, 2)\nlocal specWarnHeal1\t= mod:NewSpecialWarningInterrupt(43548, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnHeal2\t= mod:NewSpecialWarningInterrupt(43451, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnHeal3\t= mod:NewSpecialWarningInterrupt(43431, \"HasInterrupt\", nil, nil, 1, 2)\nlocal specWarnHeal4\t= mod:NewSpecialWarningDispel(43421, \"MagicDispeller\", nil, nil, 1, 2)\nlocal specWarnTotem\t= mod:NewSpecialWarningSwitch(43436, \"Dps\", nil, nil, 1, 2)\n\nlocal timerSiphon\t= mod:NewTargetTimer(30, 43501, nil, nil, nil, 6)\nlocal timerBoltCD\t= mod:NewCDTimer(41, 43383, nil, nil, nil, 2, nil, DBM_COMMON_L.HEALER_ICON) -- ~3s variance? (10m Frostmourne 2022/10/28) - 43.0, 42.3, 44.0, 44.1, 44.0\nlocal timerBolt\t\t= mod:NewCastTimer(10, 43383, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON)\nlocal timerPatch\t= mod:NewCastTimer(20, 43429, nil, nil, nil, 3)\n\nfunction mod:OnCombatStart()\n\ttimerBoltCD:Start(30) -- (10m Frostmourne 2022/10/28) - pull:30.0\n\twarnBoltSoon:Schedule(25)\nend\n\nfunction mod:SPELL_CAST_START(args)\n\tlocal spellId = args.spellId\n\tif spellId == 43548 then -- Healing Wave\n\t\tif self.Options.SpecWarn43548interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnHeal1:Show(args.sourceName)\n\t\t\tspecWarnHeal1:Play(\"kickcast\")\n\t\telse\n\t\t\twarnHeal1:Show()\n\t\tend\n\telseif spellId == 43451 then -- Holy Light\n\t\tif self.Options.SpecWarn43451interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnHeal2:Show(args.sourceName)\n\t\t\tspecWarnHeal2:Play(\"kickcast\")\n\t\telse\n\t\t\twarnHeal2:Show()\n\t\tend\n\telseif spellId == 43431 then -- Flash Heal\n\t\tif self.Options.SpecWarn43431interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnHeal3:Show(args.sourceName)\n\t\t\tspecWarnHeal3:Play(\"kickcast\")\n\t\telse\n\t\t\twarnHeal3:Show()\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tlocal spellId = args.spellId\n\tif spellId == 43383 then -- Spirit Bolts\n\t\tspecWarnBolt:Show()\n\t\tspecWarnBolt:Play(\"aesoon\")\n\t\twarnBoltSoon:Schedule(35)\n\t\ttimerBolt:Start()\n\t\ttimerBoltCD:Start()\n\telseif spellId == 43429 then -- Consescration\n\t\twarnPatch:Show()\n\t\ttimerPatch:Start()\n\tend\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 43501 then -- Siphon Soul\n\t\twarnSiphon:Show(args.destName)\n\t\ttimerSiphon:Show(args.destName)\n\telseif spellId == 43421 and not args:IsDestTypePlayer() then -- Lifebloom\n\t\tif self:CheckInterruptFilter(args.sourceGUID, false, true) then\n\t\t\tspecWarnHeal4:Show(args.destName)\n\t\t\tspecWarnHeal4:Play(\"dispelboss\")\n\t\telse\n\t\t\twarnHeal4:Show(args.destName)\n\t\tend\n\tend\nend\n\nfunction mod:SPELL_SUMMON(args)\n\tif args.spellId == 43436 then -- Fire Nova Totem\n\t\tspecWarnTotem:Show()\n\t\tspecWarnTotem:Play(\"attacktotem\")\n\tend\nend\n"
  },
  {
    "path": "DBM-ZulAman/Nalorakk.lua",
    "content": "local mod\t= DBM:NewMod(\"Nalorakk\", \"DBM-ZulAman\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(23576)\nmod:SetEncounterID(1190)\n\nmod:SetZone()\n\nmod:RegisterCombat(\"combat_yell\", L.YellPull)\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 42398\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal warnBear\t\t\t= mod:NewAnnounce(\"WarnBear\", 4, 39414)\nlocal warnBearSoon\t\t= mod:NewAnnounce(\"WarnBearSoon\", 3, 39414)\nlocal warnNormal\t\t= mod:NewAnnounce(\"WarnNormal\", 4, 39414)\nlocal warnNormalSoon\t= mod:NewAnnounce(\"WarnNormalSoon\", 3, 39414)\nlocal warnSilence\t\t= mod:NewSpellAnnounce(42398, 3)\n\nlocal timerBear\t\t\t= mod:NewTimer(45, \"TimerBear\", 39414, nil, nil, 6) -- Shape of the Bear. REVIEW! (10m Frostmourne 2022/10/28) - 75.0\nlocal timerNormal\t\t= mod:NewTimer(30, \"TimerNormal\", 39414, nil, nil, 6) -- (10m Frostmourne 2022/10/28) - pull:74.5, 75.0\n\nlocal berserkTimer\t\t= mod:NewBerserkTimer(600)\n\nfunction mod:OnCombatStart(delay)\n\ttimerBear:Start() -- (10m Frostmourne 2022/10/28) - 45.0\n\twarnBearSoon:Schedule(40)\n\tberserkTimer:Start(-delay)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tif args.spellId == 42398 and self:AntiSpam(4, 1) then\n\t\twarnSilence:Show()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.YellBear or msg:find(L.YellBear) then\n\t\ttimerBear:Cancel()\n\t\twarnBearSoon:Cancel()\n\t\twarnBear:Show()\n\t\ttimerNormal:Start()\n\t\twarnNormalSoon:Schedule(25)\n\telseif msg == L.YellNormal or msg:find(L.YellNormal) then\n\t\ttimerNormal:Cancel()\n\t\twarnNormalSoon:Cancel()\n\t\twarnNormal:Show()\n\t\ttimerBear:Start()\n\t\twarnBearSoon:Schedule(40)\n\tend\nend\n"
  },
  {
    "path": "DBM-ZulAman/Zul'jin.lua",
    "content": "local mod\t= DBM:NewMod(\"ZulJin\", \"DBM-ZulAman\")\nlocal L\t\t= mod:GetLocalizedStrings()\n\nmod:SetRevision(\"20250929220131\")\nmod:SetCreatureID(23863)\nmod:SetEncounterID(1194)\n\nmod:SetZone()\n\nmod:RegisterCombat(\"combat_yell\", L.YellPull) -- on Trinity Core I think the yell is swapped with intro yell\n\nmod:RegisterEventsInCombat(\n\t\"SPELL_AURA_APPLIED 43093 43150 43213\",\n\t\"SPELL_CAST_SUCCESS 43095\",\n\t\"CHAT_MSG_MONSTER_YELL\"\n)\n\nlocal warnThrow\t\t\t= mod:NewTargetNoFilterAnnounce(43093, 3, nil, \"Tank|Healer\")\nlocal warnParalyze\t\t= mod:NewSpellAnnounce(43095, 4)\nlocal warnParalyzeSoon\t= mod:NewPreWarnAnnounce(43095, 5, 3)\nlocal warnClaw\t\t\t= mod:NewTargetNoFilterAnnounce(43150, 3)\nlocal warnFlame\t\t\t= mod:NewSpellAnnounce(43213, 3)\nlocal warnPhase\t\t\t= mod:NewPhaseChangeAnnounce(2, nil, nil, nil, nil, nil, 2)\n\nlocal specWarnParalyze\t= mod:NewSpecialWarningDispel(43095, \"RemoveMagic\", nil, nil, 1, 2)\n\nlocal timerParalyzeCD\t= mod:NewCDTimer(27, 43095, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON) -- (10m Frostmourne 2022/10/28) - 27.0\n\nfunction mod:OnCombatStart()\n\tself:SetStage(1)\nend\n\nfunction mod:SPELL_AURA_APPLIED(args)\n\tlocal spellId = args.spellId\n\tif spellId == 43093 then\n\t\twarnThrow:Show(args.destName)\n\telseif spellId == 43150 then\n\t\twarnClaw:Show(args.destName)\n\telseif spellId == 43213 then\n\t\twarnFlame:Show()\n\tend\nend\n\nfunction mod:SPELL_CAST_SUCCESS(args)\n\tif args.spellId == 43095 then\n\t\twarnParalyzeSoon:Schedule(22)\n\t\tif self.Options.SpecWarn43095dispel and self:CheckDispelFilter(\"magic\") then\n\t\t\tspecWarnParalyze:Show(DBM_COMMON_L.ALLIES)\n\t\t\tspecWarnParalyze:Play(\"helpdispel\")\n\t\telse\n\t\t\twarnParalyze:Show()\n\t\tend\n\t\ttimerParalyzeCD:Start()\n\tend\nend\n\nfunction mod:CHAT_MSG_MONSTER_YELL(msg)\n\tif msg == L.YellPhase2 or msg:find(L.YellPhase2) then\n\t\twarnPhase:Show(DBM_CORE_L.AUTO_ANNOUNCE_TEXTS.stage:format(2))\n\t\twarnPhase:Play(\"ptwo\")\n\t\tself:SetStage(2)\n\telseif msg == L.YellPhase3 or msg:find(L.YellPhase3) then\n\t\twarnParalyzeSoon:Cancel()\n\t\ttimerParalyzeCD:Cancel()\n\t\twarnPhase:Show(DBM_CORE_L.AUTO_ANNOUNCE_TEXTS.stage:format(3))\n\t\twarnPhase:Play(\"pthree\")\n\t\tself:SetStage(3)\n\telseif msg == L.YellPhase4 or msg:find(L.YellPhase4) then\n\t\twarnPhase:Show(DBM_CORE_L.AUTO_ANNOUNCE_TEXTS.stage:format(4))\n\t\twarnPhase:Play(\"pfour\")\n\t\tself:SetStage(4)\n\telseif msg == L.YellPhase5 or msg:find(L.YellPhase5) then\n\t\twarnPhase:Show(DBM_CORE_L.AUTO_ANNOUNCE_TEXTS.stage:format(5))\n\t\twarnPhase:Play(\"pfive\")\n\t\tself:SetStage(5)\n\tend\nend\n"
  },
  {
    "path": "DBM-ZulAman/localization.cn.lua",
    "content": "if GetLocale() ~= \"zhCN\" then return end\nlocal L\n\n---------------\n--  Nalorakk --\n---------------\nL = DBM:GetModLocalization(\"Nalorakk\")\n\nL:SetGeneralLocalization({\n\tname = \"纳洛拉克\"\n})\n\nL:SetWarningLocalization({\n\tWarnBear\t\t= \"熊形态\",\n\tWarnBearSoon\t= \"5秒后变为熊形态\",\n\tWarnNormal\t\t= \"人形态\",\n\tWarnNormalSoon\t= \"5秒后变为人形态\"\n})\n\nL:SetTimerLocalization({\n\tTimerBear\t\t= \"熊形态\",\n\tTimerNormal\t\t= \"人形态\"\n})\n\nL:SetOptionLocalization({\n\tWarnBear\t\t= \"Show warning for Bear form\",--Translate\n\tWarnBearSoon\t= \"Show pre-warning for Bear form\",--Translate\n\tWarnNormal\t\t= \"Show warning for Normal form\",--Translate\n\tWarnNormalSoon\t= \"Show pre-warning for Normal form\",--Translate\n\tTimerBear\t\t= \"Show timer for Bear form\",--Translate\n\tTimerNormal\t\t= \"Show timer for Normal form\"--Translate\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"上前去，卫兵！杀戮时间开始了！\",\n\tYellBear\t= \"你们召唤野兽？你马上就要大大的后悔了！\",\n\tYellNormal\t= \"纳洛拉克，变形，出发！\"\n})\n\n---------------\n--  Akil'zon --\n---------------\nL = DBM:GetModLocalization(\"Akilzon\")\n\nL:SetGeneralLocalization({\n\tname = \"埃基尔松\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"我是猎鹰，而你们，就是猎物！\",\n})\n\n---------------\n--  Jan'alai --\n---------------\nL = DBM:GetModLocalization(\"Janalai\")\n\nL:SetGeneralLocalization({\n\tname = \"加亚莱\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"风之圣魂将是你的梦魇！\",\n\tYellBomb\t= \"烧死你们！\",\n\tYellAdds\t= \"雌鹰哪里去了？快去孵蛋！\"\n})\n\n--------------\n--  Halazzi --\n--------------\nL = DBM:GetModLocalization(\"Halazzi\")\n\nL:SetGeneralLocalization({\n\tname = \"哈尔拉兹\"\n})\n\nL:SetWarningLocalization({\n\tWarnSpirit\t= \"灵魂分裂\",\n\tWarnNormal\t= \"灵魂消失\"\n})\n\nL:SetOptionLocalization({\n\tWarnSpirit\t= \"Show warning for Spirit phase\",--Translate\n\tWarnNormal\t= \"Show warning for Normal phase\"--Translate\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"在利爪与尖牙面前，下跪吧，祈祷吧，颤栗吧！\",\n\tYellSpirit\t= \"狂野的灵魂与我同在……\",\n\tYellNormal\t= \"灵魂，到我这里来！\"\n})\n\n--------------------------\n--  Hex Lord Malacrass --\n--------------------------\nL = DBM:GetModLocalization(\"Malacrass\")\n\nL:SetGeneralLocalization({\n\tname = \"妖术领主玛拉卡斯\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"阴影将会降临在你们头上……\"\n})\n\n--------------\n--  Zul'jin --\n--------------\nL = DBM:GetModLocalization(\"ZulJin\")\n\nL:SetGeneralLocalization({\n\tname = \"祖尔金\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t= \"Nobody badduh dan me!\",\n\tYellPhase2\t= \"你看我有许多新招，变个熊……\",\n\tYellPhase3\t= \"变成猎鹰，谁也别想逃出我的眼睛！\",\n\tYellPhase4\t= \"现在来让你看看我的尖牙和利爪！\",\n\tYellPhase5\t= \"龙鹰，不用抬头就能看见！\"\n})\n"
  },
  {
    "path": "DBM-ZulAman/localization.de.lua",
    "content": "if GetLocale() ~= \"deDE\" then return end\nlocal L\n\n---------------\n--  Nalorakk --\n---------------\nL = DBM:GetModLocalization(\"Nalorakk\")\n\nL:SetGeneralLocalization({\n\tname = \"Nalorakk\"\n})\n\nL:SetWarningLocalization({\n\tWarnBear\t\t= \"Bärform\",\n\tWarnBearSoon\t= \"Bärform in 5 Sek\",\n\tWarnNormal\t\t= \"Normale Form\",\n\tWarnNormalSoon\t= \"Normale Form in 5 Sek\"\n})\n\nL:SetTimerLocalization({\n\tTimerBear\t\t= \"Bär\",\n\tTimerNormal\t\t= \"Normale Form\"\n})\n\nL:SetOptionLocalization({\n\tWarnBear\t\t= \"Show warning for Bear form\",--Translate\n\tWarnBearSoon\t= \"Show pre-warning for Bear form\",--Translate\n\tWarnNormal\t\t= \"Show warning for Normal form\",--Translate\n\tWarnNormalSoon\t= \"Show pre-warning for Normal form\",--Translate\n\tTimerBear\t\t= \"Show timer for Bear form\",--Translate\n\tTimerNormal\t\t= \"Show timer for Normal form\"--Translate\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Vorwärts, Wachen! Zeit zum Töt'n!\",\n\tYellBear\t= \"Ihr provoziert die Bestie, jetzt werdet Ihr sie kennenlernen!\",\n\tYellNormal\t= \"Macht Platz für Nalorakk!\"\n})\n\n---------------\n--  Akil'zon --\n---------------\nL = DBM:GetModLocalization(\"Akilzon\")\n\nL:SetGeneralLocalization({\n\tname = \"Akil'zon\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Ich bin der Jäger! Ihr seid die Beute...\",\n})\n\n---------------\n--  Jan'alai --\n---------------\nL = DBM:GetModLocalization(\"Janalai\")\n\nL:SetGeneralLocalization({\n\tname = \"Jan'alai\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Die Geister der Winde besiegeln euer Schicksal!\",\n\tYellBomb\t= \"Jetzt sollt Ihr brennen!\",\n\tYellAdds\t= \"Wo is' meine Brut? Was ist mit den Eiern?\"\n})\n\n--------------\n--  Halazzi --\n--------------\nL = DBM:GetModLocalization(\"Halazzi\")\n\nL:SetGeneralLocalization({\n\tname = \"Halazzi\"\n})\n\nL:SetWarningLocalization({\n\tWarnSpirit\t= \"Geist spawned\",\n\tWarnNormal\t= \"Geist despawned\"\n})\n\nL:SetOptionLocalization({\n\tWarnSpirit\t= \"Show warning for Spirit phase\",--Translate\n\tWarnNormal\t= \"Show warning for Normal phase\"--Translate\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Auf die Knie und verneigt euch... vor den Reißzähnen und der Klaue!\",\n\tYellSpirit\t= \"Ich kämpfe mit wildem Geist...\",\n\tYellNormal\t= \"Geist, zurück zu mir!\"\n})\n\n--------------------------\n--  Hex Lord Malacrass --\n--------------------------\nL = DBM:GetModLocalization(\"Malacrass\")\n\nL:SetGeneralLocalization({\n\tname = \"Hexlord Malacrass\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Der Schatten wird Euch verschlingen...\"\n})\n\n--------------\n--  Zul'jin --\n--------------\nL = DBM:GetModLocalization(\"ZulJin\")\n\nL:SetGeneralLocalization({\n\tname = \"Zul'jin\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t= \"Nobody badduh dan me!\",\n\tYellPhase2\t= \"Sagt 'Hallo' zu Bruder Bär...\",\n\tYellPhase3\t= \"Niemand versteckt sich vor dem Adler!\",\n\tYellPhase4\t= \"Lernt meine Brüder kennen: Reißzahn und Klaue!\",\n\tYellPhase5\t= \"Was starrt Ihr in die Luft? Der Drachenfalke steht schon vor Euch!\"\n})\n"
  },
  {
    "path": "DBM-ZulAman/localization.en.lua",
    "content": "local L\n\n---------------\n--  Nalorakk --\n---------------\nL = DBM:GetModLocalization(\"Nalorakk\")\n\nL:SetGeneralLocalization({\n\tname = \"Nalorakk\"\n})\n\nL:SetWarningLocalization({\n\tWarnBear\t\t= \"Bear Form\",\n\tWarnBearSoon\t= \"Bear Form in 5 sec\",\n\tWarnNormal\t\t= \"Normal Form\",\n\tWarnNormalSoon\t= \"Normal Form in 5 sec\"\n})\n\nL:SetTimerLocalization({\n\tTimerBear\t\t= \"Bear Form\",\n\tTimerNormal\t\t= \"Normal Form\"\n})\n\nL:SetOptionLocalization({\n\tWarnBear\t\t= \"Show warning for Bear form\",\n\tWarnBearSoon\t= \"Show pre-warning for Bear form\",\n\tWarnNormal\t\t= \"Show warning for Normal form\",\n\tWarnNormalSoon\t= \"Show pre-warning for Normal form\",\n\tTimerBear\t\t= \"Show timer for Bear form\",\n\tTimerNormal\t\t= \"Show timer for Normal form\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Get da move on, guards! It be killin' time!\",\n\tYellBear\t= \"You call on da beast, you gonna get more dan you bargain for!\",\n\tYellNormal\t= \"Make way for Nalorakk!\"\n})\n\n---------------\n--  Akil'zon --\n---------------\nL = DBM:GetModLocalization(\"Akilzon\")\n\nL:SetGeneralLocalization({\n\tname = \"Akil'zon\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"I be da predator! You da prey...\",\n})\n\n---------------\n--  Jan'alai --\n---------------\nL = DBM:GetModLocalization(\"Janalai\")\n\nL:SetGeneralLocalization({\n\tname = \"Jan'alai\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Spirits of da wind be your doom!\",\n\tYellBomb\t= \"I burn ya now!\",\n\tYellAdds\t= \"Where ma hatcha? Get to work on dem eggs!\"\n})\n\n--------------\n--  Halazzi --\n--------------\nL = DBM:GetModLocalization(\"Halazzi\")\n\nL:SetGeneralLocalization({\n\tname = \"Halazzi\"\n})\n\nL:SetWarningLocalization({\n\tWarnSpirit\t= \"Spirit Phase\",\n\tWarnNormal\t= \"Normal Phase\"\n})\n\nL:SetOptionLocalization({\n\tWarnSpirit\t= \"Show warning for Spirit phase\",\n\tWarnNormal\t= \"Show warning for Normal phase\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Get on ya knees and bow.... to da fang and claw!\",\n\tYellSpirit\t= \"I fight wit' untamed spirit....\",\n\tYellNormal\t= \"Spirit, come back to me!\"\n})\n\n--------------------------\n--  Hex Lord Malacrass --\n--------------------------\nL = DBM:GetModLocalization(\"Malacrass\")\n\nL:SetGeneralLocalization({\n\tname = \"Hex Lord Malacrass\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Da shadow gonna fall on you....\"\n})\n\n--------------\n--  Zul'jin --\n--------------\nL = DBM:GetModLocalization(\"ZulJin\")\n\nL:SetGeneralLocalization({\n\tname = \"Zul'jin\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Nobody badduh dan me!\",\n\tYellPhase2\t= \"Got me some new tricks... like me brudda bear....\",\n\tYellPhase3\t= \"Dere be no hidin' from da eagle!\",\n\tYellPhase4\t= \"Let me introduce you to me new bruddas: fang and claw!\",\n\tYellPhase5\t= \"Ya don' have to look to da sky to see da dragonhawk!\"\n})\n"
  },
  {
    "path": "DBM-ZulAman/localization.es.lua",
    "content": "if GetLocale() ~= \"esMX\" or GetLocale() ~= \"esES\" then return end\nlocal L\n\n---------------\n--  Nalorakk --\n---------------\nL = DBM:GetModLocalization(\"Nalorakk\")\n\nL:SetGeneralLocalization({\n\tname = \"Nalorakk\"\n})\n\nL:SetWarningLocalization({\n\tWarnBear\t\t= \"Forma de oso\",\n\tWarnBearSoon\t= \"Forma de oso en 5 seg\",\n\tWarnNormal\t\t= \"Forma normal\",\n\tWarnNormalSoon\t= \"Forma normal en 5 seg\"\n})\n\nL:SetTimerLocalization({\n\tTimerBear\t\t= \"Bär\",\n\tTimerNormal\t\t= \"Normale Form\"\n})\n\nL:SetOptionLocalization({\n\tWarnBear\t\t= \"Show warning for Bear form\",--Translate\n\tWarnBearSoon\t= \"Show pre-warning for Bear form\",--Translate\n\tWarnNormal\t\t= \"Show warning for Normal form\",--Translate\n\tWarnNormalSoon\t= \"Show pre-warning for Normal form\",--Translate\n\tTimerBear\t\t= \"Show timer for Bear form\",--Translate\n\tTimerNormal\t\t= \"Show timer for Normal form\"--Translate\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"¡Moveos guardias! ¡Es hora de matar!\", -- esES\n--\tYellPull\t= \"¡Muévanse guardias! ¡Es hora de matar!\", -- esMX\n\tYellBear\t= \"¡Si llamáis a la bestia, vais a recibir más de lo que esperáis!\",\n\tYellNormal\t= \"¡Dejad paso al Nalorakk!\"\n})\n\n---------------\n--  Akil'zon --\n---------------\nL = DBM:GetModLocalization(\"Akilzon\")\n\nL:SetGeneralLocalization({\n\tname = \"Akil'zon\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"¡Yo soy el depredador! Vosotros la presa...\", -- esES\n--\tYellPull\t= \"¡Yo soy el depredador! Ustedes la presa...\", -- esMX\n})\n\n---------------\n--  Jan'alai --\n---------------\nL = DBM:GetModLocalization(\"Janalai\")\n\nL:SetGeneralLocalization({\n\tname = \"Jan'alai\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"¡Los eh'píritus del viento serán vueh'tra perdición!\", -- esES\n--\tYellPull\t= \"¡Los espíritus del viento serán su maldición!\", -- esMX\n\tYellBomb\t= \"¡Ahora os quemaré!\",\n\tYellAdds\t= \"¿Dónde está mi criador? ¡A por los huevos!\"\n})\n\n--------------\n--  Halazzi --\n--------------\nL = DBM:GetModLocalization(\"Halazzi\")\n\nL:SetGeneralLocalization({\n\tname = \"Halazzi\"\n})\n\nL:SetWarningLocalization({\n\tWarnSpirit\t= \"Sale espíritu\",\n\tWarnNormal\t= \"Desaparece espíritu\"\n})\n\nL:SetOptionLocalization({\n\tWarnSpirit\t= \"Show warning for Spirit phase\",--Translate\n\tWarnNormal\t= \"Show warning for Normal phase\"--Translate\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"¡Arrodillaos... ante la garra y el colmillo!\", -- esES\n--\tYellPull\t= \"¡Arrodíllense... ante la garra y el colmillo!\", -- esMX\n\tYellSpirit\t= \"Lucho con libertad de espíritu...\",\n\tYellNormal\t= \"¡Espíritu, vuelve a mí!\"\n})\n\n--------------------------\n--  Hex Lord Malacrass --\n--------------------------\nL = DBM:GetModLocalization(\"Malacrass\")\n\nL:SetGeneralLocalization({\n\tname = \"Señor aojador Malacrass\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Las sombras caerán sobre vosotros...\"\n})\n\n--------------\n--  Zul'jin --\n--------------\nL = DBM:GetModLocalization(\"ZulJin\")\n\nL:SetGeneralLocalization({\n\tname = \"Zul'jin\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t= \"Nobody badduh dan me!\",\n\tYellPhase2\t= \"Tengo algunos trucos nuevos... como mi hermano el oso...\",\n\tYellPhase3\t= \"¡No podéis esconderos del águila!\",\n\tYellPhase4\t= \"¡Dejad que os presente a mis nuevos hermanos: colmillo y garra!\",\n\tYellPhase5\t= \"¡No tenéis que mirar al cielo para ver al dracohalcón!\"\n})\n"
  },
  {
    "path": "DBM-ZulAman/localization.fr.lua",
    "content": "if GetLocale() ~= \"frFR\" then return end\nlocal L\n\n---------------\n--  Nalorakk --\n---------------\nL = DBM:GetModLocalization(\"Nalorakk\")\n\nL:SetGeneralLocalization({\n\tname = \"Nalorakk\"\n})\n\nL:SetWarningLocalization({\n\tWarnBear\t\t= \"Forme d'ours\",\n\tWarnBearSoon\t= \"Forme d'ours dans 5 sec\",\n\tWarnNormal\t\t= \"Forme normale\",\n\tWarnNormalSoon\t= \"Forme normale dans 5 sec\"\n})\n\nL:SetTimerLocalization({\n\tTimerBear\t\t= \"Forme d'ours\",\n\tTimerNormal\t\t= \"Forme normale\"\n})\n\nL:SetOptionLocalization({\n\tWarnBear\t\t= \"Afficher une alerte pour la forme d'ours\",\n\tWarnBearSoon\t= \"Afficher une pré-alerte pour la forme d'ours\",\n\tWarnNormal\t\t= \"Afficher une alerte pour la forme normale\",\n\tWarnNormalSoon\t= \"Afficher une pré-alerte pour la forme normale\",\n\tTimerBear\t\t= \"Afficher un timer pour la forme d'ours\",\n\tTimerNormal\t\t= \"Afficher un timer pour la forme normale\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Gardes, bougez-vous ! C'est l'heure du massacre !\",\n--\tYellBear\t= \"You call on da beast, you gonna get more dan you bargain for!\",\n--\tYellNormal\t= \"Make way for Nalorakk!\"\n})\n\n---------------\n--  Akil'zon --\n---------------\nL = DBM:GetModLocalization(\"Akilzon\")\n\nL:SetGeneralLocalization({\n\tname = \"Akil'zon\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Moi, chuis le prédateur ! Vous, z'êtes la proie…\",\n})\n\n---------------\n--  Jan'alai --\n---------------\nL = DBM:GetModLocalization(\"Janalai\")\n\nL:SetGeneralLocalization({\n\tname = \"Jan'alai\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Les esprits du vent, ils vont être votre fin !\",\n--\tYellBomb\t= \"I burn ya now!\",\n--\tYellAdds\t= \"Where ma hatcha? Get to work on dem eggs!\"\n})\n\n--------------\n--  Halazzi --\n--------------\nL = DBM:GetModLocalization(\"Halazzi\")\n\nL:SetGeneralLocalization({\n\tname = \"Halazzi\"\n})\n\n L:SetWarningLocalization({\n\tWarnSpirit\t= \"Phase spirituelle\",\n\tWarnNormal\t= \"Phase normale\"\n })\n\nL:SetOptionLocalization({\n\tWarnSpirit\t= \"Afficher une alerte pour la phase spirituelle\",\n\tWarnNormal\t= \"Afficher une alerte pour la phase normale\"\n })\n\nL:SetMiscLocalization({\n\tYellPull\t= \"À genoux, les idiots… devant la griffe et le croc !\",\n--\tYellSpirit\t= \"I fight wit' untamed spirit....\",\n--\tYellNormal\t= \"Spirit, come back to me!\"\n})\n\n--------------------------\n--  Hex Lord Malacrass --\n--------------------------\nL = DBM:GetModLocalization(\"Malacrass\")\n\nL:SetGeneralLocalization({\n\tname = \"Seigneur des maléfices Malacrass\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"L'ombre, elle va vous tomber dessus.\"\n})\n\n--------------\n--  Zul'jin --\n--------------\nL = DBM:GetModLocalization(\"ZulJin\")\n\nL:SetGeneralLocalization({\n\tname = \"Zul'jin\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t= \"Nobody badduh dan me!\",\n--\tYellPhase2\t= \"Got me some new tricks... like me brudda bear....\",\n--\tYellPhase3\t= \"Dere be no hidin' from da eagle!\",\n--\tYellPhase4\t= \"Let me introduce you to me new bruddas: fang and claw!\",\n--\tYellPhase5\t= \"Ya don' have to look to da sky to see da dragonhawk!\"\n})\n"
  },
  {
    "path": "DBM-ZulAman/localization.kr.lua",
    "content": "if GetLocale() ~= \"koKR\" then return end\nlocal L\n\n---------------\n--  Nalorakk --\n---------------\nL = DBM:GetModLocalization(\"Nalorakk\")\n\nL:SetGeneralLocalization({\n\tname = \"날로라크\"\n})\n\nL:SetWarningLocalization({\n\tWarnBear\t\t= \"곰 형상\",\n\tWarnBearSoon\t= \"5초 후 곰 형상\",\n\tWarnNormal\t\t= \"일반 형상\",\n\tWarnNormalSoon\t= \"5초 후 일반 형상\"\n})\n\nL:SetTimerLocalization({\n\tTimerBear\t\t= \"곰 형상\",\n\tTimerNormal\t\t= \"일반 형상\"\n})\n\nL:SetOptionLocalization({\n\tWarnBear\t\t= \"곰 형상 경고 보기\",\n\tWarnBearSoon\t= \"곰 형상 사전 경고 보기\",\n\tWarnNormal\t\t= \"일반 형상 경고 보기\",\n\tWarnNormalSoon\t= \"일반 형상 사전 경고 보기\",\n\tTimerBear\t\t= \"곰 형상 타이머 바 보기\",\n\tTimerNormal\t\t= \"일반 형상 타이머 바 보기\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"움직여라, 경비병들! 신나게 썰어 봐라!\",\n\tYellBear\t= \"너희들이 짐승을 불러냈다. 놀랄 준비나 해라!\",\n\tYellNormal\t= \"날로라크 나가신다!\"\n})\n\n---------------\n--  Akil'zon --\n---------------\nL = DBM:GetModLocalization(\"Akilzon\")\n\nL:SetGeneralLocalization({\n\tname = \"아킬존\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"나는 사냥꾼이다! 너흰 먹잇감이고...\",\n})\n\n---------------\n--  Jan'alai --\n---------------\nL = DBM:GetModLocalization(\"Janalai\")\n\nL:SetGeneralLocalization({\n\tname = \"잔알라이\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"바람의 혼이 너희를 쓸어내리라!\",\n\tYellBomb\t= \"태워버리겠다!\",\n\tYellAdds\t= \"다 어디 갔지? 당장 알을 부화시켜!\"\n})\n\n--------------\n--  Halazzi --\n--------------\nL = DBM:GetModLocalization(\"Halazzi\")\n\nL:SetGeneralLocalization({\n\tname = \"할라지\"\n})\n\nL:SetWarningLocalization({\n\tWarnSpirit\t= \"영혼 단계\",\n\tWarnNormal\t= \"일반 단계\"\n})\n\nL:SetOptionLocalization({\n\tWarnSpirit\t= \"영혼 단계 경고 보기\",\n\tWarnNormal\t= \"일반 단계 경고 보기\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"무릎 꿇고 경배하라... 송곳니와 발톱에!\",\n\tYellSpirit\t= \"야생의 혼이 내 편이다...\",\n\tYellNormal\t= \"혼이여, 이리 돌아오라!\"\n})\n\n--------------------------\n--  Hex Lord Malacrass --\n--------------------------\nL = DBM:GetModLocalization(\"Malacrass\")\n\nL:SetGeneralLocalization({\n\tname = \"주술군주 말라크라스\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"너희에게 그림자가 드리우리라...\"\n})\n\n--------------\n--  Zul'jin --\n--------------\nL = DBM:GetModLocalization(\"ZulJin\")\n\nL:SetGeneralLocalization({\n\tname = \"줄진\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t= \"Nobody badduh dan me!\",\n\tYellPhase2\t= \"새로운 기술을 익혔지... 내 형제, 곰처럼...\",\n\tYellPhase3\t= \"독수리의 눈을 피할 수는 없다!\",\n\tYellPhase4\t= \"내 새로운 형제, 송곳니와 발톱을 보아라!\",\n\tYellPhase5\t= \"용매를 하늘에서만 찾을 필요는 없다!\"\n})\n"
  },
  {
    "path": "DBM-ZulAman/localization.ru.lua",
    "content": "if GetLocale() ~= \"ruRU\" then return end\nlocal L\n\n---------------\n--  Nalorakk --\n---------------\nL = DBM:GetModLocalization(\"Nalorakk\")\n\nL:SetGeneralLocalization({\n\tname = \"Налоракк\"\n})\n\nL:SetWarningLocalization({\n\tWarnBear\t\t= \"Форма медведя\",\n\tWarnBearSoon\t= \"Форма медведя через 5 секунд\",\n\tWarnNormal\t\t= \"Обычная форма\",\n\tWarnNormalSoon\t= \"Обычная форма через 5 секунд\"\n})\n\nL:SetTimerLocalization({\n\tTimerBear\t\t= \"Форма медведя\",\n\tTimerNormal\t\t= \"Обычная форма\"\n})\n\nL:SetOptionLocalization({\n\tWarnBear\t\t= \"Show warning for Bear form\",--Translate\n\tWarnBearSoon\t= \"Show pre-warning for Bear form\",--Translate\n\tWarnNormal\t\t= \"Show warning for Normal form\",--Translate\n\tWarnNormalSoon\t= \"Show pre-warning for Normal form\",--Translate\n\tTimerBear\t\t= \"Show timer for Bear form\",--Translate\n\tTimerNormal\t\t= \"Show timer for Normal form\"--Translate\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Вперед, стражники! Начнем резню!\",\n\tYellBear\t= \"Если вызвать чудовище, то мало не покажется, точно говорю!\",\n\tYellNormal\t= \"Пропустите Налоракка!\"\n})\n\n---------------\n--  Akil'zon --\n---------------\nL = DBM:GetModLocalization(\"Akilzon\")\n\nL:SetGeneralLocalization({\n\tname = \"Акил'зон\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Я – охотник! Вы – добыча!\",\n})\n\n---------------\n--  Jan'alai --\n---------------\nL = DBM:GetModLocalization(\"Janalai\")\n\nL:SetGeneralLocalization({\n\tname = \"Джан'алаи\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Духи ветра станут вашей погибелью!\",\n\tYellBomb\t= \"Сгиньте в огне!\",\n\tYellAdds\t= \"Где мои Наседки? Пора за яйца приниматься!\"\n})\n\n--------------\n--  Halazzi --\n--------------\nL = DBM:GetModLocalization(\"Halazzi\")\n\nL:SetGeneralLocalization({\n\tname = \"Халаззи\"\n})\n\nL:SetWarningLocalization({\n\tWarnSpirit\t= \"Призывает дух\",\n\tWarnNormal\t= \"Дух исчезает\"\n})\n\nL:SetOptionLocalization({\n\tWarnSpirit\t= \"Show warning for Spirit phase\",--Translate\n\tWarnNormal\t= \"Show warning for Normal phase\"--Translate\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"На колени!! Склонитесь пред клыком и когтем!\",\n\tYellSpirit\t= \"Со мною дикий дух...\",\n\tYellNormal\t= \"О дух, вернись ко мне!\"\n})\n\n--------------------------\n--  Hex Lord Malacrass --\n--------------------------\nL = DBM:GetModLocalization(\"Malacrass\")\n\nL:SetGeneralLocalization({\n\tname = \"Повелитель проклятий Малакрасс\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"На вас падет тень...\"\n})\n\n--------------\n--  Zul'jin --\n--------------\nL = DBM:GetModLocalization(\"ZulJin\")\n\nL:SetGeneralLocalization({\n\tname = \"Зул'джин\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t= \"Nobody badduh dan me!\",\n\tYellPhase2\t= \"Выучил новый фокус… прямо как братишка-медведь...\",\n\tYellPhase3\t= \"От орла нигде не скрыться!\",\n\tYellPhase4\t= \"Позвольте представить моих двух братцев: клык и коготь!\",\n\tYellPhase5\t= \"Для того чтобы увидеть дракондора, в небо смотреть необязательно!\"\n})\n"
  },
  {
    "path": "DBM-ZulAman/localization.tw.lua",
    "content": "if GetLocale() ~= \"zhTW\" then return end\nlocal L\n\n---------------\n--  Nalorakk --\n---------------\nL = DBM:GetModLocalization(\"Nalorakk\")\n\nL:SetGeneralLocalization({\n\tname = \"納羅拉克\"\n})\n\nL:SetWarningLocalization({\n\tWarnBear\t\t= \"熊階段\",\n\tWarnBearSoon\t= \"5秒後 熊階段\",\n\tWarnNormal\t\t= \"普通階段\",\n\tWarnNormalSoon\t= \"5秒後 普通階段\"\n})\n\nL:SetTimerLocalization({\n\tTimerBear\t\t= \"熊階段\",\n\tTimerNormal\t\t= \"普通階段\"\n})\n\nL:SetOptionLocalization({\n\tWarnBear\t\t= \"Show warning for Bear form\",--Translate\n\tWarnBearSoon\t= \"Show pre-warning for Bear form\",--Translate\n\tWarnNormal\t\t= \"Show warning for Normal form\",--Translate\n\tWarnNormalSoon\t= \"Show pre-warning for Normal form\",--Translate\n\tTimerBear\t\t= \"Show timer for Bear form\",--Translate\n\tTimerNormal\t\t= \"Show timer for Normal form\"--Translate\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"上前去，衛兵!殺戮時間開始了!\",\n\tYellBear\t= \"你們既然將野獸召喚出來，就將付出更多的代價!\",\n\tYellNormal\t= \"沒有人可以擋在納羅拉克的面前!\"\n})\n\n---------------\n--  Akil'zon --\n---------------\nL = DBM:GetModLocalization(\"Akilzon\")\n\nL:SetGeneralLocalization({\n\tname = \"阿奇爾森\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"我是掠食者!而你們，就是獵物!\",\n})\n\n---------------\n--  Jan'alai --\n---------------\nL = DBM:GetModLocalization(\"Janalai\")\n\nL:SetGeneralLocalization({\n\tname = \"賈納雷\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"風之聖魂將是你的夢魘!\",\n\tYellBomb\t= \"燒死你們!\",\n\tYellAdds\t= \"雌鷹哪裡去啦?快去孵蛋!\"\n})\n\n--------------\n--  Halazzi --\n--------------\nL = DBM:GetModLocalization(\"Halazzi\")\n\nL:SetGeneralLocalization({\n\tname = \"Халаззи\"\n})\n\nL:SetWarningLocalization({\n\tWarnSpirit\t= \"靈魂出現了\",\n\tWarnNormal\t= \"靈魂消失了\"\n})\n\nL:SetOptionLocalization({\n\tWarnSpirit\t= \"Show warning for Spirit phase\",--Translate\n\tWarnNormal\t= \"Show warning for Normal phase\"--Translate\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"在利爪與尖牙面前下跪吧，祈禱吧，顫慄吧!\",\n\tYellSpirit\t= \"狂野的靈魂與我同在......\",\n\tYellNormal\t= \"靈魂，回到我這裡來!\"\n})\n\n--------------------------\n--  Hex Lord Malacrass --\n--------------------------\nL = DBM:GetModLocalization(\"Malacrass\")\n\nL:SetGeneralLocalization({\n\tname = \"妖術領主瑪拉克雷斯\"\n})\n\nL:SetMiscLocalization({\n\tYellPull\t= \"Da shadow gonna fall on you....\"--Translate\n})\n\n--------------\n--  Zul'jin --\n--------------\nL = DBM:GetModLocalization(\"ZulJin\")\n\nL:SetGeneralLocalization({\n\tname = \"祖爾金\"\n})\n\nL:SetMiscLocalization({\n--\tYellPull\t= \"Nobody badduh dan me!\",\n\tYellPhase2\t= \"賜給我一些新的力量……讓我像熊一樣……\",\n\tYellPhase3\t= \"在雄鷹之下無所遁形!\",\n\tYellPhase4\t= \"讓我來介紹我的新兄弟:尖牙和利爪!\",\n\tYellPhase5\t= \"你不需要仰望天空才看得到龍鷹!\"\n})\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n\n# DBM-Warmane (3.3.5a)\n\n[![Game Version](https://img.shields.io/badge/wow-3.3.5-blue.svg)](https://github.com/Zidras/DBM-Warmane)\n[![GitHub Actions](https://github.com/Zidras/DBM-Warmane/workflows/lint/badge.svg?branch=main&event=push)](https://github.com/Zidras/DBM-Warmane/actions?query=workflow%3Alint+branch%3Amain)\n[![Twitch](https://img.shields.io/twitch/status/the_zidras?style=social)](https://www.twitch.tv/the_zidras)\n[![Discord](https://img.shields.io/discord/598993375479463946.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/CyVWDWS)\n[![PayPal](https://img.shields.io/endpoint?url=https://www.stormfx.com/img/svg/paypal.json)](https://paypal.me/zidras)\n\n\n</div>\n\nCore addon backport from retail by Barsoomx: (https://github.com/Barsoomx/DBM-wowcircle).\n\nThis repository aims to deliver more accurate timers and features from retail to all four Warmane WotLK realms - Icecrown, Lordaeron, Frostmourne and Onyxia.\n\n# What's new?\n- Boss modules now have dedicated fields for type of bar and associated voice speech (countdown for bars, and sound on Special Warnings)\n![image](https://user-images.githubusercontent.com/10605951/120121605-44e74c00-c19c-11eb-809b-7ceaee2336c8.png)\n- Support for Voice Packs:\n![image](https://user-images.githubusercontent.com/10605951/120121681-bf17d080-c19c-11eb-9c5c-77e131e92c14.png)\n- Integration with Bunny's Weakauras backport:\n![image](https://user-images.githubusercontent.com/10605951/130357929-c8cb1cb7-e5ff-40bf-a36f-2587d966bca5.png)\n- And more!\n\n## Support\nIf you would like to show your appreciation for my work (**which is by no means required**), you can donate in two ways:\n- [**Streamelements**](https://streamelements.com/the_zidras/tip): your Twitch name will show on my stream at the time of the donation, and in the widget as the latest donation!\n- [**PayPal**](https://paypal.me/zidras).\n\n# HOW TO INSTALL FOR THE FIRST TIME\n**Disclaimer: If you have used DBM before and you wish to save old DBM profiles, backup your WTF folder, because we will be performing a clean install as this is a retail backport and therefore it is not compatible with 2010's version of DBM. To proceed with the clean installation process, do the following steps:**\n\n1. On your addons folder (Interface/Addons), select every DBM folder (everything that starts with DBM-) and **delete** them.\n2. On your SavedVariables folder (WTF/Account/[AccountName]/SavedVariables), select every DBM file (everything that starts with DBM-) and **delete** them. **THIS STEP WILL REMOVE YOUR DBM CONFIGURATIONS/PROFILES!**\n3. On **each** of your Characters SavedVariables folder (WTF/Account/[AccountName]/[ServerName]/[CharacterName]/SavedVariables). Select every DBM file (everything that starts with DBM-) and **delete** them. **THIS STEP WILL REMOVE YOUR DBM CONFIGURATIONS/PROFILES!**\n\n**With no remnants of old DBM files we are now ready to start the installation process.**\n\n1. Download the addon from the **main** repository (https://github.com/Zidras/DBM-Warmane/archive/refs/heads/main.zip).\n2. Inside the zip file, open DBM-Warmane-main. Copy/Paste all those folders (DBM-Core, DBM-GUI, etc) into your addons folder (Interface/Addons). DO NOT put the DBM-Warmane-main folder directly into the addon folder, it will not work.\n3. Load your game client into your character selection screen. On the bottom left corner, click AddOns and enable all the DBM entries like so:\n![image](https://user-images.githubusercontent.com/10605951/127546459-1dd1eb99-8360-40c2-9ffa-093e365cd01b.png)\n![image](https://user-images.githubusercontent.com/10605951/127546757-e086103a-34bd-48c5-8555-a734031e1ecc.png)\n\n# HOW TO KEEP THE ADDON UPDATED\nUpdating DBM follows the standard procedure that applies to any addon installation. Everytime there are new changes*, do these steps:\n1. Download the addon from the **main** repository (https://github.com/Zidras/DBM-Warmane/archive/refs/heads/main.zip).\n2. Inside the zip file, open DBM-Warmane-main. Select all the folders (DBM-Core, DBM-GUI, etc) and press Copy (Ctrl+C).\n3. (**Advisable**) On your addons folder (Interface/Addons), before pasting, select the DBM folders that are there and delete them (you will not lose your profiles doing this, don't worry - those are on WTF folder and there is no need to touch that anymore). This ensures that there is no remnant file that could potentially conflict with latest releases.\n4. On your addons folder (Interface/Addons), Paste (Ctrl+V) the previously copied folders here. DO NOT put the DBM-Warmane-main folder directly into the addon folder, it will not work.\n\n*To know when there are changes, you can Star/Watch this repository on GitHub (this requires a GitHub account) to receive notifications. Additionally, you can join the [Discord](https://discord.gg/CyVWDWS) server where there is a dedicated channel that posts everytime there is a new commit.\n\n# QUICK START\nTo open the options window, type `/dbm` into your chat and hit enter or use the minimap icon. For more commands, type `/dbm help`.\n\n# Problems\n* If you've discovered something that's clearly wrong, or if you get an error, please create a [ticket](https://github.com/Zidras/DBM-Warmane/issues).\n* If the problem is related to a boss mechanic or timer, a [Transcriptor](https://github.com/Zidras/Transcriptor-WOTLK) log (with debug level 3) will be required - instructions can be found [here](https://github.com/Zidras/Transcriptor-WOTLK#how-to-use).\n* Feel free to join our [Discord](https://discord.gg/CyVWDWS) to talk, get help and discuss anything DBM related!\n"
  }
]